Dokploy

Shopware

One-click Shopware 6 blueprint with bundled MySQL, Redis, bootstrap, init, worker, and scheduler services.

Shopware logo

Configuration

version: "3.8"

# Dokploy Blueprint notes:
# - This stack is intentionally self-contained for one-click deployments.
# - The first deployment is slower because bootstrap downloads Shopware into a persistent volume.
# - Shopware source code and generated JWT keys live in named volumes so redeploys remain stable.
# - Failed messenger jobs remain in the `failed` queue for manual retry via Shopware console commands.

x-shopware-env: &shopware-env
  APP_ENV: "${APP_ENV:-prod}"
  APP_SECRET: "${APP_SECRET}"
  INSTANCE_ID: "${INSTANCE_ID}"
  APP_URL: "${APP_URL}"
  ENABLE_DEMO_DATA: "${ENABLE_DEMO_DATA:-1}"
  TRUSTED_PROXIES: "${TRUSTED_PROXIES:-private_ranges}"
  SYMFONY_TRUSTED_PROXIES: "${SYMFONY_TRUSTED_PROXIES:-private_ranges}"
  SYMFONY_TRUSTED_HEADERS: "${SYMFONY_TRUSTED_HEADERS:-x-forwarded-for,x-forwarded-host,x-forwarded-proto,x-forwarded-port,x-forwarded-prefix}"
  DATABASE_HOST: "database"
  DATABASE_PORT: "3306"
  DATABASE_NAME: "${DATABASE_NAME:-shopware}"
  DATABASE_USER: "${DATABASE_USER:-shopware}"
  DATABASE_PASSWORD: "${DATABASE_PASSWORD}"
  DATABASE_URL: "${DATABASE_URL}"
  REDIS_HOST: "redis"
  REDIS_PORT: "6379"
  REDIS_PASSWORD: "${REDIS_PASSWORD}"
  MAILER_DSN: "${MAILER_DSN:-null://localhost}"
  LOCK_DSN: "${LOCK_DSN}"
  MESSENGER_TRANSPORT_DSN: "${MESSENGER_TRANSPORT_DSN:-doctrine://default?queue_name=async}"
  MESSENGER_TRANSPORT_LOW_PRIORITY_DSN: "${MESSENGER_TRANSPORT_LOW_PRIORITY_DSN:-doctrine://default?queue_name=low_priority}"
  MESSENGER_TRANSPORT_FAILURE_DSN: "${MESSENGER_TRANSPORT_FAILURE_DSN:-doctrine://default?queue_name=failed}"
  COMPOSER_PLUGIN_LOADER: "${COMPOSER_PLUGIN_LOADER:-1}"
  SHOPWARE_HTTP_CACHE_ENABLED: "${SHOPWARE_HTTP_CACHE_ENABLED:-1}"
  SHOPWARE_HTTP_DEFAULT_TTL: "${SHOPWARE_HTTP_DEFAULT_TTL:-7200}"
  INSTALL_LOCALE: "${INSTALL_LOCALE:-en-GB}"
  INSTALL_CURRENCY: "${INSTALL_CURRENCY:-EUR}"
  INSTALL_ADMIN_USERNAME: "${INSTALL_ADMIN_USERNAME:-admin}"
  INSTALL_ADMIN_PASSWORD: "${INSTALL_ADMIN_PASSWORD}"
  PHP_SESSION_HANDLER: "${PHP_SESSION_HANDLER:-redis}"
  PHP_SESSION_SAVE_PATH: "${PHP_SESSION_SAVE_PATH}"
  PHP_SESSION_COOKIE_LIFETIME: "${PHP_SESSION_COOKIE_LIFETIME:-0}"
  PHP_SESSION_GC_MAXLIFETIME: "${PHP_SESSION_GC_MAXLIFETIME:-1440}"
  PHP_MAX_UPLOAD_SIZE: "${PHP_MAX_UPLOAD_SIZE:-128M}"
  PHP_MAX_EXECUTION_TIME: "${PHP_MAX_EXECUTION_TIME:-300}"
  PHP_MEMORY_LIMIT: "${PHP_MEMORY_LIMIT:-512M}"
  FPM_PM: "${FPM_PM:-dynamic}"
  FPM_PM_MAX_CHILDREN: "${FPM_PM_MAX_CHILDREN:-20}"
  FPM_PM_START_SERVERS: "${FPM_PM_START_SERVERS:-4}"
  FPM_PM_MIN_SPARE_SERVERS: "${FPM_PM_MIN_SPARE_SERVERS:-2}"
  FPM_PM_MAX_SPARE_SERVERS: "${FPM_PM_MAX_SPARE_SERVERS:-6}"
  BLUE_GREEN_DEPLOYMENT: "${BLUE_GREEN_DEPLOYMENT:-0}"

x-shopware-runtime-volumes: &shopware-runtime-volumes
  - shopware-code:/var/www/html
  - shopware-secrets:/run/shopware-secrets
  - files:/var/www/html/files
  - theme:/var/www/html/public/theme
  - media:/var/www/html/public/media
  - thumbnail:/var/www/html/public/thumbnail
  - sitemap:/var/www/html/public/sitemap

services:
  database:
    image: mysql:8.4
    restart: unless-stopped
    environment:
      MYSQL_DATABASE: "${DATABASE_NAME:-shopware}"
      MYSQL_USER: "${DATABASE_USER:-shopware}"
      MYSQL_PASSWORD: "${DATABASE_PASSWORD}"
      MYSQL_ROOT_PASSWORD: "${MYSQL_ROOT_PASSWORD}"
    command:
      - --character-set-server=utf8mb4
      - --collation-server=utf8mb4_unicode_ci
    healthcheck:
      test:
        - CMD-SHELL
        - mysqladmin ping -h 127.0.0.1 -uroot -p$${MYSQL_ROOT_PASSWORD} --silent
      interval: 10s
      timeout: 5s
      retries: 20
      start_period: 30s
    volumes:
      - database-data:/var/lib/mysql

  redis:
    image: redis:7.4-alpine
    restart: unless-stopped
    environment:
      REDIS_PASSWORD: "${REDIS_PASSWORD}"
    command:
      - redis-server
      - --appendonly
      - "yes"
      - --requirepass
      - "${REDIS_PASSWORD}"
    healthcheck:
      test:
        - CMD-SHELL
        - redis-cli -a "$${REDIS_PASSWORD}" ping | grep -q PONG
      interval: 10s
      timeout: 5s
      retries: 20
    volumes:
      - redis-data:/data

  bootstrap:
    image: ${SHOPWARE_CLI_IMAGE:-shopware/shopware-cli:0.14.3-php-8.4}
    restart: "no"
    environment:
      <<: *shopware-env
      COMPOSER_ALLOW_SUPERUSER: "1"
      COMPOSER_HOME: "/tmp/composer"
      SHOPWARE_VERSION: "${SHOPWARE_VERSION:-6.7.12.1}"
      SHOPWARE_DOCKER_VERSION: "${SHOPWARE_DOCKER_VERSION:-0.3.0}"
      ENABLE_DEMO_DATA: "${ENABLE_DEMO_DATA:-1}"
      DEMO_DATA_VERSION: "${DEMO_DATA_VERSION:-2.1.0}"
    depends_on:
      database:
        condition: service_healthy
      redis:
        condition: service_healthy
    entrypoint:
      - /bin/sh
      - -ec
      - |
        mkdir -p /run/shopware-secrets /var/www/html

        if [ ! -s /run/shopware-secrets/jwt-private.pem ] || [ ! -s /run/shopware-secrets/jwt-public.pem ]; then
          echo "Generating JWT keypair."
          openssl genpkey -algorithm RSA -out /run/shopware-secrets/jwt-private.pem -pkeyopt rsa_keygen_bits:2048
          openssl rsa -pubout -in /run/shopware-secrets/jwt-private.pem -out /run/shopware-secrets/jwt-public.pem
          chmod 600 /run/shopware-secrets/jwt-private.pem
          chmod 644 /run/shopware-secrets/jwt-public.pem
        fi

        export JWT_PRIVATE_KEY="$$(cat /run/shopware-secrets/jwt-private.pem)"
        export JWT_PUBLIC_KEY="$$(cat /run/shopware-secrets/jwt-public.pem)"

        if [ -f /var/www/html/composer.json ] && [ -f /var/www/html/bin/console ] && [ -f /var/www/html/vendor/autoload.php ]; then
          echo "Shopware source already exists. Skipping bootstrap."
          exit 0
        fi

        if find /var/www/html -mindepth 1 -maxdepth 1 -print -quit | grep -q .; then
          echo "Incomplete Shopware source detected. Cleaning bootstrap volume."
          find /var/www/html -mindepth 1 -maxdepth 1 -exec rm -rf {} +
        fi

        tmp_dir="$$(mktemp -d)"

        # Composer >=2.9 refuses to install pinned versions that are affected by
        # security advisories published later. Keep the pinned bootstrap deterministic.
        composer config -g audit.block-insecure false 2>/dev/null || true

        composer create-project --no-interaction --prefer-dist "shopware/production:${SHOPWARE_VERSION}" "$$tmp_dir"
        cd "$$tmp_dir"
        composer require --no-interaction "shopware/docker:${SHOPWARE_DOCKER_VERSION}"

        if [ "${ENABLE_DEMO_DATA}" = "1" ]; then
          composer require --no-interaction --prefer-dist "swag/demo-data:${DEMO_DATA_VERSION}"
        fi

        shopware-cli project ci "$$tmp_dir"
        cp -a "$$tmp_dir"/. /var/www/html/
    volumes:
      - shopware-code:/var/www/html
      - shopware-secrets:/run/shopware-secrets

  init-permissions:
    image: alpine:3.21
    restart: "no"
    command:
      - sh
      - -ec
      - |
        mkdir -p \
          /var/www/html/files \
          /var/www/html/public/theme \
          /var/www/html/public/media \
          /var/www/html/public/thumbnail \
          /var/www/html/public/sitemap \
          /run/shopware-secrets
        chown -R 82:82 /var/www/html /run/shopware-secrets
    depends_on:
      bootstrap:
        condition: service_completed_successfully
    volumes: *shopware-runtime-volumes

  init:
    image: ${SHOPWARE_BASE_IMAGE:-shopware/docker-base:8.4.19-nginx}
    restart: "no"
    entrypoint:
      - /bin/sh
      - -ec
      - |
        export JWT_PRIVATE_KEY="$(cat /run/shopware-secrets/jwt-private.pem)"
        export JWT_PUBLIC_KEY="$(cat /run/shopware-secrets/jwt-public.pem)"

        /setup

        if [ "${ENABLE_DEMO_DATA:-1}" != "1" ]; then
          exit 0
        fi

        cd /var/www/html

        echo "Demo data enabled. Refreshing plugin list."
        php bin/console -n plugin:refresh

        if [ ! -d /var/www/html/custom/plugins/SwagPlatformDemoData ]; then
          echo "SwagPlatformDemoData is not present in the volume."
          echo "Continuing without demo data activation."
          exit 0
        fi

        if ! plugin_state="$$(
          php bin/console -n plugin:list --json | php -r '
            $$plugins = json_decode(stream_get_contents(STDIN), true);
            if (!is_array($$plugins)) {
              fwrite(STDERR, "Unable to parse plugin list\n");
              exit(2);
            }

            foreach ($$plugins as $$plugin) {
              if (($$plugin["name"] ?? null) !== "SwagPlatformDemoData") {
                continue;
              }

              $$installed = ($$plugin["installed"] ?? false) ? "1" : "0";
              $$active = ($$plugin["active"] ?? false) ? "1" : "0";

              echo $$installed . ":" . $$active;
              exit(0);
            }

            fwrite(STDERR, "SwagPlatformDemoData not found in plugin list\n");
            exit(1);
          '
        )"; then
          echo "Unable to resolve SwagPlatformDemoData state."
          echo "Continuing without demo data activation."
          exit 0
        fi

        case "$${plugin_state}" in
          "0:0")
            echo "Installing and activating SwagPlatformDemoData."
            php bin/console -n plugin:install --activate SwagPlatformDemoData
            ;;
          "1:0")
            echo "Activating existing SwagPlatformDemoData plugin."
            php bin/console -n plugin:activate SwagPlatformDemoData
            ;;
          "1:1")
            echo "SwagPlatformDemoData is already active."
            ;;
          *)
            echo "Unexpected SwagPlatformDemoData state: $${plugin_state}"
            echo "Continuing without demo data activation."
            exit 0
            ;;
        esac
    environment: *shopware-env
    depends_on:
      init-permissions:
        condition: service_completed_successfully
      database:
        condition: service_healthy
      redis:
        condition: service_healthy
    volumes: *shopware-runtime-volumes

  shopware:
    image: ${SHOPWARE_BASE_IMAGE:-shopware/docker-base:8.4.19-nginx}
    restart: unless-stopped
    expose:
      - "8000"
    entrypoint:
      - /bin/sh
      - -ec
      - |
        export JWT_PRIVATE_KEY="$(cat /run/shopware-secrets/jwt-private.pem)"
        export JWT_PUBLIC_KEY="$(cat /run/shopware-secrets/jwt-public.pem)"
        exec /usr/bin/supervisord -c /etc/supervisord.conf
    environment: *shopware-env
    depends_on:
      init:
        condition: service_completed_successfully
    volumes: *shopware-runtime-volumes

  worker:
    image: ${SHOPWARE_BASE_IMAGE:-shopware/docker-base:8.4.19-nginx}
    restart: unless-stopped
    entrypoint:
      - /bin/sh
      - -ec
      - |
        export JWT_PRIVATE_KEY="$(cat /run/shopware-secrets/jwt-private.pem)"
        export JWT_PUBLIC_KEY="$(cat /run/shopware-secrets/jwt-public.pem)"
        exec php bin/console messenger:consume async low_priority --time-limit=300 --memory-limit=512M
    environment: *shopware-env
    depends_on:
      init:
        condition: service_completed_successfully
    volumes: *shopware-runtime-volumes

  scheduler:
    image: ${SHOPWARE_BASE_IMAGE:-shopware/docker-base:8.4.19-nginx}
    restart: unless-stopped
    entrypoint:
      - /bin/sh
      - -ec
      - |
        export JWT_PRIVATE_KEY="$(cat /run/shopware-secrets/jwt-private.pem)"
        export JWT_PUBLIC_KEY="$(cat /run/shopware-secrets/jwt-public.pem)"
        exec php bin/console scheduled-task:run
    environment: *shopware-env
    depends_on:
      init:
        condition: service_completed_successfully
    volumes: *shopware-runtime-volumes

volumes:
  database-data:
  redis-data:
  shopware-code:
  shopware-secrets:
  files:
  theme:
  media:
  thumbnail:
  sitemap:
[variables]
main_domain = "${domain}"
app_url = "http://${main_domain}"
app_secret = "${hash:64}"
instance_id = "${hash:32}"
database_name = "shopware"
database_user = "shopware"
database_password = "${hash:32}"
mysql_root_password = "${hash:32}"
redis_password = "${hash:32}"
database_url = "mysql://${database_user}:${database_password}@database:3306/${database_name}?charset=utf8mb4"
lock_dsn = "redis://:${redis_password}@redis:6379/1"
php_session_save_path = "tcp://redis:6379?auth=${redis_password}"
install_admin_username = "admin"
install_admin_password = "${password:20}"
shopware_version = "6.7.12.1"
shopware_docker_version = "0.3.0"
shopware_cli_image = "shopware/shopware-cli:0.14.3-php-8.4"
shopware_base_image = "shopware/docker-base:8.4.19-nginx"
enable_demo_data = "1"
demo_data_version = "2.1.0"

[config]

[[config.domains]]
serviceName = "shopware"
port = 8000
host = "${main_domain}"

[config.env]
APP_ENV = "prod"
APP_URL = "${app_url}"
APP_SECRET = "${app_secret}"
INSTANCE_ID = "${instance_id}"
SHOPWARE_VERSION = "${shopware_version}"
SHOPWARE_DOCKER_VERSION = "${shopware_docker_version}"
SHOPWARE_CLI_IMAGE = "${shopware_cli_image}"
SHOPWARE_BASE_IMAGE = "${shopware_base_image}"
ENABLE_DEMO_DATA = "${enable_demo_data}"
DEMO_DATA_VERSION = "${demo_data_version}"
DATABASE_HOST = "database"
DATABASE_PORT = "3306"
DATABASE_NAME = "${database_name}"
DATABASE_USER = "${database_user}"
DATABASE_PASSWORD = "${database_password}"
DATABASE_URL = "${database_url}"
MYSQL_ROOT_PASSWORD = "${mysql_root_password}"
REDIS_HOST = "redis"
REDIS_PORT = "6379"
REDIS_PASSWORD = "${redis_password}"
MAILER_DSN = "null://localhost"
LOCK_DSN = "${lock_dsn}"
TRUSTED_PROXIES = "private_ranges"
SYMFONY_TRUSTED_PROXIES = "private_ranges"
SYMFONY_TRUSTED_HEADERS = "x-forwarded-for,x-forwarded-host,x-forwarded-proto,x-forwarded-port,x-forwarded-prefix"
COMPOSER_PLUGIN_LOADER = "1"
SHOPWARE_HTTP_CACHE_ENABLED = "1"
SHOPWARE_HTTP_DEFAULT_TTL = "7200"
INSTALL_LOCALE = "en-GB"
INSTALL_CURRENCY = "EUR"
INSTALL_ADMIN_USERNAME = "${install_admin_username}"
INSTALL_ADMIN_PASSWORD = "${install_admin_password}"
PHP_SESSION_HANDLER = "redis"
PHP_SESSION_SAVE_PATH = "${php_session_save_path}"
PHP_SESSION_COOKIE_LIFETIME = "0"
PHP_SESSION_GC_MAXLIFETIME = "1440"
PHP_MAX_UPLOAD_SIZE = "128M"
PHP_MAX_EXECUTION_TIME = "300"
PHP_MEMORY_LIMIT = "512M"
FPM_PM = "dynamic"
FPM_PM_MAX_CHILDREN = "20"
FPM_PM_START_SERVERS = "4"
FPM_PM_MIN_SPARE_SERVERS = "2"
FPM_PM_MAX_SPARE_SERVERS = "6"
MESSENGER_TRANSPORT_DSN = "doctrine://default?queue_name=async"
MESSENGER_TRANSPORT_LOW_PRIORITY_DSN = "doctrine://default?queue_name=low_priority"
MESSENGER_TRANSPORT_FAILURE_DSN = "doctrine://default?queue_name=failed"
BLUE_GREEN_DEPLOYMENT = "0"

Base64

To import this template in Dokploy: create a Compose service → AdvancedBase64 import and paste the content below:

ewogICJjb21wb3NlIjogInZlcnNpb246IFwiMy44XCJcblxuIyBEb2twbG95IEJsdWVwcmludCBub3RlczpcbiMgLSBUaGlzIHN0YWNrIGlzIGludGVudGlvbmFsbHkgc2VsZi1jb250YWluZWQgZm9yIG9uZS1jbGljayBkZXBsb3ltZW50cy5cbiMgLSBUaGUgZmlyc3QgZGVwbG95bWVudCBpcyBzbG93ZXIgYmVjYXVzZSBib290c3RyYXAgZG93bmxvYWRzIFNob3B3YXJlIGludG8gYSBwZXJzaXN0ZW50IHZvbHVtZS5cbiMgLSBTaG9wd2FyZSBzb3VyY2UgY29kZSBhbmQgZ2VuZXJhdGVkIEpXVCBrZXlzIGxpdmUgaW4gbmFtZWQgdm9sdW1lcyBzbyByZWRlcGxveXMgcmVtYWluIHN0YWJsZS5cbiMgLSBGYWlsZWQgbWVzc2VuZ2VyIGpvYnMgcmVtYWluIGluIHRoZSBgZmFpbGVkYCBxdWV1ZSBmb3IgbWFudWFsIHJldHJ5IHZpYSBTaG9wd2FyZSBjb25zb2xlIGNvbW1hbmRzLlxuXG54LXNob3B3YXJlLWVudjogJnNob3B3YXJlLWVudlxuICBBUFBfRU5WOiBcIiR7QVBQX0VOVjotcHJvZH1cIlxuICBBUFBfU0VDUkVUOiBcIiR7QVBQX1NFQ1JFVH1cIlxuICBJTlNUQU5DRV9JRDogXCIke0lOU1RBTkNFX0lEfVwiXG4gIEFQUF9VUkw6IFwiJHtBUFBfVVJMfVwiXG4gIEVOQUJMRV9ERU1PX0RBVEE6IFwiJHtFTkFCTEVfREVNT19EQVRBOi0xfVwiXG4gIFRSVVNURURfUFJPWElFUzogXCIke1RSVVNURURfUFJPWElFUzotcHJpdmF0ZV9yYW5nZXN9XCJcbiAgU1lNRk9OWV9UUlVTVEVEX1BST1hJRVM6IFwiJHtTWU1GT05ZX1RSVVNURURfUFJPWElFUzotcHJpdmF0ZV9yYW5nZXN9XCJcbiAgU1lNRk9OWV9UUlVTVEVEX0hFQURFUlM6IFwiJHtTWU1GT05ZX1RSVVNURURfSEVBREVSUzoteC1mb3J3YXJkZWQtZm9yLHgtZm9yd2FyZGVkLWhvc3QseC1mb3J3YXJkZWQtcHJvdG8seC1mb3J3YXJkZWQtcG9ydCx4LWZvcndhcmRlZC1wcmVmaXh9XCJcbiAgREFUQUJBU0VfSE9TVDogXCJkYXRhYmFzZVwiXG4gIERBVEFCQVNFX1BPUlQ6IFwiMzMwNlwiXG4gIERBVEFCQVNFX05BTUU6IFwiJHtEQVRBQkFTRV9OQU1FOi1zaG9wd2FyZX1cIlxuICBEQVRBQkFTRV9VU0VSOiBcIiR7REFUQUJBU0VfVVNFUjotc2hvcHdhcmV9XCJcbiAgREFUQUJBU0VfUEFTU1dPUkQ6IFwiJHtEQVRBQkFTRV9QQVNTV09SRH1cIlxuICBEQVRBQkFTRV9VUkw6IFwiJHtEQVRBQkFTRV9VUkx9XCJcbiAgUkVESVNfSE9TVDogXCJyZWRpc1wiXG4gIFJFRElTX1BPUlQ6IFwiNjM3OVwiXG4gIFJFRElTX1BBU1NXT1JEOiBcIiR7UkVESVNfUEFTU1dPUkR9XCJcbiAgTUFJTEVSX0RTTjogXCIke01BSUxFUl9EU046LW51bGw6Ly9sb2NhbGhvc3R9XCJcbiAgTE9DS19EU046IFwiJHtMT0NLX0RTTn1cIlxuICBNRVNTRU5HRVJfVFJBTlNQT1JUX0RTTjogXCIke01FU1NFTkdFUl9UUkFOU1BPUlRfRFNOOi1kb2N0cmluZTovL2RlZmF1bHQ/cXVldWVfbmFtZT1hc3luY31cIlxuICBNRVNTRU5HRVJfVFJBTlNQT1JUX0xPV19QUklPUklUWV9EU046IFwiJHtNRVNTRU5HRVJfVFJBTlNQT1JUX0xPV19QUklPUklUWV9EU046LWRvY3RyaW5lOi8vZGVmYXVsdD9xdWV1ZV9uYW1lPWxvd19wcmlvcml0eX1cIlxuICBNRVNTRU5HRVJfVFJBTlNQT1JUX0ZBSUxVUkVfRFNOOiBcIiR7TUVTU0VOR0VSX1RSQU5TUE9SVF9GQUlMVVJFX0RTTjotZG9jdHJpbmU6Ly9kZWZhdWx0P3F1ZXVlX25hbWU9ZmFpbGVkfVwiXG4gIENPTVBPU0VSX1BMVUdJTl9MT0FERVI6IFwiJHtDT01QT1NFUl9QTFVHSU5fTE9BREVSOi0xfVwiXG4gIFNIT1BXQVJFX0hUVFBfQ0FDSEVfRU5BQkxFRDogXCIke1NIT1BXQVJFX0hUVFBfQ0FDSEVfRU5BQkxFRDotMX1cIlxuICBTSE9QV0FSRV9IVFRQX0RFRkFVTFRfVFRMOiBcIiR7U0hPUFdBUkVfSFRUUF9ERUZBVUxUX1RUTDotNzIwMH1cIlxuICBJTlNUQUxMX0xPQ0FMRTogXCIke0lOU1RBTExfTE9DQUxFOi1lbi1HQn1cIlxuICBJTlNUQUxMX0NVUlJFTkNZOiBcIiR7SU5TVEFMTF9DVVJSRU5DWTotRVVSfVwiXG4gIElOU1RBTExfQURNSU5fVVNFUk5BTUU6IFwiJHtJTlNUQUxMX0FETUlOX1VTRVJOQU1FOi1hZG1pbn1cIlxuICBJTlNUQUxMX0FETUlOX1BBU1NXT1JEOiBcIiR7SU5TVEFMTF9BRE1JTl9QQVNTV09SRH1cIlxuICBQSFBfU0VTU0lPTl9IQU5ETEVSOiBcIiR7UEhQX1NFU1NJT05fSEFORExFUjotcmVkaXN9XCJcbiAgUEhQX1NFU1NJT05fU0FWRV9QQVRIOiBcIiR7UEhQX1NFU1NJT05fU0FWRV9QQVRIfVwiXG4gIFBIUF9TRVNTSU9OX0NPT0tJRV9MSUZFVElNRTogXCIke1BIUF9TRVNTSU9OX0NPT0tJRV9MSUZFVElNRTotMH1cIlxuICBQSFBfU0VTU0lPTl9HQ19NQVhMSUZFVElNRTogXCIke1BIUF9TRVNTSU9OX0dDX01BWExJRkVUSU1FOi0xNDQwfVwiXG4gIFBIUF9NQVhfVVBMT0FEX1NJWkU6IFwiJHtQSFBfTUFYX1VQTE9BRF9TSVpFOi0xMjhNfVwiXG4gIFBIUF9NQVhfRVhFQ1VUSU9OX1RJTUU6IFwiJHtQSFBfTUFYX0VYRUNVVElPTl9USU1FOi0zMDB9XCJcbiAgUEhQX01FTU9SWV9MSU1JVDogXCIke1BIUF9NRU1PUllfTElNSVQ6LTUxMk19XCJcbiAgRlBNX1BNOiBcIiR7RlBNX1BNOi1keW5hbWljfVwiXG4gIEZQTV9QTV9NQVhfQ0hJTERSRU46IFwiJHtGUE1fUE1fTUFYX0NISUxEUkVOOi0yMH1cIlxuICBGUE1fUE1fU1RBUlRfU0VSVkVSUzogXCIke0ZQTV9QTV9TVEFSVF9TRVJWRVJTOi00fVwiXG4gIEZQTV9QTV9NSU5fU1BBUkVfU0VSVkVSUzogXCIke0ZQTV9QTV9NSU5fU1BBUkVfU0VSVkVSUzotMn1cIlxuICBGUE1fUE1fTUFYX1NQQVJFX1NFUlZFUlM6IFwiJHtGUE1fUE1fTUFYX1NQQVJFX1NFUlZFUlM6LTZ9XCJcbiAgQkxVRV9HUkVFTl9ERVBMT1lNRU5UOiBcIiR7QkxVRV9HUkVFTl9ERVBMT1lNRU5UOi0wfVwiXG5cbngtc2hvcHdhcmUtcnVudGltZS12b2x1bWVzOiAmc2hvcHdhcmUtcnVudGltZS12b2x1bWVzXG4gIC0gc2hvcHdhcmUtY29kZTovdmFyL3d3dy9odG1sXG4gIC0gc2hvcHdhcmUtc2VjcmV0czovcnVuL3Nob3B3YXJlLXNlY3JldHNcbiAgLSBmaWxlczovdmFyL3d3dy9odG1sL2ZpbGVzXG4gIC0gdGhlbWU6L3Zhci93d3cvaHRtbC9wdWJsaWMvdGhlbWVcbiAgLSBtZWRpYTovdmFyL3d3dy9odG1sL3B1YmxpYy9tZWRpYVxuICAtIHRodW1ibmFpbDovdmFyL3d3dy9odG1sL3B1YmxpYy90aHVtYm5haWxcbiAgLSBzaXRlbWFwOi92YXIvd3d3L2h0bWwvcHVibGljL3NpdGVtYXBcblxuc2VydmljZXM6XG4gIGRhdGFiYXNlOlxuICAgIGltYWdlOiBteXNxbDo4LjRcbiAgICByZXN0YXJ0OiB1bmxlc3Mtc3RvcHBlZFxuICAgIGVudmlyb25tZW50OlxuICAgICAgTVlTUUxfREFUQUJBU0U6IFwiJHtEQVRBQkFTRV9OQU1FOi1zaG9wd2FyZX1cIlxuICAgICAgTVlTUUxfVVNFUjogXCIke0RBVEFCQVNFX1VTRVI6LXNob3B3YXJlfVwiXG4gICAgICBNWVNRTF9QQVNTV09SRDogXCIke0RBVEFCQVNFX1BBU1NXT1JEfVwiXG4gICAgICBNWVNRTF9ST09UX1BBU1NXT1JEOiBcIiR7TVlTUUxfUk9PVF9QQVNTV09SRH1cIlxuICAgIGNvbW1hbmQ6XG4gICAgICAtIC0tY2hhcmFjdGVyLXNldC1zZXJ2ZXI9dXRmOG1iNFxuICAgICAgLSAtLWNvbGxhdGlvbi1zZXJ2ZXI9dXRmOG1iNF91bmljb2RlX2NpXG4gICAgaGVhbHRoY2hlY2s6XG4gICAgICB0ZXN0OlxuICAgICAgICAtIENNRC1TSEVMTFxuICAgICAgICAtIG15c3FsYWRtaW4gcGluZyAtaCAxMjcuMC4wLjEgLXVyb290IC1wJCR7TVlTUUxfUk9PVF9QQVNTV09SRH0gLS1zaWxlbnRcbiAgICAgIGludGVydmFsOiAxMHNcbiAgICAgIHRpbWVvdXQ6IDVzXG4gICAgICByZXRyaWVzOiAyMFxuICAgICAgc3RhcnRfcGVyaW9kOiAzMHNcbiAgICB2b2x1bWVzOlxuICAgICAgLSBkYXRhYmFzZS1kYXRhOi92YXIvbGliL215c3FsXG5cbiAgcmVkaXM6XG4gICAgaW1hZ2U6IHJlZGlzOjcuNC1hbHBpbmVcbiAgICByZXN0YXJ0OiB1bmxlc3Mtc3RvcHBlZFxuICAgIGVudmlyb25tZW50OlxuICAgICAgUkVESVNfUEFTU1dPUkQ6IFwiJHtSRURJU19QQVNTV09SRH1cIlxuICAgIGNvbW1hbmQ6XG4gICAgICAtIHJlZGlzLXNlcnZlclxuICAgICAgLSAtLWFwcGVuZG9ubHlcbiAgICAgIC0gXCJ5ZXNcIlxuICAgICAgLSAtLXJlcXVpcmVwYXNzXG4gICAgICAtIFwiJHtSRURJU19QQVNTV09SRH1cIlxuICAgIGhlYWx0aGNoZWNrOlxuICAgICAgdGVzdDpcbiAgICAgICAgLSBDTUQtU0hFTExcbiAgICAgICAgLSByZWRpcy1jbGkgLWEgXCIkJHtSRURJU19QQVNTV09SRH1cIiBwaW5nIHwgZ3JlcCAtcSBQT05HXG4gICAgICBpbnRlcnZhbDogMTBzXG4gICAgICB0aW1lb3V0OiA1c1xuICAgICAgcmV0cmllczogMjBcbiAgICB2b2x1bWVzOlxuICAgICAgLSByZWRpcy1kYXRhOi9kYXRhXG5cbiAgYm9vdHN0cmFwOlxuICAgIGltYWdlOiAke1NIT1BXQVJFX0NMSV9JTUFHRTotc2hvcHdhcmUvc2hvcHdhcmUtY2xpOjAuMTQuMy1waHAtOC40fVxuICAgIHJlc3RhcnQ6IFwibm9cIlxuICAgIGVudmlyb25tZW50OlxuICAgICAgPDw6ICpzaG9wd2FyZS1lbnZcbiAgICAgIENPTVBPU0VSX0FMTE9XX1NVUEVSVVNFUjogXCIxXCJcbiAgICAgIENPTVBPU0VSX0hPTUU6IFwiL3RtcC9jb21wb3NlclwiXG4gICAgICBTSE9QV0FSRV9WRVJTSU9OOiBcIiR7U0hPUFdBUkVfVkVSU0lPTjotNi43LjEyLjF9XCJcbiAgICAgIFNIT1BXQVJFX0RPQ0tFUl9WRVJTSU9OOiBcIiR7U0hPUFdBUkVfRE9DS0VSX1ZFUlNJT046LTAuMy4wfVwiXG4gICAgICBFTkFCTEVfREVNT19EQVRBOiBcIiR7RU5BQkxFX0RFTU9fREFUQTotMX1cIlxuICAgICAgREVNT19EQVRBX1ZFUlNJT046IFwiJHtERU1PX0RBVEFfVkVSU0lPTjotMi4xLjB9XCJcbiAgICBkZXBlbmRzX29uOlxuICAgICAgZGF0YWJhc2U6XG4gICAgICAgIGNvbmRpdGlvbjogc2VydmljZV9oZWFsdGh5XG4gICAgICByZWRpczpcbiAgICAgICAgY29uZGl0aW9uOiBzZXJ2aWNlX2hlYWx0aHlcbiAgICBlbnRyeXBvaW50OlxuICAgICAgLSAvYmluL3NoXG4gICAgICAtIC1lY1xuICAgICAgLSB8XG4gICAgICAgIG1rZGlyIC1wIC9ydW4vc2hvcHdhcmUtc2VjcmV0cyAvdmFyL3d3dy9odG1sXG5cbiAgICAgICAgaWYgWyAhIC1zIC9ydW4vc2hvcHdhcmUtc2VjcmV0cy9qd3QtcHJpdmF0ZS5wZW0gXSB8fCBbICEgLXMgL3J1bi9zaG9wd2FyZS1zZWNyZXRzL2p3dC1wdWJsaWMucGVtIF07IHRoZW5cbiAgICAgICAgICBlY2hvIFwiR2VuZXJhdGluZyBKV1Qga2V5cGFpci5cIlxuICAgICAgICAgIG9wZW5zc2wgZ2VucGtleSAtYWxnb3JpdGhtIFJTQSAtb3V0IC9ydW4vc2hvcHdhcmUtc2VjcmV0cy9qd3QtcHJpdmF0ZS5wZW0gLXBrZXlvcHQgcnNhX2tleWdlbl9iaXRzOjIwNDhcbiAgICAgICAgICBvcGVuc3NsIHJzYSAtcHVib3V0IC1pbiAvcnVuL3Nob3B3YXJlLXNlY3JldHMvand0LXByaXZhdGUucGVtIC1vdXQgL3J1bi9zaG9wd2FyZS1zZWNyZXRzL2p3dC1wdWJsaWMucGVtXG4gICAgICAgICAgY2htb2QgNjAwIC9ydW4vc2hvcHdhcmUtc2VjcmV0cy9qd3QtcHJpdmF0ZS5wZW1cbiAgICAgICAgICBjaG1vZCA2NDQgL3J1bi9zaG9wd2FyZS1zZWNyZXRzL2p3dC1wdWJsaWMucGVtXG4gICAgICAgIGZpXG5cbiAgICAgICAgZXhwb3J0IEpXVF9QUklWQVRFX0tFWT1cIiQkKGNhdCAvcnVuL3Nob3B3YXJlLXNlY3JldHMvand0LXByaXZhdGUucGVtKVwiXG4gICAgICAgIGV4cG9ydCBKV1RfUFVCTElDX0tFWT1cIiQkKGNhdCAvcnVuL3Nob3B3YXJlLXNlY3JldHMvand0LXB1YmxpYy5wZW0pXCJcblxuICAgICAgICBpZiBbIC1mIC92YXIvd3d3L2h0bWwvY29tcG9zZXIuanNvbiBdICYmIFsgLWYgL3Zhci93d3cvaHRtbC9iaW4vY29uc29sZSBdICYmIFsgLWYgL3Zhci93d3cvaHRtbC92ZW5kb3IvYXV0b2xvYWQucGhwIF07IHRoZW5cbiAgICAgICAgICBlY2hvIFwiU2hvcHdhcmUgc291cmNlIGFscmVhZHkgZXhpc3RzLiBTa2lwcGluZyBib290c3RyYXAuXCJcbiAgICAgICAgICBleGl0IDBcbiAgICAgICAgZmlcblxuICAgICAgICBpZiBmaW5kIC92YXIvd3d3L2h0bWwgLW1pbmRlcHRoIDEgLW1heGRlcHRoIDEgLXByaW50IC1xdWl0IHwgZ3JlcCAtcSAuOyB0aGVuXG4gICAgICAgICAgZWNobyBcIkluY29tcGxldGUgU2hvcHdhcmUgc291cmNlIGRldGVjdGVkLiBDbGVhbmluZyBib290c3RyYXAgdm9sdW1lLlwiXG4gICAgICAgICAgZmluZCAvdmFyL3d3dy9odG1sIC1taW5kZXB0aCAxIC1tYXhkZXB0aCAxIC1leGVjIHJtIC1yZiB7fSArXG4gICAgICAgIGZpXG5cbiAgICAgICAgdG1wX2Rpcj1cIiQkKG1rdGVtcCAtZClcIlxuXG4gICAgICAgICMgQ29tcG9zZXIgPj0yLjkgcmVmdXNlcyB0byBpbnN0YWxsIHBpbm5lZCB2ZXJzaW9ucyB0aGF0IGFyZSBhZmZlY3RlZCBieVxuICAgICAgICAjIHNlY3VyaXR5IGFkdmlzb3JpZXMgcHVibGlzaGVkIGxhdGVyLiBLZWVwIHRoZSBwaW5uZWQgYm9vdHN0cmFwIGRldGVybWluaXN0aWMuXG4gICAgICAgIGNvbXBvc2VyIGNvbmZpZyAtZyBhdWRpdC5ibG9jay1pbnNlY3VyZSBmYWxzZSAyPi9kZXYvbnVsbCB8fCB0cnVlXG5cbiAgICAgICAgY29tcG9zZXIgY3JlYXRlLXByb2plY3QgLS1uby1pbnRlcmFjdGlvbiAtLXByZWZlci1kaXN0IFwic2hvcHdhcmUvcHJvZHVjdGlvbjoke1NIT1BXQVJFX1ZFUlNJT059XCIgXCIkJHRtcF9kaXJcIlxuICAgICAgICBjZCBcIiQkdG1wX2RpclwiXG4gICAgICAgIGNvbXBvc2VyIHJlcXVpcmUgLS1uby1pbnRlcmFjdGlvbiBcInNob3B3YXJlL2RvY2tlcjoke1NIT1BXQVJFX0RPQ0tFUl9WRVJTSU9OfVwiXG5cbiAgICAgICAgaWYgWyBcIiR7RU5BQkxFX0RFTU9fREFUQX1cIiA9IFwiMVwiIF07IHRoZW5cbiAgICAgICAgICBjb21wb3NlciByZXF1aXJlIC0tbm8taW50ZXJhY3Rpb24gLS1wcmVmZXItZGlzdCBcInN3YWcvZGVtby1kYXRhOiR7REVNT19EQVRBX1ZFUlNJT059XCJcbiAgICAgICAgZmlcblxuICAgICAgICBzaG9wd2FyZS1jbGkgcHJvamVjdCBjaSBcIiQkdG1wX2RpclwiXG4gICAgICAgIGNwIC1hIFwiJCR0bXBfZGlyXCIvLiAvdmFyL3d3dy9odG1sL1xuICAgIHZvbHVtZXM6XG4gICAgICAtIHNob3B3YXJlLWNvZGU6L3Zhci93d3cvaHRtbFxuICAgICAgLSBzaG9wd2FyZS1zZWNyZXRzOi9ydW4vc2hvcHdhcmUtc2VjcmV0c1xuXG4gIGluaXQtcGVybWlzc2lvbnM6XG4gICAgaW1hZ2U6IGFscGluZTozLjIxXG4gICAgcmVzdGFydDogXCJub1wiXG4gICAgY29tbWFuZDpcbiAgICAgIC0gc2hcbiAgICAgIC0gLWVjXG4gICAgICAtIHxcbiAgICAgICAgbWtkaXIgLXAgXFxcbiAgICAgICAgICAvdmFyL3d3dy9odG1sL2ZpbGVzIFxcXG4gICAgICAgICAgL3Zhci93d3cvaHRtbC9wdWJsaWMvdGhlbWUgXFxcbiAgICAgICAgICAvdmFyL3d3dy9odG1sL3B1YmxpYy9tZWRpYSBcXFxuICAgICAgICAgIC92YXIvd3d3L2h0bWwvcHVibGljL3RodW1ibmFpbCBcXFxuICAgICAgICAgIC92YXIvd3d3L2h0bWwvcHVibGljL3NpdGVtYXAgXFxcbiAgICAgICAgICAvcnVuL3Nob3B3YXJlLXNlY3JldHNcbiAgICAgICAgY2hvd24gLVIgODI6ODIgL3Zhci93d3cvaHRtbCAvcnVuL3Nob3B3YXJlLXNlY3JldHNcbiAgICBkZXBlbmRzX29uOlxuICAgICAgYm9vdHN0cmFwOlxuICAgICAgICBjb25kaXRpb246IHNlcnZpY2VfY29tcGxldGVkX3N1Y2Nlc3NmdWxseVxuICAgIHZvbHVtZXM6ICpzaG9wd2FyZS1ydW50aW1lLXZvbHVtZXNcblxuICBpbml0OlxuICAgIGltYWdlOiAke1NIT1BXQVJFX0JBU0VfSU1BR0U6LXNob3B3YXJlL2RvY2tlci1iYXNlOjguNC4xOS1uZ2lueH1cbiAgICByZXN0YXJ0OiBcIm5vXCJcbiAgICBlbnRyeXBvaW50OlxuICAgICAgLSAvYmluL3NoXG4gICAgICAtIC1lY1xuICAgICAgLSB8XG4gICAgICAgIGV4cG9ydCBKV1RfUFJJVkFURV9LRVk9XCIkKGNhdCAvcnVuL3Nob3B3YXJlLXNlY3JldHMvand0LXByaXZhdGUucGVtKVwiXG4gICAgICAgIGV4cG9ydCBKV1RfUFVCTElDX0tFWT1cIiQoY2F0IC9ydW4vc2hvcHdhcmUtc2VjcmV0cy9qd3QtcHVibGljLnBlbSlcIlxuXG4gICAgICAgIC9zZXR1cFxuXG4gICAgICAgIGlmIFsgXCIke0VOQUJMRV9ERU1PX0RBVEE6LTF9XCIgIT0gXCIxXCIgXTsgdGhlblxuICAgICAgICAgIGV4aXQgMFxuICAgICAgICBmaVxuXG4gICAgICAgIGNkIC92YXIvd3d3L2h0bWxcblxuICAgICAgICBlY2hvIFwiRGVtbyBkYXRhIGVuYWJsZWQuIFJlZnJlc2hpbmcgcGx1Z2luIGxpc3QuXCJcbiAgICAgICAgcGhwIGJpbi9jb25zb2xlIC1uIHBsdWdpbjpyZWZyZXNoXG5cbiAgICAgICAgaWYgWyAhIC1kIC92YXIvd3d3L2h0bWwvY3VzdG9tL3BsdWdpbnMvU3dhZ1BsYXRmb3JtRGVtb0RhdGEgXTsgdGhlblxuICAgICAgICAgIGVjaG8gXCJTd2FnUGxhdGZvcm1EZW1vRGF0YSBpcyBub3QgcHJlc2VudCBpbiB0aGUgdm9sdW1lLlwiXG4gICAgICAgICAgZWNobyBcIkNvbnRpbnVpbmcgd2l0aG91dCBkZW1vIGRhdGEgYWN0aXZhdGlvbi5cIlxuICAgICAgICAgIGV4aXQgMFxuICAgICAgICBmaVxuXG4gICAgICAgIGlmICEgcGx1Z2luX3N0YXRlPVwiJCQoXG4gICAgICAgICAgcGhwIGJpbi9jb25zb2xlIC1uIHBsdWdpbjpsaXN0IC0tanNvbiB8IHBocCAtciAnXG4gICAgICAgICAgICAkJHBsdWdpbnMgPSBqc29uX2RlY29kZShzdHJlYW1fZ2V0X2NvbnRlbnRzKFNURElOKSwgdHJ1ZSk7XG4gICAgICAgICAgICBpZiAoIWlzX2FycmF5KCQkcGx1Z2lucykpIHtcbiAgICAgICAgICAgICAgZndyaXRlKFNUREVSUiwgXCJVbmFibGUgdG8gcGFyc2UgcGx1Z2luIGxpc3RcXG5cIik7XG4gICAgICAgICAgICAgIGV4aXQoMik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZvcmVhY2ggKCQkcGx1Z2lucyBhcyAkJHBsdWdpbikge1xuICAgICAgICAgICAgICBpZiAoKCQkcGx1Z2luW1wibmFtZVwiXSA/PyBudWxsKSAhPT0gXCJTd2FnUGxhdGZvcm1EZW1vRGF0YVwiKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAkJGluc3RhbGxlZCA9ICgkJHBsdWdpbltcImluc3RhbGxlZFwiXSA/PyBmYWxzZSkgPyBcIjFcIiA6IFwiMFwiO1xuICAgICAgICAgICAgICAkJGFjdGl2ZSA9ICgkJHBsdWdpbltcImFjdGl2ZVwiXSA/PyBmYWxzZSkgPyBcIjFcIiA6IFwiMFwiO1xuXG4gICAgICAgICAgICAgIGVjaG8gJCRpbnN0YWxsZWQgLiBcIjpcIiAuICQkYWN0aXZlO1xuICAgICAgICAgICAgICBleGl0KDApO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmd3JpdGUoU1RERVJSLCBcIlN3YWdQbGF0Zm9ybURlbW9EYXRhIG5vdCBmb3VuZCBpbiBwbHVnaW4gbGlzdFxcblwiKTtcbiAgICAgICAgICAgIGV4aXQoMSk7XG4gICAgICAgICAgJ1xuICAgICAgICApXCI7IHRoZW5cbiAgICAgICAgICBlY2hvIFwiVW5hYmxlIHRvIHJlc29sdmUgU3dhZ1BsYXRmb3JtRGVtb0RhdGEgc3RhdGUuXCJcbiAgICAgICAgICBlY2hvIFwiQ29udGludWluZyB3aXRob3V0IGRlbW8gZGF0YSBhY3RpdmF0aW9uLlwiXG4gICAgICAgICAgZXhpdCAwXG4gICAgICAgIGZpXG5cbiAgICAgICAgY2FzZSBcIiQke3BsdWdpbl9zdGF0ZX1cIiBpblxuICAgICAgICAgIFwiMDowXCIpXG4gICAgICAgICAgICBlY2hvIFwiSW5zdGFsbGluZyBhbmQgYWN0aXZhdGluZyBTd2FnUGxhdGZvcm1EZW1vRGF0YS5cIlxuICAgICAgICAgICAgcGhwIGJpbi9jb25zb2xlIC1uIHBsdWdpbjppbnN0YWxsIC0tYWN0aXZhdGUgU3dhZ1BsYXRmb3JtRGVtb0RhdGFcbiAgICAgICAgICAgIDs7XG4gICAgICAgICAgXCIxOjBcIilcbiAgICAgICAgICAgIGVjaG8gXCJBY3RpdmF0aW5nIGV4aXN0aW5nIFN3YWdQbGF0Zm9ybURlbW9EYXRhIHBsdWdpbi5cIlxuICAgICAgICAgICAgcGhwIGJpbi9jb25zb2xlIC1uIHBsdWdpbjphY3RpdmF0ZSBTd2FnUGxhdGZvcm1EZW1vRGF0YVxuICAgICAgICAgICAgOztcbiAgICAgICAgICBcIjE6MVwiKVxuICAgICAgICAgICAgZWNobyBcIlN3YWdQbGF0Zm9ybURlbW9EYXRhIGlzIGFscmVhZHkgYWN0aXZlLlwiXG4gICAgICAgICAgICA7O1xuICAgICAgICAgICopXG4gICAgICAgICAgICBlY2hvIFwiVW5leHBlY3RlZCBTd2FnUGxhdGZvcm1EZW1vRGF0YSBzdGF0ZTogJCR7cGx1Z2luX3N0YXRlfVwiXG4gICAgICAgICAgICBlY2hvIFwiQ29udGludWluZyB3aXRob3V0IGRlbW8gZGF0YSBhY3RpdmF0aW9uLlwiXG4gICAgICAgICAgICBleGl0IDBcbiAgICAgICAgICAgIDs7XG4gICAgICAgIGVzYWNcbiAgICBlbnZpcm9ubWVudDogKnNob3B3YXJlLWVudlxuICAgIGRlcGVuZHNfb246XG4gICAgICBpbml0LXBlcm1pc3Npb25zOlxuICAgICAgICBjb25kaXRpb246IHNlcnZpY2VfY29tcGxldGVkX3N1Y2Nlc3NmdWxseVxuICAgICAgZGF0YWJhc2U6XG4gICAgICAgIGNvbmRpdGlvbjogc2VydmljZV9oZWFsdGh5XG4gICAgICByZWRpczpcbiAgICAgICAgY29uZGl0aW9uOiBzZXJ2aWNlX2hlYWx0aHlcbiAgICB2b2x1bWVzOiAqc2hvcHdhcmUtcnVudGltZS12b2x1bWVzXG5cbiAgc2hvcHdhcmU6XG4gICAgaW1hZ2U6ICR7U0hPUFdBUkVfQkFTRV9JTUFHRTotc2hvcHdhcmUvZG9ja2VyLWJhc2U6OC40LjE5LW5naW54fVxuICAgIHJlc3RhcnQ6IHVubGVzcy1zdG9wcGVkXG4gICAgZXhwb3NlOlxuICAgICAgLSBcIjgwMDBcIlxuICAgIGVudHJ5cG9pbnQ6XG4gICAgICAtIC9iaW4vc2hcbiAgICAgIC0gLWVjXG4gICAgICAtIHxcbiAgICAgICAgZXhwb3J0IEpXVF9QUklWQVRFX0tFWT1cIiQoY2F0IC9ydW4vc2hvcHdhcmUtc2VjcmV0cy9qd3QtcHJpdmF0ZS5wZW0pXCJcbiAgICAgICAgZXhwb3J0IEpXVF9QVUJMSUNfS0VZPVwiJChjYXQgL3J1bi9zaG9wd2FyZS1zZWNyZXRzL2p3dC1wdWJsaWMucGVtKVwiXG4gICAgICAgIGV4ZWMgL3Vzci9iaW4vc3VwZXJ2aXNvcmQgLWMgL2V0Yy9zdXBlcnZpc29yZC5jb25mXG4gICAgZW52aXJvbm1lbnQ6ICpzaG9wd2FyZS1lbnZcbiAgICBkZXBlbmRzX29uOlxuICAgICAgaW5pdDpcbiAgICAgICAgY29uZGl0aW9uOiBzZXJ2aWNlX2NvbXBsZXRlZF9zdWNjZXNzZnVsbHlcbiAgICB2b2x1bWVzOiAqc2hvcHdhcmUtcnVudGltZS12b2x1bWVzXG5cbiAgd29ya2VyOlxuICAgIGltYWdlOiAke1NIT1BXQVJFX0JBU0VfSU1BR0U6LXNob3B3YXJlL2RvY2tlci1iYXNlOjguNC4xOS1uZ2lueH1cbiAgICByZXN0YXJ0OiB1bmxlc3Mtc3RvcHBlZFxuICAgIGVudHJ5cG9pbnQ6XG4gICAgICAtIC9iaW4vc2hcbiAgICAgIC0gLWVjXG4gICAgICAtIHxcbiAgICAgICAgZXhwb3J0IEpXVF9QUklWQVRFX0tFWT1cIiQoY2F0IC9ydW4vc2hvcHdhcmUtc2VjcmV0cy9qd3QtcHJpdmF0ZS5wZW0pXCJcbiAgICAgICAgZXhwb3J0IEpXVF9QVUJMSUNfS0VZPVwiJChjYXQgL3J1bi9zaG9wd2FyZS1zZWNyZXRzL2p3dC1wdWJsaWMucGVtKVwiXG4gICAgICAgIGV4ZWMgcGhwIGJpbi9jb25zb2xlIG1lc3Nlbmdlcjpjb25zdW1lIGFzeW5jIGxvd19wcmlvcml0eSAtLXRpbWUtbGltaXQ9MzAwIC0tbWVtb3J5LWxpbWl0PTUxMk1cbiAgICBlbnZpcm9ubWVudDogKnNob3B3YXJlLWVudlxuICAgIGRlcGVuZHNfb246XG4gICAgICBpbml0OlxuICAgICAgICBjb25kaXRpb246IHNlcnZpY2VfY29tcGxldGVkX3N1Y2Nlc3NmdWxseVxuICAgIHZvbHVtZXM6ICpzaG9wd2FyZS1ydW50aW1lLXZvbHVtZXNcblxuICBzY2hlZHVsZXI6XG4gICAgaW1hZ2U6ICR7U0hPUFdBUkVfQkFTRV9JTUFHRTotc2hvcHdhcmUvZG9ja2VyLWJhc2U6OC40LjE5LW5naW54fVxuICAgIHJlc3RhcnQ6IHVubGVzcy1zdG9wcGVkXG4gICAgZW50cnlwb2ludDpcbiAgICAgIC0gL2Jpbi9zaFxuICAgICAgLSAtZWNcbiAgICAgIC0gfFxuICAgICAgICBleHBvcnQgSldUX1BSSVZBVEVfS0VZPVwiJChjYXQgL3J1bi9zaG9wd2FyZS1zZWNyZXRzL2p3dC1wcml2YXRlLnBlbSlcIlxuICAgICAgICBleHBvcnQgSldUX1BVQkxJQ19LRVk9XCIkKGNhdCAvcnVuL3Nob3B3YXJlLXNlY3JldHMvand0LXB1YmxpYy5wZW0pXCJcbiAgICAgICAgZXhlYyBwaHAgYmluL2NvbnNvbGUgc2NoZWR1bGVkLXRhc2s6cnVuXG4gICAgZW52aXJvbm1lbnQ6ICpzaG9wd2FyZS1lbnZcbiAgICBkZXBlbmRzX29uOlxuICAgICAgaW5pdDpcbiAgICAgICAgY29uZGl0aW9uOiBzZXJ2aWNlX2NvbXBsZXRlZF9zdWNjZXNzZnVsbHlcbiAgICB2b2x1bWVzOiAqc2hvcHdhcmUtcnVudGltZS12b2x1bWVzXG5cbnZvbHVtZXM6XG4gIGRhdGFiYXNlLWRhdGE6XG4gIHJlZGlzLWRhdGE6XG4gIHNob3B3YXJlLWNvZGU6XG4gIHNob3B3YXJlLXNlY3JldHM6XG4gIGZpbGVzOlxuICB0aGVtZTpcbiAgbWVkaWE6XG4gIHRodW1ibmFpbDpcbiAgc2l0ZW1hcDpcbiIsCiAgImNvbmZpZyI6ICJbdmFyaWFibGVzXVxubWFpbl9kb21haW4gPSBcIiR7ZG9tYWlufVwiXG5hcHBfdXJsID0gXCJodHRwOi8vJHttYWluX2RvbWFpbn1cIlxuYXBwX3NlY3JldCA9IFwiJHtoYXNoOjY0fVwiXG5pbnN0YW5jZV9pZCA9IFwiJHtoYXNoOjMyfVwiXG5kYXRhYmFzZV9uYW1lID0gXCJzaG9wd2FyZVwiXG5kYXRhYmFzZV91c2VyID0gXCJzaG9wd2FyZVwiXG5kYXRhYmFzZV9wYXNzd29yZCA9IFwiJHtoYXNoOjMyfVwiXG5teXNxbF9yb290X3Bhc3N3b3JkID0gXCIke2hhc2g6MzJ9XCJcbnJlZGlzX3Bhc3N3b3JkID0gXCIke2hhc2g6MzJ9XCJcbmRhdGFiYXNlX3VybCA9IFwibXlzcWw6Ly8ke2RhdGFiYXNlX3VzZXJ9OiR7ZGF0YWJhc2VfcGFzc3dvcmR9QGRhdGFiYXNlOjMzMDYvJHtkYXRhYmFzZV9uYW1lfT9jaGFyc2V0PXV0ZjhtYjRcIlxubG9ja19kc24gPSBcInJlZGlzOi8vOiR7cmVkaXNfcGFzc3dvcmR9QHJlZGlzOjYzNzkvMVwiXG5waHBfc2Vzc2lvbl9zYXZlX3BhdGggPSBcInRjcDovL3JlZGlzOjYzNzk/YXV0aD0ke3JlZGlzX3Bhc3N3b3JkfVwiXG5pbnN0YWxsX2FkbWluX3VzZXJuYW1lID0gXCJhZG1pblwiXG5pbnN0YWxsX2FkbWluX3Bhc3N3b3JkID0gXCIke3Bhc3N3b3JkOjIwfVwiXG5zaG9wd2FyZV92ZXJzaW9uID0gXCI2LjcuMTIuMVwiXG5zaG9wd2FyZV9kb2NrZXJfdmVyc2lvbiA9IFwiMC4zLjBcIlxuc2hvcHdhcmVfY2xpX2ltYWdlID0gXCJzaG9wd2FyZS9zaG9wd2FyZS1jbGk6MC4xNC4zLXBocC04LjRcIlxuc2hvcHdhcmVfYmFzZV9pbWFnZSA9IFwic2hvcHdhcmUvZG9ja2VyLWJhc2U6OC40LjE5LW5naW54XCJcbmVuYWJsZV9kZW1vX2RhdGEgPSBcIjFcIlxuZGVtb19kYXRhX3ZlcnNpb24gPSBcIjIuMS4wXCJcblxuW2NvbmZpZ11cblxuW1tjb25maWcuZG9tYWluc11dXG5zZXJ2aWNlTmFtZSA9IFwic2hvcHdhcmVcIlxucG9ydCA9IDgwMDBcbmhvc3QgPSBcIiR7bWFpbl9kb21haW59XCJcblxuW2NvbmZpZy5lbnZdXG5BUFBfRU5WID0gXCJwcm9kXCJcbkFQUF9VUkwgPSBcIiR7YXBwX3VybH1cIlxuQVBQX1NFQ1JFVCA9IFwiJHthcHBfc2VjcmV0fVwiXG5JTlNUQU5DRV9JRCA9IFwiJHtpbnN0YW5jZV9pZH1cIlxuU0hPUFdBUkVfVkVSU0lPTiA9IFwiJHtzaG9wd2FyZV92ZXJzaW9ufVwiXG5TSE9QV0FSRV9ET0NLRVJfVkVSU0lPTiA9IFwiJHtzaG9wd2FyZV9kb2NrZXJfdmVyc2lvbn1cIlxuU0hPUFdBUkVfQ0xJX0lNQUdFID0gXCIke3Nob3B3YXJlX2NsaV9pbWFnZX1cIlxuU0hPUFdBUkVfQkFTRV9JTUFHRSA9IFwiJHtzaG9wd2FyZV9iYXNlX2ltYWdlfVwiXG5FTkFCTEVfREVNT19EQVRBID0gXCIke2VuYWJsZV9kZW1vX2RhdGF9XCJcbkRFTU9fREFUQV9WRVJTSU9OID0gXCIke2RlbW9fZGF0YV92ZXJzaW9ufVwiXG5EQVRBQkFTRV9IT1NUID0gXCJkYXRhYmFzZVwiXG5EQVRBQkFTRV9QT1JUID0gXCIzMzA2XCJcbkRBVEFCQVNFX05BTUUgPSBcIiR7ZGF0YWJhc2VfbmFtZX1cIlxuREFUQUJBU0VfVVNFUiA9IFwiJHtkYXRhYmFzZV91c2VyfVwiXG5EQVRBQkFTRV9QQVNTV09SRCA9IFwiJHtkYXRhYmFzZV9wYXNzd29yZH1cIlxuREFUQUJBU0VfVVJMID0gXCIke2RhdGFiYXNlX3VybH1cIlxuTVlTUUxfUk9PVF9QQVNTV09SRCA9IFwiJHtteXNxbF9yb290X3Bhc3N3b3JkfVwiXG5SRURJU19IT1NUID0gXCJyZWRpc1wiXG5SRURJU19QT1JUID0gXCI2Mzc5XCJcblJFRElTX1BBU1NXT1JEID0gXCIke3JlZGlzX3Bhc3N3b3JkfVwiXG5NQUlMRVJfRFNOID0gXCJudWxsOi8vbG9jYWxob3N0XCJcbkxPQ0tfRFNOID0gXCIke2xvY2tfZHNufVwiXG5UUlVTVEVEX1BST1hJRVMgPSBcInByaXZhdGVfcmFuZ2VzXCJcblNZTUZPTllfVFJVU1RFRF9QUk9YSUVTID0gXCJwcml2YXRlX3Jhbmdlc1wiXG5TWU1GT05ZX1RSVVNURURfSEVBREVSUyA9IFwieC1mb3J3YXJkZWQtZm9yLHgtZm9yd2FyZGVkLWhvc3QseC1mb3J3YXJkZWQtcHJvdG8seC1mb3J3YXJkZWQtcG9ydCx4LWZvcndhcmRlZC1wcmVmaXhcIlxuQ09NUE9TRVJfUExVR0lOX0xPQURFUiA9IFwiMVwiXG5TSE9QV0FSRV9IVFRQX0NBQ0hFX0VOQUJMRUQgPSBcIjFcIlxuU0hPUFdBUkVfSFRUUF9ERUZBVUxUX1RUTCA9IFwiNzIwMFwiXG5JTlNUQUxMX0xPQ0FMRSA9IFwiZW4tR0JcIlxuSU5TVEFMTF9DVVJSRU5DWSA9IFwiRVVSXCJcbklOU1RBTExfQURNSU5fVVNFUk5BTUUgPSBcIiR7aW5zdGFsbF9hZG1pbl91c2VybmFtZX1cIlxuSU5TVEFMTF9BRE1JTl9QQVNTV09SRCA9IFwiJHtpbnN0YWxsX2FkbWluX3Bhc3N3b3JkfVwiXG5QSFBfU0VTU0lPTl9IQU5ETEVSID0gXCJyZWRpc1wiXG5QSFBfU0VTU0lPTl9TQVZFX1BBVEggPSBcIiR7cGhwX3Nlc3Npb25fc2F2ZV9wYXRofVwiXG5QSFBfU0VTU0lPTl9DT09LSUVfTElGRVRJTUUgPSBcIjBcIlxuUEhQX1NFU1NJT05fR0NfTUFYTElGRVRJTUUgPSBcIjE0NDBcIlxuUEhQX01BWF9VUExPQURfU0laRSA9IFwiMTI4TVwiXG5QSFBfTUFYX0VYRUNVVElPTl9USU1FID0gXCIzMDBcIlxuUEhQX01FTU9SWV9MSU1JVCA9IFwiNTEyTVwiXG5GUE1fUE0gPSBcImR5bmFtaWNcIlxuRlBNX1BNX01BWF9DSElMRFJFTiA9IFwiMjBcIlxuRlBNX1BNX1NUQVJUX1NFUlZFUlMgPSBcIjRcIlxuRlBNX1BNX01JTl9TUEFSRV9TRVJWRVJTID0gXCIyXCJcbkZQTV9QTV9NQVhfU1BBUkVfU0VSVkVSUyA9IFwiNlwiXG5NRVNTRU5HRVJfVFJBTlNQT1JUX0RTTiA9IFwiZG9jdHJpbmU6Ly9kZWZhdWx0P3F1ZXVlX25hbWU9YXN5bmNcIlxuTUVTU0VOR0VSX1RSQU5TUE9SVF9MT1dfUFJJT1JJVFlfRFNOID0gXCJkb2N0cmluZTovL2RlZmF1bHQ/cXVldWVfbmFtZT1sb3dfcHJpb3JpdHlcIlxuTUVTU0VOR0VSX1RSQU5TUE9SVF9GQUlMVVJFX0RTTiA9IFwiZG9jdHJpbmU6Ly9kZWZhdWx0P3F1ZXVlX25hbWU9ZmFpbGVkXCJcbkJMVUVfR1JFRU5fREVQTE9ZTUVOVCA9IFwiMFwiXG4iCn0=

Tags

e-commerce, shop, php, mysql, redis


Version: 6.7.8.2

On this page