@dbx-tools/appkit-mastra 0.9.118 → 0.9.120

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.
@@ -18,13 +18,12 @@ import { appkit } from "@dbx-tools/appkit";
18
18
  import type { BrandContext } from "@dbx-tools/shared-core";
19
19
  import type { AgentConfig } from "@mastra/core/agent";
20
20
  import type { RequestContext } from "@mastra/core/request-context";
21
- import type { WorkspaceToolsConfig } from "@mastra/core/workspace";
21
+ import type { WorkspaceSandbox, WorkspaceSandboxResolver, WorkspaceToolsConfig } from "@mastra/core/workspace";
22
22
  import type { PgVectorConfig, PostgresStoreConfig } from "@mastra/pg";
23
23
  import type { AnyMastraAgentDefinition, MastraTools } from "./agents.ts";
24
24
  import type { GenieSpacesConfig } from "./genie.ts";
25
25
  import { type MastraIdentityMode } from "./identity.ts";
26
- import type { RemoteSkillsOption } from "./remote-skills.ts";
27
- import type { DatabricksWorkspaceSandboxOptions } from "./sandbox.ts";
26
+ import type { LocalSkillMount, RemoteSkillsOption } from "./remote-skills.ts";
28
27
  /**
29
28
  * `RequestContext` key under which {@link MastraServer} stores the
30
29
  * resolved AppKit user. `model.ts` reads it to mint user-scoped
@@ -179,30 +178,34 @@ export interface MastraPluginConfig extends BasePluginConfig {
179
178
  /** AI SDK provider-options namespace. Defaults to `"openai"`; no env fallback. */
180
179
  providerId?: string;
181
180
  /**
182
- * PostgresStore for Mastra threads/messages. `true` reuses the
183
- * `lakebase` plugin's pool; an object opens a dedicated store.
181
+ * PostgresStore for Mastra threads/messages. `true` captures the
182
+ * `lakebase` plugin's existing service-principal pool; an object opens a
183
+ * separately configured store.
184
184
  */
185
185
  storage?: boolean | PostgresStoreConfig;
186
186
  /**
187
- * PgVector store for Mastra memory recall. `true` reuses the
188
- * `lakebase` plugin's pool; an object opens a dedicated store.
187
+ * PgVector store for Mastra memory recall. `true` captures the
188
+ * `lakebase` plugin's existing service-principal pool; an object opens a
189
+ * separately configured store.
189
190
  */
190
191
  memory?: boolean | MastraMemoryConfig;
191
192
  /**
192
- * Expose executable tools from each agent definition through native Mastra
193
- * Code Mode. Defaults on whenever the agent has executable tools. The plugin
194
- * selects Mastra's isolated-vm transport once during startup and falls back
195
- * to Mastra QuickJS when the native transport is unavailable. Set `false` to
193
+ * Expose executable tools available to the current request through native
194
+ * Mastra Code Mode. Defaults on whenever the request has executable tools.
195
+ * The plugin selects Mastra's isolated-vm transport once during startup and
196
+ * falls back to Mastra QuickJS when the native transport is unavailable.
197
+ * These transports do not execute through the workspace command sandbox;
198
+ * SSH is used only when an exposed SSH-backed tool is called. Set `false` to
196
199
  * opt out.
197
200
  */
198
201
  codeMode?: boolean | MastraCodeModeConfig;
199
202
  /**
200
203
  * Sandbox for auto-created agent workspaces. Defaults to Monty. `false`
201
- * disables command execution; `true`, `"databricks"`, or an object
202
- * selects/configures Databricks Sandbox. An agent with an explicit custom
203
- * `workspace` keeps that workspace and its sandbox.
204
+ * disables command execution; `true` or `"monty"` selects Monty; an explicit
205
+ * Mastra sandbox or resolver supplies a remote transport. An agent with an
206
+ * explicit custom `workspace` keeps that workspace and its sandbox.
204
207
  */
205
- sandbox?: boolean | "databricks" | "monty" | DatabricksWorkspaceSandboxOptions;
208
+ sandbox?: boolean | "monty" | WorkspaceSandbox | WorkspaceSandboxResolver;
206
209
  /** Add user-scoped `/tmp` only when no configured workspace path mounts writable. */
207
210
  workspaceFallbackToTmp?: boolean;
208
211
  /** Native Mastra workspace tool availability, approval, and hook configuration. */
@@ -594,10 +597,10 @@ export interface MastraPluginConfig extends BasePluginConfig {
594
597
  * without it, a URL source is fetched directly. A source that resolves
595
598
  * through neither fails startup unless `failOnError: false`.
596
599
  *
597
- * Provisioned skills are written to the Databricks user's Assistant skills
598
- * folder (`/Workspace/Users/<email>/.assistant/skills`, the personal skill
599
- * target) so they persist and are picked up by the built-in Assistant-skills
600
- * mount. With no writable workspace, they go to a local temp dir instead.
600
+ * AI Tools is cached daily with `@dbx-tools/cache` and served to every
601
+ * auto-created workspace from the shared `/.databricks/skills` memory mount.
602
+ * Other sources are written to the Databricks user's Assistant skills folder
603
+ * when writable, with a read-only local-memory fallback.
601
604
  *
602
605
  * @example
603
606
  * ```ts
@@ -611,6 +614,8 @@ export interface MastraPluginConfig extends BasePluginConfig {
611
614
  * ```
612
615
  */
613
616
  remoteSkills?: RemoteSkillsOption;
617
+ /** Read-only local skill trees mounted into every default agent workspace. */
618
+ localSkillMounts?: LocalSkillMount[];
614
619
  }
615
620
  /**
616
621
  * JSON Schema published on the manifest's `config.schema`, mirroring the
package/lib/src/config.js CHANGED
@@ -136,23 +136,23 @@ export const MASTRA_CONFIG_SCHEMA = {
136
136
  },
137
137
  remoteSkills: {
138
138
  type: ["string", "array", "object"],
139
- description: 'Remote Agent-Skill sources provisioned at startup: "aitools" for Databricks\' own skill set (read from the public databricks/databricks-agent-skills repo, no CLI needed), a GitHub owner/repo, a git/GitLab URL, or a direct SKILL.md/archive URL. Non-aitools sources prefer the optional `skills` npm CLI, else a direct fetch; fails startup on error unless failOnError:false. Written to the Databricks user Assistant skills folder, or read-only local backing storage exposed at stable virtual workspace mounts.',
139
+ description: 'Remote Agent-Skill sources provisioned at startup: "aitools" for Databricks\' own skill set (daily @dbx-tools/cache snapshot served from the shared in-memory /.databricks/skills mount), a GitHub owner/repo, a git/GitLab URL, or a direct SKILL.md/archive URL. Non-aitools sources prefer the optional `skills` npm CLI, else a direct fetch; fails startup on error unless failOnError:false. Other sources write to the Databricks user Assistant skills folder or a read-only local-memory fallback.',
140
140
  },
141
141
  storage: {
142
142
  type: ["boolean", "object"],
143
- description: "PostgresStore for Mastra threads / messages. `true` reuses the `lakebase` plugin's pool, an object opens a dedicated store. Auto-enabled when the `lakebase` plugin is registered.",
143
+ description: "PostgresStore for Mastra threads / messages. `true` captures the `lakebase` plugin's existing service-principal pool; an object opens a separately configured store. Auto-enabled when the `lakebase` plugin is registered.",
144
144
  },
145
145
  memory: {
146
146
  type: ["boolean", "object"],
147
- description: "PgVector store for Mastra semantic recall. `true` reuses the `lakebase` plugin's pool, an object opens a dedicated store. Auto-enabled when the `lakebase` plugin is registered.",
147
+ description: "PgVector store for Mastra semantic recall. `true` captures the `lakebase` plugin's existing service-principal pool; an object opens a separately configured store. Auto-enabled when the `lakebase` plugin is registered.",
148
148
  },
149
149
  codeMode: {
150
150
  type: ["boolean", "object"],
151
- description: "Expose all executable tools available to the current request, including native workspace tools, through dynamically generated Mastra Code Mode for sandboxed TypeScript batching, aggregation, and arithmetic. The plugin selects Mastra isolated-vm once during startup and falls back to Mastra QuickJS when native initialization is unavailable. False disables it.",
151
+ description: "Expose all executable tools available to the current request through native Mastra Code Mode for TypeScript batching, aggregation, and arithmetic. The plugin uses Mastra isolated-vm with the existing QuickJS fallback; neither transport runs through the workspace command sandbox, so SSH is used only when an SSH-backed tool is called. False disables it.",
152
152
  },
153
153
  sandbox: {
154
154
  type: ["boolean", "string", "object"],
155
- description: 'Command sandbox for auto-created agent workspaces. Defaults to Monty. False disables command execution; true, "databricks", or an object selects/configures Databricks Sandbox.',
155
+ description: 'Command sandbox for auto-created agent workspaces. Defaults to Monty. False disables command execution; true or "monty" selects Monty; an explicit sandbox or resolver supplies another transport.',
156
156
  },
157
157
  workspaceFallbackToTmp: {
158
158
  type: "boolean",
@@ -250,4 +250,4 @@ export const MASTRA_CONFIG_SCHEMA = {
250
250
  },
251
251
  },
252
252
  };
253
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7R0FjRztBQUVILE9BQU8sRUFBRSxtQkFBbUIsRUFBNEMsTUFBTSxvQkFBb0IsQ0FBQztBQUtuRyxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQU01RixPQUFPLEVBQUUsY0FBYyxFQUEyQixNQUFNLGVBQWUsQ0FBQztBQUl4RTs7OztHQUlHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sZUFBZSxHQUFHLGNBQWMsQ0FBQztBQUU5Qzs7Ozs7R0FLRztBQUNILE1BQU0sQ0FBQyxNQUFNLG9CQUFvQixHQUFHLGtCQUFrQixDQUFDO0FBQ3ZELDZFQUE2RTtBQUM3RSxNQUFNLENBQUMsTUFBTSxxQkFBcUIsR0FBRyxtQkFBbUIsQ0FBQztBQUV6RDs7Ozs7Ozs7R0FRRztBQUNILE1BQU0sQ0FBQyxNQUFNLHFCQUFxQixHQUFHLG1CQUFtQixDQUFDO0FBRXpEOzs7OztHQUtHO0FBQ0gsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQUcsZ0JBQWdCLENBQUM7QUFFbEQ7Ozs7Ozs7Ozs7Ozs7R0FhRztBQUNILE1BQU0sQ0FBQyxNQUFNLDBCQUEwQixHQUFzQjtJQUMzRCxzQkFBc0I7SUFDdEIsb0JBQW9CO0lBQ3BCLHFCQUFxQjtJQUNyQixvQkFBb0I7SUFDcEIscUJBQXFCO0lBQ3JCLG1FQUFtRTtJQUNuRSxpRUFBaUU7SUFDakUsd0JBQXdCO0NBQ3pCLENBQUM7QUFRRjs7O0dBR0c7QUFDSCxNQUFNLFVBQVUsc0JBQXNCLENBQUMsT0FBb0M7SUFDekUsT0FBTyxRQUFRLElBQUksT0FBTyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDO0FBQ3RFLENBQUM7QUFFRDs7Ozs7Ozs7Ozs7Ozs7R0FjRztBQUNILE1BQU0sVUFBVSxnQkFBZ0IsQ0FDOUIsZ0JBQTZDLEVBQzdDLGVBQXdCO0lBRXhCLElBQUksZUFBZSxJQUFJLGdCQUFnQjtRQUFFLE9BQU8sc0JBQXNCLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUN6RixPQUFPLGVBQWUsSUFBSSxzQkFBc0IsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0FBQ3JFLENBQUM7QUFFRDs7Ozs7Ozs7OztHQVVHO0FBQ0gsTUFBTSxVQUFVLGNBQWMsQ0FBQyxjQUErQjtJQUM1RCxNQUFNLElBQUksR0FBRyxjQUFjLEVBQUUsR0FBRyxDQUFDLGVBQWUsQ0FBcUIsQ0FBQztJQUN0RSxPQUFPLElBQUksRUFBRSxFQUFFLElBQUksc0JBQXNCLENBQUMsbUJBQW1CLEVBQUUsQ0FBQyxDQUFDO0FBQ25FLENBQUM7QUFnZ0JEOzs7Ozs7OztHQVFHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sb0JBQW9CLEdBQWlCO0lBQ2hELElBQUksRUFBRSxRQUFRO0lBQ2QsVUFBVSxFQUFFO1FBQ1YsZUFBZSxFQUFFO1lBQ2YsSUFBSSxFQUFFLFNBQVM7WUFDZixXQUFXLEVBQ1QscUpBQXFKO1NBQ3hKO1FBQ0QsVUFBVSxFQUFFO1lBQ1YsSUFBSSxFQUFFLFFBQVE7WUFDZCxXQUFXLEVBQUUsMERBQTBEO1NBQ3hFO1FBQ0QsWUFBWSxFQUFFO1lBQ1osSUFBSSxFQUFFLENBQUMsUUFBUSxFQUFFLE9BQU8sRUFBRSxRQUFRLENBQUM7WUFDbkMsV0FBVyxFQUNULDRmQUE0ZjtTQUMvZjtRQUNELE9BQU8sRUFBRTtZQUNQLElBQUksRUFBRSxDQUFDLFNBQVMsRUFBRSxRQUFRLENBQUM7WUFDM0IsV0FBVyxFQUNULG9MQUFvTDtTQUN2TDtRQUNELE1BQU0sRUFBRTtZQUNOLElBQUksRUFBRSxDQUFDLFNBQVMsRUFBRSxRQUFRLENBQUM7WUFDM0IsV0FBVyxFQUNULGtMQUFrTDtTQUNyTDtRQUNELFFBQVEsRUFBRTtZQUNSLElBQUksRUFBRSxDQUFDLFNBQVMsRUFBRSxRQUFRLENBQUM7WUFDM0IsV0FBVyxFQUNULHlXQUF5VztTQUM1VztRQUNELE9BQU8sRUFBRTtZQUNQLElBQUksRUFBRSxDQUFDLFNBQVMsRUFBRSxRQUFRLEVBQUUsUUFBUSxDQUFDO1lBQ3JDLFdBQVcsRUFDVCxpTEFBaUw7U0FDcEw7UUFDRCxzQkFBc0IsRUFBRTtZQUN0QixJQUFJLEVBQUUsU0FBUztZQUNmLFdBQVcsRUFDVCxtSUFBbUk7U0FDdEk7UUFDRCxlQUFlLEVBQUU7WUFDZixJQUFJLEVBQUUsQ0FBQyxTQUFTLEVBQUUsUUFBUSxDQUFDO1lBQzNCLFdBQVcsRUFDVCxrR0FBa0c7U0FDckc7UUFDRCxjQUFjLEVBQUU7WUFDZCxJQUFJLEVBQUUsUUFBUTtZQUNkLFdBQVcsRUFDVCxzSEFBc0g7U0FDekg7UUFDRCxZQUFZLEVBQUU7WUFDWixJQUFJLEVBQUUsUUFBUTtZQUNkLFdBQVcsRUFDVCxnSEFBZ0g7U0FDbkg7UUFDRCxZQUFZLEVBQUU7WUFDWixJQUFJLEVBQUUsUUFBUTtZQUNkLFdBQVcsRUFDVCxtTEFBbUw7U0FDdEw7UUFDRCxxQkFBcUIsRUFBRTtZQUNyQixJQUFJLEVBQUUsT0FBTztZQUNiLEtBQUssRUFBRSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUU7WUFDekIsV0FBVyxFQUNULDZHQUE2RztTQUNoSDtRQUNELGVBQWUsRUFBRTtZQUNmLElBQUksRUFBRSxTQUFTO1lBQ2YsV0FBVyxFQUNULGtGQUFrRjtTQUNyRjtRQUNELG1CQUFtQixFQUFFO1lBQ25CLElBQUksRUFBRSxRQUFRO1lBQ2QsV0FBVyxFQUNULDRGQUE0RjtTQUMvRjtRQUNELGVBQWUsRUFBRTtZQUNmLElBQUksRUFBRSxRQUFRO1lBQ2QsV0FBVyxFQUNULDRGQUE0RjtTQUMvRjtRQUNELGFBQWEsRUFBRTtZQUNiLElBQUksRUFBRSxTQUFTO1lBQ2YsV0FBVyxFQUNULDhIQUE4SDtTQUNqSTtRQUNELFdBQVcsRUFBRTtZQUNYLElBQUksRUFBRSxRQUFRO1lBQ2Qsb0JBQW9CLEVBQUUsRUFBRSxJQUFJLEVBQUUsQ0FBQyxRQUFRLEVBQUUsUUFBUSxDQUFDLEVBQUU7WUFDcEQsV0FBVyxFQUNULG9QQUFvUDtTQUN2UDtRQUNELGNBQWMsRUFBRTtZQUNkLElBQUksRUFBRSxTQUFTO1lBQ2YsV0FBVyxFQUNULDZMQUE2TDtTQUNoTTtRQUNELG9CQUFvQixFQUFFO1lBQ3BCLElBQUksRUFBRSxRQUFRO1lBQ2QsV0FBVyxFQUFFLHNFQUFzRTtTQUNwRjtRQUNELGFBQWEsRUFBRTtZQUNiLElBQUksRUFBRSxRQUFRO1lBQ2QsV0FBVyxFQUNULGdIQUFnSDtTQUNuSDtRQUNELGdCQUFnQixFQUFFO1lBQ2hCLElBQUksRUFBRSxTQUFTO1lBQ2YsV0FBVyxFQUNULDZIQUE2SDtTQUNoSTtRQUNELGlCQUFpQixFQUFFO1lBQ2pCLElBQUksRUFBRSxDQUFDLFFBQVEsRUFBRSxTQUFTLENBQUM7WUFDM0IsV0FBVyxFQUNULHFIQUFxSDtTQUN4SDtRQUNELGFBQWEsRUFBRTtZQUNiLElBQUksRUFBRSxTQUFTO1lBQ2YsV0FBVyxFQUNULHFKQUFxSjtTQUN4SjtRQUNELFFBQVEsRUFBRTtZQUNSLElBQUksRUFBRSxTQUFTO1lBQ2YsV0FBVyxFQUNULGdRQUFnUTtTQUNuUTtRQUNELEdBQUcsRUFBRTtZQUNILElBQUksRUFBRSxDQUFDLFNBQVMsRUFBRSxRQUFRLENBQUM7WUFDM0IsV0FBVyxFQUNULDRKQUE0SjtTQUMvSjtRQUNELGFBQWEsRUFBRTtZQUNiLElBQUksRUFBRSxRQUFRO1lBQ2QsMkVBQTJFO1lBQzNFLDBFQUEwRTtZQUMxRSxJQUFJLEVBQUUsQ0FBQyxHQUFHLGNBQWMsQ0FBQztZQUN6QixXQUFXLEVBQ1QsNmZBQTZmO1NBQ2hnQjtRQUNELFNBQVMsRUFBRTtZQUNULElBQUksRUFBRSxRQUFRO1lBQ2QsSUFBSSxFQUFFLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQztZQUN4QixXQUFXLEVBQ1QscU9BQXFPO1NBQ3hPO1FBQ0QsS0FBSyxFQUFFO1lBQ0wsSUFBSSxFQUFFLFFBQVE7WUFDZCxXQUFXLEVBQ1QsMElBQTBJO1NBQzdJO0tBQ0Y7Q0FDRixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBQbHVnaW4gY29uZmlndXJhdGlvbiB0eXBlcyBhbmQgc2hhcmVkIGBSZXF1ZXN0Q29udGV4dGAga2V5cy5cbiAqXG4gKiBPd25zIHRoZSB0eXBlZCB7QGxpbmsgTWFzdHJhUGx1Z2luQ29uZmlnfSAodGhlIHBsdWdpbidzIHNsaWNlIG9mIEFwcEtpdFxuICogY29uZmlnKSBhbmQge0BsaW5rIE1BU1RSQV9DT05GSUdfU0NIRU1BfSwgdGhlIEpTT04gU2NoZW1hIHRoZSBtYW5pZmVzdFxuICogcHVibGlzaGVzIGZvciBpdCBzbyBzY2FmZm9sZGluZyB0b29scyBhbmQgYWdlbnRzIGNhbiByZWFkIHRoZSBvcHRpb24gc2V0LlxuICpcbiAqIFByZWNlZGVuY2UgcGVyIGZpZWxkIGlzIGV4cGxpY2l0IHBsdWdpbiBjb25maWcsIHRoZW4gdGhlIGVudmlyb25tZW50XG4gKiB2YXJpYWJsZSBuYW1lZCBvbiB0aGUgZmllbGQsIHRoZW4gYSBidWlsdC1pbiBkZWZhdWx0LlxuICpcbiAqIEtlcHQgaW4gYSBsZWFmIG1vZHVsZSBzbyBgcGx1Z2luLnRzYCwgYHNlcnZlci50c2AsIGBtb2RlbC50c2AsIGFuZFxuICogYG1lbW9yeS50c2AgY2FuIGltcG9ydCB0aGVtIHdpdGhvdXQgY3JlYXRpbmcgYSBjeWNsZS5cbiAqXG4gKiBAbW9kdWxlXG4gKi9cblxuaW1wb3J0IHsgZ2V0RXhlY3V0aW9uQ29udGV4dCwgdHlwZSBCYXNlUGx1Z2luQ29uZmlnLCB0eXBlIENvbmZpZ1NjaGVtYSB9IGZyb20gXCJAZGF0YWJyaWNrcy9hcHBraXRcIjtcbmltcG9ydCB7IGFwcGtpdCB9IGZyb20gXCJAZGJ4LXRvb2xzL2FwcGtpdFwiO1xuaW1wb3J0IHR5cGUgeyBCcmFuZENvbnRleHQgfSBmcm9tIFwiQGRieC10b29scy9zaGFyZWQtY29yZVwiO1xuaW1wb3J0IHR5cGUgeyBBZ2VudENvbmZpZyB9IGZyb20gXCJAbWFzdHJhL2NvcmUvYWdlbnRcIjtcbmltcG9ydCB0eXBlIHsgUmVxdWVzdENvbnRleHQgfSBmcm9tIFwiQG1hc3RyYS9jb3JlL3JlcXVlc3QtY29udGV4dFwiO1xuaW1wb3J0IHsgTUFTVFJBX1JFU09VUkNFX0lEX0tFWSwgTUFTVFJBX1RIUkVBRF9JRF9LRVkgfSBmcm9tIFwiQG1hc3RyYS9jb3JlL3JlcXVlc3QtY29udGV4dFwiO1xuaW1wb3J0IHR5cGUgeyBXb3Jrc3BhY2VUb29sc0NvbmZpZyB9IGZyb20gXCJAbWFzdHJhL2NvcmUvd29ya3NwYWNlXCI7XG5pbXBvcnQgdHlwZSB7IFBnVmVjdG9yQ29uZmlnLCBQb3N0Z3Jlc1N0b3JlQ29uZmlnIH0gZnJvbSBcIkBtYXN0cmEvcGdcIjtcblxuaW1wb3J0IHR5cGUgeyBBbnlNYXN0cmFBZ2VudERlZmluaXRpb24sIE1hc3RyYVRvb2xzIH0gZnJvbSBcIi4vYWdlbnRzLnRzXCI7XG5pbXBvcnQgdHlwZSB7IEdlbmllU3BhY2VzQ29uZmlnIH0gZnJvbSBcIi4vZ2VuaWUudHNcIjtcbmltcG9ydCB7IElERU5USVRZX01PREVTLCB0eXBlIE1hc3RyYUlkZW50aXR5TW9kZSB9IGZyb20gXCIuL2lkZW50aXR5LnRzXCI7XG5pbXBvcnQgdHlwZSB7IFJlbW90ZVNraWxsc09wdGlvbiB9IGZyb20gXCIuL3JlbW90ZS1za2lsbHMudHNcIjtcbmltcG9ydCB0eXBlIHsgRGF0YWJyaWNrc1dvcmtzcGFjZVNhbmRib3hPcHRpb25zIH0gZnJvbSBcIi4vc2FuZGJveC50c1wiO1xuXG4vKipcbiAqIGBSZXF1ZXN0Q29udGV4dGAga2V5IHVuZGVyIHdoaWNoIHtAbGluayBNYXN0cmFTZXJ2ZXJ9IHN0b3JlcyB0aGVcbiAqIHJlc29sdmVkIEFwcEtpdCB1c2VyLiBgbW9kZWwudHNgIHJlYWRzIGl0IHRvIG1pbnQgdXNlci1zY29wZWRcbiAqIERhdGFicmlja3MgdG9rZW5zLlxuICovXG5leHBvcnQgY29uc3QgTUFTVFJBX1VTRVJfS0VZID0gXCJtYXN0cmFfX3VzZXJcIjtcblxuLyoqXG4gKiBgUmVxdWVzdENvbnRleHRgIGtleXMgZm9yIEFwcEtpdCB1c2VyIG1ldGFkYXRhIHN0YW1wZWQgYnlcbiAqIHtAbGluayBNYXN0cmFTZXJ2ZXJ9LiBTdXJmYWNlZCBhcyB0cmFjZSBtZXRhZGF0YSB2aWFcbiAqIHtAbGluayBUUkFDRV9SRVFVRVNUX0NPTlRFWFRfS0VZU30gc28gdHJhY2VzIGFyZSBmaWx0ZXJhYmxlIGJ5IHdob1xuICogaXNzdWVkIHRoZSByZXF1ZXN0IHdpdGhvdXQgbGVha2luZyB0aGUgZnVsbCB1c2VyIG9iamVjdC5cbiAqL1xuZXhwb3J0IGNvbnN0IE1BU1RSQV9VU0VSX05BTUVfS0VZID0gXCJtYXN0cmFfX3VzZXJOYW1lXCI7XG4vKiogUmVxdWVzdC1jb250ZXh0IGtleSBjb250YWluaW5nIHRoZSBhdXRoZW50aWNhdGVkIHVzZXIncyBlbWFpbCBhZGRyZXNzLiAqL1xuZXhwb3J0IGNvbnN0IE1BU1RSQV9VU0VSX0VNQUlMX0tFWSA9IFwibWFzdHJhX191c2VyRW1haWxcIjtcblxuLyoqXG4gKiBgUmVxdWVzdENvbnRleHRgIGtleSBmb3IgdGhlIHBlci1IVFRQLXJlcXVlc3QgaWQgc3RhbXBlZCBieVxuICoge0BsaW5rIE1hc3RyYVNlcnZlcn0uIFJlYWRzIGBYLVJlcXVlc3QtSWRgIGZyb20gdGhlIGluY29taW5nXG4gKiBoZWFkZXJzIHdoZW4gcHJlc2VudCAoc28gYW4gdXBzdHJlYW0gbG9hZCBiYWxhbmNlciAvIEFQSSBnYXRld2F5XG4gKiBjYW4ga2VlcCBpdHMgdHJhY2UgY29ycmVsYXRpb24pLCBmYWxscyBiYWNrIHRvIGEgZnJlc2hseSBtaW50ZWRcbiAqIFVVSUQuIEVjaG9lZCBiYWNrIG9uIHRoZSByZXNwb25zZSBhbmQgc3VyZmFjZWQgb24gZXZlcnkgc3BhbiB2aWFcbiAqIHtAbGluayBUUkFDRV9SRVFVRVNUX0NPTlRFWFRfS0VZU30gc28gbG9ncyBhbmQgdHJhY2VzIHNoYXJlIGFcbiAqIGpvaW4ga2V5LlxuICovXG5leHBvcnQgY29uc3QgTUFTVFJBX1JFUVVFU1RfSURfS0VZID0gXCJtYXN0cmFfX3JlcXVlc3RJZFwiO1xuXG4vKipcbiAqIGBSZXF1ZXN0Q29udGV4dGAga2V5IGZvciBPQXV0aCBzY29wZXMgcGFyc2VkIGZyb20gdGhlIGZvcndhcmRlZFxuICogYWNjZXNzIHRva2VuIGJ5IHtAbGluayBNYXN0cmFTZXJ2ZXIuY29uZmlndXJlUmVxdWVzdENvbnRleHRTY29wZXN9LlxuICogV29ya3NwYWNlIG1vdW50cyB0aGF0IHRvdWNoIERhdGFicmlja3Mgd29ya3NwYWNlIGZpbGVzIHJlcXVpcmVcbiAqIGB3b3Jrc3BhY2VgIG9yIGBhbGwtYXBpc2AgaW4gdGhpcyBsaXN0LlxuICovXG5leHBvcnQgY29uc3QgTUFTVFJBX1NDT1BFU19LRVkgPSBcIm1hc3RyYV9fc2NvcGVzXCI7XG5cbi8qKlxuICogQ2Fub25pY2FsIGxpc3Qgb2YgYFJlcXVlc3RDb250ZXh0YCBrZXlzIHdlIHdhbnQgTWFzdHJhIHRvIGV4dHJhY3RcbiAqIGFzIG1ldGFkYXRhIG9uIGV2ZXJ5IG9ic2VydmFiaWxpdHkgc3BhbiAoYWdlbnQgcnVucywgbW9kZWwgY2FsbHMsXG4gKiB0b29sIGludm9jYXRpb25zLCB3b3JrZmxvdyBzdGVwcykuXG4gKlxuICogTWlycm9ycyB7QGxpbmsgaHR0cHM6Ly9tYXN0cmEuYWkvZG9jcy9vYnNlcnZhYmlsaXR5L3RyYWNpbmcvb3ZlcnZpZXcjYXV0b21hdGljLW1ldGFkYXRhLWZyb20tcmVxdWVzdGNvbnRleHR9OlxuICogcGFzc2VkIHZlcmJhdGltIGludG8gYE9ic2VydmFiaWxpdHkuY29uZmlnc1sqXS5yZXF1ZXN0Q29udGV4dEtleXNgLFxuICogc28gYW55IGtleSBsaXN0ZWQgaGVyZSBpcyByZWFkIGZyb20gYFJlcXVlc3RDb250ZXh0YCBhdCB0cmFjZVxuICogc3RhcnQgYW5kIGF0dGFjaGVkIGFzIHNjYWxhciBzcGFuIG1ldGFkYXRhLiBLZWVwIHRoZSBzZXQgdG8gcGxhaW5cbiAqIHNjYWxhcnMgLSBuZXZlciBpbmNsdWRlIHtAbGluayBNQVNUUkFfVVNFUl9LRVl9IChpdCBjYXJyaWVzIHRoZVxuICogZnVsbCBBcHBLaXQgZXhlY3V0aW9uIGNvbnRleHQgd2l0aCBhIGBXb3Jrc3BhY2VDbGllbnRgIHJlZmVyZW5jZSkuXG4gKlxuICogT3JkZXIgaXMgcHVyZWx5IGNvc21ldGljOyBNYXN0cmEgZGUtZHVwZXMgaW50ZXJuYWxseS5cbiAqL1xuZXhwb3J0IGNvbnN0IFRSQUNFX1JFUVVFU1RfQ09OVEVYVF9LRVlTOiByZWFkb25seSBzdHJpbmdbXSA9IFtcbiAgTUFTVFJBX1JFU09VUkNFX0lEX0tFWSxcbiAgTUFTVFJBX1RIUkVBRF9JRF9LRVksXG4gIE1BU1RSQV9SRVFVRVNUX0lEX0tFWSxcbiAgTUFTVFJBX1VTRVJfTkFNRV9LRVksXG4gIE1BU1RSQV9VU0VSX0VNQUlMX0tFWSxcbiAgLy8gTW9kZWwgb3ZlcnJpZGUga2V5IGlzIG93bmVkIGJ5IGBzZXJ2aW5nLnRzYDsgc3BlbGxlZCBpbmxpbmUgaGVyZVxuICAvLyBzbyB0aGlzIG1vZHVsZSBzdGF5cyBsZWFmLWxldmVsIChubyBjeWNsZXMgd2l0aCBgc2VydmluZy50c2ApLlxuICBcIm1hc3RyYV9fbW9kZWxfb3ZlcnJpZGVcIixcbl07XG5cbi8qKiBBcHBLaXQgZXhlY3V0aW9uIGNvbnRleHQgcGx1cyB0aGUgY2Fub25pY2FsIHVzZXIgaWQuICovXG5leHBvcnQgaW50ZXJmYWNlIFVzZXIge1xuICBpZDogc3RyaW5nO1xuICBleGVjdXRpb25Db250ZXh0OiBhcHBraXQuRXhlY3V0aW9uQ29udGV4dExpa2U7XG59XG5cbi8qKlxuICogQ2Fub25pY2FsIGlkZW50aXR5IGZvciBhbiBBcHBLaXQgZXhlY3V0aW9uIGNvbnRleHQ6IHRoZSBPQk8gdXNlciBpZCBvbiBhXG4gKiB1c2VyLXNjb3BlZCBjYWxsLCB0aGUgc2VydmljZSBwcmluY2lwYWwgaWQgb3RoZXJ3aXNlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZXhlY3V0aW9uQ29udGV4dFVzZXJJZChjb250ZXh0OiBhcHBraXQuRXhlY3V0aW9uQ29udGV4dExpa2UpOiBzdHJpbmcge1xuICByZXR1cm4gXCJ1c2VySWRcIiBpbiBjb250ZXh0ID8gY29udGV4dC51c2VySWQgOiBjb250ZXh0LnNlcnZpY2VVc2VySWQ7XG59XG5cbi8qKlxuICogV2hvIGEgdHVybiBpcyBBVFRSSUJVVEVEIHRvLCB3aGljaCBpcyBub3QgYWx3YXlzIHdob3NlIERhdGFicmlja3MgY3JlZGVudGlhbFxuICogcnVucyBpdC4gQW4gT0JPIGNvbnRleHQncyBvd24gdXNlciBpZCBpcyBhdXRob3JpdGF0aXZlLiBVbmRlciB0aGUgc2VydmljZVxuICogcHJpbmNpcGFsLCBldmVyeSBjYWxsZXIgc2hhcmVzIG9uZSBjcmVkZW50aWFsLCBzbyB0aGUgZm9yd2FyZGVkIHVzZXIgaWQgaXNcbiAqIHdoYXQga2VlcHMgbWVtb3J5IHRocmVhZHMgYW5kIHBlci11c2VyIGNhY2hlIG5hbWVzcGFjZXMgZGlzdGluY3Q7IHRoZSBzZXJ2aWNlXG4gKiBwcmluY2lwYWwgaWQgaXMgdGhlIGZsb29yIHdoZW4gbm8gdXNlciB3YXMgZm9yd2FyZGVkLlxuICpcbiAqIFRoaXMgcnVsZSBoYXMgdG8gYmUgaWRlbnRpY2FsIGV2ZXJ5d2hlcmUgYSBjYWNoZSBrZXkgaXMgYnVpbHQsIHNvIGJvdGggdGhlXG4gKiB3cml0ZSBzaWRlICh0aGUgYFJlcXVlc3RDb250ZXh0YCB1c2VyIHN0YW1wZWQgYnkgYHN0YW1wUmVxdWVzdENvbnRleHRVc2VyYClcbiAqIGFuZCB0aGUgcmVhZCBzaWRlICh0aGUgcGx1Z2luJ3Mgb3duIEFwcEtpdCByb3V0ZXMsIHdoaWNoIGhhdmUgYSByZXF1ZXN0IGJ1dFxuICogbm8gYFJlcXVlc3RDb250ZXh0YCkgZGVyaXZlIHRoZWlyIGtleSBmcm9tIHRoaXMgb25lIGZ1bmN0aW9uLiBXaGVuIHRoZSB0d29cbiAqIGRpc2FncmVlZCwgYSBjaGFydCB3cml0dGVuIHVuZGVyIHRoZSBmb3J3YXJkZWQgdXNlciBpZCB3YXMgcmVhZCBiYWNrIHVuZGVyXG4gKiB0aGUgc2VydmljZSBwcmluY2lwYWwgaWQgYW5kIHRoZSBlbWJlZCByb3V0ZSBhbnN3ZXJlZCA0MDQsIHdoaWNoIHRoZSBjaGF0IFVJXG4gKiByZW5kZXJzIGFzIGFuIGV4cGlyZWQgY2hhcnQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhdHRyaWJ1dGVkVXNlcklkKFxuICBleGVjdXRpb25Db250ZXh0OiBhcHBraXQuRXhlY3V0aW9uQ29udGV4dExpa2UsXG4gIGZvcndhcmRlZFVzZXJJZD86IHN0cmluZyxcbik6IHN0cmluZyB7XG4gIGlmIChcImlzVXNlckNvbnRleHRcIiBpbiBleGVjdXRpb25Db250ZXh0KSByZXR1cm4gZXhlY3V0aW9uQ29udGV4dFVzZXJJZChleGVjdXRpb25Db250ZXh0KTtcbiAgcmV0dXJuIGZvcndhcmRlZFVzZXJJZCA/PyBleGVjdXRpb25Db250ZXh0VXNlcklkKGV4ZWN1dGlvbkNvbnRleHQpO1xufVxuXG4vKipcbiAqIElkZW50aXR5IGV2ZXJ5IHBlci11c2VyIGNhY2hlIGVudHJ5IGlzIG5hbWVzcGFjZWQgdW5kZXIsIHNvIGFuIE9CTyByZXN1bHRcbiAqIGNhbm5vdCBiZSByZWFkIGJhY2sgYnkgYW5vdGhlciBjYWxsZXIuXG4gKlxuICogUHJlZmVycyB0aGUge0BsaW5rIFVzZXJ9IHRoYXQge0BsaW5rIE1hc3RyYVNlcnZlcn0gc3RhbXBzIG9uIHRoZSByZXF1ZXN0XG4gKiBjb250ZXh0LCB3aG9zZSBpZCBhbHJlYWR5IGZvbGxvd3Mge0BsaW5rIGF0dHJpYnV0ZWRVc2VySWR9LiBUaGUgTUNQIHRyYW5zcG9ydFxuICogcm91dGVzIGRvIG5vdCB0aHJlYWQgdGhhdCBjb250ZXh0IGludG8gdG9vbCBleGVjdXRpb24sIHNvIHRob3NlIGZhbGwgYmFjayB0b1xuICogdGhlIGFtYmllbnQgZXhlY3V0aW9uIGNvbnRleHQgKHRoZSBhY3RpdmUgT0JPIHNjb3BlLCBvciB0aGUgc2VydmljZVxuICogcHJpbmNpcGFsKS4gQSBjYWxsZXIgaG9sZGluZyBhbiBleHByZXNzIHJlcXVlc3Qgc2hvdWxkIGJ1aWxkIGl0cyBrZXkgZnJvbVxuICoge0BsaW5rIGF0dHJpYnV0ZWRVc2VySWR9IGluc3RlYWQsIHNvIHRoZSBmb3J3YXJkZWQgdXNlciBpcyBub3QgbG9zdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVVc2VyS2V5KHJlcXVlc3RDb250ZXh0PzogUmVxdWVzdENvbnRleHQpOiBzdHJpbmcge1xuICBjb25zdCB1c2VyID0gcmVxdWVzdENvbnRleHQ/LmdldChNQVNUUkFfVVNFUl9LRVkpIGFzIFVzZXIgfCB1bmRlZmluZWQ7XG4gIHJldHVybiB1c2VyPy5pZCA/PyBleGVjdXRpb25Db250ZXh0VXNlcklkKGdldEV4ZWN1dGlvbkNvbnRleHQoKSk7XG59XG5cbi8qKiBQZ1ZlY3RvciBjb25maWcgd2l0aCBhbiBvcHRpb25hbCBNYXN0cmEgc3RvcmUgaWQuICovXG5leHBvcnQgdHlwZSBNYXN0cmFNZW1vcnlDb25maWcgPSBQZ1ZlY3RvckNvbmZpZyAmIHtcbiAgaWQ/OiBzdHJpbmc7XG59O1xuXG4vKiogTWFzdHJhIG5hdGl2ZSB3b3Jrc3BhY2Ugc2tpbGwtc2VhcmNoIGNvbmZpZ3VyYXRpb24uICovXG5leHBvcnQgaW50ZXJmYWNlIE1hc3RyYVdvcmtzcGFjZVNraWxsc0NvbmZpZyB7XG4gIC8qKiBNYXhpbXVtIHNraWxsIG1hdGNoZXMgcmV0dXJuZWQgYnkgb25lIHNlYXJjaC4gRGVmYXVsdHMgdG8gNS4gKi9cbiAgdG9wSz86IG51bWJlcjtcbiAgLyoqIE1pbmltdW0gQk0yNSByZWxldmFuY2Ugc2NvcmUuIERlZmF1bHRzIHRvIDAuMS4gKi9cbiAgbWluU2NvcmU/OiBudW1iZXI7XG4gIC8qKiBMb2FkZWQtc2tpbGwgdGhyZWFkLXN0YXRlIFRUTCBpbiBtaWxsaXNlY29uZHMuIERlZmF1bHRzIHRvIG9uZSBob3VyLiAqL1xuICB0dGxNcz86IG51bWJlcjtcbn1cblxuLyoqIE5hdGl2ZSBNYXN0cmEgQ29kZSBNb2RlIHNldHRpbmdzIGZvciBzYW5kYm94ZWQgbXVsdGktdG9vbCBvcmNoZXN0cmF0aW9uLiAqL1xuZXhwb3J0IGludGVyZmFjZSBNYXN0cmFDb2RlTW9kZUNvbmZpZyB7XG4gIC8qKiBHZW5lcmF0ZWQgb3JjaGVzdHJhdGlvbiB0b29sIGlkLiBEZWZhdWx0cyB0byBgZXhlY3V0ZV90eXBlc2NyaXB0YC4gKi9cbiAgaWQ/OiBzdHJpbmc7XG4gIC8qKiBNYXhpbXVtIG9yY2hlc3RyYXRpb24gcHJvZ3JhbSBydW50aW1lIGluIG1pbGxpc2Vjb25kcy4gRGVmYXVsdHMgdG8gMzAgc2Vjb25kcy4gKi9cbiAgdGltZW91dD86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBGaW5lLWdyYWluZWQgY29udHJvbCBmb3IgdGhlIG9wdGlvbmFsIE1DUCBzZXJ2ZXIgZXhwb3N1cmVcbiAqICh7QGxpbmsgTWFzdHJhUGx1Z2luQ29uZmlnLm1jcH0pLiBFdmVyeSBmaWVsZCBpcyBvcHRpb25hbDsgdGhlIG9iamVjdFxuICogZm9ybSBvbmx5IG5lZWRzIHRvIHNldCB3aGF0IGRpZmZlcnMgZnJvbSB0aGUgZGVmYXVsdHMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTWFzdHJhTWNwQ29uZmlnIHtcbiAgLyoqXG4gICAqIFNlcnZlciBpZCB1c2VkIGluIHRoZSByb3V0ZSBwYXRoIChgL21jcC88c2VydmVySWQ+Ly4uLmApIGFuZCBhcyB0aGVcbiAgICogTUNQIHJlZ2lzdHJ5IGlkLiBEZWZhdWx0cyB0byB0aGUgcGx1Z2luJ3MgcmVnaXN0ZXJlZCBuYW1lLlxuICAgKi9cbiAgc2VydmVySWQ/OiBzdHJpbmc7XG4gIC8qKiBEaXNwbGF5IG5hbWUgYWR2ZXJ0aXNlZCBvdmVyIE1DUC4gRGVmYXVsdHMgdG8gYFwiPGRpc3BsYXlOYW1lPiBNQ1BcImAuICovXG4gIG5hbWU/OiBzdHJpbmc7XG4gIC8qKiBTZW1hbnRpYyB2ZXJzaW9uIGFkdmVydGlzZWQgb3ZlciBNQ1AuIERlZmF1bHRzIHRvIGBcIjEuMC4wXCJgLiAqL1xuICB2ZXJzaW9uPzogc3RyaW5nO1xuICAvKiogT3B0aW9uYWwgaHVtYW4tcmVhZGFibGUgZGVzY3JpcHRpb24gYWR2ZXJ0aXNlZCBvdmVyIE1DUC4gKi9cbiAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBFeHBvc2UgZXZlcnkgcmVnaXN0ZXJlZCBhZ2VudCBhcyBhbiBgYXNrXzxhZ2VudElkPmAgTUNQIHRvb2wuXG4gICAqIERlZmF1bHRzIHRvIGB0cnVlYCAtIHRoaXMgaXMgdGhlIFwibGV2ZXJhZ2UgdGhlIE1hc3RyYSBhZ2VudHMgb3ZlclxuICAgKiBNQ1BcIiBiZWhhdmlvciBtb3N0IGNhbGxlcnMgd2FudC5cbiAgICovXG4gIGFnZW50cz86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBBbHNvIGV4cG9zZSB0aGUgcGx1Z2luJ3MgYW1iaWVudCB0b29scyAodGhlIGJ1aWx0LWluIGByZW5kZXJfZGF0YWBcbiAgICogcGx1cyBhbnl0aGluZyBpbiBgY29uZmlnLnRvb2xzYCkgYXMgTUNQIHRvb2xzLiBEZWZhdWx0cyB0byBgZmFsc2VgOlxuICAgKiB0aGUgYW1iaWVudCB0b29scyBhc3N1bWUgYW4gaW4tcHJvY2VzcyBjaGF0IHR1cm4gKHRoZXkgcHVibGlzaFxuICAgKiB3cml0ZXIgZXZlbnRzIHRoZSBjaGF0IFVJIGNvbnN1bWVzKSwgc28gdGhleSBhcmVuJ3QgdXNlZnVsIHRvIGFcbiAgICogc3RhbmRhbG9uZSBNQ1AgY2xpZW50LiBUdXJuIHRoaXMgb24gb25seSB3aGVuIHRob3NlIHRvb2xzIGFyZSBzYWZlXG4gICAqIHRvIGNhbGwgb3V0LW9mLWJhbmQuXG4gICAqL1xuICB0b29scz86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBFeHRyYSB0b29scyB0byBleHBvc2Ugb3ZlciBNQ1AgYmV5b25kIHRoZSBhZ2VudCAvIGFtYmllbnQgc2V0cy5cbiAgICogVXNlIHRoaXMgZm9yIHRvb2xzIHdyaXR0ZW4gc3BlY2lmaWNhbGx5IGZvciBNQ1AgY29uc3VtZXJzLlxuICAgKi9cbiAgZXh0cmFUb29scz86IE1hc3RyYVRvb2xzO1xufVxuXG4vKiogQ29uZmlndXJhdGlvbiBhY2NlcHRlZCBieSB0aGUgTWFzdHJhIEFwcEtpdCBwbHVnaW4uICovXG5leHBvcnQgaW50ZXJmYWNlIE1hc3RyYVBsdWdpbkNvbmZpZyBleHRlbmRzIEJhc2VQbHVnaW5Db25maWcge1xuICAvKipcbiAgICogUnVuIHR1cm5zIHRocm91Z2ggTWFzdHJhJ3MgZXZlbnRlZCBkdXJhYmxlIGFnZW50IHNvIGV4ZWN1dGlvbiBjb250aW51ZXNcbiAgICogYWZ0ZXIgYSBicm93c2VyIGRpc2Nvbm5lY3QgYW5kIGNhbiBiZSBvYnNlcnZlZCBhZ2FpbiBieSBydW4gaWQuIERlZmF1bHRzXG4gICAqIHRvIGB0cnVlYC5cbiAgICovXG4gIGJhY2tncm91bmRUdXJucz86IGJvb2xlYW47XG4gIC8qKiBBSSBTREsgcHJvdmlkZXItb3B0aW9ucyBuYW1lc3BhY2UuIERlZmF1bHRzIHRvIGBcIm9wZW5haVwiYDsgbm8gZW52IGZhbGxiYWNrLiAqL1xuICBwcm92aWRlcklkPzogc3RyaW5nO1xuICAvKipcbiAgICogUG9zdGdyZXNTdG9yZSBmb3IgTWFzdHJhIHRocmVhZHMvbWVzc2FnZXMuIGB0cnVlYCByZXVzZXMgdGhlXG4gICAqIGBsYWtlYmFzZWAgcGx1Z2luJ3MgcG9vbDsgYW4gb2JqZWN0IG9wZW5zIGEgZGVkaWNhdGVkIHN0b3JlLlxuICAgKi9cbiAgc3RvcmFnZT86IGJvb2xlYW4gfCBQb3N0Z3Jlc1N0b3JlQ29uZmlnO1xuICAvKipcbiAgICogUGdWZWN0b3Igc3RvcmUgZm9yIE1hc3RyYSBtZW1vcnkgcmVjYWxsLiBgdHJ1ZWAgcmV1c2VzIHRoZVxuICAgKiBgbGFrZWJhc2VgIHBsdWdpbidzIHBvb2w7IGFuIG9iamVjdCBvcGVucyBhIGRlZGljYXRlZCBzdG9yZS5cbiAgICovXG4gIG1lbW9yeT86IGJvb2xlYW4gfCBNYXN0cmFNZW1vcnlDb25maWc7XG4gIC8qKlxuICAgKiBFeHBvc2UgZXhlY3V0YWJsZSB0b29scyBmcm9tIGVhY2ggYWdlbnQgZGVmaW5pdGlvbiB0aHJvdWdoIG5hdGl2ZSBNYXN0cmFcbiAgICogQ29kZSBNb2RlLiBEZWZhdWx0cyBvbiB3aGVuZXZlciB0aGUgYWdlbnQgaGFzIGV4ZWN1dGFibGUgdG9vbHMuIFRoZSBwbHVnaW5cbiAgICogc2VsZWN0cyBNYXN0cmEncyBpc29sYXRlZC12bSB0cmFuc3BvcnQgb25jZSBkdXJpbmcgc3RhcnR1cCBhbmQgZmFsbHMgYmFja1xuICAgKiB0byBNYXN0cmEgUXVpY2tKUyB3aGVuIHRoZSBuYXRpdmUgdHJhbnNwb3J0IGlzIHVuYXZhaWxhYmxlLiBTZXQgYGZhbHNlYCB0b1xuICAgKiBvcHQgb3V0LlxuICAgKi9cbiAgY29kZU1vZGU/OiBib29sZWFuIHwgTWFzdHJhQ29kZU1vZGVDb25maWc7XG4gIC8qKlxuICAgKiBTYW5kYm94IGZvciBhdXRvLWNyZWF0ZWQgYWdlbnQgd29ya3NwYWNlcy4gRGVmYXVsdHMgdG8gTW9udHkuIGBmYWxzZWBcbiAgICogZGlzYWJsZXMgY29tbWFuZCBleGVjdXRpb247IGB0cnVlYCwgYFwiZGF0YWJyaWNrc1wiYCwgb3IgYW4gb2JqZWN0XG4gICAqIHNlbGVjdHMvY29uZmlndXJlcyBEYXRhYnJpY2tzIFNhbmRib3guIEFuIGFnZW50IHdpdGggYW4gZXhwbGljaXQgY3VzdG9tXG4gICAqIGB3b3Jrc3BhY2VgIGtlZXBzIHRoYXQgd29ya3NwYWNlIGFuZCBpdHMgc2FuZGJveC5cbiAgICovXG4gIHNhbmRib3g/OiBib29sZWFuIHwgXCJkYXRhYnJpY2tzXCIgfCBcIm1vbnR5XCIgfCBEYXRhYnJpY2tzV29ya3NwYWNlU2FuZGJveE9wdGlvbnM7XG4gIC8qKiBBZGQgdXNlci1zY29wZWQgYC90bXBgIG9ubHkgd2hlbiBubyBjb25maWd1cmVkIHdvcmtzcGFjZSBwYXRoIG1vdW50cyB3cml0YWJsZS4gKi9cbiAgd29ya3NwYWNlRmFsbGJhY2tUb1RtcD86IGJvb2xlYW47XG4gIC8qKiBOYXRpdmUgTWFzdHJhIHdvcmtzcGFjZSB0b29sIGF2YWlsYWJpbGl0eSwgYXBwcm92YWwsIGFuZCBob29rIGNvbmZpZ3VyYXRpb24uICovXG4gIHdvcmtzcGFjZVRvb2xzPzogV29ya3NwYWNlVG9vbHNDb25maWc7XG4gIC8qKlxuICAgKiBVc2UgTWFzdHJhJ3MgbmF0aXZlIHdvcmtzcGFjZSBza2lsbCBtYW5hZ2VyLiBEZWZhdWx0cyB0byB0cnVlLiBQYXNzIGFuXG4gICAqIG9iamVjdCB0byB0dW5lIG9uLWRlbWFuZCBkaXNjb3ZlcnkgYW5kIGxvYWRlZC1za2lsbCBzdGF0ZS5cbiAgICovXG4gIHdvcmtzcGFjZVNraWxscz86IGJvb2xlYW4gfCBNYXN0cmFXb3Jrc3BhY2VTa2lsbHNDb25maWc7XG4gIC8qKlxuICAgKiBDb2RlLWRlZmluZWQgYWdlbnRzLiBBY2NlcHRzIHRocmVlIHNoYXBlcyBmb3IgY29udmVuaWVuY2U6XG4gICAqXG4gICAqIC0gKipSZWNvcmQqKjogYHsgYW5hbHlzdDogZGVmLCBoZWxwZXI6IGRlZiB9YCAtIGtleXMgYmVjb21lIHRoZVxuICAgKiAgIHJlZ2lzdGVyZWQgaWRzIGFuZCB0aGUgZmlyc3Qga2V5IGlzIHRoZSBkZWZhdWx0LlxuICAgKiAtICoqU2luZ2xlIGRlZmluaXRpb24qKjogYGRlZmAgLSByZWdpc3RlcmVkIHVuZGVyXG4gICAqICAgYHNsdWdpZnkoZGVmLm5hbWUpYCAob3IgYFwiZGVmYXVsdFwiYCB3aGVuIGBuYW1lYCBpcyBvbWl0dGVkKSBhbmRcbiAgICogICBhdXRvbWF0aWNhbGx5IG1hcmtlZCBhcyB0aGUgZGVmYXVsdCBhZ2VudC5cbiAgICogLSAqKkFycmF5Kio6IGBbZGVmMSwgZGVmMl1gIC0gZWFjaCByZWdpc3RlcmVkIHVuZGVyXG4gICAqICAgYHNsdWdpZnkoZGVmLm5hbWUpYCAob3IgYGFnZW50XyR7aX1gIHdoZW4gYG5hbWVgIGlzIG9taXR0ZWQpO1xuICAgKiAgIHRoZSBmaXJzdCBlbnRyeSBpcyB0aGUgZGVmYXVsdC5cbiAgICpcbiAgICogRWFjaCBlbnRyeSBiZWNvbWVzIGEgTWFzdHJhIGBBZ2VudGAgcmVhY2hhYmxlIGF0XG4gICAqIGAvYXBpLzxwbHVnaW4+L3JvdXRlL2NoYXQvPGlkPmAgKHRoZSBjaGF0IHJvdXRlIGFsc28gbWF0Y2hlc1xuICAgKiBgOmFnZW50SWRgKS4gV2hlbiBgYWdlbnRzYCBpcyBvbWl0dGVkIGVudGlyZWx5LCB0aGUgcGx1Z2luXG4gICAqIHJlZ2lzdGVycyBhIHNpbmdsZSBidWlsdC1pbiBgZGVmYXVsdGAgYW5hbHlzdCBzbyB0aGUgYmFyZVxuICAgKiBgbWFzdHJhKClgIGNhbGwgc3RpbGwgbW91bnRzIGEgd29ya2luZyBjaGF0IGVuZHBvaW50LlxuICAgKlxuICAgKiBAZXhhbXBsZSBTaW5nbGUtYWdlbnQgc2hvcnRoYW5kXG4gICAqIGBgYHRzXG4gICAqIG1hc3RyYSh7XG4gICAqICAgYWdlbnRzOiBjcmVhdGVBZ2VudCh7IGluc3RydWN0aW9uczogXCIuLi5cIiB9KSxcbiAgICogfSk7XG4gICAqIGBgYFxuICAgKlxuICAgKiBAZXhhbXBsZSBBcnJheVxuICAgKiBgYGB0c1xuICAgKiBtYXN0cmEoe1xuICAgKiAgIGFnZW50czogW1xuICAgKiAgICAgY3JlYXRlQWdlbnQoeyBuYW1lOiBcImFuYWx5c3RcIiwgaW5zdHJ1Y3Rpb25zOiBcIi4uLlwiIH0pLFxuICAgKiAgICAgY3JlYXRlQWdlbnQoeyBuYW1lOiBcImhlbHBlclwiLCBpbnN0cnVjdGlvbnM6IFwiLi4uXCIgfSksXG4gICAqICAgXSxcbiAgICogfSk7XG4gICAqIGBgYFxuICAgKlxuICAgKiBAZXhhbXBsZSBSZWNvcmQgKGV4cGxpY2l0IGlkcylcbiAgICogYGBgdHNcbiAgICogbWFzdHJhKHtcbiAgICogICBhZ2VudHM6IHtcbiAgICogICAgIGFuYWx5c3Q6IGNyZWF0ZUFnZW50KHsgaW5zdHJ1Y3Rpb25zOiBcIi4uLlwiIH0pLFxuICAgKiAgICAgaGVscGVyOiBjcmVhdGVBZ2VudCh7IGluc3RydWN0aW9uczogXCIuLi5cIiB9KSxcbiAgICogICB9LFxuICAgKiAgIGRlZmF1bHRBZ2VudDogXCJhbmFseXN0XCIsXG4gICAqIH0pO1xuICAgKiBgYGBcbiAgICovXG4gIGFnZW50cz86XG4gICAgfCBSZWNvcmQ8c3RyaW5nLCBBbnlNYXN0cmFBZ2VudERlZmluaXRpb24+XG4gICAgfCBBbnlNYXN0cmFBZ2VudERlZmluaXRpb25cbiAgICB8IEFueU1hc3RyYUFnZW50RGVmaW5pdGlvbltdO1xuICAvKipcbiAgICogQW1iaWVudCB0b29scyBzcHJlYWQgaW50byBldmVyeSByZWdpc3RlcmVkIGFnZW50J3MgdG9vbHMgcmVjb3JkO1xuICAgKiBwZXItYWdlbnQgdG9vbHMgd2luIG9uIGtleSBjb2xsaXNpb24uIFVzZSBmb3IgYSBzbWFsbCBzaGFyZWRcbiAgICogbGlicmFyeTsgZm9yIHBlci1hZ2VudCB0b29scyBzZXQgYGFnZW50c1tpZF0udG9vbHNgIGluc3RlYWQuXG4gICAqL1xuICB0b29scz86IE1hc3RyYVRvb2xzO1xuICAvKipcbiAgICogQWdlbnQgaWQgdXNlZCB3aGVuIHRoZSBjbGllbnQgZG9lc24ndCBzcGVjaWZ5IG9uZSAodGhlIGJhcmUsXG4gICAqIHVuLXN1ZmZpeGVkIGhpc3RvcnkgLyBzdWdnZXN0aW9ucyByb3V0ZXMgcmVzb2x2ZSB0byBpdCkuXG4gICAqIERlZmF1bHRzIHRvIHRoZSBmaXJzdCBrZXkgaW4gYGFnZW50c2AgKG9yIGBcImRlZmF1bHRcImAgd2hlblxuICAgKiBgYWdlbnRzYCBpcyBvbWl0dGVkKS4gTXVzdCBtYXRjaCBhbiBpZCBpbiBgYWdlbnRzYCB3aGVuIGJvdGggYXJlXG4gICAqIHNldDsgYSBtaXNtYXRjaCB0aHJvd3MgYXQgc2V0dXAgd2l0aCB0aGUgYXZhaWxhYmxlIGNhbmRpZGF0ZXMuXG4gICAqL1xuICBkZWZhdWx0QWdlbnQ/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBQbHVnaW4tbGV2ZWwgZGVmYXVsdCBtb2RlbCBhcHBsaWVkIHRvIGV2ZXJ5IGFnZW50IHRoYXQgb21pdHMgaXRzXG4gICAqIG93biBgbW9kZWxgLiBNaXJyb3JzIEFwcEtpdCdzIGBhZ2VudHMoeyBkZWZhdWx0TW9kZWwgfSlgLlxuICAgKlxuICAgKiAtIGBzdHJpbmdgOiBzaG9ydGhhbmQgZm9yIFwidXNlIHRoZSBPQk8gYXV0by1yZXNvbHZlciBidXQgc3dhcCB0aGVcbiAgICogICBgbW9kZWxJZGBcIiAoZS5nLiBgXCJkYXRhYnJpY2tzLWNsYXVkZS1zb25uZXQtNC02XCJgKS5cbiAgICogLSBBbnkgb3RoZXIgTWFzdHJhIGBEeW5hbWljQXJndW1lbnQ8TWFzdHJhTW9kZWxDb25maWc+YDogcGFzc2VkXG4gICAqICAgdGhyb3VnaCB2ZXJiYXRpbS4gVXNlIHRoaXMgd2hlbiB5b3UgbmVlZCBmdWxsIGNvbnRyb2wgb3ZlciBhdXRoXG4gICAqICAgb3IgYHByb3ZpZGVySWRgLlxuICAgKlxuICAgKiBSZXNvbHV0aW9uIG9yZGVyIHBlciBhZ2VudDogYGRlZi5tb2RlbGAg4oaSIGBkZWZhdWx0TW9kZWxgIOKGklxuICAgKiBgREFUQUJSSUNLU19TRVJWSU5HX0VORFBPSU5UX05BTUVgIOKGkiBidWlsdC1pbiBgL3NlcnZpbmctZW5kcG9pbnRzYFxuICAgKiByZXNvbHZlci5cbiAgICovXG4gIGRlZmF1bHRNb2RlbD86IEFnZW50Q29uZmlnW1wibW9kZWxcIl0gfCBzdHJpbmc7XG4gIC8qKlxuICAgKiBGdXp6eS1tYXRjaCBsb29zZSBtb2RlbCBuYW1lcyAoYFwiY2xhdWRlIHNvbm5ldFwiYCkgYWdhaW5zdCB0aGUgd29ya3NwYWNlJ3NcbiAgICogTW9kZWwgU2VydmluZyBlbmRwb2ludHMuIERlZmF1bHRzIHRvIGB0cnVlYDsgbm8gZW52IGZhbGxiYWNrLlxuICAgKlxuICAgKiBTZXQgYGZhbHNlYCB0byByZXF1aXJlIGV4YWN0IGVuZHBvaW50IG5hbWVzIGV2ZXJ5d2hlcmUuXG4gICAqL1xuICBtb2RlbEZ1enp5TWF0Y2g/OiBib29sZWFuO1xuICAvKipcbiAgICogRnVzZS5qcyBzY29yZSB0aHJlc2hvbGQgZm9yIHRoZSBmdXp6eSBtYXRjaGVyLCAwIChleGFjdCkgdG8gMSAoYW55dGhpbmcpLlxuICAgKiBEZWZhdWx0cyB0byBgMC40YDsgbm8gZW52IGZhbGxiYWNrLlxuICAgKlxuICAgKiBMb3dlciB2YWx1ZXMgcmVqZWN0IGxvb3NlIG1hdGNoZXM7IHJhaXNlIGl0IGlmIHlvdSBoYXZlIGEgc3ByYXdsaW5nXG4gICAqIGVuZHBvaW50IGNhdGFsb2d1ZSB3aXRoIHNpbWlsYXItbG9va2luZyBuYW1lcy5cbiAgICovXG4gIG1vZGVsRnV6enlUaHJlc2hvbGQ/OiBudW1iZXI7XG4gIC8qKlxuICAgKiBUVEwgZm9yIHRoZSBpbi1tZW1vcnkgc2VydmluZy1lbmRwb2ludHMgbGlzdCBjYWNoZSwgaW4gbWlsbGlzZWNvbmRzLlxuICAgKiBEZWZhdWx0cyB0byA1IG1pbnV0ZXM7IG5vIGVudiBmYWxsYmFjay5cbiAgICpcbiAgICogVGhlIGNhY2hlIGlzIHBlciB3b3Jrc3BhY2UgaG9zdCBhbmQgc2hhcmVkIGFjcm9zcyB1c2VyczsgY29uY3VycmVudFxuICAgKiBjYWxsZXJzIGNvYWxlc2NlIG9uIGEgc2luZ2xlIGluLWZsaWdodCBmZXRjaC5cbiAgICovXG4gIG1vZGVsQ2FjaGVUdGxNcz86IG51bWJlcjtcbiAgLyoqXG4gICAqIExldCBjbGllbnRzIHBpY2sgdGhlIGJhY2tpbmcgZW5kcG9pbnQgcGVyIHJlcXVlc3QuIERlZmF1bHRzIHRvIGB0cnVlYDtcbiAgICogbm8gZW52IGZhbGxiYWNrLlxuICAgKlxuICAgKiBSZWFkcyB0aGUgYFgtTWFzdHJhLU1vZGVsYCBoZWFkZXIsIHRoZSBgP21vZGVsPWAgcXVlcnkgc3RyaW5nLCBvciBhXG4gICAqIGBtb2RlbGAgYm9keSBmaWVsZCwgaW4gdGhhdCBvcmRlci4gRGlzYWJsZSB3aGVuIHJ1bm5pbmcgbXVsdGktdGVuYW50XG4gICAqIHdoZXJlIHVudHJ1c3RlZCBjbGllbnRzIHNob3VsZG4ndCBjaG9vc2UgdGhlIGVuZHBvaW50LlxuICAgKi9cbiAgbW9kZWxPdmVycmlkZT86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBQcmlvcml0eS1vcmRlcmVkIGxpc3Qgb2YgZW5kcG9pbnQgbmFtZXMgdHJpZWQgKmZpcnN0KiB3aGVuIG5vXG4gICAqIGFnZW50IC8gcGx1Z2luIC8gZW52IC8gcmVxdWVzdC1vdmVycmlkZSBtb2RlbCBpZCBpcyBzZXQsIGFoZWFkIG9mXG4gICAqIHRoZSBkeW5hbWljIHNjb3JlLWNsYXNzaWZpZWQgY2F0YWxvZ3VlLiBUaGUgcmVzb2x2ZXIgcGlja3MgdGhlXG4gICAqIGZpcnN0IGlkIHRoYXQgaXMgYWN0dWFsbHkgcHJlc2VudCBpbiB0aGUgd29ya3NwYWNlJ3NcbiAgICogYC9zZXJ2aW5nLWVuZHBvaW50c2AgbGlzdGluZy5cbiAgICpcbiAgICogV2hlbiB1bnNldCwgcmVzb2x1dGlvbiBpcyBkcml2ZW4gYnkgdGhlIGxpdmUgRm91bmRhdGlvbiBNb2RlbCBBUElcbiAgICogYHF1YWxpdHlgIC8gYHNwZWVkYCAvIGBjb3N0YCBzY29yZXM6IGVuZHBvaW50cyBhcmUgY2xhc3NpZmllZCBpbnRvXG4gICAqIGNoYXQgY2xhc3NlcyAoYGNsYXNzaWZ5RW5kcG9pbnRzYCkgYW5kIHdhbGtlZCBiZXN0LWZpcnN0XG4gICAqIChDaGF0VGhpbmtpbmcgLT4gQ2hhdEJhbGFuY2VkIC0+IENoYXRGYXN0KS4gVGhlIGF1dG9tYXRpYyBkZWZhdWx0IGlzXG4gICAqIGxpdmUtb25seSBhbmQgZmFpbHMgd2hlbiBubyBtYXRjaGluZyBlbmRwb2ludCBpcyBjdXJyZW50bHkgYXZhaWxhYmxlLlxuICAgKiBTZXQgdGhpcyB0byBwaW4gYSByZWd1bGF0ZWQgd29ya3NwYWNlIHRvIGFuIGFwcHJvdmVkIHN1YnNldCwgb3IgdG8gcHV0XG4gICAqIGN1c3RvbSBlbmRwb2ludHMgaW4gZnJvbnQgb2YgdGhlIGF1dG8tY2xhc3NpZmllZCBjYXRhbG9ndWUuXG4gICAqL1xuICBkZWZhdWx0TW9kZWxGYWxsYmFja3M/OiByZWFkb25seSBzdHJpbmdbXTtcbiAgLyoqXG4gICAqIFdoZW4gYHRydWVgIChkZWZhdWx0KSwgZXZlcnkgYWdlbnQgZ2V0cyBhIGJ1aWx0LWluIGlucHV0XG4gICAqIHByb2Nlc3NvciB0aGF0IHN0cmlwcyBgY2hhcnRJZGAgZmllbGRzIGZyb20gcHJpb3IgYXNzaXN0YW50XG4gICAqIHRvb2wtaW52b2NhdGlvbiByZXN1bHRzIGJlZm9yZSB0aGV5IHJlYWNoIHRoZSBtb2RlbC4gVGhpc1xuICAgKiBwcmV2ZW50cyB0aGUgbW9kZWwgZnJvbSByZXVzaW5nIHR1cm4tc2NvcGVkIGNoYXJ0SWRzIGl0IHNlZXNcbiAgICogaW4gbWVtb3J5IHJlY2FsbCAod2hpY2ggd291bGQgbGVhdmUgYFtjaGFydDo8aWQ+XWAgbWFya2Vyc1xuICAgKiBwb2ludGluZyBhdCB3cml0ZXIgZXZlbnRzIHRoYXQgbm8gbG9uZ2VyIGV4aXN0KS5cbiAgICpcbiAgICogU2V0IHRvIGBmYWxzZWAgdG8gb3B0IG91dCAtIHVzZWZ1bCBpZiBhIG5vbi1kZWZhdWx0IGFnZW50XG4gICAqIG5lZWRzIGZ1bGwgdmlzaWJpbGl0eSBpbnRvIHByaW9yIGNoYXJ0SWRzIChlLmcuIGFuIGF1ZGl0XG4gICAqIGFnZW50IHJlYXNvbmluZyBhYm91dCBjaGFydCBsaW5lYWdlKS5cbiAgICovXG4gIHN0cmlwU3RhbGVDaGFydHM/OiBib29sZWFuO1xuICAvKipcbiAgICogU3R5bGUgZ3VhcmRyYWlscyBhcHBlbmRlZCB0byBldmVyeSBhZ2VudCdzIGBpbnN0cnVjdGlvbnNgIHRvIGN1cmJcbiAgICogY29tbW9uIExMTS1pc21zIChlbSBkYXNoZXMsIGVtb2ppcywgc3ljb3BoYW50aWMgb3BlbmVycywgdGhyb3dhd2F5XG4gICAqIGNsb3NlcnMsIGV4Y2Vzc2l2ZSBoZWRnaW5nKS5cbiAgICpcbiAgICogLSBgdW5kZWZpbmVkYCAoZGVmYXVsdCk6IHVzZSB0aGUgYnVpbHQtaW5cbiAgICogICBgREVGQVVMVF9TVFlMRV9JTlNUUlVDVElPTlNgIGZyb20gYGFnZW50cy50c2AuXG4gICAqIC0gYHN0cmluZ2A6IHJlcGxhY2UgdGhlIGRlZmF1bHQgd2l0aCB0aGUgc3VwcGxpZWQgYmxvY2suXG4gICAqIC0gYGZhbHNlYDogZGlzYWJsZSBlbnRpcmVseSAoYWdlbnRzIHNlZSBvbmx5IHRoZWlyIGJlc3Bva2VcbiAgICogICBgaW5zdHJ1Y3Rpb25zYCkuXG4gICAqXG4gICAqIEFwcGVuZGVkIChub3QgcHJlcGVuZGVkKSBzbyB0aGUgYWdlbnQncyByb2xlIGFuZCBydWxlcyBjb21lIGZpcnN0XG4gICAqIGFuZCB0aGUgc3R5bGUgYmxvY2sgbGVhbnMgb24gdGhlIG1vZGVsJ3MgcmVjZW5jeSBiaWFzLlxuICAgKi9cbiAgc3R5bGVJbnN0cnVjdGlvbnM/OiBzdHJpbmcgfCBmYWxzZTtcbiAgLyoqXG4gICAqIEdlbmllIHNwYWNlcyB0aGlzIHBsdWdpbidzIGFnZW50cyBjYW4gZGVsZWdhdGUgdG8uIE9uZSBNYXN0cmFcbiAgICogdG9vbCBpcyByZWdpc3RlcmVkIHBlciBhbGlhcyAoYGdlbmllYCBmb3IgdGhlIHdlbGwta25vd25cbiAgICogYGRlZmF1bHRgIGFsaWFzLCBgZ2VuaWVfPGFsaWFzPmAgb3RoZXJ3aXNlKS4gRWFjaCB0b29sIHNwaW5zXG4gICAqIHVwIGEgcGVyLXF1ZXN0aW9uIEdlbmllIHN1Yi1hZ2VudCB0aGF0IHJ1bnMgRGF0YWJyaWNrc1xuICAgKiBcImFnZW50IG1vZGVcIiBhZ2FpbnN0IHRoZSBzcGFjZSwgYnJvYWRjYXN0cyB3aXJlIGV2ZW50cyB0byB0aGVcbiAgICogVUksIGZldGNoZXMgc3RhdGVtZW50IHJvd3MgZm9yIG5vbi1lbXB0eSByZXN1bHRzLCBhbmQgcmV0dXJuc1xuICAgKiBhIGAoc3RyaW5nIHwgZGF0YSB8IGNoYXJ0KVtdYCBzdW1tYXJ5IHRoZSBob3N0IFVJIHJlbmRlcnNcbiAgICogaW5saW5lLlxuICAgKlxuICAgKiBFbnRyaWVzIGFjY2VwdCBlaXRoZXIgYSBmdWxsIHtAbGluayBHZW5pZVNwYWNlQ29uZmlnfSBvYmplY3RcbiAgICogb3IgYSBiYXJlIGBzcGFjZV9pZGAgc3RyaW5nIHdoZW4gbm8gZXh0cmFzIGFyZSBuZWVkZWQ6XG4gICAqXG4gICAqIGBgYHRzXG4gICAqIG1hc3RyYSh7XG4gICAqICAgZ2VuaWVTcGFjZXM6IHtcbiAgICogICAgIGRlZmF1bHQ6IFwiMDFlZjBkM2MwZTFiMWY0YThkMmMzZTRmNWE2YjdjOGRcIixcbiAgICogICAgIGZvcmVjYXN0czogeyBzcGFjZUlkOiBcIjAxZWYuLi5cIiwgaGludDogXCJ3ZWVrbHkgZGVtYW5kIGZvcmVjYXN0c1wiIH0sXG4gICAqICAgfSxcbiAgICogfSk7XG4gICAqIGBgYFxuICAgKlxuICAgKiBSZWFjaCB0aGUgc3BhY2VzIGZyb20gYW4gYWdlbnQncyBgdG9vbHMocGx1Z2lucylgIGNhbGxiYWNrIHZpYVxuICAgKiBgcGx1Z2lucy5nZW5pZT8udG9vbGtpdCgpYDsgdGhlIHJlc3VsdGluZyB0b29scyBhY2NlcHRcbiAgICogYHsgY29udGVudCwgY29udmVyc2F0aW9uSWQ/IH1gIGFuZCByZXR1cm4gYSBoeWRyYXRlZCBzdW1tYXJ5LlxuICAgKlxuICAgKiAqKkZhbGxiYWNrIGRpc2NvdmVyeSoqIChoaWdoZXN0IHByZWNlZGVuY2UgZmlyc3QpOiBpZiB0aGlzXG4gICAqIGZpZWxkIGlzIG9taXR0ZWQsIHRoZSBHZW5pZSBhZ2VudCBhbHNvIHBpY2tzIHVwIHNwYWNlcyBmcm9tXG4gICAqICgxKSB0aGUgQXBwS2l0IGBnZW5pZSh7IHNwYWNlczogeyAuLi4gfSB9KWAgcGx1Z2luIGluc3RhbmNlXG4gICAqIHdoZW4gcmVnaXN0ZXJlZCwgYW5kICgyKSB0aGUgYERBVEFCUklDS1NfR0VOSUVfU1BBQ0VfSURgXG4gICAqIGVudiB2YXIgKHJlZ2lzdGVyZWQgdW5kZXIgdGhlIGBkZWZhdWx0YCBhbGlhcykuIFRoaXMga2VlcHNcbiAgICogZXhpc3RpbmcgQXBwS2l0IGRlcGxveW1lbnRzIHdvcmtpbmcgd2l0aG91dCByZXN0YXRpbmcgdGhlXG4gICAqIHNwYWNlcyBjb25maWcgaW4gdHdvIHBsYWNlcy5cbiAgICovXG4gIGdlbmllU3BhY2VzPzogR2VuaWVTcGFjZXNDb25maWc7XG4gIC8qKlxuICAgKiBVc2UgdGhlIHN0cmVhbWluZyBHZW5pZSBBZ2VudCBNb2RlIEFQSSBmb3IgYGFza19nZW5pZWAuIERlZmF1bHRzIHRvIGB0cnVlYC5cbiAgICogU2V0IGBmYWxzZWAgdG8gZm9yY2UgdGhlIGxlZ2FjeSBDb252ZXJzYXRpb24gQVBJIHBvbGxpbmcgZHJpdmVyLiBBXG4gICAqIHByZS1zdHJlYW0gZmVhdHVyZS1kaXNhYmxlZCBvciBwcmV2aWV3LXRvZ2dsZSByZXNwb25zZSBmYWxscyBiYWNrXG4gICAqIGF1dG9tYXRpY2FsbHkuXG4gICAqL1xuICBnZW5pZUFnZW50TW9kZT86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBUVEwgZm9yIHRoZSBpbi1tZW1vcnkgR2VuaWUgc3BhY2UgbWV0YWRhdGEgY2FjaGUsIGluXG4gICAqIG1pbGxpc2Vjb25kcy4gRGVmYXVsdHMgdG8gNSBtaW51dGVzLiBUaGUgR2VuaWUgYWdlbnQgY2FsbHNcbiAgICogYGNsaWVudC5nZW5pZS5nZXRTcGFjZSguLi4pYCBvbiBldmVyeSBjb2xkLXN0YXJ0IHRvIGdldCB0aGVcbiAgICogdGl0bGUgLyBkZXNjcmlwdGlvbiAvIHdhcmVob3VzZSBpZDsgY2FjaGVkIHJlc3BvbnNlcyBza2lwIHRoZVxuICAgKiByb3VuZC10cmlwIGFuZCBjb25jdXJyZW50IGNhbGxlcnMgY29hbGVzY2Ugb24gYSBzaW5nbGVcbiAgICogaW4tZmxpZ2h0IGZldGNoLiBEcm9wIHRvIGEgc21hbGxlciB2YWx1ZSB3aGVuIGFuYWx5c3RzIGFyZVxuICAgKiBhY3RpdmVseSBlZGl0aW5nIHNwYWNlIG1ldGFkYXRhIGFuZCB5b3Ugd2FudCBjaGFuZ2VzIHZpc2libGVcbiAgICogd2l0aGluIHNlY29uZHM7IHJhaXNlIGl0IHRvIGFtb3J0aXNlIHRoZSByb3VuZC10cmlwIHdoZW5cbiAgICogc3BhY2UgbWV0YWRhdGEgaXMgZWZmZWN0aXZlbHkgZnJvemVuLlxuICAgKlxuICAgKiBCYWNrZWQgYnkgQXBwS2l0J3MgYENhY2hlTWFuYWdlcmAsIHNvIHRoZSBjYWNoZSBwYXJ0aWNpcGF0ZXNcbiAgICogaW4gdGVsZW1ldHJ5IHNwYW5zIChgY2FjaGUuZ2V0T3JFeGVjdXRlYCkgYW5kIGJlbmVmaXRzIGZyb21cbiAgICogTGFrZWJhc2UgcGVyc2lzdGVuY2Ugd2hlbiB0aGUgYGxha2ViYXNlYCBwbHVnaW4gaXMgd2lyZWQgdXAuXG4gICAqL1xuICBnZW5pZVNwYWNlQ2FjaGVUdGxNcz86IG51bWJlcjtcbiAgLyoqXG4gICAqIE1heGltdW0gTExNIHN0ZXBzIGVhY2ggYWdlbnQgZ2V0cyBwZXIgdHVybi4gT25lIHN0ZXAgPSBvbmVcbiAgICogcm91bmQtdHJpcCB0byB0aGUgdW5kZXJseWluZyBtb2RlbCAoYSB0b29sIGNhbGwgY29uc3VtZXMgYVxuICAgKiBzdGVwLCB0aGUgZmluYWwtdGV4dCByZXBseSBjb25zdW1lcyBvbmUgdG9vKS4gQXBwbGllcyB0b1xuICAgKiBldmVyeSBhZ2VudCByZWdpc3RlcmVkIHRocm91Z2gge0BsaW5rIE1hc3RyYVBsdWdpbkNvbmZpZy5hZ2VudHN9XG4gICAqIC0gcGVyLWFnZW50IG92ZXJyaWRlcyBhcmVuJ3Qgc3VyZmFjZWQgeWV0IGJlY2F1c2UgdGhlIHNhbWVcbiAgICogY2VpbGluZyBoYXMgYmVlbiBzdWZmaWNpZW50IGFjcm9zcyBldmVyeSB3b3JrbG9hZCB3ZSd2ZSBydW4uXG4gICAqXG4gICAqIERlZmF1bHRzIHRvIHtAbGluayBERUZBVUxUX0FHRU5UX01BWF9TVEVQU30gKDI1KSwgc2l6ZWQgdG8gZml0XG4gICAqIGEgZGVjb21wb3NlZCBHZW5pZSB0dXJuIChncm91bmRpbmcgKyBzZXZlcmFsIGBhc2tfZ2VuaWVgIGNhbGxzXG4gICAqICsgYHByZXBhcmVfY2hhcnRgIHBlciBkYXRhc2V0ICsgdGhlIGZpbmFsLXRleHQgcmVwbHkpIHdpdGhcbiAgICogaGVhZHJvb20gZm9yIHRoZSBtb2RlbCB0byBjaGFpbiBhIGNvdXBsZSBvZiBmb2xsb3ctdXBzIGJlZm9yZVxuICAgKiBhbnN3ZXJpbmcuIE1hc3RyYSdzIG93biBgYWdlbnQuZ2VuZXJhdGVgIGRlZmF1bHQgb2YgNSB3b3VsZFxuICAgKiBjdXQgbXVsdGktc3RlcCBvcmNoZXN0cmF0aW9uIG9mZiBhZnRlciAyLTMgdG9vbCBjYWxscywgc29cbiAgICogZXhwbGljaXRseSByYWlzaW5nIHRoZSBjZWlsaW5nIGhlcmUgaXMgd2hhdCBsZXRzIHRoZVxuICAgKiBhZ2VudC1tb2RlIGxvb3AgcGxheSBvdXQuXG4gICAqXG4gICAqIExvd2VyIHdoZW4gYW4gdW51c3VhbGx5IHNsb3cgb3IgZXhwZW5zaXZlIG1vZGVsIG1ha2VzIGxvbmdcbiAgICogdHVybnMgdW5hZmZvcmRhYmxlOyByYWlzZSBmb3IgZXhwbG9yYXRvcnkgd29ya2xvYWRzIHRoYXQgbmVlZFxuICAgKiB0byBkcmlsbCBkZWVwIGludG8gYSBkYXRhc2V0IHdpdGhpbiBhIHNpbmdsZSB0dXJuLlxuICAgKi9cbiAgYWdlbnRNYXhTdGVwcz86IG51bWJlcjtcbiAgLyoqXG4gICAqIFdpcmUgTWFzdHJhIHNwYW5zIGludG8gQXBwS2l0J3MgZ2xvYmFsIE9UZWwgcGlwZWxpbmUgdmlhXG4gICAqIGBAbWFzdHJhL290ZWwtYnJpZGdlYC5cbiAgICpcbiAgICogLSBgdW5kZWZpbmVkYCAoZGVmYXVsdCwgYXV0byk6IG9uIG9ubHkgd2hlblxuICAgKiAgIGBPVEVMX0VYUE9SVEVSX09UTFBfRU5EUE9JTlRgIG9yXG4gICAqICAgYE9URUxfRVhQT1JURVJfT1RMUF9UUkFDRVNfRU5EUE9JTlRgIGlzIHNldC4gV2hlbiB1bnNldCwgdGhlXG4gICAqICAgYnJpZGdlIGlzIHNraXBwZWQgc28gTWFzdHJhIGRvZXMgbm90IGxvZ1xuICAgKiAgIGBbT3RlbEJyaWRnZV0gTm8gT1RFTCBzcGFuIGZvdW5kYCBvbiB0aGUgbm9vcCB0cmFjZXIuXG4gICAqIC0gYHRydWVgOiBmb3JjZSBvbiBldmVuIHdpdGhvdXQgYW4gT1RMUCBlbmRwb2ludC5cbiAgICogLSBgZmFsc2VgOiBmb3JjZSBvZmYuXG4gICAqL1xuICBvYnNlcnZhYmlsaXR5PzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIExvZyB1c2VyIGZlZWRiYWNrICh0aHVtYnMgdXAvZG93biArIGZyZWVmb3JtIGNvbW1lbnRzKSB0byBNTGZsb3cgYXNcbiAgICogdHJhY2UgYXNzZXNzbWVudHMsIGFuZCBzdXJmYWNlIHRoZSBmZWVkYmFjayBjb250cm9scyBpbiB0aGUgY2hhdCBVSS5cbiAgICpcbiAgICogLSBgdW5kZWZpbmVkYCAoZGVmYXVsdCwgYXV0byk6IGVuYWJsZWQgb25seSB3aGVuIE1MZmxvdyB0cmFjaW5nIGlzXG4gICAqICAgd2lyZWQgLSBhbiBPVExQIGV4cG9ydGVyIGVuZHBvaW50IGlzIHNldCBhbmQgYW4gTUxmbG93IGV4cGVyaW1lbnRcbiAgICogICBpcyBuYW1lZCAodGhlIHNhbWUgc2lnbmFscyB0aGUgb2JzZXJ2YWJpbGl0eSBwaXBlbGluZSBuZWVkcyB0b1xuICAgKiAgIHNoaXAgdHJhY2VzIHRvIE1MZmxvdykuIE90aGVyd2lzZSBvZmYsIHNpbmNlIHRoZXJlJ2QgYmUgbm8gdHJhY2VcbiAgICogICB0byBhdHRhY2ggZmVlZGJhY2sgdG8uXG4gICAqIC0gYHRydWVgOiBmb3JjZSBvbi4gUmVxdWlyZXMgYE1MRkxPV19FWFBFUklNRU5UX0lEYCBvclxuICAgKiAgIGBNTEZMT1dfRVhQRVJJTUVOVF9OQU1FYDsgYXBwIHN0YXJ0dXAgZmFpbHMgd2hlbiBuZWl0aGVyIGlzIGNvbmZpZ3VyZWQuXG4gICAqICAgVXNlIHRoaXMgd2hlbiB0cmFjZSBleHBvcnQgaXMgd2lyZWQgaW4gYSB3YXkgdGhlIGF1dG8tcHJvYmUgZG9lcyBub3RcbiAgICogICByZWNvZ25pemUuXG4gICAqIC0gYGZhbHNlYDogZm9yY2Ugb2ZmLiBObyB0cmFjZS1pZCBoZWFkZXIsIG5vIGZlZWRiYWNrIHJvdXRlLCBubyBVSS5cbiAgICpcbiAgICogRmVlZGJhY2sgYXR0YWNoZXMgdG8gYSB0dXJuJ3MgTUxmbG93IHRyYWNlIHZpYSB0aGUgT3BlblRlbGVtZXRyeVxuICAgKiB0cmFjZSBpZCB0aGUgc2VydmVyIHN0YW1wcyBvbiBlYWNoIHJlc3BvbnNlOyBzZWUgYG1sZmxvdy50c2AuXG4gICAqL1xuICBmZWVkYmFjaz86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBFeHBvc2UgdGhlIHBsdWdpbidzIGFnZW50cyAoYW5kIG9wdGlvbmFsbHkgdG9vbHMpIGFzIGEgTWFzdHJhIE1DUFxuICAgKiBzZXJ2ZXIgc28gZXh0ZXJuYWwgTUNQIGNsaWVudHMgLSBDbGF1ZGUgRGVza3RvcCwgQ3Vyc29yLCB0aGUgTWFzdHJhXG4gICAqIHBsYXlncm91bmQsIG9yIGFub3RoZXIgYWdlbnQgLSBjYW4gY2FsbCB0aGVtIG92ZXIgdGhlIHN0YW5kYXJkIE1DUFxuICAgKiB0cmFuc3BvcnRzLiBFbmFibGVkIGJ5IGRlZmF1bHQgKGFnZW50cyBvbmx5KTogd3JhcHBpbmcgdGhlXG4gICAqIGFscmVhZHktcmVnaXN0ZXJlZCBhZ2VudHMgY29zdHMgbm90aGluZyBleHRyYSwgc28gdGhlIGVuZHBvaW50IGlzIG9uXG4gICAqIG91dCBvZiB0aGUgYm94OyBvbmx5IHRoZSBhbWJpZW50IHRvb2xzICh3aGljaCBhc3N1bWUgYW4gaW4tcHJvY2Vzc1xuICAgKiBjaGF0IHR1cm4pIHN0YXkgb2ZmIHVubGVzcyBleHBsaWNpdGx5IG9wdGVkIGluLlxuICAgKlxuICAgKiAtIGB1bmRlZmluZWRgIChkZWZhdWx0KSAvIGB0cnVlYDogZXhwb3NlIGV2ZXJ5IHJlZ2lzdGVyZWQgYWdlbnQgYXNcbiAgICogICBhbiBgYXNrXzxhZ2VudElkPmAgTUNQIHRvb2wgdW5kZXIgYSBzZXJ2ZXIgd2hvc2UgaWQgaXMgdGhlIHBsdWdpblxuICAgKiAgIG5hbWUuXG4gICAqIC0gYGZhbHNlYDogbm8gTUNQIGVuZHBvaW50cy5cbiAgICogLSB7QGxpbmsgTWFzdHJhTWNwQ29uZmlnfTogZmluZS1ncmFpbmVkIGNvbnRyb2wgb3ZlciB0aGUgc2VydmVyIGlkLFxuICAgKiAgIGFkdmVydGlzZWQgbWV0YWRhdGEsIGFuZCB3aGljaCBhZ2VudHMgLyB0b29scyBhcmUgZXhwb3NlZC5cbiAgICpcbiAgICogV2hlbiBlbmFibGVkLCB0aGUgc3RvY2sgTWFzdHJhIE1DUCByb3V0ZXMgbW91bnQgdW5kZXIgdGhlIHBsdWdpbidzXG4gICAqIGJhc2UgcGF0aCAobm8gYmVzcG9rZSByb3V0ZSBpcyBhZGRlZCAtIHRoZSBzZXJ2ZXIgaXMgaGFuZGVkIHRvIHRoZVxuICAgKiBgTWFzdHJhYCBpbnN0YW5jZSB2aWEgYG1jcFNlcnZlcnNgLCB3aGljaCBgQG1hc3RyYS9leHByZXNzYCBzZXJ2ZXMpOlxuICAgKlxuICAgKiAtIFN0cmVhbWFibGUgSFRUUDogYFBPU1QgL2FwaS88cGx1Z2luPi9tY3AvPHNlcnZlcklkPi9tY3BgXG4gICAqIC0gU1NFIChsZWdhY3kpOiAgICBgR0VUICAvYXBpLzxwbHVnaW4+L21jcC88c2VydmVySWQ+L3NzZWBcbiAgICogICAgICAgICAgICAgICAgICAgIGBQT1NUIC9hcGkvPHBsdWdpbj4vbWNwLzxzZXJ2ZXJJZD4vbWVzc2FnZXNgXG4gICAqXG4gICAqIFJlcXVlc3RzIHJ1biB1bmRlciB0aGUgc2FtZSBBcHBLaXQgT0JPIHNjb3BlIGFzIHRoZSBjaGF0IHJvdXRlcywgc29cbiAgICogYW4gYWdlbnQgaW52b2tlZCBvdmVyIE1DUCByZXNvbHZlcyBpdHMgbW9kZWwgYW5kIHRvb2xzIGFzIHRoZVxuICAgKiBjYWxsaW5nIHVzZXIuXG4gICAqL1xuICBtY3A/OiBib29sZWFuIHwgTWFzdHJhTWNwQ29uZmlnO1xuICAvKipcbiAgICogSG93IG11Y2ggb2YgdGhlIHN0b2NrIGBAbWFzdHJhL2V4cHJlc3NgIG1hbmFnZW1lbnQgQVBJIGlzIHJlYWNoYWJsZVxuICAgKiB0aHJvdWdoIHRoZSBwbHVnaW4gbW91bnQuIGBAbWFzdHJhL2V4cHJlc3NgIHJlZ2lzdGVycyBpdHMgZnVsbCByb3V0ZVxuICAgKiB0YWJsZSAoYWdlbnQgaW5mZXJlbmNlIHBsdXMgYWRtaW4gLyBtdXRhdGluZyByb3V0ZXM6IGRpcmVjdCB0b29sXG4gICAqIGV4ZWN1dGlvbiwgd29ya2Zsb3cgY29udHJvbCwgcmF3IG1lbW9yeSByZWFkL3dyaXRlLCB0ZWxlbWV0cnksIGxvZ3MsXG4gICAqIHNjb3JlcykuIEFwcEtpdCBhbHJlYWR5IGF1dGhlbnRpY2F0ZXMgZXZlcnkgcmVxdWVzdCBhcyB0aGUgT0JPIHVzZXIsXG4gICAqIGJ1dCBub3RoaW5nIHRoZXJlIHJlc3RyaWN0cyAqd2hpY2gqIG9mIHRob3NlIG9wZXJhdGlvbnMgdGhlIGJyb3dzZXJcbiAgICogY2xpZW50IG1heSBpbnZva2UuXG4gICAqXG4gICAqIC0gYFwic2NvcGVkXCJgIChkZWZhdWx0KTogb25seSB0aGUgcm91dGVzIHRoZSBjaGF0IGNsaWVudCBsZWdpdGltYXRlbHlcbiAgICogICBuZWVkcyBhcmUgZGlzcGF0Y2hlZCB0byBNYXN0cmEgLSBhZ2VudCBpbmZlcmVuY2VcbiAgICogICAoYHN0cmVhbWAgLyBgZ2VuZXJhdGVgIC8gYG5ldHdvcmtgKSwgcmVhZC1vbmx5IGFnZW50IG1ldGFkYXRhLCB0aGlzXG4gICAqICAgcGx1Z2luJ3Mgb3duIE9CTy0gYW5kIHJlc291cmNlLXNjb3BlZCBgL3JvdXRlLypgIHJvdXRlcyAoaGlzdG9yeSAvXG4gICAqICAgdGhyZWFkcyksIGFuZCwgd2hlbiB7QGxpbmsgbWNwfSBpcyBlbmFibGVkLCB0aGUgTUNQIHRyYW5zcG9ydC5cbiAgICogICBFdmVyeXRoaW5nIGVsc2UgKHRvb2wgZXhlY3V0aW9uLCB3b3JrZmxvdyBjb250cm9sLCByYXcgbWVtb3J5LFxuICAgKiAgIHRlbGVtZXRyeSwgbG9ncywgc2NvcmVzLCBhbmQgb3RoZXIgbXV0YXRpb25zKSBpcyByZWplY3RlZCB3aXRoXG4gICAqICAgYDQwM2AgYmVmb3JlIGl0IHJlYWNoZXMgTWFzdHJhLlxuICAgKiAtIGBcImZ1bGxcImA6IGRpc3BhdGNoIHRoZSBlbnRpcmUgc3RvY2sgTWFzdHJhIEFQSS4gVXNlIG9ubHkgZm9yIGFcbiAgICogICB0cnVzdGVkIGZpcnN0LXBhcnR5IGNvbnNvbGUgdGhhdCBnZW51aW5lbHkgbmVlZHMgdGhlIG1hbmFnZW1lbnRcbiAgICogICBzdXJmYWNlLlxuICAgKi9cbiAgYXBpQWNjZXNzPzogXCJzY29wZWRcIiB8IFwiZnVsbFwiO1xuICAvKipcbiAgICogV2hpY2ggRGF0YWJyaWNrcyBpZGVudGl0eSB0aGUgYWdlbnRzJyB3b3Jrc3BhY2UgY2FsbHMgcnVuIGFzOiB0aGVcbiAgICogc2VydmluZy1lbmRwb2ludCBjYXRhbG9ndWUgYmVoaW5kIHRoZSBtb2RlbCBwaWNrZXIsIEdlbmllIHN1Z2dlc3Rpb25zLFxuICAgKiBgYXNrX2dlbmllYCwgYW5kIHRoZSBTdGF0ZW1lbnQgRXhlY3V0aW9uIGZldGNoIGJlaGluZCBhIGBbZGF0YTo8aWQ+XWBcbiAgICogZW1iZWQuIEZhbGxzIGJhY2sgdG8gYE1BU1RSQV9HRU5JRV9JREVOVElUWWAsIHRoZW4gYFwidXNlclwiYC5cbiAgICpcbiAgICogT24tYmVoYWxmLW9mIChPQk8pIGF1dGggcmVxdWlyZXMgdGhlIGNhbGxlciB0byBiZSBhIG1lbWJlciBvZiB0aGVcbiAgICogV09SS1NQQUNFLCBub3QganVzdCBvZiB0aGUgRGF0YWJyaWNrcyBhY2NvdW50LiBBbiBhcHAgc2hhcmVkIHdpdGggYW5cbiAgICogYWNjb3VudC1sZXZlbCBncm91cCBjYW4gYmUgb3BlbmVkIGJ5IHNvbWVvbmUgd2hvc2UgdG9rZW4gaXMgdmFsaWQgYnV0IHdob3NlXG4gICAqIGV2ZXJ5IHdvcmtzcGFjZSBjYWxsIGZhaWxzIHdpdGggYFVuYXV0aG9yaXplZCBhY2Nlc3MgdG8gT3JnOiA8aWQ+YCAtIGFuZFxuICAgKiBncmFudGluZyB3b3Jrc3BhY2UgbWVtYmVyc2hpcCBpcyBub3QgYWx3YXlzIHBvc3NpYmxlLCBzaW5jZSBhIHdvcmtzcGFjZVxuICAgKiBjYXBzIG1lbWJlcnNoaXAgd2VsbCBiZWxvdyB0aGUgc2l6ZSBvZiBhIGxhcmdlIGFjY291bnQncyB1c2VyIGdyb3VwLiBUaGVcbiAgICogYXBwJ3Mgc2VydmljZSBwcmluY2lwYWwgYWxyZWFkeSBob2xkcyB0aGUgZ3JhbnRzIHRoZSBhcHAgd2FzIGRlcGxveWVkIHdpdGguXG4gICAqXG4gICAqIC0gYFwidXNlclwiYCAoZGVmYXVsdCk6IGFsd2F5cyBPQk8uIFBlci11c2VyIGF0dHJpYnV0aW9uLCBhbmQgR2VuaWUgLyBVbml0eVxuICAgKiAgIENhdGFsb2cgcm93IGZpbHRlcnMgYXBwbHkgcGVyIHVzZXIuIENvcnJlY3Qgd2hlbiBldmVyeSBjYWxsZXIgaXMgYVxuICAgKiAgIHdvcmtzcGFjZSBtZW1iZXIuXG4gICAqIC0gYFwic2VydmljZS1wcmluY2lwYWxcImA6IGFsd2F5cyB0aGUgYXBwIHNlcnZpY2UgcHJpbmNpcGFsLiBOZWVkcyBubyBPQk9cbiAgICogICBzY29wZXMgYW5kIHdvcmtzIGZvciBhbnkgY2FsbGVyIHdobyBjYW4gb3BlbiB0aGUgYXBwLCBhdCB0aGUgY29zdCBvZlxuICAgKiAgIHBlci11c2VyIGF0dHJpYnV0aW9uIGluIEdlbmllIC8gVW5pdHkgQ2F0YWxvZy5cbiAgICogLSBgXCJhdXRvXCJgOiBPQk8gd2hlbiB0aGUgcmVxdWVzdCBjYXJyaWVzIGFuIE9CTyB0b2tlbiwgdGhlIHNlcnZpY2UgcHJpbmNpcGFsXG4gICAqICAgd2hlbiBpdCBkb2VzIG5vdC4gRm9yIGFuIGFwcCBzZXJ2aW5nIEJPVEggdGhlIHBsYXRmb3JtIGZyb250IGRvb3IgYW5kIGFcbiAgICogICBkb29yIHRoYXQgaGFzIG5vIHRva2VuIHRvIGZvcndhcmQgLSBhIGBAZGJ4LXRvb2xzL3R1bm5lbGAgZ2F0ZSwgYVxuICAgKiAgIFRlYW1zIGNoYW5uZWwgLSB3aGVyZSBBcHBLaXQncyBgYXNVc2VyYCB3b3VsZCBvdGhlcndpc2UgdGhyb3dcbiAgICogICBgQXV0aGVudGljYXRpb25FcnJvcmAgb3V0c2lkZSBgTk9ERV9FTlY9ZGV2ZWxvcG1lbnRgLlxuICAgKlxuICAgKiBUaGUgc2VydmljZS1wcmluY2lwYWwgcGF0aCBjaGFuZ2VzIG9ubHkgdGhlIERhdGFicmlja3MgQ1JFREVOVElBTC4gTWVtb3J5XG4gICAqIHRocmVhZHMsIHRoZSBwZXItdXNlciBjYWNoZSBuYW1lc3BhY2UsIGFuZCB0cmFjZSBtZXRhZGF0YSBzdGlsbCBrZXkgb2ZmIHRoZVxuICAgKiBmb3J3YXJkZWQgdXNlciwgc28gY2FsbGVycyBzaGFyaW5nIHRoZSBzZXJ2aWNlIHByaW5jaXBhbCdzIGRhdGEgYWNjZXNzIGtlZXBcbiAgICogc2VwYXJhdGUgY29udmVyc2F0aW9ucyBhbmQgY2Fubm90IHJlYWQgZWFjaCBvdGhlcidzIHRocmVhZHMgb3IgY2hhcnRzLlxuICAgKlxuICAgKiBAZXhhbXBsZSBBbiBhcHAgYW55IGFjY291bnQgdXNlciBjYW4gb3BlblxuICAgKiBgYGB0c1xuICAgKiBtYXN0cmEoeyBnZW5pZUlkZW50aXR5OiBcInNlcnZpY2UtcHJpbmNpcGFsXCIsIGdlbmllU3BhY2VzOiB7IGRlZmF1bHQ6IHNwYWNlSWQgfSB9KTtcbiAgICogYGBgXG4gICAqXG4gICAqIEBleGFtcGxlIE9uZSBhcHAgYmVoaW5kIGJvdGggdGhlIGZyb250IGRvb3IgYW5kIGEgcHVibGljIHR1bm5lbFxuICAgKiBgYGB0c1xuICAgKiBtYXN0cmEoeyBnZW5pZUlkZW50aXR5OiBcImF1dG9cIiwgZ2VuaWVTcGFjZXM6IHsgZGVmYXVsdDogc3BhY2VJZCB9IH0pO1xuICAgKiBgYGBcbiAgICovXG4gIGdlbmllSWRlbnRpdHk/OiBNYXN0cmFJZGVudGl0eU1vZGU7XG4gIC8qKlxuICAgKiBPcHRpb25hbCBicmFuZCBjb250ZXh0IGFwcGxpZWQgdG8gY2hhcnRzIHByb2R1Y2VkIGJ5IHRoZSBidWlsdC1pblxuICAgKiBgcmVuZGVyX2RhdGFgIC8gYHByZXBhcmVfY2hhcnRgIHRvb2xzLiBXaGVuIHNldCwgdGhlIGNoYXJ0IHBsYW5uZXInc1xuICAgKiBFY2hhcnRzIG91dHB1dCBpcyB0aGVtZWQgd2l0aCB0aGUgYnJhbmQncyBwYWxldHRlIChzZXJpZXMgY29sb3JzIGRlcml2ZWRcbiAgICogZnJvbSBgY29sb3JzLnByaW1hcnlgIC8gYGNvbG9ycy5hY2NlbnRgKSBhbmQgc2FucyBmb250XG4gICAqIChgdHlwb2dyYXBoeS5zYW5zYCkgaW5zdGVhZCBvZiBFY2hhcnRzJyBkZWZhdWx0cy4gT21pdCBmb3IgdGhlIGRlZmF1bHRcbiAgICogRWNoYXJ0cyBsb29rLlxuICAgKlxuICAgKiBQYXNzIHRoZSBwb3J0YWJsZSB7QGxpbmsgQnJhbmRDb250ZXh0fSBzaGFyZWQgYWNyb3NzIHRoZSBVSSBhbmRcbiAgICogbGlicmFyaWVzIChlLmcuIGBicmFuZC5kZWZhdWx0QnJhbmRDb250ZXh0YCBmcm9tIGBAZGJ4LXRvb2xzL3NoYXJlZC1jb3JlYCxcbiAgICogb3IgYSBjdXN0b21lciBicmFuZCkgLSB0aGUgc2FtZSBvYmplY3QgdGhlIGVtYWlsIGFkZC1vbiBhbmQgdGhlIFVJXG4gICAqIGBCcmFuZFByb3ZpZGVyYCBjb25zdW1lLCBzbyBhIGhvc3QgdGhlbWVzIGNoYXJ0cywgZW1haWwsIGFuZCBVSSBmcm9tIG9uZVxuICAgKiBzb3VyY2UuXG4gICAqL1xuICBicmFuZD86IEJyYW5kQ29udGV4dDtcbiAgLyoqXG4gICAqIFJlbW90ZSBBZ2VudC1Ta2lsbCBzb3VyY2VzIG1hdGVyaWFsaXplZCBvbmNlIGF0IGFwcCBzdGFydHVwLiBBIHNpbmdsZVxuICAgKiBzb3VyY2UsIGEgbGlzdCwgb3IgYSBgeyBzb3VyY2VzLCBmYWlsT25FcnJvcj8sIC4uLiB9YCBiYWcuXG4gICAqXG4gICAqIEVhY2ggc291cmNlIGlzIGEgR2l0SHViIGBvd25lci9yZXBvYCwgYSBnaXQgLyBHaXRMYWIgVVJMLCBvciBhIGRpcmVjdFxuICAgKiBgU0tJTEwubWRgIC8gYXJjaGl2ZSBkb3dubG9hZCBVUkwuIFJlc29sdXRpb24gcHJlZmVycyB0aGUgT1BUSU9OQUwgYHNraWxsc2BcbiAgICogbnBtIENMSSAoYSBwZWVyIGRlcCkgd2hpY2ggaXMgY29waWVkIGludG8gYSB0ZW1wIGRpciBhbmQgdGhlbiBwZXJzaXN0ZWQ7XG4gICAqIHdpdGhvdXQgaXQsIGEgVVJMIHNvdXJjZSBpcyBmZXRjaGVkIGRpcmVjdGx5LiBBIHNvdXJjZSB0aGF0IHJlc29sdmVzXG4gICAqIHRocm91Z2ggbmVpdGhlciBmYWlscyBzdGFydHVwIHVubGVzcyBgZmFpbE9uRXJyb3I6IGZhbHNlYC5cbiAgICpcbiAgICogUHJvdmlzaW9uZWQgc2tpbGxzIGFyZSB3cml0dGVuIHRvIHRoZSBEYXRhYnJpY2tzIHVzZXIncyBBc3Npc3RhbnQgc2tpbGxzXG4gICAqIGZvbGRlciAoYC9Xb3Jrc3BhY2UvVXNlcnMvPGVtYWlsPi8uYXNzaXN0YW50L3NraWxsc2AsIHRoZSBwZXJzb25hbCBza2lsbFxuICAgKiB0YXJnZXQpIHNvIHRoZXkgcGVyc2lzdCBhbmQgYXJlIHBpY2tlZCB1cCBieSB0aGUgYnVpbHQtaW4gQXNzaXN0YW50LXNraWxsc1xuICAgKiBtb3VudC4gV2l0aCBubyB3cml0YWJsZSB3b3Jrc3BhY2UsIHRoZXkgZ28gdG8gYSBsb2NhbCB0ZW1wIGRpciBpbnN0ZWFkLlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGB0c1xuICAgKiBtYXN0cmEoeyByZW1vdGVTa2lsbHM6IFwidmVyY2VsLWxhYnMvYWdlbnQtc2tpbGxzXCIgfSk7XG4gICAqIG1hc3RyYSh7XG4gICAqICAgcmVtb3RlU2tpbGxzOiB7XG4gICAqICAgICBzb3VyY2VzOiBbXCJ2ZXJjZWwtbGFicy9hZ2VudC1za2lsbHNcIiwgXCJodHRwczovL2V4YW1wbGUuY29tL3NraWxsLm1kXCJdLFxuICAgKiAgICAgZmFpbE9uRXJyb3I6IGZhbHNlLFxuICAgKiAgIH0sXG4gICAqIH0pO1xuICAgKiBgYGBcbiAgICovXG4gIHJlbW90ZVNraWxscz86IFJlbW90ZVNraWxsc09wdGlvbjtcbn1cblxuLyoqXG4gKiBKU09OIFNjaGVtYSBwdWJsaXNoZWQgb24gdGhlIG1hbmlmZXN0J3MgYGNvbmZpZy5zY2hlbWFgLCBtaXJyb3JpbmcgdGhlXG4gKiBkb2N1bWVudGVkIGRlZmF1bHRzIGFuZCBlbnZpcm9ubWVudCBmYWxsYmFja3Mgb2Yge0BsaW5rIE1hc3RyYVBsdWdpbkNvbmZpZ30uXG4gKlxuICogQ292ZXJzIHRoZSBKU09OLWV4cHJlc3NpYmxlIG9wdGlvbnMgb25seS4gYGFnZW50c2AsIGB0b29sc2AsIGFuZCBhXG4gKiBgZGVmYXVsdE1vZGVsYCBwYXNzZWQgYXMgYSBNYXN0cmEgYER5bmFtaWNBcmd1bWVudGAgYXJlIGNvZGUtZGVmaW5lZFxuICogKGZ1bmN0aW9ucyAvIGNsYXNzIGluc3RhbmNlcyksIHNvIHRoZXkgY2Fycnkgbm8gc2NoZW1hIGVudHJ5OyB0aGVcbiAqIGBkZWZhdWx0TW9kZWxgIHByb3BlcnR5IGJlbG93IGRlc2NyaWJlcyBpdHMgc3RyaW5nIGZvcm0uXG4gKi9cbmV4cG9ydCBjb25zdCBNQVNUUkFfQ09ORklHX1NDSEVNQTogQ29uZmlnU2NoZW1hID0ge1xuICB0eXBlOiBcIm9iamVjdFwiLFxuICBwcm9wZXJ0aWVzOiB7XG4gICAgYmFja2dyb3VuZFR1cm5zOiB7XG4gICAgICB0eXBlOiBcImJvb2xlYW5cIixcbiAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICBcIlJ1biB0dXJucyB0aHJvdWdoIE1hc3RyYSBldmVudGVkIGR1cmFibGUgZXhlY3V0aW9uIHNvIHRoZXkgY29udGludWUgYWZ0ZXIgYnJvd3NlciBkaXNjb25uZWN0cyBhbmQgcmVtYWluIHJlY29ubmVjdGFibGUgYnkgcnVuIGlkLiBEZWZhdWx0cyB0byB0cnVlLlwiLFxuICAgIH0sXG4gICAgcHJvdmlkZXJJZDoge1xuICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgIGRlc2NyaXB0aW9uOiAnQUkgU0RLIHByb3ZpZGVyLW9wdGlvbnMgbmFtZXNwYWNlLiBEZWZhdWx0cyB0byBcIm9wZW5haVwiLicsXG4gICAgfSxcbiAgICByZW1vdGVTa2lsbHM6IHtcbiAgICAgIHR5cGU6IFtcInN0cmluZ1wiLCBcImFycmF5XCIsIFwib2JqZWN0XCJdLFxuICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgICdSZW1vdGUgQWdlbnQtU2tpbGwgc291cmNlcyBwcm92aXNpb25lZCBhdCBzdGFydHVwOiBcImFpdG9vbHNcIiBmb3IgRGF0YWJyaWNrc1xcJyBvd24gc2tpbGwgc2V0IChyZWFkIGZyb20gdGhlIHB1YmxpYyBkYXRhYnJpY2tzL2RhdGFicmlja3MtYWdlbnQtc2tpbGxzIHJlcG8sIG5vIENMSSBuZWVkZWQpLCBhIEdpdEh1YiBvd25lci9yZXBvLCBhIGdpdC9HaXRMYWIgVVJMLCBvciBhIGRpcmVjdCBTS0lMTC5tZC9hcmNoaXZlIFVSTC4gTm9uLWFpdG9vbHMgc291cmNlcyBwcmVmZXIgdGhlIG9wdGlvbmFsIGBza2lsbHNgIG5wbSBDTEksIGVsc2UgYSBkaXJlY3QgZmV0Y2g7IGZhaWxzIHN0YXJ0dXAgb24gZXJyb3IgdW5sZXNzIGZhaWxPbkVycm9yOmZhbHNlLiBXcml0dGVuIHRvIHRoZSBEYXRhYnJpY2tzIHVzZXIgQXNzaXN0YW50IHNraWxscyBmb2xkZXIsIG9yIHJlYWQtb25seSBsb2NhbCBiYWNraW5nIHN0b3JhZ2UgZXhwb3NlZCBhdCBzdGFibGUgdmlydHVhbCB3b3Jrc3BhY2UgbW91bnRzLicsXG4gICAgfSxcbiAgICBzdG9yYWdlOiB7XG4gICAgICB0eXBlOiBbXCJib29sZWFuXCIsIFwib2JqZWN0XCJdLFxuICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgIFwiUG9zdGdyZXNTdG9yZSBmb3IgTWFzdHJhIHRocmVhZHMgLyBtZXNzYWdlcy4gYHRydWVgIHJldXNlcyB0aGUgYGxha2ViYXNlYCBwbHVnaW4ncyBwb29sLCBhbiBvYmplY3Qgb3BlbnMgYSBkZWRpY2F0ZWQgc3RvcmUuIEF1dG8tZW5hYmxlZCB3aGVuIHRoZSBgbGFrZWJhc2VgIHBsdWdpbiBpcyByZWdpc3RlcmVkLlwiLFxuICAgIH0sXG4gICAgbWVtb3J5OiB7XG4gICAgICB0eXBlOiBbXCJib29sZWFuXCIsIFwib2JqZWN0XCJdLFxuICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgIFwiUGdWZWN0b3Igc3RvcmUgZm9yIE1hc3RyYSBzZW1hbnRpYyByZWNhbGwuIGB0cnVlYCByZXVzZXMgdGhlIGBsYWtlYmFzZWAgcGx1Z2luJ3MgcG9vbCwgYW4gb2JqZWN0IG9wZW5zIGEgZGVkaWNhdGVkIHN0b3JlLiBBdXRvLWVuYWJsZWQgd2hlbiB0aGUgYGxha2ViYXNlYCBwbHVnaW4gaXMgcmVnaXN0ZXJlZC5cIixcbiAgICB9LFxuICAgIGNvZGVNb2RlOiB7XG4gICAgICB0eXBlOiBbXCJib29sZWFuXCIsIFwib2JqZWN0XCJdLFxuICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgIFwiRXhwb3NlIGFsbCBleGVjdXRhYmxlIHRvb2xzIGF2YWlsYWJsZSB0byB0aGUgY3VycmVudCByZXF1ZXN0LCBpbmNsdWRpbmcgbmF0aXZlIHdvcmtzcGFjZSB0b29scywgdGhyb3VnaCBkeW5hbWljYWxseSBnZW5lcmF0ZWQgTWFzdHJhIENvZGUgTW9kZSBmb3Igc2FuZGJveGVkIFR5cGVTY3JpcHQgYmF0Y2hpbmcsIGFnZ3JlZ2F0aW9uLCBhbmQgYXJpdGhtZXRpYy4gVGhlIHBsdWdpbiBzZWxlY3RzIE1hc3RyYSBpc29sYXRlZC12bSBvbmNlIGR1cmluZyBzdGFydHVwIGFuZCBmYWxscyBiYWNrIHRvIE1hc3RyYSBRdWlja0pTIHdoZW4gbmF0aXZlIGluaXRpYWxpemF0aW9uIGlzIHVuYXZhaWxhYmxlLiBGYWxzZSBkaXNhYmxlcyBpdC5cIixcbiAgICB9LFxuICAgIHNhbmRib3g6IHtcbiAgICAgIHR5cGU6IFtcImJvb2xlYW5cIiwgXCJzdHJpbmdcIiwgXCJvYmplY3RcIl0sXG4gICAgICBkZXNjcmlwdGlvbjpcbiAgICAgICAgJ0NvbW1hbmQgc2FuZGJveCBmb3IgYXV0by1jcmVhdGVkIGFnZW50IHdvcmtzcGFjZXMuIERlZmF1bHRzIHRvIE1vbnR5LiBGYWxzZSBkaXNhYmxlcyBjb21tYW5kIGV4ZWN1dGlvbjsgdHJ1ZSwgXCJkYXRhYnJpY2tzXCIsIG9yIGFuIG9iamVjdCBzZWxlY3RzL2NvbmZpZ3VyZXMgRGF0YWJyaWNrcyBTYW5kYm94LicsXG4gICAgfSxcbiAgICB3b3Jrc3BhY2VGYWxsYmFja1RvVG1wOiB7XG4gICAgICB0eXBlOiBcImJvb2xlYW5cIixcbiAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICBcIkFkZCB1c2VyLXNjb3BlZCAvdG1wIHRvIGF1dG8tY3JlYXRlZCBhZ2VudCB3b3Jrc3BhY2VzIG9ubHkgd2hlbiBubyBjb25maWd1cmVkIERhdGFicmlja3MgcGF0aCBtb3VudHMgd3JpdGFibGUuIERlZmF1bHRzIHRvIGZhbHNlLlwiLFxuICAgIH0sXG4gICAgd29ya3NwYWNlU2tpbGxzOiB7XG4gICAgICB0eXBlOiBbXCJib29sZWFuXCIsIFwib2JqZWN0XCJdLFxuICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgIFwiVXNlIE1hc3RyYSdzIG5hdGl2ZSBvbi1kZW1hbmQgd29ya3NwYWNlIHNraWxsIHNlYXJjaCBhbmQgd3JpdGFibGUgc2tpbGwgc2F2ZXMuIERlZmF1bHRzIHRvIHRydWUuXCIsXG4gICAgfSxcbiAgICB3b3Jrc3BhY2VUb29sczoge1xuICAgICAgdHlwZTogXCJvYmplY3RcIixcbiAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICBcIk5hdGl2ZSBNYXN0cmEgd29ya3NwYWNlIHRvb2wgY29uZmlndXJhdGlvbiBmb3IgYXZhaWxhYmlsaXR5LCBhcHByb3ZhbHMsIHJlYWQtYmVmb3JlLXdyaXRlLCBvdXRwdXQgbGltaXRzLCBhbmQgaG9va3MuXCIsXG4gICAgfSxcbiAgICBkZWZhdWx0QWdlbnQ6IHtcbiAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICBkZXNjcmlwdGlvbjpcbiAgICAgICAgXCJBZ2VudCBpZCB1c2VkIHdoZW4gdGhlIGNsaWVudCBuYW1lcyBub25lLiBEZWZhdWx0cyB0byB0aGUgZmlyc3QgcmVnaXN0ZXJlZCBhZ2VudCwgZWxzZSB0aGUgYnVpbHQtaW4gYGRlZmF1bHRgLlwiLFxuICAgIH0sXG4gICAgZGVmYXVsdE1vZGVsOiB7XG4gICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgIFwiU2VydmluZyBlbmRwb2ludCBhcHBsaWVkIHRvIGV2ZXJ5IGFnZW50IHRoYXQgb21pdHMgaXRzIG93biBtb2RlbC4gRmFsbHMgYmFjayB0byBEQVRBQlJJQ0tTX1NFUlZJTkdfRU5EUE9JTlRfTkFNRSwgdGhlbiB0aGUgaGlnaGVzdC1yYW5rZWQgY3VycmVudGx5IGF2YWlsYWJsZSBjYXRhbG9ndWUgZW5kcG9pbnQuXCIsXG4gICAgfSxcbiAgICBkZWZhdWx0TW9kZWxGYWxsYmFja3M6IHtcbiAgICAgIHR5cGU6IFwiYXJyYXlcIixcbiAgICAgIGl0ZW1zOiB7IHR5cGU6IFwic3RyaW5nXCIgfSxcbiAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICBcIlByaW9yaXR5LW9yZGVyZWQgZW5kcG9pbnQgbmFtZXMgdHJpZWQgYmVmb3JlIHRoZSBzY29yZS1jbGFzc2lmaWVkIGNhdGFsb2d1ZSB3aGVuIG5vdGhpbmcgZWxzZSBwaW5zIGEgbW9kZWwuXCIsXG4gICAgfSxcbiAgICBtb2RlbEZ1enp5TWF0Y2g6IHtcbiAgICAgIHR5cGU6IFwiYm9vbGVhblwiLFxuICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgIFwiRnV6enktbWF0Y2ggbG9vc2UgbW9kZWwgbmFtZXMgYWdhaW5zdCB0aGUgd29ya3NwYWNlIGNhdGFsb2d1ZS4gRGVmYXVsdHMgdG8gdHJ1ZS5cIixcbiAgICB9LFxuICAgIG1vZGVsRnV6enlUaHJlc2hvbGQ6IHtcbiAgICAgIHR5cGU6IFwibnVtYmVyXCIsXG4gICAgICBkZXNjcmlwdGlvbjpcbiAgICAgICAgXCJGdXNlLmpzIHNjb3JlIHRocmVzaG9sZCBmb3IgdGhlIGZ1enp5IG1hdGNoZXIsIDAgKGV4YWN0KSB0byAxIChhbnl0aGluZykuIERlZmF1bHRzIHRvIDAuNC5cIixcbiAgICB9LFxuICAgIG1vZGVsQ2FjaGVUdGxNczoge1xuICAgICAgdHlwZTogXCJudW1iZXJcIixcbiAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICBcIlRUTCBpbiBtcyBmb3IgdGhlIHNlcnZpbmctZW5kcG9pbnRzIGxpc3QgY2FjaGUsIHBlciB3b3Jrc3BhY2UgaG9zdC4gRGVmYXVsdHMgdG8gNSBtaW51dGVzLlwiLFxuICAgIH0sXG4gICAgbW9kZWxPdmVycmlkZToge1xuICAgICAgdHlwZTogXCJib29sZWFuXCIsXG4gICAgICBkZXNjcmlwdGlvbjpcbiAgICAgICAgXCJIb25vciBhIHBlci1yZXF1ZXN0IG1vZGVsIG92ZXJyaWRlIGZyb20gdGhlIFgtTWFzdHJhLU1vZGVsIGhlYWRlciwgP21vZGVsPSBxdWVyeSwgb3IgYSBgbW9kZWxgIGJvZHkgZmllbGQuIERlZmF1bHRzIHRvIHRydWUuXCIsXG4gICAgfSxcbiAgICBnZW5pZVNwYWNlczoge1xuICAgICAgdHlwZTogXCJvYmplY3RcIixcbiAgICAgIGFkZGl0aW9uYWxQcm9wZXJ0aWVzOiB7IHR5cGU6IFtcInN0cmluZ1wiLCBcIm9iamVjdFwiXSB9LFxuICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgIFwiR2VuaWUgc3BhY2VzIHRoZSBhZ2VudHMgY2FuIGRlbGVnYXRlIHRvLCBrZXllZCBieSBhbGlhcyAodGhlIHRvb2wtbmFtZSBzdWZmaXgpLiBFYWNoIHZhbHVlIGlzIGEgc3BhY2UgaWQgb3IgYHsgc3BhY2VJZCwgaGludCB9YC4gRmFsbHMgYmFjayB0byB0aGUgYGdlbmllYCBwbHVnaW4ncyBvd24gYHNwYWNlc2AgY29uZmlnLCB0aGVuIERBVEFCUklDS1NfR0VOSUVfU1BBQ0VfSUQgdW5kZXIgdGhlIGBkZWZhdWx0YCBhbGlhcy5cIixcbiAgICB9LFxuICAgIGdlbmllQWdlbnRNb2RlOiB7XG4gICAgICB0eXBlOiBcImJvb2xlYW5cIixcbiAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICBcIlVzZSB0aGUgc3RyZWFtaW5nIEdlbmllIEFnZW50IE1vZGUgQVBJIGZvciBhc2tfZ2VuaWUuIERlZmF1bHRzIHRvIHRydWU7IGZhbHNlIGZvcmNlcyBsZWdhY3kgcG9sbGluZy4gRmVhdHVyZS1kaXNhYmxlZCBvciBwcmV2aWV3LXRvZ2dsZSByZXNwb25zZXMgZmFsbCBiYWNrIGF1dG9tYXRpY2FsbHkgYmVmb3JlIHN0cmVhbWluZy5cIixcbiAgICB9LFxuICAgIGdlbmllU3BhY2VDYWNoZVR0bE1zOiB7XG4gICAgICB0eXBlOiBcIm51bWJlclwiLFxuICAgICAgZGVzY3JpcHRpb246IFwiVFRMIGluIG1zIGZvciB0aGUgR2VuaWUgc3BhY2UgbWV0YWRhdGEgY2FjaGUuIERlZmF1bHRzIHRvIDUgbWludXRlcy5cIixcbiAgICB9LFxuICAgIGFnZW50TWF4U3RlcHM6IHtcbiAgICAgIHR5cGU6IFwibnVtYmVyXCIsXG4gICAgICBkZXNjcmlwdGlvbjpcbiAgICAgICAgXCJNYXhpbXVtIExMTSBzdGVwcyBlYWNoIGFnZW50IGdldHMgcGVyIHR1cm4gKGEgdG9vbCBjYWxsIGFuZCB0aGUgZmluYWwgcmVwbHkgZWFjaCBjb25zdW1lIG9uZSkuIERlZmF1bHRzIHRvIDI1LlwiLFxuICAgIH0sXG4gICAgc3RyaXBTdGFsZUNoYXJ0czoge1xuICAgICAgdHlwZTogXCJib29sZWFuXCIsXG4gICAgICBkZXNjcmlwdGlvbjpcbiAgICAgICAgXCJTdHJpcCBjaGFydElkcyBmcm9tIHJlY2FsbGVkIGFzc2lzdGFudCB0b29sIHJlc3VsdHMgc28gdGhlIG1vZGVsIGNhbm5vdCByZXVzZSBhIHR1cm4tc2NvcGVkIGNoYXJ0IG1hcmtlci4gRGVmYXVsdHMgdG8gdHJ1ZS5cIixcbiAgICB9LFxuICAgIHN0eWxlSW5zdHJ1Y3Rpb25zOiB7XG4gICAgICB0eXBlOiBbXCJzdHJpbmdcIiwgXCJib29sZWFuXCJdLFxuICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgIFwiU3R5bGUgZ3VhcmRyYWlscyBhcHBlbmRlZCB0byBldmVyeSBhZ2VudCdzIGluc3RydWN0aW9ucy4gQSBzdHJpbmcgcmVwbGFjZXMgdGhlIGJ1aWx0LWluIGJsb2NrLCBgZmFsc2VgIGRpc2FibGVzIGl0LlwiLFxuICAgIH0sXG4gICAgb2JzZXJ2YWJpbGl0eToge1xuICAgICAgdHlwZTogXCJib29sZWFuXCIsXG4gICAgICBkZXNjcmlwdGlvbjpcbiAgICAgICAgXCJCcmlkZ2UgTWFzdHJhIHNwYW5zIGludG8gQXBwS2l0J3MgT1RlbCBwaXBlbGluZS4gRGVmYXVsdHMgdG8gb24gb25seSB3aGVuIE9URUxfRVhQT1JURVJfT1RMUF9FTkRQT0lOVCBvciBPVEVMX0VYUE9SVEVSX09UTFBfVFJBQ0VTX0VORFBPSU5UIGlzIHNldC5cIixcbiAgICB9LFxuICAgIGZlZWRiYWNrOiB7XG4gICAgICB0eXBlOiBcImJvb2xlYW5cIixcbiAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICBcIkxvZyB0aHVtYnMgLyBjb21tZW50IGFzc2Vzc21lbnRzIHRvIE1MZmxvdyBhbmQgc3VyZmFjZSB0aGUgZmVlZGJhY2sgY29udHJvbHMuIERlZmF1bHRzIHRvIG9uIG9ubHkgd2hlbiBhbiBPVExQIGVuZHBvaW50IGFuZCBNTEZMT1dfRVhQRVJJTUVOVF9JRCBvciBNTEZMT1dfRVhQRVJJTUVOVF9OQU1FIGFyZSBzZXQuIEV4cGxpY2l0IHRydWUgZmFpbHMgc3RhcnR1cCB1bmxlc3MgYW4gZXhwZXJpbWVudCBpZCBvciBuYW1lIGlzIGNvbmZpZ3VyZWQuXCIsXG4gICAgfSxcbiAgICBtY3A6IHtcbiAgICAgIHR5cGU6IFtcImJvb2xlYW5cIiwgXCJvYmplY3RcIl0sXG4gICAgICBkZXNjcmlwdGlvbjpcbiAgICAgICAgXCJFeHBvc2UgdGhlIHJlZ2lzdGVyZWQgYWdlbnRzIG92ZXIgTUNQLiBEZWZhdWx0cyB0byBhZ2VudHMtb25seTsgYW4gb2JqZWN0IHR1bmVzIHRoZSBzZXJ2ZXIgaWQsIGFkdmVydGlzZWQgbWV0YWRhdGEsIGFuZCB3aGV0aGVyIGFtYmllbnQgdG9vbHMgYXJlIGV4cG9zZWQuXCIsXG4gICAgfSxcbiAgICBnZW5pZUlkZW50aXR5OiB7XG4gICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgLy8gRGVyaXZlZCBmcm9tIHRoZSByZXNvbHZlcidzIG93biBsaXN0LCBzbyBhIG1vZGUgY2FuIG5ldmVyIGJlIGFjY2VwdGVkIGF0XG4gICAgICAvLyBydW50aW1lIHdoaWxlIHRoZSBwdWJsaXNoZWQgc2NoZW1hIChhbmQgdGhlIFVJIGJ1aWx0IGZyb20gaXQpIG9taXRzIGl0LlxuICAgICAgZW51bTogWy4uLklERU5USVRZX01PREVTXSxcbiAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICAnV2hpY2ggRGF0YWJyaWNrcyBpZGVudGl0eSB0aGUgYWdlbnRzXFwnIHdvcmtzcGFjZSBjYWxscyAoc2VydmluZyBjYXRhbG9ndWUsIEdlbmllLCBzdGF0ZW1lbnQgZXhlY3V0aW9uKSBydW4gYXMuIFwidXNlclwiIChkZWZhdWx0KSBpcyBhbHdheXMgT0JPLCBzbyBjYWxsZXJzIG11c3QgYmUgd29ya3NwYWNlIG1lbWJlcnM7IFwic2VydmljZS1wcmluY2lwYWxcIiBhbHdheXMgdXNlcyB0aGUgYXBwIHNlcnZpY2UgcHJpbmNpcGFsLCBzbyBhbnkgY2FsbGVyIHdobyBjYW4gb3BlbiB0aGUgYXBwIHdvcmtzLCBhdCB0aGUgY29zdCBvZiBwZXItdXNlciBhdHRyaWJ1dGlvbjsgXCJhdXRvXCIgdXNlcyBPQk8gd2hlbiB0aGUgcmVxdWVzdCBjYXJyaWVzIGFuIE9CTyB0b2tlbiBhbmQgdGhlIHNlcnZpY2UgcHJpbmNpcGFsIHdoZW4gaXQgZG9lcyBub3QsIGZvciBhbiBhcHAgdGhhdCBhbHNvIHNlcnZlcyBhIHR1bm5lbCBvciB3ZWJob29rIGRvb3IuIEZhbGxzIGJhY2sgdG8gTUFTVFJBX0dFTklFX0lERU5USVRZLicsXG4gICAgfSxcbiAgICBhcGlBY2Nlc3M6IHtcbiAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICBlbnVtOiBbXCJzY29wZWRcIiwgXCJmdWxsXCJdLFxuICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgICdIb3cgbXVjaCBvZiB0aGUgc3RvY2sgQG1hc3RyYS9leHByZXNzIEFQSSBpcyByZWFjaGFibGUgdGhyb3VnaCB0aGUgbW91bnQuIFwic2NvcGVkXCIgKGRlZmF1bHQpIGFsbG93cyBhZ2VudCBpbmZlcmVuY2UsIHJlYWQtb25seSBhZ2VudCBtZXRhZGF0YSwgdGhpcyBwbHVnaW5cXCdzIG93biByb3V0ZXMsIGFuZCBNQ1A7IFwiZnVsbFwiIGRpc3BhdGNoZXMgdGhlIGVudGlyZSBtYW5hZ2VtZW50IHN1cmZhY2UuJyxcbiAgICB9LFxuICAgIGJyYW5kOiB7XG4gICAgICB0eXBlOiBcIm9iamVjdFwiLFxuICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgIFwiUG9ydGFibGUgYnJhbmQgY29udGV4dCBhcHBsaWVkIHRvIGdlbmVyYXRlZCBjaGFydHMgKHNlcmllcyBwYWxldHRlIGZyb20gY29sb3JzLnByaW1hcnkgLyBjb2xvcnMuYWNjZW50LCBiYXNlIGZvbnQgZnJvbSB0eXBvZ3JhcGh5LnNhbnMpLlwiLFxuICAgIH0sXG4gIH0sXG59O1xuIl19
253
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7R0FjRztBQUVILE9BQU8sRUFBRSxtQkFBbUIsRUFBNEMsTUFBTSxvQkFBb0IsQ0FBQztBQUtuRyxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQVU1RixPQUFPLEVBQUUsY0FBYyxFQUEyQixNQUFNLGVBQWUsQ0FBQztBQUd4RTs7OztHQUlHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sZUFBZSxHQUFHLGNBQWMsQ0FBQztBQUU5Qzs7Ozs7R0FLRztBQUNILE1BQU0sQ0FBQyxNQUFNLG9CQUFvQixHQUFHLGtCQUFrQixDQUFDO0FBQ3ZELDZFQUE2RTtBQUM3RSxNQUFNLENBQUMsTUFBTSxxQkFBcUIsR0FBRyxtQkFBbUIsQ0FBQztBQUV6RDs7Ozs7Ozs7R0FRRztBQUNILE1BQU0sQ0FBQyxNQUFNLHFCQUFxQixHQUFHLG1CQUFtQixDQUFDO0FBRXpEOzs7OztHQUtHO0FBQ0gsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQUcsZ0JBQWdCLENBQUM7QUFFbEQ7Ozs7Ozs7Ozs7Ozs7R0FhRztBQUNILE1BQU0sQ0FBQyxNQUFNLDBCQUEwQixHQUFzQjtJQUMzRCxzQkFBc0I7SUFDdEIsb0JBQW9CO0lBQ3BCLHFCQUFxQjtJQUNyQixvQkFBb0I7SUFDcEIscUJBQXFCO0lBQ3JCLG1FQUFtRTtJQUNuRSxpRUFBaUU7SUFDakUsd0JBQXdCO0NBQ3pCLENBQUM7QUFRRjs7O0dBR0c7QUFDSCxNQUFNLFVBQVUsc0JBQXNCLENBQUMsT0FBb0M7SUFDekUsT0FBTyxRQUFRLElBQUksT0FBTyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDO0FBQ3RFLENBQUM7QUFFRDs7Ozs7Ozs7Ozs7Ozs7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RixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBQbHVnaW4gY29uZmlndXJhdGlvbiB0eXBlcyBhbmQgc2hhcmVkIGBSZXF1ZXN0Q29udGV4dGAga2V5cy5cbiAqXG4gKiBPd25zIHRoZSB0eXBlZCB7QGxpbmsgTWFzdHJhUGx1Z2luQ29uZmlnfSAodGhlIHBsdWdpbidzIHNsaWNlIG9mIEFwcEtpdFxuICogY29uZmlnKSBhbmQge0BsaW5rIE1BU1RSQV9DT05GSUdfU0NIRU1BfSwgdGhlIEpTT04gU2NoZW1hIHRoZSBtYW5pZmVzdFxuICogcHVibGlzaGVzIGZvciBpdCBzbyBzY2FmZm9sZGluZyB0b29scyBhbmQgYWdlbnRzIGNhbiByZWFkIHRoZSBvcHRpb24gc2V0LlxuICpcbiAqIFByZWNlZGVuY2UgcGVyIGZpZWxkIGlzIGV4cGxpY2l0IHBsdWdpbiBjb25maWcsIHRoZW4gdGhlIGVudmlyb25tZW50XG4gKiB2YXJpYWJsZSBuYW1lZCBvbiB0aGUgZmllbGQsIHRoZW4gYSBidWlsdC1pbiBkZWZhdWx0LlxuICpcbiAqIEtlcHQgaW4gYSBsZWFmIG1vZHVsZSBzbyBgcGx1Z2luLnRzYCwgYHNlcnZlci50c2AsIGBtb2RlbC50c2AsIGFuZFxuICogYG1lbW9yeS50c2AgY2FuIGltcG9ydCB0aGVtIHdpdGhvdXQgY3JlYXRpbmcgYSBjeWNsZS5cbiAqXG4gKiBAbW9kdWxlXG4gKi9cblxuaW1wb3J0IHsgZ2V0RXhlY3V0aW9uQ29udGV4dCwgdHlwZSBCYXNlUGx1Z2luQ29uZmlnLCB0eXBlIENvbmZpZ1NjaGVtYSB9IGZyb20gXCJAZGF0YWJyaWNrcy9hcHBraXRcIjtcbmltcG9ydCB7IGFwcGtpdCB9IGZyb20gXCJAZGJ4LXRvb2xzL2FwcGtpdFwiO1xuaW1wb3J0IHR5cGUgeyBCcmFuZENvbnRleHQgfSBmcm9tIFwiQGRieC10b29scy9zaGFyZWQtY29yZVwiO1xuaW1wb3J0IHR5cGUgeyBBZ2VudENvbmZpZyB9IGZyb20gXCJAbWFzdHJhL2NvcmUvYWdlbnRcIjtcbmltcG9ydCB0eXBlIHsgUmVxdWVzdENvbnRleHQgfSBmcm9tIFwiQG1hc3RyYS9jb3JlL3JlcXVlc3QtY29udGV4dFwiO1xuaW1wb3J0IHsgTUFTVFJBX1JFU09VUkNFX0lEX0tFWSwgTUFTVFJBX1RIUkVBRF9JRF9LRVkgfSBmcm9tIFwiQG1hc3RyYS9jb3JlL3JlcXVlc3QtY29udGV4dFwiO1xuaW1wb3J0IHR5cGUge1xuICBXb3Jrc3BhY2VTYW5kYm94LFxuICBXb3Jrc3BhY2VTYW5kYm94UmVzb2x2ZXIsXG4gIFdvcmtzcGFjZVRvb2xzQ29uZmlnLFxufSBmcm9tIFwiQG1hc3RyYS9jb3JlL3dvcmtzcGFjZVwiO1xuaW1wb3J0IHR5cGUgeyBQZ1ZlY3RvckNvbmZpZywgUG9zdGdyZXNTdG9yZUNvbmZpZyB9IGZyb20gXCJAbWFzdHJhL3BnXCI7XG5cbmltcG9ydCB0eXBlIHsgQW55TWFzdHJhQWdlbnREZWZpbml0aW9uLCBNYXN0cmFUb29scyB9IGZyb20gXCIuL2FnZW50cy50c1wiO1xuaW1wb3J0IHR5cGUgeyBHZW5pZVNwYWNlc0NvbmZpZyB9IGZyb20gXCIuL2dlbmllLnRzXCI7XG5pbXBvcnQgeyBJREVOVElUWV9NT0RFUywgdHlwZSBNYXN0cmFJZGVudGl0eU1vZGUgfSBmcm9tIFwiLi9pZGVudGl0eS50c1wiO1xuaW1wb3J0IHR5cGUgeyBMb2NhbFNraWxsTW91bnQsIFJlbW90ZVNraWxsc09wdGlvbiB9IGZyb20gXCIuL3JlbW90ZS1za2lsbHMudHNcIjtcblxuLyoqXG4gKiBgUmVxdWVzdENvbnRleHRgIGtleSB1bmRlciB3aGljaCB7QGxpbmsgTWFzdHJhU2VydmVyfSBzdG9yZXMgdGhlXG4gKiByZXNvbHZlZCBBcHBLaXQgdXNlci4gYG1vZGVsLnRzYCByZWFkcyBpdCB0byBtaW50IHVzZXItc2NvcGVkXG4gKiBEYXRhYnJpY2tzIHRva2Vucy5cbiAqL1xuZXhwb3J0IGNvbnN0IE1BU1RSQV9VU0VSX0tFWSA9IFwibWFzdHJhX191c2VyXCI7XG5cbi8qKlxuICogYFJlcXVlc3RDb250ZXh0YCBrZXlzIGZvciBBcHBLaXQgdXNlciBtZXRhZGF0YSBzdGFtcGVkIGJ5XG4gKiB7QGxpbmsgTWFzdHJhU2VydmVyfS4gU3VyZmFjZWQgYXMgdHJhY2UgbWV0YWRhdGEgdmlhXG4gKiB7QGxpbmsgVFJBQ0VfUkVRVUVTVF9DT05URVhUX0tFWVN9IHNvIHRyYWNlcyBhcmUgZmlsdGVyYWJsZSBieSB3aG9cbiAqIGlzc3VlZCB0aGUgcmVxdWVzdCB3aXRob3V0IGxlYWtpbmcgdGhlIGZ1bGwgdXNlciBvYmplY3QuXG4gKi9cbmV4cG9ydCBjb25zdCBNQVNUUkFfVVNFUl9OQU1FX0tFWSA9IFwibWFzdHJhX191c2VyTmFtZVwiO1xuLyoqIFJlcXVlc3QtY29udGV4dCBrZXkgY29udGFpbmluZyB0aGUgYXV0aGVudGljYXRlZCB1c2VyJ3MgZW1haWwgYWRkcmVzcy4gKi9cbmV4cG9ydCBjb25zdCBNQVNUUkFfVVNFUl9FTUFJTF9LRVkgPSBcIm1hc3RyYV9fdXNlckVtYWlsXCI7XG5cbi8qKlxuICogYFJlcXVlc3RDb250ZXh0YCBrZXkgZm9yIHRoZSBwZXItSFRUUC1yZXF1ZXN0IGlkIHN0YW1wZWQgYnlcbiAqIHtAbGluayBNYXN0cmFTZXJ2ZXJ9LiBSZWFkcyBgWC1SZXF1ZXN0LUlkYCBmcm9tIHRoZSBpbmNvbWluZ1xuICogaGVhZGVycyB3aGVuIHByZXNlbnQgKHNvIGFuIHVwc3RyZWFtIGxvYWQgYmFsYW5jZXIgLyBBUEkgZ2F0ZXdheVxuICogY2FuIGtlZXAgaXRzIHRyYWNlIGNvcnJlbGF0aW9uKSwgZmFsbHMgYmFjayB0byBhIGZyZXNobHkgbWludGVkXG4gKiBVVUlELiBFY2hvZWQgYmFjayBvbiB0aGUgcmVzcG9uc2UgYW5kIHN1cmZhY2VkIG9uIGV2ZXJ5IHNwYW4gdmlhXG4gKiB7QGxpbmsgVFJBQ0VfUkVRVUVTVF9DT05URVhUX0tFWVN9IHNvIGxvZ3MgYW5kIHRyYWNlcyBzaGFyZSBhXG4gKiBqb2luIGtleS5cbiAqL1xuZXhwb3J0IGNvbnN0IE1BU1RSQV9SRVFVRVNUX0lEX0tFWSA9IFwibWFzdHJhX19yZXF1ZXN0SWRcIjtcblxuLyoqXG4gKiBgUmVxdWVzdENvbnRleHRgIGtleSBmb3IgT0F1dGggc2NvcGVzIHBhcnNlZCBmcm9tIHRoZSBmb3J3YXJkZWRcbiAqIGFjY2VzcyB0b2tlbiBieSB7QGxpbmsgTWFzdHJhU2VydmVyLmNvbmZpZ3VyZVJlcXVlc3RDb250ZXh0U2NvcGVzfS5cbiAqIFdvcmtzcGFjZSBtb3VudHMgdGhhdCB0b3VjaCBEYXRhYnJpY2tzIHdvcmtzcGFjZSBmaWxlcyByZXF1aXJlXG4gKiBgd29ya3NwYWNlYCBvciBgYWxsLWFwaXNgIGluIHRoaXMgbGlzdC5cbiAqL1xuZXhwb3J0IGNvbnN0IE1BU1RSQV9TQ09QRVNfS0VZID0gXCJtYXN0cmFfX3Njb3Blc1wiO1xuXG4vKipcbiAqIENhbm9uaWNhbCBsaXN0IG9mIGBSZXF1ZXN0Q29udGV4dGAga2V5cyB3ZSB3YW50IE1hc3RyYSB0byBleHRyYWN0XG4gKiBhcyBtZXRhZGF0YSBvbiBldmVyeSBvYnNlcnZhYmlsaXR5IHNwYW4gKGFnZW50IHJ1bnMsIG1vZGVsIGNhbGxzLFxuICogdG9vbCBpbnZvY2F0aW9ucywgd29ya2Zsb3cgc3RlcHMpLlxuICpcbiAqIE1pcnJvcnMge0BsaW5rIGh0dHBzOi8vbWFzdHJhLmFpL2RvY3Mvb2JzZXJ2YWJpbGl0eS90cmFjaW5nL292ZXJ2aWV3I2F1dG9tYXRpYy1tZXRhZGF0YS1mcm9tLXJlcXVlc3Rjb250ZXh0fTpcbiAqIHBhc3NlZCB2ZXJiYXRpbSBpbnRvIGBPYnNlcnZhYmlsaXR5LmNvbmZpZ3NbKl0ucmVxdWVzdENvbnRleHRLZXlzYCxcbiAqIHNvIGFueSBrZXkgbGlzdGVkIGhlcmUgaXMgcmVhZCBmcm9tIGBSZXF1ZXN0Q29udGV4dGAgYXQgdHJhY2VcbiAqIHN0YXJ0IGFuZCBhdHRhY2hlZCBhcyBzY2FsYXIgc3BhbiBtZXRhZGF0YS4gS2VlcCB0aGUgc2V0IHRvIHBsYWluXG4gKiBzY2FsYXJzIC0gbmV2ZXIgaW5jbHVkZSB7QGxpbmsgTUFTVFJBX1VTRVJfS0VZfSAoaXQgY2FycmllcyB0aGVcbiAqIGZ1bGwgQXBwS2l0IGV4ZWN1dGlvbiBjb250ZXh0IHdpdGggYSBgV29ya3NwYWNlQ2xpZW50YCByZWZlcmVuY2UpLlxuICpcbiAqIE9yZGVyIGlzIHB1cmVseSBjb3NtZXRpYzsgTWFzdHJhIGRlLWR1cGVzIGludGVybmFsbHkuXG4gKi9cbmV4cG9ydCBjb25zdCBUUkFDRV9SRVFVRVNUX0NPTlRFWFRfS0VZUzogcmVhZG9ubHkgc3RyaW5nW10gPSBbXG4gIE1BU1RSQV9SRVNPVVJDRV9JRF9LRVksXG4gIE1BU1RSQV9USFJFQURfSURfS0VZLFxuICBNQVNUUkFfUkVRVUVTVF9JRF9LRVksXG4gIE1BU1RSQV9VU0VSX05BTUVfS0VZLFxuICBNQVNUUkFfVVNFUl9FTUFJTF9LRVksXG4gIC8vIE1vZGVsIG92ZXJyaWRlIGtleSBpcyBvd25lZCBieSBgc2VydmluZy50c2A7IHNwZWxsZWQgaW5saW5lIGhlcmVcbiAgLy8gc28gdGhpcyBtb2R1bGUgc3RheXMgbGVhZi1sZXZlbCAobm8gY3ljbGVzIHdpdGggYHNlcnZpbmcudHNgKS5cbiAgXCJtYXN0cmFfX21vZGVsX292ZXJyaWRlXCIsXG5dO1xuXG4vKiogQXBwS2l0IGV4ZWN1dGlvbiBjb250ZXh0IHBsdXMgdGhlIGNhbm9uaWNhbCB1c2VyIGlkLiAqL1xuZXhwb3J0IGludGVyZmFjZSBVc2VyIHtcbiAgaWQ6IHN0cmluZztcbiAgZXhlY3V0aW9uQ29udGV4dDogYXBwa2l0LkV4ZWN1dGlvbkNvbnRleHRMaWtlO1xufVxuXG4vKipcbiAqIENhbm9uaWNhbCBpZGVudGl0eSBmb3IgYW4gQXBwS2l0IGV4ZWN1dGlvbiBjb250ZXh0OiB0aGUgT0JPIHVzZXIgaWQgb24gYVxuICogdXNlci1zY29wZWQgY2FsbCwgdGhlIHNlcnZpY2UgcHJpbmNpcGFsIGlkIG90aGVyd2lzZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGV4ZWN1dGlvbkNvbnRleHRVc2VySWQoY29udGV4dDogYXBwa2l0LkV4ZWN1dGlvbkNvbnRleHRMaWtlKTogc3RyaW5nIHtcbiAgcmV0dXJuIFwidXNlcklkXCIgaW4gY29udGV4dCA/IGNvbnRleHQudXNlcklkIDogY29udGV4dC5zZXJ2aWNlVXNlcklkO1xufVxuXG4vKipcbiAqIFdobyBhIHR1cm4gaXMgQVRUUklCVVRFRCB0bywgd2hpY2ggaXMgbm90IGFsd2F5cyB3aG9zZSBEYXRhYnJpY2tzIGNyZWRlbnRpYWxcbiAqIHJ1bnMgaXQuIEFuIE9CTyBjb250ZXh0J3Mgb3duIHVzZXIgaWQgaXMgYXV0aG9yaXRhdGl2ZS4gVW5kZXIgdGhlIHNlcnZpY2VcbiAqIHByaW5jaXBhbCwgZXZlcnkgY2FsbGVyIHNoYXJlcyBvbmUgY3JlZGVudGlhbCwgc28gdGhlIGZvcndhcmRlZCB1c2VyIGlkIGlzXG4gKiB3aGF0IGtlZXBzIG1lbW9yeSB0aHJlYWRzIGFuZCBwZXItdXNlciBjYWNoZSBuYW1lc3BhY2VzIGRpc3RpbmN0OyB0aGUgc2VydmljZVxuICogcHJpbmNpcGFsIGlkIGlzIHRoZSBmbG9vciB3aGVuIG5vIHVzZXIgd2FzIGZvcndhcmRlZC5cbiAqXG4gKiBUaGlzIHJ1bGUgaGFzIHRvIGJlIGlkZW50aWNhbCBldmVyeXdoZXJlIGEgY2FjaGUga2V5IGlzIGJ1aWx0LCBzbyBib3RoIHRoZVxuICogd3JpdGUgc2lkZSAodGhlIGBSZXF1ZXN0Q29udGV4dGAgdXNlciBzdGFtcGVkIGJ5IGBzdGFtcFJlcXVlc3RDb250ZXh0VXNlcmApXG4gKiBhbmQgdGhlIHJlYWQgc2lkZSAodGhlIHBsdWdpbidzIG93biBBcHBLaXQgcm91dGVzLCB3aGljaCBoYXZlIGEgcmVxdWVzdCBidXRcbiAqIG5vIGBSZXF1ZXN0Q29udGV4dGApIGRlcml2ZSB0aGVpciBrZXkgZnJvbSB0aGlzIG9uZSBmdW5jdGlvbi4gV2hlbiB0aGUgdHdvXG4gKiBkaXNhZ3JlZWQsIGEgY2hhcnQgd3JpdHRlbiB1bmRlciB0aGUgZm9yd2FyZGVkIHVzZXIgaWQgd2FzIHJlYWQgYmFjayB1bmRlclxuICogdGhlIHNlcnZpY2UgcHJpbmNpcGFsIGlkIGFuZCB0aGUgZW1iZWQgcm91dGUgYW5zd2VyZWQgNDA0LCB3aGljaCB0aGUgY2hhdCBVSVxuICogcmVuZGVycyBhcyBhbiBleHBpcmVkIGNoYXJ0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gYXR0cmlidXRlZFVzZXJJZChcbiAgZXhlY3V0aW9uQ29udGV4dDogYXBwa2l0LkV4ZWN1dGlvbkNvbnRleHRMaWtlLFxuICBmb3J3YXJkZWRVc2VySWQ/OiBzdHJpbmcsXG4pOiBzdHJpbmcge1xuICBpZiAoXCJpc1VzZXJDb250ZXh0XCIgaW4gZXhlY3V0aW9uQ29udGV4dCkgcmV0dXJuIGV4ZWN1dGlvbkNvbnRleHRVc2VySWQoZXhlY3V0aW9uQ29udGV4dCk7XG4gIHJldHVybiBmb3J3YXJkZWRVc2VySWQgPz8gZXhlY3V0aW9uQ29udGV4dFVzZXJJZChleGVjdXRpb25Db250ZXh0KTtcbn1cblxuLyoqXG4gKiBJZGVudGl0eSBldmVyeSBwZXItdXNlciBjYWNoZSBlbnRyeSBpcyBuYW1lc3BhY2VkIHVuZGVyLCBzbyBhbiBPQk8gcmVzdWx0XG4gKiBjYW5ub3QgYmUgcmVhZCBiYWNrIGJ5IGFub3RoZXIgY2FsbGVyLlxuICpcbiAqIFByZWZlcnMgdGhlIHtAbGluayBVc2VyfSB0aGF0IHtAbGluayBNYXN0cmFTZXJ2ZXJ9IHN0YW1wcyBvbiB0aGUgcmVxdWVzdFxuICogY29udGV4dCwgd2hvc2UgaWQgYWxyZWFkeSBmb2xsb3dzIHtAbGluayBhdHRyaWJ1dGVkVXNlcklkfS4gVGhlIE1DUCB0cmFuc3BvcnRcbiAqIHJvdXRlcyBkbyBub3QgdGhyZWFkIHRoYXQgY29udGV4dCBpbnRvIHRvb2wgZXhlY3V0aW9uLCBzbyB0aG9zZSBmYWxsIGJhY2sgdG9cbiAqIHRoZSBhbWJpZW50IGV4ZWN1dGlvbiBjb250ZXh0ICh0aGUgYWN0aXZlIE9CTyBzY29wZSwgb3IgdGhlIHNlcnZpY2VcbiAqIHByaW5jaXBhbCkuIEEgY2FsbGVyIGhvbGRpbmcgYW4gZXhwcmVzcyByZXF1ZXN0IHNob3VsZCBidWlsZCBpdHMga2V5IGZyb21cbiAqIHtAbGluayBhdHRyaWJ1dGVkVXNlcklkfSBpbnN0ZWFkLCBzbyB0aGUgZm9yd2FyZGVkIHVzZXIgaXMgbm90IGxvc3QuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlVXNlcktleShyZXF1ZXN0Q29udGV4dD86IFJlcXVlc3RDb250ZXh0KTogc3RyaW5nIHtcbiAgY29uc3QgdXNlciA9IHJlcXVlc3RDb250ZXh0Py5nZXQoTUFTVFJBX1VTRVJfS0VZKSBhcyBVc2VyIHwgdW5kZWZpbmVkO1xuICByZXR1cm4gdXNlcj8uaWQgPz8gZXhlY3V0aW9uQ29udGV4dFVzZXJJZChnZXRFeGVjdXRpb25Db250ZXh0KCkpO1xufVxuXG4vKiogUGdWZWN0b3IgY29uZmlnIHdpdGggYW4gb3B0aW9uYWwgTWFzdHJhIHN0b3JlIGlkLiAqL1xuZXhwb3J0IHR5cGUgTWFzdHJhTWVtb3J5Q29uZmlnID0gUGdWZWN0b3JDb25maWcgJiB7XG4gIGlkPzogc3RyaW5nO1xufTtcblxuLyoqIE1hc3RyYSBuYXRpdmUgd29ya3NwYWNlIHNraWxsLXNlYXJjaCBjb25maWd1cmF0aW9uLiAqL1xuZXhwb3J0IGludGVyZmFjZSBNYXN0cmFXb3Jrc3BhY2VTa2lsbHNDb25maWcge1xuICAvKiogTWF4aW11bSBza2lsbCBtYXRjaGVzIHJldHVybmVkIGJ5IG9uZSBzZWFyY2guIERlZmF1bHRzIHRvIDUuICovXG4gIHRvcEs/OiBudW1iZXI7XG4gIC8qKiBNaW5pbXVtIEJNMjUgcmVsZXZhbmNlIHNjb3JlLiBEZWZhdWx0cyB0byAwLjEuICovXG4gIG1pblNjb3JlPzogbnVtYmVyO1xuICAvKiogTG9hZGVkLXNraWxsIHRocmVhZC1zdGF0ZSBUVEwgaW4gbWlsbGlzZWNvbmRzLiBEZWZhdWx0cyB0byBvbmUgaG91ci4gKi9cbiAgdHRsTXM/OiBudW1iZXI7XG59XG5cbi8qKiBOYXRpdmUgTWFzdHJhIENvZGUgTW9kZSBzZXR0aW5ncyBmb3Igc2FuZGJveGVkIG11bHRpLXRvb2wgb3JjaGVzdHJhdGlvbi4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTWFzdHJhQ29kZU1vZGVDb25maWcge1xuICAvKiogR2VuZXJhdGVkIG9yY2hlc3RyYXRpb24gdG9vbCBpZC4gRGVmYXVsdHMgdG8gYGV4ZWN1dGVfdHlwZXNjcmlwdGAuICovXG4gIGlkPzogc3RyaW5nO1xuICAvKiogTWF4aW11bSBvcmNoZXN0cmF0aW9uIHByb2dyYW0gcnVudGltZSBpbiBtaWxsaXNlY29uZHMuIERlZmF1bHRzIHRvIDMwIHNlY29uZHMuICovXG4gIHRpbWVvdXQ/OiBudW1iZXI7XG59XG5cbi8qKlxuICogRmluZS1ncmFpbmVkIGNvbnRyb2wgZm9yIHRoZSBvcHRpb25hbCBNQ1Agc2VydmVyIGV4cG9zdXJlXG4gKiAoe0BsaW5rIE1hc3RyYVBsdWdpbkNvbmZpZy5tY3B9KS4gRXZlcnkgZmllbGQgaXMgb3B0aW9uYWw7IHRoZSBvYmplY3RcbiAqIGZvcm0gb25seSBuZWVkcyB0byBzZXQgd2hhdCBkaWZmZXJzIGZyb20gdGhlIGRlZmF1bHRzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE1hc3RyYU1jcENvbmZpZyB7XG4gIC8qKlxuICAgKiBTZXJ2ZXIgaWQgdXNlZCBpbiB0aGUgcm91dGUgcGF0aCAoYC9tY3AvPHNlcnZlcklkPi8uLi5gKSBhbmQgYXMgdGhlXG4gICAqIE1DUCByZWdpc3RyeSBpZC4gRGVmYXVsdHMgdG8gdGhlIHBsdWdpbidzIHJlZ2lzdGVyZWQgbmFtZS5cbiAgICovXG4gIHNlcnZlcklkPzogc3RyaW5nO1xuICAvKiogRGlzcGxheSBuYW1lIGFkdmVydGlzZWQgb3ZlciBNQ1AuIERlZmF1bHRzIHRvIGBcIjxkaXNwbGF5TmFtZT4gTUNQXCJgLiAqL1xuICBuYW1lPzogc3RyaW5nO1xuICAvKiogU2VtYW50aWMgdmVyc2lvbiBhZHZlcnRpc2VkIG92ZXIgTUNQLiBEZWZhdWx0cyB0byBgXCIxLjAuMFwiYC4gKi9cbiAgdmVyc2lvbj86IHN0cmluZztcbiAgLyoqIE9wdGlvbmFsIGh1bWFuLXJlYWRhYmxlIGRlc2NyaXB0aW9uIGFkdmVydGlzZWQgb3ZlciBNQ1AuICovXG4gIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICAvKipcbiAgICogRXhwb3NlIGV2ZXJ5IHJlZ2lzdGVyZWQgYWdlbnQgYXMgYW4gYGFza188YWdlbnRJZD5gIE1DUCB0b29sLlxuICAgKiBEZWZhdWx0cyB0byBgdHJ1ZWAgLSB0aGlzIGlzIHRoZSBcImxldmVyYWdlIHRoZSBNYXN0cmEgYWdlbnRzIG92ZXJcbiAgICogTUNQXCIgYmVoYXZpb3IgbW9zdCBjYWxsZXJzIHdhbnQuXG4gICAqL1xuICBhZ2VudHM/OiBib29sZWFuO1xuICAvKipcbiAgICogQWxzbyBleHBvc2UgdGhlIHBsdWdpbidzIGFtYmllbnQgdG9vbHMgKHRoZSBidWlsdC1pbiBgcmVuZGVyX2RhdGFgXG4gICAqIHBsdXMgYW55dGhpbmcgaW4gYGNvbmZpZy50b29sc2ApIGFzIE1DUCB0b29scy4gRGVmYXVsdHMgdG8gYGZhbHNlYDpcbiAgICogdGhlIGFtYmllbnQgdG9vbHMgYXNzdW1lIGFuIGluLXByb2Nlc3MgY2hhdCB0dXJuICh0aGV5IHB1Ymxpc2hcbiAgICogd3JpdGVyIGV2ZW50cyB0aGUgY2hhdCBVSSBjb25zdW1lcyksIHNvIHRoZXkgYXJlbid0IHVzZWZ1bCB0byBhXG4gICAqIHN0YW5kYWxvbmUgTUNQIGNsaWVudC4gVHVybiB0aGlzIG9uIG9ubHkgd2hlbiB0aG9zZSB0b29scyBhcmUgc2FmZVxuICAgKiB0byBjYWxsIG91dC1vZi1iYW5kLlxuICAgKi9cbiAgdG9vbHM/OiBib29sZWFuO1xuICAvKipcbiAgICogRXh0cmEgdG9vbHMgdG8gZXhwb3NlIG92ZXIgTUNQIGJleW9uZCB0aGUgYWdlbnQgLyBhbWJpZW50IHNldHMuXG4gICAqIFVzZSB0aGlzIGZvciB0b29scyB3cml0dGVuIHNwZWNpZmljYWxseSBmb3IgTUNQIGNvbnN1bWVycy5cbiAgICovXG4gIGV4dHJhVG9vbHM/OiBNYXN0cmFUb29scztcbn1cblxuLyoqIENvbmZpZ3VyYXRpb24gYWNjZXB0ZWQgYnkgdGhlIE1hc3RyYSBBcHBLaXQgcGx1Z2luLiAqL1xuZXhwb3J0IGludGVyZmFjZSBNYXN0cmFQbHVnaW5Db25maWcgZXh0ZW5kcyBCYXNlUGx1Z2luQ29uZmlnIHtcbiAgLyoqXG4gICAqIFJ1biB0dXJucyB0aHJvdWdoIE1hc3RyYSdzIGV2ZW50ZWQgZHVyYWJsZSBhZ2VudCBzbyBleGVjdXRpb24gY29udGludWVzXG4gICAqIGFmdGVyIGEgYnJvd3NlciBkaXNjb25uZWN0IGFuZCBjYW4gYmUgb2JzZXJ2ZWQgYWdhaW4gYnkgcnVuIGlkLiBEZWZhdWx0c1xuICAgKiB0byBgdHJ1ZWAuXG4gICAqL1xuICBiYWNrZ3JvdW5kVHVybnM/OiBib29sZWFuO1xuICAvKiogQUkgU0RLIHByb3ZpZGVyLW9wdGlvbnMgbmFtZXNwYWNlLiBEZWZhdWx0cyB0byBgXCJvcGVuYWlcImA7IG5vIGVudiBmYWxsYmFjay4gKi9cbiAgcHJvdmlkZXJJZD86IHN0cmluZztcbiAgLyoqXG4gICAqIFBvc3RncmVzU3RvcmUgZm9yIE1hc3RyYSB0aHJlYWRzL21lc3NhZ2VzLiBgdHJ1ZWAgY2FwdHVyZXMgdGhlXG4gICAqIGBsYWtlYmFzZWAgcGx1Z2luJ3MgZXhpc3Rpbmcgc2VydmljZS1wcmluY2lwYWwgcG9vbDsgYW4gb2JqZWN0IG9wZW5zIGFcbiAgICogc2VwYXJhdGVseSBjb25maWd1cmVkIHN0b3JlLlxuICAgKi9cbiAgc3RvcmFnZT86IGJvb2xlYW4gfCBQb3N0Z3Jlc1N0b3JlQ29uZmlnO1xuICAvKipcbiAgICogUGdWZWN0b3Igc3RvcmUgZm9yIE1hc3RyYSBtZW1vcnkgcmVjYWxsLiBgdHJ1ZWAgY2FwdHVyZXMgdGhlXG4gICAqIGBsYWtlYmFzZWAgcGx1Z2luJ3MgZXhpc3Rpbmcgc2VydmljZS1wcmluY2lwYWwgcG9vbDsgYW4gb2JqZWN0IG9wZW5zIGFcbiAgICogc2VwYXJhdGVseSBjb25maWd1cmVkIHN0b3JlLlxuICAgKi9cbiAgbWVtb3J5PzogYm9vbGVhbiB8IE1hc3RyYU1lbW9yeUNvbmZpZztcbiAgLyoqXG4gICAqIEV4cG9zZSBleGVjdXRhYmxlIHRvb2xzIGF2YWlsYWJsZSB0byB0aGUgY3VycmVudCByZXF1ZXN0IHRocm91Z2ggbmF0aXZlXG4gICAqIE1hc3RyYSBDb2RlIE1vZGUuIERlZmF1bHRzIG9uIHdoZW5ldmVyIHRoZSByZXF1ZXN0IGhhcyBleGVjdXRhYmxlIHRvb2xzLlxuICAgKiBUaGUgcGx1Z2luIHNlbGVjdHMgTWFzdHJhJ3MgaXNvbGF0ZWQtdm0gdHJhbnNwb3J0IG9uY2UgZHVyaW5nIHN0YXJ0dXAgYW5kXG4gICAqIGZhbGxzIGJhY2sgdG8gTWFzdHJhIFF1aWNrSlMgd2hlbiB0aGUgbmF0aXZlIHRyYW5zcG9ydCBpcyB1bmF2YWlsYWJsZS5cbiAgICogVGhlc2UgdHJhbnNwb3J0cyBkbyBub3QgZXhlY3V0ZSB0aHJvdWdoIHRoZSB3b3Jrc3BhY2UgY29tbWFuZCBzYW5kYm94O1xuICAgKiBTU0ggaXMgdXNlZCBvbmx5IHdoZW4gYW4gZXhwb3NlZCBTU0gtYmFja2VkIHRvb2wgaXMgY2FsbGVkLiBTZXQgYGZhbHNlYCB0b1xuICAgKiBvcHQgb3V0LlxuICAgKi9cbiAgY29kZU1vZGU/OiBib29sZWFuIHwgTWFzdHJhQ29kZU1vZGVDb25maWc7XG4gIC8qKlxuICAgKiBTYW5kYm94IGZvciBhdXRvLWNyZWF0ZWQgYWdlbnQgd29ya3NwYWNlcy4gRGVmYXVsdHMgdG8gTW9udHkuIGBmYWxzZWBcbiAgICogZGlzYWJsZXMgY29tbWFuZCBleGVjdXRpb247IGB0cnVlYCBvciBgXCJtb250eVwiYCBzZWxlY3RzIE1vbnR5OyBhbiBleHBsaWNpdFxuICAgKiBNYXN0cmEgc2FuZGJveCBvciByZXNvbHZlciBzdXBwbGllcyBhIHJlbW90ZSB0cmFuc3BvcnQuIEFuIGFnZW50IHdpdGggYW5cbiAgICogZXhwbGljaXQgY3VzdG9tIGB3b3Jrc3BhY2VgIGtlZXBzIHRoYXQgd29ya3NwYWNlIGFuZCBpdHMgc2FuZGJveC5cbiAgICovXG4gIHNhbmRib3g/OiBib29sZWFuIHwgXCJtb250eVwiIHwgV29ya3NwYWNlU2FuZGJveCB8IFdvcmtzcGFjZVNhbmRib3hSZXNvbHZlcjtcbiAgLyoqIEFkZCB1c2VyLXNjb3BlZCBgL3RtcGAgb25seSB3aGVuIG5vIGNvbmZpZ3VyZWQgd29ya3NwYWNlIHBhdGggbW91bnRzIHdyaXRhYmxlLiAqL1xuICB3b3Jrc3BhY2VGYWxsYmFja1RvVG1wPzogYm9vbGVhbjtcbiAgLyoqIE5hdGl2ZSBNYXN0cmEgd29ya3NwYWNlIHRvb2wgYXZhaWxhYmlsaXR5LCBhcHByb3ZhbCwgYW5kIGhvb2sgY29uZmlndXJhdGlvbi4gKi9cbiAgd29ya3NwYWNlVG9vbHM/OiBXb3Jrc3BhY2VUb29sc0NvbmZpZztcbiAgLyoqXG4gICAqIFVzZSBNYXN0cmEncyBuYXRpdmUgd29ya3NwYWNlIHNraWxsIG1hbmFnZXIuIERlZmF1bHRzIHRvIHRydWUuIFBhc3MgYW5cbiAgICogb2JqZWN0IHRvIHR1bmUgb24tZGVtYW5kIGRpc2NvdmVyeSBhbmQgbG9hZGVkLXNraWxsIHN0YXRlLlxuICAgKi9cbiAgd29ya3NwYWNlU2tpbGxzPzogYm9vbGVhbiB8IE1hc3RyYVdvcmtzcGFjZVNraWxsc0NvbmZpZztcbiAgLyoqXG4gICAqIENvZGUtZGVmaW5lZCBhZ2VudHMuIEFjY2VwdHMgdGhyZWUgc2hhcGVzIGZvciBjb252ZW5pZW5jZTpcbiAgICpcbiAgICogLSAqKlJlY29yZCoqOiBgeyBhbmFseXN0OiBkZWYsIGhlbHBlcjogZGVmIH1gIC0ga2V5cyBiZWNvbWUgdGhlXG4gICAqICAgcmVnaXN0ZXJlZCBpZHMgYW5kIHRoZSBmaXJzdCBrZXkgaXMgdGhlIGRlZmF1bHQuXG4gICAqIC0gKipTaW5nbGUgZGVmaW5pdGlvbioqOiBgZGVmYCAtIHJlZ2lzdGVyZWQgdW5kZXJcbiAgICogICBgc2x1Z2lmeShkZWYubmFtZSlgIChvciBgXCJkZWZhdWx0XCJgIHdoZW4gYG5hbWVgIGlzIG9taXR0ZWQpIGFuZFxuICAgKiAgIGF1dG9tYXRpY2FsbHkgbWFya2VkIGFzIHRoZSBkZWZhdWx0IGFnZW50LlxuICAgKiAtICoqQXJyYXkqKjogYFtkZWYxLCBkZWYyXWAgLSBlYWNoIHJlZ2lzdGVyZWQgdW5kZXJcbiAgICogICBgc2x1Z2lmeShkZWYubmFtZSlgIChvciBgYWdlbnRfJHtpfWAgd2hlbiBgbmFtZWAgaXMgb21pdHRlZCk7XG4gICAqICAgdGhlIGZpcnN0IGVudHJ5IGlzIHRoZSBkZWZhdWx0LlxuICAgKlxuICAgKiBFYWNoIGVudHJ5IGJlY29tZXMgYSBNYXN0cmEgYEFnZW50YCByZWFjaGFibGUgYXRcbiAgICogYC9hcGkvPHBsdWdpbj4vcm91dGUvY2hhdC88aWQ+YCAodGhlIGNoYXQgcm91dGUgYWxzbyBtYXRjaGVzXG4gICAqIGA6YWdlbnRJZGApLiBXaGVuIGBhZ2VudHNgIGlzIG9taXR0ZWQgZW50aXJlbHksIHRoZSBwbHVnaW5cbiAgICogcmVnaXN0ZXJzIGEgc2luZ2xlIGJ1aWx0LWluIGBkZWZhdWx0YCBhbmFseXN0IHNvIHRoZSBiYXJlXG4gICAqIGBtYXN0cmEoKWAgY2FsbCBzdGlsbCBtb3VudHMgYSB3b3JraW5nIGNoYXQgZW5kcG9pbnQuXG4gICAqXG4gICAqIEBleGFtcGxlIFNpbmdsZS1hZ2VudCBzaG9ydGhhbmRcbiAgICogYGBgdHNcbiAgICogbWFzdHJhKHtcbiAgICogICBhZ2VudHM6IGNyZWF0ZUFnZW50KHsgaW5zdHJ1Y3Rpb25zOiBcIi4uLlwiIH0pLFxuICAgKiB9KTtcbiAgICogYGBgXG4gICAqXG4gICAqIEBleGFtcGxlIEFycmF5XG4gICAqIGBgYHRzXG4gICAqIG1hc3RyYSh7XG4gICAqICAgYWdlbnRzOiBbXG4gICAqICAgICBjcmVhdGVBZ2VudCh7IG5hbWU6IFwiYW5hbHlzdFwiLCBpbnN0cnVjdGlvbnM6IFwiLi4uXCIgfSksXG4gICAqICAgICBjcmVhdGVBZ2VudCh7IG5hbWU6IFwiaGVscGVyXCIsIGluc3RydWN0aW9uczogXCIuLi5cIiB9KSxcbiAgICogICBdLFxuICAgKiB9KTtcbiAgICogYGBgXG4gICAqXG4gICAqIEBleGFtcGxlIFJlY29yZCAoZXhwbGljaXQgaWRzKVxuICAgKiBgYGB0c1xuICAgKiBtYXN0cmEoe1xuICAgKiAgIGFnZW50czoge1xuICAgKiAgICAgYW5hbHlzdDogY3JlYXRlQWdlbnQoeyBpbnN0cnVjdGlvbnM6IFwiLi4uXCIgfSksXG4gICAqICAgICBoZWxwZXI6IGNyZWF0ZUFnZW50KHsgaW5zdHJ1Y3Rpb25zOiBcIi4uLlwiIH0pLFxuICAgKiAgIH0sXG4gICAqICAgZGVmYXVsdEFnZW50OiBcImFuYWx5c3RcIixcbiAgICogfSk7XG4gICAqIGBgYFxuICAgKi9cbiAgYWdlbnRzPzpcbiAgICB8IFJlY29yZDxzdHJpbmcsIEFueU1hc3RyYUFnZW50RGVmaW5pdGlvbj5cbiAgICB8IEFueU1hc3RyYUFnZW50RGVmaW5pdGlvblxuICAgIHwgQW55TWFzdHJhQWdlbnREZWZpbml0aW9uW107XG4gIC8qKlxuICAgKiBBbWJpZW50IHRvb2xzIHNwcmVhZCBpbnRvIGV2ZXJ5IHJlZ2lzdGVyZWQgYWdlbnQncyB0b29scyByZWNvcmQ7XG4gICAqIHBlci1hZ2VudCB0b29scyB3aW4gb24ga2V5IGNvbGxpc2lvbi4gVXNlIGZvciBhIHNtYWxsIHNoYXJlZFxuICAgKiBsaWJyYXJ5OyBmb3IgcGVyLWFnZW50IHRvb2xzIHNldCBgYWdlbnRzW2lkXS50b29sc2AgaW5zdGVhZC5cbiAgICovXG4gIHRvb2xzPzogTWFzdHJhVG9vbHM7XG4gIC8qKlxuICAgKiBBZ2VudCBpZCB1c2VkIHdoZW4gdGhlIGNsaWVudCBkb2Vzbid0IHNwZWNpZnkgb25lICh0aGUgYmFyZSxcbiAgICogdW4tc3VmZml4ZWQgaGlzdG9yeSAvIHN1Z2dlc3Rpb25zIHJvdXRlcyByZXNvbHZlIHRvIGl0KS5cbiAgICogRGVmYXVsdHMgdG8gdGhlIGZpcnN0IGtleSBpbiBgYWdlbnRzYCAob3IgYFwiZGVmYXVsdFwiYCB3aGVuXG4gICAqIGBhZ2VudHNgIGlzIG9taXR0ZWQpLiBNdXN0IG1hdGNoIGFuIGlkIGluIGBhZ2VudHNgIHdoZW4gYm90aCBhcmVcbiAgICogc2V0OyBhIG1pc21hdGNoIHRocm93cyBhdCBzZXR1cCB3aXRoIHRoZSBhdmFpbGFibGUgY2FuZGlkYXRlcy5cbiAgICovXG4gIGRlZmF1bHRBZ2VudD86IHN0cmluZztcbiAgLyoqXG4gICAqIFBsdWdpbi1sZXZlbCBkZWZhdWx0IG1vZGVsIGFwcGxpZWQgdG8gZXZlcnkgYWdlbnQgdGhhdCBvbWl0cyBpdHNcbiAgICogb3duIGBtb2RlbGAuIE1pcnJvcnMgQXBwS2l0J3MgYGFnZW50cyh7IGRlZmF1bHRNb2RlbCB9KWAuXG4gICAqXG4gICAqIC0gYHN0cmluZ2A6IHNob3J0aGFuZCBmb3IgXCJ1c2UgdGhlIE9CTyBhdXRvLXJlc29sdmVyIGJ1dCBzd2FwIHRoZVxuICAgKiAgIGBtb2RlbElkYFwiIChlLmcuIGBcImRhdGFicmlja3MtY2xhdWRlLXNvbm5ldC00LTZcImApLlxuICAgKiAtIEFueSBvdGhlciBNYXN0cmEgYER5bmFtaWNBcmd1bWVudDxNYXN0cmFNb2RlbENvbmZpZz5gOiBwYXNzZWRcbiAgICogICB0aHJvdWdoIHZlcmJhdGltLiBVc2UgdGhpcyB3aGVuIHlvdSBuZWVkIGZ1bGwgY29udHJvbCBvdmVyIGF1dGhcbiAgICogICBvciBgcHJvdmlkZXJJZGAuXG4gICAqXG4gICAqIFJlc29sdXRpb24gb3JkZXIgcGVyIGFnZW50OiBgZGVmLm1vZGVsYCDihpIgYGRlZmF1bHRNb2RlbGAg4oaSXG4gICAqIGBEQVRBQlJJQ0tTX1NFUlZJTkdfRU5EUE9JTlRfTkFNRWAg4oaSIGJ1aWx0LWluIGAvc2VydmluZy1lbmRwb2ludHNgXG4gICAqIHJlc29sdmVyLlxuICAgKi9cbiAgZGVmYXVsdE1vZGVsPzogQWdlbnRDb25maWdbXCJtb2RlbFwiXSB8IHN0cmluZztcbiAgLyoqXG4gICAqIEZ1enp5LW1hdGNoIGxvb3NlIG1vZGVsIG5hbWVzIChgXCJjbGF1ZGUgc29ubmV0XCJgKSBhZ2FpbnN0IHRoZSB3b3Jrc3BhY2Unc1xuICAgKiBNb2RlbCBTZXJ2aW5nIGVuZHBvaW50cy4gRGVmYXVsdHMgdG8gYHRydWVgOyBubyBlbnYgZmFsbGJhY2suXG4gICAqXG4gICAqIFNldCBgZmFsc2VgIHRvIHJlcXVpcmUgZXhhY3QgZW5kcG9pbnQgbmFtZXMgZXZlcnl3aGVyZS5cbiAgICovXG4gIG1vZGVsRnV6enlNYXRjaD86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBGdXNlLmpzIHNjb3JlIHRocmVzaG9sZCBmb3IgdGhlIGZ1enp5IG1hdGNoZXIsIDAgKGV4YWN0KSB0byAxIChhbnl0aGluZykuXG4gICAqIERlZmF1bHRzIHRvIGAwLjRgOyBubyBlbnYgZmFsbGJhY2suXG4gICAqXG4gICAqIExvd2VyIHZhbHVlcyByZWplY3QgbG9vc2UgbWF0Y2hlczsgcmFpc2UgaXQgaWYgeW91IGhhdmUgYSBzcHJhd2xpbmdcbiAgICogZW5kcG9pbnQgY2F0YWxvZ3VlIHdpdGggc2ltaWxhci1sb29raW5nIG5hbWVzLlxuICAgKi9cbiAgbW9kZWxGdXp6eVRocmVzaG9sZD86IG51bWJlcjtcbiAgLyoqXG4gICAqIFRUTCBmb3IgdGhlIGluLW1lbW9yeSBzZXJ2aW5nLWVuZHBvaW50cyBsaXN0IGNhY2hlLCBpbiBtaWxsaXNlY29uZHMuXG4gICAqIERlZmF1bHRzIHRvIDUgbWludXRlczsgbm8gZW52IGZhbGxiYWNrLlxuICAgKlxuICAgKiBUaGUgY2FjaGUgaXMgcGVyIHdvcmtzcGFjZSBob3N0IGFuZCBzaGFyZWQgYWNyb3NzIHVzZXJzOyBjb25jdXJyZW50XG4gICAqIGNhbGxlcnMgY29hbGVzY2Ugb24gYSBzaW5nbGUgaW4tZmxpZ2h0IGZldGNoLlxuICAgKi9cbiAgbW9kZWxDYWNoZVR0bE1zPzogbnVtYmVyO1xuICAvKipcbiAgICogTGV0IGNsaWVudHMgcGljayB0aGUgYmFja2luZyBlbmRwb2ludCBwZXIgcmVxdWVzdC4gRGVmYXVsdHMgdG8gYHRydWVgO1xuICAgKiBubyBlbnYgZmFsbGJhY2suXG4gICAqXG4gICAqIFJlYWRzIHRoZSBgWC1NYXN0cmEtTW9kZWxgIGhlYWRlciwgdGhlIGA/bW9kZWw9YCBxdWVyeSBzdHJpbmcsIG9yIGFcbiAgICogYG1vZGVsYCBib2R5IGZpZWxkLCBpbiB0aGF0IG9yZGVyLiBEaXNhYmxlIHdoZW4gcnVubmluZyBtdWx0aS10ZW5hbnRcbiAgICogd2hlcmUgdW50cnVzdGVkIGNsaWVudHMgc2hvdWxkbid0IGNob29zZSB0aGUgZW5kcG9pbnQuXG4gICAqL1xuICBtb2RlbE92ZXJyaWRlPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIFByaW9yaXR5LW9yZGVyZWQgbGlzdCBvZiBlbmRwb2ludCBuYW1lcyB0cmllZCAqZmlyc3QqIHdoZW4gbm9cbiAgICogYWdlbnQgLyBwbHVnaW4gLyBlbnYgLyByZXF1ZXN0LW92ZXJyaWRlIG1vZGVsIGlkIGlzIHNldCwgYWhlYWQgb2ZcbiAgICogdGhlIGR5bmFtaWMgc2NvcmUtY2xhc3NpZmllZCBjYXRhbG9ndWUuIFRoZSByZXNvbHZlciBwaWNrcyB0aGVcbiAgICogZmlyc3QgaWQgdGhhdCBpcyBhY3R1YWxseSBwcmVzZW50IGluIHRoZSB3b3Jrc3BhY2Unc1xuICAgKiBgL3NlcnZpbmctZW5kcG9pbnRzYCBsaXN0aW5nLlxuICAgKlxuICAgKiBXaGVuIHVuc2V0LCByZXNvbHV0aW9uIGlzIGRyaXZlbiBieSB0aGUgbGl2ZSBGb3VuZGF0aW9uIE1vZGVsIEFQSVxuICAgKiBgcXVhbGl0eWAgLyBgc3BlZWRgIC8gYGNvc3RgIHNjb3JlczogZW5kcG9pbnRzIGFyZSBjbGFzc2lmaWVkIGludG9cbiAgICogY2hhdCBjbGFzc2VzIChgY2xhc3NpZnlFbmRwb2ludHNgKSBhbmQgd2Fsa2VkIGJlc3QtZmlyc3RcbiAgICogKENoYXRUaGlua2luZyAtPiBDaGF0QmFsYW5jZWQgLT4gQ2hhdEZhc3QpLiBUaGUgYXV0b21hdGljIGRlZmF1bHQgaXNcbiAgICogbGl2ZS1vbmx5IGFuZCBmYWlscyB3aGVuIG5vIG1hdGNoaW5nIGVuZHBvaW50IGlzIGN1cnJlbnRseSBhdmFpbGFibGUuXG4gICAqIFNldCB0aGlzIHRvIHBpbiBhIHJlZ3VsYXRlZCB3b3Jrc3BhY2UgdG8gYW4gYXBwcm92ZWQgc3Vic2V0LCBvciB0byBwdXRcbiAgICogY3VzdG9tIGVuZHBvaW50cyBpbiBmcm9udCBvZiB0aGUgYXV0by1jbGFzc2lmaWVkIGNhdGFsb2d1ZS5cbiAgICovXG4gIGRlZmF1bHRNb2RlbEZhbGxiYWNrcz86IHJlYWRvbmx5IHN0cmluZ1tdO1xuICAvKipcbiAgICogV2hlbiBgdHJ1ZWAgKGRlZmF1bHQpLCBldmVyeSBhZ2VudCBnZXRzIGEgYnVpbHQtaW4gaW5wdXRcbiAgICogcHJvY2Vzc29yIHRoYXQgc3RyaXBzIGBjaGFydElkYCBmaWVsZHMgZnJvbSBwcmlvciBhc3Npc3RhbnRcbiAgICogdG9vbC1pbnZvY2F0aW9uIHJlc3VsdHMgYmVmb3JlIHRoZXkgcmVhY2ggdGhlIG1vZGVsLiBUaGlzXG4gICAqIHByZXZlbnRzIHRoZSBtb2RlbCBmcm9tIHJldXNpbmcgdHVybi1zY29wZWQgY2hhcnRJZHMgaXQgc2Vlc1xuICAgKiBpbiBtZW1vcnkgcmVjYWxsICh3aGljaCB3b3VsZCBsZWF2ZSBgW2NoYXJ0OjxpZD5dYCBtYXJrZXJzXG4gICAqIHBvaW50aW5nIGF0IHdyaXRlciBldmVudHMgdGhhdCBubyBsb25nZXIgZXhpc3QpLlxuICAgKlxuICAgKiBTZXQgdG8gYGZhbHNlYCB0byBvcHQgb3V0IC0gdXNlZnVsIGlmIGEgbm9uLWRlZmF1bHQgYWdlbnRcbiAgICogbmVlZHMgZnVsbCB2aXNpYmlsaXR5IGludG8gcHJpb3IgY2hhcnRJZHMgKGUuZy4gYW4gYXVkaXRcbiAgICogYWdlbnQgcmVhc29uaW5nIGFib3V0IGNoYXJ0IGxpbmVhZ2UpLlxuICAgKi9cbiAgc3RyaXBTdGFsZUNoYXJ0cz86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBTdHlsZSBndWFyZHJhaWxzIGFwcGVuZGVkIHRvIGV2ZXJ5IGFnZW50J3MgYGluc3RydWN0aW9uc2AgdG8gY3VyYlxuICAgKiBjb21tb24gTExNLWlzbXMgKGVtIGRhc2hlcywgZW1vamlzLCBzeWNvcGhhbnRpYyBvcGVuZXJzLCB0aHJvd2F3YXlcbiAgICogY2xvc2VycywgZXhjZXNzaXZlIGhlZGdpbmcpLlxuICAgKlxuICAgKiAtIGB1bmRlZmluZWRgIChkZWZhdWx0KTogdXNlIHRoZSBidWlsdC1pblxuICAgKiAgIGBERUZBVUxUX1NUWUxFX0lOU1RSVUNUSU9OU2AgZnJvbSBgYWdlbnRzLnRzYC5cbiAgICogLSBgc3RyaW5nYDogcmVwbGFjZSB0aGUgZGVmYXVsdCB3aXRoIHRoZSBzdXBwbGllZCBibG9jay5cbiAgICogLSBgZmFsc2VgOiBkaXNhYmxlIGVudGlyZWx5IChhZ2VudHMgc2VlIG9ubHkgdGhlaXIgYmVzcG9rZVxuICAgKiAgIGBpbnN0cnVjdGlvbnNgKS5cbiAgICpcbiAgICogQXBwZW5kZWQgKG5vdCBwcmVwZW5kZWQpIHNvIHRoZSBhZ2VudCdzIHJvbGUgYW5kIHJ1bGVzIGNvbWUgZmlyc3RcbiAgICogYW5kIHRoZSBzdHlsZSBibG9jayBsZWFucyBvbiB0aGUgbW9kZWwncyByZWNlbmN5IGJpYXMuXG4gICAqL1xuICBzdHlsZUluc3RydWN0aW9ucz86IHN0cmluZyB8IGZhbHNlO1xuICAvKipcbiAgICogR2VuaWUgc3BhY2VzIHRoaXMgcGx1Z2luJ3MgYWdlbnRzIGNhbiBkZWxlZ2F0ZSB0by4gT25lIE1hc3RyYVxuICAgKiB0b29sIGlzIHJlZ2lzdGVyZWQgcGVyIGFsaWFzIChgZ2VuaWVgIGZvciB0aGUgd2VsbC1rbm93blxuICAgKiBgZGVmYXVsdGAgYWxpYXMsIGBnZW5pZV88YWxpYXM+YCBvdGhlcndpc2UpLiBFYWNoIHRvb2wgc3BpbnNcbiAgICogdXAgYSBwZXItcXVlc3Rpb24gR2VuaWUgc3ViLWFnZW50IHRoYXQgcnVucyBEYXRhYnJpY2tzXG4gICAqIFwiYWdlbnQgbW9kZVwiIGFnYWluc3QgdGhlIHNwYWNlLCBicm9hZGNhc3RzIHdpcmUgZXZlbnRzIHRvIHRoZVxuICAgKiBVSSwgZmV0Y2hlcyBzdGF0ZW1lbnQgcm93cyBmb3Igbm9uLWVtcHR5IHJlc3VsdHMsIGFuZCByZXR1cm5zXG4gICAqIGEgYChzdHJpbmcgfCBkYXRhIHwgY2hhcnQpW11gIHN1bW1hcnkgdGhlIGhvc3QgVUkgcmVuZGVyc1xuICAgKiBpbmxpbmUuXG4gICAqXG4gICAqIEVudHJpZXMgYWNjZXB0IGVpdGhlciBhIGZ1bGwge0BsaW5rIEdlbmllU3BhY2VDb25maWd9IG9iamVjdFxuICAgKiBvciBhIGJhcmUgYHNwYWNlX2lkYCBzdHJpbmcgd2hlbiBubyBleHRyYXMgYXJlIG5lZWRlZDpcbiAgICpcbiAgICogYGBgdHNcbiAgICogbWFzdHJhKHtcbiAgICogICBnZW5pZVNwYWNlczoge1xuICAgKiAgICAgZGVmYXVsdDogXCIwMWVmMGQzYzBlMWIxZjRhOGQyYzNlNGY1YTZiN2M4ZFwiLFxuICAgKiAgICAgZm9yZWNhc3RzOiB7IHNwYWNlSWQ6IFwiMDFlZi4uLlwiLCBoaW50OiBcIndlZWtseSBkZW1hbmQgZm9yZWNhc3RzXCIgfSxcbiAgICogICB9LFxuICAgKiB9KTtcbiAgICogYGBgXG4gICAqXG4gICAqIFJlYWNoIHRoZSBzcGFjZXMgZnJvbSBhbiBhZ2VudCdzIGB0b29scyhwbHVnaW5zKWAgY2FsbGJhY2sgdmlhXG4gICAqIGBwbHVnaW5zLmdlbmllPy50b29sa2l0KClgOyB0aGUgcmVzdWx0aW5nIHRvb2xzIGFjY2VwdFxuICAgKiBgeyBjb250ZW50LCBjb252ZXJzYXRpb25JZD8gfWAgYW5kIHJldHVybiBhIGh5ZHJhdGVkIHN1bW1hcnkuXG4gICAqXG4gICAqICoqRmFsbGJhY2sgZGlzY292ZXJ5KiogKGhpZ2hlc3QgcHJlY2VkZW5jZSBmaXJzdCk6IGlmIHRoaXNcbiAgICogZmllbGQgaXMgb21pdHRlZCwgdGhlIEdlbmllIGFnZW50IGFsc28gcGlja3MgdXAgc3BhY2VzIGZyb21cbiAgICogKDEpIHRoZSBBcHBLaXQgYGdlbmllKHsgc3BhY2VzOiB7IC4uLiB9IH0pYCBwbHVnaW4gaW5zdGFuY2VcbiAgICogd2hlbiByZWdpc3RlcmVkLCBhbmQgKDIpIHRoZSBgREFUQUJSSUNLU19HRU5JRV9TUEFDRV9JRGBcbiAgICogZW52IHZhciAocmVnaXN0ZXJlZCB1bmRlciB0aGUgYGRlZmF1bHRgIGFsaWFzKS4gVGhpcyBrZWVwc1xuICAgKiBleGlzdGluZyBBcHBLaXQgZGVwbG95bWVudHMgd29ya2luZyB3aXRob3V0IHJlc3RhdGluZyB0aGVcbiAgICogc3BhY2VzIGNvbmZpZyBpbiB0d28gcGxhY2VzLlxuICAgKi9cbiAgZ2VuaWVTcGFjZXM/OiBHZW5pZVNwYWNlc0NvbmZpZztcbiAgLyoqXG4gICAqIFVzZSB0aGUgc3RyZWFtaW5nIEdlbmllIEFnZW50IE1vZGUgQVBJIGZvciBgYXNrX2dlbmllYC4gRGVmYXVsdHMgdG8gYHRydWVgLlxuICAgKiBTZXQgYGZhbHNlYCB0byBmb3JjZSB0aGUgbGVnYWN5IENvbnZlcnNhdGlvbiBBUEkgcG9sbGluZyBkcml2ZXIuIEFcbiAgICogcHJlLXN0cmVhbSBmZWF0dXJlLWRpc2FibGVkIG9yIHByZXZpZXctdG9nZ2xlIHJlc3BvbnNlIGZhbGxzIGJhY2tcbiAgICogYXV0b21hdGljYWxseS5cbiAgICovXG4gIGdlbmllQWdlbnRNb2RlPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIFRUTCBmb3IgdGhlIGluLW1lbW9yeSBHZW5pZSBzcGFjZSBtZXRhZGF0YSBjYWNoZSwgaW5cbiAgICogbWlsbGlzZWNvbmRzLiBEZWZhdWx0cyB0byA1IG1pbnV0ZXMuIFRoZSBHZW5pZSBhZ2VudCBjYWxsc1xuICAgKiBgY2xpZW50LmdlbmllLmdldFNwYWNlKC4uLilgIG9uIGV2ZXJ5IGNvbGQtc3RhcnQgdG8gZ2V0IHRoZVxuICAgKiB0aXRsZSAvIGRlc2NyaXB0aW9uIC8gd2FyZWhvdXNlIGlkOyBjYWNoZWQgcmVzcG9uc2VzIHNraXAgdGhlXG4gICAqIHJvdW5kLXRyaXAgYW5kIGNvbmN1cnJlbnQgY2FsbGVycyBjb2FsZXNjZSBvbiBhIHNpbmdsZVxuICAgKiBpbi1mbGlnaHQgZmV0Y2guIERyb3AgdG8gYSBzbWFsbGVyIHZhbHVlIHdoZW4gYW5hbHlzdHMgYXJlXG4gICAqIGFjdGl2ZWx5IGVkaXRpbmcgc3BhY2UgbWV0YWRhdGEgYW5kIHlvdSB3YW50IGNoYW5nZXMgdmlzaWJsZVxuICAgKiB3aXRoaW4gc2Vjb25kczsgcmFpc2UgaXQgdG8gYW1vcnRpc2UgdGhlIHJvdW5kLXRyaXAgd2hlblxuICAgKiBzcGFjZSBtZXRhZGF0YSBpcyBlZmZlY3RpdmVseSBmcm96ZW4uXG4gICAqXG4gICAqIEJhY2tlZCBieSBBcHBLaXQncyBgQ2FjaGVNYW5hZ2VyYCwgc28gdGhlIGNhY2hlIHBhcnRpY2lwYXRlc1xuICAgKiBpbiB0ZWxlbWV0cnkgc3BhbnMgKGBjYWNoZS5nZXRPckV4ZWN1dGVgKSBhbmQgYmVuZWZpdHMgZnJvbVxuICAgKiBMYWtlYmFzZSBwZXJzaXN0ZW5jZSB3aGVuIHRoZSBgbGFrZWJhc2VgIHBsdWdpbiBpcyB3aXJlZCB1cC5cbiAgICovXG4gIGdlbmllU3BhY2VDYWNoZVR0bE1zPzogbnVtYmVyO1xuICAvKipcbiAgICogTWF4aW11bSBMTE0gc3RlcHMgZWFjaCBhZ2VudCBnZXRzIHBlciB0dXJuLiBPbmUgc3RlcCA9IG9uZVxuICAgKiByb3VuZC10cmlwIHRvIHRoZSB1bmRlcmx5aW5nIG1vZGVsIChhIHRvb2wgY2FsbCBjb25zdW1lcyBhXG4gICAqIHN0ZXAsIHRoZSBmaW5hbC10ZXh0IHJlcGx5IGNvbnN1bWVzIG9uZSB0b28pLiBBcHBsaWVzIHRvXG4gICAqIGV2ZXJ5IGFnZW50IHJlZ2lzdGVyZWQgdGhyb3VnaCB7QGxpbmsgTWFzdHJhUGx1Z2luQ29uZmlnLmFnZW50c31cbiAgICogLSBwZXItYWdlbnQgb3ZlcnJpZGVzIGFyZW4ndCBzdXJmYWNlZCB5ZXQgYmVjYXVzZSB0aGUgc2FtZVxuICAgKiBjZWlsaW5nIGhhcyBiZWVuIHN1ZmZpY2llbnQgYWNyb3NzIGV2ZXJ5IHdvcmtsb2FkIHdlJ3ZlIHJ1bi5cbiAgICpcbiAgICogRGVmYXVsdHMgdG8ge0BsaW5rIERFRkFVTFRfQUdFTlRfTUFYX1NURVBTfSAoMjUpLCBzaXplZCB0byBmaXRcbiAgICogYSBkZWNvbXBvc2VkIEdlbmllIHR1cm4gKGdyb3VuZGluZyArIHNldmVyYWwgYGFza19nZW5pZWAgY2FsbHNcbiAgICogKyBgcHJlcGFyZV9jaGFydGAgcGVyIGRhdGFzZXQgKyB0aGUgZmluYWwtdGV4dCByZXBseSkgd2l0aFxuICAgKiBoZWFkcm9vbSBmb3IgdGhlIG1vZGVsIHRvIGNoYWluIGEgY291cGxlIG9mIGZvbGxvdy11cHMgYmVmb3JlXG4gICAqIGFuc3dlcmluZy4gTWFzdHJhJ3Mgb3duIGBhZ2VudC5nZW5lcmF0ZWAgZGVmYXVsdCBvZiA1IHdvdWxkXG4gICAqIGN1dCBtdWx0aS1zdGVwIG9yY2hlc3RyYXRpb24gb2ZmIGFmdGVyIDItMyB0b29sIGNhbGxzLCBzb1xuICAgKiBleHBsaWNpdGx5IHJhaXNpbmcgdGhlIGNlaWxpbmcgaGVyZSBpcyB3aGF0IGxldHMgdGhlXG4gICAqIGFnZW50LW1vZGUgbG9vcCBwbGF5IG91dC5cbiAgICpcbiAgICogTG93ZXIgd2hlbiBhbiB1bnVzdWFsbHkgc2xvdyBvciBleHBlbnNpdmUgbW9kZWwgbWFrZXMgbG9uZ1xuICAgKiB0dXJucyB1bmFmZm9yZGFibGU7IHJhaXNlIGZvciBleHBsb3JhdG9yeSB3b3JrbG9hZHMgdGhhdCBuZWVkXG4gICAqIHRvIGRyaWxsIGRlZXAgaW50byBhIGRhdGFzZXQgd2l0aGluIGEgc2luZ2xlIHR1cm4uXG4gICAqL1xuICBhZ2VudE1heFN0ZXBzPzogbnVtYmVyO1xuICAvKipcbiAgICogV2lyZSBNYXN0cmEgc3BhbnMgaW50byBBcHBLaXQncyBnbG9iYWwgT1RlbCBwaXBlbGluZSB2aWFcbiAgICogYEBtYXN0cmEvb3RlbC1icmlkZ2VgLlxuICAgKlxuICAgKiAtIGB1bmRlZmluZWRgIChkZWZhdWx0LCBhdXRvKTogb24gb25seSB3aGVuXG4gICAqICAgYE9URUxfRVhQT1JURVJfT1RMUF9FTkRQT0lOVGAgb3JcbiAgICogICBgT1RFTF9FWFBPUlRFUl9PVExQX1RSQUNFU19FTkRQT0lOVGAgaXMgc2V0LiBXaGVuIHVuc2V0LCB0aGVcbiAgICogICBicmlkZ2UgaXMgc2tpcHBlZCBzbyBNYXN0cmEgZG9lcyBub3QgbG9nXG4gICAqICAgYFtPdGVsQnJpZGdlXSBObyBPVEVMIHNwYW4gZm91bmRgIG9uIHRoZSBub29wIHRyYWNlci5cbiAgICogLSBgdHJ1ZWA6IGZvcmNlIG9uIGV2ZW4gd2l0aG91dCBhbiBPVExQIGVuZHBvaW50LlxuICAgKiAtIGBmYWxzZWA6IGZvcmNlIG9mZi5cbiAgICovXG4gIG9ic2VydmFiaWxpdHk/OiBib29sZWFuO1xuICAvKipcbiAgICogTG9nIHVzZXIgZmVlZGJhY2sgKHRodW1icyB1cC9kb3duICsgZnJlZWZvcm0gY29tbWVudHMpIHRvIE1MZmxvdyBhc1xuICAgKiB0cmFjZSBhc3Nlc3NtZW50cywgYW5kIHN1cmZhY2UgdGhlIGZlZWRiYWNrIGNvbnRyb2xzIGluIHRoZSBjaGF0IFVJLlxuICAgKlxuICAgKiAtIGB1bmRlZmluZWRgIChkZWZhdWx0LCBhdXRvKTogZW5hYmxlZCBvbmx5IHdoZW4gTUxmbG93IHRyYWNpbmcgaXNcbiAgICogICB3aXJlZCAtIGFuIE9UTFAgZXhwb3J0ZXIgZW5kcG9pbnQgaXMgc2V0IGFuZCBhbiBNTGZsb3cgZXhwZXJpbWVudFxuICAgKiAgIGlzIG5hbWVkICh0aGUgc2FtZSBzaWduYWxzIHRoZSBvYnNlcnZhYmlsaXR5IHBpcGVsaW5lIG5lZWRzIHRvXG4gICAqICAgc2hpcCB0cmFjZXMgdG8gTUxmbG93KS4gT3RoZXJ3aXNlIG9mZiwgc2luY2UgdGhlcmUnZCBiZSBubyB0cmFjZVxuICAgKiAgIHRvIGF0dGFjaCBmZWVkYmFjayB0by5cbiAgICogLSBgdHJ1ZWA6IGZvcmNlIG9uLiBSZXF1aXJlcyBgTUxGTE9XX0VYUEVSSU1FTlRfSURgIG9yXG4gICAqICAgYE1MRkxPV19FWFBFUklNRU5UX05BTUVgOyBhcHAgc3RhcnR1cCBmYWlscyB3aGVuIG5laXRoZXIgaXMgY29uZmlndXJlZC5cbiAgICogICBVc2UgdGhpcyB3aGVuIHRyYWNlIGV4cG9ydCBpcyB3aXJlZCBpbiBhIHdheSB0aGUgYXV0by1wcm9iZSBkb2VzIG5vdFxuICAgKiAgIHJlY29nbml6ZS5cbiAgICogLSBgZmFsc2VgOiBmb3JjZSBvZmYuIE5vIHRyYWNlLWlkIGhlYWRlciwgbm8gZmVlZGJhY2sgcm91dGUsIG5vIFVJLlxuICAgKlxuICAgKiBGZWVkYmFjayBhdHRhY2hlcyB0byBhIHR1cm4ncyBNTGZsb3cgdHJhY2UgdmlhIHRoZSBPcGVuVGVsZW1ldHJ5XG4gICAqIHRyYWNlIGlkIHRoZSBzZXJ2ZXIgc3RhbXBzIG9uIGVhY2ggcmVzcG9uc2U7IHNlZSBgbWxmbG93LnRzYC5cbiAgICovXG4gIGZlZWRiYWNrPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIEV4cG9zZSB0aGUgcGx1Z2luJ3MgYWdlbnRzIChhbmQgb3B0aW9uYWxseSB0b29scykgYXMgYSBNYXN0cmEgTUNQXG4gICAqIHNlcnZlciBzbyBleHRlcm5hbCBNQ1AgY2xpZW50cyAtIENsYXVkZSBEZXNrdG9wLCBDdXJzb3IsIHRoZSBNYXN0cmFcbiAgICogcGxheWdyb3VuZCwgb3IgYW5vdGhlciBhZ2VudCAtIGNhbiBjYWxsIHRoZW0gb3ZlciB0aGUgc3RhbmRhcmQgTUNQXG4gICAqIHRyYW5zcG9ydHMuIEVuYWJsZWQgYnkgZGVmYXVsdCAoYWdlbnRzIG9ubHkpOiB3cmFwcGluZyB0aGVcbiAgICogYWxyZWFkeS1yZWdpc3RlcmVkIGFnZW50cyBjb3N0cyBub3RoaW5nIGV4dHJhLCBzbyB0aGUgZW5kcG9pbnQgaXMgb25cbiAgICogb3V0IG9mIHRoZSBib3g7IG9ubHkgdGhlIGFtYmllbnQgdG9vbHMgKHdoaWNoIGFzc3VtZSBhbiBpbi1wcm9jZXNzXG4gICAqIGNoYXQgdHVybikgc3RheSBvZmYgdW5sZXNzIGV4cGxpY2l0bHkgb3B0ZWQgaW4uXG4gICAqXG4gICAqIC0gYHVuZGVmaW5lZGAgKGRlZmF1bHQpIC8gYHRydWVgOiBleHBvc2UgZXZlcnkgcmVnaXN0ZXJlZCBhZ2VudCBhc1xuICAgKiAgIGFuIGBhc2tfPGFnZW50SWQ+YCBNQ1AgdG9vbCB1bmRlciBhIHNlcnZlciB3aG9zZSBpZCBpcyB0aGUgcGx1Z2luXG4gICAqICAgbmFtZS5cbiAgICogLSBgZmFsc2VgOiBubyBNQ1AgZW5kcG9pbnRzLlxuICAgKiAtIHtAbGluayBNYXN0cmFNY3BDb25maWd9OiBmaW5lLWdyYWluZWQgY29udHJvbCBvdmVyIHRoZSBzZXJ2ZXIgaWQsXG4gICAqICAgYWR2ZXJ0aXNlZCBtZXRhZGF0YSwgYW5kIHdoaWNoIGFnZW50cyAvIHRvb2xzIGFyZSBleHBvc2VkLlxuICAgKlxuICAgKiBXaGVuIGVuYWJsZWQsIHRoZSBzdG9jayBNYXN0cmEgTUNQIHJvdXRlcyBtb3VudCB1bmRlciB0aGUgcGx1Z2luJ3NcbiAgICogYmFzZSBwYXRoIChubyBiZXNwb2tlIHJvdXRlIGlzIGFkZGVkIC0gdGhlIHNlcnZlciBpcyBoYW5kZWQgdG8gdGhlXG4gICAqIGBNYXN0cmFgIGluc3RhbmNlIHZpYSBgbWNwU2VydmVyc2AsIHdoaWNoIGBAbWFzdHJhL2V4cHJlc3NgIHNlcnZlcyk6XG4gICAqXG4gICAqIC0gU3RyZWFtYWJsZSBIVFRQOiBgUE9TVCAvYXBpLzxwbHVnaW4+L21jcC88c2VydmVySWQ+L21jcGBcbiAgICogLSBTU0UgKGxlZ2FjeSk6ICAgIGBHRVQgIC9hcGkvPHBsdWdpbj4vbWNwLzxzZXJ2ZXJJZD4vc3NlYFxuICAgKiAgICAgICAgICAgICAgICAgICAgYFBPU1QgL2FwaS88cGx1Z2luPi9tY3AvPHNlcnZlcklkPi9tZXNzYWdlc2BcbiAgICpcbiAgICogUmVxdWVzdHMgcnVuIHVuZGVyIHRoZSBzYW1lIEFwcEtpdCBPQk8gc2NvcGUgYXMgdGhlIGNoYXQgcm91dGVzLCBzb1xuICAgKiBhbiBhZ2VudCBpbnZva2VkIG92ZXIgTUNQIHJlc29sdmVzIGl0cyBtb2RlbCBhbmQgdG9vbHMgYXMgdGhlXG4gICAqIGNhbGxpbmcgdXNlci5cbiAgICovXG4gIG1jcD86IGJvb2xlYW4gfCBNYXN0cmFNY3BDb25maWc7XG4gIC8qKlxuICAgKiBIb3cgbXVjaCBvZiB0aGUgc3RvY2sgYEBtYXN0cmEvZXhwcmVzc2AgbWFuYWdlbWVudCBBUEkgaXMgcmVhY2hhYmxlXG4gICAqIHRocm91Z2ggdGhlIHBsdWdpbiBtb3VudC4gYEBtYXN0cmEvZXhwcmVzc2AgcmVnaXN0ZXJzIGl0cyBmdWxsIHJvdXRlXG4gICAqIHRhYmxlIChhZ2VudCBpbmZlcmVuY2UgcGx1cyBhZG1pbiAvIG11dGF0aW5nIHJvdXRlczogZGlyZWN0IHRvb2xcbiAgICogZXhlY3V0aW9uLCB3b3JrZmxvdyBjb250cm9sLCByYXcgbWVtb3J5IHJlYWQvd3JpdGUsIHRlbGVtZXRyeSwgbG9ncyxcbiAgICogc2NvcmVzKS4gQXBwS2l0IGFscmVhZHkgYXV0aGVudGljYXRlcyBldmVyeSByZXF1ZXN0IGFzIHRoZSBPQk8gdXNlcixcbiAgICogYnV0IG5vdGhpbmcgdGhlcmUgcmVzdHJpY3RzICp3aGljaCogb2YgdGhvc2Ugb3BlcmF0aW9ucyB0aGUgYnJvd3NlclxuICAgKiBjbGllbnQgbWF5IGludm9rZS5cbiAgICpcbiAgICogLSBgXCJzY29wZWRcImAgKGRlZmF1bHQpOiBvbmx5IHRoZSByb3V0ZXMgdGhlIGNoYXQgY2xpZW50IGxlZ2l0aW1hdGVseVxuICAgKiAgIG5lZWRzIGFyZSBkaXNwYXRjaGVkIHRvIE1hc3RyYSAtIGFnZW50IGluZmVyZW5jZVxuICAgKiAgIChgc3RyZWFtYCAvIGBnZW5lcmF0ZWAgLyBgbmV0d29ya2ApLCByZWFkLW9ubHkgYWdlbnQgbWV0YWRhdGEsIHRoaXNcbiAgICogICBwbHVnaW4ncyBvd24gT0JPLSBhbmQgcmVzb3VyY2Utc2NvcGVkIGAvcm91dGUvKmAgcm91dGVzIChoaXN0b3J5IC9cbiAgICogICB0aHJlYWRzKSwgYW5kLCB3aGVuIHtAbGluayBtY3B9IGlzIGVuYWJsZWQsIHRoZSBNQ1AgdHJhbnNwb3J0LlxuICAgKiAgIEV2ZXJ5dGhpbmcgZWxzZSAodG9vbCBleGVjdXRpb24sIHdvcmtmbG93IGNvbnRyb2wsIHJhdyBtZW1vcnksXG4gICAqICAgdGVsZW1ldHJ5LCBsb2dzLCBzY29yZXMsIGFuZCBvdGhlciBtdXRhdGlvbnMpIGlzIHJlamVjdGVkIHdpdGhcbiAgICogICBgNDAzYCBiZWZvcmUgaXQgcmVhY2hlcyBNYXN0cmEuXG4gICAqIC0gYFwiZnVsbFwiYDogZGlzcGF0Y2ggdGhlIGVudGlyZSBzdG9jayBNYXN0cmEgQVBJLiBVc2Ugb25seSBmb3IgYVxuICAgKiAgIHRydXN0ZWQgZmlyc3QtcGFydHkgY29uc29sZSB0aGF0IGdlbnVpbmVseSBuZWVkcyB0aGUgbWFuYWdlbWVudFxuICAgKiAgIHN1cmZhY2UuXG4gICAqL1xuICBhcGlBY2Nlc3M/OiBcInNjb3BlZFwiIHwgXCJmdWxsXCI7XG4gIC8qKlxuICAgKiBXaGljaCBEYXRhYnJpY2tzIGlkZW50aXR5IHRoZSBhZ2VudHMnIHdvcmtzcGFjZSBjYWxscyBydW4gYXM6IHRoZVxuICAgKiBzZXJ2aW5nLWVuZHBvaW50IGNhdGFsb2d1ZSBiZWhpbmQgdGhlIG1vZGVsIHBpY2tlciwgR2VuaWUgc3VnZ2VzdGlvbnMsXG4gICAqIGBhc2tfZ2VuaWVgLCBhbmQgdGhlIFN0YXRlbWVudCBFeGVjdXRpb24gZmV0Y2ggYmVoaW5kIGEgYFtkYXRhOjxpZD5dYFxuICAgKiBlbWJlZC4gRmFsbHMgYmFjayB0byBgTUFTVFJBX0dFTklFX0lERU5USVRZYCwgdGhlbiBgXCJ1c2VyXCJgLlxuICAgKlxuICAgKiBPbi1iZWhhbGYtb2YgKE9CTykgYXV0aCByZXF1aXJlcyB0aGUgY2FsbGVyIHRvIGJlIGEgbWVtYmVyIG9mIHRoZVxuICAgKiBXT1JLU1BBQ0UsIG5vdCBqdXN0IG9mIHRoZSBEYXRhYnJpY2tzIGFjY291bnQuIEFuIGFwcCBzaGFyZWQgd2l0aCBhblxuICAgKiBhY2NvdW50LWxldmVsIGdyb3VwIGNhbiBiZSBvcGVuZWQgYnkgc29tZW9uZSB3aG9zZSB0b2tlbiBpcyB2YWxpZCBidXQgd2hvc2VcbiAgICogZXZlcnkgd29ya3NwYWNlIGNhbGwgZmFpbHMgd2l0aCBgVW5hdXRob3JpemVkIGFjY2VzcyB0byBPcmc6IDxpZD5gIC0gYW5kXG4gICAqIGdyYW50aW5nIHdvcmtzcGFjZSBtZW1iZXJzaGlwIGlzIG5vdCBhbHdheXMgcG9zc2libGUsIHNpbmNlIGEgd29ya3NwYWNlXG4gICAqIGNhcHMgbWVtYmVyc2hpcCB3ZWxsIGJlbG93IHRoZSBzaXplIG9mIGEgbGFyZ2UgYWNjb3VudCdzIHVzZXIgZ3JvdXAuIFRoZVxuICAgKiBhcHAncyBzZXJ2aWNlIHByaW5jaXBhbCBhbHJlYWR5IGhvbGRzIHRoZSBncmFudHMgdGhlIGFwcCB3YXMgZGVwbG95ZWQgd2l0aC5cbiAgICpcbiAgICogLSBgXCJ1c2VyXCJgIChkZWZhdWx0KTogYWx3YXlzIE9CTy4gUGVyLXVzZXIgYXR0cmlidXRpb24sIGFuZCBHZW5pZSAvIFVuaXR5XG4gICAqICAgQ2F0YWxvZyByb3cgZmlsdGVycyBhcHBseSBwZXIgdXNlci4gQ29ycmVjdCB3aGVuIGV2ZXJ5IGNhbGxlciBpcyBhXG4gICAqICAgd29ya3NwYWNlIG1lbWJlci5cbiAgICogLSBgXCJzZXJ2aWNlLXByaW5jaXBhbFwiYDogYWx3YXlzIHRoZSBhcHAgc2VydmljZSBwcmluY2lwYWwuIE5lZWRzIG5vIE9CT1xuICAgKiAgIHNjb3BlcyBhbmQgd29ya3MgZm9yIGFueSBjYWxsZXIgd2hvIGNhbiBvcGVuIHRoZSBhcHAsIGF0IHRoZSBjb3N0IG9mXG4gICAqICAgcGVyLXVzZXIgYXR0cmlidXRpb24gaW4gR2VuaWUgLyBVbml0eSBDYXRhbG9nLlxuICAgKiAtIGBcImF1dG9cImA6IE9CTyB3aGVuIHRoZSByZXF1ZXN0IGNhcnJpZXMgYW4gT0JPIHRva2VuLCB0aGUgc2VydmljZSBwcmluY2lwYWxcbiAgICogICB3aGVuIGl0IGRvZXMgbm90LiBGb3IgYW4gYXBwIHNlcnZpbmcgQk9USCB0aGUgcGxhdGZvcm0gZnJvbnQgZG9vciBhbmQgYVxuICAgKiAgIGRvb3IgdGhhdCBoYXMgbm8gdG9rZW4gdG8gZm9yd2FyZCAtIGEgYEBkYngtdG9vbHMvdHVubmVsYCBnYXRlLCBhXG4gICAqICAgVGVhbXMgY2hhbm5lbCAtIHdoZXJlIEFwcEtpdCdzIGBhc1VzZXJgIHdvdWxkIG90aGVyd2lzZSB0aHJvd1xuICAgKiAgIGBBdXRoZW50aWNhdGlvbkVycm9yYCBvdXRzaWRlIGBOT0RFX0VOVj1kZXZlbG9wbWVudGAuXG4gICAqXG4gICAqIFRoZSBzZXJ2aWNlLXByaW5jaXBhbCBwYXRoIGNoYW5nZXMgb25seSB0aGUgRGF0YWJyaWNrcyBDUkVERU5USUFMLiBNZW1vcnlcbiAgICogdGhyZWFkcywgdGhlIHBlci11c2VyIGNhY2hlIG5hbWVzcGFjZSwgYW5kIHRyYWNlIG1ldGFkYXRhIHN0aWxsIGtleSBvZmYgdGhlXG4gICAqIGZvcndhcmRlZCB1c2VyLCBzbyBjYWxsZXJzIHNoYXJpbmcgdGhlIHNlcnZpY2UgcHJpbmNpcGFsJ3MgZGF0YSBhY2Nlc3Mga2VlcFxuICAgKiBzZXBhcmF0ZSBjb252ZXJzYXRpb25zIGFuZCBjYW5ub3QgcmVhZCBlYWNoIG90aGVyJ3MgdGhyZWFkcyBvciBjaGFydHMuXG4gICAqXG4gICAqIEBleGFtcGxlIEFuIGFwcCBhbnkgYWNjb3VudCB1c2VyIGNhbiBvcGVuXG4gICAqIGBgYHRzXG4gICAqIG1hc3RyYSh7IGdlbmllSWRlbnRpdHk6IFwic2VydmljZS1wcmluY2lwYWxcIiwgZ2VuaWVTcGFjZXM6IHsgZGVmYXVsdDogc3BhY2VJZCB9IH0pO1xuICAgKiBgYGBcbiAgICpcbiAgICogQGV4YW1wbGUgT25lIGFwcCBiZWhpbmQgYm90aCB0aGUgZnJvbnQgZG9vciBhbmQgYSBwdWJsaWMgdHVubmVsXG4gICAqIGBgYHRzXG4gICAqIG1hc3RyYSh7IGdlbmllSWRlbnRpdHk6IFwiYXV0b1wiLCBnZW5pZVNwYWNlczogeyBkZWZhdWx0OiBzcGFjZUlkIH0gfSk7XG4gICAqIGBgYFxuICAgKi9cbiAgZ2VuaWVJZGVudGl0eT86IE1hc3RyYUlkZW50aXR5TW9kZTtcbiAgLyoqXG4gICAqIE9wdGlvbmFsIGJyYW5kIGNvbnRleHQgYXBwbGllZCB0byBjaGFydHMgcHJvZHVjZWQgYnkgdGhlIGJ1aWx0LWluXG4gICAqIGByZW5kZXJfZGF0YWAgLyBgcHJlcGFyZV9jaGFydGAgdG9vbHMuIFdoZW4gc2V0LCB0aGUgY2hhcnQgcGxhbm5lcidzXG4gICAqIEVjaGFydHMgb3V0cHV0IGlzIHRoZW1lZCB3aXRoIHRoZSBicmFuZCdzIHBhbGV0dGUgKHNlcmllcyBjb2xvcnMgZGVyaXZlZFxuICAgKiBmcm9tIGBjb2xvcnMucHJpbWFyeWAgLyBgY29sb3JzLmFjY2VudGApIGFuZCBzYW5zIGZvbnRcbiAgICogKGB0eXBvZ3JhcGh5LnNhbnNgKSBpbnN0ZWFkIG9mIEVjaGFydHMnIGRlZmF1bHRzLiBPbWl0IGZvciB0aGUgZGVmYXVsdFxuICAgKiBFY2hhcnRzIGxvb2suXG4gICAqXG4gICAqIFBhc3MgdGhlIHBvcnRhYmxlIHtAbGluayBCcmFuZENvbnRleHR9IHNoYXJlZCBhY3Jvc3MgdGhlIFVJIGFuZFxuICAgKiBsaWJyYXJpZXMgKGUuZy4gYGJyYW5kLmRlZmF1bHRCcmFuZENvbnRleHRgIGZyb20gYEBkYngtdG9vbHMvc2hhcmVkLWNvcmVgLFxuICAgKiBvciBhIGN1c3RvbWVyIGJyYW5kKSAtIHRoZSBzYW1lIG9iamVjdCB0aGUgZW1haWwgYWRkLW9uIGFuZCB0aGUgVUlcbiAgICogYEJyYW5kUHJvdmlkZXJgIGNvbnN1bWUsIHNvIGEgaG9zdCB0aGVtZXMgY2hhcnRzLCBlbWFpbCwgYW5kIFVJIGZyb20gb25lXG4gICAqIHNvdXJjZS5cbiAgICovXG4gIGJyYW5kPzogQnJhbmRDb250ZXh0O1xuICAvKipcbiAgICogUmVtb3RlIEFnZW50LVNraWxsIHNvdXJjZXMgbWF0ZXJpYWxpemVkIG9uY2UgYXQgYXBwIHN0YXJ0dXAuIEEgc2luZ2xlXG4gICAqIHNvdXJjZSwgYSBsaXN0LCBvciBhIGB7IHNvdXJjZXMsIGZhaWxPbkVycm9yPywgLi4uIH1gIGJhZy5cbiAgICpcbiAgICogRWFjaCBzb3VyY2UgaXMgYSBHaXRIdWIgYG93bmVyL3JlcG9gLCBhIGdpdCAvIEdpdExhYiBVUkwsIG9yIGEgZGlyZWN0XG4gICAqIGBTS0lMTC5tZGAgLyBhcmNoaXZlIGRvd25sb2FkIFVSTC4gUmVzb2x1dGlvbiBwcmVmZXJzIHRoZSBPUFRJT05BTCBgc2tpbGxzYFxuICAgKiBucG0gQ0xJIChhIHBlZXIgZGVwKSB3aGljaCBpcyBjb3BpZWQgaW50byBhIHRlbXAgZGlyIGFuZCB0aGVuIHBlcnNpc3RlZDtcbiAgICogd2l0aG91dCBpdCwgYSBVUkwgc291cmNlIGlzIGZldGNoZWQgZGlyZWN0bHkuIEEgc291cmNlIHRoYXQgcmVzb2x2ZXNcbiAgICogdGhyb3VnaCBuZWl0aGVyIGZhaWxzIHN0YXJ0dXAgdW5sZXNzIGBmYWlsT25FcnJvcjogZmFsc2VgLlxuICAgKlxuICAgKiBBSSBUb29scyBpcyBjYWNoZWQgZGFpbHkgd2l0aCBgQGRieC10b29scy9jYWNoZWAgYW5kIHNlcnZlZCB0byBldmVyeVxuICAgKiBhdXRvLWNyZWF0ZWQgd29ya3NwYWNlIGZyb20gdGhlIHNoYXJlZCBgLy5kYXRhYnJpY2tzL3NraWxsc2AgbWVtb3J5IG1vdW50LlxuICAgKiBPdGhlciBzb3VyY2VzIGFyZSB3cml0dGVuIHRvIHRoZSBEYXRhYnJpY2tzIHVzZXIncyBBc3Npc3RhbnQgc2tpbGxzIGZvbGRlclxuICAgKiB3aGVuIHdyaXRhYmxlLCB3aXRoIGEgcmVhZC1vbmx5IGxvY2FsLW1lbW9yeSBmYWxsYmFjay5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogYGBgdHNcbiAgICogbWFzdHJhKHsgcmVtb3RlU2tpbGxzOiBcInZlcmNlbC1sYWJzL2FnZW50LXNraWxsc1wiIH0pO1xuICAgKiBtYXN0cmEoe1xuICAgKiAgIHJlbW90ZVNraWxsczoge1xuICAgKiAgICAgc291cmNlczogW1widmVyY2VsLWxhYnMvYWdlbnQtc2tpbGxzXCIsIFwiaHR0cHM6Ly9leGFtcGxlLmNvbS9za2lsbC5tZFwiXSxcbiAgICogICAgIGZhaWxPbkVycm9yOiBmYWxzZSxcbiAgICogICB9LFxuICAgKiB9KTtcbiAgICogYGBgXG4gICAqL1xuICByZW1vdGVTa2lsbHM/OiBSZW1vdGVTa2lsbHNPcHRpb247XG4gIC8qKiBSZWFkLW9ubHkgbG9jYWwgc2tpbGwgdHJlZXMgbW91bnRlZCBpbnRvIGV2ZXJ5IGRlZmF1bHQgYWdlbnQgd29ya3NwYWNlLiAqL1xuICBsb2NhbFNraWxsTW91bnRzPzogTG9jYWxTa2lsbE1vdW50W107XG59XG5cbi8qKlxuICogSlNPTiBTY2hlbWEgcHVibGlzaGVkIG9uIHRoZSBtYW5pZmVzdCdzIGBjb25maWcuc2NoZW1hYCwgbWlycm9yaW5nIHRoZVxuICogZG9jdW1lbnRlZCBkZWZhdWx0cyBhbmQgZW52aXJvbm1lbnQgZmFsbGJhY2tzIG9mIHtAbGluayBNYXN0cmFQbHVnaW5Db25maWd9LlxuICpcbiAqIENvdmVycyB0aGUgSlNPTi1leHByZXNzaWJsZSBvcHRpb25zIG9ubHkuIGBhZ2VudHNgLCBgdG9vbHNgLCBhbmQgYVxuICogYGRlZmF1bHRNb2RlbGAgcGFzc2VkIGFzIGEgTWFzdHJhIGBEeW5hbWljQXJndW1lbnRgIGFyZSBjb2RlLWRlZmluZWRcbiAqIChmdW5jdGlvbnMgLyBjbGFzcyBpbnN0YW5jZXMpLCBzbyB0aGV5IGNhcnJ5IG5vIHNjaGVtYSBlbnRyeTsgdGhlXG4gKiBgZGVmYXVsdE1vZGVsYCBwcm9wZXJ0eSBiZWxvdyBkZXNjcmliZXMgaXRzIHN0cmluZyBmb3JtLlxuICovXG5leHBvcnQgY29uc3QgTUFTVFJBX0NPTkZJR19TQ0hFTUE6IENvbmZpZ1NjaGVtYSA9IHtcbiAgdHlwZTogXCJvYmplY3RcIixcbiAgcHJvcGVydGllczoge1xuICAgIGJhY2tncm91bmRUdXJuczoge1xuICAgICAgdHlwZTogXCJib29sZWFuXCIsXG4gICAgICBkZXNjcmlwdGlvbjpcbiAgICAgICAgXCJSdW4gdHVybnMgdGhyb3VnaCBNYXN0cmEgZXZlbnRlZCBkdXJhYmxlIGV4ZWN1dGlvbiBzbyB0aGV5IGNvbnRpbnVlIGFmdGVyIGJyb3dzZXIgZGlzY29ubmVjdHMgYW5kIHJlbWFpbiByZWNvbm5lY3RhYmxlIGJ5IHJ1biBpZC4gRGVmYXVsdHMgdG8gdHJ1ZS5cIixcbiAgICB9LFxuICAgIHByb3ZpZGVySWQ6IHtcbiAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICBkZXNjcmlwdGlvbjogJ0FJIFNESyBwcm92aWRlci1vcHRpb25zIG5hbWVzcGFjZS4gRGVmYXVsdHMgdG8gXCJvcGVuYWlcIi4nLFxuICAgIH0sXG4gICAgcmVtb3RlU2tpbGxzOiB7XG4gICAgICB0eXBlOiBbXCJzdHJpbmdcIiwgXCJhcnJheVwiLCBcIm9iamVjdFwiXSxcbiAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICAnUmVtb3RlIEFnZW50LVNraWxsIHNvdXJjZXMgcHJvdmlzaW9uZWQgYXQgc3RhcnR1cDogXCJhaXRvb2xzXCIgZm9yIERhdGFicmlja3NcXCcgb3duIHNraWxsIHNldCAoZGFpbHkgQGRieC10b29scy9jYWNoZSBzbmFwc2hvdCBzZXJ2ZWQgZnJvbSB0aGUgc2hhcmVkIGluLW1lbW9yeSAvLmRhdGFicmlja3Mvc2tpbGxzIG1vdW50KSwgYSBHaXRIdWIgb3duZXIvcmVwbywgYSBnaXQvR2l0TGFiIFVSTCwgb3IgYSBkaXJlY3QgU0tJTEwubWQvYXJjaGl2ZSBVUkwuIE5vbi1haXRvb2xzIHNvdXJjZXMgcHJlZmVyIHRoZSBvcHRpb25hbCBgc2tpbGxzYCBucG0gQ0xJLCBlbHNlIGEgZGlyZWN0IGZldGNoOyBmYWlscyBzdGFydHVwIG9uIGVycm9yIHVubGVzcyBmYWlsT25FcnJvcjpmYWxzZS4gT3RoZXIgc291cmNlcyB3cml0ZSB0byB0aGUgRGF0YWJyaWNrcyB1c2VyIEFzc2lzdGFudCBza2lsbHMgZm9sZGVyIG9yIGEgcmVhZC1vbmx5IGxvY2FsLW1lbW9yeSBmYWxsYmFjay4nLFxuICAgIH0sXG4gICAgc3RvcmFnZToge1xuICAgICAgdHlwZTogW1wiYm9vbGVhblwiLCBcIm9iamVjdFwiXSxcbiAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICBcIlBvc3RncmVzU3RvcmUgZm9yIE1hc3RyYSB0aHJlYWRzIC8gbWVzc2FnZXMuIGB0cnVlYCBjYXB0dXJlcyB0aGUgYGxha2ViYXNlYCBwbHVnaW4ncyBleGlzdGluZyBzZXJ2aWNlLXByaW5jaXBhbCBwb29sOyBhbiBvYmplY3Qgb3BlbnMgYSBzZXBhcmF0ZWx5IGNvbmZpZ3VyZWQgc3RvcmUuIEF1dG8tZW5hYmxlZCB3aGVuIHRoZSBgbGFrZWJhc2VgIHBsdWdpbiBpcyByZWdpc3RlcmVkLlwiLFxuICAgIH0sXG4gICAgbWVtb3J5OiB7XG4gICAgICB0eXBlOiBbXCJib29sZWFuXCIsIFwib2JqZWN0XCJdLFxuICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgIFwiUGdWZWN0b3Igc3RvcmUgZm9yIE1hc3RyYSBzZW1hbnRpYyByZWNhbGwuIGB0cnVlYCBjYXB0dXJlcyB0aGUgYGxha2ViYXNlYCBwbHVnaW4ncyBleGlzdGluZyBzZXJ2aWNlLXByaW5jaXBhbCBwb29sOyBhbiBvYmplY3Qgb3BlbnMgYSBzZXBhcmF0ZWx5IGNvbmZpZ3VyZWQgc3RvcmUuIEF1dG8tZW5hYmxlZCB3aGVuIHRoZSBgbGFrZWJhc2VgIHBsdWdpbiBpcyByZWdpc3RlcmVkLlwiLFxuICAgIH0sXG4gICAgY29kZU1vZGU6IHtcbiAgICAgIHR5cGU6IFtcImJvb2xlYW5cIiwgXCJvYmplY3RcIl0sXG4gICAgICBkZXNjcmlwdGlvbjpcbiAgICAgICAgXCJFeHBvc2UgYWxsIGV4ZWN1dGFibGUgdG9vbHMgYXZhaWxhYmxlIHRvIHRoZSBjdXJyZW50IHJlcXVlc3QgdGhyb3VnaCBuYXRpdmUgTWFzdHJhIENvZGUgTW9kZSBmb3IgVHlwZVNjcmlwdCBiYXRjaGluZywgYWdncmVnYXRpb24sIGFuZCBhcml0aG1ldGljLiBUaGUgcGx1Z2luIHVzZXMgTWFzdHJhIGlzb2xhdGVkLXZtIHdpdGggdGhlIGV4aXN0aW5nIFF1aWNrSlMgZmFsbGJhY2s7IG5laXRoZXIgdHJhbnNwb3J0IHJ1bnMgdGhyb3VnaCB0aGUgd29ya3NwYWNlIGNvbW1hbmQgc2FuZGJveCwgc28gU1NIIGlzIHVzZWQgb25seSB3aGVuIGFuIFNTSC1iYWNrZWQgdG9vbCBpcyBjYWxsZWQuIEZhbHNlIGRpc2FibGVzIGl0LlwiLFxuICAgIH0sXG4gICAgc2FuZGJveDoge1xuICAgICAgdHlwZTogW1wiYm9vbGVhblwiLCBcInN0cmluZ1wiLCBcIm9iamVjdFwiXSxcbiAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICAnQ29tbWFuZCBzYW5kYm94IGZvciBhdXRvLWNyZWF0ZWQgYWdlbnQgd29ya3NwYWNlcy4gRGVmYXVsdHMgdG8gTW9udHkuIEZhbHNlIGRpc2FibGVzIGNvbW1hbmQgZXhlY3V0aW9uOyB0cnVlIG9yIFwibW9udHlcIiBzZWxlY3RzIE1vbnR5OyBhbiBleHBsaWNpdCBzYW5kYm94IG9yIHJlc29sdmVyIHN1cHBsaWVzIGFub3RoZXIgdHJhbnNwb3J0LicsXG4gICAgfSxcbiAgICB3b3Jrc3BhY2VGYWxsYmFja1RvVG1wOiB7XG4gICAgICB0eXBlOiBcImJvb2xlYW5cIixcbiAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICBcIkFkZCB1c2VyLXNjb3BlZCAvdG1wIHRvIGF1dG8tY3JlYXRlZCBhZ2VudCB3b3Jrc3BhY2VzIG9ubHkgd2hlbiBubyBjb25maWd1cmVkIERhdGFicmlja3MgcGF0aCBtb3VudHMgd3JpdGFibGUuIERlZmF1bHRzIHRvIGZhbHNlLlwiLFxuICAgIH0sXG4gICAgd29ya3NwYWNlU2tpbGxzOiB7XG4gICAgICB0eXBlOiBbXCJib29sZWFuXCIsIFwib2JqZWN0XCJdLFxuICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgIFwiVXNlIE1hc3RyYSdzIG5hdGl2ZSBvbi1kZW1hbmQgd29ya3NwYWNlIHNraWxsIHNlYXJjaCBhbmQgd3JpdGFibGUgc2tpbGwgc2F2ZXMuIERlZmF1bHRzIHRvIHRydWUuXCIsXG4gICAgfSxcbiAgICB3b3Jrc3BhY2VUb29sczoge1xuICAgICAgdHlwZTogXCJvYmplY3RcIixcbiAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICBcIk5hdGl2ZSBNYXN0cmEgd29ya3NwYWNlIHRvb2wgY29uZmlndXJhdGlvbiBmb3IgYXZhaWxhYmlsaXR5LCBhcHByb3ZhbHMsIHJlYWQtYmVmb3JlLXdyaXRlLCBvdXRwdXQgbGltaXRzLCBhbmQgaG9va3MuXCIsXG4gICAgfSxcbiAgICBkZWZhdWx0QWdlbnQ6IHtcbiAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICBkZXNjcmlwdGlvbjpcbiAgICAgICAgXCJBZ2VudCBpZCB1c2VkIHdoZW4gdGhlIGNsaWVudCBuYW1lcyBub25lLiBEZWZhdWx0cyB0byB0aGUgZmlyc3QgcmVnaXN0ZXJlZCBhZ2VudCwgZWxzZSB0aGUgYnVpbHQtaW4gYGRlZmF1bHRgLlwiLFxuICAgIH0sXG4gICAgZGVmYXVsdE1vZGVsOiB7XG4gICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgIFwiU2VydmluZyBlbmRwb2ludCBhcHBsaWVkIHRvIGV2ZXJ5IGFnZW50IHRoYXQgb21pdHMgaXRzIG93biBtb2RlbC4gRmFsbHMgYmFjayB0byBEQVRBQlJJQ0tTX1NFUlZJTkdfRU5EUE9JTlRfTkFNRSwgdGhlbiB0aGUgaGlnaGVzdC1yYW5rZWQgY3VycmVudGx5IGF2YWlsYWJsZSBjYXRhbG9ndWUgZW5kcG9pbnQuXCIsXG4gICAgfSxcbiAgICBkZWZhdWx0TW9kZWxGYWxsYmFja3M6IHtcbiAgICAgIHR5cGU6IFwiYXJyYXlcIixcbiAgICAgIGl0ZW1zOiB7IHR5cGU6IFwic3RyaW5nXCIgfSxcbiAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICBcIlByaW9yaXR5LW9yZGVyZWQgZW5kcG9pbnQgbmFtZXMgdHJpZWQgYmVmb3JlIHRoZSBzY29yZS1jbGFzc2lmaWVkIGNhdGFsb2d1ZSB3aGVuIG5vdGhpbmcgZWxzZSBwaW5zIGEgbW9kZWwuXCIsXG4gICAgfSxcbiAgICBtb2RlbEZ1enp5TWF0Y2g6IHtcbiAgICAgIHR5cGU6IFwiYm9vbGVhblwiLFxuICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgIFwiRnV6enktbWF0Y2ggbG9vc2UgbW9kZWwgbmFtZXMgYWdhaW5zdCB0aGUgd29ya3NwYWNlIGNhdGFsb2d1ZS4gRGVmYXVsdHMgdG8gdHJ1ZS5cIixcbiAgICB9LFxuICAgIG1vZGVsRnV6enlUaHJlc2hvbGQ6IHtcbiAgICAgIHR5cGU6IFwibnVtYmVyXCIsXG4gICAgICBkZXNjcmlwdGlvbjpcbiAgICAgICAgXCJGdXNlLmpzIHNjb3JlIHRocmVzaG9sZCBmb3IgdGhlIGZ1enp5IG1hdGNoZXIsIDAgKGV4YWN0KSB0byAxIChhbnl0aGluZykuIERlZmF1bHRzIHRvIDAuNC5cIixcbiAgICB9LFxuICAgIG1vZGVsQ2FjaGVUdGxNczoge1xuICAgICAgdHlwZTogXCJudW1iZXJcIixcbiAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICBcIlRUTCBpbiBtcyBmb3IgdGhlIHNlcnZpbmctZW5kcG9pbnRzIGxpc3QgY2FjaGUsIHBlciB3b3Jrc3BhY2UgaG9zdC4gRGVmYXVsdHMgdG8gNSBtaW51dGVzLlwiLFxuICAgIH0sXG4gICAgbW9kZWxPdmVycmlkZToge1xuICAgICAgdHlwZTogXCJib29sZWFuXCIsXG4gICAgICBkZXNjcmlwdGlvbjpcbiAgICAgICAgXCJIb25vciBhIHBlci1yZXF1ZXN0IG1vZGVsIG92ZXJyaWRlIGZyb20gdGhlIFgtTWFzdHJhLU1vZGVsIGhlYWRlciwgP21vZGVsPSBxdWVyeSwgb3IgYSBgbW9kZWxgIGJvZHkgZmllbGQuIERlZmF1bHRzIHRvIHRydWUuXCIsXG4gICAgfSxcbiAgICBnZW5pZVNwYWNlczoge1xuICAgICAgdHlwZTogXCJvYmplY3RcIixcbiAgICAgIGFkZGl0aW9uYWxQcm9wZXJ0aWVzOiB7IHR5cGU6IFtcInN0cmluZ1wiLCBcIm9iamVjdFwiXSB9LFxuICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgIFwiR2VuaWUgc3BhY2VzIHRoZSBhZ2VudHMgY2FuIGRlbGVnYXRlIHRvLCBrZXllZCBieSBhbGlhcyAodGhlIHRvb2wtbmFtZSBzdWZmaXgpLiBFYWNoIHZhbHVlIGlzIGEgc3BhY2UgaWQgb3IgYHsgc3BhY2VJZCwgaGludCB9YC4gRmFsbHMgYmFjayB0byB0aGUgYGdlbmllYCBwbHVnaW4ncyBvd24gYHNwYWNlc2AgY29uZmlnLCB0aGVuIERBVEFCUklDS1NfR0VOSUVfU1BBQ0VfSUQgdW5kZXIgdGhlIGBkZWZhdWx0YCBhbGlhcy5cIixcbiAgICB9LFxuICAgIGdlbmllQWdlbnRNb2RlOiB7XG4gICAgICB0eXBlOiBcImJvb2xlYW5cIixcbiAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICBcIlVzZSB0aGUgc3RyZWFtaW5nIEdlbmllIEFnZW50IE1vZGUgQVBJIGZvciBhc2tfZ2VuaWUuIERlZmF1bHRzIHRvIHRydWU7IGZhbHNlIGZvcmNlcyBsZWdhY3kgcG9sbGluZy4gRmVhdHVyZS1kaXNhYmxlZCBvciBwcmV2aWV3LXRvZ2dsZSByZXNwb25zZXMgZmFsbCBiYWNrIGF1dG9tYXRpY2FsbHkgYmVmb3JlIHN0cmVhbWluZy5cIixcbiAgICB9LFxuICAgIGdlbmllU3BhY2VDYWNoZVR0bE1zOiB7XG4gICAgICB0eXBlOiBcIm51bWJlclwiLFxuICAgICAgZGVzY3JpcHRpb246IFwiVFRMIGluIG1zIGZvciB0aGUgR2VuaWUgc3BhY2UgbWV0YWRhdGEgY2FjaGUuIERlZmF1bHRzIHRvIDUgbWludXRlcy5cIixcbiAgICB9LFxuICAgIGFnZW50TWF4U3RlcHM6IHtcbiAgICAgIHR5cGU6IFwibnVtYmVyXCIsXG4gICAgICBkZXNjcmlwdGlvbjpcbiAgICAgICAgXCJNYXhpbXVtIExMTSBzdGVwcyBlYWNoIGFnZW50IGdldHMgcGVyIHR1cm4gKGEgdG9vbCBjYWxsIGFuZCB0aGUgZmluYWwgcmVwbHkgZWFjaCBjb25zdW1lIG9uZSkuIERlZmF1bHRzIHRvIDI1LlwiLFxuICAgIH0sXG4gICAgc3RyaXBTdGFsZUNoYXJ0czoge1xuICAgICAgdHlwZTogXCJib29sZWFuXCIsXG4gICAgICBkZXNjcmlwdGlvbjpcbiAgICAgICAgXCJTdHJpcCBjaGFydElkcyBmcm9tIHJlY2FsbGVkIGFzc2lzdGFudCB0b29sIHJlc3VsdHMgc28gdGhlIG1vZGVsIGNhbm5vdCByZXVzZSBhIHR1cm4tc2NvcGVkIGNoYXJ0IG1hcmtlci4gRGVmYXVsdHMgdG8gdHJ1ZS5cIixcbiAgICB9LFxuICAgIHN0eWxlSW5zdHJ1Y3Rpb25zOiB7XG4gICAgICB0eXBlOiBbXCJzdHJpbmdcIiwgXCJib29sZWFuXCJdLFxuICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgIFwiU3R5bGUgZ3VhcmRyYWlscyBhcHBlbmRlZCB0byBldmVyeSBhZ2VudCdzIGluc3RydWN0aW9ucy4gQSBzdHJpbmcgcmVwbGFjZXMgdGhlIGJ1aWx0LWluIGJsb2NrLCBgZmFsc2VgIGRpc2FibGVzIGl0LlwiLFxuICAgIH0sXG4gICAgb2JzZXJ2YWJpbGl0eToge1xuICAgICAgdHlwZTogXCJib29sZWFuXCIsXG4gICAgICBkZXNjcmlwdGlvbjpcbiAgICAgICAgXCJCcmlkZ2UgTWFzdHJhIHNwYW5zIGludG8gQXBwS2l0J3MgT1RlbCBwaXBlbGluZS4gRGVmYXVsdHMgdG8gb24gb25seSB3aGVuIE9URUxfRVhQT1JURVJfT1RMUF9FTkRQT0lOVCBvciBPVEVMX0VYUE9SVEVSX09UTFBfVFJBQ0VTX0VORFBPSU5UIGlzIHNldC5cIixcbiAgICB9LFxuICAgIGZlZWRiYWNrOiB7XG4gICAgICB0eXBlOiBcImJvb2xlYW5cIixcbiAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICBcIkxvZyB0aHVtYnMgLyBjb21tZW50IGFzc2Vzc21lbnRzIHRvIE1MZmxvdyBhbmQgc3VyZmFjZSB0aGUgZmVlZGJhY2sgY29udHJvbHMuIERlZmF1bHRzIHRvIG9uIG9ubHkgd2hlbiBhbiBPVExQIGVuZHBvaW50IGFuZCBNTEZMT1dfRVhQRVJJTUVOVF9JRCBvciBNTEZMT1dfRVhQRVJJTUVOVF9OQU1FIGFyZSBzZXQuIEV4cGxpY2l0IHRydWUgZmFpbHMgc3RhcnR1cCB1bmxlc3MgYW4gZXhwZXJpbWVudCBpZCBvciBuYW1lIGlzIGNvbmZpZ3VyZWQuXCIsXG4gICAgfSxcbiAgICBtY3A6IHtcbiAgICAgIHR5cGU6IFtcImJvb2xlYW5cIiwgXCJvYmplY3RcIl0sXG4gICAgICBkZXNjcmlwdGlvbjpcbiAgICAgICAgXCJFeHBvc2UgdGhlIHJlZ2lzdGVyZWQgYWdlbnRzIG92ZXIgTUNQLiBEZWZhdWx0cyB0byBhZ2VudHMtb25seTsgYW4gb2JqZWN0IHR1bmVzIHRoZSBzZXJ2ZXIgaWQsIGFkdmVydGlzZWQgbWV0YWRhdGEsIGFuZCB3aGV0aGVyIGFtYmllbnQgdG9vbHMgYXJlIGV4cG9zZWQuXCIsXG4gICAgfSxcbiAgICBnZW5pZUlkZW50aXR5OiB7XG4gICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgLy8gRGVyaXZlZCBmcm9tIHRoZSByZXNvbHZlcidzIG93biBsaXN0LCBzbyBhIG1vZGUgY2FuIG5ldmVyIGJlIGFjY2VwdGVkIGF0XG4gICAgICAvLyBydW50aW1lIHdoaWxlIHRoZSBwdWJsaXNoZWQgc2NoZW1hIChhbmQgdGhlIFVJIGJ1aWx0IGZyb20gaXQpIG9taXRzIGl0LlxuICAgICAgZW51bTogWy4uLklERU5USVRZX01PREVTXSxcbiAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICAnV2hpY2ggRGF0YWJyaWNrcyBpZGVudGl0eSB0aGUgYWdlbnRzXFwnIHdvcmtzcGFjZSBjYWxscyAoc2VydmluZyBjYXRhbG9ndWUsIEdlbmllLCBzdGF0ZW1lbnQgZXhlY3V0aW9uKSBydW4gYXMuIFwidXNlclwiIChkZWZhdWx0KSBpcyBhbHdheXMgT0JPLCBzbyBjYWxsZXJzIG11c3QgYmUgd29ya3NwYWNlIG1lbWJlcnM7IFwic2VydmljZS1wcmluY2lwYWxcIiBhbHdheXMgdXNlcyB0aGUgYXBwIHNlcnZpY2UgcHJpbmNpcGFsLCBzbyBhbnkgY2FsbGVyIHdobyBjYW4gb3BlbiB0aGUgYXBwIHdvcmtzLCBhdCB0aGUgY29zdCBvZiBwZXItdXNlciBhdHRyaWJ1dGlvbjsgXCJhdXRvXCIgdXNlcyBPQk8gd2hlbiB0aGUgcmVxdWVzdCBjYXJyaWVzIGFuIE9CTyB0b2tlbiBhbmQgdGhlIHNlcnZpY2UgcHJpbmNpcGFsIHdoZW4gaXQgZG9lcyBub3QsIGZvciBhbiBhcHAgdGhhdCBhbHNvIHNlcnZlcyBhIHR1bm5lbCBvciB3ZWJob29rIGRvb3IuIEZhbGxzIGJhY2sgdG8gTUFTVFJBX0dFTklFX0lERU5USVRZLicsXG4gICAgfSxcbiAgICBhcGlBY2Nlc3M6IHtcbiAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICBlbnVtOiBbXCJzY29wZWRcIiwgXCJmdWxsXCJdLFxuICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgICdIb3cgbXVjaCBvZiB0aGUgc3RvY2sgQG1hc3RyYS9leHByZXNzIEFQSSBpcyByZWFjaGFibGUgdGhyb3VnaCB0aGUgbW91bnQuIFwic2NvcGVkXCIgKGRlZmF1bHQpIGFsbG93cyBhZ2VudCBpbmZlcmVuY2UsIHJlYWQtb25seSBhZ2VudCBtZXRhZGF0YSwgdGhpcyBwbHVnaW5cXCdzIG93biByb3V0ZXMsIGFuZCBNQ1A7IFwiZnVsbFwiIGRpc3BhdGNoZXMgdGhlIGVudGlyZSBtYW5hZ2VtZW50IHN1cmZhY2UuJyxcbiAgICB9LFxuICAgIGJyYW5kOiB7XG4gICAgICB0eXBlOiBcIm9iamVjdFwiLFxuICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgIFwiUG9ydGFibGUgYnJhbmQgY29udGV4dCBhcHBsaWVkIHRvIGdlbmVyYXRlZCBjaGFydHMgKHNlcmllcyBwYWxldHRlIGZyb20gY29sb3JzLnByaW1hcnkgLyBjb2xvcnMuYWNjZW50LCBiYXNlIGZvbnQgZnJvbSB0eXBvZ3JhcGh5LnNhbnMpLlwiLFxuICAgIH0sXG4gIH0sXG59O1xuIl19
@@ -30,9 +30,9 @@ const STATEMENT_CACHE_TTL_SEC = 5 * 60;
30
30
  export const modelCatalogueDefaults = {
31
31
  default: {
32
32
  // Cache disabled here because `listServingEndpoints` already memoizes the
33
- // catalogue through the same `CacheManager`, keyed by workspace host with
34
- // `config.modelCacheTtlMs`. That entry is shared across identities; a
35
- // second interceptor cache would duplicate it once per user.
33
+ // catalogue in the shared model cache, keyed by workspace host and trusted
34
+ // credential identity with `config.modelCacheTtlMs`. A second interceptor
35
+ // cache would duplicate it once per user.
36
36
  cache: { enabled: false },
37
37
  // Retry enabled: listing endpoints is an idempotent GET, and the listing
38
38
  // is on the chat UI's load path, so a transient 5xx should not blank the
@@ -104,4 +104,4 @@ export const feedbackWriteDefaults = {
104
104
  timeout: REST_TIMEOUT_MS,
105
105
  },
106
106
  };
107
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVmYXVsdHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZGVmYXVsdHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FtQkc7QUFxQkgsMEVBQTBFO0FBQzFFLE1BQU0sZUFBZSxHQUFHLE1BQU0sQ0FBQztBQUUvQiwrRUFBK0U7QUFDL0UsTUFBTSxvQkFBb0IsR0FBRyxNQUFNLENBQUM7QUFFcEMseURBQXlEO0FBQ3pELE1BQU0sdUJBQXVCLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUV2Qzs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLHNCQUFzQixHQUFvQjtJQUNyRCxPQUFPLEVBQUU7UUFDUCwwRUFBMEU7UUFDMUUsMEVBQTBFO1FBQzFFLHNFQUFzRTtRQUN0RSw2REFBNkQ7UUFDN0QsS0FBSyxFQUFFLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRTtRQUN6Qix5RUFBeUU7UUFDekUseUVBQXlFO1FBQ3pFLGdCQUFnQjtRQUNoQixLQUFLLEVBQUUsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxDQUFDLEVBQUU7UUFDckMsT0FBTyxFQUFFLGVBQWU7S0FDekI7Q0FDRixDQUFDO0FBRUY7O0dBRUc7QUFDSCxNQUFNLENBQUMsTUFBTSx1QkFBdUIsR0FBb0I7SUFDdEQsT0FBTyxFQUFFO1FBQ1Asc0VBQXNFO1FBQ3RFLHlFQUF5RTtRQUN6RSx3RUFBd0U7UUFDeEUsS0FBSyxFQUFFLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRTtRQUN6QixxRUFBcUU7UUFDckUsd0VBQXdFO1FBQ3hFLDRCQUE0QjtRQUM1QixLQUFLLEVBQUUsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxDQUFDLEVBQUU7UUFDckMsT0FBTyxFQUFFLGVBQWU7S0FDekI7Q0FDRixDQUFDO0FBRUY7O0dBRUc7QUFDSCxNQUFNLENBQUMsTUFBTSxxQkFBcUIsR0FBb0I7SUFDcEQsT0FBTyxFQUFFO1FBQ1AsMEVBQTBFO1FBQzFFLCtEQUErRDtRQUMvRCwwRUFBMEU7UUFDMUUsa0RBQWtEO1FBQ2xELEtBQUssRUFBRSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLHVCQUF1QixFQUFFO1FBQ3RELDJEQUEyRDtRQUMzRCxLQUFLLEVBQUUsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxDQUFDLEVBQUU7UUFDckMsT0FBTyxFQUFFLG9CQUFvQjtLQUM5QjtDQUNGLENBQUM7QUFFRjs7O0dBR0c7QUFDSCxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBb0I7SUFDakQsT0FBTyxFQUFFO1FBQ1Asd0VBQXdFO1FBQ3hFLHNFQUFzRTtRQUN0RSxtQ0FBbUM7UUFDbkMsS0FBSyxFQUFFLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRTtRQUN6QiwyRUFBMkU7UUFDM0UsMERBQTBEO1FBQzFELEtBQUssRUFBRSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUU7UUFDekIsMkVBQTJFO1FBQzNFLDJFQUEyRTtRQUMzRSx1REFBdUQ7S0FDeEQ7Q0FDRixDQUFDO0FBRUY7O0dBRUc7QUFDSCxNQUFNLENBQUMsTUFBTSxxQkFBcUIsR0FBb0I7SUFDcEQsT0FBTyxFQUFFO1FBQ1AseUVBQXlFO1FBQ3pFLEtBQUssRUFBRSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUU7UUFDekIsMkVBQTJFO1FBQzNFLDJFQUEyRTtRQUMzRSxpRUFBaUU7UUFDakUsS0FBSyxFQUFFLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRTtRQUN6QixPQUFPLEVBQUUsZUFBZTtLQUN6QjtDQUNGLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEludGVyY2VwdG9yIGRlZmF1bHRzIGZvciBldmVyeSBvdXRib3VuZCBjYWxsIHRoZSBwbHVnaW4ncyBvd24gcm91dGVzIG1ha2VcbiAqIHRocm91Z2ggYFBsdWdpbi5leGVjdXRlKClgLlxuICpcbiAqIE9uZSBjb25zdGFudCBwZXIgY2FsbCBzaXRlIHNvIHRoZSBjYWNoZSAvIHJldHJ5IC8gdGltZW91dCBkZWNpc2lvbiBsaXZlc1xuICogYmVzaWRlIGl0cyByZWFzb25pbmcgaW5zdGVhZCBvZiBhdCB0aGUgY2FsbCBzaXRlLiBUaGUgaW50ZXJjZXB0b3IgY2hhaW4gcnVuc1xuICogdGVsZW1ldHJ5LCB0aW1lb3V0LCByZXRyeSwgY2FjaGUsIHNvIGEgZGlzYWJsZWQgaW50ZXJjZXB0b3IgaXMgYSBkZWxpYmVyYXRlXG4gKiBjaG9pY2UgYW5kIGlzIGNvbW1lbnRlZCBhcyBzdWNoLlxuICpcbiAqIFRoZSBjYWNoZSBpbnRlcmNlcHRvciBpcyBpbmVydCB3aXRob3V0IGEgYGNhY2hlLmNhY2hlS2V5YCwgd2hpY2ggaXNcbiAqIHJlcXVlc3Qtc3BlY2lmaWMgKGEgc3RhdGVtZW50IGlkLCBhbiBhZ2VudCBpZCkuIENhbGwgc2l0ZXMgdGhlcmVmb3JlIHNwcmVhZFxuICogdGhlIGNvbnN0YW50IGFuZCBhZGQgdGhlIGtleTsgdGhlIGlkZW50aXR5IG5hbWVzcGFjZSBjb21lcyBmcm9tIHRoZVxuICogZXhlY3V0aW9uIGNvbnRleHQncyB1c2VyIGlkLCB3aGljaCBgZXhlY3V0ZSgpYCByZXNvbHZlcyBvbiBpdHMgb3duLlxuICpcbiAqIENhbmNlbGxhdGlvbiBpcyBub3QgZXhwcmVzc2VkIGhlcmU6IGBleGVjdXRlKClgIGRlcml2ZXMgYSBzaWduYWwgZnJvbSB0aGVcbiAqIGB0aW1lb3V0YCBzZXR0aW5nIG9ubHksIHNvIGEgY2FsbGVyJ3Mgb3duIHNpZ25hbCBpcyBjb21iaW5lZCB3aXRoIGl0IGF0IHRoZVxuICogY2FsbCBzaXRlIGluc3RlYWQuXG4gKlxuICogQG1vZHVsZVxuICovXG5cbi8qKlxuICogUGVyLWNhbGwgaW50ZXJjZXB0b3Igc2V0dGluZ3MuIFN0cnVjdHVyYWwgc3RhbmQtaW4gZm9yIEFwcEtpdCdzXG4gKiBgUGx1Z2luRXhlY3V0ZUNvbmZpZ2A6IHRoZSBiYXJyZWwgZXhwb3J0cyBgU3RyZWFtRXhlY3V0aW9uU2V0dGluZ3NgIGJ1dCBub3RcbiAqIHRoZSBub24tc3RyZWFtaW5nIGNvbmZpZywgc28gdGhlIG5vbWluYWwgdHlwZSBpcyB1bmltcG9ydGFibGUgaGVyZS4gRGVjbGFyZWRcbiAqIGFzIGEgdHlwZSBhbGlhcyAobm90IGFuIGludGVyZmFjZSkgc28gaXQga2VlcHMgdGhlIGltcGxpY2l0IGluZGV4IHNpZ25hdHVyZVxuICogQXBwS2l0J3Mgb3duIGNvbmZpZyBjYXJyaWVzLlxuICovXG50eXBlIEV4ZWN1dGVDb25maWcgPSB7XG4gIGNhY2hlPzogeyBlbmFibGVkPzogYm9vbGVhbjsgdHRsPzogbnVtYmVyOyBjYWNoZUtleT86IChzdHJpbmcgfCBudW1iZXIgfCBvYmplY3QpW10gfTtcbiAgcmV0cnk/OiB7IGVuYWJsZWQ/OiBib29sZWFuOyBhdHRlbXB0cz86IG51bWJlcjsgaW5pdGlhbERlbGF5PzogbnVtYmVyOyBtYXhEZWxheT86IG51bWJlciB9O1xuICB0aW1lb3V0PzogbnVtYmVyO1xufTtcblxuLyoqIERlZmF1bHQgcGx1cyBvcHRpb25hbCB1c2VyLXNjb3BlZCBzZXR0aW5ncywgYXMgYGV4ZWN1dGUoKWAgYWNjZXB0cyB0aGVtLiAqL1xudHlwZSBFeGVjdXRlU2V0dGluZ3MgPSB7XG4gIGRlZmF1bHQ6IEV4ZWN1dGVDb25maWc7XG4gIHVzZXI/OiBFeGVjdXRlQ29uZmlnO1xufTtcblxuLyoqIENlaWxpbmcgb24gYSBzaW5nbGUgTW9kZWwgU2VydmluZyAvIEdlbmllIC8gTUxmbG93IFJFU1Qgcm91bmQtdHJpcC4gKi9cbmNvbnN0IFJFU1RfVElNRU9VVF9NUyA9IDMwXzAwMDtcblxuLyoqIENlaWxpbmcgb24gb25lIFN0YXRlbWVudCBFeGVjdXRpb24gZmV0Y2gsIHdoaWNoIGNhbiBwYWdlIGEgbGFyZ2UgcmVzdWx0LiAqL1xuY29uc3QgU1RBVEVNRU5UX1RJTUVPVVRfTVMgPSA2MF8wMDA7XG5cbi8qKiBUVEwgZm9yIGEgY2FjaGVkIHN0YXRlbWVudCByZXN1bHQgc2V0LCBpbiBzZWNvbmRzLiAqL1xuY29uc3QgU1RBVEVNRU5UX0NBQ0hFX1RUTF9TRUMgPSA1ICogNjA7XG5cbi8qKlxuICogYEdFVCAvbW9kZWxzYDogdGhlIHdvcmtzcGFjZSdzIE1vZGVsIFNlcnZpbmcgY2F0YWxvZ3VlLlxuICovXG5leHBvcnQgY29uc3QgbW9kZWxDYXRhbG9ndWVEZWZhdWx0czogRXhlY3V0ZVNldHRpbmdzID0ge1xuICBkZWZhdWx0OiB7XG4gICAgLy8gQ2FjaGUgZGlzYWJsZWQgaGVyZSBiZWNhdXNlIGBsaXN0U2VydmluZ0VuZHBvaW50c2AgYWxyZWFkeSBtZW1vaXplcyB0aGVcbiAgICAvLyBjYXRhbG9ndWUgdGhyb3VnaCB0aGUgc2FtZSBgQ2FjaGVNYW5hZ2VyYCwga2V5ZWQgYnkgd29ya3NwYWNlIGhvc3Qgd2l0aFxuICAgIC8vIGBjb25maWcubW9kZWxDYWNoZVR0bE1zYC4gVGhhdCBlbnRyeSBpcyBzaGFyZWQgYWNyb3NzIGlkZW50aXRpZXM7IGFcbiAgICAvLyBzZWNvbmQgaW50ZXJjZXB0b3IgY2FjaGUgd291bGQgZHVwbGljYXRlIGl0IG9uY2UgcGVyIHVzZXIuXG4gICAgY2FjaGU6IHsgZW5hYmxlZDogZmFsc2UgfSxcbiAgICAvLyBSZXRyeSBlbmFibGVkOiBsaXN0aW5nIGVuZHBvaW50cyBpcyBhbiBpZGVtcG90ZW50IEdFVCwgYW5kIHRoZSBsaXN0aW5nXG4gICAgLy8gaXMgb24gdGhlIGNoYXQgVUkncyBsb2FkIHBhdGgsIHNvIGEgdHJhbnNpZW50IDV4eCBzaG91bGQgbm90IGJsYW5rIHRoZVxuICAgIC8vIG1vZGVsIHBpY2tlci5cbiAgICByZXRyeTogeyBlbmFibGVkOiB0cnVlLCBhdHRlbXB0czogMyB9LFxuICAgIHRpbWVvdXQ6IFJFU1RfVElNRU9VVF9NUyxcbiAgfSxcbn07XG5cbi8qKlxuICogYEdFVCAvc3VnZ2VzdGlvbnNgOiB0aGUgY3VyYXRlZCBgc2FtcGxlX3F1ZXN0aW9uc2Agb24gZWFjaCBHZW5pZSBzcGFjZS5cbiAqL1xuZXhwb3J0IGNvbnN0IGdlbmllU3VnZ2VzdGlvbkRlZmF1bHRzOiBFeGVjdXRlU2V0dGluZ3MgPSB7XG4gIGRlZmF1bHQ6IHtcbiAgICAvLyBDYWNoZSBkaXNhYmxlZCBoZXJlIGJlY2F1c2UgYGNvbGxlY3RTcGFjZVN1Z2dlc3Rpb25zYCBrZWVwcyBpdHMgb3duXG4gICAgLy8gc3BhY2UtaWQta2V5ZWQgZW50cnk7IHRoZSBxdWVzdGlvbnMgYXJlIGF1dGhvcmVkIGNvbmZpZywgaWRlbnRpY2FsIGZvclxuICAgIC8vIGV2ZXJ5IGNhbGxlciwgc28gY2FjaGluZyB0aGVtIHBlciBpZGVudGl0eSB3b3VsZCBvbmx5IGZhbiBvdXQgY29waWVzLlxuICAgIGNhY2hlOiB7IGVuYWJsZWQ6IGZhbHNlIH0sXG4gICAgLy8gUmV0cnkgZW5hYmxlZDogcmVhZGluZyBzcGFjZSBtZXRhZGF0YSBpcyBpZGVtcG90ZW50LCBhbmQgdGhlIHJvdXRlXG4gICAgLy8gZGVncmFkZXMgdG8gYW4gZW1wdHkgc3RhcnRlciBsaXN0IG9uIGZhaWx1cmUsIHNvIG9uZSByZXRyeSBpcyBjaGVhcGVyXG4gICAgLy8gdGhhbiBhbiBlbXB0eSBjaGF0IHN0YXRlLlxuICAgIHJldHJ5OiB7IGVuYWJsZWQ6IHRydWUsIGF0dGVtcHRzOiAyIH0sXG4gICAgdGltZW91dDogUkVTVF9USU1FT1VUX01TLFxuICB9LFxufTtcblxuLyoqXG4gKiBgR0VUIC9lbWJlZC9kYXRhLzppZGA6IG9uZSBTdGF0ZW1lbnQgRXhlY3V0aW9uIHJlc3VsdCBzZXQuXG4gKi9cbmV4cG9ydCBjb25zdCBzdGF0ZW1lbnREYXRhRGVmYXVsdHM6IEV4ZWN1dGVTZXR0aW5ncyA9IHtcbiAgZGVmYXVsdDoge1xuICAgIC8vIENhY2hlIGVuYWJsZWQ6IGEgY29tcGxldGVkIHN0YXRlbWVudCdzIHJlc3VsdCBzZXQgaXMgaW1tdXRhYmxlLCBhbmQgdGhlXG4gICAgLy8gc2FtZSBpZCBpcyByZS1mZXRjaGVkIGV2ZXJ5IHRpbWUgdGhlIHRyYW5zY3JpcHQgcmUtcmVuZGVycyBhXG4gICAgLy8gYFtkYXRhOjxzdGF0ZW1lbnRfaWQ+XWAgbWFya2VyLiBUaGUgZW50cnkgaXMgbmFtZXNwYWNlZCBieSB0aGUgY2FsbGVyJ3NcbiAgICAvLyBpZGVudGl0eSwgc28gYW4gT0JPIHJlc3VsdCBuZXZlciBjcm9zc2VzIHVzZXJzLlxuICAgIGNhY2hlOiB7IGVuYWJsZWQ6IHRydWUsIHR0bDogU1RBVEVNRU5UX0NBQ0hFX1RUTF9TRUMgfSxcbiAgICAvLyBSZXRyeSBlbmFibGVkOiBmZXRjaGluZyBhIHN0YXRlbWVudCBieSBpZCBpcyBpZGVtcG90ZW50LlxuICAgIHJldHJ5OiB7IGVuYWJsZWQ6IHRydWUsIGF0dGVtcHRzOiAzIH0sXG4gICAgdGltZW91dDogU1RBVEVNRU5UX1RJTUVPVVRfTVMsXG4gIH0sXG59O1xuXG4vKipcbiAqIGBHRVQgL2VtYmVkL2NoYXJ0LzppZGA6IHRoZSBjYWNoZWQgY2hhcnQgZW50cnkgYmVoaW5kIGEgYFtjaGFydDo8aWQ+XWBcbiAqIG1hcmtlci5cbiAqL1xuZXhwb3J0IGNvbnN0IGNoYXJ0RmV0Y2hEZWZhdWx0czogRXhlY3V0ZVNldHRpbmdzID0ge1xuICBkZWZhdWx0OiB7XG4gICAgLy8gQ2FjaGUgZGlzYWJsZWQ6IHRoZSByZWFkIGxvbmctcG9sbHMgYSBjYWNoZSBlbnRyeSB0aGF0IGlzIGV4cGVjdGVkIHRvXG4gICAgLy8gY2hhbmdlIGZyb20gcHJvY2Vzc2luZyB0byBzZXR0bGVkLCBzbyBhIGNhY2hlZCBhbnN3ZXIgd291bGQgcGluIHRoZVxuICAgIC8vIGNsaWVudCB0byB0aGUgcHJlLXBsYW5uZXIgc3RhdGUuXG4gICAgY2FjaGU6IHsgZW5hYmxlZDogZmFsc2UgfSxcbiAgICAvLyBSZXRyeSBkaXNhYmxlZDogdGhlIGhlbHBlciBhbHJlYWR5IHBvbGxzIHRvIGl0cyBvd24gZGVhZGxpbmUsIHNvIGEgcmV0cnlcbiAgICAvLyB3b3VsZCBvbmx5IHJlc3RhcnQgYSB3YWl0IHRoZSBjYWxsZXIgaXMgYWxyZWFkeSBpbnNpZGUuXG4gICAgcmV0cnk6IHsgZW5hYmxlZDogZmFsc2UgfSxcbiAgICAvLyBObyB0aW1lb3V0OiB0aGUgcG9sbCBidWRnZXQgaXMgcGVyIHJlcXVlc3QgKGA/dGltZW91dE1zPWAsIGNhcHBlZCBieSB0aGVcbiAgICAvLyByb3V0ZSkgYW5kIGNhbmNlbGxhdGlvbiByaWRlcyB0aGUgY29ubmVjdGlvbidzIGFib3J0IHNpZ25hbCwgc28gYSBzZWNvbmRcbiAgICAvLyBjZWlsaW5nIGhlcmUgY291bGQgY3V0IGEgbGVnaXRpbWF0ZSBsb25nLXBvbGwgc2hvcnQuXG4gIH0sXG59O1xuXG4vKipcbiAqIGBQT1NUIC9yb3V0ZS9mZWVkYmFja2A6IGFuIE1MZmxvdyB0cmFjZSBhc3Nlc3NtZW50LlxuICovXG5leHBvcnQgY29uc3QgZmVlZGJhY2tXcml0ZURlZmF1bHRzOiBFeGVjdXRlU2V0dGluZ3MgPSB7XG4gIGRlZmF1bHQ6IHtcbiAgICAvLyBDYWNoZSBkaXNhYmxlZDogYSB3cml0ZSwgYW5kIGVhY2ggc3VibWlzc2lvbiBpcyBhIGRpc3RpbmN0IGFzc2Vzc21lbnQuXG4gICAgY2FjaGU6IHsgZW5hYmxlZDogZmFsc2UgfSxcbiAgICAvLyBSZXRyeSBkaXNhYmxlZDogcG9zdGluZyBhbiBhc3Nlc3NtZW50IGlzIG5vdCBpZGVtcG90ZW50IChhIHJldHJ5IHJlY29yZHNcbiAgICAvLyBhIGR1cGxpY2F0ZSksIGFuZCBgbG9nRmVlZGJhY2tgIGFscmVhZHkgcmV0cmllcyB0aGUgb25lIHJlY292ZXJhYmxlIGNhc2VcbiAgICAvLyBpdHNlbGYsIHRoZSB0cmFjZSBub3QgaGF2aW5nIGZpbmlzaGVkIGV4cG9ydGluZyB0byBNTGZsb3cgeWV0LlxuICAgIHJldHJ5OiB7IGVuYWJsZWQ6IGZhbHNlIH0sXG4gICAgdGltZW91dDogUkVTVF9USU1FT1VUX01TLFxuICB9LFxufTtcbiJdfQ==
107
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVmYXVsdHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZGVmYXVsdHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FtQkc7QUFxQkgsMEVBQTBFO0FBQzFFLE1BQU0sZUFBZSxHQUFHLE1BQU0sQ0FBQztBQUUvQiwrRUFBK0U7QUFDL0UsTUFBTSxvQkFBb0IsR0FBRyxNQUFNLENBQUM7QUFFcEMseURBQXlEO0FBQ3pELE1BQU0sdUJBQXVCLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUV2Qzs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLHNCQUFzQixHQUFvQjtJQUNyRCxPQUFPLEVBQUU7UUFDUCwwRUFBMEU7UUFDMUUsMkVBQTJFO1FBQzNFLDBFQUEwRTtRQUMxRSwwQ0FBMEM7UUFDMUMsS0FBSyxFQUFFLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRTtRQUN6Qix5RUFBeUU7UUFDekUseUVBQXlFO1FBQ3pFLGdCQUFnQjtRQUNoQixLQUFLLEVBQUUsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxDQUFDLEVBQUU7UUFDckMsT0FBTyxFQUFFLGVBQWU7S0FDekI7Q0FDRixDQUFDO0FBRUY7O0dBRUc7QUFDSCxNQUFNLENBQUMsTUFBTSx1QkFBdUIsR0FBb0I7SUFDdEQsT0FBTyxFQUFFO1FBQ1Asc0VBQXNFO1FBQ3RFLHlFQUF5RTtRQUN6RSx3RUFBd0U7UUFDeEUsS0FBSyxFQUFFLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRTtRQUN6QixxRUFBcUU7UUFDckUsd0VBQXdFO1FBQ3hFLDRCQUE0QjtRQUM1QixLQUFLLEVBQUUsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxDQUFDLEVBQUU7UUFDckMsT0FBTyxFQUFFLGVBQWU7S0FDekI7Q0FDRixDQUFDO0FBRUY7O0dBRUc7QUFDSCxNQUFNLENBQUMsTUFBTSxxQkFBcUIsR0FBb0I7SUFDcEQsT0FBTyxFQUFFO1FBQ1AsMEVBQTBFO1FBQzFFLCtEQUErRDtRQUMvRCwwRUFBMEU7UUFDMUUsa0RBQWtEO1FBQ2xELEtBQUssRUFBRSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLHVCQUF1QixFQUFFO1FBQ3RELDJEQUEyRDtRQUMzRCxLQUFLLEVBQUUsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxDQUFDLEVBQUU7UUFDckMsT0FBTyxFQUFFLG9CQUFvQjtLQUM5QjtDQUNGLENBQUM7QUFFRjs7O0dBR0c7QUFDSCxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBb0I7SUFDakQsT0FBTyxFQUFFO1FBQ1Asd0VBQXdFO1FBQ3hFLHNFQUFzRTtRQUN0RSxtQ0FBbUM7UUFDbkMsS0FBSyxFQUFFLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRTtRQUN6QiwyRUFBMkU7UUFDM0UsMERBQTBEO1FBQzFELEtBQUssRUFBRSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUU7UUFDekIsMkVBQTJFO1FBQzNFLDJFQUEyRTtRQUMzRSx1REFBdUQ7S0FDeEQ7Q0FDRixDQUFDO0FBRUY7O0dBRUc7QUFDSCxNQUFNLENBQUMsTUFBTSxxQkFBcUIsR0FBb0I7SUFDcEQsT0FBTyxFQUFFO1FBQ1AseUVBQXlFO1FBQ3pFLEtBQUssRUFBRSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUU7UUFDekIsMkVBQTJFO1FBQzNFLDJFQUEyRTtRQUMzRSxpRUFBaUU7UUFDakUsS0FBSyxFQUFFLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRTtRQUN6QixPQUFPLEVBQUUsZUFBZTtLQUN6QjtDQUNGLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEludGVyY2VwdG9yIGRlZmF1bHRzIGZvciBldmVyeSBvdXRib3VuZCBjYWxsIHRoZSBwbHVnaW4ncyBvd24gcm91dGVzIG1ha2VcbiAqIHRocm91Z2ggYFBsdWdpbi5leGVjdXRlKClgLlxuICpcbiAqIE9uZSBjb25zdGFudCBwZXIgY2FsbCBzaXRlIHNvIHRoZSBjYWNoZSAvIHJldHJ5IC8gdGltZW91dCBkZWNpc2lvbiBsaXZlc1xuICogYmVzaWRlIGl0cyByZWFzb25pbmcgaW5zdGVhZCBvZiBhdCB0aGUgY2FsbCBzaXRlLiBUaGUgaW50ZXJjZXB0b3IgY2hhaW4gcnVuc1xuICogdGVsZW1ldHJ5LCB0aW1lb3V0LCByZXRyeSwgY2FjaGUsIHNvIGEgZGlzYWJsZWQgaW50ZXJjZXB0b3IgaXMgYSBkZWxpYmVyYXRlXG4gKiBjaG9pY2UgYW5kIGlzIGNvbW1lbnRlZCBhcyBzdWNoLlxuICpcbiAqIFRoZSBjYWNoZSBpbnRlcmNlcHRvciBpcyBpbmVydCB3aXRob3V0IGEgYGNhY2hlLmNhY2hlS2V5YCwgd2hpY2ggaXNcbiAqIHJlcXVlc3Qtc3BlY2lmaWMgKGEgc3RhdGVtZW50IGlkLCBhbiBhZ2VudCBpZCkuIENhbGwgc2l0ZXMgdGhlcmVmb3JlIHNwcmVhZFxuICogdGhlIGNvbnN0YW50IGFuZCBhZGQgdGhlIGtleTsgdGhlIGlkZW50aXR5IG5hbWVzcGFjZSBjb21lcyBmcm9tIHRoZVxuICogZXhlY3V0aW9uIGNvbnRleHQncyB1c2VyIGlkLCB3aGljaCBgZXhlY3V0ZSgpYCByZXNvbHZlcyBvbiBpdHMgb3duLlxuICpcbiAqIENhbmNlbGxhdGlvbiBpcyBub3QgZXhwcmVzc2VkIGhlcmU6IGBleGVjdXRlKClgIGRlcml2ZXMgYSBzaWduYWwgZnJvbSB0aGVcbiAqIGB0aW1lb3V0YCBzZXR0aW5nIG9ubHksIHNvIGEgY2FsbGVyJ3Mgb3duIHNpZ25hbCBpcyBjb21iaW5lZCB3aXRoIGl0IGF0IHRoZVxuICogY2FsbCBzaXRlIGluc3RlYWQuXG4gKlxuICogQG1vZHVsZVxuICovXG5cbi8qKlxuICogUGVyLWNhbGwgaW50ZXJjZXB0b3Igc2V0dGluZ3MuIFN0cnVjdHVyYWwgc3RhbmQtaW4gZm9yIEFwcEtpdCdzXG4gKiBgUGx1Z2luRXhlY3V0ZUNvbmZpZ2A6IHRoZSBiYXJyZWwgZXhwb3J0cyBgU3RyZWFtRXhlY3V0aW9uU2V0dGluZ3NgIGJ1dCBub3RcbiAqIHRoZSBub24tc3RyZWFtaW5nIGNvbmZpZywgc28gdGhlIG5vbWluYWwgdHlwZSBpcyB1bmltcG9ydGFibGUgaGVyZS4gRGVjbGFyZWRcbiAqIGFzIGEgdHlwZSBhbGlhcyAobm90IGFuIGludGVyZmFjZSkgc28gaXQga2VlcHMgdGhlIGltcGxpY2l0IGluZGV4IHNpZ25hdHVyZVxuICogQXBwS2l0J3Mgb3duIGNvbmZpZyBjYXJyaWVzLlxuICovXG50eXBlIEV4ZWN1dGVDb25maWcgPSB7XG4gIGNhY2hlPzogeyBlbmFibGVkPzogYm9vbGVhbjsgdHRsPzogbnVtYmVyOyBjYWNoZUtleT86IChzdHJpbmcgfCBudW1iZXIgfCBvYmplY3QpW10gfTtcbiAgcmV0cnk/OiB7IGVuYWJsZWQ/OiBib29sZWFuOyBhdHRlbXB0cz86IG51bWJlcjsgaW5pdGlhbERlbGF5PzogbnVtYmVyOyBtYXhEZWxheT86IG51bWJlciB9O1xuICB0aW1lb3V0PzogbnVtYmVyO1xufTtcblxuLyoqIERlZmF1bHQgcGx1cyBvcHRpb25hbCB1c2VyLXNjb3BlZCBzZXR0aW5ncywgYXMgYGV4ZWN1dGUoKWAgYWNjZXB0cyB0aGVtLiAqL1xudHlwZSBFeGVjdXRlU2V0dGluZ3MgPSB7XG4gIGRlZmF1bHQ6IEV4ZWN1dGVDb25maWc7XG4gIHVzZXI/OiBFeGVjdXRlQ29uZmlnO1xufTtcblxuLyoqIENlaWxpbmcgb24gYSBzaW5nbGUgTW9kZWwgU2VydmluZyAvIEdlbmllIC8gTUxmbG93IFJFU1Qgcm91bmQtdHJpcC4gKi9cbmNvbnN0IFJFU1RfVElNRU9VVF9NUyA9IDMwXzAwMDtcblxuLyoqIENlaWxpbmcgb24gb25lIFN0YXRlbWVudCBFeGVjdXRpb24gZmV0Y2gsIHdoaWNoIGNhbiBwYWdlIGEgbGFyZ2UgcmVzdWx0LiAqL1xuY29uc3QgU1RBVEVNRU5UX1RJTUVPVVRfTVMgPSA2MF8wMDA7XG5cbi8qKiBUVEwgZm9yIGEgY2FjaGVkIHN0YXRlbWVudCByZXN1bHQgc2V0LCBpbiBzZWNvbmRzLiAqL1xuY29uc3QgU1RBVEVNRU5UX0NBQ0hFX1RUTF9TRUMgPSA1ICogNjA7XG5cbi8qKlxuICogYEdFVCAvbW9kZWxzYDogdGhlIHdvcmtzcGFjZSdzIE1vZGVsIFNlcnZpbmcgY2F0YWxvZ3VlLlxuICovXG5leHBvcnQgY29uc3QgbW9kZWxDYXRhbG9ndWVEZWZhdWx0czogRXhlY3V0ZVNldHRpbmdzID0ge1xuICBkZWZhdWx0OiB7XG4gICAgLy8gQ2FjaGUgZGlzYWJsZWQgaGVyZSBiZWNhdXNlIGBsaXN0U2VydmluZ0VuZHBvaW50c2AgYWxyZWFkeSBtZW1vaXplcyB0aGVcbiAgICAvLyBjYXRhbG9ndWUgaW4gdGhlIHNoYXJlZCBtb2RlbCBjYWNoZSwga2V5ZWQgYnkgd29ya3NwYWNlIGhvc3QgYW5kIHRydXN0ZWRcbiAgICAvLyBjcmVkZW50aWFsIGlkZW50aXR5IHdpdGggYGNvbmZpZy5tb2RlbENhY2hlVHRsTXNgLiBBIHNlY29uZCBpbnRlcmNlcHRvclxuICAgIC8vIGNhY2hlIHdvdWxkIGR1cGxpY2F0ZSBpdCBvbmNlIHBlciB1c2VyLlxuICAgIGNhY2hlOiB7IGVuYWJsZWQ6IGZhbHNlIH0sXG4gICAgLy8gUmV0cnkgZW5hYmxlZDogbGlzdGluZyBlbmRwb2ludHMgaXMgYW4gaWRlbXBvdGVudCBHRVQsIGFuZCB0aGUgbGlzdGluZ1xuICAgIC8vIGlzIG9uIHRoZSBjaGF0IFVJJ3MgbG9hZCBwYXRoLCBzbyBhIHRyYW5zaWVudCA1eHggc2hvdWxkIG5vdCBibGFuayB0aGVcbiAgICAvLyBtb2RlbCBwaWNrZXIuXG4gICAgcmV0cnk6IHsgZW5hYmxlZDogdHJ1ZSwgYXR0ZW1wdHM6IDMgfSxcbiAgICB0aW1lb3V0OiBSRVNUX1RJTUVPVVRfTVMsXG4gIH0sXG59O1xuXG4vKipcbiAqIGBHRVQgL3N1Z2dlc3Rpb25zYDogdGhlIGN1cmF0ZWQgYHNhbXBsZV9xdWVzdGlvbnNgIG9uIGVhY2ggR2VuaWUgc3BhY2UuXG4gKi9cbmV4cG9ydCBjb25zdCBnZW5pZVN1Z2dlc3Rpb25EZWZhdWx0czogRXhlY3V0ZVNldHRpbmdzID0ge1xuICBkZWZhdWx0OiB7XG4gICAgLy8gQ2FjaGUgZGlzYWJsZWQgaGVyZSBiZWNhdXNlIGBjb2xsZWN0U3BhY2VTdWdnZXN0aW9uc2Aga2VlcHMgaXRzIG93blxuICAgIC8vIHNwYWNlLWlkLWtleWVkIGVudHJ5OyB0aGUgcXVlc3Rpb25zIGFyZSBhdXRob3JlZCBjb25maWcsIGlkZW50aWNhbCBmb3JcbiAgICAvLyBldmVyeSBjYWxsZXIsIHNvIGNhY2hpbmcgdGhlbSBwZXIgaWRlbnRpdHkgd291bGQgb25seSBmYW4gb3V0IGNvcGllcy5cbiAgICBjYWNoZTogeyBlbmFibGVkOiBmYWxzZSB9LFxuICAgIC8vIFJldHJ5IGVuYWJsZWQ6IHJlYWRpbmcgc3BhY2UgbWV0YWRhdGEgaXMgaWRlbXBvdGVudCwgYW5kIHRoZSByb3V0ZVxuICAgIC8vIGRlZ3JhZGVzIHRvIGFuIGVtcHR5IHN0YXJ0ZXIgbGlzdCBvbiBmYWlsdXJlLCBzbyBvbmUgcmV0cnkgaXMgY2hlYXBlclxuICAgIC8vIHRoYW4gYW4gZW1wdHkgY2hhdCBzdGF0ZS5cbiAgICByZXRyeTogeyBlbmFibGVkOiB0cnVlLCBhdHRlbXB0czogMiB9LFxuICAgIHRpbWVvdXQ6IFJFU1RfVElNRU9VVF9NUyxcbiAgfSxcbn07XG5cbi8qKlxuICogYEdFVCAvZW1iZWQvZGF0YS86aWRgOiBvbmUgU3RhdGVtZW50IEV4ZWN1dGlvbiByZXN1bHQgc2V0LlxuICovXG5leHBvcnQgY29uc3Qgc3RhdGVtZW50RGF0YURlZmF1bHRzOiBFeGVjdXRlU2V0dGluZ3MgPSB7XG4gIGRlZmF1bHQ6IHtcbiAgICAvLyBDYWNoZSBlbmFibGVkOiBhIGNvbXBsZXRlZCBzdGF0ZW1lbnQncyByZXN1bHQgc2V0IGlzIGltbXV0YWJsZSwgYW5kIHRoZVxuICAgIC8vIHNhbWUgaWQgaXMgcmUtZmV0Y2hlZCBldmVyeSB0aW1lIHRoZSB0cmFuc2NyaXB0IHJlLXJlbmRlcnMgYVxuICAgIC8vIGBbZGF0YTo8c3RhdGVtZW50X2lkPl1gIG1hcmtlci4gVGhlIGVudHJ5IGlzIG5hbWVzcGFjZWQgYnkgdGhlIGNhbGxlcidzXG4gICAgLy8gaWRlbnRpdHksIHNvIGFuIE9CTyByZXN1bHQgbmV2ZXIgY3Jvc3NlcyB1c2Vycy5cbiAgICBjYWNoZTogeyBlbmFibGVkOiB0cnVlLCB0dGw6IFNUQVRFTUVOVF9DQUNIRV9UVExfU0VDIH0sXG4gICAgLy8gUmV0cnkgZW5hYmxlZDogZmV0Y2hpbmcgYSBzdGF0ZW1lbnQgYnkgaWQgaXMgaWRlbXBvdGVudC5cbiAgICByZXRyeTogeyBlbmFibGVkOiB0cnVlLCBhdHRlbXB0czogMyB9LFxuICAgIHRpbWVvdXQ6IFNUQVRFTUVOVF9USU1FT1VUX01TLFxuICB9LFxufTtcblxuLyoqXG4gKiBgR0VUIC9lbWJlZC9jaGFydC86aWRgOiB0aGUgY2FjaGVkIGNoYXJ0IGVudHJ5IGJlaGluZCBhIGBbY2hhcnQ6PGlkPl1gXG4gKiBtYXJrZXIuXG4gKi9cbmV4cG9ydCBjb25zdCBjaGFydEZldGNoRGVmYXVsdHM6IEV4ZWN1dGVTZXR0aW5ncyA9IHtcbiAgZGVmYXVsdDoge1xuICAgIC8vIENhY2hlIGRpc2FibGVkOiB0aGUgcmVhZCBsb25nLXBvbGxzIGEgY2FjaGUgZW50cnkgdGhhdCBpcyBleHBlY3RlZCB0b1xuICAgIC8vIGNoYW5nZSBmcm9tIHByb2Nlc3NpbmcgdG8gc2V0dGxlZCwgc28gYSBjYWNoZWQgYW5zd2VyIHdvdWxkIHBpbiB0aGVcbiAgICAvLyBjbGllbnQgdG8gdGhlIHByZS1wbGFubmVyIHN0YXRlLlxuICAgIGNhY2hlOiB7IGVuYWJsZWQ6IGZhbHNlIH0sXG4gICAgLy8gUmV0cnkgZGlzYWJsZWQ6IHRoZSBoZWxwZXIgYWxyZWFkeSBwb2xscyB0byBpdHMgb3duIGRlYWRsaW5lLCBzbyBhIHJldHJ5XG4gICAgLy8gd291bGQgb25seSByZXN0YXJ0IGEgd2FpdCB0aGUgY2FsbGVyIGlzIGFscmVhZHkgaW5zaWRlLlxuICAgIHJldHJ5OiB7IGVuYWJsZWQ6IGZhbHNlIH0sXG4gICAgLy8gTm8gdGltZW91dDogdGhlIHBvbGwgYnVkZ2V0IGlzIHBlciByZXF1ZXN0IChgP3RpbWVvdXRNcz1gLCBjYXBwZWQgYnkgdGhlXG4gICAgLy8gcm91dGUpIGFuZCBjYW5jZWxsYXRpb24gcmlkZXMgdGhlIGNvbm5lY3Rpb24ncyBhYm9ydCBzaWduYWwsIHNvIGEgc2Vjb25kXG4gICAgLy8gY2VpbGluZyBoZXJlIGNvdWxkIGN1dCBhIGxlZ2l0aW1hdGUgbG9uZy1wb2xsIHNob3J0LlxuICB9LFxufTtcblxuLyoqXG4gKiBgUE9TVCAvcm91dGUvZmVlZGJhY2tgOiBhbiBNTGZsb3cgdHJhY2UgYXNzZXNzbWVudC5cbiAqL1xuZXhwb3J0IGNvbnN0IGZlZWRiYWNrV3JpdGVEZWZhdWx0czogRXhlY3V0ZVNldHRpbmdzID0ge1xuICBkZWZhdWx0OiB7XG4gICAgLy8gQ2FjaGUgZGlzYWJsZWQ6IGEgd3JpdGUsIGFuZCBlYWNoIHN1Ym1pc3Npb24gaXMgYSBkaXN0aW5jdCBhc3Nlc3NtZW50LlxuICAgIGNhY2hlOiB7IGVuYWJsZWQ6IGZhbHNlIH0sXG4gICAgLy8gUmV0cnkgZGlzYWJsZWQ6IHBvc3RpbmcgYW4gYXNzZXNzbWVudCBpcyBub3QgaWRlbXBvdGVudCAoYSByZXRyeSByZWNvcmRzXG4gICAgLy8gYSBkdXBsaWNhdGUpLCBhbmQgYGxvZ0ZlZWRiYWNrYCBhbHJlYWR5IHJldHJpZXMgdGhlIG9uZSByZWNvdmVyYWJsZSBjYXNlXG4gICAgLy8gaXRzZWxmLCB0aGUgdHJhY2Ugbm90IGhhdmluZyBmaW5pc2hlZCBleHBvcnRpbmcgdG8gTUxmbG93IHlldC5cbiAgICByZXRyeTogeyBlbmFibGVkOiBmYWxzZSB9LFxuICAgIHRpbWVvdXQ6IFJFU1RfVElNRU9VVF9NUyxcbiAgfSxcbn07XG4iXX0=
@@ -156,7 +156,9 @@ export declare function buildGenieToolkitProvider(opts: {
156
156
  * questions and a multi-space app round-trips breadth-first up to the
157
157
  * cap. A per-space fetch failure degrades to "no questions for that
158
158
  * space" (logged, not thrown) so one unreachable space never blanks
159
- * the whole list. Returns `[]` when no spaces are configured.
159
+ * the whole list. When `signal` aborts (the HTTP caller disconnected),
160
+ * collection stops silently and returns what was merged so far.
161
+ * Returns `[]` when no spaces are configured.
160
162
  */
161
163
  export declare function collectSpaceSuggestions(opts: {
162
164
  spaces: Record<string, GenieSpaceConfig>;