@magicx-eng/ai-autocomplete-angular 0.31.6 → 0.32.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -399,6 +399,7 @@ Standalone-first apps don't need this — import the components/directive direct
399
399
  | `apiConfig` | `APIConfig` | — | Runtime API configuration (see below). |
400
400
  | `visitorId` | `string \| (() => string \| undefined)` | — | Stable UUID v4 for this visitor, kept across page loads, or a function returning it. See [Visitor id and submits](#visitor-id-and-submits). |
401
401
  | `additionalContext` | `Record<string, unknown>` | — | Optional user context. Include whatever you know about the user (a profile, preferences, workspace, anything) to personalize suggested parameters and options to them. |
402
+ | `language` | `string` | browser language | BCP 47 language tag of the shopper (e.g. `"es"`), sent with every suggestion request. Default: the browser language (`navigator.language`), else `"en-US"`. |
402
403
  | `optionOverrides` | `OptionOverrides` | — | Supply the options for a parameter yourself, per suggestion type — fixed, computed, or fetched as the user types. See [Option Overrides](#option-overrides). |
403
404
  | `maskCompletedText` | `boolean` | `false` | When `true`, omits completed params' literal text from API requests (for masking PII/sensitive values from the server). |
404
405
  | `columns` | `number` | `2` | Number of columns in the dropdown grid. |
@@ -740,7 +741,8 @@ apiConfig: AccessTokenConfig = {
740
741
  getAccessToken: async () => {
741
742
  const res = await fetch("/api/ac-token");
742
743
  const { access_token, expires_at } = await res.json();
743
- return { accessToken: access_token, expiresAt: expires_at };
744
+ // expires_at is Unix seconds; the SDK's expiresAt is Unix milliseconds.
745
+ return { accessToken: access_token, expiresAt: expires_at * 1000 };
744
746
  },
745
747
  };
746
748
  ```
@@ -754,7 +756,7 @@ apiConfig: AccessTokenConfig = {
754
756
  | `appIdentifier?` | `string` | Value for the `X-App-Identifier` header. |
755
757
  | `headers?` | `Record<string, string>` | Additional headers merged into every request. |
756
758
 
757
- The SDK handles token refresh transparently: 401 → `getAccessToken` → retry (once). Concurrent 401s share a single refresh. Tokens refresh proactively 30s before `expiresAt`.
759
+ The SDK handles token refresh transparently: 401 → `getAccessToken` → retry (once). Concurrent 401s share a single refresh. Tokens refresh proactively 30s before `expiresAt` (Unix milliseconds).
758
760
 
759
761
  ### `AIAutocompleteController` (Tier 2)
760
762
 
@@ -772,7 +774,7 @@ ac.destroy();
772
774
 
773
775
  #### Constructor options
774
776
 
775
- Accepts the same shape as `<ai-autocomplete>`'s inputs (`apiConfig`, `additionalContext`, `visitorId`, `optionOverrides`, `columns`, `dropdownTrigger`, `optionsPosition`, `closeDropdownOnBlur`, `showNonTappableOptions`, `showProducts`, `products`), plus event callbacks (`onSubmit`, `onResult`, `onError`, `onChange`, `onParamsChange`, `onFocus`, `onBlur`, `onProductSelect`) and controlled-mode initial values (`value`, `completedParams`). `onResult` fires after every successful round-trip — see [Reading the query as it's built](#reading-the-query-as-its-built).
777
+ Accepts the same shape as `<ai-autocomplete>`'s inputs (`apiConfig`, `additionalContext`, `language`, `visitorId`, `optionOverrides`, `columns`, `dropdownTrigger`, `optionsPosition`, `closeDropdownOnBlur`, `showNonTappableOptions`, `showProducts`, `products`), plus event callbacks (`onSubmit`, `onResult`, `onError`, `onChange`, `onParamsChange`, `onFocus`, `onBlur`, `onProductSelect`) and controlled-mode initial values (`value`, `completedParams`). `onResult` fires after every successful round-trip — see [Reading the query as it's built](#reading-the-query-as-its-built).
776
778
 
777
779
  #### State observables
778
780
 
@@ -120,6 +120,7 @@ export class AIAutocompleteComponent {
120
120
  this.controller = new AIAutocompleteController({
121
121
  apiConfig: this.apiConfig,
122
122
  additionalContext: this.additionalContext,
123
+ language: this.language,
123
124
  visitorId: this.visitorId,
124
125
  optionOverrides: this.optionOverrides,
125
126
  maskCompletedText: this.maskCompletedText,
@@ -205,6 +206,7 @@ export class AIAutocompleteComponent {
205
206
  // Reactive options
206
207
  if (changes["apiConfig"] ||
207
208
  changes["additionalContext"] ||
209
+ changes["language"] ||
208
210
  changes["visitorId"] ||
209
211
  changes["optionOverrides"] ||
210
212
  changes["dropdownTrigger"] ||
@@ -216,6 +218,7 @@ export class AIAutocompleteComponent {
216
218
  this.controller.update({
217
219
  apiConfig: this.apiConfig,
218
220
  additionalContext: this.additionalContext,
221
+ language: this.language,
219
222
  visitorId: this.visitorId,
220
223
  optionOverrides: this.optionOverrides,
221
224
  dropdownTrigger: this.dropdownTrigger,
@@ -409,7 +412,7 @@ export class AIAutocompleteComponent {
409
412
  }
410
413
  }
411
414
  AIAutocompleteComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: AIAutocompleteComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
412
- AIAutocompleteComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: AIAutocompleteComponent, isStandalone: true, selector: "ai-autocomplete", inputs: { apiConfig: "apiConfig", additionalContext: "additionalContext", visitorId: "visitorId", optionOverrides: "optionOverrides", maskCompletedText: "maskCompletedText", columns: "columns", pillPlacement: "pillPlacement", mode: "mode", optionsPosition: "optionsPosition", animations: "animations", dropdownTrigger: "dropdownTrigger", closeDropdownOnBlur: "closeDropdownOnBlur", showNonTappableOptions: "showNonTappableOptions", showSkipButton: "showSkipButton", showOptionIcons: "showOptionIcons", showOptionImages: "showOptionImages", showOptionCounts: "showOptionCounts", productsLayout: "productsLayout", productImageFallback: "productImageFallback", showChipIcons: "showChipIcons", showChipImages: "showChipImages", autoFocus: "autoFocus", value: "value", completedParams: "completedParams", showProducts: "showProducts", products: "products", submitButton: "submitButton", resetOnSubmit: "resetOnSubmit" }, outputs: { submitted: "submitted", resultChange: "resultChange", errored: "errored", valueChange: "valueChange", completedParamsChange: "completedParamsChange", focused: "focused", blurred: "blurred", productSelect: "productSelect" }, providers: [
415
+ AIAutocompleteComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: AIAutocompleteComponent, isStandalone: true, selector: "ai-autocomplete", inputs: { apiConfig: "apiConfig", additionalContext: "additionalContext", language: "language", visitorId: "visitorId", optionOverrides: "optionOverrides", maskCompletedText: "maskCompletedText", columns: "columns", pillPlacement: "pillPlacement", mode: "mode", optionsPosition: "optionsPosition", animations: "animations", dropdownTrigger: "dropdownTrigger", closeDropdownOnBlur: "closeDropdownOnBlur", showNonTappableOptions: "showNonTappableOptions", showSkipButton: "showSkipButton", showOptionIcons: "showOptionIcons", showOptionImages: "showOptionImages", showOptionCounts: "showOptionCounts", productsLayout: "productsLayout", productImageFallback: "productImageFallback", showChipIcons: "showChipIcons", showChipImages: "showChipImages", autoFocus: "autoFocus", value: "value", completedParams: "completedParams", showProducts: "showProducts", products: "products", submitButton: "submitButton", resetOnSubmit: "resetOnSubmit" }, outputs: { submitted: "submitted", resultChange: "resultChange", errored: "errored", valueChange: "valueChange", completedParamsChange: "completedParamsChange", focused: "focused", blurred: "blurred", productSelect: "productSelect" }, providers: [
413
416
  {
414
417
  provide: NG_VALUE_ACCESSOR,
415
418
  // eslint-disable-next-line @typescript-eslint/no-use-before-define
@@ -437,6 +440,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
437
440
  type: Input
438
441
  }], additionalContext: [{
439
442
  type: Input
443
+ }], language: [{
444
+ type: Input
440
445
  }], visitorId: [{
441
446
  type: Input
442
447
  }], optionOverrides: [{
@@ -531,4 +536,4 @@ function resolveInitialMode(mode) {
531
536
  return "dark";
532
537
  return window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light";
533
538
  }
534
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWktYXV0b2NvbXBsZXRlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvYWktYXV0b2NvbXBsZXRlL2FpLWF1dG9jb21wbGV0ZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9zcmMvbGliL2FpLWF1dG9jb21wbGV0ZS9haS1hdXRvY29tcGxldGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2xFLE9BQU8sRUFFTCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFFVCxZQUFZLEVBQ1osVUFBVSxFQUNWLEtBQUssRUFDTCxNQUFNLEVBQ04sTUFBTSxFQUlOLE1BQU0sRUFDTixXQUFXLEVBR1gsU0FBUyxFQUNULGlCQUFpQixHQUNsQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQTZCLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDOUUsT0FBTyxFQUlMLGlCQUFpQixFQUVqQixnQkFBZ0IsRUFDaEIsY0FBYyxFQU1kLGVBQWUsR0FDaEIsTUFBTSxxQ0FBcUMsQ0FBQztBQUM3QyxPQUFPLEVBQUUsK0JBQStCLEVBQUUsTUFBTSxnRUFBZ0UsQ0FBQztBQUNqSCxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUNwRixPQUFPLEVBQUUsaUNBQWlDLEVBQUUsTUFBTSwrQ0FBK0MsQ0FBQztBQUNsRyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUM5RSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxtREFBbUQsQ0FBQzs7O0FBRTFGOzs7Ozs7O0dBT0c7QUF3QkgsTUFBTSxPQUFPLHVCQUF1QjtJQXZCcEM7UUE0Q1csc0JBQWlCLEdBQUcsS0FBSyxDQUFDO1FBRW5DLHdEQUF3RDtRQUMvQyxr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ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSwgaXNQbGF0Zm9ybUJyb3dzZXIgfSBmcm9tIFwiQGFuZ3VsYXIvY29tbW9uXCI7XG5pbXBvcnQge1xuICB0eXBlIEFmdGVyVmlld0luaXQsXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICB0eXBlIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgZm9yd2FyZFJlZixcbiAgSW5wdXQsXG4gIGluamVjdCxcbiAgTmdab25lLFxuICB0eXBlIE9uQ2hhbmdlcyxcbiAgdHlwZSBPbkRlc3Ryb3ksXG4gIHR5cGUgT25Jbml0LFxuICBPdXRwdXQsXG4gIFBMQVRGT1JNX0lELFxuICB0eXBlIFNpbXBsZUNoYW5nZXMsXG4gIHR5cGUgVGVtcGxhdGVSZWYsXG4gIFZpZXdDaGlsZCxcbiAgVmlld0VuY2Fwc3VsYXRpb24sXG59IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyB0eXBlIENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBOR19WQUxVRV9BQ0NFU1NPUiB9IGZyb20gXCJAYW5ndWxhci9mb3Jtc1wiO1xuaW1wb3J0IHtcbiAgdHlwZSBBUElDb25maWcsXG4gIHR5cGUgQXBwZWFyYW5jZU1vZGUsXG4gIHR5cGUgQXV0b2NvbXBsZXRlUmVzdWx0LFxuICBidWlsZFN1Ym1pdFJlc3VsdCxcbiAgdHlwZSBDb21wbGV0ZWRQYXJhbVN0YXRlLFxuICBleHRyYWN0UGxhaW5UZXh0LFxuICBNb2RlQ29udHJvbGxlcixcbiAgdHlwZSBPcHRpb25PdmVycmlkZXMsXG4gIHR5cGUgUHJvZHVjdCxcbiAgdHlwZSBQcm9kdWN0SW1hZ2VGYWxsYmFjayxcbiAgdHlwZSBQcm9kdWN0c0NvbmZpZyxcbiAgdHlwZSBQcm9kdWN0c0xheW91dCxcbiAgc2V0Q3Vyc29yT2Zmc2V0LFxufSBmcm9tIFwiQG1hZ2ljeC1lbmcvYWktYXV0b2NvbXBsZXRlLXZhbmlsbGFcIjtcbmltcG9ydCB7IEFJQXV0b2NvbXBsZXRlRHJvcGRvd25Db21wb25lbnQgfSBmcm9tIFwiLi4vYWktYXV0b2NvbXBsZXRlLWRyb3Bkb3duL2FpLWF1dG9jb21wbGV0ZS1kcm9wZG93bi5jb21wb25lbnRcIjtcbmltcG9ydCB7IEFJQXV0b2NvbXBsZXRlQ29udHJvbGxlciB9IGZyb20gXCIuLi9jb250cm9sbGVyL2FpLWF1dG9jb21wbGV0ZS5jb250cm9sbGVyXCI7XG5pbXBvcnQgeyBBSUF1dG9jb21wbGV0ZUVkaXRvckhvc3REaXJlY3RpdmUgfSBmcm9tIFwiLi4vaW50ZXJuYWwvZWRpdG9yLWhvc3QvZWRpdG9yLWhvc3QuZGlyZWN0aXZlXCI7XG5pbXBvcnQgeyBQaWxsTGlzdENvbXBvbmVudCB9IGZyb20gXCIuLi9pbnRlcm5hbC9waWxsLWxpc3QvcGlsbC1saXN0LmNvbXBvbmVudFwiO1xuaW1wb3J0IHsgU3VibWl0QnV0dG9uQ29tcG9uZW50IH0gZnJvbSBcIi4uL2ludGVybmFsL3N1Ym1pdC1idXR0b24vc3VibWl0LWJ1dHRvbi5jb21wb25lbnRcIjtcblxuLyoqXG4gKiBUaWVyIDEgY29tcG9uZW50IOKAlCBgPGFpLWF1dG9jb21wbGV0ZT5gLiBUaGUgQW5ndWxhciBlcXVpdmFsZW50IG9mIFJlYWN0J3NcbiAqIGA8QUlBdXRvY29tcGxldGUgLz5gLiBPd25zIHRoZSBjb250ZW50RWRpdGFibGUgZWRpdG9yLCBpbmxpbmUgcGlsbHMsIG1vZGVcbiAqIGNvbnRyb2xsZXIsIHN1Ym1pdCBidXR0b24gc2xvdCwgYW5kIGFuIGVtYmVkZGVkXG4gKiB7QGxpbmsgQUlBdXRvY29tcGxldGVDb250cm9sbGVyfSB0aGF0IGRyaXZlcyB0aGUgZHJvcGRvd24uXG4gKlxuICogQHB1YmxpY1xuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6IFwiYWktYXV0b2NvbXBsZXRlXCIsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtcbiAgICBDb21tb25Nb2R1bGUsXG4gICAgQUlBdXRvY29tcGxldGVEcm9wZG93bkNvbXBvbmVudCxcbiAgICBBSUF1dG9jb21wbGV0ZUVkaXRvckhvc3REaXJlY3RpdmUsXG4gICAgUGlsbExpc3RDb21wb25lbnQsXG4gICAgU3VibWl0QnV0dG9uQ29tcG9uZW50LFxuICBdLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgdGVtcGxhdGVVcmw6IFwiLi9haS1hdXRvY29tcGxldGUuY29tcG9uZW50Lmh0bWxcIixcbiAgc3R5bGVVcmxzOiBbXCIuL2FpLWF1dG9jb21wbGV0ZS5jb21wb25lbnQuY3NzXCJdLFxuICBwcm92aWRlcnM6IFtcbiAgICB7XG4gICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdXNlLWJlZm9yZS1kZWZpbmVcbiAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IEFJQXV0b2NvbXBsZXRlQ29tcG9uZW50KSxcbiAgICAgIG11bHRpOiB0cnVlLFxuICAgIH0sXG4gIF0sXG59KVxuZXhwb3J0IGNsYXNzIEFJQXV0b2NvbXBsZXRlQ29tcG9uZW50XG4gIGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0LCBPbkNoYW5nZXMsIE9uRGVzdHJveSwgQ29udHJvbFZhbHVlQWNjZXNzb3JcbntcbiAgLy8gPT09IElucHV0cyAobWlycm9ycyBSZWFjdCdzIEFJQXV0b2NvbXBsZXRlUHJvcHMpID09PVxuXG4gIEBJbnB1dCgpIGFwaUNvbmZpZz86IEFQSUNvbmZpZztcbiAgLyoqXG4gICAqIE9wdGlvbmFsIHVzZXIgY29udGV4dC4gSW5jbHVkZSB3aGF0ZXZlciB5b3Uga25vdyBhYm91dCB0aGUgdXNlciDigJQgYVxuICAgKiBwcm9maWxlLCBwcmVmZXJlbmNlcywgd29ya3NwYWNlLCBhbnl0aGluZyDigJQgdG8gcGVyc29uYWxpemUgc3VnZ2VzdGVkXG4gICAqIHBhcmFtZXRlcnMgYW5kIG9wdGlvbnMgdG8gdGhlbS4gQmluZCBhIHN0YWJsZSByZWZlcmVuY2U7IHRoZSBzYW1lIHN3YXBcbiAgICogcnVsZSB0aGF0IGFwcGxpZXMgdG8gYGFwaUNvbmZpZ2AgYXBwbGllcyBoZXJlLlxuICAgKi9cbiAgQElucHV0KCkgYWRkaXRpb25hbENvbnRleHQ/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgLyoqXG4gICAqIFN0YWJsZSBpZCBmb3IgdGhpcyB2aXNpdG9yLCBrZXB0IGJ5IHRoZSBob3N0IGFjcm9zcyBwYWdlIGxvYWRzLiBSaWRlcyBvblxuICAgKiB0ZWxlbWV0cnkgZXZlbnRzIHNvIHNlYXJjaGVzIGNhbiBiZSBqb2luZWQgdG8gd2hhdCB0aGUgdmlzaXRvciBkb2VzXG4gICAqIGFmdGVyd2FyZHMuIE11c3QgYmUgYSBVVUlEIHY0OyBvbWl0IHRvIHNlbmQgbm9uZS4gQSBmdW5jdGlvbiBpcyBjYWxsZWRcbiAgICogb25seSBvbmNlIHRoZSBzZXJ2ZXIgaGFzIGZ1bm5lbCB0ZWxlbWV0cnkgb24uXG4gICAqL1xuICBASW5wdXQoKSB2aXNpdG9ySWQ/OiBzdHJpbmcgfCAoKCkgPT4gc3RyaW5nIHwgdW5kZWZpbmVkKTtcbiAgQElucHV0KCkgb3B0aW9uT3ZlcnJpZGVzPzogT3B0aW9uT3ZlcnJpZGVzO1xuICBASW5wdXQoKSBtYXNrQ29tcGxldGVkVGV4dCA9IGZhbHNlO1xuICBASW5wdXQoKSBjb2x1bW5zPzogbnVtYmVyO1xuICAvKiogV2hlcmUgdW5maWxsZWQgcGlsbHMgcmVuZGVyLiBEZWZhdWx0OiBcImRyb3Bkb3duXCIuICovXG4gIEBJbnB1dCgpIHBpbGxQbGFjZW1lbnQ6IFwiaW5saW5lXCIgfCBcImRyb3Bkb3duXCIgfCBcImhpZGRlblwiID0gXCJkcm9wZG93blwiO1xuICAvKiogQ29sb3IgbW9kZS4gXCJhdXRvXCIgZm9sbG93cyBwcmVmZXJzLWNvbG9yLXNjaGVtZS4gRGVmYXVsdDogXCJhdXRvXCIuICovXG4gIEBJbnB1dCgpIG1vZGU6IEFwcGVhcmFuY2VNb2RlID0gXCJhdXRvXCI7XG4gIEBJbnB1dCgpIG9wdGlvbnNQb3NpdGlvbjogXCJhYm92ZVwiIHwgXCJiZWxvd1wiID0gXCJiZWxvd1wiO1xuICBASW5wdXQoKSBhbmltYXRpb25zID0gdHJ1ZTtcbiAgQElucHV0KCkgZHJvcGRvd25UcmlnZ2VyPzogXCJhdXRvXCIgfCBcIm1hbnVhbFwiIHwgXCJoaWRkZW5cIjtcbiAgQElucHV0KCkgY2xvc2VEcm9wZG93bk9uQmx1cj86IGJvb2xlYW47XG4gIEBJbnB1dCgpIHNob3dOb25UYXBwYWJsZU9wdGlvbnM/OiBib29sZWFuO1xuICAvKipcbiAgICogV2hlbiB0cnVlIChkZWZhdWx0KSwgdGhlIGRyb3Bkb3duJ3MgcGlsbCBiYXIgZW5kcyBpbiBhIHNtYWxsIFwic2tpcFwiIGJ1dHRvblxuICAgKiB0aGF0IGRpc21pc3NlcyB0aGUgYWN0aXZlIHBpbGwg4oCUIHNhbWUgYWN0aW9uIGFzIHByZXNzaW5nIOKGkiBhdCB0aGUgZW5kIG9mXG4gICAqIHRoZSBpbnB1dC4gU2V0IHRvIGZhbHNlIHRvIGhpZGUgaXQuIFdoZW4gcGlsbHMgcmVuZGVyIGVsc2V3aGVyZVxuICAgKiAoYHBpbGxQbGFjZW1lbnQ6IFwiaW5saW5lXCJgIC8gYFwiaGlkZGVuXCJgKSB0aGUgYmFyIHJlbmRlcnMgYXMgYSBza2lwLW9ubHlcbiAgICogcm93IGhvbGRpbmcganVzdCB0aGUgYnV0dG9uLiBIaWRkZW4gd2hpbGUgdGhlIGlucHV0IGlzIGVtcHR5IOKAlCBpdCBhcHBlYXJzXG4gICAqIGFsb25nc2lkZSB0aGUgZm9vdGVyJ3MgXCLihpIgdG8gc2tpcFwiIGhpbnQgb25jZSB0aGUgdXNlciBoYXMgdHlwZWQuXG4gICAqL1xuICBASW5wdXQoKSBzaG93U2tpcEJ1dHRvbiA9IHRydWU7XG4gIC8qKiBXaGVuIHRydWUgKGRlZmF1bHQpLCBhbiBvcHRpb24gdGhhdCBjYXJyaWVzIGFuIGBpY29uX3N2Z2AgZHJhd3MgaXRzIGljb24gYmVmb3JlIGl0cyB0ZXh0IGluIHRoZSBkcm9wZG93bi4gU2V0IHRvIGZhbHNlIHRvIHJlbmRlciBvcHRpb24gcm93cyBhcyB0ZXh0IG9ubHkuICovXG4gIEBJbnB1dCgpIHNob3dPcHRpb25JY29ucyA9IHRydWU7XG4gIC8qKiBXaGVuIHRydWUgKGRlZmF1bHQpLCBhbiBvcHRpb24gdGhhdCBjYXJyaWVzIGFuIGBpbWFnZV91cmxgIGRyYXdzIGl0IGFzIGEgc3F1YXJlIHRodW1ibmFpbCBiZWZvcmUgaXRzIHRleHQgaW4gdGhlIGRyb3Bkb3duIChpbiBwbGFjZSBvZiBpdHMgYGljb25fc3ZnYCkuIFNldCB0byBmYWxzZSB0byByZW5kZXIgb3B0aW9uIHJvd3Mgd2l0aG91dCBwaWN0dXJlcy4gKi9cbiAgQElucHV0KCkgc2hvd09wdGlvbkltYWdlcyA9IHRydWU7XG4gIC8qKiBXaGVuIHRydWUgKGRlZmF1bHQpLCBhbiBvcHRpb24gdGhhdCBjYXJyaWVzIGFuIGBpdGVtX2NvdW50YCBzaG93cyBpdCBhcyBhIG11dGVkIGxhYmVsIGF0IHRoZSByb3cncyB0cmFpbGluZyBlZGdlIChcIjEyIGl0ZW1zXCIpLiBTZXQgdG8gZmFsc2UgdG8gaGlkZSB0aGUgY291bnRzLiAqL1xuICBASW5wdXQoKSBzaG93T3B0aW9uQ291bnRzID0gdHJ1ZTtcbiAgLyoqXG4gICAqIEhvdyB0aGUgcHJvZHVjdCBzdHJpcCBsYXlzIGl0cyBjYXJkcyBvdXQuIGBcInJvd1wiYCAodGhlIGRlZmF1bHQpIGlzIGFcbiAgICogaG9yaXpvbnRhbGx5IHNjcm9sbGluZyBzaGVsZiBvZiBjYXJkcy4gYFwibGlzdFwiYCBzdGFja3MgdGhlIHNhbWUgY2FyZHMgYXNcbiAgICogZnVsbC13aWR0aCByb3dzIOKAlCB0aHVtYm5haWwgb24gdGhlIGxlZnQsIHRpdGxlLCB2ZW5kb3IgYW5kIHByaWNlIG9uIHRoZVxuICAgKiByaWdodCDigJQgZm9yIHJlc3VsdHMgdGhhdCByZWFkIGFzIGEgbGlzdCAoY291cnNlcywgbGlzdGluZ3MsIGRvY3VtZW50cylcbiAgICogcmF0aGVyIHRoYW4gcHJvZHVjdHMgb24gYSBzaGVsZjsgdGhlIGNvbHVtbiBzY3JvbGxzIHZlcnRpY2FsbHkgaW5zaWRlXG4gICAqIGAtLWFpYS1wcm9kdWN0LWxpc3QtbWF4LWhlaWdodGAuXG4gICAqL1xuICBASW5wdXQoKSBwcm9kdWN0c0xheW91dDogUHJvZHVjdHNMYXlvdXQgPSBcInJvd1wiO1xuICAvKiogTWlzc2luZy9mYWlsZWQgaW1hZ2UgZmFsbGJhY2suIFN0eWxlIGluaXRpYWxzIHdpdGggYFtkYXRhLWFpYS1wcm9kdWN0LWluaXRpYWxdYC4gKi9cbiAgQElucHV0KCkgcHJvZHVjdEltYWdlRmFsbGJhY2s6IFByb2R1Y3RJbWFnZUZhbGxiYWNrID0gXCJpbWFnZVwiO1xuICAvKiogV2hlbiB0cnVlIChkZWZhdWx0KSwgYSBjb21wbGV0ZWQgY2hpcCBpbiB0aGUgaW5wdXQgZHJhd3MgdGhlIGljb24gb2YgdGhlIG9wdGlvbiB0aGF0IGFuc3dlcmVkIGl0LiBTZXQgdG8gZmFsc2UgdG8gcmVuZGVyIGNoaXBzIGFzIHRleHQgb25seS4gKi9cbiAgQElucHV0KCkgc2hvd0NoaXBJY29ucyA9IHRydWU7XG4gIC8qKiBXaGVuIHRydWUgKGRlZmF1bHQpLCBhIGNvbXBsZXRlZCBjaGlwIGluIHRoZSBpbnB1dCBkcmF3cyB0aGUgcGljdHVyZSAoYGltYWdlX3VybGApIG9mIHRoZSBvcHRpb24gdGhhdCBhbnN3ZXJlZCBpdCwgaW4gcGxhY2Ugb2YgaXRzIGljb24uIFNldCB0byBmYWxzZSB0byByZW5kZXIgY2hpcHMgd2l0aG91dCBwaWN0dXJlcy4gKi9cbiAgQElucHV0KCkgc2hvd0NoaXBJbWFnZXMgPSB0cnVlO1xuICAvKiogRm9jdXMgdGhlIGVkaXRvciBvbiBtb3VudC4gRGVmYXVsdDogdHJ1ZS4gKi9cbiAgQElucHV0KCkgYXV0b0ZvY3VzID0gdHJ1ZTtcbiAgLyoqIENvbnRyb2xsZWQtbW9kZSB0ZXh0IHZhbHVlLiAqL1xuICBASW5wdXQoKSB2YWx1ZT86IHN0cmluZztcbiAgLyoqIENvbnRyb2xsZWQtbW9kZSBjb21wbGV0ZWQgcGFyYW1zLiAqL1xuICBASW5wdXQoKSBjb21wbGV0ZWRQYXJhbXM/OiBDb21wbGV0ZWRQYXJhbVN0YXRlW107XG4gIC8qKlxuICAgKiBXaGVuIHRydWUgKGRlZmF1bHQpLCB0aGUgZHJvcGRvd24gcmVuZGVycyBhIGhvcml6b250YWwgcm93IG9mIHByb2R1Y3RcbiAgICogY2FyZHMgYmVsb3cgdGhlIG9wdGlvbnMgZ3JpZCB3aGVuZXZlciBpdCBoYXMgcHJvZHVjdHMgdG8gc2hvdzogYnkgZGVmYXVsdFxuICAgKiB0aGUgaXRlbXMgdGhlIGAvc3VnZ2VzdGAgcmVzcG9uc2UgcmVwb3J0cyBhcyBtYXRjaGluZyB0aGUgcXVlcnksIG9yIHRoZVxuICAgKiByZXN1bHRzIG9mIGEgY3VzdG9tIGBwcm9kdWN0c2Agc2VhcmNoLiBTZXQgdG8gZmFsc2UgdG8gcmVuZGVyIG5vIHN0cmlwXG4gICAqIGFuZCBydW4gbm8gY3VzdG9tIHNlYXJjaC5cbiAgICovXG4gIEBJbnB1dCgpIHNob3dQcm9kdWN0cyA9IHRydWU7XG4gIC8qKlxuICAgKiBDdXN0b20gc291cmNlIGZvciB0aGUgcHJvZHVjdCBzdHJpcC4gT21pdCBpdCBhbmQgdGhlIHN0cmlwIHNob3dzIHRoZVxuICAgKiBpdGVtcyB0aGUgYC9zdWdnZXN0YCByZXNwb25zZSBpdHNlbGYgcmVwb3J0cyBhcyBtYXRjaGluZyB0aGUgcXVlcnksIHdpdGhcbiAgICogbm8gZXh0cmEgcmVxdWVzdC4gU2V0IGl0IGFuZCB0aGUgZHJvcGRvd24gaXMgZmVkIGJ5IHlvdXIgb3duIHNlYXJjaFxuICAgKiBlbmRwb2ludCBvbiB0aGUgU0RLJ3MgZXhpc3RpbmcgZmV0Y2ggY2FkZW5jZSBpbnN0ZWFkOyB0aGUgc2VydmVyJ3MgaXRlbXNcbiAgICogYXJlIHRoZW4gbm90IHJlbmRlcmVkLlxuICAgKlxuICAgKiBCaW5kIGEgc3RhYmxlIHJlZmVyZW5jZSAoYSBjb21wb25lbnQgZmllbGQsIG5vdCBhbiBpbmxpbmUgb2JqZWN0IGxpdGVyYWwpOlxuICAgKiBhIG5ldyBvYmplY3Qgb24gZWFjaCBjaGFuZ2UtZGV0ZWN0aW9uIHBhc3MgcmVhZHMgYXMgYSBzd2FwcGVkIGludGVncmF0aW9uXG4gICAqIGFuZCBjbGVhcnMgdGhlIGN1cnJlbnQgY2FyZHMg4oCUIHRoZSBzYW1lIHJ1bGUgdGhhdCBhbHJlYWR5IGFwcGxpZXMgdG9cbiAgICogYGFwaUNvbmZpZ2AgYW5kIGBvcHRpb25PdmVycmlkZXNgLlxuICAgKi9cbiAgQElucHV0KCkgcHJvZHVjdHM/OiBQcm9kdWN0c0NvbmZpZztcbiAgLyoqXG4gICAqIEN1c3RvbSBzdWJtaXQgYnV0dG9uLiBQYXNzIGEgYDxuZy10ZW1wbGF0ZT5gIHRvIHJlcGxhY2UgdGhlIGRlZmF1bHQgYXJyb3dcbiAgICogYnV0dG9uLiBQYXNzIGBudWxsYCB0byByZW5kZXIgbm8gYnV0dG9uLiBEZWZhdWx0IChgdW5kZWZpbmVkYCkgcmVuZGVyc1xuICAgKiB0aGUgYnVpbHQtaW4gYXJyb3cuXG4gICAqL1xuICBASW5wdXQoKSBzdWJtaXRCdXR0b24/OiBUZW1wbGF0ZVJlZjx1bmtub3duPiB8IG51bGw7XG4gIC8qKlxuICAgKiBXaGVuIHRydWUgKGRlZmF1bHQpLCB0aGUgZWRpdG9yIGlzIGNsZWFyZWQgYW5kIGEgbmV3IHNlc3Npb24gc3RhcnRzIGFmdGVyXG4gICAqIGBzdWJtaXR0ZWRgIGVtaXRzIOKAlCBvbiBFbnRlciBhbmQgb24gdGhlIHN1Ym1pdCBidXR0b24uIFNldCB0byBmYWxzZSB0b1xuICAgKiBsZWF2ZSB0aGUgcXVlcnkgaW4gcGxhY2U6IHdoZW4gdGhlIGhhbmRsZXIgbmF2aWdhdGVzIGF3YXksIGEgY2xlYXJlZCBmaWVsZFxuICAgKiBmbGFzaGVzIGVtcHR5IHVudGlsIHRoZSBuZXh0IHBhZ2UgcGFpbnRzLiBDYWxsIGByZXNldCgpYCB5b3Vyc2VsZiB3aGVuIHlvdVxuICAgKiB3YW50IGEgZnJlc2ggc2Vzc2lvbi5cbiAgICovXG4gIEBJbnB1dCgpIHJlc2V0T25TdWJtaXQgPSB0cnVlO1xuXG4gIC8vID09PSBPdXRwdXRzID09PVxuXG4gIC8qKiBDYWxsZWQgb24gRW50ZXIgb3Igc3VibWl0LWJ1dHRvbiBjbGljay4gKi9cbiAgQE91dHB1dCgpIHJlYWRvbmx5IHN1Ym1pdHRlZCA9IG5ldyBFdmVudEVtaXR0ZXI8QXV0b2NvbXBsZXRlUmVzdWx0PigpO1xuICAvKipcbiAgICogRmlyZXMgYWZ0ZXIgZXZlcnkgc3VjY2Vzc2Z1bCBzdWdnZXN0aW9uIHJvdW5kLXRyaXAgd2l0aCB0aGUgc3RydWN0dXJlZFxuICAgKiBxdWVyeSBhcyB0aGUgU0RLIG5vdyB1bmRlcnN0YW5kcyBpdCDigJQgdGhlIHNhbWUgYEF1dG9jb21wbGV0ZVJlc3VsdGAgc2hhcGVcbiAgICogYHN1Ym1pdHRlZGAgY2Fycmllcywgc28geW91IGNhbiBtaXJyb3IgdGhlIHF1ZXJ5IGFzIGl0IGlzIGJ1aWx0IChhIGxpdmVcbiAgICogcHJldmlldywgYSBkcmFmdCwgYW5hbHl0aWNzKSB3aXRob3V0IHdhaXRpbmcgZm9yIHN1Ym1pdC4gRmlyZXMgb25jZSBwZXJcbiAgICogYXBwbGllZCByZXNwb25zZSwgaW5jbHVkaW5nIHRoZSBpbml0aWFsIHJlcXVlc3Qgb24gaW5pdCAoYW4gZW1wdHlcbiAgICogcmVzdWx0KTsgbmV2ZXIgZm9yIGEgZmFpbGVkLCBhYm9ydGVkIG9yIHN1cGVyc2VkZWQgcmVxdWVzdC5cbiAgICovXG4gIEBPdXRwdXQoKSByZWFkb25seSByZXN1bHRDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPEF1dG9jb21wbGV0ZVJlc3VsdD4oKTtcbiAgQE91dHB1dCgpIHJlYWRvbmx5IGVycm9yZWQgPSBuZXcgRXZlbnRFbWl0dGVyPEVycm9yPigpO1xuICBAT3V0cHV0KCkgcmVhZG9ubHkgdmFsdWVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcbiAgQE91dHB1dCgpIHJlYWRvbmx5IGNvbXBsZXRlZFBhcmFtc0NoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8Q29tcGxldGVkUGFyYW1TdGF0ZVtdPigpO1xuICBAT3V0cHV0KCkgcmVhZG9ubHkgZm9jdXNlZCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcbiAgQE91dHB1dCgpIHJlYWRvbmx5IGJsdXJyZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG4gIC8qKlxuICAgKiBFbWl0dGVkIHdoZW4gdGhlIHVzZXIgYWN0aXZhdGVzIGEgcHJvZHVjdCBjYXJkLiBUaGUgU0RLIGRvZXMgbm90XG4gICAqIG5hdmlnYXRlIOKAlCB5b3UgZGVjaWRlIHdoYXQgYSBzZWxlY3Rpb24gbWVhbnMuIE1vZGlmaWVyIC8gbWlkZGxlIGNsaWNrcyBhcmVcbiAgICogbGVmdCB0byB0aGUgYnJvd3NlciAoY21kLWNsaWNrIHN0aWxsIG9wZW5zIGEgdGFiKSBhbmQgZG9uJ3QgZW1pdC5cbiAgICovXG4gIEBPdXRwdXQoKSByZWFkb25seSBwcm9kdWN0U2VsZWN0ID0gbmV3IEV2ZW50RW1pdHRlcjxQcm9kdWN0PigpO1xuXG4gIC8vID09PSBWaWV3IHJlZnMgPT09XG5cbiAgQFZpZXdDaGlsZChcImNvbnRhaW5lclwiLCB7IHN0YXRpYzogdHJ1ZSB9KSBjb250YWluZXJSZWYhOiBFbGVtZW50UmVmPEhUTUxEaXZFbGVtZW50PjtcbiAgQFZpZXdDaGlsZChcImVkaXRvclwiLCB7IHN0YXRpYzogZmFsc2UgfSkgZWRpdG9yUmVmPzogRWxlbWVudFJlZjxIVE1MRGl2RWxlbWVudD47XG4gIEBWaWV3Q2hpbGQoXCJwaWxsQ29udGFpbmVyXCIpIHBpbGxDb250YWluZXJSZWY/OiBFbGVtZW50UmVmPEhUTUxTcGFuRWxlbWVudD47XG5cbiAgLy8gPT09IFB1YmxpYyBzdGF0ZSBmb3IgdGhlIHRlbXBsYXRlID09PVxuXG4gIGNvbnRyb2xsZXIhOiBBSUF1dG9jb21wbGV0ZUNvbnRyb2xsZXI7XG4gIC8qKlxuICAgKiBDb25jcmV0ZSBsaWdodC9kYXJrIHZhbHVlIGJvdW5kIHRvIGBbYXR0ci5kYXRhLW1vZGVdYC4gU2VlZGVkIGluIG5nT25Jbml0XG4gICAqIHNvIHRoZSBhdHRyaWJ1dGUgaXMgcHJlc2VudCBkdXJpbmcgU1NSICh3aGVyZSBNb2RlQ29udHJvbGxlciwgZ2F0ZWQgYmVoaW5kXG4gICAqIGlzUGxhdGZvcm1Ccm93c2VyIGluIG5nQWZ0ZXJWaWV3SW5pdCwgbmV2ZXIgcnVucykuIE9uIHRoZSBicm93c2VyIHRoZVxuICAgKiBNb2RlQ29udHJvbGxlcidzIHJlc29sdmUgY2FsbGJhY2sga2VlcHMgdGhpcyBpbiBzeW5jIOKAlCBzbyBpdHMgcnVudGltZVxuICAgKiBwcmVmZXJzLWNvbG9yLXNjaGVtZSB1cGRhdGVzIGFuZCB0aGlzIGJpbmRpbmcgYWx3YXlzIGFncmVlIChubyBjbG9iYmVyKS5cbiAgICovXG4gIHJlc29sdmVkTW9kZTogXCJsaWdodFwiIHwgXCJkYXJrXCIgPSBcImRhcmtcIjtcblxuICAvLyA9PT0gSW50ZXJuYWwgPT09XG5cbiAgcHJpdmF0ZSBtb2RlQ29udHJvbGxlcj86IE1vZGVDb250cm9sbGVyO1xuICBwcml2YXRlIHJlc2l6ZU9ic2VydmVyPzogUmVzaXplT2JzZXJ2ZXI7XG4gIHByaXZhdGUgb25DaGFuZ2VGbjogKHZhbHVlOiBzdHJpbmcpID0+IHZvaWQgPSBub29wO1xuICBwcml2YXRlIG9uVG91Y2hlZEZuOiAoKSA9PiB2b2lkID0gbm9vcDtcbiAgLy8gSG9sZHMgYSB2YWx1ZSB3cml0dGVuIGJ5IFJlYWN0aXZlIEZvcm1zIGJlZm9yZSBuZ09uSW5pdCByYW4uIFJlYWN0aXZlXG4gIC8vIEZvcm1zIGNhbiBjYWxsIHdyaXRlVmFsdWUoKSBkdXJpbmcgZHluYW1pYyBmb3JtIGNvbnN0cnVjdGlvbiAoZS5nLiB3aGVuXG4gIC8vIGEgRm9ybUNvbnRyb2wgYWxyZWFkeSBob2xkcyBhIHZhbHVlIGF0IHRoZSBtb21lbnQgdGhlIGRpcmVjdGl2ZSBpc1xuICAvLyBjcmVhdGVkKS4gV2Ugc3Rhc2ggdGhlIHZhbHVlIGhlcmUgYW5kIGZsdXNoIGl0IGluIG5nT25Jbml0ICphZnRlcipcbiAgLy8gdGhlIGNvbnRyb2xsZXIgZXhpc3RzIOKAlCBvdGhlcndpc2UgdGhlIGVkaXRvciByZW5kZXJzIGVtcHR5IGV2ZW4gdGhvdWdoXG4gIC8vIHRoZSBmb3JtIGhhZCBhIHZhbHVlLiBgdW5kZWZpbmVkYCBtZWFucyBcIm5vIHBlbmRpbmcgd3JpdGVcIi5cbiAgcHJpdmF0ZSBwZW5kaW5nV3JpdGVWYWx1ZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gIC8vIMKnMTYuOTogcHJlZmVyIGBpbmplY3QoKWAgb3ZlciBjb25zdHJ1Y3Rvci1wYXJhbWV0ZXIgREkgZm9yIGNvbXBvbmVudHMuXG4gIHByaXZhdGUgcmVhZG9ubHkgcGxhdGZvcm1JZCA9IGluamVjdChQTEFURk9STV9JRCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgem9uZSA9IGluamVjdChOZ1pvbmUpO1xuICBwcml2YXRlIHJlYWRvbmx5IGNkciA9IGluamVjdChDaGFuZ2VEZXRlY3RvclJlZik7XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgLy8gU2VlZCBiZWZvcmUgdGhlIGJyb3dzZXIgZ3VhcmQgc28gU1NSIHJlbmRlcnMgYSBjb25jcmV0ZSBkYXRhLW1vZGUuXG4gICAgdGhpcy5yZXNvbHZlZE1vZGUgPSByZXNvbHZlSW5pdGlhbE1vZGUodGhpcy5tb2RlKTtcbiAgICBpZiAoIWlzUGxhdGZvcm1Ccm93c2VyKHRoaXMucGxhdGZvcm1JZCkpIHJldHVybjtcblxuICAgIHRoaXMuY29udHJvbGxlciA9IG5ldyBBSUF1dG9jb21wbGV0ZUNvbnRyb2xsZXIoe1xuICAgICAgYXBpQ29uZmlnOiB0aGlzLmFwaUNvbmZpZyxcbiAgICAgIGFkZGl0aW9uYWxDb250ZXh0OiB0aGlzLmFkZGl0aW9uYWxDb250ZXh0LFxuICAgICAgdmlzaXRvcklkOiB0aGlzLnZpc2l0b3JJZCxcbiAgICAgIG9wdGlvbk92ZXJyaWRlczogdGhpcy5vcHRpb25PdmVycmlkZXMsXG4gICAgICBtYXNrQ29tcGxldGVkVGV4dDogdGhpcy5tYXNrQ29tcGxldGVkVGV4dCxcbiAgICAgIGNvbHVtbnM6IHRoaXMuY29sdW1ucyxcbiAgICAgIGRyb3Bkb3duVHJpZ2dlcjogdGhpcy5kcm9wZG93blRyaWdnZXIsXG4gICAgICBvcHRpb25zUG9zaXRpb246IHRoaXMub3B0aW9uc1Bvc2l0aW9uLFxuICAgICAgY2xvc2VEcm9wZG93bk9uQmx1cjogdGhpcy5jbG9zZURyb3Bkb3duT25CbHVyLFxuICAgICAgc2hvd05vblRhcHBhYmxlT3B0aW9uczogdGhpcy5zaG93Tm9uVGFwcGFibGVPcHRpb25zLFxuICAgICAgc2hvd1Byb2R1Y3RzOiB0aGlzLnNob3dQcm9kdWN0cyxcbiAgICAgIHNvdXJjZTogXCJmdWxsLXNka1wiLFxuICAgICAgcHJvZHVjdHM6IHRoaXMucHJvZHVjdHMsXG4gICAgICB2YWx1ZTogdGhpcy52YWx1ZSxcbiAgICAgIGNvbXBsZXRlZFBhcmFtczogdGhpcy5jb21wbGV0ZWRQYXJhbXMsXG4gICAgICBvblN1Ym1pdDogKHJlc3VsdCkgPT4gdGhpcy5oYW5kbGVTdWJtaXQocmVzdWx0KSxcbiAgICAgIG9uUmVzdWx0OiAocmVzdWx0KSA9PiB0aGlzLnJlc3VsdENoYW5nZS5lbWl0KHJlc3VsdCksXG4gICAgICBvbkVycm9yOiAoZXJyb3IpID0+IHRoaXMuZXJyb3JlZC5lbWl0KGVycm9yKSxcbiAgICAgIG9uQ2hhbmdlOiAodGV4dCkgPT4ge1xuICAgICAgICB0aGlzLnZhbHVlQ2hhbmdlLmVtaXQodGV4dCk7XG4gICAgICAgIHRoaXMub25DaGFuZ2VGbih0ZXh0KTtcbiAgICAgIH0sXG4gICAgICBvblBhcmFtc0NoYW5nZTogKHBhcmFtcykgPT4gdGhpcy5jb21wbGV0ZWRQYXJhbXNDaGFuZ2UuZW1pdChwYXJhbXMpLFxuICAgICAgb25Gb2N1czogKCkgPT4gdGhpcy5mb2N1c2VkLmVtaXQoKSxcbiAgICAgIG9uUHJvZHVjdFNlbGVjdDogKHByb2R1Y3QpID0+IHRoaXMucHJvZHVjdFNlbGVjdC5lbWl0KHByb2R1Y3QpLFxuICAgICAgb25CbHVyOiAoKSA9PiB7XG4gICAgICAgIHRoaXMuYmx1cnJlZC5lbWl0KCk7XG4gICAgICAgIHRoaXMub25Ub3VjaGVkRm4oKTtcbiAgICAgIH0sXG4gICAgICBzZXRDdXJzb3I6IChvZmZzZXQpID0+IHtcbiAgICAgICAgY29uc3QgZWRpdG9yID0gdGhpcy5lZGl0b3JSZWY/Lm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgIGlmICghZWRpdG9yKSByZXR1cm47XG4gICAgICAgIGVkaXRvci5mb2N1cygpO1xuICAgICAgICBzZXRDdXJzb3JPZmZzZXQoZWRpdG9yLCBvZmZzZXQpO1xuICAgICAgfSxcbiAgICB9KTtcblxuICAgIGlmICh0aGlzLnBlbmRpbmdXcml0ZVZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuY29udHJvbGxlci5zZXRWYWx1ZSh0aGlzLnBlbmRpbmdXcml0ZVZhbHVlKTtcbiAgICAgIHRoaXMucGVuZGluZ1dyaXRlVmFsdWUgPSB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIGlmICghaXNQbGF0Zm9ybUJyb3dzZXIodGhpcy5wbGF0Zm9ybUlkKSkgcmV0dXJuO1xuICAgIC8vIE1vZGVDb250cm9sbGVyIHdyaXRlcyBgZGF0YS1tb2RlYCB0byB0aGUgZWxlbWVudCBpdCdzIGdpdmVuLiBUaGUgQ1NTXG4gICAgLy8gc2VsZWN0b3JzIGFyZSBzY29wZWQgdG8gYC5tYWdpY3gtYWlhW2RhdGEtbW9kZT1cIi4uLlwiXWAg4oCUIHdoaWNoIGxpdmVzIG9uXG4gICAgLy8gdGhlIGlubmVyIGA8ZGl2IGNsYXNzPVwibWFnaWN4LWFpYSBtYWdpY3gtYWlhLWNvbnRhaW5lclwiICNjb250YWluZXI+YCxcbiAgICAvLyBOT1QgdGhlIGhvc3QgYDxhaS1hdXRvY29tcGxldGU+YCBlbGVtZW50LiBUaGUgcmVzb2x2ZSBjYWxsYmFjayBtaXJyb3JzXG4gICAgLy8gdGhlIHZhbHVlIGludG8gYHJlc29sdmVkTW9kZWAgc28gdGhlIGBbYXR0ci5kYXRhLW1vZGVdYCBiaW5kaW5nIHN0YXlzIGluXG4gICAgLy8gbG9ja3N0ZXAgd2l0aCBNb2RlQ29udHJvbGxlciDigJQgdGhlIGJpbmRpbmcgaGFuZGxlcyBTU1IsIE1vZGVDb250cm9sbGVyXG4gICAgLy8gaGFuZGxlcyBydW50aW1lIHByZWZlcnMtY29sb3Itc2NoZW1lIHN3aXRjaGVzLCBhbmQgYmVjYXVzZSB0aGV5IGFsd2F5c1xuICAgIC8vIGFncmVlIG5laXRoZXIgY2xvYmJlcnMgdGhlIG90aGVyLlxuICAgIHRoaXMubW9kZUNvbnRyb2xsZXIgPSBuZXcgTW9kZUNvbnRyb2xsZXIoXG4gICAgICB0aGlzLmNvbnRhaW5lclJlZi5uYXRpdmVFbGVtZW50LFxuICAgICAgdGhpcy5tb2RlLFxuICAgICAgKHJlc29sdmVkKSA9PiB7XG4gICAgICAgIHRoaXMucmVzb2x2ZWRNb2RlID0gcmVzb2x2ZWQ7XG4gICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgfSxcbiAgICApO1xuXG4gICAgLy8gUGlsbC13cmFwIGRldGVjdGlvbiDigJQgd2hlbiB0aGUgcGlsbCBsaXN0IHdyYXBzIGJlbG93IHRoZSBlZGl0b3IncyBsYXN0XG4gICAgLy8gbGluZSwgZHJvcCBpdHMgOHB4IGxlZnQgbWFyZ2luIHZpYSBhIGRhdGEgYXR0cmlidXRlIHRoZSBDU1Mga2V5cyBvZmYuXG4gICAgLy8gTWlycm9ycyB0aGUgUmVhY3QgY29tcG9uZW50J3MgdXNlTGF5b3V0RWZmZWN0LlxuICAgIGlmICh0eXBlb2YgUmVzaXplT2JzZXJ2ZXIgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgIHRoaXMuem9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICAgIHRoaXMucmVzaXplT2JzZXJ2ZXIgPSBuZXcgUmVzaXplT2JzZXJ2ZXIoKCkgPT4gdGhpcy5tZWFzdXJlUGlsbFdyYXAoKSk7XG4gICAgICAgIGNvbnN0IGVkaXRvciA9IHRoaXMuZWRpdG9yUmVmPy5uYXRpdmVFbGVtZW50O1xuICAgICAgICBpZiAoZWRpdG9yKSB0aGlzLnJlc2l6ZU9ic2VydmVyLm9ic2VydmUoZWRpdG9yKTtcbiAgICAgIH0pO1xuICAgICAgdGhpcy5tZWFzdXJlUGlsbFdyYXAoKTtcbiAgICB9XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmNvbnRyb2xsZXIpIHJldHVybjtcbiAgICAvLyBgU2ltcGxlQ2hhbmdlc2AgaXMgYHsgW2tleTogc3RyaW5nXTogU2ltcGxlQ2hhbmdlIH1gLCBzbyBwZXJcbiAgICAvLyBgbm9Qcm9wZXJ0eUFjY2Vzc0Zyb21JbmRleFNpZ25hdHVyZWAgZWFjaCBrZXkgbG9va3VwIHVzZXMgYnJhY2tldFxuICAgIC8vIG5vdGF0aW9uIOKAlCB0aGlzIGtlZXBzIHRoZSBzdHJpY3RuZXNzIGNvbnRyYWN0IHRoYXQgdGhlIHJlc3Qgb2YgdGhlXG4gICAgLy8gd29ya3NwYWNlIGVuZm9yY2VzLlxuICAgIC8vIENvbnRyb2xsZWQtbW9kZSBwcm9wYWdhdGlvblxuICAgIGlmIChjaGFuZ2VzW1widmFsdWVcIl0gJiYgdGhpcy52YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLmNvbnRyb2xsZXIuc2V0VmFsdWUodGhpcy52YWx1ZSk7XG4gICAgfVxuICAgIGlmIChjaGFuZ2VzW1wiY29tcGxldGVkUGFyYW1zXCJdICYmIHRoaXMuY29tcGxldGVkUGFyYW1zICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuY29udHJvbGxlci5zZXRDb21wbGV0ZWRQYXJhbXModGhpcy5jb21wbGV0ZWRQYXJhbXMpO1xuICAgIH1cbiAgICAvLyBSZWFjdGl2ZSBvcHRpb25zXG4gICAgaWYgKFxuICAgICAgY2hhbmdlc1tcImFwaUNvbmZpZ1wiXSB8fFxuICAgICAgY2hhbmdlc1tcImFkZGl0aW9uYWxDb250ZXh0XCJdIHx8XG4gICAgICBjaGFuZ2VzW1widmlzaXRvcklkXCJdIHx8XG4gICAgICBjaGFuZ2VzW1wib3B0aW9uT3ZlcnJpZGVzXCJdIHx8XG4gICAgICBjaGFuZ2VzW1wiZHJvcGRvd25UcmlnZ2VyXCJdIHx8XG4gICAgICBjaGFuZ2VzW1wib3B0aW9uc1Bvc2l0aW9uXCJdIHx8XG4gICAgICBjaGFuZ2VzW1wiY2xvc2VEcm9wZG93bk9uQmx1clwiXSB8fFxuICAgICAgY2hhbmdlc1tcInNob3dOb25UYXBwYWJsZU9wdGlvbnNcIl0gfHxcbiAgICAgIGNoYW5nZXNbXCJzaG93UHJvZHVjdHNcIl0gfHxcbiAgICAgIGNoYW5nZXNbXCJwcm9kdWN0c1wiXVxuICAgICkge1xuICAgICAgdGhpcy5jb250cm9sbGVyLnVwZGF0ZSh7XG4gICAgICAgIGFwaUNvbmZpZzogdGhpcy5hcGlDb25maWcsXG4gICAgICAgIGFkZGl0aW9uYWxDb250ZXh0OiB0aGlzLmFkZGl0aW9uYWxDb250ZXh0LFxuICAgICAgICB2aXNpdG9ySWQ6IHRoaXMudmlzaXRvcklkLFxuICAgICAgICBvcHRpb25PdmVycmlkZXM6IHRoaXMub3B0aW9uT3ZlcnJpZGVzLFxuICAgICAgICBkcm9wZG93blRyaWdnZXI6IHRoaXMuZHJvcGRvd25UcmlnZ2VyLFxuICAgICAgICBvcHRpb25zUG9zaXRpb246IHRoaXMub3B0aW9uc1Bvc2l0aW9uLFxuICAgICAgICBjbG9zZURyb3Bkb3duT25CbHVyOiB0aGlzLmNsb3NlRHJvcGRvd25PbkJsdXIsXG4gICAgICAgIHNob3dOb25UYXBwYWJsZU9wdGlvbnM6IHRoaXMuc2hvd05vblRhcHBhYmxlT3B0aW9ucyxcbiAgICAgICAgc2hvd1Byb2R1Y3RzOiB0aGlzLnNob3dQcm9kdWN0cyxcbiAgICAgICAgLy8gU2FtZSByZWZlcmVuY2Ugb24gYW4gdW5yZWxhdGVkIGNoYW5nZSBpcyBhIG5vLW9wIGluIHRoZSBjb3JlOyBvbmx5IGFcbiAgICAgICAgLy8gZ2VudWluZWx5IHN3YXBwZWQgKG9yIHJlbW92ZWQpIGludGVncmF0aW9uIGNsZWFycyB0aGUgc3RyaXAuXG4gICAgICAgIHByb2R1Y3RzOiB0aGlzLnByb2R1Y3RzLFxuICAgICAgfSk7XG4gICAgfVxuICAgIGlmIChjaGFuZ2VzW1wibW9kZVwiXSkge1xuICAgICAgLy8gS2VlcCB0aGUgYmluZGluZyBjb3JyZWN0IGV2ZW4gd2hlbiBNb2RlQ29udHJvbGxlciBkb2Vzbid0IGV4aXN0IHlldFxuICAgICAgLy8gKFNTUiAvIHByZS1uZ0FmdGVyVmlld0luaXQpLiBPbiB0aGUgYnJvd3Nlciwgc2V0TW9kZSB0cmlnZ2VycyB0aGVcbiAgICAgIC8vIHJlc29sdmUgY2FsbGJhY2sgd2hpY2ggc2V0cyB0aGUgc2FtZSB2YWx1ZS5cbiAgICAgIHRoaXMucmVzb2x2ZWRNb2RlID0gcmVzb2x2ZUluaXRpYWxNb2RlKHRoaXMubW9kZSk7XG4gICAgICB0aGlzLm1vZGVDb250cm9sbGVyPy5zZXRNb2RlKHRoaXMubW9kZSk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5yZXNpemVPYnNlcnZlcj8uZGlzY29ubmVjdCgpO1xuICAgIHRoaXMubW9kZUNvbnRyb2xsZXI/LmRlc3Ryb3koKTtcbiAgICB0aGlzLmNvbnRyb2xsZXI/LmRlc3Ryb3koKTtcbiAgfVxuXG4gIC8vID09PSBJbXBlcmF0aXZlIEFQSSAoZXhwb3NlZCBvbiB0aGUgY29tcG9uZW50IGluc3RhbmNlIHZpYSBAVmlld0NoaWxkKSA9PT1cblxuICAvKiogUHJvZ3JhbW1hdGljYWxseSBmb2N1cyB0aGUgZWRpdG9yLiAqL1xuICBmb2N1cygpOiB2b2lkIHtcbiAgICB0aGlzLmVkaXRvclJlZj8ubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICB9XG5cbiAgLyoqIFByb2dyYW1tYXRpY2FsbHkgYmx1ciB0aGUgZWRpdG9yLiAqL1xuICBibHVyKCk6IHZvaWQge1xuICAgIHRoaXMuZWRpdG9yUmVmPy5uYXRpdmVFbGVtZW50LmJsdXIoKTtcbiAgfVxuXG4gIC8qKiBDbGVhciBhbGwgc3RhdGUsIHJvdGF0ZSBzZXNzaW9uLCBhbmQgcmUtZmV0Y2guICovXG4gIHJlc2V0KCk6IHZvaWQge1xuICAgIHRoaXMuY29udHJvbGxlcj8ucmVzZXQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTa2lwIHRoZSBhY3RpdmUgcGlsbCDigJQgc2FtZSBhY3Rpb24gYXMgdGhlIGRyb3Bkb3duJ3Mgc2tpcCBidXR0b24gLyDihpIuXG4gICAqIExldHMgYSBjb25zdW1lciB3aG8gaGlkZXMgdGhlIGJ1aWx0LWluIGJ1dHRvbiAoYHNob3dTa2lwQnV0dG9uPWZhbHNlYClcbiAgICogZHJpdmUgc2tpcHBpbmcgZnJvbSB0aGVpciBvd24gVUkuXG4gICAqL1xuICBza2lwQWN0aXZlUGlsbCgpOiB2b2lkIHtcbiAgICB0aGlzLmNvbnRyb2xsZXI/LnNraXBBY3RpdmVQaWxsKCk7XG4gIH1cblxuICAvKiogU3dpdGNoIGNvbG9yIG1vZGUgYXQgcnVudGltZS4gKi9cbiAgc2V0TW9kZShtb2RlOiBBcHBlYXJhbmNlTW9kZSk6IHZvaWQge1xuICAgIHRoaXMubW9kZSA9IG1vZGU7XG4gICAgdGhpcy5yZXNvbHZlZE1vZGUgPSByZXNvbHZlSW5pdGlhbE1vZGUobW9kZSk7XG4gICAgdGhpcy5tb2RlQ29udHJvbGxlcj8uc2V0TW9kZShtb2RlKTtcbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIC8vID09PSBUZW1wbGF0ZSBoZWxwZXJzID09PVxuXG4gIC8qKlxuICAgKiAnZGVmYXVsdCcg4oaSIHJlbmRlciB0aGUgYnVpbHQtaW4gYXJyb3cgYnV0dG9uLlxuICAgKiAnY3VzdG9tJyAg4oaSIHByb2plY3QgdGhlIGNvbnN1bWVyLXN1cHBsaWVkIFRlbXBsYXRlUmVmLlxuICAgKiAnaGlkZGVuJyAg4oaSIG5vIGJ1dHRvbi5cbiAgICovXG4gIGdldCBzdWJtaXRCdXR0b25TdGF0ZSgpOiBcImRlZmF1bHRcIiB8IFwiY3VzdG9tXCIgfCBcImhpZGRlblwiIHtcbiAgICBpZiAodGhpcy5zdWJtaXRCdXR0b24gPT09IG51bGwpIHJldHVybiBcImhpZGRlblwiO1xuICAgIGlmICh0aGlzLnN1Ym1pdEJ1dHRvbiA9PT0gdW5kZWZpbmVkKSByZXR1cm4gXCJkZWZhdWx0XCI7XG4gICAgcmV0dXJuIFwiY3VzdG9tXCI7XG4gIH1cblxuICAvKiogTmFycm93ZWQgYWNjZXNzb3IgZm9yICpuZ1RlbXBsYXRlT3V0bGV0IOKAlCBuZXZlciB1bmRlZmluZWQuICovXG4gIGdldCBjdXN0b21TdWJtaXRUZW1wbGF0ZSgpOiBUZW1wbGF0ZVJlZjx1bmtub3duPiB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLnN1Ym1pdEJ1dHRvbiA/PyBudWxsO1xuICB9XG5cbiAgZ2V0IHNob3dJbmxpbmVQaWxscygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5waWxsUGxhY2VtZW50ID09PSBcImlubGluZVwiO1xuICB9XG5cbiAgZ2V0IHNob3dEcm9wZG93blBpbGxzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnBpbGxQbGFjZW1lbnQgPT09IFwiZHJvcGRvd25cIjtcbiAgfVxuXG4gIC8qKlxuICAgKiBgdHJ1ZWAgd2hlbiB0aGVyZSdzIHNvbWV0aGluZyB0byBzdWJtaXQg4oCUIGRyaXZlbiBieSBjdXJyZW50IHNlZ21lbnRzXG4gICAqIGFuZCBjb21wbGV0ZWQgcGFyYW1zLiBSZWFkIG9mZiB0aGUgbGl2ZSBlZGl0b3IgdmlhIHRoZSBjb250cm9sbGVyIHN0YXRlLlxuICAgKi9cbiAgY2FuU3VibWl0KHN0YXRlOiB7IHNlZ21lbnRzOiB7IGxlbmd0aDogbnVtYmVyIH07IGNvbXBsZXRlZFBhcmFtczogeyBsZW5ndGg6IG51bWJlciB9IH0pOiBib29sZWFuIHtcbiAgICByZXR1cm4gc3RhdGUuc2VnbWVudHMubGVuZ3RoID4gMCB8fCBzdGF0ZS5jb21wbGV0ZWRQYXJhbXMubGVuZ3RoID4gMDtcbiAgfVxuXG4gIG9uV3JhcHBlckNsaWNrKGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgLy8gQ2xpY2tpbmcgYSBwaWxsIHNob3VsZCBhY3RpdmF0ZSBpdCB3aXRob3V0IHN0ZWFsaW5nIGZvY3VzIGVsc2V3aGVyZS5cbiAgICBjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQgfCBudWxsO1xuICAgIGlmICh0YXJnZXQ/LmNsb3Nlc3QoXCJbZGF0YS1haWEtcGlsbF1cIikpIHJldHVybjtcbiAgICB0aGlzLmZvY3VzKCk7XG4gIH1cblxuICBvblN1Ym1pdEJ1dHRvbkNsaWNrKGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgdGhpcy5oYW5kbGVTdWJtaXRGcm9tVXNlckFjdGlvbigpO1xuICB9XG5cbiAgb25TdWJtaXRTbG90Q2xpY2soZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB0aGlzLmhhbmRsZVN1Ym1pdEZyb21Vc2VyQWN0aW9uKCk7XG4gIH1cblxuICBvblNlbGVjdFBpbGwoaW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMuY29udHJvbGxlci5zZXRBY3RpdmVQaWxsKGluZGV4KTtcbiAgfVxuXG4gIC8vID09PSBDb250cm9sVmFsdWVBY2Nlc3NvciA9PT1cblxuICB3cml0ZVZhbHVlKHZhbHVlOiBzdHJpbmcgfCBudWxsKTogdm9pZCB7XG4gICAgY29uc3QgbmV4dCA9IHZhbHVlID8/IFwiXCI7XG4gICAgaWYgKCF0aGlzLmNvbnRyb2xsZXIpIHtcbiAgICAgIC8vIFJlYWN0aXZlIEZvcm1zIGNhbiBjYWxsIHdyaXRlVmFsdWUoKSBiZWZvcmUgbmdPbkluaXQgY3JlYXRlcyB0aGVcbiAgICAgIC8vIGNvbnRyb2xsZXIgKGR5bmFtaWMgZm9ybSBjb25zdHJ1Y3Rpb24sIG9yIGEgRm9ybUNvbnRyb2wgdGhhdCBhbHJlYWR5XG4gICAgICAvLyBoYWQgYSB2YWx1ZSBhdCBkaXJlY3RpdmUtY3JlYXRpb24gdGltZSkuIEJ1ZmZlciB0aGUgdmFsdWU7IG5nT25Jbml0XG4gICAgICAvLyBmbHVzaGVzIGl0IGFzIHNvb24gYXMgdGhlIGNvbnRyb2xsZXIgZXhpc3RzLlxuICAgICAgdGhpcy5wZW5kaW5nV3JpdGVWYWx1ZSA9IG5leHQ7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuY29udHJvbGxlci5zZXRWYWx1ZShuZXh0KTtcbiAgfVxuXG4gIHJlZ2lzdGVyT25DaGFuZ2UoZm46ICh2YWx1ZTogc3RyaW5nKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgdGhpcy5vbkNoYW5nZUZuID0gZm47XG4gIH1cblxuICByZWdpc3Rlck9uVG91Y2hlZChmbjogKCkgPT4gdm9pZCk6IHZvaWQge1xuICAgIHRoaXMub25Ub3VjaGVkRm4gPSBmbjtcbiAgfVxuXG4gIHNldERpc2FibGVkU3RhdGUoX2Rpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgLy8gVGhlIGNvbnRlbnRFZGl0YWJsZSBob3N0IGRvZXNuJ3QgaGF2ZSBhIG5hdGl2ZSBkaXNhYmxlZCBhdHRyaWJ1dGUuIEZvclxuICAgIC8vIHYwLjEgd2UgYWNjZXB0IHRoZSBjYWxsIHNvIEFuZ3VsYXIncyBmb3JtcyBsYXllciBkb2Vzbid0IHRocm93LCBidXRcbiAgICAvLyB0aGUgZWRpdG9yIHN0YXlzIGludGVyYWN0aXZlLiBBIGZ1dHVyZSBlbmhhbmNlbWVudCBjYW4gdG9nZ2xlXG4gICAgLy8gY29udGVudEVkaXRhYmxlICsgQVJJQSBkaXNhYmxlZCBoZXJlLlxuICB9XG5cbiAgLy8gPT09IFN1Ym1pdCBmbG93ID09PVxuXG4gIC8qKlxuICAgKiBDYWxsZWQgYnkgdGhlIGNvbnRyb2xsZXIncyBvblN1Ym1pdCBjYWxsYmFjayAod2hpY2ggZmlyZXMgZnJvbSB0aGVcbiAgICoga2V5Ym9hcmQgY29udHJvbGxlciBvbiBFbnRlcikuIFJlYWRzIHRoZSBsaXZlIGVkaXRvciB0ZXh0IOKAlCBzYW1lIHRyaWNrXG4gICAqIHRoZSBSZWFjdCBjb21wb25lbnQgdXNlcyDigJQgc28gdGhlIGVtaXR0ZWQgcXVlcnkgcmVmbGVjdHMgd2hhdGV2ZXIncyBpblxuICAgKiB0aGUgRE9NIHJpZ2h0IG5vdywgbm90IGEgcG9zc2libHktc3RhbGUgc3RhdGUgc25hcHNob3QuXG4gICAqL1xuICAvLyBgZnJvbUJ1dHRvbmA6IHRoZSBTREsgcmVjb3JkcyBhbiBFbnRlciBzdWJtaXQgaXRzZWxmIGJlZm9yZSBpdCBjYWxscyBiYWNrXG4gIC8vIGhlcmU7IGEgY2xpY2sgb24gb3VyIG93biBidXR0b24gbmV2ZXIgcGFzc2VzIHRocm91Z2ggaXQuXG4gIHByaXZhdGUgaGFuZGxlU3VibWl0KF9yZXN1bHQ6IEF1dG9jb21wbGV0ZVJlc3VsdCwgZnJvbUJ1dHRvbiA9IGZhbHNlKTogdm9pZCB7XG4gICAgY29uc3QgZWRpdG9yID0gdGhpcy5lZGl0b3JSZWY/Lm5hdGl2ZUVsZW1lbnQ7XG4gICAgaWYgKCFlZGl0b3IpIHJldHVybjtcbiAgICBjb25zdCB0ZXh0ID0gZXh0cmFjdFBsYWluVGV4dChlZGl0b3IpO1xuICAgIGNvbnN0IHN0YXRlID0gdGhpcy5jb250cm9sbGVyLmdldFN0YXRlKCk7XG4gICAgY29uc3QgcGFyYW1zID0gdGhpcy5jb21wbGV0ZWRQYXJhbXMgPz8gc3RhdGUuY29tcGxldGVkUGFyYW1zO1xuICAgIGNvbnN0IHJlc3VsdCA9IGJ1aWxkU3VibWl0UmVzdWx0KHRleHQsIHBhcmFtcywgc3RhdGUuc2tpcHBlZFBhcmFtcywge1xuICAgICAgaWRlbnRpZmllZFBhcmFtczogc3RhdGUuaWRlbnRpZmllZFBhcmFtcyxcbiAgICAgIGlzUmVhZHk6IHN0YXRlLmlzUmVhZHksXG4gICAgICBjdXN0b21GaWVsZHM6IHN0YXRlLmN1c3RvbUZpZWxkcyxcbiAgICB9KTtcbiAgICBpZiAoZnJvbUJ1dHRvbikgdGhpcy5jb250cm9sbGVyLnJlY29yZFN1Ym1pdChyZXN1bHQpO1xuICAgIHRoaXMuc3VibWl0dGVkLmVtaXQocmVzdWx0KTtcbiAgICBpZiAodGhpcy5yZXNldE9uU3VibWl0KSB0aGlzLmNvbnRyb2xsZXIucmVzZXQoKTtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlU3VibWl0RnJvbVVzZXJBY3Rpb24oKTogdm9pZCB7XG4gICAgY29uc3Qgc3RhdGUgPSB0aGlzLmNvbnRyb2xsZXIuZ2V0U3RhdGUoKTtcbiAgICBpZiAoIXRoaXMuY2FuU3VibWl0KHN0YXRlKSkgcmV0dXJuO1xuICAgIC8vIFN5bnRoZXNpemUgdGhlIHJlc3VsdCBmb3IgdGhlIHN1Ym1pdC1idXR0b24gY2xpY2sgcGF0aDsgc2FtZSBzaGFwZVxuICAgIC8vIHRoZSBjb250cm9sbGVyIHdvdWxkIGRlbGl2ZXIgZnJvbSBhIGtleWJvYXJkIEVudGVyLCBzbyBoYW5kbGVTdWJtaXRcbiAgICAvLyBjYW4gdGFrZSBlaXRoZXIgZW50cnkgcG9pbnQuXG4gICAgdGhpcy5oYW5kbGVTdWJtaXQoXG4gICAgICB7XG4gICAgICAgIHF1ZXJ5OiBzdGF0ZS50ZXh0LnRyaW0oKSxcbiAgICAgICAgcmF3X3F1ZXJ5OiBcIlwiLFxuICAgICAgICBjb21wbGV0ZWRfcGFyYW1zOiBbXSxcbiAgICAgICAgaWRlbnRpZmllZF9wYXJhbXM6IFtdLFxuICAgICAgICBpc19yZWFkeTogc3RhdGUuaXNSZWFkeSxcbiAgICAgIH0sXG4gICAgICB0cnVlLFxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIG1lYXN1cmVQaWxsV3JhcCgpOiB2b2lkIHtcbiAgICBjb25zdCBjb250YWluZXIgPSB0aGlzLnBpbGxDb250YWluZXJSZWY/Lm5hdGl2ZUVsZW1lbnQ7XG4gICAgY29uc3QgZWRpdG9yID0gdGhpcy5lZGl0b3JSZWY/Lm5hdGl2ZUVsZW1lbnQ7XG4gICAgaWYgKCFjb250YWluZXIgfHwgIWVkaXRvcikgcmV0dXJuO1xuICAgIGNvbnN0IGlubmVyID0gY29udGFpbmVyLmZpcnN0RWxlbWVudENoaWxkIGFzIEhUTUxFbGVtZW50IHwgbnVsbDtcbiAgICBpZiAoIWlubmVyKSByZXR1cm47XG4gICAgLy8gV3JhcCBkZXRlY3Rpb246IHRoZSBwaWxsIHJvdydzIHRvcCB2cyB0aGUgZWRpdG9yJ3MgYm90dG9tLiBXaGVuIHRoZVxuICAgIC8vIHBpbGxzIHNpdCBvbiAob3IgYWJvdmUpIHRoZSBlZGl0b3IncyBsYXN0IGxpbmUgdGhleSdyZSBOT1Qgd3JhcHBlZCDigJRcbiAgICAvLyBrZWVwIHRoZSA4cHggbWFyZ2luIHNvIHRoZXkgZG9uJ3QgYnV0dCBhZ2FpbnN0IHR5cGVkIHRleHQgb3IgdGhlXG4gICAgLy8gcGxhY2Vob2xkZXIuIFRoaXMgaGFuZGxlcyB0aGUgZW1wdHktZWRpdG9yICsgcGxhY2Vob2xkZXIgY2FzZVxuICAgIC8vIG5hdHVyYWxseTogdGhlIHBsYWNlaG9sZGVyIHN0aWxsIG9jY3VwaWVzIHRoZSBlZGl0b3IncyBsaW5lIGJveC5cbiAgICBjb25zdCBjUmVjdCA9IGlubmVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIGNvbnN0IGVSZWN0ID0gZWRpdG9yLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIGNvbnN0IHdyYXBwZWQgPSBjUmVjdC50b3AgPj0gZVJlY3QuYm90dG9tIC0gMjtcbiAgICB0aGlzLnpvbmUucnVuKCgpID0+IHtcbiAgICAgIGlmICh3cmFwcGVkKSBjb250YWluZXIuc2V0QXR0cmlidXRlKFwiZGF0YS1haWEtcGlsbC13cmFwcGVkXCIsIFwiXCIpO1xuICAgICAgZWxzZSBjb250YWluZXIucmVtb3ZlQXR0cmlidXRlKFwiZGF0YS1haWEtcGlsbC13cmFwcGVkXCIpO1xuICAgIH0pO1xuICB9XG59XG5cbmZ1bmN0aW9uIG5vb3AoKTogdm9pZCB7XG4gIC8vIERlZmF1bHQgbm8tb3AgZm9yIENWQSBjYWxsYmFja3MuXG59XG5cbi8qKlxuICogUmVzb2x2ZSBhIGNvbmNyZXRlIGxpZ2h0L2RhcmsgdmFsdWUgZnJvbSB0aGUgY29uZmlndXJlZCBtb2RlLiBVc2VkIHRvIHNlZWRcbiAqIHRoZSBgZGF0YS1tb2RlYCBhdHRyaWJ1dGUgc3luY2hyb25vdXNseSAoaW5jbHVkaW5nIGR1cmluZyBTU1IsIHdoZXJlXG4gKiBNb2RlQ29udHJvbGxlciBuZXZlciBydW5zKS4gT24gdGhlIHNlcnZlciBgd2luZG93YCBpcyB1bmRlZmluZWQg4oaSIGRlZmF1bHRzXG4gKiB0byBcImRhcmtcIiAobWF0Y2hlcyB0aGUgdmFuaWxsYS9SZWFjdCBiZWhhdmlvcikuXG4gKi9cbmZ1bmN0aW9uIHJlc29sdmVJbml0aWFsTW9kZShtb2RlOiBBcHBlYXJhbmNlTW9kZSk6IFwibGlnaHRcIiB8IFwiZGFya1wiIHtcbiAgaWYgKG1vZGUgIT09IFwiYXV0b1wiKSByZXR1cm4gbW9kZTtcbiAgaWYgKHR5cGVvZiB3aW5kb3cgPT09IFwidW5kZWZpbmVkXCIpIHJldHVybiBcImRhcmtcIjtcbiAgcmV0dXJuIHdpbmRvdy5tYXRjaE1lZGlhKFwiKHByZWZlcnMtY29sb3Itc2NoZW1lOiBkYXJrKVwiKS5tYXRjaGVzID8gXCJkYXJrXCIgOiBcImxpZ2h0XCI7XG59XG4iLCI8ZGl2XG4gICNjb250YWluZXJcbiAgY2xhc3M9XCJtYWdpY3gtYWlhIG1hZ2ljeC1haWEtY29udGFpbmVyXCJcbiAgW2F0dHIuZGF0YS1waWxsLXBsYWNlbWVudF09XCJwaWxsUGxhY2VtZW50XCJcbiAgW2F0dHIuZGF0YS1vcHRpb25zLXBvc2l0aW9uXT1cIm9wdGlvbnNQb3NpdGlvblwiXG4gIFthdHRyLmRhdGEtYW5pbWF0aW9uc109XCJhbmltYXRpb25zID8gJ29uJyA6ICdvZmYnXCJcbiAgW2F0dHIuZGF0YS1tb2RlXT1cInJlc29sdmVkTW9kZVwiXG4+XG4gIDxhaS1hdXRvY29tcGxldGUtZHJvcGRvd25cbiAgICAqbmdJZj1cImNvbnRyb2xsZXJcIlxuICAgIFtjb250cm9sbGVyXT1cImNvbnRyb2xsZXJcIlxuICAgIFtzaG93UGlsbHNdPVwic2hvd0Ryb3Bkb3duUGlsbHNcIlxuICAgIFtzaG93U2tpcEJ1dHRvbl09XCJzaG93U2tpcEJ1dHRvblwiXG4gICAgW3Nob3dPcHRpb25JY29uc109XCJzaG93T3B0aW9uSWNvbnNcIlxuICAgIFtzaG93T3B0aW9uSW1hZ2VzXT1cInNob3dPcHRpb25JbWFnZXNcIlxuICAgIFtzaG93T3B0aW9uQ291bnRzXT1cInNob3dPcHRpb25Db3VudHNcIlxuICAgIFtwcm9kdWN0c0xheW91dF09XCJwcm9kdWN0c0xheW91dFwiXG4gICAgW3Byb2R1Y3RJbWFnZUZhbGxiYWNrXT1cInByb2R1Y3RJbWFnZUZhbGxiYWNrXCJcbiAgPjwvYWktYXV0b2NvbXBsZXRlLWRyb3Bkb3duPlxuXG4gIDxkaXZcbiAgICBjbGFzcz1cIm1hZ2ljeC1haWEtaW5wdXQtd3JhcHBlclwiXG4gICAgZGF0YS1haWEtaW5wdXQtd3JhcHBlcj1cIlwiXG4gICAgKGNsaWNrKT1cIm9uV3JhcHBlckNsaWNrKCRldmVudClcIlxuICAgIChrZXl1cCk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICA+XG4gICAgPGRpdiBjbGFzcz1cIm1hZ2ljeC1haWEtZWRpdG9yLWFyZWFcIiBkYXRhLWFpYS1lZGl0b3I9XCJcIj5cbiAgICAgIDxkaXZcbiAgICAgICAgI2VkaXRvclxuICAgICAgICAqbmdJZj1cImNvbnRyb2xsZXJcIlxuICAgICAgICBbYWlhRWRpdG9ySG9zdF09XCJjb250cm9sbGVyXCJcbiAgICAgICAgW2F1dG9Gb2N1c109XCJhdXRvRm9jdXNcIlxuICAgICAgICBbc2hvd0NoaXBJY29uc109XCJzaG93Q2hpcEljb25zXCJcbiAgICAgICAgW3Nob3dDaGlwSW1hZ2VzXT1cInNob3dDaGlwSW1hZ2VzXCJcbiAgICAgICAgY2xhc3M9XCJtYWdpY3gtYWlhLWlucHV0XCJcbiAgICAgICAgZGF0YS1haWEtaW5wdXQ9XCJcIlxuICAgICAgPjwvZGl2PlxuXG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29udHJvbGxlciAmJiBzaG93SW5saW5lUGlsbHNcIj5cbiAgICAgICAgPHNwYW5cbiAgICAgICAgICAjcGlsbENvbnRhaW5lclxuICAgICAgICAgIGNsYXNzPVwibWFnaWN4LWFpYS1waWxsLWxpc3QtY29udGFpbmVyXCJcbiAgICAgICAgICBkYXRhLWFpYS1waWxsLWxpc3QtY29udGFpbmVyPVwiXCJcbiAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgKGNvbnRyb2xsZXIuaXNMb2FkaW5nJCB8IGFzeW5jKSB8fFxuICAgICAgICAgICAgICAoKGNvbnRyb2xsZXIuc3VnZ2VzdGlvblBpbGxzJCB8IGFzeW5jKT8ubGVuZ3RoID8/IDApID4gMFxuICAgICAgICAgIFwiXG4gICAgICAgID5cbiAgICAgICAgICA8YWlhLXBpbGwtbGlzdFxuICAgICAgICAgICAgW3BpbGxzXT1cIihjb250cm9sbGVyLnN1Z2dlc3Rpb25QaWxscyQgfCBhc3luYykgPz8gW11cIlxuICAgICAgICAgICAgW2FjdGl2ZVBpbGxJbmRleF09XCIwXCJcbiAgICAgICAgICAgIFthY3RpdmVTZWxlY3RlZF09XCIoY29udHJvbGxlci5pc0FjdGl2ZVBpbGxTZWxlY3RlZCQgfCBhc3luYykgPz8gZmFsc2VcIlxuICAgICAgICAgICAgW2xvYWRpbmddPVwiKGNvbnRyb2xsZXIuaXNMb2FkaW5nJCB8IGFzeW5jKSA/PyBmYWxzZVwiXG4gICAgICAgICAgICAoc2VsZWN0UGlsbCk9XCJvblNlbGVjdFBpbGwoJGV2ZW50KVwiXG4gICAgICAgICAgPjwvYWlhLXBpbGwtbGlzdD5cbiAgICAgICAgPC9zcGFuPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+XG5cbiAgICA8bmctY29udGFpbmVyIFtuZ1N3aXRjaF09XCJzdWJtaXRCdXR0b25TdGF0ZVwiPlxuICAgICAgPGFpYS1zdWJtaXQtYnV0dG9uXG4gICAgICAgICpuZ1N3aXRjaENhc2U9XCInZGVmYXVsdCdcIlxuICAgICAgICBbZGlzYWJsZWRdPVwiXG4gICAgICAgICAgIShcbiAgICAgICAgICAgIGNvbnRyb2xsZXIgJiZcbiAgICAgICAgICAgIGNhblN1Ym1pdCh7XG4gICAgICAgICAgICAgIHNlZ21lbnRzOiAoY29udHJvbGxlci5zZWdtZW50cyQgfCBhc3luYykgPz8gW10sXG4gICAgICAgICAgICAgIGNvbXBsZXRlZFBhcmFtczogKGNvbnRyb2xsZXIuY29tcGxldGVkUGFyYW1zJCB8IGFzeW5jKSA/PyBbXVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICApXG4gICAgICAgIFwiXG4gICAgICAgIChzdWJtaXQpPVwib25TdWJtaXRCdXR0b25DbGljaygkZXZlbnQpXCJcbiAgICAgID48L2FpYS1zdWJtaXQtYnV0dG9uPlxuXG4gICAgICA8c3BhblxuICAgICAgICAqbmdTd2l0Y2hDYXNlPVwiJ2N1c3RvbSdcIlxuICAgICAgICBkYXRhLWFpYS1zdWJtaXQ9XCJcIlxuICAgICAgICBkYXRhLWFpYS1zdWJtaXQtc2xvdD1cIlwiXG4gICAgICAgIGNsYXNzPVwibWFnaWN4LWFpYS1zdWJtaXQtc2xvdFwiXG4gICAgICAgIChjbGljayk9XCJvblN1Ym1pdFNsb3RDbGljaygkZXZlbnQpXCJcbiAgICAgID5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImN1c3RvbVN1Ym1pdFRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XG4gICAgICA8L3NwYW4+XG4gICAgPC9uZy1jb250YWluZXI+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=
539
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWktYXV0b2NvbXBsZXRlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvYWktYXV0b2NvbXBsZXRlL2FpLWF1dG9jb21wbGV0ZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9zcmMvbGliL2FpLWF1dG9jb21wbGV0ZS9haS1hdXRvY29tcGxldGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2xFLE9BQU8sRUFFTCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFFVCxZQUFZLEVBQ1osVUFBVSxFQUNWLEtBQUssRUFDTCxNQUFNLEVBQ04sTUFBTSxFQUlOLE1BQU0sRUFDTixXQUFXLEVBR1gsU0FBUyxFQUNULGlCQUFpQixHQUNsQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQTZCLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDOUUsT0FBTyxFQUlMLGlCQUFpQixFQUVqQixnQkFBZ0IsRUFDaEIsY0FBYyxFQU1kLGVBQWUsR0FDaEIsTUFBTSxxQ0FBcUMsQ0FBQztBQUM3QyxPQUFPLEVBQUUsK0JBQStCLEVBQUUsTUFBTSxnRUFBZ0UsQ0FBQztBQUNqSCxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUNwRixPQUFPLEVBQUUsaUNBQWlDLEVBQUUsTUFBTSwrQ0FBK0MsQ0FBQztBQUNsRyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUM5RSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxtREFBbUQsQ0FBQzs7O0FBRTFGOzs7Ozs7O0dBT0c7QUF3QkgsTUFBTSxPQUFPLHVCQUF1QjtJQXZCcEM7UUFpRFcsc0JBQWlCLEdBQUcsS0FBSyxDQUFDO1FBRW5DLHdEQUF3RDtRQUMvQyxr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LE1BQU0sQ0FBQyxVQUFVLENBQUMsOEJBQThCLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDO0FBQ3RGLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tb25Nb2R1bGUsIGlzUGxhdGZvcm1Ccm93c2VyIH0gZnJvbSBcIkBhbmd1bGFyL2NvbW1vblwiO1xuaW1wb3J0IHtcbiAgdHlwZSBBZnRlclZpZXdJbml0LFxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgdHlwZSBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIGZvcndhcmRSZWYsXG4gIElucHV0LFxuICBpbmplY3QsXG4gIE5nWm9uZSxcbiAgdHlwZSBPbkNoYW5nZXMsXG4gIHR5cGUgT25EZXN0cm95LFxuICB0eXBlIE9uSW5pdCxcbiAgT3V0cHV0LFxuICBQTEFURk9STV9JRCxcbiAgdHlwZSBTaW1wbGVDaGFuZ2VzLFxuICB0eXBlIFRlbXBsYXRlUmVmLFxuICBWaWV3Q2hpbGQsXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgdHlwZSBDb250cm9sVmFsdWVBY2Nlc3NvciwgTkdfVkFMVUVfQUNDRVNTT1IgfSBmcm9tIFwiQGFuZ3VsYXIvZm9ybXNcIjtcbmltcG9ydCB7XG4gIHR5cGUgQVBJQ29uZmlnLFxuICB0eXBlIEFwcGVhcmFuY2VNb2RlLFxuICB0eXBlIEF1dG9jb21wbGV0ZVJlc3VsdCxcbiAgYnVpbGRTdWJtaXRSZXN1bHQsXG4gIHR5cGUgQ29tcGxldGVkUGFyYW1TdGF0ZSxcbiAgZXh0cmFjdFBsYWluVGV4dCxcbiAgTW9kZUNvbnRyb2xsZXIsXG4gIHR5cGUgT3B0aW9uT3ZlcnJpZGVzLFxuICB0eXBlIFByb2R1Y3QsXG4gIHR5cGUgUHJvZHVjdEltYWdlRmFsbGJhY2ssXG4gIHR5cGUgUHJvZHVjdHNDb25maWcsXG4gIHR5cGUgUHJvZHVjdHNMYXlvdXQsXG4gIHNldEN1cnNvck9mZnNldCxcbn0gZnJvbSBcIkBtYWdpY3gtZW5nL2FpLWF1dG9jb21wbGV0ZS12YW5pbGxhXCI7XG5pbXBvcnQgeyBBSUF1dG9jb21wbGV0ZURyb3Bkb3duQ29tcG9uZW50IH0gZnJvbSBcIi4uL2FpLWF1dG9jb21wbGV0ZS1kcm9wZG93bi9haS1hdXRvY29tcGxldGUtZHJvcGRvd24uY29tcG9uZW50XCI7XG5pbXBvcnQgeyBBSUF1dG9jb21wbGV0ZUNvbnRyb2xsZXIgfSBmcm9tIFwiLi4vY29udHJvbGxlci9haS1hdXRvY29tcGxldGUuY29udHJvbGxlclwiO1xuaW1wb3J0IHsgQUlBdXRvY29tcGxldGVFZGl0b3JIb3N0RGlyZWN0aXZlIH0gZnJvbSBcIi4uL2ludGVybmFsL2VkaXRvci1ob3N0L2VkaXRvci1ob3N0LmRpcmVjdGl2ZVwiO1xuaW1wb3J0IHsgUGlsbExpc3RDb21wb25lbnQgfSBmcm9tIFwiLi4vaW50ZXJuYWwvcGlsbC1saXN0L3BpbGwtbGlzdC5jb21wb25lbnRcIjtcbmltcG9ydCB7IFN1Ym1pdEJ1dHRvbkNvbXBvbmVudCB9IGZyb20gXCIuLi9pbnRlcm5hbC9zdWJtaXQtYnV0dG9uL3N1Ym1pdC1idXR0b24uY29tcG9uZW50XCI7XG5cbi8qKlxuICogVGllciAxIGNvbXBvbmVudCDigJQgYDxhaS1hdXRvY29tcGxldGU+YC4gVGhlIEFuZ3VsYXIgZXF1aXZhbGVudCBvZiBSZWFjdCdzXG4gKiBgPEFJQXV0b2NvbXBsZXRlIC8+YC4gT3ducyB0aGUgY29udGVudEVkaXRhYmxlIGVkaXRvciwgaW5saW5lIHBpbGxzLCBtb2RlXG4gKiBjb250cm9sbGVyLCBzdWJtaXQgYnV0dG9uIHNsb3QsIGFuZCBhbiBlbWJlZGRlZFxuICoge0BsaW5rIEFJQXV0b2NvbXBsZXRlQ29udHJvbGxlcn0gdGhhdCBkcml2ZXMgdGhlIGRyb3Bkb3duLlxuICpcbiAqIEBwdWJsaWNcbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiBcImFpLWF1dG9jb21wbGV0ZVwiLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbXG4gICAgQ29tbW9uTW9kdWxlLFxuICAgIEFJQXV0b2NvbXBsZXRlRHJvcGRvd25Db21wb25lbnQsXG4gICAgQUlBdXRvY29tcGxldGVFZGl0b3JIb3N0RGlyZWN0aXZlLFxuICAgIFBpbGxMaXN0Q29tcG9uZW50LFxuICAgIFN1Ym1pdEJ1dHRvbkNvbXBvbmVudCxcbiAgXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gIHRlbXBsYXRlVXJsOiBcIi4vYWktYXV0b2NvbXBsZXRlLmNvbXBvbmVudC5odG1sXCIsXG4gIHN0eWxlVXJsczogW1wiLi9haS1hdXRvY29tcGxldGUuY29tcG9uZW50LmNzc1wiXSxcbiAgcHJvdmlkZXJzOiBbXG4gICAge1xuICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVzZS1iZWZvcmUtZGVmaW5lXG4gICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBBSUF1dG9jb21wbGV0ZUNvbXBvbmVudCksXG4gICAgICBtdWx0aTogdHJ1ZSxcbiAgICB9LFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBBSUF1dG9jb21wbGV0ZUNvbXBvbmVudFxuICBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3ksIENvbnRyb2xWYWx1ZUFjY2Vzc29yXG57XG4gIC8vID09PSBJbnB1dHMgKG1pcnJvcnMgUmVhY3QncyBBSUF1dG9jb21wbGV0ZVByb3BzKSA9PT1cblxuICBASW5wdXQoKSBhcGlDb25maWc/OiBBUElDb25maWc7XG4gIC8qKlxuICAgKiBPcHRpb25hbCB1c2VyIGNvbnRleHQuIEluY2x1ZGUgd2hhdGV2ZXIgeW91IGtub3cgYWJvdXQgdGhlIHVzZXIg4oCUIGFcbiAgICogcHJvZmlsZSwgcHJlZmVyZW5jZXMsIHdvcmtzcGFjZSwgYW55dGhpbmcg4oCUIHRvIHBlcnNvbmFsaXplIHN1Z2dlc3RlZFxuICAgKiBwYXJhbWV0ZXJzIGFuZCBvcHRpb25zIHRvIHRoZW0uIEJpbmQgYSBzdGFibGUgcmVmZXJlbmNlOyB0aGUgc2FtZSBzd2FwXG4gICAqIHJ1bGUgdGhhdCBhcHBsaWVzIHRvIGBhcGlDb25maWdgIGFwcGxpZXMgaGVyZS5cbiAgICovXG4gIEBJbnB1dCgpIGFkZGl0aW9uYWxDb250ZXh0PzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIC8qKlxuICAgKiBCQ1AgNDcgbGFuZ3VhZ2UgdGFnIChlLmcuIGBcImVzXCJgKSwgc2VudCB3aXRoIGV2ZXJ5IHN1Z2dlc3Rpb24gcmVxdWVzdC5cbiAgICogRGVmYXVsdDogdGhlIGJyb3dzZXIgbGFuZ3VhZ2UgKGBuYXZpZ2F0b3IubGFuZ3VhZ2VgKSwgZWxzZSBgXCJlbi1VU1wiYC5cbiAgICovXG4gIEBJbnB1dCgpIGxhbmd1YWdlPzogc3RyaW5nO1xuICAvKipcbiAgICogU3RhYmxlIGlkIGZvciB0aGlzIHZpc2l0b3IsIGtlcHQgYnkgdGhlIGhvc3QgYWNyb3NzIHBhZ2UgbG9hZHMuIFJpZGVzIG9uXG4gICAqIHRlbGVtZXRyeSBldmVudHMgc28gc2VhcmNoZXMgY2FuIGJlIGpvaW5lZCB0byB3aGF0IHRoZSB2aXNpdG9yIGRvZXNcbiAgICogYWZ0ZXJ3YXJkcy4gTXVzdCBiZSBhIFVVSUQgdjQ7IG9taXQgdG8gc2VuZCBub25lLiBBIGZ1bmN0aW9uIGlzIGNhbGxlZFxuICAgKiBvbmx5IG9uY2UgdGhlIHNlcnZlciBoYXMgZnVubmVsIHRlbGVtZXRyeSBvbi5cbiAgICovXG4gIEBJbnB1dCgpIHZpc2l0b3JJZD86IHN0cmluZyB8ICgoKSA9PiBzdHJpbmcgfCB1bmRlZmluZWQpO1xuICBASW5wdXQoKSBvcHRpb25PdmVycmlkZXM/OiBPcHRpb25PdmVycmlkZXM7XG4gIEBJbnB1dCgpIG1hc2tDb21wbGV0ZWRUZXh0ID0gZmFsc2U7XG4gIEBJbnB1dCgpIGNvbHVtbnM/OiBudW1iZXI7XG4gIC8qKiBXaGVyZSB1bmZpbGxlZCBwaWxscyByZW5kZXIuIERlZmF1bHQ6IFwiZHJvcGRvd25cIi4gKi9cbiAgQElucHV0KCkgcGlsbFBsYWNlbWVudDogXCJpbmxpbmVcIiB8IFwiZHJvcGRvd25cIiB8IFwiaGlkZGVuXCIgPSBcImRyb3Bkb3duXCI7XG4gIC8qKiBDb2xvciBtb2RlLiBcImF1dG9cIiBmb2xsb3dzIHByZWZlcnMtY29sb3Itc2NoZW1lLiBEZWZhdWx0OiBcImF1dG9cIi4gKi9cbiAgQElucHV0KCkgbW9kZTogQXBwZWFyYW5jZU1vZGUgPSBcImF1dG9cIjtcbiAgQElucHV0KCkgb3B0aW9uc1Bvc2l0aW9uOiBcImFib3ZlXCIgfCBcImJlbG93XCIgPSBcImJlbG93XCI7XG4gIEBJbnB1dCgpIGFuaW1hdGlvbnMgPSB0cnVlO1xuICBASW5wdXQoKSBkcm9wZG93blRyaWdnZXI/OiBcImF1dG9cIiB8IFwibWFudWFsXCIgfCBcImhpZGRlblwiO1xuICBASW5wdXQoKSBjbG9zZURyb3Bkb3duT25CbHVyPzogYm9vbGVhbjtcbiAgQElucHV0KCkgc2hvd05vblRhcHBhYmxlT3B0aW9ucz86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBXaGVuIHRydWUgKGRlZmF1bHQpLCB0aGUgZHJvcGRvd24ncyBwaWxsIGJhciBlbmRzIGluIGEgc21hbGwgXCJza2lwXCIgYnV0dG9uXG4gICAqIHRoYXQgZGlzbWlzc2VzIHRoZSBhY3RpdmUgcGlsbCDigJQgc2FtZSBhY3Rpb24gYXMgcHJlc3Npbmcg4oaSIGF0IHRoZSBlbmQgb2ZcbiAgICogdGhlIGlucHV0LiBTZXQgdG8gZmFsc2UgdG8gaGlkZSBpdC4gV2hlbiBwaWxscyByZW5kZXIgZWxzZXdoZXJlXG4gICAqIChgcGlsbFBsYWNlbWVudDogXCJpbmxpbmVcImAgLyBgXCJoaWRkZW5cImApIHRoZSBiYXIgcmVuZGVycyBhcyBhIHNraXAtb25seVxuICAgKiByb3cgaG9sZGluZyBqdXN0IHRoZSBidXR0b24uIEhpZGRlbiB3aGlsZSB0aGUgaW5wdXQgaXMgZW1wdHkg4oCUIGl0IGFwcGVhcnNcbiAgICogYWxvbmdzaWRlIHRoZSBmb290ZXIncyBcIuKGkiB0byBza2lwXCIgaGludCBvbmNlIHRoZSB1c2VyIGhhcyB0eXBlZC5cbiAgICovXG4gIEBJbnB1dCgpIHNob3dTa2lwQnV0dG9uID0gdHJ1ZTtcbiAgLyoqIFdoZW4gdHJ1ZSAoZGVmYXVsdCksIGFuIG9wdGlvbiB0aGF0IGNhcnJpZXMgYW4gYGljb25fc3ZnYCBkcmF3cyBpdHMgaWNvbiBiZWZvcmUgaXRzIHRleHQgaW4gdGhlIGRyb3Bkb3duLiBTZXQgdG8gZmFsc2UgdG8gcmVuZGVyIG9wdGlvbiByb3dzIGFzIHRleHQgb25seS4gKi9cbiAgQElucHV0KCkgc2hvd09wdGlvbkljb25zID0gdHJ1ZTtcbiAgLyoqIFdoZW4gdHJ1ZSAoZGVmYXVsdCksIGFuIG9wdGlvbiB0aGF0IGNhcnJpZXMgYW4gYGltYWdlX3VybGAgZHJhd3MgaXQgYXMgYSBzcXVhcmUgdGh1bWJuYWlsIGJlZm9yZSBpdHMgdGV4dCBpbiB0aGUgZHJvcGRvd24gKGluIHBsYWNlIG9mIGl0cyBgaWNvbl9zdmdgKS4gU2V0IHRvIGZhbHNlIHRvIHJlbmRlciBvcHRpb24gcm93cyB3aXRob3V0IHBpY3R1cmVzLiAqL1xuICBASW5wdXQoKSBzaG93T3B0aW9uSW1hZ2VzID0gdHJ1ZTtcbiAgLyoqIFdoZW4gdHJ1ZSAoZGVmYXVsdCksIGFuIG9wdGlvbiB0aGF0IGNhcnJpZXMgYW4gYGl0ZW1fY291bnRgIHNob3dzIGl0IGFzIGEgbXV0ZWQgbGFiZWwgYXQgdGhlIHJvdydzIHRyYWlsaW5nIGVkZ2UgKFwiMTIgaXRlbXNcIikuIFNldCB0byBmYWxzZSB0byBoaWRlIHRoZSBjb3VudHMuICovXG4gIEBJbnB1dCgpIHNob3dPcHRpb25Db3VudHMgPSB0cnVlO1xuICAvKipcbiAgICogSG93IHRoZSBwcm9kdWN0IHN0cmlwIGxheXMgaXRzIGNhcmRzIG91dC4gYFwicm93XCJgICh0aGUgZGVmYXVsdCkgaXMgYVxuICAgKiBob3Jpem9udGFsbHkgc2Nyb2xsaW5nIHNoZWxmIG9mIGNhcmRzLiBgXCJsaXN0XCJgIHN0YWNrcyB0aGUgc2FtZSBjYXJkcyBhc1xuICAgKiBmdWxsLXdpZHRoIHJvd3Mg4oCUIHRodW1ibmFpbCBvbiB0aGUgbGVmdCwgdGl0bGUsIHZlbmRvciBhbmQgcHJpY2Ugb24gdGhlXG4gICAqIHJpZ2h0IOKAlCBmb3IgcmVzdWx0cyB0aGF0IHJlYWQgYXMgYSBsaXN0IChjb3Vyc2VzLCBsaXN0aW5ncywgZG9jdW1lbnRzKVxuICAgKiByYXRoZXIgdGhhbiBwcm9kdWN0cyBvbiBhIHNoZWxmOyB0aGUgY29sdW1uIHNjcm9sbHMgdmVydGljYWxseSBpbnNpZGVcbiAgICogYC0tYWlhLXByb2R1Y3QtbGlzdC1tYXgtaGVpZ2h0YC5cbiAgICovXG4gIEBJbnB1dCgpIHByb2R1Y3RzTGF5b3V0OiBQcm9kdWN0c0xheW91dCA9IFwicm93XCI7XG4gIC8qKiBNaXNzaW5nL2ZhaWxlZCBpbWFnZSBmYWxsYmFjay4gU3R5bGUgaW5pdGlhbHMgd2l0aCBgW2RhdGEtYWlhLXByb2R1Y3QtaW5pdGlhbF1gLiAqL1xuICBASW5wdXQoKSBwcm9kdWN0SW1hZ2VGYWxsYmFjazogUHJvZHVjdEltYWdlRmFsbGJhY2sgPSBcImltYWdlXCI7XG4gIC8qKiBXaGVuIHRydWUgKGRlZmF1bHQpLCBhIGNvbXBsZXRlZCBjaGlwIGluIHRoZSBpbnB1dCBkcmF3cyB0aGUgaWNvbiBvZiB0aGUgb3B0aW9uIHRoYXQgYW5zd2VyZWQgaXQuIFNldCB0byBmYWxzZSB0byByZW5kZXIgY2hpcHMgYXMgdGV4dCBvbmx5LiAqL1xuICBASW5wdXQoKSBzaG93Q2hpcEljb25zID0gdHJ1ZTtcbiAgLyoqIFdoZW4gdHJ1ZSAoZGVmYXVsdCksIGEgY29tcGxldGVkIGNoaXAgaW4gdGhlIGlucHV0IGRyYXdzIHRoZSBwaWN0dXJlIChgaW1hZ2VfdXJsYCkgb2YgdGhlIG9wdGlvbiB0aGF0IGFuc3dlcmVkIGl0LCBpbiBwbGFjZSBvZiBpdHMgaWNvbi4gU2V0IHRvIGZhbHNlIHRvIHJlbmRlciBjaGlwcyB3aXRob3V0IHBpY3R1cmVzLiAqL1xuICBASW5wdXQoKSBzaG93Q2hpcEltYWdlcyA9IHRydWU7XG4gIC8qKiBGb2N1cyB0aGUgZWRpdG9yIG9uIG1vdW50LiBEZWZhdWx0OiB0cnVlLiAqL1xuICBASW5wdXQoKSBhdXRvRm9jdXMgPSB0cnVlO1xuICAvKiogQ29udHJvbGxlZC1tb2RlIHRleHQgdmFsdWUuICovXG4gIEBJbnB1dCgpIHZhbHVlPzogc3RyaW5nO1xuICAvKiogQ29udHJvbGxlZC1tb2RlIGNvbXBsZXRlZCBwYXJhbXMuICovXG4gIEBJbnB1dCgpIGNvbXBsZXRlZFBhcmFtcz86IENvbXBsZXRlZFBhcmFtU3RhdGVbXTtcbiAgLyoqXG4gICAqIFdoZW4gdHJ1ZSAoZGVmYXVsdCksIHRoZSBkcm9wZG93biByZW5kZXJzIGEgaG9yaXpvbnRhbCByb3cgb2YgcHJvZHVjdFxuICAgKiBjYXJkcyBiZWxvdyB0aGUgb3B0aW9ucyBncmlkIHdoZW5ldmVyIGl0IGhhcyBwcm9kdWN0cyB0byBzaG93OiBieSBkZWZhdWx0XG4gICAqIHRoZSBpdGVtcyB0aGUgYC9zdWdnZXN0YCByZXNwb25zZSByZXBvcnRzIGFzIG1hdGNoaW5nIHRoZSBxdWVyeSwgb3IgdGhlXG4gICAqIHJlc3VsdHMgb2YgYSBjdXN0b20gYHByb2R1Y3RzYCBzZWFyY2guIFNldCB0byBmYWxzZSB0byByZW5kZXIgbm8gc3RyaXBcbiAgICogYW5kIHJ1biBubyBjdXN0b20gc2VhcmNoLlxuICAgKi9cbiAgQElucHV0KCkgc2hvd1Byb2R1Y3RzID0gdHJ1ZTtcbiAgLyoqXG4gICAqIEN1c3RvbSBzb3VyY2UgZm9yIHRoZSBwcm9kdWN0IHN0cmlwLiBPbWl0IGl0IGFuZCB0aGUgc3RyaXAgc2hvd3MgdGhlXG4gICAqIGl0ZW1zIHRoZSBgL3N1Z2dlc3RgIHJlc3BvbnNlIGl0c2VsZiByZXBvcnRzIGFzIG1hdGNoaW5nIHRoZSBxdWVyeSwgd2l0aFxuICAgKiBubyBleHRyYSByZXF1ZXN0LiBTZXQgaXQgYW5kIHRoZSBkcm9wZG93biBpcyBmZWQgYnkgeW91ciBvd24gc2VhcmNoXG4gICAqIGVuZHBvaW50IG9uIHRoZSBTREsncyBleGlzdGluZyBmZXRjaCBjYWRlbmNlIGluc3RlYWQ7IHRoZSBzZXJ2ZXIncyBpdGVtc1xuICAgKiBhcmUgdGhlbiBub3QgcmVuZGVyZWQuXG4gICAqXG4gICAqIEJpbmQgYSBzdGFibGUgcmVmZXJlbmNlIChhIGNvbXBvbmVudCBmaWVsZCwgbm90IGFuIGlubGluZSBvYmplY3QgbGl0ZXJhbCk6XG4gICAqIGEgbmV3IG9iamVjdCBvbiBlYWNoIGNoYW5nZS1kZXRlY3Rpb24gcGFzcyByZWFkcyBhcyBhIHN3YXBwZWQgaW50ZWdyYXRpb25cbiAgICogYW5kIGNsZWFycyB0aGUgY3VycmVudCBjYXJkcyDigJQgdGhlIHNhbWUgcnVsZSB0aGF0IGFscmVhZHkgYXBwbGllcyB0b1xuICAgKiBgYXBpQ29uZmlnYCBhbmQgYG9wdGlvbk92ZXJyaWRlc2AuXG4gICAqL1xuICBASW5wdXQoKSBwcm9kdWN0cz86IFByb2R1Y3RzQ29uZmlnO1xuICAvKipcbiAgICogQ3VzdG9tIHN1Ym1pdCBidXR0b24uIFBhc3MgYSBgPG5nLXRlbXBsYXRlPmAgdG8gcmVwbGFjZSB0aGUgZGVmYXVsdCBhcnJvd1xuICAgKiBidXR0b24uIFBhc3MgYG51bGxgIHRvIHJlbmRlciBubyBidXR0b24uIERlZmF1bHQgKGB1bmRlZmluZWRgKSByZW5kZXJzXG4gICAqIHRoZSBidWlsdC1pbiBhcnJvdy5cbiAgICovXG4gIEBJbnB1dCgpIHN1Ym1pdEJ1dHRvbj86IFRlbXBsYXRlUmVmPHVua25vd24+IHwgbnVsbDtcbiAgLyoqXG4gICAqIFdoZW4gdHJ1ZSAoZGVmYXVsdCksIHRoZSBlZGl0b3IgaXMgY2xlYXJlZCBhbmQgYSBuZXcgc2Vzc2lvbiBzdGFydHMgYWZ0ZXJcbiAgICogYHN1Ym1pdHRlZGAgZW1pdHMg4oCUIG9uIEVudGVyIGFuZCBvbiB0aGUgc3VibWl0IGJ1dHRvbi4gU2V0IHRvIGZhbHNlIHRvXG4gICAqIGxlYXZlIHRoZSBxdWVyeSBpbiBwbGFjZTogd2hlbiB0aGUgaGFuZGxlciBuYXZpZ2F0ZXMgYXdheSwgYSBjbGVhcmVkIGZpZWxkXG4gICAqIGZsYXNoZXMgZW1wdHkgdW50aWwgdGhlIG5leHQgcGFnZSBwYWludHMuIENhbGwgYHJlc2V0KClgIHlvdXJzZWxmIHdoZW4geW91XG4gICAqIHdhbnQgYSBmcmVzaCBzZXNzaW9uLlxuICAgKi9cbiAgQElucHV0KCkgcmVzZXRPblN1Ym1pdCA9IHRydWU7XG5cbiAgLy8gPT09IE91dHB1dHMgPT09XG5cbiAgLyoqIENhbGxlZCBvbiBFbnRlciBvciBzdWJtaXQtYnV0dG9uIGNsaWNrLiAqL1xuICBAT3V0cHV0KCkgcmVhZG9ubHkgc3VibWl0dGVkID0gbmV3IEV2ZW50RW1pdHRlcjxBdXRvY29tcGxldGVSZXN1bHQ+KCk7XG4gIC8qKlxuICAgKiBGaXJlcyBhZnRlciBldmVyeSBzdWNjZXNzZnVsIHN1Z2dlc3Rpb24gcm91bmQtdHJpcCB3aXRoIHRoZSBzdHJ1Y3R1cmVkXG4gICAqIHF1ZXJ5IGFzIHRoZSBTREsgbm93IHVuZGVyc3RhbmRzIGl0IOKAlCB0aGUgc2FtZSBgQXV0b2NvbXBsZXRlUmVzdWx0YCBzaGFwZVxuICAgKiBgc3VibWl0dGVkYCBjYXJyaWVzLCBzbyB5b3UgY2FuIG1pcnJvciB0aGUgcXVlcnkgYXMgaXQgaXMgYnVpbHQgKGEgbGl2ZVxuICAgKiBwcmV2aWV3LCBhIGRyYWZ0LCBhbmFseXRpY3MpIHdpdGhvdXQgd2FpdGluZyBmb3Igc3VibWl0LiBGaXJlcyBvbmNlIHBlclxuICAgKiBhcHBsaWVkIHJlc3BvbnNlLCBpbmNsdWRpbmcgdGhlIGluaXRpYWwgcmVxdWVzdCBvbiBpbml0IChhbiBlbXB0eVxuICAgKiByZXN1bHQpOyBuZXZlciBmb3IgYSBmYWlsZWQsIGFib3J0ZWQgb3Igc3VwZXJzZWRlZCByZXF1ZXN0LlxuICAgKi9cbiAgQE91dHB1dCgpIHJlYWRvbmx5IHJlc3VsdENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8QXV0b2NvbXBsZXRlUmVzdWx0PigpO1xuICBAT3V0cHV0KCkgcmVhZG9ubHkgZXJyb3JlZCA9IG5ldyBFdmVudEVtaXR0ZXI8RXJyb3I+KCk7XG4gIEBPdXRwdXQoKSByZWFkb25seSB2YWx1ZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xuICBAT3V0cHV0KCkgcmVhZG9ubHkgY29tcGxldGVkUGFyYW1zQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxDb21wbGV0ZWRQYXJhbVN0YXRlW10+KCk7XG4gIEBPdXRwdXQoKSByZWFkb25seSBmb2N1c2VkID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICBAT3V0cHV0KCkgcmVhZG9ubHkgYmx1cnJlZCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcbiAgLyoqXG4gICAqIEVtaXR0ZWQgd2hlbiB0aGUgdXNlciBhY3RpdmF0ZXMgYSBwcm9kdWN0IGNhcmQuIFRoZSBTREsgZG9lcyBub3RcbiAgICogbmF2aWdhdGUg4oCUIHlvdSBkZWNpZGUgd2hhdCBhIHNlbGVjdGlvbiBtZWFucy4gTW9kaWZpZXIgLyBtaWRkbGUgY2xpY2tzIGFyZVxuICAgKiBsZWZ0IHRvIHRoZSBicm93c2VyIChjbWQtY2xpY2sgc3RpbGwgb3BlbnMgYSB0YWIpIGFuZCBkb24ndCBlbWl0LlxuICAgKi9cbiAgQE91dHB1dCgpIHJlYWRvbmx5IHByb2R1Y3RTZWxlY3QgPSBuZXcgRXZlbnRFbWl0dGVyPFByb2R1Y3Q+KCk7XG5cbiAgLy8gPT09IFZpZXcgcmVmcyA9PT1cblxuICBAVmlld0NoaWxkKFwiY29udGFpbmVyXCIsIHsgc3RhdGljOiB0cnVlIH0pIGNvbnRhaW5lclJlZiE6IEVsZW1lbnRSZWY8SFRNTERpdkVsZW1lbnQ+O1xuICBAVmlld0NoaWxkKFwiZWRpdG9yXCIsIHsgc3RhdGljOiBmYWxzZSB9KSBlZGl0b3JSZWY/OiBFbGVtZW50UmVmPEhUTUxEaXZFbGVtZW50PjtcbiAgQFZpZXdDaGlsZChcInBpbGxDb250YWluZXJcIikgcGlsbENvbnRhaW5lclJlZj86IEVsZW1lbnRSZWY8SFRNTFNwYW5FbGVtZW50PjtcblxuICAvLyA9PT0gUHVibGljIHN0YXRlIGZvciB0aGUgdGVtcGxhdGUgPT09XG5cbiAgY29udHJvbGxlciE6IEFJQXV0b2NvbXBsZXRlQ29udHJvbGxlcjtcbiAgLyoqXG4gICAqIENvbmNyZXRlIGxpZ2h0L2RhcmsgdmFsdWUgYm91bmQgdG8gYFthdHRyLmRhdGEtbW9kZV1gLiBTZWVkZWQgaW4gbmdPbkluaXRcbiAgICogc28gdGhlIGF0dHJpYnV0ZSBpcyBwcmVzZW50IGR1cmluZyBTU1IgKHdoZXJlIE1vZGVDb250cm9sbGVyLCBnYXRlZCBiZWhpbmRcbiAgICogaXNQbGF0Zm9ybUJyb3dzZXIgaW4gbmdBZnRlclZpZXdJbml0LCBuZXZlciBydW5zKS4gT24gdGhlIGJyb3dzZXIgdGhlXG4gICAqIE1vZGVDb250cm9sbGVyJ3MgcmVzb2x2ZSBjYWxsYmFjayBrZWVwcyB0aGlzIGluIHN5bmMg4oCUIHNvIGl0cyBydW50aW1lXG4gICAqIHByZWZlcnMtY29sb3Itc2NoZW1lIHVwZGF0ZXMgYW5kIHRoaXMgYmluZGluZyBhbHdheXMgYWdyZWUgKG5vIGNsb2JiZXIpLlxuICAgKi9cbiAgcmVzb2x2ZWRNb2RlOiBcImxpZ2h0XCIgfCBcImRhcmtcIiA9IFwiZGFya1wiO1xuXG4gIC8vID09PSBJbnRlcm5hbCA9PT1cblxuICBwcml2YXRlIG1vZGVDb250cm9sbGVyPzogTW9kZUNvbnRyb2xsZXI7XG4gIHByaXZhdGUgcmVzaXplT2JzZXJ2ZXI/OiBSZXNpemVPYnNlcnZlcjtcbiAgcHJpdmF0ZSBvbkNoYW5nZUZuOiAodmFsdWU6IHN0cmluZykgPT4gdm9pZCA9IG5vb3A7XG4gIHByaXZhdGUgb25Ub3VjaGVkRm46ICgpID0+IHZvaWQgPSBub29wO1xuICAvLyBIb2xkcyBhIHZhbHVlIHdyaXR0ZW4gYnkgUmVhY3RpdmUgRm9ybXMgYmVmb3JlIG5nT25Jbml0IHJhbi4gUmVhY3RpdmVcbiAgLy8gRm9ybXMgY2FuIGNhbGwgd3JpdGVWYWx1ZSgpIGR1cmluZyBkeW5hbWljIGZvcm0gY29uc3RydWN0aW9uIChlLmcuIHdoZW5cbiAgLy8gYSBGb3JtQ29udHJvbCBhbHJlYWR5IGhvbGRzIGEgdmFsdWUgYXQgdGhlIG1vbWVudCB0aGUgZGlyZWN0aXZlIGlzXG4gIC8vIGNyZWF0ZWQpLiBXZSBzdGFzaCB0aGUgdmFsdWUgaGVyZSBhbmQgZmx1c2ggaXQgaW4gbmdPbkluaXQgKmFmdGVyKlxuICAvLyB0aGUgY29udHJvbGxlciBleGlzdHMg4oCUIG90aGVyd2lzZSB0aGUgZWRpdG9yIHJlbmRlcnMgZW1wdHkgZXZlbiB0aG91Z2hcbiAgLy8gdGhlIGZvcm0gaGFkIGEgdmFsdWUuIGB1bmRlZmluZWRgIG1lYW5zIFwibm8gcGVuZGluZyB3cml0ZVwiLlxuICBwcml2YXRlIHBlbmRpbmdXcml0ZVZhbHVlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgLy8gwqcxNi45OiBwcmVmZXIgYGluamVjdCgpYCBvdmVyIGNvbnN0cnVjdG9yLXBhcmFtZXRlciBESSBmb3IgY29tcG9uZW50cy5cbiAgcHJpdmF0ZSByZWFkb25seSBwbGF0Zm9ybUlkID0gaW5qZWN0KFBMQVRGT1JNX0lEKTtcbiAgcHJpdmF0ZSByZWFkb25seSB6b25lID0gaW5qZWN0KE5nWm9uZSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgY2RyID0gaW5qZWN0KENoYW5nZURldGVjdG9yUmVmKTtcblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAvLyBTZWVkIGJlZm9yZSB0aGUgYnJvd3NlciBndWFyZCBzbyBTU1IgcmVuZGVycyBhIGNvbmNyZXRlIGRhdGEtbW9kZS5cbiAgICB0aGlzLnJlc29sdmVkTW9kZSA9IHJlc29sdmVJbml0aWFsTW9kZSh0aGlzLm1vZGUpO1xuICAgIGlmICghaXNQbGF0Zm9ybUJyb3dzZXIodGhpcy5wbGF0Zm9ybUlkKSkgcmV0dXJuO1xuXG4gICAgdGhpcy5jb250cm9sbGVyID0gbmV3IEFJQXV0b2NvbXBsZXRlQ29udHJvbGxlcih7XG4gICAgICBhcGlDb25maWc6IHRoaXMuYXBpQ29uZmlnLFxuICAgICAgYWRkaXRpb25hbENvbnRleHQ6IHRoaXMuYWRkaXRpb25hbENvbnRleHQsXG4gICAgICBsYW5ndWFnZTogdGhpcy5sYW5ndWFnZSxcbiAgICAgIHZpc2l0b3JJZDogdGhpcy52aXNpdG9ySWQsXG4gICAgICBvcHRpb25PdmVycmlkZXM6IHRoaXMub3B0aW9uT3ZlcnJpZGVzLFxuICAgICAgbWFza0NvbXBsZXRlZFRleHQ6IHRoaXMubWFza0NvbXBsZXRlZFRleHQsXG4gICAgICBjb2x1bW5zOiB0aGlzLmNvbHVtbnMsXG4gICAgICBkcm9wZG93blRyaWdnZXI6IHRoaXMuZHJvcGRvd25UcmlnZ2VyLFxuICAgICAgb3B0aW9uc1Bvc2l0aW9uOiB0aGlzLm9wdGlvbnNQb3NpdGlvbixcbiAgICAgIGNsb3NlRHJvcGRvd25PbkJsdXI6IHRoaXMuY2xvc2VEcm9wZG93bk9uQmx1cixcbiAgICAgIHNob3dOb25UYXBwYWJsZU9wdGlvbnM6IHRoaXMuc2hvd05vblRhcHBhYmxlT3B0aW9ucyxcbiAgICAgIHNob3dQcm9kdWN0czogdGhpcy5zaG93UHJvZHVjdHMsXG4gICAgICBzb3VyY2U6IFwiZnVsbC1zZGtcIixcbiAgICAgIHByb2R1Y3RzOiB0aGlzLnByb2R1Y3RzLFxuICAgICAgdmFsdWU6IHRoaXMudmFsdWUsXG4gICAgICBjb21wbGV0ZWRQYXJhbXM6IHRoaXMuY29tcGxldGVkUGFyYW1zLFxuICAgICAgb25TdWJtaXQ6IChyZXN1bHQpID0+IHRoaXMuaGFuZGxlU3VibWl0KHJlc3VsdCksXG4gICAgICBvblJlc3VsdDogKHJlc3VsdCkgPT4gdGhpcy5yZXN1bHRDaGFuZ2UuZW1pdChyZXN1bHQpLFxuICAgICAgb25FcnJvcjogKGVycm9yKSA9PiB0aGlzLmVycm9yZWQuZW1pdChlcnJvciksXG4gICAgICBvbkNoYW5nZTogKHRleHQpID0+IHtcbiAgICAgICAgdGhpcy52YWx1ZUNoYW5nZS5lbWl0KHRleHQpO1xuICAgICAgICB0aGlzLm9uQ2hhbmdlRm4odGV4dCk7XG4gICAgICB9LFxuICAgICAgb25QYXJhbXNDaGFuZ2U6IChwYXJhbXMpID0+IHRoaXMuY29tcGxldGVkUGFyYW1zQ2hhbmdlLmVtaXQocGFyYW1zKSxcbiAgICAgIG9uRm9jdXM6ICgpID0+IHRoaXMuZm9jdXNlZC5lbWl0KCksXG4gICAgICBvblByb2R1Y3RTZWxlY3Q6IChwcm9kdWN0KSA9PiB0aGlzLnByb2R1Y3RTZWxlY3QuZW1pdChwcm9kdWN0KSxcbiAgICAgIG9uQmx1cjogKCkgPT4ge1xuICAgICAgICB0aGlzLmJsdXJyZWQuZW1pdCgpO1xuICAgICAgICB0aGlzLm9uVG91Y2hlZEZuKCk7XG4gICAgICB9LFxuICAgICAgc2V0Q3Vyc29yOiAob2Zmc2V0KSA9PiB7XG4gICAgICAgIGNvbnN0IGVkaXRvciA9IHRoaXMuZWRpdG9yUmVmPy5uYXRpdmVFbGVtZW50O1xuICAgICAgICBpZiAoIWVkaXRvcikgcmV0dXJuO1xuICAgICAgICBlZGl0b3IuZm9jdXMoKTtcbiAgICAgICAgc2V0Q3Vyc29yT2Zmc2V0KGVkaXRvciwgb2Zmc2V0KTtcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICBpZiAodGhpcy5wZW5kaW5nV3JpdGVWYWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLmNvbnRyb2xsZXIuc2V0VmFsdWUodGhpcy5wZW5kaW5nV3JpdGVWYWx1ZSk7XG4gICAgICB0aGlzLnBlbmRpbmdXcml0ZVZhbHVlID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICBpZiAoIWlzUGxhdGZvcm1Ccm93c2VyKHRoaXMucGxhdGZvcm1JZCkpIHJldHVybjtcbiAgICAvLyBNb2RlQ29udHJvbGxlciB3cml0ZXMgYGRhdGEtbW9kZWAgdG8gdGhlIGVsZW1lbnQgaXQncyBnaXZlbi4gVGhlIENTU1xuICAgIC8vIHNlbGVjdG9ycyBhcmUgc2NvcGVkIHRvIGAubWFnaWN4LWFpYVtkYXRhLW1vZGU9XCIuLi5cIl1gIOKAlCB3aGljaCBsaXZlcyBvblxuICAgIC8vIHRoZSBpbm5lciBgPGRpdiBjbGFzcz1cIm1hZ2ljeC1haWEgbWFnaWN4LWFpYS1jb250YWluZXJcIiAjY29udGFpbmVyPmAsXG4gICAgLy8gTk9UIHRoZSBob3N0IGA8YWktYXV0b2NvbXBsZXRlPmAgZWxlbWVudC4gVGhlIHJlc29sdmUgY2FsbGJhY2sgbWlycm9yc1xuICAgIC8vIHRoZSB2YWx1ZSBpbnRvIGByZXNvbHZlZE1vZGVgIHNvIHRoZSBgW2F0dHIuZGF0YS1tb2RlXWAgYmluZGluZyBzdGF5cyBpblxuICAgIC8vIGxvY2tzdGVwIHdpdGggTW9kZUNvbnRyb2xsZXIg4oCUIHRoZSBiaW5kaW5nIGhhbmRsZXMgU1NSLCBNb2RlQ29udHJvbGxlclxuICAgIC8vIGhhbmRsZXMgcnVudGltZSBwcmVmZXJzLWNvbG9yLXNjaGVtZSBzd2l0Y2hlcywgYW5kIGJlY2F1c2UgdGhleSBhbHdheXNcbiAgICAvLyBhZ3JlZSBuZWl0aGVyIGNsb2JiZXJzIHRoZSBvdGhlci5cbiAgICB0aGlzLm1vZGVDb250cm9sbGVyID0gbmV3IE1vZGVDb250cm9sbGVyKFxuICAgICAgdGhpcy5jb250YWluZXJSZWYubmF0aXZlRWxlbWVudCxcbiAgICAgIHRoaXMubW9kZSxcbiAgICAgIChyZXNvbHZlZCkgPT4ge1xuICAgICAgICB0aGlzLnJlc29sdmVkTW9kZSA9IHJlc29sdmVkO1xuICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgIH0sXG4gICAgKTtcblxuICAgIC8vIFBpbGwtd3JhcCBkZXRlY3Rpb24g4oCUIHdoZW4gdGhlIHBpbGwgbGlzdCB3cmFwcyBiZWxvdyB0aGUgZWRpdG9yJ3MgbGFzdFxuICAgIC8vIGxpbmUsIGRyb3AgaXRzIDhweCBsZWZ0IG1hcmdpbiB2aWEgYSBkYXRhIGF0dHJpYnV0ZSB0aGUgQ1NTIGtleXMgb2ZmLlxuICAgIC8vIE1pcnJvcnMgdGhlIFJlYWN0IGNvbXBvbmVudCdzIHVzZUxheW91dEVmZmVjdC5cbiAgICBpZiAodHlwZW9mIFJlc2l6ZU9ic2VydmVyICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICB0aGlzLnpvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgICB0aGlzLnJlc2l6ZU9ic2VydmVyID0gbmV3IFJlc2l6ZU9ic2VydmVyKCgpID0+IHRoaXMubWVhc3VyZVBpbGxXcmFwKCkpO1xuICAgICAgICBjb25zdCBlZGl0b3IgPSB0aGlzLmVkaXRvclJlZj8ubmF0aXZlRWxlbWVudDtcbiAgICAgICAgaWYgKGVkaXRvcikgdGhpcy5yZXNpemVPYnNlcnZlci5vYnNlcnZlKGVkaXRvcik7XG4gICAgICB9KTtcbiAgICAgIHRoaXMubWVhc3VyZVBpbGxXcmFwKCk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGlmICghdGhpcy5jb250cm9sbGVyKSByZXR1cm47XG4gICAgLy8gYFNpbXBsZUNoYW5nZXNgIGlzIGB7IFtrZXk6IHN0cmluZ106IFNpbXBsZUNoYW5nZSB9YCwgc28gcGVyXG4gICAgLy8gYG5vUHJvcGVydHlBY2Nlc3NGcm9tSW5kZXhTaWduYXR1cmVgIGVhY2gga2V5IGxvb2t1cCB1c2VzIGJyYWNrZXRcbiAgICAvLyBub3RhdGlvbiDigJQgdGhpcyBrZWVwcyB0aGUgc3RyaWN0bmVzcyBjb250cmFjdCB0aGF0IHRoZSByZXN0IG9mIHRoZVxuICAgIC8vIHdvcmtzcGFjZSBlbmZvcmNlcy5cbiAgICAvLyBDb250cm9sbGVkLW1vZGUgcHJvcGFnYXRpb25cbiAgICBpZiAoY2hhbmdlc1tcInZhbHVlXCJdICYmIHRoaXMudmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5jb250cm9sbGVyLnNldFZhbHVlKHRoaXMudmFsdWUpO1xuICAgIH1cbiAgICBpZiAoY2hhbmdlc1tcImNvbXBsZXRlZFBhcmFtc1wiXSAmJiB0aGlzLmNvbXBsZXRlZFBhcmFtcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLmNvbnRyb2xsZXIuc2V0Q29tcGxldGVkUGFyYW1zKHRoaXMuY29tcGxldGVkUGFyYW1zKTtcbiAgICB9XG4gICAgLy8gUmVhY3RpdmUgb3B0aW9uc1xuICAgIGlmIChcbiAgICAgIGNoYW5nZXNbXCJhcGlDb25maWdcIl0gfHxcbiAgICAgIGNoYW5nZXNbXCJhZGRpdGlvbmFsQ29udGV4dFwiXSB8fFxuICAgICAgY2hhbmdlc1tcImxhbmd1YWdlXCJdIHx8XG4gICAgICBjaGFuZ2VzW1widmlzaXRvcklkXCJdIHx8XG4gICAgICBjaGFuZ2VzW1wib3B0aW9uT3ZlcnJpZGVzXCJdIHx8XG4gICAgICBjaGFuZ2VzW1wiZHJvcGRvd25UcmlnZ2VyXCJdIHx8XG4gICAgICBjaGFuZ2VzW1wib3B0aW9uc1Bvc2l0aW9uXCJdIHx8XG4gICAgICBjaGFuZ2VzW1wiY2xvc2VEcm9wZG93bk9uQmx1clwiXSB8fFxuICAgICAgY2hhbmdlc1tcInNob3dOb25UYXBwYWJsZU9wdGlvbnNcIl0gfHxcbiAgICAgIGNoYW5nZXNbXCJzaG93UHJvZHVjdHNcIl0gfHxcbiAgICAgIGNoYW5nZXNbXCJwcm9kdWN0c1wiXVxuICAgICkge1xuICAgICAgdGhpcy5jb250cm9sbGVyLnVwZGF0ZSh7XG4gICAgICAgIGFwaUNvbmZpZzogdGhpcy5hcGlDb25maWcsXG4gICAgICAgIGFkZGl0aW9uYWxDb250ZXh0OiB0aGlzLmFkZGl0aW9uYWxDb250ZXh0LFxuICAgICAgICBsYW5ndWFnZTogdGhpcy5sYW5ndWFnZSxcbiAgICAgICAgdmlzaXRvcklkOiB0aGlzLnZpc2l0b3JJZCxcbiAgICAgICAgb3B0aW9uT3ZlcnJpZGVzOiB0aGlzLm9wdGlvbk92ZXJyaWRlcyxcbiAgICAgICAgZHJvcGRvd25UcmlnZ2VyOiB0aGlzLmRyb3Bkb3duVHJpZ2dlcixcbiAgICAgICAgb3B0aW9uc1Bvc2l0aW9uOiB0aGlzLm9wdGlvbnNQb3NpdGlvbixcbiAgICAgICAgY2xvc2VEcm9wZG93bk9uQmx1cjogdGhpcy5jbG9zZURyb3Bkb3duT25CbHVyLFxuICAgICAgICBzaG93Tm9uVGFwcGFibGVPcHRpb25zOiB0aGlzLnNob3dOb25UYXBwYWJsZU9wdGlvbnMsXG4gICAgICAgIHNob3dQcm9kdWN0czogdGhpcy5zaG93UHJvZHVjdHMsXG4gICAgICAgIC8vIFNhbWUgcmVmZXJlbmNlIG9uIGFuIHVucmVsYXRlZCBjaGFuZ2UgaXMgYSBuby1vcCBpbiB0aGUgY29yZTsgb25seSBhXG4gICAgICAgIC8vIGdlbnVpbmVseSBzd2FwcGVkIChvciByZW1vdmVkKSBpbnRlZ3JhdGlvbiBjbGVhcnMgdGhlIHN0cmlwLlxuICAgICAgICBwcm9kdWN0czogdGhpcy5wcm9kdWN0cyxcbiAgICAgIH0pO1xuICAgIH1cbiAgICBpZiAoY2hhbmdlc1tcIm1vZGVcIl0pIHtcbiAgICAgIC8vIEtlZXAgdGhlIGJpbmRpbmcgY29ycmVjdCBldmVuIHdoZW4gTW9kZUNvbnRyb2xsZXIgZG9lc24ndCBleGlzdCB5ZXRcbiAgICAgIC8vIChTU1IgLyBwcmUtbmdBZnRlclZpZXdJbml0KS4gT24gdGhlIGJyb3dzZXIsIHNldE1vZGUgdHJpZ2dlcnMgdGhlXG4gICAgICAvLyByZXNvbHZlIGNhbGxiYWNrIHdoaWNoIHNldHMgdGhlIHNhbWUgdmFsdWUuXG4gICAgICB0aGlzLnJlc29sdmVkTW9kZSA9IHJlc29sdmVJbml0aWFsTW9kZSh0aGlzLm1vZGUpO1xuICAgICAgdGhpcy5tb2RlQ29udHJvbGxlcj8uc2V0TW9kZSh0aGlzLm1vZGUpO1xuICAgIH1cbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMucmVzaXplT2JzZXJ2ZXI/LmRpc2Nvbm5lY3QoKTtcbiAgICB0aGlzLm1vZGVDb250cm9sbGVyPy5kZXN0cm95KCk7XG4gICAgdGhpcy5jb250cm9sbGVyPy5kZXN0cm95KCk7XG4gIH1cblxuICAvLyA9PT0gSW1wZXJhdGl2ZSBBUEkgKGV4cG9zZWQgb24gdGhlIGNvbXBvbmVudCBpbnN0YW5jZSB2aWEgQFZpZXdDaGlsZCkgPT09XG5cbiAgLyoqIFByb2dyYW1tYXRpY2FsbHkgZm9jdXMgdGhlIGVkaXRvci4gKi9cbiAgZm9jdXMoKTogdm9pZCB7XG4gICAgdGhpcy5lZGl0b3JSZWY/Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgfVxuXG4gIC8qKiBQcm9ncmFtbWF0aWNhbGx5IGJsdXIgdGhlIGVkaXRvci4gKi9cbiAgYmx1cigpOiB2b2lkIHtcbiAgICB0aGlzLmVkaXRvclJlZj8ubmF0aXZlRWxlbWVudC5ibHVyKCk7XG4gIH1cblxuICAvKiogQ2xlYXIgYWxsIHN0YXRlLCByb3RhdGUgc2Vzc2lvbiwgYW5kIHJlLWZldGNoLiAqL1xuICByZXNldCgpOiB2b2lkIHtcbiAgICB0aGlzLmNvbnRyb2xsZXI/LnJlc2V0KCk7XG4gIH1cblxuICAvKipcbiAgICogU2tpcCB0aGUgYWN0aXZlIHBpbGwg4oCUIHNhbWUgYWN0aW9uIGFzIHRoZSBkcm9wZG93bidzIHNraXAgYnV0dG9uIC8g4oaSLlxuICAgKiBMZXRzIGEgY29uc3VtZXIgd2hvIGhpZGVzIHRoZSBidWlsdC1pbiBidXR0b24gKGBzaG93U2tpcEJ1dHRvbj1mYWxzZWApXG4gICAqIGRyaXZlIHNraXBwaW5nIGZyb20gdGhlaXIgb3duIFVJLlxuICAgKi9cbiAgc2tpcEFjdGl2ZVBpbGwoKTogdm9pZCB7XG4gICAgdGhpcy5jb250cm9sbGVyPy5za2lwQWN0aXZlUGlsbCgpO1xuICB9XG5cbiAgLyoqIFN3aXRjaCBjb2xvciBtb2RlIGF0IHJ1bnRpbWUuICovXG4gIHNldE1vZGUobW9kZTogQXBwZWFyYW5jZU1vZGUpOiB2b2lkIHtcbiAgICB0aGlzLm1vZGUgPSBtb2RlO1xuICAgIHRoaXMucmVzb2x2ZWRNb2RlID0gcmVzb2x2ZUluaXRpYWxNb2RlKG1vZGUpO1xuICAgIHRoaXMubW9kZUNvbnRyb2xsZXI/LnNldE1vZGUobW9kZSk7XG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICAvLyA9PT0gVGVtcGxhdGUgaGVscGVycyA9PT1cblxuICAvKipcbiAgICogJ2RlZmF1bHQnIOKGkiByZW5kZXIgdGhlIGJ1aWx0LWluIGFycm93IGJ1dHRvbi5cbiAgICogJ2N1c3RvbScgIOKGkiBwcm9qZWN0IHRoZSBjb25zdW1lci1zdXBwbGllZCBUZW1wbGF0ZVJlZi5cbiAgICogJ2hpZGRlbicgIOKGkiBubyBidXR0b24uXG4gICAqL1xuICBnZXQgc3VibWl0QnV0dG9uU3RhdGUoKTogXCJkZWZhdWx0XCIgfCBcImN1c3RvbVwiIHwgXCJoaWRkZW5cIiB7XG4gICAgaWYgKHRoaXMuc3VibWl0QnV0dG9uID09PSBudWxsKSByZXR1cm4gXCJoaWRkZW5cIjtcbiAgICBpZiAodGhpcy5zdWJtaXRCdXR0b24gPT09IHVuZGVmaW5lZCkgcmV0dXJuIFwiZGVmYXVsdFwiO1xuICAgIHJldHVybiBcImN1c3RvbVwiO1xuICB9XG5cbiAgLyoqIE5hcnJvd2VkIGFjY2Vzc29yIGZvciAqbmdUZW1wbGF0ZU91dGxldCDigJQgbmV2ZXIgdW5kZWZpbmVkLiAqL1xuICBnZXQgY3VzdG9tU3VibWl0VGVtcGxhdGUoKTogVGVtcGxhdGVSZWY8dW5rbm93bj4gfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5zdWJtaXRCdXR0b24gPz8gbnVsbDtcbiAgfVxuXG4gIGdldCBzaG93SW5saW5lUGlsbHMoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMucGlsbFBsYWNlbWVudCA9PT0gXCJpbmxpbmVcIjtcbiAgfVxuXG4gIGdldCBzaG93RHJvcGRvd25QaWxscygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5waWxsUGxhY2VtZW50ID09PSBcImRyb3Bkb3duXCI7XG4gIH1cblxuICAvKipcbiAgICogYHRydWVgIHdoZW4gdGhlcmUncyBzb21ldGhpbmcgdG8gc3VibWl0IOKAlCBkcml2ZW4gYnkgY3VycmVudCBzZWdtZW50c1xuICAgKiBhbmQgY29tcGxldGVkIHBhcmFtcy4gUmVhZCBvZmYgdGhlIGxpdmUgZWRpdG9yIHZpYSB0aGUgY29udHJvbGxlciBzdGF0ZS5cbiAgICovXG4gIGNhblN1Ym1pdChzdGF0ZTogeyBzZWdtZW50czogeyBsZW5ndGg6IG51bWJlciB9OyBjb21wbGV0ZWRQYXJhbXM6IHsgbGVuZ3RoOiBudW1iZXIgfSB9KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHN0YXRlLnNlZ21lbnRzLmxlbmd0aCA+IDAgfHwgc3RhdGUuY29tcGxldGVkUGFyYW1zLmxlbmd0aCA+IDA7XG4gIH1cblxuICBvbldyYXBwZXJDbGljayhldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xuICAgIC8vIENsaWNraW5nIGEgcGlsbCBzaG91bGQgYWN0aXZhdGUgaXQgd2l0aG91dCBzdGVhbGluZyBmb2N1cyBlbHNld2hlcmUuXG4gICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50IHwgbnVsbDtcbiAgICBpZiAodGFyZ2V0Py5jbG9zZXN0KFwiW2RhdGEtYWlhLXBpbGxdXCIpKSByZXR1cm47XG4gICAgdGhpcy5mb2N1cygpO1xuICB9XG5cbiAgb25TdWJtaXRCdXR0b25DbGljayhldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIHRoaXMuaGFuZGxlU3VibWl0RnJvbVVzZXJBY3Rpb24oKTtcbiAgfVxuXG4gIG9uU3VibWl0U2xvdENsaWNrKGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgdGhpcy5oYW5kbGVTdWJtaXRGcm9tVXNlckFjdGlvbigpO1xuICB9XG5cbiAgb25TZWxlY3RQaWxsKGluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLmNvbnRyb2xsZXIuc2V0QWN0aXZlUGlsbChpbmRleCk7XG4gIH1cblxuICAvLyA9PT0gQ29udHJvbFZhbHVlQWNjZXNzb3IgPT09XG5cbiAgd3JpdGVWYWx1ZSh2YWx1ZTogc3RyaW5nIHwgbnVsbCk6IHZvaWQge1xuICAgIGNvbnN0IG5leHQgPSB2YWx1ZSA/PyBcIlwiO1xuICAgIGlmICghdGhpcy5jb250cm9sbGVyKSB7XG4gICAgICAvLyBSZWFjdGl2ZSBGb3JtcyBjYW4gY2FsbCB3cml0ZVZhbHVlKCkgYmVmb3JlIG5nT25Jbml0IGNyZWF0ZXMgdGhlXG4gICAgICAvLyBjb250cm9sbGVyIChkeW5hbWljIGZvcm0gY29uc3RydWN0aW9uLCBvciBhIEZvcm1Db250cm9sIHRoYXQgYWxyZWFkeVxuICAgICAgLy8gaGFkIGEgdmFsdWUgYXQgZGlyZWN0aXZlLWNyZWF0aW9uIHRpbWUpLiBCdWZmZXIgdGhlIHZhbHVlOyBuZ09uSW5pdFxuICAgICAgLy8gZmx1c2hlcyBpdCBhcyBzb29uIGFzIHRoZSBjb250cm9sbGVyIGV4aXN0cy5cbiAgICAgIHRoaXMucGVuZGluZ1dyaXRlVmFsdWUgPSBuZXh0O1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmNvbnRyb2xsZXIuc2V0VmFsdWUobmV4dCk7XG4gIH1cblxuICByZWdpc3Rlck9uQ2hhbmdlKGZuOiAodmFsdWU6IHN0cmluZykgPT4gdm9pZCk6IHZvaWQge1xuICAgIHRoaXMub25DaGFuZ2VGbiA9IGZuO1xuICB9XG5cbiAgcmVnaXN0ZXJPblRvdWNoZWQoZm46ICgpID0+IHZvaWQpOiB2b2lkIHtcbiAgICB0aGlzLm9uVG91Y2hlZEZuID0gZm47XG4gIH1cblxuICBzZXREaXNhYmxlZFN0YXRlKF9kaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xuICAgIC8vIFRoZSBjb250ZW50RWRpdGFibGUgaG9zdCBkb2Vzbid0IGhhdmUgYSBuYXRpdmUgZGlzYWJsZWQgYXR0cmlidXRlLiBGb3JcbiAgICAvLyB2MC4xIHdlIGFjY2VwdCB0aGUgY2FsbCBzbyBBbmd1bGFyJ3MgZm9ybXMgbGF5ZXIgZG9lc24ndCB0aHJvdywgYnV0XG4gICAgLy8gdGhlIGVkaXRvciBzdGF5cyBpbnRlcmFjdGl2ZS4gQSBmdXR1cmUgZW5oYW5jZW1lbnQgY2FuIHRvZ2dsZVxuICAgIC8vIGNvbnRlbnRFZGl0YWJsZSArIEFSSUEgZGlzYWJsZWQgaGVyZS5cbiAgfVxuXG4gIC8vID09PSBTdWJtaXQgZmxvdyA9PT1cblxuICAvKipcbiAgICogQ2FsbGVkIGJ5IHRoZSBjb250cm9sbGVyJ3Mgb25TdWJtaXQgY2FsbGJhY2sgKHdoaWNoIGZpcmVzIGZyb20gdGhlXG4gICAqIGtleWJvYXJkIGNvbnRyb2xsZXIgb24gRW50ZXIpLiBSZWFkcyB0aGUgbGl2ZSBlZGl0b3IgdGV4dCDigJQgc2FtZSB0cmlja1xuICAgKiB0aGUgUmVhY3QgY29tcG9uZW50IHVzZXMg4oCUIHNvIHRoZSBlbWl0dGVkIHF1ZXJ5IHJlZmxlY3RzIHdoYXRldmVyJ3MgaW5cbiAgICogdGhlIERPTSByaWdodCBub3csIG5vdCBhIHBvc3NpYmx5LXN0YWxlIHN0YXRlIHNuYXBzaG90LlxuICAgKi9cbiAgLy8gYGZyb21CdXR0b25gOiB0aGUgU0RLIHJlY29yZHMgYW4gRW50ZXIgc3VibWl0IGl0c2VsZiBiZWZvcmUgaXQgY2FsbHMgYmFja1xuICAvLyBoZXJlOyBhIGNsaWNrIG9uIG91ciBvd24gYnV0dG9uIG5ldmVyIHBhc3NlcyB0aHJvdWdoIGl0LlxuICBwcml2YXRlIGhhbmRsZVN1Ym1pdChfcmVzdWx0OiBBdXRvY29tcGxldGVSZXN1bHQsIGZyb21CdXR0b24gPSBmYWxzZSk6IHZvaWQge1xuICAgIGNvbnN0IGVkaXRvciA9IHRoaXMuZWRpdG9yUmVmPy5uYXRpdmVFbGVtZW50O1xuICAgIGlmICghZWRpdG9yKSByZXR1cm47XG4gICAgY29uc3QgdGV4dCA9IGV4dHJhY3RQbGFpblRleHQoZWRpdG9yKTtcbiAgICBjb25zdCBzdGF0ZSA9IHRoaXMuY29udHJvbGxlci5nZXRTdGF0ZSgpO1xuICAgIGNvbnN0IHBhcmFtcyA9IHRoaXMuY29tcGxldGVkUGFyYW1zID8/IHN0YXRlLmNvbXBsZXRlZFBhcmFtcztcbiAgICBjb25zdCByZXN1bHQgPSBidWlsZFN1Ym1pdFJlc3VsdCh0ZXh0LCBwYXJhbXMsIHN0YXRlLnNraXBwZWRQYXJhbXMsIHtcbiAgICAgIGlkZW50aWZpZWRQYXJhbXM6IHN0YXRlLmlkZW50aWZpZWRQYXJhbXMsXG4gICAgICBpc1JlYWR5OiBzdGF0ZS5pc1JlYWR5LFxuICAgICAgY3VzdG9tRmllbGRzOiBzdGF0ZS5jdXN0b21GaWVsZHMsXG4gICAgfSk7XG4gICAgaWYgKGZyb21CdXR0b24pIHRoaXMuY29udHJvbGxlci5yZWNvcmRTdWJtaXQocmVzdWx0KTtcbiAgICB0aGlzLnN1Ym1pdHRlZC5lbWl0KHJlc3VsdCk7XG4gICAgaWYgKHRoaXMucmVzZXRPblN1Ym1pdCkgdGhpcy5jb250cm9sbGVyLnJlc2V0KCk7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZVN1Ym1pdEZyb21Vc2VyQWN0aW9uKCk6IHZvaWQge1xuICAgIGNvbnN0IHN0YXRlID0gdGhpcy5jb250cm9sbGVyLmdldFN0YXRlKCk7XG4gICAgaWYgKCF0aGlzLmNhblN1Ym1pdChzdGF0ZSkpIHJldHVybjtcbiAgICAvLyBTeW50aGVzaXplIHRoZSByZXN1bHQgZm9yIHRoZSBzdWJtaXQtYnV0dG9uIGNsaWNrIHBhdGg7IHNhbWUgc2hhcGVcbiAgICAvLyB0aGUgY29udHJvbGxlciB3b3VsZCBkZWxpdmVyIGZyb20gYSBrZXlib2FyZCBFbnRlciwgc28gaGFuZGxlU3VibWl0XG4gICAgLy8gY2FuIHRha2UgZWl0aGVyIGVudHJ5IHBvaW50LlxuICAgIHRoaXMuaGFuZGxlU3VibWl0KFxuICAgICAge1xuICAgICAgICBxdWVyeTogc3RhdGUudGV4dC50cmltKCksXG4gICAgICAgIHJhd19xdWVyeTogXCJcIixcbiAgICAgICAgY29tcGxldGVkX3BhcmFtczogW10sXG4gICAgICAgIGlkZW50aWZpZWRfcGFyYW1zOiBbXSxcbiAgICAgICAgaXNfcmVhZHk6IHN0YXRlLmlzUmVhZHksXG4gICAgICB9LFxuICAgICAgdHJ1ZSxcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBtZWFzdXJlUGlsbFdyYXAoKTogdm9pZCB7XG4gICAgY29uc3QgY29udGFpbmVyID0gdGhpcy5waWxsQ29udGFpbmVyUmVmPy5uYXRpdmVFbGVtZW50O1xuICAgIGNvbnN0IGVkaXRvciA9IHRoaXMuZWRpdG9yUmVmPy5uYXRpdmVFbGVtZW50O1xuICAgIGlmICghY29udGFpbmVyIHx8ICFlZGl0b3IpIHJldHVybjtcbiAgICBjb25zdCBpbm5lciA9IGNvbnRhaW5lci5maXJzdEVsZW1lbnRDaGlsZCBhcyBIVE1MRWxlbWVudCB8IG51bGw7XG4gICAgaWYgKCFpbm5lcikgcmV0dXJuO1xuICAgIC8vIFdyYXAgZGV0ZWN0aW9uOiB0aGUgcGlsbCByb3cncyB0b3AgdnMgdGhlIGVkaXRvcidzIGJvdHRvbS4gV2hlbiB0aGVcbiAgICAvLyBwaWxscyBzaXQgb24gKG9yIGFib3ZlKSB0aGUgZWRpdG9yJ3MgbGFzdCBsaW5lIHRoZXkncmUgTk9UIHdyYXBwZWQg4oCUXG4gICAgLy8ga2VlcCB0aGUgOHB4IG1hcmdpbiBzbyB0aGV5IGRvbid0IGJ1dHQgYWdhaW5zdCB0eXBlZCB0ZXh0IG9yIHRoZVxuICAgIC8vIHBsYWNlaG9sZGVyLiBUaGlzIGhhbmRsZXMgdGhlIGVtcHR5LWVkaXRvciArIHBsYWNlaG9sZGVyIGNhc2VcbiAgICAvLyBuYXR1cmFsbHk6IHRoZSBwbGFjZWhvbGRlciBzdGlsbCBvY2N1cGllcyB0aGUgZWRpdG9yJ3MgbGluZSBib3guXG4gICAgY29uc3QgY1JlY3QgPSBpbm5lci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICBjb25zdCBlUmVjdCA9IGVkaXRvci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICBjb25zdCB3cmFwcGVkID0gY1JlY3QudG9wID49IGVSZWN0LmJvdHRvbSAtIDI7XG4gICAgdGhpcy56b25lLnJ1bigoKSA9PiB7XG4gICAgICBpZiAod3JhcHBlZCkgY29udGFpbmVyLnNldEF0dHJpYnV0ZShcImRhdGEtYWlhLXBpbGwtd3JhcHBlZFwiLCBcIlwiKTtcbiAgICAgIGVsc2UgY29udGFpbmVyLnJlbW92ZUF0dHJpYnV0ZShcImRhdGEtYWlhLXBpbGwtd3JhcHBlZFwiKTtcbiAgICB9KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBub29wKCk6IHZvaWQge1xuICAvLyBEZWZhdWx0IG5vLW9wIGZvciBDVkEgY2FsbGJhY2tzLlxufVxuXG4vKipcbiAqIFJlc29sdmUgYSBjb25jcmV0ZSBsaWdodC9kYXJrIHZhbHVlIGZyb20gdGhlIGNvbmZpZ3VyZWQgbW9kZS4gVXNlZCB0byBzZWVkXG4gKiB0aGUgYGRhdGEtbW9kZWAgYXR0cmlidXRlIHN5bmNocm9ub3VzbHkgKGluY2x1ZGluZyBkdXJpbmcgU1NSLCB3aGVyZVxuICogTW9kZUNvbnRyb2xsZXIgbmV2ZXIgcnVucykuIE9uIHRoZSBzZXJ2ZXIgYHdpbmRvd2AgaXMgdW5kZWZpbmVkIOKGkiBkZWZhdWx0c1xuICogdG8gXCJkYXJrXCIgKG1hdGNoZXMgdGhlIHZhbmlsbGEvUmVhY3QgYmVoYXZpb3IpLlxuICovXG5mdW5jdGlvbiByZXNvbHZlSW5pdGlhbE1vZGUobW9kZTogQXBwZWFyYW5jZU1vZGUpOiBcImxpZ2h0XCIgfCBcImRhcmtcIiB7XG4gIGlmIChtb2RlICE9PSBcImF1dG9cIikgcmV0dXJuIG1vZGU7XG4gIGlmICh0eXBlb2Ygd2luZG93ID09PSBcInVuZGVmaW5lZFwiKSByZXR1cm4gXCJkYXJrXCI7XG4gIHJldHVybiB3aW5kb3cubWF0Y2hNZWRpYShcIihwcmVmZXJzLWNvbG9yLXNjaGVtZTogZGFyaylcIikubWF0Y2hlcyA/IFwiZGFya1wiIDogXCJsaWdodFwiO1xufVxuIiwiPGRpdlxuICAjY29udGFpbmVyXG4gIGNsYXNzPVwibWFnaWN4LWFpYSBtYWdpY3gtYWlhLWNvbnRhaW5lclwiXG4gIFthdHRyLmRhdGEtcGlsbC1wbGFjZW1lbnRdPVwicGlsbFBsYWNlbWVudFwiXG4gIFthdHRyLmRhdGEtb3B0aW9ucy1wb3NpdGlvbl09XCJvcHRpb25zUG9zaXRpb25cIlxuICBbYXR0ci5kYXRhLWFuaW1hdGlvbnNdPVwiYW5pbWF0aW9ucyA/ICdvbicgOiAnb2ZmJ1wiXG4gIFthdHRyLmRhdGEtbW9kZV09XCJyZXNvbHZlZE1vZGVcIlxuPlxuICA8YWktYXV0b2NvbXBsZXRlLWRyb3Bkb3duXG4gICAgKm5nSWY9XCJjb250cm9sbGVyXCJcbiAgICBbY29udHJvbGxlcl09XCJjb250cm9sbGVyXCJcbiAgICBbc2hvd1BpbGxzXT1cInNob3dEcm9wZG93blBpbGxzXCJcbiAgICBbc2hvd1NraXBCdXR0b25dPVwic2hvd1NraXBCdXR0b25cIlxuICAgIFtzaG93T3B0aW9uSWNvbnNdPVwic2hvd09wdGlvbkljb25zXCJcbiAgICBbc2hvd09wdGlvbkltYWdlc109XCJzaG93T3B0aW9uSW1hZ2VzXCJcbiAgICBbc2hvd09wdGlvbkNvdW50c109XCJzaG93T3B0aW9uQ291bnRzXCJcbiAgICBbcHJvZHVjdHNMYXlvdXRdPVwicHJvZHVjdHNMYXlvdXRcIlxuICAgIFtwcm9kdWN0SW1hZ2VGYWxsYmFja109XCJwcm9kdWN0SW1hZ2VGYWxsYmFja1wiXG4gID48L2FpLWF1dG9jb21wbGV0ZS1kcm9wZG93bj5cblxuICA8ZGl2XG4gICAgY2xhc3M9XCJtYWdpY3gtYWlhLWlucHV0LXdyYXBwZXJcIlxuICAgIGRhdGEtYWlhLWlucHV0LXdyYXBwZXI9XCJcIlxuICAgIChjbGljayk9XCJvbldyYXBwZXJDbGljaygkZXZlbnQpXCJcbiAgICAoa2V5dXApPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgPlxuICAgIDxkaXYgY2xhc3M9XCJtYWdpY3gtYWlhLWVkaXRvci1hcmVhXCIgZGF0YS1haWEtZWRpdG9yPVwiXCI+XG4gICAgICA8ZGl2XG4gICAgICAgICNlZGl0b3JcbiAgICAgICAgKm5nSWY9XCJjb250cm9sbGVyXCJcbiAgICAgICAgW2FpYUVkaXRvckhvc3RdPVwiY29udHJvbGxlclwiXG4gICAgICAgIFthdXRvRm9jdXNdPVwiYXV0b0ZvY3VzXCJcbiAgICAgICAgW3Nob3dDaGlwSWNvbnNdPVwic2hvd0NoaXBJY29uc1wiXG4gICAgICAgIFtzaG93Q2hpcEltYWdlc109XCJzaG93Q2hpcEltYWdlc1wiXG4gICAgICAgIGNsYXNzPVwibWFnaWN4LWFpYS1pbnB1dFwiXG4gICAgICAgIGRhdGEtYWlhLWlucHV0PVwiXCJcbiAgICAgID48L2Rpdj5cblxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbnRyb2xsZXIgJiYgc2hvd0lubGluZVBpbGxzXCI+XG4gICAgICAgIDxzcGFuXG4gICAgICAgICAgI3BpbGxDb250YWluZXJcbiAgICAgICAgICBjbGFzcz1cIm1hZ2ljeC1haWEtcGlsbC1saXN0LWNvbnRhaW5lclwiXG4gICAgICAgICAgZGF0YS1haWEtcGlsbC1saXN0LWNvbnRhaW5lcj1cIlwiXG4gICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgIChjb250cm9sbGVyLmlzTG9hZGluZyQgfCBhc3luYykgfHxcbiAgICAgICAgICAgICAgKChjb250cm9sbGVyLnN1Z2dlc3Rpb25QaWxscyQgfCBhc3luYyk/Lmxlbmd0aCA/PyAwKSA+IDBcbiAgICAgICAgICBcIlxuICAgICAgICA+XG4gICAgICAgICAgPGFpYS1waWxsLWxpc3RcbiAgICAgICAgICAgIFtwaWxsc109XCIoY29udHJvbGxlci5zdWdnZXN0aW9uUGlsbHMkIHwgYXN5bmMpID8/IFtdXCJcbiAgICAgICAgICAgIFthY3RpdmVQaWxsSW5kZXhdPVwiMFwiXG4gICAgICAgICAgICBbYWN0aXZlU2VsZWN0ZWRdPVwiKGNvbnRyb2xsZXIuaXNBY3RpdmVQaWxsU2VsZWN0ZWQkIHwgYXN5bmMpID8/IGZhbHNlXCJcbiAgICAgICAgICAgIFtsb2FkaW5nXT1cIihjb250cm9sbGVyLmlzTG9hZGluZyQgfCBhc3luYykgPz8gZmFsc2VcIlxuICAgICAgICAgICAgKHNlbGVjdFBpbGwpPVwib25TZWxlY3RQaWxsKCRldmVudClcIlxuICAgICAgICAgID48L2FpYS1waWxsLWxpc3Q+XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuXG4gICAgPG5nLWNvbnRhaW5lciBbbmdTd2l0Y2hdPVwic3VibWl0QnV0dG9uU3RhdGVcIj5cbiAgICAgIDxhaWEtc3VibWl0LWJ1dHRvblxuICAgICAgICAqbmdTd2l0Y2hDYXNlPVwiJ2RlZmF1bHQnXCJcbiAgICAgICAgW2Rpc2FibGVkXT1cIlxuICAgICAgICAgICEoXG4gICAgICAgICAgICBjb250cm9sbGVyICYmXG4gICAgICAgICAgICBjYW5TdWJtaXQoe1xuICAgICAgICAgICAgICBzZWdtZW50czogKGNvbnRyb2xsZXIuc2VnbWVudHMkIHwgYXN5bmMpID8/IFtdLFxuICAgICAgICAgICAgICBjb21wbGV0ZWRQYXJhbXM6IChjb250cm9sbGVyLmNvbXBsZXRlZFBhcmFtcyQgfCBhc3luYykgPz8gW11cbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgKVxuICAgICAgICBcIlxuICAgICAgICAoc3VibWl0KT1cIm9uU3VibWl0QnV0dG9uQ2xpY2soJGV2ZW50KVwiXG4gICAgICA+PC9haWEtc3VibWl0LWJ1dHRvbj5cblxuICAgICAgPHNwYW5cbiAgICAgICAgKm5nU3dpdGNoQ2FzZT1cIidjdXN0b20nXCJcbiAgICAgICAgZGF0YS1haWEtc3VibWl0PVwiXCJcbiAgICAgICAgZGF0YS1haWEtc3VibWl0LXNsb3Q9XCJcIlxuICAgICAgICBjbGFzcz1cIm1hZ2ljeC1haWEtc3VibWl0LXNsb3RcIlxuICAgICAgICAoY2xpY2spPVwib25TdWJtaXRTbG90Q2xpY2soJGV2ZW50KVwiXG4gICAgICA+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJjdXN0b21TdWJtaXRUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgPC9zcGFuPlxuICAgIDwvbmctY29udGFpbmVyPlxuICA8L2Rpdj5cbjwvZGl2PlxuIl19
@@ -1,2 +1,2 @@
1
1
  export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL3NoYXJlZC90eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUge1xuICBBUElDb25maWcsXG4gIEF1dG9jb21wbGV0ZVJlc3VsdCxcbiAgQ29tcGxldGVkUGFyYW1TdGF0ZSxcbiAgQ3VzdG9tRmllbGRzUmVwb3J0LFxuICBEYXRlTW9udGhWaWV3LFxuICBEYXRlUmFuZ2UsXG4gIEZvcm1hdFR5cGUsXG4gIElkZW50aWZpZWRQYXJhbVN0YXRlLFxuICBPcHRpb25PdmVycmlkZXMsXG4gIFByb2R1Y3QsXG4gIFByb2R1Y3RzQ29uZmlnLFxuICBTZWdtZW50LFxuICBTa2lwcGVkUGFyYW1TdGF0ZSxcbiAgU3VnZ2VzdGlvbixcbn0gZnJvbSBcIkBtYWdpY3gtZW5nL2FpLWF1dG9jb21wbGV0ZS12YW5pbGxhXCI7XG5cbi8qKlxuICogQ29uc3RydWN0aW9uLXRpbWUgb3B0aW9ucyBmb3Ige0BsaW5rIEFJQXV0b2NvbXBsZXRlQ29udHJvbGxlcn0uXG4gKlxuICogTWlycm9ycyB0aGUgcHJvcHMgdGhlIFJlYWN0IGB1c2VBSUF1dG9jb21wbGV0ZSgpYCBob29rIGFjY2VwdHMsIG1pbnVzIHRoZVxuICogZmllbGRzIHRoYXQgb25seSBtYWtlIHNlbnNlIGZvciBhIFJlYWN0IGNvbXBvbmVudCBzaGVsbCAoYGNvbHVtbnNgIGlzIGhlcmU7XG4gKiBgYXV0b0ZvY3VzYCwgYGNsYXNzTmFtZWAsIGBwaWxsUGxhY2VtZW50YCwgZXRjLiBsaXZlIG9uIHRoZSBUaWVyIDFcbiAqIGA8YWktYXV0b2NvbXBsZXRlPmAgY29tcG9uZW50KS5cbiAqXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQUlBdXRvY29tcGxldGVDb250cm9sbGVyT3B0aW9ucyB7XG4gIC8qKiBSdW50aW1lIEFQSSBjb25maWd1cmF0aW9uIChhcGlLZXksIGVuZHBvaW50LCBldGMuKS4gKi9cbiAgYXBpQ29uZmlnPzogQVBJQ29uZmlnO1xuICAvKipcbiAgICogT3B0aW9uYWwgdXNlciBjb250ZXh0LiBJbmNsdWRlIHdoYXRldmVyIHlvdSBrbm93IGFib3V0IHRoZSB1c2VyIOKAlCBhXG4gICAqIHByb2ZpbGUsIHByZWZlcmVuY2VzLCB3b3Jrc3BhY2UsIGFueXRoaW5nIOKAlCB0byBwZXJzb25hbGl6ZSBzdWdnZXN0ZWRcbiAgICogcGFyYW1ldGVycyBhbmQgb3B0aW9ucyB0byB0aGVtLlxuICAgKi9cbiAgYWRkaXRpb25hbENvbnRleHQ/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgLyoqXG4gICAqIFN0YWJsZSBpZCBmb3IgdGhpcyB2aXNpdG9yLCBrZXB0IGJ5IHRoZSBob3N0IGFjcm9zcyBwYWdlIGxvYWRzLiBSaWRlcyBvblxuICAgKiB0ZWxlbWV0cnkgZXZlbnRzIHNvIHNlYXJjaGVzIGNhbiBiZSBqb2luZWQgdG8gd2hhdCB0aGUgdmlzaXRvciBkb2VzXG4gICAqIGFmdGVyd2FyZHMuIE11c3QgYmUgYSBVVUlEIHY0OyBvbWl0IHRvIHNlbmQgbm9uZS4gQSBmdW5jdGlvbiBpcyBjYWxsZWRcbiAgICogb25seSBvbmNlIHRoZSBzZXJ2ZXIgaGFzIGZ1bm5lbCB0ZWxlbWV0cnkgb24uXG4gICAqL1xuICB2aXNpdG9ySWQ/OiBzdHJpbmcgfCAoKCkgPT4gc3RyaW5nIHwgdW5kZWZpbmVkKTtcbiAgLyoqIFBlci1zdWdnZXN0aW9uLXR5cGUgY2xpZW50LXNpZGUgb3B0aW9uIG92ZXJyaWRlcy4gKi9cbiAgb3B0aW9uT3ZlcnJpZGVzPzogT3B0aW9uT3ZlcnJpZGVzO1xuICAvKiogV2hlbiB0cnVlLCBjb21wbGV0ZWQgcGFyYW1zJyBsaXRlcmFsIHRleHQgaXMgb21pdHRlZCBmcm9tIEFQSSByZXF1ZXN0cy4gKi9cbiAgbWFza0NvbXBsZXRlZFRleHQ/OiBib29sZWFuO1xuICAvKiogTnVtYmVyIG9mIGNvbHVtbnMgaW4gdGhlIGRyb3Bkb3duIGdyaWQuIERlZmF1bHQ6IDIuICovXG4gIGNvbHVtbnM/OiBudW1iZXI7XG4gIC8qKlxuICAgKiBXaGVyZSB0aGUgZHJvcGRvd24gb3BlbnMgcmVsYXRpdmUgdG8gdGhlIGlucHV0LiBEZWZhdWx0OiBcImJlbG93XCIuXG4gICAqXG4gICAqIFJlYWQgYnkgdGhlIGtleWJvYXJkIGNvbnRyb2xsZXIgdG8gZGVjaWRlIHdoaWNoIHZlcnRpY2FsLWFycm93IGtleSBvcGVuc1xuICAgKiB0aGUgZHJvcGRvd24gZnJvbSB0aGUgaW5wdXQg4oCUIEFycm93RG93biB3aGVuIHRoZSBkcm9wZG93biBpcyBiZWxvdyxcbiAgICogQXJyb3dVcCB3aGVuIGl0J3MgYWJvdmUuXG4gICAqL1xuICBvcHRpb25zUG9zaXRpb24/OiBcImFib3ZlXCIgfCBcImJlbG93XCI7XG4gIC8qKlxuICAgKiBXaGVuIHRoZSBkcm9wZG93biBhcHBlYXJzLiBcImF1dG9cIiAoZGVmYXVsdCkgc2hvd3Mgd2hlbiBvcHRpb25zIGFyZVxuICAgKiBhdmFpbGFibGU7IFwibWFudWFsXCIgc2hvd3Mgb25seSBvbiBwaWxsIHRhcDsgXCJoaWRkZW5cIiBuZXZlciBzaG93cy5cbiAgICovXG4gIGRyb3Bkb3duVHJpZ2dlcj86IFwiYXV0b1wiIHwgXCJtYW51YWxcIiB8IFwiaGlkZGVuXCI7XG4gIC8qKiBXaGVuIHRydWUgKGRlZmF1bHQpLCB0aGUgZHJvcGRvd24gY2xvc2VzIGlmIHRoZSBpbnB1dCBsb3NlcyBmb2N1cy4gKi9cbiAgY2xvc2VEcm9wZG93bk9uQmx1cj86IGJvb2xlYW47XG4gIC8qKiBXaGVuIHRydWUgKGRlZmF1bHQpLCBub24tdGFwcGFibGUgb3B0aW9ucyByZW5kZXIgYWxvbmdzaWRlIHRhcHBhYmxlIG9uZXMuICovXG4gIHNob3dOb25UYXBwYWJsZU9wdGlvbnM/OiBib29sZWFuO1xuICAvKipcbiAgICogU0RLIHN1cmZhY2UgaWRlbnRpZmllciDigJQgc2VudCBhcyBtZXRhLnNvdXJjZSBvbiBib3RoIC9hcGkvc3VnZ2VzdCBhbmRcbiAgICogdGVsZW1ldHJ5IGV2ZW50cy4gU2V0IGF1dG9tYXRpY2FsbHkgdG8gXCJmdWxsLXNka1wiIGJ5IHRoZSBUaWVyIDFcbiAgICogYDxhaS1hdXRvY29tcGxldGU+YCBjb21wb25lbnQuIERlZmF1bHRzIHRvIFwiaGVhZGxlc3Mtc2RrXCIuXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgc291cmNlPzogXCJmdWxsLXNka1wiIHwgXCJoZWFkbGVzcy1zZGtcIjtcbiAgLyoqIENhbGxlZCB3aGVuIHRoZSB1c2VyIHN1Ym1pdHMgKEVudGVyIGtleSBvciBgc3VibWl0KClgIGFjdGlvbikuICovXG4gIG9uU3VibWl0PzogKHJlc3VsdDogQXV0b2NvbXBsZXRlUmVzdWx0KSA9PiB2b2lkO1xuICAvKipcbiAgICogQ2FsbGVkIGFmdGVyIGV2ZXJ5IHN1Y2Nlc3NmdWwgc3VnZ2VzdGlvbiByb3VuZC10cmlwIHdpdGggdGhlIHN0cnVjdHVyZWRcbiAgICogcXVlcnkgYXMgdGhlIFNESyBub3cgdW5kZXJzdGFuZHMgaXQg4oCUIHRoZSBzYW1lIGBBdXRvY29tcGxldGVSZXN1bHRgIHNoYXBlXG4gICAqIGBvblN1Ym1pdGAgZGVsaXZlcnMsIHNvIGEgY29uc3VtZXIgY2FuIG1pcnJvciB0aGUgcXVlcnkgYXMgaXQgaXMgYnVpbHRcbiAgICogKGEgbGl2ZSBwcmV2aWV3LCBhIGRyYWZ0LCBhbmFseXRpY3MpIHdpdGhvdXQgd2FpdGluZyBmb3Igc3VibWl0LlxuICAgKlxuICAgKiBGaXJlcyBvbmNlIHBlciByZXNwb25zZSB0aGF0IHdhcyBhcHBsaWVkLCBpbmNsdWRpbmcgdGhlIGluaXRpYWwgcmVxdWVzdFxuICAgKiBvbiBjb25zdHJ1Y3Rpb24gKGFuIGVtcHR5IHJlc3VsdCkuIERvZXMgbm90IGZpcmUgZm9yIGEgcmVxdWVzdCB0aGF0XG4gICAqIGZhaWxlZCwgd2FzIGFib3J0ZWQsIG9yIHdhcyBzdXBlcnNlZGVkIGJlZm9yZSBpdCByZXR1cm5lZCwgYW5kIG5vdGhpbmdcbiAgICogZmlyZXMgZm9yIGEga2V5c3Ryb2tlIHRoYXQgaGFzbid0IGJlZW4gc2VudCB5ZXQg4oCUIHJlYWQgYGdldFJlc3VsdCgpYCBmb3JcbiAgICogdGhlIGN1cnJlbnQgdmFsdWUgb24gZGVtYW5kLlxuICAgKi9cbiAgb25SZXN1bHQ/OiAocmVzdWx0OiBBdXRvY29tcGxldGVSZXN1bHQpID0+IHZvaWQ7XG4gIC8qKiBDYWxsZWQgd2hlbiBhIGZldGNoIGZhaWxzLiAqL1xuICBvbkVycm9yPzogKGVycm9yOiBFcnJvcikgPT4gdm9pZDtcbiAgLyoqIENhbGxlZCB3aGVuIHRoZSBlZGl0b3IgdGV4dCBjaGFuZ2VzIChjb250cm9sbGVkLW1vZGUgc2lnbmFsKS4gKi9cbiAgb25DaGFuZ2U/OiAodGV4dDogc3RyaW5nKSA9PiB2b2lkO1xuICAvKiogQ2FsbGVkIHdoZW4gY29tcGxldGVkIHBhcmFtcyBjaGFuZ2UgKGNvbnRyb2xsZWQtbW9kZSBzaWduYWwpLiAqL1xuICBvblBhcmFtc0NoYW5nZT86IChwYXJhbXM6IENvbXBsZXRlZFBhcmFtU3RhdGVbXSkgPT4gdm9pZDtcbiAgLyoqIENhbGxlZCB3aGVuIHRoZSBpbnB1dCBnYWlucyBmb2N1cy4gKi9cbiAgb25Gb2N1cz86ICgpID0+IHZvaWQ7XG4gIC8qKiBDYWxsZWQgd2hlbiB0aGUgaW5wdXQgbG9zZXMgZm9jdXMuICovXG4gIG9uQmx1cj86ICgpID0+IHZvaWQ7XG4gIC8qKlxuICAgKiBXaGVuIHRydWUgKGRlZmF1bHQpLCB0aGUgZHJvcGRvd24gcmVuZGVycyBhIGhvcml6b250YWwgcm93IG9mIHByb2R1Y3RcbiAgICogY2FyZHMgYmVsb3cgdGhlIG9wdGlvbnMgZ3JpZCB3aGVuZXZlciBpdCBoYXMgcHJvZHVjdHMgdG8gc2hvdzogYnkgZGVmYXVsdFxuICAgKiB0aGUgaXRlbXMgdGhlIGAvc3VnZ2VzdGAgcmVzcG9uc2UgcmVwb3J0cyBhcyBtYXRjaGluZyB0aGUgcXVlcnksIG9yIHRoZVxuICAgKiByZXN1bHRzIG9mIGEgY3VzdG9tIGBwcm9kdWN0c2Agc2VhcmNoLiBTZXQgdG8gZmFsc2UgdG8gcmVuZGVyIG5vIHN0cmlwXG4gICAqIGFuZCBydW4gbm8gY3VzdG9tIHNlYXJjaC5cbiAgICovXG4gIHNob3dQcm9kdWN0cz86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBDdXN0b20gc291cmNlIGZvciB0aGUgcHJvZHVjdCBzdHJpcC4gT21pdCBpdCBhbmQgdGhlIHN0cmlwIHNob3dzIHRoZVxuICAgKiBpdGVtcyB0aGUgYC9zdWdnZXN0YCByZXNwb25zZSBpdHNlbGYgcmVwb3J0cyBhcyBtYXRjaGluZyB0aGUgcXVlcnksIHdpdGhcbiAgICogbm8gZXh0cmEgcmVxdWVzdC4gU2V0IGl0IGFuZCB0aGUgZHJvcGRvd24gaXMgZmVkIGJ5IHRoZSBpbnRlZ3JhdGlvbidzIG93blxuICAgKiBzZWFyY2ggZW5kcG9pbnQgb24gdGhlIFNESydzIGV4aXN0aW5nIGZldGNoIGNhZGVuY2UgaW5zdGVhZDsgdGhlIHNlcnZlcidzXG4gICAqIGl0ZW1zIGFyZSB0aGVuIG5vdCByZW5kZXJlZC5cbiAgICovXG4gIHByb2R1Y3RzPzogUHJvZHVjdHNDb25maWc7XG4gIC8qKlxuICAgKiBDYWxsZWQgd2hlbiB0aGUgdXNlciBhY3RpdmF0ZXMgYSBwcm9kdWN0IGNhcmQuIFRoZSBTREsgZG9lcyBub3QgbmF2aWdhdGUg4oCUXG4gICAqIHRoZSBpbnRlZ3JhdGlvbiBkZWNpZGVzIHdoYXQgYSBzZWxlY3Rpb24gbWVhbnMuIE1vZGlmaWVyIC8gbWlkZGxlIGNsaWNrc1xuICAgKiBhcmUgbGVmdCB0byB0aGUgYnJvd3NlciAoY21kLWNsaWNrIHN0aWxsIG9wZW5zIGEgdGFiKSBhbmQgZG9uJ3QgZmlyZSB0aGlzLlxuICAgKi9cbiAgb25Qcm9kdWN0U2VsZWN0PzogKHByb2R1Y3Q6IFByb2R1Y3QpID0+IHZvaWQ7XG4gIC8qKiBJbml0aWFsIGNvbnRyb2xsZWQgdGV4dCB2YWx1ZS4gKi9cbiAgdmFsdWU/OiBzdHJpbmc7XG4gIC8qKiBJbml0aWFsIGNvbnRyb2xsZWQgY29tcGxldGVkIHBhcmFtcy4gKi9cbiAgY29tcGxldGVkUGFyYW1zPzogQ29tcGxldGVkUGFyYW1TdGF0ZVtdO1xuICAvKipcbiAgICogQ2FyZXQtc2V0IGNhbGxiYWNrLiBJbnZva2VkIGJ5IHRoZSBjb3JlIHdoZW4gcmUtZWRpdCAvIEJhY2tzcGFjZSBmbG93c1xuICAgKiBuZWVkIHRoZSBlZGl0b3IgY2FyZXQgcGFya2VkIGF0IGEgc3BlY2lmaWMgcGxhaW4tdGV4dCBvZmZzZXQuIFRoZSBUaWVyIDFcbiAgICogYDxhaS1hdXRvY29tcGxldGU+YCBjb21wb25lbnQgd2lyZXMgdGhpcyBmcm9tIGl0cyBlZGl0b3IgaG9zdDsgaGVhZGxlc3NcbiAgICogY29uc3VtZXJzIGNhbiBsZWF2ZSBpdCB1bnNldC5cbiAgICogQGludGVybmFsXG4gICAqL1xuICBzZXRDdXJzb3I/OiAob2Zmc2V0OiBudW1iZXIpID0+IHZvaWQ7XG59XG5cbi8qKlxuICogU3Vic2V0IG9mIHtAbGluayBBSUF1dG9jb21wbGV0ZUNvbnRyb2xsZXJPcHRpb25zfSB0aGF0IGNhbiBiZSBjaGFuZ2VkIGFmdGVyXG4gKiBjb25zdHJ1Y3Rpb24uIEV4Y2x1ZGVzIGV2ZW50IGNhbGxiYWNrcyAodGhvc2UgYXJlIHJlZ2lzdGVyZWQgb25jZSBhdFxuICogY29uc3RydWN0aW9uIOKAlCBzZWUgdmFuaWxsYSBgQ29yZVVwZGF0ZU9wdGlvbnNgKS5cbiAqXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCB0eXBlIEFJQXV0b2NvbXBsZXRlQ29udHJvbGxlclVwZGF0ZSA9IFBhcnRpYWw8XG4gIE9taXQ8XG4gICAgQUlBdXRvY29tcGxldGVDb250cm9sbGVyT3B0aW9ucyxcbiAgICB8IFwib25TdWJtaXRcIlxuICAgIHwgXCJvblJlc3VsdFwiXG4gICAgfCBcIm9uRXJyb3JcIlxuICAgIHwgXCJvbkNoYW5nZVwiXG4gICAgfCBcIm9uUGFyYW1zQ2hhbmdlXCJcbiAgICB8IFwib25Gb2N1c1wiXG4gICAgfCBcIm9uQmx1clwiXG4gICAgfCBcIm9uUHJvZHVjdFNlbGVjdFwiXG4gICAgfCBcInNldEN1cnNvclwiXG4gID5cbj47XG5cbi8qKlxuICogU25hcHNob3Qgb2YgdGhlIGNvbnRyb2xsZXIncyByZWFjdGl2ZSBzdGF0ZS4gRWFjaCBmaWVsZCBpcyBhbHNvIGV4cG9zZWQgYXNcbiAqIGEgc3RhbmQtYWxvbmUgb2JzZXJ2YWJsZSBvbiB0aGUgY29udHJvbGxlciAoZS5nLiBgY29udHJvbGxlci50ZXh0JGApLlxuICpcbiAqIGBzdWdnZXN0aW9uUGlsbHNgIG1pcnJvcnMgUmVhY3QncyBgc3VnZ2VzdGlvblBpbGxzYCDigJQgdGhlIGFjdGlvbmFibGVcbiAqIHN1YnNldCBvZiBgc3VnZ2VzdGlvbnNgIHJlYWR5IGZvciBwaWxsIHJlbmRlcmluZy4gYGlzTG9hZGluZ2AgaXMgdGhlXG4gKiBVSS12aXNpYmxlIGxvYWRpbmcgZmxhZyAoc3VwcHJlc3NlZCBkdXJpbmcgdGhlIHBvc3Qtc2VsZWN0IHByZXNzXG4gKiBhbmltYXRpb24gYW5kIGR1cmluZyByZS1lZGl0LCB3aGVyZSBjYWNoZWQgb3B0aW9ucyBzdGF5IHZpc2libGUpLlxuICpcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBSUF1dG9jb21wbGV0ZUNvbnRyb2xsZXJTdGF0ZSB7XG4gIHRleHQ6IHN0cmluZztcbiAgY29tcGxldGVkUGFyYW1zOiBDb21wbGV0ZWRQYXJhbVN0YXRlW107XG4gIC8qKlxuICAgKiBTdWdnZXN0aW9ucyB0aGUgdXNlciBkaXNtaXNzZWQgd2l0aCB0aGUgc2tpcCBrZXkgKOKGkikuIE5vdGhpbmcgcmVuZGVyc1xuICAgKiB0aGVtIOKAlCBwYXNzIHRoZW0gdG8gYGJ1aWxkU3VibWl0UmVzdWx0YCBzbyBhIGhhbmQtcm9sbGVkIHN1Ym1pdCBjYXJyaWVzXG4gICAqIHRoZSBzYW1lIGB0ZXh0OiBcInNraXBwZWRcImAgZW50cmllcyB0aGUgU0RLJ3Mgb3duIHJlcXVlc3RzIGRvLlxuICAgKi9cbiAgc2tpcHBlZFBhcmFtczogU2tpcHBlZFBhcmFtU3RhdGVbXTtcbiAgLyoqXG4gICAqIFBhcmFtcyB0aGUgc2VydmVyIGlkZW50aWZpZWQgaW4gdGhlIHVzZXIncyBvd24gd29yZHMuIEFscmVhZHkgcmVuZGVyZWRcbiAgICogdGhyb3VnaCBgc2VnbWVudHNgOyBleHBvc2VkIHNvIGEgaGFuZC1yb2xsZWQgc3VibWl0IGNhbiBwYXNzIHRoZW0gdG9cbiAgICogYGJ1aWxkU3VibWl0UmVzdWx0YCBhbmQgcmVwb3J0IHRoZSBzYW1lIGBpZGVudGlmaWVkX3BhcmFtc2AgdGhlIFNESydzXG4gICAqIG93biByZXN1bHRzIGNhcnJ5LlxuICAgKi9cbiAgaWRlbnRpZmllZFBhcmFtczogSWRlbnRpZmllZFBhcmFtU3RhdGVbXTtcbiAgc3VnZ2VzdGlvblBpbGxzOiBTdWdnZXN0aW9uW107XG4gIHNlZ21lbnRzOiBTZWdtZW50W107XG4gIG5ld1BhcmFtSWQ6IHN0cmluZyB8IG51bGw7XG4gIHN1Z2dlc3Rpb25zOiBTdWdnZXN0aW9uW107XG4gIC8qKlxuICAgKiBXaGF0IHRoZSBwcm9kdWN0IHN0cmlwIHNob3dzOiB0aGUgaXRlbXMgdGhlIGxhdGVzdCBgL3N1Z2dlc3RgIHJlc3BvbnNlXG4gICAqIHJlcG9ydGVkIGFzIG1hdGNoaW5nIHRoZSBxdWVyeSwgb3IgdGhlIHJlc3VsdHMgb2YgYSBjdXN0b20gYHByb2R1Y3RzYFxuICAgKiBzZWFyY2guIEFscmVhZHkgZm9sZGVkIGludG8gdGhlIGRyb3Bkb3duIHNuYXBzaG90IOKAlCByZWFkIGl0IGhlcmUgb25seVxuICAgKiB3aGVuIHJlbmRlcmluZyB5b3VyIG93biBzdHJpcC5cbiAgICovXG4gIHByb2R1Y3RzOiBQcm9kdWN0W107XG4gIC8qKlxuICAgKiBUaGUgY2F0YWxvZyBncm91bmRpbmcgcmVwb3J0IHRoZSBsYXRlc3QgcmVzcG9uc2UgY2FycmllZCwgb3IgbnVsbCB3aGVuIGl0XG4gICAqIGNhcnJpZWQgbm9uZTogd2hpY2ggb2YgdGhlIHF1ZXJ5J3MgY29uc3RyYWludHMgdGhlIGNhdGFsb2cgYXBwbGllZCwgd2hpY2hcbiAgICogaXQgZHJvcHBlZCwgYW5kIGhvdyBtYW55IGl0ZW1zIChhbmQgd2hpY2gpIHRoZSBhcHBsaWVkIG9uZXMgbGVmdFxuICAgKiBzdGFuZGluZy4gTnVsbCBpcyBcIm5vIG5ld3NcIiwgbm90IGFuIGVtcHR5IGNhdGFsb2cuXG4gICAqL1xuICBjdXN0b21GaWVsZHM6IEN1c3RvbUZpZWxkc1JlcG9ydCB8IG51bGw7XG4gIGFjdGl2ZUluZGV4OiBudW1iZXI7XG4gIGlzTG9hZGluZzogYm9vbGVhbjtcbiAgaXNSZWFkeTogYm9vbGVhbjtcbiAgaXNGb2N1c2VkOiBib29sZWFuO1xuICBpc0Ryb3Bkb3duT3BlbjogYm9vbGVhbjtcbiAgcGxhY2Vob2xkZXJUZXh0OiBzdHJpbmc7XG4gIGVycm9yOiBFcnJvciB8IG51bGw7XG4gIGVkaXRpbmdQYXJhbTogQ29tcGxldGVkUGFyYW1TdGF0ZSB8IG51bGw7XG4gIC8qKlxuICAgKiBTZXQgd2hpbGUgdGhlIHVzZXIgaXMgcGlja2luZyBhIGRhdGUgZm9yIGEgc3BhbiB0aGUgc2VydmVyIGlkZW50aWZpZWQgYXNcbiAgICogb25lIOKAlCBcInNlcHRlbWJlciA1dGhcIiBpbiBcImZseSB0byB2ZWdhcyBvbiBzZXB0ZW1iZXIgNXRoXCIuIE51bGwgb3RoZXJ3aXNlLlxuICAgKi9cbiAgZWRpdGluZ0lkZW50aWZpZWQ6IHtcbiAgICBpZDogc3RyaW5nO1xuICAgIHBhcmFtZXRlcjogc3RyaW5nO1xuICAgIGFuY2hvcjogbnVtYmVyO1xuICAgIHRhaWw6IG51bWJlcjtcbiAgICAvKiogVGhlIGRhdGUgdGhlIHNwYW4gd2FzIHJlYWQgYXMsIG9yIGEgcmFuZ2UncyBzdGFydC4gTnVsbCB3aGVuIGl0IGNvdWxkbid0IGJlIHJlYWQuICovXG4gICAgaXNvOiBzdHJpbmcgfCBudWxsO1xuICAgIC8qKiBUaGUgb3RoZXIgZW5kLCB3aGVuIHRoZSBzcGFuIHJlYWRzIGFzIGEgcmFuZ2UgcmF0aGVyIHRoYW4gYXMgb25lIGRheS4gKi9cbiAgICBpc29FbmQ6IHN0cmluZyB8IG51bGw7XG4gICAgLyoqIFdoZXRoZXIgdGhhdCBzcGFuIGlzIGFuc3dlcmVkIGJ5IGEgY2FsZW5kYXIsIG9yIGEgY2FsZW5kYXIgaW4gdHdvIHRhcHMuICovXG4gICAgZm9ybWF0OiBGb3JtYXRUeXBlO1xuICB9IHwgbnVsbDtcbiAgZWRpdGluZ0FuY2hvcjogbnVtYmVyIHwgbnVsbDtcbiAgY2FyZXRPZmZzZXQ6IG51bWJlciB8IG51bGw7XG59XG5cbi8qKlxuICogQ29tcG9zaXRlIHN0YXRlIHNoYXBlIGZvciB0aGUgZHJvcGRvd24gdmlldyBsYXllci4gVGllciAyIGNvbnN1bWVycyBiaW5kXG4gKiB0aGUgZHJvcGRvd24gY29tcG9uZW50IHRvIHRoaXMgc25hcHNob3Q7IFRpZXIgMSB1c2VzIHRoZSBzYW1lIHNoYXBlXG4gKiBpbnRlcm5hbGx5LlxuICpcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBSUF1dG9jb21wbGV0ZURyb3Bkb3duU3RhdGUge1xuICAvKiogQWN0aXZlIHN1Z2dlc3Rpb24gKyBmaWx0ZXJlZCBvcHRpb25zIHRvIHJlbmRlciBpbiB0aGUgZ3JpZC4gKi9cbiAgc3VnZ2VzdGlvbnM6IFN1Z2dlc3Rpb25bXTtcbiAgLyoqIEN1cnJlbnRseSBoaWdobGlnaHRlZCBvcHRpb24gaW5kZXguIC0xIHdoZW4gbm9uZS4gKi9cbiAgYWN0aXZlSW5kZXg6IG51bWJlcjtcbiAgLyoqIFdoZXRoZXIgdGhlIGRyb3Bkb3duIHNob3VsZCBiZSB2aXNpYmxlLiAqL1xuICBpc09wZW46IGJvb2xlYW47XG4gIC8qKiBQaWxscyB0byByZW5kZXIgaW4gdGhlIGRyb3Bkb3duJ3MgcGlsbGJhciAocmUtZWRpdCBwaWxsIG9yIGFsbCBzdWdnZXN0aW9uIHBpbGxzKS4gKi9cbiAgcGlsbHM6IFN1Z2dlc3Rpb25bXTtcbiAgLyoqIFdoZXRoZXIgdGhlIGFjdGl2ZSBwaWxsIHJlbmRlcnMgc2VsZWN0ZWQgKGZ1bGwgb3BhY2l0eSkgdnMuIHRoZSBgZmlyc3RgIHRpZXIuICovXG4gIGlzQWN0aXZlUGlsbFNlbGVjdGVkOiBib29sZWFuO1xuICAvKiogVHJ1ZSB3aGVuIHRoZSBkcm9wZG93biBzaG91bGQgcmVuZGVyIGl0cyBsb2FkaW5nIHNrZWxldG9uLiAqL1xuICBpc0xvYWRpbmc6IGJvb2xlYW47XG4gIC8qKiBXaGV0aGVyIHRoZSBpbnB1dCBoYXMgbm8gdHlwZWQgdGV4dCDigJQgdGhlIHNvbGUgc3RhdGUgdGhhdCBzdXJmYWNlcyBcInRhYiB0byBzZWxlY3RcIiBpbiB0aGUgZm9vdGVyIGhpbnQuICovXG4gIGlzSW5wdXRFbXB0eTogYm9vbGVhbjtcbiAgLyoqIFByb2R1Y3QgY2FyZHMgdG8gcmVuZGVyIGJlbG93IHRoZSBvcHRpb25zIGdyaWQuIEVtcHR5IHJlbmRlcnMgbm8gc3RyaXAuICovXG4gIHByb2R1Y3RzOiBQcm9kdWN0W107XG4gIC8qKlxuICAgKiBUcnVlIHdoaWxlIGEgY29tcGxldGVkIHBhcmFtIGlzIGJlaW5nIHJlLWVkaXRlZC4gVGhlIHBpbGxiYXIgdGhlbiBzaG93c1xuICAgKiB0aGUgcGFyYW0gYmVpbmcgcmUtZWRpdGVkIOKAlCBub3Qgc2tpcHBhYmxlIOKAlCBzbyB0aGUgc2tpcCBidXR0b24gaGlkZXMuXG4gICAqIE9wdGlvbmFsICh1bmRlZmluZWQg4oeSIG5vdCBlZGl0aW5nKSBzbyBleGlzdGluZyBjb25zdW1lciBjb2RlIGNvbnN0cnVjdGluZ1xuICAgKiB0aGlzIHN0YXRlIOKAlCB0ZXN0IGZpeHR1cmVzLCBmYWtlIGNvbnRyb2xsZXJzIOKAlCBrZWVwcyBjb21waWxpbmcgYWNyb3NzIHRoZVxuICAgKiBtaW5vciBidW1wIHRoYXQgaW50cm9kdWNlZCBpdC5cbiAgICovXG4gIGlzRWRpdGluZz86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBUcnVlIGZvciB0aGUgfjE3MG1zIHdpbmRvdyBhZnRlciBhbiBvcHRpb24gaXMgc2VsZWN0ZWQsIHdoaWxlIHRoZSBhbnN3ZXJlZFxuICAgKiBzdWdnZXN0aW9uIGFuaW1hdGVzIG91dC4gYGlzTG9hZGluZ2AgaXMgZGVsaWJlcmF0ZWx5IHN1cHByZXNzZWQgaW4gdGhhdFxuICAgKiB3aW5kb3csIGJ1dCB0aGUgY29yZSdzIGBza2lwQWN0aXZlUGlsbCgpYCBuby1vcHMgaW4gaXQg4oCUIHRoZSBza2lwIGJ1dHRvblxuICAgKiByZW5kZXJzIGRpc2FibGVkIG9mZiB0aGlzIGZsYWcgaW5zdGVhZCBvZiBzd2FsbG93aW5nIGNsaWNrcyBzaWxlbnRseS5cbiAgICogT3B0aW9uYWwgKHVuZGVmaW5lZCDih5IgZmFsc2UpIGZvciB0aGUgc2FtZSBjb21waWxlLWNvbXBhdCByZWFzb24gYXNcbiAgICogYGlzRWRpdGluZ2AuXG4gICAqL1xuICBpblNlbGVjdGlvbkFuaW1hdGlvbj86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBUcnVlIHdoaWxlIHRoZSBsb2FkaW5nIHNrZWxldG9uIGZhZGVzIG91dCBiZWZvcmUgdGhlIHJlc3BvbnNlJ3Mgb3B0aW9uc1xuICAgKiByZXBsYWNlIGl0LiBPcHRpb25hbCAodW5kZWZpbmVkIOKHkiBmYWxzZSkgZm9yIHRoZSBzYW1lIGNvbXBpbGUtY29tcGF0XG4gICAqIHJlYXNvbiBhcyBgaXNFZGl0aW5nYC5cbiAgICovXG4gIHNrZWxldG9uRXhpdGluZz86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBXaGVyZSB0aGUgZHJvcGRvd24gb3BlbnMgcmVsYXRpdmUgdG8gdGhlIGlucHV0IOKAlCBtaXJyb3JzIHRoZSBjb250cm9sbGVyJ3NcbiAgICogYG9wdGlvbnNQb3NpdGlvbmAgb3B0aW9uLiBgPGFpLWF1dG9jb21wbGV0ZS1kcm9wZG93bj5gIHJlYWRzIGl0IGZyb20gaGVyZSwgc29cbiAgICogcGxhY2VtZW50IGlzIGNvbmZpZ3VyZWQgb25jZSBvbiB0aGUgY29udHJvbGxlciAobm8gc2VwYXJhdGUgaW5wdXQgdG8gc3luYykuXG4gICAqL1xuICBvcHRpb25zUG9zaXRpb246IFwiYWJvdmVcIiB8IFwiYmVsb3dcIjtcbiAgLyoqXG4gICAqIEhvdyB0aGUgYWN0aXZlIHBpbGwgaXMgYW5zd2VyZWQuIGBcImRhdGVcImAgYW5kIGBcImRhdGUtcmFuZ2VcImAgcmVuZGVyIGFcbiAgICogY2FsZW5kYXIgaW4gcGxhY2Ugb2YgdGhlIG9wdGlvbnMgZ3JpZCwgYW5kIGBzdWdnZXN0aW9uc1swXS5vcHRpb25zYCB0aGVuXG4gICAqIGNhcnJpZXMgdGhhdCBtb250aCdzIGNlbGxzIHJhdGhlciB0aGFuIHRoZSBwYXJhbWV0ZXIncyBvd24gb3B0aW9ucyDigJQgdGhlXG4gICAqIGNvcmUgc3dhcHMgdGhlbSBiZWZvcmUgdGhleSByZWFjaCBoZXJlLiBBIGBcImRhdGUtcmFuZ2VcImAgcGFyYW1ldGVyIGlzXG4gICAqIGFuc3dlcmVkIGJ5IHR3byB0YXBzIG9mIHRoYXQgY2FsZW5kYXIsIGEgc3RhcnQgYW5kIGFuIGVuZCwgY29tbWl0dGVkIGFzIG9uZVxuICAgKiBzcGFuLiBPcHRpb25hbCAodW5kZWZpbmVkIOKHkiBgXCJvcHRpb25zXCJgKSBmb3IgdGhlIHNhbWUgY29tcGlsZS1jb21wYXQgcmVhc29uXG4gICAqIGFzIGBpc0VkaXRpbmdgLlxuICAgKi9cbiAgZm9ybWF0VHlwZT86IEZvcm1hdFR5cGU7XG4gIC8qKiBUaGUgbW9udGggdGhlIGNhbGVuZGFyIHNob3dzLiBOdWxsL3VuZGVmaW5lZCB1bmxlc3MgYGZvcm1hdFR5cGVgIGlzIGEgY2FsZW5kYXIgb25lLiAqL1xuICBkYXRlVmlldz86IERhdGVNb250aFZpZXcgfCBudWxsO1xuICAvKiogYFlZWVktTU0tRERgIGFscmVhZHkgaGVsZCBieSB0aGUgcGFyYW0gYmVpbmcgcmUtZWRpdGVkLCBzbyBpdHMgY2VsbCByZWFkcyBhcyB0aGUgY3VycmVudCBhbnN3ZXIuICovXG4gIHNlbGVjdGVkRGF0ZUlzbz86IHN0cmluZyB8IG51bGw7XG4gIC8qKiBCb3RoIGVuZHMgb2YgYSByYW5nZSBwYXJhbSBiZWluZyByZS1lZGl0ZWQsIHNvIGJvdGggY2VsbHMgcmVhZCBhcyB0aGUgY3VycmVudCBhbnN3ZXIuICovXG4gIHNlbGVjdGVkRGF0ZVJhbmdlPzogRGF0ZVJhbmdlIHwgbnVsbDtcbiAgLyoqIFRoZSBmaXJzdCBlbmQgb2YgYSByYW5nZSBwaWNrZWQgc28gZmFyLCB3aGlsZSB0aGUgdXNlciBjaG9vc2VzIHRoZSBzZWNvbmQuICovXG4gIGRhdGVSYW5nZVN0YXJ0Pzogc3RyaW5nIHwgbnVsbDtcbn1cbiJdfQ==
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL3NoYXJlZC90eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUge1xuICBBUElDb25maWcsXG4gIEF1dG9jb21wbGV0ZVJlc3VsdCxcbiAgQ29tcGxldGVkUGFyYW1TdGF0ZSxcbiAgQ3VzdG9tRmllbGRzUmVwb3J0LFxuICBEYXRlTW9udGhWaWV3LFxuICBEYXRlUmFuZ2UsXG4gIEZvcm1hdFR5cGUsXG4gIElkZW50aWZpZWRQYXJhbVN0YXRlLFxuICBPcHRpb25PdmVycmlkZXMsXG4gIFByb2R1Y3QsXG4gIFByb2R1Y3RzQ29uZmlnLFxuICBTZWdtZW50LFxuICBTa2lwcGVkUGFyYW1TdGF0ZSxcbiAgU3VnZ2VzdGlvbixcbn0gZnJvbSBcIkBtYWdpY3gtZW5nL2FpLWF1dG9jb21wbGV0ZS12YW5pbGxhXCI7XG5cbi8qKlxuICogQ29uc3RydWN0aW9uLXRpbWUgb3B0aW9ucyBmb3Ige0BsaW5rIEFJQXV0b2NvbXBsZXRlQ29udHJvbGxlcn0uXG4gKlxuICogTWlycm9ycyB0aGUgcHJvcHMgdGhlIFJlYWN0IGB1c2VBSUF1dG9jb21wbGV0ZSgpYCBob29rIGFjY2VwdHMsIG1pbnVzIHRoZVxuICogZmllbGRzIHRoYXQgb25seSBtYWtlIHNlbnNlIGZvciBhIFJlYWN0IGNvbXBvbmVudCBzaGVsbCAoYGNvbHVtbnNgIGlzIGhlcmU7XG4gKiBgYXV0b0ZvY3VzYCwgYGNsYXNzTmFtZWAsIGBwaWxsUGxhY2VtZW50YCwgZXRjLiBsaXZlIG9uIHRoZSBUaWVyIDFcbiAqIGA8YWktYXV0b2NvbXBsZXRlPmAgY29tcG9uZW50KS5cbiAqXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQUlBdXRvY29tcGxldGVDb250cm9sbGVyT3B0aW9ucyB7XG4gIC8qKiBSdW50aW1lIEFQSSBjb25maWd1cmF0aW9uIChhcGlLZXksIGVuZHBvaW50LCBldGMuKS4gKi9cbiAgYXBpQ29uZmlnPzogQVBJQ29uZmlnO1xuICAvKipcbiAgICogT3B0aW9uYWwgdXNlciBjb250ZXh0LiBJbmNsdWRlIHdoYXRldmVyIHlvdSBrbm93IGFib3V0IHRoZSB1c2VyIOKAlCBhXG4gICAqIHByb2ZpbGUsIHByZWZlcmVuY2VzLCB3b3Jrc3BhY2UsIGFueXRoaW5nIOKAlCB0byBwZXJzb25hbGl6ZSBzdWdnZXN0ZWRcbiAgICogcGFyYW1ldGVycyBhbmQgb3B0aW9ucyB0byB0aGVtLlxuICAgKi9cbiAgYWRkaXRpb25hbENvbnRleHQ/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgLyoqXG4gICAqIEJDUCA0NyBsYW5ndWFnZSB0YWcgKGUuZy4gYFwiZXNcImApLCBzZW50IHdpdGggZXZlcnkgc3VnZ2VzdGlvbiByZXF1ZXN0LlxuICAgKiBEZWZhdWx0OiB0aGUgYnJvd3NlciBsYW5ndWFnZSAoYG5hdmlnYXRvci5sYW5ndWFnZWApLCBlbHNlIGBcImVuLVVTXCJgLlxuICAgKi9cbiAgbGFuZ3VhZ2U/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBTdGFibGUgaWQgZm9yIHRoaXMgdmlzaXRvciwga2VwdCBieSB0aGUgaG9zdCBhY3Jvc3MgcGFnZSBsb2Fkcy4gUmlkZXMgb25cbiAgICogdGVsZW1ldHJ5IGV2ZW50cyBzbyBzZWFyY2hlcyBjYW4gYmUgam9pbmVkIHRvIHdoYXQgdGhlIHZpc2l0b3IgZG9lc1xuICAgKiBhZnRlcndhcmRzLiBNdXN0IGJlIGEgVVVJRCB2NDsgb21pdCB0byBzZW5kIG5vbmUuIEEgZnVuY3Rpb24gaXMgY2FsbGVkXG4gICAqIG9ubHkgb25jZSB0aGUgc2VydmVyIGhhcyBmdW5uZWwgdGVsZW1ldHJ5IG9uLlxuICAgKi9cbiAgdmlzaXRvcklkPzogc3RyaW5nIHwgKCgpID0+IHN0cmluZyB8IHVuZGVmaW5lZCk7XG4gIC8qKiBQZXItc3VnZ2VzdGlvbi10eXBlIGNsaWVudC1zaWRlIG9wdGlvbiBvdmVycmlkZXMuICovXG4gIG9wdGlvbk92ZXJyaWRlcz86IE9wdGlvbk92ZXJyaWRlcztcbiAgLyoqIFdoZW4gdHJ1ZSwgY29tcGxldGVkIHBhcmFtcycgbGl0ZXJhbCB0ZXh0IGlzIG9taXR0ZWQgZnJvbSBBUEkgcmVxdWVzdHMuICovXG4gIG1hc2tDb21wbGV0ZWRUZXh0PzogYm9vbGVhbjtcbiAgLyoqIE51bWJlciBvZiBjb2x1bW5zIGluIHRoZSBkcm9wZG93biBncmlkLiBEZWZhdWx0OiAyLiAqL1xuICBjb2x1bW5zPzogbnVtYmVyO1xuICAvKipcbiAgICogV2hlcmUgdGhlIGRyb3Bkb3duIG9wZW5zIHJlbGF0aXZlIHRvIHRoZSBpbnB1dC4gRGVmYXVsdDogXCJiZWxvd1wiLlxuICAgKlxuICAgKiBSZWFkIGJ5IHRoZSBrZXlib2FyZCBjb250cm9sbGVyIHRvIGRlY2lkZSB3aGljaCB2ZXJ0aWNhbC1hcnJvdyBrZXkgb3BlbnNcbiAgICogdGhlIGRyb3Bkb3duIGZyb20gdGhlIGlucHV0IOKAlCBBcnJvd0Rvd24gd2hlbiB0aGUgZHJvcGRvd24gaXMgYmVsb3csXG4gICAqIEFycm93VXAgd2hlbiBpdCdzIGFib3ZlLlxuICAgKi9cbiAgb3B0aW9uc1Bvc2l0aW9uPzogXCJhYm92ZVwiIHwgXCJiZWxvd1wiO1xuICAvKipcbiAgICogV2hlbiB0aGUgZHJvcGRvd24gYXBwZWFycy4gXCJhdXRvXCIgKGRlZmF1bHQpIHNob3dzIHdoZW4gb3B0aW9ucyBhcmVcbiAgICogYXZhaWxhYmxlOyBcIm1hbnVhbFwiIHNob3dzIG9ubHkgb24gcGlsbCB0YXA7IFwiaGlkZGVuXCIgbmV2ZXIgc2hvd3MuXG4gICAqL1xuICBkcm9wZG93blRyaWdnZXI/OiBcImF1dG9cIiB8IFwibWFudWFsXCIgfCBcImhpZGRlblwiO1xuICAvKiogV2hlbiB0cnVlIChkZWZhdWx0KSwgdGhlIGRyb3Bkb3duIGNsb3NlcyBpZiB0aGUgaW5wdXQgbG9zZXMgZm9jdXMuICovXG4gIGNsb3NlRHJvcGRvd25PbkJsdXI/OiBib29sZWFuO1xuICAvKiogV2hlbiB0cnVlIChkZWZhdWx0KSwgbm9uLXRhcHBhYmxlIG9wdGlvbnMgcmVuZGVyIGFsb25nc2lkZSB0YXBwYWJsZSBvbmVzLiAqL1xuICBzaG93Tm9uVGFwcGFibGVPcHRpb25zPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIFNESyBzdXJmYWNlIGlkZW50aWZpZXIg4oCUIHNlbnQgYXMgbWV0YS5zb3VyY2Ugb24gYm90aCAvYXBpL3N1Z2dlc3QgYW5kXG4gICAqIHRlbGVtZXRyeSBldmVudHMuIFNldCBhdXRvbWF0aWNhbGx5IHRvIFwiZnVsbC1zZGtcIiBieSB0aGUgVGllciAxXG4gICAqIGA8YWktYXV0b2NvbXBsZXRlPmAgY29tcG9uZW50LiBEZWZhdWx0cyB0byBcImhlYWRsZXNzLXNka1wiLlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHNvdXJjZT86IFwiZnVsbC1zZGtcIiB8IFwiaGVhZGxlc3Mtc2RrXCI7XG4gIC8qKiBDYWxsZWQgd2hlbiB0aGUgdXNlciBzdWJtaXRzIChFbnRlciBrZXkgb3IgYHN1Ym1pdCgpYCBhY3Rpb24pLiAqL1xuICBvblN1Ym1pdD86IChyZXN1bHQ6IEF1dG9jb21wbGV0ZVJlc3VsdCkgPT4gdm9pZDtcbiAgLyoqXG4gICAqIENhbGxlZCBhZnRlciBldmVyeSBzdWNjZXNzZnVsIHN1Z2dlc3Rpb24gcm91bmQtdHJpcCB3aXRoIHRoZSBzdHJ1Y3R1cmVkXG4gICAqIHF1ZXJ5IGFzIHRoZSBTREsgbm93IHVuZGVyc3RhbmRzIGl0IOKAlCB0aGUgc2FtZSBgQXV0b2NvbXBsZXRlUmVzdWx0YCBzaGFwZVxuICAgKiBgb25TdWJtaXRgIGRlbGl2ZXJzLCBzbyBhIGNvbnN1bWVyIGNhbiBtaXJyb3IgdGhlIHF1ZXJ5IGFzIGl0IGlzIGJ1aWx0XG4gICAqIChhIGxpdmUgcHJldmlldywgYSBkcmFmdCwgYW5hbHl0aWNzKSB3aXRob3V0IHdhaXRpbmcgZm9yIHN1Ym1pdC5cbiAgICpcbiAgICogRmlyZXMgb25jZSBwZXIgcmVzcG9uc2UgdGhhdCB3YXMgYXBwbGllZCwgaW5jbHVkaW5nIHRoZSBpbml0aWFsIHJlcXVlc3RcbiAgICogb24gY29uc3RydWN0aW9uIChhbiBlbXB0eSByZXN1bHQpLiBEb2VzIG5vdCBmaXJlIGZvciBhIHJlcXVlc3QgdGhhdFxuICAgKiBmYWlsZWQsIHdhcyBhYm9ydGVkLCBvciB3YXMgc3VwZXJzZWRlZCBiZWZvcmUgaXQgcmV0dXJuZWQsIGFuZCBub3RoaW5nXG4gICAqIGZpcmVzIGZvciBhIGtleXN0cm9rZSB0aGF0IGhhc24ndCBiZWVuIHNlbnQgeWV0IOKAlCByZWFkIGBnZXRSZXN1bHQoKWAgZm9yXG4gICAqIHRoZSBjdXJyZW50IHZhbHVlIG9uIGRlbWFuZC5cbiAgICovXG4gIG9uUmVzdWx0PzogKHJlc3VsdDogQXV0b2NvbXBsZXRlUmVzdWx0KSA9PiB2b2lkO1xuICAvKiogQ2FsbGVkIHdoZW4gYSBmZXRjaCBmYWlscy4gKi9cbiAgb25FcnJvcj86IChlcnJvcjogRXJyb3IpID0+IHZvaWQ7XG4gIC8qKiBDYWxsZWQgd2hlbiB0aGUgZWRpdG9yIHRleHQgY2hhbmdlcyAoY29udHJvbGxlZC1tb2RlIHNpZ25hbCkuICovXG4gIG9uQ2hhbmdlPzogKHRleHQ6IHN0cmluZykgPT4gdm9pZDtcbiAgLyoqIENhbGxlZCB3aGVuIGNvbXBsZXRlZCBwYXJhbXMgY2hhbmdlIChjb250cm9sbGVkLW1vZGUgc2lnbmFsKS4gKi9cbiAgb25QYXJhbXNDaGFuZ2U/OiAocGFyYW1zOiBDb21wbGV0ZWRQYXJhbVN0YXRlW10pID0+IHZvaWQ7XG4gIC8qKiBDYWxsZWQgd2hlbiB0aGUgaW5wdXQgZ2FpbnMgZm9jdXMuICovXG4gIG9uRm9jdXM/OiAoKSA9PiB2b2lkO1xuICAvKiogQ2FsbGVkIHdoZW4gdGhlIGlucHV0IGxvc2VzIGZvY3VzLiAqL1xuICBvbkJsdXI/OiAoKSA9PiB2b2lkO1xuICAvKipcbiAgICogV2hlbiB0cnVlIChkZWZhdWx0KSwgdGhlIGRyb3Bkb3duIHJlbmRlcnMgYSBob3Jpem9udGFsIHJvdyBvZiBwcm9kdWN0XG4gICAqIGNhcmRzIGJlbG93IHRoZSBvcHRpb25zIGdyaWQgd2hlbmV2ZXIgaXQgaGFzIHByb2R1Y3RzIHRvIHNob3c6IGJ5IGRlZmF1bHRcbiAgICogdGhlIGl0ZW1zIHRoZSBgL3N1Z2dlc3RgIHJlc3BvbnNlIHJlcG9ydHMgYXMgbWF0Y2hpbmcgdGhlIHF1ZXJ5LCBvciB0aGVcbiAgICogcmVzdWx0cyBvZiBhIGN1c3RvbSBgcHJvZHVjdHNgIHNlYXJjaC4gU2V0IHRvIGZhbHNlIHRvIHJlbmRlciBubyBzdHJpcFxuICAgKiBhbmQgcnVuIG5vIGN1c3RvbSBzZWFyY2guXG4gICAqL1xuICBzaG93UHJvZHVjdHM/OiBib29sZWFuO1xuICAvKipcbiAgICogQ3VzdG9tIHNvdXJjZSBmb3IgdGhlIHByb2R1Y3Qgc3RyaXAuIE9taXQgaXQgYW5kIHRoZSBzdHJpcCBzaG93cyB0aGVcbiAgICogaXRlbXMgdGhlIGAvc3VnZ2VzdGAgcmVzcG9uc2UgaXRzZWxmIHJlcG9ydHMgYXMgbWF0Y2hpbmcgdGhlIHF1ZXJ5LCB3aXRoXG4gICAqIG5vIGV4dHJhIHJlcXVlc3QuIFNldCBpdCBhbmQgdGhlIGRyb3Bkb3duIGlzIGZlZCBieSB0aGUgaW50ZWdyYXRpb24ncyBvd25cbiAgICogc2VhcmNoIGVuZHBvaW50IG9uIHRoZSBTREsncyBleGlzdGluZyBmZXRjaCBjYWRlbmNlIGluc3RlYWQ7IHRoZSBzZXJ2ZXInc1xuICAgKiBpdGVtcyBhcmUgdGhlbiBub3QgcmVuZGVyZWQuXG4gICAqL1xuICBwcm9kdWN0cz86IFByb2R1Y3RzQ29uZmlnO1xuICAvKipcbiAgICogQ2FsbGVkIHdoZW4gdGhlIHVzZXIgYWN0aXZhdGVzIGEgcHJvZHVjdCBjYXJkLiBUaGUgU0RLIGRvZXMgbm90IG5hdmlnYXRlIOKAlFxuICAgKiB0aGUgaW50ZWdyYXRpb24gZGVjaWRlcyB3aGF0IGEgc2VsZWN0aW9uIG1lYW5zLiBNb2RpZmllciAvIG1pZGRsZSBjbGlja3NcbiAgICogYXJlIGxlZnQgdG8gdGhlIGJyb3dzZXIgKGNtZC1jbGljayBzdGlsbCBvcGVucyBhIHRhYikgYW5kIGRvbid0IGZpcmUgdGhpcy5cbiAgICovXG4gIG9uUHJvZHVjdFNlbGVjdD86IChwcm9kdWN0OiBQcm9kdWN0KSA9PiB2b2lkO1xuICAvKiogSW5pdGlhbCBjb250cm9sbGVkIHRleHQgdmFsdWUuICovXG4gIHZhbHVlPzogc3RyaW5nO1xuICAvKiogSW5pdGlhbCBjb250cm9sbGVkIGNvbXBsZXRlZCBwYXJhbXMuICovXG4gIGNvbXBsZXRlZFBhcmFtcz86IENvbXBsZXRlZFBhcmFtU3RhdGVbXTtcbiAgLyoqXG4gICAqIENhcmV0LXNldCBjYWxsYmFjay4gSW52b2tlZCBieSB0aGUgY29yZSB3aGVuIHJlLWVkaXQgLyBCYWNrc3BhY2UgZmxvd3NcbiAgICogbmVlZCB0aGUgZWRpdG9yIGNhcmV0IHBhcmtlZCBhdCBhIHNwZWNpZmljIHBsYWluLXRleHQgb2Zmc2V0LiBUaGUgVGllciAxXG4gICAqIGA8YWktYXV0b2NvbXBsZXRlPmAgY29tcG9uZW50IHdpcmVzIHRoaXMgZnJvbSBpdHMgZWRpdG9yIGhvc3Q7IGhlYWRsZXNzXG4gICAqIGNvbnN1bWVycyBjYW4gbGVhdmUgaXQgdW5zZXQuXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgc2V0Q3Vyc29yPzogKG9mZnNldDogbnVtYmVyKSA9PiB2b2lkO1xufVxuXG4vKipcbiAqIFN1YnNldCBvZiB7QGxpbmsgQUlBdXRvY29tcGxldGVDb250cm9sbGVyT3B0aW9uc30gdGhhdCBjYW4gYmUgY2hhbmdlZCBhZnRlclxuICogY29uc3RydWN0aW9uLiBFeGNsdWRlcyBldmVudCBjYWxsYmFja3MgKHRob3NlIGFyZSByZWdpc3RlcmVkIG9uY2UgYXRcbiAqIGNvbnN0cnVjdGlvbiDigJQgc2VlIHZhbmlsbGEgYENvcmVVcGRhdGVPcHRpb25zYCkuXG4gKlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgdHlwZSBBSUF1dG9jb21wbGV0ZUNvbnRyb2xsZXJVcGRhdGUgPSBQYXJ0aWFsPFxuICBPbWl0PFxuICAgIEFJQXV0b2NvbXBsZXRlQ29udHJvbGxlck9wdGlvbnMsXG4gICAgfCBcIm9uU3VibWl0XCJcbiAgICB8IFwib25SZXN1bHRcIlxuICAgIHwgXCJvbkVycm9yXCJcbiAgICB8IFwib25DaGFuZ2VcIlxuICAgIHwgXCJvblBhcmFtc0NoYW5nZVwiXG4gICAgfCBcIm9uRm9jdXNcIlxuICAgIHwgXCJvbkJsdXJcIlxuICAgIHwgXCJvblByb2R1Y3RTZWxlY3RcIlxuICAgIHwgXCJzZXRDdXJzb3JcIlxuICA+XG4+O1xuXG4vKipcbiAqIFNuYXBzaG90IG9mIHRoZSBjb250cm9sbGVyJ3MgcmVhY3RpdmUgc3RhdGUuIEVhY2ggZmllbGQgaXMgYWxzbyBleHBvc2VkIGFzXG4gKiBhIHN0YW5kLWFsb25lIG9ic2VydmFibGUgb24gdGhlIGNvbnRyb2xsZXIgKGUuZy4gYGNvbnRyb2xsZXIudGV4dCRgKS5cbiAqXG4gKiBgc3VnZ2VzdGlvblBpbGxzYCBtaXJyb3JzIFJlYWN0J3MgYHN1Z2dlc3Rpb25QaWxsc2Ag4oCUIHRoZSBhY3Rpb25hYmxlXG4gKiBzdWJzZXQgb2YgYHN1Z2dlc3Rpb25zYCByZWFkeSBmb3IgcGlsbCByZW5kZXJpbmcuIGBpc0xvYWRpbmdgIGlzIHRoZVxuICogVUktdmlzaWJsZSBsb2FkaW5nIGZsYWcgKHN1cHByZXNzZWQgZHVyaW5nIHRoZSBwb3N0LXNlbGVjdCBwcmVzc1xuICogYW5pbWF0aW9uIGFuZCBkdXJpbmcgcmUtZWRpdCwgd2hlcmUgY2FjaGVkIG9wdGlvbnMgc3RheSB2aXNpYmxlKS5cbiAqXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQUlBdXRvY29tcGxldGVDb250cm9sbGVyU3RhdGUge1xuICB0ZXh0OiBzdHJpbmc7XG4gIGNvbXBsZXRlZFBhcmFtczogQ29tcGxldGVkUGFyYW1TdGF0ZVtdO1xuICAvKipcbiAgICogU3VnZ2VzdGlvbnMgdGhlIHVzZXIgZGlzbWlzc2VkIHdpdGggdGhlIHNraXAga2V5ICjihpIpLiBOb3RoaW5nIHJlbmRlcnNcbiAgICogdGhlbSDigJQgcGFzcyB0aGVtIHRvIGBidWlsZFN1Ym1pdFJlc3VsdGAgc28gYSBoYW5kLXJvbGxlZCBzdWJtaXQgY2Fycmllc1xuICAgKiB0aGUgc2FtZSBgdGV4dDogXCJza2lwcGVkXCJgIGVudHJpZXMgdGhlIFNESydzIG93biByZXF1ZXN0cyBkby5cbiAgICovXG4gIHNraXBwZWRQYXJhbXM6IFNraXBwZWRQYXJhbVN0YXRlW107XG4gIC8qKlxuICAgKiBQYXJhbXMgdGhlIHNlcnZlciBpZGVudGlmaWVkIGluIHRoZSB1c2VyJ3Mgb3duIHdvcmRzLiBBbHJlYWR5IHJlbmRlcmVkXG4gICAqIHRocm91Z2ggYHNlZ21lbnRzYDsgZXhwb3NlZCBzbyBhIGhhbmQtcm9sbGVkIHN1Ym1pdCBjYW4gcGFzcyB0aGVtIHRvXG4gICAqIGBidWlsZFN1Ym1pdFJlc3VsdGAgYW5kIHJlcG9ydCB0aGUgc2FtZSBgaWRlbnRpZmllZF9wYXJhbXNgIHRoZSBTREsnc1xuICAgKiBvd24gcmVzdWx0cyBjYXJyeS5cbiAgICovXG4gIGlkZW50aWZpZWRQYXJhbXM6IElkZW50aWZpZWRQYXJhbVN0YXRlW107XG4gIHN1Z2dlc3Rpb25QaWxsczogU3VnZ2VzdGlvbltdO1xuICBzZWdtZW50czogU2VnbWVudFtdO1xuICBuZXdQYXJhbUlkOiBzdHJpbmcgfCBudWxsO1xuICBzdWdnZXN0aW9uczogU3VnZ2VzdGlvbltdO1xuICAvKipcbiAgICogV2hhdCB0aGUgcHJvZHVjdCBzdHJpcCBzaG93czogdGhlIGl0ZW1zIHRoZSBsYXRlc3QgYC9zdWdnZXN0YCByZXNwb25zZVxuICAgKiByZXBvcnRlZCBhcyBtYXRjaGluZyB0aGUgcXVlcnksIG9yIHRoZSByZXN1bHRzIG9mIGEgY3VzdG9tIGBwcm9kdWN0c2BcbiAgICogc2VhcmNoLiBBbHJlYWR5IGZvbGRlZCBpbnRvIHRoZSBkcm9wZG93biBzbmFwc2hvdCDigJQgcmVhZCBpdCBoZXJlIG9ubHlcbiAgICogd2hlbiByZW5kZXJpbmcgeW91ciBvd24gc3RyaXAuXG4gICAqL1xuICBwcm9kdWN0czogUHJvZHVjdFtdO1xuICAvKipcbiAgICogVGhlIGNhdGFsb2cgZ3JvdW5kaW5nIHJlcG9ydCB0aGUgbGF0ZXN0IHJlc3BvbnNlIGNhcnJpZWQsIG9yIG51bGwgd2hlbiBpdFxuICAgKiBjYXJyaWVkIG5vbmU6IHdoaWNoIG9mIHRoZSBxdWVyeSdzIGNvbnN0cmFpbnRzIHRoZSBjYXRhbG9nIGFwcGxpZWQsIHdoaWNoXG4gICAqIGl0IGRyb3BwZWQsIGFuZCBob3cgbWFueSBpdGVtcyAoYW5kIHdoaWNoKSB0aGUgYXBwbGllZCBvbmVzIGxlZnRcbiAgICogc3RhbmRpbmcuIE51bGwgaXMgXCJubyBuZXdzXCIsIG5vdCBhbiBlbXB0eSBjYXRhbG9nLlxuICAgKi9cbiAgY3VzdG9tRmllbGRzOiBDdXN0b21GaWVsZHNSZXBvcnQgfCBudWxsO1xuICBhY3RpdmVJbmRleDogbnVtYmVyO1xuICBpc0xvYWRpbmc6IGJvb2xlYW47XG4gIGlzUmVhZHk6IGJvb2xlYW47XG4gIGlzRm9jdXNlZDogYm9vbGVhbjtcbiAgaXNEcm9wZG93bk9wZW46IGJvb2xlYW47XG4gIHBsYWNlaG9sZGVyVGV4dDogc3RyaW5nO1xuICBlcnJvcjogRXJyb3IgfCBudWxsO1xuICBlZGl0aW5nUGFyYW06IENvbXBsZXRlZFBhcmFtU3RhdGUgfCBudWxsO1xuICAvKipcbiAgICogU2V0IHdoaWxlIHRoZSB1c2VyIGlzIHBpY2tpbmcgYSBkYXRlIGZvciBhIHNwYW4gdGhlIHNlcnZlciBpZGVudGlmaWVkIGFzXG4gICAqIG9uZSDigJQgXCJzZXB0ZW1iZXIgNXRoXCIgaW4gXCJmbHkgdG8gdmVnYXMgb24gc2VwdGVtYmVyIDV0aFwiLiBOdWxsIG90aGVyd2lzZS5cbiAgICovXG4gIGVkaXRpbmdJZGVudGlmaWVkOiB7XG4gICAgaWQ6IHN0cmluZztcbiAgICBwYXJhbWV0ZXI6IHN0cmluZztcbiAgICBhbmNob3I6IG51bWJlcjtcbiAgICB0YWlsOiBudW1iZXI7XG4gICAgLyoqIFRoZSBkYXRlIHRoZSBzcGFuIHdhcyByZWFkIGFzLCBvciBhIHJhbmdlJ3Mgc3RhcnQuIE51bGwgd2hlbiBpdCBjb3VsZG4ndCBiZSByZWFkLiAqL1xuICAgIGlzbzogc3RyaW5nIHwgbnVsbDtcbiAgICAvKiogVGhlIG90aGVyIGVuZCwgd2hlbiB0aGUgc3BhbiByZWFkcyBhcyBhIHJhbmdlIHJhdGhlciB0aGFuIGFzIG9uZSBkYXkuICovXG4gICAgaXNvRW5kOiBzdHJpbmcgfCBudWxsO1xuICAgIC8qKiBXaGV0aGVyIHRoYXQgc3BhbiBpcyBhbnN3ZXJlZCBieSBhIGNhbGVuZGFyLCBvciBhIGNhbGVuZGFyIGluIHR3byB0YXBzLiAqL1xuICAgIGZvcm1hdDogRm9ybWF0VHlwZTtcbiAgfSB8IG51bGw7XG4gIGVkaXRpbmdBbmNob3I6IG51bWJlciB8IG51bGw7XG4gIGNhcmV0T2Zmc2V0OiBudW1iZXIgfCBudWxsO1xufVxuXG4vKipcbiAqIENvbXBvc2l0ZSBzdGF0ZSBzaGFwZSBmb3IgdGhlIGRyb3Bkb3duIHZpZXcgbGF5ZXIuIFRpZXIgMiBjb25zdW1lcnMgYmluZFxuICogdGhlIGRyb3Bkb3duIGNvbXBvbmVudCB0byB0aGlzIHNuYXBzaG90OyBUaWVyIDEgdXNlcyB0aGUgc2FtZSBzaGFwZVxuICogaW50ZXJuYWxseS5cbiAqXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQUlBdXRvY29tcGxldGVEcm9wZG93blN0YXRlIHtcbiAgLyoqIEFjdGl2ZSBzdWdnZXN0aW9uICsgZmlsdGVyZWQgb3B0aW9ucyB0byByZW5kZXIgaW4gdGhlIGdyaWQuICovXG4gIHN1Z2dlc3Rpb25zOiBTdWdnZXN0aW9uW107XG4gIC8qKiBDdXJyZW50bHkgaGlnaGxpZ2h0ZWQgb3B0aW9uIGluZGV4LiAtMSB3aGVuIG5vbmUuICovXG4gIGFjdGl2ZUluZGV4OiBudW1iZXI7XG4gIC8qKiBXaGV0aGVyIHRoZSBkcm9wZG93biBzaG91bGQgYmUgdmlzaWJsZS4gKi9cbiAgaXNPcGVuOiBib29sZWFuO1xuICAvKiogUGlsbHMgdG8gcmVuZGVyIGluIHRoZSBkcm9wZG93bidzIHBpbGxiYXIgKHJlLWVkaXQgcGlsbCBvciBhbGwgc3VnZ2VzdGlvbiBwaWxscykuICovXG4gIHBpbGxzOiBTdWdnZXN0aW9uW107XG4gIC8qKiBXaGV0aGVyIHRoZSBhY3RpdmUgcGlsbCByZW5kZXJzIHNlbGVjdGVkIChmdWxsIG9wYWNpdHkpIHZzLiB0aGUgYGZpcnN0YCB0aWVyLiAqL1xuICBpc0FjdGl2ZVBpbGxTZWxlY3RlZDogYm9vbGVhbjtcbiAgLyoqIFRydWUgd2hlbiB0aGUgZHJvcGRvd24gc2hvdWxkIHJlbmRlciBpdHMgbG9hZGluZyBza2VsZXRvbi4gKi9cbiAgaXNMb2FkaW5nOiBib29sZWFuO1xuICAvKiogV2hldGhlciB0aGUgaW5wdXQgaGFzIG5vIHR5cGVkIHRleHQg4oCUIHRoZSBzb2xlIHN0YXRlIHRoYXQgc3VyZmFjZXMgXCJ0YWIgdG8gc2VsZWN0XCIgaW4gdGhlIGZvb3RlciBoaW50LiAqL1xuICBpc0lucHV0RW1wdHk6IGJvb2xlYW47XG4gIC8qKiBQcm9kdWN0IGNhcmRzIHRvIHJlbmRlciBiZWxvdyB0aGUgb3B0aW9ucyBncmlkLiBFbXB0eSByZW5kZXJzIG5vIHN0cmlwLiAqL1xuICBwcm9kdWN0czogUHJvZHVjdFtdO1xuICAvKipcbiAgICogVHJ1ZSB3aGlsZSBhIGNvbXBsZXRlZCBwYXJhbSBpcyBiZWluZyByZS1lZGl0ZWQuIFRoZSBwaWxsYmFyIHRoZW4gc2hvd3NcbiAgICogdGhlIHBhcmFtIGJlaW5nIHJlLWVkaXRlZCDigJQgbm90IHNraXBwYWJsZSDigJQgc28gdGhlIHNraXAgYnV0dG9uIGhpZGVzLlxuICAgKiBPcHRpb25hbCAodW5kZWZpbmVkIOKHkiBub3QgZWRpdGluZykgc28gZXhpc3RpbmcgY29uc3VtZXIgY29kZSBjb25zdHJ1Y3RpbmdcbiAgICogdGhpcyBzdGF0ZSDigJQgdGVzdCBmaXh0dXJlcywgZmFrZSBjb250cm9sbGVycyDigJQga2VlcHMgY29tcGlsaW5nIGFjcm9zcyB0aGVcbiAgICogbWlub3IgYnVtcCB0aGF0IGludHJvZHVjZWQgaXQuXG4gICAqL1xuICBpc0VkaXRpbmc/OiBib29sZWFuO1xuICAvKipcbiAgICogVHJ1ZSBmb3IgdGhlIH4xNzBtcyB3aW5kb3cgYWZ0ZXIgYW4gb3B0aW9uIGlzIHNlbGVjdGVkLCB3aGlsZSB0aGUgYW5zd2VyZWRcbiAgICogc3VnZ2VzdGlvbiBhbmltYXRlcyBvdXQuIGBpc0xvYWRpbmdgIGlzIGRlbGliZXJhdGVseSBzdXBwcmVzc2VkIGluIHRoYXRcbiAgICogd2luZG93LCBidXQgdGhlIGNvcmUncyBgc2tpcEFjdGl2ZVBpbGwoKWAgbm8tb3BzIGluIGl0IOKAlCB0aGUgc2tpcCBidXR0b25cbiAgICogcmVuZGVycyBkaXNhYmxlZCBvZmYgdGhpcyBmbGFnIGluc3RlYWQgb2Ygc3dhbGxvd2luZyBjbGlja3Mgc2lsZW50bHkuXG4gICAqIE9wdGlvbmFsICh1bmRlZmluZWQg4oeSIGZhbHNlKSBmb3IgdGhlIHNhbWUgY29tcGlsZS1jb21wYXQgcmVhc29uIGFzXG4gICAqIGBpc0VkaXRpbmdgLlxuICAgKi9cbiAgaW5TZWxlY3Rpb25BbmltYXRpb24/OiBib29sZWFuO1xuICAvKipcbiAgICogVHJ1ZSB3aGlsZSB0aGUgbG9hZGluZyBza2VsZXRvbiBmYWRlcyBvdXQgYmVmb3JlIHRoZSByZXNwb25zZSdzIG9wdGlvbnNcbiAgICogcmVwbGFjZSBpdC4gT3B0aW9uYWwgKHVuZGVmaW5lZCDih5IgZmFsc2UpIGZvciB0aGUgc2FtZSBjb21waWxlLWNvbXBhdFxuICAgKiByZWFzb24gYXMgYGlzRWRpdGluZ2AuXG4gICAqL1xuICBza2VsZXRvbkV4aXRpbmc/OiBib29sZWFuO1xuICAvKipcbiAgICogV2hlcmUgdGhlIGRyb3Bkb3duIG9wZW5zIHJlbGF0aXZlIHRvIHRoZSBpbnB1dCDigJQgbWlycm9ycyB0aGUgY29udHJvbGxlcidzXG4gICAqIGBvcHRpb25zUG9zaXRpb25gIG9wdGlvbi4gYDxhaS1hdXRvY29tcGxldGUtZHJvcGRvd24+YCByZWFkcyBpdCBmcm9tIGhlcmUsIHNvXG4gICAqIHBsYWNlbWVudCBpcyBjb25maWd1cmVkIG9uY2Ugb24gdGhlIGNvbnRyb2xsZXIgKG5vIHNlcGFyYXRlIGlucHV0IHRvIHN5bmMpLlxuICAgKi9cbiAgb3B0aW9uc1Bvc2l0aW9uOiBcImFib3ZlXCIgfCBcImJlbG93XCI7XG4gIC8qKlxuICAgKiBIb3cgdGhlIGFjdGl2ZSBwaWxsIGlzIGFuc3dlcmVkLiBgXCJkYXRlXCJgIGFuZCBgXCJkYXRlLXJhbmdlXCJgIHJlbmRlciBhXG4gICAqIGNhbGVuZGFyIGluIHBsYWNlIG9mIHRoZSBvcHRpb25zIGdyaWQsIGFuZCBgc3VnZ2VzdGlvbnNbMF0ub3B0aW9uc2AgdGhlblxuICAgKiBjYXJyaWVzIHRoYXQgbW9udGgncyBjZWxscyByYXRoZXIgdGhhbiB0aGUgcGFyYW1ldGVyJ3Mgb3duIG9wdGlvbnMg4oCUIHRoZVxuICAgKiBjb3JlIHN3YXBzIHRoZW0gYmVmb3JlIHRoZXkgcmVhY2ggaGVyZS4gQSBgXCJkYXRlLXJhbmdlXCJgIHBhcmFtZXRlciBpc1xuICAgKiBhbnN3ZXJlZCBieSB0d28gdGFwcyBvZiB0aGF0IGNhbGVuZGFyLCBhIHN0YXJ0IGFuZCBhbiBlbmQsIGNvbW1pdHRlZCBhcyBvbmVcbiAgICogc3Bhbi4gT3B0aW9uYWwgKHVuZGVmaW5lZCDih5IgYFwib3B0aW9uc1wiYCkgZm9yIHRoZSBzYW1lIGNvbXBpbGUtY29tcGF0IHJlYXNvblxuICAgKiBhcyBgaXNFZGl0aW5nYC5cbiAgICovXG4gIGZvcm1hdFR5cGU/OiBGb3JtYXRUeXBlO1xuICAvKiogVGhlIG1vbnRoIHRoZSBjYWxlbmRhciBzaG93cy4gTnVsbC91bmRlZmluZWQgdW5sZXNzIGBmb3JtYXRUeXBlYCBpcyBhIGNhbGVuZGFyIG9uZS4gKi9cbiAgZGF0ZVZpZXc/OiBEYXRlTW9udGhWaWV3IHwgbnVsbDtcbiAgLyoqIGBZWVlZLU1NLUREYCBhbHJlYWR5IGhlbGQgYnkgdGhlIHBhcmFtIGJlaW5nIHJlLWVkaXRlZCwgc28gaXRzIGNlbGwgcmVhZHMgYXMgdGhlIGN1cnJlbnQgYW5zd2VyLiAqL1xuICBzZWxlY3RlZERhdGVJc28/OiBzdHJpbmcgfCBudWxsO1xuICAvKiogQm90aCBlbmRzIG9mIGEgcmFuZ2UgcGFyYW0gYmVpbmcgcmUtZWRpdGVkLCBzbyBib3RoIGNlbGxzIHJlYWQgYXMgdGhlIGN1cnJlbnQgYW5zd2VyLiAqL1xuICBzZWxlY3RlZERhdGVSYW5nZT86IERhdGVSYW5nZSB8IG51bGw7XG4gIC8qKiBUaGUgZmlyc3QgZW5kIG9mIGEgcmFuZ2UgcGlja2VkIHNvIGZhciwgd2hpbGUgdGhlIHVzZXIgY2hvb3NlcyB0aGUgc2Vjb25kLiAqL1xuICBkYXRlUmFuZ2VTdGFydD86IHN0cmluZyB8IG51bGw7XG59XG4iXX0=
@@ -2113,6 +2113,7 @@ class AIAutocompleteComponent {
2113
2113
  this.controller = new AIAutocompleteController({
2114
2114
  apiConfig: this.apiConfig,
2115
2115
  additionalContext: this.additionalContext,
2116
+ language: this.language,
2116
2117
  visitorId: this.visitorId,
2117
2118
  optionOverrides: this.optionOverrides,
2118
2119
  maskCompletedText: this.maskCompletedText,
@@ -2201,6 +2202,7 @@ class AIAutocompleteComponent {
2201
2202
  // Reactive options
2202
2203
  if (changes["apiConfig"] ||
2203
2204
  changes["additionalContext"] ||
2205
+ changes["language"] ||
2204
2206
  changes["visitorId"] ||
2205
2207
  changes["optionOverrides"] ||
2206
2208
  changes["dropdownTrigger"] ||
@@ -2212,6 +2214,7 @@ class AIAutocompleteComponent {
2212
2214
  this.controller.update({
2213
2215
  apiConfig: this.apiConfig,
2214
2216
  additionalContext: this.additionalContext,
2217
+ language: this.language,
2215
2218
  visitorId: this.visitorId,
2216
2219
  optionOverrides: this.optionOverrides,
2217
2220
  dropdownTrigger: this.dropdownTrigger,
@@ -2414,7 +2417,7 @@ class AIAutocompleteComponent {
2414
2417
  }
2415
2418
  }
2416
2419
  AIAutocompleteComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: AIAutocompleteComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
2417
- AIAutocompleteComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: AIAutocompleteComponent, isStandalone: true, selector: "ai-autocomplete", inputs: { apiConfig: "apiConfig", additionalContext: "additionalContext", visitorId: "visitorId", optionOverrides: "optionOverrides", maskCompletedText: "maskCompletedText", columns: "columns", pillPlacement: "pillPlacement", mode: "mode", optionsPosition: "optionsPosition", animations: "animations", dropdownTrigger: "dropdownTrigger", closeDropdownOnBlur: "closeDropdownOnBlur", showNonTappableOptions: "showNonTappableOptions", showSkipButton: "showSkipButton", showOptionIcons: "showOptionIcons", showOptionImages: "showOptionImages", showOptionCounts: "showOptionCounts", productsLayout: "productsLayout", productImageFallback: "productImageFallback", showChipIcons: "showChipIcons", showChipImages: "showChipImages", autoFocus: "autoFocus", value: "value", completedParams: "completedParams", showProducts: "showProducts", products: "products", submitButton: "submitButton", resetOnSubmit: "resetOnSubmit" }, outputs: { submitted: "submitted", resultChange: "resultChange", errored: "errored", valueChange: "valueChange", completedParamsChange: "completedParamsChange", focused: "focused", blurred: "blurred", productSelect: "productSelect" }, providers: [
2420
+ AIAutocompleteComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: AIAutocompleteComponent, isStandalone: true, selector: "ai-autocomplete", inputs: { apiConfig: "apiConfig", additionalContext: "additionalContext", language: "language", visitorId: "visitorId", optionOverrides: "optionOverrides", maskCompletedText: "maskCompletedText", columns: "columns", pillPlacement: "pillPlacement", mode: "mode", optionsPosition: "optionsPosition", animations: "animations", dropdownTrigger: "dropdownTrigger", closeDropdownOnBlur: "closeDropdownOnBlur", showNonTappableOptions: "showNonTappableOptions", showSkipButton: "showSkipButton", showOptionIcons: "showOptionIcons", showOptionImages: "showOptionImages", showOptionCounts: "showOptionCounts", productsLayout: "productsLayout", productImageFallback: "productImageFallback", showChipIcons: "showChipIcons", showChipImages: "showChipImages", autoFocus: "autoFocus", value: "value", completedParams: "completedParams", showProducts: "showProducts", products: "products", submitButton: "submitButton", resetOnSubmit: "resetOnSubmit" }, outputs: { submitted: "submitted", resultChange: "resultChange", errored: "errored", valueChange: "valueChange", completedParamsChange: "completedParamsChange", focused: "focused", blurred: "blurred", productSelect: "productSelect" }, providers: [
2418
2421
  {
2419
2422
  provide: NG_VALUE_ACCESSOR,
2420
2423
  // eslint-disable-next-line @typescript-eslint/no-use-before-define
@@ -2442,6 +2445,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
2442
2445
  type: Input
2443
2446
  }], additionalContext: [{
2444
2447
  type: Input
2448
+ }], language: [{
2449
+ type: Input
2445
2450
  }], visitorId: [{
2446
2451
  type: Input
2447
2452
  }], optionOverrides: [{