@dbx-tools/search 0.6.81 → 0.6.85

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/lib/src/config.js CHANGED
@@ -22,7 +22,8 @@
22
22
  * @module
23
23
  */
24
24
  import { ConfigurationError } from "@databricks/appkit";
25
- import { env, object, string } from "@dbx-tools/shared-core";
25
+ import { config as runtimeConfig } from "@dbx-tools/core";
26
+ import { object, string } from "@dbx-tools/shared-core";
26
27
  /** The default index, honoring AppKit's standard Vector Search binding name. */
27
28
  export const INDEX_ENV = "SEARCH_INDEX";
28
29
  /** AppKit's standard environment name for a Vector Search index binding. */
@@ -124,7 +125,7 @@ function toResolvedIndex(entry) {
124
125
  }
125
126
  /** Parse and validate a {@link SearchMode} from config or an env var. */
126
127
  function resolveMode(configured) {
127
- const raw = configured ?? env.text("SEARCH_MODE") ?? undefined;
128
+ const raw = configured ?? runtimeConfig.text("SEARCH_MODE", runtimeConfig.ENV_ONLY);
128
129
  if (raw === undefined)
129
130
  return DEFAULT_MODE;
130
131
  if (raw !== "hybrid" && raw !== "vector" && raw !== "keyword") {
@@ -139,13 +140,13 @@ function resolveMode(configured) {
139
140
  * and a bad mode throws a {@link ConfigurationError} naming the field.
140
141
  */
141
142
  export function resolveSearchConfig(config = {}) {
142
- const defaultIndexRaw = env.string(config.index, [INDEX_ENV, DATABRICKS_INDEX_ENV]) ?? undefined;
143
+ const defaultIndexRaw = runtimeConfig.string(config.index, [INDEX_ENV, DATABRICKS_INDEX_ENV], runtimeConfig.ENV_ONLY);
143
144
  const configured = (config.indexes ?? [])
144
145
  .map(toResolvedIndex)
145
146
  .filter((entry) => entry !== null);
146
147
  // Ensure the default index is represented in the known set.
147
148
  if (defaultIndexRaw && !configured.some((i) => i.name === defaultIndexRaw)) {
148
- const envColumns = env.list(undefined, "SEARCH_COLUMNS");
149
+ const envColumns = runtimeConfig.list(undefined, "SEARCH_COLUMNS", undefined, runtimeConfig.ENV_ONLY);
149
150
  configured.unshift({
150
151
  name: defaultIndexRaw,
151
152
  alias: defaultAlias(defaultIndexRaw),
@@ -161,18 +162,18 @@ export function resolveSearchConfig(config = {}) {
161
162
  return { ...entry, alias };
162
163
  });
163
164
  const defaultIndex = defaultIndexRaw ?? indexes[0]?.name;
164
- const columns = env.list(config.columns, "SEARCH_COLUMNS");
165
+ const columns = runtimeConfig.list(config.columns, "SEARCH_COLUMNS", undefined, runtimeConfig.ENV_ONLY);
165
166
  return {
166
167
  ...object.optional("defaultIndex", defaultIndex),
167
168
  indexes,
168
- ...object.optional("endpoint", env.string(config.endpoint, ENDPOINT_ENV)),
169
+ ...object.optional("endpoint", runtimeConfig.string(config.endpoint, ENDPOINT_ENV, runtimeConfig.ENV_ONLY)),
169
170
  ...(columns.length > 0 ? { columns } : {}),
170
- pageSize: env.positiveInt(config.pageSize, "SEARCH_PAGE_SIZE", DEFAULT_PAGE_SIZE),
171
+ pageSize: runtimeConfig.positiveInt(config.pageSize, "SEARCH_PAGE_SIZE", DEFAULT_PAGE_SIZE, runtimeConfig.ENV_ONLY),
171
172
  mode: resolveMode(config.mode),
172
- ...object.optional("embeddingModel", env.string(config.embeddingModel, "SEARCH_EMBEDDING_MODEL")),
173
+ ...object.optional("embeddingModel", runtimeConfig.string(config.embeddingModel, "SEARCH_EMBEDDING_MODEL", runtimeConfig.ENV_ONLY)),
173
174
  basePath: DEFAULT_BASE_PATH,
174
- timeoutMs: env.positiveInt(config.timeoutMs, "SEARCH_TIMEOUT_MS", DEFAULT_TIMEOUT_MS),
175
- allowWrite: env.boolean(config.allowWrite, "SEARCH_WRITE") ?? false,
175
+ timeoutMs: runtimeConfig.positiveInt(config.timeoutMs, "SEARCH_TIMEOUT_MS", DEFAULT_TIMEOUT_MS, runtimeConfig.ENV_ONLY),
176
+ allowWrite: runtimeConfig.boolean(config.allowWrite, "SEARCH_WRITE", runtimeConfig.ENV_ONLY) ?? false,
176
177
  ...(config.ensureOnSetup ? { ensureOnSetup: config.ensureOnSetup } : {}),
177
178
  };
178
179
  }
@@ -198,4 +199,4 @@ export function resolveIndexName(config, reference) {
198
199
  export function indexConfigFor(config, name) {
199
200
  return config.indexes.find((i) => i.name === name || i.alias === name);
200
201
  }
201
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXNCRztBQUVILE9BQU8sRUFBRSxrQkFBa0IsRUFBeUIsTUFBTSxvQkFBb0IsQ0FBQztBQUMvRSxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUk3RCxnRkFBZ0Y7QUFDaEYsTUFBTSxDQUFDLE1BQU0sU0FBUyxHQUFHLGNBQWMsQ0FBQztBQUV4Qyw0RUFBNEU7QUFDNUUsTUFBTSxDQUFDLE1BQU0sb0JBQW9CLEdBQUcsZ0NBQWdDLENBQUM7QUFFckUsb0ZBQW9GO0FBQ3BGLE1BQU0sQ0FBQyxNQUFNLFlBQVksR0FBRyxpQkFBaUIsQ0FBQztBQUU5QywyRkFBMkY7QUFDM0YsTUFBTSxDQUFDLE1BQU0sWUFBWSxHQUFlLFFBQVEsQ0FBQztBQUVqRCx5RkFBeUY7QUFDekYsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQUcsRUFBRSxDQUFDO0FBRXBDLCtEQUErRDtBQUMvRCxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRyxNQUFNLENBQUM7QUFFekMsdUVBQXVFO0FBQ3ZFLE1BQU0sQ0FBQyxNQUFNLGlCQUFpQixHQUFHLGFBQWEsQ0FBQztBQXFHL0MsZ0ZBQWdGO0FBQ2hGLE1BQU0sQ0FBQyxNQUFNLG9CQUFvQixHQUFnQjtJQUMvQyxJQUFJLEVBQUUsUUFBUTtJQUNkLG9CQUFvQixFQUFFLElBQUk7SUFDMUIsVUFBVSxFQUFFO1FBQ1YsS0FBSyxFQUFFO1lBQ0wsSUFBSSxFQUFFLFFBQVE7WUFDZCxXQUFXLEVBQUUsdUVBQXVFO1NBQ3JGO1FBQ0QsT0FBTyxFQUFFO1lBQ1AsSUFBSSxFQUFFLE9BQU87WUFDYixXQUFXLEVBQUUsNEVBQTRFO1lBQ3pGLEtBQUssRUFBRTtnQkFDTCxLQUFLLEVBQUU7b0JBQ0ws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LENBQUMsQ0FBQyxJQUFJLEtBQUssSUFBSSxJQUFJLENBQUMsQ0FBQyxLQUFLLEtBQUssSUFBSSxDQUFDLENBQUM7QUFDekUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ29uZmlndXJhdGlvbiBmb3IgdGhlIEFJIFNlYXJjaCBwbHVnaW46IHRoZSB0eXBlZFxuICoge0BsaW5rIFNlYXJjaFBsdWdpbkNvbmZpZ30gKHRoZSBwbHVnaW4ncyBzbGljZSBvZiBBcHBLaXQgY29uZmlnKSwgdGhlIEpTT05cbiAqIFNjaGVtYSB0aGUgbWFuaWZlc3QgcHVibGlzaGVzIGZvciBpdCwgYW5kIHtAbGluayByZXNvbHZlU2VhcmNoQ29uZmlnfVxuICogd2hpY2ggbGF5ZXJzIHRoYXQgY29uZmlnIG92ZXIgZW52aXJvbm1lbnQgZGVmYXVsdHMgaW50byB0aGUgY29uY3JldGVcbiAqIHtAbGluayBSZXNvbHZlZFNlYXJjaENvbmZpZ30gdGhlIHJ1bnRpbWUsIGNsaWVudCwgdG9vbHMsIGFuZCByb3V0ZXMgcmVhZC5cbiAqXG4gKiBUaGUgZGVzaWduIGdvYWwgaXMgXCJvbmUgaW5kZXgsIHplcm8gY29uZmlnXCI6IG5hbWUgYSBkZWZhdWx0IGluZGV4IChvciBzZXRcbiAqIGBEQVRBQlJJQ0tTX1ZFQ1RPUl9TRUFSQ0hfSU5ERVhgKSBhbmQgZXZlcnl0aGluZyBlbHNlIC0gdGhlIGNvbHVtbnMgdG9cbiAqIHJldHVybiwgdGhlIHBhZ2Ugc2l6ZSwgdGhlIG1hdGNoIG1vZGUsIHRoZSBtb3VudGVkIHJvdXRlIHBhdGgsIHRoZSBlbWJlZGRpbmdcbiAqIG1vZGVsIHVzZWQgd2hlbiBjcmVhdGluZyBhbiBpbmRleCAtIGhhcyBhIHNlbnNpYmxlIGRlZmF1bHQgdGhhdCBjYW4gYmVcbiAqIG92ZXJyaWRkZW4gd2hlbiBhIGRlcGxveW1lbnQgbmVlZHMgdG8gZ28gZGVlcGVyLlxuICpcbiAqIFdoaWNoIGluZGV4IC8gZW5kcG9pbnQgaXMgdXNlZCBmb2xsb3dzIHRoZSBzdGFuZGFyZCBwcmVjZWRlbmNlOiBleHBsaWNpdFxuICogcGx1Z2luIGNvbmZpZywgdGhlbiBlbnZpcm9ubWVudCwgdGhlbiBhIGRlZmF1bHQuXG4gKlxuICogRW52IGZhbGxiYWNrczogYERBVEFCUklDS1NfVkVDVE9SX1NFQVJDSF9JTkRFWGAgKHRoZSBkZWZhdWx0IGluZGV4KSxcbiAqIGBTRUFSQ0hfSU5ERVhgLCBgU0VBUkNIX0VORFBPSU5UYCwgYFNFQVJDSF9DT0xVTU5TYCxcbiAqIGBTRUFSQ0hfUEFHRV9TSVpFYCwgYFNFQVJDSF9NT0RFYCwgYFNFQVJDSF9FTUJFRERJTkdfTU9ERUxgLFxuICogYFNFQVJDSF9USU1FT1VUX01TYCwgYFNFQVJDSF9XUklURWAuXG4gKlxuICogQG1vZHVsZVxuICovXG5cbmltcG9ydCB7IENvbmZpZ3VyYXRpb25FcnJvciwgdHlwZSBCYXNlUGx1Z2luQ29uZmlnIH0gZnJvbSBcIkBkYXRhYnJpY2tzL2FwcGtpdFwiO1xuaW1wb3J0IHsgZW52LCBvYmplY3QsIHN0cmluZyB9IGZyb20gXCJAZGJ4LXRvb2xzL3NoYXJlZC1jb3JlXCI7XG5pbXBvcnQgdHlwZSB7IFNlYXJjaERvY3VtZW50LCBTZWFyY2hNb2RlIH0gZnJvbSBcIkBkYngtdG9vbHMvc2hhcmVkLXNlYXJjaFwiO1xuaW1wb3J0IHR5cGUgeyBKU09OU2NoZW1hNyB9IGZyb20gXCJqc29uLXNjaGVtYVwiO1xuXG4vKiogVGhlIGRlZmF1bHQgaW5kZXgsIGhvbm9yaW5nIEFwcEtpdCdzIHN0YW5kYXJkIFZlY3RvciBTZWFyY2ggYmluZGluZyBuYW1lLiAqL1xuZXhwb3J0IGNvbnN0IElOREVYX0VOViA9IFwiU0VBUkNIX0lOREVYXCI7XG5cbi8qKiBBcHBLaXQncyBzdGFuZGFyZCBlbnZpcm9ubWVudCBuYW1lIGZvciBhIFZlY3RvciBTZWFyY2ggaW5kZXggYmluZGluZy4gKi9cbmV4cG9ydCBjb25zdCBEQVRBQlJJQ0tTX0lOREVYX0VOViA9IFwiREFUQUJSSUNLU19WRUNUT1JfU0VBUkNIX0lOREVYXCI7XG5cbi8qKiBEZWRpY2F0ZWQgb3ZlcnJpZGUgZm9yIHRoZSBWZWN0b3IgU2VhcmNoIHNlcnZpbmcgZW5kcG9pbnQgdGhhdCBob3N0cyBpbmRleGVzLiAqL1xuZXhwb3J0IGNvbnN0IEVORFBPSU5UX0VOViA9IFwiU0VBUkNIX0VORFBPSU5UXCI7XG5cbi8qKiBEZWZhdWx0IG1hdGNoIG1vZGUgd2hlbiBhIHJlcXVlc3QgZG9lcyBub3QgbmFtZSBvbmUuIEh5YnJpZCBzdWl0cyBtb3N0IHNlYXJjaCBib3hlcy4gKi9cbmV4cG9ydCBjb25zdCBERUZBVUxUX01PREU6IFNlYXJjaE1vZGUgPSBcImh5YnJpZFwiO1xuXG4vKiogRGVmYXVsdCBudW1iZXIgb2YgaGl0cyBhIHNlYXJjaCByZXR1cm5zIChhIGdvb2QgYXV0b2NvbXBsZXRlIC8gcmVzdWx0cy1saXN0IHNpemUpLiAqL1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfUEFHRV9TSVpFID0gMTA7XG5cbi8qKiBEZWZhdWx0IHBlci1jYWxsIHRpbWVvdXQgZm9yIGEgc2VhcmNoIC8gaW5kZXggb3BlcmF0aW9uLiAqL1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfVElNRU9VVF9NUyA9IDMwXzAwMDtcblxuLyoqIEJhc2UgcGF0aCB0aGUgcGx1Z2luIG1vdW50cyBpdHMgcm91dGVzIHVuZGVyLCB1bmxlc3Mgb3ZlcnJpZGRlbi4gKi9cbmV4cG9ydCBjb25zdCBERUZBVUxUX0JBU0VfUEFUSCA9IFwiL2FwaS9zZWFyY2hcIjtcblxuLyoqXG4gKiBBIGNvbmZpZ3VyZWQgaW5kZXggdGhlIHBsdWdpbiBrbm93cyBhYm91dCBhaGVhZCBvZiB0aW1lLiBPbmx5IGBuYW1lYCAob3JcbiAqIGBhbGlhc2ApIGlzIHJlcXVpcmVkOyB0aGUgcmVzdCBpcyByZXNvbHZlZCBmcm9tIHRoZSBsaXZlIGluZGV4IGRlZmluaXRpb25cbiAqIHdoZW4gb21pdHRlZCwgc28gYSBkZXBsb3ltZW50IGNhbiByZWdpc3RlciBgeyBuYW1lIH1gIGFuZCBsZXQgdGhlIHBsdWdpbiBmaWxsXG4gKiBpbiB0aGUgcHJpbWFyeSBrZXkgYW5kIGNvbHVtbnMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2VhcmNoSW5kZXhDb25maWcge1xuICAvKiogVW5pdHkgQ2F0YWxvZyBuYW1lIG9mIHRoZSBpbmRleCAoY2F0YWxvZy5zY2hlbWEuaW5kZXgpLiAqL1xuICBuYW1lOiBzdHJpbmc7XG4gIC8qKiBTaG9ydCBhbGlhcyBhIGNhbGxlciBtYXkgdXNlIGluIHBsYWNlIG9mIGBuYW1lYCAoZGVmYXVsdHMgdG8gdGhlIGxhc3QgbmFtZSBzZWdtZW50KS4gKi9cbiAgYWxpYXM/OiBzdHJpbmc7XG4gIC8qKiBQcmltYXJ5LWtleSBjb2x1bW4uIFJlc29sdmVkIGZyb20gdGhlIGluZGV4IGRlZmluaXRpb24gd2hlbiBvbWl0dGVkLiAqL1xuICBwcmltYXJ5S2V5Pzogc3RyaW5nO1xuICAvKiogQ29sdW1ucyB0byByZXR1cm4gcGVyIGhpdCwgaW4gZGlzcGxheSBvcmRlci4gRGVmYXVsdHMgdG8gZXZlcnkgaW5kZXhlZCBjb2x1bW4uICovXG4gIGNvbHVtbnM/OiBzdHJpbmdbXTtcbn1cblxuLyoqXG4gKiBUaGUgQUkgU2VhcmNoIHBsdWdpbidzIHNsaWNlIG9mIEFwcEtpdCBjb25maWcuIEV2ZXJ5IGZpZWxkIGlzIG9wdGlvbmFsIC0gdGhlXG4gKiBwbHVnaW4gd29ya3Mgd2l0aCBub3RoaW5nIGJ1dCBhbiBpbmRleCBuYW1lIGluIHRoZSBlbnZpcm9ubWVudC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTZWFyY2hQbHVnaW5Db25maWcgZXh0ZW5kcyBCYXNlUGx1Z2luQ29uZmlnIHtcbiAgLyoqIFRoZSBkZWZhdWx0IGluZGV4IHNlYXJjaGVkIHdoZW4gYSByZXF1ZXN0IG9taXRzIG9uZSAobmFtZSBvciBhbGlhcykuICovXG4gIGluZGV4Pzogc3RyaW5nO1xuICAvKiogSW5kZXhlcyB0aGUgcGx1Z2luIHNob3VsZCBrbm93IGFib3V0IChmb3IgYWxpYXNlcywgdW5pdmVyc2FsIHNlYXJjaCwgYW5kIHRoZSBVSSBjYXRhbG9ndWUpLiAqL1xuICBpbmRleGVzPzogQXJyYXk8c3RyaW5nIHwgU2VhcmNoSW5kZXhDb25maWc+O1xuICAvKiogVGhlIFZlY3RvciBTZWFyY2ggc2VydmluZyBlbmRwb2ludCBpbmRleGVzIGxpdmUgb24gKG9ubHkgbmVlZGVkIHRvIGNyZWF0ZSBhbiBpbmRleCkuICovXG4gIGVuZHBvaW50Pzogc3RyaW5nO1xuICAvKiogRGVmYXVsdCBjb2x1bW5zIHRvIHJldHVybiBwZXIgaGl0LiBGYWxscyBiYWNrIHRvIGVhY2ggaW5kZXgncyBvd24gY29sdW1ucy4gKi9cbiAgY29sdW1ucz86IHN0cmluZ1tdO1xuICAvKiogRGVmYXVsdCBudW1iZXIgb2YgaGl0cyBhIHNlYXJjaCByZXR1cm5zLiAqL1xuICBwYWdlU2l6ZT86IG51bWJlcjtcbiAgLyoqIERlZmF1bHQgbWF0Y2ggbW9kZS4gKi9cbiAgbW9kZT86IFNlYXJjaE1vZGU7XG4gIC8qKiBFbWJlZGRpbmcgbW9kZWwgZW5kcG9pbnQgdXNlZCB3aGVuIHRoZSBwbHVnaW4gQ1JFQVRFUyBhIERlbHRhIFN5bmMgaW5kZXguIEZ1enp5LXJlc29sdmVkLiAqL1xuICBlbWJlZGRpbmdNb2RlbD86IHN0cmluZztcbiAgLyoqIFBlci1jYWxsIHRpbWVvdXQgaW4gbWlsbGlzZWNvbmRzLiAqL1xuICB0aW1lb3V0TXM/OiBudW1iZXI7XG4gIC8qKiBFbmFibGUgdGhlIHdyaXRlIHN1cmZhY2UgKGBhZGRfZG9jdW1lbnRzYCB0b29sICsgYFBPU1QgL2RvY3VtZW50c2ApLiBPZmYgYnkgZGVmYXVsdC4gKi9cbiAgYWxsb3dXcml0ZT86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBQcm92aXNpb24gYSBSRUFMIGluZGV4IGF0IGJvb3Q6IGVuc3VyZSB0aGUgZW5kcG9pbnQgKyBpbmRleCBleGlzdCBhbmQgc2VlZFxuICAgKiBkb2N1bWVudHMgd2hlbiB0aGUgaW5kZXggaXMgZW1wdHkuIFJ1bnMgaW4gdGhlIGJhY2tncm91bmQgZHVyaW5nIGBzZXR1cCgpYFxuICAgKiAoYSBzbG93IGZpcnN0LXRpbWUgZW5kcG9pbnQvaW5kZXggYnVpbGQgbmV2ZXIgYmxvY2tzIHRoZSBzZXJ2ZXIpIHVzaW5nIHRoZVxuICAgKiBib290LXRpbWUgU0RLIGF1dGggKGVudiAvIGNvbmZpZyBwcm9maWxlKS4gSWRlbXBvdGVudCAtIHNhZmUgZXZlcnkgYm9vdC5cbiAgICpcbiAgICogVGhlIGRlZmF1bHQgaXMgYSBNQU5BR0VEIGRpcmVjdC1hY2Nlc3MgaW5kZXggKERhdGFicmlja3MgZW1iZWRzIHRoZSB0ZXh0XG4gICAqIGNvbHVtbiksIHNvIGBkb2N1bWVudHNgIGFyZSBwbGFpbiByb3dzIGFuZCBzZWFyY2gtYnktdGV4dCB3b3JrcyB3aXRoIG5vXG4gICAqIERlbHRhIHRhYmxlLCBubyB3YXJlaG91c2UsIGFuZCBubyB2ZWN0b3JzIHRvIGNvbXB1dGUuIFBvaW50IGl0IGF0IGFcbiAgICogYHNvdXJjZVRhYmxlYCB0byBwcm92aXNpb24gYSBEZWx0YSBTeW5jIGluZGV4IGluc3RlYWQuXG4gICAqL1xuICBlbnN1cmVPblNldHVwPzogRW5zdXJlT25TZXR1cENvbmZpZztcbn1cblxuLyoqIEJvb3QtdGltZSBwcm92aXNpb25pbmcgKyBzZWVkaW5nIGZvciBhIHNpbmdsZSBpbmRleCAoc2VlIGBlbnN1cmVPblNldHVwYCkuICovXG5leHBvcnQgaW50ZXJmYWNlIEVuc3VyZU9uU2V0dXBDb25maWcge1xuICAvKiogVUMgbmFtZSBvZiB0aGUgaW5kZXggdG8gZW5zdXJlIChjYXRhbG9nLnNjaGVtYS5pbmRleCkuIERlZmF1bHRzIHRvIHRoZSBwbHVnaW4ncyBgaW5kZXhgLiAqL1xuICBpbmRleD86IHN0cmluZztcbiAgLyoqIFZlY3RvciBTZWFyY2ggZW5kcG9pbnQgdG8gaG9zdCBpdCBvbi4gRGVmYXVsdHMgdG8gdGhlIHBsdWdpbidzIGBlbmRwb2ludGAuICovXG4gIGVuZHBvaW50Pzogc3RyaW5nO1xuICAvKiogUHJpbWFyeS1rZXkgY29sdW1uLiBEZWZhdWx0cyB0byBgaWRgLiAqL1xuICBwcmltYXJ5S2V5Pzogc3RyaW5nO1xuICAvKiogVGV4dCBjb2x1bW4gRGF0YWJyaWNrcyBlbWJlZHMgKG1hbmFnZWQgZGlyZWN0LWFjY2VzcykuIERlZmF1bHRzIHRvIGB0ZXh0YC4gKi9cbiAgdGV4dENvbHVtbj86IHN0cmluZztcbiAgLyoqIEVtYmVkZGluZyBtb2RlbCBlbmRwb2ludC4gRnV6enktbWF0Y2hlZDsgZGVmYXVsdHMgdG8gdGhlIGJlc3QgZW1iZWRkaW5nIGVuZHBvaW50LiAqL1xuICBlbWJlZGRpbmdNb2RlbD86IHN0cmluZztcbiAgLyoqIEZvciBhIERlbHRhIFN5bmMgaW5kZXggaW5zdGVhZCBvZiBtYW5hZ2VkIGRpcmVjdC1hY2Nlc3M6IHRoZSBzb3VyY2UgRGVsdGEgdGFibGUuICovXG4gIHNvdXJjZVRhYmxlPzogc3RyaW5nO1xuICAvKiogQ29sdW1uIC0+IHR5cGUgbWFwIGZvciB0aGUgbWFuYWdlZCBkaXJlY3QtYWNjZXNzIGBzY2hlbWFfanNvbmAuIEluZmVycmVkIGZyb20gYGRvY3VtZW50c2Agd2hlbiBvbWl0dGVkLiAqL1xuICBzY2hlbWE/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICAvKiogRG9jdW1lbnRzIHRvIHNlZWQgd2hlbiB0aGUgaW5kZXggaXMgZW1wdHkuIFBsYWluIGB7IGlkLCB0ZXh0LCAuLi4gfWAgcm93cyBmb3IgYSBtYW5hZ2VkIGluZGV4LiAqL1xuICBkb2N1bWVudHM/OiBTZWFyY2hEb2N1bWVudFtdO1xuICAvKiogTWF4IHRpbWUgdG8gd2FpdCBmb3IgZW5kcG9pbnQgKyBpbmRleCByZWFkaW5lc3MuIERlZmF1bHRzIHRvIDIwIG1pbnV0ZXMuICovXG4gIHRpbWVvdXRNcz86IG51bWJlcjtcbn1cblxuLyoqIEEgZnVsbHkgcmVzb2x2ZWQgaW5kZXggZW50cnkgKHRoZSBwbHVnaW4ta25vd24gZm9ybSkuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlc29sdmVkSW5kZXhDb25maWcge1xuICBuYW1lOiBzdHJpbmc7XG4gIGFsaWFzOiBzdHJpbmc7XG4gIHByaW1hcnlLZXk/OiBzdHJpbmc7XG4gIGNvbHVtbnM/OiBzdHJpbmdbXTtcbn1cblxuLyoqIFRoZSBjb25jcmV0ZSBjb25maWcgdGhlIHJ1bnRpbWUsIGNsaWVudCwgdG9vbHMsIGFuZCByb3V0ZXMgcmVhZC4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVzb2x2ZWRTZWFyY2hDb25maWcge1xuICBkZWZhdWx0SW5kZXg/OiBzdHJpbmc7XG4gIGluZGV4ZXM6IFJlc29sdmVkSW5kZXhDb25maWdbXTtcbiAgZW5kcG9pbnQ/OiBzdHJpbmc7XG4gIGNvbHVtbnM/OiBzdHJpbmdbXTtcbiAgcGFnZVNpemU6IG51bWJlcjtcbiAgbW9kZTogU2VhcmNoTW9kZTtcbiAgZW1iZWRkaW5nTW9kZWw/OiBzdHJpbmc7XG4gIGJhc2VQYXRoOiBzdHJpbmc7XG4gIHRpbWVvdXRNczogbnVtYmVyO1xuICBhbGxvd1dyaXRlOiBib29sZWFuO1xuICBlbnN1cmVPblNldHVwPzogRW5zdXJlT25TZXR1cENvbmZpZztcbn1cblxuLyoqIEpTT04gU2NoZW1hIHRoZSBwbHVnaW4gbWFuaWZlc3QgcHVibGlzaGVzIGZvciB7QGxpbmsgU2VhcmNoUGx1Z2luQ29uZmlnfS4gKi9cbmV4cG9ydCBjb25zdCBTRUFSQ0hfQ09ORklHX1NDSEVNQTogSlNPTlNjaGVtYTcgPSB7XG4gIHR5cGU6IFwib2JqZWN0XCIsXG4gIGFkZGl0aW9uYWxQcm9wZXJ0aWVzOiB0cnVlLFxuICBwcm9wZXJ0aWVzOiB7XG4gICAgaW5kZXg6IHtcbiAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICBkZXNjcmlwdGlvbjogXCJEZWZhdWx0IGluZGV4IHRvIHNlYXJjaCAoY2F0YWxvZy5zY2hlbWEuaW5kZXggb3IgYSBjb25maWd1cmVkIGFsaWFzKS5cIixcbiAgICB9LFxuICAgIGluZGV4ZXM6IHtcbiAgICAgIHR5cGU6IFwiYXJyYXlcIixcbiAgICAgIGRlc2NyaXB0aW9uOiBcIkluZGV4ZXMgdGhlIHBsdWdpbiBrbm93cyBhYm91dCwgZm9yIGFsaWFzZXMsIHVuaXZlcnNhbCBzZWFyY2gsIGFuZCB0aGUgVUkuXCIsXG4gICAgICBpdGVtczoge1xuICAgICAgICBvbmVPZjogW1xuICAgICAgICAgIHsgdHlwZTogXCJzdHJpbmdcIiB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHR5cGU6IFwib2JqZWN0XCIsXG4gICAgICAgICAgICByZXF1aXJlZDogW1wibmFtZVwiXSxcbiAgICAgICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgICAgbmFtZTogeyB0eXBlOiBcInN0cmluZ1wiIH0sXG4gICAgICAgICAgICAgIGFsaWFzOiB7IHR5cGU6IFwic3RyaW5nXCIgfSxcbiAgICAgICAgICAgICAgcHJpbWFyeUtleTogeyB0eXBlOiBcInN0cmluZ1wiIH0sXG4gICAgICAgICAgICAgIGNvbHVtbnM6IHsgdHlwZTogXCJhcnJheVwiLCBpdGVtczogeyB0eXBlOiBcInN0cmluZ1wiIH0gfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH0sXG4gICAgfSxcbiAgICBlbmRwb2ludDoge1xuICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgIGRlc2NyaXB0aW9uOiBcIlZlY3RvciBTZWFyY2ggc2VydmluZyBlbmRwb2ludCBpbmRleGVzIGxpdmUgb24gKG5lZWRlZCBvbmx5IHRvIGNyZWF0ZSBvbmUpLlwiLFxuICAgIH0sXG4gICAgY29sdW1uczoge1xuICAgICAgdHlwZTogXCJhcnJheVwiLFxuICAgICAgaXRlbXM6IHsgdHlwZTogXCJzdHJpbmdcIiB9LFxuICAgICAgZGVzY3JpcHRpb246IFwiRGVmYXVsdCBjb2x1bW5zIHRvIHJldHVybi5cIixcbiAgICB9LFxuICAgIHBhZ2VTaXplOiB7IHR5cGU6IFwibnVtYmVyXCIsIGRlc2NyaXB0aW9uOiBcIkRlZmF1bHQgbnVtYmVyIG9mIGhpdHMgcGVyIHNlYXJjaC5cIiB9LFxuICAgIG1vZGU6IHsgZW51bTogW1wiaHlicmlkXCIsIFwidmVjdG9yXCIsIFwia2V5d29yZFwiXSwgZGVzY3JpcHRpb246IFwiRGVmYXVsdCBtYXRjaCBtb2RlLlwiIH0sXG4gICAgZW1iZWRkaW5nTW9kZWw6IHtcbiAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICBkZXNjcmlwdGlvbjogXCJFbWJlZGRpbmcgZW5kcG9pbnQgdXNlZCB3aGVuIGNyZWF0aW5nIGEgRGVsdGEgU3luYyBpbmRleCAoZnV6enktbWF0Y2hlZCkuXCIsXG4gICAgfSxcbiAgICB0aW1lb3V0TXM6IHsgdHlwZTogXCJudW1iZXJcIiwgZGVzY3JpcHRpb246IFwiUGVyLWNhbGwgdGltZW91dCBpbiBtaWxsaXNlY29uZHMuXCIgfSxcbiAgICBhbGxvd1dyaXRlOiB7XG4gICAgICB0eXBlOiBcImJvb2xlYW5cIixcbiAgICAgIGRlc2NyaXB0aW9uOiBcIkVuYWJsZSB0aGUgZG9jdW1lbnQgd3JpdGUgc3VyZmFjZSAoYWRkX2RvY3VtZW50cyB0b29sICsgcm91dGUpLlwiLFxuICAgIH0sXG4gICAgZW5zdXJlT25TZXR1cDoge1xuICAgICAgdHlwZTogXCJvYmplY3RcIixcbiAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICBcIlByb3Zpc2lvbiBhIHJlYWwgaW5kZXggYXQgYm9vdDogZW5zdXJlIHRoZSBlbmRwb2ludCArIGluZGV4IGV4aXN0IGFuZCBzZWVkIFwiICtcbiAgICAgICAgXCJkb2N1bWVudHMgd2hlbiBlbXB0eS4gUnVucyBpbiB0aGUgYmFja2dyb3VuZCBkdXJpbmcgc2V0dXAgdXNpbmcgYm9vdC10aW1lIGF1dGguXCIsXG4gICAgICBhZGRpdGlvbmFsUHJvcGVydGllczogdHJ1ZSxcbiAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgaW5kZXg6IHsgdHlwZTogXCJzdHJpbmdcIiB9LFxuICAgICAgICBlbmRwb2ludDogeyB0eXBlOiBcInN0cmluZ1wiIH0sXG4gICAgICAgIHByaW1hcnlLZXk6IHsgdHlwZTogXCJzdHJpbmdcIiB9LFxuICAgICAgICB0ZXh0Q29sdW1uOiB7IHR5cGU6IFwic3RyaW5nXCIgfSxcbiAgICAgICAgZW1iZWRkaW5nTW9kZWw6IHsgdHlwZTogXCJzdHJpbmdcIiB9LFxuICAgICAgICBzb3VyY2VUYWJsZTogeyB0eXBlOiBcInN0cmluZ1wiIH0sXG4gICAgICAgIHNjaGVtYTogeyB0eXBlOiBcIm9iamVjdFwiLCBhZGRpdGlvbmFsUHJvcGVydGllczogeyB0eXBlOiBcInN0cmluZ1wiIH0gfSxcbiAgICAgICAgZG9jdW1lbnRzOiB7IHR5cGU6IFwiYXJyYXlcIiwgaXRlbXM6IHsgdHlwZTogXCJvYmplY3RcIiwgYWRkaXRpb25hbFByb3BlcnRpZXM6IHRydWUgfSB9LFxuICAgICAgICB0aW1lb3V0TXM6IHsgdHlwZTogXCJudW1iZXJcIiB9LFxuICAgICAgfSxcbiAgICB9LFxuICB9LFxufTtcblxuLyoqIERlcml2ZSB0aGUgZGVmYXVsdCBhbGlhcyBmb3IgYW4gaW5kZXggbmFtZSAoaXRzIGxhc3QgZG90dGVkIHNlZ21lbnQpLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlZmF1bHRBbGlhcyhuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBzZWdtZW50cyA9IG5hbWUuc3BsaXQoXCIuXCIpLmZpbHRlcihCb29sZWFuKTtcbiAgcmV0dXJuIHNlZ21lbnRzLmxlbmd0aCA+IDAgPyBzZWdtZW50c1tzZWdtZW50cy5sZW5ndGggLSAxXSA6IG5hbWU7XG59XG5cbi8qKiBOb3JtYWxpemUgYSBjb25maWcgaW5kZXggZW50cnkgKHN0cmluZyBvciBvYmplY3QpIGludG8gYSB7QGxpbmsgUmVzb2x2ZWRJbmRleENvbmZpZ30uICovXG5mdW5jdGlvbiB0b1Jlc29sdmVkSW5kZXgoZW50cnk6IHN0cmluZyB8IFNlYXJjaEluZGV4Q29uZmlnKTogUmVzb2x2ZWRJbmRleENvbmZpZyB8IG51bGwge1xuICBjb25zdCByYXcgPSB0eXBlb2YgZW50cnkgPT09IFwic3RyaW5nXCIgPyB7IG5hbWU6IGVudHJ5IH0gOiBlbnRyeTtcbiAgY29uc3QgbmFtZSA9IHN0cmluZy50cmltVG9OdWxsKHJhdy5uYW1lKTtcbiAgaWYgKG5hbWUgPT09IG51bGwpIHJldHVybiBudWxsO1xuICByZXR1cm4ge1xuICAgIG5hbWUsXG4gICAgYWxpYXM6IHN0cmluZy50cmltVG9OdWxsKHJhdy5hbGlhcykgPz8gZGVmYXVsdEFsaWFzKG5hbWUpLFxuICAgIC4uLihyYXcucHJpbWFyeUtleSA/IHsgcHJpbWFyeUtleTogcmF3LnByaW1hcnlLZXkgfSA6IHt9KSxcbiAgICAuLi4ocmF3LmNvbHVtbnMgJiYgcmF3LmNvbHVtbnMubGVuZ3RoID4gMCA/IHsgY29sdW1uczogWy4uLnJhdy5jb2x1bW5zXSB9IDoge30pLFxuICB9O1xufVxuXG4vKiogUGFyc2UgYW5kIHZhbGlkYXRlIGEge0BsaW5rIFNlYXJjaE1vZGV9IGZyb20gY29uZmlnIG9yIGFuIGVudiB2YXIuICovXG5mdW5jdGlvbiByZXNvbHZlTW9kZShjb25maWd1cmVkOiBTZWFyY2hNb2RlIHwgdW5kZWZpbmVkKTogU2VhcmNoTW9kZSB7XG4gIGNvbnN0IHJhdyA9IGNvbmZpZ3VyZWQgPz8gZW52LnRleHQoXCJTRUFSQ0hfTU9ERVwiKSA/PyB1bmRlZmluZWQ7XG4gIGlmIChyYXcgPT09IHVuZGVmaW5lZCkgcmV0dXJuIERFRkFVTFRfTU9ERTtcbiAgaWYgKHJhdyAhPT0gXCJoeWJyaWRcIiAmJiByYXcgIT09IFwidmVjdG9yXCIgJiYgcmF3ICE9PSBcImtleXdvcmRcIikge1xuICAgIHRocm93IG5ldyBDb25maWd1cmF0aW9uRXJyb3IoXG4gICAgICAnbW9kZSBtdXN0IGJlIFwiaHlicmlkXCIsIFwidmVjdG9yXCIgb3IgXCJrZXl3b3JkXCIgKGVudjogU0VBUkNIX01PREUpJyxcbiAgICAgIHsgY29udGV4dDogeyBmaWVsZDogXCJtb2RlXCIsIGVudlZhcjogXCJTRUFSQ0hfTU9ERVwiIH0gfSxcbiAgICApO1xuICB9XG4gIHJldHVybiByYXc7XG59XG5cbi8qKlxuICogUmVzb2x2ZSBwbHVnaW4gY29uZmlnIG92ZXIgZW52aXJvbm1lbnQgZGVmYXVsdHMgaW50byB0aGUgY29uY3JldGVcbiAqIHtAbGluayBSZXNvbHZlZFNlYXJjaENvbmZpZ30uIFRoZSBkZWZhdWx0IGluZGV4IGlzIHVuaW9uZWQgaW50byB0aGUga25vd25cbiAqIGluZGV4ZXMgc28gaXQgYWx3YXlzIGFwcGVhcnMgaW4gdGhlIGNhdGFsb2d1ZSwgYWxpYXNlcyBhcmUgZGUtZHVwbGljYXRlZCxcbiAqIGFuZCBhIGJhZCBtb2RlIHRocm93cyBhIHtAbGluayBDb25maWd1cmF0aW9uRXJyb3J9IG5hbWluZyB0aGUgZmllbGQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlU2VhcmNoQ29uZmlnKGNvbmZpZzogU2VhcmNoUGx1Z2luQ29uZmlnID0ge30pOiBSZXNvbHZlZFNlYXJjaENvbmZpZyB7XG4gIGNvbnN0IGRlZmF1bHRJbmRleFJhdyA9IGVudi5zdHJpbmcoY29uZmlnLmluZGV4LCBbSU5ERVhfRU5WLCBEQVRBQlJJQ0tTX0lOREVYX0VOVl0pID8/IHVuZGVmaW5lZDtcblxuICBjb25zdCBjb25maWd1cmVkID0gKGNvbmZpZy5pbmRleGVzID8/IFtdKVxuICAgIC5tYXAodG9SZXNvbHZlZEluZGV4KVxuICAgIC5maWx0ZXIoKGVudHJ5KTogZW50cnkgaXMgUmVzb2x2ZWRJbmRleENvbmZpZyA9PiBlbnRyeSAhPT0gbnVsbCk7XG5cbiAgLy8gRW5zdXJlIHRoZSBkZWZhdWx0IGluZGV4IGlzIHJlcHJlc2VudGVkIGluIHRoZSBrbm93biBzZXQuXG4gIGlmIChkZWZhdWx0SW5kZXhSYXcgJiYgIWNvbmZpZ3VyZWQuc29tZSgoaSkgPT4gaS5uYW1lID09PSBkZWZhdWx0SW5kZXhSYXcpKSB7XG4gICAgY29uc3QgZW52Q29sdW1ucyA9IGVudi5saXN0KHVuZGVmaW5lZCwgXCJTRUFSQ0hfQ09MVU1OU1wiKTtcbiAgICBjb25maWd1cmVkLnVuc2hpZnQoe1xuICAgICAgbmFtZTogZGVmYXVsdEluZGV4UmF3LFxuICAgICAgYWxpYXM6IGRlZmF1bHRBbGlhcyhkZWZhdWx0SW5kZXhSYXcpLFxuICAgICAgLi4uKGVudkNvbHVtbnMubGVuZ3RoID4gMCA/IHsgY29sdW1uczogZW52Q29sdW1ucyB9IDoge30pLFxuICAgIH0pO1xuICB9XG5cbiAgY29uc3Qgc2VlbkFsaWFzZXMgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgY29uc3QgaW5kZXhlcyA9IGNvbmZpZ3VyZWQubWFwKChlbnRyeSkgPT4ge1xuICAgIGxldCBhbGlhcyA9IGVudHJ5LmFsaWFzO1xuICAgIHdoaWxlIChzZWVuQWxpYXNlcy5oYXMoYWxpYXMpKSBhbGlhcyA9IGAke2FsaWFzfV9gO1xuICAgIHNlZW5BbGlhc2VzLmFkZChhbGlhcyk7XG4gICAgcmV0dXJuIHsgLi4uZW50cnksIGFsaWFzIH07XG4gIH0pO1xuXG4gIGNvbnN0IGRlZmF1bHRJbmRleCA9IGRlZmF1bHRJbmRleFJhdyA/PyBpbmRleGVzWzBdPy5uYW1lO1xuICBjb25zdCBjb2x1bW5zID0gZW52Lmxpc3QoY29uZmlnLmNvbHVtbnMsIFwiU0VBUkNIX0NPTFVNTlNcIik7XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5vYmplY3Qub3B0aW9uYWwoXCJkZWZhdWx0SW5kZXhcIiwgZGVmYXVsdEluZGV4KSxcbiAgICBpbmRleGVzLFxuICAgIC4uLm9iamVjdC5vcHRpb25hbChcImVuZHBvaW50XCIsIGVudi5zdHJpbmcoY29uZmlnLmVuZHBvaW50LCBFTkRQT0lOVF9FTlYpKSxcbiAgICAuLi4oY29sdW1ucy5sZW5ndGggPiAwID8geyBjb2x1bW5zIH0gOiB7fSksXG4gICAgcGFnZVNpemU6IGVudi5wb3NpdGl2ZUludChjb25maWcucGFnZVNpemUsIFwiU0VBUkNIX1BBR0VfU0laRVwiLCBERUZBVUxUX1BBR0VfU0laRSksXG4gICAgbW9kZTogcmVzb2x2ZU1vZGUoY29uZmlnLm1vZGUpLFxuICAgIC4uLm9iamVjdC5vcHRpb25hbChcbiAgICAgIFwiZW1iZWRkaW5nTW9kZWxcIixcbiAgICAgIGVudi5zdHJpbmcoY29uZmlnLmVtYmVkZGluZ01vZGVsLCBcIlNFQVJDSF9FTUJFRERJTkdfTU9ERUxcIiksXG4gICAgKSxcbiAgICBiYXNlUGF0aDogREVGQVVMVF9CQVNFX1BBVEgsXG4gICAgdGltZW91dE1zOiBlbnYucG9zaXRpdmVJbnQoY29uZmlnLnRpbWVvdXRNcywgXCJTRUFSQ0hfVElNRU9VVF9NU1wiLCBERUZBVUxUX1RJTUVPVVRfTVMpLFxuICAgIGFsbG93V3JpdGU6IGVudi5ib29sZWFuKGNvbmZpZy5hbGxvd1dyaXRlLCBcIlNFQVJDSF9XUklURVwiKSA/PyBmYWxzZSxcbiAgICAuLi4oY29uZmlnLmVuc3VyZU9uU2V0dXAgPyB7IGVuc3VyZU9uU2V0dXA6IGNvbmZpZy5lbnN1cmVPblNldHVwIH0gOiB7fSksXG4gIH07XG59XG5cbi8qKlxuICogUmVzb2x2ZSBhIGNhbGxlci1zdXBwbGllZCBpbmRleCByZWZlcmVuY2UgKGEgZnVsbCBVQyBuYW1lIG9yIGEgY29uZmlndXJlZFxuICogYWxpYXMpIGludG8gYSBjb25jcmV0ZSBpbmRleCBuYW1lLiBGYWxscyBiYWNrIHRvIHRoZSBkZWZhdWx0IGluZGV4IHdoZW4gdGhlXG4gKiByZWZlcmVuY2UgaXMgZW1wdHkuIFJldHVybnMgYG51bGxgIHdoZW4gbm90aGluZyBjYW4gYmUgcmVzb2x2ZWQgc28gY2FsbGVyc1xuICogcmFpc2UgYSBzdGFibGUsIHVzZXItZmFjaW5nIGVycm9yIHJhdGhlciB0aGFuIGNhbGxpbmcgYSBwaGFudG9tIGluZGV4LlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZUluZGV4TmFtZShcbiAgY29uZmlnOiBSZXNvbHZlZFNlYXJjaENvbmZpZyxcbiAgcmVmZXJlbmNlOiBzdHJpbmcgfCB1bmRlZmluZWQsXG4pOiBzdHJpbmcgfCBudWxsIHtcbiAgY29uc3QgcmVmID0gc3RyaW5nLnRyaW1Ub051bGwocmVmZXJlbmNlKTtcbiAgaWYgKHJlZiA9PT0gbnVsbCkgcmV0dXJuIGNvbmZpZy5kZWZhdWx0SW5kZXggPz8gbnVsbDtcbiAgY29uc3QgYnlBbGlhcyA9IGNvbmZpZy5pbmRleGVzLmZpbmQoKGkpID0+IGkuYWxpYXMgPT09IHJlZiB8fCBpLm5hbWUgPT09IHJlZik7XG4gIGlmIChieUFsaWFzKSByZXR1cm4gYnlBbGlhcy5uYW1lO1xuICAvLyBBY2NlcHQgYW4gdW5yZWdpc3RlcmVkIGJ1dCBmdWxseS1xdWFsaWZpZWQgVUMgbmFtZSAodGhyZWUgZG90dGVkIHBhcnRzKS5cbiAgaWYgKHJlZi5zcGxpdChcIi5cIikuZmlsdGVyKEJvb2xlYW4pLmxlbmd0aCA9PT0gMykgcmV0dXJuIHJlZjtcbiAgcmV0dXJuIGNvbmZpZy5kZWZhdWx0SW5kZXggPz8gbnVsbDtcbn1cblxuLyoqIFRoZSBrbm93biBjb25maWcgZm9yIGFuIGluZGV4IG5hbWUsIHdoZW4gdGhlIHBsdWdpbiB3YXMgdG9sZCBhYm91dCBpdC4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpbmRleENvbmZpZ0ZvcihcbiAgY29uZmlnOiBSZXNvbHZlZFNlYXJjaENvbmZpZyxcbiAgbmFtZTogc3RyaW5nLFxuKTogUmVzb2x2ZWRJbmRleENvbmZpZyB8IHVuZGVmaW5lZCB7XG4gIHJldHVybiBjb25maWcuaW5kZXhlcy5maW5kKChpKSA9PiBpLm5hbWUgPT09IG5hbWUgfHwgaS5hbGlhcyA9PT0gbmFtZSk7XG59XG4iXX0=
202
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXNCRztBQUVILE9BQU8sRUFBRSxrQkFBa0IsRUFBeUIsTUFBTSxvQkFBb0IsQ0FBQztBQUMvRSxPQUFPLEVBQUUsTUFBTSxJQUFJLGFBQWEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzFELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFJeEQsZ0ZBQWdGO0FBQ2hGLE1BQU0sQ0FBQyxNQUFNLFNBQVMsR0FBRyxjQUFjLENBQUM7QUFFeEMsNEVBQTRFO0FBQzVFLE1BQU0sQ0FBQyxNQUFNLG9CQUFvQixHQUFHLGdDQUFnQyxDQUFDO0FBRXJFLG9GQUFvRjtBQUNwRixNQUFNLENBQUMsTUFBTSxZQUFZLEdBQUcsaUJBQWlCLENBQUM7QUFFOUMsMkZBQTJGO0FBQzNGLE1BQU0sQ0FBQyxNQUFNLFlBQVksR0FBZSxRQUFRLENBQUM7QUFFakQseUZBQXlGO0FBQ3pGLE1BQU0sQ0FBQyxNQUFNLGlCQUFpQixHQUFHLEVBQUUsQ0FBQztBQUVwQywrREFBK0Q7QUFDL0QsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQUcsTUFBTSxDQUFDO0FBRXpDLHVFQUF1RTtBQUN2RSxNQUFNLENBQUMsTUFBTSxpQkFBaUIsR0FBRyxhQUFhLENBQUM7QUFxRy9DLGdGQUFnRjtBQUNoRixNQUFNLENBQUMsTUFBTSxvQkFBb0IsR0FBZ0I7SUFDL0MsSUFBSSxFQUFFLFFBQVE7SUFDZCxvQkFBb0IsRUFBRSxJQUFJO0lBQzFCLFVBQVUsRUFBRTtRQUNWLEtBQUssRUFBRTtZQUNMLElBQUksRUFBRSxRQUFRO1lBQ2QsV0FBVyxFQUFFLHVFQUF1RTtTQUNyRjtRQUNELE9BQU8sRUFBRTtZQUNQLElBQUksRUFBRSxPQUFPO1lBQ2IsV0FBVyxFQUFFLDRF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Q0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxLQUFLLENBQUM7UUFBRSxPQUFPLEdBQUcsQ0FBQztJQUM1RCxPQUFPLE1BQU0sQ0FBQyxZQUFZLElBQUksSUFBSSxDQUFDO0FBQ3JDLENBQUM7QUFFRCw2RUFBNkU7QUFDN0UsTUFBTSxVQUFVLGNBQWMsQ0FDNUIsTUFBNEIsRUFDNUIsSUFBWTtJQUVaLE9BQU8sTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssSUFBSSxJQUFJLENBQUMsQ0FBQyxLQUFLLEtBQUssSUFBSSxDQUFDLENBQUM7QUFDekUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ29uZmlndXJhdGlvbiBmb3IgdGhlIEFJIFNlYXJjaCBwbHVnaW46IHRoZSB0eXBlZFxuICoge0BsaW5rIFNlYXJjaFBsdWdpbkNvbmZpZ30gKHRoZSBwbHVnaW4ncyBzbGljZSBvZiBBcHBLaXQgY29uZmlnKSwgdGhlIEpTT05cbiAqIFNjaGVtYSB0aGUgbWFuaWZlc3QgcHVibGlzaGVzIGZvciBpdCwgYW5kIHtAbGluayByZXNvbHZlU2VhcmNoQ29uZmlnfVxuICogd2hpY2ggbGF5ZXJzIHRoYXQgY29uZmlnIG92ZXIgZW52aXJvbm1lbnQgZGVmYXVsdHMgaW50byB0aGUgY29uY3JldGVcbiAqIHtAbGluayBSZXNvbHZlZFNlYXJjaENvbmZpZ30gdGhlIHJ1bnRpbWUsIGNsaWVudCwgdG9vbHMsIGFuZCByb3V0ZXMgcmVhZC5cbiAqXG4gKiBUaGUgZGVzaWduIGdvYWwgaXMgXCJvbmUgaW5kZXgsIHplcm8gY29uZmlnXCI6IG5hbWUgYSBkZWZhdWx0IGluZGV4IChvciBzZXRcbiAqIGBEQVRBQlJJQ0tTX1ZFQ1RPUl9TRUFSQ0hfSU5ERVhgKSBhbmQgZXZlcnl0aGluZyBlbHNlIC0gdGhlIGNvbHVtbnMgdG9cbiAqIHJldHVybiwgdGhlIHBhZ2Ugc2l6ZSwgdGhlIG1hdGNoIG1vZGUsIHRoZSBtb3VudGVkIHJvdXRlIHBhdGgsIHRoZSBlbWJlZGRpbmdcbiAqIG1vZGVsIHVzZWQgd2hlbiBjcmVhdGluZyBhbiBpbmRleCAtIGhhcyBhIHNlbnNpYmxlIGRlZmF1bHQgdGhhdCBjYW4gYmVcbiAqIG92ZXJyaWRkZW4gd2hlbiBhIGRlcGxveW1lbnQgbmVlZHMgdG8gZ28gZGVlcGVyLlxuICpcbiAqIFdoaWNoIGluZGV4IC8gZW5kcG9pbnQgaXMgdXNlZCBmb2xsb3dzIHRoZSBzdGFuZGFyZCBwcmVjZWRlbmNlOiBleHBsaWNpdFxuICogcGx1Z2luIGNvbmZpZywgdGhlbiBlbnZpcm9ubWVudCwgdGhlbiBhIGRlZmF1bHQuXG4gKlxuICogRW52IGZhbGxiYWNrczogYERBVEFCUklDS1NfVkVDVE9SX1NFQVJDSF9JTkRFWGAgKHRoZSBkZWZhdWx0IGluZGV4KSxcbiAqIGBTRUFSQ0hfSU5ERVhgLCBgU0VBUkNIX0VORFBPSU5UYCwgYFNFQVJDSF9DT0xVTU5TYCxcbiAqIGBTRUFSQ0hfUEFHRV9TSVpFYCwgYFNFQVJDSF9NT0RFYCwgYFNFQVJDSF9FTUJFRERJTkdfTU9ERUxgLFxuICogYFNFQVJDSF9USU1FT1VUX01TYCwgYFNFQVJDSF9XUklURWAuXG4gKlxuICogQG1vZHVsZVxuICovXG5cbmltcG9ydCB7IENvbmZpZ3VyYXRpb25FcnJvciwgdHlwZSBCYXNlUGx1Z2luQ29uZmlnIH0gZnJvbSBcIkBkYXRhYnJpY2tzL2FwcGtpdFwiO1xuaW1wb3J0IHsgY29uZmlnIGFzIHJ1bnRpbWVDb25maWcgfSBmcm9tIFwiQGRieC10b29scy9jb3JlXCI7XG5pbXBvcnQgeyBvYmplY3QsIHN0cmluZyB9IGZyb20gXCJAZGJ4LXRvb2xzL3NoYXJlZC1jb3JlXCI7XG5pbXBvcnQgdHlwZSB7IFNlYXJjaERvY3VtZW50LCBTZWFyY2hNb2RlIH0gZnJvbSBcIkBkYngtdG9vbHMvc2hhcmVkLXNlYXJjaFwiO1xuaW1wb3J0IHR5cGUgeyBKU09OU2NoZW1hNyB9IGZyb20gXCJqc29uLXNjaGVtYVwiO1xuXG4vKiogVGhlIGRlZmF1bHQgaW5kZXgsIGhvbm9yaW5nIEFwcEtpdCdzIHN0YW5kYXJkIFZlY3RvciBTZWFyY2ggYmluZGluZyBuYW1lLiAqL1xuZXhwb3J0IGNvbnN0IElOREVYX0VOViA9IFwiU0VBUkNIX0lOREVYXCI7XG5cbi8qKiBBcHBLaXQncyBzdGFuZGFyZCBlbnZpcm9ubWVudCBuYW1lIGZvciBhIFZlY3RvciBTZWFyY2ggaW5kZXggYmluZGluZy4gKi9cbmV4cG9ydCBjb25zdCBEQVRBQlJJQ0tTX0lOREVYX0VOViA9IFwiREFUQUJSSUNLU19WRUNUT1JfU0VBUkNIX0lOREVYXCI7XG5cbi8qKiBEZWRpY2F0ZWQgb3ZlcnJpZGUgZm9yIHRoZSBWZWN0b3IgU2VhcmNoIHNlcnZpbmcgZW5kcG9pbnQgdGhhdCBob3N0cyBpbmRleGVzLiAqL1xuZXhwb3J0IGNvbnN0IEVORFBPSU5UX0VOViA9IFwiU0VBUkNIX0VORFBPSU5UXCI7XG5cbi8qKiBEZWZhdWx0IG1hdGNoIG1vZGUgd2hlbiBhIHJlcXVlc3QgZG9lcyBub3QgbmFtZSBvbmUuIEh5YnJpZCBzdWl0cyBtb3N0IHNlYXJjaCBib3hlcy4gKi9cbmV4cG9ydCBjb25zdCBERUZBVUxUX01PREU6IFNlYXJjaE1vZGUgPSBcImh5YnJpZFwiO1xuXG4vKiogRGVmYXVsdCBudW1iZXIgb2YgaGl0cyBhIHNlYXJjaCByZXR1cm5zIChhIGdvb2QgYXV0b2NvbXBsZXRlIC8gcmVzdWx0cy1saXN0IHNpemUpLiAqL1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfUEFHRV9TSVpFID0gMTA7XG5cbi8qKiBEZWZhdWx0IHBlci1jYWxsIHRpbWVvdXQgZm9yIGEgc2VhcmNoIC8gaW5kZXggb3BlcmF0aW9uLiAqL1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfVElNRU9VVF9NUyA9IDMwXzAwMDtcblxuLyoqIEJhc2UgcGF0aCB0aGUgcGx1Z2luIG1vdW50cyBpdHMgcm91dGVzIHVuZGVyLCB1bmxlc3Mgb3ZlcnJpZGRlbi4gKi9cbmV4cG9ydCBjb25zdCBERUZBVUxUX0JBU0VfUEFUSCA9IFwiL2FwaS9zZWFyY2hcIjtcblxuLyoqXG4gKiBBIGNvbmZpZ3VyZWQgaW5kZXggdGhlIHBsdWdpbiBrbm93cyBhYm91dCBhaGVhZCBvZiB0aW1lLiBPbmx5IGBuYW1lYCAob3JcbiAqIGBhbGlhc2ApIGlzIHJlcXVpcmVkOyB0aGUgcmVzdCBpcyByZXNvbHZlZCBmcm9tIHRoZSBsaXZlIGluZGV4IGRlZmluaXRpb25cbiAqIHdoZW4gb21pdHRlZCwgc28gYSBkZXBsb3ltZW50IGNhbiByZWdpc3RlciBgeyBuYW1lIH1gIGFuZCBsZXQgdGhlIHBsdWdpbiBmaWxsXG4gKiBpbiB0aGUgcHJpbWFyeSBrZXkgYW5kIGNvbHVtbnMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2VhcmNoSW5kZXhDb25maWcge1xuICAvKiogVW5pdHkgQ2F0YWxvZyBuYW1lIG9mIHRoZSBpbmRleCAoY2F0YWxvZy5zY2hlbWEuaW5kZXgpLiAqL1xuICBuYW1lOiBzdHJpbmc7XG4gIC8qKiBTaG9ydCBhbGlhcyBhIGNhbGxlciBtYXkgdXNlIGluIHBsYWNlIG9mIGBuYW1lYCAoZGVmYXVsdHMgdG8gdGhlIGxhc3QgbmFtZSBzZWdtZW50KS4gKi9cbiAgYWxpYXM/OiBzdHJpbmc7XG4gIC8qKiBQcmltYXJ5LWtleSBjb2x1bW4uIFJlc29sdmVkIGZyb20gdGhlIGluZGV4IGRlZmluaXRpb24gd2hlbiBvbWl0dGVkLiAqL1xuICBwcmltYXJ5S2V5Pzogc3RyaW5nO1xuICAvKiogQ29sdW1ucyB0byByZXR1cm4gcGVyIGhpdCwgaW4gZGlzcGxheSBvcmRlci4gRGVmYXVsdHMgdG8gZXZlcnkgaW5kZXhlZCBjb2x1bW4uICovXG4gIGNvbHVtbnM/OiBzdHJpbmdbXTtcbn1cblxuLyoqXG4gKiBUaGUgQUkgU2VhcmNoIHBsdWdpbidzIHNsaWNlIG9mIEFwcEtpdCBjb25maWcuIEV2ZXJ5IGZpZWxkIGlzIG9wdGlvbmFsIC0gdGhlXG4gKiBwbHVnaW4gd29ya3Mgd2l0aCBub3RoaW5nIGJ1dCBhbiBpbmRleCBuYW1lIGluIHRoZSBlbnZpcm9ubWVudC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTZWFyY2hQbHVnaW5Db25maWcgZXh0ZW5kcyBCYXNlUGx1Z2luQ29uZmlnIHtcbiAgLyoqIFRoZSBkZWZhdWx0IGluZGV4IHNlYXJjaGVkIHdoZW4gYSByZXF1ZXN0IG9taXRzIG9uZSAobmFtZSBvciBhbGlhcykuICovXG4gIGluZGV4Pzogc3RyaW5nO1xuICAvKiogSW5kZXhlcyB0aGUgcGx1Z2luIHNob3VsZCBrbm93IGFib3V0IChmb3IgYWxpYXNlcywgdW5pdmVyc2FsIHNlYXJjaCwgYW5kIHRoZSBVSSBjYXRhbG9ndWUpLiAqL1xuICBpbmRleGVzPzogQXJyYXk8c3RyaW5nIHwgU2VhcmNoSW5kZXhDb25maWc+O1xuICAvKiogVGhlIFZlY3RvciBTZWFyY2ggc2VydmluZyBlbmRwb2ludCBpbmRleGVzIGxpdmUgb24gKG9ubHkgbmVlZGVkIHRvIGNyZWF0ZSBhbiBpbmRleCkuICovXG4gIGVuZHBvaW50Pzogc3RyaW5nO1xuICAvKiogRGVmYXVsdCBjb2x1bW5zIHRvIHJldHVybiBwZXIgaGl0LiBGYWxscyBiYWNrIHRvIGVhY2ggaW5kZXgncyBvd24gY29sdW1ucy4gKi9cbiAgY29sdW1ucz86IHN0cmluZ1tdO1xuICAvKiogRGVmYXVsdCBudW1iZXIgb2YgaGl0cyBhIHNlYXJjaCByZXR1cm5zLiAqL1xuICBwYWdlU2l6ZT86IG51bWJlcjtcbiAgLyoqIERlZmF1bHQgbWF0Y2ggbW9kZS4gKi9cbiAgbW9kZT86IFNlYXJjaE1vZGU7XG4gIC8qKiBFbWJlZGRpbmcgbW9kZWwgZW5kcG9pbnQgdXNlZCB3aGVuIHRoZSBwbHVnaW4gQ1JFQVRFUyBhIERlbHRhIFN5bmMgaW5kZXguIEZ1enp5LXJlc29sdmVkLiAqL1xuICBlbWJlZGRpbmdNb2RlbD86IHN0cmluZztcbiAgLyoqIFBlci1jYWxsIHRpbWVvdXQgaW4gbWlsbGlzZWNvbmRzLiAqL1xuICB0aW1lb3V0TXM/OiBudW1iZXI7XG4gIC8qKiBFbmFibGUgdGhlIHdyaXRlIHN1cmZhY2UgKGBhZGRfZG9jdW1lbnRzYCB0b29sICsgYFBPU1QgL2RvY3VtZW50c2ApLiBPZmYgYnkgZGVmYXVsdC4gKi9cbiAgYWxsb3dXcml0ZT86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBQcm92aXNpb24gYSBSRUFMIGluZGV4IGF0IGJvb3Q6IGVuc3VyZSB0aGUgZW5kcG9pbnQgKyBpbmRleCBleGlzdCBhbmQgc2VlZFxuICAgKiBkb2N1bWVudHMgd2hlbiB0aGUgaW5kZXggaXMgZW1wdHkuIFJ1bnMgaW4gdGhlIGJhY2tncm91bmQgZHVyaW5nIGBzZXR1cCgpYFxuICAgKiAoYSBzbG93IGZpcnN0LXRpbWUgZW5kcG9pbnQvaW5kZXggYnVpbGQgbmV2ZXIgYmxvY2tzIHRoZSBzZXJ2ZXIpIHVzaW5nIHRoZVxuICAgKiBib290LXRpbWUgU0RLIGF1dGggKGVudiAvIGNvbmZpZyBwcm9maWxlKS4gSWRlbXBvdGVudCAtIHNhZmUgZXZlcnkgYm9vdC5cbiAgICpcbiAgICogVGhlIGRlZmF1bHQgaXMgYSBNQU5BR0VEIGRpcmVjdC1hY2Nlc3MgaW5kZXggKERhdGFicmlja3MgZW1iZWRzIHRoZSB0ZXh0XG4gICAqIGNvbHVtbiksIHNvIGBkb2N1bWVudHNgIGFyZSBwbGFpbiByb3dzIGFuZCBzZWFyY2gtYnktdGV4dCB3b3JrcyB3aXRoIG5vXG4gICAqIERlbHRhIHRhYmxlLCBubyB3YXJlaG91c2UsIGFuZCBubyB2ZWN0b3JzIHRvIGNvbXB1dGUuIFBvaW50IGl0IGF0IGFcbiAgICogYHNvdXJjZVRhYmxlYCB0byBwcm92aXNpb24gYSBEZWx0YSBTeW5jIGluZGV4IGluc3RlYWQuXG4gICAqL1xuICBlbnN1cmVPblNldHVwPzogRW5zdXJlT25TZXR1cENvbmZpZztcbn1cblxuLyoqIEJvb3QtdGltZSBwcm92aXNpb25pbmcgKyBzZWVkaW5nIGZvciBhIHNpbmdsZSBpbmRleCAoc2VlIGBlbnN1cmVPblNldHVwYCkuICovXG5leHBvcnQgaW50ZXJmYWNlIEVuc3VyZU9uU2V0dXBDb25maWcge1xuICAvKiogVUMgbmFtZSBvZiB0aGUgaW5kZXggdG8gZW5zdXJlIChjYXRhbG9nLnNjaGVtYS5pbmRleCkuIERlZmF1bHRzIHRvIHRoZSBwbHVnaW4ncyBgaW5kZXhgLiAqL1xuICBpbmRleD86IHN0cmluZztcbiAgLyoqIFZlY3RvciBTZWFyY2ggZW5kcG9pbnQgdG8gaG9zdCBpdCBvbi4gRGVmYXVsdHMgdG8gdGhlIHBsdWdpbidzIGBlbmRwb2ludGAuICovXG4gIGVuZHBvaW50Pzogc3RyaW5nO1xuICAvKiogUHJpbWFyeS1rZXkgY29sdW1uLiBEZWZhdWx0cyB0byBgaWRgLiAqL1xuICBwcmltYXJ5S2V5Pzogc3RyaW5nO1xuICAvKiogVGV4dCBjb2x1bW4gRGF0YWJyaWNrcyBlbWJlZHMgKG1hbmFnZWQgZGlyZWN0LWFjY2VzcykuIERlZmF1bHRzIHRvIGB0ZXh0YC4gKi9cbiAgdGV4dENvbHVtbj86IHN0cmluZztcbiAgLyoqIEVtYmVkZGluZyBtb2RlbCBlbmRwb2ludC4gRnV6enktbWF0Y2hlZDsgZGVmYXVsdHMgdG8gdGhlIGJlc3QgZW1iZWRkaW5nIGVuZHBvaW50LiAqL1xuICBlbWJlZGRpbmdNb2RlbD86IHN0cmluZztcbiAgLyoqIEZvciBhIERlbHRhIFN5bmMgaW5kZXggaW5zdGVhZCBvZiBtYW5hZ2VkIGRpcmVjdC1hY2Nlc3M6IHRoZSBzb3VyY2UgRGVsdGEgdGFibGUuICovXG4gIHNvdXJjZVRhYmxlPzogc3RyaW5nO1xuICAvKiogQ29sdW1uIC0+IHR5cGUgbWFwIGZvciB0aGUgbWFuYWdlZCBkaXJlY3QtYWNjZXNzIGBzY2hlbWFfanNvbmAuIEluZmVycmVkIGZyb20gYGRvY3VtZW50c2Agd2hlbiBvbWl0dGVkLiAqL1xuICBzY2hlbWE/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICAvKiogRG9jdW1lbnRzIHRvIHNlZWQgd2hlbiB0aGUgaW5kZXggaXMgZW1wdHkuIFBsYWluIGB7IGlkLCB0ZXh0LCAuLi4gfWAgcm93cyBmb3IgYSBtYW5hZ2VkIGluZGV4LiAqL1xuICBkb2N1bWVudHM/OiBTZWFyY2hEb2N1bWVudFtdO1xuICAvKiogTWF4IHRpbWUgdG8gd2FpdCBmb3IgZW5kcG9pbnQgKyBpbmRleCByZWFkaW5lc3MuIERlZmF1bHRzIHRvIDIwIG1pbnV0ZXMuICovXG4gIHRpbWVvdXRNcz86IG51bWJlcjtcbn1cblxuLyoqIEEgZnVsbHkgcmVzb2x2ZWQgaW5kZXggZW50cnkgKHRoZSBwbHVnaW4ta25vd24gZm9ybSkuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlc29sdmVkSW5kZXhDb25maWcge1xuICBuYW1lOiBzdHJpbmc7XG4gIGFsaWFzOiBzdHJpbmc7XG4gIHByaW1hcnlLZXk/OiBzdHJpbmc7XG4gIGNvbHVtbnM/OiBzdHJpbmdbXTtcbn1cblxuLyoqIFRoZSBjb25jcmV0ZSBjb25maWcgdGhlIHJ1bnRpbWUsIGNsaWVudCwgdG9vbHMsIGFuZCByb3V0ZXMgcmVhZC4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVzb2x2ZWRTZWFyY2hDb25maWcge1xuICBkZWZhdWx0SW5kZXg/OiBzdHJpbmc7XG4gIGluZGV4ZXM6IFJlc29sdmVkSW5kZXhDb25maWdbXTtcbiAgZW5kcG9pbnQ/OiBzdHJpbmc7XG4gIGNvbHVtbnM/OiBzdHJpbmdbXTtcbiAgcGFnZVNpemU6IG51bWJlcjtcbiAgbW9kZTogU2VhcmNoTW9kZTtcbiAgZW1iZWRkaW5nTW9kZWw/OiBzdHJpbmc7XG4gIGJhc2VQYXRoOiBzdHJpbmc7XG4gIHRpbWVvdXRNczogbnVtYmVyO1xuICBhbGxvd1dyaXRlOiBib29sZWFuO1xuICBlbnN1cmVPblNldHVwPzogRW5zdXJlT25TZXR1cENvbmZpZztcbn1cblxuLyoqIEpTT04gU2NoZW1hIHRoZSBwbHVnaW4gbWFuaWZlc3QgcHVibGlzaGVzIGZvciB7QGxpbmsgU2VhcmNoUGx1Z2luQ29uZmlnfS4gKi9cbmV4cG9ydCBjb25zdCBTRUFSQ0hfQ09ORklHX1NDSEVNQTogSlNPTlNjaGVtYTcgPSB7XG4gIHR5cGU6IFwib2JqZWN0XCIsXG4gIGFkZGl0aW9uYWxQcm9wZXJ0aWVzOiB0cnVlLFxuICBwcm9wZXJ0aWVzOiB7XG4gICAgaW5kZXg6IHtcbiAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICBkZXNjcmlwdGlvbjogXCJEZWZhdWx0IGluZGV4IHRvIHNlYXJjaCAoY2F0YWxvZy5zY2hlbWEuaW5kZXggb3IgYSBjb25maWd1cmVkIGFsaWFzKS5cIixcbiAgICB9LFxuICAgIGluZGV4ZXM6IHtcbiAgICAgIHR5cGU6IFwiYXJyYXlcIixcbiAgICAgIGRlc2NyaXB0aW9uOiBcIkluZGV4ZXMgdGhlIHBsdWdpbiBrbm93cyBhYm91dCwgZm9yIGFsaWFzZXMsIHVuaXZlcnNhbCBzZWFyY2gsIGFuZCB0aGUgVUkuXCIsXG4gICAgICBpdGVtczoge1xuICAgICAgICBvbmVPZjogW1xuICAgICAgICAgIHsgdHlwZTogXCJzdHJpbmdcIiB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHR5cGU6IFwib2JqZWN0XCIsXG4gICAgICAgICAgICByZXF1aXJlZDogW1wibmFtZVwiXSxcbiAgICAgICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgICAgbmFtZTogeyB0eXBlOiBcInN0cmluZ1wiIH0sXG4gICAgICAgICAgICAgIGFsaWFzOiB7IHR5cGU6IFwic3RyaW5nXCIgfSxcbiAgICAgICAgICAgICAgcHJpbWFyeUtleTogeyB0eXBlOiBcInN0cmluZ1wiIH0sXG4gICAgICAgICAgICAgIGNvbHVtbnM6IHsgdHlwZTogXCJhcnJheVwiLCBpdGVtczogeyB0eXBlOiBcInN0cmluZ1wiIH0gfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH0sXG4gICAgfSxcbiAgICBlbmRwb2ludDoge1xuICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgIGRlc2NyaXB0aW9uOiBcIlZlY3RvciBTZWFyY2ggc2VydmluZyBlbmRwb2ludCBpbmRleGVzIGxpdmUgb24gKG5lZWRlZCBvbmx5IHRvIGNyZWF0ZSBvbmUpLlwiLFxuICAgIH0sXG4gICAgY29sdW1uczoge1xuICAgICAgdHlwZTogXCJhcnJheVwiLFxuICAgICAgaXRlbXM6IHsgdHlwZTogXCJzdHJpbmdcIiB9LFxuICAgICAgZGVzY3JpcHRpb246IFwiRGVmYXVsdCBjb2x1bW5zIHRvIHJldHVybi5cIixcbiAgICB9LFxuICAgIHBhZ2VTaXplOiB7IHR5cGU6IFwibnVtYmVyXCIsIGRlc2NyaXB0aW9uOiBcIkRlZmF1bHQgbnVtYmVyIG9mIGhpdHMgcGVyIHNlYXJjaC5cIiB9LFxuICAgIG1vZGU6IHsgZW51bTogW1wiaHlicmlkXCIsIFwidmVjdG9yXCIsIFwia2V5d29yZFwiXSwgZGVzY3JpcHRpb246IFwiRGVmYXVsdCBtYXRjaCBtb2RlLlwiIH0sXG4gICAgZW1iZWRkaW5nTW9kZWw6IHtcbiAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICBkZXNjcmlwdGlvbjogXCJFbWJlZGRpbmcgZW5kcG9pbnQgdXNlZCB3aGVuIGNyZWF0aW5nIGEgRGVsdGEgU3luYyBpbmRleCAoZnV6enktbWF0Y2hlZCkuXCIsXG4gICAgfSxcbiAgICB0aW1lb3V0TXM6IHsgdHlwZTogXCJudW1iZXJcIiwgZGVzY3JpcHRpb246IFwiUGVyLWNhbGwgdGltZW91dCBpbiBtaWxsaXNlY29uZHMuXCIgfSxcbiAgICBhbGxvd1dyaXRlOiB7XG4gICAgICB0eXBlOiBcImJvb2xlYW5cIixcbiAgICAgIGRlc2NyaXB0aW9uOiBcIkVuYWJsZSB0aGUgZG9jdW1lbnQgd3JpdGUgc3VyZmFjZSAoYWRkX2RvY3VtZW50cyB0b29sICsgcm91dGUpLlwiLFxuICAgIH0sXG4gICAgZW5zdXJlT25TZXR1cDoge1xuICAgICAgdHlwZTogXCJvYmplY3RcIixcbiAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICBcIlByb3Zpc2lvbiBhIHJlYWwgaW5kZXggYXQgYm9vdDogZW5zdXJlIHRoZSBlbmRwb2ludCArIGluZGV4IGV4aXN0IGFuZCBzZWVkIFwiICtcbiAgICAgICAgXCJkb2N1bWVudHMgd2hlbiBlbXB0eS4gUnVucyBpbiB0aGUgYmFja2dyb3VuZCBkdXJpbmcgc2V0dXAgdXNpbmcgYm9vdC10aW1lIGF1dGguXCIsXG4gICAgICBhZGRpdGlvbmFsUHJvcGVydGllczogdHJ1ZSxcbiAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgaW5kZXg6IHsgdHlwZTogXCJzdHJpbmdcIiB9LFxuICAgICAgICBlbmRwb2ludDogeyB0eXBlOiBcInN0cmluZ1wiIH0sXG4gICAgICAgIHByaW1hcnlLZXk6IHsgdHlwZTogXCJzdHJpbmdcIiB9LFxuICAgICAgICB0ZXh0Q29sdW1uOiB7IHR5cGU6IFwic3RyaW5nXCIgfSxcbiAgICAgICAgZW1iZWRkaW5nTW9kZWw6IHsgdHlwZTogXCJzdHJpbmdcIiB9LFxuICAgICAgICBzb3VyY2VUYWJsZTogeyB0eXBlOiBcInN0cmluZ1wiIH0sXG4gICAgICAgIHNjaGVtYTogeyB0eXBlOiBcIm9iamVjdFwiLCBhZGRpdGlvbmFsUHJvcGVydGllczogeyB0eXBlOiBcInN0cmluZ1wiIH0gfSxcbiAgICAgICAgZG9jdW1lbnRzOiB7IHR5cGU6IFwiYXJyYXlcIiwgaXRlbXM6IHsgdHlwZTogXCJvYmplY3RcIiwgYWRkaXRpb25hbFByb3BlcnRpZXM6IHRydWUgfSB9LFxuICAgICAgICB0aW1lb3V0TXM6IHsgdHlwZTogXCJudW1iZXJcIiB9LFxuICAgICAgfSxcbiAgICB9LFxuICB9LFxufTtcblxuLyoqIERlcml2ZSB0aGUgZGVmYXVsdCBhbGlhcyBmb3IgYW4gaW5kZXggbmFtZSAoaXRzIGxhc3QgZG90dGVkIHNlZ21lbnQpLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlZmF1bHRBbGlhcyhuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBzZWdtZW50cyA9IG5hbWUuc3BsaXQoXCIuXCIpLmZpbHRlcihCb29sZWFuKTtcbiAgcmV0dXJuIHNlZ21lbnRzLmxlbmd0aCA+IDAgPyBzZWdtZW50c1tzZWdtZW50cy5sZW5ndGggLSAxXSA6IG5hbWU7XG59XG5cbi8qKiBOb3JtYWxpemUgYSBjb25maWcgaW5kZXggZW50cnkgKHN0cmluZyBvciBvYmplY3QpIGludG8gYSB7QGxpbmsgUmVzb2x2ZWRJbmRleENvbmZpZ30uICovXG5mdW5jdGlvbiB0b1Jlc29sdmVkSW5kZXgoZW50cnk6IHN0cmluZyB8IFNlYXJjaEluZGV4Q29uZmlnKTogUmVzb2x2ZWRJbmRleENvbmZpZyB8IG51bGwge1xuICBjb25zdCByYXcgPSB0eXBlb2YgZW50cnkgPT09IFwic3RyaW5nXCIgPyB7IG5hbWU6IGVudHJ5IH0gOiBlbnRyeTtcbiAgY29uc3QgbmFtZSA9IHN0cmluZy50cmltVG9OdWxsKHJhdy5uYW1lKTtcbiAgaWYgKG5hbWUgPT09IG51bGwpIHJldHVybiBudWxsO1xuICByZXR1cm4ge1xuICAgIG5hbWUsXG4gICAgYWxpYXM6IHN0cmluZy50cmltVG9OdWxsKHJhdy5hbGlhcykgPz8gZGVmYXVsdEFsaWFzKG5hbWUpLFxuICAgIC4uLihyYXcucHJpbWFyeUtleSA/IHsgcHJpbWFyeUtleTogcmF3LnByaW1hcnlLZXkgfSA6IHt9KSxcbiAgICAuLi4ocmF3LmNvbHVtbnMgJiYgcmF3LmNvbHVtbnMubGVuZ3RoID4gMCA/IHsgY29sdW1uczogWy4uLnJhdy5jb2x1bW5zXSB9IDoge30pLFxuICB9O1xufVxuXG4vKiogUGFyc2UgYW5kIHZhbGlkYXRlIGEge0BsaW5rIFNlYXJjaE1vZGV9IGZyb20gY29uZmlnIG9yIGFuIGVudiB2YXIuICovXG5mdW5jdGlvbiByZXNvbHZlTW9kZShjb25maWd1cmVkOiBTZWFyY2hNb2RlIHwgdW5kZWZpbmVkKTogU2VhcmNoTW9kZSB7XG4gIGNvbnN0IHJhdyA9IGNvbmZpZ3VyZWQgPz8gcnVudGltZUNvbmZpZy50ZXh0KFwiU0VBUkNIX01PREVcIiwgcnVudGltZUNvbmZpZy5FTlZfT05MWSk7XG4gIGlmIChyYXcgPT09IHVuZGVmaW5lZCkgcmV0dXJuIERFRkFVTFRfTU9ERTtcbiAgaWYgKHJhdyAhPT0gXCJoeWJyaWRcIiAmJiByYXcgIT09IFwidmVjdG9yXCIgJiYgcmF3ICE9PSBcImtleXdvcmRcIikge1xuICAgIHRocm93IG5ldyBDb25maWd1cmF0aW9uRXJyb3IoXG4gICAgICAnbW9kZSBtdXN0IGJlIFwiaHlicmlkXCIsIFwidmVjdG9yXCIgb3IgXCJrZXl3b3JkXCIgKGVudjogU0VBUkNIX01PREUpJyxcbiAgICAgIHsgY29udGV4dDogeyBmaWVsZDogXCJtb2RlXCIsIGVudlZhcjogXCJTRUFSQ0hfTU9ERVwiIH0gfSxcbiAgICApO1xuICB9XG4gIHJldHVybiByYXc7XG59XG5cbi8qKlxuICogUmVzb2x2ZSBwbHVnaW4gY29uZmlnIG92ZXIgZW52aXJvbm1lbnQgZGVmYXVsdHMgaW50byB0aGUgY29uY3JldGVcbiAqIHtAbGluayBSZXNvbHZlZFNlYXJjaENvbmZpZ30uIFRoZSBkZWZhdWx0IGluZGV4IGlzIHVuaW9uZWQgaW50byB0aGUga25vd25cbiAqIGluZGV4ZXMgc28gaXQgYWx3YXlzIGFwcGVhcnMgaW4gdGhlIGNhdGFsb2d1ZSwgYWxpYXNlcyBhcmUgZGUtZHVwbGljYXRlZCxcbiAqIGFuZCBhIGJhZCBtb2RlIHRocm93cyBhIHtAbGluayBDb25maWd1cmF0aW9uRXJyb3J9IG5hbWluZyB0aGUgZmllbGQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlU2VhcmNoQ29uZmlnKGNvbmZpZzogU2VhcmNoUGx1Z2luQ29uZmlnID0ge30pOiBSZXNvbHZlZFNlYXJjaENvbmZpZyB7XG4gIGNvbnN0IGRlZmF1bHRJbmRleFJhdyA9IHJ1bnRpbWVDb25maWcuc3RyaW5nKFxuICAgIGNvbmZpZy5pbmRleCxcbiAgICBbSU5ERVhfRU5WLCBEQVRBQlJJQ0tTX0lOREVYX0VOVl0sXG4gICAgcnVudGltZUNvbmZpZy5FTlZfT05MWSxcbiAgKTtcblxuICBjb25zdCBjb25maWd1cmVkID0gKGNvbmZpZy5pbmRleGVzID8/IFtdKVxuICAgIC5tYXAodG9SZXNvbHZlZEluZGV4KVxuICAgIC5maWx0ZXIoKGVudHJ5KTogZW50cnkgaXMgUmVzb2x2ZWRJbmRleENvbmZpZyA9PiBlbnRyeSAhPT0gbnVsbCk7XG5cbiAgLy8gRW5zdXJlIHRoZSBkZWZhdWx0IGluZGV4IGlzIHJlcHJlc2VudGVkIGluIHRoZSBrbm93biBzZXQuXG4gIGlmIChkZWZhdWx0SW5kZXhSYXcgJiYgIWNvbmZpZ3VyZWQuc29tZSgoaSkgPT4gaS5uYW1lID09PSBkZWZhdWx0SW5kZXhSYXcpKSB7XG4gICAgY29uc3QgZW52Q29sdW1ucyA9IHJ1bnRpbWVDb25maWcubGlzdChcbiAgICAgIHVuZGVmaW5lZCxcbiAgICAgIFwiU0VBUkNIX0NPTFVNTlNcIixcbiAgICAgIHVuZGVmaW5lZCxcbiAgICAgIHJ1bnRpbWVDb25maWcuRU5WX09OTFksXG4gICAgKTtcbiAgICBjb25maWd1cmVkLnVuc2hpZnQoe1xuICAgICAgbmFtZTogZGVmYXVsdEluZGV4UmF3LFxuICAgICAgYWxpYXM6IGRlZmF1bHRBbGlhcyhkZWZhdWx0SW5kZXhSYXcpLFxuICAgICAgLi4uKGVudkNvbHVtbnMubGVuZ3RoID4gMCA/IHsgY29sdW1uczogZW52Q29sdW1ucyB9IDoge30pLFxuICAgIH0pO1xuICB9XG5cbiAgY29uc3Qgc2VlbkFsaWFzZXMgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgY29uc3QgaW5kZXhlcyA9IGNvbmZpZ3VyZWQubWFwKChlbnRyeSkgPT4ge1xuICAgIGxldCBhbGlhcyA9IGVudHJ5LmFsaWFzO1xuICAgIHdoaWxlIChzZWVuQWxpYXNlcy5oYXMoYWxpYXMpKSBhbGlhcyA9IGAke2FsaWFzfV9gO1xuICAgIHNlZW5BbGlhc2VzLmFkZChhbGlhcyk7XG4gICAgcmV0dXJuIHsgLi4uZW50cnksIGFsaWFzIH07XG4gIH0pO1xuXG4gIGNvbnN0IGRlZmF1bHRJbmRleCA9IGRlZmF1bHRJbmRleFJhdyA/PyBpbmRleGVzWzBdPy5uYW1lO1xuICBjb25zdCBjb2x1bW5zID0gcnVudGltZUNvbmZpZy5saXN0KFxuICAgIGNvbmZpZy5jb2x1bW5zLFxuICAgIFwiU0VBUkNIX0NPTFVNTlNcIixcbiAgICB1bmRlZmluZWQsXG4gICAgcnVudGltZUNvbmZpZy5FTlZfT05MWSxcbiAgKTtcblxuICByZXR1cm4ge1xuICAgIC4uLm9iamVjdC5vcHRpb25hbChcImRlZmF1bHRJbmRleFwiLCBkZWZhdWx0SW5kZXgpLFxuICAgIGluZGV4ZXMsXG4gICAgLi4ub2JqZWN0Lm9wdGlvbmFsKFxuICAgICAgXCJlbmRwb2ludFwiLFxuICAgICAgcnVudGltZUNvbmZpZy5zdHJpbmcoY29uZmlnLmVuZHBvaW50LCBFTkRQT0lOVF9FTlYsIHJ1bnRpbWVDb25maWcuRU5WX09OTFkpLFxuICAgICksXG4gICAgLi4uKGNvbHVtbnMubGVuZ3RoID4gMCA/IHsgY29sdW1ucyB9IDoge30pLFxuICAgIHBhZ2VTaXplOiBydW50aW1lQ29uZmlnLnBvc2l0aXZlSW50KFxuICAgICAgY29uZmlnLnBhZ2VTaXplLFxuICAgICAgXCJTRUFSQ0hfUEFHRV9TSVpFXCIsXG4gICAgICBERUZBVUxUX1BBR0VfU0laRSxcbiAgICAgIHJ1bnRpbWVDb25maWcuRU5WX09OTFksXG4gICAgKSxcbiAgICBtb2RlOiByZXNvbHZlTW9kZShjb25maWcubW9kZSksXG4gICAgLi4ub2JqZWN0Lm9wdGlvbmFsKFxuICAgICAgXCJlbWJlZGRpbmdNb2RlbFwiLFxuICAgICAgcnVudGltZUNvbmZpZy5zdHJpbmcoY29uZmlnLmVtYmVkZGluZ01vZGVsLCBcIlNFQVJDSF9FTUJFRERJTkdfTU9ERUxcIiwgcnVudGltZUNvbmZpZy5FTlZfT05MWSksXG4gICAgKSxcbiAgICBiYXNlUGF0aDogREVGQVVMVF9CQVNFX1BBVEgsXG4gICAgdGltZW91dE1zOiBydW50aW1lQ29uZmlnLnBvc2l0aXZlSW50KFxuICAgICAgY29uZmlnLnRpbWVvdXRNcyxcbiAgICAgIFwiU0VBUkNIX1RJTUVPVVRfTVNcIixcbiAgICAgIERFRkFVTFRfVElNRU9VVF9NUyxcbiAgICAgIHJ1bnRpbWVDb25maWcuRU5WX09OTFksXG4gICAgKSxcbiAgICBhbGxvd1dyaXRlOlxuICAgICAgcnVudGltZUNvbmZpZy5ib29sZWFuKGNvbmZpZy5hbGxvd1dyaXRlLCBcIlNFQVJDSF9XUklURVwiLCBydW50aW1lQ29uZmlnLkVOVl9PTkxZKSA/PyBmYWxzZSxcbiAgICAuLi4oY29uZmlnLmVuc3VyZU9uU2V0dXAgPyB7IGVuc3VyZU9uU2V0dXA6IGNvbmZpZy5lbnN1cmVPblNldHVwIH0gOiB7fSksXG4gIH07XG59XG5cbi8qKlxuICogUmVzb2x2ZSBhIGNhbGxlci1zdXBwbGllZCBpbmRleCByZWZlcmVuY2UgKGEgZnVsbCBVQyBuYW1lIG9yIGEgY29uZmlndXJlZFxuICogYWxpYXMpIGludG8gYSBjb25jcmV0ZSBpbmRleCBuYW1lLiBGYWxscyBiYWNrIHRvIHRoZSBkZWZhdWx0IGluZGV4IHdoZW4gdGhlXG4gKiByZWZlcmVuY2UgaXMgZW1wdHkuIFJldHVybnMgYG51bGxgIHdoZW4gbm90aGluZyBjYW4gYmUgcmVzb2x2ZWQgc28gY2FsbGVyc1xuICogcmFpc2UgYSBzdGFibGUsIHVzZXItZmFjaW5nIGVycm9yIHJhdGhlciB0aGFuIGNhbGxpbmcgYSBwaGFudG9tIGluZGV4LlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZUluZGV4TmFtZShcbiAgY29uZmlnOiBSZXNvbHZlZFNlYXJjaENvbmZpZyxcbiAgcmVmZXJlbmNlOiBzdHJpbmcgfCB1bmRlZmluZWQsXG4pOiBzdHJpbmcgfCBudWxsIHtcbiAgY29uc3QgcmVmID0gc3RyaW5nLnRyaW1Ub051bGwocmVmZXJlbmNlKTtcbiAgaWYgKHJlZiA9PT0gbnVsbCkgcmV0dXJuIGNvbmZpZy5kZWZhdWx0SW5kZXggPz8gbnVsbDtcbiAgY29uc3QgYnlBbGlhcyA9IGNvbmZpZy5pbmRleGVzLmZpbmQoKGkpID0+IGkuYWxpYXMgPT09IHJlZiB8fCBpLm5hbWUgPT09IHJlZik7XG4gIGlmIChieUFsaWFzKSByZXR1cm4gYnlBbGlhcy5uYW1lO1xuICAvLyBBY2NlcHQgYW4gdW5yZWdpc3RlcmVkIGJ1dCBmdWxseS1xdWFsaWZpZWQgVUMgbmFtZSAodGhyZWUgZG90dGVkIHBhcnRzKS5cbiAgaWYgKHJlZi5zcGxpdChcIi5cIikuZmlsdGVyKEJvb2xlYW4pLmxlbmd0aCA9PT0gMykgcmV0dXJuIHJlZjtcbiAgcmV0dXJuIGNvbmZpZy5kZWZhdWx0SW5kZXggPz8gbnVsbDtcbn1cblxuLyoqIFRoZSBrbm93biBjb25maWcgZm9yIGFuIGluZGV4IG5hbWUsIHdoZW4gdGhlIHBsdWdpbiB3YXMgdG9sZCBhYm91dCBpdC4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpbmRleENvbmZpZ0ZvcihcbiAgY29uZmlnOiBSZXNvbHZlZFNlYXJjaENvbmZpZyxcbiAgbmFtZTogc3RyaW5nLFxuKTogUmVzb2x2ZWRJbmRleENvbmZpZyB8IHVuZGVmaW5lZCB7XG4gIHJldHVybiBjb25maWcuaW5kZXhlcy5maW5kKChpKSA9PiBpLm5hbWUgPT09IG5hbWUgfHwgaS5hbGlhcyA9PT0gbmFtZSk7XG59XG4iXX0=
package/package.json CHANGED
@@ -28,11 +28,12 @@
28
28
  "dependencies": {
29
29
  "@databricks/appkit": "^0.43.0",
30
30
  "@databricks/sdk-experimental": "^0.17.0",
31
- "@dbx-tools/appkit": "0.6.81",
32
- "@dbx-tools/model": "0.6.81",
33
- "@dbx-tools/shared-core": "0.6.81",
34
- "@dbx-tools/shared-model": "0.6.81",
35
- "@dbx-tools/shared-search": "0.6.81",
31
+ "@dbx-tools/appkit": "0.6.85",
32
+ "@dbx-tools/core": "0.6.85",
33
+ "@dbx-tools/model": "0.6.85",
34
+ "@dbx-tools/shared-core": "0.6.85",
35
+ "@dbx-tools/shared-model": "0.6.85",
36
+ "@dbx-tools/shared-search": "0.6.85",
36
37
  "@mastra/core": "^1.47.0",
37
38
  "pg": "^8.22.0",
38
39
  "zod": "4.3.6"
@@ -51,7 +52,7 @@
51
52
  "./package.json": "./package.json"
52
53
  }
53
54
  },
54
- "version": "0.6.81",
55
+ "version": "0.6.85",
55
56
  "types": "./lib/index.d.ts",
56
57
  "type": "module",
57
58
  "exports": {
package/src/config.ts CHANGED
@@ -23,7 +23,8 @@
23
23
  */
24
24
 
25
25
  import { ConfigurationError, type BasePluginConfig } from "@databricks/appkit";
26
- import { env, object, string } from "@dbx-tools/shared-core";
26
+ import { config as runtimeConfig } from "@dbx-tools/core";
27
+ import { object, string } from "@dbx-tools/shared-core";
27
28
  import type { SearchDocument, SearchMode } from "@dbx-tools/shared-search";
28
29
  import type { JSONSchema7 } from "json-schema";
29
30
 
@@ -237,7 +238,7 @@ function toResolvedIndex(entry: string | SearchIndexConfig): ResolvedIndexConfig
237
238
 
238
239
  /** Parse and validate a {@link SearchMode} from config or an env var. */
239
240
  function resolveMode(configured: SearchMode | undefined): SearchMode {
240
- const raw = configured ?? env.text("SEARCH_MODE") ?? undefined;
241
+ const raw = configured ?? runtimeConfig.text("SEARCH_MODE", runtimeConfig.ENV_ONLY);
241
242
  if (raw === undefined) return DEFAULT_MODE;
242
243
  if (raw !== "hybrid" && raw !== "vector" && raw !== "keyword") {
243
244
  throw new ConfigurationError(
@@ -255,7 +256,11 @@ function resolveMode(configured: SearchMode | undefined): SearchMode {
255
256
  * and a bad mode throws a {@link ConfigurationError} naming the field.
256
257
  */
257
258
  export function resolveSearchConfig(config: SearchPluginConfig = {}): ResolvedSearchConfig {
258
- const defaultIndexRaw = env.string(config.index, [INDEX_ENV, DATABRICKS_INDEX_ENV]) ?? undefined;
259
+ const defaultIndexRaw = runtimeConfig.string(
260
+ config.index,
261
+ [INDEX_ENV, DATABRICKS_INDEX_ENV],
262
+ runtimeConfig.ENV_ONLY,
263
+ );
259
264
 
260
265
  const configured = (config.indexes ?? [])
261
266
  .map(toResolvedIndex)
@@ -263,7 +268,12 @@ export function resolveSearchConfig(config: SearchPluginConfig = {}): ResolvedSe
263
268
 
264
269
  // Ensure the default index is represented in the known set.
265
270
  if (defaultIndexRaw && !configured.some((i) => i.name === defaultIndexRaw)) {
266
- const envColumns = env.list(undefined, "SEARCH_COLUMNS");
271
+ const envColumns = runtimeConfig.list(
272
+ undefined,
273
+ "SEARCH_COLUMNS",
274
+ undefined,
275
+ runtimeConfig.ENV_ONLY,
276
+ );
267
277
  configured.unshift({
268
278
  name: defaultIndexRaw,
269
279
  alias: defaultAlias(defaultIndexRaw),
@@ -280,22 +290,41 @@ export function resolveSearchConfig(config: SearchPluginConfig = {}): ResolvedSe
280
290
  });
281
291
 
282
292
  const defaultIndex = defaultIndexRaw ?? indexes[0]?.name;
283
- const columns = env.list(config.columns, "SEARCH_COLUMNS");
293
+ const columns = runtimeConfig.list(
294
+ config.columns,
295
+ "SEARCH_COLUMNS",
296
+ undefined,
297
+ runtimeConfig.ENV_ONLY,
298
+ );
284
299
 
285
300
  return {
286
301
  ...object.optional("defaultIndex", defaultIndex),
287
302
  indexes,
288
- ...object.optional("endpoint", env.string(config.endpoint, ENDPOINT_ENV)),
303
+ ...object.optional(
304
+ "endpoint",
305
+ runtimeConfig.string(config.endpoint, ENDPOINT_ENV, runtimeConfig.ENV_ONLY),
306
+ ),
289
307
  ...(columns.length > 0 ? { columns } : {}),
290
- pageSize: env.positiveInt(config.pageSize, "SEARCH_PAGE_SIZE", DEFAULT_PAGE_SIZE),
308
+ pageSize: runtimeConfig.positiveInt(
309
+ config.pageSize,
310
+ "SEARCH_PAGE_SIZE",
311
+ DEFAULT_PAGE_SIZE,
312
+ runtimeConfig.ENV_ONLY,
313
+ ),
291
314
  mode: resolveMode(config.mode),
292
315
  ...object.optional(
293
316
  "embeddingModel",
294
- env.string(config.embeddingModel, "SEARCH_EMBEDDING_MODEL"),
317
+ runtimeConfig.string(config.embeddingModel, "SEARCH_EMBEDDING_MODEL", runtimeConfig.ENV_ONLY),
295
318
  ),
296
319
  basePath: DEFAULT_BASE_PATH,
297
- timeoutMs: env.positiveInt(config.timeoutMs, "SEARCH_TIMEOUT_MS", DEFAULT_TIMEOUT_MS),
298
- allowWrite: env.boolean(config.allowWrite, "SEARCH_WRITE") ?? false,
320
+ timeoutMs: runtimeConfig.positiveInt(
321
+ config.timeoutMs,
322
+ "SEARCH_TIMEOUT_MS",
323
+ DEFAULT_TIMEOUT_MS,
324
+ runtimeConfig.ENV_ONLY,
325
+ ),
326
+ allowWrite:
327
+ runtimeConfig.boolean(config.allowWrite, "SEARCH_WRITE", runtimeConfig.ENV_ONLY) ?? false,
299
328
  ...(config.ensureOnSetup ? { ensureOnSetup: config.ensureOnSetup } : {}),
300
329
  };
301
330
  }