From cf9e0466c435545c4ba8ab3ca9a6e85944b43968 Mon Sep 17 00:00:00 2001 From: Jordan Blasenhauer Date: Thu, 8 Aug 2024 15:05:18 +0200 Subject: [PATCH] multisite settings only on services done --- src/ui/builder/easy_mode.py | 10 +- src/ui/builder/utils/form.py | 16 +- src/ui/client/tests/advanced.json | 6912 ++++++++++++ src/ui/client/tests/advanced.py | 4119 +++++++ src/ui/client/tests/advanced.txt | 1 + src/ui/client/tests/builder/advanced_mode.py | 2 +- src/ui/client/tests/builder/easy_mode.py | 2 +- src/ui/client/tests/builder/raw_mode.py | 2 +- src/ui/client/tests/builder/utils/form.py | 16 +- src/ui/client/tests/raw.json | 10022 ++++++++++++++++- src/ui/client/tests/raw.txt | 2 +- src/ui/main.py | 27 +- 12 files changed, 21098 insertions(+), 33 deletions(-) create mode 100644 src/ui/client/tests/advanced.json create mode 100644 src/ui/client/tests/advanced.py create mode 100644 src/ui/client/tests/advanced.txt diff --git a/src/ui/builder/easy_mode.py b/src/ui/builder/easy_mode.py index 9ef70842d..9fd5fb784 100644 --- a/src/ui/builder/easy_mode.py +++ b/src/ui/builder/easy_mode.py @@ -1,13 +1,21 @@ from .utils.form import get_forms, get_service_settings -def easy_mode_builder(templates: list[dict], plugins: list, global_config: dict, total_config: dict, service_name: str, is_new: bool = False) -> str: +def easy_mode_builder( + templates: list[dict], + plugins: list, + global_config: dict, + total_config: dict, + service_name: str, + is_new: bool = False, +) -> str: """Render forms with global config data. ATM we don't need templates but we need to pass at least one to the function (it will simply not override anything). """ # We need settings = get_service_settings(service_name, global_config, total_config) + builder = [ { "type": "card", diff --git a/src/ui/builder/utils/form.py b/src/ui/builder/utils/form.py index bbf5a7701..de63cdc33 100644 --- a/src/ui/builder/utils/form.py +++ b/src/ui/builder/utils/form.py @@ -43,7 +43,7 @@ def get_plugins_multisite(plugins: list) -> list: plugin_multisite["settings"] = multisite_settings plugins_multisite.append(plugin_multisite) - return plugins + return plugins_multisite def get_forms( @@ -61,7 +61,19 @@ def get_forms( """ # Copy of the plugins, and get the plugins by context if needed # In services page, we want only multisite settings, but in global config we want both - plugins_base = get_plugins_multisite(plugins) if only_multisite else copy.deepcopy(plugins) + plugins_base = get_plugins_multisite(plugins) if only_multisite else plugins + + # This template will be used to show default value or value if exists + TEMPLATE_DEFAULT = [ + { + "name": "default", + "steps": [], + "configs": {}, + "settings": {}, + } + ] + + templates = TEMPLATE_DEFAULT + templates # Update SERVER_NAME to be empty if new if is_new and "SERVER_NAME" in settings: diff --git a/src/ui/client/tests/advanced.json b/src/ui/client/tests/advanced.json new file mode 100644 index 000000000..9689a877a --- /dev/null +++ b/src/ui/client/tests/advanced.json @@ -0,0 +1,6912 @@ +[ + { + "type": "card", + "containerColumns": { + "pc": 12, + "tablet": 12, + "mobile": 12 + }, + "widgets": [ + { + "type": "Title", + "data": { + "title": "app1.example.com", + "type": "container", + "lowercase": true + } + }, + { + "type": "Subtitle", + "data": { + "subtitle": "services_manage_subtitle", + "type": "container", + "subtitleClass": "mb-4" + } + }, + { + "type": "Templates", + "data": { + "templates": { + "advanced": { + "default": [ + { + "id": "general", + "stream": "partial", + "name": "General", + "description": "The general settings for the server", + "version": "0.1", + "type": "core", + "method": "manual", + "page": false, + "settings": { + "SERVER_NAME": { + "context": "multisite", + "default": "www.example.com", + "help": "List of the virtual hosts served by bunkerweb.", + "id": "server-name", + "label": "Server name", + "regex": "^((\\S{1,255})(?!.*\\s\\2(\\s|$)))?(\\s(\\S{1,255})(?!.*\\s\\5(\\s|$)))*$", + "type": "text", + "containerClass": "z-6", + "pattern": "^((\\S{1,255})(?!.*\\s\\2(\\s|$)))?(\\s(\\S{1,255})(?!.*\\s\\5(\\s|$)))*$", + "inpType": "input", + "name": "Server name", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "app1.example.com", + "method": "ui", + "prev_value": "app1.example.com", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "List of the virtual hosts served by bunkerweb." + } + ] + }, + "SERVER_TYPE": { + "context": "multisite", + "default": "http", + "help": "Server type : http or stream.", + "id": "server-type", + "label": "Server type", + "regex": "^(http|stream)$", + "type": "select", + "containerClass": "z-5", + "pattern": "^(http|stream)$", + "inpType": "select", + "name": "Server type", + "values": [ + "http", + "stream" + ], + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "http", + "method": "default", + "prev_value": "http", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Server type : http or stream." + } + ] + }, + "LISTEN_STREAM": { + "context": "multisite", + "default": "yes", + "help": "Enable listening for non-ssl (passthrough).", + "id": "listen-stream", + "label": "Listen stream", + "regex": "^(yes|no)$", + "type": "check", + "containerClass": "z-4", + "pattern": "^(yes|no)$", + "inpType": "checkbox", + "name": "Listen stream", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "yes", + "method": "default", + "prev_value": "yes", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Enable listening for non-ssl (passthrough)." + } + ] + }, + "LISTEN_STREAM_PORT": { + "context": "multisite", + "default": "1337", + "help": "Listening port for non-ssl (passthrough).", + "id": "listen-stream-port", + "label": "Listen stream port", + "regex": "^[0-9]+$", + "type": "text", + "containerClass": "z-3", + "pattern": "^[0-9]+$", + "inpType": "input", + "name": "Listen stream port", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "1337", + "method": "default", + "prev_value": "1337", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Listening port for non-ssl (passthrough)." + } + ] + }, + "LISTEN_STREAM_PORT_SSL": { + "context": "multisite", + "default": "4242", + "help": "Listening port for ssl (passthrough).", + "id": "listen-stream-port-ssl", + "label": "Listen stream port ssl", + "regex": "^[0-9]+$", + "type": "text", + "containerClass": "z-2", + "pattern": "^[0-9]+$", + "inpType": "input", + "name": "Listen stream port ssl", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "4242", + "method": "default", + "prev_value": "4242", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Listening port for ssl (passthrough)." + } + ] + }, + "USE_UDP": { + "context": "multisite", + "default": "no", + "help": "UDP listen instead of TCP (stream).", + "id": "use-udp", + "label": "Listen UDP", + "regex": "^(yes|no)$", + "type": "check", + "containerClass": "z-1", + "pattern": "^(yes|no)$", + "inpType": "checkbox", + "name": "Listen UDP", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "no", + "method": "default", + "prev_value": "no", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "UDP listen instead of TCP (stream)." + } + ] + }, + "IS_DRAFT": { + "context": "multisite", + "default": "no", + "help": "Internal use : set to yes when the service is in draft mode.", + "id": "internal-use-draft", + "label": "internal use draft", + "regex": "^(yes|no)$", + "type": "check", + "containerClass": "z-0", + "pattern": "^(yes|no)$", + "inpType": "checkbox", + "name": "internal use draft", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "no", + "method": "default", + "prev_value": "no", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Internal use : set to yes when the service is in draft mode." + } + ] + } + }, + "checksum": null + }, + { + "id": "antibot", + "stream": "no", + "name": "Antibot", + "description": "Bot detection by using a challenge.", + "version": "1.0", + "type": "core", + "method": "manual", + "page": true, + "settings": { + "USE_ANTIBOT": { + "context": "multisite", + "default": "no", + "help": "Activate antibot feature.", + "id": "use-antibot", + "label": "Antibot challenge", + "regex": "^(no|cookie|javascript|captcha|recaptcha|hcaptcha|turnstile)$", + "type": "select", + "containerClass": "z-10", + "pattern": "^(no|cookie|javascript|captcha|recaptcha|hcaptcha|turnstile)$", + "inpType": "select", + "name": "Antibot challenge", + "values": [ + "captcha", + "cookie", + "hcaptcha", + "javascript", + "no", + "recaptcha", + "turnstile" + ], + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "no", + "method": "default", + "prev_value": "no", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Activate antibot feature." + } + ] + }, + "ANTIBOT_URI": { + "context": "multisite", + "default": "/challenge", + "help": "Unused URI that clients will be redirected to to solve the challenge.", + "id": "antibot-uri", + "label": "Antibot URL", + "regex": "^\\/[\\w\\].~:\\/?#\\[@!$\\&'\\(\\)*+,;=\\-]*$", + "type": "text", + "containerClass": "z-9", + "pattern": "^\\/[\\w\\].~:\\/?#\\[@!$\\&'\\(\\)*+,;=\\-]*$", + "inpType": "input", + "name": "Antibot URL", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "/challenge", + "method": "default", + "prev_value": "/challenge", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Unused URI that clients will be redirected to to solve the challenge." + } + ] + }, + "ANTIBOT_TIME_RESOLVE": { + "context": "multisite", + "default": "60", + "help": "Maximum time (in seconds) clients have to resolve the challenge. Once this time has passed, a new challenge will be generated.", + "id": "antibot-time-resolve", + "label": "Time to resolve", + "regex": "^[0-9]+$", + "type": "text", + "containerClass": "z-8", + "pattern": "^[0-9]+$", + "inpType": "input", + "name": "Time to resolve", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "60", + "method": "default", + "prev_value": "60", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Maximum time (in seconds) clients have to resolve the challenge. Once this time has passed, a new challenge will be generated." + } + ] + }, + "ANTIBOT_TIME_VALID": { + "context": "multisite", + "default": "86400", + "help": "Maximum validity time of solved challenges. Once this time has passed, clients will need to resolve a new one.", + "id": "antibot-time-valid", + "label": "Time valid", + "regex": "^[0-9]+$", + "type": "text", + "containerClass": "z-7", + "pattern": "^[0-9]+$", + "inpType": "input", + "name": "Time valid", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "86400", + "method": "default", + "prev_value": "86400", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Maximum validity time of solved challenges. Once this time has passed, clients will need to resolve a new one." + } + ] + }, + "ANTIBOT_RECAPTCHA_SCORE": { + "context": "multisite", + "default": "0.7", + "help": "Minimum score required for reCAPTCHA challenge.", + "id": "antibot-recaptcha-score", + "label": "reCAPTCHA score", + "regex": "^(0\\.[1-9]|1\\.0)$", + "type": "text", + "containerClass": "z-6", + "pattern": "^(0\\.[1-9]|1\\.0)$", + "inpType": "input", + "name": "reCAPTCHA score", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "0.7", + "method": "default", + "prev_value": "0.7", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Minimum score required for reCAPTCHA challenge." + } + ] + }, + "ANTIBOT_RECAPTCHA_SITEKEY": { + "context": "multisite", + "default": "", + "help": "Sitekey for reCAPTCHA challenge.", + "id": "antibot-recaptcha-sitekey", + "label": "reCAPTCHA sitekey", + "regex": "^[\\w\\-]*$", + "type": "text", + "containerClass": "z-5", + "pattern": "^[\\w\\-]*$", + "inpType": "input", + "name": "reCAPTCHA sitekey", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "", + "method": "default", + "prev_value": "", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Sitekey for reCAPTCHA challenge." + } + ] + }, + "ANTIBOT_RECAPTCHA_SECRET": { + "context": "multisite", + "default": "", + "help": "Secret for reCAPTCHA challenge.", + "id": "antibot-recaptcha-secret", + "label": "reCAPTCHA secret", + "regex": "^[\\w\\-]*$", + "type": "password", + "containerClass": "z-4", + "pattern": "^[\\w\\-]*$", + "inpType": "input", + "name": "reCAPTCHA secret", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "", + "method": "default", + "prev_value": "", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Secret for reCAPTCHA challenge." + } + ] + }, + "ANTIBOT_HCAPTCHA_SITEKEY": { + "context": "multisite", + "default": "", + "help": "Sitekey for hCaptcha challenge.", + "id": "antibot-hcaptcha-sitekey", + "label": "hCaptcha sitekey", + "regex": "^[a-zA-Z0-9\\-]*$", + "type": "text", + "containerClass": "z-3", + "pattern": "^[a-zA-Z0-9\\-]*$", + "inpType": "input", + "name": "hCaptcha sitekey", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "", + "method": "default", + "prev_value": "", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Sitekey for hCaptcha challenge." + } + ] + }, + "ANTIBOT_HCAPTCHA_SECRET": { + "context": "multisite", + "default": "", + "help": "Secret for hCaptcha challenge.", + "id": "antibot-hcaptcha-secret", + "label": "hCaptcha secret", + "regex": "^\\w*$", + "type": "password", + "containerClass": "z-2", + "pattern": "^\\w*$", + "inpType": "input", + "name": "hCaptcha secret", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "", + "method": "default", + "prev_value": "", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Secret for hCaptcha challenge." + } + ] + }, + "ANTIBOT_TURNSTILE_SITEKEY": { + "context": "multisite", + "default": "", + "help": "Sitekey for Turnstile challenge.", + "id": "antibot-turnstile-sitekey", + "label": "Turnstile sitekey", + "regex": "^(0x[\\w\\-]+)?$", + "type": "text", + "containerClass": "z-1", + "pattern": "^(0x[\\w\\-]+)?$", + "inpType": "input", + "name": "Turnstile sitekey", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "", + "method": "default", + "prev_value": "", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Sitekey for Turnstile challenge." + } + ] + }, + "ANTIBOT_TURNSTILE_SECRET": { + "context": "multisite", + "default": "", + "help": "Secret for Turnstile challenge.", + "id": "antibot-turnstile-secret", + "label": "Turnstile secret", + "regex": "^(0x[\\w\\-]+)?$", + "type": "password", + "containerClass": "z-0", + "pattern": "^(0x[\\w\\-]+)?$", + "inpType": "input", + "name": "Turnstile secret", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "", + "method": "default", + "prev_value": "", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Secret for Turnstile challenge." + } + ] + } + }, + "checksum": null + }, + { + "id": "authbasic", + "stream": "no", + "name": "Auth basic", + "description": "Enforce login before accessing a resource or the whole site using HTTP basic auth method.", + "version": "1.0", + "type": "core", + "method": "manual", + "page": false, + "settings": { + "USE_AUTH_BASIC": { + "context": "multisite", + "default": "no", + "help": "Use HTTP basic auth", + "id": "use-auth-basic", + "label": "Use HTTP basic auth", + "regex": "^(yes|no)$", + "type": "check", + "containerClass": "z-4", + "pattern": "^(yes|no)$", + "inpType": "checkbox", + "name": "Use HTTP basic auth", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "no", + "method": "default", + "prev_value": "no", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Use HTTP basic auth" + } + ] + }, + "AUTH_BASIC_LOCATION": { + "context": "multisite", + "default": "sitewide", + "help": "URL of the protected resource or sitewide value.", + "id": "auth-basic-location", + "label": "Auth basic Location", + "regex": "^(sitewide|/[a-zA-Z0-9.\\/\\-]*)$", + "type": "text", + "containerClass": "z-3", + "pattern": "^(sitewide|/[a-zA-Z0-9.\\/\\-]*)$", + "inpType": "input", + "name": "Auth basic Location", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "sitewide", + "method": "default", + "prev_value": "sitewide", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "URL of the protected resource or sitewide value." + } + ] + }, + "AUTH_BASIC_USER": { + "context": "multisite", + "default": "changeme", + "help": "Username", + "id": "auth-basic-user", + "label": "Auth basic Username", + "regex": "^[\\w\\-]+", + "type": "text", + "containerClass": "z-2", + "pattern": "^[\\w\\-]+", + "inpType": "input", + "name": "Auth basic Username", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "changeme", + "method": "default", + "prev_value": "changeme", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Username" + } + ] + }, + "AUTH_BASIC_PASSWORD": { + "context": "multisite", + "default": "changeme", + "help": "Password", + "id": "auth-basic-password", + "label": "Password", + "regex": "^.+", + "type": "password", + "containerClass": "z-1", + "pattern": "^.+", + "inpType": "input", + "name": "Password", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "changeme", + "method": "default", + "prev_value": "changeme", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Password" + } + ] + }, + "AUTH_BASIC_TEXT": { + "context": "multisite", + "default": "Restricted area", + "help": "Text to display", + "id": "auth-basic-text", + "label": "Text", + "regex": "^.+", + "type": "text", + "containerClass": "z-0", + "pattern": "^.+", + "inpType": "input", + "name": "Text", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "Restricted area", + "method": "default", + "prev_value": "Restricted area", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Text to display" + } + ] + } + }, + "checksum": null + }, + { + "id": "badbehavior", + "stream": "yes", + "name": "Bad behavior", + "description": "Ban IP generating too much 'bad' HTTP status code in a period of time.", + "version": "1.0", + "type": "core", + "method": "manual", + "page": true, + "settings": { + "USE_BAD_BEHAVIOR": { + "context": "multisite", + "default": "yes", + "help": "Activate Bad behavior feature.", + "id": "use-bad-behavior", + "label": "Activate bad behavior", + "regex": "^(yes|no)$", + "type": "check", + "containerClass": "z-4", + "pattern": "^(yes|no)$", + "inpType": "checkbox", + "name": "Activate bad behavior", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "yes", + "method": "default", + "prev_value": "yes", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Activate Bad behavior feature." + } + ] + }, + "BAD_BEHAVIOR_STATUS_CODES": { + "context": "multisite", + "default": "400 401 403 404 405 429 444", + "help": "List of HTTP status codes considered as 'bad'.", + "id": "bad-behavior-status-code", + "label": "Bad status codes", + "regex": "^( *([1-5]\\d{2})(?!.*\\2) *)+$", + "type": "text", + "containerClass": "z-3", + "pattern": "^( *([1-5]\\d{2})(?!.*\\2) *)+$", + "inpType": "input", + "name": "Bad status codes", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "400 401 403 404 405 429 444", + "method": "default", + "prev_value": "400 401 403 404 405 429 444", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "List of HTTP status codes considered as 'bad'." + } + ] + }, + "BAD_BEHAVIOR_THRESHOLD": { + "context": "multisite", + "default": "10", + "help": "Maximum number of 'bad' HTTP status codes within the period of time before IP is banned.", + "id": "bad-behavior-threshold", + "label": "Threshold", + "regex": "^[1-9][0-9]*", + "type": "text", + "containerClass": "z-2", + "pattern": "^[1-9][0-9]*", + "inpType": "input", + "name": "Threshold", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "10", + "method": "default", + "prev_value": "10", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Maximum number of 'bad' HTTP status codes within the period of time before IP is banned." + } + ] + }, + "BAD_BEHAVIOR_COUNT_TIME": { + "context": "multisite", + "default": "60", + "help": "Period of time (in seconds) during which we count 'bad' HTTP status codes.", + "id": "bad-behavior-period", + "label": "Period (in seconds)", + "regex": "^\\d+", + "type": "text", + "containerClass": "z-1", + "pattern": "^\\d+", + "inpType": "input", + "name": "Period (in seconds)", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "60", + "method": "default", + "prev_value": "60", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Period of time (in seconds) during which we count 'bad' HTTP status codes." + } + ] + }, + "BAD_BEHAVIOR_BAN_TIME": { + "context": "multisite", + "default": "86400", + "help": "The duration time (in seconds) of a ban when the corresponding IP has reached the threshold.", + "id": "bad-behavior-ban-time", + "label": "Ban duration (in seconds)", + "regex": "^\\d+", + "type": "text", + "containerClass": "z-0", + "pattern": "^\\d+", + "inpType": "input", + "name": "Ban duration (in seconds)", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "86400", + "method": "default", + "prev_value": "86400", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "The duration time (in seconds) of a ban when the corresponding IP has reached the threshold." + } + ] + } + }, + "checksum": null + }, + { + "id": "blacklist", + "stream": "partial", + "name": "Blacklist", + "description": "Deny access based on internal and external IP/network/rDNS/ASN blacklists.", + "version": "1.0", + "type": "core", + "method": "manual", + "page": true, + "settings": { + "USE_BLACKLIST": { + "context": "multisite", + "default": "yes", + "help": "Activate blacklist feature.", + "id": "use-blacklist", + "label": "Activate blacklisting", + "regex": "^(yes|no)$", + "type": "check", + "containerClass": "z-11", + "pattern": "^(yes|no)$", + "inpType": "checkbox", + "name": "Activate blacklisting", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": true, + "value": "no", + "method": "scheduler", + "prev_value": "no", + "popovers": [ + { + "iconName": "trespass", + "text": "inp_popover_method_disabled" + }, + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Activate blacklist feature." + } + ] + }, + "BLACKLIST_IP": { + "context": "multisite", + "default": "", + "help": "List of IP/network, separated with spaces, to block.", + "id": "blacklist-ip", + "label": "Blacklist IP/network", + "regex": "^(?! )( *(((\\b25[0-5]|\\b2[0-4]\\d|\\b[01]?\\d\\d?)(\\.(25[0-5]|2[0-4]\\d|[01]?\\d\\d?)){3})(\\/([1-2][0-9]?|3[0-2]?|[04-9]))?|(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]Z{0,4}){0,4}%[0-9a-zA-Z]+|::(ffff(:0{1,4})?:)?((25[0-5]|(2[0-4]|1?\\d)?\\d)\\.){3}(25[0-5]|(2[0-4]|1?\\d)?\\d)|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1?\\d)?\\d)\\.){3}(25[0-5]|(2[0-4]|1?\\d)?\\d))(\\/(12[0-8]|1[01][0-9]|[0-9][0-9]?))?)(?!.*\\D\\2([^\\d\\/]|$)) *)*$", + "type": "text", + "containerClass": "z-10", + "pattern": "^(?! )( *(((\\b25[0-5]|\\b2[0-4]\\d|\\b[01]?\\d\\d?)(\\.(25[0-5]|2[0-4]\\d|[01]?\\d\\d?)){3})(\\/([1-2][0-9]?|3[0-2]?|[04-9]))?|(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]Z{0,4}){0,4}%[0-9a-zA-Z]+|::(ffff(:0{1,4})?:)?((25[0-5]|(2[0-4]|1?\\d)?\\d)\\.){3}(25[0-5]|(2[0-4]|1?\\d)?\\d)|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1?\\d)?\\d)\\.){3}(25[0-5]|(2[0-4]|1?\\d)?\\d))(\\/(12[0-8]|1[01][0-9]|[0-9][0-9]?))?)(?!.*\\D\\2([^\\d\\/]|$)) *)*$", + "inpType": "input", + "name": "Blacklist IP/network", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "", + "method": "default", + "prev_value": "", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "List of IP/network, separated with spaces, to block." + } + ] + }, + "BLACKLIST_RDNS": { + "context": "multisite", + "default": ".shodan.io .censys.io", + "help": "List of reverse DNS suffixes, separated with spaces, to block.", + "id": "blacklist-rdns", + "label": "Blacklist reverse DNS", + "regex": "^( *(([^ ]+)(?!.*\\3( |$))) *)*$", + "type": "text", + "containerClass": "z-9", + "pattern": "^( *(([^ ]+)(?!.*\\3( |$))) *)*$", + "inpType": "input", + "name": "Blacklist reverse DNS", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": ".shodan.io .censys.io", + "method": "default", + "prev_value": ".shodan.io .censys.io", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "List of reverse DNS suffixes, separated with spaces, to block." + } + ] + }, + "BLACKLIST_RDNS_GLOBAL": { + "context": "multisite", + "default": "yes", + "help": "Only perform RDNS blacklist checks on global IP addresses.", + "id": "blacklist-rdns-global", + "label": "Blacklist reverse DNS global IPs", + "regex": "^(yes|no)$", + "type": "check", + "containerClass": "z-8", + "pattern": "^(yes|no)$", + "inpType": "checkbox", + "name": "Blacklist reverse DNS global IPs", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "yes", + "method": "default", + "prev_value": "yes", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Only perform RDNS blacklist checks on global IP addresses." + } + ] + }, + "BLACKLIST_ASN": { + "context": "multisite", + "default": "", + "help": "List of ASN numbers, separated with spaces, to block.", + "id": "blacklist-asn", + "label": "Blacklist ASN", + "regex": "^^( *((ASN?)?(\\d+)\\b(?!.*[SN ]\\4\\b)) *)*$", + "type": "text", + "containerClass": "z-7", + "pattern": "^^( *((ASN?)?(\\d+)\\b(?!.*[SN ]\\4\\b)) *)*$", + "inpType": "input", + "name": "Blacklist ASN", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "", + "method": "default", + "prev_value": "", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "List of ASN numbers, separated with spaces, to block." + } + ] + }, + "BLACKLIST_USER_AGENT": { + "context": "multisite", + "default": "", + "help": "List of User-Agent (PCRE regex), separated with spaces, to block.", + "id": "blacklist-user-agent", + "label": "Blacklist User-Agent", + "regex": "^.*$", + "type": "text", + "containerClass": "z-6", + "pattern": "^.*$", + "inpType": "input", + "name": "Blacklist User-Agent", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "", + "method": "default", + "prev_value": "", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "List of User-Agent (PCRE regex), separated with spaces, to block." + } + ] + }, + "BLACKLIST_URI": { + "context": "multisite", + "default": "", + "help": "List of URI (PCRE regex), separated with spaces, to block.", + "id": "blacklist-uri", + "label": "Blacklist URI", + "regex": "^( *(.*)(?!.*\\2(?!.)) *)*$", + "type": "text", + "containerClass": "z-5", + "pattern": "^( *(.*)(?!.*\\2(?!.)) *)*$", + "inpType": "input", + "name": "Blacklist URI", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "", + "method": "default", + "prev_value": "", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "List of URI (PCRE regex), separated with spaces, to block." + } + ] + }, + "BLACKLIST_IGNORE_IP": { + "context": "multisite", + "default": "", + "help": "List of IP/network, separated with spaces, to ignore in the blacklist.", + "id": "blacklist-ignore-ip", + "label": "Blacklist ignore IP/network", + "regex": "^(?! )( *(((\\b25[0-5]|\\b2[0-4]\\d|\\b[01]?\\d\\d?)(\\.(25[0-5]|2[0-4]\\d|[01]?\\d\\d?)){3})(\\/([1-2][0-9]?|3[0-2]?|[04-9]))?|(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]Z{0,4}){0,4}%[0-9a-zA-Z]+|::(ffff(:0{1,4})?:)?((25[0-5]|(2[0-4]|1?\\d)?\\d)\\.){3}(25[0-5]|(2[0-4]|1?\\d)?\\d)|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1?\\d)?\\d)\\.){3}(25[0-5]|(2[0-4]|1?\\d)?\\d))(\\/(12[0-8]|1[01][0-9]|[0-9][0-9]?))?)(?!.*\\D\\2([^\\d\\/]|$)) *)*$", + "type": "text", + "containerClass": "z-4", + "pattern": "^(?! )( *(((\\b25[0-5]|\\b2[0-4]\\d|\\b[01]?\\d\\d?)(\\.(25[0-5]|2[0-4]\\d|[01]?\\d\\d?)){3})(\\/([1-2][0-9]?|3[0-2]?|[04-9]))?|(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]Z{0,4}){0,4}%[0-9a-zA-Z]+|::(ffff(:0{1,4})?:)?((25[0-5]|(2[0-4]|1?\\d)?\\d)\\.){3}(25[0-5]|(2[0-4]|1?\\d)?\\d)|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1?\\d)?\\d)\\.){3}(25[0-5]|(2[0-4]|1?\\d)?\\d))(\\/(12[0-8]|1[01][0-9]|[0-9][0-9]?))?)(?!.*\\D\\2([^\\d\\/]|$)) *)*$", + "inpType": "input", + "name": "Blacklist ignore IP/network", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "", + "method": "default", + "prev_value": "", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "List of IP/network, separated with spaces, to ignore in the blacklist." + } + ] + }, + "BLACKLIST_IGNORE_RDNS": { + "context": "multisite", + "default": "", + "help": "List of reverse DNS suffixes, separated with spaces, to ignore in the blacklist.", + "id": "blacklist-ignore-rdns", + "label": "Blacklist ignore reverse DNS", + "regex": "^( *(([^ ]+)(?!.*\\3( |$))) *)*$", + "type": "text", + "containerClass": "z-3", + "pattern": "^( *(([^ ]+)(?!.*\\3( |$))) *)*$", + "inpType": "input", + "name": "Blacklist ignore reverse DNS", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "", + "method": "default", + "prev_value": "", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "List of reverse DNS suffixes, separated with spaces, to ignore in the blacklist." + } + ] + }, + "BLACKLIST_IGNORE_ASN": { + "context": "multisite", + "default": "", + "help": "List of ASN numbers, separated with spaces, to ignore in the blacklist.", + "id": "blacklist-ignore-asn", + "label": "Blacklist ignore ASN", + "regex": "^^( *((ASN?)?(\\d+)\\b(?!.*[SN ]\\4\\b)) *)*$", + "type": "text", + "containerClass": "z-2", + "pattern": "^^( *((ASN?)?(\\d+)\\b(?!.*[SN ]\\4\\b)) *)*$", + "inpType": "input", + "name": "Blacklist ignore ASN", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "", + "method": "default", + "prev_value": "", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "List of ASN numbers, separated with spaces, to ignore in the blacklist." + } + ] + }, + "BLACKLIST_IGNORE_USER_AGENT": { + "context": "multisite", + "default": "", + "help": "List of User-Agent (PCRE regex), separated with spaces, to ignore in the blacklist.", + "id": "blacklist-ignore-user-agent", + "label": "Blacklist ignore User-Agent", + "regex": "^.*$", + "type": "text", + "containerClass": "z-1", + "pattern": "^.*$", + "inpType": "input", + "name": "Blacklist ignore User-Agent", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "", + "method": "default", + "prev_value": "", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "List of User-Agent (PCRE regex), separated with spaces, to ignore in the blacklist." + } + ] + }, + "BLACKLIST_IGNORE_URI": { + "context": "multisite", + "default": "", + "help": "List of URI (PCRE regex), separated with spaces, to ignore in the blacklist.", + "id": "blacklist-ignore-uri", + "label": "Blacklist ignore URI", + "regex": "^( *(.*)(?!.*\\2(?!.)) *)*$", + "type": "text", + "containerClass": "z-0", + "pattern": "^( *(.*)(?!.*\\2(?!.)) *)*$", + "inpType": "input", + "name": "Blacklist ignore URI", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "", + "method": "default", + "prev_value": "", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "List of URI (PCRE regex), separated with spaces, to ignore in the blacklist." + } + ] + } + }, + "checksum": null + }, + { + "id": "brotli", + "stream": "no", + "name": "Brotli", + "description": "Compress HTTP requests with the brotli algorithm.", + "version": "1.0", + "type": "core", + "method": "manual", + "page": false, + "settings": { + "USE_BROTLI": { + "context": "multisite", + "default": "no", + "help": "Use brotli", + "id": "use-brotli", + "label": "Use brotli", + "regex": "^(yes|no)$", + "type": "check", + "containerClass": "z-3", + "pattern": "^(yes|no)$", + "inpType": "checkbox", + "name": "Use brotli", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "no", + "method": "default", + "prev_value": "no", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Use brotli" + } + ] + }, + "BROTLI_TYPES": { + "context": "multisite", + "default": "application/atom+xml application/javascript application/json application/rss+xml application/vnd.ms-fontobject application/x-font-opentype application/x-font-truetype application/x-font-ttf application/x-javascript application/xhtml+xml application/xml font/eot font/opentype font/otf font/truetype image/svg+xml image/vnd.microsoft.icon image/x-icon image/x-win-bitmap text/css text/javascript text/plain text/xml", + "help": "List of MIME types that will be compressed with brotli.", + "id": "brotli-types", + "label": "MIME types", + "regex": "^(?! )( ?([\\-\\w.]+/[\\-\\w.+]+)(?!.*\\2(?!.)))+$", + "type": "text", + "containerClass": "z-2", + "pattern": "^(?! )( ?([\\-\\w.]+/[\\-\\w.+]+)(?!.*\\2(?!.)))+$", + "inpType": "input", + "name": "MIME types", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "application/atom+xml application/javascript application/json application/rss+xml application/vnd.ms-fontobject application/x-font-opentype application/x-font-truetype application/x-font-ttf application/x-javascript application/xhtml+xml application/xml font/eot font/opentype font/otf font/truetype image/svg+xml image/vnd.microsoft.icon image/x-icon image/x-win-bitmap text/css text/javascript text/plain text/xml", + "method": "default", + "prev_value": "application/atom+xml application/javascript application/json application/rss+xml application/vnd.ms-fontobject application/x-font-opentype application/x-font-truetype application/x-font-ttf application/x-javascript application/xhtml+xml application/xml font/eot font/opentype font/otf font/truetype image/svg+xml image/vnd.microsoft.icon image/x-icon image/x-win-bitmap text/css text/javascript text/plain text/xml", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "List of MIME types that will be compressed with brotli." + } + ] + }, + "BROTLI_MIN_LENGTH": { + "context": "multisite", + "default": "1000", + "help": "Minimum length for brotli compression.", + "id": "brotli-min-length", + "label": "Minimum length", + "regex": "^\\d+", + "type": "text", + "containerClass": "z-1", + "pattern": "^\\d+", + "inpType": "input", + "name": "Minimum length", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "1000", + "method": "default", + "prev_value": "1000", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Minimum length for brotli compression." + } + ] + }, + "BROTLI_COMP_LEVEL": { + "context": "multisite", + "default": "6", + "help": "The compression level of the brotli algorithm.", + "id": "brotli-comp-level", + "label": "Compression level", + "regex": "^([02-9]|1[01]?)$", + "type": "select", + "containerClass": "z-0", + "pattern": "^([02-9]|1[01]?)$", + "inpType": "select", + "name": "Compression level", + "values": [ + "0", + "1", + "10", + "11", + "2", + "3", + "4", + "5", + "6", + "7", + "8", + "9" + ], + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "6", + "method": "default", + "prev_value": "6", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "The compression level of the brotli algorithm." + } + ] + } + }, + "checksum": null + }, + { + "id": "bunkernet", + "stream": "yes", + "name": "BunkerNet", + "description": "Share threat data with other BunkerWeb instances via BunkerNet.", + "version": "1.0", + "type": "core", + "method": "manual", + "page": true, + "settings": { + "USE_BUNKERNET": { + "context": "multisite", + "default": "yes", + "help": "Activate BunkerNet feature.", + "id": "use-bunkernet", + "label": "Activate BunkerNet", + "regex": "^(yes|no)$", + "type": "check", + "containerClass": "z-0", + "pattern": "^(yes|no)$", + "inpType": "checkbox", + "name": "Activate BunkerNet", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": true, + "value": "no", + "method": "scheduler", + "prev_value": "no", + "popovers": [ + { + "iconName": "trespass", + "text": "inp_popover_method_disabled" + }, + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Activate BunkerNet feature." + } + ] + } + }, + "checksum": null + }, + { + "id": "cors", + "stream": "no", + "name": "CORS", + "description": "Cross-Origin Resource Sharing.", + "version": "1.0", + "type": "core", + "method": "manual", + "page": true, + "settings": { + "USE_CORS": { + "context": "multisite", + "default": "no", + "help": "Use CORS", + "id": "use-cors", + "label": "Use CORS", + "regex": "^(yes|no)$", + "type": "check", + "containerClass": "z-10", + "pattern": "^(yes|no)$", + "inpType": "checkbox", + "name": "Use CORS", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "no", + "method": "default", + "prev_value": "no", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Use CORS" + } + ] + }, + "CORS_ALLOW_ORIGIN": { + "context": "multisite", + "default": "*", + "help": "Allowed origins to make CORS requests : PCRE regex or *.", + "id": "cors-allow-origin", + "label": "Allowed origins", + "regex": "^.*$", + "type": "text", + "containerClass": "z-9", + "pattern": "^.*$", + "inpType": "input", + "name": "Allowed origins", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "self", + "method": "default", + "prev_value": "self", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Allowed origins to make CORS requests : PCRE regex or *." + } + ] + }, + "CORS_ALLOW_METHODS": { + "context": "multisite", + "default": "GET, POST, OPTIONS", + "help": "Value of the Access-Control-Allow-Methods header.", + "id": "cors-allow-methods", + "label": "Access-Control-Allow-Methods value", + "regex": "^(\\*|(?![, ])(,? ?(GET|HEAD|POST|PUT|DELETE|CONNECT|OPTIONS|TRACE|PATCH)(?!.*\\3))*)?$", + "type": "text", + "containerClass": "z-8", + "pattern": "^(\\*|(?![, ])(,? ?(GET|HEAD|POST|PUT|DELETE|CONNECT|OPTIONS|TRACE|PATCH)(?!.*\\3))*)?$", + "inpType": "input", + "name": "Access-Control-Allow-Methods value", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "GET, POST, OPTIONS", + "method": "default", + "prev_value": "GET, POST, OPTIONS", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Value of the Access-Control-Allow-Methods header." + } + ] + }, + "CORS_ALLOW_HEADERS": { + "context": "multisite", + "default": "DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range", + "help": "Value of the Access-Control-Allow-Headers header.", + "id": "cors-allow-headers", + "label": "Access-Control-Allow-Headers value", + "regex": "^(\\*|(?![, ])(,? ?([\\w\\-]+)(?!.*\\3(?!.)))*)?$", + "type": "text", + "containerClass": "z-7", + "pattern": "^(\\*|(?![, ])(,? ?([\\w\\-]+)(?!.*\\3(?!.)))*)?$", + "inpType": "input", + "name": "Access-Control-Allow-Headers value", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range", + "method": "default", + "prev_value": "DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Value of the Access-Control-Allow-Headers header." + } + ] + }, + "CORS_ALLOW_CREDENTIALS": { + "context": "multisite", + "default": "no", + "help": "Send the Access-Control-Allow-Credentials header.", + "id": "cors-allow-credentials", + "label": "Send Access-Control-Allow-Credentials", + "regex": "^(yes|no)$", + "type": "check", + "containerClass": "z-6", + "pattern": "^(yes|no)$", + "inpType": "checkbox", + "name": "Send Access-Control-Allow-Credentials", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "no", + "method": "default", + "prev_value": "no", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Send the Access-Control-Allow-Credentials header." + } + ] + }, + "CORS_EXPOSE_HEADERS": { + "context": "multisite", + "default": "Content-Length,Content-Range", + "help": "Value of the Access-Control-Expose-Headers header.", + "id": "cors-expose-headers", + "label": "Access-Control-Expose-Headers value", + "regex": "^(\\*|(?![, ]+)(,? ?([\\w\\-]+)(?!.*\\3(?!.)))*)?$", + "type": "text", + "containerClass": "z-5", + "pattern": "^(\\*|(?![, ]+)(,? ?([\\w\\-]+)(?!.*\\3(?!.)))*)?$", + "inpType": "input", + "name": "Access-Control-Expose-Headers value", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "Content-Length,Content-Range", + "method": "default", + "prev_value": "Content-Length,Content-Range", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Value of the Access-Control-Expose-Headers header." + } + ] + }, + "CROSS_ORIGIN_OPENER_POLICY": { + "context": "multisite", + "default": "", + "help": "Value for the Cross-Origin-Opener-Policy header.", + "id": "cross-origin-opener-policy", + "label": "Cross-Origin-Opener-Policy", + "regex": "^(unsafe-none|same-origin-allow-popups|same-origin)?$", + "type": "select", + "containerClass": "z-4", + "pattern": "^(unsafe-none|same-origin-allow-popups|same-origin)?$", + "inpType": "select", + "name": "Cross-Origin-Opener-Policy", + "values": [ + "", + "same-origin", + "same-origin-allow-popups", + "unsafe-none" + ], + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "same-origin", + "method": "default", + "prev_value": "same-origin", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Value for the Cross-Origin-Opener-Policy header." + } + ] + }, + "CROSS_ORIGIN_EMBEDDER_POLICY": { + "context": "multisite", + "default": "", + "help": "Value for the Cross-Origin-Embedder-Policy header.", + "id": "cross-origin-embedder-policy", + "label": "Cross-Origin-Embedder-Policy", + "regex": "^(unsafe-none|require-corp|credentialless)?$", + "type": "select", + "containerClass": "z-3", + "pattern": "^(unsafe-none|require-corp|credentialless)?$", + "inpType": "select", + "name": "Cross-Origin-Embedder-Policy", + "values": [ + "", + "credentialless", + "require-corp", + "unsafe-none" + ], + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "require-corp", + "method": "default", + "prev_value": "require-corp", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Value for the Cross-Origin-Embedder-Policy header." + } + ] + }, + "CROSS_ORIGIN_RESOURCE_POLICY": { + "context": "multisite", + "default": "", + "help": "Value for the Cross-Origin-Resource-Policy header.", + "id": "cross-origin-resource-policy", + "label": "Cross-Origin-Resource-Policy", + "regex": "^(same-site|same-origin|cross-origin)?$", + "type": "select", + "containerClass": "z-2", + "pattern": "^(same-site|same-origin|cross-origin)?$", + "inpType": "select", + "name": "Cross-Origin-Resource-Policy", + "values": [ + "", + "cross-origin", + "same-origin", + "same-site" + ], + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "same-site", + "method": "default", + "prev_value": "same-site", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Value for the Cross-Origin-Resource-Policy header." + } + ] + }, + "CORS_MAX_AGE": { + "context": "multisite", + "default": "86400", + "help": "Value of the Access-Control-Max-Age header.", + "id": "cors-max-age", + "label": "Access-Control-Max-Age value", + "regex": "^\\d+$", + "type": "text", + "containerClass": "z-1", + "pattern": "^\\d+$", + "inpType": "input", + "name": "Access-Control-Max-Age value", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "86400", + "method": "default", + "prev_value": "86400", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Value of the Access-Control-Max-Age header." + } + ] + }, + "CORS_DENY_REQUEST": { + "context": "multisite", + "default": "yes", + "help": "Deny request and don't send it to backend if Origin is not allowed.", + "id": "cors-deny-request", + "label": "Deny request", + "regex": "^(yes|no)$", + "type": "check", + "containerClass": "z-0", + "pattern": "^(yes|no)$", + "inpType": "checkbox", + "name": "Deny request", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "yes", + "method": "default", + "prev_value": "yes", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Deny request and don't send it to backend if Origin is not allowed." + } + ] + } + }, + "checksum": null + }, + { + "id": "clientcache", + "stream": "no", + "name": "Client cache", + "description": "Manage caching for clients.", + "version": "1.0", + "type": "core", + "method": "manual", + "page": false, + "settings": { + "USE_CLIENT_CACHE": { + "context": "multisite", + "default": "no", + "help": "Tell client to store locally static files.", + "id": "use-client-cache", + "label": "Use client cache", + "regex": "^(yes|no)$", + "type": "check", + "containerClass": "z-2", + "pattern": "^(yes|no)$", + "inpType": "checkbox", + "name": "Use client cache", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": true, + "value": "yes", + "method": "scheduler", + "prev_value": "yes", + "popovers": [ + { + "iconName": "trespass", + "text": "inp_popover_method_disabled" + }, + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Tell client to store locally static files." + } + ] + }, + "CLIENT_CACHE_ETAG": { + "context": "multisite", + "default": "yes", + "help": "Send the HTTP ETag header for static resources.", + "id": "client-cache-etag", + "label": "ETag", + "regex": "^(yes|no)$", + "type": "check", + "containerClass": "z-1", + "pattern": "^(yes|no)$", + "inpType": "checkbox", + "name": "ETag", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "yes", + "method": "default", + "prev_value": "yes", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Send the HTTP ETag header for static resources." + } + ] + }, + "CLIENT_CACHE_CONTROL": { + "context": "multisite", + "default": "public, max-age=15552000", + "help": "Value of the Cache-Control HTTP header.", + "id": "client-cache-control", + "label": "Cache-Control header", + "regex": "^(?!(, ?| ))((, )?(((max-age|s-maxage|stale-while-revalidate|stale-if-error)=\\d+(?!.*\\6))|((?!.*public)private|(?!.*private)public)|(must|proxy)-revalidate|must-understand|immutable|no-(cache|store|transform))(?!.*\\4))+$", + "type": "text", + "containerClass": "z-0", + "pattern": "^(?!(, ?| ))((, )?(((max-age|s-maxage|stale-while-revalidate|stale-if-error)=\\d+(?!.*\\6))|((?!.*public)private|(?!.*private)public)|(must|proxy)-revalidate|must-understand|immutable|no-(cache|store|transform))(?!.*\\4))+$", + "inpType": "input", + "name": "Cache-Control header", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "public, max-age=15552000", + "method": "default", + "prev_value": "public, max-age=15552000", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Value of the Cache-Control HTTP header." + } + ] + } + }, + "checksum": null + }, + { + "id": "country", + "stream": "yes", + "name": "Country", + "description": "Deny access based on the country of the client IP.", + "version": "1.0", + "type": "core", + "method": "manual", + "page": true, + "settings": { + "BLACKLIST_COUNTRY": { + "context": "multisite", + "default": "", + "help": "Deny access if the country of the client is in the list (ISO 3166-1 alpha-2 format separated with spaces).", + "id": "country-blacklist", + "label": "Country blacklist", + "regex": "^(?! )( *([A-Z]{2})(?!.*\\2) *)*$", + "type": "text", + "containerClass": "z-1", + "pattern": "^(?! )( *([A-Z]{2})(?!.*\\2) *)*$", + "inpType": "input", + "name": "Country blacklist", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "", + "method": "default", + "prev_value": "", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Deny access if the country of the client is in the list (ISO 3166-1 alpha-2 format separated with spaces)." + } + ] + }, + "WHITELIST_COUNTRY": { + "context": "multisite", + "default": "", + "help": "Deny access if the country of the client is not in the list (ISO 3166-1 alpha-2 format separated with spaces).", + "id": "country-whitelist", + "label": "Country whitelist", + "regex": "^(?! )( *([A-Z]{2})(?!.*\\2) *)*$", + "type": "text", + "containerClass": "z-0", + "pattern": "^(?! )( *([A-Z]{2})(?!.*\\2) *)*$", + "inpType": "input", + "name": "Country whitelist", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "", + "method": "default", + "prev_value": "", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Deny access if the country of the client is not in the list (ISO 3166-1 alpha-2 format separated with spaces)." + } + ] + } + }, + "checksum": null + }, + { + "id": "customcert", + "stream": "yes", + "name": "Custom HTTPS certificate", + "description": "Choose custom certificate for HTTPS.", + "version": "1.0", + "type": "core", + "method": "manual", + "page": false, + "settings": { + "USE_CUSTOM_SSL": { + "context": "multisite", + "default": "no", + "help": "Use custom HTTPS certificate.", + "id": "use-custom-https", + "label": "Use custom certificate", + "regex": "^(yes|no)$", + "type": "check", + "containerClass": "z-4", + "pattern": "^(yes|no)$", + "inpType": "checkbox", + "name": "Use custom certificate", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "no", + "method": "default", + "prev_value": "no", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Use custom HTTPS certificate." + } + ] + }, + "CUSTOM_SSL_CERT": { + "context": "multisite", + "default": "", + "help": "Full path of the certificate or bundle file (must be readable by the scheduler).", + "id": "custom-https-cert", + "label": "Certificate path", + "regex": "^(/[\\w. \\-]+)*/?$", + "type": "text", + "containerClass": "z-3", + "pattern": "^(/[\\w. \\-]+)*/?$", + "inpType": "input", + "name": "Certificate path", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "", + "method": "default", + "prev_value": "", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Full path of the certificate or bundle file (must be readable by the scheduler)." + } + ] + }, + "CUSTOM_SSL_KEY": { + "context": "multisite", + "default": "", + "help": "Full path of the key file (must be readable by the scheduler).", + "id": "custom-https-key", + "label": "Key path", + "regex": "^(/[\\w. \\-]+)*/?$", + "type": "text", + "containerClass": "z-2", + "pattern": "^(/[\\w. \\-]+)*/?$", + "inpType": "input", + "name": "Key path", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "", + "method": "default", + "prev_value": "", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Full path of the key file (must be readable by the scheduler)." + } + ] + }, + "CUSTOM_SSL_CERT_DATA": { + "context": "multisite", + "default": "", + "help": "Certificate data encoded in base64.", + "id": "custom-https-cert-data", + "label": "Certificate data (base64)", + "regex": "^.*$", + "type": "text", + "containerClass": "z-1", + "pattern": "^.*$", + "inpType": "input", + "name": "Certificate data (base64)", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "", + "method": "default", + "prev_value": "", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Certificate data encoded in base64." + } + ] + }, + "CUSTOM_SSL_KEY_DATA": { + "context": "multisite", + "default": "", + "help": "Key data encoded in base64.", + "id": "custom-https-key-data", + "label": "Key data (base64)", + "regex": "^.*$", + "type": "text", + "containerClass": "z-0", + "pattern": "^.*$", + "inpType": "input", + "name": "Key data (base64)", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "", + "method": "default", + "prev_value": "", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Key data encoded in base64." + } + ] + } + }, + "checksum": null + }, + { + "id": "dnsbl", + "stream": "yes", + "name": "DNSBL", + "description": "Deny access based on external DNSBL servers.", + "version": "1.0", + "type": "core", + "method": "manual", + "page": true, + "settings": { + "USE_DNSBL": { + "context": "multisite", + "default": "yes", + "help": "Activate DNSBL feature.", + "id": "use-dnsbl", + "label": "Activate DNSBL", + "regex": "^(yes|no)$", + "type": "check", + "containerClass": "z-0", + "pattern": "^(yes|no)$", + "inpType": "checkbox", + "name": "Activate DNSBL", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "yes", + "method": "default", + "prev_value": "yes", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Activate DNSBL feature." + } + ] + } + }, + "checksum": null + }, + { + "id": "errors", + "stream": "no", + "name": "Errors", + "description": "Manage default error pages", + "version": "1.0", + "type": "core", + "method": "manual", + "page": true, + "settings": { + "ERRORS": { + "context": "multisite", + "default": "", + "help": "List of HTTP error code and corresponding error pages, separated with spaces (404=/my404.html 403=/errors/403.html ...).", + "id": "errors", + "label": "Errors", + "regex": "^(?! )( ?([1-5]\\d{2})(?!.*\\2(?![^=]))=(\\/[\\w\\].~:\\/?#\\[@!$\\&'\\(\\)*+,;=\\-]*)(?!.*\\3(?!.)))*$", + "type": "text", + "containerClass": "z-1", + "pattern": "^(?! )( ?([1-5]\\d{2})(?!.*\\2(?![^=]))=(\\/[\\w\\].~:\\/?#\\[@!$\\&'\\(\\)*+,;=\\-]*)(?!.*\\3(?!.)))*$", + "inpType": "input", + "name": "Errors", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "", + "method": "default", + "prev_value": "", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "List of HTTP error code and corresponding error pages, separated with spaces (404=/my404.html 403=/errors/403.html ...)." + } + ] + }, + "INTERCEPTED_ERROR_CODES": { + "context": "multisite", + "default": "400 401 403 404 405 413 429 500 501 502 503 504", + "help": "List of HTTP error code intercepted by BunkerWeb", + "id": "intercepted-error-codes", + "label": "Intercepted error codes", + "regex": "^( *([1-5]\\d{2})(?!.*\\2) *)+$", + "type": "text", + "containerClass": "z-0", + "pattern": "^( *([1-5]\\d{2})(?!.*\\2) *)+$", + "inpType": "input", + "name": "Intercepted error codes", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "400 401 403 404 405 413 429 500 501 502 503 504", + "method": "default", + "prev_value": "400 401 403 404 405 413 429 500 501 502 503 504", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "List of HTTP error code intercepted by BunkerWeb" + } + ] + } + }, + "checksum": null + }, + { + "id": "greylist", + "stream": "partial", + "name": "Greylist", + "description": "Allow access while keeping security features based on internal and external IP/network/rDNS/ASN greylists.", + "version": "1.0", + "type": "core", + "method": "manual", + "page": true, + "settings": { + "USE_GREYLIST": { + "context": "multisite", + "default": "no", + "help": "Activate greylist feature.", + "id": "use-greylist", + "label": "Activate greylisting", + "regex": "^(yes|no)$", + "type": "check", + "containerClass": "z-6", + "pattern": "^(yes|no)$", + "inpType": "checkbox", + "name": "Activate greylisting", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "no", + "method": "default", + "prev_value": "no", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Activate greylist feature." + } + ] + }, + "GREYLIST_IP": { + "context": "multisite", + "default": "", + "help": "List of IP/network, separated with spaces, to put into the greylist.", + "id": "greylist-ip", + "label": "Greylist IP/network", + "regex": "^(?! )( *(((\\b25[0-5]|\\b2[0-4]\\d|\\b[01]?\\d\\d?)(\\.(25[0-5]|2[0-4]\\d|[01]?\\d\\d?)){3})(\\/([1-2][0-9]?|3[0-2]?|[04-9]))?|(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]Z{0,4}){0,4}%[0-9a-zA-Z]+|::(ffff(:0{1,4})?:)?((25[0-5]|(2[0-4]|1?\\d)?\\d)\\.){3}(25[0-5]|(2[0-4]|1?\\d)?\\d)|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1?\\d)?\\d)\\.){3}(25[0-5]|(2[0-4]|1?\\d)?\\d))(\\/(12[0-8]|1[01][0-9]|[0-9][0-9]?))?)(?!.*\\D\\2([^\\d\\/]|$)) *)*$", + "type": "text", + "containerClass": "z-5", + "pattern": "^(?! )( *(((\\b25[0-5]|\\b2[0-4]\\d|\\b[01]?\\d\\d?)(\\.(25[0-5]|2[0-4]\\d|[01]?\\d\\d?)){3})(\\/([1-2][0-9]?|3[0-2]?|[04-9]))?|(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]Z{0,4}){0,4}%[0-9a-zA-Z]+|::(ffff(:0{1,4})?:)?((25[0-5]|(2[0-4]|1?\\d)?\\d)\\.){3}(25[0-5]|(2[0-4]|1?\\d)?\\d)|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1?\\d)?\\d)\\.){3}(25[0-5]|(2[0-4]|1?\\d)?\\d))(\\/(12[0-8]|1[01][0-9]|[0-9][0-9]?))?)(?!.*\\D\\2([^\\d\\/]|$)) *)*$", + "inpType": "input", + "name": "Greylist IP/network", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "", + "method": "default", + "prev_value": "", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "List of IP/network, separated with spaces, to put into the greylist." + } + ] + }, + "GREYLIST_RDNS": { + "context": "multisite", + "default": "", + "help": "List of reverse DNS suffixes, separated with spaces, to put into the greylist.", + "id": "greylist-rdns", + "label": "Greylist reverse DNS", + "regex": "^( *(([^ ]+)(?!.*\\3( |$))) *)*$", + "type": "text", + "containerClass": "z-4", + "pattern": "^( *(([^ ]+)(?!.*\\3( |$))) *)*$", + "inpType": "input", + "name": "Greylist reverse DNS", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "", + "method": "default", + "prev_value": "", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "List of reverse DNS suffixes, separated with spaces, to put into the greylist." + } + ] + }, + "GREYLIST_RDNS_GLOBAL": { + "context": "multisite", + "default": "yes", + "help": "Only perform RDNS greylist checks on global IP addresses.", + "id": "greylist-rdns-global", + "label": "Greylist reverse DNS global IPs", + "regex": "^(yes|no)$", + "type": "check", + "containerClass": "z-3", + "pattern": "^(yes|no)$", + "inpType": "checkbox", + "name": "Greylist reverse DNS global IPs", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "yes", + "method": "default", + "prev_value": "yes", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Only perform RDNS greylist checks on global IP addresses." + } + ] + }, + "GREYLIST_ASN": { + "context": "multisite", + "default": "", + "help": "List of ASN numbers, separated with spaces, to put into the greylist.", + "id": "greylist-asn", + "label": "Greylist ASN", + "regex": "^^( *((ASN?)?(\\d+)\\b(?!.*[SN ]\\4\\b)) *)*$", + "type": "text", + "containerClass": "z-2", + "pattern": "^^( *((ASN?)?(\\d+)\\b(?!.*[SN ]\\4\\b)) *)*$", + "inpType": "input", + "name": "Greylist ASN", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "", + "method": "default", + "prev_value": "", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "List of ASN numbers, separated with spaces, to put into the greylist." + } + ] + }, + "GREYLIST_USER_AGENT": { + "context": "multisite", + "default": "", + "help": "List of User-Agent (PCRE regex), separated with spaces, to put into the greylist.", + "id": "greylist-user-agent", + "label": "Greylist User-Agent", + "regex": "^.*$", + "type": "text", + "containerClass": "z-1", + "pattern": "^.*$", + "inpType": "input", + "name": "Greylist User-Agent", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "", + "method": "default", + "prev_value": "", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "List of User-Agent (PCRE regex), separated with spaces, to put into the greylist." + } + ] + }, + "GREYLIST_URI": { + "context": "multisite", + "default": "", + "help": "List of URI (PCRE regex), separated with spaces, to put into the greylist.", + "id": "greylist-uri", + "label": "Greylist URI", + "regex": "^.*$", + "type": "text", + "containerClass": "z-0", + "pattern": "^.*$", + "inpType": "input", + "name": "Greylist URI", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "", + "method": "default", + "prev_value": "", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "List of URI (PCRE regex), separated with spaces, to put into the greylist." + } + ] + } + }, + "checksum": null + }, + { + "id": "gzip", + "stream": "no", + "name": "Gzip", + "description": "Compress HTTP requests with the gzip algorithm.", + "version": "1.0", + "type": "core", + "method": "manual", + "page": false, + "settings": { + "USE_GZIP": { + "context": "multisite", + "default": "no", + "help": "Use gzip", + "id": "use-gzip", + "label": "Use gzip", + "regex": "^(yes|no)$", + "type": "check", + "containerClass": "z-4", + "pattern": "^(yes|no)$", + "inpType": "checkbox", + "name": "Use gzip", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": true, + "value": "yes", + "method": "scheduler", + "prev_value": "yes", + "popovers": [ + { + "iconName": "trespass", + "text": "inp_popover_method_disabled" + }, + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Use gzip" + } + ] + }, + "GZIP_TYPES": { + "context": "multisite", + "default": "application/atom+xml application/javascript application/json application/rss+xml application/vnd.ms-fontobject application/x-font-opentype application/x-font-truetype application/x-font-ttf application/x-javascript application/xhtml+xml application/xml font/eot font/opentype font/otf font/truetype image/svg+xml image/vnd.microsoft.icon image/x-icon image/x-win-bitmap text/css text/javascript text/plain text/xml", + "help": "List of MIME types that will be compressed with gzip.", + "id": "gzip-types", + "label": "MIME types", + "regex": "^(?! )( ?([\\-\\w.]+/[\\-\\w.+]+)(?!.*\\2(?!.)))+$", + "type": "text", + "containerClass": "z-3", + "pattern": "^(?! )( ?([\\-\\w.]+/[\\-\\w.+]+)(?!.*\\2(?!.)))+$", + "inpType": "input", + "name": "MIME types", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "application/atom+xml application/javascript application/json application/rss+xml application/vnd.ms-fontobject application/x-font-opentype application/x-font-truetype application/x-font-ttf application/x-javascript application/xhtml+xml application/xml font/eot font/opentype font/otf font/truetype image/svg+xml image/vnd.microsoft.icon image/x-icon image/x-win-bitmap text/css text/javascript text/plain text/xml", + "method": "default", + "prev_value": "application/atom+xml application/javascript application/json application/rss+xml application/vnd.ms-fontobject application/x-font-opentype application/x-font-truetype application/x-font-ttf application/x-javascript application/xhtml+xml application/xml font/eot font/opentype font/otf font/truetype image/svg+xml image/vnd.microsoft.icon image/x-icon image/x-win-bitmap text/css text/javascript text/plain text/xml", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "List of MIME types that will be compressed with gzip." + } + ] + }, + "GZIP_MIN_LENGTH": { + "context": "multisite", + "default": "1000", + "help": "Minimum length for gzip compression.", + "id": "gzip-min-length", + "label": "Minimum length", + "regex": "^\\d+$", + "type": "text", + "containerClass": "z-2", + "pattern": "^\\d+$", + "inpType": "input", + "name": "Minimum length", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "1000", + "method": "default", + "prev_value": "1000", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Minimum length for gzip compression." + } + ] + }, + "GZIP_COMP_LEVEL": { + "context": "multisite", + "default": "5", + "help": "The compression level of the gzip algorithm.", + "id": "gzip-comp-level", + "label": "Compression level", + "regex": "^[1-9]$", + "type": "select", + "containerClass": "z-1", + "pattern": "^[1-9]$", + "inpType": "select", + "name": "Compression level", + "values": [ + "1", + "2", + "3", + "4", + "5", + "6", + "7", + "8", + "9" + ], + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "5", + "method": "default", + "prev_value": "5", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "The compression level of the gzip algorithm." + } + ] + }, + "GZIP_PROXIED": { + "context": "multisite", + "default": "no-cache no-store private expired auth", + "help": "Which kind of proxied requests we should compress.", + "id": "gzip-proxied", + "label": "Proxied requests", + "regex": "^.*$", + "type": "text", + "containerClass": "z-0", + "pattern": "^.*$", + "inpType": "input", + "name": "Proxied requests", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "no-cache no-store private expired auth", + "method": "default", + "prev_value": "no-cache no-store private expired auth", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Which kind of proxied requests we should compress." + } + ] + } + }, + "checksum": null + }, + { + "id": "inject", + "stream": "no", + "name": "HTML injection", + "description": "Inject custom HTML code before the tag.", + "version": "1.0", + "type": "core", + "method": "manual", + "page": false, + "settings": { + "INJECT_BODY": { + "context": "multisite", + "default": "", + "help": "The HTML code to inject.", + "id": "inject-body", + "label": "HTML code", + "regex": "^.*$", + "type": "text", + "containerClass": "z-0", + "pattern": "^.*$", + "inpType": "input", + "name": "HTML code", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "", + "method": "default", + "prev_value": "", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "The HTML code to inject." + } + ] + } + }, + "checksum": null + }, + { + "id": "headers", + "stream": "no", + "name": "Headers", + "description": "Manage HTTP headers sent to clients.", + "version": "1.0", + "type": "core", + "method": "manual", + "page": false, + "settings": { + "REMOVE_HEADERS": { + "context": "multisite", + "default": "Server Expect-CT X-Powered-By X-AspNet-Version X-AspNetMvc-Version", + "help": "Headers to remove (Header1 Header2 Header3 ...)", + "id": "remove-headers", + "label": "Remove headers", + "regex": "^(?! )( ?[\\w\\-]+)*$", + "type": "text", + "containerClass": "z-12", + "pattern": "^(?! )( ?[\\w\\-]+)*$", + "inpType": "input", + "name": "Remove headers", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "Server Expect-CT X-Powered-By X-AspNet-Version X-AspNetMvc-Version Public-Key-Pins", + "method": "default", + "prev_value": "Server Expect-CT X-Powered-By X-AspNet-Version X-AspNetMvc-Version Public-Key-Pins", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Headers to remove (Header1 Header2 Header3 ...)" + } + ] + }, + "KEEP_UPSTREAM_HEADERS": { + "context": "multisite", + "default": "Content-Security-Policy Permissions-Policy Feature-Policy X-Frame-Options", + "help": "Headers to keep from upstream (Header1 Header2 Header3 ... or * for all).", + "id": "keep-upstream-headers", + "label": "Keep upstream headers", + "regex": "^((?! )( ?[\\w\\-]+)+|\\*)?$", + "type": "text", + "containerClass": "z-11", + "pattern": "^((?! )( ?[\\w\\-]+)+|\\*)?$", + "inpType": "input", + "name": "Keep upstream headers", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "Content-Security-Policy Permissions-Policy X-Frame-Options", + "method": "default", + "prev_value": "Content-Security-Policy Permissions-Policy X-Frame-Options", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Headers to keep from upstream (Header1 Header2 Header3 ... or * for all)." + } + ] + }, + "STRICT_TRANSPORT_SECURITY": { + "context": "multisite", + "default": "max-age=31536000", + "help": "Value for the Strict-Transport-Security header.", + "id": "strict-transport-security", + "label": "Strict-Transport-Security", + "regex": "^max-age=\\d+(; includeSubDomains(; preload)?)?$", + "type": "text", + "containerClass": "z-10", + "pattern": "^max-age=\\d+(; includeSubDomains(; preload)?)?$", + "inpType": "input", + "name": "Strict-Transport-Security", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "max-age=31536000; includeSubDomains; preload", + "method": "default", + "prev_value": "max-age=31536000; includeSubDomains; preload", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Value for the Strict-Transport-Security header." + } + ] + }, + "COOKIE_AUTO_SECURE_FLAG": { + "context": "multisite", + "default": "yes", + "help": "Automatically add the Secure flag to all cookies.", + "id": "cookie-auto-secure-flag", + "label": "Cookie auto Secure flag", + "regex": "^(yes|no)$", + "type": "check", + "containerClass": "z-8", + "pattern": "^(yes|no)$", + "inpType": "checkbox", + "name": "Cookie auto Secure flag", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "yes", + "method": "default", + "prev_value": "yes", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Automatically add the Secure flag to all cookies." + } + ] + }, + "CONTENT_SECURITY_POLICY": { + "context": "multisite", + "default": "object-src 'none'; form-action 'self'; frame-ancestors 'self';", + "help": "Value for the Content-Security-Policy header.", + "id": "content-security-policy", + "label": "Content-Security-Policy", + "regex": "^.*$", + "type": "text", + "containerClass": "z-7", + "pattern": "^.*$", + "inpType": "input", + "name": "Content-Security-Policy", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "object-src 'none'; form-action 'self'; frame-ancestors 'self';", + "method": "default", + "prev_value": "object-src 'none'; form-action 'self'; frame-ancestors 'self';", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Value for the Content-Security-Policy header." + } + ] + }, + "CONTENT_SECURITY_POLICY_REPORT_ONLY": { + "context": "multisite", + "default": "no", + "help": "Send reports for violations of the Content-Security-Policy header instead of blocking them.", + "id": "content-security-policy-report-only", + "label": "Content-Security-Policy-Report-Only", + "regex": "^(yes|no)$", + "type": "check", + "containerClass": "z-6", + "pattern": "^(yes|no)$", + "inpType": "checkbox", + "name": "Content-Security-Policy-Report-Only", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "no", + "method": "default", + "prev_value": "no", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Send reports for violations of the Content-Security-Policy header instead of blocking them." + } + ] + }, + "REFERRER_POLICY": { + "context": "multisite", + "default": "strict-origin-when-cross-origin", + "help": "Value for the Referrer-Policy header.", + "id": "referrer-policy", + "label": "Referrer-Policy", + "regex": "^(?!^(,| ))((, )?(no-referrer-when-downgrade|no-referrer|origin-when-cross-origin|same-origin|strict-origin-when-cross-origin|strict-origin|origin|unsafe-url)(?!\\b.*, \\4\\b))*$", + "type": "text", + "containerClass": "z-5", + "pattern": "^(?!^(,| ))((, )?(no-referrer-when-downgrade|no-referrer|origin-when-cross-origin|same-origin|strict-origin-when-cross-origin|strict-origin|origin|unsafe-url)(?!\\b.*, \\4\\b))*$", + "inpType": "input", + "name": "Referrer-Policy", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "strict-origin-when-cross-origin", + "method": "default", + "prev_value": "strict-origin-when-cross-origin", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Value for the Referrer-Policy header." + } + ] + }, + "PERMISSIONS_POLICY": { + "context": "multisite", + "default": "accelerometer=(), ambient-light-sensor=(), autoplay=(), battery=(), camera=(), cross-origin-isolated=(), display-capture=(), document-domain=(), encrypted-media=(), execution-while-not-rendered=(), execution-while-out-of-viewport=(), fullscreen=(), geolocation=(), gyroscope=(), hid=(), idle-detection=(), magnetometer=(), microphone=(), midi=(), navigation-override=(), payment=(), picture-in-picture=(), publickey-credentials-get=(), screen-wake-lock=(), serial=(), usb=(), web-share=(), xr-spatial-tracking=()", + "help": "Value for the Permissions-Policy header.", + "id": "permissions-policy", + "label": "Permissions-Policy", + "regex": "^(?![, ])(,? ?([a-z\\-]+)(?!.*[^\\-]\\2=)=(\\*|\\(( ?(self|\\u0022https?:\\/\\/[\\-\\w@:%.+~#=]+[\\-\\w\\(\\)!@:%+.~#?&\\/=$]*\\u0022)(?=[ \\)]))*\\)))*$", + "type": "text", + "containerClass": "z-4", + "pattern": "^(?![, ])(,? ?([a-z\\-]+)(?!.*[^\\-]\\2=)=(\\*|\\(( ?(self|\\u0022https?:\\/\\/[\\-\\w@:%.+~#=]+[\\-\\w\\(\\)!@:%+.~#?&\\/=$]*\\u0022)(?=[ \\)]))*\\)))*$", + "inpType": "input", + "name": "Permissions-Policy", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "accelerometer=(), ambient-light-sensor=(), attribution-reporting=(), autoplay=(), battery=(), bluetooth=(), browsing-topics=(), camera=(), compute-pressure=(), display-capture=(), document-domain=(), encrypted-media=(), execution-while-not-rendered=(), execution-while-out-of-viewport=(), fullscreen=(), gamepad=(), geolocation=(), gyroscope=(), hid=(), identity-credentials-get=(), idle-detection=(), local-fonts=(), magnetometer=(), microphone=(), midi=(), otp-credentials=(), payment=(), picture-in-picture=(), publickey-credentials-create=(), publickey-credentials-get=(), screen-wake-lock=(), serial=(), speaker-selection=(), storage-access=(), usb=(), web-share=(), window-management=(), xr-spatial-tracking=()", + "method": "default", + "prev_value": "accelerometer=(), ambient-light-sensor=(), attribution-reporting=(), autoplay=(), battery=(), bluetooth=(), browsing-topics=(), camera=(), compute-pressure=(), display-capture=(), document-domain=(), encrypted-media=(), execution-while-not-rendered=(), execution-while-out-of-viewport=(), fullscreen=(), gamepad=(), geolocation=(), gyroscope=(), hid=(), identity-credentials-get=(), idle-detection=(), local-fonts=(), magnetometer=(), microphone=(), midi=(), otp-credentials=(), payment=(), picture-in-picture=(), publickey-credentials-create=(), publickey-credentials-get=(), screen-wake-lock=(), serial=(), speaker-selection=(), storage-access=(), usb=(), web-share=(), window-management=(), xr-spatial-tracking=()", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Value for the Permissions-Policy header." + } + ] + }, + "FEATURE_POLICY": { + "context": "multisite", + "default": "accelerometer 'none'; ambient-light-sensor 'none'; autoplay 'none'; battery 'none'; camera 'none'; display-capture 'none'; document-domain 'none'; encrypted-media 'none'; execution-while-not-rendered 'none'; execution-while-out-of-viewport 'none'; fullscreen 'none'; geolocation 'none'; gyroscope 'none'; layout-animation 'none'; legacy-image-formats 'none'; magnetometer 'none'; microphone 'none'; midi 'none'; navigation-override 'none'; payment 'none'; picture-in-picture 'none'; publickey-credentials-get 'none'; speaker-selection 'none'; sync-xhr 'none'; unoptimized-images 'none'; unsized-media 'none'; usb 'none'; screen-wake-lock 'none'; web-share 'none'; xr-spatial-tracking 'none';", + "help": "Value for the Feature-Policy header.", + "id": "feature-policy", + "label": "Feature-Policy", + "regex": "^(?![; ])( ?([\\w\\-]+)(?!.*[^\\-]\\2 )( ('(none|self|strict-dynamic|report-sample|unsafe-inline|unsafe-eval|unsafe-hashes|unsafe-allow-redirects)'|https?:\\/\\/[\\w@:%.+~#=\\-]+[\\w\\(\\)!@:%+.~#?&\\/=$\\-]*))+;)*$", + "type": "text", + "containerClass": "z-3", + "pattern": "^(?![; ])( ?([\\w\\-]+)(?!.*[^\\-]\\2 )( ('(none|self|strict-dynamic|report-sample|unsafe-inline|unsafe-eval|unsafe-hashes|unsafe-allow-redirects)'|https?:\\/\\/[\\w@:%.+~#=\\-]+[\\w\\(\\)!@:%+.~#?&\\/=$\\-]*))+;)*$", + "inpType": "input", + "name": "Feature-Policy", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "accelerometer 'none'; ambient-light-sensor 'none'; autoplay 'none'; battery 'none'; camera 'none'; display-capture 'none'; document-domain 'none'; encrypted-media 'none'; execution-while-not-rendered 'none'; execution-while-out-of-viewport 'none'; fullscreen 'none'; geolocation 'none'; gyroscope 'none'; layout-animation 'none'; legacy-image-formats 'none'; magnetometer 'none'; microphone 'none'; midi 'none'; navigation-override 'none'; payment 'none'; picture-in-picture 'none'; publickey-credentials-get 'none'; speaker-selection 'none'; sync-xhr 'none'; unoptimized-images 'none'; unsized-media 'none'; usb 'none'; screen-wake-lock 'none'; web-share 'none'; xr-spatial-tracking 'none';", + "prev_value": "accelerometer 'none'; ambient-light-sensor 'none'; autoplay 'none'; battery 'none'; camera 'none'; display-capture 'none'; document-domain 'none'; encrypted-media 'none'; execution-while-not-rendered 'none'; execution-while-out-of-viewport 'none'; fullscreen 'none'; geolocation 'none'; gyroscope 'none'; layout-animation 'none'; legacy-image-formats 'none'; magnetometer 'none'; microphone 'none'; midi 'none'; navigation-override 'none'; payment 'none'; picture-in-picture 'none'; publickey-credentials-get 'none'; speaker-selection 'none'; sync-xhr 'none'; unoptimized-images 'none'; unsized-media 'none'; usb 'none'; screen-wake-lock 'none'; web-share 'none'; xr-spatial-tracking 'none';", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Value for the Feature-Policy header." + } + ] + }, + "X_FRAME_OPTIONS": { + "context": "multisite", + "default": "SAMEORIGIN", + "help": "Value for the X-Frame-Options header.", + "id": "x-frame-options", + "label": "X-Frame-Options", + "regex": "^(DENY|SAMEORIGIN)?$", + "type": "select", + "containerClass": "z-2", + "pattern": "^(DENY|SAMEORIGIN)?$", + "inpType": "select", + "name": "X-Frame-Options", + "values": [ + "", + "DENY", + "SAMEORIGIN" + ], + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "SAMEORIGIN", + "method": "default", + "prev_value": "SAMEORIGIN", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Value for the X-Frame-Options header." + } + ] + }, + "X_CONTENT_TYPE_OPTIONS": { + "context": "multisite", + "default": "nosniff", + "help": "Value for the X-Content-Type-Options header.", + "id": "x-content-type-options", + "label": "X-Content-Type-Options", + "regex": "^(nosniff)?$", + "type": "select", + "containerClass": "z-1", + "pattern": "^(nosniff)?$", + "inpType": "select", + "name": "X-Content-Type-Options", + "values": [ + "", + "nosniff" + ], + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "nosniff", + "method": "default", + "prev_value": "nosniff", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Value for the X-Content-Type-Options header." + } + ] + }, + "X_XSS_PROTECTION": { + "context": "multisite", + "default": "1; mode=block", + "help": "Value for the X-XSS-Protection header.", + "id": "x-xss-protection", + "label": "X-XSS-Protection", + "regex": "^0|1(; (mode=block|report=https?:\\/\\/[\\-\\w@:%.+~#=]+[\\-\\w\\(\\)!@:%+.~#?&\\/=$]*))?$", + "type": "text", + "containerClass": "z-0", + "pattern": "^0|1(; (mode=block|report=https?:\\/\\/[\\-\\w@:%.+~#=]+[\\-\\w\\(\\)!@:%+.~#?&\\/=$]*))?$", + "inpType": "input", + "name": "X-XSS-Protection", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "1; mode=block", + "method": "default", + "prev_value": "1; mode=block", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Value for the X-XSS-Protection header." + } + ] + } + }, + "checksum": null, + "multiples_schema": { + "custom-headers": { + "CUSTOM_HEADER": { + "context": "multisite", + "default": "", + "help": "Custom header to add (HeaderName: HeaderValue).", + "id": "custom-header", + "label": "Custom header (HeaderName: HeaderValue)", + "regex": "^([\\w\\-]+: .+)?$", + "type": "text", + "multiple": "custom-headers", + "pattern": "^([\\w\\-]+: .+)?$", + "inpType": "input", + "name": "Custom header (HeaderName: HeaderValue)", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "", + "prev_value": "", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Custom header to add (HeaderName: HeaderValue)." + } + ], + "containerClass": "z-13" + } + }, + "cookie-flags": { + "COOKIE_FLAGS": { + "context": "multisite", + "default": "* HttpOnly SameSite=Lax", + "help": "Cookie flags automatically added to all cookies (value accepted for nginx_cookie_flag_module).", + "id": "cookie-flags", + "label": "Cookie flags", + "regex": "^(\\*|[^;]+)( (HttpOnly|(SameSite)(?!.*\\4)(=(Lax|Strict))?)(?!.*\\3))*$", + "type": "text", + "multiple": "cookie-flags", + "pattern": "^(\\*|[^;]+)( (HttpOnly|(SameSite)(?!.*\\4)(=(Lax|Strict))?)(?!.*\\3))*$", + "inpType": "input", + "name": "Cookie flags", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "* HttpOnly SameSite=Lax", + "prev_value": "* HttpOnly SameSite=Lax", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Cookie flags automatically added to all cookies (value accepted for nginx_cookie_flag_module)." + } + ], + "containerClass": "z-12" + } + } + }, + "multiples": { + "custom-headers": { + "0": { + "CUSTOM_HEADER": { + "context": "multisite", + "default": "", + "help": "Custom header to add (HeaderName: HeaderValue).", + "id": "custom-header", + "label": "Custom header (HeaderName: HeaderValue)", + "regex": "^([\\w\\-]+: .+)?$", + "type": "text", + "multiple": "custom-headers", + "pattern": "^([\\w\\-]+: .+)?$", + "inpType": "input", + "name": "Custom header (HeaderName: HeaderValue)", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "", + "prev_value": "", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Custom header to add (HeaderName: HeaderValue)." + } + ], + "containerClass": "z-13", + "method": "default" + } + } + }, + "cookie-flags": { + "0": { + "COOKIE_FLAGS": { + "context": "multisite", + "default": "* HttpOnly SameSite=Lax", + "help": "Cookie flags automatically added to all cookies (value accepted for nginx_cookie_flag_module).", + "id": "cookie-flags", + "label": "Cookie flags", + "regex": "^(\\*|[^;]+)( (HttpOnly|(SameSite)(?!.*\\4)(=(Lax|Strict))?)(?!.*\\3))*$", + "type": "text", + "multiple": "cookie-flags", + "pattern": "^(\\*|[^;]+)( (HttpOnly|(SameSite)(?!.*\\4)(=(Lax|Strict))?)(?!.*\\3))*$", + "inpType": "input", + "name": "Cookie flags", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "* HttpOnly SameSite=Lax", + "prev_value": "* HttpOnly SameSite=Lax", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Cookie flags automatically added to all cookies (value accepted for nginx_cookie_flag_module)." + } + ], + "containerClass": "z-12", + "method": "default" + } + } + } + } + }, + { + "id": "letsencrypt", + "stream": "yes", + "name": "Let's Encrypt", + "description": "Automatic creation, renewal and configuration of Let's Encrypt certificates.", + "version": "1.0", + "type": "core", + "method": "manual", + "page": false, + "settings": { + "AUTO_LETS_ENCRYPT": { + "context": "multisite", + "default": "no", + "help": "Activate automatic Let's Encrypt mode.", + "id": "auto-lets-encrypt", + "label": "Automatic Let's Encrypt", + "regex": "^(yes|no)$", + "type": "check", + "containerClass": "z-2", + "pattern": "^(yes|no)$", + "inpType": "checkbox", + "name": "Automatic Let's Encrypt", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "no", + "method": "default", + "prev_value": "no", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Activate automatic Let's Encrypt mode." + } + ] + }, + "EMAIL_LETS_ENCRYPT": { + "context": "multisite", + "default": "", + "help": "Email used for Let's Encrypt notification and in certificate.", + "id": "email-lets-encrypt", + "label": "Email Let's Encrypt", + "regex": "^([^@ \\t\\r\\n]+@[^@ \\t\\r\\n]+\\.[^@ \\t\\r\\n]+)?$", + "type": "text", + "containerClass": "z-1", + "pattern": "^([^@ \\t\\r\\n]+@[^@ \\t\\r\\n]+\\.[^@ \\t\\r\\n]+)?$", + "inpType": "input", + "name": "Email Let's Encrypt", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "", + "method": "default", + "prev_value": "", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Email used for Let's Encrypt notification and in certificate." + } + ] + }, + "USE_LETS_ENCRYPT_STAGING": { + "context": "multisite", + "default": "no", + "help": "Use the staging environment for Let\u2019s Encrypt certificate generation. Useful when you are testing your deployments to avoid being rate limited in the production environment.", + "id": "use-lets-encrypt-staging", + "label": "Use Let's Encrypt Staging", + "regex": "^(yes|no)$", + "type": "check", + "containerClass": "z-0", + "pattern": "^(yes|no)$", + "inpType": "checkbox", + "name": "Use Let's Encrypt Staging", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "no", + "method": "default", + "prev_value": "no", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Use the staging environment for Let\u2019s Encrypt certificate generation. Useful when you are testing your deployments to avoid being rate limited in the production environment." + } + ] + } + }, + "checksum": null + }, + { + "id": "limit", + "stream": "partial", + "name": "Limit", + "description": "Limit maximum number of requests and connections.", + "version": "1.0", + "type": "core", + "method": "manual", + "page": true, + "settings": { + "USE_LIMIT_REQ": { + "context": "multisite", + "default": "yes", + "help": "Activate limit requests feature.", + "id": "use-limit-req", + "label": "Activate limit requests", + "regex": "^(yes|no)$", + "type": "check", + "containerClass": "z-6", + "pattern": "^(yes|no)$", + "inpType": "checkbox", + "name": "Activate limit requests", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "yes", + "method": "default", + "prev_value": "yes", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Activate limit requests feature." + } + ] + }, + "USE_LIMIT_CONN": { + "context": "multisite", + "default": "yes", + "help": "Activate limit connections feature.", + "id": "use-limit-conn", + "label": "Activate limit connections", + "regex": "^(yes|no)$", + "type": "check", + "containerClass": "z-3", + "pattern": "^(yes|no)$", + "inpType": "checkbox", + "name": "Activate limit connections", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "yes", + "method": "default", + "prev_value": "yes", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Activate limit connections feature." + } + ] + }, + "LIMIT_CONN_MAX_HTTP1": { + "context": "multisite", + "default": "10", + "help": "Maximum number of connections per IP when using HTTP/1.X protocol.", + "id": "limit-conn-max-http1", + "label": "Maximum number of HTTP/1.X connections", + "regex": "^\\d+$", + "type": "text", + "containerClass": "z-2", + "pattern": "^\\d+$", + "inpType": "input", + "name": "Maximum number of HTTP/1.X connections", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "10", + "method": "default", + "prev_value": "10", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Maximum number of connections per IP when using HTTP/1.X protocol." + } + ] + }, + "LIMIT_CONN_MAX_HTTP2": { + "context": "multisite", + "default": "100", + "help": "Maximum number of streams per IP when using HTTP/2 protocol.", + "id": "limit-conn-max-http2", + "label": "Maximum number of HTTP/2 streams", + "regex": "^\\d+$", + "type": "text", + "containerClass": "z-1", + "pattern": "^\\d+$", + "inpType": "input", + "name": "Maximum number of HTTP/2 streams", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "100", + "method": "default", + "prev_value": "100", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Maximum number of streams per IP when using HTTP/2 protocol." + } + ] + }, + "LIMIT_CONN_MAX_STREAM": { + "context": "multisite", + "default": "10", + "help": "Maximum number of connections per IP when using stream.", + "id": "limit-conn-max-stream", + "label": "Maximum number of stream connections", + "regex": "^\\d+$", + "type": "text", + "containerClass": "z-0", + "pattern": "^\\d+$", + "inpType": "input", + "name": "Maximum number of stream connections", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "10", + "method": "default", + "prev_value": "10", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Maximum number of connections per IP when using stream." + } + ] + } + }, + "checksum": null, + "multiples_schema": { + "limit-req": { + "LIMIT_REQ_URL": { + "context": "multisite", + "default": "/", + "help": "URL (PCRE regex) where the limit request will be applied or special value / for all requests.", + "id": "limit-req-url", + "label": "Limit request URL", + "regex": "^.+$", + "type": "text", + "multiple": "limit-req", + "pattern": "^.+$", + "inpType": "input", + "name": "Limit request URL", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "/", + "prev_value": "/", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "URL (PCRE regex) where the limit request will be applied or special value / for all requests." + } + ], + "containerClass": "z-6" + }, + "LIMIT_REQ_RATE": { + "context": "multisite", + "default": "2r/s", + "help": "Rate to apply to the URL (s for second, m for minute, h for hour and d for day).", + "id": "limit-req-rate", + "label": "Limit request Rate", + "regex": "^\\d+r/[smhd]$", + "type": "text", + "multiple": "limit-req", + "pattern": "^\\d+r/[smhd]$", + "inpType": "input", + "name": "Limit request Rate", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "2r/s", + "prev_value": "2r/s", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Rate to apply to the URL (s for second, m for minute, h for hour and d for day)." + } + ], + "containerClass": "z-5" + } + } + }, + "multiples": { + "limit-req": { + "0": { + "LIMIT_REQ_URL": { + "context": "multisite", + "default": "/", + "help": "URL (PCRE regex) where the limit request will be applied or special value / for all requests.", + "id": "limit-req-url", + "label": "Limit request URL", + "regex": "^.+$", + "type": "text", + "multiple": "limit-req", + "pattern": "^.+$", + "inpType": "input", + "name": "Limit request URL", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "/", + "prev_value": "/", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "URL (PCRE regex) where the limit request will be applied or special value / for all requests." + } + ], + "containerClass": "z-6", + "method": "default" + }, + "LIMIT_REQ_RATE": { + "context": "multisite", + "default": "2r/s", + "help": "Rate to apply to the URL (s for second, m for minute, h for hour and d for day).", + "id": "limit-req-rate", + "label": "Limit request Rate", + "regex": "^\\d+r/[smhd]$", + "type": "text", + "multiple": "limit-req", + "pattern": "^\\d+r/[smhd]$", + "inpType": "input", + "name": "Limit request Rate", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "2r/s", + "prev_value": "2r/s", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Rate to apply to the URL (s for second, m for minute, h for hour and d for day)." + } + ], + "containerClass": "z-5", + "method": "default" + } + } + } + } + }, + { + "id": "metrics", + "stream": "partial", + "name": "Metrics", + "description": "Metrics collection and retrieve.", + "version": "1.0", + "type": "core", + "method": "manual", + "page": false, + "settings": { + "USE_METRICS": { + "context": "multisite", + "default": "yes", + "help": "Enable collection and retrieval of internal metrics.", + "id": "use-metrics", + "label": "Use metrics", + "regex": "^(yes|no)$", + "type": "check", + "containerClass": "z-0", + "pattern": "^(yes|no)$", + "inpType": "checkbox", + "name": "Use metrics", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "yes", + "method": "default", + "prev_value": "yes", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Enable collection and retrieval of internal metrics." + } + ] + } + }, + "checksum": null + }, + { + "id": "misc", + "stream": "partial", + "name": "Miscellaneous", + "description": "Miscellaneous settings.", + "version": "1.0", + "type": "core", + "method": "manual", + "page": true, + "settings": { + "REDIRECT_HTTP_TO_HTTPS": { + "context": "multisite", + "default": "no", + "help": "Redirect all HTTP request to HTTPS.", + "id": "redirect-http-to-https", + "label": "Redirect HTTP to HTTPS", + "regex": "^(yes|no)$", + "type": "check", + "containerClass": "z-15", + "pattern": "^(yes|no)$", + "inpType": "checkbox", + "name": "Redirect HTTP to HTTPS", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "no", + "method": "default", + "prev_value": "no", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Redirect all HTTP request to HTTPS." + } + ] + }, + "AUTO_REDIRECT_HTTP_TO_HTTPS": { + "context": "multisite", + "default": "yes", + "help": "Try to detect if HTTPS is used and activate HTTP to HTTPS redirection if that's the case.", + "id": "auto-redirect-http-to-https", + "label": "Auto redirect HTTP to HTTPS", + "regex": "^(yes|no)$", + "type": "check", + "containerClass": "z-14", + "pattern": "^(yes|no)$", + "inpType": "checkbox", + "name": "Auto redirect HTTP to HTTPS", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "yes", + "method": "default", + "prev_value": "yes", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Try to detect if HTTPS is used and activate HTTP to HTTPS redirection if that's the case." + } + ] + }, + "ALLOWED_METHODS": { + "context": "multisite", + "default": "GET|POST|HEAD", + "help": "Allowed HTTP and WebDAV methods, separated with pipes to be sent by clients.", + "id": "allowed-methods", + "label": "Allowed methods", + "regex": "^(?!\\|)(\\|?([A-Z]{3,})(?!.*(^|\\|)\\2))+$", + "type": "text", + "containerClass": "z-13", + "pattern": "^(?!\\|)(\\|?([A-Z]{3,})(?!.*(^|\\|)\\2))+$", + "inpType": "input", + "name": "Allowed methods", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "GET|POST|HEAD", + "method": "default", + "prev_value": "GET|POST|HEAD", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Allowed HTTP and WebDAV methods, separated with pipes to be sent by clients." + } + ] + }, + "MAX_CLIENT_SIZE": { + "context": "multisite", + "default": "10m", + "help": "Maximum body size (0 for infinite).", + "id": "max-client-size", + "label": "Maximum body size", + "regex": "^\\d+[kKmMgG]?$", + "type": "text", + "containerClass": "z-12", + "pattern": "^\\d+[kKmMgG]?$", + "inpType": "input", + "name": "Maximum body size", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "10m", + "method": "default", + "prev_value": "10m", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Maximum body size (0 for infinite)." + } + ] + }, + "SERVE_FILES": { + "context": "multisite", + "default": "yes", + "help": "Serve files from the local folder.", + "id": "serve-files", + "label": "Serve files", + "regex": "^(yes|no)$", + "type": "check", + "containerClass": "z-11", + "pattern": "^(yes|no)$", + "inpType": "checkbox", + "name": "Serve files", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": true, + "value": "no", + "method": "scheduler", + "prev_value": "no", + "popovers": [ + { + "iconName": "trespass", + "text": "inp_popover_method_disabled" + }, + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Serve files from the local folder." + } + ] + }, + "ROOT_FOLDER": { + "context": "multisite", + "default": "", + "help": "Root folder containing files to serve (/var/www/html/{server_name} if unset).", + "id": "root-folder", + "label": "Root folder", + "regex": "^(/[\\w. \\-]+)*/?$", + "type": "text", + "containerClass": "z-10", + "pattern": "^(/[\\w. \\-]+)*/?$", + "inpType": "input", + "name": "Root folder", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "", + "method": "default", + "prev_value": "", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Root folder containing files to serve (/var/www/html/{server_name} if unset)." + } + ] + }, + "SSL_PROTOCOLS": { + "context": "multisite", + "default": "TLSv1.2 TLSv1.3", + "help": "The supported version of TLS. We recommend the default value TLSv1.2 TLSv1.3 for compatibility reasons.", + "id": "https-protocols", + "label": "HTTPS protocols", + "regex": "^(?! )( ?TLSv1\\.[0-3])*$", + "type": "text", + "containerClass": "z-9", + "pattern": "^(?! )( ?TLSv1\\.[0-3])*$", + "inpType": "input", + "name": "HTTPS protocols", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "TLSv1.2 TLSv1.3", + "method": "default", + "prev_value": "TLSv1.2 TLSv1.3", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "The supported version of TLS. We recommend the default value TLSv1.2 TLSv1.3 for compatibility reasons." + } + ] + }, + "HTTP2": { + "context": "multisite", + "default": "yes", + "help": "Support HTTP2 protocol when HTTPS is enabled.", + "id": "http2", + "label": "HTTP2", + "regex": "^(yes|no)$", + "type": "check", + "containerClass": "z-8", + "pattern": "^(yes|no)$", + "inpType": "checkbox", + "name": "HTTP2", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "yes", + "method": "default", + "prev_value": "yes", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Support HTTP2 protocol when HTTPS is enabled." + } + ] + }, + "HTTP3": { + "context": "multisite", + "default": "no", + "help": "Support HTTP3 protocol when HTTPS is enabled.", + "id": "http3", + "label": "HTTP3", + "regex": "^(yes|no)$", + "type": "check", + "containerClass": "z-7", + "pattern": "^(yes|no)$", + "inpType": "checkbox", + "name": "HTTP3", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "no", + "method": "default", + "prev_value": "no", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Support HTTP3 protocol when HTTPS is enabled." + } + ] + }, + "HTTP3_ALT_SVC_PORT": { + "context": "multisite", + "default": "443", + "help": "HTTP3 alternate service port. This value will be used as part of the Alt-Svc header.", + "id": "http3-alt-svc-port", + "label": "HTTP3 Alt-Svc port", + "regex": "^\\d+$", + "type": "text", + "containerClass": "z-6", + "pattern": "^\\d+$", + "inpType": "input", + "name": "HTTP3 Alt-Svc port", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "443", + "method": "default", + "prev_value": "443", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "HTTP3 alternate service port. This value will be used as part of the Alt-Svc header." + } + ] + }, + "LISTEN_HTTP": { + "context": "multisite", + "default": "yes", + "help": "Respond to (insecure) HTTP requests.", + "id": "http-listen", + "label": "HTTP listen", + "regex": "^(yes|no)$", + "type": "check", + "containerClass": "z-5", + "pattern": "^(yes|no)$", + "inpType": "checkbox", + "name": "HTTP listen", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "yes", + "method": "default", + "prev_value": "yes", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Respond to (insecure) HTTP requests." + } + ] + }, + "USE_OPEN_FILE_CACHE": { + "context": "multisite", + "default": "no", + "help": "Enable open file cache feature", + "id": "use-open-file-cache", + "label": "Use open file cache", + "regex": "^(yes|no)$", + "type": "check", + "containerClass": "z-4", + "pattern": "^(yes|no)$", + "inpType": "checkbox", + "name": "Use open file cache", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "no", + "method": "default", + "prev_value": "no", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Enable open file cache feature" + } + ] + }, + "OPEN_FILE_CACHE": { + "context": "multisite", + "default": "max=1000 inactive=20s", + "help": "Open file cache directive", + "id": "open-file-cache", + "label": "Use open file cache", + "regex": "^(off|max=\\d+( inactive=\\d+(ms?|[shdwMy]))?)$", + "type": "text", + "containerClass": "z-3", + "pattern": "^(off|max=\\d+( inactive=\\d+(ms?|[shdwMy]))?)$", + "inpType": "input", + "name": "Use open file cache", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "max=1000 inactive=20s", + "method": "default", + "prev_value": "max=1000 inactive=20s", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Open file cache directive" + } + ] + }, + "OPEN_FILE_CACHE_ERRORS": { + "context": "multisite", + "default": "yes", + "help": "Enable open file cache for errors", + "id": "open-file-cache-errors", + "label": "Open file cache errors", + "regex": "^(yes|no)$", + "type": "check", + "containerClass": "z-2", + "pattern": "^(yes|no)$", + "inpType": "checkbox", + "name": "Open file cache errors", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "yes", + "method": "default", + "prev_value": "yes", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Enable open file cache for errors" + } + ] + }, + "OPEN_FILE_CACHE_MIN_USES": { + "context": "multisite", + "default": "2", + "help": "Enable open file cache minimum uses", + "id": "open-file-cache-min-uses", + "label": "Open file cache min uses", + "regex": "^[1-9]\\d*$", + "type": "text", + "containerClass": "z-1", + "pattern": "^[1-9]\\d*$", + "inpType": "input", + "name": "Open file cache min uses", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "2", + "method": "default", + "prev_value": "2", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Enable open file cache minimum uses" + } + ] + }, + "OPEN_FILE_CACHE_VALID": { + "context": "multisite", + "default": "30s", + "help": "Open file cache valid time", + "id": "open-file-cache-valid", + "label": "Open file cache valid time", + "regex": "^\\d+(ms?|[shdwMy])$", + "type": "text", + "containerClass": "z-0", + "pattern": "^\\d+(ms?|[shdwMy])$", + "inpType": "input", + "name": "Open file cache valid time", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "30s", + "method": "default", + "prev_value": "30s", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Open file cache valid time" + } + ] + } + }, + "checksum": null + }, + { + "id": "modsecurity", + "stream": "no", + "name": "ModSecurity", + "description": "Management of the ModSecurity WAF.", + "version": "1.0", + "type": "core", + "method": "manual", + "page": false, + "settings": { + "USE_MODSECURITY": { + "context": "multisite", + "default": "yes", + "help": "Enable ModSecurity WAF.", + "id": "use-modsecurity", + "label": "Use ModSecurity", + "regex": "^(yes|no)$", + "type": "check", + "containerClass": "z-5", + "pattern": "^(yes|no)$", + "inpType": "checkbox", + "name": "Use ModSecurity", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "yes", + "method": "default", + "prev_value": "yes", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Enable ModSecurity WAF." + } + ] + }, + "USE_MODSECURITY_CRS": { + "context": "multisite", + "default": "yes", + "help": "Enable OWASP Core Rule Set.", + "id": "use-modsecurity-crs", + "label": "Use Core Rule Set", + "regex": "^(yes|no)$", + "type": "check", + "containerClass": "z-4", + "pattern": "^(yes|no)$", + "inpType": "checkbox", + "name": "Use Core Rule Set", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "yes", + "method": "default", + "prev_value": "yes", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Enable OWASP Core Rule Set." + } + ] + }, + "MODSECURITY_CRS_VERSION": { + "context": "multisite", + "default": "3", + "help": "Version of the OWASP Core Rule Set to use with ModSecurity (3, 4 or nightly).", + "id": "modsecurity-crs-version", + "label": "Core Rule Set Version", + "regex": "^(3|4|nightly)$", + "type": "select", + "containerClass": "z-3", + "pattern": "^(3|4|nightly)$", + "inpType": "select", + "name": "Core Rule Set Version", + "values": [ + "3", + "4", + "nightly" + ], + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "4", + "method": "default", + "prev_value": "4", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Version of the OWASP Core Rule Set to use with ModSecurity (3, 4 or nightly)." + } + ] + }, + "MODSECURITY_SEC_AUDIT_ENGINE": { + "context": "multisite", + "default": "RelevantOnly", + "help": "SecAuditEngine directive of ModSecurity.", + "id": "modsecurity-sec-audit-engine", + "label": "SecAuditEngine", + "regex": "^(On|RelevantOnly|Off)$", + "type": "select", + "containerClass": "z-2", + "pattern": "^(On|RelevantOnly|Off)$", + "inpType": "select", + "name": "SecAuditEngine", + "values": [ + "Off", + "On", + "RelevantOnly" + ], + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "RelevantOnly", + "method": "default", + "prev_value": "RelevantOnly", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "SecAuditEngine directive of ModSecurity." + } + ] + }, + "MODSECURITY_SEC_RULE_ENGINE": { + "context": "multisite", + "default": "On", + "help": "SecRuleEngine directive of ModSecurity.", + "id": "modsecurity-sec-rule-engine", + "label": "SecRuleEngine", + "regex": "^(On|DetectionOnly|Off)$", + "type": "select", + "containerClass": "z-1", + "pattern": "^(On|DetectionOnly|Off)$", + "inpType": "select", + "name": "SecRuleEngine", + "values": [ + "DetectionOnly", + "Off", + "On" + ], + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "On", + "method": "default", + "prev_value": "On", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "SecRuleEngine directive of ModSecurity." + } + ] + }, + "MODSECURITY_SEC_AUDIT_LOG_PARTS": { + "context": "multisite", + "default": "ABCFHZ", + "help": "SecAuditLogParts directive of ModSecurity.", + "id": "modsecurity-sec-audit-log-parts", + "label": "SecAuditLogParts", + "regex": "^A(([B-K])(?!.*\\2))+Z$", + "type": "text", + "containerClass": "z-0", + "pattern": "^A(([B-K])(?!.*\\2))+Z$", + "inpType": "input", + "name": "SecAuditLogParts", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "ABCFHZ", + "method": "default", + "prev_value": "ABCFHZ", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "SecAuditLogParts directive of ModSecurity." + } + ] + } + }, + "checksum": null + }, + { + "id": "php", + "stream": "no", + "name": "PHP", + "description": "Manage local or remote PHP-FPM.", + "version": "1.0", + "type": "core", + "method": "manual", + "page": false, + "settings": { + "REMOTE_PHP": { + "context": "multisite", + "default": "", + "help": "Hostname of the remote PHP-FPM instance.", + "id": "remote-php", + "label": "Remote PHP", + "regex": "^((?=.{1,255}$)[0-9A-Za-z](?:(?:[0-9A-Za-z]|-){0,61}[0-9A-Za-z])?(?:\\.[0-9A-Za-z](?:(?:[0-9A-Za-z]|-){0,61}[0-9A-Za-z])?)*\\.?)?$", + "type": "text", + "containerClass": "z-3", + "pattern": "^((?=.{1,255}$)[0-9A-Za-z](?:(?:[0-9A-Za-z]|-){0,61}[0-9A-Za-z])?(?:\\.[0-9A-Za-z](?:(?:[0-9A-Za-z]|-){0,61}[0-9A-Za-z])?)*\\.?)?$", + "inpType": "input", + "name": "Remote PHP", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "", + "method": "default", + "prev_value": "", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Hostname of the remote PHP-FPM instance." + } + ] + }, + "REMOTE_PHP_PATH": { + "context": "multisite", + "default": "", + "help": "Root folder containing files in the remote PHP-FPM instance.", + "id": "remote-php-path", + "label": "Remote PHP path", + "regex": "^(/[\\w. \\-]+)*/?$", + "type": "text", + "containerClass": "z-2", + "pattern": "^(/[\\w. \\-]+)*/?$", + "inpType": "input", + "name": "Remote PHP path", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "", + "method": "default", + "prev_value": "", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Root folder containing files in the remote PHP-FPM instance." + } + ] + }, + "LOCAL_PHP": { + "context": "multisite", + "default": "", + "help": "Path to the PHP-FPM socket file.", + "id": "local", + "label": "Local PHP", + "regex": "^(/[\\w. \\-]+)*/?$", + "type": "text", + "containerClass": "z-1", + "pattern": "^(/[\\w. \\-]+)*/?$", + "inpType": "input", + "name": "Local PHP", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "", + "method": "default", + "prev_value": "", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Path to the PHP-FPM socket file." + } + ] + }, + "LOCAL_PHP_PATH": { + "context": "multisite", + "default": "", + "help": "Root folder containing files in the local PHP-FPM instance.", + "id": "local-php-path", + "label": "Local PHP path", + "regex": "^(/[\\w. \\-]+)*/?$", + "type": "text", + "containerClass": "z-0", + "pattern": "^(/[\\w. \\-]+)*/?$", + "inpType": "input", + "name": "Local PHP path", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "", + "method": "default", + "prev_value": "", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Root folder containing files in the local PHP-FPM instance." + } + ] + } + }, + "checksum": null + }, + { + "id": "realip", + "stream": "partial", + "name": "Real IP", + "description": "Get real IP of clients when BunkerWeb is behind a reverse proxy / load balancer.", + "version": "1.0", + "type": "core", + "method": "manual", + "page": false, + "settings": { + "USE_REAL_IP": { + "context": "multisite", + "default": "no", + "help": "Retrieve the real IP of client.", + "id": "use-real-ip", + "label": "Use real ip", + "regex": "^(yes|no)$", + "type": "check", + "containerClass": "z-4", + "pattern": "^(yes|no)$", + "inpType": "checkbox", + "name": "Use real ip", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "no", + "method": "default", + "prev_value": "no", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Retrieve the real IP of client." + } + ] + }, + "USE_PROXY_PROTOCOL": { + "context": "multisite", + "default": "no", + "help": "Enable PROXY protocol communication.", + "id": "use-proxy-protocol", + "label": "Use PROXY protocol", + "regex": "^(yes|no)$", + "type": "check", + "containerClass": "z-3", + "pattern": "^(yes|no)$", + "inpType": "checkbox", + "name": "Use PROXY protocol", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "no", + "method": "default", + "prev_value": "no", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Enable PROXY protocol communication." + } + ] + }, + "REAL_IP_FROM": { + "context": "multisite", + "default": "192.168.0.0/16 172.16.0.0/12 10.0.0.0/8", + "help": "List of trusted IPs / networks, separated with spaces, where proxied requests come from.", + "id": "real-ip-from", + "label": "Real IP from", + "regex": "^(?! )( *(((\\b25[0-5]|\\b2[0-4]\\d|\\b[01]?\\d\\d?)(\\.(25[0-5]|2[0-4]\\d|[01]?\\d\\d?)){3})(\\/([1-2][0-9]?|3[0-2]?|[04-9]))?|(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]Z{0,4}){0,4}%[0-9a-zA-Z]+|::(ffff(:0{1,4})?:)?((25[0-5]|(2[0-4]|1?\\d)?\\d)\\.){3}(25[0-5]|(2[0-4]|1?\\d)?\\d)|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1?\\d)?\\d)\\.){3}(25[0-5]|(2[0-4]|1?\\d)?\\d))(\\/(12[0-8]|1[01][0-9]|[0-9][0-9]?))?)(?!.*\\D\\2([^\\d\\/]|$)) *)*$", + "type": "text", + "containerClass": "z-2", + "pattern": "^(?! )( *(((\\b25[0-5]|\\b2[0-4]\\d|\\b[01]?\\d\\d?)(\\.(25[0-5]|2[0-4]\\d|[01]?\\d\\d?)){3})(\\/([1-2][0-9]?|3[0-2]?|[04-9]))?|(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]Z{0,4}){0,4}%[0-9a-zA-Z]+|::(ffff(:0{1,4})?:)?((25[0-5]|(2[0-4]|1?\\d)?\\d)\\.){3}(25[0-5]|(2[0-4]|1?\\d)?\\d)|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1?\\d)?\\d)\\.){3}(25[0-5]|(2[0-4]|1?\\d)?\\d))(\\/(12[0-8]|1[01][0-9]|[0-9][0-9]?))?)(?!.*\\D\\2([^\\d\\/]|$)) *)*$", + "inpType": "input", + "name": "Real IP from", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "192.168.0.0/16 172.16.0.0/12 10.0.0.0/8", + "method": "default", + "prev_value": "192.168.0.0/16 172.16.0.0/12 10.0.0.0/8", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "List of trusted IPs / networks, separated with spaces, where proxied requests come from." + } + ] + }, + "REAL_IP_HEADER": { + "context": "multisite", + "default": "X-Forwarded-For", + "help": "HTTP header containing the real IP or special value proxy_protocol for PROXY protocol.", + "id": "real-ip-header", + "label": "Real IP header", + "regex": "^(?! )(( ?(?!proxy_protocol)[\\w\\-]+)*|proxy_protocol)$", + "type": "text", + "containerClass": "z-1", + "pattern": "^(?! )(( ?(?!proxy_protocol)[\\w\\-]+)*|proxy_protocol)$", + "inpType": "input", + "name": "Real IP header", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "X-Forwarded-For", + "method": "default", + "prev_value": "X-Forwarded-For", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "HTTP header containing the real IP or special value proxy_protocol for PROXY protocol." + } + ] + }, + "REAL_IP_RECURSIVE": { + "context": "multisite", + "default": "yes", + "help": "Perform a recursive search in the header container IP address.", + "id": "real-ip-recursive", + "label": "Real IP recursive", + "regex": "^(yes|no)$", + "type": "check", + "containerClass": "z-0", + "pattern": "^(yes|no)$", + "inpType": "checkbox", + "name": "Real IP recursive", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "yes", + "method": "default", + "prev_value": "yes", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Perform a recursive search in the header container IP address." + } + ] + } + }, + "checksum": null + }, + { + "id": "redirect", + "stream": "no", + "name": "Redirect", + "description": "Manage HTTP redirects.", + "version": "1.0", + "type": "core", + "method": "manual", + "page": false, + "settings": { + "REDIRECT_TO": { + "context": "multisite", + "default": "", + "help": "Redirect a whole site to another one.", + "id": "redirect-to", + "label": "Redirect to", + "regex": "^(https?:\\/\\/[\\-\\w@:%.+~#=]+[\\-\\w\\(\\)!@:%+.~#?&\\/=$]*)?$", + "type": "text", + "containerClass": "z-2", + "pattern": "^(https?:\\/\\/[\\-\\w@:%.+~#=]+[\\-\\w\\(\\)!@:%+.~#?&\\/=$]*)?$", + "inpType": "input", + "name": "Redirect to", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "", + "method": "default", + "prev_value": "", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Redirect a whole site to another one." + } + ] + }, + "REDIRECT_TO_REQUEST_URI": { + "context": "multisite", + "default": "no", + "help": "Append the requested URI to the redirect address.", + "id": "redirect-to-request-uri", + "label": "Append request URI", + "regex": "^(yes|no)$", + "type": "check", + "containerClass": "z-1", + "pattern": "^(yes|no)$", + "inpType": "checkbox", + "name": "Append request URI", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "no", + "method": "default", + "prev_value": "no", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Append the requested URI to the redirect address." + } + ] + }, + "REDIRECT_TO_STATUS_CODE": { + "context": "multisite", + "default": "301", + "help": "Status code to send to client when redirecting.", + "id": "redirect-to-status-code", + "label": "Append request URI", + "regex": "^(301|302)$", + "type": "select", + "containerClass": "z-0", + "pattern": "^(301|302)$", + "inpType": "select", + "name": "Append request URI", + "values": [ + "301", + "302" + ], + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "301", + "method": "default", + "prev_value": "301", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Status code to send to client when redirecting." + } + ] + } + }, + "checksum": null + }, + { + "id": "reverseproxy", + "stream": "partial", + "name": "Reverse proxy", + "description": "Manage reverse proxy configurations.", + "version": "1.0", + "type": "core", + "method": "manual", + "page": false, + "settings": { + "USE_REVERSE_PROXY": { + "context": "multisite", + "default": "no", + "help": "Activate reverse proxy mode.", + "id": "use-reverse-proxy", + "label": "Use reverse proxy", + "regex": "^(yes|no)$", + "type": "check", + "containerClass": "z-23", + "pattern": "^(yes|no)$", + "inpType": "checkbox", + "name": "Use reverse proxy", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": true, + "value": "yes", + "method": "scheduler", + "prev_value": "yes", + "popovers": [ + { + "iconName": "trespass", + "text": "inp_popover_method_disabled" + }, + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Activate reverse proxy mode." + } + ] + }, + "REVERSE_PROXY_INTERCEPT_ERRORS": { + "context": "multisite", + "default": "yes", + "help": "Intercept and rewrite errors.", + "id": "reverse-proxy-intercept-errors", + "label": "Intercept errors", + "regex": "^(yes|no)$", + "type": "check", + "containerClass": "z-22", + "pattern": "^(yes|no)$", + "inpType": "checkbox", + "name": "Intercept errors", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "yes", + "method": "default", + "prev_value": "yes", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Intercept and rewrite errors." + } + ] + }, + "REVERSE_PROXY_CUSTOM_HOST": { + "context": "multisite", + "default": "", + "help": "Override Host header sent to upstream server.", + "id": "reverse-proxy-custom-host", + "label": "Reverse proxy custom host", + "regex": "^.*$", + "type": "text", + "containerClass": "z-21", + "pattern": "^.*$", + "inpType": "input", + "name": "Reverse proxy custom host", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "", + "method": "default", + "prev_value": "", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Override Host header sent to upstream server." + } + ] + }, + "USE_PROXY_CACHE": { + "context": "multisite", + "default": "no", + "help": "Enable or disable caching of the proxied resources.", + "id": "use-proxy-cache", + "label": "Reverse proxy cache", + "regex": "^(yes|no)$", + "type": "check", + "containerClass": "z-6", + "pattern": "^(yes|no)$", + "inpType": "checkbox", + "name": "Reverse proxy cache", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "no", + "method": "default", + "prev_value": "no", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Enable or disable caching of the proxied resources." + } + ] + }, + "PROXY_CACHE_METHODS": { + "context": "multisite", + "default": "GET HEAD", + "help": "HTTP methods that should trigger a cache operation.", + "id": "proxy-cache-methods", + "label": "Reverse proxy cache methods", + "regex": "^(?! )( ?(GET|HEAD|POST|PUT|DELETE|CONNECT|OPTIONS|TRACE|PATCH)(?!.*\\2))+$", + "type": "text", + "containerClass": "z-5", + "pattern": "^(?! )( ?(GET|HEAD|POST|PUT|DELETE|CONNECT|OPTIONS|TRACE|PATCH)(?!.*\\2))+$", + "inpType": "input", + "name": "Reverse proxy cache methods", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "GET HEAD", + "method": "default", + "prev_value": "GET HEAD", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "HTTP methods that should trigger a cache operation." + } + ] + }, + "PROXY_CACHE_MIN_USES": { + "context": "multisite", + "default": "2", + "help": "The minimum number of requests before a response is cached.", + "id": "proxy-cache-min-uses", + "label": "Reverse proxy cache minimum uses", + "regex": "^[1-9]\\d*$", + "type": "text", + "containerClass": "z-4", + "pattern": "^[1-9]\\d*$", + "inpType": "input", + "name": "Reverse proxy cache minimum uses", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "2", + "method": "default", + "prev_value": "2", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "The minimum number of requests before a response is cached." + } + ] + }, + "PROXY_CACHE_KEY": { + "context": "multisite", + "default": "$scheme$host$request_uri", + "help": "The key used to uniquely identify a cached response.", + "id": "proxy-cache-key", + "label": "Reverse proxy cache key", + "regex": "^(?! )( ?(\\$[a-z_]+)(?!.*\\2))+$", + "type": "text", + "containerClass": "z-3", + "pattern": "^(?! )( ?(\\$[a-z_]+)(?!.*\\2))+$", + "inpType": "input", + "name": "Reverse proxy cache key", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "$scheme$host$request_uri", + "method": "default", + "prev_value": "$scheme$host$request_uri", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "The key used to uniquely identify a cached response." + } + ] + }, + "PROXY_CACHE_VALID": { + "context": "multisite", + "default": "200=24h 301=1h 302=24h", + "help": "Define the caching time depending on the HTTP status code (list of status=time), separated with spaces.", + "id": "proxy-cache-valid", + "label": "Reverse proxy cache valid", + "regex": "^(?! )( ?([1-5]\\d{2})(?!.*\\2=)=\\d+(ms?|[shdwMy]))*$", + "type": "text", + "containerClass": "z-2", + "pattern": "^(?! )( ?([1-5]\\d{2})(?!.*\\2=)=\\d+(ms?|[shdwMy]))*$", + "inpType": "input", + "name": "Reverse proxy cache valid", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "200=24h 301=1h 302=24h", + "method": "default", + "prev_value": "200=24h 301=1h 302=24h", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Define the caching time depending on the HTTP status code (list of status=time), separated with spaces." + } + ] + }, + "PROXY_NO_CACHE": { + "context": "multisite", + "default": "$http_pragma $http_authorization", + "help": "Conditions to disable caching of responses.", + "id": "proxy-no-cache", + "label": "Reverse proxy no cache", + "regex": "^.*$", + "type": "text", + "containerClass": "z-1", + "pattern": "^.*$", + "inpType": "input", + "name": "Reverse proxy no cache", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "$http_pragma $http_authorization", + "method": "default", + "prev_value": "$http_pragma $http_authorization", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Conditions to disable caching of responses." + } + ] + }, + "PROXY_CACHE_BYPASS": { + "context": "multisite", + "default": "0", + "help": "Conditions to bypass caching of responses.", + "id": "proxy-cache-bypass", + "label": "Reverse proxy bypass", + "regex": "^.*$", + "type": "text", + "containerClass": "z-0", + "pattern": "^.*$", + "inpType": "input", + "name": "Reverse proxy bypass", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "0", + "method": "default", + "prev_value": "0", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Conditions to bypass caching of responses." + } + ] + } + }, + "checksum": null, + "multiples_schema": { + "reverse-proxy": { + "REVERSE_PROXY_HOST": { + "context": "multisite", + "default": "", + "help": "Full URL of the proxied resource (proxy_pass).", + "id": "reverse-proxy-host", + "label": "Reverse proxy host", + "regex": "^.*$", + "type": "text", + "multiple": "reverse-proxy", + "pattern": "^.*$", + "inpType": "input", + "name": "Reverse proxy host", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": true, + "value": "", + "prev_value": "", + "popovers": [ + { + "iconName": "trespass", + "text": "inp_popover_method_disabled" + }, + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Full URL of the proxied resource (proxy_pass)." + } + ], + "containerClass": "z-23" + }, + "REVERSE_PROXY_URL": { + "context": "multisite", + "default": "/", + "help": "Location URL that will be proxied.", + "id": "reverse-proxy-url", + "label": "Reverse proxy url", + "regex": "^.*$", + "type": "text", + "multiple": "reverse-proxy", + "pattern": "^.*$", + "inpType": "input", + "name": "Reverse proxy url", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "/", + "prev_value": "/", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Location URL that will be proxied." + } + ], + "containerClass": "z-22" + }, + "REVERSE_PROXY_WS": { + "context": "multisite", + "default": "no", + "help": "Enable websocket on the proxied resource.", + "id": "reverse-proxy-ws", + "label": "Reverse proxy WS", + "regex": "^(yes|no)$", + "type": "check", + "multiple": "reverse-proxy", + "pattern": "^(yes|no)$", + "inpType": "checkbox", + "name": "Reverse proxy WS", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "no", + "prev_value": "no", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Enable websocket on the proxied resource." + } + ], + "containerClass": "z-21" + }, + "REVERSE_PROXY_HEADERS": { + "context": "multisite", + "default": "", + "help": "List of HTTP headers to send to proxied resource separated with semicolons (values for proxy_set_header directive).", + "id": "reverse-proxy-headers", + "label": "Reverse proxy headers", + "regex": "^(?![; ])(;? ?([\\w\\-]+)(?!.*\\2 ) [^;]+)*$", + "type": "text", + "multiple": "reverse-proxy", + "pattern": "^(?![; ])(;? ?([\\w\\-]+)(?!.*\\2 ) [^;]+)*$", + "inpType": "input", + "name": "Reverse proxy headers", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "", + "prev_value": "", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "List of HTTP headers to send to proxied resource separated with semicolons (values for proxy_set_header directive)." + } + ], + "containerClass": "z-20" + }, + "REVERSE_PROXY_HEADERS_CLIENT": { + "context": "multisite", + "default": "", + "help": "List of HTTP headers to send to client separated with semicolons (values for add_header directive).", + "id": "reverse-proxy-headers-client", + "label": "Reverse proxy headers-client", + "regex": "^(?![; ])(;? ?([\\w\\-]+)(?!.*\\2 ) [^;]+)*$", + "type": "text", + "multiple": "reverse-proxy", + "pattern": "^(?![; ])(;? ?([\\w\\-]+)(?!.*\\2 ) [^;]+)*$", + "inpType": "input", + "name": "Reverse proxy headers-client", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "", + "prev_value": "", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "List of HTTP headers to send to client separated with semicolons (values for add_header directive)." + } + ], + "containerClass": "z-19" + }, + "REVERSE_PROXY_BUFFERING": { + "context": "multisite", + "default": "yes", + "help": "Enable or disable buffering of responses from proxied resource.", + "id": "reverse-proxy-buffering", + "label": "Reverse proxy buffering", + "regex": "^(yes|no)$", + "type": "check", + "multiple": "reverse-proxy", + "pattern": "^(yes|no)$", + "inpType": "checkbox", + "name": "Reverse proxy buffering", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "yes", + "prev_value": "yes", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Enable or disable buffering of responses from proxied resource." + } + ], + "containerClass": "z-18" + }, + "REVERSE_PROXY_KEEPALIVE": { + "context": "multisite", + "default": "no", + "help": "Enable or disable keepalive connections with the proxied resource.", + "id": "reverse-proxy-keepalive", + "label": "Reverse proxy keepalive", + "regex": "^(yes|no)$", + "type": "check", + "multiple": "reverse-proxy", + "pattern": "^(yes|no)$", + "inpType": "checkbox", + "name": "Reverse proxy keepalive", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "no", + "prev_value": "no", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Enable or disable keepalive connections with the proxied resource." + } + ], + "containerClass": "z-17" + }, + "REVERSE_PROXY_AUTH_REQUEST": { + "context": "multisite", + "default": "", + "help": "Enable authentication using an external provider (value of auth_request directive).", + "id": "reverse-proxy-auth-request", + "label": "Reverse proxy auth request", + "regex": "^(\\/[\\w\\].~:\\/?#\\[@!$\\&'\\(\\)*+,;=\\-]*|off)?$", + "type": "text", + "multiple": "reverse-proxy", + "pattern": "^(\\/[\\w\\].~:\\/?#\\[@!$\\&'\\(\\)*+,;=\\-]*|off)?$", + "inpType": "input", + "name": "Reverse proxy auth request", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "", + "prev_value": "", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Enable authentication using an external provider (value of auth_request directive)." + } + ], + "containerClass": "z-16" + }, + "REVERSE_PROXY_AUTH_REQUEST_SIGNIN_URL": { + "context": "multisite", + "default": "", + "help": "Redirect clients to sign-in URL when using REVERSE_PROXY_AUTH_REQUEST (used when auth_request call returned 401).", + "id": "reverse-proxy-auth-request-signin-url", + "label": "Auth request signin URL", + "regex": "^(https?:\\/\\/[\\-\\w@:%.+~#=]+[\\-\\w\\(\\)!@:%+.~#?&\\/=$]*)?$", + "type": "text", + "multiple": "reverse-proxy", + "pattern": "^(https?:\\/\\/[\\-\\w@:%.+~#=]+[\\-\\w\\(\\)!@:%+.~#?&\\/=$]*)?$", + "inpType": "input", + "name": "Auth request signin URL", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "", + "prev_value": "", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Redirect clients to sign-in URL when using REVERSE_PROXY_AUTH_REQUEST (used when auth_request call returned 401)." + } + ], + "containerClass": "z-15" + }, + "REVERSE_PROXY_AUTH_REQUEST_SET": { + "context": "multisite", + "default": "", + "help": "List of variables to set from the authentication provider, separated with semicolons (values of auth_request_set directives).", + "id": "reverse-proxy-auth-request-set", + "label": "Reverse proxy auth request set", + "regex": "^(?! ;)(;? ?(\\$[a-z_\\-]+)(?!.*\\2 ) [^;]+)*$", + "type": "text", + "multiple": "reverse-proxy", + "pattern": "^(?! ;)(;? ?(\\$[a-z_\\-]+)(?!.*\\2 ) [^;]+)*$", + "inpType": "input", + "name": "Reverse proxy auth request set", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "", + "prev_value": "", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "List of variables to set from the authentication provider, separated with semicolons (values of auth_request_set directives)." + } + ], + "containerClass": "z-14" + }, + "REVERSE_PROXY_CONNECT_TIMEOUT": { + "context": "multisite", + "default": "60s", + "help": "Timeout when connecting to the proxied resource.", + "id": "reverse-proxy-connect-timeout", + "label": "Reverse proxy connect timeout", + "regex": "^\\d+(ms?|[shdwMy])$", + "type": "text", + "multiple": "reverse-proxy", + "pattern": "^\\d+(ms?|[shdwMy])$", + "inpType": "input", + "name": "Reverse proxy connect timeout", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "60s", + "prev_value": "60s", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Timeout when connecting to the proxied resource." + } + ], + "containerClass": "z-13" + }, + "REVERSE_PROXY_READ_TIMEOUT": { + "context": "multisite", + "default": "60s", + "help": "Timeout when reading from the proxied resource.", + "id": "reverse-proxy-read-timeout", + "label": "Reverse proxy read timeout", + "regex": "^\\d+(ms?|[shdwMy])$", + "type": "text", + "multiple": "reverse-proxy", + "pattern": "^\\d+(ms?|[shdwMy])$", + "inpType": "input", + "name": "Reverse proxy read timeout", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "60s", + "prev_value": "60s", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Timeout when reading from the proxied resource." + } + ], + "containerClass": "z-12" + }, + "REVERSE_PROXY_SEND_TIMEOUT": { + "context": "multisite", + "default": "60s", + "help": "Timeout when sending to the proxied resource.", + "id": "reverse-proxy-send-timeout", + "label": "Reverse proxy send timeout", + "regex": "^\\d+(ms?|[shdwMy])$", + "type": "text", + "multiple": "reverse-proxy", + "pattern": "^\\d+(ms?|[shdwMy])$", + "inpType": "input", + "name": "Reverse proxy send timeout", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "60s", + "prev_value": "60s", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Timeout when sending to the proxied resource." + } + ], + "containerClass": "z-11" + }, + "REVERSE_PROXY_INCLUDES": { + "context": "multisite", + "default": "", + "help": "Additional configuration to include in the location block, separated with spaces.", + "id": "reverse-proxy-includes", + "label": "Reverse proxy includes", + "regex": "^(?! )( ?(\\w+)(?!.*\\b\\2\\b))*$", + "type": "text", + "multiple": "reverse-proxy", + "pattern": "^(?! )( ?(\\w+)(?!.*\\b\\2\\b))*$", + "inpType": "input", + "name": "Reverse proxy includes", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "", + "prev_value": "", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Additional configuration to include in the location block, separated with spaces." + } + ], + "containerClass": "z-10" + } + } + }, + "multiples": { + "reverse-proxy": { + "0": { + "REVERSE_PROXY_HOST": { + "context": "multisite", + "default": "", + "help": "Full URL of the proxied resource (proxy_pass).", + "id": "reverse-proxy-host", + "label": "Reverse proxy host", + "regex": "^.*$", + "type": "text", + "multiple": "reverse-proxy", + "pattern": "^.*$", + "inpType": "input", + "name": "Reverse proxy host", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": true, + "value": "http://app1:8080", + "prev_value": "http://app1:8080", + "popovers": [ + { + "iconName": "trespass", + "text": "inp_popover_method_disabled" + }, + { + "iconName": "trespass", + "text": "inp_popover_method_disabled" + }, + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Full URL of the proxied resource (proxy_pass)." + } + ], + "containerClass": "z-23", + "method": "scheduler" + }, + "REVERSE_PROXY_URL": { + "context": "multisite", + "default": "/", + "help": "Location URL that will be proxied.", + "id": "reverse-proxy-url", + "label": "Reverse proxy url", + "regex": "^.*$", + "type": "text", + "multiple": "reverse-proxy", + "pattern": "^.*$", + "inpType": "input", + "name": "Reverse proxy url", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "/", + "prev_value": "/", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Location URL that will be proxied." + } + ], + "containerClass": "z-22", + "method": "default" + }, + "REVERSE_PROXY_WS": { + "context": "multisite", + "default": "no", + "help": "Enable websocket on the proxied resource.", + "id": "reverse-proxy-ws", + "label": "Reverse proxy WS", + "regex": "^(yes|no)$", + "type": "check", + "multiple": "reverse-proxy", + "pattern": "^(yes|no)$", + "inpType": "checkbox", + "name": "Reverse proxy WS", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "no", + "prev_value": "no", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Enable websocket on the proxied resource." + } + ], + "containerClass": "z-21", + "method": "default" + }, + "REVERSE_PROXY_HEADERS": { + "context": "multisite", + "default": "", + "help": "List of HTTP headers to send to proxied resource separated with semicolons (values for proxy_set_header directive).", + "id": "reverse-proxy-headers", + "label": "Reverse proxy headers", + "regex": "^(?![; ])(;? ?([\\w\\-]+)(?!.*\\2 ) [^;]+)*$", + "type": "text", + "multiple": "reverse-proxy", + "pattern": "^(?![; ])(;? ?([\\w\\-]+)(?!.*\\2 ) [^;]+)*$", + "inpType": "input", + "name": "Reverse proxy headers", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "", + "prev_value": "", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "List of HTTP headers to send to proxied resource separated with semicolons (values for proxy_set_header directive)." + } + ], + "containerClass": "z-20", + "method": "default" + }, + "REVERSE_PROXY_HEADERS_CLIENT": { + "context": "multisite", + "default": "", + "help": "List of HTTP headers to send to client separated with semicolons (values for add_header directive).", + "id": "reverse-proxy-headers-client", + "label": "Reverse proxy headers-client", + "regex": "^(?![; ])(;? ?([\\w\\-]+)(?!.*\\2 ) [^;]+)*$", + "type": "text", + "multiple": "reverse-proxy", + "pattern": "^(?![; ])(;? ?([\\w\\-]+)(?!.*\\2 ) [^;]+)*$", + "inpType": "input", + "name": "Reverse proxy headers-client", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "", + "prev_value": "", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "List of HTTP headers to send to client separated with semicolons (values for add_header directive)." + } + ], + "containerClass": "z-19", + "method": "default" + }, + "REVERSE_PROXY_BUFFERING": { + "context": "multisite", + "default": "yes", + "help": "Enable or disable buffering of responses from proxied resource.", + "id": "reverse-proxy-buffering", + "label": "Reverse proxy buffering", + "regex": "^(yes|no)$", + "type": "check", + "multiple": "reverse-proxy", + "pattern": "^(yes|no)$", + "inpType": "checkbox", + "name": "Reverse proxy buffering", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "yes", + "prev_value": "yes", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Enable or disable buffering of responses from proxied resource." + } + ], + "containerClass": "z-18", + "method": "default" + }, + "REVERSE_PROXY_KEEPALIVE": { + "context": "multisite", + "default": "no", + "help": "Enable or disable keepalive connections with the proxied resource.", + "id": "reverse-proxy-keepalive", + "label": "Reverse proxy keepalive", + "regex": "^(yes|no)$", + "type": "check", + "multiple": "reverse-proxy", + "pattern": "^(yes|no)$", + "inpType": "checkbox", + "name": "Reverse proxy keepalive", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "no", + "prev_value": "no", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Enable or disable keepalive connections with the proxied resource." + } + ], + "containerClass": "z-17", + "method": "default" + }, + "REVERSE_PROXY_AUTH_REQUEST": { + "context": "multisite", + "default": "", + "help": "Enable authentication using an external provider (value of auth_request directive).", + "id": "reverse-proxy-auth-request", + "label": "Reverse proxy auth request", + "regex": "^(\\/[\\w\\].~:\\/?#\\[@!$\\&'\\(\\)*+,;=\\-]*|off)?$", + "type": "text", + "multiple": "reverse-proxy", + "pattern": "^(\\/[\\w\\].~:\\/?#\\[@!$\\&'\\(\\)*+,;=\\-]*|off)?$", + "inpType": "input", + "name": "Reverse proxy auth request", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "", + "prev_value": "", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Enable authentication using an external provider (value of auth_request directive)." + } + ], + "containerClass": "z-16", + "method": "default" + }, + "REVERSE_PROXY_AUTH_REQUEST_SIGNIN_URL": { + "context": "multisite", + "default": "", + "help": "Redirect clients to sign-in URL when using REVERSE_PROXY_AUTH_REQUEST (used when auth_request call returned 401).", + "id": "reverse-proxy-auth-request-signin-url", + "label": "Auth request signin URL", + "regex": "^(https?:\\/\\/[\\-\\w@:%.+~#=]+[\\-\\w\\(\\)!@:%+.~#?&\\/=$]*)?$", + "type": "text", + "multiple": "reverse-proxy", + "pattern": "^(https?:\\/\\/[\\-\\w@:%.+~#=]+[\\-\\w\\(\\)!@:%+.~#?&\\/=$]*)?$", + "inpType": "input", + "name": "Auth request signin URL", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "", + "prev_value": "", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Redirect clients to sign-in URL when using REVERSE_PROXY_AUTH_REQUEST (used when auth_request call returned 401)." + } + ], + "containerClass": "z-15", + "method": "default" + }, + "REVERSE_PROXY_AUTH_REQUEST_SET": { + "context": "multisite", + "default": "", + "help": "List of variables to set from the authentication provider, separated with semicolons (values of auth_request_set directives).", + "id": "reverse-proxy-auth-request-set", + "label": "Reverse proxy auth request set", + "regex": "^(?! ;)(;? ?(\\$[a-z_\\-]+)(?!.*\\2 ) [^;]+)*$", + "type": "text", + "multiple": "reverse-proxy", + "pattern": "^(?! ;)(;? ?(\\$[a-z_\\-]+)(?!.*\\2 ) [^;]+)*$", + "inpType": "input", + "name": "Reverse proxy auth request set", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "", + "prev_value": "", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "List of variables to set from the authentication provider, separated with semicolons (values of auth_request_set directives)." + } + ], + "containerClass": "z-14", + "method": "default" + }, + "REVERSE_PROXY_CONNECT_TIMEOUT": { + "context": "multisite", + "default": "60s", + "help": "Timeout when connecting to the proxied resource.", + "id": "reverse-proxy-connect-timeout", + "label": "Reverse proxy connect timeout", + "regex": "^\\d+(ms?|[shdwMy])$", + "type": "text", + "multiple": "reverse-proxy", + "pattern": "^\\d+(ms?|[shdwMy])$", + "inpType": "input", + "name": "Reverse proxy connect timeout", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "60s", + "prev_value": "60s", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Timeout when connecting to the proxied resource." + } + ], + "containerClass": "z-13", + "method": "default" + }, + "REVERSE_PROXY_READ_TIMEOUT": { + "context": "multisite", + "default": "60s", + "help": "Timeout when reading from the proxied resource.", + "id": "reverse-proxy-read-timeout", + "label": "Reverse proxy read timeout", + "regex": "^\\d+(ms?|[shdwMy])$", + "type": "text", + "multiple": "reverse-proxy", + "pattern": "^\\d+(ms?|[shdwMy])$", + "inpType": "input", + "name": "Reverse proxy read timeout", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "60s", + "prev_value": "60s", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Timeout when reading from the proxied resource." + } + ], + "containerClass": "z-12", + "method": "default" + }, + "REVERSE_PROXY_SEND_TIMEOUT": { + "context": "multisite", + "default": "60s", + "help": "Timeout when sending to the proxied resource.", + "id": "reverse-proxy-send-timeout", + "label": "Reverse proxy send timeout", + "regex": "^\\d+(ms?|[shdwMy])$", + "type": "text", + "multiple": "reverse-proxy", + "pattern": "^\\d+(ms?|[shdwMy])$", + "inpType": "input", + "name": "Reverse proxy send timeout", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "60s", + "prev_value": "60s", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Timeout when sending to the proxied resource." + } + ], + "containerClass": "z-11", + "method": "default" + }, + "REVERSE_PROXY_INCLUDES": { + "context": "multisite", + "default": "", + "help": "Additional configuration to include in the location block, separated with spaces.", + "id": "reverse-proxy-includes", + "label": "Reverse proxy includes", + "regex": "^(?! )( ?(\\w+)(?!.*\\b\\2\\b))*$", + "type": "text", + "multiple": "reverse-proxy", + "pattern": "^(?! )( ?(\\w+)(?!.*\\b\\2\\b))*$", + "inpType": "input", + "name": "Reverse proxy includes", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "", + "prev_value": "", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Additional configuration to include in the location block, separated with spaces." + } + ], + "containerClass": "z-10", + "method": "default" + } + } + } + } + }, + { + "id": "reversescan", + "stream": "yes", + "name": "Reverse scan", + "description": "Scan clients ports to detect proxies or servers.", + "version": "1.0", + "type": "core", + "method": "manual", + "page": true, + "settings": { + "USE_REVERSE_SCAN": { + "context": "multisite", + "default": "no", + "help": "Enable scanning of clients ports and deny access if one is opened.", + "id": "use-reverse-scan", + "label": "Reverse scan", + "regex": "^(no|yes)$", + "type": "check", + "containerClass": "z-2", + "pattern": "^(no|yes)$", + "inpType": "checkbox", + "name": "Reverse scan", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "no", + "method": "default", + "prev_value": "no", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Enable scanning of clients ports and deny access if one is opened." + } + ] + }, + "REVERSE_SCAN_PORTS": { + "context": "multisite", + "default": "22 80 443 3128 8000 8080", + "help": "List of port to scan when using reverse scan feature.", + "id": "reverse-scan-ports", + "label": "Reverse scan ports", + "regex": "^.*$", + "type": "text", + "containerClass": "z-1", + "pattern": "^.*$", + "inpType": "input", + "name": "Reverse scan ports", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "22 80 443 3128 8000 8080", + "method": "default", + "prev_value": "22 80 443 3128 8000 8080", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "List of port to scan when using reverse scan feature." + } + ] + }, + "REVERSE_SCAN_TIMEOUT": { + "context": "multisite", + "default": "500", + "help": "Specify the maximum timeout (in ms) when scanning a port.", + "id": "reverse-scan-timeout", + "label": "Reverse scan timeout", + "regex": "^.*$", + "type": "text", + "containerClass": "z-0", + "pattern": "^.*$", + "inpType": "input", + "name": "Reverse scan timeout", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "500", + "method": "default", + "prev_value": "500", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Specify the maximum timeout (in ms) when scanning a port." + } + ] + } + }, + "checksum": null + }, + { + "id": "selfsigned", + "stream": "yes", + "name": "Self-signed certificate", + "description": "Generate self-signed certificate.", + "version": "1.0", + "type": "core", + "method": "manual", + "page": false, + "settings": { + "GENERATE_SELF_SIGNED_SSL": { + "context": "multisite", + "default": "no", + "help": "Generate and use self-signed certificate.", + "id": "generate-self-signed-ssl", + "label": "Activate self-signed certificate", + "regex": "^(yes|no)$", + "type": "check", + "containerClass": "z-2", + "pattern": "^(yes|no)$", + "inpType": "checkbox", + "name": "Activate self-signed certificate", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "no", + "method": "default", + "prev_value": "no", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Generate and use self-signed certificate." + } + ] + }, + "SELF_SIGNED_SSL_EXPIRY": { + "context": "multisite", + "default": "365", + "help": "Self-signed certificate expiry in days.", + "id": "self-signed-ssl-expiry", + "label": "Certificate expiry", + "regex": "^\\d+$", + "type": "text", + "containerClass": "z-1", + "pattern": "^\\d+$", + "inpType": "input", + "name": "Certificate expiry", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "365", + "method": "default", + "prev_value": "365", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Self-signed certificate expiry in days." + } + ] + }, + "SELF_SIGNED_SSL_SUBJ": { + "context": "multisite", + "default": "/CN=www.example.com/", + "help": "Self-signed certificate subject.", + "id": "self-signed-ssl-subj", + "label": "Certificate subject", + "regex": "^/CN=[^,]+$", + "type": "text", + "containerClass": "z-0", + "pattern": "^/CN=[^,]+$", + "inpType": "input", + "name": "Certificate subject", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "/CN=www.example.com/", + "method": "default", + "prev_value": "/CN=www.example.com/", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Self-signed certificate subject." + } + ] + } + }, + "checksum": null + }, + { + "id": "ui", + "stream": "no", + "name": "UI", + "description": "Integrate easily the BunkerWeb UI.", + "version": "1.0", + "type": "core", + "method": "manual", + "page": false, + "settings": { + "USE_UI": { + "context": "multisite", + "default": "no", + "help": "Use UI", + "id": "use-ui", + "label": "Use UI", + "regex": "^(yes|no)$", + "type": "check", + "containerClass": "z-0", + "pattern": "^(yes|no)$", + "inpType": "checkbox", + "name": "Use UI", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "no", + "method": "default", + "prev_value": "no", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Use UI" + } + ] + } + }, + "checksum": null + }, + { + "id": "whitelist", + "stream": "partial", + "name": "Whitelist", + "description": "Allow access based on internal and external IP/network/rDNS/ASN whitelists.", + "version": "1.0", + "type": "core", + "method": "manual", + "page": true, + "settings": { + "USE_WHITELIST": { + "context": "multisite", + "default": "yes", + "help": "Activate whitelist feature.", + "id": "use-whitelist", + "label": "Activate whitelisting", + "regex": "^(yes|no)$", + "type": "check", + "containerClass": "z-6", + "pattern": "^(yes|no)$", + "inpType": "checkbox", + "name": "Activate whitelisting", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": true, + "value": "no", + "method": "scheduler", + "prev_value": "no", + "popovers": [ + { + "iconName": "trespass", + "text": "inp_popover_method_disabled" + }, + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Activate whitelist feature." + } + ] + }, + "WHITELIST_IP": { + "context": "multisite", + "default": "20.191.45.212 40.88.21.235 40.76.173.151 40.76.163.7 20.185.79.47 52.142.26.175 20.185.79.15 52.142.24.149 40.76.162.208 40.76.163.23 40.76.162.191 40.76.162.247", + "help": "List of IP/network, separated with spaces, to put into the whitelist.", + "id": "whitelist-ip", + "label": "Whitelist IP/network", + "regex": "^(?! )( *(((\\b25[0-5]|\\b2[0-4]\\d|\\b[01]?\\d\\d?)(\\.(25[0-5]|2[0-4]\\d|[01]?\\d\\d?)){3})(\\/([1-2][0-9]?|3[0-2]?|[04-9]))?|(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]Z{0,4}){0,4}%[0-9a-zA-Z]+|::(ffff(:0{1,4})?:)?((25[0-5]|(2[0-4]|1?\\d)?\\d)\\.){3}(25[0-5]|(2[0-4]|1?\\d)?\\d)|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1?\\d)?\\d)\\.){3}(25[0-5]|(2[0-4]|1?\\d)?\\d))(\\/(12[0-8]|1[01][0-9]|[0-9][0-9]?))?)(?!.*\\D\\2([^\\d\\/]|$)) *)*$", + "type": "text", + "containerClass": "z-5", + "pattern": "^(?! )( *(((\\b25[0-5]|\\b2[0-4]\\d|\\b[01]?\\d\\d?)(\\.(25[0-5]|2[0-4]\\d|[01]?\\d\\d?)){3})(\\/([1-2][0-9]?|3[0-2]?|[04-9]))?|(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]Z{0,4}){0,4}%[0-9a-zA-Z]+|::(ffff(:0{1,4})?:)?((25[0-5]|(2[0-4]|1?\\d)?\\d)\\.){3}(25[0-5]|(2[0-4]|1?\\d)?\\d)|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1?\\d)?\\d)\\.){3}(25[0-5]|(2[0-4]|1?\\d)?\\d))(\\/(12[0-8]|1[01][0-9]|[0-9][0-9]?))?)(?!.*\\D\\2([^\\d\\/]|$)) *)*$", + "inpType": "input", + "name": "Whitelist IP/network", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "20.191.45.212 40.88.21.235 40.76.173.151 40.76.163.7 20.185.79.47 52.142.26.175 20.185.79.15 52.142.24.149 40.76.162.208 40.76.163.23 40.76.162.191 40.76.162.247", + "method": "default", + "prev_value": "20.191.45.212 40.88.21.235 40.76.173.151 40.76.163.7 20.185.79.47 52.142.26.175 20.185.79.15 52.142.24.149 40.76.162.208 40.76.163.23 40.76.162.191 40.76.162.247", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "List of IP/network, separated with spaces, to put into the whitelist." + } + ] + }, + "WHITELIST_RDNS": { + "context": "multisite", + "default": ".google.com .googlebot.com .yandex.ru .yandex.net .yandex.com .search.msn.com .baidu.com .baidu.jp .crawl.yahoo.net .fwd.linkedin.com .twitter.com .twttr.com .discord.com", + "help": "List of reverse DNS suffixes, separated with spaces, to whitelist.", + "id": "whitelist-rdns", + "label": "Whitelist reverse DNS", + "regex": "^( *(([^ ]+)(?!.*\\3( |$))) *)*$", + "type": "text", + "containerClass": "z-4", + "pattern": "^( *(([^ ]+)(?!.*\\3( |$))) *)*$", + "inpType": "input", + "name": "Whitelist reverse DNS", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": ".google.com .googlebot.com .yandex.ru .yandex.net .yandex.com .search.msn.com .baidu.com .baidu.jp .crawl.yahoo.net .fwd.linkedin.com .twitter.com .twttr.com .discord.com", + "method": "default", + "prev_value": ".google.com .googlebot.com .yandex.ru .yandex.net .yandex.com .search.msn.com .baidu.com .baidu.jp .crawl.yahoo.net .fwd.linkedin.com .twitter.com .twttr.com .discord.com", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "List of reverse DNS suffixes, separated with spaces, to whitelist." + } + ] + }, + "WHITELIST_RDNS_GLOBAL": { + "context": "multisite", + "default": "yes", + "help": "Only perform RDNS whitelist checks on global IP addresses.", + "id": "whitelist-rdns-global", + "label": "Whitelist reverse DNS global IPs", + "regex": "^(yes|no)$", + "type": "check", + "containerClass": "z-3", + "pattern": "^(yes|no)$", + "inpType": "checkbox", + "name": "Whitelist reverse DNS global IPs", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "yes", + "method": "default", + "prev_value": "yes", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Only perform RDNS whitelist checks on global IP addresses." + } + ] + }, + "WHITELIST_ASN": { + "context": "multisite", + "default": "32934", + "help": "List of ASN numbers, separated with spaces, to whitelist.", + "id": "whitelist-asn", + "label": "Whitelist ASN", + "regex": "^^( *((ASN?)?(\\d+)\\b(?!.*[SN ]\\4\\b)) *)*$", + "type": "text", + "containerClass": "z-2", + "pattern": "^^( *((ASN?)?(\\d+)\\b(?!.*[SN ]\\4\\b)) *)*$", + "inpType": "input", + "name": "Whitelist ASN", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "32934", + "method": "default", + "prev_value": "32934", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "List of ASN numbers, separated with spaces, to whitelist." + } + ] + }, + "WHITELIST_USER_AGENT": { + "context": "multisite", + "default": "", + "help": "List of User-Agent (PCRE regex), separated with spaces, to whitelist.", + "id": "whitelist-user-agent", + "label": "Whitelist User-Agent", + "regex": "^.*$", + "type": "text", + "containerClass": "z-1", + "pattern": "^.*$", + "inpType": "input", + "name": "Whitelist User-Agent", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "", + "method": "default", + "prev_value": "", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "List of User-Agent (PCRE regex), separated with spaces, to whitelist." + } + ] + }, + "WHITELIST_URI": { + "context": "multisite", + "default": "", + "help": "List of URI (PCRE regex), separated with spaces, to whitelist.", + "id": "whitelist-uri", + "label": "Whitelist URI", + "regex": "^( *(.*)(?!.*\\2(?!.)) *)*$", + "type": "text", + "containerClass": "z-0", + "pattern": "^( *(.*)(?!.*\\2(?!.)) *)*$", + "inpType": "input", + "name": "Whitelist URI", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "", + "method": "default", + "prev_value": "", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "List of URI (PCRE regex), separated with spaces, to whitelist." + } + ] + } + }, + "checksum": null + } + ] + } + }, + "operation": "edit", + "oldServerName": "app1.example.com" + } + } + ] + } +] \ No newline at end of file diff --git a/src/ui/client/tests/advanced.py b/src/ui/client/tests/advanced.py new file mode 100644 index 000000000..d66b97b11 --- /dev/null +++ b/src/ui/client/tests/advanced.py @@ -0,0 +1,4119 @@ +import json +import base64 + +from builder.advanced_mode import advanced_mode_builder + +# Default plugins from docker-compose.ui.yml +plugins = [ + { + "id": "general", + "stream": "partial", + "name": "General", + "description": "The general settings for the server", + "version": "0.1", + "type": "core", + "method": "manual", + "page": False, + "settings": { + "IS_LOADING": { + "context": "global", + "default": "no", + "help": "Internal use : set to yes when BW is loading.", + "id": "internal-use-loading", + "label": "internal use loading", + "regex": "^(yes|no)$", + "type": "check", + }, + "NGINX_PREFIX": { + "context": "global", + "default": "/etc/nginx/", + "help": "Where nginx will search for configurations.", + "id": "nginx-prefix", + "label": "nginx prefix", + "regex": "^(\\/[\\-\\w.\\s]+)*\\/$", + "type": "text", + }, + "HTTP_PORT": { + "context": "global", + "default": "8080", + "help": "HTTP port number which bunkerweb binds to.", + "id": "http-port", + "label": "HTTP port", + "regex": "^\\d+$", + "type": "text", + }, + "HTTPS_PORT": { + "context": "global", + "default": "8443", + "help": "HTTPS port number which bunkerweb binds to.", + "id": "https-port", + "label": "HTTPS port", + "regex": "^\\d+$", + "type": "text", + }, + "MULTISITE": { + "context": "global", + "default": "no", + "help": "Multi site activation.", + "id": "multisite", + "label": "Multisite", + "regex": "^(yes|no)$", + "type": "check", + }, + "SERVER_NAME": { + "context": "multisite", + "default": "www.example.com", + "help": "List of the virtual hosts served by bunkerweb.", + "id": "server-name", + "label": "Server name", + "regex": "^((\\S{1,255})(?!.*\\s\\2(\\s|$)))?(\\s(\\S{1,255})(?!.*\\s\\5(\\s|$)))*$", + "type": "text", + }, + "WORKER_PROCESSES": { + "context": "global", + "default": "auto", + "help": "Number of worker processes.", + "id": "worker-processes", + "label": "Worker processes", + "regex": "^(auto|\\d+)$", + "type": "text", + }, + "WORKER_RLIMIT_NOFILE": { + "context": "global", + "default": "2048", + "help": "Maximum number of open files for worker processes.", + "id": "worker-rlimit-nofile", + "label": "Open files per worker", + "regex": "^\\d+$", + "type": "text", + }, + "WORKER_CONNECTIONS": { + "context": "global", + "default": "1024", + "help": "Maximum number of connections per worker.", + "id": "worker-connections", + "label": "Connections per worker", + "regex": "^\\d+$", + "type": "text", + }, + "LOG_FORMAT": { + "context": "global", + "default": '$host $remote_addr - $remote_user [$time_local] "$request" $status $body_bytes_sent "$http_referer" "$http_user_agent"', + "help": "The format to use for access logs.", + "id": "log-format", + "label": "Log format", + "regex": "^.*$", + "type": "text", + }, + "LOG_LEVEL": { + "context": "global", + "default": "notice", + "help": "The level to use for error logs.", + "id": "log-level", + "label": "Log level", + "regex": "^(debug|info|notice|warn|error|crit|alert|emerg)$", + "type": "select", + "select": [ + "alert", + "crit", + "debug", + "emerg", + "error", + "info", + "notice", + "warn", + ], + }, + "DNS_RESOLVERS": { + "context": "global", + "default": "127.0.0.11", + "help": "DNS addresses of resolvers to use.", + "id": "dns-resolvers", + "label": "DNS resolvers", + "regex": "^(?! )(( *[^ ]+)(?!.*\\2))*$", + "type": "text", + }, + "DATASTORE_MEMORY_SIZE": { + "context": "global", + "default": "64m", + "help": "Size of the internal datastore.", + "id": "datastore-memory-size", + "label": "Datastore memory size", + "regex": "^\\d+[kKmMgG]?$", + "type": "text", + }, + "CACHESTORE_MEMORY_SIZE": { + "context": "global", + "default": "64m", + "help": "Size of the internal cachestore.", + "id": "cachestore-memory-size", + "label": "Cachestore memory size", + "regex": "^\\d+[kKmMgG]?$", + "type": "text", + }, + "CACHESTORE_IPC_MEMORY_SIZE": { + "context": "global", + "default": "16m", + "help": "Size of the internal cachestore (ipc).", + "id": "cachestore-ipc-memory-size", + "label": "Cachestore ipc memory size", + "regex": "^\\d+[kKmMgG]?$", + "type": "text", + }, + "CACHESTORE_MISS_MEMORY_SIZE": { + "context": "global", + "default": "16m", + "help": "Size of the internal cachestore (miss).", + "id": "cachestore-miss-memory-size", + "label": "Cachestore miss memory size", + "regex": "^\\d+[kKmMgG]?$", + "type": "text", + }, + "CACHESTORE_LOCKS_MEMORY_SIZE": { + "context": "global", + "default": "16m", + "help": "Size of the internal cachestore (locks).", + "id": "cachestore-locks-memory-size", + "label": "Cachestore locks memory size", + "regex": "^\\d+[kKmMgG]?$", + "type": "text", + }, + "USE_API": { + "context": "global", + "default": "yes", + "help": "Activate the API to control BunkerWeb.", + "id": "use-api", + "label": "Activate API", + "regex": "^(yes|no)$", + "type": "check", + }, + "API_HTTP_PORT": { + "context": "global", + "default": "5000", + "help": "Listen port number for the API.", + "id": "api-http-listen", + "label": "API port number", + "regex": "^\\d+$", + "type": "text", + }, + "API_LISTEN_IP": { + "context": "global", + "default": "0.0.0.0", + "help": "Listen IP address for the API.", + "id": "api-ip-listen", + "label": "API listen IP", + "regex": "^.*$", + "type": "text", + }, + "API_SERVER_NAME": { + "context": "global", + "default": "bwapi", + "help": "Server name (virtual host) for the API.", + "id": "api-server-name", + "label": "API server name", + "regex": "^[^ ]{1,255}$", + "type": "text", + }, + "API_WHITELIST_IP": { + "context": "global", + "default": "127.0.0.0/8", + "help": "List of IP/network allowed to contact the API.", + "id": "api-whitelist-ip", + "label": "API whitelist IP", + "regex": "^(?! )( *(((\\b25[0-5]|\\b2[0-4]\\d|\\b[01]?\\d\\d?)(\\.(25[0-5]|2[0-4]\\d|[01]?\\d\\d?)){3})(\\/([1-2][0-9]?|3[0-2]?|[04-9]))?|(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]Z{0,4}){0,4}%[0-9a-zA-Z]+|::(ffff(:0{1,4})?:)?((25[0-5]|(2[0-4]|1?\\d)?\\d)\\.){3}(25[0-5]|(2[0-4]|1?\\d)?\\d)|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1?\\d)?\\d)\\.){3}(25[0-5]|(2[0-4]|1?\\d)?\\d))(\\/(12[0-8]|1[01][0-9]|[0-9][0-9]?))?)(?!.*\\D\\2([^\\d\\/]|$)) *)*$", + "type": "text", + }, + "AUTOCONF_MODE": { + "context": "global", + "default": "no", + "help": "Enable Autoconf Docker integration.", + "id": "autoconf-mode", + "label": "Autoconf mode", + "regex": "^(yes|no)$", + "type": "check", + }, + "SWARM_MODE": { + "context": "global", + "default": "no", + "help": "Enable Docker Swarm integration.", + "id": "swarm-mode", + "label": "Swarm mode", + "regex": "^(yes|no)$", + "type": "check", + }, + "KUBERNETES_MODE": { + "context": "global", + "default": "no", + "help": "Enable Kubernetes integration.", + "id": "kubernetes-mode", + "label": "Kubernetes mode", + "regex": "^(yes|no)$", + "type": "check", + }, + "SERVER_TYPE": { + "context": "multisite", + "default": "http", + "help": "Server type : http or stream.", + "id": "server-type", + "label": "Server type", + "regex": "^(http|stream)$", + "type": "select", + "select": ["http", "stream"], + }, + "LISTEN_STREAM": { + "context": "multisite", + "default": "yes", + "help": "Enable listening for non-ssl (passthrough).", + "id": "listen-stream", + "label": "Listen stream", + "regex": "^(yes|no)$", + "type": "check", + }, + "LISTEN_STREAM_PORT": { + "context": "multisite", + "default": "1337", + "help": "Listening port for non-ssl (passthrough).", + "id": "listen-stream-port", + "label": "Listen stream port", + "regex": "^[0-9]+$", + "type": "text", + }, + "LISTEN_STREAM_PORT_SSL": { + "context": "multisite", + "default": "4242", + "help": "Listening port for ssl (passthrough).", + "id": "listen-stream-port-ssl", + "label": "Listen stream port ssl", + "regex": "^[0-9]+$", + "type": "text", + }, + "USE_UDP": { + "context": "multisite", + "default": "no", + "help": "UDP listen instead of TCP (stream).", + "id": "use-udp", + "label": "Listen UDP", + "regex": "^(yes|no)$", + "type": "check", + }, + "USE_IPV6": { + "context": "global", + "default": "no", + "help": "Enable IPv6 connectivity.", + "id": "use-ipv6", + "label": "Use IPv6", + "regex": "^(yes|no)$", + "type": "check", + }, + "IS_DRAFT": { + "context": "multisite", + "default": "no", + "help": "Internal use : set to yes when the service is in draft mode.", + "id": "internal-use-draft", + "label": "internal use draft", + "regex": "^(yes|no)$", + "type": "check", + }, + "TIMERS_LOG_LEVEL": { + "context": "global", + "default": "debug", + "help": "Log level for timers.", + "id": "timers-log-level", + "label": "Timers log level", + "regex": "^(debug|info|notice|warn|err|crit|alert|emerg)$", + "type": "select", + "select": [ + "alert", + "crit", + "debug", + "emerg", + "err", + "info", + "notice", + "warn", + ], + }, + "BUNKERWEB_INSTANCES": { + "context": "global", + "default": "127.0.0.1", + "help": "List of BunkerWeb instances separated with spaces (format : fqdn-or-ip:5000 http://fqdn-or-ip:5000)", + "id": "bunkerweb-instances", + "label": "BunkerWeb instances", + "regex": "^.*$", + "type": "text", + }, + }, + "checksum": None, + }, + { + "id": "antibot", + "stream": "no", + "name": "Antibot", + "description": "Bot detection by using a challenge.", + "version": "1.0", + "type": "core", + "method": "manual", + "page": True, + "settings": { + "USE_ANTIBOT": { + "context": "multisite", + "default": "no", + "help": "Activate antibot feature.", + "id": "use-antibot", + "label": "Antibot challenge", + "regex": "^(no|cookie|javascript|captcha|recaptcha|hcaptcha|turnstile)$", + "type": "select", + "select": [ + "captcha", + "cookie", + "hcaptcha", + "javascript", + "no", + "recaptcha", + "turnstile", + ], + }, + "ANTIBOT_URI": { + "context": "multisite", + "default": "/challenge", + "help": "Unused URI that clients will be redirected to to solve the challenge.", + "id": "antibot-uri", + "label": "Antibot URL", + "regex": "^\\/[\\w\\].~:\\/?#\\[@!$\\&'\\(\\)*+,;=\\-]*$", + "type": "text", + }, + "ANTIBOT_TIME_RESOLVE": { + "context": "multisite", + "default": "60", + "help": "Maximum time (in seconds) clients have to resolve the challenge. Once this time has passed, a new challenge will be generated.", + "id": "antibot-time-resolve", + "label": "Time to resolve", + "regex": "^[0-9]+$", + "type": "text", + }, + "ANTIBOT_TIME_VALID": { + "context": "multisite", + "default": "86400", + "help": "Maximum validity time of solved challenges. Once this time has passed, clients will need to resolve a new one.", + "id": "antibot-time-valid", + "label": "Time valid", + "regex": "^[0-9]+$", + "type": "text", + }, + "ANTIBOT_RECAPTCHA_SCORE": { + "context": "multisite", + "default": "0.7", + "help": "Minimum score required for reCAPTCHA challenge.", + "id": "antibot-recaptcha-score", + "label": "reCAPTCHA score", + "regex": "^(0\\.[1-9]|1\\.0)$", + "type": "text", + }, + "ANTIBOT_RECAPTCHA_SITEKEY": { + "context": "multisite", + "default": "", + "help": "Sitekey for reCAPTCHA challenge.", + "id": "antibot-recaptcha-sitekey", + "label": "reCAPTCHA sitekey", + "regex": "^[\\w\\-]*$", + "type": "text", + }, + "ANTIBOT_RECAPTCHA_SECRET": { + "context": "multisite", + "default": "", + "help": "Secret for reCAPTCHA challenge.", + "id": "antibot-recaptcha-secret", + "label": "reCAPTCHA secret", + "regex": "^[\\w\\-]*$", + "type": "password", + }, + "ANTIBOT_HCAPTCHA_SITEKEY": { + "context": "multisite", + "default": "", + "help": "Sitekey for hCaptcha challenge.", + "id": "antibot-hcaptcha-sitekey", + "label": "hCaptcha sitekey", + "regex": "^[a-zA-Z0-9\\-]*$", + "type": "text", + }, + "ANTIBOT_HCAPTCHA_SECRET": { + "context": "multisite", + "default": "", + "help": "Secret for hCaptcha challenge.", + "id": "antibot-hcaptcha-secret", + "label": "hCaptcha secret", + "regex": "^\\w*$", + "type": "password", + }, + "ANTIBOT_TURNSTILE_SITEKEY": { + "context": "multisite", + "default": "", + "help": "Sitekey for Turnstile challenge.", + "id": "antibot-turnstile-sitekey", + "label": "Turnstile sitekey", + "regex": "^(0x[\\w\\-]+)?$", + "type": "text", + }, + "ANTIBOT_TURNSTILE_SECRET": { + "context": "multisite", + "default": "", + "help": "Secret for Turnstile challenge.", + "id": "antibot-turnstile-secret", + "label": "Turnstile secret", + "regex": "^(0x[\\w\\-]+)?$", + "type": "password", + }, + }, + "checksum": None, + }, + { + "id": "authbasic", + "stream": "no", + "name": "Auth basic", + "description": "Enforce login before accessing a resource or the whole site using HTTP basic auth method.", + "version": "1.0", + "type": "core", + "method": "manual", + "page": False, + "settings": { + "USE_AUTH_BASIC": { + "context": "multisite", + "default": "no", + "help": "Use HTTP basic auth", + "id": "use-auth-basic", + "label": "Use HTTP basic auth", + "regex": "^(yes|no)$", + "type": "check", + }, + "AUTH_BASIC_LOCATION": { + "context": "multisite", + "default": "sitewide", + "help": "URL of the protected resource or sitewide value.", + "id": "auth-basic-location", + "label": "Auth basic Location", + "regex": "^(sitewide|/[a-zA-Z0-9.\\/\\-]*)$", + "type": "text", + }, + "AUTH_BASIC_USER": { + "context": "multisite", + "default": "changeme", + "help": "Username", + "id": "auth-basic-user", + "label": "Auth basic Username", + "regex": "^[\\w\\-]+", + "type": "text", + }, + "AUTH_BASIC_PASSWORD": { + "context": "multisite", + "default": "changeme", + "help": "Password", + "id": "auth-basic-password", + "label": "Password", + "regex": "^.+", + "type": "password", + }, + "AUTH_BASIC_TEXT": { + "context": "multisite", + "default": "Restricted area", + "help": "Text to display", + "id": "auth-basic-text", + "label": "Text", + "regex": "^.+", + "type": "text", + }, + }, + "checksum": None, + }, + { + "id": "backup", + "stream": "yes", + "name": "Backup", + "description": "Backup your data to a custom location. Ensure the safety and availability of your important files by creating regular backups.", + "version": "1.0", + "type": "core", + "method": "manual", + "page": True, + "settings": { + "USE_BACKUP": { + "context": "global", + "default": "yes", + "help": "Enable or disable the backup feature", + "id": "use-backup", + "label": "Activate automatic backup", + "regex": "^(yes|no)$", + "type": "check", + }, + "BACKUP_SCHEDULE": { + "context": "global", + "default": "daily", + "help": "The frequency of the backup (daily, weekly or monthly)", + "id": "backup-schedule", + "label": "Backup schedule", + "regex": "^(daily|weekly|monthly)$", + "type": "select", + "select": ["daily", "monthly", "weekly"], + }, + "BACKUP_ROTATION": { + "context": "global", + "default": "7", + "help": "The number of backups to keep", + "id": "backup-rotation", + "label": "Backup rotation", + "regex": "^[1-9][0-9]*$", + "type": "text", + }, + "BACKUP_DIRECTORY": { + "context": "global", + "default": "/var/lib/bunkerweb/backups", + "help": "The directory where the backup will be stored", + "id": "backup-directory", + "label": "Backup directory", + "regex": "^.*$", + "type": "text", + }, + }, + "checksum": None, + "bwcli": {"list": "list.py", "restore": "restore.py", "save": "save.py"}, + }, + { + "id": "badbehavior", + "stream": "yes", + "name": "Bad behavior", + "description": "Ban IP generating too much 'bad' HTTP status code in a period of time.", + "version": "1.0", + "type": "core", + "method": "manual", + "page": True, + "settings": { + "USE_BAD_BEHAVIOR": { + "context": "multisite", + "default": "yes", + "help": "Activate Bad behavior feature.", + "id": "use-bad-behavior", + "label": "Activate bad behavior", + "regex": "^(yes|no)$", + "type": "check", + }, + "BAD_BEHAVIOR_STATUS_CODES": { + "context": "multisite", + "default": "400 401 403 404 405 429 444", + "help": "List of HTTP status codes considered as 'bad'.", + "id": "bad-behavior-status-code", + "label": "Bad status codes", + "regex": "^( *([1-5]\\d{2})(?!.*\\2) *)+$", + "type": "text", + }, + "BAD_BEHAVIOR_THRESHOLD": { + "context": "multisite", + "default": "10", + "help": "Maximum number of 'bad' HTTP status codes within the period of time before IP is banned.", + "id": "bad-behavior-threshold", + "label": "Threshold", + "regex": "^[1-9][0-9]*", + "type": "text", + }, + "BAD_BEHAVIOR_COUNT_TIME": { + "context": "multisite", + "default": "60", + "help": "Period of time (in seconds) during which we count 'bad' HTTP status codes.", + "id": "bad-behavior-period", + "label": "Period (in seconds)", + "regex": "^\\d+", + "type": "text", + }, + "BAD_BEHAVIOR_BAN_TIME": { + "context": "multisite", + "default": "86400", + "help": "The duration time (in seconds) of a ban when the corresponding IP has reached the threshold.", + "id": "bad-behavior-ban-time", + "label": "Ban duration (in seconds)", + "regex": "^\\d+", + "type": "text", + }, + }, + "checksum": None, + }, + { + "id": "blacklist", + "stream": "partial", + "name": "Blacklist", + "description": "Deny access based on internal and external IP/network/rDNS/ASN blacklists.", + "version": "1.0", + "type": "core", + "method": "manual", + "page": True, + "settings": { + "USE_BLACKLIST": { + "context": "multisite", + "default": "yes", + "help": "Activate blacklist feature.", + "id": "use-blacklist", + "label": "Activate blacklisting", + "regex": "^(yes|no)$", + "type": "check", + }, + "BLACKLIST_IP": { + "context": "multisite", + "default": "", + "help": "List of IP/network, separated with spaces, to block.", + "id": "blacklist-ip", + "label": "Blacklist IP/network", + "regex": "^(?! )( *(((\\b25[0-5]|\\b2[0-4]\\d|\\b[01]?\\d\\d?)(\\.(25[0-5]|2[0-4]\\d|[01]?\\d\\d?)){3})(\\/([1-2][0-9]?|3[0-2]?|[04-9]))?|(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]Z{0,4}){0,4}%[0-9a-zA-Z]+|::(ffff(:0{1,4})?:)?((25[0-5]|(2[0-4]|1?\\d)?\\d)\\.){3}(25[0-5]|(2[0-4]|1?\\d)?\\d)|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1?\\d)?\\d)\\.){3}(25[0-5]|(2[0-4]|1?\\d)?\\d))(\\/(12[0-8]|1[01][0-9]|[0-9][0-9]?))?)(?!.*\\D\\2([^\\d\\/]|$)) *)*$", + "type": "text", + }, + "BLACKLIST_RDNS": { + "context": "multisite", + "default": ".shodan.io .censys.io", + "help": "List of reverse DNS suffixes, separated with spaces, to block.", + "id": "blacklist-rdns", + "label": "Blacklist reverse DNS", + "regex": "^( *(([^ ]+)(?!.*\\3( |$))) *)*$", + "type": "text", + }, + "BLACKLIST_RDNS_GLOBAL": { + "context": "multisite", + "default": "yes", + "help": "Only perform RDNS blacklist checks on global IP addresses.", + "id": "blacklist-rdns-global", + "label": "Blacklist reverse DNS global IPs", + "regex": "^(yes|no)$", + "type": "check", + }, + "BLACKLIST_ASN": { + "context": "multisite", + "default": "", + "help": "List of ASN numbers, separated with spaces, to block.", + "id": "blacklist-asn", + "label": "Blacklist ASN", + "regex": "^^( *((ASN?)?(\\d+)\\b(?!.*[SN ]\\4\\b)) *)*$", + "type": "text", + }, + "BLACKLIST_USER_AGENT": { + "context": "multisite", + "default": "", + "help": "List of User-Agent (PCRE regex), separated with spaces, to block.", + "id": "blacklist-user-agent", + "label": "Blacklist User-Agent", + "regex": "^.*$", + "type": "text", + }, + "BLACKLIST_URI": { + "context": "multisite", + "default": "", + "help": "List of URI (PCRE regex), separated with spaces, to block.", + "id": "blacklist-uri", + "label": "Blacklist URI", + "regex": "^( *(.*)(?!.*\\2(?!.)) *)*$", + "type": "text", + }, + "BLACKLIST_IGNORE_IP": { + "context": "multisite", + "default": "", + "help": "List of IP/network, separated with spaces, to ignore in the blacklist.", + "id": "blacklist-ignore-ip", + "label": "Blacklist ignore IP/network", + "regex": "^(?! )( *(((\\b25[0-5]|\\b2[0-4]\\d|\\b[01]?\\d\\d?)(\\.(25[0-5]|2[0-4]\\d|[01]?\\d\\d?)){3})(\\/([1-2][0-9]?|3[0-2]?|[04-9]))?|(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]Z{0,4}){0,4}%[0-9a-zA-Z]+|::(ffff(:0{1,4})?:)?((25[0-5]|(2[0-4]|1?\\d)?\\d)\\.){3}(25[0-5]|(2[0-4]|1?\\d)?\\d)|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1?\\d)?\\d)\\.){3}(25[0-5]|(2[0-4]|1?\\d)?\\d))(\\/(12[0-8]|1[01][0-9]|[0-9][0-9]?))?)(?!.*\\D\\2([^\\d\\/]|$)) *)*$", + "type": "text", + }, + "BLACKLIST_IGNORE_RDNS": { + "context": "multisite", + "default": "", + "help": "List of reverse DNS suffixes, separated with spaces, to ignore in the blacklist.", + "id": "blacklist-ignore-rdns", + "label": "Blacklist ignore reverse DNS", + "regex": "^( *(([^ ]+)(?!.*\\3( |$))) *)*$", + "type": "text", + }, + "BLACKLIST_IGNORE_ASN": { + "context": "multisite", + "default": "", + "help": "List of ASN numbers, separated with spaces, to ignore in the blacklist.", + "id": "blacklist-ignore-asn", + "label": "Blacklist ignore ASN", + "regex": "^^( *((ASN?)?(\\d+)\\b(?!.*[SN ]\\4\\b)) *)*$", + "type": "text", + }, + "BLACKLIST_IGNORE_USER_AGENT": { + "context": "multisite", + "default": "", + "help": "List of User-Agent (PCRE regex), separated with spaces, to ignore in the blacklist.", + "id": "blacklist-ignore-user-agent", + "label": "Blacklist ignore User-Agent", + "regex": "^.*$", + "type": "text", + }, + "BLACKLIST_IGNORE_URI": { + "context": "multisite", + "default": "", + "help": "List of URI (PCRE regex), separated with spaces, to ignore in the blacklist.", + "id": "blacklist-ignore-uri", + "label": "Blacklist ignore URI", + "regex": "^( *(.*)(?!.*\\2(?!.)) *)*$", + "type": "text", + }, + "BLACKLIST_IP_URLS": { + "context": "global", + "default": "https://www.dan.me.uk/torlist/?exit", + "help": "List of URLs, separated with spaces, containing bad IP/network to block.", + "id": "blacklist-ip-urls", + "label": "Blacklist IP/network URLs", + "regex": "^( *((https?:\\/\\/|file:\\/\\/\\/)[\\-\\w@:%.+~#=]+[\\-\\w\\(\\)!@:%+.~#?&\\/=$]*)(?!.*\\2(?!.)) *)*$", + "type": "text", + }, + "BLACKLIST_RDNS_URLS": { + "context": "global", + "default": "", + "help": "List of URLs, separated with spaces, containing reverse DNS suffixes to block.", + "id": "blacklist-rdns-urls", + "label": "Blacklist reverse DNS URLs", + "regex": "^( *((https?:\\/\\/|file:\\/\\/\\/)[\\-\\w@:%.+~#=]+[\\-\\w\\(\\)!@:%+.~#?&\\/=$]*)(?!.*\\2(?!.)) *)*$", + "type": "text", + }, + "BLACKLIST_ASN_URLS": { + "context": "global", + "default": "", + "help": "List of URLs, separated with spaces, containing ASN to block.", + "id": "blacklist-asn-urls", + "label": "Blacklist ASN URLs", + "regex": "^( *((https?:\\/\\/|file:\\/\\/\\/)[\\-\\w@:%.+~#=]+[\\-\\w\\(\\)!@:%+.~#?&\\/=$]*)(?!.*\\2(?!.)) *)*$", + "type": "text", + }, + "BLACKLIST_USER_AGENT_URLS": { + "context": "global", + "default": "https://raw.githubusercontent.com/mitchellkrogza/nginx-ultimate-bad-bot-blocker/master/_generator_lists/bad-user-agents.list", + "help": "List of URLs, separated with spaces, containing bad User-Agent to block.", + "id": "blacklist-user-agent-urls", + "label": "Blacklist User-Agent URLs", + "regex": "^( *((https?:\\/\\/|file:\\/\\/\\/)[\\-\\w@:%.+~#=]+[\\-\\w\\(\\)!@:%+.~#?&\\/=$]*)(?!.*\\2(?!.)) *)*$", + "type": "text", + }, + "BLACKLIST_URI_URLS": { + "context": "global", + "default": "", + "help": "List of URLs, separated with spaces, containing bad URI to block.", + "id": "blacklist-uri-urls", + "label": "Blacklist URI URLs", + "regex": "^( *((https?:\\/\\/|file:\\/\\/\\/)[\\-\\w@:%.+~#=]+[\\-\\w\\(\\)!@:%+.~#?&\\/=$]*)(?!.*\\2(?!.)) *)*$", + "type": "text", + }, + "BLACKLIST_IGNORE_IP_URLS": { + "context": "global", + "default": "", + "help": "List of URLs, separated with spaces, containing IP/network to ignore in the blacklist.", + "id": "blacklist-ignore-ip-urls", + "label": "Blacklist ignore IP/network URLs", + "regex": "^( *((https?:\\/\\/|file:\\/\\/\\/)[\\-\\w@:%.+~#=]+[\\-\\w\\(\\)!@:%+.~#?&\\/=$]*)(?!.*\\2(?!.)) *)*$", + "type": "text", + }, + "BLACKLIST_IGNORE_RDNS_URLS": { + "context": "global", + "default": "", + "help": "List of URLs, separated with spaces, containing reverse DNS suffixes to ignore in the blacklist.", + "id": "blacklist-ignore-rdns-urls", + "label": "Blacklist ignore reverse DNS URLs", + "regex": "^( *((https?:\\/\\/|file:\\/\\/\\/)[\\-\\w@:%.+~#=]+[\\-\\w\\(\\)!@:%+.~#?&\\/=$]*)(?!.*\\2(?!.)) *)*$", + "type": "text", + }, + "BLACKLIST_IGNORE_ASN_URLS": { + "context": "global", + "default": "", + "help": "List of URLs, separated with spaces, containing ASN to ignore in the blacklist.", + "id": "blacklist-ignore-asn-urls", + "label": "Blacklist ignore ASN URLs", + "regex": "^( *((https?:\\/\\/|file:\\/\\/\\/)[\\-\\w@:%.+~#=]+[\\-\\w\\(\\)!@:%+.~#?&\\/=$]*)(?!.*\\2(?!.)) *)*$", + "type": "text", + }, + "BLACKLIST_IGNORE_USER_AGENT_URLS": { + "context": "global", + "default": "", + "help": "List of URLs, separated with spaces, containing User-Agent to ignore in the blacklist.", + "id": "blacklist-ignore-user-agent-urls", + "label": "Blacklist ignore User-Agent URLs", + "regex": "^( *((https?:\\/\\/|file:\\/\\/\\/)[\\-\\w@:%.+~#=]+[\\-\\w\\(\\)!@:%+.~#?&\\/=$]*)(?!.*\\2(?!.)) *)*$", + "type": "text", + }, + "BLACKLIST_IGNORE_URI_URLS": { + "context": "global", + "default": "", + "help": "List of URLs, separated with spaces, containing URI to ignore in the blacklist.", + "id": "blacklist-ignore-uri-urls", + "label": "Blacklist ignore URI URLs", + "regex": "^( *((https?:\\/\\/|file:\\/\\/\\/)[\\-\\w@:%.+~#=]+[\\-\\w\\(\\)!@:%+.~#?&\\/=$]*)(?!.*\\2(?!.)) *)*$", + "type": "text", + }, + }, + "checksum": None, + }, + { + "id": "brotli", + "stream": "no", + "name": "Brotli", + "description": "Compress HTTP requests with the brotli algorithm.", + "version": "1.0", + "type": "core", + "method": "manual", + "page": False, + "settings": { + "USE_BROTLI": { + "context": "multisite", + "default": "no", + "help": "Use brotli", + "id": "use-brotli", + "label": "Use brotli", + "regex": "^(yes|no)$", + "type": "check", + }, + "BROTLI_TYPES": { + "context": "multisite", + "default": "application/atom+xml application/javascript application/json application/rss+xml application/vnd.ms-fontobject application/x-font-opentype application/x-font-truetype application/x-font-ttf application/x-javascript application/xhtml+xml application/xml font/eot font/opentype font/otf font/truetype image/svg+xml image/vnd.microsoft.icon image/x-icon image/x-win-bitmap text/css text/javascript text/plain text/xml", + "help": "List of MIME types that will be compressed with brotli.", + "id": "brotli-types", + "label": "MIME types", + "regex": "^(?! )( ?([\\-\\w.]+/[\\-\\w.+]+)(?!.*\\2(?!.)))+$", + "type": "text", + }, + "BROTLI_MIN_LENGTH": { + "context": "multisite", + "default": "1000", + "help": "Minimum length for brotli compression.", + "id": "brotli-min-length", + "label": "Minimum length", + "regex": "^\\d+", + "type": "text", + }, + "BROTLI_COMP_LEVEL": { + "context": "multisite", + "default": "6", + "help": "The compression level of the brotli algorithm.", + "id": "brotli-comp-level", + "label": "Compression level", + "regex": "^([02-9]|1[01]?)$", + "type": "select", + "select": [ + "0", + "1", + "10", + "11", + "2", + "3", + "4", + "5", + "6", + "7", + "8", + "9", + ], + }, + }, + "checksum": None, + }, + { + "id": "bunkernet", + "stream": "yes", + "name": "BunkerNet", + "description": "Share threat data with other BunkerWeb instances via BunkerNet.", + "version": "1.0", + "type": "core", + "method": "manual", + "page": True, + "settings": { + "USE_BUNKERNET": { + "context": "multisite", + "default": "yes", + "help": "Activate BunkerNet feature.", + "id": "use-bunkernet", + "label": "Activate BunkerNet", + "regex": "^(yes|no)$", + "type": "check", + }, + "BUNKERNET_SERVER": { + "context": "global", + "default": "https://api.bunkerweb.io", + "help": "Address of the BunkerNet API.", + "id": "bunkernet-server", + "label": "BunkerNet server", + "regex": "^https?:\\/\\/[\\-\\w@:%.+~#=]+[\\-\\w\\(\\)!@:%+.~#?&\\/=$]*$", + "type": "text", + }, + }, + "checksum": None, + }, + { + "id": "cors", + "stream": "no", + "name": "CORS", + "description": "Cross-Origin Resource Sharing.", + "version": "1.0", + "type": "core", + "method": "manual", + "page": True, + "settings": { + "USE_CORS": { + "context": "multisite", + "default": "no", + "help": "Use CORS", + "id": "use-cors", + "label": "Use CORS", + "regex": "^(yes|no)$", + "type": "check", + }, + "CORS_ALLOW_ORIGIN": { + "context": "multisite", + "default": "*", + "help": "Allowed origins to make CORS requests : PCRE regex or *.", + "id": "cors-allow-origin", + "label": "Allowed origins", + "regex": "^.*$", + "type": "text", + }, + "CORS_ALLOW_METHODS": { + "context": "multisite", + "default": "GET, POST, OPTIONS", + "help": "Value of the Access-Control-Allow-Methods header.", + "id": "cors-allow-methods", + "label": "Access-Control-Allow-Methods value", + "regex": "^(\\*|(?![, ])(,? ?(GET|HEAD|POST|PUT|DELETE|CONNECT|OPTIONS|TRACE|PATCH)(?!.*\\3))*)?$", + "type": "text", + }, + "CORS_ALLOW_HEADERS": { + "context": "multisite", + "default": "DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range", + "help": "Value of the Access-Control-Allow-Headers header.", + "id": "cors-allow-headers", + "label": "Access-Control-Allow-Headers value", + "regex": "^(\\*|(?![, ])(,? ?([\\w\\-]+)(?!.*\\3(?!.)))*)?$", + "type": "text", + }, + "CORS_ALLOW_CREDENTIALS": { + "context": "multisite", + "default": "no", + "help": "Send the Access-Control-Allow-Credentials header.", + "id": "cors-allow-credentials", + "label": "Send Access-Control-Allow-Credentials", + "regex": "^(yes|no)$", + "type": "check", + }, + "CORS_EXPOSE_HEADERS": { + "context": "multisite", + "default": "Content-Length,Content-Range", + "help": "Value of the Access-Control-Expose-Headers header.", + "id": "cors-expose-headers", + "label": "Access-Control-Expose-Headers value", + "regex": "^(\\*|(?![, ]+)(,? ?([\\w\\-]+)(?!.*\\3(?!.)))*)?$", + "type": "text", + }, + "CROSS_ORIGIN_OPENER_POLICY": { + "context": "multisite", + "default": "", + "help": "Value for the Cross-Origin-Opener-Policy header.", + "id": "cross-origin-opener-policy", + "label": "Cross-Origin-Opener-Policy", + "regex": "^(unsafe-none|same-origin-allow-popups|same-origin)?$", + "type": "select", + "select": [ + "", + "same-origin", + "same-origin-allow-popups", + "unsafe-none", + ], + }, + "CROSS_ORIGIN_EMBEDDER_POLICY": { + "context": "multisite", + "default": "", + "help": "Value for the Cross-Origin-Embedder-Policy header.", + "id": "cross-origin-embedder-policy", + "label": "Cross-Origin-Embedder-Policy", + "regex": "^(unsafe-none|require-corp|credentialless)?$", + "type": "select", + "select": ["", "credentialless", "require-corp", "unsafe-none"], + }, + "CROSS_ORIGIN_RESOURCE_POLICY": { + "context": "multisite", + "default": "", + "help": "Value for the Cross-Origin-Resource-Policy header.", + "id": "cross-origin-resource-policy", + "label": "Cross-Origin-Resource-Policy", + "regex": "^(same-site|same-origin|cross-origin)?$", + "type": "select", + "select": ["", "cross-origin", "same-origin", "same-site"], + }, + "CORS_MAX_AGE": { + "context": "multisite", + "default": "86400", + "help": "Value of the Access-Control-Max-Age header.", + "id": "cors-max-age", + "label": "Access-Control-Max-Age value", + "regex": "^\\d+$", + "type": "text", + }, + "CORS_DENY_REQUEST": { + "context": "multisite", + "default": "yes", + "help": "Deny request and don't send it to backend if Origin is not allowed.", + "id": "cors-deny-request", + "label": "Deny request", + "regex": "^(yes|no)$", + "type": "check", + }, + }, + "checksum": None, + }, + { + "id": "clientcache", + "stream": "no", + "name": "Client cache", + "description": "Manage caching for clients.", + "version": "1.0", + "type": "core", + "method": "manual", + "page": False, + "settings": { + "USE_CLIENT_CACHE": { + "context": "multisite", + "default": "no", + "help": "Tell client to store locally static files.", + "id": "use-client-cache", + "label": "Use client cache", + "regex": "^(yes|no)$", + "type": "check", + }, + "CLIENT_CACHE_EXTENSIONS": { + "context": "global", + "default": "jpg|jpeg|png|bmp|ico|svg|tif|css|js|otf|ttf|eot|woff|woff2", + "help": "List of file extensions, separated with pipes that should be cached.", + "id": "client-cache-extensions", + "label": "Extensions that should be cached by the client", + "regex": "^(?!\\|)(\\|?([a-z0-9]+)(?!.*\\2(?!.)))+$", + "type": "text", + }, + "CLIENT_CACHE_ETAG": { + "context": "multisite", + "default": "yes", + "help": "Send the HTTP ETag header for static resources.", + "id": "client-cache-etag", + "label": "ETag", + "regex": "^(yes|no)$", + "type": "check", + }, + "CLIENT_CACHE_CONTROL": { + "context": "multisite", + "default": "public, max-age=15552000", + "help": "Value of the Cache-Control HTTP header.", + "id": "client-cache-control", + "label": "Cache-Control header", + "regex": "^(?!(, ?| ))((, )?(((max-age|s-maxage|stale-while-revalidate|stale-if-error)=\\d+(?!.*\\6))|((?!.*public)private|(?!.*private)public)|(must|proxy)-revalidate|must-understand|immutable|no-(cache|store|transform))(?!.*\\4))+$", + "type": "text", + }, + }, + "checksum": None, + }, + { + "id": "country", + "stream": "yes", + "name": "Country", + "description": "Deny access based on the country of the client IP.", + "version": "1.0", + "type": "core", + "method": "manual", + "page": True, + "settings": { + "BLACKLIST_COUNTRY": { + "context": "multisite", + "default": "", + "help": "Deny access if the country of the client is in the list (ISO 3166-1 alpha-2 format separated with spaces).", + "id": "country-blacklist", + "label": "Country blacklist", + "regex": "^(?! )( *([A-Z]{2})(?!.*\\2) *)*$", + "type": "text", + }, + "WHITELIST_COUNTRY": { + "context": "multisite", + "default": "", + "help": "Deny access if the country of the client is not in the list (ISO 3166-1 alpha-2 format separated with spaces).", + "id": "country-whitelist", + "label": "Country whitelist", + "regex": "^(?! )( *([A-Z]{2})(?!.*\\2) *)*$", + "type": "text", + }, + }, + "checksum": None, + }, + { + "id": "customcert", + "stream": "yes", + "name": "Custom HTTPS certificate", + "description": "Choose custom certificate for HTTPS.", + "version": "1.0", + "type": "core", + "method": "manual", + "page": False, + "settings": { + "USE_CUSTOM_SSL": { + "context": "multisite", + "default": "no", + "help": "Use custom HTTPS certificate.", + "id": "use-custom-https", + "label": "Use custom certificate", + "regex": "^(yes|no)$", + "type": "check", + }, + "CUSTOM_SSL_CERT": { + "context": "multisite", + "default": "", + "help": "Full path of the certificate or bundle file (must be readable by the scheduler).", + "id": "custom-https-cert", + "label": "Certificate path", + "regex": "^(/[\\w. \\-]+)*/?$", + "type": "text", + }, + "CUSTOM_SSL_KEY": { + "context": "multisite", + "default": "", + "help": "Full path of the key file (must be readable by the scheduler).", + "id": "custom-https-key", + "label": "Key path", + "regex": "^(/[\\w. \\-]+)*/?$", + "type": "text", + }, + "CUSTOM_SSL_CERT_DATA": { + "context": "multisite", + "default": "", + "help": "Certificate data encoded in base64.", + "id": "custom-https-cert-data", + "label": "Certificate data (base64)", + "regex": "^.*$", + "type": "text", + }, + "CUSTOM_SSL_KEY_DATA": { + "context": "multisite", + "default": "", + "help": "Key data encoded in base64.", + "id": "custom-https-key-data", + "label": "Key data (base64)", + "regex": "^.*$", + "type": "text", + }, + }, + "checksum": None, + }, + { + "id": "db", + "stream": "yes", + "name": "DB", + "description": "Integrate easily the Database.", + "version": "1.0", + "type": "core", + "method": "manual", + "page": False, + "settings": { + "DATABASE_URI": { + "context": "global", + "default": "sqlite:////var/lib/bunkerweb/db.sqlite3", + "help": "The database URI, following the sqlalchemy format.", + "id": "database-uri", + "label": "The database URI", + "regex": "^((postgresql|mysql|mariadb|sqlite)(\\+[\\w\\-]+)?:.+)?$", + "type": "text", + }, + "DATABASE_URI_READONLY": { + "context": "global", + "default": "", + "help": "The database URI for read-only operations, it can also serve as a fallback if the main database is down. Following the sqlalchemy format.", + "id": "database-uri-readonly", + "label": "The database URI for read-only operations", + "regex": "^((postgresql|mysql|mariadb|sqlite)(\\+[\\w\\-]+)?:.+)?$", + "type": "text", + }, + "DATABASE_LOG_LEVEL": { + "context": "global", + "default": "warning", + "help": "The level to use for database logs.", + "id": "database-log-level", + "label": "Database log level", + "regex": "^(debug|info|warn|warning|error)$", + "type": "select", + "select": ["debug", "error", "info", "warn", "warning"], + }, + }, + "checksum": None, + }, + { + "id": "dnsbl", + "stream": "yes", + "name": "DNSBL", + "description": "Deny access based on external DNSBL servers.", + "version": "1.0", + "type": "core", + "method": "manual", + "page": True, + "settings": { + "USE_DNSBL": { + "context": "multisite", + "default": "yes", + "help": "Activate DNSBL feature.", + "id": "use-dnsbl", + "label": "Activate DNSBL", + "regex": "^(yes|no)$", + "type": "check", + }, + "DNSBL_LIST": { + "context": "global", + "default": "bl.blocklist.de problems.dnsbl.sorbs.net sbl.spamhaus.org xbl.spamhaus.org", + "help": "List of DNSBL servers.", + "id": "dnsbl-list", + "label": "DNSBL list", + "regex": "^(?! )( ?((?!\\.)[\\w.]+)(?!.*\\2(?!.)))*$", + "type": "text", + }, + }, + "checksum": None, + }, + { + "id": "errors", + "stream": "no", + "name": "Errors", + "description": "Manage default error pages", + "version": "1.0", + "type": "core", + "method": "manual", + "page": True, + "settings": { + "ERRORS": { + "context": "multisite", + "default": "", + "help": "List of HTTP error code and corresponding error pages, separated with spaces (404=/my404.html 403=/errors/403.html ...).", + "id": "errors", + "label": "Errors", + "regex": "^(?! )( ?([1-5]\\d{2})(?!.*\\2(?![^=]))=(\\/[\\w\\].~:\\/?#\\[@!$\\&'\\(\\)*+,;=\\-]*)(?!.*\\3(?!.)))*$", + "type": "text", + }, + "INTERCEPTED_ERROR_CODES": { + "context": "multisite", + "default": "400 401 403 404 405 413 429 500 501 502 503 504", + "help": "List of HTTP error code intercepted by BunkerWeb", + "id": "intercepted-error-codes", + "label": "Intercepted error codes", + "regex": "^( *([1-5]\\d{2})(?!.*\\2) *)+$", + "type": "text", + }, + }, + "checksum": None, + }, + { + "id": "greylist", + "stream": "partial", + "name": "Greylist", + "description": "Allow access while keeping security features based on internal and external IP/network/rDNS/ASN greylists.", + "version": "1.0", + "type": "core", + "method": "manual", + "page": True, + "settings": { + "USE_GREYLIST": { + "context": "multisite", + "default": "no", + "help": "Activate greylist feature.", + "id": "use-greylist", + "label": "Activate greylisting", + "regex": "^(yes|no)$", + "type": "check", + }, + "GREYLIST_IP": { + "context": "multisite", + "default": "", + "help": "List of IP/network, separated with spaces, to put into the greylist.", + "id": "greylist-ip", + "label": "Greylist IP/network", + "regex": "^(?! )( *(((\\b25[0-5]|\\b2[0-4]\\d|\\b[01]?\\d\\d?)(\\.(25[0-5]|2[0-4]\\d|[01]?\\d\\d?)){3})(\\/([1-2][0-9]?|3[0-2]?|[04-9]))?|(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]Z{0,4}){0,4}%[0-9a-zA-Z]+|::(ffff(:0{1,4})?:)?((25[0-5]|(2[0-4]|1?\\d)?\\d)\\.){3}(25[0-5]|(2[0-4]|1?\\d)?\\d)|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1?\\d)?\\d)\\.){3}(25[0-5]|(2[0-4]|1?\\d)?\\d))(\\/(12[0-8]|1[01][0-9]|[0-9][0-9]?))?)(?!.*\\D\\2([^\\d\\/]|$)) *)*$", + "type": "text", + }, + "GREYLIST_RDNS": { + "context": "multisite", + "default": "", + "help": "List of reverse DNS suffixes, separated with spaces, to put into the greylist.", + "id": "greylist-rdns", + "label": "Greylist reverse DNS", + "regex": "^( *(([^ ]+)(?!.*\\3( |$))) *)*$", + "type": "text", + }, + "GREYLIST_RDNS_GLOBAL": { + "context": "multisite", + "default": "yes", + "help": "Only perform RDNS greylist checks on global IP addresses.", + "id": "greylist-rdns-global", + "label": "Greylist reverse DNS global IPs", + "regex": "^(yes|no)$", + "type": "check", + }, + "GREYLIST_ASN": { + "context": "multisite", + "default": "", + "help": "List of ASN numbers, separated with spaces, to put into the greylist.", + "id": "greylist-asn", + "label": "Greylist ASN", + "regex": "^^( *((ASN?)?(\\d+)\\b(?!.*[SN ]\\4\\b)) *)*$", + "type": "text", + }, + "GREYLIST_USER_AGENT": { + "context": "multisite", + "default": "", + "help": "List of User-Agent (PCRE regex), separated with spaces, to put into the greylist.", + "id": "greylist-user-agent", + "label": "Greylist User-Agent", + "regex": "^.*$", + "type": "text", + }, + "GREYLIST_URI": { + "context": "multisite", + "default": "", + "help": "List of URI (PCRE regex), separated with spaces, to put into the greylist.", + "id": "greylist-uri", + "label": "Greylist URI", + "regex": "^.*$", + "type": "text", + }, + "GREYLIST_IP_URLS": { + "context": "global", + "default": "", + "help": "List of URLs, separated with spaces, containing good IP/network to put into the greylist.", + "id": "greylist-ip-urls", + "label": "Greylist IP/network URLs", + "regex": "^( *((https?:\\/\\/|file:\\/\\/\\/)[\\-\\w@:%.+~#=]+[\\-\\w\\(\\)!@:%+.~#?&\\/=$]*)(?!.*\\2(?!.)) *)*$", + "type": "text", + }, + "GREYLIST_RDNS_URLS": { + "context": "global", + "default": "", + "help": "List of URLs, separated with spaces, containing reverse DNS suffixes to put into the greylist.", + "id": "greylist-rdns-urls", + "label": "Greylist reverse DNS URLs", + "regex": "^( *((https?:\\/\\/|file:\\/\\/\\/)[\\-\\w@:%.+~#=]+[\\-\\w\\(\\)!@:%+.~#?&\\/=$]*)(?!.*\\2(?!.)) *)*$", + "type": "text", + }, + "GREYLIST_ASN_URLS": { + "context": "global", + "default": "", + "help": "List of URLs, separated with spaces, containing ASN to put into the greylist.", + "id": "greylist-asn-urls", + "label": "Greylist ASN URLs", + "regex": "^( *((https?:\\/\\/|file:\\/\\/\\/)[\\-\\w@:%.+~#=]+[\\-\\w\\(\\)!@:%+.~#?&\\/=$]*)(?!.*\\2(?!.)) *)*$", + "type": "text", + }, + "GREYLIST_USER_AGENT_URLS": { + "context": "global", + "default": "", + "help": "List of URLs, separated with spaces, containing good User-Agent to put into the greylist.", + "id": "greylist-user-agent-urls", + "label": "Greylist User-Agent URLs", + "regex": "^( *((https?:\\/\\/|file:\\/\\/\\/)[\\-\\w@:%.+~#=]+[\\-\\w\\(\\)!@:%+.~#?&\\/=$]*)(?!.*\\2(?!.)) *)*$", + "type": "text", + }, + "GREYLIST_URI_URLS": { + "context": "global", + "default": "", + "help": "List of URLs, separated with spaces, containing bad URI to put into the greylist.", + "id": "greylist-uri-urls", + "label": "Greylist URI URLs", + "regex": "^( *((https?:\\/\\/|file:\\/\\/\\/)[\\-\\w@:%.+~#=]+[\\-\\w\\(\\)!@:%+.~#?&\\/=$]*)(?!.*\\2(?!.)) *)*$", + "type": "text", + }, + }, + "checksum": None, + }, + { + "id": "gzip", + "stream": "no", + "name": "Gzip", + "description": "Compress HTTP requests with the gzip algorithm.", + "version": "1.0", + "type": "core", + "method": "manual", + "page": False, + "settings": { + "USE_GZIP": { + "context": "multisite", + "default": "no", + "help": "Use gzip", + "id": "use-gzip", + "label": "Use gzip", + "regex": "^(yes|no)$", + "type": "check", + }, + "GZIP_TYPES": { + "context": "multisite", + "default": "application/atom+xml application/javascript application/json application/rss+xml application/vnd.ms-fontobject application/x-font-opentype application/x-font-truetype application/x-font-ttf application/x-javascript application/xhtml+xml application/xml font/eot font/opentype font/otf font/truetype image/svg+xml image/vnd.microsoft.icon image/x-icon image/x-win-bitmap text/css text/javascript text/plain text/xml", + "help": "List of MIME types that will be compressed with gzip.", + "id": "gzip-types", + "label": "MIME types", + "regex": "^(?! )( ?([\\-\\w.]+/[\\-\\w.+]+)(?!.*\\2(?!.)))+$", + "type": "text", + }, + "GZIP_MIN_LENGTH": { + "context": "multisite", + "default": "1000", + "help": "Minimum length for gzip compression.", + "id": "gzip-min-length", + "label": "Minimum length", + "regex": "^\\d+$", + "type": "text", + }, + "GZIP_COMP_LEVEL": { + "context": "multisite", + "default": "5", + "help": "The compression level of the gzip algorithm.", + "id": "gzip-comp-level", + "label": "Compression level", + "regex": "^[1-9]$", + "type": "select", + "select": ["1", "2", "3", "4", "5", "6", "7", "8", "9"], + }, + "GZIP_PROXIED": { + "context": "multisite", + "default": "no-cache no-store private expired auth", + "help": "Which kind of proxied requests we should compress.", + "id": "gzip-proxied", + "label": "Proxied requests", + "regex": "^.*$", + "type": "text", + }, + }, + "checksum": None, + }, + { + "id": "inject", + "stream": "no", + "name": "HTML injection", + "description": "Inject custom HTML code before the tag.", + "version": "1.0", + "type": "core", + "method": "manual", + "page": False, + "settings": { + "INJECT_BODY": { + "context": "multisite", + "default": "", + "help": "The HTML code to inject.", + "id": "inject-body", + "label": "HTML code", + "regex": "^.*$", + "type": "text", + } + }, + "checksum": None, + }, + { + "id": "headers", + "stream": "no", + "name": "Headers", + "description": "Manage HTTP headers sent to clients.", + "version": "1.0", + "type": "core", + "method": "manual", + "page": False, + "settings": { + "CUSTOM_HEADER": { + "context": "multisite", + "default": "", + "help": "Custom header to add (HeaderName: HeaderValue).", + "id": "custom-header", + "label": "Custom header (HeaderName: HeaderValue)", + "regex": "^([\\w\\-]+: .+)?$", + "type": "text", + "multiple": "custom-headers", + }, + "REMOVE_HEADERS": { + "context": "multisite", + "default": "Server Expect-CT X-Powered-By X-AspNet-Version X-AspNetMvc-Version", + "help": "Headers to remove (Header1 Header2 Header3 ...)", + "id": "remove-headers", + "label": "Remove headers", + "regex": "^(?! )( ?[\\w\\-]+)*$", + "type": "text", + }, + "KEEP_UPSTREAM_HEADERS": { + "context": "multisite", + "default": "Content-Security-Policy Permissions-Policy Feature-Policy X-Frame-Options", + "help": "Headers to keep from upstream (Header1 Header2 Header3 ... or * for all).", + "id": "keep-upstream-headers", + "label": "Keep upstream headers", + "regex": "^((?! )( ?[\\w\\-]+)+|\\*)?$", + "type": "text", + }, + "STRICT_TRANSPORT_SECURITY": { + "context": "multisite", + "default": "max-age=31536000", + "help": "Value for the Strict-Transport-Security header.", + "id": "strict-transport-security", + "label": "Strict-Transport-Security", + "regex": "^max-age=\\d+(; includeSubDomains(; preload)?)?$", + "type": "text", + }, + "COOKIE_FLAGS": { + "context": "multisite", + "default": "* HttpOnly SameSite=Lax", + "help": "Cookie flags automatically added to all cookies (value accepted for nginx_cookie_flag_module).", + "id": "cookie-flags", + "label": "Cookie flags", + "regex": "^(\\*|[^;]+)( (HttpOnly|(SameSite)(?!.*\\4)(=(Lax|Strict))?)(?!.*\\3))*$", + "type": "text", + "multiple": "cookie-flags", + }, + "COOKIE_AUTO_SECURE_FLAG": { + "context": "multisite", + "default": "yes", + "help": "Automatically add the Secure flag to all cookies.", + "id": "cookie-auto-secure-flag", + "label": "Cookie auto Secure flag", + "regex": "^(yes|no)$", + "type": "check", + }, + "CONTENT_SECURITY_POLICY": { + "context": "multisite", + "default": "object-src 'none'; form-action 'self'; frame-ancestors 'self';", + "help": "Value for the Content-Security-Policy header.", + "id": "content-security-policy", + "label": "Content-Security-Policy", + "regex": "^.*$", + "type": "text", + }, + "CONTENT_SECURITY_POLICY_REPORT_ONLY": { + "context": "multisite", + "default": "no", + "help": "Send reports for violations of the Content-Security-Policy header instead of blocking them.", + "id": "content-security-policy-report-only", + "label": "Content-Security-Policy-Report-Only", + "regex": "^(yes|no)$", + "type": "check", + }, + "REFERRER_POLICY": { + "context": "multisite", + "default": "strict-origin-when-cross-origin", + "help": "Value for the Referrer-Policy header.", + "id": "referrer-policy", + "label": "Referrer-Policy", + "regex": "^(?!^(,| ))((, )?(no-referrer-when-downgrade|no-referrer|origin-when-cross-origin|same-origin|strict-origin-when-cross-origin|strict-origin|origin|unsafe-url)(?!\\b.*, \\4\\b))*$", + "type": "text", + }, + "PERMISSIONS_POLICY": { + "context": "multisite", + "default": "accelerometer=(), ambient-light-sensor=(), autoplay=(), battery=(), camera=(), cross-origin-isolated=(), display-capture=(), document-domain=(), encrypted-media=(), execution-while-not-rendered=(), execution-while-out-of-viewport=(), fullscreen=(), geolocation=(), gyroscope=(), hid=(), idle-detection=(), magnetometer=(), microphone=(), midi=(), navigation-override=(), payment=(), picture-in-picture=(), publickey-credentials-get=(), screen-wake-lock=(), serial=(), usb=(), web-share=(), xr-spatial-tracking=()", + "help": "Value for the Permissions-Policy header.", + "id": "permissions-policy", + "label": "Permissions-Policy", + "regex": "^(?![, ])(,? ?([a-z\\-]+)(?!.*[^\\-]\\2=)=(\\*|\\(( ?(self|\\u0022https?:\\/\\/[\\-\\w@:%.+~#=]+[\\-\\w\\(\\)!@:%+.~#?&\\/=$]*\\u0022)(?=[ \\)]))*\\)))*$", + "type": "text", + }, + "FEATURE_POLICY": { + "context": "multisite", + "default": "accelerometer 'none'; ambient-light-sensor 'none'; autoplay 'none'; battery 'none'; camera 'none'; display-capture 'none'; document-domain 'none'; encrypted-media 'none'; execution-while-not-rendered 'none'; execution-while-out-of-viewport 'none'; fullscreen 'none'; geolocation 'none'; gyroscope 'none'; layout-animation 'none'; legacy-image-formats 'none'; magnetometer 'none'; microphone 'none'; midi 'none'; navigation-override 'none'; payment 'none'; picture-in-picture 'none'; publickey-credentials-get 'none'; speaker-selection 'none'; sync-xhr 'none'; unoptimized-images 'none'; unsized-media 'none'; usb 'none'; screen-wake-lock 'none'; web-share 'none'; xr-spatial-tracking 'none';", + "help": "Value for the Feature-Policy header.", + "id": "feature-policy", + "label": "Feature-Policy", + "regex": "^(?![; ])( ?([\\w\\-]+)(?!.*[^\\-]\\2 )( ('(none|self|strict-dynamic|report-sample|unsafe-inline|unsafe-eval|unsafe-hashes|unsafe-allow-redirects)'|https?:\\/\\/[\\w@:%.+~#=\\-]+[\\w\\(\\)!@:%+.~#?&\\/=$\\-]*))+;)*$", + "type": "text", + }, + "X_FRAME_OPTIONS": { + "context": "multisite", + "default": "SAMEORIGIN", + "help": "Value for the X-Frame-Options header.", + "id": "x-frame-options", + "label": "X-Frame-Options", + "regex": "^(DENY|SAMEORIGIN)?$", + "type": "select", + "select": ["", "DENY", "SAMEORIGIN"], + }, + "X_CONTENT_TYPE_OPTIONS": { + "context": "multisite", + "default": "nosniff", + "help": "Value for the X-Content-Type-Options header.", + "id": "x-content-type-options", + "label": "X-Content-Type-Options", + "regex": "^(nosniff)?$", + "type": "select", + "select": ["", "nosniff"], + }, + "X_XSS_PROTECTION": { + "context": "multisite", + "default": "1; mode=block", + "help": "Value for the X-XSS-Protection header.", + "id": "x-xss-protection", + "label": "X-XSS-Protection", + "regex": "^0|1(; (mode=block|report=https?:\\/\\/[\\-\\w@:%.+~#=]+[\\-\\w\\(\\)!@:%+.~#?&\\/=$]*))?$", + "type": "text", + }, + }, + "checksum": None, + }, + { + "id": "jobs", + "stream": "yes", + "name": "Jobs", + "description": "Fake core plugin for internal jobs.", + "version": "1.0", + "type": "core", + "method": "manual", + "page": False, + "settings": {}, + "checksum": None, + }, + { + "id": "letsencrypt", + "stream": "yes", + "name": "Let's Encrypt", + "description": "Automatic creation, renewal and configuration of Let's Encrypt certificates.", + "version": "1.0", + "type": "core", + "method": "manual", + "page": False, + "settings": { + "AUTO_LETS_ENCRYPT": { + "context": "multisite", + "default": "no", + "help": "Activate automatic Let's Encrypt mode.", + "id": "auto-lets-encrypt", + "label": "Automatic Let's Encrypt", + "regex": "^(yes|no)$", + "type": "check", + }, + "EMAIL_LETS_ENCRYPT": { + "context": "multisite", + "default": "", + "help": "Email used for Let's Encrypt notification and in certificate.", + "id": "email-lets-encrypt", + "label": "Email Let's Encrypt", + "regex": "^([^@ \\t\\r\\n]+@[^@ \\t\\r\\n]+\\.[^@ \\t\\r\\n]+)?$", + "type": "text", + }, + "USE_LETS_ENCRYPT_STAGING": { + "context": "multisite", + "default": "no", + "help": "Use the staging environment for Let’s Encrypt certificate generation. Useful when you are testing your deployments to avoid being rate limited in the production environment.", + "id": "use-lets-encrypt-staging", + "label": "Use Let's Encrypt Staging", + "regex": "^(yes|no)$", + "type": "check", + }, + "LETS_ENCRYPT_CLEAR_OLD_CERTS": { + "context": "global", + "default": "no", + "help": "Clear old certificates when renewing.", + "id": "lets-encrypt-clear-old-certs", + "label": "Clear old certificates when they are no longer needed", + "regex": "^(yes|no)$", + "type": "check", + }, + }, + "checksum": None, + }, + { + "id": "limit", + "stream": "partial", + "name": "Limit", + "description": "Limit maximum number of requests and connections.", + "version": "1.0", + "type": "core", + "method": "manual", + "page": True, + "settings": { + "USE_LIMIT_REQ": { + "context": "multisite", + "default": "yes", + "help": "Activate limit requests feature.", + "id": "use-limit-req", + "label": "Activate limit requests", + "regex": "^(yes|no)$", + "type": "check", + }, + "LIMIT_REQ_URL": { + "context": "multisite", + "default": "/", + "help": "URL (PCRE regex) where the limit request will be applied or special value / for all requests.", + "id": "limit-req-url", + "label": "Limit request URL", + "regex": "^.+$", + "type": "text", + "multiple": "limit-req", + }, + "LIMIT_REQ_RATE": { + "context": "multisite", + "default": "2r/s", + "help": "Rate to apply to the URL (s for second, m for minute, h for hour and d for day).", + "id": "limit-req-rate", + "label": "Limit request Rate", + "regex": "^\\d+r/[smhd]$", + "type": "text", + "multiple": "limit-req", + }, + "USE_LIMIT_CONN": { + "context": "multisite", + "default": "yes", + "help": "Activate limit connections feature.", + "id": "use-limit-conn", + "label": "Activate limit connections", + "regex": "^(yes|no)$", + "type": "check", + }, + "LIMIT_CONN_MAX_HTTP1": { + "context": "multisite", + "default": "10", + "help": "Maximum number of connections per IP when using HTTP/1.X protocol.", + "id": "limit-conn-max-http1", + "label": "Maximum number of HTTP/1.X connections", + "regex": "^\\d+$", + "type": "text", + }, + "LIMIT_CONN_MAX_HTTP2": { + "context": "multisite", + "default": "100", + "help": "Maximum number of streams per IP when using HTTP/2 protocol.", + "id": "limit-conn-max-http2", + "label": "Maximum number of HTTP/2 streams", + "regex": "^\\d+$", + "type": "text", + }, + "LIMIT_CONN_MAX_STREAM": { + "context": "multisite", + "default": "10", + "help": "Maximum number of connections per IP when using stream.", + "id": "limit-conn-max-stream", + "label": "Maximum number of stream connections", + "regex": "^\\d+$", + "type": "text", + }, + }, + "checksum": None, + }, + { + "id": "metrics", + "stream": "partial", + "name": "Metrics", + "description": "Metrics collection and retrieve.", + "version": "1.0", + "type": "core", + "method": "manual", + "page": False, + "settings": { + "USE_METRICS": { + "context": "multisite", + "default": "yes", + "help": "Enable collection and retrieval of internal metrics.", + "id": "use-metrics", + "label": "Use metrics", + "regex": "^(yes|no)$", + "type": "check", + }, + "METRICS_MEMORY_SIZE": { + "context": "global", + "default": "16m", + "help": "Size of the internal storage for metrics.", + "id": "metrics-memory-size", + "label": "Metrics memory size", + "regex": "^\\d+[kKmMgG]?$", + "type": "text", + }, + "METRICS_MAX_BLOCKED_REQUESTS": { + "context": "global", + "default": "100", + "help": "Maximum number of blocked requests to store (per worker).", + "id": "metrics-max-blocked-requests", + "label": "Metrics max blocked requests", + "regex": "^\\d+$", + "type": "text", + }, + }, + "checksum": None, + }, + { + "id": "misc", + "stream": "partial", + "name": "Miscellaneous", + "description": "Miscellaneous settings.", + "version": "1.0", + "type": "core", + "method": "manual", + "page": True, + "settings": { + "DISABLE_DEFAULT_SERVER": { + "context": "global", + "default": "no", + "help": "Deny HTTP request if the request vhost is unknown.", + "id": "disable-default-server", + "label": "Disable default server", + "regex": "^(yes|no)$", + "type": "check", + }, + "DISABLE_DEFAULT_SERVER_STRICT_SNI": { + "context": "global", + "default": "no", + "help": "Close SSL/TLS connection if the SNI is unknown.", + "id": "disable-default-server-strict-sni", + "label": "Disable default server strict SNI", + "regex": "^(yes|no)$", + "type": "check", + }, + "REDIRECT_HTTP_TO_HTTPS": { + "context": "multisite", + "default": "no", + "help": "Redirect all HTTP request to HTTPS.", + "id": "redirect-http-to-https", + "label": "Redirect HTTP to HTTPS", + "regex": "^(yes|no)$", + "type": "check", + }, + "AUTO_REDIRECT_HTTP_TO_HTTPS": { + "context": "multisite", + "default": "yes", + "help": "Try to detect if HTTPS is used and activate HTTP to HTTPS redirection if that's the case.", + "id": "auto-redirect-http-to-https", + "label": "Auto redirect HTTP to HTTPS", + "regex": "^(yes|no)$", + "type": "check", + }, + "ALLOWED_METHODS": { + "context": "multisite", + "default": "GET|POST|HEAD", + "help": "Allowed HTTP and WebDAV methods, separated with pipes to be sent by clients.", + "id": "allowed-methods", + "label": "Allowed methods", + "regex": "^(?!\\|)(\\|?([A-Z]{3,})(?!.*(^|\\|)\\2))+$", + "type": "text", + }, + "MAX_CLIENT_SIZE": { + "context": "multisite", + "default": "10m", + "help": "Maximum body size (0 for infinite).", + "id": "max-client-size", + "label": "Maximum body size", + "regex": "^\\d+[kKmMgG]?$", + "type": "text", + }, + "SERVE_FILES": { + "context": "multisite", + "default": "yes", + "help": "Serve files from the local folder.", + "id": "serve-files", + "label": "Serve files", + "regex": "^(yes|no)$", + "type": "check", + }, + "ROOT_FOLDER": { + "context": "multisite", + "default": "", + "help": "Root folder containing files to serve (/var/www/html/{server_name} if unset).", + "id": "root-folder", + "label": "Root folder", + "regex": "^(/[\\w. \\-]+)*/?$", + "type": "text", + }, + "SSL_PROTOCOLS": { + "context": "multisite", + "default": "TLSv1.2 TLSv1.3", + "help": "The supported version of TLS. We recommend the default value TLSv1.2 TLSv1.3 for compatibility reasons.", + "id": "https-protocols", + "label": "HTTPS protocols", + "regex": "^(?! )( ?TLSv1\\.[0-3])*$", + "type": "text", + }, + "HTTP2": { + "context": "multisite", + "default": "yes", + "help": "Support HTTP2 protocol when HTTPS is enabled.", + "id": "http2", + "label": "HTTP2", + "regex": "^(yes|no)$", + "type": "check", + }, + "HTTP3": { + "context": "multisite", + "default": "no", + "help": "Support HTTP3 protocol when HTTPS is enabled.", + "id": "http3", + "label": "HTTP3", + "regex": "^(yes|no)$", + "type": "check", + }, + "HTTP3_ALT_SVC_PORT": { + "context": "multisite", + "default": "443", + "help": "HTTP3 alternate service port. This value will be used as part of the Alt-Svc header.", + "id": "http3-alt-svc-port", + "label": "HTTP3 Alt-Svc port", + "regex": "^\\d+$", + "type": "text", + }, + "LISTEN_HTTP": { + "context": "multisite", + "default": "yes", + "help": "Respond to (insecure) HTTP requests.", + "id": "http-listen", + "label": "HTTP listen", + "regex": "^(yes|no)$", + "type": "check", + }, + "USE_OPEN_FILE_CACHE": { + "context": "multisite", + "default": "no", + "help": "Enable open file cache feature", + "id": "use-open-file-cache", + "label": "Use open file cache", + "regex": "^(yes|no)$", + "type": "check", + }, + "OPEN_FILE_CACHE": { + "context": "multisite", + "default": "max=1000 inactive=20s", + "help": "Open file cache directive", + "id": "open-file-cache", + "label": "Use open file cache", + "regex": "^(off|max=\\d+( inactive=\\d+(ms?|[shdwMy]))?)$", + "type": "text", + }, + "OPEN_FILE_CACHE_ERRORS": { + "context": "multisite", + "default": "yes", + "help": "Enable open file cache for errors", + "id": "open-file-cache-errors", + "label": "Open file cache errors", + "regex": "^(yes|no)$", + "type": "check", + }, + "OPEN_FILE_CACHE_MIN_USES": { + "context": "multisite", + "default": "2", + "help": "Enable open file cache minimum uses", + "id": "open-file-cache-min-uses", + "label": "Open file cache min uses", + "regex": "^[1-9]\\d*$", + "type": "text", + }, + "OPEN_FILE_CACHE_VALID": { + "context": "multisite", + "default": "30s", + "help": "Open file cache valid time", + "id": "open-file-cache-valid", + "label": "Open file cache valid time", + "regex": "^\\d+(ms?|[shdwMy])$", + "type": "text", + }, + "EXTERNAL_PLUGIN_URLS": { + "context": "global", + "default": "", + "help": "List of external plugins URLs (direct download to .zip or .tar file) to download and install (URLs are separated with space).", + "id": "external-plugin-urls", + "label": "External plugin URLs", + "regex": "^( *((https?:\\/\\/|file:\\/\\/\\/)[\\-\\w@:%.+~#=]+[\\-\\w\\(\\)!@:%+.~#?&\\/=$]*)(?!.*\\2(?!.)) *)*$", + "type": "text", + }, + "DENY_HTTP_STATUS": { + "context": "global", + "default": "403", + "help": "HTTP status code to send when the request is denied (403 or 444). When using 444, BunkerWeb will close the connection.", + "id": "deny-http-status", + "label": "Deny HTTP status", + "regex": "^(403|444)$", + "type": "select", + "select": ["403", "444"], + }, + "SEND_ANONYMOUS_REPORT": { + "context": "global", + "default": "yes", + "help": "Send anonymous report to BunkerWeb maintainers.", + "id": "send-anonymous-report", + "label": "Send anonymous report", + "regex": "^(yes|no)$", + "type": "check", + }, + }, + "checksum": None, + }, + { + "id": "modsecurity", + "stream": "no", + "name": "ModSecurity", + "description": "Management of the ModSecurity WAF.", + "version": "1.0", + "type": "core", + "method": "manual", + "page": False, + "settings": { + "USE_MODSECURITY": { + "context": "multisite", + "default": "yes", + "help": "Enable ModSecurity WAF.", + "id": "use-modsecurity", + "label": "Use ModSecurity", + "regex": "^(yes|no)$", + "type": "check", + }, + "USE_MODSECURITY_CRS": { + "context": "multisite", + "default": "yes", + "help": "Enable OWASP Core Rule Set.", + "id": "use-modsecurity-crs", + "label": "Use Core Rule Set", + "regex": "^(yes|no)$", + "type": "check", + }, + "MODSECURITY_CRS_VERSION": { + "context": "multisite", + "default": "3", + "help": "Version of the OWASP Core Rule Set to use with ModSecurity (3, 4 or nightly).", + "id": "modsecurity-crs-version", + "label": "Core Rule Set Version", + "regex": "^(3|4|nightly)$", + "type": "select", + "select": ["3", "4", "nightly"], + }, + "MODSECURITY_SEC_AUDIT_ENGINE": { + "context": "multisite", + "default": "RelevantOnly", + "help": "SecAuditEngine directive of ModSecurity.", + "id": "modsecurity-sec-audit-engine", + "label": "SecAuditEngine", + "regex": "^(On|RelevantOnly|Off)$", + "type": "select", + "select": ["Off", "On", "RelevantOnly"], + }, + "MODSECURITY_SEC_RULE_ENGINE": { + "context": "multisite", + "default": "On", + "help": "SecRuleEngine directive of ModSecurity.", + "id": "modsecurity-sec-rule-engine", + "label": "SecRuleEngine", + "regex": "^(On|DetectionOnly|Off)$", + "type": "select", + "select": ["DetectionOnly", "Off", "On"], + }, + "MODSECURITY_SEC_AUDIT_LOG_PARTS": { + "context": "multisite", + "default": "ABCFHZ", + "help": "SecAuditLogParts directive of ModSecurity.", + "id": "modsecurity-sec-audit-log-parts", + "label": "SecAuditLogParts", + "regex": "^A(([B-K])(?!.*\\2))+Z$", + "type": "text", + }, + }, + "checksum": None, + }, + { + "id": "php", + "stream": "no", + "name": "PHP", + "description": "Manage local or remote PHP-FPM.", + "version": "1.0", + "type": "core", + "method": "manual", + "page": False, + "settings": { + "REMOTE_PHP": { + "context": "multisite", + "default": "", + "help": "Hostname of the remote PHP-FPM instance.", + "id": "remote-php", + "label": "Remote PHP", + "regex": "^((?=.{1,255}$)[0-9A-Za-z](?:(?:[0-9A-Za-z]|-){0,61}[0-9A-Za-z])?(?:\\.[0-9A-Za-z](?:(?:[0-9A-Za-z]|-){0,61}[0-9A-Za-z])?)*\\.?)?$", + "type": "text", + }, + "REMOTE_PHP_PATH": { + "context": "multisite", + "default": "", + "help": "Root folder containing files in the remote PHP-FPM instance.", + "id": "remote-php-path", + "label": "Remote PHP path", + "regex": "^(/[\\w. \\-]+)*/?$", + "type": "text", + }, + "LOCAL_PHP": { + "context": "multisite", + "default": "", + "help": "Path to the PHP-FPM socket file.", + "id": "local", + "label": "Local PHP", + "regex": "^(/[\\w. \\-]+)*/?$", + "type": "text", + }, + "LOCAL_PHP_PATH": { + "context": "multisite", + "default": "", + "help": "Root folder containing files in the local PHP-FPM instance.", + "id": "local-php-path", + "label": "Local PHP path", + "regex": "^(/[\\w. \\-]+)*/?$", + "type": "text", + }, + }, + "checksum": None, + }, + { + "id": "pro", + "stream": "no", + "name": "Pro", + "description": "Pro settings for the Pro version of BunkerWeb.", + "version": "1.0", + "type": "core", + "method": "manual", + "page": False, + "settings": { + "PRO_LICENSE_KEY": { + "context": "global", + "default": "", + "help": "The License Key for the Pro version of BunkerWeb.", + "id": "pro-license-key", + "label": "Pro License Key", + "regex": "^.*$", + "type": "password", + } + }, + "checksum": None, + }, + { + "id": "realip", + "stream": "partial", + "name": "Real IP", + "description": "Get real IP of clients when BunkerWeb is behind a reverse proxy / load balancer.", + "version": "1.0", + "type": "core", + "method": "manual", + "page": False, + "settings": { + "USE_REAL_IP": { + "context": "multisite", + "default": "no", + "help": "Retrieve the real IP of client.", + "id": "use-real-ip", + "label": "Use real ip", + "regex": "^(yes|no)$", + "type": "check", + }, + "USE_PROXY_PROTOCOL": { + "context": "multisite", + "default": "no", + "help": "Enable PROXY protocol communication.", + "id": "use-proxy-protocol", + "label": "Use PROXY protocol", + "regex": "^(yes|no)$", + "type": "check", + }, + "REAL_IP_FROM": { + "context": "multisite", + "default": "192.168.0.0/16 172.16.0.0/12 10.0.0.0/8", + "help": "List of trusted IPs / networks, separated with spaces, where proxied requests come from.", + "id": "real-ip-from", + "label": "Real IP from", + "regex": "^(?! )( *(((\\b25[0-5]|\\b2[0-4]\\d|\\b[01]?\\d\\d?)(\\.(25[0-5]|2[0-4]\\d|[01]?\\d\\d?)){3})(\\/([1-2][0-9]?|3[0-2]?|[04-9]))?|(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]Z{0,4}){0,4}%[0-9a-zA-Z]+|::(ffff(:0{1,4})?:)?((25[0-5]|(2[0-4]|1?\\d)?\\d)\\.){3}(25[0-5]|(2[0-4]|1?\\d)?\\d)|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1?\\d)?\\d)\\.){3}(25[0-5]|(2[0-4]|1?\\d)?\\d))(\\/(12[0-8]|1[01][0-9]|[0-9][0-9]?))?)(?!.*\\D\\2([^\\d\\/]|$)) *)*$", + "type": "text", + }, + "REAL_IP_HEADER": { + "context": "multisite", + "default": "X-Forwarded-For", + "help": "HTTP header containing the real IP or special value proxy_protocol for PROXY protocol.", + "id": "real-ip-header", + "label": "Real IP header", + "regex": "^(?! )(( ?(?!proxy_protocol)[\\w\\-]+)*|proxy_protocol)$", + "type": "text", + }, + "REAL_IP_RECURSIVE": { + "context": "multisite", + "default": "yes", + "help": "Perform a recursive search in the header container IP address.", + "id": "real-ip-recursive", + "label": "Real IP recursive", + "regex": "^(yes|no)$", + "type": "check", + }, + "REAL_IP_FROM_URLS": { + "context": "global", + "default": "", + "help": "List of URLs containing trusted IPs / networks, separated with spaces, where proxied requests come from.", + "id": "real-ip-from-urls", + "label": "Real IP from URLs", + "regex": "^( *((https?:\\/\\/|file:\\/\\/\\/)[\\-\\w@:%.+~#=]+[\\-\\w\\(\\)!@:%+.~#?&\\/=$]*)(?!.*\\2(?!.)) *)*$", + "type": "text", + }, + }, + "checksum": None, + }, + { + "id": "redirect", + "stream": "no", + "name": "Redirect", + "description": "Manage HTTP redirects.", + "version": "1.0", + "type": "core", + "method": "manual", + "page": False, + "settings": { + "REDIRECT_TO": { + "context": "multisite", + "default": "", + "help": "Redirect a whole site to another one.", + "id": "redirect-to", + "label": "Redirect to", + "regex": "^(https?:\\/\\/[\\-\\w@:%.+~#=]+[\\-\\w\\(\\)!@:%+.~#?&\\/=$]*)?$", + "type": "text", + }, + "REDIRECT_TO_REQUEST_URI": { + "context": "multisite", + "default": "no", + "help": "Append the requested URI to the redirect address.", + "id": "redirect-to-request-uri", + "label": "Append request URI", + "regex": "^(yes|no)$", + "type": "check", + }, + "REDIRECT_TO_STATUS_CODE": { + "context": "multisite", + "default": "301", + "help": "Status code to send to client when redirecting.", + "id": "redirect-to-status-code", + "label": "Append request URI", + "regex": "^(301|302)$", + "type": "select", + "select": ["301", "302"], + }, + }, + "checksum": None, + }, + { + "id": "redis", + "stream": "yes", + "name": "Redis", + "description": "Redis server configuration when using BunkerWeb in cluster mode.", + "version": "1.0", + "type": "core", + "method": "manual", + "page": True, + "settings": { + "USE_REDIS": { + "context": "global", + "default": "no", + "help": "Activate Redis.", + "id": "use-redis", + "label": "Activate Redis", + "regex": "^(yes|no)$", + "type": "check", + }, + "REDIS_HOST": { + "context": "global", + "default": "", + "help": "Redis server IP or hostname.", + "id": "redis-host", + "label": "Redis server", + "regex": "^((?!-)[a-zA-Z0-9\\-]{1,63}(.[a-zA-Z]{2,})+|(\\b25[0-5]|\\b2[0-4]\\d|\\b[01]?\\d\\d?)(\\.(25[0-5]|2[0-4]\\d|[01]?\\d\\d?)){3}|(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]Z{0,4}){0,4}%[0-9a-zA-Z]+|::(ffff(:0{1,4})?:)?((25[0-5]|(2[0-4]|1?\\d)?\\d)\\.){3}(25[0-5]|(2[0-4]|1?\\d)?\\d)|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1?\\d)?\\d)\\.){3}(25[0-5]|(2[0-4]|1?\\d)?\\d)))?$", + "type": "text", + }, + "REDIS_PORT": { + "context": "global", + "default": "6379", + "help": "Redis server port.", + "id": "redis-port", + "label": "Redis port", + "regex": "^[0-9]+$", + "type": "text", + }, + "REDIS_DATABASE": { + "context": "global", + "default": "0", + "help": "Redis database number.", + "id": "redis-database", + "label": "Redis database", + "regex": "^[0-9]+$", + "type": "text", + }, + "REDIS_SSL": { + "context": "global", + "default": "no", + "help": "Use SSL/TLS connection with Redis server.", + "id": "redis-ssl", + "label": "Redis SSL/TLS", + "regex": "^(yes|no)$", + "type": "check", + }, + "REDIS_SSL_VERIFY": { + "context": "global", + "default": "no", + "help": "Verify the certificate of Redis server.", + "id": "redis-ssl-verify", + "label": "Redis SSL/TLS verify", + "regex": "^(yes|no)$", + "type": "check", + }, + "REDIS_TIMEOUT": { + "context": "global", + "default": "1000", + "help": "Redis server timeout (in ms) for connect, read and write.", + "id": "redis-timeout", + "label": "Redis timeout (ms)", + "regex": "^[0-9]+$", + "type": "text", + }, + "REDIS_USERNAME": { + "context": "global", + "default": "", + "help": "Redis username used in AUTH command.", + "id": "redis-username", + "label": "Redis username", + "regex": "^.*$", + "type": "text", + }, + "REDIS_PASSWORD": { + "context": "global", + "default": "", + "help": "Redis password used in AUTH command.", + "id": "redis-password", + "label": "Redis password", + "regex": "^.*$", + "type": "password", + }, + "REDIS_SENTINEL_HOSTS": { + "context": "global", + "default": "", + "help": "Redis sentinel hosts with format host:[port] separated with spaces.", + "id": "redis-sentinel-hosts", + "label": "Redis sentinel hosts", + "regex": "^.*$", + "type": "text", + }, + "REDIS_SENTINEL_USERNAME": { + "context": "global", + "default": "", + "help": "Redis sentinel username.", + "id": "redis-sentinel-username", + "label": "Redis sentinel username", + "regex": "^.*$", + "type": "text", + }, + "REDIS_SENTINEL_PASSWORD": { + "context": "global", + "default": "", + "help": "Redis sentinel password.", + "id": "redis-sentinel-password", + "label": "Redis sentinel password", + "regex": "^.*$", + "type": "password", + }, + "REDIS_SENTINEL_MASTER": { + "context": "global", + "default": "", + "help": "Redis sentinel master name.", + "id": "redis-sentinel-master", + "label": "Redis sentinel master", + "regex": "^.*$", + "type": "text", + }, + "REDIS_KEEPALIVE_IDLE": { + "context": "global", + "default": "30000", + "help": "Max idle time (in ms) before closing redis connection in the pool.", + "id": "redis-keepalive-idle", + "label": "Redis keepalive idle (ms)", + "regex": "^[0-9]+$", + "type": "text", + }, + "REDIS_KEEPALIVE_POOL": { + "context": "global", + "default": "10", + "help": "Max number of redis connection(s) kept in the pool.", + "id": "redis-keepalive-pool", + "label": "Redis keepalive pool", + "regex": "^[0-9]+$", + "type": "text", + }, + }, + "checksum": None, + }, + { + "id": "reverseproxy", + "stream": "partial", + "name": "Reverse proxy", + "description": "Manage reverse proxy configurations.", + "version": "1.0", + "type": "core", + "method": "manual", + "page": False, + "settings": { + "USE_REVERSE_PROXY": { + "context": "multisite", + "default": "no", + "help": "Activate reverse proxy mode.", + "id": "use-reverse-proxy", + "label": "Use reverse proxy", + "regex": "^(yes|no)$", + "type": "check", + }, + "REVERSE_PROXY_INTERCEPT_ERRORS": { + "context": "multisite", + "default": "yes", + "help": "Intercept and rewrite errors.", + "id": "reverse-proxy-intercept-errors", + "label": "Intercept errors", + "regex": "^(yes|no)$", + "type": "check", + }, + "REVERSE_PROXY_CUSTOM_HOST": { + "context": "multisite", + "default": "", + "help": "Override Host header sent to upstream server.", + "id": "reverse-proxy-custom-host", + "label": "Reverse proxy custom host", + "regex": "^.*$", + "type": "text", + }, + "REVERSE_PROXY_HOST": { + "context": "multisite", + "default": "", + "help": "Full URL of the proxied resource (proxy_pass).", + "id": "reverse-proxy-host", + "label": "Reverse proxy host", + "regex": "^.*$", + "type": "text", + "multiple": "reverse-proxy", + }, + "REVERSE_PROXY_URL": { + "context": "multisite", + "default": "/", + "help": "Location URL that will be proxied.", + "id": "reverse-proxy-url", + "label": "Reverse proxy url", + "regex": "^.*$", + "type": "text", + "multiple": "reverse-proxy", + }, + "REVERSE_PROXY_WS": { + "context": "multisite", + "default": "no", + "help": "Enable websocket on the proxied resource.", + "id": "reverse-proxy-ws", + "label": "Reverse proxy WS", + "regex": "^(yes|no)$", + "type": "check", + "multiple": "reverse-proxy", + }, + "REVERSE_PROXY_HEADERS": { + "context": "multisite", + "default": "", + "help": "List of HTTP headers to send to proxied resource separated with semicolons (values for proxy_set_header directive).", + "id": "reverse-proxy-headers", + "label": "Reverse proxy headers", + "regex": "^(?![; ])(;? ?([\\w\\-]+)(?!.*\\2 ) [^;]+)*$", + "type": "text", + "multiple": "reverse-proxy", + }, + "REVERSE_PROXY_HEADERS_CLIENT": { + "context": "multisite", + "default": "", + "help": "List of HTTP headers to send to client separated with semicolons (values for add_header directive).", + "id": "reverse-proxy-headers-client", + "label": "Reverse proxy headers-client", + "regex": "^(?![; ])(;? ?([\\w\\-]+)(?!.*\\2 ) [^;]+)*$", + "type": "text", + "multiple": "reverse-proxy", + }, + "REVERSE_PROXY_BUFFERING": { + "context": "multisite", + "default": "yes", + "help": "Enable or disable buffering of responses from proxied resource.", + "id": "reverse-proxy-buffering", + "label": "Reverse proxy buffering", + "regex": "^(yes|no)$", + "type": "check", + "multiple": "reverse-proxy", + }, + "REVERSE_PROXY_KEEPALIVE": { + "context": "multisite", + "default": "no", + "help": "Enable or disable keepalive connections with the proxied resource.", + "id": "reverse-proxy-keepalive", + "label": "Reverse proxy keepalive", + "regex": "^(yes|no)$", + "type": "check", + "multiple": "reverse-proxy", + }, + "REVERSE_PROXY_AUTH_REQUEST": { + "context": "multisite", + "default": "", + "help": "Enable authentication using an external provider (value of auth_request directive).", + "id": "reverse-proxy-auth-request", + "label": "Reverse proxy auth request", + "regex": "^(\\/[\\w\\].~:\\/?#\\[@!$\\&'\\(\\)*+,;=\\-]*|off)?$", + "type": "text", + "multiple": "reverse-proxy", + }, + "REVERSE_PROXY_AUTH_REQUEST_SIGNIN_URL": { + "context": "multisite", + "default": "", + "help": "Redirect clients to sign-in URL when using REVERSE_PROXY_AUTH_REQUEST (used when auth_request call returned 401).", + "id": "reverse-proxy-auth-request-signin-url", + "label": "Auth request signin URL", + "regex": "^(https?:\\/\\/[\\-\\w@:%.+~#=]+[\\-\\w\\(\\)!@:%+.~#?&\\/=$]*)?$", + "type": "text", + "multiple": "reverse-proxy", + }, + "REVERSE_PROXY_AUTH_REQUEST_SET": { + "context": "multisite", + "default": "", + "help": "List of variables to set from the authentication provider, separated with semicolons (values of auth_request_set directives).", + "id": "reverse-proxy-auth-request-set", + "label": "Reverse proxy auth request set", + "regex": "^(?! ;)(;? ?(\\$[a-z_\\-]+)(?!.*\\2 ) [^;]+)*$", + "type": "text", + "multiple": "reverse-proxy", + }, + "REVERSE_PROXY_CONNECT_TIMEOUT": { + "context": "multisite", + "default": "60s", + "help": "Timeout when connecting to the proxied resource.", + "id": "reverse-proxy-connect-timeout", + "label": "Reverse proxy connect timeout", + "regex": "^\\d+(ms?|[shdwMy])$", + "type": "text", + "multiple": "reverse-proxy", + }, + "REVERSE_PROXY_READ_TIMEOUT": { + "context": "multisite", + "default": "60s", + "help": "Timeout when reading from the proxied resource.", + "id": "reverse-proxy-read-timeout", + "label": "Reverse proxy read timeout", + "regex": "^\\d+(ms?|[shdwMy])$", + "type": "text", + "multiple": "reverse-proxy", + }, + "REVERSE_PROXY_SEND_TIMEOUT": { + "context": "multisite", + "default": "60s", + "help": "Timeout when sending to the proxied resource.", + "id": "reverse-proxy-send-timeout", + "label": "Reverse proxy send timeout", + "regex": "^\\d+(ms?|[shdwMy])$", + "type": "text", + "multiple": "reverse-proxy", + }, + "REVERSE_PROXY_INCLUDES": { + "context": "multisite", + "default": "", + "help": "Additional configuration to include in the location block, separated with spaces.", + "id": "reverse-proxy-includes", + "label": "Reverse proxy includes", + "regex": "^(?! )( ?(\\w+)(?!.*\\b\\2\\b))*$", + "type": "text", + "multiple": "reverse-proxy", + }, + "USE_PROXY_CACHE": { + "context": "multisite", + "default": "no", + "help": "Enable or disable caching of the proxied resources.", + "id": "use-proxy-cache", + "label": "Reverse proxy cache", + "regex": "^(yes|no)$", + "type": "check", + }, + "PROXY_CACHE_PATH_LEVELS": { + "context": "global", + "default": "1:2", + "help": "Hierarchy levels of the cache.", + "id": "proxy-cache-path-levels", + "label": "Hierarchy levels", + "regex": "^(:?[12]){1,3}$", + "type": "text", + }, + "PROXY_CACHE_PATH_ZONE_SIZE": { + "context": "global", + "default": "10m", + "help": "Maximum size of cached metadata when caching proxied resources.", + "id": "proxy-cache-path-zone-size", + "label": "Reverse proxy cache zone size", + "regex": "^\\d+[kKmMgG]?$", + "type": "text", + }, + "PROXY_CACHE_PATH_PARAMS": { + "context": "global", + "default": "max_size=100m", + "help": "Additional parameters to add to the proxy_cache directive.", + "id": "proxy-cache-path-params", + "label": "Reverse proxy cache params", + "regex": "^.*$", + "type": "text", + }, + "PROXY_CACHE_METHODS": { + "context": "multisite", + "default": "GET HEAD", + "help": "HTTP methods that should trigger a cache operation.", + "id": "proxy-cache-methods", + "label": "Reverse proxy cache methods", + "regex": "^(?! )( ?(GET|HEAD|POST|PUT|DELETE|CONNECT|OPTIONS|TRACE|PATCH)(?!.*\\2))+$", + "type": "text", + }, + "PROXY_CACHE_MIN_USES": { + "context": "multisite", + "default": "2", + "help": "The minimum number of requests before a response is cached.", + "id": "proxy-cache-min-uses", + "label": "Reverse proxy cache minimum uses", + "regex": "^[1-9]\\d*$", + "type": "text", + }, + "PROXY_CACHE_KEY": { + "context": "multisite", + "default": "$scheme$host$request_uri", + "help": "The key used to uniquely identify a cached response.", + "id": "proxy-cache-key", + "label": "Reverse proxy cache key", + "regex": "^(?! )( ?(\\$[a-z_]+)(?!.*\\2))+$", + "type": "text", + }, + "PROXY_CACHE_VALID": { + "context": "multisite", + "default": "200=24h 301=1h 302=24h", + "help": "Define the caching time depending on the HTTP status code (list of status=time), separated with spaces.", + "id": "proxy-cache-valid", + "label": "Reverse proxy cache valid", + "regex": "^(?! )( ?([1-5]\\d{2})(?!.*\\2=)=\\d+(ms?|[shdwMy]))*$", + "type": "text", + }, + "PROXY_NO_CACHE": { + "context": "multisite", + "default": "$http_pragma $http_authorization", + "help": "Conditions to disable caching of responses.", + "id": "proxy-no-cache", + "label": "Reverse proxy no cache", + "regex": "^.*$", + "type": "text", + }, + "PROXY_CACHE_BYPASS": { + "context": "multisite", + "default": "0", + "help": "Conditions to bypass caching of responses.", + "id": "proxy-cache-bypass", + "label": "Reverse proxy bypass", + "regex": "^.*$", + "type": "text", + }, + }, + "checksum": None, + }, + { + "id": "reversescan", + "stream": "yes", + "name": "Reverse scan", + "description": "Scan clients ports to detect proxies or servers.", + "version": "1.0", + "type": "core", + "method": "manual", + "page": True, + "settings": { + "USE_REVERSE_SCAN": { + "context": "multisite", + "default": "no", + "help": "Enable scanning of clients ports and deny access if one is opened.", + "id": "use-reverse-scan", + "label": "Reverse scan", + "regex": "^(no|yes)$", + "type": "check", + }, + "REVERSE_SCAN_PORTS": { + "context": "multisite", + "default": "22 80 443 3128 8000 8080", + "help": "List of port to scan when using reverse scan feature.", + "id": "reverse-scan-ports", + "label": "Reverse scan ports", + "regex": "^.*$", + "type": "text", + }, + "REVERSE_SCAN_TIMEOUT": { + "context": "multisite", + "default": "500", + "help": "Specify the maximum timeout (in ms) when scanning a port.", + "id": "reverse-scan-timeout", + "label": "Reverse scan timeout", + "regex": "^.*$", + "type": "text", + }, + }, + "checksum": None, + }, + { + "id": "selfsigned", + "stream": "yes", + "name": "Self-signed certificate", + "description": "Generate self-signed certificate.", + "version": "1.0", + "type": "core", + "method": "manual", + "page": False, + "settings": { + "GENERATE_SELF_SIGNED_SSL": { + "context": "multisite", + "default": "no", + "help": "Generate and use self-signed certificate.", + "id": "generate-self-signed-ssl", + "label": "Activate self-signed certificate", + "regex": "^(yes|no)$", + "type": "check", + }, + "SELF_SIGNED_SSL_EXPIRY": { + "context": "multisite", + "default": "365", + "help": "Self-signed certificate expiry in days.", + "id": "self-signed-ssl-expiry", + "label": "Certificate expiry", + "regex": "^\\d+$", + "type": "text", + }, + "SELF_SIGNED_SSL_SUBJ": { + "context": "multisite", + "default": "/CN=www.example.com/", + "help": "Self-signed certificate subject.", + "id": "self-signed-ssl-subj", + "label": "Certificate subject", + "regex": "^/CN=[^,]+$", + "type": "text", + }, + }, + "checksum": None, + }, + { + "id": "sessions", + "stream": "yes", + "name": "Sessions", + "description": "Management of session used by other plugins.", + "version": "1.0", + "type": "core", + "method": "manual", + "page": False, + "settings": { + "SESSIONS_SECRET": { + "context": "global", + "default": "random", + "help": "Secret used to encrypt sessions variables for storing data related to challenges.", + "id": "session-secret", + "label": "Sessions secret", + "regex": "^\\w+$", + "type": "password", + }, + "SESSIONS_NAME": { + "context": "global", + "default": "random", + "help": "Name of the cookie given to clients.", + "id": "sessions-name", + "label": "Sessions name", + "regex": "^\\w+$", + "type": "text", + }, + "SESSIONS_IDLING_TIMEOUT": { + "context": "global", + "default": "1800", + "help": "Maximum time (in seconds) of inactivity before the session is invalidated.", + "id": "sessions-idling-timeout", + "label": "Sessions idling timeout", + "regex": "^\\d+$", + "type": "text", + }, + "SESSIONS_ROLLING_TIMEOUT": { + "context": "global", + "default": "3600", + "help": "Maximum time (in seconds) before a session must be renewed.", + "id": "sessions-rolling-timeout", + "label": "Sessions rolling timeout", + "regex": "^\\d+$", + "type": "text", + }, + "SESSIONS_ABSOLUTE_TIMEOUT": { + "context": "global", + "default": "86400", + "help": "Maximum time (in seconds) before a session is destroyed.", + "id": "sessions-absolute-timeout", + "label": "Sessions absolute timeout", + "regex": "^\\d+$", + "type": "text", + }, + "SESSIONS_CHECK_IP": { + "context": "global", + "default": "yes", + "help": "Destroy session if IP address is different than original one.", + "id": "sessions-check-ip", + "label": "Sessions check IP", + "regex": "^(yes|no)$", + "type": "check", + }, + "SESSIONS_CHECK_USER_AGENT": { + "context": "global", + "default": "yes", + "help": "Destroy session if User-Agent is different than original one.", + "id": "sessions-user-agent", + "label": "Sessions check User-Agent", + "regex": "^(yes|no)$", + "type": "check", + }, + }, + "checksum": None, + }, + { + "id": "ui", + "stream": "no", + "name": "UI", + "description": "Integrate easily the BunkerWeb UI.", + "version": "1.0", + "type": "core", + "method": "manual", + "page": False, + "settings": { + "USE_UI": { + "context": "multisite", + "default": "no", + "help": "Use UI", + "id": "use-ui", + "label": "Use UI", + "regex": "^(yes|no)$", + "type": "check", + }, + "UI_HOST": { + "context": "global", + "default": "", + "help": "Address of the web UI used for initial setup", + "id": "ui-host", + "label": "UI host", + "regex": "^.*$", + "type": "text", + }, + }, + "checksum": None, + }, + { + "id": "whitelist", + "stream": "partial", + "name": "Whitelist", + "description": "Allow access based on internal and external IP/network/rDNS/ASN whitelists.", + "version": "1.0", + "type": "core", + "method": "manual", + "page": True, + "settings": { + "USE_WHITELIST": { + "context": "multisite", + "default": "yes", + "help": "Activate whitelist feature.", + "id": "use-whitelist", + "label": "Activate whitelisting", + "regex": "^(yes|no)$", + "type": "check", + }, + "WHITELIST_IP": { + "context": "multisite", + "default": "20.191.45.212 40.88.21.235 40.76.173.151 40.76.163.7 20.185.79.47 52.142.26.175 20.185.79.15 52.142.24.149 40.76.162.208 40.76.163.23 40.76.162.191 40.76.162.247", + "help": "List of IP/network, separated with spaces, to put into the whitelist.", + "id": "whitelist-ip", + "label": "Whitelist IP/network", + "regex": "^(?! )( *(((\\b25[0-5]|\\b2[0-4]\\d|\\b[01]?\\d\\d?)(\\.(25[0-5]|2[0-4]\\d|[01]?\\d\\d?)){3})(\\/([1-2][0-9]?|3[0-2]?|[04-9]))?|(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]Z{0,4}){0,4}%[0-9a-zA-Z]+|::(ffff(:0{1,4})?:)?((25[0-5]|(2[0-4]|1?\\d)?\\d)\\.){3}(25[0-5]|(2[0-4]|1?\\d)?\\d)|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1?\\d)?\\d)\\.){3}(25[0-5]|(2[0-4]|1?\\d)?\\d))(\\/(12[0-8]|1[01][0-9]|[0-9][0-9]?))?)(?!.*\\D\\2([^\\d\\/]|$)) *)*$", + "type": "text", + }, + "WHITELIST_RDNS": { + "context": "multisite", + "default": ".google.com .googlebot.com .yandex.ru .yandex.net .yandex.com .search.msn.com .baidu.com .baidu.jp .crawl.yahoo.net .fwd.linkedin.com .twitter.com .twttr.com .discord.com", + "help": "List of reverse DNS suffixes, separated with spaces, to whitelist.", + "id": "whitelist-rdns", + "label": "Whitelist reverse DNS", + "regex": "^( *(([^ ]+)(?!.*\\3( |$))) *)*$", + "type": "text", + }, + "WHITELIST_RDNS_GLOBAL": { + "context": "multisite", + "default": "yes", + "help": "Only perform RDNS whitelist checks on global IP addresses.", + "id": "whitelist-rdns-global", + "label": "Whitelist reverse DNS global IPs", + "regex": "^(yes|no)$", + "type": "check", + }, + "WHITELIST_ASN": { + "context": "multisite", + "default": "32934", + "help": "List of ASN numbers, separated with spaces, to whitelist.", + "id": "whitelist-asn", + "label": "Whitelist ASN", + "regex": "^^( *((ASN?)?(\\d+)\\b(?!.*[SN ]\\4\\b)) *)*$", + "type": "text", + }, + "WHITELIST_USER_AGENT": { + "context": "multisite", + "default": "", + "help": "List of User-Agent (PCRE regex), separated with spaces, to whitelist.", + "id": "whitelist-user-agent", + "label": "Whitelist User-Agent", + "regex": "^.*$", + "type": "text", + }, + "WHITELIST_URI": { + "context": "multisite", + "default": "", + "help": "List of URI (PCRE regex), separated with spaces, to whitelist.", + "id": "whitelist-uri", + "label": "Whitelist URI", + "regex": "^( *(.*)(?!.*\\2(?!.)) *)*$", + "type": "text", + }, + "WHITELIST_IP_URLS": { + "context": "global", + "default": "", + "help": "List of URLs, separated with spaces, containing good IP/network to whitelist.", + "id": "whitelist-ip-urls", + "label": "Whitelist IP/network URLs", + "regex": "^( *((https?:\\/\\/|file:\\/\\/\\/)[\\-\\w@:%.+~#=]+[\\-\\w\\(\\)!@:%+.~#?&\\/=$]*)(?!.*\\2(?!.)) *)*$", + "type": "text", + }, + "WHITELIST_RDNS_URLS": { + "context": "global", + "default": "", + "help": "List of URLs, separated with spaces, containing reverse DNS suffixes to whitelist.", + "id": "whitelist-rdns-urls", + "label": "Whitelist reverse DNS URLs", + "regex": "^( *((https?:\\/\\/|file:\\/\\/\\/)[\\-\\w@:%.+~#=]+[\\-\\w\\(\\)!@:%+.~#?&\\/=$]*)(?!.*\\2(?!.)) *)*$", + "type": "text", + }, + "WHITELIST_ASN_URLS": { + "context": "global", + "default": "", + "help": "List of URLs, separated with spaces, containing ASN to whitelist.", + "id": "whitelist-asn-urls", + "label": "Whitelist ASN URLs", + "regex": "^( *((https?:\\/\\/|file:\\/\\/\\/)[\\-\\w@:%.+~#=]+[\\-\\w\\(\\)!@:%+.~#?&\\/=$]*)(?!.*\\2(?!.)) *)*$", + "type": "text", + }, + "WHITELIST_USER_AGENT_URLS": { + "context": "global", + "default": "", + "help": "List of URLs, separated with spaces, containing good User-Agent to whitelist.", + "id": "whitelist-user-agent-urls", + "label": "Whitelist User-Agent URLs", + "regex": "^( *((https?:\\/\\/|file:\\/\\/\\/)[\\-\\w@:%.+~#=]+[\\-\\w\\(\\)!@:%+.~#?&\\/=$]*)(?!.*\\2(?!.)) *)*$", + "type": "text", + }, + "WHITELIST_URI_URLS": { + "context": "global", + "default": "", + "help": "List of URLs, separated with spaces, containing bad URI to whitelist.", + "id": "whitelist-uri-urls", + "label": "Whitelist URI URLs", + "regex": "^( *((https?:\\/\\/|file:\\/\\/\\/)[\\-\\w@:%.+~#=]+[\\-\\w\\(\\)!@:%+.~#?&\\/=$]*)(?!.*\\2(?!.)) *)*$", + "type": "text", + }, + }, + "checksum": None, + }, +] + +# Global config +# Default global config with methods=True from docker-compose.ui.yml +global_config = { + "ERRORS": {"value": "", "global": True, "method": "default"}, + "USE_UI": {"value": "no", "global": True, "method": "default"}, + "USE_CORS": {"value": "no", "global": True, "method": "default"}, + "USE_GZIP": {"value": "yes", "global": True, "method": "scheduler"}, + "USE_DNSBL": {"value": "yes", "global": True, "method": "default"}, + "USE_REDIS": {"value": "no", "global": True, "method": "default"}, + "IS_LOADING": {"value": "no", "global": True, "method": "default"}, + "REMOTE_PHP": {"value": "", "global": True, "method": "default"}, + "USE_BACKUP": {"value": "yes", "global": True, "method": "default"}, + "USE_BROTLI": {"value": "no", "global": True, "method": "default"}, + "INJECT_BODY": {"value": "", "global": True, "method": "default"}, + "REDIRECT_TO": {"value": "", "global": True, "method": "default"}, + "USE_ANTIBOT": {"value": "no", "global": True, "method": "default"}, + "USE_METRICS": {"value": "yes", "global": True, "method": "default"}, + "USE_REAL_IP": {"value": "no", "global": True, "method": "default"}, + "DATABASE_URI": {"value": "sqlite:////var/lib/bunkerweb/db.sqlite3", "global": True, "method": "default"}, + "USE_GREYLIST": {"value": "no", "global": True, "method": "default"}, + "CUSTOM_HEADER": {"value": "", "global": True, "method": "default"}, + "USE_BLACKLIST": {"value": "no", "global": True, "method": "scheduler"}, + "USE_BUNKERNET": {"value": "no", "global": True, "method": "scheduler"}, + "USE_LIMIT_REQ": {"value": "yes", "global": True, "method": "default"}, + "USE_WHITELIST": {"value": "no", "global": True, "method": "scheduler"}, + "USE_AUTH_BASIC": {"value": "no", "global": True, "method": "default"}, + "USE_CUSTOM_SSL": {"value": "no", "global": True, "method": "default"}, + "PRO_LICENSE_KEY": {"value": "", "global": True, "method": "default"}, + "SESSIONS_SECRET": {"value": "random", "global": True, "method": "default"}, + "USE_MODSECURITY": {"value": "yes", "global": True, "method": "default"}, + "USE_SECURITYTXT": {"value": "no", "global": True, "method": "default"}, + "USE_BAD_BEHAVIOR": {"value": "yes", "global": True, "method": "default"}, + "USE_CLIENT_CACHE": {"value": "yes", "global": True, "method": "scheduler"}, + "USE_REVERSE_SCAN": {"value": "no", "global": True, "method": "default"}, + "AUTO_LETS_ENCRYPT": {"value": "no", "global": True, "method": "default"}, + "BLACKLIST_COUNTRY": {"value": "", "global": True, "method": "default"}, + "USE_REVERSE_PROXY": {"value": "no", "global": True, "method": "default"}, + "DISABLE_DEFAULT_SERVER": {"value": "yes", "global": True, "method": "scheduler"}, + "GENERATE_SELF_SIGNED_SSL": {"value": "no", "global": True, "method": "default"}, + "UI_HOST": {"value": "", "global": True, "method": "default"}, + "DNSBL_LIST": {"value": "bl.blocklist.de problems.dnsbl.sorbs.net sbl.spamhaus.org xbl.spamhaus.org", "global": True, "method": "default"}, + "GZIP_TYPES": { + "value": "application/atom+xml application/javascript application/json application/rss+xml application/vnd.ms-fontobject application/x-font-opentype application/x-font-truetype application/x-font-ttf application/x-javascript application/xhtml+xml application/xml font/eot font/opentype font/otf font/truetype image/svg+xml image/vnd.microsoft.icon image/x-icon image/x-win-bitmap text/css text/javascript text/plain text/xml", + "global": True, + "method": "default", + }, + "REDIS_HOST": {"value": "", "global": True, "method": "default"}, + "ANTIBOT_URI": {"value": "/challenge", "global": True, "method": "default"}, + "GREYLIST_IP": {"value": "", "global": True, "method": "default"}, + "BLACKLIST_IP": {"value": "", "global": True, "method": "default"}, + "BROTLI_TYPES": { + "value": "application/atom+xml application/javascript application/json application/rss+xml application/vnd.ms-fontobject application/x-font-opentype application/x-font-truetype application/x-font-ttf application/x-javascript application/xhtml+xml application/xml font/eot font/opentype font/otf font/truetype image/svg+xml image/vnd.microsoft.icon image/x-icon image/x-win-bitmap text/css text/javascript text/plain text/xml", + "global": True, + "method": "default", + }, + "NGINX_PREFIX": {"value": "/etc/nginx/", "global": True, "method": "default"}, + "WHITELIST_IP": { + "value": "20.191.45.212 40.88.21.235 40.76.173.151 40.76.163.7 20.185.79.47 52.142.26.175 20.185.79.15 52.142.24.149 40.76.162.208 40.76.163.23 40.76.162.191 40.76.162.247", + "global": True, + "method": "default", + }, + "LIMIT_REQ_URL": {"value": "/", "global": True, "method": "default"}, + "SESSIONS_NAME": {"value": "random", "global": True, "method": "default"}, + "REMOVE_HEADERS": {"value": "Server Expect-CT X-Powered-By X-AspNet-Version X-AspNetMvc-Version Public-Key-Pins", "global": True, "method": "default"}, + "BACKUP_SCHEDULE": {"value": "daily", "global": True, "method": "default"}, + "CUSTOM_SSL_CERT": {"value": "", "global": True, "method": "default"}, + "REMOTE_PHP_PATH": {"value": "", "global": True, "method": "default"}, + "SECURITYTXT_URI": {"value": "/.well-known/security.txt", "global": True, "method": "default"}, + "BUNKERNET_SERVER": {"value": "https://api.bunkerweb.io", "global": True, "method": "default"}, + "CORS_ALLOW_ORIGIN": {"value": "self", "global": True, "method": "default"}, + "WHITELIST_COUNTRY": {"value": "", "global": True, "method": "default"}, + "EMAIL_LETS_ENCRYPT": {"value": "", "global": True, "method": "default"}, + "REVERSE_SCAN_PORTS": {"value": "22 80 443 3128 8000 8080", "global": True, "method": "default"}, + "USE_PROXY_PROTOCOL": {"value": "no", "global": True, "method": "default"}, + "AUTH_BASIC_LOCATION": {"value": "sitewide", "global": True, "method": "default"}, + "METRICS_MEMORY_SIZE": {"value": "16m", "global": True, "method": "default"}, + "USE_MODSECURITY_CRS": {"value": "yes", "global": True, "method": "default"}, + "DATABASE_URI_READONLY": {"value": "", "global": True, "method": "default"}, + "SELF_SIGNED_SSL_EXPIRY": {"value": "365", "global": True, "method": "default"}, + "CLIENT_CACHE_EXTENSIONS": {"value": "jpg|jpeg|png|bmp|ico|svg|tif|css|js|otf|ttf|eot|woff|woff2", "global": True, "method": "default"}, + "INTERCEPTED_ERROR_CODES": {"value": "400 401 403 404 405 413 429 500 501 502 503 504", "global": True, "method": "default"}, + "REDIRECT_TO_REQUEST_URI": {"value": "no", "global": True, "method": "default"}, + "BAD_BEHAVIOR_STATUS_CODES": {"value": "400 401 403 404 405 429 444", "global": True, "method": "default"}, + "REVERSE_PROXY_INTERCEPT_ERRORS": {"value": "yes", "global": True, "method": "default"}, + "DISABLE_DEFAULT_SERVER_STRICT_SNI": {"value": "no", "global": True, "method": "default"}, + "HTTP_PORT": {"value": "8080", "global": True, "method": "default"}, + "LOCAL_PHP": {"value": "", "global": True, "method": "default"}, + "REDIS_PORT": {"value": "6379", "global": True, "method": "default"}, + "REAL_IP_FROM": {"value": "192.168.0.0/16 172.16.0.0/12 10.0.0.0/8", "global": True, "method": "default"}, + "GREYLIST_RDNS": {"value": "", "global": True, "method": "default"}, + "BLACKLIST_RDNS": {"value": ".shodan.io .censys.io", "global": True, "method": "default"}, + "CUSTOM_SSL_KEY": {"value": "", "global": True, "method": "default"}, + "LIMIT_REQ_RATE": {"value": "2r/s", "global": True, "method": "default"}, + "WHITELIST_RDNS": { + "value": ".google.com .googlebot.com .yandex.ru .yandex.net .yandex.com .search.msn.com .baidu.com .baidu.jp .crawl.yahoo.net .fwd.linkedin.com .twitter.com .twttr.com .discord.com", + "global": True, + "method": "default", + }, + "AUTH_BASIC_USER": {"value": "changeme", "global": True, "method": "default"}, + "BACKUP_ROTATION": {"value": "7", "global": True, "method": "default"}, + "GZIP_MIN_LENGTH": {"value": "1000", "global": True, "method": "default"}, + "BROTLI_MIN_LENGTH": {"value": "1000", "global": True, "method": "default"}, + "CLIENT_CACHE_ETAG": {"value": "yes", "global": True, "method": "default"}, + "CORS_ALLOW_METHODS": {"value": "GET, POST, OPTIONS", "global": True, "method": "default"}, + "DATABASE_LOG_LEVEL": {"value": "warning", "global": True, "method": "default"}, + "SECURITYTXT_CONTACT": {"value": "", "global": True, "method": "default"}, + "ANTIBOT_TIME_RESOLVE": {"value": "60", "global": True, "method": "default"}, + "REVERSE_SCAN_TIMEOUT": {"value": "500", "global": True, "method": "default"}, + "SELF_SIGNED_SSL_SUBJ": {"value": "/CN=www.example.com/", "global": True, "method": "default"}, + "KEEP_UPSTREAM_HEADERS": {"value": "Content-Security-Policy Permissions-Policy X-Frame-Options", "global": True, "method": "default"}, + "BAD_BEHAVIOR_THRESHOLD": {"value": "10", "global": True, "method": "default"}, + "REDIRECT_HTTP_TO_HTTPS": {"value": "no", "global": True, "method": "default"}, + "REDIRECT_TO_STATUS_CODE": {"value": "301", "global": True, "method": "default"}, + "SESSIONS_IDLING_TIMEOUT": {"value": "1800", "global": True, "method": "default"}, + "USE_LETS_ENCRYPT_STAGING": {"value": "no", "global": True, "method": "default"}, + "REVERSE_PROXY_CUSTOM_HOST": {"value": "", "global": True, "method": "default"}, + "USE_MODSECURITY_CRS_PLUGINS": {"value": "yes", "global": True, "method": "default"}, + "METRICS_MAX_BLOCKED_REQUESTS": {"value": "100", "global": True, "method": "default"}, + "HTTPS_PORT": {"value": "8443", "global": True, "method": "default"}, + "LOCAL_PHP_PATH": {"value": "", "global": True, "method": "default"}, + "REAL_IP_HEADER": {"value": "X-Forwarded-For", "global": True, "method": "default"}, + "REDIS_DATABASE": {"value": "0", "global": True, "method": "default"}, + "USE_LIMIT_CONN": {"value": "yes", "global": True, "method": "default"}, + "GZIP_COMP_LEVEL": {"value": "5", "global": True, "method": "default"}, + "BACKUP_DIRECTORY": {"value": "/var/lib/bunkerweb/backups", "global": True, "method": "default"}, + "BROTLI_COMP_LEVEL": {"value": "6", "global": True, "method": "default"}, + "ANTIBOT_TIME_VALID": {"value": "86400", "global": True, "method": "default"}, + "CORS_ALLOW_HEADERS": {"value": "DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range", "global": True, "method": "default"}, + "AUTH_BASIC_PASSWORD": {"value": "changeme", "global": True, "method": "default"}, + "SECURITYTXT_EXPIRES": {"value": "", "global": True, "method": "default"}, + "CLIENT_CACHE_CONTROL": {"value": "public, max-age=15552000", "global": True, "method": "default"}, + "CUSTOM_SSL_CERT_DATA": {"value": "", "global": True, "method": "default"}, + "GREYLIST_RDNS_GLOBAL": {"value": "yes", "global": True, "method": "default"}, + "BLACKLIST_RDNS_GLOBAL": {"value": "yes", "global": True, "method": "default"}, + "REVERSE_PROXY_SSL_SNI": {"value": "no", "global": True, "method": "default"}, + "WHITELIST_RDNS_GLOBAL": {"value": "yes", "global": True, "method": "default"}, + "BAD_BEHAVIOR_COUNT_TIME": {"value": "60", "global": True, "method": "default"}, + "MODSECURITY_CRS_VERSION": {"value": "4", "global": True, "method": "default"}, + "SESSIONS_ROLLING_TIMEOUT": {"value": "3600", "global": True, "method": "default"}, + "STRICT_TRANSPORT_SECURITY": {"value": "max-age=31536000; includeSubDomains; preload", "global": True, "method": "default"}, + "AUTO_REDIRECT_HTTP_TO_HTTPS": {"value": "yes", "global": True, "method": "default"}, + "LETS_ENCRYPT_CLEAR_OLD_CERTS": {"value": "no", "global": True, "method": "default"}, + "MULTISITE": {"value": "yes", "global": True, "method": "scheduler"}, + "REDIS_SSL": {"value": "no", "global": True, "method": "default"}, + "COOKIE_FLAGS": {"value": "* HttpOnly SameSite=Lax", "global": True, "method": "default"}, + "GREYLIST_ASN": {"value": "", "global": True, "method": "default"}, + "GZIP_PROXIED": {"value": "no-cache no-store private expired auth", "global": True, "method": "default"}, + "BLACKLIST_ASN": {"value": "", "global": True, "method": "default"}, + "WHITELIST_ASN": {"value": "32934", "global": True, "method": "default"}, + "ALLOWED_METHODS": {"value": "GET|POST|HEAD", "global": True, "method": "default"}, + "AUTH_BASIC_TEXT": {"value": "Restricted area", "global": True, "method": "default"}, + "REAL_IP_RECURSIVE": {"value": "yes", "global": True, "method": "default"}, + "CUSTOM_SSL_KEY_DATA": {"value": "", "global": True, "method": "default"}, + "LIMIT_CONN_MAX_HTTP1": {"value": "10", "global": True, "method": "default"}, + "BAD_BEHAVIOR_BAN_TIME": {"value": "86400", "global": True, "method": "default"}, + "CORS_ALLOW_CREDENTIALS": {"value": "no", "global": True, "method": "default"}, + "SECURITYTXT_ENCRYPTION": {"value": "", "global": True, "method": "default"}, + "ANTIBOT_RECAPTCHA_SCORE": {"value": "0.7", "global": True, "method": "default"}, + "SESSIONS_ABSOLUTE_TIMEOUT": {"value": "86400", "global": True, "method": "default"}, + "REVERSE_PROXY_SSL_SNI_NAME": {"value": "", "global": True, "method": "default"}, + "MODSECURITY_CRS_PLUGIN_URLS": {"value": "", "global": True, "method": "default"}, + "SERVER_NAME": {"value": "app1.example.com www.example.com", "global": True, "method": "default"}, + "MAX_CLIENT_SIZE": {"value": "10m", "global": True, "method": "default"}, + "REDIS_SSL_VERIFY": {"value": "no", "global": True, "method": "default"}, + "REAL_IP_FROM_URLS": {"value": "", "global": True, "method": "default"}, + "SESSIONS_CHECK_IP": {"value": "yes", "global": True, "method": "default"}, + "REVERSE_PROXY_HOST": {"value": "dzq", "global": True, "method": "ui"}, + "CORS_EXPOSE_HEADERS": {"value": "Content-Length,Content-Range", "global": True, "method": "default"}, + "GREYLIST_USER_AGENT": {"value": "", "global": True, "method": "default"}, + "BLACKLIST_USER_AGENT": {"value": "", "global": True, "method": "default"}, + "LIMIT_CONN_MAX_HTTP2": {"value": "100", "global": True, "method": "default"}, + "WHITELIST_USER_AGENT": {"value": "", "global": True, "method": "default"}, + "COOKIE_AUTO_SECURE_FLAG": {"value": "yes", "global": True, "method": "default"}, + "ANTIBOT_RECAPTCHA_SITEKEY": {"value": "", "global": True, "method": "default"}, + "MODSECURITY_SEC_AUDIT_ENGINE": {"value": "RelevantOnly", "global": True, "method": "default"}, + "SECURITYTXT_ACKNOWLEDGEMENTS": {"value": "", "global": True, "method": "default"}, + "SERVE_FILES": {"value": "no", "global": True, "method": "scheduler"}, + "GREYLIST_URI": {"value": "", "global": True, "method": "default"}, + "BLACKLIST_URI": {"value": "", "global": True, "method": "default"}, + "REDIS_TIMEOUT": {"value": "1000", "global": True, "method": "default"}, + "WHITELIST_URI": {"value": "", "global": True, "method": "default"}, + "WORKER_PROCESSES": {"value": "auto", "global": True, "method": "default"}, + "REVERSE_PROXY_URL": {"value": "/", "global": True, "method": "default"}, + "LIMIT_CONN_MAX_STREAM": {"value": "10", "global": True, "method": "default"}, + "CONTENT_SECURITY_POLICY": {"value": "object-src 'none'; form-action 'self'; frame-ancestors 'self';", "global": True, "method": "default"}, + "ANTIBOT_RECAPTCHA_SECRET": {"value": "", "global": True, "method": "default"}, + "SESSIONS_CHECK_USER_AGENT": {"value": "yes", "global": True, "method": "default"}, + "CROSS_ORIGIN_OPENER_POLICY": {"value": "same-origin", "global": True, "method": "default"}, + "SECURITYTXT_PREFERRED_LANG": {"value": "en", "global": True, "method": "default"}, + "MODSECURITY_SEC_RULE_ENGINE": {"value": "On", "global": True, "method": "default"}, + "ROOT_FOLDER": {"value": "", "global": True, "method": "default"}, + "REDIS_USERNAME": {"value": "", "global": True, "method": "default"}, + "GREYLIST_IP_URLS": {"value": "", "global": True, "method": "default"}, + "REVERSE_PROXY_WS": {"value": "no", "global": True, "method": "default"}, + "WHITELIST_IP_URLS": {"value": "", "global": True, "method": "default"}, + "BLACKLIST_IGNORE_IP": {"value": "", "global": True, "method": "default"}, + "WORKER_RLIMIT_NOFILE": {"value": "2048", "global": True, "method": "default"}, + "SECURITYTXT_CANONICAL": {"value": "", "global": True, "method": "default"}, + "ANTIBOT_HCAPTCHA_SITEKEY": {"value": "", "global": True, "method": "default"}, + "CROSS_ORIGIN_EMBEDDER_POLICY": {"value": "require-corp", "global": True, "method": "default"}, + "MODSECURITY_SEC_AUDIT_LOG_PARTS": {"value": "ABCFHZ", "global": True, "method": "default"}, + "CONTENT_SECURITY_POLICY_REPORT_ONLY": {"value": "no", "global": True, "method": "default"}, + "SSL_PROTOCOLS": {"value": "TLSv1.2 TLSv1.3", "global": True, "method": "default"}, + "REDIS_PASSWORD": {"value": "", "global": True, "method": "default"}, + "REFERRER_POLICY": {"value": "strict-origin-when-cross-origin", "global": True, "method": "default"}, + "GREYLIST_RDNS_URLS": {"value": "", "global": True, "method": "default"}, + "SECURITYTXT_POLICY": {"value": "", "global": True, "method": "default"}, + "WORKER_CONNECTIONS": {"value": "1024", "global": True, "method": "default"}, + "WHITELIST_2024-07-27T15:51:01.203516525Z RDNS_URLS": {"value": "", "global": True, "method": "default"}, + "BLACKLIST_IGNORE_RDNS": {"value": "", "global": True, "method": "default"}, + "REVERSE_PROXY_HEADERS": {"value": "", "global": True, "method": "default"}, + "ANTIBOT_HCAPTCHA_SECRET": {"value": "", "global": True, "method": "default"}, + "CROSS_ORIGIN_RESOURCE_POLICY": {"value": "same-site", "global": True, "method": "default"}, + "HTTP2": {"value": "yes", "global": True, "method": "default"}, + "LOG_FORMAT": { + "value": '$host $remote_addr - $remote_user [$time_local] "$request" $status $body_bytes_sent "$http_referer" "$http_user_agent"', + "global": True, + "method": "default", + }, + "CORS_MAX_AGE": {"value": "86400", "global": True, "method": "default"}, + "GREYLIST_ASN_URLS": {"value": "", "global": True, "method": "default"}, + "PERMISSIONS_POLICY": { + "value": "accelerometer=(), ambient-light-sensor=(), attribution-reporting=(), autoplay=(), battery=(), bluetooth=(), browsing-topics=(), camera=(), compute-pressure=(), display-capture=(), document-domain=(), encrypted-media=(), execution-while-not-rendered=(), execution-while-out-of-viewport=(), fullscreen=(), gamepad=(), geolocation=(), gyroscope=(), hid=(), identity-credentials-get=(), idle-detection=(), local-fonts=(), magnetometer=(), microphone=(), midi=(), otp-credentials=(), payment=(), picture-in-picture=(), publickey-credentials-create=(), publickey-credentials-get=(), screen-wake-lock=(), serial=(), speaker-selection=(), storage-access=(), usb=(), web-share=(), window-management=(), xr-spatial-tracking=()", + "global": True, + "method": "default", + }, + "SECURITYTXT_HIRING": {"value": "", "global": True, "method": "default"}, + "WHITELIST_ASN_URLS": {"value": "", "global": True, "method": "default"}, + "BLACKLIST_IGNORE_ASN": {"value": "", "global": True, "method": "default"}, + "REDIS_SENTINEL_HOSTS": {"value": "", "global": True, "method": "default"}, + "ANTIBOT_TURNSTILE_SITEKEY": {"value": "", "global": True, "method": "default"}, + "REVERSE_PROXY_HEADERS_CLIENT": {"value": "", "global": True, "method": "default"}, + "HTTP3": {"value": "no", "global": True, "method": "default"}, + "LOG_LEVEL": {"value": "info", "global": True, "method": "scheduler"}, + "DISABLE_FLOC": {"value": "yes", "global": True, "method": "default"}, + "SECURITYTXT_CSAF": {"value": "", "global": True, "method": "default"}, + "CORS_DENY_REQUEST": {"value": "yes", "global": True, "method": "default"}, + "REDIS_SENTINEL_USERNAME": {"value": "", "global": True, "method": "default"}, + "REVERSE_PROXY_BUFFERING": {"value": "yes", "global": True, "method": "default"}, + "ANTIBOT_TURNSTILE_SECRET": {"value": "", "global": True, "method": "default"}, + "GREYLIST_USER_AGENT_URLS": {"value": "", "global": True, "method": "default"}, + "WHITELIST_USER_AGENT_URLS": {"value": "", "global": True, "method": "default"}, + "BLACKLIST_IGNORE_USER_AGENT": {"value": "", "global": True, "method": "default"}, + "DNS_RESOLVERS": {"value": "127.0.0.11", "global": True, "method": "default"}, + "X_FRAME_OPTIONS": {"value": "SAMEORIGIN", "global": True, "method": "default"}, + "GREYLIST_URI_URLS": {"value": "", "global": True, "method": "default"}, + "HTTP3_ALT_SVC_PORT": {"value": "443", "global": True, "method": "default"}, + "WHITELIST_URI_URLS": {"value": "", "global": True, "method": "default"}, + "BLACKLIST_IGNORE_URI": {"value": "", "global": True, "method": "default"}, + "REDIS_SENTINEL_PASSWORD": {"value": "", "global": True, "method": "default"}, + "REVERSE_PROXY_KEEPALIVE": {"value": "no", "global": True, "method": "default"}, + "LISTEN_HTTP": {"value": "yes", "global": True, "method": "default"}, + "BLACKLIST_IP_URLS": {"value": "https://www.dan.me.uk/torlist/?exit", "global": True, "method": "default"}, + "DATASTORE_MEMORY_SIZE": {"value": "64m", "global": True, "method": "default"}, + "REDIS_SENTINEL_MASTER": {"value": "", "global": True, "method": "default"}, + "X_CONTENT_TYPE_OPTIONS": {"value": "nosniff", "global": True, "method": "default"}, + "REVERSE_PROXY_AUTH_REQUEST": {"value": "", "global": True, "method": "default"}, + "X_XSS_PROTECTION": {"value": "1; mode=block", "global": True, "method": "default"}, + "BLACKLIST_RDNS_URLS": {"value": "", "global": True, "method": "default"}, + "USE_OPEN_FILE_CACHE": {"value": "no", "global": True, "method": "default"}, + "REDIS_KEEPALIVE_IDLE": {"value": "30000", "global": True, "method": "default"}, + "CACHESTORE_MEMORY_SIZE": {"value": "64m", "global": True, "method": "default"}, + "REVERSE_PROXY_AUTH_REQUEST_SIGNIN_URL": {"value": "", "global": True, "method": "default"}, + "OPEN_FILE_CACHE": {"value": "max=1000 inactive=20s", "global": True, "method": "default"}, + "BLACKLIST_ASN_URLS": {"value": "", "global": True, "method": "default"}, + "REDIS_KEEPALIVE_POOL": {"value": "10", "global": True, "method": "default"}, + "X_DNS_PREFETCH_CONTROL": {"value": "off", "global": True, "method": "default"}, + "CACHESTORE_IPC_MEMORY_SIZE": {"value": "16m", "global": True, "method": "default"}, + "REVERSE_PROXY_AUTH_REQUEST_SET": {"value": "", "global": True, "method": "default"}, + "OPEN_FILE_CACHE_ERRORS": {"value": "yes", "global": True, "method": "default"}, + "BLACKLIST_USER_AGENT_URLS": { + "value": "https://raw.githubusercontent.com/mitchellkrogza/nginx-ultimate-bad-bot-blocker/master/_generator_lists/bad-user-agents.list", + "global": True, + "method": "default", + }, + "CACHESTORE_MISS_MEMORY_SIZE": {"value": "16m", "global": True, "method": "default"}, + "REVERSE_PROXY_CONNECT_TIMEOUT": {"value": "60s", "global": True, "method": "default"}, + "BLACKLIST_URI_URLS": {"value": "", "global": True, "method": "default"}, + "OPEN_FILE_CACHE_MIN_USES": {"value": "2", "global": True, "method": "default"}, + "REVERSE_PROXY_READ_TIMEOUT": {"value": "60s", "global": True, "method": "default"}, + "CACHESTORE_LOCKS_MEMORY_SIZE": {"value": "16m", "global": True, "method": "default"}, + "USE_API": {"value": "yes", "global": True, "method": "default"}, + "OPEN_FILE_CACHE_VALID": {"value": "30s", "global": True, "method": "default"}, + "BLACKLIST_IGNORE_IP_URLS": {"value": "", "global": True, "method": "default"}, + "REVERSE_PROXY_SEND_TIMEOUT": {"value": "60s", "global": True, "method": "default"}, + "API_HTTP_PORT": {"value": "5000", "global": True, "method": "default"}, + "EXTERNAL_PLUGIN_URLS": {"value": "", "global": True, "method": "default"}, + "REVERSE_PROXY_INCLUDES": {"value": "", "global": True, "method": "default"}, + "BLACKLIST_IGNORE_RDNS_URLS": {"value": "", "global": True, "method": "default"}, + "API_LISTEN_IP": {"value": "0.0.0.0", "global": True, "method": "default"}, + "DENY_HTTP_STATUS": {"value": "403", "global": True, "method": "default"}, + "BLACKLIST_IGNORE_ASN_URLS": {"value": "", "global": True, "method": "default"}, + "REVERSE_PROXY_PASS_REQUEST_BODY": {"value": "yes", "global": True, "method": "default"}, + "API_SERVER_NAME": {"value": "bwapi", "global": True, "method": "default"}, + "USE_PROXY_CACHE": {"value": "no", "global": True, "method": "default"}, + "SEND_ANONYMOUS_REPORT": {"value": "no", "global": True, "method": "scheduler"}, + "BLACKLIST_IGNORE_USER_AGENT_URLS": {"value": "", "global": True, "method": "default"}, + "API_WHITELIST_IP": {"value": "127.0.0.0/24 10.20.30.0/24", "global": True, "method": "scheduler"}, + "PROXY_CACHE_PATH_LEVELS": {"value": "1:2", "global": True, "method": "default"}, + "BLACKLIST_IGNORE_URI_URLS": {"value": "", "global": True, "method": "default"}, + "AUTOCONF_MODE": {"value": "no", "global": True, "method": "default"}, + "PROXY_CACHE_PATH_ZONE_SIZE": {"value": "10m", "global": True, "method": "default"}, + "SWARM_MODE": {"value": "no", "global": True, "method": "default"}, + "PROXY_CACHE_PATH_PARAMS": {"value": "max_size=100m", "global": True, "method": "default"}, + "KUBERNETES_MODE": {"value": "no", "global": True, "method": "default"}, + "PROXY_CACHE_METHODS": {"value": "GET HEAD", "global": True, "method": "default"}, + "SERVER_TYPE": {"value": "http", "global": True, "method": "default"}, + "PROXY_CACHE_MIN_USES": {"value": "2", "global": True, "method": "default"}, + "LISTEN_STREAM": {"value": "yes", "global": True, "method": "default"}, + "PROXY_CACHE_KEY": {"value": "$scheme$host$request_uri", "global": True, "method": "default"}, + "PROXY_CACHE_VALID": {"value": "200=24h 301=1h 302=24h", "global": True, "method": "default"}, + "LISTEN_STREAM_PORT": {"value": "1337", "global": True, "method": "default"}, + "PROXY_NO_CACHE": {"value": "$http_pragma $http_authorization", "global": True, "method": "default"}, + "LISTEN_STREAM_PORT_SSL": {"value": "4242", "global": True, "method": "default"}, + "USE_UDP": {"value": "no", "global": True, "method": "default"}, + "PROXY_CACHE_BYPASS": {"value": "0", "global": True, "method": "default"}, + "USE_IPV6": {"value": "no", "global": True, "method": "default"}, + "IS_DRAFT": {"value": "no", "global": True, "method": "default"}, + "TIMERS_LOG_LEVEL": {"value": "debug", "global": True, "method": "default"}, + "BUNKERWEB_INSTANCES": {"value": "bunkerweb", "global": True, "method": "scheduler"}, +} + +# Service name we want the configuration for +service_name = "app1.example.com" +# Mix of global and service settings +total_config = { + "ERRORS": {"value": "", "global": True, "method": "default"}, + "USE_UI": {"value": "no", "global": True, "method": "default"}, + "USE_CORS": {"value": "no", "global": True, "method": "default"}, + "USE_GZIP": {"value": "yes", "global": True, "method": "scheduler"}, + "USE_DNSBL": {"value": "yes", "global": True, "method": "default"}, + "USE_REDIS": {"value": "no", "global": True, "method": "default"}, + "IS_LOADING": {"value": "no", "global": True, "method": "default"}, + "REMOTE_PHP": {"value": "", "global": True, "method": "default"}, + "USE_BACKUP": {"value": "yes", "global": True, "method": "default"}, + "USE_BROTLI": {"value": "no", "global": True, "method": "default"}, + "INJECT_BODY": {"value": "", "global": True, "method": "default"}, + "REDIRECT_TO": {"value": "", "global": True, "method": "default"}, + "USE_ANTIBOT": {"value": "no", "global": True, "method": "default"}, + "USE_METRICS": {"value": "yes", "global": True, "method": "default"}, + "USE_REAL_IP": {"value": "no", "global": True, "method": "default"}, + "DATABASE_URI": {"value": "sqlite:////var/lib/bunkerweb/db.sqlite3", "global": True, "method": "default"}, + "USE_GREYLIST": {"value": "no", "global": True, "method": "default"}, + "CUSTOM_HEADER": {"value": "", "global": True, "method": "default"}, + "USE_BLACKLIST": {"value": "no", "global": True, "method": "scheduler"}, + "USE_BUNKERNET": {"value": "no", "global": True, "method": "scheduler"}, + "USE_LIMIT_REQ": {"value": "yes", "global": True, "method": "default"}, + "USE_WHITELIST": {"value": "no", "global": True, "method": "scheduler"}, + "USE_AUTH_BASIC": {"value": "no", "global": True, "method": "default"}, + "USE_CUSTOM_SSL": {"value": "no", "global": True, "method": "default"}, + "PRO_LICENSE_KEY": {"value": "", "global": True, "method": "default"}, + "SESSIONS_SECRET": {"value": "random", "global": True, "method": "default"}, + "USE_MODSECURITY": {"value": "yes", "global": True, "method": "default"}, + "USE_SECURITYTXT": {"value": "no", "global": True, "method": "default"}, + "USE_BAD_BEHAVIOR": {"value": "yes", "global": True, "method": "default"}, + "USE_CLIENT_CACHE": {"value": "yes", "global": True, "method": "scheduler"}, + "USE_REVERSE_SCAN": {"value": "no", "global": True, "method": "default"}, + "AUTO_LETS_ENCRYPT": {"value": "no", "global": True, "method": "default"}, + "BLACKLIST_COUNTRY": {"value": "", "global": True, "method": "default"}, + "USE_REVERSE_PROXY": {"value": "no", "global": True, "method": "default"}, + "DISABLE_DEFAULT_SERVER": {"value": "yes", "global": True, "method": "scheduler"}, + "GENERATE_SELF_SIGNED_SSL": {"value": "no", "global": True, "method": "default"}, + "UI_HOST": {"value": "", "global": True, "method": "default"}, + "DNSBL_LIST": {"value": "bl.blocklist.de problems.dnsbl.sorbs.net sbl.spamhaus.org xbl.spamhaus.org", "global": True, "method": "default"}, + "GZIP_TYPES": { + "value": "application/atom+xml application/javascript application/json application/rss+xml application/vnd.ms-fontobject application/x-font-opentype application/x-font-truetype application/x-font-ttf application/x-javascript application/xhtml+xml application/xml font/eot font/opentype font/otf font/truetype image/svg+xml image/vnd.microsoft.icon image/x-icon image/x-win-bitmap text/css text/javascript text/plain text/xml", + "global": True, + "method": "default", + }, + "REDIS_HOST": {"value": "", "global": True, "method": "default"}, + "ANTIBOT_URI": {"value": "/challenge", "global": True, "method": "default"}, + "GREYLIST_IP": {"value": "", "global": True, "method": "default"}, + "BLACKLIST_IP": {"value": "", "global": True, "method": "default"}, + "BROTLI_TYPES": { + "value": "application/atom+xml application/javascript application/json application/rss+xml application/vnd.ms-fontobject application/x-font-opentype application/x-font-truetype application/x-font-ttf application/x-javascript application/xhtml+xml application/xml font/eot font/opentype font/otf font/truetype image/svg+xml image/vnd.microsoft.icon image/x-icon image/x-win-bitmap text/css text/javascript text/plain text/xml", + "global": True, + "method": "default", + }, + "NGINX_PREFIX": {"value": "/etc/nginx/", "global": True, "method": "default"}, + "WHITELIST_IP": { + "value": "20.191.45.212 40.88.21.235 40.76.173.151 40.76.163.7 20.185.79.47 52.142.26.175 20.185.79.15 52.142.24.149 40.76.162.208 40.76.163.23 40.76.162.191 40.76.162.247", + "global": True, + "method": "default", + }, + "LIMIT_REQ_URL": {"value": "/", "global": True, "method": "default"}, + "SESSIONS_NAME": {"value": "random", "global": True, "method": "default"}, + "REMOVE_HEADERS": {"value": "Server Expect-CT X-Powered-By X-AspNet-Version X-AspNetMvc-Version Public-Key-Pins", "global": True, "method": "default"}, + "BACKUP_SCHEDULE": {"value": "daily", "global": True, "method": "default"}, + "CUSTOM_SSL_CERT": {"value": "", "global": True, "method": "default"}, + "REMOTE_PHP_PATH": {"value": "", "global": True, "method": "default"}, + "SECURITYTXT_URI": {"value": "/.well-known/security.txt", "global": True, "method": "default"}, + "BUNKERNET_SERVER": {"value": "https://api.bunkerweb.io", "global": True, "method": "default"}, + "CORS_ALLOW_ORIGIN": {"value": "self", "global": True, "method": "default"}, + "WHITELIST_COUNTRY": {"value": "", "global": True, "method": "default"}, + "EMAIL_LETS_ENCRYPT": {"value": "", "global": True, "method": "default"}, + "REVERSE_SCAN_PORTS": {"value": "22 80 443 3128 8000 8080", "global": True, "method": "default"}, + "USE_PROXY_PROTOCOL": {"value": "no", "global": True, "method": "default"}, + "AUTH_BASIC_LOCATION": {"value": "sitewide", "global": True, "method": "default"}, + "METRICS_MEMORY_SIZE": {"value": "16m", "global": True, "method": "default"}, + "USE_MODSECURITY_CRS": {"value": "yes", "global": True, "method": "default"}, + "DATABASE_URI_READONLY": {"value": "", "global": True, "method": "default"}, + "SELF_SIGNED_SSL_EXPIRY": {"value": "365", "global": True, "method": "default"}, + "CLIENT_CACHE_EXTENSIONS": {"value": "jpg|jpeg|png|bmp|ico|svg|tif|css|js|otf|ttf|eot|woff|woff2", "global": True, "method": "default"}, + "INTERCEPTED_ERROR_CODES": {"value": "400 401 403 404 405 413 429 500 501 502 503 504", "global": True, "method": "default"}, + "REDIRECT_TO_REQUEST_URI": {"value": "no", "global": True, "method": "default"}, + "BAD_BEHAVIOR_STATUS_CODES": {"value": "400 401 403 404 405 429 444", "global": True, "method": "default"}, + "REVERSE_PROXY_INTERCEPT_ERRORS": {"value": "yes", "global": True, "method": "default"}, + "DISABLE_DEFAULT_SERVER_STRICT_SNI": {"value": "no", "global": True, "method": "default"}, + "HTTP_PORT": {"value": "8080", "global": True, "method": "default"}, + "LOCAL_PHP": {"value": "", "global": True, "method": "default"}, + "REDIS_PORT": {"value": "6379", "global": True, "method": "default"}, + "REAL_IP_FROM": {"value": "192.168.0.0/16 172.16.0.0/12 10.0.0.0/8", "global": True, "method": "default"}, + "GREYLIST_RDNS": {"value": "", "global": True, "method": "default"}, + "BLACKLIST_RDNS": {"value": ".shodan.io .censys.io", "global": True, "method": "default"}, + "CUSTOM_SSL_KEY": {"value": "", "global": True, "method": "default"}, + "LIMIT_REQ_RATE": {"value": "2r/s", "global": True, "method": "default"}, + "WHITELIST_RDNS": { + "value": ".google.com .googlebot.com .yandex.ru .yandex.net .yandex.com .search.msn.com .baidu.com .baidu.jp .crawl.yahoo.net .fwd.linkedin.com .twitter.com .twttr.com .discord.com", + "global": True, + "method": "default", + }, + "AUTH_BASIC_USER": {"value": "changeme", "global": True, "method": "default"}, + "BACKUP_ROTATION": {"value": "7", "global": True, "method": "default"}, + "GZIP_MIN_LENGTH": {"value": "1000", "global": True, "method": "default"}, + "BROTLI_MIN_LENGTH": {"value": "1000", "global": True, "method": "default"}, + "CLIENT_CACHE_ETAG": {"value": "yes", "global": True, "method": "default"}, + "CORS_ALLOW_METHODS": {"value": "GET, POST, OPTIONS", "global": True, "method": "default"}, + "DATABASE_LOG_LEVEL": {"value": "warning", "global": True, "method": "default"}, + "SECURITYTXT_CONTACT": {"value": "", "global": True, "method": "default"}, + "ANTIBOT_TIME_RESOLVE": {"value": "60", "global": True, "method": "default"}, + "REVERSE_SCAN_TIMEOUT": {"value": "500", "global": True, "method": "default"}, + "SELF_SIGNED_SSL_SUBJ": {"value": "/CN=www.example.com/", "global": True, "method": "default"}, + "KEEP_UPSTREAM_HEADERS": {"value": "Content-Security-Policy Permissions-Policy X-Frame-Options", "global": True, "method": "default"}, + "BAD_BEHAVIOR_THRESHOLD": {"value": "10", "global": True, "method": "default"}, + "REDIRECT_HTTP_TO_HTTPS": {"value": "no", "global": True, "method": "default"}, + "REDIRECT_TO_STATUS_CODE": {"value": "301", "global": True, "method": "default"}, + "SESSIONS_IDLING_TIMEOUT": {"value": "1800", "global": True, "method": "default"}, + "USE_LETS_ENCRYPT_STAGING": {"value": "no", "global": True, "method": "default"}, + "REVERSE_PROXY_CUSTOM_HOST": {"value": "", "global": True, "method": "default"}, + "USE_MODSECURITY_CRS_PLUGINS": {"value": "yes", "global": True, "method": "default"}, + "METRICS_MAX_BLOCKED_REQUESTS": {"value": "100", "global": True, "method": "default"}, + "HTTPS_PORT": {"value": "8443", "global": True, "method": "default"}, + "LOCAL_PHP_PATH": {"value": "", "global": True, "method": "default"}, + "REAL_IP_HEADER": {"value": "X-Forwarded-For", "global": True, "method": "default"}, + "REDIS_DATABASE": {"value": "0", "global": True, "method": "default"}, + "USE_LIMIT_CONN": {"value": "yes", "global": True, "method": "default"}, + "GZIP_COMP_LEVEL": {"value": "5", "global": True, "method": "default"}, + "BACKUP_DIRECTORY": {"value": "/var/lib/bunkerweb/backups", "global": True, "method": "default"}, + "BROTLI_COMP_LEVEL": {"value": "6", "global": True, "method": "default"}, + "ANTIBOT_TIME_VALID": {"value": "86400", "global": True, "method": "default"}, + "CORS_ALLOW_HEADERS": {"value": "DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range", "global": True, "method": "default"}, + "AUTH_BASIC_PASSWORD": {"value": "changeme", "global": True, "method": "default"}, + "SECURITYTXT_EXPIRES": {"value": "", "global": True, "method": "default"}, + "CLIENT_CACHE_CONTROL": {"value": "public, max-age=15552000", "global": True, "method": "default"}, + "CUSTOM_SSL_CERT_DATA": {"value": "", "global": True, "method": "default"}, + "GREYLIST_RDNS_GLOBAL": {"value": "yes", "global": True, "method": "default"}, + "BLACKLIST_RDNS_GLOBAL": {"value": "yes", "global": True, "method": "default"}, + "REVERSE_PROXY_SSL_SNI": {"value": "no", "global": True, "method": "default"}, + "WHITELIST_RDNS_GLOBAL": {"value": "yes", "global": True, "method": "default"}, + "BAD_BEHAVIOR_COUNT_TIME": {"value": "60", "global": True, "method": "default"}, + "MODSECURITY_CRS_VERSION": {"value": "4", "global": True, "method": "default"}, + "SESSIONS_ROLLING_TIMEOUT": {"value": "3600", "global": True, "method": "default"}, + "STRICT_TRANSPORT_SECURITY": {"value": "max-age=31536000; includeSubDomains; preload", "global": True, "method": "default"}, + "AUTO_REDIRECT_HTTP_TO_HTTPS": {"value": "yes", "global": True, "method": "default"}, + "LETS_ENCRYPT_CLEAR_OLD_CERTS": {"value": "no", "global": True, "method": "default"}, + "MULTISITE": {"value": "yes", "global": True, "method": "scheduler"}, + "REDIS_SSL": {"value": "no", "global": True, "method": "default"}, + "COOKIE_FLAGS": {"value": "* HttpOnly SameSite=Lax", "global": True, "method": "default"}, + "GREYLIST_ASN": {"value": "", "global": True, "method": "default"}, + "GZIP_PROXIED": {"value": "no-cache no-store private expired auth", "global": True, "method": "default"}, + "BLACKLIST_ASN": {"value": "", "global": True, "method": "default"}, + "WHITELIST_ASN": {"value": "32934", "global": True, "method": "default"}, + "ALLOWED_METHODS": {"value": "GET|POST|HEAD", "global": True, "method": "default"}, + "AUTH_BASIC_TEXT": {"value": "Restricted area", "global": True, "method": "default"}, + "REAL_IP_RECURSIVE": {"value": "yes", "global": True, "method": "default"}, + "CUSTOM_SSL_KEY_DATA": {"value": "", "global": True, "method": "default"}, + "LIMIT_CONN_MAX_HTTP1": {"value": "10", "global": True, "method": "default"}, + "BAD_BEHAVIOR_BAN_TIME": {"value": "86400", "global": True, "method": "default"}, + "CORS_ALLOW_CREDENTIALS": {"value": "no", "global": True, "method": "default"}, + "SECURITYTXT_ENCRYPTION": {"value": "", "global": True, "method": "default"}, + "ANTIBOT_RECAPTCHA_SCORE": {"value": "0.7", "global": True, "method": "default"}, + "SESSIONS_ABSOLUTE_TIMEOUT": {"value": "86400", "global": True, "method": "default"}, + "REVERSE_PROXY_SSL_SNI_NAME": {"value": "", "global": True, "method": "default"}, + "MODSECURITY_CRS_PLUGIN_URLS": {"value": "", "global": True, "method": "default"}, + "SERVER_NAME": {"value": "app1.example.com www.example.com", "global": True, "method": "default"}, + "MAX_CLIENT_SIZE": {"value": "10m", "global": True, "method": "default"}, + "REDIS_SSL_VERIFY": {"value": "no", "global": True, "method": "default"}, + "REAL_IP_FROM_URLS": {"value": "", "global": True, "method": "default"}, + "SESSIONS_CHECK_IP": {"value": "yes", "global": True, "method": "default"}, + "REVERSE_PROXY_HOST": {"value": "", "global": True, "method": "default"}, + "CORS_EXPOSE_HEADERS": {"value": "Content-Length,Content-Range", "global": True, "method": "default"}, + "GREYLIST_USER_AGENT": {"value": "", "global": True, "method": "default"}, + "BLACKLIST_USER_AGENT": {"value": "", "global": True, "method": "default"}, + "LIMIT_CONN_MAX_HTTP2": {"value": "100", "global": True, "method": "default"}, + "WHITELIST_USER_AGENT": {"value": "", "global": True, "method": "default"}, + "COOKIE_AUTO_SECURE_FLAG": {"value": "yes", "global": True, "method": "default"}, + "ANTIBOT_RECAPTCHA_SITEKEY": {"value": "", "global": True, "method": "default"}, + "MODSECURITY_SEC_AUDIT_ENGINE": {"value": "RelevantOnly", "global": True, "method": "default"}, + "SECURITYTXT_ACKNOWLEDGEMENTS": {"value": "", "global": True, "method": "default"}, + "SERVE_FILES": {"value": "no", "global": True, "method": "scheduler"}, + "GREYLIST_URI": {"value": "", "global": True, "method": "default"}, + "BLACKLIST_URI": {"value": "", "global": True, "method": "default"}, + "REDIS_TIMEOUT": {"value": "1000", "global": True, "method": "default"}, + "WHITELIST_URI": {"value": "", "global": True, "method": "default"}, + "WORKER_PROCESSES": {"value": "auto", "global": True, "method": "default"}, + "REVERSE_PROXY_URL": {"value": "/", "global": True, "method": "default"}, + "LIMIT_CONN_MAX_STREAM": {"value": "10", "global": True, "method": "default"}, + "CONTENT_SECURITY_POLICY": {"value": "object-src 'none'; form-action 'self'; frame-ancestors 'self';", "global": True, "method": "default"}, + "ANTIBOT_RECAPTCHA_SECRET": {"value": "", "global": True, "method": "default"}, + "SESSIONS_CHECK_USER_AGENT": {"value": "yes", "global": True, "method": "default"}, + "CROSS_ORIGIN_OPENER_POLICY": {"value": "same-origin", "global": True, "method": "default"}, + "SECURITYTXT_PREFERRED_LANG": {"value": "en", "global": True, "method": "default"}, + "MODSECURITY_SEC_RULE_ENGINE": {"value": "On", "global": True, "method": "default"}, + "ROOT_FOLDER": {"value": "", "global": True, "method": "default"}, + "REDIS_USERNAME": {"value": "", "global": True, "method": "default"}, + "GREYLIST_IP_URLS": {"value": "", "global": True, "method": "default"}, + "REVERSE_PROXY_WS": {"value": "no", "global": True, "method": "default"}, + "WHITELIST_IP_URLS": {"value": "", "global": True, "method": "default"}, + "BLACKLIST_IGNORE_IP": {"value": "", "global": True, "method": "default"}, + "WORKER_RLIMIT_NOFILE": {"value": "2048", "global": True, "method": "default"}, + "SECURITYTXT_CANONICAL": {"value": "", "global": True, "method": "default"}, + "ANTIBOT_HCAPTCHA_SITEKEY": {"value": "", "global": True, "method": "default"}, + "CROSS_ORIGIN_EMBEDDER_POLICY": {"value": "require-corp", "global": True, "method": "default"}, + "MODSECURITY_SEC_AUDIT_LOG_PARTS": {"value": "ABCFHZ", "global": True, "method": "default"}, + "CONTENT_SECURITY_POLICY_REPORT_ONLY": {"value": "no", "global": True, "method": "default"}, + "SSL_PROTOCOLS": {"value": "TLSv1.2 TLSv1.3", "global": True, "method": "default"}, + "REDIS_PASSWORD": {"value": "", "global": True, "method": "default"}, + "REFERRER_POLICY": {"value": "strict-origin-when-cross-origin", "global": True, "method": "default"}, + "GREYLIST_RDNS_URLS": {"value": "", "global": True, "method": "default"}, + "SECURITYTXT_POLICY": {"value": "", "global": True, "method": "default"}, + "WORKER_CONNECTIONS": {"value": "1024", "global": True, "method": "default"}, + "WHITELIS2024-07-31T13:58:29.679295487Z T_RDNS_URLS": {"value": "", "global": True, "method": "default"}, + "BLACKLIST_IGNORE_RDNS": {"value": "", "global": True, "method": "default"}, + "REVERSE_PROXY_HEADERS": {"value": "", "global": True, "method": "default"}, + "ANTIBOT_HCAPTCHA_SECRET": {"value": "", "global": True, "method": "default"}, + "CROSS_ORIGIN_RESOURCE_POLICY": {"value": "same-site", "global": True, "method": "default"}, + "HTTP2": {"value": "yes", "global": True, "method": "default"}, + "LOG_FORMAT": { + "value": '$host $remote_addr - $remote_user [$time_local] "$request" $status $body_bytes_sent "$http_referer" "$http_user_agent"', + "global": True, + "method": "default", + }, + "CORS_MAX_AGE": {"value": "86400", "global": True, "method": "default"}, + "GREYLIST_ASN_URLS": {"value": "", "global": True, "method": "default"}, + "PERMISSIONS_POLICY": { + "value": "accelerometer=(), ambient-light-sensor=(), attribution-reporting=(), autoplay=(), battery=(), bluetooth=(), browsing-topics=(), camera=(), compute-pressure=(), display-capture=(), document-domain=(), encrypted-media=(), execution-while-not-rendered=(), execution-while-out-of-viewport=(), fullscreen=(), gamepad=(), geolocation=(), gyroscope=(), hid=(), identity-credentials-get=(), idle-detection=(), local-fonts=(), magnetometer=(), microphone=(), midi=(), otp-credentials=(), payment=(), picture-in-picture=(), publickey-credentials-create=(), publickey-credentials-get=(), screen-wake-lock=(), serial=(), speaker-selection=(), storage-access=(), usb=(), web-share=(), window-management=(), xr-spatial-tracking=()", + "global": True, + "method": "default", + }, + "SECURITYTXT_HIRING": {"value": "", "global": True, "method": "default"}, + "WHITELIST_ASN_URLS": {"value": "", "global": True, "method": "default"}, + "BLACKLIST_IGNORE_ASN": {"value": "", "global": True, "method": "default"}, + "REDIS_SENTINEL_HOSTS": {"value": "", "global": True, "method": "default"}, + "ANTIBOT_TURNSTILE_SITEKEY": {"value": "", "global": True, "method": "default"}, + "REVERSE_PROXY_HEADERS_CLIENT": {"value": "", "global": True, "method": "default"}, + "HTTP3": {"value": "no", "global": True, "method": "default"}, + "LOG_LEVEL": {"value": "info", "global": True, "method": "scheduler"}, + "DISABLE_FLOC": {"value": "yes", "global": True, "method": "default"}, + "SECURITYTXT_CSAF": {"value": "", "global": True, "method": "default"}, + "CORS_DENY_REQUEST": {"value": "yes", "global": True, "method": "default"}, + "REDIS_SENTINEL_USERNAME": {"value": "", "global": True, "method": "default"}, + "REVERSE_PROXY_BUFFERING": {"value": "yes", "global": True, "method": "default"}, + "ANTIBOT_TURNSTILE_SECRET": {"value": "", "global": True, "method": "default"}, + "GREYLIST_USER_AGENT_URLS": {"value": "", "global": True, "method": "default"}, + "WHITELIST_USER_AGENT_URLS": {"value": "", "global": True, "method": "default"}, + "BLACKLIST_IGNORE_USER_AGENT": {"value": "", "global": True, "method": "default"}, + "DNS_RESOLVERS": {"value": "127.0.0.11", "global": True, "method": "default"}, + "X_FRAME_OPTIONS": {"value": "SAMEORIGIN", "global": True, "method": "default"}, + "GREYLIST_URI_URLS": {"value": "", "global": True, "method": "default"}, + "HTTP3_ALT_SVC_PORT": {"value": "443", "global": True, "method": "default"}, + "WHITELIST_URI_URLS": {"value": "", "global": True, "method": "default"}, + "BLACKLIST_IGNORE_URI": {"value": "", "global": True, "method": "default"}, + "REDIS_SENTINEL_PASSWORD": {"value": "", "global": True, "method": "default"}, + "REVERSE_PROXY_KEEPALIVE": {"value": "no", "global": True, "method": "default"}, + "LISTEN_HTTP": {"value": "yes", "global": True, "method": "default"}, + "BLACKLIST_IP_URLS": {"value": "https://www.dan.me.uk/torlist/?exit", "global": True, "method": "default"}, + "DATASTORE_MEMORY_SIZE": {"value": "64m", "global": True, "method": "default"}, + "REDIS_SENTINEL_MASTER": {"value": "", "global": True, "method": "default"}, + "X_CONTENT_TYPE_OPTIONS": {"value": "nosniff", "global": True, "method": "default"}, + "REVERSE_PROXY_AUTH_REQUEST": {"value": "", "global": True, "method": "default"}, + "X_XSS_PROTECTION": {"value": "1; mode=block", "global": True, "method": "default"}, + "BLACKLIST_RDNS_URLS": {"value": "", "global": True, "method": "default"}, + "USE_OPEN_FILE_CACHE": {"value": "no", "global": True, "method": "default"}, + "REDIS_KEEPALIVE_IDLE": {"value": "30000", "global": True, "method": "default"}, + "CACHESTORE_MEMORY_SIZE": {"value": "64m", "global": True, "method": "default"}, + "REVERSE_PROXY_AUTH_REQUEST_SIGNIN_URL": {"value": "", "global": True, "method": "default"}, + "OPEN_FILE_CACHE": {"value": "max=1000 inactive=20s", "global": True, "method": "default"}, + "BLACKLIST_ASN_URLS": {"value": "", "global": True, "method": "default"}, + "REDIS_KEEPALIVE_POOL": {"value": "10", "global": True, "method": "default"}, + "X_DNS_PREFETCH_CONTROL": {"value": "off", "global": True, "method": "default"}, + "CACHESTORE_IPC_MEMORY_SIZE": {"value": "16m", "global": True, "method": "default"}, + "REVERSE_PROXY_AUTH_REQUEST_SET": {"value": "", "global": True, "method": "default"}, + "OPEN_FILE_CACHE_ERRORS": {"value": "yes", "global": True, "method": "default"}, + "BLACKLIST_USER_AGENT_URLS": { + "value": "https://raw.githubusercontent.com/mitchellkrogza/nginx-ultimate-bad-bot-blocker/master/_generator_lists/bad-user-agents.list", + "global": True, + "method": "default", + }, + "CACHESTORE_MISS_MEMORY_SIZE": {"value": "16m", "global": True, "method": "default"}, + "REVERSE_PROXY_CONNECT_TIMEOUT": {"value": "60s", "global": True, "method": "default"}, + "BLACKLIST_URI_URLS": {"value": "", "global": True, "method": "default"}, + "OPEN_FILE_CACHE_MIN_USES": {"value": "2", "global": True, "method": "default"}, + "REVERSE_PROXY_READ_TIMEOUT": {"value": "60s", "global": True, "method": "default"}, + "CACHESTORE_LOCKS_MEMORY_SIZE": {"value": "16m", "global": True, "method": "default"}, + "USE_API": {"value": "yes", "global": True, "method": "default"}, + "OPEN_FILE_CACHE_VALID": {"value": "30s", "global": True, "method": "default"}, + "BLACKLIST_IGNORE_IP_URLS": {"value": "", "global": True, "method": "default"}, + "REVERSE_PROXY_SEND_TIMEOUT": {"value": "60s", "global": True, "method": "default"}, + "API_HTTP_PORT": {"value": "5000", "global": True, "method": "default"}, + "EXTERNAL_PLUGIN_URLS": {"value": "", "global": True, "method": "default"}, + "REVERSE_PROXY_INCLUDES": {"value": "", "global": True, "method": "default"}, + "BLACKLIST_IGNORE_RDNS_URLS": {"value": "", "global": True, "method": "default"}, + "API_LISTEN_IP": {"value": "0.0.0.0", "global": True, "method": "default"}, + "DENY_HTTP_STATUS": {"value": "403", "global": True, "method": "default"}, + "BLACKLIST_IGNORE_ASN_URLS": {"value": "", "global": True, "method": "default"}, + "REVERSE_PROXY_PASS_REQUEST_BODY": {"value": "yes", "global": True, "method": "default"}, + "API_SERVER_NAME": {"value": "bwapi", "global": True, "method": "default"}, + "USE_PROXY_CACHE": {"value": "no", "global": True, "method": "default"}, + "SEND_ANONYMOUS_REPORT": {"value": "no", "global": True, "method": "scheduler"}, + "BLACKLIST_IGNORE_USER_AGENT_URLS": {"value": "", "global": True, "method": "default"}, + "API_WHITELIST_IP": {"value": "127.0.0.0/24 10.20.30.0/24", "global": True, "method": "scheduler"}, + "PROXY_CACHE_PATH_LEVELS": {"value": "1:2", "global": True, "method": "default"}, + "BLACKLIST_IGNORE_URI_URLS": {"value": "", "global": True, "method": "default"}, + "AUTOCONF_MODE": {"value": "no", "global": True, "method": "default"}, + "PROXY_CACHE_PATH_ZONE_SIZE": {"value": "10m", "global": True, "method": "default"}, + "SWARM_MODE": {"value": "no", "global": True, "method": "default"}, + "PROXY_CACHE_PATH_PARAMS": {"value": "max_size=100m", "global": True, "method": "default"}, + "KUBERNETES_MODE": {"value": "no", "global": True, "method": "default"}, + "PROXY_CACHE_METHODS": {"value": "GET HEAD", "global": True, "method": "default"}, + "SERVER_TYPE": {"value": "http", "global": True, "method": "default"}, + "PROXY_CACHE_MIN_USES": {"value": "2", "global": True, "method": "default"}, + "LISTEN_STREAM": {"value": "yes", "global": True, "method": "default"}, + "PROXY_CACHE_KEY": {"value": "$scheme$host$request_uri", "global": True, "method": "default"}, + "PROXY_CACHE_VALID": {"value": "200=24h 301=1h 302=24h", "global": True, "method": "default"}, + "LISTEN_STREAM_PORT": {"value": "1337", "global": True, "method": "default"}, + "PROXY_NO_CACHE": {"value": "$http_pragma $http_authorization", "global": True, "method": "default"}, + "LISTEN_STREAM_PORT_SSL": {"value": "4242", "global": True, "method": "default"}, + "USE_UDP": {"value": "no", "global": True, "method": "default"}, + "PROXY_CACHE_BYPASS": {"value": "0", "global": True, "method": "default"}, + "USE_IPV6": {"value": "no", "global": True, "method": "default"}, + "IS_DRAFT": {"value": "no", "global": True, "method": "default"}, + "TIMERS_LOG_LEVEL": {"value": "debug", "global": True, "method": "default"}, + "BUNKERWEB_INSTANCES": {"value": "bunkerweb", "global": True, "method": "scheduler"}, + "app1.example.com_BLACKLIST_IGNORE_IP": {"value": "", "global": True, "method": "default"}, + "app1.example.com_LISTEN_STREAM_PORT": {"value": "1337", "global": True, "method": "default"}, + "app1.example.com_USE_SECURITYTXT": {"value": "no", "global": True, "method": "default"}, + "app1.example.com_USE_PROXY_PROTOCOL": {"value": "no", "global": True, "method": "default"}, + "app1.example.com_USE_UI": {"value": "no", "global": True, "method": "default"}, + "app1.example.com_GZIP_PROXIED": {"value": "no-cache no-store private expired auth", "global": True, "method": "default"}, + "app1.example.com_COOKIE_AUTO_SECURE_FLAG": {"value": "yes", "global": True, "method": "default"}, + "app1.example.com_BLACKLIST_URI": {"value": "", "global": True, "method": "default"}, + "app1.example.com_SECURITYTXT_POLICY": {"value": "", "global": True, "method": "default"}, + "app1.example.com_SERVER_TYPE": {"value": "http", "global": True, "method": "default"}, + "app1.example.com_SECURITYTXT_CANONICAL": {"value": "", "global": True, "method": "default"}, + "app1.example.com_REVERSE_PROXY_SSL_SNI": {"value": "no", "global": True, "method": "default"}, + "app1.example.com_USE_AUTH_BASIC": {"value": "no", "global": True, "method": "default"}, + "app1.example.com_REMOTE_PHP": {"value": "", "global": True, "method": "default"}, + "app1.example.com_USE_PROXY_CACHE": {"value": "no", "global": True, "method": "default"}, + "app1.example.com_USE_UDP": {"value": "no", "global": True, "method": "default"}, + "app1.example.com_MODSECURITY_SEC_AUDIT_LOG_PARTS": {"value": "ABCFHZ", "global": True, "method": "default"}, + "app1.example.com_USE_OPEN_FILE_CACHE": {"value": "no", "global": True, "method": "default"}, + "app1.example.com_USE_LIMIT_CONN": {"value": "yes", "global": True, "method": "default"}, + "app1.example.com_EMAIL_LETS_ENCRYPT": {"value": "", "global": True, "method": "default"}, + "app1.example.com_LIMIT_REQ_RATE": {"value": "2r/s", "global": True, "method": "default"}, + "app1.example.com_AUTH_BASIC_PASSWORD": {"value": "changeme", "global": True, "method": "default"}, + "app1.example.com_SECURITYTXT_ACKNOWLEDGEMENTS": {"value": "", "global": True, "method": "default"}, + "app1.example.com_ANTIBOT_HCAPTCHA_SITEKEY": {"value": "", "global": True, "method": "default"}, + "app1.example.com_REVERSE_PROXY_HEADERS_CLIENT": {"value": "", "global": True, "method": "default"}, + "app1.example.com_REVERSE_PROXY_CONNECT_TIMEOUT": {"value": "60s", "global": True, "method": "default"}, + "app1.example.com_PROXY_CACHE_METHODS": {"value": "GET HEAD", "global": True, "method": "default"}, + "app1.example.com_GZIP_TYPES": { + "value": "application/atom+xml application/javascript application/json application/rss+xml application/vnd.ms-fontobject application/x-font-opentype application/x-font-truetype application/x-font-ttf application/x-javascript application/xhtml+xml application/xml font/eot font/opentype font/otf font/truetype image/svg+xml image/vnd.microsoft.icon image/x-icon image/x-win-bitmap text/css text/javascript text/plain text/xml", + "global": True, + "method": "default", + }, + "app1.example.com_LISTEN_STREAM": {"value": "yes", "global": True, "method": "default"}, + "app1.example.com_REVERSE_PROXY_CUSTOM_HOST": {"value": "", "global": True, "method": "default"}, + "app1.example.com_CUSTOM_HEADER": {"value": "", "global": True, "method": "default"}, + "app1.example.com_OPEN_FILE_CACHE_ERRORS": {"value": "yes", "global": True, "method": "default"}, + "app1.example.com_LIMIT_REQ_URL": {"value": "/", "global": True, "method": "default"}, + "app1.example.com_LIMIT_CONN_MAX_HTTP2": {"value": "100", "global": True, "method": "default"}, + "app1.example.com_AUTH_BASIC_TEXT": {"value": "Restricted area", "global": True, "method": "default"}, + "app1.example.com_ANTIBOT_TURNSTILE_SITEKEY": {"value": "", "global": True, "method": "default"}, + "app1.example.com_SECURITYTXT_HIRING": {"value": "", "global": True, "method": "default"}, + "app1.example.com_BLACKLIST_IP": {"value": "", "global": True, "method": "default"}, + "app1.example.com_USE_CUSTOM_SSL": {"value": "no", "global": True, "method": "default"}, + "app1.example.com_GREYLIST_USER_AGENT": {"value": "", "global": True, "method": "default"}, + "app1.example.com_OPEN_FILE_CACHE_MIN_USES": {"value": "2", "global": True, "method": "default"}, + "app1.example.com_MODSECURITY_CRS_VERSION": {"value": "4", "global": True, "method": "default"}, + "app1.example.com_CROSS_ORIGIN_OPENER_POLICY": {"value": "same-origin", "global": True, "method": "default"}, + "app1.example.com_CONTENT_SECURITY_POLICY_REPORT_ONLY": {"value": "no", "global": True, "method": "default"}, + "app1.example.com_CLIENT_CACHE_ETAG": {"value": "yes", "global": True, "method": "default"}, + "app1.example.com_PROXY_CACHE_MIN_USES": {"value": "2", "global": True, "method": "default"}, + "app1.example.com_REDIRECT_TO": {"value": "", "global": True, "method": "default"}, + "app1.example.com_CLIENT_CACHE_CONTROL": {"value": "public, max-age=15552000", "global": True, "method": "default"}, + "app1.example.com_LISTEN_HTTP": {"value": "yes", "global": True, "method": "default"}, + "app1.example.com_USE_REVERSE_SCAN": {"value": "no", "global": True, "method": "default"}, + "app1.example.com_CROSS_ORIGIN_RESOURCE_POLICY": {"value": "same-site", "global": True, "method": "default"}, + "app1.example.com_PROXY_NO_CACHE": {"value": "$http_pragma $http_authorization", "global": True, "method": "default"}, + "app1.example.com_LOCAL_PHP": {"value": "", "global": True, "method": "default"}, + "app1.example.com_INTERCEPTED_ERROR_CODES": {"value": "400 401 403 404 405 413 429 500 501 502 503 504", "global": True, "method": "default"}, + "app1.example.com_REVERSE_PROXY_AUTH_REQUEST": {"value": "", "global": True, "method": "default"}, + "app1.example.com_BLACKLIST_RDNS_GLOBAL": {"value": "yes", "global": True, "method": "default"}, + "app1.example.com_CORS_DENY_REQUEST": {"value": "yes", "global": True, "method": "default"}, + "app1.example.com_ANTIBOT_TIME_VALID": {"value": "86400", "global": True, "method": "default"}, + "app1.example.com_HTTP3": {"value": "no", "global": True, "method": "default"}, + "app1.example.com_CUSTOM_SSL_CERT": {"value": "", "global": True, "method": "default"}, + "app1.example.com_BROTLI_TYPES": { + "value": "application/atom+xml application/javascript application/json application/rss+xml application/vnd.ms-fontobject application/x-font-opentype application/x-font-truetype application/x-font-ttf application/x-javascript application/xhtml+xml application/xml font/eot font/opentype font/otf font/truetype image/svg+xml image/vnd.microsoft.icon image/x-icon image/x-win-bitmap text/css text/javascript text/plain text/xml", + "global": True, + "method": "default", + }, + "app1.example.com_CORS_ALLOW_ORIGIN": {"value": "self", "global": True, "method": "default"}, + "app1.example.com_MAX_CLIENT_SIZE": {"value": "10m", "global": True, "method": "default"}, + "app1.example.com_LOCAL_PHP_PATH": {"value": "", "global": True, "method": "default"}, + "app1.example.com_REVERSE_PROXY_BUFFERING": {"value": "yes", "global": True, "method": "default"}, + "app1.example.com_USE_BUNKERNET": {"value": "no", "global": True, "method": "scheduler"}, + "app1.example.com_WHITELIST_IP": { + "value": "20.191.45.212 40.88.21.235 40.76.173.151 40.76.163.7 20.185.79.47 52.142.26.175 20.185.79.15 52.142.24.149 40.76.162.208 40.76.163.23 40.76.162.191 40.76.162.247", + "global": True, + "method": "default", + }, + "app1.example.com_ALLOWED_METHODS": {"value": "GET|POST|HEAD", "global": True, "method": "default"}, + "app1.example.com_SECURITYTXT_URI": {"value": "/.w2024-07-31T13:58:29.679295487Z ell-known/security.txt", "global": True, "method": "default"}, + "app1.example.com_OPEN_FILE_CACHE_VALID": {"value": "30s", "global": True, "method": "default"}, + "app1.example.com_REMOTE_PHP_PATH": {"value": "", "global": True, "method": "default"}, + "app1.example.com_REAL_IP_HEADER": {"value": "X-Forwarded-For", "global": True, "method": "default"}, + "app1.example.com_REVERSE_PROXY_PASS_REQUEST_BODY": {"value": "yes", "global": True, "method": "default"}, + "app1.example.com_GENERATE_SELF_SIGNED_SSL": {"value": "no", "global": True, "method": "default"}, + "app1.example.com_REVERSE_PROXY_WS": {"value": "no", "global": True, "method": "default"}, + "app1.example.com_CUSTOM_SSL_KEY_DATA": {"value": "", "global": True, "method": "default"}, + "app1.example.com_REVERSE_PROXY_AUTH_REQUEST_SET": {"value": "", "global": True, "method": "default"}, + "app1.example.com_REVERSE_PROXY_HOST": {"value": "http://app1:8080", "global": False, "method": "scheduler"}, + "app1.example.com_BLACKLIST_COUNTRY": {"value": "", "global": True, "method": "default"}, + "app1.example.com_PROXY_CACHE_VALID": {"value": "200=24h 301=1h 302=24h", "global": True, "method": "default"}, + "app1.example.com_BLACKLIST_IGNORE_RDNS": {"value": "", "global": True, "method": "default"}, + "app1.example.com_SECURITYTXT_EXPIRES": {"value": "", "global": True, "method": "default"}, + "app1.example.com_WHITELIST_COUNTRY": {"value": "", "global": True, "method": "default"}, + "app1.example.com_PERMISSIONS_POLICY": { + "value": "accelerometer=(), ambient-light-sensor=(), attribution-reporting=(), autoplay=(), battery=(), bluetooth=(), browsing-topics=(), camera=(), compute-pressure=(), display-capture=(), document-domain=(), encrypted-media=(), execution-while-not-rendered=(), execution-while-out-of-viewport=(), fullscreen=(), gamepad=(), geolocation=(), gyroscope=(), hid=(), identity-credentials-get=(), idle-detection=(), local-fonts=(), magnetometer=(), microphone=(), midi=(), otp-credentials=(), payment=(), picture-in-picture=(), publickey-credentials-create=(), publickey-credentials-get=(), screen-wake-lock=(), serial=(), speaker-selection=(), storage-access=(), usb=(), web-share=(), window-management=(), xr-spatial-tracking=()", + "global": True, + "method": "default", + }, + "app1.example.com_GREYLIST_ASN": {"value": "", "global": True, "method": "default"}, + "app1.example.com_USE_BROTLI": {"value": "no", "global": True, "method": "default"}, + "app1.example.com_BAD_BEHAVIOR_STATUS_CODES": {"value": "400 401 403 404 405 429 444", "global": True, "method": "default"}, + "app1.example.com_USE_GZIP": {"value": "yes", "global": True, "method": "scheduler"}, + "app1.example.com_USE_GREYLIST": {"value": "no", "global": True, "method": "default"}, + "app1.example.com_USE_LETS_ENCRYPT_STAGING": {"value": "no", "global": True, "method": "default"}, + "app1.example.com_BLACKLIST_ASN": {"value": "", "global": True, "method": "default"}, + "app1.example.com_CORS_ALLOW_METHODS": {"value": "GET, POST, OPTIONS", "global": True, "method": "default"}, + "app1.example.com_REVERSE_PROXY_SEND_TIMEOUT": {"value": "60s", "global": True, "method": "default"}, + "app1.example.com_USE_BAD_BEHAVIOR": {"value": "yes", "global": True, "method": "default"}, + "app1.example.com_MODSECURITY_CRS_PLUGIN_URLS": {"value": "", "global": True, "method": "default"}, + "app1.example.com_USE_METRICS": {"value": "yes", "global": True, "method": "default"}, + "app1.example.com_USE_MODSECURITY": {"value": "yes", "global": True, "method": "default"}, + "app1.example.com_REVERSE_PROXY_KEEPALIVE": {"value": "no", "global": True, "method": "default"}, + "app1.example.com_USE_ANTIBOT": {"value": "no", "global": True, "method": "default"}, + "app1.example.com_REFERRER_POLICY": {"value": "strict-origin-when-cross-origin", "global": True, "method": "default"}, + "app1.example.com_SELF_SIGNED_SSL_SUBJ": {"value": "/CN=www.example.com/", "global": True, "method": "default"}, + "app1.example.com_PROXY_CACHE_BYPASS": {"value": "0", "global": True, "method": "default"}, + "app1.example.com_USE_WHITELIST": {"value": "no", "global": True, "method": "scheduler"}, + "app1.example.com_ANTIBOT_TIME_RESOLVE": {"value": "60", "global": True, "method": "default"}, + "app1.example.com_CORS_ALLOW_HEADERS": { + "value": "DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range", + "global": True, + "method": "default", + }, + "app1.example.com_BLACKLIST_USER_AGENT": {"value": "", "global": True, "method": "default"}, + "app1.example.com_WHITELIST_USER_AGENT": {"value": "", "global": True, "method": "default"}, + "app1.example.com_MODSECURITY_SEC_RULE_ENGINE": {"value": "On", "global": True, "method": "default"}, + "app1.example.com_GZIP_COMP_LEVEL": {"value": "5", "global": True, "method": "default"}, + "app1.example.com_CUSTOM_SSL_CERT_DATA": {"value": "", "global": True, "method": "default"}, + "app1.example.com_REVERSE_SCAN_TIMEOUT": {"value": "500", "global": True, "method": "default"}, + "app1.example.com_ANTIBOT_RECAPTCHA_SITEKEY": {"value": "", "global": True, "method": "default"}, + "app1.example.com_CUSTOM_SSL_KEY": {"value": "", "global": True, "method": "default"}, + "app1.example.com_BROTLI_COMP_LEVEL": {"value": "6", "global": True, "method": "default"}, + "app1.example.com_AUTH_BASIC_USER": {"value": "changeme", "global": True, "method": "default"}, + "app1.example.com_WHITELIST_RDNS_GLOBAL": {"value": "yes", "global": True, "method": "default"}, + "app1.example.com_REAL_IP_RECURSIVE": {"value": "yes", "global": True, "method": "default"}, + "app1.example.com_BROTLI_MIN_LENGTH": {"value": "1000", "global": True, "method": "default"}, + "app1.example.com_REAL_IP_FROM": {"value": "192.168.0.0/16 172.16.0.0/12 10.0.0.0/8", "global": True, "method": "default"}, + "app1.example.com_BAD_BEHAVIOR_COUNT_TIME": {"value": "60", "global": True, "method": "default"}, + "app1.example.com_X_FRAME_OPTIONS": {"value": "SAMEORIGIN", "global": True, "method": "default"}, + "app1.example.com_REVERSE_SCAN_PORTS": {"value": "22 80 443 3128 8000 8080", "global": True, "method": "default"}, + "app1.example.com_LIMIT_CONN_MAX_HTTP1": {"value": "10", "global": True, "method": "default"}, + "app1.example.com_HTTP2": {"value": "yes", "global": True, "method": "default"}, + "app1.example.com_REVERSE_PROXY_AUTH_REQUEST_SIGNIN_URL": {"value": "", "global": True, "method": "default"}, + "app1.example.com_X_XSS_PROTECTION": {"value": "1; mode=block", "global": True, "method": "default"}, + "app1.example.com_WHITELIST_RDNS": { + "value": ".google.com .googlebot.com .yandex.ru .yandex.net .yandex.com .search.msn.com .baidu.com .baidu.jp .crawl.yahoo.net .fwd.linkedin.com .twitter.com .twttr.com .discord.com", + "global": True, + "method": "default", + }, + "app1.example.com_USE_REVERSE_PROXY": {"value": "yes", "global": False, "method": "scheduler"}, + "app1.example.com_LISTEN_STREAM_PORT_SSL": {"value": "4242", "global": True, "method": "default"}, + "app1.example.com_X_DNS_PREFETCH_CONTROL": {"value": "off", "global": True, "method": "default"}, + "app1.example.com_GREYLIST_IP": {"value": "", "global": True, "method": "default"}, + "app1.example.com_REDIRECT_HTTP_TO_HTTPS": {"value": "no", "global": True, "method": "default"}, + "app1.example.com_ANTIBOT_RECAPTCHA_SECRET": {"value": "", "global": True, "method": "default"}, + "app1.example.com_SECURITYTXT_PREFERRED_LANG": {"value": "en", "global": True, "method": "default"}, + "app1.example.com_CORS_ALLOW_CREDENTIALS": {"value": "no", "global": True, "method": "default"}, + "app1.example.com_USE_BLACKLIST": {"value": "no", "global": True, "method": "scheduler"}, + "app1.example.com_CROSS_ORIGIN_EMBEDDER_POLICY": {"value": "require-corp", "global": True, "method": "default"}, + "app1.example.com_ANTIBOT_RECAPTCHA_SCORE": {"value": "0.7", "global": True, "method": "default"}, + "app1.example.com_IS_DRAFT": {"value": "no", "global": False, "method": "default"}, + "app1.example.com_ANTIBOT_URI": {"value": "/challenge", "global": True, "method": "default"}, + "app1.example.com_BAD_BEHAVIOR_THRESHOLD": {"value": "10", "global": True, "method": "default"}, + "app1.example.com_USE_CLIENT_CACHE": {"value": "yes", "global": True, "method": "scheduler"}, + "app1.example.com_KEEP_UPSTREAM_HEADERS": {"value": "Content-Security-Policy Permissions-Policy X-Frame-Options", "global": True, "method": "default"}, + "app1.example.com_BLACKLIST_RDNS": {"value": ".shodan.io .censys.io", "global": True, "method": "default"}, + "app1.example.com_COOKIE_FLAGS": {"value": "* HttpOnly SameSite=Lax", "global": True, "method": "default"}, + "app1.example.com_REDIRECT_TO_STATUS_CODE": {"value": "301", "global": True, "method": "default"}, + "app1.example.com_MODSECURITY_SEC_AUDIT_ENGINE": {"value": "RelevantOnly", "global": True, "method": "default"}, + "app1.example.com_REVERSE_PROXY_HEADERS": {"value": "", "global": True, "method": "default"}, + "app1.example.com_STRICT_TRANSPORT_SECURITY": {"value": "max-age=31536000; includeSubDomains; preload", "global": True, "method": "default"}, + "app1.example.com_USE_MODSECURITY_CRS_PLUGINS": {"value": "yes", "global": True, "method": "default"}, + "app1.example.com_SSL_PROTOCOLS": {"value": "TLSv1.2 TLSv1.3", "global": True, "method": "default"}, + "app1.example.com_DISABLE_FLOC": {"value": "yes", "global": True, "method": "default"}, + "app1.example.com_REVERSE_PROXY_INTERCEPT_ERRORS": {"value": "yes", "global": True, "method": "default"}, + "app1.example.com_BLACKLIST_IGNORE_URI": {"value": "", "global": True, "method": "default"}, + "app1.example.com_REVERSE_PROXY_SSL_SNI_NAME": {"value": "", "global": True, "method": "default"}, + "app1.example.com_ROOT_FOLDER": {"value": "", "global": True, "method": "default"}, + "app1.example.com_BLACKLIST_IGNORE_USER_AGENT": {"value": "", "global": True, "method": "default"}, + "app1.example.com_OPEN_FILE_CACHE": {"value": "max=1000 inactive=20s", "global": True, "method": "default"}, + "app1.example.com_SERVE_FILES": {"value": "no", "global": True, "method": "scheduler"}, + "app1.example.com_REVERSE_PROXY_READ_TIMEOUT": {"value": "60s", "global": True, "method": "default"}, + "app1.example.com_USE_LIMIT_REQ": {"value": "yes", "global": True, "method": "default"}, + "app1.example.com_REVERSE_PROXY_INCLUDES": {"value": "", "global": True, "method": "default"}, + "app1.example.com_CORS_EXPOSE_HEADERS": {"value": "Content-Length,Content-Range", "global": True, "method": "default"}, + "app1.example.com_CORS_MAX_AGE": {"value": "86400", "global": True, "method": "default"}, + "app1.example.com_USE_DNSBL": {"value": "yes", "global": True, "method": "default"}, + "app1.example.com_ANTIBOT_TURNSTILE_SECRET": {"value": "", "global": True, "method": "default"}, + "app1.example.com_USE_REAL_IP": {"value": "no", "global": True, "method": "default"}, + "app1.example.com_X_CONTENT_TYPE_OPTIONS": {"value": "nosniff", "global": True, "method": "default"}, + "app1.example.com_GREYLIST_URI": {"value": "", "global": True, "method": "default"}, + "app1.example.com_BLACKLIST_IGNORE_ASN": {"value": "", "global": True, "method": "default"}, + "app1.example.com_GREYLIST_RDNS": {"value": "", "global": True, "method": "default"}, + "app1.example.com_WHITELIST_URI": {"value": "", "global": True, "method": "default"}, + "app1.example.com_AUTH_BASIC_LOCATION": {"value": "sitewide", "global": True, "method": "default"}, + "app1.example.com_GZIP_MIN_LENGTH": {"value": "1000", "global": True, "method": "default"}, + "app1.example.com_SECURITYTXT_CONTACT": {"value": "", "global": True, "method": "default"}, + "app1.example.com_SERVER_NAME": {"value": "app1.example.com", "global": False, "method": "ui"}, + "app1.example.com_ERRORS": {"value": "", "global": True, "method": "default"}, + "app1.example.com_USE_CORS": {"value": "no", "global": True, "method": "default"}, + "app1.example.com_SECURITYTXT_CSAF": {"value": "", "global": True, "method": "default"}, + "app1.example.com_INJECT_BODY": {"value": "", "global": True, "method": "default"}, + "app1.example.com_AUTO_REDIRECT_HTTP_TO_HTTPS": {"value": "yes", "global": True, "method": "default"}, + "app1.example.com_GREYLIST_RDNS_GLOBAL": {"value": "yes", "global": True, "method": "default"}, + "app1.example.com_ANTIBOT_HCAPTCHA_SECRET": {"value": "", "global": True, "method": "default"}, + "app1.example.com_REVERSE_PROXY_URL": {"value": "/", "global": True, "method": "default"}, + "app1.example.com_SECURITYTXT_ENCRYPTION": {"value": "", "global": True, "method": "default"}, + "app1.example.com_LIMIT_CONN_MAX_STREAM": {"value": "10", "global": True, "method": "default"}, + "app1.example.com_PROXY_CACHE_KEY": {"value": "$scheme$host$request_uri", "global": True, "method": "default"}, + "app1.example.com_CONTENT_SECURITY_POLICY": { + "value": "object-src 'none'; form-action 'self'; frame-ancestors 'self';", + "global": True, + "method": "default", + }, + "app1.example.com_AUTO_LETS_ENCRYPT": {"value": "no", "global": True, "method": "default"}, + "app1.example.com_REMOVE_HEADERS": { + "value": "Server Expect-CT X-Powered-By X-AspNet-Version X-AspNetMvc-Version Public-Key-Pins", + "global": True, + "method": "default", + }, + "app1.example.com_USE_MODSECURITY_CRS": {"value": "yes", "global": True, "method": "default"}, + "app1.example.com_WHITELIST_ASN": {"value": "32934", "global": True, "method": "default"}, + "app1.example.com_SELF_SIGNED_SSL_EXPIRY": {"value": "365", "global": True, "method": "default"}, + "app1.example.com_REDIRECT_TO_REQUEST_URI": {"value": "no", "global": True, "method": "default"}, + "app1.example.com_HTTP3_ALT_SVC_PORT": {"value": "443", "global": True, "method": "default"}, + "app1.example.com_BAD_BEHAVIOR_BAN_TIME": {"value": "86400", "global": True, "method": "default"}, + "www.example.com_BLACKLIST_IGNORE_IP": {"value": "", "global": True, "method": "default"}, + "www.example.com_LISTEN_STREAM_PORT": {"value": "1337", "global": True, "method": "default"}, + "www.example.com_USE_SECURITYTXT": {"value": "no", "global": True, "method": "default"}, + "www.example.com_USE_PROXY_PROTOCOL": {"value": "no", "global": True, "method": "default"}, + "www.example.com_USE_UI": {"value": "yes", "global": False, "method": "scheduler"}, + "www.example.com_GZIP_PROXIED": {"value": "no-cache no-store private expired auth", "global": True, "method": "default"}, + "www.example.com_COOKIE_AUTO_SECURE_FLAG": {"value": "yes", "global": True, "method": "default"}, + "www.example.com_BLACKLIST_URI": {"value": "", "global": True, "method": "default"}, + "www.example.com_SECURITYTXT_POLICY": {"value": "", "global": True, "method": "default"}, + "www.example.com_SERVER_TYPE": {"value": "http", "global": True, "method": "default"}, + "www.example.com_SECURITYTXT_CANONICAL": {"value": "", "global": True, "method": "default"}, + "www.example.com_REVERSE_PROXY_SSL_SNI": {"value": "no", "global": True, "method": "default"}, + "www.example.com_USE_AUTH_BASIC": {"value": "no", "global": True, "method": "default"}, + "www.example.com_REMOTE_PHP": {"value": "", "global": True, "method": "default"}, + "www.example.com_USE_PROXY_CACHE": {"value": "no", "global": True, "method": "default"}, + "www.example.com_USE_UDP": {"value": "no", "global": True, "method": "default"}, + "www.example.com_MODSECURITY_SEC_AUDIT_LOG_PARTS": {"value": "ABCFHZ", "global": True, "method": "default"}, + "www.example.com_USE_OPEN_FILE_CACHE": {"value": "no", "global": True, "method": "default"}, + "www.example.com_USE_LIMIT_CONN": {"value": "yes", "global": True, "method": "default"}, + "www.example.com_EMAIL_LETS_ENCRYPT": {"value": "", "global": True, "method": "default"}, + "www.example.com_LIMIT_REQ_RATE": {"value": "2r/s", "global": True, "method": "default"}, + "www.example.com_AUTH_BASIC_PASSWORD": {"value": "changeme", "global": True, "method": "default"}, + "www.example.com_SECURITYTXT_ACKNOWLEDGEMENTS": {"value": "", "global": True, "method": "default"}, + "www.example.com_ANTIBOT_HCAPTCHA_SITEKEY": {"value": "", "global": True, "method": "default"}, + "www.example.com_REVERSE_PROXY_HEADERS_CLIENT": {"value": "", "global": True, "method": "default"}, + "www.example.com_REVERSE_PROXY_CONNECT_TIMEOUT": {"value": "60s", "global": True, "method": "default"}, + "www.example.com_PROXY_CACHE_METHODS": {"value": "GET HEAD", "global": True, "method": "default"}, + "www.example.com_GZIP_TYPES": { + "value": "application/atom+xml application/javascript application/json application/rss+xml application/vnd.ms-fontobject application/x-font-opentype application/x-font-truetype application/x-font-ttf application/x-javascript application/xhtml+xml application/xml font/eot font/opentype font/otf font/truetype image/svg+xml image/vnd.micr2024-07-31T13:58:29.679295487Z osoft.icon image/x-icon image/x-win-bitmap text/css text/javascript text/plain text/xml", + "global": True, + "method": "default", + }, + "www.example.com_LISTEN_STREAM": {"value": "yes", "global": True, "method": "default"}, + "www.example.com_REVERSE_PROXY_CUSTOM_HOST": {"value": "", "global": True, "method": "default"}, + "www.example.com_CUSTOM_HEADER": {"value": "", "global": True, "method": "default"}, + "www.example.com_OPEN_FILE_CACHE_ERRORS": {"value": "yes", "global": True, "method": "default"}, + "www.example.com_LIMIT_REQ_URL": {"value": "/", "global": True, "method": "default"}, + "www.example.com_LIMIT_CONN_MAX_HTTP2": {"value": "100", "global": True, "method": "default"}, + "www.example.com_AUTH_BASIC_TEXT": {"value": "Restricted area", "global": True, "method": "default"}, + "www.example.com_ANTIBOT_TURNSTILE_SITEKEY": {"value": "", "global": True, "method": "default"}, + "www.example.com_SECURITYTXT_HIRING": {"value": "", "global": True, "method": "default"}, + "www.example.com_BLACKLIST_IP": {"value": "", "global": True, "method": "default"}, + "www.example.com_USE_CUSTOM_SSL": {"value": "no", "global": True, "method": "default"}, + "www.example.com_GREYLIST_USER_AGENT": {"value": "", "global": True, "method": "default"}, + "www.example.com_OPEN_FILE_CACHE_MIN_USES": {"value": "2", "global": True, "method": "default"}, + "www.example.com_MODSECURITY_CRS_VERSION": {"value": "4", "global": True, "method": "default"}, + "www.example.com_CROSS_ORIGIN_OPENER_POLICY": {"value": "same-origin", "global": True, "method": "default"}, + "www.example.com_CONTENT_SECURITY_POLICY_REPORT_ONLY": {"value": "no", "global": True, "method": "default"}, + "www.example.com_CLIENT_CACHE_ETAG": {"value": "yes", "global": True, "method": "default"}, + "www.example.com_PROXY_CACHE_MIN_USES": {"value": "2", "global": True, "method": "default"}, + "www.example.com_REDIRECT_TO": {"value": "", "global": True, "method": "default"}, + "www.example.com_CLIENT_CACHE_CONTROL": {"value": "public, max-age=15552000", "global": True, "method": "default"}, + "www.example.com_LISTEN_HTTP": {"value": "yes", "global": True, "method": "default"}, + "www.example.com_USE_REVERSE_SCAN": {"value": "no", "global": True, "method": "default"}, + "www.example.com_CROSS_ORIGIN_RESOURCE_POLICY": {"value": "same-site", "global": True, "method": "default"}, + "www.example.com_PROXY_NO_CACHE": {"value": "$http_pragma $http_authorization", "global": True, "method": "default"}, + "www.example.com_LOCAL_PHP": {"value": "", "global": True, "method": "default"}, + "www.example.com_INTERCEPTED_ERROR_CODES": {"value": "400 404 405 413 429 500 501 502 503 504", "global": False, "method": "scheduler"}, + "www.example.com_REVERSE_PROXY_AUTH_REQUEST": {"value": "", "global": True, "method": "default"}, + "www.example.com_BLACKLIST_RDNS_GLOBAL": {"value": "yes", "global": True, "method": "default"}, + "www.example.com_CORS_DENY_REQUEST": {"value": "yes", "global": True, "method": "default"}, + "www.example.com_ANTIBOT_TIME_VALID": {"value": "86400", "global": True, "method": "default"}, + "www.example.com_HTTP3": {"value": "no", "global": True, "method": "default"}, + "www.example.com_CUSTOM_SSL_CERT": {"value": "", "global": True, "method": "default"}, + "www.example.com_BROTLI_TYPES": { + "value": "application/atom+xml application/javascript application/json application/rss+xml application/vnd.ms-fontobject application/x-font-opentype application/x-font-truetype application/x-font-ttf application/x-javascript application/xhtml+xml application/xml font/eot font/opentype font/otf font/truetype image/svg+xml image/vnd.microsoft.icon image/x-icon image/x-win-bitmap text/css text/javascript text/plain text/xml", + "global": True, + "method": "default", + }, + "www.example.com_CORS_ALLOW_ORIGIN": {"value": "self", "global": True, "method": "default"}, + "www.example.com_MAX_CLIENT_SIZE": {"value": "10m", "global": True, "method": "default"}, + "www.example.com_LOCAL_PHP_PATH": {"value": "", "global": True, "method": "default"}, + "www.example.com_REVERSE_PROXY_BUFFERING": {"value": "yes", "global": True, "method": "default"}, + "www.example.com_USE_BUNKERNET": {"value": "no", "global": True, "method": "scheduler"}, + "www.example.com_WHITELIST_IP": { + "value": "20.191.45.212 40.88.21.235 40.76.173.151 40.76.163.7 20.185.79.47 52.142.26.175 20.185.79.15 52.142.24.149 40.76.162.208 40.76.163.23 40.76.162.191 40.76.162.247", + "global": True, + "method": "default", + }, + "www.example.com_ALLOWED_METHODS": {"value": "GET|POST|HEAD", "global": True, "method": "default"}, + "www.example.com_SECURITYTXT_URI": {"value": "/.well-known/security.txt", "global": True, "method": "default"}, + "www.example.com_OPEN_FILE_CACHE_VALID": {"value": "30s", "global": True, "method": "default"}, + "www.example.com_REMOTE_PHP_PATH": {"value": "", "global": True, "method": "default"}, + "www.example.com_REAL_IP_HEADER": {"value": "X-Forwarded-For", "global": True, "method": "default"}, + "www.example.com_REVERSE_PROXY_PASS_REQUEST_BODY": {"value": "yes", "global": True, "method": "default"}, + "www.example.com_GENERATE_SELF_SIGNED_SSL": {"value": "yes", "global": False, "method": "scheduler"}, + "www.example.com_REVERSE_PROXY_WS": {"value": "no", "global": True, "method": "default"}, + "www.example.com_CUSTOM_SSL_KEY_DATA": {"value": "", "global": True, "method": "default"}, + "www.example.com_REVERSE_PROXY_AUTH_REQUEST_SET": {"value": "", "global": True, "method": "default"}, + "www.example.com_REVERSE_PROXY_HOST": {"value": "http://bw-ui:7000", "global": False, "method": "scheduler"}, + "www.example.com_BLACKLIST_COUNTRY": {"value": "", "global": True, "method": "default"}, + "www.example.com_PROXY_CACHE_VALID": {"value": "200=24h 301=1h 302=24h", "global": True, "method": "default"}, + "www.example.com_BLACKLIST_IGNORE_RDNS": {"value": "", "global": True, "method": "default"}, + "www.example.com_SECURITYTXT_EXPIRES": {"value": "", "global": True, "method": "default"}, + "www.example.com_WHITELIST_COUNTRY": {"value": "", "global": True, "method": "default"}, + "www.example.com_PERMISSIONS_POLICY": { + "value": "accelerometer=(), ambient-light-sensor=(), attribution-reporting=(), autoplay=(), battery=(), bluetooth=(), browsing-topics=(), camera=(), compute-pressure=(), display-capture=(), document-domain=(), encrypted-media=(), execution-while-not-rendered=(), execution-while-out-of-viewport=(), fullscreen=(), gamepad=(), geolocation=(), gyroscope=(), hid=(), identity-credentials-get=(), idle-detection=(), local-fonts=(), magnetometer=(), microphone=(), midi=(), otp-credentials=(), payment=(), picture-in-picture=(), publickey-credentials-create=(), publickey-credentials-get=(), screen-wake-lock=(), serial=(), speaker-selection=(), storage-access=(), usb=(), web-share=(), window-management=(), xr-spatial-tracking=()", + "global": True, + "method": "default", + }, + "www.example.com_GREYLIST_ASN": {"value": "", "global": True, "method": "default"}, + "www.example.com_USE_BROTLI": {"value": "no", "global": True, "method": "default"}, + "www.example.com_BAD_BEHAVIOR_STATUS_CODES": {"value": "400 401 403 404 405 429 444", "global": True, "method": "default"}, + "www.example.com_USE_GZIP": {"value": "yes", "global": True, "method": "scheduler"}, + "www.example.com_USE_GREYLIST": {"value": "no", "global": True, "method": "default"}, + "www.example.com_USE_LETS_ENCRYPT_STAGING": {"value": "no", "global": True, "method": "default"}, + "www.example.com_BLACKLIST_ASN": {"value": "", "global": True, "method": "default"}, + "www.example.com_CORS_ALLOW_METHODS": {"value": "GET, POST, OPTIONS", "global": True, "method": "default"}, + "www.example.com_REVERSE_PROXY_SEND_TIMEOUT": {"value": "60s", "global": True, "method": "default"}, + "www.example.com_USE_BAD_BEHAVIOR": {"value": "yes", "global": True, "method": "default"}, + "www.example.com_MODSECURITY_CRS_PLUGIN_URLS": {"value": "", "global": True, "method": "default"}, + "www.example.com_USE_METRICS": {"value": "yes", "global": True, "method": "default"}, + "www.example.com_USE_MODSECURITY": {"value": "yes", "global": True, "method": "default"}, + "www.example.com_REVERSE_PROXY_KEEPALIVE": {"value": "no", "global": True, "method": "default"}, + "www.example.com_USE_ANTIBOT": {"value": "no", "global": True, "method": "default"}, + "www.example.com_REFERRER_POLICY": {"value": "strict-origin-when-cross-origin", "global": True, "method": "default"}, + "www.example.com_SELF_SIGNED_SSL_SUBJ": {"value": "/CN=www.example.com/", "global": True, "method": "default"}, + "www.example.com_PROXY_CACHE_BYPASS": {"value": "0", "global": True, "method": "default"}, + "www.example.com_USE_WHITELIST": {"value": "no", "global": True, "method": "scheduler"}, + "www.example.com_ANTIBOT_TIME_RESOLVE": {"value": "60", "global": True, "method": "default"}, + "www.example.com_CORS_ALLOW_HEADERS": { + "value": "DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range", + "global": True, + "method": "default", + }, + "www.example.com_BLACKLIST_USER_AGENT": {"value": "", "global": True, "method": "default"}, + "www.example.com_WHITELIST_USER_AGENT": {"value": "", "global": True, "method": "default"}, + "www.example.com_MODSECURITY_SEC_RULE_ENGINE": {"value": "On", "global": True, "method": "default"}, + "www.example.com_GZIP_COMP_LEVEL": {"value": "5", "global": True, "method": "default"}, + "www.example.com_CUSTOM_SSL_CERT_DATA": {"value": "", "global": True, "method": "default"}, + "www.example.com_REVERSE_SCAN_TIMEOUT": {"value": "500", "global": True, "method": "default"}, + "www.example.com_ANTIBOT_RECAPTCHA_SITEKEY": {"value": "", "global": True, "method": "default"}, + "www.example.com_CUSTOM_SSL_KEY": {"value": "", "global": True, "method": "default"}, + "www.example.com_BROTLI_COMP_LEVEL": {"value": "6", "global": True, "method": "default"}, + "www.example.com_AUTH_BASIC_USER": {"value": "changeme", "global": True, "method": "default"}, + "www.example.com_WHITELIST_RDNS_GLOBAL": {"value": "yes", "global": True, "method": "default"}, + "www.example.com_REAL_IP_RECURSIVE": {"value": "yes", "global": True, "method": "default"}, + "www.example.com_BROTLI_MIN_LENGTH": {"value": "1000", "global": True, "method": "default"}, + "www.example.com_REAL_IP_FROM": {"value": "192.168.0.0/16 172.16.0.0/12 10.0.0.0/8", "global": True, "method": "default"}, + "www.example.com_BAD_BEHAVIOR_COUNT_TIME": {"value": "60", "global": True, "method": "default"}, + "www.example.com_X_FRAME_OPTIONS": {"value": "SAMEORIGIN", "global": True, "method": "default"}, + "www.example.com_REVERSE_SCAN_PORTS": {"value": "22 80 443 3128 8000 8080", "global": True, "method": "default"}, + "www.example.com_LIMIT_CONN_MAX_HTTP1": {"value": "10", "global": True, "method": "default"}, + "www.example.com_HTTP2": {"value": "yes", "global": True, "method": "default"}, + "www.example.com_REVERSE_PROXY_AUTH_REQUEST_SIGNIN_URL": {"value": "", "global": True, "method": "default"}, + "www.example.com_X_XSS_PROTECTION": {"value": "1; mode=block", "global": True, "method": "default"}, + "www.example.com_WHITELIST_RDNS": { + "value": ".google.com .googlebot.com .yandex.ru .yandex.net .yandex.com .search.msn.com .baidu.com .baidu.jp .crawl.yahoo.net .fwd.linkedin.com .twitter.com .twttr.com .discord.com", + "global": True, + "method": "default", + }, + "www.example.com_USE_REVERSE_PROXY": {"value": "yes", "global": False, "method": "scheduler"}, + "www.example.com_LISTEN_STREAM_PORT_SSL": {"value": "4242", "global": True, "method": "default"}, + "www.example.com_X_DNS_PREFETCH_CONTROL": {"value": "off", "global": True, "method": "default"}, + "www.example.com_GREYLIST_IP": {"value": "", "global": True, "method": "default"}, + "www.example.com_REDIRECT_HTTP_TO_HTTPS": {"value": "no", "global": True, "method": "default"}, + "www.example.com_ANTIBOT_RECAPTCHA_SECRET": {"value": "", "global": True, "method": "default"}, + "www.example.com_SECURITYTXT_PREFERRED_LANG": {"value": "en", "global": True, "method": "default"}, + "www.example.com_CORS_ALLOW_CREDENTIALS": {"value": "no", "global": True, "method": "default"}, + "www.example.com_USE_BLACKLIST": {"value": "no", "global": True, "method": "scheduler"}, + "www.example.com_CROSS_ORIGIN_EMBEDDER_POLICY": {"value": "require-corp", "global": True, "method": "default"}, + "www.example.com_ANTIBOT_RECAPTCHA_SCORE": {"value": "0.7", "global": True, "method": "default"}, + "www.example.com_IS_DRAFT": {"value": "no", "global": False, "method": "default"}, + "www.example.com_ANTIBOT_URI": {"value": "/challenge", "global": True, "method": "default"}, + "www.example.com_BAD_BEHAVIOR_THRESHOLD": {"value": "10", "global": True, "method": "default"}, + "www.example.com_USE_CLIENT_CACHE": {"value": "yes", "global": True, "method": "scheduler"}, + "www.example.com_KEEP_UPSTREAM_HEADERS": {"value": "Content-Security-Policy Permissions-Policy X-Frame-Options", "global": True, "method": "default"}, + "www.example.com_BLACKLIST_RDNS": {"value": ".shodan.io .censys.io", "global": True, "method": "default"}, + "www.example.com_COOKIE_FLAGS": {"value": "* HttpOnly SameSite=Lax", "global": True, "method": "default"}, + "www.example.com_REDIRECT_TO_STATUS_CODE": {"value": "301", "global": True, "method": "default"}, + "www.example.com_MODSECURITY_SEC_AUDIT_ENGINE": {"value": "RelevantOnly", "global": True, "method": "default"}, + "www.example.com_REVERSE_PROXY_HEADERS": {"value": "", "global": True, "method": "default"}, + "www.example.com_STRICT_TRANSPORT_SECURITY": {"value": "max-age=31536000; includeSubDomains; preload", "global": True, "method": "default"}, + "www.example.com_USE_MODSECURITY_CRS_PLUGINS": {"value": "yes", "global": True, "method": "default"}, + "www.example.com_SSL_PROTOCOLS": {"value": "TLSv1.2 TLSv1.3", "global": True, "method": "default"}, + "www.example.com_DISABLE_FLOC": {"value": "yes", "global": True, "method": "default"}, + "www.example.com_REVERSE_PROXY_INTERCEPT_ERRORS": {"value": "yes", "global": True, "method": "default"}, + "www.example.com_BLACKLIST_IGNORE_URI": {"value": "", "global": True, "method": "default"}, + "www.example.com_REVERSE_PROXY_SSL_SNI_NAME": {"value": "", "global": True, "method": "default"}, + "www.example.com_ROOT_FOLDER": {"value": "", "global": True, "method": "default"}, + "www.example.com_BLACKLIST_IGNORE_USER_AGENT": {"value": "", "global": True, "method": "default"}, + "www.example.com_OPEN_FILE_CACHE": {"value": "max=1000 inactive=20s", "global": True, "method": "default"}, + "www.example.com_SERVE_FILES": {"value": "no", "global": True, "method": "scheduler"}, + "www.example.com_REVERSE_PROXY_READ_TIMEOUT": {"value": "60s", "global": True, "method": "default"}, + "www.example.com_USE_LIMIT_REQ": {"value": "yes", "global": True, "method": "default"}, + "www.example.com_REVERSE_PROXY_INCLUDES": {"value": "", "global": True, "method": "default"}, + "www.example.com_CORS_EXPOSE_HEADERS": {"value": "Content-Length,Content-Range", "global": True, "method": "default"}, + "www.example.com_CORS_MAX_AGE": {"value": "86400", "global": True, "method": "default"}, + "www.example.com_USE_DNSBL": {"value": "yes", "global": True, "method": "default"}, + "www.example.com_ANTIBOT_TURNSTILE_SECRET": {"value": "", "global": True, "method": "default"}, + "www.example.com_USE_REAL_IP": {"value": "no", "global": True, "method": "default"}, + "www.example.com_X_CONTENT_TYPE_OPTIONS": {"value": "nosniff", "global": True, "method": "default"}, + "www.example.com_GREYLIST_URI": {"value": "", "global": True, "method": "default"}, + "www.example.com_BLACKLIST_IGNORE_ASN": {"value": "", "global": True, "method": "default"}, + "www.example.com_GREYLIST_RDNS": {"value": "", "global": True, "method": "default"}, + "www.example.com_WHITELIST_URI": {"value": "", "global": True, "method": "default"}, + "www.example.com_AUTH_BASIC_LOCATION": {"value": "sitewide", "global": True, "method": "default"}, + "www.example.com_GZIP_MIN_LENGTH": {"value": "1000", "global": True, "method": "default"}, + "www.example.com_SECURITYTXT_CONTACT": {"value": "", "global": True, "method": "default"}, + "www.example.com_SERVER_NAME": {"value": "www.example.com", "global": False, "method": "scheduler"}, + "www.example.com_ERRORS": {"value": "", "global": True, "method": "default"}, + "www.example.com_USE_CORS": {"value": "no", "global": True, "method": "default"}, + "www.example.com_SECURITYTXT_CSAF": {"value": "", "global": True, "method": "default"}, + "www.example.com_INJECT_BODY": {"value": "", "global": True, "method": "default"}, + "www.example.com_AUTO_REDIRECT_HTTP_TO_HTTPS": {"value": "yes", "global": True, "method": "default"}, + "www.example.com_GREYLIST_RDNS_GLOBAL": {"valu2024-07-31T13:58:29.679295487Z e": "yes", "global": True, "method": "default"}, + "www.example.com_ANTIBOT_HCAPTCHA_SECRET": {"value": "", "global": True, "method": "default"}, + "www.example.com_REVERSE_PROXY_URL": {"value": "/admin", "global": False, "method": "scheduler"}, + "www.example.com_SECURITYTXT_ENCRYPTION": {"value": "", "global": True, "method": "default"}, + "www.example.com_LIMIT_CONN_MAX_STREAM": {"value": "10", "global": True, "method": "default"}, + "www.example.com_PROXY_CACHE_KEY": {"value": "$scheme$host$request_uri", "global": True, "method": "default"}, + "www.example.com_CONTENT_SECURITY_POLICY": {"value": "object-src 'none'; form-action 'self'; frame-ancestors 'self';", "global": True, "method": "default"}, + "www.example.com_AUTO_LETS_ENCRYPT": {"value": "no", "global": True, "method": "default"}, + "www.example.com_REMOVE_HEADERS": { + "value": "Server Expect-CT X-Powered-By X-AspNet-Version X-AspNetMvc-Version Public-Key-Pins", + "global": True, + "method": "default", + }, + "www.example.com_USE_MODSECURITY_CRS": {"value": "yes", "global": True, "method": "default"}, + "www.example.com_WHITELIST_ASN": {"value": "32934", "global": True, "method": "default"}, + "www.example.com_SELF_SIGNED_SSL_EXPIRY": {"value": "365", "global": True, "method": "default"}, + "www.example.com_REDIRECT_TO_REQUEST_URI": {"value": "no", "global": True, "method": "default"}, + "www.example.com_HTTP3_ALT_SVC_PORT": {"value": "443", "global": True, "method": "default"}, + "www.example.com_BAD_BEHAVIOR_BAN_TIME": {"value": "86400", "global": True, "method": "default"}, +} + +templates = [ + { + "name": "default", + "steps": [], + "configs": {}, + "settings": {}, + } +] + +output = advanced_mode_builder(templates, plugins, global_config, total_config, service_name) +with open("advanced.json", "w") as f: + json.dump(output, f, indent=4) + +output_base64_bytes = base64.b64encode(bytes(json.dumps(output), "utf-8")) +output_base64_string = output_base64_bytes.decode("ascii") +with open("advanced.txt", "w") as f: + f.write(output_base64_string) diff --git a/src/ui/client/tests/advanced.txt b/src/ui/client/tests/advanced.txt new file mode 100644 index 000000000..ca2a3da81 --- /dev/null +++ b/src/ui/client/tests/advanced.txt @@ -0,0 +1 @@ +W3sidHlwZSI6ICJjYXJkIiwgImNvbnRhaW5lckNvbHVtbnMiOiB7InBjIjogMTIsICJ0YWJsZXQiOiAxMiwgIm1vYmlsZSI6IDEyfSwgIndpZGdldHMiOiBbeyJ0eXBlIjogIlRpdGxlIiwgImRhdGEiOiB7InRpdGxlIjogImFwcDEuZXhhbXBsZS5jb20iLCAidHlwZSI6ICJjb250YWluZXIiLCAibG93ZXJjYXNlIjogdHJ1ZX19LCB7InR5cGUiOiAiU3VidGl0bGUiLCAiZGF0YSI6IHsic3VidGl0bGUiOiAic2VydmljZXNfbWFuYWdlX3N1YnRpdGxlIiwgInR5cGUiOiAiY29udGFpbmVyIiwgInN1YnRpdGxlQ2xhc3MiOiAibWItNCJ9fSwgeyJ0eXBlIjogIlRlbXBsYXRlcyIsICJkYXRhIjogeyJ0ZW1wbGF0ZXMiOiB7ImFkdmFuY2VkIjogeyJkZWZhdWx0IjogW3siaWQiOiAiZ2VuZXJhbCIsICJzdHJlYW0iOiAicGFydGlhbCIsICJuYW1lIjogIkdlbmVyYWwiLCAiZGVzY3JpcHRpb24iOiAiVGhlIGdlbmVyYWwgc2V0dGluZ3MgZm9yIHRoZSBzZXJ2ZXIiLCAidmVyc2lvbiI6ICIwLjEiLCAidHlwZSI6ICJjb3JlIiwgIm1ldGhvZCI6ICJtYW51YWwiLCAicGFnZSI6IGZhbHNlLCAic2V0dGluZ3MiOiB7IlNFUlZFUl9OQU1FIjogeyJjb250ZXh0IjogIm11bHRpc2l0ZSIsICJkZWZhdWx0IjogInd3dy5leGFtcGxlLmNvbSIsICJoZWxwIjogIkxpc3Qgb2YgdGhlIHZpcnR1YWwgaG9zdHMgc2VydmVkIGJ5IGJ1bmtlcndlYi4iLCAiaWQiOiAic2VydmVyLW5hbWUiLCAibGFiZWwiOiAiU2VydmVyIG5hbWUiLCAicmVnZXgiOiAiXigoXFxTezEsMjU1fSkoPyEuKlxcc1xcMihcXHN8JCkpKT8oXFxzKFxcU3sxLDI1NX0pKD8hLipcXHNcXDUoXFxzfCQpKSkqJCIsICJ0eXBlIjogInRleHQiLCAiY29udGFpbmVyQ2xhc3MiOiAiei02IiwgInBhdHRlcm4iOiAiXigoXFxTezEsMjU1fSkoPyEuKlxcc1xcMihcXHN8JCkpKT8oXFxzKFxcU3sxLDI1NX0pKD8hLipcXHNcXDUoXFxzfCQpKSkqJCIsICJpbnBUeXBlIjogImlucHV0IiwgIm5hbWUiOiAiU2VydmVyIG5hbWUiLCAiY29sdW1ucyI6IHsicGMiOiA0LCAidGFibGV0IjogNiwgIm1vYmlsZSI6IDEyfSwgImRpc2FibGVkIjogZmFsc2UsICJ2YWx1ZSI6ICJhcHAxLmV4YW1wbGUuY29tIiwgIm1ldGhvZCI6ICJ1aSIsICJwcmV2X3ZhbHVlIjogImFwcDEuZXhhbXBsZS5jb20iLCAicG9wb3ZlcnMiOiBbeyJpY29uTmFtZSI6ICJkaXNrIiwgInRleHQiOiAiaW5wX3BvcG92ZXJfbXVsdGlzaXRlIn0sIHsiaWNvbk5hbWUiOiAiaW5mbyIsICJ0ZXh0IjogIkxpc3Qgb2YgdGhlIHZpcnR1YWwgaG9zdHMgc2VydmVkIGJ5IGJ1bmtlcndlYi4ifV19LCAiU0VSVkVSX1RZUEUiOiB7ImNvbnRleHQiOiAibXVsdGlzaXRlIiwgImRlZmF1bHQiOiAiaHR0cCIsICJoZWxwIjogIlNlcnZlciB0eXBlIDogaHR0cCBvciBzdHJlYW0uIiwgImlkIjogInNlcnZlci10eXBlIiwgImxhYmVsIjogIlNlcnZlciB0eXBlIiwgInJlZ2V4IjogIl4oaHR0cHxzdHJlYW0pJCIsICJ0eXBlIjogInNlbGVjdCIsICJjb250YWluZXJDbGFzcyI6ICJ6LTUiLCAicGF0dGVybiI6ICJeKGh0dHB8c3RyZWFtKSQiLCAiaW5wVHlwZSI6ICJzZWxlY3QiLCAibmFtZSI6ICJTZXJ2ZXIgdHlwZSIsICJ2YWx1ZXMiOiBbImh0dHAiLCAic3RyZWFtIl0sICJjb2x1bW5zIjogeyJwYyI6IDQsICJ0YWJsZXQiOiA2LCAibW9iaWxlIjogMTJ9LCAiZGlzYWJsZWQiOiBmYWxzZSwgInZhbHVlIjogImh0dHAiLCAibWV0aG9kIjogImRlZmF1bHQiLCAicHJldl92YWx1ZSI6ICJodHRwIiwgInBvcG92ZXJzIjogW3siaWNvbk5hbWUiOiAiZGlzayIsICJ0ZXh0IjogImlucF9wb3BvdmVyX211bHRpc2l0ZSJ9LCB7Imljb25OYW1lIjogImluZm8iLCAidGV4dCI6ICJTZXJ2ZXIgdHlwZSA6IGh0dHAgb3Igc3RyZWFtLiJ9XX0sICJMSVNURU5fU1RSRUFNIjogeyJjb250ZXh0IjogIm11bHRpc2l0ZSIsICJkZWZhdWx0IjogInllcyIsICJoZWxwIjogIkVuYWJsZSBsaXN0ZW5pbmcgZm9yIG5vbi1zc2wgKHBhc3N0aHJvdWdoKS4iLCAiaWQiOiAibGlzdGVuLXN0cmVhbSIsICJsYWJlbCI6ICJMaXN0ZW4gc3RyZWFtIiwgInJlZ2V4IjogIl4oeWVzfG5vKSQiLCAidHlwZSI6ICJjaGVjayIsICJjb250YWluZXJDbGFzcyI6ICJ6LTQiLCAicGF0dGVybiI6ICJeKHllc3xubykkIiwgImlucFR5cGUiOiAiY2hlY2tib3giLCAibmFtZSI6ICJMaXN0ZW4gc3RyZWFtIiwgImNvbHVtbnMiOiB7InBjIjogNCwgInRhYmxldCI6IDYsICJtb2JpbGUiOiAxMn0sICJkaXNhYmxlZCI6IGZhbHNlLCAidmFsdWUiOiAieWVzIiwgIm1ldGhvZCI6ICJkZWZhdWx0IiwgInByZXZfdmFsdWUiOiAieWVzIiwgInBvcG92ZXJzIjogW3siaWNvbk5hbWUiOiAiZGlzayIsICJ0ZXh0IjogImlucF9wb3BvdmVyX211bHRpc2l0ZSJ9LCB7Imljb25OYW1lIjogImluZm8iLCAidGV4dCI6ICJFbmFibGUgbGlzdGVuaW5nIGZvciBub24tc3NsIChwYXNzdGhyb3VnaCkuIn1dfSwgIkxJU1RFTl9TVFJFQU1fUE9SVCI6IHsiY29udGV4dCI6ICJtdWx0aXNpdGUiLCAiZGVmYXVsdCI6ICIxMzM3IiwgImhlbHAiOiAiTGlzdGVuaW5nIHBvcnQgZm9yIG5vbi1zc2wgKHBhc3N0aHJvdWdoKS4iLCAiaWQiOiAibGlzdGVuLXN0cmVhbS1wb3J0IiwgImxhYmVsIjogIkxpc3RlbiBzdHJlYW0gcG9ydCIsICJyZWdleCI6ICJeWzAtOV0rJCIsICJ0eXBlIjogInRleHQiLCAiY29udGFpbmVyQ2xhc3MiOiAiei0zIiwgInBhdHRlcm4iOiAiXlswLTldKyQiLCAiaW5wVHlwZSI6ICJpbnB1dCIsICJuYW1lIjogIkxpc3RlbiBzdHJlYW0gcG9ydCIsICJjb2x1bW5zIjogeyJwYyI6IDQsICJ0YWJsZXQiOiA2LCAibW9iaWxlIjogMTJ9LCAiZGlzYWJsZWQiOiBmYWxzZSwgInZhbHVlIjogIjEzMzciLCAibWV0aG9kIjogImRlZmF1bHQiLCAicHJldl92YWx1ZSI6ICIxMzM3IiwgInBvcG92ZXJzIjogW3siaWNvbk5hbWUiOiAiZGlzayIsICJ0ZXh0IjogImlucF9wb3BvdmVyX211bHRpc2l0ZSJ9LCB7Imljb25OYW1lIjogImluZm8iLCAidGV4dCI6ICJMaXN0ZW5pbmcgcG9ydCBmb3Igbm9uLXNzbCAocGFzc3Rocm91Z2gpLiJ9XX0sICJMSVNURU5fU1RSRUFNX1BPUlRfU1NMIjogeyJjb250ZXh0IjogIm11bHRpc2l0ZSIsICJkZWZhdWx0IjogIjQyNDIiLCAiaGVscCI6ICJMaXN0ZW5pbmcgcG9ydCBmb3Igc3NsIChwYXNzdGhyb3VnaCkuIiwgImlkIjogImxpc3Rlbi1zdHJlYW0tcG9ydC1zc2wiLCAibGFiZWwiOiAiTGlzdGVuIHN0cmVhbSBwb3J0IHNzbCIsICJyZWdleCI6ICJeWzAtOV0rJCIsICJ0eXBlIjogInRleHQiLCAiY29udGFpbmVyQ2xhc3MiOiAiei0yIiwgInBhdHRlcm4iOiAiXlswLTldKyQiLCAiaW5wVHlwZSI6ICJpbnB1dCIsICJuYW1lIjogIkxpc3RlbiBzdHJlYW0gcG9ydCBzc2wiLCAiY29sdW1ucyI6IHsicGMiOiA0LCAidGFibGV0IjogNiwgIm1vYmlsZSI6IDEyfSwgImRpc2FibGVkIjogZmFsc2UsICJ2YWx1ZSI6ICI0MjQyIiwgIm1ldGhvZCI6ICJkZWZhdWx0IiwgInByZXZfdmFsdWUiOiAiNDI0MiIsICJwb3BvdmVycyI6IFt7Imljb25OYW1lIjogImRpc2siLCAidGV4dCI6ICJpbnBfcG9wb3Zlcl9tdWx0aXNpdGUifSwgeyJpY29uTmFtZSI6ICJpbmZvIiwgInRleHQiOiAiTGlzdGVuaW5nIHBvcnQgZm9yIHNzbCAocGFzc3Rocm91Z2gpLiJ9XX0sICJVU0VfVURQIjogeyJjb250ZXh0IjogIm11bHRpc2l0ZSIsICJkZWZhdWx0IjogIm5vIiwgImhlbHAiOiAiVURQIGxpc3RlbiBpbnN0ZWFkIG9mIFRDUCAoc3RyZWFtKS4iLCAiaWQiOiAidXNlLXVkcCIsICJsYWJlbCI6ICJMaXN0ZW4gVURQIiwgInJlZ2V4IjogIl4oeWVzfG5vKSQiLCAidHlwZSI6ICJjaGVjayIsICJjb250YWluZXJDbGFzcyI6ICJ6LTEiLCAicGF0dGVybiI6ICJeKHllc3xubykkIiwgImlucFR5cGUiOiAiY2hlY2tib3giLCAibmFtZSI6ICJMaXN0ZW4gVURQIiwgImNvbHVtbnMiOiB7InBjIjogNCwgInRhYmxldCI6IDYsICJtb2JpbGUiOiAxMn0sICJkaXNhYmxlZCI6IGZhbHNlLCAidmFsdWUiOiAibm8iLCAibWV0aG9kIjogImRlZmF1bHQiLCAicHJldl92YWx1ZSI6ICJubyIsICJwb3BvdmVycyI6IFt7Imljb25OYW1lIjogImRpc2siLCAidGV4dCI6ICJpbnBfcG9wb3Zlcl9tdWx0aXNpdGUifSwgeyJpY29uTmFtZSI6ICJpbmZvIiwgInRleHQiOiAiVURQIGxpc3RlbiBpbnN0ZWFkIG9mIFRDUCAoc3RyZWFtKS4ifV19LCAiSVNfRFJBRlQiOiB7ImNvbnRleHQiOiAibXVsdGlzaXRlIiwgImRlZmF1bHQiOiAibm8iLCAiaGVscCI6ICJJbnRlcm5hbCB1c2UgOiBzZXQgdG8geWVzIHdoZW4gdGhlIHNlcnZpY2UgaXMgaW4gZHJhZnQgbW9kZS4iLCAiaWQiOiAiaW50ZXJuYWwtdXNlLWRyYWZ0IiwgImxhYmVsIjogImludGVybmFsIHVzZSBkcmFmdCIsICJyZWdleCI6ICJeKHllc3xubykkIiwgInR5cGUiOiAiY2hlY2siLCAiY29udGFpbmVyQ2xhc3MiOiAiei0wIiwgInBhdHRlcm4iOiAiXih5ZXN8bm8pJCIsICJpbnBUeXBlIjogImNoZWNrYm94IiwgIm5hbWUiOiAiaW50ZXJuYWwgdXNlIGRyYWZ0IiwgImNvbHVtbnMiOiB7InBjIjogNCwgInRhYmxldCI6IDYsICJtb2JpbGUiOiAxMn0sICJkaXNhYmxlZCI6IGZhbHNlLCAidmFsdWUiOiAibm8iLCAibWV0aG9kIjogImRlZmF1bHQiLCAicHJldl92YWx1ZSI6ICJubyIsICJwb3BvdmVycyI6IFt7Imljb25OYW1lIjogImRpc2siLCAidGV4dCI6ICJpbnBfcG9wb3Zlcl9tdWx0aXNpdGUifSwgeyJpY29uTmFtZSI6ICJpbmZvIiwgInRleHQiOiAiSW50ZXJuYWwgdXNlIDogc2V0IHRvIHllcyB3aGVuIHRoZSBzZXJ2aWNlIGlzIGluIGRyYWZ0IG1vZGUuIn1dfX0sICJjaGVja3N1bSI6IG51bGx9LCB7ImlkIjogImFudGlib3QiLCAic3RyZWFtIjogIm5vIiwgIm5hbWUiOiAiQW50aWJvdCIsICJkZXNjcmlwdGlvbiI6ICJCb3QgZGV0ZWN0aW9uIGJ5IHVzaW5nIGEgY2hhbGxlbmdlLiIsICJ2ZXJzaW9uIjogIjEuMCIsICJ0eXBlIjogImNvcmUiLCAibWV0aG9kIjogIm1hbnVhbCIsICJwYWdlIjogdHJ1ZSwgInNldHRpbmdzIjogeyJVU0VfQU5USUJPVCI6IHsiY29udGV4dCI6ICJtdWx0aXNpdGUiLCAiZGVmYXVsdCI6ICJubyIsICJoZWxwIjogIkFjdGl2YXRlIGFudGlib3QgZmVhdHVyZS4iLCAiaWQiOiAidXNlLWFudGlib3QiLCAibGFiZWwiOiAiQW50aWJvdCBjaGFsbGVuZ2UiLCAicmVnZXgiOiAiXihub3xjb29raWV8amF2YXNjcmlwdHxjYXB0Y2hhfHJlY2FwdGNoYXxoY2FwdGNoYXx0dXJuc3RpbGUpJCIsICJ0eXBlIjogInNlbGVjdCIsICJjb250YWluZXJDbGFzcyI6ICJ6LTEwIiwgInBhdHRlcm4iOiAiXihub3xjb29raWV8amF2YXNjcmlwdHxjYXB0Y2hhfHJlY2FwdGNoYXxoY2FwdGNoYXx0dXJuc3RpbGUpJCIsICJpbnBUeXBlIjogInNlbGVjdCIsICJuYW1lIjogIkFudGlib3QgY2hhbGxlbmdlIiwgInZhbHVlcyI6IFsiY2FwdGNoYSIsICJjb29raWUiLCAiaGNhcHRjaGEiLCAiamF2YXNjcmlwdCIsICJubyIsICJyZWNhcHRjaGEiLCAidHVybnN0aWxlIl0sICJjb2x1bW5zIjogeyJwYyI6IDQsICJ0YWJsZXQiOiA2LCAibW9iaWxlIjogMTJ9LCAiZGlzYWJsZWQiOiBmYWxzZSwgInZhbHVlIjogIm5vIiwgIm1ldGhvZCI6ICJkZWZhdWx0IiwgInByZXZfdmFsdWUiOiAibm8iLCAicG9wb3ZlcnMiOiBbeyJpY29uTmFtZSI6ICJkaXNrIiwgInRleHQiOiAiaW5wX3BvcG92ZXJfbXVsdGlzaXRlIn0sIHsiaWNvbk5hbWUiOiAiaW5mbyIsICJ0ZXh0IjogIkFjdGl2YXRlIGFudGlib3QgZmVhdHVyZS4ifV19LCAiQU5USUJPVF9VUkkiOiB7ImNvbnRleHQiOiAibXVsdGlzaXRlIiwgImRlZmF1bHQiOiAiL2NoYWxsZW5nZSIsICJoZWxwIjogIlVudXNlZCBVUkkgdGhhdCBjbGllbnRzIHdpbGwgYmUgcmVkaXJlY3RlZCB0byB0byBzb2x2ZSB0aGUgY2hhbGxlbmdlLiIsICJpZCI6ICJhbnRpYm90LXVyaSIsICJsYWJlbCI6ICJBbnRpYm90IFVSTCIsICJyZWdleCI6ICJeXFwvW1xcd1xcXS5+OlxcLz8jXFxbQCEkXFwmJ1xcKFxcKSorLDs9XFwtXSokIiwgInR5cGUiOiAidGV4dCIsICJjb250YWluZXJDbGFzcyI6ICJ6LTkiLCAicGF0dGVybiI6ICJeXFwvW1xcd1xcXS5+OlxcLz8jXFxbQCEkXFwmJ1xcKFxcKSorLDs9XFwtXSokIiwgImlucFR5cGUiOiAiaW5wdXQiLCAibmFtZSI6ICJBbnRpYm90IFVSTCIsICJjb2x1bW5zIjogeyJwYyI6IDQsICJ0YWJsZXQiOiA2LCAibW9iaWxlIjogMTJ9LCAiZGlzYWJsZWQiOiBmYWxzZSwgInZhbHVlIjogIi9jaGFsbGVuZ2UiLCAibWV0aG9kIjogImRlZmF1bHQiLCAicHJldl92YWx1ZSI6ICIvY2hhbGxlbmdlIiwgInBvcG92ZXJzIjogW3siaWNvbk5hbWUiOiAiZGlzayIsICJ0ZXh0IjogImlucF9wb3BvdmVyX211bHRpc2l0ZSJ9LCB7Imljb25OYW1lIjogImluZm8iLCAidGV4dCI6ICJVbnVzZWQgVVJJIHRoYXQgY2xpZW50cyB3aWxsIGJlIHJlZGlyZWN0ZWQgdG8gdG8gc29sdmUgdGhlIGNoYWxsZW5nZS4ifV19LCAiQU5USUJPVF9USU1FX1JFU09MVkUiOiB7ImNvbnRleHQiOiAibXVsdGlzaXRlIiwgImRlZmF1bHQiOiAiNjAiLCAiaGVscCI6ICJNYXhpbXVtIHRpbWUgKGluIHNlY29uZHMpIGNsaWVudHMgaGF2ZSB0byByZXNvbHZlIHRoZSBjaGFsbGVuZ2UuIE9uY2UgdGhpcyB0aW1lIGhhcyBwYXNzZWQsIGEgbmV3IGNoYWxsZW5nZSB3aWxsIGJlIGdlbmVyYXRlZC4iLCAiaWQiOiAiYW50aWJvdC10aW1lLXJlc29sdmUiLCAibGFiZWwiOiAiVGltZSB0byByZXNvbHZlIiwgInJlZ2V4IjogIl5bMC05XSskIiwgInR5cGUiOiAidGV4dCIsICJjb250YWluZXJDbGFzcyI6ICJ6LTgiLCAicGF0dGVybiI6ICJeWzAtOV0rJCIsICJpbnBUeXBlIjogImlucHV0IiwgIm5hbWUiOiAiVGltZSB0byByZXNvbHZlIiwgImNvbHVtbnMiOiB7InBjIjogNCwgInRhYmxldCI6IDYsICJtb2JpbGUiOiAxMn0sICJkaXNhYmxlZCI6IGZhbHNlLCAidmFsdWUiOiAiNjAiLCAibWV0aG9kIjogImRlZmF1bHQiLCAicHJldl92YWx1ZSI6ICI2MCIsICJwb3BvdmVycyI6IFt7Imljb25OYW1lIjogImRpc2siLCAidGV4dCI6ICJpbnBfcG9wb3Zlcl9tdWx0aXNpdGUifSwgeyJpY29uTmFtZSI6ICJpbmZvIiwgInRleHQiOiAiTWF4aW11bSB0aW1lIChpbiBzZWNvbmRzKSBjbGllbnRzIGhhdmUgdG8gcmVzb2x2ZSB0aGUgY2hhbGxlbmdlLiBPbmNlIHRoaXMgdGltZSBoYXMgcGFzc2VkLCBhIG5ldyBjaGFsbGVuZ2Ugd2lsbCBiZSBnZW5lcmF0ZWQuIn1dfSwgIkFOVElCT1RfVElNRV9WQUxJRCI6IHsiY29udGV4dCI6ICJtdWx0aXNpdGUiLCAiZGVmYXVsdCI6ICI4NjQwMCIsICJoZWxwIjogIk1heGltdW0gdmFsaWRpdHkgdGltZSBvZiBzb2x2ZWQgY2hhbGxlbmdlcy4gT25jZSB0aGlzIHRpbWUgaGFzIHBhc3NlZCwgY2xpZW50cyB3aWxsIG5lZWQgdG8gcmVzb2x2ZSBhIG5ldyBvbmUuIiwgImlkIjogImFudGlib3QtdGltZS12YWxpZCIsICJsYWJlbCI6ICJUaW1lIHZhbGlkIiwgInJlZ2V4IjogIl5bMC05XSskIiwgInR5cGUiOiAidGV4dCIsICJjb250YWluZXJDbGFzcyI6ICJ6LTciLCAicGF0dGVybiI6ICJeWzAtOV0rJCIsICJpbnBUeXBlIjogImlucHV0IiwgIm5hbWUiOiAiVGltZSB2YWxpZCIsICJjb2x1bW5zIjogeyJwYyI6IDQsICJ0YWJsZXQiOiA2LCAibW9iaWxlIjogMTJ9LCAiZGlzYWJsZWQiOiBmYWxzZSwgInZhbHVlIjogIjg2NDAwIiwgIm1ldGhvZCI6ICJkZWZhdWx0IiwgInByZXZfdmFsdWUiOiAiODY0MDAiLCAicG9wb3ZlcnMiOiBbeyJpY29uTmFtZSI6ICJkaXNrIiwgInRleHQiOiAiaW5wX3BvcG92ZXJfbXVsdGlzaXRlIn0sIHsiaWNvbk5hbWUiOiAiaW5mbyIsICJ0ZXh0IjogIk1heGltdW0gdmFsaWRpdHkgdGltZSBvZiBzb2x2ZWQgY2hhbGxlbmdlcy4gT25jZSB0aGlzIHRpbWUgaGFzIHBhc3NlZCwgY2xpZW50cyB3aWxsIG5lZWQgdG8gcmVzb2x2ZSBhIG5ldyBvbmUuIn1dfSwgIkFOVElCT1RfUkVDQVBUQ0hBX1NDT1JFIjogeyJjb250ZXh0IjogIm11bHRpc2l0ZSIsICJkZWZhdWx0IjogIjAuNyIsICJoZWxwIjogIk1pbmltdW0gc2NvcmUgcmVxdWlyZWQgZm9yIHJlQ0FQVENIQSBjaGFsbGVuZ2UuIiwgImlkIjogImFudGlib3QtcmVjYXB0Y2hhLXNjb3JlIiwgImxhYmVsIjogInJlQ0FQVENIQSBzY29yZSIsICJyZWdleCI6ICJeKDBcXC5bMS05XXwxXFwuMCkkIiwgInR5cGUiOiAidGV4dCIsICJjb250YWluZXJDbGFzcyI6ICJ6LTYiLCAicGF0dGVybiI6ICJeKDBcXC5bMS05XXwxXFwuMCkkIiwgImlucFR5cGUiOiAiaW5wdXQiLCAibmFtZSI6ICJyZUNBUFRDSEEgc2NvcmUiLCAiY29sdW1ucyI6IHsicGMiOiA0LCAidGFibGV0IjogNiwgIm1vYmlsZSI6IDEyfSwgImRpc2FibGVkIjogZmFsc2UsICJ2YWx1ZSI6ICIwLjciLCAibWV0aG9kIjogImRlZmF1bHQiLCAicHJldl92YWx1ZSI6ICIwLjciLCAicG9wb3ZlcnMiOiBbeyJpY29uTmFtZSI6ICJkaXNrIiwgInRleHQiOiAiaW5wX3BvcG92ZXJfbXVsdGlzaXRlIn0sIHsiaWNvbk5hbWUiOiAiaW5mbyIsICJ0ZXh0IjogIk1pbmltdW0gc2NvcmUgcmVxdWlyZWQgZm9yIHJlQ0FQVENIQSBjaGFsbGVuZ2UuIn1dfSwgIkFOVElCT1RfUkVDQVBUQ0hBX1NJVEVLRVkiOiB7ImNvbnRleHQiOiAibXVsdGlzaXRlIiwgImRlZmF1bHQiOiAiIiwgImhlbHAiOiAiU2l0ZWtleSBmb3IgcmVDQVBUQ0hBIGNoYWxsZW5nZS4iLCAiaWQiOiAiYW50aWJvdC1yZWNhcHRjaGEtc2l0ZWtleSIsICJsYWJlbCI6ICJyZUNBUFRDSEEgc2l0ZWtleSIsICJyZWdleCI6ICJeW1xcd1xcLV0qJCIsICJ0eXBlIjogInRleHQiLCAiY29udGFpbmVyQ2xhc3MiOiAiei01IiwgInBhdHRlcm4iOiAiXltcXHdcXC1dKiQiLCAiaW5wVHlwZSI6ICJpbnB1dCIsICJuYW1lIjogInJlQ0FQVENIQSBzaXRla2V5IiwgImNvbHVtbnMiOiB7InBjIjogNCwgInRhYmxldCI6IDYsICJtb2JpbGUiOiAxMn0sICJkaXNhYmxlZCI6IGZhbHNlLCAidmFsdWUiOiAiIiwgIm1ldGhvZCI6ICJkZWZhdWx0IiwgInByZXZfdmFsdWUiOiAiIiwgInBvcG92ZXJzIjogW3siaWNvbk5hbWUiOiAiZGlzayIsICJ0ZXh0IjogImlucF9wb3BvdmVyX211bHRpc2l0ZSJ9LCB7Imljb25OYW1lIjogImluZm8iLCAidGV4dCI6ICJTaXRla2V5IGZvciByZUNBUFRDSEEgY2hhbGxlbmdlLiJ9XX0sICJBTlRJQk9UX1JFQ0FQVENIQV9TRUNSRVQiOiB7ImNvbnRleHQiOiAibXVsdGlzaXRlIiwgImRlZmF1bHQiOiAiIiwgImhlbHAiOiAiU2VjcmV0IGZvciByZUNBUFRDSEEgY2hhbGxlbmdlLiIsICJpZCI6ICJhbnRpYm90LXJlY2FwdGNoYS1zZWNyZXQiLCAibGFiZWwiOiAicmVDQVBUQ0hBIHNlY3JldCIsICJyZWdleCI6ICJeW1xcd1xcLV0qJCIsICJ0eXBlIjogInBhc3N3b3JkIiwgImNvbnRhaW5lckNsYXNzIjogInotNCIsICJwYXR0ZXJuIjogIl5bXFx3XFwtXSokIiwgImlucFR5cGUiOiAiaW5wdXQiLCAibmFtZSI6ICJyZUNBUFRDSEEgc2VjcmV0IiwgImNvbHVtbnMiOiB7InBjIjogNCwgInRhYmxldCI6IDYsICJtb2JpbGUiOiAxMn0sICJkaXNhYmxlZCI6IGZhbHNlLCAidmFsdWUiOiAiIiwgIm1ldGhvZCI6ICJkZWZhdWx0IiwgInByZXZfdmFsdWUiOiAiIiwgInBvcG92ZXJzIjogW3siaWNvbk5hbWUiOiAiZGlzayIsICJ0ZXh0IjogImlucF9wb3BvdmVyX211bHRpc2l0ZSJ9LCB7Imljb25OYW1lIjogImluZm8iLCAidGV4dCI6ICJTZWNyZXQgZm9yIHJlQ0FQVENIQSBjaGFsbGVuZ2UuIn1dfSwgIkFOVElCT1RfSENBUFRDSEFfU0lURUtFWSI6IHsiY29udGV4dCI6ICJtdWx0aXNpdGUiLCAiZGVmYXVsdCI6ICIiLCAiaGVscCI6ICJTaXRla2V5IGZvciBoQ2FwdGNoYSBjaGFsbGVuZ2UuIiwgImlkIjogImFudGlib3QtaGNhcHRjaGEtc2l0ZWtleSIsICJsYWJlbCI6ICJoQ2FwdGNoYSBzaXRla2V5IiwgInJlZ2V4IjogIl5bYS16QS1aMC05XFwtXSokIiwgInR5cGUiOiAidGV4dCIsICJjb250YWluZXJDbGFzcyI6ICJ6LTMiLCAicGF0dGVybiI6ICJeW2EtekEtWjAtOVxcLV0qJCIsICJpbnBUeXBlIjogImlucHV0IiwgIm5hbWUiOiAiaENhcHRjaGEgc2l0ZWtleSIsICJjb2x1bW5zIjogeyJwYyI6IDQsICJ0YWJsZXQiOiA2LCAibW9iaWxlIjogMTJ9LCAiZGlzYWJsZWQiOiBmYWxzZSwgInZhbHVlIjogIiIsICJtZXRob2QiOiAiZGVmYXVsdCIsICJwcmV2X3ZhbHVlIjogIiIsICJwb3BvdmVycyI6IFt7Imljb25OYW1lIjogImRpc2siLCAidGV4dCI6ICJpbnBfcG9wb3Zlcl9tdWx0aXNpdGUifSwgeyJpY29uTmFtZSI6ICJpbmZvIiwgInRleHQiOiAiU2l0ZWtleSBmb3IgaENhcHRjaGEgY2hhbGxlbmdlLiJ9XX0sICJBTlRJQk9UX0hDQVBUQ0hBX1NFQ1JFVCI6IHsiY29udGV4dCI6ICJtdWx0aXNpdGUiLCAiZGVmYXVsdCI6ICIiLCAiaGVscCI6ICJTZWNyZXQgZm9yIGhDYXB0Y2hhIGNoYWxsZW5nZS4iLCAiaWQiOiAiYW50aWJvdC1oY2FwdGNoYS1zZWNyZXQiLCAibGFiZWwiOiAiaENhcHRjaGEgc2VjcmV0IiwgInJlZ2V4IjogIl5cXHcqJCIsICJ0eXBlIjogInBhc3N3b3JkIiwgImNvbnRhaW5lckNsYXNzIjogInotMiIsICJwYXR0ZXJuIjogIl5cXHcqJCIsICJpbnBUeXBlIjogImlucHV0IiwgIm5hbWUiOiAiaENhcHRjaGEgc2VjcmV0IiwgImNvbHVtbnMiOiB7InBjIjogNCwgInRhYmxldCI6IDYsICJtb2JpbGUiOiAxMn0sICJkaXNhYmxlZCI6IGZhbHNlLCAidmFsdWUiOiAiIiwgIm1ldGhvZCI6ICJkZWZhdWx0IiwgInByZXZfdmFsdWUiOiAiIiwgInBvcG92ZXJzIjogW3siaWNvbk5hbWUiOiAiZGlzayIsICJ0ZXh0IjogImlucF9wb3BvdmVyX211bHRpc2l0ZSJ9LCB7Imljb25OYW1lIjogImluZm8iLCAidGV4dCI6ICJTZWNyZXQgZm9yIGhDYXB0Y2hhIGNoYWxsZW5nZS4ifV19LCAiQU5USUJPVF9UVVJOU1RJTEVfU0lURUtFWSI6IHsiY29udGV4dCI6ICJtdWx0aXNpdGUiLCAiZGVmYXVsdCI6ICIiLCAiaGVscCI6ICJTaXRla2V5IGZvciBUdXJuc3RpbGUgY2hhbGxlbmdlLiIsICJpZCI6ICJhbnRpYm90LXR1cm5zdGlsZS1zaXRla2V5IiwgImxhYmVsIjogIlR1cm5zdGlsZSBzaXRla2V5IiwgInJlZ2V4IjogIl4oMHhbXFx3XFwtXSspPyQiLCAidHlwZSI6ICJ0ZXh0IiwgImNvbnRhaW5lckNsYXNzIjogInotMSIsICJwYXR0ZXJuIjogIl4oMHhbXFx3XFwtXSspPyQiLCAiaW5wVHlwZSI6ICJpbnB1dCIsICJuYW1lIjogIlR1cm5zdGlsZSBzaXRla2V5IiwgImNvbHVtbnMiOiB7InBjIjogNCwgInRhYmxldCI6IDYsICJtb2JpbGUiOiAxMn0sICJkaXNhYmxlZCI6IGZhbHNlLCAidmFsdWUiOiAiIiwgIm1ldGhvZCI6ICJkZWZhdWx0IiwgInByZXZfdmFsdWUiOiAiIiwgInBvcG92ZXJzIjogW3siaWNvbk5hbWUiOiAiZGlzayIsICJ0ZXh0IjogImlucF9wb3BvdmVyX211bHRpc2l0ZSJ9LCB7Imljb25OYW1lIjogImluZm8iLCAidGV4dCI6ICJTaXRla2V5IGZvciBUdXJuc3RpbGUgY2hhbGxlbmdlLiJ9XX0sICJBTlRJQk9UX1RVUk5TVElMRV9TRUNSRVQiOiB7ImNvbnRleHQiOiAibXVsdGlzaXRlIiwgImRlZmF1bHQiOiAiIiwgImhlbHAiOiAiU2VjcmV0IGZvciBUdXJuc3RpbGUgY2hhbGxlbmdlLiIsICJpZCI6ICJhbnRpYm90LXR1cm5zdGlsZS1zZWNyZXQiLCAibGFiZWwiOiAiVHVybnN0aWxlIHNlY3JldCIsICJyZWdleCI6ICJeKDB4W1xcd1xcLV0rKT8kIiwgInR5cGUiOiAicGFzc3dvcmQiLCAiY29udGFpbmVyQ2xhc3MiOiAiei0wIiwgInBhdHRlcm4iOiAiXigweFtcXHdcXC1dKyk/JCIsICJpbnBUeXBlIjogImlucHV0IiwgIm5hbWUiOiAiVHVybnN0aWxlIHNlY3JldCIsICJjb2x1bW5zIjogeyJwYyI6IDQsICJ0YWJsZXQiOiA2LCAibW9iaWxlIjogMTJ9LCAiZGlzYWJsZWQiOiBmYWxzZSwgInZhbHVlIjogIiIsICJtZXRob2QiOiAiZGVmYXVsdCIsICJwcmV2X3ZhbHVlIjogIiIsICJwb3BvdmVycyI6IFt7Imljb25OYW1lIjogImRpc2siLCAidGV4dCI6ICJpbnBfcG9wb3Zlcl9tdWx0aXNpdGUifSwgeyJpY29uTmFtZSI6ICJpbmZvIiwgInRleHQiOiAiU2VjcmV0IGZvciBUdXJuc3RpbGUgY2hhbGxlbmdlLiJ9XX19LCAiY2hlY2tzdW0iOiBudWxsfSwgeyJpZCI6ICJhdXRoYmFzaWMiLCAic3RyZWFtIjogIm5vIiwgIm5hbWUiOiAiQXV0aCBiYXNpYyIsICJkZXNjcmlwdGlvbiI6ICJFbmZvcmNlIGxvZ2luIGJlZm9yZSBhY2Nlc3NpbmcgYSByZXNvdXJjZSBvciB0aGUgd2hvbGUgc2l0ZSB1c2luZyBIVFRQIGJhc2ljIGF1dGggbWV0aG9kLiIsICJ2ZXJzaW9uIjogIjEuMCIsICJ0eXBlIjogImNvcmUiLCAibWV0aG9kIjogIm1hbnVhbCIsICJwYWdlIjogZmFsc2UsICJzZXR0aW5ncyI6IHsiVVNFX0FVVEhfQkFTSUMiOiB7ImNvbnRleHQiOiAibXVsdGlzaXRlIiwgImRlZmF1bHQiOiAibm8iLCAiaGVscCI6ICJVc2UgSFRUUCBiYXNpYyBhdXRoIiwgImlkIjogInVzZS1hdXRoLWJhc2ljIiwgImxhYmVsIjogIlVzZSBIVFRQIGJhc2ljIGF1dGgiLCAicmVnZXgiOiAiXih5ZXN8bm8pJCIsICJ0eXBlIjogImNoZWNrIiwgImNvbnRhaW5lckNsYXNzIjogInotNCIsICJwYXR0ZXJuIjogIl4oeWVzfG5vKSQiLCAiaW5wVHlwZSI6ICJjaGVja2JveCIsICJuYW1lIjogIlVzZSBIVFRQIGJhc2ljIGF1dGgiLCAiY29sdW1ucyI6IHsicGMiOiA0LCAidGFibGV0IjogNiwgIm1vYmlsZSI6IDEyfSwgImRpc2FibGVkIjogZmFsc2UsICJ2YWx1ZSI6ICJubyIsICJtZXRob2QiOiAiZGVmYXVsdCIsICJwcmV2X3ZhbHVlIjogIm5vIiwgInBvcG92ZXJzIjogW3siaWNvbk5hbWUiOiAiZGlzayIsICJ0ZXh0IjogImlucF9wb3BvdmVyX211bHRpc2l0ZSJ9LCB7Imljb25OYW1lIjogImluZm8iLCAidGV4dCI6ICJVc2UgSFRUUCBiYXNpYyBhdXRoIn1dfSwgIkFVVEhfQkFTSUNfTE9DQVRJT04iOiB7ImNvbnRleHQiOiAibXVsdGlzaXRlIiwgImRlZmF1bHQiOiAic2l0ZXdpZGUiLCAiaGVscCI6ICJVUkwgb2YgdGhlIHByb3RlY3RlZCByZXNvdXJjZSBvciBzaXRld2lkZSB2YWx1ZS4iLCAiaWQiOiAiYXV0aC1iYXNpYy1sb2NhdGlvbiIsICJsYWJlbCI6ICJBdXRoIGJhc2ljIExvY2F0aW9uIiwgInJlZ2V4IjogIl4oc2l0ZXdpZGV8L1thLXpBLVowLTkuXFwvXFwtXSopJCIsICJ0eXBlIjogInRleHQiLCAiY29udGFpbmVyQ2xhc3MiOiAiei0zIiwgInBhdHRlcm4iOiAiXihzaXRld2lkZXwvW2EtekEtWjAtOS5cXC9cXC1dKikkIiwgImlucFR5cGUiOiAiaW5wdXQiLCAibmFtZSI6ICJBdXRoIGJhc2ljIExvY2F0aW9uIiwgImNvbHVtbnMiOiB7InBjIjogNCwgInRhYmxldCI6IDYsICJtb2JpbGUiOiAxMn0sICJkaXNhYmxlZCI6IGZhbHNlLCAidmFsdWUiOiAic2l0ZXdpZGUiLCAibWV0aG9kIjogImRlZmF1bHQiLCAicHJldl92YWx1ZSI6ICJzaXRld2lkZSIsICJwb3BvdmVycyI6IFt7Imljb25OYW1lIjogImRpc2siLCAidGV4dCI6ICJpbnBfcG9wb3Zlcl9tdWx0aXNpdGUifSwgeyJpY29uTmFtZSI6ICJpbmZvIiwgInRleHQiOiAiVVJMIG9mIHRoZSBwcm90ZWN0ZWQgcmVzb3VyY2Ugb3Igc2l0ZXdpZGUgdmFsdWUuIn1dfSwgIkFVVEhfQkFTSUNfVVNFUiI6IHsiY29udGV4dCI6ICJtdWx0aXNpdGUiLCAiZGVmYXVsdCI6ICJjaGFuZ2VtZSIsICJoZWxwIjogIlVzZXJuYW1lIiwgImlkIjogImF1dGgtYmFzaWMtdXNlciIsICJsYWJlbCI6ICJBdXRoIGJhc2ljIFVzZXJuYW1lIiwgInJlZ2V4IjogIl5bXFx3XFwtXSsiLCAidHlwZSI6ICJ0ZXh0IiwgImNvbnRhaW5lckNsYXNzIjogInotMiIsICJwYXR0ZXJuIjogIl5bXFx3XFwtXSsiLCAiaW5wVHlwZSI6ICJpbnB1dCIsICJuYW1lIjogIkF1dGggYmFzaWMgVXNlcm5hbWUiLCAiY29sdW1ucyI6IHsicGMiOiA0LCAidGFibGV0IjogNiwgIm1vYmlsZSI6IDEyfSwgImRpc2FibGVkIjogZmFsc2UsICJ2YWx1ZSI6ICJjaGFuZ2VtZSIsICJtZXRob2QiOiAiZGVmYXVsdCIsICJwcmV2X3ZhbHVlIjogImNoYW5nZW1lIiwgInBvcG92ZXJzIjogW3siaWNvbk5hbWUiOiAiZGlzayIsICJ0ZXh0IjogImlucF9wb3BvdmVyX211bHRpc2l0ZSJ9LCB7Imljb25OYW1lIjogImluZm8iLCAidGV4dCI6ICJVc2VybmFtZSJ9XX0sICJBVVRIX0JBU0lDX1BBU1NXT1JEIjogeyJjb250ZXh0IjogIm11bHRpc2l0ZSIsICJkZWZhdWx0IjogImNoYW5nZW1lIiwgImhlbHAiOiAiUGFzc3dvcmQiLCAiaWQiOiAiYXV0aC1iYXNpYy1wYXNzd29yZCIsICJsYWJlbCI6ICJQYXNzd29yZCIsICJyZWdleCI6ICJeLisiLCAidHlwZSI6ICJwYXNzd29yZCIsICJjb250YWluZXJDbGFzcyI6ICJ6LTEiLCAicGF0dGVybiI6ICJeLisiLCAiaW5wVHlwZSI6ICJpbnB1dCIsICJuYW1lIjogIlBhc3N3b3JkIiwgImNvbHVtbnMiOiB7InBjIjogNCwgInRhYmxldCI6IDYsICJtb2JpbGUiOiAxMn0sICJkaXNhYmxlZCI6IGZhbHNlLCAidmFsdWUiOiAiY2hhbmdlbWUiLCAibWV0aG9kIjogImRlZmF1bHQiLCAicHJldl92YWx1ZSI6ICJjaGFuZ2VtZSIsICJwb3BvdmVycyI6IFt7Imljb25OYW1lIjogImRpc2siLCAidGV4dCI6ICJpbnBfcG9wb3Zlcl9tdWx0aXNpdGUifSwgeyJpY29uTmFtZSI6ICJpbmZvIiwgInRleHQiOiAiUGFzc3dvcmQifV19LCAiQVVUSF9CQVNJQ19URVhUIjogeyJjb250ZXh0IjogIm11bHRpc2l0ZSIsICJkZWZhdWx0IjogIlJlc3RyaWN0ZWQgYXJlYSIsICJoZWxwIjogIlRleHQgdG8gZGlzcGxheSIsICJpZCI6ICJhdXRoLWJhc2ljLXRleHQiLCAibGFiZWwiOiAiVGV4dCIsICJyZWdleCI6ICJeLisiLCAidHlwZSI6ICJ0ZXh0IiwgImNvbnRhaW5lckNsYXNzIjogInotMCIsICJwYXR0ZXJuIjogIl4uKyIsICJpbnBUeXBlIjogImlucHV0IiwgIm5hbWUiOiAiVGV4dCIsICJjb2x1bW5zIjogeyJwYyI6IDQsICJ0YWJsZXQiOiA2LCAibW9iaWxlIjogMTJ9LCAiZGlzYWJsZWQiOiBmYWxzZSwgInZhbHVlIjogIlJlc3RyaWN0ZWQgYXJlYSIsICJtZXRob2QiOiAiZGVmYXVsdCIsICJwcmV2X3ZhbHVlIjogIlJlc3RyaWN0ZWQgYXJlYSIsICJwb3BvdmVycyI6IFt7Imljb25OYW1lIjogImRpc2siLCAidGV4dCI6ICJpbnBfcG9wb3Zlcl9tdWx0aXNpdGUifSwgeyJpY29uTmFtZSI6ICJpbmZvIiwgInRleHQiOiAiVGV4dCB0byBkaXNwbGF5In1dfX0sICJjaGVja3N1bSI6IG51bGx9LCB7ImlkIjogImJhZGJlaGF2aW9yIiwgInN0cmVhbSI6ICJ5ZXMiLCAibmFtZSI6ICJCYWQgYmVoYXZpb3IiLCAiZGVzY3JpcHRpb24iOiAiQmFuIElQIGdlbmVyYXRpbmcgdG9vIG11Y2ggJ2JhZCcgSFRUUCBzdGF0dXMgY29kZSBpbiBhIHBlcmlvZCBvZiB0aW1lLiIsICJ2ZXJzaW9uIjogIjEuMCIsICJ0eXBlIjogImNvcmUiLCAibWV0aG9kIjogIm1hbnVhbCIsICJwYWdlIjogdHJ1ZSwgInNldHRpbmdzIjogeyJVU0VfQkFEX0JFSEFWSU9SIjogeyJjb250ZXh0IjogIm11bHRpc2l0ZSIsICJkZWZhdWx0IjogInllcyIsICJoZWxwIjogIkFjdGl2YXRlIEJhZCBiZWhhdmlvciBmZWF0dXJlLiIsICJpZCI6ICJ1c2UtYmFkLWJlaGF2aW9yIiwgImxhYmVsIjogIkFjdGl2YXRlIGJhZCBiZWhhdmlvciIsICJyZWdleCI6ICJeKHllc3xubykkIiwgInR5cGUiOiAiY2hlY2siLCAiY29udGFpbmVyQ2xhc3MiOiAiei00IiwgInBhdHRlcm4iOiAiXih5ZXN8bm8pJCIsICJpbnBUeXBlIjogImNoZWNrYm94IiwgIm5hbWUiOiAiQWN0aXZhdGUgYmFkIGJlaGF2aW9yIiwgImNvbHVtbnMiOiB7InBjIjogNCwgInRhYmxldCI6IDYsICJtb2JpbGUiOiAxMn0sICJkaXNhYmxlZCI6IGZhbHNlLCAidmFsdWUiOiAieWVzIiwgIm1ldGhvZCI6ICJkZWZhdWx0IiwgInByZXZfdmFsdWUiOiAieWVzIiwgInBvcG92ZXJzIjogW3siaWNvbk5hbWUiOiAiZGlzayIsICJ0ZXh0IjogImlucF9wb3BvdmVyX211bHRpc2l0ZSJ9LCB7Imljb25OYW1lIjogImluZm8iLCAidGV4dCI6ICJBY3RpdmF0ZSBCYWQgYmVoYXZpb3IgZmVhdHVyZS4ifV19LCAiQkFEX0JFSEFWSU9SX1NUQVRVU19DT0RFUyI6IHsiY29udGV4dCI6ICJtdWx0aXNpdGUiLCAiZGVmYXVsdCI6ICI0MDAgNDAxIDQwMyA0MDQgNDA1IDQyOSA0NDQiLCAiaGVscCI6ICJMaXN0IG9mIEhUVFAgc3RhdHVzIGNvZGVzIGNvbnNpZGVyZWQgYXMgJ2JhZCcuIiwgImlkIjogImJhZC1iZWhhdmlvci1zdGF0dXMtY29kZSIsICJsYWJlbCI6ICJCYWQgc3RhdHVzIGNvZGVzIiwgInJlZ2V4IjogIl4oICooWzEtNV1cXGR7Mn0pKD8hLipcXDIpICopKyQiLCAidHlwZSI6ICJ0ZXh0IiwgImNvbnRhaW5lckNsYXNzIjogInotMyIsICJwYXR0ZXJuIjogIl4oICooWzEtNV1cXGR7Mn0pKD8hLipcXDIpICopKyQiLCAiaW5wVHlwZSI6ICJpbnB1dCIsICJuYW1lIjogIkJhZCBzdGF0dXMgY29kZXMiLCAiY29sdW1ucyI6IHsicGMiOiA0LCAidGFibGV0IjogNiwgIm1vYmlsZSI6IDEyfSwgImRpc2FibGVkIjogZmFsc2UsICJ2YWx1ZSI6ICI0MDAgNDAxIDQwMyA0MDQgNDA1IDQyOSA0NDQiLCAibWV0aG9kIjogImRlZmF1bHQiLCAicHJldl92YWx1ZSI6ICI0MDAgNDAxIDQwMyA0MDQgNDA1IDQyOSA0NDQiLCAicG9wb3ZlcnMiOiBbeyJpY29uTmFtZSI6ICJkaXNrIiwgInRleHQiOiAiaW5wX3BvcG92ZXJfbXVsdGlzaXRlIn0sIHsiaWNvbk5hbWUiOiAiaW5mbyIsICJ0ZXh0IjogIkxpc3Qgb2YgSFRUUCBzdGF0dXMgY29kZXMgY29uc2lkZXJlZCBhcyAnYmFkJy4ifV19LCAiQkFEX0JFSEFWSU9SX1RIUkVTSE9MRCI6IHsiY29udGV4dCI6ICJtdWx0aXNpdGUiLCAiZGVmYXVsdCI6ICIxMCIsICJoZWxwIjogIk1heGltdW0gbnVtYmVyIG9mICdiYWQnIEhUVFAgc3RhdHVzIGNvZGVzIHdpdGhpbiB0aGUgcGVyaW9kIG9mIHRpbWUgYmVmb3JlIElQIGlzIGJhbm5lZC4iLCAiaWQiOiAiYmFkLWJlaGF2aW9yLXRocmVzaG9sZCIsICJsYWJlbCI6ICJUaHJlc2hvbGQiLCAicmVnZXgiOiAiXlsxLTldWzAtOV0qIiwgInR5cGUiOiAidGV4dCIsICJjb250YWluZXJDbGFzcyI6ICJ6LTIiLCAicGF0dGVybiI6ICJeWzEtOV1bMC05XSoiLCAiaW5wVHlwZSI6ICJpbnB1dCIsICJuYW1lIjogIlRocmVzaG9sZCIsICJjb2x1bW5zIjogeyJwYyI6IDQsICJ0YWJsZXQiOiA2LCAibW9iaWxlIjogMTJ9LCAiZGlzYWJsZWQiOiBmYWxzZSwgInZhbHVlIjogIjEwIiwgIm1ldGhvZCI6ICJkZWZhdWx0IiwgInByZXZfdmFsdWUiOiAiMTAiLCAicG9wb3ZlcnMiOiBbeyJpY29uTmFtZSI6ICJkaXNrIiwgInRleHQiOiAiaW5wX3BvcG92ZXJfbXVsdGlzaXRlIn0sIHsiaWNvbk5hbWUiOiAiaW5mbyIsICJ0ZXh0IjogIk1heGltdW0gbnVtYmVyIG9mICdiYWQnIEhUVFAgc3RhdHVzIGNvZGVzIHdpdGhpbiB0aGUgcGVyaW9kIG9mIHRpbWUgYmVmb3JlIElQIGlzIGJhbm5lZC4ifV19LCAiQkFEX0JFSEFWSU9SX0NPVU5UX1RJTUUiOiB7ImNvbnRleHQiOiAibXVsdGlzaXRlIiwgImRlZmF1bHQiOiAiNjAiLCAiaGVscCI6ICJQZXJpb2Qgb2YgdGltZSAoaW4gc2Vjb25kcykgZHVyaW5nIHdoaWNoIHdlIGNvdW50ICdiYWQnIEhUVFAgc3RhdHVzIGNvZGVzLiIsICJpZCI6ICJiYWQtYmVoYXZpb3ItcGVyaW9kIiwgImxhYmVsIjogIlBlcmlvZCAoaW4gc2Vjb25kcykiLCAicmVnZXgiOiAiXlxcZCsiLCAidHlwZSI6ICJ0ZXh0IiwgImNvbnRhaW5lckNsYXNzIjogInotMSIsICJwYXR0ZXJuIjogIl5cXGQrIiwgImlucFR5cGUiOiAiaW5wdXQiLCAibmFtZSI6ICJQZXJpb2QgKGluIHNlY29uZHMpIiwgImNvbHVtbnMiOiB7InBjIjogNCwgInRhYmxldCI6IDYsICJtb2JpbGUiOiAxMn0sICJkaXNhYmxlZCI6IGZhbHNlLCAidmFsdWUiOiAiNjAiLCAibWV0aG9kIjogImRlZmF1bHQiLCAicHJldl92YWx1ZSI6ICI2MCIsICJwb3BvdmVycyI6IFt7Imljb25OYW1lIjogImRpc2siLCAidGV4dCI6ICJpbnBfcG9wb3Zlcl9tdWx0aXNpdGUifSwgeyJpY29uTmFtZSI6ICJpbmZvIiwgInRleHQiOiAiUGVyaW9kIG9mIHRpbWUgKGluIHNlY29uZHMpIGR1cmluZyB3aGljaCB3ZSBjb3VudCAnYmFkJyBIVFRQIHN0YXR1cyBjb2Rlcy4ifV19LCAiQkFEX0JFSEFWSU9SX0JBTl9USU1FIjogeyJjb250ZXh0IjogIm11bHRpc2l0ZSIsICJkZWZhdWx0IjogIjg2NDAwIiwgImhlbHAiOiAiVGhlIGR1cmF0aW9uIHRpbWUgKGluIHNlY29uZHMpIG9mIGEgYmFuIHdoZW4gdGhlIGNvcnJlc3BvbmRpbmcgSVAgaGFzIHJlYWNoZWQgdGhlIHRocmVzaG9sZC4iLCAiaWQiOiAiYmFkLWJlaGF2aW9yLWJhbi10aW1lIiwgImxhYmVsIjogIkJhbiBkdXJhdGlvbiAoaW4gc2Vjb25kcykiLCAicmVnZXgiOiAiXlxcZCsiLCAidHlwZSI6ICJ0ZXh0IiwgImNvbnRhaW5lckNsYXNzIjogInotMCIsICJwYXR0ZXJuIjogIl5cXGQrIiwgImlucFR5cGUiOiAiaW5wdXQiLCAibmFtZSI6ICJCYW4gZHVyYXRpb24gKGluIHNlY29uZHMpIiwgImNvbHVtbnMiOiB7InBjIjogNCwgInRhYmxldCI6IDYsICJtb2JpbGUiOiAxMn0sICJkaXNhYmxlZCI6IGZhbHNlLCAidmFsdWUiOiAiODY0MDAiLCAibWV0aG9kIjogImRlZmF1bHQiLCAicHJldl92YWx1ZSI6ICI4NjQwMCIsICJwb3BvdmVycyI6IFt7Imljb25OYW1lIjogImRpc2siLCAidGV4dCI6ICJpbnBfcG9wb3Zlcl9tdWx0aXNpdGUifSwgeyJpY29uTmFtZSI6ICJpbmZvIiwgInRleHQiOiAiVGhlIGR1cmF0aW9uIHRpbWUgKGluIHNlY29uZHMpIG9mIGEgYmFuIHdoZW4gdGhlIGNvcnJlc3BvbmRpbmcgSVAgaGFzIHJlYWNoZWQgdGhlIHRocmVzaG9sZC4ifV19fSwgImNoZWNrc3VtIjogbnVsbH0sIHsiaWQiOiAiYmxhY2tsaXN0IiwgInN0cmVhbSI6ICJwYXJ0aWFsIiwgIm5hbWUiOiAiQmxhY2tsaXN0IiwgImRlc2NyaXB0aW9uIjogIkRlbnkgYWNjZXNzIGJhc2VkIG9uIGludGVybmFsIGFuZCBleHRlcm5hbCBJUC9uZXR3b3JrL3JETlMvQVNOIGJsYWNrbGlzdHMuIiwgInZlcnNpb24iOiAiMS4wIiwgInR5cGUiOiAiY29yZSIsICJtZXRob2QiOiAibWFudWFsIiwgInBhZ2UiOiB0cnVlLCAic2V0dGluZ3MiOiB7IlVTRV9CTEFDS0xJU1QiOiB7ImNvbnRleHQiOiAibXVsdGlzaXRlIiwgImRlZmF1bHQiOiAieWVzIiwgImhlbHAiOiAiQWN0aXZhdGUgYmxhY2tsaXN0IGZlYXR1cmUuIiwgImlkIjogInVzZS1ibGFja2xpc3QiLCAibGFiZWwiOiAiQWN0aXZhdGUgYmxhY2tsaXN0aW5nIiwgInJlZ2V4IjogIl4oeWVzfG5vKSQiLCAidHlwZSI6ICJjaGVjayIsICJjb250YWluZXJDbGFzcyI6ICJ6LTExIiwgInBhdHRlcm4iOiAiXih5ZXN8bm8pJCIsICJpbnBUeXBlIjogImNoZWNrYm94IiwgIm5hbWUiOiAiQWN0aXZhdGUgYmxhY2tsaXN0aW5nIiwgImNvbHVtbnMiOiB7InBjIjogNCwgInRhYmxldCI6IDYsICJtb2JpbGUiOiAxMn0sICJkaXNhYmxlZCI6IHRydWUsICJ2YWx1ZSI6ICJubyIsICJtZXRob2QiOiAic2NoZWR1bGVyIiwgInByZXZfdmFsdWUiOiAibm8iLCAicG9wb3ZlcnMiOiBbeyJpY29uTmFtZSI6ICJ0cmVzcGFzcyIsICJ0ZXh0IjogImlucF9wb3BvdmVyX21ldGhvZF9kaXNhYmxlZCJ9LCB7Imljb25OYW1lIjogImRpc2siLCAidGV4dCI6ICJpbnBfcG9wb3Zlcl9tdWx0aXNpdGUifSwgeyJpY29uTmFtZSI6ICJpbmZvIiwgInRleHQiOiAiQWN0aXZhdGUgYmxhY2tsaXN0IGZlYXR1cmUuIn1dfSwgIkJMQUNLTElTVF9JUCI6IHsiY29udGV4dCI6ICJtdWx0aXNpdGUiLCAiZGVmYXVsdCI6ICIiLCAiaGVscCI6ICJMaXN0IG9mIElQL25ldHdvcmssIHNlcGFyYXRlZCB3aXRoIHNwYWNlcywgdG8gYmxvY2suIiwgImlkIjogImJsYWNrbGlzdC1pcCIsICJsYWJlbCI6ICJCbGFja2xpc3QgSVAvbmV0d29yayIsICJyZWdleCI6ICJeKD8hICkoICooKChcXGIyNVswLTVdfFxcYjJbMC00XVxcZHxcXGJbMDFdP1xcZFxcZD8pKFxcLigyNVswLTVdfDJbMC00XVxcZHxbMDFdP1xcZFxcZD8pKXszfSkoXFwvKFsxLTJdWzAtOV0/fDNbMC0yXT98WzA0LTldKSk/fCgoWzAtOWEtZkEtRl17MSw0fTopezd9WzAtOWEtZkEtRl17MSw0fXwoWzAtOWEtZkEtRl17MSw0fTopezEsN306fChbMC05YS1mQS1GXXsxLDR9Oil7MSw2fTpbMC05YS1mQS1GXXsxLDR9fChbMC05YS1mQS1GXXsxLDR9Oil7MSw1fSg6WzAtOWEtZkEtRl17MSw0fSl7MSwyfXwoWzAtOWEtZkEtRl17MSw0fTopezEsNH0oOlswLTlhLWZBLUZdezEsNH0pezEsM318KFswLTlhLWZBLUZdezEsNH06KXsxLDN9KDpbMC05YS1mQS1GXXsxLDR9KXsxLDR9fChbMC05YS1mQS1GXXsxLDR9Oil7MSwyfSg6WzAtOWEtZkEtRl17MSw0fSl7MSw1fXxbMC05YS1mQS1GXXsxLDR9OigoOlswLTlhLWZBLUZdezEsNH0pezEsNn0pfDooKDpbMC05YS1mQS1GXXsxLDR9KXsxLDd9fDopfGZlODA6KDpbMC05YS1mQS1GXVp7MCw0fSl7MCw0fSVbMC05YS16QS1aXSt8OjooZmZmZig6MHsxLDR9KT86KT8oKDI1WzAtNV18KDJbMC00XXwxP1xcZCk/XFxkKVxcLil7M30oMjVbMC01XXwoMlswLTRdfDE/XFxkKT9cXGQpfChbMC05YS1mQS1GXXsxLDR9Oil7MSw0fTooKDI1WzAtNV18KDJbMC00XXwxP1xcZCk/XFxkKVxcLil7M30oMjVbMC01XXwoMlswLTRdfDE/XFxkKT9cXGQpKShcXC8oMTJbMC04XXwxWzAxXVswLTldfFswLTldWzAtOV0/KSk/KSg/IS4qXFxEXFwyKFteXFxkXFwvXXwkKSkgKikqJCIsICJ0eXBlIjogInRleHQiLCAiY29udGFpbmVyQ2xhc3MiOiAiei0xMCIsICJwYXR0ZXJuIjogIl4oPyEgKSggKigoKFxcYjI1WzAtNV18XFxiMlswLTRdXFxkfFxcYlswMV0/XFxkXFxkPykoXFwuKDI1WzAtNV18MlswLTRdXFxkfFswMV0/XFxkXFxkPykpezN9KShcXC8oWzEtMl1bMC05XT98M1swLTJdP3xbMDQtOV0pKT98KChbMC05YS1mQS1GXXsxLDR9Oil7N31bMC05YS1mQS1GXXsxLDR9fChbMC05YS1mQS1GXXsxLDR9Oil7MSw3fTp8KFswLTlhLWZBLUZdezEsNH06KXsxLDZ9OlswLTlhLWZBLUZdezEsNH18KFswLTlhLWZBLUZdezEsNH06KXsxLDV9KDpbMC05YS1mQS1GXXsxLDR9KXsxLDJ9fChbMC05YS1mQS1GXXsxLDR9Oil7MSw0fSg6WzAtOWEtZkEtRl17MSw0fSl7MSwzfXwoWzAtOWEtZkEtRl17MSw0fTopezEsM30oOlswLTlhLWZBLUZdezEsNH0pezEsNH18KFswLTlhLWZBLUZdezEsNH06KXsxLDJ9KDpbMC05YS1mQS1GXXsxLDR9KXsxLDV9fFswLTlhLWZBLUZdezEsNH06KCg6WzAtOWEtZkEtRl17MSw0fSl7MSw2fSl8OigoOlswLTlhLWZBLUZdezEsNH0pezEsN318Oil8ZmU4MDooOlswLTlhLWZBLUZdWnswLDR9KXswLDR9JVswLTlhLXpBLVpdK3w6OihmZmZmKDowezEsNH0pPzopPygoMjVbMC01XXwoMlswLTRdfDE/XFxkKT9cXGQpXFwuKXszfSgyNVswLTVdfCgyWzAtNF18MT9cXGQpP1xcZCl8KFswLTlhLWZBLUZdezEsNH06KXsxLDR9OigoMjVbMC01XXwoMlswLTRdfDE/XFxkKT9cXGQpXFwuKXszfSgyNVswLTVdfCgyWzAtNF18MT9cXGQpP1xcZCkpKFxcLygxMlswLThdfDFbMDFdWzAtOV18WzAtOV1bMC05XT8pKT8pKD8hLipcXERcXDIoW15cXGRcXC9dfCQpKSAqKSokIiwgImlucFR5cGUiOiAiaW5wdXQiLCAibmFtZSI6ICJCbGFja2xpc3QgSVAvbmV0d29yayIsICJjb2x1bW5zIjogeyJwYyI6IDQsICJ0YWJsZXQiOiA2LCAibW9iaWxlIjogMTJ9LCAiZGlzYWJsZWQiOiBmYWxzZSwgInZhbHVlIjogIiIsICJtZXRob2QiOiAiZGVmYXVsdCIsICJwcmV2X3ZhbHVlIjogIiIsICJwb3BvdmVycyI6IFt7Imljb25OYW1lIjogImRpc2siLCAidGV4dCI6ICJpbnBfcG9wb3Zlcl9tdWx0aXNpdGUifSwgeyJpY29uTmFtZSI6ICJpbmZvIiwgInRleHQiOiAiTGlzdCBvZiBJUC9uZXR3b3JrLCBzZXBhcmF0ZWQgd2l0aCBzcGFjZXMsIHRvIGJsb2NrLiJ9XX0sICJCTEFDS0xJU1RfUkROUyI6IHsiY29udGV4dCI6ICJtdWx0aXNpdGUiLCAiZGVmYXVsdCI6ICIuc2hvZGFuLmlvIC5jZW5zeXMuaW8iLCAiaGVscCI6ICJMaXN0IG9mIHJldmVyc2UgRE5TIHN1ZmZpeGVzLCBzZXBhcmF0ZWQgd2l0aCBzcGFjZXMsIHRvIGJsb2NrLiIsICJpZCI6ICJibGFja2xpc3QtcmRucyIsICJsYWJlbCI6ICJCbGFja2xpc3QgcmV2ZXJzZSBETlMiLCAicmVnZXgiOiAiXiggKigoW14gXSspKD8hLipcXDMoIHwkKSkpICopKiQiLCAidHlwZSI6ICJ0ZXh0IiwgImNvbnRhaW5lckNsYXNzIjogInotOSIsICJwYXR0ZXJuIjogIl4oICooKFteIF0rKSg/IS4qXFwzKCB8JCkpKSAqKSokIiwgImlucFR5cGUiOiAiaW5wdXQiLCAibmFtZSI6ICJCbGFja2xpc3QgcmV2ZXJzZSBETlMiLCAiY29sdW1ucyI6IHsicGMiOiA0LCAidGFibGV0IjogNiwgIm1vYmlsZSI6IDEyfSwgImRpc2FibGVkIjogZmFsc2UsICJ2YWx1ZSI6ICIuc2hvZGFuLmlvIC5jZW5zeXMuaW8iLCAibWV0aG9kIjogImRlZmF1bHQiLCAicHJldl92YWx1ZSI6ICIuc2hvZGFuLmlvIC5jZW5zeXMuaW8iLCAicG9wb3ZlcnMiOiBbeyJpY29uTmFtZSI6ICJkaXNrIiwgInRleHQiOiAiaW5wX3BvcG92ZXJfbXVsdGlzaXRlIn0sIHsiaWNvbk5hbWUiOiAiaW5mbyIsICJ0ZXh0IjogIkxpc3Qgb2YgcmV2ZXJzZSBETlMgc3VmZml4ZXMsIHNlcGFyYXRlZCB3aXRoIHNwYWNlcywgdG8gYmxvY2suIn1dfSwgIkJMQUNLTElTVF9SRE5TX0dMT0JBTCI6IHsiY29udGV4dCI6ICJtdWx0aXNpdGUiLCAiZGVmYXVsdCI6ICJ5ZXMiLCAiaGVscCI6ICJPbmx5IHBlcmZvcm0gUkROUyBibGFja2xpc3QgY2hlY2tzIG9uIGdsb2JhbCBJUCBhZGRyZXNzZXMuIiwgImlkIjogImJsYWNrbGlzdC1yZG5zLWdsb2JhbCIsICJsYWJlbCI6ICJCbGFja2xpc3QgcmV2ZXJzZSBETlMgZ2xvYmFsIElQcyIsICJyZWdleCI6ICJeKHllc3xubykkIiwgInR5cGUiOiAiY2hlY2siLCAiY29udGFpbmVyQ2xhc3MiOiAiei04IiwgInBhdHRlcm4iOiAiXih5ZXN8bm8pJCIsICJpbnBUeXBlIjogImNoZWNrYm94IiwgIm5hbWUiOiAiQmxhY2tsaXN0IHJldmVyc2UgRE5TIGdsb2JhbCBJUHMiLCAiY29sdW1ucyI6IHsicGMiOiA0LCAidGFibGV0IjogNiwgIm1vYmlsZSI6IDEyfSwgImRpc2FibGVkIjogZmFsc2UsICJ2YWx1ZSI6ICJ5ZXMiLCAibWV0aG9kIjogImRlZmF1bHQiLCAicHJldl92YWx1ZSI6ICJ5ZXMiLCAicG9wb3ZlcnMiOiBbeyJpY29uTmFtZSI6ICJkaXNrIiwgInRleHQiOiAiaW5wX3BvcG92ZXJfbXVsdGlzaXRlIn0sIHsiaWNvbk5hbWUiOiAiaW5mbyIsICJ0ZXh0IjogIk9ubHkgcGVyZm9ybSBSRE5TIGJsYWNrbGlzdCBjaGVja3Mgb24gZ2xvYmFsIElQIGFkZHJlc3Nlcy4ifV19LCAiQkxBQ0tMSVNUX0FTTiI6IHsiY29udGV4dCI6ICJtdWx0aXNpdGUiLCAiZGVmYXVsdCI6ICIiLCAiaGVscCI6ICJMaXN0IG9mIEFTTiBudW1iZXJzLCBzZXBhcmF0ZWQgd2l0aCBzcGFjZXMsIHRvIGJsb2NrLiIsICJpZCI6ICJibGFja2xpc3QtYXNuIiwgImxhYmVsIjogIkJsYWNrbGlzdCBBU04iLCAicmVnZXgiOiAiXl4oICooKEFTTj8pPyhcXGQrKVxcYig/IS4qW1NOIF1cXDRcXGIpKSAqKSokIiwgInR5cGUiOiAidGV4dCIsICJjb250YWluZXJDbGFzcyI6ICJ6LTciLCAicGF0dGVybiI6ICJeXiggKigoQVNOPyk/KFxcZCspXFxiKD8hLipbU04gXVxcNFxcYikpICopKiQiLCAiaW5wVHlwZSI6ICJpbnB1dCIsICJuYW1lIjogIkJsYWNrbGlzdCBBU04iLCAiY29sdW1ucyI6IHsicGMiOiA0LCAidGFibGV0IjogNiwgIm1vYmlsZSI6IDEyfSwgImRpc2FibGVkIjogZmFsc2UsICJ2YWx1ZSI6ICIiLCAibWV0aG9kIjogImRlZmF1bHQiLCAicHJldl92YWx1ZSI6ICIiLCAicG9wb3ZlcnMiOiBbeyJpY29uTmFtZSI6ICJkaXNrIiwgInRleHQiOiAiaW5wX3BvcG92ZXJfbXVsdGlzaXRlIn0sIHsiaWNvbk5hbWUiOiAiaW5mbyIsICJ0ZXh0IjogIkxpc3Qgb2YgQVNOIG51bWJlcnMsIHNlcGFyYXRlZCB3aXRoIHNwYWNlcywgdG8gYmxvY2suIn1dfSwgIkJMQUNLTElTVF9VU0VSX0FHRU5UIjogeyJjb250ZXh0IjogIm11bHRpc2l0ZSIsICJkZWZhdWx0IjogIiIsICJoZWxwIjogIkxpc3Qgb2YgVXNlci1BZ2VudCAoUENSRSByZWdleCksIHNlcGFyYXRlZCB3aXRoIHNwYWNlcywgdG8gYmxvY2suIiwgImlkIjogImJsYWNrbGlzdC11c2VyLWFnZW50IiwgImxhYmVsIjogIkJsYWNrbGlzdCBVc2VyLUFnZW50IiwgInJlZ2V4IjogIl4uKiQiLCAidHlwZSI6ICJ0ZXh0IiwgImNvbnRhaW5lckNsYXNzIjogInotNiIsICJwYXR0ZXJuIjogIl4uKiQiLCAiaW5wVHlwZSI6ICJpbnB1dCIsICJuYW1lIjogIkJsYWNrbGlzdCBVc2VyLUFnZW50IiwgImNvbHVtbnMiOiB7InBjIjogNCwgInRhYmxldCI6IDYsICJtb2JpbGUiOiAxMn0sICJkaXNhYmxlZCI6IGZhbHNlLCAidmFsdWUiOiAiIiwgIm1ldGhvZCI6ICJkZWZhdWx0IiwgInByZXZfdmFsdWUiOiAiIiwgInBvcG92ZXJzIjogW3siaWNvbk5hbWUiOiAiZGlzayIsICJ0ZXh0IjogImlucF9wb3BvdmVyX211bHRpc2l0ZSJ9LCB7Imljb25OYW1lIjogImluZm8iLCAidGV4dCI6ICJMaXN0IG9mIFVzZXItQWdlbnQgKFBDUkUgcmVnZXgpLCBzZXBhcmF0ZWQgd2l0aCBzcGFjZXMsIHRvIGJsb2NrLiJ9XX0sICJCTEFDS0xJU1RfVVJJIjogeyJjb250ZXh0IjogIm11bHRpc2l0ZSIsICJkZWZhdWx0IjogIiIsICJoZWxwIjogIkxpc3Qgb2YgVVJJIChQQ1JFIHJlZ2V4KSwgc2VwYXJhdGVkIHdpdGggc3BhY2VzLCB0byBibG9jay4iLCAiaWQiOiAiYmxhY2tsaXN0LXVyaSIsICJsYWJlbCI6ICJCbGFja2xpc3QgVVJJIiwgInJlZ2V4IjogIl4oICooLiopKD8hLipcXDIoPyEuKSkgKikqJCIsICJ0eXBlIjogInRleHQiLCAiY29udGFpbmVyQ2xhc3MiOiAiei01IiwgInBhdHRlcm4iOiAiXiggKiguKikoPyEuKlxcMig/IS4pKSAqKSokIiwgImlucFR5cGUiOiAiaW5wdXQiLCAibmFtZSI6ICJCbGFja2xpc3QgVVJJIiwgImNvbHVtbnMiOiB7InBjIjogNCwgInRhYmxldCI6IDYsICJtb2JpbGUiOiAxMn0sICJkaXNhYmxlZCI6IGZhbHNlLCAidmFsdWUiOiAiIiwgIm1ldGhvZCI6ICJkZWZhdWx0IiwgInByZXZfdmFsdWUiOiAiIiwgInBvcG92ZXJzIjogW3siaWNvbk5hbWUiOiAiZGlzayIsICJ0ZXh0IjogImlucF9wb3BvdmVyX211bHRpc2l0ZSJ9LCB7Imljb25OYW1lIjogImluZm8iLCAidGV4dCI6ICJMaXN0IG9mIFVSSSAoUENSRSByZWdleCksIHNlcGFyYXRlZCB3aXRoIHNwYWNlcywgdG8gYmxvY2suIn1dfSwgIkJMQUNLTElTVF9JR05PUkVfSVAiOiB7ImNvbnRleHQiOiAibXVsdGlzaXRlIiwgImRlZmF1bHQiOiAiIiwgImhlbHAiOiAiTGlzdCBvZiBJUC9uZXR3b3JrLCBzZXBhcmF0ZWQgd2l0aCBzcGFjZXMsIHRvIGlnbm9yZSBpbiB0aGUgYmxhY2tsaXN0LiIsICJpZCI6ICJibGFja2xpc3QtaWdub3JlLWlwIiwgImxhYmVsIjogIkJsYWNrbGlzdCBpZ25vcmUgSVAvbmV0d29yayIsICJyZWdleCI6ICJeKD8hICkoICooKChcXGIyNVswLTVdfFxcYjJbMC00XVxcZHxcXGJbMDFdP1xcZFxcZD8pKFxcLigyNVswLTVdfDJbMC00XVxcZHxbMDFdP1xcZFxcZD8pKXszfSkoXFwvKFsxLTJdWzAtOV0/fDNbMC0yXT98WzA0LTldKSk/fCgoWzAtOWEtZkEtRl17MSw0fTopezd9WzAtOWEtZkEtRl17MSw0fXwoWzAtOWEtZkEtRl17MSw0fTopezEsN306fChbMC05YS1mQS1GXXsxLDR9Oil7MSw2fTpbMC05YS1mQS1GXXsxLDR9fChbMC05YS1mQS1GXXsxLDR9Oil7MSw1fSg6WzAtOWEtZkEtRl17MSw0fSl7MSwyfXwoWzAtOWEtZkEtRl17MSw0fTopezEsNH0oOlswLTlhLWZBLUZdezEsNH0pezEsM318KFswLTlhLWZBLUZdezEsNH06KXsxLDN9KDpbMC05YS1mQS1GXXsxLDR9KXsxLDR9fChbMC05YS1mQS1GXXsxLDR9Oil7MSwyfSg6WzAtOWEtZkEtRl17MSw0fSl7MSw1fXxbMC05YS1mQS1GXXsxLDR9OigoOlswLTlhLWZBLUZdezEsNH0pezEsNn0pfDooKDpbMC05YS1mQS1GXXsxLDR9KXsxLDd9fDopfGZlODA6KDpbMC05YS1mQS1GXVp7MCw0fSl7MCw0fSVbMC05YS16QS1aXSt8OjooZmZmZig6MHsxLDR9KT86KT8oKDI1WzAtNV18KDJbMC00XXwxP1xcZCk/XFxkKVxcLil7M30oMjVbMC01XXwoMlswLTRdfDE/XFxkKT9cXGQpfChbMC05YS1mQS1GXXsxLDR9Oil7MSw0fTooKDI1WzAtNV18KDJbMC00XXwxP1xcZCk/XFxkKVxcLil7M30oMjVbMC01XXwoMlswLTRdfDE/XFxkKT9cXGQpKShcXC8oMTJbMC04XXwxWzAxXVswLTldfFswLTldWzAtOV0/KSk/KSg/IS4qXFxEXFwyKFteXFxkXFwvXXwkKSkgKikqJCIsICJ0eXBlIjogInRleHQiLCAiY29udGFpbmVyQ2xhc3MiOiAiei00IiwgInBhdHRlcm4iOiAiXig/ISApKCAqKCgoXFxiMjVbMC01XXxcXGIyWzAtNF1cXGR8XFxiWzAxXT9cXGRcXGQ/KShcXC4oMjVbMC01XXwyWzAtNF1cXGR8WzAxXT9cXGRcXGQ/KSl7M30pKFxcLyhbMS0yXVswLTldP3wzWzAtMl0/fFswNC05XSkpP3woKFswLTlhLWZBLUZdezEsNH06KXs3fVswLTlhLWZBLUZdezEsNH18KFswLTlhLWZBLUZdezEsNH06KXsxLDd9OnwoWzAtOWEtZkEtRl17MSw0fTopezEsNn06WzAtOWEtZkEtRl17MSw0fXwoWzAtOWEtZkEtRl17MSw0fTopezEsNX0oOlswLTlhLWZBLUZdezEsNH0pezEsMn18KFswLTlhLWZBLUZdezEsNH06KXsxLDR9KDpbMC05YS1mQS1GXXsxLDR9KXsxLDN9fChbMC05YS1mQS1GXXsxLDR9Oil7MSwzfSg6WzAtOWEtZkEtRl17MSw0fSl7MSw0fXwoWzAtOWEtZkEtRl17MSw0fTopezEsMn0oOlswLTlhLWZBLUZdezEsNH0pezEsNX18WzAtOWEtZkEtRl17MSw0fTooKDpbMC05YS1mQS1GXXsxLDR9KXsxLDZ9KXw6KCg6WzAtOWEtZkEtRl17MSw0fSl7MSw3fXw6KXxmZTgwOig6WzAtOWEtZkEtRl1aezAsNH0pezAsNH0lWzAtOWEtekEtWl0rfDo6KGZmZmYoOjB7MSw0fSk/Oik/KCgyNVswLTVdfCgyWzAtNF18MT9cXGQpP1xcZClcXC4pezN9KDI1WzAtNV18KDJbMC00XXwxP1xcZCk/XFxkKXwoWzAtOWEtZkEtRl17MSw0fTopezEsNH06KCgyNVswLTVdfCgyWzAtNF18MT9cXGQpP1xcZClcXC4pezN9KDI1WzAtNV18KDJbMC00XXwxP1xcZCk/XFxkKSkoXFwvKDEyWzAtOF18MVswMV1bMC05XXxbMC05XVswLTldPykpPykoPyEuKlxcRFxcMihbXlxcZFxcL118JCkpICopKiQiLCAiaW5wVHlwZSI6ICJpbnB1dCIsICJuYW1lIjogIkJsYWNrbGlzdCBpZ25vcmUgSVAvbmV0d29yayIsICJjb2x1bW5zIjogeyJwYyI6IDQsICJ0YWJsZXQiOiA2LCAibW9iaWxlIjogMTJ9LCAiZGlzYWJsZWQiOiBmYWxzZSwgInZhbHVlIjogIiIsICJtZXRob2QiOiAiZGVmYXVsdCIsICJwcmV2X3ZhbHVlIjogIiIsICJwb3BvdmVycyI6IFt7Imljb25OYW1lIjogImRpc2siLCAidGV4dCI6ICJpbnBfcG9wb3Zlcl9tdWx0aXNpdGUifSwgeyJpY29uTmFtZSI6ICJpbmZvIiwgInRleHQiOiAiTGlzdCBvZiBJUC9uZXR3b3JrLCBzZXBhcmF0ZWQgd2l0aCBzcGFjZXMsIHRvIGlnbm9yZSBpbiB0aGUgYmxhY2tsaXN0LiJ9XX0sICJCTEFDS0xJU1RfSUdOT1JFX1JETlMiOiB7ImNvbnRleHQiOiAibXVsdGlzaXRlIiwgImRlZmF1bHQiOiAiIiwgImhlbHAiOiAiTGlzdCBvZiByZXZlcnNlIEROUyBzdWZmaXhlcywgc2VwYXJhdGVkIHdpdGggc3BhY2VzLCB0byBpZ25vcmUgaW4gdGhlIGJsYWNrbGlzdC4iLCAiaWQiOiAiYmxhY2tsaXN0LWlnbm9yZS1yZG5zIiwgImxhYmVsIjogIkJsYWNrbGlzdCBpZ25vcmUgcmV2ZXJzZSBETlMiLCAicmVnZXgiOiAiXiggKigoW14gXSspKD8hLipcXDMoIHwkKSkpICopKiQiLCAidHlwZSI6ICJ0ZXh0IiwgImNvbnRhaW5lckNsYXNzIjogInotMyIsICJwYXR0ZXJuIjogIl4oICooKFteIF0rKSg/IS4qXFwzKCB8JCkpKSAqKSokIiwgImlucFR5cGUiOiAiaW5wdXQiLCAibmFtZSI6ICJCbGFja2xpc3QgaWdub3JlIHJldmVyc2UgRE5TIiwgImNvbHVtbnMiOiB7InBjIjogNCwgInRhYmxldCI6IDYsICJtb2JpbGUiOiAxMn0sICJkaXNhYmxlZCI6IGZhbHNlLCAidmFsdWUiOiAiIiwgIm1ldGhvZCI6ICJkZWZhdWx0IiwgInByZXZfdmFsdWUiOiAiIiwgInBvcG92ZXJzIjogW3siaWNvbk5hbWUiOiAiZGlzayIsICJ0ZXh0IjogImlucF9wb3BvdmVyX211bHRpc2l0ZSJ9LCB7Imljb25OYW1lIjogImluZm8iLCAidGV4dCI6ICJMaXN0IG9mIHJldmVyc2UgRE5TIHN1ZmZpeGVzLCBzZXBhcmF0ZWQgd2l0aCBzcGFjZXMsIHRvIGlnbm9yZSBpbiB0aGUgYmxhY2tsaXN0LiJ9XX0sICJCTEFDS0xJU1RfSUdOT1JFX0FTTiI6IHsiY29udGV4dCI6ICJtdWx0aXNpdGUiLCAiZGVmYXVsdCI6ICIiLCAiaGVscCI6ICJMaXN0IG9mIEFTTiBudW1iZXJzLCBzZXBhcmF0ZWQgd2l0aCBzcGFjZXMsIHRvIGlnbm9yZSBpbiB0aGUgYmxhY2tsaXN0LiIsICJpZCI6ICJibGFja2xpc3QtaWdub3JlLWFzbiIsICJsYWJlbCI6ICJCbGFja2xpc3QgaWdub3JlIEFTTiIsICJyZWdleCI6ICJeXiggKigoQVNOPyk/KFxcZCspXFxiKD8hLipbU04gXVxcNFxcYikpICopKiQiLCAidHlwZSI6ICJ0ZXh0IiwgImNvbnRhaW5lckNsYXNzIjogInotMiIsICJwYXR0ZXJuIjogIl5eKCAqKChBU04/KT8oXFxkKylcXGIoPyEuKltTTiBdXFw0XFxiKSkgKikqJCIsICJpbnBUeXBlIjogImlucHV0IiwgIm5hbWUiOiAiQmxhY2tsaXN0IGlnbm9yZSBBU04iLCAiY29sdW1ucyI6IHsicGMiOiA0LCAidGFibGV0IjogNiwgIm1vYmlsZSI6IDEyfSwgImRpc2FibGVkIjogZmFsc2UsICJ2YWx1ZSI6ICIiLCAibWV0aG9kIjogImRlZmF1bHQiLCAicHJldl92YWx1ZSI6ICIiLCAicG9wb3ZlcnMiOiBbeyJpY29uTmFtZSI6ICJkaXNrIiwgInRleHQiOiAiaW5wX3BvcG92ZXJfbXVsdGlzaXRlIn0sIHsiaWNvbk5hbWUiOiAiaW5mbyIsICJ0ZXh0IjogIkxpc3Qgb2YgQVNOIG51bWJlcnMsIHNlcGFyYXRlZCB3aXRoIHNwYWNlcywgdG8gaWdub3JlIGluIHRoZSBibGFja2xpc3QuIn1dfSwgIkJMQUNLTElTVF9JR05PUkVfVVNFUl9BR0VOVCI6IHsiY29udGV4dCI6ICJtdWx0aXNpdGUiLCAiZGVmYXVsdCI6ICIiLCAiaGVscCI6ICJMaXN0IG9mIFVzZXItQWdlbnQgKFBDUkUgcmVnZXgpLCBzZXBhcmF0ZWQgd2l0aCBzcGFjZXMsIHRvIGlnbm9yZSBpbiB0aGUgYmxhY2tsaXN0LiIsICJpZCI6ICJibGFja2xpc3QtaWdub3JlLXVzZXItYWdlbnQiLCAibGFiZWwiOiAiQmxhY2tsaXN0IGlnbm9yZSBVc2VyLUFnZW50IiwgInJlZ2V4IjogIl4uKiQiLCAidHlwZSI6ICJ0ZXh0IiwgImNvbnRhaW5lckNsYXNzIjogInotMSIsICJwYXR0ZXJuIjogIl4uKiQiLCAiaW5wVHlwZSI6ICJpbnB1dCIsICJuYW1lIjogIkJsYWNrbGlzdCBpZ25vcmUgVXNlci1BZ2VudCIsICJjb2x1bW5zIjogeyJwYyI6IDQsICJ0YWJsZXQiOiA2LCAibW9iaWxlIjogMTJ9LCAiZGlzYWJsZWQiOiBmYWxzZSwgInZhbHVlIjogIiIsICJtZXRob2QiOiAiZGVmYXVsdCIsICJwcmV2X3ZhbHVlIjogIiIsICJwb3BvdmVycyI6IFt7Imljb25OYW1lIjogImRpc2siLCAidGV4dCI6ICJpbnBfcG9wb3Zlcl9tdWx0aXNpdGUifSwgeyJpY29uTmFtZSI6ICJpbmZvIiwgInRleHQiOiAiTGlzdCBvZiBVc2VyLUFnZW50IChQQ1JFIHJlZ2V4KSwgc2VwYXJhdGVkIHdpdGggc3BhY2VzLCB0byBpZ25vcmUgaW4gdGhlIGJsYWNrbGlzdC4ifV19LCAiQkxBQ0tMSVNUX0lHTk9SRV9VUkkiOiB7ImNvbnRleHQiOiAibXVsdGlzaXRlIiwgImRlZmF1bHQiOiAiIiwgImhlbHAiOiAiTGlzdCBvZiBVUkkgKFBDUkUgcmVnZXgpLCBzZXBhcmF0ZWQgd2l0aCBzcGFjZXMsIHRvIGlnbm9yZSBpbiB0aGUgYmxhY2tsaXN0LiIsICJpZCI6ICJibGFja2xpc3QtaWdub3JlLXVyaSIsICJsYWJlbCI6ICJCbGFja2xpc3QgaWdub3JlIFVSSSIsICJyZWdleCI6ICJeKCAqKC4qKSg/IS4qXFwyKD8hLikpICopKiQiLCAidHlwZSI6ICJ0ZXh0IiwgImNvbnRhaW5lckNsYXNzIjogInotMCIsICJwYXR0ZXJuIjogIl4oICooLiopKD8hLipcXDIoPyEuKSkgKikqJCIsICJpbnBUeXBlIjogImlucHV0IiwgIm5hbWUiOiAiQmxhY2tsaXN0IGlnbm9yZSBVUkkiLCAiY29sdW1ucyI6IHsicGMiOiA0LCAidGFibGV0IjogNiwgIm1vYmlsZSI6IDEyfSwgImRpc2FibGVkIjogZmFsc2UsICJ2YWx1ZSI6ICIiLCAibWV0aG9kIjogImRlZmF1bHQiLCAicHJldl92YWx1ZSI6ICIiLCAicG9wb3ZlcnMiOiBbeyJpY29uTmFtZSI6ICJkaXNrIiwgInRleHQiOiAiaW5wX3BvcG92ZXJfbXVsdGlzaXRlIn0sIHsiaWNvbk5hbWUiOiAiaW5mbyIsICJ0ZXh0IjogIkxpc3Qgb2YgVVJJIChQQ1JFIHJlZ2V4KSwgc2VwYXJhdGVkIHdpdGggc3BhY2VzLCB0byBpZ25vcmUgaW4gdGhlIGJsYWNrbGlzdC4ifV19fSwgImNoZWNrc3VtIjogbnVsbH0sIHsiaWQiOiAiYnJvdGxpIiwgInN0cmVhbSI6ICJubyIsICJuYW1lIjogIkJyb3RsaSIsICJkZXNjcmlwdGlvbiI6ICJDb21wcmVzcyBIVFRQIHJlcXVlc3RzIHdpdGggdGhlIGJyb3RsaSBhbGdvcml0aG0uIiwgInZlcnNpb24iOiAiMS4wIiwgInR5cGUiOiAiY29yZSIsICJtZXRob2QiOiAibWFudWFsIiwgInBhZ2UiOiBmYWxzZSwgInNldHRpbmdzIjogeyJVU0VfQlJPVExJIjogeyJjb250ZXh0IjogIm11bHRpc2l0ZSIsICJkZWZhdWx0IjogIm5vIiwgImhlbHAiOiAiVXNlIGJyb3RsaSIsICJpZCI6ICJ1c2UtYnJvdGxpIiwgImxhYmVsIjogIlVzZSBicm90bGkiLCAicmVnZXgiOiAiXih5ZXN8bm8pJCIsICJ0eXBlIjogImNoZWNrIiwgImNvbnRhaW5lckNsYXNzIjogInotMyIsICJwYXR0ZXJuIjogIl4oeWVzfG5vKSQiLCAiaW5wVHlwZSI6ICJjaGVja2JveCIsICJuYW1lIjogIlVzZSBicm90bGkiLCAiY29sdW1ucyI6IHsicGMiOiA0LCAidGFibGV0IjogNiwgIm1vYmlsZSI6IDEyfSwgImRpc2FibGVkIjogZmFsc2UsICJ2YWx1ZSI6ICJubyIsICJtZXRob2QiOiAiZGVmYXVsdCIsICJwcmV2X3ZhbHVlIjogIm5vIiwgInBvcG92ZXJzIjogW3siaWNvbk5hbWUiOiAiZGlzayIsICJ0ZXh0IjogImlucF9wb3BvdmVyX211bHRpc2l0ZSJ9LCB7Imljb25OYW1lIjogImluZm8iLCAidGV4dCI6ICJVc2UgYnJvdGxpIn1dfSwgIkJST1RMSV9UWVBFUyI6IHsiY29udGV4dCI6ICJtdWx0aXNpdGUiLCAiZGVmYXVsdCI6ICJhcHBsaWNhdGlvbi9hdG9tK3htbCBhcHBsaWNhdGlvbi9qYXZhc2NyaXB0IGFwcGxpY2F0aW9uL2pzb24gYXBwbGljYXRpb24vcnNzK3htbCBhcHBsaWNhdGlvbi92bmQubXMtZm9udG9iamVjdCBhcHBsaWNhdGlvbi94LWZvbnQtb3BlbnR5cGUgYXBwbGljYXRpb24veC1mb250LXRydWV0eXBlIGFwcGxpY2F0aW9uL3gtZm9udC10dGYgYXBwbGljYXRpb24veC1qYXZhc2NyaXB0IGFwcGxpY2F0aW9uL3hodG1sK3htbCBhcHBsaWNhdGlvbi94bWwgZm9udC9lb3QgZm9udC9vcGVudHlwZSBmb250L290ZiBmb250L3RydWV0eXBlIGltYWdlL3N2Zyt4bWwgaW1hZ2Uvdm5kLm1pY3Jvc29mdC5pY29uIGltYWdlL3gtaWNvbiBpbWFnZS94LXdpbi1iaXRtYXAgdGV4dC9jc3MgdGV4dC9qYXZhc2NyaXB0IHRleHQvcGxhaW4gdGV4dC94bWwiLCAiaGVscCI6ICJMaXN0IG9mIE1JTUUgdHlwZXMgdGhhdCB3aWxsIGJlIGNvbXByZXNzZWQgd2l0aCBicm90bGkuIiwgImlkIjogImJyb3RsaS10eXBlcyIsICJsYWJlbCI6ICJNSU1FIHR5cGVzIiwgInJlZ2V4IjogIl4oPyEgKSggPyhbXFwtXFx3Ll0rL1tcXC1cXHcuK10rKSg/IS4qXFwyKD8hLikpKSskIiwgInR5cGUiOiAidGV4dCIsICJjb250YWluZXJDbGFzcyI6ICJ6LTIiLCAicGF0dGVybiI6ICJeKD8hICkoID8oW1xcLVxcdy5dKy9bXFwtXFx3LitdKykoPyEuKlxcMig/IS4pKSkrJCIsICJpbnBUeXBlIjogImlucHV0IiwgIm5hbWUiOiAiTUlNRSB0eXBlcyIsICJjb2x1bW5zIjogeyJwYyI6IDQsICJ0YWJsZXQiOiA2LCAibW9iaWxlIjogMTJ9LCAiZGlzYWJsZWQiOiBmYWxzZSwgInZhbHVlIjogImFwcGxpY2F0aW9uL2F0b20reG1sIGFwcGxpY2F0aW9uL2phdmFzY3JpcHQgYXBwbGljYXRpb24vanNvbiBhcHBsaWNhdGlvbi9yc3MreG1sIGFwcGxpY2F0aW9uL3ZuZC5tcy1mb250b2JqZWN0IGFwcGxpY2F0aW9uL3gtZm9udC1vcGVudHlwZSBhcHBsaWNhdGlvbi94LWZvbnQtdHJ1ZXR5cGUgYXBwbGljYXRpb24veC1mb250LXR0ZiBhcHBsaWNhdGlvbi94LWphdmFzY3JpcHQgYXBwbGljYXRpb24veGh0bWwreG1sIGFwcGxpY2F0aW9uL3htbCBmb250L2VvdCBmb250L29wZW50eXBlIGZvbnQvb3RmIGZvbnQvdHJ1ZXR5cGUgaW1hZ2Uvc3ZnK3htbCBpbWFnZS92bmQubWljcm9zb2Z0Lmljb24gaW1hZ2UveC1pY29uIGltYWdlL3gtd2luLWJpdG1hcCB0ZXh0L2NzcyB0ZXh0L2phdmFzY3JpcHQgdGV4dC9wbGFpbiB0ZXh0L3htbCIsICJtZXRob2QiOiAiZGVmYXVsdCIsICJwcmV2X3ZhbHVlIjogImFwcGxpY2F0aW9uL2F0b20reG1sIGFwcGxpY2F0aW9uL2phdmFzY3JpcHQgYXBwbGljYXRpb24vanNvbiBhcHBsaWNhdGlvbi9yc3MreG1sIGFwcGxpY2F0aW9uL3ZuZC5tcy1mb250b2JqZWN0IGFwcGxpY2F0aW9uL3gtZm9udC1vcGVudHlwZSBhcHBsaWNhdGlvbi94LWZvbnQtdHJ1ZXR5cGUgYXBwbGljYXRpb24veC1mb250LXR0ZiBhcHBsaWNhdGlvbi94LWphdmFzY3JpcHQgYXBwbGljYXRpb24veGh0bWwreG1sIGFwcGxpY2F0aW9uL3htbCBmb250L2VvdCBmb250L29wZW50eXBlIGZvbnQvb3RmIGZvbnQvdHJ1ZXR5cGUgaW1hZ2Uvc3ZnK3htbCBpbWFnZS92bmQubWljcm9zb2Z0Lmljb24gaW1hZ2UveC1pY29uIGltYWdlL3gtd2luLWJpdG1hcCB0ZXh0L2NzcyB0ZXh0L2phdmFzY3JpcHQgdGV4dC9wbGFpbiB0ZXh0L3htbCIsICJwb3BvdmVycyI6IFt7Imljb25OYW1lIjogImRpc2siLCAidGV4dCI6ICJpbnBfcG9wb3Zlcl9tdWx0aXNpdGUifSwgeyJpY29uTmFtZSI6ICJpbmZvIiwgInRleHQiOiAiTGlzdCBvZiBNSU1FIHR5cGVzIHRoYXQgd2lsbCBiZSBjb21wcmVzc2VkIHdpdGggYnJvdGxpLiJ9XX0sICJCUk9UTElfTUlOX0xFTkdUSCI6IHsiY29udGV4dCI6ICJtdWx0aXNpdGUiLCAiZGVmYXVsdCI6ICIxMDAwIiwgImhlbHAiOiAiTWluaW11bSBsZW5ndGggZm9yIGJyb3RsaSBjb21wcmVzc2lvbi4iLCAiaWQiOiAiYnJvdGxpLW1pbi1sZW5ndGgiLCAibGFiZWwiOiAiTWluaW11bSBsZW5ndGgiLCAicmVnZXgiOiAiXlxcZCsiLCAidHlwZSI6ICJ0ZXh0IiwgImNvbnRhaW5lckNsYXNzIjogInotMSIsICJwYXR0ZXJuIjogIl5cXGQrIiwgImlucFR5cGUiOiAiaW5wdXQiLCAibmFtZSI6ICJNaW5pbXVtIGxlbmd0aCIsICJjb2x1bW5zIjogeyJwYyI6IDQsICJ0YWJsZXQiOiA2LCAibW9iaWxlIjogMTJ9LCAiZGlzYWJsZWQiOiBmYWxzZSwgInZhbHVlIjogIjEwMDAiLCAibWV0aG9kIjogImRlZmF1bHQiLCAicHJldl92YWx1ZSI6ICIxMDAwIiwgInBvcG92ZXJzIjogW3siaWNvbk5hbWUiOiAiZGlzayIsICJ0ZXh0IjogImlucF9wb3BvdmVyX211bHRpc2l0ZSJ9LCB7Imljb25OYW1lIjogImluZm8iLCAidGV4dCI6ICJNaW5pbXVtIGxlbmd0aCBmb3IgYnJvdGxpIGNvbXByZXNzaW9uLiJ9XX0sICJCUk9UTElfQ09NUF9MRVZFTCI6IHsiY29udGV4dCI6ICJtdWx0aXNpdGUiLCAiZGVmYXVsdCI6ICI2IiwgImhlbHAiOiAiVGhlIGNvbXByZXNzaW9uIGxldmVsIG9mIHRoZSBicm90bGkgYWxnb3JpdGhtLiIsICJpZCI6ICJicm90bGktY29tcC1sZXZlbCIsICJsYWJlbCI6ICJDb21wcmVzc2lvbiBsZXZlbCIsICJyZWdleCI6ICJeKFswMi05XXwxWzAxXT8pJCIsICJ0eXBlIjogInNlbGVjdCIsICJjb250YWluZXJDbGFzcyI6ICJ6LTAiLCAicGF0dGVybiI6ICJeKFswMi05XXwxWzAxXT8pJCIsICJpbnBUeXBlIjogInNlbGVjdCIsICJuYW1lIjogIkNvbXByZXNzaW9uIGxldmVsIiwgInZhbHVlcyI6IFsiMCIsICIxIiwgIjEwIiwgIjExIiwgIjIiLCAiMyIsICI0IiwgIjUiLCAiNiIsICI3IiwgIjgiLCAiOSJdLCAiY29sdW1ucyI6IHsicGMiOiA0LCAidGFibGV0IjogNiwgIm1vYmlsZSI6IDEyfSwgImRpc2FibGVkIjogZmFsc2UsICJ2YWx1ZSI6ICI2IiwgIm1ldGhvZCI6ICJkZWZhdWx0IiwgInByZXZfdmFsdWUiOiAiNiIsICJwb3BvdmVycyI6IFt7Imljb25OYW1lIjogImRpc2siLCAidGV4dCI6ICJpbnBfcG9wb3Zlcl9tdWx0aXNpdGUifSwgeyJpY29uTmFtZSI6ICJpbmZvIiwgInRleHQiOiAiVGhlIGNvbXByZXNzaW9uIGxldmVsIG9mIHRoZSBicm90bGkgYWxnb3JpdGhtLiJ9XX19LCAiY2hlY2tzdW0iOiBudWxsfSwgeyJpZCI6ICJidW5rZXJuZXQiLCAic3RyZWFtIjogInllcyIsICJuYW1lIjogIkJ1bmtlck5ldCIsICJkZXNjcmlwdGlvbiI6ICJTaGFyZSB0aHJlYXQgZGF0YSB3aXRoIG90aGVyIEJ1bmtlcldlYiBpbnN0YW5jZXMgdmlhIEJ1bmtlck5ldC4iLCAidmVyc2lvbiI6ICIxLjAiLCAidHlwZSI6ICJjb3JlIiwgIm1ldGhvZCI6ICJtYW51YWwiLCAicGFnZSI6IHRydWUsICJzZXR0aW5ncyI6IHsiVVNFX0JVTktFUk5FVCI6IHsiY29udGV4dCI6ICJtdWx0aXNpdGUiLCAiZGVmYXVsdCI6ICJ5ZXMiLCAiaGVscCI6ICJBY3RpdmF0ZSBCdW5rZXJOZXQgZmVhdHVyZS4iLCAiaWQiOiAidXNlLWJ1bmtlcm5ldCIsICJsYWJlbCI6ICJBY3RpdmF0ZSBCdW5rZXJOZXQiLCAicmVnZXgiOiAiXih5ZXN8bm8pJCIsICJ0eXBlIjogImNoZWNrIiwgImNvbnRhaW5lckNsYXNzIjogInotMCIsICJwYXR0ZXJuIjogIl4oeWVzfG5vKSQiLCAiaW5wVHlwZSI6ICJjaGVja2JveCIsICJuYW1lIjogIkFjdGl2YXRlIEJ1bmtlck5ldCIsICJjb2x1bW5zIjogeyJwYyI6IDQsICJ0YWJsZXQiOiA2LCAibW9iaWxlIjogMTJ9LCAiZGlzYWJsZWQiOiB0cnVlLCAidmFsdWUiOiAibm8iLCAibWV0aG9kIjogInNjaGVkdWxlciIsICJwcmV2X3ZhbHVlIjogIm5vIiwgInBvcG92ZXJzIjogW3siaWNvbk5hbWUiOiAidHJlc3Bhc3MiLCAidGV4dCI6ICJpbnBfcG9wb3Zlcl9tZXRob2RfZGlzYWJsZWQifSwgeyJpY29uTmFtZSI6ICJkaXNrIiwgInRleHQiOiAiaW5wX3BvcG92ZXJfbXVsdGlzaXRlIn0sIHsiaWNvbk5hbWUiOiAiaW5mbyIsICJ0ZXh0IjogIkFjdGl2YXRlIEJ1bmtlck5ldCBmZWF0dXJlLiJ9XX19LCAiY2hlY2tzdW0iOiBudWxsfSwgeyJpZCI6ICJjb3JzIiwgInN0cmVhbSI6ICJubyIsICJuYW1lIjogIkNPUlMiLCAiZGVzY3JpcHRpb24iOiAiQ3Jvc3MtT3JpZ2luIFJlc291cmNlIFNoYXJpbmcuIiwgInZlcnNpb24iOiAiMS4wIiwgInR5cGUiOiAiY29yZSIsICJtZXRob2QiOiAibWFudWFsIiwgInBhZ2UiOiB0cnVlLCAic2V0dGluZ3MiOiB7IlVTRV9DT1JTIjogeyJjb250ZXh0IjogIm11bHRpc2l0ZSIsICJkZWZhdWx0IjogIm5vIiwgImhlbHAiOiAiVXNlIENPUlMiLCAiaWQiOiAidXNlLWNvcnMiLCAibGFiZWwiOiAiVXNlIENPUlMiLCAicmVnZXgiOiAiXih5ZXN8bm8pJCIsICJ0eXBlIjogImNoZWNrIiwgImNvbnRhaW5lckNsYXNzIjogInotMTAiLCAicGF0dGVybiI6ICJeKHllc3xubykkIiwgImlucFR5cGUiOiAiY2hlY2tib3giLCAibmFtZSI6ICJVc2UgQ09SUyIsICJjb2x1bW5zIjogeyJwYyI6IDQsICJ0YWJsZXQiOiA2LCAibW9iaWxlIjogMTJ9LCAiZGlzYWJsZWQiOiBmYWxzZSwgInZhbHVlIjogIm5vIiwgIm1ldGhvZCI6ICJkZWZhdWx0IiwgInByZXZfdmFsdWUiOiAibm8iLCAicG9wb3ZlcnMiOiBbeyJpY29uTmFtZSI6ICJkaXNrIiwgInRleHQiOiAiaW5wX3BvcG92ZXJfbXVsdGlzaXRlIn0sIHsiaWNvbk5hbWUiOiAiaW5mbyIsICJ0ZXh0IjogIlVzZSBDT1JTIn1dfSwgIkNPUlNfQUxMT1dfT1JJR0lOIjogeyJjb250ZXh0IjogIm11bHRpc2l0ZSIsICJkZWZhdWx0IjogIioiLCAiaGVscCI6ICJBbGxvd2VkIG9yaWdpbnMgdG8gbWFrZSBDT1JTIHJlcXVlc3RzIDogUENSRSByZWdleCBvciAqLiIsICJpZCI6ICJjb3JzLWFsbG93LW9yaWdpbiIsICJsYWJlbCI6ICJBbGxvd2VkIG9yaWdpbnMiLCAicmVnZXgiOiAiXi4qJCIsICJ0eXBlIjogInRleHQiLCAiY29udGFpbmVyQ2xhc3MiOiAiei05IiwgInBhdHRlcm4iOiAiXi4qJCIsICJpbnBUeXBlIjogImlucHV0IiwgIm5hbWUiOiAiQWxsb3dlZCBvcmlnaW5zIiwgImNvbHVtbnMiOiB7InBjIjogNCwgInRhYmxldCI6IDYsICJtb2JpbGUiOiAxMn0sICJkaXNhYmxlZCI6IGZhbHNlLCAidmFsdWUiOiAic2VsZiIsICJtZXRob2QiOiAiZGVmYXVsdCIsICJwcmV2X3ZhbHVlIjogInNlbGYiLCAicG9wb3ZlcnMiOiBbeyJpY29uTmFtZSI6ICJkaXNrIiwgInRleHQiOiAiaW5wX3BvcG92ZXJfbXVsdGlzaXRlIn0sIHsiaWNvbk5hbWUiOiAiaW5mbyIsICJ0ZXh0IjogIkFsbG93ZWQgb3JpZ2lucyB0byBtYWtlIENPUlMgcmVxdWVzdHMgOiBQQ1JFIHJlZ2V4IG9yICouIn1dfSwgIkNPUlNfQUxMT1dfTUVUSE9EUyI6IHsiY29udGV4dCI6ICJtdWx0aXNpdGUiLCAiZGVmYXVsdCI6ICJHRVQsIFBPU1QsIE9QVElPTlMiLCAiaGVscCI6ICJWYWx1ZSBvZiB0aGUgQWNjZXNzLUNvbnRyb2wtQWxsb3ctTWV0aG9kcyBoZWFkZXIuIiwgImlkIjogImNvcnMtYWxsb3ctbWV0aG9kcyIsICJsYWJlbCI6ICJBY2Nlc3MtQ29udHJvbC1BbGxvdy1NZXRob2RzIHZhbHVlIiwgInJlZ2V4IjogIl4oXFwqfCg/IVssIF0pKCw/ID8oR0VUfEhFQUR8UE9TVHxQVVR8REVMRVRFfENPTk5FQ1R8T1BUSU9OU3xUUkFDRXxQQVRDSCkoPyEuKlxcMykpKik/JCIsICJ0eXBlIjogInRleHQiLCAiY29udGFpbmVyQ2xhc3MiOiAiei04IiwgInBhdHRlcm4iOiAiXihcXCp8KD8hWywgXSkoLD8gPyhHRVR8SEVBRHxQT1NUfFBVVHxERUxFVEV8Q09OTkVDVHxPUFRJT05TfFRSQUNFfFBBVENIKSg/IS4qXFwzKSkqKT8kIiwgImlucFR5cGUiOiAiaW5wdXQiLCAibmFtZSI6ICJBY2Nlc3MtQ29udHJvbC1BbGxvdy1NZXRob2RzIHZhbHVlIiwgImNvbHVtbnMiOiB7InBjIjogNCwgInRhYmxldCI6IDYsICJtb2JpbGUiOiAxMn0sICJkaXNhYmxlZCI6IGZhbHNlLCAidmFsdWUiOiAiR0VULCBQT1NULCBPUFRJT05TIiwgIm1ldGhvZCI6ICJkZWZhdWx0IiwgInByZXZfdmFsdWUiOiAiR0VULCBQT1NULCBPUFRJT05TIiwgInBvcG92ZXJzIjogW3siaWNvbk5hbWUiOiAiZGlzayIsICJ0ZXh0IjogImlucF9wb3BvdmVyX211bHRpc2l0ZSJ9LCB7Imljb25OYW1lIjogImluZm8iLCAidGV4dCI6ICJWYWx1ZSBvZiB0aGUgQWNjZXNzLUNvbnRyb2wtQWxsb3ctTWV0aG9kcyBoZWFkZXIuIn1dfSwgIkNPUlNfQUxMT1dfSEVBREVSUyI6IHsiY29udGV4dCI6ICJtdWx0aXNpdGUiLCAiZGVmYXVsdCI6ICJETlQsVXNlci1BZ2VudCxYLVJlcXVlc3RlZC1XaXRoLElmLU1vZGlmaWVkLVNpbmNlLENhY2hlLUNvbnRyb2wsQ29udGVudC1UeXBlLFJhbmdlIiwgImhlbHAiOiAiVmFsdWUgb2YgdGhlIEFjY2Vzcy1Db250cm9sLUFsbG93LUhlYWRlcnMgaGVhZGVyLiIsICJpZCI6ICJjb3JzLWFsbG93LWhlYWRlcnMiLCAibGFiZWwiOiAiQWNjZXNzLUNvbnRyb2wtQWxsb3ctSGVhZGVycyB2YWx1ZSIsICJyZWdleCI6ICJeKFxcKnwoPyFbLCBdKSgsPyA/KFtcXHdcXC1dKykoPyEuKlxcMyg/IS4pKSkqKT8kIiwgInR5cGUiOiAidGV4dCIsICJjb250YWluZXJDbGFzcyI6ICJ6LTciLCAicGF0dGVybiI6ICJeKFxcKnwoPyFbLCBdKSgsPyA/KFtcXHdcXC1dKykoPyEuKlxcMyg/IS4pKSkqKT8kIiwgImlucFR5cGUiOiAiaW5wdXQiLCAibmFtZSI6ICJBY2Nlc3MtQ29udHJvbC1BbGxvdy1IZWFkZXJzIHZhbHVlIiwgImNvbHVtbnMiOiB7InBjIjogNCwgInRhYmxldCI6IDYsICJtb2JpbGUiOiAxMn0sICJkaXNhYmxlZCI6IGZhbHNlLCAidmFsdWUiOiAiRE5ULFVzZXItQWdlbnQsWC1SZXF1ZXN0ZWQtV2l0aCxJZi1Nb2RpZmllZC1TaW5jZSxDYWNoZS1Db250cm9sLENvbnRlbnQtVHlwZSxSYW5nZSIsICJtZXRob2QiOiAiZGVmYXVsdCIsICJwcmV2X3ZhbHVlIjogIkROVCxVc2VyLUFnZW50LFgtUmVxdWVzdGVkLVdpdGgsSWYtTW9kaWZpZWQtU2luY2UsQ2FjaGUtQ29udHJvbCxDb250ZW50LVR5cGUsUmFuZ2UiLCAicG9wb3ZlcnMiOiBbeyJpY29uTmFtZSI6ICJkaXNrIiwgInRleHQiOiAiaW5wX3BvcG92ZXJfbXVsdGlzaXRlIn0sIHsiaWNvbk5hbWUiOiAiaW5mbyIsICJ0ZXh0IjogIlZhbHVlIG9mIHRoZSBBY2Nlc3MtQ29udHJvbC1BbGxvdy1IZWFkZXJzIGhlYWRlci4ifV19LCAiQ09SU19BTExPV19DUkVERU5USUFMUyI6IHsiY29udGV4dCI6ICJtdWx0aXNpdGUiLCAiZGVmYXVsdCI6ICJubyIsICJoZWxwIjogIlNlbmQgdGhlIEFjY2Vzcy1Db250cm9sLUFsbG93LUNyZWRlbnRpYWxzIGhlYWRlci4iLCAiaWQiOiAiY29ycy1hbGxvdy1jcmVkZW50aWFscyIsICJsYWJlbCI6ICJTZW5kIEFjY2Vzcy1Db250cm9sLUFsbG93LUNyZWRlbnRpYWxzIiwgInJlZ2V4IjogIl4oeWVzfG5vKSQiLCAidHlwZSI6ICJjaGVjayIsICJjb250YWluZXJDbGFzcyI6ICJ6LTYiLCAicGF0dGVybiI6ICJeKHllc3xubykkIiwgImlucFR5cGUiOiAiY2hlY2tib3giLCAibmFtZSI6ICJTZW5kIEFjY2Vzcy1Db250cm9sLUFsbG93LUNyZWRlbnRpYWxzIiwgImNvbHVtbnMiOiB7InBjIjogNCwgInRhYmxldCI6IDYsICJtb2JpbGUiOiAxMn0sICJkaXNhYmxlZCI6IGZhbHNlLCAidmFsdWUiOiAibm8iLCAibWV0aG9kIjogImRlZmF1bHQiLCAicHJldl92YWx1ZSI6ICJubyIsICJwb3BvdmVycyI6IFt7Imljb25OYW1lIjogImRpc2siLCAidGV4dCI6ICJpbnBfcG9wb3Zlcl9tdWx0aXNpdGUifSwgeyJpY29uTmFtZSI6ICJpbmZvIiwgInRleHQiOiAiU2VuZCB0aGUgQWNjZXNzLUNvbnRyb2wtQWxsb3ctQ3JlZGVudGlhbHMgaGVhZGVyLiJ9XX0sICJDT1JTX0VYUE9TRV9IRUFERVJTIjogeyJjb250ZXh0IjogIm11bHRpc2l0ZSIsICJkZWZhdWx0IjogIkNvbnRlbnQtTGVuZ3RoLENvbnRlbnQtUmFuZ2UiLCAiaGVscCI6ICJWYWx1ZSBvZiB0aGUgQWNjZXNzLUNvbnRyb2wtRXhwb3NlLUhlYWRlcnMgaGVhZGVyLiIsICJpZCI6ICJjb3JzLWV4cG9zZS1oZWFkZXJzIiwgImxhYmVsIjogIkFjY2Vzcy1Db250cm9sLUV4cG9zZS1IZWFkZXJzIHZhbHVlIiwgInJlZ2V4IjogIl4oXFwqfCg/IVssIF0rKSgsPyA/KFtcXHdcXC1dKykoPyEuKlxcMyg/IS4pKSkqKT8kIiwgInR5cGUiOiAidGV4dCIsICJjb250YWluZXJDbGFzcyI6ICJ6LTUiLCAicGF0dGVybiI6ICJeKFxcKnwoPyFbLCBdKykoLD8gPyhbXFx3XFwtXSspKD8hLipcXDMoPyEuKSkpKik/JCIsICJpbnBUeXBlIjogImlucHV0IiwgIm5hbWUiOiAiQWNjZXNzLUNvbnRyb2wtRXhwb3NlLUhlYWRlcnMgdmFsdWUiLCAiY29sdW1ucyI6IHsicGMiOiA0LCAidGFibGV0IjogNiwgIm1vYmlsZSI6IDEyfSwgImRpc2FibGVkIjogZmFsc2UsICJ2YWx1ZSI6ICJDb250ZW50LUxlbmd0aCxDb250ZW50LVJhbmdlIiwgIm1ldGhvZCI6ICJkZWZhdWx0IiwgInByZXZfdmFsdWUiOiAiQ29udGVudC1MZW5ndGgsQ29udGVudC1SYW5nZSIsICJwb3BvdmVycyI6IFt7Imljb25OYW1lIjogImRpc2siLCAidGV4dCI6ICJpbnBfcG9wb3Zlcl9tdWx0aXNpdGUifSwgeyJpY29uTmFtZSI6ICJpbmZvIiwgInRleHQiOiAiVmFsdWUgb2YgdGhlIEFjY2Vzcy1Db250cm9sLUV4cG9zZS1IZWFkZXJzIGhlYWRlci4ifV19LCAiQ1JPU1NfT1JJR0lOX09QRU5FUl9QT0xJQ1kiOiB7ImNvbnRleHQiOiAibXVsdGlzaXRlIiwgImRlZmF1bHQiOiAiIiwgImhlbHAiOiAiVmFsdWUgZm9yIHRoZSBDcm9zcy1PcmlnaW4tT3BlbmVyLVBvbGljeSBoZWFkZXIuIiwgImlkIjogImNyb3NzLW9yaWdpbi1vcGVuZXItcG9saWN5IiwgImxhYmVsIjogIkNyb3NzLU9yaWdpbi1PcGVuZXItUG9saWN5IiwgInJlZ2V4IjogIl4odW5zYWZlLW5vbmV8c2FtZS1vcmlnaW4tYWxsb3ctcG9wdXBzfHNhbWUtb3JpZ2luKT8kIiwgInR5cGUiOiAic2VsZWN0IiwgImNvbnRhaW5lckNsYXNzIjogInotNCIsICJwYXR0ZXJuIjogIl4odW5zYWZlLW5vbmV8c2FtZS1vcmlnaW4tYWxsb3ctcG9wdXBzfHNhbWUtb3JpZ2luKT8kIiwgImlucFR5cGUiOiAic2VsZWN0IiwgIm5hbWUiOiAiQ3Jvc3MtT3JpZ2luLU9wZW5lci1Qb2xpY3kiLCAidmFsdWVzIjogWyIiLCAic2FtZS1vcmlnaW4iLCAic2FtZS1vcmlnaW4tYWxsb3ctcG9wdXBzIiwgInVuc2FmZS1ub25lIl0sICJjb2x1bW5zIjogeyJwYyI6IDQsICJ0YWJsZXQiOiA2LCAibW9iaWxlIjogMTJ9LCAiZGlzYWJsZWQiOiBmYWxzZSwgInZhbHVlIjogInNhbWUtb3JpZ2luIiwgIm1ldGhvZCI6ICJkZWZhdWx0IiwgInByZXZfdmFsdWUiOiAic2FtZS1vcmlnaW4iLCAicG9wb3ZlcnMiOiBbeyJpY29uTmFtZSI6ICJkaXNrIiwgInRleHQiOiAiaW5wX3BvcG92ZXJfbXVsdGlzaXRlIn0sIHsiaWNvbk5hbWUiOiAiaW5mbyIsICJ0ZXh0IjogIlZhbHVlIGZvciB0aGUgQ3Jvc3MtT3JpZ2luLU9wZW5lci1Qb2xpY3kgaGVhZGVyLiJ9XX0sICJDUk9TU19PUklHSU5fRU1CRURERVJfUE9MSUNZIjogeyJjb250ZXh0IjogIm11bHRpc2l0ZSIsICJkZWZhdWx0IjogIiIsICJoZWxwIjogIlZhbHVlIGZvciB0aGUgQ3Jvc3MtT3JpZ2luLUVtYmVkZGVyLVBvbGljeSBoZWFkZXIuIiwgImlkIjogImNyb3NzLW9yaWdpbi1lbWJlZGRlci1wb2xpY3kiLCAibGFiZWwiOiAiQ3Jvc3MtT3JpZ2luLUVtYmVkZGVyLVBvbGljeSIsICJyZWdleCI6ICJeKHVuc2FmZS1ub25lfHJlcXVpcmUtY29ycHxjcmVkZW50aWFsbGVzcyk/JCIsICJ0eXBlIjogInNlbGVjdCIsICJjb250YWluZXJDbGFzcyI6ICJ6LTMiLCAicGF0dGVybiI6ICJeKHVuc2FmZS1ub25lfHJlcXVpcmUtY29ycHxjcmVkZW50aWFsbGVzcyk/JCIsICJpbnBUeXBlIjogInNlbGVjdCIsICJuYW1lIjogIkNyb3NzLU9yaWdpbi1FbWJlZGRlci1Qb2xpY3kiLCAidmFsdWVzIjogWyIiLCAiY3JlZGVudGlhbGxlc3MiLCAicmVxdWlyZS1jb3JwIiwgInVuc2FmZS1ub25lIl0sICJjb2x1bW5zIjogeyJwYyI6IDQsICJ0YWJsZXQiOiA2LCAibW9iaWxlIjogMTJ9LCAiZGlzYWJsZWQiOiBmYWxzZSwgInZhbHVlIjogInJlcXVpcmUtY29ycCIsICJtZXRob2QiOiAiZGVmYXVsdCIsICJwcmV2X3ZhbHVlIjogInJlcXVpcmUtY29ycCIsICJwb3BvdmVycyI6IFt7Imljb25OYW1lIjogImRpc2siLCAidGV4dCI6ICJpbnBfcG9wb3Zlcl9tdWx0aXNpdGUifSwgeyJpY29uTmFtZSI6ICJpbmZvIiwgInRleHQiOiAiVmFsdWUgZm9yIHRoZSBDcm9zcy1PcmlnaW4tRW1iZWRkZXItUG9saWN5IGhlYWRlci4ifV19LCAiQ1JPU1NfT1JJR0lOX1JFU09VUkNFX1BPTElDWSI6IHsiY29udGV4dCI6ICJtdWx0aXNpdGUiLCAiZGVmYXVsdCI6ICIiLCAiaGVscCI6ICJWYWx1ZSBmb3IgdGhlIENyb3NzLU9yaWdpbi1SZXNvdXJjZS1Qb2xpY3kgaGVhZGVyLiIsICJpZCI6ICJjcm9zcy1vcmlnaW4tcmVzb3VyY2UtcG9saWN5IiwgImxhYmVsIjogIkNyb3NzLU9yaWdpbi1SZXNvdXJjZS1Qb2xpY3kiLCAicmVnZXgiOiAiXihzYW1lLXNpdGV8c2FtZS1vcmlnaW58Y3Jvc3Mtb3JpZ2luKT8kIiwgInR5cGUiOiAic2VsZWN0IiwgImNvbnRhaW5lckNsYXNzIjogInotMiIsICJwYXR0ZXJuIjogIl4oc2FtZS1zaXRlfHNhbWUtb3JpZ2lufGNyb3NzLW9yaWdpbik/JCIsICJpbnBUeXBlIjogInNlbGVjdCIsICJuYW1lIjogIkNyb3NzLU9yaWdpbi1SZXNvdXJjZS1Qb2xpY3kiLCAidmFsdWVzIjogWyIiLCAiY3Jvc3Mtb3JpZ2luIiwgInNhbWUtb3JpZ2luIiwgInNhbWUtc2l0ZSJdLCAiY29sdW1ucyI6IHsicGMiOiA0LCAidGFibGV0IjogNiwgIm1vYmlsZSI6IDEyfSwgImRpc2FibGVkIjogZmFsc2UsICJ2YWx1ZSI6ICJzYW1lLXNpdGUiLCAibWV0aG9kIjogImRlZmF1bHQiLCAicHJldl92YWx1ZSI6ICJzYW1lLXNpdGUiLCAicG9wb3ZlcnMiOiBbeyJpY29uTmFtZSI6ICJkaXNrIiwgInRleHQiOiAiaW5wX3BvcG92ZXJfbXVsdGlzaXRlIn0sIHsiaWNvbk5hbWUiOiAiaW5mbyIsICJ0ZXh0IjogIlZhbHVlIGZvciB0aGUgQ3Jvc3MtT3JpZ2luLVJlc291cmNlLVBvbGljeSBoZWFkZXIuIn1dfSwgIkNPUlNfTUFYX0FHRSI6IHsiY29udGV4dCI6ICJtdWx0aXNpdGUiLCAiZGVmYXVsdCI6ICI4NjQwMCIsICJoZWxwIjogIlZhbHVlIG9mIHRoZSBBY2Nlc3MtQ29udHJvbC1NYXgtQWdlIGhlYWRlci4iLCAiaWQiOiAiY29ycy1tYXgtYWdlIiwgImxhYmVsIjogIkFjY2Vzcy1Db250cm9sLU1heC1BZ2UgdmFsdWUiLCAicmVnZXgiOiAiXlxcZCskIiwgInR5cGUiOiAidGV4dCIsICJjb250YWluZXJDbGFzcyI6ICJ6LTEiLCAicGF0dGVybiI6ICJeXFxkKyQiLCAiaW5wVHlwZSI6ICJpbnB1dCIsICJuYW1lIjogIkFjY2Vzcy1Db250cm9sLU1heC1BZ2UgdmFsdWUiLCAiY29sdW1ucyI6IHsicGMiOiA0LCAidGFibGV0IjogNiwgIm1vYmlsZSI6IDEyfSwgImRpc2FibGVkIjogZmFsc2UsICJ2YWx1ZSI6ICI4NjQwMCIsICJtZXRob2QiOiAiZGVmYXVsdCIsICJwcmV2X3ZhbHVlIjogIjg2NDAwIiwgInBvcG92ZXJzIjogW3siaWNvbk5hbWUiOiAiZGlzayIsICJ0ZXh0IjogImlucF9wb3BvdmVyX211bHRpc2l0ZSJ9LCB7Imljb25OYW1lIjogImluZm8iLCAidGV4dCI6ICJWYWx1ZSBvZiB0aGUgQWNjZXNzLUNvbnRyb2wtTWF4LUFnZSBoZWFkZXIuIn1dfSwgIkNPUlNfREVOWV9SRVFVRVNUIjogeyJjb250ZXh0IjogIm11bHRpc2l0ZSIsICJkZWZhdWx0IjogInllcyIsICJoZWxwIjogIkRlbnkgcmVxdWVzdCBhbmQgZG9uJ3Qgc2VuZCBpdCB0byBiYWNrZW5kIGlmIE9yaWdpbiBpcyBub3QgYWxsb3dlZC4iLCAiaWQiOiAiY29ycy1kZW55LXJlcXVlc3QiLCAibGFiZWwiOiAiRGVueSByZXF1ZXN0IiwgInJlZ2V4IjogIl4oeWVzfG5vKSQiLCAidHlwZSI6ICJjaGVjayIsICJjb250YWluZXJDbGFzcyI6ICJ6LTAiLCAicGF0dGVybiI6ICJeKHllc3xubykkIiwgImlucFR5cGUiOiAiY2hlY2tib3giLCAibmFtZSI6ICJEZW55IHJlcXVlc3QiLCAiY29sdW1ucyI6IHsicGMiOiA0LCAidGFibGV0IjogNiwgIm1vYmlsZSI6IDEyfSwgImRpc2FibGVkIjogZmFsc2UsICJ2YWx1ZSI6ICJ5ZXMiLCAibWV0aG9kIjogImRlZmF1bHQiLCAicHJldl92YWx1ZSI6ICJ5ZXMiLCAicG9wb3ZlcnMiOiBbeyJpY29uTmFtZSI6ICJkaXNrIiwgInRleHQiOiAiaW5wX3BvcG92ZXJfbXVsdGlzaXRlIn0sIHsiaWNvbk5hbWUiOiAiaW5mbyIsICJ0ZXh0IjogIkRlbnkgcmVxdWVzdCBhbmQgZG9uJ3Qgc2VuZCBpdCB0byBiYWNrZW5kIGlmIE9yaWdpbiBpcyBub3QgYWxsb3dlZC4ifV19fSwgImNoZWNrc3VtIjogbnVsbH0sIHsiaWQiOiAiY2xpZW50Y2FjaGUiLCAic3RyZWFtIjogIm5vIiwgIm5hbWUiOiAiQ2xpZW50IGNhY2hlIiwgImRlc2NyaXB0aW9uIjogIk1hbmFnZSBjYWNoaW5nIGZvciBjbGllbnRzLiIsICJ2ZXJzaW9uIjogIjEuMCIsICJ0eXBlIjogImNvcmUiLCAibWV0aG9kIjogIm1hbnVhbCIsICJwYWdlIjogZmFsc2UsICJzZXR0aW5ncyI6IHsiVVNFX0NMSUVOVF9DQUNIRSI6IHsiY29udGV4dCI6ICJtdWx0aXNpdGUiLCAiZGVmYXVsdCI6ICJubyIsICJoZWxwIjogIlRlbGwgY2xpZW50IHRvIHN0b3JlIGxvY2FsbHkgc3RhdGljIGZpbGVzLiIsICJpZCI6ICJ1c2UtY2xpZW50LWNhY2hlIiwgImxhYmVsIjogIlVzZSBjbGllbnQgY2FjaGUiLCAicmVnZXgiOiAiXih5ZXN8bm8pJCIsICJ0eXBlIjogImNoZWNrIiwgImNvbnRhaW5lckNsYXNzIjogInotMiIsICJwYXR0ZXJuIjogIl4oeWVzfG5vKSQiLCAiaW5wVHlwZSI6ICJjaGVja2JveCIsICJuYW1lIjogIlVzZSBjbGllbnQgY2FjaGUiLCAiY29sdW1ucyI6IHsicGMiOiA0LCAidGFibGV0IjogNiwgIm1vYmlsZSI6IDEyfSwgImRpc2FibGVkIjogdHJ1ZSwgInZhbHVlIjogInllcyIsICJtZXRob2QiOiAic2NoZWR1bGVyIiwgInByZXZfdmFsdWUiOiAieWVzIiwgInBvcG92ZXJzIjogW3siaWNvbk5hbWUiOiAidHJlc3Bhc3MiLCAidGV4dCI6ICJpbnBfcG9wb3Zlcl9tZXRob2RfZGlzYWJsZWQifSwgeyJpY29uTmFtZSI6ICJkaXNrIiwgInRleHQiOiAiaW5wX3BvcG92ZXJfbXVsdGlzaXRlIn0sIHsiaWNvbk5hbWUiOiAiaW5mbyIsICJ0ZXh0IjogIlRlbGwgY2xpZW50IHRvIHN0b3JlIGxvY2FsbHkgc3RhdGljIGZpbGVzLiJ9XX0sICJDTElFTlRfQ0FDSEVfRVRBRyI6IHsiY29udGV4dCI6ICJtdWx0aXNpdGUiLCAiZGVmYXVsdCI6ICJ5ZXMiLCAiaGVscCI6ICJTZW5kIHRoZSBIVFRQIEVUYWcgaGVhZGVyIGZvciBzdGF0aWMgcmVzb3VyY2VzLiIsICJpZCI6ICJjbGllbnQtY2FjaGUtZXRhZyIsICJsYWJlbCI6ICJFVGFnIiwgInJlZ2V4IjogIl4oeWVzfG5vKSQiLCAidHlwZSI6ICJjaGVjayIsICJjb250YWluZXJDbGFzcyI6ICJ6LTEiLCAicGF0dGVybiI6ICJeKHllc3xubykkIiwgImlucFR5cGUiOiAiY2hlY2tib3giLCAibmFtZSI6ICJFVGFnIiwgImNvbHVtbnMiOiB7InBjIjogNCwgInRhYmxldCI6IDYsICJtb2JpbGUiOiAxMn0sICJkaXNhYmxlZCI6IGZhbHNlLCAidmFsdWUiOiAieWVzIiwgIm1ldGhvZCI6ICJkZWZhdWx0IiwgInByZXZfdmFsdWUiOiAieWVzIiwgInBvcG92ZXJzIjogW3siaWNvbk5hbWUiOiAiZGlzayIsICJ0ZXh0IjogImlucF9wb3BvdmVyX211bHRpc2l0ZSJ9LCB7Imljb25OYW1lIjogImluZm8iLCAidGV4dCI6ICJTZW5kIHRoZSBIVFRQIEVUYWcgaGVhZGVyIGZvciBzdGF0aWMgcmVzb3VyY2VzLiJ9XX0sICJDTElFTlRfQ0FDSEVfQ09OVFJPTCI6IHsiY29udGV4dCI6ICJtdWx0aXNpdGUiLCAiZGVmYXVsdCI6ICJwdWJsaWMsIG1heC1hZ2U9MTU1NTIwMDAiLCAiaGVscCI6ICJWYWx1ZSBvZiB0aGUgQ2FjaGUtQ29udHJvbCBIVFRQIGhlYWRlci4iLCAiaWQiOiAiY2xpZW50LWNhY2hlLWNvbnRyb2wiLCAibGFiZWwiOiAiQ2FjaGUtQ29udHJvbCBoZWFkZXIiLCAicmVnZXgiOiAiXig/ISgsID98ICkpKCgsICk/KCgobWF4LWFnZXxzLW1heGFnZXxzdGFsZS13aGlsZS1yZXZhbGlkYXRlfHN0YWxlLWlmLWVycm9yKT1cXGQrKD8hLipcXDYpKXwoKD8hLipwdWJsaWMpcHJpdmF0ZXwoPyEuKnByaXZhdGUpcHVibGljKXwobXVzdHxwcm94eSktcmV2YWxpZGF0ZXxtdXN0LXVuZGVyc3RhbmR8aW1tdXRhYmxlfG5vLShjYWNoZXxzdG9yZXx0cmFuc2Zvcm0pKSg/IS4qXFw0KSkrJCIsICJ0eXBlIjogInRleHQiLCAiY29udGFpbmVyQ2xhc3MiOiAiei0wIiwgInBhdHRlcm4iOiAiXig/ISgsID98ICkpKCgsICk/KCgobWF4LWFnZXxzLW1heGFnZXxzdGFsZS13aGlsZS1yZXZhbGlkYXRlfHN0YWxlLWlmLWVycm9yKT1cXGQrKD8hLipcXDYpKXwoKD8hLipwdWJsaWMpcHJpdmF0ZXwoPyEuKnByaXZhdGUpcHVibGljKXwobXVzdHxwcm94eSktcmV2YWxpZGF0ZXxtdXN0LXVuZGVyc3RhbmR8aW1tdXRhYmxlfG5vLShjYWNoZXxzdG9yZXx0cmFuc2Zvcm0pKSg/IS4qXFw0KSkrJCIsICJpbnBUeXBlIjogImlucHV0IiwgIm5hbWUiOiAiQ2FjaGUtQ29udHJvbCBoZWFkZXIiLCAiY29sdW1ucyI6IHsicGMiOiA0LCAidGFibGV0IjogNiwgIm1vYmlsZSI6IDEyfSwgImRpc2FibGVkIjogZmFsc2UsICJ2YWx1ZSI6ICJwdWJsaWMsIG1heC1hZ2U9MTU1NTIwMDAiLCAibWV0aG9kIjogImRlZmF1bHQiLCAicHJldl92YWx1ZSI6ICJwdWJsaWMsIG1heC1hZ2U9MTU1NTIwMDAiLCAicG9wb3ZlcnMiOiBbeyJpY29uTmFtZSI6ICJkaXNrIiwgInRleHQiOiAiaW5wX3BvcG92ZXJfbXVsdGlzaXRlIn0sIHsiaWNvbk5hbWUiOiAiaW5mbyIsICJ0ZXh0IjogIlZhbHVlIG9mIHRoZSBDYWNoZS1Db250cm9sIEhUVFAgaGVhZGVyLiJ9XX19LCAiY2hlY2tzdW0iOiBudWxsfSwgeyJpZCI6ICJjb3VudHJ5IiwgInN0cmVhbSI6ICJ5ZXMiLCAibmFtZSI6ICJDb3VudHJ5IiwgImRlc2NyaXB0aW9uIjogIkRlbnkgYWNjZXNzIGJhc2VkIG9uIHRoZSBjb3VudHJ5IG9mIHRoZSBjbGllbnQgSVAuIiwgInZlcnNpb24iOiAiMS4wIiwgInR5cGUiOiAiY29yZSIsICJtZXRob2QiOiAibWFudWFsIiwgInBhZ2UiOiB0cnVlLCAic2V0dGluZ3MiOiB7IkJMQUNLTElTVF9DT1VOVFJZIjogeyJjb250ZXh0IjogIm11bHRpc2l0ZSIsICJkZWZhdWx0IjogIiIsICJoZWxwIjogIkRlbnkgYWNjZXNzIGlmIHRoZSBjb3VudHJ5IG9mIHRoZSBjbGllbnQgaXMgaW4gdGhlIGxpc3QgKElTTyAzMTY2LTEgYWxwaGEtMiBmb3JtYXQgc2VwYXJhdGVkIHdpdGggc3BhY2VzKS4iLCAiaWQiOiAiY291bnRyeS1ibGFja2xpc3QiLCAibGFiZWwiOiAiQ291bnRyeSBibGFja2xpc3QiLCAicmVnZXgiOiAiXig/ISApKCAqKFtBLVpdezJ9KSg/IS4qXFwyKSAqKSokIiwgInR5cGUiOiAidGV4dCIsICJjb250YWluZXJDbGFzcyI6ICJ6LTEiLCAicGF0dGVybiI6ICJeKD8hICkoICooW0EtWl17Mn0pKD8hLipcXDIpICopKiQiLCAiaW5wVHlwZSI6ICJpbnB1dCIsICJuYW1lIjogIkNvdW50cnkgYmxhY2tsaXN0IiwgImNvbHVtbnMiOiB7InBjIjogNCwgInRhYmxldCI6IDYsICJtb2JpbGUiOiAxMn0sICJkaXNhYmxlZCI6IGZhbHNlLCAidmFsdWUiOiAiIiwgIm1ldGhvZCI6ICJkZWZhdWx0IiwgInByZXZfdmFsdWUiOiAiIiwgInBvcG92ZXJzIjogW3siaWNvbk5hbWUiOiAiZGlzayIsICJ0ZXh0IjogImlucF9wb3BvdmVyX211bHRpc2l0ZSJ9LCB7Imljb25OYW1lIjogImluZm8iLCAidGV4dCI6ICJEZW55IGFjY2VzcyBpZiB0aGUgY291bnRyeSBvZiB0aGUgY2xpZW50IGlzIGluIHRoZSBsaXN0IChJU08gMzE2Ni0xIGFscGhhLTIgZm9ybWF0IHNlcGFyYXRlZCB3aXRoIHNwYWNlcykuIn1dfSwgIldISVRFTElTVF9DT1VOVFJZIjogeyJjb250ZXh0IjogIm11bHRpc2l0ZSIsICJkZWZhdWx0IjogIiIsICJoZWxwIjogIkRlbnkgYWNjZXNzIGlmIHRoZSBjb3VudHJ5IG9mIHRoZSBjbGllbnQgaXMgbm90IGluIHRoZSBsaXN0IChJU08gMzE2Ni0xIGFscGhhLTIgZm9ybWF0IHNlcGFyYXRlZCB3aXRoIHNwYWNlcykuIiwgImlkIjogImNvdW50cnktd2hpdGVsaXN0IiwgImxhYmVsIjogIkNvdW50cnkgd2hpdGVsaXN0IiwgInJlZ2V4IjogIl4oPyEgKSggKihbQS1aXXsyfSkoPyEuKlxcMikgKikqJCIsICJ0eXBlIjogInRleHQiLCAiY29udGFpbmVyQ2xhc3MiOiAiei0wIiwgInBhdHRlcm4iOiAiXig/ISApKCAqKFtBLVpdezJ9KSg/IS4qXFwyKSAqKSokIiwgImlucFR5cGUiOiAiaW5wdXQiLCAibmFtZSI6ICJDb3VudHJ5IHdoaXRlbGlzdCIsICJjb2x1bW5zIjogeyJwYyI6IDQsICJ0YWJsZXQiOiA2LCAibW9iaWxlIjogMTJ9LCAiZGlzYWJsZWQiOiBmYWxzZSwgInZhbHVlIjogIiIsICJtZXRob2QiOiAiZGVmYXVsdCIsICJwcmV2X3ZhbHVlIjogIiIsICJwb3BvdmVycyI6IFt7Imljb25OYW1lIjogImRpc2siLCAidGV4dCI6ICJpbnBfcG9wb3Zlcl9tdWx0aXNpdGUifSwgeyJpY29uTmFtZSI6ICJpbmZvIiwgInRleHQiOiAiRGVueSBhY2Nlc3MgaWYgdGhlIGNvdW50cnkgb2YgdGhlIGNsaWVudCBpcyBub3QgaW4gdGhlIGxpc3QgKElTTyAzMTY2LTEgYWxwaGEtMiBmb3JtYXQgc2VwYXJhdGVkIHdpdGggc3BhY2VzKS4ifV19fSwgImNoZWNrc3VtIjogbnVsbH0sIHsiaWQiOiAiY3VzdG9tY2VydCIsICJzdHJlYW0iOiAieWVzIiwgIm5hbWUiOiAiQ3VzdG9tIEhUVFBTIGNlcnRpZmljYXRlIiwgImRlc2NyaXB0aW9uIjogIkNob29zZSBjdXN0b20gY2VydGlmaWNhdGUgZm9yIEhUVFBTLiIsICJ2ZXJzaW9uIjogIjEuMCIsICJ0eXBlIjogImNvcmUiLCAibWV0aG9kIjogIm1hbnVhbCIsICJwYWdlIjogZmFsc2UsICJzZXR0aW5ncyI6IHsiVVNFX0NVU1RPTV9TU0wiOiB7ImNvbnRleHQiOiAibXVsdGlzaXRlIiwgImRlZmF1bHQiOiAibm8iLCAiaGVscCI6ICJVc2UgY3VzdG9tIEhUVFBTIGNlcnRpZmljYXRlLiIsICJpZCI6ICJ1c2UtY3VzdG9tLWh0dHBzIiwgImxhYmVsIjogIlVzZSBjdXN0b20gY2VydGlmaWNhdGUiLCAicmVnZXgiOiAiXih5ZXN8bm8pJCIsICJ0eXBlIjogImNoZWNrIiwgImNvbnRhaW5lckNsYXNzIjogInotNCIsICJwYXR0ZXJuIjogIl4oeWVzfG5vKSQiLCAiaW5wVHlwZSI6ICJjaGVja2JveCIsICJuYW1lIjogIlVzZSBjdXN0b20gY2VydGlmaWNhdGUiLCAiY29sdW1ucyI6IHsicGMiOiA0LCAidGFibGV0IjogNiwgIm1vYmlsZSI6IDEyfSwgImRpc2FibGVkIjogZmFsc2UsICJ2YWx1ZSI6ICJubyIsICJtZXRob2QiOiAiZGVmYXVsdCIsICJwcmV2X3ZhbHVlIjogIm5vIiwgInBvcG92ZXJzIjogW3siaWNvbk5hbWUiOiAiZGlzayIsICJ0ZXh0IjogImlucF9wb3BvdmVyX211bHRpc2l0ZSJ9LCB7Imljb25OYW1lIjogImluZm8iLCAidGV4dCI6ICJVc2UgY3VzdG9tIEhUVFBTIGNlcnRpZmljYXRlLiJ9XX0sICJDVVNUT01fU1NMX0NFUlQiOiB7ImNvbnRleHQiOiAibXVsdGlzaXRlIiwgImRlZmF1bHQiOiAiIiwgImhlbHAiOiAiRnVsbCBwYXRoIG9mIHRoZSBjZXJ0aWZpY2F0ZSBvciBidW5kbGUgZmlsZSAobXVzdCBiZSByZWFkYWJsZSBieSB0aGUgc2NoZWR1bGVyKS4iLCAiaWQiOiAiY3VzdG9tLWh0dHBzLWNlcnQiLCAibGFiZWwiOiAiQ2VydGlmaWNhdGUgcGF0aCIsICJyZWdleCI6ICJeKC9bXFx3LiBcXC1dKykqLz8kIiwgInR5cGUiOiAidGV4dCIsICJjb250YWluZXJDbGFzcyI6ICJ6LTMiLCAicGF0dGVybiI6ICJeKC9bXFx3LiBcXC1dKykqLz8kIiwgImlucFR5cGUiOiAiaW5wdXQiLCAibmFtZSI6ICJDZXJ0aWZpY2F0ZSBwYXRoIiwgImNvbHVtbnMiOiB7InBjIjogNCwgInRhYmxldCI6IDYsICJtb2JpbGUiOiAxMn0sICJkaXNhYmxlZCI6IGZhbHNlLCAidmFsdWUiOiAiIiwgIm1ldGhvZCI6ICJkZWZhdWx0IiwgInByZXZfdmFsdWUiOiAiIiwgInBvcG92ZXJzIjogW3siaWNvbk5hbWUiOiAiZGlzayIsICJ0ZXh0IjogImlucF9wb3BvdmVyX211bHRpc2l0ZSJ9LCB7Imljb25OYW1lIjogImluZm8iLCAidGV4dCI6ICJGdWxsIHBhdGggb2YgdGhlIGNlcnRpZmljYXRlIG9yIGJ1bmRsZSBmaWxlIChtdXN0IGJlIHJlYWRhYmxlIGJ5IHRoZSBzY2hlZHVsZXIpLiJ9XX0sICJDVVNUT01fU1NMX0tFWSI6IHsiY29udGV4dCI6ICJtdWx0aXNpdGUiLCAiZGVmYXVsdCI6ICIiLCAiaGVscCI6ICJGdWxsIHBhdGggb2YgdGhlIGtleSBmaWxlIChtdXN0IGJlIHJlYWRhYmxlIGJ5IHRoZSBzY2hlZHVsZXIpLiIsICJpZCI6ICJjdXN0b20taHR0cHMta2V5IiwgImxhYmVsIjogIktleSBwYXRoIiwgInJlZ2V4IjogIl4oL1tcXHcuIFxcLV0rKSovPyQiLCAidHlwZSI6ICJ0ZXh0IiwgImNvbnRhaW5lckNsYXNzIjogInotMiIsICJwYXR0ZXJuIjogIl4oL1tcXHcuIFxcLV0rKSovPyQiLCAiaW5wVHlwZSI6ICJpbnB1dCIsICJuYW1lIjogIktleSBwYXRoIiwgImNvbHVtbnMiOiB7InBjIjogNCwgInRhYmxldCI6IDYsICJtb2JpbGUiOiAxMn0sICJkaXNhYmxlZCI6IGZhbHNlLCAidmFsdWUiOiAiIiwgIm1ldGhvZCI6ICJkZWZhdWx0IiwgInByZXZfdmFsdWUiOiAiIiwgInBvcG92ZXJzIjogW3siaWNvbk5hbWUiOiAiZGlzayIsICJ0ZXh0IjogImlucF9wb3BvdmVyX211bHRpc2l0ZSJ9LCB7Imljb25OYW1lIjogImluZm8iLCAidGV4dCI6ICJGdWxsIHBhdGggb2YgdGhlIGtleSBmaWxlIChtdXN0IGJlIHJlYWRhYmxlIGJ5IHRoZSBzY2hlZHVsZXIpLiJ9XX0sICJDVVNUT01fU1NMX0NFUlRfREFUQSI6IHsiY29udGV4dCI6ICJtdWx0aXNpdGUiLCAiZGVmYXVsdCI6ICIiLCAiaGVscCI6ICJDZXJ0aWZpY2F0ZSBkYXRhIGVuY29kZWQgaW4gYmFzZTY0LiIsICJpZCI6ICJjdXN0b20taHR0cHMtY2VydC1kYXRhIiwgImxhYmVsIjogIkNlcnRpZmljYXRlIGRhdGEgKGJhc2U2NCkiLCAicmVnZXgiOiAiXi4qJCIsICJ0eXBlIjogInRleHQiLCAiY29udGFpbmVyQ2xhc3MiOiAiei0xIiwgInBhdHRlcm4iOiAiXi4qJCIsICJpbnBUeXBlIjogImlucHV0IiwgIm5hbWUiOiAiQ2VydGlmaWNhdGUgZGF0YSAoYmFzZTY0KSIsICJjb2x1bW5zIjogeyJwYyI6IDQsICJ0YWJsZXQiOiA2LCAibW9iaWxlIjogMTJ9LCAiZGlzYWJsZWQiOiBmYWxzZSwgInZhbHVlIjogIiIsICJtZXRob2QiOiAiZGVmYXVsdCIsICJwcmV2X3ZhbHVlIjogIiIsICJwb3BvdmVycyI6IFt7Imljb25OYW1lIjogImRpc2siLCAidGV4dCI6ICJpbnBfcG9wb3Zlcl9tdWx0aXNpdGUifSwgeyJpY29uTmFtZSI6ICJpbmZvIiwgInRleHQiOiAiQ2VydGlmaWNhdGUgZGF0YSBlbmNvZGVkIGluIGJhc2U2NC4ifV19LCAiQ1VTVE9NX1NTTF9LRVlfREFUQSI6IHsiY29udGV4dCI6ICJtdWx0aXNpdGUiLCAiZGVmYXVsdCI6ICIiLCAiaGVscCI6ICJLZXkgZGF0YSBlbmNvZGVkIGluIGJhc2U2NC4iLCAiaWQiOiAiY3VzdG9tLWh0dHBzLWtleS1kYXRhIiwgImxhYmVsIjogIktleSBkYXRhIChiYXNlNjQpIiwgInJlZ2V4IjogIl4uKiQiLCAidHlwZSI6ICJ0ZXh0IiwgImNvbnRhaW5lckNsYXNzIjogInotMCIsICJwYXR0ZXJuIjogIl4uKiQiLCAiaW5wVHlwZSI6ICJpbnB1dCIsICJuYW1lIjogIktleSBkYXRhIChiYXNlNjQpIiwgImNvbHVtbnMiOiB7InBjIjogNCwgInRhYmxldCI6IDYsICJtb2JpbGUiOiAxMn0sICJkaXNhYmxlZCI6IGZhbHNlLCAidmFsdWUiOiAiIiwgIm1ldGhvZCI6ICJkZWZhdWx0IiwgInByZXZfdmFsdWUiOiAiIiwgInBvcG92ZXJzIjogW3siaWNvbk5hbWUiOiAiZGlzayIsICJ0ZXh0IjogImlucF9wb3BvdmVyX211bHRpc2l0ZSJ9LCB7Imljb25OYW1lIjogImluZm8iLCAidGV4dCI6ICJLZXkgZGF0YSBlbmNvZGVkIGluIGJhc2U2NC4ifV19fSwgImNoZWNrc3VtIjogbnVsbH0sIHsiaWQiOiAiZG5zYmwiLCAic3RyZWFtIjogInllcyIsICJuYW1lIjogIkROU0JMIiwgImRlc2NyaXB0aW9uIjogIkRlbnkgYWNjZXNzIGJhc2VkIG9uIGV4dGVybmFsIEROU0JMIHNlcnZlcnMuIiwgInZlcnNpb24iOiAiMS4wIiwgInR5cGUiOiAiY29yZSIsICJtZXRob2QiOiAibWFudWFsIiwgInBhZ2UiOiB0cnVlLCAic2V0dGluZ3MiOiB7IlVTRV9ETlNCTCI6IHsiY29udGV4dCI6ICJtdWx0aXNpdGUiLCAiZGVmYXVsdCI6ICJ5ZXMiLCAiaGVscCI6ICJBY3RpdmF0ZSBETlNCTCBmZWF0dXJlLiIsICJpZCI6ICJ1c2UtZG5zYmwiLCAibGFiZWwiOiAiQWN0aXZhdGUgRE5TQkwiLCAicmVnZXgiOiAiXih5ZXN8bm8pJCIsICJ0eXBlIjogImNoZWNrIiwgImNvbnRhaW5lckNsYXNzIjogInotMCIsICJwYXR0ZXJuIjogIl4oeWVzfG5vKSQiLCAiaW5wVHlwZSI6ICJjaGVja2JveCIsICJuYW1lIjogIkFjdGl2YXRlIEROU0JMIiwgImNvbHVtbnMiOiB7InBjIjogNCwgInRhYmxldCI6IDYsICJtb2JpbGUiOiAxMn0sICJkaXNhYmxlZCI6IGZhbHNlLCAidmFsdWUiOiAieWVzIiwgIm1ldGhvZCI6ICJkZWZhdWx0IiwgInByZXZfdmFsdWUiOiAieWVzIiwgInBvcG92ZXJzIjogW3siaWNvbk5hbWUiOiAiZGlzayIsICJ0ZXh0IjogImlucF9wb3BvdmVyX211bHRpc2l0ZSJ9LCB7Imljb25OYW1lIjogImluZm8iLCAidGV4dCI6ICJBY3RpdmF0ZSBETlNCTCBmZWF0dXJlLiJ9XX19LCAiY2hlY2tzdW0iOiBudWxsfSwgeyJpZCI6ICJlcnJvcnMiLCAic3RyZWFtIjogIm5vIiwgIm5hbWUiOiAiRXJyb3JzIiwgImRlc2NyaXB0aW9uIjogIk1hbmFnZSBkZWZhdWx0IGVycm9yIHBhZ2VzIiwgInZlcnNpb24iOiAiMS4wIiwgInR5cGUiOiAiY29yZSIsICJtZXRob2QiOiAibWFudWFsIiwgInBhZ2UiOiB0cnVlLCAic2V0dGluZ3MiOiB7IkVSUk9SUyI6IHsiY29udGV4dCI6ICJtdWx0aXNpdGUiLCAiZGVmYXVsdCI6ICIiLCAiaGVscCI6ICJMaXN0IG9mIEhUVFAgZXJyb3IgY29kZSBhbmQgY29ycmVzcG9uZGluZyBlcnJvciBwYWdlcywgc2VwYXJhdGVkIHdpdGggc3BhY2VzICg0MDQ9L215NDA0Lmh0bWwgNDAzPS9lcnJvcnMvNDAzLmh0bWwgLi4uKS4iLCAiaWQiOiAiZXJyb3JzIiwgImxhYmVsIjogIkVycm9ycyIsICJyZWdleCI6ICJeKD8hICkoID8oWzEtNV1cXGR7Mn0pKD8hLipcXDIoPyFbXj1dKSk9KFxcL1tcXHdcXF0ufjpcXC8/I1xcW0AhJFxcJidcXChcXCkqKyw7PVxcLV0qKSg/IS4qXFwzKD8hLikpKSokIiwgInR5cGUiOiAidGV4dCIsICJjb250YWluZXJDbGFzcyI6ICJ6LTEiLCAicGF0dGVybiI6ICJeKD8hICkoID8oWzEtNV1cXGR7Mn0pKD8hLipcXDIoPyFbXj1dKSk9KFxcL1tcXHdcXF0ufjpcXC8/I1xcW0AhJFxcJidcXChcXCkqKyw7PVxcLV0qKSg/IS4qXFwzKD8hLikpKSokIiwgImlucFR5cGUiOiAiaW5wdXQiLCAibmFtZSI6ICJFcnJvcnMiLCAiY29sdW1ucyI6IHsicGMiOiA0LCAidGFibGV0IjogNiwgIm1vYmlsZSI6IDEyfSwgImRpc2FibGVkIjogZmFsc2UsICJ2YWx1ZSI6ICIiLCAibWV0aG9kIjogImRlZmF1bHQiLCAicHJldl92YWx1ZSI6ICIiLCAicG9wb3ZlcnMiOiBbeyJpY29uTmFtZSI6ICJkaXNrIiwgInRleHQiOiAiaW5wX3BvcG92ZXJfbXVsdGlzaXRlIn0sIHsiaWNvbk5hbWUiOiAiaW5mbyIsICJ0ZXh0IjogIkxpc3Qgb2YgSFRUUCBlcnJvciBjb2RlIGFuZCBjb3JyZXNwb25kaW5nIGVycm9yIHBhZ2VzLCBzZXBhcmF0ZWQgd2l0aCBzcGFjZXMgKDQwND0vbXk0MDQuaHRtbCA0MDM9L2Vycm9ycy80MDMuaHRtbCAuLi4pLiJ9XX0sICJJTlRFUkNFUFRFRF9FUlJPUl9DT0RFUyI6IHsiY29udGV4dCI6ICJtdWx0aXNpdGUiLCAiZGVmYXVsdCI6ICI0MDAgNDAxIDQwMyA0MDQgNDA1IDQxMyA0MjkgNTAwIDUwMSA1MDIgNTAzIDUwNCIsICJoZWxwIjogIkxpc3Qgb2YgSFRUUCBlcnJvciBjb2RlIGludGVyY2VwdGVkIGJ5IEJ1bmtlcldlYiIsICJpZCI6ICJpbnRlcmNlcHRlZC1lcnJvci1jb2RlcyIsICJsYWJlbCI6ICJJbnRlcmNlcHRlZCBlcnJvciBjb2RlcyIsICJyZWdleCI6ICJeKCAqKFsxLTVdXFxkezJ9KSg/IS4qXFwyKSAqKSskIiwgInR5cGUiOiAidGV4dCIsICJjb250YWluZXJDbGFzcyI6ICJ6LTAiLCAicGF0dGVybiI6ICJeKCAqKFsxLTVdXFxkezJ9KSg/IS4qXFwyKSAqKSskIiwgImlucFR5cGUiOiAiaW5wdXQiLCAibmFtZSI6ICJJbnRlcmNlcHRlZCBlcnJvciBjb2RlcyIsICJjb2x1bW5zIjogeyJwYyI6IDQsICJ0YWJsZXQiOiA2LCAibW9iaWxlIjogMTJ9LCAiZGlzYWJsZWQiOiBmYWxzZSwgInZhbHVlIjogIjQwMCA0MDEgNDAzIDQwNCA0MDUgNDEzIDQyOSA1MDAgNTAxIDUwMiA1MDMgNTA0IiwgIm1ldGhvZCI6ICJkZWZhdWx0IiwgInByZXZfdmFsdWUiOiAiNDAwIDQwMSA0MDMgNDA0IDQwNSA0MTMgNDI5IDUwMCA1MDEgNTAyIDUwMyA1MDQiLCAicG9wb3ZlcnMiOiBbeyJpY29uTmFtZSI6ICJkaXNrIiwgInRleHQiOiAiaW5wX3BvcG92ZXJfbXVsdGlzaXRlIn0sIHsiaWNvbk5hbWUiOiAiaW5mbyIsICJ0ZXh0IjogIkxpc3Qgb2YgSFRUUCBlcnJvciBjb2RlIGludGVyY2VwdGVkIGJ5IEJ1bmtlcldlYiJ9XX19LCAiY2hlY2tzdW0iOiBudWxsfSwgeyJpZCI6ICJncmV5bGlzdCIsICJzdHJlYW0iOiAicGFydGlhbCIsICJuYW1lIjogIkdyZXlsaXN0IiwgImRlc2NyaXB0aW9uIjogIkFsbG93IGFjY2VzcyB3aGlsZSBrZWVwaW5nIHNlY3VyaXR5IGZlYXR1cmVzIGJhc2VkIG9uIGludGVybmFsIGFuZCBleHRlcm5hbCBJUC9uZXR3b3JrL3JETlMvQVNOIGdyZXlsaXN0cy4iLCAidmVyc2lvbiI6ICIxLjAiLCAidHlwZSI6ICJjb3JlIiwgIm1ldGhvZCI6ICJtYW51YWwiLCAicGFnZSI6IHRydWUsICJzZXR0aW5ncyI6IHsiVVNFX0dSRVlMSVNUIjogeyJjb250ZXh0IjogIm11bHRpc2l0ZSIsICJkZWZhdWx0IjogIm5vIiwgImhlbHAiOiAiQWN0aXZhdGUgZ3JleWxpc3QgZmVhdHVyZS4iLCAiaWQiOiAidXNlLWdyZXlsaXN0IiwgImxhYmVsIjogIkFjdGl2YXRlIGdyZXlsaXN0aW5nIiwgInJlZ2V4IjogIl4oeWVzfG5vKSQiLCAidHlwZSI6ICJjaGVjayIsICJjb250YWluZXJDbGFzcyI6ICJ6LTYiLCAicGF0dGVybiI6ICJeKHllc3xubykkIiwgImlucFR5cGUiOiAiY2hlY2tib3giLCAibmFtZSI6ICJBY3RpdmF0ZSBncmV5bGlzdGluZyIsICJjb2x1bW5zIjogeyJwYyI6IDQsICJ0YWJsZXQiOiA2LCAibW9iaWxlIjogMTJ9LCAiZGlzYWJsZWQiOiBmYWxzZSwgInZhbHVlIjogIm5vIiwgIm1ldGhvZCI6ICJkZWZhdWx0IiwgInByZXZfdmFsdWUiOiAibm8iLCAicG9wb3ZlcnMiOiBbeyJpY29uTmFtZSI6ICJkaXNrIiwgInRleHQiOiAiaW5wX3BvcG92ZXJfbXVsdGlzaXRlIn0sIHsiaWNvbk5hbWUiOiAiaW5mbyIsICJ0ZXh0IjogIkFjdGl2YXRlIGdyZXlsaXN0IGZlYXR1cmUuIn1dfSwgIkdSRVlMSVNUX0lQIjogeyJjb250ZXh0IjogIm11bHRpc2l0ZSIsICJkZWZhdWx0IjogIiIsICJoZWxwIjogIkxpc3Qgb2YgSVAvbmV0d29yaywgc2VwYXJhdGVkIHdpdGggc3BhY2VzLCB0byBwdXQgaW50byB0aGUgZ3JleWxpc3QuIiwgImlkIjogImdyZXlsaXN0LWlwIiwgImxhYmVsIjogIkdyZXlsaXN0IElQL25ldHdvcmsiLCAicmVnZXgiOiAiXig/ISApKCAqKCgoXFxiMjVbMC01XXxcXGIyWzAtNF1cXGR8XFxiWzAxXT9cXGRcXGQ/KShcXC4oMjVbMC01XXwyWzAtNF1cXGR8WzAxXT9cXGRcXGQ/KSl7M30pKFxcLyhbMS0yXVswLTldP3wzWzAtMl0/fFswNC05XSkpP3woKFswLTlhLWZBLUZdezEsNH06KXs3fVswLTlhLWZBLUZdezEsNH18KFswLTlhLWZBLUZdezEsNH06KXsxLDd9OnwoWzAtOWEtZkEtRl17MSw0fTopezEsNn06WzAtOWEtZkEtRl17MSw0fXwoWzAtOWEtZkEtRl17MSw0fTopezEsNX0oOlswLTlhLWZBLUZdezEsNH0pezEsMn18KFswLTlhLWZBLUZdezEsNH06KXsxLDR9KDpbMC05YS1mQS1GXXsxLDR9KXsxLDN9fChbMC05YS1mQS1GXXsxLDR9Oil7MSwzfSg6WzAtOWEtZkEtRl17MSw0fSl7MSw0fXwoWzAtOWEtZkEtRl17MSw0fTopezEsMn0oOlswLTlhLWZBLUZdezEsNH0pezEsNX18WzAtOWEtZkEtRl17MSw0fTooKDpbMC05YS1mQS1GXXsxLDR9KXsxLDZ9KXw6KCg6WzAtOWEtZkEtRl17MSw0fSl7MSw3fXw6KXxmZTgwOig6WzAtOWEtZkEtRl1aezAsNH0pezAsNH0lWzAtOWEtekEtWl0rfDo6KGZmZmYoOjB7MSw0fSk/Oik/KCgyNVswLTVdfCgyWzAtNF18MT9cXGQpP1xcZClcXC4pezN9KDI1WzAtNV18KDJbMC00XXwxP1xcZCk/XFxkKXwoWzAtOWEtZkEtRl17MSw0fTopezEsNH06KCgyNVswLTVdfCgyWzAtNF18MT9cXGQpP1xcZClcXC4pezN9KDI1WzAtNV18KDJbMC00XXwxP1xcZCk/XFxkKSkoXFwvKDEyWzAtOF18MVswMV1bMC05XXxbMC05XVswLTldPykpPykoPyEuKlxcRFxcMihbXlxcZFxcL118JCkpICopKiQiLCAidHlwZSI6ICJ0ZXh0IiwgImNvbnRhaW5lckNsYXNzIjogInotNSIsICJwYXR0ZXJuIjogIl4oPyEgKSggKigoKFxcYjI1WzAtNV18XFxiMlswLTRdXFxkfFxcYlswMV0/XFxkXFxkPykoXFwuKDI1WzAtNV18MlswLTRdXFxkfFswMV0/XFxkXFxkPykpezN9KShcXC8oWzEtMl1bMC05XT98M1swLTJdP3xbMDQtOV0pKT98KChbMC05YS1mQS1GXXsxLDR9Oil7N31bMC05YS1mQS1GXXsxLDR9fChbMC05YS1mQS1GXXsxLDR9Oil7MSw3fTp8KFswLTlhLWZBLUZdezEsNH06KXsxLDZ9OlswLTlhLWZBLUZdezEsNH18KFswLTlhLWZBLUZdezEsNH06KXsxLDV9KDpbMC05YS1mQS1GXXsxLDR9KXsxLDJ9fChbMC05YS1mQS1GXXsxLDR9Oil7MSw0fSg6WzAtOWEtZkEtRl17MSw0fSl7MSwzfXwoWzAtOWEtZkEtRl17MSw0fTopezEsM30oOlswLTlhLWZBLUZdezEsNH0pezEsNH18KFswLTlhLWZBLUZdezEsNH06KXsxLDJ9KDpbMC05YS1mQS1GXXsxLDR9KXsxLDV9fFswLTlhLWZBLUZdezEsNH06KCg6WzAtOWEtZkEtRl17MSw0fSl7MSw2fSl8OigoOlswLTlhLWZBLUZdezEsNH0pezEsN318Oil8ZmU4MDooOlswLTlhLWZBLUZdWnswLDR9KXswLDR9JVswLTlhLXpBLVpdK3w6OihmZmZmKDowezEsNH0pPzopPygoMjVbMC01XXwoMlswLTRdfDE/XFxkKT9cXGQpXFwuKXszfSgyNVswLTVdfCgyWzAtNF18MT9cXGQpP1xcZCl8KFswLTlhLWZBLUZdezEsNH06KXsxLDR9OigoMjVbMC01XXwoMlswLTRdfDE/XFxkKT9cXGQpXFwuKXszfSgyNVswLTVdfCgyWzAtNF18MT9cXGQpP1xcZCkpKFxcLygxMlswLThdfDFbMDFdWzAtOV18WzAtOV1bMC05XT8pKT8pKD8hLipcXERcXDIoW15cXGRcXC9dfCQpKSAqKSokIiwgImlucFR5cGUiOiAiaW5wdXQiLCAibmFtZSI6ICJHcmV5bGlzdCBJUC9uZXR3b3JrIiwgImNvbHVtbnMiOiB7InBjIjogNCwgInRhYmxldCI6IDYsICJtb2JpbGUiOiAxMn0sICJkaXNhYmxlZCI6IGZhbHNlLCAidmFsdWUiOiAiIiwgIm1ldGhvZCI6ICJkZWZhdWx0IiwgInByZXZfdmFsdWUiOiAiIiwgInBvcG92ZXJzIjogW3siaWNvbk5hbWUiOiAiZGlzayIsICJ0ZXh0IjogImlucF9wb3BvdmVyX211bHRpc2l0ZSJ9LCB7Imljb25OYW1lIjogImluZm8iLCAidGV4dCI6ICJMaXN0IG9mIElQL25ldHdvcmssIHNlcGFyYXRlZCB3aXRoIHNwYWNlcywgdG8gcHV0IGludG8gdGhlIGdyZXlsaXN0LiJ9XX0sICJHUkVZTElTVF9SRE5TIjogeyJjb250ZXh0IjogIm11bHRpc2l0ZSIsICJkZWZhdWx0IjogIiIsICJoZWxwIjogIkxpc3Qgb2YgcmV2ZXJzZSBETlMgc3VmZml4ZXMsIHNlcGFyYXRlZCB3aXRoIHNwYWNlcywgdG8gcHV0IGludG8gdGhlIGdyZXlsaXN0LiIsICJpZCI6ICJncmV5bGlzdC1yZG5zIiwgImxhYmVsIjogIkdyZXlsaXN0IHJldmVyc2UgRE5TIiwgInJlZ2V4IjogIl4oICooKFteIF0rKSg/IS4qXFwzKCB8JCkpKSAqKSokIiwgInR5cGUiOiAidGV4dCIsICJjb250YWluZXJDbGFzcyI6ICJ6LTQiLCAicGF0dGVybiI6ICJeKCAqKChbXiBdKykoPyEuKlxcMyggfCQpKSkgKikqJCIsICJpbnBUeXBlIjogImlucHV0IiwgIm5hbWUiOiAiR3JleWxpc3QgcmV2ZXJzZSBETlMiLCAiY29sdW1ucyI6IHsicGMiOiA0LCAidGFibGV0IjogNiwgIm1vYmlsZSI6IDEyfSwgImRpc2FibGVkIjogZmFsc2UsICJ2YWx1ZSI6ICIiLCAibWV0aG9kIjogImRlZmF1bHQiLCAicHJldl92YWx1ZSI6ICIiLCAicG9wb3ZlcnMiOiBbeyJpY29uTmFtZSI6ICJkaXNrIiwgInRleHQiOiAiaW5wX3BvcG92ZXJfbXVsdGlzaXRlIn0sIHsiaWNvbk5hbWUiOiAiaW5mbyIsICJ0ZXh0IjogIkxpc3Qgb2YgcmV2ZXJzZSBETlMgc3VmZml4ZXMsIHNlcGFyYXRlZCB3aXRoIHNwYWNlcywgdG8gcHV0IGludG8gdGhlIGdyZXlsaXN0LiJ9XX0sICJHUkVZTElTVF9SRE5TX0dMT0JBTCI6IHsiY29udGV4dCI6ICJtdWx0aXNpdGUiLCAiZGVmYXVsdCI6ICJ5ZXMiLCAiaGVscCI6ICJPbmx5IHBlcmZvcm0gUkROUyBncmV5bGlzdCBjaGVja3Mgb24gZ2xvYmFsIElQIGFkZHJlc3Nlcy4iLCAiaWQiOiAiZ3JleWxpc3QtcmRucy1nbG9iYWwiLCAibGFiZWwiOiAiR3JleWxpc3QgcmV2ZXJzZSBETlMgZ2xvYmFsIElQcyIsICJyZWdleCI6ICJeKHllc3xubykkIiwgInR5cGUiOiAiY2hlY2siLCAiY29udGFpbmVyQ2xhc3MiOiAiei0zIiwgInBhdHRlcm4iOiAiXih5ZXN8bm8pJCIsICJpbnBUeXBlIjogImNoZWNrYm94IiwgIm5hbWUiOiAiR3JleWxpc3QgcmV2ZXJzZSBETlMgZ2xvYmFsIElQcyIsICJjb2x1bW5zIjogeyJwYyI6IDQsICJ0YWJsZXQiOiA2LCAibW9iaWxlIjogMTJ9LCAiZGlzYWJsZWQiOiBmYWxzZSwgInZhbHVlIjogInllcyIsICJtZXRob2QiOiAiZGVmYXVsdCIsICJwcmV2X3ZhbHVlIjogInllcyIsICJwb3BvdmVycyI6IFt7Imljb25OYW1lIjogImRpc2siLCAidGV4dCI6ICJpbnBfcG9wb3Zlcl9tdWx0aXNpdGUifSwgeyJpY29uTmFtZSI6ICJpbmZvIiwgInRleHQiOiAiT25seSBwZXJmb3JtIFJETlMgZ3JleWxpc3QgY2hlY2tzIG9uIGdsb2JhbCBJUCBhZGRyZXNzZXMuIn1dfSwgIkdSRVlMSVNUX0FTTiI6IHsiY29udGV4dCI6ICJtdWx0aXNpdGUiLCAiZGVmYXVsdCI6ICIiLCAiaGVscCI6ICJMaXN0IG9mIEFTTiBudW1iZXJzLCBzZXBhcmF0ZWQgd2l0aCBzcGFjZXMsIHRvIHB1dCBpbnRvIHRoZSBncmV5bGlzdC4iLCAiaWQiOiAiZ3JleWxpc3QtYXNuIiwgImxhYmVsIjogIkdyZXlsaXN0IEFTTiIsICJyZWdleCI6ICJeXiggKigoQVNOPyk/KFxcZCspXFxiKD8hLipbU04gXVxcNFxcYikpICopKiQiLCAidHlwZSI6ICJ0ZXh0IiwgImNvbnRhaW5lckNsYXNzIjogInotMiIsICJwYXR0ZXJuIjogIl5eKCAqKChBU04/KT8oXFxkKylcXGIoPyEuKltTTiBdXFw0XFxiKSkgKikqJCIsICJpbnBUeXBlIjogImlucHV0IiwgIm5hbWUiOiAiR3JleWxpc3QgQVNOIiwgImNvbHVtbnMiOiB7InBjIjogNCwgInRhYmxldCI6IDYsICJtb2JpbGUiOiAxMn0sICJkaXNhYmxlZCI6IGZhbHNlLCAidmFsdWUiOiAiIiwgIm1ldGhvZCI6ICJkZWZhdWx0IiwgInByZXZfdmFsdWUiOiAiIiwgInBvcG92ZXJzIjogW3siaWNvbk5hbWUiOiAiZGlzayIsICJ0ZXh0IjogImlucF9wb3BvdmVyX211bHRpc2l0ZSJ9LCB7Imljb25OYW1lIjogImluZm8iLCAidGV4dCI6ICJMaXN0IG9mIEFTTiBudW1iZXJzLCBzZXBhcmF0ZWQgd2l0aCBzcGFjZXMsIHRvIHB1dCBpbnRvIHRoZSBncmV5bGlzdC4ifV19LCAiR1JFWUxJU1RfVVNFUl9BR0VOVCI6IHsiY29udGV4dCI6ICJtdWx0aXNpdGUiLCAiZGVmYXVsdCI6ICIiLCAiaGVscCI6ICJMaXN0IG9mIFVzZXItQWdlbnQgKFBDUkUgcmVnZXgpLCBzZXBhcmF0ZWQgd2l0aCBzcGFjZXMsIHRvIHB1dCBpbnRvIHRoZSBncmV5bGlzdC4iLCAiaWQiOiAiZ3JleWxpc3QtdXNlci1hZ2VudCIsICJsYWJlbCI6ICJHcmV5bGlzdCBVc2VyLUFnZW50IiwgInJlZ2V4IjogIl4uKiQiLCAidHlwZSI6ICJ0ZXh0IiwgImNvbnRhaW5lckNsYXNzIjogInotMSIsICJwYXR0ZXJuIjogIl4uKiQiLCAiaW5wVHlwZSI6ICJpbnB1dCIsICJuYW1lIjogIkdyZXlsaXN0IFVzZXItQWdlbnQiLCAiY29sdW1ucyI6IHsicGMiOiA0LCAidGFibGV0IjogNiwgIm1vYmlsZSI6IDEyfSwgImRpc2FibGVkIjogZmFsc2UsICJ2YWx1ZSI6ICIiLCAibWV0aG9kIjogImRlZmF1bHQiLCAicHJldl92YWx1ZSI6ICIiLCAicG9wb3ZlcnMiOiBbeyJpY29uTmFtZSI6ICJkaXNrIiwgInRleHQiOiAiaW5wX3BvcG92ZXJfbXVsdGlzaXRlIn0sIHsiaWNvbk5hbWUiOiAiaW5mbyIsICJ0ZXh0IjogIkxpc3Qgb2YgVXNlci1BZ2VudCAoUENSRSByZWdleCksIHNlcGFyYXRlZCB3aXRoIHNwYWNlcywgdG8gcHV0IGludG8gdGhlIGdyZXlsaXN0LiJ9XX0sICJHUkVZTElTVF9VUkkiOiB7ImNvbnRleHQiOiAibXVsdGlzaXRlIiwgImRlZmF1bHQiOiAiIiwgImhlbHAiOiAiTGlzdCBvZiBVUkkgKFBDUkUgcmVnZXgpLCBzZXBhcmF0ZWQgd2l0aCBzcGFjZXMsIHRvIHB1dCBpbnRvIHRoZSBncmV5bGlzdC4iLCAiaWQiOiAiZ3JleWxpc3QtdXJpIiwgImxhYmVsIjogIkdyZXlsaXN0IFVSSSIsICJyZWdleCI6ICJeLiokIiwgInR5cGUiOiAidGV4dCIsICJjb250YWluZXJDbGFzcyI6ICJ6LTAiLCAicGF0dGVybiI6ICJeLiokIiwgImlucFR5cGUiOiAiaW5wdXQiLCAibmFtZSI6ICJHcmV5bGlzdCBVUkkiLCAiY29sdW1ucyI6IHsicGMiOiA0LCAidGFibGV0IjogNiwgIm1vYmlsZSI6IDEyfSwgImRpc2FibGVkIjogZmFsc2UsICJ2YWx1ZSI6ICIiLCAibWV0aG9kIjogImRlZmF1bHQiLCAicHJldl92YWx1ZSI6ICIiLCAicG9wb3ZlcnMiOiBbeyJpY29uTmFtZSI6ICJkaXNrIiwgInRleHQiOiAiaW5wX3BvcG92ZXJfbXVsdGlzaXRlIn0sIHsiaWNvbk5hbWUiOiAiaW5mbyIsICJ0ZXh0IjogIkxpc3Qgb2YgVVJJIChQQ1JFIHJlZ2V4KSwgc2VwYXJhdGVkIHdpdGggc3BhY2VzLCB0byBwdXQgaW50byB0aGUgZ3JleWxpc3QuIn1dfX0sICJjaGVja3N1bSI6IG51bGx9LCB7ImlkIjogImd6aXAiLCAic3RyZWFtIjogIm5vIiwgIm5hbWUiOiAiR3ppcCIsICJkZXNjcmlwdGlvbiI6ICJDb21wcmVzcyBIVFRQIHJlcXVlc3RzIHdpdGggdGhlIGd6aXAgYWxnb3JpdGhtLiIsICJ2ZXJzaW9uIjogIjEuMCIsICJ0eXBlIjogImNvcmUiLCAibWV0aG9kIjogIm1hbnVhbCIsICJwYWdlIjogZmFsc2UsICJzZXR0aW5ncyI6IHsiVVNFX0daSVAiOiB7ImNvbnRleHQiOiAibXVsdGlzaXRlIiwgImRlZmF1bHQiOiAibm8iLCAiaGVscCI6ICJVc2UgZ3ppcCIsICJpZCI6ICJ1c2UtZ3ppcCIsICJsYWJlbCI6ICJVc2UgZ3ppcCIsICJyZWdleCI6ICJeKHllc3xubykkIiwgInR5cGUiOiAiY2hlY2siLCAiY29udGFpbmVyQ2xhc3MiOiAiei00IiwgInBhdHRlcm4iOiAiXih5ZXN8bm8pJCIsICJpbnBUeXBlIjogImNoZWNrYm94IiwgIm5hbWUiOiAiVXNlIGd6aXAiLCAiY29sdW1ucyI6IHsicGMiOiA0LCAidGFibGV0IjogNiwgIm1vYmlsZSI6IDEyfSwgImRpc2FibGVkIjogdHJ1ZSwgInZhbHVlIjogInllcyIsICJtZXRob2QiOiAic2NoZWR1bGVyIiwgInByZXZfdmFsdWUiOiAieWVzIiwgInBvcG92ZXJzIjogW3siaWNvbk5hbWUiOiAidHJlc3Bhc3MiLCAidGV4dCI6ICJpbnBfcG9wb3Zlcl9tZXRob2RfZGlzYWJsZWQifSwgeyJpY29uTmFtZSI6ICJkaXNrIiwgInRleHQiOiAiaW5wX3BvcG92ZXJfbXVsdGlzaXRlIn0sIHsiaWNvbk5hbWUiOiAiaW5mbyIsICJ0ZXh0IjogIlVzZSBnemlwIn1dfSwgIkdaSVBfVFlQRVMiOiB7ImNvbnRleHQiOiAibXVsdGlzaXRlIiwgImRlZmF1bHQiOiAiYXBwbGljYXRpb24vYXRvbSt4bWwgYXBwbGljYXRpb24vamF2YXNjcmlwdCBhcHBsaWNhdGlvbi9qc29uIGFwcGxpY2F0aW9uL3Jzcyt4bWwgYXBwbGljYXRpb24vdm5kLm1zLWZvbnRvYmplY3QgYXBwbGljYXRpb24veC1mb250LW9wZW50eXBlIGFwcGxpY2F0aW9uL3gtZm9udC10cnVldHlwZSBhcHBsaWNhdGlvbi94LWZvbnQtdHRmIGFwcGxpY2F0aW9uL3gtamF2YXNjcmlwdCBhcHBsaWNhdGlvbi94aHRtbCt4bWwgYXBwbGljYXRpb24veG1sIGZvbnQvZW90IGZvbnQvb3BlbnR5cGUgZm9udC9vdGYgZm9udC90cnVldHlwZSBpbWFnZS9zdmcreG1sIGltYWdlL3ZuZC5taWNyb3NvZnQuaWNvbiBpbWFnZS94LWljb24gaW1hZ2UveC13aW4tYml0bWFwIHRleHQvY3NzIHRleHQvamF2YXNjcmlwdCB0ZXh0L3BsYWluIHRleHQveG1sIiwgImhlbHAiOiAiTGlzdCBvZiBNSU1FIHR5cGVzIHRoYXQgd2lsbCBiZSBjb21wcmVzc2VkIHdpdGggZ3ppcC4iLCAiaWQiOiAiZ3ppcC10eXBlcyIsICJsYWJlbCI6ICJNSU1FIHR5cGVzIiwgInJlZ2V4IjogIl4oPyEgKSggPyhbXFwtXFx3Ll0rL1tcXC1cXHcuK10rKSg/IS4qXFwyKD8hLikpKSskIiwgInR5cGUiOiAidGV4dCIsICJjb250YWluZXJDbGFzcyI6ICJ6LTMiLCAicGF0dGVybiI6ICJeKD8hICkoID8oW1xcLVxcdy5dKy9bXFwtXFx3LitdKykoPyEuKlxcMig/IS4pKSkrJCIsICJpbnBUeXBlIjogImlucHV0IiwgIm5hbWUiOiAiTUlNRSB0eXBlcyIsICJjb2x1bW5zIjogeyJwYyI6IDQsICJ0YWJsZXQiOiA2LCAibW9iaWxlIjogMTJ9LCAiZGlzYWJsZWQiOiBmYWxzZSwgInZhbHVlIjogImFwcGxpY2F0aW9uL2F0b20reG1sIGFwcGxpY2F0aW9uL2phdmFzY3JpcHQgYXBwbGljYXRpb24vanNvbiBhcHBsaWNhdGlvbi9yc3MreG1sIGFwcGxpY2F0aW9uL3ZuZC5tcy1mb250b2JqZWN0IGFwcGxpY2F0aW9uL3gtZm9udC1vcGVudHlwZSBhcHBsaWNhdGlvbi94LWZvbnQtdHJ1ZXR5cGUgYXBwbGljYXRpb24veC1mb250LXR0ZiBhcHBsaWNhdGlvbi94LWphdmFzY3JpcHQgYXBwbGljYXRpb24veGh0bWwreG1sIGFwcGxpY2F0aW9uL3htbCBmb250L2VvdCBmb250L29wZW50eXBlIGZvbnQvb3RmIGZvbnQvdHJ1ZXR5cGUgaW1hZ2Uvc3ZnK3htbCBpbWFnZS92bmQubWljcm9zb2Z0Lmljb24gaW1hZ2UveC1pY29uIGltYWdlL3gtd2luLWJpdG1hcCB0ZXh0L2NzcyB0ZXh0L2phdmFzY3JpcHQgdGV4dC9wbGFpbiB0ZXh0L3htbCIsICJtZXRob2QiOiAiZGVmYXVsdCIsICJwcmV2X3ZhbHVlIjogImFwcGxpY2F0aW9uL2F0b20reG1sIGFwcGxpY2F0aW9uL2phdmFzY3JpcHQgYXBwbGljYXRpb24vanNvbiBhcHBsaWNhdGlvbi9yc3MreG1sIGFwcGxpY2F0aW9uL3ZuZC5tcy1mb250b2JqZWN0IGFwcGxpY2F0aW9uL3gtZm9udC1vcGVudHlwZSBhcHBsaWNhdGlvbi94LWZvbnQtdHJ1ZXR5cGUgYXBwbGljYXRpb24veC1mb250LXR0ZiBhcHBsaWNhdGlvbi94LWphdmFzY3JpcHQgYXBwbGljYXRpb24veGh0bWwreG1sIGFwcGxpY2F0aW9uL3htbCBmb250L2VvdCBmb250L29wZW50eXBlIGZvbnQvb3RmIGZvbnQvdHJ1ZXR5cGUgaW1hZ2Uvc3ZnK3htbCBpbWFnZS92bmQubWljcm9zb2Z0Lmljb24gaW1hZ2UveC1pY29uIGltYWdlL3gtd2luLWJpdG1hcCB0ZXh0L2NzcyB0ZXh0L2phdmFzY3JpcHQgdGV4dC9wbGFpbiB0ZXh0L3htbCIsICJwb3BvdmVycyI6IFt7Imljb25OYW1lIjogImRpc2siLCAidGV4dCI6ICJpbnBfcG9wb3Zlcl9tdWx0aXNpdGUifSwgeyJpY29uTmFtZSI6ICJpbmZvIiwgInRleHQiOiAiTGlzdCBvZiBNSU1FIHR5cGVzIHRoYXQgd2lsbCBiZSBjb21wcmVzc2VkIHdpdGggZ3ppcC4ifV19LCAiR1pJUF9NSU5fTEVOR1RIIjogeyJjb250ZXh0IjogIm11bHRpc2l0ZSIsICJkZWZhdWx0IjogIjEwMDAiLCAiaGVscCI6ICJNaW5pbXVtIGxlbmd0aCBmb3IgZ3ppcCBjb21wcmVzc2lvbi4iLCAiaWQiOiAiZ3ppcC1taW4tbGVuZ3RoIiwgImxhYmVsIjogIk1pbmltdW0gbGVuZ3RoIiwgInJlZ2V4IjogIl5cXGQrJCIsICJ0eXBlIjogInRleHQiLCAiY29udGFpbmVyQ2xhc3MiOiAiei0yIiwgInBhdHRlcm4iOiAiXlxcZCskIiwgImlucFR5cGUiOiAiaW5wdXQiLCAibmFtZSI6ICJNaW5pbXVtIGxlbmd0aCIsICJjb2x1bW5zIjogeyJwYyI6IDQsICJ0YWJsZXQiOiA2LCAibW9iaWxlIjogMTJ9LCAiZGlzYWJsZWQiOiBmYWxzZSwgInZhbHVlIjogIjEwMDAiLCAibWV0aG9kIjogImRlZmF1bHQiLCAicHJldl92YWx1ZSI6ICIxMDAwIiwgInBvcG92ZXJzIjogW3siaWNvbk5hbWUiOiAiZGlzayIsICJ0ZXh0IjogImlucF9wb3BvdmVyX211bHRpc2l0ZSJ9LCB7Imljb25OYW1lIjogImluZm8iLCAidGV4dCI6ICJNaW5pbXVtIGxlbmd0aCBmb3IgZ3ppcCBjb21wcmVzc2lvbi4ifV19LCAiR1pJUF9DT01QX0xFVkVMIjogeyJjb250ZXh0IjogIm11bHRpc2l0ZSIsICJkZWZhdWx0IjogIjUiLCAiaGVscCI6ICJUaGUgY29tcHJlc3Npb24gbGV2ZWwgb2YgdGhlIGd6aXAgYWxnb3JpdGhtLiIsICJpZCI6ICJnemlwLWNvbXAtbGV2ZWwiLCAibGFiZWwiOiAiQ29tcHJlc3Npb24gbGV2ZWwiLCAicmVnZXgiOiAiXlsxLTldJCIsICJ0eXBlIjogInNlbGVjdCIsICJjb250YWluZXJDbGFzcyI6ICJ6LTEiLCAicGF0dGVybiI6ICJeWzEtOV0kIiwgImlucFR5cGUiOiAic2VsZWN0IiwgIm5hbWUiOiAiQ29tcHJlc3Npb24gbGV2ZWwiLCAidmFsdWVzIjogWyIxIiwgIjIiLCAiMyIsICI0IiwgIjUiLCAiNiIsICI3IiwgIjgiLCAiOSJdLCAiY29sdW1ucyI6IHsicGMiOiA0LCAidGFibGV0IjogNiwgIm1vYmlsZSI6IDEyfSwgImRpc2FibGVkIjogZmFsc2UsICJ2YWx1ZSI6ICI1IiwgIm1ldGhvZCI6ICJkZWZhdWx0IiwgInByZXZfdmFsdWUiOiAiNSIsICJwb3BvdmVycyI6IFt7Imljb25OYW1lIjogImRpc2siLCAidGV4dCI6ICJpbnBfcG9wb3Zlcl9tdWx0aXNpdGUifSwgeyJpY29uTmFtZSI6ICJpbmZvIiwgInRleHQiOiAiVGhlIGNvbXByZXNzaW9uIGxldmVsIG9mIHRoZSBnemlwIGFsZ29yaXRobS4ifV19LCAiR1pJUF9QUk9YSUVEIjogeyJjb250ZXh0IjogIm11bHRpc2l0ZSIsICJkZWZhdWx0IjogIm5vLWNhY2hlIG5vLXN0b3JlIHByaXZhdGUgZXhwaXJlZCBhdXRoIiwgImhlbHAiOiAiV2hpY2gga2luZCBvZiBwcm94aWVkIHJlcXVlc3RzIHdlIHNob3VsZCBjb21wcmVzcy4iLCAiaWQiOiAiZ3ppcC1wcm94aWVkIiwgImxhYmVsIjogIlByb3hpZWQgcmVxdWVzdHMiLCAicmVnZXgiOiAiXi4qJCIsICJ0eXBlIjogInRleHQiLCAiY29udGFpbmVyQ2xhc3MiOiAiei0wIiwgInBhdHRlcm4iOiAiXi4qJCIsICJpbnBUeXBlIjogImlucHV0IiwgIm5hbWUiOiAiUHJveGllZCByZXF1ZXN0cyIsICJjb2x1bW5zIjogeyJwYyI6IDQsICJ0YWJsZXQiOiA2LCAibW9iaWxlIjogMTJ9LCAiZGlzYWJsZWQiOiBmYWxzZSwgInZhbHVlIjogIm5vLWNhY2hlIG5vLXN0b3JlIHByaXZhdGUgZXhwaXJlZCBhdXRoIiwgIm1ldGhvZCI6ICJkZWZhdWx0IiwgInByZXZfdmFsdWUiOiAibm8tY2FjaGUgbm8tc3RvcmUgcHJpdmF0ZSBleHBpcmVkIGF1dGgiLCAicG9wb3ZlcnMiOiBbeyJpY29uTmFtZSI6ICJkaXNrIiwgInRleHQiOiAiaW5wX3BvcG92ZXJfbXVsdGlzaXRlIn0sIHsiaWNvbk5hbWUiOiAiaW5mbyIsICJ0ZXh0IjogIldoaWNoIGtpbmQgb2YgcHJveGllZCByZXF1ZXN0cyB3ZSBzaG91bGQgY29tcHJlc3MuIn1dfX0sICJjaGVja3N1bSI6IG51bGx9LCB7ImlkIjogImluamVjdCIsICJzdHJlYW0iOiAibm8iLCAibmFtZSI6ICJIVE1MIGluamVjdGlvbiIsICJkZXNjcmlwdGlvbiI6ICJJbmplY3QgY3VzdG9tIEhUTUwgY29kZSBiZWZvcmUgdGhlIDwvYm9keT4gdGFnLiIsICJ2ZXJzaW9uIjogIjEuMCIsICJ0eXBlIjogImNvcmUiLCAibWV0aG9kIjogIm1hbnVhbCIsICJwYWdlIjogZmFsc2UsICJzZXR0aW5ncyI6IHsiSU5KRUNUX0JPRFkiOiB7ImNvbnRleHQiOiAibXVsdGlzaXRlIiwgImRlZmF1bHQiOiAiIiwgImhlbHAiOiAiVGhlIEhUTUwgY29kZSB0byBpbmplY3QuIiwgImlkIjogImluamVjdC1ib2R5IiwgImxhYmVsIjogIkhUTUwgY29kZSIsICJyZWdleCI6ICJeLiokIiwgInR5cGUiOiAidGV4dCIsICJjb250YWluZXJDbGFzcyI6ICJ6LTAiLCAicGF0dGVybiI6ICJeLiokIiwgImlucFR5cGUiOiAiaW5wdXQiLCAibmFtZSI6ICJIVE1MIGNvZGUiLCAiY29sdW1ucyI6IHsicGMiOiA0LCAidGFibGV0IjogNiwgIm1vYmlsZSI6IDEyfSwgImRpc2FibGVkIjogZmFsc2UsICJ2YWx1ZSI6ICIiLCAibWV0aG9kIjogImRlZmF1bHQiLCAicHJldl92YWx1ZSI6ICIiLCAicG9wb3ZlcnMiOiBbeyJpY29uTmFtZSI6ICJkaXNrIiwgInRleHQiOiAiaW5wX3BvcG92ZXJfbXVsdGlzaXRlIn0sIHsiaWNvbk5hbWUiOiAiaW5mbyIsICJ0ZXh0IjogIlRoZSBIVE1MIGNvZGUgdG8gaW5qZWN0LiJ9XX19LCAiY2hlY2tzdW0iOiBudWxsfSwgeyJpZCI6ICJoZWFkZXJzIiwgInN0cmVhbSI6ICJubyIsICJuYW1lIjogIkhlYWRlcnMiLCAiZGVzY3JpcHRpb24iOiAiTWFuYWdlIEhUVFAgaGVhZGVycyBzZW50IHRvIGNsaWVudHMuIiwgInZlcnNpb24iOiAiMS4wIiwgInR5cGUiOiAiY29yZSIsICJtZXRob2QiOiAibWFudWFsIiwgInBhZ2UiOiBmYWxzZSwgInNldHRpbmdzIjogeyJSRU1PVkVfSEVBREVSUyI6IHsiY29udGV4dCI6ICJtdWx0aXNpdGUiLCAiZGVmYXVsdCI6ICJTZXJ2ZXIgRXhwZWN0LUNUIFgtUG93ZXJlZC1CeSBYLUFzcE5ldC1WZXJzaW9uIFgtQXNwTmV0TXZjLVZlcnNpb24iLCAiaGVscCI6ICJIZWFkZXJzIHRvIHJlbW92ZSAoSGVhZGVyMSBIZWFkZXIyIEhlYWRlcjMgLi4uKSIsICJpZCI6ICJyZW1vdmUtaGVhZGVycyIsICJsYWJlbCI6ICJSZW1vdmUgaGVhZGVycyIsICJyZWdleCI6ICJeKD8hICkoID9bXFx3XFwtXSspKiQiLCAidHlwZSI6ICJ0ZXh0IiwgImNvbnRhaW5lckNsYXNzIjogInotMTIiLCAicGF0dGVybiI6ICJeKD8hICkoID9bXFx3XFwtXSspKiQiLCAiaW5wVHlwZSI6ICJpbnB1dCIsICJuYW1lIjogIlJlbW92ZSBoZWFkZXJzIiwgImNvbHVtbnMiOiB7InBjIjogNCwgInRhYmxldCI6IDYsICJtb2JpbGUiOiAxMn0sICJkaXNhYmxlZCI6IGZhbHNlLCAidmFsdWUiOiAiU2VydmVyIEV4cGVjdC1DVCBYLVBvd2VyZWQtQnkgWC1Bc3BOZXQtVmVyc2lvbiBYLUFzcE5ldE12Yy1WZXJzaW9uIFB1YmxpYy1LZXktUGlucyIsICJtZXRob2QiOiAiZGVmYXVsdCIsICJwcmV2X3ZhbHVlIjogIlNlcnZlciBFeHBlY3QtQ1QgWC1Qb3dlcmVkLUJ5IFgtQXNwTmV0LVZlcnNpb24gWC1Bc3BOZXRNdmMtVmVyc2lvbiBQdWJsaWMtS2V5LVBpbnMiLCAicG9wb3ZlcnMiOiBbeyJpY29uTmFtZSI6ICJkaXNrIiwgInRleHQiOiAiaW5wX3BvcG92ZXJfbXVsdGlzaXRlIn0sIHsiaWNvbk5hbWUiOiAiaW5mbyIsICJ0ZXh0IjogIkhlYWRlcnMgdG8gcmVtb3ZlIChIZWFkZXIxIEhlYWRlcjIgSGVhZGVyMyAuLi4pIn1dfSwgIktFRVBfVVBTVFJFQU1fSEVBREVSUyI6IHsiY29udGV4dCI6ICJtdWx0aXNpdGUiLCAiZGVmYXVsdCI6ICJDb250ZW50LVNlY3VyaXR5LVBvbGljeSBQZXJtaXNzaW9ucy1Qb2xpY3kgRmVhdHVyZS1Qb2xpY3kgWC1GcmFtZS1PcHRpb25zIiwgImhlbHAiOiAiSGVhZGVycyB0byBrZWVwIGZyb20gdXBzdHJlYW0gKEhlYWRlcjEgSGVhZGVyMiBIZWFkZXIzIC4uLiBvciAqIGZvciBhbGwpLiIsICJpZCI6ICJrZWVwLXVwc3RyZWFtLWhlYWRlcnMiLCAibGFiZWwiOiAiS2VlcCB1cHN0cmVhbSBoZWFkZXJzIiwgInJlZ2V4IjogIl4oKD8hICkoID9bXFx3XFwtXSspK3xcXCopPyQiLCAidHlwZSI6ICJ0ZXh0IiwgImNvbnRhaW5lckNsYXNzIjogInotMTEiLCAicGF0dGVybiI6ICJeKCg/ISApKCA/W1xcd1xcLV0rKSt8XFwqKT8kIiwgImlucFR5cGUiOiAiaW5wdXQiLCAibmFtZSI6ICJLZWVwIHVwc3RyZWFtIGhlYWRlcnMiLCAiY29sdW1ucyI6IHsicGMiOiA0LCAidGFibGV0IjogNiwgIm1vYmlsZSI6IDEyfSwgImRpc2FibGVkIjogZmFsc2UsICJ2YWx1ZSI6ICJDb250ZW50LVNlY3VyaXR5LVBvbGljeSBQZXJtaXNzaW9ucy1Qb2xpY3kgWC1GcmFtZS1PcHRpb25zIiwgIm1ldGhvZCI6ICJkZWZhdWx0IiwgInByZXZfdmFsdWUiOiAiQ29udGVudC1TZWN1cml0eS1Qb2xpY3kgUGVybWlzc2lvbnMtUG9saWN5IFgtRnJhbWUtT3B0aW9ucyIsICJwb3BvdmVycyI6IFt7Imljb25OYW1lIjogImRpc2siLCAidGV4dCI6ICJpbnBfcG9wb3Zlcl9tdWx0aXNpdGUifSwgeyJpY29uTmFtZSI6ICJpbmZvIiwgInRleHQiOiAiSGVhZGVycyB0byBrZWVwIGZyb20gdXBzdHJlYW0gKEhlYWRlcjEgSGVhZGVyMiBIZWFkZXIzIC4uLiBvciAqIGZvciBhbGwpLiJ9XX0sICJTVFJJQ1RfVFJBTlNQT1JUX1NFQ1VSSVRZIjogeyJjb250ZXh0IjogIm11bHRpc2l0ZSIsICJkZWZhdWx0IjogIm1heC1hZ2U9MzE1MzYwMDAiLCAiaGVscCI6ICJWYWx1ZSBmb3IgdGhlIFN0cmljdC1UcmFuc3BvcnQtU2VjdXJpdHkgaGVhZGVyLiIsICJpZCI6ICJzdHJpY3QtdHJhbnNwb3J0LXNlY3VyaXR5IiwgImxhYmVsIjogIlN0cmljdC1UcmFuc3BvcnQtU2VjdXJpdHkiLCAicmVnZXgiOiAiXm1heC1hZ2U9XFxkKyg7IGluY2x1ZGVTdWJEb21haW5zKDsgcHJlbG9hZCk/KT8kIiwgInR5cGUiOiAidGV4dCIsICJjb250YWluZXJDbGFzcyI6ICJ6LTEwIiwgInBhdHRlcm4iOiAiXm1heC1hZ2U9XFxkKyg7IGluY2x1ZGVTdWJEb21haW5zKDsgcHJlbG9hZCk/KT8kIiwgImlucFR5cGUiOiAiaW5wdXQiLCAibmFtZSI6ICJTdHJpY3QtVHJhbnNwb3J0LVNlY3VyaXR5IiwgImNvbHVtbnMiOiB7InBjIjogNCwgInRhYmxldCI6IDYsICJtb2JpbGUiOiAxMn0sICJkaXNhYmxlZCI6IGZhbHNlLCAidmFsdWUiOiAibWF4LWFnZT0zMTUzNjAwMDsgaW5jbHVkZVN1YkRvbWFpbnM7IHByZWxvYWQiLCAibWV0aG9kIjogImRlZmF1bHQiLCAicHJldl92YWx1ZSI6ICJtYXgtYWdlPTMxNTM2MDAwOyBpbmNsdWRlU3ViRG9tYWluczsgcHJlbG9hZCIsICJwb3BvdmVycyI6IFt7Imljb25OYW1lIjogImRpc2siLCAidGV4dCI6ICJpbnBfcG9wb3Zlcl9tdWx0aXNpdGUifSwgeyJpY29uTmFtZSI6ICJpbmZvIiwgInRleHQiOiAiVmFsdWUgZm9yIHRoZSBTdHJpY3QtVHJhbnNwb3J0LVNlY3VyaXR5IGhlYWRlci4ifV19LCAiQ09PS0lFX0FVVE9fU0VDVVJFX0ZMQUciOiB7ImNvbnRleHQiOiAibXVsdGlzaXRlIiwgImRlZmF1bHQiOiAieWVzIiwgImhlbHAiOiAiQXV0b21hdGljYWxseSBhZGQgdGhlIFNlY3VyZSBmbGFnIHRvIGFsbCBjb29raWVzLiIsICJpZCI6ICJjb29raWUtYXV0by1zZWN1cmUtZmxhZyIsICJsYWJlbCI6ICJDb29raWUgYXV0byBTZWN1cmUgZmxhZyIsICJyZWdleCI6ICJeKHllc3xubykkIiwgInR5cGUiOiAiY2hlY2siLCAiY29udGFpbmVyQ2xhc3MiOiAiei04IiwgInBhdHRlcm4iOiAiXih5ZXN8bm8pJCIsICJpbnBUeXBlIjogImNoZWNrYm94IiwgIm5hbWUiOiAiQ29va2llIGF1dG8gU2VjdXJlIGZsYWciLCAiY29sdW1ucyI6IHsicGMiOiA0LCAidGFibGV0IjogNiwgIm1vYmlsZSI6IDEyfSwgImRpc2FibGVkIjogZmFsc2UsICJ2YWx1ZSI6ICJ5ZXMiLCAibWV0aG9kIjogImRlZmF1bHQiLCAicHJldl92YWx1ZSI6ICJ5ZXMiLCAicG9wb3ZlcnMiOiBbeyJpY29uTmFtZSI6ICJkaXNrIiwgInRleHQiOiAiaW5wX3BvcG92ZXJfbXVsdGlzaXRlIn0sIHsiaWNvbk5hbWUiOiAiaW5mbyIsICJ0ZXh0IjogIkF1dG9tYXRpY2FsbHkgYWRkIHRoZSBTZWN1cmUgZmxhZyB0byBhbGwgY29va2llcy4ifV19LCAiQ09OVEVOVF9TRUNVUklUWV9QT0xJQ1kiOiB7ImNvbnRleHQiOiAibXVsdGlzaXRlIiwgImRlZmF1bHQiOiAib2JqZWN0LXNyYyAnbm9uZSc7IGZvcm0tYWN0aW9uICdzZWxmJzsgZnJhbWUtYW5jZXN0b3JzICdzZWxmJzsiLCAiaGVscCI6ICJWYWx1ZSBmb3IgdGhlIENvbnRlbnQtU2VjdXJpdHktUG9saWN5IGhlYWRlci4iLCAiaWQiOiAiY29udGVudC1zZWN1cml0eS1wb2xpY3kiLCAibGFiZWwiOiAiQ29udGVudC1TZWN1cml0eS1Qb2xpY3kiLCAicmVnZXgiOiAiXi4qJCIsICJ0eXBlIjogInRleHQiLCAiY29udGFpbmVyQ2xhc3MiOiAiei03IiwgInBhdHRlcm4iOiAiXi4qJCIsICJpbnBUeXBlIjogImlucHV0IiwgIm5hbWUiOiAiQ29udGVudC1TZWN1cml0eS1Qb2xpY3kiLCAiY29sdW1ucyI6IHsicGMiOiA0LCAidGFibGV0IjogNiwgIm1vYmlsZSI6IDEyfSwgImRpc2FibGVkIjogZmFsc2UsICJ2YWx1ZSI6ICJvYmplY3Qtc3JjICdub25lJzsgZm9ybS1hY3Rpb24gJ3NlbGYnOyBmcmFtZS1hbmNlc3RvcnMgJ3NlbGYnOyIsICJtZXRob2QiOiAiZGVmYXVsdCIsICJwcmV2X3ZhbHVlIjogIm9iamVjdC1zcmMgJ25vbmUnOyBmb3JtLWFjdGlvbiAnc2VsZic7IGZyYW1lLWFuY2VzdG9ycyAnc2VsZic7IiwgInBvcG92ZXJzIjogW3siaWNvbk5hbWUiOiAiZGlzayIsICJ0ZXh0IjogImlucF9wb3BvdmVyX211bHRpc2l0ZSJ9LCB7Imljb25OYW1lIjogImluZm8iLCAidGV4dCI6ICJWYWx1ZSBmb3IgdGhlIENvbnRlbnQtU2VjdXJpdHktUG9saWN5IGhlYWRlci4ifV19LCAiQ09OVEVOVF9TRUNVUklUWV9QT0xJQ1lfUkVQT1JUX09OTFkiOiB7ImNvbnRleHQiOiAibXVsdGlzaXRlIiwgImRlZmF1bHQiOiAibm8iLCAiaGVscCI6ICJTZW5kIHJlcG9ydHMgZm9yIHZpb2xhdGlvbnMgb2YgdGhlIENvbnRlbnQtU2VjdXJpdHktUG9saWN5IGhlYWRlciBpbnN0ZWFkIG9mIGJsb2NraW5nIHRoZW0uIiwgImlkIjogImNvbnRlbnQtc2VjdXJpdHktcG9saWN5LXJlcG9ydC1vbmx5IiwgImxhYmVsIjogIkNvbnRlbnQtU2VjdXJpdHktUG9saWN5LVJlcG9ydC1Pbmx5IiwgInJlZ2V4IjogIl4oeWVzfG5vKSQiLCAidHlwZSI6ICJjaGVjayIsICJjb250YWluZXJDbGFzcyI6ICJ6LTYiLCAicGF0dGVybiI6ICJeKHllc3xubykkIiwgImlucFR5cGUiOiAiY2hlY2tib3giLCAibmFtZSI6ICJDb250ZW50LVNlY3VyaXR5LVBvbGljeS1SZXBvcnQtT25seSIsICJjb2x1bW5zIjogeyJwYyI6IDQsICJ0YWJsZXQiOiA2LCAibW9iaWxlIjogMTJ9LCAiZGlzYWJsZWQiOiBmYWxzZSwgInZhbHVlIjogIm5vIiwgIm1ldGhvZCI6ICJkZWZhdWx0IiwgInByZXZfdmFsdWUiOiAibm8iLCAicG9wb3ZlcnMiOiBbeyJpY29uTmFtZSI6ICJkaXNrIiwgInRleHQiOiAiaW5wX3BvcG92ZXJfbXVsdGlzaXRlIn0sIHsiaWNvbk5hbWUiOiAiaW5mbyIsICJ0ZXh0IjogIlNlbmQgcmVwb3J0cyBmb3IgdmlvbGF0aW9ucyBvZiB0aGUgQ29udGVudC1TZWN1cml0eS1Qb2xpY3kgaGVhZGVyIGluc3RlYWQgb2YgYmxvY2tpbmcgdGhlbS4ifV19LCAiUkVGRVJSRVJfUE9MSUNZIjogeyJjb250ZXh0IjogIm11bHRpc2l0ZSIsICJkZWZhdWx0IjogInN0cmljdC1vcmlnaW4td2hlbi1jcm9zcy1vcmlnaW4iLCAiaGVscCI6ICJWYWx1ZSBmb3IgdGhlIFJlZmVycmVyLVBvbGljeSBoZWFkZXIuIiwgImlkIjogInJlZmVycmVyLXBvbGljeSIsICJsYWJlbCI6ICJSZWZlcnJlci1Qb2xpY3kiLCAicmVnZXgiOiAiXig/IV4oLHwgKSkoKCwgKT8obm8tcmVmZXJyZXItd2hlbi1kb3duZ3JhZGV8bm8tcmVmZXJyZXJ8b3JpZ2luLXdoZW4tY3Jvc3Mtb3JpZ2lufHNhbWUtb3JpZ2lufHN0cmljdC1vcmlnaW4td2hlbi1jcm9zcy1vcmlnaW58c3RyaWN0LW9yaWdpbnxvcmlnaW58dW5zYWZlLXVybCkoPyFcXGIuKiwgXFw0XFxiKSkqJCIsICJ0eXBlIjogInRleHQiLCAiY29udGFpbmVyQ2xhc3MiOiAiei01IiwgInBhdHRlcm4iOiAiXig/IV4oLHwgKSkoKCwgKT8obm8tcmVmZXJyZXItd2hlbi1kb3duZ3JhZGV8bm8tcmVmZXJyZXJ8b3JpZ2luLXdoZW4tY3Jvc3Mtb3JpZ2lufHNhbWUtb3JpZ2lufHN0cmljdC1vcmlnaW4td2hlbi1jcm9zcy1vcmlnaW58c3RyaWN0LW9yaWdpbnxvcmlnaW58dW5zYWZlLXVybCkoPyFcXGIuKiwgXFw0XFxiKSkqJCIsICJpbnBUeXBlIjogImlucHV0IiwgIm5hbWUiOiAiUmVmZXJyZXItUG9saWN5IiwgImNvbHVtbnMiOiB7InBjIjogNCwgInRhYmxldCI6IDYsICJtb2JpbGUiOiAxMn0sICJkaXNhYmxlZCI6IGZhbHNlLCAidmFsdWUiOiAic3RyaWN0LW9yaWdpbi13aGVuLWNyb3NzLW9yaWdpbiIsICJtZXRob2QiOiAiZGVmYXVsdCIsICJwcmV2X3ZhbHVlIjogInN0cmljdC1vcmlnaW4td2hlbi1jcm9zcy1vcmlnaW4iLCAicG9wb3ZlcnMiOiBbeyJpY29uTmFtZSI6ICJkaXNrIiwgInRleHQiOiAiaW5wX3BvcG92ZXJfbXVsdGlzaXRlIn0sIHsiaWNvbk5hbWUiOiAiaW5mbyIsICJ0ZXh0IjogIlZhbHVlIGZvciB0aGUgUmVmZXJyZXItUG9saWN5IGhlYWRlci4ifV19LCAiUEVSTUlTU0lPTlNfUE9MSUNZIjogeyJjb250ZXh0IjogIm11bHRpc2l0ZSIsICJkZWZhdWx0IjogImFjY2VsZXJvbWV0ZXI9KCksIGFtYmllbnQtbGlnaHQtc2Vuc29yPSgpLCBhdXRvcGxheT0oKSwgYmF0dGVyeT0oKSwgY2FtZXJhPSgpLCBjcm9zcy1vcmlnaW4taXNvbGF0ZWQ9KCksIGRpc3BsYXktY2FwdHVyZT0oKSwgZG9jdW1lbnQtZG9tYWluPSgpLCBlbmNyeXB0ZWQtbWVkaWE9KCksIGV4ZWN1dGlvbi13aGlsZS1ub3QtcmVuZGVyZWQ9KCksIGV4ZWN1dGlvbi13aGlsZS1vdXQtb2Ytdmlld3BvcnQ9KCksIGZ1bGxzY3JlZW49KCksIGdlb2xvY2F0aW9uPSgpLCBneXJvc2NvcGU9KCksIGhpZD0oKSwgaWRsZS1kZXRlY3Rpb249KCksIG1hZ25ldG9tZXRlcj0oKSwgbWljcm9waG9uZT0oKSwgbWlkaT0oKSwgbmF2aWdhdGlvbi1vdmVycmlkZT0oKSwgcGF5bWVudD0oKSwgcGljdHVyZS1pbi1waWN0dXJlPSgpLCBwdWJsaWNrZXktY3JlZGVudGlhbHMtZ2V0PSgpLCBzY3JlZW4td2FrZS1sb2NrPSgpLCBzZXJpYWw9KCksIHVzYj0oKSwgd2ViLXNoYXJlPSgpLCB4ci1zcGF0aWFsLXRyYWNraW5nPSgpIiwgImhlbHAiOiAiVmFsdWUgZm9yIHRoZSBQZXJtaXNzaW9ucy1Qb2xpY3kgaGVhZGVyLiIsICJpZCI6ICJwZXJtaXNzaW9ucy1wb2xpY3kiLCAibGFiZWwiOiAiUGVybWlzc2lvbnMtUG9saWN5IiwgInJlZ2V4IjogIl4oPyFbLCBdKSgsPyA/KFthLXpcXC1dKykoPyEuKlteXFwtXVxcMj0pPShcXCp8XFwoKCA/KHNlbGZ8XFx1MDAyMmh0dHBzPzpcXC9cXC9bXFwtXFx3QDolLit+Iz1dK1tcXC1cXHdcXChcXCkhQDolKy5+Iz8mXFwvPSRdKlxcdTAwMjIpKD89WyBcXCldKSkqXFwpKSkqJCIsICJ0eXBlIjogInRleHQiLCAiY29udGFpbmVyQ2xhc3MiOiAiei00IiwgInBhdHRlcm4iOiAiXig/IVssIF0pKCw/ID8oW2EtelxcLV0rKSg/IS4qW15cXC1dXFwyPSk9KFxcKnxcXCgoID8oc2VsZnxcXHUwMDIyaHR0cHM/OlxcL1xcL1tcXC1cXHdAOiUuK34jPV0rW1xcLVxcd1xcKFxcKSFAOiUrLn4jPyZcXC89JF0qXFx1MDAyMikoPz1bIFxcKV0pKSpcXCkpKSokIiwgImlucFR5cGUiOiAiaW5wdXQiLCAibmFtZSI6ICJQZXJtaXNzaW9ucy1Qb2xpY3kiLCAiY29sdW1ucyI6IHsicGMiOiA0LCAidGFibGV0IjogNiwgIm1vYmlsZSI6IDEyfSwgImRpc2FibGVkIjogZmFsc2UsICJ2YWx1ZSI6ICJhY2NlbGVyb21ldGVyPSgpLCBhbWJpZW50LWxpZ2h0LXNlbnNvcj0oKSwgYXR0cmlidXRpb24tcmVwb3J0aW5nPSgpLCBhdXRvcGxheT0oKSwgYmF0dGVyeT0oKSwgYmx1ZXRvb3RoPSgpLCBicm93c2luZy10b3BpY3M9KCksIGNhbWVyYT0oKSwgY29tcHV0ZS1wcmVzc3VyZT0oKSwgZGlzcGxheS1jYXB0dXJlPSgpLCBkb2N1bWVudC1kb21haW49KCksIGVuY3J5cHRlZC1tZWRpYT0oKSwgZXhlY3V0aW9uLXdoaWxlLW5vdC1yZW5kZXJlZD0oKSwgZXhlY3V0aW9uLXdoaWxlLW91dC1vZi12aWV3cG9ydD0oKSwgZnVsbHNjcmVlbj0oKSwgZ2FtZXBhZD0oKSwgZ2VvbG9jYXRpb249KCksIGd5cm9zY29wZT0oKSwgaGlkPSgpLCBpZGVudGl0eS1jcmVkZW50aWFscy1nZXQ9KCksIGlkbGUtZGV0ZWN0aW9uPSgpLCBsb2NhbC1mb250cz0oKSwgbWFnbmV0b21ldGVyPSgpLCBtaWNyb3Bob25lPSgpLCBtaWRpPSgpLCBvdHAtY3JlZGVudGlhbHM9KCksIHBheW1lbnQ9KCksIHBpY3R1cmUtaW4tcGljdHVyZT0oKSwgcHVibGlja2V5LWNyZWRlbnRpYWxzLWNyZWF0ZT0oKSwgcHVibGlja2V5LWNyZWRlbnRpYWxzLWdldD0oKSwgc2NyZWVuLXdha2UtbG9jaz0oKSwgc2VyaWFsPSgpLCBzcGVha2VyLXNlbGVjdGlvbj0oKSwgc3RvcmFnZS1hY2Nlc3M9KCksIHVzYj0oKSwgd2ViLXNoYXJlPSgpLCB3aW5kb3ctbWFuYWdlbWVudD0oKSwgeHItc3BhdGlhbC10cmFja2luZz0oKSIsICJtZXRob2QiOiAiZGVmYXVsdCIsICJwcmV2X3ZhbHVlIjogImFjY2VsZXJvbWV0ZXI9KCksIGFtYmllbnQtbGlnaHQtc2Vuc29yPSgpLCBhdHRyaWJ1dGlvbi1yZXBvcnRpbmc9KCksIGF1dG9wbGF5PSgpLCBiYXR0ZXJ5PSgpLCBibHVldG9vdGg9KCksIGJyb3dzaW5nLXRvcGljcz0oKSwgY2FtZXJhPSgpLCBjb21wdXRlLXByZXNzdXJlPSgpLCBkaXNwbGF5LWNhcHR1cmU9KCksIGRvY3VtZW50LWRvbWFpbj0oKSwgZW5jcnlwdGVkLW1lZGlhPSgpLCBleGVjdXRpb24td2hpbGUtbm90LXJlbmRlcmVkPSgpLCBleGVjdXRpb24td2hpbGUtb3V0LW9mLXZpZXdwb3J0PSgpLCBmdWxsc2NyZWVuPSgpLCBnYW1lcGFkPSgpLCBnZW9sb2NhdGlvbj0oKSwgZ3lyb3Njb3BlPSgpLCBoaWQ9KCksIGlkZW50aXR5LWNyZWRlbnRpYWxzLWdldD0oKSwgaWRsZS1kZXRlY3Rpb249KCksIGxvY2FsLWZvbnRzPSgpLCBtYWduZXRvbWV0ZXI9KCksIG1pY3JvcGhvbmU9KCksIG1pZGk9KCksIG90cC1jcmVkZW50aWFscz0oKSwgcGF5bWVudD0oKSwgcGljdHVyZS1pbi1waWN0dXJlPSgpLCBwdWJsaWNrZXktY3JlZGVudGlhbHMtY3JlYXRlPSgpLCBwdWJsaWNrZXktY3JlZGVudGlhbHMtZ2V0PSgpLCBzY3JlZW4td2FrZS1sb2NrPSgpLCBzZXJpYWw9KCksIHNwZWFrZXItc2VsZWN0aW9uPSgpLCBzdG9yYWdlLWFjY2Vzcz0oKSwgdXNiPSgpLCB3ZWItc2hhcmU9KCksIHdpbmRvdy1tYW5hZ2VtZW50PSgpLCB4ci1zcGF0aWFsLXRyYWNraW5nPSgpIiwgInBvcG92ZXJzIjogW3siaWNvbk5hbWUiOiAiZGlzayIsICJ0ZXh0IjogImlucF9wb3BvdmVyX211bHRpc2l0ZSJ9LCB7Imljb25OYW1lIjogImluZm8iLCAidGV4dCI6ICJWYWx1ZSBmb3IgdGhlIFBlcm1pc3Npb25zLVBvbGljeSBoZWFkZXIuIn1dfSwgIkZFQVRVUkVfUE9MSUNZIjogeyJjb250ZXh0IjogIm11bHRpc2l0ZSIsICJkZWZhdWx0IjogImFjY2VsZXJvbWV0ZXIgJ25vbmUnOyBhbWJpZW50LWxpZ2h0LXNlbnNvciAnbm9uZSc7IGF1dG9wbGF5ICdub25lJzsgYmF0dGVyeSAnbm9uZSc7IGNhbWVyYSAnbm9uZSc7IGRpc3BsYXktY2FwdHVyZSAnbm9uZSc7IGRvY3VtZW50LWRvbWFpbiAnbm9uZSc7IGVuY3J5cHRlZC1tZWRpYSAnbm9uZSc7IGV4ZWN1dGlvbi13aGlsZS1ub3QtcmVuZGVyZWQgJ25vbmUnOyBleGVjdXRpb24td2hpbGUtb3V0LW9mLXZpZXdwb3J0ICdub25lJzsgZnVsbHNjcmVlbiAnbm9uZSc7IGdlb2xvY2F0aW9uICdub25lJzsgZ3lyb3Njb3BlICdub25lJzsgbGF5b3V0LWFuaW1hdGlvbiAnbm9uZSc7IGxlZ2FjeS1pbWFnZS1mb3JtYXRzICdub25lJzsgbWFnbmV0b21ldGVyICdub25lJzsgbWljcm9waG9uZSAnbm9uZSc7IG1pZGkgJ25vbmUnOyBuYXZpZ2F0aW9uLW92ZXJyaWRlICdub25lJzsgcGF5bWVudCAnbm9uZSc7IHBpY3R1cmUtaW4tcGljdHVyZSAnbm9uZSc7IHB1YmxpY2tleS1jcmVkZW50aWFscy1nZXQgJ25vbmUnOyBzcGVha2VyLXNlbGVjdGlvbiAnbm9uZSc7IHN5bmMteGhyICdub25lJzsgdW5vcHRpbWl6ZWQtaW1hZ2VzICdub25lJzsgdW5zaXplZC1tZWRpYSAnbm9uZSc7IHVzYiAnbm9uZSc7IHNjcmVlbi13YWtlLWxvY2sgJ25vbmUnOyB3ZWItc2hhcmUgJ25vbmUnOyB4ci1zcGF0aWFsLXRyYWNraW5nICdub25lJzsiLCAiaGVscCI6ICJWYWx1ZSBmb3IgdGhlIEZlYXR1cmUtUG9saWN5IGhlYWRlci4iLCAiaWQiOiAiZmVhdHVyZS1wb2xpY3kiLCAibGFiZWwiOiAiRmVhdHVyZS1Qb2xpY3kiLCAicmVnZXgiOiAiXig/IVs7IF0pKCA/KFtcXHdcXC1dKykoPyEuKlteXFwtXVxcMiApKCAoJyhub25lfHNlbGZ8c3RyaWN0LWR5bmFtaWN8cmVwb3J0LXNhbXBsZXx1bnNhZmUtaW5saW5lfHVuc2FmZS1ldmFsfHVuc2FmZS1oYXNoZXN8dW5zYWZlLWFsbG93LXJlZGlyZWN0cyknfGh0dHBzPzpcXC9cXC9bXFx3QDolLit+Iz1cXC1dK1tcXHdcXChcXCkhQDolKy5+Iz8mXFwvPSRcXC1dKikpKzspKiQiLCAidHlwZSI6ICJ0ZXh0IiwgImNvbnRhaW5lckNsYXNzIjogInotMyIsICJwYXR0ZXJuIjogIl4oPyFbOyBdKSggPyhbXFx3XFwtXSspKD8hLipbXlxcLV1cXDIgKSggKCcobm9uZXxzZWxmfHN0cmljdC1keW5hbWljfHJlcG9ydC1zYW1wbGV8dW5zYWZlLWlubGluZXx1bnNhZmUtZXZhbHx1bnNhZmUtaGFzaGVzfHVuc2FmZS1hbGxvdy1yZWRpcmVjdHMpJ3xodHRwcz86XFwvXFwvW1xcd0A6JS4rfiM9XFwtXStbXFx3XFwoXFwpIUA6JSsufiM/JlxcLz0kXFwtXSopKSs7KSokIiwgImlucFR5cGUiOiAiaW5wdXQiLCAibmFtZSI6ICJGZWF0dXJlLVBvbGljeSIsICJjb2x1bW5zIjogeyJwYyI6IDQsICJ0YWJsZXQiOiA2LCAibW9iaWxlIjogMTJ9LCAiZGlzYWJsZWQiOiBmYWxzZSwgInZhbHVlIjogImFjY2VsZXJvbWV0ZXIgJ25vbmUnOyBhbWJpZW50LWxpZ2h0LXNlbnNvciAnbm9uZSc7IGF1dG9wbGF5ICdub25lJzsgYmF0dGVyeSAnbm9uZSc7IGNhbWVyYSAnbm9uZSc7IGRpc3BsYXktY2FwdHVyZSAnbm9uZSc7IGRvY3VtZW50LWRvbWFpbiAnbm9uZSc7IGVuY3J5cHRlZC1tZWRpYSAnbm9uZSc7IGV4ZWN1dGlvbi13aGlsZS1ub3QtcmVuZGVyZWQgJ25vbmUnOyBleGVjdXRpb24td2hpbGUtb3V0LW9mLXZpZXdwb3J0ICdub25lJzsgZnVsbHNjcmVlbiAnbm9uZSc7IGdlb2xvY2F0aW9uICdub25lJzsgZ3lyb3Njb3BlICdub25lJzsgbGF5b3V0LWFuaW1hdGlvbiAnbm9uZSc7IGxlZ2FjeS1pbWFnZS1mb3JtYXRzICdub25lJzsgbWFnbmV0b21ldGVyICdub25lJzsgbWljcm9waG9uZSAnbm9uZSc7IG1pZGkgJ25vbmUnOyBuYXZpZ2F0aW9uLW92ZXJyaWRlICdub25lJzsgcGF5bWVudCAnbm9uZSc7IHBpY3R1cmUtaW4tcGljdHVyZSAnbm9uZSc7IHB1YmxpY2tleS1jcmVkZW50aWFscy1nZXQgJ25vbmUnOyBzcGVha2VyLXNlbGVjdGlvbiAnbm9uZSc7IHN5bmMteGhyICdub25lJzsgdW5vcHRpbWl6ZWQtaW1hZ2VzICdub25lJzsgdW5zaXplZC1tZWRpYSAnbm9uZSc7IHVzYiAnbm9uZSc7IHNjcmVlbi13YWtlLWxvY2sgJ25vbmUnOyB3ZWItc2hhcmUgJ25vbmUnOyB4ci1zcGF0aWFsLXRyYWNraW5nICdub25lJzsiLCAicHJldl92YWx1ZSI6ICJhY2NlbGVyb21ldGVyICdub25lJzsgYW1iaWVudC1saWdodC1zZW5zb3IgJ25vbmUnOyBhdXRvcGxheSAnbm9uZSc7IGJhdHRlcnkgJ25vbmUnOyBjYW1lcmEgJ25vbmUnOyBkaXNwbGF5LWNhcHR1cmUgJ25vbmUnOyBkb2N1bWVudC1kb21haW4gJ25vbmUnOyBlbmNyeXB0ZWQtbWVkaWEgJ25vbmUnOyBleGVjdXRpb24td2hpbGUtbm90LXJlbmRlcmVkICdub25lJzsgZXhlY3V0aW9uLXdoaWxlLW91dC1vZi12aWV3cG9ydCAnbm9uZSc7IGZ1bGxzY3JlZW4gJ25vbmUnOyBnZW9sb2NhdGlvbiAnbm9uZSc7IGd5cm9zY29wZSAnbm9uZSc7IGxheW91dC1hbmltYXRpb24gJ25vbmUnOyBsZWdhY3ktaW1hZ2UtZm9ybWF0cyAnbm9uZSc7IG1hZ25ldG9tZXRlciAnbm9uZSc7IG1pY3JvcGhvbmUgJ25vbmUnOyBtaWRpICdub25lJzsgbmF2aWdhdGlvbi1vdmVycmlkZSAnbm9uZSc7IHBheW1lbnQgJ25vbmUnOyBwaWN0dXJlLWluLXBpY3R1cmUgJ25vbmUnOyBwdWJsaWNrZXktY3JlZGVudGlhbHMtZ2V0ICdub25lJzsgc3BlYWtlci1zZWxlY3Rpb24gJ25vbmUnOyBzeW5jLXhociAnbm9uZSc7IHVub3B0aW1pemVkLWltYWdlcyAnbm9uZSc7IHVuc2l6ZWQtbWVkaWEgJ25vbmUnOyB1c2IgJ25vbmUnOyBzY3JlZW4td2FrZS1sb2NrICdub25lJzsgd2ViLXNoYXJlICdub25lJzsgeHItc3BhdGlhbC10cmFja2luZyAnbm9uZSc7IiwgInBvcG92ZXJzIjogW3siaWNvbk5hbWUiOiAiZGlzayIsICJ0ZXh0IjogImlucF9wb3BvdmVyX211bHRpc2l0ZSJ9LCB7Imljb25OYW1lIjogImluZm8iLCAidGV4dCI6ICJWYWx1ZSBmb3IgdGhlIEZlYXR1cmUtUG9saWN5IGhlYWRlci4ifV19LCAiWF9GUkFNRV9PUFRJT05TIjogeyJjb250ZXh0IjogIm11bHRpc2l0ZSIsICJkZWZhdWx0IjogIlNBTUVPUklHSU4iLCAiaGVscCI6ICJWYWx1ZSBmb3IgdGhlIFgtRnJhbWUtT3B0aW9ucyBoZWFkZXIuIiwgImlkIjogIngtZnJhbWUtb3B0aW9ucyIsICJsYWJlbCI6ICJYLUZyYW1lLU9wdGlvbnMiLCAicmVnZXgiOiAiXihERU5ZfFNBTUVPUklHSU4pPyQiLCAidHlwZSI6ICJzZWxlY3QiLCAiY29udGFpbmVyQ2xhc3MiOiAiei0yIiwgInBhdHRlcm4iOiAiXihERU5ZfFNBTUVPUklHSU4pPyQiLCAiaW5wVHlwZSI6ICJzZWxlY3QiLCAibmFtZSI6ICJYLUZyYW1lLU9wdGlvbnMiLCAidmFsdWVzIjogWyIiLCAiREVOWSIsICJTQU1FT1JJR0lOIl0sICJjb2x1bW5zIjogeyJwYyI6IDQsICJ0YWJsZXQiOiA2LCAibW9iaWxlIjogMTJ9LCAiZGlzYWJsZWQiOiBmYWxzZSwgInZhbHVlIjogIlNBTUVPUklHSU4iLCAibWV0aG9kIjogImRlZmF1bHQiLCAicHJldl92YWx1ZSI6ICJTQU1FT1JJR0lOIiwgInBvcG92ZXJzIjogW3siaWNvbk5hbWUiOiAiZGlzayIsICJ0ZXh0IjogImlucF9wb3BvdmVyX211bHRpc2l0ZSJ9LCB7Imljb25OYW1lIjogImluZm8iLCAidGV4dCI6ICJWYWx1ZSBmb3IgdGhlIFgtRnJhbWUtT3B0aW9ucyBoZWFkZXIuIn1dfSwgIlhfQ09OVEVOVF9UWVBFX09QVElPTlMiOiB7ImNvbnRleHQiOiAibXVsdGlzaXRlIiwgImRlZmF1bHQiOiAibm9zbmlmZiIsICJoZWxwIjogIlZhbHVlIGZvciB0aGUgWC1Db250ZW50LVR5cGUtT3B0aW9ucyBoZWFkZXIuIiwgImlkIjogIngtY29udGVudC10eXBlLW9wdGlvbnMiLCAibGFiZWwiOiAiWC1Db250ZW50LVR5cGUtT3B0aW9ucyIsICJyZWdleCI6ICJeKG5vc25pZmYpPyQiLCAidHlwZSI6ICJzZWxlY3QiLCAiY29udGFpbmVyQ2xhc3MiOiAiei0xIiwgInBhdHRlcm4iOiAiXihub3NuaWZmKT8kIiwgImlucFR5cGUiOiAic2VsZWN0IiwgIm5hbWUiOiAiWC1Db250ZW50LVR5cGUtT3B0aW9ucyIsICJ2YWx1ZXMiOiBbIiIsICJub3NuaWZmIl0sICJjb2x1bW5zIjogeyJwYyI6IDQsICJ0YWJsZXQiOiA2LCAibW9iaWxlIjogMTJ9LCAiZGlzYWJsZWQiOiBmYWxzZSwgInZhbHVlIjogIm5vc25pZmYiLCAibWV0aG9kIjogImRlZmF1bHQiLCAicHJldl92YWx1ZSI6ICJub3NuaWZmIiwgInBvcG92ZXJzIjogW3siaWNvbk5hbWUiOiAiZGlzayIsICJ0ZXh0IjogImlucF9wb3BvdmVyX211bHRpc2l0ZSJ9LCB7Imljb25OYW1lIjogImluZm8iLCAidGV4dCI6ICJWYWx1ZSBmb3IgdGhlIFgtQ29udGVudC1UeXBlLU9wdGlvbnMgaGVhZGVyLiJ9XX0sICJYX1hTU19QUk9URUNUSU9OIjogeyJjb250ZXh0IjogIm11bHRpc2l0ZSIsICJkZWZhdWx0IjogIjE7IG1vZGU9YmxvY2siLCAiaGVscCI6ICJWYWx1ZSBmb3IgdGhlIFgtWFNTLVByb3RlY3Rpb24gaGVhZGVyLiIsICJpZCI6ICJ4LXhzcy1wcm90ZWN0aW9uIiwgImxhYmVsIjogIlgtWFNTLVByb3RlY3Rpb24iLCAicmVnZXgiOiAiXjB8MSg7IChtb2RlPWJsb2NrfHJlcG9ydD1odHRwcz86XFwvXFwvW1xcLVxcd0A6JS4rfiM9XStbXFwtXFx3XFwoXFwpIUA6JSsufiM/JlxcLz0kXSopKT8kIiwgInR5cGUiOiAidGV4dCIsICJjb250YWluZXJDbGFzcyI6ICJ6LTAiLCAicGF0dGVybiI6ICJeMHwxKDsgKG1vZGU9YmxvY2t8cmVwb3J0PWh0dHBzPzpcXC9cXC9bXFwtXFx3QDolLit+Iz1dK1tcXC1cXHdcXChcXCkhQDolKy5+Iz8mXFwvPSRdKikpPyQiLCAiaW5wVHlwZSI6ICJpbnB1dCIsICJuYW1lIjogIlgtWFNTLVByb3RlY3Rpb24iLCAiY29sdW1ucyI6IHsicGMiOiA0LCAidGFibGV0IjogNiwgIm1vYmlsZSI6IDEyfSwgImRpc2FibGVkIjogZmFsc2UsICJ2YWx1ZSI6ICIxOyBtb2RlPWJsb2NrIiwgIm1ldGhvZCI6ICJkZWZhdWx0IiwgInByZXZfdmFsdWUiOiAiMTsgbW9kZT1ibG9jayIsICJwb3BvdmVycyI6IFt7Imljb25OYW1lIjogImRpc2siLCAidGV4dCI6ICJpbnBfcG9wb3Zlcl9tdWx0aXNpdGUifSwgeyJpY29uTmFtZSI6ICJpbmZvIiwgInRleHQiOiAiVmFsdWUgZm9yIHRoZSBYLVhTUy1Qcm90ZWN0aW9uIGhlYWRlci4ifV19fSwgImNoZWNrc3VtIjogbnVsbCwgIm11bHRpcGxlc19zY2hlbWEiOiB7ImN1c3RvbS1oZWFkZXJzIjogeyJDVVNUT01fSEVBREVSIjogeyJjb250ZXh0IjogIm11bHRpc2l0ZSIsICJkZWZhdWx0IjogIiIsICJoZWxwIjogIkN1c3RvbSBoZWFkZXIgdG8gYWRkIChIZWFkZXJOYW1lOiBIZWFkZXJWYWx1ZSkuIiwgImlkIjogImN1c3RvbS1oZWFkZXIiLCAibGFiZWwiOiAiQ3VzdG9tIGhlYWRlciAoSGVhZGVyTmFtZTogSGVhZGVyVmFsdWUpIiwgInJlZ2V4IjogIl4oW1xcd1xcLV0rOiAuKyk/JCIsICJ0eXBlIjogInRleHQiLCAibXVsdGlwbGUiOiAiY3VzdG9tLWhlYWRlcnMiLCAicGF0dGVybiI6ICJeKFtcXHdcXC1dKzogLispPyQiLCAiaW5wVHlwZSI6ICJpbnB1dCIsICJuYW1lIjogIkN1c3RvbSBoZWFkZXIgKEhlYWRlck5hbWU6IEhlYWRlclZhbHVlKSIsICJjb2x1bW5zIjogeyJwYyI6IDQsICJ0YWJsZXQiOiA2LCAibW9iaWxlIjogMTJ9LCAiZGlzYWJsZWQiOiBmYWxzZSwgInZhbHVlIjogIiIsICJwcmV2X3ZhbHVlIjogIiIsICJwb3BvdmVycyI6IFt7Imljb25OYW1lIjogImRpc2siLCAidGV4dCI6ICJpbnBfcG9wb3Zlcl9tdWx0aXNpdGUifSwgeyJpY29uTmFtZSI6ICJpbmZvIiwgInRleHQiOiAiQ3VzdG9tIGhlYWRlciB0byBhZGQgKEhlYWRlck5hbWU6IEhlYWRlclZhbHVlKS4ifV0sICJjb250YWluZXJDbGFzcyI6ICJ6LTEzIn19LCAiY29va2llLWZsYWdzIjogeyJDT09LSUVfRkxBR1MiOiB7ImNvbnRleHQiOiAibXVsdGlzaXRlIiwgImRlZmF1bHQiOiAiKiBIdHRwT25seSBTYW1lU2l0ZT1MYXgiLCAiaGVscCI6ICJDb29raWUgZmxhZ3MgYXV0b21hdGljYWxseSBhZGRlZCB0byBhbGwgY29va2llcyAodmFsdWUgYWNjZXB0ZWQgZm9yIG5naW54X2Nvb2tpZV9mbGFnX21vZHVsZSkuIiwgImlkIjogImNvb2tpZS1mbGFncyIsICJsYWJlbCI6ICJDb29raWUgZmxhZ3MiLCAicmVnZXgiOiAiXihcXCp8W147XSspKCAoSHR0cE9ubHl8KFNhbWVTaXRlKSg/IS4qXFw0KSg9KExheHxTdHJpY3QpKT8pKD8hLipcXDMpKSokIiwgInR5cGUiOiAidGV4dCIsICJtdWx0aXBsZSI6ICJjb29raWUtZmxhZ3MiLCAicGF0dGVybiI6ICJeKFxcKnxbXjtdKykoIChIdHRwT25seXwoU2FtZVNpdGUpKD8hLipcXDQpKD0oTGF4fFN0cmljdCkpPykoPyEuKlxcMykpKiQiLCAiaW5wVHlwZSI6ICJpbnB1dCIsICJuYW1lIjogIkNvb2tpZSBmbGFncyIsICJjb2x1bW5zIjogeyJwYyI6IDQsICJ0YWJsZXQiOiA2LCAibW9iaWxlIjogMTJ9LCAiZGlzYWJsZWQiOiBmYWxzZSwgInZhbHVlIjogIiogSHR0cE9ubHkgU2FtZVNpdGU9TGF4IiwgInByZXZfdmFsdWUiOiAiKiBIdHRwT25seSBTYW1lU2l0ZT1MYXgiLCAicG9wb3ZlcnMiOiBbeyJpY29uTmFtZSI6ICJkaXNrIiwgInRleHQiOiAiaW5wX3BvcG92ZXJfbXVsdGlzaXRlIn0sIHsiaWNvbk5hbWUiOiAiaW5mbyIsICJ0ZXh0IjogIkNvb2tpZSBmbGFncyBhdXRvbWF0aWNhbGx5IGFkZGVkIHRvIGFsbCBjb29raWVzICh2YWx1ZSBhY2NlcHRlZCBmb3IgbmdpbnhfY29va2llX2ZsYWdfbW9kdWxlKS4ifV0sICJjb250YWluZXJDbGFzcyI6ICJ6LTEyIn19fSwgIm11bHRpcGxlcyI6IHsiY3VzdG9tLWhlYWRlcnMiOiB7IjAiOiB7IkNVU1RPTV9IRUFERVIiOiB7ImNvbnRleHQiOiAibXVsdGlzaXRlIiwgImRlZmF1bHQiOiAiIiwgImhlbHAiOiAiQ3VzdG9tIGhlYWRlciB0byBhZGQgKEhlYWRlck5hbWU6IEhlYWRlclZhbHVlKS4iLCAiaWQiOiAiY3VzdG9tLWhlYWRlciIsICJsYWJlbCI6ICJDdXN0b20gaGVhZGVyIChIZWFkZXJOYW1lOiBIZWFkZXJWYWx1ZSkiLCAicmVnZXgiOiAiXihbXFx3XFwtXSs6IC4rKT8kIiwgInR5cGUiOiAidGV4dCIsICJtdWx0aXBsZSI6ICJjdXN0b20taGVhZGVycyIsICJwYXR0ZXJuIjogIl4oW1xcd1xcLV0rOiAuKyk/JCIsICJpbnBUeXBlIjogImlucHV0IiwgIm5hbWUiOiAiQ3VzdG9tIGhlYWRlciAoSGVhZGVyTmFtZTogSGVhZGVyVmFsdWUpIiwgImNvbHVtbnMiOiB7InBjIjogNCwgInRhYmxldCI6IDYsICJtb2JpbGUiOiAxMn0sICJkaXNhYmxlZCI6IGZhbHNlLCAidmFsdWUiOiAiIiwgInByZXZfdmFsdWUiOiAiIiwgInBvcG92ZXJzIjogW3siaWNvbk5hbWUiOiAiZGlzayIsICJ0ZXh0IjogImlucF9wb3BvdmVyX211bHRpc2l0ZSJ9LCB7Imljb25OYW1lIjogImluZm8iLCAidGV4dCI6ICJDdXN0b20gaGVhZGVyIHRvIGFkZCAoSGVhZGVyTmFtZTogSGVhZGVyVmFsdWUpLiJ9XSwgImNvbnRhaW5lckNsYXNzIjogInotMTMiLCAibWV0aG9kIjogImRlZmF1bHQifX19LCAiY29va2llLWZsYWdzIjogeyIwIjogeyJDT09LSUVfRkxBR1MiOiB7ImNvbnRleHQiOiAibXVsdGlzaXRlIiwgImRlZmF1bHQiOiAiKiBIdHRwT25seSBTYW1lU2l0ZT1MYXgiLCAiaGVscCI6ICJDb29raWUgZmxhZ3MgYXV0b21hdGljYWxseSBhZGRlZCB0byBhbGwgY29va2llcyAodmFsdWUgYWNjZXB0ZWQgZm9yIG5naW54X2Nvb2tpZV9mbGFnX21vZHVsZSkuIiwgImlkIjogImNvb2tpZS1mbGFncyIsICJsYWJlbCI6ICJDb29raWUgZmxhZ3MiLCAicmVnZXgiOiAiXihcXCp8W147XSspKCAoSHR0cE9ubHl8KFNhbWVTaXRlKSg/IS4qXFw0KSg9KExheHxTdHJpY3QpKT8pKD8hLipcXDMpKSokIiwgInR5cGUiOiAidGV4dCIsICJtdWx0aXBsZSI6ICJjb29raWUtZmxhZ3MiLCAicGF0dGVybiI6ICJeKFxcKnxbXjtdKykoIChIdHRwT25seXwoU2FtZVNpdGUpKD8hLipcXDQpKD0oTGF4fFN0cmljdCkpPykoPyEuKlxcMykpKiQiLCAiaW5wVHlwZSI6ICJpbnB1dCIsICJuYW1lIjogIkNvb2tpZSBmbGFncyIsICJjb2x1bW5zIjogeyJwYyI6IDQsICJ0YWJsZXQiOiA2LCAibW9iaWxlIjogMTJ9LCAiZGlzYWJsZWQiOiBmYWxzZSwgInZhbHVlIjogIiogSHR0cE9ubHkgU2FtZVNpdGU9TGF4IiwgInByZXZfdmFsdWUiOiAiKiBIdHRwT25seSBTYW1lU2l0ZT1MYXgiLCAicG9wb3ZlcnMiOiBbeyJpY29uTmFtZSI6ICJkaXNrIiwgInRleHQiOiAiaW5wX3BvcG92ZXJfbXVsdGlzaXRlIn0sIHsiaWNvbk5hbWUiOiAiaW5mbyIsICJ0ZXh0IjogIkNvb2tpZSBmbGFncyBhdXRvbWF0aWNhbGx5IGFkZGVkIHRvIGFsbCBjb29raWVzICh2YWx1ZSBhY2NlcHRlZCBmb3IgbmdpbnhfY29va2llX2ZsYWdfbW9kdWxlKS4ifV0sICJjb250YWluZXJDbGFzcyI6ICJ6LTEyIiwgIm1ldGhvZCI6ICJkZWZhdWx0In19fX19LCB7ImlkIjogImxldHNlbmNyeXB0IiwgInN0cmVhbSI6ICJ5ZXMiLCAibmFtZSI6ICJMZXQncyBFbmNyeXB0IiwgImRlc2NyaXB0aW9uIjogIkF1dG9tYXRpYyBjcmVhdGlvbiwgcmVuZXdhbCBhbmQgY29uZmlndXJhdGlvbiBvZiBMZXQncyBFbmNyeXB0IGNlcnRpZmljYXRlcy4iLCAidmVyc2lvbiI6ICIxLjAiLCAidHlwZSI6ICJjb3JlIiwgIm1ldGhvZCI6ICJtYW51YWwiLCAicGFnZSI6IGZhbHNlLCAic2V0dGluZ3MiOiB7IkFVVE9fTEVUU19FTkNSWVBUIjogeyJjb250ZXh0IjogIm11bHRpc2l0ZSIsICJkZWZhdWx0IjogIm5vIiwgImhlbHAiOiAiQWN0aXZhdGUgYXV0b21hdGljIExldCdzIEVuY3J5cHQgbW9kZS4iLCAiaWQiOiAiYXV0by1sZXRzLWVuY3J5cHQiLCAibGFiZWwiOiAiQXV0b21hdGljIExldCdzIEVuY3J5cHQiLCAicmVnZXgiOiAiXih5ZXN8bm8pJCIsICJ0eXBlIjogImNoZWNrIiwgImNvbnRhaW5lckNsYXNzIjogInotMiIsICJwYXR0ZXJuIjogIl4oeWVzfG5vKSQiLCAiaW5wVHlwZSI6ICJjaGVja2JveCIsICJuYW1lIjogIkF1dG9tYXRpYyBMZXQncyBFbmNyeXB0IiwgImNvbHVtbnMiOiB7InBjIjogNCwgInRhYmxldCI6IDYsICJtb2JpbGUiOiAxMn0sICJkaXNhYmxlZCI6IGZhbHNlLCAidmFsdWUiOiAibm8iLCAibWV0aG9kIjogImRlZmF1bHQiLCAicHJldl92YWx1ZSI6ICJubyIsICJwb3BvdmVycyI6IFt7Imljb25OYW1lIjogImRpc2siLCAidGV4dCI6ICJpbnBfcG9wb3Zlcl9tdWx0aXNpdGUifSwgeyJpY29uTmFtZSI6ICJpbmZvIiwgInRleHQiOiAiQWN0aXZhdGUgYXV0b21hdGljIExldCdzIEVuY3J5cHQgbW9kZS4ifV19LCAiRU1BSUxfTEVUU19FTkNSWVBUIjogeyJjb250ZXh0IjogIm11bHRpc2l0ZSIsICJkZWZhdWx0IjogIiIsICJoZWxwIjogIkVtYWlsIHVzZWQgZm9yIExldCdzIEVuY3J5cHQgbm90aWZpY2F0aW9uIGFuZCBpbiBjZXJ0aWZpY2F0ZS4iLCAiaWQiOiAiZW1haWwtbGV0cy1lbmNyeXB0IiwgImxhYmVsIjogIkVtYWlsIExldCdzIEVuY3J5cHQiLCAicmVnZXgiOiAiXihbXkAgXFx0XFxyXFxuXStAW15AIFxcdFxcclxcbl0rXFwuW15AIFxcdFxcclxcbl0rKT8kIiwgInR5cGUiOiAidGV4dCIsICJjb250YWluZXJDbGFzcyI6ICJ6LTEiLCAicGF0dGVybiI6ICJeKFteQCBcXHRcXHJcXG5dK0BbXkAgXFx0XFxyXFxuXStcXC5bXkAgXFx0XFxyXFxuXSspPyQiLCAiaW5wVHlwZSI6ICJpbnB1dCIsICJuYW1lIjogIkVtYWlsIExldCdzIEVuY3J5cHQiLCAiY29sdW1ucyI6IHsicGMiOiA0LCAidGFibGV0IjogNiwgIm1vYmlsZSI6IDEyfSwgImRpc2FibGVkIjogZmFsc2UsICJ2YWx1ZSI6ICIiLCAibWV0aG9kIjogImRlZmF1bHQiLCAicHJldl92YWx1ZSI6ICIiLCAicG9wb3ZlcnMiOiBbeyJpY29uTmFtZSI6ICJkaXNrIiwgInRleHQiOiAiaW5wX3BvcG92ZXJfbXVsdGlzaXRlIn0sIHsiaWNvbk5hbWUiOiAiaW5mbyIsICJ0ZXh0IjogIkVtYWlsIHVzZWQgZm9yIExldCdzIEVuY3J5cHQgbm90aWZpY2F0aW9uIGFuZCBpbiBjZXJ0aWZpY2F0ZS4ifV19LCAiVVNFX0xFVFNfRU5DUllQVF9TVEFHSU5HIjogeyJjb250ZXh0IjogIm11bHRpc2l0ZSIsICJkZWZhdWx0IjogIm5vIiwgImhlbHAiOiAiVXNlIHRoZSBzdGFnaW5nIGVudmlyb25tZW50IGZvciBMZXRcdTIwMTlzIEVuY3J5cHQgY2VydGlmaWNhdGUgZ2VuZXJhdGlvbi4gVXNlZnVsIHdoZW4geW91IGFyZSB0ZXN0aW5nIHlvdXIgZGVwbG95bWVudHMgdG8gYXZvaWQgYmVpbmcgcmF0ZSBsaW1pdGVkIGluIHRoZSBwcm9kdWN0aW9uIGVudmlyb25tZW50LiIsICJpZCI6ICJ1c2UtbGV0cy1lbmNyeXB0LXN0YWdpbmciLCAibGFiZWwiOiAiVXNlIExldCdzIEVuY3J5cHQgU3RhZ2luZyIsICJyZWdleCI6ICJeKHllc3xubykkIiwgInR5cGUiOiAiY2hlY2siLCAiY29udGFpbmVyQ2xhc3MiOiAiei0wIiwgInBhdHRlcm4iOiAiXih5ZXN8bm8pJCIsICJpbnBUeXBlIjogImNoZWNrYm94IiwgIm5hbWUiOiAiVXNlIExldCdzIEVuY3J5cHQgU3RhZ2luZyIsICJjb2x1bW5zIjogeyJwYyI6IDQsICJ0YWJsZXQiOiA2LCAibW9iaWxlIjogMTJ9LCAiZGlzYWJsZWQiOiBmYWxzZSwgInZhbHVlIjogIm5vIiwgIm1ldGhvZCI6ICJkZWZhdWx0IiwgInByZXZfdmFsdWUiOiAibm8iLCAicG9wb3ZlcnMiOiBbeyJpY29uTmFtZSI6ICJkaXNrIiwgInRleHQiOiAiaW5wX3BvcG92ZXJfbXVsdGlzaXRlIn0sIHsiaWNvbk5hbWUiOiAiaW5mbyIsICJ0ZXh0IjogIlVzZSB0aGUgc3RhZ2luZyBlbnZpcm9ubWVudCBmb3IgTGV0XHUyMDE5cyBFbmNyeXB0IGNlcnRpZmljYXRlIGdlbmVyYXRpb24uIFVzZWZ1bCB3aGVuIHlvdSBhcmUgdGVzdGluZyB5b3VyIGRlcGxveW1lbnRzIHRvIGF2b2lkIGJlaW5nIHJhdGUgbGltaXRlZCBpbiB0aGUgcHJvZHVjdGlvbiBlbnZpcm9ubWVudC4ifV19fSwgImNoZWNrc3VtIjogbnVsbH0sIHsiaWQiOiAibGltaXQiLCAic3RyZWFtIjogInBhcnRpYWwiLCAibmFtZSI6ICJMaW1pdCIsICJkZXNjcmlwdGlvbiI6ICJMaW1pdCBtYXhpbXVtIG51bWJlciBvZiByZXF1ZXN0cyBhbmQgY29ubmVjdGlvbnMuIiwgInZlcnNpb24iOiAiMS4wIiwgInR5cGUiOiAiY29yZSIsICJtZXRob2QiOiAibWFudWFsIiwgInBhZ2UiOiB0cnVlLCAic2V0dGluZ3MiOiB7IlVTRV9MSU1JVF9SRVEiOiB7ImNvbnRleHQiOiAibXVsdGlzaXRlIiwgImRlZmF1bHQiOiAieWVzIiwgImhlbHAiOiAiQWN0aXZhdGUgbGltaXQgcmVxdWVzdHMgZmVhdHVyZS4iLCAiaWQiOiAidXNlLWxpbWl0LXJlcSIsICJsYWJlbCI6ICJBY3RpdmF0ZSBsaW1pdCByZXF1ZXN0cyIsICJyZWdleCI6ICJeKHllc3xubykkIiwgInR5cGUiOiAiY2hlY2siLCAiY29udGFpbmVyQ2xhc3MiOiAiei02IiwgInBhdHRlcm4iOiAiXih5ZXN8bm8pJCIsICJpbnBUeXBlIjogImNoZWNrYm94IiwgIm5hbWUiOiAiQWN0aXZhdGUgbGltaXQgcmVxdWVzdHMiLCAiY29sdW1ucyI6IHsicGMiOiA0LCAidGFibGV0IjogNiwgIm1vYmlsZSI6IDEyfSwgImRpc2FibGVkIjogZmFsc2UsICJ2YWx1ZSI6ICJ5ZXMiLCAibWV0aG9kIjogImRlZmF1bHQiLCAicHJldl92YWx1ZSI6ICJ5ZXMiLCAicG9wb3ZlcnMiOiBbeyJpY29uTmFtZSI6ICJkaXNrIiwgInRleHQiOiAiaW5wX3BvcG92ZXJfbXVsdGlzaXRlIn0sIHsiaWNvbk5hbWUiOiAiaW5mbyIsICJ0ZXh0IjogIkFjdGl2YXRlIGxpbWl0IHJlcXVlc3RzIGZlYXR1cmUuIn1dfSwgIlVTRV9MSU1JVF9DT05OIjogeyJjb250ZXh0IjogIm11bHRpc2l0ZSIsICJkZWZhdWx0IjogInllcyIsICJoZWxwIjogIkFjdGl2YXRlIGxpbWl0IGNvbm5lY3Rpb25zIGZlYXR1cmUuIiwgImlkIjogInVzZS1saW1pdC1jb25uIiwgImxhYmVsIjogIkFjdGl2YXRlIGxpbWl0IGNvbm5lY3Rpb25zIiwgInJlZ2V4IjogIl4oeWVzfG5vKSQiLCAidHlwZSI6ICJjaGVjayIsICJjb250YWluZXJDbGFzcyI6ICJ6LTMiLCAicGF0dGVybiI6ICJeKHllc3xubykkIiwgImlucFR5cGUiOiAiY2hlY2tib3giLCAibmFtZSI6ICJBY3RpdmF0ZSBsaW1pdCBjb25uZWN0aW9ucyIsICJjb2x1bW5zIjogeyJwYyI6IDQsICJ0YWJsZXQiOiA2LCAibW9iaWxlIjogMTJ9LCAiZGlzYWJsZWQiOiBmYWxzZSwgInZhbHVlIjogInllcyIsICJtZXRob2QiOiAiZGVmYXVsdCIsICJwcmV2X3ZhbHVlIjogInllcyIsICJwb3BvdmVycyI6IFt7Imljb25OYW1lIjogImRpc2siLCAidGV4dCI6ICJpbnBfcG9wb3Zlcl9tdWx0aXNpdGUifSwgeyJpY29uTmFtZSI6ICJpbmZvIiwgInRleHQiOiAiQWN0aXZhdGUgbGltaXQgY29ubmVjdGlvbnMgZmVhdHVyZS4ifV19LCAiTElNSVRfQ09OTl9NQVhfSFRUUDEiOiB7ImNvbnRleHQiOiAibXVsdGlzaXRlIiwgImRlZmF1bHQiOiAiMTAiLCAiaGVscCI6ICJNYXhpbXVtIG51bWJlciBvZiBjb25uZWN0aW9ucyBwZXIgSVAgd2hlbiB1c2luZyBIVFRQLzEuWCBwcm90b2NvbC4iLCAiaWQiOiAibGltaXQtY29ubi1tYXgtaHR0cDEiLCAibGFiZWwiOiAiTWF4aW11bSBudW1iZXIgb2YgSFRUUC8xLlggY29ubmVjdGlvbnMiLCAicmVnZXgiOiAiXlxcZCskIiwgInR5cGUiOiAidGV4dCIsICJjb250YWluZXJDbGFzcyI6ICJ6LTIiLCAicGF0dGVybiI6ICJeXFxkKyQiLCAiaW5wVHlwZSI6ICJpbnB1dCIsICJuYW1lIjogIk1heGltdW0gbnVtYmVyIG9mIEhUVFAvMS5YIGNvbm5lY3Rpb25zIiwgImNvbHVtbnMiOiB7InBjIjogNCwgInRhYmxldCI6IDYsICJtb2JpbGUiOiAxMn0sICJkaXNhYmxlZCI6IGZhbHNlLCAidmFsdWUiOiAiMTAiLCAibWV0aG9kIjogImRlZmF1bHQiLCAicHJldl92YWx1ZSI6ICIxMCIsICJwb3BvdmVycyI6IFt7Imljb25OYW1lIjogImRpc2siLCAidGV4dCI6ICJpbnBfcG9wb3Zlcl9tdWx0aXNpdGUifSwgeyJpY29uTmFtZSI6ICJpbmZvIiwgInRleHQiOiAiTWF4aW11bSBudW1iZXIgb2YgY29ubmVjdGlvbnMgcGVyIElQIHdoZW4gdXNpbmcgSFRUUC8xLlggcHJvdG9jb2wuIn1dfSwgIkxJTUlUX0NPTk5fTUFYX0hUVFAyIjogeyJjb250ZXh0IjogIm11bHRpc2l0ZSIsICJkZWZhdWx0IjogIjEwMCIsICJoZWxwIjogIk1heGltdW0gbnVtYmVyIG9mIHN0cmVhbXMgcGVyIElQIHdoZW4gdXNpbmcgSFRUUC8yIHByb3RvY29sLiIsICJpZCI6ICJsaW1pdC1jb25uLW1heC1odHRwMiIsICJsYWJlbCI6ICJNYXhpbXVtIG51bWJlciBvZiBIVFRQLzIgc3RyZWFtcyIsICJyZWdleCI6ICJeXFxkKyQiLCAidHlwZSI6ICJ0ZXh0IiwgImNvbnRhaW5lckNsYXNzIjogInotMSIsICJwYXR0ZXJuIjogIl5cXGQrJCIsICJpbnBUeXBlIjogImlucHV0IiwgIm5hbWUiOiAiTWF4aW11bSBudW1iZXIgb2YgSFRUUC8yIHN0cmVhbXMiLCAiY29sdW1ucyI6IHsicGMiOiA0LCAidGFibGV0IjogNiwgIm1vYmlsZSI6IDEyfSwgImRpc2FibGVkIjogZmFsc2UsICJ2YWx1ZSI6ICIxMDAiLCAibWV0aG9kIjogImRlZmF1bHQiLCAicHJldl92YWx1ZSI6ICIxMDAiLCAicG9wb3ZlcnMiOiBbeyJpY29uTmFtZSI6ICJkaXNrIiwgInRleHQiOiAiaW5wX3BvcG92ZXJfbXVsdGlzaXRlIn0sIHsiaWNvbk5hbWUiOiAiaW5mbyIsICJ0ZXh0IjogIk1heGltdW0gbnVtYmVyIG9mIHN0cmVhbXMgcGVyIElQIHdoZW4gdXNpbmcgSFRUUC8yIHByb3RvY29sLiJ9XX0sICJMSU1JVF9DT05OX01BWF9TVFJFQU0iOiB7ImNvbnRleHQiOiAibXVsdGlzaXRlIiwgImRlZmF1bHQiOiAiMTAiLCAiaGVscCI6ICJNYXhpbXVtIG51bWJlciBvZiBjb25uZWN0aW9ucyBwZXIgSVAgd2hlbiB1c2luZyBzdHJlYW0uIiwgImlkIjogImxpbWl0LWNvbm4tbWF4LXN0cmVhbSIsICJsYWJlbCI6ICJNYXhpbXVtIG51bWJlciBvZiBzdHJlYW0gY29ubmVjdGlvbnMiLCAicmVnZXgiOiAiXlxcZCskIiwgInR5cGUiOiAidGV4dCIsICJjb250YWluZXJDbGFzcyI6ICJ6LTAiLCAicGF0dGVybiI6ICJeXFxkKyQiLCAiaW5wVHlwZSI6ICJpbnB1dCIsICJuYW1lIjogIk1heGltdW0gbnVtYmVyIG9mIHN0cmVhbSBjb25uZWN0aW9ucyIsICJjb2x1bW5zIjogeyJwYyI6IDQsICJ0YWJsZXQiOiA2LCAibW9iaWxlIjogMTJ9LCAiZGlzYWJsZWQiOiBmYWxzZSwgInZhbHVlIjogIjEwIiwgIm1ldGhvZCI6ICJkZWZhdWx0IiwgInByZXZfdmFsdWUiOiAiMTAiLCAicG9wb3ZlcnMiOiBbeyJpY29uTmFtZSI6ICJkaXNrIiwgInRleHQiOiAiaW5wX3BvcG92ZXJfbXVsdGlzaXRlIn0sIHsiaWNvbk5hbWUiOiAiaW5mbyIsICJ0ZXh0IjogIk1heGltdW0gbnVtYmVyIG9mIGNvbm5lY3Rpb25zIHBlciBJUCB3aGVuIHVzaW5nIHN0cmVhbS4ifV19fSwgImNoZWNrc3VtIjogbnVsbCwgIm11bHRpcGxlc19zY2hlbWEiOiB7ImxpbWl0LXJlcSI6IHsiTElNSVRfUkVRX1VSTCI6IHsiY29udGV4dCI6ICJtdWx0aXNpdGUiLCAiZGVmYXVsdCI6ICIvIiwgImhlbHAiOiAiVVJMIChQQ1JFIHJlZ2V4KSB3aGVyZSB0aGUgbGltaXQgcmVxdWVzdCB3aWxsIGJlIGFwcGxpZWQgb3Igc3BlY2lhbCB2YWx1ZSAvIGZvciBhbGwgcmVxdWVzdHMuIiwgImlkIjogImxpbWl0LXJlcS11cmwiLCAibGFiZWwiOiAiTGltaXQgcmVxdWVzdCBVUkwiLCAicmVnZXgiOiAiXi4rJCIsICJ0eXBlIjogInRleHQiLCAibXVsdGlwbGUiOiAibGltaXQtcmVxIiwgInBhdHRlcm4iOiAiXi4rJCIsICJpbnBUeXBlIjogImlucHV0IiwgIm5hbWUiOiAiTGltaXQgcmVxdWVzdCBVUkwiLCAiY29sdW1ucyI6IHsicGMiOiA0LCAidGFibGV0IjogNiwgIm1vYmlsZSI6IDEyfSwgImRpc2FibGVkIjogZmFsc2UsICJ2YWx1ZSI6ICIvIiwgInByZXZfdmFsdWUiOiAiLyIsICJwb3BvdmVycyI6IFt7Imljb25OYW1lIjogImRpc2siLCAidGV4dCI6ICJpbnBfcG9wb3Zlcl9tdWx0aXNpdGUifSwgeyJpY29uTmFtZSI6ICJpbmZvIiwgInRleHQiOiAiVVJMIChQQ1JFIHJlZ2V4KSB3aGVyZSB0aGUgbGltaXQgcmVxdWVzdCB3aWxsIGJlIGFwcGxpZWQgb3Igc3BlY2lhbCB2YWx1ZSAvIGZvciBhbGwgcmVxdWVzdHMuIn1dLCAiY29udGFpbmVyQ2xhc3MiOiAiei02In0sICJMSU1JVF9SRVFfUkFURSI6IHsiY29udGV4dCI6ICJtdWx0aXNpdGUiLCAiZGVmYXVsdCI6ICIyci9zIiwgImhlbHAiOiAiUmF0ZSB0byBhcHBseSB0byB0aGUgVVJMIChzIGZvciBzZWNvbmQsIG0gZm9yIG1pbnV0ZSwgaCBmb3IgaG91ciBhbmQgZCBmb3IgZGF5KS4iLCAiaWQiOiAibGltaXQtcmVxLXJhdGUiLCAibGFiZWwiOiAiTGltaXQgcmVxdWVzdCBSYXRlIiwgInJlZ2V4IjogIl5cXGQrci9bc21oZF0kIiwgInR5cGUiOiAidGV4dCIsICJtdWx0aXBsZSI6ICJsaW1pdC1yZXEiLCAicGF0dGVybiI6ICJeXFxkK3IvW3NtaGRdJCIsICJpbnBUeXBlIjogImlucHV0IiwgIm5hbWUiOiAiTGltaXQgcmVxdWVzdCBSYXRlIiwgImNvbHVtbnMiOiB7InBjIjogNCwgInRhYmxldCI6IDYsICJtb2JpbGUiOiAxMn0sICJkaXNhYmxlZCI6IGZhbHNlLCAidmFsdWUiOiAiMnIvcyIsICJwcmV2X3ZhbHVlIjogIjJyL3MiLCAicG9wb3ZlcnMiOiBbeyJpY29uTmFtZSI6ICJkaXNrIiwgInRleHQiOiAiaW5wX3BvcG92ZXJfbXVsdGlzaXRlIn0sIHsiaWNvbk5hbWUiOiAiaW5mbyIsICJ0ZXh0IjogIlJhdGUgdG8gYXBwbHkgdG8gdGhlIFVSTCAocyBmb3Igc2Vjb25kLCBtIGZvciBtaW51dGUsIGggZm9yIGhvdXIgYW5kIGQgZm9yIGRheSkuIn1dLCAiY29udGFpbmVyQ2xhc3MiOiAiei01In19fSwgIm11bHRpcGxlcyI6IHsibGltaXQtcmVxIjogeyIwIjogeyJMSU1JVF9SRVFfVVJMIjogeyJjb250ZXh0IjogIm11bHRpc2l0ZSIsICJkZWZhdWx0IjogIi8iLCAiaGVscCI6ICJVUkwgKFBDUkUgcmVnZXgpIHdoZXJlIHRoZSBsaW1pdCByZXF1ZXN0IHdpbGwgYmUgYXBwbGllZCBvciBzcGVjaWFsIHZhbHVlIC8gZm9yIGFsbCByZXF1ZXN0cy4iLCAiaWQiOiAibGltaXQtcmVxLXVybCIsICJsYWJlbCI6ICJMaW1pdCByZXF1ZXN0IFVSTCIsICJyZWdleCI6ICJeLiskIiwgInR5cGUiOiAidGV4dCIsICJtdWx0aXBsZSI6ICJsaW1pdC1yZXEiLCAicGF0dGVybiI6ICJeLiskIiwgImlucFR5cGUiOiAiaW5wdXQiLCAibmFtZSI6ICJMaW1pdCByZXF1ZXN0IFVSTCIsICJjb2x1bW5zIjogeyJwYyI6IDQsICJ0YWJsZXQiOiA2LCAibW9iaWxlIjogMTJ9LCAiZGlzYWJsZWQiOiBmYWxzZSwgInZhbHVlIjogIi8iLCAicHJldl92YWx1ZSI6ICIvIiwgInBvcG92ZXJzIjogW3siaWNvbk5hbWUiOiAiZGlzayIsICJ0ZXh0IjogImlucF9wb3BvdmVyX211bHRpc2l0ZSJ9LCB7Imljb25OYW1lIjogImluZm8iLCAidGV4dCI6ICJVUkwgKFBDUkUgcmVnZXgpIHdoZXJlIHRoZSBsaW1pdCByZXF1ZXN0IHdpbGwgYmUgYXBwbGllZCBvciBzcGVjaWFsIHZhbHVlIC8gZm9yIGFsbCByZXF1ZXN0cy4ifV0sICJjb250YWluZXJDbGFzcyI6ICJ6LTYiLCAibWV0aG9kIjogImRlZmF1bHQifSwgIkxJTUlUX1JFUV9SQVRFIjogeyJjb250ZXh0IjogIm11bHRpc2l0ZSIsICJkZWZhdWx0IjogIjJyL3MiLCAiaGVscCI6ICJSYXRlIHRvIGFwcGx5IHRvIHRoZSBVUkwgKHMgZm9yIHNlY29uZCwgbSBmb3IgbWludXRlLCBoIGZvciBob3VyIGFuZCBkIGZvciBkYXkpLiIsICJpZCI6ICJsaW1pdC1yZXEtcmF0ZSIsICJsYWJlbCI6ICJMaW1pdCByZXF1ZXN0IFJhdGUiLCAicmVnZXgiOiAiXlxcZCtyL1tzbWhkXSQiLCAidHlwZSI6ICJ0ZXh0IiwgIm11bHRpcGxlIjogImxpbWl0LXJlcSIsICJwYXR0ZXJuIjogIl5cXGQrci9bc21oZF0kIiwgImlucFR5cGUiOiAiaW5wdXQiLCAibmFtZSI6ICJMaW1pdCByZXF1ZXN0IFJhdGUiLCAiY29sdW1ucyI6IHsicGMiOiA0LCAidGFibGV0IjogNiwgIm1vYmlsZSI6IDEyfSwgImRpc2FibGVkIjogZmFsc2UsICJ2YWx1ZSI6ICIyci9zIiwgInByZXZfdmFsdWUiOiAiMnIvcyIsICJwb3BvdmVycyI6IFt7Imljb25OYW1lIjogImRpc2siLCAidGV4dCI6ICJpbnBfcG9wb3Zlcl9tdWx0aXNpdGUifSwgeyJpY29uTmFtZSI6ICJpbmZvIiwgInRleHQiOiAiUmF0ZSB0byBhcHBseSB0byB0aGUgVVJMIChzIGZvciBzZWNvbmQsIG0gZm9yIG1pbnV0ZSwgaCBmb3IgaG91ciBhbmQgZCBmb3IgZGF5KS4ifV0sICJjb250YWluZXJDbGFzcyI6ICJ6LTUiLCAibWV0aG9kIjogImRlZmF1bHQifX19fX0sIHsiaWQiOiAibWV0cmljcyIsICJzdHJlYW0iOiAicGFydGlhbCIsICJuYW1lIjogIk1ldHJpY3MiLCAiZGVzY3JpcHRpb24iOiAiTWV0cmljcyBjb2xsZWN0aW9uIGFuZCByZXRyaWV2ZS4iLCAidmVyc2lvbiI6ICIxLjAiLCAidHlwZSI6ICJjb3JlIiwgIm1ldGhvZCI6ICJtYW51YWwiLCAicGFnZSI6IGZhbHNlLCAic2V0dGluZ3MiOiB7IlVTRV9NRVRSSUNTIjogeyJjb250ZXh0IjogIm11bHRpc2l0ZSIsICJkZWZhdWx0IjogInllcyIsICJoZWxwIjogIkVuYWJsZSBjb2xsZWN0aW9uIGFuZCByZXRyaWV2YWwgb2YgaW50ZXJuYWwgbWV0cmljcy4iLCAiaWQiOiAidXNlLW1ldHJpY3MiLCAibGFiZWwiOiAiVXNlIG1ldHJpY3MiLCAicmVnZXgiOiAiXih5ZXN8bm8pJCIsICJ0eXBlIjogImNoZWNrIiwgImNvbnRhaW5lckNsYXNzIjogInotMCIsICJwYXR0ZXJuIjogIl4oeWVzfG5vKSQiLCAiaW5wVHlwZSI6ICJjaGVja2JveCIsICJuYW1lIjogIlVzZSBtZXRyaWNzIiwgImNvbHVtbnMiOiB7InBjIjogNCwgInRhYmxldCI6IDYsICJtb2JpbGUiOiAxMn0sICJkaXNhYmxlZCI6IGZhbHNlLCAidmFsdWUiOiAieWVzIiwgIm1ldGhvZCI6ICJkZWZhdWx0IiwgInByZXZfdmFsdWUiOiAieWVzIiwgInBvcG92ZXJzIjogW3siaWNvbk5hbWUiOiAiZGlzayIsICJ0ZXh0IjogImlucF9wb3BvdmVyX211bHRpc2l0ZSJ9LCB7Imljb25OYW1lIjogImluZm8iLCAidGV4dCI6ICJFbmFibGUgY29sbGVjdGlvbiBhbmQgcmV0cmlldmFsIG9mIGludGVybmFsIG1ldHJpY3MuIn1dfX0sICJjaGVja3N1bSI6IG51bGx9LCB7ImlkIjogIm1pc2MiLCAic3RyZWFtIjogInBhcnRpYWwiLCAibmFtZSI6ICJNaXNjZWxsYW5lb3VzIiwgImRlc2NyaXB0aW9uIjogIk1pc2NlbGxhbmVvdXMgc2V0dGluZ3MuIiwgInZlcnNpb24iOiAiMS4wIiwgInR5cGUiOiAiY29yZSIsICJtZXRob2QiOiAibWFudWFsIiwgInBhZ2UiOiB0cnVlLCAic2V0dGluZ3MiOiB7IlJFRElSRUNUX0hUVFBfVE9fSFRUUFMiOiB7ImNvbnRleHQiOiAibXVsdGlzaXRlIiwgImRlZmF1bHQiOiAibm8iLCAiaGVscCI6ICJSZWRpcmVjdCBhbGwgSFRUUCByZXF1ZXN0IHRvIEhUVFBTLiIsICJpZCI6ICJyZWRpcmVjdC1odHRwLXRvLWh0dHBzIiwgImxhYmVsIjogIlJlZGlyZWN0IEhUVFAgdG8gSFRUUFMiLCAicmVnZXgiOiAiXih5ZXN8bm8pJCIsICJ0eXBlIjogImNoZWNrIiwgImNvbnRhaW5lckNsYXNzIjogInotMTUiLCAicGF0dGVybiI6ICJeKHllc3xubykkIiwgImlucFR5cGUiOiAiY2hlY2tib3giLCAibmFtZSI6ICJSZWRpcmVjdCBIVFRQIHRvIEhUVFBTIiwgImNvbHVtbnMiOiB7InBjIjogNCwgInRhYmxldCI6IDYsICJtb2JpbGUiOiAxMn0sICJkaXNhYmxlZCI6IGZhbHNlLCAidmFsdWUiOiAibm8iLCAibWV0aG9kIjogImRlZmF1bHQiLCAicHJldl92YWx1ZSI6ICJubyIsICJwb3BvdmVycyI6IFt7Imljb25OYW1lIjogImRpc2siLCAidGV4dCI6ICJpbnBfcG9wb3Zlcl9tdWx0aXNpdGUifSwgeyJpY29uTmFtZSI6ICJpbmZvIiwgInRleHQiOiAiUmVkaXJlY3QgYWxsIEhUVFAgcmVxdWVzdCB0byBIVFRQUy4ifV19LCAiQVVUT19SRURJUkVDVF9IVFRQX1RPX0hUVFBTIjogeyJjb250ZXh0IjogIm11bHRpc2l0ZSIsICJkZWZhdWx0IjogInllcyIsICJoZWxwIjogIlRyeSB0byBkZXRlY3QgaWYgSFRUUFMgaXMgdXNlZCBhbmQgYWN0aXZhdGUgSFRUUCB0byBIVFRQUyByZWRpcmVjdGlvbiBpZiB0aGF0J3MgdGhlIGNhc2UuIiwgImlkIjogImF1dG8tcmVkaXJlY3QtaHR0cC10by1odHRwcyIsICJsYWJlbCI6ICJBdXRvIHJlZGlyZWN0IEhUVFAgdG8gSFRUUFMiLCAicmVnZXgiOiAiXih5ZXN8bm8pJCIsICJ0eXBlIjogImNoZWNrIiwgImNvbnRhaW5lckNsYXNzIjogInotMTQiLCAicGF0dGVybiI6ICJeKHllc3xubykkIiwgImlucFR5cGUiOiAiY2hlY2tib3giLCAibmFtZSI6ICJBdXRvIHJlZGlyZWN0IEhUVFAgdG8gSFRUUFMiLCAiY29sdW1ucyI6IHsicGMiOiA0LCAidGFibGV0IjogNiwgIm1vYmlsZSI6IDEyfSwgImRpc2FibGVkIjogZmFsc2UsICJ2YWx1ZSI6ICJ5ZXMiLCAibWV0aG9kIjogImRlZmF1bHQiLCAicHJldl92YWx1ZSI6ICJ5ZXMiLCAicG9wb3ZlcnMiOiBbeyJpY29uTmFtZSI6ICJkaXNrIiwgInRleHQiOiAiaW5wX3BvcG92ZXJfbXVsdGlzaXRlIn0sIHsiaWNvbk5hbWUiOiAiaW5mbyIsICJ0ZXh0IjogIlRyeSB0byBkZXRlY3QgaWYgSFRUUFMgaXMgdXNlZCBhbmQgYWN0aXZhdGUgSFRUUCB0byBIVFRQUyByZWRpcmVjdGlvbiBpZiB0aGF0J3MgdGhlIGNhc2UuIn1dfSwgIkFMTE9XRURfTUVUSE9EUyI6IHsiY29udGV4dCI6ICJtdWx0aXNpdGUiLCAiZGVmYXVsdCI6ICJHRVR8UE9TVHxIRUFEIiwgImhlbHAiOiAiQWxsb3dlZCBIVFRQIGFuZCBXZWJEQVYgbWV0aG9kcywgc2VwYXJhdGVkIHdpdGggcGlwZXMgdG8gYmUgc2VudCBieSBjbGllbnRzLiIsICJpZCI6ICJhbGxvd2VkLW1ldGhvZHMiLCAibGFiZWwiOiAiQWxsb3dlZCBtZXRob2RzIiwgInJlZ2V4IjogIl4oPyFcXHwpKFxcfD8oW0EtWl17Myx9KSg/IS4qKF58XFx8KVxcMikpKyQiLCAidHlwZSI6ICJ0ZXh0IiwgImNvbnRhaW5lckNsYXNzIjogInotMTMiLCAicGF0dGVybiI6ICJeKD8hXFx8KShcXHw/KFtBLVpdezMsfSkoPyEuKihefFxcfClcXDIpKSskIiwgImlucFR5cGUiOiAiaW5wdXQiLCAibmFtZSI6ICJBbGxvd2VkIG1ldGhvZHMiLCAiY29sdW1ucyI6IHsicGMiOiA0LCAidGFibGV0IjogNiwgIm1vYmlsZSI6IDEyfSwgImRpc2FibGVkIjogZmFsc2UsICJ2YWx1ZSI6ICJHRVR8UE9TVHxIRUFEIiwgIm1ldGhvZCI6ICJkZWZhdWx0IiwgInByZXZfdmFsdWUiOiAiR0VUfFBPU1R8SEVBRCIsICJwb3BvdmVycyI6IFt7Imljb25OYW1lIjogImRpc2siLCAidGV4dCI6ICJpbnBfcG9wb3Zlcl9tdWx0aXNpdGUifSwgeyJpY29uTmFtZSI6ICJpbmZvIiwgInRleHQiOiAiQWxsb3dlZCBIVFRQIGFuZCBXZWJEQVYgbWV0aG9kcywgc2VwYXJhdGVkIHdpdGggcGlwZXMgdG8gYmUgc2VudCBieSBjbGllbnRzLiJ9XX0sICJNQVhfQ0xJRU5UX1NJWkUiOiB7ImNvbnRleHQiOiAibXVsdGlzaXRlIiwgImRlZmF1bHQiOiAiMTBtIiwgImhlbHAiOiAiTWF4aW11bSBib2R5IHNpemUgKDAgZm9yIGluZmluaXRlKS4iLCAiaWQiOiAibWF4LWNsaWVudC1zaXplIiwgImxhYmVsIjogIk1heGltdW0gYm9keSBzaXplIiwgInJlZ2V4IjogIl5cXGQrW2tLbU1nR10/JCIsICJ0eXBlIjogInRleHQiLCAiY29udGFpbmVyQ2xhc3MiOiAiei0xMiIsICJwYXR0ZXJuIjogIl5cXGQrW2tLbU1nR10/JCIsICJpbnBUeXBlIjogImlucHV0IiwgIm5hbWUiOiAiTWF4aW11bSBib2R5IHNpemUiLCAiY29sdW1ucyI6IHsicGMiOiA0LCAidGFibGV0IjogNiwgIm1vYmlsZSI6IDEyfSwgImRpc2FibGVkIjogZmFsc2UsICJ2YWx1ZSI6ICIxMG0iLCAibWV0aG9kIjogImRlZmF1bHQiLCAicHJldl92YWx1ZSI6ICIxMG0iLCAicG9wb3ZlcnMiOiBbeyJpY29uTmFtZSI6ICJkaXNrIiwgInRleHQiOiAiaW5wX3BvcG92ZXJfbXVsdGlzaXRlIn0sIHsiaWNvbk5hbWUiOiAiaW5mbyIsICJ0ZXh0IjogIk1heGltdW0gYm9keSBzaXplICgwIGZvciBpbmZpbml0ZSkuIn1dfSwgIlNFUlZFX0ZJTEVTIjogeyJjb250ZXh0IjogIm11bHRpc2l0ZSIsICJkZWZhdWx0IjogInllcyIsICJoZWxwIjogIlNlcnZlIGZpbGVzIGZyb20gdGhlIGxvY2FsIGZvbGRlci4iLCAiaWQiOiAic2VydmUtZmlsZXMiLCAibGFiZWwiOiAiU2VydmUgZmlsZXMiLCAicmVnZXgiOiAiXih5ZXN8bm8pJCIsICJ0eXBlIjogImNoZWNrIiwgImNvbnRhaW5lckNsYXNzIjogInotMTEiLCAicGF0dGVybiI6ICJeKHllc3xubykkIiwgImlucFR5cGUiOiAiY2hlY2tib3giLCAibmFtZSI6ICJTZXJ2ZSBmaWxlcyIsICJjb2x1bW5zIjogeyJwYyI6IDQsICJ0YWJsZXQiOiA2LCAibW9iaWxlIjogMTJ9LCAiZGlzYWJsZWQiOiB0cnVlLCAidmFsdWUiOiAibm8iLCAibWV0aG9kIjogInNjaGVkdWxlciIsICJwcmV2X3ZhbHVlIjogIm5vIiwgInBvcG92ZXJzIjogW3siaWNvbk5hbWUiOiAidHJlc3Bhc3MiLCAidGV4dCI6ICJpbnBfcG9wb3Zlcl9tZXRob2RfZGlzYWJsZWQifSwgeyJpY29uTmFtZSI6ICJkaXNrIiwgInRleHQiOiAiaW5wX3BvcG92ZXJfbXVsdGlzaXRlIn0sIHsiaWNvbk5hbWUiOiAiaW5mbyIsICJ0ZXh0IjogIlNlcnZlIGZpbGVzIGZyb20gdGhlIGxvY2FsIGZvbGRlci4ifV19LCAiUk9PVF9GT0xERVIiOiB7ImNvbnRleHQiOiAibXVsdGlzaXRlIiwgImRlZmF1bHQiOiAiIiwgImhlbHAiOiAiUm9vdCBmb2xkZXIgY29udGFpbmluZyBmaWxlcyB0byBzZXJ2ZSAoL3Zhci93d3cvaHRtbC97c2VydmVyX25hbWV9IGlmIHVuc2V0KS4iLCAiaWQiOiAicm9vdC1mb2xkZXIiLCAibGFiZWwiOiAiUm9vdCBmb2xkZXIiLCAicmVnZXgiOiAiXigvW1xcdy4gXFwtXSspKi8/JCIsICJ0eXBlIjogInRleHQiLCAiY29udGFpbmVyQ2xhc3MiOiAiei0xMCIsICJwYXR0ZXJuIjogIl4oL1tcXHcuIFxcLV0rKSovPyQiLCAiaW5wVHlwZSI6ICJpbnB1dCIsICJuYW1lIjogIlJvb3QgZm9sZGVyIiwgImNvbHVtbnMiOiB7InBjIjogNCwgInRhYmxldCI6IDYsICJtb2JpbGUiOiAxMn0sICJkaXNhYmxlZCI6IGZhbHNlLCAidmFsdWUiOiAiIiwgIm1ldGhvZCI6ICJkZWZhdWx0IiwgInByZXZfdmFsdWUiOiAiIiwgInBvcG92ZXJzIjogW3siaWNvbk5hbWUiOiAiZGlzayIsICJ0ZXh0IjogImlucF9wb3BvdmVyX211bHRpc2l0ZSJ9LCB7Imljb25OYW1lIjogImluZm8iLCAidGV4dCI6ICJSb290IGZvbGRlciBjb250YWluaW5nIGZpbGVzIHRvIHNlcnZlICgvdmFyL3d3dy9odG1sL3tzZXJ2ZXJfbmFtZX0gaWYgdW5zZXQpLiJ9XX0sICJTU0xfUFJPVE9DT0xTIjogeyJjb250ZXh0IjogIm11bHRpc2l0ZSIsICJkZWZhdWx0IjogIlRMU3YxLjIgVExTdjEuMyIsICJoZWxwIjogIlRoZSBzdXBwb3J0ZWQgdmVyc2lvbiBvZiBUTFMuIFdlIHJlY29tbWVuZCB0aGUgZGVmYXVsdCB2YWx1ZSBUTFN2MS4yIFRMU3YxLjMgZm9yIGNvbXBhdGliaWxpdHkgcmVhc29ucy4iLCAiaWQiOiAiaHR0cHMtcHJvdG9jb2xzIiwgImxhYmVsIjogIkhUVFBTIHByb3RvY29scyIsICJyZWdleCI6ICJeKD8hICkoID9UTFN2MVxcLlswLTNdKSokIiwgInR5cGUiOiAidGV4dCIsICJjb250YWluZXJDbGFzcyI6ICJ6LTkiLCAicGF0dGVybiI6ICJeKD8hICkoID9UTFN2MVxcLlswLTNdKSokIiwgImlucFR5cGUiOiAiaW5wdXQiLCAibmFtZSI6ICJIVFRQUyBwcm90b2NvbHMiLCAiY29sdW1ucyI6IHsicGMiOiA0LCAidGFibGV0IjogNiwgIm1vYmlsZSI6IDEyfSwgImRpc2FibGVkIjogZmFsc2UsICJ2YWx1ZSI6ICJUTFN2MS4yIFRMU3YxLjMiLCAibWV0aG9kIjogImRlZmF1bHQiLCAicHJldl92YWx1ZSI6ICJUTFN2MS4yIFRMU3YxLjMiLCAicG9wb3ZlcnMiOiBbeyJpY29uTmFtZSI6ICJkaXNrIiwgInRleHQiOiAiaW5wX3BvcG92ZXJfbXVsdGlzaXRlIn0sIHsiaWNvbk5hbWUiOiAiaW5mbyIsICJ0ZXh0IjogIlRoZSBzdXBwb3J0ZWQgdmVyc2lvbiBvZiBUTFMuIFdlIHJlY29tbWVuZCB0aGUgZGVmYXVsdCB2YWx1ZSBUTFN2MS4yIFRMU3YxLjMgZm9yIGNvbXBhdGliaWxpdHkgcmVhc29ucy4ifV19LCAiSFRUUDIiOiB7ImNvbnRleHQiOiAibXVsdGlzaXRlIiwgImRlZmF1bHQiOiAieWVzIiwgImhlbHAiOiAiU3VwcG9ydCBIVFRQMiBwcm90b2NvbCB3aGVuIEhUVFBTIGlzIGVuYWJsZWQuIiwgImlkIjogImh0dHAyIiwgImxhYmVsIjogIkhUVFAyIiwgInJlZ2V4IjogIl4oeWVzfG5vKSQiLCAidHlwZSI6ICJjaGVjayIsICJjb250YWluZXJDbGFzcyI6ICJ6LTgiLCAicGF0dGVybiI6ICJeKHllc3xubykkIiwgImlucFR5cGUiOiAiY2hlY2tib3giLCAibmFtZSI6ICJIVFRQMiIsICJjb2x1bW5zIjogeyJwYyI6IDQsICJ0YWJsZXQiOiA2LCAibW9iaWxlIjogMTJ9LCAiZGlzYWJsZWQiOiBmYWxzZSwgInZhbHVlIjogInllcyIsICJtZXRob2QiOiAiZGVmYXVsdCIsICJwcmV2X3ZhbHVlIjogInllcyIsICJwb3BvdmVycyI6IFt7Imljb25OYW1lIjogImRpc2siLCAidGV4dCI6ICJpbnBfcG9wb3Zlcl9tdWx0aXNpdGUifSwgeyJpY29uTmFtZSI6ICJpbmZvIiwgInRleHQiOiAiU3VwcG9ydCBIVFRQMiBwcm90b2NvbCB3aGVuIEhUVFBTIGlzIGVuYWJsZWQuIn1dfSwgIkhUVFAzIjogeyJjb250ZXh0IjogIm11bHRpc2l0ZSIsICJkZWZhdWx0IjogIm5vIiwgImhlbHAiOiAiU3VwcG9ydCBIVFRQMyBwcm90b2NvbCB3aGVuIEhUVFBTIGlzIGVuYWJsZWQuIiwgImlkIjogImh0dHAzIiwgImxhYmVsIjogIkhUVFAzIiwgInJlZ2V4IjogIl4oeWVzfG5vKSQiLCAidHlwZSI6ICJjaGVjayIsICJjb250YWluZXJDbGFzcyI6ICJ6LTciLCAicGF0dGVybiI6ICJeKHllc3xubykkIiwgImlucFR5cGUiOiAiY2hlY2tib3giLCAibmFtZSI6ICJIVFRQMyIsICJjb2x1bW5zIjogeyJwYyI6IDQsICJ0YWJsZXQiOiA2LCAibW9iaWxlIjogMTJ9LCAiZGlzYWJsZWQiOiBmYWxzZSwgInZhbHVlIjogIm5vIiwgIm1ldGhvZCI6ICJkZWZhdWx0IiwgInByZXZfdmFsdWUiOiAibm8iLCAicG9wb3ZlcnMiOiBbeyJpY29uTmFtZSI6ICJkaXNrIiwgInRleHQiOiAiaW5wX3BvcG92ZXJfbXVsdGlzaXRlIn0sIHsiaWNvbk5hbWUiOiAiaW5mbyIsICJ0ZXh0IjogIlN1cHBvcnQgSFRUUDMgcHJvdG9jb2wgd2hlbiBIVFRQUyBpcyBlbmFibGVkLiJ9XX0sICJIVFRQM19BTFRfU1ZDX1BPUlQiOiB7ImNvbnRleHQiOiAibXVsdGlzaXRlIiwgImRlZmF1bHQiOiAiNDQzIiwgImhlbHAiOiAiSFRUUDMgYWx0ZXJuYXRlIHNlcnZpY2UgcG9ydC4gVGhpcyB2YWx1ZSB3aWxsIGJlIHVzZWQgYXMgcGFydCBvZiB0aGUgQWx0LVN2YyBoZWFkZXIuIiwgImlkIjogImh0dHAzLWFsdC1zdmMtcG9ydCIsICJsYWJlbCI6ICJIVFRQMyBBbHQtU3ZjIHBvcnQiLCAicmVnZXgiOiAiXlxcZCskIiwgInR5cGUiOiAidGV4dCIsICJjb250YWluZXJDbGFzcyI6ICJ6LTYiLCAicGF0dGVybiI6ICJeXFxkKyQiLCAiaW5wVHlwZSI6ICJpbnB1dCIsICJuYW1lIjogIkhUVFAzIEFsdC1TdmMgcG9ydCIsICJjb2x1bW5zIjogeyJwYyI6IDQsICJ0YWJsZXQiOiA2LCAibW9iaWxlIjogMTJ9LCAiZGlzYWJsZWQiOiBmYWxzZSwgInZhbHVlIjogIjQ0MyIsICJtZXRob2QiOiAiZGVmYXVsdCIsICJwcmV2X3ZhbHVlIjogIjQ0MyIsICJwb3BvdmVycyI6IFt7Imljb25OYW1lIjogImRpc2siLCAidGV4dCI6ICJpbnBfcG9wb3Zlcl9tdWx0aXNpdGUifSwgeyJpY29uTmFtZSI6ICJpbmZvIiwgInRleHQiOiAiSFRUUDMgYWx0ZXJuYXRlIHNlcnZpY2UgcG9ydC4gVGhpcyB2YWx1ZSB3aWxsIGJlIHVzZWQgYXMgcGFydCBvZiB0aGUgQWx0LVN2YyBoZWFkZXIuIn1dfSwgIkxJU1RFTl9IVFRQIjogeyJjb250ZXh0IjogIm11bHRpc2l0ZSIsICJkZWZhdWx0IjogInllcyIsICJoZWxwIjogIlJlc3BvbmQgdG8gKGluc2VjdXJlKSBIVFRQIHJlcXVlc3RzLiIsICJpZCI6ICJodHRwLWxpc3RlbiIsICJsYWJlbCI6ICJIVFRQIGxpc3RlbiIsICJyZWdleCI6ICJeKHllc3xubykkIiwgInR5cGUiOiAiY2hlY2siLCAiY29udGFpbmVyQ2xhc3MiOiAiei01IiwgInBhdHRlcm4iOiAiXih5ZXN8bm8pJCIsICJpbnBUeXBlIjogImNoZWNrYm94IiwgIm5hbWUiOiAiSFRUUCBsaXN0ZW4iLCAiY29sdW1ucyI6IHsicGMiOiA0LCAidGFibGV0IjogNiwgIm1vYmlsZSI6IDEyfSwgImRpc2FibGVkIjogZmFsc2UsICJ2YWx1ZSI6ICJ5ZXMiLCAibWV0aG9kIjogImRlZmF1bHQiLCAicHJldl92YWx1ZSI6ICJ5ZXMiLCAicG9wb3ZlcnMiOiBbeyJpY29uTmFtZSI6ICJkaXNrIiwgInRleHQiOiAiaW5wX3BvcG92ZXJfbXVsdGlzaXRlIn0sIHsiaWNvbk5hbWUiOiAiaW5mbyIsICJ0ZXh0IjogIlJlc3BvbmQgdG8gKGluc2VjdXJlKSBIVFRQIHJlcXVlc3RzLiJ9XX0sICJVU0VfT1BFTl9GSUxFX0NBQ0hFIjogeyJjb250ZXh0IjogIm11bHRpc2l0ZSIsICJkZWZhdWx0IjogIm5vIiwgImhlbHAiOiAiRW5hYmxlIG9wZW4gZmlsZSBjYWNoZSBmZWF0dXJlIiwgImlkIjogInVzZS1vcGVuLWZpbGUtY2FjaGUiLCAibGFiZWwiOiAiVXNlIG9wZW4gZmlsZSBjYWNoZSIsICJyZWdleCI6ICJeKHllc3xubykkIiwgInR5cGUiOiAiY2hlY2siLCAiY29udGFpbmVyQ2xhc3MiOiAiei00IiwgInBhdHRlcm4iOiAiXih5ZXN8bm8pJCIsICJpbnBUeXBlIjogImNoZWNrYm94IiwgIm5hbWUiOiAiVXNlIG9wZW4gZmlsZSBjYWNoZSIsICJjb2x1bW5zIjogeyJwYyI6IDQsICJ0YWJsZXQiOiA2LCAibW9iaWxlIjogMTJ9LCAiZGlzYWJsZWQiOiBmYWxzZSwgInZhbHVlIjogIm5vIiwgIm1ldGhvZCI6ICJkZWZhdWx0IiwgInByZXZfdmFsdWUiOiAibm8iLCAicG9wb3ZlcnMiOiBbeyJpY29uTmFtZSI6ICJkaXNrIiwgInRleHQiOiAiaW5wX3BvcG92ZXJfbXVsdGlzaXRlIn0sIHsiaWNvbk5hbWUiOiAiaW5mbyIsICJ0ZXh0IjogIkVuYWJsZSBvcGVuIGZpbGUgY2FjaGUgZmVhdHVyZSJ9XX0sICJPUEVOX0ZJTEVfQ0FDSEUiOiB7ImNvbnRleHQiOiAibXVsdGlzaXRlIiwgImRlZmF1bHQiOiAibWF4PTEwMDAgaW5hY3RpdmU9MjBzIiwgImhlbHAiOiAiT3BlbiBmaWxlIGNhY2hlIGRpcmVjdGl2ZSIsICJpZCI6ICJvcGVuLWZpbGUtY2FjaGUiLCAibGFiZWwiOiAiVXNlIG9wZW4gZmlsZSBjYWNoZSIsICJyZWdleCI6ICJeKG9mZnxtYXg9XFxkKyggaW5hY3RpdmU9XFxkKyhtcz98W3NoZHdNeV0pKT8pJCIsICJ0eXBlIjogInRleHQiLCAiY29udGFpbmVyQ2xhc3MiOiAiei0zIiwgInBhdHRlcm4iOiAiXihvZmZ8bWF4PVxcZCsoIGluYWN0aXZlPVxcZCsobXM/fFtzaGR3TXldKSk/KSQiLCAiaW5wVHlwZSI6ICJpbnB1dCIsICJuYW1lIjogIlVzZSBvcGVuIGZpbGUgY2FjaGUiLCAiY29sdW1ucyI6IHsicGMiOiA0LCAidGFibGV0IjogNiwgIm1vYmlsZSI6IDEyfSwgImRpc2FibGVkIjogZmFsc2UsICJ2YWx1ZSI6ICJtYXg9MTAwMCBpbmFjdGl2ZT0yMHMiLCAibWV0aG9kIjogImRlZmF1bHQiLCAicHJldl92YWx1ZSI6ICJtYXg9MTAwMCBpbmFjdGl2ZT0yMHMiLCAicG9wb3ZlcnMiOiBbeyJpY29uTmFtZSI6ICJkaXNrIiwgInRleHQiOiAiaW5wX3BvcG92ZXJfbXVsdGlzaXRlIn0sIHsiaWNvbk5hbWUiOiAiaW5mbyIsICJ0ZXh0IjogIk9wZW4gZmlsZSBjYWNoZSBkaXJlY3RpdmUifV19LCAiT1BFTl9GSUxFX0NBQ0hFX0VSUk9SUyI6IHsiY29udGV4dCI6ICJtdWx0aXNpdGUiLCAiZGVmYXVsdCI6ICJ5ZXMiLCAiaGVscCI6ICJFbmFibGUgb3BlbiBmaWxlIGNhY2hlIGZvciBlcnJvcnMiLCAiaWQiOiAib3Blbi1maWxlLWNhY2hlLWVycm9ycyIsICJsYWJlbCI6ICJPcGVuIGZpbGUgY2FjaGUgZXJyb3JzIiwgInJlZ2V4IjogIl4oeWVzfG5vKSQiLCAidHlwZSI6ICJjaGVjayIsICJjb250YWluZXJDbGFzcyI6ICJ6LTIiLCAicGF0dGVybiI6ICJeKHllc3xubykkIiwgImlucFR5cGUiOiAiY2hlY2tib3giLCAibmFtZSI6ICJPcGVuIGZpbGUgY2FjaGUgZXJyb3JzIiwgImNvbHVtbnMiOiB7InBjIjogNCwgInRhYmxldCI6IDYsICJtb2JpbGUiOiAxMn0sICJkaXNhYmxlZCI6IGZhbHNlLCAidmFsdWUiOiAieWVzIiwgIm1ldGhvZCI6ICJkZWZhdWx0IiwgInByZXZfdmFsdWUiOiAieWVzIiwgInBvcG92ZXJzIjogW3siaWNvbk5hbWUiOiAiZGlzayIsICJ0ZXh0IjogImlucF9wb3BvdmVyX211bHRpc2l0ZSJ9LCB7Imljb25OYW1lIjogImluZm8iLCAidGV4dCI6ICJFbmFibGUgb3BlbiBmaWxlIGNhY2hlIGZvciBlcnJvcnMifV19LCAiT1BFTl9GSUxFX0NBQ0hFX01JTl9VU0VTIjogeyJjb250ZXh0IjogIm11bHRpc2l0ZSIsICJkZWZhdWx0IjogIjIiLCAiaGVscCI6ICJFbmFibGUgb3BlbiBmaWxlIGNhY2hlIG1pbmltdW0gdXNlcyIsICJpZCI6ICJvcGVuLWZpbGUtY2FjaGUtbWluLXVzZXMiLCAibGFiZWwiOiAiT3BlbiBmaWxlIGNhY2hlIG1pbiB1c2VzIiwgInJlZ2V4IjogIl5bMS05XVxcZCokIiwgInR5cGUiOiAidGV4dCIsICJjb250YWluZXJDbGFzcyI6ICJ6LTEiLCAicGF0dGVybiI6ICJeWzEtOV1cXGQqJCIsICJpbnBUeXBlIjogImlucHV0IiwgIm5hbWUiOiAiT3BlbiBmaWxlIGNhY2hlIG1pbiB1c2VzIiwgImNvbHVtbnMiOiB7InBjIjogNCwgInRhYmxldCI6IDYsICJtb2JpbGUiOiAxMn0sICJkaXNhYmxlZCI6IGZhbHNlLCAidmFsdWUiOiAiMiIsICJtZXRob2QiOiAiZGVmYXVsdCIsICJwcmV2X3ZhbHVlIjogIjIiLCAicG9wb3ZlcnMiOiBbeyJpY29uTmFtZSI6ICJkaXNrIiwgInRleHQiOiAiaW5wX3BvcG92ZXJfbXVsdGlzaXRlIn0sIHsiaWNvbk5hbWUiOiAiaW5mbyIsICJ0ZXh0IjogIkVuYWJsZSBvcGVuIGZpbGUgY2FjaGUgbWluaW11bSB1c2VzIn1dfSwgIk9QRU5fRklMRV9DQUNIRV9WQUxJRCI6IHsiY29udGV4dCI6ICJtdWx0aXNpdGUiLCAiZGVmYXVsdCI6ICIzMHMiLCAiaGVscCI6ICJPcGVuIGZpbGUgY2FjaGUgdmFsaWQgdGltZSIsICJpZCI6ICJvcGVuLWZpbGUtY2FjaGUtdmFsaWQiLCAibGFiZWwiOiAiT3BlbiBmaWxlIGNhY2hlIHZhbGlkIHRpbWUiLCAicmVnZXgiOiAiXlxcZCsobXM/fFtzaGR3TXldKSQiLCAidHlwZSI6ICJ0ZXh0IiwgImNvbnRhaW5lckNsYXNzIjogInotMCIsICJwYXR0ZXJuIjogIl5cXGQrKG1zP3xbc2hkd015XSkkIiwgImlucFR5cGUiOiAiaW5wdXQiLCAibmFtZSI6ICJPcGVuIGZpbGUgY2FjaGUgdmFsaWQgdGltZSIsICJjb2x1bW5zIjogeyJwYyI6IDQsICJ0YWJsZXQiOiA2LCAibW9iaWxlIjogMTJ9LCAiZGlzYWJsZWQiOiBmYWxzZSwgInZhbHVlIjogIjMwcyIsICJtZXRob2QiOiAiZGVmYXVsdCIsICJwcmV2X3ZhbHVlIjogIjMwcyIsICJwb3BvdmVycyI6IFt7Imljb25OYW1lIjogImRpc2siLCAidGV4dCI6ICJpbnBfcG9wb3Zlcl9tdWx0aXNpdGUifSwgeyJpY29uTmFtZSI6ICJpbmZvIiwgInRleHQiOiAiT3BlbiBmaWxlIGNhY2hlIHZhbGlkIHRpbWUifV19fSwgImNoZWNrc3VtIjogbnVsbH0sIHsiaWQiOiAibW9kc2VjdXJpdHkiLCAic3RyZWFtIjogIm5vIiwgIm5hbWUiOiAiTW9kU2VjdXJpdHkiLCAiZGVzY3JpcHRpb24iOiAiTWFuYWdlbWVudCBvZiB0aGUgTW9kU2VjdXJpdHkgV0FGLiIsICJ2ZXJzaW9uIjogIjEuMCIsICJ0eXBlIjogImNvcmUiLCAibWV0aG9kIjogIm1hbnVhbCIsICJwYWdlIjogZmFsc2UsICJzZXR0aW5ncyI6IHsiVVNFX01PRFNFQ1VSSVRZIjogeyJjb250ZXh0IjogIm11bHRpc2l0ZSIsICJkZWZhdWx0IjogInllcyIsICJoZWxwIjogIkVuYWJsZSBNb2RTZWN1cml0eSBXQUYuIiwgImlkIjogInVzZS1tb2RzZWN1cml0eSIsICJsYWJlbCI6ICJVc2UgTW9kU2VjdXJpdHkiLCAicmVnZXgiOiAiXih5ZXN8bm8pJCIsICJ0eXBlIjogImNoZWNrIiwgImNvbnRhaW5lckNsYXNzIjogInotNSIsICJwYXR0ZXJuIjogIl4oeWVzfG5vKSQiLCAiaW5wVHlwZSI6ICJjaGVja2JveCIsICJuYW1lIjogIlVzZSBNb2RTZWN1cml0eSIsICJjb2x1bW5zIjogeyJwYyI6IDQsICJ0YWJsZXQiOiA2LCAibW9iaWxlIjogMTJ9LCAiZGlzYWJsZWQiOiBmYWxzZSwgInZhbHVlIjogInllcyIsICJtZXRob2QiOiAiZGVmYXVsdCIsICJwcmV2X3ZhbHVlIjogInllcyIsICJwb3BvdmVycyI6IFt7Imljb25OYW1lIjogImRpc2siLCAidGV4dCI6ICJpbnBfcG9wb3Zlcl9tdWx0aXNpdGUifSwgeyJpY29uTmFtZSI6ICJpbmZvIiwgInRleHQiOiAiRW5hYmxlIE1vZFNlY3VyaXR5IFdBRi4ifV19LCAiVVNFX01PRFNFQ1VSSVRZX0NSUyI6IHsiY29udGV4dCI6ICJtdWx0aXNpdGUiLCAiZGVmYXVsdCI6ICJ5ZXMiLCAiaGVscCI6ICJFbmFibGUgT1dBU1AgQ29yZSBSdWxlIFNldC4iLCAiaWQiOiAidXNlLW1vZHNlY3VyaXR5LWNycyIsICJsYWJlbCI6ICJVc2UgQ29yZSBSdWxlIFNldCIsICJyZWdleCI6ICJeKHllc3xubykkIiwgInR5cGUiOiAiY2hlY2siLCAiY29udGFpbmVyQ2xhc3MiOiAiei00IiwgInBhdHRlcm4iOiAiXih5ZXN8bm8pJCIsICJpbnBUeXBlIjogImNoZWNrYm94IiwgIm5hbWUiOiAiVXNlIENvcmUgUnVsZSBTZXQiLCAiY29sdW1ucyI6IHsicGMiOiA0LCAidGFibGV0IjogNiwgIm1vYmlsZSI6IDEyfSwgImRpc2FibGVkIjogZmFsc2UsICJ2YWx1ZSI6ICJ5ZXMiLCAibWV0aG9kIjogImRlZmF1bHQiLCAicHJldl92YWx1ZSI6ICJ5ZXMiLCAicG9wb3ZlcnMiOiBbeyJpY29uTmFtZSI6ICJkaXNrIiwgInRleHQiOiAiaW5wX3BvcG92ZXJfbXVsdGlzaXRlIn0sIHsiaWNvbk5hbWUiOiAiaW5mbyIsICJ0ZXh0IjogIkVuYWJsZSBPV0FTUCBDb3JlIFJ1bGUgU2V0LiJ9XX0sICJNT0RTRUNVUklUWV9DUlNfVkVSU0lPTiI6IHsiY29udGV4dCI6ICJtdWx0aXNpdGUiLCAiZGVmYXVsdCI6ICIzIiwgImhlbHAiOiAiVmVyc2lvbiBvZiB0aGUgT1dBU1AgQ29yZSBSdWxlIFNldCB0byB1c2Ugd2l0aCBNb2RTZWN1cml0eSAoMywgNCBvciBuaWdodGx5KS4iLCAiaWQiOiAibW9kc2VjdXJpdHktY3JzLXZlcnNpb24iLCAibGFiZWwiOiAiQ29yZSBSdWxlIFNldCBWZXJzaW9uIiwgInJlZ2V4IjogIl4oM3w0fG5pZ2h0bHkpJCIsICJ0eXBlIjogInNlbGVjdCIsICJjb250YWluZXJDbGFzcyI6ICJ6LTMiLCAicGF0dGVybiI6ICJeKDN8NHxuaWdodGx5KSQiLCAiaW5wVHlwZSI6ICJzZWxlY3QiLCAibmFtZSI6ICJDb3JlIFJ1bGUgU2V0IFZlcnNpb24iLCAidmFsdWVzIjogWyIzIiwgIjQiLCAibmlnaHRseSJdLCAiY29sdW1ucyI6IHsicGMiOiA0LCAidGFibGV0IjogNiwgIm1vYmlsZSI6IDEyfSwgImRpc2FibGVkIjogZmFsc2UsICJ2YWx1ZSI6ICI0IiwgIm1ldGhvZCI6ICJkZWZhdWx0IiwgInByZXZfdmFsdWUiOiAiNCIsICJwb3BvdmVycyI6IFt7Imljb25OYW1lIjogImRpc2siLCAidGV4dCI6ICJpbnBfcG9wb3Zlcl9tdWx0aXNpdGUifSwgeyJpY29uTmFtZSI6ICJpbmZvIiwgInRleHQiOiAiVmVyc2lvbiBvZiB0aGUgT1dBU1AgQ29yZSBSdWxlIFNldCB0byB1c2Ugd2l0aCBNb2RTZWN1cml0eSAoMywgNCBvciBuaWdodGx5KS4ifV19LCAiTU9EU0VDVVJJVFlfU0VDX0FVRElUX0VOR0lORSI6IHsiY29udGV4dCI6ICJtdWx0aXNpdGUiLCAiZGVmYXVsdCI6ICJSZWxldmFudE9ubHkiLCAiaGVscCI6ICJTZWNBdWRpdEVuZ2luZSBkaXJlY3RpdmUgb2YgTW9kU2VjdXJpdHkuIiwgImlkIjogIm1vZHNlY3VyaXR5LXNlYy1hdWRpdC1lbmdpbmUiLCAibGFiZWwiOiAiU2VjQXVkaXRFbmdpbmUiLCAicmVnZXgiOiAiXihPbnxSZWxldmFudE9ubHl8T2ZmKSQiLCAidHlwZSI6ICJzZWxlY3QiLCAiY29udGFpbmVyQ2xhc3MiOiAiei0yIiwgInBhdHRlcm4iOiAiXihPbnxSZWxldmFudE9ubHl8T2ZmKSQiLCAiaW5wVHlwZSI6ICJzZWxlY3QiLCAibmFtZSI6ICJTZWNBdWRpdEVuZ2luZSIsICJ2YWx1ZXMiOiBbIk9mZiIsICJPbiIsICJSZWxldmFudE9ubHkiXSwgImNvbHVtbnMiOiB7InBjIjogNCwgInRhYmxldCI6IDYsICJtb2JpbGUiOiAxMn0sICJkaXNhYmxlZCI6IGZhbHNlLCAidmFsdWUiOiAiUmVsZXZhbnRPbmx5IiwgIm1ldGhvZCI6ICJkZWZhdWx0IiwgInByZXZfdmFsdWUiOiAiUmVsZXZhbnRPbmx5IiwgInBvcG92ZXJzIjogW3siaWNvbk5hbWUiOiAiZGlzayIsICJ0ZXh0IjogImlucF9wb3BvdmVyX211bHRpc2l0ZSJ9LCB7Imljb25OYW1lIjogImluZm8iLCAidGV4dCI6ICJTZWNBdWRpdEVuZ2luZSBkaXJlY3RpdmUgb2YgTW9kU2VjdXJpdHkuIn1dfSwgIk1PRFNFQ1VSSVRZX1NFQ19SVUxFX0VOR0lORSI6IHsiY29udGV4dCI6ICJtdWx0aXNpdGUiLCAiZGVmYXVsdCI6ICJPbiIsICJoZWxwIjogIlNlY1J1bGVFbmdpbmUgZGlyZWN0aXZlIG9mIE1vZFNlY3VyaXR5LiIsICJpZCI6ICJtb2RzZWN1cml0eS1zZWMtcnVsZS1lbmdpbmUiLCAibGFiZWwiOiAiU2VjUnVsZUVuZ2luZSIsICJyZWdleCI6ICJeKE9ufERldGVjdGlvbk9ubHl8T2ZmKSQiLCAidHlwZSI6ICJzZWxlY3QiLCAiY29udGFpbmVyQ2xhc3MiOiAiei0xIiwgInBhdHRlcm4iOiAiXihPbnxEZXRlY3Rpb25Pbmx5fE9mZikkIiwgImlucFR5cGUiOiAic2VsZWN0IiwgIm5hbWUiOiAiU2VjUnVsZUVuZ2luZSIsICJ2YWx1ZXMiOiBbIkRldGVjdGlvbk9ubHkiLCAiT2ZmIiwgIk9uIl0sICJjb2x1bW5zIjogeyJwYyI6IDQsICJ0YWJsZXQiOiA2LCAibW9iaWxlIjogMTJ9LCAiZGlzYWJsZWQiOiBmYWxzZSwgInZhbHVlIjogIk9uIiwgIm1ldGhvZCI6ICJkZWZhdWx0IiwgInByZXZfdmFsdWUiOiAiT24iLCAicG9wb3ZlcnMiOiBbeyJpY29uTmFtZSI6ICJkaXNrIiwgInRleHQiOiAiaW5wX3BvcG92ZXJfbXVsdGlzaXRlIn0sIHsiaWNvbk5hbWUiOiAiaW5mbyIsICJ0ZXh0IjogIlNlY1J1bGVFbmdpbmUgZGlyZWN0aXZlIG9mIE1vZFNlY3VyaXR5LiJ9XX0sICJNT0RTRUNVUklUWV9TRUNfQVVESVRfTE9HX1BBUlRTIjogeyJjb250ZXh0IjogIm11bHRpc2l0ZSIsICJkZWZhdWx0IjogIkFCQ0ZIWiIsICJoZWxwIjogIlNlY0F1ZGl0TG9nUGFydHMgZGlyZWN0aXZlIG9mIE1vZFNlY3VyaXR5LiIsICJpZCI6ICJtb2RzZWN1cml0eS1zZWMtYXVkaXQtbG9nLXBhcnRzIiwgImxhYmVsIjogIlNlY0F1ZGl0TG9nUGFydHMiLCAicmVnZXgiOiAiXkEoKFtCLUtdKSg/IS4qXFwyKSkrWiQiLCAidHlwZSI6ICJ0ZXh0IiwgImNvbnRhaW5lckNsYXNzIjogInotMCIsICJwYXR0ZXJuIjogIl5BKChbQi1LXSkoPyEuKlxcMikpK1okIiwgImlucFR5cGUiOiAiaW5wdXQiLCAibmFtZSI6ICJTZWNBdWRpdExvZ1BhcnRzIiwgImNvbHVtbnMiOiB7InBjIjogNCwgInRhYmxldCI6IDYsICJtb2JpbGUiOiAxMn0sICJkaXNhYmxlZCI6IGZhbHNlLCAidmFsdWUiOiAiQUJDRkhaIiwgIm1ldGhvZCI6ICJkZWZhdWx0IiwgInByZXZfdmFsdWUiOiAiQUJDRkhaIiwgInBvcG92ZXJzIjogW3siaWNvbk5hbWUiOiAiZGlzayIsICJ0ZXh0IjogImlucF9wb3BvdmVyX211bHRpc2l0ZSJ9LCB7Imljb25OYW1lIjogImluZm8iLCAidGV4dCI6ICJTZWNBdWRpdExvZ1BhcnRzIGRpcmVjdGl2ZSBvZiBNb2RTZWN1cml0eS4ifV19fSwgImNoZWNrc3VtIjogbnVsbH0sIHsiaWQiOiAicGhwIiwgInN0cmVhbSI6ICJubyIsICJuYW1lIjogIlBIUCIsICJkZXNjcmlwdGlvbiI6ICJNYW5hZ2UgbG9jYWwgb3IgcmVtb3RlIFBIUC1GUE0uIiwgInZlcnNpb24iOiAiMS4wIiwgInR5cGUiOiAiY29yZSIsICJtZXRob2QiOiAibWFudWFsIiwgInBhZ2UiOiBmYWxzZSwgInNldHRpbmdzIjogeyJSRU1PVEVfUEhQIjogeyJjb250ZXh0IjogIm11bHRpc2l0ZSIsICJkZWZhdWx0IjogIiIsICJoZWxwIjogIkhvc3RuYW1lIG9mIHRoZSByZW1vdGUgUEhQLUZQTSBpbnN0YW5jZS4iLCAiaWQiOiAicmVtb3RlLXBocCIsICJsYWJlbCI6ICJSZW1vdGUgUEhQIiwgInJlZ2V4IjogIl4oKD89LnsxLDI1NX0kKVswLTlBLVphLXpdKD86KD86WzAtOUEtWmEtel18LSl7MCw2MX1bMC05QS1aYS16XSk/KD86XFwuWzAtOUEtWmEtel0oPzooPzpbMC05QS1aYS16XXwtKXswLDYxfVswLTlBLVphLXpdKT8pKlxcLj8pPyQiLCAidHlwZSI6ICJ0ZXh0IiwgImNvbnRhaW5lckNsYXNzIjogInotMyIsICJwYXR0ZXJuIjogIl4oKD89LnsxLDI1NX0kKVswLTlBLVphLXpdKD86KD86WzAtOUEtWmEtel18LSl7MCw2MX1bMC05QS1aYS16XSk/KD86XFwuWzAtOUEtWmEtel0oPzooPzpbMC05QS1aYS16XXwtKXswLDYxfVswLTlBLVphLXpdKT8pKlxcLj8pPyQiLCAiaW5wVHlwZSI6ICJpbnB1dCIsICJuYW1lIjogIlJlbW90ZSBQSFAiLCAiY29sdW1ucyI6IHsicGMiOiA0LCAidGFibGV0IjogNiwgIm1vYmlsZSI6IDEyfSwgImRpc2FibGVkIjogZmFsc2UsICJ2YWx1ZSI6ICIiLCAibWV0aG9kIjogImRlZmF1bHQiLCAicHJldl92YWx1ZSI6ICIiLCAicG9wb3ZlcnMiOiBbeyJpY29uTmFtZSI6ICJkaXNrIiwgInRleHQiOiAiaW5wX3BvcG92ZXJfbXVsdGlzaXRlIn0sIHsiaWNvbk5hbWUiOiAiaW5mbyIsICJ0ZXh0IjogIkhvc3RuYW1lIG9mIHRoZSByZW1vdGUgUEhQLUZQTSBpbnN0YW5jZS4ifV19LCAiUkVNT1RFX1BIUF9QQVRIIjogeyJjb250ZXh0IjogIm11bHRpc2l0ZSIsICJkZWZhdWx0IjogIiIsICJoZWxwIjogIlJvb3QgZm9sZGVyIGNvbnRhaW5pbmcgZmlsZXMgaW4gdGhlIHJlbW90ZSBQSFAtRlBNIGluc3RhbmNlLiIsICJpZCI6ICJyZW1vdGUtcGhwLXBhdGgiLCAibGFiZWwiOiAiUmVtb3RlIFBIUCBwYXRoIiwgInJlZ2V4IjogIl4oL1tcXHcuIFxcLV0rKSovPyQiLCAidHlwZSI6ICJ0ZXh0IiwgImNvbnRhaW5lckNsYXNzIjogInotMiIsICJwYXR0ZXJuIjogIl4oL1tcXHcuIFxcLV0rKSovPyQiLCAiaW5wVHlwZSI6ICJpbnB1dCIsICJuYW1lIjogIlJlbW90ZSBQSFAgcGF0aCIsICJjb2x1bW5zIjogeyJwYyI6IDQsICJ0YWJsZXQiOiA2LCAibW9iaWxlIjogMTJ9LCAiZGlzYWJsZWQiOiBmYWxzZSwgInZhbHVlIjogIiIsICJtZXRob2QiOiAiZGVmYXVsdCIsICJwcmV2X3ZhbHVlIjogIiIsICJwb3BvdmVycyI6IFt7Imljb25OYW1lIjogImRpc2siLCAidGV4dCI6ICJpbnBfcG9wb3Zlcl9tdWx0aXNpdGUifSwgeyJpY29uTmFtZSI6ICJpbmZvIiwgInRleHQiOiAiUm9vdCBmb2xkZXIgY29udGFpbmluZyBmaWxlcyBpbiB0aGUgcmVtb3RlIFBIUC1GUE0gaW5zdGFuY2UuIn1dfSwgIkxPQ0FMX1BIUCI6IHsiY29udGV4dCI6ICJtdWx0aXNpdGUiLCAiZGVmYXVsdCI6ICIiLCAiaGVscCI6ICJQYXRoIHRvIHRoZSBQSFAtRlBNIHNvY2tldCBmaWxlLiIsICJpZCI6ICJsb2NhbCIsICJsYWJlbCI6ICJMb2NhbCBQSFAiLCAicmVnZXgiOiAiXigvW1xcdy4gXFwtXSspKi8/JCIsICJ0eXBlIjogInRleHQiLCAiY29udGFpbmVyQ2xhc3MiOiAiei0xIiwgInBhdHRlcm4iOiAiXigvW1xcdy4gXFwtXSspKi8/JCIsICJpbnBUeXBlIjogImlucHV0IiwgIm5hbWUiOiAiTG9jYWwgUEhQIiwgImNvbHVtbnMiOiB7InBjIjogNCwgInRhYmxldCI6IDYsICJtb2JpbGUiOiAxMn0sICJkaXNhYmxlZCI6IGZhbHNlLCAidmFsdWUiOiAiIiwgIm1ldGhvZCI6ICJkZWZhdWx0IiwgInByZXZfdmFsdWUiOiAiIiwgInBvcG92ZXJzIjogW3siaWNvbk5hbWUiOiAiZGlzayIsICJ0ZXh0IjogImlucF9wb3BvdmVyX211bHRpc2l0ZSJ9LCB7Imljb25OYW1lIjogImluZm8iLCAidGV4dCI6ICJQYXRoIHRvIHRoZSBQSFAtRlBNIHNvY2tldCBmaWxlLiJ9XX0sICJMT0NBTF9QSFBfUEFUSCI6IHsiY29udGV4dCI6ICJtdWx0aXNpdGUiLCAiZGVmYXVsdCI6ICIiLCAiaGVscCI6ICJSb290IGZvbGRlciBjb250YWluaW5nIGZpbGVzIGluIHRoZSBsb2NhbCBQSFAtRlBNIGluc3RhbmNlLiIsICJpZCI6ICJsb2NhbC1waHAtcGF0aCIsICJsYWJlbCI6ICJMb2NhbCBQSFAgcGF0aCIsICJyZWdleCI6ICJeKC9bXFx3LiBcXC1dKykqLz8kIiwgInR5cGUiOiAidGV4dCIsICJjb250YWluZXJDbGFzcyI6ICJ6LTAiLCAicGF0dGVybiI6ICJeKC9bXFx3LiBcXC1dKykqLz8kIiwgImlucFR5cGUiOiAiaW5wdXQiLCAibmFtZSI6ICJMb2NhbCBQSFAgcGF0aCIsICJjb2x1bW5zIjogeyJwYyI6IDQsICJ0YWJsZXQiOiA2LCAibW9iaWxlIjogMTJ9LCAiZGlzYWJsZWQiOiBmYWxzZSwgInZhbHVlIjogIiIsICJtZXRob2QiOiAiZGVmYXVsdCIsICJwcmV2X3ZhbHVlIjogIiIsICJwb3BvdmVycyI6IFt7Imljb25OYW1lIjogImRpc2siLCAidGV4dCI6ICJpbnBfcG9wb3Zlcl9tdWx0aXNpdGUifSwgeyJpY29uTmFtZSI6ICJpbmZvIiwgInRleHQiOiAiUm9vdCBmb2xkZXIgY29udGFpbmluZyBmaWxlcyBpbiB0aGUgbG9jYWwgUEhQLUZQTSBpbnN0YW5jZS4ifV19fSwgImNoZWNrc3VtIjogbnVsbH0sIHsiaWQiOiAicmVhbGlwIiwgInN0cmVhbSI6ICJwYXJ0aWFsIiwgIm5hbWUiOiAiUmVhbCBJUCIsICJkZXNjcmlwdGlvbiI6ICJHZXQgcmVhbCBJUCBvZiBjbGllbnRzIHdoZW4gQnVua2VyV2ViIGlzIGJlaGluZCBhIHJldmVyc2UgcHJveHkgLyBsb2FkIGJhbGFuY2VyLiIsICJ2ZXJzaW9uIjogIjEuMCIsICJ0eXBlIjogImNvcmUiLCAibWV0aG9kIjogIm1hbnVhbCIsICJwYWdlIjogZmFsc2UsICJzZXR0aW5ncyI6IHsiVVNFX1JFQUxfSVAiOiB7ImNvbnRleHQiOiAibXVsdGlzaXRlIiwgImRlZmF1bHQiOiAibm8iLCAiaGVscCI6ICJSZXRyaWV2ZSB0aGUgcmVhbCBJUCBvZiBjbGllbnQuIiwgImlkIjogInVzZS1yZWFsLWlwIiwgImxhYmVsIjogIlVzZSByZWFsIGlwIiwgInJlZ2V4IjogIl4oeWVzfG5vKSQiLCAidHlwZSI6ICJjaGVjayIsICJjb250YWluZXJDbGFzcyI6ICJ6LTQiLCAicGF0dGVybiI6ICJeKHllc3xubykkIiwgImlucFR5cGUiOiAiY2hlY2tib3giLCAibmFtZSI6ICJVc2UgcmVhbCBpcCIsICJjb2x1bW5zIjogeyJwYyI6IDQsICJ0YWJsZXQiOiA2LCAibW9iaWxlIjogMTJ9LCAiZGlzYWJsZWQiOiBmYWxzZSwgInZhbHVlIjogIm5vIiwgIm1ldGhvZCI6ICJkZWZhdWx0IiwgInByZXZfdmFsdWUiOiAibm8iLCAicG9wb3ZlcnMiOiBbeyJpY29uTmFtZSI6ICJkaXNrIiwgInRleHQiOiAiaW5wX3BvcG92ZXJfbXVsdGlzaXRlIn0sIHsiaWNvbk5hbWUiOiAiaW5mbyIsICJ0ZXh0IjogIlJldHJpZXZlIHRoZSByZWFsIElQIG9mIGNsaWVudC4ifV19LCAiVVNFX1BST1hZX1BST1RPQ09MIjogeyJjb250ZXh0IjogIm11bHRpc2l0ZSIsICJkZWZhdWx0IjogIm5vIiwgImhlbHAiOiAiRW5hYmxlIFBST1hZIHByb3RvY29sIGNvbW11bmljYXRpb24uIiwgImlkIjogInVzZS1wcm94eS1wcm90b2NvbCIsICJsYWJlbCI6ICJVc2UgUFJPWFkgcHJvdG9jb2wiLCAicmVnZXgiOiAiXih5ZXN8bm8pJCIsICJ0eXBlIjogImNoZWNrIiwgImNvbnRhaW5lckNsYXNzIjogInotMyIsICJwYXR0ZXJuIjogIl4oeWVzfG5vKSQiLCAiaW5wVHlwZSI6ICJjaGVja2JveCIsICJuYW1lIjogIlVzZSBQUk9YWSBwcm90b2NvbCIsICJjb2x1bW5zIjogeyJwYyI6IDQsICJ0YWJsZXQiOiA2LCAibW9iaWxlIjogMTJ9LCAiZGlzYWJsZWQiOiBmYWxzZSwgInZhbHVlIjogIm5vIiwgIm1ldGhvZCI6ICJkZWZhdWx0IiwgInByZXZfdmFsdWUiOiAibm8iLCAicG9wb3ZlcnMiOiBbeyJpY29uTmFtZSI6ICJkaXNrIiwgInRleHQiOiAiaW5wX3BvcG92ZXJfbXVsdGlzaXRlIn0sIHsiaWNvbk5hbWUiOiAiaW5mbyIsICJ0ZXh0IjogIkVuYWJsZSBQUk9YWSBwcm90b2NvbCBjb21tdW5pY2F0aW9uLiJ9XX0sICJSRUFMX0lQX0ZST00iOiB7ImNvbnRleHQiOiAibXVsdGlzaXRlIiwgImRlZmF1bHQiOiAiMTkyLjE2OC4wLjAvMTYgMTcyLjE2LjAuMC8xMiAxMC4wLjAuMC84IiwgImhlbHAiOiAiTGlzdCBvZiB0cnVzdGVkIElQcyAvIG5ldHdvcmtzLCBzZXBhcmF0ZWQgd2l0aCBzcGFjZXMsIHdoZXJlIHByb3hpZWQgcmVxdWVzdHMgY29tZSBmcm9tLiIsICJpZCI6ICJyZWFsLWlwLWZyb20iLCAibGFiZWwiOiAiUmVhbCBJUCBmcm9tIiwgInJlZ2V4IjogIl4oPyEgKSggKigoKFxcYjI1WzAtNV18XFxiMlswLTRdXFxkfFxcYlswMV0/XFxkXFxkPykoXFwuKDI1WzAtNV18MlswLTRdXFxkfFswMV0/XFxkXFxkPykpezN9KShcXC8oWzEtMl1bMC05XT98M1swLTJdP3xbMDQtOV0pKT98KChbMC05YS1mQS1GXXsxLDR9Oil7N31bMC05YS1mQS1GXXsxLDR9fChbMC05YS1mQS1GXXsxLDR9Oil7MSw3fTp8KFswLTlhLWZBLUZdezEsNH06KXsxLDZ9OlswLTlhLWZBLUZdezEsNH18KFswLTlhLWZBLUZdezEsNH06KXsxLDV9KDpbMC05YS1mQS1GXXsxLDR9KXsxLDJ9fChbMC05YS1mQS1GXXsxLDR9Oil7MSw0fSg6WzAtOWEtZkEtRl17MSw0fSl7MSwzfXwoWzAtOWEtZkEtRl17MSw0fTopezEsM30oOlswLTlhLWZBLUZdezEsNH0pezEsNH18KFswLTlhLWZBLUZdezEsNH06KXsxLDJ9KDpbMC05YS1mQS1GXXsxLDR9KXsxLDV9fFswLTlhLWZBLUZdezEsNH06KCg6WzAtOWEtZkEtRl17MSw0fSl7MSw2fSl8OigoOlswLTlhLWZBLUZdezEsNH0pezEsN318Oil8ZmU4MDooOlswLTlhLWZBLUZdWnswLDR9KXswLDR9JVswLTlhLXpBLVpdK3w6OihmZmZmKDowezEsNH0pPzopPygoMjVbMC01XXwoMlswLTRdfDE/XFxkKT9cXGQpXFwuKXszfSgyNVswLTVdfCgyWzAtNF18MT9cXGQpP1xcZCl8KFswLTlhLWZBLUZdezEsNH06KXsxLDR9OigoMjVbMC01XXwoMlswLTRdfDE/XFxkKT9cXGQpXFwuKXszfSgyNVswLTVdfCgyWzAtNF18MT9cXGQpP1xcZCkpKFxcLygxMlswLThdfDFbMDFdWzAtOV18WzAtOV1bMC05XT8pKT8pKD8hLipcXERcXDIoW15cXGRcXC9dfCQpKSAqKSokIiwgInR5cGUiOiAidGV4dCIsICJjb250YWluZXJDbGFzcyI6ICJ6LTIiLCAicGF0dGVybiI6ICJeKD8hICkoICooKChcXGIyNVswLTVdfFxcYjJbMC00XVxcZHxcXGJbMDFdP1xcZFxcZD8pKFxcLigyNVswLTVdfDJbMC00XVxcZHxbMDFdP1xcZFxcZD8pKXszfSkoXFwvKFsxLTJdWzAtOV0/fDNbMC0yXT98WzA0LTldKSk/fCgoWzAtOWEtZkEtRl17MSw0fTopezd9WzAtOWEtZkEtRl17MSw0fXwoWzAtOWEtZkEtRl17MSw0fTopezEsN306fChbMC05YS1mQS1GXXsxLDR9Oil7MSw2fTpbMC05YS1mQS1GXXsxLDR9fChbMC05YS1mQS1GXXsxLDR9Oil7MSw1fSg6WzAtOWEtZkEtRl17MSw0fSl7MSwyfXwoWzAtOWEtZkEtRl17MSw0fTopezEsNH0oOlswLTlhLWZBLUZdezEsNH0pezEsM318KFswLTlhLWZBLUZdezEsNH06KXsxLDN9KDpbMC05YS1mQS1GXXsxLDR9KXsxLDR9fChbMC05YS1mQS1GXXsxLDR9Oil7MSwyfSg6WzAtOWEtZkEtRl17MSw0fSl7MSw1fXxbMC05YS1mQS1GXXsxLDR9OigoOlswLTlhLWZBLUZdezEsNH0pezEsNn0pfDooKDpbMC05YS1mQS1GXXsxLDR9KXsxLDd9fDopfGZlODA6KDpbMC05YS1mQS1GXVp7MCw0fSl7MCw0fSVbMC05YS16QS1aXSt8OjooZmZmZig6MHsxLDR9KT86KT8oKDI1WzAtNV18KDJbMC00XXwxP1xcZCk/XFxkKVxcLil7M30oMjVbMC01XXwoMlswLTRdfDE/XFxkKT9cXGQpfChbMC05YS1mQS1GXXsxLDR9Oil7MSw0fTooKDI1WzAtNV18KDJbMC00XXwxP1xcZCk/XFxkKVxcLil7M30oMjVbMC01XXwoMlswLTRdfDE/XFxkKT9cXGQpKShcXC8oMTJbMC04XXwxWzAxXVswLTldfFswLTldWzAtOV0/KSk/KSg/IS4qXFxEXFwyKFteXFxkXFwvXXwkKSkgKikqJCIsICJpbnBUeXBlIjogImlucHV0IiwgIm5hbWUiOiAiUmVhbCBJUCBmcm9tIiwgImNvbHVtbnMiOiB7InBjIjogNCwgInRhYmxldCI6IDYsICJtb2JpbGUiOiAxMn0sICJkaXNhYmxlZCI6IGZhbHNlLCAidmFsdWUiOiAiMTkyLjE2OC4wLjAvMTYgMTcyLjE2LjAuMC8xMiAxMC4wLjAuMC84IiwgIm1ldGhvZCI6ICJkZWZhdWx0IiwgInByZXZfdmFsdWUiOiAiMTkyLjE2OC4wLjAvMTYgMTcyLjE2LjAuMC8xMiAxMC4wLjAuMC84IiwgInBvcG92ZXJzIjogW3siaWNvbk5hbWUiOiAiZGlzayIsICJ0ZXh0IjogImlucF9wb3BvdmVyX211bHRpc2l0ZSJ9LCB7Imljb25OYW1lIjogImluZm8iLCAidGV4dCI6ICJMaXN0IG9mIHRydXN0ZWQgSVBzIC8gbmV0d29ya3MsIHNlcGFyYXRlZCB3aXRoIHNwYWNlcywgd2hlcmUgcHJveGllZCByZXF1ZXN0cyBjb21lIGZyb20uIn1dfSwgIlJFQUxfSVBfSEVBREVSIjogeyJjb250ZXh0IjogIm11bHRpc2l0ZSIsICJkZWZhdWx0IjogIlgtRm9yd2FyZGVkLUZvciIsICJoZWxwIjogIkhUVFAgaGVhZGVyIGNvbnRhaW5pbmcgdGhlIHJlYWwgSVAgb3Igc3BlY2lhbCB2YWx1ZSBwcm94eV9wcm90b2NvbCBmb3IgUFJPWFkgcHJvdG9jb2wuIiwgImlkIjogInJlYWwtaXAtaGVhZGVyIiwgImxhYmVsIjogIlJlYWwgSVAgaGVhZGVyIiwgInJlZ2V4IjogIl4oPyEgKSgoID8oPyFwcm94eV9wcm90b2NvbClbXFx3XFwtXSspKnxwcm94eV9wcm90b2NvbCkkIiwgInR5cGUiOiAidGV4dCIsICJjb250YWluZXJDbGFzcyI6ICJ6LTEiLCAicGF0dGVybiI6ICJeKD8hICkoKCA/KD8hcHJveHlfcHJvdG9jb2wpW1xcd1xcLV0rKSp8cHJveHlfcHJvdG9jb2wpJCIsICJpbnBUeXBlIjogImlucHV0IiwgIm5hbWUiOiAiUmVhbCBJUCBoZWFkZXIiLCAiY29sdW1ucyI6IHsicGMiOiA0LCAidGFibGV0IjogNiwgIm1vYmlsZSI6IDEyfSwgImRpc2FibGVkIjogZmFsc2UsICJ2YWx1ZSI6ICJYLUZvcndhcmRlZC1Gb3IiLCAibWV0aG9kIjogImRlZmF1bHQiLCAicHJldl92YWx1ZSI6ICJYLUZvcndhcmRlZC1Gb3IiLCAicG9wb3ZlcnMiOiBbeyJpY29uTmFtZSI6ICJkaXNrIiwgInRleHQiOiAiaW5wX3BvcG92ZXJfbXVsdGlzaXRlIn0sIHsiaWNvbk5hbWUiOiAiaW5mbyIsICJ0ZXh0IjogIkhUVFAgaGVhZGVyIGNvbnRhaW5pbmcgdGhlIHJlYWwgSVAgb3Igc3BlY2lhbCB2YWx1ZSBwcm94eV9wcm90b2NvbCBmb3IgUFJPWFkgcHJvdG9jb2wuIn1dfSwgIlJFQUxfSVBfUkVDVVJTSVZFIjogeyJjb250ZXh0IjogIm11bHRpc2l0ZSIsICJkZWZhdWx0IjogInllcyIsICJoZWxwIjogIlBlcmZvcm0gYSByZWN1cnNpdmUgc2VhcmNoIGluIHRoZSBoZWFkZXIgY29udGFpbmVyIElQIGFkZHJlc3MuIiwgImlkIjogInJlYWwtaXAtcmVjdXJzaXZlIiwgImxhYmVsIjogIlJlYWwgSVAgcmVjdXJzaXZlIiwgInJlZ2V4IjogIl4oeWVzfG5vKSQiLCAidHlwZSI6ICJjaGVjayIsICJjb250YWluZXJDbGFzcyI6ICJ6LTAiLCAicGF0dGVybiI6ICJeKHllc3xubykkIiwgImlucFR5cGUiOiAiY2hlY2tib3giLCAibmFtZSI6ICJSZWFsIElQIHJlY3Vyc2l2ZSIsICJjb2x1bW5zIjogeyJwYyI6IDQsICJ0YWJsZXQiOiA2LCAibW9iaWxlIjogMTJ9LCAiZGlzYWJsZWQiOiBmYWxzZSwgInZhbHVlIjogInllcyIsICJtZXRob2QiOiAiZGVmYXVsdCIsICJwcmV2X3ZhbHVlIjogInllcyIsICJwb3BvdmVycyI6IFt7Imljb25OYW1lIjogImRpc2siLCAidGV4dCI6ICJpbnBfcG9wb3Zlcl9tdWx0aXNpdGUifSwgeyJpY29uTmFtZSI6ICJpbmZvIiwgInRleHQiOiAiUGVyZm9ybSBhIHJlY3Vyc2l2ZSBzZWFyY2ggaW4gdGhlIGhlYWRlciBjb250YWluZXIgSVAgYWRkcmVzcy4ifV19fSwgImNoZWNrc3VtIjogbnVsbH0sIHsiaWQiOiAicmVkaXJlY3QiLCAic3RyZWFtIjogIm5vIiwgIm5hbWUiOiAiUmVkaXJlY3QiLCAiZGVzY3JpcHRpb24iOiAiTWFuYWdlIEhUVFAgcmVkaXJlY3RzLiIsICJ2ZXJzaW9uIjogIjEuMCIsICJ0eXBlIjogImNvcmUiLCAibWV0aG9kIjogIm1hbnVhbCIsICJwYWdlIjogZmFsc2UsICJzZXR0aW5ncyI6IHsiUkVESVJFQ1RfVE8iOiB7ImNvbnRleHQiOiAibXVsdGlzaXRlIiwgImRlZmF1bHQiOiAiIiwgImhlbHAiOiAiUmVkaXJlY3QgYSB3aG9sZSBzaXRlIHRvIGFub3RoZXIgb25lLiIsICJpZCI6ICJyZWRpcmVjdC10byIsICJsYWJlbCI6ICJSZWRpcmVjdCB0byIsICJyZWdleCI6ICJeKGh0dHBzPzpcXC9cXC9bXFwtXFx3QDolLit+Iz1dK1tcXC1cXHdcXChcXCkhQDolKy5+Iz8mXFwvPSRdKik/JCIsICJ0eXBlIjogInRleHQiLCAiY29udGFpbmVyQ2xhc3MiOiAiei0yIiwgInBhdHRlcm4iOiAiXihodHRwcz86XFwvXFwvW1xcLVxcd0A6JS4rfiM9XStbXFwtXFx3XFwoXFwpIUA6JSsufiM/JlxcLz0kXSopPyQiLCAiaW5wVHlwZSI6ICJpbnB1dCIsICJuYW1lIjogIlJlZGlyZWN0IHRvIiwgImNvbHVtbnMiOiB7InBjIjogNCwgInRhYmxldCI6IDYsICJtb2JpbGUiOiAxMn0sICJkaXNhYmxlZCI6IGZhbHNlLCAidmFsdWUiOiAiIiwgIm1ldGhvZCI6ICJkZWZhdWx0IiwgInByZXZfdmFsdWUiOiAiIiwgInBvcG92ZXJzIjogW3siaWNvbk5hbWUiOiAiZGlzayIsICJ0ZXh0IjogImlucF9wb3BvdmVyX211bHRpc2l0ZSJ9LCB7Imljb25OYW1lIjogImluZm8iLCAidGV4dCI6ICJSZWRpcmVjdCBhIHdob2xlIHNpdGUgdG8gYW5vdGhlciBvbmUuIn1dfSwgIlJFRElSRUNUX1RPX1JFUVVFU1RfVVJJIjogeyJjb250ZXh0IjogIm11bHRpc2l0ZSIsICJkZWZhdWx0IjogIm5vIiwgImhlbHAiOiAiQXBwZW5kIHRoZSByZXF1ZXN0ZWQgVVJJIHRvIHRoZSByZWRpcmVjdCBhZGRyZXNzLiIsICJpZCI6ICJyZWRpcmVjdC10by1yZXF1ZXN0LXVyaSIsICJsYWJlbCI6ICJBcHBlbmQgcmVxdWVzdCBVUkkiLCAicmVnZXgiOiAiXih5ZXN8bm8pJCIsICJ0eXBlIjogImNoZWNrIiwgImNvbnRhaW5lckNsYXNzIjogInotMSIsICJwYXR0ZXJuIjogIl4oeWVzfG5vKSQiLCAiaW5wVHlwZSI6ICJjaGVja2JveCIsICJuYW1lIjogIkFwcGVuZCByZXF1ZXN0IFVSSSIsICJjb2x1bW5zIjogeyJwYyI6IDQsICJ0YWJsZXQiOiA2LCAibW9iaWxlIjogMTJ9LCAiZGlzYWJsZWQiOiBmYWxzZSwgInZhbHVlIjogIm5vIiwgIm1ldGhvZCI6ICJkZWZhdWx0IiwgInByZXZfdmFsdWUiOiAibm8iLCAicG9wb3ZlcnMiOiBbeyJpY29uTmFtZSI6ICJkaXNrIiwgInRleHQiOiAiaW5wX3BvcG92ZXJfbXVsdGlzaXRlIn0sIHsiaWNvbk5hbWUiOiAiaW5mbyIsICJ0ZXh0IjogIkFwcGVuZCB0aGUgcmVxdWVzdGVkIFVSSSB0byB0aGUgcmVkaXJlY3QgYWRkcmVzcy4ifV19LCAiUkVESVJFQ1RfVE9fU1RBVFVTX0NPREUiOiB7ImNvbnRleHQiOiAibXVsdGlzaXRlIiwgImRlZmF1bHQiOiAiMzAxIiwgImhlbHAiOiAiU3RhdHVzIGNvZGUgdG8gc2VuZCB0byBjbGllbnQgd2hlbiByZWRpcmVjdGluZy4iLCAiaWQiOiAicmVkaXJlY3QtdG8tc3RhdHVzLWNvZGUiLCAibGFiZWwiOiAiQXBwZW5kIHJlcXVlc3QgVVJJIiwgInJlZ2V4IjogIl4oMzAxfDMwMikkIiwgInR5cGUiOiAic2VsZWN0IiwgImNvbnRhaW5lckNsYXNzIjogInotMCIsICJwYXR0ZXJuIjogIl4oMzAxfDMwMikkIiwgImlucFR5cGUiOiAic2VsZWN0IiwgIm5hbWUiOiAiQXBwZW5kIHJlcXVlc3QgVVJJIiwgInZhbHVlcyI6IFsiMzAxIiwgIjMwMiJdLCAiY29sdW1ucyI6IHsicGMiOiA0LCAidGFibGV0IjogNiwgIm1vYmlsZSI6IDEyfSwgImRpc2FibGVkIjogZmFsc2UsICJ2YWx1ZSI6ICIzMDEiLCAibWV0aG9kIjogImRlZmF1bHQiLCAicHJldl92YWx1ZSI6ICIzMDEiLCAicG9wb3ZlcnMiOiBbeyJpY29uTmFtZSI6ICJkaXNrIiwgInRleHQiOiAiaW5wX3BvcG92ZXJfbXVsdGlzaXRlIn0sIHsiaWNvbk5hbWUiOiAiaW5mbyIsICJ0ZXh0IjogIlN0YXR1cyBjb2RlIHRvIHNlbmQgdG8gY2xpZW50IHdoZW4gcmVkaXJlY3RpbmcuIn1dfX0sICJjaGVja3N1bSI6IG51bGx9LCB7ImlkIjogInJldmVyc2Vwcm94eSIsICJzdHJlYW0iOiAicGFydGlhbCIsICJuYW1lIjogIlJldmVyc2UgcHJveHkiLCAiZGVzY3JpcHRpb24iOiAiTWFuYWdlIHJldmVyc2UgcHJveHkgY29uZmlndXJhdGlvbnMuIiwgInZlcnNpb24iOiAiMS4wIiwgInR5cGUiOiAiY29yZSIsICJtZXRob2QiOiAibWFudWFsIiwgInBhZ2UiOiBmYWxzZSwgInNldHRpbmdzIjogeyJVU0VfUkVWRVJTRV9QUk9YWSI6IHsiY29udGV4dCI6ICJtdWx0aXNpdGUiLCAiZGVmYXVsdCI6ICJubyIsICJoZWxwIjogIkFjdGl2YXRlIHJldmVyc2UgcHJveHkgbW9kZS4iLCAiaWQiOiAidXNlLXJldmVyc2UtcHJveHkiLCAibGFiZWwiOiAiVXNlIHJldmVyc2UgcHJveHkiLCAicmVnZXgiOiAiXih5ZXN8bm8pJCIsICJ0eXBlIjogImNoZWNrIiwgImNvbnRhaW5lckNsYXNzIjogInotMjMiLCAicGF0dGVybiI6ICJeKHllc3xubykkIiwgImlucFR5cGUiOiAiY2hlY2tib3giLCAibmFtZSI6ICJVc2UgcmV2ZXJzZSBwcm94eSIsICJjb2x1bW5zIjogeyJwYyI6IDQsICJ0YWJsZXQiOiA2LCAibW9iaWxlIjogMTJ9LCAiZGlzYWJsZWQiOiB0cnVlLCAidmFsdWUiOiAieWVzIiwgIm1ldGhvZCI6ICJzY2hlZHVsZXIiLCAicHJldl92YWx1ZSI6ICJ5ZXMiLCAicG9wb3ZlcnMiOiBbeyJpY29uTmFtZSI6ICJ0cmVzcGFzcyIsICJ0ZXh0IjogImlucF9wb3BvdmVyX21ldGhvZF9kaXNhYmxlZCJ9LCB7Imljb25OYW1lIjogImRpc2siLCAidGV4dCI6ICJpbnBfcG9wb3Zlcl9tdWx0aXNpdGUifSwgeyJpY29uTmFtZSI6ICJpbmZvIiwgInRleHQiOiAiQWN0aXZhdGUgcmV2ZXJzZSBwcm94eSBtb2RlLiJ9XX0sICJSRVZFUlNFX1BST1hZX0lOVEVSQ0VQVF9FUlJPUlMiOiB7ImNvbnRleHQiOiAibXVsdGlzaXRlIiwgImRlZmF1bHQiOiAieWVzIiwgImhlbHAiOiAiSW50ZXJjZXB0IGFuZCByZXdyaXRlIGVycm9ycy4iLCAiaWQiOiAicmV2ZXJzZS1wcm94eS1pbnRlcmNlcHQtZXJyb3JzIiwgImxhYmVsIjogIkludGVyY2VwdCBlcnJvcnMiLCAicmVnZXgiOiAiXih5ZXN8bm8pJCIsICJ0eXBlIjogImNoZWNrIiwgImNvbnRhaW5lckNsYXNzIjogInotMjIiLCAicGF0dGVybiI6ICJeKHllc3xubykkIiwgImlucFR5cGUiOiAiY2hlY2tib3giLCAibmFtZSI6ICJJbnRlcmNlcHQgZXJyb3JzIiwgImNvbHVtbnMiOiB7InBjIjogNCwgInRhYmxldCI6IDYsICJtb2JpbGUiOiAxMn0sICJkaXNhYmxlZCI6IGZhbHNlLCAidmFsdWUiOiAieWVzIiwgIm1ldGhvZCI6ICJkZWZhdWx0IiwgInByZXZfdmFsdWUiOiAieWVzIiwgInBvcG92ZXJzIjogW3siaWNvbk5hbWUiOiAiZGlzayIsICJ0ZXh0IjogImlucF9wb3BvdmVyX211bHRpc2l0ZSJ9LCB7Imljb25OYW1lIjogImluZm8iLCAidGV4dCI6ICJJbnRlcmNlcHQgYW5kIHJld3JpdGUgZXJyb3JzLiJ9XX0sICJSRVZFUlNFX1BST1hZX0NVU1RPTV9IT1NUIjogeyJjb250ZXh0IjogIm11bHRpc2l0ZSIsICJkZWZhdWx0IjogIiIsICJoZWxwIjogIk92ZXJyaWRlIEhvc3QgaGVhZGVyIHNlbnQgdG8gdXBzdHJlYW0gc2VydmVyLiIsICJpZCI6ICJyZXZlcnNlLXByb3h5LWN1c3RvbS1ob3N0IiwgImxhYmVsIjogIlJldmVyc2UgcHJveHkgY3VzdG9tIGhvc3QiLCAicmVnZXgiOiAiXi4qJCIsICJ0eXBlIjogInRleHQiLCAiY29udGFpbmVyQ2xhc3MiOiAiei0yMSIsICJwYXR0ZXJuIjogIl4uKiQiLCAiaW5wVHlwZSI6ICJpbnB1dCIsICJuYW1lIjogIlJldmVyc2UgcHJveHkgY3VzdG9tIGhvc3QiLCAiY29sdW1ucyI6IHsicGMiOiA0LCAidGFibGV0IjogNiwgIm1vYmlsZSI6IDEyfSwgImRpc2FibGVkIjogZmFsc2UsICJ2YWx1ZSI6ICIiLCAibWV0aG9kIjogImRlZmF1bHQiLCAicHJldl92YWx1ZSI6ICIiLCAicG9wb3ZlcnMiOiBbeyJpY29uTmFtZSI6ICJkaXNrIiwgInRleHQiOiAiaW5wX3BvcG92ZXJfbXVsdGlzaXRlIn0sIHsiaWNvbk5hbWUiOiAiaW5mbyIsICJ0ZXh0IjogIk92ZXJyaWRlIEhvc3QgaGVhZGVyIHNlbnQgdG8gdXBzdHJlYW0gc2VydmVyLiJ9XX0sICJVU0VfUFJPWFlfQ0FDSEUiOiB7ImNvbnRleHQiOiAibXVsdGlzaXRlIiwgImRlZmF1bHQiOiAibm8iLCAiaGVscCI6ICJFbmFibGUgb3IgZGlzYWJsZSBjYWNoaW5nIG9mIHRoZSBwcm94aWVkIHJlc291cmNlcy4iLCAiaWQiOiAidXNlLXByb3h5LWNhY2hlIiwgImxhYmVsIjogIlJldmVyc2UgcHJveHkgY2FjaGUiLCAicmVnZXgiOiAiXih5ZXN8bm8pJCIsICJ0eXBlIjogImNoZWNrIiwgImNvbnRhaW5lckNsYXNzIjogInotNiIsICJwYXR0ZXJuIjogIl4oeWVzfG5vKSQiLCAiaW5wVHlwZSI6ICJjaGVja2JveCIsICJuYW1lIjogIlJldmVyc2UgcHJveHkgY2FjaGUiLCAiY29sdW1ucyI6IHsicGMiOiA0LCAidGFibGV0IjogNiwgIm1vYmlsZSI6IDEyfSwgImRpc2FibGVkIjogZmFsc2UsICJ2YWx1ZSI6ICJubyIsICJtZXRob2QiOiAiZGVmYXVsdCIsICJwcmV2X3ZhbHVlIjogIm5vIiwgInBvcG92ZXJzIjogW3siaWNvbk5hbWUiOiAiZGlzayIsICJ0ZXh0IjogImlucF9wb3BvdmVyX211bHRpc2l0ZSJ9LCB7Imljb25OYW1lIjogImluZm8iLCAidGV4dCI6ICJFbmFibGUgb3IgZGlzYWJsZSBjYWNoaW5nIG9mIHRoZSBwcm94aWVkIHJlc291cmNlcy4ifV19LCAiUFJPWFlfQ0FDSEVfTUVUSE9EUyI6IHsiY29udGV4dCI6ICJtdWx0aXNpdGUiLCAiZGVmYXVsdCI6ICJHRVQgSEVBRCIsICJoZWxwIjogIkhUVFAgbWV0aG9kcyB0aGF0IHNob3VsZCB0cmlnZ2VyIGEgY2FjaGUgb3BlcmF0aW9uLiIsICJpZCI6ICJwcm94eS1jYWNoZS1tZXRob2RzIiwgImxhYmVsIjogIlJldmVyc2UgcHJveHkgY2FjaGUgbWV0aG9kcyIsICJyZWdleCI6ICJeKD8hICkoID8oR0VUfEhFQUR8UE9TVHxQVVR8REVMRVRFfENPTk5FQ1R8T1BUSU9OU3xUUkFDRXxQQVRDSCkoPyEuKlxcMikpKyQiLCAidHlwZSI6ICJ0ZXh0IiwgImNvbnRhaW5lckNsYXNzIjogInotNSIsICJwYXR0ZXJuIjogIl4oPyEgKSggPyhHRVR8SEVBRHxQT1NUfFBVVHxERUxFVEV8Q09OTkVDVHxPUFRJT05TfFRSQUNFfFBBVENIKSg/IS4qXFwyKSkrJCIsICJpbnBUeXBlIjogImlucHV0IiwgIm5hbWUiOiAiUmV2ZXJzZSBwcm94eSBjYWNoZSBtZXRob2RzIiwgImNvbHVtbnMiOiB7InBjIjogNCwgInRhYmxldCI6IDYsICJtb2JpbGUiOiAxMn0sICJkaXNhYmxlZCI6IGZhbHNlLCAidmFsdWUiOiAiR0VUIEhFQUQiLCAibWV0aG9kIjogImRlZmF1bHQiLCAicHJldl92YWx1ZSI6ICJHRVQgSEVBRCIsICJwb3BvdmVycyI6IFt7Imljb25OYW1lIjogImRpc2siLCAidGV4dCI6ICJpbnBfcG9wb3Zlcl9tdWx0aXNpdGUifSwgeyJpY29uTmFtZSI6ICJpbmZvIiwgInRleHQiOiAiSFRUUCBtZXRob2RzIHRoYXQgc2hvdWxkIHRyaWdnZXIgYSBjYWNoZSBvcGVyYXRpb24uIn1dfSwgIlBST1hZX0NBQ0hFX01JTl9VU0VTIjogeyJjb250ZXh0IjogIm11bHRpc2l0ZSIsICJkZWZhdWx0IjogIjIiLCAiaGVscCI6ICJUaGUgbWluaW11bSBudW1iZXIgb2YgcmVxdWVzdHMgYmVmb3JlIGEgcmVzcG9uc2UgaXMgY2FjaGVkLiIsICJpZCI6ICJwcm94eS1jYWNoZS1taW4tdXNlcyIsICJsYWJlbCI6ICJSZXZlcnNlIHByb3h5IGNhY2hlIG1pbmltdW0gdXNlcyIsICJyZWdleCI6ICJeWzEtOV1cXGQqJCIsICJ0eXBlIjogInRleHQiLCAiY29udGFpbmVyQ2xhc3MiOiAiei00IiwgInBhdHRlcm4iOiAiXlsxLTldXFxkKiQiLCAiaW5wVHlwZSI6ICJpbnB1dCIsICJuYW1lIjogIlJldmVyc2UgcHJveHkgY2FjaGUgbWluaW11bSB1c2VzIiwgImNvbHVtbnMiOiB7InBjIjogNCwgInRhYmxldCI6IDYsICJtb2JpbGUiOiAxMn0sICJkaXNhYmxlZCI6IGZhbHNlLCAidmFsdWUiOiAiMiIsICJtZXRob2QiOiAiZGVmYXVsdCIsICJwcmV2X3ZhbHVlIjogIjIiLCAicG9wb3ZlcnMiOiBbeyJpY29uTmFtZSI6ICJkaXNrIiwgInRleHQiOiAiaW5wX3BvcG92ZXJfbXVsdGlzaXRlIn0sIHsiaWNvbk5hbWUiOiAiaW5mbyIsICJ0ZXh0IjogIlRoZSBtaW5pbXVtIG51bWJlciBvZiByZXF1ZXN0cyBiZWZvcmUgYSByZXNwb25zZSBpcyBjYWNoZWQuIn1dfSwgIlBST1hZX0NBQ0hFX0tFWSI6IHsiY29udGV4dCI6ICJtdWx0aXNpdGUiLCAiZGVmYXVsdCI6ICIkc2NoZW1lJGhvc3QkcmVxdWVzdF91cmkiLCAiaGVscCI6ICJUaGUga2V5IHVzZWQgdG8gdW5pcXVlbHkgaWRlbnRpZnkgYSBjYWNoZWQgcmVzcG9uc2UuIiwgImlkIjogInByb3h5LWNhY2hlLWtleSIsICJsYWJlbCI6ICJSZXZlcnNlIHByb3h5IGNhY2hlIGtleSIsICJyZWdleCI6ICJeKD8hICkoID8oXFwkW2Etel9dKykoPyEuKlxcMikpKyQiLCAidHlwZSI6ICJ0ZXh0IiwgImNvbnRhaW5lckNsYXNzIjogInotMyIsICJwYXR0ZXJuIjogIl4oPyEgKSggPyhcXCRbYS16X10rKSg/IS4qXFwyKSkrJCIsICJpbnBUeXBlIjogImlucHV0IiwgIm5hbWUiOiAiUmV2ZXJzZSBwcm94eSBjYWNoZSBrZXkiLCAiY29sdW1ucyI6IHsicGMiOiA0LCAidGFibGV0IjogNiwgIm1vYmlsZSI6IDEyfSwgImRpc2FibGVkIjogZmFsc2UsICJ2YWx1ZSI6ICIkc2NoZW1lJGhvc3QkcmVxdWVzdF91cmkiLCAibWV0aG9kIjogImRlZmF1bHQiLCAicHJldl92YWx1ZSI6ICIkc2NoZW1lJGhvc3QkcmVxdWVzdF91cmkiLCAicG9wb3ZlcnMiOiBbeyJpY29uTmFtZSI6ICJkaXNrIiwgInRleHQiOiAiaW5wX3BvcG92ZXJfbXVsdGlzaXRlIn0sIHsiaWNvbk5hbWUiOiAiaW5mbyIsICJ0ZXh0IjogIlRoZSBrZXkgdXNlZCB0byB1bmlxdWVseSBpZGVudGlmeSBhIGNhY2hlZCByZXNwb25zZS4ifV19LCAiUFJPWFlfQ0FDSEVfVkFMSUQiOiB7ImNvbnRleHQiOiAibXVsdGlzaXRlIiwgImRlZmF1bHQiOiAiMjAwPTI0aCAzMDE9MWggMzAyPTI0aCIsICJoZWxwIjogIkRlZmluZSB0aGUgY2FjaGluZyB0aW1lIGRlcGVuZGluZyBvbiB0aGUgSFRUUCBzdGF0dXMgY29kZSAobGlzdCBvZiBzdGF0dXM9dGltZSksIHNlcGFyYXRlZCB3aXRoIHNwYWNlcy4iLCAiaWQiOiAicHJveHktY2FjaGUtdmFsaWQiLCAibGFiZWwiOiAiUmV2ZXJzZSBwcm94eSBjYWNoZSB2YWxpZCIsICJyZWdleCI6ICJeKD8hICkoID8oWzEtNV1cXGR7Mn0pKD8hLipcXDI9KT1cXGQrKG1zP3xbc2hkd015XSkpKiQiLCAidHlwZSI6ICJ0ZXh0IiwgImNvbnRhaW5lckNsYXNzIjogInotMiIsICJwYXR0ZXJuIjogIl4oPyEgKSggPyhbMS01XVxcZHsyfSkoPyEuKlxcMj0pPVxcZCsobXM/fFtzaGR3TXldKSkqJCIsICJpbnBUeXBlIjogImlucHV0IiwgIm5hbWUiOiAiUmV2ZXJzZSBwcm94eSBjYWNoZSB2YWxpZCIsICJjb2x1bW5zIjogeyJwYyI6IDQsICJ0YWJsZXQiOiA2LCAibW9iaWxlIjogMTJ9LCAiZGlzYWJsZWQiOiBmYWxzZSwgInZhbHVlIjogIjIwMD0yNGggMzAxPTFoIDMwMj0yNGgiLCAibWV0aG9kIjogImRlZmF1bHQiLCAicHJldl92YWx1ZSI6ICIyMDA9MjRoIDMwMT0xaCAzMDI9MjRoIiwgInBvcG92ZXJzIjogW3siaWNvbk5hbWUiOiAiZGlzayIsICJ0ZXh0IjogImlucF9wb3BvdmVyX211bHRpc2l0ZSJ9LCB7Imljb25OYW1lIjogImluZm8iLCAidGV4dCI6ICJEZWZpbmUgdGhlIGNhY2hpbmcgdGltZSBkZXBlbmRpbmcgb24gdGhlIEhUVFAgc3RhdHVzIGNvZGUgKGxpc3Qgb2Ygc3RhdHVzPXRpbWUpLCBzZXBhcmF0ZWQgd2l0aCBzcGFjZXMuIn1dfSwgIlBST1hZX05PX0NBQ0hFIjogeyJjb250ZXh0IjogIm11bHRpc2l0ZSIsICJkZWZhdWx0IjogIiRodHRwX3ByYWdtYSAkaHR0cF9hdXRob3JpemF0aW9uIiwgImhlbHAiOiAiQ29uZGl0aW9ucyB0byBkaXNhYmxlIGNhY2hpbmcgb2YgcmVzcG9uc2VzLiIsICJpZCI6ICJwcm94eS1uby1jYWNoZSIsICJsYWJlbCI6ICJSZXZlcnNlIHByb3h5IG5vIGNhY2hlIiwgInJlZ2V4IjogIl4uKiQiLCAidHlwZSI6ICJ0ZXh0IiwgImNvbnRhaW5lckNsYXNzIjogInotMSIsICJwYXR0ZXJuIjogIl4uKiQiLCAiaW5wVHlwZSI6ICJpbnB1dCIsICJuYW1lIjogIlJldmVyc2UgcHJveHkgbm8gY2FjaGUiLCAiY29sdW1ucyI6IHsicGMiOiA0LCAidGFibGV0IjogNiwgIm1vYmlsZSI6IDEyfSwgImRpc2FibGVkIjogZmFsc2UsICJ2YWx1ZSI6ICIkaHR0cF9wcmFnbWEgJGh0dHBfYXV0aG9yaXphdGlvbiIsICJtZXRob2QiOiAiZGVmYXVsdCIsICJwcmV2X3ZhbHVlIjogIiRodHRwX3ByYWdtYSAkaHR0cF9hdXRob3JpemF0aW9uIiwgInBvcG92ZXJzIjogW3siaWNvbk5hbWUiOiAiZGlzayIsICJ0ZXh0IjogImlucF9wb3BvdmVyX211bHRpc2l0ZSJ9LCB7Imljb25OYW1lIjogImluZm8iLCAidGV4dCI6ICJDb25kaXRpb25zIHRvIGRpc2FibGUgY2FjaGluZyBvZiByZXNwb25zZXMuIn1dfSwgIlBST1hZX0NBQ0hFX0JZUEFTUyI6IHsiY29udGV4dCI6ICJtdWx0aXNpdGUiLCAiZGVmYXVsdCI6ICIwIiwgImhlbHAiOiAiQ29uZGl0aW9ucyB0byBieXBhc3MgY2FjaGluZyBvZiByZXNwb25zZXMuIiwgImlkIjogInByb3h5LWNhY2hlLWJ5cGFzcyIsICJsYWJlbCI6ICJSZXZlcnNlIHByb3h5IGJ5cGFzcyIsICJyZWdleCI6ICJeLiokIiwgInR5cGUiOiAidGV4dCIsICJjb250YWluZXJDbGFzcyI6ICJ6LTAiLCAicGF0dGVybiI6ICJeLiokIiwgImlucFR5cGUiOiAiaW5wdXQiLCAibmFtZSI6ICJSZXZlcnNlIHByb3h5IGJ5cGFzcyIsICJjb2x1bW5zIjogeyJwYyI6IDQsICJ0YWJsZXQiOiA2LCAibW9iaWxlIjogMTJ9LCAiZGlzYWJsZWQiOiBmYWxzZSwgInZhbHVlIjogIjAiLCAibWV0aG9kIjogImRlZmF1bHQiLCAicHJldl92YWx1ZSI6ICIwIiwgInBvcG92ZXJzIjogW3siaWNvbk5hbWUiOiAiZGlzayIsICJ0ZXh0IjogImlucF9wb3BvdmVyX211bHRpc2l0ZSJ9LCB7Imljb25OYW1lIjogImluZm8iLCAidGV4dCI6ICJDb25kaXRpb25zIHRvIGJ5cGFzcyBjYWNoaW5nIG9mIHJlc3BvbnNlcy4ifV19fSwgImNoZWNrc3VtIjogbnVsbCwgIm11bHRpcGxlc19zY2hlbWEiOiB7InJldmVyc2UtcHJveHkiOiB7IlJFVkVSU0VfUFJPWFlfSE9TVCI6IHsiY29udGV4dCI6ICJtdWx0aXNpdGUiLCAiZGVmYXVsdCI6ICIiLCAiaGVscCI6ICJGdWxsIFVSTCBvZiB0aGUgcHJveGllZCByZXNvdXJjZSAocHJveHlfcGFzcykuIiwgImlkIjogInJldmVyc2UtcHJveHktaG9zdCIsICJsYWJlbCI6ICJSZXZlcnNlIHByb3h5IGhvc3QiLCAicmVnZXgiOiAiXi4qJCIsICJ0eXBlIjogInRleHQiLCAibXVsdGlwbGUiOiAicmV2ZXJzZS1wcm94eSIsICJwYXR0ZXJuIjogIl4uKiQiLCAiaW5wVHlwZSI6ICJpbnB1dCIsICJuYW1lIjogIlJldmVyc2UgcHJveHkgaG9zdCIsICJjb2x1bW5zIjogeyJwYyI6IDQsICJ0YWJsZXQiOiA2LCAibW9iaWxlIjogMTJ9LCAiZGlzYWJsZWQiOiB0cnVlLCAidmFsdWUiOiAiIiwgInByZXZfdmFsdWUiOiAiIiwgInBvcG92ZXJzIjogW3siaWNvbk5hbWUiOiAidHJlc3Bhc3MiLCAidGV4dCI6ICJpbnBfcG9wb3Zlcl9tZXRob2RfZGlzYWJsZWQifSwgeyJpY29uTmFtZSI6ICJkaXNrIiwgInRleHQiOiAiaW5wX3BvcG92ZXJfbXVsdGlzaXRlIn0sIHsiaWNvbk5hbWUiOiAiaW5mbyIsICJ0ZXh0IjogIkZ1bGwgVVJMIG9mIHRoZSBwcm94aWVkIHJlc291cmNlIChwcm94eV9wYXNzKS4ifV0sICJjb250YWluZXJDbGFzcyI6ICJ6LTIzIn0sICJSRVZFUlNFX1BST1hZX1VSTCI6IHsiY29udGV4dCI6ICJtdWx0aXNpdGUiLCAiZGVmYXVsdCI6ICIvIiwgImhlbHAiOiAiTG9jYXRpb24gVVJMIHRoYXQgd2lsbCBiZSBwcm94aWVkLiIsICJpZCI6ICJyZXZlcnNlLXByb3h5LXVybCIsICJsYWJlbCI6ICJSZXZlcnNlIHByb3h5IHVybCIsICJyZWdleCI6ICJeLiokIiwgInR5cGUiOiAidGV4dCIsICJtdWx0aXBsZSI6ICJyZXZlcnNlLXByb3h5IiwgInBhdHRlcm4iOiAiXi4qJCIsICJpbnBUeXBlIjogImlucHV0IiwgIm5hbWUiOiAiUmV2ZXJzZSBwcm94eSB1cmwiLCAiY29sdW1ucyI6IHsicGMiOiA0LCAidGFibGV0IjogNiwgIm1vYmlsZSI6IDEyfSwgImRpc2FibGVkIjogZmFsc2UsICJ2YWx1ZSI6ICIvIiwgInByZXZfdmFsdWUiOiAiLyIsICJwb3BvdmVycyI6IFt7Imljb25OYW1lIjogImRpc2siLCAidGV4dCI6ICJpbnBfcG9wb3Zlcl9tdWx0aXNpdGUifSwgeyJpY29uTmFtZSI6ICJpbmZvIiwgInRleHQiOiAiTG9jYXRpb24gVVJMIHRoYXQgd2lsbCBiZSBwcm94aWVkLiJ9XSwgImNvbnRhaW5lckNsYXNzIjogInotMjIifSwgIlJFVkVSU0VfUFJPWFlfV1MiOiB7ImNvbnRleHQiOiAibXVsdGlzaXRlIiwgImRlZmF1bHQiOiAibm8iLCAiaGVscCI6ICJFbmFibGUgd2Vic29ja2V0IG9uIHRoZSBwcm94aWVkIHJlc291cmNlLiIsICJpZCI6ICJyZXZlcnNlLXByb3h5LXdzIiwgImxhYmVsIjogIlJldmVyc2UgcHJveHkgV1MiLCAicmVnZXgiOiAiXih5ZXN8bm8pJCIsICJ0eXBlIjogImNoZWNrIiwgIm11bHRpcGxlIjogInJldmVyc2UtcHJveHkiLCAicGF0dGVybiI6ICJeKHllc3xubykkIiwgImlucFR5cGUiOiAiY2hlY2tib3giLCAibmFtZSI6ICJSZXZlcnNlIHByb3h5IFdTIiwgImNvbHVtbnMiOiB7InBjIjogNCwgInRhYmxldCI6IDYsICJtb2JpbGUiOiAxMn0sICJkaXNhYmxlZCI6IGZhbHNlLCAidmFsdWUiOiAibm8iLCAicHJldl92YWx1ZSI6ICJubyIsICJwb3BvdmVycyI6IFt7Imljb25OYW1lIjogImRpc2siLCAidGV4dCI6ICJpbnBfcG9wb3Zlcl9tdWx0aXNpdGUifSwgeyJpY29uTmFtZSI6ICJpbmZvIiwgInRleHQiOiAiRW5hYmxlIHdlYnNvY2tldCBvbiB0aGUgcHJveGllZCByZXNvdXJjZS4ifV0sICJjb250YWluZXJDbGFzcyI6ICJ6LTIxIn0sICJSRVZFUlNFX1BST1hZX0hFQURFUlMiOiB7ImNvbnRleHQiOiAibXVsdGlzaXRlIiwgImRlZmF1bHQiOiAiIiwgImhlbHAiOiAiTGlzdCBvZiBIVFRQIGhlYWRlcnMgdG8gc2VuZCB0byBwcm94aWVkIHJlc291cmNlIHNlcGFyYXRlZCB3aXRoIHNlbWljb2xvbnMgKHZhbHVlcyBmb3IgcHJveHlfc2V0X2hlYWRlciBkaXJlY3RpdmUpLiIsICJpZCI6ICJyZXZlcnNlLXByb3h5LWhlYWRlcnMiLCAibGFiZWwiOiAiUmV2ZXJzZSBwcm94eSBoZWFkZXJzIiwgInJlZ2V4IjogIl4oPyFbOyBdKSg7PyA/KFtcXHdcXC1dKykoPyEuKlxcMiApIFteO10rKSokIiwgInR5cGUiOiAidGV4dCIsICJtdWx0aXBsZSI6ICJyZXZlcnNlLXByb3h5IiwgInBhdHRlcm4iOiAiXig/IVs7IF0pKDs/ID8oW1xcd1xcLV0rKSg/IS4qXFwyICkgW147XSspKiQiLCAiaW5wVHlwZSI6ICJpbnB1dCIsICJuYW1lIjogIlJldmVyc2UgcHJveHkgaGVhZGVycyIsICJjb2x1bW5zIjogeyJwYyI6IDQsICJ0YWJsZXQiOiA2LCAibW9iaWxlIjogMTJ9LCAiZGlzYWJsZWQiOiBmYWxzZSwgInZhbHVlIjogIiIsICJwcmV2X3ZhbHVlIjogIiIsICJwb3BvdmVycyI6IFt7Imljb25OYW1lIjogImRpc2siLCAidGV4dCI6ICJpbnBfcG9wb3Zlcl9tdWx0aXNpdGUifSwgeyJpY29uTmFtZSI6ICJpbmZvIiwgInRleHQiOiAiTGlzdCBvZiBIVFRQIGhlYWRlcnMgdG8gc2VuZCB0byBwcm94aWVkIHJlc291cmNlIHNlcGFyYXRlZCB3aXRoIHNlbWljb2xvbnMgKHZhbHVlcyBmb3IgcHJveHlfc2V0X2hlYWRlciBkaXJlY3RpdmUpLiJ9XSwgImNvbnRhaW5lckNsYXNzIjogInotMjAifSwgIlJFVkVSU0VfUFJPWFlfSEVBREVSU19DTElFTlQiOiB7ImNvbnRleHQiOiAibXVsdGlzaXRlIiwgImRlZmF1bHQiOiAiIiwgImhlbHAiOiAiTGlzdCBvZiBIVFRQIGhlYWRlcnMgdG8gc2VuZCB0byBjbGllbnQgc2VwYXJhdGVkIHdpdGggc2VtaWNvbG9ucyAodmFsdWVzIGZvciBhZGRfaGVhZGVyIGRpcmVjdGl2ZSkuIiwgImlkIjogInJldmVyc2UtcHJveHktaGVhZGVycy1jbGllbnQiLCAibGFiZWwiOiAiUmV2ZXJzZSBwcm94eSBoZWFkZXJzLWNsaWVudCIsICJyZWdleCI6ICJeKD8hWzsgXSkoOz8gPyhbXFx3XFwtXSspKD8hLipcXDIgKSBbXjtdKykqJCIsICJ0eXBlIjogInRleHQiLCAibXVsdGlwbGUiOiAicmV2ZXJzZS1wcm94eSIsICJwYXR0ZXJuIjogIl4oPyFbOyBdKSg7PyA/KFtcXHdcXC1dKykoPyEuKlxcMiApIFteO10rKSokIiwgImlucFR5cGUiOiAiaW5wdXQiLCAibmFtZSI6ICJSZXZlcnNlIHByb3h5IGhlYWRlcnMtY2xpZW50IiwgImNvbHVtbnMiOiB7InBjIjogNCwgInRhYmxldCI6IDYsICJtb2JpbGUiOiAxMn0sICJkaXNhYmxlZCI6IGZhbHNlLCAidmFsdWUiOiAiIiwgInByZXZfdmFsdWUiOiAiIiwgInBvcG92ZXJzIjogW3siaWNvbk5hbWUiOiAiZGlzayIsICJ0ZXh0IjogImlucF9wb3BvdmVyX211bHRpc2l0ZSJ9LCB7Imljb25OYW1lIjogImluZm8iLCAidGV4dCI6ICJMaXN0IG9mIEhUVFAgaGVhZGVycyB0byBzZW5kIHRvIGNsaWVudCBzZXBhcmF0ZWQgd2l0aCBzZW1pY29sb25zICh2YWx1ZXMgZm9yIGFkZF9oZWFkZXIgZGlyZWN0aXZlKS4ifV0sICJjb250YWluZXJDbGFzcyI6ICJ6LTE5In0sICJSRVZFUlNFX1BST1hZX0JVRkZFUklORyI6IHsiY29udGV4dCI6ICJtdWx0aXNpdGUiLCAiZGVmYXVsdCI6ICJ5ZXMiLCAiaGVscCI6ICJFbmFibGUgb3IgZGlzYWJsZSBidWZmZXJpbmcgb2YgcmVzcG9uc2VzIGZyb20gcHJveGllZCByZXNvdXJjZS4iLCAiaWQiOiAicmV2ZXJzZS1wcm94eS1idWZmZXJpbmciLCAibGFiZWwiOiAiUmV2ZXJzZSBwcm94eSBidWZmZXJpbmciLCAicmVnZXgiOiAiXih5ZXN8bm8pJCIsICJ0eXBlIjogImNoZWNrIiwgIm11bHRpcGxlIjogInJldmVyc2UtcHJveHkiLCAicGF0dGVybiI6ICJeKHllc3xubykkIiwgImlucFR5cGUiOiAiY2hlY2tib3giLCAibmFtZSI6ICJSZXZlcnNlIHByb3h5IGJ1ZmZlcmluZyIsICJjb2x1bW5zIjogeyJwYyI6IDQsICJ0YWJsZXQiOiA2LCAibW9iaWxlIjogMTJ9LCAiZGlzYWJsZWQiOiBmYWxzZSwgInZhbHVlIjogInllcyIsICJwcmV2X3ZhbHVlIjogInllcyIsICJwb3BvdmVycyI6IFt7Imljb25OYW1lIjogImRpc2siLCAidGV4dCI6ICJpbnBfcG9wb3Zlcl9tdWx0aXNpdGUifSwgeyJpY29uTmFtZSI6ICJpbmZvIiwgInRleHQiOiAiRW5hYmxlIG9yIGRpc2FibGUgYnVmZmVyaW5nIG9mIHJlc3BvbnNlcyBmcm9tIHByb3hpZWQgcmVzb3VyY2UuIn1dLCAiY29udGFpbmVyQ2xhc3MiOiAiei0xOCJ9LCAiUkVWRVJTRV9QUk9YWV9LRUVQQUxJVkUiOiB7ImNvbnRleHQiOiAibXVsdGlzaXRlIiwgImRlZmF1bHQiOiAibm8iLCAiaGVscCI6ICJFbmFibGUgb3IgZGlzYWJsZSBrZWVwYWxpdmUgY29ubmVjdGlvbnMgd2l0aCB0aGUgcHJveGllZCByZXNvdXJjZS4iLCAiaWQiOiAicmV2ZXJzZS1wcm94eS1rZWVwYWxpdmUiLCAibGFiZWwiOiAiUmV2ZXJzZSBwcm94eSBrZWVwYWxpdmUiLCAicmVnZXgiOiAiXih5ZXN8bm8pJCIsICJ0eXBlIjogImNoZWNrIiwgIm11bHRpcGxlIjogInJldmVyc2UtcHJveHkiLCAicGF0dGVybiI6ICJeKHllc3xubykkIiwgImlucFR5cGUiOiAiY2hlY2tib3giLCAibmFtZSI6ICJSZXZlcnNlIHByb3h5IGtlZXBhbGl2ZSIsICJjb2x1bW5zIjogeyJwYyI6IDQsICJ0YWJsZXQiOiA2LCAibW9iaWxlIjogMTJ9LCAiZGlzYWJsZWQiOiBmYWxzZSwgInZhbHVlIjogIm5vIiwgInByZXZfdmFsdWUiOiAibm8iLCAicG9wb3ZlcnMiOiBbeyJpY29uTmFtZSI6ICJkaXNrIiwgInRleHQiOiAiaW5wX3BvcG92ZXJfbXVsdGlzaXRlIn0sIHsiaWNvbk5hbWUiOiAiaW5mbyIsICJ0ZXh0IjogIkVuYWJsZSBvciBkaXNhYmxlIGtlZXBhbGl2ZSBjb25uZWN0aW9ucyB3aXRoIHRoZSBwcm94aWVkIHJlc291cmNlLiJ9XSwgImNvbnRhaW5lckNsYXNzIjogInotMTcifSwgIlJFVkVSU0VfUFJPWFlfQVVUSF9SRVFVRVNUIjogeyJjb250ZXh0IjogIm11bHRpc2l0ZSIsICJkZWZhdWx0IjogIiIsICJoZWxwIjogIkVuYWJsZSBhdXRoZW50aWNhdGlvbiB1c2luZyBhbiBleHRlcm5hbCBwcm92aWRlciAodmFsdWUgb2YgYXV0aF9yZXF1ZXN0IGRpcmVjdGl2ZSkuIiwgImlkIjogInJldmVyc2UtcHJveHktYXV0aC1yZXF1ZXN0IiwgImxhYmVsIjogIlJldmVyc2UgcHJveHkgYXV0aCByZXF1ZXN0IiwgInJlZ2V4IjogIl4oXFwvW1xcd1xcXS5+OlxcLz8jXFxbQCEkXFwmJ1xcKFxcKSorLDs9XFwtXSp8b2ZmKT8kIiwgInR5cGUiOiAidGV4dCIsICJtdWx0aXBsZSI6ICJyZXZlcnNlLXByb3h5IiwgInBhdHRlcm4iOiAiXihcXC9bXFx3XFxdLn46XFwvPyNcXFtAISRcXCYnXFwoXFwpKissOz1cXC1dKnxvZmYpPyQiLCAiaW5wVHlwZSI6ICJpbnB1dCIsICJuYW1lIjogIlJldmVyc2UgcHJveHkgYXV0aCByZXF1ZXN0IiwgImNvbHVtbnMiOiB7InBjIjogNCwgInRhYmxldCI6IDYsICJtb2JpbGUiOiAxMn0sICJkaXNhYmxlZCI6IGZhbHNlLCAidmFsdWUiOiAiIiwgInByZXZfdmFsdWUiOiAiIiwgInBvcG92ZXJzIjogW3siaWNvbk5hbWUiOiAiZGlzayIsICJ0ZXh0IjogImlucF9wb3BvdmVyX211bHRpc2l0ZSJ9LCB7Imljb25OYW1lIjogImluZm8iLCAidGV4dCI6ICJFbmFibGUgYXV0aGVudGljYXRpb24gdXNpbmcgYW4gZXh0ZXJuYWwgcHJvdmlkZXIgKHZhbHVlIG9mIGF1dGhfcmVxdWVzdCBkaXJlY3RpdmUpLiJ9XSwgImNvbnRhaW5lckNsYXNzIjogInotMTYifSwgIlJFVkVSU0VfUFJPWFlfQVVUSF9SRVFVRVNUX1NJR05JTl9VUkwiOiB7ImNvbnRleHQiOiAibXVsdGlzaXRlIiwgImRlZmF1bHQiOiAiIiwgImhlbHAiOiAiUmVkaXJlY3QgY2xpZW50cyB0byBzaWduLWluIFVSTCB3aGVuIHVzaW5nIFJFVkVSU0VfUFJPWFlfQVVUSF9SRVFVRVNUICh1c2VkIHdoZW4gYXV0aF9yZXF1ZXN0IGNhbGwgcmV0dXJuZWQgNDAxKS4iLCAiaWQiOiAicmV2ZXJzZS1wcm94eS1hdXRoLXJlcXVlc3Qtc2lnbmluLXVybCIsICJsYWJlbCI6ICJBdXRoIHJlcXVlc3Qgc2lnbmluIFVSTCIsICJyZWdleCI6ICJeKGh0dHBzPzpcXC9cXC9bXFwtXFx3QDolLit+Iz1dK1tcXC1cXHdcXChcXCkhQDolKy5+Iz8mXFwvPSRdKik/JCIsICJ0eXBlIjogInRleHQiLCAibXVsdGlwbGUiOiAicmV2ZXJzZS1wcm94eSIsICJwYXR0ZXJuIjogIl4oaHR0cHM/OlxcL1xcL1tcXC1cXHdAOiUuK34jPV0rW1xcLVxcd1xcKFxcKSFAOiUrLn4jPyZcXC89JF0qKT8kIiwgImlucFR5cGUiOiAiaW5wdXQiLCAibmFtZSI6ICJBdXRoIHJlcXVlc3Qgc2lnbmluIFVSTCIsICJjb2x1bW5zIjogeyJwYyI6IDQsICJ0YWJsZXQiOiA2LCAibW9iaWxlIjogMTJ9LCAiZGlzYWJsZWQiOiBmYWxzZSwgInZhbHVlIjogIiIsICJwcmV2X3ZhbHVlIjogIiIsICJwb3BvdmVycyI6IFt7Imljb25OYW1lIjogImRpc2siLCAidGV4dCI6ICJpbnBfcG9wb3Zlcl9tdWx0aXNpdGUifSwgeyJpY29uTmFtZSI6ICJpbmZvIiwgInRleHQiOiAiUmVkaXJlY3QgY2xpZW50cyB0byBzaWduLWluIFVSTCB3aGVuIHVzaW5nIFJFVkVSU0VfUFJPWFlfQVVUSF9SRVFVRVNUICh1c2VkIHdoZW4gYXV0aF9yZXF1ZXN0IGNhbGwgcmV0dXJuZWQgNDAxKS4ifV0sICJjb250YWluZXJDbGFzcyI6ICJ6LTE1In0sICJSRVZFUlNFX1BST1hZX0FVVEhfUkVRVUVTVF9TRVQiOiB7ImNvbnRleHQiOiAibXVsdGlzaXRlIiwgImRlZmF1bHQiOiAiIiwgImhlbHAiOiAiTGlzdCBvZiB2YXJpYWJsZXMgdG8gc2V0IGZyb20gdGhlIGF1dGhlbnRpY2F0aW9uIHByb3ZpZGVyLCBzZXBhcmF0ZWQgd2l0aCBzZW1pY29sb25zICh2YWx1ZXMgb2YgYXV0aF9yZXF1ZXN0X3NldCBkaXJlY3RpdmVzKS4iLCAiaWQiOiAicmV2ZXJzZS1wcm94eS1hdXRoLXJlcXVlc3Qtc2V0IiwgImxhYmVsIjogIlJldmVyc2UgcHJveHkgYXV0aCByZXF1ZXN0IHNldCIsICJyZWdleCI6ICJeKD8hIDspKDs/ID8oXFwkW2Etel9cXC1dKykoPyEuKlxcMiApIFteO10rKSokIiwgInR5cGUiOiAidGV4dCIsICJtdWx0aXBsZSI6ICJyZXZlcnNlLXByb3h5IiwgInBhdHRlcm4iOiAiXig/ISA7KSg7PyA/KFxcJFthLXpfXFwtXSspKD8hLipcXDIgKSBbXjtdKykqJCIsICJpbnBUeXBlIjogImlucHV0IiwgIm5hbWUiOiAiUmV2ZXJzZSBwcm94eSBhdXRoIHJlcXVlc3Qgc2V0IiwgImNvbHVtbnMiOiB7InBjIjogNCwgInRhYmxldCI6IDYsICJtb2JpbGUiOiAxMn0sICJkaXNhYmxlZCI6IGZhbHNlLCAidmFsdWUiOiAiIiwgInByZXZfdmFsdWUiOiAiIiwgInBvcG92ZXJzIjogW3siaWNvbk5hbWUiOiAiZGlzayIsICJ0ZXh0IjogImlucF9wb3BvdmVyX211bHRpc2l0ZSJ9LCB7Imljb25OYW1lIjogImluZm8iLCAidGV4dCI6ICJMaXN0IG9mIHZhcmlhYmxlcyB0byBzZXQgZnJvbSB0aGUgYXV0aGVudGljYXRpb24gcHJvdmlkZXIsIHNlcGFyYXRlZCB3aXRoIHNlbWljb2xvbnMgKHZhbHVlcyBvZiBhdXRoX3JlcXVlc3Rfc2V0IGRpcmVjdGl2ZXMpLiJ9XSwgImNvbnRhaW5lckNsYXNzIjogInotMTQifSwgIlJFVkVSU0VfUFJPWFlfQ09OTkVDVF9USU1FT1VUIjogeyJjb250ZXh0IjogIm11bHRpc2l0ZSIsICJkZWZhdWx0IjogIjYwcyIsICJoZWxwIjogIlRpbWVvdXQgd2hlbiBjb25uZWN0aW5nIHRvIHRoZSBwcm94aWVkIHJlc291cmNlLiIsICJpZCI6ICJyZXZlcnNlLXByb3h5LWNvbm5lY3QtdGltZW91dCIsICJsYWJlbCI6ICJSZXZlcnNlIHByb3h5IGNvbm5lY3QgdGltZW91dCIsICJyZWdleCI6ICJeXFxkKyhtcz98W3NoZHdNeV0pJCIsICJ0eXBlIjogInRleHQiLCAibXVsdGlwbGUiOiAicmV2ZXJzZS1wcm94eSIsICJwYXR0ZXJuIjogIl5cXGQrKG1zP3xbc2hkd015XSkkIiwgImlucFR5cGUiOiAiaW5wdXQiLCAibmFtZSI6ICJSZXZlcnNlIHByb3h5IGNvbm5lY3QgdGltZW91dCIsICJjb2x1bW5zIjogeyJwYyI6IDQsICJ0YWJsZXQiOiA2LCAibW9iaWxlIjogMTJ9LCAiZGlzYWJsZWQiOiBmYWxzZSwgInZhbHVlIjogIjYwcyIsICJwcmV2X3ZhbHVlIjogIjYwcyIsICJwb3BvdmVycyI6IFt7Imljb25OYW1lIjogImRpc2siLCAidGV4dCI6ICJpbnBfcG9wb3Zlcl9tdWx0aXNpdGUifSwgeyJpY29uTmFtZSI6ICJpbmZvIiwgInRleHQiOiAiVGltZW91dCB3aGVuIGNvbm5lY3RpbmcgdG8gdGhlIHByb3hpZWQgcmVzb3VyY2UuIn1dLCAiY29udGFpbmVyQ2xhc3MiOiAiei0xMyJ9LCAiUkVWRVJTRV9QUk9YWV9SRUFEX1RJTUVPVVQiOiB7ImNvbnRleHQiOiAibXVsdGlzaXRlIiwgImRlZmF1bHQiOiAiNjBzIiwgImhlbHAiOiAiVGltZW91dCB3aGVuIHJlYWRpbmcgZnJvbSB0aGUgcHJveGllZCByZXNvdXJjZS4iLCAiaWQiOiAicmV2ZXJzZS1wcm94eS1yZWFkLXRpbWVvdXQiLCAibGFiZWwiOiAiUmV2ZXJzZSBwcm94eSByZWFkIHRpbWVvdXQiLCAicmVnZXgiOiAiXlxcZCsobXM/fFtzaGR3TXldKSQiLCAidHlwZSI6ICJ0ZXh0IiwgIm11bHRpcGxlIjogInJldmVyc2UtcHJveHkiLCAicGF0dGVybiI6ICJeXFxkKyhtcz98W3NoZHdNeV0pJCIsICJpbnBUeXBlIjogImlucHV0IiwgIm5hbWUiOiAiUmV2ZXJzZSBwcm94eSByZWFkIHRpbWVvdXQiLCAiY29sdW1ucyI6IHsicGMiOiA0LCAidGFibGV0IjogNiwgIm1vYmlsZSI6IDEyfSwgImRpc2FibGVkIjogZmFsc2UsICJ2YWx1ZSI6ICI2MHMiLCAicHJldl92YWx1ZSI6ICI2MHMiLCAicG9wb3ZlcnMiOiBbeyJpY29uTmFtZSI6ICJkaXNrIiwgInRleHQiOiAiaW5wX3BvcG92ZXJfbXVsdGlzaXRlIn0sIHsiaWNvbk5hbWUiOiAiaW5mbyIsICJ0ZXh0IjogIlRpbWVvdXQgd2hlbiByZWFkaW5nIGZyb20gdGhlIHByb3hpZWQgcmVzb3VyY2UuIn1dLCAiY29udGFpbmVyQ2xhc3MiOiAiei0xMiJ9LCAiUkVWRVJTRV9QUk9YWV9TRU5EX1RJTUVPVVQiOiB7ImNvbnRleHQiOiAibXVsdGlzaXRlIiwgImRlZmF1bHQiOiAiNjBzIiwgImhlbHAiOiAiVGltZW91dCB3aGVuIHNlbmRpbmcgdG8gdGhlIHByb3hpZWQgcmVzb3VyY2UuIiwgImlkIjogInJldmVyc2UtcHJveHktc2VuZC10aW1lb3V0IiwgImxhYmVsIjogIlJldmVyc2UgcHJveHkgc2VuZCB0aW1lb3V0IiwgInJlZ2V4IjogIl5cXGQrKG1zP3xbc2hkd015XSkkIiwgInR5cGUiOiAidGV4dCIsICJtdWx0aXBsZSI6ICJyZXZlcnNlLXByb3h5IiwgInBhdHRlcm4iOiAiXlxcZCsobXM/fFtzaGR3TXldKSQiLCAiaW5wVHlwZSI6ICJpbnB1dCIsICJuYW1lIjogIlJldmVyc2UgcHJveHkgc2VuZCB0aW1lb3V0IiwgImNvbHVtbnMiOiB7InBjIjogNCwgInRhYmxldCI6IDYsICJtb2JpbGUiOiAxMn0sICJkaXNhYmxlZCI6IGZhbHNlLCAidmFsdWUiOiAiNjBzIiwgInByZXZfdmFsdWUiOiAiNjBzIiwgInBvcG92ZXJzIjogW3siaWNvbk5hbWUiOiAiZGlzayIsICJ0ZXh0IjogImlucF9wb3BvdmVyX211bHRpc2l0ZSJ9LCB7Imljb25OYW1lIjogImluZm8iLCAidGV4dCI6ICJUaW1lb3V0IHdoZW4gc2VuZGluZyB0byB0aGUgcHJveGllZCByZXNvdXJjZS4ifV0sICJjb250YWluZXJDbGFzcyI6ICJ6LTExIn0sICJSRVZFUlNFX1BST1hZX0lOQ0xVREVTIjogeyJjb250ZXh0IjogIm11bHRpc2l0ZSIsICJkZWZhdWx0IjogIiIsICJoZWxwIjogIkFkZGl0aW9uYWwgY29uZmlndXJhdGlvbiB0byBpbmNsdWRlIGluIHRoZSBsb2NhdGlvbiBibG9jaywgc2VwYXJhdGVkIHdpdGggc3BhY2VzLiIsICJpZCI6ICJyZXZlcnNlLXByb3h5LWluY2x1ZGVzIiwgImxhYmVsIjogIlJldmVyc2UgcHJveHkgaW5jbHVkZXMiLCAicmVnZXgiOiAiXig/ISApKCA/KFxcdyspKD8hLipcXGJcXDJcXGIpKSokIiwgInR5cGUiOiAidGV4dCIsICJtdWx0aXBsZSI6ICJyZXZlcnNlLXByb3h5IiwgInBhdHRlcm4iOiAiXig/ISApKCA/KFxcdyspKD8hLipcXGJcXDJcXGIpKSokIiwgImlucFR5cGUiOiAiaW5wdXQiLCAibmFtZSI6ICJSZXZlcnNlIHByb3h5IGluY2x1ZGVzIiwgImNvbHVtbnMiOiB7InBjIjogNCwgInRhYmxldCI6IDYsICJtb2JpbGUiOiAxMn0sICJkaXNhYmxlZCI6IGZhbHNlLCAidmFsdWUiOiAiIiwgInByZXZfdmFsdWUiOiAiIiwgInBvcG92ZXJzIjogW3siaWNvbk5hbWUiOiAiZGlzayIsICJ0ZXh0IjogImlucF9wb3BvdmVyX211bHRpc2l0ZSJ9LCB7Imljb25OYW1lIjogImluZm8iLCAidGV4dCI6ICJBZGRpdGlvbmFsIGNvbmZpZ3VyYXRpb24gdG8gaW5jbHVkZSBpbiB0aGUgbG9jYXRpb24gYmxvY2ssIHNlcGFyYXRlZCB3aXRoIHNwYWNlcy4ifV0sICJjb250YWluZXJDbGFzcyI6ICJ6LTEwIn19fSwgIm11bHRpcGxlcyI6IHsicmV2ZXJzZS1wcm94eSI6IHsiMCI6IHsiUkVWRVJTRV9QUk9YWV9IT1NUIjogeyJjb250ZXh0IjogIm11bHRpc2l0ZSIsICJkZWZhdWx0IjogIiIsICJoZWxwIjogIkZ1bGwgVVJMIG9mIHRoZSBwcm94aWVkIHJlc291cmNlIChwcm94eV9wYXNzKS4iLCAiaWQiOiAicmV2ZXJzZS1wcm94eS1ob3N0IiwgImxhYmVsIjogIlJldmVyc2UgcHJveHkgaG9zdCIsICJyZWdleCI6ICJeLiokIiwgInR5cGUiOiAidGV4dCIsICJtdWx0aXBsZSI6ICJyZXZlcnNlLXByb3h5IiwgInBhdHRlcm4iOiAiXi4qJCIsICJpbnBUeXBlIjogImlucHV0IiwgIm5hbWUiOiAiUmV2ZXJzZSBwcm94eSBob3N0IiwgImNvbHVtbnMiOiB7InBjIjogNCwgInRhYmxldCI6IDYsICJtb2JpbGUiOiAxMn0sICJkaXNhYmxlZCI6IHRydWUsICJ2YWx1ZSI6ICJodHRwOi8vYXBwMTo4MDgwIiwgInByZXZfdmFsdWUiOiAiaHR0cDovL2FwcDE6ODA4MCIsICJwb3BvdmVycyI6IFt7Imljb25OYW1lIjogInRyZXNwYXNzIiwgInRleHQiOiAiaW5wX3BvcG92ZXJfbWV0aG9kX2Rpc2FibGVkIn0sIHsiaWNvbk5hbWUiOiAidHJlc3Bhc3MiLCAidGV4dCI6ICJpbnBfcG9wb3Zlcl9tZXRob2RfZGlzYWJsZWQifSwgeyJpY29uTmFtZSI6ICJkaXNrIiwgInRleHQiOiAiaW5wX3BvcG92ZXJfbXVsdGlzaXRlIn0sIHsiaWNvbk5hbWUiOiAiaW5mbyIsICJ0ZXh0IjogIkZ1bGwgVVJMIG9mIHRoZSBwcm94aWVkIHJlc291cmNlIChwcm94eV9wYXNzKS4ifV0sICJjb250YWluZXJDbGFzcyI6ICJ6LTIzIiwgIm1ldGhvZCI6ICJzY2hlZHVsZXIifSwgIlJFVkVSU0VfUFJPWFlfVVJMIjogeyJjb250ZXh0IjogIm11bHRpc2l0ZSIsICJkZWZhdWx0IjogIi8iLCAiaGVscCI6ICJMb2NhdGlvbiBVUkwgdGhhdCB3aWxsIGJlIHByb3hpZWQuIiwgImlkIjogInJldmVyc2UtcHJveHktdXJsIiwgImxhYmVsIjogIlJldmVyc2UgcHJveHkgdXJsIiwgInJlZ2V4IjogIl4uKiQiLCAidHlwZSI6ICJ0ZXh0IiwgIm11bHRpcGxlIjogInJldmVyc2UtcHJveHkiLCAicGF0dGVybiI6ICJeLiokIiwgImlucFR5cGUiOiAiaW5wdXQiLCAibmFtZSI6ICJSZXZlcnNlIHByb3h5IHVybCIsICJjb2x1bW5zIjogeyJwYyI6IDQsICJ0YWJsZXQiOiA2LCAibW9iaWxlIjogMTJ9LCAiZGlzYWJsZWQiOiBmYWxzZSwgInZhbHVlIjogIi8iLCAicHJldl92YWx1ZSI6ICIvIiwgInBvcG92ZXJzIjogW3siaWNvbk5hbWUiOiAiZGlzayIsICJ0ZXh0IjogImlucF9wb3BvdmVyX211bHRpc2l0ZSJ9LCB7Imljb25OYW1lIjogImluZm8iLCAidGV4dCI6ICJMb2NhdGlvbiBVUkwgdGhhdCB3aWxsIGJlIHByb3hpZWQuIn1dLCAiY29udGFpbmVyQ2xhc3MiOiAiei0yMiIsICJtZXRob2QiOiAiZGVmYXVsdCJ9LCAiUkVWRVJTRV9QUk9YWV9XUyI6IHsiY29udGV4dCI6ICJtdWx0aXNpdGUiLCAiZGVmYXVsdCI6ICJubyIsICJoZWxwIjogIkVuYWJsZSB3ZWJzb2NrZXQgb24gdGhlIHByb3hpZWQgcmVzb3VyY2UuIiwgImlkIjogInJldmVyc2UtcHJveHktd3MiLCAibGFiZWwiOiAiUmV2ZXJzZSBwcm94eSBXUyIsICJyZWdleCI6ICJeKHllc3xubykkIiwgInR5cGUiOiAiY2hlY2siLCAibXVsdGlwbGUiOiAicmV2ZXJzZS1wcm94eSIsICJwYXR0ZXJuIjogIl4oeWVzfG5vKSQiLCAiaW5wVHlwZSI6ICJjaGVja2JveCIsICJuYW1lIjogIlJldmVyc2UgcHJveHkgV1MiLCAiY29sdW1ucyI6IHsicGMiOiA0LCAidGFibGV0IjogNiwgIm1vYmlsZSI6IDEyfSwgImRpc2FibGVkIjogZmFsc2UsICJ2YWx1ZSI6ICJubyIsICJwcmV2X3ZhbHVlIjogIm5vIiwgInBvcG92ZXJzIjogW3siaWNvbk5hbWUiOiAiZGlzayIsICJ0ZXh0IjogImlucF9wb3BvdmVyX211bHRpc2l0ZSJ9LCB7Imljb25OYW1lIjogImluZm8iLCAidGV4dCI6ICJFbmFibGUgd2Vic29ja2V0IG9uIHRoZSBwcm94aWVkIHJlc291cmNlLiJ9XSwgImNvbnRhaW5lckNsYXNzIjogInotMjEiLCAibWV0aG9kIjogImRlZmF1bHQifSwgIlJFVkVSU0VfUFJPWFlfSEVBREVSUyI6IHsiY29udGV4dCI6ICJtdWx0aXNpdGUiLCAiZGVmYXVsdCI6ICIiLCAiaGVscCI6ICJMaXN0IG9mIEhUVFAgaGVhZGVycyB0byBzZW5kIHRvIHByb3hpZWQgcmVzb3VyY2Ugc2VwYXJhdGVkIHdpdGggc2VtaWNvbG9ucyAodmFsdWVzIGZvciBwcm94eV9zZXRfaGVhZGVyIGRpcmVjdGl2ZSkuIiwgImlkIjogInJldmVyc2UtcHJveHktaGVhZGVycyIsICJsYWJlbCI6ICJSZXZlcnNlIHByb3h5IGhlYWRlcnMiLCAicmVnZXgiOiAiXig/IVs7IF0pKDs/ID8oW1xcd1xcLV0rKSg/IS4qXFwyICkgW147XSspKiQiLCAidHlwZSI6ICJ0ZXh0IiwgIm11bHRpcGxlIjogInJldmVyc2UtcHJveHkiLCAicGF0dGVybiI6ICJeKD8hWzsgXSkoOz8gPyhbXFx3XFwtXSspKD8hLipcXDIgKSBbXjtdKykqJCIsICJpbnBUeXBlIjogImlucHV0IiwgIm5hbWUiOiAiUmV2ZXJzZSBwcm94eSBoZWFkZXJzIiwgImNvbHVtbnMiOiB7InBjIjogNCwgInRhYmxldCI6IDYsICJtb2JpbGUiOiAxMn0sICJkaXNhYmxlZCI6IGZhbHNlLCAidmFsdWUiOiAiIiwgInByZXZfdmFsdWUiOiAiIiwgInBvcG92ZXJzIjogW3siaWNvbk5hbWUiOiAiZGlzayIsICJ0ZXh0IjogImlucF9wb3BvdmVyX211bHRpc2l0ZSJ9LCB7Imljb25OYW1lIjogImluZm8iLCAidGV4dCI6ICJMaXN0IG9mIEhUVFAgaGVhZGVycyB0byBzZW5kIHRvIHByb3hpZWQgcmVzb3VyY2Ugc2VwYXJhdGVkIHdpdGggc2VtaWNvbG9ucyAodmFsdWVzIGZvciBwcm94eV9zZXRfaGVhZGVyIGRpcmVjdGl2ZSkuIn1dLCAiY29udGFpbmVyQ2xhc3MiOiAiei0yMCIsICJtZXRob2QiOiAiZGVmYXVsdCJ9LCAiUkVWRVJTRV9QUk9YWV9IRUFERVJTX0NMSUVOVCI6IHsiY29udGV4dCI6ICJtdWx0aXNpdGUiLCAiZGVmYXVsdCI6ICIiLCAiaGVscCI6ICJMaXN0IG9mIEhUVFAgaGVhZGVycyB0byBzZW5kIHRvIGNsaWVudCBzZXBhcmF0ZWQgd2l0aCBzZW1pY29sb25zICh2YWx1ZXMgZm9yIGFkZF9oZWFkZXIgZGlyZWN0aXZlKS4iLCAiaWQiOiAicmV2ZXJzZS1wcm94eS1oZWFkZXJzLWNsaWVudCIsICJsYWJlbCI6ICJSZXZlcnNlIHByb3h5IGhlYWRlcnMtY2xpZW50IiwgInJlZ2V4IjogIl4oPyFbOyBdKSg7PyA/KFtcXHdcXC1dKykoPyEuKlxcMiApIFteO10rKSokIiwgInR5cGUiOiAidGV4dCIsICJtdWx0aXBsZSI6ICJyZXZlcnNlLXByb3h5IiwgInBhdHRlcm4iOiAiXig/IVs7IF0pKDs/ID8oW1xcd1xcLV0rKSg/IS4qXFwyICkgW147XSspKiQiLCAiaW5wVHlwZSI6ICJpbnB1dCIsICJuYW1lIjogIlJldmVyc2UgcHJveHkgaGVhZGVycy1jbGllbnQiLCAiY29sdW1ucyI6IHsicGMiOiA0LCAidGFibGV0IjogNiwgIm1vYmlsZSI6IDEyfSwgImRpc2FibGVkIjogZmFsc2UsICJ2YWx1ZSI6ICIiLCAicHJldl92YWx1ZSI6ICIiLCAicG9wb3ZlcnMiOiBbeyJpY29uTmFtZSI6ICJkaXNrIiwgInRleHQiOiAiaW5wX3BvcG92ZXJfbXVsdGlzaXRlIn0sIHsiaWNvbk5hbWUiOiAiaW5mbyIsICJ0ZXh0IjogIkxpc3Qgb2YgSFRUUCBoZWFkZXJzIHRvIHNlbmQgdG8gY2xpZW50IHNlcGFyYXRlZCB3aXRoIHNlbWljb2xvbnMgKHZhbHVlcyBmb3IgYWRkX2hlYWRlciBkaXJlY3RpdmUpLiJ9XSwgImNvbnRhaW5lckNsYXNzIjogInotMTkiLCAibWV0aG9kIjogImRlZmF1bHQifSwgIlJFVkVSU0VfUFJPWFlfQlVGRkVSSU5HIjogeyJjb250ZXh0IjogIm11bHRpc2l0ZSIsICJkZWZhdWx0IjogInllcyIsICJoZWxwIjogIkVuYWJsZSBvciBkaXNhYmxlIGJ1ZmZlcmluZyBvZiByZXNwb25zZXMgZnJvbSBwcm94aWVkIHJlc291cmNlLiIsICJpZCI6ICJyZXZlcnNlLXByb3h5LWJ1ZmZlcmluZyIsICJsYWJlbCI6ICJSZXZlcnNlIHByb3h5IGJ1ZmZlcmluZyIsICJyZWdleCI6ICJeKHllc3xubykkIiwgInR5cGUiOiAiY2hlY2siLCAibXVsdGlwbGUiOiAicmV2ZXJzZS1wcm94eSIsICJwYXR0ZXJuIjogIl4oeWVzfG5vKSQiLCAiaW5wVHlwZSI6ICJjaGVja2JveCIsICJuYW1lIjogIlJldmVyc2UgcHJveHkgYnVmZmVyaW5nIiwgImNvbHVtbnMiOiB7InBjIjogNCwgInRhYmxldCI6IDYsICJtb2JpbGUiOiAxMn0sICJkaXNhYmxlZCI6IGZhbHNlLCAidmFsdWUiOiAieWVzIiwgInByZXZfdmFsdWUiOiAieWVzIiwgInBvcG92ZXJzIjogW3siaWNvbk5hbWUiOiAiZGlzayIsICJ0ZXh0IjogImlucF9wb3BvdmVyX211bHRpc2l0ZSJ9LCB7Imljb25OYW1lIjogImluZm8iLCAidGV4dCI6ICJFbmFibGUgb3IgZGlzYWJsZSBidWZmZXJpbmcgb2YgcmVzcG9uc2VzIGZyb20gcHJveGllZCByZXNvdXJjZS4ifV0sICJjb250YWluZXJDbGFzcyI6ICJ6LTE4IiwgIm1ldGhvZCI6ICJkZWZhdWx0In0sICJSRVZFUlNFX1BST1hZX0tFRVBBTElWRSI6IHsiY29udGV4dCI6ICJtdWx0aXNpdGUiLCAiZGVmYXVsdCI6ICJubyIsICJoZWxwIjogIkVuYWJsZSBvciBkaXNhYmxlIGtlZXBhbGl2ZSBjb25uZWN0aW9ucyB3aXRoIHRoZSBwcm94aWVkIHJlc291cmNlLiIsICJpZCI6ICJyZXZlcnNlLXByb3h5LWtlZXBhbGl2ZSIsICJsYWJlbCI6ICJSZXZlcnNlIHByb3h5IGtlZXBhbGl2ZSIsICJyZWdleCI6ICJeKHllc3xubykkIiwgInR5cGUiOiAiY2hlY2siLCAibXVsdGlwbGUiOiAicmV2ZXJzZS1wcm94eSIsICJwYXR0ZXJuIjogIl4oeWVzfG5vKSQiLCAiaW5wVHlwZSI6ICJjaGVja2JveCIsICJuYW1lIjogIlJldmVyc2UgcHJveHkga2VlcGFsaXZlIiwgImNvbHVtbnMiOiB7InBjIjogNCwgInRhYmxldCI6IDYsICJtb2JpbGUiOiAxMn0sICJkaXNhYmxlZCI6IGZhbHNlLCAidmFsdWUiOiAibm8iLCAicHJldl92YWx1ZSI6ICJubyIsICJwb3BvdmVycyI6IFt7Imljb25OYW1lIjogImRpc2siLCAidGV4dCI6ICJpbnBfcG9wb3Zlcl9tdWx0aXNpdGUifSwgeyJpY29uTmFtZSI6ICJpbmZvIiwgInRleHQiOiAiRW5hYmxlIG9yIGRpc2FibGUga2VlcGFsaXZlIGNvbm5lY3Rpb25zIHdpdGggdGhlIHByb3hpZWQgcmVzb3VyY2UuIn1dLCAiY29udGFpbmVyQ2xhc3MiOiAiei0xNyIsICJtZXRob2QiOiAiZGVmYXVsdCJ9LCAiUkVWRVJTRV9QUk9YWV9BVVRIX1JFUVVFU1QiOiB7ImNvbnRleHQiOiAibXVsdGlzaXRlIiwgImRlZmF1bHQiOiAiIiwgImhlbHAiOiAiRW5hYmxlIGF1dGhlbnRpY2F0aW9uIHVzaW5nIGFuIGV4dGVybmFsIHByb3ZpZGVyICh2YWx1ZSBvZiBhdXRoX3JlcXVlc3QgZGlyZWN0aXZlKS4iLCAiaWQiOiAicmV2ZXJzZS1wcm94eS1hdXRoLXJlcXVlc3QiLCAibGFiZWwiOiAiUmV2ZXJzZSBwcm94eSBhdXRoIHJlcXVlc3QiLCAicmVnZXgiOiAiXihcXC9bXFx3XFxdLn46XFwvPyNcXFtAISRcXCYnXFwoXFwpKissOz1cXC1dKnxvZmYpPyQiLCAidHlwZSI6ICJ0ZXh0IiwgIm11bHRpcGxlIjogInJldmVyc2UtcHJveHkiLCAicGF0dGVybiI6ICJeKFxcL1tcXHdcXF0ufjpcXC8/I1xcW0AhJFxcJidcXChcXCkqKyw7PVxcLV0qfG9mZik/JCIsICJpbnBUeXBlIjogImlucHV0IiwgIm5hbWUiOiAiUmV2ZXJzZSBwcm94eSBhdXRoIHJlcXVlc3QiLCAiY29sdW1ucyI6IHsicGMiOiA0LCAidGFibGV0IjogNiwgIm1vYmlsZSI6IDEyfSwgImRpc2FibGVkIjogZmFsc2UsICJ2YWx1ZSI6ICIiLCAicHJldl92YWx1ZSI6ICIiLCAicG9wb3ZlcnMiOiBbeyJpY29uTmFtZSI6ICJkaXNrIiwgInRleHQiOiAiaW5wX3BvcG92ZXJfbXVsdGlzaXRlIn0sIHsiaWNvbk5hbWUiOiAiaW5mbyIsICJ0ZXh0IjogIkVuYWJsZSBhdXRoZW50aWNhdGlvbiB1c2luZyBhbiBleHRlcm5hbCBwcm92aWRlciAodmFsdWUgb2YgYXV0aF9yZXF1ZXN0IGRpcmVjdGl2ZSkuIn1dLCAiY29udGFpbmVyQ2xhc3MiOiAiei0xNiIsICJtZXRob2QiOiAiZGVmYXVsdCJ9LCAiUkVWRVJTRV9QUk9YWV9BVVRIX1JFUVVFU1RfU0lHTklOX1VSTCI6IHsiY29udGV4dCI6ICJtdWx0aXNpdGUiLCAiZGVmYXVsdCI6ICIiLCAiaGVscCI6ICJSZWRpcmVjdCBjbGllbnRzIHRvIHNpZ24taW4gVVJMIHdoZW4gdXNpbmcgUkVWRVJTRV9QUk9YWV9BVVRIX1JFUVVFU1QgKHVzZWQgd2hlbiBhdXRoX3JlcXVlc3QgY2FsbCByZXR1cm5lZCA0MDEpLiIsICJpZCI6ICJyZXZlcnNlLXByb3h5LWF1dGgtcmVxdWVzdC1zaWduaW4tdXJsIiwgImxhYmVsIjogIkF1dGggcmVxdWVzdCBzaWduaW4gVVJMIiwgInJlZ2V4IjogIl4oaHR0cHM/OlxcL1xcL1tcXC1cXHdAOiUuK34jPV0rW1xcLVxcd1xcKFxcKSFAOiUrLn4jPyZcXC89JF0qKT8kIiwgInR5cGUiOiAidGV4dCIsICJtdWx0aXBsZSI6ICJyZXZlcnNlLXByb3h5IiwgInBhdHRlcm4iOiAiXihodHRwcz86XFwvXFwvW1xcLVxcd0A6JS4rfiM9XStbXFwtXFx3XFwoXFwpIUA6JSsufiM/JlxcLz0kXSopPyQiLCAiaW5wVHlwZSI6ICJpbnB1dCIsICJuYW1lIjogIkF1dGggcmVxdWVzdCBzaWduaW4gVVJMIiwgImNvbHVtbnMiOiB7InBjIjogNCwgInRhYmxldCI6IDYsICJtb2JpbGUiOiAxMn0sICJkaXNhYmxlZCI6IGZhbHNlLCAidmFsdWUiOiAiIiwgInByZXZfdmFsdWUiOiAiIiwgInBvcG92ZXJzIjogW3siaWNvbk5hbWUiOiAiZGlzayIsICJ0ZXh0IjogImlucF9wb3BvdmVyX211bHRpc2l0ZSJ9LCB7Imljb25OYW1lIjogImluZm8iLCAidGV4dCI6ICJSZWRpcmVjdCBjbGllbnRzIHRvIHNpZ24taW4gVVJMIHdoZW4gdXNpbmcgUkVWRVJTRV9QUk9YWV9BVVRIX1JFUVVFU1QgKHVzZWQgd2hlbiBhdXRoX3JlcXVlc3QgY2FsbCByZXR1cm5lZCA0MDEpLiJ9XSwgImNvbnRhaW5lckNsYXNzIjogInotMTUiLCAibWV0aG9kIjogImRlZmF1bHQifSwgIlJFVkVSU0VfUFJPWFlfQVVUSF9SRVFVRVNUX1NFVCI6IHsiY29udGV4dCI6ICJtdWx0aXNpdGUiLCAiZGVmYXVsdCI6ICIiLCAiaGVscCI6ICJMaXN0IG9mIHZhcmlhYmxlcyB0byBzZXQgZnJvbSB0aGUgYXV0aGVudGljYXRpb24gcHJvdmlkZXIsIHNlcGFyYXRlZCB3aXRoIHNlbWljb2xvbnMgKHZhbHVlcyBvZiBhdXRoX3JlcXVlc3Rfc2V0IGRpcmVjdGl2ZXMpLiIsICJpZCI6ICJyZXZlcnNlLXByb3h5LWF1dGgtcmVxdWVzdC1zZXQiLCAibGFiZWwiOiAiUmV2ZXJzZSBwcm94eSBhdXRoIHJlcXVlc3Qgc2V0IiwgInJlZ2V4IjogIl4oPyEgOykoOz8gPyhcXCRbYS16X1xcLV0rKSg/IS4qXFwyICkgW147XSspKiQiLCAidHlwZSI6ICJ0ZXh0IiwgIm11bHRpcGxlIjogInJldmVyc2UtcHJveHkiLCAicGF0dGVybiI6ICJeKD8hIDspKDs/ID8oXFwkW2Etel9cXC1dKykoPyEuKlxcMiApIFteO10rKSokIiwgImlucFR5cGUiOiAiaW5wdXQiLCAibmFtZSI6ICJSZXZlcnNlIHByb3h5IGF1dGggcmVxdWVzdCBzZXQiLCAiY29sdW1ucyI6IHsicGMiOiA0LCAidGFibGV0IjogNiwgIm1vYmlsZSI6IDEyfSwgImRpc2FibGVkIjogZmFsc2UsICJ2YWx1ZSI6ICIiLCAicHJldl92YWx1ZSI6ICIiLCAicG9wb3ZlcnMiOiBbeyJpY29uTmFtZSI6ICJkaXNrIiwgInRleHQiOiAiaW5wX3BvcG92ZXJfbXVsdGlzaXRlIn0sIHsiaWNvbk5hbWUiOiAiaW5mbyIsICJ0ZXh0IjogIkxpc3Qgb2YgdmFyaWFibGVzIHRvIHNldCBmcm9tIHRoZSBhdXRoZW50aWNhdGlvbiBwcm92aWRlciwgc2VwYXJhdGVkIHdpdGggc2VtaWNvbG9ucyAodmFsdWVzIG9mIGF1dGhfcmVxdWVzdF9zZXQgZGlyZWN0aXZlcykuIn1dLCAiY29udGFpbmVyQ2xhc3MiOiAiei0xNCIsICJtZXRob2QiOiAiZGVmYXVsdCJ9LCAiUkVWRVJTRV9QUk9YWV9DT05ORUNUX1RJTUVPVVQiOiB7ImNvbnRleHQiOiAibXVsdGlzaXRlIiwgImRlZmF1bHQiOiAiNjBzIiwgImhlbHAiOiAiVGltZW91dCB3aGVuIGNvbm5lY3RpbmcgdG8gdGhlIHByb3hpZWQgcmVzb3VyY2UuIiwgImlkIjogInJldmVyc2UtcHJveHktY29ubmVjdC10aW1lb3V0IiwgImxhYmVsIjogIlJldmVyc2UgcHJveHkgY29ubmVjdCB0aW1lb3V0IiwgInJlZ2V4IjogIl5cXGQrKG1zP3xbc2hkd015XSkkIiwgInR5cGUiOiAidGV4dCIsICJtdWx0aXBsZSI6ICJyZXZlcnNlLXByb3h5IiwgInBhdHRlcm4iOiAiXlxcZCsobXM/fFtzaGR3TXldKSQiLCAiaW5wVHlwZSI6ICJpbnB1dCIsICJuYW1lIjogIlJldmVyc2UgcHJveHkgY29ubmVjdCB0aW1lb3V0IiwgImNvbHVtbnMiOiB7InBjIjogNCwgInRhYmxldCI6IDYsICJtb2JpbGUiOiAxMn0sICJkaXNhYmxlZCI6IGZhbHNlLCAidmFsdWUiOiAiNjBzIiwgInByZXZfdmFsdWUiOiAiNjBzIiwgInBvcG92ZXJzIjogW3siaWNvbk5hbWUiOiAiZGlzayIsICJ0ZXh0IjogImlucF9wb3BvdmVyX211bHRpc2l0ZSJ9LCB7Imljb25OYW1lIjogImluZm8iLCAidGV4dCI6ICJUaW1lb3V0IHdoZW4gY29ubmVjdGluZyB0byB0aGUgcHJveGllZCByZXNvdXJjZS4ifV0sICJjb250YWluZXJDbGFzcyI6ICJ6LTEzIiwgIm1ldGhvZCI6ICJkZWZhdWx0In0sICJSRVZFUlNFX1BST1hZX1JFQURfVElNRU9VVCI6IHsiY29udGV4dCI6ICJtdWx0aXNpdGUiLCAiZGVmYXVsdCI6ICI2MHMiLCAiaGVscCI6ICJUaW1lb3V0IHdoZW4gcmVhZGluZyBmcm9tIHRoZSBwcm94aWVkIHJlc291cmNlLiIsICJpZCI6ICJyZXZlcnNlLXByb3h5LXJlYWQtdGltZW91dCIsICJsYWJlbCI6ICJSZXZlcnNlIHByb3h5IHJlYWQgdGltZW91dCIsICJyZWdleCI6ICJeXFxkKyhtcz98W3NoZHdNeV0pJCIsICJ0eXBlIjogInRleHQiLCAibXVsdGlwbGUiOiAicmV2ZXJzZS1wcm94eSIsICJwYXR0ZXJuIjogIl5cXGQrKG1zP3xbc2hkd015XSkkIiwgImlucFR5cGUiOiAiaW5wdXQiLCAibmFtZSI6ICJSZXZlcnNlIHByb3h5IHJlYWQgdGltZW91dCIsICJjb2x1bW5zIjogeyJwYyI6IDQsICJ0YWJsZXQiOiA2LCAibW9iaWxlIjogMTJ9LCAiZGlzYWJsZWQiOiBmYWxzZSwgInZhbHVlIjogIjYwcyIsICJwcmV2X3ZhbHVlIjogIjYwcyIsICJwb3BvdmVycyI6IFt7Imljb25OYW1lIjogImRpc2siLCAidGV4dCI6ICJpbnBfcG9wb3Zlcl9tdWx0aXNpdGUifSwgeyJpY29uTmFtZSI6ICJpbmZvIiwgInRleHQiOiAiVGltZW91dCB3aGVuIHJlYWRpbmcgZnJvbSB0aGUgcHJveGllZCByZXNvdXJjZS4ifV0sICJjb250YWluZXJDbGFzcyI6ICJ6LTEyIiwgIm1ldGhvZCI6ICJkZWZhdWx0In0sICJSRVZFUlNFX1BST1hZX1NFTkRfVElNRU9VVCI6IHsiY29udGV4dCI6ICJtdWx0aXNpdGUiLCAiZGVmYXVsdCI6ICI2MHMiLCAiaGVscCI6ICJUaW1lb3V0IHdoZW4gc2VuZGluZyB0byB0aGUgcHJveGllZCByZXNvdXJjZS4iLCAiaWQiOiAicmV2ZXJzZS1wcm94eS1zZW5kLXRpbWVvdXQiLCAibGFiZWwiOiAiUmV2ZXJzZSBwcm94eSBzZW5kIHRpbWVvdXQiLCAicmVnZXgiOiAiXlxcZCsobXM/fFtzaGR3TXldKSQiLCAidHlwZSI6ICJ0ZXh0IiwgIm11bHRpcGxlIjogInJldmVyc2UtcHJveHkiLCAicGF0dGVybiI6ICJeXFxkKyhtcz98W3NoZHdNeV0pJCIsICJpbnBUeXBlIjogImlucHV0IiwgIm5hbWUiOiAiUmV2ZXJzZSBwcm94eSBzZW5kIHRpbWVvdXQiLCAiY29sdW1ucyI6IHsicGMiOiA0LCAidGFibGV0IjogNiwgIm1vYmlsZSI6IDEyfSwgImRpc2FibGVkIjogZmFsc2UsICJ2YWx1ZSI6ICI2MHMiLCAicHJldl92YWx1ZSI6ICI2MHMiLCAicG9wb3ZlcnMiOiBbeyJpY29uTmFtZSI6ICJkaXNrIiwgInRleHQiOiAiaW5wX3BvcG92ZXJfbXVsdGlzaXRlIn0sIHsiaWNvbk5hbWUiOiAiaW5mbyIsICJ0ZXh0IjogIlRpbWVvdXQgd2hlbiBzZW5kaW5nIHRvIHRoZSBwcm94aWVkIHJlc291cmNlLiJ9XSwgImNvbnRhaW5lckNsYXNzIjogInotMTEiLCAibWV0aG9kIjogImRlZmF1bHQifSwgIlJFVkVSU0VfUFJPWFlfSU5DTFVERVMiOiB7ImNvbnRleHQiOiAibXVsdGlzaXRlIiwgImRlZmF1bHQiOiAiIiwgImhlbHAiOiAiQWRkaXRpb25hbCBjb25maWd1cmF0aW9uIHRvIGluY2x1ZGUgaW4gdGhlIGxvY2F0aW9uIGJsb2NrLCBzZXBhcmF0ZWQgd2l0aCBzcGFjZXMuIiwgImlkIjogInJldmVyc2UtcHJveHktaW5jbHVkZXMiLCAibGFiZWwiOiAiUmV2ZXJzZSBwcm94eSBpbmNsdWRlcyIsICJyZWdleCI6ICJeKD8hICkoID8oXFx3KykoPyEuKlxcYlxcMlxcYikpKiQiLCAidHlwZSI6ICJ0ZXh0IiwgIm11bHRpcGxlIjogInJldmVyc2UtcHJveHkiLCAicGF0dGVybiI6ICJeKD8hICkoID8oXFx3KykoPyEuKlxcYlxcMlxcYikpKiQiLCAiaW5wVHlwZSI6ICJpbnB1dCIsICJuYW1lIjogIlJldmVyc2UgcHJveHkgaW5jbHVkZXMiLCAiY29sdW1ucyI6IHsicGMiOiA0LCAidGFibGV0IjogNiwgIm1vYmlsZSI6IDEyfSwgImRpc2FibGVkIjogZmFsc2UsICJ2YWx1ZSI6ICIiLCAicHJldl92YWx1ZSI6ICIiLCAicG9wb3ZlcnMiOiBbeyJpY29uTmFtZSI6ICJkaXNrIiwgInRleHQiOiAiaW5wX3BvcG92ZXJfbXVsdGlzaXRlIn0sIHsiaWNvbk5hbWUiOiAiaW5mbyIsICJ0ZXh0IjogIkFkZGl0aW9uYWwgY29uZmlndXJhdGlvbiB0byBpbmNsdWRlIGluIHRoZSBsb2NhdGlvbiBibG9jaywgc2VwYXJhdGVkIHdpdGggc3BhY2VzLiJ9XSwgImNvbnRhaW5lckNsYXNzIjogInotMTAiLCAibWV0aG9kIjogImRlZmF1bHQifX19fX0sIHsiaWQiOiAicmV2ZXJzZXNjYW4iLCAic3RyZWFtIjogInllcyIsICJuYW1lIjogIlJldmVyc2Ugc2NhbiIsICJkZXNjcmlwdGlvbiI6ICJTY2FuIGNsaWVudHMgcG9ydHMgdG8gZGV0ZWN0IHByb3hpZXMgb3Igc2VydmVycy4iLCAidmVyc2lvbiI6ICIxLjAiLCAidHlwZSI6ICJjb3JlIiwgIm1ldGhvZCI6ICJtYW51YWwiLCAicGFnZSI6IHRydWUsICJzZXR0aW5ncyI6IHsiVVNFX1JFVkVSU0VfU0NBTiI6IHsiY29udGV4dCI6ICJtdWx0aXNpdGUiLCAiZGVmYXVsdCI6ICJubyIsICJoZWxwIjogIkVuYWJsZSBzY2FubmluZyBvZiBjbGllbnRzIHBvcnRzIGFuZCBkZW55IGFjY2VzcyBpZiBvbmUgaXMgb3BlbmVkLiIsICJpZCI6ICJ1c2UtcmV2ZXJzZS1zY2FuIiwgImxhYmVsIjogIlJldmVyc2Ugc2NhbiIsICJyZWdleCI6ICJeKG5vfHllcykkIiwgInR5cGUiOiAiY2hlY2siLCAiY29udGFpbmVyQ2xhc3MiOiAiei0yIiwgInBhdHRlcm4iOiAiXihub3x5ZXMpJCIsICJpbnBUeXBlIjogImNoZWNrYm94IiwgIm5hbWUiOiAiUmV2ZXJzZSBzY2FuIiwgImNvbHVtbnMiOiB7InBjIjogNCwgInRhYmxldCI6IDYsICJtb2JpbGUiOiAxMn0sICJkaXNhYmxlZCI6IGZhbHNlLCAidmFsdWUiOiAibm8iLCAibWV0aG9kIjogImRlZmF1bHQiLCAicHJldl92YWx1ZSI6ICJubyIsICJwb3BvdmVycyI6IFt7Imljb25OYW1lIjogImRpc2siLCAidGV4dCI6ICJpbnBfcG9wb3Zlcl9tdWx0aXNpdGUifSwgeyJpY29uTmFtZSI6ICJpbmZvIiwgInRleHQiOiAiRW5hYmxlIHNjYW5uaW5nIG9mIGNsaWVudHMgcG9ydHMgYW5kIGRlbnkgYWNjZXNzIGlmIG9uZSBpcyBvcGVuZWQuIn1dfSwgIlJFVkVSU0VfU0NBTl9QT1JUUyI6IHsiY29udGV4dCI6ICJtdWx0aXNpdGUiLCAiZGVmYXVsdCI6ICIyMiA4MCA0NDMgMzEyOCA4MDAwIDgwODAiLCAiaGVscCI6ICJMaXN0IG9mIHBvcnQgdG8gc2NhbiB3aGVuIHVzaW5nIHJldmVyc2Ugc2NhbiBmZWF0dXJlLiIsICJpZCI6ICJyZXZlcnNlLXNjYW4tcG9ydHMiLCAibGFiZWwiOiAiUmV2ZXJzZSBzY2FuIHBvcnRzIiwgInJlZ2V4IjogIl4uKiQiLCAidHlwZSI6ICJ0ZXh0IiwgImNvbnRhaW5lckNsYXNzIjogInotMSIsICJwYXR0ZXJuIjogIl4uKiQiLCAiaW5wVHlwZSI6ICJpbnB1dCIsICJuYW1lIjogIlJldmVyc2Ugc2NhbiBwb3J0cyIsICJjb2x1bW5zIjogeyJwYyI6IDQsICJ0YWJsZXQiOiA2LCAibW9iaWxlIjogMTJ9LCAiZGlzYWJsZWQiOiBmYWxzZSwgInZhbHVlIjogIjIyIDgwIDQ0MyAzMTI4IDgwMDAgODA4MCIsICJtZXRob2QiOiAiZGVmYXVsdCIsICJwcmV2X3ZhbHVlIjogIjIyIDgwIDQ0MyAzMTI4IDgwMDAgODA4MCIsICJwb3BvdmVycyI6IFt7Imljb25OYW1lIjogImRpc2siLCAidGV4dCI6ICJpbnBfcG9wb3Zlcl9tdWx0aXNpdGUifSwgeyJpY29uTmFtZSI6ICJpbmZvIiwgInRleHQiOiAiTGlzdCBvZiBwb3J0IHRvIHNjYW4gd2hlbiB1c2luZyByZXZlcnNlIHNjYW4gZmVhdHVyZS4ifV19LCAiUkVWRVJTRV9TQ0FOX1RJTUVPVVQiOiB7ImNvbnRleHQiOiAibXVsdGlzaXRlIiwgImRlZmF1bHQiOiAiNTAwIiwgImhlbHAiOiAiU3BlY2lmeSB0aGUgbWF4aW11bSB0aW1lb3V0IChpbiBtcykgd2hlbiBzY2FubmluZyBhIHBvcnQuIiwgImlkIjogInJldmVyc2Utc2Nhbi10aW1lb3V0IiwgImxhYmVsIjogIlJldmVyc2Ugc2NhbiB0aW1lb3V0IiwgInJlZ2V4IjogIl4uKiQiLCAidHlwZSI6ICJ0ZXh0IiwgImNvbnRhaW5lckNsYXNzIjogInotMCIsICJwYXR0ZXJuIjogIl4uKiQiLCAiaW5wVHlwZSI6ICJpbnB1dCIsICJuYW1lIjogIlJldmVyc2Ugc2NhbiB0aW1lb3V0IiwgImNvbHVtbnMiOiB7InBjIjogNCwgInRhYmxldCI6IDYsICJtb2JpbGUiOiAxMn0sICJkaXNhYmxlZCI6IGZhbHNlLCAidmFsdWUiOiAiNTAwIiwgIm1ldGhvZCI6ICJkZWZhdWx0IiwgInByZXZfdmFsdWUiOiAiNTAwIiwgInBvcG92ZXJzIjogW3siaWNvbk5hbWUiOiAiZGlzayIsICJ0ZXh0IjogImlucF9wb3BvdmVyX211bHRpc2l0ZSJ9LCB7Imljb25OYW1lIjogImluZm8iLCAidGV4dCI6ICJTcGVjaWZ5IHRoZSBtYXhpbXVtIHRpbWVvdXQgKGluIG1zKSB3aGVuIHNjYW5uaW5nIGEgcG9ydC4ifV19fSwgImNoZWNrc3VtIjogbnVsbH0sIHsiaWQiOiAic2VsZnNpZ25lZCIsICJzdHJlYW0iOiAieWVzIiwgIm5hbWUiOiAiU2VsZi1zaWduZWQgY2VydGlmaWNhdGUiLCAiZGVzY3JpcHRpb24iOiAiR2VuZXJhdGUgc2VsZi1zaWduZWQgY2VydGlmaWNhdGUuIiwgInZlcnNpb24iOiAiMS4wIiwgInR5cGUiOiAiY29yZSIsICJtZXRob2QiOiAibWFudWFsIiwgInBhZ2UiOiBmYWxzZSwgInNldHRpbmdzIjogeyJHRU5FUkFURV9TRUxGX1NJR05FRF9TU0wiOiB7ImNvbnRleHQiOiAibXVsdGlzaXRlIiwgImRlZmF1bHQiOiAibm8iLCAiaGVscCI6ICJHZW5lcmF0ZSBhbmQgdXNlIHNlbGYtc2lnbmVkIGNlcnRpZmljYXRlLiIsICJpZCI6ICJnZW5lcmF0ZS1zZWxmLXNpZ25lZC1zc2wiLCAibGFiZWwiOiAiQWN0aXZhdGUgc2VsZi1zaWduZWQgY2VydGlmaWNhdGUiLCAicmVnZXgiOiAiXih5ZXN8bm8pJCIsICJ0eXBlIjogImNoZWNrIiwgImNvbnRhaW5lckNsYXNzIjogInotMiIsICJwYXR0ZXJuIjogIl4oeWVzfG5vKSQiLCAiaW5wVHlwZSI6ICJjaGVja2JveCIsICJuYW1lIjogIkFjdGl2YXRlIHNlbGYtc2lnbmVkIGNlcnRpZmljYXRlIiwgImNvbHVtbnMiOiB7InBjIjogNCwgInRhYmxldCI6IDYsICJtb2JpbGUiOiAxMn0sICJkaXNhYmxlZCI6IGZhbHNlLCAidmFsdWUiOiAibm8iLCAibWV0aG9kIjogImRlZmF1bHQiLCAicHJldl92YWx1ZSI6ICJubyIsICJwb3BvdmVycyI6IFt7Imljb25OYW1lIjogImRpc2siLCAidGV4dCI6ICJpbnBfcG9wb3Zlcl9tdWx0aXNpdGUifSwgeyJpY29uTmFtZSI6ICJpbmZvIiwgInRleHQiOiAiR2VuZXJhdGUgYW5kIHVzZSBzZWxmLXNpZ25lZCBjZXJ0aWZpY2F0ZS4ifV19LCAiU0VMRl9TSUdORURfU1NMX0VYUElSWSI6IHsiY29udGV4dCI6ICJtdWx0aXNpdGUiLCAiZGVmYXVsdCI6ICIzNjUiLCAiaGVscCI6ICJTZWxmLXNpZ25lZCBjZXJ0aWZpY2F0ZSBleHBpcnkgaW4gZGF5cy4iLCAiaWQiOiAic2VsZi1zaWduZWQtc3NsLWV4cGlyeSIsICJsYWJlbCI6ICJDZXJ0aWZpY2F0ZSBleHBpcnkiLCAicmVnZXgiOiAiXlxcZCskIiwgInR5cGUiOiAidGV4dCIsICJjb250YWluZXJDbGFzcyI6ICJ6LTEiLCAicGF0dGVybiI6ICJeXFxkKyQiLCAiaW5wVHlwZSI6ICJpbnB1dCIsICJuYW1lIjogIkNlcnRpZmljYXRlIGV4cGlyeSIsICJjb2x1bW5zIjogeyJwYyI6IDQsICJ0YWJsZXQiOiA2LCAibW9iaWxlIjogMTJ9LCAiZGlzYWJsZWQiOiBmYWxzZSwgInZhbHVlIjogIjM2NSIsICJtZXRob2QiOiAiZGVmYXVsdCIsICJwcmV2X3ZhbHVlIjogIjM2NSIsICJwb3BvdmVycyI6IFt7Imljb25OYW1lIjogImRpc2siLCAidGV4dCI6ICJpbnBfcG9wb3Zlcl9tdWx0aXNpdGUifSwgeyJpY29uTmFtZSI6ICJpbmZvIiwgInRleHQiOiAiU2VsZi1zaWduZWQgY2VydGlmaWNhdGUgZXhwaXJ5IGluIGRheXMuIn1dfSwgIlNFTEZfU0lHTkVEX1NTTF9TVUJKIjogeyJjb250ZXh0IjogIm11bHRpc2l0ZSIsICJkZWZhdWx0IjogIi9DTj13d3cuZXhhbXBsZS5jb20vIiwgImhlbHAiOiAiU2VsZi1zaWduZWQgY2VydGlmaWNhdGUgc3ViamVjdC4iLCAiaWQiOiAic2VsZi1zaWduZWQtc3NsLXN1YmoiLCAibGFiZWwiOiAiQ2VydGlmaWNhdGUgc3ViamVjdCIsICJyZWdleCI6ICJeL0NOPVteLF0rJCIsICJ0eXBlIjogInRleHQiLCAiY29udGFpbmVyQ2xhc3MiOiAiei0wIiwgInBhdHRlcm4iOiAiXi9DTj1bXixdKyQiLCAiaW5wVHlwZSI6ICJpbnB1dCIsICJuYW1lIjogIkNlcnRpZmljYXRlIHN1YmplY3QiLCAiY29sdW1ucyI6IHsicGMiOiA0LCAidGFibGV0IjogNiwgIm1vYmlsZSI6IDEyfSwgImRpc2FibGVkIjogZmFsc2UsICJ2YWx1ZSI6ICIvQ049d3d3LmV4YW1wbGUuY29tLyIsICJtZXRob2QiOiAiZGVmYXVsdCIsICJwcmV2X3ZhbHVlIjogIi9DTj13d3cuZXhhbXBsZS5jb20vIiwgInBvcG92ZXJzIjogW3siaWNvbk5hbWUiOiAiZGlzayIsICJ0ZXh0IjogImlucF9wb3BvdmVyX211bHRpc2l0ZSJ9LCB7Imljb25OYW1lIjogImluZm8iLCAidGV4dCI6ICJTZWxmLXNpZ25lZCBjZXJ0aWZpY2F0ZSBzdWJqZWN0LiJ9XX19LCAiY2hlY2tzdW0iOiBudWxsfSwgeyJpZCI6ICJ1aSIsICJzdHJlYW0iOiAibm8iLCAibmFtZSI6ICJVSSIsICJkZXNjcmlwdGlvbiI6ICJJbnRlZ3JhdGUgZWFzaWx5IHRoZSBCdW5rZXJXZWIgVUkuIiwgInZlcnNpb24iOiAiMS4wIiwgInR5cGUiOiAiY29yZSIsICJtZXRob2QiOiAibWFudWFsIiwgInBhZ2UiOiBmYWxzZSwgInNldHRpbmdzIjogeyJVU0VfVUkiOiB7ImNvbnRleHQiOiAibXVsdGlzaXRlIiwgImRlZmF1bHQiOiAibm8iLCAiaGVscCI6ICJVc2UgVUkiLCAiaWQiOiAidXNlLXVpIiwgImxhYmVsIjogIlVzZSBVSSIsICJyZWdleCI6ICJeKHllc3xubykkIiwgInR5cGUiOiAiY2hlY2siLCAiY29udGFpbmVyQ2xhc3MiOiAiei0wIiwgInBhdHRlcm4iOiAiXih5ZXN8bm8pJCIsICJpbnBUeXBlIjogImNoZWNrYm94IiwgIm5hbWUiOiAiVXNlIFVJIiwgImNvbHVtbnMiOiB7InBjIjogNCwgInRhYmxldCI6IDYsICJtb2JpbGUiOiAxMn0sICJkaXNhYmxlZCI6IGZhbHNlLCAidmFsdWUiOiAibm8iLCAibWV0aG9kIjogImRlZmF1bHQiLCAicHJldl92YWx1ZSI6ICJubyIsICJwb3BvdmVycyI6IFt7Imljb25OYW1lIjogImRpc2siLCAidGV4dCI6ICJpbnBfcG9wb3Zlcl9tdWx0aXNpdGUifSwgeyJpY29uTmFtZSI6ICJpbmZvIiwgInRleHQiOiAiVXNlIFVJIn1dfX0sICJjaGVja3N1bSI6IG51bGx9LCB7ImlkIjogIndoaXRlbGlzdCIsICJzdHJlYW0iOiAicGFydGlhbCIsICJuYW1lIjogIldoaXRlbGlzdCIsICJkZXNjcmlwdGlvbiI6ICJBbGxvdyBhY2Nlc3MgYmFzZWQgb24gaW50ZXJuYWwgYW5kIGV4dGVybmFsIElQL25ldHdvcmsvckROUy9BU04gd2hpdGVsaXN0cy4iLCAidmVyc2lvbiI6ICIxLjAiLCAidHlwZSI6ICJjb3JlIiwgIm1ldGhvZCI6ICJtYW51YWwiLCAicGFnZSI6IHRydWUsICJzZXR0aW5ncyI6IHsiVVNFX1dISVRFTElTVCI6IHsiY29udGV4dCI6ICJtdWx0aXNpdGUiLCAiZGVmYXVsdCI6ICJ5ZXMiLCAiaGVscCI6ICJBY3RpdmF0ZSB3aGl0ZWxpc3QgZmVhdHVyZS4iLCAiaWQiOiAidXNlLXdoaXRlbGlzdCIsICJsYWJlbCI6ICJBY3RpdmF0ZSB3aGl0ZWxpc3RpbmciLCAicmVnZXgiOiAiXih5ZXN8bm8pJCIsICJ0eXBlIjogImNoZWNrIiwgImNvbnRhaW5lckNsYXNzIjogInotNiIsICJwYXR0ZXJuIjogIl4oeWVzfG5vKSQiLCAiaW5wVHlwZSI6ICJjaGVja2JveCIsICJuYW1lIjogIkFjdGl2YXRlIHdoaXRlbGlzdGluZyIsICJjb2x1bW5zIjogeyJwYyI6IDQsICJ0YWJsZXQiOiA2LCAibW9iaWxlIjogMTJ9LCAiZGlzYWJsZWQiOiB0cnVlLCAidmFsdWUiOiAibm8iLCAibWV0aG9kIjogInNjaGVkdWxlciIsICJwcmV2X3ZhbHVlIjogIm5vIiwgInBvcG92ZXJzIjogW3siaWNvbk5hbWUiOiAidHJlc3Bhc3MiLCAidGV4dCI6ICJpbnBfcG9wb3Zlcl9tZXRob2RfZGlzYWJsZWQifSwgeyJpY29uTmFtZSI6ICJkaXNrIiwgInRleHQiOiAiaW5wX3BvcG92ZXJfbXVsdGlzaXRlIn0sIHsiaWNvbk5hbWUiOiAiaW5mbyIsICJ0ZXh0IjogIkFjdGl2YXRlIHdoaXRlbGlzdCBmZWF0dXJlLiJ9XX0sICJXSElURUxJU1RfSVAiOiB7ImNvbnRleHQiOiAibXVsdGlzaXRlIiwgImRlZmF1bHQiOiAiMjAuMTkxLjQ1LjIxMiA0MC44OC4yMS4yMzUgNDAuNzYuMTczLjE1MSA0MC43Ni4xNjMuNyAyMC4xODUuNzkuNDcgNTIuMTQyLjI2LjE3NSAyMC4xODUuNzkuMTUgNTIuMTQyLjI0LjE0OSA0MC43Ni4xNjIuMjA4IDQwLjc2LjE2My4yMyA0MC43Ni4xNjIuMTkxIDQwLjc2LjE2Mi4yNDciLCAiaGVscCI6ICJMaXN0IG9mIElQL25ldHdvcmssIHNlcGFyYXRlZCB3aXRoIHNwYWNlcywgdG8gcHV0IGludG8gdGhlIHdoaXRlbGlzdC4iLCAiaWQiOiAid2hpdGVsaXN0LWlwIiwgImxhYmVsIjogIldoaXRlbGlzdCBJUC9uZXR3b3JrIiwgInJlZ2V4IjogIl4oPyEgKSggKigoKFxcYjI1WzAtNV18XFxiMlswLTRdXFxkfFxcYlswMV0/XFxkXFxkPykoXFwuKDI1WzAtNV18MlswLTRdXFxkfFswMV0/XFxkXFxkPykpezN9KShcXC8oWzEtMl1bMC05XT98M1swLTJdP3xbMDQtOV0pKT98KChbMC05YS1mQS1GXXsxLDR9Oil7N31bMC05YS1mQS1GXXsxLDR9fChbMC05YS1mQS1GXXsxLDR9Oil7MSw3fTp8KFswLTlhLWZBLUZdezEsNH06KXsxLDZ9OlswLTlhLWZBLUZdezEsNH18KFswLTlhLWZBLUZdezEsNH06KXsxLDV9KDpbMC05YS1mQS1GXXsxLDR9KXsxLDJ9fChbMC05YS1mQS1GXXsxLDR9Oil7MSw0fSg6WzAtOWEtZkEtRl17MSw0fSl7MSwzfXwoWzAtOWEtZkEtRl17MSw0fTopezEsM30oOlswLTlhLWZBLUZdezEsNH0pezEsNH18KFswLTlhLWZBLUZdezEsNH06KXsxLDJ9KDpbMC05YS1mQS1GXXsxLDR9KXsxLDV9fFswLTlhLWZBLUZdezEsNH06KCg6WzAtOWEtZkEtRl17MSw0fSl7MSw2fSl8OigoOlswLTlhLWZBLUZdezEsNH0pezEsN318Oil8ZmU4MDooOlswLTlhLWZBLUZdWnswLDR9KXswLDR9JVswLTlhLXpBLVpdK3w6OihmZmZmKDowezEsNH0pPzopPygoMjVbMC01XXwoMlswLTRdfDE/XFxkKT9cXGQpXFwuKXszfSgyNVswLTVdfCgyWzAtNF18MT9cXGQpP1xcZCl8KFswLTlhLWZBLUZdezEsNH06KXsxLDR9OigoMjVbMC01XXwoMlswLTRdfDE/XFxkKT9cXGQpXFwuKXszfSgyNVswLTVdfCgyWzAtNF18MT9cXGQpP1xcZCkpKFxcLygxMlswLThdfDFbMDFdWzAtOV18WzAtOV1bMC05XT8pKT8pKD8hLipcXERcXDIoW15cXGRcXC9dfCQpKSAqKSokIiwgInR5cGUiOiAidGV4dCIsICJjb250YWluZXJDbGFzcyI6ICJ6LTUiLCAicGF0dGVybiI6ICJeKD8hICkoICooKChcXGIyNVswLTVdfFxcYjJbMC00XVxcZHxcXGJbMDFdP1xcZFxcZD8pKFxcLigyNVswLTVdfDJbMC00XVxcZHxbMDFdP1xcZFxcZD8pKXszfSkoXFwvKFsxLTJdWzAtOV0/fDNbMC0yXT98WzA0LTldKSk/fCgoWzAtOWEtZkEtRl17MSw0fTopezd9WzAtOWEtZkEtRl17MSw0fXwoWzAtOWEtZkEtRl17MSw0fTopezEsN306fChbMC05YS1mQS1GXXsxLDR9Oil7MSw2fTpbMC05YS1mQS1GXXsxLDR9fChbMC05YS1mQS1GXXsxLDR9Oil7MSw1fSg6WzAtOWEtZkEtRl17MSw0fSl7MSwyfXwoWzAtOWEtZkEtRl17MSw0fTopezEsNH0oOlswLTlhLWZBLUZdezEsNH0pezEsM318KFswLTlhLWZBLUZdezEsNH06KXsxLDN9KDpbMC05YS1mQS1GXXsxLDR9KXsxLDR9fChbMC05YS1mQS1GXXsxLDR9Oil7MSwyfSg6WzAtOWEtZkEtRl17MSw0fSl7MSw1fXxbMC05YS1mQS1GXXsxLDR9OigoOlswLTlhLWZBLUZdezEsNH0pezEsNn0pfDooKDpbMC05YS1mQS1GXXsxLDR9KXsxLDd9fDopfGZlODA6KDpbMC05YS1mQS1GXVp7MCw0fSl7MCw0fSVbMC05YS16QS1aXSt8OjooZmZmZig6MHsxLDR9KT86KT8oKDI1WzAtNV18KDJbMC00XXwxP1xcZCk/XFxkKVxcLil7M30oMjVbMC01XXwoMlswLTRdfDE/XFxkKT9cXGQpfChbMC05YS1mQS1GXXsxLDR9Oil7MSw0fTooKDI1WzAtNV18KDJbMC00XXwxP1xcZCk/XFxkKVxcLil7M30oMjVbMC01XXwoMlswLTRdfDE/XFxkKT9cXGQpKShcXC8oMTJbMC04XXwxWzAxXVswLTldfFswLTldWzAtOV0/KSk/KSg/IS4qXFxEXFwyKFteXFxkXFwvXXwkKSkgKikqJCIsICJpbnBUeXBlIjogImlucHV0IiwgIm5hbWUiOiAiV2hpdGVsaXN0IElQL25ldHdvcmsiLCAiY29sdW1ucyI6IHsicGMiOiA0LCAidGFibGV0IjogNiwgIm1vYmlsZSI6IDEyfSwgImRpc2FibGVkIjogZmFsc2UsICJ2YWx1ZSI6ICIyMC4xOTEuNDUuMjEyIDQwLjg4LjIxLjIzNSA0MC43Ni4xNzMuMTUxIDQwLjc2LjE2My43IDIwLjE4NS43OS40NyA1Mi4xNDIuMjYuMTc1IDIwLjE4NS43OS4xNSA1Mi4xNDIuMjQuMTQ5IDQwLjc2LjE2Mi4yMDggNDAuNzYuMTYzLjIzIDQwLjc2LjE2Mi4xOTEgNDAuNzYuMTYyLjI0NyIsICJtZXRob2QiOiAiZGVmYXVsdCIsICJwcmV2X3ZhbHVlIjogIjIwLjE5MS40NS4yMTIgNDAuODguMjEuMjM1IDQwLjc2LjE3My4xNTEgNDAuNzYuMTYzLjcgMjAuMTg1Ljc5LjQ3IDUyLjE0Mi4yNi4xNzUgMjAuMTg1Ljc5LjE1IDUyLjE0Mi4yNC4xNDkgNDAuNzYuMTYyLjIwOCA0MC43Ni4xNjMuMjMgNDAuNzYuMTYyLjE5MSA0MC43Ni4xNjIuMjQ3IiwgInBvcG92ZXJzIjogW3siaWNvbk5hbWUiOiAiZGlzayIsICJ0ZXh0IjogImlucF9wb3BvdmVyX211bHRpc2l0ZSJ9LCB7Imljb25OYW1lIjogImluZm8iLCAidGV4dCI6ICJMaXN0IG9mIElQL25ldHdvcmssIHNlcGFyYXRlZCB3aXRoIHNwYWNlcywgdG8gcHV0IGludG8gdGhlIHdoaXRlbGlzdC4ifV19LCAiV0hJVEVMSVNUX1JETlMiOiB7ImNvbnRleHQiOiAibXVsdGlzaXRlIiwgImRlZmF1bHQiOiAiLmdvb2dsZS5jb20gLmdvb2dsZWJvdC5jb20gLnlhbmRleC5ydSAueWFuZGV4Lm5ldCAueWFuZGV4LmNvbSAuc2VhcmNoLm1zbi5jb20gLmJhaWR1LmNvbSAuYmFpZHUuanAgLmNyYXdsLnlhaG9vLm5ldCAuZndkLmxpbmtlZGluLmNvbSAudHdpdHRlci5jb20gLnR3dHRyLmNvbSAuZGlzY29yZC5jb20iLCAiaGVscCI6ICJMaXN0IG9mIHJldmVyc2UgRE5TIHN1ZmZpeGVzLCBzZXBhcmF0ZWQgd2l0aCBzcGFjZXMsIHRvIHdoaXRlbGlzdC4iLCAiaWQiOiAid2hpdGVsaXN0LXJkbnMiLCAibGFiZWwiOiAiV2hpdGVsaXN0IHJldmVyc2UgRE5TIiwgInJlZ2V4IjogIl4oICooKFteIF0rKSg/IS4qXFwzKCB8JCkpKSAqKSokIiwgInR5cGUiOiAidGV4dCIsICJjb250YWluZXJDbGFzcyI6ICJ6LTQiLCAicGF0dGVybiI6ICJeKCAqKChbXiBdKykoPyEuKlxcMyggfCQpKSkgKikqJCIsICJpbnBUeXBlIjogImlucHV0IiwgIm5hbWUiOiAiV2hpdGVsaXN0IHJldmVyc2UgRE5TIiwgImNvbHVtbnMiOiB7InBjIjogNCwgInRhYmxldCI6IDYsICJtb2JpbGUiOiAxMn0sICJkaXNhYmxlZCI6IGZhbHNlLCAidmFsdWUiOiAiLmdvb2dsZS5jb20gLmdvb2dsZWJvdC5jb20gLnlhbmRleC5ydSAueWFuZGV4Lm5ldCAueWFuZGV4LmNvbSAuc2VhcmNoLm1zbi5jb20gLmJhaWR1LmNvbSAuYmFpZHUuanAgLmNyYXdsLnlhaG9vLm5ldCAuZndkLmxpbmtlZGluLmNvbSAudHdpdHRlci5jb20gLnR3dHRyLmNvbSAuZGlzY29yZC5jb20iLCAibWV0aG9kIjogImRlZmF1bHQiLCAicHJldl92YWx1ZSI6ICIuZ29vZ2xlLmNvbSAuZ29vZ2xlYm90LmNvbSAueWFuZGV4LnJ1IC55YW5kZXgubmV0IC55YW5kZXguY29tIC5zZWFyY2gubXNuLmNvbSAuYmFpZHUuY29tIC5iYWlkdS5qcCAuY3Jhd2wueWFob28ubmV0IC5md2QubGlua2VkaW4uY29tIC50d2l0dGVyLmNvbSAudHd0dHIuY29tIC5kaXNjb3JkLmNvbSIsICJwb3BvdmVycyI6IFt7Imljb25OYW1lIjogImRpc2siLCAidGV4dCI6ICJpbnBfcG9wb3Zlcl9tdWx0aXNpdGUifSwgeyJpY29uTmFtZSI6ICJpbmZvIiwgInRleHQiOiAiTGlzdCBvZiByZXZlcnNlIEROUyBzdWZmaXhlcywgc2VwYXJhdGVkIHdpdGggc3BhY2VzLCB0byB3aGl0ZWxpc3QuIn1dfSwgIldISVRFTElTVF9SRE5TX0dMT0JBTCI6IHsiY29udGV4dCI6ICJtdWx0aXNpdGUiLCAiZGVmYXVsdCI6ICJ5ZXMiLCAiaGVscCI6ICJPbmx5IHBlcmZvcm0gUkROUyB3aGl0ZWxpc3QgY2hlY2tzIG9uIGdsb2JhbCBJUCBhZGRyZXNzZXMuIiwgImlkIjogIndoaXRlbGlzdC1yZG5zLWdsb2JhbCIsICJsYWJlbCI6ICJXaGl0ZWxpc3QgcmV2ZXJzZSBETlMgZ2xvYmFsIElQcyIsICJyZWdleCI6ICJeKHllc3xubykkIiwgInR5cGUiOiAiY2hlY2siLCAiY29udGFpbmVyQ2xhc3MiOiAiei0zIiwgInBhdHRlcm4iOiAiXih5ZXN8bm8pJCIsICJpbnBUeXBlIjogImNoZWNrYm94IiwgIm5hbWUiOiAiV2hpdGVsaXN0IHJldmVyc2UgRE5TIGdsb2JhbCBJUHMiLCAiY29sdW1ucyI6IHsicGMiOiA0LCAidGFibGV0IjogNiwgIm1vYmlsZSI6IDEyfSwgImRpc2FibGVkIjogZmFsc2UsICJ2YWx1ZSI6ICJ5ZXMiLCAibWV0aG9kIjogImRlZmF1bHQiLCAicHJldl92YWx1ZSI6ICJ5ZXMiLCAicG9wb3ZlcnMiOiBbeyJpY29uTmFtZSI6ICJkaXNrIiwgInRleHQiOiAiaW5wX3BvcG92ZXJfbXVsdGlzaXRlIn0sIHsiaWNvbk5hbWUiOiAiaW5mbyIsICJ0ZXh0IjogIk9ubHkgcGVyZm9ybSBSRE5TIHdoaXRlbGlzdCBjaGVja3Mgb24gZ2xvYmFsIElQIGFkZHJlc3Nlcy4ifV19LCAiV0hJVEVMSVNUX0FTTiI6IHsiY29udGV4dCI6ICJtdWx0aXNpdGUiLCAiZGVmYXVsdCI6ICIzMjkzNCIsICJoZWxwIjogIkxpc3Qgb2YgQVNOIG51bWJlcnMsIHNlcGFyYXRlZCB3aXRoIHNwYWNlcywgdG8gd2hpdGVsaXN0LiIsICJpZCI6ICJ3aGl0ZWxpc3QtYXNuIiwgImxhYmVsIjogIldoaXRlbGlzdCBBU04iLCAicmVnZXgiOiAiXl4oICooKEFTTj8pPyhcXGQrKVxcYig/IS4qW1NOIF1cXDRcXGIpKSAqKSokIiwgInR5cGUiOiAidGV4dCIsICJjb250YWluZXJDbGFzcyI6ICJ6LTIiLCAicGF0dGVybiI6ICJeXiggKigoQVNOPyk/KFxcZCspXFxiKD8hLipbU04gXVxcNFxcYikpICopKiQiLCAiaW5wVHlwZSI6ICJpbnB1dCIsICJuYW1lIjogIldoaXRlbGlzdCBBU04iLCAiY29sdW1ucyI6IHsicGMiOiA0LCAidGFibGV0IjogNiwgIm1vYmlsZSI6IDEyfSwgImRpc2FibGVkIjogZmFsc2UsICJ2YWx1ZSI6ICIzMjkzNCIsICJtZXRob2QiOiAiZGVmYXVsdCIsICJwcmV2X3ZhbHVlIjogIjMyOTM0IiwgInBvcG92ZXJzIjogW3siaWNvbk5hbWUiOiAiZGlzayIsICJ0ZXh0IjogImlucF9wb3BvdmVyX211bHRpc2l0ZSJ9LCB7Imljb25OYW1lIjogImluZm8iLCAidGV4dCI6ICJMaXN0IG9mIEFTTiBudW1iZXJzLCBzZXBhcmF0ZWQgd2l0aCBzcGFjZXMsIHRvIHdoaXRlbGlzdC4ifV19LCAiV0hJVEVMSVNUX1VTRVJfQUdFTlQiOiB7ImNvbnRleHQiOiAibXVsdGlzaXRlIiwgImRlZmF1bHQiOiAiIiwgImhlbHAiOiAiTGlzdCBvZiBVc2VyLUFnZW50IChQQ1JFIHJlZ2V4KSwgc2VwYXJhdGVkIHdpdGggc3BhY2VzLCB0byB3aGl0ZWxpc3QuIiwgImlkIjogIndoaXRlbGlzdC11c2VyLWFnZW50IiwgImxhYmVsIjogIldoaXRlbGlzdCBVc2VyLUFnZW50IiwgInJlZ2V4IjogIl4uKiQiLCAidHlwZSI6ICJ0ZXh0IiwgImNvbnRhaW5lckNsYXNzIjogInotMSIsICJwYXR0ZXJuIjogIl4uKiQiLCAiaW5wVHlwZSI6ICJpbnB1dCIsICJuYW1lIjogIldoaXRlbGlzdCBVc2VyLUFnZW50IiwgImNvbHVtbnMiOiB7InBjIjogNCwgInRhYmxldCI6IDYsICJtb2JpbGUiOiAxMn0sICJkaXNhYmxlZCI6IGZhbHNlLCAidmFsdWUiOiAiIiwgIm1ldGhvZCI6ICJkZWZhdWx0IiwgInByZXZfdmFsdWUiOiAiIiwgInBvcG92ZXJzIjogW3siaWNvbk5hbWUiOiAiZGlzayIsICJ0ZXh0IjogImlucF9wb3BvdmVyX211bHRpc2l0ZSJ9LCB7Imljb25OYW1lIjogImluZm8iLCAidGV4dCI6ICJMaXN0IG9mIFVzZXItQWdlbnQgKFBDUkUgcmVnZXgpLCBzZXBhcmF0ZWQgd2l0aCBzcGFjZXMsIHRvIHdoaXRlbGlzdC4ifV19LCAiV0hJVEVMSVNUX1VSSSI6IHsiY29udGV4dCI6ICJtdWx0aXNpdGUiLCAiZGVmYXVsdCI6ICIiLCAiaGVscCI6ICJMaXN0IG9mIFVSSSAoUENSRSByZWdleCksIHNlcGFyYXRlZCB3aXRoIHNwYWNlcywgdG8gd2hpdGVsaXN0LiIsICJpZCI6ICJ3aGl0ZWxpc3QtdXJpIiwgImxhYmVsIjogIldoaXRlbGlzdCBVUkkiLCAicmVnZXgiOiAiXiggKiguKikoPyEuKlxcMig/IS4pKSAqKSokIiwgInR5cGUiOiAidGV4dCIsICJjb250YWluZXJDbGFzcyI6ICJ6LTAiLCAicGF0dGVybiI6ICJeKCAqKC4qKSg/IS4qXFwyKD8hLikpICopKiQiLCAiaW5wVHlwZSI6ICJpbnB1dCIsICJuYW1lIjogIldoaXRlbGlzdCBVUkkiLCAiY29sdW1ucyI6IHsicGMiOiA0LCAidGFibGV0IjogNiwgIm1vYmlsZSI6IDEyfSwgImRpc2FibGVkIjogZmFsc2UsICJ2YWx1ZSI6ICIiLCAibWV0aG9kIjogImRlZmF1bHQiLCAicHJldl92YWx1ZSI6ICIiLCAicG9wb3ZlcnMiOiBbeyJpY29uTmFtZSI6ICJkaXNrIiwgInRleHQiOiAiaW5wX3BvcG92ZXJfbXVsdGlzaXRlIn0sIHsiaWNvbk5hbWUiOiAiaW5mbyIsICJ0ZXh0IjogIkxpc3Qgb2YgVVJJIChQQ1JFIHJlZ2V4KSwgc2VwYXJhdGVkIHdpdGggc3BhY2VzLCB0byB3aGl0ZWxpc3QuIn1dfX0sICJjaGVja3N1bSI6IG51bGx9XX19LCAib3BlcmF0aW9uIjogImVkaXQiLCAib2xkU2VydmVyTmFtZSI6ICJhcHAxLmV4YW1wbGUuY29tIn19XX1d \ No newline at end of file diff --git a/src/ui/client/tests/builder/advanced_mode.py b/src/ui/client/tests/builder/advanced_mode.py index c8945ecde..dfb402954 100644 --- a/src/ui/client/tests/builder/advanced_mode.py +++ b/src/ui/client/tests/builder/advanced_mode.py @@ -28,7 +28,7 @@ def advanced_mode_builder(templates: list[dict], plugins: list, global_config: d { "type": "Templates", "data": { - "templates": get_forms(templates, plugins, settings, ("advanced",), is_new), + "templates": get_forms(templates, plugins, settings, ("advanced",), is_new, True), "operation": "new" if is_new else "edit", "oldServerName": service_name if service_name else "", }, diff --git a/src/ui/client/tests/builder/easy_mode.py b/src/ui/client/tests/builder/easy_mode.py index ed6688367..9ef70842d 100644 --- a/src/ui/client/tests/builder/easy_mode.py +++ b/src/ui/client/tests/builder/easy_mode.py @@ -28,7 +28,7 @@ def easy_mode_builder(templates: list[dict], plugins: list, global_config: dict, { "type": "Templates", "data": { - "templates": get_forms(templates, plugins, settings, ("easy",), is_new), + "templates": get_forms(templates, plugins, settings, ("easy",), is_new, True), "operation": "new" if is_new else "edit", "oldServerName": service_name if service_name else "", }, diff --git a/src/ui/client/tests/builder/raw_mode.py b/src/ui/client/tests/builder/raw_mode.py index 3a8c147d5..a4d3a802b 100644 --- a/src/ui/client/tests/builder/raw_mode.py +++ b/src/ui/client/tests/builder/raw_mode.py @@ -29,7 +29,7 @@ def raw_mode_builder(templates: list[dict], plugins: list, global_config: dict, { "type": "Templates", "data": { - "templates": get_forms(templates, plugins, settings, ("raw",), is_new), + "templates": get_forms(templates, plugins, settings, ("raw",), is_new, True), "operation": "new" if is_new else "edit", "oldServerName": service_name if service_name else "", }, diff --git a/src/ui/client/tests/builder/utils/form.py b/src/ui/client/tests/builder/utils/form.py index bbf5a7701..de63cdc33 100644 --- a/src/ui/client/tests/builder/utils/form.py +++ b/src/ui/client/tests/builder/utils/form.py @@ -43,7 +43,7 @@ def get_plugins_multisite(plugins: list) -> list: plugin_multisite["settings"] = multisite_settings plugins_multisite.append(plugin_multisite) - return plugins + return plugins_multisite def get_forms( @@ -61,7 +61,19 @@ def get_forms( """ # Copy of the plugins, and get the plugins by context if needed # In services page, we want only multisite settings, but in global config we want both - plugins_base = get_plugins_multisite(plugins) if only_multisite else copy.deepcopy(plugins) + plugins_base = get_plugins_multisite(plugins) if only_multisite else plugins + + # This template will be used to show default value or value if exists + TEMPLATE_DEFAULT = [ + { + "name": "default", + "steps": [], + "configs": {}, + "settings": {}, + } + ] + + templates = TEMPLATE_DEFAULT + templates # Update SERVER_NAME to be empty if new if is_new and "SERVER_NAME" in settings: diff --git a/src/ui/client/tests/raw.json b/src/ui/client/tests/raw.json index 9fbfcfdf8..93efae24b 100644 --- a/src/ui/client/tests/raw.json +++ b/src/ui/client/tests/raw.json @@ -1,11 +1,10027 @@ [ { - "type": "void", + "type": "card", + "containerColumns": { + "pc": 12, + "tablet": 12, + "mobile": 12 + }, "widgets": [ { - "type": "MessageUnmatch", + "type": "Title", "data": { - "text": "logs_not_found" + "title": "app1.example.com", + "type": "container", + "lowercase": true + } + }, + { + "type": "Subtitle", + "data": { + "subtitle": "services_manage_subtitle", + "type": "container", + "subtitleClass": "mb-4" + } + }, + { + "type": "Templates", + "data": { + "templates": { + "advanced": { + "default": [ + { + "id": "general", + "stream": "partial", + "name": "General", + "description": "The general settings for the server", + "version": "0.1", + "type": "core", + "method": "manual", + "page": false, + "settings": { + "IS_LOADING": { + "context": "global", + "default": "no", + "help": "Internal use : set to yes when BW is loading.", + "id": "internal-use-loading", + "label": "internal use loading", + "regex": "^(yes|no)$", + "type": "check", + "containerClass": "z-33", + "pattern": "^(yes|no)$", + "inpType": "checkbox", + "name": "internal use loading", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "no", + "method": "default", + "prev_value": "no", + "popovers": [ + { + "iconName": "globe", + "text": "inp_popover_global" + }, + { + "iconName": "info", + "text": "Internal use : set to yes when BW is loading." + } + ] + }, + "NGINX_PREFIX": { + "context": "global", + "default": "/etc/nginx/", + "help": "Where nginx will search for configurations.", + "id": "nginx-prefix", + "label": "nginx prefix", + "regex": "^(\\/[\\-\\w.\\s]+)*\\/$", + "type": "text", + "containerClass": "z-32", + "pattern": "^(\\/[\\-\\w.\\s]+)*\\/$", + "inpType": "input", + "name": "nginx prefix", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "/etc/nginx/", + "method": "default", + "prev_value": "/etc/nginx/", + "popovers": [ + { + "iconName": "globe", + "text": "inp_popover_global" + }, + { + "iconName": "info", + "text": "Where nginx will search for configurations." + } + ] + }, + "HTTP_PORT": { + "context": "global", + "default": "8080", + "help": "HTTP port number which bunkerweb binds to.", + "id": "http-port", + "label": "HTTP port", + "regex": "^\\d+$", + "type": "text", + "containerClass": "z-31", + "pattern": "^\\d+$", + "inpType": "input", + "name": "HTTP port", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "8080", + "method": "default", + "prev_value": "8080", + "popovers": [ + { + "iconName": "globe", + "text": "inp_popover_global" + }, + { + "iconName": "info", + "text": "HTTP port number which bunkerweb binds to." + } + ] + }, + "HTTPS_PORT": { + "context": "global", + "default": "8443", + "help": "HTTPS port number which bunkerweb binds to.", + "id": "https-port", + "label": "HTTPS port", + "regex": "^\\d+$", + "type": "text", + "containerClass": "z-30", + "pattern": "^\\d+$", + "inpType": "input", + "name": "HTTPS port", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "8443", + "method": "default", + "prev_value": "8443", + "popovers": [ + { + "iconName": "globe", + "text": "inp_popover_global" + }, + { + "iconName": "info", + "text": "HTTPS port number which bunkerweb binds to." + } + ] + }, + "MULTISITE": { + "context": "global", + "default": "no", + "help": "Multi site activation.", + "id": "multisite", + "label": "Multisite", + "regex": "^(yes|no)$", + "type": "check", + "containerClass": "z-29", + "pattern": "^(yes|no)$", + "inpType": "checkbox", + "name": "Multisite", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": true, + "value": "yes", + "method": "scheduler", + "prev_value": "yes", + "popovers": [ + { + "iconName": "trespass", + "text": "inp_popover_method_disabled" + }, + { + "iconName": "globe", + "text": "inp_popover_global" + }, + { + "iconName": "info", + "text": "Multi site activation." + } + ] + }, + "SERVER_NAME": { + "context": "multisite", + "default": "www.example.com", + "help": "List of the virtual hosts served by bunkerweb.", + "id": "server-name", + "label": "Server name", + "regex": "^((\\S{1,255})(?!.*\\s\\2(\\s|$)))?(\\s(\\S{1,255})(?!.*\\s\\5(\\s|$)))*$", + "type": "text", + "containerClass": "z-28", + "pattern": "^((\\S{1,255})(?!.*\\s\\2(\\s|$)))?(\\s(\\S{1,255})(?!.*\\s\\5(\\s|$)))*$", + "inpType": "input", + "name": "Server name", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "app1.example.com", + "method": "ui", + "prev_value": "app1.example.com", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "List of the virtual hosts served by bunkerweb." + } + ] + }, + "WORKER_PROCESSES": { + "context": "global", + "default": "auto", + "help": "Number of worker processes.", + "id": "worker-processes", + "label": "Worker processes", + "regex": "^(auto|\\d+)$", + "type": "text", + "containerClass": "z-27", + "pattern": "^(auto|\\d+)$", + "inpType": "input", + "name": "Worker processes", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "auto", + "method": "default", + "prev_value": "auto", + "popovers": [ + { + "iconName": "globe", + "text": "inp_popover_global" + }, + { + "iconName": "info", + "text": "Number of worker processes." + } + ] + }, + "WORKER_RLIMIT_NOFILE": { + "context": "global", + "default": "2048", + "help": "Maximum number of open files for worker processes.", + "id": "worker-rlimit-nofile", + "label": "Open files per worker", + "regex": "^\\d+$", + "type": "text", + "containerClass": "z-26", + "pattern": "^\\d+$", + "inpType": "input", + "name": "Open files per worker", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "2048", + "method": "default", + "prev_value": "2048", + "popovers": [ + { + "iconName": "globe", + "text": "inp_popover_global" + }, + { + "iconName": "info", + "text": "Maximum number of open files for worker processes." + } + ] + }, + "WORKER_CONNECTIONS": { + "context": "global", + "default": "1024", + "help": "Maximum number of connections per worker.", + "id": "worker-connections", + "label": "Connections per worker", + "regex": "^\\d+$", + "type": "text", + "containerClass": "z-25", + "pattern": "^\\d+$", + "inpType": "input", + "name": "Connections per worker", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "1024", + "method": "default", + "prev_value": "1024", + "popovers": [ + { + "iconName": "globe", + "text": "inp_popover_global" + }, + { + "iconName": "info", + "text": "Maximum number of connections per worker." + } + ] + }, + "LOG_FORMAT": { + "context": "global", + "default": "$host $remote_addr - $remote_user [$time_local] \"$request\" $status $body_bytes_sent \"$http_referer\" \"$http_user_agent\"", + "help": "The format to use for access logs.", + "id": "log-format", + "label": "Log format", + "regex": "^.*$", + "type": "text", + "containerClass": "z-24", + "pattern": "^.*$", + "inpType": "input", + "name": "Log format", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "$host $remote_addr - $remote_user [$time_local] \"$request\" $status $body_bytes_sent \"$http_referer\" \"$http_user_agent\"", + "method": "default", + "prev_value": "$host $remote_addr - $remote_user [$time_local] \"$request\" $status $body_bytes_sent \"$http_referer\" \"$http_user_agent\"", + "popovers": [ + { + "iconName": "globe", + "text": "inp_popover_global" + }, + { + "iconName": "info", + "text": "The format to use for access logs." + } + ] + }, + "LOG_LEVEL": { + "context": "global", + "default": "notice", + "help": "The level to use for error logs.", + "id": "log-level", + "label": "Log level", + "regex": "^(debug|info|notice|warn|error|crit|alert|emerg)$", + "type": "select", + "containerClass": "z-23", + "pattern": "^(debug|info|notice|warn|error|crit|alert|emerg)$", + "inpType": "select", + "name": "Log level", + "values": [ + "alert", + "crit", + "debug", + "emerg", + "error", + "info", + "notice", + "warn" + ], + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": true, + "value": "info", + "method": "scheduler", + "prev_value": "info", + "popovers": [ + { + "iconName": "trespass", + "text": "inp_popover_method_disabled" + }, + { + "iconName": "globe", + "text": "inp_popover_global" + }, + { + "iconName": "info", + "text": "The level to use for error logs." + } + ] + }, + "DNS_RESOLVERS": { + "context": "global", + "default": "127.0.0.11", + "help": "DNS addresses of resolvers to use.", + "id": "dns-resolvers", + "label": "DNS resolvers", + "regex": "^(?! )(( *[^ ]+)(?!.*\\2))*$", + "type": "text", + "containerClass": "z-22", + "pattern": "^(?! )(( *[^ ]+)(?!.*\\2))*$", + "inpType": "input", + "name": "DNS resolvers", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "127.0.0.11", + "method": "default", + "prev_value": "127.0.0.11", + "popovers": [ + { + "iconName": "globe", + "text": "inp_popover_global" + }, + { + "iconName": "info", + "text": "DNS addresses of resolvers to use." + } + ] + }, + "DATASTORE_MEMORY_SIZE": { + "context": "global", + "default": "64m", + "help": "Size of the internal datastore.", + "id": "datastore-memory-size", + "label": "Datastore memory size", + "regex": "^\\d+[kKmMgG]?$", + "type": "text", + "containerClass": "z-21", + "pattern": "^\\d+[kKmMgG]?$", + "inpType": "input", + "name": "Datastore memory size", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "64m", + "method": "default", + "prev_value": "64m", + "popovers": [ + { + "iconName": "globe", + "text": "inp_popover_global" + }, + { + "iconName": "info", + "text": "Size of the internal datastore." + } + ] + }, + "CACHESTORE_MEMORY_SIZE": { + "context": "global", + "default": "64m", + "help": "Size of the internal cachestore.", + "id": "cachestore-memory-size", + "label": "Cachestore memory size", + "regex": "^\\d+[kKmMgG]?$", + "type": "text", + "containerClass": "z-20", + "pattern": "^\\d+[kKmMgG]?$", + "inpType": "input", + "name": "Cachestore memory size", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "64m", + "method": "default", + "prev_value": "64m", + "popovers": [ + { + "iconName": "globe", + "text": "inp_popover_global" + }, + { + "iconName": "info", + "text": "Size of the internal cachestore." + } + ] + }, + "CACHESTORE_IPC_MEMORY_SIZE": { + "context": "global", + "default": "16m", + "help": "Size of the internal cachestore (ipc).", + "id": "cachestore-ipc-memory-size", + "label": "Cachestore ipc memory size", + "regex": "^\\d+[kKmMgG]?$", + "type": "text", + "containerClass": "z-19", + "pattern": "^\\d+[kKmMgG]?$", + "inpType": "input", + "name": "Cachestore ipc memory size", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "16m", + "method": "default", + "prev_value": "16m", + "popovers": [ + { + "iconName": "globe", + "text": "inp_popover_global" + }, + { + "iconName": "info", + "text": "Size of the internal cachestore (ipc)." + } + ] + }, + "CACHESTORE_MISS_MEMORY_SIZE": { + "context": "global", + "default": "16m", + "help": "Size of the internal cachestore (miss).", + "id": "cachestore-miss-memory-size", + "label": "Cachestore miss memory size", + "regex": "^\\d+[kKmMgG]?$", + "type": "text", + "containerClass": "z-18", + "pattern": "^\\d+[kKmMgG]?$", + "inpType": "input", + "name": "Cachestore miss memory size", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "16m", + "method": "default", + "prev_value": "16m", + "popovers": [ + { + "iconName": "globe", + "text": "inp_popover_global" + }, + { + "iconName": "info", + "text": "Size of the internal cachestore (miss)." + } + ] + }, + "CACHESTORE_LOCKS_MEMORY_SIZE": { + "context": "global", + "default": "16m", + "help": "Size of the internal cachestore (locks).", + "id": "cachestore-locks-memory-size", + "label": "Cachestore locks memory size", + "regex": "^\\d+[kKmMgG]?$", + "type": "text", + "containerClass": "z-17", + "pattern": "^\\d+[kKmMgG]?$", + "inpType": "input", + "name": "Cachestore locks memory size", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "16m", + "method": "default", + "prev_value": "16m", + "popovers": [ + { + "iconName": "globe", + "text": "inp_popover_global" + }, + { + "iconName": "info", + "text": "Size of the internal cachestore (locks)." + } + ] + }, + "USE_API": { + "context": "global", + "default": "yes", + "help": "Activate the API to control BunkerWeb.", + "id": "use-api", + "label": "Activate API", + "regex": "^(yes|no)$", + "type": "check", + "containerClass": "z-16", + "pattern": "^(yes|no)$", + "inpType": "checkbox", + "name": "Activate API", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "yes", + "method": "default", + "prev_value": "yes", + "popovers": [ + { + "iconName": "globe", + "text": "inp_popover_global" + }, + { + "iconName": "info", + "text": "Activate the API to control BunkerWeb." + } + ] + }, + "API_HTTP_PORT": { + "context": "global", + "default": "5000", + "help": "Listen port number for the API.", + "id": "api-http-listen", + "label": "API port number", + "regex": "^\\d+$", + "type": "text", + "containerClass": "z-15", + "pattern": "^\\d+$", + "inpType": "input", + "name": "API port number", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "5000", + "method": "default", + "prev_value": "5000", + "popovers": [ + { + "iconName": "globe", + "text": "inp_popover_global" + }, + { + "iconName": "info", + "text": "Listen port number for the API." + } + ] + }, + "API_LISTEN_IP": { + "context": "global", + "default": "0.0.0.0", + "help": "Listen IP address for the API.", + "id": "api-ip-listen", + "label": "API listen IP", + "regex": "^.*$", + "type": "text", + "containerClass": "z-14", + "pattern": "^.*$", + "inpType": "input", + "name": "API listen IP", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "0.0.0.0", + "method": "default", + "prev_value": "0.0.0.0", + "popovers": [ + { + "iconName": "globe", + "text": "inp_popover_global" + }, + { + "iconName": "info", + "text": "Listen IP address for the API." + } + ] + }, + "API_SERVER_NAME": { + "context": "global", + "default": "bwapi", + "help": "Server name (virtual host) for the API.", + "id": "api-server-name", + "label": "API server name", + "regex": "^[^ ]{1,255}$", + "type": "text", + "containerClass": "z-13", + "pattern": "^[^ ]{1,255}$", + "inpType": "input", + "name": "API server name", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "bwapi", + "method": "default", + "prev_value": "bwapi", + "popovers": [ + { + "iconName": "globe", + "text": "inp_popover_global" + }, + { + "iconName": "info", + "text": "Server name (virtual host) for the API." + } + ] + }, + "API_WHITELIST_IP": { + "context": "global", + "default": "127.0.0.0/8", + "help": "List of IP/network allowed to contact the API.", + "id": "api-whitelist-ip", + "label": "API whitelist IP", + "regex": "^(?! )( *(((\\b25[0-5]|\\b2[0-4]\\d|\\b[01]?\\d\\d?)(\\.(25[0-5]|2[0-4]\\d|[01]?\\d\\d?)){3})(\\/([1-2][0-9]?|3[0-2]?|[04-9]))?|(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]Z{0,4}){0,4}%[0-9a-zA-Z]+|::(ffff(:0{1,4})?:)?((25[0-5]|(2[0-4]|1?\\d)?\\d)\\.){3}(25[0-5]|(2[0-4]|1?\\d)?\\d)|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1?\\d)?\\d)\\.){3}(25[0-5]|(2[0-4]|1?\\d)?\\d))(\\/(12[0-8]|1[01][0-9]|[0-9][0-9]?))?)(?!.*\\D\\2([^\\d\\/]|$)) *)*$", + "type": "text", + "containerClass": "z-12", + "pattern": "^(?! )( *(((\\b25[0-5]|\\b2[0-4]\\d|\\b[01]?\\d\\d?)(\\.(25[0-5]|2[0-4]\\d|[01]?\\d\\d?)){3})(\\/([1-2][0-9]?|3[0-2]?|[04-9]))?|(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]Z{0,4}){0,4}%[0-9a-zA-Z]+|::(ffff(:0{1,4})?:)?((25[0-5]|(2[0-4]|1?\\d)?\\d)\\.){3}(25[0-5]|(2[0-4]|1?\\d)?\\d)|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1?\\d)?\\d)\\.){3}(25[0-5]|(2[0-4]|1?\\d)?\\d))(\\/(12[0-8]|1[01][0-9]|[0-9][0-9]?))?)(?!.*\\D\\2([^\\d\\/]|$)) *)*$", + "inpType": "input", + "name": "API whitelist IP", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": true, + "value": "127.0.0.0/24 10.20.30.0/24", + "method": "scheduler", + "prev_value": "127.0.0.0/24 10.20.30.0/24", + "popovers": [ + { + "iconName": "trespass", + "text": "inp_popover_method_disabled" + }, + { + "iconName": "globe", + "text": "inp_popover_global" + }, + { + "iconName": "info", + "text": "List of IP/network allowed to contact the API." + } + ] + }, + "AUTOCONF_MODE": { + "context": "global", + "default": "no", + "help": "Enable Autoconf Docker integration.", + "id": "autoconf-mode", + "label": "Autoconf mode", + "regex": "^(yes|no)$", + "type": "check", + "containerClass": "z-11", + "pattern": "^(yes|no)$", + "inpType": "checkbox", + "name": "Autoconf mode", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "no", + "method": "default", + "prev_value": "no", + "popovers": [ + { + "iconName": "globe", + "text": "inp_popover_global" + }, + { + "iconName": "info", + "text": "Enable Autoconf Docker integration." + } + ] + }, + "SWARM_MODE": { + "context": "global", + "default": "no", + "help": "Enable Docker Swarm integration.", + "id": "swarm-mode", + "label": "Swarm mode", + "regex": "^(yes|no)$", + "type": "check", + "containerClass": "z-10", + "pattern": "^(yes|no)$", + "inpType": "checkbox", + "name": "Swarm mode", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "no", + "method": "default", + "prev_value": "no", + "popovers": [ + { + "iconName": "globe", + "text": "inp_popover_global" + }, + { + "iconName": "info", + "text": "Enable Docker Swarm integration." + } + ] + }, + "KUBERNETES_MODE": { + "context": "global", + "default": "no", + "help": "Enable Kubernetes integration.", + "id": "kubernetes-mode", + "label": "Kubernetes mode", + "regex": "^(yes|no)$", + "type": "check", + "containerClass": "z-9", + "pattern": "^(yes|no)$", + "inpType": "checkbox", + "name": "Kubernetes mode", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "no", + "method": "default", + "prev_value": "no", + "popovers": [ + { + "iconName": "globe", + "text": "inp_popover_global" + }, + { + "iconName": "info", + "text": "Enable Kubernetes integration." + } + ] + }, + "SERVER_TYPE": { + "context": "multisite", + "default": "http", + "help": "Server type : http or stream.", + "id": "server-type", + "label": "Server type", + "regex": "^(http|stream)$", + "type": "select", + "containerClass": "z-8", + "pattern": "^(http|stream)$", + "inpType": "select", + "name": "Server type", + "values": [ + "http", + "stream" + ], + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "http", + "method": "default", + "prev_value": "http", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Server type : http or stream." + } + ] + }, + "LISTEN_STREAM": { + "context": "multisite", + "default": "yes", + "help": "Enable listening for non-ssl (passthrough).", + "id": "listen-stream", + "label": "Listen stream", + "regex": "^(yes|no)$", + "type": "check", + "containerClass": "z-7", + "pattern": "^(yes|no)$", + "inpType": "checkbox", + "name": "Listen stream", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "yes", + "method": "default", + "prev_value": "yes", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Enable listening for non-ssl (passthrough)." + } + ] + }, + "LISTEN_STREAM_PORT": { + "context": "multisite", + "default": "1337", + "help": "Listening port for non-ssl (passthrough).", + "id": "listen-stream-port", + "label": "Listen stream port", + "regex": "^[0-9]+$", + "type": "text", + "containerClass": "z-6", + "pattern": "^[0-9]+$", + "inpType": "input", + "name": "Listen stream port", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "1337", + "method": "default", + "prev_value": "1337", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Listening port for non-ssl (passthrough)." + } + ] + }, + "LISTEN_STREAM_PORT_SSL": { + "context": "multisite", + "default": "4242", + "help": "Listening port for ssl (passthrough).", + "id": "listen-stream-port-ssl", + "label": "Listen stream port ssl", + "regex": "^[0-9]+$", + "type": "text", + "containerClass": "z-5", + "pattern": "^[0-9]+$", + "inpType": "input", + "name": "Listen stream port ssl", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "4242", + "method": "default", + "prev_value": "4242", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Listening port for ssl (passthrough)." + } + ] + }, + "USE_UDP": { + "context": "multisite", + "default": "no", + "help": "UDP listen instead of TCP (stream).", + "id": "use-udp", + "label": "Listen UDP", + "regex": "^(yes|no)$", + "type": "check", + "containerClass": "z-4", + "pattern": "^(yes|no)$", + "inpType": "checkbox", + "name": "Listen UDP", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "no", + "method": "default", + "prev_value": "no", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "UDP listen instead of TCP (stream)." + } + ] + }, + "USE_IPV6": { + "context": "global", + "default": "no", + "help": "Enable IPv6 connectivity.", + "id": "use-ipv6", + "label": "Use IPv6", + "regex": "^(yes|no)$", + "type": "check", + "containerClass": "z-3", + "pattern": "^(yes|no)$", + "inpType": "checkbox", + "name": "Use IPv6", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "no", + "method": "default", + "prev_value": "no", + "popovers": [ + { + "iconName": "globe", + "text": "inp_popover_global" + }, + { + "iconName": "info", + "text": "Enable IPv6 connectivity." + } + ] + }, + "IS_DRAFT": { + "context": "multisite", + "default": "no", + "help": "Internal use : set to yes when the service is in draft mode.", + "id": "internal-use-draft", + "label": "internal use draft", + "regex": "^(yes|no)$", + "type": "check", + "containerClass": "z-2", + "pattern": "^(yes|no)$", + "inpType": "checkbox", + "name": "internal use draft", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "no", + "method": "default", + "prev_value": "no", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Internal use : set to yes when the service is in draft mode." + } + ] + }, + "TIMERS_LOG_LEVEL": { + "context": "global", + "default": "debug", + "help": "Log level for timers.", + "id": "timers-log-level", + "label": "Timers log level", + "regex": "^(debug|info|notice|warn|err|crit|alert|emerg)$", + "type": "select", + "containerClass": "z-1", + "pattern": "^(debug|info|notice|warn|err|crit|alert|emerg)$", + "inpType": "select", + "name": "Timers log level", + "values": [ + "alert", + "crit", + "debug", + "emerg", + "err", + "info", + "notice", + "warn" + ], + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "debug", + "method": "default", + "prev_value": "debug", + "popovers": [ + { + "iconName": "globe", + "text": "inp_popover_global" + }, + { + "iconName": "info", + "text": "Log level for timers." + } + ] + }, + "BUNKERWEB_INSTANCES": { + "context": "global", + "default": "127.0.0.1", + "help": "List of BunkerWeb instances separated with spaces (format : fqdn-or-ip:5000 http://fqdn-or-ip:5000)", + "id": "bunkerweb-instances", + "label": "BunkerWeb instances", + "regex": "^.*$", + "type": "text", + "containerClass": "z-0", + "pattern": "^.*$", + "inpType": "input", + "name": "BunkerWeb instances", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": true, + "value": "bunkerweb", + "method": "scheduler", + "prev_value": "bunkerweb", + "popovers": [ + { + "iconName": "trespass", + "text": "inp_popover_method_disabled" + }, + { + "iconName": "globe", + "text": "inp_popover_global" + }, + { + "iconName": "info", + "text": "List of BunkerWeb instances separated with spaces (format : fqdn-or-ip:5000 http://fqdn-or-ip:5000)" + } + ] + } + }, + "checksum": null + }, + { + "id": "antibot", + "stream": "no", + "name": "Antibot", + "description": "Bot detection by using a challenge.", + "version": "1.0", + "type": "core", + "method": "manual", + "page": true, + "settings": { + "USE_ANTIBOT": { + "context": "multisite", + "default": "no", + "help": "Activate antibot feature.", + "id": "use-antibot", + "label": "Antibot challenge", + "regex": "^(no|cookie|javascript|captcha|recaptcha|hcaptcha|turnstile)$", + "type": "select", + "containerClass": "z-10", + "pattern": "^(no|cookie|javascript|captcha|recaptcha|hcaptcha|turnstile)$", + "inpType": "select", + "name": "Antibot challenge", + "values": [ + "captcha", + "cookie", + "hcaptcha", + "javascript", + "no", + "recaptcha", + "turnstile" + ], + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "no", + "method": "default", + "prev_value": "no", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Activate antibot feature." + } + ] + }, + "ANTIBOT_URI": { + "context": "multisite", + "default": "/challenge", + "help": "Unused URI that clients will be redirected to to solve the challenge.", + "id": "antibot-uri", + "label": "Antibot URL", + "regex": "^\\/[\\w\\].~:\\/?#\\[@!$\\&'\\(\\)*+,;=\\-]*$", + "type": "text", + "containerClass": "z-9", + "pattern": "^\\/[\\w\\].~:\\/?#\\[@!$\\&'\\(\\)*+,;=\\-]*$", + "inpType": "input", + "name": "Antibot URL", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "/challenge", + "method": "default", + "prev_value": "/challenge", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Unused URI that clients will be redirected to to solve the challenge." + } + ] + }, + "ANTIBOT_TIME_RESOLVE": { + "context": "multisite", + "default": "60", + "help": "Maximum time (in seconds) clients have to resolve the challenge. Once this time has passed, a new challenge will be generated.", + "id": "antibot-time-resolve", + "label": "Time to resolve", + "regex": "^[0-9]+$", + "type": "text", + "containerClass": "z-8", + "pattern": "^[0-9]+$", + "inpType": "input", + "name": "Time to resolve", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "60", + "method": "default", + "prev_value": "60", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Maximum time (in seconds) clients have to resolve the challenge. Once this time has passed, a new challenge will be generated." + } + ] + }, + "ANTIBOT_TIME_VALID": { + "context": "multisite", + "default": "86400", + "help": "Maximum validity time of solved challenges. Once this time has passed, clients will need to resolve a new one.", + "id": "antibot-time-valid", + "label": "Time valid", + "regex": "^[0-9]+$", + "type": "text", + "containerClass": "z-7", + "pattern": "^[0-9]+$", + "inpType": "input", + "name": "Time valid", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "86400", + "method": "default", + "prev_value": "86400", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Maximum validity time of solved challenges. Once this time has passed, clients will need to resolve a new one." + } + ] + }, + "ANTIBOT_RECAPTCHA_SCORE": { + "context": "multisite", + "default": "0.7", + "help": "Minimum score required for reCAPTCHA challenge.", + "id": "antibot-recaptcha-score", + "label": "reCAPTCHA score", + "regex": "^(0\\.[1-9]|1\\.0)$", + "type": "text", + "containerClass": "z-6", + "pattern": "^(0\\.[1-9]|1\\.0)$", + "inpType": "input", + "name": "reCAPTCHA score", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "0.7", + "method": "default", + "prev_value": "0.7", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Minimum score required for reCAPTCHA challenge." + } + ] + }, + "ANTIBOT_RECAPTCHA_SITEKEY": { + "context": "multisite", + "default": "", + "help": "Sitekey for reCAPTCHA challenge.", + "id": "antibot-recaptcha-sitekey", + "label": "reCAPTCHA sitekey", + "regex": "^[\\w\\-]*$", + "type": "text", + "containerClass": "z-5", + "pattern": "^[\\w\\-]*$", + "inpType": "input", + "name": "reCAPTCHA sitekey", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "", + "method": "default", + "prev_value": "", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Sitekey for reCAPTCHA challenge." + } + ] + }, + "ANTIBOT_RECAPTCHA_SECRET": { + "context": "multisite", + "default": "", + "help": "Secret for reCAPTCHA challenge.", + "id": "antibot-recaptcha-secret", + "label": "reCAPTCHA secret", + "regex": "^[\\w\\-]*$", + "type": "password", + "containerClass": "z-4", + "pattern": "^[\\w\\-]*$", + "inpType": "input", + "name": "reCAPTCHA secret", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "", + "method": "default", + "prev_value": "", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Secret for reCAPTCHA challenge." + } + ] + }, + "ANTIBOT_HCAPTCHA_SITEKEY": { + "context": "multisite", + "default": "", + "help": "Sitekey for hCaptcha challenge.", + "id": "antibot-hcaptcha-sitekey", + "label": "hCaptcha sitekey", + "regex": "^[a-zA-Z0-9\\-]*$", + "type": "text", + "containerClass": "z-3", + "pattern": "^[a-zA-Z0-9\\-]*$", + "inpType": "input", + "name": "hCaptcha sitekey", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "", + "method": "default", + "prev_value": "", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Sitekey for hCaptcha challenge." + } + ] + }, + "ANTIBOT_HCAPTCHA_SECRET": { + "context": "multisite", + "default": "", + "help": "Secret for hCaptcha challenge.", + "id": "antibot-hcaptcha-secret", + "label": "hCaptcha secret", + "regex": "^\\w*$", + "type": "password", + "containerClass": "z-2", + "pattern": "^\\w*$", + "inpType": "input", + "name": "hCaptcha secret", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "", + "method": "default", + "prev_value": "", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Secret for hCaptcha challenge." + } + ] + }, + "ANTIBOT_TURNSTILE_SITEKEY": { + "context": "multisite", + "default": "", + "help": "Sitekey for Turnstile challenge.", + "id": "antibot-turnstile-sitekey", + "label": "Turnstile sitekey", + "regex": "^(0x[\\w\\-]+)?$", + "type": "text", + "containerClass": "z-1", + "pattern": "^(0x[\\w\\-]+)?$", + "inpType": "input", + "name": "Turnstile sitekey", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "", + "method": "default", + "prev_value": "", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Sitekey for Turnstile challenge." + } + ] + }, + "ANTIBOT_TURNSTILE_SECRET": { + "context": "multisite", + "default": "", + "help": "Secret for Turnstile challenge.", + "id": "antibot-turnstile-secret", + "label": "Turnstile secret", + "regex": "^(0x[\\w\\-]+)?$", + "type": "password", + "containerClass": "z-0", + "pattern": "^(0x[\\w\\-]+)?$", + "inpType": "input", + "name": "Turnstile secret", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "", + "method": "default", + "prev_value": "", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Secret for Turnstile challenge." + } + ] + } + }, + "checksum": null + }, + { + "id": "authbasic", + "stream": "no", + "name": "Auth basic", + "description": "Enforce login before accessing a resource or the whole site using HTTP basic auth method.", + "version": "1.0", + "type": "core", + "method": "manual", + "page": false, + "settings": { + "USE_AUTH_BASIC": { + "context": "multisite", + "default": "no", + "help": "Use HTTP basic auth", + "id": "use-auth-basic", + "label": "Use HTTP basic auth", + "regex": "^(yes|no)$", + "type": "check", + "containerClass": "z-4", + "pattern": "^(yes|no)$", + "inpType": "checkbox", + "name": "Use HTTP basic auth", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "no", + "method": "default", + "prev_value": "no", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Use HTTP basic auth" + } + ] + }, + "AUTH_BASIC_LOCATION": { + "context": "multisite", + "default": "sitewide", + "help": "URL of the protected resource or sitewide value.", + "id": "auth-basic-location", + "label": "Auth basic Location", + "regex": "^(sitewide|/[a-zA-Z0-9.\\/\\-]*)$", + "type": "text", + "containerClass": "z-3", + "pattern": "^(sitewide|/[a-zA-Z0-9.\\/\\-]*)$", + "inpType": "input", + "name": "Auth basic Location", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "sitewide", + "method": "default", + "prev_value": "sitewide", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "URL of the protected resource or sitewide value." + } + ] + }, + "AUTH_BASIC_USER": { + "context": "multisite", + "default": "changeme", + "help": "Username", + "id": "auth-basic-user", + "label": "Auth basic Username", + "regex": "^[\\w\\-]+", + "type": "text", + "containerClass": "z-2", + "pattern": "^[\\w\\-]+", + "inpType": "input", + "name": "Auth basic Username", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "changeme", + "method": "default", + "prev_value": "changeme", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Username" + } + ] + }, + "AUTH_BASIC_PASSWORD": { + "context": "multisite", + "default": "changeme", + "help": "Password", + "id": "auth-basic-password", + "label": "Password", + "regex": "^.+", + "type": "password", + "containerClass": "z-1", + "pattern": "^.+", + "inpType": "input", + "name": "Password", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "changeme", + "method": "default", + "prev_value": "changeme", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Password" + } + ] + }, + "AUTH_BASIC_TEXT": { + "context": "multisite", + "default": "Restricted area", + "help": "Text to display", + "id": "auth-basic-text", + "label": "Text", + "regex": "^.+", + "type": "text", + "containerClass": "z-0", + "pattern": "^.+", + "inpType": "input", + "name": "Text", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "Restricted area", + "method": "default", + "prev_value": "Restricted area", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Text to display" + } + ] + } + }, + "checksum": null + }, + { + "id": "backup", + "stream": "yes", + "name": "Backup", + "description": "Backup your data to a custom location. Ensure the safety and availability of your important files by creating regular backups.", + "version": "1.0", + "type": "core", + "method": "manual", + "page": true, + "settings": { + "USE_BACKUP": { + "context": "global", + "default": "yes", + "help": "Enable or disable the backup feature", + "id": "use-backup", + "label": "Activate automatic backup", + "regex": "^(yes|no)$", + "type": "check", + "containerClass": "z-3", + "pattern": "^(yes|no)$", + "inpType": "checkbox", + "name": "Activate automatic backup", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "yes", + "method": "default", + "prev_value": "yes", + "popovers": [ + { + "iconName": "globe", + "text": "inp_popover_global" + }, + { + "iconName": "info", + "text": "Enable or disable the backup feature" + } + ] + }, + "BACKUP_SCHEDULE": { + "context": "global", + "default": "daily", + "help": "The frequency of the backup (daily, weekly or monthly)", + "id": "backup-schedule", + "label": "Backup schedule", + "regex": "^(daily|weekly|monthly)$", + "type": "select", + "containerClass": "z-2", + "pattern": "^(daily|weekly|monthly)$", + "inpType": "select", + "name": "Backup schedule", + "values": [ + "daily", + "monthly", + "weekly" + ], + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "daily", + "method": "default", + "prev_value": "daily", + "popovers": [ + { + "iconName": "globe", + "text": "inp_popover_global" + }, + { + "iconName": "info", + "text": "The frequency of the backup (daily, weekly or monthly)" + } + ] + }, + "BACKUP_ROTATION": { + "context": "global", + "default": "7", + "help": "The number of backups to keep", + "id": "backup-rotation", + "label": "Backup rotation", + "regex": "^[1-9][0-9]*$", + "type": "text", + "containerClass": "z-1", + "pattern": "^[1-9][0-9]*$", + "inpType": "input", + "name": "Backup rotation", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "7", + "method": "default", + "prev_value": "7", + "popovers": [ + { + "iconName": "globe", + "text": "inp_popover_global" + }, + { + "iconName": "info", + "text": "The number of backups to keep" + } + ] + }, + "BACKUP_DIRECTORY": { + "context": "global", + "default": "/var/lib/bunkerweb/backups", + "help": "The directory where the backup will be stored", + "id": "backup-directory", + "label": "Backup directory", + "regex": "^.*$", + "type": "text", + "containerClass": "z-0", + "pattern": "^.*$", + "inpType": "input", + "name": "Backup directory", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "/var/lib/bunkerweb/backups", + "method": "default", + "prev_value": "/var/lib/bunkerweb/backups", + "popovers": [ + { + "iconName": "globe", + "text": "inp_popover_global" + }, + { + "iconName": "info", + "text": "The directory where the backup will be stored" + } + ] + } + }, + "checksum": null, + "bwcli": { + "list": "list.py", + "restore": "restore.py", + "save": "save.py" + } + }, + { + "id": "badbehavior", + "stream": "yes", + "name": "Bad behavior", + "description": "Ban IP generating too much 'bad' HTTP status code in a period of time.", + "version": "1.0", + "type": "core", + "method": "manual", + "page": true, + "settings": { + "USE_BAD_BEHAVIOR": { + "context": "multisite", + "default": "yes", + "help": "Activate Bad behavior feature.", + "id": "use-bad-behavior", + "label": "Activate bad behavior", + "regex": "^(yes|no)$", + "type": "check", + "containerClass": "z-4", + "pattern": "^(yes|no)$", + "inpType": "checkbox", + "name": "Activate bad behavior", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "yes", + "method": "default", + "prev_value": "yes", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Activate Bad behavior feature." + } + ] + }, + "BAD_BEHAVIOR_STATUS_CODES": { + "context": "multisite", + "default": "400 401 403 404 405 429 444", + "help": "List of HTTP status codes considered as 'bad'.", + "id": "bad-behavior-status-code", + "label": "Bad status codes", + "regex": "^( *([1-5]\\d{2})(?!.*\\2) *)+$", + "type": "text", + "containerClass": "z-3", + "pattern": "^( *([1-5]\\d{2})(?!.*\\2) *)+$", + "inpType": "input", + "name": "Bad status codes", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "400 401 403 404 405 429 444", + "method": "default", + "prev_value": "400 401 403 404 405 429 444", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "List of HTTP status codes considered as 'bad'." + } + ] + }, + "BAD_BEHAVIOR_THRESHOLD": { + "context": "multisite", + "default": "10", + "help": "Maximum number of 'bad' HTTP status codes within the period of time before IP is banned.", + "id": "bad-behavior-threshold", + "label": "Threshold", + "regex": "^[1-9][0-9]*", + "type": "text", + "containerClass": "z-2", + "pattern": "^[1-9][0-9]*", + "inpType": "input", + "name": "Threshold", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "10", + "method": "default", + "prev_value": "10", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Maximum number of 'bad' HTTP status codes within the period of time before IP is banned." + } + ] + }, + "BAD_BEHAVIOR_COUNT_TIME": { + "context": "multisite", + "default": "60", + "help": "Period of time (in seconds) during which we count 'bad' HTTP status codes.", + "id": "bad-behavior-period", + "label": "Period (in seconds)", + "regex": "^\\d+", + "type": "text", + "containerClass": "z-1", + "pattern": "^\\d+", + "inpType": "input", + "name": "Period (in seconds)", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "60", + "method": "default", + "prev_value": "60", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Period of time (in seconds) during which we count 'bad' HTTP status codes." + } + ] + }, + "BAD_BEHAVIOR_BAN_TIME": { + "context": "multisite", + "default": "86400", + "help": "The duration time (in seconds) of a ban when the corresponding IP has reached the threshold.", + "id": "bad-behavior-ban-time", + "label": "Ban duration (in seconds)", + "regex": "^\\d+", + "type": "text", + "containerClass": "z-0", + "pattern": "^\\d+", + "inpType": "input", + "name": "Ban duration (in seconds)", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "86400", + "method": "default", + "prev_value": "86400", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "The duration time (in seconds) of a ban when the corresponding IP has reached the threshold." + } + ] + } + }, + "checksum": null + }, + { + "id": "blacklist", + "stream": "partial", + "name": "Blacklist", + "description": "Deny access based on internal and external IP/network/rDNS/ASN blacklists.", + "version": "1.0", + "type": "core", + "method": "manual", + "page": true, + "settings": { + "USE_BLACKLIST": { + "context": "multisite", + "default": "yes", + "help": "Activate blacklist feature.", + "id": "use-blacklist", + "label": "Activate blacklisting", + "regex": "^(yes|no)$", + "type": "check", + "containerClass": "z-21", + "pattern": "^(yes|no)$", + "inpType": "checkbox", + "name": "Activate blacklisting", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": true, + "value": "no", + "method": "scheduler", + "prev_value": "no", + "popovers": [ + { + "iconName": "trespass", + "text": "inp_popover_method_disabled" + }, + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Activate blacklist feature." + } + ] + }, + "BLACKLIST_IP": { + "context": "multisite", + "default": "", + "help": "List of IP/network, separated with spaces, to block.", + "id": "blacklist-ip", + "label": "Blacklist IP/network", + "regex": "^(?! )( *(((\\b25[0-5]|\\b2[0-4]\\d|\\b[01]?\\d\\d?)(\\.(25[0-5]|2[0-4]\\d|[01]?\\d\\d?)){3})(\\/([1-2][0-9]?|3[0-2]?|[04-9]))?|(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]Z{0,4}){0,4}%[0-9a-zA-Z]+|::(ffff(:0{1,4})?:)?((25[0-5]|(2[0-4]|1?\\d)?\\d)\\.){3}(25[0-5]|(2[0-4]|1?\\d)?\\d)|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1?\\d)?\\d)\\.){3}(25[0-5]|(2[0-4]|1?\\d)?\\d))(\\/(12[0-8]|1[01][0-9]|[0-9][0-9]?))?)(?!.*\\D\\2([^\\d\\/]|$)) *)*$", + "type": "text", + "containerClass": "z-20", + "pattern": "^(?! )( *(((\\b25[0-5]|\\b2[0-4]\\d|\\b[01]?\\d\\d?)(\\.(25[0-5]|2[0-4]\\d|[01]?\\d\\d?)){3})(\\/([1-2][0-9]?|3[0-2]?|[04-9]))?|(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]Z{0,4}){0,4}%[0-9a-zA-Z]+|::(ffff(:0{1,4})?:)?((25[0-5]|(2[0-4]|1?\\d)?\\d)\\.){3}(25[0-5]|(2[0-4]|1?\\d)?\\d)|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1?\\d)?\\d)\\.){3}(25[0-5]|(2[0-4]|1?\\d)?\\d))(\\/(12[0-8]|1[01][0-9]|[0-9][0-9]?))?)(?!.*\\D\\2([^\\d\\/]|$)) *)*$", + "inpType": "input", + "name": "Blacklist IP/network", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "", + "method": "default", + "prev_value": "", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "List of IP/network, separated with spaces, to block." + } + ] + }, + "BLACKLIST_RDNS": { + "context": "multisite", + "default": ".shodan.io .censys.io", + "help": "List of reverse DNS suffixes, separated with spaces, to block.", + "id": "blacklist-rdns", + "label": "Blacklist reverse DNS", + "regex": "^( *(([^ ]+)(?!.*\\3( |$))) *)*$", + "type": "text", + "containerClass": "z-19", + "pattern": "^( *(([^ ]+)(?!.*\\3( |$))) *)*$", + "inpType": "input", + "name": "Blacklist reverse DNS", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": ".shodan.io .censys.io", + "method": "default", + "prev_value": ".shodan.io .censys.io", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "List of reverse DNS suffixes, separated with spaces, to block." + } + ] + }, + "BLACKLIST_RDNS_GLOBAL": { + "context": "multisite", + "default": "yes", + "help": "Only perform RDNS blacklist checks on global IP addresses.", + "id": "blacklist-rdns-global", + "label": "Blacklist reverse DNS global IPs", + "regex": "^(yes|no)$", + "type": "check", + "containerClass": "z-18", + "pattern": "^(yes|no)$", + "inpType": "checkbox", + "name": "Blacklist reverse DNS global IPs", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "yes", + "method": "default", + "prev_value": "yes", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Only perform RDNS blacklist checks on global IP addresses." + } + ] + }, + "BLACKLIST_ASN": { + "context": "multisite", + "default": "", + "help": "List of ASN numbers, separated with spaces, to block.", + "id": "blacklist-asn", + "label": "Blacklist ASN", + "regex": "^^( *((ASN?)?(\\d+)\\b(?!.*[SN ]\\4\\b)) *)*$", + "type": "text", + "containerClass": "z-17", + "pattern": "^^( *((ASN?)?(\\d+)\\b(?!.*[SN ]\\4\\b)) *)*$", + "inpType": "input", + "name": "Blacklist ASN", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "", + "method": "default", + "prev_value": "", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "List of ASN numbers, separated with spaces, to block." + } + ] + }, + "BLACKLIST_USER_AGENT": { + "context": "multisite", + "default": "", + "help": "List of User-Agent (PCRE regex), separated with spaces, to block.", + "id": "blacklist-user-agent", + "label": "Blacklist User-Agent", + "regex": "^.*$", + "type": "text", + "containerClass": "z-16", + "pattern": "^.*$", + "inpType": "input", + "name": "Blacklist User-Agent", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "", + "method": "default", + "prev_value": "", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "List of User-Agent (PCRE regex), separated with spaces, to block." + } + ] + }, + "BLACKLIST_URI": { + "context": "multisite", + "default": "", + "help": "List of URI (PCRE regex), separated with spaces, to block.", + "id": "blacklist-uri", + "label": "Blacklist URI", + "regex": "^( *(.*)(?!.*\\2(?!.)) *)*$", + "type": "text", + "containerClass": "z-15", + "pattern": "^( *(.*)(?!.*\\2(?!.)) *)*$", + "inpType": "input", + "name": "Blacklist URI", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "", + "method": "default", + "prev_value": "", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "List of URI (PCRE regex), separated with spaces, to block." + } + ] + }, + "BLACKLIST_IGNORE_IP": { + "context": "multisite", + "default": "", + "help": "List of IP/network, separated with spaces, to ignore in the blacklist.", + "id": "blacklist-ignore-ip", + "label": "Blacklist ignore IP/network", + "regex": "^(?! )( *(((\\b25[0-5]|\\b2[0-4]\\d|\\b[01]?\\d\\d?)(\\.(25[0-5]|2[0-4]\\d|[01]?\\d\\d?)){3})(\\/([1-2][0-9]?|3[0-2]?|[04-9]))?|(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]Z{0,4}){0,4}%[0-9a-zA-Z]+|::(ffff(:0{1,4})?:)?((25[0-5]|(2[0-4]|1?\\d)?\\d)\\.){3}(25[0-5]|(2[0-4]|1?\\d)?\\d)|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1?\\d)?\\d)\\.){3}(25[0-5]|(2[0-4]|1?\\d)?\\d))(\\/(12[0-8]|1[01][0-9]|[0-9][0-9]?))?)(?!.*\\D\\2([^\\d\\/]|$)) *)*$", + "type": "text", + "containerClass": "z-14", + "pattern": "^(?! )( *(((\\b25[0-5]|\\b2[0-4]\\d|\\b[01]?\\d\\d?)(\\.(25[0-5]|2[0-4]\\d|[01]?\\d\\d?)){3})(\\/([1-2][0-9]?|3[0-2]?|[04-9]))?|(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]Z{0,4}){0,4}%[0-9a-zA-Z]+|::(ffff(:0{1,4})?:)?((25[0-5]|(2[0-4]|1?\\d)?\\d)\\.){3}(25[0-5]|(2[0-4]|1?\\d)?\\d)|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1?\\d)?\\d)\\.){3}(25[0-5]|(2[0-4]|1?\\d)?\\d))(\\/(12[0-8]|1[01][0-9]|[0-9][0-9]?))?)(?!.*\\D\\2([^\\d\\/]|$)) *)*$", + "inpType": "input", + "name": "Blacklist ignore IP/network", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "", + "method": "default", + "prev_value": "", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "List of IP/network, separated with spaces, to ignore in the blacklist." + } + ] + }, + "BLACKLIST_IGNORE_RDNS": { + "context": "multisite", + "default": "", + "help": "List of reverse DNS suffixes, separated with spaces, to ignore in the blacklist.", + "id": "blacklist-ignore-rdns", + "label": "Blacklist ignore reverse DNS", + "regex": "^( *(([^ ]+)(?!.*\\3( |$))) *)*$", + "type": "text", + "containerClass": "z-13", + "pattern": "^( *(([^ ]+)(?!.*\\3( |$))) *)*$", + "inpType": "input", + "name": "Blacklist ignore reverse DNS", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "", + "method": "default", + "prev_value": "", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "List of reverse DNS suffixes, separated with spaces, to ignore in the blacklist." + } + ] + }, + "BLACKLIST_IGNORE_ASN": { + "context": "multisite", + "default": "", + "help": "List of ASN numbers, separated with spaces, to ignore in the blacklist.", + "id": "blacklist-ignore-asn", + "label": "Blacklist ignore ASN", + "regex": "^^( *((ASN?)?(\\d+)\\b(?!.*[SN ]\\4\\b)) *)*$", + "type": "text", + "containerClass": "z-12", + "pattern": "^^( *((ASN?)?(\\d+)\\b(?!.*[SN ]\\4\\b)) *)*$", + "inpType": "input", + "name": "Blacklist ignore ASN", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "", + "method": "default", + "prev_value": "", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "List of ASN numbers, separated with spaces, to ignore in the blacklist." + } + ] + }, + "BLACKLIST_IGNORE_USER_AGENT": { + "context": "multisite", + "default": "", + "help": "List of User-Agent (PCRE regex), separated with spaces, to ignore in the blacklist.", + "id": "blacklist-ignore-user-agent", + "label": "Blacklist ignore User-Agent", + "regex": "^.*$", + "type": "text", + "containerClass": "z-11", + "pattern": "^.*$", + "inpType": "input", + "name": "Blacklist ignore User-Agent", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "", + "method": "default", + "prev_value": "", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "List of User-Agent (PCRE regex), separated with spaces, to ignore in the blacklist." + } + ] + }, + "BLACKLIST_IGNORE_URI": { + "context": "multisite", + "default": "", + "help": "List of URI (PCRE regex), separated with spaces, to ignore in the blacklist.", + "id": "blacklist-ignore-uri", + "label": "Blacklist ignore URI", + "regex": "^( *(.*)(?!.*\\2(?!.)) *)*$", + "type": "text", + "containerClass": "z-10", + "pattern": "^( *(.*)(?!.*\\2(?!.)) *)*$", + "inpType": "input", + "name": "Blacklist ignore URI", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "", + "method": "default", + "prev_value": "", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "List of URI (PCRE regex), separated with spaces, to ignore in the blacklist." + } + ] + }, + "BLACKLIST_IP_URLS": { + "context": "global", + "default": "https://www.dan.me.uk/torlist/?exit", + "help": "List of URLs, separated with spaces, containing bad IP/network to block.", + "id": "blacklist-ip-urls", + "label": "Blacklist IP/network URLs", + "regex": "^( *((https?:\\/\\/|file:\\/\\/\\/)[\\-\\w@:%.+~#=]+[\\-\\w\\(\\)!@:%+.~#?&\\/=$]*)(?!.*\\2(?!.)) *)*$", + "type": "text", + "containerClass": "z-9", + "pattern": "^( *((https?:\\/\\/|file:\\/\\/\\/)[\\-\\w@:%.+~#=]+[\\-\\w\\(\\)!@:%+.~#?&\\/=$]*)(?!.*\\2(?!.)) *)*$", + "inpType": "input", + "name": "Blacklist IP/network URLs", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "https://www.dan.me.uk/torlist/?exit", + "method": "default", + "prev_value": "https://www.dan.me.uk/torlist/?exit", + "popovers": [ + { + "iconName": "globe", + "text": "inp_popover_global" + }, + { + "iconName": "info", + "text": "List of URLs, separated with spaces, containing bad IP/network to block." + } + ] + }, + "BLACKLIST_RDNS_URLS": { + "context": "global", + "default": "", + "help": "List of URLs, separated with spaces, containing reverse DNS suffixes to block.", + "id": "blacklist-rdns-urls", + "label": "Blacklist reverse DNS URLs", + "regex": "^( *((https?:\\/\\/|file:\\/\\/\\/)[\\-\\w@:%.+~#=]+[\\-\\w\\(\\)!@:%+.~#?&\\/=$]*)(?!.*\\2(?!.)) *)*$", + "type": "text", + "containerClass": "z-8", + "pattern": "^( *((https?:\\/\\/|file:\\/\\/\\/)[\\-\\w@:%.+~#=]+[\\-\\w\\(\\)!@:%+.~#?&\\/=$]*)(?!.*\\2(?!.)) *)*$", + "inpType": "input", + "name": "Blacklist reverse DNS URLs", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "", + "method": "default", + "prev_value": "", + "popovers": [ + { + "iconName": "globe", + "text": "inp_popover_global" + }, + { + "iconName": "info", + "text": "List of URLs, separated with spaces, containing reverse DNS suffixes to block." + } + ] + }, + "BLACKLIST_ASN_URLS": { + "context": "global", + "default": "", + "help": "List of URLs, separated with spaces, containing ASN to block.", + "id": "blacklist-asn-urls", + "label": "Blacklist ASN URLs", + "regex": "^( *((https?:\\/\\/|file:\\/\\/\\/)[\\-\\w@:%.+~#=]+[\\-\\w\\(\\)!@:%+.~#?&\\/=$]*)(?!.*\\2(?!.)) *)*$", + "type": "text", + "containerClass": "z-7", + "pattern": "^( *((https?:\\/\\/|file:\\/\\/\\/)[\\-\\w@:%.+~#=]+[\\-\\w\\(\\)!@:%+.~#?&\\/=$]*)(?!.*\\2(?!.)) *)*$", + "inpType": "input", + "name": "Blacklist ASN URLs", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "", + "method": "default", + "prev_value": "", + "popovers": [ + { + "iconName": "globe", + "text": "inp_popover_global" + }, + { + "iconName": "info", + "text": "List of URLs, separated with spaces, containing ASN to block." + } + ] + }, + "BLACKLIST_USER_AGENT_URLS": { + "context": "global", + "default": "https://raw.githubusercontent.com/mitchellkrogza/nginx-ultimate-bad-bot-blocker/master/_generator_lists/bad-user-agents.list", + "help": "List of URLs, separated with spaces, containing bad User-Agent to block.", + "id": "blacklist-user-agent-urls", + "label": "Blacklist User-Agent URLs", + "regex": "^( *((https?:\\/\\/|file:\\/\\/\\/)[\\-\\w@:%.+~#=]+[\\-\\w\\(\\)!@:%+.~#?&\\/=$]*)(?!.*\\2(?!.)) *)*$", + "type": "text", + "containerClass": "z-6", + "pattern": "^( *((https?:\\/\\/|file:\\/\\/\\/)[\\-\\w@:%.+~#=]+[\\-\\w\\(\\)!@:%+.~#?&\\/=$]*)(?!.*\\2(?!.)) *)*$", + "inpType": "input", + "name": "Blacklist User-Agent URLs", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "https://raw.githubusercontent.com/mitchellkrogza/nginx-ultimate-bad-bot-blocker/master/_generator_lists/bad-user-agents.list", + "method": "default", + "prev_value": "https://raw.githubusercontent.com/mitchellkrogza/nginx-ultimate-bad-bot-blocker/master/_generator_lists/bad-user-agents.list", + "popovers": [ + { + "iconName": "globe", + "text": "inp_popover_global" + }, + { + "iconName": "info", + "text": "List of URLs, separated with spaces, containing bad User-Agent to block." + } + ] + }, + "BLACKLIST_URI_URLS": { + "context": "global", + "default": "", + "help": "List of URLs, separated with spaces, containing bad URI to block.", + "id": "blacklist-uri-urls", + "label": "Blacklist URI URLs", + "regex": "^( *((https?:\\/\\/|file:\\/\\/\\/)[\\-\\w@:%.+~#=]+[\\-\\w\\(\\)!@:%+.~#?&\\/=$]*)(?!.*\\2(?!.)) *)*$", + "type": "text", + "containerClass": "z-5", + "pattern": "^( *((https?:\\/\\/|file:\\/\\/\\/)[\\-\\w@:%.+~#=]+[\\-\\w\\(\\)!@:%+.~#?&\\/=$]*)(?!.*\\2(?!.)) *)*$", + "inpType": "input", + "name": "Blacklist URI URLs", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "", + "method": "default", + "prev_value": "", + "popovers": [ + { + "iconName": "globe", + "text": "inp_popover_global" + }, + { + "iconName": "info", + "text": "List of URLs, separated with spaces, containing bad URI to block." + } + ] + }, + "BLACKLIST_IGNORE_IP_URLS": { + "context": "global", + "default": "", + "help": "List of URLs, separated with spaces, containing IP/network to ignore in the blacklist.", + "id": "blacklist-ignore-ip-urls", + "label": "Blacklist ignore IP/network URLs", + "regex": "^( *((https?:\\/\\/|file:\\/\\/\\/)[\\-\\w@:%.+~#=]+[\\-\\w\\(\\)!@:%+.~#?&\\/=$]*)(?!.*\\2(?!.)) *)*$", + "type": "text", + "containerClass": "z-4", + "pattern": "^( *((https?:\\/\\/|file:\\/\\/\\/)[\\-\\w@:%.+~#=]+[\\-\\w\\(\\)!@:%+.~#?&\\/=$]*)(?!.*\\2(?!.)) *)*$", + "inpType": "input", + "name": "Blacklist ignore IP/network URLs", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "", + "method": "default", + "prev_value": "", + "popovers": [ + { + "iconName": "globe", + "text": "inp_popover_global" + }, + { + "iconName": "info", + "text": "List of URLs, separated with spaces, containing IP/network to ignore in the blacklist." + } + ] + }, + "BLACKLIST_IGNORE_RDNS_URLS": { + "context": "global", + "default": "", + "help": "List of URLs, separated with spaces, containing reverse DNS suffixes to ignore in the blacklist.", + "id": "blacklist-ignore-rdns-urls", + "label": "Blacklist ignore reverse DNS URLs", + "regex": "^( *((https?:\\/\\/|file:\\/\\/\\/)[\\-\\w@:%.+~#=]+[\\-\\w\\(\\)!@:%+.~#?&\\/=$]*)(?!.*\\2(?!.)) *)*$", + "type": "text", + "containerClass": "z-3", + "pattern": "^( *((https?:\\/\\/|file:\\/\\/\\/)[\\-\\w@:%.+~#=]+[\\-\\w\\(\\)!@:%+.~#?&\\/=$]*)(?!.*\\2(?!.)) *)*$", + "inpType": "input", + "name": "Blacklist ignore reverse DNS URLs", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "", + "method": "default", + "prev_value": "", + "popovers": [ + { + "iconName": "globe", + "text": "inp_popover_global" + }, + { + "iconName": "info", + "text": "List of URLs, separated with spaces, containing reverse DNS suffixes to ignore in the blacklist." + } + ] + }, + "BLACKLIST_IGNORE_ASN_URLS": { + "context": "global", + "default": "", + "help": "List of URLs, separated with spaces, containing ASN to ignore in the blacklist.", + "id": "blacklist-ignore-asn-urls", + "label": "Blacklist ignore ASN URLs", + "regex": "^( *((https?:\\/\\/|file:\\/\\/\\/)[\\-\\w@:%.+~#=]+[\\-\\w\\(\\)!@:%+.~#?&\\/=$]*)(?!.*\\2(?!.)) *)*$", + "type": "text", + "containerClass": "z-2", + "pattern": "^( *((https?:\\/\\/|file:\\/\\/\\/)[\\-\\w@:%.+~#=]+[\\-\\w\\(\\)!@:%+.~#?&\\/=$]*)(?!.*\\2(?!.)) *)*$", + "inpType": "input", + "name": "Blacklist ignore ASN URLs", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "", + "method": "default", + "prev_value": "", + "popovers": [ + { + "iconName": "globe", + "text": "inp_popover_global" + }, + { + "iconName": "info", + "text": "List of URLs, separated with spaces, containing ASN to ignore in the blacklist." + } + ] + }, + "BLACKLIST_IGNORE_USER_AGENT_URLS": { + "context": "global", + "default": "", + "help": "List of URLs, separated with spaces, containing User-Agent to ignore in the blacklist.", + "id": "blacklist-ignore-user-agent-urls", + "label": "Blacklist ignore User-Agent URLs", + "regex": "^( *((https?:\\/\\/|file:\\/\\/\\/)[\\-\\w@:%.+~#=]+[\\-\\w\\(\\)!@:%+.~#?&\\/=$]*)(?!.*\\2(?!.)) *)*$", + "type": "text", + "containerClass": "z-1", + "pattern": "^( *((https?:\\/\\/|file:\\/\\/\\/)[\\-\\w@:%.+~#=]+[\\-\\w\\(\\)!@:%+.~#?&\\/=$]*)(?!.*\\2(?!.)) *)*$", + "inpType": "input", + "name": "Blacklist ignore User-Agent URLs", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "", + "method": "default", + "prev_value": "", + "popovers": [ + { + "iconName": "globe", + "text": "inp_popover_global" + }, + { + "iconName": "info", + "text": "List of URLs, separated with spaces, containing User-Agent to ignore in the blacklist." + } + ] + }, + "BLACKLIST_IGNORE_URI_URLS": { + "context": "global", + "default": "", + "help": "List of URLs, separated with spaces, containing URI to ignore in the blacklist.", + "id": "blacklist-ignore-uri-urls", + "label": "Blacklist ignore URI URLs", + "regex": "^( *((https?:\\/\\/|file:\\/\\/\\/)[\\-\\w@:%.+~#=]+[\\-\\w\\(\\)!@:%+.~#?&\\/=$]*)(?!.*\\2(?!.)) *)*$", + "type": "text", + "containerClass": "z-0", + "pattern": "^( *((https?:\\/\\/|file:\\/\\/\\/)[\\-\\w@:%.+~#=]+[\\-\\w\\(\\)!@:%+.~#?&\\/=$]*)(?!.*\\2(?!.)) *)*$", + "inpType": "input", + "name": "Blacklist ignore URI URLs", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "", + "method": "default", + "prev_value": "", + "popovers": [ + { + "iconName": "globe", + "text": "inp_popover_global" + }, + { + "iconName": "info", + "text": "List of URLs, separated with spaces, containing URI to ignore in the blacklist." + } + ] + } + }, + "checksum": null + }, + { + "id": "brotli", + "stream": "no", + "name": "Brotli", + "description": "Compress HTTP requests with the brotli algorithm.", + "version": "1.0", + "type": "core", + "method": "manual", + "page": false, + "settings": { + "USE_BROTLI": { + "context": "multisite", + "default": "no", + "help": "Use brotli", + "id": "use-brotli", + "label": "Use brotli", + "regex": "^(yes|no)$", + "type": "check", + "containerClass": "z-3", + "pattern": "^(yes|no)$", + "inpType": "checkbox", + "name": "Use brotli", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "no", + "method": "default", + "prev_value": "no", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Use brotli" + } + ] + }, + "BROTLI_TYPES": { + "context": "multisite", + "default": "application/atom+xml application/javascript application/json application/rss+xml application/vnd.ms-fontobject application/x-font-opentype application/x-font-truetype application/x-font-ttf application/x-javascript application/xhtml+xml application/xml font/eot font/opentype font/otf font/truetype image/svg+xml image/vnd.microsoft.icon image/x-icon image/x-win-bitmap text/css text/javascript text/plain text/xml", + "help": "List of MIME types that will be compressed with brotli.", + "id": "brotli-types", + "label": "MIME types", + "regex": "^(?! )( ?([\\-\\w.]+/[\\-\\w.+]+)(?!.*\\2(?!.)))+$", + "type": "text", + "containerClass": "z-2", + "pattern": "^(?! )( ?([\\-\\w.]+/[\\-\\w.+]+)(?!.*\\2(?!.)))+$", + "inpType": "input", + "name": "MIME types", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "application/atom+xml application/javascript application/json application/rss+xml application/vnd.ms-fontobject application/x-font-opentype application/x-font-truetype application/x-font-ttf application/x-javascript application/xhtml+xml application/xml font/eot font/opentype font/otf font/truetype image/svg+xml image/vnd.microsoft.icon image/x-icon image/x-win-bitmap text/css text/javascript text/plain text/xml", + "method": "default", + "prev_value": "application/atom+xml application/javascript application/json application/rss+xml application/vnd.ms-fontobject application/x-font-opentype application/x-font-truetype application/x-font-ttf application/x-javascript application/xhtml+xml application/xml font/eot font/opentype font/otf font/truetype image/svg+xml image/vnd.microsoft.icon image/x-icon image/x-win-bitmap text/css text/javascript text/plain text/xml", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "List of MIME types that will be compressed with brotli." + } + ] + }, + "BROTLI_MIN_LENGTH": { + "context": "multisite", + "default": "1000", + "help": "Minimum length for brotli compression.", + "id": "brotli-min-length", + "label": "Minimum length", + "regex": "^\\d+", + "type": "text", + "containerClass": "z-1", + "pattern": "^\\d+", + "inpType": "input", + "name": "Minimum length", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "1000", + "method": "default", + "prev_value": "1000", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Minimum length for brotli compression." + } + ] + }, + "BROTLI_COMP_LEVEL": { + "context": "multisite", + "default": "6", + "help": "The compression level of the brotli algorithm.", + "id": "brotli-comp-level", + "label": "Compression level", + "regex": "^([02-9]|1[01]?)$", + "type": "select", + "containerClass": "z-0", + "pattern": "^([02-9]|1[01]?)$", + "inpType": "select", + "name": "Compression level", + "values": [ + "0", + "1", + "10", + "11", + "2", + "3", + "4", + "5", + "6", + "7", + "8", + "9" + ], + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "6", + "method": "default", + "prev_value": "6", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "The compression level of the brotli algorithm." + } + ] + } + }, + "checksum": null + }, + { + "id": "bunkernet", + "stream": "yes", + "name": "BunkerNet", + "description": "Share threat data with other BunkerWeb instances via BunkerNet.", + "version": "1.0", + "type": "core", + "method": "manual", + "page": true, + "settings": { + "USE_BUNKERNET": { + "context": "multisite", + "default": "yes", + "help": "Activate BunkerNet feature.", + "id": "use-bunkernet", + "label": "Activate BunkerNet", + "regex": "^(yes|no)$", + "type": "check", + "containerClass": "z-1", + "pattern": "^(yes|no)$", + "inpType": "checkbox", + "name": "Activate BunkerNet", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": true, + "value": "no", + "method": "scheduler", + "prev_value": "no", + "popovers": [ + { + "iconName": "trespass", + "text": "inp_popover_method_disabled" + }, + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Activate BunkerNet feature." + } + ] + }, + "BUNKERNET_SERVER": { + "context": "global", + "default": "https://api.bunkerweb.io", + "help": "Address of the BunkerNet API.", + "id": "bunkernet-server", + "label": "BunkerNet server", + "regex": "^https?:\\/\\/[\\-\\w@:%.+~#=]+[\\-\\w\\(\\)!@:%+.~#?&\\/=$]*$", + "type": "text", + "containerClass": "z-0", + "pattern": "^https?:\\/\\/[\\-\\w@:%.+~#=]+[\\-\\w\\(\\)!@:%+.~#?&\\/=$]*$", + "inpType": "input", + "name": "BunkerNet server", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "https://api.bunkerweb.io", + "method": "default", + "prev_value": "https://api.bunkerweb.io", + "popovers": [ + { + "iconName": "globe", + "text": "inp_popover_global" + }, + { + "iconName": "info", + "text": "Address of the BunkerNet API." + } + ] + } + }, + "checksum": null + }, + { + "id": "cors", + "stream": "no", + "name": "CORS", + "description": "Cross-Origin Resource Sharing.", + "version": "1.0", + "type": "core", + "method": "manual", + "page": true, + "settings": { + "USE_CORS": { + "context": "multisite", + "default": "no", + "help": "Use CORS", + "id": "use-cors", + "label": "Use CORS", + "regex": "^(yes|no)$", + "type": "check", + "containerClass": "z-10", + "pattern": "^(yes|no)$", + "inpType": "checkbox", + "name": "Use CORS", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "no", + "method": "default", + "prev_value": "no", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Use CORS" + } + ] + }, + "CORS_ALLOW_ORIGIN": { + "context": "multisite", + "default": "*", + "help": "Allowed origins to make CORS requests : PCRE regex or *.", + "id": "cors-allow-origin", + "label": "Allowed origins", + "regex": "^.*$", + "type": "text", + "containerClass": "z-9", + "pattern": "^.*$", + "inpType": "input", + "name": "Allowed origins", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "self", + "method": "default", + "prev_value": "self", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Allowed origins to make CORS requests : PCRE regex or *." + } + ] + }, + "CORS_ALLOW_METHODS": { + "context": "multisite", + "default": "GET, POST, OPTIONS", + "help": "Value of the Access-Control-Allow-Methods header.", + "id": "cors-allow-methods", + "label": "Access-Control-Allow-Methods value", + "regex": "^(\\*|(?![, ])(,? ?(GET|HEAD|POST|PUT|DELETE|CONNECT|OPTIONS|TRACE|PATCH)(?!.*\\3))*)?$", + "type": "text", + "containerClass": "z-8", + "pattern": "^(\\*|(?![, ])(,? ?(GET|HEAD|POST|PUT|DELETE|CONNECT|OPTIONS|TRACE|PATCH)(?!.*\\3))*)?$", + "inpType": "input", + "name": "Access-Control-Allow-Methods value", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "GET, POST, OPTIONS", + "method": "default", + "prev_value": "GET, POST, OPTIONS", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Value of the Access-Control-Allow-Methods header." + } + ] + }, + "CORS_ALLOW_HEADERS": { + "context": "multisite", + "default": "DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range", + "help": "Value of the Access-Control-Allow-Headers header.", + "id": "cors-allow-headers", + "label": "Access-Control-Allow-Headers value", + "regex": "^(\\*|(?![, ])(,? ?([\\w\\-]+)(?!.*\\3(?!.)))*)?$", + "type": "text", + "containerClass": "z-7", + "pattern": "^(\\*|(?![, ])(,? ?([\\w\\-]+)(?!.*\\3(?!.)))*)?$", + "inpType": "input", + "name": "Access-Control-Allow-Headers value", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range", + "method": "default", + "prev_value": "DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Value of the Access-Control-Allow-Headers header." + } + ] + }, + "CORS_ALLOW_CREDENTIALS": { + "context": "multisite", + "default": "no", + "help": "Send the Access-Control-Allow-Credentials header.", + "id": "cors-allow-credentials", + "label": "Send Access-Control-Allow-Credentials", + "regex": "^(yes|no)$", + "type": "check", + "containerClass": "z-6", + "pattern": "^(yes|no)$", + "inpType": "checkbox", + "name": "Send Access-Control-Allow-Credentials", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "no", + "method": "default", + "prev_value": "no", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Send the Access-Control-Allow-Credentials header." + } + ] + }, + "CORS_EXPOSE_HEADERS": { + "context": "multisite", + "default": "Content-Length,Content-Range", + "help": "Value of the Access-Control-Expose-Headers header.", + "id": "cors-expose-headers", + "label": "Access-Control-Expose-Headers value", + "regex": "^(\\*|(?![, ]+)(,? ?([\\w\\-]+)(?!.*\\3(?!.)))*)?$", + "type": "text", + "containerClass": "z-5", + "pattern": "^(\\*|(?![, ]+)(,? ?([\\w\\-]+)(?!.*\\3(?!.)))*)?$", + "inpType": "input", + "name": "Access-Control-Expose-Headers value", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "Content-Length,Content-Range", + "method": "default", + "prev_value": "Content-Length,Content-Range", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Value of the Access-Control-Expose-Headers header." + } + ] + }, + "CROSS_ORIGIN_OPENER_POLICY": { + "context": "multisite", + "default": "", + "help": "Value for the Cross-Origin-Opener-Policy header.", + "id": "cross-origin-opener-policy", + "label": "Cross-Origin-Opener-Policy", + "regex": "^(unsafe-none|same-origin-allow-popups|same-origin)?$", + "type": "select", + "containerClass": "z-4", + "pattern": "^(unsafe-none|same-origin-allow-popups|same-origin)?$", + "inpType": "select", + "name": "Cross-Origin-Opener-Policy", + "values": [ + "", + "same-origin", + "same-origin-allow-popups", + "unsafe-none" + ], + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "same-origin", + "method": "default", + "prev_value": "same-origin", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Value for the Cross-Origin-Opener-Policy header." + } + ] + }, + "CROSS_ORIGIN_EMBEDDER_POLICY": { + "context": "multisite", + "default": "", + "help": "Value for the Cross-Origin-Embedder-Policy header.", + "id": "cross-origin-embedder-policy", + "label": "Cross-Origin-Embedder-Policy", + "regex": "^(unsafe-none|require-corp|credentialless)?$", + "type": "select", + "containerClass": "z-3", + "pattern": "^(unsafe-none|require-corp|credentialless)?$", + "inpType": "select", + "name": "Cross-Origin-Embedder-Policy", + "values": [ + "", + "credentialless", + "require-corp", + "unsafe-none" + ], + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "require-corp", + "method": "default", + "prev_value": "require-corp", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Value for the Cross-Origin-Embedder-Policy header." + } + ] + }, + "CROSS_ORIGIN_RESOURCE_POLICY": { + "context": "multisite", + "default": "", + "help": "Value for the Cross-Origin-Resource-Policy header.", + "id": "cross-origin-resource-policy", + "label": "Cross-Origin-Resource-Policy", + "regex": "^(same-site|same-origin|cross-origin)?$", + "type": "select", + "containerClass": "z-2", + "pattern": "^(same-site|same-origin|cross-origin)?$", + "inpType": "select", + "name": "Cross-Origin-Resource-Policy", + "values": [ + "", + "cross-origin", + "same-origin", + "same-site" + ], + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "same-site", + "method": "default", + "prev_value": "same-site", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Value for the Cross-Origin-Resource-Policy header." + } + ] + }, + "CORS_MAX_AGE": { + "context": "multisite", + "default": "86400", + "help": "Value of the Access-Control-Max-Age header.", + "id": "cors-max-age", + "label": "Access-Control-Max-Age value", + "regex": "^\\d+$", + "type": "text", + "containerClass": "z-1", + "pattern": "^\\d+$", + "inpType": "input", + "name": "Access-Control-Max-Age value", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "86400", + "method": "default", + "prev_value": "86400", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Value of the Access-Control-Max-Age header." + } + ] + }, + "CORS_DENY_REQUEST": { + "context": "multisite", + "default": "yes", + "help": "Deny request and don't send it to backend if Origin is not allowed.", + "id": "cors-deny-request", + "label": "Deny request", + "regex": "^(yes|no)$", + "type": "check", + "containerClass": "z-0", + "pattern": "^(yes|no)$", + "inpType": "checkbox", + "name": "Deny request", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "yes", + "method": "default", + "prev_value": "yes", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Deny request and don't send it to backend if Origin is not allowed." + } + ] + } + }, + "checksum": null + }, + { + "id": "clientcache", + "stream": "no", + "name": "Client cache", + "description": "Manage caching for clients.", + "version": "1.0", + "type": "core", + "method": "manual", + "page": false, + "settings": { + "USE_CLIENT_CACHE": { + "context": "multisite", + "default": "no", + "help": "Tell client to store locally static files.", + "id": "use-client-cache", + "label": "Use client cache", + "regex": "^(yes|no)$", + "type": "check", + "containerClass": "z-3", + "pattern": "^(yes|no)$", + "inpType": "checkbox", + "name": "Use client cache", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": true, + "value": "yes", + "method": "scheduler", + "prev_value": "yes", + "popovers": [ + { + "iconName": "trespass", + "text": "inp_popover_method_disabled" + }, + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Tell client to store locally static files." + } + ] + }, + "CLIENT_CACHE_EXTENSIONS": { + "context": "global", + "default": "jpg|jpeg|png|bmp|ico|svg|tif|css|js|otf|ttf|eot|woff|woff2", + "help": "List of file extensions, separated with pipes that should be cached.", + "id": "client-cache-extensions", + "label": "Extensions that should be cached by the client", + "regex": "^(?!\\|)(\\|?([a-z0-9]+)(?!.*\\2(?!.)))+$", + "type": "text", + "containerClass": "z-2", + "pattern": "^(?!\\|)(\\|?([a-z0-9]+)(?!.*\\2(?!.)))+$", + "inpType": "input", + "name": "Extensions that should be cached by the client", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "jpg|jpeg|png|bmp|ico|svg|tif|css|js|otf|ttf|eot|woff|woff2", + "method": "default", + "prev_value": "jpg|jpeg|png|bmp|ico|svg|tif|css|js|otf|ttf|eot|woff|woff2", + "popovers": [ + { + "iconName": "globe", + "text": "inp_popover_global" + }, + { + "iconName": "info", + "text": "List of file extensions, separated with pipes that should be cached." + } + ] + }, + "CLIENT_CACHE_ETAG": { + "context": "multisite", + "default": "yes", + "help": "Send the HTTP ETag header for static resources.", + "id": "client-cache-etag", + "label": "ETag", + "regex": "^(yes|no)$", + "type": "check", + "containerClass": "z-1", + "pattern": "^(yes|no)$", + "inpType": "checkbox", + "name": "ETag", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "yes", + "method": "default", + "prev_value": "yes", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Send the HTTP ETag header for static resources." + } + ] + }, + "CLIENT_CACHE_CONTROL": { + "context": "multisite", + "default": "public, max-age=15552000", + "help": "Value of the Cache-Control HTTP header.", + "id": "client-cache-control", + "label": "Cache-Control header", + "regex": "^(?!(, ?| ))((, )?(((max-age|s-maxage|stale-while-revalidate|stale-if-error)=\\d+(?!.*\\6))|((?!.*public)private|(?!.*private)public)|(must|proxy)-revalidate|must-understand|immutable|no-(cache|store|transform))(?!.*\\4))+$", + "type": "text", + "containerClass": "z-0", + "pattern": "^(?!(, ?| ))((, )?(((max-age|s-maxage|stale-while-revalidate|stale-if-error)=\\d+(?!.*\\6))|((?!.*public)private|(?!.*private)public)|(must|proxy)-revalidate|must-understand|immutable|no-(cache|store|transform))(?!.*\\4))+$", + "inpType": "input", + "name": "Cache-Control header", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "public, max-age=15552000", + "method": "default", + "prev_value": "public, max-age=15552000", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Value of the Cache-Control HTTP header." + } + ] + } + }, + "checksum": null + }, + { + "id": "country", + "stream": "yes", + "name": "Country", + "description": "Deny access based on the country of the client IP.", + "version": "1.0", + "type": "core", + "method": "manual", + "page": true, + "settings": { + "BLACKLIST_COUNTRY": { + "context": "multisite", + "default": "", + "help": "Deny access if the country of the client is in the list (ISO 3166-1 alpha-2 format separated with spaces).", + "id": "country-blacklist", + "label": "Country blacklist", + "regex": "^(?! )( *([A-Z]{2})(?!.*\\2) *)*$", + "type": "text", + "containerClass": "z-1", + "pattern": "^(?! )( *([A-Z]{2})(?!.*\\2) *)*$", + "inpType": "input", + "name": "Country blacklist", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "", + "method": "default", + "prev_value": "", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Deny access if the country of the client is in the list (ISO 3166-1 alpha-2 format separated with spaces)." + } + ] + }, + "WHITELIST_COUNTRY": { + "context": "multisite", + "default": "", + "help": "Deny access if the country of the client is not in the list (ISO 3166-1 alpha-2 format separated with spaces).", + "id": "country-whitelist", + "label": "Country whitelist", + "regex": "^(?! )( *([A-Z]{2})(?!.*\\2) *)*$", + "type": "text", + "containerClass": "z-0", + "pattern": "^(?! )( *([A-Z]{2})(?!.*\\2) *)*$", + "inpType": "input", + "name": "Country whitelist", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "", + "method": "default", + "prev_value": "", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Deny access if the country of the client is not in the list (ISO 3166-1 alpha-2 format separated with spaces)." + } + ] + } + }, + "checksum": null + }, + { + "id": "customcert", + "stream": "yes", + "name": "Custom HTTPS certificate", + "description": "Choose custom certificate for HTTPS.", + "version": "1.0", + "type": "core", + "method": "manual", + "page": false, + "settings": { + "USE_CUSTOM_SSL": { + "context": "multisite", + "default": "no", + "help": "Use custom HTTPS certificate.", + "id": "use-custom-https", + "label": "Use custom certificate", + "regex": "^(yes|no)$", + "type": "check", + "containerClass": "z-4", + "pattern": "^(yes|no)$", + "inpType": "checkbox", + "name": "Use custom certificate", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "no", + "method": "default", + "prev_value": "no", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Use custom HTTPS certificate." + } + ] + }, + "CUSTOM_SSL_CERT": { + "context": "multisite", + "default": "", + "help": "Full path of the certificate or bundle file (must be readable by the scheduler).", + "id": "custom-https-cert", + "label": "Certificate path", + "regex": "^(/[\\w. \\-]+)*/?$", + "type": "text", + "containerClass": "z-3", + "pattern": "^(/[\\w. \\-]+)*/?$", + "inpType": "input", + "name": "Certificate path", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "", + "method": "default", + "prev_value": "", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Full path of the certificate or bundle file (must be readable by the scheduler)." + } + ] + }, + "CUSTOM_SSL_KEY": { + "context": "multisite", + "default": "", + "help": "Full path of the key file (must be readable by the scheduler).", + "id": "custom-https-key", + "label": "Key path", + "regex": "^(/[\\w. \\-]+)*/?$", + "type": "text", + "containerClass": "z-2", + "pattern": "^(/[\\w. \\-]+)*/?$", + "inpType": "input", + "name": "Key path", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "", + "method": "default", + "prev_value": "", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Full path of the key file (must be readable by the scheduler)." + } + ] + }, + "CUSTOM_SSL_CERT_DATA": { + "context": "multisite", + "default": "", + "help": "Certificate data encoded in base64.", + "id": "custom-https-cert-data", + "label": "Certificate data (base64)", + "regex": "^.*$", + "type": "text", + "containerClass": "z-1", + "pattern": "^.*$", + "inpType": "input", + "name": "Certificate data (base64)", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "", + "method": "default", + "prev_value": "", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Certificate data encoded in base64." + } + ] + }, + "CUSTOM_SSL_KEY_DATA": { + "context": "multisite", + "default": "", + "help": "Key data encoded in base64.", + "id": "custom-https-key-data", + "label": "Key data (base64)", + "regex": "^.*$", + "type": "text", + "containerClass": "z-0", + "pattern": "^.*$", + "inpType": "input", + "name": "Key data (base64)", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "", + "method": "default", + "prev_value": "", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Key data encoded in base64." + } + ] + } + }, + "checksum": null + }, + { + "id": "db", + "stream": "yes", + "name": "DB", + "description": "Integrate easily the Database.", + "version": "1.0", + "type": "core", + "method": "manual", + "page": false, + "settings": { + "DATABASE_URI": { + "context": "global", + "default": "sqlite:////var/lib/bunkerweb/db.sqlite3", + "help": "The database URI, following the sqlalchemy format.", + "id": "database-uri", + "label": "The database URI", + "regex": "^((postgresql|mysql|mariadb|sqlite)(\\+[\\w\\-]+)?:.+)?$", + "type": "text", + "containerClass": "z-2", + "pattern": "^((postgresql|mysql|mariadb|sqlite)(\\+[\\w\\-]+)?:.+)?$", + "inpType": "input", + "name": "The database URI", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "sqlite:////var/lib/bunkerweb/db.sqlite3", + "method": "default", + "prev_value": "sqlite:////var/lib/bunkerweb/db.sqlite3", + "popovers": [ + { + "iconName": "globe", + "text": "inp_popover_global" + }, + { + "iconName": "info", + "text": "The database URI, following the sqlalchemy format." + } + ] + }, + "DATABASE_URI_READONLY": { + "context": "global", + "default": "", + "help": "The database URI for read-only operations, it can also serve as a fallback if the main database is down. Following the sqlalchemy format.", + "id": "database-uri-readonly", + "label": "The database URI for read-only operations", + "regex": "^((postgresql|mysql|mariadb|sqlite)(\\+[\\w\\-]+)?:.+)?$", + "type": "text", + "containerClass": "z-1", + "pattern": "^((postgresql|mysql|mariadb|sqlite)(\\+[\\w\\-]+)?:.+)?$", + "inpType": "input", + "name": "The database URI for read-only operations", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "", + "method": "default", + "prev_value": "", + "popovers": [ + { + "iconName": "globe", + "text": "inp_popover_global" + }, + { + "iconName": "info", + "text": "The database URI for read-only operations, it can also serve as a fallback if the main database is down. Following the sqlalchemy format." + } + ] + }, + "DATABASE_LOG_LEVEL": { + "context": "global", + "default": "warning", + "help": "The level to use for database logs.", + "id": "database-log-level", + "label": "Database log level", + "regex": "^(debug|info|warn|warning|error)$", + "type": "select", + "containerClass": "z-0", + "pattern": "^(debug|info|warn|warning|error)$", + "inpType": "select", + "name": "Database log level", + "values": [ + "debug", + "error", + "info", + "warn", + "warning" + ], + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "warning", + "method": "default", + "prev_value": "warning", + "popovers": [ + { + "iconName": "globe", + "text": "inp_popover_global" + }, + { + "iconName": "info", + "text": "The level to use for database logs." + } + ] + } + }, + "checksum": null + }, + { + "id": "dnsbl", + "stream": "yes", + "name": "DNSBL", + "description": "Deny access based on external DNSBL servers.", + "version": "1.0", + "type": "core", + "method": "manual", + "page": true, + "settings": { + "USE_DNSBL": { + "context": "multisite", + "default": "yes", + "help": "Activate DNSBL feature.", + "id": "use-dnsbl", + "label": "Activate DNSBL", + "regex": "^(yes|no)$", + "type": "check", + "containerClass": "z-1", + "pattern": "^(yes|no)$", + "inpType": "checkbox", + "name": "Activate DNSBL", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "yes", + "method": "default", + "prev_value": "yes", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Activate DNSBL feature." + } + ] + }, + "DNSBL_LIST": { + "context": "global", + "default": "bl.blocklist.de problems.dnsbl.sorbs.net sbl.spamhaus.org xbl.spamhaus.org", + "help": "List of DNSBL servers.", + "id": "dnsbl-list", + "label": "DNSBL list", + "regex": "^(?! )( ?((?!\\.)[\\w.]+)(?!.*\\2(?!.)))*$", + "type": "text", + "containerClass": "z-0", + "pattern": "^(?! )( ?((?!\\.)[\\w.]+)(?!.*\\2(?!.)))*$", + "inpType": "input", + "name": "DNSBL list", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "bl.blocklist.de problems.dnsbl.sorbs.net sbl.spamhaus.org xbl.spamhaus.org", + "method": "default", + "prev_value": "bl.blocklist.de problems.dnsbl.sorbs.net sbl.spamhaus.org xbl.spamhaus.org", + "popovers": [ + { + "iconName": "globe", + "text": "inp_popover_global" + }, + { + "iconName": "info", + "text": "List of DNSBL servers." + } + ] + } + }, + "checksum": null + }, + { + "id": "errors", + "stream": "no", + "name": "Errors", + "description": "Manage default error pages", + "version": "1.0", + "type": "core", + "method": "manual", + "page": true, + "settings": { + "ERRORS": { + "context": "multisite", + "default": "", + "help": "List of HTTP error code and corresponding error pages, separated with spaces (404=/my404.html 403=/errors/403.html ...).", + "id": "errors", + "label": "Errors", + "regex": "^(?! )( ?([1-5]\\d{2})(?!.*\\2(?![^=]))=(\\/[\\w\\].~:\\/?#\\[@!$\\&'\\(\\)*+,;=\\-]*)(?!.*\\3(?!.)))*$", + "type": "text", + "containerClass": "z-1", + "pattern": "^(?! )( ?([1-5]\\d{2})(?!.*\\2(?![^=]))=(\\/[\\w\\].~:\\/?#\\[@!$\\&'\\(\\)*+,;=\\-]*)(?!.*\\3(?!.)))*$", + "inpType": "input", + "name": "Errors", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "", + "method": "default", + "prev_value": "", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "List of HTTP error code and corresponding error pages, separated with spaces (404=/my404.html 403=/errors/403.html ...)." + } + ] + }, + "INTERCEPTED_ERROR_CODES": { + "context": "multisite", + "default": "400 401 403 404 405 413 429 500 501 502 503 504", + "help": "List of HTTP error code intercepted by BunkerWeb", + "id": "intercepted-error-codes", + "label": "Intercepted error codes", + "regex": "^( *([1-5]\\d{2})(?!.*\\2) *)+$", + "type": "text", + "containerClass": "z-0", + "pattern": "^( *([1-5]\\d{2})(?!.*\\2) *)+$", + "inpType": "input", + "name": "Intercepted error codes", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "400 401 403 404 405 413 429 500 501 502 503 504", + "method": "default", + "prev_value": "400 401 403 404 405 413 429 500 501 502 503 504", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "List of HTTP error code intercepted by BunkerWeb" + } + ] + } + }, + "checksum": null + }, + { + "id": "greylist", + "stream": "partial", + "name": "Greylist", + "description": "Allow access while keeping security features based on internal and external IP/network/rDNS/ASN greylists.", + "version": "1.0", + "type": "core", + "method": "manual", + "page": true, + "settings": { + "USE_GREYLIST": { + "context": "multisite", + "default": "no", + "help": "Activate greylist feature.", + "id": "use-greylist", + "label": "Activate greylisting", + "regex": "^(yes|no)$", + "type": "check", + "containerClass": "z-11", + "pattern": "^(yes|no)$", + "inpType": "checkbox", + "name": "Activate greylisting", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "no", + "method": "default", + "prev_value": "no", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Activate greylist feature." + } + ] + }, + "GREYLIST_IP": { + "context": "multisite", + "default": "", + "help": "List of IP/network, separated with spaces, to put into the greylist.", + "id": "greylist-ip", + "label": "Greylist IP/network", + "regex": "^(?! )( *(((\\b25[0-5]|\\b2[0-4]\\d|\\b[01]?\\d\\d?)(\\.(25[0-5]|2[0-4]\\d|[01]?\\d\\d?)){3})(\\/([1-2][0-9]?|3[0-2]?|[04-9]))?|(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]Z{0,4}){0,4}%[0-9a-zA-Z]+|::(ffff(:0{1,4})?:)?((25[0-5]|(2[0-4]|1?\\d)?\\d)\\.){3}(25[0-5]|(2[0-4]|1?\\d)?\\d)|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1?\\d)?\\d)\\.){3}(25[0-5]|(2[0-4]|1?\\d)?\\d))(\\/(12[0-8]|1[01][0-9]|[0-9][0-9]?))?)(?!.*\\D\\2([^\\d\\/]|$)) *)*$", + "type": "text", + "containerClass": "z-10", + "pattern": "^(?! )( *(((\\b25[0-5]|\\b2[0-4]\\d|\\b[01]?\\d\\d?)(\\.(25[0-5]|2[0-4]\\d|[01]?\\d\\d?)){3})(\\/([1-2][0-9]?|3[0-2]?|[04-9]))?|(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]Z{0,4}){0,4}%[0-9a-zA-Z]+|::(ffff(:0{1,4})?:)?((25[0-5]|(2[0-4]|1?\\d)?\\d)\\.){3}(25[0-5]|(2[0-4]|1?\\d)?\\d)|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1?\\d)?\\d)\\.){3}(25[0-5]|(2[0-4]|1?\\d)?\\d))(\\/(12[0-8]|1[01][0-9]|[0-9][0-9]?))?)(?!.*\\D\\2([^\\d\\/]|$)) *)*$", + "inpType": "input", + "name": "Greylist IP/network", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "", + "method": "default", + "prev_value": "", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "List of IP/network, separated with spaces, to put into the greylist." + } + ] + }, + "GREYLIST_RDNS": { + "context": "multisite", + "default": "", + "help": "List of reverse DNS suffixes, separated with spaces, to put into the greylist.", + "id": "greylist-rdns", + "label": "Greylist reverse DNS", + "regex": "^( *(([^ ]+)(?!.*\\3( |$))) *)*$", + "type": "text", + "containerClass": "z-9", + "pattern": "^( *(([^ ]+)(?!.*\\3( |$))) *)*$", + "inpType": "input", + "name": "Greylist reverse DNS", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "", + "method": "default", + "prev_value": "", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "List of reverse DNS suffixes, separated with spaces, to put into the greylist." + } + ] + }, + "GREYLIST_RDNS_GLOBAL": { + "context": "multisite", + "default": "yes", + "help": "Only perform RDNS greylist checks on global IP addresses.", + "id": "greylist-rdns-global", + "label": "Greylist reverse DNS global IPs", + "regex": "^(yes|no)$", + "type": "check", + "containerClass": "z-8", + "pattern": "^(yes|no)$", + "inpType": "checkbox", + "name": "Greylist reverse DNS global IPs", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "yes", + "method": "default", + "prev_value": "yes", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Only perform RDNS greylist checks on global IP addresses." + } + ] + }, + "GREYLIST_ASN": { + "context": "multisite", + "default": "", + "help": "List of ASN numbers, separated with spaces, to put into the greylist.", + "id": "greylist-asn", + "label": "Greylist ASN", + "regex": "^^( *((ASN?)?(\\d+)\\b(?!.*[SN ]\\4\\b)) *)*$", + "type": "text", + "containerClass": "z-7", + "pattern": "^^( *((ASN?)?(\\d+)\\b(?!.*[SN ]\\4\\b)) *)*$", + "inpType": "input", + "name": "Greylist ASN", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "", + "method": "default", + "prev_value": "", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "List of ASN numbers, separated with spaces, to put into the greylist." + } + ] + }, + "GREYLIST_USER_AGENT": { + "context": "multisite", + "default": "", + "help": "List of User-Agent (PCRE regex), separated with spaces, to put into the greylist.", + "id": "greylist-user-agent", + "label": "Greylist User-Agent", + "regex": "^.*$", + "type": "text", + "containerClass": "z-6", + "pattern": "^.*$", + "inpType": "input", + "name": "Greylist User-Agent", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "", + "method": "default", + "prev_value": "", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "List of User-Agent (PCRE regex), separated with spaces, to put into the greylist." + } + ] + }, + "GREYLIST_URI": { + "context": "multisite", + "default": "", + "help": "List of URI (PCRE regex), separated with spaces, to put into the greylist.", + "id": "greylist-uri", + "label": "Greylist URI", + "regex": "^.*$", + "type": "text", + "containerClass": "z-5", + "pattern": "^.*$", + "inpType": "input", + "name": "Greylist URI", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "", + "method": "default", + "prev_value": "", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "List of URI (PCRE regex), separated with spaces, to put into the greylist." + } + ] + }, + "GREYLIST_IP_URLS": { + "context": "global", + "default": "", + "help": "List of URLs, separated with spaces, containing good IP/network to put into the greylist.", + "id": "greylist-ip-urls", + "label": "Greylist IP/network URLs", + "regex": "^( *((https?:\\/\\/|file:\\/\\/\\/)[\\-\\w@:%.+~#=]+[\\-\\w\\(\\)!@:%+.~#?&\\/=$]*)(?!.*\\2(?!.)) *)*$", + "type": "text", + "containerClass": "z-4", + "pattern": "^( *((https?:\\/\\/|file:\\/\\/\\/)[\\-\\w@:%.+~#=]+[\\-\\w\\(\\)!@:%+.~#?&\\/=$]*)(?!.*\\2(?!.)) *)*$", + "inpType": "input", + "name": "Greylist IP/network URLs", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "", + "method": "default", + "prev_value": "", + "popovers": [ + { + "iconName": "globe", + "text": "inp_popover_global" + }, + { + "iconName": "info", + "text": "List of URLs, separated with spaces, containing good IP/network to put into the greylist." + } + ] + }, + "GREYLIST_RDNS_URLS": { + "context": "global", + "default": "", + "help": "List of URLs, separated with spaces, containing reverse DNS suffixes to put into the greylist.", + "id": "greylist-rdns-urls", + "label": "Greylist reverse DNS URLs", + "regex": "^( *((https?:\\/\\/|file:\\/\\/\\/)[\\-\\w@:%.+~#=]+[\\-\\w\\(\\)!@:%+.~#?&\\/=$]*)(?!.*\\2(?!.)) *)*$", + "type": "text", + "containerClass": "z-3", + "pattern": "^( *((https?:\\/\\/|file:\\/\\/\\/)[\\-\\w@:%.+~#=]+[\\-\\w\\(\\)!@:%+.~#?&\\/=$]*)(?!.*\\2(?!.)) *)*$", + "inpType": "input", + "name": "Greylist reverse DNS URLs", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "", + "method": "default", + "prev_value": "", + "popovers": [ + { + "iconName": "globe", + "text": "inp_popover_global" + }, + { + "iconName": "info", + "text": "List of URLs, separated with spaces, containing reverse DNS suffixes to put into the greylist." + } + ] + }, + "GREYLIST_ASN_URLS": { + "context": "global", + "default": "", + "help": "List of URLs, separated with spaces, containing ASN to put into the greylist.", + "id": "greylist-asn-urls", + "label": "Greylist ASN URLs", + "regex": "^( *((https?:\\/\\/|file:\\/\\/\\/)[\\-\\w@:%.+~#=]+[\\-\\w\\(\\)!@:%+.~#?&\\/=$]*)(?!.*\\2(?!.)) *)*$", + "type": "text", + "containerClass": "z-2", + "pattern": "^( *((https?:\\/\\/|file:\\/\\/\\/)[\\-\\w@:%.+~#=]+[\\-\\w\\(\\)!@:%+.~#?&\\/=$]*)(?!.*\\2(?!.)) *)*$", + "inpType": "input", + "name": "Greylist ASN URLs", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "", + "method": "default", + "prev_value": "", + "popovers": [ + { + "iconName": "globe", + "text": "inp_popover_global" + }, + { + "iconName": "info", + "text": "List of URLs, separated with spaces, containing ASN to put into the greylist." + } + ] + }, + "GREYLIST_USER_AGENT_URLS": { + "context": "global", + "default": "", + "help": "List of URLs, separated with spaces, containing good User-Agent to put into the greylist.", + "id": "greylist-user-agent-urls", + "label": "Greylist User-Agent URLs", + "regex": "^( *((https?:\\/\\/|file:\\/\\/\\/)[\\-\\w@:%.+~#=]+[\\-\\w\\(\\)!@:%+.~#?&\\/=$]*)(?!.*\\2(?!.)) *)*$", + "type": "text", + "containerClass": "z-1", + "pattern": "^( *((https?:\\/\\/|file:\\/\\/\\/)[\\-\\w@:%.+~#=]+[\\-\\w\\(\\)!@:%+.~#?&\\/=$]*)(?!.*\\2(?!.)) *)*$", + "inpType": "input", + "name": "Greylist User-Agent URLs", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "", + "method": "default", + "prev_value": "", + "popovers": [ + { + "iconName": "globe", + "text": "inp_popover_global" + }, + { + "iconName": "info", + "text": "List of URLs, separated with spaces, containing good User-Agent to put into the greylist." + } + ] + }, + "GREYLIST_URI_URLS": { + "context": "global", + "default": "", + "help": "List of URLs, separated with spaces, containing bad URI to put into the greylist.", + "id": "greylist-uri-urls", + "label": "Greylist URI URLs", + "regex": "^( *((https?:\\/\\/|file:\\/\\/\\/)[\\-\\w@:%.+~#=]+[\\-\\w\\(\\)!@:%+.~#?&\\/=$]*)(?!.*\\2(?!.)) *)*$", + "type": "text", + "containerClass": "z-0", + "pattern": "^( *((https?:\\/\\/|file:\\/\\/\\/)[\\-\\w@:%.+~#=]+[\\-\\w\\(\\)!@:%+.~#?&\\/=$]*)(?!.*\\2(?!.)) *)*$", + "inpType": "input", + "name": "Greylist URI URLs", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "", + "method": "default", + "prev_value": "", + "popovers": [ + { + "iconName": "globe", + "text": "inp_popover_global" + }, + { + "iconName": "info", + "text": "List of URLs, separated with spaces, containing bad URI to put into the greylist." + } + ] + } + }, + "checksum": null + }, + { + "id": "gzip", + "stream": "no", + "name": "Gzip", + "description": "Compress HTTP requests with the gzip algorithm.", + "version": "1.0", + "type": "core", + "method": "manual", + "page": false, + "settings": { + "USE_GZIP": { + "context": "multisite", + "default": "no", + "help": "Use gzip", + "id": "use-gzip", + "label": "Use gzip", + "regex": "^(yes|no)$", + "type": "check", + "containerClass": "z-4", + "pattern": "^(yes|no)$", + "inpType": "checkbox", + "name": "Use gzip", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": true, + "value": "yes", + "method": "scheduler", + "prev_value": "yes", + "popovers": [ + { + "iconName": "trespass", + "text": "inp_popover_method_disabled" + }, + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Use gzip" + } + ] + }, + "GZIP_TYPES": { + "context": "multisite", + "default": "application/atom+xml application/javascript application/json application/rss+xml application/vnd.ms-fontobject application/x-font-opentype application/x-font-truetype application/x-font-ttf application/x-javascript application/xhtml+xml application/xml font/eot font/opentype font/otf font/truetype image/svg+xml image/vnd.microsoft.icon image/x-icon image/x-win-bitmap text/css text/javascript text/plain text/xml", + "help": "List of MIME types that will be compressed with gzip.", + "id": "gzip-types", + "label": "MIME types", + "regex": "^(?! )( ?([\\-\\w.]+/[\\-\\w.+]+)(?!.*\\2(?!.)))+$", + "type": "text", + "containerClass": "z-3", + "pattern": "^(?! )( ?([\\-\\w.]+/[\\-\\w.+]+)(?!.*\\2(?!.)))+$", + "inpType": "input", + "name": "MIME types", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "application/atom+xml application/javascript application/json application/rss+xml application/vnd.ms-fontobject application/x-font-opentype application/x-font-truetype application/x-font-ttf application/x-javascript application/xhtml+xml application/xml font/eot font/opentype font/otf font/truetype image/svg+xml image/vnd.microsoft.icon image/x-icon image/x-win-bitmap text/css text/javascript text/plain text/xml", + "method": "default", + "prev_value": "application/atom+xml application/javascript application/json application/rss+xml application/vnd.ms-fontobject application/x-font-opentype application/x-font-truetype application/x-font-ttf application/x-javascript application/xhtml+xml application/xml font/eot font/opentype font/otf font/truetype image/svg+xml image/vnd.microsoft.icon image/x-icon image/x-win-bitmap text/css text/javascript text/plain text/xml", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "List of MIME types that will be compressed with gzip." + } + ] + }, + "GZIP_MIN_LENGTH": { + "context": "multisite", + "default": "1000", + "help": "Minimum length for gzip compression.", + "id": "gzip-min-length", + "label": "Minimum length", + "regex": "^\\d+$", + "type": "text", + "containerClass": "z-2", + "pattern": "^\\d+$", + "inpType": "input", + "name": "Minimum length", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "1000", + "method": "default", + "prev_value": "1000", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Minimum length for gzip compression." + } + ] + }, + "GZIP_COMP_LEVEL": { + "context": "multisite", + "default": "5", + "help": "The compression level of the gzip algorithm.", + "id": "gzip-comp-level", + "label": "Compression level", + "regex": "^[1-9]$", + "type": "select", + "containerClass": "z-1", + "pattern": "^[1-9]$", + "inpType": "select", + "name": "Compression level", + "values": [ + "1", + "2", + "3", + "4", + "5", + "6", + "7", + "8", + "9" + ], + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "5", + "method": "default", + "prev_value": "5", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "The compression level of the gzip algorithm." + } + ] + }, + "GZIP_PROXIED": { + "context": "multisite", + "default": "no-cache no-store private expired auth", + "help": "Which kind of proxied requests we should compress.", + "id": "gzip-proxied", + "label": "Proxied requests", + "regex": "^.*$", + "type": "text", + "containerClass": "z-0", + "pattern": "^.*$", + "inpType": "input", + "name": "Proxied requests", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "no-cache no-store private expired auth", + "method": "default", + "prev_value": "no-cache no-store private expired auth", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Which kind of proxied requests we should compress." + } + ] + } + }, + "checksum": null + }, + { + "id": "inject", + "stream": "no", + "name": "HTML injection", + "description": "Inject custom HTML code before the tag.", + "version": "1.0", + "type": "core", + "method": "manual", + "page": false, + "settings": { + "INJECT_BODY": { + "context": "multisite", + "default": "", + "help": "The HTML code to inject.", + "id": "inject-body", + "label": "HTML code", + "regex": "^.*$", + "type": "text", + "containerClass": "z-0", + "pattern": "^.*$", + "inpType": "input", + "name": "HTML code", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "", + "method": "default", + "prev_value": "", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "The HTML code to inject." + } + ] + } + }, + "checksum": null + }, + { + "id": "headers", + "stream": "no", + "name": "Headers", + "description": "Manage HTTP headers sent to clients.", + "version": "1.0", + "type": "core", + "method": "manual", + "page": false, + "settings": { + "REMOVE_HEADERS": { + "context": "multisite", + "default": "Server Expect-CT X-Powered-By X-AspNet-Version X-AspNetMvc-Version", + "help": "Headers to remove (Header1 Header2 Header3 ...)", + "id": "remove-headers", + "label": "Remove headers", + "regex": "^(?! )( ?[\\w\\-]+)*$", + "type": "text", + "containerClass": "z-12", + "pattern": "^(?! )( ?[\\w\\-]+)*$", + "inpType": "input", + "name": "Remove headers", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "Server Expect-CT X-Powered-By X-AspNet-Version X-AspNetMvc-Version Public-Key-Pins", + "method": "default", + "prev_value": "Server Expect-CT X-Powered-By X-AspNet-Version X-AspNetMvc-Version Public-Key-Pins", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Headers to remove (Header1 Header2 Header3 ...)" + } + ] + }, + "KEEP_UPSTREAM_HEADERS": { + "context": "multisite", + "default": "Content-Security-Policy Permissions-Policy Feature-Policy X-Frame-Options", + "help": "Headers to keep from upstream (Header1 Header2 Header3 ... or * for all).", + "id": "keep-upstream-headers", + "label": "Keep upstream headers", + "regex": "^((?! )( ?[\\w\\-]+)+|\\*)?$", + "type": "text", + "containerClass": "z-11", + "pattern": "^((?! )( ?[\\w\\-]+)+|\\*)?$", + "inpType": "input", + "name": "Keep upstream headers", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "Content-Security-Policy Permissions-Policy X-Frame-Options", + "method": "default", + "prev_value": "Content-Security-Policy Permissions-Policy X-Frame-Options", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Headers to keep from upstream (Header1 Header2 Header3 ... or * for all)." + } + ] + }, + "STRICT_TRANSPORT_SECURITY": { + "context": "multisite", + "default": "max-age=31536000", + "help": "Value for the Strict-Transport-Security header.", + "id": "strict-transport-security", + "label": "Strict-Transport-Security", + "regex": "^max-age=\\d+(; includeSubDomains(; preload)?)?$", + "type": "text", + "containerClass": "z-10", + "pattern": "^max-age=\\d+(; includeSubDomains(; preload)?)?$", + "inpType": "input", + "name": "Strict-Transport-Security", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "max-age=31536000; includeSubDomains; preload", + "method": "default", + "prev_value": "max-age=31536000; includeSubDomains; preload", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Value for the Strict-Transport-Security header." + } + ] + }, + "COOKIE_AUTO_SECURE_FLAG": { + "context": "multisite", + "default": "yes", + "help": "Automatically add the Secure flag to all cookies.", + "id": "cookie-auto-secure-flag", + "label": "Cookie auto Secure flag", + "regex": "^(yes|no)$", + "type": "check", + "containerClass": "z-8", + "pattern": "^(yes|no)$", + "inpType": "checkbox", + "name": "Cookie auto Secure flag", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "yes", + "method": "default", + "prev_value": "yes", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Automatically add the Secure flag to all cookies." + } + ] + }, + "CONTENT_SECURITY_POLICY": { + "context": "multisite", + "default": "object-src 'none'; form-action 'self'; frame-ancestors 'self';", + "help": "Value for the Content-Security-Policy header.", + "id": "content-security-policy", + "label": "Content-Security-Policy", + "regex": "^.*$", + "type": "text", + "containerClass": "z-7", + "pattern": "^.*$", + "inpType": "input", + "name": "Content-Security-Policy", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "object-src 'none'; form-action 'self'; frame-ancestors 'self';", + "method": "default", + "prev_value": "object-src 'none'; form-action 'self'; frame-ancestors 'self';", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Value for the Content-Security-Policy header." + } + ] + }, + "CONTENT_SECURITY_POLICY_REPORT_ONLY": { + "context": "multisite", + "default": "no", + "help": "Send reports for violations of the Content-Security-Policy header instead of blocking them.", + "id": "content-security-policy-report-only", + "label": "Content-Security-Policy-Report-Only", + "regex": "^(yes|no)$", + "type": "check", + "containerClass": "z-6", + "pattern": "^(yes|no)$", + "inpType": "checkbox", + "name": "Content-Security-Policy-Report-Only", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "no", + "method": "default", + "prev_value": "no", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Send reports for violations of the Content-Security-Policy header instead of blocking them." + } + ] + }, + "REFERRER_POLICY": { + "context": "multisite", + "default": "strict-origin-when-cross-origin", + "help": "Value for the Referrer-Policy header.", + "id": "referrer-policy", + "label": "Referrer-Policy", + "regex": "^(?!^(,| ))((, )?(no-referrer-when-downgrade|no-referrer|origin-when-cross-origin|same-origin|strict-origin-when-cross-origin|strict-origin|origin|unsafe-url)(?!\\b.*, \\4\\b))*$", + "type": "text", + "containerClass": "z-5", + "pattern": "^(?!^(,| ))((, )?(no-referrer-when-downgrade|no-referrer|origin-when-cross-origin|same-origin|strict-origin-when-cross-origin|strict-origin|origin|unsafe-url)(?!\\b.*, \\4\\b))*$", + "inpType": "input", + "name": "Referrer-Policy", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "strict-origin-when-cross-origin", + "method": "default", + "prev_value": "strict-origin-when-cross-origin", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Value for the Referrer-Policy header." + } + ] + }, + "PERMISSIONS_POLICY": { + "context": "multisite", + "default": "accelerometer=(), ambient-light-sensor=(), autoplay=(), battery=(), camera=(), cross-origin-isolated=(), display-capture=(), document-domain=(), encrypted-media=(), execution-while-not-rendered=(), execution-while-out-of-viewport=(), fullscreen=(), geolocation=(), gyroscope=(), hid=(), idle-detection=(), magnetometer=(), microphone=(), midi=(), navigation-override=(), payment=(), picture-in-picture=(), publickey-credentials-get=(), screen-wake-lock=(), serial=(), usb=(), web-share=(), xr-spatial-tracking=()", + "help": "Value for the Permissions-Policy header.", + "id": "permissions-policy", + "label": "Permissions-Policy", + "regex": "^(?![, ])(,? ?([a-z\\-]+)(?!.*[^\\-]\\2=)=(\\*|\\(( ?(self|\\u0022https?:\\/\\/[\\-\\w@:%.+~#=]+[\\-\\w\\(\\)!@:%+.~#?&\\/=$]*\\u0022)(?=[ \\)]))*\\)))*$", + "type": "text", + "containerClass": "z-4", + "pattern": "^(?![, ])(,? ?([a-z\\-]+)(?!.*[^\\-]\\2=)=(\\*|\\(( ?(self|\\u0022https?:\\/\\/[\\-\\w@:%.+~#=]+[\\-\\w\\(\\)!@:%+.~#?&\\/=$]*\\u0022)(?=[ \\)]))*\\)))*$", + "inpType": "input", + "name": "Permissions-Policy", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "accelerometer=(), ambient-light-sensor=(), attribution-reporting=(), autoplay=(), battery=(), bluetooth=(), browsing-topics=(), camera=(), compute-pressure=(), display-capture=(), document-domain=(), encrypted-media=(), execution-while-not-rendered=(), execution-while-out-of-viewport=(), fullscreen=(), gamepad=(), geolocation=(), gyroscope=(), hid=(), identity-credentials-get=(), idle-detection=(), local-fonts=(), magnetometer=(), microphone=(), midi=(), otp-credentials=(), payment=(), picture-in-picture=(), publickey-credentials-create=(), publickey-credentials-get=(), screen-wake-lock=(), serial=(), speaker-selection=(), storage-access=(), usb=(), web-share=(), window-management=(), xr-spatial-tracking=()", + "method": "default", + "prev_value": "accelerometer=(), ambient-light-sensor=(), attribution-reporting=(), autoplay=(), battery=(), bluetooth=(), browsing-topics=(), camera=(), compute-pressure=(), display-capture=(), document-domain=(), encrypted-media=(), execution-while-not-rendered=(), execution-while-out-of-viewport=(), fullscreen=(), gamepad=(), geolocation=(), gyroscope=(), hid=(), identity-credentials-get=(), idle-detection=(), local-fonts=(), magnetometer=(), microphone=(), midi=(), otp-credentials=(), payment=(), picture-in-picture=(), publickey-credentials-create=(), publickey-credentials-get=(), screen-wake-lock=(), serial=(), speaker-selection=(), storage-access=(), usb=(), web-share=(), window-management=(), xr-spatial-tracking=()", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Value for the Permissions-Policy header." + } + ] + }, + "FEATURE_POLICY": { + "context": "multisite", + "default": "accelerometer 'none'; ambient-light-sensor 'none'; autoplay 'none'; battery 'none'; camera 'none'; display-capture 'none'; document-domain 'none'; encrypted-media 'none'; execution-while-not-rendered 'none'; execution-while-out-of-viewport 'none'; fullscreen 'none'; geolocation 'none'; gyroscope 'none'; layout-animation 'none'; legacy-image-formats 'none'; magnetometer 'none'; microphone 'none'; midi 'none'; navigation-override 'none'; payment 'none'; picture-in-picture 'none'; publickey-credentials-get 'none'; speaker-selection 'none'; sync-xhr 'none'; unoptimized-images 'none'; unsized-media 'none'; usb 'none'; screen-wake-lock 'none'; web-share 'none'; xr-spatial-tracking 'none';", + "help": "Value for the Feature-Policy header.", + "id": "feature-policy", + "label": "Feature-Policy", + "regex": "^(?![; ])( ?([\\w\\-]+)(?!.*[^\\-]\\2 )( ('(none|self|strict-dynamic|report-sample|unsafe-inline|unsafe-eval|unsafe-hashes|unsafe-allow-redirects)'|https?:\\/\\/[\\w@:%.+~#=\\-]+[\\w\\(\\)!@:%+.~#?&\\/=$\\-]*))+;)*$", + "type": "text", + "containerClass": "z-3", + "pattern": "^(?![; ])( ?([\\w\\-]+)(?!.*[^\\-]\\2 )( ('(none|self|strict-dynamic|report-sample|unsafe-inline|unsafe-eval|unsafe-hashes|unsafe-allow-redirects)'|https?:\\/\\/[\\w@:%.+~#=\\-]+[\\w\\(\\)!@:%+.~#?&\\/=$\\-]*))+;)*$", + "inpType": "input", + "name": "Feature-Policy", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "accelerometer 'none'; ambient-light-sensor 'none'; autoplay 'none'; battery 'none'; camera 'none'; display-capture 'none'; document-domain 'none'; encrypted-media 'none'; execution-while-not-rendered 'none'; execution-while-out-of-viewport 'none'; fullscreen 'none'; geolocation 'none'; gyroscope 'none'; layout-animation 'none'; legacy-image-formats 'none'; magnetometer 'none'; microphone 'none'; midi 'none'; navigation-override 'none'; payment 'none'; picture-in-picture 'none'; publickey-credentials-get 'none'; speaker-selection 'none'; sync-xhr 'none'; unoptimized-images 'none'; unsized-media 'none'; usb 'none'; screen-wake-lock 'none'; web-share 'none'; xr-spatial-tracking 'none';", + "prev_value": "accelerometer 'none'; ambient-light-sensor 'none'; autoplay 'none'; battery 'none'; camera 'none'; display-capture 'none'; document-domain 'none'; encrypted-media 'none'; execution-while-not-rendered 'none'; execution-while-out-of-viewport 'none'; fullscreen 'none'; geolocation 'none'; gyroscope 'none'; layout-animation 'none'; legacy-image-formats 'none'; magnetometer 'none'; microphone 'none'; midi 'none'; navigation-override 'none'; payment 'none'; picture-in-picture 'none'; publickey-credentials-get 'none'; speaker-selection 'none'; sync-xhr 'none'; unoptimized-images 'none'; unsized-media 'none'; usb 'none'; screen-wake-lock 'none'; web-share 'none'; xr-spatial-tracking 'none';", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Value for the Feature-Policy header." + } + ] + }, + "X_FRAME_OPTIONS": { + "context": "multisite", + "default": "SAMEORIGIN", + "help": "Value for the X-Frame-Options header.", + "id": "x-frame-options", + "label": "X-Frame-Options", + "regex": "^(DENY|SAMEORIGIN)?$", + "type": "select", + "containerClass": "z-2", + "pattern": "^(DENY|SAMEORIGIN)?$", + "inpType": "select", + "name": "X-Frame-Options", + "values": [ + "", + "DENY", + "SAMEORIGIN" + ], + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "SAMEORIGIN", + "method": "default", + "prev_value": "SAMEORIGIN", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Value for the X-Frame-Options header." + } + ] + }, + "X_CONTENT_TYPE_OPTIONS": { + "context": "multisite", + "default": "nosniff", + "help": "Value for the X-Content-Type-Options header.", + "id": "x-content-type-options", + "label": "X-Content-Type-Options", + "regex": "^(nosniff)?$", + "type": "select", + "containerClass": "z-1", + "pattern": "^(nosniff)?$", + "inpType": "select", + "name": "X-Content-Type-Options", + "values": [ + "", + "nosniff" + ], + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "nosniff", + "method": "default", + "prev_value": "nosniff", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Value for the X-Content-Type-Options header." + } + ] + }, + "X_XSS_PROTECTION": { + "context": "multisite", + "default": "1; mode=block", + "help": "Value for the X-XSS-Protection header.", + "id": "x-xss-protection", + "label": "X-XSS-Protection", + "regex": "^0|1(; (mode=block|report=https?:\\/\\/[\\-\\w@:%.+~#=]+[\\-\\w\\(\\)!@:%+.~#?&\\/=$]*))?$", + "type": "text", + "containerClass": "z-0", + "pattern": "^0|1(; (mode=block|report=https?:\\/\\/[\\-\\w@:%.+~#=]+[\\-\\w\\(\\)!@:%+.~#?&\\/=$]*))?$", + "inpType": "input", + "name": "X-XSS-Protection", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "1; mode=block", + "method": "default", + "prev_value": "1; mode=block", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Value for the X-XSS-Protection header." + } + ] + } + }, + "checksum": null, + "multiples_schema": { + "custom-headers": { + "CUSTOM_HEADER": { + "context": "multisite", + "default": "", + "help": "Custom header to add (HeaderName: HeaderValue).", + "id": "custom-header", + "label": "Custom header (HeaderName: HeaderValue)", + "regex": "^([\\w\\-]+: .+)?$", + "type": "text", + "multiple": "custom-headers", + "pattern": "^([\\w\\-]+: .+)?$", + "inpType": "input", + "name": "Custom header (HeaderName: HeaderValue)", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "", + "prev_value": "", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Custom header to add (HeaderName: HeaderValue)." + } + ], + "containerClass": "z-13" + } + }, + "cookie-flags": { + "COOKIE_FLAGS": { + "context": "multisite", + "default": "* HttpOnly SameSite=Lax", + "help": "Cookie flags automatically added to all cookies (value accepted for nginx_cookie_flag_module).", + "id": "cookie-flags", + "label": "Cookie flags", + "regex": "^(\\*|[^;]+)( (HttpOnly|(SameSite)(?!.*\\4)(=(Lax|Strict))?)(?!.*\\3))*$", + "type": "text", + "multiple": "cookie-flags", + "pattern": "^(\\*|[^;]+)( (HttpOnly|(SameSite)(?!.*\\4)(=(Lax|Strict))?)(?!.*\\3))*$", + "inpType": "input", + "name": "Cookie flags", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "* HttpOnly SameSite=Lax", + "prev_value": "* HttpOnly SameSite=Lax", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Cookie flags automatically added to all cookies (value accepted for nginx_cookie_flag_module)." + } + ], + "containerClass": "z-12" + } + } + }, + "multiples": { + "custom-headers": { + "0": { + "CUSTOM_HEADER": { + "context": "multisite", + "default": "", + "help": "Custom header to add (HeaderName: HeaderValue).", + "id": "custom-header", + "label": "Custom header (HeaderName: HeaderValue)", + "regex": "^([\\w\\-]+: .+)?$", + "type": "text", + "multiple": "custom-headers", + "pattern": "^([\\w\\-]+: .+)?$", + "inpType": "input", + "name": "Custom header (HeaderName: HeaderValue)", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "", + "prev_value": "", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Custom header to add (HeaderName: HeaderValue)." + } + ], + "containerClass": "z-13", + "method": "default" + } + } + }, + "cookie-flags": { + "0": { + "COOKIE_FLAGS": { + "context": "multisite", + "default": "* HttpOnly SameSite=Lax", + "help": "Cookie flags automatically added to all cookies (value accepted for nginx_cookie_flag_module).", + "id": "cookie-flags", + "label": "Cookie flags", + "regex": "^(\\*|[^;]+)( (HttpOnly|(SameSite)(?!.*\\4)(=(Lax|Strict))?)(?!.*\\3))*$", + "type": "text", + "multiple": "cookie-flags", + "pattern": "^(\\*|[^;]+)( (HttpOnly|(SameSite)(?!.*\\4)(=(Lax|Strict))?)(?!.*\\3))*$", + "inpType": "input", + "name": "Cookie flags", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "* HttpOnly SameSite=Lax", + "prev_value": "* HttpOnly SameSite=Lax", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Cookie flags automatically added to all cookies (value accepted for nginx_cookie_flag_module)." + } + ], + "containerClass": "z-12", + "method": "default" + } + } + } + } + }, + { + "id": "jobs", + "stream": "yes", + "name": "Jobs", + "description": "Fake core plugin for internal jobs.", + "version": "1.0", + "type": "core", + "method": "manual", + "page": false, + "settings": {}, + "checksum": null + }, + { + "id": "letsencrypt", + "stream": "yes", + "name": "Let's Encrypt", + "description": "Automatic creation, renewal and configuration of Let's Encrypt certificates.", + "version": "1.0", + "type": "core", + "method": "manual", + "page": false, + "settings": { + "AUTO_LETS_ENCRYPT": { + "context": "multisite", + "default": "no", + "help": "Activate automatic Let's Encrypt mode.", + "id": "auto-lets-encrypt", + "label": "Automatic Let's Encrypt", + "regex": "^(yes|no)$", + "type": "check", + "containerClass": "z-3", + "pattern": "^(yes|no)$", + "inpType": "checkbox", + "name": "Automatic Let's Encrypt", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "no", + "method": "default", + "prev_value": "no", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Activate automatic Let's Encrypt mode." + } + ] + }, + "EMAIL_LETS_ENCRYPT": { + "context": "multisite", + "default": "", + "help": "Email used for Let's Encrypt notification and in certificate.", + "id": "email-lets-encrypt", + "label": "Email Let's Encrypt", + "regex": "^([^@ \\t\\r\\n]+@[^@ \\t\\r\\n]+\\.[^@ \\t\\r\\n]+)?$", + "type": "text", + "containerClass": "z-2", + "pattern": "^([^@ \\t\\r\\n]+@[^@ \\t\\r\\n]+\\.[^@ \\t\\r\\n]+)?$", + "inpType": "input", + "name": "Email Let's Encrypt", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "", + "method": "default", + "prev_value": "", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Email used for Let's Encrypt notification and in certificate." + } + ] + }, + "USE_LETS_ENCRYPT_STAGING": { + "context": "multisite", + "default": "no", + "help": "Use the staging environment for Let\u2019s Encrypt certificate generation. Useful when you are testing your deployments to avoid being rate limited in the production environment.", + "id": "use-lets-encrypt-staging", + "label": "Use Let's Encrypt Staging", + "regex": "^(yes|no)$", + "type": "check", + "containerClass": "z-1", + "pattern": "^(yes|no)$", + "inpType": "checkbox", + "name": "Use Let's Encrypt Staging", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "no", + "method": "default", + "prev_value": "no", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Use the staging environment for Let\u2019s Encrypt certificate generation. Useful when you are testing your deployments to avoid being rate limited in the production environment." + } + ] + }, + "LETS_ENCRYPT_CLEAR_OLD_CERTS": { + "context": "global", + "default": "no", + "help": "Clear old certificates when renewing.", + "id": "lets-encrypt-clear-old-certs", + "label": "Clear old certificates when they are no longer needed", + "regex": "^(yes|no)$", + "type": "check", + "containerClass": "z-0", + "pattern": "^(yes|no)$", + "inpType": "checkbox", + "name": "Clear old certificates when they are no longer needed", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "no", + "method": "default", + "prev_value": "no", + "popovers": [ + { + "iconName": "globe", + "text": "inp_popover_global" + }, + { + "iconName": "info", + "text": "Clear old certificates when renewing." + } + ] + } + }, + "checksum": null + }, + { + "id": "limit", + "stream": "partial", + "name": "Limit", + "description": "Limit maximum number of requests and connections.", + "version": "1.0", + "type": "core", + "method": "manual", + "page": true, + "settings": { + "USE_LIMIT_REQ": { + "context": "multisite", + "default": "yes", + "help": "Activate limit requests feature.", + "id": "use-limit-req", + "label": "Activate limit requests", + "regex": "^(yes|no)$", + "type": "check", + "containerClass": "z-6", + "pattern": "^(yes|no)$", + "inpType": "checkbox", + "name": "Activate limit requests", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "yes", + "method": "default", + "prev_value": "yes", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Activate limit requests feature." + } + ] + }, + "USE_LIMIT_CONN": { + "context": "multisite", + "default": "yes", + "help": "Activate limit connections feature.", + "id": "use-limit-conn", + "label": "Activate limit connections", + "regex": "^(yes|no)$", + "type": "check", + "containerClass": "z-3", + "pattern": "^(yes|no)$", + "inpType": "checkbox", + "name": "Activate limit connections", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "yes", + "method": "default", + "prev_value": "yes", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Activate limit connections feature." + } + ] + }, + "LIMIT_CONN_MAX_HTTP1": { + "context": "multisite", + "default": "10", + "help": "Maximum number of connections per IP when using HTTP/1.X protocol.", + "id": "limit-conn-max-http1", + "label": "Maximum number of HTTP/1.X connections", + "regex": "^\\d+$", + "type": "text", + "containerClass": "z-2", + "pattern": "^\\d+$", + "inpType": "input", + "name": "Maximum number of HTTP/1.X connections", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "10", + "method": "default", + "prev_value": "10", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Maximum number of connections per IP when using HTTP/1.X protocol." + } + ] + }, + "LIMIT_CONN_MAX_HTTP2": { + "context": "multisite", + "default": "100", + "help": "Maximum number of streams per IP when using HTTP/2 protocol.", + "id": "limit-conn-max-http2", + "label": "Maximum number of HTTP/2 streams", + "regex": "^\\d+$", + "type": "text", + "containerClass": "z-1", + "pattern": "^\\d+$", + "inpType": "input", + "name": "Maximum number of HTTP/2 streams", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "100", + "method": "default", + "prev_value": "100", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Maximum number of streams per IP when using HTTP/2 protocol." + } + ] + }, + "LIMIT_CONN_MAX_STREAM": { + "context": "multisite", + "default": "10", + "help": "Maximum number of connections per IP when using stream.", + "id": "limit-conn-max-stream", + "label": "Maximum number of stream connections", + "regex": "^\\d+$", + "type": "text", + "containerClass": "z-0", + "pattern": "^\\d+$", + "inpType": "input", + "name": "Maximum number of stream connections", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "10", + "method": "default", + "prev_value": "10", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Maximum number of connections per IP when using stream." + } + ] + } + }, + "checksum": null, + "multiples_schema": { + "limit-req": { + "LIMIT_REQ_URL": { + "context": "multisite", + "default": "/", + "help": "URL (PCRE regex) where the limit request will be applied or special value / for all requests.", + "id": "limit-req-url", + "label": "Limit request URL", + "regex": "^.+$", + "type": "text", + "multiple": "limit-req", + "pattern": "^.+$", + "inpType": "input", + "name": "Limit request URL", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "/", + "prev_value": "/", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "URL (PCRE regex) where the limit request will be applied or special value / for all requests." + } + ], + "containerClass": "z-6" + }, + "LIMIT_REQ_RATE": { + "context": "multisite", + "default": "2r/s", + "help": "Rate to apply to the URL (s for second, m for minute, h for hour and d for day).", + "id": "limit-req-rate", + "label": "Limit request Rate", + "regex": "^\\d+r/[smhd]$", + "type": "text", + "multiple": "limit-req", + "pattern": "^\\d+r/[smhd]$", + "inpType": "input", + "name": "Limit request Rate", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "2r/s", + "prev_value": "2r/s", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Rate to apply to the URL (s for second, m for minute, h for hour and d for day)." + } + ], + "containerClass": "z-5" + } + } + }, + "multiples": { + "limit-req": { + "0": { + "LIMIT_REQ_URL": { + "context": "multisite", + "default": "/", + "help": "URL (PCRE regex) where the limit request will be applied or special value / for all requests.", + "id": "limit-req-url", + "label": "Limit request URL", + "regex": "^.+$", + "type": "text", + "multiple": "limit-req", + "pattern": "^.+$", + "inpType": "input", + "name": "Limit request URL", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "/", + "prev_value": "/", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "URL (PCRE regex) where the limit request will be applied or special value / for all requests." + } + ], + "containerClass": "z-6", + "method": "default" + }, + "LIMIT_REQ_RATE": { + "context": "multisite", + "default": "2r/s", + "help": "Rate to apply to the URL (s for second, m for minute, h for hour and d for day).", + "id": "limit-req-rate", + "label": "Limit request Rate", + "regex": "^\\d+r/[smhd]$", + "type": "text", + "multiple": "limit-req", + "pattern": "^\\d+r/[smhd]$", + "inpType": "input", + "name": "Limit request Rate", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "2r/s", + "prev_value": "2r/s", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Rate to apply to the URL (s for second, m for minute, h for hour and d for day)." + } + ], + "containerClass": "z-5", + "method": "default" + } + } + } + } + }, + { + "id": "metrics", + "stream": "partial", + "name": "Metrics", + "description": "Metrics collection and retrieve.", + "version": "1.0", + "type": "core", + "method": "manual", + "page": false, + "settings": { + "USE_METRICS": { + "context": "multisite", + "default": "yes", + "help": "Enable collection and retrieval of internal metrics.", + "id": "use-metrics", + "label": "Use metrics", + "regex": "^(yes|no)$", + "type": "check", + "containerClass": "z-2", + "pattern": "^(yes|no)$", + "inpType": "checkbox", + "name": "Use metrics", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "yes", + "method": "default", + "prev_value": "yes", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Enable collection and retrieval of internal metrics." + } + ] + }, + "METRICS_MEMORY_SIZE": { + "context": "global", + "default": "16m", + "help": "Size of the internal storage for metrics.", + "id": "metrics-memory-size", + "label": "Metrics memory size", + "regex": "^\\d+[kKmMgG]?$", + "type": "text", + "containerClass": "z-1", + "pattern": "^\\d+[kKmMgG]?$", + "inpType": "input", + "name": "Metrics memory size", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "16m", + "method": "default", + "prev_value": "16m", + "popovers": [ + { + "iconName": "globe", + "text": "inp_popover_global" + }, + { + "iconName": "info", + "text": "Size of the internal storage for metrics." + } + ] + }, + "METRICS_MAX_BLOCKED_REQUESTS": { + "context": "global", + "default": "100", + "help": "Maximum number of blocked requests to store (per worker).", + "id": "metrics-max-blocked-requests", + "label": "Metrics max blocked requests", + "regex": "^\\d+$", + "type": "text", + "containerClass": "z-0", + "pattern": "^\\d+$", + "inpType": "input", + "name": "Metrics max blocked requests", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "100", + "method": "default", + "prev_value": "100", + "popovers": [ + { + "iconName": "globe", + "text": "inp_popover_global" + }, + { + "iconName": "info", + "text": "Maximum number of blocked requests to store (per worker)." + } + ] + } + }, + "checksum": null + }, + { + "id": "misc", + "stream": "partial", + "name": "Miscellaneous", + "description": "Miscellaneous settings.", + "version": "1.0", + "type": "core", + "method": "manual", + "page": true, + "settings": { + "DISABLE_DEFAULT_SERVER": { + "context": "global", + "default": "no", + "help": "Deny HTTP request if the request vhost is unknown.", + "id": "disable-default-server", + "label": "Disable default server", + "regex": "^(yes|no)$", + "type": "check", + "containerClass": "z-20", + "pattern": "^(yes|no)$", + "inpType": "checkbox", + "name": "Disable default server", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": true, + "value": "yes", + "method": "scheduler", + "prev_value": "yes", + "popovers": [ + { + "iconName": "trespass", + "text": "inp_popover_method_disabled" + }, + { + "iconName": "globe", + "text": "inp_popover_global" + }, + { + "iconName": "info", + "text": "Deny HTTP request if the request vhost is unknown." + } + ] + }, + "DISABLE_DEFAULT_SERVER_STRICT_SNI": { + "context": "global", + "default": "no", + "help": "Close SSL/TLS connection if the SNI is unknown.", + "id": "disable-default-server-strict-sni", + "label": "Disable default server strict SNI", + "regex": "^(yes|no)$", + "type": "check", + "containerClass": "z-19", + "pattern": "^(yes|no)$", + "inpType": "checkbox", + "name": "Disable default server strict SNI", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "no", + "method": "default", + "prev_value": "no", + "popovers": [ + { + "iconName": "globe", + "text": "inp_popover_global" + }, + { + "iconName": "info", + "text": "Close SSL/TLS connection if the SNI is unknown." + } + ] + }, + "REDIRECT_HTTP_TO_HTTPS": { + "context": "multisite", + "default": "no", + "help": "Redirect all HTTP request to HTTPS.", + "id": "redirect-http-to-https", + "label": "Redirect HTTP to HTTPS", + "regex": "^(yes|no)$", + "type": "check", + "containerClass": "z-18", + "pattern": "^(yes|no)$", + "inpType": "checkbox", + "name": "Redirect HTTP to HTTPS", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "no", + "method": "default", + "prev_value": "no", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Redirect all HTTP request to HTTPS." + } + ] + }, + "AUTO_REDIRECT_HTTP_TO_HTTPS": { + "context": "multisite", + "default": "yes", + "help": "Try to detect if HTTPS is used and activate HTTP to HTTPS redirection if that's the case.", + "id": "auto-redirect-http-to-https", + "label": "Auto redirect HTTP to HTTPS", + "regex": "^(yes|no)$", + "type": "check", + "containerClass": "z-17", + "pattern": "^(yes|no)$", + "inpType": "checkbox", + "name": "Auto redirect HTTP to HTTPS", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "yes", + "method": "default", + "prev_value": "yes", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Try to detect if HTTPS is used and activate HTTP to HTTPS redirection if that's the case." + } + ] + }, + "ALLOWED_METHODS": { + "context": "multisite", + "default": "GET|POST|HEAD", + "help": "Allowed HTTP and WebDAV methods, separated with pipes to be sent by clients.", + "id": "allowed-methods", + "label": "Allowed methods", + "regex": "^(?!\\|)(\\|?([A-Z]{3,})(?!.*(^|\\|)\\2))+$", + "type": "text", + "containerClass": "z-16", + "pattern": "^(?!\\|)(\\|?([A-Z]{3,})(?!.*(^|\\|)\\2))+$", + "inpType": "input", + "name": "Allowed methods", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "GET|POST|HEAD", + "method": "default", + "prev_value": "GET|POST|HEAD", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Allowed HTTP and WebDAV methods, separated with pipes to be sent by clients." + } + ] + }, + "MAX_CLIENT_SIZE": { + "context": "multisite", + "default": "10m", + "help": "Maximum body size (0 for infinite).", + "id": "max-client-size", + "label": "Maximum body size", + "regex": "^\\d+[kKmMgG]?$", + "type": "text", + "containerClass": "z-15", + "pattern": "^\\d+[kKmMgG]?$", + "inpType": "input", + "name": "Maximum body size", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "10m", + "method": "default", + "prev_value": "10m", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Maximum body size (0 for infinite)." + } + ] + }, + "SERVE_FILES": { + "context": "multisite", + "default": "yes", + "help": "Serve files from the local folder.", + "id": "serve-files", + "label": "Serve files", + "regex": "^(yes|no)$", + "type": "check", + "containerClass": "z-14", + "pattern": "^(yes|no)$", + "inpType": "checkbox", + "name": "Serve files", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": true, + "value": "no", + "method": "scheduler", + "prev_value": "no", + "popovers": [ + { + "iconName": "trespass", + "text": "inp_popover_method_disabled" + }, + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Serve files from the local folder." + } + ] + }, + "ROOT_FOLDER": { + "context": "multisite", + "default": "", + "help": "Root folder containing files to serve (/var/www/html/{server_name} if unset).", + "id": "root-folder", + "label": "Root folder", + "regex": "^(/[\\w. \\-]+)*/?$", + "type": "text", + "containerClass": "z-13", + "pattern": "^(/[\\w. \\-]+)*/?$", + "inpType": "input", + "name": "Root folder", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "", + "method": "default", + "prev_value": "", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Root folder containing files to serve (/var/www/html/{server_name} if unset)." + } + ] + }, + "SSL_PROTOCOLS": { + "context": "multisite", + "default": "TLSv1.2 TLSv1.3", + "help": "The supported version of TLS. We recommend the default value TLSv1.2 TLSv1.3 for compatibility reasons.", + "id": "https-protocols", + "label": "HTTPS protocols", + "regex": "^(?! )( ?TLSv1\\.[0-3])*$", + "type": "text", + "containerClass": "z-12", + "pattern": "^(?! )( ?TLSv1\\.[0-3])*$", + "inpType": "input", + "name": "HTTPS protocols", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "TLSv1.2 TLSv1.3", + "method": "default", + "prev_value": "TLSv1.2 TLSv1.3", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "The supported version of TLS. We recommend the default value TLSv1.2 TLSv1.3 for compatibility reasons." + } + ] + }, + "HTTP2": { + "context": "multisite", + "default": "yes", + "help": "Support HTTP2 protocol when HTTPS is enabled.", + "id": "http2", + "label": "HTTP2", + "regex": "^(yes|no)$", + "type": "check", + "containerClass": "z-11", + "pattern": "^(yes|no)$", + "inpType": "checkbox", + "name": "HTTP2", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "yes", + "method": "default", + "prev_value": "yes", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Support HTTP2 protocol when HTTPS is enabled." + } + ] + }, + "HTTP3": { + "context": "multisite", + "default": "no", + "help": "Support HTTP3 protocol when HTTPS is enabled.", + "id": "http3", + "label": "HTTP3", + "regex": "^(yes|no)$", + "type": "check", + "containerClass": "z-10", + "pattern": "^(yes|no)$", + "inpType": "checkbox", + "name": "HTTP3", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "no", + "method": "default", + "prev_value": "no", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Support HTTP3 protocol when HTTPS is enabled." + } + ] + }, + "HTTP3_ALT_SVC_PORT": { + "context": "multisite", + "default": "443", + "help": "HTTP3 alternate service port. This value will be used as part of the Alt-Svc header.", + "id": "http3-alt-svc-port", + "label": "HTTP3 Alt-Svc port", + "regex": "^\\d+$", + "type": "text", + "containerClass": "z-9", + "pattern": "^\\d+$", + "inpType": "input", + "name": "HTTP3 Alt-Svc port", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "443", + "method": "default", + "prev_value": "443", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "HTTP3 alternate service port. This value will be used as part of the Alt-Svc header." + } + ] + }, + "LISTEN_HTTP": { + "context": "multisite", + "default": "yes", + "help": "Respond to (insecure) HTTP requests.", + "id": "http-listen", + "label": "HTTP listen", + "regex": "^(yes|no)$", + "type": "check", + "containerClass": "z-8", + "pattern": "^(yes|no)$", + "inpType": "checkbox", + "name": "HTTP listen", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "yes", + "method": "default", + "prev_value": "yes", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Respond to (insecure) HTTP requests." + } + ] + }, + "USE_OPEN_FILE_CACHE": { + "context": "multisite", + "default": "no", + "help": "Enable open file cache feature", + "id": "use-open-file-cache", + "label": "Use open file cache", + "regex": "^(yes|no)$", + "type": "check", + "containerClass": "z-7", + "pattern": "^(yes|no)$", + "inpType": "checkbox", + "name": "Use open file cache", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "no", + "method": "default", + "prev_value": "no", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Enable open file cache feature" + } + ] + }, + "OPEN_FILE_CACHE": { + "context": "multisite", + "default": "max=1000 inactive=20s", + "help": "Open file cache directive", + "id": "open-file-cache", + "label": "Use open file cache", + "regex": "^(off|max=\\d+( inactive=\\d+(ms?|[shdwMy]))?)$", + "type": "text", + "containerClass": "z-6", + "pattern": "^(off|max=\\d+( inactive=\\d+(ms?|[shdwMy]))?)$", + "inpType": "input", + "name": "Use open file cache", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "max=1000 inactive=20s", + "method": "default", + "prev_value": "max=1000 inactive=20s", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Open file cache directive" + } + ] + }, + "OPEN_FILE_CACHE_ERRORS": { + "context": "multisite", + "default": "yes", + "help": "Enable open file cache for errors", + "id": "open-file-cache-errors", + "label": "Open file cache errors", + "regex": "^(yes|no)$", + "type": "check", + "containerClass": "z-5", + "pattern": "^(yes|no)$", + "inpType": "checkbox", + "name": "Open file cache errors", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "yes", + "method": "default", + "prev_value": "yes", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Enable open file cache for errors" + } + ] + }, + "OPEN_FILE_CACHE_MIN_USES": { + "context": "multisite", + "default": "2", + "help": "Enable open file cache minimum uses", + "id": "open-file-cache-min-uses", + "label": "Open file cache min uses", + "regex": "^[1-9]\\d*$", + "type": "text", + "containerClass": "z-4", + "pattern": "^[1-9]\\d*$", + "inpType": "input", + "name": "Open file cache min uses", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "2", + "method": "default", + "prev_value": "2", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Enable open file cache minimum uses" + } + ] + }, + "OPEN_FILE_CACHE_VALID": { + "context": "multisite", + "default": "30s", + "help": "Open file cache valid time", + "id": "open-file-cache-valid", + "label": "Open file cache valid time", + "regex": "^\\d+(ms?|[shdwMy])$", + "type": "text", + "containerClass": "z-3", + "pattern": "^\\d+(ms?|[shdwMy])$", + "inpType": "input", + "name": "Open file cache valid time", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "30s", + "method": "default", + "prev_value": "30s", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Open file cache valid time" + } + ] + }, + "EXTERNAL_PLUGIN_URLS": { + "context": "global", + "default": "", + "help": "List of external plugins URLs (direct download to .zip or .tar file) to download and install (URLs are separated with space).", + "id": "external-plugin-urls", + "label": "External plugin URLs", + "regex": "^( *((https?:\\/\\/|file:\\/\\/\\/)[\\-\\w@:%.+~#=]+[\\-\\w\\(\\)!@:%+.~#?&\\/=$]*)(?!.*\\2(?!.)) *)*$", + "type": "text", + "containerClass": "z-2", + "pattern": "^( *((https?:\\/\\/|file:\\/\\/\\/)[\\-\\w@:%.+~#=]+[\\-\\w\\(\\)!@:%+.~#?&\\/=$]*)(?!.*\\2(?!.)) *)*$", + "inpType": "input", + "name": "External plugin URLs", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "", + "method": "default", + "prev_value": "", + "popovers": [ + { + "iconName": "globe", + "text": "inp_popover_global" + }, + { + "iconName": "info", + "text": "List of external plugins URLs (direct download to .zip or .tar file) to download and install (URLs are separated with space)." + } + ] + }, + "DENY_HTTP_STATUS": { + "context": "global", + "default": "403", + "help": "HTTP status code to send when the request is denied (403 or 444). When using 444, BunkerWeb will close the connection.", + "id": "deny-http-status", + "label": "Deny HTTP status", + "regex": "^(403|444)$", + "type": "select", + "containerClass": "z-1", + "pattern": "^(403|444)$", + "inpType": "select", + "name": "Deny HTTP status", + "values": [ + "403", + "444" + ], + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "403", + "method": "default", + "prev_value": "403", + "popovers": [ + { + "iconName": "globe", + "text": "inp_popover_global" + }, + { + "iconName": "info", + "text": "HTTP status code to send when the request is denied (403 or 444). When using 444, BunkerWeb will close the connection." + } + ] + }, + "SEND_ANONYMOUS_REPORT": { + "context": "global", + "default": "yes", + "help": "Send anonymous report to BunkerWeb maintainers.", + "id": "send-anonymous-report", + "label": "Send anonymous report", + "regex": "^(yes|no)$", + "type": "check", + "containerClass": "z-0", + "pattern": "^(yes|no)$", + "inpType": "checkbox", + "name": "Send anonymous report", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": true, + "value": "no", + "method": "scheduler", + "prev_value": "no", + "popovers": [ + { + "iconName": "trespass", + "text": "inp_popover_method_disabled" + }, + { + "iconName": "globe", + "text": "inp_popover_global" + }, + { + "iconName": "info", + "text": "Send anonymous report to BunkerWeb maintainers." + } + ] + } + }, + "checksum": null + }, + { + "id": "modsecurity", + "stream": "no", + "name": "ModSecurity", + "description": "Management of the ModSecurity WAF.", + "version": "1.0", + "type": "core", + "method": "manual", + "page": false, + "settings": { + "USE_MODSECURITY": { + "context": "multisite", + "default": "yes", + "help": "Enable ModSecurity WAF.", + "id": "use-modsecurity", + "label": "Use ModSecurity", + "regex": "^(yes|no)$", + "type": "check", + "containerClass": "z-5", + "pattern": "^(yes|no)$", + "inpType": "checkbox", + "name": "Use ModSecurity", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "yes", + "method": "default", + "prev_value": "yes", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Enable ModSecurity WAF." + } + ] + }, + "USE_MODSECURITY_CRS": { + "context": "multisite", + "default": "yes", + "help": "Enable OWASP Core Rule Set.", + "id": "use-modsecurity-crs", + "label": "Use Core Rule Set", + "regex": "^(yes|no)$", + "type": "check", + "containerClass": "z-4", + "pattern": "^(yes|no)$", + "inpType": "checkbox", + "name": "Use Core Rule Set", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "yes", + "method": "default", + "prev_value": "yes", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Enable OWASP Core Rule Set." + } + ] + }, + "MODSECURITY_CRS_VERSION": { + "context": "multisite", + "default": "3", + "help": "Version of the OWASP Core Rule Set to use with ModSecurity (3, 4 or nightly).", + "id": "modsecurity-crs-version", + "label": "Core Rule Set Version", + "regex": "^(3|4|nightly)$", + "type": "select", + "containerClass": "z-3", + "pattern": "^(3|4|nightly)$", + "inpType": "select", + "name": "Core Rule Set Version", + "values": [ + "3", + "4", + "nightly" + ], + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "4", + "method": "default", + "prev_value": "4", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Version of the OWASP Core Rule Set to use with ModSecurity (3, 4 or nightly)." + } + ] + }, + "MODSECURITY_SEC_AUDIT_ENGINE": { + "context": "multisite", + "default": "RelevantOnly", + "help": "SecAuditEngine directive of ModSecurity.", + "id": "modsecurity-sec-audit-engine", + "label": "SecAuditEngine", + "regex": "^(On|RelevantOnly|Off)$", + "type": "select", + "containerClass": "z-2", + "pattern": "^(On|RelevantOnly|Off)$", + "inpType": "select", + "name": "SecAuditEngine", + "values": [ + "Off", + "On", + "RelevantOnly" + ], + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "RelevantOnly", + "method": "default", + "prev_value": "RelevantOnly", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "SecAuditEngine directive of ModSecurity." + } + ] + }, + "MODSECURITY_SEC_RULE_ENGINE": { + "context": "multisite", + "default": "On", + "help": "SecRuleEngine directive of ModSecurity.", + "id": "modsecurity-sec-rule-engine", + "label": "SecRuleEngine", + "regex": "^(On|DetectionOnly|Off)$", + "type": "select", + "containerClass": "z-1", + "pattern": "^(On|DetectionOnly|Off)$", + "inpType": "select", + "name": "SecRuleEngine", + "values": [ + "DetectionOnly", + "Off", + "On" + ], + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "On", + "method": "default", + "prev_value": "On", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "SecRuleEngine directive of ModSecurity." + } + ] + }, + "MODSECURITY_SEC_AUDIT_LOG_PARTS": { + "context": "multisite", + "default": "ABCFHZ", + "help": "SecAuditLogParts directive of ModSecurity.", + "id": "modsecurity-sec-audit-log-parts", + "label": "SecAuditLogParts", + "regex": "^A(([B-K])(?!.*\\2))+Z$", + "type": "text", + "containerClass": "z-0", + "pattern": "^A(([B-K])(?!.*\\2))+Z$", + "inpType": "input", + "name": "SecAuditLogParts", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "ABCFHZ", + "method": "default", + "prev_value": "ABCFHZ", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "SecAuditLogParts directive of ModSecurity." + } + ] + } + }, + "checksum": null + }, + { + "id": "php", + "stream": "no", + "name": "PHP", + "description": "Manage local or remote PHP-FPM.", + "version": "1.0", + "type": "core", + "method": "manual", + "page": false, + "settings": { + "REMOTE_PHP": { + "context": "multisite", + "default": "", + "help": "Hostname of the remote PHP-FPM instance.", + "id": "remote-php", + "label": "Remote PHP", + "regex": "^((?=.{1,255}$)[0-9A-Za-z](?:(?:[0-9A-Za-z]|-){0,61}[0-9A-Za-z])?(?:\\.[0-9A-Za-z](?:(?:[0-9A-Za-z]|-){0,61}[0-9A-Za-z])?)*\\.?)?$", + "type": "text", + "containerClass": "z-3", + "pattern": "^((?=.{1,255}$)[0-9A-Za-z](?:(?:[0-9A-Za-z]|-){0,61}[0-9A-Za-z])?(?:\\.[0-9A-Za-z](?:(?:[0-9A-Za-z]|-){0,61}[0-9A-Za-z])?)*\\.?)?$", + "inpType": "input", + "name": "Remote PHP", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "", + "method": "default", + "prev_value": "", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Hostname of the remote PHP-FPM instance." + } + ] + }, + "REMOTE_PHP_PATH": { + "context": "multisite", + "default": "", + "help": "Root folder containing files in the remote PHP-FPM instance.", + "id": "remote-php-path", + "label": "Remote PHP path", + "regex": "^(/[\\w. \\-]+)*/?$", + "type": "text", + "containerClass": "z-2", + "pattern": "^(/[\\w. \\-]+)*/?$", + "inpType": "input", + "name": "Remote PHP path", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "", + "method": "default", + "prev_value": "", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Root folder containing files in the remote PHP-FPM instance." + } + ] + }, + "LOCAL_PHP": { + "context": "multisite", + "default": "", + "help": "Path to the PHP-FPM socket file.", + "id": "local", + "label": "Local PHP", + "regex": "^(/[\\w. \\-]+)*/?$", + "type": "text", + "containerClass": "z-1", + "pattern": "^(/[\\w. \\-]+)*/?$", + "inpType": "input", + "name": "Local PHP", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "", + "method": "default", + "prev_value": "", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Path to the PHP-FPM socket file." + } + ] + }, + "LOCAL_PHP_PATH": { + "context": "multisite", + "default": "", + "help": "Root folder containing files in the local PHP-FPM instance.", + "id": "local-php-path", + "label": "Local PHP path", + "regex": "^(/[\\w. \\-]+)*/?$", + "type": "text", + "containerClass": "z-0", + "pattern": "^(/[\\w. \\-]+)*/?$", + "inpType": "input", + "name": "Local PHP path", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "", + "method": "default", + "prev_value": "", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Root folder containing files in the local PHP-FPM instance." + } + ] + } + }, + "checksum": null + }, + { + "id": "pro", + "stream": "no", + "name": "Pro", + "description": "Pro settings for the Pro version of BunkerWeb.", + "version": "1.0", + "type": "core", + "method": "manual", + "page": false, + "settings": { + "PRO_LICENSE_KEY": { + "context": "global", + "default": "", + "help": "The License Key for the Pro version of BunkerWeb.", + "id": "pro-license-key", + "label": "Pro License Key", + "regex": "^.*$", + "type": "password", + "containerClass": "z-0", + "pattern": "^.*$", + "inpType": "input", + "name": "Pro License Key", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "", + "method": "default", + "prev_value": "", + "popovers": [ + { + "iconName": "globe", + "text": "inp_popover_global" + }, + { + "iconName": "info", + "text": "The License Key for the Pro version of BunkerWeb." + } + ] + } + }, + "checksum": null + }, + { + "id": "realip", + "stream": "partial", + "name": "Real IP", + "description": "Get real IP of clients when BunkerWeb is behind a reverse proxy / load balancer.", + "version": "1.0", + "type": "core", + "method": "manual", + "page": false, + "settings": { + "USE_REAL_IP": { + "context": "multisite", + "default": "no", + "help": "Retrieve the real IP of client.", + "id": "use-real-ip", + "label": "Use real ip", + "regex": "^(yes|no)$", + "type": "check", + "containerClass": "z-5", + "pattern": "^(yes|no)$", + "inpType": "checkbox", + "name": "Use real ip", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "no", + "method": "default", + "prev_value": "no", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Retrieve the real IP of client." + } + ] + }, + "USE_PROXY_PROTOCOL": { + "context": "multisite", + "default": "no", + "help": "Enable PROXY protocol communication.", + "id": "use-proxy-protocol", + "label": "Use PROXY protocol", + "regex": "^(yes|no)$", + "type": "check", + "containerClass": "z-4", + "pattern": "^(yes|no)$", + "inpType": "checkbox", + "name": "Use PROXY protocol", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "no", + "method": "default", + "prev_value": "no", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Enable PROXY protocol communication." + } + ] + }, + "REAL_IP_FROM": { + "context": "multisite", + "default": "192.168.0.0/16 172.16.0.0/12 10.0.0.0/8", + "help": "List of trusted IPs / networks, separated with spaces, where proxied requests come from.", + "id": "real-ip-from", + "label": "Real IP from", + "regex": "^(?! )( *(((\\b25[0-5]|\\b2[0-4]\\d|\\b[01]?\\d\\d?)(\\.(25[0-5]|2[0-4]\\d|[01]?\\d\\d?)){3})(\\/([1-2][0-9]?|3[0-2]?|[04-9]))?|(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]Z{0,4}){0,4}%[0-9a-zA-Z]+|::(ffff(:0{1,4})?:)?((25[0-5]|(2[0-4]|1?\\d)?\\d)\\.){3}(25[0-5]|(2[0-4]|1?\\d)?\\d)|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1?\\d)?\\d)\\.){3}(25[0-5]|(2[0-4]|1?\\d)?\\d))(\\/(12[0-8]|1[01][0-9]|[0-9][0-9]?))?)(?!.*\\D\\2([^\\d\\/]|$)) *)*$", + "type": "text", + "containerClass": "z-3", + "pattern": "^(?! )( *(((\\b25[0-5]|\\b2[0-4]\\d|\\b[01]?\\d\\d?)(\\.(25[0-5]|2[0-4]\\d|[01]?\\d\\d?)){3})(\\/([1-2][0-9]?|3[0-2]?|[04-9]))?|(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]Z{0,4}){0,4}%[0-9a-zA-Z]+|::(ffff(:0{1,4})?:)?((25[0-5]|(2[0-4]|1?\\d)?\\d)\\.){3}(25[0-5]|(2[0-4]|1?\\d)?\\d)|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1?\\d)?\\d)\\.){3}(25[0-5]|(2[0-4]|1?\\d)?\\d))(\\/(12[0-8]|1[01][0-9]|[0-9][0-9]?))?)(?!.*\\D\\2([^\\d\\/]|$)) *)*$", + "inpType": "input", + "name": "Real IP from", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "192.168.0.0/16 172.16.0.0/12 10.0.0.0/8", + "method": "default", + "prev_value": "192.168.0.0/16 172.16.0.0/12 10.0.0.0/8", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "List of trusted IPs / networks, separated with spaces, where proxied requests come from." + } + ] + }, + "REAL_IP_HEADER": { + "context": "multisite", + "default": "X-Forwarded-For", + "help": "HTTP header containing the real IP or special value proxy_protocol for PROXY protocol.", + "id": "real-ip-header", + "label": "Real IP header", + "regex": "^(?! )(( ?(?!proxy_protocol)[\\w\\-]+)*|proxy_protocol)$", + "type": "text", + "containerClass": "z-2", + "pattern": "^(?! )(( ?(?!proxy_protocol)[\\w\\-]+)*|proxy_protocol)$", + "inpType": "input", + "name": "Real IP header", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "X-Forwarded-For", + "method": "default", + "prev_value": "X-Forwarded-For", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "HTTP header containing the real IP or special value proxy_protocol for PROXY protocol." + } + ] + }, + "REAL_IP_RECURSIVE": { + "context": "multisite", + "default": "yes", + "help": "Perform a recursive search in the header container IP address.", + "id": "real-ip-recursive", + "label": "Real IP recursive", + "regex": "^(yes|no)$", + "type": "check", + "containerClass": "z-1", + "pattern": "^(yes|no)$", + "inpType": "checkbox", + "name": "Real IP recursive", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "yes", + "method": "default", + "prev_value": "yes", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Perform a recursive search in the header container IP address." + } + ] + }, + "REAL_IP_FROM_URLS": { + "context": "global", + "default": "", + "help": "List of URLs containing trusted IPs / networks, separated with spaces, where proxied requests come from.", + "id": "real-ip-from-urls", + "label": "Real IP from URLs", + "regex": "^( *((https?:\\/\\/|file:\\/\\/\\/)[\\-\\w@:%.+~#=]+[\\-\\w\\(\\)!@:%+.~#?&\\/=$]*)(?!.*\\2(?!.)) *)*$", + "type": "text", + "containerClass": "z-0", + "pattern": "^( *((https?:\\/\\/|file:\\/\\/\\/)[\\-\\w@:%.+~#=]+[\\-\\w\\(\\)!@:%+.~#?&\\/=$]*)(?!.*\\2(?!.)) *)*$", + "inpType": "input", + "name": "Real IP from URLs", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "", + "method": "default", + "prev_value": "", + "popovers": [ + { + "iconName": "globe", + "text": "inp_popover_global" + }, + { + "iconName": "info", + "text": "List of URLs containing trusted IPs / networks, separated with spaces, where proxied requests come from." + } + ] + } + }, + "checksum": null + }, + { + "id": "redirect", + "stream": "no", + "name": "Redirect", + "description": "Manage HTTP redirects.", + "version": "1.0", + "type": "core", + "method": "manual", + "page": false, + "settings": { + "REDIRECT_TO": { + "context": "multisite", + "default": "", + "help": "Redirect a whole site to another one.", + "id": "redirect-to", + "label": "Redirect to", + "regex": "^(https?:\\/\\/[\\-\\w@:%.+~#=]+[\\-\\w\\(\\)!@:%+.~#?&\\/=$]*)?$", + "type": "text", + "containerClass": "z-2", + "pattern": "^(https?:\\/\\/[\\-\\w@:%.+~#=]+[\\-\\w\\(\\)!@:%+.~#?&\\/=$]*)?$", + "inpType": "input", + "name": "Redirect to", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "", + "method": "default", + "prev_value": "", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Redirect a whole site to another one." + } + ] + }, + "REDIRECT_TO_REQUEST_URI": { + "context": "multisite", + "default": "no", + "help": "Append the requested URI to the redirect address.", + "id": "redirect-to-request-uri", + "label": "Append request URI", + "regex": "^(yes|no)$", + "type": "check", + "containerClass": "z-1", + "pattern": "^(yes|no)$", + "inpType": "checkbox", + "name": "Append request URI", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "no", + "method": "default", + "prev_value": "no", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Append the requested URI to the redirect address." + } + ] + }, + "REDIRECT_TO_STATUS_CODE": { + "context": "multisite", + "default": "301", + "help": "Status code to send to client when redirecting.", + "id": "redirect-to-status-code", + "label": "Append request URI", + "regex": "^(301|302)$", + "type": "select", + "containerClass": "z-0", + "pattern": "^(301|302)$", + "inpType": "select", + "name": "Append request URI", + "values": [ + "301", + "302" + ], + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "301", + "method": "default", + "prev_value": "301", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Status code to send to client when redirecting." + } + ] + } + }, + "checksum": null + }, + { + "id": "redis", + "stream": "yes", + "name": "Redis", + "description": "Redis server configuration when using BunkerWeb in cluster mode.", + "version": "1.0", + "type": "core", + "method": "manual", + "page": true, + "settings": { + "USE_REDIS": { + "context": "global", + "default": "no", + "help": "Activate Redis.", + "id": "use-redis", + "label": "Activate Redis", + "regex": "^(yes|no)$", + "type": "check", + "containerClass": "z-14", + "pattern": "^(yes|no)$", + "inpType": "checkbox", + "name": "Activate Redis", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "no", + "method": "default", + "prev_value": "no", + "popovers": [ + { + "iconName": "globe", + "text": "inp_popover_global" + }, + { + "iconName": "info", + "text": "Activate Redis." + } + ] + }, + "REDIS_HOST": { + "context": "global", + "default": "", + "help": "Redis server IP or hostname.", + "id": "redis-host", + "label": "Redis server", + "regex": "^((?!-)[a-zA-Z0-9\\-]{1,63}(.[a-zA-Z]{2,})+|(\\b25[0-5]|\\b2[0-4]\\d|\\b[01]?\\d\\d?)(\\.(25[0-5]|2[0-4]\\d|[01]?\\d\\d?)){3}|(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]Z{0,4}){0,4}%[0-9a-zA-Z]+|::(ffff(:0{1,4})?:)?((25[0-5]|(2[0-4]|1?\\d)?\\d)\\.){3}(25[0-5]|(2[0-4]|1?\\d)?\\d)|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1?\\d)?\\d)\\.){3}(25[0-5]|(2[0-4]|1?\\d)?\\d)))?$", + "type": "text", + "containerClass": "z-13", + "pattern": "^((?!-)[a-zA-Z0-9\\-]{1,63}(.[a-zA-Z]{2,})+|(\\b25[0-5]|\\b2[0-4]\\d|\\b[01]?\\d\\d?)(\\.(25[0-5]|2[0-4]\\d|[01]?\\d\\d?)){3}|(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]Z{0,4}){0,4}%[0-9a-zA-Z]+|::(ffff(:0{1,4})?:)?((25[0-5]|(2[0-4]|1?\\d)?\\d)\\.){3}(25[0-5]|(2[0-4]|1?\\d)?\\d)|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1?\\d)?\\d)\\.){3}(25[0-5]|(2[0-4]|1?\\d)?\\d)))?$", + "inpType": "input", + "name": "Redis server", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "", + "method": "default", + "prev_value": "", + "popovers": [ + { + "iconName": "globe", + "text": "inp_popover_global" + }, + { + "iconName": "info", + "text": "Redis server IP or hostname." + } + ] + }, + "REDIS_PORT": { + "context": "global", + "default": "6379", + "help": "Redis server port.", + "id": "redis-port", + "label": "Redis port", + "regex": "^[0-9]+$", + "type": "text", + "containerClass": "z-12", + "pattern": "^[0-9]+$", + "inpType": "input", + "name": "Redis port", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "6379", + "method": "default", + "prev_value": "6379", + "popovers": [ + { + "iconName": "globe", + "text": "inp_popover_global" + }, + { + "iconName": "info", + "text": "Redis server port." + } + ] + }, + "REDIS_DATABASE": { + "context": "global", + "default": "0", + "help": "Redis database number.", + "id": "redis-database", + "label": "Redis database", + "regex": "^[0-9]+$", + "type": "text", + "containerClass": "z-11", + "pattern": "^[0-9]+$", + "inpType": "input", + "name": "Redis database", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "0", + "method": "default", + "prev_value": "0", + "popovers": [ + { + "iconName": "globe", + "text": "inp_popover_global" + }, + { + "iconName": "info", + "text": "Redis database number." + } + ] + }, + "REDIS_SSL": { + "context": "global", + "default": "no", + "help": "Use SSL/TLS connection with Redis server.", + "id": "redis-ssl", + "label": "Redis SSL/TLS", + "regex": "^(yes|no)$", + "type": "check", + "containerClass": "z-10", + "pattern": "^(yes|no)$", + "inpType": "checkbox", + "name": "Redis SSL/TLS", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "no", + "method": "default", + "prev_value": "no", + "popovers": [ + { + "iconName": "globe", + "text": "inp_popover_global" + }, + { + "iconName": "info", + "text": "Use SSL/TLS connection with Redis server." + } + ] + }, + "REDIS_SSL_VERIFY": { + "context": "global", + "default": "no", + "help": "Verify the certificate of Redis server.", + "id": "redis-ssl-verify", + "label": "Redis SSL/TLS verify", + "regex": "^(yes|no)$", + "type": "check", + "containerClass": "z-9", + "pattern": "^(yes|no)$", + "inpType": "checkbox", + "name": "Redis SSL/TLS verify", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "no", + "method": "default", + "prev_value": "no", + "popovers": [ + { + "iconName": "globe", + "text": "inp_popover_global" + }, + { + "iconName": "info", + "text": "Verify the certificate of Redis server." + } + ] + }, + "REDIS_TIMEOUT": { + "context": "global", + "default": "1000", + "help": "Redis server timeout (in ms) for connect, read and write.", + "id": "redis-timeout", + "label": "Redis timeout (ms)", + "regex": "^[0-9]+$", + "type": "text", + "containerClass": "z-8", + "pattern": "^[0-9]+$", + "inpType": "input", + "name": "Redis timeout (ms)", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "1000", + "method": "default", + "prev_value": "1000", + "popovers": [ + { + "iconName": "globe", + "text": "inp_popover_global" + }, + { + "iconName": "info", + "text": "Redis server timeout (in ms) for connect, read and write." + } + ] + }, + "REDIS_USERNAME": { + "context": "global", + "default": "", + "help": "Redis username used in AUTH command.", + "id": "redis-username", + "label": "Redis username", + "regex": "^.*$", + "type": "text", + "containerClass": "z-7", + "pattern": "^.*$", + "inpType": "input", + "name": "Redis username", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "", + "method": "default", + "prev_value": "", + "popovers": [ + { + "iconName": "globe", + "text": "inp_popover_global" + }, + { + "iconName": "info", + "text": "Redis username used in AUTH command." + } + ] + }, + "REDIS_PASSWORD": { + "context": "global", + "default": "", + "help": "Redis password used in AUTH command.", + "id": "redis-password", + "label": "Redis password", + "regex": "^.*$", + "type": "password", + "containerClass": "z-6", + "pattern": "^.*$", + "inpType": "input", + "name": "Redis password", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "", + "method": "default", + "prev_value": "", + "popovers": [ + { + "iconName": "globe", + "text": "inp_popover_global" + }, + { + "iconName": "info", + "text": "Redis password used in AUTH command." + } + ] + }, + "REDIS_SENTINEL_HOSTS": { + "context": "global", + "default": "", + "help": "Redis sentinel hosts with format host:[port] separated with spaces.", + "id": "redis-sentinel-hosts", + "label": "Redis sentinel hosts", + "regex": "^.*$", + "type": "text", + "containerClass": "z-5", + "pattern": "^.*$", + "inpType": "input", + "name": "Redis sentinel hosts", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "", + "method": "default", + "prev_value": "", + "popovers": [ + { + "iconName": "globe", + "text": "inp_popover_global" + }, + { + "iconName": "info", + "text": "Redis sentinel hosts with format host:[port] separated with spaces." + } + ] + }, + "REDIS_SENTINEL_USERNAME": { + "context": "global", + "default": "", + "help": "Redis sentinel username.", + "id": "redis-sentinel-username", + "label": "Redis sentinel username", + "regex": "^.*$", + "type": "text", + "containerClass": "z-4", + "pattern": "^.*$", + "inpType": "input", + "name": "Redis sentinel username", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "", + "method": "default", + "prev_value": "", + "popovers": [ + { + "iconName": "globe", + "text": "inp_popover_global" + }, + { + "iconName": "info", + "text": "Redis sentinel username." + } + ] + }, + "REDIS_SENTINEL_PASSWORD": { + "context": "global", + "default": "", + "help": "Redis sentinel password.", + "id": "redis-sentinel-password", + "label": "Redis sentinel password", + "regex": "^.*$", + "type": "password", + "containerClass": "z-3", + "pattern": "^.*$", + "inpType": "input", + "name": "Redis sentinel password", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "", + "method": "default", + "prev_value": "", + "popovers": [ + { + "iconName": "globe", + "text": "inp_popover_global" + }, + { + "iconName": "info", + "text": "Redis sentinel password." + } + ] + }, + "REDIS_SENTINEL_MASTER": { + "context": "global", + "default": "", + "help": "Redis sentinel master name.", + "id": "redis-sentinel-master", + "label": "Redis sentinel master", + "regex": "^.*$", + "type": "text", + "containerClass": "z-2", + "pattern": "^.*$", + "inpType": "input", + "name": "Redis sentinel master", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "", + "method": "default", + "prev_value": "", + "popovers": [ + { + "iconName": "globe", + "text": "inp_popover_global" + }, + { + "iconName": "info", + "text": "Redis sentinel master name." + } + ] + }, + "REDIS_KEEPALIVE_IDLE": { + "context": "global", + "default": "30000", + "help": "Max idle time (in ms) before closing redis connection in the pool.", + "id": "redis-keepalive-idle", + "label": "Redis keepalive idle (ms)", + "regex": "^[0-9]+$", + "type": "text", + "containerClass": "z-1", + "pattern": "^[0-9]+$", + "inpType": "input", + "name": "Redis keepalive idle (ms)", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "30000", + "method": "default", + "prev_value": "30000", + "popovers": [ + { + "iconName": "globe", + "text": "inp_popover_global" + }, + { + "iconName": "info", + "text": "Max idle time (in ms) before closing redis connection in the pool." + } + ] + }, + "REDIS_KEEPALIVE_POOL": { + "context": "global", + "default": "10", + "help": "Max number of redis connection(s) kept in the pool.", + "id": "redis-keepalive-pool", + "label": "Redis keepalive pool", + "regex": "^[0-9]+$", + "type": "text", + "containerClass": "z-0", + "pattern": "^[0-9]+$", + "inpType": "input", + "name": "Redis keepalive pool", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "10", + "method": "default", + "prev_value": "10", + "popovers": [ + { + "iconName": "globe", + "text": "inp_popover_global" + }, + { + "iconName": "info", + "text": "Max number of redis connection(s) kept in the pool." + } + ] + } + }, + "checksum": null + }, + { + "id": "reverseproxy", + "stream": "partial", + "name": "Reverse proxy", + "description": "Manage reverse proxy configurations.", + "version": "1.0", + "type": "core", + "method": "manual", + "page": false, + "settings": { + "USE_REVERSE_PROXY": { + "context": "multisite", + "default": "no", + "help": "Activate reverse proxy mode.", + "id": "use-reverse-proxy", + "label": "Use reverse proxy", + "regex": "^(yes|no)$", + "type": "check", + "containerClass": "z-26", + "pattern": "^(yes|no)$", + "inpType": "checkbox", + "name": "Use reverse proxy", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": true, + "value": "yes", + "method": "scheduler", + "prev_value": "yes", + "popovers": [ + { + "iconName": "trespass", + "text": "inp_popover_method_disabled" + }, + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Activate reverse proxy mode." + } + ] + }, + "REVERSE_PROXY_INTERCEPT_ERRORS": { + "context": "multisite", + "default": "yes", + "help": "Intercept and rewrite errors.", + "id": "reverse-proxy-intercept-errors", + "label": "Intercept errors", + "regex": "^(yes|no)$", + "type": "check", + "containerClass": "z-25", + "pattern": "^(yes|no)$", + "inpType": "checkbox", + "name": "Intercept errors", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "yes", + "method": "default", + "prev_value": "yes", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Intercept and rewrite errors." + } + ] + }, + "REVERSE_PROXY_CUSTOM_HOST": { + "context": "multisite", + "default": "", + "help": "Override Host header sent to upstream server.", + "id": "reverse-proxy-custom-host", + "label": "Reverse proxy custom host", + "regex": "^.*$", + "type": "text", + "containerClass": "z-24", + "pattern": "^.*$", + "inpType": "input", + "name": "Reverse proxy custom host", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "", + "method": "default", + "prev_value": "", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Override Host header sent to upstream server." + } + ] + }, + "USE_PROXY_CACHE": { + "context": "multisite", + "default": "no", + "help": "Enable or disable caching of the proxied resources.", + "id": "use-proxy-cache", + "label": "Reverse proxy cache", + "regex": "^(yes|no)$", + "type": "check", + "containerClass": "z-9", + "pattern": "^(yes|no)$", + "inpType": "checkbox", + "name": "Reverse proxy cache", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "no", + "method": "default", + "prev_value": "no", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Enable or disable caching of the proxied resources." + } + ] + }, + "PROXY_CACHE_PATH_LEVELS": { + "context": "global", + "default": "1:2", + "help": "Hierarchy levels of the cache.", + "id": "proxy-cache-path-levels", + "label": "Hierarchy levels", + "regex": "^(:?[12]){1,3}$", + "type": "text", + "containerClass": "z-8", + "pattern": "^(:?[12]){1,3}$", + "inpType": "input", + "name": "Hierarchy levels", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "1:2", + "method": "default", + "prev_value": "1:2", + "popovers": [ + { + "iconName": "globe", + "text": "inp_popover_global" + }, + { + "iconName": "info", + "text": "Hierarchy levels of the cache." + } + ] + }, + "PROXY_CACHE_PATH_ZONE_SIZE": { + "context": "global", + "default": "10m", + "help": "Maximum size of cached metadata when caching proxied resources.", + "id": "proxy-cache-path-zone-size", + "label": "Reverse proxy cache zone size", + "regex": "^\\d+[kKmMgG]?$", + "type": "text", + "containerClass": "z-7", + "pattern": "^\\d+[kKmMgG]?$", + "inpType": "input", + "name": "Reverse proxy cache zone size", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "10m", + "method": "default", + "prev_value": "10m", + "popovers": [ + { + "iconName": "globe", + "text": "inp_popover_global" + }, + { + "iconName": "info", + "text": "Maximum size of cached metadata when caching proxied resources." + } + ] + }, + "PROXY_CACHE_PATH_PARAMS": { + "context": "global", + "default": "max_size=100m", + "help": "Additional parameters to add to the proxy_cache directive.", + "id": "proxy-cache-path-params", + "label": "Reverse proxy cache params", + "regex": "^.*$", + "type": "text", + "containerClass": "z-6", + "pattern": "^.*$", + "inpType": "input", + "name": "Reverse proxy cache params", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "max_size=100m", + "method": "default", + "prev_value": "max_size=100m", + "popovers": [ + { + "iconName": "globe", + "text": "inp_popover_global" + }, + { + "iconName": "info", + "text": "Additional parameters to add to the proxy_cache directive." + } + ] + }, + "PROXY_CACHE_METHODS": { + "context": "multisite", + "default": "GET HEAD", + "help": "HTTP methods that should trigger a cache operation.", + "id": "proxy-cache-methods", + "label": "Reverse proxy cache methods", + "regex": "^(?! )( ?(GET|HEAD|POST|PUT|DELETE|CONNECT|OPTIONS|TRACE|PATCH)(?!.*\\2))+$", + "type": "text", + "containerClass": "z-5", + "pattern": "^(?! )( ?(GET|HEAD|POST|PUT|DELETE|CONNECT|OPTIONS|TRACE|PATCH)(?!.*\\2))+$", + "inpType": "input", + "name": "Reverse proxy cache methods", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "GET HEAD", + "method": "default", + "prev_value": "GET HEAD", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "HTTP methods that should trigger a cache operation." + } + ] + }, + "PROXY_CACHE_MIN_USES": { + "context": "multisite", + "default": "2", + "help": "The minimum number of requests before a response is cached.", + "id": "proxy-cache-min-uses", + "label": "Reverse proxy cache minimum uses", + "regex": "^[1-9]\\d*$", + "type": "text", + "containerClass": "z-4", + "pattern": "^[1-9]\\d*$", + "inpType": "input", + "name": "Reverse proxy cache minimum uses", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "2", + "method": "default", + "prev_value": "2", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "The minimum number of requests before a response is cached." + } + ] + }, + "PROXY_CACHE_KEY": { + "context": "multisite", + "default": "$scheme$host$request_uri", + "help": "The key used to uniquely identify a cached response.", + "id": "proxy-cache-key", + "label": "Reverse proxy cache key", + "regex": "^(?! )( ?(\\$[a-z_]+)(?!.*\\2))+$", + "type": "text", + "containerClass": "z-3", + "pattern": "^(?! )( ?(\\$[a-z_]+)(?!.*\\2))+$", + "inpType": "input", + "name": "Reverse proxy cache key", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "$scheme$host$request_uri", + "method": "default", + "prev_value": "$scheme$host$request_uri", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "The key used to uniquely identify a cached response." + } + ] + }, + "PROXY_CACHE_VALID": { + "context": "multisite", + "default": "200=24h 301=1h 302=24h", + "help": "Define the caching time depending on the HTTP status code (list of status=time), separated with spaces.", + "id": "proxy-cache-valid", + "label": "Reverse proxy cache valid", + "regex": "^(?! )( ?([1-5]\\d{2})(?!.*\\2=)=\\d+(ms?|[shdwMy]))*$", + "type": "text", + "containerClass": "z-2", + "pattern": "^(?! )( ?([1-5]\\d{2})(?!.*\\2=)=\\d+(ms?|[shdwMy]))*$", + "inpType": "input", + "name": "Reverse proxy cache valid", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "200=24h 301=1h 302=24h", + "method": "default", + "prev_value": "200=24h 301=1h 302=24h", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Define the caching time depending on the HTTP status code (list of status=time), separated with spaces." + } + ] + }, + "PROXY_NO_CACHE": { + "context": "multisite", + "default": "$http_pragma $http_authorization", + "help": "Conditions to disable caching of responses.", + "id": "proxy-no-cache", + "label": "Reverse proxy no cache", + "regex": "^.*$", + "type": "text", + "containerClass": "z-1", + "pattern": "^.*$", + "inpType": "input", + "name": "Reverse proxy no cache", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "$http_pragma $http_authorization", + "method": "default", + "prev_value": "$http_pragma $http_authorization", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Conditions to disable caching of responses." + } + ] + }, + "PROXY_CACHE_BYPASS": { + "context": "multisite", + "default": "0", + "help": "Conditions to bypass caching of responses.", + "id": "proxy-cache-bypass", + "label": "Reverse proxy bypass", + "regex": "^.*$", + "type": "text", + "containerClass": "z-0", + "pattern": "^.*$", + "inpType": "input", + "name": "Reverse proxy bypass", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "0", + "method": "default", + "prev_value": "0", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Conditions to bypass caching of responses." + } + ] + } + }, + "checksum": null, + "multiples_schema": { + "reverse-proxy": { + "REVERSE_PROXY_HOST": { + "context": "multisite", + "default": "", + "help": "Full URL of the proxied resource (proxy_pass).", + "id": "reverse-proxy-host", + "label": "Reverse proxy host", + "regex": "^.*$", + "type": "text", + "multiple": "reverse-proxy", + "pattern": "^.*$", + "inpType": "input", + "name": "Reverse proxy host", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": true, + "value": "", + "prev_value": "", + "popovers": [ + { + "iconName": "trespass", + "text": "inp_popover_method_disabled" + }, + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Full URL of the proxied resource (proxy_pass)." + } + ], + "containerClass": "z-26" + }, + "REVERSE_PROXY_URL": { + "context": "multisite", + "default": "/", + "help": "Location URL that will be proxied.", + "id": "reverse-proxy-url", + "label": "Reverse proxy url", + "regex": "^.*$", + "type": "text", + "multiple": "reverse-proxy", + "pattern": "^.*$", + "inpType": "input", + "name": "Reverse proxy url", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "/", + "prev_value": "/", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Location URL that will be proxied." + } + ], + "containerClass": "z-25" + }, + "REVERSE_PROXY_WS": { + "context": "multisite", + "default": "no", + "help": "Enable websocket on the proxied resource.", + "id": "reverse-proxy-ws", + "label": "Reverse proxy WS", + "regex": "^(yes|no)$", + "type": "check", + "multiple": "reverse-proxy", + "pattern": "^(yes|no)$", + "inpType": "checkbox", + "name": "Reverse proxy WS", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "no", + "prev_value": "no", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Enable websocket on the proxied resource." + } + ], + "containerClass": "z-24" + }, + "REVERSE_PROXY_HEADERS": { + "context": "multisite", + "default": "", + "help": "List of HTTP headers to send to proxied resource separated with semicolons (values for proxy_set_header directive).", + "id": "reverse-proxy-headers", + "label": "Reverse proxy headers", + "regex": "^(?![; ])(;? ?([\\w\\-]+)(?!.*\\2 ) [^;]+)*$", + "type": "text", + "multiple": "reverse-proxy", + "pattern": "^(?![; ])(;? ?([\\w\\-]+)(?!.*\\2 ) [^;]+)*$", + "inpType": "input", + "name": "Reverse proxy headers", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "", + "prev_value": "", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "List of HTTP headers to send to proxied resource separated with semicolons (values for proxy_set_header directive)." + } + ], + "containerClass": "z-23" + }, + "REVERSE_PROXY_HEADERS_CLIENT": { + "context": "multisite", + "default": "", + "help": "List of HTTP headers to send to client separated with semicolons (values for add_header directive).", + "id": "reverse-proxy-headers-client", + "label": "Reverse proxy headers-client", + "regex": "^(?![; ])(;? ?([\\w\\-]+)(?!.*\\2 ) [^;]+)*$", + "type": "text", + "multiple": "reverse-proxy", + "pattern": "^(?![; ])(;? ?([\\w\\-]+)(?!.*\\2 ) [^;]+)*$", + "inpType": "input", + "name": "Reverse proxy headers-client", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "", + "prev_value": "", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "List of HTTP headers to send to client separated with semicolons (values for add_header directive)." + } + ], + "containerClass": "z-22" + }, + "REVERSE_PROXY_BUFFERING": { + "context": "multisite", + "default": "yes", + "help": "Enable or disable buffering of responses from proxied resource.", + "id": "reverse-proxy-buffering", + "label": "Reverse proxy buffering", + "regex": "^(yes|no)$", + "type": "check", + "multiple": "reverse-proxy", + "pattern": "^(yes|no)$", + "inpType": "checkbox", + "name": "Reverse proxy buffering", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "yes", + "prev_value": "yes", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Enable or disable buffering of responses from proxied resource." + } + ], + "containerClass": "z-21" + }, + "REVERSE_PROXY_KEEPALIVE": { + "context": "multisite", + "default": "no", + "help": "Enable or disable keepalive connections with the proxied resource.", + "id": "reverse-proxy-keepalive", + "label": "Reverse proxy keepalive", + "regex": "^(yes|no)$", + "type": "check", + "multiple": "reverse-proxy", + "pattern": "^(yes|no)$", + "inpType": "checkbox", + "name": "Reverse proxy keepalive", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "no", + "prev_value": "no", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Enable or disable keepalive connections with the proxied resource." + } + ], + "containerClass": "z-20" + }, + "REVERSE_PROXY_AUTH_REQUEST": { + "context": "multisite", + "default": "", + "help": "Enable authentication using an external provider (value of auth_request directive).", + "id": "reverse-proxy-auth-request", + "label": "Reverse proxy auth request", + "regex": "^(\\/[\\w\\].~:\\/?#\\[@!$\\&'\\(\\)*+,;=\\-]*|off)?$", + "type": "text", + "multiple": "reverse-proxy", + "pattern": "^(\\/[\\w\\].~:\\/?#\\[@!$\\&'\\(\\)*+,;=\\-]*|off)?$", + "inpType": "input", + "name": "Reverse proxy auth request", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "", + "prev_value": "", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Enable authentication using an external provider (value of auth_request directive)." + } + ], + "containerClass": "z-19" + }, + "REVERSE_PROXY_AUTH_REQUEST_SIGNIN_URL": { + "context": "multisite", + "default": "", + "help": "Redirect clients to sign-in URL when using REVERSE_PROXY_AUTH_REQUEST (used when auth_request call returned 401).", + "id": "reverse-proxy-auth-request-signin-url", + "label": "Auth request signin URL", + "regex": "^(https?:\\/\\/[\\-\\w@:%.+~#=]+[\\-\\w\\(\\)!@:%+.~#?&\\/=$]*)?$", + "type": "text", + "multiple": "reverse-proxy", + "pattern": "^(https?:\\/\\/[\\-\\w@:%.+~#=]+[\\-\\w\\(\\)!@:%+.~#?&\\/=$]*)?$", + "inpType": "input", + "name": "Auth request signin URL", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "", + "prev_value": "", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Redirect clients to sign-in URL when using REVERSE_PROXY_AUTH_REQUEST (used when auth_request call returned 401)." + } + ], + "containerClass": "z-18" + }, + "REVERSE_PROXY_AUTH_REQUEST_SET": { + "context": "multisite", + "default": "", + "help": "List of variables to set from the authentication provider, separated with semicolons (values of auth_request_set directives).", + "id": "reverse-proxy-auth-request-set", + "label": "Reverse proxy auth request set", + "regex": "^(?! ;)(;? ?(\\$[a-z_\\-]+)(?!.*\\2 ) [^;]+)*$", + "type": "text", + "multiple": "reverse-proxy", + "pattern": "^(?! ;)(;? ?(\\$[a-z_\\-]+)(?!.*\\2 ) [^;]+)*$", + "inpType": "input", + "name": "Reverse proxy auth request set", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "", + "prev_value": "", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "List of variables to set from the authentication provider, separated with semicolons (values of auth_request_set directives)." + } + ], + "containerClass": "z-17" + }, + "REVERSE_PROXY_CONNECT_TIMEOUT": { + "context": "multisite", + "default": "60s", + "help": "Timeout when connecting to the proxied resource.", + "id": "reverse-proxy-connect-timeout", + "label": "Reverse proxy connect timeout", + "regex": "^\\d+(ms?|[shdwMy])$", + "type": "text", + "multiple": "reverse-proxy", + "pattern": "^\\d+(ms?|[shdwMy])$", + "inpType": "input", + "name": "Reverse proxy connect timeout", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "60s", + "prev_value": "60s", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Timeout when connecting to the proxied resource." + } + ], + "containerClass": "z-16" + }, + "REVERSE_PROXY_READ_TIMEOUT": { + "context": "multisite", + "default": "60s", + "help": "Timeout when reading from the proxied resource.", + "id": "reverse-proxy-read-timeout", + "label": "Reverse proxy read timeout", + "regex": "^\\d+(ms?|[shdwMy])$", + "type": "text", + "multiple": "reverse-proxy", + "pattern": "^\\d+(ms?|[shdwMy])$", + "inpType": "input", + "name": "Reverse proxy read timeout", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "60s", + "prev_value": "60s", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Timeout when reading from the proxied resource." + } + ], + "containerClass": "z-15" + }, + "REVERSE_PROXY_SEND_TIMEOUT": { + "context": "multisite", + "default": "60s", + "help": "Timeout when sending to the proxied resource.", + "id": "reverse-proxy-send-timeout", + "label": "Reverse proxy send timeout", + "regex": "^\\d+(ms?|[shdwMy])$", + "type": "text", + "multiple": "reverse-proxy", + "pattern": "^\\d+(ms?|[shdwMy])$", + "inpType": "input", + "name": "Reverse proxy send timeout", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "60s", + "prev_value": "60s", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Timeout when sending to the proxied resource." + } + ], + "containerClass": "z-14" + }, + "REVERSE_PROXY_INCLUDES": { + "context": "multisite", + "default": "", + "help": "Additional configuration to include in the location block, separated with spaces.", + "id": "reverse-proxy-includes", + "label": "Reverse proxy includes", + "regex": "^(?! )( ?(\\w+)(?!.*\\b\\2\\b))*$", + "type": "text", + "multiple": "reverse-proxy", + "pattern": "^(?! )( ?(\\w+)(?!.*\\b\\2\\b))*$", + "inpType": "input", + "name": "Reverse proxy includes", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "", + "prev_value": "", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Additional configuration to include in the location block, separated with spaces." + } + ], + "containerClass": "z-13" + } + } + }, + "multiples": { + "reverse-proxy": { + "0": { + "REVERSE_PROXY_HOST": { + "context": "multisite", + "default": "", + "help": "Full URL of the proxied resource (proxy_pass).", + "id": "reverse-proxy-host", + "label": "Reverse proxy host", + "regex": "^.*$", + "type": "text", + "multiple": "reverse-proxy", + "pattern": "^.*$", + "inpType": "input", + "name": "Reverse proxy host", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": true, + "value": "http://app1:8080", + "prev_value": "http://app1:8080", + "popovers": [ + { + "iconName": "trespass", + "text": "inp_popover_method_disabled" + }, + { + "iconName": "trespass", + "text": "inp_popover_method_disabled" + }, + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Full URL of the proxied resource (proxy_pass)." + } + ], + "containerClass": "z-26", + "method": "scheduler" + }, + "REVERSE_PROXY_URL": { + "context": "multisite", + "default": "/", + "help": "Location URL that will be proxied.", + "id": "reverse-proxy-url", + "label": "Reverse proxy url", + "regex": "^.*$", + "type": "text", + "multiple": "reverse-proxy", + "pattern": "^.*$", + "inpType": "input", + "name": "Reverse proxy url", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "/", + "prev_value": "/", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Location URL that will be proxied." + } + ], + "containerClass": "z-25", + "method": "default" + }, + "REVERSE_PROXY_WS": { + "context": "multisite", + "default": "no", + "help": "Enable websocket on the proxied resource.", + "id": "reverse-proxy-ws", + "label": "Reverse proxy WS", + "regex": "^(yes|no)$", + "type": "check", + "multiple": "reverse-proxy", + "pattern": "^(yes|no)$", + "inpType": "checkbox", + "name": "Reverse proxy WS", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "no", + "prev_value": "no", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Enable websocket on the proxied resource." + } + ], + "containerClass": "z-24", + "method": "default" + }, + "REVERSE_PROXY_HEADERS": { + "context": "multisite", + "default": "", + "help": "List of HTTP headers to send to proxied resource separated with semicolons (values for proxy_set_header directive).", + "id": "reverse-proxy-headers", + "label": "Reverse proxy headers", + "regex": "^(?![; ])(;? ?([\\w\\-]+)(?!.*\\2 ) [^;]+)*$", + "type": "text", + "multiple": "reverse-proxy", + "pattern": "^(?![; ])(;? ?([\\w\\-]+)(?!.*\\2 ) [^;]+)*$", + "inpType": "input", + "name": "Reverse proxy headers", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "", + "prev_value": "", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "List of HTTP headers to send to proxied resource separated with semicolons (values for proxy_set_header directive)." + } + ], + "containerClass": "z-23", + "method": "default" + }, + "REVERSE_PROXY_HEADERS_CLIENT": { + "context": "multisite", + "default": "", + "help": "List of HTTP headers to send to client separated with semicolons (values for add_header directive).", + "id": "reverse-proxy-headers-client", + "label": "Reverse proxy headers-client", + "regex": "^(?![; ])(;? ?([\\w\\-]+)(?!.*\\2 ) [^;]+)*$", + "type": "text", + "multiple": "reverse-proxy", + "pattern": "^(?![; ])(;? ?([\\w\\-]+)(?!.*\\2 ) [^;]+)*$", + "inpType": "input", + "name": "Reverse proxy headers-client", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "", + "prev_value": "", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "List of HTTP headers to send to client separated with semicolons (values for add_header directive)." + } + ], + "containerClass": "z-22", + "method": "default" + }, + "REVERSE_PROXY_BUFFERING": { + "context": "multisite", + "default": "yes", + "help": "Enable or disable buffering of responses from proxied resource.", + "id": "reverse-proxy-buffering", + "label": "Reverse proxy buffering", + "regex": "^(yes|no)$", + "type": "check", + "multiple": "reverse-proxy", + "pattern": "^(yes|no)$", + "inpType": "checkbox", + "name": "Reverse proxy buffering", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "yes", + "prev_value": "yes", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Enable or disable buffering of responses from proxied resource." + } + ], + "containerClass": "z-21", + "method": "default" + }, + "REVERSE_PROXY_KEEPALIVE": { + "context": "multisite", + "default": "no", + "help": "Enable or disable keepalive connections with the proxied resource.", + "id": "reverse-proxy-keepalive", + "label": "Reverse proxy keepalive", + "regex": "^(yes|no)$", + "type": "check", + "multiple": "reverse-proxy", + "pattern": "^(yes|no)$", + "inpType": "checkbox", + "name": "Reverse proxy keepalive", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "no", + "prev_value": "no", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Enable or disable keepalive connections with the proxied resource." + } + ], + "containerClass": "z-20", + "method": "default" + }, + "REVERSE_PROXY_AUTH_REQUEST": { + "context": "multisite", + "default": "", + "help": "Enable authentication using an external provider (value of auth_request directive).", + "id": "reverse-proxy-auth-request", + "label": "Reverse proxy auth request", + "regex": "^(\\/[\\w\\].~:\\/?#\\[@!$\\&'\\(\\)*+,;=\\-]*|off)?$", + "type": "text", + "multiple": "reverse-proxy", + "pattern": "^(\\/[\\w\\].~:\\/?#\\[@!$\\&'\\(\\)*+,;=\\-]*|off)?$", + "inpType": "input", + "name": "Reverse proxy auth request", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "", + "prev_value": "", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Enable authentication using an external provider (value of auth_request directive)." + } + ], + "containerClass": "z-19", + "method": "default" + }, + "REVERSE_PROXY_AUTH_REQUEST_SIGNIN_URL": { + "context": "multisite", + "default": "", + "help": "Redirect clients to sign-in URL when using REVERSE_PROXY_AUTH_REQUEST (used when auth_request call returned 401).", + "id": "reverse-proxy-auth-request-signin-url", + "label": "Auth request signin URL", + "regex": "^(https?:\\/\\/[\\-\\w@:%.+~#=]+[\\-\\w\\(\\)!@:%+.~#?&\\/=$]*)?$", + "type": "text", + "multiple": "reverse-proxy", + "pattern": "^(https?:\\/\\/[\\-\\w@:%.+~#=]+[\\-\\w\\(\\)!@:%+.~#?&\\/=$]*)?$", + "inpType": "input", + "name": "Auth request signin URL", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "", + "prev_value": "", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Redirect clients to sign-in URL when using REVERSE_PROXY_AUTH_REQUEST (used when auth_request call returned 401)." + } + ], + "containerClass": "z-18", + "method": "default" + }, + "REVERSE_PROXY_AUTH_REQUEST_SET": { + "context": "multisite", + "default": "", + "help": "List of variables to set from the authentication provider, separated with semicolons (values of auth_request_set directives).", + "id": "reverse-proxy-auth-request-set", + "label": "Reverse proxy auth request set", + "regex": "^(?! ;)(;? ?(\\$[a-z_\\-]+)(?!.*\\2 ) [^;]+)*$", + "type": "text", + "multiple": "reverse-proxy", + "pattern": "^(?! ;)(;? ?(\\$[a-z_\\-]+)(?!.*\\2 ) [^;]+)*$", + "inpType": "input", + "name": "Reverse proxy auth request set", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "", + "prev_value": "", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "List of variables to set from the authentication provider, separated with semicolons (values of auth_request_set directives)." + } + ], + "containerClass": "z-17", + "method": "default" + }, + "REVERSE_PROXY_CONNECT_TIMEOUT": { + "context": "multisite", + "default": "60s", + "help": "Timeout when connecting to the proxied resource.", + "id": "reverse-proxy-connect-timeout", + "label": "Reverse proxy connect timeout", + "regex": "^\\d+(ms?|[shdwMy])$", + "type": "text", + "multiple": "reverse-proxy", + "pattern": "^\\d+(ms?|[shdwMy])$", + "inpType": "input", + "name": "Reverse proxy connect timeout", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "60s", + "prev_value": "60s", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Timeout when connecting to the proxied resource." + } + ], + "containerClass": "z-16", + "method": "default" + }, + "REVERSE_PROXY_READ_TIMEOUT": { + "context": "multisite", + "default": "60s", + "help": "Timeout when reading from the proxied resource.", + "id": "reverse-proxy-read-timeout", + "label": "Reverse proxy read timeout", + "regex": "^\\d+(ms?|[shdwMy])$", + "type": "text", + "multiple": "reverse-proxy", + "pattern": "^\\d+(ms?|[shdwMy])$", + "inpType": "input", + "name": "Reverse proxy read timeout", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "60s", + "prev_value": "60s", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Timeout when reading from the proxied resource." + } + ], + "containerClass": "z-15", + "method": "default" + }, + "REVERSE_PROXY_SEND_TIMEOUT": { + "context": "multisite", + "default": "60s", + "help": "Timeout when sending to the proxied resource.", + "id": "reverse-proxy-send-timeout", + "label": "Reverse proxy send timeout", + "regex": "^\\d+(ms?|[shdwMy])$", + "type": "text", + "multiple": "reverse-proxy", + "pattern": "^\\d+(ms?|[shdwMy])$", + "inpType": "input", + "name": "Reverse proxy send timeout", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "60s", + "prev_value": "60s", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Timeout when sending to the proxied resource." + } + ], + "containerClass": "z-14", + "method": "default" + }, + "REVERSE_PROXY_INCLUDES": { + "context": "multisite", + "default": "", + "help": "Additional configuration to include in the location block, separated with spaces.", + "id": "reverse-proxy-includes", + "label": "Reverse proxy includes", + "regex": "^(?! )( ?(\\w+)(?!.*\\b\\2\\b))*$", + "type": "text", + "multiple": "reverse-proxy", + "pattern": "^(?! )( ?(\\w+)(?!.*\\b\\2\\b))*$", + "inpType": "input", + "name": "Reverse proxy includes", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "", + "prev_value": "", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Additional configuration to include in the location block, separated with spaces." + } + ], + "containerClass": "z-13", + "method": "default" + } + } + } + } + }, + { + "id": "reversescan", + "stream": "yes", + "name": "Reverse scan", + "description": "Scan clients ports to detect proxies or servers.", + "version": "1.0", + "type": "core", + "method": "manual", + "page": true, + "settings": { + "USE_REVERSE_SCAN": { + "context": "multisite", + "default": "no", + "help": "Enable scanning of clients ports and deny access if one is opened.", + "id": "use-reverse-scan", + "label": "Reverse scan", + "regex": "^(no|yes)$", + "type": "check", + "containerClass": "z-2", + "pattern": "^(no|yes)$", + "inpType": "checkbox", + "name": "Reverse scan", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "no", + "method": "default", + "prev_value": "no", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Enable scanning of clients ports and deny access if one is opened." + } + ] + }, + "REVERSE_SCAN_PORTS": { + "context": "multisite", + "default": "22 80 443 3128 8000 8080", + "help": "List of port to scan when using reverse scan feature.", + "id": "reverse-scan-ports", + "label": "Reverse scan ports", + "regex": "^.*$", + "type": "text", + "containerClass": "z-1", + "pattern": "^.*$", + "inpType": "input", + "name": "Reverse scan ports", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "22 80 443 3128 8000 8080", + "method": "default", + "prev_value": "22 80 443 3128 8000 8080", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "List of port to scan when using reverse scan feature." + } + ] + }, + "REVERSE_SCAN_TIMEOUT": { + "context": "multisite", + "default": "500", + "help": "Specify the maximum timeout (in ms) when scanning a port.", + "id": "reverse-scan-timeout", + "label": "Reverse scan timeout", + "regex": "^.*$", + "type": "text", + "containerClass": "z-0", + "pattern": "^.*$", + "inpType": "input", + "name": "Reverse scan timeout", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "500", + "method": "default", + "prev_value": "500", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Specify the maximum timeout (in ms) when scanning a port." + } + ] + } + }, + "checksum": null + }, + { + "id": "selfsigned", + "stream": "yes", + "name": "Self-signed certificate", + "description": "Generate self-signed certificate.", + "version": "1.0", + "type": "core", + "method": "manual", + "page": false, + "settings": { + "GENERATE_SELF_SIGNED_SSL": { + "context": "multisite", + "default": "no", + "help": "Generate and use self-signed certificate.", + "id": "generate-self-signed-ssl", + "label": "Activate self-signed certificate", + "regex": "^(yes|no)$", + "type": "check", + "containerClass": "z-2", + "pattern": "^(yes|no)$", + "inpType": "checkbox", + "name": "Activate self-signed certificate", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "no", + "method": "default", + "prev_value": "no", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Generate and use self-signed certificate." + } + ] + }, + "SELF_SIGNED_SSL_EXPIRY": { + "context": "multisite", + "default": "365", + "help": "Self-signed certificate expiry in days.", + "id": "self-signed-ssl-expiry", + "label": "Certificate expiry", + "regex": "^\\d+$", + "type": "text", + "containerClass": "z-1", + "pattern": "^\\d+$", + "inpType": "input", + "name": "Certificate expiry", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "365", + "method": "default", + "prev_value": "365", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Self-signed certificate expiry in days." + } + ] + }, + "SELF_SIGNED_SSL_SUBJ": { + "context": "multisite", + "default": "/CN=www.example.com/", + "help": "Self-signed certificate subject.", + "id": "self-signed-ssl-subj", + "label": "Certificate subject", + "regex": "^/CN=[^,]+$", + "type": "text", + "containerClass": "z-0", + "pattern": "^/CN=[^,]+$", + "inpType": "input", + "name": "Certificate subject", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "/CN=www.example.com/", + "method": "default", + "prev_value": "/CN=www.example.com/", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Self-signed certificate subject." + } + ] + } + }, + "checksum": null + }, + { + "id": "sessions", + "stream": "yes", + "name": "Sessions", + "description": "Management of session used by other plugins.", + "version": "1.0", + "type": "core", + "method": "manual", + "page": false, + "settings": { + "SESSIONS_SECRET": { + "context": "global", + "default": "random", + "help": "Secret used to encrypt sessions variables for storing data related to challenges.", + "id": "session-secret", + "label": "Sessions secret", + "regex": "^\\w+$", + "type": "password", + "containerClass": "z-6", + "pattern": "^\\w+$", + "inpType": "input", + "name": "Sessions secret", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "random", + "method": "default", + "prev_value": "random", + "popovers": [ + { + "iconName": "globe", + "text": "inp_popover_global" + }, + { + "iconName": "info", + "text": "Secret used to encrypt sessions variables for storing data related to challenges." + } + ] + }, + "SESSIONS_NAME": { + "context": "global", + "default": "random", + "help": "Name of the cookie given to clients.", + "id": "sessions-name", + "label": "Sessions name", + "regex": "^\\w+$", + "type": "text", + "containerClass": "z-5", + "pattern": "^\\w+$", + "inpType": "input", + "name": "Sessions name", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "random", + "method": "default", + "prev_value": "random", + "popovers": [ + { + "iconName": "globe", + "text": "inp_popover_global" + }, + { + "iconName": "info", + "text": "Name of the cookie given to clients." + } + ] + }, + "SESSIONS_IDLING_TIMEOUT": { + "context": "global", + "default": "1800", + "help": "Maximum time (in seconds) of inactivity before the session is invalidated.", + "id": "sessions-idling-timeout", + "label": "Sessions idling timeout", + "regex": "^\\d+$", + "type": "text", + "containerClass": "z-4", + "pattern": "^\\d+$", + "inpType": "input", + "name": "Sessions idling timeout", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "1800", + "method": "default", + "prev_value": "1800", + "popovers": [ + { + "iconName": "globe", + "text": "inp_popover_global" + }, + { + "iconName": "info", + "text": "Maximum time (in seconds) of inactivity before the session is invalidated." + } + ] + }, + "SESSIONS_ROLLING_TIMEOUT": { + "context": "global", + "default": "3600", + "help": "Maximum time (in seconds) before a session must be renewed.", + "id": "sessions-rolling-timeout", + "label": "Sessions rolling timeout", + "regex": "^\\d+$", + "type": "text", + "containerClass": "z-3", + "pattern": "^\\d+$", + "inpType": "input", + "name": "Sessions rolling timeout", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "3600", + "method": "default", + "prev_value": "3600", + "popovers": [ + { + "iconName": "globe", + "text": "inp_popover_global" + }, + { + "iconName": "info", + "text": "Maximum time (in seconds) before a session must be renewed." + } + ] + }, + "SESSIONS_ABSOLUTE_TIMEOUT": { + "context": "global", + "default": "86400", + "help": "Maximum time (in seconds) before a session is destroyed.", + "id": "sessions-absolute-timeout", + "label": "Sessions absolute timeout", + "regex": "^\\d+$", + "type": "text", + "containerClass": "z-2", + "pattern": "^\\d+$", + "inpType": "input", + "name": "Sessions absolute timeout", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "86400", + "method": "default", + "prev_value": "86400", + "popovers": [ + { + "iconName": "globe", + "text": "inp_popover_global" + }, + { + "iconName": "info", + "text": "Maximum time (in seconds) before a session is destroyed." + } + ] + }, + "SESSIONS_CHECK_IP": { + "context": "global", + "default": "yes", + "help": "Destroy session if IP address is different than original one.", + "id": "sessions-check-ip", + "label": "Sessions check IP", + "regex": "^(yes|no)$", + "type": "check", + "containerClass": "z-1", + "pattern": "^(yes|no)$", + "inpType": "checkbox", + "name": "Sessions check IP", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "yes", + "method": "default", + "prev_value": "yes", + "popovers": [ + { + "iconName": "globe", + "text": "inp_popover_global" + }, + { + "iconName": "info", + "text": "Destroy session if IP address is different than original one." + } + ] + }, + "SESSIONS_CHECK_USER_AGENT": { + "context": "global", + "default": "yes", + "help": "Destroy session if User-Agent is different than original one.", + "id": "sessions-user-agent", + "label": "Sessions check User-Agent", + "regex": "^(yes|no)$", + "type": "check", + "containerClass": "z-0", + "pattern": "^(yes|no)$", + "inpType": "checkbox", + "name": "Sessions check User-Agent", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "yes", + "method": "default", + "prev_value": "yes", + "popovers": [ + { + "iconName": "globe", + "text": "inp_popover_global" + }, + { + "iconName": "info", + "text": "Destroy session if User-Agent is different than original one." + } + ] + } + }, + "checksum": null + }, + { + "id": "ui", + "stream": "no", + "name": "UI", + "description": "Integrate easily the BunkerWeb UI.", + "version": "1.0", + "type": "core", + "method": "manual", + "page": false, + "settings": { + "USE_UI": { + "context": "multisite", + "default": "no", + "help": "Use UI", + "id": "use-ui", + "label": "Use UI", + "regex": "^(yes|no)$", + "type": "check", + "containerClass": "z-1", + "pattern": "^(yes|no)$", + "inpType": "checkbox", + "name": "Use UI", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "no", + "method": "default", + "prev_value": "no", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Use UI" + } + ] + }, + "UI_HOST": { + "context": "global", + "default": "", + "help": "Address of the web UI used for initial setup", + "id": "ui-host", + "label": "UI host", + "regex": "^.*$", + "type": "text", + "containerClass": "z-0", + "pattern": "^.*$", + "inpType": "input", + "name": "UI host", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "", + "method": "default", + "prev_value": "", + "popovers": [ + { + "iconName": "globe", + "text": "inp_popover_global" + }, + { + "iconName": "info", + "text": "Address of the web UI used for initial setup" + } + ] + } + }, + "checksum": null + }, + { + "id": "whitelist", + "stream": "partial", + "name": "Whitelist", + "description": "Allow access based on internal and external IP/network/rDNS/ASN whitelists.", + "version": "1.0", + "type": "core", + "method": "manual", + "page": true, + "settings": { + "USE_WHITELIST": { + "context": "multisite", + "default": "yes", + "help": "Activate whitelist feature.", + "id": "use-whitelist", + "label": "Activate whitelisting", + "regex": "^(yes|no)$", + "type": "check", + "containerClass": "z-11", + "pattern": "^(yes|no)$", + "inpType": "checkbox", + "name": "Activate whitelisting", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": true, + "value": "no", + "method": "scheduler", + "prev_value": "no", + "popovers": [ + { + "iconName": "trespass", + "text": "inp_popover_method_disabled" + }, + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Activate whitelist feature." + } + ] + }, + "WHITELIST_IP": { + "context": "multisite", + "default": "20.191.45.212 40.88.21.235 40.76.173.151 40.76.163.7 20.185.79.47 52.142.26.175 20.185.79.15 52.142.24.149 40.76.162.208 40.76.163.23 40.76.162.191 40.76.162.247", + "help": "List of IP/network, separated with spaces, to put into the whitelist.", + "id": "whitelist-ip", + "label": "Whitelist IP/network", + "regex": "^(?! )( *(((\\b25[0-5]|\\b2[0-4]\\d|\\b[01]?\\d\\d?)(\\.(25[0-5]|2[0-4]\\d|[01]?\\d\\d?)){3})(\\/([1-2][0-9]?|3[0-2]?|[04-9]))?|(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]Z{0,4}){0,4}%[0-9a-zA-Z]+|::(ffff(:0{1,4})?:)?((25[0-5]|(2[0-4]|1?\\d)?\\d)\\.){3}(25[0-5]|(2[0-4]|1?\\d)?\\d)|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1?\\d)?\\d)\\.){3}(25[0-5]|(2[0-4]|1?\\d)?\\d))(\\/(12[0-8]|1[01][0-9]|[0-9][0-9]?))?)(?!.*\\D\\2([^\\d\\/]|$)) *)*$", + "type": "text", + "containerClass": "z-10", + "pattern": "^(?! )( *(((\\b25[0-5]|\\b2[0-4]\\d|\\b[01]?\\d\\d?)(\\.(25[0-5]|2[0-4]\\d|[01]?\\d\\d?)){3})(\\/([1-2][0-9]?|3[0-2]?|[04-9]))?|(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]Z{0,4}){0,4}%[0-9a-zA-Z]+|::(ffff(:0{1,4})?:)?((25[0-5]|(2[0-4]|1?\\d)?\\d)\\.){3}(25[0-5]|(2[0-4]|1?\\d)?\\d)|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1?\\d)?\\d)\\.){3}(25[0-5]|(2[0-4]|1?\\d)?\\d))(\\/(12[0-8]|1[01][0-9]|[0-9][0-9]?))?)(?!.*\\D\\2([^\\d\\/]|$)) *)*$", + "inpType": "input", + "name": "Whitelist IP/network", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "20.191.45.212 40.88.21.235 40.76.173.151 40.76.163.7 20.185.79.47 52.142.26.175 20.185.79.15 52.142.24.149 40.76.162.208 40.76.163.23 40.76.162.191 40.76.162.247", + "method": "default", + "prev_value": "20.191.45.212 40.88.21.235 40.76.173.151 40.76.163.7 20.185.79.47 52.142.26.175 20.185.79.15 52.142.24.149 40.76.162.208 40.76.163.23 40.76.162.191 40.76.162.247", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "List of IP/network, separated with spaces, to put into the whitelist." + } + ] + }, + "WHITELIST_RDNS": { + "context": "multisite", + "default": ".google.com .googlebot.com .yandex.ru .yandex.net .yandex.com .search.msn.com .baidu.com .baidu.jp .crawl.yahoo.net .fwd.linkedin.com .twitter.com .twttr.com .discord.com", + "help": "List of reverse DNS suffixes, separated with spaces, to whitelist.", + "id": "whitelist-rdns", + "label": "Whitelist reverse DNS", + "regex": "^( *(([^ ]+)(?!.*\\3( |$))) *)*$", + "type": "text", + "containerClass": "z-9", + "pattern": "^( *(([^ ]+)(?!.*\\3( |$))) *)*$", + "inpType": "input", + "name": "Whitelist reverse DNS", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": ".google.com .googlebot.com .yandex.ru .yandex.net .yandex.com .search.msn.com .baidu.com .baidu.jp .crawl.yahoo.net .fwd.linkedin.com .twitter.com .twttr.com .discord.com", + "method": "default", + "prev_value": ".google.com .googlebot.com .yandex.ru .yandex.net .yandex.com .search.msn.com .baidu.com .baidu.jp .crawl.yahoo.net .fwd.linkedin.com .twitter.com .twttr.com .discord.com", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "List of reverse DNS suffixes, separated with spaces, to whitelist." + } + ] + }, + "WHITELIST_RDNS_GLOBAL": { + "context": "multisite", + "default": "yes", + "help": "Only perform RDNS whitelist checks on global IP addresses.", + "id": "whitelist-rdns-global", + "label": "Whitelist reverse DNS global IPs", + "regex": "^(yes|no)$", + "type": "check", + "containerClass": "z-8", + "pattern": "^(yes|no)$", + "inpType": "checkbox", + "name": "Whitelist reverse DNS global IPs", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "yes", + "method": "default", + "prev_value": "yes", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "Only perform RDNS whitelist checks on global IP addresses." + } + ] + }, + "WHITELIST_ASN": { + "context": "multisite", + "default": "32934", + "help": "List of ASN numbers, separated with spaces, to whitelist.", + "id": "whitelist-asn", + "label": "Whitelist ASN", + "regex": "^^( *((ASN?)?(\\d+)\\b(?!.*[SN ]\\4\\b)) *)*$", + "type": "text", + "containerClass": "z-7", + "pattern": "^^( *((ASN?)?(\\d+)\\b(?!.*[SN ]\\4\\b)) *)*$", + "inpType": "input", + "name": "Whitelist ASN", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "32934", + "method": "default", + "prev_value": "32934", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "List of ASN numbers, separated with spaces, to whitelist." + } + ] + }, + "WHITELIST_USER_AGENT": { + "context": "multisite", + "default": "", + "help": "List of User-Agent (PCRE regex), separated with spaces, to whitelist.", + "id": "whitelist-user-agent", + "label": "Whitelist User-Agent", + "regex": "^.*$", + "type": "text", + "containerClass": "z-6", + "pattern": "^.*$", + "inpType": "input", + "name": "Whitelist User-Agent", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "", + "method": "default", + "prev_value": "", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "List of User-Agent (PCRE regex), separated with spaces, to whitelist." + } + ] + }, + "WHITELIST_URI": { + "context": "multisite", + "default": "", + "help": "List of URI (PCRE regex), separated with spaces, to whitelist.", + "id": "whitelist-uri", + "label": "Whitelist URI", + "regex": "^( *(.*)(?!.*\\2(?!.)) *)*$", + "type": "text", + "containerClass": "z-5", + "pattern": "^( *(.*)(?!.*\\2(?!.)) *)*$", + "inpType": "input", + "name": "Whitelist URI", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "", + "method": "default", + "prev_value": "", + "popovers": [ + { + "iconName": "disk", + "text": "inp_popover_multisite" + }, + { + "iconName": "info", + "text": "List of URI (PCRE regex), separated with spaces, to whitelist." + } + ] + }, + "WHITELIST_IP_URLS": { + "context": "global", + "default": "", + "help": "List of URLs, separated with spaces, containing good IP/network to whitelist.", + "id": "whitelist-ip-urls", + "label": "Whitelist IP/network URLs", + "regex": "^( *((https?:\\/\\/|file:\\/\\/\\/)[\\-\\w@:%.+~#=]+[\\-\\w\\(\\)!@:%+.~#?&\\/=$]*)(?!.*\\2(?!.)) *)*$", + "type": "text", + "containerClass": "z-4", + "pattern": "^( *((https?:\\/\\/|file:\\/\\/\\/)[\\-\\w@:%.+~#=]+[\\-\\w\\(\\)!@:%+.~#?&\\/=$]*)(?!.*\\2(?!.)) *)*$", + "inpType": "input", + "name": "Whitelist IP/network URLs", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "", + "method": "default", + "prev_value": "", + "popovers": [ + { + "iconName": "globe", + "text": "inp_popover_global" + }, + { + "iconName": "info", + "text": "List of URLs, separated with spaces, containing good IP/network to whitelist." + } + ] + }, + "WHITELIST_RDNS_URLS": { + "context": "global", + "default": "", + "help": "List of URLs, separated with spaces, containing reverse DNS suffixes to whitelist.", + "id": "whitelist-rdns-urls", + "label": "Whitelist reverse DNS URLs", + "regex": "^( *((https?:\\/\\/|file:\\/\\/\\/)[\\-\\w@:%.+~#=]+[\\-\\w\\(\\)!@:%+.~#?&\\/=$]*)(?!.*\\2(?!.)) *)*$", + "type": "text", + "containerClass": "z-3", + "pattern": "^( *((https?:\\/\\/|file:\\/\\/\\/)[\\-\\w@:%.+~#=]+[\\-\\w\\(\\)!@:%+.~#?&\\/=$]*)(?!.*\\2(?!.)) *)*$", + "inpType": "input", + "name": "Whitelist reverse DNS URLs", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "", + "prev_value": "", + "popovers": [ + { + "iconName": "globe", + "text": "inp_popover_global" + }, + { + "iconName": "info", + "text": "List of URLs, separated with spaces, containing reverse DNS suffixes to whitelist." + } + ] + }, + "WHITELIST_ASN_URLS": { + "context": "global", + "default": "", + "help": "List of URLs, separated with spaces, containing ASN to whitelist.", + "id": "whitelist-asn-urls", + "label": "Whitelist ASN URLs", + "regex": "^( *((https?:\\/\\/|file:\\/\\/\\/)[\\-\\w@:%.+~#=]+[\\-\\w\\(\\)!@:%+.~#?&\\/=$]*)(?!.*\\2(?!.)) *)*$", + "type": "text", + "containerClass": "z-2", + "pattern": "^( *((https?:\\/\\/|file:\\/\\/\\/)[\\-\\w@:%.+~#=]+[\\-\\w\\(\\)!@:%+.~#?&\\/=$]*)(?!.*\\2(?!.)) *)*$", + "inpType": "input", + "name": "Whitelist ASN URLs", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "", + "method": "default", + "prev_value": "", + "popovers": [ + { + "iconName": "globe", + "text": "inp_popover_global" + }, + { + "iconName": "info", + "text": "List of URLs, separated with spaces, containing ASN to whitelist." + } + ] + }, + "WHITELIST_USER_AGENT_URLS": { + "context": "global", + "default": "", + "help": "List of URLs, separated with spaces, containing good User-Agent to whitelist.", + "id": "whitelist-user-agent-urls", + "label": "Whitelist User-Agent URLs", + "regex": "^( *((https?:\\/\\/|file:\\/\\/\\/)[\\-\\w@:%.+~#=]+[\\-\\w\\(\\)!@:%+.~#?&\\/=$]*)(?!.*\\2(?!.)) *)*$", + "type": "text", + "containerClass": "z-1", + "pattern": "^( *((https?:\\/\\/|file:\\/\\/\\/)[\\-\\w@:%.+~#=]+[\\-\\w\\(\\)!@:%+.~#?&\\/=$]*)(?!.*\\2(?!.)) *)*$", + "inpType": "input", + "name": "Whitelist User-Agent URLs", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "", + "method": "default", + "prev_value": "", + "popovers": [ + { + "iconName": "globe", + "text": "inp_popover_global" + }, + { + "iconName": "info", + "text": "List of URLs, separated with spaces, containing good User-Agent to whitelist." + } + ] + }, + "WHITELIST_URI_URLS": { + "context": "global", + "default": "", + "help": "List of URLs, separated with spaces, containing bad URI to whitelist.", + "id": "whitelist-uri-urls", + "label": "Whitelist URI URLs", + "regex": "^( *((https?:\\/\\/|file:\\/\\/\\/)[\\-\\w@:%.+~#=]+[\\-\\w\\(\\)!@:%+.~#?&\\/=$]*)(?!.*\\2(?!.)) *)*$", + "type": "text", + "containerClass": "z-0", + "pattern": "^( *((https?:\\/\\/|file:\\/\\/\\/)[\\-\\w@:%.+~#=]+[\\-\\w\\(\\)!@:%+.~#?&\\/=$]*)(?!.*\\2(?!.)) *)*$", + "inpType": "input", + "name": "Whitelist URI URLs", + "columns": { + "pc": 4, + "tablet": 6, + "mobile": 12 + }, + "disabled": false, + "value": "", + "method": "default", + "prev_value": "", + "popovers": [ + { + "iconName": "globe", + "text": "inp_popover_global" + }, + { + "iconName": "info", + "text": "List of URLs, separated with spaces, containing bad URI to whitelist." + } + ] + } + }, + "checksum": null + } + ] + } + }, + "operation": "edit", + "oldServerName": "app1.example.com" } } ] diff --git a/src/ui/client/tests/raw.txt b/src/ui/client/tests/raw.txt index 35339390c..d1315290e 100644 --- a/src/ui/client/tests/raw.txt +++ b/src/ui/client/tests/raw.txt @@ -1 +1 @@ -W3sidHlwZSI6ICJ2b2lkIiwgIndpZGdldHMiOiBbeyJ0eXBlIjogIk1lc3NhZ2VVbm1hdGNoIiwgImRhdGEiOiB7InRleHQiOiAibG9nc19ub3RfZm91bmQifX1dfV0= \ No newline at end of file +W3sidHlwZSI6ICJjYXJkIiwgImNvbnRhaW5lckNvbHVtbnMiOiB7InBjIjogMTIsICJ0YWJsZXQiOiAxMiwgIm1vYmlsZSI6IDEyfSwgIndpZGdldHMiOiBbeyJ0eXBlIjogIlRpdGxlIiwgImRhdGEiOiB7InRpdGxlIjogImFwcDEuZXhhbXBsZS5jb20iLCAidHlwZSI6ICJjb250YWluZXIiLCAibG93ZXJjYXNlIjogdHJ1ZX19LCB7InR5cGUiOiAiU3VidGl0bGUiLCAiZGF0YSI6IHsic3VidGl0bGUiOiAic2VydmljZXNfbWFuYWdlX3N1YnRpdGxlIiwgInR5cGUiOiAiY29udGFpbmVyIiwgInN1YnRpdGxlQ2xhc3MiOiAibWItNCJ9fSwgeyJ0eXBlIjogIlRlbXBsYXRlcyIsICJkYXRhIjogeyJ0ZW1wbGF0ZXMiOiB7ImFkdmFuY2VkIjogeyJkZWZhdWx0IjogW3siaWQiOiAiZ2VuZXJhbCIsICJzdHJlYW0iOiAicGFydGlhbCIsICJuYW1lIjogIkdlbmVyYWwiLCAiZGVzY3JpcHRpb24iOiAiVGhlIGdlbmVyYWwgc2V0dGluZ3MgZm9yIHRoZSBzZXJ2ZXIiLCAidmVyc2lvbiI6ICIwLjEiLCAidHlwZSI6ICJjb3JlIiwgIm1ldGhvZCI6ICJtYW51YWwiLCAicGFnZSI6IGZhbHNlLCAic2V0dGluZ3MiOiB7IklTX0xPQURJTkciOiB7ImNvbnRleHQiOiAiZ2xvYmFsIiwgImRlZmF1bHQiOiAibm8iLCAiaGVscCI6ICJJbnRlcm5hbCB1c2UgOiBzZXQgdG8geWVzIHdoZW4gQlcgaXMgbG9hZGluZy4iLCAiaWQiOiAiaW50ZXJuYWwtdXNlLWxvYWRpbmciLCAibGFiZWwiOiAiaW50ZXJuYWwgdXNlIGxvYWRpbmciLCAicmVnZXgiOiAiXih5ZXN8bm8pJCIsICJ0eXBlIjogImNoZWNrIiwgImNvbnRhaW5lckNsYXNzIjogInotMzMiLCAicGF0dGVybiI6ICJeKHllc3xubykkIiwgImlucFR5cGUiOiAiY2hlY2tib3giLCAibmFtZSI6ICJpbnRlcm5hbCB1c2UgbG9hZGluZyIsICJjb2x1bW5zIjogeyJwYyI6IDQsICJ0YWJsZXQiOiA2LCAibW9iaWxlIjogMTJ9LCAiZGlzYWJsZWQiOiBmYWxzZSwgInZhbHVlIjogIm5vIiwgIm1ldGhvZCI6ICJkZWZhdWx0IiwgInByZXZfdmFsdWUiOiAibm8iLCAicG9wb3ZlcnMiOiBbeyJpY29uTmFtZSI6ICJnbG9iZSIsICJ0ZXh0IjogImlucF9wb3BvdmVyX2dsb2JhbCJ9LCB7Imljb25OYW1lIjogImluZm8iLCAidGV4dCI6ICJJbnRlcm5hbCB1c2UgOiBzZXQgdG8geWVzIHdoZW4gQlcgaXMgbG9hZGluZy4ifV19LCAiTkdJTlhfUFJFRklYIjogeyJjb250ZXh0IjogImdsb2JhbCIsICJkZWZhdWx0IjogIi9ldGMvbmdpbngvIiwgImhlbHAiOiAiV2hlcmUgbmdpbnggd2lsbCBzZWFyY2ggZm9yIGNvbmZpZ3VyYXRpb25zLiIsICJpZCI6ICJuZ2lueC1wcmVmaXgiLCAibGFiZWwiOiAibmdpbnggcHJlZml4IiwgInJlZ2V4IjogIl4oXFwvW1xcLVxcdy5cXHNdKykqXFwvJCIsICJ0eXBlIjogInRleHQiLCAiY29udGFpbmVyQ2xhc3MiOiAiei0zMiIsICJwYXR0ZXJuIjogIl4oXFwvW1xcLVxcdy5cXHNdKykqXFwvJCIsICJpbnBUeXBlIjogImlucHV0IiwgIm5hbWUiOiAibmdpbnggcHJlZml4IiwgImNvbHVtbnMiOiB7InBjIjogNCwgInRhYmxldCI6IDYsICJtb2JpbGUiOiAxMn0sICJkaXNhYmxlZCI6IGZhbHNlLCAidmFsdWUiOiAiL2V0Yy9uZ2lueC8iLCAibWV0aG9kIjogImRlZmF1bHQiLCAicHJldl92YWx1ZSI6ICIvZXRjL25naW54LyIsICJwb3BvdmVycyI6IFt7Imljb25OYW1lIjogImdsb2JlIiwgInRleHQiOiAiaW5wX3BvcG92ZXJfZ2xvYmFsIn0sIHsiaWNvbk5hbWUiOiAiaW5mbyIsICJ0ZXh0IjogIldoZXJlIG5naW54IHdpbGwgc2VhcmNoIGZvciBjb25maWd1cmF0aW9ucy4ifV19LCAiSFRUUF9QT1JUIjogeyJjb250ZXh0IjogImdsb2JhbCIsICJkZWZhdWx0IjogIjgwODAiLCAiaGVscCI6ICJIVFRQIHBvcnQgbnVtYmVyIHdoaWNoIGJ1bmtlcndlYiBiaW5kcyB0by4iLCAiaWQiOiAiaHR0cC1wb3J0IiwgImxhYmVsIjogIkhUVFAgcG9ydCIsICJyZWdleCI6ICJeXFxkKyQiLCAidHlwZSI6ICJ0ZXh0IiwgImNvbnRhaW5lckNsYXNzIjogInotMzEiLCAicGF0dGVybiI6ICJeXFxkKyQiLCAiaW5wVHlwZSI6ICJpbnB1dCIsICJuYW1lIjogIkhUVFAgcG9ydCIsICJjb2x1bW5zIjogeyJwYyI6IDQsICJ0YWJsZXQiOiA2LCAibW9iaWxlIjogMTJ9LCAiZGlzYWJsZWQiOiBmYWxzZSwgInZhbHVlIjogIjgwODAiLCAibWV0aG9kIjogImRlZmF1bHQiLCAicHJldl92YWx1ZSI6ICI4MDgwIiwgInBvcG92ZXJzIjogW3siaWNvbk5hbWUiOiAiZ2xvYmUiLCAidGV4dCI6ICJpbnBfcG9wb3Zlcl9nbG9iYWwifSwgeyJpY29uTmFtZSI6ICJpbmZvIiwgInRleHQiOiAiSFRUUCBwb3J0IG51bWJlciB3aGljaCBidW5rZXJ3ZWIgYmluZHMgdG8uIn1dfSwgIkhUVFBTX1BPUlQiOiB7ImNvbnRleHQiOiAiZ2xvYmFsIiwgImRlZmF1bHQiOiAiODQ0MyIsICJoZWxwIjogIkhUVFBTIHBvcnQgbnVtYmVyIHdoaWNoIGJ1bmtlcndlYiBiaW5kcyB0by4iLCAiaWQiOiAiaHR0cHMtcG9ydCIsICJsYWJlbCI6ICJIVFRQUyBwb3J0IiwgInJlZ2V4IjogIl5cXGQrJCIsICJ0eXBlIjogInRleHQiLCAiY29udGFpbmVyQ2xhc3MiOiAiei0zMCIsICJwYXR0ZXJuIjogIl5cXGQrJCIsICJpbnBUeXBlIjogImlucHV0IiwgIm5hbWUiOiAiSFRUUFMgcG9ydCIsICJjb2x1bW5zIjogeyJwYyI6IDQsICJ0YWJsZXQiOiA2LCAibW9iaWxlIjogMTJ9LCAiZGlzYWJsZWQiOiBmYWxzZSwgInZhbHVlIjogIjg0NDMiLCAibWV0aG9kIjogImRlZmF1bHQiLCAicHJldl92YWx1ZSI6ICI4NDQzIiwgInBvcG92ZXJzIjogW3siaWNvbk5hbWUiOiAiZ2xvYmUiLCAidGV4dCI6ICJpbnBfcG9wb3Zlcl9nbG9iYWwifSwgeyJpY29uTmFtZSI6ICJpbmZvIiwgInRleHQiOiAiSFRUUFMgcG9ydCBudW1iZXIgd2hpY2ggYnVua2Vyd2ViIGJpbmRzIHRvLiJ9XX0sICJNVUxUSVNJVEUiOiB7ImNvbnRleHQiOiAiZ2xvYmFsIiwgImRlZmF1bHQiOiAibm8iLCAiaGVscCI6ICJNdWx0aSBzaXRlIGFjdGl2YXRpb24uIiwgImlkIjogIm11bHRpc2l0ZSIsICJsYWJlbCI6ICJNdWx0aXNpdGUiLCAicmVnZXgiOiAiXih5ZXN8bm8pJCIsICJ0eXBlIjogImNoZWNrIiwgImNvbnRhaW5lckNsYXNzIjogInotMjkiLCAicGF0dGVybiI6ICJeKHllc3xubykkIiwgImlucFR5cGUiOiAiY2hlY2tib3giLCAibmFtZSI6ICJNdWx0aXNpdGUiLCAiY29sdW1ucyI6IHsicGMiOiA0LCAidGFibGV0IjogNiwgIm1vYmlsZSI6IDEyfSwgImRpc2FibGVkIjogdHJ1ZSwgInZhbHVlIjogInllcyIsICJtZXRob2QiOiAic2NoZWR1bGVyIiwgInByZXZfdmFsdWUiOiAieWVzIiwgInBvcG92ZXJzIjogW3siaWNvbk5hbWUiOiAidHJlc3Bhc3MiLCAidGV4dCI6ICJpbnBfcG9wb3Zlcl9tZXRob2RfZGlzYWJsZWQifSwgeyJpY29uTmFtZSI6ICJnbG9iZSIsICJ0ZXh0IjogImlucF9wb3BvdmVyX2dsb2JhbCJ9LCB7Imljb25OYW1lIjogImluZm8iLCAidGV4dCI6ICJNdWx0aSBzaXRlIGFjdGl2YXRpb24uIn1dfSwgIlNFUlZFUl9OQU1FIjogeyJjb250ZXh0IjogIm11bHRpc2l0ZSIsICJkZWZhdWx0IjogInd3dy5leGFtcGxlLmNvbSIsICJoZWxwIjogIkxpc3Qgb2YgdGhlIHZpcnR1YWwgaG9zdHMgc2VydmVkIGJ5IGJ1bmtlcndlYi4iLCAiaWQiOiAic2VydmVyLW5hbWUiLCAibGFiZWwiOiAiU2VydmVyIG5hbWUiLCAicmVnZXgiOiAiXigoXFxTezEsMjU1fSkoPyEuKlxcc1xcMihcXHN8JCkpKT8oXFxzKFxcU3sxLDI1NX0pKD8hLipcXHNcXDUoXFxzfCQpKSkqJCIsICJ0eXBlIjogInRleHQiLCAiY29udGFpbmVyQ2xhc3MiOiAiei0yOCIsICJwYXR0ZXJuIjogIl4oKFxcU3sxLDI1NX0pKD8hLipcXHNcXDIoXFxzfCQpKSk/KFxccyhcXFN7MSwyNTV9KSg/IS4qXFxzXFw1KFxcc3wkKSkpKiQiLCAiaW5wVHlwZSI6ICJpbnB1dCIsICJuYW1lIjogIlNlcnZlciBuYW1lIiwgImNvbHVtbnMiOiB7InBjIjogNCwgInRhYmxldCI6IDYsICJtb2JpbGUiOiAxMn0sICJkaXNhYmxlZCI6IGZhbHNlLCAidmFsdWUiOiAiYXBwMS5leGFtcGxlLmNvbSIsICJtZXRob2QiOiAidWkiLCAicHJldl92YWx1ZSI6ICJhcHAxLmV4YW1wbGUuY29tIiwgInBvcG92ZXJzIjogW3siaWNvbk5hbWUiOiAiZGlzayIsICJ0ZXh0IjogImlucF9wb3BvdmVyX211bHRpc2l0ZSJ9LCB7Imljb25OYW1lIjogImluZm8iLCAidGV4dCI6ICJMaXN0IG9mIHRoZSB2aXJ0dWFsIGhvc3RzIHNlcnZlZCBieSBidW5rZXJ3ZWIuIn1dfSwgIldPUktFUl9QUk9DRVNTRVMiOiB7ImNvbnRleHQiOiAiZ2xvYmFsIiwgImRlZmF1bHQiOiAiYXV0byIsICJoZWxwIjogIk51bWJlciBvZiB3b3JrZXIgcHJvY2Vzc2VzLiIsICJpZCI6ICJ3b3JrZXItcHJvY2Vzc2VzIiwgImxhYmVsIjogIldvcmtlciBwcm9jZXNzZXMiLCAicmVnZXgiOiAiXihhdXRvfFxcZCspJCIsICJ0eXBlIjogInRleHQiLCAiY29udGFpbmVyQ2xhc3MiOiAiei0yNyIsICJwYXR0ZXJuIjogIl4oYXV0b3xcXGQrKSQiLCAiaW5wVHlwZSI6ICJpbnB1dCIsICJuYW1lIjogIldvcmtlciBwcm9jZXNzZXMiLCAiY29sdW1ucyI6IHsicGMiOiA0LCAidGFibGV0IjogNiwgIm1vYmlsZSI6IDEyfSwgImRpc2FibGVkIjogZmFsc2UsICJ2YWx1ZSI6ICJhdXRvIiwgIm1ldGhvZCI6ICJkZWZhdWx0IiwgInByZXZfdmFsdWUiOiAiYXV0byIsICJwb3BvdmVycyI6IFt7Imljb25OYW1lIjogImdsb2JlIiwgInRleHQiOiAiaW5wX3BvcG92ZXJfZ2xvYmFsIn0sIHsiaWNvbk5hbWUiOiAiaW5mbyIsICJ0ZXh0IjogIk51bWJlciBvZiB3b3JrZXIgcHJvY2Vzc2VzLiJ9XX0sICJXT1JLRVJfUkxJTUlUX05PRklMRSI6IHsiY29udGV4dCI6ICJnbG9iYWwiLCAiZGVmYXVsdCI6ICIyMDQ4IiwgImhlbHAiOiAiTWF4aW11bSBudW1iZXIgb2Ygb3BlbiBmaWxlcyBmb3Igd29ya2VyIHByb2Nlc3Nlcy4iLCAiaWQiOiAid29ya2VyLXJsaW1pdC1ub2ZpbGUiLCAibGFiZWwiOiAiT3BlbiBmaWxlcyBwZXIgd29ya2VyIiwgInJlZ2V4IjogIl5cXGQrJCIsICJ0eXBlIjogInRleHQiLCAiY29udGFpbmVyQ2xhc3MiOiAiei0yNiIsICJwYXR0ZXJuIjogIl5cXGQrJCIsICJpbnBUeXBlIjogImlucHV0IiwgIm5hbWUiOiAiT3BlbiBmaWxlcyBwZXIgd29ya2VyIiwgImNvbHVtbnMiOiB7InBjIjogNCwgInRhYmxldCI6IDYsICJtb2JpbGUiOiAxMn0sICJkaXNhYmxlZCI6IGZhbHNlLCAidmFsdWUiOiAiMjA0OCIsICJtZXRob2QiOiAiZGVmYXVsdCIsICJwcmV2X3ZhbHVlIjogIjIwNDgiLCAicG9wb3ZlcnMiOiBbeyJpY29uTmFtZSI6ICJnbG9iZSIsICJ0ZXh0IjogImlucF9wb3BvdmVyX2dsb2JhbCJ9LCB7Imljb25OYW1lIjogImluZm8iLCAidGV4dCI6ICJNYXhpbXVtIG51bWJlciBvZiBvcGVuIGZpbGVzIGZvciB3b3JrZXIgcHJvY2Vzc2VzLiJ9XX0sICJXT1JLRVJfQ09OTkVDVElPTlMiOiB7ImNvbnRleHQiOiAiZ2xvYmFsIiwgImRlZmF1bHQiOiAiMTAyNCIsICJoZWxwIjogIk1heGltdW0gbnVtYmVyIG9mIGNvbm5lY3Rpb25zIHBlciB3b3JrZXIuIiwgImlkIjogIndvcmtlci1jb25uZWN0aW9ucyIsICJsYWJlbCI6ICJDb25uZWN0aW9ucyBwZXIgd29ya2VyIiwgInJlZ2V4IjogIl5cXGQrJCIsICJ0eXBlIjogInRleHQiLCAiY29udGFpbmVyQ2xhc3MiOiAiei0yNSIsICJwYXR0ZXJuIjogIl5cXGQrJCIsICJpbnBUeXBlIjogImlucHV0IiwgIm5hbWUiOiAiQ29ubmVjdGlvbnMgcGVyIHdvcmtlciIsICJjb2x1bW5zIjogeyJwYyI6IDQsICJ0YWJsZXQiOiA2LCAibW9iaWxlIjogMTJ9LCAiZGlzYWJsZWQiOiBmYWxzZSwgInZhbHVlIjogIjEwMjQiLCAibWV0aG9kIjogImRlZmF1bHQiLCAicHJldl92YWx1ZSI6ICIxMDI0IiwgInBvcG92ZXJzIjogW3siaWNvbk5hbWUiOiAiZ2xvYmUiLCAidGV4dCI6ICJpbnBfcG9wb3Zlcl9nbG9iYWwifSwgeyJpY29uTmFtZSI6ICJpbmZvIiwgInRleHQiOiAiTWF4aW11bSBudW1iZXIgb2YgY29ubmVjdGlvbnMgcGVyIHdvcmtlci4ifV19LCAiTE9HX0ZPUk1BVCI6IHsiY29udGV4dCI6ICJnbG9iYWwiLCAiZGVmYXVsdCI6ICIkaG9zdCAkcmVtb3RlX2FkZHIgLSAkcmVtb3RlX3VzZXIgWyR0aW1lX2xvY2FsXSBcIiRyZXF1ZXN0XCIgJHN0YXR1cyAkYm9keV9ieXRlc19zZW50IFwiJGh0dHBfcmVmZXJlclwiIFwiJGh0dHBfdXNlcl9hZ2VudFwiIiwgImhlbHAiOiAiVGhlIGZvcm1hdCB0byB1c2UgZm9yIGFjY2VzcyBsb2dzLiIsICJpZCI6ICJsb2ctZm9ybWF0IiwgImxhYmVsIjogIkxvZyBmb3JtYXQiLCAicmVnZXgiOiAiXi4qJCIsICJ0eXBlIjogInRleHQiLCAiY29udGFpbmVyQ2xhc3MiOiAiei0yNCIsICJwYXR0ZXJuIjogIl4uKiQiLCAiaW5wVHlwZSI6ICJpbnB1dCIsICJuYW1lIjogIkxvZyBmb3JtYXQiLCAiY29sdW1ucyI6IHsicGMiOiA0LCAidGFibGV0IjogNiwgIm1vYmlsZSI6IDEyfSwgImRpc2FibGVkIjogZmFsc2UsICJ2YWx1ZSI6ICIkaG9zdCAkcmVtb3RlX2FkZHIgLSAkcmVtb3RlX3VzZXIgWyR0aW1lX2xvY2FsXSBcIiRyZXF1ZXN0XCIgJHN0YXR1cyAkYm9keV9ieXRlc19zZW50IFwiJGh0dHBfcmVmZXJlclwiIFwiJGh0dHBfdXNlcl9hZ2VudFwiIiwgIm1ldGhvZCI6ICJkZWZhdWx0IiwgInByZXZfdmFsdWUiOiAiJGhvc3QgJHJlbW90ZV9hZGRyIC0gJHJlbW90ZV91c2VyIFskdGltZV9sb2NhbF0gXCIkcmVxdWVzdFwiICRzdGF0dXMgJGJvZHlfYnl0ZXNfc2VudCBcIiRodHRwX3JlZmVyZXJcIiBcIiRodHRwX3VzZXJfYWdlbnRcIiIsICJwb3BvdmVycyI6IFt7Imljb25OYW1lIjogImdsb2JlIiwgInRleHQiOiAiaW5wX3BvcG92ZXJfZ2xvYmFsIn0sIHsiaWNvbk5hbWUiOiAiaW5mbyIsICJ0ZXh0IjogIlRoZSBmb3JtYXQgdG8gdXNlIGZvciBhY2Nlc3MgbG9ncy4ifV19LCAiTE9HX0xFVkVMIjogeyJjb250ZXh0IjogImdsb2JhbCIsICJkZWZhdWx0IjogIm5vdGljZSIsICJoZWxwIjogIlRoZSBsZXZlbCB0byB1c2UgZm9yIGVycm9yIGxvZ3MuIiwgImlkIjogImxvZy1sZXZlbCIsICJsYWJlbCI6ICJMb2cgbGV2ZWwiLCAicmVnZXgiOiAiXihkZWJ1Z3xpbmZvfG5vdGljZXx3YXJufGVycm9yfGNyaXR8YWxlcnR8ZW1lcmcpJCIsICJ0eXBlIjogInNlbGVjdCIsICJjb250YWluZXJDbGFzcyI6ICJ6LTIzIiwgInBhdHRlcm4iOiAiXihkZWJ1Z3xpbmZvfG5vdGljZXx3YXJufGVycm9yfGNyaXR8YWxlcnR8ZW1lcmcpJCIsICJpbnBUeXBlIjogInNlbGVjdCIsICJuYW1lIjogIkxvZyBsZXZlbCIsICJ2YWx1ZXMiOiBbImFsZXJ0IiwgImNyaXQiLCAiZGVidWciLCAiZW1lcmciLCAiZXJyb3IiLCAiaW5mbyIsICJub3RpY2UiLCAid2FybiJdLCAiY29sdW1ucyI6IHsicGMiOiA0LCAidGFibGV0IjogNiwgIm1vYmlsZSI6IDEyfSwgImRpc2FibGVkIjogdHJ1ZSwgInZhbHVlIjogImluZm8iLCAibWV0aG9kIjogInNjaGVkdWxlciIsICJwcmV2X3ZhbHVlIjogImluZm8iLCAicG9wb3ZlcnMiOiBbeyJpY29uTmFtZSI6ICJ0cmVzcGFzcyIsICJ0ZXh0IjogImlucF9wb3BvdmVyX21ldGhvZF9kaXNhYmxlZCJ9LCB7Imljb25OYW1lIjogImdsb2JlIiwgInRleHQiOiAiaW5wX3BvcG92ZXJfZ2xvYmFsIn0sIHsiaWNvbk5hbWUiOiAiaW5mbyIsICJ0ZXh0IjogIlRoZSBsZXZlbCB0byB1c2UgZm9yIGVycm9yIGxvZ3MuIn1dfSwgIkROU19SRVNPTFZFUlMiOiB7ImNvbnRleHQiOiAiZ2xvYmFsIiwgImRlZmF1bHQiOiAiMTI3LjAuMC4xMSIsICJoZWxwIjogIkROUyBhZGRyZXNzZXMgb2YgcmVzb2x2ZXJzIHRvIHVzZS4iLCAiaWQiOiAiZG5zLXJlc29sdmVycyIsICJsYWJlbCI6ICJETlMgcmVzb2x2ZXJzIiwgInJlZ2V4IjogIl4oPyEgKSgoICpbXiBdKykoPyEuKlxcMikpKiQiLCAidHlwZSI6ICJ0ZXh0IiwgImNvbnRhaW5lckNsYXNzIjogInotMjIiLCAicGF0dGVybiI6ICJeKD8hICkoKCAqW14gXSspKD8hLipcXDIpKSokIiwgImlucFR5cGUiOiAiaW5wdXQiLCAibmFtZSI6ICJETlMgcmVzb2x2ZXJzIiwgImNvbHVtbnMiOiB7InBjIjogNCwgInRhYmxldCI6IDYsICJtb2JpbGUiOiAxMn0sICJkaXNhYmxlZCI6IGZhbHNlLCAidmFsdWUiOiAiMTI3LjAuMC4xMSIsICJtZXRob2QiOiAiZGVmYXVsdCIsICJwcmV2X3ZhbHVlIjogIjEyNy4wLjAuMTEiLCAicG9wb3ZlcnMiOiBbeyJpY29uTmFtZSI6ICJnbG9iZSIsICJ0ZXh0IjogImlucF9wb3BvdmVyX2dsb2JhbCJ9LCB7Imljb25OYW1lIjogImluZm8iLCAidGV4dCI6ICJETlMgYWRkcmVzc2VzIG9mIHJlc29sdmVycyB0byB1c2UuIn1dfSwgIkRBVEFTVE9SRV9NRU1PUllfU0laRSI6IHsiY29udGV4dCI6ICJnbG9iYWwiLCAiZGVmYXVsdCI6ICI2NG0iLCAiaGVscCI6ICJTaXplIG9mIHRoZSBpbnRlcm5hbCBkYXRhc3RvcmUuIiwgImlkIjogImRhdGFzdG9yZS1tZW1vcnktc2l6ZSIsICJsYWJlbCI6ICJEYXRhc3RvcmUgbWVtb3J5IHNpemUiLCAicmVnZXgiOiAiXlxcZCtba0ttTWdHXT8kIiwgInR5cGUiOiAidGV4dCIsICJjb250YWluZXJDbGFzcyI6ICJ6LTIxIiwgInBhdHRlcm4iOiAiXlxcZCtba0ttTWdHXT8kIiwgImlucFR5cGUiOiAiaW5wdXQiLCAibmFtZSI6ICJEYXRhc3RvcmUgbWVtb3J5IHNpemUiLCAiY29sdW1ucyI6IHsicGMiOiA0LCAidGFibGV0IjogNiwgIm1vYmlsZSI6IDEyfSwgImRpc2FibGVkIjogZmFsc2UsICJ2YWx1ZSI6ICI2NG0iLCAibWV0aG9kIjogImRlZmF1bHQiLCAicHJldl92YWx1ZSI6ICI2NG0iLCAicG9wb3ZlcnMiOiBbeyJpY29uTmFtZSI6ICJnbG9iZSIsICJ0ZXh0IjogImlucF9wb3BvdmVyX2dsb2JhbCJ9LCB7Imljb25OYW1lIjogImluZm8iLCAidGV4dCI6ICJTaXplIG9mIHRoZSBpbnRlcm5hbCBkYXRhc3RvcmUuIn1dfSwgIkNBQ0hFU1RPUkVfTUVNT1JZX1NJWkUiOiB7ImNvbnRleHQiOiAiZ2xvYmFsIiwgImRlZmF1bHQiOiAiNjRtIiwgImhlbHAiOiAiU2l6ZSBvZiB0aGUgaW50ZXJuYWwgY2FjaGVzdG9yZS4iLCAiaWQiOiAiY2FjaGVzdG9yZS1tZW1vcnktc2l6ZSIsICJsYWJlbCI6ICJDYWNoZXN0b3JlIG1lbW9yeSBzaXplIiwgInJlZ2V4IjogIl5cXGQrW2tLbU1nR10/JCIsICJ0eXBlIjogInRleHQiLCAiY29udGFpbmVyQ2xhc3MiOiAiei0yMCIsICJwYXR0ZXJuIjogIl5cXGQrW2tLbU1nR10/JCIsICJpbnBUeXBlIjogImlucHV0IiwgIm5hbWUiOiAiQ2FjaGVzdG9yZSBtZW1vcnkgc2l6ZSIsICJjb2x1bW5zIjogeyJwYyI6IDQsICJ0YWJsZXQiOiA2LCAibW9iaWxlIjogMTJ9LCAiZGlzYWJsZWQiOiBmYWxzZSwgInZhbHVlIjogIjY0bSIsICJtZXRob2QiOiAiZGVmYXVsdCIsICJwcmV2X3ZhbHVlIjogIjY0bSIsICJwb3BvdmVycyI6IFt7Imljb25OYW1lIjogImdsb2JlIiwgInRleHQiOiAiaW5wX3BvcG92ZXJfZ2xvYmFsIn0sIHsiaWNvbk5hbWUiOiAiaW5mbyIsICJ0ZXh0IjogIlNpemUgb2YgdGhlIGludGVybmFsIGNhY2hlc3RvcmUuIn1dfSwgIkNBQ0hFU1RPUkVfSVBDX01FTU9SWV9TSVpFIjogeyJjb250ZXh0IjogImdsb2JhbCIsICJkZWZhdWx0IjogIjE2bSIsICJoZWxwIjogIlNpemUgb2YgdGhlIGludGVybmFsIGNhY2hlc3RvcmUgKGlwYykuIiwgImlkIjogImNhY2hlc3RvcmUtaXBjLW1lbW9yeS1zaXplIiwgImxhYmVsIjogIkNhY2hlc3RvcmUgaXBjIG1lbW9yeSBzaXplIiwgInJlZ2V4IjogIl5cXGQrW2tLbU1nR10/JCIsICJ0eXBlIjogInRleHQiLCAiY29udGFpbmVyQ2xhc3MiOiAiei0xOSIsICJwYXR0ZXJuIjogIl5cXGQrW2tLbU1nR10/JCIsICJpbnBUeXBlIjogImlucHV0IiwgIm5hbWUiOiAiQ2FjaGVzdG9yZSBpcGMgbWVtb3J5IHNpemUiLCAiY29sdW1ucyI6IHsicGMiOiA0LCAidGFibGV0IjogNiwgIm1vYmlsZSI6IDEyfSwgImRpc2FibGVkIjogZmFsc2UsICJ2YWx1ZSI6ICIxNm0iLCAibWV0aG9kIjogImRlZmF1bHQiLCAicHJldl92YWx1ZSI6ICIxNm0iLCAicG9wb3ZlcnMiOiBbeyJpY29uTmFtZSI6ICJnbG9iZSIsICJ0ZXh0IjogImlucF9wb3BvdmVyX2dsb2JhbCJ9LCB7Imljb25OYW1lIjogImluZm8iLCAidGV4dCI6ICJTaXplIG9mIHRoZSBpbnRlcm5hbCBjYWNoZXN0b3JlIChpcGMpLiJ9XX0sICJDQUNIRVNUT1JFX01JU1NfTUVNT1JZX1NJWkUiOiB7ImNvbnRleHQiOiAiZ2xvYmFsIiwgImRlZmF1bHQiOiAiMTZtIiwgImhlbHAiOiAiU2l6ZSBvZiB0aGUgaW50ZXJuYWwgY2FjaGVzdG9yZSAobWlzcykuIiwgImlkIjogImNhY2hlc3RvcmUtbWlzcy1tZW1vcnktc2l6ZSIsICJsYWJlbCI6ICJDYWNoZXN0b3JlIG1pc3MgbWVtb3J5IHNpemUiLCAicmVnZXgiOiAiXlxcZCtba0ttTWdHXT8kIiwgInR5cGUiOiAidGV4dCIsICJjb250YWluZXJDbGFzcyI6ICJ6LTE4IiwgInBhdHRlcm4iOiAiXlxcZCtba0ttTWdHXT8kIiwgImlucFR5cGUiOiAiaW5wdXQiLCAibmFtZSI6ICJDYWNoZXN0b3JlIG1pc3MgbWVtb3J5IHNpemUiLCAiY29sdW1ucyI6IHsicGMiOiA0LCAidGFibGV0IjogNiwgIm1vYmlsZSI6IDEyfSwgImRpc2FibGVkIjogZmFsc2UsICJ2YWx1ZSI6ICIxNm0iLCAibWV0aG9kIjogImRlZmF1bHQiLCAicHJldl92YWx1ZSI6ICIxNm0iLCAicG9wb3ZlcnMiOiBbeyJpY29uTmFtZSI6ICJnbG9iZSIsICJ0ZXh0IjogImlucF9wb3BvdmVyX2dsb2JhbCJ9LCB7Imljb25OYW1lIjogImluZm8iLCAidGV4dCI6ICJTaXplIG9mIHRoZSBpbnRlcm5hbCBjYWNoZXN0b3JlIChtaXNzKS4ifV19LCAiQ0FDSEVTVE9SRV9MT0NLU19NRU1PUllfU0laRSI6IHsiY29udGV4dCI6ICJnbG9iYWwiLCAiZGVmYXVsdCI6ICIxNm0iLCAiaGVscCI6ICJTaXplIG9mIHRoZSBpbnRlcm5hbCBjYWNoZXN0b3JlIChsb2NrcykuIiwgImlkIjogImNhY2hlc3RvcmUtbG9ja3MtbWVtb3J5LXNpemUiLCAibGFiZWwiOiAiQ2FjaGVzdG9yZSBsb2NrcyBtZW1vcnkgc2l6ZSIsICJyZWdleCI6ICJeXFxkK1trS21NZ0ddPyQiLCAidHlwZSI6ICJ0ZXh0IiwgImNvbnRhaW5lckNsYXNzIjogInotMTciLCAicGF0dGVybiI6ICJeXFxkK1trS21NZ0ddPyQiLCAiaW5wVHlwZSI6ICJpbnB1dCIsICJuYW1lIjogIkNhY2hlc3RvcmUgbG9ja3MgbWVtb3J5IHNpemUiLCAiY29sdW1ucyI6IHsicGMiOiA0LCAidGFibGV0IjogNiwgIm1vYmlsZSI6IDEyfSwgImRpc2FibGVkIjogZmFsc2UsICJ2YWx1ZSI6ICIxNm0iLCAibWV0aG9kIjogImRlZmF1bHQiLCAicHJldl92YWx1ZSI6ICIxNm0iLCAicG9wb3ZlcnMiOiBbeyJpY29uTmFtZSI6ICJnbG9iZSIsICJ0ZXh0IjogImlucF9wb3BvdmVyX2dsb2JhbCJ9LCB7Imljb25OYW1lIjogImluZm8iLCAidGV4dCI6ICJTaXplIG9mIHRoZSBpbnRlcm5hbCBjYWNoZXN0b3JlIChsb2NrcykuIn1dfSwgIlVTRV9BUEkiOiB7ImNvbnRleHQiOiAiZ2xvYmFsIiwgImRlZmF1bHQiOiAieWVzIiwgImhlbHAiOiAiQWN0aXZhdGUgdGhlIEFQSSB0byBjb250cm9sIEJ1bmtlcldlYi4iLCAiaWQiOiAidXNlLWFwaSIsICJsYWJlbCI6ICJBY3RpdmF0ZSBBUEkiLCAicmVnZXgiOiAiXih5ZXN8bm8pJCIsICJ0eXBlIjogImNoZWNrIiwgImNvbnRhaW5lckNsYXNzIjogInotMTYiLCAicGF0dGVybiI6ICJeKHllc3xubykkIiwgImlucFR5cGUiOiAiY2hlY2tib3giLCAibmFtZSI6ICJBY3RpdmF0ZSBBUEkiLCAiY29sdW1ucyI6IHsicGMiOiA0LCAidGFibGV0IjogNiwgIm1vYmlsZSI6IDEyfSwgImRpc2FibGVkIjogZmFsc2UsICJ2YWx1ZSI6ICJ5ZXMiLCAibWV0aG9kIjogImRlZmF1bHQiLCAicHJldl92YWx1ZSI6ICJ5ZXMiLCAicG9wb3ZlcnMiOiBbeyJpY29uTmFtZSI6ICJnbG9iZSIsICJ0ZXh0IjogImlucF9wb3BvdmVyX2dsb2JhbCJ9LCB7Imljb25OYW1lIjogImluZm8iLCAidGV4dCI6ICJBY3RpdmF0ZSB0aGUgQVBJIHRvIGNvbnRyb2wgQnVua2VyV2ViLiJ9XX0sICJBUElfSFRUUF9QT1JUIjogeyJjb250ZXh0IjogImdsb2JhbCIsICJkZWZhdWx0IjogIjUwMDAiLCAiaGVscCI6ICJMaXN0ZW4gcG9ydCBudW1iZXIgZm9yIHRoZSBBUEkuIiwgImlkIjogImFwaS1odHRwLWxpc3RlbiIsICJsYWJlbCI6ICJBUEkgcG9ydCBudW1iZXIiLCAicmVnZXgiOiAiXlxcZCskIiwgInR5cGUiOiAidGV4dCIsICJjb250YWluZXJDbGFzcyI6ICJ6LTE1IiwgInBhdHRlcm4iOiAiXlxcZCskIiwgImlucFR5cGUiOiAiaW5wdXQiLCAibmFtZSI6ICJBUEkgcG9ydCBudW1iZXIiLCAiY29sdW1ucyI6IHsicGMiOiA0LCAidGFibGV0IjogNiwgIm1vYmlsZSI6IDEyfSwgImRpc2FibGVkIjogZmFsc2UsICJ2YWx1ZSI6ICI1MDAwIiwgIm1ldGhvZCI6ICJkZWZhdWx0IiwgInByZXZfdmFsdWUiOiAiNTAwMCIsICJwb3BvdmVycyI6IFt7Imljb25OYW1lIjogImdsb2JlIiwgInRleHQiOiAiaW5wX3BvcG92ZXJfZ2xvYmFsIn0sIHsiaWNvbk5hbWUiOiAiaW5mbyIsICJ0ZXh0IjogIkxpc3RlbiBwb3J0IG51bWJlciBmb3IgdGhlIEFQSS4ifV19LCAiQVBJX0xJU1RFTl9JUCI6IHsiY29udGV4dCI6ICJnbG9iYWwiLCAiZGVmYXVsdCI6ICIwLjAuMC4wIiwgImhlbHAiOiAiTGlzdGVuIElQIGFkZHJlc3MgZm9yIHRoZSBBUEkuIiwgImlkIjogImFwaS1pcC1saXN0ZW4iLCAibGFiZWwiOiAiQVBJIGxpc3RlbiBJUCIsICJyZWdleCI6ICJeLiokIiwgInR5cGUiOiAidGV4dCIsICJjb250YWluZXJDbGFzcyI6ICJ6LTE0IiwgInBhdHRlcm4iOiAiXi4qJCIsICJpbnBUeXBlIjogImlucHV0IiwgIm5hbWUiOiAiQVBJIGxpc3RlbiBJUCIsICJjb2x1bW5zIjogeyJwYyI6IDQsICJ0YWJsZXQiOiA2LCAibW9iaWxlIjogMTJ9LCAiZGlzYWJsZWQiOiBmYWxzZSwgInZhbHVlIjogIjAuMC4wLjAiLCAibWV0aG9kIjogImRlZmF1bHQiLCAicHJldl92YWx1ZSI6ICIwLjAuMC4wIiwgInBvcG92ZXJzIjogW3siaWNvbk5hbWUiOiAiZ2xvYmUiLCAidGV4dCI6ICJpbnBfcG9wb3Zlcl9nbG9iYWwifSwgeyJpY29uTmFtZSI6ICJpbmZvIiwgInRleHQiOiAiTGlzdGVuIElQIGFkZHJlc3MgZm9yIHRoZSBBUEkuIn1dfSwgIkFQSV9TRVJWRVJfTkFNRSI6IHsiY29udGV4dCI6ICJnbG9iYWwiLCAiZGVmYXVsdCI6ICJid2FwaSIsICJoZWxwIjogIlNlcnZlciBuYW1lICh2aXJ0dWFsIGhvc3QpIGZvciB0aGUgQVBJLiIsICJpZCI6ICJhcGktc2VydmVyLW5hbWUiLCAibGFiZWwiOiAiQVBJIHNlcnZlciBuYW1lIiwgInJlZ2V4IjogIl5bXiBdezEsMjU1fSQiLCAidHlwZSI6ICJ0ZXh0IiwgImNvbnRhaW5lckNsYXNzIjogInotMTMiLCAicGF0dGVybiI6ICJeW14gXXsxLDI1NX0kIiwgImlucFR5cGUiOiAiaW5wdXQiLCAibmFtZSI6ICJBUEkgc2VydmVyIG5hbWUiLCAiY29sdW1ucyI6IHsicGMiOiA0LCAidGFibGV0IjogNiwgIm1vYmlsZSI6IDEyfSwgImRpc2FibGVkIjogZmFsc2UsICJ2YWx1ZSI6ICJid2FwaSIsICJtZXRob2QiOiAiZGVmYXVsdCIsICJwcmV2X3ZhbHVlIjogImJ3YXBpIiwgInBvcG92ZXJzIjogW3siaWNvbk5hbWUiOiAiZ2xvYmUiLCAidGV4dCI6ICJpbnBfcG9wb3Zlcl9nbG9iYWwifSwgeyJpY29uTmFtZSI6ICJpbmZvIiwgInRleHQiOiAiU2VydmVyIG5hbWUgKHZpcnR1YWwgaG9zdCkgZm9yIHRoZSBBUEkuIn1dfSwgIkFQSV9XSElURUxJU1RfSVAiOiB7ImNvbnRleHQiOiAiZ2xvYmFsIiwgImRlZmF1bHQiOiAiMTI3LjAuMC4wLzgiLCAiaGVscCI6ICJMaXN0IG9mIElQL25ldHdvcmsgYWxsb3dlZCB0byBjb250YWN0IHRoZSBBUEkuIiwgImlkIjogImFwaS13aGl0ZWxpc3QtaXAiLCAibGFiZWwiOiAiQVBJIHdoaXRlbGlzdCBJUCIsICJyZWdleCI6ICJeKD8hICkoICooKChcXGIyNVswLTVdfFxcYjJbMC00XVxcZHxcXGJbMDFdP1xcZFxcZD8pKFxcLigyNVswLTVdfDJbMC00XVxcZHxbMDFdP1xcZFxcZD8pKXszfSkoXFwvKFsxLTJdWzAtOV0/fDNbMC0yXT98WzA0LTldKSk/fCgoWzAtOWEtZkEtRl17MSw0fTopezd9WzAtOWEtZkEtRl17MSw0fXwoWzAtOWEtZkEtRl17MSw0fTopezEsN306fChbMC05YS1mQS1GXXsxLDR9Oil7MSw2fTpbMC05YS1mQS1GXXsxLDR9fChbMC05YS1mQS1GXXsxLDR9Oil7MSw1fSg6WzAtOWEtZkEtRl17MSw0fSl7MSwyfXwoWzAtOWEtZkEtRl17MSw0fTopezEsNH0oOlswLTlhLWZBLUZdezEsNH0pezEsM318KFswLTlhLWZBLUZdezEsNH06KXsxLDN9KDpbMC05YS1mQS1GXXsxLDR9KXsxLDR9fChbMC05YS1mQS1GXXsxLDR9Oil7MSwyfSg6WzAtOWEtZkEtRl17MSw0fSl7MSw1fXxbMC05YS1mQS1GXXsxLDR9OigoOlswLTlhLWZBLUZdezEsNH0pezEsNn0pfDooKDpbMC05YS1mQS1GXXsxLDR9KXsxLDd9fDopfGZlODA6KDpbMC05YS1mQS1GXVp7MCw0fSl7MCw0fSVbMC05YS16QS1aXSt8OjooZmZmZig6MHsxLDR9KT86KT8oKDI1WzAtNV18KDJbMC00XXwxP1xcZCk/XFxkKVxcLil7M30oMjVbMC01XXwoMlswLTRdfDE/XFxkKT9cXGQpfChbMC05YS1mQS1GXXsxLDR9Oil7MSw0fTooKDI1WzAtNV18KDJbMC00XXwxP1xcZCk/XFxkKVxcLil7M30oMjVbMC01XXwoMlswLTRdfDE/XFxkKT9cXGQpKShcXC8oMTJbMC04XXwxWzAxXVswLTldfFswLTldWzAtOV0/KSk/KSg/IS4qXFxEXFwyKFteXFxkXFwvXXwkKSkgKikqJCIsICJ0eXBlIjogInRleHQiLCAiY29udGFpbmVyQ2xhc3MiOiAiei0xMiIsICJwYXR0ZXJuIjogIl4oPyEgKSggKigoKFxcYjI1WzAtNV18XFxiMlswLTRdXFxkfFxcYlswMV0/XFxkXFxkPykoXFwuKDI1WzAtNV18MlswLTRdXFxkfFswMV0/XFxkXFxkPykpezN9KShcXC8oWzEtMl1bMC05XT98M1swLTJdP3xbMDQtOV0pKT98KChbMC05YS1mQS1GXXsxLDR9Oil7N31bMC05YS1mQS1GXXsxLDR9fChbMC05YS1mQS1GXXsxLDR9Oil7MSw3fTp8KFswLTlhLWZBLUZdezEsNH06KXsxLDZ9OlswLTlhLWZBLUZdezEsNH18KFswLTlhLWZBLUZdezEsNH06KXsxLDV9KDpbMC05YS1mQS1GXXsxLDR9KXsxLDJ9fChbMC05YS1mQS1GXXsxLDR9Oil7MSw0fSg6WzAtOWEtZkEtRl17MSw0fSl7MSwzfXwoWzAtOWEtZkEtRl17MSw0fTopezEsM30oOlswLTlhLWZBLUZdezEsNH0pezEsNH18KFswLTlhLWZBLUZdezEsNH06KXsxLDJ9KDpbMC05YS1mQS1GXXsxLDR9KXsxLDV9fFswLTlhLWZBLUZdezEsNH06KCg6WzAtOWEtZkEtRl17MSw0fSl7MSw2fSl8OigoOlswLTlhLWZBLUZdezEsNH0pezEsN318Oil8ZmU4MDooOlswLTlhLWZBLUZdWnswLDR9KXswLDR9JVswLTlhLXpBLVpdK3w6OihmZmZmKDowezEsNH0pPzopPygoMjVbMC01XXwoMlswLTRdfDE/XFxkKT9cXGQpXFwuKXszfSgyNVswLTVdfCgyWzAtNF18MT9cXGQpP1xcZCl8KFswLTlhLWZBLUZdezEsNH06KXsxLDR9OigoMjVbMC01XXwoMlswLTRdfDE/XFxkKT9cXGQpXFwuKXszfSgyNVswLTVdfCgyWzAtNF18MT9cXGQpP1xcZCkpKFxcLygxMlswLThdfDFbMDFdWzAtOV18WzAtOV1bMC05XT8pKT8pKD8hLipcXERcXDIoW15cXGRcXC9dfCQpKSAqKSokIiwgImlucFR5cGUiOiAiaW5wdXQiLCAibmFtZSI6ICJBUEkgd2hpdGVsaXN0IElQIiwgImNvbHVtbnMiOiB7InBjIjogNCwgInRhYmxldCI6IDYsICJtb2JpbGUiOiAxMn0sICJkaXNhYmxlZCI6IHRydWUsICJ2YWx1ZSI6ICIxMjcuMC4wLjAvMjQgMTAuMjAuMzAuMC8yNCIsICJtZXRob2QiOiAic2NoZWR1bGVyIiwgInByZXZfdmFsdWUiOiAiMTI3LjAuMC4wLzI0IDEwLjIwLjMwLjAvMjQiLCAicG9wb3ZlcnMiOiBbeyJpY29uTmFtZSI6ICJ0cmVzcGFzcyIsICJ0ZXh0IjogImlucF9wb3BvdmVyX21ldGhvZF9kaXNhYmxlZCJ9LCB7Imljb25OYW1lIjogImdsb2JlIiwgInRleHQiOiAiaW5wX3BvcG92ZXJfZ2xvYmFsIn0sIHsiaWNvbk5hbWUiOiAiaW5mbyIsICJ0ZXh0IjogIkxpc3Qgb2YgSVAvbmV0d29yayBhbGxvd2VkIHRvIGNvbnRhY3QgdGhlIEFQSS4ifV19LCAiQVVUT0NPTkZfTU9ERSI6IHsiY29udGV4dCI6ICJnbG9iYWwiLCAiZGVmYXVsdCI6ICJubyIsICJoZWxwIjogIkVuYWJsZSBBdXRvY29uZiBEb2NrZXIgaW50ZWdyYXRpb24uIiwgImlkIjogImF1dG9jb25mLW1vZGUiLCAibGFiZWwiOiAiQXV0b2NvbmYgbW9kZSIsICJyZWdleCI6ICJeKHllc3xubykkIiwgInR5cGUiOiAiY2hlY2siLCAiY29udGFpbmVyQ2xhc3MiOiAiei0xMSIsICJwYXR0ZXJuIjogIl4oeWVzfG5vKSQiLCAiaW5wVHlwZSI6ICJjaGVja2JveCIsICJuYW1lIjogIkF1dG9jb25mIG1vZGUiLCAiY29sdW1ucyI6IHsicGMiOiA0LCAidGFibGV0IjogNiwgIm1vYmlsZSI6IDEyfSwgImRpc2FibGVkIjogZmFsc2UsICJ2YWx1ZSI6ICJubyIsICJtZXRob2QiOiAiZGVmYXVsdCIsICJwcmV2X3ZhbHVlIjogIm5vIiwgInBvcG92ZXJzIjogW3siaWNvbk5hbWUiOiAiZ2xvYmUiLCAidGV4dCI6ICJpbnBfcG9wb3Zlcl9nbG9iYWwifSwgeyJpY29uTmFtZSI6ICJpbmZvIiwgInRleHQiOiAiRW5hYmxlIEF1dG9jb25mIERvY2tlciBpbnRlZ3JhdGlvbi4ifV19LCAiU1dBUk1fTU9ERSI6IHsiY29udGV4dCI6ICJnbG9iYWwiLCAiZGVmYXVsdCI6ICJubyIsICJoZWxwIjogIkVuYWJsZSBEb2NrZXIgU3dhcm0gaW50ZWdyYXRpb24uIiwgImlkIjogInN3YXJtLW1vZGUiLCAibGFiZWwiOiAiU3dhcm0gbW9kZSIsICJyZWdleCI6ICJeKHllc3xubykkIiwgInR5cGUiOiAiY2hlY2siLCAiY29udGFpbmVyQ2xhc3MiOiAiei0xMCIsICJwYXR0ZXJuIjogIl4oeWVzfG5vKSQiLCAiaW5wVHlwZSI6ICJjaGVja2JveCIsICJuYW1lIjogIlN3YXJtIG1vZGUiLCAiY29sdW1ucyI6IHsicGMiOiA0LCAidGFibGV0IjogNiwgIm1vYmlsZSI6IDEyfSwgImRpc2FibGVkIjogZmFsc2UsICJ2YWx1ZSI6ICJubyIsICJtZXRob2QiOiAiZGVmYXVsdCIsICJwcmV2X3ZhbHVlIjogIm5vIiwgInBvcG92ZXJzIjogW3siaWNvbk5hbWUiOiAiZ2xvYmUiLCAidGV4dCI6ICJpbnBfcG9wb3Zlcl9nbG9iYWwifSwgeyJpY29uTmFtZSI6ICJpbmZvIiwgInRleHQiOiAiRW5hYmxlIERvY2tlciBTd2FybSBpbnRlZ3JhdGlvbi4ifV19LCAiS1VCRVJORVRFU19NT0RFIjogeyJjb250ZXh0IjogImdsb2JhbCIsICJkZWZhdWx0IjogIm5vIiwgImhlbHAiOiAiRW5hYmxlIEt1YmVybmV0ZXMgaW50ZWdyYXRpb24uIiwgImlkIjogImt1YmVybmV0ZXMtbW9kZSIsICJsYWJlbCI6ICJLdWJlcm5ldGVzIG1vZGUiLCAicmVnZXgiOiAiXih5ZXN8bm8pJCIsICJ0eXBlIjogImNoZWNrIiwgImNvbnRhaW5lckNsYXNzIjogInotOSIsICJwYXR0ZXJuIjogIl4oeWVzfG5vKSQiLCAiaW5wVHlwZSI6ICJjaGVja2JveCIsICJuYW1lIjogIkt1YmVybmV0ZXMgbW9kZSIsICJjb2x1bW5zIjogeyJwYyI6IDQsICJ0YWJsZXQiOiA2LCAibW9iaWxlIjogMTJ9LCAiZGlzYWJsZWQiOiBmYWxzZSwgInZhbHVlIjogIm5vIiwgIm1ldGhvZCI6ICJkZWZhdWx0IiwgInByZXZfdmFsdWUiOiAibm8iLCAicG9wb3ZlcnMiOiBbeyJpY29uTmFtZSI6ICJnbG9iZSIsICJ0ZXh0IjogImlucF9wb3BvdmVyX2dsb2JhbCJ9LCB7Imljb25OYW1lIjogImluZm8iLCAidGV4dCI6ICJFbmFibGUgS3ViZXJuZXRlcyBpbnRlZ3JhdGlvbi4ifV19LCAiU0VSVkVSX1RZUEUiOiB7ImNvbnRleHQiOiAibXVsdGlzaXRlIiwgImRlZmF1bHQiOiAiaHR0cCIsICJoZWxwIjogIlNlcnZlciB0eXBlIDogaHR0cCBvciBzdHJlYW0uIiwgImlkIjogInNlcnZlci10eXBlIiwgImxhYmVsIjogIlNlcnZlciB0eXBlIiwgInJlZ2V4IjogIl4oaHR0cHxzdHJlYW0pJCIsICJ0eXBlIjogInNlbGVjdCIsICJjb250YWluZXJDbGFzcyI6ICJ6LTgiLCAicGF0dGVybiI6ICJeKGh0dHB8c3RyZWFtKSQiLCAiaW5wVHlwZSI6ICJzZWxlY3QiLCAibmFtZSI6ICJTZXJ2ZXIgdHlwZSIsICJ2YWx1ZXMiOiBbImh0dHAiLCAic3RyZWFtIl0sICJjb2x1bW5zIjogeyJwYyI6IDQsICJ0YWJsZXQiOiA2LCAibW9iaWxlIjogMTJ9LCAiZGlzYWJsZWQiOiBmYWxzZSwgInZhbHVlIjogImh0dHAiLCAibWV0aG9kIjogImRlZmF1bHQiLCAicHJldl92YWx1ZSI6ICJodHRwIiwgInBvcG92ZXJzIjogW3siaWNvbk5hbWUiOiAiZGlzayIsICJ0ZXh0IjogImlucF9wb3BvdmVyX211bHRpc2l0ZSJ9LCB7Imljb25OYW1lIjogImluZm8iLCAidGV4dCI6ICJTZXJ2ZXIgdHlwZSA6IGh0dHAgb3Igc3RyZWFtLiJ9XX0sICJMSVNURU5fU1RSRUFNIjogeyJjb250ZXh0IjogIm11bHRpc2l0ZSIsICJkZWZhdWx0IjogInllcyIsICJoZWxwIjogIkVuYWJsZSBsaXN0ZW5pbmcgZm9yIG5vbi1zc2wgKHBhc3N0aHJvdWdoKS4iLCAiaWQiOiAibGlzdGVuLXN0cmVhbSIsICJsYWJlbCI6ICJMaXN0ZW4gc3RyZWFtIiwgInJlZ2V4IjogIl4oeWVzfG5vKSQiLCAidHlwZSI6ICJjaGVjayIsICJjb250YWluZXJDbGFzcyI6ICJ6LTciLCAicGF0dGVybiI6ICJeKHllc3xubykkIiwgImlucFR5cGUiOiAiY2hlY2tib3giLCAibmFtZSI6ICJMaXN0ZW4gc3RyZWFtIiwgImNvbHVtbnMiOiB7InBjIjogNCwgInRhYmxldCI6IDYsICJtb2JpbGUiOiAxMn0sICJkaXNhYmxlZCI6IGZhbHNlLCAidmFsdWUiOiAieWVzIiwgIm1ldGhvZCI6ICJkZWZhdWx0IiwgInByZXZfdmFsdWUiOiAieWVzIiwgInBvcG92ZXJzIjogW3siaWNvbk5hbWUiOiAiZGlzayIsICJ0ZXh0IjogImlucF9wb3BvdmVyX211bHRpc2l0ZSJ9LCB7Imljb25OYW1lIjogImluZm8iLCAidGV4dCI6ICJFbmFibGUgbGlzdGVuaW5nIGZvciBub24tc3NsIChwYXNzdGhyb3VnaCkuIn1dfSwgIkxJU1RFTl9TVFJFQU1fUE9SVCI6IHsiY29udGV4dCI6ICJtdWx0aXNpdGUiLCAiZGVmYXVsdCI6ICIxMzM3IiwgImhlbHAiOiAiTGlzdGVuaW5nIHBvcnQgZm9yIG5vbi1zc2wgKHBhc3N0aHJvdWdoKS4iLCAiaWQiOiAibGlzdGVuLXN0cmVhbS1wb3J0IiwgImxhYmVsIjogIkxpc3RlbiBzdHJlYW0gcG9ydCIsICJyZWdleCI6ICJeWzAtOV0rJCIsICJ0eXBlIjogInRleHQiLCAiY29udGFpbmVyQ2xhc3MiOiAiei02IiwgInBhdHRlcm4iOiAiXlswLTldKyQiLCAiaW5wVHlwZSI6ICJpbnB1dCIsICJuYW1lIjogIkxpc3RlbiBzdHJlYW0gcG9ydCIsICJjb2x1bW5zIjogeyJwYyI6IDQsICJ0YWJsZXQiOiA2LCAibW9iaWxlIjogMTJ9LCAiZGlzYWJsZWQiOiBmYWxzZSwgInZhbHVlIjogIjEzMzciLCAibWV0aG9kIjogImRlZmF1bHQiLCAicHJldl92YWx1ZSI6ICIxMzM3IiwgInBvcG92ZXJzIjogW3siaWNvbk5hbWUiOiAiZGlzayIsICJ0ZXh0IjogImlucF9wb3BvdmVyX211bHRpc2l0ZSJ9LCB7Imljb25OYW1lIjogImluZm8iLCAidGV4dCI6ICJMaXN0ZW5pbmcgcG9ydCBmb3Igbm9uLXNzbCAocGFzc3Rocm91Z2gpLiJ9XX0sICJMSVNURU5fU1RSRUFNX1BPUlRfU1NMIjogeyJjb250ZXh0IjogIm11bHRpc2l0ZSIsICJkZWZhdWx0IjogIjQyNDIiLCAiaGVscCI6ICJMaXN0ZW5pbmcgcG9ydCBmb3Igc3NsIChwYXNzdGhyb3VnaCkuIiwgImlkIjogImxpc3Rlbi1zdHJlYW0tcG9ydC1zc2wiLCAibGFiZWwiOiAiTGlzdGVuIHN0cmVhbSBwb3J0IHNzbCIsICJyZWdleCI6ICJeWzAtOV0rJCIsICJ0eXBlIjogInRleHQiLCAiY29udGFpbmVyQ2xhc3MiOiAiei01IiwgInBhdHRlcm4iOiAiXlswLTldKyQiLCAiaW5wVHlwZSI6ICJpbnB1dCIsICJuYW1lIjogIkxpc3RlbiBzdHJlYW0gcG9ydCBzc2wiLCAiY29sdW1ucyI6IHsicGMiOiA0LCAidGFibGV0IjogNiwgIm1vYmlsZSI6IDEyfSwgImRpc2FibGVkIjogZmFsc2UsICJ2YWx1ZSI6ICI0MjQyIiwgIm1ldGhvZCI6ICJkZWZhdWx0IiwgInByZXZfdmFsdWUiOiAiNDI0MiIsICJwb3BvdmVycyI6IFt7Imljb25OYW1lIjogImRpc2siLCAidGV4dCI6ICJpbnBfcG9wb3Zlcl9tdWx0aXNpdGUifSwgeyJpY29uTmFtZSI6ICJpbmZvIiwgInRleHQiOiAiTGlzdGVuaW5nIHBvcnQgZm9yIHNzbCAocGFzc3Rocm91Z2gpLiJ9XX0sICJVU0VfVURQIjogeyJjb250ZXh0IjogIm11bHRpc2l0ZSIsICJkZWZhdWx0IjogIm5vIiwgImhlbHAiOiAiVURQIGxpc3RlbiBpbnN0ZWFkIG9mIFRDUCAoc3RyZWFtKS4iLCAiaWQiOiAidXNlLXVkcCIsICJsYWJlbCI6ICJMaXN0ZW4gVURQIiwgInJlZ2V4IjogIl4oeWVzfG5vKSQiLCAidHlwZSI6ICJjaGVjayIsICJjb250YWluZXJDbGFzcyI6ICJ6LTQiLCAicGF0dGVybiI6ICJeKHllc3xubykkIiwgImlucFR5cGUiOiAiY2hlY2tib3giLCAibmFtZSI6ICJMaXN0ZW4gVURQIiwgImNvbHVtbnMiOiB7InBjIjogNCwgInRhYmxldCI6IDYsICJtb2JpbGUiOiAxMn0sICJkaXNhYmxlZCI6IGZhbHNlLCAidmFsdWUiOiAibm8iLCAibWV0aG9kIjogImRlZmF1bHQiLCAicHJldl92YWx1ZSI6ICJubyIsICJwb3BvdmVycyI6IFt7Imljb25OYW1lIjogImRpc2siLCAidGV4dCI6ICJpbnBfcG9wb3Zlcl9tdWx0aXNpdGUifSwgeyJpY29uTmFtZSI6ICJpbmZvIiwgInRleHQiOiAiVURQIGxpc3RlbiBpbnN0ZWFkIG9mIFRDUCAoc3RyZWFtKS4ifV19LCAiVVNFX0lQVjYiOiB7ImNvbnRleHQiOiAiZ2xvYmFsIiwgImRlZmF1bHQiOiAibm8iLCAiaGVscCI6ICJFbmFibGUgSVB2NiBjb25uZWN0aXZpdHkuIiwgImlkIjogInVzZS1pcHY2IiwgImxhYmVsIjogIlVzZSBJUHY2IiwgInJlZ2V4IjogIl4oeWVzfG5vKSQiLCAidHlwZSI6ICJjaGVjayIsICJjb250YWluZXJDbGFzcyI6ICJ6LTMiLCAicGF0dGVybiI6ICJeKHllc3xubykkIiwgImlucFR5cGUiOiAiY2hlY2tib3giLCAibmFtZSI6ICJVc2UgSVB2NiIsICJjb2x1bW5zIjogeyJwYyI6IDQsICJ0YWJsZXQiOiA2LCAibW9iaWxlIjogMTJ9LCAiZGlzYWJsZWQiOiBmYWxzZSwgInZhbHVlIjogIm5vIiwgIm1ldGhvZCI6ICJkZWZhdWx0IiwgInByZXZfdmFsdWUiOiAibm8iLCAicG9wb3ZlcnMiOiBbeyJpY29uTmFtZSI6ICJnbG9iZSIsICJ0ZXh0IjogImlucF9wb3BvdmVyX2dsb2JhbCJ9LCB7Imljb25OYW1lIjogImluZm8iLCAidGV4dCI6ICJFbmFibGUgSVB2NiBjb25uZWN0aXZpdHkuIn1dfSwgIklTX0RSQUZUIjogeyJjb250ZXh0IjogIm11bHRpc2l0ZSIsICJkZWZhdWx0IjogIm5vIiwgImhlbHAiOiAiSW50ZXJuYWwgdXNlIDogc2V0IHRvIHllcyB3aGVuIHRoZSBzZXJ2aWNlIGlzIGluIGRyYWZ0IG1vZGUuIiwgImlkIjogImludGVybmFsLXVzZS1kcmFmdCIsICJsYWJlbCI6ICJpbnRlcm5hbCB1c2UgZHJhZnQiLCAicmVnZXgiOiAiXih5ZXN8bm8pJCIsICJ0eXBlIjogImNoZWNrIiwgImNvbnRhaW5lckNsYXNzIjogInotMiIsICJwYXR0ZXJuIjogIl4oeWVzfG5vKSQiLCAiaW5wVHlwZSI6ICJjaGVja2JveCIsICJuYW1lIjogImludGVybmFsIHVzZSBkcmFmdCIsICJjb2x1bW5zIjogeyJwYyI6IDQsICJ0YWJsZXQiOiA2LCAibW9iaWxlIjogMTJ9LCAiZGlzYWJsZWQiOiBmYWxzZSwgInZhbHVlIjogIm5vIiwgIm1ldGhvZCI6ICJkZWZhdWx0IiwgInByZXZfdmFsdWUiOiAibm8iLCAicG9wb3ZlcnMiOiBbeyJpY29uTmFtZSI6ICJkaXNrIiwgInRleHQiOiAiaW5wX3BvcG92ZXJfbXVsdGlzaXRlIn0sIHsiaWNvbk5hbWUiOiAiaW5mbyIsICJ0ZXh0IjogIkludGVybmFsIHVzZSA6IHNldCB0byB5ZXMgd2hlbiB0aGUgc2VydmljZSBpcyBpbiBkcmFmdCBtb2RlLiJ9XX0sICJUSU1FUlNfTE9HX0xFVkVMIjogeyJjb250ZXh0IjogImdsb2JhbCIsICJkZWZhdWx0IjogImRlYnVnIiwgImhlbHAiOiAiTG9nIGxldmVsIGZvciB0aW1lcnMuIiwgImlkIjogInRpbWVycy1sb2ctbGV2ZWwiLCAibGFiZWwiOiAiVGltZXJzIGxvZyBsZXZlbCIsICJyZWdleCI6ICJeKGRlYnVnfGluZm98bm90aWNlfHdhcm58ZXJyfGNyaXR8YWxlcnR8ZW1lcmcpJCIsICJ0eXBlIjogInNlbGVjdCIsICJjb250YWluZXJDbGFzcyI6ICJ6LTEiLCAicGF0dGVybiI6ICJeKGRlYnVnfGluZm98bm90aWNlfHdhcm58ZXJyfGNyaXR8YWxlcnR8ZW1lcmcpJCIsICJpbnBUeXBlIjogInNlbGVjdCIsICJuYW1lIjogIlRpbWVycyBsb2cgbGV2ZWwiLCAidmFsdWVzIjogWyJhbGVydCIsICJjcml0IiwgImRlYnVnIiwgImVtZXJnIiwgImVyciIsICJpbmZvIiwgIm5vdGljZSIsICJ3YXJuIl0sICJjb2x1bW5zIjogeyJwYyI6IDQsICJ0YWJsZXQiOiA2LCAibW9iaWxlIjogMTJ9LCAiZGlzYWJsZWQiOiBmYWxzZSwgInZhbHVlIjogImRlYnVnIiwgIm1ldGhvZCI6ICJkZWZhdWx0IiwgInByZXZfdmFsdWUiOiAiZGVidWciLCAicG9wb3ZlcnMiOiBbeyJpY29uTmFtZSI6ICJnbG9iZSIsICJ0ZXh0IjogImlucF9wb3BvdmVyX2dsb2JhbCJ9LCB7Imljb25OYW1lIjogImluZm8iLCAidGV4dCI6ICJMb2cgbGV2ZWwgZm9yIHRpbWVycy4ifV19LCAiQlVOS0VSV0VCX0lOU1RBTkNFUyI6IHsiY29udGV4dCI6ICJnbG9iYWwiLCAiZGVmYXVsdCI6ICIxMjcuMC4wLjEiLCAiaGVscCI6ICJMaXN0IG9mIEJ1bmtlcldlYiBpbnN0YW5jZXMgc2VwYXJhdGVkIHdpdGggc3BhY2VzIChmb3JtYXQgOiBmcWRuLW9yLWlwOjUwMDAgaHR0cDovL2ZxZG4tb3ItaXA6NTAwMCkiLCAiaWQiOiAiYnVua2Vyd2ViLWluc3RhbmNlcyIsICJsYWJlbCI6ICJCdW5rZXJXZWIgaW5zdGFuY2VzIiwgInJlZ2V4IjogIl4uKiQiLCAidHlwZSI6ICJ0ZXh0IiwgImNvbnRhaW5lckNsYXNzIjogInotMCIsICJwYXR0ZXJuIjogIl4uKiQiLCAiaW5wVHlwZSI6ICJpbnB1dCIsICJuYW1lIjogIkJ1bmtlcldlYiBpbnN0YW5jZXMiLCAiY29sdW1ucyI6IHsicGMiOiA0LCAidGFibGV0IjogNiwgIm1vYmlsZSI6IDEyfSwgImRpc2FibGVkIjogdHJ1ZSwgInZhbHVlIjogImJ1bmtlcndlYiIsICJtZXRob2QiOiAic2NoZWR1bGVyIiwgInByZXZfdmFsdWUiOiAiYnVua2Vyd2ViIiwgInBvcG92ZXJzIjogW3siaWNvbk5hbWUiOiAidHJlc3Bhc3MiLCAidGV4dCI6ICJpbnBfcG9wb3Zlcl9tZXRob2RfZGlzYWJsZWQifSwgeyJpY29uTmFtZSI6ICJnbG9iZSIsICJ0ZXh0IjogImlucF9wb3BvdmVyX2dsb2JhbCJ9LCB7Imljb25OYW1lIjogImluZm8iLCAidGV4dCI6ICJMaXN0IG9mIEJ1bmtlcldlYiBpbnN0YW5jZXMgc2VwYXJhdGVkIHdpdGggc3BhY2VzIChmb3JtYXQgOiBmcWRuLW9yLWlwOjUwMDAgaHR0cDovL2ZxZG4tb3ItaXA6NTAwMCkifV19fSwgImNoZWNrc3VtIjogbnVsbH0sIHsiaWQiOiAiYW50aWJvdCIsICJzdHJlYW0iOiAibm8iLCAibmFtZSI6ICJBbnRpYm90IiwgImRlc2NyaXB0aW9uIjogIkJvdCBkZXRlY3Rpb24gYnkgdXNpbmcgYSBjaGFsbGVuZ2UuIiwgInZlcnNpb24iOiAiMS4wIiwgInR5cGUiOiAiY29yZSIsICJtZXRob2QiOiAibWFudWFsIiwgInBhZ2UiOiB0cnVlLCAic2V0dGluZ3MiOiB7IlVTRV9BTlRJQk9UIjogeyJjb250ZXh0IjogIm11bHRpc2l0ZSIsICJkZWZhdWx0IjogIm5vIiwgImhlbHAiOiAiQWN0aXZhdGUgYW50aWJvdCBmZWF0dXJlLiIsICJpZCI6ICJ1c2UtYW50aWJvdCIsICJsYWJlbCI6ICJBbnRpYm90IGNoYWxsZW5nZSIsICJyZWdleCI6ICJeKG5vfGNvb2tpZXxqYXZhc2NyaXB0fGNhcHRjaGF8cmVjYXB0Y2hhfGhjYXB0Y2hhfHR1cm5zdGlsZSkkIiwgInR5cGUiOiAic2VsZWN0IiwgImNvbnRhaW5lckNsYXNzIjogInotMTAiLCAicGF0dGVybiI6ICJeKG5vfGNvb2tpZXxqYXZhc2NyaXB0fGNhcHRjaGF8cmVjYXB0Y2hhfGhjYXB0Y2hhfHR1cm5zdGlsZSkkIiwgImlucFR5cGUiOiAic2VsZWN0IiwgIm5hbWUiOiAiQW50aWJvdCBjaGFsbGVuZ2UiLCAidmFsdWVzIjogWyJjYXB0Y2hhIiwgImNvb2tpZSIsICJoY2FwdGNoYSIsICJqYXZhc2NyaXB0IiwgIm5vIiwgInJlY2FwdGNoYSIsICJ0dXJuc3RpbGUiXSwgImNvbHVtbnMiOiB7InBjIjogNCwgInRhYmxldCI6IDYsICJtb2JpbGUiOiAxMn0sICJkaXNhYmxlZCI6IGZhbHNlLCAidmFsdWUiOiAibm8iLCAibWV0aG9kIjogImRlZmF1bHQiLCAicHJldl92YWx1ZSI6ICJubyIsICJwb3BvdmVycyI6IFt7Imljb25OYW1lIjogImRpc2siLCAidGV4dCI6ICJpbnBfcG9wb3Zlcl9tdWx0aXNpdGUifSwgeyJpY29uTmFtZSI6ICJpbmZvIiwgInRleHQiOiAiQWN0aXZhdGUgYW50aWJvdCBmZWF0dXJlLiJ9XX0sICJBTlRJQk9UX1VSSSI6IHsiY29udGV4dCI6ICJtdWx0aXNpdGUiLCAiZGVmYXVsdCI6ICIvY2hhbGxlbmdlIiwgImhlbHAiOiAiVW51c2VkIFVSSSB0aGF0IGNsaWVudHMgd2lsbCBiZSByZWRpcmVjdGVkIHRvIHRvIHNvbHZlIHRoZSBjaGFsbGVuZ2UuIiwgImlkIjogImFudGlib3QtdXJpIiwgImxhYmVsIjogIkFudGlib3QgVVJMIiwgInJlZ2V4IjogIl5cXC9bXFx3XFxdLn46XFwvPyNcXFtAISRcXCYnXFwoXFwpKissOz1cXC1dKiQiLCAidHlwZSI6ICJ0ZXh0IiwgImNvbnRhaW5lckNsYXNzIjogInotOSIsICJwYXR0ZXJuIjogIl5cXC9bXFx3XFxdLn46XFwvPyNcXFtAISRcXCYnXFwoXFwpKissOz1cXC1dKiQiLCAiaW5wVHlwZSI6ICJpbnB1dCIsICJuYW1lIjogIkFudGlib3QgVVJMIiwgImNvbHVtbnMiOiB7InBjIjogNCwgInRhYmxldCI6IDYsICJtb2JpbGUiOiAxMn0sICJkaXNhYmxlZCI6IGZhbHNlLCAidmFsdWUiOiAiL2NoYWxsZW5nZSIsICJtZXRob2QiOiAiZGVmYXVsdCIsICJwcmV2X3ZhbHVlIjogIi9jaGFsbGVuZ2UiLCAicG9wb3ZlcnMiOiBbeyJpY29uTmFtZSI6ICJkaXNrIiwgInRleHQiOiAiaW5wX3BvcG92ZXJfbXVsdGlzaXRlIn0sIHsiaWNvbk5hbWUiOiAiaW5mbyIsICJ0ZXh0IjogIlVudXNlZCBVUkkgdGhhdCBjbGllbnRzIHdpbGwgYmUgcmVkaXJlY3RlZCB0byB0byBzb2x2ZSB0aGUgY2hhbGxlbmdlLiJ9XX0sICJBTlRJQk9UX1RJTUVfUkVTT0xWRSI6IHsiY29udGV4dCI6ICJtdWx0aXNpdGUiLCAiZGVmYXVsdCI6ICI2MCIsICJoZWxwIjogIk1heGltdW0gdGltZSAoaW4gc2Vjb25kcykgY2xpZW50cyBoYXZlIHRvIHJlc29sdmUgdGhlIGNoYWxsZW5nZS4gT25jZSB0aGlzIHRpbWUgaGFzIHBhc3NlZCwgYSBuZXcgY2hhbGxlbmdlIHdpbGwgYmUgZ2VuZXJhdGVkLiIsICJpZCI6ICJhbnRpYm90LXRpbWUtcmVzb2x2ZSIsICJsYWJlbCI6ICJUaW1lIHRvIHJlc29sdmUiLCAicmVnZXgiOiAiXlswLTldKyQiLCAidHlwZSI6ICJ0ZXh0IiwgImNvbnRhaW5lckNsYXNzIjogInotOCIsICJwYXR0ZXJuIjogIl5bMC05XSskIiwgImlucFR5cGUiOiAiaW5wdXQiLCAibmFtZSI6ICJUaW1lIHRvIHJlc29sdmUiLCAiY29sdW1ucyI6IHsicGMiOiA0LCAidGFibGV0IjogNiwgIm1vYmlsZSI6IDEyfSwgImRpc2FibGVkIjogZmFsc2UsICJ2YWx1ZSI6ICI2MCIsICJtZXRob2QiOiAiZGVmYXVsdCIsICJwcmV2X3ZhbHVlIjogIjYwIiwgInBvcG92ZXJzIjogW3siaWNvbk5hbWUiOiAiZGlzayIsICJ0ZXh0IjogImlucF9wb3BvdmVyX211bHRpc2l0ZSJ9LCB7Imljb25OYW1lIjogImluZm8iLCAidGV4dCI6ICJNYXhpbXVtIHRpbWUgKGluIHNlY29uZHMpIGNsaWVudHMgaGF2ZSB0byByZXNvbHZlIHRoZSBjaGFsbGVuZ2UuIE9uY2UgdGhpcyB0aW1lIGhhcyBwYXNzZWQsIGEgbmV3IGNoYWxsZW5nZSB3aWxsIGJlIGdlbmVyYXRlZC4ifV19LCAiQU5USUJPVF9USU1FX1ZBTElEIjogeyJjb250ZXh0IjogIm11bHRpc2l0ZSIsICJkZWZhdWx0IjogIjg2NDAwIiwgImhlbHAiOiAiTWF4aW11bSB2YWxpZGl0eSB0aW1lIG9mIHNvbHZlZCBjaGFsbGVuZ2VzLiBPbmNlIHRoaXMgdGltZSBoYXMgcGFzc2VkLCBjbGllbnRzIHdpbGwgbmVlZCB0byByZXNvbHZlIGEgbmV3IG9uZS4iLCAiaWQiOiAiYW50aWJvdC10aW1lLXZhbGlkIiwgImxhYmVsIjogIlRpbWUgdmFsaWQiLCAicmVnZXgiOiAiXlswLTldKyQiLCAidHlwZSI6ICJ0ZXh0IiwgImNvbnRhaW5lckNsYXNzIjogInotNyIsICJwYXR0ZXJuIjogIl5bMC05XSskIiwgImlucFR5cGUiOiAiaW5wdXQiLCAibmFtZSI6ICJUaW1lIHZhbGlkIiwgImNvbHVtbnMiOiB7InBjIjogNCwgInRhYmxldCI6IDYsICJtb2JpbGUiOiAxMn0sICJkaXNhYmxlZCI6IGZhbHNlLCAidmFsdWUiOiAiODY0MDAiLCAibWV0aG9kIjogImRlZmF1bHQiLCAicHJldl92YWx1ZSI6ICI4NjQwMCIsICJwb3BvdmVycyI6IFt7Imljb25OYW1lIjogImRpc2siLCAidGV4dCI6ICJpbnBfcG9wb3Zlcl9tdWx0aXNpdGUifSwgeyJpY29uTmFtZSI6ICJpbmZvIiwgInRleHQiOiAiTWF4aW11bSB2YWxpZGl0eSB0aW1lIG9mIHNvbHZlZCBjaGFsbGVuZ2VzLiBPbmNlIHRoaXMgdGltZSBoYXMgcGFzc2VkLCBjbGllbnRzIHdpbGwgbmVlZCB0byByZXNvbHZlIGEgbmV3IG9uZS4ifV19LCAiQU5USUJPVF9SRUNBUFRDSEFfU0NPUkUiOiB7ImNvbnRleHQiOiAibXVsdGlzaXRlIiwgImRlZmF1bHQiOiAiMC43IiwgImhlbHAiOiAiTWluaW11bSBzY29yZSByZXF1aXJlZCBmb3IgcmVDQVBUQ0hBIGNoYWxsZW5nZS4iLCAiaWQiOiAiYW50aWJvdC1yZWNhcHRjaGEtc2NvcmUiLCAibGFiZWwiOiAicmVDQVBUQ0hBIHNjb3JlIiwgInJlZ2V4IjogIl4oMFxcLlsxLTldfDFcXC4wKSQiLCAidHlwZSI6ICJ0ZXh0IiwgImNvbnRhaW5lckNsYXNzIjogInotNiIsICJwYXR0ZXJuIjogIl4oMFxcLlsxLTldfDFcXC4wKSQiLCAiaW5wVHlwZSI6ICJpbnB1dCIsICJuYW1lIjogInJlQ0FQVENIQSBzY29yZSIsICJjb2x1bW5zIjogeyJwYyI6IDQsICJ0YWJsZXQiOiA2LCAibW9iaWxlIjogMTJ9LCAiZGlzYWJsZWQiOiBmYWxzZSwgInZhbHVlIjogIjAuNyIsICJtZXRob2QiOiAiZGVmYXVsdCIsICJwcmV2X3ZhbHVlIjogIjAuNyIsICJwb3BvdmVycyI6IFt7Imljb25OYW1lIjogImRpc2siLCAidGV4dCI6ICJpbnBfcG9wb3Zlcl9tdWx0aXNpdGUifSwgeyJpY29uTmFtZSI6ICJpbmZvIiwgInRleHQiOiAiTWluaW11bSBzY29yZSByZXF1aXJlZCBmb3IgcmVDQVBUQ0hBIGNoYWxsZW5nZS4ifV19LCAiQU5USUJPVF9SRUNBUFRDSEFfU0lURUtFWSI6IHsiY29udGV4dCI6ICJtdWx0aXNpdGUiLCAiZGVmYXVsdCI6ICIiLCAiaGVscCI6ICJTaXRla2V5IGZvciByZUNBUFRDSEEgY2hhbGxlbmdlLiIsICJpZCI6ICJhbnRpYm90LXJlY2FwdGNoYS1zaXRla2V5IiwgImxhYmVsIjogInJlQ0FQVENIQSBzaXRla2V5IiwgInJlZ2V4IjogIl5bXFx3XFwtXSokIiwgInR5cGUiOiAidGV4dCIsICJjb250YWluZXJDbGFzcyI6ICJ6LTUiLCAicGF0dGVybiI6ICJeW1xcd1xcLV0qJCIsICJpbnBUeXBlIjogImlucHV0IiwgIm5hbWUiOiAicmVDQVBUQ0hBIHNpdGVrZXkiLCAiY29sdW1ucyI6IHsicGMiOiA0LCAidGFibGV0IjogNiwgIm1vYmlsZSI6IDEyfSwgImRpc2FibGVkIjogZmFsc2UsICJ2YWx1ZSI6ICIiLCAibWV0aG9kIjogImRlZmF1bHQiLCAicHJldl92YWx1ZSI6ICIiLCAicG9wb3ZlcnMiOiBbeyJpY29uTmFtZSI6ICJkaXNrIiwgInRleHQiOiAiaW5wX3BvcG92ZXJfbXVsdGlzaXRlIn0sIHsiaWNvbk5hbWUiOiAiaW5mbyIsICJ0ZXh0IjogIlNpdGVrZXkgZm9yIHJlQ0FQVENIQSBjaGFsbGVuZ2UuIn1dfSwgIkFOVElCT1RfUkVDQVBUQ0hBX1NFQ1JFVCI6IHsiY29udGV4dCI6ICJtdWx0aXNpdGUiLCAiZGVmYXVsdCI6ICIiLCAiaGVscCI6ICJTZWNyZXQgZm9yIHJlQ0FQVENIQSBjaGFsbGVuZ2UuIiwgImlkIjogImFudGlib3QtcmVjYXB0Y2hhLXNlY3JldCIsICJsYWJlbCI6ICJyZUNBUFRDSEEgc2VjcmV0IiwgInJlZ2V4IjogIl5bXFx3XFwtXSokIiwgInR5cGUiOiAicGFzc3dvcmQiLCAiY29udGFpbmVyQ2xhc3MiOiAiei00IiwgInBhdHRlcm4iOiAiXltcXHdcXC1dKiQiLCAiaW5wVHlwZSI6ICJpbnB1dCIsICJuYW1lIjogInJlQ0FQVENIQSBzZWNyZXQiLCAiY29sdW1ucyI6IHsicGMiOiA0LCAidGFibGV0IjogNiwgIm1vYmlsZSI6IDEyfSwgImRpc2FibGVkIjogZmFsc2UsICJ2YWx1ZSI6ICIiLCAibWV0aG9kIjogImRlZmF1bHQiLCAicHJldl92YWx1ZSI6ICIiLCAicG9wb3ZlcnMiOiBbeyJpY29uTmFtZSI6ICJkaXNrIiwgInRleHQiOiAiaW5wX3BvcG92ZXJfbXVsdGlzaXRlIn0sIHsiaWNvbk5hbWUiOiAiaW5mbyIsICJ0ZXh0IjogIlNlY3JldCBmb3IgcmVDQVBUQ0hBIGNoYWxsZW5nZS4ifV19LCAiQU5USUJPVF9IQ0FQVENIQV9TSVRFS0VZIjogeyJjb250ZXh0IjogIm11bHRpc2l0ZSIsICJkZWZhdWx0IjogIiIsICJoZWxwIjogIlNpdGVrZXkgZm9yIGhDYXB0Y2hhIGNoYWxsZW5nZS4iLCAiaWQiOiAiYW50aWJvdC1oY2FwdGNoYS1zaXRla2V5IiwgImxhYmVsIjogImhDYXB0Y2hhIHNpdGVrZXkiLCAicmVnZXgiOiAiXlthLXpBLVowLTlcXC1dKiQiLCAidHlwZSI6ICJ0ZXh0IiwgImNvbnRhaW5lckNsYXNzIjogInotMyIsICJwYXR0ZXJuIjogIl5bYS16QS1aMC05XFwtXSokIiwgImlucFR5cGUiOiAiaW5wdXQiLCAibmFtZSI6ICJoQ2FwdGNoYSBzaXRla2V5IiwgImNvbHVtbnMiOiB7InBjIjogNCwgInRhYmxldCI6IDYsICJtb2JpbGUiOiAxMn0sICJkaXNhYmxlZCI6IGZhbHNlLCAidmFsdWUiOiAiIiwgIm1ldGhvZCI6ICJkZWZhdWx0IiwgInByZXZfdmFsdWUiOiAiIiwgInBvcG92ZXJzIjogW3siaWNvbk5hbWUiOiAiZGlzayIsICJ0ZXh0IjogImlucF9wb3BvdmVyX211bHRpc2l0ZSJ9LCB7Imljb25OYW1lIjogImluZm8iLCAidGV4dCI6ICJTaXRla2V5IGZvciBoQ2FwdGNoYSBjaGFsbGVuZ2UuIn1dfSwgIkFOVElCT1RfSENBUFRDSEFfU0VDUkVUIjogeyJjb250ZXh0IjogIm11bHRpc2l0ZSIsICJkZWZhdWx0IjogIiIsICJoZWxwIjogIlNlY3JldCBmb3IgaENhcHRjaGEgY2hhbGxlbmdlLiIsICJpZCI6ICJhbnRpYm90LWhjYXB0Y2hhLXNlY3JldCIsICJsYWJlbCI6ICJoQ2FwdGNoYSBzZWNyZXQiLCAicmVnZXgiOiAiXlxcdyokIiwgInR5cGUiOiAicGFzc3dvcmQiLCAiY29udGFpbmVyQ2xhc3MiOiAiei0yIiwgInBhdHRlcm4iOiAiXlxcdyokIiwgImlucFR5cGUiOiAiaW5wdXQiLCAibmFtZSI6ICJoQ2FwdGNoYSBzZWNyZXQiLCAiY29sdW1ucyI6IHsicGMiOiA0LCAidGFibGV0IjogNiwgIm1vYmlsZSI6IDEyfSwgImRpc2FibGVkIjogZmFsc2UsICJ2YWx1ZSI6ICIiLCAibWV0aG9kIjogImRlZmF1bHQiLCAicHJldl92YWx1ZSI6ICIiLCAicG9wb3ZlcnMiOiBbeyJpY29uTmFtZSI6ICJkaXNrIiwgInRleHQiOiAiaW5wX3BvcG92ZXJfbXVsdGlzaXRlIn0sIHsiaWNvbk5hbWUiOiAiaW5mbyIsICJ0ZXh0IjogIlNlY3JldCBmb3IgaENhcHRjaGEgY2hhbGxlbmdlLiJ9XX0sICJBTlRJQk9UX1RVUk5TVElMRV9TSVRFS0VZIjogeyJjb250ZXh0IjogIm11bHRpc2l0ZSIsICJkZWZhdWx0IjogIiIsICJoZWxwIjogIlNpdGVrZXkgZm9yIFR1cm5zdGlsZSBjaGFsbGVuZ2UuIiwgImlkIjogImFudGlib3QtdHVybnN0aWxlLXNpdGVrZXkiLCAibGFiZWwiOiAiVHVybnN0aWxlIHNpdGVrZXkiLCAicmVnZXgiOiAiXigweFtcXHdcXC1dKyk/JCIsICJ0eXBlIjogInRleHQiLCAiY29udGFpbmVyQ2xhc3MiOiAiei0xIiwgInBhdHRlcm4iOiAiXigweFtcXHdcXC1dKyk/JCIsICJpbnBUeXBlIjogImlucHV0IiwgIm5hbWUiOiAiVHVybnN0aWxlIHNpdGVrZXkiLCAiY29sdW1ucyI6IHsicGMiOiA0LCAidGFibGV0IjogNiwgIm1vYmlsZSI6IDEyfSwgImRpc2FibGVkIjogZmFsc2UsICJ2YWx1ZSI6ICIiLCAibWV0aG9kIjogImRlZmF1bHQiLCAicHJldl92YWx1ZSI6ICIiLCAicG9wb3ZlcnMiOiBbeyJpY29uTmFtZSI6ICJkaXNrIiwgInRleHQiOiAiaW5wX3BvcG92ZXJfbXVsdGlzaXRlIn0sIHsiaWNvbk5hbWUiOiAiaW5mbyIsICJ0ZXh0IjogIlNpdGVrZXkgZm9yIFR1cm5zdGlsZSBjaGFsbGVuZ2UuIn1dfSwgIkFOVElCT1RfVFVSTlNUSUxFX1NFQ1JFVCI6IHsiY29udGV4dCI6ICJtdWx0aXNpdGUiLCAiZGVmYXVsdCI6ICIiLCAiaGVscCI6ICJTZWNyZXQgZm9yIFR1cm5zdGlsZSBjaGFsbGVuZ2UuIiwgImlkIjogImFudGlib3QtdHVybnN0aWxlLXNlY3JldCIsICJsYWJlbCI6ICJUdXJuc3RpbGUgc2VjcmV0IiwgInJlZ2V4IjogIl4oMHhbXFx3XFwtXSspPyQiLCAidHlwZSI6ICJwYXNzd29yZCIsICJjb250YWluZXJDbGFzcyI6ICJ6LTAiLCAicGF0dGVybiI6ICJeKDB4W1xcd1xcLV0rKT8kIiwgImlucFR5cGUiOiAiaW5wdXQiLCAibmFtZSI6ICJUdXJuc3RpbGUgc2VjcmV0IiwgImNvbHVtbnMiOiB7InBjIjogNCwgInRhYmxldCI6IDYsICJtb2JpbGUiOiAxMn0sICJkaXNhYmxlZCI6IGZhbHNlLCAidmFsdWUiOiAiIiwgIm1ldGhvZCI6ICJkZWZhdWx0IiwgInByZXZfdmFsdWUiOiAiIiwgInBvcG92ZXJzIjogW3siaWNvbk5hbWUiOiAiZGlzayIsICJ0ZXh0IjogImlucF9wb3BvdmVyX211bHRpc2l0ZSJ9LCB7Imljb25OYW1lIjogImluZm8iLCAidGV4dCI6ICJTZWNyZXQgZm9yIFR1cm5zdGlsZSBjaGFsbGVuZ2UuIn1dfX0sICJjaGVja3N1bSI6IG51bGx9LCB7ImlkIjogImF1dGhiYXNpYyIsICJzdHJlYW0iOiAibm8iLCAibmFtZSI6ICJBdXRoIGJhc2ljIiwgImRlc2NyaXB0aW9uIjogIkVuZm9yY2UgbG9naW4gYmVmb3JlIGFjY2Vzc2luZyBhIHJlc291cmNlIG9yIHRoZSB3aG9sZSBzaXRlIHVzaW5nIEhUVFAgYmFzaWMgYXV0aCBtZXRob2QuIiwgInZlcnNpb24iOiAiMS4wIiwgInR5cGUiOiAiY29yZSIsICJtZXRob2QiOiAibWFudWFsIiwgInBhZ2UiOiBmYWxzZSwgInNldHRpbmdzIjogeyJVU0VfQVVUSF9CQVNJQyI6IHsiY29udGV4dCI6ICJtdWx0aXNpdGUiLCAiZGVmYXVsdCI6ICJubyIsICJoZWxwIjogIlVzZSBIVFRQIGJhc2ljIGF1dGgiLCAiaWQiOiAidXNlLWF1dGgtYmFzaWMiLCAibGFiZWwiOiAiVXNlIEhUVFAgYmFzaWMgYXV0aCIsICJyZWdleCI6ICJeKHllc3xubykkIiwgInR5cGUiOiAiY2hlY2siLCAiY29udGFpbmVyQ2xhc3MiOiAiei00IiwgInBhdHRlcm4iOiAiXih5ZXN8bm8pJCIsICJpbnBUeXBlIjogImNoZWNrYm94IiwgIm5hbWUiOiAiVXNlIEhUVFAgYmFzaWMgYXV0aCIsICJjb2x1bW5zIjogeyJwYyI6IDQsICJ0YWJsZXQiOiA2LCAibW9iaWxlIjogMTJ9LCAiZGlzYWJsZWQiOiBmYWxzZSwgInZhbHVlIjogIm5vIiwgIm1ldGhvZCI6ICJkZWZhdWx0IiwgInByZXZfdmFsdWUiOiAibm8iLCAicG9wb3ZlcnMiOiBbeyJpY29uTmFtZSI6ICJkaXNrIiwgInRleHQiOiAiaW5wX3BvcG92ZXJfbXVsdGlzaXRlIn0sIHsiaWNvbk5hbWUiOiAiaW5mbyIsICJ0ZXh0IjogIlVzZSBIVFRQIGJhc2ljIGF1dGgifV19LCAiQVVUSF9CQVNJQ19MT0NBVElPTiI6IHsiY29udGV4dCI6ICJtdWx0aXNpdGUiLCAiZGVmYXVsdCI6ICJzaXRld2lkZSIsICJoZWxwIjogIlVSTCBvZiB0aGUgcHJvdGVjdGVkIHJlc291cmNlIG9yIHNpdGV3aWRlIHZhbHVlLiIsICJpZCI6ICJhdXRoLWJhc2ljLWxvY2F0aW9uIiwgImxhYmVsIjogIkF1dGggYmFzaWMgTG9jYXRpb24iLCAicmVnZXgiOiAiXihzaXRld2lkZXwvW2EtekEtWjAtOS5cXC9cXC1dKikkIiwgInR5cGUiOiAidGV4dCIsICJjb250YWluZXJDbGFzcyI6ICJ6LTMiLCAicGF0dGVybiI6ICJeKHNpdGV3aWRlfC9bYS16QS1aMC05LlxcL1xcLV0qKSQiLCAiaW5wVHlwZSI6ICJpbnB1dCIsICJuYW1lIjogIkF1dGggYmFzaWMgTG9jYXRpb24iLCAiY29sdW1ucyI6IHsicGMiOiA0LCAidGFibGV0IjogNiwgIm1vYmlsZSI6IDEyfSwgImRpc2FibGVkIjogZmFsc2UsICJ2YWx1ZSI6ICJzaXRld2lkZSIsICJtZXRob2QiOiAiZGVmYXVsdCIsICJwcmV2X3ZhbHVlIjogInNpdGV3aWRlIiwgInBvcG92ZXJzIjogW3siaWNvbk5hbWUiOiAiZGlzayIsICJ0ZXh0IjogImlucF9wb3BvdmVyX211bHRpc2l0ZSJ9LCB7Imljb25OYW1lIjogImluZm8iLCAidGV4dCI6ICJVUkwgb2YgdGhlIHByb3RlY3RlZCByZXNvdXJjZSBvciBzaXRld2lkZSB2YWx1ZS4ifV19LCAiQVVUSF9CQVNJQ19VU0VSIjogeyJjb250ZXh0IjogIm11bHRpc2l0ZSIsICJkZWZhdWx0IjogImNoYW5nZW1lIiwgImhlbHAiOiAiVXNlcm5hbWUiLCAiaWQiOiAiYXV0aC1iYXNpYy11c2VyIiwgImxhYmVsIjogIkF1dGggYmFzaWMgVXNlcm5hbWUiLCAicmVnZXgiOiAiXltcXHdcXC1dKyIsICJ0eXBlIjogInRleHQiLCAiY29udGFpbmVyQ2xhc3MiOiAiei0yIiwgInBhdHRlcm4iOiAiXltcXHdcXC1dKyIsICJpbnBUeXBlIjogImlucHV0IiwgIm5hbWUiOiAiQXV0aCBiYXNpYyBVc2VybmFtZSIsICJjb2x1bW5zIjogeyJwYyI6IDQsICJ0YWJsZXQiOiA2LCAibW9iaWxlIjogMTJ9LCAiZGlzYWJsZWQiOiBmYWxzZSwgInZhbHVlIjogImNoYW5nZW1lIiwgIm1ldGhvZCI6ICJkZWZhdWx0IiwgInByZXZfdmFsdWUiOiAiY2hhbmdlbWUiLCAicG9wb3ZlcnMiOiBbeyJpY29uTmFtZSI6ICJkaXNrIiwgInRleHQiOiAiaW5wX3BvcG92ZXJfbXVsdGlzaXRlIn0sIHsiaWNvbk5hbWUiOiAiaW5mbyIsICJ0ZXh0IjogIlVzZXJuYW1lIn1dfSwgIkFVVEhfQkFTSUNfUEFTU1dPUkQiOiB7ImNvbnRleHQiOiAibXVsdGlzaXRlIiwgImRlZmF1bHQiOiAiY2hhbmdlbWUiLCAiaGVscCI6ICJQYXNzd29yZCIsICJpZCI6ICJhdXRoLWJhc2ljLXBhc3N3b3JkIiwgImxhYmVsIjogIlBhc3N3b3JkIiwgInJlZ2V4IjogIl4uKyIsICJ0eXBlIjogInBhc3N3b3JkIiwgImNvbnRhaW5lckNsYXNzIjogInotMSIsICJwYXR0ZXJuIjogIl4uKyIsICJpbnBUeXBlIjogImlucHV0IiwgIm5hbWUiOiAiUGFzc3dvcmQiLCAiY29sdW1ucyI6IHsicGMiOiA0LCAidGFibGV0IjogNiwgIm1vYmlsZSI6IDEyfSwgImRpc2FibGVkIjogZmFsc2UsICJ2YWx1ZSI6ICJjaGFuZ2VtZSIsICJtZXRob2QiOiAiZGVmYXVsdCIsICJwcmV2X3ZhbHVlIjogImNoYW5nZW1lIiwgInBvcG92ZXJzIjogW3siaWNvbk5hbWUiOiAiZGlzayIsICJ0ZXh0IjogImlucF9wb3BvdmVyX211bHRpc2l0ZSJ9LCB7Imljb25OYW1lIjogImluZm8iLCAidGV4dCI6ICJQYXNzd29yZCJ9XX0sICJBVVRIX0JBU0lDX1RFWFQiOiB7ImNvbnRleHQiOiAibXVsdGlzaXRlIiwgImRlZmF1bHQiOiAiUmVzdHJpY3RlZCBhcmVhIiwgImhlbHAiOiAiVGV4dCB0byBkaXNwbGF5IiwgImlkIjogImF1dGgtYmFzaWMtdGV4dCIsICJsYWJlbCI6ICJUZXh0IiwgInJlZ2V4IjogIl4uKyIsICJ0eXBlIjogInRleHQiLCAiY29udGFpbmVyQ2xhc3MiOiAiei0wIiwgInBhdHRlcm4iOiAiXi4rIiwgImlucFR5cGUiOiAiaW5wdXQiLCAibmFtZSI6ICJUZXh0IiwgImNvbHVtbnMiOiB7InBjIjogNCwgInRhYmxldCI6IDYsICJtb2JpbGUiOiAxMn0sICJkaXNhYmxlZCI6IGZhbHNlLCAidmFsdWUiOiAiUmVzdHJpY3RlZCBhcmVhIiwgIm1ldGhvZCI6ICJkZWZhdWx0IiwgInByZXZfdmFsdWUiOiAiUmVzdHJpY3RlZCBhcmVhIiwgInBvcG92ZXJzIjogW3siaWNvbk5hbWUiOiAiZGlzayIsICJ0ZXh0IjogImlucF9wb3BvdmVyX211bHRpc2l0ZSJ9LCB7Imljb25OYW1lIjogImluZm8iLCAidGV4dCI6ICJUZXh0IHRvIGRpc3BsYXkifV19fSwgImNoZWNrc3VtIjogbnVsbH0sIHsiaWQiOiAiYmFja3VwIiwgInN0cmVhbSI6ICJ5ZXMiLCAibmFtZSI6ICJCYWNrdXAiLCAiZGVzY3JpcHRpb24iOiAiQmFja3VwIHlvdXIgZGF0YSB0byBhIGN1c3RvbSBsb2NhdGlvbi4gRW5zdXJlIHRoZSBzYWZldHkgYW5kIGF2YWlsYWJpbGl0eSBvZiB5b3VyIGltcG9ydGFudCBmaWxlcyBieSBjcmVhdGluZyByZWd1bGFyIGJhY2t1cHMuIiwgInZlcnNpb24iOiAiMS4wIiwgInR5cGUiOiAiY29yZSIsICJtZXRob2QiOiAibWFudWFsIiwgInBhZ2UiOiB0cnVlLCAic2V0dGluZ3MiOiB7IlVTRV9CQUNLVVAiOiB7ImNvbnRleHQiOiAiZ2xvYmFsIiwgImRlZmF1bHQiOiAieWVzIiwgImhlbHAiOiAiRW5hYmxlIG9yIGRpc2FibGUgdGhlIGJhY2t1cCBmZWF0dXJlIiwgImlkIjogInVzZS1iYWNrdXAiLCAibGFiZWwiOiAiQWN0aXZhdGUgYXV0b21hdGljIGJhY2t1cCIsICJyZWdleCI6ICJeKHllc3xubykkIiwgInR5cGUiOiAiY2hlY2siLCAiY29udGFpbmVyQ2xhc3MiOiAiei0zIiwgInBhdHRlcm4iOiAiXih5ZXN8bm8pJCIsICJpbnBUeXBlIjogImNoZWNrYm94IiwgIm5hbWUiOiAiQWN0aXZhdGUgYXV0b21hdGljIGJhY2t1cCIsICJjb2x1bW5zIjogeyJwYyI6IDQsICJ0YWJsZXQiOiA2LCAibW9iaWxlIjogMTJ9LCAiZGlzYWJsZWQiOiBmYWxzZSwgInZhbHVlIjogInllcyIsICJtZXRob2QiOiAiZGVmYXVsdCIsICJwcmV2X3ZhbHVlIjogInllcyIsICJwb3BvdmVycyI6IFt7Imljb25OYW1lIjogImdsb2JlIiwgInRleHQiOiAiaW5wX3BvcG92ZXJfZ2xvYmFsIn0sIHsiaWNvbk5hbWUiOiAiaW5mbyIsICJ0ZXh0IjogIkVuYWJsZSBvciBkaXNhYmxlIHRoZSBiYWNrdXAgZmVhdHVyZSJ9XX0sICJCQUNLVVBfU0NIRURVTEUiOiB7ImNvbnRleHQiOiAiZ2xvYmFsIiwgImRlZmF1bHQiOiAiZGFpbHkiLCAiaGVscCI6ICJUaGUgZnJlcXVlbmN5IG9mIHRoZSBiYWNrdXAgKGRhaWx5LCB3ZWVrbHkgb3IgbW9udGhseSkiLCAiaWQiOiAiYmFja3VwLXNjaGVkdWxlIiwgImxhYmVsIjogIkJhY2t1cCBzY2hlZHVsZSIsICJyZWdleCI6ICJeKGRhaWx5fHdlZWtseXxtb250aGx5KSQiLCAidHlwZSI6ICJzZWxlY3QiLCAiY29udGFpbmVyQ2xhc3MiOiAiei0yIiwgInBhdHRlcm4iOiAiXihkYWlseXx3ZWVrbHl8bW9udGhseSkkIiwgImlucFR5cGUiOiAic2VsZWN0IiwgIm5hbWUiOiAiQmFja3VwIHNjaGVkdWxlIiwgInZhbHVlcyI6IFsiZGFpbHkiLCAibW9udGhseSIsICJ3ZWVrbHkiXSwgImNvbHVtbnMiOiB7InBjIjogNCwgInRhYmxldCI6IDYsICJtb2JpbGUiOiAxMn0sICJkaXNhYmxlZCI6IGZhbHNlLCAidmFsdWUiOiAiZGFpbHkiLCAibWV0aG9kIjogImRlZmF1bHQiLCAicHJldl92YWx1ZSI6ICJkYWlseSIsICJwb3BvdmVycyI6IFt7Imljb25OYW1lIjogImdsb2JlIiwgInRleHQiOiAiaW5wX3BvcG92ZXJfZ2xvYmFsIn0sIHsiaWNvbk5hbWUiOiAiaW5mbyIsICJ0ZXh0IjogIlRoZSBmcmVxdWVuY3kgb2YgdGhlIGJhY2t1cCAoZGFpbHksIHdlZWtseSBvciBtb250aGx5KSJ9XX0sICJCQUNLVVBfUk9UQVRJT04iOiB7ImNvbnRleHQiOiAiZ2xvYmFsIiwgImRlZmF1bHQiOiAiNyIsICJoZWxwIjogIlRoZSBudW1iZXIgb2YgYmFja3VwcyB0byBrZWVwIiwgImlkIjogImJhY2t1cC1yb3RhdGlvbiIsICJsYWJlbCI6ICJCYWNrdXAgcm90YXRpb24iLCAicmVnZXgiOiAiXlsxLTldWzAtOV0qJCIsICJ0eXBlIjogInRleHQiLCAiY29udGFpbmVyQ2xhc3MiOiAiei0xIiwgInBhdHRlcm4iOiAiXlsxLTldWzAtOV0qJCIsICJpbnBUeXBlIjogImlucHV0IiwgIm5hbWUiOiAiQmFja3VwIHJvdGF0aW9uIiwgImNvbHVtbnMiOiB7InBjIjogNCwgInRhYmxldCI6IDYsICJtb2JpbGUiOiAxMn0sICJkaXNhYmxlZCI6IGZhbHNlLCAidmFsdWUiOiAiNyIsICJtZXRob2QiOiAiZGVmYXVsdCIsICJwcmV2X3ZhbHVlIjogIjciLCAicG9wb3ZlcnMiOiBbeyJpY29uTmFtZSI6ICJnbG9iZSIsICJ0ZXh0IjogImlucF9wb3BvdmVyX2dsb2JhbCJ9LCB7Imljb25OYW1lIjogImluZm8iLCAidGV4dCI6ICJUaGUgbnVtYmVyIG9mIGJhY2t1cHMgdG8ga2VlcCJ9XX0sICJCQUNLVVBfRElSRUNUT1JZIjogeyJjb250ZXh0IjogImdsb2JhbCIsICJkZWZhdWx0IjogIi92YXIvbGliL2J1bmtlcndlYi9iYWNrdXBzIiwgImhlbHAiOiAiVGhlIGRpcmVjdG9yeSB3aGVyZSB0aGUgYmFja3VwIHdpbGwgYmUgc3RvcmVkIiwgImlkIjogImJhY2t1cC1kaXJlY3RvcnkiLCAibGFiZWwiOiAiQmFja3VwIGRpcmVjdG9yeSIsICJyZWdleCI6ICJeLiokIiwgInR5cGUiOiAidGV4dCIsICJjb250YWluZXJDbGFzcyI6ICJ6LTAiLCAicGF0dGVybiI6ICJeLiokIiwgImlucFR5cGUiOiAiaW5wdXQiLCAibmFtZSI6ICJCYWNrdXAgZGlyZWN0b3J5IiwgImNvbHVtbnMiOiB7InBjIjogNCwgInRhYmxldCI6IDYsICJtb2JpbGUiOiAxMn0sICJkaXNhYmxlZCI6IGZhbHNlLCAidmFsdWUiOiAiL3Zhci9saWIvYnVua2Vyd2ViL2JhY2t1cHMiLCAibWV0aG9kIjogImRlZmF1bHQiLCAicHJldl92YWx1ZSI6ICIvdmFyL2xpYi9idW5rZXJ3ZWIvYmFja3VwcyIsICJwb3BvdmVycyI6IFt7Imljb25OYW1lIjogImdsb2JlIiwgInRleHQiOiAiaW5wX3BvcG92ZXJfZ2xvYmFsIn0sIHsiaWNvbk5hbWUiOiAiaW5mbyIsICJ0ZXh0IjogIlRoZSBkaXJlY3Rvcnkgd2hlcmUgdGhlIGJhY2t1cCB3aWxsIGJlIHN0b3JlZCJ9XX19LCAiY2hlY2tzdW0iOiBudWxsLCAiYndjbGkiOiB7Imxpc3QiOiAibGlzdC5weSIsICJyZXN0b3JlIjogInJlc3RvcmUucHkiLCAic2F2ZSI6ICJzYXZlLnB5In19LCB7ImlkIjogImJhZGJlaGF2aW9yIiwgInN0cmVhbSI6ICJ5ZXMiLCAibmFtZSI6ICJCYWQgYmVoYXZpb3IiLCAiZGVzY3JpcHRpb24iOiAiQmFuIElQIGdlbmVyYXRpbmcgdG9vIG11Y2ggJ2JhZCcgSFRUUCBzdGF0dXMgY29kZSBpbiBhIHBlcmlvZCBvZiB0aW1lLiIsICJ2ZXJzaW9uIjogIjEuMCIsICJ0eXBlIjogImNvcmUiLCAibWV0aG9kIjogIm1hbnVhbCIsICJwYWdlIjogdHJ1ZSwgInNldHRpbmdzIjogeyJVU0VfQkFEX0JFSEFWSU9SIjogeyJjb250ZXh0IjogIm11bHRpc2l0ZSIsICJkZWZhdWx0IjogInllcyIsICJoZWxwIjogIkFjdGl2YXRlIEJhZCBiZWhhdmlvciBmZWF0dXJlLiIsICJpZCI6ICJ1c2UtYmFkLWJlaGF2aW9yIiwgImxhYmVsIjogIkFjdGl2YXRlIGJhZCBiZWhhdmlvciIsICJyZWdleCI6ICJeKHllc3xubykkIiwgInR5cGUiOiAiY2hlY2siLCAiY29udGFpbmVyQ2xhc3MiOiAiei00IiwgInBhdHRlcm4iOiAiXih5ZXN8bm8pJCIsICJpbnBUeXBlIjogImNoZWNrYm94IiwgIm5hbWUiOiAiQWN0aXZhdGUgYmFkIGJlaGF2aW9yIiwgImNvbHVtbnMiOiB7InBjIjogNCwgInRhYmxldCI6IDYsICJtb2JpbGUiOiAxMn0sICJkaXNhYmxlZCI6IGZhbHNlLCAidmFsdWUiOiAieWVzIiwgIm1ldGhvZCI6ICJkZWZhdWx0IiwgInByZXZfdmFsdWUiOiAieWVzIiwgInBvcG92ZXJzIjogW3siaWNvbk5hbWUiOiAiZGlzayIsICJ0ZXh0IjogImlucF9wb3BvdmVyX211bHRpc2l0ZSJ9LCB7Imljb25OYW1lIjogImluZm8iLCAidGV4dCI6ICJBY3RpdmF0ZSBCYWQgYmVoYXZpb3IgZmVhdHVyZS4ifV19LCAiQkFEX0JFSEFWSU9SX1NUQVRVU19DT0RFUyI6IHsiY29udGV4dCI6ICJtdWx0aXNpdGUiLCAiZGVmYXVsdCI6ICI0MDAgNDAxIDQwMyA0MDQgNDA1IDQyOSA0NDQiLCAiaGVscCI6ICJMaXN0IG9mIEhUVFAgc3RhdHVzIGNvZGVzIGNvbnNpZGVyZWQgYXMgJ2JhZCcuIiwgImlkIjogImJhZC1iZWhhdmlvci1zdGF0dXMtY29kZSIsICJsYWJlbCI6ICJCYWQgc3RhdHVzIGNvZGVzIiwgInJlZ2V4IjogIl4oICooWzEtNV1cXGR7Mn0pKD8hLipcXDIpICopKyQiLCAidHlwZSI6ICJ0ZXh0IiwgImNvbnRhaW5lckNsYXNzIjogInotMyIsICJwYXR0ZXJuIjogIl4oICooWzEtNV1cXGR7Mn0pKD8hLipcXDIpICopKyQiLCAiaW5wVHlwZSI6ICJpbnB1dCIsICJuYW1lIjogIkJhZCBzdGF0dXMgY29kZXMiLCAiY29sdW1ucyI6IHsicGMiOiA0LCAidGFibGV0IjogNiwgIm1vYmlsZSI6IDEyfSwgImRpc2FibGVkIjogZmFsc2UsICJ2YWx1ZSI6ICI0MDAgNDAxIDQwMyA0MDQgNDA1IDQyOSA0NDQiLCAibWV0aG9kIjogImRlZmF1bHQiLCAicHJldl92YWx1ZSI6ICI0MDAgNDAxIDQwMyA0MDQgNDA1IDQyOSA0NDQiLCAicG9wb3ZlcnMiOiBbeyJpY29uTmFtZSI6ICJkaXNrIiwgInRleHQiOiAiaW5wX3BvcG92ZXJfbXVsdGlzaXRlIn0sIHsiaWNvbk5hbWUiOiAiaW5mbyIsICJ0ZXh0IjogIkxpc3Qgb2YgSFRUUCBzdGF0dXMgY29kZXMgY29uc2lkZXJlZCBhcyAnYmFkJy4ifV19LCAiQkFEX0JFSEFWSU9SX1RIUkVTSE9MRCI6IHsiY29udGV4dCI6ICJtdWx0aXNpdGUiLCAiZGVmYXVsdCI6ICIxMCIsICJoZWxwIjogIk1heGltdW0gbnVtYmVyIG9mICdiYWQnIEhUVFAgc3RhdHVzIGNvZGVzIHdpdGhpbiB0aGUgcGVyaW9kIG9mIHRpbWUgYmVmb3JlIElQIGlzIGJhbm5lZC4iLCAiaWQiOiAiYmFkLWJlaGF2aW9yLXRocmVzaG9sZCIsICJsYWJlbCI6ICJUaHJlc2hvbGQiLCAicmVnZXgiOiAiXlsxLTldWzAtOV0qIiwgInR5cGUiOiAidGV4dCIsICJjb250YWluZXJDbGFzcyI6ICJ6LTIiLCAicGF0dGVybiI6ICJeWzEtOV1bMC05XSoiLCAiaW5wVHlwZSI6ICJpbnB1dCIsICJuYW1lIjogIlRocmVzaG9sZCIsICJjb2x1bW5zIjogeyJwYyI6IDQsICJ0YWJsZXQiOiA2LCAibW9iaWxlIjogMTJ9LCAiZGlzYWJsZWQiOiBmYWxzZSwgInZhbHVlIjogIjEwIiwgIm1ldGhvZCI6ICJkZWZhdWx0IiwgInByZXZfdmFsdWUiOiAiMTAiLCAicG9wb3ZlcnMiOiBbeyJpY29uTmFtZSI6ICJkaXNrIiwgInRleHQiOiAiaW5wX3BvcG92ZXJfbXVsdGlzaXRlIn0sIHsiaWNvbk5hbWUiOiAiaW5mbyIsICJ0ZXh0IjogIk1heGltdW0gbnVtYmVyIG9mICdiYWQnIEhUVFAgc3RhdHVzIGNvZGVzIHdpdGhpbiB0aGUgcGVyaW9kIG9mIHRpbWUgYmVmb3JlIElQIGlzIGJhbm5lZC4ifV19LCAiQkFEX0JFSEFWSU9SX0NPVU5UX1RJTUUiOiB7ImNvbnRleHQiOiAibXVsdGlzaXRlIiwgImRlZmF1bHQiOiAiNjAiLCAiaGVscCI6ICJQZXJpb2Qgb2YgdGltZSAoaW4gc2Vjb25kcykgZHVyaW5nIHdoaWNoIHdlIGNvdW50ICdiYWQnIEhUVFAgc3RhdHVzIGNvZGVzLiIsICJpZCI6ICJiYWQtYmVoYXZpb3ItcGVyaW9kIiwgImxhYmVsIjogIlBlcmlvZCAoaW4gc2Vjb25kcykiLCAicmVnZXgiOiAiXlxcZCsiLCAidHlwZSI6ICJ0ZXh0IiwgImNvbnRhaW5lckNsYXNzIjogInotMSIsICJwYXR0ZXJuIjogIl5cXGQrIiwgImlucFR5cGUiOiAiaW5wdXQiLCAibmFtZSI6ICJQZXJpb2QgKGluIHNlY29uZHMpIiwgImNvbHVtbnMiOiB7InBjIjogNCwgInRhYmxldCI6IDYsICJtb2JpbGUiOiAxMn0sICJkaXNhYmxlZCI6IGZhbHNlLCAidmFsdWUiOiAiNjAiLCAibWV0aG9kIjogImRlZmF1bHQiLCAicHJldl92YWx1ZSI6ICI2MCIsICJwb3BvdmVycyI6IFt7Imljb25OYW1lIjogImRpc2siLCAidGV4dCI6ICJpbnBfcG9wb3Zlcl9tdWx0aXNpdGUifSwgeyJpY29uTmFtZSI6ICJpbmZvIiwgInRleHQiOiAiUGVyaW9kIG9mIHRpbWUgKGluIHNlY29uZHMpIGR1cmluZyB3aGljaCB3ZSBjb3VudCAnYmFkJyBIVFRQIHN0YXR1cyBjb2Rlcy4ifV19LCAiQkFEX0JFSEFWSU9SX0JBTl9USU1FIjogeyJjb250ZXh0IjogIm11bHRpc2l0ZSIsICJkZWZhdWx0IjogIjg2NDAwIiwgImhlbHAiOiAiVGhlIGR1cmF0aW9uIHRpbWUgKGluIHNlY29uZHMpIG9mIGEgYmFuIHdoZW4gdGhlIGNvcnJlc3BvbmRpbmcgSVAgaGFzIHJlYWNoZWQgdGhlIHRocmVzaG9sZC4iLCAiaWQiOiAiYmFkLWJlaGF2aW9yLWJhbi10aW1lIiwgImxhYmVsIjogIkJhbiBkdXJhdGlvbiAoaW4gc2Vjb25kcykiLCAicmVnZXgiOiAiXlxcZCsiLCAidHlwZSI6ICJ0ZXh0IiwgImNvbnRhaW5lckNsYXNzIjogInotMCIsICJwYXR0ZXJuIjogIl5cXGQrIiwgImlucFR5cGUiOiAiaW5wdXQiLCAibmFtZSI6ICJCYW4gZHVyYXRpb24gKGluIHNlY29uZHMpIiwgImNvbHVtbnMiOiB7InBjIjogNCwgInRhYmxldCI6IDYsICJtb2JpbGUiOiAxMn0sICJkaXNhYmxlZCI6IGZhbHNlLCAidmFsdWUiOiAiODY0MDAiLCAibWV0aG9kIjogImRlZmF1bHQiLCAicHJldl92YWx1ZSI6ICI4NjQwMCIsICJwb3BvdmVycyI6IFt7Imljb25OYW1lIjogImRpc2siLCAidGV4dCI6ICJpbnBfcG9wb3Zlcl9tdWx0aXNpdGUifSwgeyJpY29uTmFtZSI6ICJpbmZvIiwgInRleHQiOiAiVGhlIGR1cmF0aW9uIHRpbWUgKGluIHNlY29uZHMpIG9mIGEgYmFuIHdoZW4gdGhlIGNvcnJlc3BvbmRpbmcgSVAgaGFzIHJlYWNoZWQgdGhlIHRocmVzaG9sZC4ifV19fSwgImNoZWNrc3VtIjogbnVsbH0sIHsiaWQiOiAiYmxhY2tsaXN0IiwgInN0cmVhbSI6ICJwYXJ0aWFsIiwgIm5hbWUiOiAiQmxhY2tsaXN0IiwgImRlc2NyaXB0aW9uIjogIkRlbnkgYWNjZXNzIGJhc2VkIG9uIGludGVybmFsIGFuZCBleHRlcm5hbCBJUC9uZXR3b3JrL3JETlMvQVNOIGJsYWNrbGlzdHMuIiwgInZlcnNpb24iOiAiMS4wIiwgInR5cGUiOiAiY29yZSIsICJtZXRob2QiOiAibWFudWFsIiwgInBhZ2UiOiB0cnVlLCAic2V0dGluZ3MiOiB7IlVTRV9CTEFDS0xJU1QiOiB7ImNvbnRleHQiOiAibXVsdGlzaXRlIiwgImRlZmF1bHQiOiAieWVzIiwgImhlbHAiOiAiQWN0aXZhdGUgYmxhY2tsaXN0IGZlYXR1cmUuIiwgImlkIjogInVzZS1ibGFja2xpc3QiLCAibGFiZWwiOiAiQWN0aXZhdGUgYmxhY2tsaXN0aW5nIiwgInJlZ2V4IjogIl4oeWVzfG5vKSQiLCAidHlwZSI6ICJjaGVjayIsICJjb250YWluZXJDbGFzcyI6ICJ6LTIxIiwgInBhdHRlcm4iOiAiXih5ZXN8bm8pJCIsICJpbnBUeXBlIjogImNoZWNrYm94IiwgIm5hbWUiOiAiQWN0aXZhdGUgYmxhY2tsaXN0aW5nIiwgImNvbHVtbnMiOiB7InBjIjogNCwgInRhYmxldCI6IDYsICJtb2JpbGUiOiAxMn0sICJkaXNhYmxlZCI6IHRydWUsICJ2YWx1ZSI6ICJubyIsICJtZXRob2QiOiAic2NoZWR1bGVyIiwgInByZXZfdmFsdWUiOiAibm8iLCAicG9wb3ZlcnMiOiBbeyJpY29uTmFtZSI6ICJ0cmVzcGFzcyIsICJ0ZXh0IjogImlucF9wb3BvdmVyX21ldGhvZF9kaXNhYmxlZCJ9LCB7Imljb25OYW1lIjogImRpc2siLCAidGV4dCI6ICJpbnBfcG9wb3Zlcl9tdWx0aXNpdGUifSwgeyJpY29uTmFtZSI6ICJpbmZvIiwgInRleHQiOiAiQWN0aXZhdGUgYmxhY2tsaXN0IGZlYXR1cmUuIn1dfSwgIkJMQUNLTElTVF9JUCI6IHsiY29udGV4dCI6ICJtdWx0aXNpdGUiLCAiZGVmYXVsdCI6ICIiLCAiaGVscCI6ICJMaXN0IG9mIElQL25ldHdvcmssIHNlcGFyYXRlZCB3aXRoIHNwYWNlcywgdG8gYmxvY2suIiwgImlkIjogImJsYWNrbGlzdC1pcCIsICJsYWJlbCI6ICJCbGFja2xpc3QgSVAvbmV0d29yayIsICJyZWdleCI6ICJeKD8hICkoICooKChcXGIyNVswLTVdfFxcYjJbMC00XVxcZHxcXGJbMDFdP1xcZFxcZD8pKFxcLigyNVswLTVdfDJbMC00XVxcZHxbMDFdP1xcZFxcZD8pKXszfSkoXFwvKFsxLTJdWzAtOV0/fDNbMC0yXT98WzA0LTldKSk/fCgoWzAtOWEtZkEtRl17MSw0fTopezd9WzAtOWEtZkEtRl17MSw0fXwoWzAtOWEtZkEtRl17MSw0fTopezEsN306fChbMC05YS1mQS1GXXsxLDR9Oil7MSw2fTpbMC05YS1mQS1GXXsxLDR9fChbMC05YS1mQS1GXXsxLDR9Oil7MSw1fSg6WzAtOWEtZkEtRl17MSw0fSl7MSwyfXwoWzAtOWEtZkEtRl17MSw0fTopezEsNH0oOlswLTlhLWZBLUZdezEsNH0pezEsM318KFswLTlhLWZBLUZdezEsNH06KXsxLDN9KDpbMC05YS1mQS1GXXsxLDR9KXsxLDR9fChbMC05YS1mQS1GXXsxLDR9Oil7MSwyfSg6WzAtOWEtZkEtRl17MSw0fSl7MSw1fXxbMC05YS1mQS1GXXsxLDR9OigoOlswLTlhLWZBLUZdezEsNH0pezEsNn0pfDooKDpbMC05YS1mQS1GXXsxLDR9KXsxLDd9fDopfGZlODA6KDpbMC05YS1mQS1GXVp7MCw0fSl7MCw0fSVbMC05YS16QS1aXSt8OjooZmZmZig6MHsxLDR9KT86KT8oKDI1WzAtNV18KDJbMC00XXwxP1xcZCk/XFxkKVxcLil7M30oMjVbMC01XXwoMlswLTRdfDE/XFxkKT9cXGQpfChbMC05YS1mQS1GXXsxLDR9Oil7MSw0fTooKDI1WzAtNV18KDJbMC00XXwxP1xcZCk/XFxkKVxcLil7M30oMjVbMC01XXwoMlswLTRdfDE/XFxkKT9cXGQpKShcXC8oMTJbMC04XXwxWzAxXVswLTldfFswLTldWzAtOV0/KSk/KSg/IS4qXFxEXFwyKFteXFxkXFwvXXwkKSkgKikqJCIsICJ0eXBlIjogInRleHQiLCAiY29udGFpbmVyQ2xhc3MiOiAiei0yMCIsICJwYXR0ZXJuIjogIl4oPyEgKSggKigoKFxcYjI1WzAtNV18XFxiMlswLTRdXFxkfFxcYlswMV0/XFxkXFxkPykoXFwuKDI1WzAtNV18MlswLTRdXFxkfFswMV0/XFxkXFxkPykpezN9KShcXC8oWzEtMl1bMC05XT98M1swLTJdP3xbMDQtOV0pKT98KChbMC05YS1mQS1GXXsxLDR9Oil7N31bMC05YS1mQS1GXXsxLDR9fChbMC05YS1mQS1GXXsxLDR9Oil7MSw3fTp8KFswLTlhLWZBLUZdezEsNH06KXsxLDZ9OlswLTlhLWZBLUZdezEsNH18KFswLTlhLWZBLUZdezEsNH06KXsxLDV9KDpbMC05YS1mQS1GXXsxLDR9KXsxLDJ9fChbMC05YS1mQS1GXXsxLDR9Oil7MSw0fSg6WzAtOWEtZkEtRl17MSw0fSl7MSwzfXwoWzAtOWEtZkEtRl17MSw0fTopezEsM30oOlswLTlhLWZBLUZdezEsNH0pezEsNH18KFswLTlhLWZBLUZdezEsNH06KXsxLDJ9KDpbMC05YS1mQS1GXXsxLDR9KXsxLDV9fFswLTlhLWZBLUZdezEsNH06KCg6WzAtOWEtZkEtRl17MSw0fSl7MSw2fSl8OigoOlswLTlhLWZBLUZdezEsNH0pezEsN318Oil8ZmU4MDooOlswLTlhLWZBLUZdWnswLDR9KXswLDR9JVswLTlhLXpBLVpdK3w6OihmZmZmKDowezEsNH0pPzopPygoMjVbMC01XXwoMlswLTRdfDE/XFxkKT9cXGQpXFwuKXszfSgyNVswLTVdfCgyWzAtNF18MT9cXGQpP1xcZCl8KFswLTlhLWZBLUZdezEsNH06KXsxLDR9OigoMjVbMC01XXwoMlswLTRdfDE/XFxkKT9cXGQpXFwuKXszfSgyNVswLTVdfCgyWzAtNF18MT9cXGQpP1xcZCkpKFxcLygxMlswLThdfDFbMDFdWzAtOV18WzAtOV1bMC05XT8pKT8pKD8hLipcXERcXDIoW15cXGRcXC9dfCQpKSAqKSokIiwgImlucFR5cGUiOiAiaW5wdXQiLCAibmFtZSI6ICJCbGFja2xpc3QgSVAvbmV0d29yayIsICJjb2x1bW5zIjogeyJwYyI6IDQsICJ0YWJsZXQiOiA2LCAibW9iaWxlIjogMTJ9LCAiZGlzYWJsZWQiOiBmYWxzZSwgInZhbHVlIjogIiIsICJtZXRob2QiOiAiZGVmYXVsdCIsICJwcmV2X3ZhbHVlIjogIiIsICJwb3BvdmVycyI6IFt7Imljb25OYW1lIjogImRpc2siLCAidGV4dCI6ICJpbnBfcG9wb3Zlcl9tdWx0aXNpdGUifSwgeyJpY29uTmFtZSI6ICJpbmZvIiwgInRleHQiOiAiTGlzdCBvZiBJUC9uZXR3b3JrLCBzZXBhcmF0ZWQgd2l0aCBzcGFjZXMsIHRvIGJsb2NrLiJ9XX0sICJCTEFDS0xJU1RfUkROUyI6IHsiY29udGV4dCI6ICJtdWx0aXNpdGUiLCAiZGVmYXVsdCI6ICIuc2hvZGFuLmlvIC5jZW5zeXMuaW8iLCAiaGVscCI6ICJMaXN0IG9mIHJldmVyc2UgRE5TIHN1ZmZpeGVzLCBzZXBhcmF0ZWQgd2l0aCBzcGFjZXMsIHRvIGJsb2NrLiIsICJpZCI6ICJibGFja2xpc3QtcmRucyIsICJsYWJlbCI6ICJCbGFja2xpc3QgcmV2ZXJzZSBETlMiLCAicmVnZXgiOiAiXiggKigoW14gXSspKD8hLipcXDMoIHwkKSkpICopKiQiLCAidHlwZSI6ICJ0ZXh0IiwgImNvbnRhaW5lckNsYXNzIjogInotMTkiLCAicGF0dGVybiI6ICJeKCAqKChbXiBdKykoPyEuKlxcMyggfCQpKSkgKikqJCIsICJpbnBUeXBlIjogImlucHV0IiwgIm5hbWUiOiAiQmxhY2tsaXN0IHJldmVyc2UgRE5TIiwgImNvbHVtbnMiOiB7InBjIjogNCwgInRhYmxldCI6IDYsICJtb2JpbGUiOiAxMn0sICJkaXNhYmxlZCI6IGZhbHNlLCAidmFsdWUiOiAiLnNob2Rhbi5pbyAuY2Vuc3lzLmlvIiwgIm1ldGhvZCI6ICJkZWZhdWx0IiwgInByZXZfdmFsdWUiOiAiLnNob2Rhbi5pbyAuY2Vuc3lzLmlvIiwgInBvcG92ZXJzIjogW3siaWNvbk5hbWUiOiAiZGlzayIsICJ0ZXh0IjogImlucF9wb3BvdmVyX211bHRpc2l0ZSJ9LCB7Imljb25OYW1lIjogImluZm8iLCAidGV4dCI6ICJMaXN0IG9mIHJldmVyc2UgRE5TIHN1ZmZpeGVzLCBzZXBhcmF0ZWQgd2l0aCBzcGFjZXMsIHRvIGJsb2NrLiJ9XX0sICJCTEFDS0xJU1RfUkROU19HTE9CQUwiOiB7ImNvbnRleHQiOiAibXVsdGlzaXRlIiwgImRlZmF1bHQiOiAieWVzIiwgImhlbHAiOiAiT25seSBwZXJmb3JtIFJETlMgYmxhY2tsaXN0IGNoZWNrcyBvbiBnbG9iYWwgSVAgYWRkcmVzc2VzLiIsICJpZCI6ICJibGFja2xpc3QtcmRucy1nbG9iYWwiLCAibGFiZWwiOiAiQmxhY2tsaXN0IHJldmVyc2UgRE5TIGdsb2JhbCBJUHMiLCAicmVnZXgiOiAiXih5ZXN8bm8pJCIsICJ0eXBlIjogImNoZWNrIiwgImNvbnRhaW5lckNsYXNzIjogInotMTgiLCAicGF0dGVybiI6ICJeKHllc3xubykkIiwgImlucFR5cGUiOiAiY2hlY2tib3giLCAibmFtZSI6ICJCbGFja2xpc3QgcmV2ZXJzZSBETlMgZ2xvYmFsIElQcyIsICJjb2x1bW5zIjogeyJwYyI6IDQsICJ0YWJsZXQiOiA2LCAibW9iaWxlIjogMTJ9LCAiZGlzYWJsZWQiOiBmYWxzZSwgInZhbHVlIjogInllcyIsICJtZXRob2QiOiAiZGVmYXVsdCIsICJwcmV2X3ZhbHVlIjogInllcyIsICJwb3BvdmVycyI6IFt7Imljb25OYW1lIjogImRpc2siLCAidGV4dCI6ICJpbnBfcG9wb3Zlcl9tdWx0aXNpdGUifSwgeyJpY29uTmFtZSI6ICJpbmZvIiwgInRleHQiOiAiT25seSBwZXJmb3JtIFJETlMgYmxhY2tsaXN0IGNoZWNrcyBvbiBnbG9iYWwgSVAgYWRkcmVzc2VzLiJ9XX0sICJCTEFDS0xJU1RfQVNOIjogeyJjb250ZXh0IjogIm11bHRpc2l0ZSIsICJkZWZhdWx0IjogIiIsICJoZWxwIjogIkxpc3Qgb2YgQVNOIG51bWJlcnMsIHNlcGFyYXRlZCB3aXRoIHNwYWNlcywgdG8gYmxvY2suIiwgImlkIjogImJsYWNrbGlzdC1hc24iLCAibGFiZWwiOiAiQmxhY2tsaXN0IEFTTiIsICJyZWdleCI6ICJeXiggKigoQVNOPyk/KFxcZCspXFxiKD8hLipbU04gXVxcNFxcYikpICopKiQiLCAidHlwZSI6ICJ0ZXh0IiwgImNvbnRhaW5lckNsYXNzIjogInotMTciLCAicGF0dGVybiI6ICJeXiggKigoQVNOPyk/KFxcZCspXFxiKD8hLipbU04gXVxcNFxcYikpICopKiQiLCAiaW5wVHlwZSI6ICJpbnB1dCIsICJuYW1lIjogIkJsYWNrbGlzdCBBU04iLCAiY29sdW1ucyI6IHsicGMiOiA0LCAidGFibGV0IjogNiwgIm1vYmlsZSI6IDEyfSwgImRpc2FibGVkIjogZmFsc2UsICJ2YWx1ZSI6ICIiLCAibWV0aG9kIjogImRlZmF1bHQiLCAicHJldl92YWx1ZSI6ICIiLCAicG9wb3ZlcnMiOiBbeyJpY29uTmFtZSI6ICJkaXNrIiwgInRleHQiOiAiaW5wX3BvcG92ZXJfbXVsdGlzaXRlIn0sIHsiaWNvbk5hbWUiOiAiaW5mbyIsICJ0ZXh0IjogIkxpc3Qgb2YgQVNOIG51bWJlcnMsIHNlcGFyYXRlZCB3aXRoIHNwYWNlcywgdG8gYmxvY2suIn1dfSwgIkJMQUNLTElTVF9VU0VSX0FHRU5UIjogeyJjb250ZXh0IjogIm11bHRpc2l0ZSIsICJkZWZhdWx0IjogIiIsICJoZWxwIjogIkxpc3Qgb2YgVXNlci1BZ2VudCAoUENSRSByZWdleCksIHNlcGFyYXRlZCB3aXRoIHNwYWNlcywgdG8gYmxvY2suIiwgImlkIjogImJsYWNrbGlzdC11c2VyLWFnZW50IiwgImxhYmVsIjogIkJsYWNrbGlzdCBVc2VyLUFnZW50IiwgInJlZ2V4IjogIl4uKiQiLCAidHlwZSI6ICJ0ZXh0IiwgImNvbnRhaW5lckNsYXNzIjogInotMTYiLCAicGF0dGVybiI6ICJeLiokIiwgImlucFR5cGUiOiAiaW5wdXQiLCAibmFtZSI6ICJCbGFja2xpc3QgVXNlci1BZ2VudCIsICJjb2x1bW5zIjogeyJwYyI6IDQsICJ0YWJsZXQiOiA2LCAibW9iaWxlIjogMTJ9LCAiZGlzYWJsZWQiOiBmYWxzZSwgInZhbHVlIjogIiIsICJtZXRob2QiOiAiZGVmYXVsdCIsICJwcmV2X3ZhbHVlIjogIiIsICJwb3BvdmVycyI6IFt7Imljb25OYW1lIjogImRpc2siLCAidGV4dCI6ICJpbnBfcG9wb3Zlcl9tdWx0aXNpdGUifSwgeyJpY29uTmFtZSI6ICJpbmZvIiwgInRleHQiOiAiTGlzdCBvZiBVc2VyLUFnZW50IChQQ1JFIHJlZ2V4KSwgc2VwYXJhdGVkIHdpdGggc3BhY2VzLCB0byBibG9jay4ifV19LCAiQkxBQ0tMSVNUX1VSSSI6IHsiY29udGV4dCI6ICJtdWx0aXNpdGUiLCAiZGVmYXVsdCI6ICIiLCAiaGVscCI6ICJMaXN0IG9mIFVSSSAoUENSRSByZWdleCksIHNlcGFyYXRlZCB3aXRoIHNwYWNlcywgdG8gYmxvY2suIiwgImlkIjogImJsYWNrbGlzdC11cmkiLCAibGFiZWwiOiAiQmxhY2tsaXN0IFVSSSIsICJyZWdleCI6ICJeKCAqKC4qKSg/IS4qXFwyKD8hLikpICopKiQiLCAidHlwZSI6ICJ0ZXh0IiwgImNvbnRhaW5lckNsYXNzIjogInotMTUiLCAicGF0dGVybiI6ICJeKCAqKC4qKSg/IS4qXFwyKD8hLikpICopKiQiLCAiaW5wVHlwZSI6ICJpbnB1dCIsICJuYW1lIjogIkJsYWNrbGlzdCBVUkkiLCAiY29sdW1ucyI6IHsicGMiOiA0LCAidGFibGV0IjogNiwgIm1vYmlsZSI6IDEyfSwgImRpc2FibGVkIjogZmFsc2UsICJ2YWx1ZSI6ICIiLCAibWV0aG9kIjogImRlZmF1bHQiLCAicHJldl92YWx1ZSI6ICIiLCAicG9wb3ZlcnMiOiBbeyJpY29uTmFtZSI6ICJkaXNrIiwgInRleHQiOiAiaW5wX3BvcG92ZXJfbXVsdGlzaXRlIn0sIHsiaWNvbk5hbWUiOiAiaW5mbyIsICJ0ZXh0IjogIkxpc3Qgb2YgVVJJIChQQ1JFIHJlZ2V4KSwgc2VwYXJhdGVkIHdpdGggc3BhY2VzLCB0byBibG9jay4ifV19LCAiQkxBQ0tMSVNUX0lHTk9SRV9JUCI6IHsiY29udGV4dCI6ICJtdWx0aXNpdGUiLCAiZGVmYXVsdCI6ICIiLCAiaGVscCI6ICJMaXN0IG9mIElQL25ldHdvcmssIHNlcGFyYXRlZCB3aXRoIHNwYWNlcywgdG8gaWdub3JlIGluIHRoZSBibGFja2xpc3QuIiwgImlkIjogImJsYWNrbGlzdC1pZ25vcmUtaXAiLCAibGFiZWwiOiAiQmxhY2tsaXN0IGlnbm9yZSBJUC9uZXR3b3JrIiwgInJlZ2V4IjogIl4oPyEgKSggKigoKFxcYjI1WzAtNV18XFxiMlswLTRdXFxkfFxcYlswMV0/XFxkXFxkPykoXFwuKDI1WzAtNV18MlswLTRdXFxkfFswMV0/XFxkXFxkPykpezN9KShcXC8oWzEtMl1bMC05XT98M1swLTJdP3xbMDQtOV0pKT98KChbMC05YS1mQS1GXXsxLDR9Oil7N31bMC05YS1mQS1GXXsxLDR9fChbMC05YS1mQS1GXXsxLDR9Oil7MSw3fTp8KFswLTlhLWZBLUZdezEsNH06KXsxLDZ9OlswLTlhLWZBLUZdezEsNH18KFswLTlhLWZBLUZdezEsNH06KXsxLDV9KDpbMC05YS1mQS1GXXsxLDR9KXsxLDJ9fChbMC05YS1mQS1GXXsxLDR9Oil7MSw0fSg6WzAtOWEtZkEtRl17MSw0fSl7MSwzfXwoWzAtOWEtZkEtRl17MSw0fTopezEsM30oOlswLTlhLWZBLUZdezEsNH0pezEsNH18KFswLTlhLWZBLUZdezEsNH06KXsxLDJ9KDpbMC05YS1mQS1GXXsxLDR9KXsxLDV9fFswLTlhLWZBLUZdezEsNH06KCg6WzAtOWEtZkEtRl17MSw0fSl7MSw2fSl8OigoOlswLTlhLWZBLUZdezEsNH0pezEsN318Oil8ZmU4MDooOlswLTlhLWZBLUZdWnswLDR9KXswLDR9JVswLTlhLXpBLVpdK3w6OihmZmZmKDowezEsNH0pPzopPygoMjVbMC01XXwoMlswLTRdfDE/XFxkKT9cXGQpXFwuKXszfSgyNVswLTVdfCgyWzAtNF18MT9cXGQpP1xcZCl8KFswLTlhLWZBLUZdezEsNH06KXsxLDR9OigoMjVbMC01XXwoMlswLTRdfDE/XFxkKT9cXGQpXFwuKXszfSgyNVswLTVdfCgyWzAtNF18MT9cXGQpP1xcZCkpKFxcLygxMlswLThdfDFbMDFdWzAtOV18WzAtOV1bMC05XT8pKT8pKD8hLipcXERcXDIoW15cXGRcXC9dfCQpKSAqKSokIiwgInR5cGUiOiAidGV4dCIsICJjb250YWluZXJDbGFzcyI6ICJ6LTE0IiwgInBhdHRlcm4iOiAiXig/ISApKCAqKCgoXFxiMjVbMC01XXxcXGIyWzAtNF1cXGR8XFxiWzAxXT9cXGRcXGQ/KShcXC4oMjVbMC01XXwyWzAtNF1cXGR8WzAxXT9cXGRcXGQ/KSl7M30pKFxcLyhbMS0yXVswLTldP3wzWzAtMl0/fFswNC05XSkpP3woKFswLTlhLWZBLUZdezEsNH06KXs3fVswLTlhLWZBLUZdezEsNH18KFswLTlhLWZBLUZdezEsNH06KXsxLDd9OnwoWzAtOWEtZkEtRl17MSw0fTopezEsNn06WzAtOWEtZkEtRl17MSw0fXwoWzAtOWEtZkEtRl17MSw0fTopezEsNX0oOlswLTlhLWZBLUZdezEsNH0pezEsMn18KFswLTlhLWZBLUZdezEsNH06KXsxLDR9KDpbMC05YS1mQS1GXXsxLDR9KXsxLDN9fChbMC05YS1mQS1GXXsxLDR9Oil7MSwzfSg6WzAtOWEtZkEtRl17MSw0fSl7MSw0fXwoWzAtOWEtZkEtRl17MSw0fTopezEsMn0oOlswLTlhLWZBLUZdezEsNH0pezEsNX18WzAtOWEtZkEtRl17MSw0fTooKDpbMC05YS1mQS1GXXsxLDR9KXsxLDZ9KXw6KCg6WzAtOWEtZkEtRl17MSw0fSl7MSw3fXw6KXxmZTgwOig6WzAtOWEtZkEtRl1aezAsNH0pezAsNH0lWzAtOWEtekEtWl0rfDo6KGZmZmYoOjB7MSw0fSk/Oik/KCgyNVswLTVdfCgyWzAtNF18MT9cXGQpP1xcZClcXC4pezN9KDI1WzAtNV18KDJbMC00XXwxP1xcZCk/XFxkKXwoWzAtOWEtZkEtRl17MSw0fTopezEsNH06KCgyNVswLTVdfCgyWzAtNF18MT9cXGQpP1xcZClcXC4pezN9KDI1WzAtNV18KDJbMC00XXwxP1xcZCk/XFxkKSkoXFwvKDEyWzAtOF18MVswMV1bMC05XXxbMC05XVswLTldPykpPykoPyEuKlxcRFxcMihbXlxcZFxcL118JCkpICopKiQiLCAiaW5wVHlwZSI6ICJpbnB1dCIsICJuYW1lIjogIkJsYWNrbGlzdCBpZ25vcmUgSVAvbmV0d29yayIsICJjb2x1bW5zIjogeyJwYyI6IDQsICJ0YWJsZXQiOiA2LCAibW9iaWxlIjogMTJ9LCAiZGlzYWJsZWQiOiBmYWxzZSwgInZhbHVlIjogIiIsICJtZXRob2QiOiAiZGVmYXVsdCIsICJwcmV2X3ZhbHVlIjogIiIsICJwb3BvdmVycyI6IFt7Imljb25OYW1lIjogImRpc2siLCAidGV4dCI6ICJpbnBfcG9wb3Zlcl9tdWx0aXNpdGUifSwgeyJpY29uTmFtZSI6ICJpbmZvIiwgInRleHQiOiAiTGlzdCBvZiBJUC9uZXR3b3JrLCBzZXBhcmF0ZWQgd2l0aCBzcGFjZXMsIHRvIGlnbm9yZSBpbiB0aGUgYmxhY2tsaXN0LiJ9XX0sICJCTEFDS0xJU1RfSUdOT1JFX1JETlMiOiB7ImNvbnRleHQiOiAibXVsdGlzaXRlIiwgImRlZmF1bHQiOiAiIiwgImhlbHAiOiAiTGlzdCBvZiByZXZlcnNlIEROUyBzdWZmaXhlcywgc2VwYXJhdGVkIHdpdGggc3BhY2VzLCB0byBpZ25vcmUgaW4gdGhlIGJsYWNrbGlzdC4iLCAiaWQiOiAiYmxhY2tsaXN0LWlnbm9yZS1yZG5zIiwgImxhYmVsIjogIkJsYWNrbGlzdCBpZ25vcmUgcmV2ZXJzZSBETlMiLCAicmVnZXgiOiAiXiggKigoW14gXSspKD8hLipcXDMoIHwkKSkpICopKiQiLCAidHlwZSI6ICJ0ZXh0IiwgImNvbnRhaW5lckNsYXNzIjogInotMTMiLCAicGF0dGVybiI6ICJeKCAqKChbXiBdKykoPyEuKlxcMyggfCQpKSkgKikqJCIsICJpbnBUeXBlIjogImlucHV0IiwgIm5hbWUiOiAiQmxhY2tsaXN0IGlnbm9yZSByZXZlcnNlIEROUyIsICJjb2x1bW5zIjogeyJwYyI6IDQsICJ0YWJsZXQiOiA2LCAibW9iaWxlIjogMTJ9LCAiZGlzYWJsZWQiOiBmYWxzZSwgInZhbHVlIjogIiIsICJtZXRob2QiOiAiZGVmYXVsdCIsICJwcmV2X3ZhbHVlIjogIiIsICJwb3BvdmVycyI6IFt7Imljb25OYW1lIjogImRpc2siLCAidGV4dCI6ICJpbnBfcG9wb3Zlcl9tdWx0aXNpdGUifSwgeyJpY29uTmFtZSI6ICJpbmZvIiwgInRleHQiOiAiTGlzdCBvZiByZXZlcnNlIEROUyBzdWZmaXhlcywgc2VwYXJhdGVkIHdpdGggc3BhY2VzLCB0byBpZ25vcmUgaW4gdGhlIGJsYWNrbGlzdC4ifV19LCAiQkxBQ0tMSVNUX0lHTk9SRV9BU04iOiB7ImNvbnRleHQiOiAibXVsdGlzaXRlIiwgImRlZmF1bHQiOiAiIiwgImhlbHAiOiAiTGlzdCBvZiBBU04gbnVtYmVycywgc2VwYXJhdGVkIHdpdGggc3BhY2VzLCB0byBpZ25vcmUgaW4gdGhlIGJsYWNrbGlzdC4iLCAiaWQiOiAiYmxhY2tsaXN0LWlnbm9yZS1hc24iLCAibGFiZWwiOiAiQmxhY2tsaXN0IGlnbm9yZSBBU04iLCAicmVnZXgiOiAiXl4oICooKEFTTj8pPyhcXGQrKVxcYig/IS4qW1NOIF1cXDRcXGIpKSAqKSokIiwgInR5cGUiOiAidGV4dCIsICJjb250YWluZXJDbGFzcyI6ICJ6LTEyIiwgInBhdHRlcm4iOiAiXl4oICooKEFTTj8pPyhcXGQrKVxcYig/IS4qW1NOIF1cXDRcXGIpKSAqKSokIiwgImlucFR5cGUiOiAiaW5wdXQiLCAibmFtZSI6ICJCbGFja2xpc3QgaWdub3JlIEFTTiIsICJjb2x1bW5zIjogeyJwYyI6IDQsICJ0YWJsZXQiOiA2LCAibW9iaWxlIjogMTJ9LCAiZGlzYWJsZWQiOiBmYWxzZSwgInZhbHVlIjogIiIsICJtZXRob2QiOiAiZGVmYXVsdCIsICJwcmV2X3ZhbHVlIjogIiIsICJwb3BvdmVycyI6IFt7Imljb25OYW1lIjogImRpc2siLCAidGV4dCI6ICJpbnBfcG9wb3Zlcl9tdWx0aXNpdGUifSwgeyJpY29uTmFtZSI6ICJpbmZvIiwgInRleHQiOiAiTGlzdCBvZiBBU04gbnVtYmVycywgc2VwYXJhdGVkIHdpdGggc3BhY2VzLCB0byBpZ25vcmUgaW4gdGhlIGJsYWNrbGlzdC4ifV19LCAiQkxBQ0tMSVNUX0lHTk9SRV9VU0VSX0FHRU5UIjogeyJjb250ZXh0IjogIm11bHRpc2l0ZSIsICJkZWZhdWx0IjogIiIsICJoZWxwIjogIkxpc3Qgb2YgVXNlci1BZ2VudCAoUENSRSByZWdleCksIHNlcGFyYXRlZCB3aXRoIHNwYWNlcywgdG8gaWdub3JlIGluIHRoZSBibGFja2xpc3QuIiwgImlkIjogImJsYWNrbGlzdC1pZ25vcmUtdXNlci1hZ2VudCIsICJsYWJlbCI6ICJCbGFja2xpc3QgaWdub3JlIFVzZXItQWdlbnQiLCAicmVnZXgiOiAiXi4qJCIsICJ0eXBlIjogInRleHQiLCAiY29udGFpbmVyQ2xhc3MiOiAiei0xMSIsICJwYXR0ZXJuIjogIl4uKiQiLCAiaW5wVHlwZSI6ICJpbnB1dCIsICJuYW1lIjogIkJsYWNrbGlzdCBpZ25vcmUgVXNlci1BZ2VudCIsICJjb2x1bW5zIjogeyJwYyI6IDQsICJ0YWJsZXQiOiA2LCAibW9iaWxlIjogMTJ9LCAiZGlzYWJsZWQiOiBmYWxzZSwgInZhbHVlIjogIiIsICJtZXRob2QiOiAiZGVmYXVsdCIsICJwcmV2X3ZhbHVlIjogIiIsICJwb3BvdmVycyI6IFt7Imljb25OYW1lIjogImRpc2siLCAidGV4dCI6ICJpbnBfcG9wb3Zlcl9tdWx0aXNpdGUifSwgeyJpY29uTmFtZSI6ICJpbmZvIiwgInRleHQiOiAiTGlzdCBvZiBVc2VyLUFnZW50IChQQ1JFIHJlZ2V4KSwgc2VwYXJhdGVkIHdpdGggc3BhY2VzLCB0byBpZ25vcmUgaW4gdGhlIGJsYWNrbGlzdC4ifV19LCAiQkxBQ0tMSVNUX0lHTk9SRV9VUkkiOiB7ImNvbnRleHQiOiAibXVsdGlzaXRlIiwgImRlZmF1bHQiOiAiIiwgImhlbHAiOiAiTGlzdCBvZiBVUkkgKFBDUkUgcmVnZXgpLCBzZXBhcmF0ZWQgd2l0aCBzcGFjZXMsIHRvIGlnbm9yZSBpbiB0aGUgYmxhY2tsaXN0LiIsICJpZCI6ICJibGFja2xpc3QtaWdub3JlLXVyaSIsICJsYWJlbCI6ICJCbGFja2xpc3QgaWdub3JlIFVSSSIsICJyZWdleCI6ICJeKCAqKC4qKSg/IS4qXFwyKD8hLikpICopKiQiLCAidHlwZSI6ICJ0ZXh0IiwgImNvbnRhaW5lckNsYXNzIjogInotMTAiLCAicGF0dGVybiI6ICJeKCAqKC4qKSg/IS4qXFwyKD8hLikpICopKiQiLCAiaW5wVHlwZSI6ICJpbnB1dCIsICJuYW1lIjogIkJsYWNrbGlzdCBpZ25vcmUgVVJJIiwgImNvbHVtbnMiOiB7InBjIjogNCwgInRhYmxldCI6IDYsICJtb2JpbGUiOiAxMn0sICJkaXNhYmxlZCI6IGZhbHNlLCAidmFsdWUiOiAiIiwgIm1ldGhvZCI6ICJkZWZhdWx0IiwgInByZXZfdmFsdWUiOiAiIiwgInBvcG92ZXJzIjogW3siaWNvbk5hbWUiOiAiZGlzayIsICJ0ZXh0IjogImlucF9wb3BvdmVyX211bHRpc2l0ZSJ9LCB7Imljb25OYW1lIjogImluZm8iLCAidGV4dCI6ICJMaXN0IG9mIFVSSSAoUENSRSByZWdleCksIHNlcGFyYXRlZCB3aXRoIHNwYWNlcywgdG8gaWdub3JlIGluIHRoZSBibGFja2xpc3QuIn1dfSwgIkJMQUNLTElTVF9JUF9VUkxTIjogeyJjb250ZXh0IjogImdsb2JhbCIsICJkZWZhdWx0IjogImh0dHBzOi8vd3d3LmRhbi5tZS51ay90b3JsaXN0Lz9leGl0IiwgImhlbHAiOiAiTGlzdCBvZiBVUkxzLCBzZXBhcmF0ZWQgd2l0aCBzcGFjZXMsIGNvbnRhaW5pbmcgYmFkIElQL25ldHdvcmsgdG8gYmxvY2suIiwgImlkIjogImJsYWNrbGlzdC1pcC11cmxzIiwgImxhYmVsIjogIkJsYWNrbGlzdCBJUC9uZXR3b3JrIFVSTHMiLCAicmVnZXgiOiAiXiggKigoaHR0cHM/OlxcL1xcL3xmaWxlOlxcL1xcL1xcLylbXFwtXFx3QDolLit+Iz1dK1tcXC1cXHdcXChcXCkhQDolKy5+Iz8mXFwvPSRdKikoPyEuKlxcMig/IS4pKSAqKSokIiwgInR5cGUiOiAidGV4dCIsICJjb250YWluZXJDbGFzcyI6ICJ6LTkiLCAicGF0dGVybiI6ICJeKCAqKChodHRwcz86XFwvXFwvfGZpbGU6XFwvXFwvXFwvKVtcXC1cXHdAOiUuK34jPV0rW1xcLVxcd1xcKFxcKSFAOiUrLn4jPyZcXC89JF0qKSg/IS4qXFwyKD8hLikpICopKiQiLCAiaW5wVHlwZSI6ICJpbnB1dCIsICJuYW1lIjogIkJsYWNrbGlzdCBJUC9uZXR3b3JrIFVSTHMiLCAiY29sdW1ucyI6IHsicGMiOiA0LCAidGFibGV0IjogNiwgIm1vYmlsZSI6IDEyfSwgImRpc2FibGVkIjogZmFsc2UsICJ2YWx1ZSI6ICJodHRwczovL3d3dy5kYW4ubWUudWsvdG9ybGlzdC8/ZXhpdCIsICJtZXRob2QiOiAiZGVmYXVsdCIsICJwcmV2X3ZhbHVlIjogImh0dHBzOi8vd3d3LmRhbi5tZS51ay90b3JsaXN0Lz9leGl0IiwgInBvcG92ZXJzIjogW3siaWNvbk5hbWUiOiAiZ2xvYmUiLCAidGV4dCI6ICJpbnBfcG9wb3Zlcl9nbG9iYWwifSwgeyJpY29uTmFtZSI6ICJpbmZvIiwgInRleHQiOiAiTGlzdCBvZiBVUkxzLCBzZXBhcmF0ZWQgd2l0aCBzcGFjZXMsIGNvbnRhaW5pbmcgYmFkIElQL25ldHdvcmsgdG8gYmxvY2suIn1dfSwgIkJMQUNLTElTVF9SRE5TX1VSTFMiOiB7ImNvbnRleHQiOiAiZ2xvYmFsIiwgImRlZmF1bHQiOiAiIiwgImhlbHAiOiAiTGlzdCBvZiBVUkxzLCBzZXBhcmF0ZWQgd2l0aCBzcGFjZXMsIGNvbnRhaW5pbmcgcmV2ZXJzZSBETlMgc3VmZml4ZXMgdG8gYmxvY2suIiwgImlkIjogImJsYWNrbGlzdC1yZG5zLXVybHMiLCAibGFiZWwiOiAiQmxhY2tsaXN0IHJldmVyc2UgRE5TIFVSTHMiLCAicmVnZXgiOiAiXiggKigoaHR0cHM/OlxcL1xcL3xmaWxlOlxcL1xcL1xcLylbXFwtXFx3QDolLit+Iz1dK1tcXC1cXHdcXChcXCkhQDolKy5+Iz8mXFwvPSRdKikoPyEuKlxcMig/IS4pKSAqKSokIiwgInR5cGUiOiAidGV4dCIsICJjb250YWluZXJDbGFzcyI6ICJ6LTgiLCAicGF0dGVybiI6ICJeKCAqKChodHRwcz86XFwvXFwvfGZpbGU6XFwvXFwvXFwvKVtcXC1cXHdAOiUuK34jPV0rW1xcLVxcd1xcKFxcKSFAOiUrLn4jPyZcXC89JF0qKSg/IS4qXFwyKD8hLikpICopKiQiLCAiaW5wVHlwZSI6ICJpbnB1dCIsICJuYW1lIjogIkJsYWNrbGlzdCByZXZlcnNlIEROUyBVUkxzIiwgImNvbHVtbnMiOiB7InBjIjogNCwgInRhYmxldCI6IDYsICJtb2JpbGUiOiAxMn0sICJkaXNhYmxlZCI6IGZhbHNlLCAidmFsdWUiOiAiIiwgIm1ldGhvZCI6ICJkZWZhdWx0IiwgInByZXZfdmFsdWUiOiAiIiwgInBvcG92ZXJzIjogW3siaWNvbk5hbWUiOiAiZ2xvYmUiLCAidGV4dCI6ICJpbnBfcG9wb3Zlcl9nbG9iYWwifSwgeyJpY29uTmFtZSI6ICJpbmZvIiwgInRleHQiOiAiTGlzdCBvZiBVUkxzLCBzZXBhcmF0ZWQgd2l0aCBzcGFjZXMsIGNvbnRhaW5pbmcgcmV2ZXJzZSBETlMgc3VmZml4ZXMgdG8gYmxvY2suIn1dfSwgIkJMQUNLTElTVF9BU05fVVJMUyI6IHsiY29udGV4dCI6ICJnbG9iYWwiLCAiZGVmYXVsdCI6ICIiLCAiaGVscCI6ICJMaXN0IG9mIFVSTHMsIHNlcGFyYXRlZCB3aXRoIHNwYWNlcywgY29udGFpbmluZyBBU04gdG8gYmxvY2suIiwgImlkIjogImJsYWNrbGlzdC1hc24tdXJscyIsICJsYWJlbCI6ICJCbGFja2xpc3QgQVNOIFVSTHMiLCAicmVnZXgiOiAiXiggKigoaHR0cHM/OlxcL1xcL3xmaWxlOlxcL1xcL1xcLylbXFwtXFx3QDolLit+Iz1dK1tcXC1cXHdcXChcXCkhQDolKy5+Iz8mXFwvPSRdKikoPyEuKlxcMig/IS4pKSAqKSokIiwgInR5cGUiOiAidGV4dCIsICJjb250YWluZXJDbGFzcyI6ICJ6LTciLCAicGF0dGVybiI6ICJeKCAqKChodHRwcz86XFwvXFwvfGZpbGU6XFwvXFwvXFwvKVtcXC1cXHdAOiUuK34jPV0rW1xcLVxcd1xcKFxcKSFAOiUrLn4jPyZcXC89JF0qKSg/IS4qXFwyKD8hLikpICopKiQiLCAiaW5wVHlwZSI6ICJpbnB1dCIsICJuYW1lIjogIkJsYWNrbGlzdCBBU04gVVJMcyIsICJjb2x1bW5zIjogeyJwYyI6IDQsICJ0YWJsZXQiOiA2LCAibW9iaWxlIjogMTJ9LCAiZGlzYWJsZWQiOiBmYWxzZSwgInZhbHVlIjogIiIsICJtZXRob2QiOiAiZGVmYXVsdCIsICJwcmV2X3ZhbHVlIjogIiIsICJwb3BvdmVycyI6IFt7Imljb25OYW1lIjogImdsb2JlIiwgInRleHQiOiAiaW5wX3BvcG92ZXJfZ2xvYmFsIn0sIHsiaWNvbk5hbWUiOiAiaW5mbyIsICJ0ZXh0IjogIkxpc3Qgb2YgVVJMcywgc2VwYXJhdGVkIHdpdGggc3BhY2VzLCBjb250YWluaW5nIEFTTiB0byBibG9jay4ifV19LCAiQkxBQ0tMSVNUX1VTRVJfQUdFTlRfVVJMUyI6IHsiY29udGV4dCI6ICJnbG9iYWwiLCAiZGVmYXVsdCI6ICJodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vbWl0Y2hlbGxrcm9nemEvbmdpbngtdWx0aW1hdGUtYmFkLWJvdC1ibG9ja2VyL21hc3Rlci9fZ2VuZXJhdG9yX2xpc3RzL2JhZC11c2VyLWFnZW50cy5saXN0IiwgImhlbHAiOiAiTGlzdCBvZiBVUkxzLCBzZXBhcmF0ZWQgd2l0aCBzcGFjZXMsIGNvbnRhaW5pbmcgYmFkIFVzZXItQWdlbnQgdG8gYmxvY2suIiwgImlkIjogImJsYWNrbGlzdC11c2VyLWFnZW50LXVybHMiLCAibGFiZWwiOiAiQmxhY2tsaXN0IFVzZXItQWdlbnQgVVJMcyIsICJyZWdleCI6ICJeKCAqKChodHRwcz86XFwvXFwvfGZpbGU6XFwvXFwvXFwvKVtcXC1cXHdAOiUuK34jPV0rW1xcLVxcd1xcKFxcKSFAOiUrLn4jPyZcXC89JF0qKSg/IS4qXFwyKD8hLikpICopKiQiLCAidHlwZSI6ICJ0ZXh0IiwgImNvbnRhaW5lckNsYXNzIjogInotNiIsICJwYXR0ZXJuIjogIl4oICooKGh0dHBzPzpcXC9cXC98ZmlsZTpcXC9cXC9cXC8pW1xcLVxcd0A6JS4rfiM9XStbXFwtXFx3XFwoXFwpIUA6JSsufiM/JlxcLz0kXSopKD8hLipcXDIoPyEuKSkgKikqJCIsICJpbnBUeXBlIjogImlucHV0IiwgIm5hbWUiOiAiQmxhY2tsaXN0IFVzZXItQWdlbnQgVVJMcyIsICJjb2x1bW5zIjogeyJwYyI6IDQsICJ0YWJsZXQiOiA2LCAibW9iaWxlIjogMTJ9LCAiZGlzYWJsZWQiOiBmYWxzZSwgInZhbHVlIjogImh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9taXRjaGVsbGtyb2d6YS9uZ2lueC11bHRpbWF0ZS1iYWQtYm90LWJsb2NrZXIvbWFzdGVyL19nZW5lcmF0b3JfbGlzdHMvYmFkLXVzZXItYWdlbnRzLmxpc3QiLCAibWV0aG9kIjogImRlZmF1bHQiLCAicHJldl92YWx1ZSI6ICJodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vbWl0Y2hlbGxrcm9nemEvbmdpbngtdWx0aW1hdGUtYmFkLWJvdC1ibG9ja2VyL21hc3Rlci9fZ2VuZXJhdG9yX2xpc3RzL2JhZC11c2VyLWFnZW50cy5saXN0IiwgInBvcG92ZXJzIjogW3siaWNvbk5hbWUiOiAiZ2xvYmUiLCAidGV4dCI6ICJpbnBfcG9wb3Zlcl9nbG9iYWwifSwgeyJpY29uTmFtZSI6ICJpbmZvIiwgInRleHQiOiAiTGlzdCBvZiBVUkxzLCBzZXBhcmF0ZWQgd2l0aCBzcGFjZXMsIGNvbnRhaW5pbmcgYmFkIFVzZXItQWdlbnQgdG8gYmxvY2suIn1dfSwgIkJMQUNLTElTVF9VUklfVVJMUyI6IHsiY29udGV4dCI6ICJnbG9iYWwiLCAiZGVmYXVsdCI6ICIiLCAiaGVscCI6ICJMaXN0IG9mIFVSTHMsIHNlcGFyYXRlZCB3aXRoIHNwYWNlcywgY29udGFpbmluZyBiYWQgVVJJIHRvIGJsb2NrLiIsICJpZCI6ICJibGFja2xpc3QtdXJpLXVybHMiLCAibGFiZWwiOiAiQmxhY2tsaXN0IFVSSSBVUkxzIiwgInJlZ2V4IjogIl4oICooKGh0dHBzPzpcXC9cXC98ZmlsZTpcXC9cXC9cXC8pW1xcLVxcd0A6JS4rfiM9XStbXFwtXFx3XFwoXFwpIUA6JSsufiM/JlxcLz0kXSopKD8hLipcXDIoPyEuKSkgKikqJCIsICJ0eXBlIjogInRleHQiLCAiY29udGFpbmVyQ2xhc3MiOiAiei01IiwgInBhdHRlcm4iOiAiXiggKigoaHR0cHM/OlxcL1xcL3xmaWxlOlxcL1xcL1xcLylbXFwtXFx3QDolLit+Iz1dK1tcXC1cXHdcXChcXCkhQDolKy5+Iz8mXFwvPSRdKikoPyEuKlxcMig/IS4pKSAqKSokIiwgImlucFR5cGUiOiAiaW5wdXQiLCAibmFtZSI6ICJCbGFja2xpc3QgVVJJIFVSTHMiLCAiY29sdW1ucyI6IHsicGMiOiA0LCAidGFibGV0IjogNiwgIm1vYmlsZSI6IDEyfSwgImRpc2FibGVkIjogZmFsc2UsICJ2YWx1ZSI6ICIiLCAibWV0aG9kIjogImRlZmF1bHQiLCAicHJldl92YWx1ZSI6ICIiLCAicG9wb3ZlcnMiOiBbeyJpY29uTmFtZSI6ICJnbG9iZSIsICJ0ZXh0IjogImlucF9wb3BvdmVyX2dsb2JhbCJ9LCB7Imljb25OYW1lIjogImluZm8iLCAidGV4dCI6ICJMaXN0IG9mIFVSTHMsIHNlcGFyYXRlZCB3aXRoIHNwYWNlcywgY29udGFpbmluZyBiYWQgVVJJIHRvIGJsb2NrLiJ9XX0sICJCTEFDS0xJU1RfSUdOT1JFX0lQX1VSTFMiOiB7ImNvbnRleHQiOiAiZ2xvYmFsIiwgImRlZmF1bHQiOiAiIiwgImhlbHAiOiAiTGlzdCBvZiBVUkxzLCBzZXBhcmF0ZWQgd2l0aCBzcGFjZXMsIGNvbnRhaW5pbmcgSVAvbmV0d29yayB0byBpZ25vcmUgaW4gdGhlIGJsYWNrbGlzdC4iLCAiaWQiOiAiYmxhY2tsaXN0LWlnbm9yZS1pcC11cmxzIiwgImxhYmVsIjogIkJsYWNrbGlzdCBpZ25vcmUgSVAvbmV0d29yayBVUkxzIiwgInJlZ2V4IjogIl4oICooKGh0dHBzPzpcXC9cXC98ZmlsZTpcXC9cXC9cXC8pW1xcLVxcd0A6JS4rfiM9XStbXFwtXFx3XFwoXFwpIUA6JSsufiM/JlxcLz0kXSopKD8hLipcXDIoPyEuKSkgKikqJCIsICJ0eXBlIjogInRleHQiLCAiY29udGFpbmVyQ2xhc3MiOiAiei00IiwgInBhdHRlcm4iOiAiXiggKigoaHR0cHM/OlxcL1xcL3xmaWxlOlxcL1xcL1xcLylbXFwtXFx3QDolLit+Iz1dK1tcXC1cXHdcXChcXCkhQDolKy5+Iz8mXFwvPSRdKikoPyEuKlxcMig/IS4pKSAqKSokIiwgImlucFR5cGUiOiAiaW5wdXQiLCAibmFtZSI6ICJCbGFja2xpc3QgaWdub3JlIElQL25ldHdvcmsgVVJMcyIsICJjb2x1bW5zIjogeyJwYyI6IDQsICJ0YWJsZXQiOiA2LCAibW9iaWxlIjogMTJ9LCAiZGlzYWJsZWQiOiBmYWxzZSwgInZhbHVlIjogIiIsICJtZXRob2QiOiAiZGVmYXVsdCIsICJwcmV2X3ZhbHVlIjogIiIsICJwb3BvdmVycyI6IFt7Imljb25OYW1lIjogImdsb2JlIiwgInRleHQiOiAiaW5wX3BvcG92ZXJfZ2xvYmFsIn0sIHsiaWNvbk5hbWUiOiAiaW5mbyIsICJ0ZXh0IjogIkxpc3Qgb2YgVVJMcywgc2VwYXJhdGVkIHdpdGggc3BhY2VzLCBjb250YWluaW5nIElQL25ldHdvcmsgdG8gaWdub3JlIGluIHRoZSBibGFja2xpc3QuIn1dfSwgIkJMQUNLTElTVF9JR05PUkVfUkROU19VUkxTIjogeyJjb250ZXh0IjogImdsb2JhbCIsICJkZWZhdWx0IjogIiIsICJoZWxwIjogIkxpc3Qgb2YgVVJMcywgc2VwYXJhdGVkIHdpdGggc3BhY2VzLCBjb250YWluaW5nIHJldmVyc2UgRE5TIHN1ZmZpeGVzIHRvIGlnbm9yZSBpbiB0aGUgYmxhY2tsaXN0LiIsICJpZCI6ICJibGFja2xpc3QtaWdub3JlLXJkbnMtdXJscyIsICJsYWJlbCI6ICJCbGFja2xpc3QgaWdub3JlIHJldmVyc2UgRE5TIFVSTHMiLCAicmVnZXgiOiAiXiggKigoaHR0cHM/OlxcL1xcL3xmaWxlOlxcL1xcL1xcLylbXFwtXFx3QDolLit+Iz1dK1tcXC1cXHdcXChcXCkhQDolKy5+Iz8mXFwvPSRdKikoPyEuKlxcMig/IS4pKSAqKSokIiwgInR5cGUiOiAidGV4dCIsICJjb250YWluZXJDbGFzcyI6ICJ6LTMiLCAicGF0dGVybiI6ICJeKCAqKChodHRwcz86XFwvXFwvfGZpbGU6XFwvXFwvXFwvKVtcXC1cXHdAOiUuK34jPV0rW1xcLVxcd1xcKFxcKSFAOiUrLn4jPyZcXC89JF0qKSg/IS4qXFwyKD8hLikpICopKiQiLCAiaW5wVHlwZSI6ICJpbnB1dCIsICJuYW1lIjogIkJsYWNrbGlzdCBpZ25vcmUgcmV2ZXJzZSBETlMgVVJMcyIsICJjb2x1bW5zIjogeyJwYyI6IDQsICJ0YWJsZXQiOiA2LCAibW9iaWxlIjogMTJ9LCAiZGlzYWJsZWQiOiBmYWxzZSwgInZhbHVlIjogIiIsICJtZXRob2QiOiAiZGVmYXVsdCIsICJwcmV2X3ZhbHVlIjogIiIsICJwb3BvdmVycyI6IFt7Imljb25OYW1lIjogImdsb2JlIiwgInRleHQiOiAiaW5wX3BvcG92ZXJfZ2xvYmFsIn0sIHsiaWNvbk5hbWUiOiAiaW5mbyIsICJ0ZXh0IjogIkxpc3Qgb2YgVVJMcywgc2VwYXJhdGVkIHdpdGggc3BhY2VzLCBjb250YWluaW5nIHJldmVyc2UgRE5TIHN1ZmZpeGVzIHRvIGlnbm9yZSBpbiB0aGUgYmxhY2tsaXN0LiJ9XX0sICJCTEFDS0xJU1RfSUdOT1JFX0FTTl9VUkxTIjogeyJjb250ZXh0IjogImdsb2JhbCIsICJkZWZhdWx0IjogIiIsICJoZWxwIjogIkxpc3Qgb2YgVVJMcywgc2VwYXJhdGVkIHdpdGggc3BhY2VzLCBjb250YWluaW5nIEFTTiB0byBpZ25vcmUgaW4gdGhlIGJsYWNrbGlzdC4iLCAiaWQiOiAiYmxhY2tsaXN0LWlnbm9yZS1hc24tdXJscyIsICJsYWJlbCI6ICJCbGFja2xpc3QgaWdub3JlIEFTTiBVUkxzIiwgInJlZ2V4IjogIl4oICooKGh0dHBzPzpcXC9cXC98ZmlsZTpcXC9cXC9cXC8pW1xcLVxcd0A6JS4rfiM9XStbXFwtXFx3XFwoXFwpIUA6JSsufiM/JlxcLz0kXSopKD8hLipcXDIoPyEuKSkgKikqJCIsICJ0eXBlIjogInRleHQiLCAiY29udGFpbmVyQ2xhc3MiOiAiei0yIiwgInBhdHRlcm4iOiAiXiggKigoaHR0cHM/OlxcL1xcL3xmaWxlOlxcL1xcL1xcLylbXFwtXFx3QDolLit+Iz1dK1tcXC1cXHdcXChcXCkhQDolKy5+Iz8mXFwvPSRdKikoPyEuKlxcMig/IS4pKSAqKSokIiwgImlucFR5cGUiOiAiaW5wdXQiLCAibmFtZSI6ICJCbGFja2xpc3QgaWdub3JlIEFTTiBVUkxzIiwgImNvbHVtbnMiOiB7InBjIjogNCwgInRhYmxldCI6IDYsICJtb2JpbGUiOiAxMn0sICJkaXNhYmxlZCI6IGZhbHNlLCAidmFsdWUiOiAiIiwgIm1ldGhvZCI6ICJkZWZhdWx0IiwgInByZXZfdmFsdWUiOiAiIiwgInBvcG92ZXJzIjogW3siaWNvbk5hbWUiOiAiZ2xvYmUiLCAidGV4dCI6ICJpbnBfcG9wb3Zlcl9nbG9iYWwifSwgeyJpY29uTmFtZSI6ICJpbmZvIiwgInRleHQiOiAiTGlzdCBvZiBVUkxzLCBzZXBhcmF0ZWQgd2l0aCBzcGFjZXMsIGNvbnRhaW5pbmcgQVNOIHRvIGlnbm9yZSBpbiB0aGUgYmxhY2tsaXN0LiJ9XX0sICJCTEFDS0xJU1RfSUdOT1JFX1VTRVJfQUdFTlRfVVJMUyI6IHsiY29udGV4dCI6ICJnbG9iYWwiLCAiZGVmYXVsdCI6ICIiLCAiaGVscCI6ICJMaXN0IG9mIFVSTHMsIHNlcGFyYXRlZCB3aXRoIHNwYWNlcywgY29udGFpbmluZyBVc2VyLUFnZW50IHRvIGlnbm9yZSBpbiB0aGUgYmxhY2tsaXN0LiIsICJpZCI6ICJibGFja2xpc3QtaWdub3JlLXVzZXItYWdlbnQtdXJscyIsICJsYWJlbCI6ICJCbGFja2xpc3QgaWdub3JlIFVzZXItQWdlbnQgVVJMcyIsICJyZWdleCI6ICJeKCAqKChodHRwcz86XFwvXFwvfGZpbGU6XFwvXFwvXFwvKVtcXC1cXHdAOiUuK34jPV0rW1xcLVxcd1xcKFxcKSFAOiUrLn4jPyZcXC89JF0qKSg/IS4qXFwyKD8hLikpICopKiQiLCAidHlwZSI6ICJ0ZXh0IiwgImNvbnRhaW5lckNsYXNzIjogInotMSIsICJwYXR0ZXJuIjogIl4oICooKGh0dHBzPzpcXC9cXC98ZmlsZTpcXC9cXC9cXC8pW1xcLVxcd0A6JS4rfiM9XStbXFwtXFx3XFwoXFwpIUA6JSsufiM/JlxcLz0kXSopKD8hLipcXDIoPyEuKSkgKikqJCIsICJpbnBUeXBlIjogImlucHV0IiwgIm5hbWUiOiAiQmxhY2tsaXN0IGlnbm9yZSBVc2VyLUFnZW50IFVSTHMiLCAiY29sdW1ucyI6IHsicGMiOiA0LCAidGFibGV0IjogNiwgIm1vYmlsZSI6IDEyfSwgImRpc2FibGVkIjogZmFsc2UsICJ2YWx1ZSI6ICIiLCAibWV0aG9kIjogImRlZmF1bHQiLCAicHJldl92YWx1ZSI6ICIiLCAicG9wb3ZlcnMiOiBbeyJpY29uTmFtZSI6ICJnbG9iZSIsICJ0ZXh0IjogImlucF9wb3BvdmVyX2dsb2JhbCJ9LCB7Imljb25OYW1lIjogImluZm8iLCAidGV4dCI6ICJMaXN0IG9mIFVSTHMsIHNlcGFyYXRlZCB3aXRoIHNwYWNlcywgY29udGFpbmluZyBVc2VyLUFnZW50IHRvIGlnbm9yZSBpbiB0aGUgYmxhY2tsaXN0LiJ9XX0sICJCTEFDS0xJU1RfSUdOT1JFX1VSSV9VUkxTIjogeyJjb250ZXh0IjogImdsb2JhbCIsICJkZWZhdWx0IjogIiIsICJoZWxwIjogIkxpc3Qgb2YgVVJMcywgc2VwYXJhdGVkIHdpdGggc3BhY2VzLCBjb250YWluaW5nIFVSSSB0byBpZ25vcmUgaW4gdGhlIGJsYWNrbGlzdC4iLCAiaWQiOiAiYmxhY2tsaXN0LWlnbm9yZS11cmktdXJscyIsICJsYWJlbCI6ICJCbGFja2xpc3QgaWdub3JlIFVSSSBVUkxzIiwgInJlZ2V4IjogIl4oICooKGh0dHBzPzpcXC9cXC98ZmlsZTpcXC9cXC9cXC8pW1xcLVxcd0A6JS4rfiM9XStbXFwtXFx3XFwoXFwpIUA6JSsufiM/JlxcLz0kXSopKD8hLipcXDIoPyEuKSkgKikqJCIsICJ0eXBlIjogInRleHQiLCAiY29udGFpbmVyQ2xhc3MiOiAiei0wIiwgInBhdHRlcm4iOiAiXiggKigoaHR0cHM/OlxcL1xcL3xmaWxlOlxcL1xcL1xcLylbXFwtXFx3QDolLit+Iz1dK1tcXC1cXHdcXChcXCkhQDolKy5+Iz8mXFwvPSRdKikoPyEuKlxcMig/IS4pKSAqKSokIiwgImlucFR5cGUiOiAiaW5wdXQiLCAibmFtZSI6ICJCbGFja2xpc3QgaWdub3JlIFVSSSBVUkxzIiwgImNvbHVtbnMiOiB7InBjIjogNCwgInRhYmxldCI6IDYsICJtb2JpbGUiOiAxMn0sICJkaXNhYmxlZCI6IGZhbHNlLCAidmFsdWUiOiAiIiwgIm1ldGhvZCI6ICJkZWZhdWx0IiwgInByZXZfdmFsdWUiOiAiIiwgInBvcG92ZXJzIjogW3siaWNvbk5hbWUiOiAiZ2xvYmUiLCAidGV4dCI6ICJpbnBfcG9wb3Zlcl9nbG9iYWwifSwgeyJpY29uTmFtZSI6ICJpbmZvIiwgInRleHQiOiAiTGlzdCBvZiBVUkxzLCBzZXBhcmF0ZWQgd2l0aCBzcGFjZXMsIGNvbnRhaW5pbmcgVVJJIHRvIGlnbm9yZSBpbiB0aGUgYmxhY2tsaXN0LiJ9XX19LCAiY2hlY2tzdW0iOiBudWxsfSwgeyJpZCI6ICJicm90bGkiLCAic3RyZWFtIjogIm5vIiwgIm5hbWUiOiAiQnJvdGxpIiwgImRlc2NyaXB0aW9uIjogIkNvbXByZXNzIEhUVFAgcmVxdWVzdHMgd2l0aCB0aGUgYnJvdGxpIGFsZ29yaXRobS4iLCAidmVyc2lvbiI6ICIxLjAiLCAidHlwZSI6ICJjb3JlIiwgIm1ldGhvZCI6ICJtYW51YWwiLCAicGFnZSI6IGZhbHNlLCAic2V0dGluZ3MiOiB7IlVTRV9CUk9UTEkiOiB7ImNvbnRleHQiOiAibXVsdGlzaXRlIiwgImRlZmF1bHQiOiAibm8iLCAiaGVscCI6ICJVc2UgYnJvdGxpIiwgImlkIjogInVzZS1icm90bGkiLCAibGFiZWwiOiAiVXNlIGJyb3RsaSIsICJyZWdleCI6ICJeKHllc3xubykkIiwgInR5cGUiOiAiY2hlY2siLCAiY29udGFpbmVyQ2xhc3MiOiAiei0zIiwgInBhdHRlcm4iOiAiXih5ZXN8bm8pJCIsICJpbnBUeXBlIjogImNoZWNrYm94IiwgIm5hbWUiOiAiVXNlIGJyb3RsaSIsICJjb2x1bW5zIjogeyJwYyI6IDQsICJ0YWJsZXQiOiA2LCAibW9iaWxlIjogMTJ9LCAiZGlzYWJsZWQiOiBmYWxzZSwgInZhbHVlIjogIm5vIiwgIm1ldGhvZCI6ICJkZWZhdWx0IiwgInByZXZfdmFsdWUiOiAibm8iLCAicG9wb3ZlcnMiOiBbeyJpY29uTmFtZSI6ICJkaXNrIiwgInRleHQiOiAiaW5wX3BvcG92ZXJfbXVsdGlzaXRlIn0sIHsiaWNvbk5hbWUiOiAiaW5mbyIsICJ0ZXh0IjogIlVzZSBicm90bGkifV19LCAiQlJPVExJX1RZUEVTIjogeyJjb250ZXh0IjogIm11bHRpc2l0ZSIsICJkZWZhdWx0IjogImFwcGxpY2F0aW9uL2F0b20reG1sIGFwcGxpY2F0aW9uL2phdmFzY3JpcHQgYXBwbGljYXRpb24vanNvbiBhcHBsaWNhdGlvbi9yc3MreG1sIGFwcGxpY2F0aW9uL3ZuZC5tcy1mb250b2JqZWN0IGFwcGxpY2F0aW9uL3gtZm9udC1vcGVudHlwZSBhcHBsaWNhdGlvbi94LWZvbnQtdHJ1ZXR5cGUgYXBwbGljYXRpb24veC1mb250LXR0ZiBhcHBsaWNhdGlvbi94LWphdmFzY3JpcHQgYXBwbGljYXRpb24veGh0bWwreG1sIGFwcGxpY2F0aW9uL3htbCBmb250L2VvdCBmb250L29wZW50eXBlIGZvbnQvb3RmIGZvbnQvdHJ1ZXR5cGUgaW1hZ2Uvc3ZnK3htbCBpbWFnZS92bmQubWljcm9zb2Z0Lmljb24gaW1hZ2UveC1pY29uIGltYWdlL3gtd2luLWJpdG1hcCB0ZXh0L2NzcyB0ZXh0L2phdmFzY3JpcHQgdGV4dC9wbGFpbiB0ZXh0L3htbCIsICJoZWxwIjogIkxpc3Qgb2YgTUlNRSB0eXBlcyB0aGF0IHdpbGwgYmUgY29tcHJlc3NlZCB3aXRoIGJyb3RsaS4iLCAiaWQiOiAiYnJvdGxpLXR5cGVzIiwgImxhYmVsIjogIk1JTUUgdHlwZXMiLCAicmVnZXgiOiAiXig/ISApKCA/KFtcXC1cXHcuXSsvW1xcLVxcdy4rXSspKD8hLipcXDIoPyEuKSkpKyQiLCAidHlwZSI6ICJ0ZXh0IiwgImNvbnRhaW5lckNsYXNzIjogInotMiIsICJwYXR0ZXJuIjogIl4oPyEgKSggPyhbXFwtXFx3Ll0rL1tcXC1cXHcuK10rKSg/IS4qXFwyKD8hLikpKSskIiwgImlucFR5cGUiOiAiaW5wdXQiLCAibmFtZSI6ICJNSU1FIHR5cGVzIiwgImNvbHVtbnMiOiB7InBjIjogNCwgInRhYmxldCI6IDYsICJtb2JpbGUiOiAxMn0sICJkaXNhYmxlZCI6IGZhbHNlLCAidmFsdWUiOiAiYXBwbGljYXRpb24vYXRvbSt4bWwgYXBwbGljYXRpb24vamF2YXNjcmlwdCBhcHBsaWNhdGlvbi9qc29uIGFwcGxpY2F0aW9uL3Jzcyt4bWwgYXBwbGljYXRpb24vdm5kLm1zLWZvbnRvYmplY3QgYXBwbGljYXRpb24veC1mb250LW9wZW50eXBlIGFwcGxpY2F0aW9uL3gtZm9udC10cnVldHlwZSBhcHBsaWNhdGlvbi94LWZvbnQtdHRmIGFwcGxpY2F0aW9uL3gtamF2YXNjcmlwdCBhcHBsaWNhdGlvbi94aHRtbCt4bWwgYXBwbGljYXRpb24veG1sIGZvbnQvZW90IGZvbnQvb3BlbnR5cGUgZm9udC9vdGYgZm9udC90cnVldHlwZSBpbWFnZS9zdmcreG1sIGltYWdlL3ZuZC5taWNyb3NvZnQuaWNvbiBpbWFnZS94LWljb24gaW1hZ2UveC13aW4tYml0bWFwIHRleHQvY3NzIHRleHQvamF2YXNjcmlwdCB0ZXh0L3BsYWluIHRleHQveG1sIiwgIm1ldGhvZCI6ICJkZWZhdWx0IiwgInByZXZfdmFsdWUiOiAiYXBwbGljYXRpb24vYXRvbSt4bWwgYXBwbGljYXRpb24vamF2YXNjcmlwdCBhcHBsaWNhdGlvbi9qc29uIGFwcGxpY2F0aW9uL3Jzcyt4bWwgYXBwbGljYXRpb24vdm5kLm1zLWZvbnRvYmplY3QgYXBwbGljYXRpb24veC1mb250LW9wZW50eXBlIGFwcGxpY2F0aW9uL3gtZm9udC10cnVldHlwZSBhcHBsaWNhdGlvbi94LWZvbnQtdHRmIGFwcGxpY2F0aW9uL3gtamF2YXNjcmlwdCBhcHBsaWNhdGlvbi94aHRtbCt4bWwgYXBwbGljYXRpb24veG1sIGZvbnQvZW90IGZvbnQvb3BlbnR5cGUgZm9udC9vdGYgZm9udC90cnVldHlwZSBpbWFnZS9zdmcreG1sIGltYWdlL3ZuZC5taWNyb3NvZnQuaWNvbiBpbWFnZS94LWljb24gaW1hZ2UveC13aW4tYml0bWFwIHRleHQvY3NzIHRleHQvamF2YXNjcmlwdCB0ZXh0L3BsYWluIHRleHQveG1sIiwgInBvcG92ZXJzIjogW3siaWNvbk5hbWUiOiAiZGlzayIsICJ0ZXh0IjogImlucF9wb3BvdmVyX211bHRpc2l0ZSJ9LCB7Imljb25OYW1lIjogImluZm8iLCAidGV4dCI6ICJMaXN0IG9mIE1JTUUgdHlwZXMgdGhhdCB3aWxsIGJlIGNvbXByZXNzZWQgd2l0aCBicm90bGkuIn1dfSwgIkJST1RMSV9NSU5fTEVOR1RIIjogeyJjb250ZXh0IjogIm11bHRpc2l0ZSIsICJkZWZhdWx0IjogIjEwMDAiLCAiaGVscCI6ICJNaW5pbXVtIGxlbmd0aCBmb3IgYnJvdGxpIGNvbXByZXNzaW9uLiIsICJpZCI6ICJicm90bGktbWluLWxlbmd0aCIsICJsYWJlbCI6ICJNaW5pbXVtIGxlbmd0aCIsICJyZWdleCI6ICJeXFxkKyIsICJ0eXBlIjogInRleHQiLCAiY29udGFpbmVyQ2xhc3MiOiAiei0xIiwgInBhdHRlcm4iOiAiXlxcZCsiLCAiaW5wVHlwZSI6ICJpbnB1dCIsICJuYW1lIjogIk1pbmltdW0gbGVuZ3RoIiwgImNvbHVtbnMiOiB7InBjIjogNCwgInRhYmxldCI6IDYsICJtb2JpbGUiOiAxMn0sICJkaXNhYmxlZCI6IGZhbHNlLCAidmFsdWUiOiAiMTAwMCIsICJtZXRob2QiOiAiZGVmYXVsdCIsICJwcmV2X3ZhbHVlIjogIjEwMDAiLCAicG9wb3ZlcnMiOiBbeyJpY29uTmFtZSI6ICJkaXNrIiwgInRleHQiOiAiaW5wX3BvcG92ZXJfbXVsdGlzaXRlIn0sIHsiaWNvbk5hbWUiOiAiaW5mbyIsICJ0ZXh0IjogIk1pbmltdW0gbGVuZ3RoIGZvciBicm90bGkgY29tcHJlc3Npb24uIn1dfSwgIkJST1RMSV9DT01QX0xFVkVMIjogeyJjb250ZXh0IjogIm11bHRpc2l0ZSIsICJkZWZhdWx0IjogIjYiLCAiaGVscCI6ICJUaGUgY29tcHJlc3Npb24gbGV2ZWwgb2YgdGhlIGJyb3RsaSBhbGdvcml0aG0uIiwgImlkIjogImJyb3RsaS1jb21wLWxldmVsIiwgImxhYmVsIjogIkNvbXByZXNzaW9uIGxldmVsIiwgInJlZ2V4IjogIl4oWzAyLTldfDFbMDFdPykkIiwgInR5cGUiOiAic2VsZWN0IiwgImNvbnRhaW5lckNsYXNzIjogInotMCIsICJwYXR0ZXJuIjogIl4oWzAyLTldfDFbMDFdPykkIiwgImlucFR5cGUiOiAic2VsZWN0IiwgIm5hbWUiOiAiQ29tcHJlc3Npb24gbGV2ZWwiLCAidmFsdWVzIjogWyIwIiwgIjEiLCAiMTAiLCAiMTEiLCAiMiIsICIzIiwgIjQiLCAiNSIsICI2IiwgIjciLCAiOCIsICI5Il0sICJjb2x1bW5zIjogeyJwYyI6IDQsICJ0YWJsZXQiOiA2LCAibW9iaWxlIjogMTJ9LCAiZGlzYWJsZWQiOiBmYWxzZSwgInZhbHVlIjogIjYiLCAibWV0aG9kIjogImRlZmF1bHQiLCAicHJldl92YWx1ZSI6ICI2IiwgInBvcG92ZXJzIjogW3siaWNvbk5hbWUiOiAiZGlzayIsICJ0ZXh0IjogImlucF9wb3BvdmVyX211bHRpc2l0ZSJ9LCB7Imljb25OYW1lIjogImluZm8iLCAidGV4dCI6ICJUaGUgY29tcHJlc3Npb24gbGV2ZWwgb2YgdGhlIGJyb3RsaSBhbGdvcml0aG0uIn1dfX0sICJjaGVja3N1bSI6IG51bGx9LCB7ImlkIjogImJ1bmtlcm5ldCIsICJzdHJlYW0iOiAieWVzIiwgIm5hbWUiOiAiQnVua2VyTmV0IiwgImRlc2NyaXB0aW9uIjogIlNoYXJlIHRocmVhdCBkYXRhIHdpdGggb3RoZXIgQnVua2VyV2ViIGluc3RhbmNlcyB2aWEgQnVua2VyTmV0LiIsICJ2ZXJzaW9uIjogIjEuMCIsICJ0eXBlIjogImNvcmUiLCAibWV0aG9kIjogIm1hbnVhbCIsICJwYWdlIjogdHJ1ZSwgInNldHRpbmdzIjogeyJVU0VfQlVOS0VSTkVUIjogeyJjb250ZXh0IjogIm11bHRpc2l0ZSIsICJkZWZhdWx0IjogInllcyIsICJoZWxwIjogIkFjdGl2YXRlIEJ1bmtlck5ldCBmZWF0dXJlLiIsICJpZCI6ICJ1c2UtYnVua2VybmV0IiwgImxhYmVsIjogIkFjdGl2YXRlIEJ1bmtlck5ldCIsICJyZWdleCI6ICJeKHllc3xubykkIiwgInR5cGUiOiAiY2hlY2siLCAiY29udGFpbmVyQ2xhc3MiOiAiei0xIiwgInBhdHRlcm4iOiAiXih5ZXN8bm8pJCIsICJpbnBUeXBlIjogImNoZWNrYm94IiwgIm5hbWUiOiAiQWN0aXZhdGUgQnVua2VyTmV0IiwgImNvbHVtbnMiOiB7InBjIjogNCwgInRhYmxldCI6IDYsICJtb2JpbGUiOiAxMn0sICJkaXNhYmxlZCI6IHRydWUsICJ2YWx1ZSI6ICJubyIsICJtZXRob2QiOiAic2NoZWR1bGVyIiwgInByZXZfdmFsdWUiOiAibm8iLCAicG9wb3ZlcnMiOiBbeyJpY29uTmFtZSI6ICJ0cmVzcGFzcyIsICJ0ZXh0IjogImlucF9wb3BvdmVyX21ldGhvZF9kaXNhYmxlZCJ9LCB7Imljb25OYW1lIjogImRpc2siLCAidGV4dCI6ICJpbnBfcG9wb3Zlcl9tdWx0aXNpdGUifSwgeyJpY29uTmFtZSI6ICJpbmZvIiwgInRleHQiOiAiQWN0aXZhdGUgQnVua2VyTmV0IGZlYXR1cmUuIn1dfSwgIkJVTktFUk5FVF9TRVJWRVIiOiB7ImNvbnRleHQiOiAiZ2xvYmFsIiwgImRlZmF1bHQiOiAiaHR0cHM6Ly9hcGkuYnVua2Vyd2ViLmlvIiwgImhlbHAiOiAiQWRkcmVzcyBvZiB0aGUgQnVua2VyTmV0IEFQSS4iLCAiaWQiOiAiYnVua2VybmV0LXNlcnZlciIsICJsYWJlbCI6ICJCdW5rZXJOZXQgc2VydmVyIiwgInJlZ2V4IjogIl5odHRwcz86XFwvXFwvW1xcLVxcd0A6JS4rfiM9XStbXFwtXFx3XFwoXFwpIUA6JSsufiM/JlxcLz0kXSokIiwgInR5cGUiOiAidGV4dCIsICJjb250YWluZXJDbGFzcyI6ICJ6LTAiLCAicGF0dGVybiI6ICJeaHR0cHM/OlxcL1xcL1tcXC1cXHdAOiUuK34jPV0rW1xcLVxcd1xcKFxcKSFAOiUrLn4jPyZcXC89JF0qJCIsICJpbnBUeXBlIjogImlucHV0IiwgIm5hbWUiOiAiQnVua2VyTmV0IHNlcnZlciIsICJjb2x1bW5zIjogeyJwYyI6IDQsICJ0YWJsZXQiOiA2LCAibW9iaWxlIjogMTJ9LCAiZGlzYWJsZWQiOiBmYWxzZSwgInZhbHVlIjogImh0dHBzOi8vYXBpLmJ1bmtlcndlYi5pbyIsICJtZXRob2QiOiAiZGVmYXVsdCIsICJwcmV2X3ZhbHVlIjogImh0dHBzOi8vYXBpLmJ1bmtlcndlYi5pbyIsICJwb3BvdmVycyI6IFt7Imljb25OYW1lIjogImdsb2JlIiwgInRleHQiOiAiaW5wX3BvcG92ZXJfZ2xvYmFsIn0sIHsiaWNvbk5hbWUiOiAiaW5mbyIsICJ0ZXh0IjogIkFkZHJlc3Mgb2YgdGhlIEJ1bmtlck5ldCBBUEkuIn1dfX0sICJjaGVja3N1bSI6IG51bGx9LCB7ImlkIjogImNvcnMiLCAic3RyZWFtIjogIm5vIiwgIm5hbWUiOiAiQ09SUyIsICJkZXNjcmlwdGlvbiI6ICJDcm9zcy1PcmlnaW4gUmVzb3VyY2UgU2hhcmluZy4iLCAidmVyc2lvbiI6ICIxLjAiLCAidHlwZSI6ICJjb3JlIiwgIm1ldGhvZCI6ICJtYW51YWwiLCAicGFnZSI6IHRydWUsICJzZXR0aW5ncyI6IHsiVVNFX0NPUlMiOiB7ImNvbnRleHQiOiAibXVsdGlzaXRlIiwgImRlZmF1bHQiOiAibm8iLCAiaGVscCI6ICJVc2UgQ09SUyIsICJpZCI6ICJ1c2UtY29ycyIsICJsYWJlbCI6ICJVc2UgQ09SUyIsICJyZWdleCI6ICJeKHllc3xubykkIiwgInR5cGUiOiAiY2hlY2siLCAiY29udGFpbmVyQ2xhc3MiOiAiei0xMCIsICJwYXR0ZXJuIjogIl4oeWVzfG5vKSQiLCAiaW5wVHlwZSI6ICJjaGVja2JveCIsICJuYW1lIjogIlVzZSBDT1JTIiwgImNvbHVtbnMiOiB7InBjIjogNCwgInRhYmxldCI6IDYsICJtb2JpbGUiOiAxMn0sICJkaXNhYmxlZCI6IGZhbHNlLCAidmFsdWUiOiAibm8iLCAibWV0aG9kIjogImRlZmF1bHQiLCAicHJldl92YWx1ZSI6ICJubyIsICJwb3BvdmVycyI6IFt7Imljb25OYW1lIjogImRpc2siLCAidGV4dCI6ICJpbnBfcG9wb3Zlcl9tdWx0aXNpdGUifSwgeyJpY29uTmFtZSI6ICJpbmZvIiwgInRleHQiOiAiVXNlIENPUlMifV19LCAiQ09SU19BTExPV19PUklHSU4iOiB7ImNvbnRleHQiOiAibXVsdGlzaXRlIiwgImRlZmF1bHQiOiAiKiIsICJoZWxwIjogIkFsbG93ZWQgb3JpZ2lucyB0byBtYWtlIENPUlMgcmVxdWVzdHMgOiBQQ1JFIHJlZ2V4IG9yICouIiwgImlkIjogImNvcnMtYWxsb3ctb3JpZ2luIiwgImxhYmVsIjogIkFsbG93ZWQgb3JpZ2lucyIsICJyZWdleCI6ICJeLiokIiwgInR5cGUiOiAidGV4dCIsICJjb250YWluZXJDbGFzcyI6ICJ6LTkiLCAicGF0dGVybiI6ICJeLiokIiwgImlucFR5cGUiOiAiaW5wdXQiLCAibmFtZSI6ICJBbGxvd2VkIG9yaWdpbnMiLCAiY29sdW1ucyI6IHsicGMiOiA0LCAidGFibGV0IjogNiwgIm1vYmlsZSI6IDEyfSwgImRpc2FibGVkIjogZmFsc2UsICJ2YWx1ZSI6ICJzZWxmIiwgIm1ldGhvZCI6ICJkZWZhdWx0IiwgInByZXZfdmFsdWUiOiAic2VsZiIsICJwb3BvdmVycyI6IFt7Imljb25OYW1lIjogImRpc2siLCAidGV4dCI6ICJpbnBfcG9wb3Zlcl9tdWx0aXNpdGUifSwgeyJpY29uTmFtZSI6ICJpbmZvIiwgInRleHQiOiAiQWxsb3dlZCBvcmlnaW5zIHRvIG1ha2UgQ09SUyByZXF1ZXN0cyA6IFBDUkUgcmVnZXggb3IgKi4ifV19LCAiQ09SU19BTExPV19NRVRIT0RTIjogeyJjb250ZXh0IjogIm11bHRpc2l0ZSIsICJkZWZhdWx0IjogIkdFVCwgUE9TVCwgT1BUSU9OUyIsICJoZWxwIjogIlZhbHVlIG9mIHRoZSBBY2Nlc3MtQ29udHJvbC1BbGxvdy1NZXRob2RzIGhlYWRlci4iLCAiaWQiOiAiY29ycy1hbGxvdy1tZXRob2RzIiwgImxhYmVsIjogIkFjY2Vzcy1Db250cm9sLUFsbG93LU1ldGhvZHMgdmFsdWUiLCAicmVnZXgiOiAiXihcXCp8KD8hWywgXSkoLD8gPyhHRVR8SEVBRHxQT1NUfFBVVHxERUxFVEV8Q09OTkVDVHxPUFRJT05TfFRSQUNFfFBBVENIKSg/IS4qXFwzKSkqKT8kIiwgInR5cGUiOiAidGV4dCIsICJjb250YWluZXJDbGFzcyI6ICJ6LTgiLCAicGF0dGVybiI6ICJeKFxcKnwoPyFbLCBdKSgsPyA/KEdFVHxIRUFEfFBPU1R8UFVUfERFTEVURXxDT05ORUNUfE9QVElPTlN8VFJBQ0V8UEFUQ0gpKD8hLipcXDMpKSopPyQiLCAiaW5wVHlwZSI6ICJpbnB1dCIsICJuYW1lIjogIkFjY2Vzcy1Db250cm9sLUFsbG93LU1ldGhvZHMgdmFsdWUiLCAiY29sdW1ucyI6IHsicGMiOiA0LCAidGFibGV0IjogNiwgIm1vYmlsZSI6IDEyfSwgImRpc2FibGVkIjogZmFsc2UsICJ2YWx1ZSI6ICJHRVQsIFBPU1QsIE9QVElPTlMiLCAibWV0aG9kIjogImRlZmF1bHQiLCAicHJldl92YWx1ZSI6ICJHRVQsIFBPU1QsIE9QVElPTlMiLCAicG9wb3ZlcnMiOiBbeyJpY29uTmFtZSI6ICJkaXNrIiwgInRleHQiOiAiaW5wX3BvcG92ZXJfbXVsdGlzaXRlIn0sIHsiaWNvbk5hbWUiOiAiaW5mbyIsICJ0ZXh0IjogIlZhbHVlIG9mIHRoZSBBY2Nlc3MtQ29udHJvbC1BbGxvdy1NZXRob2RzIGhlYWRlci4ifV19LCAiQ09SU19BTExPV19IRUFERVJTIjogeyJjb250ZXh0IjogIm11bHRpc2l0ZSIsICJkZWZhdWx0IjogIkROVCxVc2VyLUFnZW50LFgtUmVxdWVzdGVkLVdpdGgsSWYtTW9kaWZpZWQtU2luY2UsQ2FjaGUtQ29udHJvbCxDb250ZW50LVR5cGUsUmFuZ2UiLCAiaGVscCI6ICJWYWx1ZSBvZiB0aGUgQWNjZXNzLUNvbnRyb2wtQWxsb3ctSGVhZGVycyBoZWFkZXIuIiwgImlkIjogImNvcnMtYWxsb3ctaGVhZGVycyIsICJsYWJlbCI6ICJBY2Nlc3MtQ29udHJvbC1BbGxvdy1IZWFkZXJzIHZhbHVlIiwgInJlZ2V4IjogIl4oXFwqfCg/IVssIF0pKCw/ID8oW1xcd1xcLV0rKSg/IS4qXFwzKD8hLikpKSopPyQiLCAidHlwZSI6ICJ0ZXh0IiwgImNvbnRhaW5lckNsYXNzIjogInotNyIsICJwYXR0ZXJuIjogIl4oXFwqfCg/IVssIF0pKCw/ID8oW1xcd1xcLV0rKSg/IS4qXFwzKD8hLikpKSopPyQiLCAiaW5wVHlwZSI6ICJpbnB1dCIsICJuYW1lIjogIkFjY2Vzcy1Db250cm9sLUFsbG93LUhlYWRlcnMgdmFsdWUiLCAiY29sdW1ucyI6IHsicGMiOiA0LCAidGFibGV0IjogNiwgIm1vYmlsZSI6IDEyfSwgImRpc2FibGVkIjogZmFsc2UsICJ2YWx1ZSI6ICJETlQsVXNlci1BZ2VudCxYLVJlcXVlc3RlZC1XaXRoLElmLU1vZGlmaWVkLVNpbmNlLENhY2hlLUNvbnRyb2wsQ29udGVudC1UeXBlLFJhbmdlIiwgIm1ldGhvZCI6ICJkZWZhdWx0IiwgInByZXZfdmFsdWUiOiAiRE5ULFVzZXItQWdlbnQsWC1SZXF1ZXN0ZWQtV2l0aCxJZi1Nb2RpZmllZC1TaW5jZSxDYWNoZS1Db250cm9sLENvbnRlbnQtVHlwZSxSYW5nZSIsICJwb3BvdmVycyI6IFt7Imljb25OYW1lIjogImRpc2siLCAidGV4dCI6ICJpbnBfcG9wb3Zlcl9tdWx0aXNpdGUifSwgeyJpY29uTmFtZSI6ICJpbmZvIiwgInRleHQiOiAiVmFsdWUgb2YgdGhlIEFjY2Vzcy1Db250cm9sLUFsbG93LUhlYWRlcnMgaGVhZGVyLiJ9XX0sICJDT1JTX0FMTE9XX0NSRURFTlRJQUxTIjogeyJjb250ZXh0IjogIm11bHRpc2l0ZSIsICJkZWZhdWx0IjogIm5vIiwgImhlbHAiOiAiU2VuZCB0aGUgQWNjZXNzLUNvbnRyb2wtQWxsb3ctQ3JlZGVudGlhbHMgaGVhZGVyLiIsICJpZCI6ICJjb3JzLWFsbG93LWNyZWRlbnRpYWxzIiwgImxhYmVsIjogIlNlbmQgQWNjZXNzLUNvbnRyb2wtQWxsb3ctQ3JlZGVudGlhbHMiLCAicmVnZXgiOiAiXih5ZXN8bm8pJCIsICJ0eXBlIjogImNoZWNrIiwgImNvbnRhaW5lckNsYXNzIjogInotNiIsICJwYXR0ZXJuIjogIl4oeWVzfG5vKSQiLCAiaW5wVHlwZSI6ICJjaGVja2JveCIsICJuYW1lIjogIlNlbmQgQWNjZXNzLUNvbnRyb2wtQWxsb3ctQ3JlZGVudGlhbHMiLCAiY29sdW1ucyI6IHsicGMiOiA0LCAidGFibGV0IjogNiwgIm1vYmlsZSI6IDEyfSwgImRpc2FibGVkIjogZmFsc2UsICJ2YWx1ZSI6ICJubyIsICJtZXRob2QiOiAiZGVmYXVsdCIsICJwcmV2X3ZhbHVlIjogIm5vIiwgInBvcG92ZXJzIjogW3siaWNvbk5hbWUiOiAiZGlzayIsICJ0ZXh0IjogImlucF9wb3BvdmVyX211bHRpc2l0ZSJ9LCB7Imljb25OYW1lIjogImluZm8iLCAidGV4dCI6ICJTZW5kIHRoZSBBY2Nlc3MtQ29udHJvbC1BbGxvdy1DcmVkZW50aWFscyBoZWFkZXIuIn1dfSwgIkNPUlNfRVhQT1NFX0hFQURFUlMiOiB7ImNvbnRleHQiOiAibXVsdGlzaXRlIiwgImRlZmF1bHQiOiAiQ29udGVudC1MZW5ndGgsQ29udGVudC1SYW5nZSIsICJoZWxwIjogIlZhbHVlIG9mIHRoZSBBY2Nlc3MtQ29udHJvbC1FeHBvc2UtSGVhZGVycyBoZWFkZXIuIiwgImlkIjogImNvcnMtZXhwb3NlLWhlYWRlcnMiLCAibGFiZWwiOiAiQWNjZXNzLUNvbnRyb2wtRXhwb3NlLUhlYWRlcnMgdmFsdWUiLCAicmVnZXgiOiAiXihcXCp8KD8hWywgXSspKCw/ID8oW1xcd1xcLV0rKSg/IS4qXFwzKD8hLikpKSopPyQiLCAidHlwZSI6ICJ0ZXh0IiwgImNvbnRhaW5lckNsYXNzIjogInotNSIsICJwYXR0ZXJuIjogIl4oXFwqfCg/IVssIF0rKSgsPyA/KFtcXHdcXC1dKykoPyEuKlxcMyg/IS4pKSkqKT8kIiwgImlucFR5cGUiOiAiaW5wdXQiLCAibmFtZSI6ICJBY2Nlc3MtQ29udHJvbC1FeHBvc2UtSGVhZGVycyB2YWx1ZSIsICJjb2x1bW5zIjogeyJwYyI6IDQsICJ0YWJsZXQiOiA2LCAibW9iaWxlIjogMTJ9LCAiZGlzYWJsZWQiOiBmYWxzZSwgInZhbHVlIjogIkNvbnRlbnQtTGVuZ3RoLENvbnRlbnQtUmFuZ2UiLCAibWV0aG9kIjogImRlZmF1bHQiLCAicHJldl92YWx1ZSI6ICJDb250ZW50LUxlbmd0aCxDb250ZW50LVJhbmdlIiwgInBvcG92ZXJzIjogW3siaWNvbk5hbWUiOiAiZGlzayIsICJ0ZXh0IjogImlucF9wb3BvdmVyX211bHRpc2l0ZSJ9LCB7Imljb25OYW1lIjogImluZm8iLCAidGV4dCI6ICJWYWx1ZSBvZiB0aGUgQWNjZXNzLUNvbnRyb2wtRXhwb3NlLUhlYWRlcnMgaGVhZGVyLiJ9XX0sICJDUk9TU19PUklHSU5fT1BFTkVSX1BPTElDWSI6IHsiY29udGV4dCI6ICJtdWx0aXNpdGUiLCAiZGVmYXVsdCI6ICIiLCAiaGVscCI6ICJWYWx1ZSBmb3IgdGhlIENyb3NzLU9yaWdpbi1PcGVuZXItUG9saWN5IGhlYWRlci4iLCAiaWQiOiAiY3Jvc3Mtb3JpZ2luLW9wZW5lci1wb2xpY3kiLCAibGFiZWwiOiAiQ3Jvc3MtT3JpZ2luLU9wZW5lci1Qb2xpY3kiLCAicmVnZXgiOiAiXih1bnNhZmUtbm9uZXxzYW1lLW9yaWdpbi1hbGxvdy1wb3B1cHN8c2FtZS1vcmlnaW4pPyQiLCAidHlwZSI6ICJzZWxlY3QiLCAiY29udGFpbmVyQ2xhc3MiOiAiei00IiwgInBhdHRlcm4iOiAiXih1bnNhZmUtbm9uZXxzYW1lLW9yaWdpbi1hbGxvdy1wb3B1cHN8c2FtZS1vcmlnaW4pPyQiLCAiaW5wVHlwZSI6ICJzZWxlY3QiLCAibmFtZSI6ICJDcm9zcy1PcmlnaW4tT3BlbmVyLVBvbGljeSIsICJ2YWx1ZXMiOiBbIiIsICJzYW1lLW9yaWdpbiIsICJzYW1lLW9yaWdpbi1hbGxvdy1wb3B1cHMiLCAidW5zYWZlLW5vbmUiXSwgImNvbHVtbnMiOiB7InBjIjogNCwgInRhYmxldCI6IDYsICJtb2JpbGUiOiAxMn0sICJkaXNhYmxlZCI6IGZhbHNlLCAidmFsdWUiOiAic2FtZS1vcmlnaW4iLCAibWV0aG9kIjogImRlZmF1bHQiLCAicHJldl92YWx1ZSI6ICJzYW1lLW9yaWdpbiIsICJwb3BvdmVycyI6IFt7Imljb25OYW1lIjogImRpc2siLCAidGV4dCI6ICJpbnBfcG9wb3Zlcl9tdWx0aXNpdGUifSwgeyJpY29uTmFtZSI6ICJpbmZvIiwgInRleHQiOiAiVmFsdWUgZm9yIHRoZSBDcm9zcy1PcmlnaW4tT3BlbmVyLVBvbGljeSBoZWFkZXIuIn1dfSwgIkNST1NTX09SSUdJTl9FTUJFRERFUl9QT0xJQ1kiOiB7ImNvbnRleHQiOiAibXVsdGlzaXRlIiwgImRlZmF1bHQiOiAiIiwgImhlbHAiOiAiVmFsdWUgZm9yIHRoZSBDcm9zcy1PcmlnaW4tRW1iZWRkZXItUG9saWN5IGhlYWRlci4iLCAiaWQiOiAiY3Jvc3Mtb3JpZ2luLWVtYmVkZGVyLXBvbGljeSIsICJsYWJlbCI6ICJDcm9zcy1PcmlnaW4tRW1iZWRkZXItUG9saWN5IiwgInJlZ2V4IjogIl4odW5zYWZlLW5vbmV8cmVxdWlyZS1jb3JwfGNyZWRlbnRpYWxsZXNzKT8kIiwgInR5cGUiOiAic2VsZWN0IiwgImNvbnRhaW5lckNsYXNzIjogInotMyIsICJwYXR0ZXJuIjogIl4odW5zYWZlLW5vbmV8cmVxdWlyZS1jb3JwfGNyZWRlbnRpYWxsZXNzKT8kIiwgImlucFR5cGUiOiAic2VsZWN0IiwgIm5hbWUiOiAiQ3Jvc3MtT3JpZ2luLUVtYmVkZGVyLVBvbGljeSIsICJ2YWx1ZXMiOiBbIiIsICJjcmVkZW50aWFsbGVzcyIsICJyZXF1aXJlLWNvcnAiLCAidW5zYWZlLW5vbmUiXSwgImNvbHVtbnMiOiB7InBjIjogNCwgInRhYmxldCI6IDYsICJtb2JpbGUiOiAxMn0sICJkaXNhYmxlZCI6IGZhbHNlLCAidmFsdWUiOiAicmVxdWlyZS1jb3JwIiwgIm1ldGhvZCI6ICJkZWZhdWx0IiwgInByZXZfdmFsdWUiOiAicmVxdWlyZS1jb3JwIiwgInBvcG92ZXJzIjogW3siaWNvbk5hbWUiOiAiZGlzayIsICJ0ZXh0IjogImlucF9wb3BvdmVyX211bHRpc2l0ZSJ9LCB7Imljb25OYW1lIjogImluZm8iLCAidGV4dCI6ICJWYWx1ZSBmb3IgdGhlIENyb3NzLU9yaWdpbi1FbWJlZGRlci1Qb2xpY3kgaGVhZGVyLiJ9XX0sICJDUk9TU19PUklHSU5fUkVTT1VSQ0VfUE9MSUNZIjogeyJjb250ZXh0IjogIm11bHRpc2l0ZSIsICJkZWZhdWx0IjogIiIsICJoZWxwIjogIlZhbHVlIGZvciB0aGUgQ3Jvc3MtT3JpZ2luLVJlc291cmNlLVBvbGljeSBoZWFkZXIuIiwgImlkIjogImNyb3NzLW9yaWdpbi1yZXNvdXJjZS1wb2xpY3kiLCAibGFiZWwiOiAiQ3Jvc3MtT3JpZ2luLVJlc291cmNlLVBvbGljeSIsICJyZWdleCI6ICJeKHNhbWUtc2l0ZXxzYW1lLW9yaWdpbnxjcm9zcy1vcmlnaW4pPyQiLCAidHlwZSI6ICJzZWxlY3QiLCAiY29udGFpbmVyQ2xhc3MiOiAiei0yIiwgInBhdHRlcm4iOiAiXihzYW1lLXNpdGV8c2FtZS1vcmlnaW58Y3Jvc3Mtb3JpZ2luKT8kIiwgImlucFR5cGUiOiAic2VsZWN0IiwgIm5hbWUiOiAiQ3Jvc3MtT3JpZ2luLVJlc291cmNlLVBvbGljeSIsICJ2YWx1ZXMiOiBbIiIsICJjcm9zcy1vcmlnaW4iLCAic2FtZS1vcmlnaW4iLCAic2FtZS1zaXRlIl0sICJjb2x1bW5zIjogeyJwYyI6IDQsICJ0YWJsZXQiOiA2LCAibW9iaWxlIjogMTJ9LCAiZGlzYWJsZWQiOiBmYWxzZSwgInZhbHVlIjogInNhbWUtc2l0ZSIsICJtZXRob2QiOiAiZGVmYXVsdCIsICJwcmV2X3ZhbHVlIjogInNhbWUtc2l0ZSIsICJwb3BvdmVycyI6IFt7Imljb25OYW1lIjogImRpc2siLCAidGV4dCI6ICJpbnBfcG9wb3Zlcl9tdWx0aXNpdGUifSwgeyJpY29uTmFtZSI6ICJpbmZvIiwgInRleHQiOiAiVmFsdWUgZm9yIHRoZSBDcm9zcy1PcmlnaW4tUmVzb3VyY2UtUG9saWN5IGhlYWRlci4ifV19LCAiQ09SU19NQVhfQUdFIjogeyJjb250ZXh0IjogIm11bHRpc2l0ZSIsICJkZWZhdWx0IjogIjg2NDAwIiwgImhlbHAiOiAiVmFsdWUgb2YgdGhlIEFjY2Vzcy1Db250cm9sLU1heC1BZ2UgaGVhZGVyLiIsICJpZCI6ICJjb3JzLW1heC1hZ2UiLCAibGFiZWwiOiAiQWNjZXNzLUNvbnRyb2wtTWF4LUFnZSB2YWx1ZSIsICJyZWdleCI6ICJeXFxkKyQiLCAidHlwZSI6ICJ0ZXh0IiwgImNvbnRhaW5lckNsYXNzIjogInotMSIsICJwYXR0ZXJuIjogIl5cXGQrJCIsICJpbnBUeXBlIjogImlucHV0IiwgIm5hbWUiOiAiQWNjZXNzLUNvbnRyb2wtTWF4LUFnZSB2YWx1ZSIsICJjb2x1bW5zIjogeyJwYyI6IDQsICJ0YWJsZXQiOiA2LCAibW9iaWxlIjogMTJ9LCAiZGlzYWJsZWQiOiBmYWxzZSwgInZhbHVlIjogIjg2NDAwIiwgIm1ldGhvZCI6ICJkZWZhdWx0IiwgInByZXZfdmFsdWUiOiAiODY0MDAiLCAicG9wb3ZlcnMiOiBbeyJpY29uTmFtZSI6ICJkaXNrIiwgInRleHQiOiAiaW5wX3BvcG92ZXJfbXVsdGlzaXRlIn0sIHsiaWNvbk5hbWUiOiAiaW5mbyIsICJ0ZXh0IjogIlZhbHVlIG9mIHRoZSBBY2Nlc3MtQ29udHJvbC1NYXgtQWdlIGhlYWRlci4ifV19LCAiQ09SU19ERU5ZX1JFUVVFU1QiOiB7ImNvbnRleHQiOiAibXVsdGlzaXRlIiwgImRlZmF1bHQiOiAieWVzIiwgImhlbHAiOiAiRGVueSByZXF1ZXN0IGFuZCBkb24ndCBzZW5kIGl0IHRvIGJhY2tlbmQgaWYgT3JpZ2luIGlzIG5vdCBhbGxvd2VkLiIsICJpZCI6ICJjb3JzLWRlbnktcmVxdWVzdCIsICJsYWJlbCI6ICJEZW55IHJlcXVlc3QiLCAicmVnZXgiOiAiXih5ZXN8bm8pJCIsICJ0eXBlIjogImNoZWNrIiwgImNvbnRhaW5lckNsYXNzIjogInotMCIsICJwYXR0ZXJuIjogIl4oeWVzfG5vKSQiLCAiaW5wVHlwZSI6ICJjaGVja2JveCIsICJuYW1lIjogIkRlbnkgcmVxdWVzdCIsICJjb2x1bW5zIjogeyJwYyI6IDQsICJ0YWJsZXQiOiA2LCAibW9iaWxlIjogMTJ9LCAiZGlzYWJsZWQiOiBmYWxzZSwgInZhbHVlIjogInllcyIsICJtZXRob2QiOiAiZGVmYXVsdCIsICJwcmV2X3ZhbHVlIjogInllcyIsICJwb3BvdmVycyI6IFt7Imljb25OYW1lIjogImRpc2siLCAidGV4dCI6ICJpbnBfcG9wb3Zlcl9tdWx0aXNpdGUifSwgeyJpY29uTmFtZSI6ICJpbmZvIiwgInRleHQiOiAiRGVueSByZXF1ZXN0IGFuZCBkb24ndCBzZW5kIGl0IHRvIGJhY2tlbmQgaWYgT3JpZ2luIGlzIG5vdCBhbGxvd2VkLiJ9XX19LCAiY2hlY2tzdW0iOiBudWxsfSwgeyJpZCI6ICJjbGllbnRjYWNoZSIsICJzdHJlYW0iOiAibm8iLCAibmFtZSI6ICJDbGllbnQgY2FjaGUiLCAiZGVzY3JpcHRpb24iOiAiTWFuYWdlIGNhY2hpbmcgZm9yIGNsaWVudHMuIiwgInZlcnNpb24iOiAiMS4wIiwgInR5cGUiOiAiY29yZSIsICJtZXRob2QiOiAibWFudWFsIiwgInBhZ2UiOiBmYWxzZSwgInNldHRpbmdzIjogeyJVU0VfQ0xJRU5UX0NBQ0hFIjogeyJjb250ZXh0IjogIm11bHRpc2l0ZSIsICJkZWZhdWx0IjogIm5vIiwgImhlbHAiOiAiVGVsbCBjbGllbnQgdG8gc3RvcmUgbG9jYWxseSBzdGF0aWMgZmlsZXMuIiwgImlkIjogInVzZS1jbGllbnQtY2FjaGUiLCAibGFiZWwiOiAiVXNlIGNsaWVudCBjYWNoZSIsICJyZWdleCI6ICJeKHllc3xubykkIiwgInR5cGUiOiAiY2hlY2siLCAiY29udGFpbmVyQ2xhc3MiOiAiei0zIiwgInBhdHRlcm4iOiAiXih5ZXN8bm8pJCIsICJpbnBUeXBlIjogImNoZWNrYm94IiwgIm5hbWUiOiAiVXNlIGNsaWVudCBjYWNoZSIsICJjb2x1bW5zIjogeyJwYyI6IDQsICJ0YWJsZXQiOiA2LCAibW9iaWxlIjogMTJ9LCAiZGlzYWJsZWQiOiB0cnVlLCAidmFsdWUiOiAieWVzIiwgIm1ldGhvZCI6ICJzY2hlZHVsZXIiLCAicHJldl92YWx1ZSI6ICJ5ZXMiLCAicG9wb3ZlcnMiOiBbeyJpY29uTmFtZSI6ICJ0cmVzcGFzcyIsICJ0ZXh0IjogImlucF9wb3BvdmVyX21ldGhvZF9kaXNhYmxlZCJ9LCB7Imljb25OYW1lIjogImRpc2siLCAidGV4dCI6ICJpbnBfcG9wb3Zlcl9tdWx0aXNpdGUifSwgeyJpY29uTmFtZSI6ICJpbmZvIiwgInRleHQiOiAiVGVsbCBjbGllbnQgdG8gc3RvcmUgbG9jYWxseSBzdGF0aWMgZmlsZXMuIn1dfSwgIkNMSUVOVF9DQUNIRV9FWFRFTlNJT05TIjogeyJjb250ZXh0IjogImdsb2JhbCIsICJkZWZhdWx0IjogImpwZ3xqcGVnfHBuZ3xibXB8aWNvfHN2Z3x0aWZ8Y3NzfGpzfG90Znx0dGZ8ZW90fHdvZmZ8d29mZjIiLCAiaGVscCI6ICJMaXN0IG9mIGZpbGUgZXh0ZW5zaW9ucywgc2VwYXJhdGVkIHdpdGggcGlwZXMgdGhhdCBzaG91bGQgYmUgY2FjaGVkLiIsICJpZCI6ICJjbGllbnQtY2FjaGUtZXh0ZW5zaW9ucyIsICJsYWJlbCI6ICJFeHRlbnNpb25zIHRoYXQgc2hvdWxkIGJlIGNhY2hlZCBieSB0aGUgY2xpZW50IiwgInJlZ2V4IjogIl4oPyFcXHwpKFxcfD8oW2EtejAtOV0rKSg/IS4qXFwyKD8hLikpKSskIiwgInR5cGUiOiAidGV4dCIsICJjb250YWluZXJDbGFzcyI6ICJ6LTIiLCAicGF0dGVybiI6ICJeKD8hXFx8KShcXHw/KFthLXowLTldKykoPyEuKlxcMig/IS4pKSkrJCIsICJpbnBUeXBlIjogImlucHV0IiwgIm5hbWUiOiAiRXh0ZW5zaW9ucyB0aGF0IHNob3VsZCBiZSBjYWNoZWQgYnkgdGhlIGNsaWVudCIsICJjb2x1bW5zIjogeyJwYyI6IDQsICJ0YWJsZXQiOiA2LCAibW9iaWxlIjogMTJ9LCAiZGlzYWJsZWQiOiBmYWxzZSwgInZhbHVlIjogImpwZ3xqcGVnfHBuZ3xibXB8aWNvfHN2Z3x0aWZ8Y3NzfGpzfG90Znx0dGZ8ZW90fHdvZmZ8d29mZjIiLCAibWV0aG9kIjogImRlZmF1bHQiLCAicHJldl92YWx1ZSI6ICJqcGd8anBlZ3xwbmd8Ym1wfGljb3xzdmd8dGlmfGNzc3xqc3xvdGZ8dHRmfGVvdHx3b2ZmfHdvZmYyIiwgInBvcG92ZXJzIjogW3siaWNvbk5hbWUiOiAiZ2xvYmUiLCAidGV4dCI6ICJpbnBfcG9wb3Zlcl9nbG9iYWwifSwgeyJpY29uTmFtZSI6ICJpbmZvIiwgInRleHQiOiAiTGlzdCBvZiBmaWxlIGV4dGVuc2lvbnMsIHNlcGFyYXRlZCB3aXRoIHBpcGVzIHRoYXQgc2hvdWxkIGJlIGNhY2hlZC4ifV19LCAiQ0xJRU5UX0NBQ0hFX0VUQUciOiB7ImNvbnRleHQiOiAibXVsdGlzaXRlIiwgImRlZmF1bHQiOiAieWVzIiwgImhlbHAiOiAiU2VuZCB0aGUgSFRUUCBFVGFnIGhlYWRlciBmb3Igc3RhdGljIHJlc291cmNlcy4iLCAiaWQiOiAiY2xpZW50LWNhY2hlLWV0YWciLCAibGFiZWwiOiAiRVRhZyIsICJyZWdleCI6ICJeKHllc3xubykkIiwgInR5cGUiOiAiY2hlY2siLCAiY29udGFpbmVyQ2xhc3MiOiAiei0xIiwgInBhdHRlcm4iOiAiXih5ZXN8bm8pJCIsICJpbnBUeXBlIjogImNoZWNrYm94IiwgIm5hbWUiOiAiRVRhZyIsICJjb2x1bW5zIjogeyJwYyI6IDQsICJ0YWJsZXQiOiA2LCAibW9iaWxlIjogMTJ9LCAiZGlzYWJsZWQiOiBmYWxzZSwgInZhbHVlIjogInllcyIsICJtZXRob2QiOiAiZGVmYXVsdCIsICJwcmV2X3ZhbHVlIjogInllcyIsICJwb3BvdmVycyI6IFt7Imljb25OYW1lIjogImRpc2siLCAidGV4dCI6ICJpbnBfcG9wb3Zlcl9tdWx0aXNpdGUifSwgeyJpY29uTmFtZSI6ICJpbmZvIiwgInRleHQiOiAiU2VuZCB0aGUgSFRUUCBFVGFnIGhlYWRlciBmb3Igc3RhdGljIHJlc291cmNlcy4ifV19LCAiQ0xJRU5UX0NBQ0hFX0NPTlRST0wiOiB7ImNvbnRleHQiOiAibXVsdGlzaXRlIiwgImRlZmF1bHQiOiAicHVibGljLCBtYXgtYWdlPTE1NTUyMDAwIiwgImhlbHAiOiAiVmFsdWUgb2YgdGhlIENhY2hlLUNvbnRyb2wgSFRUUCBoZWFkZXIuIiwgImlkIjogImNsaWVudC1jYWNoZS1jb250cm9sIiwgImxhYmVsIjogIkNhY2hlLUNvbnRyb2wgaGVhZGVyIiwgInJlZ2V4IjogIl4oPyEoLCA/fCApKSgoLCApPygoKG1heC1hZ2V8cy1tYXhhZ2V8c3RhbGUtd2hpbGUtcmV2YWxpZGF0ZXxzdGFsZS1pZi1lcnJvcik9XFxkKyg/IS4qXFw2KSl8KCg/IS4qcHVibGljKXByaXZhdGV8KD8hLipwcml2YXRlKXB1YmxpYyl8KG11c3R8cHJveHkpLXJldmFsaWRhdGV8bXVzdC11bmRlcnN0YW5kfGltbXV0YWJsZXxuby0oY2FjaGV8c3RvcmV8dHJhbnNmb3JtKSkoPyEuKlxcNCkpKyQiLCAidHlwZSI6ICJ0ZXh0IiwgImNvbnRhaW5lckNsYXNzIjogInotMCIsICJwYXR0ZXJuIjogIl4oPyEoLCA/fCApKSgoLCApPygoKG1heC1hZ2V8cy1tYXhhZ2V8c3RhbGUtd2hpbGUtcmV2YWxpZGF0ZXxzdGFsZS1pZi1lcnJvcik9XFxkKyg/IS4qXFw2KSl8KCg/IS4qcHVibGljKXByaXZhdGV8KD8hLipwcml2YXRlKXB1YmxpYyl8KG11c3R8cHJveHkpLXJldmFsaWRhdGV8bXVzdC11bmRlcnN0YW5kfGltbXV0YWJsZXxuby0oY2FjaGV8c3RvcmV8dHJhbnNmb3JtKSkoPyEuKlxcNCkpKyQiLCAiaW5wVHlwZSI6ICJpbnB1dCIsICJuYW1lIjogIkNhY2hlLUNvbnRyb2wgaGVhZGVyIiwgImNvbHVtbnMiOiB7InBjIjogNCwgInRhYmxldCI6IDYsICJtb2JpbGUiOiAxMn0sICJkaXNhYmxlZCI6IGZhbHNlLCAidmFsdWUiOiAicHVibGljLCBtYXgtYWdlPTE1NTUyMDAwIiwgIm1ldGhvZCI6ICJkZWZhdWx0IiwgInByZXZfdmFsdWUiOiAicHVibGljLCBtYXgtYWdlPTE1NTUyMDAwIiwgInBvcG92ZXJzIjogW3siaWNvbk5hbWUiOiAiZGlzayIsICJ0ZXh0IjogImlucF9wb3BvdmVyX211bHRpc2l0ZSJ9LCB7Imljb25OYW1lIjogImluZm8iLCAidGV4dCI6ICJWYWx1ZSBvZiB0aGUgQ2FjaGUtQ29udHJvbCBIVFRQIGhlYWRlci4ifV19fSwgImNoZWNrc3VtIjogbnVsbH0sIHsiaWQiOiAiY291bnRyeSIsICJzdHJlYW0iOiAieWVzIiwgIm5hbWUiOiAiQ291bnRyeSIsICJkZXNjcmlwdGlvbiI6ICJEZW55IGFjY2VzcyBiYXNlZCBvbiB0aGUgY291bnRyeSBvZiB0aGUgY2xpZW50IElQLiIsICJ2ZXJzaW9uIjogIjEuMCIsICJ0eXBlIjogImNvcmUiLCAibWV0aG9kIjogIm1hbnVhbCIsICJwYWdlIjogdHJ1ZSwgInNldHRpbmdzIjogeyJCTEFDS0xJU1RfQ09VTlRSWSI6IHsiY29udGV4dCI6ICJtdWx0aXNpdGUiLCAiZGVmYXVsdCI6ICIiLCAiaGVscCI6ICJEZW55IGFjY2VzcyBpZiB0aGUgY291bnRyeSBvZiB0aGUgY2xpZW50IGlzIGluIHRoZSBsaXN0IChJU08gMzE2Ni0xIGFscGhhLTIgZm9ybWF0IHNlcGFyYXRlZCB3aXRoIHNwYWNlcykuIiwgImlkIjogImNvdW50cnktYmxhY2tsaXN0IiwgImxhYmVsIjogIkNvdW50cnkgYmxhY2tsaXN0IiwgInJlZ2V4IjogIl4oPyEgKSggKihbQS1aXXsyfSkoPyEuKlxcMikgKikqJCIsICJ0eXBlIjogInRleHQiLCAiY29udGFpbmVyQ2xhc3MiOiAiei0xIiwgInBhdHRlcm4iOiAiXig/ISApKCAqKFtBLVpdezJ9KSg/IS4qXFwyKSAqKSokIiwgImlucFR5cGUiOiAiaW5wdXQiLCAibmFtZSI6ICJDb3VudHJ5IGJsYWNrbGlzdCIsICJjb2x1bW5zIjogeyJwYyI6IDQsICJ0YWJsZXQiOiA2LCAibW9iaWxlIjogMTJ9LCAiZGlzYWJsZWQiOiBmYWxzZSwgInZhbHVlIjogIiIsICJtZXRob2QiOiAiZGVmYXVsdCIsICJwcmV2X3ZhbHVlIjogIiIsICJwb3BvdmVycyI6IFt7Imljb25OYW1lIjogImRpc2siLCAidGV4dCI6ICJpbnBfcG9wb3Zlcl9tdWx0aXNpdGUifSwgeyJpY29uTmFtZSI6ICJpbmZvIiwgInRleHQiOiAiRGVueSBhY2Nlc3MgaWYgdGhlIGNvdW50cnkgb2YgdGhlIGNsaWVudCBpcyBpbiB0aGUgbGlzdCAoSVNPIDMxNjYtMSBhbHBoYS0yIGZvcm1hdCBzZXBhcmF0ZWQgd2l0aCBzcGFjZXMpLiJ9XX0sICJXSElURUxJU1RfQ09VTlRSWSI6IHsiY29udGV4dCI6ICJtdWx0aXNpdGUiLCAiZGVmYXVsdCI6ICIiLCAiaGVscCI6ICJEZW55IGFjY2VzcyBpZiB0aGUgY291bnRyeSBvZiB0aGUgY2xpZW50IGlzIG5vdCBpbiB0aGUgbGlzdCAoSVNPIDMxNjYtMSBhbHBoYS0yIGZvcm1hdCBzZXBhcmF0ZWQgd2l0aCBzcGFjZXMpLiIsICJpZCI6ICJjb3VudHJ5LXdoaXRlbGlzdCIsICJsYWJlbCI6ICJDb3VudHJ5IHdoaXRlbGlzdCIsICJyZWdleCI6ICJeKD8hICkoICooW0EtWl17Mn0pKD8hLipcXDIpICopKiQiLCAidHlwZSI6ICJ0ZXh0IiwgImNvbnRhaW5lckNsYXNzIjogInotMCIsICJwYXR0ZXJuIjogIl4oPyEgKSggKihbQS1aXXsyfSkoPyEuKlxcMikgKikqJCIsICJpbnBUeXBlIjogImlucHV0IiwgIm5hbWUiOiAiQ291bnRyeSB3aGl0ZWxpc3QiLCAiY29sdW1ucyI6IHsicGMiOiA0LCAidGFibGV0IjogNiwgIm1vYmlsZSI6IDEyfSwgImRpc2FibGVkIjogZmFsc2UsICJ2YWx1ZSI6ICIiLCAibWV0aG9kIjogImRlZmF1bHQiLCAicHJldl92YWx1ZSI6ICIiLCAicG9wb3ZlcnMiOiBbeyJpY29uTmFtZSI6ICJkaXNrIiwgInRleHQiOiAiaW5wX3BvcG92ZXJfbXVsdGlzaXRlIn0sIHsiaWNvbk5hbWUiOiAiaW5mbyIsICJ0ZXh0IjogIkRlbnkgYWNjZXNzIGlmIHRoZSBjb3VudHJ5IG9mIHRoZSBjbGllbnQgaXMgbm90IGluIHRoZSBsaXN0IChJU08gMzE2Ni0xIGFscGhhLTIgZm9ybWF0IHNlcGFyYXRlZCB3aXRoIHNwYWNlcykuIn1dfX0sICJjaGVja3N1bSI6IG51bGx9LCB7ImlkIjogImN1c3RvbWNlcnQiLCAic3RyZWFtIjogInllcyIsICJuYW1lIjogIkN1c3RvbSBIVFRQUyBjZXJ0aWZpY2F0ZSIsICJkZXNjcmlwdGlvbiI6ICJDaG9vc2UgY3VzdG9tIGNlcnRpZmljYXRlIGZvciBIVFRQUy4iLCAidmVyc2lvbiI6ICIxLjAiLCAidHlwZSI6ICJjb3JlIiwgIm1ldGhvZCI6ICJtYW51YWwiLCAicGFnZSI6IGZhbHNlLCAic2V0dGluZ3MiOiB7IlVTRV9DVVNUT01fU1NMIjogeyJjb250ZXh0IjogIm11bHRpc2l0ZSIsICJkZWZhdWx0IjogIm5vIiwgImhlbHAiOiAiVXNlIGN1c3RvbSBIVFRQUyBjZXJ0aWZpY2F0ZS4iLCAiaWQiOiAidXNlLWN1c3RvbS1odHRwcyIsICJsYWJlbCI6ICJVc2UgY3VzdG9tIGNlcnRpZmljYXRlIiwgInJlZ2V4IjogIl4oeWVzfG5vKSQiLCAidHlwZSI6ICJjaGVjayIsICJjb250YWluZXJDbGFzcyI6ICJ6LTQiLCAicGF0dGVybiI6ICJeKHllc3xubykkIiwgImlucFR5cGUiOiAiY2hlY2tib3giLCAibmFtZSI6ICJVc2UgY3VzdG9tIGNlcnRpZmljYXRlIiwgImNvbHVtbnMiOiB7InBjIjogNCwgInRhYmxldCI6IDYsICJtb2JpbGUiOiAxMn0sICJkaXNhYmxlZCI6IGZhbHNlLCAidmFsdWUiOiAibm8iLCAibWV0aG9kIjogImRlZmF1bHQiLCAicHJldl92YWx1ZSI6ICJubyIsICJwb3BvdmVycyI6IFt7Imljb25OYW1lIjogImRpc2siLCAidGV4dCI6ICJpbnBfcG9wb3Zlcl9tdWx0aXNpdGUifSwgeyJpY29uTmFtZSI6ICJpbmZvIiwgInRleHQiOiAiVXNlIGN1c3RvbSBIVFRQUyBjZXJ0aWZpY2F0ZS4ifV19LCAiQ1VTVE9NX1NTTF9DRVJUIjogeyJjb250ZXh0IjogIm11bHRpc2l0ZSIsICJkZWZhdWx0IjogIiIsICJoZWxwIjogIkZ1bGwgcGF0aCBvZiB0aGUgY2VydGlmaWNhdGUgb3IgYnVuZGxlIGZpbGUgKG11c3QgYmUgcmVhZGFibGUgYnkgdGhlIHNjaGVkdWxlcikuIiwgImlkIjogImN1c3RvbS1odHRwcy1jZXJ0IiwgImxhYmVsIjogIkNlcnRpZmljYXRlIHBhdGgiLCAicmVnZXgiOiAiXigvW1xcdy4gXFwtXSspKi8/JCIsICJ0eXBlIjogInRleHQiLCAiY29udGFpbmVyQ2xhc3MiOiAiei0zIiwgInBhdHRlcm4iOiAiXigvW1xcdy4gXFwtXSspKi8/JCIsICJpbnBUeXBlIjogImlucHV0IiwgIm5hbWUiOiAiQ2VydGlmaWNhdGUgcGF0aCIsICJjb2x1bW5zIjogeyJwYyI6IDQsICJ0YWJsZXQiOiA2LCAibW9iaWxlIjogMTJ9LCAiZGlzYWJsZWQiOiBmYWxzZSwgInZhbHVlIjogIiIsICJtZXRob2QiOiAiZGVmYXVsdCIsICJwcmV2X3ZhbHVlIjogIiIsICJwb3BvdmVycyI6IFt7Imljb25OYW1lIjogImRpc2siLCAidGV4dCI6ICJpbnBfcG9wb3Zlcl9tdWx0aXNpdGUifSwgeyJpY29uTmFtZSI6ICJpbmZvIiwgInRleHQiOiAiRnVsbCBwYXRoIG9mIHRoZSBjZXJ0aWZpY2F0ZSBvciBidW5kbGUgZmlsZSAobXVzdCBiZSByZWFkYWJsZSBieSB0aGUgc2NoZWR1bGVyKS4ifV19LCAiQ1VTVE9NX1NTTF9LRVkiOiB7ImNvbnRleHQiOiAibXVsdGlzaXRlIiwgImRlZmF1bHQiOiAiIiwgImhlbHAiOiAiRnVsbCBwYXRoIG9mIHRoZSBrZXkgZmlsZSAobXVzdCBiZSByZWFkYWJsZSBieSB0aGUgc2NoZWR1bGVyKS4iLCAiaWQiOiAiY3VzdG9tLWh0dHBzLWtleSIsICJsYWJlbCI6ICJLZXkgcGF0aCIsICJyZWdleCI6ICJeKC9bXFx3LiBcXC1dKykqLz8kIiwgInR5cGUiOiAidGV4dCIsICJjb250YWluZXJDbGFzcyI6ICJ6LTIiLCAicGF0dGVybiI6ICJeKC9bXFx3LiBcXC1dKykqLz8kIiwgImlucFR5cGUiOiAiaW5wdXQiLCAibmFtZSI6ICJLZXkgcGF0aCIsICJjb2x1bW5zIjogeyJwYyI6IDQsICJ0YWJsZXQiOiA2LCAibW9iaWxlIjogMTJ9LCAiZGlzYWJsZWQiOiBmYWxzZSwgInZhbHVlIjogIiIsICJtZXRob2QiOiAiZGVmYXVsdCIsICJwcmV2X3ZhbHVlIjogIiIsICJwb3BvdmVycyI6IFt7Imljb25OYW1lIjogImRpc2siLCAidGV4dCI6ICJpbnBfcG9wb3Zlcl9tdWx0aXNpdGUifSwgeyJpY29uTmFtZSI6ICJpbmZvIiwgInRleHQiOiAiRnVsbCBwYXRoIG9mIHRoZSBrZXkgZmlsZSAobXVzdCBiZSByZWFkYWJsZSBieSB0aGUgc2NoZWR1bGVyKS4ifV19LCAiQ1VTVE9NX1NTTF9DRVJUX0RBVEEiOiB7ImNvbnRleHQiOiAibXVsdGlzaXRlIiwgImRlZmF1bHQiOiAiIiwgImhlbHAiOiAiQ2VydGlmaWNhdGUgZGF0YSBlbmNvZGVkIGluIGJhc2U2NC4iLCAiaWQiOiAiY3VzdG9tLWh0dHBzLWNlcnQtZGF0YSIsICJsYWJlbCI6ICJDZXJ0aWZpY2F0ZSBkYXRhIChiYXNlNjQpIiwgInJlZ2V4IjogIl4uKiQiLCAidHlwZSI6ICJ0ZXh0IiwgImNvbnRhaW5lckNsYXNzIjogInotMSIsICJwYXR0ZXJuIjogIl4uKiQiLCAiaW5wVHlwZSI6ICJpbnB1dCIsICJuYW1lIjogIkNlcnRpZmljYXRlIGRhdGEgKGJhc2U2NCkiLCAiY29sdW1ucyI6IHsicGMiOiA0LCAidGFibGV0IjogNiwgIm1vYmlsZSI6IDEyfSwgImRpc2FibGVkIjogZmFsc2UsICJ2YWx1ZSI6ICIiLCAibWV0aG9kIjogImRlZmF1bHQiLCAicHJldl92YWx1ZSI6ICIiLCAicG9wb3ZlcnMiOiBbeyJpY29uTmFtZSI6ICJkaXNrIiwgInRleHQiOiAiaW5wX3BvcG92ZXJfbXVsdGlzaXRlIn0sIHsiaWNvbk5hbWUiOiAiaW5mbyIsICJ0ZXh0IjogIkNlcnRpZmljYXRlIGRhdGEgZW5jb2RlZCBpbiBiYXNlNjQuIn1dfSwgIkNVU1RPTV9TU0xfS0VZX0RBVEEiOiB7ImNvbnRleHQiOiAibXVsdGlzaXRlIiwgImRlZmF1bHQiOiAiIiwgImhlbHAiOiAiS2V5IGRhdGEgZW5jb2RlZCBpbiBiYXNlNjQuIiwgImlkIjogImN1c3RvbS1odHRwcy1rZXktZGF0YSIsICJsYWJlbCI6ICJLZXkgZGF0YSAoYmFzZTY0KSIsICJyZWdleCI6ICJeLiokIiwgInR5cGUiOiAidGV4dCIsICJjb250YWluZXJDbGFzcyI6ICJ6LTAiLCAicGF0dGVybiI6ICJeLiokIiwgImlucFR5cGUiOiAiaW5wdXQiLCAibmFtZSI6ICJLZXkgZGF0YSAoYmFzZTY0KSIsICJjb2x1bW5zIjogeyJwYyI6IDQsICJ0YWJsZXQiOiA2LCAibW9iaWxlIjogMTJ9LCAiZGlzYWJsZWQiOiBmYWxzZSwgInZhbHVlIjogIiIsICJtZXRob2QiOiAiZGVmYXVsdCIsICJwcmV2X3ZhbHVlIjogIiIsICJwb3BvdmVycyI6IFt7Imljb25OYW1lIjogImRpc2siLCAidGV4dCI6ICJpbnBfcG9wb3Zlcl9tdWx0aXNpdGUifSwgeyJpY29uTmFtZSI6ICJpbmZvIiwgInRleHQiOiAiS2V5IGRhdGEgZW5jb2RlZCBpbiBiYXNlNjQuIn1dfX0sICJjaGVja3N1bSI6IG51bGx9LCB7ImlkIjogImRiIiwgInN0cmVhbSI6ICJ5ZXMiLCAibmFtZSI6ICJEQiIsICJkZXNjcmlwdGlvbiI6ICJJbnRlZ3JhdGUgZWFzaWx5IHRoZSBEYXRhYmFzZS4iLCAidmVyc2lvbiI6ICIxLjAiLCAidHlwZSI6ICJjb3JlIiwgIm1ldGhvZCI6ICJtYW51YWwiLCAicGFnZSI6IGZhbHNlLCAic2V0dGluZ3MiOiB7IkRBVEFCQVNFX1VSSSI6IHsiY29udGV4dCI6ICJnbG9iYWwiLCAiZGVmYXVsdCI6ICJzcWxpdGU6Ly8vL3Zhci9saWIvYnVua2Vyd2ViL2RiLnNxbGl0ZTMiLCAiaGVscCI6ICJUaGUgZGF0YWJhc2UgVVJJLCBmb2xsb3dpbmcgdGhlIHNxbGFsY2hlbXkgZm9ybWF0LiIsICJpZCI6ICJkYXRhYmFzZS11cmkiLCAibGFiZWwiOiAiVGhlIGRhdGFiYXNlIFVSSSIsICJyZWdleCI6ICJeKChwb3N0Z3Jlc3FsfG15c3FsfG1hcmlhZGJ8c3FsaXRlKShcXCtbXFx3XFwtXSspPzouKyk/JCIsICJ0eXBlIjogInRleHQiLCAiY29udGFpbmVyQ2xhc3MiOiAiei0yIiwgInBhdHRlcm4iOiAiXigocG9zdGdyZXNxbHxteXNxbHxtYXJpYWRifHNxbGl0ZSkoXFwrW1xcd1xcLV0rKT86LispPyQiLCAiaW5wVHlwZSI6ICJpbnB1dCIsICJuYW1lIjogIlRoZSBkYXRhYmFzZSBVUkkiLCAiY29sdW1ucyI6IHsicGMiOiA0LCAidGFibGV0IjogNiwgIm1vYmlsZSI6IDEyfSwgImRpc2FibGVkIjogZmFsc2UsICJ2YWx1ZSI6ICJzcWxpdGU6Ly8vL3Zhci9saWIvYnVua2Vyd2ViL2RiLnNxbGl0ZTMiLCAibWV0aG9kIjogImRlZmF1bHQiLCAicHJldl92YWx1ZSI6ICJzcWxpdGU6Ly8vL3Zhci9saWIvYnVua2Vyd2ViL2RiLnNxbGl0ZTMiLCAicG9wb3ZlcnMiOiBbeyJpY29uTmFtZSI6ICJnbG9iZSIsICJ0ZXh0IjogImlucF9wb3BvdmVyX2dsb2JhbCJ9LCB7Imljb25OYW1lIjogImluZm8iLCAidGV4dCI6ICJUaGUgZGF0YWJhc2UgVVJJLCBmb2xsb3dpbmcgdGhlIHNxbGFsY2hlbXkgZm9ybWF0LiJ9XX0sICJEQVRBQkFTRV9VUklfUkVBRE9OTFkiOiB7ImNvbnRleHQiOiAiZ2xvYmFsIiwgImRlZmF1bHQiOiAiIiwgImhlbHAiOiAiVGhlIGRhdGFiYXNlIFVSSSBmb3IgcmVhZC1vbmx5IG9wZXJhdGlvbnMsIGl0IGNhbiBhbHNvIHNlcnZlIGFzIGEgZmFsbGJhY2sgaWYgdGhlIG1haW4gZGF0YWJhc2UgaXMgZG93bi4gRm9sbG93aW5nIHRoZSBzcWxhbGNoZW15IGZvcm1hdC4iLCAiaWQiOiAiZGF0YWJhc2UtdXJpLXJlYWRvbmx5IiwgImxhYmVsIjogIlRoZSBkYXRhYmFzZSBVUkkgZm9yIHJlYWQtb25seSBvcGVyYXRpb25zIiwgInJlZ2V4IjogIl4oKHBvc3RncmVzcWx8bXlzcWx8bWFyaWFkYnxzcWxpdGUpKFxcK1tcXHdcXC1dKyk/Oi4rKT8kIiwgInR5cGUiOiAidGV4dCIsICJjb250YWluZXJDbGFzcyI6ICJ6LTEiLCAicGF0dGVybiI6ICJeKChwb3N0Z3Jlc3FsfG15c3FsfG1hcmlhZGJ8c3FsaXRlKShcXCtbXFx3XFwtXSspPzouKyk/JCIsICJpbnBUeXBlIjogImlucHV0IiwgIm5hbWUiOiAiVGhlIGRhdGFiYXNlIFVSSSBmb3IgcmVhZC1vbmx5IG9wZXJhdGlvbnMiLCAiY29sdW1ucyI6IHsicGMiOiA0LCAidGFibGV0IjogNiwgIm1vYmlsZSI6IDEyfSwgImRpc2FibGVkIjogZmFsc2UsICJ2YWx1ZSI6ICIiLCAibWV0aG9kIjogImRlZmF1bHQiLCAicHJldl92YWx1ZSI6ICIiLCAicG9wb3ZlcnMiOiBbeyJpY29uTmFtZSI6ICJnbG9iZSIsICJ0ZXh0IjogImlucF9wb3BvdmVyX2dsb2JhbCJ9LCB7Imljb25OYW1lIjogImluZm8iLCAidGV4dCI6ICJUaGUgZGF0YWJhc2UgVVJJIGZvciByZWFkLW9ubHkgb3BlcmF0aW9ucywgaXQgY2FuIGFsc28gc2VydmUgYXMgYSBmYWxsYmFjayBpZiB0aGUgbWFpbiBkYXRhYmFzZSBpcyBkb3duLiBGb2xsb3dpbmcgdGhlIHNxbGFsY2hlbXkgZm9ybWF0LiJ9XX0sICJEQVRBQkFTRV9MT0dfTEVWRUwiOiB7ImNvbnRleHQiOiAiZ2xvYmFsIiwgImRlZmF1bHQiOiAid2FybmluZyIsICJoZWxwIjogIlRoZSBsZXZlbCB0byB1c2UgZm9yIGRhdGFiYXNlIGxvZ3MuIiwgImlkIjogImRhdGFiYXNlLWxvZy1sZXZlbCIsICJsYWJlbCI6ICJEYXRhYmFzZSBsb2cgbGV2ZWwiLCAicmVnZXgiOiAiXihkZWJ1Z3xpbmZvfHdhcm58d2FybmluZ3xlcnJvcikkIiwgInR5cGUiOiAic2VsZWN0IiwgImNvbnRhaW5lckNsYXNzIjogInotMCIsICJwYXR0ZXJuIjogIl4oZGVidWd8aW5mb3x3YXJufHdhcm5pbmd8ZXJyb3IpJCIsICJpbnBUeXBlIjogInNlbGVjdCIsICJuYW1lIjogIkRhdGFiYXNlIGxvZyBsZXZlbCIsICJ2YWx1ZXMiOiBbImRlYnVnIiwgImVycm9yIiwgImluZm8iLCAid2FybiIsICJ3YXJuaW5nIl0sICJjb2x1bW5zIjogeyJwYyI6IDQsICJ0YWJsZXQiOiA2LCAibW9iaWxlIjogMTJ9LCAiZGlzYWJsZWQiOiBmYWxzZSwgInZhbHVlIjogIndhcm5pbmciLCAibWV0aG9kIjogImRlZmF1bHQiLCAicHJldl92YWx1ZSI6ICJ3YXJuaW5nIiwgInBvcG92ZXJzIjogW3siaWNvbk5hbWUiOiAiZ2xvYmUiLCAidGV4dCI6ICJpbnBfcG9wb3Zlcl9nbG9iYWwifSwgeyJpY29uTmFtZSI6ICJpbmZvIiwgInRleHQiOiAiVGhlIGxldmVsIHRvIHVzZSBmb3IgZGF0YWJhc2UgbG9ncy4ifV19fSwgImNoZWNrc3VtIjogbnVsbH0sIHsiaWQiOiAiZG5zYmwiLCAic3RyZWFtIjogInllcyIsICJuYW1lIjogIkROU0JMIiwgImRlc2NyaXB0aW9uIjogIkRlbnkgYWNjZXNzIGJhc2VkIG9uIGV4dGVybmFsIEROU0JMIHNlcnZlcnMuIiwgInZlcnNpb24iOiAiMS4wIiwgInR5cGUiOiAiY29yZSIsICJtZXRob2QiOiAibWFudWFsIiwgInBhZ2UiOiB0cnVlLCAic2V0dGluZ3MiOiB7IlVTRV9ETlNCTCI6IHsiY29udGV4dCI6ICJtdWx0aXNpdGUiLCAiZGVmYXVsdCI6ICJ5ZXMiLCAiaGVscCI6ICJBY3RpdmF0ZSBETlNCTCBmZWF0dXJlLiIsICJpZCI6ICJ1c2UtZG5zYmwiLCAibGFiZWwiOiAiQWN0aXZhdGUgRE5TQkwiLCAicmVnZXgiOiAiXih5ZXN8bm8pJCIsICJ0eXBlIjogImNoZWNrIiwgImNvbnRhaW5lckNsYXNzIjogInotMSIsICJwYXR0ZXJuIjogIl4oeWVzfG5vKSQiLCAiaW5wVHlwZSI6ICJjaGVja2JveCIsICJuYW1lIjogIkFjdGl2YXRlIEROU0JMIiwgImNvbHVtbnMiOiB7InBjIjogNCwgInRhYmxldCI6IDYsICJtb2JpbGUiOiAxMn0sICJkaXNhYmxlZCI6IGZhbHNlLCAidmFsdWUiOiAieWVzIiwgIm1ldGhvZCI6ICJkZWZhdWx0IiwgInByZXZfdmFsdWUiOiAieWVzIiwgInBvcG92ZXJzIjogW3siaWNvbk5hbWUiOiAiZGlzayIsICJ0ZXh0IjogImlucF9wb3BvdmVyX211bHRpc2l0ZSJ9LCB7Imljb25OYW1lIjogImluZm8iLCAidGV4dCI6ICJBY3RpdmF0ZSBETlNCTCBmZWF0dXJlLiJ9XX0sICJETlNCTF9MSVNUIjogeyJjb250ZXh0IjogImdsb2JhbCIsICJkZWZhdWx0IjogImJsLmJsb2NrbGlzdC5kZSBwcm9ibGVtcy5kbnNibC5zb3Jicy5uZXQgc2JsLnNwYW1oYXVzLm9yZyB4Ymwuc3BhbWhhdXMub3JnIiwgImhlbHAiOiAiTGlzdCBvZiBETlNCTCBzZXJ2ZXJzLiIsICJpZCI6ICJkbnNibC1saXN0IiwgImxhYmVsIjogIkROU0JMIGxpc3QiLCAicmVnZXgiOiAiXig/ISApKCA/KCg/IVxcLilbXFx3Ll0rKSg/IS4qXFwyKD8hLikpKSokIiwgInR5cGUiOiAidGV4dCIsICJjb250YWluZXJDbGFzcyI6ICJ6LTAiLCAicGF0dGVybiI6ICJeKD8hICkoID8oKD8hXFwuKVtcXHcuXSspKD8hLipcXDIoPyEuKSkpKiQiLCAiaW5wVHlwZSI6ICJpbnB1dCIsICJuYW1lIjogIkROU0JMIGxpc3QiLCAiY29sdW1ucyI6IHsicGMiOiA0LCAidGFibGV0IjogNiwgIm1vYmlsZSI6IDEyfSwgImRpc2FibGVkIjogZmFsc2UsICJ2YWx1ZSI6ICJibC5ibG9ja2xpc3QuZGUgcHJvYmxlbXMuZG5zYmwuc29yYnMubmV0IHNibC5zcGFtaGF1cy5vcmcgeGJsLnNwYW1oYXVzLm9yZyIsICJtZXRob2QiOiAiZGVmYXVsdCIsICJwcmV2X3ZhbHVlIjogImJsLmJsb2NrbGlzdC5kZSBwcm9ibGVtcy5kbnNibC5zb3Jicy5uZXQgc2JsLnNwYW1oYXVzLm9yZyB4Ymwuc3BhbWhhdXMub3JnIiwgInBvcG92ZXJzIjogW3siaWNvbk5hbWUiOiAiZ2xvYmUiLCAidGV4dCI6ICJpbnBfcG9wb3Zlcl9nbG9iYWwifSwgeyJpY29uTmFtZSI6ICJpbmZvIiwgInRleHQiOiAiTGlzdCBvZiBETlNCTCBzZXJ2ZXJzLiJ9XX19LCAiY2hlY2tzdW0iOiBudWxsfSwgeyJpZCI6ICJlcnJvcnMiLCAic3RyZWFtIjogIm5vIiwgIm5hbWUiOiAiRXJyb3JzIiwgImRlc2NyaXB0aW9uIjogIk1hbmFnZSBkZWZhdWx0IGVycm9yIHBhZ2VzIiwgInZlcnNpb24iOiAiMS4wIiwgInR5cGUiOiAiY29yZSIsICJtZXRob2QiOiAibWFudWFsIiwgInBhZ2UiOiB0cnVlLCAic2V0dGluZ3MiOiB7IkVSUk9SUyI6IHsiY29udGV4dCI6ICJtdWx0aXNpdGUiLCAiZGVmYXVsdCI6ICIiLCAiaGVscCI6ICJMaXN0IG9mIEhUVFAgZXJyb3IgY29kZSBhbmQgY29ycmVzcG9uZGluZyBlcnJvciBwYWdlcywgc2VwYXJhdGVkIHdpdGggc3BhY2VzICg0MDQ9L215NDA0Lmh0bWwgNDAzPS9lcnJvcnMvNDAzLmh0bWwgLi4uKS4iLCAiaWQiOiAiZXJyb3JzIiwgImxhYmVsIjogIkVycm9ycyIsICJyZWdleCI6ICJeKD8hICkoID8oWzEtNV1cXGR7Mn0pKD8hLipcXDIoPyFbXj1dKSk9KFxcL1tcXHdcXF0ufjpcXC8/I1xcW0AhJFxcJidcXChcXCkqKyw7PVxcLV0qKSg/IS4qXFwzKD8hLikpKSokIiwgInR5cGUiOiAidGV4dCIsICJjb250YWluZXJDbGFzcyI6ICJ6LTEiLCAicGF0dGVybiI6ICJeKD8hICkoID8oWzEtNV1cXGR7Mn0pKD8hLipcXDIoPyFbXj1dKSk9KFxcL1tcXHdcXF0ufjpcXC8/I1xcW0AhJFxcJidcXChcXCkqKyw7PVxcLV0qKSg/IS4qXFwzKD8hLikpKSokIiwgImlucFR5cGUiOiAiaW5wdXQiLCAibmFtZSI6ICJFcnJvcnMiLCAiY29sdW1ucyI6IHsicGMiOiA0LCAidGFibGV0IjogNiwgIm1vYmlsZSI6IDEyfSwgImRpc2FibGVkIjogZmFsc2UsICJ2YWx1ZSI6ICIiLCAibWV0aG9kIjogImRlZmF1bHQiLCAicHJldl92YWx1ZSI6ICIiLCAicG9wb3ZlcnMiOiBbeyJpY29uTmFtZSI6ICJkaXNrIiwgInRleHQiOiAiaW5wX3BvcG92ZXJfbXVsdGlzaXRlIn0sIHsiaWNvbk5hbWUiOiAiaW5mbyIsICJ0ZXh0IjogIkxpc3Qgb2YgSFRUUCBlcnJvciBjb2RlIGFuZCBjb3JyZXNwb25kaW5nIGVycm9yIHBhZ2VzLCBzZXBhcmF0ZWQgd2l0aCBzcGFjZXMgKDQwND0vbXk0MDQuaHRtbCA0MDM9L2Vycm9ycy80MDMuaHRtbCAuLi4pLiJ9XX0sICJJTlRFUkNFUFRFRF9FUlJPUl9DT0RFUyI6IHsiY29udGV4dCI6ICJtdWx0aXNpdGUiLCAiZGVmYXVsdCI6ICI0MDAgNDAxIDQwMyA0MDQgNDA1IDQxMyA0MjkgNTAwIDUwMSA1MDIgNTAzIDUwNCIsICJoZWxwIjogIkxpc3Qgb2YgSFRUUCBlcnJvciBjb2RlIGludGVyY2VwdGVkIGJ5IEJ1bmtlcldlYiIsICJpZCI6ICJpbnRlcmNlcHRlZC1lcnJvci1jb2RlcyIsICJsYWJlbCI6ICJJbnRlcmNlcHRlZCBlcnJvciBjb2RlcyIsICJyZWdleCI6ICJeKCAqKFsxLTVdXFxkezJ9KSg/IS4qXFwyKSAqKSskIiwgInR5cGUiOiAidGV4dCIsICJjb250YWluZXJDbGFzcyI6ICJ6LTAiLCAicGF0dGVybiI6ICJeKCAqKFsxLTVdXFxkezJ9KSg/IS4qXFwyKSAqKSskIiwgImlucFR5cGUiOiAiaW5wdXQiLCAibmFtZSI6ICJJbnRlcmNlcHRlZCBlcnJvciBjb2RlcyIsICJjb2x1bW5zIjogeyJwYyI6IDQsICJ0YWJsZXQiOiA2LCAibW9iaWxlIjogMTJ9LCAiZGlzYWJsZWQiOiBmYWxzZSwgInZhbHVlIjogIjQwMCA0MDEgNDAzIDQwNCA0MDUgNDEzIDQyOSA1MDAgNTAxIDUwMiA1MDMgNTA0IiwgIm1ldGhvZCI6ICJkZWZhdWx0IiwgInByZXZfdmFsdWUiOiAiNDAwIDQwMSA0MDMgNDA0IDQwNSA0MTMgNDI5IDUwMCA1MDEgNTAyIDUwMyA1MDQiLCAicG9wb3ZlcnMiOiBbeyJpY29uTmFtZSI6ICJkaXNrIiwgInRleHQiOiAiaW5wX3BvcG92ZXJfbXVsdGlzaXRlIn0sIHsiaWNvbk5hbWUiOiAiaW5mbyIsICJ0ZXh0IjogIkxpc3Qgb2YgSFRUUCBlcnJvciBjb2RlIGludGVyY2VwdGVkIGJ5IEJ1bmtlcldlYiJ9XX19LCAiY2hlY2tzdW0iOiBudWxsfSwgeyJpZCI6ICJncmV5bGlzdCIsICJzdHJlYW0iOiAicGFydGlhbCIsICJuYW1lIjogIkdyZXlsaXN0IiwgImRlc2NyaXB0aW9uIjogIkFsbG93IGFjY2VzcyB3aGlsZSBrZWVwaW5nIHNlY3VyaXR5IGZlYXR1cmVzIGJhc2VkIG9uIGludGVybmFsIGFuZCBleHRlcm5hbCBJUC9uZXR3b3JrL3JETlMvQVNOIGdyZXlsaXN0cy4iLCAidmVyc2lvbiI6ICIxLjAiLCAidHlwZSI6ICJjb3JlIiwgIm1ldGhvZCI6ICJtYW51YWwiLCAicGFnZSI6IHRydWUsICJzZXR0aW5ncyI6IHsiVVNFX0dSRVlMSVNUIjogeyJjb250ZXh0IjogIm11bHRpc2l0ZSIsICJkZWZhdWx0IjogIm5vIiwgImhlbHAiOiAiQWN0aXZhdGUgZ3JleWxpc3QgZmVhdHVyZS4iLCAiaWQiOiAidXNlLWdyZXlsaXN0IiwgImxhYmVsIjogIkFjdGl2YXRlIGdyZXlsaXN0aW5nIiwgInJlZ2V4IjogIl4oeWVzfG5vKSQiLCAidHlwZSI6ICJjaGVjayIsICJjb250YWluZXJDbGFzcyI6ICJ6LTExIiwgInBhdHRlcm4iOiAiXih5ZXN8bm8pJCIsICJpbnBUeXBlIjogImNoZWNrYm94IiwgIm5hbWUiOiAiQWN0aXZhdGUgZ3JleWxpc3RpbmciLCAiY29sdW1ucyI6IHsicGMiOiA0LCAidGFibGV0IjogNiwgIm1vYmlsZSI6IDEyfSwgImRpc2FibGVkIjogZmFsc2UsICJ2YWx1ZSI6ICJubyIsICJtZXRob2QiOiAiZGVmYXVsdCIsICJwcmV2X3ZhbHVlIjogIm5vIiwgInBvcG92ZXJzIjogW3siaWNvbk5hbWUiOiAiZGlzayIsICJ0ZXh0IjogImlucF9wb3BvdmVyX211bHRpc2l0ZSJ9LCB7Imljb25OYW1lIjogImluZm8iLCAidGV4dCI6ICJBY3RpdmF0ZSBncmV5bGlzdCBmZWF0dXJlLiJ9XX0sICJHUkVZTElTVF9JUCI6IHsiY29udGV4dCI6ICJtdWx0aXNpdGUiLCAiZGVmYXVsdCI6ICIiLCAiaGVscCI6ICJMaXN0IG9mIElQL25ldHdvcmssIHNlcGFyYXRlZCB3aXRoIHNwYWNlcywgdG8gcHV0IGludG8gdGhlIGdyZXlsaXN0LiIsICJpZCI6ICJncmV5bGlzdC1pcCIsICJsYWJlbCI6ICJHcmV5bGlzdCBJUC9uZXR3b3JrIiwgInJlZ2V4IjogIl4oPyEgKSggKigoKFxcYjI1WzAtNV18XFxiMlswLTRdXFxkfFxcYlswMV0/XFxkXFxkPykoXFwuKDI1WzAtNV18MlswLTRdXFxkfFswMV0/XFxkXFxkPykpezN9KShcXC8oWzEtMl1bMC05XT98M1swLTJdP3xbMDQtOV0pKT98KChbMC05YS1mQS1GXXsxLDR9Oil7N31bMC05YS1mQS1GXXsxLDR9fChbMC05YS1mQS1GXXsxLDR9Oil7MSw3fTp8KFswLTlhLWZBLUZdezEsNH06KXsxLDZ9OlswLTlhLWZBLUZdezEsNH18KFswLTlhLWZBLUZdezEsNH06KXsxLDV9KDpbMC05YS1mQS1GXXsxLDR9KXsxLDJ9fChbMC05YS1mQS1GXXsxLDR9Oil7MSw0fSg6WzAtOWEtZkEtRl17MSw0fSl7MSwzfXwoWzAtOWEtZkEtRl17MSw0fTopezEsM30oOlswLTlhLWZBLUZdezEsNH0pezEsNH18KFswLTlhLWZBLUZdezEsNH06KXsxLDJ9KDpbMC05YS1mQS1GXXsxLDR9KXsxLDV9fFswLTlhLWZBLUZdezEsNH06KCg6WzAtOWEtZkEtRl17MSw0fSl7MSw2fSl8OigoOlswLTlhLWZBLUZdezEsNH0pezEsN318Oil8ZmU4MDooOlswLTlhLWZBLUZdWnswLDR9KXswLDR9JVswLTlhLXpBLVpdK3w6OihmZmZmKDowezEsNH0pPzopPygoMjVbMC01XXwoMlswLTRdfDE/XFxkKT9cXGQpXFwuKXszfSgyNVswLTVdfCgyWzAtNF18MT9cXGQpP1xcZCl8KFswLTlhLWZBLUZdezEsNH06KXsxLDR9OigoMjVbMC01XXwoMlswLTRdfDE/XFxkKT9cXGQpXFwuKXszfSgyNVswLTVdfCgyWzAtNF18MT9cXGQpP1xcZCkpKFxcLygxMlswLThdfDFbMDFdWzAtOV18WzAtOV1bMC05XT8pKT8pKD8hLipcXERcXDIoW15cXGRcXC9dfCQpKSAqKSokIiwgInR5cGUiOiAidGV4dCIsICJjb250YWluZXJDbGFzcyI6ICJ6LTEwIiwgInBhdHRlcm4iOiAiXig/ISApKCAqKCgoXFxiMjVbMC01XXxcXGIyWzAtNF1cXGR8XFxiWzAxXT9cXGRcXGQ/KShcXC4oMjVbMC01XXwyWzAtNF1cXGR8WzAxXT9cXGRcXGQ/KSl7M30pKFxcLyhbMS0yXVswLTldP3wzWzAtMl0/fFswNC05XSkpP3woKFswLTlhLWZBLUZdezEsNH06KXs3fVswLTlhLWZBLUZdezEsNH18KFswLTlhLWZBLUZdezEsNH06KXsxLDd9OnwoWzAtOWEtZkEtRl17MSw0fTopezEsNn06WzAtOWEtZkEtRl17MSw0fXwoWzAtOWEtZkEtRl17MSw0fTopezEsNX0oOlswLTlhLWZBLUZdezEsNH0pezEsMn18KFswLTlhLWZBLUZdezEsNH06KXsxLDR9KDpbMC05YS1mQS1GXXsxLDR9KXsxLDN9fChbMC05YS1mQS1GXXsxLDR9Oil7MSwzfSg6WzAtOWEtZkEtRl17MSw0fSl7MSw0fXwoWzAtOWEtZkEtRl17MSw0fTopezEsMn0oOlswLTlhLWZBLUZdezEsNH0pezEsNX18WzAtOWEtZkEtRl17MSw0fTooKDpbMC05YS1mQS1GXXsxLDR9KXsxLDZ9KXw6KCg6WzAtOWEtZkEtRl17MSw0fSl7MSw3fXw6KXxmZTgwOig6WzAtOWEtZkEtRl1aezAsNH0pezAsNH0lWzAtOWEtekEtWl0rfDo6KGZmZmYoOjB7MSw0fSk/Oik/KCgyNVswLTVdfCgyWzAtNF18MT9cXGQpP1xcZClcXC4pezN9KDI1WzAtNV18KDJbMC00XXwxP1xcZCk/XFxkKXwoWzAtOWEtZkEtRl17MSw0fTopezEsNH06KCgyNVswLTVdfCgyWzAtNF18MT9cXGQpP1xcZClcXC4pezN9KDI1WzAtNV18KDJbMC00XXwxP1xcZCk/XFxkKSkoXFwvKDEyWzAtOF18MVswMV1bMC05XXxbMC05XVswLTldPykpPykoPyEuKlxcRFxcMihbXlxcZFxcL118JCkpICopKiQiLCAiaW5wVHlwZSI6ICJpbnB1dCIsICJuYW1lIjogIkdyZXlsaXN0IElQL25ldHdvcmsiLCAiY29sdW1ucyI6IHsicGMiOiA0LCAidGFibGV0IjogNiwgIm1vYmlsZSI6IDEyfSwgImRpc2FibGVkIjogZmFsc2UsICJ2YWx1ZSI6ICIiLCAibWV0aG9kIjogImRlZmF1bHQiLCAicHJldl92YWx1ZSI6ICIiLCAicG9wb3ZlcnMiOiBbeyJpY29uTmFtZSI6ICJkaXNrIiwgInRleHQiOiAiaW5wX3BvcG92ZXJfbXVsdGlzaXRlIn0sIHsiaWNvbk5hbWUiOiAiaW5mbyIsICJ0ZXh0IjogIkxpc3Qgb2YgSVAvbmV0d29yaywgc2VwYXJhdGVkIHdpdGggc3BhY2VzLCB0byBwdXQgaW50byB0aGUgZ3JleWxpc3QuIn1dfSwgIkdSRVlMSVNUX1JETlMiOiB7ImNvbnRleHQiOiAibXVsdGlzaXRlIiwgImRlZmF1bHQiOiAiIiwgImhlbHAiOiAiTGlzdCBvZiByZXZlcnNlIEROUyBzdWZmaXhlcywgc2VwYXJhdGVkIHdpdGggc3BhY2VzLCB0byBwdXQgaW50byB0aGUgZ3JleWxpc3QuIiwgImlkIjogImdyZXlsaXN0LXJkbnMiLCAibGFiZWwiOiAiR3JleWxpc3QgcmV2ZXJzZSBETlMiLCAicmVnZXgiOiAiXiggKigoW14gXSspKD8hLipcXDMoIHwkKSkpICopKiQiLCAidHlwZSI6ICJ0ZXh0IiwgImNvbnRhaW5lckNsYXNzIjogInotOSIsICJwYXR0ZXJuIjogIl4oICooKFteIF0rKSg/IS4qXFwzKCB8JCkpKSAqKSokIiwgImlucFR5cGUiOiAiaW5wdXQiLCAibmFtZSI6ICJHcmV5bGlzdCByZXZlcnNlIEROUyIsICJjb2x1bW5zIjogeyJwYyI6IDQsICJ0YWJsZXQiOiA2LCAibW9iaWxlIjogMTJ9LCAiZGlzYWJsZWQiOiBmYWxzZSwgInZhbHVlIjogIiIsICJtZXRob2QiOiAiZGVmYXVsdCIsICJwcmV2X3ZhbHVlIjogIiIsICJwb3BvdmVycyI6IFt7Imljb25OYW1lIjogImRpc2siLCAidGV4dCI6ICJpbnBfcG9wb3Zlcl9tdWx0aXNpdGUifSwgeyJpY29uTmFtZSI6ICJpbmZvIiwgInRleHQiOiAiTGlzdCBvZiByZXZlcnNlIEROUyBzdWZmaXhlcywgc2VwYXJhdGVkIHdpdGggc3BhY2VzLCB0byBwdXQgaW50byB0aGUgZ3JleWxpc3QuIn1dfSwgIkdSRVlMSVNUX1JETlNfR0xPQkFMIjogeyJjb250ZXh0IjogIm11bHRpc2l0ZSIsICJkZWZhdWx0IjogInllcyIsICJoZWxwIjogIk9ubHkgcGVyZm9ybSBSRE5TIGdyZXlsaXN0IGNoZWNrcyBvbiBnbG9iYWwgSVAgYWRkcmVzc2VzLiIsICJpZCI6ICJncmV5bGlzdC1yZG5zLWdsb2JhbCIsICJsYWJlbCI6ICJHcmV5bGlzdCByZXZlcnNlIEROUyBnbG9iYWwgSVBzIiwgInJlZ2V4IjogIl4oeWVzfG5vKSQiLCAidHlwZSI6ICJjaGVjayIsICJjb250YWluZXJDbGFzcyI6ICJ6LTgiLCAicGF0dGVybiI6ICJeKHllc3xubykkIiwgImlucFR5cGUiOiAiY2hlY2tib3giLCAibmFtZSI6ICJHcmV5bGlzdCByZXZlcnNlIEROUyBnbG9iYWwgSVBzIiwgImNvbHVtbnMiOiB7InBjIjogNCwgInRhYmxldCI6IDYsICJtb2JpbGUiOiAxMn0sICJkaXNhYmxlZCI6IGZhbHNlLCAidmFsdWUiOiAieWVzIiwgIm1ldGhvZCI6ICJkZWZhdWx0IiwgInByZXZfdmFsdWUiOiAieWVzIiwgInBvcG92ZXJzIjogW3siaWNvbk5hbWUiOiAiZGlzayIsICJ0ZXh0IjogImlucF9wb3BvdmVyX211bHRpc2l0ZSJ9LCB7Imljb25OYW1lIjogImluZm8iLCAidGV4dCI6ICJPbmx5IHBlcmZvcm0gUkROUyBncmV5bGlzdCBjaGVja3Mgb24gZ2xvYmFsIElQIGFkZHJlc3Nlcy4ifV19LCAiR1JFWUxJU1RfQVNOIjogeyJjb250ZXh0IjogIm11bHRpc2l0ZSIsICJkZWZhdWx0IjogIiIsICJoZWxwIjogIkxpc3Qgb2YgQVNOIG51bWJlcnMsIHNlcGFyYXRlZCB3aXRoIHNwYWNlcywgdG8gcHV0IGludG8gdGhlIGdyZXlsaXN0LiIsICJpZCI6ICJncmV5bGlzdC1hc24iLCAibGFiZWwiOiAiR3JleWxpc3QgQVNOIiwgInJlZ2V4IjogIl5eKCAqKChBU04/KT8oXFxkKylcXGIoPyEuKltTTiBdXFw0XFxiKSkgKikqJCIsICJ0eXBlIjogInRleHQiLCAiY29udGFpbmVyQ2xhc3MiOiAiei03IiwgInBhdHRlcm4iOiAiXl4oICooKEFTTj8pPyhcXGQrKVxcYig/IS4qW1NOIF1cXDRcXGIpKSAqKSokIiwgImlucFR5cGUiOiAiaW5wdXQiLCAibmFtZSI6ICJHcmV5bGlzdCBBU04iLCAiY29sdW1ucyI6IHsicGMiOiA0LCAidGFibGV0IjogNiwgIm1vYmlsZSI6IDEyfSwgImRpc2FibGVkIjogZmFsc2UsICJ2YWx1ZSI6ICIiLCAibWV0aG9kIjogImRlZmF1bHQiLCAicHJldl92YWx1ZSI6ICIiLCAicG9wb3ZlcnMiOiBbeyJpY29uTmFtZSI6ICJkaXNrIiwgInRleHQiOiAiaW5wX3BvcG92ZXJfbXVsdGlzaXRlIn0sIHsiaWNvbk5hbWUiOiAiaW5mbyIsICJ0ZXh0IjogIkxpc3Qgb2YgQVNOIG51bWJlcnMsIHNlcGFyYXRlZCB3aXRoIHNwYWNlcywgdG8gcHV0IGludG8gdGhlIGdyZXlsaXN0LiJ9XX0sICJHUkVZTElTVF9VU0VSX0FHRU5UIjogeyJjb250ZXh0IjogIm11bHRpc2l0ZSIsICJkZWZhdWx0IjogIiIsICJoZWxwIjogIkxpc3Qgb2YgVXNlci1BZ2VudCAoUENSRSByZWdleCksIHNlcGFyYXRlZCB3aXRoIHNwYWNlcywgdG8gcHV0IGludG8gdGhlIGdyZXlsaXN0LiIsICJpZCI6ICJncmV5bGlzdC11c2VyLWFnZW50IiwgImxhYmVsIjogIkdyZXlsaXN0IFVzZXItQWdlbnQiLCAicmVnZXgiOiAiXi4qJCIsICJ0eXBlIjogInRleHQiLCAiY29udGFpbmVyQ2xhc3MiOiAiei02IiwgInBhdHRlcm4iOiAiXi4qJCIsICJpbnBUeXBlIjogImlucHV0IiwgIm5hbWUiOiAiR3JleWxpc3QgVXNlci1BZ2VudCIsICJjb2x1bW5zIjogeyJwYyI6IDQsICJ0YWJsZXQiOiA2LCAibW9iaWxlIjogMTJ9LCAiZGlzYWJsZWQiOiBmYWxzZSwgInZhbHVlIjogIiIsICJtZXRob2QiOiAiZGVmYXVsdCIsICJwcmV2X3ZhbHVlIjogIiIsICJwb3BvdmVycyI6IFt7Imljb25OYW1lIjogImRpc2siLCAidGV4dCI6ICJpbnBfcG9wb3Zlcl9tdWx0aXNpdGUifSwgeyJpY29uTmFtZSI6ICJpbmZvIiwgInRleHQiOiAiTGlzdCBvZiBVc2VyLUFnZW50IChQQ1JFIHJlZ2V4KSwgc2VwYXJhdGVkIHdpdGggc3BhY2VzLCB0byBwdXQgaW50byB0aGUgZ3JleWxpc3QuIn1dfSwgIkdSRVlMSVNUX1VSSSI6IHsiY29udGV4dCI6ICJtdWx0aXNpdGUiLCAiZGVmYXVsdCI6ICIiLCAiaGVscCI6ICJMaXN0IG9mIFVSSSAoUENSRSByZWdleCksIHNlcGFyYXRlZCB3aXRoIHNwYWNlcywgdG8gcHV0IGludG8gdGhlIGdyZXlsaXN0LiIsICJpZCI6ICJncmV5bGlzdC11cmkiLCAibGFiZWwiOiAiR3JleWxpc3QgVVJJIiwgInJlZ2V4IjogIl4uKiQiLCAidHlwZSI6ICJ0ZXh0IiwgImNvbnRhaW5lckNsYXNzIjogInotNSIsICJwYXR0ZXJuIjogIl4uKiQiLCAiaW5wVHlwZSI6ICJpbnB1dCIsICJuYW1lIjogIkdyZXlsaXN0IFVSSSIsICJjb2x1bW5zIjogeyJwYyI6IDQsICJ0YWJsZXQiOiA2LCAibW9iaWxlIjogMTJ9LCAiZGlzYWJsZWQiOiBmYWxzZSwgInZhbHVlIjogIiIsICJtZXRob2QiOiAiZGVmYXVsdCIsICJwcmV2X3ZhbHVlIjogIiIsICJwb3BvdmVycyI6IFt7Imljb25OYW1lIjogImRpc2siLCAidGV4dCI6ICJpbnBfcG9wb3Zlcl9tdWx0aXNpdGUifSwgeyJpY29uTmFtZSI6ICJpbmZvIiwgInRleHQiOiAiTGlzdCBvZiBVUkkgKFBDUkUgcmVnZXgpLCBzZXBhcmF0ZWQgd2l0aCBzcGFjZXMsIHRvIHB1dCBpbnRvIHRoZSBncmV5bGlzdC4ifV19LCAiR1JFWUxJU1RfSVBfVVJMUyI6IHsiY29udGV4dCI6ICJnbG9iYWwiLCAiZGVmYXVsdCI6ICIiLCAiaGVscCI6ICJMaXN0IG9mIFVSTHMsIHNlcGFyYXRlZCB3aXRoIHNwYWNlcywgY29udGFpbmluZyBnb29kIElQL25ldHdvcmsgdG8gcHV0IGludG8gdGhlIGdyZXlsaXN0LiIsICJpZCI6ICJncmV5bGlzdC1pcC11cmxzIiwgImxhYmVsIjogIkdyZXlsaXN0IElQL25ldHdvcmsgVVJMcyIsICJyZWdleCI6ICJeKCAqKChodHRwcz86XFwvXFwvfGZpbGU6XFwvXFwvXFwvKVtcXC1cXHdAOiUuK34jPV0rW1xcLVxcd1xcKFxcKSFAOiUrLn4jPyZcXC89JF0qKSg/IS4qXFwyKD8hLikpICopKiQiLCAidHlwZSI6ICJ0ZXh0IiwgImNvbnRhaW5lckNsYXNzIjogInotNCIsICJwYXR0ZXJuIjogIl4oICooKGh0dHBzPzpcXC9cXC98ZmlsZTpcXC9cXC9cXC8pW1xcLVxcd0A6JS4rfiM9XStbXFwtXFx3XFwoXFwpIUA6JSsufiM/JlxcLz0kXSopKD8hLipcXDIoPyEuKSkgKikqJCIsICJpbnBUeXBlIjogImlucHV0IiwgIm5hbWUiOiAiR3JleWxpc3QgSVAvbmV0d29yayBVUkxzIiwgImNvbHVtbnMiOiB7InBjIjogNCwgInRhYmxldCI6IDYsICJtb2JpbGUiOiAxMn0sICJkaXNhYmxlZCI6IGZhbHNlLCAidmFsdWUiOiAiIiwgIm1ldGhvZCI6ICJkZWZhdWx0IiwgInByZXZfdmFsdWUiOiAiIiwgInBvcG92ZXJzIjogW3siaWNvbk5hbWUiOiAiZ2xvYmUiLCAidGV4dCI6ICJpbnBfcG9wb3Zlcl9nbG9iYWwifSwgeyJpY29uTmFtZSI6ICJpbmZvIiwgInRleHQiOiAiTGlzdCBvZiBVUkxzLCBzZXBhcmF0ZWQgd2l0aCBzcGFjZXMsIGNvbnRhaW5pbmcgZ29vZCBJUC9uZXR3b3JrIHRvIHB1dCBpbnRvIHRoZSBncmV5bGlzdC4ifV19LCAiR1JFWUxJU1RfUkROU19VUkxTIjogeyJjb250ZXh0IjogImdsb2JhbCIsICJkZWZhdWx0IjogIiIsICJoZWxwIjogIkxpc3Qgb2YgVVJMcywgc2VwYXJhdGVkIHdpdGggc3BhY2VzLCBjb250YWluaW5nIHJldmVyc2UgRE5TIHN1ZmZpeGVzIHRvIHB1dCBpbnRvIHRoZSBncmV5bGlzdC4iLCAiaWQiOiAiZ3JleWxpc3QtcmRucy11cmxzIiwgImxhYmVsIjogIkdyZXlsaXN0IHJldmVyc2UgRE5TIFVSTHMiLCAicmVnZXgiOiAiXiggKigoaHR0cHM/OlxcL1xcL3xmaWxlOlxcL1xcL1xcLylbXFwtXFx3QDolLit+Iz1dK1tcXC1cXHdcXChcXCkhQDolKy5+Iz8mXFwvPSRdKikoPyEuKlxcMig/IS4pKSAqKSokIiwgInR5cGUiOiAidGV4dCIsICJjb250YWluZXJDbGFzcyI6ICJ6LTMiLCAicGF0dGVybiI6ICJeKCAqKChodHRwcz86XFwvXFwvfGZpbGU6XFwvXFwvXFwvKVtcXC1cXHdAOiUuK34jPV0rW1xcLVxcd1xcKFxcKSFAOiUrLn4jPyZcXC89JF0qKSg/IS4qXFwyKD8hLikpICopKiQiLCAiaW5wVHlwZSI6ICJpbnB1dCIsICJuYW1lIjogIkdyZXlsaXN0IHJldmVyc2UgRE5TIFVSTHMiLCAiY29sdW1ucyI6IHsicGMiOiA0LCAidGFibGV0IjogNiwgIm1vYmlsZSI6IDEyfSwgImRpc2FibGVkIjogZmFsc2UsICJ2YWx1ZSI6ICIiLCAibWV0aG9kIjogImRlZmF1bHQiLCAicHJldl92YWx1ZSI6ICIiLCAicG9wb3ZlcnMiOiBbeyJpY29uTmFtZSI6ICJnbG9iZSIsICJ0ZXh0IjogImlucF9wb3BvdmVyX2dsb2JhbCJ9LCB7Imljb25OYW1lIjogImluZm8iLCAidGV4dCI6ICJMaXN0IG9mIFVSTHMsIHNlcGFyYXRlZCB3aXRoIHNwYWNlcywgY29udGFpbmluZyByZXZlcnNlIEROUyBzdWZmaXhlcyB0byBwdXQgaW50byB0aGUgZ3JleWxpc3QuIn1dfSwgIkdSRVlMSVNUX0FTTl9VUkxTIjogeyJjb250ZXh0IjogImdsb2JhbCIsICJkZWZhdWx0IjogIiIsICJoZWxwIjogIkxpc3Qgb2YgVVJMcywgc2VwYXJhdGVkIHdpdGggc3BhY2VzLCBjb250YWluaW5nIEFTTiB0byBwdXQgaW50byB0aGUgZ3JleWxpc3QuIiwgImlkIjogImdyZXlsaXN0LWFzbi11cmxzIiwgImxhYmVsIjogIkdyZXlsaXN0IEFTTiBVUkxzIiwgInJlZ2V4IjogIl4oICooKGh0dHBzPzpcXC9cXC98ZmlsZTpcXC9cXC9cXC8pW1xcLVxcd0A6JS4rfiM9XStbXFwtXFx3XFwoXFwpIUA6JSsufiM/JlxcLz0kXSopKD8hLipcXDIoPyEuKSkgKikqJCIsICJ0eXBlIjogInRleHQiLCAiY29udGFpbmVyQ2xhc3MiOiAiei0yIiwgInBhdHRlcm4iOiAiXiggKigoaHR0cHM/OlxcL1xcL3xmaWxlOlxcL1xcL1xcLylbXFwtXFx3QDolLit+Iz1dK1tcXC1cXHdcXChcXCkhQDolKy5+Iz8mXFwvPSRdKikoPyEuKlxcMig/IS4pKSAqKSokIiwgImlucFR5cGUiOiAiaW5wdXQiLCAibmFtZSI6ICJHcmV5bGlzdCBBU04gVVJMcyIsICJjb2x1bW5zIjogeyJwYyI6IDQsICJ0YWJsZXQiOiA2LCAibW9iaWxlIjogMTJ9LCAiZGlzYWJsZWQiOiBmYWxzZSwgInZhbHVlIjogIiIsICJtZXRob2QiOiAiZGVmYXVsdCIsICJwcmV2X3ZhbHVlIjogIiIsICJwb3BvdmVycyI6IFt7Imljb25OYW1lIjogImdsb2JlIiwgInRleHQiOiAiaW5wX3BvcG92ZXJfZ2xvYmFsIn0sIHsiaWNvbk5hbWUiOiAiaW5mbyIsICJ0ZXh0IjogIkxpc3Qgb2YgVVJMcywgc2VwYXJhdGVkIHdpdGggc3BhY2VzLCBjb250YWluaW5nIEFTTiB0byBwdXQgaW50byB0aGUgZ3JleWxpc3QuIn1dfSwgIkdSRVlMSVNUX1VTRVJfQUdFTlRfVVJMUyI6IHsiY29udGV4dCI6ICJnbG9iYWwiLCAiZGVmYXVsdCI6ICIiLCAiaGVscCI6ICJMaXN0IG9mIFVSTHMsIHNlcGFyYXRlZCB3aXRoIHNwYWNlcywgY29udGFpbmluZyBnb29kIFVzZXItQWdlbnQgdG8gcHV0IGludG8gdGhlIGdyZXlsaXN0LiIsICJpZCI6ICJncmV5bGlzdC11c2VyLWFnZW50LXVybHMiLCAibGFiZWwiOiAiR3JleWxpc3QgVXNlci1BZ2VudCBVUkxzIiwgInJlZ2V4IjogIl4oICooKGh0dHBzPzpcXC9cXC98ZmlsZTpcXC9cXC9cXC8pW1xcLVxcd0A6JS4rfiM9XStbXFwtXFx3XFwoXFwpIUA6JSsufiM/JlxcLz0kXSopKD8hLipcXDIoPyEuKSkgKikqJCIsICJ0eXBlIjogInRleHQiLCAiY29udGFpbmVyQ2xhc3MiOiAiei0xIiwgInBhdHRlcm4iOiAiXiggKigoaHR0cHM/OlxcL1xcL3xmaWxlOlxcL1xcL1xcLylbXFwtXFx3QDolLit+Iz1dK1tcXC1cXHdcXChcXCkhQDolKy5+Iz8mXFwvPSRdKikoPyEuKlxcMig/IS4pKSAqKSokIiwgImlucFR5cGUiOiAiaW5wdXQiLCAibmFtZSI6ICJHcmV5bGlzdCBVc2VyLUFnZW50IFVSTHMiLCAiY29sdW1ucyI6IHsicGMiOiA0LCAidGFibGV0IjogNiwgIm1vYmlsZSI6IDEyfSwgImRpc2FibGVkIjogZmFsc2UsICJ2YWx1ZSI6ICIiLCAibWV0aG9kIjogImRlZmF1bHQiLCAicHJldl92YWx1ZSI6ICIiLCAicG9wb3ZlcnMiOiBbeyJpY29uTmFtZSI6ICJnbG9iZSIsICJ0ZXh0IjogImlucF9wb3BvdmVyX2dsb2JhbCJ9LCB7Imljb25OYW1lIjogImluZm8iLCAidGV4dCI6ICJMaXN0IG9mIFVSTHMsIHNlcGFyYXRlZCB3aXRoIHNwYWNlcywgY29udGFpbmluZyBnb29kIFVzZXItQWdlbnQgdG8gcHV0IGludG8gdGhlIGdyZXlsaXN0LiJ9XX0sICJHUkVZTElTVF9VUklfVVJMUyI6IHsiY29udGV4dCI6ICJnbG9iYWwiLCAiZGVmYXVsdCI6ICIiLCAiaGVscCI6ICJMaXN0IG9mIFVSTHMsIHNlcGFyYXRlZCB3aXRoIHNwYWNlcywgY29udGFpbmluZyBiYWQgVVJJIHRvIHB1dCBpbnRvIHRoZSBncmV5bGlzdC4iLCAiaWQiOiAiZ3JleWxpc3QtdXJpLXVybHMiLCAibGFiZWwiOiAiR3JleWxpc3QgVVJJIFVSTHMiLCAicmVnZXgiOiAiXiggKigoaHR0cHM/OlxcL1xcL3xmaWxlOlxcL1xcL1xcLylbXFwtXFx3QDolLit+Iz1dK1tcXC1cXHdcXChcXCkhQDolKy5+Iz8mXFwvPSRdKikoPyEuKlxcMig/IS4pKSAqKSokIiwgInR5cGUiOiAidGV4dCIsICJjb250YWluZXJDbGFzcyI6ICJ6LTAiLCAicGF0dGVybiI6ICJeKCAqKChodHRwcz86XFwvXFwvfGZpbGU6XFwvXFwvXFwvKVtcXC1cXHdAOiUuK34jPV0rW1xcLVxcd1xcKFxcKSFAOiUrLn4jPyZcXC89JF0qKSg/IS4qXFwyKD8hLikpICopKiQiLCAiaW5wVHlwZSI6ICJpbnB1dCIsICJuYW1lIjogIkdyZXlsaXN0IFVSSSBVUkxzIiwgImNvbHVtbnMiOiB7InBjIjogNCwgInRhYmxldCI6IDYsICJtb2JpbGUiOiAxMn0sICJkaXNhYmxlZCI6IGZhbHNlLCAidmFsdWUiOiAiIiwgIm1ldGhvZCI6ICJkZWZhdWx0IiwgInByZXZfdmFsdWUiOiAiIiwgInBvcG92ZXJzIjogW3siaWNvbk5hbWUiOiAiZ2xvYmUiLCAidGV4dCI6ICJpbnBfcG9wb3Zlcl9nbG9iYWwifSwgeyJpY29uTmFtZSI6ICJpbmZvIiwgInRleHQiOiAiTGlzdCBvZiBVUkxzLCBzZXBhcmF0ZWQgd2l0aCBzcGFjZXMsIGNvbnRhaW5pbmcgYmFkIFVSSSB0byBwdXQgaW50byB0aGUgZ3JleWxpc3QuIn1dfX0sICJjaGVja3N1bSI6IG51bGx9LCB7ImlkIjogImd6aXAiLCAic3RyZWFtIjogIm5vIiwgIm5hbWUiOiAiR3ppcCIsICJkZXNjcmlwdGlvbiI6ICJDb21wcmVzcyBIVFRQIHJlcXVlc3RzIHdpdGggdGhlIGd6aXAgYWxnb3JpdGhtLiIsICJ2ZXJzaW9uIjogIjEuMCIsICJ0eXBlIjogImNvcmUiLCAibWV0aG9kIjogIm1hbnVhbCIsICJwYWdlIjogZmFsc2UsICJzZXR0aW5ncyI6IHsiVVNFX0daSVAiOiB7ImNvbnRleHQiOiAibXVsdGlzaXRlIiwgImRlZmF1bHQiOiAibm8iLCAiaGVscCI6ICJVc2UgZ3ppcCIsICJpZCI6ICJ1c2UtZ3ppcCIsICJsYWJlbCI6ICJVc2UgZ3ppcCIsICJyZWdleCI6ICJeKHllc3xubykkIiwgInR5cGUiOiAiY2hlY2siLCAiY29udGFpbmVyQ2xhc3MiOiAiei00IiwgInBhdHRlcm4iOiAiXih5ZXN8bm8pJCIsICJpbnBUeXBlIjogImNoZWNrYm94IiwgIm5hbWUiOiAiVXNlIGd6aXAiLCAiY29sdW1ucyI6IHsicGMiOiA0LCAidGFibGV0IjogNiwgIm1vYmlsZSI6IDEyfSwgImRpc2FibGVkIjogdHJ1ZSwgInZhbHVlIjogInllcyIsICJtZXRob2QiOiAic2NoZWR1bGVyIiwgInByZXZfdmFsdWUiOiAieWVzIiwgInBvcG92ZXJzIjogW3siaWNvbk5hbWUiOiAidHJlc3Bhc3MiLCAidGV4dCI6ICJpbnBfcG9wb3Zlcl9tZXRob2RfZGlzYWJsZWQifSwgeyJpY29uTmFtZSI6ICJkaXNrIiwgInRleHQiOiAiaW5wX3BvcG92ZXJfbXVsdGlzaXRlIn0sIHsiaWNvbk5hbWUiOiAiaW5mbyIsICJ0ZXh0IjogIlVzZSBnemlwIn1dfSwgIkdaSVBfVFlQRVMiOiB7ImNvbnRleHQiOiAibXVsdGlzaXRlIiwgImRlZmF1bHQiOiAiYXBwbGljYXRpb24vYXRvbSt4bWwgYXBwbGljYXRpb24vamF2YXNjcmlwdCBhcHBsaWNhdGlvbi9qc29uIGFwcGxpY2F0aW9uL3Jzcyt4bWwgYXBwbGljYXRpb24vdm5kLm1zLWZvbnRvYmplY3QgYXBwbGljYXRpb24veC1mb250LW9wZW50eXBlIGFwcGxpY2F0aW9uL3gtZm9udC10cnVldHlwZSBhcHBsaWNhdGlvbi94LWZvbnQtdHRmIGFwcGxpY2F0aW9uL3gtamF2YXNjcmlwdCBhcHBsaWNhdGlvbi94aHRtbCt4bWwgYXBwbGljYXRpb24veG1sIGZvbnQvZW90IGZvbnQvb3BlbnR5cGUgZm9udC9vdGYgZm9udC90cnVldHlwZSBpbWFnZS9zdmcreG1sIGltYWdlL3ZuZC5taWNyb3NvZnQuaWNvbiBpbWFnZS94LWljb24gaW1hZ2UveC13aW4tYml0bWFwIHRleHQvY3NzIHRleHQvamF2YXNjcmlwdCB0ZXh0L3BsYWluIHRleHQveG1sIiwgImhlbHAiOiAiTGlzdCBvZiBNSU1FIHR5cGVzIHRoYXQgd2lsbCBiZSBjb21wcmVzc2VkIHdpdGggZ3ppcC4iLCAiaWQiOiAiZ3ppcC10eXBlcyIsICJsYWJlbCI6ICJNSU1FIHR5cGVzIiwgInJlZ2V4IjogIl4oPyEgKSggPyhbXFwtXFx3Ll0rL1tcXC1cXHcuK10rKSg/IS4qXFwyKD8hLikpKSskIiwgInR5cGUiOiAidGV4dCIsICJjb250YWluZXJDbGFzcyI6ICJ6LTMiLCAicGF0dGVybiI6ICJeKD8hICkoID8oW1xcLVxcdy5dKy9bXFwtXFx3LitdKykoPyEuKlxcMig/IS4pKSkrJCIsICJpbnBUeXBlIjogImlucHV0IiwgIm5hbWUiOiAiTUlNRSB0eXBlcyIsICJjb2x1bW5zIjogeyJwYyI6IDQsICJ0YWJsZXQiOiA2LCAibW9iaWxlIjogMTJ9LCAiZGlzYWJsZWQiOiBmYWxzZSwgInZhbHVlIjogImFwcGxpY2F0aW9uL2F0b20reG1sIGFwcGxpY2F0aW9uL2phdmFzY3JpcHQgYXBwbGljYXRpb24vanNvbiBhcHBsaWNhdGlvbi9yc3MreG1sIGFwcGxpY2F0aW9uL3ZuZC5tcy1mb250b2JqZWN0IGFwcGxpY2F0aW9uL3gtZm9udC1vcGVudHlwZSBhcHBsaWNhdGlvbi94LWZvbnQtdHJ1ZXR5cGUgYXBwbGljYXRpb24veC1mb250LXR0ZiBhcHBsaWNhdGlvbi94LWphdmFzY3JpcHQgYXBwbGljYXRpb24veGh0bWwreG1sIGFwcGxpY2F0aW9uL3htbCBmb250L2VvdCBmb250L29wZW50eXBlIGZvbnQvb3RmIGZvbnQvdHJ1ZXR5cGUgaW1hZ2Uvc3ZnK3htbCBpbWFnZS92bmQubWljcm9zb2Z0Lmljb24gaW1hZ2UveC1pY29uIGltYWdlL3gtd2luLWJpdG1hcCB0ZXh0L2NzcyB0ZXh0L2phdmFzY3JpcHQgdGV4dC9wbGFpbiB0ZXh0L3htbCIsICJtZXRob2QiOiAiZGVmYXVsdCIsICJwcmV2X3ZhbHVlIjogImFwcGxpY2F0aW9uL2F0b20reG1sIGFwcGxpY2F0aW9uL2phdmFzY3JpcHQgYXBwbGljYXRpb24vanNvbiBhcHBsaWNhdGlvbi9yc3MreG1sIGFwcGxpY2F0aW9uL3ZuZC5tcy1mb250b2JqZWN0IGFwcGxpY2F0aW9uL3gtZm9udC1vcGVudHlwZSBhcHBsaWNhdGlvbi94LWZvbnQtdHJ1ZXR5cGUgYXBwbGljYXRpb24veC1mb250LXR0ZiBhcHBsaWNhdGlvbi94LWphdmFzY3JpcHQgYXBwbGljYXRpb24veGh0bWwreG1sIGFwcGxpY2F0aW9uL3htbCBmb250L2VvdCBmb250L29wZW50eXBlIGZvbnQvb3RmIGZvbnQvdHJ1ZXR5cGUgaW1hZ2Uvc3ZnK3htbCBpbWFnZS92bmQubWljcm9zb2Z0Lmljb24gaW1hZ2UveC1pY29uIGltYWdlL3gtd2luLWJpdG1hcCB0ZXh0L2NzcyB0ZXh0L2phdmFzY3JpcHQgdGV4dC9wbGFpbiB0ZXh0L3htbCIsICJwb3BvdmVycyI6IFt7Imljb25OYW1lIjogImRpc2siLCAidGV4dCI6ICJpbnBfcG9wb3Zlcl9tdWx0aXNpdGUifSwgeyJpY29uTmFtZSI6ICJpbmZvIiwgInRleHQiOiAiTGlzdCBvZiBNSU1FIHR5cGVzIHRoYXQgd2lsbCBiZSBjb21wcmVzc2VkIHdpdGggZ3ppcC4ifV19LCAiR1pJUF9NSU5fTEVOR1RIIjogeyJjb250ZXh0IjogIm11bHRpc2l0ZSIsICJkZWZhdWx0IjogIjEwMDAiLCAiaGVscCI6ICJNaW5pbXVtIGxlbmd0aCBmb3IgZ3ppcCBjb21wcmVzc2lvbi4iLCAiaWQiOiAiZ3ppcC1taW4tbGVuZ3RoIiwgImxhYmVsIjogIk1pbmltdW0gbGVuZ3RoIiwgInJlZ2V4IjogIl5cXGQrJCIsICJ0eXBlIjogInRleHQiLCAiY29udGFpbmVyQ2xhc3MiOiAiei0yIiwgInBhdHRlcm4iOiAiXlxcZCskIiwgImlucFR5cGUiOiAiaW5wdXQiLCAibmFtZSI6ICJNaW5pbXVtIGxlbmd0aCIsICJjb2x1bW5zIjogeyJwYyI6IDQsICJ0YWJsZXQiOiA2LCAibW9iaWxlIjogMTJ9LCAiZGlzYWJsZWQiOiBmYWxzZSwgInZhbHVlIjogIjEwMDAiLCAibWV0aG9kIjogImRlZmF1bHQiLCAicHJldl92YWx1ZSI6ICIxMDAwIiwgInBvcG92ZXJzIjogW3siaWNvbk5hbWUiOiAiZGlzayIsICJ0ZXh0IjogImlucF9wb3BvdmVyX211bHRpc2l0ZSJ9LCB7Imljb25OYW1lIjogImluZm8iLCAidGV4dCI6ICJNaW5pbXVtIGxlbmd0aCBmb3IgZ3ppcCBjb21wcmVzc2lvbi4ifV19LCAiR1pJUF9DT01QX0xFVkVMIjogeyJjb250ZXh0IjogIm11bHRpc2l0ZSIsICJkZWZhdWx0IjogIjUiLCAiaGVscCI6ICJUaGUgY29tcHJlc3Npb24gbGV2ZWwgb2YgdGhlIGd6aXAgYWxnb3JpdGhtLiIsICJpZCI6ICJnemlwLWNvbXAtbGV2ZWwiLCAibGFiZWwiOiAiQ29tcHJlc3Npb24gbGV2ZWwiLCAicmVnZXgiOiAiXlsxLTldJCIsICJ0eXBlIjogInNlbGVjdCIsICJjb250YWluZXJDbGFzcyI6ICJ6LTEiLCAicGF0dGVybiI6ICJeWzEtOV0kIiwgImlucFR5cGUiOiAic2VsZWN0IiwgIm5hbWUiOiAiQ29tcHJlc3Npb24gbGV2ZWwiLCAidmFsdWVzIjogWyIxIiwgIjIiLCAiMyIsICI0IiwgIjUiLCAiNiIsICI3IiwgIjgiLCAiOSJdLCAiY29sdW1ucyI6IHsicGMiOiA0LCAidGFibGV0IjogNiwgIm1vYmlsZSI6IDEyfSwgImRpc2FibGVkIjogZmFsc2UsICJ2YWx1ZSI6ICI1IiwgIm1ldGhvZCI6ICJkZWZhdWx0IiwgInByZXZfdmFsdWUiOiAiNSIsICJwb3BvdmVycyI6IFt7Imljb25OYW1lIjogImRpc2siLCAidGV4dCI6ICJpbnBfcG9wb3Zlcl9tdWx0aXNpdGUifSwgeyJpY29uTmFtZSI6ICJpbmZvIiwgInRleHQiOiAiVGhlIGNvbXByZXNzaW9uIGxldmVsIG9mIHRoZSBnemlwIGFsZ29yaXRobS4ifV19LCAiR1pJUF9QUk9YSUVEIjogeyJjb250ZXh0IjogIm11bHRpc2l0ZSIsICJkZWZhdWx0IjogIm5vLWNhY2hlIG5vLXN0b3JlIHByaXZhdGUgZXhwaXJlZCBhdXRoIiwgImhlbHAiOiAiV2hpY2gga2luZCBvZiBwcm94aWVkIHJlcXVlc3RzIHdlIHNob3VsZCBjb21wcmVzcy4iLCAiaWQiOiAiZ3ppcC1wcm94aWVkIiwgImxhYmVsIjogIlByb3hpZWQgcmVxdWVzdHMiLCAicmVnZXgiOiAiXi4qJCIsICJ0eXBlIjogInRleHQiLCAiY29udGFpbmVyQ2xhc3MiOiAiei0wIiwgInBhdHRlcm4iOiAiXi4qJCIsICJpbnBUeXBlIjogImlucHV0IiwgIm5hbWUiOiAiUHJveGllZCByZXF1ZXN0cyIsICJjb2x1bW5zIjogeyJwYyI6IDQsICJ0YWJsZXQiOiA2LCAibW9iaWxlIjogMTJ9LCAiZGlzYWJsZWQiOiBmYWxzZSwgInZhbHVlIjogIm5vLWNhY2hlIG5vLXN0b3JlIHByaXZhdGUgZXhwaXJlZCBhdXRoIiwgIm1ldGhvZCI6ICJkZWZhdWx0IiwgInByZXZfdmFsdWUiOiAibm8tY2FjaGUgbm8tc3RvcmUgcHJpdmF0ZSBleHBpcmVkIGF1dGgiLCAicG9wb3ZlcnMiOiBbeyJpY29uTmFtZSI6ICJkaXNrIiwgInRleHQiOiAiaW5wX3BvcG92ZXJfbXVsdGlzaXRlIn0sIHsiaWNvbk5hbWUiOiAiaW5mbyIsICJ0ZXh0IjogIldoaWNoIGtpbmQgb2YgcHJveGllZCByZXF1ZXN0cyB3ZSBzaG91bGQgY29tcHJlc3MuIn1dfX0sICJjaGVja3N1bSI6IG51bGx9LCB7ImlkIjogImluamVjdCIsICJzdHJlYW0iOiAibm8iLCAibmFtZSI6ICJIVE1MIGluamVjdGlvbiIsICJkZXNjcmlwdGlvbiI6ICJJbmplY3QgY3VzdG9tIEhUTUwgY29kZSBiZWZvcmUgdGhlIDwvYm9keT4gdGFnLiIsICJ2ZXJzaW9uIjogIjEuMCIsICJ0eXBlIjogImNvcmUiLCAibWV0aG9kIjogIm1hbnVhbCIsICJwYWdlIjogZmFsc2UsICJzZXR0aW5ncyI6IHsiSU5KRUNUX0JPRFkiOiB7ImNvbnRleHQiOiAibXVsdGlzaXRlIiwgImRlZmF1bHQiOiAiIiwgImhlbHAiOiAiVGhlIEhUTUwgY29kZSB0byBpbmplY3QuIiwgImlkIjogImluamVjdC1ib2R5IiwgImxhYmVsIjogIkhUTUwgY29kZSIsICJyZWdleCI6ICJeLiokIiwgInR5cGUiOiAidGV4dCIsICJjb250YWluZXJDbGFzcyI6ICJ6LTAiLCAicGF0dGVybiI6ICJeLiokIiwgImlucFR5cGUiOiAiaW5wdXQiLCAibmFtZSI6ICJIVE1MIGNvZGUiLCAiY29sdW1ucyI6IHsicGMiOiA0LCAidGFibGV0IjogNiwgIm1vYmlsZSI6IDEyfSwgImRpc2FibGVkIjogZmFsc2UsICJ2YWx1ZSI6ICIiLCAibWV0aG9kIjogImRlZmF1bHQiLCAicHJldl92YWx1ZSI6ICIiLCAicG9wb3ZlcnMiOiBbeyJpY29uTmFtZSI6ICJkaXNrIiwgInRleHQiOiAiaW5wX3BvcG92ZXJfbXVsdGlzaXRlIn0sIHsiaWNvbk5hbWUiOiAiaW5mbyIsICJ0ZXh0IjogIlRoZSBIVE1MIGNvZGUgdG8gaW5qZWN0LiJ9XX19LCAiY2hlY2tzdW0iOiBudWxsfSwgeyJpZCI6ICJoZWFkZXJzIiwgInN0cmVhbSI6ICJubyIsICJuYW1lIjogIkhlYWRlcnMiLCAiZGVzY3JpcHRpb24iOiAiTWFuYWdlIEhUVFAgaGVhZGVycyBzZW50IHRvIGNsaWVudHMuIiwgInZlcnNpb24iOiAiMS4wIiwgInR5cGUiOiAiY29yZSIsICJtZXRob2QiOiAibWFudWFsIiwgInBhZ2UiOiBmYWxzZSwgInNldHRpbmdzIjogeyJSRU1PVkVfSEVBREVSUyI6IHsiY29udGV4dCI6ICJtdWx0aXNpdGUiLCAiZGVmYXVsdCI6ICJTZXJ2ZXIgRXhwZWN0LUNUIFgtUG93ZXJlZC1CeSBYLUFzcE5ldC1WZXJzaW9uIFgtQXNwTmV0TXZjLVZlcnNpb24iLCAiaGVscCI6ICJIZWFkZXJzIHRvIHJlbW92ZSAoSGVhZGVyMSBIZWFkZXIyIEhlYWRlcjMgLi4uKSIsICJpZCI6ICJyZW1vdmUtaGVhZGVycyIsICJsYWJlbCI6ICJSZW1vdmUgaGVhZGVycyIsICJyZWdleCI6ICJeKD8hICkoID9bXFx3XFwtXSspKiQiLCAidHlwZSI6ICJ0ZXh0IiwgImNvbnRhaW5lckNsYXNzIjogInotMTIiLCAicGF0dGVybiI6ICJeKD8hICkoID9bXFx3XFwtXSspKiQiLCAiaW5wVHlwZSI6ICJpbnB1dCIsICJuYW1lIjogIlJlbW92ZSBoZWFkZXJzIiwgImNvbHVtbnMiOiB7InBjIjogNCwgInRhYmxldCI6IDYsICJtb2JpbGUiOiAxMn0sICJkaXNhYmxlZCI6IGZhbHNlLCAidmFsdWUiOiAiU2VydmVyIEV4cGVjdC1DVCBYLVBvd2VyZWQtQnkgWC1Bc3BOZXQtVmVyc2lvbiBYLUFzcE5ldE12Yy1WZXJzaW9uIFB1YmxpYy1LZXktUGlucyIsICJtZXRob2QiOiAiZGVmYXVsdCIsICJwcmV2X3ZhbHVlIjogIlNlcnZlciBFeHBlY3QtQ1QgWC1Qb3dlcmVkLUJ5IFgtQXNwTmV0LVZlcnNpb24gWC1Bc3BOZXRNdmMtVmVyc2lvbiBQdWJsaWMtS2V5LVBpbnMiLCAicG9wb3ZlcnMiOiBbeyJpY29uTmFtZSI6ICJkaXNrIiwgInRleHQiOiAiaW5wX3BvcG92ZXJfbXVsdGlzaXRlIn0sIHsiaWNvbk5hbWUiOiAiaW5mbyIsICJ0ZXh0IjogIkhlYWRlcnMgdG8gcmVtb3ZlIChIZWFkZXIxIEhlYWRlcjIgSGVhZGVyMyAuLi4pIn1dfSwgIktFRVBfVVBTVFJFQU1fSEVBREVSUyI6IHsiY29udGV4dCI6ICJtdWx0aXNpdGUiLCAiZGVmYXVsdCI6ICJDb250ZW50LVNlY3VyaXR5LVBvbGljeSBQZXJtaXNzaW9ucy1Qb2xpY3kgRmVhdHVyZS1Qb2xpY3kgWC1GcmFtZS1PcHRpb25zIiwgImhlbHAiOiAiSGVhZGVycyB0byBrZWVwIGZyb20gdXBzdHJlYW0gKEhlYWRlcjEgSGVhZGVyMiBIZWFkZXIzIC4uLiBvciAqIGZvciBhbGwpLiIsICJpZCI6ICJrZWVwLXVwc3RyZWFtLWhlYWRlcnMiLCAibGFiZWwiOiAiS2VlcCB1cHN0cmVhbSBoZWFkZXJzIiwgInJlZ2V4IjogIl4oKD8hICkoID9bXFx3XFwtXSspK3xcXCopPyQiLCAidHlwZSI6ICJ0ZXh0IiwgImNvbnRhaW5lckNsYXNzIjogInotMTEiLCAicGF0dGVybiI6ICJeKCg/ISApKCA/W1xcd1xcLV0rKSt8XFwqKT8kIiwgImlucFR5cGUiOiAiaW5wdXQiLCAibmFtZSI6ICJLZWVwIHVwc3RyZWFtIGhlYWRlcnMiLCAiY29sdW1ucyI6IHsicGMiOiA0LCAidGFibGV0IjogNiwgIm1vYmlsZSI6IDEyfSwgImRpc2FibGVkIjogZmFsc2UsICJ2YWx1ZSI6ICJDb250ZW50LVNlY3VyaXR5LVBvbGljeSBQZXJtaXNzaW9ucy1Qb2xpY3kgWC1GcmFtZS1PcHRpb25zIiwgIm1ldGhvZCI6ICJkZWZhdWx0IiwgInByZXZfdmFsdWUiOiAiQ29udGVudC1TZWN1cml0eS1Qb2xpY3kgUGVybWlzc2lvbnMtUG9saWN5IFgtRnJhbWUtT3B0aW9ucyIsICJwb3BvdmVycyI6IFt7Imljb25OYW1lIjogImRpc2siLCAidGV4dCI6ICJpbnBfcG9wb3Zlcl9tdWx0aXNpdGUifSwgeyJpY29uTmFtZSI6ICJpbmZvIiwgInRleHQiOiAiSGVhZGVycyB0byBrZWVwIGZyb20gdXBzdHJlYW0gKEhlYWRlcjEgSGVhZGVyMiBIZWFkZXIzIC4uLiBvciAqIGZvciBhbGwpLiJ9XX0sICJTVFJJQ1RfVFJBTlNQT1JUX1NFQ1VSSVRZIjogeyJjb250ZXh0IjogIm11bHRpc2l0ZSIsICJkZWZhdWx0IjogIm1heC1hZ2U9MzE1MzYwMDAiLCAiaGVscCI6ICJWYWx1ZSBmb3IgdGhlIFN0cmljdC1UcmFuc3BvcnQtU2VjdXJpdHkgaGVhZGVyLiIsICJpZCI6ICJzdHJpY3QtdHJhbnNwb3J0LXNlY3VyaXR5IiwgImxhYmVsIjogIlN0cmljdC1UcmFuc3BvcnQtU2VjdXJpdHkiLCAicmVnZXgiOiAiXm1heC1hZ2U9XFxkKyg7IGluY2x1ZGVTdWJEb21haW5zKDsgcHJlbG9hZCk/KT8kIiwgInR5cGUiOiAidGV4dCIsICJjb250YWluZXJDbGFzcyI6ICJ6LTEwIiwgInBhdHRlcm4iOiAiXm1heC1hZ2U9XFxkKyg7IGluY2x1ZGVTdWJEb21haW5zKDsgcHJlbG9hZCk/KT8kIiwgImlucFR5cGUiOiAiaW5wdXQiLCAibmFtZSI6ICJTdHJpY3QtVHJhbnNwb3J0LVNlY3VyaXR5IiwgImNvbHVtbnMiOiB7InBjIjogNCwgInRhYmxldCI6IDYsICJtb2JpbGUiOiAxMn0sICJkaXNhYmxlZCI6IGZhbHNlLCAidmFsdWUiOiAibWF4LWFnZT0zMTUzNjAwMDsgaW5jbHVkZVN1YkRvbWFpbnM7IHByZWxvYWQiLCAibWV0aG9kIjogImRlZmF1bHQiLCAicHJldl92YWx1ZSI6ICJtYXgtYWdlPTMxNTM2MDAwOyBpbmNsdWRlU3ViRG9tYWluczsgcHJlbG9hZCIsICJwb3BvdmVycyI6IFt7Imljb25OYW1lIjogImRpc2siLCAidGV4dCI6ICJpbnBfcG9wb3Zlcl9tdWx0aXNpdGUifSwgeyJpY29uTmFtZSI6ICJpbmZvIiwgInRleHQiOiAiVmFsdWUgZm9yIHRoZSBTdHJpY3QtVHJhbnNwb3J0LVNlY3VyaXR5IGhlYWRlci4ifV19LCAiQ09PS0lFX0FVVE9fU0VDVVJFX0ZMQUciOiB7ImNvbnRleHQiOiAibXVsdGlzaXRlIiwgImRlZmF1bHQiOiAieWVzIiwgImhlbHAiOiAiQXV0b21hdGljYWxseSBhZGQgdGhlIFNlY3VyZSBmbGFnIHRvIGFsbCBjb29raWVzLiIsICJpZCI6ICJjb29raWUtYXV0by1zZWN1cmUtZmxhZyIsICJsYWJlbCI6ICJDb29raWUgYXV0byBTZWN1cmUgZmxhZyIsICJyZWdleCI6ICJeKHllc3xubykkIiwgInR5cGUiOiAiY2hlY2siLCAiY29udGFpbmVyQ2xhc3MiOiAiei04IiwgInBhdHRlcm4iOiAiXih5ZXN8bm8pJCIsICJpbnBUeXBlIjogImNoZWNrYm94IiwgIm5hbWUiOiAiQ29va2llIGF1dG8gU2VjdXJlIGZsYWciLCAiY29sdW1ucyI6IHsicGMiOiA0LCAidGFibGV0IjogNiwgIm1vYmlsZSI6IDEyfSwgImRpc2FibGVkIjogZmFsc2UsICJ2YWx1ZSI6ICJ5ZXMiLCAibWV0aG9kIjogImRlZmF1bHQiLCAicHJldl92YWx1ZSI6ICJ5ZXMiLCAicG9wb3ZlcnMiOiBbeyJpY29uTmFtZSI6ICJkaXNrIiwgInRleHQiOiAiaW5wX3BvcG92ZXJfbXVsdGlzaXRlIn0sIHsiaWNvbk5hbWUiOiAiaW5mbyIsICJ0ZXh0IjogIkF1dG9tYXRpY2FsbHkgYWRkIHRoZSBTZWN1cmUgZmxhZyB0byBhbGwgY29va2llcy4ifV19LCAiQ09OVEVOVF9TRUNVUklUWV9QT0xJQ1kiOiB7ImNvbnRleHQiOiAibXVsdGlzaXRlIiwgImRlZmF1bHQiOiAib2JqZWN0LXNyYyAnbm9uZSc7IGZvcm0tYWN0aW9uICdzZWxmJzsgZnJhbWUtYW5jZXN0b3JzICdzZWxmJzsiLCAiaGVscCI6ICJWYWx1ZSBmb3IgdGhlIENvbnRlbnQtU2VjdXJpdHktUG9saWN5IGhlYWRlci4iLCAiaWQiOiAiY29udGVudC1zZWN1cml0eS1wb2xpY3kiLCAibGFiZWwiOiAiQ29udGVudC1TZWN1cml0eS1Qb2xpY3kiLCAicmVnZXgiOiAiXi4qJCIsICJ0eXBlIjogInRleHQiLCAiY29udGFpbmVyQ2xhc3MiOiAiei03IiwgInBhdHRlcm4iOiAiXi4qJCIsICJpbnBUeXBlIjogImlucHV0IiwgIm5hbWUiOiAiQ29udGVudC1TZWN1cml0eS1Qb2xpY3kiLCAiY29sdW1ucyI6IHsicGMiOiA0LCAidGFibGV0IjogNiwgIm1vYmlsZSI6IDEyfSwgImRpc2FibGVkIjogZmFsc2UsICJ2YWx1ZSI6ICJvYmplY3Qtc3JjICdub25lJzsgZm9ybS1hY3Rpb24gJ3NlbGYnOyBmcmFtZS1hbmNlc3RvcnMgJ3NlbGYnOyIsICJtZXRob2QiOiAiZGVmYXVsdCIsICJwcmV2X3ZhbHVlIjogIm9iamVjdC1zcmMgJ25vbmUnOyBmb3JtLWFjdGlvbiAnc2VsZic7IGZyYW1lLWFuY2VzdG9ycyAnc2VsZic7IiwgInBvcG92ZXJzIjogW3siaWNvbk5hbWUiOiAiZGlzayIsICJ0ZXh0IjogImlucF9wb3BvdmVyX211bHRpc2l0ZSJ9LCB7Imljb25OYW1lIjogImluZm8iLCAidGV4dCI6ICJWYWx1ZSBmb3IgdGhlIENvbnRlbnQtU2VjdXJpdHktUG9saWN5IGhlYWRlci4ifV19LCAiQ09OVEVOVF9TRUNVUklUWV9QT0xJQ1lfUkVQT1JUX09OTFkiOiB7ImNvbnRleHQiOiAibXVsdGlzaXRlIiwgImRlZmF1bHQiOiAibm8iLCAiaGVscCI6ICJTZW5kIHJlcG9ydHMgZm9yIHZpb2xhdGlvbnMgb2YgdGhlIENvbnRlbnQtU2VjdXJpdHktUG9saWN5IGhlYWRlciBpbnN0ZWFkIG9mIGJsb2NraW5nIHRoZW0uIiwgImlkIjogImNvbnRlbnQtc2VjdXJpdHktcG9saWN5LXJlcG9ydC1vbmx5IiwgImxhYmVsIjogIkNvbnRlbnQtU2VjdXJpdHktUG9saWN5LVJlcG9ydC1Pbmx5IiwgInJlZ2V4IjogIl4oeWVzfG5vKSQiLCAidHlwZSI6ICJjaGVjayIsICJjb250YWluZXJDbGFzcyI6ICJ6LTYiLCAicGF0dGVybiI6ICJeKHllc3xubykkIiwgImlucFR5cGUiOiAiY2hlY2tib3giLCAibmFtZSI6ICJDb250ZW50LVNlY3VyaXR5LVBvbGljeS1SZXBvcnQtT25seSIsICJjb2x1bW5zIjogeyJwYyI6IDQsICJ0YWJsZXQiOiA2LCAibW9iaWxlIjogMTJ9LCAiZGlzYWJsZWQiOiBmYWxzZSwgInZhbHVlIjogIm5vIiwgIm1ldGhvZCI6ICJkZWZhdWx0IiwgInByZXZfdmFsdWUiOiAibm8iLCAicG9wb3ZlcnMiOiBbeyJpY29uTmFtZSI6ICJkaXNrIiwgInRleHQiOiAiaW5wX3BvcG92ZXJfbXVsdGlzaXRlIn0sIHsiaWNvbk5hbWUiOiAiaW5mbyIsICJ0ZXh0IjogIlNlbmQgcmVwb3J0cyBmb3IgdmlvbGF0aW9ucyBvZiB0aGUgQ29udGVudC1TZWN1cml0eS1Qb2xpY3kgaGVhZGVyIGluc3RlYWQgb2YgYmxvY2tpbmcgdGhlbS4ifV19LCAiUkVGRVJSRVJfUE9MSUNZIjogeyJjb250ZXh0IjogIm11bHRpc2l0ZSIsICJkZWZhdWx0IjogInN0cmljdC1vcmlnaW4td2hlbi1jcm9zcy1vcmlnaW4iLCAiaGVscCI6ICJWYWx1ZSBmb3IgdGhlIFJlZmVycmVyLVBvbGljeSBoZWFkZXIuIiwgImlkIjogInJlZmVycmVyLXBvbGljeSIsICJsYWJlbCI6ICJSZWZlcnJlci1Qb2xpY3kiLCAicmVnZXgiOiAiXig/IV4oLHwgKSkoKCwgKT8obm8tcmVmZXJyZXItd2hlbi1kb3duZ3JhZGV8bm8tcmVmZXJyZXJ8b3JpZ2luLXdoZW4tY3Jvc3Mtb3JpZ2lufHNhbWUtb3JpZ2lufHN0cmljdC1vcmlnaW4td2hlbi1jcm9zcy1vcmlnaW58c3RyaWN0LW9yaWdpbnxvcmlnaW58dW5zYWZlLXVybCkoPyFcXGIuKiwgXFw0XFxiKSkqJCIsICJ0eXBlIjogInRleHQiLCAiY29udGFpbmVyQ2xhc3MiOiAiei01IiwgInBhdHRlcm4iOiAiXig/IV4oLHwgKSkoKCwgKT8obm8tcmVmZXJyZXItd2hlbi1kb3duZ3JhZGV8bm8tcmVmZXJyZXJ8b3JpZ2luLXdoZW4tY3Jvc3Mtb3JpZ2lufHNhbWUtb3JpZ2lufHN0cmljdC1vcmlnaW4td2hlbi1jcm9zcy1vcmlnaW58c3RyaWN0LW9yaWdpbnxvcmlnaW58dW5zYWZlLXVybCkoPyFcXGIuKiwgXFw0XFxiKSkqJCIsICJpbnBUeXBlIjogImlucHV0IiwgIm5hbWUiOiAiUmVmZXJyZXItUG9saWN5IiwgImNvbHVtbnMiOiB7InBjIjogNCwgInRhYmxldCI6IDYsICJtb2JpbGUiOiAxMn0sICJkaXNhYmxlZCI6IGZhbHNlLCAidmFsdWUiOiAic3RyaWN0LW9yaWdpbi13aGVuLWNyb3NzLW9yaWdpbiIsICJtZXRob2QiOiAiZGVmYXVsdCIsICJwcmV2X3ZhbHVlIjogInN0cmljdC1vcmlnaW4td2hlbi1jcm9zcy1vcmlnaW4iLCAicG9wb3ZlcnMiOiBbeyJpY29uTmFtZSI6ICJkaXNrIiwgInRleHQiOiAiaW5wX3BvcG92ZXJfbXVsdGlzaXRlIn0sIHsiaWNvbk5hbWUiOiAiaW5mbyIsICJ0ZXh0IjogIlZhbHVlIGZvciB0aGUgUmVmZXJyZXItUG9saWN5IGhlYWRlci4ifV19LCAiUEVSTUlTU0lPTlNfUE9MSUNZIjogeyJjb250ZXh0IjogIm11bHRpc2l0ZSIsICJkZWZhdWx0IjogImFjY2VsZXJvbWV0ZXI9KCksIGFtYmllbnQtbGlnaHQtc2Vuc29yPSgpLCBhdXRvcGxheT0oKSwgYmF0dGVyeT0oKSwgY2FtZXJhPSgpLCBjcm9zcy1vcmlnaW4taXNvbGF0ZWQ9KCksIGRpc3BsYXktY2FwdHVyZT0oKSwgZG9jdW1lbnQtZG9tYWluPSgpLCBlbmNyeXB0ZWQtbWVkaWE9KCksIGV4ZWN1dGlvbi13aGlsZS1ub3QtcmVuZGVyZWQ9KCksIGV4ZWN1dGlvbi13aGlsZS1vdXQtb2Ytdmlld3BvcnQ9KCksIGZ1bGxzY3JlZW49KCksIGdlb2xvY2F0aW9uPSgpLCBneXJvc2NvcGU9KCksIGhpZD0oKSwgaWRsZS1kZXRlY3Rpb249KCksIG1hZ25ldG9tZXRlcj0oKSwgbWljcm9waG9uZT0oKSwgbWlkaT0oKSwgbmF2aWdhdGlvbi1vdmVycmlkZT0oKSwgcGF5bWVudD0oKSwgcGljdHVyZS1pbi1waWN0dXJlPSgpLCBwdWJsaWNrZXktY3JlZGVudGlhbHMtZ2V0PSgpLCBzY3JlZW4td2FrZS1sb2NrPSgpLCBzZXJpYWw9KCksIHVzYj0oKSwgd2ViLXNoYXJlPSgpLCB4ci1zcGF0aWFsLXRyYWNraW5nPSgpIiwgImhlbHAiOiAiVmFsdWUgZm9yIHRoZSBQZXJtaXNzaW9ucy1Qb2xpY3kgaGVhZGVyLiIsICJpZCI6ICJwZXJtaXNzaW9ucy1wb2xpY3kiLCAibGFiZWwiOiAiUGVybWlzc2lvbnMtUG9saWN5IiwgInJlZ2V4IjogIl4oPyFbLCBdKSgsPyA/KFthLXpcXC1dKykoPyEuKlteXFwtXVxcMj0pPShcXCp8XFwoKCA/KHNlbGZ8XFx1MDAyMmh0dHBzPzpcXC9cXC9bXFwtXFx3QDolLit+Iz1dK1tcXC1cXHdcXChcXCkhQDolKy5+Iz8mXFwvPSRdKlxcdTAwMjIpKD89WyBcXCldKSkqXFwpKSkqJCIsICJ0eXBlIjogInRleHQiLCAiY29udGFpbmVyQ2xhc3MiOiAiei00IiwgInBhdHRlcm4iOiAiXig/IVssIF0pKCw/ID8oW2EtelxcLV0rKSg/IS4qW15cXC1dXFwyPSk9KFxcKnxcXCgoID8oc2VsZnxcXHUwMDIyaHR0cHM/OlxcL1xcL1tcXC1cXHdAOiUuK34jPV0rW1xcLVxcd1xcKFxcKSFAOiUrLn4jPyZcXC89JF0qXFx1MDAyMikoPz1bIFxcKV0pKSpcXCkpKSokIiwgImlucFR5cGUiOiAiaW5wdXQiLCAibmFtZSI6ICJQZXJtaXNzaW9ucy1Qb2xpY3kiLCAiY29sdW1ucyI6IHsicGMiOiA0LCAidGFibGV0IjogNiwgIm1vYmlsZSI6IDEyfSwgImRpc2FibGVkIjogZmFsc2UsICJ2YWx1ZSI6ICJhY2NlbGVyb21ldGVyPSgpLCBhbWJpZW50LWxpZ2h0LXNlbnNvcj0oKSwgYXR0cmlidXRpb24tcmVwb3J0aW5nPSgpLCBhdXRvcGxheT0oKSwgYmF0dGVyeT0oKSwgYmx1ZXRvb3RoPSgpLCBicm93c2luZy10b3BpY3M9KCksIGNhbWVyYT0oKSwgY29tcHV0ZS1wcmVzc3VyZT0oKSwgZGlzcGxheS1jYXB0dXJlPSgpLCBkb2N1bWVudC1kb21haW49KCksIGVuY3J5cHRlZC1tZWRpYT0oKSwgZXhlY3V0aW9uLXdoaWxlLW5vdC1yZW5kZXJlZD0oKSwgZXhlY3V0aW9uLXdoaWxlLW91dC1vZi12aWV3cG9ydD0oKSwgZnVsbHNjcmVlbj0oKSwgZ2FtZXBhZD0oKSwgZ2VvbG9jYXRpb249KCksIGd5cm9zY29wZT0oKSwgaGlkPSgpLCBpZGVudGl0eS1jcmVkZW50aWFscy1nZXQ9KCksIGlkbGUtZGV0ZWN0aW9uPSgpLCBsb2NhbC1mb250cz0oKSwgbWFnbmV0b21ldGVyPSgpLCBtaWNyb3Bob25lPSgpLCBtaWRpPSgpLCBvdHAtY3JlZGVudGlhbHM9KCksIHBheW1lbnQ9KCksIHBpY3R1cmUtaW4tcGljdHVyZT0oKSwgcHVibGlja2V5LWNyZWRlbnRpYWxzLWNyZWF0ZT0oKSwgcHVibGlja2V5LWNyZWRlbnRpYWxzLWdldD0oKSwgc2NyZWVuLXdha2UtbG9jaz0oKSwgc2VyaWFsPSgpLCBzcGVha2VyLXNlbGVjdGlvbj0oKSwgc3RvcmFnZS1hY2Nlc3M9KCksIHVzYj0oKSwgd2ViLXNoYXJlPSgpLCB3aW5kb3ctbWFuYWdlbWVudD0oKSwgeHItc3BhdGlhbC10cmFja2luZz0oKSIsICJtZXRob2QiOiAiZGVmYXVsdCIsICJwcmV2X3ZhbHVlIjogImFjY2VsZXJvbWV0ZXI9KCksIGFtYmllbnQtbGlnaHQtc2Vuc29yPSgpLCBhdHRyaWJ1dGlvbi1yZXBvcnRpbmc9KCksIGF1dG9wbGF5PSgpLCBiYXR0ZXJ5PSgpLCBibHVldG9vdGg9KCksIGJyb3dzaW5nLXRvcGljcz0oKSwgY2FtZXJhPSgpLCBjb21wdXRlLXByZXNzdXJlPSgpLCBkaXNwbGF5LWNhcHR1cmU9KCksIGRvY3VtZW50LWRvbWFpbj0oKSwgZW5jcnlwdGVkLW1lZGlhPSgpLCBleGVjdXRpb24td2hpbGUtbm90LXJlbmRlcmVkPSgpLCBleGVjdXRpb24td2hpbGUtb3V0LW9mLXZpZXdwb3J0PSgpLCBmdWxsc2NyZWVuPSgpLCBnYW1lcGFkPSgpLCBnZW9sb2NhdGlvbj0oKSwgZ3lyb3Njb3BlPSgpLCBoaWQ9KCksIGlkZW50aXR5LWNyZWRlbnRpYWxzLWdldD0oKSwgaWRsZS1kZXRlY3Rpb249KCksIGxvY2FsLWZvbnRzPSgpLCBtYWduZXRvbWV0ZXI9KCksIG1pY3JvcGhvbmU9KCksIG1pZGk9KCksIG90cC1jcmVkZW50aWFscz0oKSwgcGF5bWVudD0oKSwgcGljdHVyZS1pbi1waWN0dXJlPSgpLCBwdWJsaWNrZXktY3JlZGVudGlhbHMtY3JlYXRlPSgpLCBwdWJsaWNrZXktY3JlZGVudGlhbHMtZ2V0PSgpLCBzY3JlZW4td2FrZS1sb2NrPSgpLCBzZXJpYWw9KCksIHNwZWFrZXItc2VsZWN0aW9uPSgpLCBzdG9yYWdlLWFjY2Vzcz0oKSwgdXNiPSgpLCB3ZWItc2hhcmU9KCksIHdpbmRvdy1tYW5hZ2VtZW50PSgpLCB4ci1zcGF0aWFsLXRyYWNraW5nPSgpIiwgInBvcG92ZXJzIjogW3siaWNvbk5hbWUiOiAiZGlzayIsICJ0ZXh0IjogImlucF9wb3BvdmVyX211bHRpc2l0ZSJ9LCB7Imljb25OYW1lIjogImluZm8iLCAidGV4dCI6ICJWYWx1ZSBmb3IgdGhlIFBlcm1pc3Npb25zLVBvbGljeSBoZWFkZXIuIn1dfSwgIkZFQVRVUkVfUE9MSUNZIjogeyJjb250ZXh0IjogIm11bHRpc2l0ZSIsICJkZWZhdWx0IjogImFjY2VsZXJvbWV0ZXIgJ25vbmUnOyBhbWJpZW50LWxpZ2h0LXNlbnNvciAnbm9uZSc7IGF1dG9wbGF5ICdub25lJzsgYmF0dGVyeSAnbm9uZSc7IGNhbWVyYSAnbm9uZSc7IGRpc3BsYXktY2FwdHVyZSAnbm9uZSc7IGRvY3VtZW50LWRvbWFpbiAnbm9uZSc7IGVuY3J5cHRlZC1tZWRpYSAnbm9uZSc7IGV4ZWN1dGlvbi13aGlsZS1ub3QtcmVuZGVyZWQgJ25vbmUnOyBleGVjdXRpb24td2hpbGUtb3V0LW9mLXZpZXdwb3J0ICdub25lJzsgZnVsbHNjcmVlbiAnbm9uZSc7IGdlb2xvY2F0aW9uICdub25lJzsgZ3lyb3Njb3BlICdub25lJzsgbGF5b3V0LWFuaW1hdGlvbiAnbm9uZSc7IGxlZ2FjeS1pbWFnZS1mb3JtYXRzICdub25lJzsgbWFnbmV0b21ldGVyICdub25lJzsgbWljcm9waG9uZSAnbm9uZSc7IG1pZGkgJ25vbmUnOyBuYXZpZ2F0aW9uLW92ZXJyaWRlICdub25lJzsgcGF5bWVudCAnbm9uZSc7IHBpY3R1cmUtaW4tcGljdHVyZSAnbm9uZSc7IHB1YmxpY2tleS1jcmVkZW50aWFscy1nZXQgJ25vbmUnOyBzcGVha2VyLXNlbGVjdGlvbiAnbm9uZSc7IHN5bmMteGhyICdub25lJzsgdW5vcHRpbWl6ZWQtaW1hZ2VzICdub25lJzsgdW5zaXplZC1tZWRpYSAnbm9uZSc7IHVzYiAnbm9uZSc7IHNjcmVlbi13YWtlLWxvY2sgJ25vbmUnOyB3ZWItc2hhcmUgJ25vbmUnOyB4ci1zcGF0aWFsLXRyYWNraW5nICdub25lJzsiLCAiaGVscCI6ICJWYWx1ZSBmb3IgdGhlIEZlYXR1cmUtUG9saWN5IGhlYWRlci4iLCAiaWQiOiAiZmVhdHVyZS1wb2xpY3kiLCAibGFiZWwiOiAiRmVhdHVyZS1Qb2xpY3kiLCAicmVnZXgiOiAiXig/IVs7IF0pKCA/KFtcXHdcXC1dKykoPyEuKlteXFwtXVxcMiApKCAoJyhub25lfHNlbGZ8c3RyaWN0LWR5bmFtaWN8cmVwb3J0LXNhbXBsZXx1bnNhZmUtaW5saW5lfHVuc2FmZS1ldmFsfHVuc2FmZS1oYXNoZXN8dW5zYWZlLWFsbG93LXJlZGlyZWN0cyknfGh0dHBzPzpcXC9cXC9bXFx3QDolLit+Iz1cXC1dK1tcXHdcXChcXCkhQDolKy5+Iz8mXFwvPSRcXC1dKikpKzspKiQiLCAidHlwZSI6ICJ0ZXh0IiwgImNvbnRhaW5lckNsYXNzIjogInotMyIsICJwYXR0ZXJuIjogIl4oPyFbOyBdKSggPyhbXFx3XFwtXSspKD8hLipbXlxcLV1cXDIgKSggKCcobm9uZXxzZWxmfHN0cmljdC1keW5hbWljfHJlcG9ydC1zYW1wbGV8dW5zYWZlLWlubGluZXx1bnNhZmUtZXZhbHx1bnNhZmUtaGFzaGVzfHVuc2FmZS1hbGxvdy1yZWRpcmVjdHMpJ3xodHRwcz86XFwvXFwvW1xcd0A6JS4rfiM9XFwtXStbXFx3XFwoXFwpIUA6JSsufiM/JlxcLz0kXFwtXSopKSs7KSokIiwgImlucFR5cGUiOiAiaW5wdXQiLCAibmFtZSI6ICJGZWF0dXJlLVBvbGljeSIsICJjb2x1bW5zIjogeyJwYyI6IDQsICJ0YWJsZXQiOiA2LCAibW9iaWxlIjogMTJ9LCAiZGlzYWJsZWQiOiBmYWxzZSwgInZhbHVlIjogImFjY2VsZXJvbWV0ZXIgJ25vbmUnOyBhbWJpZW50LWxpZ2h0LXNlbnNvciAnbm9uZSc7IGF1dG9wbGF5ICdub25lJzsgYmF0dGVyeSAnbm9uZSc7IGNhbWVyYSAnbm9uZSc7IGRpc3BsYXktY2FwdHVyZSAnbm9uZSc7IGRvY3VtZW50LWRvbWFpbiAnbm9uZSc7IGVuY3J5cHRlZC1tZWRpYSAnbm9uZSc7IGV4ZWN1dGlvbi13aGlsZS1ub3QtcmVuZGVyZWQgJ25vbmUnOyBleGVjdXRpb24td2hpbGUtb3V0LW9mLXZpZXdwb3J0ICdub25lJzsgZnVsbHNjcmVlbiAnbm9uZSc7IGdlb2xvY2F0aW9uICdub25lJzsgZ3lyb3Njb3BlICdub25lJzsgbGF5b3V0LWFuaW1hdGlvbiAnbm9uZSc7IGxlZ2FjeS1pbWFnZS1mb3JtYXRzICdub25lJzsgbWFnbmV0b21ldGVyICdub25lJzsgbWljcm9waG9uZSAnbm9uZSc7IG1pZGkgJ25vbmUnOyBuYXZpZ2F0aW9uLW92ZXJyaWRlICdub25lJzsgcGF5bWVudCAnbm9uZSc7IHBpY3R1cmUtaW4tcGljdHVyZSAnbm9uZSc7IHB1YmxpY2tleS1jcmVkZW50aWFscy1nZXQgJ25vbmUnOyBzcGVha2VyLXNlbGVjdGlvbiAnbm9uZSc7IHN5bmMteGhyICdub25lJzsgdW5vcHRpbWl6ZWQtaW1hZ2VzICdub25lJzsgdW5zaXplZC1tZWRpYSAnbm9uZSc7IHVzYiAnbm9uZSc7IHNjcmVlbi13YWtlLWxvY2sgJ25vbmUnOyB3ZWItc2hhcmUgJ25vbmUnOyB4ci1zcGF0aWFsLXRyYWNraW5nICdub25lJzsiLCAicHJldl92YWx1ZSI6ICJhY2NlbGVyb21ldGVyICdub25lJzsgYW1iaWVudC1saWdodC1zZW5zb3IgJ25vbmUnOyBhdXRvcGxheSAnbm9uZSc7IGJhdHRlcnkgJ25vbmUnOyBjYW1lcmEgJ25vbmUnOyBkaXNwbGF5LWNhcHR1cmUgJ25vbmUnOyBkb2N1bWVudC1kb21haW4gJ25vbmUnOyBlbmNyeXB0ZWQtbWVkaWEgJ25vbmUnOyBleGVjdXRpb24td2hpbGUtbm90LXJlbmRlcmVkICdub25lJzsgZXhlY3V0aW9uLXdoaWxlLW91dC1vZi12aWV3cG9ydCAnbm9uZSc7IGZ1bGxzY3JlZW4gJ25vbmUnOyBnZW9sb2NhdGlvbiAnbm9uZSc7IGd5cm9zY29wZSAnbm9uZSc7IGxheW91dC1hbmltYXRpb24gJ25vbmUnOyBsZWdhY3ktaW1hZ2UtZm9ybWF0cyAnbm9uZSc7IG1hZ25ldG9tZXRlciAnbm9uZSc7IG1pY3JvcGhvbmUgJ25vbmUnOyBtaWRpICdub25lJzsgbmF2aWdhdGlvbi1vdmVycmlkZSAnbm9uZSc7IHBheW1lbnQgJ25vbmUnOyBwaWN0dXJlLWluLXBpY3R1cmUgJ25vbmUnOyBwdWJsaWNrZXktY3JlZGVudGlhbHMtZ2V0ICdub25lJzsgc3BlYWtlci1zZWxlY3Rpb24gJ25vbmUnOyBzeW5jLXhociAnbm9uZSc7IHVub3B0aW1pemVkLWltYWdlcyAnbm9uZSc7IHVuc2l6ZWQtbWVkaWEgJ25vbmUnOyB1c2IgJ25vbmUnOyBzY3JlZW4td2FrZS1sb2NrICdub25lJzsgd2ViLXNoYXJlICdub25lJzsgeHItc3BhdGlhbC10cmFja2luZyAnbm9uZSc7IiwgInBvcG92ZXJzIjogW3siaWNvbk5hbWUiOiAiZGlzayIsICJ0ZXh0IjogImlucF9wb3BvdmVyX211bHRpc2l0ZSJ9LCB7Imljb25OYW1lIjogImluZm8iLCAidGV4dCI6ICJWYWx1ZSBmb3IgdGhlIEZlYXR1cmUtUG9saWN5IGhlYWRlci4ifV19LCAiWF9GUkFNRV9PUFRJT05TIjogeyJjb250ZXh0IjogIm11bHRpc2l0ZSIsICJkZWZhdWx0IjogIlNBTUVPUklHSU4iLCAiaGVscCI6ICJWYWx1ZSBmb3IgdGhlIFgtRnJhbWUtT3B0aW9ucyBoZWFkZXIuIiwgImlkIjogIngtZnJhbWUtb3B0aW9ucyIsICJsYWJlbCI6ICJYLUZyYW1lLU9wdGlvbnMiLCAicmVnZXgiOiAiXihERU5ZfFNBTUVPUklHSU4pPyQiLCAidHlwZSI6ICJzZWxlY3QiLCAiY29udGFpbmVyQ2xhc3MiOiAiei0yIiwgInBhdHRlcm4iOiAiXihERU5ZfFNBTUVPUklHSU4pPyQiLCAiaW5wVHlwZSI6ICJzZWxlY3QiLCAibmFtZSI6ICJYLUZyYW1lLU9wdGlvbnMiLCAidmFsdWVzIjogWyIiLCAiREVOWSIsICJTQU1FT1JJR0lOIl0sICJjb2x1bW5zIjogeyJwYyI6IDQsICJ0YWJsZXQiOiA2LCAibW9iaWxlIjogMTJ9LCAiZGlzYWJsZWQiOiBmYWxzZSwgInZhbHVlIjogIlNBTUVPUklHSU4iLCAibWV0aG9kIjogImRlZmF1bHQiLCAicHJldl92YWx1ZSI6ICJTQU1FT1JJR0lOIiwgInBvcG92ZXJzIjogW3siaWNvbk5hbWUiOiAiZGlzayIsICJ0ZXh0IjogImlucF9wb3BvdmVyX211bHRpc2l0ZSJ9LCB7Imljb25OYW1lIjogImluZm8iLCAidGV4dCI6ICJWYWx1ZSBmb3IgdGhlIFgtRnJhbWUtT3B0aW9ucyBoZWFkZXIuIn1dfSwgIlhfQ09OVEVOVF9UWVBFX09QVElPTlMiOiB7ImNvbnRleHQiOiAibXVsdGlzaXRlIiwgImRlZmF1bHQiOiAibm9zbmlmZiIsICJoZWxwIjogIlZhbHVlIGZvciB0aGUgWC1Db250ZW50LVR5cGUtT3B0aW9ucyBoZWFkZXIuIiwgImlkIjogIngtY29udGVudC10eXBlLW9wdGlvbnMiLCAibGFiZWwiOiAiWC1Db250ZW50LVR5cGUtT3B0aW9ucyIsICJyZWdleCI6ICJeKG5vc25pZmYpPyQiLCAidHlwZSI6ICJzZWxlY3QiLCAiY29udGFpbmVyQ2xhc3MiOiAiei0xIiwgInBhdHRlcm4iOiAiXihub3NuaWZmKT8kIiwgImlucFR5cGUiOiAic2VsZWN0IiwgIm5hbWUiOiAiWC1Db250ZW50LVR5cGUtT3B0aW9ucyIsICJ2YWx1ZXMiOiBbIiIsICJub3NuaWZmIl0sICJjb2x1bW5zIjogeyJwYyI6IDQsICJ0YWJsZXQiOiA2LCAibW9iaWxlIjogMTJ9LCAiZGlzYWJsZWQiOiBmYWxzZSwgInZhbHVlIjogIm5vc25pZmYiLCAibWV0aG9kIjogImRlZmF1bHQiLCAicHJldl92YWx1ZSI6ICJub3NuaWZmIiwgInBvcG92ZXJzIjogW3siaWNvbk5hbWUiOiAiZGlzayIsICJ0ZXh0IjogImlucF9wb3BvdmVyX211bHRpc2l0ZSJ9LCB7Imljb25OYW1lIjogImluZm8iLCAidGV4dCI6ICJWYWx1ZSBmb3IgdGhlIFgtQ29udGVudC1UeXBlLU9wdGlvbnMgaGVhZGVyLiJ9XX0sICJYX1hTU19QUk9URUNUSU9OIjogeyJjb250ZXh0IjogIm11bHRpc2l0ZSIsICJkZWZhdWx0IjogIjE7IG1vZGU9YmxvY2siLCAiaGVscCI6ICJWYWx1ZSBmb3IgdGhlIFgtWFNTLVByb3RlY3Rpb24gaGVhZGVyLiIsICJpZCI6ICJ4LXhzcy1wcm90ZWN0aW9uIiwgImxhYmVsIjogIlgtWFNTLVByb3RlY3Rpb24iLCAicmVnZXgiOiAiXjB8MSg7IChtb2RlPWJsb2NrfHJlcG9ydD1odHRwcz86XFwvXFwvW1xcLVxcd0A6JS4rfiM9XStbXFwtXFx3XFwoXFwpIUA6JSsufiM/JlxcLz0kXSopKT8kIiwgInR5cGUiOiAidGV4dCIsICJjb250YWluZXJDbGFzcyI6ICJ6LTAiLCAicGF0dGVybiI6ICJeMHwxKDsgKG1vZGU9YmxvY2t8cmVwb3J0PWh0dHBzPzpcXC9cXC9bXFwtXFx3QDolLit+Iz1dK1tcXC1cXHdcXChcXCkhQDolKy5+Iz8mXFwvPSRdKikpPyQiLCAiaW5wVHlwZSI6ICJpbnB1dCIsICJuYW1lIjogIlgtWFNTLVByb3RlY3Rpb24iLCAiY29sdW1ucyI6IHsicGMiOiA0LCAidGFibGV0IjogNiwgIm1vYmlsZSI6IDEyfSwgImRpc2FibGVkIjogZmFsc2UsICJ2YWx1ZSI6ICIxOyBtb2RlPWJsb2NrIiwgIm1ldGhvZCI6ICJkZWZhdWx0IiwgInByZXZfdmFsdWUiOiAiMTsgbW9kZT1ibG9jayIsICJwb3BvdmVycyI6IFt7Imljb25OYW1lIjogImRpc2siLCAidGV4dCI6ICJpbnBfcG9wb3Zlcl9tdWx0aXNpdGUifSwgeyJpY29uTmFtZSI6ICJpbmZvIiwgInRleHQiOiAiVmFsdWUgZm9yIHRoZSBYLVhTUy1Qcm90ZWN0aW9uIGhlYWRlci4ifV19fSwgImNoZWNrc3VtIjogbnVsbCwgIm11bHRpcGxlc19zY2hlbWEiOiB7ImN1c3RvbS1oZWFkZXJzIjogeyJDVVNUT01fSEVBREVSIjogeyJjb250ZXh0IjogIm11bHRpc2l0ZSIsICJkZWZhdWx0IjogIiIsICJoZWxwIjogIkN1c3RvbSBoZWFkZXIgdG8gYWRkIChIZWFkZXJOYW1lOiBIZWFkZXJWYWx1ZSkuIiwgImlkIjogImN1c3RvbS1oZWFkZXIiLCAibGFiZWwiOiAiQ3VzdG9tIGhlYWRlciAoSGVhZGVyTmFtZTogSGVhZGVyVmFsdWUpIiwgInJlZ2V4IjogIl4oW1xcd1xcLV0rOiAuKyk/JCIsICJ0eXBlIjogInRleHQiLCAibXVsdGlwbGUiOiAiY3VzdG9tLWhlYWRlcnMiLCAicGF0dGVybiI6ICJeKFtcXHdcXC1dKzogLispPyQiLCAiaW5wVHlwZSI6ICJpbnB1dCIsICJuYW1lIjogIkN1c3RvbSBoZWFkZXIgKEhlYWRlck5hbWU6IEhlYWRlclZhbHVlKSIsICJjb2x1bW5zIjogeyJwYyI6IDQsICJ0YWJsZXQiOiA2LCAibW9iaWxlIjogMTJ9LCAiZGlzYWJsZWQiOiBmYWxzZSwgInZhbHVlIjogIiIsICJwcmV2X3ZhbHVlIjogIiIsICJwb3BvdmVycyI6IFt7Imljb25OYW1lIjogImRpc2siLCAidGV4dCI6ICJpbnBfcG9wb3Zlcl9tdWx0aXNpdGUifSwgeyJpY29uTmFtZSI6ICJpbmZvIiwgInRleHQiOiAiQ3VzdG9tIGhlYWRlciB0byBhZGQgKEhlYWRlck5hbWU6IEhlYWRlclZhbHVlKS4ifV0sICJjb250YWluZXJDbGFzcyI6ICJ6LTEzIn19LCAiY29va2llLWZsYWdzIjogeyJDT09LSUVfRkxBR1MiOiB7ImNvbnRleHQiOiAibXVsdGlzaXRlIiwgImRlZmF1bHQiOiAiKiBIdHRwT25seSBTYW1lU2l0ZT1MYXgiLCAiaGVscCI6ICJDb29raWUgZmxhZ3MgYXV0b21hdGljYWxseSBhZGRlZCB0byBhbGwgY29va2llcyAodmFsdWUgYWNjZXB0ZWQgZm9yIG5naW54X2Nvb2tpZV9mbGFnX21vZHVsZSkuIiwgImlkIjogImNvb2tpZS1mbGFncyIsICJsYWJlbCI6ICJDb29raWUgZmxhZ3MiLCAicmVnZXgiOiAiXihcXCp8W147XSspKCAoSHR0cE9ubHl8KFNhbWVTaXRlKSg/IS4qXFw0KSg9KExheHxTdHJpY3QpKT8pKD8hLipcXDMpKSokIiwgInR5cGUiOiAidGV4dCIsICJtdWx0aXBsZSI6ICJjb29raWUtZmxhZ3MiLCAicGF0dGVybiI6ICJeKFxcKnxbXjtdKykoIChIdHRwT25seXwoU2FtZVNpdGUpKD8hLipcXDQpKD0oTGF4fFN0cmljdCkpPykoPyEuKlxcMykpKiQiLCAiaW5wVHlwZSI6ICJpbnB1dCIsICJuYW1lIjogIkNvb2tpZSBmbGFncyIsICJjb2x1bW5zIjogeyJwYyI6IDQsICJ0YWJsZXQiOiA2LCAibW9iaWxlIjogMTJ9LCAiZGlzYWJsZWQiOiBmYWxzZSwgInZhbHVlIjogIiogSHR0cE9ubHkgU2FtZVNpdGU9TGF4IiwgInByZXZfdmFsdWUiOiAiKiBIdHRwT25seSBTYW1lU2l0ZT1MYXgiLCAicG9wb3ZlcnMiOiBbeyJpY29uTmFtZSI6ICJkaXNrIiwgInRleHQiOiAiaW5wX3BvcG92ZXJfbXVsdGlzaXRlIn0sIHsiaWNvbk5hbWUiOiAiaW5mbyIsICJ0ZXh0IjogIkNvb2tpZSBmbGFncyBhdXRvbWF0aWNhbGx5IGFkZGVkIHRvIGFsbCBjb29raWVzICh2YWx1ZSBhY2NlcHRlZCBmb3IgbmdpbnhfY29va2llX2ZsYWdfbW9kdWxlKS4ifV0sICJjb250YWluZXJDbGFzcyI6ICJ6LTEyIn19fSwgIm11bHRpcGxlcyI6IHsiY3VzdG9tLWhlYWRlcnMiOiB7IjAiOiB7IkNVU1RPTV9IRUFERVIiOiB7ImNvbnRleHQiOiAibXVsdGlzaXRlIiwgImRlZmF1bHQiOiAiIiwgImhlbHAiOiAiQ3VzdG9tIGhlYWRlciB0byBhZGQgKEhlYWRlck5hbWU6IEhlYWRlclZhbHVlKS4iLCAiaWQiOiAiY3VzdG9tLWhlYWRlciIsICJsYWJlbCI6ICJDdXN0b20gaGVhZGVyIChIZWFkZXJOYW1lOiBIZWFkZXJWYWx1ZSkiLCAicmVnZXgiOiAiXihbXFx3XFwtXSs6IC4rKT8kIiwgInR5cGUiOiAidGV4dCIsICJtdWx0aXBsZSI6ICJjdXN0b20taGVhZGVycyIsICJwYXR0ZXJuIjogIl4oW1xcd1xcLV0rOiAuKyk/JCIsICJpbnBUeXBlIjogImlucHV0IiwgIm5hbWUiOiAiQ3VzdG9tIGhlYWRlciAoSGVhZGVyTmFtZTogSGVhZGVyVmFsdWUpIiwgImNvbHVtbnMiOiB7InBjIjogNCwgInRhYmxldCI6IDYsICJtb2JpbGUiOiAxMn0sICJkaXNhYmxlZCI6IGZhbHNlLCAidmFsdWUiOiAiIiwgInByZXZfdmFsdWUiOiAiIiwgInBvcG92ZXJzIjogW3siaWNvbk5hbWUiOiAiZGlzayIsICJ0ZXh0IjogImlucF9wb3BvdmVyX211bHRpc2l0ZSJ9LCB7Imljb25OYW1lIjogImluZm8iLCAidGV4dCI6ICJDdXN0b20gaGVhZGVyIHRvIGFkZCAoSGVhZGVyTmFtZTogSGVhZGVyVmFsdWUpLiJ9XSwgImNvbnRhaW5lckNsYXNzIjogInotMTMiLCAibWV0aG9kIjogImRlZmF1bHQifX19LCAiY29va2llLWZsYWdzIjogeyIwIjogeyJDT09LSUVfRkxBR1MiOiB7ImNvbnRleHQiOiAibXVsdGlzaXRlIiwgImRlZmF1bHQiOiAiKiBIdHRwT25seSBTYW1lU2l0ZT1MYXgiLCAiaGVscCI6ICJDb29raWUgZmxhZ3MgYXV0b21hdGljYWxseSBhZGRlZCB0byBhbGwgY29va2llcyAodmFsdWUgYWNjZXB0ZWQgZm9yIG5naW54X2Nvb2tpZV9mbGFnX21vZHVsZSkuIiwgImlkIjogImNvb2tpZS1mbGFncyIsICJsYWJlbCI6ICJDb29raWUgZmxhZ3MiLCAicmVnZXgiOiAiXihcXCp8W147XSspKCAoSHR0cE9ubHl8KFNhbWVTaXRlKSg/IS4qXFw0KSg9KExheHxTdHJpY3QpKT8pKD8hLipcXDMpKSokIiwgInR5cGUiOiAidGV4dCIsICJtdWx0aXBsZSI6ICJjb29raWUtZmxhZ3MiLCAicGF0dGVybiI6ICJeKFxcKnxbXjtdKykoIChIdHRwT25seXwoU2FtZVNpdGUpKD8hLipcXDQpKD0oTGF4fFN0cmljdCkpPykoPyEuKlxcMykpKiQiLCAiaW5wVHlwZSI6ICJpbnB1dCIsICJuYW1lIjogIkNvb2tpZSBmbGFncyIsICJjb2x1bW5zIjogeyJwYyI6IDQsICJ0YWJsZXQiOiA2LCAibW9iaWxlIjogMTJ9LCAiZGlzYWJsZWQiOiBmYWxzZSwgInZhbHVlIjogIiogSHR0cE9ubHkgU2FtZVNpdGU9TGF4IiwgInByZXZfdmFsdWUiOiAiKiBIdHRwT25seSBTYW1lU2l0ZT1MYXgiLCAicG9wb3ZlcnMiOiBbeyJpY29uTmFtZSI6ICJkaXNrIiwgInRleHQiOiAiaW5wX3BvcG92ZXJfbXVsdGlzaXRlIn0sIHsiaWNvbk5hbWUiOiAiaW5mbyIsICJ0ZXh0IjogIkNvb2tpZSBmbGFncyBhdXRvbWF0aWNhbGx5IGFkZGVkIHRvIGFsbCBjb29raWVzICh2YWx1ZSBhY2NlcHRlZCBmb3IgbmdpbnhfY29va2llX2ZsYWdfbW9kdWxlKS4ifV0sICJjb250YWluZXJDbGFzcyI6ICJ6LTEyIiwgIm1ldGhvZCI6ICJkZWZhdWx0In19fX19LCB7ImlkIjogImpvYnMiLCAic3RyZWFtIjogInllcyIsICJuYW1lIjogIkpvYnMiLCAiZGVzY3JpcHRpb24iOiAiRmFrZSBjb3JlIHBsdWdpbiBmb3IgaW50ZXJuYWwgam9icy4iLCAidmVyc2lvbiI6ICIxLjAiLCAidHlwZSI6ICJjb3JlIiwgIm1ldGhvZCI6ICJtYW51YWwiLCAicGFnZSI6IGZhbHNlLCAic2V0dGluZ3MiOiB7fSwgImNoZWNrc3VtIjogbnVsbH0sIHsiaWQiOiAibGV0c2VuY3J5cHQiLCAic3RyZWFtIjogInllcyIsICJuYW1lIjogIkxldCdzIEVuY3J5cHQiLCAiZGVzY3JpcHRpb24iOiAiQXV0b21hdGljIGNyZWF0aW9uLCByZW5ld2FsIGFuZCBjb25maWd1cmF0aW9uIG9mIExldCdzIEVuY3J5cHQgY2VydGlmaWNhdGVzLiIsICJ2ZXJzaW9uIjogIjEuMCIsICJ0eXBlIjogImNvcmUiLCAibWV0aG9kIjogIm1hbnVhbCIsICJwYWdlIjogZmFsc2UsICJzZXR0aW5ncyI6IHsiQVVUT19MRVRTX0VOQ1JZUFQiOiB7ImNvbnRleHQiOiAibXVsdGlzaXRlIiwgImRlZmF1bHQiOiAibm8iLCAiaGVscCI6ICJBY3RpdmF0ZSBhdXRvbWF0aWMgTGV0J3MgRW5jcnlwdCBtb2RlLiIsICJpZCI6ICJhdXRvLWxldHMtZW5jcnlwdCIsICJsYWJlbCI6ICJBdXRvbWF0aWMgTGV0J3MgRW5jcnlwdCIsICJyZWdleCI6ICJeKHllc3xubykkIiwgInR5cGUiOiAiY2hlY2siLCAiY29udGFpbmVyQ2xhc3MiOiAiei0zIiwgInBhdHRlcm4iOiAiXih5ZXN8bm8pJCIsICJpbnBUeXBlIjogImNoZWNrYm94IiwgIm5hbWUiOiAiQXV0b21hdGljIExldCdzIEVuY3J5cHQiLCAiY29sdW1ucyI6IHsicGMiOiA0LCAidGFibGV0IjogNiwgIm1vYmlsZSI6IDEyfSwgImRpc2FibGVkIjogZmFsc2UsICJ2YWx1ZSI6ICJubyIsICJtZXRob2QiOiAiZGVmYXVsdCIsICJwcmV2X3ZhbHVlIjogIm5vIiwgInBvcG92ZXJzIjogW3siaWNvbk5hbWUiOiAiZGlzayIsICJ0ZXh0IjogImlucF9wb3BvdmVyX211bHRpc2l0ZSJ9LCB7Imljb25OYW1lIjogImluZm8iLCAidGV4dCI6ICJBY3RpdmF0ZSBhdXRvbWF0aWMgTGV0J3MgRW5jcnlwdCBtb2RlLiJ9XX0sICJFTUFJTF9MRVRTX0VOQ1JZUFQiOiB7ImNvbnRleHQiOiAibXVsdGlzaXRlIiwgImRlZmF1bHQiOiAiIiwgImhlbHAiOiAiRW1haWwgdXNlZCBmb3IgTGV0J3MgRW5jcnlwdCBub3RpZmljYXRpb24gYW5kIGluIGNlcnRpZmljYXRlLiIsICJpZCI6ICJlbWFpbC1sZXRzLWVuY3J5cHQiLCAibGFiZWwiOiAiRW1haWwgTGV0J3MgRW5jcnlwdCIsICJyZWdleCI6ICJeKFteQCBcXHRcXHJcXG5dK0BbXkAgXFx0XFxyXFxuXStcXC5bXkAgXFx0XFxyXFxuXSspPyQiLCAidHlwZSI6ICJ0ZXh0IiwgImNvbnRhaW5lckNsYXNzIjogInotMiIsICJwYXR0ZXJuIjogIl4oW15AIFxcdFxcclxcbl0rQFteQCBcXHRcXHJcXG5dK1xcLlteQCBcXHRcXHJcXG5dKyk/JCIsICJpbnBUeXBlIjogImlucHV0IiwgIm5hbWUiOiAiRW1haWwgTGV0J3MgRW5jcnlwdCIsICJjb2x1bW5zIjogeyJwYyI6IDQsICJ0YWJsZXQiOiA2LCAibW9iaWxlIjogMTJ9LCAiZGlzYWJsZWQiOiBmYWxzZSwgInZhbHVlIjogIiIsICJtZXRob2QiOiAiZGVmYXVsdCIsICJwcmV2X3ZhbHVlIjogIiIsICJwb3BvdmVycyI6IFt7Imljb25OYW1lIjogImRpc2siLCAidGV4dCI6ICJpbnBfcG9wb3Zlcl9tdWx0aXNpdGUifSwgeyJpY29uTmFtZSI6ICJpbmZvIiwgInRleHQiOiAiRW1haWwgdXNlZCBmb3IgTGV0J3MgRW5jcnlwdCBub3RpZmljYXRpb24gYW5kIGluIGNlcnRpZmljYXRlLiJ9XX0sICJVU0VfTEVUU19FTkNSWVBUX1NUQUdJTkciOiB7ImNvbnRleHQiOiAibXVsdGlzaXRlIiwgImRlZmF1bHQiOiAibm8iLCAiaGVscCI6ICJVc2UgdGhlIHN0YWdpbmcgZW52aXJvbm1lbnQgZm9yIExldFx1MjAxOXMgRW5jcnlwdCBjZXJ0aWZpY2F0ZSBnZW5lcmF0aW9uLiBVc2VmdWwgd2hlbiB5b3UgYXJlIHRlc3RpbmcgeW91ciBkZXBsb3ltZW50cyB0byBhdm9pZCBiZWluZyByYXRlIGxpbWl0ZWQgaW4gdGhlIHByb2R1Y3Rpb24gZW52aXJvbm1lbnQuIiwgImlkIjogInVzZS1sZXRzLWVuY3J5cHQtc3RhZ2luZyIsICJsYWJlbCI6ICJVc2UgTGV0J3MgRW5jcnlwdCBTdGFnaW5nIiwgInJlZ2V4IjogIl4oeWVzfG5vKSQiLCAidHlwZSI6ICJjaGVjayIsICJjb250YWluZXJDbGFzcyI6ICJ6LTEiLCAicGF0dGVybiI6ICJeKHllc3xubykkIiwgImlucFR5cGUiOiAiY2hlY2tib3giLCAibmFtZSI6ICJVc2UgTGV0J3MgRW5jcnlwdCBTdGFnaW5nIiwgImNvbHVtbnMiOiB7InBjIjogNCwgInRhYmxldCI6IDYsICJtb2JpbGUiOiAxMn0sICJkaXNhYmxlZCI6IGZhbHNlLCAidmFsdWUiOiAibm8iLCAibWV0aG9kIjogImRlZmF1bHQiLCAicHJldl92YWx1ZSI6ICJubyIsICJwb3BvdmVycyI6IFt7Imljb25OYW1lIjogImRpc2siLCAidGV4dCI6ICJpbnBfcG9wb3Zlcl9tdWx0aXNpdGUifSwgeyJpY29uTmFtZSI6ICJpbmZvIiwgInRleHQiOiAiVXNlIHRoZSBzdGFnaW5nIGVudmlyb25tZW50IGZvciBMZXRcdTIwMTlzIEVuY3J5cHQgY2VydGlmaWNhdGUgZ2VuZXJhdGlvbi4gVXNlZnVsIHdoZW4geW91IGFyZSB0ZXN0aW5nIHlvdXIgZGVwbG95bWVudHMgdG8gYXZvaWQgYmVpbmcgcmF0ZSBsaW1pdGVkIGluIHRoZSBwcm9kdWN0aW9uIGVudmlyb25tZW50LiJ9XX0sICJMRVRTX0VOQ1JZUFRfQ0xFQVJfT0xEX0NFUlRTIjogeyJjb250ZXh0IjogImdsb2JhbCIsICJkZWZhdWx0IjogIm5vIiwgImhlbHAiOiAiQ2xlYXIgb2xkIGNlcnRpZmljYXRlcyB3aGVuIHJlbmV3aW5nLiIsICJpZCI6ICJsZXRzLWVuY3J5cHQtY2xlYXItb2xkLWNlcnRzIiwgImxhYmVsIjogIkNsZWFyIG9sZCBjZXJ0aWZpY2F0ZXMgd2hlbiB0aGV5IGFyZSBubyBsb25nZXIgbmVlZGVkIiwgInJlZ2V4IjogIl4oeWVzfG5vKSQiLCAidHlwZSI6ICJjaGVjayIsICJjb250YWluZXJDbGFzcyI6ICJ6LTAiLCAicGF0dGVybiI6ICJeKHllc3xubykkIiwgImlucFR5cGUiOiAiY2hlY2tib3giLCAibmFtZSI6ICJDbGVhciBvbGQgY2VydGlmaWNhdGVzIHdoZW4gdGhleSBhcmUgbm8gbG9uZ2VyIG5lZWRlZCIsICJjb2x1bW5zIjogeyJwYyI6IDQsICJ0YWJsZXQiOiA2LCAibW9iaWxlIjogMTJ9LCAiZGlzYWJsZWQiOiBmYWxzZSwgInZhbHVlIjogIm5vIiwgIm1ldGhvZCI6ICJkZWZhdWx0IiwgInByZXZfdmFsdWUiOiAibm8iLCAicG9wb3ZlcnMiOiBbeyJpY29uTmFtZSI6ICJnbG9iZSIsICJ0ZXh0IjogImlucF9wb3BvdmVyX2dsb2JhbCJ9LCB7Imljb25OYW1lIjogImluZm8iLCAidGV4dCI6ICJDbGVhciBvbGQgY2VydGlmaWNhdGVzIHdoZW4gcmVuZXdpbmcuIn1dfX0sICJjaGVja3N1bSI6IG51bGx9LCB7ImlkIjogImxpbWl0IiwgInN0cmVhbSI6ICJwYXJ0aWFsIiwgIm5hbWUiOiAiTGltaXQiLCAiZGVzY3JpcHRpb24iOiAiTGltaXQgbWF4aW11bSBudW1iZXIgb2YgcmVxdWVzdHMgYW5kIGNvbm5lY3Rpb25zLiIsICJ2ZXJzaW9uIjogIjEuMCIsICJ0eXBlIjogImNvcmUiLCAibWV0aG9kIjogIm1hbnVhbCIsICJwYWdlIjogdHJ1ZSwgInNldHRpbmdzIjogeyJVU0VfTElNSVRfUkVRIjogeyJjb250ZXh0IjogIm11bHRpc2l0ZSIsICJkZWZhdWx0IjogInllcyIsICJoZWxwIjogIkFjdGl2YXRlIGxpbWl0IHJlcXVlc3RzIGZlYXR1cmUuIiwgImlkIjogInVzZS1saW1pdC1yZXEiLCAibGFiZWwiOiAiQWN0aXZhdGUgbGltaXQgcmVxdWVzdHMiLCAicmVnZXgiOiAiXih5ZXN8bm8pJCIsICJ0eXBlIjogImNoZWNrIiwgImNvbnRhaW5lckNsYXNzIjogInotNiIsICJwYXR0ZXJuIjogIl4oeWVzfG5vKSQiLCAiaW5wVHlwZSI6ICJjaGVja2JveCIsICJuYW1lIjogIkFjdGl2YXRlIGxpbWl0IHJlcXVlc3RzIiwgImNvbHVtbnMiOiB7InBjIjogNCwgInRhYmxldCI6IDYsICJtb2JpbGUiOiAxMn0sICJkaXNhYmxlZCI6IGZhbHNlLCAidmFsdWUiOiAieWVzIiwgIm1ldGhvZCI6ICJkZWZhdWx0IiwgInByZXZfdmFsdWUiOiAieWVzIiwgInBvcG92ZXJzIjogW3siaWNvbk5hbWUiOiAiZGlzayIsICJ0ZXh0IjogImlucF9wb3BvdmVyX211bHRpc2l0ZSJ9LCB7Imljb25OYW1lIjogImluZm8iLCAidGV4dCI6ICJBY3RpdmF0ZSBsaW1pdCByZXF1ZXN0cyBmZWF0dXJlLiJ9XX0sICJVU0VfTElNSVRfQ09OTiI6IHsiY29udGV4dCI6ICJtdWx0aXNpdGUiLCAiZGVmYXVsdCI6ICJ5ZXMiLCAiaGVscCI6ICJBY3RpdmF0ZSBsaW1pdCBjb25uZWN0aW9ucyBmZWF0dXJlLiIsICJpZCI6ICJ1c2UtbGltaXQtY29ubiIsICJsYWJlbCI6ICJBY3RpdmF0ZSBsaW1pdCBjb25uZWN0aW9ucyIsICJyZWdleCI6ICJeKHllc3xubykkIiwgInR5cGUiOiAiY2hlY2siLCAiY29udGFpbmVyQ2xhc3MiOiAiei0zIiwgInBhdHRlcm4iOiAiXih5ZXN8bm8pJCIsICJpbnBUeXBlIjogImNoZWNrYm94IiwgIm5hbWUiOiAiQWN0aXZhdGUgbGltaXQgY29ubmVjdGlvbnMiLCAiY29sdW1ucyI6IHsicGMiOiA0LCAidGFibGV0IjogNiwgIm1vYmlsZSI6IDEyfSwgImRpc2FibGVkIjogZmFsc2UsICJ2YWx1ZSI6ICJ5ZXMiLCAibWV0aG9kIjogImRlZmF1bHQiLCAicHJldl92YWx1ZSI6ICJ5ZXMiLCAicG9wb3ZlcnMiOiBbeyJpY29uTmFtZSI6ICJkaXNrIiwgInRleHQiOiAiaW5wX3BvcG92ZXJfbXVsdGlzaXRlIn0sIHsiaWNvbk5hbWUiOiAiaW5mbyIsICJ0ZXh0IjogIkFjdGl2YXRlIGxpbWl0IGNvbm5lY3Rpb25zIGZlYXR1cmUuIn1dfSwgIkxJTUlUX0NPTk5fTUFYX0hUVFAxIjogeyJjb250ZXh0IjogIm11bHRpc2l0ZSIsICJkZWZhdWx0IjogIjEwIiwgImhlbHAiOiAiTWF4aW11bSBudW1iZXIgb2YgY29ubmVjdGlvbnMgcGVyIElQIHdoZW4gdXNpbmcgSFRUUC8xLlggcHJvdG9jb2wuIiwgImlkIjogImxpbWl0LWNvbm4tbWF4LWh0dHAxIiwgImxhYmVsIjogIk1heGltdW0gbnVtYmVyIG9mIEhUVFAvMS5YIGNvbm5lY3Rpb25zIiwgInJlZ2V4IjogIl5cXGQrJCIsICJ0eXBlIjogInRleHQiLCAiY29udGFpbmVyQ2xhc3MiOiAiei0yIiwgInBhdHRlcm4iOiAiXlxcZCskIiwgImlucFR5cGUiOiAiaW5wdXQiLCAibmFtZSI6ICJNYXhpbXVtIG51bWJlciBvZiBIVFRQLzEuWCBjb25uZWN0aW9ucyIsICJjb2x1bW5zIjogeyJwYyI6IDQsICJ0YWJsZXQiOiA2LCAibW9iaWxlIjogMTJ9LCAiZGlzYWJsZWQiOiBmYWxzZSwgInZhbHVlIjogIjEwIiwgIm1ldGhvZCI6ICJkZWZhdWx0IiwgInByZXZfdmFsdWUiOiAiMTAiLCAicG9wb3ZlcnMiOiBbeyJpY29uTmFtZSI6ICJkaXNrIiwgInRleHQiOiAiaW5wX3BvcG92ZXJfbXVsdGlzaXRlIn0sIHsiaWNvbk5hbWUiOiAiaW5mbyIsICJ0ZXh0IjogIk1heGltdW0gbnVtYmVyIG9mIGNvbm5lY3Rpb25zIHBlciBJUCB3aGVuIHVzaW5nIEhUVFAvMS5YIHByb3RvY29sLiJ9XX0sICJMSU1JVF9DT05OX01BWF9IVFRQMiI6IHsiY29udGV4dCI6ICJtdWx0aXNpdGUiLCAiZGVmYXVsdCI6ICIxMDAiLCAiaGVscCI6ICJNYXhpbXVtIG51bWJlciBvZiBzdHJlYW1zIHBlciBJUCB3aGVuIHVzaW5nIEhUVFAvMiBwcm90b2NvbC4iLCAiaWQiOiAibGltaXQtY29ubi1tYXgtaHR0cDIiLCAibGFiZWwiOiAiTWF4aW11bSBudW1iZXIgb2YgSFRUUC8yIHN0cmVhbXMiLCAicmVnZXgiOiAiXlxcZCskIiwgInR5cGUiOiAidGV4dCIsICJjb250YWluZXJDbGFzcyI6ICJ6LTEiLCAicGF0dGVybiI6ICJeXFxkKyQiLCAiaW5wVHlwZSI6ICJpbnB1dCIsICJuYW1lIjogIk1heGltdW0gbnVtYmVyIG9mIEhUVFAvMiBzdHJlYW1zIiwgImNvbHVtbnMiOiB7InBjIjogNCwgInRhYmxldCI6IDYsICJtb2JpbGUiOiAxMn0sICJkaXNhYmxlZCI6IGZhbHNlLCAidmFsdWUiOiAiMTAwIiwgIm1ldGhvZCI6ICJkZWZhdWx0IiwgInByZXZfdmFsdWUiOiAiMTAwIiwgInBvcG92ZXJzIjogW3siaWNvbk5hbWUiOiAiZGlzayIsICJ0ZXh0IjogImlucF9wb3BvdmVyX211bHRpc2l0ZSJ9LCB7Imljb25OYW1lIjogImluZm8iLCAidGV4dCI6ICJNYXhpbXVtIG51bWJlciBvZiBzdHJlYW1zIHBlciBJUCB3aGVuIHVzaW5nIEhUVFAvMiBwcm90b2NvbC4ifV19LCAiTElNSVRfQ09OTl9NQVhfU1RSRUFNIjogeyJjb250ZXh0IjogIm11bHRpc2l0ZSIsICJkZWZhdWx0IjogIjEwIiwgImhlbHAiOiAiTWF4aW11bSBudW1iZXIgb2YgY29ubmVjdGlvbnMgcGVyIElQIHdoZW4gdXNpbmcgc3RyZWFtLiIsICJpZCI6ICJsaW1pdC1jb25uLW1heC1zdHJlYW0iLCAibGFiZWwiOiAiTWF4aW11bSBudW1iZXIgb2Ygc3RyZWFtIGNvbm5lY3Rpb25zIiwgInJlZ2V4IjogIl5cXGQrJCIsICJ0eXBlIjogInRleHQiLCAiY29udGFpbmVyQ2xhc3MiOiAiei0wIiwgInBhdHRlcm4iOiAiXlxcZCskIiwgImlucFR5cGUiOiAiaW5wdXQiLCAibmFtZSI6ICJNYXhpbXVtIG51bWJlciBvZiBzdHJlYW0gY29ubmVjdGlvbnMiLCAiY29sdW1ucyI6IHsicGMiOiA0LCAidGFibGV0IjogNiwgIm1vYmlsZSI6IDEyfSwgImRpc2FibGVkIjogZmFsc2UsICJ2YWx1ZSI6ICIxMCIsICJtZXRob2QiOiAiZGVmYXVsdCIsICJwcmV2X3ZhbHVlIjogIjEwIiwgInBvcG92ZXJzIjogW3siaWNvbk5hbWUiOiAiZGlzayIsICJ0ZXh0IjogImlucF9wb3BvdmVyX211bHRpc2l0ZSJ9LCB7Imljb25OYW1lIjogImluZm8iLCAidGV4dCI6ICJNYXhpbXVtIG51bWJlciBvZiBjb25uZWN0aW9ucyBwZXIgSVAgd2hlbiB1c2luZyBzdHJlYW0uIn1dfX0sICJjaGVja3N1bSI6IG51bGwsICJtdWx0aXBsZXNfc2NoZW1hIjogeyJsaW1pdC1yZXEiOiB7IkxJTUlUX1JFUV9VUkwiOiB7ImNvbnRleHQiOiAibXVsdGlzaXRlIiwgImRlZmF1bHQiOiAiLyIsICJoZWxwIjogIlVSTCAoUENSRSByZWdleCkgd2hlcmUgdGhlIGxpbWl0IHJlcXVlc3Qgd2lsbCBiZSBhcHBsaWVkIG9yIHNwZWNpYWwgdmFsdWUgLyBmb3IgYWxsIHJlcXVlc3RzLiIsICJpZCI6ICJsaW1pdC1yZXEtdXJsIiwgImxhYmVsIjogIkxpbWl0IHJlcXVlc3QgVVJMIiwgInJlZ2V4IjogIl4uKyQiLCAidHlwZSI6ICJ0ZXh0IiwgIm11bHRpcGxlIjogImxpbWl0LXJlcSIsICJwYXR0ZXJuIjogIl4uKyQiLCAiaW5wVHlwZSI6ICJpbnB1dCIsICJuYW1lIjogIkxpbWl0IHJlcXVlc3QgVVJMIiwgImNvbHVtbnMiOiB7InBjIjogNCwgInRhYmxldCI6IDYsICJtb2JpbGUiOiAxMn0sICJkaXNhYmxlZCI6IGZhbHNlLCAidmFsdWUiOiAiLyIsICJwcmV2X3ZhbHVlIjogIi8iLCAicG9wb3ZlcnMiOiBbeyJpY29uTmFtZSI6ICJkaXNrIiwgInRleHQiOiAiaW5wX3BvcG92ZXJfbXVsdGlzaXRlIn0sIHsiaWNvbk5hbWUiOiAiaW5mbyIsICJ0ZXh0IjogIlVSTCAoUENSRSByZWdleCkgd2hlcmUgdGhlIGxpbWl0IHJlcXVlc3Qgd2lsbCBiZSBhcHBsaWVkIG9yIHNwZWNpYWwgdmFsdWUgLyBmb3IgYWxsIHJlcXVlc3RzLiJ9XSwgImNvbnRhaW5lckNsYXNzIjogInotNiJ9LCAiTElNSVRfUkVRX1JBVEUiOiB7ImNvbnRleHQiOiAibXVsdGlzaXRlIiwgImRlZmF1bHQiOiAiMnIvcyIsICJoZWxwIjogIlJhdGUgdG8gYXBwbHkgdG8gdGhlIFVSTCAocyBmb3Igc2Vjb25kLCBtIGZvciBtaW51dGUsIGggZm9yIGhvdXIgYW5kIGQgZm9yIGRheSkuIiwgImlkIjogImxpbWl0LXJlcS1yYXRlIiwgImxhYmVsIjogIkxpbWl0IHJlcXVlc3QgUmF0ZSIsICJyZWdleCI6ICJeXFxkK3IvW3NtaGRdJCIsICJ0eXBlIjogInRleHQiLCAibXVsdGlwbGUiOiAibGltaXQtcmVxIiwgInBhdHRlcm4iOiAiXlxcZCtyL1tzbWhkXSQiLCAiaW5wVHlwZSI6ICJpbnB1dCIsICJuYW1lIjogIkxpbWl0IHJlcXVlc3QgUmF0ZSIsICJjb2x1bW5zIjogeyJwYyI6IDQsICJ0YWJsZXQiOiA2LCAibW9iaWxlIjogMTJ9LCAiZGlzYWJsZWQiOiBmYWxzZSwgInZhbHVlIjogIjJyL3MiLCAicHJldl92YWx1ZSI6ICIyci9zIiwgInBvcG92ZXJzIjogW3siaWNvbk5hbWUiOiAiZGlzayIsICJ0ZXh0IjogImlucF9wb3BvdmVyX211bHRpc2l0ZSJ9LCB7Imljb25OYW1lIjogImluZm8iLCAidGV4dCI6ICJSYXRlIHRvIGFwcGx5IHRvIHRoZSBVUkwgKHMgZm9yIHNlY29uZCwgbSBmb3IgbWludXRlLCBoIGZvciBob3VyIGFuZCBkIGZvciBkYXkpLiJ9XSwgImNvbnRhaW5lckNsYXNzIjogInotNSJ9fX0sICJtdWx0aXBsZXMiOiB7ImxpbWl0LXJlcSI6IHsiMCI6IHsiTElNSVRfUkVRX1VSTCI6IHsiY29udGV4dCI6ICJtdWx0aXNpdGUiLCAiZGVmYXVsdCI6ICIvIiwgImhlbHAiOiAiVVJMIChQQ1JFIHJlZ2V4KSB3aGVyZSB0aGUgbGltaXQgcmVxdWVzdCB3aWxsIGJlIGFwcGxpZWQgb3Igc3BlY2lhbCB2YWx1ZSAvIGZvciBhbGwgcmVxdWVzdHMuIiwgImlkIjogImxpbWl0LXJlcS11cmwiLCAibGFiZWwiOiAiTGltaXQgcmVxdWVzdCBVUkwiLCAicmVnZXgiOiAiXi4rJCIsICJ0eXBlIjogInRleHQiLCAibXVsdGlwbGUiOiAibGltaXQtcmVxIiwgInBhdHRlcm4iOiAiXi4rJCIsICJpbnBUeXBlIjogImlucHV0IiwgIm5hbWUiOiAiTGltaXQgcmVxdWVzdCBVUkwiLCAiY29sdW1ucyI6IHsicGMiOiA0LCAidGFibGV0IjogNiwgIm1vYmlsZSI6IDEyfSwgImRpc2FibGVkIjogZmFsc2UsICJ2YWx1ZSI6ICIvIiwgInByZXZfdmFsdWUiOiAiLyIsICJwb3BvdmVycyI6IFt7Imljb25OYW1lIjogImRpc2siLCAidGV4dCI6ICJpbnBfcG9wb3Zlcl9tdWx0aXNpdGUifSwgeyJpY29uTmFtZSI6ICJpbmZvIiwgInRleHQiOiAiVVJMIChQQ1JFIHJlZ2V4KSB3aGVyZSB0aGUgbGltaXQgcmVxdWVzdCB3aWxsIGJlIGFwcGxpZWQgb3Igc3BlY2lhbCB2YWx1ZSAvIGZvciBhbGwgcmVxdWVzdHMuIn1dLCAiY29udGFpbmVyQ2xhc3MiOiAiei02IiwgIm1ldGhvZCI6ICJkZWZhdWx0In0sICJMSU1JVF9SRVFfUkFURSI6IHsiY29udGV4dCI6ICJtdWx0aXNpdGUiLCAiZGVmYXVsdCI6ICIyci9zIiwgImhlbHAiOiAiUmF0ZSB0byBhcHBseSB0byB0aGUgVVJMIChzIGZvciBzZWNvbmQsIG0gZm9yIG1pbnV0ZSwgaCBmb3IgaG91ciBhbmQgZCBmb3IgZGF5KS4iLCAiaWQiOiAibGltaXQtcmVxLXJhdGUiLCAibGFiZWwiOiAiTGltaXQgcmVxdWVzdCBSYXRlIiwgInJlZ2V4IjogIl5cXGQrci9bc21oZF0kIiwgInR5cGUiOiAidGV4dCIsICJtdWx0aXBsZSI6ICJsaW1pdC1yZXEiLCAicGF0dGVybiI6ICJeXFxkK3IvW3NtaGRdJCIsICJpbnBUeXBlIjogImlucHV0IiwgIm5hbWUiOiAiTGltaXQgcmVxdWVzdCBSYXRlIiwgImNvbHVtbnMiOiB7InBjIjogNCwgInRhYmxldCI6IDYsICJtb2JpbGUiOiAxMn0sICJkaXNhYmxlZCI6IGZhbHNlLCAidmFsdWUiOiAiMnIvcyIsICJwcmV2X3ZhbHVlIjogIjJyL3MiLCAicG9wb3ZlcnMiOiBbeyJpY29uTmFtZSI6ICJkaXNrIiwgInRleHQiOiAiaW5wX3BvcG92ZXJfbXVsdGlzaXRlIn0sIHsiaWNvbk5hbWUiOiAiaW5mbyIsICJ0ZXh0IjogIlJhdGUgdG8gYXBwbHkgdG8gdGhlIFVSTCAocyBmb3Igc2Vjb25kLCBtIGZvciBtaW51dGUsIGggZm9yIGhvdXIgYW5kIGQgZm9yIGRheSkuIn1dLCAiY29udGFpbmVyQ2xhc3MiOiAiei01IiwgIm1ldGhvZCI6ICJkZWZhdWx0In19fX19LCB7ImlkIjogIm1ldHJpY3MiLCAic3RyZWFtIjogInBhcnRpYWwiLCAibmFtZSI6ICJNZXRyaWNzIiwgImRlc2NyaXB0aW9uIjogIk1ldHJpY3MgY29sbGVjdGlvbiBhbmQgcmV0cmlldmUuIiwgInZlcnNpb24iOiAiMS4wIiwgInR5cGUiOiAiY29yZSIsICJtZXRob2QiOiAibWFudWFsIiwgInBhZ2UiOiBmYWxzZSwgInNldHRpbmdzIjogeyJVU0VfTUVUUklDUyI6IHsiY29udGV4dCI6ICJtdWx0aXNpdGUiLCAiZGVmYXVsdCI6ICJ5ZXMiLCAiaGVscCI6ICJFbmFibGUgY29sbGVjdGlvbiBhbmQgcmV0cmlldmFsIG9mIGludGVybmFsIG1ldHJpY3MuIiwgImlkIjogInVzZS1tZXRyaWNzIiwgImxhYmVsIjogIlVzZSBtZXRyaWNzIiwgInJlZ2V4IjogIl4oeWVzfG5vKSQiLCAidHlwZSI6ICJjaGVjayIsICJjb250YWluZXJDbGFzcyI6ICJ6LTIiLCAicGF0dGVybiI6ICJeKHllc3xubykkIiwgImlucFR5cGUiOiAiY2hlY2tib3giLCAibmFtZSI6ICJVc2UgbWV0cmljcyIsICJjb2x1bW5zIjogeyJwYyI6IDQsICJ0YWJsZXQiOiA2LCAibW9iaWxlIjogMTJ9LCAiZGlzYWJsZWQiOiBmYWxzZSwgInZhbHVlIjogInllcyIsICJtZXRob2QiOiAiZGVmYXVsdCIsICJwcmV2X3ZhbHVlIjogInllcyIsICJwb3BvdmVycyI6IFt7Imljb25OYW1lIjogImRpc2siLCAidGV4dCI6ICJpbnBfcG9wb3Zlcl9tdWx0aXNpdGUifSwgeyJpY29uTmFtZSI6ICJpbmZvIiwgInRleHQiOiAiRW5hYmxlIGNvbGxlY3Rpb24gYW5kIHJldHJpZXZhbCBvZiBpbnRlcm5hbCBtZXRyaWNzLiJ9XX0sICJNRVRSSUNTX01FTU9SWV9TSVpFIjogeyJjb250ZXh0IjogImdsb2JhbCIsICJkZWZhdWx0IjogIjE2bSIsICJoZWxwIjogIlNpemUgb2YgdGhlIGludGVybmFsIHN0b3JhZ2UgZm9yIG1ldHJpY3MuIiwgImlkIjogIm1ldHJpY3MtbWVtb3J5LXNpemUiLCAibGFiZWwiOiAiTWV0cmljcyBtZW1vcnkgc2l6ZSIsICJyZWdleCI6ICJeXFxkK1trS21NZ0ddPyQiLCAidHlwZSI6ICJ0ZXh0IiwgImNvbnRhaW5lckNsYXNzIjogInotMSIsICJwYXR0ZXJuIjogIl5cXGQrW2tLbU1nR10/JCIsICJpbnBUeXBlIjogImlucHV0IiwgIm5hbWUiOiAiTWV0cmljcyBtZW1vcnkgc2l6ZSIsICJjb2x1bW5zIjogeyJwYyI6IDQsICJ0YWJsZXQiOiA2LCAibW9iaWxlIjogMTJ9LCAiZGlzYWJsZWQiOiBmYWxzZSwgInZhbHVlIjogIjE2bSIsICJtZXRob2QiOiAiZGVmYXVsdCIsICJwcmV2X3ZhbHVlIjogIjE2bSIsICJwb3BvdmVycyI6IFt7Imljb25OYW1lIjogImdsb2JlIiwgInRleHQiOiAiaW5wX3BvcG92ZXJfZ2xvYmFsIn0sIHsiaWNvbk5hbWUiOiAiaW5mbyIsICJ0ZXh0IjogIlNpemUgb2YgdGhlIGludGVybmFsIHN0b3JhZ2UgZm9yIG1ldHJpY3MuIn1dfSwgIk1FVFJJQ1NfTUFYX0JMT0NLRURfUkVRVUVTVFMiOiB7ImNvbnRleHQiOiAiZ2xvYmFsIiwgImRlZmF1bHQiOiAiMTAwIiwgImhlbHAiOiAiTWF4aW11bSBudW1iZXIgb2YgYmxvY2tlZCByZXF1ZXN0cyB0byBzdG9yZSAocGVyIHdvcmtlcikuIiwgImlkIjogIm1ldHJpY3MtbWF4LWJsb2NrZWQtcmVxdWVzdHMiLCAibGFiZWwiOiAiTWV0cmljcyBtYXggYmxvY2tlZCByZXF1ZXN0cyIsICJyZWdleCI6ICJeXFxkKyQiLCAidHlwZSI6ICJ0ZXh0IiwgImNvbnRhaW5lckNsYXNzIjogInotMCIsICJwYXR0ZXJuIjogIl5cXGQrJCIsICJpbnBUeXBlIjogImlucHV0IiwgIm5hbWUiOiAiTWV0cmljcyBtYXggYmxvY2tlZCByZXF1ZXN0cyIsICJjb2x1bW5zIjogeyJwYyI6IDQsICJ0YWJsZXQiOiA2LCAibW9iaWxlIjogMTJ9LCAiZGlzYWJsZWQiOiBmYWxzZSwgInZhbHVlIjogIjEwMCIsICJtZXRob2QiOiAiZGVmYXVsdCIsICJwcmV2X3ZhbHVlIjogIjEwMCIsICJwb3BvdmVycyI6IFt7Imljb25OYW1lIjogImdsb2JlIiwgInRleHQiOiAiaW5wX3BvcG92ZXJfZ2xvYmFsIn0sIHsiaWNvbk5hbWUiOiAiaW5mbyIsICJ0ZXh0IjogIk1heGltdW0gbnVtYmVyIG9mIGJsb2NrZWQgcmVxdWVzdHMgdG8gc3RvcmUgKHBlciB3b3JrZXIpLiJ9XX19LCAiY2hlY2tzdW0iOiBudWxsfSwgeyJpZCI6ICJtaXNjIiwgInN0cmVhbSI6ICJwYXJ0aWFsIiwgIm5hbWUiOiAiTWlzY2VsbGFuZW91cyIsICJkZXNjcmlwdGlvbiI6ICJNaXNjZWxsYW5lb3VzIHNldHRpbmdzLiIsICJ2ZXJzaW9uIjogIjEuMCIsICJ0eXBlIjogImNvcmUiLCAibWV0aG9kIjogIm1hbnVhbCIsICJwYWdlIjogdHJ1ZSwgInNldHRpbmdzIjogeyJESVNBQkxFX0RFRkFVTFRfU0VSVkVSIjogeyJjb250ZXh0IjogImdsb2JhbCIsICJkZWZhdWx0IjogIm5vIiwgImhlbHAiOiAiRGVueSBIVFRQIHJlcXVlc3QgaWYgdGhlIHJlcXVlc3Qgdmhvc3QgaXMgdW5rbm93bi4iLCAiaWQiOiAiZGlzYWJsZS1kZWZhdWx0LXNlcnZlciIsICJsYWJlbCI6ICJEaXNhYmxlIGRlZmF1bHQgc2VydmVyIiwgInJlZ2V4IjogIl4oeWVzfG5vKSQiLCAidHlwZSI6ICJjaGVjayIsICJjb250YWluZXJDbGFzcyI6ICJ6LTIwIiwgInBhdHRlcm4iOiAiXih5ZXN8bm8pJCIsICJpbnBUeXBlIjogImNoZWNrYm94IiwgIm5hbWUiOiAiRGlzYWJsZSBkZWZhdWx0IHNlcnZlciIsICJjb2x1bW5zIjogeyJwYyI6IDQsICJ0YWJsZXQiOiA2LCAibW9iaWxlIjogMTJ9LCAiZGlzYWJsZWQiOiB0cnVlLCAidmFsdWUiOiAieWVzIiwgIm1ldGhvZCI6ICJzY2hlZHVsZXIiLCAicHJldl92YWx1ZSI6ICJ5ZXMiLCAicG9wb3ZlcnMiOiBbeyJpY29uTmFtZSI6ICJ0cmVzcGFzcyIsICJ0ZXh0IjogImlucF9wb3BvdmVyX21ldGhvZF9kaXNhYmxlZCJ9LCB7Imljb25OYW1lIjogImdsb2JlIiwgInRleHQiOiAiaW5wX3BvcG92ZXJfZ2xvYmFsIn0sIHsiaWNvbk5hbWUiOiAiaW5mbyIsICJ0ZXh0IjogIkRlbnkgSFRUUCByZXF1ZXN0IGlmIHRoZSByZXF1ZXN0IHZob3N0IGlzIHVua25vd24uIn1dfSwgIkRJU0FCTEVfREVGQVVMVF9TRVJWRVJfU1RSSUNUX1NOSSI6IHsiY29udGV4dCI6ICJnbG9iYWwiLCAiZGVmYXVsdCI6ICJubyIsICJoZWxwIjogIkNsb3NlIFNTTC9UTFMgY29ubmVjdGlvbiBpZiB0aGUgU05JIGlzIHVua25vd24uIiwgImlkIjogImRpc2FibGUtZGVmYXVsdC1zZXJ2ZXItc3RyaWN0LXNuaSIsICJsYWJlbCI6ICJEaXNhYmxlIGRlZmF1bHQgc2VydmVyIHN0cmljdCBTTkkiLCAicmVnZXgiOiAiXih5ZXN8bm8pJCIsICJ0eXBlIjogImNoZWNrIiwgImNvbnRhaW5lckNsYXNzIjogInotMTkiLCAicGF0dGVybiI6ICJeKHllc3xubykkIiwgImlucFR5cGUiOiAiY2hlY2tib3giLCAibmFtZSI6ICJEaXNhYmxlIGRlZmF1bHQgc2VydmVyIHN0cmljdCBTTkkiLCAiY29sdW1ucyI6IHsicGMiOiA0LCAidGFibGV0IjogNiwgIm1vYmlsZSI6IDEyfSwgImRpc2FibGVkIjogZmFsc2UsICJ2YWx1ZSI6ICJubyIsICJtZXRob2QiOiAiZGVmYXVsdCIsICJwcmV2X3ZhbHVlIjogIm5vIiwgInBvcG92ZXJzIjogW3siaWNvbk5hbWUiOiAiZ2xvYmUiLCAidGV4dCI6ICJpbnBfcG9wb3Zlcl9nbG9iYWwifSwgeyJpY29uTmFtZSI6ICJpbmZvIiwgInRleHQiOiAiQ2xvc2UgU1NML1RMUyBjb25uZWN0aW9uIGlmIHRoZSBTTkkgaXMgdW5rbm93bi4ifV19LCAiUkVESVJFQ1RfSFRUUF9UT19IVFRQUyI6IHsiY29udGV4dCI6ICJtdWx0aXNpdGUiLCAiZGVmYXVsdCI6ICJubyIsICJoZWxwIjogIlJlZGlyZWN0IGFsbCBIVFRQIHJlcXVlc3QgdG8gSFRUUFMuIiwgImlkIjogInJlZGlyZWN0LWh0dHAtdG8taHR0cHMiLCAibGFiZWwiOiAiUmVkaXJlY3QgSFRUUCB0byBIVFRQUyIsICJyZWdleCI6ICJeKHllc3xubykkIiwgInR5cGUiOiAiY2hlY2siLCAiY29udGFpbmVyQ2xhc3MiOiAiei0xOCIsICJwYXR0ZXJuIjogIl4oeWVzfG5vKSQiLCAiaW5wVHlwZSI6ICJjaGVja2JveCIsICJuYW1lIjogIlJlZGlyZWN0IEhUVFAgdG8gSFRUUFMiLCAiY29sdW1ucyI6IHsicGMiOiA0LCAidGFibGV0IjogNiwgIm1vYmlsZSI6IDEyfSwgImRpc2FibGVkIjogZmFsc2UsICJ2YWx1ZSI6ICJubyIsICJtZXRob2QiOiAiZGVmYXVsdCIsICJwcmV2X3ZhbHVlIjogIm5vIiwgInBvcG92ZXJzIjogW3siaWNvbk5hbWUiOiAiZGlzayIsICJ0ZXh0IjogImlucF9wb3BvdmVyX211bHRpc2l0ZSJ9LCB7Imljb25OYW1lIjogImluZm8iLCAidGV4dCI6ICJSZWRpcmVjdCBhbGwgSFRUUCByZXF1ZXN0IHRvIEhUVFBTLiJ9XX0sICJBVVRPX1JFRElSRUNUX0hUVFBfVE9fSFRUUFMiOiB7ImNvbnRleHQiOiAibXVsdGlzaXRlIiwgImRlZmF1bHQiOiAieWVzIiwgImhlbHAiOiAiVHJ5IHRvIGRldGVjdCBpZiBIVFRQUyBpcyB1c2VkIGFuZCBhY3RpdmF0ZSBIVFRQIHRvIEhUVFBTIHJlZGlyZWN0aW9uIGlmIHRoYXQncyB0aGUgY2FzZS4iLCAiaWQiOiAiYXV0by1yZWRpcmVjdC1odHRwLXRvLWh0dHBzIiwgImxhYmVsIjogIkF1dG8gcmVkaXJlY3QgSFRUUCB0byBIVFRQUyIsICJyZWdleCI6ICJeKHllc3xubykkIiwgInR5cGUiOiAiY2hlY2siLCAiY29udGFpbmVyQ2xhc3MiOiAiei0xNyIsICJwYXR0ZXJuIjogIl4oeWVzfG5vKSQiLCAiaW5wVHlwZSI6ICJjaGVja2JveCIsICJuYW1lIjogIkF1dG8gcmVkaXJlY3QgSFRUUCB0byBIVFRQUyIsICJjb2x1bW5zIjogeyJwYyI6IDQsICJ0YWJsZXQiOiA2LCAibW9iaWxlIjogMTJ9LCAiZGlzYWJsZWQiOiBmYWxzZSwgInZhbHVlIjogInllcyIsICJtZXRob2QiOiAiZGVmYXVsdCIsICJwcmV2X3ZhbHVlIjogInllcyIsICJwb3BvdmVycyI6IFt7Imljb25OYW1lIjogImRpc2siLCAidGV4dCI6ICJpbnBfcG9wb3Zlcl9tdWx0aXNpdGUifSwgeyJpY29uTmFtZSI6ICJpbmZvIiwgInRleHQiOiAiVHJ5IHRvIGRldGVjdCBpZiBIVFRQUyBpcyB1c2VkIGFuZCBhY3RpdmF0ZSBIVFRQIHRvIEhUVFBTIHJlZGlyZWN0aW9uIGlmIHRoYXQncyB0aGUgY2FzZS4ifV19LCAiQUxMT1dFRF9NRVRIT0RTIjogeyJjb250ZXh0IjogIm11bHRpc2l0ZSIsICJkZWZhdWx0IjogIkdFVHxQT1NUfEhFQUQiLCAiaGVscCI6ICJBbGxvd2VkIEhUVFAgYW5kIFdlYkRBViBtZXRob2RzLCBzZXBhcmF0ZWQgd2l0aCBwaXBlcyB0byBiZSBzZW50IGJ5IGNsaWVudHMuIiwgImlkIjogImFsbG93ZWQtbWV0aG9kcyIsICJsYWJlbCI6ICJBbGxvd2VkIG1ldGhvZHMiLCAicmVnZXgiOiAiXig/IVxcfCkoXFx8PyhbQS1aXXszLH0pKD8hLiooXnxcXHwpXFwyKSkrJCIsICJ0eXBlIjogInRleHQiLCAiY29udGFpbmVyQ2xhc3MiOiAiei0xNiIsICJwYXR0ZXJuIjogIl4oPyFcXHwpKFxcfD8oW0EtWl17Myx9KSg/IS4qKF58XFx8KVxcMikpKyQiLCAiaW5wVHlwZSI6ICJpbnB1dCIsICJuYW1lIjogIkFsbG93ZWQgbWV0aG9kcyIsICJjb2x1bW5zIjogeyJwYyI6IDQsICJ0YWJsZXQiOiA2LCAibW9iaWxlIjogMTJ9LCAiZGlzYWJsZWQiOiBmYWxzZSwgInZhbHVlIjogIkdFVHxQT1NUfEhFQUQiLCAibWV0aG9kIjogImRlZmF1bHQiLCAicHJldl92YWx1ZSI6ICJHRVR8UE9TVHxIRUFEIiwgInBvcG92ZXJzIjogW3siaWNvbk5hbWUiOiAiZGlzayIsICJ0ZXh0IjogImlucF9wb3BvdmVyX211bHRpc2l0ZSJ9LCB7Imljb25OYW1lIjogImluZm8iLCAidGV4dCI6ICJBbGxvd2VkIEhUVFAgYW5kIFdlYkRBViBtZXRob2RzLCBzZXBhcmF0ZWQgd2l0aCBwaXBlcyB0byBiZSBzZW50IGJ5IGNsaWVudHMuIn1dfSwgIk1BWF9DTElFTlRfU0laRSI6IHsiY29udGV4dCI6ICJtdWx0aXNpdGUiLCAiZGVmYXVsdCI6ICIxMG0iLCAiaGVscCI6ICJNYXhpbXVtIGJvZHkgc2l6ZSAoMCBmb3IgaW5maW5pdGUpLiIsICJpZCI6ICJtYXgtY2xpZW50LXNpemUiLCAibGFiZWwiOiAiTWF4aW11bSBib2R5IHNpemUiLCAicmVnZXgiOiAiXlxcZCtba0ttTWdHXT8kIiwgInR5cGUiOiAidGV4dCIsICJjb250YWluZXJDbGFzcyI6ICJ6LTE1IiwgInBhdHRlcm4iOiAiXlxcZCtba0ttTWdHXT8kIiwgImlucFR5cGUiOiAiaW5wdXQiLCAibmFtZSI6ICJNYXhpbXVtIGJvZHkgc2l6ZSIsICJjb2x1bW5zIjogeyJwYyI6IDQsICJ0YWJsZXQiOiA2LCAibW9iaWxlIjogMTJ9LCAiZGlzYWJsZWQiOiBmYWxzZSwgInZhbHVlIjogIjEwbSIsICJtZXRob2QiOiAiZGVmYXVsdCIsICJwcmV2X3ZhbHVlIjogIjEwbSIsICJwb3BvdmVycyI6IFt7Imljb25OYW1lIjogImRpc2siLCAidGV4dCI6ICJpbnBfcG9wb3Zlcl9tdWx0aXNpdGUifSwgeyJpY29uTmFtZSI6ICJpbmZvIiwgInRleHQiOiAiTWF4aW11bSBib2R5IHNpemUgKDAgZm9yIGluZmluaXRlKS4ifV19LCAiU0VSVkVfRklMRVMiOiB7ImNvbnRleHQiOiAibXVsdGlzaXRlIiwgImRlZmF1bHQiOiAieWVzIiwgImhlbHAiOiAiU2VydmUgZmlsZXMgZnJvbSB0aGUgbG9jYWwgZm9sZGVyLiIsICJpZCI6ICJzZXJ2ZS1maWxlcyIsICJsYWJlbCI6ICJTZXJ2ZSBmaWxlcyIsICJyZWdleCI6ICJeKHllc3xubykkIiwgInR5cGUiOiAiY2hlY2siLCAiY29udGFpbmVyQ2xhc3MiOiAiei0xNCIsICJwYXR0ZXJuIjogIl4oeWVzfG5vKSQiLCAiaW5wVHlwZSI6ICJjaGVja2JveCIsICJuYW1lIjogIlNlcnZlIGZpbGVzIiwgImNvbHVtbnMiOiB7InBjIjogNCwgInRhYmxldCI6IDYsICJtb2JpbGUiOiAxMn0sICJkaXNhYmxlZCI6IHRydWUsICJ2YWx1ZSI6ICJubyIsICJtZXRob2QiOiAic2NoZWR1bGVyIiwgInByZXZfdmFsdWUiOiAibm8iLCAicG9wb3ZlcnMiOiBbeyJpY29uTmFtZSI6ICJ0cmVzcGFzcyIsICJ0ZXh0IjogImlucF9wb3BvdmVyX21ldGhvZF9kaXNhYmxlZCJ9LCB7Imljb25OYW1lIjogImRpc2siLCAidGV4dCI6ICJpbnBfcG9wb3Zlcl9tdWx0aXNpdGUifSwgeyJpY29uTmFtZSI6ICJpbmZvIiwgInRleHQiOiAiU2VydmUgZmlsZXMgZnJvbSB0aGUgbG9jYWwgZm9sZGVyLiJ9XX0sICJST09UX0ZPTERFUiI6IHsiY29udGV4dCI6ICJtdWx0aXNpdGUiLCAiZGVmYXVsdCI6ICIiLCAiaGVscCI6ICJSb290IGZvbGRlciBjb250YWluaW5nIGZpbGVzIHRvIHNlcnZlICgvdmFyL3d3dy9odG1sL3tzZXJ2ZXJfbmFtZX0gaWYgdW5zZXQpLiIsICJpZCI6ICJyb290LWZvbGRlciIsICJsYWJlbCI6ICJSb290IGZvbGRlciIsICJyZWdleCI6ICJeKC9bXFx3LiBcXC1dKykqLz8kIiwgInR5cGUiOiAidGV4dCIsICJjb250YWluZXJDbGFzcyI6ICJ6LTEzIiwgInBhdHRlcm4iOiAiXigvW1xcdy4gXFwtXSspKi8/JCIsICJpbnBUeXBlIjogImlucHV0IiwgIm5hbWUiOiAiUm9vdCBmb2xkZXIiLCAiY29sdW1ucyI6IHsicGMiOiA0LCAidGFibGV0IjogNiwgIm1vYmlsZSI6IDEyfSwgImRpc2FibGVkIjogZmFsc2UsICJ2YWx1ZSI6ICIiLCAibWV0aG9kIjogImRlZmF1bHQiLCAicHJldl92YWx1ZSI6ICIiLCAicG9wb3ZlcnMiOiBbeyJpY29uTmFtZSI6ICJkaXNrIiwgInRleHQiOiAiaW5wX3BvcG92ZXJfbXVsdGlzaXRlIn0sIHsiaWNvbk5hbWUiOiAiaW5mbyIsICJ0ZXh0IjogIlJvb3QgZm9sZGVyIGNvbnRhaW5pbmcgZmlsZXMgdG8gc2VydmUgKC92YXIvd3d3L2h0bWwve3NlcnZlcl9uYW1lfSBpZiB1bnNldCkuIn1dfSwgIlNTTF9QUk9UT0NPTFMiOiB7ImNvbnRleHQiOiAibXVsdGlzaXRlIiwgImRlZmF1bHQiOiAiVExTdjEuMiBUTFN2MS4zIiwgImhlbHAiOiAiVGhlIHN1cHBvcnRlZCB2ZXJzaW9uIG9mIFRMUy4gV2UgcmVjb21tZW5kIHRoZSBkZWZhdWx0IHZhbHVlIFRMU3YxLjIgVExTdjEuMyBmb3IgY29tcGF0aWJpbGl0eSByZWFzb25zLiIsICJpZCI6ICJodHRwcy1wcm90b2NvbHMiLCAibGFiZWwiOiAiSFRUUFMgcHJvdG9jb2xzIiwgInJlZ2V4IjogIl4oPyEgKSggP1RMU3YxXFwuWzAtM10pKiQiLCAidHlwZSI6ICJ0ZXh0IiwgImNvbnRhaW5lckNsYXNzIjogInotMTIiLCAicGF0dGVybiI6ICJeKD8hICkoID9UTFN2MVxcLlswLTNdKSokIiwgImlucFR5cGUiOiAiaW5wdXQiLCAibmFtZSI6ICJIVFRQUyBwcm90b2NvbHMiLCAiY29sdW1ucyI6IHsicGMiOiA0LCAidGFibGV0IjogNiwgIm1vYmlsZSI6IDEyfSwgImRpc2FibGVkIjogZmFsc2UsICJ2YWx1ZSI6ICJUTFN2MS4yIFRMU3YxLjMiLCAibWV0aG9kIjogImRlZmF1bHQiLCAicHJldl92YWx1ZSI6ICJUTFN2MS4yIFRMU3YxLjMiLCAicG9wb3ZlcnMiOiBbeyJpY29uTmFtZSI6ICJkaXNrIiwgInRleHQiOiAiaW5wX3BvcG92ZXJfbXVsdGlzaXRlIn0sIHsiaWNvbk5hbWUiOiAiaW5mbyIsICJ0ZXh0IjogIlRoZSBzdXBwb3J0ZWQgdmVyc2lvbiBvZiBUTFMuIFdlIHJlY29tbWVuZCB0aGUgZGVmYXVsdCB2YWx1ZSBUTFN2MS4yIFRMU3YxLjMgZm9yIGNvbXBhdGliaWxpdHkgcmVhc29ucy4ifV19LCAiSFRUUDIiOiB7ImNvbnRleHQiOiAibXVsdGlzaXRlIiwgImRlZmF1bHQiOiAieWVzIiwgImhlbHAiOiAiU3VwcG9ydCBIVFRQMiBwcm90b2NvbCB3aGVuIEhUVFBTIGlzIGVuYWJsZWQuIiwgImlkIjogImh0dHAyIiwgImxhYmVsIjogIkhUVFAyIiwgInJlZ2V4IjogIl4oeWVzfG5vKSQiLCAidHlwZSI6ICJjaGVjayIsICJjb250YWluZXJDbGFzcyI6ICJ6LTExIiwgInBhdHRlcm4iOiAiXih5ZXN8bm8pJCIsICJpbnBUeXBlIjogImNoZWNrYm94IiwgIm5hbWUiOiAiSFRUUDIiLCAiY29sdW1ucyI6IHsicGMiOiA0LCAidGFibGV0IjogNiwgIm1vYmlsZSI6IDEyfSwgImRpc2FibGVkIjogZmFsc2UsICJ2YWx1ZSI6ICJ5ZXMiLCAibWV0aG9kIjogImRlZmF1bHQiLCAicHJldl92YWx1ZSI6ICJ5ZXMiLCAicG9wb3ZlcnMiOiBbeyJpY29uTmFtZSI6ICJkaXNrIiwgInRleHQiOiAiaW5wX3BvcG92ZXJfbXVsdGlzaXRlIn0sIHsiaWNvbk5hbWUiOiAiaW5mbyIsICJ0ZXh0IjogIlN1cHBvcnQgSFRUUDIgcHJvdG9jb2wgd2hlbiBIVFRQUyBpcyBlbmFibGVkLiJ9XX0sICJIVFRQMyI6IHsiY29udGV4dCI6ICJtdWx0aXNpdGUiLCAiZGVmYXVsdCI6ICJubyIsICJoZWxwIjogIlN1cHBvcnQgSFRUUDMgcHJvdG9jb2wgd2hlbiBIVFRQUyBpcyBlbmFibGVkLiIsICJpZCI6ICJodHRwMyIsICJsYWJlbCI6ICJIVFRQMyIsICJyZWdleCI6ICJeKHllc3xubykkIiwgInR5cGUiOiAiY2hlY2siLCAiY29udGFpbmVyQ2xhc3MiOiAiei0xMCIsICJwYXR0ZXJuIjogIl4oeWVzfG5vKSQiLCAiaW5wVHlwZSI6ICJjaGVja2JveCIsICJuYW1lIjogIkhUVFAzIiwgImNvbHVtbnMiOiB7InBjIjogNCwgInRhYmxldCI6IDYsICJtb2JpbGUiOiAxMn0sICJkaXNhYmxlZCI6IGZhbHNlLCAidmFsdWUiOiAibm8iLCAibWV0aG9kIjogImRlZmF1bHQiLCAicHJldl92YWx1ZSI6ICJubyIsICJwb3BvdmVycyI6IFt7Imljb25OYW1lIjogImRpc2siLCAidGV4dCI6ICJpbnBfcG9wb3Zlcl9tdWx0aXNpdGUifSwgeyJpY29uTmFtZSI6ICJpbmZvIiwgInRleHQiOiAiU3VwcG9ydCBIVFRQMyBwcm90b2NvbCB3aGVuIEhUVFBTIGlzIGVuYWJsZWQuIn1dfSwgIkhUVFAzX0FMVF9TVkNfUE9SVCI6IHsiY29udGV4dCI6ICJtdWx0aXNpdGUiLCAiZGVmYXVsdCI6ICI0NDMiLCAiaGVscCI6ICJIVFRQMyBhbHRlcm5hdGUgc2VydmljZSBwb3J0LiBUaGlzIHZhbHVlIHdpbGwgYmUgdXNlZCBhcyBwYXJ0IG9mIHRoZSBBbHQtU3ZjIGhlYWRlci4iLCAiaWQiOiAiaHR0cDMtYWx0LXN2Yy1wb3J0IiwgImxhYmVsIjogIkhUVFAzIEFsdC1TdmMgcG9ydCIsICJyZWdleCI6ICJeXFxkKyQiLCAidHlwZSI6ICJ0ZXh0IiwgImNvbnRhaW5lckNsYXNzIjogInotOSIsICJwYXR0ZXJuIjogIl5cXGQrJCIsICJpbnBUeXBlIjogImlucHV0IiwgIm5hbWUiOiAiSFRUUDMgQWx0LVN2YyBwb3J0IiwgImNvbHVtbnMiOiB7InBjIjogNCwgInRhYmxldCI6IDYsICJtb2JpbGUiOiAxMn0sICJkaXNhYmxlZCI6IGZhbHNlLCAidmFsdWUiOiAiNDQzIiwgIm1ldGhvZCI6ICJkZWZhdWx0IiwgInByZXZfdmFsdWUiOiAiNDQzIiwgInBvcG92ZXJzIjogW3siaWNvbk5hbWUiOiAiZGlzayIsICJ0ZXh0IjogImlucF9wb3BvdmVyX211bHRpc2l0ZSJ9LCB7Imljb25OYW1lIjogImluZm8iLCAidGV4dCI6ICJIVFRQMyBhbHRlcm5hdGUgc2VydmljZSBwb3J0LiBUaGlzIHZhbHVlIHdpbGwgYmUgdXNlZCBhcyBwYXJ0IG9mIHRoZSBBbHQtU3ZjIGhlYWRlci4ifV19LCAiTElTVEVOX0hUVFAiOiB7ImNvbnRleHQiOiAibXVsdGlzaXRlIiwgImRlZmF1bHQiOiAieWVzIiwgImhlbHAiOiAiUmVzcG9uZCB0byAoaW5zZWN1cmUpIEhUVFAgcmVxdWVzdHMuIiwgImlkIjogImh0dHAtbGlzdGVuIiwgImxhYmVsIjogIkhUVFAgbGlzdGVuIiwgInJlZ2V4IjogIl4oeWVzfG5vKSQiLCAidHlwZSI6ICJjaGVjayIsICJjb250YWluZXJDbGFzcyI6ICJ6LTgiLCAicGF0dGVybiI6ICJeKHllc3xubykkIiwgImlucFR5cGUiOiAiY2hlY2tib3giLCAibmFtZSI6ICJIVFRQIGxpc3RlbiIsICJjb2x1bW5zIjogeyJwYyI6IDQsICJ0YWJsZXQiOiA2LCAibW9iaWxlIjogMTJ9LCAiZGlzYWJsZWQiOiBmYWxzZSwgInZhbHVlIjogInllcyIsICJtZXRob2QiOiAiZGVmYXVsdCIsICJwcmV2X3ZhbHVlIjogInllcyIsICJwb3BvdmVycyI6IFt7Imljb25OYW1lIjogImRpc2siLCAidGV4dCI6ICJpbnBfcG9wb3Zlcl9tdWx0aXNpdGUifSwgeyJpY29uTmFtZSI6ICJpbmZvIiwgInRleHQiOiAiUmVzcG9uZCB0byAoaW5zZWN1cmUpIEhUVFAgcmVxdWVzdHMuIn1dfSwgIlVTRV9PUEVOX0ZJTEVfQ0FDSEUiOiB7ImNvbnRleHQiOiAibXVsdGlzaXRlIiwgImRlZmF1bHQiOiAibm8iLCAiaGVscCI6ICJFbmFibGUgb3BlbiBmaWxlIGNhY2hlIGZlYXR1cmUiLCAiaWQiOiAidXNlLW9wZW4tZmlsZS1jYWNoZSIsICJsYWJlbCI6ICJVc2Ugb3BlbiBmaWxlIGNhY2hlIiwgInJlZ2V4IjogIl4oeWVzfG5vKSQiLCAidHlwZSI6ICJjaGVjayIsICJjb250YWluZXJDbGFzcyI6ICJ6LTciLCAicGF0dGVybiI6ICJeKHllc3xubykkIiwgImlucFR5cGUiOiAiY2hlY2tib3giLCAibmFtZSI6ICJVc2Ugb3BlbiBmaWxlIGNhY2hlIiwgImNvbHVtbnMiOiB7InBjIjogNCwgInRhYmxldCI6IDYsICJtb2JpbGUiOiAxMn0sICJkaXNhYmxlZCI6IGZhbHNlLCAidmFsdWUiOiAibm8iLCAibWV0aG9kIjogImRlZmF1bHQiLCAicHJldl92YWx1ZSI6ICJubyIsICJwb3BvdmVycyI6IFt7Imljb25OYW1lIjogImRpc2siLCAidGV4dCI6ICJpbnBfcG9wb3Zlcl9tdWx0aXNpdGUifSwgeyJpY29uTmFtZSI6ICJpbmZvIiwgInRleHQiOiAiRW5hYmxlIG9wZW4gZmlsZSBjYWNoZSBmZWF0dXJlIn1dfSwgIk9QRU5fRklMRV9DQUNIRSI6IHsiY29udGV4dCI6ICJtdWx0aXNpdGUiLCAiZGVmYXVsdCI6ICJtYXg9MTAwMCBpbmFjdGl2ZT0yMHMiLCAiaGVscCI6ICJPcGVuIGZpbGUgY2FjaGUgZGlyZWN0aXZlIiwgImlkIjogIm9wZW4tZmlsZS1jYWNoZSIsICJsYWJlbCI6ICJVc2Ugb3BlbiBmaWxlIGNhY2hlIiwgInJlZ2V4IjogIl4ob2ZmfG1heD1cXGQrKCBpbmFjdGl2ZT1cXGQrKG1zP3xbc2hkd015XSkpPykkIiwgInR5cGUiOiAidGV4dCIsICJjb250YWluZXJDbGFzcyI6ICJ6LTYiLCAicGF0dGVybiI6ICJeKG9mZnxtYXg9XFxkKyggaW5hY3RpdmU9XFxkKyhtcz98W3NoZHdNeV0pKT8pJCIsICJpbnBUeXBlIjogImlucHV0IiwgIm5hbWUiOiAiVXNlIG9wZW4gZmlsZSBjYWNoZSIsICJjb2x1bW5zIjogeyJwYyI6IDQsICJ0YWJsZXQiOiA2LCAibW9iaWxlIjogMTJ9LCAiZGlzYWJsZWQiOiBmYWxzZSwgInZhbHVlIjogIm1heD0xMDAwIGluYWN0aXZlPTIwcyIsICJtZXRob2QiOiAiZGVmYXVsdCIsICJwcmV2X3ZhbHVlIjogIm1heD0xMDAwIGluYWN0aXZlPTIwcyIsICJwb3BvdmVycyI6IFt7Imljb25OYW1lIjogImRpc2siLCAidGV4dCI6ICJpbnBfcG9wb3Zlcl9tdWx0aXNpdGUifSwgeyJpY29uTmFtZSI6ICJpbmZvIiwgInRleHQiOiAiT3BlbiBmaWxlIGNhY2hlIGRpcmVjdGl2ZSJ9XX0sICJPUEVOX0ZJTEVfQ0FDSEVfRVJST1JTIjogeyJjb250ZXh0IjogIm11bHRpc2l0ZSIsICJkZWZhdWx0IjogInllcyIsICJoZWxwIjogIkVuYWJsZSBvcGVuIGZpbGUgY2FjaGUgZm9yIGVycm9ycyIsICJpZCI6ICJvcGVuLWZpbGUtY2FjaGUtZXJyb3JzIiwgImxhYmVsIjogIk9wZW4gZmlsZSBjYWNoZSBlcnJvcnMiLCAicmVnZXgiOiAiXih5ZXN8bm8pJCIsICJ0eXBlIjogImNoZWNrIiwgImNvbnRhaW5lckNsYXNzIjogInotNSIsICJwYXR0ZXJuIjogIl4oeWVzfG5vKSQiLCAiaW5wVHlwZSI6ICJjaGVja2JveCIsICJuYW1lIjogIk9wZW4gZmlsZSBjYWNoZSBlcnJvcnMiLCAiY29sdW1ucyI6IHsicGMiOiA0LCAidGFibGV0IjogNiwgIm1vYmlsZSI6IDEyfSwgImRpc2FibGVkIjogZmFsc2UsICJ2YWx1ZSI6ICJ5ZXMiLCAibWV0aG9kIjogImRlZmF1bHQiLCAicHJldl92YWx1ZSI6ICJ5ZXMiLCAicG9wb3ZlcnMiOiBbeyJpY29uTmFtZSI6ICJkaXNrIiwgInRleHQiOiAiaW5wX3BvcG92ZXJfbXVsdGlzaXRlIn0sIHsiaWNvbk5hbWUiOiAiaW5mbyIsICJ0ZXh0IjogIkVuYWJsZSBvcGVuIGZpbGUgY2FjaGUgZm9yIGVycm9ycyJ9XX0sICJPUEVOX0ZJTEVfQ0FDSEVfTUlOX1VTRVMiOiB7ImNvbnRleHQiOiAibXVsdGlzaXRlIiwgImRlZmF1bHQiOiAiMiIsICJoZWxwIjogIkVuYWJsZSBvcGVuIGZpbGUgY2FjaGUgbWluaW11bSB1c2VzIiwgImlkIjogIm9wZW4tZmlsZS1jYWNoZS1taW4tdXNlcyIsICJsYWJlbCI6ICJPcGVuIGZpbGUgY2FjaGUgbWluIHVzZXMiLCAicmVnZXgiOiAiXlsxLTldXFxkKiQiLCAidHlwZSI6ICJ0ZXh0IiwgImNvbnRhaW5lckNsYXNzIjogInotNCIsICJwYXR0ZXJuIjogIl5bMS05XVxcZCokIiwgImlucFR5cGUiOiAiaW5wdXQiLCAibmFtZSI6ICJPcGVuIGZpbGUgY2FjaGUgbWluIHVzZXMiLCAiY29sdW1ucyI6IHsicGMiOiA0LCAidGFibGV0IjogNiwgIm1vYmlsZSI6IDEyfSwgImRpc2FibGVkIjogZmFsc2UsICJ2YWx1ZSI6ICIyIiwgIm1ldGhvZCI6ICJkZWZhdWx0IiwgInByZXZfdmFsdWUiOiAiMiIsICJwb3BvdmVycyI6IFt7Imljb25OYW1lIjogImRpc2siLCAidGV4dCI6ICJpbnBfcG9wb3Zlcl9tdWx0aXNpdGUifSwgeyJpY29uTmFtZSI6ICJpbmZvIiwgInRleHQiOiAiRW5hYmxlIG9wZW4gZmlsZSBjYWNoZSBtaW5pbXVtIHVzZXMifV19LCAiT1BFTl9GSUxFX0NBQ0hFX1ZBTElEIjogeyJjb250ZXh0IjogIm11bHRpc2l0ZSIsICJkZWZhdWx0IjogIjMwcyIsICJoZWxwIjogIk9wZW4gZmlsZSBjYWNoZSB2YWxpZCB0aW1lIiwgImlkIjogIm9wZW4tZmlsZS1jYWNoZS12YWxpZCIsICJsYWJlbCI6ICJPcGVuIGZpbGUgY2FjaGUgdmFsaWQgdGltZSIsICJyZWdleCI6ICJeXFxkKyhtcz98W3NoZHdNeV0pJCIsICJ0eXBlIjogInRleHQiLCAiY29udGFpbmVyQ2xhc3MiOiAiei0zIiwgInBhdHRlcm4iOiAiXlxcZCsobXM/fFtzaGR3TXldKSQiLCAiaW5wVHlwZSI6ICJpbnB1dCIsICJuYW1lIjogIk9wZW4gZmlsZSBjYWNoZSB2YWxpZCB0aW1lIiwgImNvbHVtbnMiOiB7InBjIjogNCwgInRhYmxldCI6IDYsICJtb2JpbGUiOiAxMn0sICJkaXNhYmxlZCI6IGZhbHNlLCAidmFsdWUiOiAiMzBzIiwgIm1ldGhvZCI6ICJkZWZhdWx0IiwgInByZXZfdmFsdWUiOiAiMzBzIiwgInBvcG92ZXJzIjogW3siaWNvbk5hbWUiOiAiZGlzayIsICJ0ZXh0IjogImlucF9wb3BvdmVyX211bHRpc2l0ZSJ9LCB7Imljb25OYW1lIjogImluZm8iLCAidGV4dCI6ICJPcGVuIGZpbGUgY2FjaGUgdmFsaWQgdGltZSJ9XX0sICJFWFRFUk5BTF9QTFVHSU5fVVJMUyI6IHsiY29udGV4dCI6ICJnbG9iYWwiLCAiZGVmYXVsdCI6ICIiLCAiaGVscCI6ICJMaXN0IG9mIGV4dGVybmFsIHBsdWdpbnMgVVJMcyAoZGlyZWN0IGRvd25sb2FkIHRvIC56aXAgb3IgLnRhciBmaWxlKSB0byBkb3dubG9hZCBhbmQgaW5zdGFsbCAoVVJMcyBhcmUgc2VwYXJhdGVkIHdpdGggc3BhY2UpLiIsICJpZCI6ICJleHRlcm5hbC1wbHVnaW4tdXJscyIsICJsYWJlbCI6ICJFeHRlcm5hbCBwbHVnaW4gVVJMcyIsICJyZWdleCI6ICJeKCAqKChodHRwcz86XFwvXFwvfGZpbGU6XFwvXFwvXFwvKVtcXC1cXHdAOiUuK34jPV0rW1xcLVxcd1xcKFxcKSFAOiUrLn4jPyZcXC89JF0qKSg/IS4qXFwyKD8hLikpICopKiQiLCAidHlwZSI6ICJ0ZXh0IiwgImNvbnRhaW5lckNsYXNzIjogInotMiIsICJwYXR0ZXJuIjogIl4oICooKGh0dHBzPzpcXC9cXC98ZmlsZTpcXC9cXC9cXC8pW1xcLVxcd0A6JS4rfiM9XStbXFwtXFx3XFwoXFwpIUA6JSsufiM/JlxcLz0kXSopKD8hLipcXDIoPyEuKSkgKikqJCIsICJpbnBUeXBlIjogImlucHV0IiwgIm5hbWUiOiAiRXh0ZXJuYWwgcGx1Z2luIFVSTHMiLCAiY29sdW1ucyI6IHsicGMiOiA0LCAidGFibGV0IjogNiwgIm1vYmlsZSI6IDEyfSwgImRpc2FibGVkIjogZmFsc2UsICJ2YWx1ZSI6ICIiLCAibWV0aG9kIjogImRlZmF1bHQiLCAicHJldl92YWx1ZSI6ICIiLCAicG9wb3ZlcnMiOiBbeyJpY29uTmFtZSI6ICJnbG9iZSIsICJ0ZXh0IjogImlucF9wb3BvdmVyX2dsb2JhbCJ9LCB7Imljb25OYW1lIjogImluZm8iLCAidGV4dCI6ICJMaXN0IG9mIGV4dGVybmFsIHBsdWdpbnMgVVJMcyAoZGlyZWN0IGRvd25sb2FkIHRvIC56aXAgb3IgLnRhciBmaWxlKSB0byBkb3dubG9hZCBhbmQgaW5zdGFsbCAoVVJMcyBhcmUgc2VwYXJhdGVkIHdpdGggc3BhY2UpLiJ9XX0sICJERU5ZX0hUVFBfU1RBVFVTIjogeyJjb250ZXh0IjogImdsb2JhbCIsICJkZWZhdWx0IjogIjQwMyIsICJoZWxwIjogIkhUVFAgc3RhdHVzIGNvZGUgdG8gc2VuZCB3aGVuIHRoZSByZXF1ZXN0IGlzIGRlbmllZCAoNDAzIG9yIDQ0NCkuIFdoZW4gdXNpbmcgNDQ0LCBCdW5rZXJXZWIgd2lsbCBjbG9zZSB0aGUgY29ubmVjdGlvbi4iLCAiaWQiOiAiZGVueS1odHRwLXN0YXR1cyIsICJsYWJlbCI6ICJEZW55IEhUVFAgc3RhdHVzIiwgInJlZ2V4IjogIl4oNDAzfDQ0NCkkIiwgInR5cGUiOiAic2VsZWN0IiwgImNvbnRhaW5lckNsYXNzIjogInotMSIsICJwYXR0ZXJuIjogIl4oNDAzfDQ0NCkkIiwgImlucFR5cGUiOiAic2VsZWN0IiwgIm5hbWUiOiAiRGVueSBIVFRQIHN0YXR1cyIsICJ2YWx1ZXMiOiBbIjQwMyIsICI0NDQiXSwgImNvbHVtbnMiOiB7InBjIjogNCwgInRhYmxldCI6IDYsICJtb2JpbGUiOiAxMn0sICJkaXNhYmxlZCI6IGZhbHNlLCAidmFsdWUiOiAiNDAzIiwgIm1ldGhvZCI6ICJkZWZhdWx0IiwgInByZXZfdmFsdWUiOiAiNDAzIiwgInBvcG92ZXJzIjogW3siaWNvbk5hbWUiOiAiZ2xvYmUiLCAidGV4dCI6ICJpbnBfcG9wb3Zlcl9nbG9iYWwifSwgeyJpY29uTmFtZSI6ICJpbmZvIiwgInRleHQiOiAiSFRUUCBzdGF0dXMgY29kZSB0byBzZW5kIHdoZW4gdGhlIHJlcXVlc3QgaXMgZGVuaWVkICg0MDMgb3IgNDQ0KS4gV2hlbiB1c2luZyA0NDQsIEJ1bmtlcldlYiB3aWxsIGNsb3NlIHRoZSBjb25uZWN0aW9uLiJ9XX0sICJTRU5EX0FOT05ZTU9VU19SRVBPUlQiOiB7ImNvbnRleHQiOiAiZ2xvYmFsIiwgImRlZmF1bHQiOiAieWVzIiwgImhlbHAiOiAiU2VuZCBhbm9ueW1vdXMgcmVwb3J0IHRvIEJ1bmtlcldlYiBtYWludGFpbmVycy4iLCAiaWQiOiAic2VuZC1hbm9ueW1vdXMtcmVwb3J0IiwgImxhYmVsIjogIlNlbmQgYW5vbnltb3VzIHJlcG9ydCIsICJyZWdleCI6ICJeKHllc3xubykkIiwgInR5cGUiOiAiY2hlY2siLCAiY29udGFpbmVyQ2xhc3MiOiAiei0wIiwgInBhdHRlcm4iOiAiXih5ZXN8bm8pJCIsICJpbnBUeXBlIjogImNoZWNrYm94IiwgIm5hbWUiOiAiU2VuZCBhbm9ueW1vdXMgcmVwb3J0IiwgImNvbHVtbnMiOiB7InBjIjogNCwgInRhYmxldCI6IDYsICJtb2JpbGUiOiAxMn0sICJkaXNhYmxlZCI6IHRydWUsICJ2YWx1ZSI6ICJubyIsICJtZXRob2QiOiAic2NoZWR1bGVyIiwgInByZXZfdmFsdWUiOiAibm8iLCAicG9wb3ZlcnMiOiBbeyJpY29uTmFtZSI6ICJ0cmVzcGFzcyIsICJ0ZXh0IjogImlucF9wb3BvdmVyX21ldGhvZF9kaXNhYmxlZCJ9LCB7Imljb25OYW1lIjogImdsb2JlIiwgInRleHQiOiAiaW5wX3BvcG92ZXJfZ2xvYmFsIn0sIHsiaWNvbk5hbWUiOiAiaW5mbyIsICJ0ZXh0IjogIlNlbmQgYW5vbnltb3VzIHJlcG9ydCB0byBCdW5rZXJXZWIgbWFpbnRhaW5lcnMuIn1dfX0sICJjaGVja3N1bSI6IG51bGx9LCB7ImlkIjogIm1vZHNlY3VyaXR5IiwgInN0cmVhbSI6ICJubyIsICJuYW1lIjogIk1vZFNlY3VyaXR5IiwgImRlc2NyaXB0aW9uIjogIk1hbmFnZW1lbnQgb2YgdGhlIE1vZFNlY3VyaXR5IFdBRi4iLCAidmVyc2lvbiI6ICIxLjAiLCAidHlwZSI6ICJjb3JlIiwgIm1ldGhvZCI6ICJtYW51YWwiLCAicGFnZSI6IGZhbHNlLCAic2V0dGluZ3MiOiB7IlVTRV9NT0RTRUNVUklUWSI6IHsiY29udGV4dCI6ICJtdWx0aXNpdGUiLCAiZGVmYXVsdCI6ICJ5ZXMiLCAiaGVscCI6ICJFbmFibGUgTW9kU2VjdXJpdHkgV0FGLiIsICJpZCI6ICJ1c2UtbW9kc2VjdXJpdHkiLCAibGFiZWwiOiAiVXNlIE1vZFNlY3VyaXR5IiwgInJlZ2V4IjogIl4oeWVzfG5vKSQiLCAidHlwZSI6ICJjaGVjayIsICJjb250YWluZXJDbGFzcyI6ICJ6LTUiLCAicGF0dGVybiI6ICJeKHllc3xubykkIiwgImlucFR5cGUiOiAiY2hlY2tib3giLCAibmFtZSI6ICJVc2UgTW9kU2VjdXJpdHkiLCAiY29sdW1ucyI6IHsicGMiOiA0LCAidGFibGV0IjogNiwgIm1vYmlsZSI6IDEyfSwgImRpc2FibGVkIjogZmFsc2UsICJ2YWx1ZSI6ICJ5ZXMiLCAibWV0aG9kIjogImRlZmF1bHQiLCAicHJldl92YWx1ZSI6ICJ5ZXMiLCAicG9wb3ZlcnMiOiBbeyJpY29uTmFtZSI6ICJkaXNrIiwgInRleHQiOiAiaW5wX3BvcG92ZXJfbXVsdGlzaXRlIn0sIHsiaWNvbk5hbWUiOiAiaW5mbyIsICJ0ZXh0IjogIkVuYWJsZSBNb2RTZWN1cml0eSBXQUYuIn1dfSwgIlVTRV9NT0RTRUNVUklUWV9DUlMiOiB7ImNvbnRleHQiOiAibXVsdGlzaXRlIiwgImRlZmF1bHQiOiAieWVzIiwgImhlbHAiOiAiRW5hYmxlIE9XQVNQIENvcmUgUnVsZSBTZXQuIiwgImlkIjogInVzZS1tb2RzZWN1cml0eS1jcnMiLCAibGFiZWwiOiAiVXNlIENvcmUgUnVsZSBTZXQiLCAicmVnZXgiOiAiXih5ZXN8bm8pJCIsICJ0eXBlIjogImNoZWNrIiwgImNvbnRhaW5lckNsYXNzIjogInotNCIsICJwYXR0ZXJuIjogIl4oeWVzfG5vKSQiLCAiaW5wVHlwZSI6ICJjaGVja2JveCIsICJuYW1lIjogIlVzZSBDb3JlIFJ1bGUgU2V0IiwgImNvbHVtbnMiOiB7InBjIjogNCwgInRhYmxldCI6IDYsICJtb2JpbGUiOiAxMn0sICJkaXNhYmxlZCI6IGZhbHNlLCAidmFsdWUiOiAieWVzIiwgIm1ldGhvZCI6ICJkZWZhdWx0IiwgInByZXZfdmFsdWUiOiAieWVzIiwgInBvcG92ZXJzIjogW3siaWNvbk5hbWUiOiAiZGlzayIsICJ0ZXh0IjogImlucF9wb3BvdmVyX211bHRpc2l0ZSJ9LCB7Imljb25OYW1lIjogImluZm8iLCAidGV4dCI6ICJFbmFibGUgT1dBU1AgQ29yZSBSdWxlIFNldC4ifV19LCAiTU9EU0VDVVJJVFlfQ1JTX1ZFUlNJT04iOiB7ImNvbnRleHQiOiAibXVsdGlzaXRlIiwgImRlZmF1bHQiOiAiMyIsICJoZWxwIjogIlZlcnNpb24gb2YgdGhlIE9XQVNQIENvcmUgUnVsZSBTZXQgdG8gdXNlIHdpdGggTW9kU2VjdXJpdHkgKDMsIDQgb3IgbmlnaHRseSkuIiwgImlkIjogIm1vZHNlY3VyaXR5LWNycy12ZXJzaW9uIiwgImxhYmVsIjogIkNvcmUgUnVsZSBTZXQgVmVyc2lvbiIsICJyZWdleCI6ICJeKDN8NHxuaWdodGx5KSQiLCAidHlwZSI6ICJzZWxlY3QiLCAiY29udGFpbmVyQ2xhc3MiOiAiei0zIiwgInBhdHRlcm4iOiAiXigzfDR8bmlnaHRseSkkIiwgImlucFR5cGUiOiAic2VsZWN0IiwgIm5hbWUiOiAiQ29yZSBSdWxlIFNldCBWZXJzaW9uIiwgInZhbHVlcyI6IFsiMyIsICI0IiwgIm5pZ2h0bHkiXSwgImNvbHVtbnMiOiB7InBjIjogNCwgInRhYmxldCI6IDYsICJtb2JpbGUiOiAxMn0sICJkaXNhYmxlZCI6IGZhbHNlLCAidmFsdWUiOiAiNCIsICJtZXRob2QiOiAiZGVmYXVsdCIsICJwcmV2X3ZhbHVlIjogIjQiLCAicG9wb3ZlcnMiOiBbeyJpY29uTmFtZSI6ICJkaXNrIiwgInRleHQiOiAiaW5wX3BvcG92ZXJfbXVsdGlzaXRlIn0sIHsiaWNvbk5hbWUiOiAiaW5mbyIsICJ0ZXh0IjogIlZlcnNpb24gb2YgdGhlIE9XQVNQIENvcmUgUnVsZSBTZXQgdG8gdXNlIHdpdGggTW9kU2VjdXJpdHkgKDMsIDQgb3IgbmlnaHRseSkuIn1dfSwgIk1PRFNFQ1VSSVRZX1NFQ19BVURJVF9FTkdJTkUiOiB7ImNvbnRleHQiOiAibXVsdGlzaXRlIiwgImRlZmF1bHQiOiAiUmVsZXZhbnRPbmx5IiwgImhlbHAiOiAiU2VjQXVkaXRFbmdpbmUgZGlyZWN0aXZlIG9mIE1vZFNlY3VyaXR5LiIsICJpZCI6ICJtb2RzZWN1cml0eS1zZWMtYXVkaXQtZW5naW5lIiwgImxhYmVsIjogIlNlY0F1ZGl0RW5naW5lIiwgInJlZ2V4IjogIl4oT258UmVsZXZhbnRPbmx5fE9mZikkIiwgInR5cGUiOiAic2VsZWN0IiwgImNvbnRhaW5lckNsYXNzIjogInotMiIsICJwYXR0ZXJuIjogIl4oT258UmVsZXZhbnRPbmx5fE9mZikkIiwgImlucFR5cGUiOiAic2VsZWN0IiwgIm5hbWUiOiAiU2VjQXVkaXRFbmdpbmUiLCAidmFsdWVzIjogWyJPZmYiLCAiT24iLCAiUmVsZXZhbnRPbmx5Il0sICJjb2x1bW5zIjogeyJwYyI6IDQsICJ0YWJsZXQiOiA2LCAibW9iaWxlIjogMTJ9LCAiZGlzYWJsZWQiOiBmYWxzZSwgInZhbHVlIjogIlJlbGV2YW50T25seSIsICJtZXRob2QiOiAiZGVmYXVsdCIsICJwcmV2X3ZhbHVlIjogIlJlbGV2YW50T25seSIsICJwb3BvdmVycyI6IFt7Imljb25OYW1lIjogImRpc2siLCAidGV4dCI6ICJpbnBfcG9wb3Zlcl9tdWx0aXNpdGUifSwgeyJpY29uTmFtZSI6ICJpbmZvIiwgInRleHQiOiAiU2VjQXVkaXRFbmdpbmUgZGlyZWN0aXZlIG9mIE1vZFNlY3VyaXR5LiJ9XX0sICJNT0RTRUNVUklUWV9TRUNfUlVMRV9FTkdJTkUiOiB7ImNvbnRleHQiOiAibXVsdGlzaXRlIiwgImRlZmF1bHQiOiAiT24iLCAiaGVscCI6ICJTZWNSdWxlRW5naW5lIGRpcmVjdGl2ZSBvZiBNb2RTZWN1cml0eS4iLCAiaWQiOiAibW9kc2VjdXJpdHktc2VjLXJ1bGUtZW5naW5lIiwgImxhYmVsIjogIlNlY1J1bGVFbmdpbmUiLCAicmVnZXgiOiAiXihPbnxEZXRlY3Rpb25Pbmx5fE9mZikkIiwgInR5cGUiOiAic2VsZWN0IiwgImNvbnRhaW5lckNsYXNzIjogInotMSIsICJwYXR0ZXJuIjogIl4oT258RGV0ZWN0aW9uT25seXxPZmYpJCIsICJpbnBUeXBlIjogInNlbGVjdCIsICJuYW1lIjogIlNlY1J1bGVFbmdpbmUiLCAidmFsdWVzIjogWyJEZXRlY3Rpb25Pbmx5IiwgIk9mZiIsICJPbiJdLCAiY29sdW1ucyI6IHsicGMiOiA0LCAidGFibGV0IjogNiwgIm1vYmlsZSI6IDEyfSwgImRpc2FibGVkIjogZmFsc2UsICJ2YWx1ZSI6ICJPbiIsICJtZXRob2QiOiAiZGVmYXVsdCIsICJwcmV2X3ZhbHVlIjogIk9uIiwgInBvcG92ZXJzIjogW3siaWNvbk5hbWUiOiAiZGlzayIsICJ0ZXh0IjogImlucF9wb3BvdmVyX211bHRpc2l0ZSJ9LCB7Imljb25OYW1lIjogImluZm8iLCAidGV4dCI6ICJTZWNSdWxlRW5naW5lIGRpcmVjdGl2ZSBvZiBNb2RTZWN1cml0eS4ifV19LCAiTU9EU0VDVVJJVFlfU0VDX0FVRElUX0xPR19QQVJUUyI6IHsiY29udGV4dCI6ICJtdWx0aXNpdGUiLCAiZGVmYXVsdCI6ICJBQkNGSFoiLCAiaGVscCI6ICJTZWNBdWRpdExvZ1BhcnRzIGRpcmVjdGl2ZSBvZiBNb2RTZWN1cml0eS4iLCAiaWQiOiAibW9kc2VjdXJpdHktc2VjLWF1ZGl0LWxvZy1wYXJ0cyIsICJsYWJlbCI6ICJTZWNBdWRpdExvZ1BhcnRzIiwgInJlZ2V4IjogIl5BKChbQi1LXSkoPyEuKlxcMikpK1okIiwgInR5cGUiOiAidGV4dCIsICJjb250YWluZXJDbGFzcyI6ICJ6LTAiLCAicGF0dGVybiI6ICJeQSgoW0ItS10pKD8hLipcXDIpKStaJCIsICJpbnBUeXBlIjogImlucHV0IiwgIm5hbWUiOiAiU2VjQXVkaXRMb2dQYXJ0cyIsICJjb2x1bW5zIjogeyJwYyI6IDQsICJ0YWJsZXQiOiA2LCAibW9iaWxlIjogMTJ9LCAiZGlzYWJsZWQiOiBmYWxzZSwgInZhbHVlIjogIkFCQ0ZIWiIsICJtZXRob2QiOiAiZGVmYXVsdCIsICJwcmV2X3ZhbHVlIjogIkFCQ0ZIWiIsICJwb3BvdmVycyI6IFt7Imljb25OYW1lIjogImRpc2siLCAidGV4dCI6ICJpbnBfcG9wb3Zlcl9tdWx0aXNpdGUifSwgeyJpY29uTmFtZSI6ICJpbmZvIiwgInRleHQiOiAiU2VjQXVkaXRMb2dQYXJ0cyBkaXJlY3RpdmUgb2YgTW9kU2VjdXJpdHkuIn1dfX0sICJjaGVja3N1bSI6IG51bGx9LCB7ImlkIjogInBocCIsICJzdHJlYW0iOiAibm8iLCAibmFtZSI6ICJQSFAiLCAiZGVzY3JpcHRpb24iOiAiTWFuYWdlIGxvY2FsIG9yIHJlbW90ZSBQSFAtRlBNLiIsICJ2ZXJzaW9uIjogIjEuMCIsICJ0eXBlIjogImNvcmUiLCAibWV0aG9kIjogIm1hbnVhbCIsICJwYWdlIjogZmFsc2UsICJzZXR0aW5ncyI6IHsiUkVNT1RFX1BIUCI6IHsiY29udGV4dCI6ICJtdWx0aXNpdGUiLCAiZGVmYXVsdCI6ICIiLCAiaGVscCI6ICJIb3N0bmFtZSBvZiB0aGUgcmVtb3RlIFBIUC1GUE0gaW5zdGFuY2UuIiwgImlkIjogInJlbW90ZS1waHAiLCAibGFiZWwiOiAiUmVtb3RlIFBIUCIsICJyZWdleCI6ICJeKCg/PS57MSwyNTV9JClbMC05QS1aYS16XSg/Oig/OlswLTlBLVphLXpdfC0pezAsNjF9WzAtOUEtWmEtel0pPyg/OlxcLlswLTlBLVphLXpdKD86KD86WzAtOUEtWmEtel18LSl7MCw2MX1bMC05QS1aYS16XSk/KSpcXC4/KT8kIiwgInR5cGUiOiAidGV4dCIsICJjb250YWluZXJDbGFzcyI6ICJ6LTMiLCAicGF0dGVybiI6ICJeKCg/PS57MSwyNTV9JClbMC05QS1aYS16XSg/Oig/OlswLTlBLVphLXpdfC0pezAsNjF9WzAtOUEtWmEtel0pPyg/OlxcLlswLTlBLVphLXpdKD86KD86WzAtOUEtWmEtel18LSl7MCw2MX1bMC05QS1aYS16XSk/KSpcXC4/KT8kIiwgImlucFR5cGUiOiAiaW5wdXQiLCAibmFtZSI6ICJSZW1vdGUgUEhQIiwgImNvbHVtbnMiOiB7InBjIjogNCwgInRhYmxldCI6IDYsICJtb2JpbGUiOiAxMn0sICJkaXNhYmxlZCI6IGZhbHNlLCAidmFsdWUiOiAiIiwgIm1ldGhvZCI6ICJkZWZhdWx0IiwgInByZXZfdmFsdWUiOiAiIiwgInBvcG92ZXJzIjogW3siaWNvbk5hbWUiOiAiZGlzayIsICJ0ZXh0IjogImlucF9wb3BvdmVyX211bHRpc2l0ZSJ9LCB7Imljb25OYW1lIjogImluZm8iLCAidGV4dCI6ICJIb3N0bmFtZSBvZiB0aGUgcmVtb3RlIFBIUC1GUE0gaW5zdGFuY2UuIn1dfSwgIlJFTU9URV9QSFBfUEFUSCI6IHsiY29udGV4dCI6ICJtdWx0aXNpdGUiLCAiZGVmYXVsdCI6ICIiLCAiaGVscCI6ICJSb290IGZvbGRlciBjb250YWluaW5nIGZpbGVzIGluIHRoZSByZW1vdGUgUEhQLUZQTSBpbnN0YW5jZS4iLCAiaWQiOiAicmVtb3RlLXBocC1wYXRoIiwgImxhYmVsIjogIlJlbW90ZSBQSFAgcGF0aCIsICJyZWdleCI6ICJeKC9bXFx3LiBcXC1dKykqLz8kIiwgInR5cGUiOiAidGV4dCIsICJjb250YWluZXJDbGFzcyI6ICJ6LTIiLCAicGF0dGVybiI6ICJeKC9bXFx3LiBcXC1dKykqLz8kIiwgImlucFR5cGUiOiAiaW5wdXQiLCAibmFtZSI6ICJSZW1vdGUgUEhQIHBhdGgiLCAiY29sdW1ucyI6IHsicGMiOiA0LCAidGFibGV0IjogNiwgIm1vYmlsZSI6IDEyfSwgImRpc2FibGVkIjogZmFsc2UsICJ2YWx1ZSI6ICIiLCAibWV0aG9kIjogImRlZmF1bHQiLCAicHJldl92YWx1ZSI6ICIiLCAicG9wb3ZlcnMiOiBbeyJpY29uTmFtZSI6ICJkaXNrIiwgInRleHQiOiAiaW5wX3BvcG92ZXJfbXVsdGlzaXRlIn0sIHsiaWNvbk5hbWUiOiAiaW5mbyIsICJ0ZXh0IjogIlJvb3QgZm9sZGVyIGNvbnRhaW5pbmcgZmlsZXMgaW4gdGhlIHJlbW90ZSBQSFAtRlBNIGluc3RhbmNlLiJ9XX0sICJMT0NBTF9QSFAiOiB7ImNvbnRleHQiOiAibXVsdGlzaXRlIiwgImRlZmF1bHQiOiAiIiwgImhlbHAiOiAiUGF0aCB0byB0aGUgUEhQLUZQTSBzb2NrZXQgZmlsZS4iLCAiaWQiOiAibG9jYWwiLCAibGFiZWwiOiAiTG9jYWwgUEhQIiwgInJlZ2V4IjogIl4oL1tcXHcuIFxcLV0rKSovPyQiLCAidHlwZSI6ICJ0ZXh0IiwgImNvbnRhaW5lckNsYXNzIjogInotMSIsICJwYXR0ZXJuIjogIl4oL1tcXHcuIFxcLV0rKSovPyQiLCAiaW5wVHlwZSI6ICJpbnB1dCIsICJuYW1lIjogIkxvY2FsIFBIUCIsICJjb2x1bW5zIjogeyJwYyI6IDQsICJ0YWJsZXQiOiA2LCAibW9iaWxlIjogMTJ9LCAiZGlzYWJsZWQiOiBmYWxzZSwgInZhbHVlIjogIiIsICJtZXRob2QiOiAiZGVmYXVsdCIsICJwcmV2X3ZhbHVlIjogIiIsICJwb3BvdmVycyI6IFt7Imljb25OYW1lIjogImRpc2siLCAidGV4dCI6ICJpbnBfcG9wb3Zlcl9tdWx0aXNpdGUifSwgeyJpY29uTmFtZSI6ICJpbmZvIiwgInRleHQiOiAiUGF0aCB0byB0aGUgUEhQLUZQTSBzb2NrZXQgZmlsZS4ifV19LCAiTE9DQUxfUEhQX1BBVEgiOiB7ImNvbnRleHQiOiAibXVsdGlzaXRlIiwgImRlZmF1bHQiOiAiIiwgImhlbHAiOiAiUm9vdCBmb2xkZXIgY29udGFpbmluZyBmaWxlcyBpbiB0aGUgbG9jYWwgUEhQLUZQTSBpbnN0YW5jZS4iLCAiaWQiOiAibG9jYWwtcGhwLXBhdGgiLCAibGFiZWwiOiAiTG9jYWwgUEhQIHBhdGgiLCAicmVnZXgiOiAiXigvW1xcdy4gXFwtXSspKi8/JCIsICJ0eXBlIjogInRleHQiLCAiY29udGFpbmVyQ2xhc3MiOiAiei0wIiwgInBhdHRlcm4iOiAiXigvW1xcdy4gXFwtXSspKi8/JCIsICJpbnBUeXBlIjogImlucHV0IiwgIm5hbWUiOiAiTG9jYWwgUEhQIHBhdGgiLCAiY29sdW1ucyI6IHsicGMiOiA0LCAidGFibGV0IjogNiwgIm1vYmlsZSI6IDEyfSwgImRpc2FibGVkIjogZmFsc2UsICJ2YWx1ZSI6ICIiLCAibWV0aG9kIjogImRlZmF1bHQiLCAicHJldl92YWx1ZSI6ICIiLCAicG9wb3ZlcnMiOiBbeyJpY29uTmFtZSI6ICJkaXNrIiwgInRleHQiOiAiaW5wX3BvcG92ZXJfbXVsdGlzaXRlIn0sIHsiaWNvbk5hbWUiOiAiaW5mbyIsICJ0ZXh0IjogIlJvb3QgZm9sZGVyIGNvbnRhaW5pbmcgZmlsZXMgaW4gdGhlIGxvY2FsIFBIUC1GUE0gaW5zdGFuY2UuIn1dfX0sICJjaGVja3N1bSI6IG51bGx9LCB7ImlkIjogInBybyIsICJzdHJlYW0iOiAibm8iLCAibmFtZSI6ICJQcm8iLCAiZGVzY3JpcHRpb24iOiAiUHJvIHNldHRpbmdzIGZvciB0aGUgUHJvIHZlcnNpb24gb2YgQnVua2VyV2ViLiIsICJ2ZXJzaW9uIjogIjEuMCIsICJ0eXBlIjogImNvcmUiLCAibWV0aG9kIjogIm1hbnVhbCIsICJwYWdlIjogZmFsc2UsICJzZXR0aW5ncyI6IHsiUFJPX0xJQ0VOU0VfS0VZIjogeyJjb250ZXh0IjogImdsb2JhbCIsICJkZWZhdWx0IjogIiIsICJoZWxwIjogIlRoZSBMaWNlbnNlIEtleSBmb3IgdGhlIFBybyB2ZXJzaW9uIG9mIEJ1bmtlcldlYi4iLCAiaWQiOiAicHJvLWxpY2Vuc2Uta2V5IiwgImxhYmVsIjogIlBybyBMaWNlbnNlIEtleSIsICJyZWdleCI6ICJeLiokIiwgInR5cGUiOiAicGFzc3dvcmQiLCAiY29udGFpbmVyQ2xhc3MiOiAiei0wIiwgInBhdHRlcm4iOiAiXi4qJCIsICJpbnBUeXBlIjogImlucHV0IiwgIm5hbWUiOiAiUHJvIExpY2Vuc2UgS2V5IiwgImNvbHVtbnMiOiB7InBjIjogNCwgInRhYmxldCI6IDYsICJtb2JpbGUiOiAxMn0sICJkaXNhYmxlZCI6IGZhbHNlLCAidmFsdWUiOiAiIiwgIm1ldGhvZCI6ICJkZWZhdWx0IiwgInByZXZfdmFsdWUiOiAiIiwgInBvcG92ZXJzIjogW3siaWNvbk5hbWUiOiAiZ2xvYmUiLCAidGV4dCI6ICJpbnBfcG9wb3Zlcl9nbG9iYWwifSwgeyJpY29uTmFtZSI6ICJpbmZvIiwgInRleHQiOiAiVGhlIExpY2Vuc2UgS2V5IGZvciB0aGUgUHJvIHZlcnNpb24gb2YgQnVua2VyV2ViLiJ9XX19LCAiY2hlY2tzdW0iOiBudWxsfSwgeyJpZCI6ICJyZWFsaXAiLCAic3RyZWFtIjogInBhcnRpYWwiLCAibmFtZSI6ICJSZWFsIElQIiwgImRlc2NyaXB0aW9uIjogIkdldCByZWFsIElQIG9mIGNsaWVudHMgd2hlbiBCdW5rZXJXZWIgaXMgYmVoaW5kIGEgcmV2ZXJzZSBwcm94eSAvIGxvYWQgYmFsYW5jZXIuIiwgInZlcnNpb24iOiAiMS4wIiwgInR5cGUiOiAiY29yZSIsICJtZXRob2QiOiAibWFudWFsIiwgInBhZ2UiOiBmYWxzZSwgInNldHRpbmdzIjogeyJVU0VfUkVBTF9JUCI6IHsiY29udGV4dCI6ICJtdWx0aXNpdGUiLCAiZGVmYXVsdCI6ICJubyIsICJoZWxwIjogIlJldHJpZXZlIHRoZSByZWFsIElQIG9mIGNsaWVudC4iLCAiaWQiOiAidXNlLXJlYWwtaXAiLCAibGFiZWwiOiAiVXNlIHJlYWwgaXAiLCAicmVnZXgiOiAiXih5ZXN8bm8pJCIsICJ0eXBlIjogImNoZWNrIiwgImNvbnRhaW5lckNsYXNzIjogInotNSIsICJwYXR0ZXJuIjogIl4oeWVzfG5vKSQiLCAiaW5wVHlwZSI6ICJjaGVja2JveCIsICJuYW1lIjogIlVzZSByZWFsIGlwIiwgImNvbHVtbnMiOiB7InBjIjogNCwgInRhYmxldCI6IDYsICJtb2JpbGUiOiAxMn0sICJkaXNhYmxlZCI6IGZhbHNlLCAidmFsdWUiOiAibm8iLCAibWV0aG9kIjogImRlZmF1bHQiLCAicHJldl92YWx1ZSI6ICJubyIsICJwb3BvdmVycyI6IFt7Imljb25OYW1lIjogImRpc2siLCAidGV4dCI6ICJpbnBfcG9wb3Zlcl9tdWx0aXNpdGUifSwgeyJpY29uTmFtZSI6ICJpbmZvIiwgInRleHQiOiAiUmV0cmlldmUgdGhlIHJlYWwgSVAgb2YgY2xpZW50LiJ9XX0sICJVU0VfUFJPWFlfUFJPVE9DT0wiOiB7ImNvbnRleHQiOiAibXVsdGlzaXRlIiwgImRlZmF1bHQiOiAibm8iLCAiaGVscCI6ICJFbmFibGUgUFJPWFkgcHJvdG9jb2wgY29tbXVuaWNhdGlvbi4iLCAiaWQiOiAidXNlLXByb3h5LXByb3RvY29sIiwgImxhYmVsIjogIlVzZSBQUk9YWSBwcm90b2NvbCIsICJyZWdleCI6ICJeKHllc3xubykkIiwgInR5cGUiOiAiY2hlY2siLCAiY29udGFpbmVyQ2xhc3MiOiAiei00IiwgInBhdHRlcm4iOiAiXih5ZXN8bm8pJCIsICJpbnBUeXBlIjogImNoZWNrYm94IiwgIm5hbWUiOiAiVXNlIFBST1hZIHByb3RvY29sIiwgImNvbHVtbnMiOiB7InBjIjogNCwgInRhYmxldCI6IDYsICJtb2JpbGUiOiAxMn0sICJkaXNhYmxlZCI6IGZhbHNlLCAidmFsdWUiOiAibm8iLCAibWV0aG9kIjogImRlZmF1bHQiLCAicHJldl92YWx1ZSI6ICJubyIsICJwb3BvdmVycyI6IFt7Imljb25OYW1lIjogImRpc2siLCAidGV4dCI6ICJpbnBfcG9wb3Zlcl9tdWx0aXNpdGUifSwgeyJpY29uTmFtZSI6ICJpbmZvIiwgInRleHQiOiAiRW5hYmxlIFBST1hZIHByb3RvY29sIGNvbW11bmljYXRpb24uIn1dfSwgIlJFQUxfSVBfRlJPTSI6IHsiY29udGV4dCI6ICJtdWx0aXNpdGUiLCAiZGVmYXVsdCI6ICIxOTIuMTY4LjAuMC8xNiAxNzIuMTYuMC4wLzEyIDEwLjAuMC4wLzgiLCAiaGVscCI6ICJMaXN0IG9mIHRydXN0ZWQgSVBzIC8gbmV0d29ya3MsIHNlcGFyYXRlZCB3aXRoIHNwYWNlcywgd2hlcmUgcHJveGllZCByZXF1ZXN0cyBjb21lIGZyb20uIiwgImlkIjogInJlYWwtaXAtZnJvbSIsICJsYWJlbCI6ICJSZWFsIElQIGZyb20iLCAicmVnZXgiOiAiXig/ISApKCAqKCgoXFxiMjVbMC01XXxcXGIyWzAtNF1cXGR8XFxiWzAxXT9cXGRcXGQ/KShcXC4oMjVbMC01XXwyWzAtNF1cXGR8WzAxXT9cXGRcXGQ/KSl7M30pKFxcLyhbMS0yXVswLTldP3wzWzAtMl0/fFswNC05XSkpP3woKFswLTlhLWZBLUZdezEsNH06KXs3fVswLTlhLWZBLUZdezEsNH18KFswLTlhLWZBLUZdezEsNH06KXsxLDd9OnwoWzAtOWEtZkEtRl17MSw0fTopezEsNn06WzAtOWEtZkEtRl17MSw0fXwoWzAtOWEtZkEtRl17MSw0fTopezEsNX0oOlswLTlhLWZBLUZdezEsNH0pezEsMn18KFswLTlhLWZBLUZdezEsNH06KXsxLDR9KDpbMC05YS1mQS1GXXsxLDR9KXsxLDN9fChbMC05YS1mQS1GXXsxLDR9Oil7MSwzfSg6WzAtOWEtZkEtRl17MSw0fSl7MSw0fXwoWzAtOWEtZkEtRl17MSw0fTopezEsMn0oOlswLTlhLWZBLUZdezEsNH0pezEsNX18WzAtOWEtZkEtRl17MSw0fTooKDpbMC05YS1mQS1GXXsxLDR9KXsxLDZ9KXw6KCg6WzAtOWEtZkEtRl17MSw0fSl7MSw3fXw6KXxmZTgwOig6WzAtOWEtZkEtRl1aezAsNH0pezAsNH0lWzAtOWEtekEtWl0rfDo6KGZmZmYoOjB7MSw0fSk/Oik/KCgyNVswLTVdfCgyWzAtNF18MT9cXGQpP1xcZClcXC4pezN9KDI1WzAtNV18KDJbMC00XXwxP1xcZCk/XFxkKXwoWzAtOWEtZkEtRl17MSw0fTopezEsNH06KCgyNVswLTVdfCgyWzAtNF18MT9cXGQpP1xcZClcXC4pezN9KDI1WzAtNV18KDJbMC00XXwxP1xcZCk/XFxkKSkoXFwvKDEyWzAtOF18MVswMV1bMC05XXxbMC05XVswLTldPykpPykoPyEuKlxcRFxcMihbXlxcZFxcL118JCkpICopKiQiLCAidHlwZSI6ICJ0ZXh0IiwgImNvbnRhaW5lckNsYXNzIjogInotMyIsICJwYXR0ZXJuIjogIl4oPyEgKSggKigoKFxcYjI1WzAtNV18XFxiMlswLTRdXFxkfFxcYlswMV0/XFxkXFxkPykoXFwuKDI1WzAtNV18MlswLTRdXFxkfFswMV0/XFxkXFxkPykpezN9KShcXC8oWzEtMl1bMC05XT98M1swLTJdP3xbMDQtOV0pKT98KChbMC05YS1mQS1GXXsxLDR9Oil7N31bMC05YS1mQS1GXXsxLDR9fChbMC05YS1mQS1GXXsxLDR9Oil7MSw3fTp8KFswLTlhLWZBLUZdezEsNH06KXsxLDZ9OlswLTlhLWZBLUZdezEsNH18KFswLTlhLWZBLUZdezEsNH06KXsxLDV9KDpbMC05YS1mQS1GXXsxLDR9KXsxLDJ9fChbMC05YS1mQS1GXXsxLDR9Oil7MSw0fSg6WzAtOWEtZkEtRl17MSw0fSl7MSwzfXwoWzAtOWEtZkEtRl17MSw0fTopezEsM30oOlswLTlhLWZBLUZdezEsNH0pezEsNH18KFswLTlhLWZBLUZdezEsNH06KXsxLDJ9KDpbMC05YS1mQS1GXXsxLDR9KXsxLDV9fFswLTlhLWZBLUZdezEsNH06KCg6WzAtOWEtZkEtRl17MSw0fSl7MSw2fSl8OigoOlswLTlhLWZBLUZdezEsNH0pezEsN318Oil8ZmU4MDooOlswLTlhLWZBLUZdWnswLDR9KXswLDR9JVswLTlhLXpBLVpdK3w6OihmZmZmKDowezEsNH0pPzopPygoMjVbMC01XXwoMlswLTRdfDE/XFxkKT9cXGQpXFwuKXszfSgyNVswLTVdfCgyWzAtNF18MT9cXGQpP1xcZCl8KFswLTlhLWZBLUZdezEsNH06KXsxLDR9OigoMjVbMC01XXwoMlswLTRdfDE/XFxkKT9cXGQpXFwuKXszfSgyNVswLTVdfCgyWzAtNF18MT9cXGQpP1xcZCkpKFxcLygxMlswLThdfDFbMDFdWzAtOV18WzAtOV1bMC05XT8pKT8pKD8hLipcXERcXDIoW15cXGRcXC9dfCQpKSAqKSokIiwgImlucFR5cGUiOiAiaW5wdXQiLCAibmFtZSI6ICJSZWFsIElQIGZyb20iLCAiY29sdW1ucyI6IHsicGMiOiA0LCAidGFibGV0IjogNiwgIm1vYmlsZSI6IDEyfSwgImRpc2FibGVkIjogZmFsc2UsICJ2YWx1ZSI6ICIxOTIuMTY4LjAuMC8xNiAxNzIuMTYuMC4wLzEyIDEwLjAuMC4wLzgiLCAibWV0aG9kIjogImRlZmF1bHQiLCAicHJldl92YWx1ZSI6ICIxOTIuMTY4LjAuMC8xNiAxNzIuMTYuMC4wLzEyIDEwLjAuMC4wLzgiLCAicG9wb3ZlcnMiOiBbeyJpY29uTmFtZSI6ICJkaXNrIiwgInRleHQiOiAiaW5wX3BvcG92ZXJfbXVsdGlzaXRlIn0sIHsiaWNvbk5hbWUiOiAiaW5mbyIsICJ0ZXh0IjogIkxpc3Qgb2YgdHJ1c3RlZCBJUHMgLyBuZXR3b3Jrcywgc2VwYXJhdGVkIHdpdGggc3BhY2VzLCB3aGVyZSBwcm94aWVkIHJlcXVlc3RzIGNvbWUgZnJvbS4ifV19LCAiUkVBTF9JUF9IRUFERVIiOiB7ImNvbnRleHQiOiAibXVsdGlzaXRlIiwgImRlZmF1bHQiOiAiWC1Gb3J3YXJkZWQtRm9yIiwgImhlbHAiOiAiSFRUUCBoZWFkZXIgY29udGFpbmluZyB0aGUgcmVhbCBJUCBvciBzcGVjaWFsIHZhbHVlIHByb3h5X3Byb3RvY29sIGZvciBQUk9YWSBwcm90b2NvbC4iLCAiaWQiOiAicmVhbC1pcC1oZWFkZXIiLCAibGFiZWwiOiAiUmVhbCBJUCBoZWFkZXIiLCAicmVnZXgiOiAiXig/ISApKCggPyg/IXByb3h5X3Byb3RvY29sKVtcXHdcXC1dKykqfHByb3h5X3Byb3RvY29sKSQiLCAidHlwZSI6ICJ0ZXh0IiwgImNvbnRhaW5lckNsYXNzIjogInotMiIsICJwYXR0ZXJuIjogIl4oPyEgKSgoID8oPyFwcm94eV9wcm90b2NvbClbXFx3XFwtXSspKnxwcm94eV9wcm90b2NvbCkkIiwgImlucFR5cGUiOiAiaW5wdXQiLCAibmFtZSI6ICJSZWFsIElQIGhlYWRlciIsICJjb2x1bW5zIjogeyJwYyI6IDQsICJ0YWJsZXQiOiA2LCAibW9iaWxlIjogMTJ9LCAiZGlzYWJsZWQiOiBmYWxzZSwgInZhbHVlIjogIlgtRm9yd2FyZGVkLUZvciIsICJtZXRob2QiOiAiZGVmYXVsdCIsICJwcmV2X3ZhbHVlIjogIlgtRm9yd2FyZGVkLUZvciIsICJwb3BvdmVycyI6IFt7Imljb25OYW1lIjogImRpc2siLCAidGV4dCI6ICJpbnBfcG9wb3Zlcl9tdWx0aXNpdGUifSwgeyJpY29uTmFtZSI6ICJpbmZvIiwgInRleHQiOiAiSFRUUCBoZWFkZXIgY29udGFpbmluZyB0aGUgcmVhbCBJUCBvciBzcGVjaWFsIHZhbHVlIHByb3h5X3Byb3RvY29sIGZvciBQUk9YWSBwcm90b2NvbC4ifV19LCAiUkVBTF9JUF9SRUNVUlNJVkUiOiB7ImNvbnRleHQiOiAibXVsdGlzaXRlIiwgImRlZmF1bHQiOiAieWVzIiwgImhlbHAiOiAiUGVyZm9ybSBhIHJlY3Vyc2l2ZSBzZWFyY2ggaW4gdGhlIGhlYWRlciBjb250YWluZXIgSVAgYWRkcmVzcy4iLCAiaWQiOiAicmVhbC1pcC1yZWN1cnNpdmUiLCAibGFiZWwiOiAiUmVhbCBJUCByZWN1cnNpdmUiLCAicmVnZXgiOiAiXih5ZXN8bm8pJCIsICJ0eXBlIjogImNoZWNrIiwgImNvbnRhaW5lckNsYXNzIjogInotMSIsICJwYXR0ZXJuIjogIl4oeWVzfG5vKSQiLCAiaW5wVHlwZSI6ICJjaGVja2JveCIsICJuYW1lIjogIlJlYWwgSVAgcmVjdXJzaXZlIiwgImNvbHVtbnMiOiB7InBjIjogNCwgInRhYmxldCI6IDYsICJtb2JpbGUiOiAxMn0sICJkaXNhYmxlZCI6IGZhbHNlLCAidmFsdWUiOiAieWVzIiwgIm1ldGhvZCI6ICJkZWZhdWx0IiwgInByZXZfdmFsdWUiOiAieWVzIiwgInBvcG92ZXJzIjogW3siaWNvbk5hbWUiOiAiZGlzayIsICJ0ZXh0IjogImlucF9wb3BvdmVyX211bHRpc2l0ZSJ9LCB7Imljb25OYW1lIjogImluZm8iLCAidGV4dCI6ICJQZXJmb3JtIGEgcmVjdXJzaXZlIHNlYXJjaCBpbiB0aGUgaGVhZGVyIGNvbnRhaW5lciBJUCBhZGRyZXNzLiJ9XX0sICJSRUFMX0lQX0ZST01fVVJMUyI6IHsiY29udGV4dCI6ICJnbG9iYWwiLCAiZGVmYXVsdCI6ICIiLCAiaGVscCI6ICJMaXN0IG9mIFVSTHMgY29udGFpbmluZyB0cnVzdGVkIElQcyAvIG5ldHdvcmtzLCBzZXBhcmF0ZWQgd2l0aCBzcGFjZXMsIHdoZXJlIHByb3hpZWQgcmVxdWVzdHMgY29tZSBmcm9tLiIsICJpZCI6ICJyZWFsLWlwLWZyb20tdXJscyIsICJsYWJlbCI6ICJSZWFsIElQIGZyb20gVVJMcyIsICJyZWdleCI6ICJeKCAqKChodHRwcz86XFwvXFwvfGZpbGU6XFwvXFwvXFwvKVtcXC1cXHdAOiUuK34jPV0rW1xcLVxcd1xcKFxcKSFAOiUrLn4jPyZcXC89JF0qKSg/IS4qXFwyKD8hLikpICopKiQiLCAidHlwZSI6ICJ0ZXh0IiwgImNvbnRhaW5lckNsYXNzIjogInotMCIsICJwYXR0ZXJuIjogIl4oICooKGh0dHBzPzpcXC9cXC98ZmlsZTpcXC9cXC9cXC8pW1xcLVxcd0A6JS4rfiM9XStbXFwtXFx3XFwoXFwpIUA6JSsufiM/JlxcLz0kXSopKD8hLipcXDIoPyEuKSkgKikqJCIsICJpbnBUeXBlIjogImlucHV0IiwgIm5hbWUiOiAiUmVhbCBJUCBmcm9tIFVSTHMiLCAiY29sdW1ucyI6IHsicGMiOiA0LCAidGFibGV0IjogNiwgIm1vYmlsZSI6IDEyfSwgImRpc2FibGVkIjogZmFsc2UsICJ2YWx1ZSI6ICIiLCAibWV0aG9kIjogImRlZmF1bHQiLCAicHJldl92YWx1ZSI6ICIiLCAicG9wb3ZlcnMiOiBbeyJpY29uTmFtZSI6ICJnbG9iZSIsICJ0ZXh0IjogImlucF9wb3BvdmVyX2dsb2JhbCJ9LCB7Imljb25OYW1lIjogImluZm8iLCAidGV4dCI6ICJMaXN0IG9mIFVSTHMgY29udGFpbmluZyB0cnVzdGVkIElQcyAvIG5ldHdvcmtzLCBzZXBhcmF0ZWQgd2l0aCBzcGFjZXMsIHdoZXJlIHByb3hpZWQgcmVxdWVzdHMgY29tZSBmcm9tLiJ9XX19LCAiY2hlY2tzdW0iOiBudWxsfSwgeyJpZCI6ICJyZWRpcmVjdCIsICJzdHJlYW0iOiAibm8iLCAibmFtZSI6ICJSZWRpcmVjdCIsICJkZXNjcmlwdGlvbiI6ICJNYW5hZ2UgSFRUUCByZWRpcmVjdHMuIiwgInZlcnNpb24iOiAiMS4wIiwgInR5cGUiOiAiY29yZSIsICJtZXRob2QiOiAibWFudWFsIiwgInBhZ2UiOiBmYWxzZSwgInNldHRpbmdzIjogeyJSRURJUkVDVF9UTyI6IHsiY29udGV4dCI6ICJtdWx0aXNpdGUiLCAiZGVmYXVsdCI6ICIiLCAiaGVscCI6ICJSZWRpcmVjdCBhIHdob2xlIHNpdGUgdG8gYW5vdGhlciBvbmUuIiwgImlkIjogInJlZGlyZWN0LXRvIiwgImxhYmVsIjogIlJlZGlyZWN0IHRvIiwgInJlZ2V4IjogIl4oaHR0cHM/OlxcL1xcL1tcXC1cXHdAOiUuK34jPV0rW1xcLVxcd1xcKFxcKSFAOiUrLn4jPyZcXC89JF0qKT8kIiwgInR5cGUiOiAidGV4dCIsICJjb250YWluZXJDbGFzcyI6ICJ6LTIiLCAicGF0dGVybiI6ICJeKGh0dHBzPzpcXC9cXC9bXFwtXFx3QDolLit+Iz1dK1tcXC1cXHdcXChcXCkhQDolKy5+Iz8mXFwvPSRdKik/JCIsICJpbnBUeXBlIjogImlucHV0IiwgIm5hbWUiOiAiUmVkaXJlY3QgdG8iLCAiY29sdW1ucyI6IHsicGMiOiA0LCAidGFibGV0IjogNiwgIm1vYmlsZSI6IDEyfSwgImRpc2FibGVkIjogZmFsc2UsICJ2YWx1ZSI6ICIiLCAibWV0aG9kIjogImRlZmF1bHQiLCAicHJldl92YWx1ZSI6ICIiLCAicG9wb3ZlcnMiOiBbeyJpY29uTmFtZSI6ICJkaXNrIiwgInRleHQiOiAiaW5wX3BvcG92ZXJfbXVsdGlzaXRlIn0sIHsiaWNvbk5hbWUiOiAiaW5mbyIsICJ0ZXh0IjogIlJlZGlyZWN0IGEgd2hvbGUgc2l0ZSB0byBhbm90aGVyIG9uZS4ifV19LCAiUkVESVJFQ1RfVE9fUkVRVUVTVF9VUkkiOiB7ImNvbnRleHQiOiAibXVsdGlzaXRlIiwgImRlZmF1bHQiOiAibm8iLCAiaGVscCI6ICJBcHBlbmQgdGhlIHJlcXVlc3RlZCBVUkkgdG8gdGhlIHJlZGlyZWN0IGFkZHJlc3MuIiwgImlkIjogInJlZGlyZWN0LXRvLXJlcXVlc3QtdXJpIiwgImxhYmVsIjogIkFwcGVuZCByZXF1ZXN0IFVSSSIsICJyZWdleCI6ICJeKHllc3xubykkIiwgInR5cGUiOiAiY2hlY2siLCAiY29udGFpbmVyQ2xhc3MiOiAiei0xIiwgInBhdHRlcm4iOiAiXih5ZXN8bm8pJCIsICJpbnBUeXBlIjogImNoZWNrYm94IiwgIm5hbWUiOiAiQXBwZW5kIHJlcXVlc3QgVVJJIiwgImNvbHVtbnMiOiB7InBjIjogNCwgInRhYmxldCI6IDYsICJtb2JpbGUiOiAxMn0sICJkaXNhYmxlZCI6IGZhbHNlLCAidmFsdWUiOiAibm8iLCAibWV0aG9kIjogImRlZmF1bHQiLCAicHJldl92YWx1ZSI6ICJubyIsICJwb3BvdmVycyI6IFt7Imljb25OYW1lIjogImRpc2siLCAidGV4dCI6ICJpbnBfcG9wb3Zlcl9tdWx0aXNpdGUifSwgeyJpY29uTmFtZSI6ICJpbmZvIiwgInRleHQiOiAiQXBwZW5kIHRoZSByZXF1ZXN0ZWQgVVJJIHRvIHRoZSByZWRpcmVjdCBhZGRyZXNzLiJ9XX0sICJSRURJUkVDVF9UT19TVEFUVVNfQ09ERSI6IHsiY29udGV4dCI6ICJtdWx0aXNpdGUiLCAiZGVmYXVsdCI6ICIzMDEiLCAiaGVscCI6ICJTdGF0dXMgY29kZSB0byBzZW5kIHRvIGNsaWVudCB3aGVuIHJlZGlyZWN0aW5nLiIsICJpZCI6ICJyZWRpcmVjdC10by1zdGF0dXMtY29kZSIsICJsYWJlbCI6ICJBcHBlbmQgcmVxdWVzdCBVUkkiLCAicmVnZXgiOiAiXigzMDF8MzAyKSQiLCAidHlwZSI6ICJzZWxlY3QiLCAiY29udGFpbmVyQ2xhc3MiOiAiei0wIiwgInBhdHRlcm4iOiAiXigzMDF8MzAyKSQiLCAiaW5wVHlwZSI6ICJzZWxlY3QiLCAibmFtZSI6ICJBcHBlbmQgcmVxdWVzdCBVUkkiLCAidmFsdWVzIjogWyIzMDEiLCAiMzAyIl0sICJjb2x1bW5zIjogeyJwYyI6IDQsICJ0YWJsZXQiOiA2LCAibW9iaWxlIjogMTJ9LCAiZGlzYWJsZWQiOiBmYWxzZSwgInZhbHVlIjogIjMwMSIsICJtZXRob2QiOiAiZGVmYXVsdCIsICJwcmV2X3ZhbHVlIjogIjMwMSIsICJwb3BvdmVycyI6IFt7Imljb25OYW1lIjogImRpc2siLCAidGV4dCI6ICJpbnBfcG9wb3Zlcl9tdWx0aXNpdGUifSwgeyJpY29uTmFtZSI6ICJpbmZvIiwgInRleHQiOiAiU3RhdHVzIGNvZGUgdG8gc2VuZCB0byBjbGllbnQgd2hlbiByZWRpcmVjdGluZy4ifV19fSwgImNoZWNrc3VtIjogbnVsbH0sIHsiaWQiOiAicmVkaXMiLCAic3RyZWFtIjogInllcyIsICJuYW1lIjogIlJlZGlzIiwgImRlc2NyaXB0aW9uIjogIlJlZGlzIHNlcnZlciBjb25maWd1cmF0aW9uIHdoZW4gdXNpbmcgQnVua2VyV2ViIGluIGNsdXN0ZXIgbW9kZS4iLCAidmVyc2lvbiI6ICIxLjAiLCAidHlwZSI6ICJjb3JlIiwgIm1ldGhvZCI6ICJtYW51YWwiLCAicGFnZSI6IHRydWUsICJzZXR0aW5ncyI6IHsiVVNFX1JFRElTIjogeyJjb250ZXh0IjogImdsb2JhbCIsICJkZWZhdWx0IjogIm5vIiwgImhlbHAiOiAiQWN0aXZhdGUgUmVkaXMuIiwgImlkIjogInVzZS1yZWRpcyIsICJsYWJlbCI6ICJBY3RpdmF0ZSBSZWRpcyIsICJyZWdleCI6ICJeKHllc3xubykkIiwgInR5cGUiOiAiY2hlY2siLCAiY29udGFpbmVyQ2xhc3MiOiAiei0xNCIsICJwYXR0ZXJuIjogIl4oeWVzfG5vKSQiLCAiaW5wVHlwZSI6ICJjaGVja2JveCIsICJuYW1lIjogIkFjdGl2YXRlIFJlZGlzIiwgImNvbHVtbnMiOiB7InBjIjogNCwgInRhYmxldCI6IDYsICJtb2JpbGUiOiAxMn0sICJkaXNhYmxlZCI6IGZhbHNlLCAidmFsdWUiOiAibm8iLCAibWV0aG9kIjogImRlZmF1bHQiLCAicHJldl92YWx1ZSI6ICJubyIsICJwb3BvdmVycyI6IFt7Imljb25OYW1lIjogImdsb2JlIiwgInRleHQiOiAiaW5wX3BvcG92ZXJfZ2xvYmFsIn0sIHsiaWNvbk5hbWUiOiAiaW5mbyIsICJ0ZXh0IjogIkFjdGl2YXRlIFJlZGlzLiJ9XX0sICJSRURJU19IT1NUIjogeyJjb250ZXh0IjogImdsb2JhbCIsICJkZWZhdWx0IjogIiIsICJoZWxwIjogIlJlZGlzIHNlcnZlciBJUCBvciBob3N0bmFtZS4iLCAiaWQiOiAicmVkaXMtaG9zdCIsICJsYWJlbCI6ICJSZWRpcyBzZXJ2ZXIiLCAicmVnZXgiOiAiXigoPyEtKVthLXpBLVowLTlcXC1dezEsNjN9KC5bYS16QS1aXXsyLH0pK3woXFxiMjVbMC01XXxcXGIyWzAtNF1cXGR8XFxiWzAxXT9cXGRcXGQ/KShcXC4oMjVbMC01XXwyWzAtNF1cXGR8WzAxXT9cXGRcXGQ/KSl7M318KChbMC05YS1mQS1GXXsxLDR9Oil7N31bMC05YS1mQS1GXXsxLDR9fChbMC05YS1mQS1GXXsxLDR9Oil7MSw3fTp8KFswLTlhLWZBLUZdezEsNH06KXsxLDZ9OlswLTlhLWZBLUZdezEsNH18KFswLTlhLWZBLUZdezEsNH06KXsxLDV9KDpbMC05YS1mQS1GXXsxLDR9KXsxLDJ9fChbMC05YS1mQS1GXXsxLDR9Oil7MSw0fSg6WzAtOWEtZkEtRl17MSw0fSl7MSwzfXwoWzAtOWEtZkEtRl17MSw0fTopezEsM30oOlswLTlhLWZBLUZdezEsNH0pezEsNH18KFswLTlhLWZBLUZdezEsNH06KXsxLDJ9KDpbMC05YS1mQS1GXXsxLDR9KXsxLDV9fFswLTlhLWZBLUZdezEsNH06KCg6WzAtOWEtZkEtRl17MSw0fSl7MSw2fSl8OigoOlswLTlhLWZBLUZdezEsNH0pezEsN318Oil8ZmU4MDooOlswLTlhLWZBLUZdWnswLDR9KXswLDR9JVswLTlhLXpBLVpdK3w6OihmZmZmKDowezEsNH0pPzopPygoMjVbMC01XXwoMlswLTRdfDE/XFxkKT9cXGQpXFwuKXszfSgyNVswLTVdfCgyWzAtNF18MT9cXGQpP1xcZCl8KFswLTlhLWZBLUZdezEsNH06KXsxLDR9OigoMjVbMC01XXwoMlswLTRdfDE/XFxkKT9cXGQpXFwuKXszfSgyNVswLTVdfCgyWzAtNF18MT9cXGQpP1xcZCkpKT8kIiwgInR5cGUiOiAidGV4dCIsICJjb250YWluZXJDbGFzcyI6ICJ6LTEzIiwgInBhdHRlcm4iOiAiXigoPyEtKVthLXpBLVowLTlcXC1dezEsNjN9KC5bYS16QS1aXXsyLH0pK3woXFxiMjVbMC01XXxcXGIyWzAtNF1cXGR8XFxiWzAxXT9cXGRcXGQ/KShcXC4oMjVbMC01XXwyWzAtNF1cXGR8WzAxXT9cXGRcXGQ/KSl7M318KChbMC05YS1mQS1GXXsxLDR9Oil7N31bMC05YS1mQS1GXXsxLDR9fChbMC05YS1mQS1GXXsxLDR9Oil7MSw3fTp8KFswLTlhLWZBLUZdezEsNH06KXsxLDZ9OlswLTlhLWZBLUZdezEsNH18KFswLTlhLWZBLUZdezEsNH06KXsxLDV9KDpbMC05YS1mQS1GXXsxLDR9KXsxLDJ9fChbMC05YS1mQS1GXXsxLDR9Oil7MSw0fSg6WzAtOWEtZkEtRl17MSw0fSl7MSwzfXwoWzAtOWEtZkEtRl17MSw0fTopezEsM30oOlswLTlhLWZBLUZdezEsNH0pezEsNH18KFswLTlhLWZBLUZdezEsNH06KXsxLDJ9KDpbMC05YS1mQS1GXXsxLDR9KXsxLDV9fFswLTlhLWZBLUZdezEsNH06KCg6WzAtOWEtZkEtRl17MSw0fSl7MSw2fSl8OigoOlswLTlhLWZBLUZdezEsNH0pezEsN318Oil8ZmU4MDooOlswLTlhLWZBLUZdWnswLDR9KXswLDR9JVswLTlhLXpBLVpdK3w6OihmZmZmKDowezEsNH0pPzopPygoMjVbMC01XXwoMlswLTRdfDE/XFxkKT9cXGQpXFwuKXszfSgyNVswLTVdfCgyWzAtNF18MT9cXGQpP1xcZCl8KFswLTlhLWZBLUZdezEsNH06KXsxLDR9OigoMjVbMC01XXwoMlswLTRdfDE/XFxkKT9cXGQpXFwuKXszfSgyNVswLTVdfCgyWzAtNF18MT9cXGQpP1xcZCkpKT8kIiwgImlucFR5cGUiOiAiaW5wdXQiLCAibmFtZSI6ICJSZWRpcyBzZXJ2ZXIiLCAiY29sdW1ucyI6IHsicGMiOiA0LCAidGFibGV0IjogNiwgIm1vYmlsZSI6IDEyfSwgImRpc2FibGVkIjogZmFsc2UsICJ2YWx1ZSI6ICIiLCAibWV0aG9kIjogImRlZmF1bHQiLCAicHJldl92YWx1ZSI6ICIiLCAicG9wb3ZlcnMiOiBbeyJpY29uTmFtZSI6ICJnbG9iZSIsICJ0ZXh0IjogImlucF9wb3BvdmVyX2dsb2JhbCJ9LCB7Imljb25OYW1lIjogImluZm8iLCAidGV4dCI6ICJSZWRpcyBzZXJ2ZXIgSVAgb3IgaG9zdG5hbWUuIn1dfSwgIlJFRElTX1BPUlQiOiB7ImNvbnRleHQiOiAiZ2xvYmFsIiwgImRlZmF1bHQiOiAiNjM3OSIsICJoZWxwIjogIlJlZGlzIHNlcnZlciBwb3J0LiIsICJpZCI6ICJyZWRpcy1wb3J0IiwgImxhYmVsIjogIlJlZGlzIHBvcnQiLCAicmVnZXgiOiAiXlswLTldKyQiLCAidHlwZSI6ICJ0ZXh0IiwgImNvbnRhaW5lckNsYXNzIjogInotMTIiLCAicGF0dGVybiI6ICJeWzAtOV0rJCIsICJpbnBUeXBlIjogImlucHV0IiwgIm5hbWUiOiAiUmVkaXMgcG9ydCIsICJjb2x1bW5zIjogeyJwYyI6IDQsICJ0YWJsZXQiOiA2LCAibW9iaWxlIjogMTJ9LCAiZGlzYWJsZWQiOiBmYWxzZSwgInZhbHVlIjogIjYzNzkiLCAibWV0aG9kIjogImRlZmF1bHQiLCAicHJldl92YWx1ZSI6ICI2Mzc5IiwgInBvcG92ZXJzIjogW3siaWNvbk5hbWUiOiAiZ2xvYmUiLCAidGV4dCI6ICJpbnBfcG9wb3Zlcl9nbG9iYWwifSwgeyJpY29uTmFtZSI6ICJpbmZvIiwgInRleHQiOiAiUmVkaXMgc2VydmVyIHBvcnQuIn1dfSwgIlJFRElTX0RBVEFCQVNFIjogeyJjb250ZXh0IjogImdsb2JhbCIsICJkZWZhdWx0IjogIjAiLCAiaGVscCI6ICJSZWRpcyBkYXRhYmFzZSBudW1iZXIuIiwgImlkIjogInJlZGlzLWRhdGFiYXNlIiwgImxhYmVsIjogIlJlZGlzIGRhdGFiYXNlIiwgInJlZ2V4IjogIl5bMC05XSskIiwgInR5cGUiOiAidGV4dCIsICJjb250YWluZXJDbGFzcyI6ICJ6LTExIiwgInBhdHRlcm4iOiAiXlswLTldKyQiLCAiaW5wVHlwZSI6ICJpbnB1dCIsICJuYW1lIjogIlJlZGlzIGRhdGFiYXNlIiwgImNvbHVtbnMiOiB7InBjIjogNCwgInRhYmxldCI6IDYsICJtb2JpbGUiOiAxMn0sICJkaXNhYmxlZCI6IGZhbHNlLCAidmFsdWUiOiAiMCIsICJtZXRob2QiOiAiZGVmYXVsdCIsICJwcmV2X3ZhbHVlIjogIjAiLCAicG9wb3ZlcnMiOiBbeyJpY29uTmFtZSI6ICJnbG9iZSIsICJ0ZXh0IjogImlucF9wb3BvdmVyX2dsb2JhbCJ9LCB7Imljb25OYW1lIjogImluZm8iLCAidGV4dCI6ICJSZWRpcyBkYXRhYmFzZSBudW1iZXIuIn1dfSwgIlJFRElTX1NTTCI6IHsiY29udGV4dCI6ICJnbG9iYWwiLCAiZGVmYXVsdCI6ICJubyIsICJoZWxwIjogIlVzZSBTU0wvVExTIGNvbm5lY3Rpb24gd2l0aCBSZWRpcyBzZXJ2ZXIuIiwgImlkIjogInJlZGlzLXNzbCIsICJsYWJlbCI6ICJSZWRpcyBTU0wvVExTIiwgInJlZ2V4IjogIl4oeWVzfG5vKSQiLCAidHlwZSI6ICJjaGVjayIsICJjb250YWluZXJDbGFzcyI6ICJ6LTEwIiwgInBhdHRlcm4iOiAiXih5ZXN8bm8pJCIsICJpbnBUeXBlIjogImNoZWNrYm94IiwgIm5hbWUiOiAiUmVkaXMgU1NML1RMUyIsICJjb2x1bW5zIjogeyJwYyI6IDQsICJ0YWJsZXQiOiA2LCAibW9iaWxlIjogMTJ9LCAiZGlzYWJsZWQiOiBmYWxzZSwgInZhbHVlIjogIm5vIiwgIm1ldGhvZCI6ICJkZWZhdWx0IiwgInByZXZfdmFsdWUiOiAibm8iLCAicG9wb3ZlcnMiOiBbeyJpY29uTmFtZSI6ICJnbG9iZSIsICJ0ZXh0IjogImlucF9wb3BvdmVyX2dsb2JhbCJ9LCB7Imljb25OYW1lIjogImluZm8iLCAidGV4dCI6ICJVc2UgU1NML1RMUyBjb25uZWN0aW9uIHdpdGggUmVkaXMgc2VydmVyLiJ9XX0sICJSRURJU19TU0xfVkVSSUZZIjogeyJjb250ZXh0IjogImdsb2JhbCIsICJkZWZhdWx0IjogIm5vIiwgImhlbHAiOiAiVmVyaWZ5IHRoZSBjZXJ0aWZpY2F0ZSBvZiBSZWRpcyBzZXJ2ZXIuIiwgImlkIjogInJlZGlzLXNzbC12ZXJpZnkiLCAibGFiZWwiOiAiUmVkaXMgU1NML1RMUyB2ZXJpZnkiLCAicmVnZXgiOiAiXih5ZXN8bm8pJCIsICJ0eXBlIjogImNoZWNrIiwgImNvbnRhaW5lckNsYXNzIjogInotOSIsICJwYXR0ZXJuIjogIl4oeWVzfG5vKSQiLCAiaW5wVHlwZSI6ICJjaGVja2JveCIsICJuYW1lIjogIlJlZGlzIFNTTC9UTFMgdmVyaWZ5IiwgImNvbHVtbnMiOiB7InBjIjogNCwgInRhYmxldCI6IDYsICJtb2JpbGUiOiAxMn0sICJkaXNhYmxlZCI6IGZhbHNlLCAidmFsdWUiOiAibm8iLCAibWV0aG9kIjogImRlZmF1bHQiLCAicHJldl92YWx1ZSI6ICJubyIsICJwb3BvdmVycyI6IFt7Imljb25OYW1lIjogImdsb2JlIiwgInRleHQiOiAiaW5wX3BvcG92ZXJfZ2xvYmFsIn0sIHsiaWNvbk5hbWUiOiAiaW5mbyIsICJ0ZXh0IjogIlZlcmlmeSB0aGUgY2VydGlmaWNhdGUgb2YgUmVkaXMgc2VydmVyLiJ9XX0sICJSRURJU19USU1FT1VUIjogeyJjb250ZXh0IjogImdsb2JhbCIsICJkZWZhdWx0IjogIjEwMDAiLCAiaGVscCI6ICJSZWRpcyBzZXJ2ZXIgdGltZW91dCAoaW4gbXMpIGZvciBjb25uZWN0LCByZWFkIGFuZCB3cml0ZS4iLCAiaWQiOiAicmVkaXMtdGltZW91dCIsICJsYWJlbCI6ICJSZWRpcyB0aW1lb3V0IChtcykiLCAicmVnZXgiOiAiXlswLTldKyQiLCAidHlwZSI6ICJ0ZXh0IiwgImNvbnRhaW5lckNsYXNzIjogInotOCIsICJwYXR0ZXJuIjogIl5bMC05XSskIiwgImlucFR5cGUiOiAiaW5wdXQiLCAibmFtZSI6ICJSZWRpcyB0aW1lb3V0IChtcykiLCAiY29sdW1ucyI6IHsicGMiOiA0LCAidGFibGV0IjogNiwgIm1vYmlsZSI6IDEyfSwgImRpc2FibGVkIjogZmFsc2UsICJ2YWx1ZSI6ICIxMDAwIiwgIm1ldGhvZCI6ICJkZWZhdWx0IiwgInByZXZfdmFsdWUiOiAiMTAwMCIsICJwb3BvdmVycyI6IFt7Imljb25OYW1lIjogImdsb2JlIiwgInRleHQiOiAiaW5wX3BvcG92ZXJfZ2xvYmFsIn0sIHsiaWNvbk5hbWUiOiAiaW5mbyIsICJ0ZXh0IjogIlJlZGlzIHNlcnZlciB0aW1lb3V0IChpbiBtcykgZm9yIGNvbm5lY3QsIHJlYWQgYW5kIHdyaXRlLiJ9XX0sICJSRURJU19VU0VSTkFNRSI6IHsiY29udGV4dCI6ICJnbG9iYWwiLCAiZGVmYXVsdCI6ICIiLCAiaGVscCI6ICJSZWRpcyB1c2VybmFtZSB1c2VkIGluIEFVVEggY29tbWFuZC4iLCAiaWQiOiAicmVkaXMtdXNlcm5hbWUiLCAibGFiZWwiOiAiUmVkaXMgdXNlcm5hbWUiLCAicmVnZXgiOiAiXi4qJCIsICJ0eXBlIjogInRleHQiLCAiY29udGFpbmVyQ2xhc3MiOiAiei03IiwgInBhdHRlcm4iOiAiXi4qJCIsICJpbnBUeXBlIjogImlucHV0IiwgIm5hbWUiOiAiUmVkaXMgdXNlcm5hbWUiLCAiY29sdW1ucyI6IHsicGMiOiA0LCAidGFibGV0IjogNiwgIm1vYmlsZSI6IDEyfSwgImRpc2FibGVkIjogZmFsc2UsICJ2YWx1ZSI6ICIiLCAibWV0aG9kIjogImRlZmF1bHQiLCAicHJldl92YWx1ZSI6ICIiLCAicG9wb3ZlcnMiOiBbeyJpY29uTmFtZSI6ICJnbG9iZSIsICJ0ZXh0IjogImlucF9wb3BvdmVyX2dsb2JhbCJ9LCB7Imljb25OYW1lIjogImluZm8iLCAidGV4dCI6ICJSZWRpcyB1c2VybmFtZSB1c2VkIGluIEFVVEggY29tbWFuZC4ifV19LCAiUkVESVNfUEFTU1dPUkQiOiB7ImNvbnRleHQiOiAiZ2xvYmFsIiwgImRlZmF1bHQiOiAiIiwgImhlbHAiOiAiUmVkaXMgcGFzc3dvcmQgdXNlZCBpbiBBVVRIIGNvbW1hbmQuIiwgImlkIjogInJlZGlzLXBhc3N3b3JkIiwgImxhYmVsIjogIlJlZGlzIHBhc3N3b3JkIiwgInJlZ2V4IjogIl4uKiQiLCAidHlwZSI6ICJwYXNzd29yZCIsICJjb250YWluZXJDbGFzcyI6ICJ6LTYiLCAicGF0dGVybiI6ICJeLiokIiwgImlucFR5cGUiOiAiaW5wdXQiLCAibmFtZSI6ICJSZWRpcyBwYXNzd29yZCIsICJjb2x1bW5zIjogeyJwYyI6IDQsICJ0YWJsZXQiOiA2LCAibW9iaWxlIjogMTJ9LCAiZGlzYWJsZWQiOiBmYWxzZSwgInZhbHVlIjogIiIsICJtZXRob2QiOiAiZGVmYXVsdCIsICJwcmV2X3ZhbHVlIjogIiIsICJwb3BvdmVycyI6IFt7Imljb25OYW1lIjogImdsb2JlIiwgInRleHQiOiAiaW5wX3BvcG92ZXJfZ2xvYmFsIn0sIHsiaWNvbk5hbWUiOiAiaW5mbyIsICJ0ZXh0IjogIlJlZGlzIHBhc3N3b3JkIHVzZWQgaW4gQVVUSCBjb21tYW5kLiJ9XX0sICJSRURJU19TRU5USU5FTF9IT1NUUyI6IHsiY29udGV4dCI6ICJnbG9iYWwiLCAiZGVmYXVsdCI6ICIiLCAiaGVscCI6ICJSZWRpcyBzZW50aW5lbCBob3N0cyB3aXRoIGZvcm1hdCBob3N0Oltwb3J0XSBzZXBhcmF0ZWQgd2l0aCBzcGFjZXMuIiwgImlkIjogInJlZGlzLXNlbnRpbmVsLWhvc3RzIiwgImxhYmVsIjogIlJlZGlzIHNlbnRpbmVsIGhvc3RzIiwgInJlZ2V4IjogIl4uKiQiLCAidHlwZSI6ICJ0ZXh0IiwgImNvbnRhaW5lckNsYXNzIjogInotNSIsICJwYXR0ZXJuIjogIl4uKiQiLCAiaW5wVHlwZSI6ICJpbnB1dCIsICJuYW1lIjogIlJlZGlzIHNlbnRpbmVsIGhvc3RzIiwgImNvbHVtbnMiOiB7InBjIjogNCwgInRhYmxldCI6IDYsICJtb2JpbGUiOiAxMn0sICJkaXNhYmxlZCI6IGZhbHNlLCAidmFsdWUiOiAiIiwgIm1ldGhvZCI6ICJkZWZhdWx0IiwgInByZXZfdmFsdWUiOiAiIiwgInBvcG92ZXJzIjogW3siaWNvbk5hbWUiOiAiZ2xvYmUiLCAidGV4dCI6ICJpbnBfcG9wb3Zlcl9nbG9iYWwifSwgeyJpY29uTmFtZSI6ICJpbmZvIiwgInRleHQiOiAiUmVkaXMgc2VudGluZWwgaG9zdHMgd2l0aCBmb3JtYXQgaG9zdDpbcG9ydF0gc2VwYXJhdGVkIHdpdGggc3BhY2VzLiJ9XX0sICJSRURJU19TRU5USU5FTF9VU0VSTkFNRSI6IHsiY29udGV4dCI6ICJnbG9iYWwiLCAiZGVmYXVsdCI6ICIiLCAiaGVscCI6ICJSZWRpcyBzZW50aW5lbCB1c2VybmFtZS4iLCAiaWQiOiAicmVkaXMtc2VudGluZWwtdXNlcm5hbWUiLCAibGFiZWwiOiAiUmVkaXMgc2VudGluZWwgdXNlcm5hbWUiLCAicmVnZXgiOiAiXi4qJCIsICJ0eXBlIjogInRleHQiLCAiY29udGFpbmVyQ2xhc3MiOiAiei00IiwgInBhdHRlcm4iOiAiXi4qJCIsICJpbnBUeXBlIjogImlucHV0IiwgIm5hbWUiOiAiUmVkaXMgc2VudGluZWwgdXNlcm5hbWUiLCAiY29sdW1ucyI6IHsicGMiOiA0LCAidGFibGV0IjogNiwgIm1vYmlsZSI6IDEyfSwgImRpc2FibGVkIjogZmFsc2UsICJ2YWx1ZSI6ICIiLCAibWV0aG9kIjogImRlZmF1bHQiLCAicHJldl92YWx1ZSI6ICIiLCAicG9wb3ZlcnMiOiBbeyJpY29uTmFtZSI6ICJnbG9iZSIsICJ0ZXh0IjogImlucF9wb3BvdmVyX2dsb2JhbCJ9LCB7Imljb25OYW1lIjogImluZm8iLCAidGV4dCI6ICJSZWRpcyBzZW50aW5lbCB1c2VybmFtZS4ifV19LCAiUkVESVNfU0VOVElORUxfUEFTU1dPUkQiOiB7ImNvbnRleHQiOiAiZ2xvYmFsIiwgImRlZmF1bHQiOiAiIiwgImhlbHAiOiAiUmVkaXMgc2VudGluZWwgcGFzc3dvcmQuIiwgImlkIjogInJlZGlzLXNlbnRpbmVsLXBhc3N3b3JkIiwgImxhYmVsIjogIlJlZGlzIHNlbnRpbmVsIHBhc3N3b3JkIiwgInJlZ2V4IjogIl4uKiQiLCAidHlwZSI6ICJwYXNzd29yZCIsICJjb250YWluZXJDbGFzcyI6ICJ6LTMiLCAicGF0dGVybiI6ICJeLiokIiwgImlucFR5cGUiOiAiaW5wdXQiLCAibmFtZSI6ICJSZWRpcyBzZW50aW5lbCBwYXNzd29yZCIsICJjb2x1bW5zIjogeyJwYyI6IDQsICJ0YWJsZXQiOiA2LCAibW9iaWxlIjogMTJ9LCAiZGlzYWJsZWQiOiBmYWxzZSwgInZhbHVlIjogIiIsICJtZXRob2QiOiAiZGVmYXVsdCIsICJwcmV2X3ZhbHVlIjogIiIsICJwb3BvdmVycyI6IFt7Imljb25OYW1lIjogImdsb2JlIiwgInRleHQiOiAiaW5wX3BvcG92ZXJfZ2xvYmFsIn0sIHsiaWNvbk5hbWUiOiAiaW5mbyIsICJ0ZXh0IjogIlJlZGlzIHNlbnRpbmVsIHBhc3N3b3JkLiJ9XX0sICJSRURJU19TRU5USU5FTF9NQVNURVIiOiB7ImNvbnRleHQiOiAiZ2xvYmFsIiwgImRlZmF1bHQiOiAiIiwgImhlbHAiOiAiUmVkaXMgc2VudGluZWwgbWFzdGVyIG5hbWUuIiwgImlkIjogInJlZGlzLXNlbnRpbmVsLW1hc3RlciIsICJsYWJlbCI6ICJSZWRpcyBzZW50aW5lbCBtYXN0ZXIiLCAicmVnZXgiOiAiXi4qJCIsICJ0eXBlIjogInRleHQiLCAiY29udGFpbmVyQ2xhc3MiOiAiei0yIiwgInBhdHRlcm4iOiAiXi4qJCIsICJpbnBUeXBlIjogImlucHV0IiwgIm5hbWUiOiAiUmVkaXMgc2VudGluZWwgbWFzdGVyIiwgImNvbHVtbnMiOiB7InBjIjogNCwgInRhYmxldCI6IDYsICJtb2JpbGUiOiAxMn0sICJkaXNhYmxlZCI6IGZhbHNlLCAidmFsdWUiOiAiIiwgIm1ldGhvZCI6ICJkZWZhdWx0IiwgInByZXZfdmFsdWUiOiAiIiwgInBvcG92ZXJzIjogW3siaWNvbk5hbWUiOiAiZ2xvYmUiLCAidGV4dCI6ICJpbnBfcG9wb3Zlcl9nbG9iYWwifSwgeyJpY29uTmFtZSI6ICJpbmZvIiwgInRleHQiOiAiUmVkaXMgc2VudGluZWwgbWFzdGVyIG5hbWUuIn1dfSwgIlJFRElTX0tFRVBBTElWRV9JRExFIjogeyJjb250ZXh0IjogImdsb2JhbCIsICJkZWZhdWx0IjogIjMwMDAwIiwgImhlbHAiOiAiTWF4IGlkbGUgdGltZSAoaW4gbXMpIGJlZm9yZSBjbG9zaW5nIHJlZGlzIGNvbm5lY3Rpb24gaW4gdGhlIHBvb2wuIiwgImlkIjogInJlZGlzLWtlZXBhbGl2ZS1pZGxlIiwgImxhYmVsIjogIlJlZGlzIGtlZXBhbGl2ZSBpZGxlIChtcykiLCAicmVnZXgiOiAiXlswLTldKyQiLCAidHlwZSI6ICJ0ZXh0IiwgImNvbnRhaW5lckNsYXNzIjogInotMSIsICJwYXR0ZXJuIjogIl5bMC05XSskIiwgImlucFR5cGUiOiAiaW5wdXQiLCAibmFtZSI6ICJSZWRpcyBrZWVwYWxpdmUgaWRsZSAobXMpIiwgImNvbHVtbnMiOiB7InBjIjogNCwgInRhYmxldCI6IDYsICJtb2JpbGUiOiAxMn0sICJkaXNhYmxlZCI6IGZhbHNlLCAidmFsdWUiOiAiMzAwMDAiLCAibWV0aG9kIjogImRlZmF1bHQiLCAicHJldl92YWx1ZSI6ICIzMDAwMCIsICJwb3BvdmVycyI6IFt7Imljb25OYW1lIjogImdsb2JlIiwgInRleHQiOiAiaW5wX3BvcG92ZXJfZ2xvYmFsIn0sIHsiaWNvbk5hbWUiOiAiaW5mbyIsICJ0ZXh0IjogIk1heCBpZGxlIHRpbWUgKGluIG1zKSBiZWZvcmUgY2xvc2luZyByZWRpcyBjb25uZWN0aW9uIGluIHRoZSBwb29sLiJ9XX0sICJSRURJU19LRUVQQUxJVkVfUE9PTCI6IHsiY29udGV4dCI6ICJnbG9iYWwiLCAiZGVmYXVsdCI6ICIxMCIsICJoZWxwIjogIk1heCBudW1iZXIgb2YgcmVkaXMgY29ubmVjdGlvbihzKSBrZXB0IGluIHRoZSBwb29sLiIsICJpZCI6ICJyZWRpcy1rZWVwYWxpdmUtcG9vbCIsICJsYWJlbCI6ICJSZWRpcyBrZWVwYWxpdmUgcG9vbCIsICJyZWdleCI6ICJeWzAtOV0rJCIsICJ0eXBlIjogInRleHQiLCAiY29udGFpbmVyQ2xhc3MiOiAiei0wIiwgInBhdHRlcm4iOiAiXlswLTldKyQiLCAiaW5wVHlwZSI6ICJpbnB1dCIsICJuYW1lIjogIlJlZGlzIGtlZXBhbGl2ZSBwb29sIiwgImNvbHVtbnMiOiB7InBjIjogNCwgInRhYmxldCI6IDYsICJtb2JpbGUiOiAxMn0sICJkaXNhYmxlZCI6IGZhbHNlLCAidmFsdWUiOiAiMTAiLCAibWV0aG9kIjogImRlZmF1bHQiLCAicHJldl92YWx1ZSI6ICIxMCIsICJwb3BvdmVycyI6IFt7Imljb25OYW1lIjogImdsb2JlIiwgInRleHQiOiAiaW5wX3BvcG92ZXJfZ2xvYmFsIn0sIHsiaWNvbk5hbWUiOiAiaW5mbyIsICJ0ZXh0IjogIk1heCBudW1iZXIgb2YgcmVkaXMgY29ubmVjdGlvbihzKSBrZXB0IGluIHRoZSBwb29sLiJ9XX19LCAiY2hlY2tzdW0iOiBudWxsfSwgeyJpZCI6ICJyZXZlcnNlcHJveHkiLCAic3RyZWFtIjogInBhcnRpYWwiLCAibmFtZSI6ICJSZXZlcnNlIHByb3h5IiwgImRlc2NyaXB0aW9uIjogIk1hbmFnZSByZXZlcnNlIHByb3h5IGNvbmZpZ3VyYXRpb25zLiIsICJ2ZXJzaW9uIjogIjEuMCIsICJ0eXBlIjogImNvcmUiLCAibWV0aG9kIjogIm1hbnVhbCIsICJwYWdlIjogZmFsc2UsICJzZXR0aW5ncyI6IHsiVVNFX1JFVkVSU0VfUFJPWFkiOiB7ImNvbnRleHQiOiAibXVsdGlzaXRlIiwgImRlZmF1bHQiOiAibm8iLCAiaGVscCI6ICJBY3RpdmF0ZSByZXZlcnNlIHByb3h5IG1vZGUuIiwgImlkIjogInVzZS1yZXZlcnNlLXByb3h5IiwgImxhYmVsIjogIlVzZSByZXZlcnNlIHByb3h5IiwgInJlZ2V4IjogIl4oeWVzfG5vKSQiLCAidHlwZSI6ICJjaGVjayIsICJjb250YWluZXJDbGFzcyI6ICJ6LTI2IiwgInBhdHRlcm4iOiAiXih5ZXN8bm8pJCIsICJpbnBUeXBlIjogImNoZWNrYm94IiwgIm5hbWUiOiAiVXNlIHJldmVyc2UgcHJveHkiLCAiY29sdW1ucyI6IHsicGMiOiA0LCAidGFibGV0IjogNiwgIm1vYmlsZSI6IDEyfSwgImRpc2FibGVkIjogdHJ1ZSwgInZhbHVlIjogInllcyIsICJtZXRob2QiOiAic2NoZWR1bGVyIiwgInByZXZfdmFsdWUiOiAieWVzIiwgInBvcG92ZXJzIjogW3siaWNvbk5hbWUiOiAidHJlc3Bhc3MiLCAidGV4dCI6ICJpbnBfcG9wb3Zlcl9tZXRob2RfZGlzYWJsZWQifSwgeyJpY29uTmFtZSI6ICJkaXNrIiwgInRleHQiOiAiaW5wX3BvcG92ZXJfbXVsdGlzaXRlIn0sIHsiaWNvbk5hbWUiOiAiaW5mbyIsICJ0ZXh0IjogIkFjdGl2YXRlIHJldmVyc2UgcHJveHkgbW9kZS4ifV19LCAiUkVWRVJTRV9QUk9YWV9JTlRFUkNFUFRfRVJST1JTIjogeyJjb250ZXh0IjogIm11bHRpc2l0ZSIsICJkZWZhdWx0IjogInllcyIsICJoZWxwIjogIkludGVyY2VwdCBhbmQgcmV3cml0ZSBlcnJvcnMuIiwgImlkIjogInJldmVyc2UtcHJveHktaW50ZXJjZXB0LWVycm9ycyIsICJsYWJlbCI6ICJJbnRlcmNlcHQgZXJyb3JzIiwgInJlZ2V4IjogIl4oeWVzfG5vKSQiLCAidHlwZSI6ICJjaGVjayIsICJjb250YWluZXJDbGFzcyI6ICJ6LTI1IiwgInBhdHRlcm4iOiAiXih5ZXN8bm8pJCIsICJpbnBUeXBlIjogImNoZWNrYm94IiwgIm5hbWUiOiAiSW50ZXJjZXB0IGVycm9ycyIsICJjb2x1bW5zIjogeyJwYyI6IDQsICJ0YWJsZXQiOiA2LCAibW9iaWxlIjogMTJ9LCAiZGlzYWJsZWQiOiBmYWxzZSwgInZhbHVlIjogInllcyIsICJtZXRob2QiOiAiZGVmYXVsdCIsICJwcmV2X3ZhbHVlIjogInllcyIsICJwb3BvdmVycyI6IFt7Imljb25OYW1lIjogImRpc2siLCAidGV4dCI6ICJpbnBfcG9wb3Zlcl9tdWx0aXNpdGUifSwgeyJpY29uTmFtZSI6ICJpbmZvIiwgInRleHQiOiAiSW50ZXJjZXB0IGFuZCByZXdyaXRlIGVycm9ycy4ifV19LCAiUkVWRVJTRV9QUk9YWV9DVVNUT01fSE9TVCI6IHsiY29udGV4dCI6ICJtdWx0aXNpdGUiLCAiZGVmYXVsdCI6ICIiLCAiaGVscCI6ICJPdmVycmlkZSBIb3N0IGhlYWRlciBzZW50IHRvIHVwc3RyZWFtIHNlcnZlci4iLCAiaWQiOiAicmV2ZXJzZS1wcm94eS1jdXN0b20taG9zdCIsICJsYWJlbCI6ICJSZXZlcnNlIHByb3h5IGN1c3RvbSBob3N0IiwgInJlZ2V4IjogIl4uKiQiLCAidHlwZSI6ICJ0ZXh0IiwgImNvbnRhaW5lckNsYXNzIjogInotMjQiLCAicGF0dGVybiI6ICJeLiokIiwgImlucFR5cGUiOiAiaW5wdXQiLCAibmFtZSI6ICJSZXZlcnNlIHByb3h5IGN1c3RvbSBob3N0IiwgImNvbHVtbnMiOiB7InBjIjogNCwgInRhYmxldCI6IDYsICJtb2JpbGUiOiAxMn0sICJkaXNhYmxlZCI6IGZhbHNlLCAidmFsdWUiOiAiIiwgIm1ldGhvZCI6ICJkZWZhdWx0IiwgInByZXZfdmFsdWUiOiAiIiwgInBvcG92ZXJzIjogW3siaWNvbk5hbWUiOiAiZGlzayIsICJ0ZXh0IjogImlucF9wb3BvdmVyX211bHRpc2l0ZSJ9LCB7Imljb25OYW1lIjogImluZm8iLCAidGV4dCI6ICJPdmVycmlkZSBIb3N0IGhlYWRlciBzZW50IHRvIHVwc3RyZWFtIHNlcnZlci4ifV19LCAiVVNFX1BST1hZX0NBQ0hFIjogeyJjb250ZXh0IjogIm11bHRpc2l0ZSIsICJkZWZhdWx0IjogIm5vIiwgImhlbHAiOiAiRW5hYmxlIG9yIGRpc2FibGUgY2FjaGluZyBvZiB0aGUgcHJveGllZCByZXNvdXJjZXMuIiwgImlkIjogInVzZS1wcm94eS1jYWNoZSIsICJsYWJlbCI6ICJSZXZlcnNlIHByb3h5IGNhY2hlIiwgInJlZ2V4IjogIl4oeWVzfG5vKSQiLCAidHlwZSI6ICJjaGVjayIsICJjb250YWluZXJDbGFzcyI6ICJ6LTkiLCAicGF0dGVybiI6ICJeKHllc3xubykkIiwgImlucFR5cGUiOiAiY2hlY2tib3giLCAibmFtZSI6ICJSZXZlcnNlIHByb3h5IGNhY2hlIiwgImNvbHVtbnMiOiB7InBjIjogNCwgInRhYmxldCI6IDYsICJtb2JpbGUiOiAxMn0sICJkaXNhYmxlZCI6IGZhbHNlLCAidmFsdWUiOiAibm8iLCAibWV0aG9kIjogImRlZmF1bHQiLCAicHJldl92YWx1ZSI6ICJubyIsICJwb3BvdmVycyI6IFt7Imljb25OYW1lIjogImRpc2siLCAidGV4dCI6ICJpbnBfcG9wb3Zlcl9tdWx0aXNpdGUifSwgeyJpY29uTmFtZSI6ICJpbmZvIiwgInRleHQiOiAiRW5hYmxlIG9yIGRpc2FibGUgY2FjaGluZyBvZiB0aGUgcHJveGllZCByZXNvdXJjZXMuIn1dfSwgIlBST1hZX0NBQ0hFX1BBVEhfTEVWRUxTIjogeyJjb250ZXh0IjogImdsb2JhbCIsICJkZWZhdWx0IjogIjE6MiIsICJoZWxwIjogIkhpZXJhcmNoeSBsZXZlbHMgb2YgdGhlIGNhY2hlLiIsICJpZCI6ICJwcm94eS1jYWNoZS1wYXRoLWxldmVscyIsICJsYWJlbCI6ICJIaWVyYXJjaHkgbGV2ZWxzIiwgInJlZ2V4IjogIl4oOj9bMTJdKXsxLDN9JCIsICJ0eXBlIjogInRleHQiLCAiY29udGFpbmVyQ2xhc3MiOiAiei04IiwgInBhdHRlcm4iOiAiXig6P1sxMl0pezEsM30kIiwgImlucFR5cGUiOiAiaW5wdXQiLCAibmFtZSI6ICJIaWVyYXJjaHkgbGV2ZWxzIiwgImNvbHVtbnMiOiB7InBjIjogNCwgInRhYmxldCI6IDYsICJtb2JpbGUiOiAxMn0sICJkaXNhYmxlZCI6IGZhbHNlLCAidmFsdWUiOiAiMToyIiwgIm1ldGhvZCI6ICJkZWZhdWx0IiwgInByZXZfdmFsdWUiOiAiMToyIiwgInBvcG92ZXJzIjogW3siaWNvbk5hbWUiOiAiZ2xvYmUiLCAidGV4dCI6ICJpbnBfcG9wb3Zlcl9nbG9iYWwifSwgeyJpY29uTmFtZSI6ICJpbmZvIiwgInRleHQiOiAiSGllcmFyY2h5IGxldmVscyBvZiB0aGUgY2FjaGUuIn1dfSwgIlBST1hZX0NBQ0hFX1BBVEhfWk9ORV9TSVpFIjogeyJjb250ZXh0IjogImdsb2JhbCIsICJkZWZhdWx0IjogIjEwbSIsICJoZWxwIjogIk1heGltdW0gc2l6ZSBvZiBjYWNoZWQgbWV0YWRhdGEgd2hlbiBjYWNoaW5nIHByb3hpZWQgcmVzb3VyY2VzLiIsICJpZCI6ICJwcm94eS1jYWNoZS1wYXRoLXpvbmUtc2l6ZSIsICJsYWJlbCI6ICJSZXZlcnNlIHByb3h5IGNhY2hlIHpvbmUgc2l6ZSIsICJyZWdleCI6ICJeXFxkK1trS21NZ0ddPyQiLCAidHlwZSI6ICJ0ZXh0IiwgImNvbnRhaW5lckNsYXNzIjogInotNyIsICJwYXR0ZXJuIjogIl5cXGQrW2tLbU1nR10/JCIsICJpbnBUeXBlIjogImlucHV0IiwgIm5hbWUiOiAiUmV2ZXJzZSBwcm94eSBjYWNoZSB6b25lIHNpemUiLCAiY29sdW1ucyI6IHsicGMiOiA0LCAidGFibGV0IjogNiwgIm1vYmlsZSI6IDEyfSwgImRpc2FibGVkIjogZmFsc2UsICJ2YWx1ZSI6ICIxMG0iLCAibWV0aG9kIjogImRlZmF1bHQiLCAicHJldl92YWx1ZSI6ICIxMG0iLCAicG9wb3ZlcnMiOiBbeyJpY29uTmFtZSI6ICJnbG9iZSIsICJ0ZXh0IjogImlucF9wb3BvdmVyX2dsb2JhbCJ9LCB7Imljb25OYW1lIjogImluZm8iLCAidGV4dCI6ICJNYXhpbXVtIHNpemUgb2YgY2FjaGVkIG1ldGFkYXRhIHdoZW4gY2FjaGluZyBwcm94aWVkIHJlc291cmNlcy4ifV19LCAiUFJPWFlfQ0FDSEVfUEFUSF9QQVJBTVMiOiB7ImNvbnRleHQiOiAiZ2xvYmFsIiwgImRlZmF1bHQiOiAibWF4X3NpemU9MTAwbSIsICJoZWxwIjogIkFkZGl0aW9uYWwgcGFyYW1ldGVycyB0byBhZGQgdG8gdGhlIHByb3h5X2NhY2hlIGRpcmVjdGl2ZS4iLCAiaWQiOiAicHJveHktY2FjaGUtcGF0aC1wYXJhbXMiLCAibGFiZWwiOiAiUmV2ZXJzZSBwcm94eSBjYWNoZSBwYXJhbXMiLCAicmVnZXgiOiAiXi4qJCIsICJ0eXBlIjogInRleHQiLCAiY29udGFpbmVyQ2xhc3MiOiAiei02IiwgInBhdHRlcm4iOiAiXi4qJCIsICJpbnBUeXBlIjogImlucHV0IiwgIm5hbWUiOiAiUmV2ZXJzZSBwcm94eSBjYWNoZSBwYXJhbXMiLCAiY29sdW1ucyI6IHsicGMiOiA0LCAidGFibGV0IjogNiwgIm1vYmlsZSI6IDEyfSwgImRpc2FibGVkIjogZmFsc2UsICJ2YWx1ZSI6ICJtYXhfc2l6ZT0xMDBtIiwgIm1ldGhvZCI6ICJkZWZhdWx0IiwgInByZXZfdmFsdWUiOiAibWF4X3NpemU9MTAwbSIsICJwb3BvdmVycyI6IFt7Imljb25OYW1lIjogImdsb2JlIiwgInRleHQiOiAiaW5wX3BvcG92ZXJfZ2xvYmFsIn0sIHsiaWNvbk5hbWUiOiAiaW5mbyIsICJ0ZXh0IjogIkFkZGl0aW9uYWwgcGFyYW1ldGVycyB0byBhZGQgdG8gdGhlIHByb3h5X2NhY2hlIGRpcmVjdGl2ZS4ifV19LCAiUFJPWFlfQ0FDSEVfTUVUSE9EUyI6IHsiY29udGV4dCI6ICJtdWx0aXNpdGUiLCAiZGVmYXVsdCI6ICJHRVQgSEVBRCIsICJoZWxwIjogIkhUVFAgbWV0aG9kcyB0aGF0IHNob3VsZCB0cmlnZ2VyIGEgY2FjaGUgb3BlcmF0aW9uLiIsICJpZCI6ICJwcm94eS1jYWNoZS1tZXRob2RzIiwgImxhYmVsIjogIlJldmVyc2UgcHJveHkgY2FjaGUgbWV0aG9kcyIsICJyZWdleCI6ICJeKD8hICkoID8oR0VUfEhFQUR8UE9TVHxQVVR8REVMRVRFfENPTk5FQ1R8T1BUSU9OU3xUUkFDRXxQQVRDSCkoPyEuKlxcMikpKyQiLCAidHlwZSI6ICJ0ZXh0IiwgImNvbnRhaW5lckNsYXNzIjogInotNSIsICJwYXR0ZXJuIjogIl4oPyEgKSggPyhHRVR8SEVBRHxQT1NUfFBVVHxERUxFVEV8Q09OTkVDVHxPUFRJT05TfFRSQUNFfFBBVENIKSg/IS4qXFwyKSkrJCIsICJpbnBUeXBlIjogImlucHV0IiwgIm5hbWUiOiAiUmV2ZXJzZSBwcm94eSBjYWNoZSBtZXRob2RzIiwgImNvbHVtbnMiOiB7InBjIjogNCwgInRhYmxldCI6IDYsICJtb2JpbGUiOiAxMn0sICJkaXNhYmxlZCI6IGZhbHNlLCAidmFsdWUiOiAiR0VUIEhFQUQiLCAibWV0aG9kIjogImRlZmF1bHQiLCAicHJldl92YWx1ZSI6ICJHRVQgSEVBRCIsICJwb3BvdmVycyI6IFt7Imljb25OYW1lIjogImRpc2siLCAidGV4dCI6ICJpbnBfcG9wb3Zlcl9tdWx0aXNpdGUifSwgeyJpY29uTmFtZSI6ICJpbmZvIiwgInRleHQiOiAiSFRUUCBtZXRob2RzIHRoYXQgc2hvdWxkIHRyaWdnZXIgYSBjYWNoZSBvcGVyYXRpb24uIn1dfSwgIlBST1hZX0NBQ0hFX01JTl9VU0VTIjogeyJjb250ZXh0IjogIm11bHRpc2l0ZSIsICJkZWZhdWx0IjogIjIiLCAiaGVscCI6ICJUaGUgbWluaW11bSBudW1iZXIgb2YgcmVxdWVzdHMgYmVmb3JlIGEgcmVzcG9uc2UgaXMgY2FjaGVkLiIsICJpZCI6ICJwcm94eS1jYWNoZS1taW4tdXNlcyIsICJsYWJlbCI6ICJSZXZlcnNlIHByb3h5IGNhY2hlIG1pbmltdW0gdXNlcyIsICJyZWdleCI6ICJeWzEtOV1cXGQqJCIsICJ0eXBlIjogInRleHQiLCAiY29udGFpbmVyQ2xhc3MiOiAiei00IiwgInBhdHRlcm4iOiAiXlsxLTldXFxkKiQiLCAiaW5wVHlwZSI6ICJpbnB1dCIsICJuYW1lIjogIlJldmVyc2UgcHJveHkgY2FjaGUgbWluaW11bSB1c2VzIiwgImNvbHVtbnMiOiB7InBjIjogNCwgInRhYmxldCI6IDYsICJtb2JpbGUiOiAxMn0sICJkaXNhYmxlZCI6IGZhbHNlLCAidmFsdWUiOiAiMiIsICJtZXRob2QiOiAiZGVmYXVsdCIsICJwcmV2X3ZhbHVlIjogIjIiLCAicG9wb3ZlcnMiOiBbeyJpY29uTmFtZSI6ICJkaXNrIiwgInRleHQiOiAiaW5wX3BvcG92ZXJfbXVsdGlzaXRlIn0sIHsiaWNvbk5hbWUiOiAiaW5mbyIsICJ0ZXh0IjogIlRoZSBtaW5pbXVtIG51bWJlciBvZiByZXF1ZXN0cyBiZWZvcmUgYSByZXNwb25zZSBpcyBjYWNoZWQuIn1dfSwgIlBST1hZX0NBQ0hFX0tFWSI6IHsiY29udGV4dCI6ICJtdWx0aXNpdGUiLCAiZGVmYXVsdCI6ICIkc2NoZW1lJGhvc3QkcmVxdWVzdF91cmkiLCAiaGVscCI6ICJUaGUga2V5IHVzZWQgdG8gdW5pcXVlbHkgaWRlbnRpZnkgYSBjYWNoZWQgcmVzcG9uc2UuIiwgImlkIjogInByb3h5LWNhY2hlLWtleSIsICJsYWJlbCI6ICJSZXZlcnNlIHByb3h5IGNhY2hlIGtleSIsICJyZWdleCI6ICJeKD8hICkoID8oXFwkW2Etel9dKykoPyEuKlxcMikpKyQiLCAidHlwZSI6ICJ0ZXh0IiwgImNvbnRhaW5lckNsYXNzIjogInotMyIsICJwYXR0ZXJuIjogIl4oPyEgKSggPyhcXCRbYS16X10rKSg/IS4qXFwyKSkrJCIsICJpbnBUeXBlIjogImlucHV0IiwgIm5hbWUiOiAiUmV2ZXJzZSBwcm94eSBjYWNoZSBrZXkiLCAiY29sdW1ucyI6IHsicGMiOiA0LCAidGFibGV0IjogNiwgIm1vYmlsZSI6IDEyfSwgImRpc2FibGVkIjogZmFsc2UsICJ2YWx1ZSI6ICIkc2NoZW1lJGhvc3QkcmVxdWVzdF91cmkiLCAibWV0aG9kIjogImRlZmF1bHQiLCAicHJldl92YWx1ZSI6ICIkc2NoZW1lJGhvc3QkcmVxdWVzdF91cmkiLCAicG9wb3ZlcnMiOiBbeyJpY29uTmFtZSI6ICJkaXNrIiwgInRleHQiOiAiaW5wX3BvcG92ZXJfbXVsdGlzaXRlIn0sIHsiaWNvbk5hbWUiOiAiaW5mbyIsICJ0ZXh0IjogIlRoZSBrZXkgdXNlZCB0byB1bmlxdWVseSBpZGVudGlmeSBhIGNhY2hlZCByZXNwb25zZS4ifV19LCAiUFJPWFlfQ0FDSEVfVkFMSUQiOiB7ImNvbnRleHQiOiAibXVsdGlzaXRlIiwgImRlZmF1bHQiOiAiMjAwPTI0aCAzMDE9MWggMzAyPTI0aCIsICJoZWxwIjogIkRlZmluZSB0aGUgY2FjaGluZyB0aW1lIGRlcGVuZGluZyBvbiB0aGUgSFRUUCBzdGF0dXMgY29kZSAobGlzdCBvZiBzdGF0dXM9dGltZSksIHNlcGFyYXRlZCB3aXRoIHNwYWNlcy4iLCAiaWQiOiAicHJveHktY2FjaGUtdmFsaWQiLCAibGFiZWwiOiAiUmV2ZXJzZSBwcm94eSBjYWNoZSB2YWxpZCIsICJyZWdleCI6ICJeKD8hICkoID8oWzEtNV1cXGR7Mn0pKD8hLipcXDI9KT1cXGQrKG1zP3xbc2hkd015XSkpKiQiLCAidHlwZSI6ICJ0ZXh0IiwgImNvbnRhaW5lckNsYXNzIjogInotMiIsICJwYXR0ZXJuIjogIl4oPyEgKSggPyhbMS01XVxcZHsyfSkoPyEuKlxcMj0pPVxcZCsobXM/fFtzaGR3TXldKSkqJCIsICJpbnBUeXBlIjogImlucHV0IiwgIm5hbWUiOiAiUmV2ZXJzZSBwcm94eSBjYWNoZSB2YWxpZCIsICJjb2x1bW5zIjogeyJwYyI6IDQsICJ0YWJsZXQiOiA2LCAibW9iaWxlIjogMTJ9LCAiZGlzYWJsZWQiOiBmYWxzZSwgInZhbHVlIjogIjIwMD0yNGggMzAxPTFoIDMwMj0yNGgiLCAibWV0aG9kIjogImRlZmF1bHQiLCAicHJldl92YWx1ZSI6ICIyMDA9MjRoIDMwMT0xaCAzMDI9MjRoIiwgInBvcG92ZXJzIjogW3siaWNvbk5hbWUiOiAiZGlzayIsICJ0ZXh0IjogImlucF9wb3BvdmVyX211bHRpc2l0ZSJ9LCB7Imljb25OYW1lIjogImluZm8iLCAidGV4dCI6ICJEZWZpbmUgdGhlIGNhY2hpbmcgdGltZSBkZXBlbmRpbmcgb24gdGhlIEhUVFAgc3RhdHVzIGNvZGUgKGxpc3Qgb2Ygc3RhdHVzPXRpbWUpLCBzZXBhcmF0ZWQgd2l0aCBzcGFjZXMuIn1dfSwgIlBST1hZX05PX0NBQ0hFIjogeyJjb250ZXh0IjogIm11bHRpc2l0ZSIsICJkZWZhdWx0IjogIiRodHRwX3ByYWdtYSAkaHR0cF9hdXRob3JpemF0aW9uIiwgImhlbHAiOiAiQ29uZGl0aW9ucyB0byBkaXNhYmxlIGNhY2hpbmcgb2YgcmVzcG9uc2VzLiIsICJpZCI6ICJwcm94eS1uby1jYWNoZSIsICJsYWJlbCI6ICJSZXZlcnNlIHByb3h5IG5vIGNhY2hlIiwgInJlZ2V4IjogIl4uKiQiLCAidHlwZSI6ICJ0ZXh0IiwgImNvbnRhaW5lckNsYXNzIjogInotMSIsICJwYXR0ZXJuIjogIl4uKiQiLCAiaW5wVHlwZSI6ICJpbnB1dCIsICJuYW1lIjogIlJldmVyc2UgcHJveHkgbm8gY2FjaGUiLCAiY29sdW1ucyI6IHsicGMiOiA0LCAidGFibGV0IjogNiwgIm1vYmlsZSI6IDEyfSwgImRpc2FibGVkIjogZmFsc2UsICJ2YWx1ZSI6ICIkaHR0cF9wcmFnbWEgJGh0dHBfYXV0aG9yaXphdGlvbiIsICJtZXRob2QiOiAiZGVmYXVsdCIsICJwcmV2X3ZhbHVlIjogIiRodHRwX3ByYWdtYSAkaHR0cF9hdXRob3JpemF0aW9uIiwgInBvcG92ZXJzIjogW3siaWNvbk5hbWUiOiAiZGlzayIsICJ0ZXh0IjogImlucF9wb3BvdmVyX211bHRpc2l0ZSJ9LCB7Imljb25OYW1lIjogImluZm8iLCAidGV4dCI6ICJDb25kaXRpb25zIHRvIGRpc2FibGUgY2FjaGluZyBvZiByZXNwb25zZXMuIn1dfSwgIlBST1hZX0NBQ0hFX0JZUEFTUyI6IHsiY29udGV4dCI6ICJtdWx0aXNpdGUiLCAiZGVmYXVsdCI6ICIwIiwgImhlbHAiOiAiQ29uZGl0aW9ucyB0byBieXBhc3MgY2FjaGluZyBvZiByZXNwb25zZXMuIiwgImlkIjogInByb3h5LWNhY2hlLWJ5cGFzcyIsICJsYWJlbCI6ICJSZXZlcnNlIHByb3h5IGJ5cGFzcyIsICJyZWdleCI6ICJeLiokIiwgInR5cGUiOiAidGV4dCIsICJjb250YWluZXJDbGFzcyI6ICJ6LTAiLCAicGF0dGVybiI6ICJeLiokIiwgImlucFR5cGUiOiAiaW5wdXQiLCAibmFtZSI6ICJSZXZlcnNlIHByb3h5IGJ5cGFzcyIsICJjb2x1bW5zIjogeyJwYyI6IDQsICJ0YWJsZXQiOiA2LCAibW9iaWxlIjogMTJ9LCAiZGlzYWJsZWQiOiBmYWxzZSwgInZhbHVlIjogIjAiLCAibWV0aG9kIjogImRlZmF1bHQiLCAicHJldl92YWx1ZSI6ICIwIiwgInBvcG92ZXJzIjogW3siaWNvbk5hbWUiOiAiZGlzayIsICJ0ZXh0IjogImlucF9wb3BvdmVyX211bHRpc2l0ZSJ9LCB7Imljb25OYW1lIjogImluZm8iLCAidGV4dCI6ICJDb25kaXRpb25zIHRvIGJ5cGFzcyBjYWNoaW5nIG9mIHJlc3BvbnNlcy4ifV19fSwgImNoZWNrc3VtIjogbnVsbCwgIm11bHRpcGxlc19zY2hlbWEiOiB7InJldmVyc2UtcHJveHkiOiB7IlJFVkVSU0VfUFJPWFlfSE9TVCI6IHsiY29udGV4dCI6ICJtdWx0aXNpdGUiLCAiZGVmYXVsdCI6ICIiLCAiaGVscCI6ICJGdWxsIFVSTCBvZiB0aGUgcHJveGllZCByZXNvdXJjZSAocHJveHlfcGFzcykuIiwgImlkIjogInJldmVyc2UtcHJveHktaG9zdCIsICJsYWJlbCI6ICJSZXZlcnNlIHByb3h5IGhvc3QiLCAicmVnZXgiOiAiXi4qJCIsICJ0eXBlIjogInRleHQiLCAibXVsdGlwbGUiOiAicmV2ZXJzZS1wcm94eSIsICJwYXR0ZXJuIjogIl4uKiQiLCAiaW5wVHlwZSI6ICJpbnB1dCIsICJuYW1lIjogIlJldmVyc2UgcHJveHkgaG9zdCIsICJjb2x1bW5zIjogeyJwYyI6IDQsICJ0YWJsZXQiOiA2LCAibW9iaWxlIjogMTJ9LCAiZGlzYWJsZWQiOiB0cnVlLCAidmFsdWUiOiAiIiwgInByZXZfdmFsdWUiOiAiIiwgInBvcG92ZXJzIjogW3siaWNvbk5hbWUiOiAidHJlc3Bhc3MiLCAidGV4dCI6ICJpbnBfcG9wb3Zlcl9tZXRob2RfZGlzYWJsZWQifSwgeyJpY29uTmFtZSI6ICJkaXNrIiwgInRleHQiOiAiaW5wX3BvcG92ZXJfbXVsdGlzaXRlIn0sIHsiaWNvbk5hbWUiOiAiaW5mbyIsICJ0ZXh0IjogIkZ1bGwgVVJMIG9mIHRoZSBwcm94aWVkIHJlc291cmNlIChwcm94eV9wYXNzKS4ifV0sICJjb250YWluZXJDbGFzcyI6ICJ6LTI2In0sICJSRVZFUlNFX1BST1hZX1VSTCI6IHsiY29udGV4dCI6ICJtdWx0aXNpdGUiLCAiZGVmYXVsdCI6ICIvIiwgImhlbHAiOiAiTG9jYXRpb24gVVJMIHRoYXQgd2lsbCBiZSBwcm94aWVkLiIsICJpZCI6ICJyZXZlcnNlLXByb3h5LXVybCIsICJsYWJlbCI6ICJSZXZlcnNlIHByb3h5IHVybCIsICJyZWdleCI6ICJeLiokIiwgInR5cGUiOiAidGV4dCIsICJtdWx0aXBsZSI6ICJyZXZlcnNlLXByb3h5IiwgInBhdHRlcm4iOiAiXi4qJCIsICJpbnBUeXBlIjogImlucHV0IiwgIm5hbWUiOiAiUmV2ZXJzZSBwcm94eSB1cmwiLCAiY29sdW1ucyI6IHsicGMiOiA0LCAidGFibGV0IjogNiwgIm1vYmlsZSI6IDEyfSwgImRpc2FibGVkIjogZmFsc2UsICJ2YWx1ZSI6ICIvIiwgInByZXZfdmFsdWUiOiAiLyIsICJwb3BvdmVycyI6IFt7Imljb25OYW1lIjogImRpc2siLCAidGV4dCI6ICJpbnBfcG9wb3Zlcl9tdWx0aXNpdGUifSwgeyJpY29uTmFtZSI6ICJpbmZvIiwgInRleHQiOiAiTG9jYXRpb24gVVJMIHRoYXQgd2lsbCBiZSBwcm94aWVkLiJ9XSwgImNvbnRhaW5lckNsYXNzIjogInotMjUifSwgIlJFVkVSU0VfUFJPWFlfV1MiOiB7ImNvbnRleHQiOiAibXVsdGlzaXRlIiwgImRlZmF1bHQiOiAibm8iLCAiaGVscCI6ICJFbmFibGUgd2Vic29ja2V0IG9uIHRoZSBwcm94aWVkIHJlc291cmNlLiIsICJpZCI6ICJyZXZlcnNlLXByb3h5LXdzIiwgImxhYmVsIjogIlJldmVyc2UgcHJveHkgV1MiLCAicmVnZXgiOiAiXih5ZXN8bm8pJCIsICJ0eXBlIjogImNoZWNrIiwgIm11bHRpcGxlIjogInJldmVyc2UtcHJveHkiLCAicGF0dGVybiI6ICJeKHllc3xubykkIiwgImlucFR5cGUiOiAiY2hlY2tib3giLCAibmFtZSI6ICJSZXZlcnNlIHByb3h5IFdTIiwgImNvbHVtbnMiOiB7InBjIjogNCwgInRhYmxldCI6IDYsICJtb2JpbGUiOiAxMn0sICJkaXNhYmxlZCI6IGZhbHNlLCAidmFsdWUiOiAibm8iLCAicHJldl92YWx1ZSI6ICJubyIsICJwb3BvdmVycyI6IFt7Imljb25OYW1lIjogImRpc2siLCAidGV4dCI6ICJpbnBfcG9wb3Zlcl9tdWx0aXNpdGUifSwgeyJpY29uTmFtZSI6ICJpbmZvIiwgInRleHQiOiAiRW5hYmxlIHdlYnNvY2tldCBvbiB0aGUgcHJveGllZCByZXNvdXJjZS4ifV0sICJjb250YWluZXJDbGFzcyI6ICJ6LTI0In0sICJSRVZFUlNFX1BST1hZX0hFQURFUlMiOiB7ImNvbnRleHQiOiAibXVsdGlzaXRlIiwgImRlZmF1bHQiOiAiIiwgImhlbHAiOiAiTGlzdCBvZiBIVFRQIGhlYWRlcnMgdG8gc2VuZCB0byBwcm94aWVkIHJlc291cmNlIHNlcGFyYXRlZCB3aXRoIHNlbWljb2xvbnMgKHZhbHVlcyBmb3IgcHJveHlfc2V0X2hlYWRlciBkaXJlY3RpdmUpLiIsICJpZCI6ICJyZXZlcnNlLXByb3h5LWhlYWRlcnMiLCAibGFiZWwiOiAiUmV2ZXJzZSBwcm94eSBoZWFkZXJzIiwgInJlZ2V4IjogIl4oPyFbOyBdKSg7PyA/KFtcXHdcXC1dKykoPyEuKlxcMiApIFteO10rKSokIiwgInR5cGUiOiAidGV4dCIsICJtdWx0aXBsZSI6ICJyZXZlcnNlLXByb3h5IiwgInBhdHRlcm4iOiAiXig/IVs7IF0pKDs/ID8oW1xcd1xcLV0rKSg/IS4qXFwyICkgW147XSspKiQiLCAiaW5wVHlwZSI6ICJpbnB1dCIsICJuYW1lIjogIlJldmVyc2UgcHJveHkgaGVhZGVycyIsICJjb2x1bW5zIjogeyJwYyI6IDQsICJ0YWJsZXQiOiA2LCAibW9iaWxlIjogMTJ9LCAiZGlzYWJsZWQiOiBmYWxzZSwgInZhbHVlIjogIiIsICJwcmV2X3ZhbHVlIjogIiIsICJwb3BvdmVycyI6IFt7Imljb25OYW1lIjogImRpc2siLCAidGV4dCI6ICJpbnBfcG9wb3Zlcl9tdWx0aXNpdGUifSwgeyJpY29uTmFtZSI6ICJpbmZvIiwgInRleHQiOiAiTGlzdCBvZiBIVFRQIGhlYWRlcnMgdG8gc2VuZCB0byBwcm94aWVkIHJlc291cmNlIHNlcGFyYXRlZCB3aXRoIHNlbWljb2xvbnMgKHZhbHVlcyBmb3IgcHJveHlfc2V0X2hlYWRlciBkaXJlY3RpdmUpLiJ9XSwgImNvbnRhaW5lckNsYXNzIjogInotMjMifSwgIlJFVkVSU0VfUFJPWFlfSEVBREVSU19DTElFTlQiOiB7ImNvbnRleHQiOiAibXVsdGlzaXRlIiwgImRlZmF1bHQiOiAiIiwgImhlbHAiOiAiTGlzdCBvZiBIVFRQIGhlYWRlcnMgdG8gc2VuZCB0byBjbGllbnQgc2VwYXJhdGVkIHdpdGggc2VtaWNvbG9ucyAodmFsdWVzIGZvciBhZGRfaGVhZGVyIGRpcmVjdGl2ZSkuIiwgImlkIjogInJldmVyc2UtcHJveHktaGVhZGVycy1jbGllbnQiLCAibGFiZWwiOiAiUmV2ZXJzZSBwcm94eSBoZWFkZXJzLWNsaWVudCIsICJyZWdleCI6ICJeKD8hWzsgXSkoOz8gPyhbXFx3XFwtXSspKD8hLipcXDIgKSBbXjtdKykqJCIsICJ0eXBlIjogInRleHQiLCAibXVsdGlwbGUiOiAicmV2ZXJzZS1wcm94eSIsICJwYXR0ZXJuIjogIl4oPyFbOyBdKSg7PyA/KFtcXHdcXC1dKykoPyEuKlxcMiApIFteO10rKSokIiwgImlucFR5cGUiOiAiaW5wdXQiLCAibmFtZSI6ICJSZXZlcnNlIHByb3h5IGhlYWRlcnMtY2xpZW50IiwgImNvbHVtbnMiOiB7InBjIjogNCwgInRhYmxldCI6IDYsICJtb2JpbGUiOiAxMn0sICJkaXNhYmxlZCI6IGZhbHNlLCAidmFsdWUiOiAiIiwgInByZXZfdmFsdWUiOiAiIiwgInBvcG92ZXJzIjogW3siaWNvbk5hbWUiOiAiZGlzayIsICJ0ZXh0IjogImlucF9wb3BvdmVyX211bHRpc2l0ZSJ9LCB7Imljb25OYW1lIjogImluZm8iLCAidGV4dCI6ICJMaXN0IG9mIEhUVFAgaGVhZGVycyB0byBzZW5kIHRvIGNsaWVudCBzZXBhcmF0ZWQgd2l0aCBzZW1pY29sb25zICh2YWx1ZXMgZm9yIGFkZF9oZWFkZXIgZGlyZWN0aXZlKS4ifV0sICJjb250YWluZXJDbGFzcyI6ICJ6LTIyIn0sICJSRVZFUlNFX1BST1hZX0JVRkZFUklORyI6IHsiY29udGV4dCI6ICJtdWx0aXNpdGUiLCAiZGVmYXVsdCI6ICJ5ZXMiLCAiaGVscCI6ICJFbmFibGUgb3IgZGlzYWJsZSBidWZmZXJpbmcgb2YgcmVzcG9uc2VzIGZyb20gcHJveGllZCByZXNvdXJjZS4iLCAiaWQiOiAicmV2ZXJzZS1wcm94eS1idWZmZXJpbmciLCAibGFiZWwiOiAiUmV2ZXJzZSBwcm94eSBidWZmZXJpbmciLCAicmVnZXgiOiAiXih5ZXN8bm8pJCIsICJ0eXBlIjogImNoZWNrIiwgIm11bHRpcGxlIjogInJldmVyc2UtcHJveHkiLCAicGF0dGVybiI6ICJeKHllc3xubykkIiwgImlucFR5cGUiOiAiY2hlY2tib3giLCAibmFtZSI6ICJSZXZlcnNlIHByb3h5IGJ1ZmZlcmluZyIsICJjb2x1bW5zIjogeyJwYyI6IDQsICJ0YWJsZXQiOiA2LCAibW9iaWxlIjogMTJ9LCAiZGlzYWJsZWQiOiBmYWxzZSwgInZhbHVlIjogInllcyIsICJwcmV2X3ZhbHVlIjogInllcyIsICJwb3BvdmVycyI6IFt7Imljb25OYW1lIjogImRpc2siLCAidGV4dCI6ICJpbnBfcG9wb3Zlcl9tdWx0aXNpdGUifSwgeyJpY29uTmFtZSI6ICJpbmZvIiwgInRleHQiOiAiRW5hYmxlIG9yIGRpc2FibGUgYnVmZmVyaW5nIG9mIHJlc3BvbnNlcyBmcm9tIHByb3hpZWQgcmVzb3VyY2UuIn1dLCAiY29udGFpbmVyQ2xhc3MiOiAiei0yMSJ9LCAiUkVWRVJTRV9QUk9YWV9LRUVQQUxJVkUiOiB7ImNvbnRleHQiOiAibXVsdGlzaXRlIiwgImRlZmF1bHQiOiAibm8iLCAiaGVscCI6ICJFbmFibGUgb3IgZGlzYWJsZSBrZWVwYWxpdmUgY29ubmVjdGlvbnMgd2l0aCB0aGUgcHJveGllZCByZXNvdXJjZS4iLCAiaWQiOiAicmV2ZXJzZS1wcm94eS1rZWVwYWxpdmUiLCAibGFiZWwiOiAiUmV2ZXJzZSBwcm94eSBrZWVwYWxpdmUiLCAicmVnZXgiOiAiXih5ZXN8bm8pJCIsICJ0eXBlIjogImNoZWNrIiwgIm11bHRpcGxlIjogInJldmVyc2UtcHJveHkiLCAicGF0dGVybiI6ICJeKHllc3xubykkIiwgImlucFR5cGUiOiAiY2hlY2tib3giLCAibmFtZSI6ICJSZXZlcnNlIHByb3h5IGtlZXBhbGl2ZSIsICJjb2x1bW5zIjogeyJwYyI6IDQsICJ0YWJsZXQiOiA2LCAibW9iaWxlIjogMTJ9LCAiZGlzYWJsZWQiOiBmYWxzZSwgInZhbHVlIjogIm5vIiwgInByZXZfdmFsdWUiOiAibm8iLCAicG9wb3ZlcnMiOiBbeyJpY29uTmFtZSI6ICJkaXNrIiwgInRleHQiOiAiaW5wX3BvcG92ZXJfbXVsdGlzaXRlIn0sIHsiaWNvbk5hbWUiOiAiaW5mbyIsICJ0ZXh0IjogIkVuYWJsZSBvciBkaXNhYmxlIGtlZXBhbGl2ZSBjb25uZWN0aW9ucyB3aXRoIHRoZSBwcm94aWVkIHJlc291cmNlLiJ9XSwgImNvbnRhaW5lckNsYXNzIjogInotMjAifSwgIlJFVkVSU0VfUFJPWFlfQVVUSF9SRVFVRVNUIjogeyJjb250ZXh0IjogIm11bHRpc2l0ZSIsICJkZWZhdWx0IjogIiIsICJoZWxwIjogIkVuYWJsZSBhdXRoZW50aWNhdGlvbiB1c2luZyBhbiBleHRlcm5hbCBwcm92aWRlciAodmFsdWUgb2YgYXV0aF9yZXF1ZXN0IGRpcmVjdGl2ZSkuIiwgImlkIjogInJldmVyc2UtcHJveHktYXV0aC1yZXF1ZXN0IiwgImxhYmVsIjogIlJldmVyc2UgcHJveHkgYXV0aCByZXF1ZXN0IiwgInJlZ2V4IjogIl4oXFwvW1xcd1xcXS5+OlxcLz8jXFxbQCEkXFwmJ1xcKFxcKSorLDs9XFwtXSp8b2ZmKT8kIiwgInR5cGUiOiAidGV4dCIsICJtdWx0aXBsZSI6ICJyZXZlcnNlLXByb3h5IiwgInBhdHRlcm4iOiAiXihcXC9bXFx3XFxdLn46XFwvPyNcXFtAISRcXCYnXFwoXFwpKissOz1cXC1dKnxvZmYpPyQiLCAiaW5wVHlwZSI6ICJpbnB1dCIsICJuYW1lIjogIlJldmVyc2UgcHJveHkgYXV0aCByZXF1ZXN0IiwgImNvbHVtbnMiOiB7InBjIjogNCwgInRhYmxldCI6IDYsICJtb2JpbGUiOiAxMn0sICJkaXNhYmxlZCI6IGZhbHNlLCAidmFsdWUiOiAiIiwgInByZXZfdmFsdWUiOiAiIiwgInBvcG92ZXJzIjogW3siaWNvbk5hbWUiOiAiZGlzayIsICJ0ZXh0IjogImlucF9wb3BvdmVyX211bHRpc2l0ZSJ9LCB7Imljb25OYW1lIjogImluZm8iLCAidGV4dCI6ICJFbmFibGUgYXV0aGVudGljYXRpb24gdXNpbmcgYW4gZXh0ZXJuYWwgcHJvdmlkZXIgKHZhbHVlIG9mIGF1dGhfcmVxdWVzdCBkaXJlY3RpdmUpLiJ9XSwgImNvbnRhaW5lckNsYXNzIjogInotMTkifSwgIlJFVkVSU0VfUFJPWFlfQVVUSF9SRVFVRVNUX1NJR05JTl9VUkwiOiB7ImNvbnRleHQiOiAibXVsdGlzaXRlIiwgImRlZmF1bHQiOiAiIiwgImhlbHAiOiAiUmVkaXJlY3QgY2xpZW50cyB0byBzaWduLWluIFVSTCB3aGVuIHVzaW5nIFJFVkVSU0VfUFJPWFlfQVVUSF9SRVFVRVNUICh1c2VkIHdoZW4gYXV0aF9yZXF1ZXN0IGNhbGwgcmV0dXJuZWQgNDAxKS4iLCAiaWQiOiAicmV2ZXJzZS1wcm94eS1hdXRoLXJlcXVlc3Qtc2lnbmluLXVybCIsICJsYWJlbCI6ICJBdXRoIHJlcXVlc3Qgc2lnbmluIFVSTCIsICJyZWdleCI6ICJeKGh0dHBzPzpcXC9cXC9bXFwtXFx3QDolLit+Iz1dK1tcXC1cXHdcXChcXCkhQDolKy5+Iz8mXFwvPSRdKik/JCIsICJ0eXBlIjogInRleHQiLCAibXVsdGlwbGUiOiAicmV2ZXJzZS1wcm94eSIsICJwYXR0ZXJuIjogIl4oaHR0cHM/OlxcL1xcL1tcXC1cXHdAOiUuK34jPV0rW1xcLVxcd1xcKFxcKSFAOiUrLn4jPyZcXC89JF0qKT8kIiwgImlucFR5cGUiOiAiaW5wdXQiLCAibmFtZSI6ICJBdXRoIHJlcXVlc3Qgc2lnbmluIFVSTCIsICJjb2x1bW5zIjogeyJwYyI6IDQsICJ0YWJsZXQiOiA2LCAibW9iaWxlIjogMTJ9LCAiZGlzYWJsZWQiOiBmYWxzZSwgInZhbHVlIjogIiIsICJwcmV2X3ZhbHVlIjogIiIsICJwb3BvdmVycyI6IFt7Imljb25OYW1lIjogImRpc2siLCAidGV4dCI6ICJpbnBfcG9wb3Zlcl9tdWx0aXNpdGUifSwgeyJpY29uTmFtZSI6ICJpbmZvIiwgInRleHQiOiAiUmVkaXJlY3QgY2xpZW50cyB0byBzaWduLWluIFVSTCB3aGVuIHVzaW5nIFJFVkVSU0VfUFJPWFlfQVVUSF9SRVFVRVNUICh1c2VkIHdoZW4gYXV0aF9yZXF1ZXN0IGNhbGwgcmV0dXJuZWQgNDAxKS4ifV0sICJjb250YWluZXJDbGFzcyI6ICJ6LTE4In0sICJSRVZFUlNFX1BST1hZX0FVVEhfUkVRVUVTVF9TRVQiOiB7ImNvbnRleHQiOiAibXVsdGlzaXRlIiwgImRlZmF1bHQiOiAiIiwgImhlbHAiOiAiTGlzdCBvZiB2YXJpYWJsZXMgdG8gc2V0IGZyb20gdGhlIGF1dGhlbnRpY2F0aW9uIHByb3ZpZGVyLCBzZXBhcmF0ZWQgd2l0aCBzZW1pY29sb25zICh2YWx1ZXMgb2YgYXV0aF9yZXF1ZXN0X3NldCBkaXJlY3RpdmVzKS4iLCAiaWQiOiAicmV2ZXJzZS1wcm94eS1hdXRoLXJlcXVlc3Qtc2V0IiwgImxhYmVsIjogIlJldmVyc2UgcHJveHkgYXV0aCByZXF1ZXN0IHNldCIsICJyZWdleCI6ICJeKD8hIDspKDs/ID8oXFwkW2Etel9cXC1dKykoPyEuKlxcMiApIFteO10rKSokIiwgInR5cGUiOiAidGV4dCIsICJtdWx0aXBsZSI6ICJyZXZlcnNlLXByb3h5IiwgInBhdHRlcm4iOiAiXig/ISA7KSg7PyA/KFxcJFthLXpfXFwtXSspKD8hLipcXDIgKSBbXjtdKykqJCIsICJpbnBUeXBlIjogImlucHV0IiwgIm5hbWUiOiAiUmV2ZXJzZSBwcm94eSBhdXRoIHJlcXVlc3Qgc2V0IiwgImNvbHVtbnMiOiB7InBjIjogNCwgInRhYmxldCI6IDYsICJtb2JpbGUiOiAxMn0sICJkaXNhYmxlZCI6IGZhbHNlLCAidmFsdWUiOiAiIiwgInByZXZfdmFsdWUiOiAiIiwgInBvcG92ZXJzIjogW3siaWNvbk5hbWUiOiAiZGlzayIsICJ0ZXh0IjogImlucF9wb3BvdmVyX211bHRpc2l0ZSJ9LCB7Imljb25OYW1lIjogImluZm8iLCAidGV4dCI6ICJMaXN0IG9mIHZhcmlhYmxlcyB0byBzZXQgZnJvbSB0aGUgYXV0aGVudGljYXRpb24gcHJvdmlkZXIsIHNlcGFyYXRlZCB3aXRoIHNlbWljb2xvbnMgKHZhbHVlcyBvZiBhdXRoX3JlcXVlc3Rfc2V0IGRpcmVjdGl2ZXMpLiJ9XSwgImNvbnRhaW5lckNsYXNzIjogInotMTcifSwgIlJFVkVSU0VfUFJPWFlfQ09OTkVDVF9USU1FT1VUIjogeyJjb250ZXh0IjogIm11bHRpc2l0ZSIsICJkZWZhdWx0IjogIjYwcyIsICJoZWxwIjogIlRpbWVvdXQgd2hlbiBjb25uZWN0aW5nIHRvIHRoZSBwcm94aWVkIHJlc291cmNlLiIsICJpZCI6ICJyZXZlcnNlLXByb3h5LWNvbm5lY3QtdGltZW91dCIsICJsYWJlbCI6ICJSZXZlcnNlIHByb3h5IGNvbm5lY3QgdGltZW91dCIsICJyZWdleCI6ICJeXFxkKyhtcz98W3NoZHdNeV0pJCIsICJ0eXBlIjogInRleHQiLCAibXVsdGlwbGUiOiAicmV2ZXJzZS1wcm94eSIsICJwYXR0ZXJuIjogIl5cXGQrKG1zP3xbc2hkd015XSkkIiwgImlucFR5cGUiOiAiaW5wdXQiLCAibmFtZSI6ICJSZXZlcnNlIHByb3h5IGNvbm5lY3QgdGltZW91dCIsICJjb2x1bW5zIjogeyJwYyI6IDQsICJ0YWJsZXQiOiA2LCAibW9iaWxlIjogMTJ9LCAiZGlzYWJsZWQiOiBmYWxzZSwgInZhbHVlIjogIjYwcyIsICJwcmV2X3ZhbHVlIjogIjYwcyIsICJwb3BvdmVycyI6IFt7Imljb25OYW1lIjogImRpc2siLCAidGV4dCI6ICJpbnBfcG9wb3Zlcl9tdWx0aXNpdGUifSwgeyJpY29uTmFtZSI6ICJpbmZvIiwgInRleHQiOiAiVGltZW91dCB3aGVuIGNvbm5lY3RpbmcgdG8gdGhlIHByb3hpZWQgcmVzb3VyY2UuIn1dLCAiY29udGFpbmVyQ2xhc3MiOiAiei0xNiJ9LCAiUkVWRVJTRV9QUk9YWV9SRUFEX1RJTUVPVVQiOiB7ImNvbnRleHQiOiAibXVsdGlzaXRlIiwgImRlZmF1bHQiOiAiNjBzIiwgImhlbHAiOiAiVGltZW91dCB3aGVuIHJlYWRpbmcgZnJvbSB0aGUgcHJveGllZCByZXNvdXJjZS4iLCAiaWQiOiAicmV2ZXJzZS1wcm94eS1yZWFkLXRpbWVvdXQiLCAibGFiZWwiOiAiUmV2ZXJzZSBwcm94eSByZWFkIHRpbWVvdXQiLCAicmVnZXgiOiAiXlxcZCsobXM/fFtzaGR3TXldKSQiLCAidHlwZSI6ICJ0ZXh0IiwgIm11bHRpcGxlIjogInJldmVyc2UtcHJveHkiLCAicGF0dGVybiI6ICJeXFxkKyhtcz98W3NoZHdNeV0pJCIsICJpbnBUeXBlIjogImlucHV0IiwgIm5hbWUiOiAiUmV2ZXJzZSBwcm94eSByZWFkIHRpbWVvdXQiLCAiY29sdW1ucyI6IHsicGMiOiA0LCAidGFibGV0IjogNiwgIm1vYmlsZSI6IDEyfSwgImRpc2FibGVkIjogZmFsc2UsICJ2YWx1ZSI6ICI2MHMiLCAicHJldl92YWx1ZSI6ICI2MHMiLCAicG9wb3ZlcnMiOiBbeyJpY29uTmFtZSI6ICJkaXNrIiwgInRleHQiOiAiaW5wX3BvcG92ZXJfbXVsdGlzaXRlIn0sIHsiaWNvbk5hbWUiOiAiaW5mbyIsICJ0ZXh0IjogIlRpbWVvdXQgd2hlbiByZWFkaW5nIGZyb20gdGhlIHByb3hpZWQgcmVzb3VyY2UuIn1dLCAiY29udGFpbmVyQ2xhc3MiOiAiei0xNSJ9LCAiUkVWRVJTRV9QUk9YWV9TRU5EX1RJTUVPVVQiOiB7ImNvbnRleHQiOiAibXVsdGlzaXRlIiwgImRlZmF1bHQiOiAiNjBzIiwgImhlbHAiOiAiVGltZW91dCB3aGVuIHNlbmRpbmcgdG8gdGhlIHByb3hpZWQgcmVzb3VyY2UuIiwgImlkIjogInJldmVyc2UtcHJveHktc2VuZC10aW1lb3V0IiwgImxhYmVsIjogIlJldmVyc2UgcHJveHkgc2VuZCB0aW1lb3V0IiwgInJlZ2V4IjogIl5cXGQrKG1zP3xbc2hkd015XSkkIiwgInR5cGUiOiAidGV4dCIsICJtdWx0aXBsZSI6ICJyZXZlcnNlLXByb3h5IiwgInBhdHRlcm4iOiAiXlxcZCsobXM/fFtzaGR3TXldKSQiLCAiaW5wVHlwZSI6ICJpbnB1dCIsICJuYW1lIjogIlJldmVyc2UgcHJveHkgc2VuZCB0aW1lb3V0IiwgImNvbHVtbnMiOiB7InBjIjogNCwgInRhYmxldCI6IDYsICJtb2JpbGUiOiAxMn0sICJkaXNhYmxlZCI6IGZhbHNlLCAidmFsdWUiOiAiNjBzIiwgInByZXZfdmFsdWUiOiAiNjBzIiwgInBvcG92ZXJzIjogW3siaWNvbk5hbWUiOiAiZGlzayIsICJ0ZXh0IjogImlucF9wb3BvdmVyX211bHRpc2l0ZSJ9LCB7Imljb25OYW1lIjogImluZm8iLCAidGV4dCI6ICJUaW1lb3V0IHdoZW4gc2VuZGluZyB0byB0aGUgcHJveGllZCByZXNvdXJjZS4ifV0sICJjb250YWluZXJDbGFzcyI6ICJ6LTE0In0sICJSRVZFUlNFX1BST1hZX0lOQ0xVREVTIjogeyJjb250ZXh0IjogIm11bHRpc2l0ZSIsICJkZWZhdWx0IjogIiIsICJoZWxwIjogIkFkZGl0aW9uYWwgY29uZmlndXJhdGlvbiB0byBpbmNsdWRlIGluIHRoZSBsb2NhdGlvbiBibG9jaywgc2VwYXJhdGVkIHdpdGggc3BhY2VzLiIsICJpZCI6ICJyZXZlcnNlLXByb3h5LWluY2x1ZGVzIiwgImxhYmVsIjogIlJldmVyc2UgcHJveHkgaW5jbHVkZXMiLCAicmVnZXgiOiAiXig/ISApKCA/KFxcdyspKD8hLipcXGJcXDJcXGIpKSokIiwgInR5cGUiOiAidGV4dCIsICJtdWx0aXBsZSI6ICJyZXZlcnNlLXByb3h5IiwgInBhdHRlcm4iOiAiXig/ISApKCA/KFxcdyspKD8hLipcXGJcXDJcXGIpKSokIiwgImlucFR5cGUiOiAiaW5wdXQiLCAibmFtZSI6ICJSZXZlcnNlIHByb3h5IGluY2x1ZGVzIiwgImNvbHVtbnMiOiB7InBjIjogNCwgInRhYmxldCI6IDYsICJtb2JpbGUiOiAxMn0sICJkaXNhYmxlZCI6IGZhbHNlLCAidmFsdWUiOiAiIiwgInByZXZfdmFsdWUiOiAiIiwgInBvcG92ZXJzIjogW3siaWNvbk5hbWUiOiAiZGlzayIsICJ0ZXh0IjogImlucF9wb3BvdmVyX211bHRpc2l0ZSJ9LCB7Imljb25OYW1lIjogImluZm8iLCAidGV4dCI6ICJBZGRpdGlvbmFsIGNvbmZpZ3VyYXRpb24gdG8gaW5jbHVkZSBpbiB0aGUgbG9jYXRpb24gYmxvY2ssIHNlcGFyYXRlZCB3aXRoIHNwYWNlcy4ifV0sICJjb250YWluZXJDbGFzcyI6ICJ6LTEzIn19fSwgIm11bHRpcGxlcyI6IHsicmV2ZXJzZS1wcm94eSI6IHsiMCI6IHsiUkVWRVJTRV9QUk9YWV9IT1NUIjogeyJjb250ZXh0IjogIm11bHRpc2l0ZSIsICJkZWZhdWx0IjogIiIsICJoZWxwIjogIkZ1bGwgVVJMIG9mIHRoZSBwcm94aWVkIHJlc291cmNlIChwcm94eV9wYXNzKS4iLCAiaWQiOiAicmV2ZXJzZS1wcm94eS1ob3N0IiwgImxhYmVsIjogIlJldmVyc2UgcHJveHkgaG9zdCIsICJyZWdleCI6ICJeLiokIiwgInR5cGUiOiAidGV4dCIsICJtdWx0aXBsZSI6ICJyZXZlcnNlLXByb3h5IiwgInBhdHRlcm4iOiAiXi4qJCIsICJpbnBUeXBlIjogImlucHV0IiwgIm5hbWUiOiAiUmV2ZXJzZSBwcm94eSBob3N0IiwgImNvbHVtbnMiOiB7InBjIjogNCwgInRhYmxldCI6IDYsICJtb2JpbGUiOiAxMn0sICJkaXNhYmxlZCI6IHRydWUsICJ2YWx1ZSI6ICJodHRwOi8vYXBwMTo4MDgwIiwgInByZXZfdmFsdWUiOiAiaHR0cDovL2FwcDE6ODA4MCIsICJwb3BvdmVycyI6IFt7Imljb25OYW1lIjogInRyZXNwYXNzIiwgInRleHQiOiAiaW5wX3BvcG92ZXJfbWV0aG9kX2Rpc2FibGVkIn0sIHsiaWNvbk5hbWUiOiAidHJlc3Bhc3MiLCAidGV4dCI6ICJpbnBfcG9wb3Zlcl9tZXRob2RfZGlzYWJsZWQifSwgeyJpY29uTmFtZSI6ICJkaXNrIiwgInRleHQiOiAiaW5wX3BvcG92ZXJfbXVsdGlzaXRlIn0sIHsiaWNvbk5hbWUiOiAiaW5mbyIsICJ0ZXh0IjogIkZ1bGwgVVJMIG9mIHRoZSBwcm94aWVkIHJlc291cmNlIChwcm94eV9wYXNzKS4ifV0sICJjb250YWluZXJDbGFzcyI6ICJ6LTI2IiwgIm1ldGhvZCI6ICJzY2hlZHVsZXIifSwgIlJFVkVSU0VfUFJPWFlfVVJMIjogeyJjb250ZXh0IjogIm11bHRpc2l0ZSIsICJkZWZhdWx0IjogIi8iLCAiaGVscCI6ICJMb2NhdGlvbiBVUkwgdGhhdCB3aWxsIGJlIHByb3hpZWQuIiwgImlkIjogInJldmVyc2UtcHJveHktdXJsIiwgImxhYmVsIjogIlJldmVyc2UgcHJveHkgdXJsIiwgInJlZ2V4IjogIl4uKiQiLCAidHlwZSI6ICJ0ZXh0IiwgIm11bHRpcGxlIjogInJldmVyc2UtcHJveHkiLCAicGF0dGVybiI6ICJeLiokIiwgImlucFR5cGUiOiAiaW5wdXQiLCAibmFtZSI6ICJSZXZlcnNlIHByb3h5IHVybCIsICJjb2x1bW5zIjogeyJwYyI6IDQsICJ0YWJsZXQiOiA2LCAibW9iaWxlIjogMTJ9LCAiZGlzYWJsZWQiOiBmYWxzZSwgInZhbHVlIjogIi8iLCAicHJldl92YWx1ZSI6ICIvIiwgInBvcG92ZXJzIjogW3siaWNvbk5hbWUiOiAiZGlzayIsICJ0ZXh0IjogImlucF9wb3BvdmVyX211bHRpc2l0ZSJ9LCB7Imljb25OYW1lIjogImluZm8iLCAidGV4dCI6ICJMb2NhdGlvbiBVUkwgdGhhdCB3aWxsIGJlIHByb3hpZWQuIn1dLCAiY29udGFpbmVyQ2xhc3MiOiAiei0yNSIsICJtZXRob2QiOiAiZGVmYXVsdCJ9LCAiUkVWRVJTRV9QUk9YWV9XUyI6IHsiY29udGV4dCI6ICJtdWx0aXNpdGUiLCAiZGVmYXVsdCI6ICJubyIsICJoZWxwIjogIkVuYWJsZSB3ZWJzb2NrZXQgb24gdGhlIHByb3hpZWQgcmVzb3VyY2UuIiwgImlkIjogInJldmVyc2UtcHJveHktd3MiLCAibGFiZWwiOiAiUmV2ZXJzZSBwcm94eSBXUyIsICJyZWdleCI6ICJeKHllc3xubykkIiwgInR5cGUiOiAiY2hlY2siLCAibXVsdGlwbGUiOiAicmV2ZXJzZS1wcm94eSIsICJwYXR0ZXJuIjogIl4oeWVzfG5vKSQiLCAiaW5wVHlwZSI6ICJjaGVja2JveCIsICJuYW1lIjogIlJldmVyc2UgcHJveHkgV1MiLCAiY29sdW1ucyI6IHsicGMiOiA0LCAidGFibGV0IjogNiwgIm1vYmlsZSI6IDEyfSwgImRpc2FibGVkIjogZmFsc2UsICJ2YWx1ZSI6ICJubyIsICJwcmV2X3ZhbHVlIjogIm5vIiwgInBvcG92ZXJzIjogW3siaWNvbk5hbWUiOiAiZGlzayIsICJ0ZXh0IjogImlucF9wb3BvdmVyX211bHRpc2l0ZSJ9LCB7Imljb25OYW1lIjogImluZm8iLCAidGV4dCI6ICJFbmFibGUgd2Vic29ja2V0IG9uIHRoZSBwcm94aWVkIHJlc291cmNlLiJ9XSwgImNvbnRhaW5lckNsYXNzIjogInotMjQiLCAibWV0aG9kIjogImRlZmF1bHQifSwgIlJFVkVSU0VfUFJPWFlfSEVBREVSUyI6IHsiY29udGV4dCI6ICJtdWx0aXNpdGUiLCAiZGVmYXVsdCI6ICIiLCAiaGVscCI6ICJMaXN0IG9mIEhUVFAgaGVhZGVycyB0byBzZW5kIHRvIHByb3hpZWQgcmVzb3VyY2Ugc2VwYXJhdGVkIHdpdGggc2VtaWNvbG9ucyAodmFsdWVzIGZvciBwcm94eV9zZXRfaGVhZGVyIGRpcmVjdGl2ZSkuIiwgImlkIjogInJldmVyc2UtcHJveHktaGVhZGVycyIsICJsYWJlbCI6ICJSZXZlcnNlIHByb3h5IGhlYWRlcnMiLCAicmVnZXgiOiAiXig/IVs7IF0pKDs/ID8oW1xcd1xcLV0rKSg/IS4qXFwyICkgW147XSspKiQiLCAidHlwZSI6ICJ0ZXh0IiwgIm11bHRpcGxlIjogInJldmVyc2UtcHJveHkiLCAicGF0dGVybiI6ICJeKD8hWzsgXSkoOz8gPyhbXFx3XFwtXSspKD8hLipcXDIgKSBbXjtdKykqJCIsICJpbnBUeXBlIjogImlucHV0IiwgIm5hbWUiOiAiUmV2ZXJzZSBwcm94eSBoZWFkZXJzIiwgImNvbHVtbnMiOiB7InBjIjogNCwgInRhYmxldCI6IDYsICJtb2JpbGUiOiAxMn0sICJkaXNhYmxlZCI6IGZhbHNlLCAidmFsdWUiOiAiIiwgInByZXZfdmFsdWUiOiAiIiwgInBvcG92ZXJzIjogW3siaWNvbk5hbWUiOiAiZGlzayIsICJ0ZXh0IjogImlucF9wb3BvdmVyX211bHRpc2l0ZSJ9LCB7Imljb25OYW1lIjogImluZm8iLCAidGV4dCI6ICJMaXN0IG9mIEhUVFAgaGVhZGVycyB0byBzZW5kIHRvIHByb3hpZWQgcmVzb3VyY2Ugc2VwYXJhdGVkIHdpdGggc2VtaWNvbG9ucyAodmFsdWVzIGZvciBwcm94eV9zZXRfaGVhZGVyIGRpcmVjdGl2ZSkuIn1dLCAiY29udGFpbmVyQ2xhc3MiOiAiei0yMyIsICJtZXRob2QiOiAiZGVmYXVsdCJ9LCAiUkVWRVJTRV9QUk9YWV9IRUFERVJTX0NMSUVOVCI6IHsiY29udGV4dCI6ICJtdWx0aXNpdGUiLCAiZGVmYXVsdCI6ICIiLCAiaGVscCI6ICJMaXN0IG9mIEhUVFAgaGVhZGVycyB0byBzZW5kIHRvIGNsaWVudCBzZXBhcmF0ZWQgd2l0aCBzZW1pY29sb25zICh2YWx1ZXMgZm9yIGFkZF9oZWFkZXIgZGlyZWN0aXZlKS4iLCAiaWQiOiAicmV2ZXJzZS1wcm94eS1oZWFkZXJzLWNsaWVudCIsICJsYWJlbCI6ICJSZXZlcnNlIHByb3h5IGhlYWRlcnMtY2xpZW50IiwgInJlZ2V4IjogIl4oPyFbOyBdKSg7PyA/KFtcXHdcXC1dKykoPyEuKlxcMiApIFteO10rKSokIiwgInR5cGUiOiAidGV4dCIsICJtdWx0aXBsZSI6ICJyZXZlcnNlLXByb3h5IiwgInBhdHRlcm4iOiAiXig/IVs7IF0pKDs/ID8oW1xcd1xcLV0rKSg/IS4qXFwyICkgW147XSspKiQiLCAiaW5wVHlwZSI6ICJpbnB1dCIsICJuYW1lIjogIlJldmVyc2UgcHJveHkgaGVhZGVycy1jbGllbnQiLCAiY29sdW1ucyI6IHsicGMiOiA0LCAidGFibGV0IjogNiwgIm1vYmlsZSI6IDEyfSwgImRpc2FibGVkIjogZmFsc2UsICJ2YWx1ZSI6ICIiLCAicHJldl92YWx1ZSI6ICIiLCAicG9wb3ZlcnMiOiBbeyJpY29uTmFtZSI6ICJkaXNrIiwgInRleHQiOiAiaW5wX3BvcG92ZXJfbXVsdGlzaXRlIn0sIHsiaWNvbk5hbWUiOiAiaW5mbyIsICJ0ZXh0IjogIkxpc3Qgb2YgSFRUUCBoZWFkZXJzIHRvIHNlbmQgdG8gY2xpZW50IHNlcGFyYXRlZCB3aXRoIHNlbWljb2xvbnMgKHZhbHVlcyBmb3IgYWRkX2hlYWRlciBkaXJlY3RpdmUpLiJ9XSwgImNvbnRhaW5lckNsYXNzIjogInotMjIiLCAibWV0aG9kIjogImRlZmF1bHQifSwgIlJFVkVSU0VfUFJPWFlfQlVGRkVSSU5HIjogeyJjb250ZXh0IjogIm11bHRpc2l0ZSIsICJkZWZhdWx0IjogInllcyIsICJoZWxwIjogIkVuYWJsZSBvciBkaXNhYmxlIGJ1ZmZlcmluZyBvZiByZXNwb25zZXMgZnJvbSBwcm94aWVkIHJlc291cmNlLiIsICJpZCI6ICJyZXZlcnNlLXByb3h5LWJ1ZmZlcmluZyIsICJsYWJlbCI6ICJSZXZlcnNlIHByb3h5IGJ1ZmZlcmluZyIsICJyZWdleCI6ICJeKHllc3xubykkIiwgInR5cGUiOiAiY2hlY2siLCAibXVsdGlwbGUiOiAicmV2ZXJzZS1wcm94eSIsICJwYXR0ZXJuIjogIl4oeWVzfG5vKSQiLCAiaW5wVHlwZSI6ICJjaGVja2JveCIsICJuYW1lIjogIlJldmVyc2UgcHJveHkgYnVmZmVyaW5nIiwgImNvbHVtbnMiOiB7InBjIjogNCwgInRhYmxldCI6IDYsICJtb2JpbGUiOiAxMn0sICJkaXNhYmxlZCI6IGZhbHNlLCAidmFsdWUiOiAieWVzIiwgInByZXZfdmFsdWUiOiAieWVzIiwgInBvcG92ZXJzIjogW3siaWNvbk5hbWUiOiAiZGlzayIsICJ0ZXh0IjogImlucF9wb3BvdmVyX211bHRpc2l0ZSJ9LCB7Imljb25OYW1lIjogImluZm8iLCAidGV4dCI6ICJFbmFibGUgb3IgZGlzYWJsZSBidWZmZXJpbmcgb2YgcmVzcG9uc2VzIGZyb20gcHJveGllZCByZXNvdXJjZS4ifV0sICJjb250YWluZXJDbGFzcyI6ICJ6LTIxIiwgIm1ldGhvZCI6ICJkZWZhdWx0In0sICJSRVZFUlNFX1BST1hZX0tFRVBBTElWRSI6IHsiY29udGV4dCI6ICJtdWx0aXNpdGUiLCAiZGVmYXVsdCI6ICJubyIsICJoZWxwIjogIkVuYWJsZSBvciBkaXNhYmxlIGtlZXBhbGl2ZSBjb25uZWN0aW9ucyB3aXRoIHRoZSBwcm94aWVkIHJlc291cmNlLiIsICJpZCI6ICJyZXZlcnNlLXByb3h5LWtlZXBhbGl2ZSIsICJsYWJlbCI6ICJSZXZlcnNlIHByb3h5IGtlZXBhbGl2ZSIsICJyZWdleCI6ICJeKHllc3xubykkIiwgInR5cGUiOiAiY2hlY2siLCAibXVsdGlwbGUiOiAicmV2ZXJzZS1wcm94eSIsICJwYXR0ZXJuIjogIl4oeWVzfG5vKSQiLCAiaW5wVHlwZSI6ICJjaGVja2JveCIsICJuYW1lIjogIlJldmVyc2UgcHJveHkga2VlcGFsaXZlIiwgImNvbHVtbnMiOiB7InBjIjogNCwgInRhYmxldCI6IDYsICJtb2JpbGUiOiAxMn0sICJkaXNhYmxlZCI6IGZhbHNlLCAidmFsdWUiOiAibm8iLCAicHJldl92YWx1ZSI6ICJubyIsICJwb3BvdmVycyI6IFt7Imljb25OYW1lIjogImRpc2siLCAidGV4dCI6ICJpbnBfcG9wb3Zlcl9tdWx0aXNpdGUifSwgeyJpY29uTmFtZSI6ICJpbmZvIiwgInRleHQiOiAiRW5hYmxlIG9yIGRpc2FibGUga2VlcGFsaXZlIGNvbm5lY3Rpb25zIHdpdGggdGhlIHByb3hpZWQgcmVzb3VyY2UuIn1dLCAiY29udGFpbmVyQ2xhc3MiOiAiei0yMCIsICJtZXRob2QiOiAiZGVmYXVsdCJ9LCAiUkVWRVJTRV9QUk9YWV9BVVRIX1JFUVVFU1QiOiB7ImNvbnRleHQiOiAibXVsdGlzaXRlIiwgImRlZmF1bHQiOiAiIiwgImhlbHAiOiAiRW5hYmxlIGF1dGhlbnRpY2F0aW9uIHVzaW5nIGFuIGV4dGVybmFsIHByb3ZpZGVyICh2YWx1ZSBvZiBhdXRoX3JlcXVlc3QgZGlyZWN0aXZlKS4iLCAiaWQiOiAicmV2ZXJzZS1wcm94eS1hdXRoLXJlcXVlc3QiLCAibGFiZWwiOiAiUmV2ZXJzZSBwcm94eSBhdXRoIHJlcXVlc3QiLCAicmVnZXgiOiAiXihcXC9bXFx3XFxdLn46XFwvPyNcXFtAISRcXCYnXFwoXFwpKissOz1cXC1dKnxvZmYpPyQiLCAidHlwZSI6ICJ0ZXh0IiwgIm11bHRpcGxlIjogInJldmVyc2UtcHJveHkiLCAicGF0dGVybiI6ICJeKFxcL1tcXHdcXF0ufjpcXC8/I1xcW0AhJFxcJidcXChcXCkqKyw7PVxcLV0qfG9mZik/JCIsICJpbnBUeXBlIjogImlucHV0IiwgIm5hbWUiOiAiUmV2ZXJzZSBwcm94eSBhdXRoIHJlcXVlc3QiLCAiY29sdW1ucyI6IHsicGMiOiA0LCAidGFibGV0IjogNiwgIm1vYmlsZSI6IDEyfSwgImRpc2FibGVkIjogZmFsc2UsICJ2YWx1ZSI6ICIiLCAicHJldl92YWx1ZSI6ICIiLCAicG9wb3ZlcnMiOiBbeyJpY29uTmFtZSI6ICJkaXNrIiwgInRleHQiOiAiaW5wX3BvcG92ZXJfbXVsdGlzaXRlIn0sIHsiaWNvbk5hbWUiOiAiaW5mbyIsICJ0ZXh0IjogIkVuYWJsZSBhdXRoZW50aWNhdGlvbiB1c2luZyBhbiBleHRlcm5hbCBwcm92aWRlciAodmFsdWUgb2YgYXV0aF9yZXF1ZXN0IGRpcmVjdGl2ZSkuIn1dLCAiY29udGFpbmVyQ2xhc3MiOiAiei0xOSIsICJtZXRob2QiOiAiZGVmYXVsdCJ9LCAiUkVWRVJTRV9QUk9YWV9BVVRIX1JFUVVFU1RfU0lHTklOX1VSTCI6IHsiY29udGV4dCI6ICJtdWx0aXNpdGUiLCAiZGVmYXVsdCI6ICIiLCAiaGVscCI6ICJSZWRpcmVjdCBjbGllbnRzIHRvIHNpZ24taW4gVVJMIHdoZW4gdXNpbmcgUkVWRVJTRV9QUk9YWV9BVVRIX1JFUVVFU1QgKHVzZWQgd2hlbiBhdXRoX3JlcXVlc3QgY2FsbCByZXR1cm5lZCA0MDEpLiIsICJpZCI6ICJyZXZlcnNlLXByb3h5LWF1dGgtcmVxdWVzdC1zaWduaW4tdXJsIiwgImxhYmVsIjogIkF1dGggcmVxdWVzdCBzaWduaW4gVVJMIiwgInJlZ2V4IjogIl4oaHR0cHM/OlxcL1xcL1tcXC1cXHdAOiUuK34jPV0rW1xcLVxcd1xcKFxcKSFAOiUrLn4jPyZcXC89JF0qKT8kIiwgInR5cGUiOiAidGV4dCIsICJtdWx0aXBsZSI6ICJyZXZlcnNlLXByb3h5IiwgInBhdHRlcm4iOiAiXihodHRwcz86XFwvXFwvW1xcLVxcd0A6JS4rfiM9XStbXFwtXFx3XFwoXFwpIUA6JSsufiM/JlxcLz0kXSopPyQiLCAiaW5wVHlwZSI6ICJpbnB1dCIsICJuYW1lIjogIkF1dGggcmVxdWVzdCBzaWduaW4gVVJMIiwgImNvbHVtbnMiOiB7InBjIjogNCwgInRhYmxldCI6IDYsICJtb2JpbGUiOiAxMn0sICJkaXNhYmxlZCI6IGZhbHNlLCAidmFsdWUiOiAiIiwgInByZXZfdmFsdWUiOiAiIiwgInBvcG92ZXJzIjogW3siaWNvbk5hbWUiOiAiZGlzayIsICJ0ZXh0IjogImlucF9wb3BvdmVyX211bHRpc2l0ZSJ9LCB7Imljb25OYW1lIjogImluZm8iLCAidGV4dCI6ICJSZWRpcmVjdCBjbGllbnRzIHRvIHNpZ24taW4gVVJMIHdoZW4gdXNpbmcgUkVWRVJTRV9QUk9YWV9BVVRIX1JFUVVFU1QgKHVzZWQgd2hlbiBhdXRoX3JlcXVlc3QgY2FsbCByZXR1cm5lZCA0MDEpLiJ9XSwgImNvbnRhaW5lckNsYXNzIjogInotMTgiLCAibWV0aG9kIjogImRlZmF1bHQifSwgIlJFVkVSU0VfUFJPWFlfQVVUSF9SRVFVRVNUX1NFVCI6IHsiY29udGV4dCI6ICJtdWx0aXNpdGUiLCAiZGVmYXVsdCI6ICIiLCAiaGVscCI6ICJMaXN0IG9mIHZhcmlhYmxlcyB0byBzZXQgZnJvbSB0aGUgYXV0aGVudGljYXRpb24gcHJvdmlkZXIsIHNlcGFyYXRlZCB3aXRoIHNlbWljb2xvbnMgKHZhbHVlcyBvZiBhdXRoX3JlcXVlc3Rfc2V0IGRpcmVjdGl2ZXMpLiIsICJpZCI6ICJyZXZlcnNlLXByb3h5LWF1dGgtcmVxdWVzdC1zZXQiLCAibGFiZWwiOiAiUmV2ZXJzZSBwcm94eSBhdXRoIHJlcXVlc3Qgc2V0IiwgInJlZ2V4IjogIl4oPyEgOykoOz8gPyhcXCRbYS16X1xcLV0rKSg/IS4qXFwyICkgW147XSspKiQiLCAidHlwZSI6ICJ0ZXh0IiwgIm11bHRpcGxlIjogInJldmVyc2UtcHJveHkiLCAicGF0dGVybiI6ICJeKD8hIDspKDs/ID8oXFwkW2Etel9cXC1dKykoPyEuKlxcMiApIFteO10rKSokIiwgImlucFR5cGUiOiAiaW5wdXQiLCAibmFtZSI6ICJSZXZlcnNlIHByb3h5IGF1dGggcmVxdWVzdCBzZXQiLCAiY29sdW1ucyI6IHsicGMiOiA0LCAidGFibGV0IjogNiwgIm1vYmlsZSI6IDEyfSwgImRpc2FibGVkIjogZmFsc2UsICJ2YWx1ZSI6ICIiLCAicHJldl92YWx1ZSI6ICIiLCAicG9wb3ZlcnMiOiBbeyJpY29uTmFtZSI6ICJkaXNrIiwgInRleHQiOiAiaW5wX3BvcG92ZXJfbXVsdGlzaXRlIn0sIHsiaWNvbk5hbWUiOiAiaW5mbyIsICJ0ZXh0IjogIkxpc3Qgb2YgdmFyaWFibGVzIHRvIHNldCBmcm9tIHRoZSBhdXRoZW50aWNhdGlvbiBwcm92aWRlciwgc2VwYXJhdGVkIHdpdGggc2VtaWNvbG9ucyAodmFsdWVzIG9mIGF1dGhfcmVxdWVzdF9zZXQgZGlyZWN0aXZlcykuIn1dLCAiY29udGFpbmVyQ2xhc3MiOiAiei0xNyIsICJtZXRob2QiOiAiZGVmYXVsdCJ9LCAiUkVWRVJTRV9QUk9YWV9DT05ORUNUX1RJTUVPVVQiOiB7ImNvbnRleHQiOiAibXVsdGlzaXRlIiwgImRlZmF1bHQiOiAiNjBzIiwgImhlbHAiOiAiVGltZW91dCB3aGVuIGNvbm5lY3RpbmcgdG8gdGhlIHByb3hpZWQgcmVzb3VyY2UuIiwgImlkIjogInJldmVyc2UtcHJveHktY29ubmVjdC10aW1lb3V0IiwgImxhYmVsIjogIlJldmVyc2UgcHJveHkgY29ubmVjdCB0aW1lb3V0IiwgInJlZ2V4IjogIl5cXGQrKG1zP3xbc2hkd015XSkkIiwgInR5cGUiOiAidGV4dCIsICJtdWx0aXBsZSI6ICJyZXZlcnNlLXByb3h5IiwgInBhdHRlcm4iOiAiXlxcZCsobXM/fFtzaGR3TXldKSQiLCAiaW5wVHlwZSI6ICJpbnB1dCIsICJuYW1lIjogIlJldmVyc2UgcHJveHkgY29ubmVjdCB0aW1lb3V0IiwgImNvbHVtbnMiOiB7InBjIjogNCwgInRhYmxldCI6IDYsICJtb2JpbGUiOiAxMn0sICJkaXNhYmxlZCI6IGZhbHNlLCAidmFsdWUiOiAiNjBzIiwgInByZXZfdmFsdWUiOiAiNjBzIiwgInBvcG92ZXJzIjogW3siaWNvbk5hbWUiOiAiZGlzayIsICJ0ZXh0IjogImlucF9wb3BvdmVyX211bHRpc2l0ZSJ9LCB7Imljb25OYW1lIjogImluZm8iLCAidGV4dCI6ICJUaW1lb3V0IHdoZW4gY29ubmVjdGluZyB0byB0aGUgcHJveGllZCByZXNvdXJjZS4ifV0sICJjb250YWluZXJDbGFzcyI6ICJ6LTE2IiwgIm1ldGhvZCI6ICJkZWZhdWx0In0sICJSRVZFUlNFX1BST1hZX1JFQURfVElNRU9VVCI6IHsiY29udGV4dCI6ICJtdWx0aXNpdGUiLCAiZGVmYXVsdCI6ICI2MHMiLCAiaGVscCI6ICJUaW1lb3V0IHdoZW4gcmVhZGluZyBmcm9tIHRoZSBwcm94aWVkIHJlc291cmNlLiIsICJpZCI6ICJyZXZlcnNlLXByb3h5LXJlYWQtdGltZW91dCIsICJsYWJlbCI6ICJSZXZlcnNlIHByb3h5IHJlYWQgdGltZW91dCIsICJyZWdleCI6ICJeXFxkKyhtcz98W3NoZHdNeV0pJCIsICJ0eXBlIjogInRleHQiLCAibXVsdGlwbGUiOiAicmV2ZXJzZS1wcm94eSIsICJwYXR0ZXJuIjogIl5cXGQrKG1zP3xbc2hkd015XSkkIiwgImlucFR5cGUiOiAiaW5wdXQiLCAibmFtZSI6ICJSZXZlcnNlIHByb3h5IHJlYWQgdGltZW91dCIsICJjb2x1bW5zIjogeyJwYyI6IDQsICJ0YWJsZXQiOiA2LCAibW9iaWxlIjogMTJ9LCAiZGlzYWJsZWQiOiBmYWxzZSwgInZhbHVlIjogIjYwcyIsICJwcmV2X3ZhbHVlIjogIjYwcyIsICJwb3BvdmVycyI6IFt7Imljb25OYW1lIjogImRpc2siLCAidGV4dCI6ICJpbnBfcG9wb3Zlcl9tdWx0aXNpdGUifSwgeyJpY29uTmFtZSI6ICJpbmZvIiwgInRleHQiOiAiVGltZW91dCB3aGVuIHJlYWRpbmcgZnJvbSB0aGUgcHJveGllZCByZXNvdXJjZS4ifV0sICJjb250YWluZXJDbGFzcyI6ICJ6LTE1IiwgIm1ldGhvZCI6ICJkZWZhdWx0In0sICJSRVZFUlNFX1BST1hZX1NFTkRfVElNRU9VVCI6IHsiY29udGV4dCI6ICJtdWx0aXNpdGUiLCAiZGVmYXVsdCI6ICI2MHMiLCAiaGVscCI6ICJUaW1lb3V0IHdoZW4gc2VuZGluZyB0byB0aGUgcHJveGllZCByZXNvdXJjZS4iLCAiaWQiOiAicmV2ZXJzZS1wcm94eS1zZW5kLXRpbWVvdXQiLCAibGFiZWwiOiAiUmV2ZXJzZSBwcm94eSBzZW5kIHRpbWVvdXQiLCAicmVnZXgiOiAiXlxcZCsobXM/fFtzaGR3TXldKSQiLCAidHlwZSI6ICJ0ZXh0IiwgIm11bHRpcGxlIjogInJldmVyc2UtcHJveHkiLCAicGF0dGVybiI6ICJeXFxkKyhtcz98W3NoZHdNeV0pJCIsICJpbnBUeXBlIjogImlucHV0IiwgIm5hbWUiOiAiUmV2ZXJzZSBwcm94eSBzZW5kIHRpbWVvdXQiLCAiY29sdW1ucyI6IHsicGMiOiA0LCAidGFibGV0IjogNiwgIm1vYmlsZSI6IDEyfSwgImRpc2FibGVkIjogZmFsc2UsICJ2YWx1ZSI6ICI2MHMiLCAicHJldl92YWx1ZSI6ICI2MHMiLCAicG9wb3ZlcnMiOiBbeyJpY29uTmFtZSI6ICJkaXNrIiwgInRleHQiOiAiaW5wX3BvcG92ZXJfbXVsdGlzaXRlIn0sIHsiaWNvbk5hbWUiOiAiaW5mbyIsICJ0ZXh0IjogIlRpbWVvdXQgd2hlbiBzZW5kaW5nIHRvIHRoZSBwcm94aWVkIHJlc291cmNlLiJ9XSwgImNvbnRhaW5lckNsYXNzIjogInotMTQiLCAibWV0aG9kIjogImRlZmF1bHQifSwgIlJFVkVSU0VfUFJPWFlfSU5DTFVERVMiOiB7ImNvbnRleHQiOiAibXVsdGlzaXRlIiwgImRlZmF1bHQiOiAiIiwgImhlbHAiOiAiQWRkaXRpb25hbCBjb25maWd1cmF0aW9uIHRvIGluY2x1ZGUgaW4gdGhlIGxvY2F0aW9uIGJsb2NrLCBzZXBhcmF0ZWQgd2l0aCBzcGFjZXMuIiwgImlkIjogInJldmVyc2UtcHJveHktaW5jbHVkZXMiLCAibGFiZWwiOiAiUmV2ZXJzZSBwcm94eSBpbmNsdWRlcyIsICJyZWdleCI6ICJeKD8hICkoID8oXFx3KykoPyEuKlxcYlxcMlxcYikpKiQiLCAidHlwZSI6ICJ0ZXh0IiwgIm11bHRpcGxlIjogInJldmVyc2UtcHJveHkiLCAicGF0dGVybiI6ICJeKD8hICkoID8oXFx3KykoPyEuKlxcYlxcMlxcYikpKiQiLCAiaW5wVHlwZSI6ICJpbnB1dCIsICJuYW1lIjogIlJldmVyc2UgcHJveHkgaW5jbHVkZXMiLCAiY29sdW1ucyI6IHsicGMiOiA0LCAidGFibGV0IjogNiwgIm1vYmlsZSI6IDEyfSwgImRpc2FibGVkIjogZmFsc2UsICJ2YWx1ZSI6ICIiLCAicHJldl92YWx1ZSI6ICIiLCAicG9wb3ZlcnMiOiBbeyJpY29uTmFtZSI6ICJkaXNrIiwgInRleHQiOiAiaW5wX3BvcG92ZXJfbXVsdGlzaXRlIn0sIHsiaWNvbk5hbWUiOiAiaW5mbyIsICJ0ZXh0IjogIkFkZGl0aW9uYWwgY29uZmlndXJhdGlvbiB0byBpbmNsdWRlIGluIHRoZSBsb2NhdGlvbiBibG9jaywgc2VwYXJhdGVkIHdpdGggc3BhY2VzLiJ9XSwgImNvbnRhaW5lckNsYXNzIjogInotMTMiLCAibWV0aG9kIjogImRlZmF1bHQifX19fX0sIHsiaWQiOiAicmV2ZXJzZXNjYW4iLCAic3RyZWFtIjogInllcyIsICJuYW1lIjogIlJldmVyc2Ugc2NhbiIsICJkZXNjcmlwdGlvbiI6ICJTY2FuIGNsaWVudHMgcG9ydHMgdG8gZGV0ZWN0IHByb3hpZXMgb3Igc2VydmVycy4iLCAidmVyc2lvbiI6ICIxLjAiLCAidHlwZSI6ICJjb3JlIiwgIm1ldGhvZCI6ICJtYW51YWwiLCAicGFnZSI6IHRydWUsICJzZXR0aW5ncyI6IHsiVVNFX1JFVkVSU0VfU0NBTiI6IHsiY29udGV4dCI6ICJtdWx0aXNpdGUiLCAiZGVmYXVsdCI6ICJubyIsICJoZWxwIjogIkVuYWJsZSBzY2FubmluZyBvZiBjbGllbnRzIHBvcnRzIGFuZCBkZW55IGFjY2VzcyBpZiBvbmUgaXMgb3BlbmVkLiIsICJpZCI6ICJ1c2UtcmV2ZXJzZS1zY2FuIiwgImxhYmVsIjogIlJldmVyc2Ugc2NhbiIsICJyZWdleCI6ICJeKG5vfHllcykkIiwgInR5cGUiOiAiY2hlY2siLCAiY29udGFpbmVyQ2xhc3MiOiAiei0yIiwgInBhdHRlcm4iOiAiXihub3x5ZXMpJCIsICJpbnBUeXBlIjogImNoZWNrYm94IiwgIm5hbWUiOiAiUmV2ZXJzZSBzY2FuIiwgImNvbHVtbnMiOiB7InBjIjogNCwgInRhYmxldCI6IDYsICJtb2JpbGUiOiAxMn0sICJkaXNhYmxlZCI6IGZhbHNlLCAidmFsdWUiOiAibm8iLCAibWV0aG9kIjogImRlZmF1bHQiLCAicHJldl92YWx1ZSI6ICJubyIsICJwb3BvdmVycyI6IFt7Imljb25OYW1lIjogImRpc2siLCAidGV4dCI6ICJpbnBfcG9wb3Zlcl9tdWx0aXNpdGUifSwgeyJpY29uTmFtZSI6ICJpbmZvIiwgInRleHQiOiAiRW5hYmxlIHNjYW5uaW5nIG9mIGNsaWVudHMgcG9ydHMgYW5kIGRlbnkgYWNjZXNzIGlmIG9uZSBpcyBvcGVuZWQuIn1dfSwgIlJFVkVSU0VfU0NBTl9QT1JUUyI6IHsiY29udGV4dCI6ICJtdWx0aXNpdGUiLCAiZGVmYXVsdCI6ICIyMiA4MCA0NDMgMzEyOCA4MDAwIDgwODAiLCAiaGVscCI6ICJMaXN0IG9mIHBvcnQgdG8gc2NhbiB3aGVuIHVzaW5nIHJldmVyc2Ugc2NhbiBmZWF0dXJlLiIsICJpZCI6ICJyZXZlcnNlLXNjYW4tcG9ydHMiLCAibGFiZWwiOiAiUmV2ZXJzZSBzY2FuIHBvcnRzIiwgInJlZ2V4IjogIl4uKiQiLCAidHlwZSI6ICJ0ZXh0IiwgImNvbnRhaW5lckNsYXNzIjogInotMSIsICJwYXR0ZXJuIjogIl4uKiQiLCAiaW5wVHlwZSI6ICJpbnB1dCIsICJuYW1lIjogIlJldmVyc2Ugc2NhbiBwb3J0cyIsICJjb2x1bW5zIjogeyJwYyI6IDQsICJ0YWJsZXQiOiA2LCAibW9iaWxlIjogMTJ9LCAiZGlzYWJsZWQiOiBmYWxzZSwgInZhbHVlIjogIjIyIDgwIDQ0MyAzMTI4IDgwMDAgODA4MCIsICJtZXRob2QiOiAiZGVmYXVsdCIsICJwcmV2X3ZhbHVlIjogIjIyIDgwIDQ0MyAzMTI4IDgwMDAgODA4MCIsICJwb3BvdmVycyI6IFt7Imljb25OYW1lIjogImRpc2siLCAidGV4dCI6ICJpbnBfcG9wb3Zlcl9tdWx0aXNpdGUifSwgeyJpY29uTmFtZSI6ICJpbmZvIiwgInRleHQiOiAiTGlzdCBvZiBwb3J0IHRvIHNjYW4gd2hlbiB1c2luZyByZXZlcnNlIHNjYW4gZmVhdHVyZS4ifV19LCAiUkVWRVJTRV9TQ0FOX1RJTUVPVVQiOiB7ImNvbnRleHQiOiAibXVsdGlzaXRlIiwgImRlZmF1bHQiOiAiNTAwIiwgImhlbHAiOiAiU3BlY2lmeSB0aGUgbWF4aW11bSB0aW1lb3V0IChpbiBtcykgd2hlbiBzY2FubmluZyBhIHBvcnQuIiwgImlkIjogInJldmVyc2Utc2Nhbi10aW1lb3V0IiwgImxhYmVsIjogIlJldmVyc2Ugc2NhbiB0aW1lb3V0IiwgInJlZ2V4IjogIl4uKiQiLCAidHlwZSI6ICJ0ZXh0IiwgImNvbnRhaW5lckNsYXNzIjogInotMCIsICJwYXR0ZXJuIjogIl4uKiQiLCAiaW5wVHlwZSI6ICJpbnB1dCIsICJuYW1lIjogIlJldmVyc2Ugc2NhbiB0aW1lb3V0IiwgImNvbHVtbnMiOiB7InBjIjogNCwgInRhYmxldCI6IDYsICJtb2JpbGUiOiAxMn0sICJkaXNhYmxlZCI6IGZhbHNlLCAidmFsdWUiOiAiNTAwIiwgIm1ldGhvZCI6ICJkZWZhdWx0IiwgInByZXZfdmFsdWUiOiAiNTAwIiwgInBvcG92ZXJzIjogW3siaWNvbk5hbWUiOiAiZGlzayIsICJ0ZXh0IjogImlucF9wb3BvdmVyX211bHRpc2l0ZSJ9LCB7Imljb25OYW1lIjogImluZm8iLCAidGV4dCI6ICJTcGVjaWZ5IHRoZSBtYXhpbXVtIHRpbWVvdXQgKGluIG1zKSB3aGVuIHNjYW5uaW5nIGEgcG9ydC4ifV19fSwgImNoZWNrc3VtIjogbnVsbH0sIHsiaWQiOiAic2VsZnNpZ25lZCIsICJzdHJlYW0iOiAieWVzIiwgIm5hbWUiOiAiU2VsZi1zaWduZWQgY2VydGlmaWNhdGUiLCAiZGVzY3JpcHRpb24iOiAiR2VuZXJhdGUgc2VsZi1zaWduZWQgY2VydGlmaWNhdGUuIiwgInZlcnNpb24iOiAiMS4wIiwgInR5cGUiOiAiY29yZSIsICJtZXRob2QiOiAibWFudWFsIiwgInBhZ2UiOiBmYWxzZSwgInNldHRpbmdzIjogeyJHRU5FUkFURV9TRUxGX1NJR05FRF9TU0wiOiB7ImNvbnRleHQiOiAibXVsdGlzaXRlIiwgImRlZmF1bHQiOiAibm8iLCAiaGVscCI6ICJHZW5lcmF0ZSBhbmQgdXNlIHNlbGYtc2lnbmVkIGNlcnRpZmljYXRlLiIsICJpZCI6ICJnZW5lcmF0ZS1zZWxmLXNpZ25lZC1zc2wiLCAibGFiZWwiOiAiQWN0aXZhdGUgc2VsZi1zaWduZWQgY2VydGlmaWNhdGUiLCAicmVnZXgiOiAiXih5ZXN8bm8pJCIsICJ0eXBlIjogImNoZWNrIiwgImNvbnRhaW5lckNsYXNzIjogInotMiIsICJwYXR0ZXJuIjogIl4oeWVzfG5vKSQiLCAiaW5wVHlwZSI6ICJjaGVja2JveCIsICJuYW1lIjogIkFjdGl2YXRlIHNlbGYtc2lnbmVkIGNlcnRpZmljYXRlIiwgImNvbHVtbnMiOiB7InBjIjogNCwgInRhYmxldCI6IDYsICJtb2JpbGUiOiAxMn0sICJkaXNhYmxlZCI6IGZhbHNlLCAidmFsdWUiOiAibm8iLCAibWV0aG9kIjogImRlZmF1bHQiLCAicHJldl92YWx1ZSI6ICJubyIsICJwb3BvdmVycyI6IFt7Imljb25OYW1lIjogImRpc2siLCAidGV4dCI6ICJpbnBfcG9wb3Zlcl9tdWx0aXNpdGUifSwgeyJpY29uTmFtZSI6ICJpbmZvIiwgInRleHQiOiAiR2VuZXJhdGUgYW5kIHVzZSBzZWxmLXNpZ25lZCBjZXJ0aWZpY2F0ZS4ifV19LCAiU0VMRl9TSUdORURfU1NMX0VYUElSWSI6IHsiY29udGV4dCI6ICJtdWx0aXNpdGUiLCAiZGVmYXVsdCI6ICIzNjUiLCAiaGVscCI6ICJTZWxmLXNpZ25lZCBjZXJ0aWZpY2F0ZSBleHBpcnkgaW4gZGF5cy4iLCAiaWQiOiAic2VsZi1zaWduZWQtc3NsLWV4cGlyeSIsICJsYWJlbCI6ICJDZXJ0aWZpY2F0ZSBleHBpcnkiLCAicmVnZXgiOiAiXlxcZCskIiwgInR5cGUiOiAidGV4dCIsICJjb250YWluZXJDbGFzcyI6ICJ6LTEiLCAicGF0dGVybiI6ICJeXFxkKyQiLCAiaW5wVHlwZSI6ICJpbnB1dCIsICJuYW1lIjogIkNlcnRpZmljYXRlIGV4cGlyeSIsICJjb2x1bW5zIjogeyJwYyI6IDQsICJ0YWJsZXQiOiA2LCAibW9iaWxlIjogMTJ9LCAiZGlzYWJsZWQiOiBmYWxzZSwgInZhbHVlIjogIjM2NSIsICJtZXRob2QiOiAiZGVmYXVsdCIsICJwcmV2X3ZhbHVlIjogIjM2NSIsICJwb3BvdmVycyI6IFt7Imljb25OYW1lIjogImRpc2siLCAidGV4dCI6ICJpbnBfcG9wb3Zlcl9tdWx0aXNpdGUifSwgeyJpY29uTmFtZSI6ICJpbmZvIiwgInRleHQiOiAiU2VsZi1zaWduZWQgY2VydGlmaWNhdGUgZXhwaXJ5IGluIGRheXMuIn1dfSwgIlNFTEZfU0lHTkVEX1NTTF9TVUJKIjogeyJjb250ZXh0IjogIm11bHRpc2l0ZSIsICJkZWZhdWx0IjogIi9DTj13d3cuZXhhbXBsZS5jb20vIiwgImhlbHAiOiAiU2VsZi1zaWduZWQgY2VydGlmaWNhdGUgc3ViamVjdC4iLCAiaWQiOiAic2VsZi1zaWduZWQtc3NsLXN1YmoiLCAibGFiZWwiOiAiQ2VydGlmaWNhdGUgc3ViamVjdCIsICJyZWdleCI6ICJeL0NOPVteLF0rJCIsICJ0eXBlIjogInRleHQiLCAiY29udGFpbmVyQ2xhc3MiOiAiei0wIiwgInBhdHRlcm4iOiAiXi9DTj1bXixdKyQiLCAiaW5wVHlwZSI6ICJpbnB1dCIsICJuYW1lIjogIkNlcnRpZmljYXRlIHN1YmplY3QiLCAiY29sdW1ucyI6IHsicGMiOiA0LCAidGFibGV0IjogNiwgIm1vYmlsZSI6IDEyfSwgImRpc2FibGVkIjogZmFsc2UsICJ2YWx1ZSI6ICIvQ049d3d3LmV4YW1wbGUuY29tLyIsICJtZXRob2QiOiAiZGVmYXVsdCIsICJwcmV2X3ZhbHVlIjogIi9DTj13d3cuZXhhbXBsZS5jb20vIiwgInBvcG92ZXJzIjogW3siaWNvbk5hbWUiOiAiZGlzayIsICJ0ZXh0IjogImlucF9wb3BvdmVyX211bHRpc2l0ZSJ9LCB7Imljb25OYW1lIjogImluZm8iLCAidGV4dCI6ICJTZWxmLXNpZ25lZCBjZXJ0aWZpY2F0ZSBzdWJqZWN0LiJ9XX19LCAiY2hlY2tzdW0iOiBudWxsfSwgeyJpZCI6ICJzZXNzaW9ucyIsICJzdHJlYW0iOiAieWVzIiwgIm5hbWUiOiAiU2Vzc2lvbnMiLCAiZGVzY3JpcHRpb24iOiAiTWFuYWdlbWVudCBvZiBzZXNzaW9uIHVzZWQgYnkgb3RoZXIgcGx1Z2lucy4iLCAidmVyc2lvbiI6ICIxLjAiLCAidHlwZSI6ICJjb3JlIiwgIm1ldGhvZCI6ICJtYW51YWwiLCAicGFnZSI6IGZhbHNlLCAic2V0dGluZ3MiOiB7IlNFU1NJT05TX1NFQ1JFVCI6IHsiY29udGV4dCI6ICJnbG9iYWwiLCAiZGVmYXVsdCI6ICJyYW5kb20iLCAiaGVscCI6ICJTZWNyZXQgdXNlZCB0byBlbmNyeXB0IHNlc3Npb25zIHZhcmlhYmxlcyBmb3Igc3RvcmluZyBkYXRhIHJlbGF0ZWQgdG8gY2hhbGxlbmdlcy4iLCAiaWQiOiAic2Vzc2lvbi1zZWNyZXQiLCAibGFiZWwiOiAiU2Vzc2lvbnMgc2VjcmV0IiwgInJlZ2V4IjogIl5cXHcrJCIsICJ0eXBlIjogInBhc3N3b3JkIiwgImNvbnRhaW5lckNsYXNzIjogInotNiIsICJwYXR0ZXJuIjogIl5cXHcrJCIsICJpbnBUeXBlIjogImlucHV0IiwgIm5hbWUiOiAiU2Vzc2lvbnMgc2VjcmV0IiwgImNvbHVtbnMiOiB7InBjIjogNCwgInRhYmxldCI6IDYsICJtb2JpbGUiOiAxMn0sICJkaXNhYmxlZCI6IGZhbHNlLCAidmFsdWUiOiAicmFuZG9tIiwgIm1ldGhvZCI6ICJkZWZhdWx0IiwgInByZXZfdmFsdWUiOiAicmFuZG9tIiwgInBvcG92ZXJzIjogW3siaWNvbk5hbWUiOiAiZ2xvYmUiLCAidGV4dCI6ICJpbnBfcG9wb3Zlcl9nbG9iYWwifSwgeyJpY29uTmFtZSI6ICJpbmZvIiwgInRleHQiOiAiU2VjcmV0IHVzZWQgdG8gZW5jcnlwdCBzZXNzaW9ucyB2YXJpYWJsZXMgZm9yIHN0b3JpbmcgZGF0YSByZWxhdGVkIHRvIGNoYWxsZW5nZXMuIn1dfSwgIlNFU1NJT05TX05BTUUiOiB7ImNvbnRleHQiOiAiZ2xvYmFsIiwgImRlZmF1bHQiOiAicmFuZG9tIiwgImhlbHAiOiAiTmFtZSBvZiB0aGUgY29va2llIGdpdmVuIHRvIGNsaWVudHMuIiwgImlkIjogInNlc3Npb25zLW5hbWUiLCAibGFiZWwiOiAiU2Vzc2lvbnMgbmFtZSIsICJyZWdleCI6ICJeXFx3KyQiLCAidHlwZSI6ICJ0ZXh0IiwgImNvbnRhaW5lckNsYXNzIjogInotNSIsICJwYXR0ZXJuIjogIl5cXHcrJCIsICJpbnBUeXBlIjogImlucHV0IiwgIm5hbWUiOiAiU2Vzc2lvbnMgbmFtZSIsICJjb2x1bW5zIjogeyJwYyI6IDQsICJ0YWJsZXQiOiA2LCAibW9iaWxlIjogMTJ9LCAiZGlzYWJsZWQiOiBmYWxzZSwgInZhbHVlIjogInJhbmRvbSIsICJtZXRob2QiOiAiZGVmYXVsdCIsICJwcmV2X3ZhbHVlIjogInJhbmRvbSIsICJwb3BvdmVycyI6IFt7Imljb25OYW1lIjogImdsb2JlIiwgInRleHQiOiAiaW5wX3BvcG92ZXJfZ2xvYmFsIn0sIHsiaWNvbk5hbWUiOiAiaW5mbyIsICJ0ZXh0IjogIk5hbWUgb2YgdGhlIGNvb2tpZSBnaXZlbiB0byBjbGllbnRzLiJ9XX0sICJTRVNTSU9OU19JRExJTkdfVElNRU9VVCI6IHsiY29udGV4dCI6ICJnbG9iYWwiLCAiZGVmYXVsdCI6ICIxODAwIiwgImhlbHAiOiAiTWF4aW11bSB0aW1lIChpbiBzZWNvbmRzKSBvZiBpbmFjdGl2aXR5IGJlZm9yZSB0aGUgc2Vzc2lvbiBpcyBpbnZhbGlkYXRlZC4iLCAiaWQiOiAic2Vzc2lvbnMtaWRsaW5nLXRpbWVvdXQiLCAibGFiZWwiOiAiU2Vzc2lvbnMgaWRsaW5nIHRpbWVvdXQiLCAicmVnZXgiOiAiXlxcZCskIiwgInR5cGUiOiAidGV4dCIsICJjb250YWluZXJDbGFzcyI6ICJ6LTQiLCAicGF0dGVybiI6ICJeXFxkKyQiLCAiaW5wVHlwZSI6ICJpbnB1dCIsICJuYW1lIjogIlNlc3Npb25zIGlkbGluZyB0aW1lb3V0IiwgImNvbHVtbnMiOiB7InBjIjogNCwgInRhYmxldCI6IDYsICJtb2JpbGUiOiAxMn0sICJkaXNhYmxlZCI6IGZhbHNlLCAidmFsdWUiOiAiMTgwMCIsICJtZXRob2QiOiAiZGVmYXVsdCIsICJwcmV2X3ZhbHVlIjogIjE4MDAiLCAicG9wb3ZlcnMiOiBbeyJpY29uTmFtZSI6ICJnbG9iZSIsICJ0ZXh0IjogImlucF9wb3BvdmVyX2dsb2JhbCJ9LCB7Imljb25OYW1lIjogImluZm8iLCAidGV4dCI6ICJNYXhpbXVtIHRpbWUgKGluIHNlY29uZHMpIG9mIGluYWN0aXZpdHkgYmVmb3JlIHRoZSBzZXNzaW9uIGlzIGludmFsaWRhdGVkLiJ9XX0sICJTRVNTSU9OU19ST0xMSU5HX1RJTUVPVVQiOiB7ImNvbnRleHQiOiAiZ2xvYmFsIiwgImRlZmF1bHQiOiAiMzYwMCIsICJoZWxwIjogIk1heGltdW0gdGltZSAoaW4gc2Vjb25kcykgYmVmb3JlIGEgc2Vzc2lvbiBtdXN0IGJlIHJlbmV3ZWQuIiwgImlkIjogInNlc3Npb25zLXJvbGxpbmctdGltZW91dCIsICJsYWJlbCI6ICJTZXNzaW9ucyByb2xsaW5nIHRpbWVvdXQiLCAicmVnZXgiOiAiXlxcZCskIiwgInR5cGUiOiAidGV4dCIsICJjb250YWluZXJDbGFzcyI6ICJ6LTMiLCAicGF0dGVybiI6ICJeXFxkKyQiLCAiaW5wVHlwZSI6ICJpbnB1dCIsICJuYW1lIjogIlNlc3Npb25zIHJvbGxpbmcgdGltZW91dCIsICJjb2x1bW5zIjogeyJwYyI6IDQsICJ0YWJsZXQiOiA2LCAibW9iaWxlIjogMTJ9LCAiZGlzYWJsZWQiOiBmYWxzZSwgInZhbHVlIjogIjM2MDAiLCAibWV0aG9kIjogImRlZmF1bHQiLCAicHJldl92YWx1ZSI6ICIzNjAwIiwgInBvcG92ZXJzIjogW3siaWNvbk5hbWUiOiAiZ2xvYmUiLCAidGV4dCI6ICJpbnBfcG9wb3Zlcl9nbG9iYWwifSwgeyJpY29uTmFtZSI6ICJpbmZvIiwgInRleHQiOiAiTWF4aW11bSB0aW1lIChpbiBzZWNvbmRzKSBiZWZvcmUgYSBzZXNzaW9uIG11c3QgYmUgcmVuZXdlZC4ifV19LCAiU0VTU0lPTlNfQUJTT0xVVEVfVElNRU9VVCI6IHsiY29udGV4dCI6ICJnbG9iYWwiLCAiZGVmYXVsdCI6ICI4NjQwMCIsICJoZWxwIjogIk1heGltdW0gdGltZSAoaW4gc2Vjb25kcykgYmVmb3JlIGEgc2Vzc2lvbiBpcyBkZXN0cm95ZWQuIiwgImlkIjogInNlc3Npb25zLWFic29sdXRlLXRpbWVvdXQiLCAibGFiZWwiOiAiU2Vzc2lvbnMgYWJzb2x1dGUgdGltZW91dCIsICJyZWdleCI6ICJeXFxkKyQiLCAidHlwZSI6ICJ0ZXh0IiwgImNvbnRhaW5lckNsYXNzIjogInotMiIsICJwYXR0ZXJuIjogIl5cXGQrJCIsICJpbnBUeXBlIjogImlucHV0IiwgIm5hbWUiOiAiU2Vzc2lvbnMgYWJzb2x1dGUgdGltZW91dCIsICJjb2x1bW5zIjogeyJwYyI6IDQsICJ0YWJsZXQiOiA2LCAibW9iaWxlIjogMTJ9LCAiZGlzYWJsZWQiOiBmYWxzZSwgInZhbHVlIjogIjg2NDAwIiwgIm1ldGhvZCI6ICJkZWZhdWx0IiwgInByZXZfdmFsdWUiOiAiODY0MDAiLCAicG9wb3ZlcnMiOiBbeyJpY29uTmFtZSI6ICJnbG9iZSIsICJ0ZXh0IjogImlucF9wb3BvdmVyX2dsb2JhbCJ9LCB7Imljb25OYW1lIjogImluZm8iLCAidGV4dCI6ICJNYXhpbXVtIHRpbWUgKGluIHNlY29uZHMpIGJlZm9yZSBhIHNlc3Npb24gaXMgZGVzdHJveWVkLiJ9XX0sICJTRVNTSU9OU19DSEVDS19JUCI6IHsiY29udGV4dCI6ICJnbG9iYWwiLCAiZGVmYXVsdCI6ICJ5ZXMiLCAiaGVscCI6ICJEZXN0cm95IHNlc3Npb24gaWYgSVAgYWRkcmVzcyBpcyBkaWZmZXJlbnQgdGhhbiBvcmlnaW5hbCBvbmUuIiwgImlkIjogInNlc3Npb25zLWNoZWNrLWlwIiwgImxhYmVsIjogIlNlc3Npb25zIGNoZWNrIElQIiwgInJlZ2V4IjogIl4oeWVzfG5vKSQiLCAidHlwZSI6ICJjaGVjayIsICJjb250YWluZXJDbGFzcyI6ICJ6LTEiLCAicGF0dGVybiI6ICJeKHllc3xubykkIiwgImlucFR5cGUiOiAiY2hlY2tib3giLCAibmFtZSI6ICJTZXNzaW9ucyBjaGVjayBJUCIsICJjb2x1bW5zIjogeyJwYyI6IDQsICJ0YWJsZXQiOiA2LCAibW9iaWxlIjogMTJ9LCAiZGlzYWJsZWQiOiBmYWxzZSwgInZhbHVlIjogInllcyIsICJtZXRob2QiOiAiZGVmYXVsdCIsICJwcmV2X3ZhbHVlIjogInllcyIsICJwb3BvdmVycyI6IFt7Imljb25OYW1lIjogImdsb2JlIiwgInRleHQiOiAiaW5wX3BvcG92ZXJfZ2xvYmFsIn0sIHsiaWNvbk5hbWUiOiAiaW5mbyIsICJ0ZXh0IjogIkRlc3Ryb3kgc2Vzc2lvbiBpZiBJUCBhZGRyZXNzIGlzIGRpZmZlcmVudCB0aGFuIG9yaWdpbmFsIG9uZS4ifV19LCAiU0VTU0lPTlNfQ0hFQ0tfVVNFUl9BR0VOVCI6IHsiY29udGV4dCI6ICJnbG9iYWwiLCAiZGVmYXVsdCI6ICJ5ZXMiLCAiaGVscCI6ICJEZXN0cm95IHNlc3Npb24gaWYgVXNlci1BZ2VudCBpcyBkaWZmZXJlbnQgdGhhbiBvcmlnaW5hbCBvbmUuIiwgImlkIjogInNlc3Npb25zLXVzZXItYWdlbnQiLCAibGFiZWwiOiAiU2Vzc2lvbnMgY2hlY2sgVXNlci1BZ2VudCIsICJyZWdleCI6ICJeKHllc3xubykkIiwgInR5cGUiOiAiY2hlY2siLCAiY29udGFpbmVyQ2xhc3MiOiAiei0wIiwgInBhdHRlcm4iOiAiXih5ZXN8bm8pJCIsICJpbnBUeXBlIjogImNoZWNrYm94IiwgIm5hbWUiOiAiU2Vzc2lvbnMgY2hlY2sgVXNlci1BZ2VudCIsICJjb2x1bW5zIjogeyJwYyI6IDQsICJ0YWJsZXQiOiA2LCAibW9iaWxlIjogMTJ9LCAiZGlzYWJsZWQiOiBmYWxzZSwgInZhbHVlIjogInllcyIsICJtZXRob2QiOiAiZGVmYXVsdCIsICJwcmV2X3ZhbHVlIjogInllcyIsICJwb3BvdmVycyI6IFt7Imljb25OYW1lIjogImdsb2JlIiwgInRleHQiOiAiaW5wX3BvcG92ZXJfZ2xvYmFsIn0sIHsiaWNvbk5hbWUiOiAiaW5mbyIsICJ0ZXh0IjogIkRlc3Ryb3kgc2Vzc2lvbiBpZiBVc2VyLUFnZW50IGlzIGRpZmZlcmVudCB0aGFuIG9yaWdpbmFsIG9uZS4ifV19fSwgImNoZWNrc3VtIjogbnVsbH0sIHsiaWQiOiAidWkiLCAic3RyZWFtIjogIm5vIiwgIm5hbWUiOiAiVUkiLCAiZGVzY3JpcHRpb24iOiAiSW50ZWdyYXRlIGVhc2lseSB0aGUgQnVua2VyV2ViIFVJLiIsICJ2ZXJzaW9uIjogIjEuMCIsICJ0eXBlIjogImNvcmUiLCAibWV0aG9kIjogIm1hbnVhbCIsICJwYWdlIjogZmFsc2UsICJzZXR0aW5ncyI6IHsiVVNFX1VJIjogeyJjb250ZXh0IjogIm11bHRpc2l0ZSIsICJkZWZhdWx0IjogIm5vIiwgImhlbHAiOiAiVXNlIFVJIiwgImlkIjogInVzZS11aSIsICJsYWJlbCI6ICJVc2UgVUkiLCAicmVnZXgiOiAiXih5ZXN8bm8pJCIsICJ0eXBlIjogImNoZWNrIiwgImNvbnRhaW5lckNsYXNzIjogInotMSIsICJwYXR0ZXJuIjogIl4oeWVzfG5vKSQiLCAiaW5wVHlwZSI6ICJjaGVja2JveCIsICJuYW1lIjogIlVzZSBVSSIsICJjb2x1bW5zIjogeyJwYyI6IDQsICJ0YWJsZXQiOiA2LCAibW9iaWxlIjogMTJ9LCAiZGlzYWJsZWQiOiBmYWxzZSwgInZhbHVlIjogIm5vIiwgIm1ldGhvZCI6ICJkZWZhdWx0IiwgInByZXZfdmFsdWUiOiAibm8iLCAicG9wb3ZlcnMiOiBbeyJpY29uTmFtZSI6ICJkaXNrIiwgInRleHQiOiAiaW5wX3BvcG92ZXJfbXVsdGlzaXRlIn0sIHsiaWNvbk5hbWUiOiAiaW5mbyIsICJ0ZXh0IjogIlVzZSBVSSJ9XX0sICJVSV9IT1NUIjogeyJjb250ZXh0IjogImdsb2JhbCIsICJkZWZhdWx0IjogIiIsICJoZWxwIjogIkFkZHJlc3Mgb2YgdGhlIHdlYiBVSSB1c2VkIGZvciBpbml0aWFsIHNldHVwIiwgImlkIjogInVpLWhvc3QiLCAibGFiZWwiOiAiVUkgaG9zdCIsICJyZWdleCI6ICJeLiokIiwgInR5cGUiOiAidGV4dCIsICJjb250YWluZXJDbGFzcyI6ICJ6LTAiLCAicGF0dGVybiI6ICJeLiokIiwgImlucFR5cGUiOiAiaW5wdXQiLCAibmFtZSI6ICJVSSBob3N0IiwgImNvbHVtbnMiOiB7InBjIjogNCwgInRhYmxldCI6IDYsICJtb2JpbGUiOiAxMn0sICJkaXNhYmxlZCI6IGZhbHNlLCAidmFsdWUiOiAiIiwgIm1ldGhvZCI6ICJkZWZhdWx0IiwgInByZXZfdmFsdWUiOiAiIiwgInBvcG92ZXJzIjogW3siaWNvbk5hbWUiOiAiZ2xvYmUiLCAidGV4dCI6ICJpbnBfcG9wb3Zlcl9nbG9iYWwifSwgeyJpY29uTmFtZSI6ICJpbmZvIiwgInRleHQiOiAiQWRkcmVzcyBvZiB0aGUgd2ViIFVJIHVzZWQgZm9yIGluaXRpYWwgc2V0dXAifV19fSwgImNoZWNrc3VtIjogbnVsbH0sIHsiaWQiOiAid2hpdGVsaXN0IiwgInN0cmVhbSI6ICJwYXJ0aWFsIiwgIm5hbWUiOiAiV2hpdGVsaXN0IiwgImRlc2NyaXB0aW9uIjogIkFsbG93IGFjY2VzcyBiYXNlZCBvbiBpbnRlcm5hbCBhbmQgZXh0ZXJuYWwgSVAvbmV0d29yay9yRE5TL0FTTiB3aGl0ZWxpc3RzLiIsICJ2ZXJzaW9uIjogIjEuMCIsICJ0eXBlIjogImNvcmUiLCAibWV0aG9kIjogIm1hbnVhbCIsICJwYWdlIjogdHJ1ZSwgInNldHRpbmdzIjogeyJVU0VfV0hJVEVMSVNUIjogeyJjb250ZXh0IjogIm11bHRpc2l0ZSIsICJkZWZhdWx0IjogInllcyIsICJoZWxwIjogIkFjdGl2YXRlIHdoaXRlbGlzdCBmZWF0dXJlLiIsICJpZCI6ICJ1c2Utd2hpdGVsaXN0IiwgImxhYmVsIjogIkFjdGl2YXRlIHdoaXRlbGlzdGluZyIsICJyZWdleCI6ICJeKHllc3xubykkIiwgInR5cGUiOiAiY2hlY2siLCAiY29udGFpbmVyQ2xhc3MiOiAiei0xMSIsICJwYXR0ZXJuIjogIl4oeWVzfG5vKSQiLCAiaW5wVHlwZSI6ICJjaGVja2JveCIsICJuYW1lIjogIkFjdGl2YXRlIHdoaXRlbGlzdGluZyIsICJjb2x1bW5zIjogeyJwYyI6IDQsICJ0YWJsZXQiOiA2LCAibW9iaWxlIjogMTJ9LCAiZGlzYWJsZWQiOiB0cnVlLCAidmFsdWUiOiAibm8iLCAibWV0aG9kIjogInNjaGVkdWxlciIsICJwcmV2X3ZhbHVlIjogIm5vIiwgInBvcG92ZXJzIjogW3siaWNvbk5hbWUiOiAidHJlc3Bhc3MiLCAidGV4dCI6ICJpbnBfcG9wb3Zlcl9tZXRob2RfZGlzYWJsZWQifSwgeyJpY29uTmFtZSI6ICJkaXNrIiwgInRleHQiOiAiaW5wX3BvcG92ZXJfbXVsdGlzaXRlIn0sIHsiaWNvbk5hbWUiOiAiaW5mbyIsICJ0ZXh0IjogIkFjdGl2YXRlIHdoaXRlbGlzdCBmZWF0dXJlLiJ9XX0sICJXSElURUxJU1RfSVAiOiB7ImNvbnRleHQiOiAibXVsdGlzaXRlIiwgImRlZmF1bHQiOiAiMjAuMTkxLjQ1LjIxMiA0MC44OC4yMS4yMzUgNDAuNzYuMTczLjE1MSA0MC43Ni4xNjMuNyAyMC4xODUuNzkuNDcgNTIuMTQyLjI2LjE3NSAyMC4xODUuNzkuMTUgNTIuMTQyLjI0LjE0OSA0MC43Ni4xNjIuMjA4IDQwLjc2LjE2My4yMyA0MC43Ni4xNjIuMTkxIDQwLjc2LjE2Mi4yNDciLCAiaGVscCI6ICJMaXN0IG9mIElQL25ldHdvcmssIHNlcGFyYXRlZCB3aXRoIHNwYWNlcywgdG8gcHV0IGludG8gdGhlIHdoaXRlbGlzdC4iLCAiaWQiOiAid2hpdGVsaXN0LWlwIiwgImxhYmVsIjogIldoaXRlbGlzdCBJUC9uZXR3b3JrIiwgInJlZ2V4IjogIl4oPyEgKSggKigoKFxcYjI1WzAtNV18XFxiMlswLTRdXFxkfFxcYlswMV0/XFxkXFxkPykoXFwuKDI1WzAtNV18MlswLTRdXFxkfFswMV0/XFxkXFxkPykpezN9KShcXC8oWzEtMl1bMC05XT98M1swLTJdP3xbMDQtOV0pKT98KChbMC05YS1mQS1GXXsxLDR9Oil7N31bMC05YS1mQS1GXXsxLDR9fChbMC05YS1mQS1GXXsxLDR9Oil7MSw3fTp8KFswLTlhLWZBLUZdezEsNH06KXsxLDZ9OlswLTlhLWZBLUZdezEsNH18KFswLTlhLWZBLUZdezEsNH06KXsxLDV9KDpbMC05YS1mQS1GXXsxLDR9KXsxLDJ9fChbMC05YS1mQS1GXXsxLDR9Oil7MSw0fSg6WzAtOWEtZkEtRl17MSw0fSl7MSwzfXwoWzAtOWEtZkEtRl17MSw0fTopezEsM30oOlswLTlhLWZBLUZdezEsNH0pezEsNH18KFswLTlhLWZBLUZdezEsNH06KXsxLDJ9KDpbMC05YS1mQS1GXXsxLDR9KXsxLDV9fFswLTlhLWZBLUZdezEsNH06KCg6WzAtOWEtZkEtRl17MSw0fSl7MSw2fSl8OigoOlswLTlhLWZBLUZdezEsNH0pezEsN318Oil8ZmU4MDooOlswLTlhLWZBLUZdWnswLDR9KXswLDR9JVswLTlhLXpBLVpdK3w6OihmZmZmKDowezEsNH0pPzopPygoMjVbMC01XXwoMlswLTRdfDE/XFxkKT9cXGQpXFwuKXszfSgyNVswLTVdfCgyWzAtNF18MT9cXGQpP1xcZCl8KFswLTlhLWZBLUZdezEsNH06KXsxLDR9OigoMjVbMC01XXwoMlswLTRdfDE/XFxkKT9cXGQpXFwuKXszfSgyNVswLTVdfCgyWzAtNF18MT9cXGQpP1xcZCkpKFxcLygxMlswLThdfDFbMDFdWzAtOV18WzAtOV1bMC05XT8pKT8pKD8hLipcXERcXDIoW15cXGRcXC9dfCQpKSAqKSokIiwgInR5cGUiOiAidGV4dCIsICJjb250YWluZXJDbGFzcyI6ICJ6LTEwIiwgInBhdHRlcm4iOiAiXig/ISApKCAqKCgoXFxiMjVbMC01XXxcXGIyWzAtNF1cXGR8XFxiWzAxXT9cXGRcXGQ/KShcXC4oMjVbMC01XXwyWzAtNF1cXGR8WzAxXT9cXGRcXGQ/KSl7M30pKFxcLyhbMS0yXVswLTldP3wzWzAtMl0/fFswNC05XSkpP3woKFswLTlhLWZBLUZdezEsNH06KXs3fVswLTlhLWZBLUZdezEsNH18KFswLTlhLWZBLUZdezEsNH06KXsxLDd9OnwoWzAtOWEtZkEtRl17MSw0fTopezEsNn06WzAtOWEtZkEtRl17MSw0fXwoWzAtOWEtZkEtRl17MSw0fTopezEsNX0oOlswLTlhLWZBLUZdezEsNH0pezEsMn18KFswLTlhLWZBLUZdezEsNH06KXsxLDR9KDpbMC05YS1mQS1GXXsxLDR9KXsxLDN9fChbMC05YS1mQS1GXXsxLDR9Oil7MSwzfSg6WzAtOWEtZkEtRl17MSw0fSl7MSw0fXwoWzAtOWEtZkEtRl17MSw0fTopezEsMn0oOlswLTlhLWZBLUZdezEsNH0pezEsNX18WzAtOWEtZkEtRl17MSw0fTooKDpbMC05YS1mQS1GXXsxLDR9KXsxLDZ9KXw6KCg6WzAtOWEtZkEtRl17MSw0fSl7MSw3fXw6KXxmZTgwOig6WzAtOWEtZkEtRl1aezAsNH0pezAsNH0lWzAtOWEtekEtWl0rfDo6KGZmZmYoOjB7MSw0fSk/Oik/KCgyNVswLTVdfCgyWzAtNF18MT9cXGQpP1xcZClcXC4pezN9KDI1WzAtNV18KDJbMC00XXwxP1xcZCk/XFxkKXwoWzAtOWEtZkEtRl17MSw0fTopezEsNH06KCgyNVswLTVdfCgyWzAtNF18MT9cXGQpP1xcZClcXC4pezN9KDI1WzAtNV18KDJbMC00XXwxP1xcZCk/XFxkKSkoXFwvKDEyWzAtOF18MVswMV1bMC05XXxbMC05XVswLTldPykpPykoPyEuKlxcRFxcMihbXlxcZFxcL118JCkpICopKiQiLCAiaW5wVHlwZSI6ICJpbnB1dCIsICJuYW1lIjogIldoaXRlbGlzdCBJUC9uZXR3b3JrIiwgImNvbHVtbnMiOiB7InBjIjogNCwgInRhYmxldCI6IDYsICJtb2JpbGUiOiAxMn0sICJkaXNhYmxlZCI6IGZhbHNlLCAidmFsdWUiOiAiMjAuMTkxLjQ1LjIxMiA0MC44OC4yMS4yMzUgNDAuNzYuMTczLjE1MSA0MC43Ni4xNjMuNyAyMC4xODUuNzkuNDcgNTIuMTQyLjI2LjE3NSAyMC4xODUuNzkuMTUgNTIuMTQyLjI0LjE0OSA0MC43Ni4xNjIuMjA4IDQwLjc2LjE2My4yMyA0MC43Ni4xNjIuMTkxIDQwLjc2LjE2Mi4yNDciLCAibWV0aG9kIjogImRlZmF1bHQiLCAicHJldl92YWx1ZSI6ICIyMC4xOTEuNDUuMjEyIDQwLjg4LjIxLjIzNSA0MC43Ni4xNzMuMTUxIDQwLjc2LjE2My43IDIwLjE4NS43OS40NyA1Mi4xNDIuMjYuMTc1IDIwLjE4NS43OS4xNSA1Mi4xNDIuMjQuMTQ5IDQwLjc2LjE2Mi4yMDggNDAuNzYuMTYzLjIzIDQwLjc2LjE2Mi4xOTEgNDAuNzYuMTYyLjI0NyIsICJwb3BvdmVycyI6IFt7Imljb25OYW1lIjogImRpc2siLCAidGV4dCI6ICJpbnBfcG9wb3Zlcl9tdWx0aXNpdGUifSwgeyJpY29uTmFtZSI6ICJpbmZvIiwgInRleHQiOiAiTGlzdCBvZiBJUC9uZXR3b3JrLCBzZXBhcmF0ZWQgd2l0aCBzcGFjZXMsIHRvIHB1dCBpbnRvIHRoZSB3aGl0ZWxpc3QuIn1dfSwgIldISVRFTElTVF9SRE5TIjogeyJjb250ZXh0IjogIm11bHRpc2l0ZSIsICJkZWZhdWx0IjogIi5nb29nbGUuY29tIC5nb29nbGVib3QuY29tIC55YW5kZXgucnUgLnlhbmRleC5uZXQgLnlhbmRleC5jb20gLnNlYXJjaC5tc24uY29tIC5iYWlkdS5jb20gLmJhaWR1LmpwIC5jcmF3bC55YWhvby5uZXQgLmZ3ZC5saW5rZWRpbi5jb20gLnR3aXR0ZXIuY29tIC50d3R0ci5jb20gLmRpc2NvcmQuY29tIiwgImhlbHAiOiAiTGlzdCBvZiByZXZlcnNlIEROUyBzdWZmaXhlcywgc2VwYXJhdGVkIHdpdGggc3BhY2VzLCB0byB3aGl0ZWxpc3QuIiwgImlkIjogIndoaXRlbGlzdC1yZG5zIiwgImxhYmVsIjogIldoaXRlbGlzdCByZXZlcnNlIEROUyIsICJyZWdleCI6ICJeKCAqKChbXiBdKykoPyEuKlxcMyggfCQpKSkgKikqJCIsICJ0eXBlIjogInRleHQiLCAiY29udGFpbmVyQ2xhc3MiOiAiei05IiwgInBhdHRlcm4iOiAiXiggKigoW14gXSspKD8hLipcXDMoIHwkKSkpICopKiQiLCAiaW5wVHlwZSI6ICJpbnB1dCIsICJuYW1lIjogIldoaXRlbGlzdCByZXZlcnNlIEROUyIsICJjb2x1bW5zIjogeyJwYyI6IDQsICJ0YWJsZXQiOiA2LCAibW9iaWxlIjogMTJ9LCAiZGlzYWJsZWQiOiBmYWxzZSwgInZhbHVlIjogIi5nb29nbGUuY29tIC5nb29nbGVib3QuY29tIC55YW5kZXgucnUgLnlhbmRleC5uZXQgLnlhbmRleC5jb20gLnNlYXJjaC5tc24uY29tIC5iYWlkdS5jb20gLmJhaWR1LmpwIC5jcmF3bC55YWhvby5uZXQgLmZ3ZC5saW5rZWRpbi5jb20gLnR3aXR0ZXIuY29tIC50d3R0ci5jb20gLmRpc2NvcmQuY29tIiwgIm1ldGhvZCI6ICJkZWZhdWx0IiwgInByZXZfdmFsdWUiOiAiLmdvb2dsZS5jb20gLmdvb2dsZWJvdC5jb20gLnlhbmRleC5ydSAueWFuZGV4Lm5ldCAueWFuZGV4LmNvbSAuc2VhcmNoLm1zbi5jb20gLmJhaWR1LmNvbSAuYmFpZHUuanAgLmNyYXdsLnlhaG9vLm5ldCAuZndkLmxpbmtlZGluLmNvbSAudHdpdHRlci5jb20gLnR3dHRyLmNvbSAuZGlzY29yZC5jb20iLCAicG9wb3ZlcnMiOiBbeyJpY29uTmFtZSI6ICJkaXNrIiwgInRleHQiOiAiaW5wX3BvcG92ZXJfbXVsdGlzaXRlIn0sIHsiaWNvbk5hbWUiOiAiaW5mbyIsICJ0ZXh0IjogIkxpc3Qgb2YgcmV2ZXJzZSBETlMgc3VmZml4ZXMsIHNlcGFyYXRlZCB3aXRoIHNwYWNlcywgdG8gd2hpdGVsaXN0LiJ9XX0sICJXSElURUxJU1RfUkROU19HTE9CQUwiOiB7ImNvbnRleHQiOiAibXVsdGlzaXRlIiwgImRlZmF1bHQiOiAieWVzIiwgImhlbHAiOiAiT25seSBwZXJmb3JtIFJETlMgd2hpdGVsaXN0IGNoZWNrcyBvbiBnbG9iYWwgSVAgYWRkcmVzc2VzLiIsICJpZCI6ICJ3aGl0ZWxpc3QtcmRucy1nbG9iYWwiLCAibGFiZWwiOiAiV2hpdGVsaXN0IHJldmVyc2UgRE5TIGdsb2JhbCBJUHMiLCAicmVnZXgiOiAiXih5ZXN8bm8pJCIsICJ0eXBlIjogImNoZWNrIiwgImNvbnRhaW5lckNsYXNzIjogInotOCIsICJwYXR0ZXJuIjogIl4oeWVzfG5vKSQiLCAiaW5wVHlwZSI6ICJjaGVja2JveCIsICJuYW1lIjogIldoaXRlbGlzdCByZXZlcnNlIEROUyBnbG9iYWwgSVBzIiwgImNvbHVtbnMiOiB7InBjIjogNCwgInRhYmxldCI6IDYsICJtb2JpbGUiOiAxMn0sICJkaXNhYmxlZCI6IGZhbHNlLCAidmFsdWUiOiAieWVzIiwgIm1ldGhvZCI6ICJkZWZhdWx0IiwgInByZXZfdmFsdWUiOiAieWVzIiwgInBvcG92ZXJzIjogW3siaWNvbk5hbWUiOiAiZGlzayIsICJ0ZXh0IjogImlucF9wb3BvdmVyX211bHRpc2l0ZSJ9LCB7Imljb25OYW1lIjogImluZm8iLCAidGV4dCI6ICJPbmx5IHBlcmZvcm0gUkROUyB3aGl0ZWxpc3QgY2hlY2tzIG9uIGdsb2JhbCBJUCBhZGRyZXNzZXMuIn1dfSwgIldISVRFTElTVF9BU04iOiB7ImNvbnRleHQiOiAibXVsdGlzaXRlIiwgImRlZmF1bHQiOiAiMzI5MzQiLCAiaGVscCI6ICJMaXN0IG9mIEFTTiBudW1iZXJzLCBzZXBhcmF0ZWQgd2l0aCBzcGFjZXMsIHRvIHdoaXRlbGlzdC4iLCAiaWQiOiAid2hpdGVsaXN0LWFzbiIsICJsYWJlbCI6ICJXaGl0ZWxpc3QgQVNOIiwgInJlZ2V4IjogIl5eKCAqKChBU04/KT8oXFxkKylcXGIoPyEuKltTTiBdXFw0XFxiKSkgKikqJCIsICJ0eXBlIjogInRleHQiLCAiY29udGFpbmVyQ2xhc3MiOiAiei03IiwgInBhdHRlcm4iOiAiXl4oICooKEFTTj8pPyhcXGQrKVxcYig/IS4qW1NOIF1cXDRcXGIpKSAqKSokIiwgImlucFR5cGUiOiAiaW5wdXQiLCAibmFtZSI6ICJXaGl0ZWxpc3QgQVNOIiwgImNvbHVtbnMiOiB7InBjIjogNCwgInRhYmxldCI6IDYsICJtb2JpbGUiOiAxMn0sICJkaXNhYmxlZCI6IGZhbHNlLCAidmFsdWUiOiAiMzI5MzQiLCAibWV0aG9kIjogImRlZmF1bHQiLCAicHJldl92YWx1ZSI6ICIzMjkzNCIsICJwb3BvdmVycyI6IFt7Imljb25OYW1lIjogImRpc2siLCAidGV4dCI6ICJpbnBfcG9wb3Zlcl9tdWx0aXNpdGUifSwgeyJpY29uTmFtZSI6ICJpbmZvIiwgInRleHQiOiAiTGlzdCBvZiBBU04gbnVtYmVycywgc2VwYXJhdGVkIHdpdGggc3BhY2VzLCB0byB3aGl0ZWxpc3QuIn1dfSwgIldISVRFTElTVF9VU0VSX0FHRU5UIjogeyJjb250ZXh0IjogIm11bHRpc2l0ZSIsICJkZWZhdWx0IjogIiIsICJoZWxwIjogIkxpc3Qgb2YgVXNlci1BZ2VudCAoUENSRSByZWdleCksIHNlcGFyYXRlZCB3aXRoIHNwYWNlcywgdG8gd2hpdGVsaXN0LiIsICJpZCI6ICJ3aGl0ZWxpc3QtdXNlci1hZ2VudCIsICJsYWJlbCI6ICJXaGl0ZWxpc3QgVXNlci1BZ2VudCIsICJyZWdleCI6ICJeLiokIiwgInR5cGUiOiAidGV4dCIsICJjb250YWluZXJDbGFzcyI6ICJ6LTYiLCAicGF0dGVybiI6ICJeLiokIiwgImlucFR5cGUiOiAiaW5wdXQiLCAibmFtZSI6ICJXaGl0ZWxpc3QgVXNlci1BZ2VudCIsICJjb2x1bW5zIjogeyJwYyI6IDQsICJ0YWJsZXQiOiA2LCAibW9iaWxlIjogMTJ9LCAiZGlzYWJsZWQiOiBmYWxzZSwgInZhbHVlIjogIiIsICJtZXRob2QiOiAiZGVmYXVsdCIsICJwcmV2X3ZhbHVlIjogIiIsICJwb3BvdmVycyI6IFt7Imljb25OYW1lIjogImRpc2siLCAidGV4dCI6ICJpbnBfcG9wb3Zlcl9tdWx0aXNpdGUifSwgeyJpY29uTmFtZSI6ICJpbmZvIiwgInRleHQiOiAiTGlzdCBvZiBVc2VyLUFnZW50IChQQ1JFIHJlZ2V4KSwgc2VwYXJhdGVkIHdpdGggc3BhY2VzLCB0byB3aGl0ZWxpc3QuIn1dfSwgIldISVRFTElTVF9VUkkiOiB7ImNvbnRleHQiOiAibXVsdGlzaXRlIiwgImRlZmF1bHQiOiAiIiwgImhlbHAiOiAiTGlzdCBvZiBVUkkgKFBDUkUgcmVnZXgpLCBzZXBhcmF0ZWQgd2l0aCBzcGFjZXMsIHRvIHdoaXRlbGlzdC4iLCAiaWQiOiAid2hpdGVsaXN0LXVyaSIsICJsYWJlbCI6ICJXaGl0ZWxpc3QgVVJJIiwgInJlZ2V4IjogIl4oICooLiopKD8hLipcXDIoPyEuKSkgKikqJCIsICJ0eXBlIjogInRleHQiLCAiY29udGFpbmVyQ2xhc3MiOiAiei01IiwgInBhdHRlcm4iOiAiXiggKiguKikoPyEuKlxcMig/IS4pKSAqKSokIiwgImlucFR5cGUiOiAiaW5wdXQiLCAibmFtZSI6ICJXaGl0ZWxpc3QgVVJJIiwgImNvbHVtbnMiOiB7InBjIjogNCwgInRhYmxldCI6IDYsICJtb2JpbGUiOiAxMn0sICJkaXNhYmxlZCI6IGZhbHNlLCAidmFsdWUiOiAiIiwgIm1ldGhvZCI6ICJkZWZhdWx0IiwgInByZXZfdmFsdWUiOiAiIiwgInBvcG92ZXJzIjogW3siaWNvbk5hbWUiOiAiZGlzayIsICJ0ZXh0IjogImlucF9wb3BvdmVyX211bHRpc2l0ZSJ9LCB7Imljb25OYW1lIjogImluZm8iLCAidGV4dCI6ICJMaXN0IG9mIFVSSSAoUENSRSByZWdleCksIHNlcGFyYXRlZCB3aXRoIHNwYWNlcywgdG8gd2hpdGVsaXN0LiJ9XX0sICJXSElURUxJU1RfSVBfVVJMUyI6IHsiY29udGV4dCI6ICJnbG9iYWwiLCAiZGVmYXVsdCI6ICIiLCAiaGVscCI6ICJMaXN0IG9mIFVSTHMsIHNlcGFyYXRlZCB3aXRoIHNwYWNlcywgY29udGFpbmluZyBnb29kIElQL25ldHdvcmsgdG8gd2hpdGVsaXN0LiIsICJpZCI6ICJ3aGl0ZWxpc3QtaXAtdXJscyIsICJsYWJlbCI6ICJXaGl0ZWxpc3QgSVAvbmV0d29yayBVUkxzIiwgInJlZ2V4IjogIl4oICooKGh0dHBzPzpcXC9cXC98ZmlsZTpcXC9cXC9cXC8pW1xcLVxcd0A6JS4rfiM9XStbXFwtXFx3XFwoXFwpIUA6JSsufiM/JlxcLz0kXSopKD8hLipcXDIoPyEuKSkgKikqJCIsICJ0eXBlIjogInRleHQiLCAiY29udGFpbmVyQ2xhc3MiOiAiei00IiwgInBhdHRlcm4iOiAiXiggKigoaHR0cHM/OlxcL1xcL3xmaWxlOlxcL1xcL1xcLylbXFwtXFx3QDolLit+Iz1dK1tcXC1cXHdcXChcXCkhQDolKy5+Iz8mXFwvPSRdKikoPyEuKlxcMig/IS4pKSAqKSokIiwgImlucFR5cGUiOiAiaW5wdXQiLCAibmFtZSI6ICJXaGl0ZWxpc3QgSVAvbmV0d29yayBVUkxzIiwgImNvbHVtbnMiOiB7InBjIjogNCwgInRhYmxldCI6IDYsICJtb2JpbGUiOiAxMn0sICJkaXNhYmxlZCI6IGZhbHNlLCAidmFsdWUiOiAiIiwgIm1ldGhvZCI6ICJkZWZhdWx0IiwgInByZXZfdmFsdWUiOiAiIiwgInBvcG92ZXJzIjogW3siaWNvbk5hbWUiOiAiZ2xvYmUiLCAidGV4dCI6ICJpbnBfcG9wb3Zlcl9nbG9iYWwifSwgeyJpY29uTmFtZSI6ICJpbmZvIiwgInRleHQiOiAiTGlzdCBvZiBVUkxzLCBzZXBhcmF0ZWQgd2l0aCBzcGFjZXMsIGNvbnRhaW5pbmcgZ29vZCBJUC9uZXR3b3JrIHRvIHdoaXRlbGlzdC4ifV19LCAiV0hJVEVMSVNUX1JETlNfVVJMUyI6IHsiY29udGV4dCI6ICJnbG9iYWwiLCAiZGVmYXVsdCI6ICIiLCAiaGVscCI6ICJMaXN0IG9mIFVSTHMsIHNlcGFyYXRlZCB3aXRoIHNwYWNlcywgY29udGFpbmluZyByZXZlcnNlIEROUyBzdWZmaXhlcyB0byB3aGl0ZWxpc3QuIiwgImlkIjogIndoaXRlbGlzdC1yZG5zLXVybHMiLCAibGFiZWwiOiAiV2hpdGVsaXN0IHJldmVyc2UgRE5TIFVSTHMiLCAicmVnZXgiOiAiXiggKigoaHR0cHM/OlxcL1xcL3xmaWxlOlxcL1xcL1xcLylbXFwtXFx3QDolLit+Iz1dK1tcXC1cXHdcXChcXCkhQDolKy5+Iz8mXFwvPSRdKikoPyEuKlxcMig/IS4pKSAqKSokIiwgInR5cGUiOiAidGV4dCIsICJjb250YWluZXJDbGFzcyI6ICJ6LTMiLCAicGF0dGVybiI6ICJeKCAqKChodHRwcz86XFwvXFwvfGZpbGU6XFwvXFwvXFwvKVtcXC1cXHdAOiUuK34jPV0rW1xcLVxcd1xcKFxcKSFAOiUrLn4jPyZcXC89JF0qKSg/IS4qXFwyKD8hLikpICopKiQiLCAiaW5wVHlwZSI6ICJpbnB1dCIsICJuYW1lIjogIldoaXRlbGlzdCByZXZlcnNlIEROUyBVUkxzIiwgImNvbHVtbnMiOiB7InBjIjogNCwgInRhYmxldCI6IDYsICJtb2JpbGUiOiAxMn0sICJkaXNhYmxlZCI6IGZhbHNlLCAidmFsdWUiOiAiIiwgInByZXZfdmFsdWUiOiAiIiwgInBvcG92ZXJzIjogW3siaWNvbk5hbWUiOiAiZ2xvYmUiLCAidGV4dCI6ICJpbnBfcG9wb3Zlcl9nbG9iYWwifSwgeyJpY29uTmFtZSI6ICJpbmZvIiwgInRleHQiOiAiTGlzdCBvZiBVUkxzLCBzZXBhcmF0ZWQgd2l0aCBzcGFjZXMsIGNvbnRhaW5pbmcgcmV2ZXJzZSBETlMgc3VmZml4ZXMgdG8gd2hpdGVsaXN0LiJ9XX0sICJXSElURUxJU1RfQVNOX1VSTFMiOiB7ImNvbnRleHQiOiAiZ2xvYmFsIiwgImRlZmF1bHQiOiAiIiwgImhlbHAiOiAiTGlzdCBvZiBVUkxzLCBzZXBhcmF0ZWQgd2l0aCBzcGFjZXMsIGNvbnRhaW5pbmcgQVNOIHRvIHdoaXRlbGlzdC4iLCAiaWQiOiAid2hpdGVsaXN0LWFzbi11cmxzIiwgImxhYmVsIjogIldoaXRlbGlzdCBBU04gVVJMcyIsICJyZWdleCI6ICJeKCAqKChodHRwcz86XFwvXFwvfGZpbGU6XFwvXFwvXFwvKVtcXC1cXHdAOiUuK34jPV0rW1xcLVxcd1xcKFxcKSFAOiUrLn4jPyZcXC89JF0qKSg/IS4qXFwyKD8hLikpICopKiQiLCAidHlwZSI6ICJ0ZXh0IiwgImNvbnRhaW5lckNsYXNzIjogInotMiIsICJwYXR0ZXJuIjogIl4oICooKGh0dHBzPzpcXC9cXC98ZmlsZTpcXC9cXC9cXC8pW1xcLVxcd0A6JS4rfiM9XStbXFwtXFx3XFwoXFwpIUA6JSsufiM/JlxcLz0kXSopKD8hLipcXDIoPyEuKSkgKikqJCIsICJpbnBUeXBlIjogImlucHV0IiwgIm5hbWUiOiAiV2hpdGVsaXN0IEFTTiBVUkxzIiwgImNvbHVtbnMiOiB7InBjIjogNCwgInRhYmxldCI6IDYsICJtb2JpbGUiOiAxMn0sICJkaXNhYmxlZCI6IGZhbHNlLCAidmFsdWUiOiAiIiwgIm1ldGhvZCI6ICJkZWZhdWx0IiwgInByZXZfdmFsdWUiOiAiIiwgInBvcG92ZXJzIjogW3siaWNvbk5hbWUiOiAiZ2xvYmUiLCAidGV4dCI6ICJpbnBfcG9wb3Zlcl9nbG9iYWwifSwgeyJpY29uTmFtZSI6ICJpbmZvIiwgInRleHQiOiAiTGlzdCBvZiBVUkxzLCBzZXBhcmF0ZWQgd2l0aCBzcGFjZXMsIGNvbnRhaW5pbmcgQVNOIHRvIHdoaXRlbGlzdC4ifV19LCAiV0hJVEVMSVNUX1VTRVJfQUdFTlRfVVJMUyI6IHsiY29udGV4dCI6ICJnbG9iYWwiLCAiZGVmYXVsdCI6ICIiLCAiaGVscCI6ICJMaXN0IG9mIFVSTHMsIHNlcGFyYXRlZCB3aXRoIHNwYWNlcywgY29udGFpbmluZyBnb29kIFVzZXItQWdlbnQgdG8gd2hpdGVsaXN0LiIsICJpZCI6ICJ3aGl0ZWxpc3QtdXNlci1hZ2VudC11cmxzIiwgImxhYmVsIjogIldoaXRlbGlzdCBVc2VyLUFnZW50IFVSTHMiLCAicmVnZXgiOiAiXiggKigoaHR0cHM/OlxcL1xcL3xmaWxlOlxcL1xcL1xcLylbXFwtXFx3QDolLit+Iz1dK1tcXC1cXHdcXChcXCkhQDolKy5+Iz8mXFwvPSRdKikoPyEuKlxcMig/IS4pKSAqKSokIiwgInR5cGUiOiAidGV4dCIsICJjb250YWluZXJDbGFzcyI6ICJ6LTEiLCAicGF0dGVybiI6ICJeKCAqKChodHRwcz86XFwvXFwvfGZpbGU6XFwvXFwvXFwvKVtcXC1cXHdAOiUuK34jPV0rW1xcLVxcd1xcKFxcKSFAOiUrLn4jPyZcXC89JF0qKSg/IS4qXFwyKD8hLikpICopKiQiLCAiaW5wVHlwZSI6ICJpbnB1dCIsICJuYW1lIjogIldoaXRlbGlzdCBVc2VyLUFnZW50IFVSTHMiLCAiY29sdW1ucyI6IHsicGMiOiA0LCAidGFibGV0IjogNiwgIm1vYmlsZSI6IDEyfSwgImRpc2FibGVkIjogZmFsc2UsICJ2YWx1ZSI6ICIiLCAibWV0aG9kIjogImRlZmF1bHQiLCAicHJldl92YWx1ZSI6ICIiLCAicG9wb3ZlcnMiOiBbeyJpY29uTmFtZSI6ICJnbG9iZSIsICJ0ZXh0IjogImlucF9wb3BvdmVyX2dsb2JhbCJ9LCB7Imljb25OYW1lIjogImluZm8iLCAidGV4dCI6ICJMaXN0IG9mIFVSTHMsIHNlcGFyYXRlZCB3aXRoIHNwYWNlcywgY29udGFpbmluZyBnb29kIFVzZXItQWdlbnQgdG8gd2hpdGVsaXN0LiJ9XX0sICJXSElURUxJU1RfVVJJX1VSTFMiOiB7ImNvbnRleHQiOiAiZ2xvYmFsIiwgImRlZmF1bHQiOiAiIiwgImhlbHAiOiAiTGlzdCBvZiBVUkxzLCBzZXBhcmF0ZWQgd2l0aCBzcGFjZXMsIGNvbnRhaW5pbmcgYmFkIFVSSSB0byB3aGl0ZWxpc3QuIiwgImlkIjogIndoaXRlbGlzdC11cmktdXJscyIsICJsYWJlbCI6ICJXaGl0ZWxpc3QgVVJJIFVSTHMiLCAicmVnZXgiOiAiXiggKigoaHR0cHM/OlxcL1xcL3xmaWxlOlxcL1xcL1xcLylbXFwtXFx3QDolLit+Iz1dK1tcXC1cXHdcXChcXCkhQDolKy5+Iz8mXFwvPSRdKikoPyEuKlxcMig/IS4pKSAqKSokIiwgInR5cGUiOiAidGV4dCIsICJjb250YWluZXJDbGFzcyI6ICJ6LTAiLCAicGF0dGVybiI6ICJeKCAqKChodHRwcz86XFwvXFwvfGZpbGU6XFwvXFwvXFwvKVtcXC1cXHdAOiUuK34jPV0rW1xcLVxcd1xcKFxcKSFAOiUrLn4jPyZcXC89JF0qKSg/IS4qXFwyKD8hLikpICopKiQiLCAiaW5wVHlwZSI6ICJpbnB1dCIsICJuYW1lIjogIldoaXRlbGlzdCBVUkkgVVJMcyIsICJjb2x1bW5zIjogeyJwYyI6IDQsICJ0YWJsZXQiOiA2LCAibW9iaWxlIjogMTJ9LCAiZGlzYWJsZWQiOiBmYWxzZSwgInZhbHVlIjogIiIsICJtZXRob2QiOiAiZGVmYXVsdCIsICJwcmV2X3ZhbHVlIjogIiIsICJwb3BvdmVycyI6IFt7Imljb25OYW1lIjogImdsb2JlIiwgInRleHQiOiAiaW5wX3BvcG92ZXJfZ2xvYmFsIn0sIHsiaWNvbk5hbWUiOiAiaW5mbyIsICJ0ZXh0IjogIkxpc3Qgb2YgVVJMcywgc2VwYXJhdGVkIHdpdGggc3BhY2VzLCBjb250YWluaW5nIGJhZCBVUkkgdG8gd2hpdGVsaXN0LiJ9XX19LCAiY2hlY2tzdW0iOiBudWxsfV19fSwgIm9wZXJhdGlvbiI6ICJlZGl0IiwgIm9sZFNlcnZlck5hbWUiOiAiYXBwMS5leGFtcGxlLmNvbSJ9fV19XQ== \ No newline at end of file diff --git a/src/ui/main.py b/src/ui/main.py index e8c506cca..4556ff040 100644 --- a/src/ui/main.py +++ b/src/ui/main.py @@ -101,17 +101,6 @@ def handle_stop(signum, frame): sbin_nginx_path = Path(sep, "usr", "sbin", "nginx") - -TEMPLATE_PLACEHOLDER = [ - { - "name": "default", - "steps": [], - "configs": {}, - "settings": {}, - } -] - - # Flask app app = Flask(__name__, static_url_path="/", static_folder="static", template_folder="templates") @@ -1347,20 +1336,15 @@ def services_modes(): plugins = app.bw_config.get_plugins() data_server_builder = None + templates = [] if mode == "raw": - data_server_builder = raw_mode_builder( - TEMPLATE_PLACEHOLDER, plugins, global_config, total_config, service_name or "new", False if service_name else True - ) + data_server_builder = raw_mode_builder(templates, plugins, global_config, total_config, service_name or "new", False if service_name else True) if mode == "advanced": - data_server_builder = advanced_mode_builder( - TEMPLATE_PLACEHOLDER, plugins, global_config, total_config, service_name or "new", False if service_name else True - ) + data_server_builder = advanced_mode_builder(templates, plugins, global_config, total_config, service_name or "new", False if service_name else True) if mode == "easy": - data_server_builder = easy_mode_builder( - TEMPLATE_PLACEHOLDER, plugins, global_config, total_config, service_name or "new", False if service_name else True - ) + data_server_builder = easy_mode_builder(templates, plugins, global_config, total_config, service_name or "new", False if service_name else True) data_server_builder = base64.b64encode(bytes(json.dumps(data_server_builder), "utf-8")).decode("ascii") @@ -1487,7 +1471,8 @@ def update_global_config(threaded: bool = False): global_config = app.bw_config.get_config(global_only=True, methods=True) plugins = app.bw_config.get_plugins() - data_server_builder = global_config_builder(TEMPLATE_PLACEHOLDER, plugins, global_config) + templates = [] + data_server_builder = global_config_builder(templates, plugins, global_config) data_server_builder = base64.b64encode(bytes(json.dumps(data_server_builder), "utf-8")).decode("ascii") return render_template("global-config.html", data_server_builder=data_server_builder)