diff --git a/site/multiembedder/MultiEmbedder.tsx b/site/multiembedder/MultiEmbedder.tsx index a54d47d2b23..3abc824771e 100644 --- a/site/multiembedder/MultiEmbedder.tsx +++ b/site/multiembedder/MultiEmbedder.tsx @@ -9,6 +9,7 @@ import { hydrateGlobalEntitySelectorIfAny, migrateSelectedEntityNamesParam, SelectionArray, + migrateGrapherConfigToLatestVersion, } from "@ourworldindata/grapher" import { fetchText, @@ -200,8 +201,11 @@ class MultiEmbedder { } else { configUrl = `${GRAPHER_DYNAMIC_CONFIG_URL}/${slug}.config.json` } - const grapherPageConfig = await fetchWithRetry(configUrl).then( - (res) => res.json() + const fetchedGrapherPageConfig = await fetchWithRetry( + configUrl + ).then((res) => res.json()) + const grapherPageConfig = migrateGrapherConfigToLatestVersion( + fetchedGrapherPageConfig ) const figureConfigAttr = figure.getAttribute( diff --git a/vite.config-site.mts.timestamp-1733219525800-65e741a934f3d.mjs b/vite.config-site.mts.timestamp-1733219525800-65e741a934f3d.mjs new file mode 100644 index 00000000000..9ef808f81c3 --- /dev/null +++ b/vite.config-site.mts.timestamp-1733219525800-65e741a934f3d.mjs @@ -0,0 +1,351 @@ +var __defProp = Object.defineProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; + +// site/viteUtils.tsx +import React from "file:///Users/sophia/code/owid/owid-grapher/node_modules/react/index.js"; + +// settings/findBaseDir.ts +import path from "path"; +import fs from "fs"; +function findProjectBaseDir(from) { + if (!fs.existsSync) return void 0; + let dir = path.dirname(from); + while (dir.length) { + if (fs.existsSync(path.resolve(dir, "package.json"))) return dir; + const parentDir = path.resolve(dir, ".."); + if (parentDir === dir) break; + else dir = parentDir; + } + return void 0; +} + +// site/viteUtils.tsx +import fs3 from "file:///Users/sophia/code/owid/owid-grapher/node_modules/fs-extra/lib/index.js"; + +// settings/serverSettings.ts +import path2 from "path"; +import dotenv2 from "file:///Users/sophia/code/owid/owid-grapher/node_modules/dotenv/lib/main.js"; +import fs2 from "fs"; +import ini from "file:///Users/sophia/code/owid/owid-grapher/node_modules/ini/lib/ini.js"; +import os from "os"; + +// settings/clientSettings.ts +var clientSettings_exports = {}; +__export(clientSettings_exports, { + ADMIN_BASE_URL: () => ADMIN_BASE_URL, + ADMIN_SERVER_HOST: () => ADMIN_SERVER_HOST, + ADMIN_SERVER_PORT: () => ADMIN_SERVER_PORT, + ALGOLIA_ID: () => ALGOLIA_ID, + ALGOLIA_INDEX_PREFIX: () => ALGOLIA_INDEX_PREFIX, + ALGOLIA_SEARCH_KEY: () => ALGOLIA_SEARCH_KEY, + BAKED_BASE_URL: () => BAKED_BASE_URL, + BAKED_GRAPHER_EXPORTS_BASE_URL: () => BAKED_GRAPHER_EXPORTS_BASE_URL, + BAKED_GRAPHER_URL: () => BAKED_GRAPHER_URL, + BAKED_SITE_EXPORTS_BASE_URL: () => BAKED_SITE_EXPORTS_BASE_URL, + BUGSNAG_API_KEY: () => BUGSNAG_API_KEY, + DATA_API_URL: () => DATA_API_URL, + DONATE_API_URL: () => DONATE_API_URL, + ENV: () => ENV, + ETL_API_URL: () => ETL_API_URL, + ETL_WIZARD_URL: () => ETL_WIZARD_URL, + EXPLORER_DYNAMIC_THUMBNAIL_URL: () => EXPLORER_DYNAMIC_THUMBNAIL_URL, + FEATURE_FLAGS: () => FEATURE_FLAGS, + FeatureFlagFeature: () => FeatureFlagFeature, + GDOCS_BASIC_ARTICLE_TEMPLATE_URL: () => GDOCS_BASIC_ARTICLE_TEMPLATE_URL, + GDOCS_CLIENT_EMAIL: () => GDOCS_CLIENT_EMAIL, + GDOCS_DETAILS_ON_DEMAND_ID: () => GDOCS_DETAILS_ON_DEMAND_ID, + GOOGLE_TAG_MANAGER_ID: () => GOOGLE_TAG_MANAGER_ID, + GRAPHER_DYNAMIC_CONFIG_URL: () => GRAPHER_DYNAMIC_CONFIG_URL, + GRAPHER_DYNAMIC_THUMBNAIL_URL: () => GRAPHER_DYNAMIC_THUMBNAIL_URL, + IMAGE_HOSTING_R2_BUCKET_PATH: () => IMAGE_HOSTING_R2_BUCKET_PATH, + IMAGE_HOSTING_R2_BUCKET_SUBFOLDER_PATH: () => IMAGE_HOSTING_R2_BUCKET_SUBFOLDER_PATH, + IMAGE_HOSTING_R2_CDN_URL: () => IMAGE_HOSTING_R2_CDN_URL, + MULTI_DIM_DYNAMIC_CONFIG_URL: () => MULTI_DIM_DYNAMIC_CONFIG_URL, + PUBLISHED_AT_FORMAT: () => PUBLISHED_AT_FORMAT, + RECAPTCHA_SITE_KEY: () => RECAPTCHA_SITE_KEY, + SENTRY_DSN: () => SENTRY_DSN, + TOPICS_CONTENT_GRAPH: () => TOPICS_CONTENT_GRAPH +}); +import dotenv from "file:///Users/sophia/code/owid/owid-grapher/node_modules/dotenv/lib/main.js"; +import { parseIntOrUndefined } from "file:///Users/sophia/code/owid/owid-grapher/packages/@ourworldindata/utils/dist/index.js"; +var __vite_injected_original_dirname2 = "/Users/sophia/code/owid/owid-grapher/settings"; +if (typeof __vite_injected_original_dirname2 !== "undefined") { + const baseDir2 = findProjectBaseDir(__vite_injected_original_dirname2); + if (baseDir2) dotenv.config({ path: `${baseDir2}/.env` }); +} +var ENV = process.env.ENV === "production" ? "production" : "development"; +var BUGSNAG_API_KEY = process.env.BUGSNAG_API_KEY; +var SENTRY_DSN = process.env.SENTRY_DSN; +var ADMIN_SERVER_PORT = parseIntOrUndefined(process.env.ADMIN_SERVER_PORT) ?? 3030; +var ADMIN_SERVER_HOST = process.env.ADMIN_SERVER_HOST ?? "localhost"; +var BAKED_BASE_URL = process.env.BAKED_BASE_URL ?? `http://${ADMIN_SERVER_HOST}:${ADMIN_SERVER_PORT}`; +var BAKED_GRAPHER_URL = process.env.BAKED_GRAPHER_URL ?? `${BAKED_BASE_URL}/grapher`; +var BAKED_GRAPHER_EXPORTS_BASE_URL = process.env.BAKED_GRAPHER_EXPORTS_BASE_URL ?? `${BAKED_GRAPHER_URL}/exports`; +var BAKED_SITE_EXPORTS_BASE_URL = process.env.BAKED_SITE_EXPORTS_BASE_URL ?? `${BAKED_BASE_URL}/exports`; +var GRAPHER_DYNAMIC_THUMBNAIL_URL = process.env.GRAPHER_DYNAMIC_THUMBNAIL_URL ?? `${BAKED_GRAPHER_URL}`; +var EXPLORER_DYNAMIC_THUMBNAIL_URL = process.env.EXPLORER_DYNAMIC_THUMBNAIL_URL ?? `${BAKED_BASE_URL}/explorers`; +var GRAPHER_DYNAMIC_CONFIG_URL = process.env.GRAPHER_DYNAMIC_CONFIG_URL ?? `${BAKED_GRAPHER_URL}`; +var MULTI_DIM_DYNAMIC_CONFIG_URL = process.env.MULTI_DIM_DYNAMIC_CONFIG_URL ?? `${BAKED_BASE_URL}/multi-dim`; +var ADMIN_BASE_URL = process.env.ADMIN_BASE_URL ?? `http://${ADMIN_SERVER_HOST}:${ADMIN_SERVER_PORT}`; +var DATA_API_URL = process.env.DATA_API_URL ?? "https://api.ourworldindata.org/v1/indicators/"; +var ALGOLIA_ID = process.env.ALGOLIA_ID ?? ""; +var ALGOLIA_SEARCH_KEY = process.env.ALGOLIA_SEARCH_KEY ?? ""; +var ALGOLIA_INDEX_PREFIX = process.env.ALGOLIA_INDEX_PREFIX ?? ""; +var DONATE_API_URL = process.env.DONATE_API_URL ?? "http://localhost:8788/donation/donate"; +var RECAPTCHA_SITE_KEY = process.env.RECAPTCHA_SITE_KEY ?? "6LcJl5YUAAAAAATQ6F4vl9dAWRZeKPBm15MAZj4Q"; +var GOOGLE_TAG_MANAGER_ID = process.env.GOOGLE_TAG_MANAGER_ID ?? ""; +var TOPICS_CONTENT_GRAPH = process.env.TOPICS_CONTENT_GRAPH === "true"; +var GDOCS_CLIENT_EMAIL = process.env.GDOCS_CLIENT_EMAIL ?? ""; +var GDOCS_BASIC_ARTICLE_TEMPLATE_URL = process.env.GDOCS_BASIC_ARTICLE_TEMPLATE_URL ?? ""; +var IMAGE_HOSTING_R2_CDN_URL = process.env.IMAGE_HOSTING_R2_CDN_URL || ""; +var IMAGE_HOSTING_R2_BUCKET_PATH = process.env.IMAGE_HOSTING_R2_BUCKET_PATH || ""; +var IMAGE_HOSTING_R2_BUCKET_SUBFOLDER_PATH = IMAGE_HOSTING_R2_BUCKET_PATH.slice( + IMAGE_HOSTING_R2_BUCKET_PATH.indexOf("/") + 1 +); +var ETL_WIZARD_URL = process.env.ETL_WIZARD_URL ?? `http://${ADMIN_SERVER_HOST}:8053/`; +var ETL_API_URL = process.env.ETL_API_URL ?? `http://${ADMIN_SERVER_HOST}:8081/api/v1`; +var GDOCS_DETAILS_ON_DEMAND_ID = process.env.GDOCS_DETAILS_ON_DEMAND_ID ?? ""; +var PUBLISHED_AT_FORMAT = "ddd, MMM D, YYYY HH:mm"; +var FeatureFlagFeature = /* @__PURE__ */ ((FeatureFlagFeature2) => { + FeatureFlagFeature2["MultiDimDataPage"] = "MultiDimDataPage"; + return FeatureFlagFeature2; +})(FeatureFlagFeature || {}); +var featureFlagsRaw = typeof process.env.FEATURE_FLAGS === "string" && process.env.FEATURE_FLAGS.trim()?.split(",") || []; +var FEATURE_FLAGS = new Set( + Object.keys(FeatureFlagFeature).filter( + (key) => featureFlagsRaw.includes(key) + ) +); + +// settings/serverSettings.ts +import { parseIntOrUndefined as parseIntOrUndefined2 } from "file:///Users/sophia/code/owid/owid-grapher/packages/@ourworldindata/utils/dist/index.js"; +var __vite_injected_original_dirname3 = "/Users/sophia/code/owid/owid-grapher/settings"; +var baseDir = findProjectBaseDir(__vite_injected_original_dirname3); +if (baseDir === void 0) throw new Error("could not locate base package.json"); +dotenv2.config({ path: `${baseDir}/.env` }); +var serverSettings = process.env ?? {}; +var BASE_DIR = baseDir; +var DATA_API_FOR_ADMIN_UI = serverSettings.DATA_API_FOR_ADMIN_UI; +var BAKED_BASE_URL2 = BAKED_BASE_URL; +var VITE_PREVIEW = serverSettings.VITE_PREVIEW === "true"; +var ADMIN_BASE_URL2 = ADMIN_BASE_URL; +var BAKED_GRAPHER_URL2 = serverSettings.BAKED_GRAPHER_URL ?? `${BAKED_BASE_URL2}/grapher`; +var OPTIMIZE_SVG_EXPORTS = serverSettings.OPTIMIZE_SVG_EXPORTS === "true"; +var GITHUB_USERNAME = serverSettings.GITHUB_USERNAME ?? "owid-test"; +var GIT_DEFAULT_USERNAME = serverSettings.GIT_DEFAULT_USERNAME ?? "Our World in Data"; +var GIT_DEFAULT_EMAIL = serverSettings.GIT_DEFAULT_EMAIL ?? "info@ourworldindata.org"; +var BUGSNAG_API_KEY2 = serverSettings.BUGSNAG_API_KEY; +var BUGSNAG_NODE_API_KEY = serverSettings.BUGSNAG_NODE_API_KEY; +var BLOG_POSTS_PER_PAGE = parseIntOrUndefined2(serverSettings.BLOG_POSTS_PER_PAGE) ?? 21; +var BLOG_SLUG = serverSettings.BLOG_SLUG ?? "latest"; +var GRAPHER_DB_NAME = serverSettings.GRAPHER_DB_NAME ?? "owid"; +var GRAPHER_DB_USER = serverSettings.GRAPHER_DB_USER ?? "root"; +var GRAPHER_DB_PASS = serverSettings.GRAPHER_DB_PASS ?? ""; +var GRAPHER_DB_HOST = serverSettings.GRAPHER_DB_HOST ?? "localhost"; +var GRAPHER_DB_PORT = parseIntOrUndefined2(serverSettings.GRAPHER_DB_PORT) ?? 3306; +var GRAPHER_TEST_DB_NAME = serverSettings.GRAPHER_TEST_DB_NAME ?? "owid"; +var GRAPHER_TEST_DB_USER = serverSettings.GRAPHER_TEST_DB_USER ?? "root"; +var GRAPHER_TEST_DB_PASS = serverSettings.GRAPHER_TEST_DB_PASS ?? ""; +var GRAPHER_TEST_DB_HOST = serverSettings.GRAPHER_TEST_DB_HOST ?? "localhost"; +var GRAPHER_TEST_DB_PORT = parseIntOrUndefined2(serverSettings.GRAPHER_TEST_DB_PORT) ?? 3306; +var BAKED_SITE_DIR = serverSettings.BAKED_SITE_DIR ?? path2.resolve(BASE_DIR, "bakedSite"); +var SECRET_KEY = serverSettings.SECRET_KEY ?? "fejwiaof jewiafo jeioa fjieowajf isa fjidosajfgj"; +var SESSION_COOKIE_AGE = parseIntOrUndefined2(serverSettings.SESSION_COOKIE_AGE) ?? 1209600; +var ALGOLIA_SECRET_KEY = serverSettings.ALGOLIA_SECRET_KEY ?? ""; +var ALGOLIA_INDEXING = serverSettings.ALGOLIA_INDEXING === "true"; +var HTTPS_ONLY = serverSettings.HTTPS_ONLY !== "false"; +var GIT_DATASETS_DIR = serverSettings.GIT_DATASETS_DIR ?? `${BASE_DIR}/datasetsExport`; +var TMP_DIR = serverSettings.TMP_DIR ?? "/tmp"; +var UNCATEGORIZED_TAG_ID = parseIntOrUndefined2(serverSettings.UNCATEGORIZED_TAG_ID) ?? 375; +var BAKE_ON_CHANGE = serverSettings.BAKE_ON_CHANGE === "true"; +var DEPLOY_QUEUE_FILE_PATH = serverSettings.DEPLOY_QUEUE_FILE_PATH ?? `${BASE_DIR}/.queue`; +var DEPLOY_PENDING_FILE_PATH = serverSettings.DEPLOY_PENDING_FILE_PATH ?? `${BASE_DIR}/.pending`; +var CLOUDFLARE_AUD = serverSettings.CLOUDFLARE_AUD ?? ""; +var CATALOG_PATH = serverSettings.CATALOG_PATH ?? ""; +var GDOCS_PRIVATE_KEY = (serverSettings.GDOCS_PRIVATE_KEY ?? "").replaceAll('"', "").replaceAll("'", ""); +var GDOCS_CLIENT_ID = serverSettings.GDOCS_CLIENT_ID ?? ""; +var GDOCS_BACKPORTING_TARGET_FOLDER = serverSettings.GDOCS_BACKPORTING_TARGET_FOLDER ?? ""; +var GDOCS_IMAGES_BACKPORTING_TARGET_FOLDER = serverSettings.GDOCS_IMAGES_BACKPORTING_TARGET_FOLDER ?? ""; +var GDOCS_DONATE_FAQS_DOCUMENT_ID = serverSettings.GDOCS_DONATE_FAQS_DOCUMENT_ID ?? "194PNSFjgSlt9Zm5xYuDOF0l_GLKZbVxH2co3zCok_cE"; +var GDOCS_SHARED_DRIVE_ID = serverSettings.GDOCS_SHARED_DRIVE_ID ?? ""; +var GDOCS_DETAILS_ON_DEMAND_ID2 = serverSettings.GDOCS_DETAILS_ON_DEMAND_ID ?? ""; +var rcloneConfig = {}; +var rcloneConfigPath = path2.join(os.homedir(), ".config/rclone/rclone.conf"); +if (fs2.existsSync(rcloneConfigPath)) { + rcloneConfig = ini.parse(fs2.readFileSync(rcloneConfigPath, "utf-8")); +} +var IMAGE_HOSTING_R2_CDN_URL2 = serverSettings.IMAGE_HOSTING_R2_CDN_URL || ""; +var IMAGE_HOSTING_R2_BUCKET_PATH2 = serverSettings.IMAGE_HOSTING_R2_BUCKET_PATH || ""; +var IMAGE_HOSTING_R2_BUCKET_SUBFOLDER_PATH2 = IMAGE_HOSTING_R2_BUCKET_PATH2.slice( + IMAGE_HOSTING_R2_BUCKET_PATH2.indexOf("/") + 1 +); +var R2_ENDPOINT = serverSettings.R2_ENDPOINT || rcloneConfig["owid-r2"]?.endpoint || "https://078fcdfed9955087315dd86792e71a7e.r2.cloudflarestorage.com"; +var R2_ACCESS_KEY_ID = serverSettings.R2_ACCESS_KEY_ID || rcloneConfig["owid-r2"]?.access_key_id || ""; +var R2_SECRET_ACCESS_KEY = serverSettings.R2_SECRET_ACCESS_KEY || rcloneConfig["owid-r2"]?.secret_access_key || ""; +var R2_REGION = serverSettings.R2_REGION || rcloneConfig["owid-r2"]?.region || "auto"; +var GRAPHER_CONFIG_R2_BUCKET = serverSettings.GRAPHER_CONFIG_R2_BUCKET; +var GRAPHER_CONFIG_R2_BUCKET_PATH = serverSettings.GRAPHER_CONFIG_R2_BUCKET_PATH; +var BUILDKITE_API_ACCESS_TOKEN = serverSettings.BUILDKITE_API_ACCESS_TOKEN ?? ""; +var BUILDKITE_DEPLOY_CONTENT_PIPELINE_SLUG = serverSettings.BUILDKITE_DEPLOY_CONTENT_PIPELINE_SLUG || "owid-deploy-content-master"; +var BUILDKITE_BRANCH = serverSettings.BUILDKITE_BRANCH || "master"; +var BUILDKITE_DEPLOY_CONTENT_SLACK_CHANNEL = serverSettings.BUILDKITE_DEPLOY_CONTENT_SLACK_CHANNEL || "C06EWA0DK4H"; +var OPENAI_API_KEY = serverSettings.OPENAI_API_KEY ?? ""; +var SLACK_BOT_OAUTH_TOKEN = serverSettings.SLACK_BOT_OAUTH_TOKEN ?? ""; +var LEGACY_WORDPRESS_IMAGE_URL = serverSettings.LEGACY_WORDPRESS_IMAGE_URL ?? "https://assets.ourworldindata.org/uploads"; +var ENV_IS_STAGING = ADMIN_BASE_URL2.includes( + "http://staging-site" +); + +// site/SiteConstants.ts +import { faRss } from "file:///Users/sophia/code/owid/owid-grapher/node_modules/@fortawesome/free-solid-svg-icons/index.mjs"; +import { + faXTwitter, + faFacebookSquare, + faInstagram, + faThreads, + faLinkedin, + faBluesky +} from "file:///Users/sophia/code/owid/owid-grapher/node_modules/@fortawesome/free-brands-svg-icons/index.mjs"; +var polyfillFeatures = [ + "es2021", + // String.replaceAll, Promise.any, ... + "es2022", + // Array.at, String.at, ... + "es2023", + // Array.findLast, Array.toReversed, Array.toSorted, Array.with, ... + "IntersectionObserver", + "IntersectionObserverEntry" +]; +var POLYFILL_VERSION = "4.8.0"; +var POLYFILL_URL = `https://cdnjs.cloudflare.com/polyfill/v3/polyfill.min.js?version=${POLYFILL_VERSION}&features=${polyfillFeatures.join( + "," +)}`; +var DATA_INSIGHTS_ATOM_FEED_NAME = "atom-data-insights.xml"; +var DATA_INSIGHT_ATOM_FEED_PROPS = { + title: "Atom feed for Daily Data Insights", + href: `https://ourworldindata.org/${DATA_INSIGHTS_ATOM_FEED_NAME}` +}; +var RSS_FEEDS = [ + { + title: "Research & Writing RSS Feed", + url: "/atom.xml", + icon: faRss + }, + { + title: "Daily Data Insights RSS Feed", + url: `/${DATA_INSIGHTS_ATOM_FEED_NAME}`, + icon: faRss + } +]; + +// site/viteUtils.tsx +import { sortBy } from "file:///Users/sophia/code/owid/owid-grapher/packages/@ourworldindata/utils/dist/index.js"; +import urljoin from "file:///Users/sophia/code/owid/owid-grapher/node_modules/url-join/lib/url-join.js"; +var VITE_DEV_URL = process.env.VITE_DEV_URL ?? "http://localhost:8090"; +var VITE_ASSET_SITE_ENTRY = "site/owid.entry.ts"; +var VITE_ASSET_ADMIN_ENTRY = "adminSiteClient/admin.entry.ts"; +var VITE_ENTRYPOINT_INFO = { + ["site" /* Site */]: { + entryPointFile: VITE_ASSET_SITE_ENTRY, + outDir: "assets", + outName: "owid" + }, + ["admin" /* Admin */]: { + entryPointFile: VITE_ASSET_ADMIN_ENTRY, + outDir: "assets-admin", + outName: "admin" + } +}; + +// vite.config-common.mts +import { defineConfig } from "file:///Users/sophia/code/owid/owid-grapher/node_modules/vite/dist/node/index.js"; +import pluginReact from "file:///Users/sophia/code/owid/owid-grapher/node_modules/@vitejs/plugin-react/dist/index.mjs"; +import pluginChecker from "file:///Users/sophia/code/owid/owid-grapher/node_modules/vite-plugin-checker/dist/esm/main.js"; +var defineViteConfigForEntrypoint = (entrypoint) => { + const entrypointInfo = VITE_ENTRYPOINT_INFO[entrypoint]; + return defineConfig({ + publicDir: false, + // don't copy public folder to dist + resolve: { + // prettier-ignore + alias: { + "@ourworldindata/grapher/src": "@ourworldindata/grapher/src", + // need this for imports of @ourworldindata/grapher/src/core/grapher.scss to work + // we alias to the packages source files in dev and prod: + // this means we get instant dev updates when we change one of them, + // and the prod build builds them all as esm modules, which helps with tree shaking + // Idea from https://github.com/LinusBorg/vue-lib-template/blob/3775e49b20a7c3349dd49321cad2ed7f9d575057/packages/playground/vite.config.ts + "@ourworldindata/components": "@ourworldindata/components/src/index.ts", + "@ourworldindata/core-table": "@ourworldindata/core-table/src/index.ts", + "@ourworldindata/explorer": "@ourworldindata/explorer/src/index.ts", + "@ourworldindata/grapher": "@ourworldindata/grapher/src/index.ts", + "@ourworldindata/types": "@ourworldindata/types/src/index.ts", + "@ourworldindata/utils": "@ourworldindata/utils/src/index.ts" + } + }, + css: { + devSourcemap: true + }, + define: { + // Replace all clientSettings with their respective values, i.e. assign e.g. BUGSNAG_API_KEY to process.env.BUGSNAG_API_KEY + // it's important to note that we only expose values that are present in the clientSettings file - not any other things that are stored in .env + ...Object.fromEntries( + Object.entries(clientSettings_exports).map(([key, value]) => [ + `process.env.${key}`, + JSON.stringify(value) + ]) + ) + }, + build: { + manifest: true, + // creates a manifest.json file, which we use to determine which files to load in prod + emptyOutDir: true, + outDir: `dist/${entrypointInfo.outDir}`, + sourcemap: true, + target: ["chrome80", "firefox78", "safari13.1"], + // see docs/browser-support.md + rollupOptions: { + input: { + [entrypointInfo.outName]: entrypointInfo.entryPointFile + }, + output: { + assetFileNames: `${entrypointInfo.outName}.css`, + entryFileNames: `${entrypointInfo.outName}.mjs` + } + } + }, + plugins: [ + pluginReact({ + babel: { + parserOpts: { + plugins: ["decorators-legacy"] + // needed so mobx decorators work correctly + } + } + }), + pluginChecker({ + typescript: { + buildMode: true, + tsconfigPath: "tsconfig.vite-checker.json" + } + }) + ], + server: { + port: 8090, + warmup: { clientFiles: [VITE_ASSET_SITE_ENTRY] } + }, + preview: { + port: 8090 + } + }); +}; + +// vite.config-site.mts +var vite_config_site_default = defineViteConfigForEntrypoint("site" /* Site */); +export { + vite_config_site_default as default +}; +//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsic2l0ZS92aXRlVXRpbHMudHN4IiwgInNldHRpbmdzL2ZpbmRCYXNlRGlyLnRzIiwgInNldHRpbmdzL3NlcnZlclNldHRpbmdzLnRzIiwgInNldHRpbmdzL2NsaWVudFNldHRpbmdzLnRzIiwgInNpdGUvU2l0ZUNvbnN0YW50cy50cyIsICJ2aXRlLmNvbmZpZy1jb21tb24ubXRzIiwgInZpdGUuY29uZmlnLXNpdGUubXRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCJcbmltcG9ydCBmaW5kQmFzZURpciBmcm9tIFwiLi4vc2V0dGluZ3MvZmluZEJhc2VEaXIuanNcIlxuaW1wb3J0IGZzIGZyb20gXCJmcy1leHRyYVwiXG5pbXBvcnQge1xuICAgIEVOVixcbiAgICBCQUtFRF9CQVNFX1VSTCxcbiAgICBWSVRFX1BSRVZJRVcsXG59IGZyb20gXCIuLi9zZXR0aW5ncy9zZXJ2ZXJTZXR0aW5ncy5qc1wiXG5pbXBvcnQgeyBQT0xZRklMTF9VUkwgfSBmcm9tIFwiLi9TaXRlQ29uc3RhbnRzLmpzXCJcbmltcG9ydCB0eXBlIHsgTWFuaWZlc3QsIE1hbmlmZXN0Q2h1bmsgfSBmcm9tIFwidml0ZVwiXG5pbXBvcnQgeyBzb3J0QnkgfSBmcm9tIFwiQG91cndvcmxkaW5kYXRhL3V0aWxzXCJcbmltcG9ydCB1cmxqb2luIGZyb20gXCJ1cmwtam9pblwiXG5cbmNvbnN0IFZJVEVfREVWX1VSTCA9IHByb2Nlc3MuZW52LlZJVEVfREVWX1VSTCA/PyBcImh0dHA6Ly9sb2NhbGhvc3Q6ODA5MFwiXG5cbmV4cG9ydCBjb25zdCBWSVRFX0FTU0VUX1NJVEVfRU5UUlkgPSBcInNpdGUvb3dpZC5lbnRyeS50c1wiXG5leHBvcnQgY29uc3QgVklURV9BU1NFVF9BRE1JTl9FTlRSWSA9IFwiYWRtaW5TaXRlQ2xpZW50L2FkbWluLmVudHJ5LnRzXCJcblxuZXhwb3J0IGVudW0gVml0ZUVudHJ5UG9pbnQge1xuICAgIFNpdGUgPSBcInNpdGVcIixcbiAgICBBZG1pbiA9IFwiYWRtaW5cIixcbn1cblxuZXhwb3J0IGNvbnN0IFZJVEVfRU5UUllQT0lOVF9JTkZPID0ge1xuICAgIFtWaXRlRW50cnlQb2ludC5TaXRlXToge1xuICAgICAgICBlbnRyeVBvaW50RmlsZTogVklURV9BU1NFVF9TSVRFX0VOVFJZLFxuICAgICAgICBvdXREaXI6IFwiYXNzZXRzXCIsXG4gICAgICAgIG91dE5hbWU6IFwib3dpZFwiLFxuICAgIH0sXG4gICAgW1ZpdGVFbnRyeVBvaW50LkFkbWluXToge1xuICAgICAgICBlbnRyeVBvaW50RmlsZTogVklURV9BU1NFVF9BRE1JTl9FTlRSWSxcbiAgICAgICAgb3V0RGlyOiBcImFzc2V0cy1hZG1pblwiLFxuICAgICAgICBvdXROYW1lOiBcImFkbWluXCIsXG4gICAgfSxcbn1cblxuLy8gV2UgQUxXQVlTIGxvYWQgcG9seWZpbGxzLlxuXG5jb25zdCBwb2x5ZmlsbFNjcmlwdCA9IDxzY3JpcHQga2V5PVwicG9seWZpbGxcIiBzcmM9e1BPTFlGSUxMX1VSTH0gLz5cbmNvbnN0IHBvbHlmaWxsUHJlbG9hZCA9IChcbiAgICA8bGlua1xuICAgICAgICBrZXk9XCJwb2x5ZmlsbC1wcmVsb2FkXCJcbiAgICAgICAgcmVsPVwicHJlbG9hZFwiXG4gICAgICAgIGhyZWY9e1BPTFlGSUxMX1VSTH1cbiAgICAgICAgYXM9XCJzY3JpcHRcIlxuICAgICAgICAvLyBDbG91ZGZsYXJlJ3MgRWFybHkgSGludHMgZ2VuZXJhdGlvbiBmb3IgdGhpcyBVUkwgZnVtYmxlcyB0aGUgYCZhbXA7YCBjb250YWluZWQgaW4gdGhpcyBsaW5rOyBzbyB3ZSBkaXNhYmxlIHRoaXMgZm9yIFwiRWFybHkgSGludHNcIiBmb3Igbm93LlxuICAgICAgICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2Nsb3VkZmxhcmUvd29ya2Vycy1zZGsvaXNzdWVzLzY1MjdcbiAgICAgICAgLy8gQ2xvdWRmbGFyZSBkaXNhYmxlcyBFYXJseSBIaW50cyBnZW5lcmF0aW9uIGZvciBhbnkgPGxpbms+IHRoYXQgZG9lc24ndCBqdXN0IGNvbnRhaW4gYHJlbGAsIGBocmVmYCwgYGFzYCAtIHNvIHRoZSBhY3R1YWwgbmFtZSBvZiB0aGlzXG4gICAgICAgIC8vIGF0dHIgZG9lc24ndCBhY3R1YWxseSBtYXR0ZXIuXG4gICAgICAgIGRhdGEtY2xvdWRmbGFyZS1kaXNhYmxlLWVhcmx5LWhpbnRzXG4gICAgLz5cbilcblxuaW50ZXJmYWNlIEFzc2V0cyB7XG4gICAgZm9ySGVhZGVyOiBSZWFjdC5SZWFjdEVsZW1lbnRbXVxuICAgIGZvckZvb3RlcjogUmVhY3QuUmVhY3RFbGVtZW50W11cbn1cblxuLy8gaW4gZGV2OiB3ZSBuZWVkIHRvIGxvYWQgc2V2ZXJhbCB2aXRlIGNvcmUgc2NyaXB0cyBhbmQgcGx1Z2luczsgb3RoZXIgdGhhbiB0aGF0IHdlIG9ubHkgbmVlZCB0byBsb2FkIHRoZSBlbnRyeSBwb2ludCwgYW5kIHZpdGUgd2lsbCB0YWtlIGNhcmUgb2YgdGhlIHJlc3QuXG5jb25zdCBkZXZBc3NldHMgPSAoZW50cnlwb2ludDogVml0ZUVudHJ5UG9pbnQsIGJhc2VVcmw6IHN0cmluZyk6IEFzc2V0cyA9PiB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgZm9ySGVhZGVyOiBbcG9seWZpbGxQcmVsb2FkXSxcbiAgICAgICAgZm9yRm9vdGVyOiBbXG4gICAgICAgICAgICBwb2x5ZmlsbFNjcmlwdCxcbiAgICAgICAgICAgIDxzY3JpcHRcbiAgICAgICAgICAgICAgICBrZXk9XCJ2aXRlLXJlYWN0LXByZWFtYmxlXCIgLy8gaHR0cHM6Ly92aXRlanMuZGV2L2d1aWRlL2JhY2tlbmQtaW50ZWdyYXRpb24uaHRtbFxuICAgICAgICAgICAgICAgIHR5cGU9XCJtb2R1bGVcIlxuICAgICAgICAgICAgICAgIGRhbmdlcm91c2x5U2V0SW5uZXJIVE1MPXt7XG4gICAgICAgICAgICAgICAgICAgIF9faHRtbDogYGltcG9ydCBSZWZyZXNoUnVudGltZSBmcm9tICcke2Jhc2VVcmx9L0ByZWFjdC1yZWZyZXNoJ1xuICBSZWZyZXNoUnVudGltZS5pbmplY3RJbnRvR2xvYmFsSG9vayh3aW5kb3cpXG4gIHdpbmRvdy4kUmVmcmVzaFJlZyQgPSAoKSA9PiB7fVxuICB3aW5kb3cuJFJlZnJlc2hTaWckID0gKCkgPT4gKHR5cGUpID0+IHR5cGVcbiAgd2luZG93Ll9fdml0ZV9wbHVnaW5fcmVhY3RfcHJlYW1ibGVfaW5zdGFsbGVkX18gPSB0cnVlYCxcbiAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgLz4sXG4gICAgICAgICAgICA8c2NyaXB0XG4gICAgICAgICAgICAgICAga2V5PVwidml0ZS1wbHVnaW4tY2hlY2tlclwiXG4gICAgICAgICAgICAgICAgdHlwZT1cIm1vZHVsZVwiXG4gICAgICAgICAgICAgICAgc3JjPXtgJHtiYXNlVXJsfS9Adml0ZS1wbHVnaW4tY2hlY2tlci1ydW50aW1lLWVudHJ5YH1cbiAgICAgICAgICAgIC8+LFxuICAgICAgICAgICAgPHNjcmlwdFxuICAgICAgICAgICAgICAgIGtleT1cInZpdGUtY2xpZW50XCJcbiAgICAgICAgICAgICAgICB0eXBlPVwibW9kdWxlXCJcbiAgICAgICAgICAgICAgICBzcmM9e2Ake2Jhc2VVcmx9L0B2aXRlL2NsaWVudGB9XG4gICAgICAgICAgICAvPixcbiAgICAgICAgICAgIDxzY3JpcHRcbiAgICAgICAgICAgICAgICBrZXk9e2VudHJ5cG9pbnR9XG4gICAgICAgICAgICAgICAgdHlwZT1cIm1vZHVsZVwiXG4gICAgICAgICAgICAgICAgc3JjPXtgJHtiYXNlVXJsfS8ke1ZJVEVfRU5UUllQT0lOVF9JTkZPW2VudHJ5cG9pbnRdLmVudHJ5UG9pbnRGaWxlfWB9XG4gICAgICAgICAgICAvPixcbiAgICAgICAgXSxcbiAgICB9XG59XG5cbi8vIEdvZXMgdGhyb3VnaCB0aGUgbWFuaWZlc3QuanNvbiBmaWxlcyB0aGF0IHZpdGUgY3JlYXRlcywgZmluZHMgYWxsIHRoZSBhc3NldHMgdGhhdCBhcmUgcmVxdWlyZWQgZm9yIHRoZSBnaXZlbiBlbnRyeSBwb2ludCxcbi8vIGFuZCBjcmVhdGVzIHRoZSBhcHByb3ByaWF0ZSA8bGluaz4gYW5kIDxzY3JpcHQ+IHRhZ3MgZm9yIHRoZW0uXG5leHBvcnQgY29uc3QgY3JlYXRlVGFnc0Zvck1hbmlmZXN0RW50cnkgPSAoXG4gICAgbWFuaWZlc3Q6IE1hbmlmZXN0LFxuICAgIGVudHJ5OiBzdHJpbmcsXG4gICAgYXNzZXRCYXNlVXJsOiBzdHJpbmdcbik6IEFzc2V0cyA9PiB7XG4gICAgY29uc3QgY3JlYXRlVGFncyA9IChlbnRyeTogc3RyaW5nKTogUmVhY3QuUmVhY3RFbGVtZW50W10gPT4ge1xuICAgICAgICBjb25zdCBtYW5pZmVzdEVudHJ5ID1cbiAgICAgICAgICAgIE9iamVjdC52YWx1ZXMobWFuaWZlc3QpLmZpbmQoKGUpID0+IGUuZmlsZSA9PT0gZW50cnkpID8/XG4gICAgICAgICAgICAobWFuaWZlc3RbZW50cnldIGFzIE1hbmlmZXN0Q2h1bmsgfCB1bmRlZmluZWQpXG4gICAgICAgIGxldCBhc3NldHMgPSBbXSBhcyBSZWFjdC5SZWFjdEVsZW1lbnRbXVxuXG4gICAgICAgIGlmICghbWFuaWZlc3RFbnRyeSAmJiAhZW50cnkuZW5kc1dpdGgoXCIuY3NzXCIpKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDb3VsZCBub3QgZmluZCBtYW5pZmVzdCBlbnRyeSBmb3IgJHtlbnRyeX1gKVxuXG4gICAgICAgIGNvbnN0IGFzc2V0VXJsID0gdXJsam9pbihhc3NldEJhc2VVcmwsIG1hbmlmZXN0RW50cnk/LmZpbGUgPz8gZW50cnkpXG5cbiAgICAgICAgaWYgKGVudHJ5LmVuZHNXaXRoKFwiLmNzc1wiKSkge1xuICAgICAgICAgICAgYXNzZXRzID0gW1xuICAgICAgICAgICAgICAgIC4uLmFzc2V0cyxcbiAgICAgICAgICAgICAgICA8bGlua1xuICAgICAgICAgICAgICAgICAgICBrZXk9e2Ake2VudHJ5fS1wcmVsb2FkYH1cbiAgICAgICAgICAgICAgICAgICAgcmVsPVwicHJlbG9hZFwiXG4gICAgICAgICAgICAgICAgICAgIGhyZWY9e2Fzc2V0VXJsfVxuICAgICAgICAgICAgICAgICAgICBhcz1cInN0eWxlXCJcbiAgICAgICAgICAgICAgICAvPixcbiAgICAgICAgICAgICAgICA8bGluayBrZXk9e2VudHJ5fSByZWw9XCJzdHlsZXNoZWV0XCIgaHJlZj17YXNzZXRVcmx9IC8+LFxuICAgICAgICAgICAgXVxuICAgICAgICB9IGVsc2UgaWYgKGVudHJ5Lm1hdGNoKC9cXC5bY21dPyhqc3xqc3h8dHN8dHN4KSQvKSkge1xuICAgICAgICAgICAgLy8gZXhwbGljaXRseSByZWZlcmVuY2UgdGhlIGVudHJ5OyBwcmVsb2FkIGl0IGFuZCBpdHMgZGVwZW5kZW5jaWVzXG4gICAgICAgICAgICBpZiAobWFuaWZlc3RFbnRyeT8uaXNFbnRyeSkge1xuICAgICAgICAgICAgICAgIGFzc2V0cyA9IFtcbiAgICAgICAgICAgICAgICAgICAgLi4uYXNzZXRzLFxuICAgICAgICAgICAgICAgICAgICA8c2NyaXB0XG4gICAgICAgICAgICAgICAgICAgICAgICBrZXk9e2VudHJ5fVxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cIm1vZHVsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBzcmM9e2Fzc2V0VXJsfVxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1hdHRhY2gtb3dpZC1lcnJvci1oYW5kbGVyXG4gICAgICAgICAgICAgICAgICAgIC8+LFxuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYXNzZXRzID0gW1xuICAgICAgICAgICAgICAgIC4uLmFzc2V0cyxcbiAgICAgICAgICAgICAgICA8bGlua1xuICAgICAgICAgICAgICAgICAgICBrZXk9e2Ake2VudHJ5fS1wcmVsb2FkYH1cbiAgICAgICAgICAgICAgICAgICAgcmVsPVwibW9kdWxlcHJlbG9hZFwiIC8vIHNlZSBodHRwczovL2RldmVsb3Blci5jaHJvbWUuY29tL2Jsb2cvbW9kdWxlcHJlbG9hZC9cbiAgICAgICAgICAgICAgICAgICAgaHJlZj17YXNzZXRVcmx9XG4gICAgICAgICAgICAgICAgLz4sXG4gICAgICAgICAgICBdXG4gICAgICAgIH1cblxuICAgICAgICAvLyB3ZSBuZWVkIHRvIHJlY3Vyc2UgaW50byBib3RoIHRoZSBtb2R1bGUgaW1wb3J0cyBhbmQgaW1wb3J0ZWQgY3NzIGZpbGVzLCBhbmQgYWRkIHRhZ3MgZm9yIHRoZW0gYXMgd2VsbFxuICAgICAgICAvLyBhbHNvLCB3ZSBuZWVkIHRvIHRha2UgY2FyZSBvZiB0aGUgb3JkZXIgaGVyZSwgc28gdGhlIGltcG9ydGVkIGZpbGUgaXMgbG9hZGVkIGJlZm9yZSB0aGUgaW1wb3J0aW5nIGZpbGVcbiAgICAgICAgaWYgKG1hbmlmZXN0RW50cnk/LmNzcykge1xuICAgICAgICAgICAgYXNzZXRzID0gWy4uLm1hbmlmZXN0RW50cnkuY3NzLmZsYXRNYXAoY3JlYXRlVGFncyksIC4uLmFzc2V0c11cbiAgICAgICAgfVxuICAgICAgICBpZiAobWFuaWZlc3RFbnRyeT8uaW1wb3J0cykge1xuICAgICAgICAgICAgYXNzZXRzID0gWy4uLm1hbmlmZXN0RW50cnkuaW1wb3J0cy5mbGF0TWFwKGNyZWF0ZVRhZ3MpLCAuLi5hc3NldHNdXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGFzc2V0c1xuICAgIH1cblxuICAgIGNvbnN0IGFzc2V0cyA9IGNyZWF0ZVRhZ3MoZW50cnkpXG4gICAgcmV0dXJuIHtcbiAgICAgICAgZm9ySGVhZGVyOiBhc3NldHMuZmlsdGVyKChlbCkgPT4gZWwudHlwZSA9PT0gXCJsaW5rXCIpLFxuICAgICAgICBmb3JGb290ZXI6IGFzc2V0cy5maWx0ZXIoKGVsKSA9PiBlbC50eXBlID09PSBcInNjcmlwdFwiKSxcbiAgICB9XG59XG5cbi8vIGluIHByb2Q6IHdlIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgd2UgaW5jbHVkZSA8c2NyaXB0PiBhbmQgPGxpbms+IHRhZ3MgdGhhdCBhcmUgcmVxdWlyZWQgZm9yIHRoZSBlbnRyeSBwb2ludC5cbi8vIHRoaXMgY291bGQgYmUsIGZvciBleGFtcGxlOiBvd2lkLm1qcywgY29tbW9uLm1qcywgb3dpZC5jc3MsIGNvbW1vbi5jc3MuIChwbHVzIEdvb2dsZSBGb250cyBhbmQgcG9seWZpbGxzKVxuY29uc3QgcHJvZEFzc2V0cyA9IChlbnRyeXBvaW50OiBWaXRlRW50cnlQb2ludCwgYmFzZVVybDogc3RyaW5nKTogQXNzZXRzID0+IHtcbiAgICBjb25zdCBiYXNlRGlyID0gZmluZEJhc2VEaXIoX19kaXJuYW1lKVxuICAgIGNvbnN0IGVudHJ5cG9pbnRJbmZvID0gVklURV9FTlRSWVBPSU5UX0lORk9bZW50cnlwb2ludF1cbiAgICBjb25zdCBtYW5pZmVzdFBhdGggPSBgJHtiYXNlRGlyfS9kaXN0LyR7ZW50cnlwb2ludEluZm8ub3V0RGlyfS8udml0ZS9tYW5pZmVzdC5qc29uYFxuICAgIGxldCBtYW5pZmVzdFxuICAgIHRyeSB7XG4gICAgICAgIG1hbmlmZXN0ID0gZnMucmVhZEpzb25TeW5jKG1hbmlmZXN0UGF0aCkgYXMgTWFuaWZlc3RcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgYENvdWxkIG5vdCByZWFkIHRoZSBidWlsZCBtYW5pZmVzdCAoJyR7bWFuaWZlc3RQYXRofScpLCB3aGljaCBpcyByZXF1aXJlZCBmb3IgcHJvZHVjdGlvbi5cbiAgICAgICAgICAgIElmIHlvdSdyZSBydW5uaW5nIGluIFZJVEVfUFJFVklFVyBtb2RlLCB3YWl0IGZvciB0aGUgYnVpbGQgdG8gZmluaXNoIGFuZCB0aGVuIHJlbG9hZCB0aGlzIHBhZ2UuYCxcbiAgICAgICAgICAgIHsgY2F1c2U6IGVyciB9XG4gICAgICAgIClcbiAgICB9XG5cbiAgICBjb25zdCBhc3NldEJhc2VVcmwgPSBgJHtiYXNlVXJsfS8ke2VudHJ5cG9pbnRJbmZvLm91dERpcn0vYFxuICAgIGNvbnN0IGFzc2V0cyA9IGNyZWF0ZVRhZ3NGb3JNYW5pZmVzdEVudHJ5KFxuICAgICAgICBtYW5pZmVzdCxcbiAgICAgICAgZW50cnlwb2ludEluZm8uZW50cnlQb2ludEZpbGUsXG4gICAgICAgIGFzc2V0QmFzZVVybFxuICAgIClcblxuICAgIHJldHVybiB7XG4gICAgICAgIC8vIHNvcnQgZm9yIHNvbWUga2luZCBvZiBjb25zaXN0ZW5jeTogZmlyc3QgbW9kdWxlcHJlbG9hZCwgdGhlbiBwcmVsb2FkLCB0aGVuIHN0eWxlc2hlZXRcbiAgICAgICAgZm9ySGVhZGVyOiBzb3J0QnkoW3BvbHlmaWxsUHJlbG9hZCwgLi4uYXNzZXRzLmZvckhlYWRlcl0sIFwicHJvcHMucmVsXCIpLFxuICAgICAgICBmb3JGb290ZXI6IFtwb2x5ZmlsbFNjcmlwdCwgLi4uYXNzZXRzLmZvckZvb3Rlcl0sXG4gICAgfVxufVxuXG5jb25zdCB1c2VQcm9kdWN0aW9uQXNzZXRzID0gRU5WID09PSBcInByb2R1Y3Rpb25cIiB8fCBWSVRFX1BSRVZJRVdcblxuY29uc3Qgdml0ZUFzc2V0cyA9IChlbnRyeXBvaW50OiBWaXRlRW50cnlQb2ludCwgcHJvZEJhc2VVcmw/OiBzdHJpbmcpID0+XG4gICAgdXNlUHJvZHVjdGlvbkFzc2V0c1xuICAgICAgICA/IHByb2RBc3NldHMoZW50cnlwb2ludCwgcHJvZEJhc2VVcmwgPz8gXCJcIilcbiAgICAgICAgOiBkZXZBc3NldHMoZW50cnlwb2ludCwgVklURV9ERVZfVVJMKVxuXG5leHBvcnQgY29uc3Qgdml0ZUFzc2V0c0ZvckFkbWluID0gKCkgPT4gdml0ZUFzc2V0cyhWaXRlRW50cnlQb2ludC5BZG1pbilcbmV4cG9ydCBjb25zdCB2aXRlQXNzZXRzRm9yU2l0ZSA9ICgpID0+IHZpdGVBc3NldHMoVml0ZUVudHJ5UG9pbnQuU2l0ZSlcblxuZXhwb3J0IGNvbnN0IGdlbmVyYXRlRW1iZWRTbmlwcGV0ID0gKCkgPT4ge1xuICAgIC8vIE1ha2Ugc3VyZSB3ZSdyZSB1c2luZyBhbiBhYnNvbHV0ZSBVUkwgaGVyZSwgc2luY2Ugd2UgZG9uJ3Qga25vdyBpbiB3aGF0IGNvbnRleHQgdGhlIGVtYmVkIHNuaXBwZXQgaXMgdXNlZC5cbiAgICBjb25zdCBhc3NldHMgPSB2aXRlQXNzZXRzKFZpdGVFbnRyeVBvaW50LlNpdGUsIEJBS0VEX0JBU0VfVVJMKVxuXG4gICAgY29uc3Qgc2VyaWFsaXplZEFzc2V0cyA9IFsuLi5hc3NldHMuZm9ySGVhZGVyLCAuLi5hc3NldHMuZm9yRm9vdGVyXS5tYXAoXG4gICAgICAgIChlbCkgPT4gKHtcbiAgICAgICAgICAgIHRhZzogZWwudHlwZSxcbiAgICAgICAgICAgIHByb3BzOiBlbC5wcm9wcyxcbiAgICAgICAgfSlcbiAgICApXG5cbiAgICBjb25zdCBzY3JpcHRDb3VudCA9IHNlcmlhbGl6ZWRBc3NldHMuZmlsdGVyKFxuICAgICAgICAoYXNzZXQpID0+XG4gICAgICAgICAgICBhc3NldC50YWcgPT09IFwic2NyaXB0XCIgJiYgIWFzc2V0LnByb3BzLmRhbmdlcm91c2x5U2V0SW5uZXJIVE1MIC8vIG9ubG9hZCBkb2Vzbid0IGZpcmUgb24gaW5saW5lIHNjcmlwdHMsIHNvIG5lZWQgdG8gaGFuZGxlIHRoYXQgc2VwYXJhdGVseVxuICAgICkubGVuZ3RoXG5cbiAgICByZXR1cm4gYFxuY29uc3QgYXNzZXRzID0gJHtKU09OLnN0cmluZ2lmeShzZXJpYWxpemVkQXNzZXRzLCB1bmRlZmluZWQsIDIpfTtcbmxldCBsb2FkZWRTY3JpcHRzID0gMDtcblxuY29uc3Qgb25Mb2FkID0gKCkgPT4ge1xuICAgIGxvYWRlZFNjcmlwdHMrKztcbiAgICBpZiAobG9hZGVkU2NyaXB0cyA9PT0gJHtzY3JpcHRDb3VudH0pIHtcbiAgICAgICAgd2luZG93Lk11bHRpRW1iZWRkZXJTaW5nbGV0b24uZW1iZWRBbGwoKTtcbiAgICB9XG59XG5cbmZvciAoY29uc3QgYXNzZXQgb2YgYXNzZXRzKSB7XG4gICAgY29uc3QgZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KGFzc2V0LnRhZyk7XG4gICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoYXNzZXQucHJvcHMpKSB7XG4gICAgICAgIGVsLnNldEF0dHJpYnV0ZShrZXksIHZhbHVlKTtcbiAgICB9XG4gICAgaWYgKGFzc2V0LnByb3BzICYmIGFzc2V0LnByb3BzLmRhbmdlcm91c2x5U2V0SW5uZXJIVE1MKSB7XG4gICAgICAgIGVsLnRleHQgPSBhc3NldC5wcm9wcy5kYW5nZXJvdXNseVNldElubmVySFRNTC5fX2h0bWxcbiAgICB9IGVsc2UgaWYgKGFzc2V0LnRhZyA9PT0gXCJzY3JpcHRcIikge1xuICAgICAgICBlbC5vbmxvYWQgPSBvbkxvYWQ7XG4gICAgfVxuICAgIGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoZWwpO1xufWBcbn1cbiIsICJjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfZGlybmFtZSA9IFwiL1VzZXJzL3NvcGhpYS9jb2RlL293aWQvb3dpZC1ncmFwaGVyL3NldHRpbmdzXCI7Y29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2ZpbGVuYW1lID0gXCIvVXNlcnMvc29waGlhL2NvZGUvb3dpZC9vd2lkLWdyYXBoZXIvc2V0dGluZ3MvZmluZEJhc2VEaXIudHNcIjtjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfaW1wb3J0X21ldGFfdXJsID0gXCJmaWxlOi8vL1VzZXJzL3NvcGhpYS9jb2RlL293aWQvb3dpZC1ncmFwaGVyL3NldHRpbmdzL2ZpbmRCYXNlRGlyLnRzXCI7aW1wb3J0IHBhdGggZnJvbSBcInBhdGhcIlxuaW1wb3J0IGZzIGZyb20gXCJmc1wiXG5cbi8qKlxuICogV2l0aCBvdXIgY29kZSByZXNpZGluZyBlaXRoZXIgaW4gc29tZSBzcmMgZm9sZGVyIG9yIGluIHRoZSBgaXRzSnVzdEphdmFzY3JpcHRgIGZvbGRlciwgaXQncyBub3RcbiAqIGFsd2F5cyBzdHJhaWdodGZvcndhcmQgdG8ga25vdyB3aGVyZSB0byBmaW5kIGEgY29uZmlnIGZpbGUgbGlrZSBgLmVudmAuXG4gKiBIZXJlLCB3ZSBqdXN0IHRyYXZlcnNlIHRoZSBkaXJlY3RvcnkgdHJlZSB1cHdhcmRzIHVudGlsIHdlIGZpbmQgYSBgcGFja2FnZS5qc29uYCBmaWxlLCB3aGljaFxuICogc2hvdWxkIGluZGljYXRlIHRoYXQgd2UgaGF2ZSBmb3VuZCB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhlIGBvd2lkLWdyYXBoZXJgIHJlcG8uXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGZpbmRQcm9qZWN0QmFzZURpcihmcm9tOiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIGlmICghZnMuZXhpc3RzU3luYykgcmV0dXJuIHVuZGVmaW5lZCAvLyBpZiBmcy5leGlzdHNTeW5jIGRvZXNuJ3QgZXhpc3QsIHdlJ3JlIHByb2JhYmx5IHJ1bm5pbmcgaW4gdGhlIGJyb3dzZXJcblxuICAgIGxldCBkaXIgPSBwYXRoLmRpcm5hbWUoZnJvbSlcblxuICAgIHdoaWxlIChkaXIubGVuZ3RoKSB7XG4gICAgICAgIGlmIChmcy5leGlzdHNTeW5jKHBhdGgucmVzb2x2ZShkaXIsIFwicGFja2FnZS5qc29uXCIpKSkgcmV0dXJuIGRpclxuXG4gICAgICAgIGNvbnN0IHBhcmVudERpciA9IHBhdGgucmVzb2x2ZShkaXIsIFwiLi5cIilcbiAgICAgICAgLy8gYnJlYWsgaWYgd2UgaGF2ZSByZWFjaGVkIHRoZSBmaWxlIHN5c3RlbSByb290XG4gICAgICAgIGlmIChwYXJlbnREaXIgPT09IGRpcikgYnJlYWtcbiAgICAgICAgZWxzZSBkaXIgPSBwYXJlbnREaXJcbiAgICB9XG5cbiAgICByZXR1cm4gdW5kZWZpbmVkXG59XG4iLCAiY29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2Rpcm5hbWUgPSBcIi9Vc2Vycy9zb3BoaWEvY29kZS9vd2lkL293aWQtZ3JhcGhlci9zZXR0aW5nc1wiO2NvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9maWxlbmFtZSA9IFwiL1VzZXJzL3NvcGhpYS9jb2RlL293aWQvb3dpZC1ncmFwaGVyL3NldHRpbmdzL3NlcnZlclNldHRpbmdzLnRzXCI7Y29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2ltcG9ydF9tZXRhX3VybCA9IFwiZmlsZTovLy9Vc2Vycy9zb3BoaWEvY29kZS9vd2lkL293aWQtZ3JhcGhlci9zZXR0aW5ncy9zZXJ2ZXJTZXR0aW5ncy50c1wiOy8vIFRoaXMgaXMgd2hlcmUgc2VydmVyLXNpZGUgb25seSwgcG90ZW50aWFsbHkgc2Vuc2l0aXZlIHNldHRpbmdzIGVudGVyIGZyb20gdGhlIGVudmlyb25tZW50XG4vLyBETyBOT1Qgc3RvcmUgc2Vuc2l0aXZlIHN0cmluZ3MgaW4gdGhpcyBmaWxlIGl0c2VsZiwgYXMgaXQgaXMgY2hlY2tlZCBpbiB0byBnaXQhXG5cbmltcG9ydCBwYXRoIGZyb20gXCJwYXRoXCJcbmltcG9ydCBkb3RlbnYgZnJvbSBcImRvdGVudlwiXG5pbXBvcnQgZmluZEJhc2VEaXIgZnJvbSBcIi4vZmluZEJhc2VEaXIuanNcIlxuaW1wb3J0IGZzIGZyb20gXCJmc1wiXG5pbXBvcnQgaW5pIGZyb20gXCJpbmlcIlxuaW1wb3J0IG9zIGZyb20gXCJvc1wiXG5cbmNvbnN0IGJhc2VEaXIgPSBmaW5kQmFzZURpcihfX2Rpcm5hbWUpXG5pZiAoYmFzZURpciA9PT0gdW5kZWZpbmVkKSB0aHJvdyBuZXcgRXJyb3IoXCJjb3VsZCBub3QgbG9jYXRlIGJhc2UgcGFja2FnZS5qc29uXCIpXG5cbmRvdGVudi5jb25maWcoeyBwYXRoOiBgJHtiYXNlRGlyfS8uZW52YCB9KVxuXG5pbXBvcnQgKiBhcyBjbGllbnRTZXR0aW5ncyBmcm9tIFwiLi9jbGllbnRTZXR0aW5ncy5qc1wiXG5pbXBvcnQgeyBwYXJzZUludE9yVW5kZWZpbmVkIH0gZnJvbSBcIkBvdXJ3b3JsZGluZGF0YS91dGlsc1wiXG5cbmNvbnN0IHNlcnZlclNldHRpbmdzID0gcHJvY2Vzcy5lbnYgPz8ge31cblxuZXhwb3J0IGNvbnN0IEJBU0VfRElSOiBzdHJpbmcgPSBiYXNlRGlyXG5leHBvcnQgY29uc3QgRU5WOiBcImRldmVsb3BtZW50XCIgfCBcInByb2R1Y3Rpb25cIiA9IGNsaWVudFNldHRpbmdzLkVOVlxuXG5leHBvcnQgY29uc3QgQURNSU5fU0VSVkVSX1BPUlQ6IG51bWJlciA9IGNsaWVudFNldHRpbmdzLkFETUlOX1NFUlZFUl9QT1JUXG5leHBvcnQgY29uc3QgQURNSU5fU0VSVkVSX0hPU1Q6IHN0cmluZyA9IGNsaWVudFNldHRpbmdzLkFETUlOX1NFUlZFUl9IT1NUXG5leHBvcnQgY29uc3QgREFUQV9BUElfRk9SX0FETUlOX1VJOiBzdHJpbmcgfCB1bmRlZmluZWQgPVxuICAgIHNlcnZlclNldHRpbmdzLkRBVEFfQVBJX0ZPUl9BRE1JTl9VSVxuZXhwb3J0IGNvbnN0IEJBS0VEX0JBU0VfVVJMOiBzdHJpbmcgPSBjbGllbnRTZXR0aW5ncy5CQUtFRF9CQVNFX1VSTFxuXG5leHBvcnQgY29uc3QgVklURV9QUkVWSUVXOiBib29sZWFuID0gc2VydmVyU2V0dGluZ3MuVklURV9QUkVWSUVXID09PSBcInRydWVcIlxuXG5leHBvcnQgY29uc3QgQURNSU5fQkFTRV9VUkw6IHN0cmluZyA9IGNsaWVudFNldHRpbmdzLkFETUlOX0JBU0VfVVJMXG5cbmV4cG9ydCBjb25zdCBCQUtFRF9HUkFQSEVSX1VSTDogc3RyaW5nID1cbiAgICBzZXJ2ZXJTZXR0aW5ncy5CQUtFRF9HUkFQSEVSX1VSTCA/PyBgJHtCQUtFRF9CQVNFX1VSTH0vZ3JhcGhlcmBcblxuZXhwb3J0IGNvbnN0IE9QVElNSVpFX1NWR19FWFBPUlRTOiBib29sZWFuID1cbiAgICBzZXJ2ZXJTZXR0aW5ncy5PUFRJTUlaRV9TVkdfRVhQT1JUUyA9PT0gXCJ0cnVlXCJcblxuZXhwb3J0IGNvbnN0IEdJVEhVQl9VU0VSTkFNRTogc3RyaW5nID1cbiAgICBzZXJ2ZXJTZXR0aW5ncy5HSVRIVUJfVVNFUk5BTUUgPz8gXCJvd2lkLXRlc3RcIlxuZXhwb3J0IGNvbnN0IEdJVF9ERUZBVUxUX1VTRVJOQU1FOiBzdHJpbmcgPVxuICAgIHNlcnZlclNldHRpbmdzLkdJVF9ERUZBVUxUX1VTRVJOQU1FID8/IFwiT3VyIFdvcmxkIGluIERhdGFcIlxuZXhwb3J0IGNvbnN0IEdJVF9ERUZBVUxUX0VNQUlMOiBzdHJpbmcgPVxuICAgIHNlcnZlclNldHRpbmdzLkdJVF9ERUZBVUxUX0VNQUlMID8/IFwiaW5mb0BvdXJ3b3JsZGluZGF0YS5vcmdcIlxuXG5leHBvcnQgY29uc3QgQlVHU05BR19BUElfS0VZOiBzdHJpbmcgfCB1bmRlZmluZWQgPVxuICAgIHNlcnZlclNldHRpbmdzLkJVR1NOQUdfQVBJX0tFWVxuZXhwb3J0IGNvbnN0IEJVR1NOQUdfTk9ERV9BUElfS0VZOiBzdHJpbmcgfCB1bmRlZmluZWQgPVxuICAgIHNlcnZlclNldHRpbmdzLkJVR1NOQUdfTk9ERV9BUElfS0VZXG5cbmV4cG9ydCBjb25zdCBCTE9HX1BPU1RTX1BFUl9QQUdFOiBudW1iZXIgPVxuICAgIHBhcnNlSW50T3JVbmRlZmluZWQoc2VydmVyU2V0dGluZ3MuQkxPR19QT1NUU19QRVJfUEFHRSkgPz8gMjFcbmV4cG9ydCBjb25zdCBCTE9HX1NMVUc6IHN0cmluZyA9IHNlcnZlclNldHRpbmdzLkJMT0dfU0xVRyA/PyBcImxhdGVzdFwiXG5cbmV4cG9ydCBjb25zdCBHUkFQSEVSX0RCX05BTUU6IHN0cmluZyA9IHNlcnZlclNldHRpbmdzLkdSQVBIRVJfREJfTkFNRSA/PyBcIm93aWRcIlxuZXhwb3J0IGNvbnN0IEdSQVBIRVJfREJfVVNFUjogc3RyaW5nID0gc2VydmVyU2V0dGluZ3MuR1JBUEhFUl9EQl9VU0VSID8/IFwicm9vdFwiXG5leHBvcnQgY29uc3QgR1JBUEhFUl9EQl9QQVNTOiBzdHJpbmcgPSBzZXJ2ZXJTZXR0aW5ncy5HUkFQSEVSX0RCX1BBU1MgPz8gXCJcIlxuZXhwb3J0IGNvbnN0IEdSQVBIRVJfREJfSE9TVDogc3RyaW5nID1cbiAgICBzZXJ2ZXJTZXR0aW5ncy5HUkFQSEVSX0RCX0hPU1QgPz8gXCJsb2NhbGhvc3RcIlxuLy8gVGhlIE9XSUQgc3RhY2sgdXNlcyAzMzA3LCBidXQgaW5jYXNlIGl0J3MgdW5zZXQsIGFzc3VtZSB1c2VyIGlzIHJ1bm5pbmcgYSBsb2NhbCBzZXR1cFxuZXhwb3J0IGNvbnN0IEdSQVBIRVJfREJfUE9SVDogbnVtYmVyID1cbiAgICBwYXJzZUludE9yVW5kZWZpbmVkKHNlcnZlclNldHRpbmdzLkdSQVBIRVJfREJfUE9SVCkgPz8gMzMwNlxuXG5leHBvcnQgY29uc3QgR1JBUEhFUl9URVNUX0RCX05BTUU6IHN0cmluZyA9XG4gICAgc2VydmVyU2V0dGluZ3MuR1JBUEhFUl9URVNUX0RCX05BTUUgPz8gXCJvd2lkXCJcbmV4cG9ydCBjb25zdCBHUkFQSEVSX1RFU1RfREJfVVNFUjogc3RyaW5nID1cbiAgICBzZXJ2ZXJTZXR0aW5ncy5HUkFQSEVSX1RFU1RfREJfVVNFUiA/PyBcInJvb3RcIlxuZXhwb3J0IGNvbnN0IEdSQVBIRVJfVEVTVF9EQl9QQVNTOiBzdHJpbmcgPVxuICAgIHNlcnZlclNldHRpbmdzLkdSQVBIRVJfVEVTVF9EQl9QQVNTID8/IFwiXCJcbmV4cG9ydCBjb25zdCBHUkFQSEVSX1RFU1RfREJfSE9TVDogc3RyaW5nID1cbiAgICBzZXJ2ZXJTZXR0aW5ncy5HUkFQSEVSX1RFU1RfREJfSE9TVCA/PyBcImxvY2FsaG9zdFwiXG4vLyBUaGUgT1dJRCBzdGFjayB1c2VzIDMzMDcsIGJ1dCBpbmNhc2UgaXQncyB1bnNldCwgYXNzdW1lIHVzZXIgaXMgcnVubmluZyBhIGxvY2FsIHNldHVwXG5leHBvcnQgY29uc3QgR1JBUEhFUl9URVNUX0RCX1BPUlQ6IG51bWJlciA9XG4gICAgcGFyc2VJbnRPclVuZGVmaW5lZChzZXJ2ZXJTZXR0aW5ncy5HUkFQSEVSX1RFU1RfREJfUE9SVCkgPz8gMzMwNlxuXG5leHBvcnQgY29uc3QgQkFLRURfU0lURV9ESVI6IHN0cmluZyA9XG4gICAgc2VydmVyU2V0dGluZ3MuQkFLRURfU0lURV9ESVIgPz8gcGF0aC5yZXNvbHZlKEJBU0VfRElSLCBcImJha2VkU2l0ZVwiKSAvLyBXaGVyZSB0aGUgc3RhdGljIGJ1aWxkIG91dHB1dCBnb2VzXG5leHBvcnQgY29uc3QgU0VDUkVUX0tFWTogc3RyaW5nID1cbiAgICBzZXJ2ZXJTZXR0aW5ncy5TRUNSRVRfS0VZID8/XG4gICAgXCJmZWp3aWFvZiBqZXdpYWZvIGplaW9hIGZqaWVvd2FqZiBpc2EgZmppZG9zYWpmZ2pcIlxuZXhwb3J0IGNvbnN0IFNFU1NJT05fQ09PS0lFX0FHRTogbnVtYmVyID1cbiAgICBwYXJzZUludE9yVW5kZWZpbmVkKHNlcnZlclNldHRpbmdzLlNFU1NJT05fQ09PS0lFX0FHRSkgPz8gMTIwOTYwMFxuZXhwb3J0IGNvbnN0IEFMR09MSUFfU0VDUkVUX0tFWTogc3RyaW5nID1cbiAgICBzZXJ2ZXJTZXR0aW5ncy5BTEdPTElBX1NFQ1JFVF9LRVkgPz8gXCJcIlxuZXhwb3J0IGNvbnN0IEFMR09MSUFfSU5ERVhJTkc6IGJvb2xlYW4gPVxuICAgIHNlcnZlclNldHRpbmdzLkFMR09MSUFfSU5ERVhJTkcgPT09IFwidHJ1ZVwiXG5cbi8vIFdvcmRwcmVzcyB0YXJnZXQgc2V0dGluZ1xuZXhwb3J0IGNvbnN0IEhUVFBTX09OTFk6IGJvb2xlYW4gPSBzZXJ2ZXJTZXR0aW5ncy5IVFRQU19PTkxZICE9PSBcImZhbHNlXCJcblxuZXhwb3J0IGNvbnN0IEdJVF9EQVRBU0VUU19ESVI6IHN0cmluZyA9XG4gICAgc2VydmVyU2V0dGluZ3MuR0lUX0RBVEFTRVRTX0RJUiA/PyBgJHtCQVNFX0RJUn0vZGF0YXNldHNFeHBvcnRgIC8vICBXaGVyZSB0aGUgZ2l0IGV4cG9ydHMgZ29cbmV4cG9ydCBjb25zdCBUTVBfRElSOiBzdHJpbmcgPSBzZXJ2ZXJTZXR0aW5ncy5UTVBfRElSID8/IFwiL3RtcFwiXG5leHBvcnQgY29uc3QgVU5DQVRFR09SSVpFRF9UQUdfSUQ6IG51bWJlciA9XG4gICAgcGFyc2VJbnRPclVuZGVmaW5lZChzZXJ2ZXJTZXR0aW5ncy5VTkNBVEVHT1JJWkVEX1RBR19JRCkgPz8gMzc1XG5cbi8vIFNob3VsZCB0aGUgc3RhdGljIHNpdGUgb3V0cHV0IGJlIGJha2VkIHdoZW4gcmVsZXZhbnQgZGF0YWJhc2UgaXRlbXMgY2hhbmdlXG5leHBvcnQgY29uc3QgQkFLRV9PTl9DSEFOR0U6IGJvb2xlYW4gPSBzZXJ2ZXJTZXR0aW5ncy5CQUtFX09OX0NIQU5HRSA9PT0gXCJ0cnVlXCJcbmV4cG9ydCBjb25zdCBERVBMT1lfUVVFVUVfRklMRV9QQVRIOiBzdHJpbmcgPVxuICAgIHNlcnZlclNldHRpbmdzLkRFUExPWV9RVUVVRV9GSUxFX1BBVEggPz8gYCR7QkFTRV9ESVJ9Ly5xdWV1ZWBcbmV4cG9ydCBjb25zdCBERVBMT1lfUEVORElOR19GSUxFX1BBVEg6IHN0cmluZyA9XG4gICAgc2VydmVyU2V0dGluZ3MuREVQTE9ZX1BFTkRJTkdfRklMRV9QQVRIID8/IGAke0JBU0VfRElSfS8ucGVuZGluZ2BcbmV4cG9ydCBjb25zdCBDTE9VREZMQVJFX0FVRDogc3RyaW5nID0gc2VydmVyU2V0dGluZ3MuQ0xPVURGTEFSRV9BVUQgPz8gXCJcIlxuXG4vLyBFaXRoZXIgcmVtb3RlIGNhdGFsb2cgYGh0dHBzOi8vb3dpZC1jYXRhbG9nLm55YzMuZGlnaXRhbG9jZWFuc3BhY2VzLmNvbS9gIG9yIGxvY2FsIGNhdGFsb2cgYC4uLi9ldGwvZGF0YS9gXG4vLyBOb3RlIHRoYXQgQ2xvdWRmbGFyZSBwcm94eSBvbiBgaHR0cHM6Ly9jYXRhbG9nLm91cndvcmxkaW5kYXRhLm9yZ2AgZG9lcyBub3Qgc3VwcG9ydCByYW5nZSByZXF1ZXN0cyB5ZXRcbi8vIEl0IGlzIGVtcHR5ICh0dXJuZWQgb2ZmKSBieSBkZWZhdWx0IGZvciBub3csIGluIHRoZSBmdXR1cmUgaXQgc2hvdWxkIGJlXG4vLyBgaHR0cHM6Ly9vd2lkLWNhdGFsb2cubnljMy5kaWdpdGFsb2NlYW5zcGFjZXMuY29tL2AgYnkgZGVmYXVsdFxuZXhwb3J0IGNvbnN0IENBVEFMT0dfUEFUSDogc3RyaW5nID0gc2VydmVyU2V0dGluZ3MuQ0FUQUxPR19QQVRIID8/IFwiXCJcblxuLy8gbWFrZSBhbmQgYmFzaCBoYW5kbGUgc3BhY2VzIGluIGVudiB2YXJpYWJsZXMgZGlmZmVyZW50bHkuXG4vLyBubyBxdW90ZXMgLSB3YWl0LWZvci1teXNxbC5zaCB3aWxsIGJyZWFrOiBcIlBSSVZBVEU6IGNvbW1hbmQgbm90IGZvdW5kXCJcbi8vIHF1b3RlcyAtIHdhaXQtZm9yLW15c3FsLnNoIHdpbGwgd29yaywgYnV0IHRoZSB2YXJpYWJsZSB3aWxsIGJlIGRvdWJsZS1xdW90ZWQgaW4gbm9kZTogJ1wiLS0tLS1CRUdJTiBQUklWQVRFIGV0Yy4uLlwiJ1xuLy8gZXNjYXBlZCBzcGFjZXMgLSB3YWl0LWZvci1teXNxbC5zaCB3aWxsIHdvcmssIGJ1dCB0aGUgYmFja3NsYXNoZXMgd2lsbCBleGlzdCBpbiBub2RlOiBcIi0tLS0tQkVHSU5cXCBQUklWQVRFXFwgZXRjLi4uXCJcbmV4cG9ydCBjb25zdCBHRE9DU19QUklWQVRFX0tFWTogc3RyaW5nID0gKFxuICAgIHNlcnZlclNldHRpbmdzLkdET0NTX1BSSVZBVEVfS0VZID8/IFwiXCJcbilcbiAgICAucmVwbGFjZUFsbCgnXCInLCBcIlwiKVxuICAgIC5yZXBsYWNlQWxsKFwiJ1wiLCBcIlwiKVxuZXhwb3J0IGNvbnN0IEdET0NTX0NMSUVOVF9FTUFJTDogc3RyaW5nID0gY2xpZW50U2V0dGluZ3MuR0RPQ1NfQ0xJRU5UX0VNQUlMXG5leHBvcnQgY29uc3QgR0RPQ1NfQ0xJRU5UX0lEOiBzdHJpbmcgPSBzZXJ2ZXJTZXR0aW5ncy5HRE9DU19DTElFTlRfSUQgPz8gXCJcIlxuZXhwb3J0IGNvbnN0IEdET0NTX0JBQ0tQT1JUSU5HX1RBUkdFVF9GT0xERVI6IHN0cmluZyA9XG4gICAgc2VydmVyU2V0dGluZ3MuR0RPQ1NfQkFDS1BPUlRJTkdfVEFSR0VUX0ZPTERFUiA/PyBcIlwiXG5cbmV4cG9ydCBjb25zdCBHRE9DU19JTUFHRVNfQkFDS1BPUlRJTkdfVEFSR0VUX0ZPTERFUjogc3RyaW5nID1cbiAgICBzZXJ2ZXJTZXR0aW5ncy5HRE9DU19JTUFHRVNfQkFDS1BPUlRJTkdfVEFSR0VUX0ZPTERFUiA/PyBcIlwiXG5cbmV4cG9ydCBjb25zdCBHRE9DU19ET05BVEVfRkFRU19ET0NVTUVOVF9JRDogc3RyaW5nID1cbiAgICBzZXJ2ZXJTZXR0aW5ncy5HRE9DU19ET05BVEVfRkFRU19ET0NVTUVOVF9JRCA/P1xuICAgIFwiMTk0UE5TRmpnU2x0OVptNXhZdURPRjBsX0dMS1piVnhIMmNvM3pDb2tfY0VcIlxuXG5leHBvcnQgY29uc3QgR0RPQ1NfU0hBUkVEX0RSSVZFX0lEID0gc2VydmVyU2V0dGluZ3MuR0RPQ1NfU0hBUkVEX0RSSVZFX0lEID8/IFwiXCJcblxuZXhwb3J0IGNvbnN0IEdET0NTX0RFVEFJTFNfT05fREVNQU5EX0lEID1cbiAgICBzZXJ2ZXJTZXR0aW5ncy5HRE9DU19ERVRBSUxTX09OX0RFTUFORF9JRCA/PyBcIlwiXG5cbi8vIExvYWQgUjIgY3JlZGVudGlhbHMgZnJvbSByY2xvbmUgY29uZmlnXG5sZXQgcmNsb25lQ29uZmlnOiBhbnkgPSB7fVxuY29uc3QgcmNsb25lQ29uZmlnUGF0aCA9IHBhdGguam9pbihvcy5ob21lZGlyKCksIFwiLmNvbmZpZy9yY2xvbmUvcmNsb25lLmNvbmZcIilcbmlmIChmcy5leGlzdHNTeW5jKHJjbG9uZUNvbmZpZ1BhdGgpKSB7XG4gICAgcmNsb25lQ29uZmlnID0gaW5pLnBhcnNlKGZzLnJlYWRGaWxlU3luYyhyY2xvbmVDb25maWdQYXRoLCBcInV0Zi04XCIpKVxufVxuXG4vLyBlLmcuIGh0dHBzOi8vaW1hZ2VzLXN0YWdpbmcub3dpZC5pby9cbmV4cG9ydCBjb25zdCBJTUFHRV9IT1NUSU5HX1IyX0NETl9VUkw6IHN0cmluZyA9XG4gICAgc2VydmVyU2V0dGluZ3MuSU1BR0VfSE9TVElOR19SMl9DRE5fVVJMIHx8IFwiXCJcbi8vIGUuZy4gb3dpZC1pbWFnZS1ob3N0aW5nLXN0YWdpbmcvZGV2ZWxvcG1lbnRcbmV4cG9ydCBjb25zdCBJTUFHRV9IT1NUSU5HX1IyX0JVQ0tFVF9QQVRIOiBzdHJpbmcgPVxuICAgIHNlcnZlclNldHRpbmdzLklNQUdFX0hPU1RJTkdfUjJfQlVDS0VUX1BBVEggfHwgXCJcIlxuLy8gZS5nLiBkZXZlbG9wbWVudFxuZXhwb3J0IGNvbnN0IElNQUdFX0hPU1RJTkdfUjJfQlVDS0VUX1NVQkZPTERFUl9QQVRIOiBzdHJpbmcgPVxuICAgIElNQUdFX0hPU1RJTkdfUjJfQlVDS0VUX1BBVEguc2xpY2UoXG4gICAgICAgIElNQUdFX0hPU1RJTkdfUjJfQlVDS0VUX1BBVEguaW5kZXhPZihcIi9cIikgKyAxXG4gICAgKVxuLy8gZXh0cmFjdCBSMiBjcmVkZW50aWFscyBmcm9tIHJjbG9uZSBjb25maWcgYXMgZGVmYXVsdHNcbmV4cG9ydCBjb25zdCBSMl9FTkRQT0lOVDogc3RyaW5nID1cbiAgICBzZXJ2ZXJTZXR0aW5ncy5SMl9FTkRQT0lOVCB8fFxuICAgIHJjbG9uZUNvbmZpZ1tcIm93aWQtcjJcIl0/LmVuZHBvaW50IHx8XG4gICAgXCJodHRwczovLzA3OGZjZGZlZDk5NTUwODczMTVkZDg2NzkyZTcxYTdlLnIyLmNsb3VkZmxhcmVzdG9yYWdlLmNvbVwiXG5leHBvcnQgY29uc3QgUjJfQUNDRVNTX0tFWV9JRDogc3RyaW5nID1cbiAgICBzZXJ2ZXJTZXR0aW5ncy5SMl9BQ0NFU1NfS0VZX0lEIHx8XG4gICAgcmNsb25lQ29uZmlnW1wib3dpZC1yMlwiXT8uYWNjZXNzX2tleV9pZCB8fFxuICAgIFwiXCJcbmV4cG9ydCBjb25zdCBSMl9TRUNSRVRfQUNDRVNTX0tFWTogc3RyaW5nID1cbiAgICBzZXJ2ZXJTZXR0aW5ncy5SMl9TRUNSRVRfQUNDRVNTX0tFWSB8fFxuICAgIHJjbG9uZUNvbmZpZ1tcIm93aWQtcjJcIl0/LnNlY3JldF9hY2Nlc3Nfa2V5IHx8XG4gICAgXCJcIlxuZXhwb3J0IGNvbnN0IFIyX1JFR0lPTjogc3RyaW5nID1cbiAgICBzZXJ2ZXJTZXR0aW5ncy5SMl9SRUdJT04gfHwgcmNsb25lQ29uZmlnW1wib3dpZC1yMlwiXT8ucmVnaW9uIHx8IFwiYXV0b1wiXG5cbmV4cG9ydCBjb25zdCBHUkFQSEVSX0NPTkZJR19SMl9CVUNLRVQ6IHN0cmluZyB8IHVuZGVmaW5lZCA9XG4gICAgc2VydmVyU2V0dGluZ3MuR1JBUEhFUl9DT05GSUdfUjJfQlVDS0VUXG5leHBvcnQgY29uc3QgR1JBUEhFUl9DT05GSUdfUjJfQlVDS0VUX1BBVEg6IHN0cmluZyB8IHVuZGVmaW5lZCA9XG4gICAgc2VydmVyU2V0dGluZ3MuR1JBUEhFUl9DT05GSUdfUjJfQlVDS0VUX1BBVEhcblxuZXhwb3J0IGNvbnN0IERBVEFfQVBJX1VSTDogc3RyaW5nID0gY2xpZW50U2V0dGluZ3MuREFUQV9BUElfVVJMXG5cbmV4cG9ydCBjb25zdCBGRUFUVVJFX0ZMQUdTID0gY2xpZW50U2V0dGluZ3MuRkVBVFVSRV9GTEFHU1xuXG5leHBvcnQgY29uc3QgQlVJTERLSVRFX0FQSV9BQ0NFU1NfVE9LRU46IHN0cmluZyA9XG4gICAgc2VydmVyU2V0dGluZ3MuQlVJTERLSVRFX0FQSV9BQ0NFU1NfVE9LRU4gPz8gXCJcIlxuZXhwb3J0IGNvbnN0IEJVSUxES0lURV9ERVBMT1lfQ09OVEVOVF9QSVBFTElORV9TTFVHOiBzdHJpbmcgPVxuICAgIHNlcnZlclNldHRpbmdzLkJVSUxES0lURV9ERVBMT1lfQ09OVEVOVF9QSVBFTElORV9TTFVHIHx8XG4gICAgXCJvd2lkLWRlcGxveS1jb250ZW50LW1hc3RlclwiXG5leHBvcnQgY29uc3QgQlVJTERLSVRFX0JSQU5DSDogc3RyaW5nID1cbiAgICBzZXJ2ZXJTZXR0aW5ncy5CVUlMREtJVEVfQlJBTkNIIHx8IFwibWFzdGVyXCJcbmV4cG9ydCBjb25zdCBCVUlMREtJVEVfREVQTE9ZX0NPTlRFTlRfU0xBQ0tfQ0hBTk5FTDogc3RyaW5nID1cbiAgICBzZXJ2ZXJTZXR0aW5ncy5CVUlMREtJVEVfREVQTE9ZX0NPTlRFTlRfU0xBQ0tfQ0hBTk5FTCB8fCBcIkMwNkVXQTBESzRIXCIgLy8gI2NvbnRlbnQtdXBkYXRlc1xuXG5leHBvcnQgY29uc3QgT1BFTkFJX0FQSV9LRVk6IHN0cmluZyA9IHNlcnZlclNldHRpbmdzLk9QRU5BSV9BUElfS0VZID8/IFwiXCJcblxuZXhwb3J0IGNvbnN0IFNMQUNLX0JPVF9PQVVUSF9UT0tFTjogc3RyaW5nID1cbiAgICBzZXJ2ZXJTZXR0aW5ncy5TTEFDS19CT1RfT0FVVEhfVE9LRU4gPz8gXCJcIlxuXG5leHBvcnQgY29uc3QgTEVHQUNZX1dPUkRQUkVTU19JTUFHRV9VUkw6IHN0cmluZyA9XG4gICAgc2VydmVyU2V0dGluZ3MuTEVHQUNZX1dPUkRQUkVTU19JTUFHRV9VUkwgPz9cbiAgICBcImh0dHBzOi8vYXNzZXRzLm91cndvcmxkaW5kYXRhLm9yZy91cGxvYWRzXCJcblxuLy8gc2VhcmNoIGV2YWx1YXRpb25cbmV4cG9ydCBjb25zdCBTRUFSQ0hfRVZBTF9VUkw6IHN0cmluZyA9XG4gICAgXCJodHRwczovL3B1Yi1lYzc2MWZlMGRmNTU0YjAyYmM2MDU2MTBmMzI5NjAwMC5yMi5kZXZcIlxuXG4vLyBXZSBjdXJyZW50bHkgdXNlIEVOVj1wcm9kdWN0aW9uIG9uIHN0YWdpbmcgc2VydmVycywgaXQnZCBiZSBiZXR0ZXIgdG8gaGF2ZSBFTlY9c3RhZ2luZ1xuLy8gYnV0IHRoYXQgd291bGQgcmVxdWlyZSBjaGFuZ2luZyBhIGxvdCBvZiBjb2RlXG5leHBvcnQgY29uc3QgRU5WX0lTX1NUQUdJTkc6IGJvb2xlYW4gPSBBRE1JTl9CQVNFX1VSTC5pbmNsdWRlcyhcbiAgICBcImh0dHA6Ly9zdGFnaW5nLXNpdGVcIlxuKVxuIiwgImNvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9kaXJuYW1lID0gXCIvVXNlcnMvc29waGlhL2NvZGUvb3dpZC9vd2lkLWdyYXBoZXIvc2V0dGluZ3NcIjtjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfZmlsZW5hbWUgPSBcIi9Vc2Vycy9zb3BoaWEvY29kZS9vd2lkL293aWQtZ3JhcGhlci9zZXR0aW5ncy9jbGllbnRTZXR0aW5ncy50c1wiO2NvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9pbXBvcnRfbWV0YV91cmwgPSBcImZpbGU6Ly8vVXNlcnMvc29waGlhL2NvZGUvb3dpZC9vd2lkLWdyYXBoZXIvc2V0dGluZ3MvY2xpZW50U2V0dGluZ3MudHNcIjsvLyBBbGwgb2YgdGhpcyBpbmZvcm1hdGlvbiBpcyBhdmFpbGFibGUgdG8gdGhlIGNsaWVudC1zaWRlIGNvZGVcbi8vIERPIE5PVCByZXRyaWV2ZSBzZW5zaXRpdmUgaW5mb3JtYXRpb24gZnJvbSB0aGUgZW52aXJvbm1lbnQgaW4gaGVyZSEgOk9cbi8vIFNldHRpbmdzIGluIGhlcmUgd2lsbCBiZSBtYWRlIGF2YWlsYWJsZSB0byB0aGUgY2xpZW50LXNpZGUgY29kZSB0aGF0IGlzXG4vLyBidW5kbGVkIGFuZCBzaGlwcGVkIG91dCB0byBvdXIgdXNlcnMuXG5cbmltcG9ydCBkb3RlbnYgZnJvbSBcImRvdGVudlwiXG5pbXBvcnQgZmluZEJhc2VEaXIgZnJvbSBcIi4vZmluZEJhc2VEaXIuanNcIlxuXG5pZiAodHlwZW9mIF9fZGlybmFtZSAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgIC8vIG9ubHkgcnVuIHRoaXMgY29kZSBpbiBub2RlLCBub3QgaW4gdGhlIGJyb3dzZXIuXG4gICAgLy8gaW4gdGhlIGJyb3dzZXIsIHByb2Nlc3MuZW52IGlzIGFscmVhZHkgcG9wdWxhdGVkIGJ5IHZpdGUuXG4gICAgY29uc3QgYmFzZURpciA9IGZpbmRCYXNlRGlyKF9fZGlybmFtZSlcbiAgICBpZiAoYmFzZURpcikgZG90ZW52LmNvbmZpZyh7IHBhdGg6IGAke2Jhc2VEaXJ9Ly5lbnZgIH0pXG59XG5cbmltcG9ydCB7IHBhcnNlSW50T3JVbmRlZmluZWQgfSBmcm9tIFwiQG91cndvcmxkaW5kYXRhL3V0aWxzXCJcblxuZXhwb3J0IGNvbnN0IEVOVjogXCJkZXZlbG9wbWVudFwiIHwgXCJwcm9kdWN0aW9uXCIgPVxuICAgIHByb2Nlc3MuZW52LkVOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyBcInByb2R1Y3Rpb25cIiA6IFwiZGV2ZWxvcG1lbnRcIlxuXG5leHBvcnQgY29uc3QgQlVHU05BR19BUElfS0VZOiBzdHJpbmcgfCB1bmRlZmluZWQgPSBwcm9jZXNzLmVudi5CVUdTTkFHX0FQSV9LRVlcbmV4cG9ydCBjb25zdCBTRU5UUllfRFNOOiBzdHJpbmcgfCB1bmRlZmluZWQgPSBwcm9jZXNzLmVudi5TRU5UUllfRFNOXG5leHBvcnQgY29uc3QgQURNSU5fU0VSVkVSX1BPUlQ6IG51bWJlciA9XG4gICAgcGFyc2VJbnRPclVuZGVmaW5lZChwcm9jZXNzLmVudi5BRE1JTl9TRVJWRVJfUE9SVCkgPz8gMzAzMFxuZXhwb3J0IGNvbnN0IEFETUlOX1NFUlZFUl9IT1NUOiBzdHJpbmcgPVxuICAgIHByb2Nlc3MuZW52LkFETUlOX1NFUlZFUl9IT1NUID8/IFwibG9jYWxob3N0XCJcbmV4cG9ydCBjb25zdCBCQUtFRF9CQVNFX1VSTDogc3RyaW5nID1cbiAgICBwcm9jZXNzLmVudi5CQUtFRF9CQVNFX1VSTCA/P1xuICAgIGBodHRwOi8vJHtBRE1JTl9TRVJWRVJfSE9TVH06JHtBRE1JTl9TRVJWRVJfUE9SVH1gXG5cbmV4cG9ydCBjb25zdCBCQUtFRF9HUkFQSEVSX1VSTDogc3RyaW5nID1cbiAgICBwcm9jZXNzLmVudi5CQUtFRF9HUkFQSEVSX1VSTCA/PyBgJHtCQUtFRF9CQVNFX1VSTH0vZ3JhcGhlcmBcbmV4cG9ydCBjb25zdCBCQUtFRF9HUkFQSEVSX0VYUE9SVFNfQkFTRV9VUkw6IHN0cmluZyA9XG4gICAgcHJvY2Vzcy5lbnYuQkFLRURfR1JBUEhFUl9FWFBPUlRTX0JBU0VfVVJMID8/IGAke0JBS0VEX0dSQVBIRVJfVVJMfS9leHBvcnRzYFxuZXhwb3J0IGNvbnN0IEJBS0VEX1NJVEVfRVhQT1JUU19CQVNFX1VSTDogc3RyaW5nID1cbiAgICBwcm9jZXNzLmVudi5CQUtFRF9TSVRFX0VYUE9SVFNfQkFTRV9VUkwgPz8gYCR7QkFLRURfQkFTRV9VUkx9L2V4cG9ydHNgXG5cbmV4cG9ydCBjb25zdCBHUkFQSEVSX0RZTkFNSUNfVEhVTUJOQUlMX1VSTDogc3RyaW5nID1cbiAgICBwcm9jZXNzLmVudi5HUkFQSEVSX0RZTkFNSUNfVEhVTUJOQUlMX1VSTCA/PyBgJHtCQUtFRF9HUkFQSEVSX1VSTH1gXG5cbmV4cG9ydCBjb25zdCBFWFBMT1JFUl9EWU5BTUlDX1RIVU1CTkFJTF9VUkw6IHN0cmluZyA9XG4gICAgcHJvY2Vzcy5lbnYuRVhQTE9SRVJfRFlOQU1JQ19USFVNQk5BSUxfVVJMID8/IGAke0JBS0VEX0JBU0VfVVJMfS9leHBsb3JlcnNgXG5cbmV4cG9ydCBjb25zdCBHUkFQSEVSX0RZTkFNSUNfQ09ORklHX1VSTDogc3RyaW5nID1cbiAgICBwcm9jZXNzLmVudi5HUkFQSEVSX0RZTkFNSUNfQ09ORklHX1VSTCA/PyBgJHtCQUtFRF9HUkFQSEVSX1VSTH1gXG5cbmV4cG9ydCBjb25zdCBNVUxUSV9ESU1fRFlOQU1JQ19DT05GSUdfVVJMOiBzdHJpbmcgPVxuICAgIHByb2Nlc3MuZW52Lk1VTFRJX0RJTV9EWU5BTUlDX0NPTkZJR19VUkwgPz8gYCR7QkFLRURfQkFTRV9VUkx9L211bHRpLWRpbWBcblxuZXhwb3J0IGNvbnN0IEFETUlOX0JBU0VfVVJMOiBzdHJpbmcgPVxuICAgIHByb2Nlc3MuZW52LkFETUlOX0JBU0VfVVJMID8/XG4gICAgYGh0dHA6Ly8ke0FETUlOX1NFUlZFUl9IT1NUfToke0FETUlOX1NFUlZFUl9QT1JUfWBcbi8vIGUuZy4gXCJodHRwczovL2FwaS5vdXJ3b3JsZGluZGF0YS5vcmcvdjEvaW5kaWNhdG9ycy9cIiBvciBcImh0dHBzOi8vYXBpLXN0YWdpbmcub3dpZC5pby91c2VyL3YxL2luZGljYXRvcnMvXCJcbmV4cG9ydCBjb25zdCBEQVRBX0FQSV9VUkw6IHN0cmluZyA9XG4gICAgcHJvY2Vzcy5lbnYuREFUQV9BUElfVVJMID8/IFwiaHR0cHM6Ly9hcGkub3Vyd29ybGRpbmRhdGEub3JnL3YxL2luZGljYXRvcnMvXCJcblxuZXhwb3J0IGNvbnN0IEFMR09MSUFfSUQ6IHN0cmluZyA9IHByb2Nlc3MuZW52LkFMR09MSUFfSUQgPz8gXCJcIlxuZXhwb3J0IGNvbnN0IEFMR09MSUFfU0VBUkNIX0tFWTogc3RyaW5nID0gcHJvY2Vzcy5lbnYuQUxHT0xJQV9TRUFSQ0hfS0VZID8/IFwiXCJcbmV4cG9ydCBjb25zdCBBTEdPTElBX0lOREVYX1BSRUZJWDogc3RyaW5nID1cbiAgICBwcm9jZXNzLmVudi5BTEdPTElBX0lOREVYX1BSRUZJWCA/PyBcIlwiXG5cbmV4cG9ydCBjb25zdCBET05BVEVfQVBJX1VSTDogc3RyaW5nID1cbiAgICBwcm9jZXNzLmVudi5ET05BVEVfQVBJX1VSTCA/PyBcImh0dHA6Ly9sb2NhbGhvc3Q6ODc4OC9kb25hdGlvbi9kb25hdGVcIlxuXG5leHBvcnQgY29uc3QgUkVDQVBUQ0hBX1NJVEVfS0VZOiBzdHJpbmcgPVxuICAgIHByb2Nlc3MuZW52LlJFQ0FQVENIQV9TSVRFX0tFWSA/PyBcIjZMY0psNVlVQUFBQUFBVFE2RjR2bDlkQVdSWmVLUEJtMTVNQVpqNFFcIlxuXG4vLyBlLmcuIFwiR1RNLU4yRDRWOFNcIiAob3VyIHByb2R1Y3Rpb24gR1RNIGNvbnRhaW5lcilcbmV4cG9ydCBjb25zdCBHT09HTEVfVEFHX01BTkFHRVJfSUQ6IHN0cmluZyA9XG4gICAgcHJvY2Vzcy5lbnYuR09PR0xFX1RBR19NQU5BR0VSX0lEID8/IFwiXCJcblxuZXhwb3J0IGNvbnN0IFRPUElDU19DT05URU5UX0dSQVBIOiBib29sZWFuID1cbiAgICBwcm9jZXNzLmVudi5UT1BJQ1NfQ09OVEVOVF9HUkFQSCA9PT0gXCJ0cnVlXCJcblxuZXhwb3J0IGNvbnN0IEdET0NTX0NMSUVOVF9FTUFJTDogc3RyaW5nID0gcHJvY2Vzcy5lbnYuR0RPQ1NfQ0xJRU5UX0VNQUlMID8/IFwiXCJcbmV4cG9ydCBjb25zdCBHRE9DU19CQVNJQ19BUlRJQ0xFX1RFTVBMQVRFX1VSTDogc3RyaW5nID1cbiAgICBwcm9jZXNzLmVudi5HRE9DU19CQVNJQ19BUlRJQ0xFX1RFTVBMQVRFX1VSTCA/PyBcIlwiXG5cbmV4cG9ydCBjb25zdCBJTUFHRV9IT1NUSU5HX1IyX0NETl9VUkw6IHN0cmluZyA9XG4gICAgcHJvY2Vzcy5lbnYuSU1BR0VfSE9TVElOR19SMl9DRE5fVVJMIHx8IFwiXCJcbi8vIGUuZy4gb3dpZC1pbWFnZS1ob3N0aW5nLXN0YWdpbmcvZGV2ZWxvcG1lbnRcbmV4cG9ydCBjb25zdCBJTUFHRV9IT1NUSU5HX1IyX0JVQ0tFVF9QQVRIOiBzdHJpbmcgPVxuICAgIHByb2Nlc3MuZW52LklNQUdFX0hPU1RJTkdfUjJfQlVDS0VUX1BBVEggfHwgXCJcIlxuLy8gZS5nLiBkZXZlbG9wbWVudFxuZXhwb3J0IGNvbnN0IElNQUdFX0hPU1RJTkdfUjJfQlVDS0VUX1NVQkZPTERFUl9QQVRIOiBzdHJpbmcgPVxuICAgIElNQUdFX0hPU1RJTkdfUjJfQlVDS0VUX1BBVEguc2xpY2UoXG4gICAgICAgIElNQUdFX0hPU1RJTkdfUjJfQlVDS0VUX1BBVEguaW5kZXhPZihcIi9cIikgKyAxXG4gICAgKVxuXG4vLyBMaW5rIHRvIHByb2R1Y3Rpb24gd2l6YXJkLiAgWW91IG5lZWQgVGFpbHNjYWxlIHRvIGFjY2VzcyBpdCBpbiBwcm9kdWN0aW9uLlxuZXhwb3J0IGNvbnN0IEVUTF9XSVpBUkRfVVJMOiBzdHJpbmcgPVxuICAgIHByb2Nlc3MuZW52LkVUTF9XSVpBUkRfVVJMID8/IGBodHRwOi8vJHtBRE1JTl9TRVJWRVJfSE9TVH06ODA1My9gXG5cbi8vIFByb2R1Y3Rpb24gRVRMIEFQSSBydW5zIG9uIGh0dHA6Ly9ldGwtcHJvZC0yOjgwODMvdjEgKHlvdSBuZWVkIFRhaWxzY2FsZSB0byBhY2Nlc3MgaXQpXG5leHBvcnQgY29uc3QgRVRMX0FQSV9VUkw6IHN0cmluZyA9XG4gICAgcHJvY2Vzcy5lbnYuRVRMX0FQSV9VUkwgPz8gYGh0dHA6Ly8ke0FETUlOX1NFUlZFUl9IT1NUfTo4MDgxL2FwaS92MWBcblxuZXhwb3J0IGNvbnN0IEdET0NTX0RFVEFJTFNfT05fREVNQU5EX0lEOiBzdHJpbmcgPVxuICAgIHByb2Nlc3MuZW52LkdET0NTX0RFVEFJTFNfT05fREVNQU5EX0lEID8/IFwiXCJcblxuZXhwb3J0IGNvbnN0IFBVQkxJU0hFRF9BVF9GT1JNQVQgPSBcImRkZCwgTU1NIEQsIFlZWVkgSEg6bW1cIlxuXG4vLyBGZWF0dXJlIGZsYWdzOiBGRUFUVVJFX0ZMQUdTIGlzIGEgY29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgZmxhZ3MsIGFuZCB0aGV5IG5lZWQgdG8gYmUgcGFydCBvZiB0aGlzIGVudW0gdG8gYmUgY29uc2lkZXJlZFxuZXhwb3J0IGVudW0gRmVhdHVyZUZsYWdGZWF0dXJlIHtcbiAgICBNdWx0aURpbURhdGFQYWdlID0gXCJNdWx0aURpbURhdGFQYWdlXCIsXG59XG5jb25zdCBmZWF0dXJlRmxhZ3NSYXcgPVxuICAgICh0eXBlb2YgcHJvY2Vzcy5lbnYuRkVBVFVSRV9GTEFHUyA9PT0gXCJzdHJpbmdcIiAmJlxuICAgICAgICBwcm9jZXNzLmVudi5GRUFUVVJFX0ZMQUdTLnRyaW0oKT8uc3BsaXQoXCIsXCIpKSB8fFxuICAgIFtdXG5leHBvcnQgY29uc3QgRkVBVFVSRV9GTEFHUzogU2V0PEZlYXR1cmVGbGFnRmVhdHVyZT4gPSBuZXcgU2V0KFxuICAgIE9iamVjdC5rZXlzKEZlYXR1cmVGbGFnRmVhdHVyZSkuZmlsdGVyKChrZXkpID0+XG4gICAgICAgIGZlYXR1cmVGbGFnc1Jhdy5pbmNsdWRlcyhrZXkpXG4gICAgKSBhcyBGZWF0dXJlRmxhZ0ZlYXR1cmVbXVxuKVxuIiwgImNvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9kaXJuYW1lID0gXCIvVXNlcnMvc29waGlhL2NvZGUvb3dpZC9vd2lkLWdyYXBoZXIvc2l0ZVwiO2NvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9maWxlbmFtZSA9IFwiL1VzZXJzL3NvcGhpYS9jb2RlL293aWQvb3dpZC1ncmFwaGVyL3NpdGUvU2l0ZUNvbnN0YW50cy50c1wiO2NvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9pbXBvcnRfbWV0YV91cmwgPSBcImZpbGU6Ly8vVXNlcnMvc29waGlhL2NvZGUvb3dpZC9vd2lkLWdyYXBoZXIvc2l0ZS9TaXRlQ29uc3RhbnRzLnRzXCI7aW1wb3J0IHsgZmFSc3MgfSBmcm9tIFwiQGZvcnRhd2Vzb21lL2ZyZWUtc29saWQtc3ZnLWljb25zXCJcbmltcG9ydCB7XG4gICAgZmFYVHdpdHRlcixcbiAgICBmYUZhY2Vib29rU3F1YXJlLFxuICAgIGZhSW5zdGFncmFtLFxuICAgIGZhVGhyZWFkcyxcbiAgICBmYUxpbmtlZGluLFxuICAgIGZhQmx1ZXNreSxcbn0gZnJvbSBcIkBmb3J0YXdlc29tZS9mcmVlLWJyYW5kcy1zdmctaWNvbnNcIlxuXG4vLyBTZWUgaHR0cHM6Ly9jZG5qcy5jbG91ZGZsYXJlLmNvbS9wb2x5ZmlsbC8gZm9yIGEgbGlzdCBvZiBhbGwgc3VwcG9ydGVkIGZlYXR1cmVzXG5jb25zdCBwb2x5ZmlsbEZlYXR1cmVzID0gW1xuICAgIFwiZXMyMDIxXCIsIC8vIFN0cmluZy5yZXBsYWNlQWxsLCBQcm9taXNlLmFueSwgLi4uXG4gICAgXCJlczIwMjJcIiwgLy8gQXJyYXkuYXQsIFN0cmluZy5hdCwgLi4uXG4gICAgXCJlczIwMjNcIiwgLy8gQXJyYXkuZmluZExhc3QsIEFycmF5LnRvUmV2ZXJzZWQsIEFycmF5LnRvU29ydGVkLCBBcnJheS53aXRoLCAuLi5cbiAgICBcIkludGVyc2VjdGlvbk9ic2VydmVyXCIsXG4gICAgXCJJbnRlcnNlY3Rpb25PYnNlcnZlckVudHJ5XCIsXG5dXG5jb25zdCBQT0xZRklMTF9WRVJTSU9OID0gXCI0LjguMFwiXG5leHBvcnQgY29uc3QgUE9MWUZJTExfVVJMOiBzdHJpbmcgPSBgaHR0cHM6Ly9jZG5qcy5jbG91ZGZsYXJlLmNvbS9wb2x5ZmlsbC92My9wb2x5ZmlsbC5taW4uanM/dmVyc2lvbj0ke1BPTFlGSUxMX1ZFUlNJT059JmZlYXR1cmVzPSR7cG9seWZpbGxGZWF0dXJlcy5qb2luKFxuICAgIFwiLFwiXG4pfWBcblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfTE9DQUxfQkFLRV9ESVIgPSBcImxvY2FsQmFrZVwiXG5cbmV4cG9ydCBjb25zdCBHUkFQSEVSX1BSRVZJRVdfQ0xBU1MgPSBcImdyYXBoZXJQcmV2aWV3XCJcblxuZXhwb3J0IGNvbnN0IFNNQUxMX0JSRUFLUE9JTlRfTUVESUFfUVVFUlkgPSBcIihtYXgtd2lkdGg6IDc2OHB4KVwiXG5cbmV4cG9ydCBjb25zdCBUT1VDSF9ERVZJQ0VfTUVESUFfUVVFUlkgPVxuICAgIFwiKGhvdmVyOiBub25lKSwgKHBvaW50ZXI6IGNvYXJzZSksIChwb2ludGVyOiBub25lKVwiXG5cbmV4cG9ydCBjb25zdCBEQVRBX0lOU0lHSFRTX0FUT01fRkVFRF9OQU1FID0gXCJhdG9tLWRhdGEtaW5zaWdodHMueG1sXCJcblxuZXhwb3J0IGNvbnN0IERBVEFfSU5TSUdIVF9BVE9NX0ZFRURfUFJPUFMgPSB7XG4gICAgdGl0bGU6IFwiQXRvbSBmZWVkIGZvciBEYWlseSBEYXRhIEluc2lnaHRzXCIsXG4gICAgaHJlZjogYGh0dHBzOi8vb3Vyd29ybGRpbmRhdGEub3JnLyR7REFUQV9JTlNJR0hUU19BVE9NX0ZFRURfTkFNRX1gLFxufVxuXG5leHBvcnQgY29uc3QgREVGQVVMVF9UT01CU1RPTkVfUkVBU09OID1cbiAgICBcIk91ciBXb3JsZCBpbiBEYXRhIGlzIGRlc2lnbmVkIHRvIGJlIGFuIGV2ZXJncmVlbiBwdWJsaWNhdGlvbi4gVGhpcyBcIiArXG4gICAgXCJtZWFucyB0aGF0IHdoZW4gYSBwYWdlIGNhbm5vdCBiZSB1cGRhdGVkIGR1ZSB0byBvdXRkYXRlZCBkYXRhIG9yIFwiICtcbiAgICBcIm1pc3NpbmcgaW5mb3JtYXRpb24sIHdlIHByZWZlciB0byByZW1vdmUgaXQgcmF0aGVyIHRoYW4gcHJlc2VudCBcIiArXG4gICAgXCJpbmNvbXBsZXRlIG9yIGluYWNjdXJhdGUgcmVzZWFyY2ggYW5kIGRhdGEgdG8gb3VyIHJlYWRlcnMuXCJcblxuZXhwb3J0IGNvbnN0IFNPQ0lBTFMgPSBbXG4gICAge1xuICAgICAgICB0aXRsZTogXCJYXCIsXG4gICAgICAgIHVybDogXCJodHRwczovL3guY29tL291cndvcmxkaW5kYXRhXCIsXG4gICAgICAgIGljb246IGZhWFR3aXR0ZXIsXG4gICAgfSxcbiAgICB7XG4gICAgICAgIHRpdGxlOiBcIkluc3RhZ3JhbVwiLFxuICAgICAgICB1cmw6IFwiaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9vdXJ3b3JsZGluZGF0YS9cIixcbiAgICAgICAgaWNvbjogZmFJbnN0YWdyYW0sXG4gICAgfSxcbiAgICB7XG4gICAgICAgIHRpdGxlOiBcIlRocmVhZHNcIixcbiAgICAgICAgdXJsOiBcImh0dHBzOi8vd3d3LnRocmVhZHMubmV0L0BvdXJ3b3JsZGluZGF0YVwiLFxuICAgICAgICBpY29uOiBmYVRocmVhZHMsXG4gICAgfSxcbiAgICB7XG4gICAgICAgIHRpdGxlOiBcIkZhY2Vib29rXCIsXG4gICAgICAgIHVybDogXCJodHRwczovL2ZhY2Vib29rLmNvbS9vdXJ3b3JsZGluZGF0YVwiLFxuICAgICAgICBpY29uOiBmYUZhY2Vib29rU3F1YXJlLFxuICAgIH0sXG4gICAge1xuICAgICAgICB0aXRsZTogXCJMaW5rZWRJblwiLFxuICAgICAgICB1cmw6IFwiaHR0cHM6Ly93d3cubGlua2VkaW4uY29tL2NvbXBhbnkvb3Vyd29ybGRpbmRhdGFcIixcbiAgICAgICAgaWNvbjogZmFMaW5rZWRpbixcbiAgICB9LFxuICAgIHtcbiAgICAgICAgdGl0bGU6IFwiQmx1ZXNreVwiLFxuICAgICAgICB1cmw6IFwiaHR0cHM6Ly9ic2t5LmFwcC9wcm9maWxlL291cndvcmxkaW5kYXRhLm9yZ1wiLFxuICAgICAgICBpY29uOiBmYUJsdWVza3ksXG4gICAgfSxcbl1cblxuZXhwb3J0IGNvbnN0IFJTU19GRUVEUyA9IFtcbiAgICB7XG4gICAgICAgIHRpdGxlOiBcIlJlc2VhcmNoICYgV3JpdGluZyBSU1MgRmVlZFwiLFxuICAgICAgICB1cmw6IFwiL2F0b20ueG1sXCIsXG4gICAgICAgIGljb246IGZhUnNzLFxuICAgIH0sXG4gICAge1xuICAgICAgICB0aXRsZTogXCJEYWlseSBEYXRhIEluc2lnaHRzIFJTUyBGZWVkXCIsXG4gICAgICAgIHVybDogYC8ke0RBVEFfSU5TSUdIVFNfQVRPTV9GRUVEX05BTUV9YCxcbiAgICAgICAgaWNvbjogZmFSc3MsXG4gICAgfSxcbl1cbiIsICJjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfZGlybmFtZSA9IFwiL1VzZXJzL3NvcGhpYS9jb2RlL293aWQvb3dpZC1ncmFwaGVyXCI7Y29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2ZpbGVuYW1lID0gXCIvVXNlcnMvc29waGlhL2NvZGUvb3dpZC9vd2lkLWdyYXBoZXIvdml0ZS5jb25maWctY29tbW9uLm10c1wiO2NvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9pbXBvcnRfbWV0YV91cmwgPSBcImZpbGU6Ly8vVXNlcnMvc29waGlhL2NvZGUvb3dpZC9vd2lkLWdyYXBoZXIvdml0ZS5jb25maWctY29tbW9uLm10c1wiO2ltcG9ydCB7IGRlZmluZUNvbmZpZyB9IGZyb20gXCJ2aXRlXCJcbmltcG9ydCBwbHVnaW5SZWFjdCBmcm9tIFwiQHZpdGVqcy9wbHVnaW4tcmVhY3RcIlxuaW1wb3J0IHBsdWdpbkNoZWNrZXIgZnJvbSBcInZpdGUtcGx1Z2luLWNoZWNrZXJcIlxuaW1wb3J0ICogYXMgY2xpZW50U2V0dGluZ3MgZnJvbSBcIi4vc2V0dGluZ3MvY2xpZW50U2V0dGluZ3MuanNcIlxuaW1wb3J0IHtcbiAgICBWSVRFX0FTU0VUX1NJVEVfRU5UUlksXG4gICAgVklURV9FTlRSWVBPSU5UX0lORk8sXG4gICAgVml0ZUVudHJ5UG9pbnQsXG59IGZyb20gXCIuL3NpdGUvdml0ZVV0aWxzLmpzXCJcblxuLy8gaHR0cHM6Ly92aXRlanMuZGV2L2NvbmZpZy9cbmV4cG9ydCBjb25zdCBkZWZpbmVWaXRlQ29uZmlnRm9yRW50cnlwb2ludCA9IChlbnRyeXBvaW50OiBWaXRlRW50cnlQb2ludCkgPT4ge1xuICAgIGNvbnN0IGVudHJ5cG9pbnRJbmZvID0gVklURV9FTlRSWVBPSU5UX0lORk9bZW50cnlwb2ludF1cblxuICAgIHJldHVybiBkZWZpbmVDb25maWcoe1xuICAgICAgICBwdWJsaWNEaXI6IGZhbHNlLCAvLyBkb24ndCBjb3B5IHB1YmxpYyBmb2xkZXIgdG8gZGlzdFxuICAgICAgICByZXNvbHZlOiB7XG4gICAgICAgICAgICAvLyBwcmV0dGllci1pZ25vcmVcbiAgICAgICAgICAgIGFsaWFzOiB7XG4gICAgICAgICAgICAgICAgXCJAb3Vyd29ybGRpbmRhdGEvZ3JhcGhlci9zcmNcIjogXCJAb3Vyd29ybGRpbmRhdGEvZ3JhcGhlci9zcmNcIiwgLy8gbmVlZCB0aGlzIGZvciBpbXBvcnRzIG9mIEBvdXJ3b3JsZGluZGF0YS9ncmFwaGVyL3NyYy9jb3JlL2dyYXBoZXIuc2NzcyB0byB3b3JrXG4gICAgICAgICAgICAgICAgLy8gd2UgYWxpYXMgdG8gdGhlIHBhY2thZ2VzIHNvdXJjZSBmaWxlcyBpbiBkZXYgYW5kIHByb2Q6XG4gICAgICAgICAgICAgICAgLy8gdGhpcyBtZWFucyB3ZSBnZXQgaW5zdGFudCBkZXYgdXBkYXRlcyB3aGVuIHdlIGNoYW5nZSBvbmUgb2YgdGhlbSxcbiAgICAgICAgICAgICAgICAvLyBhbmQgdGhlIHByb2QgYnVpbGQgYnVpbGRzIHRoZW0gYWxsIGFzIGVzbSBtb2R1bGVzLCB3aGljaCBoZWxwcyB3aXRoIHRyZWUgc2hha2luZ1xuICAgICAgICAgICAgICAgIC8vIElkZWEgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vTGludXNCb3JnL3Z1ZS1saWItdGVtcGxhdGUvYmxvYi8zNzc1ZTQ5YjIwYTdjMzM0OWRkNDkzMjFjYWQyZWQ3ZjlkNTc1MDU3L3BhY2thZ2VzL3BsYXlncm91bmQvdml0ZS5jb25maWcudHNcbiAgICAgICAgICAgICAgICBcIkBvdXJ3b3JsZGluZGF0YS9jb21wb25lbnRzXCI6IFwiQG91cndvcmxkaW5kYXRhL2NvbXBvbmVudHMvc3JjL2luZGV4LnRzXCIsXG4gICAgICAgICAgICAgICAgXCJAb3Vyd29ybGRpbmRhdGEvY29yZS10YWJsZVwiOiBcIkBvdXJ3b3JsZGluZGF0YS9jb3JlLXRhYmxlL3NyYy9pbmRleC50c1wiLFxuICAgICAgICAgICAgICAgIFwiQG91cndvcmxkaW5kYXRhL2V4cGxvcmVyXCI6IFwiQG91cndvcmxkaW5kYXRhL2V4cGxvcmVyL3NyYy9pbmRleC50c1wiLFxuICAgICAgICAgICAgICAgIFwiQG91cndvcmxkaW5kYXRhL2dyYXBoZXJcIjogXCJAb3Vyd29ybGRpbmRhdGEvZ3JhcGhlci9zcmMvaW5kZXgudHNcIixcbiAgICAgICAgICAgICAgICBcIkBvdXJ3b3JsZGluZGF0YS90eXBlc1wiOiBcIkBvdXJ3b3JsZGluZGF0YS90eXBlcy9zcmMvaW5kZXgudHNcIixcbiAgICAgICAgICAgICAgICBcIkBvdXJ3b3JsZGluZGF0YS91dGlsc1wiOiBcIkBvdXJ3b3JsZGluZGF0YS91dGlscy9zcmMvaW5kZXgudHNcIixcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIGNzczoge1xuICAgICAgICAgICAgZGV2U291cmNlbWFwOiB0cnVlLFxuICAgICAgICB9LFxuICAgICAgICBkZWZpbmU6IHtcbiAgICAgICAgICAgIC8vIFJlcGxhY2UgYWxsIGNsaWVudFNldHRpbmdzIHdpdGggdGhlaXIgcmVzcGVjdGl2ZSB2YWx1ZXMsIGkuZS4gYXNzaWduIGUuZy4gQlVHU05BR19BUElfS0VZIHRvIHByb2Nlc3MuZW52LkJVR1NOQUdfQVBJX0tFWVxuICAgICAgICAgICAgLy8gaXQncyBpbXBvcnRhbnQgdG8gbm90ZSB0aGF0IHdlIG9ubHkgZXhwb3NlIHZhbHVlcyB0aGF0IGFyZSBwcmVzZW50IGluIHRoZSBjbGllbnRTZXR0aW5ncyBmaWxlIC0gbm90IGFueSBvdGhlciB0aGluZ3MgdGhhdCBhcmUgc3RvcmVkIGluIC5lbnZcbiAgICAgICAgICAgIC4uLk9iamVjdC5mcm9tRW50cmllcyhcbiAgICAgICAgICAgICAgICBPYmplY3QuZW50cmllcyhjbGllbnRTZXR0aW5ncykubWFwKChba2V5LCB2YWx1ZV0pID0+IFtcbiAgICAgICAgICAgICAgICAgICAgYHByb2Nlc3MuZW52LiR7a2V5fWAsXG4gICAgICAgICAgICAgICAgICAgIEpTT04uc3RyaW5naWZ5KHZhbHVlKSxcbiAgICAgICAgICAgICAgICBdKVxuICAgICAgICAgICAgKSxcbiAgICAgICAgfSxcbiAgICAgICAgYnVpbGQ6IHtcbiAgICAgICAgICAgIG1hbmlmZXN0OiB0cnVlLCAvLyBjcmVhdGVzIGEgbWFuaWZlc3QuanNvbiBmaWxlLCB3aGljaCB3ZSB1c2UgdG8gZGV0ZXJtaW5lIHdoaWNoIGZpbGVzIHRvIGxvYWQgaW4gcHJvZFxuICAgICAgICAgICAgZW1wdHlPdXREaXI6IHRydWUsXG4gICAgICAgICAgICBvdXREaXI6IGBkaXN0LyR7ZW50cnlwb2ludEluZm8ub3V0RGlyfWAsXG4gICAgICAgICAgICBzb3VyY2VtYXA6IHRydWUsXG4gICAgICAgICAgICB0YXJnZXQ6IFtcImNocm9tZTgwXCIsIFwiZmlyZWZveDc4XCIsIFwic2FmYXJpMTMuMVwiXSwgLy8gc2VlIGRvY3MvYnJvd3Nlci1zdXBwb3J0Lm1kXG4gICAgICAgICAgICByb2xsdXBPcHRpb25zOiB7XG4gICAgICAgICAgICAgICAgaW5wdXQ6IHtcbiAgICAgICAgICAgICAgICAgICAgW2VudHJ5cG9pbnRJbmZvLm91dE5hbWVdOiBlbnRyeXBvaW50SW5mby5lbnRyeVBvaW50RmlsZSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIG91dHB1dDoge1xuICAgICAgICAgICAgICAgICAgICBhc3NldEZpbGVOYW1lczogYCR7ZW50cnlwb2ludEluZm8ub3V0TmFtZX0uY3NzYCxcbiAgICAgICAgICAgICAgICAgICAgZW50cnlGaWxlTmFtZXM6IGAke2VudHJ5cG9pbnRJbmZvLm91dE5hbWV9Lm1qc2AsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHBsdWdpbnM6IFtcbiAgICAgICAgICAgIHBsdWdpblJlYWN0KHtcbiAgICAgICAgICAgICAgICBiYWJlbDoge1xuICAgICAgICAgICAgICAgICAgICBwYXJzZXJPcHRzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwbHVnaW5zOiBbXCJkZWNvcmF0b3JzLWxlZ2FjeVwiXSwgLy8gbmVlZGVkIHNvIG1vYnggZGVjb3JhdG9ycyB3b3JrIGNvcnJlY3RseVxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIHBsdWdpbkNoZWNrZXIoe1xuICAgICAgICAgICAgICAgIHR5cGVzY3JpcHQ6IHtcbiAgICAgICAgICAgICAgICAgICAgYnVpbGRNb2RlOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICB0c2NvbmZpZ1BhdGg6IFwidHNjb25maWcudml0ZS1jaGVja2VyLmpzb25cIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSksXG4gICAgICAgIF0sXG4gICAgICAgIHNlcnZlcjoge1xuICAgICAgICAgICAgcG9ydDogODA5MCxcbiAgICAgICAgICAgIHdhcm11cDogeyBjbGllbnRGaWxlczogW1ZJVEVfQVNTRVRfU0lURV9FTlRSWV0gfSxcbiAgICAgICAgfSxcbiAgICAgICAgcHJldmlldzoge1xuICAgICAgICAgICAgcG9ydDogODA5MCxcbiAgICAgICAgfSxcbiAgICB9KVxufVxuIiwgImNvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9kaXJuYW1lID0gXCIvVXNlcnMvc29waGlhL2NvZGUvb3dpZC9vd2lkLWdyYXBoZXJcIjtjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfZmlsZW5hbWUgPSBcIi9Vc2Vycy9zb3BoaWEvY29kZS9vd2lkL293aWQtZ3JhcGhlci92aXRlLmNvbmZpZy1zaXRlLm10c1wiO2NvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9pbXBvcnRfbWV0YV91cmwgPSBcImZpbGU6Ly8vVXNlcnMvc29waGlhL2NvZGUvb3dpZC9vd2lkLWdyYXBoZXIvdml0ZS5jb25maWctc2l0ZS5tdHNcIjtpbXBvcnQgeyBWaXRlRW50cnlQb2ludCB9IGZyb20gXCIuL3NpdGUvdml0ZVV0aWxzLnRzeFwiXG5pbXBvcnQgeyBkZWZpbmVWaXRlQ29uZmlnRm9yRW50cnlwb2ludCB9IGZyb20gXCIuL3ZpdGUuY29uZmlnLWNvbW1vbi5tdHNcIlxuXG5leHBvcnQgZGVmYXVsdCBkZWZpbmVWaXRlQ29uZmlnRm9yRW50cnlwb2ludChWaXRlRW50cnlQb2ludC5TaXRlKVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7OztBQUFBLE9BQU8sV0FBVzs7O0FDQXVTLE9BQU8sVUFBVTtBQUMxVSxPQUFPLFFBQVE7QUFRQSxTQUFSLG1CQUFvQyxNQUFrQztBQUN6RSxNQUFJLENBQUMsR0FBRyxXQUFZLFFBQU87QUFFM0IsTUFBSSxNQUFNLEtBQUssUUFBUSxJQUFJO0FBRTNCLFNBQU8sSUFBSSxRQUFRO0FBQ2YsUUFBSSxHQUFHLFdBQVcsS0FBSyxRQUFRLEtBQUssY0FBYyxDQUFDLEVBQUcsUUFBTztBQUU3RCxVQUFNLFlBQVksS0FBSyxRQUFRLEtBQUssSUFBSTtBQUV4QyxRQUFJLGNBQWMsSUFBSztBQUFBLFFBQ2xCLE9BQU07QUFBQSxFQUNmO0FBRUEsU0FBTztBQUNYOzs7QUR0QkEsT0FBT0EsU0FBUTs7O0FFQ2YsT0FBT0MsV0FBVTtBQUNqQixPQUFPQyxhQUFZO0FBRW5CLE9BQU9DLFNBQVE7QUFDZixPQUFPLFNBQVM7QUFDaEIsT0FBTyxRQUFROzs7QUNSZjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFB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LFVBQ2pELGVBQWUsR0FBRztBQUFBLFVBQ2xCLEtBQUssVUFBVSxLQUFLO0FBQUEsUUFDeEIsQ0FBQztBQUFBLE1BQ0w7QUFBQSxJQUNKO0FBQUEsSUFDQSxPQUFPO0FBQUEsTUFDSCxVQUFVO0FBQUE7QUFBQSxNQUNWLGFBQWE7QUFBQSxNQUNiLFFBQVEsUUFBUSxlQUFlLE1BQU07QUFBQSxNQUNyQyxXQUFXO0FBQUEsTUFDWCxRQUFRLENBQUMsWUFBWSxhQUFhLFlBQVk7QUFBQTtBQUFBLE1BQzlDLGVBQWU7QUFBQSxRQUNYLE9BQU87QUFBQSxVQUNILENBQUMsZUFBZSxPQUFPLEdBQUcsZUFBZTtBQUFBLFFBQzdDO0FBQUEsUUFDQSxRQUFRO0FBQUEsVUFDSixnQkFBZ0IsR0FBRyxlQUFlLE9BQU87QUFBQSxVQUN6QyxnQkFBZ0IsR0FBRyxlQUFlLE9BQU87QUFBQSxRQUM3QztBQUFBLE1BQ0o7QUFBQSxJQUNKO0FBQUEsSUFDQSxTQUFTO0FBQUEsTUFDTCxZQUFZO0FBQUEsUUFDUixPQUFPO0FBQUEsVUFDSCxZQUFZO0FBQUEsWUFDUixTQUFTLENBQUMsbUJBQW1CO0FBQUE7QUFBQSxVQUNqQztBQUFBLFFBQ0o7QUFBQSxNQUNKLENBQUM7QUFBQSxNQUNELGNBQWM7QUFBQSxRQUNWLFlBQVk7QUFBQSxVQUNSLFdBQVc7QUFBQSxVQUNYLGNBQWM7QUFBQSxRQUNsQjtBQUFBLE1BQ0osQ0FBQztBQUFBLElBQ0w7QUFBQSxJQUNBLFFBQVE7QUFBQSxNQUNKLE1BQU07QUFBQSxNQUNOLFFBQVEsRUFBRSxhQUFhLENBQUMscUJBQXFCLEVBQUU7QUFBQSxJQUNuRDtBQUFBLElBQ0EsU0FBUztBQUFBLE1BQ0wsTUFBTTtBQUFBLElBQ1Y7QUFBQSxFQUNKLENBQUM7QUFDTDs7O0FDakZBLElBQU8sMkJBQVEsK0NBQWlEOyIsCiAgIm5hbWVzIjogWyJmcyIsICJwYXRoIiwgImRvdGVudiIsICJmcyIsICJfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfZGlybmFtZSIsICJfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfZGlybmFtZSIsICJiYXNlRGlyIiwgIkZlYXR1cmVGbGFnRmVhdHVyZSIsICJwYXJzZUludE9yVW5kZWZpbmVkIiwgIl9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9kaXJuYW1lIiwgIl9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9kaXJuYW1lIiwgImRvdGVudiIsICJCQUtFRF9CQVNFX1VSTCIsICJBRE1JTl9CQVNFX1VSTCIsICJCQUtFRF9HUkFQSEVSX1VSTCIsICJCVUdTTkFHX0FQSV9LRVkiLCAicGFyc2VJbnRPclVuZGVmaW5lZCIsICJwYXRoIiwgIkdET0NTX0RFVEFJTFNfT05fREVNQU5EX0lEIiwgInBhdGgiLCAiZnMiLCAiSU1BR0VfSE9TVElOR19SMl9DRE5fVVJMIiwgIklNQUdFX0hPU1RJTkdfUjJfQlVDS0VUX1BBVEgiLCAiSU1BR0VfSE9TVElOR19SMl9CVUNLRVRfU1VCRk9MREVSX1BBVEgiLCAiQURNSU5fQkFTRV9VUkwiXQp9Cg==