every-plugin 0.4.4 → 0.4.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (123) hide show
  1. package/dist/build/rspack/index.cjs +300 -0
  2. package/dist/build/rspack/index.d.cts +20 -0
  3. package/dist/build/rspack/index.d.mts +20 -0
  4. package/dist/build/rspack/index.mjs +298 -0
  5. package/dist/chunk-QQAxy9l9.mjs +31 -0
  6. package/dist/chunk-zltIcp7o.cjs +46 -0
  7. package/dist/effect.cjs +9 -0
  8. package/dist/effect.d.cts +1 -0
  9. package/dist/effect.d.mts +1 -0
  10. package/dist/effect.mjs +3 -0
  11. package/dist/errors-CVnoPl9v.cjs +68 -0
  12. package/dist/errors-Car4tFVP.d.mts +75 -0
  13. package/dist/errors-D7keKf7a.mjs +63 -0
  14. package/dist/errors-DKPPPYYT.d.cts +75 -0
  15. package/dist/errors.cjs +4 -0
  16. package/dist/errors.d.cts +3 -0
  17. package/dist/errors.d.mts +3 -0
  18. package/dist/errors.mjs +4 -0
  19. package/dist/fetch-Cc95-7kM.cjs +336 -0
  20. package/dist/fetch-KLktuWuM.mjs +335 -0
  21. package/dist/index-bwAhA9ca.d.mts +383 -0
  22. package/dist/index-matrPV4m.d.cts +382 -0
  23. package/dist/index.cjs +57 -0
  24. package/dist/index.d.cts +5 -0
  25. package/dist/index.d.mts +5 -0
  26. package/dist/index.mjs +52 -0
  27. package/dist/{runtime/services/normalize.d.ts → normalize-BLTyqFww.d.mts} +5 -2
  28. package/dist/{runtime/services/normalize.js → normalize-BW7kk8Lk.d.cts} +5 -1
  29. package/dist/normalize-D4Qh0wVk.cjs +28 -0
  30. package/dist/normalize-D7nae0Hn.mjs +22 -0
  31. package/dist/openapi.DrTcell5-C6kyDyUK.mjs +669 -0
  32. package/dist/openapi.DrTcell5-DDf4D5V3.cjs +687 -0
  33. package/dist/orpc.cjs +46 -0
  34. package/dist/orpc.d.cts +7 -0
  35. package/dist/orpc.d.mts +7 -0
  36. package/dist/orpc.mjs +11 -0
  37. package/dist/package-CmegWGdE.cjs +154 -0
  38. package/dist/package-Dn-xZ55N.mjs +149 -0
  39. package/dist/plugins-C-7lh5gK.cjs +128 -0
  40. package/dist/plugins-Ps5Xxpk2.mjs +128 -0
  41. package/dist/runtime/index.cjs +6 -0
  42. package/dist/runtime/index.d.cts +5 -0
  43. package/dist/runtime/index.d.mts +5 -0
  44. package/dist/runtime/index.mjs +5 -0
  45. package/dist/runtime/services/normalize.cjs +3 -0
  46. package/dist/runtime/services/normalize.d.cts +2 -0
  47. package/dist/runtime/services/normalize.d.mts +2 -0
  48. package/dist/runtime/services/normalize.mjs +3 -0
  49. package/dist/runtime-CgRUExK3.cjs +523 -0
  50. package/dist/runtime-Da2NjzYy.mjs +458 -0
  51. package/dist/standard-DaxKTFui.mjs +595 -0
  52. package/dist/standard-eUgUkWaf.cjs +702 -0
  53. package/dist/testing/index.cjs +78 -0
  54. package/dist/testing/index.d.cts +60 -0
  55. package/dist/testing/index.d.mts +60 -0
  56. package/dist/testing/index.mjs +75 -0
  57. package/dist/zod-A7Pti5IV.d.cts +4 -0
  58. package/dist/zod-BVo51kgJ.mjs +10 -0
  59. package/dist/zod-D4CFw8d9.d.mts +4 -0
  60. package/dist/zod-DYghWCz1.cjs +14 -0
  61. package/dist/zod.cjs +10 -0
  62. package/dist/zod.d.cts +2 -0
  63. package/dist/zod.d.mts +2 -0
  64. package/dist/zod.mjs +5 -0
  65. package/dist/zod4-BXTBR1od.cjs +318 -0
  66. package/dist/zod4-VpXuwRO7.mjs +317 -0
  67. package/package.json +64 -23
  68. package/dist/effect.d.ts +0 -2
  69. package/dist/effect.d.ts.map +0 -1
  70. package/dist/effect.js +0 -1
  71. package/dist/errors.d.ts +0 -70
  72. package/dist/errors.d.ts.map +0 -1
  73. package/dist/errors.js +0 -61
  74. package/dist/index.d.ts +0 -6
  75. package/dist/index.d.ts.map +0 -1
  76. package/dist/index.js +0 -5
  77. package/dist/orpc.d.ts +0 -10
  78. package/dist/orpc.d.ts.map +0 -1
  79. package/dist/orpc.js +0 -6
  80. package/dist/plugin.d.ts +0 -57
  81. package/dist/plugin.d.ts.map +0 -1
  82. package/dist/plugin.js +0 -43
  83. package/dist/runtime/errors.d.ts +0 -36
  84. package/dist/runtime/errors.d.ts.map +0 -1
  85. package/dist/runtime/errors.js +0 -47
  86. package/dist/runtime/index.d.ts +0 -20
  87. package/dist/runtime/index.d.ts.map +0 -1
  88. package/dist/runtime/index.js +0 -131
  89. package/dist/runtime/services/module-federation.service.d.ts +0 -13
  90. package/dist/runtime/services/module-federation.service.d.ts.map +0 -1
  91. package/dist/runtime/services/module-federation.service.js +0 -155
  92. package/dist/runtime/services/normalize.d.ts.map +0 -1
  93. package/dist/runtime/services/plugin-lifecycle.service.d.ts +0 -14
  94. package/dist/runtime/services/plugin-lifecycle.service.d.ts.map +0 -1
  95. package/dist/runtime/services/plugin-lifecycle.service.js +0 -34
  96. package/dist/runtime/services/plugin-loader.service.d.ts +0 -45
  97. package/dist/runtime/services/plugin-loader.service.d.ts.map +0 -1
  98. package/dist/runtime/services/plugin-loader.service.js +0 -93
  99. package/dist/runtime/services/plugin.service.d.ts +0 -36
  100. package/dist/runtime/services/plugin.service.d.ts.map +0 -1
  101. package/dist/runtime/services/plugin.service.js +0 -31
  102. package/dist/runtime/services/secrets.service.d.ts +0 -15
  103. package/dist/runtime/services/secrets.service.d.ts.map +0 -1
  104. package/dist/runtime/services/secrets.service.js +0 -35
  105. package/dist/runtime/services.d.ts +0 -6
  106. package/dist/runtime/services.d.ts.map +0 -1
  107. package/dist/runtime/services.js +0 -5
  108. package/dist/runtime/validation.d.ts +0 -5
  109. package/dist/runtime/validation.d.ts.map +0 -1
  110. package/dist/runtime/validation.js +0 -13
  111. package/dist/testing/index.d.ts +0 -59
  112. package/dist/testing/index.d.ts.map +0 -1
  113. package/dist/testing/index.js +0 -45
  114. package/dist/testing/mocks/module-federation.service.d.ts +0 -6
  115. package/dist/testing/mocks/module-federation.service.d.ts.map +0 -1
  116. package/dist/testing/mocks/module-federation.service.js +0 -29
  117. package/dist/tsconfig.tsbuildinfo +0 -1
  118. package/dist/types.d.ts +0 -187
  119. package/dist/types.d.ts.map +0 -1
  120. package/dist/types.js +0 -1
  121. package/dist/zod.d.ts +0 -2
  122. package/dist/zod.d.ts.map +0 -1
  123. package/dist/zod.js +0 -1
@@ -0,0 +1,300 @@
1
+ const require_chunk = require('../../chunk-zltIcp7o.cjs');
2
+ const require_normalize = require('../../normalize-D4Qh0wVk.cjs');
3
+ const require_package$1 = require('../../package-CmegWGdE.cjs');
4
+ let __rspack_core = require("@rspack/core");
5
+ let node_path = require("node:path");
6
+ node_path = require_chunk.__toESM(node_path);
7
+ let node_fs = require("node:fs");
8
+ node_fs = require_chunk.__toESM(node_fs);
9
+
10
+ //#region src/build/rspack/utils.ts
11
+ function getPluginInfo(context) {
12
+ const pkgPath = node_path.default.join(context, "package.json");
13
+ const pkg = JSON.parse(node_fs.default.readFileSync(pkgPath, "utf-8"));
14
+ return {
15
+ name: pkg.name,
16
+ version: pkg.version,
17
+ normalizedName: require_normalize.getNormalizedRemoteName(pkg.name),
18
+ dependencies: pkg.dependencies || {},
19
+ peerDependencies: pkg.peerDependencies || {}
20
+ };
21
+ }
22
+ const loadedModules = /* @__PURE__ */ new Set();
23
+ function loadDevConfig(devConfigPath) {
24
+ try {
25
+ const fullPath = node_path.default.resolve(devConfigPath);
26
+ if (loadedModules.has(fullPath)) {
27
+ delete require.cache[fullPath];
28
+ const dirPath = node_path.default.dirname(fullPath);
29
+ for (const key of Object.keys(require.cache)) if (key.startsWith(dirPath) && key !== fullPath) delete require.cache[key];
30
+ }
31
+ const module$1 = require(fullPath).default;
32
+ loadedModules.add(fullPath);
33
+ return module$1;
34
+ } catch (error) {
35
+ console.warn(`Could not load dev config from ${devConfigPath}:`, error.message);
36
+ return null;
37
+ }
38
+ }
39
+
40
+ //#endregion
41
+ //#region src/build/rspack/module-federation.ts
42
+ function buildSharedDependencies(pluginInfo) {
43
+ const everyPluginPkg = require_package$1.require_package();
44
+ return {
45
+ "every-plugin": {
46
+ version: everyPluginPkg.version,
47
+ singleton: true,
48
+ requiredVersion: `${everyPluginPkg.version}`,
49
+ strictVersion: false,
50
+ eager: false
51
+ },
52
+ effect: {
53
+ version: everyPluginPkg.dependencies.effect,
54
+ singleton: true,
55
+ requiredVersion: `${everyPluginPkg.dependencies.effect}`,
56
+ strictVersion: false,
57
+ eager: false
58
+ },
59
+ zod: {
60
+ version: everyPluginPkg.dependencies.zod,
61
+ singleton: true,
62
+ requiredVersion: `${everyPluginPkg.dependencies.zod}`,
63
+ strictVersion: false,
64
+ eager: false
65
+ },
66
+ "@orpc/contract": {
67
+ version: everyPluginPkg.dependencies["@orpc/contract"],
68
+ singleton: true,
69
+ requiredVersion: `${everyPluginPkg.dependencies["@orpc/contract"]}`,
70
+ strictVersion: false,
71
+ eager: false
72
+ },
73
+ "@orpc/server": {
74
+ version: everyPluginPkg.dependencies["@orpc/server"],
75
+ singleton: true,
76
+ requiredVersion: `${everyPluginPkg.dependencies["@orpc/server"]}`,
77
+ strictVersion: false,
78
+ eager: false
79
+ }
80
+ };
81
+ }
82
+
83
+ //#endregion
84
+ //#region src/build/rspack/dev-server-middleware.ts
85
+ function setupPluginMiddleware(devServer, pluginInfo, devConfig, port) {
86
+ let handlers = {
87
+ rpc: null,
88
+ api: null
89
+ };
90
+ let cleanup = null;
91
+ const performCleanup = async () => {
92
+ if (cleanup) {
93
+ await cleanup();
94
+ cleanup = null;
95
+ }
96
+ };
97
+ (async () => {
98
+ await performCleanup();
99
+ try {
100
+ const { createPluginRuntime } = await Promise.resolve().then(() => require("../../index.cjs"));
101
+ const { RPCHandler } = await import("@orpc/server/fetch");
102
+ const { onError } = await import("@orpc/server");
103
+ const { OpenAPIHandler } = await Promise.resolve().then(() => require("../../fetch-Cc95-7kM.cjs"));
104
+ const { OpenAPIReferencePlugin } = await Promise.resolve().then(() => require("../../plugins-C-7lh5gK.cjs"));
105
+ const { ZodToJsonSchemaConverter } = await Promise.resolve().then(() => require("../../zod4-BXTBR1od.cjs"));
106
+ const pluginId = devConfig?.pluginId || pluginInfo.normalizedName;
107
+ const runtime = createPluginRuntime({ registry: { [pluginId]: { remoteUrl: `http://localhost:${port}/remoteEntry.js` } } });
108
+ const loaded = await runtime.usePlugin(pluginId, devConfig?.config);
109
+ cleanup = async () => {
110
+ if (loaded && typeof loaded.dispose === "function") await loaded.dispose();
111
+ if (runtime && typeof runtime.cleanup === "function") await runtime.cleanup();
112
+ handlers.rpc = null;
113
+ handlers.api = null;
114
+ if (devServer.app.locals.handlers) devServer.app.locals.handlers = null;
115
+ };
116
+ handlers.rpc = new RPCHandler(loaded.router, { interceptors: [onError((error) => {
117
+ console.error("🔴 RPC Error:", error);
118
+ })] });
119
+ handlers.api = new OpenAPIHandler(loaded.router, {
120
+ plugins: [new OpenAPIReferencePlugin({ schemaConverters: [new ZodToJsonSchemaConverter()] })],
121
+ interceptors: [onError((error) => {
122
+ console.error("🔴 OpenAPI Error:", error);
123
+ })]
124
+ });
125
+ console.log(`╭─────────────────────────────────────────────`);
126
+ console.log(`│ ✅ Plugin dev server ready: `);
127
+ console.log(`├─────────────────────────────────────────────`);
128
+ console.log(`│ 📡 RPC: http://localhost:${port}/api/rpc`);
129
+ console.log(`│ 📖 Docs: http://localhost:${port}/api`);
130
+ console.log(`│ 💚 Health: http://localhost:${port}/`);
131
+ console.log(`╰─────────────────────────────────────────────`);
132
+ devServer.app.locals.handlers = handlers;
133
+ if (devServer.server) devServer.server.once("close", async () => {
134
+ await performCleanup();
135
+ });
136
+ } catch (error) {
137
+ console.error("❌ Failed to load plugin:", error);
138
+ await performCleanup();
139
+ }
140
+ })();
141
+ process.once("SIGINT", async () => {
142
+ await performCleanup();
143
+ });
144
+ process.once("SIGTERM", async () => {
145
+ await performCleanup();
146
+ });
147
+ devServer.app.get("/", (req, res) => {
148
+ res.json({
149
+ ok: true,
150
+ plugin: pluginInfo.normalizedName,
151
+ version: pluginInfo.version,
152
+ status: devServer.app.locals.handlers?.rpc ? "ready" : "loading",
153
+ endpoints: {
154
+ health: "/",
155
+ docs: "/api",
156
+ rpc: "/api/rpc"
157
+ }
158
+ });
159
+ });
160
+ const handleApiRequest = async (req, res) => {
161
+ const apiHandler = devServer.app.locals.handlers?.api;
162
+ if (!apiHandler) return res.status(503).json({ error: "Plugin still loading..." });
163
+ try {
164
+ const url = `http://${req.headers.host}${req.url}`;
165
+ const webRequest = new Request(url, {
166
+ method: req.method,
167
+ headers: req.headers,
168
+ body: req.method !== "GET" && req.method !== "HEAD" ? req : void 0
169
+ });
170
+ const result = await apiHandler.handle(webRequest, {
171
+ prefix: "/api",
172
+ context: {}
173
+ });
174
+ if (result.response) {
175
+ res.status(result.response.status);
176
+ result.response.headers.forEach((value, key) => {
177
+ res.setHeader(key, value);
178
+ });
179
+ const text = await result.response.text();
180
+ res.send(text);
181
+ } else res.status(404).send("Not Found");
182
+ } catch (error) {
183
+ console.error("OpenAPI error:", error);
184
+ res.status(500).json({ error: error.message });
185
+ }
186
+ };
187
+ devServer.app.all("/api", handleApiRequest);
188
+ devServer.app.all("/api/*", handleApiRequest);
189
+ devServer.app.all("/api/rpc/*", async (req, res) => {
190
+ const rpcHandler = devServer.app.locals.handlers?.rpc;
191
+ if (!rpcHandler) return res.status(503).json({ error: "Plugin still loading..." });
192
+ try {
193
+ const url = `http://${req.headers.host}${req.url}`;
194
+ const webRequest = new Request(url, {
195
+ method: req.method,
196
+ headers: req.headers,
197
+ body: req.method !== "GET" && req.method !== "HEAD" ? req : void 0
198
+ });
199
+ const result = await rpcHandler.handle(webRequest, {
200
+ prefix: "/api/rpc",
201
+ context: {}
202
+ });
203
+ if (result.response) {
204
+ res.status(result.response.status);
205
+ result.response.headers.forEach((value, key) => {
206
+ res.setHeader(key, value);
207
+ });
208
+ const text = await result.response.text();
209
+ res.send(text);
210
+ } else res.status(404).send("Not Found");
211
+ } catch (error) {
212
+ console.error("RPC error:", error);
213
+ res.status(500).json({ error: error.message });
214
+ }
215
+ });
216
+ }
217
+
218
+ //#endregion
219
+ //#region src/build/rspack/plugin.ts
220
+ var EveryPluginDevServer = class {
221
+ name = "EveryPluginDevServer";
222
+ constructor(options = {}) {
223
+ this.options = options;
224
+ }
225
+ apply(compiler) {
226
+ const pluginInfo = getPluginInfo(compiler.options.context || process.cwd());
227
+ const devConfig = loadDevConfig(this.options.devConfigPath || "./plugin.dev.ts");
228
+ const port = this.options.port || devConfig?.port || 3999;
229
+ this.configureDefaults(compiler, pluginInfo);
230
+ if (!compiler.options.devServer) compiler.options.devServer = {};
231
+ this.configureDevServer(compiler, pluginInfo, devConfig, port);
232
+ new __rspack_core.rspack.container.ModuleFederationPlugin({
233
+ name: pluginInfo.normalizedName,
234
+ filename: "remoteEntry.js",
235
+ runtimePlugins: [require.resolve("@module-federation/node/runtimePlugin")],
236
+ library: { type: "commonjs-module" },
237
+ exposes: { "./plugin": "./src/index.ts" },
238
+ shared: buildSharedDependencies(pluginInfo)
239
+ }).apply(compiler);
240
+ }
241
+ configureDefaults(compiler, pluginInfo) {
242
+ const context = compiler.options.context || process.cwd();
243
+ if (!compiler.options.output) compiler.options.output = {};
244
+ compiler.options.output.uniqueName = pluginInfo.normalizedName;
245
+ compiler.options.output.publicPath = "auto";
246
+ compiler.options.output.path = node_path.default.resolve(context, "dist");
247
+ compiler.options.output.clean = true;
248
+ compiler.options.output.library = { type: "commonjs-module" };
249
+ if (!compiler.options.entry) compiler.options.entry = { main: { import: ["./src/index"] } };
250
+ if (!compiler.options.target) compiler.options.target = "async-node";
251
+ if (!compiler.options.mode) compiler.options.mode = process.env.NODE_ENV === "development" ? "development" : "production";
252
+ if (!compiler.options.devtool) compiler.options.devtool = "source-map";
253
+ if (!compiler.options.infrastructureLogging) compiler.options.infrastructureLogging = { level: "warn" };
254
+ this.ensureTypeScriptLoader(compiler);
255
+ if (!compiler.options.resolve) compiler.options.resolve = {};
256
+ compiler.options.resolve.extensions = [
257
+ "...",
258
+ ".tsx",
259
+ ".ts"
260
+ ];
261
+ }
262
+ ensureTypeScriptLoader(compiler) {
263
+ if (!compiler.options.module) compiler.options.module = { rules: [] };
264
+ if (!compiler.options.module.rules) compiler.options.module.rules = [];
265
+ if (!compiler.options.module.rules.some((rule) => typeof rule === "object" && rule !== null && "test" in rule && rule.test instanceof RegExp && rule.test.test(".ts"))) compiler.options.module.rules.push({
266
+ test: /\.tsx?$/,
267
+ use: "builtin:swc-loader",
268
+ exclude: /node_modules/
269
+ });
270
+ }
271
+ configureDevServer(compiler, pluginInfo, devConfig, port) {
272
+ if (!compiler.options.devServer) return;
273
+ const context = compiler.options.context || process.cwd();
274
+ const originalSetup = compiler.options.devServer.setupMiddlewares;
275
+ compiler.options.devServer.port = port;
276
+ compiler.options.devServer.static = node_path.default.join(context, "dist");
277
+ compiler.options.devServer.hot = true;
278
+ compiler.options.devServer.devMiddleware = { writeToDisk: true };
279
+ compiler.options.devServer.headers = {
280
+ "Access-Control-Allow-Origin": "*",
281
+ "Access-Control-Allow-Methods": "GET, POST, PUT, DELETE, PATCH, OPTIONS",
282
+ "Access-Control-Allow-Headers": "X-Requested-With, content-type, Authorization"
283
+ };
284
+ compiler.options.devServer.client = {
285
+ logging: "warn",
286
+ overlay: {
287
+ warnings: false,
288
+ errors: true
289
+ }
290
+ };
291
+ compiler.options.devServer.setupMiddlewares = (middlewares, devServer) => {
292
+ setupPluginMiddleware(devServer, pluginInfo, devConfig, port);
293
+ return originalSetup ? originalSetup(middlewares, devServer) : middlewares;
294
+ };
295
+ }
296
+ };
297
+
298
+ //#endregion
299
+ exports.EveryPluginDevServer = EveryPluginDevServer;
300
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguY2pzIiwibmFtZXMiOlsicGF0aCIsImZzIiwiZ2V0Tm9ybWFsaXplZFJlbW90ZU5hbWUiLCJtb2R1bGUiLCJoYW5kbGVyczogeyBycGM6IGFueSwgYXBpOiBhbnkgfSIsImNsZWFudXA6ICgoKSA9PiBQcm9taXNlPHZvaWQ+KSB8IG51bGwiLCJvcHRpb25zOiBFdmVyeVBsdWdpbk9wdGlvbnMiLCJyc3BhY2siLCJwYXRoIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2J1aWxkL3JzcGFjay91dGlscy50cyIsIi4uLy4uLy4uL3NyYy9idWlsZC9yc3BhY2svbW9kdWxlLWZlZGVyYXRpb24udHMiLCIuLi8uLi8uLi9zcmMvYnVpbGQvcnNwYWNrL2Rldi1zZXJ2ZXItbWlkZGxld2FyZS50cyIsIi4uLy4uLy4uL3NyYy9idWlsZC9yc3BhY2svcGx1Z2luLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBwYXRoIGZyb20gJ25vZGU6cGF0aCc7XG5pbXBvcnQgZnMgZnJvbSAnbm9kZTpmcyc7XG5pbXBvcnQgeyBnZXROb3JtYWxpemVkUmVtb3RlTmFtZSB9IGZyb20gJ2V2ZXJ5LXBsdWdpbi9ub3JtYWxpemUnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFBsdWdpbkluZm8ge1xuICBuYW1lOiBzdHJpbmc7XG4gIHZlcnNpb246IHN0cmluZztcbiAgbm9ybWFsaXplZE5hbWU6IHN0cmluZztcbiAgZGVwZW5kZW5jaWVzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICBwZWVyRGVwZW5kZW5jaWVzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UGx1Z2luSW5mbyhjb250ZXh0OiBzdHJpbmcpOiBQbHVnaW5JbmZvIHtcbiAgY29uc3QgcGtnUGF0aCA9IHBhdGguam9pbihjb250ZXh0LCAncGFja2FnZS5qc29uJyk7XG4gIGNvbnN0IHBrZyA9IEpTT04ucGFyc2UoZnMucmVhZEZpbGVTeW5jKHBrZ1BhdGgsICd1dGYtOCcpKTtcblxuICByZXR1cm4ge1xuICAgIG5hbWU6IHBrZy5uYW1lLFxuICAgIHZlcnNpb246IHBrZy52ZXJzaW9uLFxuICAgIG5vcm1hbGl6ZWROYW1lOiBnZXROb3JtYWxpemVkUmVtb3RlTmFtZShwa2cubmFtZSksXG4gICAgZGVwZW5kZW5jaWVzOiBwa2cuZGVwZW5kZW5jaWVzIHx8IHt9LFxuICAgIHBlZXJEZXBlbmRlbmNpZXM6IHBrZy5wZWVyRGVwZW5kZW5jaWVzIHx8IHt9LFxuICB9O1xufVxuXG5jb25zdCBsb2FkZWRNb2R1bGVzID0gbmV3IFNldDxzdHJpbmc+KCk7XG5cbmV4cG9ydCBmdW5jdGlvbiBsb2FkRGV2Q29uZmlnKGRldkNvbmZpZ1BhdGg6IHN0cmluZykge1xuICB0cnkge1xuICAgIGNvbnN0IGZ1bGxQYXRoID0gcGF0aC5yZXNvbHZlKGRldkNvbmZpZ1BhdGgpO1xuICAgIFxuICAgIGlmIChsb2FkZWRNb2R1bGVzLmhhcyhmdWxsUGF0aCkpIHtcbiAgICAgIGRlbGV0ZSByZXF1aXJlLmNhY2hlW2Z1bGxQYXRoXTtcbiAgICAgIGNvbnN0IGRpclBhdGggPSBwYXRoLmRpcm5hbWUoZnVsbFBhdGgpO1xuICAgICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMocmVxdWlyZS5jYWNoZSkpIHtcbiAgICAgICAgaWYgKGtleS5zdGFydHNXaXRoKGRpclBhdGgpICYmIGtleSAhPT0gZnVsbFBhdGgpIHtcbiAgICAgICAgICBkZWxldGUgcmVxdWlyZS5jYWNoZVtrZXldO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIFxuICAgIGNvbnN0IG1vZHVsZSA9IHJlcXVpcmUoZnVsbFBhdGgpLmRlZmF1bHQ7XG4gICAgbG9hZGVkTW9kdWxlcy5hZGQoZnVsbFBhdGgpO1xuICAgIHJldHVybiBtb2R1bGU7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgY29uc29sZS53YXJuKGBDb3VsZCBub3QgbG9hZCBkZXYgY29uZmlnIGZyb20gJHtkZXZDb25maWdQYXRofTpgLCAoZXJyb3IgYXMgRXJyb3IpLm1lc3NhZ2UpO1xuICAgIHJldHVybiBudWxsO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjbGVhbnVwRGV2Q29uZmlnKCkge1xuICBmb3IgKGNvbnN0IG1vZHVsZVBhdGggb2YgbG9hZGVkTW9kdWxlcykge1xuICAgIGRlbGV0ZSByZXF1aXJlLmNhY2hlW21vZHVsZVBhdGhdO1xuICB9XG4gIGxvYWRlZE1vZHVsZXMuY2xlYXIoKTtcbn1cbiIsImltcG9ydCB0eXBlIHsgUGx1Z2luSW5mbyB9IGZyb20gJy4vdXRpbHMnO1xuXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRTaGFyZWREZXBlbmRlbmNpZXMocGx1Z2luSW5mbzogUGx1Z2luSW5mbykge1xuICAvLyBHZXQgZXZlcnktcGx1Z2luIHBhY2thZ2UgaW5mbyBmb3IgdmVyc2lvbiBjb25zdHJhaW50c1xuICBjb25zdCBldmVyeVBsdWdpblBrZyA9IHJlcXVpcmUoJ2V2ZXJ5LXBsdWdpbi9wYWNrYWdlLmpzb24nKTtcblxuICByZXR1cm4ge1xuICAgICdldmVyeS1wbHVnaW4nOiB7XG4gICAgICB2ZXJzaW9uOiBldmVyeVBsdWdpblBrZy52ZXJzaW9uLFxuICAgICAgc2luZ2xldG9uOiB0cnVlLFxuICAgICAgcmVxdWlyZWRWZXJzaW9uOiBgJHtldmVyeVBsdWdpblBrZy52ZXJzaW9ufWAsXG4gICAgICBzdHJpY3RWZXJzaW9uOiBmYWxzZSxcbiAgICAgIGVhZ2VyOiBmYWxzZSxcbiAgICB9LFxuICAgIGVmZmVjdDoge1xuICAgICAgdmVyc2lvbjogZXZlcnlQbHVnaW5Qa2cuZGVwZW5kZW5jaWVzLmVmZmVjdCxcbiAgICAgIHNpbmdsZXRvbjogdHJ1ZSxcbiAgICAgIHJlcXVpcmVkVmVyc2lvbjogYCR7ZXZlcnlQbHVnaW5Qa2cuZGVwZW5kZW5jaWVzLmVmZmVjdH1gLFxuICAgICAgc3RyaWN0VmVyc2lvbjogZmFsc2UsXG4gICAgICBlYWdlcjogZmFsc2UsXG4gICAgfSxcbiAgICB6b2Q6IHtcbiAgICAgIHZlcnNpb246IGV2ZXJ5UGx1Z2luUGtnLmRlcGVuZGVuY2llcy56b2QsXG4gICAgICBzaW5nbGV0b246IHRydWUsXG4gICAgICByZXF1aXJlZFZlcnNpb246IGAke2V2ZXJ5UGx1Z2luUGtnLmRlcGVuZGVuY2llcy56b2R9YCxcbiAgICAgIHN0cmljdFZlcnNpb246IGZhbHNlLFxuICAgICAgZWFnZXI6IGZhbHNlLFxuICAgIH0sXG4gICAgJ0BvcnBjL2NvbnRyYWN0Jzoge1xuICAgICAgdmVyc2lvbjogZXZlcnlQbHVnaW5Qa2cuZGVwZW5kZW5jaWVzWydAb3JwYy9jb250cmFjdCddLFxuICAgICAgc2luZ2xldG9uOiB0cnVlLFxuICAgICAgcmVxdWlyZWRWZXJzaW9uOiBgJHtldmVyeVBsdWdpblBrZy5kZXBlbmRlbmNpZXNbJ0BvcnBjL2NvbnRyYWN0J119YCxcbiAgICAgIHN0cmljdFZlcnNpb246IGZhbHNlLFxuICAgICAgZWFnZXI6IGZhbHNlLFxuICAgIH0sXG4gICAgJ0BvcnBjL3NlcnZlcic6IHtcbiAgICAgIHZlcnNpb246IGV2ZXJ5UGx1Z2luUGtnLmRlcGVuZGVuY2llc1snQG9ycGMvc2VydmVyJ10sXG4gICAgICBzaW5nbGV0b246IHRydWUsXG4gICAgICByZXF1aXJlZFZlcnNpb246IGAke2V2ZXJ5UGx1Z2luUGtnLmRlcGVuZGVuY2llc1snQG9ycGMvc2VydmVyJ119YCxcbiAgICAgIHN0cmljdFZlcnNpb246IGZhbHNlLFxuICAgICAgZWFnZXI6IGZhbHNlLFxuICAgIH0sXG4gIH07XG59XG4iLCJpbXBvcnQgdHlwZSB7IFBsdWdpbkluZm8gfSBmcm9tICcuL3V0aWxzJztcblxuZXhwb3J0IGZ1bmN0aW9uIHNldHVwUGx1Z2luTWlkZGxld2FyZShkZXZTZXJ2ZXI6IGFueSwgcGx1Z2luSW5mbzogUGx1Z2luSW5mbywgZGV2Q29uZmlnOiBhbnksIHBvcnQ6IG51bWJlcikge1xuICBsZXQgaGFuZGxlcnM6IHsgcnBjOiBhbnksIGFwaTogYW55IH0gPSB7IHJwYzogbnVsbCwgYXBpOiBudWxsIH07XG4gIGxldCBjbGVhbnVwOiAoKCkgPT4gUHJvbWlzZTx2b2lkPikgfCBudWxsID0gbnVsbDtcblxuICBjb25zdCBwZXJmb3JtQ2xlYW51cCA9IGFzeW5jICgpID0+IHtcbiAgICBpZiAoY2xlYW51cCkge1xuICAgICAgYXdhaXQgY2xlYW51cCgpO1xuICAgICAgY2xlYW51cCA9IG51bGw7XG4gICAgfVxuICB9O1xuXG4gIChhc3luYyAoKSA9PiB7XG4gICAgYXdhaXQgcGVyZm9ybUNsZWFudXAoKTtcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCB7IGNyZWF0ZVBsdWdpblJ1bnRpbWUgfSA9IGF3YWl0IGltcG9ydCgnZXZlcnktcGx1Z2luJyk7XG4gICAgICBjb25zdCB7IFJQQ0hhbmRsZXIgfSA9IGF3YWl0IGltcG9ydCgnQG9ycGMvc2VydmVyL2ZldGNoJyk7XG4gICAgICBjb25zdCB7IG9uRXJyb3IgfSA9IGF3YWl0IGltcG9ydCgnQG9ycGMvc2VydmVyJyk7XG4gICAgICBjb25zdCB7IE9wZW5BUElIYW5kbGVyIH0gPSBhd2FpdCBpbXBvcnQoJ0BvcnBjL29wZW5hcGkvZmV0Y2gnKTtcbiAgICAgIGNvbnN0IHsgT3BlbkFQSVJlZmVyZW5jZVBsdWdpbiB9ID0gYXdhaXQgaW1wb3J0KCdAb3JwYy9vcGVuYXBpL3BsdWdpbnMnKTtcbiAgICAgIGNvbnN0IHsgWm9kVG9Kc29uU2NoZW1hQ29udmVydGVyIH0gPSBhd2FpdCBpbXBvcnQoJ0BvcnBjL3pvZC96b2Q0Jyk7XG5cbiAgICAgIGNvbnN0IHBsdWdpbklkID0gZGV2Q29uZmlnPy5wbHVnaW5JZCB8fCBwbHVnaW5JbmZvLm5vcm1hbGl6ZWROYW1lO1xuXG4gICAgICBjb25zdCBydW50aW1lID0gY3JlYXRlUGx1Z2luUnVudGltZSh7XG4gICAgICAgIHJlZ2lzdHJ5OiB7XG4gICAgICAgICAgW3BsdWdpbklkXToge1xuICAgICAgICAgICAgcmVtb3RlVXJsOiBgaHR0cDovL2xvY2FsaG9zdDoke3BvcnR9L3JlbW90ZUVudHJ5LmpzYFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IGxvYWRlZCA9IGF3YWl0IHJ1bnRpbWUudXNlUGx1Z2luKHBsdWdpbklkLCBkZXZDb25maWc/LmNvbmZpZyk7XG5cbiAgICAgIGNsZWFudXAgPSBhc3luYyAoKSA9PiB7XG4gICAgICAgIGlmIChsb2FkZWQgJiYgdHlwZW9mIChsb2FkZWQgYXMgYW55KS5kaXNwb3NlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgYXdhaXQgKGxvYWRlZCBhcyBhbnkpLmRpc3Bvc2UoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocnVudGltZSAmJiB0eXBlb2YgKHJ1bnRpbWUgYXMgYW55KS5jbGVhbnVwID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgYXdhaXQgKHJ1bnRpbWUgYXMgYW55KS5jbGVhbnVwKCk7XG4gICAgICAgIH1cbiAgICAgICAgaGFuZGxlcnMucnBjID0gbnVsbDtcbiAgICAgICAgaGFuZGxlcnMuYXBpID0gbnVsbDtcbiAgICAgICAgaWYgKGRldlNlcnZlci5hcHAubG9jYWxzLmhhbmRsZXJzKSB7XG4gICAgICAgICAgZGV2U2VydmVyLmFwcC5sb2NhbHMuaGFuZGxlcnMgPSBudWxsO1xuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIG5vIHR5cGVcbiAgICAgIGhhbmRsZXJzLnJwYyA9IG5ldyBSUENIYW5kbGVyKGxvYWRlZC5yb3V0ZXIsIHtcbiAgICAgICAgaW50ZXJjZXB0b3JzOiBbXG4gICAgICAgICAgb25FcnJvcigoZXJyb3I6IGFueSkgPT4ge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcign8J+UtCBSUEMgRXJyb3I6JywgZXJyb3IpO1xuICAgICAgICAgIH0pLFxuICAgICAgICBdXG4gICAgICB9KTtcblxuICAgICAgLy8gQ3JlYXRlIE9wZW5BUEkgaGFuZGxlciBmb3IgZG9jdW1lbnRhdGlvblxuICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciBubyB0eXBlXG4gICAgICBoYW5kbGVycy5hcGkgPSBuZXcgT3BlbkFQSUhhbmRsZXIobG9hZGVkLnJvdXRlciwge1xuICAgICAgICBwbHVnaW5zOiBbXG4gICAgICAgICAgbmV3IE9wZW5BUElSZWZlcmVuY2VQbHVnaW4oe1xuICAgICAgICAgICAgc2NoZW1hQ29udmVydGVyczogW25ldyBab2RUb0pzb25TY2hlbWFDb252ZXJ0ZXIoKV0sXG4gICAgICAgICAgfSksXG4gICAgICAgIF0sXG4gICAgICAgIGludGVyY2VwdG9yczogW1xuICAgICAgICAgIG9uRXJyb3IoKGVycm9yOiBhbnkpID0+IHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ/CflLQgT3BlbkFQSSBFcnJvcjonLCBlcnJvcik7XG4gICAgICAgICAgfSksXG4gICAgICAgIF1cbiAgICAgIH0pO1xuXG4gICAgICBjb25zb2xlLmxvZyhg4pWt4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAYCk7XG4gICAgICBjb25zb2xlLmxvZyhg4pSCICDinIUgUGx1Z2luIGRldiBzZXJ2ZXIgcmVhZHk6IGApO1xuICAgICAgY29uc29sZS5sb2coYOKUnOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgGApO1xuICAgICAgY29uc29sZS5sb2coYOKUgiAg8J+ToSBSUEM6ICAgIGh0dHA6Ly9sb2NhbGhvc3Q6JHtwb3J0fS9hcGkvcnBjYCk7XG4gICAgICBjb25zb2xlLmxvZyhg4pSCICDwn5OWIERvY3M6ICAgaHR0cDovL2xvY2FsaG9zdDoke3BvcnR9L2FwaWApO1xuICAgICAgY29uc29sZS5sb2coYOKUgiAg8J+SmiBIZWFsdGg6IGh0dHA6Ly9sb2NhbGhvc3Q6JHtwb3J0fS9gKTtcbiAgICAgIGNvbnNvbGUubG9nKGDilbDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBgKTtcblxuICAgICAgZGV2U2VydmVyLmFwcC5sb2NhbHMuaGFuZGxlcnMgPSBoYW5kbGVycztcblxuICAgICAgaWYgKGRldlNlcnZlci5zZXJ2ZXIpIHtcbiAgICAgICAgZGV2U2VydmVyLnNlcnZlci5vbmNlKCdjbG9zZScsIGFzeW5jICgpID0+IHtcbiAgICAgICAgICBhd2FpdCBwZXJmb3JtQ2xlYW51cCgpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcign4p2MIEZhaWxlZCB0byBsb2FkIHBsdWdpbjonLCBlcnJvcik7XG4gICAgICBhd2FpdCBwZXJmb3JtQ2xlYW51cCgpO1xuICAgIH1cbiAgfSkoKTtcblxuICBwcm9jZXNzLm9uY2UoJ1NJR0lOVCcsIGFzeW5jICgpID0+IHtcbiAgICBhd2FpdCBwZXJmb3JtQ2xlYW51cCgpO1xuICB9KTtcbiAgcHJvY2Vzcy5vbmNlKCdTSUdURVJNJywgYXN5bmMgKCkgPT4ge1xuICAgIGF3YWl0IHBlcmZvcm1DbGVhbnVwKCk7XG4gIH0pO1xuXG4gIC8vIFJvb3QgaGVhbHRoIGNoZWNrXG4gIGRldlNlcnZlci5hcHAuZ2V0KCcvJywgKHJlcTogYW55LCByZXM6IGFueSkgPT4ge1xuICAgIHJlcy5qc29uKHtcbiAgICAgIG9rOiB0cnVlLFxuICAgICAgcGx1Z2luOiBwbHVnaW5JbmZvLm5vcm1hbGl6ZWROYW1lLFxuICAgICAgdmVyc2lvbjogcGx1Z2luSW5mby52ZXJzaW9uLFxuICAgICAgc3RhdHVzOiBkZXZTZXJ2ZXIuYXBwLmxvY2Fscy5oYW5kbGVycz8ucnBjID8gJ3JlYWR5JyA6ICdsb2FkaW5nJyxcbiAgICAgIGVuZHBvaW50czoge1xuICAgICAgICBoZWFsdGg6ICcvJyxcbiAgICAgICAgZG9jczogJy9hcGknLFxuICAgICAgICBycGM6ICcvYXBpL3JwYydcbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG5cbiAgLy8gT3BlbkFQSSBkb2N1bWVudGF0aW9uIGFuZCBSRVNUIGVuZHBvaW50cyBhdCAvYXBpIGFuZCAvYXBpLypcbiAgY29uc3QgaGFuZGxlQXBpUmVxdWVzdCA9IGFzeW5jIChyZXE6IGFueSwgcmVzOiBhbnkpID0+IHtcbiAgICBjb25zdCBhcGlIYW5kbGVyID0gZGV2U2VydmVyLmFwcC5sb2NhbHMuaGFuZGxlcnM/LmFwaTtcbiAgICBpZiAoIWFwaUhhbmRsZXIpIHtcbiAgICAgIHJldHVybiByZXMuc3RhdHVzKDUwMykuanNvbih7IGVycm9yOiAnUGx1Z2luIHN0aWxsIGxvYWRpbmcuLi4nIH0pO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBjb25zdCB1cmwgPSBgaHR0cDovLyR7cmVxLmhlYWRlcnMuaG9zdH0ke3JlcS51cmx9YDtcbiAgICAgIGNvbnN0IHdlYlJlcXVlc3QgPSBuZXcgUmVxdWVzdCh1cmwsIHtcbiAgICAgICAgbWV0aG9kOiByZXEubWV0aG9kLFxuICAgICAgICBoZWFkZXJzOiByZXEuaGVhZGVycyxcbiAgICAgICAgYm9keTogcmVxLm1ldGhvZCAhPT0gJ0dFVCcgJiYgcmVxLm1ldGhvZCAhPT0gJ0hFQUQnID8gcmVxIDogdW5kZWZpbmVkXG4gICAgICB9KTtcblxuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgYXBpSGFuZGxlci5oYW5kbGUod2ViUmVxdWVzdCwge1xuICAgICAgICBwcmVmaXg6ICcvYXBpJyxcbiAgICAgICAgY29udGV4dDoge31cbiAgICAgIH0pO1xuXG4gICAgICBpZiAocmVzdWx0LnJlc3BvbnNlKSB7XG4gICAgICAgIHJlcy5zdGF0dXMocmVzdWx0LnJlc3BvbnNlLnN0YXR1cyk7XG4gICAgICAgIHJlc3VsdC5yZXNwb25zZS5oZWFkZXJzLmZvckVhY2goKHZhbHVlOiBzdHJpbmcsIGtleTogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgcmVzLnNldEhlYWRlcihrZXksIHZhbHVlKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IHRleHQgPSBhd2FpdCByZXN1bHQucmVzcG9uc2UudGV4dCgpO1xuICAgICAgICByZXMuc2VuZCh0ZXh0KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlcy5zdGF0dXMoNDA0KS5zZW5kKCdOb3QgRm91bmQnKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcignT3BlbkFQSSBlcnJvcjonLCBlcnJvcik7XG4gICAgICByZXMuc3RhdHVzKDUwMCkuanNvbih7IGVycm9yOiAoZXJyb3IgYXMgRXJyb3IpLm1lc3NhZ2UgfSk7XG4gICAgfVxuICB9O1xuXG4gIGRldlNlcnZlci5hcHAuYWxsKCcvYXBpJywgaGFuZGxlQXBpUmVxdWVzdCk7XG4gIGRldlNlcnZlci5hcHAuYWxsKCcvYXBpLyonLCBoYW5kbGVBcGlSZXF1ZXN0KTtcblxuICAvLyBSUEMgY2FsbHMgYXQgL2FwaS9ycGMvKlxuICBkZXZTZXJ2ZXIuYXBwLmFsbCgnL2FwaS9ycGMvKicsIGFzeW5jIChyZXE6IGFueSwgcmVzOiBhbnkpID0+IHtcbiAgICBjb25zdCBycGNIYW5kbGVyID0gZGV2U2VydmVyLmFwcC5sb2NhbHMuaGFuZGxlcnM/LnJwYztcbiAgICBpZiAoIXJwY0hhbmRsZXIpIHtcbiAgICAgIHJldHVybiByZXMuc3RhdHVzKDUwMykuanNvbih7IGVycm9yOiAnUGx1Z2luIHN0aWxsIGxvYWRpbmcuLi4nIH0pO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBjb25zdCB1cmwgPSBgaHR0cDovLyR7cmVxLmhlYWRlcnMuaG9zdH0ke3JlcS51cmx9YDtcbiAgICAgIGNvbnN0IHdlYlJlcXVlc3QgPSBuZXcgUmVxdWVzdCh1cmwsIHtcbiAgICAgICAgbWV0aG9kOiByZXEubWV0aG9kLFxuICAgICAgICBoZWFkZXJzOiByZXEuaGVhZGVycyxcbiAgICAgICAgYm9keTogcmVxLm1ldGhvZCAhPT0gJ0dFVCcgJiYgcmVxLm1ldGhvZCAhPT0gJ0hFQUQnID8gcmVxIDogdW5kZWZpbmVkXG4gICAgICB9KTtcblxuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcnBjSGFuZGxlci5oYW5kbGUod2ViUmVxdWVzdCwge1xuICAgICAgICBwcmVmaXg6ICcvYXBpL3JwYycsXG4gICAgICAgIGNvbnRleHQ6IHt9XG4gICAgICB9KTtcblxuICAgICAgaWYgKHJlc3VsdC5yZXNwb25zZSkge1xuICAgICAgICByZXMuc3RhdHVzKHJlc3VsdC5yZXNwb25zZS5zdGF0dXMpO1xuICAgICAgICByZXN1bHQucmVzcG9uc2UuaGVhZGVycy5mb3JFYWNoKCh2YWx1ZTogc3RyaW5nLCBrZXk6IHN0cmluZykgPT4ge1xuICAgICAgICAgIHJlcy5zZXRIZWFkZXIoa2V5LCB2YWx1ZSk7XG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCB0ZXh0ID0gYXdhaXQgcmVzdWx0LnJlc3BvbnNlLnRleHQoKTtcbiAgICAgICAgcmVzLnNlbmQodGV4dCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXMuc3RhdHVzKDQwNCkuc2VuZCgnTm90IEZvdW5kJyk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1JQQyBlcnJvcjonLCBlcnJvcik7XG4gICAgICByZXMuc3RhdHVzKDUwMCkuanNvbih7IGVycm9yOiAoZXJyb3IgYXMgRXJyb3IpLm1lc3NhZ2UgfSk7XG4gICAgfVxuICB9KTtcbn1cbiIsImltcG9ydCB0eXBlIHsgQ29tcGlsZXIsIFJzcGFja1BsdWdpbkluc3RhbmNlIH0gZnJvbSAnQHJzcGFjay9jb3JlJztcbmltcG9ydCB7IHJzcGFjayB9IGZyb20gJ0Byc3BhY2svY29yZSc7XG5pbXBvcnQgcGF0aCBmcm9tICdub2RlOnBhdGgnO1xuaW1wb3J0IHsgZ2V0UGx1Z2luSW5mbyB9IGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IHsgbG9hZERldkNvbmZpZyB9IGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IHsgYnVpbGRTaGFyZWREZXBlbmRlbmNpZXMgfSBmcm9tICcuL21vZHVsZS1mZWRlcmF0aW9uJztcbmltcG9ydCB7IHNldHVwUGx1Z2luTWlkZGxld2FyZSB9IGZyb20gJy4vZGV2LXNlcnZlci1taWRkbGV3YXJlJztcblxuXG5leHBvcnQgaW50ZXJmYWNlIEV2ZXJ5UGx1Z2luT3B0aW9ucyB7XG4gIGRldkNvbmZpZ1BhdGg/OiBzdHJpbmc7ICAvLyBkZWZhdWx0cyB0byAnLi9wbHVnaW4uZGV2LnRzJ1xuICBwb3J0PzogbnVtYmVyOyAgICAgICAgICAgLy8gb3ZlcnJpZGUgcGx1Z2luLmRldi50cyBwb3J0XG4gIHBsdWdpbklkPzogc3RyaW5nOyAgICAgICAvLyBvdmVycmlkZSBhdXRvLWRldGVjdGVkXG59XG5cbmV4cG9ydCBjbGFzcyBFdmVyeVBsdWdpbkRldlNlcnZlciBpbXBsZW1lbnRzIFJzcGFja1BsdWdpbkluc3RhbmNlIHtcbiAgbmFtZSA9ICdFdmVyeVBsdWdpbkRldlNlcnZlcic7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBvcHRpb25zOiBFdmVyeVBsdWdpbk9wdGlvbnMgPSB7fSkge31cblxuICBhcHBseShjb21waWxlcjogQ29tcGlsZXIpIHtcbiAgICAvLyBMb2FkIGNvbmZpZ3VyYXRpb25cbiAgICBjb25zdCBwbHVnaW5JbmZvID0gZ2V0UGx1Z2luSW5mbyhjb21waWxlci5vcHRpb25zLmNvbnRleHQgfHwgcHJvY2Vzcy5jd2QoKSk7XG4gICAgY29uc3QgZGV2Q29uZmlnID0gbG9hZERldkNvbmZpZyh0aGlzLm9wdGlvbnMuZGV2Q29uZmlnUGF0aCB8fCAnLi9wbHVnaW4uZGV2LnRzJyk7XG4gICAgY29uc3QgcG9ydCA9IHRoaXMub3B0aW9ucy5wb3J0IHx8IGRldkNvbmZpZz8ucG9ydCB8fCAzOTk5O1xuXG4gICAgLy8gQ29uZmlndXJlIGRlZmF1bHRzIGltbWVkaWF0ZWx5IChubyBob29rcyBuZWVkZWQpXG4gICAgdGhpcy5jb25maWd1cmVEZWZhdWx0cyhjb21waWxlciwgcGx1Z2luSW5mbyk7XG5cbiAgICAvLyBJbml0aWFsaXplIGRldlNlcnZlciBpZiBpdCBkb2Vzbid0IGV4aXN0XG4gICAgaWYgKCFjb21waWxlci5vcHRpb25zLmRldlNlcnZlcikge1xuICAgICAgY29tcGlsZXIub3B0aW9ucy5kZXZTZXJ2ZXIgPSB7fTtcbiAgICB9XG5cbiAgICAvLyBDb25maWd1cmUgZGV2IHNlcnZlclxuICAgIHRoaXMuY29uZmlndXJlRGV2U2VydmVyKGNvbXBpbGVyLCBwbHVnaW5JbmZvLCBkZXZDb25maWcsIHBvcnQpO1xuXG4gICAgLy8gQXBwbHkgTW9kdWxlIEZlZGVyYXRpb24gcGx1Z2luXG4gICAgbmV3IHJzcGFjay5jb250YWluZXIuTW9kdWxlRmVkZXJhdGlvblBsdWdpbih7XG4gICAgICBuYW1lOiBwbHVnaW5JbmZvLm5vcm1hbGl6ZWROYW1lLFxuICAgICAgZmlsZW5hbWU6ICdyZW1vdGVFbnRyeS5qcycsXG4gICAgICBydW50aW1lUGx1Z2luczogW1xuICAgICAgICByZXF1aXJlLnJlc29sdmUoJ0Btb2R1bGUtZmVkZXJhdGlvbi9ub2RlL3J1bnRpbWVQbHVnaW4nKSxcbiAgICAgIF0sXG4gICAgICBsaWJyYXJ5OiB7IHR5cGU6ICdjb21tb25qcy1tb2R1bGUnIH0sXG4gICAgICBleHBvc2VzOiB7XG4gICAgICAgICcuL3BsdWdpbic6ICcuL3NyYy9pbmRleC50cycsXG4gICAgICB9LFxuICAgICAgc2hhcmVkOiBidWlsZFNoYXJlZERlcGVuZGVuY2llcyhwbHVnaW5JbmZvKSxcbiAgICB9KS5hcHBseShjb21waWxlcik7XG4gIH1cblxuICBwcml2YXRlIGNvbmZpZ3VyZURlZmF1bHRzKGNvbXBpbGVyOiBDb21waWxlciwgcGx1Z2luSW5mbzogYW55KSB7XG4gICAgY29uc3QgY29udGV4dCA9IGNvbXBpbGVyLm9wdGlvbnMuY29udGV4dCB8fCBwcm9jZXNzLmN3ZCgpO1xuXG4gICAgLy8gQ29uZmlndXJlIG91dHB1dCBkZWZhdWx0c1xuICAgIGlmICghY29tcGlsZXIub3B0aW9ucy5vdXRwdXQpIHtcbiAgICAgIGNvbXBpbGVyLm9wdGlvbnMub3V0cHV0ID0ge307XG4gICAgfVxuICAgIGNvbXBpbGVyLm9wdGlvbnMub3V0cHV0LnVuaXF1ZU5hbWUgPSBwbHVnaW5JbmZvLm5vcm1hbGl6ZWROYW1lO1xuICAgIGNvbXBpbGVyLm9wdGlvbnMub3V0cHV0LnB1YmxpY1BhdGggPSAnYXV0byc7XG4gICAgY29tcGlsZXIub3B0aW9ucy5vdXRwdXQucGF0aCA9IHBhdGgucmVzb2x2ZShjb250ZXh0LCAnZGlzdCcpO1xuICAgIGNvbXBpbGVyLm9wdGlvbnMub3V0cHV0LmNsZWFuID0gdHJ1ZTtcbiAgICBjb21waWxlci5vcHRpb25zLm91dHB1dC5saWJyYXJ5ID0geyB0eXBlOiAnY29tbW9uanMtbW9kdWxlJyB9O1xuXG4gICAgLy8gQ29uZmlndXJlIGVudHJ5IGlmIG5vdCBzZXRcbiAgICBpZiAoIWNvbXBpbGVyLm9wdGlvbnMuZW50cnkpIHtcbiAgICAgIGNvbXBpbGVyLm9wdGlvbnMuZW50cnkgPSB7XG4gICAgICAgIG1haW46IHtcbiAgICAgICAgICBpbXBvcnQ6IFsnLi9zcmMvaW5kZXgnXVxuICAgICAgICB9XG4gICAgICB9O1xuICAgIH1cblxuICAgIC8vIENvbmZpZ3VyZSB0YXJnZXQgYW5kIG1vZGUgZGVmYXVsdHNcbiAgICBpZiAoIWNvbXBpbGVyLm9wdGlvbnMudGFyZ2V0KSB7XG4gICAgICBjb21waWxlci5vcHRpb25zLnRhcmdldCA9ICdhc3luYy1ub2RlJztcbiAgICB9XG5cbiAgICBpZiAoIWNvbXBpbGVyLm9wdGlvbnMubW9kZSkge1xuICAgICAgY29tcGlsZXIub3B0aW9ucy5tb2RlID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICdkZXZlbG9wbWVudCcgPyAnZGV2ZWxvcG1lbnQnIDogJ3Byb2R1Y3Rpb24nO1xuICAgIH1cblxuICAgIC8vIENvbmZpZ3VyZSBkZXZ0b29sXG4gICAgaWYgKCFjb21waWxlci5vcHRpb25zLmRldnRvb2wpIHtcbiAgICAgIGNvbXBpbGVyLm9wdGlvbnMuZGV2dG9vbCA9ICdzb3VyY2UtbWFwJztcbiAgICB9XG5cbiAgICAvLyBTdXBwcmVzcyB2ZXJib3NlIGluZnJhc3RydWN0dXJlIGxvZ2dpbmdcbiAgICBpZiAoIWNvbXBpbGVyLm9wdGlvbnMuaW5mcmFzdHJ1Y3R1cmVMb2dnaW5nKSB7XG4gICAgICBjb21waWxlci5vcHRpb25zLmluZnJhc3RydWN0dXJlTG9nZ2luZyA9IHtcbiAgICAgICAgbGV2ZWw6ICd3YXJuJywgIC8vIE9ubHkgc2hvdyB3YXJuaW5ncyBhbmQgZXJyb3JzXG4gICAgICB9O1xuICAgIH1cblxuICAgIC8vIENvbmZpZ3VyZSBtb2R1bGUgcnVsZXMgLSBlbnN1cmUgVHlwZVNjcmlwdCBsb2FkZXIgaXMgcHJlc2VudFxuICAgIHRoaXMuZW5zdXJlVHlwZVNjcmlwdExvYWRlcihjb21waWxlcik7XG5cbiAgICAvLyBDb25maWd1cmUgcmVzb2x2ZSBleHRlbnNpb25zXG4gICAgaWYgKCFjb21waWxlci5vcHRpb25zLnJlc29sdmUpIHtcbiAgICAgIGNvbXBpbGVyLm9wdGlvbnMucmVzb2x2ZSA9IHt9O1xuICAgIH1cbiAgICBjb21waWxlci5vcHRpb25zLnJlc29sdmUuZXh0ZW5zaW9ucyA9IFsnLi4uJywgJy50c3gnLCAnLnRzJ107XG4gIH1cblxuICBwcml2YXRlIGVuc3VyZVR5cGVTY3JpcHRMb2FkZXIoY29tcGlsZXI6IENvbXBpbGVyKSB7XG4gICAgaWYgKCFjb21waWxlci5vcHRpb25zLm1vZHVsZSkge1xuICAgICAgY29tcGlsZXIub3B0aW9ucy5tb2R1bGUgPSB7IHJ1bGVzOiBbXSB9IGFzIGFueTtcbiAgICB9XG5cbiAgICBpZiAoIWNvbXBpbGVyLm9wdGlvbnMubW9kdWxlLnJ1bGVzKSB7XG4gICAgICBjb21waWxlci5vcHRpb25zLm1vZHVsZS5ydWxlcyA9IFtdO1xuICAgIH1cblxuICAgIC8vIENoZWNrIGlmIFR5cGVTY3JpcHQgbG9hZGVyIGlzIGFscmVhZHkgY29uZmlndXJlZFxuICAgIGNvbnN0IGhhc1RzTG9hZGVyID0gY29tcGlsZXIub3B0aW9ucy5tb2R1bGUucnVsZXMuc29tZSgocnVsZTogYW55KSA9PlxuICAgICAgdHlwZW9mIHJ1bGUgPT09ICdvYmplY3QnICYmXG4gICAgICBydWxlICE9PSBudWxsICYmXG4gICAgICAndGVzdCcgaW4gcnVsZSAmJlxuICAgICAgcnVsZS50ZXN0IGluc3RhbmNlb2YgUmVnRXhwICYmXG4gICAgICBydWxlLnRlc3QudGVzdCgnLnRzJylcbiAgICApO1xuXG4gICAgLy8gQWRkIFR5cGVTY3JpcHQgbG9hZGVyIGlmIG5vdCBwcmVzZW50XG4gICAgaWYgKCFoYXNUc0xvYWRlcikge1xuICAgICAgY29tcGlsZXIub3B0aW9ucy5tb2R1bGUucnVsZXMucHVzaCh7XG4gICAgICAgIHRlc3Q6IC9cXC50c3g/JC8sXG4gICAgICAgIHVzZTogJ2J1aWx0aW46c3djLWxvYWRlcicsXG4gICAgICAgIGV4Y2x1ZGU6IC9ub2RlX21vZHVsZXMvLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBjb25maWd1cmVEZXZTZXJ2ZXIoY29tcGlsZXI6IENvbXBpbGVyLCBwbHVnaW5JbmZvOiBhbnksIGRldkNvbmZpZzogYW55LCBwb3J0OiBudW1iZXIpIHtcbiAgICBpZiAoIWNvbXBpbGVyLm9wdGlvbnMuZGV2U2VydmVyKSB7XG4gICAgICByZXR1cm47IC8vIFNob3VsZCBuZXZlciBoYXBwZW4gZHVlIHRvIGNoZWNrIGluIGFwcGx5KClcbiAgICB9XG5cbiAgICBjb25zdCBjb250ZXh0ID0gY29tcGlsZXIub3B0aW9ucy5jb250ZXh0IHx8IHByb2Nlc3MuY3dkKCk7XG4gICAgY29uc3Qgb3JpZ2luYWxTZXR1cCA9IGNvbXBpbGVyLm9wdGlvbnMuZGV2U2VydmVyLnNldHVwTWlkZGxld2FyZXM7XG5cbiAgICBjb21waWxlci5vcHRpb25zLmRldlNlcnZlci5wb3J0ID0gcG9ydDtcbiAgICBjb21waWxlci5vcHRpb25zLmRldlNlcnZlci5zdGF0aWMgPSBwYXRoLmpvaW4oY29udGV4dCwgJ2Rpc3QnKTtcbiAgICBjb21waWxlci5vcHRpb25zLmRldlNlcnZlci5ob3QgPSB0cnVlO1xuICAgIGNvbXBpbGVyLm9wdGlvbnMuZGV2U2VydmVyLmRldk1pZGRsZXdhcmUgPSB7IHdyaXRlVG9EaXNrOiB0cnVlIH07XG4gICAgY29tcGlsZXIub3B0aW9ucy5kZXZTZXJ2ZXIuaGVhZGVycyA9IHtcbiAgICAgICdBY2Nlc3MtQ29udHJvbC1BbGxvdy1PcmlnaW4nOiAnKicsXG4gICAgICAnQWNjZXNzLUNvbnRyb2wtQWxsb3ctTWV0aG9kcyc6ICdHRVQsIFBPU1QsIFBVVCwgREVMRVRFLCBQQVRDSCwgT1BUSU9OUycsXG4gICAgICAnQWNjZXNzLUNvbnRyb2wtQWxsb3ctSGVhZGVycyc6ICdYLVJlcXVlc3RlZC1XaXRoLCBjb250ZW50LXR5cGUsIEF1dGhvcml6YXRpb24nLFxuICAgIH07XG5cbiAgICAvLyBTdXBwcmVzcyB2ZXJib3NlIGxvZ2dpbmdcbiAgICBjb21waWxlci5vcHRpb25zLmRldlNlcnZlci5jbGllbnQgPSB7XG4gICAgICBsb2dnaW5nOiAnd2FybicsICAvLyBPbmx5IHNob3cgd2FybmluZ3MgYW5kIGVycm9yc1xuICAgICAgb3ZlcmxheToge1xuICAgICAgICB3YXJuaW5nczogZmFsc2UsICAvLyBEb24ndCBzaG93IHdhcm5pbmcgb3ZlcmxheVxuICAgICAgICBlcnJvcnM6IHRydWUsICAgICAvLyBTdGlsbCBzaG93IGVycm9yc1xuICAgICAgfSxcbiAgICB9O1xuXG4gICAgY29tcGlsZXIub3B0aW9ucy5kZXZTZXJ2ZXIuc2V0dXBNaWRkbGV3YXJlcyA9IChtaWRkbGV3YXJlcywgZGV2U2VydmVyKSA9PiB7XG4gICAgICBzZXR1cFBsdWdpbk1pZGRsZXdhcmUoZGV2U2VydmVyLCBwbHVnaW5JbmZvLCBkZXZDb25maWcsIHBvcnQpO1xuICAgICAgcmV0dXJuIG9yaWdpbmFsU2V0dXAgPyBvcmlnaW5hbFNldHVwKG1pZGRsZXdhcmVzLCBkZXZTZXJ2ZXIpIDogbWlkZGxld2FyZXM7XG4gICAgfTtcbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7O0FBWUEsU0FBZ0IsY0FBYyxTQUE2QjtDQUN6RCxNQUFNLFVBQVVBLGtCQUFLLEtBQUssU0FBUyxlQUFlO0NBQ2xELE1BQU0sTUFBTSxLQUFLLE1BQU1DLGdCQUFHLGFBQWEsU0FBUyxRQUFRLENBQUM7QUFFekQsUUFBTztFQUNMLE1BQU0sSUFBSTtFQUNWLFNBQVMsSUFBSTtFQUNiLGdCQUFnQkMsMENBQXdCLElBQUksS0FBSztFQUNqRCxjQUFjLElBQUksZ0JBQWdCLEVBQUU7RUFDcEMsa0JBQWtCLElBQUksb0JBQW9CLEVBQUU7RUFDN0M7O0FBR0gsTUFBTSxnQ0FBZ0IsSUFBSSxLQUFhO0FBRXZDLFNBQWdCLGNBQWMsZUFBdUI7QUFDbkQsS0FBSTtFQUNGLE1BQU0sV0FBV0Ysa0JBQUssUUFBUSxjQUFjO0FBRTVDLE1BQUksY0FBYyxJQUFJLFNBQVMsRUFBRTtBQUMvQixVQUFPLFFBQVEsTUFBTTtHQUNyQixNQUFNLFVBQVVBLGtCQUFLLFFBQVEsU0FBUztBQUN0QyxRQUFLLE1BQU0sT0FBTyxPQUFPLEtBQUssUUFBUSxNQUFNLENBQzFDLEtBQUksSUFBSSxXQUFXLFFBQVEsSUFBSSxRQUFRLFNBQ3JDLFFBQU8sUUFBUSxNQUFNOztFQUszQixNQUFNRyxXQUFTLFFBQVEsU0FBUyxDQUFDO0FBQ2pDLGdCQUFjLElBQUksU0FBUztBQUMzQixTQUFPQTtVQUNBLE9BQU87QUFDZCxVQUFRLEtBQUssa0NBQWtDLGNBQWMsSUFBSyxNQUFnQixRQUFRO0FBQzFGLFNBQU87Ozs7OztBQzVDWCxTQUFnQix3QkFBd0Is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
@@ -0,0 +1,20 @@
1
+ import { Compiler, RspackPluginInstance } from "@rspack/core";
2
+
3
+ //#region src/build/rspack/plugin.d.ts
4
+ interface EveryPluginOptions {
5
+ devConfigPath?: string;
6
+ port?: number;
7
+ pluginId?: string;
8
+ }
9
+ declare class EveryPluginDevServer implements RspackPluginInstance {
10
+ private options;
11
+ name: string;
12
+ constructor(options?: EveryPluginOptions);
13
+ apply(compiler: Compiler): void;
14
+ private configureDefaults;
15
+ private ensureTypeScriptLoader;
16
+ private configureDevServer;
17
+ }
18
+ //#endregion
19
+ export { EveryPluginDevServer, type EveryPluginOptions };
20
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguZC5jdHMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2J1aWxkL3JzcGFjay9wbHVnaW4udHMiXSwic291cmNlc0NvbnRlbnQiOltdLCJtYXBwaW5ncyI6Ijs7O1VBU2lCLGtCQUFBOztFQUFBLElBQUEsQ0FBQSxFQUFBLE1BQUE7RUFNSixRQUFBLENBQUEsRUFBQSxNQUFBOztBQUtLLGNBTEwsb0JBQUEsWUFBZ0Msb0JBSzNCLENBQUE7RUFMMkIsUUFBQSxPQUFBO0VBQW9CLElBQUEsRUFBQSxNQUFBO3dCQUdsQztrQkFFYiJ9
@@ -0,0 +1,20 @@
1
+ import { Compiler, RspackPluginInstance } from "@rspack/core";
2
+
3
+ //#region src/build/rspack/plugin.d.ts
4
+ interface EveryPluginOptions {
5
+ devConfigPath?: string;
6
+ port?: number;
7
+ pluginId?: string;
8
+ }
9
+ declare class EveryPluginDevServer implements RspackPluginInstance {
10
+ private options;
11
+ name: string;
12
+ constructor(options?: EveryPluginOptions);
13
+ apply(compiler: Compiler): void;
14
+ private configureDefaults;
15
+ private ensureTypeScriptLoader;
16
+ private configureDevServer;
17
+ }
18
+ //#endregion
19
+ export { EveryPluginDevServer, type EveryPluginOptions };
20
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguZC5tdHMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2J1aWxkL3JzcGFjay9wbHVnaW4udHMiXSwic291cmNlc0NvbnRlbnQiOltdLCJtYXBwaW5ncyI6Ijs7O1VBU2lCLGtCQUFBOztFQUFBLElBQUEsQ0FBQSxFQUFBLE1BQUE7RUFNSixRQUFBLENBQUEsRUFBQSxNQUFBOztBQUtLLGNBTEwsb0JBQUEsWUFBZ0Msb0JBSzNCLENBQUE7RUFMMkIsUUFBQSxPQUFBO0VBQW9CLElBQUEsRUFBQSxNQUFBO3dCQUdsQztrQkFFYiJ9