@dbx-tools/appkit-web-search 0.9.5 → 0.9.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.
package/README.md CHANGED
@@ -52,8 +52,8 @@ tool pair plus an AppKit plugin.
52
52
 
53
53
  ```ts
54
54
  import { createApp, lakebase, server } from "@databricks/appkit";
55
- import { plugin as webSearchPlugin } from "@dbx-tools/appkit-web-search";
56
- import { agents, plugin as mastraPlugin } from "@dbx-tools/appkit-mastra";
55
+ import { webSearch } from "@dbx-tools/appkit-web-search";
56
+ import { agents, mastra } from "@dbx-tools/appkit-mastra";
57
57
 
58
58
  const researcher = agents.createAgent({
59
59
  instructions: "Research questions using web_search, then read sources with web_fetch.",
@@ -66,11 +66,11 @@ await createApp({
66
66
  plugins: [
67
67
  server(),
68
68
  lakebase(),
69
- webSearchPlugin.webSearch({
69
+ webSearch({
70
70
  model: "gemini", // defaults to Gemini, then GPT, when omitted
71
71
  allowedUrls: ["*.databricks.com", "docs.example.com"],
72
72
  }),
73
- mastraPlugin.mastra({ agents: researcher, storage: true }),
73
+ mastra({ agents: researcher, storage: true }),
74
74
  ],
75
75
  });
76
76
  ```
@@ -218,10 +218,8 @@ const tools = {
218
218
  };
219
219
  ```
220
220
 
221
- `getWebSearchRuntime()` remains as a deprecated compatibility constructor and
222
- returns a new isolated runtime on every call. Process-global
223
- `setWebSearchExecutor(executor)` registration is no longer supported; pass the
224
- runtime explicitly or provide the executor to `createWebSearchRuntime`.
221
+ Pass the runtime explicitly or provide the executor to
222
+ `createWebSearchRuntime`.
225
223
 
226
224
  ## Restrict Which URLs Are Reachable
227
225
 
@@ -364,7 +362,7 @@ the [Databricks docs](https://docs.databricks.com/aws/en/machine-learning/model-
364
362
  `fetch` and the DuckDuckGo scrape fallback.
365
363
  - `runtime` - isolated runtime construction and execution:
366
364
  `createWebSearchRuntime()`, `createResolvedWebSearchRuntime()`,
367
- `executeRead()`, plus deprecated global-era compatibility names.
365
+ and `executeRead()`.
368
366
  - `config` - config types, JSON schema, `resolveWebSearchConfig()`, URL policy
369
367
  and approval helpers.
370
368
  - `allowlist` - URL allow-list parsing/compiling on top of `@dbx-tools/path`.
package/index.ts CHANGED
@@ -3,7 +3,7 @@
3
3
  // Hand edits are overwritten on the next watch; this file is read-only.
4
4
 
5
5
  export const PACKAGE_IDENTIFIER = "@dbx-tools/appkit-web-search";
6
- export const PACKAGE_VERSION = "0.9.5";
6
+ export const PACKAGE_VERSION = "0.9.6";
7
7
  export * as allowlist from "./src/allowlist.ts";
8
8
  export * as config from "./src/config.ts";
9
9
  export * as defaults from "./src/defaults.ts";
package/lib/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  export declare const PACKAGE_IDENTIFIER = "@dbx-tools/appkit-web-search";
2
- export declare const PACKAGE_VERSION = "0.9.5";
2
+ export declare const PACKAGE_VERSION = "0.9.6";
3
3
  export * as allowlist from "./src/allowlist.ts";
4
4
  export * as config from "./src/config.ts";
5
5
  export * as defaults from "./src/defaults.ts";
package/lib/index.js CHANGED
@@ -2,7 +2,7 @@
2
2
  // Regenerated from the exporting modules in ./src.
3
3
  // Hand edits are overwritten on the next watch; this file is read-only.
4
4
  export const PACKAGE_IDENTIFIER = "@dbx-tools/appkit-web-search";
5
- export const PACKAGE_VERSION = "0.9.5";
5
+ export const PACKAGE_VERSION = "0.9.6";
6
6
  export * as allowlist from "./src/allowlist.js";
7
7
  export * as config from "./src/config.js";
8
8
  export * as defaults from "./src/defaults.js";
@@ -20,4 +20,4 @@ export { SEARCH_CACHE_TTL_SECONDS, FETCH_CACHE_TTL_SECONDS, SERVING_RETRY_ATTEMP
20
20
  export { WebSearchPlugin, webSearch } from "./src/plugin.js";
21
21
  export { WEB_SEARCH_PROVIDERS } from "./src/provider.js";
22
22
  export { WEB_SEARCH_TOOL_DESCRIPTION, WEB_FETCH_TOOL_DESCRIPTION, webSearchRequestSchema, webSearchCitationSchema, webSearchResultSchema, webFetchRequestSchema, webFetchResultSchema } from "./src/schema.js";
23
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwyQ0FBMkM7QUFDM0MsbURBQW1EO0FBQ25ELHdFQUF3RTtBQUV4RSxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRyw4QkFBOEIsQ0FBQztBQUNqRSxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcsT0FBTyxDQUFDO0FBQ3ZDLE9BQU8sS0FBSyxTQUFTLE1BQU0sb0JBQW9CLENBQUM7QUFDaEQsT0FBTyxLQUFLLE1BQU0sTUFBTSxpQkFBaUIsQ0FBQztBQUMxQyxPQUFPLEtBQUssUUFBUSxNQUFNLG1CQUFtQixDQUFDO0FBQzlDLE9BQU8sS0FBSyxLQUFLLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEMsT0FBTyxLQUFLLFFBQVEsTUFBTSxvQkFBb0IsQ0FBQztBQUMvQyxPQUFPLEtBQUssTUFBTSxNQUFNLGlCQUFpQixDQUFDO0FBQzFDLE9BQU8sS0FBSyxRQUFRLE1BQU0sbUJBQW1CLENBQUM7QUFDOUMsT0FBTyxLQUFLLE9BQU8sTUFBTSxrQkFBa0IsQ0FBQztBQUM1QyxPQUFPLEtBQUssTUFBTSxNQUFNLGlCQUFpQixDQUFDO0FBQzFDLE9BQU8sS0FBSyxNQUFNLE1BQU0saUJBQWlCLENBQUM7QUFDMUMsT0FBTyxLQUFLLE1BQU0sTUFBTSxpQkFBaUIsQ0FBQztBQUMxQyxPQUFPLEtBQUssSUFBSSxNQUFNLGVBQWUsQ0FBQztBQUV0QyxPQUFPLEVBQUUsU0FBUyxFQUFFLG9CQUFvQixFQUFFLHVCQUF1QixFQUFFLHFCQUFxQixFQUFFLHdCQUF3QixFQUFFLGtCQUFrQixFQUFFLHdCQUF3QixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFMUwsT0FBTyxFQUFFLHdCQUF3QixFQUFFLHVCQUF1QixFQUFFLHNCQUFzQixFQUFFLGtCQUFrQixFQUFFLHdCQUF3QixFQUFFLHVCQUF1QixFQUFFLDJCQUEyQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFFbE4sT0FBTyxFQUFFLGVBQWUsRUFBRSxTQUFTLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUd6RCxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsMEJBQTBCLEVBQUUsc0JBQXNCLEVBQUUsdUJBQXVCLEVBQUUscUJBQXFCLEVBQUUscUJBQXFCLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIEdFTkVSQVRFRCBieSBwcm9qZW4gd2F0Y2ggLSBETyBOT1QgRURJVC5cbi8vIFJlZ2VuZXJhdGVkIGZyb20gdGhlIGV4cG9ydGluZyBtb2R1bGVzIGluIC4vc3JjLlxuLy8gSGFuZCBlZGl0cyBhcmUgb3ZlcndyaXR0ZW4gb24gdGhlIG5leHQgd2F0Y2g7IHRoaXMgZmlsZSBpcyByZWFkLW9ubHkuXG5cbmV4cG9ydCBjb25zdCBQQUNLQUdFX0lERU5USUZJRVIgPSBcIkBkYngtdG9vbHMvYXBwa2l0LXdlYi1zZWFyY2hcIjtcbmV4cG9ydCBjb25zdCBQQUNLQUdFX1ZFUlNJT04gPSBcIjAuOS41XCI7XG5leHBvcnQgKiBhcyBhbGxvd2xpc3QgZnJvbSBcIi4vc3JjL2FsbG93bGlzdC50c1wiO1xuZXhwb3J0ICogYXMgY29uZmlnIGZyb20gXCIuL3NyYy9jb25maWcudHNcIjtcbmV4cG9ydCAqIGFzIGRlZmF1bHRzIGZyb20gXCIuL3NyYy9kZWZhdWx0cy50c1wiO1xuZXhwb3J0ICogYXMgZmV0Y2ggZnJvbSBcIi4vc3JjL2ZldGNoLnRzXCI7XG5leHBvcnQgKiBhcyBodG1sVGV4dCBmcm9tIFwiLi9zcmMvaHRtbC10ZXh0LnRzXCI7XG5leHBvcnQgKiBhcyBwbHVnaW4gZnJvbSBcIi4vc3JjL3BsdWdpbi50c1wiO1xuZXhwb3J0ICogYXMgcHJvdmlkZXIgZnJvbSBcIi4vc3JjL3Byb3ZpZGVyLnRzXCI7XG5leHBvcnQgKiBhcyBydW50aW1lIGZyb20gXCIuL3NyYy9ydW50aW1lLnRzXCI7XG5leHBvcnQgKiBhcyBzY2hlbWEgZnJvbSBcIi4vc3JjL3NjaGVtYS50c1wiO1xuZXhwb3J0ICogYXMgc2NyYXBlIGZyb20gXCIuL3NyYy9zY3JhcGUudHNcIjtcbmV4cG9ydCAqIGFzIHNlYXJjaCBmcm9tIFwiLi9zcmMvc2VhcmNoLnRzXCI7XG5leHBvcnQgKiBhcyB0b29sIGZyb20gXCIuL3NyYy90b29sLnRzXCI7XG5leHBvcnQgdHlwZSB7IFVybEFsbG93TGlzdCB9IGZyb20gXCIuL3NyYy9hbGxvd2xpc3QudHNcIjtcbmV4cG9ydCB7IE1PREVMX0VOViwgU0VSVklOR19FTkRQT0lOVF9FTlYsIERFRkFVTFRfTU9ERUxfRkFMTEJBQ0tTLCBERUZBVUxUX01BWF9DSVRBVElPTlMsIERFRkFVTFRfRkVUQ0hfTUFYX0xFTkdUSCwgREVGQVVMVF9USU1FT1VUX01TLCBXRUJfU0VBUkNIX0NPTkZJR19TQ0hFTUEgfSBmcm9tIFwiLi9zcmMvY29uZmlnLnRzXCI7XG5leHBvcnQgdHlwZSB7IEFwcHJvdmFsR2F0ZSwgQXBwcm92YWxQb2xpY3ksIFVybFBvbGljeU1vZGUsIE1vZGVsU291cmNlLCBXZWJTZWFyY2hQbHVnaW5Db25maWcsIFJlc29sdmVkV2ViU2VhcmNoQ29uZmlnIH0gZnJvbSBcIi4vc3JjL2NvbmZpZy50c1wiO1xuZXhwb3J0IHsgU0VBUkNIX0NBQ0hFX1RUTF9TRUNPTkRTLCBGRVRDSF9DQUNIRV9UVExfU0VDT05EUywgU0VSVklOR19SRVRSWV9BVFRFTVBUUywgV0VCX1JFVFJZX0FUVEVNUFRTLCB3ZWJTZWFyY2hFeGVjdXRlRGVmYXVsdHMsIHdlYkZldGNoRXhlY3V0ZURlZmF1bHRzLCBzY3JhcGVTZWFyY2hFeGVjdXRlRGVmYXVsdHMgfSBmcm9tIFwiLi9zcmMvZGVmYXVsdHMudHNcIjtcbmV4cG9ydCB0eXBlIHsgV2ViU2VhcmNoRXhlY3V0ZUNvbmZpZywgV2ViU2VhcmNoRXhlY3V0aW9uU2V0dGluZ3MgfSBmcm9tIFwiLi9zcmMvZGVmYXVsdHMudHNcIjtcbmV4cG9ydCB7IFdlYlNlYXJjaFBsdWdpbiwgd2ViU2VhcmNoIH0gZnJvbSBcIi4vc3JjL3BsdWdpbi50c1wiO1xuZXhwb3J0IHsgV0VCX1NFQVJDSF9QUk9WSURFUlMgfSBmcm9tIFwiLi9zcmMvcHJvdmlkZXIudHNcIjtcbmV4cG9ydCB0eXBlIHsgV2ViU2VhcmNoUHJvdmlkZXIsIFdlYlNlYXJjaFByb3ZpZGVyU3BlYyB9IGZyb20gXCIuL3NyYy9wcm92aWRlci50c1wiO1xuZXhwb3J0IHR5cGUgeyBXZWJTZWFyY2hFeGVjdXRvciwgV2ViU2VhcmNoUnVudGltZSwgV2ViU2VhcmNoUnVudGltZUlucHV0IH0gZnJvbSBcIi4vc3JjL3J1bnRpbWUudHNcIjtcbmV4cG9ydCB7IFdFQl9TRUFSQ0hfVE9PTF9ERVNDUklQVElPTiwgV0VCX0ZFVENIX1RPT0xfREVTQ1JJUFRJT04sIHdlYlNlYXJjaFJlcXVlc3RTY2hlbWEsIHdlYlNlYXJjaENpdGF0aW9uU2NoZW1hLCB3ZWJTZWFyY2hSZXN1bHRTY2hlbWEsIHdlYkZldGNoUmVxdWVzdFNjaGVtYSwgd2ViRmV0Y2hSZXN1bHRTY2hlbWEgfSBmcm9tIFwiLi9zcmMvc2NoZW1hLnRzXCI7XG5leHBvcnQgdHlwZSB7IFdlYlNlYXJjaFJlcXVlc3QsIFdlYlNlYXJjaENpdGF0aW9uLCBXZWJTZWFyY2hSZXN1bHQsIFdlYkZldGNoUmVxdWVzdCwgV2ViRmV0Y2hSZXN1bHQgfSBmcm9tIFwiLi9zcmMvc2NoZW1hLnRzXCI7XG5leHBvcnQgdHlwZSB7IFdlYlNlYXJjaENvbnRleHQgfSBmcm9tIFwiLi9zcmMvc2VhcmNoLnRzXCI7XG5leHBvcnQgdHlwZSB7IFdlYlNlYXJjaFRvb2xPcHRpb25zIH0gZnJvbSBcIi4vc3JjL3Rvb2wudHNcIjtcbiJdfQ==
23
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwyQ0FBMkM7QUFDM0MsbURBQW1EO0FBQ25ELHdFQUF3RTtBQUV4RSxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRyw4QkFBOEIsQ0FBQztBQUNqRSxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcsT0FBTyxDQUFDO0FBQ3ZDLE9BQU8sS0FBSyxTQUFTLE1BQU0sb0JBQW9CLENBQUM7QUFDaEQsT0FBTyxLQUFLLE1BQU0sTUFBTSxpQkFBaUIsQ0FBQztBQUMxQyxPQUFPLEtBQUssUUFBUSxNQUFNLG1CQUFtQixDQUFDO0FBQzlDLE9BQU8sS0FBSyxLQUFLLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEMsT0FBTyxLQUFLLFFBQVEsTUFBTSxvQkFBb0IsQ0FBQztBQUMvQyxPQUFPLEtBQUssTUFBTSxNQUFNLGlCQUFpQixDQUFDO0FBQzFDLE9BQU8sS0FBSyxRQUFRLE1BQU0sbUJBQW1CLENBQUM7QUFDOUMsT0FBTyxLQUFLLE9BQU8sTUFBTSxrQkFBa0IsQ0FBQztBQUM1QyxPQUFPLEtBQUssTUFBTSxNQUFNLGlCQUFpQixDQUFDO0FBQzFDLE9BQU8sS0FBSyxNQUFNLE1BQU0saUJBQWlCLENBQUM7QUFDMUMsT0FBTyxLQUFLLE1BQU0sTUFBTSxpQkFBaUIsQ0FBQztBQUMxQyxPQUFPLEtBQUssSUFBSSxNQUFNLGVBQWUsQ0FBQztBQUV0QyxPQUFPLEVBQUUsU0FBUyxFQUFFLG9CQUFvQixFQUFFLHVCQUF1QixFQUFFLHFCQUFxQixFQUFFLHdCQUF3QixFQUFFLGtCQUFrQixFQUFFLHdCQUF3QixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFMUwsT0FBTyxFQUFFLHdCQUF3QixFQUFFLHVCQUF1QixFQUFFLHNCQUFzQixFQUFFLGtCQUFrQixFQUFFLHdCQUF3QixFQUFFLHVCQUF1QixFQUFFLDJCQUEyQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFFbE4sT0FBTyxFQUFFLGVBQWUsRUFBRSxTQUFTLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUd6RCxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsMEJBQTBCLEVBQUUsc0JBQXNCLEVBQUUsdUJBQXVCLEVBQUUscUJBQXFCLEVBQUUscUJBQXFCLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIEdFTkVSQVRFRCBieSBwcm9qZW4gd2F0Y2ggLSBETyBOT1QgRURJVC5cbi8vIFJlZ2VuZXJhdGVkIGZyb20gdGhlIGV4cG9ydGluZyBtb2R1bGVzIGluIC4vc3JjLlxuLy8gSGFuZCBlZGl0cyBhcmUgb3ZlcndyaXR0ZW4gb24gdGhlIG5leHQgd2F0Y2g7IHRoaXMgZmlsZSBpcyByZWFkLW9ubHkuXG5cbmV4cG9ydCBjb25zdCBQQUNLQUdFX0lERU5USUZJRVIgPSBcIkBkYngtdG9vbHMvYXBwa2l0LXdlYi1zZWFyY2hcIjtcbmV4cG9ydCBjb25zdCBQQUNLQUdFX1ZFUlNJT04gPSBcIjAuOS42XCI7XG5leHBvcnQgKiBhcyBhbGxvd2xpc3QgZnJvbSBcIi4vc3JjL2FsbG93bGlzdC50c1wiO1xuZXhwb3J0ICogYXMgY29uZmlnIGZyb20gXCIuL3NyYy9jb25maWcudHNcIjtcbmV4cG9ydCAqIGFzIGRlZmF1bHRzIGZyb20gXCIuL3NyYy9kZWZhdWx0cy50c1wiO1xuZXhwb3J0ICogYXMgZmV0Y2ggZnJvbSBcIi4vc3JjL2ZldGNoLnRzXCI7XG5leHBvcnQgKiBhcyBodG1sVGV4dCBmcm9tIFwiLi9zcmMvaHRtbC10ZXh0LnRzXCI7XG5leHBvcnQgKiBhcyBwbHVnaW4gZnJvbSBcIi4vc3JjL3BsdWdpbi50c1wiO1xuZXhwb3J0ICogYXMgcHJvdmlkZXIgZnJvbSBcIi4vc3JjL3Byb3ZpZGVyLnRzXCI7XG5leHBvcnQgKiBhcyBydW50aW1lIGZyb20gXCIuL3NyYy9ydW50aW1lLnRzXCI7XG5leHBvcnQgKiBhcyBzY2hlbWEgZnJvbSBcIi4vc3JjL3NjaGVtYS50c1wiO1xuZXhwb3J0ICogYXMgc2NyYXBlIGZyb20gXCIuL3NyYy9zY3JhcGUudHNcIjtcbmV4cG9ydCAqIGFzIHNlYXJjaCBmcm9tIFwiLi9zcmMvc2VhcmNoLnRzXCI7XG5leHBvcnQgKiBhcyB0b29sIGZyb20gXCIuL3NyYy90b29sLnRzXCI7XG5leHBvcnQgdHlwZSB7IFVybEFsbG93TGlzdCB9IGZyb20gXCIuL3NyYy9hbGxvd2xpc3QudHNcIjtcbmV4cG9ydCB7IE1PREVMX0VOViwgU0VSVklOR19FTkRQT0lOVF9FTlYsIERFRkFVTFRfTU9ERUxfRkFMTEJBQ0tTLCBERUZBVUxUX01BWF9DSVRBVElPTlMsIERFRkFVTFRfRkVUQ0hfTUFYX0xFTkdUSCwgREVGQVVMVF9USU1FT1VUX01TLCBXRUJfU0VBUkNIX0NPTkZJR19TQ0hFTUEgfSBmcm9tIFwiLi9zcmMvY29uZmlnLnRzXCI7XG5leHBvcnQgdHlwZSB7IEFwcHJvdmFsR2F0ZSwgQXBwcm92YWxQb2xpY3ksIFVybFBvbGljeU1vZGUsIE1vZGVsU291cmNlLCBXZWJTZWFyY2hQbHVnaW5Db25maWcsIFJlc29sdmVkV2ViU2VhcmNoQ29uZmlnIH0gZnJvbSBcIi4vc3JjL2NvbmZpZy50c1wiO1xuZXhwb3J0IHsgU0VBUkNIX0NBQ0hFX1RUTF9TRUNPTkRTLCBGRVRDSF9DQUNIRV9UVExfU0VDT05EUywgU0VSVklOR19SRVRSWV9BVFRFTVBUUywgV0VCX1JFVFJZX0FUVEVNUFRTLCB3ZWJTZWFyY2hFeGVjdXRlRGVmYXVsdHMsIHdlYkZldGNoRXhlY3V0ZURlZmF1bHRzLCBzY3JhcGVTZWFyY2hFeGVjdXRlRGVmYXVsdHMgfSBmcm9tIFwiLi9zcmMvZGVmYXVsdHMudHNcIjtcbmV4cG9ydCB0eXBlIHsgV2ViU2VhcmNoRXhlY3V0ZUNvbmZpZywgV2ViU2VhcmNoRXhlY3V0aW9uU2V0dGluZ3MgfSBmcm9tIFwiLi9zcmMvZGVmYXVsdHMudHNcIjtcbmV4cG9ydCB7IFdlYlNlYXJjaFBsdWdpbiwgd2ViU2VhcmNoIH0gZnJvbSBcIi4vc3JjL3BsdWdpbi50c1wiO1xuZXhwb3J0IHsgV0VCX1NFQVJDSF9QUk9WSURFUlMgfSBmcm9tIFwiLi9zcmMvcHJvdmlkZXIudHNcIjtcbmV4cG9ydCB0eXBlIHsgV2ViU2VhcmNoUHJvdmlkZXIsIFdlYlNlYXJjaFByb3ZpZGVyU3BlYyB9IGZyb20gXCIuL3NyYy9wcm92aWRlci50c1wiO1xuZXhwb3J0IHR5cGUgeyBXZWJTZWFyY2hFeGVjdXRvciwgV2ViU2VhcmNoUnVudGltZSwgV2ViU2VhcmNoUnVudGltZUlucHV0IH0gZnJvbSBcIi4vc3JjL3J1bnRpbWUudHNcIjtcbmV4cG9ydCB7IFdFQl9TRUFSQ0hfVE9PTF9ERVNDUklQVElPTiwgV0VCX0ZFVENIX1RPT0xfREVTQ1JJUFRJT04sIHdlYlNlYXJjaFJlcXVlc3RTY2hlbWEsIHdlYlNlYXJjaENpdGF0aW9uU2NoZW1hLCB3ZWJTZWFyY2hSZXN1bHRTY2hlbWEsIHdlYkZldGNoUmVxdWVzdFNjaGVtYSwgd2ViRmV0Y2hSZXN1bHRTY2hlbWEgfSBmcm9tIFwiLi9zcmMvc2NoZW1hLnRzXCI7XG5leHBvcnQgdHlwZSB7IFdlYlNlYXJjaFJlcXVlc3QsIFdlYlNlYXJjaENpdGF0aW9uLCBXZWJTZWFyY2hSZXN1bHQsIFdlYkZldGNoUmVxdWVzdCwgV2ViRmV0Y2hSZXN1bHQgfSBmcm9tIFwiLi9zcmMvc2NoZW1hLnRzXCI7XG5leHBvcnQgdHlwZSB7IFdlYlNlYXJjaENvbnRleHQgfSBmcm9tIFwiLi9zcmMvc2VhcmNoLnRzXCI7XG5leHBvcnQgdHlwZSB7IFdlYlNlYXJjaFRvb2xPcHRpb25zIH0gZnJvbSBcIi4vc3JjL3Rvb2wudHNcIjtcbiJdfQ==
@@ -30,7 +30,7 @@
30
30
  */
31
31
  import { ValidationError } from "@databricks/appkit";
32
32
  import { match } from "@dbx-tools/path";
33
- import { string } from "@dbx-tools/shared-core";
33
+ import { stringUtils } from "@dbx-tools/shared-core";
34
34
  /** Strip a leading `scheme://` (or bare `scheme:`) from a pattern. */
35
35
  function stripScheme(pattern) {
36
36
  return pattern.replace(/^[a-z][a-z0-9+.-]*:\/\//i, "").replace(/^[a-z][a-z0-9+.-]*:/i, "");
@@ -51,7 +51,7 @@ export function normalizeUrlPattern(pattern) {
51
51
  * identically.
52
52
  */
53
53
  export function parseAllowedUrls(raw) {
54
- return string.parseList(raw, normalizeUrlPattern);
54
+ return stringUtils.parseList(raw, normalizeUrlPattern);
55
55
  }
56
56
  /** Compile a single normalized entry into a {@link CompiledPattern}. */
57
57
  function compilePattern(pattern) {
@@ -110,4 +110,4 @@ export function assertUrlAllowed(url, allow) {
110
110
  throw ValidationError.invalidValue("url", url, `a URL permitted by the configured allow-list (${allow.patterns.join(", ")})`);
111
111
  }
112
112
  }
113
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWxsb3dsaXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2FsbG93bGlzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0E2Qkc7QUFFSCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDckQsT0FBTyxFQUFFLEtBQUssRUFBb0IsTUFBTSxpQkFBaUIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFZaEQsc0VBQXNFO0FBQ3RFLFNBQVMsV0FBVyxDQUFDLE9BQWU7SUFDbEMsT0FBTyxPQUFPLENBQUMsT0FBTyxDQUFDLDBCQUEwQixFQUFFLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxzQkFBc0IsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUM3RixDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILE1BQU0sVUFBVSxtQkFBbUIsQ0FBQyxPQUFlO0lBQ2pELE9BQU8sV0FBVyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO0FBQ3JDLENBQUM7QUFFRDs7Ozs7O0dBTUc7QUFDSCxNQUFNLFVBQVUsZ0JBQWdCLENBQUMsR0FBa0M7SUFDakUsT0FBTyxNQUFNLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxtQkFBbUIsQ0FBQyxDQUFDO0FBQ3BELENBQUM7QUFRRCx3RUFBd0U7QUFDeEUsU0FBUyxjQUFjLENBQUMsT0FBZTtJQUNyQyxJQUFJLE9BQU8sQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUMxQix3RUFBd0U7UUFDeEUsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLEtBQUssQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztJQUN2RSxDQUFDO0lBQ0Qsb0VBQW9FO0lBQ3BFLDhEQUE4RDtJQUM5RCxNQUFNLEtBQUssR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxLQUFLLE9BQU8sRUFBRSxDQUFDLENBQUM7SUFDNUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLEtBQUssQ0FBQyxhQUFhLENBQUMsR0FBRyxLQUFLLENBQUMsRUFBRSxDQUFDO0FBQ3hFLENBQUM7QUFFRCwyREFBMkQ7QUFDM0QsU0FBUyxVQUFVLENBQUMsR0FBVztJQUM3QixJQUFJLENBQUM7UUFDSCxNQUFNLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN2QixPQUFPO1lBQ0wsUUFBUSxFQUFFLENBQUMsQ0FBQyxRQUFRO1lBQ3BCLHlFQUF5RTtZQUN6RSxRQUFRLEVBQUUsR0FBRyxDQUFDLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQztTQUMxRCxDQUFDO0lBQ0osQ0FBQztJQUFDLE1BQU0sQ0FBQztRQUNQLE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7QUFDSCxDQUFDO0FBRUQ7Ozs7O0dBS0c7QUFDSCxNQUFNLFVBQVUsY0FBYyxDQUFDLFFBQTJCO0lBQ3hELElBQUksUUFBUSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUMxQixPQUFPLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNqRSxDQUFDO0lBQ0QsTUFBTSxRQUFRLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUM5QyxPQUFPO1FBQ0wsUUFBUTtRQUNSLFVBQVUsRUFBRSxJQUFJO1FBQ2hCLE1BQU0sRUFBRSxDQUFDLEdBQVcsRUFBRSxFQUFFO1lBQ3RCLE1BQU0sT0FBTyxHQUFHLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNoQyxJQUFJLENBQUMsT0FBTztnQkFBRSxPQUFPLEtBQUssQ0FBQztZQUMzQixPQUFPLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDNUQsQ0FBQztLQUNGLENBQUM7QUFDSixDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILE1BQU0sVUFBVSxnQkFBZ0IsQ0FBQyxHQUFXLEVBQUUsS0FBbUI7SUFDL0QsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUN2QixNQUFNLGVBQWUsQ0FBQyxZQUFZLENBQ2hDLEtBQUssRUFDTCxHQUFHLEVBQ0gsaURBQWlELEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQzlFLENBQUM7SUFDSixDQUFDO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogVVJMIGFsbG93LWxpc3QgcG9saWN5IGZvciB0aGUgd2ViLXNlYXJjaCBhZGQtb24uXG4gKlxuICogQSBjb25maWd1cmVkIGFsbG93LWxpc3QgcmVzdHJpY3RzIHdoaWNoIFVSTHMgdGhlIHRvb2xzIHdpbGwgc3VyZmFjZSBvclxuICogZmV0Y2guIEVhY2ggZW50cnkgaXMgYSBnbG9iIGNvbXBpbGVkIGJ5IGBAZGJ4LXRvb2xzL3BhdGhgJ3NcbiAqIHtAbGluayBtYXRjaC50b1BhdGhNYXRjaGVyfSAodGhlIHNhbWUgYE1pbmltYXRjaGAtYmFja2VkIG1hdGNoZXIgdGhlXG4gKiBwYWNrYWdlJ3MgZmlsZSBzY2FubmluZyB1c2VzKS4gQmVjYXVzZSB0aGF0IG1hdGNoZXIgdHJlYXRzIGAvYCBhcyBhXG4gKiBwYXRoLXNlZ21lbnQgYm91bmRhcnksIGVudHJpZXMgYXJlIG1hdGNoZWQgYWdhaW5zdCB0aGUgcmlnaHQgc2xpY2Ugb2YgdGhlXG4gKiBVUkwgcmF0aGVyIHRoYW4gdGhlIHJhdyBgaHJlZmA6XG4gKlxuICogLSBBICoqaG9zdCoqIGVudHJ5IChubyBgL2AgYWZ0ZXIgdGhlIG9wdGlvbmFsIHNjaGVtZSwgZS5nLiBgZGF0YWJyaWNrcy5jb21gXG4gKiAgIG9yIGAqLmRhdGFicmlja3MuY29tYCkgaXMgdGVzdGVkIGFnYWluc3QgdGhlIFVSTCdzIGBob3N0bmFtZWAuIEEgYmFyZVxuICogICBob3N0IHdpdGggbm8gd2lsZGNhcmQgYWxzbyBtYXRjaGVzIGl0cyBzdWJkb21haW5zLCBzbyBgZGF0YWJyaWNrcy5jb21gXG4gKiAgIHBlcm1pdHMgYGRvY3MuZGF0YWJyaWNrcy5jb21gIC0gdGhlIGludHVpdGl2ZSByZWFkaW5nIG9mIGEgZG9tYWluXG4gKiAgIGFsbG93LWxpc3QuXG4gKiAtIEEgKipwYXRoKiogZW50cnkgKGNvbnRhaW5zIGEgYC9gLCBlLmcuIGBkb2NzLmV4YW1wbGUuY29tL2FwaS8qKmApIGlzXG4gKiAgIHRlc3RlZCBhZ2FpbnN0IGBob3N0ICsgcGF0aG5hbWVgIChzY2hlbWUgYW5kIHF1ZXJ5IHN0cmlwcGVkKSwgc28gcGF0aFxuICogICBnbG9icyB3b3JrIHdpdGhvdXQgZmlnaHRpbmcgdGhlIGBodHRwczovL2AgcHJlZml4LlxuICpcbiAqIEVuZm9yY2VtZW50IGlzIGFzeW1tZXRyaWMgYnkgZGVzaWduIChzZWUgdGhlIG1vZHVsZSdzIHR3byBjb25zdW1lcnMpOlxuICogYHdlYl9zZWFyY2hgIHJlc3VsdHMgYXJlIFNJTEVOVExZIGZpbHRlcmVkIHRvIHRoZSBwZXJtaXR0ZWQgc2V0LCB3aGlsZSBhblxuICogZXhwbGljaXQgYHdlYl9mZXRjaGAgb2YgYSBkaXNhbGxvd2VkIFVSTCBpcyByZWZ1c2VkIHdpdGggYW4gZXJyb3IgLSB0aGVcbiAqIHNlYXJjaCBuZXZlciBsZWFrcyBhIFVSTCB0aGUgY2FsbGVyIHRoZW4gY2FuJ3QgZmV0Y2gsIGJ1dCBhIGRpcmVjdCBmZXRjaFxuICogb2YgYSBibG9ja2VkIFVSTCBpcyBhIHZpc2libGUsIGNvcnJlY3RhYmxlIG1pc3Rha2UgcmF0aGVyIHRoYW4gYSBzaWxlbnRcbiAqIGVtcHR5LlxuICpcbiAqIEFuIGVtcHR5IC8gYWJzZW50IGFsbG93LWxpc3QgcGVybWl0cyBldmVyeXRoaW5nLlxuICpcbiAqIEBtb2R1bGVcbiAqL1xuXG5pbXBvcnQgeyBWYWxpZGF0aW9uRXJyb3IgfSBmcm9tIFwiQGRhdGFicmlja3MvYXBwa2l0XCI7XG5pbXBvcnQgeyBtYXRjaCwgdHlwZSBQYXRoTWF0Y2hlciB9IGZyb20gXCJAZGJ4LXRvb2xzL3BhdGhcIjtcbmltcG9ydCB7IHN0cmluZyB9IGZyb20gXCJAZGJ4LXRvb2xzL3NoYXJlZC1jb3JlXCI7XG5cbi8qKiBBIGNvbXBpbGVkIFVSTCBhbGxvdy1saXN0LiBCdWlsZCBvbmUgd2l0aCB7QGxpbmsgdG9VcmxBbGxvd0xpc3R9LiAqL1xuZXhwb3J0IGludGVyZmFjZSBVcmxBbGxvd0xpc3Qge1xuICAvKiogVGhlIG5vcm1hbGl6ZWQgZW50cmllcyBiYWNraW5nIHRoaXMgbGlzdCAoZm9yIGRpYWdub3N0aWNzKS4gKi9cbiAgcmVhZG9ubHkgcGF0dGVybnM6IHJlYWRvbmx5IHN0cmluZ1tdO1xuICAvKiogV2hldGhlciB0aGUgbGlzdCBhY3R1YWxseSByZXN0cmljdHMgYW55dGhpbmcgKGBmYWxzZWAgPT0gcGVybWl0IGFsbCkuICovXG4gIHJlYWRvbmx5IHJlc3RyaWN0ZWQ6IGJvb2xlYW47XG4gIC8qKiBXaGV0aGVyIGB1cmxgIGlzIHBlcm1pdHRlZC4gQW4gdW5yZXN0cmljdGVkIGxpc3QgcGVybWl0cyBldmVyeXRoaW5nLiAqL1xuICBhbGxvd3ModXJsOiBzdHJpbmcpOiBib29sZWFuO1xufVxuXG4vKiogU3RyaXAgYSBsZWFkaW5nIGBzY2hlbWU6Ly9gIChvciBiYXJlIGBzY2hlbWU6YCkgZnJvbSBhIHBhdHRlcm4uICovXG5mdW5jdGlvbiBzdHJpcFNjaGVtZShwYXR0ZXJuOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gcGF0dGVybi5yZXBsYWNlKC9eW2Etel1bYS16MC05Ky4tXSo6XFwvXFwvL2ksIFwiXCIpLnJlcGxhY2UoL15bYS16XVthLXowLTkrLi1dKjovaSwgXCJcIik7XG59XG5cbi8qKlxuICogTm9ybWFsaXplIG9uZSByYXcgYWxsb3ctbGlzdCBlbnRyeTogdHJpbSBpdCBhbmQgZHJvcCBhbnkgc2NoZW1lLiBUaGVcbiAqIHNjaGVtZSBpcyBpcnJlbGV2YW50IHRvIG1hdGNoaW5nICh3ZSBjb21wYXJlIGFnYWluc3QgaG9zdG5hbWUgLyBob3N0K3BhdGgpLFxuICogc28gYGh0dHBzOi8vZG9jcy5leGFtcGxlLmNvbS94YCBhbmQgYGRvY3MuZXhhbXBsZS5jb20veGAgYXJlIGVxdWl2YWxlbnQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBub3JtYWxpemVVcmxQYXR0ZXJuKHBhdHRlcm46IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBzdHJpcFNjaGVtZShwYXR0ZXJuLnRyaW0oKSk7XG59XG5cbi8qKlxuICogUGFyc2UgYSByYXcgYWxsb3ctbGlzdCBmcm9tIGNvbmZpZyAoYHN0cmluZ1tdYCkgb3IgYW4gZW52IHZhciAoYSBDU1YgL1xuICogd2hpdGVzcGFjZS1zZXBhcmF0ZWQgc3RyaW5nKSBpbnRvIGEgbm9ybWFsaXplZCwgZGUtZHVwbGljYXRlZCBlbnRyeSBsaXN0LlxuICogRW50cmllcyBhcmUgdHJpbW1lZCBhbmQgc2NoZW1lLXN0cmlwcGVkOyBlbXB0aWVzIGFyZSBkcm9wcGVkLiBNaXJyb3JzIHRoZVxuICogZW1haWwgYWRkLW9uJ3MgYHBhcnNlQWxsb3dlZFNlbmRlcnNgIHNvIHRoZSB0d28gcG9saWNpZXMgcmVhZCB0aGVpciBjb25maWdcbiAqIGlkZW50aWNhbGx5LlxuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VBbGxvd2VkVXJscyhyYXc6IHN0cmluZyB8IHN0cmluZ1tdIHwgdW5kZWZpbmVkKTogc3RyaW5nW10ge1xuICByZXR1cm4gc3RyaW5nLnBhcnNlTGlzdChyYXcsIG5vcm1hbGl6ZVVybFBhdHRlcm4pO1xufVxuXG4vKiogT25lIGNvbXBpbGVkIGVudHJ5OiB3aGljaCBVUkwgc2xpY2UgaXQgdGVzdHMsIGFuZCB0aGUgbWF0Y2hlciBmb3IgaXQuICovXG5pbnRlcmZhY2UgQ29tcGlsZWRQYXR0ZXJuIHtcbiAgdGFyZ2V0OiBcImhvc3RuYW1lXCIgfCBcImhvc3RQYXRoXCI7XG4gIG1hdGNoZXI6IFBhdGhNYXRjaGVyO1xufVxuXG4vKiogQ29tcGlsZSBhIHNpbmdsZSBub3JtYWxpemVkIGVudHJ5IGludG8gYSB7QGxpbmsgQ29tcGlsZWRQYXR0ZXJufS4gKi9cbmZ1bmN0aW9uIGNvbXBpbGVQYXR0ZXJuKHBhdHRlcm46IHN0cmluZyk6IENvbXBpbGVkUGF0dGVybiB7XG4gIGlmIChwYXR0ZXJuLmluY2x1ZGVzKFwiL1wiKSkge1xuICAgIC8vIEEgcGF0aCBlbnRyeSBtYXRjaGVzIGFnYWluc3QgYGhvc3QgKyBwYXRobmFtZWAgKG5vIHNjaGVtZSwgbm8gcXVlcnkpLlxuICAgIHJldHVybiB7IHRhcmdldDogXCJob3N0UGF0aFwiLCBtYXRjaGVyOiBtYXRjaC50b1BhdGhNYXRjaGVyKHBhdHRlcm4pIH07XG4gIH1cbiAgLy8gQSBob3N0IGVudHJ5IG1hdGNoZXMgdGhlIGhvc3RuYW1lLiBBIGJhcmUgaG9zdCAobm8gd2lsZGNhcmQpIGFsc29cbiAgLy8gcGVybWl0cyBpdHMgc3ViZG9tYWlucyB2aWEgYW4gYWRkZWQgYCouPGhvc3Q+YCBhbHRlcm5hdGl2ZS5cbiAgY29uc3QgZ2xvYnMgPSBwYXR0ZXJuLmluY2x1ZGVzKFwiKlwiKSA/IFtwYXR0ZXJuXSA6IFtwYXR0ZXJuLCBgKi4ke3BhdHRlcm59YF07XG4gIHJldHVybiB7IHRhcmdldDogXCJob3N0bmFtZVwiLCBtYXRjaGVyOiBtYXRjaC50b1BhdGhNYXRjaGVyKC4uLmdsb2JzKSB9O1xufVxuXG4vKiogVGhlIFVSTCBzbGljZXMgYSBjb21waWxlZCBwYXR0ZXJuIGlzIHRlc3RlZCBhZ2FpbnN0LiAqL1xuZnVuY3Rpb24gdXJsVGFyZ2V0cyh1cmw6IHN0cmluZyk6IHsgaG9zdG5hbWU6IHN0cmluZzsgaG9zdFBhdGg6IHN0cmluZyB9IHwgdW5kZWZpbmVkIHtcbiAgdHJ5IHtcbiAgICBjb25zdCB1ID0gbmV3IFVSTCh1cmwpO1xuICAgIHJldHVybiB7XG4gICAgICBob3N0bmFtZTogdS5ob3N0bmFtZSxcbiAgICAgIC8vIERyb3AgYSB0cmFpbGluZyBzbGFzaCBzbyBgZXhhbXBsZS5jb20vYXBpYCBtYXRjaGVzIGBleGFtcGxlLmNvbS9hcGkvYC5cbiAgICAgIGhvc3RQYXRoOiBgJHt1Lmhvc3RuYW1lfSR7dS5wYXRobmFtZX1gLnJlcGxhY2UoL1xcLyQvLCBcIlwiKSxcbiAgICB9O1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG59XG5cbi8qKlxuICogQ29tcGlsZSBhIG5vcm1hbGl6ZWQgZW50cnkgbGlzdCBpbnRvIGEge0BsaW5rIFVybEFsbG93TGlzdH0uIEFuIGVtcHR5IGxpc3RcbiAqIHlpZWxkcyBhIHBlcm1pdC1hbGwgYWxsb3ctbGlzdCB3aG9zZSB7QGxpbmsgVXJsQWxsb3dMaXN0LmFsbG93c30gYWx3YXlzXG4gKiByZXR1cm5zIGB0cnVlYC4gQSBVUkwgdGhhdCBjYW4ndCBiZSBwYXJzZWQgaXMgbmV2ZXIgcGVybWl0dGVkIGJ5IGFcbiAqIHJlc3RyaWN0ZWQgbGlzdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvVXJsQWxsb3dMaXN0KHBhdHRlcm5zOiByZWFkb25seSBzdHJpbmdbXSk6IFVybEFsbG93TGlzdCB7XG4gIGlmIChwYXR0ZXJucy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4geyBwYXR0ZXJuczogW10sIHJlc3RyaWN0ZWQ6IGZhbHNlLCBhbGxvd3M6ICgpID0+IHRydWUgfTtcbiAgfVxuICBjb25zdCBjb21waWxlZCA9IHBhdHRlcm5zLm1hcChjb21waWxlUGF0dGVybik7XG4gIHJldHVybiB7XG4gICAgcGF0dGVybnMsXG4gICAgcmVzdHJpY3RlZDogdHJ1ZSxcbiAgICBhbGxvd3M6ICh1cmw6IHN0cmluZykgPT4ge1xuICAgICAgY29uc3QgdGFyZ2V0cyA9IHVybFRhcmdldHModXJsKTtcbiAgICAgIGlmICghdGFyZ2V0cykgcmV0dXJuIGZhbHNlO1xuICAgICAgcmV0dXJuIGNvbXBpbGVkLnNvbWUoKGMpID0+IGMubWF0Y2hlcih0YXJnZXRzW2MudGFyZ2V0XSkpO1xuICAgIH0sXG4gIH07XG59XG5cbi8qKlxuICogVGhyb3cgd2hlbiBgdXJsYCBpcyBub3QgcGVybWl0dGVkIGJ5IHRoZSBhbGxvdy1saXN0LiBOby1vcCB3aGVuIHRoZVxuICogYWxsb3ctbGlzdCBpcyB1bnJlc3RyaWN0ZWQuIFRoZSBzaW5nbGUgZW5mb3JjZW1lbnQgcG9pbnQgZm9yIHRoZVxuICogYHdlYl9mZXRjaGAgcGF0aC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFzc2VydFVybEFsbG93ZWQodXJsOiBzdHJpbmcsIGFsbG93OiBVcmxBbGxvd0xpc3QpOiB2b2lkIHtcbiAgaWYgKCFhbGxvdy5hbGxvd3ModXJsKSkge1xuICAgIHRocm93IFZhbGlkYXRpb25FcnJvci5pbnZhbGlkVmFsdWUoXG4gICAgICBcInVybFwiLFxuICAgICAgdXJsLFxuICAgICAgYGEgVVJMIHBlcm1pdHRlZCBieSB0aGUgY29uZmlndXJlZCBhbGxvdy1saXN0ICgke2FsbG93LnBhdHRlcm5zLmpvaW4oXCIsIFwiKX0pYCxcbiAgICApO1xuICB9XG59XG4iXX0=
113
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWxsb3dsaXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2FsbG93bGlzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0E2Qkc7QUFFSCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDckQsT0FBTyxFQUFFLEtBQUssRUFBb0IsTUFBTSxpQkFBaUIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFZckQsc0VBQXNFO0FBQ3RFLFNBQVMsV0FBVyxDQUFDLE9BQWU7SUFDbEMsT0FBTyxPQUFPLENBQUMsT0FBTyxDQUFDLDBCQUEwQixFQUFFLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxzQkFBc0IsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUM3RixDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILE1BQU0sVUFBVSxtQkFBbUIsQ0FBQyxPQUFlO0lBQ2pELE9BQU8sV0FBVyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO0FBQ3JDLENBQUM7QUFFRDs7Ozs7O0dBTUc7QUFDSCxNQUFNLFVBQVUsZ0JBQWdCLENBQUMsR0FBa0M7SUFDakUsT0FBTyxXQUFXLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxtQkFBbUIsQ0FBQyxDQUFDO0FBQ3pELENBQUM7QUFRRCx3RUFBd0U7QUFDeEUsU0FBUyxjQUFjLENBQUMsT0FBZTtJQUNyQyxJQUFJLE9BQU8sQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUMxQix3RUFBd0U7UUFDeEUsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLEtBQUssQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztJQUN2RSxDQUFDO0lBQ0Qsb0VBQW9FO0lBQ3BFLDhEQUE4RDtJQUM5RCxNQUFNLEtBQUssR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxLQUFLLE9BQU8sRUFBRSxDQUFDLENBQUM7SUFDNUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLEtBQUssQ0FBQyxhQUFhLENBQUMsR0FBRyxLQUFLLENBQUMsRUFBRSxDQUFDO0FBQ3hFLENBQUM7QUFFRCwyREFBMkQ7QUFDM0QsU0FBUyxVQUFVLENBQUMsR0FBVztJQUM3QixJQUFJLENBQUM7UUFDSCxNQUFNLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN2QixPQUFPO1lBQ0wsUUFBUSxFQUFFLENBQUMsQ0FBQyxRQUFRO1lBQ3BCLHlFQUF5RTtZQUN6RSxRQUFRLEVBQUUsR0FBRyxDQUFDLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQztTQUMxRCxDQUFDO0lBQ0osQ0FBQztJQUFDLE1BQU0sQ0FBQztRQUNQLE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7QUFDSCxDQUFDO0FBRUQ7Ozs7O0dBS0c7QUFDSCxNQUFNLFVBQVUsY0FBYyxDQUFDLFFBQTJCO0lBQ3hELElBQUksUUFBUSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUMxQixPQUFPLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNqRSxDQUFDO0lBQ0QsTUFBTSxRQUFRLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUM5QyxPQUFPO1FBQ0wsUUFBUTtRQUNSLFVBQVUsRUFBRSxJQUFJO1FBQ2hCLE1BQU0sRUFBRSxDQUFDLEdBQVcsRUFBRSxFQUFFO1lBQ3RCLE1BQU0sT0FBTyxHQUFHLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNoQyxJQUFJLENBQUMsT0FBTztnQkFBRSxPQUFPLEtBQUssQ0FBQztZQUMzQixPQUFPLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDNUQsQ0FBQztLQUNGLENBQUM7QUFDSixDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILE1BQU0sVUFBVSxnQkFBZ0IsQ0FBQyxHQUFXLEVBQUUsS0FBbUI7SUFDL0QsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUN2QixNQUFNLGVBQWUsQ0FBQyxZQUFZLENBQ2hDLEtBQUssRUFDTCxHQUFHLEVBQ0gsaURBQWlELEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQzlFLENBQUM7SUFDSixDQUFDO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogVVJMIGFsbG93LWxpc3QgcG9saWN5IGZvciB0aGUgd2ViLXNlYXJjaCBhZGQtb24uXG4gKlxuICogQSBjb25maWd1cmVkIGFsbG93LWxpc3QgcmVzdHJpY3RzIHdoaWNoIFVSTHMgdGhlIHRvb2xzIHdpbGwgc3VyZmFjZSBvclxuICogZmV0Y2guIEVhY2ggZW50cnkgaXMgYSBnbG9iIGNvbXBpbGVkIGJ5IGBAZGJ4LXRvb2xzL3BhdGhgJ3NcbiAqIHtAbGluayBtYXRjaC50b1BhdGhNYXRjaGVyfSAodGhlIHNhbWUgYE1pbmltYXRjaGAtYmFja2VkIG1hdGNoZXIgdGhlXG4gKiBwYWNrYWdlJ3MgZmlsZSBzY2FubmluZyB1c2VzKS4gQmVjYXVzZSB0aGF0IG1hdGNoZXIgdHJlYXRzIGAvYCBhcyBhXG4gKiBwYXRoLXNlZ21lbnQgYm91bmRhcnksIGVudHJpZXMgYXJlIG1hdGNoZWQgYWdhaW5zdCB0aGUgcmlnaHQgc2xpY2Ugb2YgdGhlXG4gKiBVUkwgcmF0aGVyIHRoYW4gdGhlIHJhdyBgaHJlZmA6XG4gKlxuICogLSBBICoqaG9zdCoqIGVudHJ5IChubyBgL2AgYWZ0ZXIgdGhlIG9wdGlvbmFsIHNjaGVtZSwgZS5nLiBgZGF0YWJyaWNrcy5jb21gXG4gKiAgIG9yIGAqLmRhdGFicmlja3MuY29tYCkgaXMgdGVzdGVkIGFnYWluc3QgdGhlIFVSTCdzIGBob3N0bmFtZWAuIEEgYmFyZVxuICogICBob3N0IHdpdGggbm8gd2lsZGNhcmQgYWxzbyBtYXRjaGVzIGl0cyBzdWJkb21haW5zLCBzbyBgZGF0YWJyaWNrcy5jb21gXG4gKiAgIHBlcm1pdHMgYGRvY3MuZGF0YWJyaWNrcy5jb21gIC0gdGhlIGludHVpdGl2ZSByZWFkaW5nIG9mIGEgZG9tYWluXG4gKiAgIGFsbG93LWxpc3QuXG4gKiAtIEEgKipwYXRoKiogZW50cnkgKGNvbnRhaW5zIGEgYC9gLCBlLmcuIGBkb2NzLmV4YW1wbGUuY29tL2FwaS8qKmApIGlzXG4gKiAgIHRlc3RlZCBhZ2FpbnN0IGBob3N0ICsgcGF0aG5hbWVgIChzY2hlbWUgYW5kIHF1ZXJ5IHN0cmlwcGVkKSwgc28gcGF0aFxuICogICBnbG9icyB3b3JrIHdpdGhvdXQgZmlnaHRpbmcgdGhlIGBodHRwczovL2AgcHJlZml4LlxuICpcbiAqIEVuZm9yY2VtZW50IGlzIGFzeW1tZXRyaWMgYnkgZGVzaWduIChzZWUgdGhlIG1vZHVsZSdzIHR3byBjb25zdW1lcnMpOlxuICogYHdlYl9zZWFyY2hgIHJlc3VsdHMgYXJlIFNJTEVOVExZIGZpbHRlcmVkIHRvIHRoZSBwZXJtaXR0ZWQgc2V0LCB3aGlsZSBhblxuICogZXhwbGljaXQgYHdlYl9mZXRjaGAgb2YgYSBkaXNhbGxvd2VkIFVSTCBpcyByZWZ1c2VkIHdpdGggYW4gZXJyb3IgLSB0aGVcbiAqIHNlYXJjaCBuZXZlciBsZWFrcyBhIFVSTCB0aGUgY2FsbGVyIHRoZW4gY2FuJ3QgZmV0Y2gsIGJ1dCBhIGRpcmVjdCBmZXRjaFxuICogb2YgYSBibG9ja2VkIFVSTCBpcyBhIHZpc2libGUsIGNvcnJlY3RhYmxlIG1pc3Rha2UgcmF0aGVyIHRoYW4gYSBzaWxlbnRcbiAqIGVtcHR5LlxuICpcbiAqIEFuIGVtcHR5IC8gYWJzZW50IGFsbG93LWxpc3QgcGVybWl0cyBldmVyeXRoaW5nLlxuICpcbiAqIEBtb2R1bGVcbiAqL1xuXG5pbXBvcnQgeyBWYWxpZGF0aW9uRXJyb3IgfSBmcm9tIFwiQGRhdGFicmlja3MvYXBwa2l0XCI7XG5pbXBvcnQgeyBtYXRjaCwgdHlwZSBQYXRoTWF0Y2hlciB9IGZyb20gXCJAZGJ4LXRvb2xzL3BhdGhcIjtcbmltcG9ydCB7IHN0cmluZ1V0aWxzIH0gZnJvbSBcIkBkYngtdG9vbHMvc2hhcmVkLWNvcmVcIjtcblxuLyoqIEEgY29tcGlsZWQgVVJMIGFsbG93LWxpc3QuIEJ1aWxkIG9uZSB3aXRoIHtAbGluayB0b1VybEFsbG93TGlzdH0uICovXG5leHBvcnQgaW50ZXJmYWNlIFVybEFsbG93TGlzdCB7XG4gIC8qKiBUaGUgbm9ybWFsaXplZCBlbnRyaWVzIGJhY2tpbmcgdGhpcyBsaXN0IChmb3IgZGlhZ25vc3RpY3MpLiAqL1xuICByZWFkb25seSBwYXR0ZXJuczogcmVhZG9ubHkgc3RyaW5nW107XG4gIC8qKiBXaGV0aGVyIHRoZSBsaXN0IGFjdHVhbGx5IHJlc3RyaWN0cyBhbnl0aGluZyAoYGZhbHNlYCA9PSBwZXJtaXQgYWxsKS4gKi9cbiAgcmVhZG9ubHkgcmVzdHJpY3RlZDogYm9vbGVhbjtcbiAgLyoqIFdoZXRoZXIgYHVybGAgaXMgcGVybWl0dGVkLiBBbiB1bnJlc3RyaWN0ZWQgbGlzdCBwZXJtaXRzIGV2ZXJ5dGhpbmcuICovXG4gIGFsbG93cyh1cmw6IHN0cmluZyk6IGJvb2xlYW47XG59XG5cbi8qKiBTdHJpcCBhIGxlYWRpbmcgYHNjaGVtZTovL2AgKG9yIGJhcmUgYHNjaGVtZTpgKSBmcm9tIGEgcGF0dGVybi4gKi9cbmZ1bmN0aW9uIHN0cmlwU2NoZW1lKHBhdHRlcm46IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBwYXR0ZXJuLnJlcGxhY2UoL15bYS16XVthLXowLTkrLi1dKjpcXC9cXC8vaSwgXCJcIikucmVwbGFjZSgvXlthLXpdW2EtejAtOSsuLV0qOi9pLCBcIlwiKTtcbn1cblxuLyoqXG4gKiBOb3JtYWxpemUgb25lIHJhdyBhbGxvdy1saXN0IGVudHJ5OiB0cmltIGl0IGFuZCBkcm9wIGFueSBzY2hlbWUuIFRoZVxuICogc2NoZW1lIGlzIGlycmVsZXZhbnQgdG8gbWF0Y2hpbmcgKHdlIGNvbXBhcmUgYWdhaW5zdCBob3N0bmFtZSAvIGhvc3QrcGF0aCksXG4gKiBzbyBgaHR0cHM6Ly9kb2NzLmV4YW1wbGUuY29tL3hgIGFuZCBgZG9jcy5leGFtcGxlLmNvbS94YCBhcmUgZXF1aXZhbGVudC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG5vcm1hbGl6ZVVybFBhdHRlcm4ocGF0dGVybjogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHN0cmlwU2NoZW1lKHBhdHRlcm4udHJpbSgpKTtcbn1cblxuLyoqXG4gKiBQYXJzZSBhIHJhdyBhbGxvdy1saXN0IGZyb20gY29uZmlnIChgc3RyaW5nW11gKSBvciBhbiBlbnYgdmFyIChhIENTViAvXG4gKiB3aGl0ZXNwYWNlLXNlcGFyYXRlZCBzdHJpbmcpIGludG8gYSBub3JtYWxpemVkLCBkZS1kdXBsaWNhdGVkIGVudHJ5IGxpc3QuXG4gKiBFbnRyaWVzIGFyZSB0cmltbWVkIGFuZCBzY2hlbWUtc3RyaXBwZWQ7IGVtcHRpZXMgYXJlIGRyb3BwZWQuIE1pcnJvcnMgdGhlXG4gKiBlbWFpbCBhZGQtb24ncyBgcGFyc2VBbGxvd2VkU2VuZGVyc2Agc28gdGhlIHR3byBwb2xpY2llcyByZWFkIHRoZWlyIGNvbmZpZ1xuICogaWRlbnRpY2FsbHkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUFsbG93ZWRVcmxzKHJhdzogc3RyaW5nIHwgc3RyaW5nW10gfCB1bmRlZmluZWQpOiBzdHJpbmdbXSB7XG4gIHJldHVybiBzdHJpbmdVdGlscy5wYXJzZUxpc3QocmF3LCBub3JtYWxpemVVcmxQYXR0ZXJuKTtcbn1cblxuLyoqIE9uZSBjb21waWxlZCBlbnRyeTogd2hpY2ggVVJMIHNsaWNlIGl0IHRlc3RzLCBhbmQgdGhlIG1hdGNoZXIgZm9yIGl0LiAqL1xuaW50ZXJmYWNlIENvbXBpbGVkUGF0dGVybiB7XG4gIHRhcmdldDogXCJob3N0bmFtZVwiIHwgXCJob3N0UGF0aFwiO1xuICBtYXRjaGVyOiBQYXRoTWF0Y2hlcjtcbn1cblxuLyoqIENvbXBpbGUgYSBzaW5nbGUgbm9ybWFsaXplZCBlbnRyeSBpbnRvIGEge0BsaW5rIENvbXBpbGVkUGF0dGVybn0uICovXG5mdW5jdGlvbiBjb21waWxlUGF0dGVybihwYXR0ZXJuOiBzdHJpbmcpOiBDb21waWxlZFBhdHRlcm4ge1xuICBpZiAocGF0dGVybi5pbmNsdWRlcyhcIi9cIikpIHtcbiAgICAvLyBBIHBhdGggZW50cnkgbWF0Y2hlcyBhZ2FpbnN0IGBob3N0ICsgcGF0aG5hbWVgIChubyBzY2hlbWUsIG5vIHF1ZXJ5KS5cbiAgICByZXR1cm4geyB0YXJnZXQ6IFwiaG9zdFBhdGhcIiwgbWF0Y2hlcjogbWF0Y2gudG9QYXRoTWF0Y2hlcihwYXR0ZXJuKSB9O1xuICB9XG4gIC8vIEEgaG9zdCBlbnRyeSBtYXRjaGVzIHRoZSBob3N0bmFtZS4gQSBiYXJlIGhvc3QgKG5vIHdpbGRjYXJkKSBhbHNvXG4gIC8vIHBlcm1pdHMgaXRzIHN1YmRvbWFpbnMgdmlhIGFuIGFkZGVkIGAqLjxob3N0PmAgYWx0ZXJuYXRpdmUuXG4gIGNvbnN0IGdsb2JzID0gcGF0dGVybi5pbmNsdWRlcyhcIipcIikgPyBbcGF0dGVybl0gOiBbcGF0dGVybiwgYCouJHtwYXR0ZXJufWBdO1xuICByZXR1cm4geyB0YXJnZXQ6IFwiaG9zdG5hbWVcIiwgbWF0Y2hlcjogbWF0Y2gudG9QYXRoTWF0Y2hlciguLi5nbG9icykgfTtcbn1cblxuLyoqIFRoZSBVUkwgc2xpY2VzIGEgY29tcGlsZWQgcGF0dGVybiBpcyB0ZXN0ZWQgYWdhaW5zdC4gKi9cbmZ1bmN0aW9uIHVybFRhcmdldHModXJsOiBzdHJpbmcpOiB7IGhvc3RuYW1lOiBzdHJpbmc7IGhvc3RQYXRoOiBzdHJpbmcgfSB8IHVuZGVmaW5lZCB7XG4gIHRyeSB7XG4gICAgY29uc3QgdSA9IG5ldyBVUkwodXJsKTtcbiAgICByZXR1cm4ge1xuICAgICAgaG9zdG5hbWU6IHUuaG9zdG5hbWUsXG4gICAgICAvLyBEcm9wIGEgdHJhaWxpbmcgc2xhc2ggc28gYGV4YW1wbGUuY29tL2FwaWAgbWF0Y2hlcyBgZXhhbXBsZS5jb20vYXBpL2AuXG4gICAgICBob3N0UGF0aDogYCR7dS5ob3N0bmFtZX0ke3UucGF0aG5hbWV9YC5yZXBsYWNlKC9cXC8kLywgXCJcIiksXG4gICAgfTtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxufVxuXG4vKipcbiAqIENvbXBpbGUgYSBub3JtYWxpemVkIGVudHJ5IGxpc3QgaW50byBhIHtAbGluayBVcmxBbGxvd0xpc3R9LiBBbiBlbXB0eSBsaXN0XG4gKiB5aWVsZHMgYSBwZXJtaXQtYWxsIGFsbG93LWxpc3Qgd2hvc2Uge0BsaW5rIFVybEFsbG93TGlzdC5hbGxvd3N9IGFsd2F5c1xuICogcmV0dXJucyBgdHJ1ZWAuIEEgVVJMIHRoYXQgY2FuJ3QgYmUgcGFyc2VkIGlzIG5ldmVyIHBlcm1pdHRlZCBieSBhXG4gKiByZXN0cmljdGVkIGxpc3QuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b1VybEFsbG93TGlzdChwYXR0ZXJuczogcmVhZG9ubHkgc3RyaW5nW10pOiBVcmxBbGxvd0xpc3Qge1xuICBpZiAocGF0dGVybnMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIHsgcGF0dGVybnM6IFtdLCByZXN0cmljdGVkOiBmYWxzZSwgYWxsb3dzOiAoKSA9PiB0cnVlIH07XG4gIH1cbiAgY29uc3QgY29tcGlsZWQgPSBwYXR0ZXJucy5tYXAoY29tcGlsZVBhdHRlcm4pO1xuICByZXR1cm4ge1xuICAgIHBhdHRlcm5zLFxuICAgIHJlc3RyaWN0ZWQ6IHRydWUsXG4gICAgYWxsb3dzOiAodXJsOiBzdHJpbmcpID0+IHtcbiAgICAgIGNvbnN0IHRhcmdldHMgPSB1cmxUYXJnZXRzKHVybCk7XG4gICAgICBpZiAoIXRhcmdldHMpIHJldHVybiBmYWxzZTtcbiAgICAgIHJldHVybiBjb21waWxlZC5zb21lKChjKSA9PiBjLm1hdGNoZXIodGFyZ2V0c1tjLnRhcmdldF0pKTtcbiAgICB9LFxuICB9O1xufVxuXG4vKipcbiAqIFRocm93IHdoZW4gYHVybGAgaXMgbm90IHBlcm1pdHRlZCBieSB0aGUgYWxsb3ctbGlzdC4gTm8tb3Agd2hlbiB0aGVcbiAqIGFsbG93LWxpc3QgaXMgdW5yZXN0cmljdGVkLiBUaGUgc2luZ2xlIGVuZm9yY2VtZW50IHBvaW50IGZvciB0aGVcbiAqIGB3ZWJfZmV0Y2hgIHBhdGguXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhc3NlcnRVcmxBbGxvd2VkKHVybDogc3RyaW5nLCBhbGxvdzogVXJsQWxsb3dMaXN0KTogdm9pZCB7XG4gIGlmICghYWxsb3cuYWxsb3dzKHVybCkpIHtcbiAgICB0aHJvdyBWYWxpZGF0aW9uRXJyb3IuaW52YWxpZFZhbHVlKFxuICAgICAgXCJ1cmxcIixcbiAgICAgIHVybCxcbiAgICAgIGBhIFVSTCBwZXJtaXR0ZWQgYnkgdGhlIGNvbmZpZ3VyZWQgYWxsb3ctbGlzdCAoJHthbGxvdy5wYXR0ZXJucy5qb2luKFwiLCBcIil9KWAsXG4gICAgKTtcbiAgfVxufVxuIl19
package/lib/src/config.js CHANGED
@@ -44,9 +44,9 @@
44
44
  * @module
45
45
  */
46
46
  import { ConfigurationError } from "@databricks/appkit";
47
- import { config as coreConfig } from "@dbx-tools/core";
48
- import { serving } from "@dbx-tools/model";
49
- import { json, object, string } from "@dbx-tools/shared-core";
47
+ import { configUtils } from "@dbx-tools/core";
48
+ import { modelCatalog } from "@dbx-tools/model";
49
+ import { json, object, stringUtils } from "@dbx-tools/shared-core";
50
50
  import { parseAllowedUrls, toUrlAllowList } from "./allowlist.js";
51
51
  /** Dedicated override for the web-search endpoint id. */
52
52
  export const MODEL_ENV = "WEB_SEARCH_MODEL";
@@ -146,7 +146,7 @@ export const WEB_SEARCH_CONFIG_SCHEMA = {
146
146
  * silently leave the built-in tool specs in place, so it throws.
147
147
  */
148
148
  function parseToolsEnv() {
149
- const raw = coreConfig.text("WEB_SEARCH_TOOLS", coreConfig.ENV_ONLY);
149
+ const raw = configUtils.text("WEB_SEARCH_TOOLS", configUtils.ENV_ONLY);
150
150
  if (raw === undefined)
151
151
  return {};
152
152
  const parsed = json.parseRecord(raw);
@@ -157,13 +157,13 @@ function parseToolsEnv() {
157
157
  }
158
158
  /** Read the pinned endpoint id and record which source supplied it. */
159
159
  function resolveModelPin(config) {
160
- const fromConfig = string.trimToNull(config.model);
160
+ const fromConfig = stringUtils.trimToNull(config.model);
161
161
  if (fromConfig !== null)
162
162
  return { model: fromConfig, source: "config" };
163
- const fromModelEnv = coreConfig.text(MODEL_ENV, coreConfig.ENV_ONLY);
163
+ const fromModelEnv = configUtils.text(MODEL_ENV, configUtils.ENV_ONLY);
164
164
  if (fromModelEnv !== undefined)
165
165
  return { model: fromModelEnv, source: MODEL_ENV };
166
- const fromResourceEnv = coreConfig.text(SERVING_ENDPOINT_ENV, coreConfig.ENV_ONLY);
166
+ const fromResourceEnv = configUtils.text(SERVING_ENDPOINT_ENV, configUtils.ENV_ONLY);
167
167
  if (fromResourceEnv !== undefined) {
168
168
  return { model: fromResourceEnv, source: SERVING_ENDPOINT_ENV };
169
169
  }
@@ -174,7 +174,7 @@ function resolveModelPin(config) {
174
174
  * contradicts the allow-list entries it was given.
175
175
  */
176
176
  function resolveUrlPolicy(configured, patterns) {
177
- const raw = configured ?? coreConfig.text("WEB_SEARCH_URL_POLICY", coreConfig.ENV_ONLY);
177
+ const raw = configured ?? configUtils.text("WEB_SEARCH_URL_POLICY", configUtils.ENV_ONLY);
178
178
  if (raw === undefined)
179
179
  return patterns.length > 0 ? "allowlist" : "unrestricted";
180
180
  if (raw !== "allowlist" && raw !== "unrestricted") {
@@ -222,21 +222,21 @@ export function toApprovalPolicy(gate) {
222
222
  * {@link ConfigurationError} naming the field and the environment variable.
223
223
  */
224
224
  export function resolveWebSearchConfig(config = {}) {
225
- const patterns = parseAllowedUrls(config.allowedUrls ?? coreConfig.text("WEB_SEARCH_ALLOWED_URLS", coreConfig.ENV_ONLY));
225
+ const patterns = parseAllowedUrls(config.allowedUrls ?? configUtils.text("WEB_SEARCH_ALLOWED_URLS", configUtils.ENV_ONLY));
226
226
  const urlPolicy = resolveUrlPolicy(config.urlPolicy, patterns);
227
227
  const { model, source } = resolveModelPin(config);
228
- const fallbacks = coreConfig.list(config.modelFallbacks, "WEB_SEARCH_MODEL_FALLBACKS", undefined, coreConfig.ENV_ONLY);
228
+ const fallbacks = configUtils.list(config.modelFallbacks, "WEB_SEARCH_MODEL_FALLBACKS", undefined, configUtils.ENV_ONLY);
229
229
  return {
230
230
  ...(model ? { model } : {}),
231
231
  modelSource: source,
232
232
  modelFallbacks: fallbacks.length > 0 ? fallbacks : DEFAULT_MODEL_FALLBACKS,
233
233
  webSearchTools: { ...parseToolsEnv(), ...(config.webSearchTools ?? {}) },
234
- fuzzy: coreConfig.boolean(config.modelFuzzyMatch, "WEB_SEARCH_FUZZY", coreConfig.ENV_ONLY) ?? true,
235
- fuzzyThreshold: coreConfig.positiveNumber(config.modelFuzzyThreshold, "WEB_SEARCH_FUZZY_THRESHOLD", serving.DEFAULT_FUZZY_THRESHOLD, coreConfig.ENV_ONLY),
236
- maxCitations: coreConfig.positiveInt(config.maxCitations, "WEB_SEARCH_MAX_CITATIONS", DEFAULT_MAX_CITATIONS, coreConfig.ENV_ONLY),
237
- fetchMaxLength: coreConfig.positiveInt(config.fetchMaxLength, "WEB_SEARCH_FETCH_MAX_LENGTH", DEFAULT_FETCH_MAX_LENGTH, coreConfig.ENV_ONLY),
238
- timeoutMs: coreConfig.positiveInt(config.timeoutMs, "WEB_SEARCH_TIMEOUT_MS", DEFAULT_TIMEOUT_MS, coreConfig.ENV_ONLY),
239
- scrapeFallback: coreConfig.boolean(config.scrapeFallback, "WEB_SEARCH_SCRAPE_FALLBACK", coreConfig.ENV_ONLY) ?? true,
234
+ fuzzy: configUtils.boolean(config.modelFuzzyMatch, "WEB_SEARCH_FUZZY", configUtils.ENV_ONLY) ?? true,
235
+ fuzzyThreshold: configUtils.positiveNumber(config.modelFuzzyThreshold, "WEB_SEARCH_FUZZY_THRESHOLD", modelCatalog.DEFAULT_FUZZY_THRESHOLD, configUtils.ENV_ONLY),
236
+ maxCitations: configUtils.positiveInt(config.maxCitations, "WEB_SEARCH_MAX_CITATIONS", DEFAULT_MAX_CITATIONS, configUtils.ENV_ONLY),
237
+ fetchMaxLength: configUtils.positiveInt(config.fetchMaxLength, "WEB_SEARCH_FETCH_MAX_LENGTH", DEFAULT_FETCH_MAX_LENGTH, configUtils.ENV_ONLY),
238
+ timeoutMs: configUtils.positiveInt(config.timeoutMs, "WEB_SEARCH_TIMEOUT_MS", DEFAULT_TIMEOUT_MS, configUtils.ENV_ONLY),
239
+ scrapeFallback: configUtils.boolean(config.scrapeFallback, "WEB_SEARCH_SCRAPE_FALLBACK", configUtils.ENV_ONLY) ?? true,
240
240
  urlPolicy,
241
241
  allowList: toUrlAllowList(urlPolicy === "allowlist" ? patterns : []),
242
242
  approval: toApprovalPolicy(config.approval),
@@ -258,4 +258,4 @@ export function approvalMatches(gate, urls) {
258
258
  const list = toUrlAllowList(policy.patterns);
259
259
  return urls.some((url) => list.allows(url));
260
260
  }
261
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0E0Q0c7QUFFSCxPQUFPLEVBQUUsa0JBQWtCLEVBQXlCLE1BQU0sb0JBQW9CLENBQUM7QUFDL0UsT0FBTyxFQUFFLE1BQU0sSUFBSSxVQUFVLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDM0MsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQWtCLE1BQU0sRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBRTlFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxjQUFjLEVBQXFCLE1BQU0sZ0JBQWdCLENBQUM7QUE2QnJGLHlEQUF5RDtBQUN6RCxNQUFNLENBQUMsTUFBTSxTQUFTLEdBQUcsa0JBQWtCLENBQUM7QUFFNUMsK0VBQStFO0FBQy9FLE1BQU0sQ0FBQyxNQUFNLG9CQUFvQixHQUFHLGtDQUFrQyxDQUFDO0FBS3ZFOzs7Ozs7R0FNRztBQUNILE1BQU0sQ0FBQyxNQUFNLHVCQUF1QixHQUFzQjtJQUN4RCx5QkFBeUI7SUFDekIsMkJBQTJCO0lBQzNCLGtCQUFrQjtJQUNsQix1QkFBdUI7Q0FDeEIsQ0FBQztBQUVGLDRFQUE0RTtBQUM1RSxNQUFNLENBQUMsTUFBTSxxQkFBcUIsR0FBRyxFQUFFLENBQUM7QUFFeEMsb0VBQW9FO0FBQ3BFLE1BQU0sQ0FBQyxNQUFNLHdCQUF3QixHQUFHLE1BQU0sQ0FBQztBQUUvQyxtRUFBbUU7QUFDbkUsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQUcsTUFBTSxDQUFDO0FBa0h6QywrREFBK0Q7QUFDL0QsTUFBTSxDQUFDLE1BQU0sd0JBQXdCLEdBQWdCO0lBQ25ELElBQUksRUFBRSxRQUFRO0lBQ2QsVUFBVSxFQUFFO1FB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Q3JCLDRCQUE0QixFQUM1QixVQUFVLENBQUMsUUFBUSxDQUNwQixJQUFJLElBQUk7UUFDWCxTQUFTO1FBQ1QsU0FBUyxFQUFFLGNBQWMsQ0FBQyxTQUFTLEtBQUssV0FBVyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUNwRSxRQUFRLEVBQUUsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQztLQUM1QyxDQUFDO0FBQ0osQ0FBQztBQUVEOzs7Ozs7R0FNRztBQUNILE1BQU0sVUFBVSxlQUFlLENBQzdCLElBQW1DLEVBQ25DLElBQXVCO0lBRXZCLE1BQU0sTUFBTSxHQUFHLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3RDLElBQUksTUFBTSxDQUFDLElBQUksS0FBSyxNQUFNO1FBQUUsT0FBTyxLQUFLLENBQUM7SUFDekMsSUFBSSxNQUFNLENBQUMsSUFBSSxLQUFLLFFBQVE7UUFBRSxPQUFPLElBQUksQ0FBQztJQUMxQyxNQUFNLElBQUksR0FBRyxjQUFjLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQzdDLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQzlDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvbmZpZ3VyYXRpb24gZm9yIHRoZSB3ZWItc2VhcmNoIHBsdWdpbjogdGhlIHR5cGVkXG4gKiB7QGxpbmsgV2ViU2VhcmNoUGx1Z2luQ29uZmlnfSAodGhlIHBsdWdpbidzIHNsaWNlIG9mIEFwcEtpdCBjb25maWcpLCB0aGVcbiAqIEpTT04gU2NoZW1hIHRoZSBtYW5pZmVzdCBwdWJsaXNoZXMgZm9yIGl0LCBhbmQge0BsaW5rIHJlc29sdmVXZWJTZWFyY2hDb25maWd9XG4gKiB3aGljaCBsYXllcnMgdGhhdCBjb25maWcgb3ZlciBlbnZpcm9ubWVudCBkZWZhdWx0cyBpbnRvIHRoZSBjb25jcmV0ZVxuICoge0BsaW5rIFJlc29sdmVkV2ViU2VhcmNoQ29uZmlnfSB0aGUgcnVudGltZSArIHRvb2xzIHJlYWQuXG4gKlxuICogYHdlYl9zZWFyY2hgIHJ1bnMgb24gdGhlIERhdGFicmlja3MgTW9kZWwgU2VydmluZyBuYXRpdmUgd2ViLXNlYXJjaCB0b29sXG4gKiAoc2VlIGBwcm92aWRlci50c2AgLyBgc2VhcmNoLnRzYCksIHNvIHRoZSBrZXkga25vYiBpcyB3aGljaCB3ZWItc2VhcmNoLVxuICogY2FwYWJsZSBtb2RlbCB0byB1c2UuIEl0IHJlc29sdmVzIGluZGVwZW5kZW50bHkgb2YgdGhlIGNhbGxpbmcgYWdlbnQncyBjaGF0XG4gKiBtb2RlbDogYG1vZGVsYCAoYSBuYW1lLCBsb29zZSBuYW1lLCBvciBjYXBhYmlsaXR5IGNsYXNzKSBpcyBmdXp6eS1tYXRjaGVkXG4gKiBhZ2FpbnN0IHRoZSB3b3Jrc3BhY2UgY2F0YWxvZ3VlLCBhbmQgd2hlbiBub3RoaW5nIGlzIHBpbm5lZCB0aGVcbiAqIHtAbGluayBXZWJTZWFyY2hQbHVnaW5Db25maWcubW9kZWxGYWxsYmFja3N9IG9yZGVyIChHZW1pbmksIHRoZW4gR1BULCB0aGVuIGFcbiAqIHJlcG8gZmxvb3IpIHBpY2tzIHRoZSBmaXJzdCB3ZWItc2VhcmNoLWNhcGFibGUgZW5kcG9pbnQgdGhhdCBleGlzdHMuXG4gKlxuICogV2hpY2ggZW5kcG9pbnQgaWQgaXMgdXNlZCBmb2xsb3dzIHRoZSBzdGFuZGFyZCBwcmVjZWRlbmNlIC0gZXhwbGljaXQgcGx1Z2luXG4gKiBjb25maWcsIHRoZW4gZW52aXJvbm1lbnQsIHRoZW4gYSBkZWZhdWx0IC0gd2l0aCB0d28gZW52aXJvbm1lbnQgc291cmNlczpcbiAqXG4gKiAgIDEuIGBtb2RlbGAgaW4gcGx1Z2luIGNvbmZpZztcbiAqICAgMi4gYFdFQl9TRUFSQ0hfTU9ERUxgLCB0aGUgZGVkaWNhdGVkIG92ZXJyaWRlLCBzbyBhIGRlcGxveW1lbnQgY2FuIHBvaW50XG4gKiAgICAgIHdlYiBzZWFyY2ggYXQgYSBkaWZmZXJlbnQgZW5kcG9pbnQgdGhhbiB0aGUgYWdlbnQncyBjaGF0IG1vZGVsO1xuICogICAzLiBgREFUQUJSSUNLU19TRVJWSU5HX0VORFBPSU5UX05BTUVgLCBBcHBLaXQncyBzdGFuZGFyZCBuYW1lIGZvciBhXG4gKiAgICAgIE1vZGVsIFNlcnZpbmcgYmluZGluZywgaG9ub3JlZCBzbyB0aGUgcmVzb3VyY2UgZGVjbGFyZWQgaW4gdGhlIG1hbmlmZXN0XG4gKiAgICAgIHdpcmVzIHRoaXMgcGx1Z2luIHVwIGxpa2UgYW55IG90aGVyLiBCZWNhdXNlIHRoYXQgYmluZGluZyBpcyBzaGFyZWRcbiAqICAgICAgd2l0aCB3aGF0ZXZlciBlbHNlIHRoZSBhcHAgc2VydmVzLCBpdCBpcyB0cmVhdGVkIGFzIGEgcHJlZmVyZW5jZTogYW5cbiAqICAgICAgZW5kcG9pbnQgdGhhdCBjYW5ub3QgcnVuIHRoZSBuYXRpdmUgd2ViLXNlYXJjaCB0b29sIGlzIHNraXBwZWQgaW5cbiAqICAgICAgZmF2b3Igb2Yge0BsaW5rIFdlYlNlYXJjaFBsdWdpbkNvbmZpZy5tb2RlbEZhbGxiYWNrc30gcmF0aGVyIHRoYW5cbiAqICAgICAgZmFpbGluZyB0aGUgY2FsbC4gQSBwaW4gZnJvbSAoMSkgb3IgKDIpIGlzIGV4cGxpY2l0IGFuZCBET0VTIGZhaWw7XG4gKiAgIDQuIG90aGVyd2lzZSB0aGUgZmFsbGJhY2sgb3JkZXIsIHJlc29sdmVkIGFnYWluc3QgdGhlIGxpdmUgY2F0YWxvZ3VlLlxuICpcbiAqIFdoaWNoIG1vZGVsIHdpbnMgaXMgZGVjaWRlZCBsYXppbHksIGF0IGNhbGwgdGltZSwgYWdhaW5zdCB0aGUgbGl2ZVxuICogY2F0YWxvZ3VlLiBSZXNvbHV0aW9uIGhlcmUgaXMgZWFnZXIgYWJvdXQgZXZlcnl0aGluZyBlbHNlIGFuZCBmYWlscyBsb3VkbHlcbiAqIG9uIGEgY29udHJhZGljdGlvbjogYW4gdW5wYXJzZWFibGUgYFdFQl9TRUFSQ0hfVE9PTFNgLCBhbiB1bmtub3duXG4gKiB7QGxpbmsgVXJsUG9saWN5TW9kZX0sIG9yIGEgVVJMIHBvbGljeSB0aGF0IGRpc2FncmVlcyB3aXRoIHRoZSBhbGxvdy1saXN0IGl0XG4gKiB3YXMgZ2l2ZW4uXG4gKlxuICogRW52IGZhbGxiYWNrczogYFdFQl9TRUFSQ0hfTU9ERUxgLCBgREFUQUJSSUNLU19TRVJWSU5HX0VORFBPSU5UX05BTUVgLFxuICogYFdFQl9TRUFSQ0hfTU9ERUxfRkFMTEJBQ0tTYCwgYFdFQl9TRUFSQ0hfVE9PTFNgIChKU09OKSxcbiAqIGBXRUJfU0VBUkNIX1VSTF9QT0xJQ1lgLCBgV0VCX1NFQVJDSF9BTExPV0VEX1VSTFNgLFxuICogYFdFQl9TRUFSQ0hfTUFYX0NJVEFUSU9OU2AsIGBXRUJfU0VBUkNIX0ZFVENIX01BWF9MRU5HVEhgLFxuICogYFdFQl9TRUFSQ0hfVElNRU9VVF9NU2AsIGBXRUJfU0VBUkNIX1NDUkFQRV9GQUxMQkFDS2AsIGBXRUJfU0VBUkNIX0ZVWlpZYCxcbiAqIGBXRUJfU0VBUkNIX0ZVWlpZX1RIUkVTSE9MRGAuXG4gKlxuICogQG1vZHVsZVxuICovXG5cbmltcG9ydCB7IENvbmZpZ3VyYXRpb25FcnJvciwgdHlwZSBCYXNlUGx1Z2luQ29uZmlnIH0gZnJvbSBcIkBkYXRhYnJpY2tzL2FwcGtpdFwiO1xuaW1wb3J0IHsgY29uZmlnIGFzIGNvcmVDb25maWcgfSBmcm9tIFwiQGRieC10b29scy9jb3JlXCI7XG5pbXBvcnQgeyBzZXJ2aW5nIH0gZnJvbSBcIkBkYngtdG9vbHMvbW9kZWxcIjtcbmltcG9ydCB7IGpzb24sIG9iamVjdCwgdHlwZSBPbmVPck1hbnksIHN0cmluZyB9IGZyb20gXCJAZGJ4LXRvb2xzL3NoYXJlZC1jb3JlXCI7XG5pbXBvcnQgdHlwZSB7IEpTT05TY2hlbWE3IH0gZnJvbSBcImpzb24tc2NoZW1hXCI7XG5pbXBvcnQgeyBwYXJzZUFsbG93ZWRVcmxzLCB0b1VybEFsbG93TGlzdCwgdHlwZSBVcmxBbGxvd0xpc3QgfSBmcm9tIFwiLi9hbGxvd2xpc3QudHNcIjtcblxuLyoqXG4gKiBBIFVSTC1wYXR0ZXJuIGdhdGUgZm9yIHBlci10b29sIGFwcHJvdmFsLiBgdHJ1ZWAgZ2F0ZXMgZXZlcnkgY2FsbDsgYVxuICogcGF0dGVybiAob3IgbGlzdCBvZiBwYXR0ZXJucywgaW4gdGhlIHtAbGluayBPbmVPck1hbnl9IHNoYXBlIHVzZWQgYWNyb3NzXG4gKiB0aGUgcmVwbykgZ2F0ZXMgb25seSBjYWxscyB3aG9zZSBVUkwgbWF0Y2hlcy4gUGF0dGVybnMgdXNlIHRoZSBzYW1lIGdsb2JcbiAqIHN5bnRheCBhcyB0aGUgYWxsb3ctbGlzdCAoc2VlIGBhbGxvd2xpc3QudHNgKS4gT21pdCAvIGBmYWxzZWAgZm9yIG5vXG4gKiBhcHByb3ZhbC4gTm9ybWFsaXplZCB0byBhbiB7QGxpbmsgQXBwcm92YWxQb2xpY3l9IGJlZm9yZSB1c2UuXG4gKi9cbmV4cG9ydCB0eXBlIEFwcHJvdmFsR2F0ZSA9IGJvb2xlYW4gfCBPbmVPck1hbnk8c3RyaW5nPiB8IHN0cmluZztcblxuLyoqXG4gKiBUaGUgbm9ybWFsaXplZCBmb3JtIG9mIGFuIHtAbGluayBBcHByb3ZhbEdhdGV9OiB3aGljaCBjYWxscyBwYXVzZSBmb3IgYVxuICogaHVtYW4uIGBcIm5vbmVcImAgcnVucyBldmVyeSBjYWxsIHN0cmFpZ2h0IHRocm91Z2gsIGBcImFsd2F5c1wiYCBnYXRlcyBhbGwgb2ZcbiAqIHRoZW0sIGFuZCBgXCJ1cmxzXCJgIGdhdGVzIG9ubHkgY2FsbHMgd2hvc2UgVVJMIG1hdGNoZXMgb25lIG9mIGBwYXR0ZXJuc2AuXG4gKi9cbmV4cG9ydCB0eXBlIEFwcHJvdmFsUG9saWN5ID1cbiAgfCB7IHJlYWRvbmx5IG1vZGU6IFwibm9uZVwiIH1cbiAgfCB7IHJlYWRvbmx5IG1vZGU6IFwiYWx3YXlzXCIgfVxuICB8IHsgcmVhZG9ubHkgbW9kZTogXCJ1cmxzXCI7IHJlYWRvbmx5IHBhdHRlcm5zOiByZWFkb25seSBzdHJpbmdbXSB9O1xuXG4vKipcbiAqIFdoaWNoIFVSTHMgdGhlIHRvb2xzIG1heSByZWFjaC4gYFwiYWxsb3dsaXN0XCJgIHBlcm1pdHMgb25seSB0aGUgY29uZmlndXJlZFxuICogZW50cmllczsgYFwidW5yZXN0cmljdGVkXCJgIG5hbWVzIHRoZSBwZXJtaXNzaXZlIG1vZGUgZXhwbGljaXRseSwgc28gYW5cbiAqIHVucmVzdHJpY3RlZCBkZXBsb3ltZW50IGlzIGEgc3RhdGVkIGNob2ljZSB2aXNpYmxlIGluIHRoZSBib290IGxvZyByYXRoZXJcbiAqIHRoYW4gYW4gZW1wdHkgbGlzdCBub2JvZHkgbm90aWNlZC5cbiAqL1xuZXhwb3J0IHR5cGUgVXJsUG9saWN5TW9kZSA9IFwidW5yZXN0cmljdGVkXCIgfCBcImFsbG93bGlzdFwiO1xuXG4vKiogRGVkaWNhdGVkIG92ZXJyaWRlIGZvciB0aGUgd2ViLXNlYXJjaCBlbmRwb2ludCBpZC4gKi9cbmV4cG9ydCBjb25zdCBNT0RFTF9FTlYgPSBcIldFQl9TRUFSQ0hfTU9ERUxcIjtcblxuLyoqIEFwcEtpdCdzIHN0YW5kYXJkIGVudmlyb25tZW50IG5hbWUgZm9yIGEgTW9kZWwgU2VydmluZyBlbmRwb2ludCBiaW5kaW5nLiAqL1xuZXhwb3J0IGNvbnN0IFNFUlZJTkdfRU5EUE9JTlRfRU5WID0gXCJEQVRBQlJJQ0tTX1NFUlZJTkdfRU5EUE9JTlRfTkFNRVwiO1xuXG4vKiogV2hlcmUgdGhlIHBpbm5lZCB3ZWItc2VhcmNoIGVuZHBvaW50IGlkIGNhbWUgZnJvbSwgb3IgYFwibm9uZVwiYCB3aGVuIHVucGlubmVkLiAqL1xuZXhwb3J0IHR5cGUgTW9kZWxTb3VyY2UgPSBcImNvbmZpZ1wiIHwgdHlwZW9mIE1PREVMX0VOViB8IHR5cGVvZiBTRVJWSU5HX0VORFBPSU5UX0VOViB8IFwibm9uZVwiO1xuXG4vKipcbiAqIERlZmF1bHQgd2ViLXNlYXJjaCBtb2RlbCBwcmVmZXJlbmNlLCB0cmllZCBpbiBvcmRlciB3aGVuIG5vIG1vZGVsIGlzXG4gKiBwaW5uZWQuIEdlbWluaSBmaXJzdCwgdGhlbiBHUFQgLSBib3RoIHN1cHBvcnQgdGhlIG5hdGl2ZSB3ZWItc2VhcmNoIHRvb2w7XG4gKiBhIHdvcmtzcGFjZSB0eXBpY2FsbHkgaGFzIGF0IGxlYXN0IG9uZS4gRWFjaCBpcyBmdXp6eS1tYXRjaGVkIGFnYWluc3QgdGhlXG4gKiBsaXZlIGNhdGFsb2d1ZSwgc28gYSBjbG9zZSB2YXJpYW50IChlLmcuIGBkYXRhYnJpY2tzLWdlbWluaS0zLTEtcHJvYCkgaXNcbiAqIHBpY2tlZCB3aGVuIHRoZSBleGFjdCBpZCBpc24ndCBwcmVzZW50LlxuICovXG5leHBvcnQgY29uc3QgREVGQVVMVF9NT0RFTF9GQUxMQkFDS1M6IHJlYWRvbmx5IHN0cmluZ1tdID0gW1xuICBcImRhdGFicmlja3MtZ2VtaW5pLTMtcHJvXCIsXG4gIFwiZGF0YWJyaWNrcy1nZW1pbmktMi01LXByb1wiLFxuICBcImRhdGFicmlja3MtZ3B0LTVcIixcbiAgXCJkYXRhYnJpY2tzLWdwdC01LW1pbmlcIixcbl07XG5cbi8qKiBEZWZhdWx0IGNhcCBvbiB0aGUgbnVtYmVyIG9mIGNpdGF0aW9ucyByZXR1cm5lZCBmcm9tIGEgc2luZ2xlIHNlYXJjaC4gKi9cbmV4cG9ydCBjb25zdCBERUZBVUxUX01BWF9DSVRBVElPTlMgPSAxMDtcblxuLyoqIERlZmF1bHQgY2FwIG9uIGNoYXJhY3RlcnMgcmV0dXJuZWQgZnJvbSBhIHNpbmdsZSBgd2ViX2ZldGNoYC4gKi9cbmV4cG9ydCBjb25zdCBERUZBVUxUX0ZFVENIX01BWF9MRU5HVEggPSA1MF8wMDA7XG5cbi8qKiBEZWZhdWx0IHBlci1yZXF1ZXN0IG5ldHdvcmsgdGltZW91dCAobXMpIGZvciBzZWFyY2ggKyBmZXRjaC4gKi9cbmV4cG9ydCBjb25zdCBERUZBVUxUX1RJTUVPVVRfTVMgPSAzMF8wMDA7XG5cbi8qKiBBcHBLaXQgY29uZmlnIGFjY2VwdGVkIGJ5IHRoZSB3ZWItc2VhcmNoIHBsdWdpbi4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgV2ViU2VhcmNoUGx1Z2luQ29uZmlnIGV4dGVuZHMgQmFzZVBsdWdpbkNvbmZpZyB7XG4gIC8qKlxuICAgKiBUaGUgd2ViLXNlYXJjaCBtb2RlbCB0byB1c2UgYnkgZGVmYXVsdDogYSBEYXRhYnJpY2tzIHNlcnZpbmcgZW5kcG9pbnRcbiAgICogbmFtZSAoYFwiZGF0YWJyaWNrcy1nZW1pbmktMy1wcm9cImApLCBhIGxvb3NlIG5hbWUgKGBcImdlbWluaVwiYCwgYFwiZ3B0XCJgKSxcbiAgICogb3IgYSBjYXBhYmlsaXR5IGNsYXNzLiBGdXp6eS1tYXRjaGVkIGFnYWluc3QgdGhlIGxpdmUgY2F0YWxvZ3VlLiBGYWxsc1xuICAgKiBiYWNrIHRvIGBXRUJfU0VBUkNIX01PREVMYCwgdGhlbiBgREFUQUJSSUNLU19TRVJWSU5HX0VORFBPSU5UX05BTUVgLCB0aGVuXG4gICAqIHRoZSB7QGxpbmsgbW9kZWxGYWxsYmFja3N9IG9yZGVyLiBDaG9zZW4gaW5kZXBlbmRlbnRseSBvZiB0aGUgY2FsbGluZ1xuICAgKiBhZ2VudCdzIGNoYXQgbW9kZWwuXG4gICAqL1xuICBtb2RlbD86IHN0cmluZztcbiAgLyoqXG4gICAqIFByaW9yaXR5LW9yZGVyZWQgd2ViLXNlYXJjaCBtb2RlbCBjYW5kaWRhdGVzIHRyaWVkIHdoZW4ge0BsaW5rIG1vZGVsfSBpc1xuICAgKiB1bnNldCwgZWFjaCBmdXp6eS1tYXRjaGVkIGFuZCBjaGVja2VkIGZvciB3ZWItc2VhcmNoIHN1cHBvcnQuIEZhbGxzIGJhY2tcbiAgICogdG8gYFdFQl9TRUFSQ0hfTU9ERUxfRkFMTEJBQ0tTYCAoY29tbWEvc3BhY2Utc2VwYXJhdGVkKSwgdGhlblxuICAgKiB7QGxpbmsgREVGQVVMVF9NT0RFTF9GQUxMQkFDS1N9IChHZW1pbmksIHRoZW4gR1BUKS5cbiAgICovXG4gIG1vZGVsRmFsbGJhY2tzPzogc3RyaW5nIHwgc3RyaW5nW107XG4gIC8qKlxuICAgKiBQcm92aWRlciAtPiB0b29sLXNwZWMgb3ZlcnJpZGUgbWFwLCBtZXJnZWQgb3ZlciB0aGUgYnVpbHQtaW5cbiAgICoge0BsaW5rIFdFQl9TRUFSQ0hfUFJPVklERVJTfSBkZWZhdWx0cy4gS2V5ZWQgYnkgcHJvdmlkZXIgZmFtaWx5XG4gICAqIChgXCJvcGVuYWlcImAsIGBcImdlbWluaVwiYCk7IGVhY2ggdmFsdWUgbWF5IG92ZXJyaWRlIHRoZSBgdG9vbGAgZW50cnlcbiAgICogYW5kL29yIHRoZSBgYXBpYCBzdXJmYWNlLiBVc2UgdG8gY2hhbmdlIHRoZSB0b29sIHNoYXBlIGFzIHRoZSBwbGF0Zm9ybVxuICAgKiBldm9sdmVzIHdpdGhvdXQgYSBjb2RlIGNoYW5nZS4gRmFsbHMgYmFjayB0byBgV0VCX1NFQVJDSF9UT09MU2AgcGFyc2VkIGFzXG4gICAqIEpTT04uIFRoaXMgaXMgdGhlIGBXRUJfU0VBUkNIX1RPT0xTYCBzZXR0aW5nLlxuICAgKi9cbiAgd2ViU2VhcmNoVG9vbHM/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgLyoqXG4gICAqIEVuYWJsZSBmdXp6eSBtYXRjaGluZyBvZiBsb29zZSBtb2RlbCBuYW1lcyBhZ2FpbnN0IHRoZSBjYXRhbG9ndWUuXG4gICAqIERlZmF1bHRzIHRvIGB0cnVlYDsgZmFsbHMgYmFjayB0byBgV0VCX1NFQVJDSF9GVVpaWWAuXG4gICAqL1xuICBtb2RlbEZ1enp5TWF0Y2g/OiBib29sZWFuO1xuICAvKiogRnVzZS5qcyBmdXp6eSB0aHJlc2hvbGQuIEZhbGxzIGJhY2sgdG8gYFdFQl9TRUFSQ0hfRlVaWllfVEhSRVNIT0xEYCwgdGhlbiB0aGUgc2hhcmVkIGRlZmF1bHQuICovXG4gIG1vZGVsRnV6enlUaHJlc2hvbGQ/OiBudW1iZXI7XG4gIC8qKlxuICAgKiBIYXJkIGNhcCBvbiB0aGUgbnVtYmVyIG9mIGNpdGF0aW9ucyBhIHNpbmdsZSBzZWFyY2ggcmV0dXJucy4gRmFsbHMgYmFja1xuICAgKiB0byBgV0VCX1NFQVJDSF9NQVhfQ0lUQVRJT05TYCwgdGhlbiB7QGxpbmsgREVGQVVMVF9NQVhfQ0lUQVRJT05TfS5cbiAgICovXG4gIG1heENpdGF0aW9ucz86IG51bWJlcjtcbiAgLyoqXG4gICAqIEhhcmQgY2FwIG9uIHRoZSBjaGFyYWN0ZXIgbGVuZ3RoIG9mIGEgc2luZ2xlIGB3ZWJfZmV0Y2hgIHJlc3VsdC4gRmFsbHNcbiAgICogYmFjayB0byBgV0VCX1NFQVJDSF9GRVRDSF9NQVhfTEVOR1RIYCwgdGhlbiB7QGxpbmsgREVGQVVMVF9GRVRDSF9NQVhfTEVOR1RIfS5cbiAgICovXG4gIGZldGNoTWF4TGVuZ3RoPzogbnVtYmVyO1xuICAvKipcbiAgICogUGVyLXJlcXVlc3QgbmV0d29yayB0aW1lb3V0IGluIG1zIGZvciBzZWFyY2ggKyBmZXRjaC4gRmFsbHMgYmFjayB0b1xuICAgKiBgV0VCX1NFQVJDSF9USU1FT1VUX01TYCwgdGhlbiB7QGxpbmsgREVGQVVMVF9USU1FT1VUX01TfS5cbiAgICovXG4gIHRpbWVvdXRNcz86IG51bWJlcjtcbiAgLyoqXG4gICAqIEZhbGwgYmFjayB0byBhIER1Y2tEdWNrR28gc2NyYXBlIHdoZW4gdGhlIHdvcmtzcGFjZSBoYXMgTk8gZGVwbG95ZWRcbiAgICogd2ViLXNlYXJjaC1jYXBhYmxlIG1vZGVsIChubyBHUFQgLyBHZW1pbmkgc2VydmluZyBlbmRwb2ludCkuIFRoZSBuYXRpdmVcbiAgICogRGF0YWJyaWNrcyB0b29sIGlzIGFsd2F5cyBwcmVmZXJyZWQ7IHRoaXMgb25seSBraWNrcyBpbiB3aGVuIHRoZXJlIGlzIG5vXG4gICAqIG5hdGl2ZSBvcHRpb24sIHNvIHRoZSB0b29sIHN0aWxsIHJldHVybnMgcmVzdWx0cyBpbnN0ZWFkIG9mIGVycm9yaW5nLlxuICAgKiBEZWZhdWx0cyB0byBgdHJ1ZWA7IHNldCBgZmFsc2VgIChvciBgV0VCX1NFQVJDSF9TQ1JBUEVfRkFMTEJBQ0s9MGApIHRvXG4gICAqIHJlcXVpcmUgYSBuYXRpdmUgbW9kZWwgYW5kIGVycm9yIG90aGVyd2lzZS5cbiAgICovXG4gIHNjcmFwZUZhbGxiYWNrPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIFdoaWNoIFVSTHMgdGhlIHRvb2xzIG1heSByZWFjaCAoe0BsaW5rIFVybFBvbGljeU1vZGV9KS4gRmFsbHMgYmFjayB0b1xuICAgKiBgV0VCX1NFQVJDSF9VUkxfUE9MSUNZYCwgdGhlbiB0byBgXCJhbGxvd2xpc3RcImAgd2hlbiB7QGxpbmsgYWxsb3dlZFVybHN9XG4gICAqIGhhcyBlbnRyaWVzIGFuZCBgXCJ1bnJlc3RyaWN0ZWRcImAgd2hlbiBpdCBkb2VzIG5vdC4gTmFtaW5nIHRoZSBtb2RlXG4gICAqIGV4cGxpY2l0bHkgaXMgdGhlIHdheSB0byBzdGF0ZSB0aGF0IGFuIG9wZW4gZGVwbG95bWVudCBpcyBpbnRlbmRlZDtcbiAgICogYFwiYWxsb3dsaXN0XCJgIHdpdGggbm8gZW50cmllcywgb3IgYFwidW5yZXN0cmljdGVkXCJgIGFsb25nc2lkZSBlbnRyaWVzLCBpc1xuICAgKiBhIGNvbnRyYWRpY3Rpb24gYW5kIGZhaWxzIGF0IHJlc29sdXRpb24uXG4gICAqL1xuICB1cmxQb2xpY3k/OiBVcmxQb2xpY3lNb2RlO1xuICAvKipcbiAgICogT3B0aW9uYWwgVVJMIGFsbG93LWxpc3QuIEVhY2ggZW50cnkgaXMgYSBnbG9iIChvciBiYXJlIGhvc3QpIHRlc3RlZFxuICAgKiBhZ2FpbnN0IGEgVVJMJ3MgZnVsbCBgaHJlZmAuIFdoZW4gc2V0LCBgd2ViX3NlYXJjaGAgc2lsZW50bHkgZmlsdGVyc1xuICAgKiBjaXRhdGlvbnMgdG8gdGhlIHBlcm1pdHRlZCBzZXQgYW5kIGB3ZWJfZmV0Y2hgIHJlZnVzZXMgYSBkaXNhbGxvd2VkIFVSTC5cbiAgICogQWNjZXB0cyBhIGBzdHJpbmdbXWAgb3IgYSBjb21tYS0vd2hpdGVzcGFjZS1zZXBhcmF0ZWQgc3RyaW5nOyBmYWxscyBiYWNrXG4gICAqIHRvIGBXRUJfU0VBUkNIX0FMTE9XRURfVVJMU2AuIE9taXQgKG9yIGxlYXZlIGVtcHR5KSBmb3Igbm8gcmVzdHJpY3Rpb24uXG4gICAqIFNlZSBgYWxsb3dsaXN0LnRzYC5cbiAgICovXG4gIGFsbG93ZWRVcmxzPzogc3RyaW5nIHwgc3RyaW5nW107XG4gIC8qKlxuICAgKiBBcHByb3ZhbCBnYXRlIGFwcGxpZWQgdG8gQk9USCB0b29scyAocGVyLXRvb2wgb3ZlcnJpZGVzIHZpYVxuICAgKiB7QGxpbmsgV2ViU2VhcmNoVG9vbE9wdGlvbnMuYXBwcm92YWx9IHdpbikuIGB0cnVlYCBnYXRlcyBldmVyeSBjYWxsO1xuICAgKiBhIFVSTC1wYXR0ZXJuIChvciBsaXN0KSBnYXRlcyBvbmx5IG1hdGNoaW5nIGNhbGxzOyBhblxuICAgKiB7QGxpbmsgQXBwcm92YWxQb2xpY3l9IHN0YXRlcyB0aGUgbW9kZSBkaXJlY3RseS4gT21pdCBmb3Igbm8gYXBwcm92YWwuXG4gICAqL1xuICBhcHByb3ZhbD86IEFwcHJvdmFsR2F0ZSB8IEFwcHJvdmFsUG9saWN5O1xufVxuXG4vKiogQ29uY3JldGUsIHZhbGlkYXRlZCBjb25maWcgdGhlIHJ1bnRpbWUgKyB0b29scyByZWFkLiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZXNvbHZlZFdlYlNlYXJjaENvbmZpZyB7XG4gIC8qKiBQaW5uZWQgd2ViLXNlYXJjaCBtb2RlbCwgd2hlbiBjb25maWd1cmVkIChlbHNlIHVuZGVmaW5lZCAtIHVzZSBmYWxsYmFja3MpLiAqL1xuICBtb2RlbD86IHN0cmluZztcbiAgLyoqIFdoZXJlIHtAbGluayBtb2RlbH0gY2FtZSBmcm9tLCB3aGljaCBkZWNpZGVzIHdoZXRoZXIgYW4gdW5zdXBwb3J0ZWQgcGluIGlzIGZhdGFsLiAqL1xuICBtb2RlbFNvdXJjZTogTW9kZWxTb3VyY2U7XG4gIC8qKiBPcmRlcmVkIGZhbGxiYWNrIG1vZGVsIGNhbmRpZGF0ZXMgKEdlbWluaSwgdGhlbiBHUFQsIHRoZW4gYSBmbG9vcikuICovXG4gIG1vZGVsRmFsbGJhY2tzOiByZWFkb25seSBzdHJpbmdbXTtcbiAgLyoqIFByb3ZpZGVyIC0+IHRvb2wtc3BlYyBvdmVycmlkZSBtYXAsIG1lcmdlZCBvdmVyIHRoZSBidWlsdC1pbiBkZWZhdWx0cy4gKi9cbiAgd2ViU2VhcmNoVG9vbHM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAvKiogV2hldGhlciB0byBmdXp6eS1tYXRjaCBsb29zZSBtb2RlbCBuYW1lcy4gKi9cbiAgZnV6enk6IGJvb2xlYW47XG4gIC8qKiBGdXNlLmpzIGZ1enp5IHRocmVzaG9sZC4gKi9cbiAgZnV6enlUaHJlc2hvbGQ6IG51bWJlcjtcbiAgbWF4Q2l0YXRpb25zOiBudW1iZXI7XG4gIGZldGNoTWF4TGVuZ3RoOiBudW1iZXI7XG4gIHRpbWVvdXRNczogbnVtYmVyO1xuICAvKiogV2hldGhlciB0byBzY3JhcGUtZmFsbGJhY2sgd2hlbiBubyBuYXRpdmUgd2ViLXNlYXJjaCBtb2RlbCBpcyBkZXBsb3llZC4gKi9cbiAgc2NyYXBlRmFsbGJhY2s6IGJvb2xlYW47XG4gIC8qKiBUaGUgbmFtZWQgVVJMIHBvbGljeSBpbiBmb3JjZS4gKi9cbiAgdXJsUG9saWN5OiBVcmxQb2xpY3lNb2RlO1xuICAvKiogQ29tcGlsZWQgYWxsb3ctbGlzdCAocGVybWl0LWFsbCB1bmRlciB0aGUgYHVucmVzdHJpY3RlZGAgcG9saWN5KS4gKi9cbiAgYWxsb3dMaXN0OiBVcmxBbGxvd0xpc3Q7XG4gIC8qKiBEZWZhdWx0IHBlci10b29sIGFwcHJvdmFsIHBvbGljeS4gKi9cbiAgYXBwcm92YWw6IEFwcHJvdmFsUG9saWN5O1xufVxuXG4vKiogSlNPTiBTY2hlbWEgcHVibGlzaGVkIG9uIHRoZSBtYW5pZmVzdCdzIGBjb25maWcuc2NoZW1hYC4gKi9cbmV4cG9ydCBjb25zdCBXRUJfU0VBUkNIX0NPTkZJR19TQ0hFTUE6IEpTT05TY2hlbWE3ID0ge1xuICB0eXBlOiBcIm9iamVjdFwiLFxuICBwcm9wZXJ0aWVzOiB7XG4gICAgbW9kZWw6IHtcbiAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICBkZXNjcmlwdGlvbjpcbiAgICAgICAgXCJEZWZhdWx0IHdlYi1zZWFyY2ggbW9kZWwgKGVuZHBvaW50IG5hbWUsIGxvb3NlIG5hbWUsIG9yIGNsYXNzKS4gRnV6enktbWF0Y2hlZC4gRW52OiBXRUJfU0VBUkNIX01PREVMLCB0aGVuIERBVEFCUklDS1NfU0VSVklOR19FTkRQT0lOVF9OQU1FLlwiLFxuICAgIH0sXG4gICAgbW9kZWxGYWxsYmFja3M6IHtcbiAgICAgIHR5cGU6IFwiYXJyYXlcIixcbiAgICAgIGl0ZW1zOiB7IHR5cGU6IFwic3RyaW5nXCIgfSxcbiAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICBcIk9yZGVyZWQgd2ViLXNlYXJjaCBtb2RlbCBjYW5kaWRhdGVzIHdoZW4gYG1vZGVsYCBpcyB1bnNldCAoR2VtaW5pLCB0aGVuIEdQVCkuIEVudjogV0VCX1NFQVJDSF9NT0RFTF9GQUxMQkFDS1MuXCIsXG4gICAgfSxcbiAgICB3ZWJTZWFyY2hUb29sczoge1xuICAgICAgdHlwZTogXCJvYmplY3RcIixcbiAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICAnUHJvdmlkZXIgLT4gdG9vbC1zcGVjIG92ZXJyaWRlIG1hcCBtZXJnZWQgb3ZlciB0aGUgYnVpbHQtaW4gZGVmYXVsdHMgKG9wZW5haSAtPiB7XCJ0eXBlXCI6XCJ3ZWJfc2VhcmNoXCJ9LCBnZW1pbmkgLT4ge1wiZ29vZ2xlX3NlYXJjaFwiOnt9fSkuIEVudjogV0VCX1NFQVJDSF9UT09MUyAoSlNPTikuJyxcbiAgICB9LFxuICAgIG1vZGVsRnV6enlNYXRjaDoge1xuICAgICAgdHlwZTogXCJib29sZWFuXCIsXG4gICAgICBkZXNjcmlwdGlvbjpcbiAgICAgICAgXCJGdXp6eS1tYXRjaCBsb29zZSBtb2RlbCBuYW1lcyBhZ2FpbnN0IHRoZSBsaXZlIGNhdGFsb2d1ZS4gRGVmYXVsdCB0cnVlIChlbnY6IFdFQl9TRUFSQ0hfRlVaWlkpLlwiLFxuICAgIH0sXG4gICAgbW9kZWxGdXp6eVRocmVzaG9sZDoge1xuICAgICAgdHlwZTogXCJudW1iZXJcIixcbiAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICBcIkZ1c2UuanMgc2NvcmUgdGhyZXNob2xkIGJlbG93IHdoaWNoIGEgZnV6enkgbW9kZWwgbWF0Y2ggaXMgYWNjZXB0ZWQgKGVudjogV0VCX1NFQVJDSF9GVVpaWV9USFJFU0hPTEQpLlwiLFxuICAgIH0sXG4gICAgbWF4Q2l0YXRpb25zOiB7XG4gICAgICB0eXBlOiBcIm51bWJlclwiLFxuICAgICAgZGVzY3JpcHRpb246IFwiSGFyZCBjYXAgb24gY2l0YXRpb25zIHJldHVybmVkIChlbnY6IFdFQl9TRUFSQ0hfTUFYX0NJVEFUSU9OUykuXCIsXG4gICAgfSxcbiAgICBmZXRjaE1heExlbmd0aDoge1xuICAgICAgdHlwZTogXCJudW1iZXJcIixcbiAgICAgIGRlc2NyaXB0aW9uOiBcIkhhcmQgY2FwIG9uIHdlYl9mZXRjaCBjb250ZW50IGxlbmd0aCAoZW52OiBXRUJfU0VBUkNIX0ZFVENIX01BWF9MRU5HVEgpLlwiLFxuICAgIH0sXG4gICAgdGltZW91dE1zOiB7XG4gICAgICB0eXBlOiBcIm51bWJlclwiLFxuICAgICAgZGVzY3JpcHRpb246IFwiUGVyLXJlcXVlc3QgbmV0d29yayB0aW1lb3V0IGluIG1zIChlbnY6IFdFQl9TRUFSQ0hfVElNRU9VVF9NUykuXCIsXG4gICAgfSxcbiAgICBzY3JhcGVGYWxsYmFjazoge1xuICAgICAgdHlwZTogXCJib29sZWFuXCIsXG4gICAgICBkZXNjcmlwdGlvbjpcbiAgICAgICAgXCJGYWxsIGJhY2sgdG8gYSBEdWNrRHVja0dvIHNjcmFwZSB3aGVuIG5vIHdlYi1zZWFyY2gtY2FwYWJsZSBtb2RlbCBpcyBkZXBsb3llZC4gRGVmYXVsdCB0cnVlIChlbnY6IFdFQl9TRUFSQ0hfU0NSQVBFX0ZBTExCQUNLKS5cIixcbiAgICB9LFxuICAgIHVybFBvbGljeToge1xuICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgIGVudW06IFtcInVucmVzdHJpY3RlZFwiLCBcImFsbG93bGlzdFwiXSxcbiAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICBcIldoaWNoIFVSTHMgdGhlIHRvb2xzIG1heSByZWFjaC4gRGVmYXVsdHMgdG8gYWxsb3dsaXN0IHdoZW4gYWxsb3dlZFVybHMgaGFzIGVudHJpZXMsIGVsc2UgdW5yZXN0cmljdGVkIChlbnY6IFdFQl9TRUFSQ0hfVVJMX1BPTElDWSkuXCIsXG4gICAgfSxcbiAgICBhbGxvd2VkVXJsczoge1xuICAgICAgdHlwZTogXCJhcnJheVwiLFxuICAgICAgaXRlbXM6IHsgdHlwZTogXCJzdHJpbmdcIiB9LFxuICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgICdVUkwgYWxsb3ctbGlzdCBvZiBnbG9icyAvIGJhcmUgaG9zdHMgKGUuZy4gXCIqLmRhdGFicmlja3MuY29tXCIsIFwiZG9jcy5leGFtcGxlLmNvbVwiKS4gQWxzbyBhY2NlcHRzIGEgY29tbWEvc3BhY2Utc2VwYXJhdGVkIHN0cmluZy4gRmFsbHMgYmFjayB0byBXRUJfU0VBUkNIX0FMTE9XRURfVVJMUy4gRW1wdHkgPSB1bnJlc3RyaWN0ZWQuJyxcbiAgICB9LFxuICAgIGFwcHJvdmFsOiB7XG4gICAgICBkZXNjcmlwdGlvbjpcbiAgICAgICAgJ0FwcHJvdmFsIGdhdGUgZm9yIGJvdGggdG9vbHM6IHRydWUgZ2F0ZXMgZXZlcnkgY2FsbCwgYSBnbG9iIChvciBsaXN0IG9mIGdsb2JzKSBnYXRlcyBvbmx5IG1hdGNoaW5nIFVSTHMsIG9yIHN0YXRlIHRoZSBtb2RlIGRpcmVjdGx5IGFzIHtcIm1vZGVcIjpcIm5vbmVcInxcImFsd2F5c1wifFwidXJsc1wifS4gRGVmYXVsdCBub25lLicsXG4gICAgICBvbmVPZjogW1xuICAgICAgICB7IHR5cGU6IFwiYm9vbGVhblwiIH0sXG4gICAgICAgIHsgdHlwZTogXCJzdHJpbmdcIiB9LFxuICAgICAgICB7IHR5cGU6IFwiYXJyYXlcIiwgaXRlbXM6IHsgdHlwZTogXCJzdHJpbmdcIiB9IH0sXG4gICAgICAgIHtcbiAgICAgICAgICB0eXBlOiBcIm9iamVjdFwiLFxuICAgICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIG1vZGU6IHsgdHlwZTogXCJzdHJpbmdcIiwgZW51bTogW1wibm9uZVwiLCBcImFsd2F5c1wiLCBcInVybHNcIl0gfSxcbiAgICAgICAgICAgIHBhdHRlcm5zOiB7IHR5cGU6IFwiYXJyYXlcIiwgaXRlbXM6IHsgdHlwZTogXCJzdHJpbmdcIiB9IH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgICByZXF1aXJlZDogW1wibW9kZVwiXSxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfSxcbiAgfSxcbn07XG5cbi8qKlxuICogUGFyc2UgdGhlIGBXRUJfU0VBUkNIX1RPT0xTYCBlbnYgdmFyIChKU09OIG9iamVjdCksIGVsc2UgYHt9YC4gQSB2YWx1ZSB0aGF0XG4gKiBpcyBzZXQgYnV0IG5vdCBhIEpTT04gb2JqZWN0IGlzIGEgZGVwbG95bWVudCBtaXN0YWtlIHRoYXQgd291bGQgb3RoZXJ3aXNlXG4gKiBzaWxlbnRseSBsZWF2ZSB0aGUgYnVpbHQtaW4gdG9vbCBzcGVjcyBpbiBwbGFjZSwgc28gaXQgdGhyb3dzLlxuICovXG5mdW5jdGlvbiBwYXJzZVRvb2xzRW52KCk6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcbiAgY29uc3QgcmF3ID0gY29yZUNvbmZpZy50ZXh0KFwiV0VCX1NFQVJDSF9UT09MU1wiLCBjb3JlQ29uZmlnLkVOVl9PTkxZKTtcbiAgaWYgKHJhdyA9PT0gdW5kZWZpbmVkKSByZXR1cm4ge307XG4gIGNvbnN0IHBhcnNlZCA9IGpzb24ucGFyc2VSZWNvcmQocmF3KTtcbiAgaWYgKCFwYXJzZWQpIHtcbiAgICB0aHJvdyBuZXcgQ29uZmlndXJhdGlvbkVycm9yKFxuICAgICAgXCJXRUJfU0VBUkNIX1RPT0xTIG11c3QgYmUgYSBKU09OIG9iamVjdCBtYXBwaW5nIGEgcHJvdmlkZXIgZmFtaWx5IHRvIGl0cyB0b29sIHNwZWNcIixcbiAgICAgIHsgY29udGV4dDogeyBlbnZWYXI6IFwiV0VCX1NFQVJDSF9UT09MU1wiIH0gfSxcbiAgICApO1xuICB9XG4gIHJldHVybiBwYXJzZWQ7XG59XG5cbi8qKiBSZWFkIHRoZSBwaW5uZWQgZW5kcG9pbnQgaWQgYW5kIHJlY29yZCB3aGljaCBzb3VyY2Ugc3VwcGxpZWQgaXQuICovXG5mdW5jdGlvbiByZXNvbHZlTW9kZWxQaW4oY29uZmlnOiBXZWJTZWFyY2hQbHVnaW5Db25maWcpOiB7IG1vZGVsPzogc3RyaW5nOyBzb3VyY2U6IE1vZGVsU291cmNlIH0ge1xuICBjb25zdCBmcm9tQ29uZmlnID0gc3RyaW5nLnRyaW1Ub051bGwoY29uZmlnLm1vZGVsKTtcbiAgaWYgKGZyb21Db25maWcgIT09IG51bGwpIHJldHVybiB7IG1vZGVsOiBmcm9tQ29uZmlnLCBzb3VyY2U6IFwiY29uZmlnXCIgfTtcbiAgY29uc3QgZnJvbU1vZGVsRW52ID0gY29yZUNvbmZpZy50ZXh0KE1PREVMX0VOViwgY29yZUNvbmZpZy5FTlZfT05MWSk7XG4gIGlmIChmcm9tTW9kZWxFbnYgIT09IHVuZGVmaW5lZCkgcmV0dXJuIHsgbW9kZWw6IGZyb21Nb2RlbEVudiwgc291cmNlOiBNT0RFTF9FTlYgfTtcbiAgY29uc3QgZnJvbVJlc291cmNlRW52ID0gY29yZUNvbmZpZy50ZXh0KFNFUlZJTkdfRU5EUE9JTlRfRU5WLCBjb3JlQ29uZmlnLkVOVl9PTkxZKTtcbiAgaWYgKGZyb21SZXNvdXJjZUVudiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIHsgbW9kZWw6IGZyb21SZXNvdXJjZUVudiwgc291cmNlOiBTRVJWSU5HX0VORFBPSU5UX0VOViB9O1xuICB9XG4gIHJldHVybiB7IHNvdXJjZTogXCJub25lXCIgfTtcbn1cblxuLyoqXG4gKiBSZXNvbHZlIHRoZSBuYW1lZCB7QGxpbmsgVXJsUG9saWN5TW9kZX0sIGZhaWxpbmcgb24gYSBzdGF0ZWQgbW9kZSB0aGF0XG4gKiBjb250cmFkaWN0cyB0aGUgYWxsb3ctbGlzdCBlbnRyaWVzIGl0IHdhcyBnaXZlbi5cbiAqL1xuZnVuY3Rpb24gcmVzb2x2ZVVybFBvbGljeShcbiAgY29uZmlndXJlZDogVXJsUG9saWN5TW9kZSB8IHVuZGVmaW5lZCxcbiAgcGF0dGVybnM6IHJlYWRvbmx5IHN0cmluZ1tdLFxuKTogVXJsUG9saWN5TW9kZSB7XG4gIGNvbnN0IHJhdyA9IGNvbmZpZ3VyZWQgPz8gY29yZUNvbmZpZy50ZXh0KFwiV0VCX1NFQVJDSF9VUkxfUE9MSUNZXCIsIGNvcmVDb25maWcuRU5WX09OTFkpO1xuICBpZiAocmF3ID09PSB1bmRlZmluZWQpIHJldHVybiBwYXR0ZXJucy5sZW5ndGggPiAwID8gXCJhbGxvd2xpc3RcIiA6IFwidW5yZXN0cmljdGVkXCI7XG4gIGlmIChyYXcgIT09IFwiYWxsb3dsaXN0XCIgJiYgcmF3ICE9PSBcInVucmVzdHJpY3RlZFwiKSB7XG4gICAgdGhyb3cgbmV3IENvbmZpZ3VyYXRpb25FcnJvcihcbiAgICAgICd1cmxQb2xpY3kgbXVzdCBiZSBcImFsbG93bGlzdFwiIG9yIFwidW5yZXN0cmljdGVkXCIgKGVudjogV0VCX1NFQVJDSF9VUkxfUE9MSUNZKScsXG4gICAgICB7IGNvbnRleHQ6IHsgZmllbGQ6IFwidXJsUG9saWN5XCIsIGVudlZhcjogXCJXRUJfU0VBUkNIX1VSTF9QT0xJQ1lcIiB9IH0sXG4gICAgKTtcbiAgfVxuICBpZiAocmF3ID09PSBcImFsbG93bGlzdFwiICYmIHBhdHRlcm5zLmxlbmd0aCA9PT0gMCkge1xuICAgIHRocm93IG5ldyBDb25maWd1cmF0aW9uRXJyb3IoXG4gICAgICAndXJsUG9saWN5IFwiYWxsb3dsaXN0XCIgbmVlZHMgYXQgbGVhc3Qgb25lIGVudHJ5IGluIGFsbG93ZWRVcmxzIChlbnY6IFdFQl9TRUFSQ0hfQUxMT1dFRF9VUkxTKScsXG4gICAgICB7IGNvbnRleHQ6IHsgZmllbGQ6IFwiYWxsb3dlZFVybHNcIiwgZW52VmFyOiBcIldFQl9TRUFSQ0hfQUxMT1dFRF9VUkxTXCIgfSB9LFxuICAgICk7XG4gIH1cbiAgaWYgKHJhdyA9PT0gXCJ1bnJlc3RyaWN0ZWRcIiAmJiBwYXR0ZXJucy5sZW5ndGggPiAwKSB7XG4gICAgdGhyb3cgbmV3IENvbmZpZ3VyYXRpb25FcnJvcihcbiAgICAgICd1cmxQb2xpY3kgXCJ1bnJlc3RyaWN0ZWRcIiBjYW5ub3QgYmUgY29tYmluZWQgd2l0aCBhbGxvd2VkVXJscyBlbnRyaWVzOyBkcm9wIHRoZSBlbnRyaWVzIG9yIHNldCB1cmxQb2xpY3kgdG8gXCJhbGxvd2xpc3RcIicsXG4gICAgICB7IGNvbnRleHQ6IHsgZmllbGQ6IFwiYWxsb3dlZFVybHNcIiwgZW52VmFyOiBcIldFQl9TRUFSQ0hfQUxMT1dFRF9VUkxTXCIgfSB9LFxuICAgICk7XG4gIH1cbiAgcmV0dXJuIHJhdztcbn1cblxuLyoqXG4gKiBOb3JtYWxpemUgYW55IGFjY2VwdGVkIGFwcHJvdmFsIHNwZWxsaW5nIGludG8gYW4ge0BsaW5rIEFwcHJvdmFsUG9saWN5fS5cbiAqIEEgcGF0dGVybiBnYXRlIHdpdGggbm8gdXNhYmxlIHBhdHRlcm5zIGNvbGxhcHNlcyB0byBgXCJub25lXCJgIHJhdGhlciB0aGFuXG4gKiBnYXRpbmcgZXZlcnl0aGluZywgc28gYSBibGFuayBlbnYgdmFyIGNhbiBuZXZlciB3ZWRnZSB0aGUgdG9vbHMgYmVoaW5kIGFuXG4gKiBhcHByb3ZhbCBub2JvZHkgY29uZmlndXJlZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvQXBwcm92YWxQb2xpY3koZ2F0ZTogQXBwcm92YWxHYXRlIHwgQXBwcm92YWxQb2xpY3kgfCB1bmRlZmluZWQpOiBBcHByb3ZhbFBvbGljeSB7XG4gIGlmIChnYXRlID09PSB1bmRlZmluZWQgfHwgZ2F0ZSA9PT0gZmFsc2UpIHJldHVybiB7IG1vZGU6IFwibm9uZVwiIH07XG4gIGlmIChnYXRlID09PSB0cnVlKSByZXR1cm4geyBtb2RlOiBcImFsd2F5c1wiIH07XG4gIGlmIChvYmplY3QuaXNSZWNvcmQoZ2F0ZSkgJiYgXCJtb2RlXCIgaW4gZ2F0ZSkge1xuICAgIGlmIChnYXRlLm1vZGUgPT09IFwidXJsc1wiKSB7XG4gICAgICBjb25zdCBwYXR0ZXJucyA9IHBhcnNlQWxsb3dlZFVybHMoWy4uLmdhdGUucGF0dGVybnNdKTtcbiAgICAgIHJldHVybiBwYXR0ZXJucy5sZW5ndGggPiAwID8geyBtb2RlOiBcInVybHNcIiwgcGF0dGVybnMgfSA6IHsgbW9kZTogXCJub25lXCIgfTtcbiAgICB9XG4gICAgaWYgKGdhdGUubW9kZSA9PT0gXCJhbHdheXNcIiB8fCBnYXRlLm1vZGUgPT09IFwibm9uZVwiKSByZXR1cm4geyBtb2RlOiBnYXRlLm1vZGUgfTtcbiAgICB0aHJvdyBuZXcgQ29uZmlndXJhdGlvbkVycm9yKCdhcHByb3ZhbCBtb2RlIG11c3QgYmUgXCJub25lXCIsIFwiYWx3YXlzXCIgb3IgXCJ1cmxzXCInLCB7XG4gICAgICBjb250ZXh0OiB7IGZpZWxkOiBcImFwcHJvdmFsXCIgfSxcbiAgICB9KTtcbiAgfVxuICBjb25zdCBwYXR0ZXJucyA9IHBhcnNlQWxsb3dlZFVybHModHlwZW9mIGdhdGUgPT09IFwic3RyaW5nXCIgPyBnYXRlIDogWy4uLmdhdGVdKTtcbiAgcmV0dXJuIHBhdHRlcm5zLmxlbmd0aCA+IDAgPyB7IG1vZGU6IFwidXJsc1wiLCBwYXR0ZXJucyB9IDogeyBtb2RlOiBcIm5vbmVcIiB9O1xufVxuXG4vKipcbiAqIFJlc29sdmUgcGx1Z2luIGNvbmZpZyBvdmVyIGVudmlyb25tZW50IGRlZmF1bHRzIGludG8gdGhlIGNvbmNyZXRlXG4gKiB7QGxpbmsgUmVzb2x2ZWRXZWJTZWFyY2hDb25maWd9LiBXaGljaCBtb2RlbCBpcyB1c2VkIHN0YXlzIGxhenkgLSBpdCBpc1xuICogcGlja2VkIGF0IGNhbGwgdGltZSBhZ2FpbnN0IHRoZSBsaXZlIGNhdGFsb2d1ZSAtIGJ1dCBldmVyeXRoaW5nIGVsc2UgaXNcbiAqIHNldHRsZWQgaGVyZSwgYW5kIGEgY29udHJhZGljdGlvbiAodW5wYXJzZWFibGUgYFdFQl9TRUFSQ0hfVE9PTFNgLCBhblxuICogdW5rbm93biBVUkwgcG9saWN5LCBhIHBvbGljeSB0aGF0IGRpc2FncmVlcyB3aXRoIGl0cyBhbGxvdy1saXN0KSB0aHJvd3MgYVxuICoge0BsaW5rIENvbmZpZ3VyYXRpb25FcnJvcn0gbmFtaW5nIHRoZSBmaWVsZCBhbmQgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZVdlYlNlYXJjaENvbmZpZyhcbiAgY29uZmlnOiBXZWJTZWFyY2hQbHVnaW5Db25maWcgPSB7fSxcbik6IFJlc29sdmVkV2ViU2VhcmNoQ29uZmlnIHtcbiAgY29uc3QgcGF0dGVybnMgPSBwYXJzZUFsbG93ZWRVcmxzKFxuICAgIGNvbmZpZy5hbGxvd2VkVXJscyA/PyBjb3JlQ29uZmlnLnRleHQoXCJXRUJfU0VBUkNIX0FMTE9XRURfVVJMU1wiLCBjb3JlQ29uZmlnLkVOVl9PTkxZKSxcbiAgKTtcbiAgY29uc3QgdXJsUG9saWN5ID0gcmVzb2x2ZVVybFBvbGljeShjb25maWcudXJsUG9saWN5LCBwYXR0ZXJucyk7XG4gIGNvbnN0IHsgbW9kZWwsIHNvdXJjZSB9ID0gcmVzb2x2ZU1vZGVsUGluKGNvbmZpZyk7XG4gIGNvbnN0IGZhbGxiYWNrcyA9IGNvcmVDb25maWcubGlzdChcbiAgICBjb25maWcubW9kZWxGYWxsYmFja3MsXG4gICAgXCJXRUJfU0VBUkNIX01PREVMX0ZBTExCQUNLU1wiLFxuICAgIHVuZGVmaW5lZCxcbiAgICBjb3JlQ29uZmlnLkVOVl9PTkxZLFxuICApO1xuICByZXR1cm4ge1xuICAgIC4uLihtb2RlbCA/IHsgbW9kZWwgfSA6IHt9KSxcbiAgICBtb2RlbFNvdXJjZTogc291cmNlLFxuICAgIG1vZGVsRmFsbGJhY2tzOiBmYWxsYmFja3MubGVuZ3RoID4gMCA/IGZhbGxiYWNrcyA6IERFRkFVTFRfTU9ERUxfRkFMTEJBQ0tTLFxuICAgIHdlYlNlYXJjaFRvb2xzOiB7IC4uLnBhcnNlVG9vbHNFbnYoKSwgLi4uKGNvbmZpZy53ZWJTZWFyY2hUb29scyA/PyB7fSkgfSxcbiAgICBmdXp6eTpcbiAgICAgIGNvcmVDb25maWcuYm9vbGVhbihjb25maWcubW9kZWxGdXp6eU1hdGNoLCBcIldFQl9TRUFSQ0hfRlVaWllcIiwgY29yZUNvbmZpZy5FTlZfT05MWSkgPz8gdHJ1ZSxcbiAgICBmdXp6eVRocmVzaG9sZDogY29yZUNvbmZpZy5wb3NpdGl2ZU51bWJlcihcbiAgICAgIGNvbmZpZy5tb2RlbEZ1enp5VGhyZXNob2xkLFxuICAgICAgXCJXRUJfU0VBUkNIX0ZVWlpZX1RIUkVTSE9MRFwiLFxuICAgICAgc2VydmluZy5ERUZBVUxUX0ZVWlpZX1RIUkVTSE9MRCxcbiAgICAgIGNvcmVDb25maWcuRU5WX09OTFksXG4gICAgKSxcbiAgICBtYXhDaXRhdGlvbnM6IGNvcmVDb25maWcucG9zaXRpdmVJbnQoXG4gICAgICBjb25maWcubWF4Q2l0YXRpb25zLFxuICAgICAgXCJXRUJfU0VBUkNIX01BWF9DSVRBVElPTlNcIixcbiAgICAgIERFRkFVTFRfTUFYX0NJVEFUSU9OUyxcbiAgICAgIGNvcmVDb25maWcuRU5WX09OTFksXG4gICAgKSxcbiAgICBmZXRjaE1heExlbmd0aDogY29yZUNvbmZpZy5wb3NpdGl2ZUludChcbiAgICAgIGNvbmZpZy5mZXRjaE1heExlbmd0aCxcbiAgICAgIFwiV0VCX1NFQVJDSF9GRVRDSF9NQVhfTEVOR1RIXCIsXG4gICAgICBERUZBVUxUX0ZFVENIX01BWF9MRU5HVEgsXG4gICAgICBjb3JlQ29uZmlnLkVOVl9PTkxZLFxuICAgICksXG4gICAgdGltZW91dE1zOiBjb3JlQ29uZmlnLnBvc2l0aXZlSW50KFxuICAgICAgY29uZmlnLnRpbWVvdXRNcyxcbiAgICAgIFwiV0VCX1NFQVJDSF9USU1FT1VUX01TXCIsXG4gICAgICBERUZBVUxUX1RJTUVPVVRfTVMsXG4gICAgICBjb3JlQ29uZmlnLkVOVl9PTkxZLFxuICAgICksXG4gICAgc2NyYXBlRmFsbGJhY2s6XG4gICAgICBjb3JlQ29uZmlnLmJvb2xlYW4oXG4gICAgICAgIGNvbmZpZy5zY3JhcGVGYWxsYmFjayxcbiAgICAgICAgXCJXRUJfU0VBUkNIX1NDUkFQRV9GQUxMQkFDS1wiLFxuICAgICAgICBjb3JlQ29uZmlnLkVOVl9PTkxZLFxuICAgICAgKSA/PyB0cnVlLFxuICAgIHVybFBvbGljeSxcbiAgICBhbGxvd0xpc3Q6IHRvVXJsQWxsb3dMaXN0KHVybFBvbGljeSA9PT0gXCJhbGxvd2xpc3RcIiA/IHBhdHRlcm5zIDogW10pLFxuICAgIGFwcHJvdmFsOiB0b0FwcHJvdmFsUG9saWN5KGNvbmZpZy5hcHByb3ZhbCksXG4gIH07XG59XG5cbi8qKlxuICogUmVzb2x2ZSBhbiBhcHByb3ZhbCBnYXRlIGFnYWluc3QgYSBzZXQgb2YgY2FuZGlkYXRlIFVSTHMgaW50byBhIGNvbmNyZXRlXG4gKiBib29sZWFuOiBgXCJub25lXCJgIC8gYFwiYWx3YXlzXCJgIHBhc3Mgc3RyYWlnaHQgdGhyb3VnaDsgYSBgXCJ1cmxzXCJgIHBvbGljeVxuICogZ2F0ZXMgd2hlbiBBTlkgY2FuZGlkYXRlIG1hdGNoZXMuIEVtcHR5IGNhbmRpZGF0ZXMgd2l0aCBhIHBhdHRlcm4gZ2F0ZVxuICogbmV2ZXIgbWF0Y2ggKG5vdGhpbmcgdG8gYXBwcm92ZSkuIFJldXNlcyB0aGUgYWxsb3ctbGlzdCBtYXRjaGVyIHNvIGFwcHJvdmFsXG4gKiBnbG9icyByZWFkIGV4YWN0bHkgbGlrZSBhbGxvdy1saXN0IGdsb2JzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYXBwcm92YWxNYXRjaGVzKFxuICBnYXRlOiBBcHByb3ZhbEdhdGUgfCBBcHByb3ZhbFBvbGljeSxcbiAgdXJsczogcmVhZG9ubHkgc3RyaW5nW10sXG4pOiBib29sZWFuIHtcbiAgY29uc3QgcG9saWN5ID0gdG9BcHByb3ZhbFBvbGljeShnYXRlKTtcbiAgaWYgKHBvbGljeS5tb2RlID09PSBcIm5vbmVcIikgcmV0dXJuIGZhbHNlO1xuICBpZiAocG9saWN5Lm1vZGUgPT09IFwiYWx3YXlzXCIpIHJldHVybiB0cnVlO1xuICBjb25zdCBsaXN0ID0gdG9VcmxBbGxvd0xpc3QocG9saWN5LnBhdHRlcm5zKTtcbiAgcmV0dXJuIHVybHMuc29tZSgodXJsKSA9PiBsaXN0LmFsbG93cyh1cmwpKTtcbn1cbiJdfQ==
261
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0E0Q0c7QUFFSCxPQUFPLEVBQUUsa0JBQWtCLEVBQXlCLE1BQU0sb0JBQW9CLENBQUM7QUFDL0UsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNoRCxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBa0IsV0FBVyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFFbkYsT0FBTyxFQUFFLGdCQUFnQixFQUFFLGNBQWMsRUFBcUIsTUFBTSxnQkFBZ0IsQ0FBQztBQTZCckYseURBQXlEO0FBQ3pELE1BQU0sQ0FBQyxNQUFNLFNBQVMsR0FBRyxrQkFBa0IsQ0FBQztBQUU1QywrRUFBK0U7QUFDL0UsTUFBTSxDQUFDLE1BQU0sb0JBQW9CLEdBQUcsa0NBQWtDLENBQUM7QUFLdkU7Ozs7OztHQU1HO0FBQ0gsTUFBTSxDQUFDLE1BQU0sdUJBQXVCLEdBQXNCO0lBQ3hELHlCQUF5QjtJQUN6QiwyQkFBMkI7SUFDM0Isa0JBQWtCO0lBQ2xCLHVCQUF1QjtDQUN4QixDQUFDO0FBRUYsNEVBQTRFO0FBQzVFLE1BQU0sQ0FBQyxNQUFNLHFCQUFxQixHQUFHLEVBQUUsQ0FBQztBQUV4QyxvRUFBb0U7QUFDcEUsTUFBTSxDQUFDLE1BQU0sd0JBQXdCLEdBQUcsTUFBTSxDQUFDO0FBRS9DLG1FQUFtRTtBQUNuRSxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRyxNQUFNLENBQUM7QUFrSHpDLCtEQUErRDtBQUMvRCxNQUFNLENBQUMsTUFBTSx3QkFBd0IsR0FBZ0I7SUFDbkQsSUFBSSxFQUFFLFFBQVE7SUFDZCxVQUFVLEVBQUU7UUFDVixLQUFLLEVB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LEVBQzVCLFdBQVcsQ0FBQyxRQUFRLENBQ3JCLElBQUksSUFBSTtRQUNYLFNBQVM7UUFDVCxTQUFTLEVBQUUsY0FBYyxDQUFDLFNBQVMsS0FBSyxXQUFXLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ3BFLFFBQVEsRUFBRSxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDO0tBQzVDLENBQUM7QUFDSixDQUFDO0FBRUQ7Ozs7OztHQU1HO0FBQ0gsTUFBTSxVQUFVLGVBQWUsQ0FDN0IsSUFBbUMsRUFDbkMsSUFBdUI7SUFFdkIsTUFBTSxNQUFNLEdBQUcsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDdEMsSUFBSSxNQUFNLENBQUMsSUFBSSxLQUFLLE1BQU07UUFBRSxPQUFPLEtBQUssQ0FBQztJQUN6QyxJQUFJLE1BQU0sQ0FBQyxJQUFJLEtBQUssUUFBUTtRQUFFLE9BQU8sSUFBSSxDQUFDO0lBQzFDLE1BQU0sSUFBSSxHQUFHLGNBQWMsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDN0MsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDOUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ29uZmlndXJhdGlvbiBmb3IgdGhlIHdlYi1zZWFyY2ggcGx1Z2luOiB0aGUgdHlwZWRcbiAqIHtAbGluayBXZWJTZWFyY2hQbHVnaW5Db25maWd9ICh0aGUgcGx1Z2luJ3Mgc2xpY2Ugb2YgQXBwS2l0IGNvbmZpZyksIHRoZVxuICogSlNPTiBTY2hlbWEgdGhlIG1hbmlmZXN0IHB1Ymxpc2hlcyBmb3IgaXQsIGFuZCB7QGxpbmsgcmVzb2x2ZVdlYlNlYXJjaENvbmZpZ31cbiAqIHdoaWNoIGxheWVycyB0aGF0IGNvbmZpZyBvdmVyIGVudmlyb25tZW50IGRlZmF1bHRzIGludG8gdGhlIGNvbmNyZXRlXG4gKiB7QGxpbmsgUmVzb2x2ZWRXZWJTZWFyY2hDb25maWd9IHRoZSBydW50aW1lICsgdG9vbHMgcmVhZC5cbiAqXG4gKiBgd2ViX3NlYXJjaGAgcnVucyBvbiB0aGUgRGF0YWJyaWNrcyBNb2RlbCBTZXJ2aW5nIG5hdGl2ZSB3ZWItc2VhcmNoIHRvb2xcbiAqIChzZWUgYHByb3ZpZGVyLnRzYCAvIGBzZWFyY2gudHNgKSwgc28gdGhlIGtleSBrbm9iIGlzIHdoaWNoIHdlYi1zZWFyY2gtXG4gKiBjYXBhYmxlIG1vZGVsIHRvIHVzZS4gSXQgcmVzb2x2ZXMgaW5kZXBlbmRlbnRseSBvZiB0aGUgY2FsbGluZyBhZ2VudCdzIGNoYXRcbiAqIG1vZGVsOiBgbW9kZWxgIChhIG5hbWUsIGxvb3NlIG5hbWUsIG9yIGNhcGFiaWxpdHkgY2xhc3MpIGlzIGZ1enp5LW1hdGNoZWRcbiAqIGFnYWluc3QgdGhlIHdvcmtzcGFjZSBjYXRhbG9ndWUsIGFuZCB3aGVuIG5vdGhpbmcgaXMgcGlubmVkIHRoZVxuICoge0BsaW5rIFdlYlNlYXJjaFBsdWdpbkNvbmZpZy5tb2RlbEZhbGxiYWNrc30gb3JkZXIgKEdlbWluaSwgdGhlbiBHUFQsIHRoZW4gYVxuICogcmVwbyBmbG9vcikgcGlja3MgdGhlIGZpcnN0IHdlYi1zZWFyY2gtY2FwYWJsZSBlbmRwb2ludCB0aGF0IGV4aXN0cy5cbiAqXG4gKiBXaGljaCBlbmRwb2ludCBpZCBpcyB1c2VkIGZvbGxvd3MgdGhlIHN0YW5kYXJkIHByZWNlZGVuY2UgLSBleHBsaWNpdCBwbHVnaW5cbiAqIGNvbmZpZywgdGhlbiBlbnZpcm9ubWVudCwgdGhlbiBhIGRlZmF1bHQgLSB3aXRoIHR3byBlbnZpcm9ubWVudCBzb3VyY2VzOlxuICpcbiAqICAgMS4gYG1vZGVsYCBpbiBwbHVnaW4gY29uZmlnO1xuICogICAyLiBgV0VCX1NFQVJDSF9NT0RFTGAsIHRoZSBkZWRpY2F0ZWQgb3ZlcnJpZGUsIHNvIGEgZGVwbG95bWVudCBjYW4gcG9pbnRcbiAqICAgICAgd2ViIHNlYXJjaCBhdCBhIGRpZmZlcmVudCBlbmRwb2ludCB0aGFuIHRoZSBhZ2VudCdzIGNoYXQgbW9kZWw7XG4gKiAgIDMuIGBEQVRBQlJJQ0tTX1NFUlZJTkdfRU5EUE9JTlRfTkFNRWAsIEFwcEtpdCdzIHN0YW5kYXJkIG5hbWUgZm9yIGFcbiAqICAgICAgTW9kZWwgU2VydmluZyBiaW5kaW5nLCBob25vcmVkIHNvIHRoZSByZXNvdXJjZSBkZWNsYXJlZCBpbiB0aGUgbWFuaWZlc3RcbiAqICAgICAgd2lyZXMgdGhpcyBwbHVnaW4gdXAgbGlrZSBhbnkgb3RoZXIuIEJlY2F1c2UgdGhhdCBiaW5kaW5nIGlzIHNoYXJlZFxuICogICAgICB3aXRoIHdoYXRldmVyIGVsc2UgdGhlIGFwcCBzZXJ2ZXMsIGl0IGlzIHRyZWF0ZWQgYXMgYSBwcmVmZXJlbmNlOiBhblxuICogICAgICBlbmRwb2ludCB0aGF0IGNhbm5vdCBydW4gdGhlIG5hdGl2ZSB3ZWItc2VhcmNoIHRvb2wgaXMgc2tpcHBlZCBpblxuICogICAgICBmYXZvciBvZiB7QGxpbmsgV2ViU2VhcmNoUGx1Z2luQ29uZmlnLm1vZGVsRmFsbGJhY2tzfSByYXRoZXIgdGhhblxuICogICAgICBmYWlsaW5nIHRoZSBjYWxsLiBBIHBpbiBmcm9tICgxKSBvciAoMikgaXMgZXhwbGljaXQgYW5kIERPRVMgZmFpbDtcbiAqICAgNC4gb3RoZXJ3aXNlIHRoZSBmYWxsYmFjayBvcmRlciwgcmVzb2x2ZWQgYWdhaW5zdCB0aGUgbGl2ZSBjYXRhbG9ndWUuXG4gKlxuICogV2hpY2ggbW9kZWwgd2lucyBpcyBkZWNpZGVkIGxhemlseSwgYXQgY2FsbCB0aW1lLCBhZ2FpbnN0IHRoZSBsaXZlXG4gKiBjYXRhbG9ndWUuIFJlc29sdXRpb24gaGVyZSBpcyBlYWdlciBhYm91dCBldmVyeXRoaW5nIGVsc2UgYW5kIGZhaWxzIGxvdWRseVxuICogb24gYSBjb250cmFkaWN0aW9uOiBhbiB1bnBhcnNlYWJsZSBgV0VCX1NFQVJDSF9UT09MU2AsIGFuIHVua25vd25cbiAqIHtAbGluayBVcmxQb2xpY3lNb2RlfSwgb3IgYSBVUkwgcG9saWN5IHRoYXQgZGlzYWdyZWVzIHdpdGggdGhlIGFsbG93LWxpc3QgaXRcbiAqIHdhcyBnaXZlbi5cbiAqXG4gKiBFbnYgZmFsbGJhY2tzOiBgV0VCX1NFQVJDSF9NT0RFTGAsIGBEQVRBQlJJQ0tTX1NFUlZJTkdfRU5EUE9JTlRfTkFNRWAsXG4gKiBgV0VCX1NFQVJDSF9NT0RFTF9GQUxMQkFDS1NgLCBgV0VCX1NFQVJDSF9UT09MU2AgKEpTT04pLFxuICogYFdFQl9TRUFSQ0hfVVJMX1BPTElDWWAsIGBXRUJfU0VBUkNIX0FMTE9XRURfVVJMU2AsXG4gKiBgV0VCX1NFQVJDSF9NQVhfQ0lUQVRJT05TYCwgYFdFQl9TRUFSQ0hfRkVUQ0hfTUFYX0xFTkdUSGAsXG4gKiBgV0VCX1NFQVJDSF9USU1FT1VUX01TYCwgYFdFQl9TRUFSQ0hfU0NSQVBFX0ZBTExCQUNLYCwgYFdFQl9TRUFSQ0hfRlVaWllgLFxuICogYFdFQl9TRUFSQ0hfRlVaWllfVEhSRVNIT0xEYC5cbiAqXG4gKiBAbW9kdWxlXG4gKi9cblxuaW1wb3J0IHsgQ29uZmlndXJhdGlvbkVycm9yLCB0eXBlIEJhc2VQbHVnaW5Db25maWcgfSBmcm9tIFwiQGRhdGFicmlja3MvYXBwa2l0XCI7XG5pbXBvcnQgeyBjb25maWdVdGlscyB9IGZyb20gXCJAZGJ4LXRvb2xzL2NvcmVcIjtcbmltcG9ydCB7IG1vZGVsQ2F0YWxvZyB9IGZyb20gXCJAZGJ4LXRvb2xzL21vZGVsXCI7XG5pbXBvcnQgeyBqc29uLCBvYmplY3QsIHR5cGUgT25lT3JNYW55LCBzdHJpbmdVdGlscyB9IGZyb20gXCJAZGJ4LXRvb2xzL3NoYXJlZC1jb3JlXCI7XG5pbXBvcnQgdHlwZSB7IEpTT05TY2hlbWE3IH0gZnJvbSBcImpzb24tc2NoZW1hXCI7XG5pbXBvcnQgeyBwYXJzZUFsbG93ZWRVcmxzLCB0b1VybEFsbG93TGlzdCwgdHlwZSBVcmxBbGxvd0xpc3QgfSBmcm9tIFwiLi9hbGxvd2xpc3QudHNcIjtcblxuLyoqXG4gKiBBIFVSTC1wYXR0ZXJuIGdhdGUgZm9yIHBlci10b29sIGFwcHJvdmFsLiBgdHJ1ZWAgZ2F0ZXMgZXZlcnkgY2FsbDsgYVxuICogcGF0dGVybiAob3IgbGlzdCBvZiBwYXR0ZXJucywgaW4gdGhlIHtAbGluayBPbmVPck1hbnl9IHNoYXBlIHVzZWQgYWNyb3NzXG4gKiB0aGUgcmVwbykgZ2F0ZXMgb25seSBjYWxscyB3aG9zZSBVUkwgbWF0Y2hlcy4gUGF0dGVybnMgdXNlIHRoZSBzYW1lIGdsb2JcbiAqIHN5bnRheCBhcyB0aGUgYWxsb3ctbGlzdCAoc2VlIGBhbGxvd2xpc3QudHNgKS4gT21pdCAvIGBmYWxzZWAgZm9yIG5vXG4gKiBhcHByb3ZhbC4gTm9ybWFsaXplZCB0byBhbiB7QGxpbmsgQXBwcm92YWxQb2xpY3l9IGJlZm9yZSB1c2UuXG4gKi9cbmV4cG9ydCB0eXBlIEFwcHJvdmFsR2F0ZSA9IGJvb2xlYW4gfCBPbmVPck1hbnk8c3RyaW5nPiB8IHN0cmluZztcblxuLyoqXG4gKiBUaGUgbm9ybWFsaXplZCBmb3JtIG9mIGFuIHtAbGluayBBcHByb3ZhbEdhdGV9OiB3aGljaCBjYWxscyBwYXVzZSBmb3IgYVxuICogaHVtYW4uIGBcIm5vbmVcImAgcnVucyBldmVyeSBjYWxsIHN0cmFpZ2h0IHRocm91Z2gsIGBcImFsd2F5c1wiYCBnYXRlcyBhbGwgb2ZcbiAqIHRoZW0sIGFuZCBgXCJ1cmxzXCJgIGdhdGVzIG9ubHkgY2FsbHMgd2hvc2UgVVJMIG1hdGNoZXMgb25lIG9mIGBwYXR0ZXJuc2AuXG4gKi9cbmV4cG9ydCB0eXBlIEFwcHJvdmFsUG9saWN5ID1cbiAgfCB7IHJlYWRvbmx5IG1vZGU6IFwibm9uZVwiIH1cbiAgfCB7IHJlYWRvbmx5IG1vZGU6IFwiYWx3YXlzXCIgfVxuICB8IHsgcmVhZG9ubHkgbW9kZTogXCJ1cmxzXCI7IHJlYWRvbmx5IHBhdHRlcm5zOiByZWFkb25seSBzdHJpbmdbXSB9O1xuXG4vKipcbiAqIFdoaWNoIFVSTHMgdGhlIHRvb2xzIG1heSByZWFjaC4gYFwiYWxsb3dsaXN0XCJgIHBlcm1pdHMgb25seSB0aGUgY29uZmlndXJlZFxuICogZW50cmllczsgYFwidW5yZXN0cmljdGVkXCJgIG5hbWVzIHRoZSBwZXJtaXNzaXZlIG1vZGUgZXhwbGljaXRseSwgc28gYW5cbiAqIHVucmVzdHJpY3RlZCBkZXBsb3ltZW50IGlzIGEgc3RhdGVkIGNob2ljZSB2aXNpYmxlIGluIHRoZSBib290IGxvZyByYXRoZXJcbiAqIHRoYW4gYW4gZW1wdHkgbGlzdCBub2JvZHkgbm90aWNlZC5cbiAqL1xuZXhwb3J0IHR5cGUgVXJsUG9saWN5TW9kZSA9IFwidW5yZXN0cmljdGVkXCIgfCBcImFsbG93bGlzdFwiO1xuXG4vKiogRGVkaWNhdGVkIG92ZXJyaWRlIGZvciB0aGUgd2ViLXNlYXJjaCBlbmRwb2ludCBpZC4gKi9cbmV4cG9ydCBjb25zdCBNT0RFTF9FTlYgPSBcIldFQl9TRUFSQ0hfTU9ERUxcIjtcblxuLyoqIEFwcEtpdCdzIHN0YW5kYXJkIGVudmlyb25tZW50IG5hbWUgZm9yIGEgTW9kZWwgU2VydmluZyBlbmRwb2ludCBiaW5kaW5nLiAqL1xuZXhwb3J0IGNvbnN0IFNFUlZJTkdfRU5EUE9JTlRfRU5WID0gXCJEQVRBQlJJQ0tTX1NFUlZJTkdfRU5EUE9JTlRfTkFNRVwiO1xuXG4vKiogV2hlcmUgdGhlIHBpbm5lZCB3ZWItc2VhcmNoIGVuZHBvaW50IGlkIGNhbWUgZnJvbSwgb3IgYFwibm9uZVwiYCB3aGVuIHVucGlubmVkLiAqL1xuZXhwb3J0IHR5cGUgTW9kZWxTb3VyY2UgPSBcImNvbmZpZ1wiIHwgdHlwZW9mIE1PREVMX0VOViB8IHR5cGVvZiBTRVJWSU5HX0VORFBPSU5UX0VOViB8IFwibm9uZVwiO1xuXG4vKipcbiAqIERlZmF1bHQgd2ViLXNlYXJjaCBtb2RlbCBwcmVmZXJlbmNlLCB0cmllZCBpbiBvcmRlciB3aGVuIG5vIG1vZGVsIGlzXG4gKiBwaW5uZWQuIEdlbWluaSBmaXJzdCwgdGhlbiBHUFQgLSBib3RoIHN1cHBvcnQgdGhlIG5hdGl2ZSB3ZWItc2VhcmNoIHRvb2w7XG4gKiBhIHdvcmtzcGFjZSB0eXBpY2FsbHkgaGFzIGF0IGxlYXN0IG9uZS4gRWFjaCBpcyBmdXp6eS1tYXRjaGVkIGFnYWluc3QgdGhlXG4gKiBsaXZlIGNhdGFsb2d1ZSwgc28gYSBjbG9zZSB2YXJpYW50IChlLmcuIGBkYXRhYnJpY2tzLWdlbWluaS0zLTEtcHJvYCkgaXNcbiAqIHBpY2tlZCB3aGVuIHRoZSBleGFjdCBpZCBpc24ndCBwcmVzZW50LlxuICovXG5leHBvcnQgY29uc3QgREVGQVVMVF9NT0RFTF9GQUxMQkFDS1M6IHJlYWRvbmx5IHN0cmluZ1tdID0gW1xuICBcImRhdGFicmlja3MtZ2VtaW5pLTMtcHJvXCIsXG4gIFwiZGF0YWJyaWNrcy1nZW1pbmktMi01LXByb1wiLFxuICBcImRhdGFicmlja3MtZ3B0LTVcIixcbiAgXCJkYXRhYnJpY2tzLWdwdC01LW1pbmlcIixcbl07XG5cbi8qKiBEZWZhdWx0IGNhcCBvbiB0aGUgbnVtYmVyIG9mIGNpdGF0aW9ucyByZXR1cm5lZCBmcm9tIGEgc2luZ2xlIHNlYXJjaC4gKi9cbmV4cG9ydCBjb25zdCBERUZBVUxUX01BWF9DSVRBVElPTlMgPSAxMDtcblxuLyoqIERlZmF1bHQgY2FwIG9uIGNoYXJhY3RlcnMgcmV0dXJuZWQgZnJvbSBhIHNpbmdsZSBgd2ViX2ZldGNoYC4gKi9cbmV4cG9ydCBjb25zdCBERUZBVUxUX0ZFVENIX01BWF9MRU5HVEggPSA1MF8wMDA7XG5cbi8qKiBEZWZhdWx0IHBlci1yZXF1ZXN0IG5ldHdvcmsgdGltZW91dCAobXMpIGZvciBzZWFyY2ggKyBmZXRjaC4gKi9cbmV4cG9ydCBjb25zdCBERUZBVUxUX1RJTUVPVVRfTVMgPSAzMF8wMDA7XG5cbi8qKiBBcHBLaXQgY29uZmlnIGFjY2VwdGVkIGJ5IHRoZSB3ZWItc2VhcmNoIHBsdWdpbi4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgV2ViU2VhcmNoUGx1Z2luQ29uZmlnIGV4dGVuZHMgQmFzZVBsdWdpbkNvbmZpZyB7XG4gIC8qKlxuICAgKiBUaGUgd2ViLXNlYXJjaCBtb2RlbCB0byB1c2UgYnkgZGVmYXVsdDogYSBEYXRhYnJpY2tzIHNlcnZpbmcgZW5kcG9pbnRcbiAgICogbmFtZSAoYFwiZGF0YWJyaWNrcy1nZW1pbmktMy1wcm9cImApLCBhIGxvb3NlIG5hbWUgKGBcImdlbWluaVwiYCwgYFwiZ3B0XCJgKSxcbiAgICogb3IgYSBjYXBhYmlsaXR5IGNsYXNzLiBGdXp6eS1tYXRjaGVkIGFnYWluc3QgdGhlIGxpdmUgY2F0YWxvZ3VlLiBGYWxsc1xuICAgKiBiYWNrIHRvIGBXRUJfU0VBUkNIX01PREVMYCwgdGhlbiBgREFUQUJSSUNLU19TRVJWSU5HX0VORFBPSU5UX05BTUVgLCB0aGVuXG4gICAqIHRoZSB7QGxpbmsgbW9kZWxGYWxsYmFja3N9IG9yZGVyLiBDaG9zZW4gaW5kZXBlbmRlbnRseSBvZiB0aGUgY2FsbGluZ1xuICAgKiBhZ2VudCdzIGNoYXQgbW9kZWwuXG4gICAqL1xuICBtb2RlbD86IHN0cmluZztcbiAgLyoqXG4gICAqIFByaW9yaXR5LW9yZGVyZWQgd2ViLXNlYXJjaCBtb2RlbCBjYW5kaWRhdGVzIHRyaWVkIHdoZW4ge0BsaW5rIG1vZGVsfSBpc1xuICAgKiB1bnNldCwgZWFjaCBmdXp6eS1tYXRjaGVkIGFuZCBjaGVja2VkIGZvciB3ZWItc2VhcmNoIHN1cHBvcnQuIEZhbGxzIGJhY2tcbiAgICogdG8gYFdFQl9TRUFSQ0hfTU9ERUxfRkFMTEJBQ0tTYCAoY29tbWEvc3BhY2Utc2VwYXJhdGVkKSwgdGhlblxuICAgKiB7QGxpbmsgREVGQVVMVF9NT0RFTF9GQUxMQkFDS1N9IChHZW1pbmksIHRoZW4gR1BUKS5cbiAgICovXG4gIG1vZGVsRmFsbGJhY2tzPzogc3RyaW5nIHwgc3RyaW5nW107XG4gIC8qKlxuICAgKiBQcm92aWRlciAtPiB0b29sLXNwZWMgb3ZlcnJpZGUgbWFwLCBtZXJnZWQgb3ZlciB0aGUgYnVpbHQtaW5cbiAgICoge0BsaW5rIFdFQl9TRUFSQ0hfUFJPVklERVJTfSBkZWZhdWx0cy4gS2V5ZWQgYnkgcHJvdmlkZXIgZmFtaWx5XG4gICAqIChgXCJvcGVuYWlcImAsIGBcImdlbWluaVwiYCk7IGVhY2ggdmFsdWUgbWF5IG92ZXJyaWRlIHRoZSBgdG9vbGAgZW50cnlcbiAgICogYW5kL29yIHRoZSBgYXBpYCBzdXJmYWNlLiBVc2UgdG8gY2hhbmdlIHRoZSB0b29sIHNoYXBlIGFzIHRoZSBwbGF0Zm9ybVxuICAgKiBldm9sdmVzIHdpdGhvdXQgYSBjb2RlIGNoYW5nZS4gRmFsbHMgYmFjayB0byBgV0VCX1NFQVJDSF9UT09MU2AgcGFyc2VkIGFzXG4gICAqIEpTT04uIFRoaXMgaXMgdGhlIGBXRUJfU0VBUkNIX1RPT0xTYCBzZXR0aW5nLlxuICAgKi9cbiAgd2ViU2VhcmNoVG9vbHM/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgLyoqXG4gICAqIEVuYWJsZSBmdXp6eSBtYXRjaGluZyBvZiBsb29zZSBtb2RlbCBuYW1lcyBhZ2FpbnN0IHRoZSBjYXRhbG9ndWUuXG4gICAqIERlZmF1bHRzIHRvIGB0cnVlYDsgZmFsbHMgYmFjayB0byBgV0VCX1NFQVJDSF9GVVpaWWAuXG4gICAqL1xuICBtb2RlbEZ1enp5TWF0Y2g/OiBib29sZWFuO1xuICAvKiogRnVzZS5qcyBmdXp6eSB0aHJlc2hvbGQuIEZhbGxzIGJhY2sgdG8gYFdFQl9TRUFSQ0hfRlVaWllfVEhSRVNIT0xEYCwgdGhlbiB0aGUgc2hhcmVkIGRlZmF1bHQuICovXG4gIG1vZGVsRnV6enlUaHJlc2hvbGQ/OiBudW1iZXI7XG4gIC8qKlxuICAgKiBIYXJkIGNhcCBvbiB0aGUgbnVtYmVyIG9mIGNpdGF0aW9ucyBhIHNpbmdsZSBzZWFyY2ggcmV0dXJucy4gRmFsbHMgYmFja1xuICAgKiB0byBgV0VCX1NFQVJDSF9NQVhfQ0lUQVRJT05TYCwgdGhlbiB7QGxpbmsgREVGQVVMVF9NQVhfQ0lUQVRJT05TfS5cbiAgICovXG4gIG1heENpdGF0aW9ucz86IG51bWJlcjtcbiAgLyoqXG4gICAqIEhhcmQgY2FwIG9uIHRoZSBjaGFyYWN0ZXIgbGVuZ3RoIG9mIGEgc2luZ2xlIGB3ZWJfZmV0Y2hgIHJlc3VsdC4gRmFsbHNcbiAgICogYmFjayB0byBgV0VCX1NFQVJDSF9GRVRDSF9NQVhfTEVOR1RIYCwgdGhlbiB7QGxpbmsgREVGQVVMVF9GRVRDSF9NQVhfTEVOR1RIfS5cbiAgICovXG4gIGZldGNoTWF4TGVuZ3RoPzogbnVtYmVyO1xuICAvKipcbiAgICogUGVyLXJlcXVlc3QgbmV0d29yayB0aW1lb3V0IGluIG1zIGZvciBzZWFyY2ggKyBmZXRjaC4gRmFsbHMgYmFjayB0b1xuICAgKiBgV0VCX1NFQVJDSF9USU1FT1VUX01TYCwgdGhlbiB7QGxpbmsgREVGQVVMVF9USU1FT1VUX01TfS5cbiAgICovXG4gIHRpbWVvdXRNcz86IG51bWJlcjtcbiAgLyoqXG4gICAqIEZhbGwgYmFjayB0byBhIER1Y2tEdWNrR28gc2NyYXBlIHdoZW4gdGhlIHdvcmtzcGFjZSBoYXMgTk8gZGVwbG95ZWRcbiAgICogd2ViLXNlYXJjaC1jYXBhYmxlIG1vZGVsIChubyBHUFQgLyBHZW1pbmkgc2VydmluZyBlbmRwb2ludCkuIFRoZSBuYXRpdmVcbiAgICogRGF0YWJyaWNrcyB0b29sIGlzIGFsd2F5cyBwcmVmZXJyZWQ7IHRoaXMgb25seSBraWNrcyBpbiB3aGVuIHRoZXJlIGlzIG5vXG4gICAqIG5hdGl2ZSBvcHRpb24sIHNvIHRoZSB0b29sIHN0aWxsIHJldHVybnMgcmVzdWx0cyBpbnN0ZWFkIG9mIGVycm9yaW5nLlxuICAgKiBEZWZhdWx0cyB0byBgdHJ1ZWA7IHNldCBgZmFsc2VgIChvciBgV0VCX1NFQVJDSF9TQ1JBUEVfRkFMTEJBQ0s9MGApIHRvXG4gICAqIHJlcXVpcmUgYSBuYXRpdmUgbW9kZWwgYW5kIGVycm9yIG90aGVyd2lzZS5cbiAgICovXG4gIHNjcmFwZUZhbGxiYWNrPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIFdoaWNoIFVSTHMgdGhlIHRvb2xzIG1heSByZWFjaCAoe0BsaW5rIFVybFBvbGljeU1vZGV9KS4gRmFsbHMgYmFjayB0b1xuICAgKiBgV0VCX1NFQVJDSF9VUkxfUE9MSUNZYCwgdGhlbiB0byBgXCJhbGxvd2xpc3RcImAgd2hlbiB7QGxpbmsgYWxsb3dlZFVybHN9XG4gICAqIGhhcyBlbnRyaWVzIGFuZCBgXCJ1bnJlc3RyaWN0ZWRcImAgd2hlbiBpdCBkb2VzIG5vdC4gTmFtaW5nIHRoZSBtb2RlXG4gICAqIGV4cGxpY2l0bHkgaXMgdGhlIHdheSB0byBzdGF0ZSB0aGF0IGFuIG9wZW4gZGVwbG95bWVudCBpcyBpbnRlbmRlZDtcbiAgICogYFwiYWxsb3dsaXN0XCJgIHdpdGggbm8gZW50cmllcywgb3IgYFwidW5yZXN0cmljdGVkXCJgIGFsb25nc2lkZSBlbnRyaWVzLCBpc1xuICAgKiBhIGNvbnRyYWRpY3Rpb24gYW5kIGZhaWxzIGF0IHJlc29sdXRpb24uXG4gICAqL1xuICB1cmxQb2xpY3k/OiBVcmxQb2xpY3lNb2RlO1xuICAvKipcbiAgICogT3B0aW9uYWwgVVJMIGFsbG93LWxpc3QuIEVhY2ggZW50cnkgaXMgYSBnbG9iIChvciBiYXJlIGhvc3QpIHRlc3RlZFxuICAgKiBhZ2FpbnN0IGEgVVJMJ3MgZnVsbCBgaHJlZmAuIFdoZW4gc2V0LCBgd2ViX3NlYXJjaGAgc2lsZW50bHkgZmlsdGVyc1xuICAgKiBjaXRhdGlvbnMgdG8gdGhlIHBlcm1pdHRlZCBzZXQgYW5kIGB3ZWJfZmV0Y2hgIHJlZnVzZXMgYSBkaXNhbGxvd2VkIFVSTC5cbiAgICogQWNjZXB0cyBhIGBzdHJpbmdbXWAgb3IgYSBjb21tYS0vd2hpdGVzcGFjZS1zZXBhcmF0ZWQgc3RyaW5nOyBmYWxscyBiYWNrXG4gICAqIHRvIGBXRUJfU0VBUkNIX0FMTE9XRURfVVJMU2AuIE9taXQgKG9yIGxlYXZlIGVtcHR5KSBmb3Igbm8gcmVzdHJpY3Rpb24uXG4gICAqIFNlZSBgYWxsb3dsaXN0LnRzYC5cbiAgICovXG4gIGFsbG93ZWRVcmxzPzogc3RyaW5nIHwgc3RyaW5nW107XG4gIC8qKlxuICAgKiBBcHByb3ZhbCBnYXRlIGFwcGxpZWQgdG8gQk9USCB0b29scyAocGVyLXRvb2wgb3ZlcnJpZGVzIHZpYVxuICAgKiB7QGxpbmsgV2ViU2VhcmNoVG9vbE9wdGlvbnMuYXBwcm92YWx9IHdpbikuIGB0cnVlYCBnYXRlcyBldmVyeSBjYWxsO1xuICAgKiBhIFVSTC1wYXR0ZXJuIChvciBsaXN0KSBnYXRlcyBvbmx5IG1hdGNoaW5nIGNhbGxzOyBhblxuICAgKiB7QGxpbmsgQXBwcm92YWxQb2xpY3l9IHN0YXRlcyB0aGUgbW9kZSBkaXJlY3RseS4gT21pdCBmb3Igbm8gYXBwcm92YWwuXG4gICAqL1xuICBhcHByb3ZhbD86IEFwcHJvdmFsR2F0ZSB8IEFwcHJvdmFsUG9saWN5O1xufVxuXG4vKiogQ29uY3JldGUsIHZhbGlkYXRlZCBjb25maWcgdGhlIHJ1bnRpbWUgKyB0b29scyByZWFkLiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZXNvbHZlZFdlYlNlYXJjaENvbmZpZyB7XG4gIC8qKiBQaW5uZWQgd2ViLXNlYXJjaCBtb2RlbCwgd2hlbiBjb25maWd1cmVkIChlbHNlIHVuZGVmaW5lZCAtIHVzZSBmYWxsYmFja3MpLiAqL1xuICBtb2RlbD86IHN0cmluZztcbiAgLyoqIFdoZXJlIHtAbGluayBtb2RlbH0gY2FtZSBmcm9tLCB3aGljaCBkZWNpZGVzIHdoZXRoZXIgYW4gdW5zdXBwb3J0ZWQgcGluIGlzIGZhdGFsLiAqL1xuICBtb2RlbFNvdXJjZTogTW9kZWxTb3VyY2U7XG4gIC8qKiBPcmRlcmVkIGZhbGxiYWNrIG1vZGVsIGNhbmRpZGF0ZXMgKEdlbWluaSwgdGhlbiBHUFQsIHRoZW4gYSBmbG9vcikuICovXG4gIG1vZGVsRmFsbGJhY2tzOiByZWFkb25seSBzdHJpbmdbXTtcbiAgLyoqIFByb3ZpZGVyIC0+IHRvb2wtc3BlYyBvdmVycmlkZSBtYXAsIG1lcmdlZCBvdmVyIHRoZSBidWlsdC1pbiBkZWZhdWx0cy4gKi9cbiAgd2ViU2VhcmNoVG9vbHM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAvKiogV2hldGhlciB0byBmdXp6eS1tYXRjaCBsb29zZSBtb2RlbCBuYW1lcy4gKi9cbiAgZnV6enk6IGJvb2xlYW47XG4gIC8qKiBGdXNlLmpzIGZ1enp5IHRocmVzaG9sZC4gKi9cbiAgZnV6enlUaHJlc2hvbGQ6IG51bWJlcjtcbiAgbWF4Q2l0YXRpb25zOiBudW1iZXI7XG4gIGZldGNoTWF4TGVuZ3RoOiBudW1iZXI7XG4gIHRpbWVvdXRNczogbnVtYmVyO1xuICAvKiogV2hldGhlciB0byBzY3JhcGUtZmFsbGJhY2sgd2hlbiBubyBuYXRpdmUgd2ViLXNlYXJjaCBtb2RlbCBpcyBkZXBsb3llZC4gKi9cbiAgc2NyYXBlRmFsbGJhY2s6IGJvb2xlYW47XG4gIC8qKiBUaGUgbmFtZWQgVVJMIHBvbGljeSBpbiBmb3JjZS4gKi9cbiAgdXJsUG9saWN5OiBVcmxQb2xpY3lNb2RlO1xuICAvKiogQ29tcGlsZWQgYWxsb3ctbGlzdCAocGVybWl0LWFsbCB1bmRlciB0aGUgYHVucmVzdHJpY3RlZGAgcG9saWN5KS4gKi9cbiAgYWxsb3dMaXN0OiBVcmxBbGxvd0xpc3Q7XG4gIC8qKiBEZWZhdWx0IHBlci10b29sIGFwcHJvdmFsIHBvbGljeS4gKi9cbiAgYXBwcm92YWw6IEFwcHJvdmFsUG9saWN5O1xufVxuXG4vKiogSlNPTiBTY2hlbWEgcHVibGlzaGVkIG9uIHRoZSBtYW5pZmVzdCdzIGBjb25maWcuc2NoZW1hYC4gKi9cbmV4cG9ydCBjb25zdCBXRUJfU0VBUkNIX0NPTkZJR19TQ0hFTUE6IEpTT05TY2hlbWE3ID0ge1xuICB0eXBlOiBcIm9iamVjdFwiLFxuICBwcm9wZXJ0aWVzOiB7XG4gICAgbW9kZWw6IHtcbiAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICBkZXNjcmlwdGlvbjpcbiAgICAgICAgXCJEZWZhdWx0IHdlYi1zZWFyY2ggbW9kZWwgKGVuZHBvaW50IG5hbWUsIGxvb3NlIG5hbWUsIG9yIGNsYXNzKS4gRnV6enktbWF0Y2hlZC4gRW52OiBXRUJfU0VBUkNIX01PREVMLCB0aGVuIERBVEFCUklDS1NfU0VSVklOR19FTkRQT0lOVF9OQU1FLlwiLFxuICAgIH0sXG4gICAgbW9kZWxGYWxsYmFja3M6IHtcbiAgICAgIHR5cGU6IFwiYXJyYXlcIixcbiAgICAgIGl0ZW1zOiB7IHR5cGU6IFwic3RyaW5nXCIgfSxcbiAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICBcIk9yZGVyZWQgd2ViLXNlYXJjaCBtb2RlbCBjYW5kaWRhdGVzIHdoZW4gYG1vZGVsYCBpcyB1bnNldCAoR2VtaW5pLCB0aGVuIEdQVCkuIEVudjogV0VCX1NFQVJDSF9NT0RFTF9GQUxMQkFDS1MuXCIsXG4gICAgfSxcbiAgICB3ZWJTZWFyY2hUb29sczoge1xuICAgICAgdHlwZTogXCJvYmplY3RcIixcbiAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICAnUHJvdmlkZXIgLT4gdG9vbC1zcGVjIG92ZXJyaWRlIG1hcCBtZXJnZWQgb3ZlciB0aGUgYnVpbHQtaW4gZGVmYXVsdHMgKG9wZW5haSAtPiB7XCJ0eXBlXCI6XCJ3ZWJfc2VhcmNoXCJ9LCBnZW1pbmkgLT4ge1wiZ29vZ2xlX3NlYXJjaFwiOnt9fSkuIEVudjogV0VCX1NFQVJDSF9UT09MUyAoSlNPTikuJyxcbiAgICB9LFxuICAgIG1vZGVsRnV6enlNYXRjaDoge1xuICAgICAgdHlwZTogXCJib29sZWFuXCIsXG4gICAgICBkZXNjcmlwdGlvbjpcbiAgICAgICAgXCJGdXp6eS1tYXRjaCBsb29zZSBtb2RlbCBuYW1lcyBhZ2FpbnN0IHRoZSBsaXZlIGNhdGFsb2d1ZS4gRGVmYXVsdCB0cnVlIChlbnY6IFdFQl9TRUFSQ0hfRlVaWlkpLlwiLFxuICAgIH0sXG4gICAgbW9kZWxGdXp6eVRocmVzaG9sZDoge1xuICAgICAgdHlwZTogXCJudW1iZXJcIixcbiAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICBcIkZ1c2UuanMgc2NvcmUgdGhyZXNob2xkIGJlbG93IHdoaWNoIGEgZnV6enkgbW9kZWwgbWF0Y2ggaXMgYWNjZXB0ZWQgKGVudjogV0VCX1NFQVJDSF9GVVpaWV9USFJFU0hPTEQpLlwiLFxuICAgIH0sXG4gICAgbWF4Q2l0YXRpb25zOiB7XG4gICAgICB0eXBlOiBcIm51bWJlclwiLFxuICAgICAgZGVzY3JpcHRpb246IFwiSGFyZCBjYXAgb24gY2l0YXRpb25zIHJldHVybmVkIChlbnY6IFdFQl9TRUFSQ0hfTUFYX0NJVEFUSU9OUykuXCIsXG4gICAgfSxcbiAgICBmZXRjaE1heExlbmd0aDoge1xuICAgICAgdHlwZTogXCJudW1iZXJcIixcbiAgICAgIGRlc2NyaXB0aW9uOiBcIkhhcmQgY2FwIG9uIHdlYl9mZXRjaCBjb250ZW50IGxlbmd0aCAoZW52OiBXRUJfU0VBUkNIX0ZFVENIX01BWF9MRU5HVEgpLlwiLFxuICAgIH0sXG4gICAgdGltZW91dE1zOiB7XG4gICAgICB0eXBlOiBcIm51bWJlclwiLFxuICAgICAgZGVzY3JpcHRpb246IFwiUGVyLXJlcXVlc3QgbmV0d29yayB0aW1lb3V0IGluIG1zIChlbnY6IFdFQl9TRUFSQ0hfVElNRU9VVF9NUykuXCIsXG4gICAgfSxcbiAgICBzY3JhcGVGYWxsYmFjazoge1xuICAgICAgdHlwZTogXCJib29sZWFuXCIsXG4gICAgICBkZXNjcmlwdGlvbjpcbiAgICAgICAgXCJGYWxsIGJhY2sgdG8gYSBEdWNrRHVja0dvIHNjcmFwZSB3aGVuIG5vIHdlYi1zZWFyY2gtY2FwYWJsZSBtb2RlbCBpcyBkZXBsb3llZC4gRGVmYXVsdCB0cnVlIChlbnY6IFdFQl9TRUFSQ0hfU0NSQVBFX0ZBTExCQUNLKS5cIixcbiAgICB9LFxuICAgIHVybFBvbGljeToge1xuICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgIGVudW06IFtcInVucmVzdHJpY3RlZFwiLCBcImFsbG93bGlzdFwiXSxcbiAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICBcIldoaWNoIFVSTHMgdGhlIHRvb2xzIG1heSByZWFjaC4gRGVmYXVsdHMgdG8gYWxsb3dsaXN0IHdoZW4gYWxsb3dlZFVybHMgaGFzIGVudHJpZXMsIGVsc2UgdW5yZXN0cmljdGVkIChlbnY6IFdFQl9TRUFSQ0hfVVJMX1BPTElDWSkuXCIsXG4gICAgfSxcbiAgICBhbGxvd2VkVXJsczoge1xuICAgICAgdHlwZTogXCJhcnJheVwiLFxuICAgICAgaXRlbXM6IHsgdHlwZTogXCJzdHJpbmdcIiB9LFxuICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgICdVUkwgYWxsb3ctbGlzdCBvZiBnbG9icyAvIGJhcmUgaG9zdHMgKGUuZy4gXCIqLmRhdGFicmlja3MuY29tXCIsIFwiZG9jcy5leGFtcGxlLmNvbVwiKS4gQWxzbyBhY2NlcHRzIGEgY29tbWEvc3BhY2Utc2VwYXJhdGVkIHN0cmluZy4gRmFsbHMgYmFjayB0byBXRUJfU0VBUkNIX0FMTE9XRURfVVJMUy4gRW1wdHkgPSB1bnJlc3RyaWN0ZWQuJyxcbiAgICB9LFxuICAgIGFwcHJvdmFsOiB7XG4gICAgICBkZXNjcmlwdGlvbjpcbiAgICAgICAgJ0FwcHJvdmFsIGdhdGUgZm9yIGJvdGggdG9vbHM6IHRydWUgZ2F0ZXMgZXZlcnkgY2FsbCwgYSBnbG9iIChvciBsaXN0IG9mIGdsb2JzKSBnYXRlcyBvbmx5IG1hdGNoaW5nIFVSTHMsIG9yIHN0YXRlIHRoZSBtb2RlIGRpcmVjdGx5IGFzIHtcIm1vZGVcIjpcIm5vbmVcInxcImFsd2F5c1wifFwidXJsc1wifS4gRGVmYXVsdCBub25lLicsXG4gICAgICBvbmVPZjogW1xuICAgICAgICB7IHR5cGU6IFwiYm9vbGVhblwiIH0sXG4gICAgICAgIHsgdHlwZTogXCJzdHJpbmdcIiB9LFxuICAgICAgICB7IHR5cGU6IFwiYXJyYXlcIiwgaXRlbXM6IHsgdHlwZTogXCJzdHJpbmdcIiB9IH0sXG4gICAgICAgIHtcbiAgICAgICAgICB0eXBlOiBcIm9iamVjdFwiLFxuICAgICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIG1vZGU6IHsgdHlwZTogXCJzdHJpbmdcIiwgZW51bTogW1wibm9uZVwiLCBcImFsd2F5c1wiLCBcInVybHNcIl0gfSxcbiAgICAgICAgICAgIHBhdHRlcm5zOiB7IHR5cGU6IFwiYXJyYXlcIiwgaXRlbXM6IHsgdHlwZTogXCJzdHJpbmdcIiB9IH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgICByZXF1aXJlZDogW1wibW9kZVwiXSxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfSxcbiAgfSxcbn07XG5cbi8qKlxuICogUGFyc2UgdGhlIGBXRUJfU0VBUkNIX1RPT0xTYCBlbnYgdmFyIChKU09OIG9iamVjdCksIGVsc2UgYHt9YC4gQSB2YWx1ZSB0aGF0XG4gKiBpcyBzZXQgYnV0IG5vdCBhIEpTT04gb2JqZWN0IGlzIGEgZGVwbG95bWVudCBtaXN0YWtlIHRoYXQgd291bGQgb3RoZXJ3aXNlXG4gKiBzaWxlbnRseSBsZWF2ZSB0aGUgYnVpbHQtaW4gdG9vbCBzcGVjcyBpbiBwbGFjZSwgc28gaXQgdGhyb3dzLlxuICovXG5mdW5jdGlvbiBwYXJzZVRvb2xzRW52KCk6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcbiAgY29uc3QgcmF3ID0gY29uZmlnVXRpbHMudGV4dChcIldFQl9TRUFSQ0hfVE9PTFNcIiwgY29uZmlnVXRpbHMuRU5WX09OTFkpO1xuICBpZiAocmF3ID09PSB1bmRlZmluZWQpIHJldHVybiB7fTtcbiAgY29uc3QgcGFyc2VkID0ganNvbi5wYXJzZVJlY29yZChyYXcpO1xuICBpZiAoIXBhcnNlZCkge1xuICAgIHRocm93IG5ldyBDb25maWd1cmF0aW9uRXJyb3IoXG4gICAgICBcIldFQl9TRUFSQ0hfVE9PTFMgbXVzdCBiZSBhIEpTT04gb2JqZWN0IG1hcHBpbmcgYSBwcm92aWRlciBmYW1pbHkgdG8gaXRzIHRvb2wgc3BlY1wiLFxuICAgICAgeyBjb250ZXh0OiB7IGVudlZhcjogXCJXRUJfU0VBUkNIX1RPT0xTXCIgfSB9LFxuICAgICk7XG4gIH1cbiAgcmV0dXJuIHBhcnNlZDtcbn1cblxuLyoqIFJlYWQgdGhlIHBpbm5lZCBlbmRwb2ludCBpZCBhbmQgcmVjb3JkIHdoaWNoIHNvdXJjZSBzdXBwbGllZCBpdC4gKi9cbmZ1bmN0aW9uIHJlc29sdmVNb2RlbFBpbihjb25maWc6IFdlYlNlYXJjaFBsdWdpbkNvbmZpZyk6IHsgbW9kZWw/OiBzdHJpbmc7IHNvdXJjZTogTW9kZWxTb3VyY2UgfSB7XG4gIGNvbnN0IGZyb21Db25maWcgPSBzdHJpbmdVdGlscy50cmltVG9OdWxsKGNvbmZpZy5tb2RlbCk7XG4gIGlmIChmcm9tQ29uZmlnICE9PSBudWxsKSByZXR1cm4geyBtb2RlbDogZnJvbUNvbmZpZywgc291cmNlOiBcImNvbmZpZ1wiIH07XG4gIGNvbnN0IGZyb21Nb2RlbEVudiA9IGNvbmZpZ1V0aWxzLnRleHQoTU9ERUxfRU5WLCBjb25maWdVdGlscy5FTlZfT05MWSk7XG4gIGlmIChmcm9tTW9kZWxFbnYgIT09IHVuZGVmaW5lZCkgcmV0dXJuIHsgbW9kZWw6IGZyb21Nb2RlbEVudiwgc291cmNlOiBNT0RFTF9FTlYgfTtcbiAgY29uc3QgZnJvbVJlc291cmNlRW52ID0gY29uZmlnVXRpbHMudGV4dChTRVJWSU5HX0VORFBPSU5UX0VOViwgY29uZmlnVXRpbHMuRU5WX09OTFkpO1xuICBpZiAoZnJvbVJlc291cmNlRW52ICE9PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4geyBtb2RlbDogZnJvbVJlc291cmNlRW52LCBzb3VyY2U6IFNFUlZJTkdfRU5EUE9JTlRfRU5WIH07XG4gIH1cbiAgcmV0dXJuIHsgc291cmNlOiBcIm5vbmVcIiB9O1xufVxuXG4vKipcbiAqIFJlc29sdmUgdGhlIG5hbWVkIHtAbGluayBVcmxQb2xpY3lNb2RlfSwgZmFpbGluZyBvbiBhIHN0YXRlZCBtb2RlIHRoYXRcbiAqIGNvbnRyYWRpY3RzIHRoZSBhbGxvdy1saXN0IGVudHJpZXMgaXQgd2FzIGdpdmVuLlxuICovXG5mdW5jdGlvbiByZXNvbHZlVXJsUG9saWN5KFxuICBjb25maWd1cmVkOiBVcmxQb2xpY3lNb2RlIHwgdW5kZWZpbmVkLFxuICBwYXR0ZXJuczogcmVhZG9ubHkgc3RyaW5nW10sXG4pOiBVcmxQb2xpY3lNb2RlIHtcbiAgY29uc3QgcmF3ID0gY29uZmlndXJlZCA/PyBjb25maWdVdGlscy50ZXh0KFwiV0VCX1NFQVJDSF9VUkxfUE9MSUNZXCIsIGNvbmZpZ1V0aWxzLkVOVl9PTkxZKTtcbiAgaWYgKHJhdyA9PT0gdW5kZWZpbmVkKSByZXR1cm4gcGF0dGVybnMubGVuZ3RoID4gMCA/IFwiYWxsb3dsaXN0XCIgOiBcInVucmVzdHJpY3RlZFwiO1xuICBpZiAocmF3ICE9PSBcImFsbG93bGlzdFwiICYmIHJhdyAhPT0gXCJ1bnJlc3RyaWN0ZWRcIikge1xuICAgIHRocm93IG5ldyBDb25maWd1cmF0aW9uRXJyb3IoXG4gICAgICAndXJsUG9saWN5IG11c3QgYmUgXCJhbGxvd2xpc3RcIiBvciBcInVucmVzdHJpY3RlZFwiIChlbnY6IFdFQl9TRUFSQ0hfVVJMX1BPTElDWSknLFxuICAgICAgeyBjb250ZXh0OiB7IGZpZWxkOiBcInVybFBvbGljeVwiLCBlbnZWYXI6IFwiV0VCX1NFQVJDSF9VUkxfUE9MSUNZXCIgfSB9LFxuICAgICk7XG4gIH1cbiAgaWYgKHJhdyA9PT0gXCJhbGxvd2xpc3RcIiAmJiBwYXR0ZXJucy5sZW5ndGggPT09IDApIHtcbiAgICB0aHJvdyBuZXcgQ29uZmlndXJhdGlvbkVycm9yKFxuICAgICAgJ3VybFBvbGljeSBcImFsbG93bGlzdFwiIG5lZWRzIGF0IGxlYXN0IG9uZSBlbnRyeSBpbiBhbGxvd2VkVXJscyAoZW52OiBXRUJfU0VBUkNIX0FMTE9XRURfVVJMUyknLFxuICAgICAgeyBjb250ZXh0OiB7IGZpZWxkOiBcImFsbG93ZWRVcmxzXCIsIGVudlZhcjogXCJXRUJfU0VBUkNIX0FMTE9XRURfVVJMU1wiIH0gfSxcbiAgICApO1xuICB9XG4gIGlmIChyYXcgPT09IFwidW5yZXN0cmljdGVkXCIgJiYgcGF0dGVybnMubGVuZ3RoID4gMCkge1xuICAgIHRocm93IG5ldyBDb25maWd1cmF0aW9uRXJyb3IoXG4gICAgICAndXJsUG9saWN5IFwidW5yZXN0cmljdGVkXCIgY2Fubm90IGJlIGNvbWJpbmVkIHdpdGggYWxsb3dlZFVybHMgZW50cmllczsgZHJvcCB0aGUgZW50cmllcyBvciBzZXQgdXJsUG9saWN5IHRvIFwiYWxsb3dsaXN0XCInLFxuICAgICAgeyBjb250ZXh0OiB7IGZpZWxkOiBcImFsbG93ZWRVcmxzXCIsIGVudlZhcjogXCJXRUJfU0VBUkNIX0FMTE9XRURfVVJMU1wiIH0gfSxcbiAgICApO1xuICB9XG4gIHJldHVybiByYXc7XG59XG5cbi8qKlxuICogTm9ybWFsaXplIGFueSBhY2NlcHRlZCBhcHByb3ZhbCBzcGVsbGluZyBpbnRvIGFuIHtAbGluayBBcHByb3ZhbFBvbGljeX0uXG4gKiBBIHBhdHRlcm4gZ2F0ZSB3aXRoIG5vIHVzYWJsZSBwYXR0ZXJucyBjb2xsYXBzZXMgdG8gYFwibm9uZVwiYCByYXRoZXIgdGhhblxuICogZ2F0aW5nIGV2ZXJ5dGhpbmcsIHNvIGEgYmxhbmsgZW52IHZhciBjYW4gbmV2ZXIgd2VkZ2UgdGhlIHRvb2xzIGJlaGluZCBhblxuICogYXBwcm92YWwgbm9ib2R5IGNvbmZpZ3VyZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0FwcHJvdmFsUG9saWN5KGdhdGU6IEFwcHJvdmFsR2F0ZSB8IEFwcHJvdmFsUG9saWN5IHwgdW5kZWZpbmVkKTogQXBwcm92YWxQb2xpY3kge1xuICBpZiAoZ2F0ZSA9PT0gdW5kZWZpbmVkIHx8IGdhdGUgPT09IGZhbHNlKSByZXR1cm4geyBtb2RlOiBcIm5vbmVcIiB9O1xuICBpZiAoZ2F0ZSA9PT0gdHJ1ZSkgcmV0dXJuIHsgbW9kZTogXCJhbHdheXNcIiB9O1xuICBpZiAob2JqZWN0LmlzUmVjb3JkKGdhdGUpICYmIFwibW9kZVwiIGluIGdhdGUpIHtcbiAgICBpZiAoZ2F0ZS5tb2RlID09PSBcInVybHNcIikge1xuICAgICAgY29uc3QgcGF0dGVybnMgPSBwYXJzZUFsbG93ZWRVcmxzKFsuLi5nYXRlLnBhdHRlcm5zXSk7XG4gICAgICByZXR1cm4gcGF0dGVybnMubGVuZ3RoID4gMCA/IHsgbW9kZTogXCJ1cmxzXCIsIHBhdHRlcm5zIH0gOiB7IG1vZGU6IFwibm9uZVwiIH07XG4gICAgfVxuICAgIGlmIChnYXRlLm1vZGUgPT09IFwiYWx3YXlzXCIgfHwgZ2F0ZS5tb2RlID09PSBcIm5vbmVcIikgcmV0dXJuIHsgbW9kZTogZ2F0ZS5tb2RlIH07XG4gICAgdGhyb3cgbmV3IENvbmZpZ3VyYXRpb25FcnJvcignYXBwcm92YWwgbW9kZSBtdXN0IGJlIFwibm9uZVwiLCBcImFsd2F5c1wiIG9yIFwidXJsc1wiJywge1xuICAgICAgY29udGV4dDogeyBmaWVsZDogXCJhcHByb3ZhbFwiIH0sXG4gICAgfSk7XG4gIH1cbiAgY29uc3QgcGF0dGVybnMgPSBwYXJzZUFsbG93ZWRVcmxzKHR5cGVvZiBnYXRlID09PSBcInN0cmluZ1wiID8gZ2F0ZSA6IFsuLi5nYXRlXSk7XG4gIHJldHVybiBwYXR0ZXJucy5sZW5ndGggPiAwID8geyBtb2RlOiBcInVybHNcIiwgcGF0dGVybnMgfSA6IHsgbW9kZTogXCJub25lXCIgfTtcbn1cblxuLyoqXG4gKiBSZXNvbHZlIHBsdWdpbiBjb25maWcgb3ZlciBlbnZpcm9ubWVudCBkZWZhdWx0cyBpbnRvIHRoZSBjb25jcmV0ZVxuICoge0BsaW5rIFJlc29sdmVkV2ViU2VhcmNoQ29uZmlnfS4gV2hpY2ggbW9kZWwgaXMgdXNlZCBzdGF5cyBsYXp5IC0gaXQgaXNcbiAqIHBpY2tlZCBhdCBjYWxsIHRpbWUgYWdhaW5zdCB0aGUgbGl2ZSBjYXRhbG9ndWUgLSBidXQgZXZlcnl0aGluZyBlbHNlIGlzXG4gKiBzZXR0bGVkIGhlcmUsIGFuZCBhIGNvbnRyYWRpY3Rpb24gKHVucGFyc2VhYmxlIGBXRUJfU0VBUkNIX1RPT0xTYCwgYW5cbiAqIHVua25vd24gVVJMIHBvbGljeSwgYSBwb2xpY3kgdGhhdCBkaXNhZ3JlZXMgd2l0aCBpdHMgYWxsb3ctbGlzdCkgdGhyb3dzIGFcbiAqIHtAbGluayBDb25maWd1cmF0aW9uRXJyb3J9IG5hbWluZyB0aGUgZmllbGQgYW5kIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVXZWJTZWFyY2hDb25maWcoXG4gIGNvbmZpZzogV2ViU2VhcmNoUGx1Z2luQ29uZmlnID0ge30sXG4pOiBSZXNvbHZlZFdlYlNlYXJjaENvbmZpZyB7XG4gIGNvbnN0IHBhdHRlcm5zID0gcGFyc2VBbGxvd2VkVXJscyhcbiAgICBjb25maWcuYWxsb3dlZFVybHMgPz8gY29uZmlnVXRpbHMudGV4dChcIldFQl9TRUFSQ0hfQUxMT1dFRF9VUkxTXCIsIGNvbmZpZ1V0aWxzLkVOVl9PTkxZKSxcbiAgKTtcbiAgY29uc3QgdXJsUG9saWN5ID0gcmVzb2x2ZVVybFBvbGljeShjb25maWcudXJsUG9saWN5LCBwYXR0ZXJucyk7XG4gIGNvbnN0IHsgbW9kZWwsIHNvdXJjZSB9ID0gcmVzb2x2ZU1vZGVsUGluKGNvbmZpZyk7XG4gIGNvbnN0IGZhbGxiYWNrcyA9IGNvbmZpZ1V0aWxzLmxpc3QoXG4gICAgY29uZmlnLm1vZGVsRmFsbGJhY2tzLFxuICAgIFwiV0VCX1NFQVJDSF9NT0RFTF9GQUxMQkFDS1NcIixcbiAgICB1bmRlZmluZWQsXG4gICAgY29uZmlnVXRpbHMuRU5WX09OTFksXG4gICk7XG4gIHJldHVybiB7XG4gICAgLi4uKG1vZGVsID8geyBtb2RlbCB9IDoge30pLFxuICAgIG1vZGVsU291cmNlOiBzb3VyY2UsXG4gICAgbW9kZWxGYWxsYmFja3M6IGZhbGxiYWNrcy5sZW5ndGggPiAwID8gZmFsbGJhY2tzIDogREVGQVVMVF9NT0RFTF9GQUxMQkFDS1MsXG4gICAgd2ViU2VhcmNoVG9vbHM6IHsgLi4ucGFyc2VUb29sc0VudigpLCAuLi4oY29uZmlnLndlYlNlYXJjaFRvb2xzID8/IHt9KSB9LFxuICAgIGZ1enp5OlxuICAgICAgY29uZmlnVXRpbHMuYm9vbGVhbihjb25maWcubW9kZWxGdXp6eU1hdGNoLCBcIldFQl9TRUFSQ0hfRlVaWllcIiwgY29uZmlnVXRpbHMuRU5WX09OTFkpID8/IHRydWUsXG4gICAgZnV6enlUaHJlc2hvbGQ6IGNvbmZpZ1V0aWxzLnBvc2l0aXZlTnVtYmVyKFxuICAgICAgY29uZmlnLm1vZGVsRnV6enlUaHJlc2hvbGQsXG4gICAgICBcIldFQl9TRUFSQ0hfRlVaWllfVEhSRVNIT0xEXCIsXG4gICAgICBtb2RlbENhdGFsb2cuREVGQVVMVF9GVVpaWV9USFJFU0hPTEQsXG4gICAgICBjb25maWdVdGlscy5FTlZfT05MWSxcbiAgICApLFxuICAgIG1heENpdGF0aW9uczogY29uZmlnVXRpbHMucG9zaXRpdmVJbnQoXG4gICAgICBjb25maWcubWF4Q2l0YXRpb25zLFxuICAgICAgXCJXRUJfU0VBUkNIX01BWF9DSVRBVElPTlNcIixcbiAgICAgIERFRkFVTFRfTUFYX0NJVEFUSU9OUyxcbiAgICAgIGNvbmZpZ1V0aWxzLkVOVl9PTkxZLFxuICAgICksXG4gICAgZmV0Y2hNYXhMZW5ndGg6IGNvbmZpZ1V0aWxzLnBvc2l0aXZlSW50KFxuICAgICAgY29uZmlnLmZldGNoTWF4TGVuZ3RoLFxuICAgICAgXCJXRUJfU0VBUkNIX0ZFVENIX01BWF9MRU5HVEhcIixcbiAgICAgIERFRkFVTFRfRkVUQ0hfTUFYX0xFTkdUSCxcbiAgICAgIGNvbmZpZ1V0aWxzLkVOVl9PTkxZLFxuICAgICksXG4gICAgdGltZW91dE1zOiBjb25maWdVdGlscy5wb3NpdGl2ZUludChcbiAgICAgIGNvbmZpZy50aW1lb3V0TXMsXG4gICAgICBcIldFQl9TRUFSQ0hfVElNRU9VVF9NU1wiLFxuICAgICAgREVGQVVMVF9USU1FT1VUX01TLFxuICAgICAgY29uZmlnVXRpbHMuRU5WX09OTFksXG4gICAgKSxcbiAgICBzY3JhcGVGYWxsYmFjazpcbiAgICAgIGNvbmZpZ1V0aWxzLmJvb2xlYW4oXG4gICAgICAgIGNvbmZpZy5zY3JhcGVGYWxsYmFjayxcbiAgICAgICAgXCJXRUJfU0VBUkNIX1NDUkFQRV9GQUxMQkFDS1wiLFxuICAgICAgICBjb25maWdVdGlscy5FTlZfT05MWSxcbiAgICAgICkgPz8gdHJ1ZSxcbiAgICB1cmxQb2xpY3ksXG4gICAgYWxsb3dMaXN0OiB0b1VybEFsbG93TGlzdCh1cmxQb2xpY3kgPT09IFwiYWxsb3dsaXN0XCIgPyBwYXR0ZXJucyA6IFtdKSxcbiAgICBhcHByb3ZhbDogdG9BcHByb3ZhbFBvbGljeShjb25maWcuYXBwcm92YWwpLFxuICB9O1xufVxuXG4vKipcbiAqIFJlc29sdmUgYW4gYXBwcm92YWwgZ2F0ZSBhZ2FpbnN0IGEgc2V0IG9mIGNhbmRpZGF0ZSBVUkxzIGludG8gYSBjb25jcmV0ZVxuICogYm9vbGVhbjogYFwibm9uZVwiYCAvIGBcImFsd2F5c1wiYCBwYXNzIHN0cmFpZ2h0IHRocm91Z2g7IGEgYFwidXJsc1wiYCBwb2xpY3lcbiAqIGdhdGVzIHdoZW4gQU5ZIGNhbmRpZGF0ZSBtYXRjaGVzLiBFbXB0eSBjYW5kaWRhdGVzIHdpdGggYSBwYXR0ZXJuIGdhdGVcbiAqIG5ldmVyIG1hdGNoIChub3RoaW5nIHRvIGFwcHJvdmUpLiBSZXVzZXMgdGhlIGFsbG93LWxpc3QgbWF0Y2hlciBzbyBhcHByb3ZhbFxuICogZ2xvYnMgcmVhZCBleGFjdGx5IGxpa2UgYWxsb3ctbGlzdCBnbG9icy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFwcHJvdmFsTWF0Y2hlcyhcbiAgZ2F0ZTogQXBwcm92YWxHYXRlIHwgQXBwcm92YWxQb2xpY3ksXG4gIHVybHM6IHJlYWRvbmx5IHN0cmluZ1tdLFxuKTogYm9vbGVhbiB7XG4gIGNvbnN0IHBvbGljeSA9IHRvQXBwcm92YWxQb2xpY3koZ2F0ZSk7XG4gIGlmIChwb2xpY3kubW9kZSA9PT0gXCJub25lXCIpIHJldHVybiBmYWxzZTtcbiAgaWYgKHBvbGljeS5tb2RlID09PSBcImFsd2F5c1wiKSByZXR1cm4gdHJ1ZTtcbiAgY29uc3QgbGlzdCA9IHRvVXJsQWxsb3dMaXN0KHBvbGljeS5wYXR0ZXJucyk7XG4gIHJldHVybiB1cmxzLnNvbWUoKHVybCkgPT4gbGlzdC5hbGxvd3ModXJsKSk7XG59XG4iXX0=
@@ -14,8 +14,9 @@
14
14
  *
15
15
  * @module
16
16
  */
17
- import { Plugin, ResourceType, type ResourceRequirement } from "@databricks/appkit";
18
- import { type AgentToolDefinition, type ToolProvider } from "@databricks/appkit/beta";
17
+ import { ResourceType, type ResourceRequirement } from "@databricks/appkit";
18
+ import { type ToolRegistry } from "@databricks/appkit/beta";
19
+ import { ToolRegistryPlugin } from "@dbx-tools/appkit";
19
20
  import { type WebSearchPluginConfig } from "./config.ts";
20
21
  import type { WebFetchRequest, WebFetchResult, WebSearchRequest, WebSearchResult } from "./schema.ts";
21
22
  /**
@@ -25,12 +26,12 @@ import type { WebFetchRequest, WebFetchResult, WebSearchRequest, WebSearchResult
25
26
  * @example
26
27
  * ```ts
27
28
  * import { createApp, server } from "@databricks/appkit";
28
- * import { plugin as webSearchPlugin } from "@dbx-tools/appkit-web-search";
29
+ * import { webSearch } from "@dbx-tools/appkit-web-search";
29
30
  *
30
31
  * await createApp({
31
32
  * plugins: [
32
33
  * server(),
33
- * webSearchPlugin.webSearch({
34
+ * webSearch({
34
35
  * model: "gemini",
35
36
  * urlPolicy: "allowlist",
36
37
  * allowedUrls: ["*.databricks.com"],
@@ -39,7 +40,7 @@ import type { WebFetchRequest, WebFetchResult, WebSearchRequest, WebSearchResult
39
40
  * });
40
41
  * ```
41
42
  */
42
- export declare class WebSearchPlugin extends Plugin<WebSearchPluginConfig> implements ToolProvider {
43
+ export declare class WebSearchPlugin extends ToolRegistryPlugin<WebSearchPluginConfig> {
43
44
  static manifest: {
44
45
  name: "web-search";
45
46
  displayName: string;
@@ -93,7 +94,7 @@ export declare class WebSearchPlugin extends Plugin<WebSearchPluginConfig> imple
93
94
  * against the same schema first, but re-parsing is what gives the body typed
94
95
  * arguments instead of `unknown`.
95
96
  */
96
- private readonly tools;
97
+ protected readonly toolRegistry: ToolRegistry;
97
98
  /**
98
99
  * Log the effective policy so an active allow-list and caps are obvious at
99
100
  * boot. Runtime construction already resolved config and captured this
@@ -107,14 +108,6 @@ export declare class WebSearchPlugin extends Plugin<WebSearchPluginConfig> imple
107
108
  shutdown(): void;
108
109
  /** Abort in-flight work owned by this plugin instance. */
109
110
  abortActiveOperations(): void;
110
- /** AppKit `ToolProvider`: the tool definitions offered to an agent. */
111
- getAgentTools(): AgentToolDefinition[];
112
- /**
113
- * AppKit `ToolProvider`: run one tool call. Arguments are validated against
114
- * the tool's schema first, and a validation failure comes back as an
115
- * LLM-friendly string so the model can correct itself on the next turn.
116
- */
117
- executeAgentTool(name: string, args: unknown, signal?: AbortSignal): Promise<unknown>;
118
111
  exports(): {
119
112
  /**
120
113
  * Run a web search directly (bypassing the agent tool). Resolves the
@@ -137,8 +130,8 @@ export declare class WebSearchPlugin extends Plugin<WebSearchPluginConfig> imple
137
130
  * @example
138
131
  * ```ts
139
132
  * import { createApp, server } from "@databricks/appkit";
140
- * import { plugin as webSearchPlugin } from "@dbx-tools/appkit-web-search";
141
- * import { agents, plugin as mastraPlugin } from "@dbx-tools/appkit-mastra";
133
+ * import { webSearch } from "@dbx-tools/appkit-web-search";
134
+ * import { agents, mastra } from "@dbx-tools/appkit-mastra";
142
135
  *
143
136
  * const researcher = agents.createAgent({
144
137
  * instructions: "Research questions with web_search, then read sources with web_fetch.",
@@ -150,8 +143,8 @@ export declare class WebSearchPlugin extends Plugin<WebSearchPluginConfig> imple
150
143
  * await createApp({
151
144
  * plugins: [
152
145
  * server(),
153
- * webSearchPlugin.webSearch({ model: "gemini" }),
154
- * mastraPlugin.mastra({ agents: researcher }),
146
+ * webSearch({ model: "gemini" }),
147
+ * mastra({ agents: researcher }),
155
148
  * ],
156
149
  * });
157
150
  * ```