@magicx-eng/ai-autocomplete-angular 0.28.4 → 0.29.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
@@ -403,6 +403,7 @@ Standalone-first apps don't need this — import the components/directive direct
403
403
  | Input | Type | Default | Description |
404
404
  |---|---|---|---|
405
405
  | `apiConfig` | `APIConfig` | — | Runtime API configuration (see below). |
406
+ | `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). |
406
407
  | `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. |
407
408
  | `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). |
408
409
  | `maskCompletedText` | `boolean` | `false` | When `true`, omits completed params' literal text from API requests (for masking PII/sensitive values from the server). |
@@ -762,7 +763,7 @@ ac.destroy();
762
763
 
763
764
  #### Constructor options
764
765
 
765
- Accepts the same shape as `<ai-autocomplete>`'s inputs (`apiConfig`, `additionalContext`, `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).
766
+ 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).
766
767
 
767
768
  #### State observables
768
769
 
@@ -798,6 +799,7 @@ Every observable is gated by `distinctUntilChanged` + `shareReplay({ bufferSize:
798
799
  | Method | Description |
799
800
  |---|---|
800
801
  | `reset()` | Clear all state, rotate `session_id`, and re-fetch. Call after submit. |
802
+ | `recordSubmit(result)` | Record a submit from a button you render. Enter is recorded for you; call this once per button submit. |
801
803
  | `selectOption(option)` | Pick a dropdown option (or replace the re-edited param if in re-edit mode). |
802
804
  | `selectProduct(product)` | Announce a product selection (fires `onProductSelect`). `<ai-autocomplete-dropdown>` calls this for you; hand-rolled strips call it themselves. Never navigates. |
803
805
  | `setActivePill(index)` | Promote the pill at `index` to active. |
@@ -1051,6 +1053,12 @@ The contract is simple: **after the user submits the query, call `reset()`**. Th
1051
1053
  The id is a plain UUID. Log it next to your own request logs if you want to
1052
1054
  correlate a user's report with the query that produced it.
1053
1055
 
1056
+ ### Visitor id and submits
1057
+
1058
+ Pass `visitorId` to tie searches to what the same visitor does later: a UUID v4 you keep across page loads (for example a first-party cookie), or a function that returns one. A function is called only when the id is needed, so it is safe to create the id lazily inside it.
1059
+
1060
+ Submits from Enter and from `<ai-autocomplete>`'s built-in button are recorded for you. If you render your own submit button (Tier 2), call `controller.recordSubmit(result)` from it, once per submit, with the result you pass to your own submit handler.
1061
+
1054
1062
  ## Option Overrides
1055
1063
 
1056
1064
  Supply the options for a parameter yourself instead of taking the server's. Each entry is keyed by the suggestion `type` and is a function of the phrase the user has typed for that parameter — return an array for a fixed or computed list, or a promise for one that lives behind a request (the dropdown shows its loading skeleton until it settles). Bind a component field, not an inline literal: the input is forwarded on reference change.
@@ -120,6 +120,7 @@ export class AIAutocompleteComponent {
120
120
  this.controller = new AIAutocompleteController({
121
121
  apiConfig: this.apiConfig,
122
122
  additionalContext: this.additionalContext,
123
+ visitorId: this.visitorId,
123
124
  optionOverrides: this.optionOverrides,
124
125
  maskCompletedText: this.maskCompletedText,
125
126
  columns: this.columns,
@@ -204,6 +205,7 @@ export class AIAutocompleteComponent {
204
205
  // Reactive options
205
206
  if (changes["apiConfig"] ||
206
207
  changes["additionalContext"] ||
208
+ changes["visitorId"] ||
207
209
  changes["optionOverrides"] ||
208
210
  changes["dropdownTrigger"] ||
209
211
  changes["optionsPosition"] ||
@@ -214,6 +216,7 @@ export class AIAutocompleteComponent {
214
216
  this.controller.update({
215
217
  apiConfig: this.apiConfig,
216
218
  additionalContext: this.additionalContext,
219
+ visitorId: this.visitorId,
217
220
  optionOverrides: this.optionOverrides,
218
221
  dropdownTrigger: this.dropdownTrigger,
219
222
  optionsPosition: this.optionsPosition,
@@ -346,18 +349,23 @@ export class AIAutocompleteComponent {
346
349
  * the React component uses — so the emitted query reflects whatever's in
347
350
  * the DOM right now, not a possibly-stale state snapshot.
348
351
  */
349
- handleSubmit(_result) {
352
+ // `fromButton`: the SDK records an Enter submit itself before it calls back
353
+ // here; a click on our own button never passes through it.
354
+ handleSubmit(_result, fromButton = false) {
350
355
  const editor = this.editorRef?.nativeElement;
351
356
  if (!editor)
352
357
  return;
353
358
  const text = extractPlainText(editor);
354
359
  const state = this.controller.getState();
355
360
  const params = this.completedParams ?? state.completedParams;
356
- this.submitted.emit(buildSubmitResult(text, params, state.skippedParams, {
361
+ const result = buildSubmitResult(text, params, state.skippedParams, {
357
362
  identifiedParams: state.identifiedParams,
358
363
  isReady: state.isReady,
359
364
  customFields: state.customFields,
360
- }));
365
+ });
366
+ if (fromButton)
367
+ this.controller.recordSubmit(result);
368
+ this.submitted.emit(result);
361
369
  if (this.resetOnSubmit)
362
370
  this.controller.reset();
363
371
  }
@@ -374,7 +382,7 @@ export class AIAutocompleteComponent {
374
382
  completed_params: [],
375
383
  identified_params: [],
376
384
  is_ready: state.isReady,
377
- });
385
+ }, true);
378
386
  }
379
387
  measurePillWrap() {
380
388
  const container = this.pillContainerRef?.nativeElement;
@@ -401,7 +409,7 @@ export class AIAutocompleteComponent {
401
409
  }
402
410
  }
403
411
  AIAutocompleteComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: AIAutocompleteComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
404
- AIAutocompleteComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: AIAutocompleteComponent, isStandalone: true, selector: "ai-autocomplete", inputs: { apiConfig: "apiConfig", additionalContext: "additionalContext", 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: [
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: [
405
413
  {
406
414
  provide: NG_VALUE_ACCESSOR,
407
415
  // eslint-disable-next-line @typescript-eslint/no-use-before-define
@@ -429,6 +437,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
429
437
  type: Input
430
438
  }], additionalContext: [{
431
439
  type: Input
440
+ }], visitorId: [{
441
+ type: Input
432
442
  }], optionOverrides: [{
433
443
  type: Input
434
444
  }], maskCompletedText: [{
@@ -521,4 +531,4 @@ function resolveInitialMode(mode) {
521
531
  return "dark";
522
532
  return window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light";
523
533
  }
524
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWktYXV0b2NvbXBsZXRlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvYWktYXV0b2NvbXBsZXRlL2FpLWF1dG9jb21wbGV0ZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9zcmMvbGliL2FpLWF1dG9jb21wbGV0ZS9haS1hdXRvY29tcGxldGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2xFLE9BQU8sRUFFTCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFFVCxZQUFZLEVBQ1osVUFBVSxFQUNWLEtBQUssRUFDTCxNQUFNLEVBQ04sTUFBTSxFQUlOLE1BQU0sRUFDTixXQUFXLEVBR1gsU0FBUyxFQUNULGlCQUFpQixHQUNsQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQTZCLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDOUUsT0FBTyxFQUlMLGlCQUFpQixFQUVqQixnQkFBZ0IsRUFDaEIsY0FBYyxFQU1kLGVBQWUsR0FDaEIsTUFBTSxxQ0FBcUMsQ0FBQztBQUM3QyxPQUFPLEVBQUUsK0JBQStCLEVBQUUsTUFBTSxnRUFBZ0UsQ0FBQztBQUNqSCxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUNwRixPQUFPLEVBQUUsaUNBQWlDLEVBQUUsTUFBTSwrQ0FBK0MsQ0FBQztBQUNsRyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUM5RSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxtREFBbUQsQ0FBQzs7O0FBRTFGOzs7Ozs7O0dBT0c7QUF3QkgsTUFBTSxPQUFPLHVCQUF1QjtJQXZCcEM7UUFxQ1csc0JBQWlCLEdBQUcsS0FBSyxDQUFDO1FBRW5DLHdEQUF3RDtRQUMvQyxr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QixNQUFNO2dCQVNZLFlBQVk7c0JBQTlCLE1BQU07Z0JBQ1ksT0FBTztzQkFBekIsTUFBTTtnQkFDWSxXQUFXO3NCQUE3QixNQUFNO2dCQUNZLHFCQUFxQjtzQkFBdkMsTUFBTTtnQkFDWSxPQUFPO3NCQUF6QixNQUFNO2dCQUNZLE9BQU87c0JBQXpCLE1BQU07Z0JBTVksYUFBYTtzQkFBL0IsTUFBTTtnQkFJbUMsWUFBWTtzQkFBckQsU0FBUzt1QkFBQyxXQUFXLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQUNBLFNBQVM7c0JBQWhELFNBQVM7dUJBQUMsUUFBUSxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTtnQkFDVixnQkFBZ0I7c0JBQTNDLFNBQVM7dUJBQUMsZUFBZTs7QUEwVjVCLFNBQVMsSUFBSTtJQUNYLG1DQUFtQztBQUNyQyxDQUFDO0FBRUQ7Ozs7O0dBS0c7QUFDSCxTQUFTLGtCQUFrQixDQUFDLElBQW9CO0lBQzlDLElBQUksSUFBSSxLQUFLLE1BQU07UUFBRSxPQUFPLElBQUksQ0FBQztJQUNqQyxJQUFJLE9BQU8sTUFBTSxLQUFLLFdBQVc7UUFBRSxPQUFPLE1BQU0sQ0FBQztJQUNqRCxPQUFPLE1BQU0sQ0FBQyxVQUFVLENBQUMsOEJBQThCLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDO0FBQ3RGLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tb25Nb2R1bGUsIGlzUGxhdGZvcm1Ccm93c2VyIH0gZnJvbSBcIkBhbmd1bGFyL2NvbW1vblwiO1xuaW1wb3J0IHtcbiAgdHlwZSBBZnRlclZpZXdJbml0LFxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgdHlwZSBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIGZvcndhcmRSZWYsXG4gIElucHV0LFxuICBpbmplY3QsXG4gIE5nWm9uZSxcbiAgdHlwZSBPbkNoYW5nZXMsXG4gIHR5cGUgT25EZXN0cm95LFxuICB0eXBlIE9uSW5pdCxcbiAgT3V0cHV0LFxuICBQTEFURk9STV9JRCxcbiAgdHlwZSBTaW1wbGVDaGFuZ2VzLFxuICB0eXBlIFRlbXBsYXRlUmVmLFxuICBWaWV3Q2hpbGQsXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgdHlwZSBDb250cm9sVmFsdWVBY2Nlc3NvciwgTkdfVkFMVUVfQUNDRVNTT1IgfSBmcm9tIFwiQGFuZ3VsYXIvZm9ybXNcIjtcbmltcG9ydCB7XG4gIHR5cGUgQVBJQ29uZmlnLFxuICB0eXBlIEFwcGVhcmFuY2VNb2RlLFxuICB0eXBlIEF1dG9jb21wbGV0ZVJlc3VsdCxcbiAgYnVpbGRTdWJtaXRSZXN1bHQsXG4gIHR5cGUgQ29tcGxldGVkUGFyYW1TdGF0ZSxcbiAgZXh0cmFjdFBsYWluVGV4dCxcbiAgTW9kZUNvbnRyb2xsZXIsXG4gIHR5cGUgT3B0aW9uT3ZlcnJpZGVzLFxuICB0eXBlIFByb2R1Y3QsXG4gIHR5cGUgUHJvZHVjdEltYWdlRmFsbGJhY2ssXG4gIHR5cGUgUHJvZHVjdHNDb25maWcsXG4gIHR5cGUgUHJvZHVjdHNMYXlvdXQsXG4gIHNldEN1cnNvck9mZnNldCxcbn0gZnJvbSBcIkBtYWdpY3gtZW5nL2FpLWF1dG9jb21wbGV0ZS12YW5pbGxhXCI7XG5pbXBvcnQgeyBBSUF1dG9jb21wbGV0ZURyb3Bkb3duQ29tcG9uZW50IH0gZnJvbSBcIi4uL2FpLWF1dG9jb21wbGV0ZS1kcm9wZG93bi9haS1hdXRvY29tcGxldGUtZHJvcGRvd24uY29tcG9uZW50XCI7XG5pbXBvcnQgeyBBSUF1dG9jb21wbGV0ZUNvbnRyb2xsZXIgfSBmcm9tIFwiLi4vY29udHJvbGxlci9haS1hdXRvY29tcGxldGUuY29udHJvbGxlclwiO1xuaW1wb3J0IHsgQUlBdXRvY29tcGxldGVFZGl0b3JIb3N0RGlyZWN0aXZlIH0gZnJvbSBcIi4uL2ludGVybmFsL2VkaXRvci1ob3N0L2VkaXRvci1ob3N0LmRpcmVjdGl2ZVwiO1xuaW1wb3J0IHsgUGlsbExpc3RDb21wb25lbnQgfSBmcm9tIFwiLi4vaW50ZXJuYWwvcGlsbC1saXN0L3BpbGwtbGlzdC5jb21wb25lbnRcIjtcbmltcG9ydCB7IFN1Ym1pdEJ1dHRvbkNvbXBvbmVudCB9IGZyb20gXCIuLi9pbnRlcm5hbC9zdWJtaXQtYnV0dG9uL3N1Ym1pdC1idXR0b24uY29tcG9uZW50XCI7XG5cbi8qKlxuICogVGllciAxIGNvbXBvbmVudCDigJQgYDxhaS1hdXRvY29tcGxldGU+YC4gVGhlIEFuZ3VsYXIgZXF1aXZhbGVudCBvZiBSZWFjdCdzXG4gKiBgPEFJQXV0b2NvbXBsZXRlIC8+YC4gT3ducyB0aGUgY29udGVudEVkaXRhYmxlIGVkaXRvciwgaW5saW5lIHBpbGxzLCBtb2RlXG4gKiBjb250cm9sbGVyLCBzdWJtaXQgYnV0dG9uIHNsb3QsIGFuZCBhbiBlbWJlZGRlZFxuICoge0BsaW5rIEFJQXV0b2NvbXBsZXRlQ29udHJvbGxlcn0gdGhhdCBkcml2ZXMgdGhlIGRyb3Bkb3duLlxuICpcbiAqIEBwdWJsaWNcbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiBcImFpLWF1dG9jb21wbGV0ZVwiLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbXG4gICAgQ29tbW9uTW9kdWxlLFxuICAgIEFJQXV0b2NvbXBsZXRlRHJvcGRvd25Db21wb25lbnQsXG4gICAgQUlBdXRvY29tcGxldGVFZGl0b3JIb3N0RGlyZWN0aXZlLFxuICAgIFBpbGxMaXN0Q29tcG9uZW50LFxuICAgIFN1Ym1pdEJ1dHRvbkNvbXBvbmVudCxcbiAgXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gIHRlbXBsYXRlVXJsOiBcIi4vYWktYXV0b2NvbXBsZXRlLmNvbXBvbmVudC5odG1sXCIsXG4gIHN0eWxlVXJsczogW1wiLi9haS1hdXRvY29tcGxldGUuY29tcG9uZW50LmNzc1wiXSxcbiAgcHJvdmlkZXJzOiBbXG4gICAge1xuICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVzZS1iZWZvcmUtZGVmaW5lXG4gICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBBSUF1dG9jb21wbGV0ZUNvbXBvbmVudCksXG4gICAgICBtdWx0aTogdHJ1ZSxcbiAgICB9LFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBBSUF1dG9jb21wbGV0ZUNvbXBvbmVudFxuICBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3ksIENvbnRyb2xWYWx1ZUFjY2Vzc29yXG57XG4gIC8vID09PSBJbnB1dHMgKG1pcnJvcnMgUmVhY3QncyBBSUF1dG9jb21wbGV0ZVByb3BzKSA9PT1cblxuICBASW5wdXQoKSBhcGlDb25maWc/OiBBUElDb25maWc7XG4gIC8qKlxuICAgKiBPcHRpb25hbCB1c2VyIGNvbnRleHQuIEluY2x1ZGUgd2hhdGV2ZXIgeW91IGtub3cgYWJvdXQgdGhlIHVzZXIg4oCUIGFcbiAgICogcHJvZmlsZSwgcHJlZmVyZW5jZXMsIHdvcmtzcGFjZSwgYW55dGhpbmcg4oCUIHRvIHBlcnNvbmFsaXplIHN1Z2dlc3RlZFxuICAgKiBwYXJhbWV0ZXJzIGFuZCBvcHRpb25zIHRvIHRoZW0uIEJpbmQgYSBzdGFibGUgcmVmZXJlbmNlOyB0aGUgc2FtZSBzd2FwXG4gICAqIHJ1bGUgdGhhdCBhcHBsaWVzIHRvIGBhcGlDb25maWdgIGFwcGxpZXMgaGVyZS5cbiAgICovXG4gIEBJbnB1dCgpIGFkZGl0aW9uYWxDb250ZXh0PzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIEBJbnB1dCgpIG9wdGlvbk92ZXJyaWRlcz86IE9wdGlvbk92ZXJyaWRlcztcbiAgQElucHV0KCkgbWFza0NvbXBsZXRlZFRleHQgPSBmYWxzZTtcbiAgQElucHV0KCkgY29sdW1ucz86IG51bWJlcjtcbiAgLyoqIFdoZXJlIHVuZmlsbGVkIHBpbGxzIHJlbmRlci4gRGVmYXVsdDogXCJkcm9wZG93blwiLiAqL1xuICBASW5wdXQoKSBwaWxsUGxhY2VtZW50OiBcImlubGluZVwiIHwgXCJkcm9wZG93blwiIHwgXCJoaWRkZW5cIiA9IFwiZHJvcGRvd25cIjtcbiAgLyoqIENvbG9yIG1vZGUuIFwiYXV0b1wiIGZvbGxvd3MgcHJlZmVycy1jb2xvci1zY2hlbWUuIERlZmF1bHQ6IFwiYXV0b1wiLiAqL1xuICBASW5wdXQoKSBtb2RlOiBBcHBlYXJhbmNlTW9kZSA9IFwiYXV0b1wiO1xuICBASW5wdXQoKSBvcHRpb25zUG9zaXRpb246IFwiYWJvdmVcIiB8IFwiYmVsb3dcIiA9IFwiYmVsb3dcIjtcbiAgQElucHV0KCkgYW5pbWF0aW9ucyA9IHRydWU7XG4gIEBJbnB1dCgpIGRyb3Bkb3duVHJpZ2dlcj86IFwiYXV0b1wiIHwgXCJtYW51YWxcIiB8IFwiaGlkZGVuXCI7XG4gIEBJbnB1dCgpIGNsb3NlRHJvcGRvd25PbkJsdXI/OiBib29sZWFuO1xuICBASW5wdXQoKSBzaG93Tm9uVGFwcGFibGVPcHRpb25zPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIFdoZW4gdHJ1ZSAoZGVmYXVsdCksIHRoZSBkcm9wZG93bidzIHBpbGwgYmFyIGVuZHMgaW4gYSBzbWFsbCBcInNraXBcIiBidXR0b25cbiAgICogdGhhdCBkaXNtaXNzZXMgdGhlIGFjdGl2ZSBwaWxsIOKAlCBzYW1lIGFjdGlvbiBhcyBwcmVzc2luZyDihpIgYXQgdGhlIGVuZCBvZlxuICAgKiB0aGUgaW5wdXQuIFNldCB0byBmYWxzZSB0byBoaWRlIGl0LiBXaGVuIHBpbGxzIHJlbmRlciBlbHNld2hlcmVcbiAgICogKGBwaWxsUGxhY2VtZW50OiBcImlubGluZVwiYCAvIGBcImhpZGRlblwiYCkgdGhlIGJhciByZW5kZXJzIGFzIGEgc2tpcC1vbmx5XG4gICAqIHJvdyBob2xkaW5nIGp1c3QgdGhlIGJ1dHRvbi4gSGlkZGVuIHdoaWxlIHRoZSBpbnB1dCBpcyBlbXB0eSDigJQgaXQgYXBwZWFyc1xuICAgKiBhbG9uZ3NpZGUgdGhlIGZvb3RlcidzIFwi4oaSIHRvIHNraXBcIiBoaW50IG9uY2UgdGhlIHVzZXIgaGFzIHR5cGVkLlxuICAgKi9cbiAgQElucHV0KCkgc2hvd1NraXBCdXR0b24gPSB0cnVlO1xuICAvKiogV2hlbiB0cnVlIChkZWZhdWx0KSwgYW4gb3B0aW9uIHRoYXQgY2FycmllcyBhbiBgaWNvbl9zdmdgIGRyYXdzIGl0cyBpY29uIGJlZm9yZSBpdHMgdGV4dCBpbiB0aGUgZHJvcGRvd24uIFNldCB0byBmYWxzZSB0byByZW5kZXIgb3B0aW9uIHJvd3MgYXMgdGV4dCBvbmx5LiAqL1xuICBASW5wdXQoKSBzaG93T3B0aW9uSWNvbnMgPSB0cnVlO1xuICAvKiogV2hlbiB0cnVlIChkZWZhdWx0KSwgYW4gb3B0aW9uIHRoYXQgY2FycmllcyBhbiBgaW1hZ2VfdXJsYCBkcmF3cyBpdCBhcyBhIHNxdWFyZSB0aHVtYm5haWwgYmVmb3JlIGl0cyB0ZXh0IGluIHRoZSBkcm9wZG93biAoaW4gcGxhY2Ugb2YgaXRzIGBpY29uX3N2Z2ApLiBTZXQgdG8gZmFsc2UgdG8gcmVuZGVyIG9wdGlvbiByb3dzIHdpdGhvdXQgcGljdHVyZXMuICovXG4gIEBJbnB1dCgpIHNob3dPcHRpb25JbWFnZXMgPSB0cnVlO1xuICAvKiogV2hlbiB0cnVlIChkZWZhdWx0KSwgYW4gb3B0aW9uIHRoYXQgY2FycmllcyBhbiBgaXRlbV9jb3VudGAgc2hvd3MgaXQgYXMgYSBtdXRlZCBsYWJlbCBhdCB0aGUgcm93J3MgdHJhaWxpbmcgZWRnZSAoXCIxMiBpdGVtc1wiKS4gU2V0IHRvIGZhbHNlIHRvIGhpZGUgdGhlIGNvdW50cy4gKi9cbiAgQElucHV0KCkgc2hvd09wdGlvbkNvdW50cyA9IHRydWU7XG4gIC8qKlxuICAgKiBIb3cgdGhlIHByb2R1Y3Qgc3RyaXAgbGF5cyBpdHMgY2FyZHMgb3V0LiBgXCJyb3dcImAgKHRoZSBkZWZhdWx0KSBpcyBhXG4gICAqIGhvcml6b250YWxseSBzY3JvbGxpbmcgc2hlbGYgb2YgY2FyZHMuIGBcImxpc3RcImAgc3RhY2tzIHRoZSBzYW1lIGNhcmRzIGFzXG4gICAqIGZ1bGwtd2lkdGggcm93cyDigJQgdGh1bWJuYWlsIG9uIHRoZSBsZWZ0LCB0aXRsZSwgdmVuZG9yIGFuZCBwcmljZSBvbiB0aGVcbiAgICogcmlnaHQg4oCUIGZvciByZXN1bHRzIHRoYXQgcmVhZCBhcyBhIGxpc3QgKGNvdXJzZXMsIGxpc3RpbmdzLCBkb2N1bWVudHMpXG4gICAqIHJhdGhlciB0aGFuIHByb2R1Y3RzIG9uIGEgc2hlbGY7IHRoZSBjb2x1bW4gc2Nyb2xscyB2ZXJ0aWNhbGx5IGluc2lkZVxuICAgKiBgLS1haWEtcHJvZHVjdC1saXN0LW1heC1oZWlnaHRgLlxuICAgKi9cbiAgQElucHV0KCkgcHJvZHVjdHNMYXlvdXQ6IFByb2R1Y3RzTGF5b3V0ID0gXCJyb3dcIjtcbiAgLyoqIE1pc3NpbmcvZmFpbGVkIGltYWdlIGZhbGxiYWNrLiBTdHlsZSBpbml0aWFscyB3aXRoIGBbZGF0YS1haWEtcHJvZHVjdC1pbml0aWFsXWAuICovXG4gIEBJbnB1dCgpIHByb2R1Y3RJbWFnZUZhbGxiYWNrOiBQcm9kdWN0SW1hZ2VGYWxsYmFjayA9IFwiaW1hZ2VcIjtcbiAgLyoqIFdoZW4gdHJ1ZSAoZGVmYXVsdCksIGEgY29tcGxldGVkIGNoaXAgaW4gdGhlIGlucHV0IGRyYXdzIHRoZSBpY29uIG9mIHRoZSBvcHRpb24gdGhhdCBhbnN3ZXJlZCBpdC4gU2V0IHRvIGZhbHNlIHRvIHJlbmRlciBjaGlwcyBhcyB0ZXh0IG9ubHkuICovXG4gIEBJbnB1dCgpIHNob3dDaGlwSWNvbnMgPSB0cnVlO1xuICAvKiogV2hlbiB0cnVlIChkZWZhdWx0KSwgYSBjb21wbGV0ZWQgY2hpcCBpbiB0aGUgaW5wdXQgZHJhd3MgdGhlIHBpY3R1cmUgKGBpbWFnZV91cmxgKSBvZiB0aGUgb3B0aW9uIHRoYXQgYW5zd2VyZWQgaXQsIGluIHBsYWNlIG9mIGl0cyBpY29uLiBTZXQgdG8gZmFsc2UgdG8gcmVuZGVyIGNoaXBzIHdpdGhvdXQgcGljdHVyZXMuICovXG4gIEBJbnB1dCgpIHNob3dDaGlwSW1hZ2VzID0gdHJ1ZTtcbiAgLyoqIEZvY3VzIHRoZSBlZGl0b3Igb24gbW91bnQuIERlZmF1bHQ6IHRydWUuICovXG4gIEBJbnB1dCgpIGF1dG9Gb2N1cyA9IHRydWU7XG4gIC8qKiBDb250cm9sbGVkLW1vZGUgdGV4dCB2YWx1ZS4gKi9cbiAgQElucHV0KCkgdmFsdWU/OiBzdHJpbmc7XG4gIC8qKiBDb250cm9sbGVkLW1vZGUgY29tcGxldGVkIHBhcmFtcy4gKi9cbiAgQElucHV0KCkgY29tcGxldGVkUGFyYW1zPzogQ29tcGxldGVkUGFyYW1TdGF0ZVtdO1xuICAvKipcbiAgICogV2hlbiB0cnVlIChkZWZhdWx0KSwgdGhlIGRyb3Bkb3duIHJlbmRlcnMgYSBob3Jpem9udGFsIHJvdyBvZiBwcm9kdWN0XG4gICAqIGNhcmRzIGJlbG93IHRoZSBvcHRpb25zIGdyaWQgd2hlbmV2ZXIgaXQgaGFzIHByb2R1Y3RzIHRvIHNob3c6IGJ5IGRlZmF1bHRcbiAgICogdGhlIGl0ZW1zIHRoZSBgL3N1Z2dlc3RgIHJlc3BvbnNlIHJlcG9ydHMgYXMgbWF0Y2hpbmcgdGhlIHF1ZXJ5LCBvciB0aGVcbiAgICogcmVzdWx0cyBvZiBhIGN1c3RvbSBgcHJvZHVjdHNgIHNlYXJjaC4gU2V0IHRvIGZhbHNlIHRvIHJlbmRlciBubyBzdHJpcFxuICAgKiBhbmQgcnVuIG5vIGN1c3RvbSBzZWFyY2guXG4gICAqL1xuICBASW5wdXQoKSBzaG93UHJvZHVjdHMgPSB0cnVlO1xuICAvKipcbiAgICogQ3VzdG9tIHNvdXJjZSBmb3IgdGhlIHByb2R1Y3Qgc3RyaXAuIE9taXQgaXQgYW5kIHRoZSBzdHJpcCBzaG93cyB0aGVcbiAgICogaXRlbXMgdGhlIGAvc3VnZ2VzdGAgcmVzcG9uc2UgaXRzZWxmIHJlcG9ydHMgYXMgbWF0Y2hpbmcgdGhlIHF1ZXJ5LCB3aXRoXG4gICAqIG5vIGV4dHJhIHJlcXVlc3QuIFNldCBpdCBhbmQgdGhlIGRyb3Bkb3duIGlzIGZlZCBieSB5b3VyIG93biBzZWFyY2hcbiAgICogZW5kcG9pbnQgb24gdGhlIFNESydzIGV4aXN0aW5nIGZldGNoIGNhZGVuY2UgaW5zdGVhZDsgdGhlIHNlcnZlcidzIGl0ZW1zXG4gICAqIGFyZSB0aGVuIG5vdCByZW5kZXJlZC5cbiAgICpcbiAgICogQmluZCBhIHN0YWJsZSByZWZlcmVuY2UgKGEgY29tcG9uZW50IGZpZWxkLCBub3QgYW4gaW5saW5lIG9iamVjdCBsaXRlcmFsKTpcbiAgICogYSBuZXcgb2JqZWN0IG9uIGVhY2ggY2hhbmdlLWRldGVjdGlvbiBwYXNzIHJlYWRzIGFzIGEgc3dhcHBlZCBpbnRlZ3JhdGlvblxuICAgKiBhbmQgY2xlYXJzIHRoZSBjdXJyZW50IGNhcmRzIOKAlCB0aGUgc2FtZSBydWxlIHRoYXQgYWxyZWFkeSBhcHBsaWVzIHRvXG4gICAqIGBhcGlDb25maWdgIGFuZCBgb3B0aW9uT3ZlcnJpZGVzYC5cbiAgICovXG4gIEBJbnB1dCgpIHByb2R1Y3RzPzogUHJvZHVjdHNDb25maWc7XG4gIC8qKlxuICAgKiBDdXN0b20gc3VibWl0IGJ1dHRvbi4gUGFzcyBhIGA8bmctdGVtcGxhdGU+YCB0byByZXBsYWNlIHRoZSBkZWZhdWx0IGFycm93XG4gICAqIGJ1dHRvbi4gUGFzcyBgbnVsbGAgdG8gcmVuZGVyIG5vIGJ1dHRvbi4gRGVmYXVsdCAoYHVuZGVmaW5lZGApIHJlbmRlcnNcbiAgICogdGhlIGJ1aWx0LWluIGFycm93LlxuICAgKi9cbiAgQElucHV0KCkgc3VibWl0QnV0dG9uPzogVGVtcGxhdGVSZWY8dW5rbm93bj4gfCBudWxsO1xuICAvKipcbiAgICogV2hlbiB0cnVlIChkZWZhdWx0KSwgdGhlIGVkaXRvciBpcyBjbGVhcmVkIGFuZCBhIG5ldyBzZXNzaW9uIHN0YXJ0cyBhZnRlclxuICAgKiBgc3VibWl0dGVkYCBlbWl0cyDigJQgb24gRW50ZXIgYW5kIG9uIHRoZSBzdWJtaXQgYnV0dG9uLiBTZXQgdG8gZmFsc2UgdG9cbiAgICogbGVhdmUgdGhlIHF1ZXJ5IGluIHBsYWNlOiB3aGVuIHRoZSBoYW5kbGVyIG5hdmlnYXRlcyBhd2F5LCBhIGNsZWFyZWQgZmllbGRcbiAgICogZmxhc2hlcyBlbXB0eSB1bnRpbCB0aGUgbmV4dCBwYWdlIHBhaW50cy4gQ2FsbCBgcmVzZXQoKWAgeW91cnNlbGYgd2hlbiB5b3VcbiAgICogd2FudCBhIGZyZXNoIHNlc3Npb24uXG4gICAqL1xuICBASW5wdXQoKSByZXNldE9uU3VibWl0ID0gdHJ1ZTtcblxuICAvLyA9PT0gT3V0cHV0cyA9PT1cblxuICAvKiogQ2FsbGVkIG9uIEVudGVyIG9yIHN1Ym1pdC1idXR0b24gY2xpY2suICovXG4gIEBPdXRwdXQoKSByZWFkb25seSBzdWJtaXR0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPEF1dG9jb21wbGV0ZVJlc3VsdD4oKTtcbiAgLyoqXG4gICAqIEZpcmVzIGFmdGVyIGV2ZXJ5IHN1Y2Nlc3NmdWwgc3VnZ2VzdGlvbiByb3VuZC10cmlwIHdpdGggdGhlIHN0cnVjdHVyZWRcbiAgICogcXVlcnkgYXMgdGhlIFNESyBub3cgdW5kZXJzdGFuZHMgaXQg4oCUIHRoZSBzYW1lIGBBdXRvY29tcGxldGVSZXN1bHRgIHNoYXBlXG4gICAqIGBzdWJtaXR0ZWRgIGNhcnJpZXMsIHNvIHlvdSBjYW4gbWlycm9yIHRoZSBxdWVyeSBhcyBpdCBpcyBidWlsdCAoYSBsaXZlXG4gICAqIHByZXZpZXcsIGEgZHJhZnQsIGFuYWx5dGljcykgd2l0aG91dCB3YWl0aW5nIGZvciBzdWJtaXQuIEZpcmVzIG9uY2UgcGVyXG4gICAqIGFwcGxpZWQgcmVzcG9uc2UsIGluY2x1ZGluZyB0aGUgaW5pdGlhbCByZXF1ZXN0IG9uIGluaXQgKGFuIGVtcHR5XG4gICAqIHJlc3VsdCk7IG5ldmVyIGZvciBhIGZhaWxlZCwgYWJvcnRlZCBvciBzdXBlcnNlZGVkIHJlcXVlc3QuXG4gICAqL1xuICBAT3V0cHV0KCkgcmVhZG9ubHkgcmVzdWx0Q2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxBdXRvY29tcGxldGVSZXN1bHQ+KCk7XG4gIEBPdXRwdXQoKSByZWFkb25seSBlcnJvcmVkID0gbmV3IEV2ZW50RW1pdHRlcjxFcnJvcj4oKTtcbiAgQE91dHB1dCgpIHJlYWRvbmx5IHZhbHVlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XG4gIEBPdXRwdXQoKSByZWFkb25seSBjb21wbGV0ZWRQYXJhbXNDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPENvbXBsZXRlZFBhcmFtU3RhdGVbXT4oKTtcbiAgQE91dHB1dCgpIHJlYWRvbmx5IGZvY3VzZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG4gIEBPdXRwdXQoKSByZWFkb25seSBibHVycmVkID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICAvKipcbiAgICogRW1pdHRlZCB3aGVuIHRoZSB1c2VyIGFjdGl2YXRlcyBhIHByb2R1Y3QgY2FyZC4gVGhlIFNESyBkb2VzIG5vdFxuICAgKiBuYXZpZ2F0ZSDigJQgeW91IGRlY2lkZSB3aGF0IGEgc2VsZWN0aW9uIG1lYW5zLiBNb2RpZmllciAvIG1pZGRsZSBjbGlja3MgYXJlXG4gICAqIGxlZnQgdG8gdGhlIGJyb3dzZXIgKGNtZC1jbGljayBzdGlsbCBvcGVucyBhIHRhYikgYW5kIGRvbid0IGVtaXQuXG4gICAqL1xuICBAT3V0cHV0KCkgcmVhZG9ubHkgcHJvZHVjdFNlbGVjdCA9IG5ldyBFdmVudEVtaXR0ZXI8UHJvZHVjdD4oKTtcblxuICAvLyA9PT0gVmlldyByZWZzID09PVxuXG4gIEBWaWV3Q2hpbGQoXCJjb250YWluZXJcIiwgeyBzdGF0aWM6IHRydWUgfSkgY29udGFpbmVyUmVmITogRWxlbWVudFJlZjxIVE1MRGl2RWxlbWVudD47XG4gIEBWaWV3Q2hpbGQoXCJlZGl0b3JcIiwgeyBzdGF0aWM6IGZhbHNlIH0pIGVkaXRvclJlZj86IEVsZW1lbnRSZWY8SFRNTERpdkVsZW1lbnQ+O1xuICBAVmlld0NoaWxkKFwicGlsbENvbnRhaW5lclwiKSBwaWxsQ29udGFpbmVyUmVmPzogRWxlbWVudFJlZjxIVE1MU3BhbkVsZW1lbnQ+O1xuXG4gIC8vID09PSBQdWJsaWMgc3RhdGUgZm9yIHRoZSB0ZW1wbGF0ZSA9PT1cblxuICBjb250cm9sbGVyITogQUlBdXRvY29tcGxldGVDb250cm9sbGVyO1xuICAvKipcbiAgICogQ29uY3JldGUgbGlnaHQvZGFyayB2YWx1ZSBib3VuZCB0byBgW2F0dHIuZGF0YS1tb2RlXWAuIFNlZWRlZCBpbiBuZ09uSW5pdFxuICAgKiBzbyB0aGUgYXR0cmlidXRlIGlzIHByZXNlbnQgZHVyaW5nIFNTUiAod2hlcmUgTW9kZUNvbnRyb2xsZXIsIGdhdGVkIGJlaGluZFxuICAgKiBpc1BsYXRmb3JtQnJvd3NlciBpbiBuZ0FmdGVyVmlld0luaXQsIG5ldmVyIHJ1bnMpLiBPbiB0aGUgYnJvd3NlciB0aGVcbiAgICogTW9kZUNvbnRyb2xsZXIncyByZXNvbHZlIGNhbGxiYWNrIGtlZXBzIHRoaXMgaW4gc3luYyDigJQgc28gaXRzIHJ1bnRpbWVcbiAgICogcHJlZmVycy1jb2xvci1zY2hlbWUgdXBkYXRlcyBhbmQgdGhpcyBiaW5kaW5nIGFsd2F5cyBhZ3JlZSAobm8gY2xvYmJlcikuXG4gICAqL1xuICByZXNvbHZlZE1vZGU6IFwibGlnaHRcIiB8IFwiZGFya1wiID0gXCJkYXJrXCI7XG5cbiAgLy8gPT09IEludGVybmFsID09PVxuXG4gIHByaXZhdGUgbW9kZUNvbnRyb2xsZXI/OiBNb2RlQ29udHJvbGxlcjtcbiAgcHJpdmF0ZSByZXNpemVPYnNlcnZlcj86IFJlc2l6ZU9ic2VydmVyO1xuICBwcml2YXRlIG9uQ2hhbmdlRm46ICh2YWx1ZTogc3RyaW5nKSA9PiB2b2lkID0gbm9vcDtcbiAgcHJpdmF0ZSBvblRvdWNoZWRGbjogKCkgPT4gdm9pZCA9IG5vb3A7XG4gIC8vIEhvbGRzIGEgdmFsdWUgd3JpdHRlbiBieSBSZWFjdGl2ZSBGb3JtcyBiZWZvcmUgbmdPbkluaXQgcmFuLiBSZWFjdGl2ZVxuICAvLyBGb3JtcyBjYW4gY2FsbCB3cml0ZVZhbHVlKCkgZHVyaW5nIGR5bmFtaWMgZm9ybSBjb25zdHJ1Y3Rpb24gKGUuZy4gd2hlblxuICAvLyBhIEZvcm1Db250cm9sIGFscmVhZHkgaG9sZHMgYSB2YWx1ZSBhdCB0aGUgbW9tZW50IHRoZSBkaXJlY3RpdmUgaXNcbiAgLy8gY3JlYXRlZCkuIFdlIHN0YXNoIHRoZSB2YWx1ZSBoZXJlIGFuZCBmbHVzaCBpdCBpbiBuZ09uSW5pdCAqYWZ0ZXIqXG4gIC8vIHRoZSBjb250cm9sbGVyIGV4aXN0cyDigJQgb3RoZXJ3aXNlIHRoZSBlZGl0b3IgcmVuZGVycyBlbXB0eSBldmVuIHRob3VnaFxuICAvLyB0aGUgZm9ybSBoYWQgYSB2YWx1ZS4gYHVuZGVmaW5lZGAgbWVhbnMgXCJubyBwZW5kaW5nIHdyaXRlXCIuXG4gIHByaXZhdGUgcGVuZGluZ1dyaXRlVmFsdWU6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAvLyDCpzE2Ljk6IHByZWZlciBgaW5qZWN0KClgIG92ZXIgY29uc3RydWN0b3ItcGFyYW1ldGVyIERJIGZvciBjb21wb25lbnRzLlxuICBwcml2YXRlIHJlYWRvbmx5IHBsYXRmb3JtSWQgPSBpbmplY3QoUExBVEZPUk1fSUQpO1xuICBwcml2YXRlIHJlYWRvbmx5IHpvbmUgPSBpbmplY3QoTmdab25lKTtcbiAgcHJpdmF0ZSByZWFkb25seSBjZHIgPSBpbmplY3QoQ2hhbmdlRGV0ZWN0b3JSZWYpO1xuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIC8vIFNlZWQgYmVmb3JlIHRoZSBicm93c2VyIGd1YXJkIHNvIFNTUiByZW5kZXJzIGEgY29uY3JldGUgZGF0YS1tb2RlLlxuICAgIHRoaXMucmVzb2x2ZWRNb2RlID0gcmVzb2x2ZUluaXRpYWxNb2RlKHRoaXMubW9kZSk7XG4gICAgaWYgKCFpc1BsYXRmb3JtQnJvd3Nlcih0aGlzLnBsYXRmb3JtSWQpKSByZXR1cm47XG5cbiAgICB0aGlzLmNvbnRyb2xsZXIgPSBuZXcgQUlBdXRvY29tcGxldGVDb250cm9sbGVyKHtcbiAgICAgIGFwaUNvbmZpZzogdGhpcy5hcGlDb25maWcsXG4gICAgICBhZGRpdGlvbmFsQ29udGV4dDogdGhpcy5hZGRpdGlvbmFsQ29udGV4dCxcbiAgICAgIG9wdGlvbk92ZXJyaWRlczogdGhpcy5vcHRpb25PdmVycmlkZXMsXG4gICAgICBtYXNrQ29tcGxldGVkVGV4dDogdGhpcy5tYXNrQ29tcGxldGVkVGV4dCxcbiAgICAgIGNvbHVtbnM6IHRoaXMuY29sdW1ucyxcbiAgICAgIGRyb3Bkb3duVHJpZ2dlcjogdGhpcy5kcm9wZG93blRyaWdnZXIsXG4gICAgICBvcHRpb25zUG9zaXRpb246IHRoaXMub3B0aW9uc1Bvc2l0aW9uLFxuICAgICAgY2xvc2VEcm9wZG93bk9uQmx1cjogdGhpcy5jbG9zZURyb3Bkb3duT25CbHVyLFxuICAgICAgc2hvd05vblRhcHBhYmxlT3B0aW9uczogdGhpcy5zaG93Tm9uVGFwcGFibGVPcHRpb25zLFxuICAgICAgc2hvd1Byb2R1Y3RzOiB0aGlzLnNob3dQcm9kdWN0cyxcbiAgICAgIHNvdXJjZTogXCJmdWxsLXNka1wiLFxuICAgICAgcHJvZHVjdHM6IHRoaXMucHJvZHVjdHMsXG4gICAgICB2YWx1ZTogdGhpcy52YWx1ZSxcbiAgICAgIGNvbXBsZXRlZFBhcmFtczogdGhpcy5jb21wbGV0ZWRQYXJhbXMsXG4gICAgICBvblN1Ym1pdDogKHJlc3VsdCkgPT4gdGhpcy5oYW5kbGVTdWJtaXQocmVzdWx0KSxcbiAgICAgIG9uUmVzdWx0OiAocmVzdWx0KSA9PiB0aGlzLnJlc3VsdENoYW5nZS5lbWl0KHJlc3VsdCksXG4gICAgICBvbkVycm9yOiAoZXJyb3IpID0+IHRoaXMuZXJyb3JlZC5lbWl0KGVycm9yKSxcbiAgICAgIG9uQ2hhbmdlOiAodGV4dCkgPT4ge1xuICAgICAgICB0aGlzLnZhbHVlQ2hhbmdlLmVtaXQodGV4dCk7XG4gICAgICAgIHRoaXMub25DaGFuZ2VGbih0ZXh0KTtcbiAgICAgIH0sXG4gICAgICBvblBhcmFtc0NoYW5nZTogKHBhcmFtcykgPT4gdGhpcy5jb21wbGV0ZWRQYXJhbXNDaGFuZ2UuZW1pdChwYXJhbXMpLFxuICAgICAgb25Gb2N1czogKCkgPT4gdGhpcy5mb2N1c2VkLmVtaXQoKSxcbiAgICAgIG9uUHJvZHVjdFNlbGVjdDogKHByb2R1Y3QpID0+IHRoaXMucHJvZHVjdFNlbGVjdC5lbWl0KHByb2R1Y3QpLFxuICAgICAgb25CbHVyOiAoKSA9PiB7XG4gICAgICAgIHRoaXMuYmx1cnJlZC5lbWl0KCk7XG4gICAgICAgIHRoaXMub25Ub3VjaGVkRm4oKTtcbiAgICAgIH0sXG4gICAgICBzZXRDdXJzb3I6IChvZmZzZXQpID0+IHtcbiAgICAgICAgY29uc3QgZWRpdG9yID0gdGhpcy5lZGl0b3JSZWY/Lm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgIGlmICghZWRpdG9yKSByZXR1cm47XG4gICAgICAgIGVkaXRvci5mb2N1cygpO1xuICAgICAgICBzZXRDdXJzb3JPZmZzZXQoZWRpdG9yLCBvZmZzZXQpO1xuICAgICAgfSxcbiAgICB9KTtcblxuICAgIGlmICh0aGlzLnBlbmRpbmdXcml0ZVZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuY29udHJvbGxlci5zZXRWYWx1ZSh0aGlzLnBlbmRpbmdXcml0ZVZhbHVlKTtcbiAgICAgIHRoaXMucGVuZGluZ1dyaXRlVmFsdWUgPSB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIGlmICghaXNQbGF0Zm9ybUJyb3dzZXIodGhpcy5wbGF0Zm9ybUlkKSkgcmV0dXJuO1xuICAgIC8vIE1vZGVDb250cm9sbGVyIHdyaXRlcyBgZGF0YS1tb2RlYCB0byB0aGUgZWxlbWVudCBpdCdzIGdpdmVuLiBUaGUgQ1NTXG4gICAgLy8gc2VsZWN0b3JzIGFyZSBzY29wZWQgdG8gYC5tYWdpY3gtYWlhW2RhdGEtbW9kZT1cIi4uLlwiXWAg4oCUIHdoaWNoIGxpdmVzIG9uXG4gICAgLy8gdGhlIGlubmVyIGA8ZGl2IGNsYXNzPVwibWFnaWN4LWFpYSBtYWdpY3gtYWlhLWNvbnRhaW5lclwiICNjb250YWluZXI+YCxcbiAgICAvLyBOT1QgdGhlIGhvc3QgYDxhaS1hdXRvY29tcGxldGU+YCBlbGVtZW50LiBUaGUgcmVzb2x2ZSBjYWxsYmFjayBtaXJyb3JzXG4gICAgLy8gdGhlIHZhbHVlIGludG8gYHJlc29sdmVkTW9kZWAgc28gdGhlIGBbYXR0ci5kYXRhLW1vZGVdYCBiaW5kaW5nIHN0YXlzIGluXG4gICAgLy8gbG9ja3N0ZXAgd2l0aCBNb2RlQ29udHJvbGxlciDigJQgdGhlIGJpbmRpbmcgaGFuZGxlcyBTU1IsIE1vZGVDb250cm9sbGVyXG4gICAgLy8gaGFuZGxlcyBydW50aW1lIHByZWZlcnMtY29sb3Itc2NoZW1lIHN3aXRjaGVzLCBhbmQgYmVjYXVzZSB0aGV5IGFsd2F5c1xuICAgIC8vIGFncmVlIG5laXRoZXIgY2xvYmJlcnMgdGhlIG90aGVyLlxuICAgIHRoaXMubW9kZUNvbnRyb2xsZXIgPSBuZXcgTW9kZUNvbnRyb2xsZXIoXG4gICAgICB0aGlzLmNvbnRhaW5lclJlZi5uYXRpdmVFbGVtZW50LFxuICAgICAgdGhpcy5tb2RlLFxuICAgICAgKHJlc29sdmVkKSA9PiB7XG4gICAgICAgIHRoaXMucmVzb2x2ZWRNb2RlID0gcmVzb2x2ZWQ7XG4gICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgfSxcbiAgICApO1xuXG4gICAgLy8gUGlsbC13cmFwIGRldGVjdGlvbiDigJQgd2hlbiB0aGUgcGlsbCBsaXN0IHdyYXBzIGJlbG93IHRoZSBlZGl0b3IncyBsYXN0XG4gICAgLy8gbGluZSwgZHJvcCBpdHMgOHB4IGxlZnQgbWFyZ2luIHZpYSBhIGRhdGEgYXR0cmlidXRlIHRoZSBDU1Mga2V5cyBvZmYuXG4gICAgLy8gTWlycm9ycyB0aGUgUmVhY3QgY29tcG9uZW50J3MgdXNlTGF5b3V0RWZmZWN0LlxuICAgIGlmICh0eXBlb2YgUmVzaXplT2JzZXJ2ZXIgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgIHRoaXMuem9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICAgIHRoaXMucmVzaXplT2JzZXJ2ZXIgPSBuZXcgUmVzaXplT2JzZXJ2ZXIoKCkgPT4gdGhpcy5tZWFzdXJlUGlsbFdyYXAoKSk7XG4gICAgICAgIGNvbnN0IGVkaXRvciA9IHRoaXMuZWRpdG9yUmVmPy5uYXRpdmVFbGVtZW50O1xuICAgICAgICBpZiAoZWRpdG9yKSB0aGlzLnJlc2l6ZU9ic2VydmVyLm9ic2VydmUoZWRpdG9yKTtcbiAgICAgIH0pO1xuICAgICAgdGhpcy5tZWFzdXJlUGlsbFdyYXAoKTtcbiAgICB9XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmNvbnRyb2xsZXIpIHJldHVybjtcbiAgICAvLyBgU2ltcGxlQ2hhbmdlc2AgaXMgYHsgW2tleTogc3RyaW5nXTogU2ltcGxlQ2hhbmdlIH1gLCBzbyBwZXJcbiAgICAvLyBgbm9Qcm9wZXJ0eUFjY2Vzc0Zyb21JbmRleFNpZ25hdHVyZWAgZWFjaCBrZXkgbG9va3VwIHVzZXMgYnJhY2tldFxuICAgIC8vIG5vdGF0aW9uIOKAlCB0aGlzIGtlZXBzIHRoZSBzdHJpY3RuZXNzIGNvbnRyYWN0IHRoYXQgdGhlIHJlc3Qgb2YgdGhlXG4gICAgLy8gd29ya3NwYWNlIGVuZm9yY2VzLlxuICAgIC8vIENvbnRyb2xsZWQtbW9kZSBwcm9wYWdhdGlvblxuICAgIGlmIChjaGFuZ2VzW1widmFsdWVcIl0gJiYgdGhpcy52YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLmNvbnRyb2xsZXIuc2V0VmFsdWUodGhpcy52YWx1ZSk7XG4gICAgfVxuICAgIGlmIChjaGFuZ2VzW1wiY29tcGxldGVkUGFyYW1zXCJdICYmIHRoaXMuY29tcGxldGVkUGFyYW1zICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuY29udHJvbGxlci5zZXRDb21wbGV0ZWRQYXJhbXModGhpcy5jb21wbGV0ZWRQYXJhbXMpO1xuICAgIH1cbiAgICAvLyBSZWFjdGl2ZSBvcHRpb25zXG4gICAgaWYgKFxuICAgICAgY2hhbmdlc1tcImFwaUNvbmZpZ1wiXSB8fFxuICAgICAgY2hhbmdlc1tcImFkZGl0aW9uYWxDb250ZXh0XCJdIHx8XG4gICAgICBjaGFuZ2VzW1wib3B0aW9uT3ZlcnJpZGVzXCJdIHx8XG4gICAgICBjaGFuZ2VzW1wiZHJvcGRvd25UcmlnZ2VyXCJdIHx8XG4gICAgICBjaGFuZ2VzW1wib3B0aW9uc1Bvc2l0aW9uXCJdIHx8XG4gICAgICBjaGFuZ2VzW1wiY2xvc2VEcm9wZG93bk9uQmx1clwiXSB8fFxuICAgICAgY2hhbmdlc1tcInNob3dOb25UYXBwYWJsZU9wdGlvbnNcIl0gfHxcbiAgICAgIGNoYW5nZXNbXCJzaG93UHJvZHVjdHNcIl0gfHxcbiAgICAgIGNoYW5nZXNbXCJwcm9kdWN0c1wiXVxuICAgICkge1xuICAgICAgdGhpcy5jb250cm9sbGVyLnVwZGF0ZSh7XG4gICAgICAgIGFwaUNvbmZpZzogdGhpcy5hcGlDb25maWcsXG4gICAgICAgIGFkZGl0aW9uYWxDb250ZXh0OiB0aGlzLmFkZGl0aW9uYWxDb250ZXh0LFxuICAgICAgICBvcHRpb25PdmVycmlkZXM6IHRoaXMub3B0aW9uT3ZlcnJpZGVzLFxuICAgICAgICBkcm9wZG93blRyaWdnZXI6IHRoaXMuZHJvcGRvd25UcmlnZ2VyLFxuICAgICAgICBvcHRpb25zUG9zaXRpb246IHRoaXMub3B0aW9uc1Bvc2l0aW9uLFxuICAgICAgICBjbG9zZURyb3Bkb3duT25CbHVyOiB0aGlzLmNsb3NlRHJvcGRvd25PbkJsdXIsXG4gICAgICAgIHNob3dOb25UYXBwYWJsZU9wdGlvbnM6IHRoaXMuc2hvd05vblRhcHBhYmxlT3B0aW9ucyxcbiAgICAgICAgc2hvd1Byb2R1Y3RzOiB0aGlzLnNob3dQcm9kdWN0cyxcbiAgICAgICAgLy8gU2FtZSByZWZlcmVuY2Ugb24gYW4gdW5yZWxhdGVkIGNoYW5nZSBpcyBhIG5vLW9wIGluIHRoZSBjb3JlOyBvbmx5IGFcbiAgICAgICAgLy8gZ2VudWluZWx5IHN3YXBwZWQgKG9yIHJlbW92ZWQpIGludGVncmF0aW9uIGNsZWFycyB0aGUgc3RyaXAuXG4gICAgICAgIHByb2R1Y3RzOiB0aGlzLnByb2R1Y3RzLFxuICAgICAgfSk7XG4gICAgfVxuICAgIGlmIChjaGFuZ2VzW1wibW9kZVwiXSkge1xuICAgICAgLy8gS2VlcCB0aGUgYmluZGluZyBjb3JyZWN0IGV2ZW4gd2hlbiBNb2RlQ29udHJvbGxlciBkb2Vzbid0IGV4aXN0IHlldFxuICAgICAgLy8gKFNTUiAvIHByZS1uZ0FmdGVyVmlld0luaXQpLiBPbiB0aGUgYnJvd3Nlciwgc2V0TW9kZSB0cmlnZ2VycyB0aGVcbiAgICAgIC8vIHJlc29sdmUgY2FsbGJhY2sgd2hpY2ggc2V0cyB0aGUgc2FtZSB2YWx1ZS5cbiAgICAgIHRoaXMucmVzb2x2ZWRNb2RlID0gcmVzb2x2ZUluaXRpYWxNb2RlKHRoaXMubW9kZSk7XG4gICAgICB0aGlzLm1vZGVDb250cm9sbGVyPy5zZXRNb2RlKHRoaXMubW9kZSk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5yZXNpemVPYnNlcnZlcj8uZGlzY29ubmVjdCgpO1xuICAgIHRoaXMubW9kZUNvbnRyb2xsZXI/LmRlc3Ryb3koKTtcbiAgICB0aGlzLmNvbnRyb2xsZXI/LmRlc3Ryb3koKTtcbiAgfVxuXG4gIC8vID09PSBJbXBlcmF0aXZlIEFQSSAoZXhwb3NlZCBvbiB0aGUgY29tcG9uZW50IGluc3RhbmNlIHZpYSBAVmlld0NoaWxkKSA9PT1cblxuICAvKiogUHJvZ3JhbW1hdGljYWxseSBmb2N1cyB0aGUgZWRpdG9yLiAqL1xuICBmb2N1cygpOiB2b2lkIHtcbiAgICB0aGlzLmVkaXRvclJlZj8ubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICB9XG5cbiAgLyoqIFByb2dyYW1tYXRpY2FsbHkgYmx1ciB0aGUgZWRpdG9yLiAqL1xuICBibHVyKCk6IHZvaWQge1xuICAgIHRoaXMuZWRpdG9yUmVmPy5uYXRpdmVFbGVtZW50LmJsdXIoKTtcbiAgfVxuXG4gIC8qKiBDbGVhciBhbGwgc3RhdGUsIHJvdGF0ZSBzZXNzaW9uLCBhbmQgcmUtZmV0Y2guICovXG4gIHJlc2V0KCk6IHZvaWQge1xuICAgIHRoaXMuY29udHJvbGxlcj8ucmVzZXQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTa2lwIHRoZSBhY3RpdmUgcGlsbCDigJQgc2FtZSBhY3Rpb24gYXMgdGhlIGRyb3Bkb3duJ3Mgc2tpcCBidXR0b24gLyDihpIuXG4gICAqIExldHMgYSBjb25zdW1lciB3aG8gaGlkZXMgdGhlIGJ1aWx0LWluIGJ1dHRvbiAoYHNob3dTa2lwQnV0dG9uPWZhbHNlYClcbiAgICogZHJpdmUgc2tpcHBpbmcgZnJvbSB0aGVpciBvd24gVUkuXG4gICAqL1xuICBza2lwQWN0aXZlUGlsbCgpOiB2b2lkIHtcbiAgICB0aGlzLmNvbnRyb2xsZXI/LnNraXBBY3RpdmVQaWxsKCk7XG4gIH1cblxuICAvKiogU3dpdGNoIGNvbG9yIG1vZGUgYXQgcnVudGltZS4gKi9cbiAgc2V0TW9kZShtb2RlOiBBcHBlYXJhbmNlTW9kZSk6IHZvaWQge1xuICAgIHRoaXMubW9kZSA9IG1vZGU7XG4gICAgdGhpcy5yZXNvbHZlZE1vZGUgPSByZXNvbHZlSW5pdGlhbE1vZGUobW9kZSk7XG4gICAgdGhpcy5tb2RlQ29udHJvbGxlcj8uc2V0TW9kZShtb2RlKTtcbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIC8vID09PSBUZW1wbGF0ZSBoZWxwZXJzID09PVxuXG4gIC8qKlxuICAgKiAnZGVmYXVsdCcg4oaSIHJlbmRlciB0aGUgYnVpbHQtaW4gYXJyb3cgYnV0dG9uLlxuICAgKiAnY3VzdG9tJyAg4oaSIHByb2plY3QgdGhlIGNvbnN1bWVyLXN1cHBsaWVkIFRlbXBsYXRlUmVmLlxuICAgKiAnaGlkZGVuJyAg4oaSIG5vIGJ1dHRvbi5cbiAgICovXG4gIGdldCBzdWJtaXRCdXR0b25TdGF0ZSgpOiBcImRlZmF1bHRcIiB8IFwiY3VzdG9tXCIgfCBcImhpZGRlblwiIHtcbiAgICBpZiAodGhpcy5zdWJtaXRCdXR0b24gPT09IG51bGwpIHJldHVybiBcImhpZGRlblwiO1xuICAgIGlmICh0aGlzLnN1Ym1pdEJ1dHRvbiA9PT0gdW5kZWZpbmVkKSByZXR1cm4gXCJkZWZhdWx0XCI7XG4gICAgcmV0dXJuIFwiY3VzdG9tXCI7XG4gIH1cblxuICAvKiogTmFycm93ZWQgYWNjZXNzb3IgZm9yICpuZ1RlbXBsYXRlT3V0bGV0IOKAlCBuZXZlciB1bmRlZmluZWQuICovXG4gIGdldCBjdXN0b21TdWJtaXRUZW1wbGF0ZSgpOiBUZW1wbGF0ZVJlZjx1bmtub3duPiB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLnN1Ym1pdEJ1dHRvbiA/PyBudWxsO1xuICB9XG5cbiAgZ2V0IHNob3dJbmxpbmVQaWxscygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5waWxsUGxhY2VtZW50ID09PSBcImlubGluZVwiO1xuICB9XG5cbiAgZ2V0IHNob3dEcm9wZG93blBpbGxzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnBpbGxQbGFjZW1lbnQgPT09IFwiZHJvcGRvd25cIjtcbiAgfVxuXG4gIC8qKlxuICAgKiBgdHJ1ZWAgd2hlbiB0aGVyZSdzIHNvbWV0aGluZyB0byBzdWJtaXQg4oCUIGRyaXZlbiBieSBjdXJyZW50IHNlZ21lbnRzXG4gICAqIGFuZCBjb21wbGV0ZWQgcGFyYW1zLiBSZWFkIG9mZiB0aGUgbGl2ZSBlZGl0b3IgdmlhIHRoZSBjb250cm9sbGVyIHN0YXRlLlxuICAgKi9cbiAgY2FuU3VibWl0KHN0YXRlOiB7IHNlZ21lbnRzOiB7IGxlbmd0aDogbnVtYmVyIH07IGNvbXBsZXRlZFBhcmFtczogeyBsZW5ndGg6IG51bWJlciB9IH0pOiBib29sZWFuIHtcbiAgICByZXR1cm4gc3RhdGUuc2VnbWVudHMubGVuZ3RoID4gMCB8fCBzdGF0ZS5jb21wbGV0ZWRQYXJhbXMubGVuZ3RoID4gMDtcbiAgfVxuXG4gIG9uV3JhcHBlckNsaWNrKGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgLy8gQ2xpY2tpbmcgYSBwaWxsIHNob3VsZCBhY3RpdmF0ZSBpdCB3aXRob3V0IHN0ZWFsaW5nIGZvY3VzIGVsc2V3aGVyZS5cbiAgICBjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQgfCBudWxsO1xuICAgIGlmICh0YXJnZXQ/LmNsb3Nlc3QoXCJbZGF0YS1haWEtcGlsbF1cIikpIHJldHVybjtcbiAgICB0aGlzLmZvY3VzKCk7XG4gIH1cblxuICBvblN1Ym1pdEJ1dHRvbkNsaWNrKGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgdGhpcy5oYW5kbGVTdWJtaXRGcm9tVXNlckFjdGlvbigpO1xuICB9XG5cbiAgb25TdWJtaXRTbG90Q2xpY2soZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB0aGlzLmhhbmRsZVN1Ym1pdEZyb21Vc2VyQWN0aW9uKCk7XG4gIH1cblxuICBvblNlbGVjdFBpbGwoaW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMuY29udHJvbGxlci5zZXRBY3RpdmVQaWxsKGluZGV4KTtcbiAgfVxuXG4gIC8vID09PSBDb250cm9sVmFsdWVBY2Nlc3NvciA9PT1cblxuICB3cml0ZVZhbHVlKHZhbHVlOiBzdHJpbmcgfCBudWxsKTogdm9pZCB7XG4gICAgY29uc3QgbmV4dCA9IHZhbHVlID8/IFwiXCI7XG4gICAgaWYgKCF0aGlzLmNvbnRyb2xsZXIpIHtcbiAgICAgIC8vIFJlYWN0aXZlIEZvcm1zIGNhbiBjYWxsIHdyaXRlVmFsdWUoKSBiZWZvcmUgbmdPbkluaXQgY3JlYXRlcyB0aGVcbiAgICAgIC8vIGNvbnRyb2xsZXIgKGR5bmFtaWMgZm9ybSBjb25zdHJ1Y3Rpb24sIG9yIGEgRm9ybUNvbnRyb2wgdGhhdCBhbHJlYWR5XG4gICAgICAvLyBoYWQgYSB2YWx1ZSBhdCBkaXJlY3RpdmUtY3JlYXRpb24gdGltZSkuIEJ1ZmZlciB0aGUgdmFsdWU7IG5nT25Jbml0XG4gICAgICAvLyBmbHVzaGVzIGl0IGFzIHNvb24gYXMgdGhlIGNvbnRyb2xsZXIgZXhpc3RzLlxuICAgICAgdGhpcy5wZW5kaW5nV3JpdGVWYWx1ZSA9IG5leHQ7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuY29udHJvbGxlci5zZXRWYWx1ZShuZXh0KTtcbiAgfVxuXG4gIHJlZ2lzdGVyT25DaGFuZ2UoZm46ICh2YWx1ZTogc3RyaW5nKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgdGhpcy5vbkNoYW5nZUZuID0gZm47XG4gIH1cblxuICByZWdpc3Rlck9uVG91Y2hlZChmbjogKCkgPT4gdm9pZCk6IHZvaWQge1xuICAgIHRoaXMub25Ub3VjaGVkRm4gPSBmbjtcbiAgfVxuXG4gIHNldERpc2FibGVkU3RhdGUoX2Rpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgLy8gVGhlIGNvbnRlbnRFZGl0YWJsZSBob3N0IGRvZXNuJ3QgaGF2ZSBhIG5hdGl2ZSBkaXNhYmxlZCBhdHRyaWJ1dGUuIEZvclxuICAgIC8vIHYwLjEgd2UgYWNjZXB0IHRoZSBjYWxsIHNvIEFuZ3VsYXIncyBmb3JtcyBsYXllciBkb2Vzbid0IHRocm93LCBidXRcbiAgICAvLyB0aGUgZWRpdG9yIHN0YXlzIGludGVyYWN0aXZlLiBBIGZ1dHVyZSBlbmhhbmNlbWVudCBjYW4gdG9nZ2xlXG4gICAgLy8gY29udGVudEVkaXRhYmxlICsgQVJJQSBkaXNhYmxlZCBoZXJlLlxuICB9XG5cbiAgLy8gPT09IFN1Ym1pdCBmbG93ID09PVxuXG4gIC8qKlxuICAgKiBDYWxsZWQgYnkgdGhlIGNvbnRyb2xsZXIncyBvblN1Ym1pdCBjYWxsYmFjayAod2hpY2ggZmlyZXMgZnJvbSB0aGVcbiAgICoga2V5Ym9hcmQgY29udHJvbGxlciBvbiBFbnRlcikuIFJlYWRzIHRoZSBsaXZlIGVkaXRvciB0ZXh0IOKAlCBzYW1lIHRyaWNrXG4gICAqIHRoZSBSZWFjdCBjb21wb25lbnQgdXNlcyDigJQgc28gdGhlIGVtaXR0ZWQgcXVlcnkgcmVmbGVjdHMgd2hhdGV2ZXIncyBpblxuICAgKiB0aGUgRE9NIHJpZ2h0IG5vdywgbm90IGEgcG9zc2libHktc3RhbGUgc3RhdGUgc25hcHNob3QuXG4gICAqL1xuICBwcml2YXRlIGhhbmRsZVN1Ym1pdChfcmVzdWx0OiBBdXRvY29tcGxldGVSZXN1bHQpOiB2b2lkIHtcbiAgICBjb25zdCBlZGl0b3IgPSB0aGlzLmVkaXRvclJlZj8ubmF0aXZlRWxlbWVudDtcbiAgICBpZiAoIWVkaXRvcikgcmV0dXJuO1xuICAgIGNvbnN0IHRleHQgPSBleHRyYWN0UGxhaW5UZXh0KGVkaXRvcik7XG4gICAgY29uc3Qgc3RhdGUgPSB0aGlzLmNvbnRyb2xsZXIuZ2V0U3RhdGUoKTtcbiAgICBjb25zdCBwYXJhbXMgPSB0aGlzLmNvbXBsZXRlZFBhcmFtcyA/PyBzdGF0ZS5jb21wbGV0ZWRQYXJhbXM7XG4gICAgdGhpcy5zdWJtaXR0ZWQuZW1pdChcbiAgICAgIGJ1aWxkU3VibWl0UmVzdWx0KHRleHQsIHBhcmFtcywgc3RhdGUuc2tpcHBlZFBhcmFtcywge1xuICAgICAgICBpZGVudGlmaWVkUGFyYW1zOiBzdGF0ZS5pZGVudGlmaWVkUGFyYW1zLFxuICAgICAgICBpc1JlYWR5OiBzdGF0ZS5pc1JlYWR5LFxuICAgICAgICBjdXN0b21GaWVsZHM6IHN0YXRlLmN1c3RvbUZpZWxkcyxcbiAgICAgIH0pLFxuICAgICk7XG4gICAgaWYgKHRoaXMucmVzZXRPblN1Ym1pdCkgdGhpcy5jb250cm9sbGVyLnJlc2V0KCk7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZVN1Ym1pdEZyb21Vc2VyQWN0aW9uKCk6IHZvaWQge1xuICAgIGNvbnN0IHN0YXRlID0gdGhpcy5jb250cm9sbGVyLmdldFN0YXRlKCk7XG4gICAgaWYgKCF0aGlzLmNhblN1Ym1pdChzdGF0ZSkpIHJldHVybjtcbiAgICAvLyBTeW50aGVzaXplIHRoZSByZXN1bHQgZm9yIHRoZSBzdWJtaXQtYnV0dG9uIGNsaWNrIHBhdGg7IHNhbWUgc2hhcGVcbiAgICAvLyB0aGUgY29udHJvbGxlciB3b3VsZCBkZWxpdmVyIGZyb20gYSBrZXlib2FyZCBFbnRlciwgc28gaGFuZGxlU3VibWl0XG4gICAgLy8gY2FuIHRha2UgZWl0aGVyIGVudHJ5IHBvaW50LlxuICAgIHRoaXMuaGFuZGxlU3VibWl0KHtcbiAgICAgIHF1ZXJ5OiBzdGF0ZS50ZXh0LnRyaW0oKSxcbiAgICAgIHJhd19xdWVyeTogXCJcIixcbiAgICAgIGNvbXBsZXRlZF9wYXJhbXM6IFtdLFxuICAgICAgaWRlbnRpZmllZF9wYXJhbXM6IFtdLFxuICAgICAgaXNfcmVhZHk6IHN0YXRlLmlzUmVhZHksXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIG1lYXN1cmVQaWxsV3JhcCgpOiB2b2lkIHtcbiAgICBjb25zdCBjb250YWluZXIgPSB0aGlzLnBpbGxDb250YWluZXJSZWY/Lm5hdGl2ZUVsZW1lbnQ7XG4gICAgY29uc3QgZWRpdG9yID0gdGhpcy5lZGl0b3JSZWY/Lm5hdGl2ZUVsZW1lbnQ7XG4gICAgaWYgKCFjb250YWluZXIgfHwgIWVkaXRvcikgcmV0dXJuO1xuICAgIGNvbnN0IGlubmVyID0gY29udGFpbmVyLmZpcnN0RWxlbWVudENoaWxkIGFzIEhUTUxFbGVtZW50IHwgbnVsbDtcbiAgICBpZiAoIWlubmVyKSByZXR1cm47XG4gICAgLy8gV3JhcCBkZXRlY3Rpb246IHRoZSBwaWxsIHJvdydzIHRvcCB2cyB0aGUgZWRpdG9yJ3MgYm90dG9tLiBXaGVuIHRoZVxuICAgIC8vIHBpbGxzIHNpdCBvbiAob3IgYWJvdmUpIHRoZSBlZGl0b3IncyBsYXN0IGxpbmUgdGhleSdyZSBOT1Qgd3JhcHBlZCDigJRcbiAgICAvLyBrZWVwIHRoZSA4cHggbWFyZ2luIHNvIHRoZXkgZG9uJ3QgYnV0dCBhZ2FpbnN0IHR5cGVkIHRleHQgb3IgdGhlXG4gICAgLy8gcGxhY2Vob2xkZXIuIFRoaXMgaGFuZGxlcyB0aGUgZW1wdHktZWRpdG9yICsgcGxhY2Vob2xkZXIgY2FzZVxuICAgIC8vIG5hdHVyYWxseTogdGhlIHBsYWNlaG9sZGVyIHN0aWxsIG9jY3VwaWVzIHRoZSBlZGl0b3IncyBsaW5lIGJveC5cbiAgICBjb25zdCBjUmVjdCA9IGlubmVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIGNvbnN0IGVSZWN0ID0gZWRpdG9yLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIGNvbnN0IHdyYXBwZWQgPSBjUmVjdC50b3AgPj0gZVJlY3QuYm90dG9tIC0gMjtcbiAgICB0aGlzLnpvbmUucnVuKCgpID0+IHtcbiAgICAgIGlmICh3cmFwcGVkKSBjb250YWluZXIuc2V0QXR0cmlidXRlKFwiZGF0YS1haWEtcGlsbC13cmFwcGVkXCIsIFwiXCIpO1xuICAgICAgZWxzZSBjb250YWluZXIucmVtb3ZlQXR0cmlidXRlKFwiZGF0YS1haWEtcGlsbC13cmFwcGVkXCIpO1xuICAgIH0pO1xuICB9XG59XG5cbmZ1bmN0aW9uIG5vb3AoKTogdm9pZCB7XG4gIC8vIERlZmF1bHQgbm8tb3AgZm9yIENWQSBjYWxsYmFja3MuXG59XG5cbi8qKlxuICogUmVzb2x2ZSBhIGNvbmNyZXRlIGxpZ2h0L2RhcmsgdmFsdWUgZnJvbSB0aGUgY29uZmlndXJlZCBtb2RlLiBVc2VkIHRvIHNlZWRcbiAqIHRoZSBgZGF0YS1tb2RlYCBhdHRyaWJ1dGUgc3luY2hyb25vdXNseSAoaW5jbHVkaW5nIGR1cmluZyBTU1IsIHdoZXJlXG4gKiBNb2RlQ29udHJvbGxlciBuZXZlciBydW5zKS4gT24gdGhlIHNlcnZlciBgd2luZG93YCBpcyB1bmRlZmluZWQg4oaSIGRlZmF1bHRzXG4gKiB0byBcImRhcmtcIiAobWF0Y2hlcyB0aGUgdmFuaWxsYS9SZWFjdCBiZWhhdmlvcikuXG4gKi9cbmZ1bmN0aW9uIHJlc29sdmVJbml0aWFsTW9kZShtb2RlOiBBcHBlYXJhbmNlTW9kZSk6IFwibGlnaHRcIiB8IFwiZGFya1wiIHtcbiAgaWYgKG1vZGUgIT09IFwiYXV0b1wiKSByZXR1cm4gbW9kZTtcbiAgaWYgKHR5cGVvZiB3aW5kb3cgPT09IFwidW5kZWZpbmVkXCIpIHJldHVybiBcImRhcmtcIjtcbiAgcmV0dXJuIHdpbmRvdy5tYXRjaE1lZGlhKFwiKHByZWZlcnMtY29sb3Itc2NoZW1lOiBkYXJrKVwiKS5tYXRjaGVzID8gXCJkYXJrXCIgOiBcImxpZ2h0XCI7XG59XG4iLCI8ZGl2XG4gICNjb250YWluZXJcbiAgY2xhc3M9XCJtYWdpY3gtYWlhIG1hZ2ljeC1haWEtY29udGFpbmVyXCJcbiAgW2F0dHIuZGF0YS1waWxsLXBsYWNlbWVudF09XCJwaWxsUGxhY2VtZW50XCJcbiAgW2F0dHIuZGF0YS1vcHRpb25zLXBvc2l0aW9uXT1cIm9wdGlvbnNQb3NpdGlvblwiXG4gIFthdHRyLmRhdGEtYW5pbWF0aW9uc109XCJhbmltYXRpb25zID8gJ29uJyA6ICdvZmYnXCJcbiAgW2F0dHIuZGF0YS1tb2RlXT1cInJlc29sdmVkTW9kZVwiXG4+XG4gIDxhaS1hdXRvY29tcGxldGUtZHJvcGRvd25cbiAgICAqbmdJZj1cImNvbnRyb2xsZXJcIlxuICAgIFtjb250cm9sbGVyXT1cImNvbnRyb2xsZXJcIlxuICAgIFtzaG93UGlsbHNdPVwic2hvd0Ryb3Bkb3duUGlsbHNcIlxuICAgIFtzaG93U2tpcEJ1dHRvbl09XCJzaG93U2tpcEJ1dHRvblwiXG4gICAgW3Nob3dPcHRpb25JY29uc109XCJzaG93T3B0aW9uSWNvbnNcIlxuICAgIFtzaG93T3B0aW9uSW1hZ2VzXT1cInNob3dPcHRpb25JbWFnZXNcIlxuICAgIFtzaG93T3B0aW9uQ291bnRzXT1cInNob3dPcHRpb25Db3VudHNcIlxuICAgIFtwcm9kdWN0c0xheW91dF09XCJwcm9kdWN0c0xheW91dFwiXG4gICAgW3Byb2R1Y3RJbWFnZUZhbGxiYWNrXT1cInByb2R1Y3RJbWFnZUZhbGxiYWNrXCJcbiAgPjwvYWktYXV0b2NvbXBsZXRlLWRyb3Bkb3duPlxuXG4gIDxkaXZcbiAgICBjbGFzcz1cIm1hZ2ljeC1haWEtaW5wdXQtd3JhcHBlclwiXG4gICAgZGF0YS1haWEtaW5wdXQtd3JhcHBlcj1cIlwiXG4gICAgKGNsaWNrKT1cIm9uV3JhcHBlckNsaWNrKCRldmVudClcIlxuICAgIChrZXl1cCk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICA+XG4gICAgPGRpdiBjbGFzcz1cIm1hZ2ljeC1haWEtZWRpdG9yLWFyZWFcIiBkYXRhLWFpYS1lZGl0b3I9XCJcIj5cbiAgICAgIDxkaXZcbiAgICAgICAgI2VkaXRvclxuICAgICAgICAqbmdJZj1cImNvbnRyb2xsZXJcIlxuICAgICAgICBbYWlhRWRpdG9ySG9zdF09XCJjb250cm9sbGVyXCJcbiAgICAgICAgW2F1dG9Gb2N1c109XCJhdXRvRm9jdXNcIlxuICAgICAgICBbc2hvd0NoaXBJY29uc109XCJzaG93Q2hpcEljb25zXCJcbiAgICAgICAgW3Nob3dDaGlwSW1hZ2VzXT1cInNob3dDaGlwSW1hZ2VzXCJcbiAgICAgICAgY2xhc3M9XCJtYWdpY3gtYWlhLWlucHV0XCJcbiAgICAgICAgZGF0YS1haWEtaW5wdXQ9XCJcIlxuICAgICAgPjwvZGl2PlxuXG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29udHJvbGxlciAmJiBzaG93SW5saW5lUGlsbHNcIj5cbiAgICAgICAgPHNwYW5cbiAgICAgICAgICAjcGlsbENvbnRhaW5lclxuICAgICAgICAgIGNsYXNzPVwibWFnaWN4LWFpYS1waWxsLWxpc3QtY29udGFpbmVyXCJcbiAgICAgICAgICBkYXRhLWFpYS1waWxsLWxpc3QtY29udGFpbmVyPVwiXCJcbiAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgKGNvbnRyb2xsZXIuaXNMb2FkaW5nJCB8IGFzeW5jKSB8fFxuICAgICAgICAgICAgICAoKGNvbnRyb2xsZXIuc3VnZ2VzdGlvblBpbGxzJCB8IGFzeW5jKT8ubGVuZ3RoID8/IDApID4gMFxuICAgICAgICAgIFwiXG4gICAgICAgID5cbiAgICAgICAgICA8YWlhLXBpbGwtbGlzdFxuICAgICAgICAgICAgW3BpbGxzXT1cIihjb250cm9sbGVyLnN1Z2dlc3Rpb25QaWxscyQgfCBhc3luYykgPz8gW11cIlxuICAgICAgICAgICAgW2FjdGl2ZVBpbGxJbmRleF09XCIwXCJcbiAgICAgICAgICAgIFthY3RpdmVTZWxlY3RlZF09XCIoY29udHJvbGxlci5pc0FjdGl2ZVBpbGxTZWxlY3RlZCQgfCBhc3luYykgPz8gZmFsc2VcIlxuICAgICAgICAgICAgW2xvYWRpbmddPVwiKGNvbnRyb2xsZXIuaXNMb2FkaW5nJCB8IGFzeW5jKSA/PyBmYWxzZVwiXG4gICAgICAgICAgICAoc2VsZWN0UGlsbCk9XCJvblNlbGVjdFBpbGwoJGV2ZW50KVwiXG4gICAgICAgICAgPjwvYWlhLXBpbGwtbGlzdD5cbiAgICAgICAgPC9zcGFuPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+XG5cbiAgICA8bmctY29udGFpbmVyIFtuZ1N3aXRjaF09XCJzdWJtaXRCdXR0b25TdGF0ZVwiPlxuICAgICAgPGFpYS1zdWJtaXQtYnV0dG9uXG4gICAgICAgICpuZ1N3aXRjaENhc2U9XCInZGVmYXVsdCdcIlxuICAgICAgICBbZGlzYWJsZWRdPVwiXG4gICAgICAgICAgIShcbiAgICAgICAgICAgIGNvbnRyb2xsZXIgJiZcbiAgICAgICAgICAgIGNhblN1Ym1pdCh7XG4gICAgICAgICAgICAgIHNlZ21lbnRzOiAoY29udHJvbGxlci5zZWdtZW50cyQgfCBhc3luYykgPz8gW10sXG4gICAgICAgICAgICAgIGNvbXBsZXRlZFBhcmFtczogKGNvbnRyb2xsZXIuY29tcGxldGVkUGFyYW1zJCB8IGFzeW5jKSA/PyBbXVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICApXG4gICAgICAgIFwiXG4gICAgICAgIChzdWJtaXQpPVwib25TdWJtaXRCdXR0b25DbGljaygkZXZlbnQpXCJcbiAgICAgID48L2FpYS1zdWJtaXQtYnV0dG9uPlxuXG4gICAgICA8c3BhblxuICAgICAgICAqbmdTd2l0Y2hDYXNlPVwiJ2N1c3RvbSdcIlxuICAgICAgICBkYXRhLWFpYS1zdWJtaXQ9XCJcIlxuICAgICAgICBkYXRhLWFpYS1zdWJtaXQtc2xvdD1cIlwiXG4gICAgICAgIGNsYXNzPVwibWFnaWN4LWFpYS1zdWJtaXQtc2xvdFwiXG4gICAgICAgIChjbGljayk9XCJvblN1Ym1pdFNsb3RDbGljaygkZXZlbnQpXCJcbiAgICAgID5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImN1c3RvbVN1Ym1pdFRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XG4gICAgICA8L3NwYW4+XG4gICAgPC9uZy1jb250YWluZXI+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=
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=
@@ -148,6 +148,15 @@ export class AIAutocompleteController {
148
148
  return;
149
149
  this.core.reset();
150
150
  }
151
+ /**
152
+ * Records a submit in telemetry. Enter is recorded by the SDK; call this
153
+ * from a submit button you render, so each submit is counted once.
154
+ */
155
+ recordSubmit(result) {
156
+ if (this.isDestroyed)
157
+ return;
158
+ this.core.recordSubmit(result);
159
+ }
151
160
  /** Pick a dropdown option (or replace the re-edited param if in re-edit mode). */
152
161
  selectOption(option) {
153
162
  if (this.isDestroyed)
@@ -410,4 +419,4 @@ function computeDropdown(s, optionsPosition) {
410
419
  optionsPosition,
411
420
  };
412
421
  }
413
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWktYXV0b2NvbXBsZXRlLmNvbnRyb2xsZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL2NvbnRyb2xsZXIvYWktYXV0b2NvbXBsZXRlLmNvbnRyb2xsZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUdMLGNBQWMsSUFBSSxrQkFBa0IsRUFHcEMsZ0JBQWdCLEVBRWhCLG9CQUFvQixHQU1yQixNQUFNLHFDQUFxQyxDQUFDO0FBQzdDLE9BQU8sRUFBRSxlQUFlLEVBQUUsYUFBYSxFQUFFLEdBQUcsRUFBbUIsV0FBVyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBT3pGLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFNUM7Ozs7Ozs7Ozs7OztHQVlHO0FBQ0gsTUFBTSxPQUFPLHdCQUF3QjtJQW1HbkM7OztPQUdHO0lBQ0gsWUFBWSxPQUF3QyxFQUFFO1FBcEd0RCw0RUFBNEU7UUFDNUUsNEVBQTRFO1FBQzVFLG1FQUFtRTtRQUNsRCxxQkFBZ0IsR0FBRyxJQUFJLGVBQWUsQ0FBb0IsT0FBTyxDQUFDLENBQUM7UUFFNUUsZ0JBQVcsR0FBRyxLQUFLLENBQUM7UUFnRzFCLElBQUksT0FBTyxRQUFRLEtBQUssV0FBVyxFQUFFO1lBQ25DLE1BQU0sSUFBSSxLQUFLLENBQ2IsMkRBQTJEO2dCQUN6RCx3RUFBd0UsQ0FDM0UsQ0FBQztTQUNIO1FBRUQsd0VBQXdFO1FBQ3hFLHFFQUFxRTtRQUNyRSxNQUFNLElBQUksR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRTNDLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxrQkFBa0IsQ0FBQyxJQUFJLEVBQUU7WUFDdkMsR0FBRyxJQUFJO1lBQ1AsVUFBVSxFQUFFLFVBQVU7WUFDdEIsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNLElBQUksY0FBYztZQUNyQyxpRUFBaUU7WUFDakUsb0VBQW9FO1lBQ3BFLDJDQUEyQztZQUMzQyxlQUFlLEVBQUUsSUFBSSxDQUFDLGVBQWUsSUFBSSxPQUFPO1NBQ2pELENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxlQUFlLENBQVksSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO1FBQ3RFLHNFQUFzRTtRQUN0RSxzRUFBc0U7UUFDdEUsdUVBQXVFO1FBQ3ZFLDBFQUEwRTtRQUMxRSxVQUFVO1FBQ1YsRUFBRTtRQUNGLHFFQUFxRTtRQUNyRSx5RUFBeUU7UUFDekUsd0VBQXdFO1FBQ3hFLDBFQUEwRTtRQUMxRSxzRUFBc0U7UUFDdEUsbUVBQW1FO1FBQ25FLDREQUE0RDtRQUM1RCxFQUFFO1FBQ0YsdUVBQXVFO1FBQ3ZFLHFFQUFxRTtRQUNyRSx3RUFBd0U7UUFDeEUsdUVBQXVFO1FBQ3ZFLDJDQUEyQztRQUMzQyxJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRTtZQUM5QyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVc7Z0JBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO1FBQ25FLENBQUMsQ0FBQyxDQUFDO1FBRUgsZ0NBQWdDO1FBQ2hDLHlFQUF5RTtRQUN6RSxzRUFBc0U7UUFDdEUseUVBQXlFO1FBQ3pFLGdFQUFnRTtRQUNoRSx1RUFBdUU7UUFDdkUsY0FBYztRQUNkLElBQUksQ0FBQyxLQUFLLEdBQUcsV0FBVyxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN4RCxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsV0FBVyxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxlQUFlLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDckYsSUFBSSxDQUFDLGNBQWMsR0FBRyxXQUFXLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLGFBQWEsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUNqRixJQUFJLENBQUMsaUJBQWlCLEdBQUcsV0FBVyxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxnQkFBZ0IsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUN2RixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsV0FBVyxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxxQkFBcUIsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUMzRixJQUFJLENBQUMsU0FBUyxHQUFHLFdBQVcsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ3ZFLElBQUksQ0FBQyxXQUFXLEdBQUcsV0FBVyxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNwRSxJQUFJLENBQUMsWUFBWSxHQUFHLFdBQVcsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQzdFLElBQUksQ0FBQyxTQUFTLEdBQUcsV0FBVyxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDdkUsSUFBSSxDQUFDLGFBQWEsR0FBRyxXQUFXLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ3hFLElBQUksQ0FBQyxZQUFZLEdBQUcsV0FBVyxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1FBQzlFLElBQUksQ0FBQyxVQUFVLEdBQUcsV0FBVyxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztRQUNoRSxJQUFJLENBQUMsUUFBUSxHQUFHLFdBQVcsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDOUQsSUFBSSxDQUFDLFVBQVUsR0FBRyxXQUFXLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ2xFLElBQUksQ0FBQyxlQUFlLEdBQUcsV0FBVyxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUM1RSxJQUFJLENBQUMscUJBQXFCLEdBQUcsV0FBVyxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1FBQ3hGLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxXQUFXLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQzlFLElBQUksQ0FBQyxNQUFNLEdBQUcsV0FBVyxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMxRCxJQUFJLENBQUMsYUFBYSxHQUFHLFdBQVcsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDeEUsSUFBSSxDQUFDLGNBQWMsR0FBRyxXQUFXLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQzFFLElBQUksQ0FBQyxZQUFZLEdBQUcsV0FBVyxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUV0RSxnQ0FBZ0M7UUFDaEMscUVBQXFFO1FBQ3JFLDREQUE0RDtRQUM1RCxxRUFBcUU7UUFDckUscUVBQXFFO1FBQ3JFLG9FQUFvRTtRQUNwRSxpRUFBaUU7UUFDakUsc0VBQXNFO1FBQ3RFLDZCQUE2QjtRQUM3QixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUMvQixHQUFHLENBQUMsWUFBWSxDQUFDLEVBQ2pCLFdBQVcsQ0FBQyxFQUFFLFVBQVUsRUFBRSxDQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLENBQy9DLENBQUM7UUFFRixJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLElBQUksT0FBTyxDQUFDLENBQUM7UUFDNUQsSUFBSSxDQUFDLFNBQVMsR0FBRyxhQUFhLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUMxRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxlQUFlLENBQUMsRUFBRSxFQUFFLENBQUMsZUFBZSxDQUFDLENBQUMsRUFBRSxlQUFlLENBQUMsQ0FBQyxFQUNsRSxXQUFXLENBQUMsRUFBRSxVQUFVLEVBQUUsQ0FBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUMvQyxDQUFDO0lBQ0osQ0FBQztJQUVELDhCQUE4QjtJQUU5Qix5RkFBeUY7SUFDekYsSUFBSSxTQUFTO1FBQ1gsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQztJQUM3QixDQUFDO0lBRUQsdUZBQXVGO0lBQ3ZGLElBQUksU0FBUztRQUNYLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQztJQUMxQixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILFFBQVE7UUFDTixPQUFPLFlBQVksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzVDLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILFNBQVM7UUFDUCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7SUFDL0IsQ0FBQztJQUVELG9EQUFvRDtJQUNwRCxFQUFFO0lBQ0YseUVBQXlFO0lBQ3pFLDBFQUEwRTtJQUMxRSwyRUFBMkU7SUFDM0UsMEVBQTBFO0lBQzFFLHdFQUF3RTtJQUN4RSx3RUFBd0U7SUFDeEUsaUVBQWlFO0lBQ2pFLDJCQUEyQjtJQUUzQiw2RUFBNkU7SUFDN0UsS0FBSztRQUNILElBQUksSUFBSSxDQUFDLFdBQVc7WUFBRSxPQUFPO1FBQzdCLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDcEIsQ0FBQztJQUVELGtGQUFrRjtJQUNsRixZQUFZLENBQUMsTUFBd0I7UUFDbkMsSUFBSSxJQUFJLENBQUMsV0FBVztZQUFFLE9BQU87UUFDN0IsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDakMsQ0FBQztJQUVEOzs7Ozs7OztPQVFHO0lBQ0gsYUFBYSxDQUFDLE9BQWdCO1FBQzVCLElBQUksSUFBSSxDQUFDLFdBQVc7WUFBRSxPQUFPO1FBQzdCLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ25DLENBQUM7SUFFRCxpRUFBaUU7SUFDakUsYUFBYSxDQUFDLEtBQWE7UUFDekIsSUFBSSxJQUFJLENBQUMsV0FBVztZQUFFLE9BQU87UUFDN0IsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDakMsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxjQUFjO1FBQ1osSUFBSSxJQUFJLENBQUMsV0FBVztZQUFFLE9BQU87UUFDN0IsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztJQUM3QixDQUFDO0lBRUQsb0ZBQW9GO0lBQ3BGLGVBQWU7UUFDYixJQUFJLElBQUksQ0FBQyxXQUFXO1lBQUUsT0FBTztRQUM3QixJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO0lBQzlCLENBQUM7SUFFRCwyRUFBMkU7SUFDM0UsZUFBZTtRQUNiLElBQUksSUFBSSxDQUFDLFdBQVc7WUFBRSxPQUFPO1FBQzdCLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7SUFDOUIsQ0FBQztJQUVELDhDQUE4QztJQUM5QyxRQUFRLENBQUMsSUFBWTtRQUNuQixJQUFJLElBQUksQ0FBQyxXQUFXO1lBQUUsT0FBTztRQUM3QixJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMzQixDQUFDO0lBRUQsbURBQW1EO0lBQ25ELGtCQUFrQixDQUFDLE1BQTZCO1FBQzlDLElBQUksSUFBSSxDQUFDLFdBQVc7WUFBRSxPQUFPO1FBQzdCLElBQUksQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDdkMsQ0FBQztJQUVELDZFQUE2RTtJQUM3RSxnQkFBZ0IsQ0FBQyxLQUFhO1FBQzVCLElBQUksSUFBSSxDQUFDLFdBQVc7WUFBRSxPQUFPO1FBQzdCLElBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDcEMsQ0FBQztJQUVELDRFQUE0RTtJQUM1RSxhQUFhLENBQUMsS0FBb0I7UUFDaEMsSUFBSSxJQUFJLENBQUMsV0FBVztZQUFFLE9BQU87UUFDN0IsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDakMsQ0FBQztJQUVELHNDQUFzQztJQUN0QyxVQUFVLENBQUMsT0FBZ0I7UUFDekIsSUFBSSxJQUFJLENBQUMsV0FBVztZQUFFLE9BQU87UUFDN0IsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDaEMsQ0FBQztJQUVELCtEQUErRDtJQUMvRCxpQkFBaUIsQ0FBQyxPQUFlO1FBQy9CLElBQUksSUFBSSxDQUFDLFdBQVc7WUFBRSxPQUFPO1FBQzdCLElBQUksQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDdkMsQ0FBQztJQUVELHlEQUF5RDtJQUN6RCxZQUFZO1FBQ1YsSUFBSSxJQUFJLENBQUMsV0FBVztZQUFFLE9BQU87UUFDN0IsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUMzQixDQUFDO0lBRUQsaUVBQWlFO0lBQ2pFLHFCQUFxQixDQUFDLE1BQXFCO1FBQ3pDLElBQUksSUFBSSxDQUFDLFdBQVc7WUFBRSxPQUFPO1FBQzdCLElBQUksQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDMUMsQ0FBQztJQUVELDZEQUE2RDtJQUM3RCxlQUFlLENBQUMsTUFBcUI7UUFDbkMsSUFBSSxJQUFJLENBQUMsV0FBVztZQUFFLE9BQU87UUFDN0IsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDcEMsQ0FBQztJQUVELHlFQUF5RTtJQUN6RSxtQkFBbUIsQ0FBQyxXQUFtQjtRQUNyQyxJQUFJLElBQUksQ0FBQyxXQUFXO1lBQUUsT0FBTyxLQUFLLENBQUM7UUFDbkMsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ3BELENBQUM7SUFFRCxvRUFBb0U7SUFDcEUsc0JBQXNCLENBQUMsS0FBYTtRQUNsQyxJQUFJLElBQUksQ0FBQyxXQUFXO1lBQUUsT0FBTztRQUM3QixJQUFJLENBQUMsSUFBSSxDQUFDLHNCQUFzQixDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzFDLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsY0FBYyxDQUFDLEtBQWE7UUFDMUIsSUFBSSxJQUFJLENBQUMsV0FBVztZQUFFLE9BQU87UUFDN0IsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDbEMsQ0FBQztJQUVELDhFQUE4RTtJQUM5RSxpQkFBaUI7UUFDZixJQUFJLElBQUksQ0FBQyxXQUFXO1lBQUUsT0FBTztRQUM3QixJQUFJLENBQUMsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7SUFDaEMsQ0FBQztJQUVELGlGQUFpRjtJQUNqRixhQUFhO1FBQ1gsSUFBSSxJQUFJLENBQUMsV0FBVztZQUFFLE9BQU87UUFDN0IsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUM1QixDQUFDO0lBRUQsb0JBQW9CO0lBRXBCOzs7Ozs7T0FNRztJQUNILE1BQU0sQ0FBQyxJQUFvQztRQUN6QyxJQUFJLElBQUksQ0FBQyxXQUFXO1lBQUUsT0FBTztRQUM3QixJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN2QixJQUFJLElBQUksQ0FBQyxlQUFlLEtBQUssU0FBUyxFQUFFO1lBQ3RDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1NBQ2xEO0lBQ0gsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxPQUFPO1FBQ0wsSUFBSSxJQUFJLENBQUMsV0FBVztZQUFFLE9BQU87UUFDN0IsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7UUFDeEIsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDcEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUM1QixDQUFDO0NBQ0Y7QUFFRCw0REFBNEQ7QUFFNUQ7Ozs7OztHQU1HO0FBQ0gsU0FBUyxLQUFLLENBQUksQ0FBZSxFQUFFLENBQWU7SUFDaEQsSUFBSSxDQUFDLEtBQUssQ0FBQztRQUFFLE9BQU8sSUFBSSxDQUFDO0lBQ3pCLElBQUksQ0FBQyxDQUFDLE1BQU0sS0FBSyxDQUFDLENBQUMsTUFBTTtRQUFFLE9BQU8sS0FBSyxDQUFDO0lBQ3hDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1FBQ2pDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFBRSxPQUFPLEtBQUssQ0FBQztLQUNqQztJQUNELE9BQU8sSUFBSSxDQUFDO0FBQ2QsQ0FBQztBQUVELHdFQUF3RTtBQUN4RSxTQUFTLGdCQUFnQixDQUFDLENBQVk7SUFDcEMsT0FBTyxDQUFDLENBQUMsZUFBZSxDQUFDO0FBQzNCLENBQUM7QUFFRCxTQUFTLFlBQVksQ0FBQyxDQUFZO0lBQ2hDLE9BQU87UUFDTCxJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUk7UUFDWixlQUFlLEVBQUUsQ0FBQyxDQUFDLGVBQWU7UUFDbEMsYUFBYSxFQUFFLENBQUMsQ0FBQyxhQUFhO1FBQzlCLGdCQUFnQixFQUFFLENBQUMsQ0FBQyxnQkFBZ0I7UUFDcEMsZUFBZSxFQUFFLENBQUMsQ0FBQyxxQkFBcUI7UUFDeEMsUUFBUSxFQUFFLENBQUMsQ0FBQyxRQUFRO1FBQ3BCLFVBQVUsRUFBRSxDQUFDLENBQUMsVUFBVTtRQUN4QixXQUFXLEVBQUUsQ0FBQyxDQUFDLFdBQVc7UUFDMUIsUUFBUSxFQUFFLENBQUMsQ0FBQyxRQUFRO1FBQ3BCLFlBQVksRUFBRSxDQUFDLENBQUMsWUFBWTtRQUM1QixXQUFXLEVBQUUsQ0FBQyxDQUFDLG1CQUFtQjtRQUNsQyxTQUFTLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDO1FBQzlCLE9BQU8sRUFBRSxDQUFDLENBQUMsT0FBTztRQUNsQixTQUFTLEVBQUUsQ0FBQyxDQUFDLFNBQVM7UUFDdEIsY0FBYyxFQUFFLENBQUMsQ0FBQyxjQUFjO1FBQ2hDLGVBQWUsRUFBRSxDQUFDLENBQUMsZUFBZTtRQUNsQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUs7UUFDZCxZQUFZLEVBQUUsQ0FBQyxDQUFDLFlBQVk7UUFDNUIsaUJBQWlCLEVBQUUsQ0FBQyxDQUFDLGlCQUFpQjtRQUN0QyxhQUFhLEVBQUUsQ0FBQyxDQUFDLGFBQWE7UUFDOUIsV0FBVyxFQUFFLENBQUMsQ0FBQyxXQUFXO0tBQzNCLENBQUM7QUFDSixDQUFDO0FBRUQsU0FBUyxlQUFlLENBQ3RCLENBQVksRUFDWixlQUFrQztJQUVsQyxNQUFNLFlBQVksR0FBRyxDQUFDLENBQUMsWUFBWSxDQUFDO0lBQ3BDLE1BQU0saUJBQWlCLEdBQUcsQ0FBQyxDQUFDLGlCQUFpQixDQUFDO0lBQzlDLE1BQU0sYUFBYSxHQUFHLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzFDLE1BQU0sZ0JBQWdCLEdBQUcsQ0FBQyxDQUFDLHFCQUFxQixDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3BELE1BQU0sWUFBWSxHQUFzQixZQUFZO1FBQ2xELENBQUMsQ0FBQztZQUNFLElBQUksRUFBRSxZQUFZLENBQUMsY0FBYztZQUNqQyxJQUFJLEVBQUUsWUFBWSxDQUFDLHFCQUFxQjtZQUN4QyxRQUFRLEVBQUUsSUFBSTtZQUNkLE9BQU8sRUFBRSxZQUFZLENBQUMsT0FBTztTQUM5QjtRQUNILENBQUMsQ0FBQyxpQkFBaUI7WUFDakIsQ0FBQyxDQUFDLGlFQUFpRTtnQkFDakUsd0VBQXdFO2dCQUN4RTtvQkFDRSxJQUFJLEVBQUUsaUJBQWlCLENBQUMsSUFBSTtvQkFDNUIsSUFBSSxFQUFFLG9CQUFvQixDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQztvQkFDbEQsUUFBUSxFQUFFLElBQUk7b0JBQ2QsT0FBTyxFQUFFLEVBQUU7aUJBQ1o7WUFDSCxDQUFDLENBQUMsSUFBSSxDQUFDO0lBQ1gsTUFBTSxrQkFBa0IsR0FBRyxDQUFDLENBQUMsa0JBQWtCLElBQUksWUFBWSxJQUFJLGdCQUFnQixDQUFDO0lBQ3BGLE1BQU0sYUFBYSxHQUFHLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLHFCQUFxQixDQUFDO0lBQzlFLE9BQU87UUFDTCxXQUFXLEVBQUUsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLGtCQUFrQixFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUMsZUFBZSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRTtRQUM5RixXQUFXLEVBQUUsQ0FBQyxDQUFDLG1CQUFtQjtRQUNsQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLGNBQWM7UUFDeEIsS0FBSyxFQUFFLGFBQWE7UUFDcEIsb0JBQW9CLEVBQUUsQ0FBQyxDQUFDLG9CQUFvQjtRQUM1QyxTQUFTLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDO1FBQzlCLGVBQWUsRUFBRSxDQUFDLENBQUMsZUFBZTtRQUNsQyxZQUFZLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxNQUFNLEtBQUssQ0FBQztRQUN4QyxRQUFRLEVBQUUsQ0FBQyxDQUFDLFFBQVE7UUFDcEIsU0FBUyxFQUFFLE9BQU8sQ0FBQyxZQUFZLENBQUMsSUFBSSxPQUFPLENBQUMsaUJBQWlCLENBQUM7UUFDOUQsb0JBQW9CLEVBQUUsQ0FBQyxDQUFDLG9CQUFvQjtRQUM1QyxvRUFBb0U7UUFDcEUsc0VBQXNFO1FBQ3RFLDJFQUEyRTtRQUMzRSxrQ0FBa0M7UUFDbEMsVUFBVSxFQUFFLENBQUMsQ0FBQyxnQkFBZ0I7UUFDOUIsUUFBUSxFQUFFLENBQUMsQ0FBQyxRQUFRO1FBQ3BCLGVBQWUsRUFBRSxhQUFhLENBQUMsV0FBVztRQUMxQyxpQkFBaUIsRUFBRSxhQUFhLENBQUMsYUFBYTtRQUM5QyxjQUFjLEVBQUUsYUFBYSxDQUFDLFVBQVU7UUFDeEMsZUFBZTtLQUNoQixDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIHR5cGUgQXV0b2NvbXBsZXRlUmVzdWx0LFxuICB0eXBlIENvbXBsZXRlZFBhcmFtU3RhdGUsXG4gIEFJQXV0b2NvbXBsZXRlIGFzIENvcmVBSUF1dG9jb21wbGV0ZSxcbiAgdHlwZSBDb3JlU3RhdGUsXG4gIHR5cGUgQ3VzdG9tRmllbGRzUmVwb3J0LFxuICBkYXRlU2VsZWN0aW9uRm9yLFxuICB0eXBlIElkZW50aWZpZWRQYXJhbVN0YXRlLFxuICBpZGVudGlmaWVkUGFyYW1MYWJlbCxcbiAgdHlwZSBQcm9kdWN0LFxuICB0eXBlIFNlZ21lbnQsXG4gIHR5cGUgU2tpcHBlZFBhcmFtU3RhdGUsXG4gIHR5cGUgU3VnZ2VzdGlvbixcbiAgdHlwZSBTdWdnZXN0aW9uT3B0aW9uLFxufSBmcm9tIFwiQG1hZ2ljeC1lbmcvYWktYXV0b2NvbXBsZXRlLXZhbmlsbGFcIjtcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgY29tYmluZUxhdGVzdCwgbWFwLCB0eXBlIE9ic2VydmFibGUsIHNoYXJlUmVwbGF5IH0gZnJvbSBcInJ4anNcIjtcbmltcG9ydCB0eXBlIHtcbiAgQUlBdXRvY29tcGxldGVDb250cm9sbGVyT3B0aW9ucyxcbiAgQUlBdXRvY29tcGxldGVDb250cm9sbGVyU3RhdGUsXG4gIEFJQXV0b2NvbXBsZXRlQ29udHJvbGxlclVwZGF0ZSxcbiAgQUlBdXRvY29tcGxldGVEcm9wZG93blN0YXRlLFxufSBmcm9tIFwiLi4vc2hhcmVkL3R5cGVzXCI7XG5pbXBvcnQgeyBkZXJpdmVGaWVsZCB9IGZyb20gXCIuL29ic2VydmFibGVzXCI7XG5cbi8qKlxuICogVGllciAyIGxvZ2ljIHN1cmZhY2UgZm9yIGBAbWFnaWN4LWVuZy9haS1hdXRvY29tcGxldGUtYW5ndWxhcmAg4oCUIHRoZSBBbmd1bGFyXG4gKiBlcXVpdmFsZW50IG9mIFJlYWN0J3MgYHVzZUFJQXV0b2NvbXBsZXRlKClgIGhvb2suIFdyYXBzIGEgaGVhZGxlc3NcbiAqIGBAbWFnaWN4LWVuZy9haS1hdXRvY29tcGxldGUtdmFuaWxsYWAgY29yZSBhbmQgZXhwb3NlcyBpdHMgc3RhdGUgYXMgUnhKU1xuICogb2JzZXJ2YWJsZXMgcGx1cyB0aGluIGFjdGlvbiBtZXRob2RzLlxuICpcbiAqIFRoZSBjb250cm9sbGVyIGlzIGNvbnN1bWVyLW1hbmFnZWQg4oCUIHRoZSBjb25zdW1lciBjcmVhdGVzIGl0XG4gKiB3aXRoIGBuZXdgLCBob2xkcyB0aGUgcmVmZXJlbmNlLCBhbmQgKiptdXN0IGNhbGwgYGRlc3Ryb3koKWAqKiBpbiB0aGVpclxuICogb3duIGBuZ09uRGVzdHJveWAuIFRoZSBUaWVyIDEgYDxhaS1hdXRvY29tcGxldGU+YCBjb21wb25lbnQgZG9lcyB0aGlzXG4gKiBhdXRvbWF0aWNhbGx5OyBUaWVyIDIgY29uc3VtZXJzIGRvIG5vdCBnZXQgYXV0by1jbGVhbnVwLlxuICpcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNsYXNzIEFJQXV0b2NvbXBsZXRlQ29udHJvbGxlciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgY29yZTogQ29yZUFJQXV0b2NvbXBsZXRlO1xuICBwcml2YXRlIHJlYWRvbmx5IHJhd1N0YXRlJDogQmVoYXZpb3JTdWJqZWN0PENvcmVTdGF0ZT47XG4gIC8vIG9wdGlvbnNQb3NpdGlvbiBpc24ndCBwYXJ0IG9mIENvcmVTdGF0ZSAoaXQncyBhIGNvcmUgb3B0aW9uKSwgc28gdHJhY2sgaXRcbiAgLy8gaGVyZSBhbmQgZm9sZCBpdCBpbnRvIGBkcm9wZG93biRgIHNvIHRoZSBkcm9wZG93biBjYW4gcmVhZCBwbGFjZW1lbnQgZnJvbVxuICAvLyB0aGUgY29udHJvbGxlciDigJQgY29uZmlndXJlZCBvbmNlLCBrZXB0IGluIHN5bmMgdGhyb3VnaCB1cGRhdGUoKS5cbiAgcHJpdmF0ZSByZWFkb25seSBvcHRpb25zUG9zaXRpb24kID0gbmV3IEJlaGF2aW9yU3ViamVjdDxcImFib3ZlXCIgfCBcImJlbG93XCI+KFwiYmVsb3dcIik7XG4gIHByaXZhdGUgcmVhZG9ubHkgdW5zdWJzY3JpYmVDb3JlOiAoKSA9PiB2b2lkO1xuICBwcml2YXRlIGlzRGVzdHJveWVkID0gZmFsc2U7XG5cbiAgLy8gPT09IFBlci1maWVsZCBvYnNlcnZhYmxlcyA9PT1cbiAgLy8gRWFjaCBvbmUgcnVucyB0aHJvdWdoIGRlcml2ZUZpZWxkLCB3aGljaCBiYWtlcyBpbiBkaXN0aW5jdFVudGlsQ2hhbmdlZFxuICAvLyBhbmQgc2hhcmVSZXBsYXkoeyBidWZmZXJTaXplOiAxLCByZWZDb3VudDogdHJ1ZSB9KSBwZXIgwqcxOS40LlxuXG4gIC8qKiBQbGFpbi10ZXh0IGNvbnRlbnQgb2YgdGhlIGVkaXRvci4gKi9cbiAgcmVhZG9ubHkgdGV4dCQ6IE9ic2VydmFibGU8c3RyaW5nPjtcbiAgLyoqIENvbXBsZXRlZCAoYm9sZCkgcGFyYW1zIGN1cnJlbnRseSBpbiB0aGUgZWRpdG9yLiAqL1xuICByZWFkb25seSBjb21wbGV0ZWRQYXJhbXMkOiBPYnNlcnZhYmxlPENvbXBsZXRlZFBhcmFtU3RhdGVbXT47XG4gIC8qKlxuICAgKiBTdWdnZXN0aW9ucyB0aGUgdXNlciBkaXNtaXNzZWQgd2l0aCB0aGUgc2tpcCBrZXkgKOKGkikuIE5vdGhpbmcgcmVuZGVyc1xuICAgKiB0aGVtOyB0aGV5IGV4aXN0IHNvIGEgaGFuZC1yb2xsZWQgc3VibWl0IGNhbiBwYXNzIHRoZW0gdG9cbiAgICogYGJ1aWxkU3VibWl0UmVzdWx0YCBhbmQgY2FycnkgdGhlIHNhbWUgYHRleHQ6IFwic2tpcHBlZFwiYCBlbnRyaWVzIHRoZVxuICAgKiBTREsncyBvd24gcmVxdWVzdHMgZG8uXG4gICAqL1xuICByZWFkb25seSBza2lwcGVkUGFyYW1zJDogT2JzZXJ2YWJsZTxTa2lwcGVkUGFyYW1TdGF0ZVtdPjtcbiAgLyoqXG4gICAqIFBhcmFtcyB0aGUgc2VydmVyIGlkZW50aWZpZWQgaW4gdGhlIHVzZXIncyBvd24gd29yZHMuIEFscmVhZHkgcmVuZGVyZWRcbiAgICogdGhyb3VnaCBgc2VnbWVudHMkYDsgZXhwb3NlZCBzbyBhIGhhbmQtcm9sbGVkIHN1Ym1pdCBjYW4gcGFzcyB0aGVtIHRvXG4gICAqIGBidWlsZFN1Ym1pdFJlc3VsdGAgYW5kIHJlcG9ydCB0aGUgc2FtZSBgaWRlbnRpZmllZF9wYXJhbXNgIHRoZSBTREsnc1xuICAgKiBvd24gcmVzdWx0cyBjYXJyeS5cbiAgICovXG4gIHJlYWRvbmx5IGlkZW50aWZpZWRQYXJhbXMkOiBPYnNlcnZhYmxlPElkZW50aWZpZWRQYXJhbVN0YXRlW10+O1xuICAvKiogQWN0aW9uYWJsZSBzdWdnZXN0aW9uIHBpbGxzIChmaXJzdCBvbmUgaXMgdGhlIGFjdGl2ZSBwaWxsKS4gKi9cbiAgcmVhZG9ubHkgc3VnZ2VzdGlvblBpbGxzJDogT2JzZXJ2YWJsZTxTdWdnZXN0aW9uW10+O1xuICAvKiogVGV4dCArIGNvbXBsZXRlZC1wYXJhbSBzZWdtZW50cyBmb3IgcmVuZGVyaW5nIHRoZSBlZGl0b3IgYm9keS4gKi9cbiAgcmVhZG9ubHkgc2VnbWVudHMkOiBPYnNlcnZhYmxlPFNlZ21lbnRbXT47XG4gIC8qKiBJRCBvZiB0aGUgbW9zdC1yZWNlbnRseS1wcm9tb3RlZCBwYXJhbSAoZHJpdmVzIHNoaW1tZXIgYW5pbWF0aW9uKS4gKi9cbiAgcmVhZG9ubHkgbmV3UGFyYW1JZCQ6IE9ic2VydmFibGU8c3RyaW5nIHwgbnVsbD47XG4gIC8qKiBBbGwgc3VnZ2VzdGlvbnMgZnJvbSB0aGUgc2VydmVyIChpbmNsdWRpbmcgbm9uLWFjdGlvbmFibGUgb25lcykuICovXG4gIHJlYWRvbmx5IHN1Z2dlc3Rpb25zJDogT2JzZXJ2YWJsZTxTdWdnZXN0aW9uW10+O1xuICAvKipcbiAgICogV2hhdCB0aGUgcHJvZHVjdCBzdHJpcCBzaG93czogdGhlIGl0ZW1zIHRoZSBsYXRlc3QgYC9zdWdnZXN0YCByZXNwb25zZVxuICAgKiByZXBvcnRlZCBhcyBtYXRjaGluZyB0aGUgcXVlcnksIG9yIOKAlCB3aXRoIGBwcm9kdWN0c2AgY29uZmlndXJlZCBvbiB0aGVcbiAgICogY29udHJvbGxlciDigJQgdGhlIHJlc3VsdHMgb2YgdGhhdCBjdXN0b20gc2VhcmNoLlxuICAgKi9cbiAgcmVhZG9ubHkgcHJvZHVjdHMkOiBPYnNlcnZhYmxlPFByb2R1Y3RbXT47XG4gIC8qKlxuICAgKiBUaGUgY2F0YWxvZyBncm91bmRpbmcgcmVwb3J0IHRoZSBsYXRlc3QgcmVzcG9uc2UgY2FycmllZCwgb3IgbnVsbCB3aGVuIGl0XG4gICAqIGNhcnJpZWQgbm9uZTogd2hpY2ggb2YgdGhlIHF1ZXJ5J3MgY29uc3RyYWludHMgdGhlIGNhdGFsb2cgYXBwbGllZCwgd2hpY2hcbiAgICogaXQgZHJvcHBlZCwgYW5kIGhvdyBtYW55IGl0ZW1zIChhbmQgd2hpY2gpIHRoZSBhcHBsaWVkIG9uZXMgbGVmdFxuICAgKiBzdGFuZGluZy4gTnVsbCBpcyBcIm5vIG5ld3NcIiwgbm90IGFuIGVtcHR5IGNhdGFsb2cuXG4gICAqL1xuICByZWFkb25seSBjdXN0b21GaWVsZHMkOiBPYnNlcnZhYmxlPEN1c3RvbUZpZWxkc1JlcG9ydCB8IG51bGw+O1xuICAvKiogQ3VycmVudGx5IGhpZ2hsaWdodGVkIGRyb3Bkb3duIG9wdGlvbiBpbmRleC4gLTEgPSBub25lLiAqL1xuICByZWFkb25seSBhY3RpdmVJbmRleCQ6IE9ic2VydmFibGU8bnVtYmVyPjtcbiAgLyoqXG4gICAqIFVJLXZpc2libGUgbG9hZGluZyBmbGFnIOKAlCBzdXBwcmVzc2VkIGR1cmluZyB0aGUgcG9zdC1zZWxlY3QgcHJlc3NcbiAgICogYW5pbWF0aW9uIGFuZCBkdXJpbmcgcmUtZWRpdCAoY2FjaGVkIG9wdGlvbnMgc3RheSB2aXNpYmxlIHRoZXJlKS4gVXNlXG4gICAqIHRoaXMgaW5zdGVhZCBvZiB0aGUgcmF3IGNvcmUgc3RhdGUgZm9yIGFueSBsb2FkaW5nLXNrZWxldG9uIGJpbmRpbmcuXG4gICAqL1xuICByZWFkb25seSBpc0xvYWRpbmckOiBPYnNlcnZhYmxlPGJvb2xlYW4+O1xuICAvKiogU2VydmVyLXJlcG9ydGVkIFwicXVlcnkgaXMgY29tcGxldGVcIiBmbGFnLiAqL1xuICByZWFkb25seSBpc1JlYWR5JDogT2JzZXJ2YWJsZTxib29sZWFuPjtcbiAgLyoqIFdoZXRoZXIgdGhlIGVkaXRvciBjdXJyZW50bHkgaGFzIGZvY3VzLiAqL1xuICByZWFkb25seSBpc0ZvY3VzZWQkOiBPYnNlcnZhYmxlPGJvb2xlYW4+O1xuICAvKiogV2hldGhlciB0aGUgZHJvcGRvd24gc2hvdWxkIGN1cnJlbnRseSBiZSB2aXNpYmxlLiAqL1xuICByZWFkb25seSBpc0Ryb3Bkb3duT3BlbiQ6IE9ic2VydmFibGU8Ym9vbGVhbj47XG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBhY3RpdmUgKGxlYWRpbmcpIHBpbGwgc2hvdWxkIHJlbmRlciBzZWxlY3RlZCAoZnVsbCBvcGFjaXR5KVxuICAgKiByYXRoZXIgdGhhbiB0aGUgZGUtZW1waGFzaXplZCBgZmlyc3RgIHRpZXIuIEF1dG8gdHJpZ2dlciDih5IgdHJ1ZSBvbmx5IHdoaWxlXG4gICAqIGEgZHJvcGRvd24gb3B0aW9uIGlzIGhpZ2hsaWdodGVkOyBtYW51YWwg4oeSIHRydWUgb25jZSB0aGUgcGlsbCBpcyB0YXBwZWQuXG4gICAqL1xuICByZWFkb25seSBpc0FjdGl2ZVBpbGxTZWxlY3RlZCQ6IE9ic2VydmFibGU8Ym9vbGVhbj47XG4gIC8qKiBTZXJ2ZXItc3VnZ2VzdGVkIHBsYWNlaG9sZGVyIHRleHQgZm9yIHRoZSBlZGl0b3IuICovXG4gIHJlYWRvbmx5IHBsYWNlaG9sZGVyVGV4dCQ6IE9ic2VydmFibGU8c3RyaW5nPjtcbiAgLyoqIExhc3QgZmV0Y2ggZXJyb3IsIG9yIG51bGwuICovXG4gIHJlYWRvbmx5IGVycm9yJDogT2JzZXJ2YWJsZTxFcnJvciB8IG51bGw+O1xuICAvKiogUGFyYW0gY3VycmVudGx5IGJlaW5nIHJlLWVkaXRlZCwgb3IgbnVsbC4gKi9cbiAgcmVhZG9ubHkgZWRpdGluZ1BhcmFtJDogT2JzZXJ2YWJsZTxDb21wbGV0ZWRQYXJhbVN0YXRlIHwgbnVsbD47XG4gIC8qKiBQbGFpbi10ZXh0IG9mZnNldCB3aGVyZSB0aGUgZWRpdCByZWdpb24gc3RhcnRzLCBvciBudWxsLiAqL1xuICByZWFkb25seSBlZGl0aW5nQW5jaG9yJDogT2JzZXJ2YWJsZTxudW1iZXIgfCBudWxsPjtcbiAgLyoqIExpdmUgY2FyZXQgb2Zmc2V0IHdpdGhpbiB0aGUgZWRpdG9yLiAqL1xuICByZWFkb25seSBjYXJldE9mZnNldCQ6IE9ic2VydmFibGU8bnVtYmVyIHwgbnVsbD47XG5cbiAgLy8gPT09IENvbXBvc2l0ZSBvYnNlcnZhYmxlcyA9PT1cblxuICAvKipcbiAgICogU25hcHNob3Qgb2YgZXZlcnkgcHVibGljIGZpZWxkIGluIG9uZSBvYmplY3QuIENvbnZlbmllbnQgZm9yXG4gICAqIGAqbmdJZj1cImN0cmwuc3RhdGUkIHwgYXN5bmMgYXMgc3RhdGVcImAgdGVtcGxhdGluZyDigJQgYWxpYXNlcyBhbGwgZmllbGRzXG4gICAqIHVuZGVyIGEgc2luZ2xlIHN1YnNjcmlwdGlvbiBpbnN0ZWFkIG9mIG11bHRpcGxlIGB8IGFzeW5jYCBwaXBlcy5cbiAgICovXG4gIHJlYWRvbmx5IHN0YXRlJDogT2JzZXJ2YWJsZTxBSUF1dG9jb21wbGV0ZUNvbnRyb2xsZXJTdGF0ZT47XG5cbiAgLyoqXG4gICAqIENvbXBvc2l0ZSBzdGF0ZSBmb3IgdGhlIGRyb3Bkb3duIHZpZXcuIFRpZXIgMiBjb25zdW1lcnMgc3ByZWFkIHRoaXMgaW50b1xuICAgKiBgPGFpLWF1dG9jb21wbGV0ZS1kcm9wZG93bj5gOyBUaWVyIDEgdXNlcyB0aGUgc2FtZSBzaGFwZSBpbnRlcm5hbGx5LlxuICAgKi9cbiAgcmVhZG9ubHkgZHJvcGRvd24kOiBPYnNlcnZhYmxlPEFJQXV0b2NvbXBsZXRlRHJvcGRvd25TdGF0ZT47XG5cbiAgLyoqXG4gICAqIFRocm93cyBpZiBpbnZva2VkIG91dHNpZGUgYSBicm93c2VyIGVudmlyb25tZW50LiBGb3IgU1NSIC8gQW5ndWxhclxuICAgKiBVbml2ZXJzYWwsIGdhdGUgY29uc3RydWN0aW9uIHdpdGggYGlzUGxhdGZvcm1Ccm93c2VyYC5cbiAgICovXG4gIGNvbnN0cnVjdG9yKG9wdHM6IEFJQXV0b2NvbXBsZXRlQ29udHJvbGxlck9wdGlvbnMgPSB7fSkge1xuICAgIGlmICh0eXBlb2YgZG9jdW1lbnQgPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgXCJBSUF1dG9jb21wbGV0ZUNvbnRyb2xsZXIgcmVxdWlyZXMgYSBicm93c2VyIGVudmlyb25tZW50LiBcIiArXG4gICAgICAgICAgXCJGb3IgU1NSIC8gQW5ndWxhciBVbml2ZXJzYWwsIGdhdGUgY29uc3RydWN0aW9uIHdpdGggaXNQbGF0Zm9ybUJyb3dzZXIuXCIsXG4gICAgICApO1xuICAgIH1cblxuICAgIC8vIEhlYWRsZXNzIG1vZGUgbmV2ZXIgcmVuZGVycyB0byB0aGUgaG9zdCwgc28gYSB0aHJvd2F3YXkgZGl2IGlzIGZpbmUg4oCUXG4gICAgLy8gaXQncyByZXF1aXJlZCBieSB0aGUgY29yZSdzIHNpZ25hdHVyZSBmb3Igc3ltbWV0cnkgd2l0aCBmdWxsIG1vZGUuXG4gICAgY29uc3QgaG9zdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG5cbiAgICB0aGlzLmNvcmUgPSBuZXcgQ29yZUFJQXV0b2NvbXBsZXRlKGhvc3QsIHtcbiAgICAgIC4uLm9wdHMsXG4gICAgICByZW5kZXJNb2RlOiBcImhlYWRsZXNzXCIsXG4gICAgICBzb3VyY2U6IG9wdHMuc291cmNlID8/IFwiaGVhZGxlc3Mtc2RrXCIsXG4gICAgICAvLyBIZWFkbGVzcyBtb2RlIG5ldmVyIHJlbmRlcnMgdGhlIGRyb3Bkb3duIERPTSwgYnV0IHRoZSBrZXlib2FyZFxuICAgICAgLy8gY29udHJvbGxlciBzdGlsbCByZWFkcyBgb3B0aW9uc1Bvc2l0aW9uYCB0byBkZWNpZGUgd2hpY2ggdmVydGljYWxcbiAgICAgIC8vIGFycm93IG9wZW5zIHRoZSBkcm9wZG93biBmcm9tIHRoZSBpbnB1dC5cbiAgICAgIG9wdGlvbnNQb3NpdGlvbjogb3B0cy5vcHRpb25zUG9zaXRpb24gPz8gXCJiZWxvd1wiLFxuICAgIH0pO1xuXG4gICAgdGhpcy5yYXdTdGF0ZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PENvcmVTdGF0ZT4odGhpcy5jb3JlLmdldFN0YXRlKCkpO1xuICAgIC8vIFB1c2ggdGhlIHN0b3JlJ3MgKmN1cnJlbnQqIHN0YXRlLCBub3QgdGhlIHNuYXBzaG90IHRoZSBsaXN0ZW5lciB3YXNcbiAgICAvLyBoYW5kZWQuIFRoZSBjb3JlIG5vdGlmaWVzIGxpc3RlbmVycyBzeW5jaHJvbm91c2x5LCBhbmQgc29tZSBhY3Rpb25zXG4gICAgLy8gdHJpZ2dlciByZWVudHJhbnQgYHN0b3JlLnNldGAgY2FsbHMgKGUuZy4gdHlwaW5nIGEgbm9uLW1hdGNoaW5nIGNoYXJcbiAgICAvLyBkdXJpbmcgcmUtZWRpdCBtYWtlcyB0aGUgY29yZSBzeW5jaHJvbm91c2x5IGV4aXQgcmUtZWRpdCBhbmQga2ljayBvZmYgYVxuICAgIC8vIGZldGNoKS5cbiAgICAvL1xuICAgIC8vIFRoZSBjb3JlJ3Mgc3RvcmUgdXNlZCB0byBkZWxpdmVyIHN1Y2ggYSBuZXN0ZWQgc2V0IGlubGluZSBhbmQgdGhlblxuICAgIC8vIHJlc3VtZSB0aGUgb3V0ZXIgbGlzdGVuZXIgbG9vcCwgc28gYSBsaXN0ZW5lciBjb3VsZCBiZSBoYW5kZWQgYW4gb2xkZXJcbiAgICAvLyBzdGF0ZSAoc3RpbGwgaW4gcmUtZWRpdCkgKmFmdGVyKiBhIG5ld2VyIG9uZSAocmUtZWRpdCBleGl0ZWQpIOKAlCB3aGljaFxuICAgIC8vIHJlc3VycmVjdGVkIGEgc3RhbGUgYGVkaXRpbmdQYXJhbWAgYW5kIHJldHJpZ2dlcmVkIHRoZSBlZGl0b3IncyByZS1lZGl0XG4gICAgLy8gY2FyZXQtcGFyaywgeWFua2luZyB0aGUgY2FyZXQgYmFjayB0byB3aGVyZSByZS1lZGl0aW5nIHN0YXJ0ZWQuIFRoZVxuICAgIC8vIHN0b3JlIG5vdyBxdWV1ZXMgbm90aWZpY2F0aW9ucyBhbmQgZHJhaW5zIHRoZW0gaW4gb3JkZXIsIHNvIHRoYXRcbiAgICAvLyBvdXQtb2Ytb3JkZXIgZGVsaXZlcnkgY2FuIG5vIGxvbmdlciBoYXBwZW4gYXQgdGhlIHNvdXJjZS5cbiAgICAvL1xuICAgIC8vIFJlYWRpbmcgYGdldFN0YXRlKClgIGF0IGVtaXNzaW9uIHRpbWUgaXMga2VwdCBhcyBiZWx0LWFuZC1icmFjZXM6IGl0XG4gICAgLy8gY29zdHMgbm90aGluZyAoZGlzdGluY3RVbnRpbENoYW5nZWQgZG93bnN0cmVhbSBkcm9wcyB0aGUgZHVwbGljYXRlXG4gICAgLy8gZW1pc3Npb25zKSBhbmQga2VlcHMgdGhpcyBicmlkZ2UgY29ycmVjdCBmb3IgYW55IGZ1dHVyZSBjb25zdW1lciB0aGF0XG4gICAgLy8gZW1pdHMgbWlkLWNhc2NhZGUuIFJlYWN0IG5lZWRzIG5laXRoZXIsIHNpbmNlIGl0IGJhdGNoZXMgcmVuZGVycyBhbmRcbiAgICAvLyBnYXRlcyBpdHMgY2FyZXQgZWZmZWN0cyBvbiBkZXBlbmRlbmNpZXMuXG4gICAgdGhpcy51bnN1YnNjcmliZUNvcmUgPSB0aGlzLmNvcmUuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIGlmICghdGhpcy5pc0Rlc3Ryb3llZCkgdGhpcy5yYXdTdGF0ZSQubmV4dCh0aGlzLmNvcmUuZ2V0U3RhdGUoKSk7XG4gICAgfSk7XG5cbiAgICAvLyA9PT0gUGVyLWZpZWxkIG9ic2VydmFibGVzID09PVxuICAgIC8vIEFycmF5LXZhbHVlZCBmaWVsZHMgdXNlIHNoYWxsb3cgZXF1YWxpdHkuIFRoZSB2YW5pbGxhIHN0b3JlIHNwcmVhZHMgb25cbiAgICAvLyBldmVyeSB3cml0ZSAoYHN0b3JlLnNldCh7IGNvbXBsZXRlZFBhcmFtczogWy4uLl0gfSlgKSwgc28gcmVmZXJlbmNlXG4gICAgLy8gZXF1YWxpdHkgd291bGQgcmUtZmlyZSBkb3duc3RyZWFtIHN1YnNjcmliZXJzIG9uIGV2ZXJ5IHN0YXRlIHRpY2sgZXZlblxuICAgIC8vIHdoZW4gdGhlIGFycmF5J3MgY29udGVudHMgYXJlIHVuY2hhbmdlZC4gVGhlIG90aGVyIGZpZWxkcyBhcmVcbiAgICAvLyBwcmltaXRpdmVzIG9yIHN0YWJsZSBvYmplY3QgcmVmZXJlbmNlcywgc28gZGVmYXVsdCBpZGVudGl0eSBlcXVhbGl0eVxuICAgIC8vIHdvcmtzIGZpbmUuXG4gICAgdGhpcy50ZXh0JCA9IGRlcml2ZUZpZWxkKHRoaXMucmF3U3RhdGUkLCAocykgPT4gcy50ZXh0KTtcbiAgICB0aGlzLmNvbXBsZXRlZFBhcmFtcyQgPSBkZXJpdmVGaWVsZCh0aGlzLnJhd1N0YXRlJCwgKHMpID0+IHMuY29tcGxldGVkUGFyYW1zLCBhcnJFcSk7XG4gICAgdGhpcy5za2lwcGVkUGFyYW1zJCA9IGRlcml2ZUZpZWxkKHRoaXMucmF3U3RhdGUkLCAocykgPT4gcy5za2lwcGVkUGFyYW1zLCBhcnJFcSk7XG4gICAgdGhpcy5pZGVudGlmaWVkUGFyYW1zJCA9IGRlcml2ZUZpZWxkKHRoaXMucmF3U3RhdGUkLCAocykgPT4gcy5pZGVudGlmaWVkUGFyYW1zLCBhcnJFcSk7XG4gICAgdGhpcy5zdWdnZXN0aW9uUGlsbHMkID0gZGVyaXZlRmllbGQodGhpcy5yYXdTdGF0ZSQsIChzKSA9PiBzLmFjdGlvbmFibGVTdWdnZXN0aW9ucywgYXJyRXEpO1xuICAgIHRoaXMuc2VnbWVudHMkID0gZGVyaXZlRmllbGQodGhpcy5yYXdTdGF0ZSQsIChzKSA9PiBzLnNlZ21lbnRzLCBhcnJFcSk7XG4gICAgdGhpcy5uZXdQYXJhbUlkJCA9IGRlcml2ZUZpZWxkKHRoaXMucmF3U3RhdGUkLCAocykgPT4gcy5uZXdQYXJhbUlkKTtcbiAgICB0aGlzLnN1Z2dlc3Rpb25zJCA9IGRlcml2ZUZpZWxkKHRoaXMucmF3U3RhdGUkLCAocykgPT4gcy5zdWdnZXN0aW9ucywgYXJyRXEpO1xuICAgIHRoaXMucHJvZHVjdHMkID0gZGVyaXZlRmllbGQodGhpcy5yYXdTdGF0ZSQsIChzKSA9PiBzLnByb2R1Y3RzLCBhcnJFcSk7XG4gICAgdGhpcy5jdXN0b21GaWVsZHMkID0gZGVyaXZlRmllbGQodGhpcy5yYXdTdGF0ZSQsIChzKSA9PiBzLmN1c3RvbUZpZWxkcyk7XG4gICAgdGhpcy5hY3RpdmVJbmRleCQgPSBkZXJpdmVGaWVsZCh0aGlzLnJhd1N0YXRlJCwgKHMpID0+IHMuYWN0aXZlRHJvcGRvd25JbmRleCk7XG4gICAgdGhpcy5pc0xvYWRpbmckID0gZGVyaXZlRmllbGQodGhpcy5yYXdTdGF0ZSQsIGNvbXB1dGVVaUxvYWRpbmcpO1xuICAgIHRoaXMuaXNSZWFkeSQgPSBkZXJpdmVGaWVsZCh0aGlzLnJhd1N0YXRlJCwgKHMpID0+IHMuaXNSZWFkeSk7XG4gICAgdGhpcy5pc0ZvY3VzZWQkID0gZGVyaXZlRmllbGQodGhpcy5yYXdTdGF0ZSQsIChzKSA9PiBzLmlzRm9jdXNlZCk7XG4gICAgdGhpcy5pc0Ryb3Bkb3duT3BlbiQgPSBkZXJpdmVGaWVsZCh0aGlzLnJhd1N0YXRlJCwgKHMpID0+IHMuaXNEcm9wZG93bk9wZW4pO1xuICAgIHRoaXMuaXNBY3RpdmVQaWxsU2VsZWN0ZWQkID0gZGVyaXZlRmllbGQodGhpcy5yYXdTdGF0ZSQsIChzKSA9PiBzLmlzQWN0aXZlUGlsbFNlbGVjdGVkKTtcbiAgICB0aGlzLnBsYWNlaG9sZGVyVGV4dCQgPSBkZXJpdmVGaWVsZCh0aGlzLnJhd1N0YXRlJCwgKHMpID0+IHMucGxhY2Vob2xkZXJUZXh0KTtcbiAgICB0aGlzLmVycm9yJCA9IGRlcml2ZUZpZWxkKHRoaXMucmF3U3RhdGUkLCAocykgPT4gcy5lcnJvcik7XG4gICAgdGhpcy5lZGl0aW5nUGFyYW0kID0gZGVyaXZlRmllbGQodGhpcy5yYXdTdGF0ZSQsIChzKSA9PiBzLmVkaXRpbmdQYXJhbSk7XG4gICAgdGhpcy5lZGl0aW5nQW5jaG9yJCA9IGRlcml2ZUZpZWxkKHRoaXMucmF3U3RhdGUkLCAocykgPT4gcy5lZGl0aW5nQW5jaG9yKTtcbiAgICB0aGlzLmNhcmV0T2Zmc2V0JCA9IGRlcml2ZUZpZWxkKHRoaXMucmF3U3RhdGUkLCAocykgPT4gcy5jYXJldE9mZnNldCk7XG5cbiAgICAvLyA9PT0gQ29tcG9zaXRlIG9ic2VydmFibGVzID09PVxuICAgIC8vIFByb2plY3QgZGlyZWN0bHkgb2ZmIGByYXdTdGF0ZSRgIHdpdGggYSBzaW5nbGUgbWFwKCkgc28gZWFjaCBzdG9yZVxuICAgIC8vIHRpY2sgcHJvZHVjZXMgZXhhY3RseSBPTkUgY29oZXJlbnQgc3RhdGUkIGVtaXNzaW9uLiBVc2luZ1xuICAgIC8vIGBjb21iaW5lTGF0ZXN0YCBvdmVyIHRoZSBwZXItZmllbGQgb2JzZXJ2YWJsZXMgaGVyZSB3b3VsZCBmaXJlIG9uZVxuICAgIC8vIGVtaXNzaW9uIHBlciBpbm5lci1zb3VyY2UgdGljayAodXAgdG8gTiBwZXIgc3RvcmUgdXBkYXRlKSwgYW5kIHRoZVxuICAgIC8vIGVkaXRvci1ob3N0IGRpcmVjdGl2ZSdzIHBvc3QtcHJvbW90ZSByZWZvY3VzIHdvdWxkIHJ1biBhZ2FpbnN0IGFuXG4gICAgLy8gaW50ZXJtZWRpYXRlIHN0YXRlIHdoZXJlIGBuZXdQYXJhbUlkYCB3YXMgc2V0IGJ1dCBgc2VnbWVudHNgIC9cbiAgICAvLyBgY2FyZXRPZmZzZXRgIHN0aWxsIGhlbGQgdGhlaXIgb2xkIHZhbHVlcyDigJQgbGVhdmluZyB0aGUgY2FyZXQgc3R1Y2tcbiAgICAvLyBhdCB0aGUgcHJlLWNsaWNrIHBvc2l0aW9uLlxuICAgIHRoaXMuc3RhdGUkID0gdGhpcy5yYXdTdGF0ZSQucGlwZShcbiAgICAgIG1hcChjb21wdXRlU3RhdGUpLFxuICAgICAgc2hhcmVSZXBsYXkoeyBidWZmZXJTaXplOiAxLCByZWZDb3VudDogdHJ1ZSB9KSxcbiAgICApO1xuXG4gICAgdGhpcy5vcHRpb25zUG9zaXRpb24kLm5leHQob3B0cy5vcHRpb25zUG9zaXRpb24gPz8gXCJiZWxvd1wiKTtcbiAgICB0aGlzLmRyb3Bkb3duJCA9IGNvbWJpbmVMYXRlc3QoW3RoaXMucmF3U3RhdGUkLCB0aGlzLm9wdGlvbnNQb3NpdGlvbiRdKS5waXBlKFxuICAgICAgbWFwKChbcywgb3B0aW9uc1Bvc2l0aW9uXSkgPT4gY29tcHV0ZURyb3Bkb3duKHMsIG9wdGlvbnNQb3NpdGlvbikpLFxuICAgICAgc2hhcmVSZXBsYXkoeyBidWZmZXJTaXplOiAxLCByZWZDb3VudDogdHJ1ZSB9KSxcbiAgICApO1xuICB9XG5cbiAgLy8gPT09IFJlYWQtb25seSBhY2Nlc3NvcnMgPT09XG5cbiAgLyoqIFN0YWJsZSBBUklBIGxpc3Rib3ggSUQgZm9yIHRoZSBkcm9wZG93bi4gUGFzcyB0byBgPHRleHRhcmVhIGFyaWEtY29udHJvbHM9XCIuLi5cIj5gLiAqL1xuICBnZXQgbGlzdGJveElkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuY29yZS5saXN0Ym94SWQ7XG4gIH1cblxuICAvKiogV2hldGhlciBgZGVzdHJveSgpYCBoYXMgYmVlbiBjYWxsZWQuIEFmdGVyIGRlc3RydWN0aW9uIGFsbCBhY3Rpb24gbWV0aG9kcyBuby1vcC4gKi9cbiAgZ2V0IGRlc3Ryb3llZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5pc0Rlc3Ryb3llZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBTeW5jaHJvbm91cyBzbmFwc2hvdCBvZiB0aGUgY29udHJvbGxlcidzIGN1cnJlbnQgcHVibGljIHN0YXRlLiBNaXJyb3JzXG4gICAqIHRoZSBsYXRlc3QgZW1pc3Npb24gb2YgYHN0YXRlJGAuIFVzZWZ1bCBpbiBjYWxsYmFja3Mgd2hlcmUgeW91IGNhbid0XG4gICAqIGBzdWJzY3JpYmVgIChlLmcuIGluc2lkZSBhbiBldmVudCBoYW5kbGVyKS5cbiAgICovXG4gIGdldFN0YXRlKCk6IEFJQXV0b2NvbXBsZXRlQ29udHJvbGxlclN0YXRlIHtcbiAgICByZXR1cm4gY29tcHV0ZVN0YXRlKHRoaXMucmF3U3RhdGUkLnZhbHVlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgc3RydWN0dXJlZCBxdWVyeSBhcyB0aGUgU0RLIHVuZGVyc3RhbmRzIGl0IHJpZ2h0IG5vdyDigJQgdGhlIHNhbWVcbiAgICogb2JqZWN0IGBvblJlc3VsdGAgZGVsaXZlcnMgYWZ0ZXIgZWFjaCByZXNwb25zZSBhbmQgYG9uU3VibWl0YCBkZWxpdmVyc1xuICAgKiBvbiBzdWJtaXQuIFJlYWQgaXQgb24gZGVtYW5kIGZyb20gYSBwbGFjZSB0aGF0IGhhcyBubyBldmVudCBoYW5keSAoYVxuICAgKiBjdXN0b20gc3VibWl0IGJ1dHRvbiwgYSBcInNhdmUgZHJhZnRcIiBhY3Rpb24pLlxuICAgKi9cbiAgZ2V0UmVzdWx0KCk6IEF1dG9jb21wbGV0ZVJlc3VsdCB7XG4gICAgcmV0dXJuIHRoaXMuY29yZS5nZXRSZXN1bHQoKTtcbiAgfVxuXG4gIC8vID09PSBBY3Rpb24gbWV0aG9kcyAocGFzcy10aHJvdWdoIHRvIHRoZSBjb3JlKSA9PT1cbiAgLy9cbiAgLy8gRXZlcnkgYWN0aW9uIG1ldGhvZCBiZWdpbnMgd2l0aCBhbiBgaXNEZXN0cm95ZWRgIGd1YXJkIHNvIHRoYXQgY2FsbGVyc1xuICAvLyB3aG8gaG9sZCBhIHN0YWxlIHJlZmVyZW5jZSBhZnRlciBgZGVzdHJveSgpYCBkb24ndCBhY2NpZGVudGFsbHkgdHJpZ2dlclxuICAvLyB3b3JrIG9uIGEgdG9ybi1kb3duIGNvcmUuIFRoZSB2YW5pbGxhIGNvcmUgZG9lcyBub3QgZ2F0ZSBpdHMgb3duIG1ldGhvZHNcbiAgLy8gcG9zdC1kaXNwb3NlIOKAlCBgcmVzZXQoKWAsIGBoYW5kbGVUZXh0Q2hhbmdlKClgLCBhbmQgZnJpZW5kcyB3b3VsZCBzdGlsbFxuICAvLyBzY2hlZHVsZSBmZXRjaGVzIG9yIGZpcmUgSFRUUCByZXF1ZXN0cyBhZ2FpbnN0IGFuIGFib3J0ZWQgY29udHJvbGxlcixcbiAgLy8gYW5kIHRoZSByZXNwb25zZXMgd291bGQgaGF2ZSBub3doZXJlIHRvIHN1cmZhY2UgKHJhd1N0YXRlJCBpcyBhbHJlYWR5XG4gIC8vIGNvbXBsZXRlKS4gVGhlIGd1YXJkIG1ha2VzIHRoZSBKU0RvYy1wcm9taXNlZCBcIm5vLW9wIHNpbGVudGx5XCJcbiAgLy8gc2VtYW50aWNzIGFjdHVhbGx5IHRydWUuXG5cbiAgLyoqIENsZWFyIGFsbCBzdGF0ZSwgcm90YXRlIGBzZXNzaW9uX2lkYCwgYW5kIHJlLWZldGNoLiBDYWxsIGFmdGVyIHN1Ym1pdC4gKi9cbiAgcmVzZXQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaXNEZXN0cm95ZWQpIHJldHVybjtcbiAgICB0aGlzLmNvcmUucmVzZXQoKTtcbiAgfVxuXG4gIC8qKiBQaWNrIGEgZHJvcGRvd24gb3B0aW9uIChvciByZXBsYWNlIHRoZSByZS1lZGl0ZWQgcGFyYW0gaWYgaW4gcmUtZWRpdCBtb2RlKS4gKi9cbiAgc2VsZWN0T3B0aW9uKG9wdGlvbjogU3VnZ2VzdGlvbk9wdGlvbik6IHZvaWQge1xuICAgIGlmICh0aGlzLmlzRGVzdHJveWVkKSByZXR1cm47XG4gICAgdGhpcy5jb3JlLnNlbGVjdE9wdGlvbihvcHRpb24pO1xuICB9XG5cbiAgLyoqXG4gICAqIEFubm91bmNlIGEgcHJvZHVjdCBzZWxlY3Rpb24g4oCUIGZpcmVzIHRoZSBgb25Qcm9kdWN0U2VsZWN0YCBjYWxsYmFjayB0aGVcbiAgICogY29udHJvbGxlciB3YXMgY29uc3RydWN0ZWQgd2l0aC4gYDxhaS1hdXRvY29tcGxldGUtZHJvcGRvd24+YCBjYWxscyB0aGlzXG4gICAqIGZvciB5b3U7IGNvbnN1bWVycyByZW5kZXJpbmcgdGhlaXIgb3duIHN0cmlwIGNhbGwgaXQgdGhlbXNlbHZlcy5cbiAgICpcbiAgICogRW1pdHRpbmcgaXMgdGhlIHdob2xlIGJlaGF2aW91cjogdGhlIFNESyBkZWxpYmVyYXRlbHkgZG9lcyBub3QgbmF2aWdhdGUgdG9cbiAgICogYHByb2R1Y3QudXJsYCwgYmVjYXVzZSBvbmx5IHRoZSBpbnRlZ3JhdGlvbiBrbm93cyB3aGV0aGVyIGEgc2VsZWN0aW9uXG4gICAqIG1lYW5zIFwib3BlbiB0aGUgUERQXCIsIFwiYWRkIHRvIGNhcnRcIiwgb3IgXCJmaWxsIHRoZSBpbnB1dFwiLlxuICAgKi9cbiAgc2VsZWN0UHJvZHVjdChwcm9kdWN0OiBQcm9kdWN0KTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaXNEZXN0cm95ZWQpIHJldHVybjtcbiAgICB0aGlzLmNvcmUuc2VsZWN0UHJvZHVjdChwcm9kdWN0KTtcbiAgfVxuXG4gIC8qKiBQcm9tb3RlIHRoZSBwaWxsIGF0IGBpbmRleGAgdG8gYWN0aXZlIChmcm9udCBvZiB0aGUgbGlzdCkuICovXG4gIHNldEFjdGl2ZVBpbGwoaW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgIGlmICh0aGlzLmlzRGVzdHJveWVkKSByZXR1cm47XG4gICAgdGhpcy5jb3JlLnNldEFjdGl2ZVBpbGwoaW5kZXgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNraXAgdGhlIGFjdGl2ZSBwaWxsIOKAlCBzYW1lIGFjdGlvbiBhcyBwcmVzc2luZyDihpIgYXQgdGhlIGVuZCBvZiB0aGUgaW5wdXQuXG4gICAqIFRoZSBkcm9wZG93bidzIHNraXAgYnV0dG9uIGNhbGxzIHRoaXM7IGNvbnN1bWVycyByZW5kZXJpbmcgdGhlaXIgb3duIHNraXBcbiAgICogYWZmb3JkYW5jZSBjYWxsIGl0IGRpcmVjdGx5LiBUaGUgc2tpcHBlZCBzdWdnZXN0aW9uIGpvaW5zIGBza2lwcGVkUGFyYW1zJGAuXG4gICAqL1xuICBza2lwQWN0aXZlUGlsbCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pc0Rlc3Ryb3llZCkgcmV0dXJuO1xuICAgIHRoaXMuY29yZS5za2lwQWN0aXZlUGlsbCgpO1xuICB9XG5cbiAgLyoqIERyb3AgdGhlIGxhc3QgY29tcGxldGVkIHBhcmFtJ3MgXCJjb21wbGV0ZWRcIiBzdGF0dXMuIFRleHQgc3RheXMgYXMgcGxhaW4gdGV4dC4gKi9cbiAgcmVtb3ZlTGFzdFBhcmFtKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmlzRGVzdHJveWVkKSByZXR1cm47XG4gICAgdGhpcy5jb3JlLnJlbW92ZUxhc3RQYXJhbSgpO1xuICB9XG5cbiAgLyoqIENsZWFyIHRoZSBzaGltbWVyIGFuaW1hdGlvbiBzdGF0ZSBmb3IgdGhlIG1vc3QtcmVjZW50bHktYWRkZWQgcGFyYW0uICovXG4gIGNsZWFyTmV3UGFyYW1JZCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pc0Rlc3Ryb3llZCkgcmV0dXJuO1xuICAgIHRoaXMuY29yZS5jbGVhck5ld1BhcmFtSWQoKTtcbiAgfVxuXG4gIC8qKiBDb250cm9sbGVkLW1vZGUgc2V0dGVyIGZvciBlZGl0b3IgdGV4dC4gKi9cbiAgc2V0VmFsdWUodGV4dDogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaXNEZXN0cm95ZWQpIHJldHVybjtcbiAgICB0aGlzLmNvcmUuc2V0VmFsdWUodGV4dCk7XG4gIH1cblxuICAvKiogQ29udHJvbGxlZC1tb2RlIHNldHRlciBmb3IgY29tcGxldGVkIHBhcmFtcy4gKi9cbiAgc2V0Q29tcGxldGVkUGFyYW1zKHBhcmFtczogQ29tcGxldGVkUGFyYW1TdGF0ZVtdKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaXNEZXN0cm95ZWQpIHJldHVybjtcbiAgICB0aGlzLmNvcmUuc2V0Q29tcGxldGVkUGFyYW1zKHBhcmFtcyk7XG4gIH1cblxuICAvKiogRm9yd2FyZCBwbGFpbi10ZXh0IGlucHV0IGZyb20gdGhlIGNvbnN1bWVyJ3MgYDx0ZXh0YXJlYT5gIHRvIHRoZSBjb3JlLiAqL1xuICBoYW5kbGVUZXh0Q2hhbmdlKHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pc0Rlc3Ryb3llZCkgcmV0dXJuO1xuICAgIHRoaXMuY29yZS5oYW5kbGVUZXh0Q2hhbmdlKHZhbHVlKTtcbiAgfVxuXG4gIC8qKiBGb3J3YXJkIGtleWJvYXJkIGV2ZW50cyBmcm9tIHRoZSBjb25zdW1lcidzIGA8dGV4dGFyZWE+YCB0byB0aGUgY29yZS4gKi9cbiAgaGFuZGxlS2V5RG93bihldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmlzRGVzdHJveWVkKSByZXR1cm47XG4gICAgdGhpcy5jb3JlLmhhbmRsZUtleURvd24oZXZlbnQpO1xuICB9XG5cbiAgLyoqIE5vdGlmeSB0aGUgY29yZSBvZiBmb2N1cyBzdGF0ZS4gKi9cbiAgc2V0Rm9jdXNlZChmb2N1c2VkOiBib29sZWFuKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaXNEZXN0cm95ZWQpIHJldHVybjtcbiAgICB0aGlzLmNvcmUuc2V0Rm9jdXNlZChmb2N1c2VkKTtcbiAgfVxuXG4gIC8qKiBFbnRlciByZS1lZGl0IG1vZGUgZm9yIHRoZSBib2xkIHBhcmFtIHdpdGggdGhlIGdpdmVuIGlkLiAqL1xuICBzdGFydEVkaXRpbmdQYXJhbShwYXJhbUlkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pc0Rlc3Ryb3llZCkgcmV0dXJuO1xuICAgIHRoaXMuY29yZS5zdGFydEVkaXRpbmdQYXJhbShwYXJhbUlkKTtcbiAgfVxuXG4gIC8qKiBFeGl0IHJlLWVkaXQgbW9kZSB3aXRob3V0IGNoYW5naW5nIHRoZSBib2xkIHBhcmFtLiAqL1xuICBleGl0RWRpdE1vZGUoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaXNEZXN0cm95ZWQpIHJldHVybjtcbiAgICB0aGlzLmNvcmUuZXhpdEVkaXRNb2RlKCk7XG4gIH1cblxuICAvKiogRm9yd2FyZCBwb3N0LWlucHV0IGNhcmV0IHBvc2l0aW9uIChleHRlbmRzIHRoZSBlZGl0IHRhaWwpLiAqL1xuICBoYW5kbGVDYXJldEFmdGVySW5wdXQob2Zmc2V0OiBudW1iZXIgfCBudWxsKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaXNEZXN0cm95ZWQpIHJldHVybjtcbiAgICB0aGlzLmNvcmUuaGFuZGxlQ2FyZXRBZnRlcklucHV0KG9mZnNldCk7XG4gIH1cblxuICAvKiogRm9yd2FyZCBzZWxlY3Rpb24tb25seSBjYXJldCBtb3ZlcyAobWF5IGV4aXQgcmUtZWRpdCkuICovXG4gIGhhbmRsZUNhcmV0TW92ZShvZmZzZXQ6IG51bWJlciB8IG51bGwpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pc0Rlc3Ryb3llZCkgcmV0dXJuO1xuICAgIHRoaXMuY29yZS5oYW5kbGVDYXJldE1vdmUob2Zmc2V0KTtcbiAgfVxuXG4gIC8qKiBSZXBsYWNlIHRoZSBib2xkIHBhcmFtIGJlaW5nIHJlLWVkaXRlZC4gUmV0dXJucyB0cnVlIHdoZW4gYXBwbGllZC4gKi9cbiAgcmVwbGFjZUVkaXRpbmdSYW5nZShyZXBsYWNlbWVudDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgaWYgKHRoaXMuaXNEZXN0cm95ZWQpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gdGhpcy5jb3JlLnJlcGxhY2VFZGl0aW5nUmFuZ2UocmVwbGFjZW1lbnQpO1xuICB9XG5cbiAgLyoqIFNldCB0aGUgaGlnaGxpZ2h0ZWQgb3B0aW9uIGluZGV4ICh0eXBpY2FsbHkgZHJpdmVuIGJ5IGhvdmVyKS4gKi9cbiAgc2V0QWN0aXZlRHJvcGRvd25JbmRleChpbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaXNEZXN0cm95ZWQpIHJldHVybjtcbiAgICB0aGlzLmNvcmUuc2V0QWN0aXZlRHJvcGRvd25JbmRleChpbmRleCk7XG4gIH1cblxuICAvKipcbiAgICogVGhlIHBvaW50ZXIgbGVmdCBvcHRpb24gYGluZGV4YDogY2xlYXIgdGhlIGhpZ2hsaWdodCBpZiBpdCBpcyBzdGlsbCBvbiBpdCxcbiAgICogc28gRW50ZXIgYWZ0ZXJ3YXJkcyBzdWJtaXRzIGluc3RlYWQgb2YgcGlja2luZyBhbiBvcHRpb24gdGhlIHBvaW50ZXIgaXMgbm9cbiAgICogbG9uZ2VyIG9uLiBBIGhpZ2hsaWdodCB0aGUga2V5Ym9hcmQgaGFzIHNpbmNlIG1vdmVkIGlzIGxlZnQgYWxvbmUuXG4gICAqL1xuICBjbGVhckhpZ2hsaWdodChpbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaXNEZXN0cm95ZWQpIHJldHVybjtcbiAgICB0aGlzLmNvcmUuY2xlYXJIaWdobGlnaHQoaW5kZXgpO1xuICB9XG5cbiAgLyoqIFBhZ2UgdGhlIGRhdGVwaWNrZXIgYmFjayBvbmUgbW9udGguIE5vLW9wIHVubGVzcyBhIGRhdGUgcGlsbCBpcyBhY3RpdmUuICovXG4gIHNob3dQcmV2aW91c01vbnRoKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmlzRGVzdHJveWVkKSByZXR1cm47XG4gICAgdGhpcy5jb3JlLnNob3dQcmV2aW91c01vbnRoKCk7XG4gIH1cblxuICAvKiogUGFnZSB0aGUgZGF0ZXBpY2tlciBmb3J3YXJkIG9uZSBtb250aC4gTm8tb3AgdW5sZXNzIGEgZGF0ZSBwaWxsIGlzIGFjdGl2ZS4gKi9cbiAgc2hvd05leHRNb250aCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pc0Rlc3Ryb3llZCkgcmV0dXJuO1xuICAgIHRoaXMuY29yZS5zaG93TmV4dE1vbnRoKCk7XG4gIH1cblxuICAvLyA9PT0gTGlmZWN5Y2xlID09PVxuXG4gIC8qKlxuICAgKiBBcHBseSBydW50aW1lIGNoYW5nZXMgdG8gYSBzdWJzZXQgb2Ygb3B0aW9ucy4gRXZlbnQgY2FsbGJhY2tzXG4gICAqIChgb25TdWJtaXRgLCBgb25SZXN1bHRgLCBgb25FcnJvcmAsIGV0Yy4pIGNhbm5vdCBiZSBzd2FwcGVkIHRoaXMgd2F5IOKAlCB0aGV5IGFyZVxuICAgKiByZWdpc3RlcmVkIG9uY2UgYXQgY29uc3RydWN0aW9uIChtYXRjaGVzIHRoZSBSZWFjdCBob29rJ3MgZGVzaWduKS4gRm9yXG4gICAqIGR5bmFtaWMgZXZlbnQgcmVhY3Rpdml0eSwgc3Vic2NyaWJlIHRvIHRoZSBjb3JyZXNwb25kaW5nIG9ic2VydmFibGVcbiAgICogKGUuZy4gYHRleHQkYCBpbnN0ZWFkIG9mIGBvbkNoYW5nZWApLlxuICAgKi9cbiAgdXBkYXRlKG9wdHM6IEFJQXV0b2NvbXBsZXRlQ29udHJvbGxlclVwZGF0ZSk6IHZvaWQge1xuICAgIGlmICh0aGlzLmlzRGVzdHJveWVkKSByZXR1cm47XG4gICAgdGhpcy5jb3JlLnVwZGF0ZShvcHRzKTtcbiAgICBpZiAob3B0cy5vcHRpb25zUG9zaXRpb24gIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5vcHRpb25zUG9zaXRpb24kLm5leHQob3B0cy5vcHRpb25zUG9zaXRpb24pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZWxlYXNlIGFsbCByZXNvdXJjZXMg4oCUIHVuc3Vic2NyaWJlcyBmcm9tIHRoZSBjb3JlLCBkZXN0cm95cyB0aGUgY29yZSxcbiAgICogYW5kIGNvbXBsZXRlcyB0aGUgaW50ZXJuYWwgc3RhdGUgc3ViamVjdC4gU2FmZSB0byBjYWxsIG11bHRpcGxlIHRpbWVzLlxuICAgKiBBZnRlciBkZXN0cnVjdGlvbiwgYWN0aW9uIG1ldGhvZHMgbm8tb3Agc2lsZW50bHkuXG4gICAqL1xuICBkZXN0cm95KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmlzRGVzdHJveWVkKSByZXR1cm47XG4gICAgdGhpcy5pc0Rlc3Ryb3llZCA9IHRydWU7XG4gICAgdGhpcy51bnN1YnNjcmliZUNvcmUoKTtcbiAgICB0aGlzLmNvcmUuZGVzdHJveSgpO1xuICAgIHRoaXMucmF3U3RhdGUkLmNvbXBsZXRlKCk7XG4gIH1cbn1cblxuLy8gPT09PT0gUHVyZSBoZWxwZXJzIOKAlCBub3QgcGFydCBvZiB0aGUgcHVibGljIHN1cmZhY2UgPT09PT1cblxuLyoqXG4gKiBTaGFsbG93IGFycmF5IGVxdWFsaXR5LiBUaGUgdmFuaWxsYSBzdG9yZSByZWFzc2lnbnMgYXJyYXkgZmllbGRzIG9uIGV2ZXJ5XG4gKiB3cml0ZSAoYHN0b3JlLnNldCh7IGNvbXBsZXRlZFBhcmFtczogWy4uLnByZXYsIHhdIH0pYCksIHNvIHJlZmVyZW5jZVxuICogZXF1YWxpdHkgYWxvbmUgd291bGQgcmUtZW1pdCBkb3duc3RyZWFtIGV2ZW4gd2hlbiB0aGUgY29udGVudHMgYXJlXG4gKiBpZGVudGljYWwuIFVzZWQgZm9yIGBjb21wbGV0ZWRQYXJhbXMkYCwgYHN1Z2dlc3Rpb25zJGAsIGBzdWdnZXN0aW9uUGlsbHMkYCxcbiAqIGFuZCBgc2VnbWVudHMkYC5cbiAqL1xuZnVuY3Rpb24gYXJyRXE8VD4oYTogcmVhZG9ubHkgVFtdLCBiOiByZWFkb25seSBUW10pOiBib29sZWFuIHtcbiAgaWYgKGEgPT09IGIpIHJldHVybiB0cnVlO1xuICBpZiAoYS5sZW5ndGggIT09IGIubGVuZ3RoKSByZXR1cm4gZmFsc2U7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYS5sZW5ndGg7IGkrKykge1xuICAgIGlmIChhW2ldICE9PSBiW2ldKSByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIHRydWU7XG59XG5cbi8qKiBVSS12aXNpYmxlIGxvYWRpbmcg4oCUIHRoZSBjb3JlJ3MgYGRyb3Bkb3duTG9hZGluZ2AgKHNlZSBpdHMgZG9jcykuICovXG5mdW5jdGlvbiBjb21wdXRlVWlMb2FkaW5nKHM6IENvcmVTdGF0ZSk6IGJvb2xlYW4ge1xuICByZXR1cm4gcy5kcm9wZG93bkxvYWRpbmc7XG59XG5cbmZ1bmN0aW9uIGNvbXB1dGVTdGF0ZShzOiBDb3JlU3RhdGUpOiBBSUF1dG9jb21wbGV0ZUNvbnRyb2xsZXJTdGF0ZSB7XG4gIHJldHVybiB7XG4gICAgdGV4dDogcy50ZXh0LFxuICAgIGNvbXBsZXRlZFBhcmFtczogcy5jb21wbGV0ZWRQYXJhbXMsXG4gICAgc2tpcHBlZFBhcmFtczogcy5za2lwcGVkUGFyYW1zLFxuICAgIGlkZW50aWZpZWRQYXJhbXM6IHMuaWRlbnRpZmllZFBhcmFtcyxcbiAgICBzdWdnZXN0aW9uUGlsbHM6IHMuYWN0aW9uYWJsZVN1Z2dlc3Rpb25zLFxuICAgIHNlZ21lbnRzOiBzLnNlZ21lbnRzLFxuICAgIG5ld1BhcmFtSWQ6IHMubmV3UGFyYW1JZCxcbiAgICBzdWdnZXN0aW9uczogcy5zdWdnZXN0aW9ucyxcbiAgICBwcm9kdWN0czogcy5wcm9kdWN0cyxcbiAgICBjdXN0b21GaWVsZHM6IHMuY3VzdG9tRmllbGRzLFxuICAgIGFjdGl2ZUluZGV4OiBzLmFjdGl2ZURyb3Bkb3duSW5kZXgsXG4gICAgaXNMb2FkaW5nOiBjb21wdXRlVWlMb2FkaW5nKHMpLFxuICAgIGlzUmVhZHk6IHMuaXNSZWFkeSxcbiAgICBpc0ZvY3VzZWQ6IHMuaXNGb2N1c2VkLFxuICAgIGlzRHJvcGRvd25PcGVuOiBzLmlzRHJvcGRvd25PcGVuLFxuICAgIHBsYWNlaG9sZGVyVGV4dDogcy5wbGFjZWhvbGRlclRleHQsXG4gICAgZXJyb3I6IHMuZXJyb3IsXG4gICAgZWRpdGluZ1BhcmFtOiBzLmVkaXRpbmdQYXJhbSxcbiAgICBlZGl0aW5nSWRlbnRpZmllZDogcy5lZGl0aW5nSWRlbnRpZmllZCxcbiAgICBlZGl0aW5nQW5jaG9yOiBzLmVkaXRpbmdBbmNob3IsXG4gICAgY2FyZXRPZmZzZXQ6IHMuY2FyZXRPZmZzZXQsXG4gIH07XG59XG5cbmZ1bmN0aW9uIGNvbXB1dGVEcm9wZG93bihcbiAgczogQ29yZVN0YXRlLFxuICBvcHRpb25zUG9zaXRpb246IFwiYWJvdmVcIiB8IFwiYmVsb3dcIixcbik6IEFJQXV0b2NvbXBsZXRlRHJvcGRvd25TdGF0ZSB7XG4gIGNvbnN0IGVkaXRpbmdQYXJhbSA9IHMuZWRpdGluZ1BhcmFtO1xuICBjb25zdCBlZGl0aW5nSWRlbnRpZmllZCA9IHMuZWRpdGluZ0lkZW50aWZpZWQ7XG4gIGNvbnN0IGRhdGVTZWxlY3Rpb24gPSBkYXRlU2VsZWN0aW9uRm9yKHMpO1xuICBjb25zdCBhY3RpdmVTdWdnZXN0aW9uID0gcy5hY3Rpb25hYmxlU3VnZ2VzdGlvbnNbMF07XG4gIGNvbnN0IGRyb3Bkb3duUGlsbDogU3VnZ2VzdGlvbiB8IG51bGwgPSBlZGl0aW5nUGFyYW1cbiAgICA/IHtcbiAgICAgICAgdHlwZTogZWRpdGluZ1BhcmFtLnN1Z2dlc3Rpb25UeXBlLFxuICAgICAgICB0ZXh0OiBlZGl0aW5nUGFyYW0uc3VnZ2VzdGlvblBsYWNlaG9sZGVyLFxuICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgb3B0aW9uczogZWRpdGluZ1BhcmFtLm9wdGlvbnMsXG4gICAgICB9XG4gICAgOiBlZGl0aW5nSWRlbnRpZmllZFxuICAgICAgPyAvLyBBbnN3ZXJpbmcgYSBzcGFuIHRoZSB1c2VyIHdyb3RlIHRoZW1zZWx2ZXM6IHRoZSBwaWxsIG5hbWVzIHRoZVxuICAgICAgICAvLyBwYXJhbWV0ZXIgdGhlIHNlcnZlciBtYXRjaGVkIGl0IHRvLCBzbyB0aGUgY2FsZW5kYXIgaXNuJ3QgdW5sYWJlbGxlZC5cbiAgICAgICAge1xuICAgICAgICAgIHR5cGU6IGVkaXRpbmdJZGVudGlmaWVkLnR5cGUsXG4gICAgICAgICAgdGV4dDogaWRlbnRpZmllZFBhcmFtTGFiZWwoZWRpdGluZ0lkZW50aWZpZWQudHlwZSksXG4gICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgICAgb3B0aW9uczogW10sXG4gICAgICAgIH1cbiAgICAgIDogbnVsbDtcbiAgY29uc3QgZHJvcGRvd25BY3RpdmVQaWxsID0gcy5kcm9wZG93blN1Z2dlc3Rpb24gPz8gZHJvcGRvd25QaWxsID8/IGFjdGl2ZVN1Z2dlc3Rpb247XG4gIGNvbnN0IGRyb3Bkb3duUGlsbHMgPSBkcm9wZG93blBpbGwgPyBbZHJvcGRvd25QaWxsXSA6IHMuYWN0aW9uYWJsZVN1Z2dlc3Rpb25zO1xuICByZXR1cm4ge1xuICAgIHN1Z2dlc3Rpb25zOiBkcm9wZG93bkFjdGl2ZVBpbGwgPyBbeyAuLi5kcm9wZG93bkFjdGl2ZVBpbGwsIG9wdGlvbnM6IHMuZHJvcGRvd25PcHRpb25zIH1dIDogW10sXG4gICAgYWN0aXZlSW5kZXg6IHMuYWN0aXZlRHJvcGRvd25JbmRleCxcbiAgICBpc09wZW46IHMuaXNEcm9wZG93bk9wZW4sXG4gICAgcGlsbHM6IGRyb3Bkb3duUGlsbHMsXG4gICAgaXNBY3RpdmVQaWxsU2VsZWN0ZWQ6IHMuaXNBY3RpdmVQaWxsU2VsZWN0ZWQsXG4gICAgaXNMb2FkaW5nOiBjb21wdXRlVWlMb2FkaW5nKHMpLFxuICAgIHNrZWxldG9uRXhpdGluZzogcy5za2VsZXRvbkV4aXRpbmcsXG4gICAgaXNJbnB1dEVtcHR5OiBzLnRleHQudHJpbSgpLmxlbmd0aCA9PT0gMCxcbiAgICBwcm9kdWN0czogcy5wcm9kdWN0cyxcbiAgICBpc0VkaXRpbmc6IEJvb2xlYW4oZWRpdGluZ1BhcmFtKSB8fCBCb29sZWFuKGVkaXRpbmdJZGVudGlmaWVkKSxcbiAgICBpblNlbGVjdGlvbkFuaW1hdGlvbjogcy5pblNlbGVjdGlvbkFuaW1hdGlvbixcbiAgICAvLyBEYXRlcGlja2VyLiBgcy5maWx0ZXJlZE9wdGlvbnNgIGFib3ZlIGFscmVhZHkgY2FycmllcyB0aGUgdmlzaWJsZVxuICAgIC8vIG1vbnRoJ3MgY2VsbHMgcmF0aGVyIHRoYW4gdGhlIHN1Z2dlc3Rpb24ncyBvd24gb3B0aW9ucyB3aGVuIHRoaXMgaXNcbiAgICAvLyBcImRhdGVcIiDigJQgdGhlIGNvcmUgc3dhcHBlZCB0aGVtIGluIGl0cyBkZXJpdmUgbGF5ZXIsIHNvIHRoZSBkcm9wZG93biBvbmx5XG4gICAgLy8gaGFzIHRvIGtub3cgd2hpY2ggYm9keSB0byBkcmF3LlxuICAgIGZvcm1hdFR5cGU6IHMuYWN0aXZlRm9ybWF0VHlwZSxcbiAgICBkYXRlVmlldzogcy5kYXRlVmlldyxcbiAgICBzZWxlY3RlZERhdGVJc286IGRhdGVTZWxlY3Rpb24uc2VsZWN0ZWRJc28sXG4gICAgc2VsZWN0ZWREYXRlUmFuZ2U6IGRhdGVTZWxlY3Rpb24uc2VsZWN0ZWRSYW5nZSxcbiAgICBkYXRlUmFuZ2VTdGFydDogZGF0ZVNlbGVjdGlvbi5yYW5nZVN0YXJ0LFxuICAgIG9wdGlvbnNQb3NpdGlvbixcbiAgfTtcbn1cbiJdfQ==
422
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWktYXV0b2NvbXBsZXRlLmNvbnRyb2xsZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL2NvbnRyb2xsZXIvYWktYXV0b2NvbXBsZXRlLmNvbnRyb2xsZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUdMLGNBQWMsSUFBSSxrQkFBa0IsRUFHcEMsZ0JBQWdCLEVBRWhCLG9CQUFvQixHQU1yQixNQUFNLHFDQUFxQyxDQUFDO0FBQzdDLE9BQU8sRUFBRSxlQUFlLEVBQUUsYUFBYSxFQUFFLEdBQUcsRUFBbUIsV0FBVyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBT3pGLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFNUM7Ozs7Ozs7Ozs7OztHQVlHO0FBQ0gsTUFBTSxPQUFPLHdCQUF3QjtJQW1HbkM7OztPQUdHO0lBQ0gsWUFBWSxPQUF3QyxFQUFFO1FBcEd0RCw0RUFBNEU7UUFDNUUsNEVBQTRFO1FBQzVFLG1FQUFtRTtRQUNsRCxxQkFBZ0IsR0FBRyxJQUFJLGVBQWUsQ0FBb0IsT0FBTyxDQUFDLENBQUM7UUFFNUUsZ0JBQVcsR0FBRyxLQUFLLENBQUM7UUFnRzFCLElBQUksT0FBTyxRQUFRLEtBQUssV0FBVyxFQUFFO1lBQ25DLE1BQU0sSUFBSSxLQUFLLENBQ2IsMkRBQTJEO2dCQUN6RCx3RUFBd0UsQ0FDM0UsQ0FBQztTQUNIO1FBRUQsd0VBQXdFO1FBQ3hFLHFFQUFxRTtRQUNyRSxNQUFNLElBQUksR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRTNDLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxrQkFBa0IsQ0FBQyxJQUFJLEVBQUU7WUFDdkMsR0FBRyxJQUFJO1lBQ1AsVUFBVSxFQUFFLFVBQVU7WUFDdEIsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNLElBQUksY0FBYztZQUNyQyxpRUFBaUU7WUFDakUsb0VBQW9FO1lBQ3BFLDJD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QUFXO1FBQzFDLGlCQUFpQixFQUFFLGFBQWEsQ0FBQyxhQUFhO1FBQzlDLGNBQWMsRUFBRSxhQUFhLENBQUMsVUFBVTtRQUN4QyxlQUFlO0tBQ2hCLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgdHlwZSBBdXRvY29tcGxldGVSZXN1bHQsXG4gIHR5cGUgQ29tcGxldGVkUGFyYW1TdGF0ZSxcbiAgQUlBdXRvY29tcGxldGUgYXMgQ29yZUFJQXV0b2NvbXBsZXRlLFxuICB0eXBlIENvcmVTdGF0ZSxcbiAgdHlwZSBDdXN0b21GaWVsZHNSZXBvcnQsXG4gIGRhdGVTZWxlY3Rpb25Gb3IsXG4gIHR5cGUgSWRlbnRpZmllZFBhcmFtU3RhdGUsXG4gIGlkZW50aWZpZWRQYXJhbUxhYmVsLFxuICB0eXBlIFByb2R1Y3QsXG4gIHR5cGUgU2VnbWVudCxcbiAgdHlwZSBTa2lwcGVkUGFyYW1TdGF0ZSxcbiAgdHlwZSBTdWdnZXN0aW9uLFxuICB0eXBlIFN1Z2dlc3Rpb25PcHRpb24sXG59IGZyb20gXCJAbWFnaWN4LWVuZy9haS1hdXRvY29tcGxldGUtdmFuaWxsYVwiO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBjb21iaW5lTGF0ZXN0LCBtYXAsIHR5cGUgT2JzZXJ2YWJsZSwgc2hhcmVSZXBsYXkgfSBmcm9tIFwicnhqc1wiO1xuaW1wb3J0IHR5cGUge1xuICBBSUF1dG9jb21wbGV0ZUNvbnRyb2xsZXJPcHRpb25zLFxuICBBSUF1dG9jb21wbGV0ZUNvbnRyb2xsZXJTdGF0ZSxcbiAgQUlBdXRvY29tcGxldGVDb250cm9sbGVyVXBkYXRlLFxuICBBSUF1dG9jb21wbGV0ZURyb3Bkb3duU3RhdGUsXG59IGZyb20gXCIuLi9zaGFyZWQvdHlwZXNcIjtcbmltcG9ydCB7IGRlcml2ZUZpZWxkIH0gZnJvbSBcIi4vb2JzZXJ2YWJsZXNcIjtcblxuLyoqXG4gKiBUaWVyIDIgbG9naWMgc3VyZmFjZSBmb3IgYEBtYWdpY3gtZW5nL2FpLWF1dG9jb21wbGV0ZS1hbmd1bGFyYCDigJQgdGhlIEFuZ3VsYXJcbiAqIGVxdWl2YWxlbnQgb2YgUmVhY3QncyBgdXNlQUlBdXRvY29tcGxldGUoKWAgaG9vay4gV3JhcHMgYSBoZWFkbGVzc1xuICogYEBtYWdpY3gtZW5nL2FpLWF1dG9jb21wbGV0ZS12YW5pbGxhYCBjb3JlIGFuZCBleHBvc2VzIGl0cyBzdGF0ZSBhcyBSeEpTXG4gKiBvYnNlcnZhYmxlcyBwbHVzIHRoaW4gYWN0aW9uIG1ldGhvZHMuXG4gKlxuICogVGhlIGNvbnRyb2xsZXIgaXMgY29uc3VtZXItbWFuYWdlZCDigJQgdGhlIGNvbnN1bWVyIGNyZWF0ZXMgaXRcbiAqIHdpdGggYG5ld2AsIGhvbGRzIHRoZSByZWZlcmVuY2UsIGFuZCAqKm11c3QgY2FsbCBgZGVzdHJveSgpYCoqIGluIHRoZWlyXG4gKiBvd24gYG5nT25EZXN0cm95YC4gVGhlIFRpZXIgMSBgPGFpLWF1dG9jb21wbGV0ZT5gIGNvbXBvbmVudCBkb2VzIHRoaXNcbiAqIGF1dG9tYXRpY2FsbHk7IFRpZXIgMiBjb25zdW1lcnMgZG8gbm90IGdldCBhdXRvLWNsZWFudXAuXG4gKlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY2xhc3MgQUlBdXRvY29tcGxldGVDb250cm9sbGVyIHtcbiAgcHJpdmF0ZSByZWFkb25seSBjb3JlOiBDb3JlQUlBdXRvY29tcGxldGU7XG4gIHByaXZhdGUgcmVhZG9ubHkgcmF3U3RhdGUkOiBCZWhhdmlvclN1YmplY3Q8Q29yZVN0YXRlPjtcbiAgLy8gb3B0aW9uc1Bvc2l0aW9uIGlzbid0IHBhcnQgb2YgQ29yZVN0YXRlIChpdCdzIGEgY29yZSBvcHRpb24pLCBzbyB0cmFjayBpdFxuICAvLyBoZXJlIGFuZCBmb2xkIGl0IGludG8gYGRyb3Bkb3duJGAgc28gdGhlIGRyb3Bkb3duIGNhbiByZWFkIHBsYWNlbWVudCBmcm9tXG4gIC8vIHRoZSBjb250cm9sbGVyIOKAlCBjb25maWd1cmVkIG9uY2UsIGtlcHQgaW4gc3luYyB0aHJvdWdoIHVwZGF0ZSgpLlxuICBwcml2YXRlIHJlYWRvbmx5IG9wdGlvbnNQb3NpdGlvbiQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFwiYWJvdmVcIiB8IFwiYmVsb3dcIj4oXCJiZWxvd1wiKTtcbiAgcHJpdmF0ZSByZWFkb25seSB1bnN1YnNjcmliZUNvcmU6ICgpID0+IHZvaWQ7XG4gIHByaXZhdGUgaXNEZXN0cm95ZWQgPSBmYWxzZTtcblxuICAvLyA9PT0gUGVyLWZpZWxkIG9ic2VydmFibGVzID09PVxuICAvLyBFYWNoIG9uZSBydW5zIHRocm91Z2ggZGVyaXZlRmllbGQsIHdoaWNoIGJha2VzIGluIGRpc3RpbmN0VW50aWxDaGFuZ2VkXG4gIC8vIGFuZCBzaGFyZVJlcGxheSh7IGJ1ZmZlclNpemU6IDEsIHJlZkNvdW50OiB0cnVlIH0pIHBlciDCpzE5LjQuXG5cbiAgLyoqIFBsYWluLXRleHQgY29udGVudCBvZiB0aGUgZWRpdG9yLiAqL1xuICByZWFkb25seSB0ZXh0JDogT2JzZXJ2YWJsZTxzdHJpbmc+O1xuICAvKiogQ29tcGxldGVkIChib2xkKSBwYXJhbXMgY3VycmVudGx5IGluIHRoZSBlZGl0b3IuICovXG4gIHJlYWRvbmx5IGNvbXBsZXRlZFBhcmFtcyQ6IE9ic2VydmFibGU8Q29tcGxldGVkUGFyYW1TdGF0ZVtdPjtcbiAgLyoqXG4gICAqIFN1Z2dlc3Rpb25zIHRoZSB1c2VyIGRpc21pc3NlZCB3aXRoIHRoZSBza2lwIGtleSAo4oaSKS4gTm90aGluZyByZW5kZXJzXG4gICAqIHRoZW07IHRoZXkgZXhpc3Qgc28gYSBoYW5kLXJvbGxlZCBzdWJtaXQgY2FuIHBhc3MgdGhlbSB0b1xuICAgKiBgYnVpbGRTdWJtaXRSZXN1bHRgIGFuZCBjYXJyeSB0aGUgc2FtZSBgdGV4dDogXCJza2lwcGVkXCJgIGVudHJpZXMgdGhlXG4gICAqIFNESydzIG93biByZXF1ZXN0cyBkby5cbiAgICovXG4gIHJlYWRvbmx5IHNraXBwZWRQYXJhbXMkOiBPYnNlcnZhYmxlPFNraXBwZWRQYXJhbVN0YXRlW10+O1xuICAvKipcbiAgICogUGFyYW1zIHRoZSBzZXJ2ZXIgaWRlbnRpZmllZCBpbiB0aGUgdXNlcidzIG93biB3b3Jkcy4gQWxyZWFkeSByZW5kZXJlZFxuICAgKiB0aHJvdWdoIGBzZWdtZW50cyRgOyBleHBvc2VkIHNvIGEgaGFuZC1yb2xsZWQgc3VibWl0IGNhbiBwYXNzIHRoZW0gdG9cbiAgICogYGJ1aWxkU3VibWl0UmVzdWx0YCBhbmQgcmVwb3J0IHRoZSBzYW1lIGBpZGVudGlmaWVkX3BhcmFtc2AgdGhlIFNESydzXG4gICAqIG93biByZXN1bHRzIGNhcnJ5LlxuICAgKi9cbiAgcmVhZG9ubHkgaWRlbnRpZmllZFBhcmFtcyQ6IE9ic2VydmFibGU8SWRlbnRpZmllZFBhcmFtU3RhdGVbXT47XG4gIC8qKiBBY3Rpb25hYmxlIHN1Z2dlc3Rpb24gcGlsbHMgKGZpcnN0IG9uZSBpcyB0aGUgYWN0aXZlIHBpbGwpLiAqL1xuICByZWFkb25seSBzdWdnZXN0aW9uUGlsbHMkOiBPYnNlcnZhYmxlPFN1Z2dlc3Rpb25bXT47XG4gIC8qKiBUZXh0ICsgY29tcGxldGVkLXBhcmFtIHNlZ21lbnRzIGZvciByZW5kZXJpbmcgdGhlIGVkaXRvciBib2R5LiAqL1xuICByZWFkb25seSBzZWdtZW50cyQ6IE9ic2VydmFibGU8U2VnbWVudFtdPjtcbiAgLyoqIElEIG9mIHRoZSBtb3N0LXJlY2VudGx5LXByb21vdGVkIHBhcmFtIChkcml2ZXMgc2hpbW1lciBhbmltYXRpb24pLiAqL1xuICByZWFkb25seSBuZXdQYXJhbUlkJDogT2JzZXJ2YWJsZTxzdHJpbmcgfCBudWxsPjtcbiAgLyoqIEFsbCBzdWdnZXN0aW9ucyBmcm9tIHRoZSBzZXJ2ZXIgKGluY2x1ZGluZyBub24tYWN0aW9uYWJsZSBvbmVzKS4gKi9cbiAgcmVhZG9ubHkgc3VnZ2VzdGlvbnMkOiBPYnNlcnZhYmxlPFN1Z2dlc3Rpb25bXT47XG4gIC8qKlxuICAgKiBXaGF0IHRoZSBwcm9kdWN0IHN0cmlwIHNob3dzOiB0aGUgaXRlbXMgdGhlIGxhdGVzdCBgL3N1Z2dlc3RgIHJlc3BvbnNlXG4gICAqIHJlcG9ydGVkIGFzIG1hdGNoaW5nIHRoZSBxdWVyeSwgb3Ig4oCUIHdpdGggYHByb2R1Y3RzYCBjb25maWd1cmVkIG9uIHRoZVxuICAgKiBjb250cm9sbGVyIOKAlCB0aGUgcmVzdWx0cyBvZiB0aGF0IGN1c3RvbSBzZWFyY2guXG4gICAqL1xuICByZWFkb25seSBwcm9kdWN0cyQ6IE9ic2VydmFibGU8UHJvZHVjdFtdPjtcbiAgLyoqXG4gICAqIFRoZSBjYXRhbG9nIGdyb3VuZGluZyByZXBvcnQgdGhlIGxhdGVzdCByZXNwb25zZSBjYXJyaWVkLCBvciBudWxsIHdoZW4gaXRcbiAgICogY2FycmllZCBub25lOiB3aGljaCBvZiB0aGUgcXVlcnkncyBjb25zdHJhaW50cyB0aGUgY2F0YWxvZyBhcHBsaWVkLCB3aGljaFxuICAgKiBpdCBkcm9wcGVkLCBhbmQgaG93IG1hbnkgaXRlbXMgKGFuZCB3aGljaCkgdGhlIGFwcGxpZWQgb25lcyBsZWZ0XG4gICAqIHN0YW5kaW5nLiBOdWxsIGlzIFwibm8gbmV3c1wiLCBub3QgYW4gZW1wdHkgY2F0YWxvZy5cbiAgICovXG4gIHJlYWRvbmx5IGN1c3RvbUZpZWxkcyQ6IE9ic2VydmFibGU8Q3VzdG9tRmllbGRzUmVwb3J0IHwgbnVsbD47XG4gIC8qKiBDdXJyZW50bHkgaGlnaGxpZ2h0ZWQgZHJvcGRvd24gb3B0aW9uIGluZGV4LiAtMSA9IG5vbmUuICovXG4gIHJlYWRvbmx5IGFjdGl2ZUluZGV4JDogT2JzZXJ2YWJsZTxudW1iZXI+O1xuICAvKipcbiAgICogVUktdmlzaWJsZSBsb2FkaW5nIGZsYWcg4oCUIHN1cHByZXNzZWQgZHVyaW5nIHRoZSBwb3N0LXNlbGVjdCBwcmVzc1xuICAgKiBhbmltYXRpb24gYW5kIGR1cmluZyByZS1lZGl0IChjYWNoZWQgb3B0aW9ucyBzdGF5IHZpc2libGUgdGhlcmUpLiBVc2VcbiAgICogdGhpcyBpbnN0ZWFkIG9mIHRoZSByYXcgY29yZSBzdGF0ZSBmb3IgYW55IGxvYWRpbmctc2tlbGV0b24gYmluZGluZy5cbiAgICovXG4gIHJlYWRvbmx5IGlzTG9hZGluZyQ6IE9ic2VydmFibGU8Ym9vbGVhbj47XG4gIC8qKiBTZXJ2ZXItcmVwb3J0ZWQgXCJxdWVyeSBpcyBjb21wbGV0ZVwiIGZsYWcuICovXG4gIHJlYWRvbmx5IGlzUmVhZHkkOiBPYnNlcnZhYmxlPGJvb2xlYW4+O1xuICAvKiogV2hldGhlciB0aGUgZWRpdG9yIGN1cnJlbnRseSBoYXMgZm9jdXMuICovXG4gIHJlYWRvbmx5IGlzRm9jdXNlZCQ6IE9ic2VydmFibGU8Ym9vbGVhbj47XG4gIC8qKiBXaGV0aGVyIHRoZSBkcm9wZG93biBzaG91bGQgY3VycmVudGx5IGJlIHZpc2libGUuICovXG4gIHJlYWRvbmx5IGlzRHJvcGRvd25PcGVuJDogT2JzZXJ2YWJsZTxib29sZWFuPjtcbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIGFjdGl2ZSAobGVhZGluZykgcGlsbCBzaG91bGQgcmVuZGVyIHNlbGVjdGVkIChmdWxsIG9wYWNpdHkpXG4gICAqIHJhdGhlciB0aGFuIHRoZSBkZS1lbXBoYXNpemVkIGBmaXJzdGAgdGllci4gQXV0byB0cmlnZ2VyIOKHkiB0cnVlIG9ubHkgd2hpbGVcbiAgICogYSBkcm9wZG93biBvcHRpb24gaXMgaGlnaGxpZ2h0ZWQ7IG1hbnVhbCDih5IgdHJ1ZSBvbmNlIHRoZSBwaWxsIGlzIHRhcHBlZC5cbiAgICovXG4gIHJlYWRvbmx5IGlzQWN0aXZlUGlsbFNlbGVjdGVkJDogT2JzZXJ2YWJsZTxib29sZWFuPjtcbiAgLyoqIFNlcnZlci1zdWdnZXN0ZWQgcGxhY2Vob2xkZXIgdGV4dCBmb3IgdGhlIGVkaXRvci4gKi9cbiAgcmVhZG9ubHkgcGxhY2Vob2xkZXJUZXh0JDogT2JzZXJ2YWJsZTxzdHJpbmc+O1xuICAvKiogTGFzdCBmZXRjaCBlcnJvciwgb3IgbnVsbC4gKi9cbiAgcmVhZG9ubHkgZXJyb3IkOiBPYnNlcnZhYmxlPEVycm9yIHwgbnVsbD47XG4gIC8qKiBQYXJhbSBjdXJyZW50bHkgYmVpbmcgcmUtZWRpdGVkLCBvciBudWxsLiAqL1xuICByZWFkb25seSBlZGl0aW5nUGFyYW0kOiBPYnNlcnZhYmxlPENvbXBsZXRlZFBhcmFtU3RhdGUgfCBudWxsPjtcbiAgLyoqIFBsYWluLXRleHQgb2Zmc2V0IHdoZXJlIHRoZSBlZGl0IHJlZ2lvbiBzdGFydHMsIG9yIG51bGwuICovXG4gIHJlYWRvbmx5IGVkaXRpbmdBbmNob3IkOiBPYnNlcnZhYmxlPG51bWJlciB8IG51bGw+O1xuICAvKiogTGl2ZSBjYXJldCBvZmZzZXQgd2l0aGluIHRoZSBlZGl0b3IuICovXG4gIHJlYWRvbmx5IGNhcmV0T2Zmc2V0JDogT2JzZXJ2YWJsZTxudW1iZXIgfCBudWxsPjtcblxuICAvLyA9PT0gQ29tcG9zaXRlIG9ic2VydmFibGVzID09PVxuXG4gIC8qKlxuICAgKiBTbmFwc2hvdCBvZiBldmVyeSBwdWJsaWMgZmllbGQgaW4gb25lIG9iamVjdC4gQ29udmVuaWVudCBmb3JcbiAgICogYCpuZ0lmPVwiY3RybC5zdGF0ZSQgfCBhc3luYyBhcyBzdGF0ZVwiYCB0ZW1wbGF0aW5nIOKAlCBhbGlhc2VzIGFsbCBmaWVsZHNcbiAgICogdW5kZXIgYSBzaW5nbGUgc3Vic2NyaXB0aW9uIGluc3RlYWQgb2YgbXVsdGlwbGUgYHwgYXN5bmNgIHBpcGVzLlxuICAgKi9cbiAgcmVhZG9ubHkgc3RhdGUkOiBPYnNlcnZhYmxlPEFJQXV0b2NvbXBsZXRlQ29udHJvbGxlclN0YXRlPjtcblxuICAvKipcbiAgICogQ29tcG9zaXRlIHN0YXRlIGZvciB0aGUgZHJvcGRvd24gdmlldy4gVGllciAyIGNvbnN1bWVycyBzcHJlYWQgdGhpcyBpbnRvXG4gICAqIGA8YWktYXV0b2NvbXBsZXRlLWRyb3Bkb3duPmA7IFRpZXIgMSB1c2VzIHRoZSBzYW1lIHNoYXBlIGludGVybmFsbHkuXG4gICAqL1xuICByZWFkb25seSBkcm9wZG93biQ6IE9ic2VydmFibGU8QUlBdXRvY29tcGxldGVEcm9wZG93blN0YXRlPjtcblxuICAvKipcbiAgICogVGhyb3dzIGlmIGludm9rZWQgb3V0c2lkZSBhIGJyb3dzZXIgZW52aXJvbm1lbnQuIEZvciBTU1IgLyBBbmd1bGFyXG4gICAqIFVuaXZlcnNhbCwgZ2F0ZSBjb25zdHJ1Y3Rpb24gd2l0aCBgaXNQbGF0Zm9ybUJyb3dzZXJgLlxuICAgKi9cbiAgY29uc3RydWN0b3Iob3B0czogQUlBdXRvY29tcGxldGVDb250cm9sbGVyT3B0aW9ucyA9IHt9KSB7XG4gICAgaWYgKHR5cGVvZiBkb2N1bWVudCA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBcIkFJQXV0b2NvbXBsZXRlQ29udHJvbGxlciByZXF1aXJlcyBhIGJyb3dzZXIgZW52aXJvbm1lbnQuIFwiICtcbiAgICAgICAgICBcIkZvciBTU1IgLyBBbmd1bGFyIFVuaXZlcnNhbCwgZ2F0ZSBjb25zdHJ1Y3Rpb24gd2l0aCBpc1BsYXRmb3JtQnJvd3Nlci5cIixcbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gSGVhZGxlc3MgbW9kZSBuZXZlciByZW5kZXJzIHRvIHRoZSBob3N0LCBzbyBhIHRocm93YXdheSBkaXYgaXMgZmluZSDigJRcbiAgICAvLyBpdCdzIHJlcXVpcmVkIGJ5IHRoZSBjb3JlJ3Mgc2lnbmF0dXJlIGZvciBzeW1tZXRyeSB3aXRoIGZ1bGwgbW9kZS5cbiAgICBjb25zdCBob3N0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcblxuICAgIHRoaXMuY29yZSA9IG5ldyBDb3JlQUlBdXRvY29tcGxldGUoaG9zdCwge1xuICAgICAgLi4ub3B0cyxcbiAgICAgIHJlbmRlck1vZGU6IFwiaGVhZGxlc3NcIixcbiAgICAgIHNvdXJjZTogb3B0cy5zb3VyY2UgPz8gXCJoZWFkbGVzcy1zZGtcIixcbiAgICAgIC8vIEhlYWRsZXNzIG1vZGUgbmV2ZXIgcmVuZGVycyB0aGUgZHJvcGRvd24gRE9NLCBidXQgdGhlIGtleWJvYXJkXG4gICAgICAvLyBjb250cm9sbGVyIHN0aWxsIHJlYWRzIGBvcHRpb25zUG9zaXRpb25gIHRvIGRlY2lkZSB3aGljaCB2ZXJ0aWNhbFxuICAgICAgLy8gYXJyb3cgb3BlbnMgdGhlIGRyb3Bkb3duIGZyb20gdGhlIGlucHV0LlxuICAgICAgb3B0aW9uc1Bvc2l0aW9uOiBvcHRzLm9wdGlvbnNQb3NpdGlvbiA/PyBcImJlbG93XCIsXG4gICAgfSk7XG5cbiAgICB0aGlzLnJhd1N0YXRlJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Q29yZVN0YXRlPih0aGlzLmNvcmUuZ2V0U3RhdGUoKSk7XG4gICAgLy8gUHVzaCB0aGUgc3RvcmUncyAqY3VycmVudCogc3RhdGUsIG5vdCB0aGUgc25hcHNob3QgdGhlIGxpc3RlbmVyIHdhc1xuICAgIC8vIGhhbmRlZC4gVGhlIGNvcmUgbm90aWZpZXMgbGlzdGVuZXJzIHN5bmNocm9ub3VzbHksIGFuZCBzb21lIGFjdGlvbnNcbiAgICAvLyB0cmlnZ2VyIHJlZW50cmFudCBgc3RvcmUuc2V0YCBjYWxscyAoZS5nLiB0eXBpbmcgYSBub24tbWF0Y2hpbmcgY2hhclxuICAgIC8vIGR1cmluZyByZS1lZGl0IG1ha2VzIHRoZSBjb3JlIHN5bmNocm9ub3VzbHkgZXhpdCByZS1lZGl0IGFuZCBraWNrIG9mZiBhXG4gICAgLy8gZmV0Y2gpLlxuICAgIC8vXG4gICAgLy8gVGhlIGNvcmUncyBzdG9yZSB1c2VkIHRvIGRlbGl2ZXIgc3VjaCBhIG5lc3RlZCBzZXQgaW5saW5lIGFuZCB0aGVuXG4gICAgLy8gcmVzdW1lIHRoZSBvdXRlciBsaXN0ZW5lciBsb29wLCBzbyBhIGxpc3RlbmVyIGNvdWxkIGJlIGhhbmRlZCBhbiBvbGRlclxuICAgIC8vIHN0YXRlIChzdGlsbCBpbiByZS1lZGl0KSAqYWZ0ZXIqIGEgbmV3ZXIgb25lIChyZS1lZGl0IGV4aXRlZCkg4oCUIHdoaWNoXG4gICAgLy8gcmVzdXJyZWN0ZWQgYSBzdGFsZSBgZWRpdGluZ1BhcmFtYCBhbmQgcmV0cmlnZ2VyZWQgdGhlIGVkaXRvcidzIHJlLWVkaXRcbiAgICAvLyBjYXJldC1wYXJrLCB5YW5raW5nIHRoZSBjYXJldCBiYWNrIHRvIHdoZXJlIHJlLWVkaXRpbmcgc3RhcnRlZC4gVGhlXG4gICAgLy8gc3RvcmUgbm93IHF1ZXVlcyBub3RpZmljYXRpb25zIGFuZCBkcmFpbnMgdGhlbSBpbiBvcmRlciwgc28gdGhhdFxuICAgIC8vIG91dC1vZi1vcmRlciBkZWxpdmVyeSBjYW4gbm8gbG9uZ2VyIGhhcHBlbiBhdCB0aGUgc291cmNlLlxuICAgIC8vXG4gICAgLy8gUmVhZGluZyBgZ2V0U3RhdGUoKWAgYXQgZW1pc3Npb24gdGltZSBpcyBrZXB0IGFzIGJlbHQtYW5kLWJyYWNlczogaXRcbiAgICAvLyBjb3N0cyBub3RoaW5nIChkaXN0aW5jdFVudGlsQ2hhbmdlZCBkb3duc3RyZWFtIGRyb3BzIHRoZSBkdXBsaWNhdGVcbiAgICAvLyBlbWlzc2lvbnMpIGFuZCBrZWVwcyB0aGlzIGJyaWRnZSBjb3JyZWN0IGZvciBhbnkgZnV0dXJlIGNvbnN1bWVyIHRoYXRcbiAgICAvLyBlbWl0cyBtaWQtY2FzY2FkZS4gUmVhY3QgbmVlZHMgbmVpdGhlciwgc2luY2UgaXQgYmF0Y2hlcyByZW5kZXJzIGFuZFxuICAgIC8vIGdhdGVzIGl0cyBjYXJldCBlZmZlY3RzIG9uIGRlcGVuZGVuY2llcy5cbiAgICB0aGlzLnVuc3Vic2NyaWJlQ29yZSA9IHRoaXMuY29yZS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgaWYgKCF0aGlzLmlzRGVzdHJveWVkKSB0aGlzLnJhd1N0YXRlJC5uZXh0KHRoaXMuY29yZS5nZXRTdGF0ZSgpKTtcbiAgICB9KTtcblxuICAgIC8vID09PSBQZXItZmllbGQgb2JzZXJ2YWJsZXMgPT09XG4gICAgLy8gQXJyYXktdmFsdWVkIGZpZWxkcyB1c2Ugc2hhbGxvdyBlcXVhbGl0eS4gVGhlIHZhbmlsbGEgc3RvcmUgc3ByZWFkcyBvblxuICAgIC8vIGV2ZXJ5IHdyaXRlIChgc3RvcmUuc2V0KHsgY29tcGxldGVkUGFyYW1zOiBbLi4uXSB9KWApLCBzbyByZWZlcmVuY2VcbiAgICAvLyBlcXVhbGl0eSB3b3VsZCByZS1maXJlIGRvd25zdHJlYW0gc3Vic2NyaWJlcnMgb24gZXZlcnkgc3RhdGUgdGljayBldmVuXG4gICAgLy8gd2hlbiB0aGUgYXJyYXkncyBjb250ZW50cyBhcmUgdW5jaGFuZ2VkLiBUaGUgb3RoZXIgZmllbGRzIGFyZVxuICAgIC8vIHByaW1pdGl2ZXMgb3Igc3RhYmxlIG9iamVjdCByZWZlcmVuY2VzLCBzbyBkZWZhdWx0IGlkZW50aXR5IGVxdWFsaXR5XG4gICAgLy8gd29ya3MgZmluZS5cbiAgICB0aGlzLnRleHQkID0gZGVyaXZlRmllbGQodGhpcy5yYXdTdGF0ZSQsIChzKSA9PiBzLnRleHQpO1xuICAgIHRoaXMuY29tcGxldGVkUGFyYW1zJCA9IGRlcml2ZUZpZWxkKHRoaXMucmF3U3RhdGUkLCAocykgPT4gcy5jb21wbGV0ZWRQYXJhbXMsIGFyckVxKTtcbiAgICB0aGlzLnNraXBwZWRQYXJhbXMkID0gZGVyaXZlRmllbGQodGhpcy5yYXdTdGF0ZSQsIChzKSA9PiBzLnNraXBwZWRQYXJhbXMsIGFyckVxKTtcbiAgICB0aGlzLmlkZW50aWZpZWRQYXJhbXMkID0gZGVyaXZlRmllbGQodGhpcy5yYXdTdGF0ZSQsIChzKSA9PiBzLmlkZW50aWZpZWRQYXJhbXMsIGFyckVxKTtcbiAgICB0aGlzLnN1Z2dlc3Rpb25QaWxscyQgPSBkZXJpdmVGaWVsZCh0aGlzLnJhd1N0YXRlJCwgKHMpID0+IHMuYWN0aW9uYWJsZVN1Z2dlc3Rpb25zLCBhcnJFcSk7XG4gICAgdGhpcy5zZWdtZW50cyQgPSBkZXJpdmVGaWVsZCh0aGlzLnJhd1N0YXRlJCwgKHMpID0+IHMuc2VnbWVudHMsIGFyckVxKTtcbiAgICB0aGlzLm5ld1BhcmFtSWQkID0gZGVyaXZlRmllbGQodGhpcy5yYXdTdGF0ZSQsIChzKSA9PiBzLm5ld1BhcmFtSWQpO1xuICAgIHRoaXMuc3VnZ2VzdGlvbnMkID0gZGVyaXZlRmllbGQodGhpcy5yYXdTdGF0ZSQsIChzKSA9PiBzLnN1Z2dlc3Rpb25zLCBhcnJFcSk7XG4gICAgdGhpcy5wcm9kdWN0cyQgPSBkZXJpdmVGaWVsZCh0aGlzLnJhd1N0YXRlJCwgKHMpID0+IHMucHJvZHVjdHMsIGFyckVxKTtcbiAgICB0aGlzLmN1c3RvbUZpZWxkcyQgPSBkZXJpdmVGaWVsZCh0aGlzLnJhd1N0YXRlJCwgKHMpID0+IHMuY3VzdG9tRmllbGRzKTtcbiAgICB0aGlzLmFjdGl2ZUluZGV4JCA9IGRlcml2ZUZpZWxkKHRoaXMucmF3U3RhdGUkLCAocykgPT4gcy5hY3RpdmVEcm9wZG93bkluZGV4KTtcbiAgICB0aGlzLmlzTG9hZGluZyQgPSBkZXJpdmVGaWVsZCh0aGlzLnJhd1N0YXRlJCwgY29tcHV0ZVVpTG9hZGluZyk7XG4gICAgdGhpcy5pc1JlYWR5JCA9IGRlcml2ZUZpZWxkKHRoaXMucmF3U3RhdGUkLCAocykgPT4gcy5pc1JlYWR5KTtcbiAgICB0aGlzLmlzRm9jdXNlZCQgPSBkZXJpdmVGaWVsZCh0aGlzLnJhd1N0YXRlJCwgKHMpID0+IHMuaXNGb2N1c2VkKTtcbiAgICB0aGlzLmlzRHJvcGRvd25PcGVuJCA9IGRlcml2ZUZpZWxkKHRoaXMucmF3U3RhdGUkLCAocykgPT4gcy5pc0Ryb3Bkb3duT3Blbik7XG4gICAgdGhpcy5pc0FjdGl2ZVBpbGxTZWxlY3RlZCQgPSBkZXJpdmVGaWVsZCh0aGlzLnJhd1N0YXRlJCwgKHMpID0+IHMuaXNBY3RpdmVQaWxsU2VsZWN0ZWQpO1xuICAgIHRoaXMucGxhY2Vob2xkZXJUZXh0JCA9IGRlcml2ZUZpZWxkKHRoaXMucmF3U3RhdGUkLCAocykgPT4gcy5wbGFjZWhvbGRlclRleHQpO1xuICAgIHRoaXMuZXJyb3IkID0gZGVyaXZlRmllbGQodGhpcy5yYXdTdGF0ZSQsIChzKSA9PiBzLmVycm9yKTtcbiAgICB0aGlzLmVkaXRpbmdQYXJhbSQgPSBkZXJpdmVGaWVsZCh0aGlzLnJhd1N0YXRlJCwgKHMpID0+IHMuZWRpdGluZ1BhcmFtKTtcbiAgICB0aGlzLmVkaXRpbmdBbmNob3IkID0gZGVyaXZlRmllbGQodGhpcy5yYXdTdGF0ZSQsIChzKSA9PiBzLmVkaXRpbmdBbmNob3IpO1xuICAgIHRoaXMuY2FyZXRPZmZzZXQkID0gZGVyaXZlRmllbGQodGhpcy5yYXdTdGF0ZSQsIChzKSA9PiBzLmNhcmV0T2Zmc2V0KTtcblxuICAgIC8vID09PSBDb21wb3NpdGUgb2JzZXJ2YWJsZXMgPT09XG4gICAgLy8gUHJvamVjdCBkaXJlY3RseSBvZmYgYHJhd1N0YXRlJGAgd2l0aCBhIHNpbmdsZSBtYXAoKSBzbyBlYWNoIHN0b3JlXG4gICAgLy8gdGljayBwcm9kdWNlcyBleGFjdGx5IE9ORSBjb2hlcmVudCBzdGF0ZSQgZW1pc3Npb24uIFVzaW5nXG4gICAgLy8gYGNvbWJpbmVMYXRlc3RgIG92ZXIgdGhlIHBlci1maWVsZCBvYnNlcnZhYmxlcyBoZXJlIHdvdWxkIGZpcmUgb25lXG4gICAgLy8gZW1pc3Npb24gcGVyIGlubmVyLXNvdXJjZSB0aWNrICh1cCB0byBOIHBlciBzdG9yZSB1cGRhdGUpLCBhbmQgdGhlXG4gICAgLy8gZWRpdG9yLWhvc3QgZGlyZWN0aXZlJ3MgcG9zdC1wcm9tb3RlIHJlZm9jdXMgd291bGQgcnVuIGFnYWluc3QgYW5cbiAgICAvLyBpbnRlcm1lZGlhdGUgc3RhdGUgd2hlcmUgYG5ld1BhcmFtSWRgIHdhcyBzZXQgYnV0IGBzZWdtZW50c2AgL1xuICAgIC8vIGBjYXJldE9mZnNldGAgc3RpbGwgaGVsZCB0aGVpciBvbGQgdmFsdWVzIOKAlCBsZWF2aW5nIHRoZSBjYXJldCBzdHVja1xuICAgIC8vIGF0IHRoZSBwcmUtY2xpY2sgcG9zaXRpb24uXG4gICAgdGhpcy5zdGF0ZSQgPSB0aGlzLnJhd1N0YXRlJC5waXBlKFxuICAgICAgbWFwKGNvbXB1dGVTdGF0ZSksXG4gICAgICBzaGFyZVJlcGxheSh7IGJ1ZmZlclNpemU6IDEsIHJlZkNvdW50OiB0cnVlIH0pLFxuICAgICk7XG5cbiAgICB0aGlzLm9wdGlvbnNQb3NpdGlvbiQubmV4dChvcHRzLm9wdGlvbnNQb3NpdGlvbiA/PyBcImJlbG93XCIpO1xuICAgIHRoaXMuZHJvcGRvd24kID0gY29tYmluZUxhdGVzdChbdGhpcy5yYXdTdGF0ZSQsIHRoaXMub3B0aW9uc1Bvc2l0aW9uJF0pLnBpcGUoXG4gICAgICBtYXAoKFtzLCBvcHRpb25zUG9zaXRpb25dKSA9PiBjb21wdXRlRHJvcGRvd24ocywgb3B0aW9uc1Bvc2l0aW9uKSksXG4gICAgICBzaGFyZVJlcGxheSh7IGJ1ZmZlclNpemU6IDEsIHJlZkNvdW50OiB0cnVlIH0pLFxuICAgICk7XG4gIH1cblxuICAvLyA9PT0gUmVhZC1vbmx5IGFjY2Vzc29ycyA9PT1cblxuICAvKiogU3RhYmxlIEFSSUEgbGlzdGJveCBJRCBmb3IgdGhlIGRyb3Bkb3duLiBQYXNzIHRvIGA8dGV4dGFyZWEgYXJpYS1jb250cm9scz1cIi4uLlwiPmAuICovXG4gIGdldCBsaXN0Ym94SWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5jb3JlLmxpc3Rib3hJZDtcbiAgfVxuXG4gIC8qKiBXaGV0aGVyIGBkZXN0cm95KClgIGhhcyBiZWVuIGNhbGxlZC4gQWZ0ZXIgZGVzdHJ1Y3Rpb24gYWxsIGFjdGlvbiBtZXRob2RzIG5vLW9wLiAqL1xuICBnZXQgZGVzdHJveWVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmlzRGVzdHJveWVkO1xuICB9XG5cbiAgLyoqXG4gICAqIFN5bmNocm9ub3VzIHNuYXBzaG90IG9mIHRoZSBjb250cm9sbGVyJ3MgY3VycmVudCBwdWJsaWMgc3RhdGUuIE1pcnJvcnNcbiAgICogdGhlIGxhdGVzdCBlbWlzc2lvbiBvZiBgc3RhdGUkYC4gVXNlZnVsIGluIGNhbGxiYWNrcyB3aGVyZSB5b3UgY2FuJ3RcbiAgICogYHN1YnNjcmliZWAgKGUuZy4gaW5zaWRlIGFuIGV2ZW50IGhhbmRsZXIpLlxuICAgKi9cbiAgZ2V0U3RhdGUoKTogQUlBdXRvY29tcGxldGVDb250cm9sbGVyU3RhdGUge1xuICAgIHJldHVybiBjb21wdXRlU3RhdGUodGhpcy5yYXdTdGF0ZSQudmFsdWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBzdHJ1Y3R1cmVkIHF1ZXJ5IGFzIHRoZSBTREsgdW5kZXJzdGFuZHMgaXQgcmlnaHQgbm93IOKAlCB0aGUgc2FtZVxuICAgKiBvYmplY3QgYG9uUmVzdWx0YCBkZWxpdmVycyBhZnRlciBlYWNoIHJlc3BvbnNlIGFuZCBgb25TdWJtaXRgIGRlbGl2ZXJzXG4gICAqIG9uIHN1Ym1pdC4gUmVhZCBpdCBvbiBkZW1hbmQgZnJvbSBhIHBsYWNlIHRoYXQgaGFzIG5vIGV2ZW50IGhhbmR5IChhXG4gICAqIGN1c3RvbSBzdWJtaXQgYnV0dG9uLCBhIFwic2F2ZSBkcmFmdFwiIGFjdGlvbikuXG4gICAqL1xuICBnZXRSZXN1bHQoKTogQXV0b2NvbXBsZXRlUmVzdWx0IHtcbiAgICByZXR1cm4gdGhpcy5jb3JlLmdldFJlc3VsdCgpO1xuICB9XG5cbiAgLy8gPT09IEFjdGlvbiBtZXRob2RzIChwYXNzLXRocm91Z2ggdG8gdGhlIGNvcmUpID09PVxuICAvL1xuICAvLyBFdmVyeSBhY3Rpb24gbWV0aG9kIGJlZ2lucyB3aXRoIGFuIGBpc0Rlc3Ryb3llZGAgZ3VhcmQgc28gdGhhdCBjYWxsZXJzXG4gIC8vIHdobyBob2xkIGEgc3RhbGUgcmVmZXJlbmNlIGFmdGVyIGBkZXN0cm95KClgIGRvbid0IGFjY2lkZW50YWxseSB0cmlnZ2VyXG4gIC8vIHdvcmsgb24gYSB0b3JuLWRvd24gY29yZS4gVGhlIHZhbmlsbGEgY29yZSBkb2VzIG5vdCBnYXRlIGl0cyBvd24gbWV0aG9kc1xuICAvLyBwb3N0LWRpc3Bvc2Ug4oCUIGByZXNldCgpYCwgYGhhbmRsZVRleHRDaGFuZ2UoKWAsIGFuZCBmcmllbmRzIHdvdWxkIHN0aWxsXG4gIC8vIHNjaGVkdWxlIGZldGNoZXMgb3IgZmlyZSBIVFRQIHJlcXVlc3RzIGFnYWluc3QgYW4gYWJvcnRlZCBjb250cm9sbGVyLFxuICAvLyBhbmQgdGhlIHJlc3BvbnNlcyB3b3VsZCBoYXZlIG5vd2hlcmUgdG8gc3VyZmFjZSAocmF3U3RhdGUkIGlzIGFscmVhZHlcbiAgLy8gY29tcGxldGUpLiBUaGUgZ3VhcmQgbWFrZXMgdGhlIEpTRG9jLXByb21pc2VkIFwibm8tb3Agc2lsZW50bHlcIlxuICAvLyBzZW1hbnRpY3MgYWN0dWFsbHkgdHJ1ZS5cblxuICAvKiogQ2xlYXIgYWxsIHN0YXRlLCByb3RhdGUgYHNlc3Npb25faWRgLCBhbmQgcmUtZmV0Y2guIENhbGwgYWZ0ZXIgc3VibWl0LiAqL1xuICByZXNldCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pc0Rlc3Ryb3llZCkgcmV0dXJuO1xuICAgIHRoaXMuY29yZS5yZXNldCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlY29yZHMgYSBzdWJtaXQgaW4gdGVsZW1ldHJ5LiBFbnRlciBpcyByZWNvcmRlZCBieSB0aGUgU0RLOyBjYWxsIHRoaXNcbiAgICogZnJvbSBhIHN1Ym1pdCBidXR0b24geW91IHJlbmRlciwgc28gZWFjaCBzdWJtaXQgaXMgY291bnRlZCBvbmNlLlxuICAgKi9cbiAgcmVjb3JkU3VibWl0KHJlc3VsdDogQXV0b2NvbXBsZXRlUmVzdWx0KTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaXNEZXN0cm95ZWQpIHJldHVybjtcbiAgICB0aGlzLmNvcmUucmVjb3JkU3VibWl0KHJlc3VsdCk7XG4gIH1cblxuICAvKiogUGljayBhIGRyb3Bkb3duIG9wdGlvbiAob3IgcmVwbGFjZSB0aGUgcmUtZWRpdGVkIHBhcmFtIGlmIGluIHJlLWVkaXQgbW9kZSkuICovXG4gIHNlbGVjdE9wdGlvbihvcHRpb246IFN1Z2dlc3Rpb25PcHRpb24pOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pc0Rlc3Ryb3llZCkgcmV0dXJuO1xuICAgIHRoaXMuY29yZS5zZWxlY3RPcHRpb24ob3B0aW9uKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBbm5vdW5jZSBhIHByb2R1Y3Qgc2VsZWN0aW9uIOKAlCBmaXJlcyB0aGUgYG9uUHJvZHVjdFNlbGVjdGAgY2FsbGJhY2sgdGhlXG4gICAqIGNvbnRyb2xsZXIgd2FzIGNvbnN0cnVjdGVkIHdpdGguIGA8YWktYXV0b2NvbXBsZXRlLWRyb3Bkb3duPmAgY2FsbHMgdGhpc1xuICAgKiBmb3IgeW91OyBjb25zdW1lcnMgcmVuZGVyaW5nIHRoZWlyIG93biBzdHJpcCBjYWxsIGl0IHRoZW1zZWx2ZXMuXG4gICAqXG4gICAqIEVtaXR0aW5nIGlzIHRoZSB3aG9sZSBiZWhhdmlvdXI6IHRoZSBTREsgZGVsaWJlcmF0ZWx5IGRvZXMgbm90IG5hdmlnYXRlIHRvXG4gICAqIGBwcm9kdWN0LnVybGAsIGJlY2F1c2Ugb25seSB0aGUgaW50ZWdyYXRpb24ga25vd3Mgd2hldGhlciBhIHNlbGVjdGlvblxuICAgKiBtZWFucyBcIm9wZW4gdGhlIFBEUFwiLCBcImFkZCB0byBjYXJ0XCIsIG9yIFwiZmlsbCB0aGUgaW5wdXRcIi5cbiAgICovXG4gIHNlbGVjdFByb2R1Y3QocHJvZHVjdDogUHJvZHVjdCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmlzRGVzdHJveWVkKSByZXR1cm47XG4gICAgdGhpcy5jb3JlLnNlbGVjdFByb2R1Y3QocHJvZHVjdCk7XG4gIH1cblxuICAvKiogUHJvbW90ZSB0aGUgcGlsbCBhdCBgaW5kZXhgIHRvIGFjdGl2ZSAoZnJvbnQgb2YgdGhlIGxpc3QpLiAqL1xuICBzZXRBY3RpdmVQaWxsKGluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pc0Rlc3Ryb3llZCkgcmV0dXJuO1xuICAgIHRoaXMuY29yZS5zZXRBY3RpdmVQaWxsKGluZGV4KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTa2lwIHRoZSBhY3RpdmUgcGlsbCDigJQgc2FtZSBhY3Rpb24gYXMgcHJlc3Npbmcg4oaSIGF0IHRoZSBlbmQgb2YgdGhlIGlucHV0LlxuICAgKiBUaGUgZHJvcGRvd24ncyBza2lwIGJ1dHRvbiBjYWxscyB0aGlzOyBjb25zdW1lcnMgcmVuZGVyaW5nIHRoZWlyIG93biBza2lwXG4gICAqIGFmZm9yZGFuY2UgY2FsbCBpdCBkaXJlY3RseS4gVGhlIHNraXBwZWQgc3VnZ2VzdGlvbiBqb2lucyBgc2tpcHBlZFBhcmFtcyRgLlxuICAgKi9cbiAgc2tpcEFjdGl2ZVBpbGwoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaXNEZXN0cm95ZWQpIHJldHVybjtcbiAgICB0aGlzLmNvcmUuc2tpcEFjdGl2ZVBpbGwoKTtcbiAgfVxuXG4gIC8qKiBEcm9wIHRoZSBsYXN0IGNvbXBsZXRlZCBwYXJhbSdzIFwiY29tcGxldGVkXCIgc3RhdHVzLiBUZXh0IHN0YXlzIGFzIHBsYWluIHRleHQuICovXG4gIHJlbW92ZUxhc3RQYXJhbSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pc0Rlc3Ryb3llZCkgcmV0dXJuO1xuICAgIHRoaXMuY29yZS5yZW1vdmVMYXN0UGFyYW0oKTtcbiAgfVxuXG4gIC8qKiBDbGVhciB0aGUgc2hpbW1lciBhbmltYXRpb24gc3RhdGUgZm9yIHRoZSBtb3N0LXJlY2VudGx5LWFkZGVkIHBhcmFtLiAqL1xuICBjbGVhck5ld1BhcmFtSWQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaXNEZXN0cm95ZWQpIHJldHVybjtcbiAgICB0aGlzLmNvcmUuY2xlYXJOZXdQYXJhbUlkKCk7XG4gIH1cblxuICAvKiogQ29udHJvbGxlZC1tb2RlIHNldHRlciBmb3IgZWRpdG9yIHRleHQuICovXG4gIHNldFZhbHVlKHRleHQ6IHN0cmluZyk6IHZvaWQge1xuICAgIGlmICh0aGlzLmlzRGVzdHJveWVkKSByZXR1cm47XG4gICAgdGhpcy5jb3JlLnNldFZhbHVlKHRleHQpO1xuICB9XG5cbiAgLyoqIENvbnRyb2xsZWQtbW9kZSBzZXR0ZXIgZm9yIGNvbXBsZXRlZCBwYXJhbXMuICovXG4gIHNldENvbXBsZXRlZFBhcmFtcyhwYXJhbXM6IENvbXBsZXRlZFBhcmFtU3RhdGVbXSk6IHZvaWQge1xuICAgIGlmICh0aGlzLmlzRGVzdHJveWVkKSByZXR1cm47XG4gICAgdGhpcy5jb3JlLnNldENvbXBsZXRlZFBhcmFtcyhwYXJhbXMpO1xuICB9XG5cbiAgLyoqIEZvcndhcmQgcGxhaW4tdGV4dCBpbnB1dCBmcm9tIHRoZSBjb25zdW1lcidzIGA8dGV4dGFyZWE+YCB0byB0aGUgY29yZS4gKi9cbiAgaGFuZGxlVGV4dENoYW5nZSh2YWx1ZTogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaXNEZXN0cm95ZWQpIHJldHVybjtcbiAgICB0aGlzLmNvcmUuaGFuZGxlVGV4dENoYW5nZSh2YWx1ZSk7XG4gIH1cblxuICAvKiogRm9yd2FyZCBrZXlib2FyZCBldmVudHMgZnJvbSB0aGUgY29uc3VtZXIncyBgPHRleHRhcmVhPmAgdG8gdGhlIGNvcmUuICovXG4gIGhhbmRsZUtleURvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pc0Rlc3Ryb3llZCkgcmV0dXJuO1xuICAgIHRoaXMuY29yZS5oYW5kbGVLZXlEb3duKGV2ZW50KTtcbiAgfVxuXG4gIC8qKiBOb3RpZnkgdGhlIGNvcmUgb2YgZm9jdXMgc3RhdGUuICovXG4gIHNldEZvY3VzZWQoZm9jdXNlZDogYm9vbGVhbik6IHZvaWQge1xuICAgIGlmICh0aGlzLmlzRGVzdHJveWVkKSByZXR1cm47XG4gICAgdGhpcy5jb3JlLnNldEZvY3VzZWQoZm9jdXNlZCk7XG4gIH1cblxuICAvKiogRW50ZXIgcmUtZWRpdCBtb2RlIGZvciB0aGUgYm9sZCBwYXJhbSB3aXRoIHRoZSBnaXZlbiBpZC4gKi9cbiAgc3RhcnRFZGl0aW5nUGFyYW0ocGFyYW1JZDogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaXNEZXN0cm95ZWQpIHJldHVybjtcbiAgICB0aGlzLmNvcmUuc3RhcnRFZGl0aW5nUGFyYW0ocGFyYW1JZCk7XG4gIH1cblxuICAvKiogRXhpdCByZS1lZGl0IG1vZGUgd2l0aG91dCBjaGFuZ2luZyB0aGUgYm9sZCBwYXJhbS4gKi9cbiAgZXhpdEVkaXRNb2RlKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmlzRGVzdHJveWVkKSByZXR1cm47XG4gICAgdGhpcy5jb3JlLmV4aXRFZGl0TW9kZSgpO1xuICB9XG5cbiAgLyoqIEZvcndhcmQgcG9zdC1pbnB1dCBjYXJldCBwb3NpdGlvbiAoZXh0ZW5kcyB0aGUgZWRpdCB0YWlsKS4gKi9cbiAgaGFuZGxlQ2FyZXRBZnRlcklucHV0KG9mZnNldDogbnVtYmVyIHwgbnVsbCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmlzRGVzdHJveWVkKSByZXR1cm47XG4gICAgdGhpcy5jb3JlLmhhbmRsZUNhcmV0QWZ0ZXJJbnB1dChvZmZzZXQpO1xuICB9XG5cbiAgLyoqIEZvcndhcmQgc2VsZWN0aW9uLW9ubHkgY2FyZXQgbW92ZXMgKG1heSBleGl0IHJlLWVkaXQpLiAqL1xuICBoYW5kbGVDYXJldE1vdmUob2Zmc2V0OiBudW1iZXIgfCBudWxsKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaXNEZXN0cm95ZWQpIHJldHVybjtcbiAgICB0aGlzLmNvcmUuaGFuZGxlQ2FyZXRNb3ZlKG9mZnNldCk7XG4gIH1cblxuICAvKiogUmVwbGFjZSB0aGUgYm9sZCBwYXJhbSBiZWluZyByZS1lZGl0ZWQuIFJldHVybnMgdHJ1ZSB3aGVuIGFwcGxpZWQuICovXG4gIHJlcGxhY2VFZGl0aW5nUmFuZ2UocmVwbGFjZW1lbnQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGlmICh0aGlzLmlzRGVzdHJveWVkKSByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuIHRoaXMuY29yZS5yZXBsYWNlRWRpdGluZ1JhbmdlKHJlcGxhY2VtZW50KTtcbiAgfVxuXG4gIC8qKiBTZXQgdGhlIGhpZ2hsaWdodGVkIG9wdGlvbiBpbmRleCAodHlwaWNhbGx5IGRyaXZlbiBieSBob3ZlcikuICovXG4gIHNldEFjdGl2ZURyb3Bkb3duSW5kZXgoaW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgIGlmICh0aGlzLmlzRGVzdHJveWVkKSByZXR1cm47XG4gICAgdGhpcy5jb3JlLnNldEFjdGl2ZURyb3Bkb3duSW5kZXgoaW5kZXgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBwb2ludGVyIGxlZnQgb3B0aW9uIGBpbmRleGA6IGNsZWFyIHRoZSBoaWdobGlnaHQgaWYgaXQgaXMgc3RpbGwgb24gaXQsXG4gICAqIHNvIEVudGVyIGFmdGVyd2FyZHMgc3VibWl0cyBpbnN0ZWFkIG9mIHBpY2tpbmcgYW4gb3B0aW9uIHRoZSBwb2ludGVyIGlzIG5vXG4gICAqIGxvbmdlciBvbi4gQSBoaWdobGlnaHQgdGhlIGtleWJvYXJkIGhhcyBzaW5jZSBtb3ZlZCBpcyBsZWZ0IGFsb25lLlxuICAgKi9cbiAgY2xlYXJIaWdobGlnaHQoaW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgIGlmICh0aGlzLmlzRGVzdHJveWVkKSByZXR1cm47XG4gICAgdGhpcy5jb3JlLmNsZWFySGlnaGxpZ2h0KGluZGV4KTtcbiAgfVxuXG4gIC8qKiBQYWdlIHRoZSBkYXRlcGlja2VyIGJhY2sgb25lIG1vbnRoLiBOby1vcCB1bmxlc3MgYSBkYXRlIHBpbGwgaXMgYWN0aXZlLiAqL1xuICBzaG93UHJldmlvdXNNb250aCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pc0Rlc3Ryb3llZCkgcmV0dXJuO1xuICAgIHRoaXMuY29yZS5zaG93UHJldmlvdXNNb250aCgpO1xuICB9XG5cbiAgLyoqIFBhZ2UgdGhlIGRhdGVwaWNrZXIgZm9yd2FyZCBvbmUgbW9udGguIE5vLW9wIHVubGVzcyBhIGRhdGUgcGlsbCBpcyBhY3RpdmUuICovXG4gIHNob3dOZXh0TW9udGgoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaXNEZXN0cm95ZWQpIHJldHVybjtcbiAgICB0aGlzLmNvcmUuc2hvd05leHRNb250aCgpO1xuICB9XG5cbiAgLy8gPT09IExpZmVjeWNsZSA9PT1cblxuICAvKipcbiAgICogQXBwbHkgcnVudGltZSBjaGFuZ2VzIHRvIGEgc3Vic2V0IG9mIG9wdGlvbnMuIEV2ZW50IGNhbGxiYWNrc1xuICAgKiAoYG9uU3VibWl0YCwgYG9uUmVzdWx0YCwgYG9uRXJyb3JgLCBldGMuKSBjYW5ub3QgYmUgc3dhcHBlZCB0aGlzIHdheSDigJQgdGhleSBhcmVcbiAgICogcmVnaXN0ZXJlZCBvbmNlIGF0IGNvbnN0cnVjdGlvbiAobWF0Y2hlcyB0aGUgUmVhY3QgaG9vaydzIGRlc2lnbikuIEZvclxuICAgKiBkeW5hbWljIGV2ZW50IHJlYWN0aXZpdHksIHN1YnNjcmliZSB0byB0aGUgY29ycmVzcG9uZGluZyBvYnNlcnZhYmxlXG4gICAqIChlLmcuIGB0ZXh0JGAgaW5zdGVhZCBvZiBgb25DaGFuZ2VgKS5cbiAgICovXG4gIHVwZGF0ZShvcHRzOiBBSUF1dG9jb21wbGV0ZUNvbnRyb2xsZXJVcGRhdGUpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pc0Rlc3Ryb3llZCkgcmV0dXJuO1xuICAgIHRoaXMuY29yZS51cGRhdGUob3B0cyk7XG4gICAgaWYgKG9wdHMub3B0aW9uc1Bvc2l0aW9uICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMub3B0aW9uc1Bvc2l0aW9uJC5uZXh0KG9wdHMub3B0aW9uc1Bvc2l0aW9uKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmVsZWFzZSBhbGwgcmVzb3VyY2VzIOKAlCB1bnN1YnNjcmliZXMgZnJvbSB0aGUgY29yZSwgZGVzdHJveXMgdGhlIGNvcmUsXG4gICAqIGFuZCBjb21wbGV0ZXMgdGhlIGludGVybmFsIHN0YXRlIHN1YmplY3QuIFNhZmUgdG8gY2FsbCBtdWx0aXBsZSB0aW1lcy5cbiAgICogQWZ0ZXIgZGVzdHJ1Y3Rpb24sIGFjdGlvbiBtZXRob2RzIG5vLW9wIHNpbGVudGx5LlxuICAgKi9cbiAgZGVzdHJveSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pc0Rlc3Ryb3llZCkgcmV0dXJuO1xuICAgIHRoaXMuaXNEZXN0cm95ZWQgPSB0cnVlO1xuICAgIHRoaXMudW5zdWJzY3JpYmVDb3JlKCk7XG4gICAgdGhpcy5jb3JlLmRlc3Ryb3koKTtcbiAgICB0aGlzLnJhd1N0YXRlJC5jb21wbGV0ZSgpO1xuICB9XG59XG5cbi8vID09PT09IFB1cmUgaGVscGVycyDigJQgbm90IHBhcnQgb2YgdGhlIHB1YmxpYyBzdXJmYWNlID09PT09XG5cbi8qKlxuICogU2hhbGxvdyBhcnJheSBlcXVhbGl0eS4gVGhlIHZhbmlsbGEgc3RvcmUgcmVhc3NpZ25zIGFycmF5IGZpZWxkcyBvbiBldmVyeVxuICogd3JpdGUgKGBzdG9yZS5zZXQoeyBjb21wbGV0ZWRQYXJhbXM6IFsuLi5wcmV2LCB4XSB9KWApLCBzbyByZWZlcmVuY2VcbiAqIGVxdWFsaXR5IGFsb25lIHdvdWxkIHJlLWVtaXQgZG93bnN0cmVhbSBldmVuIHdoZW4gdGhlIGNvbnRlbnRzIGFyZVxuICogaWRlbnRpY2FsLiBVc2VkIGZvciBgY29tcGxldGVkUGFyYW1zJGAsIGBzdWdnZXN0aW9ucyRgLCBgc3VnZ2VzdGlvblBpbGxzJGAsXG4gKiBhbmQgYHNlZ21lbnRzJGAuXG4gKi9cbmZ1bmN0aW9uIGFyckVxPFQ+KGE6IHJlYWRvbmx5IFRbXSwgYjogcmVhZG9ubHkgVFtdKTogYm9vbGVhbiB7XG4gIGlmIChhID09PSBiKSByZXR1cm4gdHJ1ZTtcbiAgaWYgKGEubGVuZ3RoICE9PSBiLmxlbmd0aCkgcmV0dXJuIGZhbHNlO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGEubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoYVtpXSAhPT0gYltpXSkgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiB0cnVlO1xufVxuXG4vKiogVUktdmlzaWJsZSBsb2FkaW5nIOKAlCB0aGUgY29yZSdzIGBkcm9wZG93bkxvYWRpbmdgIChzZWUgaXRzIGRvY3MpLiAqL1xuZnVuY3Rpb24gY29tcHV0ZVVpTG9hZGluZyhzOiBDb3JlU3RhdGUpOiBib29sZWFuIHtcbiAgcmV0dXJuIHMuZHJvcGRvd25Mb2FkaW5nO1xufVxuXG5mdW5jdGlvbiBjb21wdXRlU3RhdGUoczogQ29yZVN0YXRlKTogQUlBdXRvY29tcGxldGVDb250cm9sbGVyU3RhdGUge1xuICByZXR1cm4ge1xuICAgIHRleHQ6IHMudGV4dCxcbiAgICBjb21wbGV0ZWRQYXJhbXM6IHMuY29tcGxldGVkUGFyYW1zLFxuICAgIHNraXBwZWRQYXJhbXM6IHMuc2tpcHBlZFBhcmFtcyxcbiAgICBpZGVudGlmaWVkUGFyYW1zOiBzLmlkZW50aWZpZWRQYXJhbXMsXG4gICAgc3VnZ2VzdGlvblBpbGxzOiBzLmFjdGlvbmFibGVTdWdnZXN0aW9ucyxcbiAgICBzZWdtZW50czogcy5zZWdtZW50cyxcbiAgICBuZXdQYXJhbUlkOiBzLm5ld1BhcmFtSWQsXG4gICAgc3VnZ2VzdGlvbnM6IHMuc3VnZ2VzdGlvbnMsXG4gICAgcHJvZHVjdHM6IHMucHJvZHVjdHMsXG4gICAgY3VzdG9tRmllbGRzOiBzLmN1c3RvbUZpZWxkcyxcbiAgICBhY3RpdmVJbmRleDogcy5hY3RpdmVEcm9wZG93bkluZGV4LFxuICAgIGlzTG9hZGluZzogY29tcHV0ZVVpTG9hZGluZyhzKSxcbiAgICBpc1JlYWR5OiBzLmlzUmVhZHksXG4gICAgaXNGb2N1c2VkOiBzLmlzRm9jdXNlZCxcbiAgICBpc0Ryb3Bkb3duT3Blbjogcy5pc0Ryb3Bkb3duT3BlbixcbiAgICBwbGFjZWhvbGRlclRleHQ6IHMucGxhY2Vob2xkZXJUZXh0LFxuICAgIGVycm9yOiBzLmVycm9yLFxuICAgIGVkaXRpbmdQYXJhbTogcy5lZGl0aW5nUGFyYW0sXG4gICAgZWRpdGluZ0lkZW50aWZpZWQ6IHMuZWRpdGluZ0lkZW50aWZpZWQsXG4gICAgZWRpdGluZ0FuY2hvcjogcy5lZGl0aW5nQW5jaG9yLFxuICAgIGNhcmV0T2Zmc2V0OiBzLmNhcmV0T2Zmc2V0LFxuICB9O1xufVxuXG5mdW5jdGlvbiBjb21wdXRlRHJvcGRvd24oXG4gIHM6IENvcmVTdGF0ZSxcbiAgb3B0aW9uc1Bvc2l0aW9uOiBcImFib3ZlXCIgfCBcImJlbG93XCIsXG4pOiBBSUF1dG9jb21wbGV0ZURyb3Bkb3duU3RhdGUge1xuICBjb25zdCBlZGl0aW5nUGFyYW0gPSBzLmVkaXRpbmdQYXJhbTtcbiAgY29uc3QgZWRpdGluZ0lkZW50aWZpZWQgPSBzLmVkaXRpbmdJZGVudGlmaWVkO1xuICBjb25zdCBkYXRlU2VsZWN0aW9uID0gZGF0ZVNlbGVjdGlvbkZvcihzKTtcbiAgY29uc3QgYWN0aXZlU3VnZ2VzdGlvbiA9IHMuYWN0aW9uYWJsZVN1Z2dlc3Rpb25zWzBdO1xuICBjb25zdCBkcm9wZG93blBpbGw6IFN1Z2dlc3Rpb24gfCBudWxsID0gZWRpdGluZ1BhcmFtXG4gICAgPyB7XG4gICAgICAgIHR5cGU6IGVkaXRpbmdQYXJhbS5zdWdnZXN0aW9uVHlwZSxcbiAgICAgICAgdGV4dDogZWRpdGluZ1BhcmFtLnN1Z2dlc3Rpb25QbGFjZWhvbGRlcixcbiAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgIG9wdGlvbnM6IGVkaXRpbmdQYXJhbS5vcHRpb25zLFxuICAgICAgfVxuICAgIDogZWRpdGluZ0lkZW50aWZpZWRcbiAgICAgID8gLy8gQW5zd2VyaW5nIGEgc3BhbiB0aGUgdXNlciB3cm90ZSB0aGVtc2VsdmVzOiB0aGUgcGlsbCBuYW1lcyB0aGVcbiAgICAgICAgLy8gcGFyYW1ldGVyIHRoZSBzZXJ2ZXIgbWF0Y2hlZCBpdCB0bywgc28gdGhlIGNhbGVuZGFyIGlzbid0IHVubGFiZWxsZWQuXG4gICAgICAgIHtcbiAgICAgICAgICB0eXBlOiBlZGl0aW5nSWRlbnRpZmllZC50eXBlLFxuICAgICAgICAgIHRleHQ6IGlkZW50aWZpZWRQYXJhbUxhYmVsKGVkaXRpbmdJZGVudGlmaWVkLnR5cGUpLFxuICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICAgIG9wdGlvbnM6IFtdLFxuICAgICAgICB9XG4gICAgICA6IG51bGw7XG4gIGNvbnN0IGRyb3Bkb3duQWN0aXZlUGlsbCA9IHMuZHJvcGRvd25TdWdnZXN0aW9uID8/IGRyb3Bkb3duUGlsbCA/PyBhY3RpdmVTdWdnZXN0aW9uO1xuICBjb25zdCBkcm9wZG93blBpbGxzID0gZHJvcGRvd25QaWxsID8gW2Ryb3Bkb3duUGlsbF0gOiBzLmFjdGlvbmFibGVTdWdnZXN0aW9ucztcbiAgcmV0dXJuIHtcbiAgICBzdWdnZXN0aW9uczogZHJvcGRvd25BY3RpdmVQaWxsID8gW3sgLi4uZHJvcGRvd25BY3RpdmVQaWxsLCBvcHRpb25zOiBzLmRyb3Bkb3duT3B0aW9ucyB9XSA6IFtdLFxuICAgIGFjdGl2ZUluZGV4OiBzLmFjdGl2ZURyb3Bkb3duSW5kZXgsXG4gICAgaXNPcGVuOiBzLmlzRHJvcGRvd25PcGVuLFxuICAgIHBpbGxzOiBkcm9wZG93blBpbGxzLFxuICAgIGlzQWN0aXZlUGlsbFNlbGVjdGVkOiBzLmlzQWN0aXZlUGlsbFNlbGVjdGVkLFxuICAgIGlzTG9hZGluZzogY29tcHV0ZVVpTG9hZGluZyhzKSxcbiAgICBza2VsZXRvbkV4aXRpbmc6IHMuc2tlbGV0b25FeGl0aW5nLFxuICAgIGlzSW5wdXRFbXB0eTogcy50ZXh0LnRyaW0oKS5sZW5ndGggPT09IDAsXG4gICAgcHJvZHVjdHM6IHMucHJvZHVjdHMsXG4gICAgaXNFZGl0aW5nOiBCb29sZWFuKGVkaXRpbmdQYXJhbSkgfHwgQm9vbGVhbihlZGl0aW5nSWRlbnRpZmllZCksXG4gICAgaW5TZWxlY3Rpb25BbmltYXRpb246IHMuaW5TZWxlY3Rpb25BbmltYXRpb24sXG4gICAgLy8gRGF0ZXBpY2tlci4gYHMuZmlsdGVyZWRPcHRpb25zYCBhYm92ZSBhbHJlYWR5IGNhcnJpZXMgdGhlIHZpc2libGVcbiAgICAvLyBtb250aCdzIGNlbGxzIHJhdGhlciB0aGFuIHRoZSBzdWdnZXN0aW9uJ3Mgb3duIG9wdGlvbnMgd2hlbiB0aGlzIGlzXG4gICAgLy8gXCJkYXRlXCIg4oCUIHRoZSBjb3JlIHN3YXBwZWQgdGhlbSBpbiBpdHMgZGVyaXZlIGxheWVyLCBzbyB0aGUgZHJvcGRvd24gb25seVxuICAgIC8vIGhhcyB0byBrbm93IHdoaWNoIGJvZHkgdG8gZHJhdy5cbiAgICBmb3JtYXRUeXBlOiBzLmFjdGl2ZUZvcm1hdFR5cGUsXG4gICAgZGF0ZVZpZXc6IHMuZGF0ZVZpZXcsXG4gICAgc2VsZWN0ZWREYXRlSXNvOiBkYXRlU2VsZWN0aW9uLnNlbGVjdGVkSXNvLFxuICAgIHNlbGVjdGVkRGF0ZVJhbmdlOiBkYXRlU2VsZWN0aW9uLnNlbGVjdGVkUmFuZ2UsXG4gICAgZGF0ZVJhbmdlU3RhcnQ6IGRhdGVTZWxlY3Rpb24ucmFuZ2VTdGFydCxcbiAgICBvcHRpb25zUG9zaXRpb24sXG4gIH07XG59XG4iXX0=