vite.config.ts.timestamp-1765332459507-8c81e79bdb55.mjs 37 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303
  1. // vite.config.ts
  2. import { defineConfig, loadEnv } from "file:///D:/workstation/iwb-workstation-2025/ChickenFarm/UI/VB.VUE/node_modules/.pnpm/vite@4.5.14_@types+node@20._9936cbc52c6d3a93bb7d63bfdda7f30d/node_modules/vite/dist/node/index.js";
  3. import { resolve } from "path";
  4. // vite/plugins/index.ts
  5. import vue from "file:///D:/workstation/iwb-workstation-2025/ChickenFarm/UI/VB.VUE/node_modules/.pnpm/@vitejs+plugin-vue@4.6.2_vi_d7044449df0c9964ca0d17834893fcbf/node_modules/@vitejs/plugin-vue/dist/index.mjs";
  6. // vite/plugins/_auto-import.ts
  7. import AutoImport from "file:///D:/workstation/iwb-workstation-2025/ChickenFarm/UI/VB.VUE/node_modules/.pnpm/unplugin-auto-import@0.16.7_cc4052f13262357d34b96c154948362a/node_modules/unplugin-auto-import/dist/vite.js";
  8. import Components from "file:///D:/workstation/iwb-workstation-2025/ChickenFarm/UI/VB.VUE/node_modules/.pnpm/unplugin-vue-components@0.2_8659420a227c5f6700b2ec297d85f86b/node_modules/unplugin-vue-components/dist/vite.mjs";
  9. import IconsResolver from "file:///D:/workstation/iwb-workstation-2025/ChickenFarm/UI/VB.VUE/node_modules/.pnpm/unplugin-icons@0.19.3_@vue+_4ee465b8d170af8012a2d6ee20c72fa7/node_modules/unplugin-icons/dist/resolver.js";
  10. import { ElementPlusResolver } from "file:///D:/workstation/iwb-workstation-2025/ChickenFarm/UI/VB.VUE/node_modules/.pnpm/unplugin-vue-components@0.2_8659420a227c5f6700b2ec297d85f86b/node_modules/unplugin-vue-components/dist/resolvers.mjs";
  11. function createAutoImport() {
  12. return [
  13. AutoImport({
  14. imports: ["vue", "vue-router", "@vueuse/core", "pinia"],
  15. // plus按需引入
  16. resolvers: [
  17. ElementPlusResolver(),
  18. IconsResolver({
  19. prefix: "Icon"
  20. })
  21. ],
  22. dirs: ["src/core/utils", "src/core/services", "src/core/use", "src/core/enums"],
  23. dts: "vite/auto-import/auto-import.d.ts",
  24. eslintrc: {
  25. enabled: true,
  26. filepath: "vite/auto-import/.eslintrc-auto-import.json",
  27. globalsPropValue: true
  28. }
  29. }),
  30. // plus按需引入
  31. Components({
  32. resolvers: [
  33. ElementPlusResolver(),
  34. // 自动注册图标组件
  35. IconsResolver({
  36. prefix: "Icon"
  37. //enabledCollections: ["ep", "mdi", "Simple Icons"]
  38. })
  39. ],
  40. // 指定组件位置,默认是src/components
  41. dirs: ["src/components"],
  42. // 组件的有效文件扩展名。
  43. extensions: ["vue"],
  44. // 搜索子目录
  45. deep: true,
  46. dts: "vite/auto-import/components.d.ts"
  47. })
  48. ];
  49. }
  50. // vite/plugins/_setup-extend.ts
  51. import setupExtend from "file:///D:/workstation/iwb-workstation-2025/ChickenFarm/UI/VB.VUE/node_modules/.pnpm/vite-plugin-vue-setup-exten_691f2e652b2c24bcf8f6cb357bfa3543/node_modules/vite-plugin-vue-setup-extend/dist/index.mjs";
  52. function createSetupExtend() {
  53. return setupExtend();
  54. }
  55. // vite/plugins/_icons.ts
  56. import Icons from "file:///D:/workstation/iwb-workstation-2025/ChickenFarm/UI/VB.VUE/node_modules/.pnpm/unplugin-icons@0.19.3_@vue+_4ee465b8d170af8012a2d6ee20c72fa7/node_modules/unplugin-icons/dist/vite.js";
  57. var icons_default = () => {
  58. return Icons({
  59. // 自动安装图标库
  60. autoInstall: true
  61. });
  62. };
  63. // vite/plugins/_svg-icon.ts
  64. import { createSvgIconsPlugin } from "file:///D:/workstation/iwb-workstation-2025/ChickenFarm/UI/VB.VUE/node_modules/.pnpm/vite-plugin-svg-icons@2.0.1_05c04e5396fc630d362a825bc0d08786/node_modules/vite-plugin-svg-icons/dist/index.mjs";
  65. import path from "path";
  66. var __vite_injected_original_dirname = "D:\\workstation\\iwb-workstation-2025\\ChickenFarm\\UI\\VB.VUE\\vite\\plugins";
  67. function createSvgIcon(isBuild) {
  68. return createSvgIconsPlugin({
  69. iconDirs: [path.resolve(path.resolve(__vite_injected_original_dirname, "../../src"), "assets/icons/svg")],
  70. symbolId: "icon-[dir]-[name]",
  71. svgoOptions: isBuild
  72. });
  73. }
  74. // vite/plugins/_compression.ts
  75. import compression from "file:///D:/workstation/iwb-workstation-2025/ChickenFarm/UI/VB.VUE/node_modules/.pnpm/vite-plugin-compression@0.5_92e55f9fb121c8af4994a33c34ba3c98/node_modules/vite-plugin-compression/dist/index.mjs";
  76. function createCompression(env) {
  77. const { VITE_BUILD_COMPRESS } = env;
  78. const plugin = [];
  79. if (VITE_BUILD_COMPRESS != "") {
  80. const compressList = VITE_BUILD_COMPRESS.split(",");
  81. if (compressList.includes("gzip")) {
  82. plugin.push(
  83. compression({
  84. ext: ".gz",
  85. deleteOriginFile: false
  86. })
  87. );
  88. }
  89. if (compressList.includes("brotli")) {
  90. plugin.push(
  91. compression({
  92. ext: ".br",
  93. algorithm: "brotliCompress",
  94. deleteOriginFile: false
  95. })
  96. );
  97. }
  98. }
  99. return plugin;
  100. }
  101. // vite/plugins/index.ts
  102. function createVitePlugins(viteEnv, isBuild = false) {
  103. const vitePlugins = [vue()];
  104. vitePlugins.push(...createAutoImport());
  105. vitePlugins.push(createSetupExtend());
  106. vitePlugins.push(icons_default());
  107. vitePlugins.push(createSvgIcon(isBuild));
  108. isBuild && vitePlugins.push(...createCompression(viteEnv));
  109. return vitePlugins;
  110. }
  111. // vite.config.ts
  112. import * as basicSsl from "file:///D:/workstation/iwb-workstation-2025/ChickenFarm/UI/VB.VUE/node_modules/.pnpm/@vitejs+plugin-basic-ssl@2._fe9f8e3de167f8fa3118b758832e996e/node_modules/@vitejs/plugin-basic-ssl/dist/index.mjs";
  113. var __vite_injected_original_dirname2 = "D:\\workstation\\iwb-workstation-2025\\ChickenFarm\\UI\\VB.VUE";
  114. var vite_config_default = defineConfig(({ mode, command }) => {
  115. const env = loadEnv(mode, process.cwd());
  116. return {
  117. // 部署生产环境和开发环境下的URL。
  118. // 默认情况下,vite 会假设你的应用是被部署在一个域名的根路径上
  119. // 例如 https://www.vber.net/。如果应用被部署在一个子路径上,你就需要用这个选项指定这个子路径。例如,如果你的应用被部署在 https://www.vber.net/admin/,则设置 baseUrl 为 /admin/。
  120. base: env.VITE_APP_CONTEXT_PATH,
  121. plugins: [
  122. ...createVitePlugins(env, command === "build"),
  123. // @ts-ignore
  124. basicSsl.default()
  125. //,visualizer()
  126. ],
  127. build: {
  128. outDir: "../../SERVER/ChickenFarmV3/.data/html",
  129. minify: "terser",
  130. // 启用 terser 压缩
  131. terserOptions: {
  132. compress: {
  133. pure_funcs: ["console.log"],
  134. // 只删除 console.log
  135. //drop_console: true, // 删除所有 console
  136. drop_debugger: true
  137. // 删除 debugger
  138. }
  139. },
  140. rollupOptions: {
  141. output: {
  142. // 最小化拆分包
  143. manualChunks(id) {
  144. if (id.includes("node_modules")) {
  145. if (id.includes("node_modules/element-plus")) {
  146. return "vb_plugin_element-plus";
  147. }
  148. if (id.includes("node_modules/nprogress")) {
  149. return "vb_plugin_nprogress";
  150. }
  151. if (id.includes("node_modules/quill")) {
  152. return "vb_plugin_quill";
  153. }
  154. if (id.includes("node_modules/echarts")) {
  155. return "vb_plugin_echarts";
  156. }
  157. if (id.includes("node_modules/lodash")) {
  158. return "vb_plugin_lodash";
  159. }
  160. return "vb_plugin_vendor";
  161. }
  162. if (id.includes(resolve(__vite_injected_original_dirname2, "/src/stores/index.ts"))) {
  163. return "vb_store";
  164. }
  165. if (id.includes("/src/components/") && id.includes("/Vb")) {
  166. return "vb_components";
  167. }
  168. if (id.includes("/src/core/utils/") && id.includes("/Vb")) {
  169. return "vb_utils";
  170. }
  171. },
  172. // 设置chunk的文件名格式
  173. chunkFileNames: (chunkInfo) => {
  174. if (chunkInfo.isEntry) {
  175. return "index.[hash].js";
  176. }
  177. if (chunkInfo.name === "index") {
  178. const facadeModuleId = chunkInfo.facadeModuleId ? chunkInfo.facadeModuleId.split("/") : [];
  179. const fileName = facadeModuleId[facadeModuleId.length - 2] || "[name]";
  180. return `js/vb_view_${fileName}.[hash].js`;
  181. }
  182. return `js/[name].[hash].js`;
  183. },
  184. // 设置入口文件的文件名格式
  185. entryFileNames: "js/[name].[hash].js",
  186. // 设置静态资源文件的文件名格式
  187. assetFileNames(assetInfo) {
  188. var _a;
  189. if ((_a = assetInfo.name) == null ? void 0 : _a.endsWith(".css")) {
  190. return "css/[name].[hash].[ext]";
  191. }
  192. const imgArray = [".png", "jpg", ".jpeg", "webp ", ".svg", ".gif"];
  193. if (imgArray.some((v) => {
  194. var _a2;
  195. return (_a2 = assetInfo.name) == null ? void 0 : _a2.endsWith(v);
  196. })) {
  197. return "img/[name].[hash].[ext]";
  198. }
  199. return "media/asset/[name].[hash:4].[ext]";
  200. }
  201. }
  202. }
  203. },
  204. resolve: {
  205. // https://cn.vitejs.dev/config/#resolve-alias
  206. alias: {
  207. "@a": resolve(__vite_injected_original_dirname2, "./src/api"),
  208. "@s": resolve(__vite_injected_original_dirname2, "./src/stores"),
  209. "@r": resolve(__vite_injected_original_dirname2, "./src/router"),
  210. "@v": resolve(__vite_injected_original_dirname2, "./src/views"),
  211. "@@": resolve(__vite_injected_original_dirname2, "./src/core"),
  212. "@@@": resolve(__vite_injected_original_dirname2, "./src/components"),
  213. "@com": resolve(__vite_injected_original_dirname2, "./src/components"),
  214. "@": resolve(__vite_injected_original_dirname2, "./src"),
  215. "~": resolve(__vite_injected_original_dirname2, "./")
  216. },
  217. // https://cn.vitejs.dev/config/#resolve-extensions
  218. extensions: [".mjs", ".js", ".ts", ".jsx", ".tsx", ".json", ".vue"]
  219. },
  220. // vite 相关配置
  221. server: {
  222. port: Number(env.VITE_APP_PORT),
  223. // host: true,
  224. host: "0.0.0.0",
  225. // 热更新
  226. hmr: true,
  227. // 设为 true 时若端口已被占用则会直接退出,而不是尝试下一个可用端口
  228. strictPort: true,
  229. open: true,
  230. // 开启https
  231. https: false,
  232. proxy: {
  233. [env.VITE_APP_BASE_API]: {
  234. //target: "http://localhost:8080",
  235. target: env.VITE_APP_PROXY_URL,
  236. changeOrigin: true,
  237. rewrite: (path2) => path2.replace(new RegExp("^" + env.VITE_APP_BASE_API), "")
  238. }
  239. }
  240. },
  241. preview: {
  242. port: 7688,
  243. // host: true,
  244. host: "0.0.0.0",
  245. // 热更新
  246. hmr: true,
  247. // 设为 true 时若端口已被占用则会直接退出,而不是尝试下一个可用端口
  248. strictPort: true,
  249. open: true,
  250. cors: false,
  251. proxy: {
  252. // "/prod-api": {
  253. // target: "http://localhost:6060",
  254. // changeOrigin: true,
  255. // rewrite: (p) => p.replace(/^\/prod-api/, ""),
  256. // }, 1
  257. "/prod-api": {
  258. target: "http://192.168.0.81:8380",
  259. changeOrigin: true,
  260. rewrite: (p) => p.replace(/^\/prod-api/, "")
  261. }
  262. }
  263. },
  264. // 预编译
  265. optimizeDeps: {
  266. include: [
  267. "vue",
  268. "vue-router",
  269. "pinia",
  270. "axios",
  271. "@vueuse/core",
  272. "path-to-regexp",
  273. "echarts",
  274. "vue-i18n",
  275. "@vueup/vue-quill",
  276. "bpmn-js/lib/Viewer",
  277. "bpmn-js/lib/Modeler.js",
  278. "bpmn-js-properties-panel",
  279. "min-dash",
  280. "diagram-js/lib/navigation/movecanvas",
  281. "diagram-js/lib/navigation/zoomscroll",
  282. "bpmn-js/lib/features/palette/PaletteProvider",
  283. "bpmn-js/lib/features/context-pad/ContextPadProvider",
  284. "diagram-js/lib/draw/BaseRenderer",
  285. "tiny-svg",
  286. "image-conversion",
  287. "element-plus/es/components/**/css"
  288. ]
  289. }
  290. };
  291. });
  292. export {
  293. vite_config_default as default
  294. };
  295. //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsidml0ZS5jb25maWcudHMiLCAidml0ZS9wbHVnaW5zL2luZGV4LnRzIiwgInZpdGUvcGx1Z2lucy9fYXV0by1pbXBvcnQudHMiLCAidml0ZS9wbHVnaW5zL19zZXR1cC1leHRlbmQudHMiLCAidml0ZS9wbHVnaW5zL19pY29ucy50cyIsICJ2aXRlL3BsdWdpbnMvX3N2Zy1pY29uLnRzIiwgInZpdGUvcGx1Z2lucy9fY29tcHJlc3Npb24udHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImNvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9kaXJuYW1lID0gXCJEOlxcXFx3b3Jrc3RhdGlvblxcXFxpd2Itd29ya3N0YXRpb24tMjAyNVxcXFxDaGlja2VuRmFybVxcXFxVSVxcXFxWQi5WVUVcIjtjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfZmlsZW5hbWUgPSBcIkQ6XFxcXHdvcmtzdGF0aW9uXFxcXGl3Yi13b3Jrc3RhdGlvbi0yMDI1XFxcXENoaWNrZW5GYXJtXFxcXFVJXFxcXFZCLlZVRVxcXFx2aXRlLmNvbmZpZy50c1wiO2NvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9pbXBvcnRfbWV0YV91cmwgPSBcImZpbGU6Ly8vRDovd29ya3N0YXRpb24vaXdiLXdvcmtzdGF0aW9uLTIwMjUvQ2hpY2tlbkZhcm0vVUkvVkIuVlVFL3ZpdGUuY29uZmlnLnRzXCI7aW1wb3J0IHsgZGVmaW5lQ29uZmlnLCBsb2FkRW52IH0gZnJvbSBcInZpdGVcIlxuaW1wb3J0IHsgcmVzb2x2ZSB9IGZyb20gXCJwYXRoXCJcbmltcG9ydCBjcmVhdGVWaXRlUGx1Z2lucyBmcm9tIFwiLi92aXRlL3BsdWdpbnNcIlxuaW1wb3J0ICogYXMgYmFzaWNTc2wgZnJvbSBcIkB2aXRlanMvcGx1Z2luLWJhc2ljLXNzbFwiXG5cbi8vaW1wb3J0IHsgdmlzdWFsaXplciB9IGZyb20gXCJyb2xsdXAtcGx1Z2luLXZpc3VhbGl6ZXJcIlxuLy8gaHR0cHM6Ly92aXRlanMuZGV2L2NvbmZpZy9cbmV4cG9ydCBkZWZhdWx0IGRlZmluZUNvbmZpZygoeyBtb2RlLCBjb21tYW5kIH0pID0+IHtcblx0Y29uc3QgZW52ID0gbG9hZEVudihtb2RlLCBwcm9jZXNzLmN3ZCgpKVxuXHRyZXR1cm4ge1xuXHRcdC8vIFx1OTBFOFx1N0Y3Mlx1NzUxRlx1NEVBN1x1NzNBRlx1NTg4M1x1NTQ4Q1x1NUYwMFx1NTNEMVx1NzNBRlx1NTg4M1x1NEUwQlx1NzY4NFVSTFx1MzAwMlxuXHRcdC8vIFx1OUVEOFx1OEJBNFx1NjBDNVx1NTFCNVx1NEUwQlx1RkYwQ3ZpdGUgXHU0RjFBXHU1MDQ3XHU4QkJFXHU0RjYwXHU3Njg0XHU1RTk0XHU3NTI4XHU2NjJGXHU4OEFCXHU5MEU4XHU3RjcyXHU1NzI4XHU0RTAwXHU0RTJBXHU1N0RGXHU1NDBEXHU3Njg0XHU2ODM5XHU4REVGXHU1Rjg0XHU0RTBBXG5cdFx0Ly8gXHU0RjhCXHU1OTgyIGh0dHBzOi8vd3d3LnZiZXIubmV0L1x1MzAwMlx1NTk4Mlx1Njc5Q1x1NUU5NFx1NzUyOFx1ODhBQlx1OTBFOFx1N0Y3Mlx1NTcyOFx1NEUwMFx1NEUyQVx1NUI1MFx1OERFRlx1NUY4NFx1NEUwQVx1RkYwQ1x1NEY2MFx1NUMzMVx1OTcwMFx1ODk4MVx1NzUyOFx1OEZEOVx1NEUyQVx1OTAwOVx1OTg3OVx1NjMwN1x1NUI5QVx1OEZEOVx1NEUyQVx1NUI1MFx1OERFRlx1NUY4NFx1MzAwMlx1NEY4Qlx1NTk4Mlx1RkYwQ1x1NTk4Mlx1Njc5Q1x1NEY2MFx1NzY4NFx1NUU5NFx1NzUyOFx1ODhBQlx1OTBFOFx1N0Y3Mlx1NTcyOCBodHRwczovL3d3dy52YmVyLm5ldC9hZG1pbi9cdUZGMENcdTUyMTlcdThCQkVcdTdGNkUgYmFzZVVybCBcdTRFM0EgL2FkbWluL1x1MzAwMlxuXHRcdGJhc2U6IGVudi5WSVRFX0FQUF9DT05URVhUX1BBVEgsXG5cdFx0cGx1Z2luczogW1xuXHRcdFx0Li4uY3JlYXRlVml0ZVBsdWdpbnMoZW52LCBjb21tYW5kID09PSBcImJ1aWxkXCIpLFxuXHRcdFx0Ly8gQHRzLWlnbm9yZVxuXHRcdFx0YmFzaWNTc2wuZGVmYXVsdCgpXG5cdFx0XHQvLyx2aXN1YWxpemVyKClcblx0XHRdLFxuXHRcdGJ1aWxkOiB7XG5cdFx0XHRvdXREaXI6IFwiLi4vLi4vU0VSVkVSL0NoaWNrZW5GYXJtVjMvLmRhdGEvaHRtbFwiLFxuXHRcdFx0bWluaWZ5OiBcInRlcnNlclwiLCAvLyBcdTU0MkZcdTc1MjggdGVyc2VyIFx1NTM4Qlx1N0YyOVxuXHRcdFx0dGVyc2VyT3B0aW9uczoge1xuXHRcdFx0XHRjb21wcmVzczoge1xuXHRcdFx0XHRcdHB1cmVfZnVuY3M6IFtcImNvbnNvbGUubG9nXCJdLCAvLyBcdTUzRUFcdTUyMjBcdTk2NjQgY29uc29sZS5sb2dcblx0XHRcdFx0XHQvL2Ryb3BfY29uc29sZTogdHJ1ZSwgLy8gXHU1MjIwXHU5NjY0XHU2MjQwXHU2NzA5IGNvbnNvbGVcblx0XHRcdFx0XHRkcm9wX2RlYnVnZ2VyOiB0cnVlIC8vIFx1NTIyMFx1OTY2NCBkZWJ1Z2dlclxuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0cm9sbHVwT3B0aW9uczoge1xuXHRcdFx0XHRvdXRwdXQ6IHtcblx0XHRcdFx0XHQvLyBcdTY3MDBcdTVDMEZcdTUzMTZcdTYyQzZcdTUyMDZcdTUzMDVcblx0XHRcdFx0XHRtYW51YWxDaHVua3MoaWQpIHtcblx0XHRcdFx0XHRcdGlmIChpZC5pbmNsdWRlcyhcIm5vZGVfbW9kdWxlc1wiKSkge1xuXHRcdFx0XHRcdFx0XHRpZiAoaWQuaW5jbHVkZXMoXCJub2RlX21vZHVsZXMvZWxlbWVudC1wbHVzXCIpKSB7XG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuIFwidmJfcGx1Z2luX2VsZW1lbnQtcGx1c1wiXG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0aWYgKGlkLmluY2x1ZGVzKFwibm9kZV9tb2R1bGVzL25wcm9ncmVzc1wiKSkge1xuXHRcdFx0XHRcdFx0XHRcdHJldHVybiBcInZiX3BsdWdpbl9ucHJvZ3Jlc3NcIiAvL1x1NTM1NVx1NzJFQ1x1NjI1M1x1NTMwNVxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdGlmIChpZC5pbmNsdWRlcyhcIm5vZGVfbW9kdWxlcy9xdWlsbFwiKSkge1xuXHRcdFx0XHRcdFx0XHRcdHJldHVybiBcInZiX3BsdWdpbl9xdWlsbFwiXG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0aWYgKGlkLmluY2x1ZGVzKFwibm9kZV9tb2R1bGVzL2VjaGFydHNcIikpIHtcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gXCJ2Yl9wbHVnaW5fZWNoYXJ0c1wiXG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0aWYgKGlkLmluY2x1ZGVzKFwibm9kZV9tb2R1bGVzL2xvZGFzaFwiKSkge1xuXHRcdFx0XHRcdFx0XHRcdHJldHVybiBcInZiX3BsdWdpbl9sb2Rhc2hcIlxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdC8vIFx1OTAxQVx1OEZDN1x1NjJDNlx1NTIwNlx1NTMwNVx1NzY4NFx1NjVCOVx1NUYwRlx1NUMwNlx1NjI0MFx1NjcwOVx1Njc2NVx1ODFFQW5vZGVfbW9kdWxlc1x1NzY4NFx1NkEyMVx1NTc1N1x1NjI1M1x1NTMwNVx1NTIzMFx1NTM1NVx1NzJFQ1x1NzY4NGNodW5rXHU0RTJEXG5cdFx0XHRcdFx0XHRcdHJldHVybiBcInZiX3BsdWdpbl92ZW5kb3JcIlxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0Ly8gXHU1QzA2cGluaWFcdTc2ODRcdTUxNjhcdTVDNDBcdTVFOTNcdTUzNTVcdTcyRUNcdTYyNTNcdTUzMDVcdUZGMENcdTkwN0ZcdTUxNERcdTU0OENcdTk4NzVcdTk3NjJcdTRFMDBcdThENzdcdTYyNTNcdTUzMDVcdTkwMjBcdTYyMTBcdThENDRcdTZFOTBcdTkxQ0RcdTU5MERcdTVGMTVcdTUxNjVcblx0XHRcdFx0XHRcdGlmIChpZC5pbmNsdWRlcyhyZXNvbHZlKF9fZGlybmFtZSwgXCIvc3JjL3N0b3Jlcy9pbmRleC50c1wiKSkpIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIFwidmJfc3RvcmVcIlxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0aWYgKGlkLmluY2x1ZGVzKFwiL3NyYy9jb21wb25lbnRzL1wiKSAmJiBpZC5pbmNsdWRlcyhcIi9WYlwiKSkge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gXCJ2Yl9jb21wb25lbnRzXCJcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGlmIChpZC5pbmNsdWRlcyhcIi9zcmMvY29yZS91dGlscy9cIikgJiYgaWQuaW5jbHVkZXMoXCIvVmJcIikpIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIFwidmJfdXRpbHNcIlxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0Ly8gXHU4QkJFXHU3RjZFY2h1bmtcdTc2ODRcdTY1ODdcdTRFRjZcdTU0MERcdTY4M0NcdTVGMEZcblx0XHRcdFx0XHRjaHVua0ZpbGVOYW1lczogKGNodW5rSW5mbykgPT4ge1xuXHRcdFx0XHRcdFx0aWYgKGNodW5rSW5mby5pc0VudHJ5KSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiBcImluZGV4LltoYXNoXS5qc1wiXG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRpZiAoY2h1bmtJbmZvLm5hbWUgPT09IFwiaW5kZXhcIikge1xuXHRcdFx0XHRcdFx0XHRjb25zdCBmYWNhZGVNb2R1bGVJZCA9IGNodW5rSW5mby5mYWNhZGVNb2R1bGVJZFxuXHRcdFx0XHRcdFx0XHRcdD8gY2h1bmtJbmZvLmZhY2FkZU1vZHVsZUlkLnNwbGl0KFwiL1wiKVxuXHRcdFx0XHRcdFx0XHRcdDogW11cblx0XHRcdFx0XHRcdFx0Y29uc3QgZmlsZU5hbWUgPSBmYWNhZGVNb2R1bGVJZFtmYWNhZGVNb2R1bGVJZC5sZW5ndGggLSAyXSB8fCBcIltuYW1lXVwiXG5cdFx0XHRcdFx0XHRcdC8vIFx1NjgzOVx1NjM2RWNodW5rXHU3Njg0ZmFjYWRlTW9kdWxlSWRcdUZGMDhcdTUxNjVcdTUzRTNcdTZBMjFcdTU3NTdcdTc2ODRcdTc2RjhcdTVCRjlcdThERUZcdTVGODRcdUZGMDlcdTc1MUZcdTYyMTBjaHVua1x1NzY4NFx1NjU4N1x1NEVGNlx1NTQwRFxuXHRcdFx0XHRcdFx0XHRyZXR1cm4gYGpzL3ZiX3ZpZXdfJHtmaWxlTmFtZX0uW2hhc2hdLmpzYFxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0cmV0dXJuIGBqcy9bbmFtZV0uW2hhc2hdLmpzYFxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0Ly8gXHU4QkJFXHU3RjZFXHU1MTY1XHU1M0UzXHU2NTg3XHU0RUY2XHU3Njg0XHU2NTg3XHU0RUY2XHU1NDBEXHU2ODNDXHU1RjBGXG5cdFx0XHRcdFx0ZW50cnlGaWxlTmFtZXM6IFwianMvW25hbWVdLltoYXNoXS5qc1wiLFxuXHRcdFx0XHRcdC8vIFx1OEJCRVx1N0Y2RVx1OTc1OVx1NjAwMVx1OEQ0NFx1NkU5MFx1NjU4N1x1NEVGNlx1NzY4NFx1NjU4N1x1NEVGNlx1NTQwRFx1NjgzQ1x1NUYwRlxuXHRcdFx0XHRcdGFzc2V0RmlsZU5hbWVzKGFzc2V0SW5mbykge1xuXHRcdFx0XHRcdFx0aWYgKGFzc2V0SW5mby5uYW1lPy5lbmRzV2l0aChcIi5jc3NcIikpIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIFwiY3NzL1tuYW1lXS5baGFzaF0uW2V4dF1cIlxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0Y29uc3QgaW1nQXJyYXkgPSBbXCIucG5nXCIsIFwianBnXCIsIFwiLmpwZWdcIiwgXCJ3ZWJwIFwiLCBcIi5zdmdcIiwgXCIuZ2lmXCJdXG5cdFx0XHRcdFx0XHRpZiAoaW1nQXJyYXkuc29tZSgodikgPT4gYXNzZXRJbmZvLm5hbWU/LmVuZHNXaXRoKHYpKSkge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gXCJpbWcvW25hbWVdLltoYXNoXS5bZXh0XVwiXG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRyZXR1cm4gXCJtZWRpYS9hc3NldC9bbmFtZV0uW2hhc2g6NF0uW2V4dF1cIlxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0sXG5cdFx0cmVzb2x2ZToge1xuXHRcdFx0Ly8gaHR0cHM6Ly9jbi52aXRlanMuZGV2L2NvbmZpZy8jcmVzb2x2ZS1hbGlhc1xuXHRcdFx0YWxpYXM6IHtcblx0XHRcdFx0XCJAYVwiOiByZXNvbHZlKF9fZGlybmFtZSwgXCIuL3NyYy9hcGlcIiksXG5cdFx0XHRcdFwiQHNcIjogcmVzb2x2ZShfX2Rpcm5hbWUsIFwiLi9zcmMvc3RvcmVzXCIpLFxuXHRcdFx0XHRcIkByXCI6IHJlc29sdmUoX19kaXJuYW1lLCBcIi4vc3JjL3JvdXRlclwiKSxcblx0XHRcdFx0XCJAdlwiOiByZXNvbHZlKF9fZGlybmFtZSwgXCIuL3NyYy92aWV3c1wiKSxcblx0XHRcdFx0XCJAQFwiOiByZXNvbHZlKF9fZGlybmFtZSwgXCIuL3NyYy9jb3JlXCIpLFxuXHRcdFx0XHRcIkBAQFwiOiByZXNvbHZlKF9fZGlybmFtZSwgXCIuL3NyYy9jb21wb25lbnRzXCIpLFxuXHRcdFx0XHRcIkBjb21cIjogcmVzb2x2ZShfX2Rpcm5hbWUsIFwiLi9zcmMvY29tcG9uZW50c1wiKSxcblx0XHRcdFx0XCJAXCI6IHJlc29sdmUoX19kaXJuYW1lLCBcIi4vc3JjXCIpLFxuXHRcdFx0XHRcIn5cIjogcmVzb2x2ZShfX2Rpcm5hbWUsIFwiLi9cIilcblx0XHRcdH0sXG5cdFx0XHQvLyBodHRwczovL2NuLnZpdGVqcy5kZXYvY29uZmlnLyNyZXNvbHZlLWV4dGVuc2lvbnNcblx0XHRcdGV4dGVuc2lvbnM6IFtcIi5tanNcIiwgXCIuanNcIiwgXCIudHNcIiwgXCIuanN4XCIsIFwiLnRzeFwiLCBcIi5qc29uXCIsIFwiLnZ1ZVwiXVxuXHRcdH0sXG5cdFx0Ly8gdml0ZSBcdTc2RjhcdTUxNzNcdTkxNERcdTdGNkVcblx0XHRzZXJ2ZXI6IHtcblx0XHRcdHBvcnQ6IE51bWJlcihlbnYuVklURV9BUFBfUE9SVCksXG5cdFx0XHQvLyBob3N0OiB0cnVlLFxuXHRcdFx0aG9zdDogXCIwLjAuMC4wXCIsXG5cdFx0XHQvLyBcdTcwRURcdTY2RjRcdTY1QjBcblx0XHRcdGhtcjogdHJ1ZSxcblx0XHRcdC8vIFx1OEJCRVx1NEUzQSB0cnVlIFx1NjVGNlx1ODJFNVx1N0FFRlx1NTNFM1x1NURGMlx1ODhBQlx1NTM2MFx1NzUyOFx1NTIxOVx1NEYxQVx1NzZGNFx1NjNBNVx1OTAwMFx1NTFGQVx1RkYwQ1x1ODAwQ1x1NEUwRFx1NjYyRlx1NUMxRFx1OEJENVx1NEUwQlx1NEUwMFx1NEUyQVx1NTNFRlx1NzUyOFx1N0FFRlx1NTNFM1xuXHRcdFx0c3RyaWN0UG9ydDogdHJ1ZSxcblx0XHRcdG9wZW46IHRydWUsXG5cdFx0XHQvLyBcdTVGMDBcdTU0MkZodHRwc1xuXHRcdFx0aHR0cHM6IGZhbHNlLFxuXHRcdFx0cHJveHk6IHtcblx0XHRcdFx0W2Vudi5WSVRFX0FQUF9CQVNFX0FQSV06IHtcblx0XHRcdFx0XHQvL3RhcmdldDogXCJodHRwOi8vbG9jYWxob3N0OjgwODBcIixcblx0XHRcdFx0XHR0YXJnZXQ6IGVudi5WSVRFX0FQUF9QUk9YWV9VUkwsXG5cdFx0XHRcdFx0Y2hhbmdlT3JpZ2luOiB0cnVlLFxuXHRcdFx0XHRcdHJld3JpdGU6IChwYXRoKSA9PiBwYXRoLnJlcGxhY2UobmV3IFJlZ0V4cChcIl5cIiArIGVudi5WSVRFX0FQUF9CQVNFX0FQSSksIFwiXCIpXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9LFxuXHRcdHByZXZpZXc6IHtcblx0XHRcdHBvcnQ6IDc2ODgsXG5cdFx0XHQvLyBob3N0OiB0cnVlLFxuXHRcdFx0aG9zdDogXCIwLjAuMC4wXCIsXG5cdFx0XHQvLyBcdTcwRURcdTY2RjRcdTY1QjBcblx0XHRcdGhtcjogdHJ1ZSxcblx0XHRcdC8vIFx1OEJCRVx1NEUzQSB0cnVlIFx1NjVGNlx1ODJFNVx1N0FFRlx1NTNFM1x1NURGMlx1ODhBQlx1NTM2MFx1NzUyOFx1NTIxOVx1NEYxQVx1NzZGNFx1NjNBNVx1OTAwMFx1NTFGQVx1RkYwQ1x1ODAwQ1x1NEUwRFx1NjYyRlx1NUMxRFx1OEJENVx1NEUwQlx1NEUwMFx1NEUyQVx1NTNFRlx1NzUyOFx1N0FFRlx1NTNFM1xuXHRcdFx0c3RyaWN0UG9ydDogdHJ1ZSxcblx0XHRcdG9wZW46IHRydWUsXG5cdFx0XHRjb3JzOiBmYWxzZSxcblx0XHRcdHByb3h5OiB7XG5cdFx0XHRcdC8vIFwiL3Byb2QtYXBpXCI6IHtcblx0XHRcdFx0Ly8gICB0YXJnZXQ6IFwiaHR0cDovL2xvY2FsaG9zdDo2MDYwXCIsXG5cdFx0XHRcdC8vICAgY2hhbmdlT3JpZ2luOiB0cnVlLFxuXHRcdFx0XHQvLyAgIHJld3JpdGU6IChwKSA9PiBwLnJlcGxhY2UoL15cXC9wcm9kLWFwaS8sIFwiXCIpLFxuXHRcdFx0XHQvLyB9LFx0MVxuXHRcdFx0XHRcIi9wcm9kLWFwaVwiOiB7XG5cdFx0XHRcdFx0dGFyZ2V0OiBcImh0dHA6Ly8xOTIuMTY4LjAuODE6ODM4MFwiLFxuXHRcdFx0XHRcdGNoYW5nZU9yaWdpbjogdHJ1ZSxcblx0XHRcdFx0XHRyZXdyaXRlOiAocCkgPT4gcC5yZXBsYWNlKC9eXFwvcHJvZC1hcGkvLCBcIlwiKVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSxcblx0XHQvLyBcdTk4ODRcdTdGMTZcdThCRDFcblx0XHRvcHRpbWl6ZURlcHM6IHtcblx0XHRcdGluY2x1ZGU6IFtcblx0XHRcdFx0XCJ2dWVcIixcblx0XHRcdFx0XCJ2dWUtcm91dGVyXCIsXG5cdFx0XHRcdFwicGluaWFcIixcblx0XHRcdFx0XCJheGlvc1wiLFxuXHRcdFx0XHRcIkB2dWV1c2UvY29yZVwiLFxuXHRcdFx0XHRcInBhdGgtdG8tcmVnZXhwXCIsXG5cdFx0XHRcdFwiZWNoYXJ0c1wiLFxuXHRcdFx0XHRcInZ1ZS1pMThuXCIsXG5cdFx0XHRcdFwiQHZ1ZXVwL3Z1ZS1xdWlsbFwiLFxuXHRcdFx0XHRcImJwbW4tanMvbGliL1ZpZXdlclwiLFxuXHRcdFx0XHRcImJwbW4tanMvbGliL01vZGVsZXIuanNcIixcblx0XHRcdFx0XCJicG1uLWpzLXByb3BlcnRpZXMtcGFuZWxcIixcblx0XHRcdFx0XCJtaW4tZGFzaFwiLFxuXHRcdFx0XHRcImRpYWdyYW0tanMvbGliL25hdmlnYXRpb24vbW92ZWNhbnZhc1wiLFxuXHRcdFx0XHRcImRpYWdyYW0tanMvbGliL25hdmlnYXRpb24vem9vbXNjcm9sbFwiLFxuXHRcdFx0XHRcImJwbW4tanMvbGliL2ZlYXR1cmVzL3BhbGV0dGUvUGFsZXR0ZVByb3ZpZGVyXCIsXG5cdFx0XHRcdFwiYnBtbi1qcy9saWIvZmVhdHVyZXMvY29udGV4dC1wYWQvQ29udGV4dFBhZFByb3ZpZGVyXCIsXG5cdFx0XHRcdFwiZGlhZ3JhbS1qcy9saWIvZHJhdy9CYXNlUmVuZGVyZXJcIixcblx0XHRcdFx0XCJ0aW55LXN2Z1wiLFxuXHRcdFx0XHRcImltYWdlLWNvbnZlcnNpb25cIixcblx0XHRcdFx0XCJlbGVtZW50LXBsdXMvZXMvY29tcG9uZW50cy8qKi9jc3NcIlxuXHRcdFx0XVxuXHRcdH1cblx0fVxufSlcbiIsICJjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfZGlybmFtZSA9IFwiRDpcXFxcd29ya3N0YXRpb25cXFxcaXdiLXdvcmtzdGF0aW9uLTIwMjVcXFxcQ2hpY2tlbkZhcm1cXFxcVUlcXFxcVkIuVlVFXFxcXHZpdGVcXFxccGx1Z2luc1wiO2NvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9maWxlbmFtZSA9IFwiRDpcXFxcd29ya3N0YXRpb25cXFxcaXdiLXdvcmtzdGF0aW9uLTIwMjVcXFxcQ2hpY2tlbkZhcm1cXFxcVUlcXFxcVkIuVlVFXFxcXHZpdGVcXFxccGx1Z2luc1xcXFxpbmRleC50c1wiO2NvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9pbXBvcnRfbWV0YV91cmwgPSBcImZpbGU6Ly8vRDovd29ya3N0YXRpb24vaXdiLXdvcmtzdGF0aW9uLTIwMjUvQ2hpY2tlbkZhcm0vVUkvVkIuVlVFL3ZpdGUvcGx1Z2lucy9pbmRleC50c1wiO2ltcG9ydCB2dWUgZnJvbSBcIkB2aXRlanMvcGx1Z2luLXZ1ZVwiXG5pbXBvcnQgY3JlYXRlQXV0b0ltcG9ydCBmcm9tIFwiLi9fYXV0by1pbXBvcnRcIlxuaW1wb3J0IGNyZWF0ZVNldHVwRXh0ZW5kIGZyb20gXCIuL19zZXR1cC1leHRlbmRcIlxuaW1wb3J0IGNyZWF0ZUljb25zIGZyb20gXCIuL19pY29uc1wiXG5pbXBvcnQgY3JlYXRlU3ZnSWNvbiBmcm9tIFwiLi9fc3ZnLWljb25cIlxuaW1wb3J0IGNyZWF0ZUNvbXByZXNzaW9uIGZyb20gXCIuL19jb21wcmVzc2lvblwiXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNyZWF0ZVZpdGVQbHVnaW5zKHZpdGVFbnY6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4sIGlzQnVpbGQgPSBmYWxzZSk6IGFueVtdIHtcblx0Y29uc3Qgdml0ZVBsdWdpbnMgPSBbdnVlKCldXG5cdHZpdGVQbHVnaW5zLnB1c2goLi4uY3JlYXRlQXV0b0ltcG9ydCgpKVxuXHR2aXRlUGx1Z2lucy5wdXNoKGNyZWF0ZVNldHVwRXh0ZW5kKCkpXG5cdHZpdGVQbHVnaW5zLnB1c2goY3JlYXRlSWNvbnMoKSlcblx0dml0ZVBsdWdpbnMucHVzaChjcmVhdGVTdmdJY29uKGlzQnVpbGQpKVxuXHRpc0J1aWxkICYmIHZpdGVQbHVnaW5zLnB1c2goLi4uY3JlYXRlQ29tcHJlc3Npb24odml0ZUVudikpXG5cdHJldHVybiB2aXRlUGx1Z2luc1xufVxuIiwgImNvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9kaXJuYW1lID0gXCJEOlxcXFx3b3Jrc3RhdGlvblxcXFxpd2Itd29ya3N0YXRpb24tMjAyNVxcXFxDaGlja2VuRmFybVxcXFxVSVxcXFxWQi5WVUVcXFxcdml0ZVxcXFxwbHVnaW5zXCI7Y29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2ZpbGVuYW1lID0gXCJEOlxcXFx3b3Jrc3RhdGlvblxcXFxpd2Itd29ya3N0YXRpb24tMjAyNVxcXFxDaGlja2VuRmFybVxcXFxVSVxcXFxWQi5WVUVcXFxcdml0ZVxcXFxwbHVnaW5zXFxcXF9hdXRvLWltcG9ydC50c1wiO2NvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9pbXBvcnRfbWV0YV91cmwgPSBcImZpbGU6Ly8vRDovd29ya3N0YXRpb24vaXdiLXdvcmtzdGF0aW9uLTIwMjUvQ2hpY2tlbkZhcm0vVUkvVkIuVlVFL3ZpdGUvcGx1Z2lucy9fYXV0by1pbXBvcnQudHNcIjtpbXBvcnQgQXV0b0ltcG9ydCBmcm9tIFwidW5wbHVnaW4tYXV0by1pbXBvcnQvdml0ZVwiXG5pbXBvcnQgQ29tcG9uZW50cyBmcm9tIFwidW5wbHVnaW4tdnVlLWNvbXBvbmVudHMvdml0ZVwiXG5pbXBvcnQgSWNvbnNSZXNvbHZlciBmcm9tIFwidW5wbHVnaW4taWNvbnMvcmVzb2x2ZXJcIlxuaW1wb3J0IHsgRWxlbWVudFBsdXNSZXNvbHZlciB9IGZyb20gXCJ1bnBsdWdpbi12dWUtY29tcG9uZW50cy9yZXNvbHZlcnNcIlxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjcmVhdGVBdXRvSW1wb3J0KCkge1xuXHRyZXR1cm4gW1xuXHRcdEF1dG9JbXBvcnQoe1xuXHRcdFx0aW1wb3J0czogW1widnVlXCIsIFwidnVlLXJvdXRlclwiLCBcIkB2dWV1c2UvY29yZVwiLCBcInBpbmlhXCJdLFxuXHRcdFx0Ly8gcGx1c1x1NjMwOVx1OTcwMFx1NUYxNVx1NTE2NVxuXHRcdFx0cmVzb2x2ZXJzOiBbXG5cdFx0XHRcdEVsZW1lbnRQbHVzUmVzb2x2ZXIoKSxcblx0XHRcdFx0SWNvbnNSZXNvbHZlcih7XG5cdFx0XHRcdFx0cHJlZml4OiBcIkljb25cIlxuXHRcdFx0XHR9KVxuXHRcdFx0XSxcblx0XHRcdGRpcnM6IFtcInNyYy9jb3JlL3V0aWxzXCIsIFwic3JjL2NvcmUvc2VydmljZXNcIiwgXCJzcmMvY29yZS91c2VcIiwgXCJzcmMvY29yZS9lbnVtc1wiXSxcblx0XHRcdGR0czogXCJ2aXRlL2F1dG8taW1wb3J0L2F1dG8taW1wb3J0LmQudHNcIixcblx0XHRcdGVzbGludHJjOiB7XG5cdFx0XHRcdGVuYWJsZWQ6IHRydWUsXG5cdFx0XHRcdGZpbGVwYXRoOiBcInZpdGUvYXV0by1pbXBvcnQvLmVzbGludHJjLWF1dG8taW1wb3J0Lmpzb25cIixcblx0XHRcdFx0Z2xvYmFsc1Byb3BWYWx1ZTogdHJ1ZVxuXHRcdFx0fVxuXHRcdH0pLFxuXHRcdC8vIHBsdXNcdTYzMDlcdTk3MDBcdTVGMTVcdTUxNjVcblx0XHRDb21wb25lbnRzKHtcblx0XHRcdHJlc29sdmVyczogW1xuXHRcdFx0XHRFbGVtZW50UGx1c1Jlc29sdmVyKCksXG5cdFx0XHRcdC8vIFx1ODFFQVx1NTJBOFx1NkNFOFx1NTE4Q1x1NTZGRVx1NjgwN1x1N0VDNFx1NEVGNlxuXHRcdFx0XHRJY29uc1Jlc29sdmVyKHtcblx0XHRcdFx0XHRwcmVmaXg6IFwiSWNvblwiXG5cdFx0XHRcdFx0Ly9lbmFibGVkQ29sbGVjdGlvbnM6IFtcImVwXCIsIFwibWRpXCIsIFwiU2ltcGxlIEljb25zXCJdXG5cdFx0XHRcdH0pXG5cdFx0XHRdLFxuXHRcdFx0Ly8gXHU2MzA3XHU1QjlBXHU3RUM0XHU0RUY2XHU0RjREXHU3RjZFXHVGRjBDXHU5RUQ4XHU4QkE0XHU2NjJGc3JjL2NvbXBvbmVudHNcblx0XHRcdGRpcnM6IFtcInNyYy9jb21wb25lbnRzXCJdLFxuXHRcdFx0Ly8gXHU3RUM0XHU0RUY2XHU3Njg0XHU2NzA5XHU2NTQ4XHU2NTg3XHU0RUY2XHU2MjY5XHU1QzU1XHU1NDBEXHUzMDAyXG5cdFx0XHRleHRlbnNpb25zOiBbXCJ2dWVcIl0sXG5cdFx0XHQvLyBcdTY0MUNcdTdEMjJcdTVCNTBcdTc2RUVcdTVGNTVcblx0XHRcdGRlZXA6IHRydWUsXG5cdFx0XHRkdHM6IFwidml0ZS9hdXRvLWltcG9ydC9jb21wb25lbnRzLmQudHNcIlxuXHRcdH0pXG5cdF1cbn1cbiIsICJjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfZGlybmFtZSA9IFwiRDpcXFxcd29ya3N0YXRpb25cXFxcaXdiLXdvcmtzdGF0aW9uLTIwMjVcXFxcQ2hpY2tlbkZhcm1cXFxcVUlcXFxcVkIuVlVFXFxcXHZpdGVcXFxccGx1Z2luc1wiO2NvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9maWxlbmFtZSA9IFwiRDpcXFxcd29ya3N0YXRpb25cXFxcaXdiLXdvcmtzdGF0aW9uLTIwMjVcXFxcQ2hpY2tlbkZhcm1cXFxcVUlcXFxcVkIuVlVFXFxcXHZpdGVcXFxccGx1Z2luc1xcXFxfc2V0dXAtZXh0ZW5kLnRzXCI7Y29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2ltcG9ydF9tZXRhX3VybCA9IFwiZmlsZTovLy9EOi93b3Jrc3RhdGlvbi9pd2Itd29ya3N0YXRpb24tMjAyNS9DaGlja2VuRmFybS9VSS9WQi5WVUUvdml0ZS9wbHVnaW5zL19zZXR1cC1leHRlbmQudHNcIjtpbXBvcnQgc2V0dXBFeHRlbmQgZnJvbSBcInZpdGUtcGx1Z2luLXZ1ZS1zZXR1cC1leHRlbmRcIlxuLy8gXHU2QjY0XHU2M0QyXHU0RUY2XHU1M0VGXHU0RUU1XHU1NzI4IFx1NEY3Rlx1NzUyOHNldHVwXHU4QkVEXHU2Q0Q1XHU3Q0Q2XHU3Njg0XHU2NUY2XHU1MDE5XHU3NkY0XHU2M0E1XHU0RTNBXHU3RUM0XHU0RUY2XHU1QjlBXHU0RTQ5bmFtZVxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY3JlYXRlU2V0dXBFeHRlbmQoKSB7XG5cdHJldHVybiBzZXR1cEV4dGVuZCgpXG59XG4iLCAiY29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2Rpcm5hbWUgPSBcIkQ6XFxcXHdvcmtzdGF0aW9uXFxcXGl3Yi13b3Jrc3RhdGlvbi0yMDI1XFxcXENoaWNrZW5GYXJtXFxcXFVJXFxcXFZCLlZVRVxcXFx2aXRlXFxcXHBsdWdpbnNcIjtjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfZmlsZW5hbWUgPSBcIkQ6XFxcXHdvcmtzdGF0aW9uXFxcXGl3Yi13b3Jrc3RhdGlvbi0yMDI1XFxcXENoaWNrZW5GYXJtXFxcXFVJXFxcXFZCLlZVRVxcXFx2aXRlXFxcXHBsdWdpbnNcXFxcX2ljb25zLnRzXCI7Y29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2ltcG9ydF9tZXRhX3VybCA9IFwiZmlsZTovLy9EOi93b3Jrc3RhdGlvbi9pd2Itd29ya3N0YXRpb24tMjAyNS9DaGlja2VuRmFybS9VSS9WQi5WVUUvdml0ZS9wbHVnaW5zL19pY29ucy50c1wiO2ltcG9ydCBJY29ucyBmcm9tIFwidW5wbHVnaW4taWNvbnMvdml0ZVwiXG5cbmV4cG9ydCBkZWZhdWx0ICgpID0+IHtcblx0cmV0dXJuIEljb25zKHtcblx0XHQvLyBcdTgxRUFcdTUyQThcdTVCODlcdTg4QzVcdTU2RkVcdTY4MDdcdTVFOTNcblx0XHRhdXRvSW5zdGFsbDogdHJ1ZVxuXHR9KVxufVxuIiwgImNvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9kaXJuYW1lID0gXCJEOlxcXFx3b3Jrc3RhdGlvblxcXFxpd2Itd29ya3N0YXRpb24tMjAyNVxcXFxDaGlja2VuRmFybVxcXFxVSVxcXFxWQi5WVUVcXFxcdml0ZVxcXFxwbHVnaW5zXCI7Y29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2ZpbGVuYW1lID0gXCJEOlxcXFx3b3Jrc3RhdGlvblxcXFxpd2Itd29ya3N0YXRpb24tMjAyNVxcXFxDaGlja2VuRmFybVxcXFxVSVxcXFxWQi5WVUVcXFxcdml0ZVxcXFxwbHVnaW5zXFxcXF9zdmctaWNvbi50c1wiO2NvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9pbXBvcnRfbWV0YV91cmwgPSBcImZpbGU6Ly8vRDovd29ya3N0YXRpb24vaXdiLXdvcmtzdGF0aW9uLTIwMjUvQ2hpY2tlbkZhcm0vVUkvVkIuVlVFL3ZpdGUvcGx1Z2lucy9fc3ZnLWljb24udHNcIjtpbXBvcnQgeyBjcmVhdGVTdmdJY29uc1BsdWdpbiB9IGZyb20gXCJ2aXRlLXBsdWdpbi1zdmctaWNvbnNcIlxuaW1wb3J0IHBhdGggZnJvbSBcInBhdGhcIlxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjcmVhdGVTdmdJY29uKGlzQnVpbGQ6IGJvb2xlYW4pIHtcblx0cmV0dXJuIGNyZWF0ZVN2Z0ljb25zUGx1Z2luKHtcblx0XHRpY29uRGlyczogW3BhdGgucmVzb2x2ZShwYXRoLnJlc29sdmUoX19kaXJuYW1lLCBcIi4uLy4uL3NyY1wiKSwgXCJhc3NldHMvaWNvbnMvc3ZnXCIpXSxcblx0XHRzeW1ib2xJZDogXCJpY29uLVtkaXJdLVtuYW1lXVwiLFxuXHRcdHN2Z29PcHRpb25zOiBpc0J1aWxkXG5cdH0pXG59XG4iLCAiY29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2Rpcm5hbWUgPSBcIkQ6XFxcXHdvcmtzdGF0aW9uXFxcXGl3Yi13b3Jrc3RhdGlvbi0yMDI1XFxcXENoaWNrZW5GYXJtXFxcXFVJXFxcXFZCLlZVRVxcXFx2aXRlXFxcXHBsdWdpbnNcIjtjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfZmlsZW5hbWUgPSBcIkQ6XFxcXHdvcmtzdGF0aW9uXFxcXGl3Yi13b3Jrc3RhdGlvbi0yMDI1XFxcXENoaWNrZW5GYXJtXFxcXFVJXFxcXFZCLlZVRVxcXFx2aXRlXFxcXHBsdWdpbnNcXFxcX2NvbXByZXNzaW9uLnRzXCI7Y29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2ltcG9ydF9tZXRhX3VybCA9IFwiZmlsZTovLy9EOi93b3Jrc3RhdGlvbi9pd2Itd29ya3N0YXRpb24tMjAyNS9DaGlja2VuRmFybS9VSS9WQi5WVUUvdml0ZS9wbHVnaW5zL19jb21wcmVzc2lvbi50c1wiO2ltcG9ydCBjb21wcmVzc2lvbiBmcm9tIFwidml0ZS1wbHVnaW4tY29tcHJlc3Npb25cIlxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjcmVhdGVDb21wcmVzc2lvbihlbnY6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4pIHtcblx0Y29uc3QgeyBWSVRFX0JVSUxEX0NPTVBSRVNTIH0gPSBlbnZcblx0Y29uc3QgcGx1Z2luID0gW11cblx0aWYgKFZJVEVfQlVJTERfQ09NUFJFU1MgIT0gXCJcIikge1xuXHRcdGNvbnN0IGNvbXByZXNzTGlzdCA9IFZJVEVfQlVJTERfQ09NUFJFU1Muc3BsaXQoXCIsXCIpXG5cdFx0aWYgKGNvbXByZXNzTGlzdC5pbmNsdWRlcyhcImd6aXBcIikpIHtcblx0XHRcdHBsdWdpbi5wdXNoKFxuXHRcdFx0XHRjb21wcmVzc2lvbih7XG5cdFx0XHRcdFx0ZXh0OiBcIi5nelwiLFxuXHRcdFx0XHRcdGRlbGV0ZU9yaWdpbkZpbGU6IGZhbHNlXG5cdFx0XHRcdH0pXG5cdFx0XHQpXG5cdFx0fVxuXHRcdGlmIChjb21wcmVzc0xpc3QuaW5jbHVkZXMoXCJicm90bGlcIikpIHtcblx0XHRcdHBsdWdpbi5wdXNoKFxuXHRcdFx0XHRjb21wcmVzc2lvbih7XG5cdFx0XHRcdFx0ZXh0OiBcIi5iclwiLFxuXHRcdFx0XHRcdGFsZ29yaXRobTogXCJicm90bGlDb21wcmVzc1wiLFxuXHRcdFx0XHRcdGRlbGV0ZU9yaWdpbkZpbGU6IGZhbHNlXG5cdFx0XHRcdH0pXG5cdFx0XHQpXG5cdFx0fVxuXHR9XG5cdHJldHVybiBwbHVnaW5cbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7QUFBeVcsU0FBUyxjQUFjLGVBQWU7QUFDL1ksU0FBUyxlQUFlOzs7QUNEZ1gsT0FBTyxTQUFTOzs7QUNBRixPQUFPLGdCQUFnQjtBQUM3YSxPQUFPLGdCQUFnQjtBQUN2QixPQUFPLG1CQUFtQjtBQUMxQixTQUFTLDJCQUEyQjtBQUVyQixTQUFSLG1CQUFvQztBQUMxQyxTQUFPO0FBQUEsSUFDTixXQUFXO0FBQUEsTUFDVixTQUFTLENBQUMsT0FBTyxjQUFjLGdCQUFnQixPQUFPO0FBQUE7QUFBQSxNQUV0RCxXQUFXO0FBQUEsUUFDVixvQkFBb0I7QUFBQSxRQUNwQixjQUFjO0FBQUEsVUFDYixRQUFRO0FBQUEsUUFDVCxDQUFDO0FBQUEsTUFDRjtBQUFBLE1BQ0EsTUFBTSxDQUFDLGtCQUFrQixxQkFBcUIsZ0JBQWdCLGdCQUFnQjtBQUFBLE1BQzlFLEtBQUs7QUFBQSxNQUNMLFVBQVU7QUFBQSxRQUNULFNBQVM7QUFBQSxRQUNULFVBQVU7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QUFBLFVBRXhCLFFBQVEsSUFBSTtBQUFBLFVBQ1osY0FBYztBQUFBLFVBQ2QsU0FBUyxDQUFDRSxVQUFTQSxNQUFLLFFBQVEsSUFBSSxPQUFPLE1BQU0sSUFBSSxpQkFBaUIsR0FBRyxFQUFFO0FBQUEsUUFDNUU7QUFBQSxNQUNEO0FBQUEsSUFDRDtBQUFBLElBQ0EsU0FBUztBQUFBLE1BQ1IsTUFBTTtBQUFBO0FBQUEsTUFFTixNQUFNO0FBQUE7QUFBQSxNQUVOLEtBQUs7QUFBQTtBQUFBLE1BRUwsWUFBWTtBQUFBLE1BQ1osTUFBTTtBQUFBLE1BQ04sTUFBTTtBQUFBLE1BQ04sT0FBTztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQU1OLGFBQWE7QUFBQSxVQUNaLFFBQVE7QUFBQSxVQUNSLGNBQWM7QUFBQSxVQUNkLFNBQVMsQ0FBQyxNQUFNLEVBQUUsUUFBUSxlQUFlLEVBQUU7QUFBQSxRQUM1QztBQUFBLE1BQ0Q7QUFBQSxJQUNEO0FBQUE7QUFBQSxJQUVBLGNBQWM7QUFBQSxNQUNiLFNBQVM7QUFBQSxRQUNSO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxNQUNEO0FBQUEsSUFDRDtBQUFBLEVBQ0Q7QUFDRCxDQUFDOyIsCiAgIm5hbWVzIjogWyJfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfZGlybmFtZSIsICJfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfZGlybmFtZSIsICJfYSIsICJwYXRoIl0KfQo=