carbon-components-angular 5.32.0 → 5.33.0

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.
Files changed (29) hide show
  1. package/combobox/combobox.component.d.ts +5 -1
  2. package/docs/documentation/components/ComboBox.html +179 -136
  3. package/docs/documentation/coverage.html +1 -1
  4. package/docs/documentation/js/search/search_index.js +2 -2
  5. package/docs/documentation/modules/ToggleModule/dependencies.svg +42 -46
  6. package/docs/documentation/modules/ToggleModule.html +42 -46
  7. package/docs/documentation/modules/ToggletipModule/dependencies.svg +39 -39
  8. package/docs/documentation/modules/ToggletipModule.html +39 -39
  9. package/docs/documentation/modules/TooltipModule/dependencies.svg +4 -4
  10. package/docs/documentation/modules/TooltipModule.html +4 -4
  11. package/docs/documentation/modules/TreeviewModule/dependencies.svg +37 -37
  12. package/docs/documentation/modules/TreeviewModule.html +37 -37
  13. package/docs/documentation/modules/UIShellModule/dependencies.svg +4 -4
  14. package/docs/documentation/modules/UIShellModule.html +4 -4
  15. package/docs/documentation.json +115 -104
  16. package/docs/storybook/combobox-combobox-stories.3bbada2d.iframe.bundle.js +1 -0
  17. package/docs/storybook/iframe.html +2 -2
  18. package/docs/storybook/main.f6f7b65b.iframe.bundle.js +1 -0
  19. package/docs/storybook/{patterns-forms-multi-step-form-stories.89086fc2.iframe.bundle.js → patterns-forms-multi-step-form-stories.22da53c6.iframe.bundle.js} +1 -1
  20. package/docs/storybook/project.json +1 -1
  21. package/docs/storybook/{runtime~main.6c556d33.iframe.bundle.js → runtime~main.b455b6c9.iframe.bundle.js} +1 -1
  22. package/esm2020/combobox/combobox.component.mjs +18 -8
  23. package/fesm2015/carbon-components-angular-combobox.mjs +17 -7
  24. package/fesm2015/carbon-components-angular-combobox.mjs.map +1 -1
  25. package/fesm2020/carbon-components-angular-combobox.mjs +17 -7
  26. package/fesm2020/carbon-components-angular-combobox.mjs.map +1 -1
  27. package/package.json +1 -1
  28. package/docs/storybook/combobox-combobox-stories.57374785.iframe.bundle.js +0 -1
  29. package/docs/storybook/main.84a378b3.iframe.bundle.js +0 -1
@@ -105,6 +105,10 @@ export class ComboBox {
105
105
  * Set to `true` to disable combobox.
106
106
  */
107
107
  this.disabled = false;
108
+ /**
109
+ * Set to `true` for readonly state.
110
+ */
111
+ this.readonly = false;
108
112
  /**
109
113
  * Emits a ListItem
110
114
  *
@@ -461,7 +465,7 @@ export class ComboBox {
461
465
  * Opens the dropdown.
462
466
  */
463
467
  openDropdown() {
464
- if (this.disabled) {
468
+ if (this.disabled || this.readonly) {
465
469
  return;
466
470
  }
467
471
  this.open = true;
@@ -538,7 +542,7 @@ export class ComboBox {
538
542
  clearInput(event) {
539
543
  event.stopPropagation();
540
544
  event.preventDefault();
541
- if (this.disabled) {
545
+ if (this.disabled || this.readonly) {
542
546
  return;
543
547
  }
544
548
  if (this.type === "single") { // don't want to clear selected or close if multi
@@ -639,7 +643,7 @@ export class ComboBox {
639
643
  }
640
644
  ComboBox.comboBoxCount = 0;
641
645
  ComboBox.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ComboBox, deps: [{ token: i0.ElementRef }, { token: i1.DropdownService }, { token: i2.I18n }], target: i0.ɵɵFactoryTarget.Component });
642
- ComboBox.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: ComboBox, selector: "cds-combo-box, ibm-combo-box", inputs: { placeholder: "placeholder", openMenuAria: "openMenuAria", closeMenuAria: "closeMenuAria", clearSelectionsTitle: "clearSelectionsTitle", clearSelectionsAria: "clearSelectionsAria", clearSelectionTitle: "clearSelectionTitle", clearSelectionAria: "clearSelectionAria", id: "id", labelId: "labelId", items: "items", type: "type", size: "size", itemValueKey: "itemValueKey", label: "label", hideLabel: "hideLabel", helperText: "helperText", appendInline: "appendInline", invalid: "invalid", invalidText: "invalidText", warn: "warn", warnText: "warnText", maxLength: "maxLength", theme: "theme", selectionFeedback: "selectionFeedback", autocomplete: "autocomplete", dropUp: "dropUp", disabled: "disabled" }, outputs: { selected: "selected", submit: "submit", close: "close", search: "search", clear: "clear" }, host: { listeners: { "keydown": "hostkeys($event)" }, properties: { "class.cds--list-box__wrapper": "this.hostClass", "style.display": "this.display" } }, providers: [
646
+ ComboBox.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: ComboBox, selector: "cds-combo-box, ibm-combo-box", inputs: { placeholder: "placeholder", openMenuAria: "openMenuAria", closeMenuAria: "closeMenuAria", clearSelectionsTitle: "clearSelectionsTitle", clearSelectionsAria: "clearSelectionsAria", clearSelectionTitle: "clearSelectionTitle", clearSelectionAria: "clearSelectionAria", id: "id", labelId: "labelId", items: "items", type: "type", size: "size", itemValueKey: "itemValueKey", label: "label", hideLabel: "hideLabel", helperText: "helperText", appendInline: "appendInline", invalid: "invalid", invalidText: "invalidText", warn: "warn", warnText: "warnText", maxLength: "maxLength", theme: "theme", selectionFeedback: "selectionFeedback", autocomplete: "autocomplete", dropUp: "dropUp", disabled: "disabled", readonly: "readonly" }, outputs: { selected: "selected", submit: "submit", close: "close", search: "search", clear: "clear" }, host: { listeners: { "keydown": "hostkeys($event)" }, properties: { "class.cds--list-box__wrapper": "this.hostClass", "style.display": "this.display" } }, providers: [
643
647
  {
644
648
  provide: NG_VALUE_ACCESSOR,
645
649
  useExisting: ComboBox,
@@ -669,6 +673,7 @@ ComboBox.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.
669
673
  'cds--list-box--md': size === 'md',
670
674
  'cds--list-box--lg': size === 'lg',
671
675
  'cds--list-box--disabled': disabled,
676
+ 'cds--combo-box--readonly': readonly,
672
677
  'cds--combo-box--warning cds--list-box--warning': warn
673
678
  }"
674
679
  class="cds--list-box cds--combo-box"
@@ -680,7 +685,7 @@ ComboBox.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.
680
685
  <div
681
686
  *ngIf="type === 'multi' && pills.length > 0"
682
687
  class="cds--tag cds--tag--filter cds--tag--high-contrast"
683
- [ngClass]="{'cds--tag--disabled': disabled}">
688
+ [ngClass]="{'cds--tag--disabled': disabled || readonly}">
684
689
  <span class="cds--tag__label">{{ pills.length }}</span>
685
690
  <button
686
691
  type="button"
@@ -690,7 +695,7 @@ ComboBox.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.
690
695
  class="cds--tag__close-icon"
691
696
  tabindex="0"
692
697
  [title]="clearSelectionsTitle"
693
- [disabled]="disabled"
698
+ [disabled]="disabled || readonly"
694
699
  [attr.aria-label]="clearSelectionAria">
695
700
  <svg
696
701
  focusable="false"
@@ -712,6 +717,7 @@ ComboBox.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.
712
717
  autocomplete="off"
713
718
  role="combobox"
714
719
  [disabled]="disabled"
720
+ [readOnly]="readonly"
715
721
  (input)="onSearch($event.target.value)"
716
722
  (blur)="onBlur()"
717
723
  (keydown.enter)="onSubmit($event)"
@@ -815,6 +821,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
815
821
  'cds--list-box--md': size === 'md',
816
822
  'cds--list-box--lg': size === 'lg',
817
823
  'cds--list-box--disabled': disabled,
824
+ 'cds--combo-box--readonly': readonly,
818
825
  'cds--combo-box--warning cds--list-box--warning': warn
819
826
  }"
820
827
  class="cds--list-box cds--combo-box"
@@ -826,7 +833,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
826
833
  <div
827
834
  *ngIf="type === 'multi' && pills.length > 0"
828
835
  class="cds--tag cds--tag--filter cds--tag--high-contrast"
829
- [ngClass]="{'cds--tag--disabled': disabled}">
836
+ [ngClass]="{'cds--tag--disabled': disabled || readonly}">
830
837
  <span class="cds--tag__label">{{ pills.length }}</span>
831
838
  <button
832
839
  type="button"
@@ -836,7 +843,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
836
843
  class="cds--tag__close-icon"
837
844
  tabindex="0"
838
845
  [title]="clearSelectionsTitle"
839
- [disabled]="disabled"
846
+ [disabled]="disabled || readonly"
840
847
  [attr.aria-label]="clearSelectionAria">
841
848
  <svg
842
849
  focusable="false"
@@ -858,6 +865,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
858
865
  autocomplete="off"
859
866
  role="combobox"
860
867
  [disabled]="disabled"
868
+ [readOnly]="readonly"
861
869
  (input)="onSearch($event.target.value)"
862
870
  (blur)="onBlur()"
863
871
  (keydown.enter)="onSubmit($event)"
@@ -995,6 +1003,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
995
1003
  type: Input
996
1004
  }], disabled: [{
997
1005
  type: Input
1006
+ }], readonly: [{
1007
+ type: Input
998
1008
  }], selected: [{
999
1009
  type: Output
1000
1010
  }], submit: [{
@@ -1027,4 +1037,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
1027
1037
  type: HostListener,
1028
1038
  args: ["keydown", ["$event"]]
1029
1039
  }] } });
1030
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tYm9ib3guY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvbWJvYm94L2NvbWJvYm94LmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ04sU0FBUyxFQUVULFlBQVksRUFDWixLQUFLLEVBQ0wsTUFBTSxFQUNOLFlBQVksRUFFWixTQUFTLEVBQ1QsWUFBWSxFQUdaLFdBQVcsRUFDWCxXQUFXLEVBRVgsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLG9CQUFvQixFQUFtQixNQUFNLG9DQUFvQyxDQUFDO0FBRTNGLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QyxPQUFPLEVBQ04sb0JBQW9CLEVBQ3BCLG9CQUFvQixFQUNwQixNQUFNLGlDQUFpQyxDQUFDOzs7Ozs7QUFJekM7Ozs7Ozs7Ozs7O0dBV0c7QUF5SkgsTUFBTSxPQUFPLFFBQVE7SUFxUXBCOztPQUVHO0lBQ0gsWUFDVyxVQUFzQixFQUN0QixlQUFnQyxFQUNoQyxJQUFVO1FBRlYsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQUN0QixvQkFBZSxHQUFmLGVBQWUsQ0FBaUI7UUFDaEMsU0FBSSxHQUFKLElBQUksQ0FBTTtRQW5NWixPQUFFLEdBQUcsWUFBWSxRQUFRLENBQUMsYUFBYSxFQUFFLEVBQUUsQ0FBQztRQUM1QyxZQUFPLEdBQUcsa0JBQWtCLFFBQVEsQ0FBQyxhQUFhLEVBQUUsRUFBRSxDQUFDO1FBQ2hFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O1dBeUJHO1FBQ00sVUFBSyxHQUFvQixFQUFFLENBQUM7UUFDckM7O1dBRUc7UUFDTSxTQUFJLEdBQXVCLFFBQVEsQ0FBQztRQUM3Qzs7V0FFRztRQUNNLFNBQUksR0FBdUIsSUFBSSxDQUFDO1FBU3pDOztXQUVHO1FBQ00sY0FBUyxHQUFH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QWYsTUFBTTtnQkFTRyxLQUFLO3NCQUFkLE1BQU07Z0JBRUcsTUFBTTtzQkFBZixNQUFNO2dCQUVHLEtBQUs7c0JBQWQsTUFBTTtnQkFFK0MsSUFBSTtzQkFBekQsWUFBWTt1QkFBQyxvQkFBb0IsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBQ3pCLFlBQVk7c0JBQXRDLFNBQVM7dUJBQUMsY0FBYztnQkFDYSxLQUFLO3NCQUExQyxTQUFTO3VCQUFDLE9BQU8sRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBQ0ksT0FBTztzQkFBOUMsU0FBUzt1QkFBQyxTQUFTLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQUNPLFNBQVM7c0JBQXJELFdBQVc7dUJBQUMsOEJBQThCO2dCQUNiLE9BQU87c0JBQXBDLFdBQVc7dUJBQUMsZUFBZTtnQkF1SjVCLFFBQVE7c0JBRFAsWUFBWTt1QkFBQyxTQUFTLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuXHRDb21wb25lbnQsXG5cdE9uQ2hhbmdlcyxcblx0Q29udGVudENoaWxkLFxuXHRJbnB1dCxcblx0T3V0cHV0LFxuXHRIb3N0TGlzdGVuZXIsXG5cdEVsZW1lbnRSZWYsXG5cdFZpZXdDaGlsZCxcblx0RXZlbnRFbWl0dGVyLFxuXHRBZnRlclZpZXdJbml0LFxuXHRBZnRlckNvbnRlbnRJbml0LFxuXHRIb3N0QmluZGluZyxcblx0VGVtcGxhdGVSZWYsXG5cdE9uRGVzdHJveVxufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgQWJzdHJhY3REcm9wZG93blZpZXcsIERyb3Bkb3duU2VydmljZSB9IGZyb20gXCJjYXJib24tY29tcG9uZW50cy1hbmd1bGFyL2Ryb3Bkb3duXCI7XG5pbXBvcnQgeyBMaXN0SXRlbSB9IGZyb20gXCJjYXJib24tY29tcG9uZW50cy1hbmd1bGFyL2Ryb3Bkb3duXCI7XG5pbXBvcnQgeyBOR19WQUxVRV9BQ0NFU1NPUiB9IGZyb20gXCJAYW5ndWxhci9mb3Jtc1wiO1xuaW1wb3J0IHsgZmlsdGVyIH0gZnJvbSBcInJ4anMvb3BlcmF0b3JzXCI7XG5pbXBvcnQge1xuXHRnZXRTY3JvbGxhYmxlUGFyZW50cyxcblx0aGFzU2Nyb2xsYWJsZVBhcmVudHNcbn0gZnJvbSBcImNhcmJvbi1jb21wb25lbnRzLWFuZ3VsYXIvdXRpbHNcIjtcbmltcG9ydCB7IEkxOG4sIE92ZXJyaWRhYmxlIH0gZnJvbSBcImNhcmJvbi1jb21wb25lbnRzLWFuZ3VsYXIvaTE4blwiO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gXCJyeGpzXCI7XG5cbi8qKlxuICogR2V0IHN0YXJ0ZWQgd2l0aCBpbXBvcnRpbmcgdGhlIG1vZHVsZTpcbiAqXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBpbXBvcnQgeyBDb21ib0JveE1vZHVsZSB9IGZyb20gJ2NhcmJvbi1jb21wb25lbnRzLWFuZ3VsYXInO1xuICogYGBgXG4gKlxuICogQ29tYm9Cb3hlcyBhcmUgc2ltaWxhciB0byBkcm9wZG93bnMsIGV4Y2VwdCBhIGNvbWJvYm94IHByb3ZpZGVzIGFuIGlucHV0IGZpZWxkIGZvciB1c2VycyB0byBzZWFyY2ggaXRlbXMgYW5kIChvcHRpb25hbGx5KSBhZGQgdGhlaXIgb3duLlxuICogTXVsdGktc2VsZWN0IGNvbWJvYm94ZXMgYWxzbyBwcm92aWRlIFwicGlsbHNcIiBvZiBzZWxlY3RlZCBpdGVtcy5cbiAqXG4gKiBbU2VlIGRlbW9dKC4uLy4uLz9wYXRoPS9zdG9yeS9jb21wb25lbnRzLWNvbWJvYm94LS1iYXNpYylcbiAqL1xuQENvbXBvbmVudCh7XG5cdHNlbGVjdG9yOiBcImNkcy1jb21iby1ib3gsIGlibS1jb21iby1ib3hcIixcblx0dGVtcGxhdGU6IGBcblx0XHQ8ZGl2IGNsYXNzPVwiY2RzLS1saXN0LWJveF9fd3JhcHBlclwiPlxuXHRcdFx0PGxhYmVsXG5cdFx0XHRcdCpuZ0lmPVwibGFiZWxcIlxuXHRcdFx0XHRbZm9yXT1cImlkXCJcblx0XHRcdFx0W2lkXT1cImxhYmVsSWRcIlxuXHRcdFx0XHRjbGFzcz1cImNkcy0tbGFiZWxcIlxuXHRcdFx0XHRbbmdDbGFzc109XCJ7XG5cdFx0XHRcdFx0J2Nkcy0tbGFiZWwtLWRpc2FibGVkJzogZGlzYWJsZWQsXG5cdFx0XHRcdFx0J2Nkcy0tdmlzdWFsbHktaGlkZGVuJzogaGlkZUxhYmVsXG5cdFx0XHRcdH1cIj5cblx0XHRcdFx0PG5nLWNvbnRhaW5lciAqbmdJZj1cIiFpc1RlbXBsYXRlKGxhYmVsKVwiPnt7bGFiZWx9fTwvbmctY29udGFpbmVyPlxuXHRcdFx0XHQ8bmctdGVtcGxhdGUgKm5nSWY9XCJpc1RlbXBsYXRlKGxhYmVsKVwiIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImxhYmVsXCI+PC9uZy10ZW1wbGF0ZT5cblx0XHRcdDwvbGFiZWw+XG5cdFx0XHQ8ZGl2XG5cdFx0XHRcdCNsaXN0Ym94XG5cdFx0XHRcdFtuZ0NsYXNzXT1cIntcblx0XHRcdFx0XHQnY2RzLS1tdWx0aS1zZWxlY3QgY2RzLS1tdWx0aS1zZWxlY3QtLWZpbHRlcmFibGUnOiB0eXBlID09PSAnbXVsdGknLFxuXHRcdFx0XHRcdCdjZHMtLWxpc3QtYm94LS1saWdodCc6IHRoZW1lID09PSAnbGlnaHQnLFxuXHRcdFx0XHRcdCdjZHMtLWxpc3QtYm94LS1leHBhbmRlZCc6IG9wZW4sXG5cdFx0XHRcdFx0J2Nkcy0tbGlzdC1ib3gtLXNtJzogc2l6ZSA9PT0gJ3NtJyxcblx0XHRcdFx0XHQnY2RzLS1saXN0LWJveC0tbWQnOiBzaXplID09PSAnbWQnLFxuXHRcdFx0XHRcdCdjZHMtLWxpc3QtYm94LS1sZyc6IHNpemUgPT09ICdsZycsXG5cdFx0XHRcdFx0J2Nkcy0tbGlzdC1ib3gtLWRpc2FibGVkJzogZGlzYWJsZWQsXG5cdFx0XHRcdFx0J2Nkcy0tY29tYm8tYm94LS13YXJuaW5nIGNkcy0tbGlzdC1ib3gtLXdhcm5pbmcnOiB3YXJuXG5cdFx0XHRcdH1cIlxuXHRcdFx0XHRjbGFzcz1cImNkcy0tbGlzdC1ib3ggY2RzLS1jb21iby1ib3hcIlxuXHRcdFx0XHRbYXR0ci5kYXRhLWludmFsaWRdPVwiKGludmFsaWQgPyB0cnVlIDogbnVsbClcIj5cblx0XHRcdFx0PGRpdlxuXHRcdFx0XHRcdGNsYXNzPVwiY2RzLS1saXN0LWJveF9fZmllbGRcIlxuXHRcdFx0XHRcdChjbGljayk9XCJ0b2dnbGVEcm9wZG93bigpXCJcblx0XHRcdFx0XHQoYmx1cik9XCJvbkJsdXIoKVwiPlxuXHRcdFx0XHRcdDxkaXZcblx0XHRcdFx0XHRcdCpuZ0lmPVwidHlwZSA9PT0gJ211bHRpJyAmJiBwaWxscy5sZW5ndGggPiAwXCJcblx0XHRcdFx0XHRcdGNsYXNzPVwiY2RzLS10YWcgY2RzLS10YWctLWZpbHRlciBjZHMtLXRhZy0taGlnaC1jb250cmFzdFwiXG5cdFx0XHRcdFx0XHRbbmdDbGFzc109XCJ7J2Nkcy0tdGFnLS1kaXNhYmxlZCc6IGRpc2FibGVkfVwiPlxuXHRcdFx0XHRcdFx0PHNwYW4gY2xhc3M9XCJjZHMtLXRhZ19fbGFiZWxcIj57eyBwaWxscy5sZW5ndGggfX08L3NwYW4+XG5cdFx0XHRcdFx0XHQ8YnV0dG9uXG5cdFx0XHRcdFx0XHRcdHR5cGU9XCJidXR0b25cIlxuXHRcdFx0XHRcdFx0XHQoY2xpY2spPVwiY2xlYXJTZWxlY3RlZCgkZXZlbnQpXCJcblx0XHRcdFx0XHRcdFx0KGJsdXIpPVwib25CbHVyKClcIlxuXHRcdFx0XHRcdFx0XHQoa2V5ZG93bi5lbnRlcik9XCJjbGVhclNlbGVjdGVkKCRldmVudClcIlxuXHRcdFx0XHRcdFx0XHRjbGFzcz1cImNkcy0tdGFnX19jbG9zZS1pY29uXCJcblx0XHRcdFx0XHRcdFx0dGFiaW5kZXg9XCIwXCJcblx0XHRcdFx0XHRcdFx0W3RpdGxlXT1cImNsZWFyU2VsZWN0aW9uc1RpdGxlXCJcblx0XHRcdFx0XHRcdFx0W2Rpc2FibGVkXT1cImRpc2FibGVkXCJcblx0XHRcdFx0XHRcdFx0W2F0dHIuYXJpYS1sYWJlbF09XCJjbGVhclNlbGVjdGlvbkFyaWFcIj5cblx0XHRcdFx0XHRcdFx0PHN2Z1xuXHRcdFx0XHRcdFx0XHRcdGZvY3VzYWJsZT1cImZhbHNlXCJcblx0XHRcdFx0XHRcdFx0XHRwcmVzZXJ2ZUFzcGVjdFJhdGlvPVwieE1pZFlNaWQgbWVldFwiXG5cdFx0XHRcdFx0XHRcdFx0c3R5bGU9XCJ3aWxsLWNoYW5nZTogdHJhbnNmb3JtO1wiXG5cdFx0XHRcdFx0XHRcdFx0cm9sZT1cImltZ1wiXG5cdFx0XHRcdFx0XHRcdFx0eG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiXG5cdFx0XHRcdFx0XHRcdFx0d2lkdGg9XCIxNlwiXG5cdFx0XHRcdFx0XHRcdFx0aGVpZ2h0PVwiMTZcIlxuXHRcdFx0XHRcdFx0XHRcdHZpZXdCb3g9XCIwIDAgMTYgMTZcIlxuXHRcdFx0XHRcdFx0XHRcdGFyaWEtaGlkZGVuPVwidHJ1ZVwiPlxuXHRcdFx0XHRcdFx0XHRcdDxwYXRoIGQ9XCJNMTIgNC43bC0uNy0uN0w4IDcuMyA0LjcgNGwtLjcuN0w3LjMgOCA0IDExLjNsLjcuN0w4IDguN2wzLjMgMy4zLjctLjdMOC43IDh6XCI+PC9wYXRoPlxuXHRcdFx0XHRcdFx0XHQ8L3N2Zz5cblx0XHRcdFx0XHRcdDwvYnV0dG9uPlxuXHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdDxpbnB1dFxuXHRcdFx0XHRcdFx0I2lucHV0XG5cdFx0XHRcdFx0XHR0eXBlPVwidGV4dFwiXG5cdFx0XHRcdFx0XHRhdXRvY29tcGxldGU9XCJvZmZcIlxuXHRcdFx0XHRcdFx0cm9sZT1cImNvbWJvYm94XCJcblx0XHRcdFx0XHRcdFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG5cdFx0XHRcdFx0XHQoaW5wdXQpPVwib25TZWFyY2goJGV2ZW50LnRhcmdldC52YWx1ZSlcIlxuXHRcdFx0XHRcdFx0KGJsdXIpPVwib25CbHVyKClcIlxuXHRcdFx0XHRcdFx0KGtleWRvd24uZW50ZXIpPVwib25TdWJtaXQoJGV2ZW50KVwiXG5cdFx0XHRcdFx0XHRbdmFsdWVdPVwic2VsZWN0ZWRWYWx1ZVwiXG5cdFx0XHRcdFx0XHRjbGFzcz1cImNkcy0tdGV4dC1pbnB1dFwiXG5cdFx0XHRcdFx0XHRbbmdDbGFzc109XCJ7J2Nkcy0tdGV4dC1pbnB1dC0tZW1wdHknOiAhc2hvd0NsZWFyQnV0dG9ufVwiXG5cdFx0XHRcdFx0XHR0YWJpbmRleD1cIjBcIlxuXHRcdFx0XHRcdFx0W2lkXT1cImlkXCJcblx0XHRcdFx0XHRcdFthdHRyLmFyaWEtbGFiZWxsZWRieV09XCJsYWJlbElkXCJcblx0XHRcdFx0XHRcdFthdHRyLmFyaWEtZXhwYW5kZWRdPVwib3BlblwiXG5cdFx0XHRcdFx0XHRhcmlhLWhhc3BvcHVwPVwibGlzdGJveFwiXG5cdFx0XHRcdFx0XHRbYXR0ci5tYXhsZW5ndGhdPVwibWF4TGVuZ3RoXCJcblx0XHRcdFx0XHRcdFthdHRyLmFyaWEtY29udHJvbHNdPVwib3BlbiA/IHZpZXc/Lmxpc3RJZCA6IG51bGxcIlxuXHRcdFx0XHRcdFx0W2F0dHIuYXJpYS1hdXRvY29tcGxldGVdPVwiYXV0b2NvbXBsZXRlXCJcblx0XHRcdFx0XHRcdFtwbGFjZWhvbGRlcl09XCJwbGFjZWhvbGRlclwiLz5cblx0XHRcdFx0XHQ8c3ZnXG5cdFx0XHRcdFx0XHQqbmdJZj1cImludmFsaWRcIlxuXHRcdFx0XHRcdFx0Y2RzSWNvbj1cIndhcm5pbmctLWZpbGxlZFwiXG5cdFx0XHRcdFx0XHRzaXplPVwiMTZcIlxuXHRcdFx0XHRcdFx0Y2xhc3M9XCJjZHMtLWxpc3QtYm94X19pbnZhbGlkLWljb25cIj5cblx0XHRcdFx0XHQ8L3N2Zz5cblx0XHRcdFx0XHQ8c3ZnXG5cdFx0XHRcdFx0XHQqbmdJZj1cIiFpbnZhbGlkICYmIHdhcm5cIlxuXHRcdFx0XHRcdFx0Y2RzSWNvbj1cIndhcm5pbmctLWFsdC0tZmlsbGVkXCJcblx0XHRcdFx0XHRcdHNpemU9XCIxNlwiXG5cdFx0XHRcdFx0XHRjbGFzcz1cImNkcy0tbGlzdC1ib3hfX2ludmFsaWQtaWNvbiBjZHMtLWxpc3QtYm94X19pbnZhbGlkLWljb24tLXdhcm5pbmdcIj5cblx0XHRcdFx0XHQ8L3N2Zz5cblx0XHRcdFx0XHQ8ZGl2XG5cdFx0XHRcdFx0XHQqbmdJZj1cInNob3dDbGVhckJ1dHRvblwiXG5cdFx0XHRcdFx0XHRyb2xlPVwiYnV0dG9uXCJcblx0XHRcdFx0XHRcdGNsYXNzPVwiY2RzLS1saXN0LWJveF9fc2VsZWN0aW9uXCJcblx0XHRcdFx0XHRcdHRhYmluZGV4PVwiMFwiXG5cdFx0XHRcdFx0XHRbYXR0ci5hcmlhLWxhYmVsXT1cImNsZWFyU2VsZWN0aW9uQXJpYVwiXG5cdFx0XHRcdFx0XHRbdGl0bGVdPVwiY2xlYXJTZWxlY3Rpb25UaXRsZVwiXG5cdFx0XHRcdFx0XHQoa2V5dXAuZW50ZXIpPVwiY2xlYXJJbnB1dCgkZXZlbnQpXCJcblx0XHRcdFx0XHRcdChjbGljayk9XCJjbGVhcklucHV0KCRldmVudClcIlxuXHRcdFx0XHRcdFx0KGJsdXIpPVwib25CbHVyKClcIj5cblx0XHRcdFx0XHRcdDxzdmcgY2RzSWNvbj1cImNsb3NlXCIgc2l6ZT1cIjE2XCI+PC9zdmc+XG5cdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0PGJ1dHRvblxuXHRcdFx0XHRcdFx0dHlwZT1cImJ1dHRvblwiXG5cdFx0XHRcdFx0XHRyb2xlPVwiYnV0dG9uXCJcblx0XHRcdFx0XHRcdGNsYXNzPVwiY2RzLS1saXN0LWJveF9fbWVudS1pY29uXCJcblx0XHRcdFx0XHRcdHRhYmluZGV4PVwiLTFcIlxuXHRcdFx0XHRcdFx0W3RpdGxlXT1cIm9wZW4gPyBjbG9zZU1lbnVBcmlhIDogb3Blbk1lbnVBcmlhXCJcblx0XHRcdFx0XHRcdFthdHRyLmFyaWEtbGFiZWxdPVwib3BlbiA/IGNsb3NlTWVudUFyaWEgOiBvcGVuTWVudUFyaWFcIlxuXHRcdFx0XHRcdFx0W25nQ2xhc3NdPVwieydjZHMtLWxpc3QtYm94X19tZW51LWljb24tLW9wZW4nOiBvcGVufVwiPlxuXHRcdFx0XHRcdFx0PHN2ZyBjZHNJY29uPVwiY2hldnJvbi0tZG93blwiIHNpemU9XCIxNlwiPjwvc3ZnPlxuXHRcdFx0XHRcdDwvYnV0dG9uPlxuXHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0PGRpdlxuXHRcdFx0XHRcdCNkcm9wZG93bk1lbnVcblx0XHRcdFx0XHRbbmdDbGFzc109XCJ7XG5cdFx0XHRcdFx0XHQnY2RzLS1saXN0LWJveC0tdXAnOiB0aGlzLmRyb3BVcCAhPT0gbnVsbCAmJiB0aGlzLmRyb3BVcCAhPT0gdW5kZWZpbmVkID8gZHJvcFVwIDogX2Ryb3BVcFxuXHRcdFx0XHRcdH1cIj5cblx0XHRcdFx0XHQ8bmctY29udGVudCAqbmdJZj1cIm9wZW5cIj48L25nLWNvbnRlbnQ+XG5cdFx0XHRcdDwvZGl2PlxuXHRcdFx0PC9kaXY+XG5cdFx0XHQ8ZGl2XG5cdFx0XHRcdCpuZ0lmPVwiaGVscGVyVGV4dCAmJiAhaW52YWxpZCAmJiAhd2FyblwiXG5cdFx0XHRcdGNsYXNzPVwiY2RzLS1mb3JtX19oZWxwZXItdGV4dFwiXG5cdFx0XHRcdFtuZ0NsYXNzXT1cInsnY2RzLS1mb3JtX19oZWxwZXItdGV4dC0tZGlzYWJsZWQnOiBkaXNhYmxlZH1cIj5cblx0XHRcdFx0PG5nLWNvbnRhaW5lciAqbmdJZj1cIiFpc1RlbXBsYXRlKGhlbHBlclRleHQpXCI+e3toZWxwZXJUZXh0fX08L25nLWNvbnRhaW5lcj5cblx0XHRcdFx0PG5nLXRlbXBsYXRlICpuZ0lmPVwiaXNUZW1wbGF0ZShoZWxwZXJUZXh0KVwiIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImhlbHBlclRleHRcIj48L25nLXRlbXBsYXRlPlxuXHRcdFx0PC9kaXY+XG5cdFx0XHQ8ZGl2ICpuZ0lmPVwiaW52YWxpZFwiIGNsYXNzPVwiY2RzLS1mb3JtLXJlcXVpcmVtZW50XCI+XG5cdFx0XHRcdDxuZy1jb250YWluZXIgKm5nSWY9XCIhaXNUZW1wbGF0ZShpbnZhbGlkVGV4dClcIj57eyBpbnZhbGlkVGV4dCB9fTwvbmctY29udGFpbmVyPlxuXHRcdFx0XHQ8bmctdGVtcGxhdGUgKm5nSWY9XCJpc1RlbXBsYXRlKGludmFsaWRUZXh0KVwiIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImludmFsaWRUZXh0XCI+PC9uZy10ZW1wbGF0ZT5cblx0XHRcdDwvZGl2PlxuXHRcdFx0PGRpdiAqbmdJZj1cIiFpbnZhbGlkICYmIHdhcm5cIiBjbGFzcz1cImNkcy0tZm9ybS1yZXF1aXJlbWVudFwiPlxuXHRcdFx0XHQ8bmctY29udGFpbmVyICpuZ0lmPVwiIWlzVGVtcGxhdGUod2FyblRleHQpXCI+e3t3YXJuVGV4dH19PC9uZy1jb250YWluZXI+XG5cdFx0XHRcdDxuZy10ZW1wbGF0ZSAqbmdJZj1cImlzVGVtcGxhdGUod2FyblRleHQpXCIgW25nVGVtcGxhdGVPdXRsZXRdPVwid2FyblRleHRcIj48L25nLXRlbXBsYXRlPlxuXHRcdFx0PC9kaXY+XG5cdFx0PC9kaXY+XG5cdGAsXG5cdHByb3ZpZGVyczogW1xuXHRcdHtcblx0XHRcdHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuXHRcdFx0dXNlRXhpc3Rpbmc6IENvbWJvQm94LFxuXHRcdFx0bXVsdGk6IHRydWVcblx0XHR9XG5cdF1cbn0pXG5leHBvcnQgY2xhc3MgQ29tYm9Cb3ggaW1wbGVtZW50cyBPbkNoYW5nZXMsIEFmdGVyVmlld0luaXQsIEFmdGVyQ29udGVudEluaXQsIE9uRGVzdHJveSB7XG5cdC8qKlxuXHQgKiBUZXh0IHRvIHNob3cgd2hlbiBub3RoaW5nIGlzIHNlbGVjdGVkLlxuXHQgKi9cblx0QElucHV0KCkgc2V0IHBsYWNlaG9sZGVyKHZhbHVlOiBzdHJpbmcgfCBPYnNlcnZhYmxlPHN0cmluZz4pIHtcblx0XHR0aGlzLl9wbGFjZWhvbGRlci5vdmVycmlkZSh2YWx1ZSk7XG5cdH1cblxuXHRnZXQgcGxhY2Vob2xkZXIoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX3BsYWNlaG9sZGVyLnZhbHVlO1xuXHR9XG5cdC8qKlxuXHQgKiBWYWx1ZSB0byBkaXNwbGF5IGZvciBhY2Nlc3NpYmlsaXR5IHB1cnBvc2VzIG9uIHRoZSBjb21ib2JveCBjb250cm9sIG1lbnUgd2hlbiBjbG9zZWRcblx0ICovXG5cdEBJbnB1dCgpIHNldCBvcGVuTWVudUFyaWEodmFsdWU6IHN0cmluZyB8IE9ic2VydmFibGU8c3RyaW5nPikge1xuXHRcdHRoaXMuX29wZW5NZW51QXJpYS5vdmVycmlkZSh2YWx1ZSk7XG5cdH1cblxuXHRnZXQgb3Blbk1lbnVBcmlhKCkge1xuXHRcdHJldHVybiB0aGlzLl9vcGVuTWVudUFyaWEudmFsdWU7XG5cdH1cblx0LyoqXG5cdCAqIFZhbHVlIHRvIGRpc3BsYXkgZm9yIGFjY2Vzc2liaWxpdHkgcHVycG9zZXMgb24gdGhlIGNvbWJvYm94IGNvbnRyb2wgbWVudSB3aGVuIG9wZW5lZFxuXHQgKi9cblx0QElucHV0KCkgc2V0IGNsb3NlTWVudUFyaWEodmFsdWU6IHN0cmluZyB8IE9ic2VydmFibGU8c3RyaW5nPikge1xuXHRcdHRoaXMuX2Nsb3NlTWVudUFyaWEub3ZlcnJpZGUodmFsdWUpO1xuXHR9XG5cblx0Z2V0IGNsb3NlTWVudUFyaWEoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX2Nsb3NlTWVudUFyaWEudmFsdWU7XG5cdH1cblx0LyoqXG5cdCAqIFZhbHVlIHRvIGRpc3BsYXkgb24gdGhlIGNsZWFyIHNlbGVjdGlvbnMgaWNvbiwgd2hlbiBtdWx0aSBpcyBzZWxlY3RlZFxuXHQgKi9cblx0QElucHV0KCkgc2V0IGNsZWFyU2VsZWN0aW9uc1RpdGxlKHZhbHVlOiBzdHJpbmcgfCBPYnNlcnZhYmxlPHN0cmluZz4pIHtcblx0XHR0aGlzLl9jbGVhclNlbGVjdGlvbnNUaXRsZS5vdmVycmlkZSh2YWx1ZSk7XG5cdH1cblxuXHRnZXQgY2xlYXJTZWxlY3Rpb25zVGl0bGUoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX2NsZWFyU2VsZWN0aW9uc1RpdGxlLnZhbHVlO1xuXHR9XG5cdC8qKlxuXHQgKiBWYWx1ZSB0byBkaXNwbGF5IGZvciBhY2Nlc3NpYmlsaXR5IHB1cnBvc2VzIHRvIGNsZWFyIHNlbGVjdGlvbnMsIHdoZW4gbXVsdGkgaXMgc2VsZWN0ZWRcblx0ICovXG5cdEBJbnB1dCgpIHNldCBjbGVhclNlbGVjdGlvbnNBcmlhKHZhbHVlOiBzdHJpbmcgfCBPYnNlcnZhYmxlPHN0cmluZz4pIHtcblx0XHR0aGlzLl9jbGVhclNlbGVjdGlvbnNBcmlhLm92ZXJyaWRlKHZhbHVlKTtcblx0fVxuXG5cdGdldCBjbGVhclNlbGVjdGlvbnNBcmlhKCkge1xuXHRcdHJldHVybiB0aGlzLl9jbGVhclNlbGVjdGlvbnNBcmlhLnZhbHVlO1xuXHR9XG5cdC8qKlxuXHQgKiBWYWx1ZSB0byBkaXNwbGF5IG9uIHRoZSBjbGVhciB0aGUgc2VsZWN0ZWQgaXRlbSBpY29uLCB3aGVuIHNpbmdsZSBpcyBzZWxlY3RlZFxuXHQgKi9cblx0QElucHV0KCkgc2V0IGNsZWFyU2VsZWN0aW9uVGl0bGUodmFsdWU6IHN0cmluZyB8IE9ic2VydmFibGU8c3RyaW5nPikge1xuXHRcdHRoaXMuX2NsZWFyU2VsZWN0aW9uVGl0bGUub3ZlcnJpZGUodmFsdWUpO1xuXHR9XG5cblx0Z2V0IGNsZWFyU2VsZWN0aW9uVGl0bGUoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX2NsZWFyU2VsZWN0aW9uVGl0bGUudmFsdWU7XG5cdH1cblx0LyoqXG5cdCAqIFZhbHVlIHRvIGRpc3BsYXkgZm9yIGFjY2Vzc2liaWxpdHkgcHVycG9zZXMgb24gdGhlIGNsZWFyIHRoZSBzZWxlY3RlZCBpdGVtIGljb24sIHdoZW4gc2luZ2xlIGlzIHNlbGVjdGVkXG5cdCAqL1xuXHRASW5wdXQoKSBzZXQgY2xlYXJTZWxlY3Rpb25BcmlhKHZhbHVlOiBzdHJpbmcgfCBPYnNlcnZhYmxlPHN0cmluZz4pIHtcblx0XHR0aGlzLl9jbGVhclNlbGVjdGlvbkFyaWEub3ZlcnJpZGUodmFsdWUpO1xuXHR9XG5cblx0Z2V0IGNsZWFyU2VsZWN0aW9uQXJpYSgpIHtcblx0XHRyZXR1cm4gdGhpcy5fY2xlYXJTZWxlY3Rpb25BcmlhLnZhbHVlO1xuXHR9XG5cdHN0YXRpYyBjb21ib0JveENvdW50ID0gMDtcblx0QElucHV0KCkgaWQgPSBgZHJvcGRvd24tJHtDb21ib0JveC5jb21ib0JveENvdW50Kyt9YDtcblx0QElucHV0KCkgbGFiZWxJZCA9IGBkcm9wZG93bi1sYWJlbC0ke0NvbWJvQm94LmNvbWJvQm94Q291bnQrK31gO1xuXHQvKipcblx0ICogTGlzdCBvZiBpdGVtcyB0byBmaWxsIHRoZSBjb250ZW50IHdpdGguXG5cdCAqXG5cdCAqICoqRXhhbXBsZToqKlxuXHQgKiBgYGBqYXZhc2NyaXB0XG5cdCAqIGl0ZW1zID0gW1xuXHQgKlx0XHR7XG5cdCAqXHRcdFx0Y29udGVudDogXCJBYmFjdXNcIixcblx0ICpcdFx0XHRzZWxlY3RlZDogZmFsc2Vcblx0ICpcdFx0fSxcblx0ICpcdFx0e1xuXHQgKlx0XHRcdGNvbnRlbnQ6IFwiQnl0ZVwiLFxuXHQgKlx0XHRcdHNlbGVjdGVkOiBmYWxzZSxcblx0ICpcdFx0fSxcblx0ICpcdFx0e1xuXHQgKlx0XHRcdGNvbnRlbnQ6IFwiQ29tcHV0ZXJcIixcblx0ICpcdFx0XHRzZWxlY3RlZDogZmFsc2Vcblx0ICpcdFx0fSxcblx0ICpcdFx0e1xuXHQgKlx0XHRcdGNvbnRlbnQ6IFwiRGlnaXRhbFwiLFxuXHQgKlx0XHRcdHNlbGVjdGVkOiBmYWxzZVxuXHQgKlx0XHR9XG5cdCAqIF07XG5cdCAqIGBgYFxuXHQgKlxuXHQgKi9cblx0QElucHV0KCkgaXRlbXM6IEFycmF5PExpc3RJdGVtPiA9IFtdO1xuXHQvKipcblx0ICogQ29tYm8gYm94IHR5cGUgKHN1cHBvcnRpbmcgc2luZ2xlIG9yIG11bHRpIHNlbGVjdGlvbiBvZiBpdGVtcykuXG5cdCAqL1xuXHRASW5wdXQoKSB0eXBlOiBcInNpbmdsZVwiIHwgXCJtdWx0aVwiID0gXCJzaW5nbGVcIjtcblx0LyoqXG5cdCAqIENvbWJvIGJveCByZW5kZXIgc2l6ZS5cblx0ICovXG5cdEBJbnB1dCgpIHNpemU6IFwic21cIiB8IFwibWRcIiB8IFwibGdcIiA9IFwibWRcIjtcblx0LyoqXG5cdCAqIFNwZWNpZmllcyB0aGUgcHJvcGVydHkgdG8gYmUgdXNlZCBhcyB0aGUgcmV0dXJuIHZhbHVlIHRvIGBuZ01vZGVsYFxuXHQgKi9cblx0QElucHV0KCkgaXRlbVZhbHVlS2V5OiBzdHJpbmc7XG5cdC8qKlxuXHQgKiBMYWJlbCBmb3IgdGhlIGNvbWJvYm94LlxuXHQgKi9cblx0QElucHV0KCkgbGFiZWw6IHN0cmluZyB8IFRlbXBsYXRlUmVmPGFueT47XG5cdC8qKlxuXHQgKiBIaWRlIGxhYmVsIHdoaWxlIGtlZXBpbmcgaXQgYWNjZXNzaWJsZSBmb3Igc2NyZWVuIHJlYWRlcnNcblx0ICovXG5cdEBJbnB1dCgpIGhpZGVMYWJlbCA9IGZhbHNlO1xuXHQvKipcblx0ICogU2V0cyB0aGUgb3B0aW9uYWwgaGVscGVyIHRleHQuXG5cdCAqL1xuXHRASW5wdXQoKSBoZWxwZXJUZXh0OiBzdHJpbmcgfCBUZW1wbGF0ZVJlZjxhbnk+O1xuXHQvKipcblx0ICogc2V0IHRvIGB0cnVlYCB0byBwbGFjZSB0aGUgZHJvcGRvd24gdmlldyBpbmxpbmUgd2l0aCB0aGUgY29tcG9uZW50XG5cdCAqL1xuXHRASW5wdXQoKSBhcHBlbmRJbmxpbmU6IGJvb2xlYW4gPSBudWxsO1xuXHQvKipcblx0ICogU2V0IHRvIGB0cnVlYCB0byBzaG93IHRoZSBpbnZhbGlkIHN0YXRlLlxuXHQgKi9cblx0QElucHV0KCkgaW52YWxpZCA9IGZhbHNlO1xuXHQvKipcblx0ICogVmFsdWUgZGlzcGxheWVkIGlmIGNvbWJvYm94IGlzIGluIGFuIGludmFsaWQgc3RhdGUuXG5cdCAqL1xuXHRASW5wdXQoKSBpbnZhbGlkVGV4dDogc3RyaW5nIHwgVGVtcGxhdGVSZWY8YW55Pjtcblx0LyoqXG5cdCogU2V0IHRvIGB0cnVlYCB0byBzaG93IGEgd2FybmluZyAoY29udGVudHMgc2V0IGJ5IHdhcm5UZXh0KVxuXHQqL1xuXHRASW5wdXQoKSB3YXJuID0gZmFsc2U7XG5cdC8qKlxuXHQgKiBTZXRzIHRoZSB3YXJuaW5nIHRleHRcblx0ICovXG5cdEBJbnB1dCgpIHdhcm5UZXh0OiBzdHJpbmcgfCBUZW1wbGF0ZVJlZjxhbnk+O1xuXHQvKipcblx0ICogTWF4IGxlbmd0aCB2YWx1ZSB0byBsaW1pdCBpbnB1dCBjaGFyYWN0ZXJzXG5cdCAqL1xuXHRASW5wdXQoKSBtYXhMZW5ndGg6IG51bWJlciA9IG51bGw7XG5cdC8qKlxuXHQgKiBAZGVwcmVjYXRlZCBzaW5jZSB2NSAtIFVzZSBgY2RzTGF5ZXJgIGRpcmVjdGl2ZSBpbnN0ZWFkXG5cdCAqL1xuXHRASW5wdXQoKSB0aGVtZTogXCJsaWdodFwiIHwgXCJkYXJrXCIgPSBcImRhcmtcIjtcblx0LyoqXG5cdCAqIFNwZWNpZnkgZmVlZGJhY2sgKG1vZGUpIG9mIHRoZSBzZWxlY3Rpb24uXG5cdCAqIGB0b3BgOiBzZWxlY3RlZCBpdGVtIGp1bXBzIHRvIHRvcFxuXHQgKiBgZml4ZWRgOiBzZWxlY3RlZCBpdGVtIHN0YXlzIGF0IGl0cyBwb3NpdGlvblxuXHQgKiBgdG9wLWFmdGVyLXJlb3BlbmA6IHNlbGVjdGVkIGl0ZW0ganVtcCB0byB0b3AgYWZ0ZXIgcmVvcGVuIGRyb3Bkb3duXG5cdCAqL1xuXHRASW5wdXQoKSBzZWxlY3Rpb25GZWVkYmFjazogXCJ0b3BcIiB8IFwiZml4ZWRcIiB8IFwidG9wLWFmdGVyLXJlb3BlblwiID0gXCJ0b3AtYWZ0ZXItcmVvcGVuXCI7XG5cdC8qKlxuXHQgKiBTcGVjaWZ5IGFyaWEtYXV0b2NvbXBsZXRlIGF0dHJpYnV0ZSBvZiB0ZXh0IGlucHV0LlxuXHQgKiBcImxpc3RcIiwgaXMgdGhlIGV4cGVjdGVkIHZhbHVlIGZvciBhIGNvbWJvYm94IHRoYXQgaW52b2tlcyBhIGRyb3AtZG93biBsaXN0XG5cdCAqL1xuXHRASW5wdXQoKSBhdXRvY29tcGxldGUgPSBcImxpc3RcIjtcblx0LyoqXG5cdCAqIE92ZXJyaWRlcyB0aGUgYXV0b21hdGljIGRyb3BVcC5cblx0ICovXG5cdEBJbnB1dCgpIGRyb3BVcDogYm9vbGVhbjtcblx0LyoqXG5cdCAqIFNldCB0byBgdHJ1ZWAgdG8gZGlzYWJsZSBjb21ib2JveC5cblx0ICovXG5cdEBJbnB1dCgpIGRpc2FibGVkID0gZmFsc2U7XG5cdC8qKlxuXHQgKiBFbWl0cyBhIExpc3RJdGVtXG5cdCAqXG5cdCAqIEV4YW1wbGU6XG5cdCAqIGBgYGphdmFzY3JpcHRcblx0ICoge1xuXHQgKiBcdFx0Y29udGVudDogXCJvbmVcIixcblx0ICogXHRcdHNlbGVjdGVkOiB0cnVlXG5cdCAqIH1cblx0ICogYGBgXG5cdCAqL1xuXHRAT3V0cHV0KCkgc2VsZWN0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPExpc3RJdGVtIHwgTGlzdEl0ZW1bXT4oKTtcblx0LyoqXG5cdCAqIEludGVuZGVkIHRvIGJlIHVzZWQgdG8gYWRkIGl0ZW1zIHRvIHRoZSBsaXN0LlxuXHQgKlxuXHQgKiBFbWl0cyBhbiBldmVudCB0aGF0IGluY2x1ZGVzIHRoZSBjdXJyZW50IGl0ZW0gbGlzdCwgdGhlIHN1Z2dlc3RlZCBpbmRleCBmb3IgdGhlIG5ldyBpdGVtLCBhbmQgYSBzaW1wbGUgTGlzdEl0ZW1cblx0ICpcblx0ICogRXhhbXBsZTpcblx0ICogYGBgamF2YXNjcmlwdFxuXHQgKlx0e1xuXHQgKlx0XHRpdGVtczogW3tjb250ZW50OiBcIm9uZVwiLCBzZWxlY3RlZDogdHJ1ZX0sIHtjb250ZW50OiBcInR3b1wiLCBzZWxlY3RlZDogdHJ1ZX1dLFxuXHQgKlx0XHRpbmRleDogMSxcblx0ICpcdFx0dmFsdWU6IHtcblx0ICpcdFx0XHRjb250ZW50OiBcInNvbWUgdXNlciBzdHJpbmdcIixcblx0ICpcdFx0XHRzZWxlY3RlZDogZmFsc2Vcblx0ICpcdFx0fVxuXHQgKlx0fVxuXHQgKiBgYGBcblx0ICpcblx0ICpcblx0ICogRXhhbXBsZTpcblx0ICogYGBgamF2YXNjcmlwdFxuXHQgKiB7XG5cdCAqXHRhZnRlcjogMSxcblx0ICpcdHZhbHVlOiBcInNvbWUgdXNlciBzdHJpbmdcIlxuXHQgKiB9XG5cdCAqIGBgYFxuXHQgKi9cblx0QE91dHB1dCgpIHN1Ym1pdCA9IG5ldyBFdmVudEVtaXR0ZXI8e1xuXHRcdGl0ZW1zOiBMaXN0SXRlbVtdLFxuXHRcdGluZGV4OiBudW1iZXIsXG5cdFx0dmFsdWU6IHtcblx0XHRcdGNvbnRlbnQ6IHN0cmluZyxcblx0XHRcdHNlbGVjdGVkOiBib29sZWFuXG5cdFx0fVxuXHR9PigpO1xuXHQvKiogRW1pdHMgYW4gZW1wdHkgZXZlbnQgd2hlbiB0aGUgbWVudSBpcyBjbG9zZWQgKi9cblx0QE91dHB1dCgpIGNsb3NlID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuXHQvKiogRW1pdHMgdGhlIHNlYXJjaCBzdHJpbmcgZnJvbSB0aGUgaW5wdXQgKi9cblx0QE91dHB1dCgpIHNlYXJjaCA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xuXHQvKiogRW1pdHMgYW4gZXZlbnQgd2hlbiB0aGUgY2xlYXIgYnV0dG9uIGlzIGNsaWNrZWQuICovXG5cdEBPdXRwdXQoKSBjbGVhciA9IG5ldyBFdmVudEVtaXR0ZXI8RXZlbnQ+KCk7XG5cdC8qKiBDb250ZW50Q2hpbGQgcmVmZXJlbmNlIHRvIHRoZSBpbnN0YW50aWF0ZWQgZHJvcGRvd24gbGlzdCAqL1xuXHRAQ29udGVudENoaWxkKEFic3RyYWN0RHJvcGRvd25WaWV3LCB7IHN0YXRpYzogdHJ1ZSB9KSB2aWV3OiBBYnN0cmFjdERyb3Bkb3duVmlldztcblx0QFZpZXdDaGlsZChcImRyb3Bkb3duTWVudVwiKSBkcm9wZG93bk1lbnU7XG5cdEBWaWV3Q2hpbGQoXCJpbnB1dFwiLCB7IHN0YXRpYzogdHJ1ZSB9KSBpbnB1dDogRWxlbWVudFJlZjtcblx0QFZpZXdDaGlsZChcImxpc3Rib3hcIiwgeyBzdGF0aWM6IHRydWUgfSkgbGlzdGJveDogRWxlbWVudFJlZjtcblx0QEhvc3RCaW5kaW5nKFwiY2xhc3MuY2RzLS1saXN0LWJveF9fd3JhcHBlclwiKSBob3N0Q2xhc3MgPSB0cnVlO1xuXHRASG9zdEJpbmRpbmcoXCJzdHlsZS5kaXNwbGF5XCIpIGRpc3BsYXkgPSBcImJsb2NrXCI7XG5cblx0cHVibGljIG9wZW4gPSBmYWxzZTtcblxuXHRwdWJsaWMgc2hvd0NsZWFyQnV0dG9uID0gZmFsc2U7XG5cblx0LyoqIFNlbGVjdGVkIGl0ZW1zIGZvciBtdWx0aS1zZWxlY3QgY29tYm8tYm94ZXMuICovXG5cdHB1YmxpYyBwaWxscyA9IFtdO1xuXHQvKiogdXNlZCB0byB1cGRhdGUgdGhlIGRpc3BsYXlWYWx1ZSAqL1xuXHRwdWJsaWMgc2VsZWN0ZWRWYWx1ZSA9IFwiXCI7XG5cblx0b3V0c2lkZUNsaWNrID0gdGhpcy5fb3V0c2lkZUNsaWNrLmJpbmQodGhpcyk7XG5cdGtleWJvYXJkTmF2ID0gdGhpcy5fa2V5Ym9hcmROYXYuYmluZCh0aGlzKTtcblx0LyoqXG5cdCAqIGNvbnRyb2xzIHdoZXRoZXIgdGhlIGBkcm9wLXVwYCBjbGFzcyBpcyBhcHBsaWVkXG5cdCAqL1xuXHRfZHJvcFVwID0gZmFsc2U7XG5cblx0cHJvdGVjdGVkIG5vb3AgPSB0aGlzLl9ub29wLmJpbmQodGhpcyk7XG5cdHByb3RlY3RlZCBvblRvdWNoZWRDYWxsYmFjazogKCkgPT4gdm9pZCA9IHRoaXMuX25vb3A7XG5cdHByb3RlY3RlZCBwcm9wYWdhdGVDaGFuZ2VDYWxsYmFjazogKF86IGFueSkgPT4gdm9pZCA9IHRoaXMuX25vb3A7XG5cblx0cHJvdGVjdGVkIF9wbGFjZWhvbGRlciA9IHRoaXMuaTE4bi5nZXRPdmVycmlkYWJsZShcIkNPTUJPQk9YLlBMQUNFSE9MREVSXCIpO1xuXHRwcm90ZWN0ZWQgX2Nsb3NlTWVudUFyaWEgPSB0aGlzLmkxOG4uZ2V0T3ZlcnJpZGFibGUoXCJDT01CT0JPWC5BMTFZLkNMT1NFX01FTlVcIik7XG5cdHByb3RlY3RlZCBfb3Blbk1lbnVBcmlhID0gdGhpcy5pMThuLmdldE92ZXJyaWRhYmxlKFwiQ09NQk9CT1guQTExWS5PUEVOX01FTlVcIik7XG5cdHByb3RlY3RlZCBfY2xlYXJTZWxlY3Rpb25zVGl0bGUgPSB0aGlzLmkxOG4uZ2V0T3ZlcnJpZGFibGUoXCJDT01CT0JPWC5DTEVBUl9TRUxFQ1RJT05TXCIpO1xuXHRwcm90ZWN0ZWQgX2NsZWFyU2VsZWN0aW9uc0FyaWEgPSB0aGlzLmkxOG4uZ2V0T3ZlcnJpZGFibGUoXCJDT01CT0JPWC5BMTFZLkNMRUFSX1NFTEVDVElPTlNcIik7XG5cdHByb3RlY3RlZCBfY2xlYXJTZWxlY3Rpb25UaXRsZSA9IHRoaXMuaTE4bi5nZXRPdmVycmlkYWJsZShcIkNPTUJPQk9YLkNMRUFSX1NFTEVDVEVEXCIpO1xuXHRwcm90ZWN0ZWQgX2NsZWFyU2VsZWN0aW9uQXJpYSA9IHRoaXMuaTE4bi5nZXRPdmVycmlkYWJsZShcIkNPTUJPQk9YLkExMVkuQ0xFQVJfU0VMRUNURURcIik7XG5cblx0LyoqXG5cdCAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgQ29tYm9Cb3guXG5cdCAqL1xuXHRjb25zdHJ1Y3Rvcihcblx0XHRwcm90ZWN0ZWQgZWxlbWVudFJlZjogRWxlbWVudFJlZixcblx0XHRwcm90ZWN0ZWQgZHJvcGRvd25TZXJ2aWNlOiBEcm9wZG93blNlcnZpY2UsXG5cdFx0cHJvdGVjdGVkIGkxOG46IEkxOG5cblx0KSB7fVxuXG5cdC8qKlxuXHQgKiBMaWZlY3ljbGUgaG9vay5cblx0ICogVXBkYXRlcyBwaWxscyBpZiBuZWNlc3NhcnkuXG5cdCAqXG5cdCAqL1xuXHRuZ09uQ2hhbmdlcyhjaGFuZ2VzKSB7XG5cdFx0aWYgKGNoYW5nZXMuaXRlbXMpIHtcblx0XHRcdHRoaXMudmlldy5pdGVtcyA9IGNoYW5nZXMuaXRlbXMuY3VycmVudFZhbHVlO1xuXHRcdFx0dGhpcy51cGRhdGVTZWxlY3RlZCgpO1xuXHRcdFx0Ly8gSWYgbmV3IGl0ZW1zIGFyZSBhZGRlZCBpbnRvIHRoZSBjb21ib2JveCB3aGlsZSB0aGVyZSBpcyBzZWFyY2ggaW5wdXQsXG5cdFx0XHQvLyByZXBlYXQgdGhlIHNlYXJjaC4gU2VhcmNoIHNob3VsZCBvbmx5IHRyaWdnZXIgZm9yIHR5cGUgJ3NpbmdsZScgd2hlbiB0aGVyZSBpcyBubyB2YWx1ZSBzZWxlY3RlZC5cblx0XHRcdGlmICh0aGlzLnR5cGUgPT09IFwibXVsdGlcIiB8fCAodGhpcy50eXBlID09PSBcInNpbmdsZVwiICYmICF0aGlzLnNlbGVjdGVkVmFsdWUpKSB7XG5cdFx0XHRcdHRoaXMub25TZWFyY2godGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50LnZhbHVlLCBmYWxzZSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFNldHMgaW5pdGlhbCBzdGF0ZSB0aGF0IGRlcGVuZHMgb24gY2hpbGQgY29tcG9uZW50c1xuXHQgKiBTdWJzY3JpYmVzIHRvIHNlbGVjdCBldmVudHMgYW5kIGhhbmRsZXMgZm9jdXMvZmlsdGVyaW5nL2luaXRpYWwgbGlzdCB1cGRhdGVzXG5cdCAqL1xuXHRuZ0FmdGVyQ29udGVudEluaXQoKSB7XG5cdFx0aWYgKHRoaXMudmlldykge1xuXHRcdFx0dGhpcy52aWV3LnR5cGUgPSB0aGlzLnR5cGU7XG5cblx0XHRcdC8vIGZ1bmN0aW9uIHRvIGNoZWNrIGlmIHRoZSBldmVudCBpcyBvcmdhbmljIChpc1VwZGF0ZSA9PT0gZmFsc2UpIG9yIHByb2dyYW1tYXRpY1xuXHRcdFx0Y29uc3QgaXNVcGRhdGUgPSBldmVudCA9PiBldmVudCAmJiBldmVudC5pc1VwZGF0ZTtcblxuXHRcdFx0dGhpcy52aWV3LnNlbGVjdC5zdWJzY3JpYmUoZXZlbnQgPT4ge1xuXHRcdFx0XHRpZiAoQXJyYXkuaXNBcnJheShldmVudCkpIHtcblx0XHRcdFx0XHR0aGlzLnVwZGF0ZVBpbGxzKCk7XG5cdFx0XHRcdFx0aWYgKCFpc1VwZGF0ZShldmVudCkpIHtcblx0XHRcdFx0XHRcdGlmICh0aGlzLml0ZW1WYWx1ZUtleSAmJiB0aGlzLnZpZXcuZ2V0U2VsZWN0ZWQoKSkge1xuXHRcdFx0XHRcdFx0XHRjb25zdCB2YWx1ZXMgPSB0aGlzLnZpZXcuZ2V0U2VsZWN0ZWQoKS5tYXAoaXRlbSA9PiBpdGVtW3RoaXMuaXRlbVZhbHVlS2V5XSk7XG5cdFx0XHRcdFx0XHRcdHRoaXMucHJvcGFnYXRlQ2hhbmdlQ2FsbGJhY2sodmFsdWVzKTtcblx0XHRcdFx0XHRcdC8vIG90aGVyd2lzZSBqdXN0IHBhc3MgdXAgdGhlIHZhbHVlcyBmcm9tIGBnZXRTZWxlY3RlZGBcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdHRoaXMucHJvcGFnYXRlQ2hhbmdlQ2FsbGJhY2sodGhpcy52aWV3LmdldFNlbGVjdGVkKCkpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0dGhpcy5zZWxlY3RlZC5lbWl0KGV2ZW50KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Ly8gSWYgdHlwZSBpcyBzaW5nbGUsIGRyb3Bkb3duIGxpc3Qgd2lsbCBlbWl0IGFuIG9iamVjdFxuXHRcdFx0XHRcdGlmIChldmVudC5pdGVtICYmIGV2ZW50Lml0ZW0uc2VsZWN0ZWQpIHtcblx0XHRcdFx0XHRcdHRoaXMuc2hvd0NsZWFyQnV0dG9uID0gdHJ1ZTtcblx0XHRcdFx0XHRcdHRoaXMuc2VsZWN0ZWRWYWx1ZSA9IGV2ZW50Lml0ZW0uY29udGVudDtcblxuXHRcdFx0XHRcdFx0aWYgKCFpc1VwZGF0ZShldmVudCkpIHtcblx0XHRcdFx0XHRcdFx0aWYgKHRoaXMuaXRlbVZhbHVlS2V5KSB7XG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5wcm9wYWdhdGVDaGFuZ2VDYWxsYmFjayhldmVudC5pdGVtW3RoaXMuaXRlbVZhbHVlS2V5XSk7XG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5wcm9wYWdhdGVDaGFuZ2VDYWxsYmFjayhldmVudC5pdGVtKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHR0aGlzLnNlbGVjdGVkVmFsdWUgPSBcIlwiO1xuXHRcdFx0XHRcdFx0aWYgKCFpc1VwZGF0ZShldmVudCkpIHtcblx0XHRcdFx0XHRcdFx0dGhpcy5wcm9wYWdhdGVDaGFuZ2VDYWxsYmFjayhudWxsKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Ly8gbm90IGd1YXJkaW5nIHRoZXNlIHNpbmNlIHRoZSBuYXRpdmVFbGVtZW50IGhhcyB0byBiZSBsb2FkZWRcblx0XHRcdFx0XHQvLyBmb3Igc2VsZWN0IHRvIGV2ZW4gZmlyZVxuXHRcdFx0XHRcdC8vIG9ubHkgZm9jdXMgZm9yIFwib3JnYW5pY1wiIHNlbGVjdGlvbnNcblx0XHRcdFx0XHRpZiAoIWlzVXBkYXRlKGV2ZW50KSkge1xuXHRcdFx0XHRcdFx0dGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcihcImlucHV0XCIpLmZvY3VzKCk7XG5cdFx0XHRcdFx0XHR0aGlzLnZpZXcuZmlsdGVyQnkoXCJcIik7XG5cdFx0XHRcdFx0XHR0aGlzLnNlbGVjdGVkLmVtaXQoZXZlbnQuaXRlbSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHRoaXMuY2xvc2VEcm9wZG93bigpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHRcdC8vIHVwZGF0ZSB0aGUgcmVzdCBvZiBjb21ib2JveCB3aXRoIGFueSBwcmUtc2VsZWN0ZWQgaXRlbXNcblx0XHRcdC8vIHNldFRpbWVvdXQganVzdCBkZWZlcnMgdGhlIGNhbGwgdG8gdGhlIG5leHQgY2hlY2sgY3ljbGVcblx0XHRcdHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0XHR0aGlzLnVwZGF0ZVNlbGVjdGVkKCk7XG5cdFx0XHR9KTtcblxuXHRcdFx0dGhpcy52aWV3LmJsdXJJbnRlbnQucGlwZShmaWx0ZXIodiA9PiB2ID09PSBcInRvcFwiKSkuc3Vic2NyaWJlKCgpID0+IHtcblx0XHRcdFx0dGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcihcIi5jZHMtLXRleHQtaW5wdXRcIikuZm9jdXMoKTtcblx0XHRcdH0pO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBCaW5kcyBldmVudCBoYW5kbGVycyBhZ2FpbnN0IHRoZSByZW5kZXJlZCB2aWV3XG5cdCAqL1xuXHRuZ0FmdGVyVmlld0luaXQoKSB7XG5cdFx0Ly8gaWYgYXBwZW5kSW5saW5lIGlzIGRlZmF1bHQgdmFsdWVkIChudWxsKSB3ZSBzaG91bGQ6XG5cdFx0Ly8gMS4gaWYgdGhlcmUgYXJlIHNjcm9sbGFibGUgcGFyZW50cyAobm90IGluY2x1ZGluZyBib2R5KSBkb24ndCBhcHBlbmQgaW5saW5lXG5cdFx0Ly8gICAgdGhpcyBzaG91bGQgYWxzbyBjb3ZlciB0aGUgY2FzZSB3aGVyZSB0aGUgZHJvcGRvd24gaXMgaW4gYSBtb2RhbFxuXHRcdC8vICAgICh3aGVyZSB3ZSBfZG9fIHdhbnQgdG8gYXBwZW5kIHRvIHRoZSBwbGFjZWhvbGRlcilcblx0XHRpZiAodGhpcy5hcHBlbmRJbmxpbmUgPT09IG51bGwgJiYgaGFzU2Nyb2xsYWJsZVBhcmVudHModGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQpKSB7XG5cdFx0XHR0aGlzLmFwcGVuZElubGluZSA9IGZhbHNlO1xuXHRcdC8vIDIuIG90aGVyd2lzZSB3ZSBzaG91bGQgYXBwZW5kIGlubGluZVxuXHRcdH0gZWxzZSBpZiAodGhpcy5hcHBlbmRJbmxpbmUgPT09IG51bGwpIHtcblx0XHRcdHRoaXMuYXBwZW5kSW5saW5lID0gdHJ1ZTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogUmVtb3ZpbmcgdGhlIGBEcm9wZG93bmAgZnJvbSB0aGUgYm9keSBpZiBpdCBpcyBhcHBlbmRlZCB0byB0aGUgYm9keS5cblx0ICovXG5cdG5nT25EZXN0cm95KCkge1xuXHRcdGlmICghdGhpcy5hcHBlbmRJbmxpbmUpIHtcblx0XHRcdHRoaXMuX2FwcGVuZFRvRHJvcGRvd24oKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogSGFuZGxlcyBgRXNjYXBlL1RhYmAga2V5IGNsb3NpbmcgdGhlIGRyb3Bkb3duLCBhbmQgYXJyb3cgdXAvZG93biBmb2N1cyB0by9mcm9tIHRoZSBkcm9wZG93biBsaXN0LlxuXHQgKi9cblx0QEhvc3RMaXN0ZW5lcihcImtleWRvd25cIiwgW1wiJGV2ZW50XCJdKVxuXHRob3N0a2V5cyhldjogS2V5Ym9hcmRFdmVudCkge1xuXHRcdGlmIChldi5rZXkgPT09IFwiRXNjYXBlXCIpIHtcblx0XHRcdHRoaXMuY2xvc2VEcm9wZG93bigpO1xuXHRcdH0gZWxzZSBpZiAoKGV2LmtleSA9PT0gXCJBcnJvd0Rvd25cIilcblx0XHRcdCYmICghdGhpcy5kcm9wZG93bk1lbnUgfHwgIXRoaXMuZHJvcGRvd25NZW51Lm5hdGl2ZUVsZW1lbnQuY29udGFpbnMoZXYudGFyZ2V0KSkpIHtcblx0XHRcdGV2LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0XHR0aGlzLm9wZW5Ecm9wZG93bigpO1xuXHRcdFx0c2V0VGltZW91dCgoKSA9PiB7IHRoaXMudmlldy5pbml0Rm9jdXMoKTsgfSwgMCk7XG5cdFx0fVxuXG5cdFx0aWYgKFxuXHRcdFx0dGhpcy5vcGVuICYmIGV2LmtleSA9PT0gXCJUYWJcIiAmJlxuXHRcdFx0KHRoaXMuZHJvcGRvd25NZW51Lm5hdGl2ZUVsZW1lbnQuY29udGFpbnMoZXYudGFyZ2V0IGFzIE5vZGUpIHx8IGV2LnRhcmdldCA9PT0gdGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50KVxuXHRcdCkge1xuXHRcdFx0dGhpcy5jbG9zZURyb3Bkb3duKCk7XG5cdFx0fVxuXG5cdFx0aWYgKHRoaXMub3BlbiAmJiBldi5rZXkgPT09IFwiVGFiXCIgJiYgZXYuc2hpZnRLZXkpIHtcblx0XHRcdHRoaXMuY2xvc2VEcm9wZG93bigpO1xuXHRcdH1cblx0fVxuXG5cdC8qXG5cdCAqIG5vLW9wIG1ldGhvZCBmb3IgbnVsbCBldmVudCBsaXN0ZW5lcnMsIGFuZCBvdGhlciBubyBvcCBjYWxsc1xuXHQgKi9cblx0X25vb3AoKSB7fVxuXG5cdC8qXG5cdCAqIHByb3BhZ2F0ZXMgdGhlIHZhbHVlIHByb3ZpZGVkIGZyb20gbmdNb2RlbFxuXHQgKi9cblx0d3JpdGVWYWx1ZSh2YWx1ZTogYW55KSB7XG5cdFx0aWYgKHRoaXMudHlwZSA9PT0gXCJzaW5nbGVcIikge1xuXHRcdFx0aWYgKHRoaXMuaXRlbVZhbHVlS2V5KSB7XG5cdFx0XHRcdC8vIGNsb25lIHRoZSBzcGVjaWZpZWQgaXRlbSBhbmQgdXBkYXRlIGl0cyBzdGF0ZVxuXHRcdFx0XHRjb25zdCBuZXdWYWx1ZSA9IE9iamVjdC5hc3NpZ24oe30sIHRoaXMudmlldy5nZXRMaXN0SXRlbXMoKS5maW5kKGl0ZW0gPT4gaXRlbVt0aGlzLml0ZW1WYWx1ZUtleV0gPT09IHZhbHVlKSk7XG5cdFx0XHRcdG5ld1ZhbHVlLnNlbGVjdGVkID0gdHJ1ZTtcblx0XHRcdFx0dGhpcy52aWV3LnByb3BhZ2F0ZVNlbGVjdGVkKFtuZXdWYWx1ZV0pO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Ly8gYWxsIGl0ZW1zIGluIHByb3BhZ2F0ZVNlbGVjdGVkIG11c3QgYmUgaXRlcmFibGVcblx0XHRcdFx0dGhpcy52aWV3LnByb3BhZ2F0ZVNlbGVjdGVkKFt2YWx1ZSB8fCBcIlwiXSk7XG5cdFx0XHR9XG5cdFx0XHR0aGlzLnNob3dDbGVhckJ1dHRvbiA9ICEhKHZhbHVlICYmIHRoaXMudmlldy5nZXRTZWxlY3RlZCgpLmxlbmd0aCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGlmICh0aGlzLml0ZW1WYWx1ZUtleSkge1xuXHRcdFx0XHQvLyBjbG9uZSB0aGUgaXRlbXMgYW5kIHVwZGF0ZSB0aGVpciBzdGF0ZSBiYXNlZCBvbiB0aGUgcmVjZWl2ZWQgdmFsdWUgYXJyYXlcblx0XHRcdFx0Ly8gdGhpcyB3YXkgd2UgZG9uJ3QgbG9zZSBhbnkgYWRkaXRpb25hbCBtZXRhZGF0YSB0aGF0IG1heSBiZSBwYXNzZWQgaW4gdmlhIHRoZSBgaXRlbXNgIElucHV0XG5cdFx0XHRcdGxldCBuZXdWYWx1ZXMgPSBbXTtcblx0XHRcdFx0Zm9yIChjb25zdCB2IG9mIHZhbHVlKSB7XG5cdFx0XHRcdFx0Zm9yIChjb25zdCBpdGVtIG9mIHRoaXMudmlldy5nZXRMaXN0SXRlbXMoKSkge1xuXHRcdFx0XHRcdFx0aWYgKGl0ZW1bdGhpcy5pdGVtVmFsdWVLZXldID09PSB2KSB7XG5cdFx0XHRcdFx0XHRcdG5ld1ZhbHVlcy5wdXNoKE9iamVjdC5hc3NpZ24oe30sIGl0ZW0sIHsgc2VsZWN0ZWQ6IHRydWUgfSkpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHR0aGlzLnZpZXcucHJvcGFnYXRlU2VsZWN0ZWQobmV3VmFsdWVzKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHRoaXMudmlldy5wcm9wYWdhdGVTZWxlY3RlZCh2YWx1ZSA/IHZhbHVlIDogW1wiXCJdKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0dGhpcy51cGRhdGVTZWxlY3RlZCgpO1xuXHR9XG5cblx0b25CbHVyKCkge1xuXHRcdHRoaXMub25Ub3VjaGVkQ2FsbGJhY2soKTtcblx0fVxuXG5cdHJlZ2lzdGVyT25DaGFuZ2UoZm46IGFueSkge1xuXHRcdHRoaXMucHJvcGFnYXRlQ2hhbmdlQ2FsbGJhY2sgPSBmbjtcblx0fVxuXG5cdHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpIHtcblx0XHR0aGlzLm9uVG91Y2hlZENhbGxiYWNrID0gZm47XG5cdH1cblxuXHQvKipcblx0ICogYENvbnRyb2xWYWx1ZUFjY2Vzc29yYCBtZXRob2QgdG8gcHJvZ3JhbW1hdGljYWxseSBkaXNhYmxlIHRoZSBjb21ib2JveC5cblx0ICpcblx0ICogZXg6IGB0aGlzLmZvcm1Hcm91cC5nZXQoXCJteUNvb2xDb21ib2JveFwiKS5kaXNhYmxlKCk7YFxuXHQgKi9cblx0c2V0RGlzYWJsZWRTdGF0ZShpc0Rpc2FibGVkOiBib29sZWFuKSB7XG5cdFx0dGhpcy5kaXNhYmxlZCA9IGlzRGlzYWJsZWQ7XG5cdH1cblxuXHQvKipcblx0ICogQ2FsbGVkIGJ5IGBuLXBpbGwtaW5wdXRgIHdoZW4gdGhlIHNlbGVjdGVkIHBpbGxzIGhhdmUgY2hhbmdlZC5cblx0ICovXG5cdHB1YmxpYyB1cGRhdGVQaWxscygpIHtcblx0XHR0aGlzLnBpbGxzID0gdGhpcy52aWV3LmdldFNlbGVjdGVkKCkgfHwgW107XG5cdFx0dGhpcy5jaGVja0ZvclJlb3JkZXIoKTtcblx0fVxuXG5cdHB1YmxpYyBjbGVhclNlbGVjdGVkKGV2ZW50KSB7XG5cdFx0dGhpcy5pdGVtcyA9IHRoaXMuaXRlbXMubWFwKGl0ZW0gPT4ge1xuXHRcdFx0aWYgKCFpdGVtLmRpc2FibGVkKSB7XG5cdFx0XHRcdGl0ZW0uc2VsZWN0ZWQgPSBmYWxzZTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBpdGVtO1xuXHRcdH0pO1xuXHRcdHRoaXMudmlldy5pdGVtcyA9IHRoaXMuaXRlbXM7XG5cdFx0dGhpcy51cGRhdGVQaWxscygpO1xuXHRcdC8vIGNsZWFyU2VsZWN0ZWQgY2FuIG9ubHkgZmlyZSBvbiB0eXBlPW11bHRpXG5cdFx0Ly8gc28gd2UganVzdCBlbWl0IGdldFNlbGVjdGVkKCkgKGp1c3QgaW4gY2FzZSB0aGVyZSdzIGFueSBkaXNhYmxlZCBidXQgc2VsZWN0ZWQgaXRlbXMpXG5cdFx0Y29uc3Qgc2VsZWN0ZWQgPSB0aGlzLnZpZXcuZ2V0U2VsZWN0ZWQoKTtcblx0XHR0aGlzLnByb3BhZ2F0ZUNoYW5nZUNhbGxiYWNrKHNlbGVjdGVkKTtcblx0XHR0aGlzLnNlbGVjdGVkLmVtaXQoc2VsZWN0ZWQgYXMgYW55KTtcblx0XHR0aGlzLmNsZWFyLmVtaXQoZXZlbnQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENsb3NlcyB0aGUgZHJvcGRvd24gYW5kIGVtaXRzIHRoZSBjbG9zZSBldmVudC5cblx0ICovXG5cdHB1YmxpYyBjbG9zZURyb3Bkb3duKCkge1xuXHRcdHRoaXMub3BlbiA9IGZhbHNlO1xuXHRcdHRoaXMuY2hlY2tGb3JSZW9yZGVyKCk7XG5cdFx0dGhpcy5jbG9zZS5lbWl0KCk7XG5cdFx0aWYgKCF0aGlzLmFwcGVuZElubGluZSkge1xuXHRcdFx0dGhpcy5fYXBwZW5kVG9Ecm9wZG93bigpO1xuXHRcdH1cblxuXHRcdGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCB0aGlzLm91dHNpZGVDbGljaywgdHJ1ZSk7XG5cdH1cblxuXHQvKipcblx0ICogT3BlbnMgdGhlIGRyb3Bkb3duLlxuXHQgKi9cblx0cHVibGljIG9wZW5Ecm9wZG93bigpIHtcblx0XHRpZiAodGhpcy5kaXNhYmxlZCkgeyByZXR1cm47IH1cblx0XHR0aGlzLm9wZW4gPSB0cnVlO1xuXHRcdHRoaXMuX2Ryb3BVcCA9IGZhbHNlO1xuXG5cdFx0aWYgKCF0aGlzLmFwcGVuZElubGluZSkge1xuXHRcdFx0dGhpcy5fYXBwZW5kVG9Cb2R5KCk7XG5cdFx0fVxuXG5cdFx0ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIHRoaXMub3V0c2lkZUNsaWNrLCB0cnVlKTtcblxuXHRcdC8vIHNldCB0aGUgZHJvcGRvd24gbWVudSB0byBkcm9wIHVwIGlmIGl0IGlzIG5lYXIgdGhlIGJvdHRvbSBvZiB0aGUgc2NyZWVuXG5cdFx0Ly8gc2V0VGltZW91dCBsZXRzIHVzIGRvIHRoZSBjYWxjdWxhdGlvbnMgYWZ0ZXIgaXQgaXMgdmlzaWJsZSBpbiB0aGUgRE9NXG5cdFx0c2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHRpZiAodGhpcy5kcm9wVXAgPT09IG51bGwgfHwgdGhpcy5kcm9wVXAgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHR0aGlzLl9kcm9wVXAgPSB0aGlzLl9zaG91bGREcm9wVXAoKTtcblx0XHRcdH1cblx0XHR9LCAwKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUb2dnbGVzIHRoZSBkcm9wZG93bi5cblx0ICovXG5cdHB1YmxpYyB0b2dnbGVEcm9wZG93bigpIHtcblx0XHRpZiAodGhpcy5vcGVuKSB7XG5cdFx0XHR0aGlzLmNsb3NlRHJvcGRvd24oKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5vcGVuRHJvcGRvd24oKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogU2V0cyB0aGUgbGlzdCBncm91cCBmaWx0ZXIsIGFuZCBtYW5hZ2VzIHNpbmdsZSBzZWxlY3QgaXRlbSBzZWxlY3Rpb24uXG5cdCAqL1xuXHRwdWJsaWMgb25TZWFyY2goc2VhcmNoU3RyaW5nLCBzaG91bGRFbWl0U2VhcmNoID0gdHJ1ZSkge1xuXHRcdGlmIChzaG91bGRFbWl0U2VhcmNoKSB7XG5cdFx0XHR0aGlzLnNlYXJjaC5lbWl0KHNlYXJjaFN0cmluZyk7XG5cdFx0fVxuXHRcdHRoaXMuc2hvd0NsZWFyQnV0dG9uID0gISFzZWFyY2hTdHJpbmc7XG5cdFx0dGhpcy52aWV3LmZpbHRlckJ5KHNlYXJjaFN0cmluZyk7XG5cdFx0aWYgKHNlYXJjaFN0cmluZyAhPT0gXCJcIikge1xuXHRcdFx0aWYgKCF0aGlzLm9wZW4pIHtcblx0XHRcdFx0dGhpcy5vcGVuRHJvcGRvd24oKTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5zZWxlY3RlZFZhbHVlID0gXCJcIjtcblx0XHRcdGlmICh0aGlzLnR5cGUgPT09IFwibXVsdGlcIiAmJlxuXHRcdFx0XHQodGhpcy5zZWxlY3Rpb25GZWVkYmFjayA9PT0gXCJ0b3BcIiB8fCB0aGlzLnNlbGVjdGlvbkZlZWRiYWNrID09PSBcInRvcC1hZnRlci1yZW9wZW5cIikpIHtcblx0XHRcdFx0dGhpcy52aWV3LnJlb3JkZXJTZWxlY3RlZCgpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRpZiAodGhpcy50eXBlID09PSBcInNpbmdsZVwiKSB7XG5cdFx0XHQvLyBkZXNlbGVjdCBpZiB0aGUgaW5wdXQgZG9lc24ndCBtYXRjaCB0aGUgY29udGVudFxuXHRcdFx0Ly8gb2YgYW55IGdpdmVuIGl0ZW1cblx0XHRcdGNvbnN0IG1hdGNoZXMgPSB0aGlzLnZpZXcuZ2V0TGlzdEl0ZW1zKCkuc29tZShpdGVtID0+IGl0ZW0uY29udGVudC50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHNlYXJjaFN0cmluZy50b0xvd2VyQ2FzZSgpKSk7XG5cdFx0XHRpZiAoIW1hdGNoZXMpIHtcblx0XHRcdFx0Y29uc3Qgc2VsZWN0ZWQgPSB0aGlzLnZpZXcuZ2V0U2VsZWN0ZWQoKTtcblx0XHRcdFx0aWYgKCFzZWxlY3RlZCB8fCAhc2VsZWN0ZWRbMF0pIHtcblx0XHRcdFx0XHR0aGlzLnZpZXcuZmlsdGVyQnkoc2VhcmNoU3RyaW5nKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBJbnRlbmRlZCB0byBiZSB1c2VkIHRvIGFkZCBpdGVtcyB0byB0aGUgbGlzdC5cblx0ICovXG5cdHB1YmxpYyBvblN1Ym1pdChldmVudDogS2V5Ym9hcmRFdmVudCkge1xuXHRcdHRoaXMuc3VibWl0LmVtaXQoe1xuXHRcdFx0aXRlbXM6IHRoaXMudmlldy5nZXRMaXN0SXRlbXMoKSxcblx0XHRcdGluZGV4OiAwLFxuXHRcdFx0dmFsdWU6IHtcblx0XHRcdFx0Y29udGVudDogKGV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50KS52YWx1ZSxcblx0XHRcdFx0c2VsZWN0ZWQ6IGZhbHNlXG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblxuXHRjbGVhcklucHV0KGV2ZW50KSB7XG5cdFx0ZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuXHRcdGlmICh0aGlzLmRpc2FibGVkKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0aWYgKHRoaXMudHlwZSA9PT0gXCJzaW5nbGVcIikgeyAvLyBkb24ndCB3YW50IHRvIGNsZWFyIHNlbGVjdGVkIG9yIGNsb3NlIGlmIG11bHRpXG5cdFx0XHR0aGlzLmNsZWFyU2VsZWN0ZWQoZXZlbnQpO1xuXHRcdFx0dGhpcy5jbG9zZURyb3Bkb3duKCk7XG5cdFx0fVxuXG5cdFx0dGhpcy5zZWxlY3RlZFZhbHVlID0gXCJcIjtcblx0XHR0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQudmFsdWUgPSBcIlwiO1xuXG5cdFx0dGhpcy5zaG93Q2xlYXJCdXR0b24gPSBmYWxzZTtcblx0XHR0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcblx0XHR0aGlzLm9uU2VhcmNoKHRoaXMuaW5wdXQubmF0aXZlRWxlbWVudC52YWx1ZSk7XG5cdH1cblxuXHRwdWJsaWMgaXNUZW1wbGF0ZSh2YWx1ZSkge1xuXHRcdHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFRlbXBsYXRlUmVmO1xuXHR9XG5cblx0LyoqXG5cdCAqIEhhbmRsZXMga2V5Ym9hcmQgZXZlbnRzIHNvIHVzZXJzIGFyZSBjb250cm9sbGluZyB0aGUgYERyb3Bkb3duYCBpbnN0ZWFkIG9mIHVuaW50ZW50aW9uYWxseSBjb250cm9sbGluZyBvdXRzaWRlIGVsZW1lbnRzLlxuXHQgKi9cblx0X2tleWJvYXJkTmF2KGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG5cdFx0aWYgKChldmVudC5rZXkgPT09IFwiRXNjYXBlXCIpICYmIHRoaXMub3Blbikge1xuXHRcdFx0ZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7ICAvLyBkb24ndCB1bmludGVudGlvbmFsbHkgY2xvc2UgbW9kYWwgaWYgaW5zaWRlIG9mIGl0XG5cdFx0fVxuXHRcdGlmIChldmVudC5rZXkgPT09IFwiRXNjYXBlXCIpIHtcblx0XHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0XHR0aGlzLmNsb3NlRHJvcGRvd24oKTtcblx0XHRcdHRoaXMuaW5wdXQubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuXHRcdH0gZWxzZSBpZiAodGhpcy5vcGVuICYmIGV2ZW50LmtleSA9PT0gXCJUYWJcIikge1xuXHRcdFx0Ly8gdGhpcyB3YXkgZm9jdXMgd2lsbCBzdGFydCBvbiB0aGUgbmV4dCBmb2N1c2FibGUgaXRlbSBmcm9tIHRoZSBkcm9wZG93blxuXHRcdFx0Ly8gbm90IHRoZSB0b3Agb2YgdGhlIGJvZHkhXG5cdFx0XHR0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcblx0XHRcdHRoaXMuaW5wdXQubmF0aXZlRWxlbWVudC5kaXNwYXRjaEV2ZW50KG5ldyBLZXlib2FyZEV2ZW50KFwia2V5ZG93blwiLCB7IGJ1YmJsZXM6IHRydWUsIGNhbmNlbGFibGU6IHRydWUsIGtleTogXCJUYWJcIiB9KSk7XG5cdFx0XHR0aGlzLmNsb3NlRHJvcGRvd24oKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogQ3JlYXRlcyB0aGUgYERyb3Bkb3duYCBsaXN0IGFzIGFuIGVsZW1lbnQgdGhhdCBpcyBhcHBlbmRlZCB0byB0aGUgRE9NIGJvZHkuXG5cdCAqL1xuXHRfYXBwZW5kVG9Cb2R5KCkge1xuXHRcdHRoaXMuZHJvcGRvd25TZXJ2aWNlLmFwcGVuZFRvQm9keShcblx0XHRcdHRoaXMubGlzdGJveC5uYXRpdmVFbGVtZW50LFxuXHRcdFx0dGhpcy5kcm9wZG93bk1lbnUubmF0aXZlRWxlbWVudCxcblx0XHRcdGAke3RoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmNsYXNzTmFtZX0ke3RoaXMub3BlbiA/IFwiIGNkcy0tbGlzdC1ib3gtLWV4cGFuZGVkXCIgOiBcIlwifWApO1xuXHRcdHRoaXMuZHJvcGRvd25NZW51Lm5hdGl2ZUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcImtleWRvd25cIiwgdGhpcy5rZXlib2FyZE5hdiwgdHJ1ZSk7XG5cdH1cblxuXHQvKipcblx0ICogQ3JlYXRlcyB0aGUgYERyb3Bkb3duYCBsaXN0IGFwcGVuZGluZyBpdCB0byB0aGUgZHJvcGRvd24gcGFyZW50IG9iamVjdCBpbnN0ZWFkIG9mIHRoZSBib2R5LlxuXHQgKi9cblx0X2FwcGVuZFRvRHJvcGRvd24oKSB7XG5cdFx0dGhpcy5kcm9wZG93blNlcnZpY2UuYXBwZW5kVG9Ecm9wZG93bih0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCk7XG5cdFx0dGhpcy5kcm9wZG93bk1lbnUubmF0aXZlRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLCB0aGlzLmtleWJvYXJkTmF2LCB0cnVlKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBEZXRlY3RzIHdoZXRoZXIgb3Igbm90IHRoZSBgRHJvcGRvd25gIGxpc3QgaXMgdmlzaWJsZSB3aXRoaW4gYWxsIHNjcm9sbGFibGUgcGFyZW50cy5cblx0ICogVGhpcyBjYW4gYmUgb3ZlcnJpZGRlbiBieSBwYXNzaW5nIGluIGEgdmFsdWUgdG8gdGhlIGBkcm9wVXBgIGlucHV0LlxuXHQgKi9cblx0X3Nob3VsZERyb3BVcCgpIHtcblx0XHQvLyBjaGVjayBpZiBkcm9wZG93bk1lbnUgZXhpc3RzIGZpcnN0LlxuXHRcdGNvbnN0IG1lbnUgPSB0aGlzLmRyb3Bkb3duTWVudSAmJiB0aGlzLmRyb3Bkb3duTWVudS5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoXCIuY2RzLS1saXN0LWJveF9fbWVudVwiKTtcblx0XHQvLyBjaGVjayBpZiBtZW51IGV4aXN0cyBmaXJzdC5cblx0XHRjb25zdCBtZW51UmVjdCA9IG1lbnUgJiYgbWVudS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblx0XHRpZiAobWVudSAmJiBtZW51UmVjdCkge1xuXHRcdFx0Y29uc3Qgc2Nyb2xsYWJsZVBhcmVudHMgPSBnZXRTY3JvbGxhYmxlUGFyZW50cyhtZW51KTtcblx0XHRcdHJldHVybiBzY3JvbGxhYmxlUGFyZW50cy5yZWR1Y2UoKHNob3VsZERyb3BVcDogYm9vbGVhbiwgcGFyZW50OiBIVE1MRWxlbWVudCkgPT4ge1xuXHRcdFx0XHRjb25zdCBwYXJlbnRSZWN0ID0gcGFyZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXHRcdFx0XHRjb25zdCBpc0JlbG93UGFyZW50ID0gIShtZW51UmVjdC5ib3R0b20gPD0gcGFyZW50UmVjdC5ib3R0b20pO1xuXHRcdFx0XHRyZXR1cm4gc2hvdWxkRHJvcFVwIHx8IGlzQmVsb3dQYXJlbnQ7XG5cdFx0XHR9LCBmYWxzZSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0LyoqXG5cdCAqIEhhbmRsZXMgY2xpY2tzIG91dHNpZGUgb2YgdGhlIGBEcm9wZG93bmAgbGlzdC5cblx0ICovXG5cdF9vdXRzaWRlQ2xpY2soZXZlbnQpIHtcblx0XHRpZiAoIXRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKGV2ZW50LnRhcmdldCkgJiZcblx0XHRcdC8vIGlmIHdlJ3JlIGFwcGVuZFRvQm9keSB0aGUgbGlzdCBpc24ndCB3aXRoaW4gdGhlIF9lbGVtZW50UmVmLFxuXHRcdFx0Ly8gc28gd2UndmUgZ290IHRvIGNoZWNrIGlmIG91ciB0YXJnZXQgaXMgcG9zc2libHkgaW4gdGhlcmUgdG9vLlxuXHRcdFx0IXRoaXMuZHJvcGRvd25NZW51Lm5hdGl2ZUVsZW1lbnQuY29udGFpbnMoZXZlbnQudGFyZ2V0KSkge1xuXHRcdFx0dGhpcy5jbG9zZURyb3Bkb3duKCk7XG5cdFx0fVxuXHR9XG5cblx0cHJvdGVjdGVkIHVwZGF0ZVNlbGVjdGVkKCkge1xuXHRcdGNvbnN0IHNlbGVjdGVkID0gdGhpcy52aWV3LmdldFNlbGVjdGVkKCk7XG5cdFx0aWYgKHRoaXMudHlwZSA9PT0gXCJtdWx0aVwiKSB7XG5cdFx0XHR0aGlzLnVwZGF0ZVBpbGxzKCk7XG5cdFx0fSBlbHNlIGlmIChzZWxlY3RlZCkge1xuXHRcdFx0Y29uc3QgdmFsdWUgPSBzZWxlY3RlZFswXSA/IHNlbGVjdGVkWzBdLmNvbnRlbnQgOiBcIlwiO1xuXHRcdFx0Y29uc3QgY2hhbmdlQ2FsbGJhY2tWYWx1ZSA9IHNlbGVjdGVkWzBdID8gc2VsZWN0ZWRbMF0gOiBcIlwiO1xuXHRcdFx0dGhpcy5zZWxlY3RlZFZhbHVlID0gdmFsdWU7XG5cdFx0XHR0aGlzLnNob3dDbGVhckJ1dHRvbiA9ICEhdmFsdWU7XG5cdFx0fVxuXHR9XG5cblx0cHJvdGVjdGVkIGNoZWNrRm9yUmVvcmRlcigpIHtcblx0XHRjb25zdCB0b3BBZnRlclJlb3BlbiA9ICF0aGlzLm9wZW4gJiYgdGhpcy5zZWxlY3Rpb25GZWVkYmFjayA9PT0gXCJ0b3AtYWZ0ZXItcmVvcGVuXCI7XG5cdFx0aWYgKCh0aGlzLnR5cGUgPT09IFwibXVsdGlcIikgJiYgKHRvcEFmdGVyUmVvcGVuIHx8IHRoaXMuc2VsZWN0aW9uRmVlZGJhY2sgPT09IFwidG9wXCIpKSB7XG5cdFx0XHR0aGlzLnZpZXcucmVvcmRlclNlbGVjdGVkKHRydWUpO1xuXHRcdH1cblx0fVxufVxuIl19
1040
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tYm9ib3guY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvbWJvYm94L2NvbWJvYm94LmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ04sU0FBUyxFQUVULFlBQVksRUFDWixLQUFLLEVBQ0wsTUFBTSxFQUNOLFlBQVksRUFFWixTQUFTLEVBQ1QsWUFBWSxFQUdaLFdBQVcsRUFDWCxXQUFXLEVBRVgsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLG9CQUFvQixFQUFtQixNQUFNLG9DQUFvQyxDQUFDO0FBRTNGLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QyxPQUFPLEVBQ04sb0JBQW9CLEVBQ3BCLG9CQUFvQixFQUNwQixNQUFNLGlDQUFpQyxDQUFDOzs7Ozs7QUFJekM7Ozs7Ozs7Ozs7O0dBV0c7QUEySkgsTUFBTSxPQUFPLFFBQVE7SUF5UXBCOztPQUVHO0lBQ0gsWUFDVyxVQUFzQixFQUN0QixlQUFnQyxFQUNoQyxJQUFVO1FBRlYsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQUN0QixvQkFBZSxHQUFmLGVBQWUsQ0FBaUI7UUFDaEMsU0FBSSxHQUFKLElBQUksQ0FBTTtRQXZNWixPQUFFLEdBQUcsWUFBWSxRQUFRLENBQUMsYUFBYSxFQUFFLEVBQUUsQ0FBQztRQUM1QyxZQUFPLEdBQUcsa0JBQWtCLFFBQVEsQ0FBQyxhQUFhLEVBQUUsRUFBRSxDQUFDO1FBQ2hFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O1dBeUJHO1FBQ00sVUFBSyxHQUFvQixFQUFFLENBQUM7UUFDckM7O1dBRUc7UUFDTSxTQUFJLEdBQXVCLFFBQVEsQ0FBQztRQUM3Qzs7V0FFRztRQUNNLFNBQUksR0FBdUIsSUFBSSxDQUFDO1FBU3pDOztXQUVHO1FBQ00sY0FBUyxHQUFH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QUlHLE1BQU07c0JBQWQsS0FBSztnQkFJRyxRQUFRO3NCQUFoQixLQUFLO2dCQUlHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBWUksUUFBUTtzQkFBakIsTUFBTTtnQkEyQkcsTUFBTTtzQkFBZixNQUFNO2dCQVNHLEtBQUs7c0JBQWQsTUFBTTtnQkFFRyxNQUFNO3NCQUFmLE1BQU07Z0JBRUcsS0FBSztzQkFBZCxNQUFNO2dCQUUrQyxJQUFJO3NCQUF6RCxZQUFZO3VCQUFDLG9CQUFvQixFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFDekIsWUFBWTtzQkFBdEMsU0FBUzt1QkFBQyxjQUFjO2dCQUNhLEtBQUs7c0JBQTFDLFNBQVM7dUJBQUMsT0FBTyxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFDSSxPQUFPO3NCQUE5QyxTQUFTO3VCQUFDLFNBQVMsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBQ08sU0FBUztzQkFBckQsV0FBVzt1QkFBQyw4QkFBOEI7Z0JBQ2IsT0FBTztzQkFBcEMsV0FBVzt1QkFBQyxlQUFlO2dCQXVKNUIsUUFBUTtzQkFEUCxZQUFZO3VCQUFDLFNBQVMsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG5cdENvbXBvbmVudCxcblx0T25DaGFuZ2VzLFxuXHRDb250ZW50Q2hpbGQsXG5cdElucHV0LFxuXHRPdXRwdXQsXG5cdEhvc3RMaXN0ZW5lcixcblx0RWxlbWVudFJlZixcblx0Vmlld0NoaWxkLFxuXHRFdmVudEVtaXR0ZXIsXG5cdEFmdGVyVmlld0luaXQsXG5cdEFmdGVyQ29udGVudEluaXQsXG5cdEhvc3RCaW5kaW5nLFxuXHRUZW1wbGF0ZVJlZixcblx0T25EZXN0cm95XG59IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBBYnN0cmFjdERyb3Bkb3duVmlldywgRHJvcGRvd25TZXJ2aWNlIH0gZnJvbSBcImNhcmJvbi1jb21wb25lbnRzLWFuZ3VsYXIvZHJvcGRvd25cIjtcbmltcG9ydCB7IExpc3RJdGVtIH0gZnJvbSBcImNhcmJvbi1jb21wb25lbnRzLWFuZ3VsYXIvZHJvcGRvd25cIjtcbmltcG9ydCB7IE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSBcIkBhbmd1bGFyL2Zvcm1zXCI7XG5pbXBvcnQgeyBmaWx0ZXIgfSBmcm9tIFwicnhqcy9vcGVyYXRvcnNcIjtcbmltcG9ydCB7XG5cdGdldFNjcm9sbGFibGVQYXJlbnRzLFxuXHRoYXNTY3JvbGxhYmxlUGFyZW50c1xufSBmcm9tIFwiY2FyYm9uLWNvbXBvbmVudHMtYW5ndWxhci91dGlsc1wiO1xuaW1wb3J0IHsgSTE4biwgT3ZlcnJpZGFibGUgfSBmcm9tIFwiY2FyYm9uLWNvbXBvbmVudHMtYW5ndWxhci9pMThuXCI7XG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSBcInJ4anNcIjtcblxuLyoqXG4gKiBHZXQgc3RhcnRlZCB3aXRoIGltcG9ydGluZyB0aGUgbW9kdWxlOlxuICpcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGltcG9ydCB7IENvbWJvQm94TW9kdWxlIH0gZnJvbSAnY2FyYm9uLWNvbXBvbmVudHMtYW5ndWxhcic7XG4gKiBgYGBcbiAqXG4gKiBDb21ib0JveGVzIGFyZSBzaW1pbGFyIHRvIGRyb3Bkb3ducywgZXhjZXB0IGEgY29tYm9ib3ggcHJvdmlkZXMgYW4gaW5wdXQgZmllbGQgZm9yIHVzZXJzIHRvIHNlYXJjaCBpdGVtcyBhbmQgKG9wdGlvbmFsbHkpIGFkZCB0aGVpciBvd24uXG4gKiBNdWx0aS1zZWxlY3QgY29tYm9ib3hlcyBhbHNvIHByb3ZpZGUgXCJwaWxsc1wiIG9mIHNlbGVjdGVkIGl0ZW1zLlxuICpcbiAqIFtTZWUgZGVtb10oLi4vLi4vP3BhdGg9L3N0b3J5L2NvbXBvbmVudHMtY29tYm9ib3gtLWJhc2ljKVxuICovXG5AQ29tcG9uZW50KHtcblx0c2VsZWN0b3I6IFwiY2RzLWNvbWJvLWJveCwgaWJtLWNvbWJvLWJveFwiLFxuXHR0ZW1wbGF0ZTogYFxuXHRcdDxkaXYgY2xhc3M9XCJjZHMtLWxpc3QtYm94X193cmFwcGVyXCI+XG5cdFx0XHQ8bGFiZWxcblx0XHRcdFx0Km5nSWY9XCJsYWJlbFwiXG5cdFx0XHRcdFtmb3JdPVwiaWRcIlxuXHRcdFx0XHRbaWRdPVwibGFiZWxJZFwiXG5cdFx0XHRcdGNsYXNzPVwiY2RzLS1sYWJlbFwiXG5cdFx0XHRcdFtuZ0NsYXNzXT1cIntcblx0XHRcdFx0XHQnY2RzLS1sYWJlbC0tZGlzYWJsZWQnOiBkaXNhYmxlZCxcblx0XHRcdFx0XHQnY2RzLS12aXN1YWxseS1oaWRkZW4nOiBoaWRlTGFiZWxcblx0XHRcdFx0fVwiPlxuXHRcdFx0XHQ8bmctY29udGFpbmVyICpuZ0lmPVwiIWlzVGVtcGxhdGUobGFiZWwpXCI+e3tsYWJlbH19PC9uZy1jb250YWluZXI+XG5cdFx0XHRcdDxuZy10ZW1wbGF0ZSAqbmdJZj1cImlzVGVtcGxhdGUobGFiZWwpXCIgW25nVGVtcGxhdGVPdXRsZXRdPVwibGFiZWxcIj48L25nLXRlbXBsYXRlPlxuXHRcdFx0PC9sYWJlbD5cblx0XHRcdDxkaXZcblx0XHRcdFx0I2xpc3Rib3hcblx0XHRcdFx0W25nQ2xhc3NdPVwie1xuXHRcdFx0XHRcdCdjZHMtLW11bHRpLXNlbGVjdCBjZHMtLW11bHRpLXNlbGVjdC0tZmlsdGVyYWJsZSc6IHR5cGUgPT09ICdtdWx0aScsXG5cdFx0XHRcdFx0J2Nkcy0tbGlzdC1ib3gtLWxpZ2h0JzogdGhlbWUgPT09ICdsaWdodCcsXG5cdFx0XHRcdFx0J2Nkcy0tbGlzdC1ib3gtLWV4cGFuZGVkJzogb3Blbixcblx0XHRcdFx0XHQnY2RzLS1saXN0LWJveC0tc20nOiBzaXplID09PSAnc20nLFxuXHRcdFx0XHRcdCdjZHMtLWxpc3QtYm94LS1tZCc6IHNpemUgPT09ICdtZCcsXG5cdFx0XHRcdFx0J2Nkcy0tbGlzdC1ib3gtLWxnJzogc2l6ZSA9PT0gJ2xnJyxcblx0XHRcdFx0XHQnY2RzLS1saXN0LWJveC0tZGlzYWJsZWQnOiBkaXNhYmxlZCxcblx0XHRcdFx0XHQnY2RzLS1jb21iby1ib3gtLXJlYWRvbmx5JzogcmVhZG9ubHksXG5cdFx0XHRcdFx0J2Nkcy0tY29tYm8tYm94LS13YXJuaW5nIGNkcy0tbGlzdC1ib3gtLXdhcm5pbmcnOiB3YXJuXG5cdFx0XHRcdH1cIlxuXHRcdFx0XHRjbGFzcz1cImNkcy0tbGlzdC1ib3ggY2RzLS1jb21iby1ib3hcIlxuXHRcdFx0XHRbYXR0ci5kYXRhLWludmFsaWRdPVwiKGludmFsaWQgPyB0cnVlIDogbnVsbClcIj5cblx0XHRcdFx0PGRpdlxuXHRcdFx0XHRcdGNsYXNzPVwiY2RzLS1saXN0LWJveF9fZmllbGRcIlxuXHRcdFx0XHRcdChjbGljayk9XCJ0b2dnbGVEcm9wZG93bigpXCJcblx0XHRcdFx0XHQoYmx1cik9XCJvbkJsdXIoKVwiPlxuXHRcdFx0XHRcdDxkaXZcblx0XHRcdFx0XHRcdCpuZ0lmPVwidHlwZSA9PT0gJ211bHRpJyAmJiBwaWxscy5sZW5ndGggPiAwXCJcblx0XHRcdFx0XHRcdGNsYXNzPVwiY2RzLS10YWcgY2RzLS10YWctLWZpbHRlciBjZHMtLXRhZy0taGlnaC1jb250cmFzdFwiXG5cdFx0XHRcdFx0XHRbbmdDbGFzc109XCJ7J2Nkcy0tdGFnLS1kaXNhYmxlZCc6IGRpc2FibGVkIHx8IHJlYWRvbmx5fVwiPlxuXHRcdFx0XHRcdFx0PHNwYW4gY2xhc3M9XCJjZHMtLXRhZ19fbGFiZWxcIj57eyBwaWxscy5sZW5ndGggfX08L3NwYW4+XG5cdFx0XHRcdFx0XHQ8YnV0dG9uXG5cdFx0XHRcdFx0XHRcdHR5cGU9XCJidXR0b25cIlxuXHRcdFx0XHRcdFx0XHQoY2xpY2spPVwiY2xlYXJTZWxlY3RlZCgkZXZlbnQpXCJcblx0XHRcdFx0XHRcdFx0KGJsdXIpPVwib25CbHVyKClcIlxuXHRcdFx0XHRcdFx0XHQoa2V5ZG93bi5lbnRlcik9XCJjbGVhclNlbGVjdGVkKCRldmVudClcIlxuXHRcdFx0XHRcdFx0XHRjbGFzcz1cImNkcy0tdGFnX19jbG9zZS1pY29uXCJcblx0XHRcdFx0XHRcdFx0dGFiaW5kZXg9XCIwXCJcblx0XHRcdFx0XHRcdFx0W3RpdGxlXT1cImNsZWFyU2VsZWN0aW9uc1RpdGxlXCJcblx0XHRcdFx0XHRcdFx0W2Rpc2FibGVkXT1cImRpc2FibGVkIHx8IHJlYWRvbmx5XCJcblx0XHRcdFx0XHRcdFx0W2F0dHIuYXJpYS1sYWJlbF09XCJjbGVhclNlbGVjdGlvbkFyaWFcIj5cblx0XHRcdFx0XHRcdFx0PHN2Z1xuXHRcdFx0XHRcdFx0XHRcdGZvY3VzYWJsZT1cImZhbHNlXCJcblx0XHRcdFx0XHRcdFx0XHRwcmVzZXJ2ZUFzcGVjdFJhdGlvPVwieE1pZFlNaWQgbWVldFwiXG5cdFx0XHRcdFx0XHRcdFx0c3R5bGU9XCJ3aWxsLWNoYW5nZTogdHJhbnNmb3JtO1wiXG5cdFx0XHRcdFx0XHRcdFx0cm9sZT1cImltZ1wiXG5cdFx0XHRcdFx0XHRcdFx0eG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiXG5cdFx0XHRcdFx0XHRcdFx0d2lkdGg9XCIxNlwiXG5cdFx0XHRcdFx0XHRcdFx0aGVpZ2h0PVwiMTZcIlxuXHRcdFx0XHRcdFx0XHRcdHZpZXdCb3g9XCIwIDAgMTYgMTZcIlxuXHRcdFx0XHRcdFx0XHRcdGFyaWEtaGlkZGVuPVwidHJ1ZVwiPlxuXHRcdFx0XHRcdFx0XHRcdDxwYXRoIGQ9XCJNMTIgNC43bC0uNy0uN0w4IDcuMyA0LjcgNGwtLjcuN0w3LjMgOCA0IDExLjNsLjcuN0w4IDguN2wzLjMgMy4zLjctLjdMOC43IDh6XCI+PC9wYXRoPlxuXHRcdFx0XHRcdFx0XHQ8L3N2Zz5cblx0XHRcdFx0XHRcdDwvYnV0dG9uPlxuXHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdDxpbnB1dFxuXHRcdFx0XHRcdFx0I2lucHV0XG5cdFx0XHRcdFx0XHR0eXBlPVwidGV4dFwiXG5cdFx0XHRcdFx0XHRhdXRvY29tcGxldGU9XCJvZmZcIlxuXHRcdFx0XHRcdFx0cm9sZT1cImNvbWJvYm94XCJcblx0XHRcdFx0XHRcdFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG5cdFx0XHRcdFx0XHRbcmVhZE9ubHldPVwicmVhZG9ubHlcIlxuXHRcdFx0XHRcdFx0KGlucHV0KT1cIm9uU2VhcmNoKCRldmVudC50YXJnZXQudmFsdWUpXCJcblx0XHRcdFx0XHRcdChibHVyKT1cIm9uQmx1cigpXCJcblx0XHRcdFx0XHRcdChrZXlkb3duLmVudGVyKT1cIm9uU3VibWl0KCRldmVudClcIlxuXHRcdFx0XHRcdFx0W3ZhbHVlXT1cInNlbGVjdGVkVmFsdWVcIlxuXHRcdFx0XHRcdFx0Y2xhc3M9XCJjZHMtLXRleHQtaW5wdXRcIlxuXHRcdFx0XHRcdFx0W25nQ2xhc3NdPVwieydjZHMtLXRleHQtaW5wdXQtLWVtcHR5JzogIXNob3dDbGVhckJ1dHRvbn1cIlxuXHRcdFx0XHRcdFx0dGFiaW5kZXg9XCIwXCJcblx0XHRcdFx0XHRcdFtpZF09XCJpZFwiXG5cdFx0XHRcdFx0XHRbYXR0ci5hcmlhLWxhYmVsbGVkYnldPVwibGFiZWxJZFwiXG5cdFx0XHRcdFx0XHRbYXR0ci5hcmlhLWV4cGFuZGVkXT1cIm9wZW5cIlxuXHRcdFx0XHRcdFx0YXJpYS1oYXNwb3B1cD1cImxpc3Rib3hcIlxuXHRcdFx0XHRcdFx0W2F0dHIubWF4bGVuZ3RoXT1cIm1heExlbmd0aFwiXG5cdFx0XHRcdFx0XHRbYXR0ci5hcmlhLWNvbnRyb2xzXT1cIm9wZW4gPyB2aWV3Py5saXN0SWQgOiBudWxsXCJcblx0XHRcdFx0XHRcdFthdHRyLmFyaWEtYXV0b2NvbXBsZXRlXT1cImF1dG9jb21wbGV0ZVwiXG5cdFx0XHRcdFx0XHRbcGxhY2Vob2xkZXJdPVwicGxhY2Vob2xkZXJcIi8+XG5cdFx0XHRcdFx0PHN2Z1xuXHRcdFx0XHRcdFx0Km5nSWY9XCJpbnZhbGlkXCJcblx0XHRcdFx0XHRcdGNkc0ljb249XCJ3YXJuaW5nLS1maWxsZWRcIlxuXHRcdFx0XHRcdFx0c2l6ZT1cIjE2XCJcblx0XHRcdFx0XHRcdGNsYXNzPVwiY2RzLS1saXN0LWJveF9faW52YWxpZC1pY29uXCI+XG5cdFx0XHRcdFx0PC9zdmc+XG5cdFx0XHRcdFx0PHN2Z1xuXHRcdFx0XHRcdFx0Km5nSWY9XCIhaW52YWxpZCAmJiB3YXJuXCJcblx0XHRcdFx0XHRcdGNkc0ljb249XCJ3YXJuaW5nLS1hbHQtLWZpbGxlZFwiXG5cdFx0XHRcdFx0XHRzaXplPVwiMTZcIlxuXHRcdFx0XHRcdFx0Y2xhc3M9XCJjZHMtLWxpc3QtYm94X19pbnZhbGlkLWljb24gY2RzLS1saXN0LWJveF9faW52YWxpZC1pY29uLS13YXJuaW5nXCI+XG5cdFx0XHRcdFx0PC9zdmc+XG5cdFx0XHRcdFx0PGRpdlxuXHRcdFx0XHRcdFx0Km5nSWY9XCJzaG93Q2xlYXJCdXR0b25cIlxuXHRcdFx0XHRcdFx0cm9sZT1cImJ1dHRvblwiXG5cdFx0XHRcdFx0XHRjbGFzcz1cImNkcy0tbGlzdC1ib3hfX3NlbGVjdGlvblwiXG5cdFx0XHRcdFx0XHR0YWJpbmRleD1cIjBcIlxuXHRcdFx0XHRcdFx0W2F0dHIuYXJpYS1sYWJlbF09XCJjbGVhclNlbGVjdGlvbkFyaWFcIlxuXHRcdFx0XHRcdFx0W3RpdGxlXT1cImNsZWFyU2VsZWN0aW9uVGl0bGVcIlxuXHRcdFx0XHRcdFx0KGtleXVwLmVudGVyKT1cImNsZWFySW5wdXQoJGV2ZW50KVwiXG5cdFx0XHRcdFx0XHQoY2xpY2spPVwiY2xlYXJJbnB1dCgkZXZlbnQpXCJcblx0XHRcdFx0XHRcdChibHVyKT1cIm9uQmx1cigpXCI+XG5cdFx0XHRcdFx0XHQ8c3ZnIGNkc0ljb249XCJjbG9zZVwiIHNpemU9XCIxNlwiPjwvc3ZnPlxuXHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdDxidXR0b25cblx0XHRcdFx0XHRcdHR5cGU9XCJidXR0b25cIlxuXHRcdFx0XHRcdFx0cm9sZT1cImJ1dHRvblwiXG5cdFx0XHRcdFx0XHRjbGFzcz1cImNkcy0tbGlzdC1ib3hfX21lbnUtaWNvblwiXG5cdFx0XHRcdFx0XHR0YWJpbmRleD1cIi0xXCJcblx0XHRcdFx0XHRcdFt0aXRsZV09XCJvcGVuID8gY2xvc2VNZW51QXJpYSA6IG9wZW5NZW51QXJpYVwiXG5cdFx0XHRcdFx0XHRbYXR0ci5hcmlhLWxhYmVsXT1cIm9wZW4gPyBjbG9zZU1lbnVBcmlhIDogb3Blbk1lbnVBcmlhXCJcblx0XHRcdFx0XHRcdFtuZ0NsYXNzXT1cInsnY2RzLS1saXN0LWJveF9fbWVudS1pY29uLS1vcGVuJzogb3Blbn1cIj5cblx0XHRcdFx0XHRcdDxzdmcgY2RzSWNvbj1cImNoZXZyb24tLWRvd25cIiBzaXplPVwiMTZcIj48L3N2Zz5cblx0XHRcdFx0XHQ8L2J1dHRvbj5cblx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdDxkaXZcblx0XHRcdFx0XHQjZHJvcGRvd25NZW51XG5cdFx0XHRcdFx0W25nQ2xhc3NdPVwie1xuXHRcdFx0XHRcdFx0J2Nkcy0tbGlzdC1ib3gtLXVwJzogdGhpcy5kcm9wVXAgIT09IG51bGwgJiYgdGhpcy5kcm9wVXAgIT09IHVuZGVmaW5lZCA/IGRyb3BVcCA6IF9kcm9wVXBcblx0XHRcdFx0XHR9XCI+XG5cdFx0XHRcdFx0PG5nLWNvbnRlbnQgKm5nSWY9XCJvcGVuXCI+PC9uZy1jb250ZW50PlxuXHRcdFx0XHQ8L2Rpdj5cblx0XHRcdDwvZGl2PlxuXHRcdFx0PGRpdlxuXHRcdFx0XHQqbmdJZj1cImhlbHBlclRleHQgJiYgIWludmFsaWQgJiYgIXdhcm5cIlxuXHRcdFx0XHRjbGFzcz1cImNkcy0tZm9ybV9faGVscGVyLXRleHRcIlxuXHRcdFx0XHRbbmdDbGFzc109XCJ7J2Nkcy0tZm9ybV9faGVscGVyLXRleHQtLWRpc2FibGVkJzogZGlzYWJsZWR9XCI+XG5cdFx0XHRcdDxuZy1jb250YWluZXIgKm5nSWY9XCIhaXNUZW1wbGF0ZShoZWxwZXJUZXh0KVwiPnt7aGVscGVyVGV4dH19PC9uZy1jb250YWluZXI+XG5cdFx0XHRcdDxuZy10ZW1wbGF0ZSAqbmdJZj1cImlzVGVtcGxhdGUoaGVscGVyVGV4dClcIiBbbmdUZW1wbGF0ZU91dGxldF09XCJoZWxwZXJUZXh0XCI+PC9uZy10ZW1wbGF0ZT5cblx0XHRcdDwvZGl2PlxuXHRcdFx0PGRpdiAqbmdJZj1cImludmFsaWRcIiBjbGFzcz1cImNkcy0tZm9ybS1yZXF1aXJlbWVudFwiPlxuXHRcdFx0XHQ8bmctY29udGFpbmVyICpuZ0lmPVwiIWlzVGVtcGxhdGUoaW52YWxpZFRleHQpXCI+e3sgaW52YWxpZFRleHQgfX08L25nLWNvbnRhaW5lcj5cblx0XHRcdFx0PG5nLXRlbXBsYXRlICpuZ0lmPVwiaXNUZW1wbGF0ZShpbnZhbGlkVGV4dClcIiBbbmdUZW1wbGF0ZU91dGxldF09XCJpbnZhbGlkVGV4dFwiPjwvbmctdGVtcGxhdGU+XG5cdFx0XHQ8L2Rpdj5cblx0XHRcdDxkaXYgKm5nSWY9XCIhaW52YWxpZCAmJiB3YXJuXCIgY2xhc3M9XCJjZHMtLWZvcm0tcmVxdWlyZW1lbnRcIj5cblx0XHRcdFx0PG5nLWNvbnRhaW5lciAqbmdJZj1cIiFpc1RlbXBsYXRlKHdhcm5UZXh0KVwiPnt7d2FyblRleHR9fTwvbmctY29udGFpbmVyPlxuXHRcdFx0XHQ8bmctdGVtcGxhdGUgKm5nSWY9XCJpc1RlbXBsYXRlKHdhcm5UZXh0KVwiIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIndhcm5UZXh0XCI+PC9uZy10ZW1wbGF0ZT5cblx0XHRcdDwvZGl2PlxuXHRcdDwvZGl2PlxuXHRgLFxuXHRwcm92aWRlcnM6IFtcblx0XHR7XG5cdFx0XHRwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcblx0XHRcdHVzZUV4aXN0aW5nOiBDb21ib0JveCxcblx0XHRcdG11bHRpOiB0cnVlXG5cdFx0fVxuXHRdXG59KVxuZXhwb3J0IGNsYXNzIENvbWJvQm94IGltcGxlbWVudHMgT25DaGFuZ2VzLCBBZnRlclZpZXdJbml0LCBBZnRlckNvbnRlbnRJbml0LCBPbkRlc3Ryb3kge1xuXHQvKipcblx0ICogVGV4dCB0byBzaG93IHdoZW4gbm90aGluZyBpcyBzZWxlY3RlZC5cblx0ICovXG5cdEBJbnB1dCgpIHNldCBwbGFjZWhvbGRlcih2YWx1ZTogc3RyaW5nIHwgT2JzZXJ2YWJsZTxzdHJpbmc+KSB7XG5cdFx0dGhpcy5fcGxhY2Vob2xkZXIub3ZlcnJpZGUodmFsdWUpO1xuXHR9XG5cblx0Z2V0IHBsYWNlaG9sZGVyKCkge1xuXHRcdHJldHVybiB0aGlzLl9wbGFjZWhvbGRlci52YWx1ZTtcblx0fVxuXHQvKipcblx0ICogVmFsdWUgdG8gZGlzcGxheSBmb3IgYWNjZXNzaWJpbGl0eSBwdXJwb3NlcyBvbiB0aGUgY29tYm9ib3ggY29udHJvbCBtZW51IHdoZW4gY2xvc2VkXG5cdCAqL1xuXHRASW5wdXQoKSBzZXQgb3Blbk1lbnVBcmlhKHZhbHVlOiBzdHJpbmcgfCBPYnNlcnZhYmxlPHN0cmluZz4pIHtcblx0XHR0aGlzLl9vcGVuTWVudUFyaWEub3ZlcnJpZGUodmFsdWUpO1xuXHR9XG5cblx0Z2V0IG9wZW5NZW51QXJpYSgpIHtcblx0XHRyZXR1cm4gdGhpcy5fb3Blbk1lbnVBcmlhLnZhbHVlO1xuXHR9XG5cdC8qKlxuXHQgKiBWYWx1ZSB0byBkaXNwbGF5IGZvciBhY2Nlc3NpYmlsaXR5IHB1cnBvc2VzIG9uIHRoZSBjb21ib2JveCBjb250cm9sIG1lbnUgd2hlbiBvcGVuZWRcblx0ICovXG5cdEBJbnB1dCgpIHNldCBjbG9zZU1lbnVBcmlhKHZhbHVlOiBzdHJpbmcgfCBPYnNlcnZhYmxlPHN0cmluZz4pIHtcblx0XHR0aGlzLl9jbG9zZU1lbnVBcmlhLm92ZXJyaWRlKHZhbHVlKTtcblx0fVxuXG5cdGdldCBjbG9zZU1lbnVBcmlhKCkge1xuXHRcdHJldHVybiB0aGlzLl9jbG9zZU1lbnVBcmlhLnZhbHVlO1xuXHR9XG5cdC8qKlxuXHQgKiBWYWx1ZSB0byBkaXNwbGF5IG9uIHRoZSBjbGVhciBzZWxlY3Rpb25zIGljb24sIHdoZW4gbXVsdGkgaXMgc2VsZWN0ZWRcblx0ICovXG5cdEBJbnB1dCgpIHNldCBjbGVhclNlbGVjdGlvbnNUaXRsZSh2YWx1ZTogc3RyaW5nIHwgT2JzZXJ2YWJsZTxzdHJpbmc+KSB7XG5cdFx0dGhpcy5fY2xlYXJTZWxlY3Rpb25zVGl0bGUub3ZlcnJpZGUodmFsdWUpO1xuXHR9XG5cblx0Z2V0IGNsZWFyU2VsZWN0aW9uc1RpdGxlKCkge1xuXHRcdHJldHVybiB0aGlzLl9jbGVhclNlbGVjdGlvbnNUaXRsZS52YWx1ZTtcblx0fVxuXHQvKipcblx0ICogVmFsdWUgdG8gZGlzcGxheSBmb3IgYWNjZXNzaWJpbGl0eSBwdXJwb3NlcyB0byBjbGVhciBzZWxlY3Rpb25zLCB3aGVuIG11bHRpIGlzIHNlbGVjdGVkXG5cdCAqL1xuXHRASW5wdXQoKSBzZXQgY2xlYXJTZWxlY3Rpb25zQXJpYSh2YWx1ZTogc3RyaW5nIHwgT2JzZXJ2YWJsZTxzdHJpbmc+KSB7XG5cdFx0dGhpcy5fY2xlYXJTZWxlY3Rpb25zQXJpYS5vdmVycmlkZSh2YWx1ZSk7XG5cdH1cblxuXHRnZXQgY2xlYXJTZWxlY3Rpb25zQXJpYSgpIHtcblx0XHRyZXR1cm4gdGhpcy5fY2xlYXJTZWxlY3Rpb25zQXJpYS52YWx1ZTtcblx0fVxuXHQvKipcblx0ICogVmFsdWUgdG8gZGlzcGxheSBvbiB0aGUgY2xlYXIgdGhlIHNlbGVjdGVkIGl0ZW0gaWNvbiwgd2hlbiBzaW5nbGUgaXMgc2VsZWN0ZWRcblx0ICovXG5cdEBJbnB1dCgpIHNldCBjbGVhclNlbGVjdGlvblRpdGxlKHZhbHVlOiBzdHJpbmcgfCBPYnNlcnZhYmxlPHN0cmluZz4pIHtcblx0XHR0aGlzLl9jbGVhclNlbGVjdGlvblRpdGxlLm92ZXJyaWRlKHZhbHVlKTtcblx0fVxuXG5cdGdldCBjbGVhclNlbGVjdGlvblRpdGxlKCkge1xuXHRcdHJldHVybiB0aGlzLl9jbGVhclNlbGVjdGlvblRpdGxlLnZhbHVlO1xuXHR9XG5cdC8qKlxuXHQgKiBWYWx1ZSB0byBkaXNwbGF5IGZvciBhY2Nlc3NpYmlsaXR5IHB1cnBvc2VzIG9uIHRoZSBjbGVhciB0aGUgc2VsZWN0ZWQgaXRlbSBpY29uLCB3aGVuIHNpbmdsZSBpcyBzZWxlY3RlZFxuXHQgKi9cblx0QElucHV0KCkgc2V0IGNsZWFyU2VsZWN0aW9uQXJpYSh2YWx1ZTogc3RyaW5nIHwgT2JzZXJ2YWJsZTxzdHJpbmc+KSB7XG5cdFx0dGhpcy5fY2xlYXJTZWxlY3Rpb25BcmlhLm92ZXJyaWRlKHZhbHVlKTtcblx0fVxuXG5cdGdldCBjbGVhclNlbGVjdGlvbkFyaWEoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX2NsZWFyU2VsZWN0aW9uQXJpYS52YWx1ZTtcblx0fVxuXHRzdGF0aWMgY29tYm9Cb3hDb3VudCA9IDA7XG5cdEBJbnB1dCgpIGlkID0gYGRyb3Bkb3duLSR7Q29tYm9Cb3guY29tYm9Cb3hDb3VudCsrfWA7XG5cdEBJbnB1dCgpIGxhYmVsSWQgPSBgZHJvcGRvd24tbGFiZWwtJHtDb21ib0JveC5jb21ib0JveENvdW50Kyt9YDtcblx0LyoqXG5cdCAqIExpc3Qgb2YgaXRlbXMgdG8gZmlsbCB0aGUgY29udGVudCB3aXRoLlxuXHQgKlxuXHQgKiAqKkV4YW1wbGU6Kipcblx0ICogYGBgamF2YXNjcmlwdFxuXHQgKiBpdGVtcyA9IFtcblx0ICpcdFx0e1xuXHQgKlx0XHRcdGNvbnRlbnQ6IFwiQWJhY3VzXCIsXG5cdCAqXHRcdFx0c2VsZWN0ZWQ6IGZhbHNlXG5cdCAqXHRcdH0sXG5cdCAqXHRcdHtcblx0ICpcdFx0XHRjb250ZW50OiBcIkJ5dGVcIixcblx0ICpcdFx0XHRzZWxlY3RlZDogZmFsc2UsXG5cdCAqXHRcdH0sXG5cdCAqXHRcdHtcblx0ICpcdFx0XHRjb250ZW50OiBcIkNvbXB1dGVyXCIsXG5cdCAqXHRcdFx0c2VsZWN0ZWQ6IGZhbHNlXG5cdCAqXHRcdH0sXG5cdCAqXHRcdHtcblx0ICpcdFx0XHRjb250ZW50OiBcIkRpZ2l0YWxcIixcblx0ICpcdFx0XHRzZWxlY3RlZDogZmFsc2Vcblx0ICpcdFx0fVxuXHQgKiBdO1xuXHQgKiBgYGBcblx0ICpcblx0ICovXG5cdEBJbnB1dCgpIGl0ZW1zOiBBcnJheTxMaXN0SXRlbT4gPSBbXTtcblx0LyoqXG5cdCAqIENvbWJvIGJveCB0eXBlIChzdXBwb3J0aW5nIHNpbmdsZSBvciBtdWx0aSBzZWxlY3Rpb24gb2YgaXRlbXMpLlxuXHQgKi9cblx0QElucHV0KCkgdHlwZTogXCJzaW5nbGVcIiB8IFwibXVsdGlcIiA9IFwic2luZ2xlXCI7XG5cdC8qKlxuXHQgKiBDb21ibyBib3ggcmVuZGVyIHNpemUuXG5cdCAqL1xuXHRASW5wdXQoKSBzaXplOiBcInNtXCIgfCBcIm1kXCIgfCBcImxnXCIgPSBcIm1kXCI7XG5cdC8qKlxuXHQgKiBTcGVjaWZpZXMgdGhlIHByb3BlcnR5IHRvIGJlIHVzZWQgYXMgdGhlIHJldHVybiB2YWx1ZSB0byBgbmdNb2RlbGBcblx0ICovXG5cdEBJbnB1dCgpIGl0ZW1WYWx1ZUtleTogc3RyaW5nO1xuXHQvKipcblx0ICogTGFiZWwgZm9yIHRoZSBjb21ib2JveC5cblx0ICovXG5cdEBJbnB1dCgpIGxhYmVsOiBzdHJpbmcgfCBUZW1wbGF0ZVJlZjxhbnk+O1xuXHQvKipcblx0ICogSGlkZSBsYWJlbCB3aGlsZSBrZWVwaW5nIGl0IGFjY2Vzc2libGUgZm9yIHNjcmVlbiByZWFkZXJzXG5cdCAqL1xuXHRASW5wdXQoKSBoaWRlTGFiZWwgPSBmYWxzZTtcblx0LyoqXG5cdCAqIFNldHMgdGhlIG9wdGlvbmFsIGhlbHBlciB0ZXh0LlxuXHQgKi9cblx0QElucHV0KCkgaGVscGVyVGV4dDogc3RyaW5nIHwgVGVtcGxhdGVSZWY8YW55Pjtcblx0LyoqXG5cdCAqIHNldCB0byBgdHJ1ZWAgdG8gcGxhY2UgdGhlIGRyb3Bkb3duIHZpZXcgaW5saW5lIHdpdGggdGhlIGNvbXBvbmVudFxuXHQgKi9cblx0QElucHV0KCkgYXBwZW5kSW5saW5lOiBib29sZWFuID0gbnVsbDtcblx0LyoqXG5cdCAqIFNldCB0byBgdHJ1ZWAgdG8gc2hvdyB0aGUgaW52YWxpZCBzdGF0ZS5cblx0ICovXG5cdEBJbnB1dCgpIGludmFsaWQgPSBmYWxzZTtcblx0LyoqXG5cdCAqIFZhbHVlIGRpc3BsYXllZCBpZiBjb21ib2JveCBpcyBpbiBhbiBpbnZhbGlkIHN0YXRlLlxuXHQgKi9cblx0QElucHV0KCkgaW52YWxpZFRleHQ6IHN0cmluZyB8IFRlbXBsYXRlUmVmPGFueT47XG5cdC8qKlxuXHQqIFNldCB0byBgdHJ1ZWAgdG8gc2hvdyBhIHdhcm5pbmcgKGNvbnRlbnRzIHNldCBieSB3YXJuVGV4dClcblx0Ki9cblx0QElucHV0KCkgd2FybiA9IGZhbHNlO1xuXHQvKipcblx0ICogU2V0cyB0aGUgd2FybmluZyB0ZXh0XG5cdCAqL1xuXHRASW5wdXQoKSB3YXJuVGV4dDogc3RyaW5nIHwgVGVtcGxhdGVSZWY8YW55Pjtcblx0LyoqXG5cdCAqIE1heCBsZW5ndGggdmFsdWUgdG8gbGltaXQgaW5wdXQgY2hhcmFjdGVyc1xuXHQgKi9cblx0QElucHV0KCkgbWF4TGVuZ3RoOiBudW1iZXIgPSBudWxsO1xuXHQvKipcblx0ICogQGRlcHJlY2F0ZWQgc2luY2UgdjUgLSBVc2UgYGNkc0xheWVyYCBkaXJlY3RpdmUgaW5zdGVhZFxuXHQgKi9cblx0QElucHV0KCkgdGhlbWU6IFwibGlnaHRcIiB8IFwiZGFya1wiID0gXCJkYXJrXCI7XG5cdC8qKlxuXHQgKiBTcGVjaWZ5IGZlZWRiYWNrIChtb2RlKSBvZiB0aGUgc2VsZWN0aW9uLlxuXHQgKiBgdG9wYDogc2VsZWN0ZWQgaXRlbSBqdW1wcyB0byB0b3Bcblx0ICogYGZpeGVkYDogc2VsZWN0ZWQgaXRlbSBzdGF5cyBhdCBpdHMgcG9zaXRpb25cblx0ICogYHRvcC1hZnRlci1yZW9wZW5gOiBzZWxlY3RlZCBpdGVtIGp1bXAgdG8gdG9wIGFmdGVyIHJlb3BlbiBkcm9wZG93blxuXHQgKi9cblx0QElucHV0KCkgc2VsZWN0aW9uRmVlZGJhY2s6IFwidG9wXCIgfCBcImZpeGVkXCIgfCBcInRvcC1hZnRlci1yZW9wZW5cIiA9IFwidG9wLWFmdGVyLXJlb3BlblwiO1xuXHQvKipcblx0ICogU3BlY2lmeSBhcmlhLWF1dG9jb21wbGV0ZSBhdHRyaWJ1dGUgb2YgdGV4dCBpbnB1dC5cblx0ICogXCJsaXN0XCIsIGlzIHRoZSBleHBlY3RlZCB2YWx1ZSBmb3IgYSBjb21ib2JveCB0aGF0IGludm9rZXMgYSBkcm9wLWRvd24gbGlzdFxuXHQgKi9cblx0QElucHV0KCkgYXV0b2NvbXBsZXRlID0gXCJsaXN0XCI7XG5cdC8qKlxuXHQgKiBPdmVycmlkZXMgdGhlIGF1dG9tYXRpYyBkcm9wVXAuXG5cdCAqL1xuXHRASW5wdXQoKSBkcm9wVXA6IGJvb2xlYW47XG5cdC8qKlxuXHQgKiBTZXQgdG8gYHRydWVgIHRvIGRpc2FibGUgY29tYm9ib3guXG5cdCAqL1xuXHRASW5wdXQoKSBkaXNhYmxlZCA9IGZhbHNlO1xuXHQvKipcblx0ICogU2V0IHRvIGB0cnVlYCBmb3IgcmVhZG9ubHkgc3RhdGUuXG5cdCAqL1xuXHRASW5wdXQoKSByZWFkb25seSA9IGZhbHNlO1xuXHQvKipcblx0ICogRW1pdHMgYSBMaXN0SXRlbVxuXHQgKlxuXHQgKiBFeGFtcGxlOlxuXHQgKiBgYGBqYXZhc2NyaXB0XG5cdCAqIHtcblx0ICogXHRcdGNvbnRlbnQ6IFwib25lXCIsXG5cdCAqIFx0XHRzZWxlY3RlZDogdHJ1ZVxuXHQgKiB9XG5cdCAqIGBgYFxuXHQgKi9cblx0QE91dHB1dCgpIHNlbGVjdGVkID0gbmV3IEV2ZW50RW1pdHRlcjxMaXN0SXRlbSB8IExpc3RJdGVtW10+KCk7XG5cdC8qKlxuXHQgKiBJbnRlbmRlZCB0byBiZSB1c2VkIHRvIGFkZCBpdGVtcyB0byB0aGUgbGlzdC5cblx0ICpcblx0ICogRW1pdHMgYW4gZXZlbnQgdGhhdCBpbmNsdWRlcyB0aGUgY3VycmVudCBpdGVtIGxpc3QsIHRoZSBzdWdnZXN0ZWQgaW5kZXggZm9yIHRoZSBuZXcgaXRlbSwgYW5kIGEgc2ltcGxlIExpc3RJdGVtXG5cdCAqXG5cdCAqIEV4YW1wbGU6XG5cdCAqIGBgYGphdmFzY3JpcHRcblx0ICpcdHtcblx0ICpcdFx0aXRlbXM6IFt7Y29udGVudDogXCJvbmVcIiwgc2VsZWN0ZWQ6IHRydWV9LCB7Y29udGVudDogXCJ0d29cIiwgc2VsZWN0ZWQ6IHRydWV9XSxcblx0ICpcdFx0aW5kZXg6IDEsXG5cdCAqXHRcdHZhbHVlOiB7XG5cdCAqXHRcdFx0Y29udGVudDogXCJzb21lIHVzZXIgc3RyaW5nXCIsXG5cdCAqXHRcdFx0c2VsZWN0ZWQ6IGZhbHNlXG5cdCAqXHRcdH1cblx0ICpcdH1cblx0ICogYGBgXG5cdCAqXG5cdCAqXG5cdCAqIEV4YW1wbGU6XG5cdCAqIGBgYGphdmFzY3JpcHRcblx0ICoge1xuXHQgKlx0YWZ0ZXI6IDEsXG5cdCAqXHR2YWx1ZTogXCJzb21lIHVzZXIgc3RyaW5nXCJcblx0ICogfVxuXHQgKiBgYGBcblx0ICovXG5cdEBPdXRwdXQoKSBzdWJtaXQgPSBuZXcgRXZlbnRFbWl0dGVyPHtcblx0XHRpdGVtczogTGlzdEl0ZW1bXSxcblx0XHRpbmRleDogbnVtYmVyLFxuXHRcdHZhbHVlOiB7XG5cdFx0XHRjb250ZW50OiBzdHJpbmcsXG5cdFx0XHRzZWxlY3RlZDogYm9vbGVhblxuXHRcdH1cblx0fT4oKTtcblx0LyoqIEVtaXRzIGFuIGVtcHR5IGV2ZW50IHdoZW4gdGhlIG1lbnUgaXMgY2xvc2VkICovXG5cdEBPdXRwdXQoKSBjbG9zZSA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcblx0LyoqIEVtaXRzIHRoZSBzZWFyY2ggc3RyaW5nIGZyb20gdGhlIGlucHV0ICovXG5cdEBPdXRwdXQoKSBzZWFyY2ggPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcblx0LyoqIEVtaXRzIGFuIGV2ZW50IHdoZW4gdGhlIGNsZWFyIGJ1dHRvbiBpcyBjbGlja2VkLiAqL1xuXHRAT3V0cHV0KCkgY2xlYXIgPSBuZXcgRXZlbnRFbWl0dGVyPEV2ZW50PigpO1xuXHQvKiogQ29udGVudENoaWxkIHJlZmVyZW5jZSB0byB0aGUgaW5zdGFudGlhdGVkIGRyb3Bkb3duIGxpc3QgKi9cblx0QENvbnRlbnRDaGlsZChBYnN0cmFjdERyb3Bkb3duVmlldywgeyBzdGF0aWM6IHRydWUgfSkgdmlldzogQWJzdHJhY3REcm9wZG93blZpZXc7XG5cdEBWaWV3Q2hpbGQoXCJkcm9wZG93bk1lbnVcIikgZHJvcGRvd25NZW51O1xuXHRAVmlld0NoaWxkKFwiaW5wdXRcIiwgeyBzdGF0aWM6IHRydWUgfSkgaW5wdXQ6IEVsZW1lbnRSZWY7XG5cdEBWaWV3Q2hpbGQoXCJsaXN0Ym94XCIsIHsgc3RhdGljOiB0cnVlIH0pIGxpc3Rib3g6IEVsZW1lbnRSZWY7XG5cdEBIb3N0QmluZGluZyhcImNsYXNzLmNkcy0tbGlzdC1ib3hfX3dyYXBwZXJcIikgaG9zdENsYXNzID0gdHJ1ZTtcblx0QEhvc3RCaW5kaW5nKFwic3R5bGUuZGlzcGxheVwiKSBkaXNwbGF5ID0gXCJibG9ja1wiO1xuXG5cdHB1YmxpYyBvcGVuID0gZmFsc2U7XG5cblx0cHVibGljIHNob3dDbGVhckJ1dHRvbiA9IGZhbHNlO1xuXG5cdC8qKiBTZWxlY3RlZCBpdGVtcyBmb3IgbXVsdGktc2VsZWN0IGNvbWJvLWJveGVzLiAqL1xuXHRwdWJsaWMgcGlsbHMgPSBbXTtcblx0LyoqIHVzZWQgdG8gdXBkYXRlIHRoZSBkaXNwbGF5VmFsdWUgKi9cblx0cHVibGljIHNlbGVjdGVkVmFsdWUgPSBcIlwiO1xuXG5cdG91dHNpZGVDbGljayA9IHRoaXMuX291dHNpZGVDbGljay5iaW5kKHRoaXMpO1xuXHRrZXlib2FyZE5hdiA9IHRoaXMuX2tleWJvYXJkTmF2LmJpbmQodGhpcyk7XG5cdC8qKlxuXHQgKiBjb250cm9scyB3aGV0aGVyIHRoZSBgZHJvcC11cGAgY2xhc3MgaXMgYXBwbGllZFxuXHQgKi9cblx0X2Ryb3BVcCA9IGZhbHNlO1xuXG5cdHByb3RlY3RlZCBub29wID0gdGhpcy5fbm9vcC5iaW5kKHRoaXMpO1xuXHRwcm90ZWN0ZWQgb25Ub3VjaGVkQ2FsbGJhY2s6ICgpID0+IHZvaWQgPSB0aGlzLl9ub29wO1xuXHRwcm90ZWN0ZWQgcHJvcGFnYXRlQ2hhbmdlQ2FsbGJhY2s6IChfOiBhbnkpID0+IHZvaWQgPSB0aGlzLl9ub29wO1xuXG5cdHByb3RlY3RlZCBfcGxhY2Vob2xkZXIgPSB0aGlzLmkxOG4uZ2V0T3ZlcnJpZGFibGUoXCJDT01CT0JPWC5QTEFDRUhPTERFUlwiKTtcblx0cHJvdGVjdGVkIF9jbG9zZU1lbnVBcmlhID0gdGhpcy5pMThuLmdldE92ZXJyaWRhYmxlKFwiQ09NQk9CT1guQTExWS5DTE9TRV9NRU5VXCIpO1xuXHRwcm90ZWN0ZWQgX29wZW5NZW51QXJpYSA9IHRoaXMuaTE4bi5nZXRPdmVycmlkYWJsZShcIkNPTUJPQk9YLkExMVkuT1BFTl9NRU5VXCIpO1xuXHRwcm90ZWN0ZWQgX2NsZWFyU2VsZWN0aW9uc1RpdGxlID0gdGhpcy5pMThuLmdldE92ZXJyaWRhYmxlKFwiQ09NQk9CT1guQ0xFQVJfU0VMRUNUSU9OU1wiKTtcblx0cHJvdGVjdGVkIF9jbGVhclNlbGVjdGlvbnNBcmlhID0gdGhpcy5pMThuLmdldE92ZXJyaWRhYmxlKFwiQ09NQk9CT1guQTExWS5DTEVBUl9TRUxFQ1RJT05TXCIpO1xuXHRwcm90ZWN0ZWQgX2NsZWFyU2VsZWN0aW9uVGl0bGUgPSB0aGlzLmkxOG4uZ2V0T3ZlcnJpZGFibGUoXCJDT01CT0JPWC5DTEVBUl9TRUxFQ1RFRFwiKTtcblx0cHJvdGVjdGVkIF9jbGVhclNlbGVjdGlvbkFyaWEgPSB0aGlzLmkxOG4uZ2V0T3ZlcnJpZGFibGUoXCJDT01CT0JPWC5BMTFZLkNMRUFSX1NFTEVDVEVEXCIpO1xuXG5cdC8qKlxuXHQgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIENvbWJvQm94LlxuXHQgKi9cblx0Y29uc3RydWN0b3IoXG5cdFx0cHJvdGVjdGVkIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYsXG5cdFx0cHJvdGVjdGVkIGRyb3Bkb3duU2VydmljZTogRHJvcGRvd25TZXJ2aWNlLFxuXHRcdHByb3RlY3RlZCBpMThuOiBJMThuXG5cdCkge31cblxuXHQvKipcblx0ICogTGlmZWN5Y2xlIGhvb2suXG5cdCAqIFVwZGF0ZXMgcGlsbHMgaWYgbmVjZXNzYXJ5LlxuXHQgKlxuXHQgKi9cblx0bmdPbkNoYW5nZXMoY2hhbmdlcykge1xuXHRcdGlmIChjaGFuZ2VzLml0ZW1zKSB7XG5cdFx0XHR0aGlzLnZpZXcuaXRlbXMgPSBjaGFuZ2VzLml0ZW1zLmN1cnJlbnRWYWx1ZTtcblx0XHRcdHRoaXMudXBkYXRlU2VsZWN0ZWQoKTtcblx0XHRcdC8vIElmIG5ldyBpdGVtcyBhcmUgYWRkZWQgaW50byB0aGUgY29tYm9ib3ggd2hpbGUgdGhlcmUgaXMgc2VhcmNoIGlucHV0LFxuXHRcdFx0Ly8gcmVwZWF0IHRoZSBzZWFyY2guIFNlYXJjaCBzaG91bGQgb25seSB0cmlnZ2VyIGZvciB0eXBlICdzaW5nbGUnIHdoZW4gdGhlcmUgaXMgbm8gdmFsdWUgc2VsZWN0ZWQuXG5cdFx0XHRpZiAodGhpcy50eXBlID09PSBcIm11bHRpXCIgfHwgKHRoaXMudHlwZSA9PT0gXCJzaW5nbGVcIiAmJiAhdGhpcy5zZWxlY3RlZFZhbHVlKSkge1xuXHRcdFx0XHR0aGlzLm9uU2VhcmNoKHRoaXMuaW5wdXQubmF0aXZlRWxlbWVudC52YWx1ZSwgZmFsc2UpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBTZXRzIGluaXRpYWwgc3RhdGUgdGhhdCBkZXBlbmRzIG9uIGNoaWxkIGNvbXBvbmVudHNcblx0ICogU3Vic2NyaWJlcyB0byBzZWxlY3QgZXZlbnRzIGFuZCBoYW5kbGVzIGZvY3VzL2ZpbHRlcmluZy9pbml0aWFsIGxpc3QgdXBkYXRlc1xuXHQgKi9cblx0bmdBZnRlckNvbnRlbnRJbml0KCkge1xuXHRcdGlmICh0aGlzLnZpZXcpIHtcblx0XHRcdHRoaXMudmlldy50eXBlID0gdGhpcy50eXBlO1xuXG5cdFx0XHQvLyBmdW5jdGlvbiB0byBjaGVjayBpZiB0aGUgZXZlbnQgaXMgb3JnYW5pYyAoaXNVcGRhdGUgPT09IGZhbHNlKSBvciBwcm9ncmFtbWF0aWNcblx0XHRcdGNvbnN0IGlzVXBkYXRlID0gZXZlbnQgPT4gZXZlbnQgJiYgZXZlbnQuaXNVcGRhdGU7XG5cblx0XHRcdHRoaXMudmlldy5zZWxlY3Quc3Vic2NyaWJlKGV2ZW50ID0+IHtcblx0XHRcdFx0aWYgKEFycmF5LmlzQXJyYXkoZXZlbnQpKSB7XG5cdFx0XHRcdFx0dGhpcy51cGRhdGVQaWxscygpO1xuXHRcdFx0XHRcdGlmICghaXNVcGRhdGUoZXZlbnQpKSB7XG5cdFx0XHRcdFx0XHRpZiAodGhpcy5pdGVtVmFsdWVLZXkgJiYgdGhpcy52aWV3LmdldFNlbGVjdGVkKCkpIHtcblx0XHRcdFx0XHRcdFx0Y29uc3QgdmFsdWVzID0gdGhpcy52aWV3LmdldFNlbGVjdGVkKCkubWFwKGl0ZW0gPT4gaXRlbVt0aGlzLml0ZW1WYWx1ZUtleV0pO1xuXHRcdFx0XHRcdFx0XHR0aGlzLnByb3BhZ2F0ZUNoYW5nZUNhbGxiYWNrKHZhbHVlcyk7XG5cdFx0XHRcdFx0XHQvLyBvdGhlcndpc2UganVzdCBwYXNzIHVwIHRoZSB2YWx1ZXMgZnJvbSBgZ2V0U2VsZWN0ZWRgXG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHR0aGlzLnByb3BhZ2F0ZUNoYW5nZUNhbGxiYWNrKHRoaXMudmlldy5nZXRTZWxlY3RlZCgpKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdHRoaXMuc2VsZWN0ZWQuZW1pdChldmVudCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdC8vIElmIHR5cGUgaXMgc2luZ2xlLCBkcm9wZG93biBsaXN0IHdpbGwgZW1pdCBhbiBvYmplY3Rcblx0XHRcdFx0XHRpZiAoZXZlbnQuaXRlbSAmJiBldmVudC5pdGVtLnNlbGVjdGVkKSB7XG5cdFx0XHRcdFx0XHR0aGlzLnNob3dDbGVhckJ1dHRvbiA9IHRydWU7XG5cdFx0XHRcdFx0XHR0aGlzLnNlbGVjdGVkVmFsdWUgPSBldmVudC5pdGVtLmNvbnRlbnQ7XG5cblx0XHRcdFx0XHRcdGlmICghaXNVcGRhdGUoZXZlbnQpKSB7XG5cdFx0XHRcdFx0XHRcdGlmICh0aGlzLml0ZW1WYWx1ZUtleSkge1xuXHRcdFx0XHRcdFx0XHRcdHRoaXMucHJvcGFnYXRlQ2hhbmdlQ2FsbGJhY2soZXZlbnQuaXRlbVt0aGlzLml0ZW1WYWx1ZUtleV0pO1xuXHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdHRoaXMucHJvcGFnYXRlQ2hhbmdlQ2FsbGJhY2soZXZlbnQuaXRlbSk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0dGhpcy5zZWxlY3RlZFZhbHVlID0gXCJcIjtcblx0XHRcdFx0XHRcdGlmICghaXNVcGRhdGUoZXZlbnQpKSB7XG5cdFx0XHRcdFx0XHRcdHRoaXMucHJvcGFnYXRlQ2hhbmdlQ2FsbGJhY2sobnVsbCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdC8vIG5vdCBndWFyZGluZyB0aGVzZSBzaW5jZSB0aGUgbmF0aXZlRWxlbWVudCBoYXMgdG8gYmUgbG9hZGVkXG5cdFx0XHRcdFx0Ly8gZm9yIHNlbGVjdCB0byBldmVuIGZpcmVcblx0XHRcdFx0XHQvLyBvbmx5IGZvY3VzIGZvciBcIm9yZ2FuaWNcIiBzZWxlY3Rpb25zXG5cdFx0XHRcdFx0aWYgKCFpc1VwZGF0ZShldmVudCkpIHtcblx0XHRcdFx0XHRcdHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoXCJpbnB1dFwiKS5mb2N1cygpO1xuXHRcdFx0XHRcdFx0dGhpcy52aWV3LmZpbHRlckJ5KFwiXCIpO1xuXHRcdFx0XHRcdFx0dGhpcy5zZWxlY3RlZC5lbWl0KGV2ZW50Lml0ZW0pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHR0aGlzLmNsb3NlRHJvcGRvd24oKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0XHQvLyB1cGRhdGUgdGhlIHJlc3Qgb2YgY29tYm9ib3ggd2l0aCBhbnkgcHJlLXNlbGVjdGVkIGl0ZW1zXG5cdFx0XHQvLyBzZXRUaW1lb3V0IGp1c3QgZGVmZXJzIHRoZSBjYWxsIHRvIHRoZSBuZXh0IGNoZWNrIGN5Y2xlXG5cdFx0XHRzZXRUaW1lb3V0KCgpID0+IHtcblx0XHRcdFx0dGhpcy51cGRhdGVTZWxlY3RlZCgpO1xuXHRcdFx0fSk7XG5cblx0XHRcdHRoaXMudmlldy5ibHVySW50ZW50LnBpcGUoZmlsdGVyKHYgPT4gdiA9PT0gXCJ0b3BcIikpLnN1YnNjcmliZSgoKSA9PiB7XG5cdFx0XHRcdHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoXCIuY2RzLS10ZXh0LWlucHV0XCIpLmZvY3VzKCk7XG5cdFx0XHR9KTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogQmluZHMgZXZlbnQgaGFuZGxlcnMgYWdhaW5zdCB0aGUgcmVuZGVyZWQgdmlld1xuXHQgKi9cblx0bmdBZnRlclZpZXdJbml0KCkge1xuXHRcdC8vIGlmIGFwcGVuZElubGluZSBpcyBkZWZhdWx0IHZhbHVlZCAobnVsbCkgd2Ugc2hvdWxkOlxuXHRcdC8vIDEuIGlmIHRoZXJlIGFyZSBzY3JvbGxhYmxlIHBhcmVudHMgKG5vdCBpbmNsdWRpbmcgYm9keSkgZG9uJ3QgYXBwZW5kIGlubGluZVxuXHRcdC8vICAgIHRoaXMgc2hvdWxkIGFsc28gY292ZXIgdGhlIGNhc2Ugd2hlcmUgdGhlIGRyb3Bkb3duIGlzIGluIGEgbW9kYWxcblx0XHQvLyAgICAod2hlcmUgd2UgX2RvXyB3YW50IHRvIGFwcGVuZCB0byB0aGUgcGxhY2Vob2xkZXIpXG5cdFx0aWYgKHRoaXMuYXBwZW5kSW5saW5lID09PSBudWxsICYmIGhhc1Njcm9sbGFibGVQYXJlbnRzKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50KSkge1xuXHRcdFx0dGhpcy5hcHBlbmRJbmxpbmUgPSBmYWxzZTtcblx0XHQvLyAyLiBvdGhlcndpc2Ugd2Ugc2hvdWxkIGFwcGVuZCBpbmxpbmVcblx0XHR9IGVsc2UgaWYgKHRoaXMuYXBwZW5kSW5saW5lID09PSBudWxsKSB7XG5cdFx0XHR0aGlzLmFwcGVuZElubGluZSA9IHRydWU7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFJlbW92aW5nIHRoZSBgRHJvcGRvd25gIGZyb20gdGhlIGJvZHkgaWYgaXQgaXMgYXBwZW5kZWQgdG8gdGhlIGJvZHkuXG5cdCAqL1xuXHRuZ09uRGVzdHJveSgpIHtcblx0XHRpZiAoIXRoaXMuYXBwZW5kSW5saW5lKSB7XG5cdFx0XHR0aGlzLl9hcHBlbmRUb0Ryb3Bkb3duKCk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEhhbmRsZXMgYEVzY2FwZS9UYWJgIGtleSBjbG9zaW5nIHRoZSBkcm9wZG93biwgYW5kIGFycm93IHVwL2Rvd24gZm9jdXMgdG8vZnJvbSB0aGUgZHJvcGRvd24gbGlzdC5cblx0ICovXG5cdEBIb3N0TGlzdGVuZXIoXCJrZXlkb3duXCIsIFtcIiRldmVudFwiXSlcblx0aG9zdGtleXMoZXY6IEtleWJvYXJkRXZlbnQpIHtcblx0XHRpZiAoZXYua2V5ID09PSBcIkVzY2FwZVwiKSB7XG5cdFx0XHR0aGlzLmNsb3NlRHJvcGRvd24oKTtcblx0XHR9IGVsc2UgaWYgKChldi5rZXkgPT09IFwiQXJyb3dEb3duXCIpXG5cdFx0XHQmJiAoIXRoaXMuZHJvcGRvd25NZW51IHx8ICF0aGlzLmRyb3Bkb3duTWVudS5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKGV2LnRhcmdldCkpKSB7XG5cdFx0XHRldi5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdFx0dGhpcy5vcGVuRHJvcGRvd24oKTtcblx0XHRcdHNldFRpbWVvdXQoKCkgPT4geyB0aGlzLnZpZXcuaW5pdEZvY3VzKCk7IH0sIDApO1xuXHRcdH1cblxuXHRcdGlmIChcblx0XHRcdHRoaXMub3BlbiAmJiBldi5rZXkgPT09IFwiVGFiXCIgJiZcblx0XHRcdCh0aGlzLmRyb3Bkb3duTWVudS5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKGV2LnRhcmdldCBhcyBOb2RlKSB8fCBldi50YXJnZXQgPT09IHRoaXMuaW5wdXQubmF0aXZlRWxlbWVudClcblx0XHQpIHtcblx0XHRcdHRoaXMuY2xvc2VEcm9wZG93bigpO1xuXHRcdH1cblxuXHRcdGlmICh0aGlzLm9wZW4gJiYgZXYua2V5ID09PSBcIlRhYlwiICYmIGV2LnNoaWZ0S2V5KSB7XG5cdFx0XHR0aGlzLmNsb3NlRHJvcGRvd24oKTtcblx0XHR9XG5cdH1cblxuXHQvKlxuXHQgKiBuby1vcCBtZXRob2QgZm9yIG51bGwgZXZlbnQgbGlzdGVuZXJzLCBhbmQgb3RoZXIgbm8gb3AgY2FsbHNcblx0ICovXG5cdF9ub29wKCkge31cblxuXHQvKlxuXHQgKiBwcm9wYWdhdGVzIHRoZSB2YWx1ZSBwcm92aWRlZCBmcm9tIG5nTW9kZWxcblx0ICovXG5cdHdyaXRlVmFsdWUodmFsdWU6IGFueSkge1xuXHRcdGlmICh0aGlzLnR5cGUgPT09IFwic2luZ2xlXCIpIHtcblx0XHRcdGlmICh0aGlzLml0ZW1WYWx1ZUtleSkge1xuXHRcdFx0XHQvLyBjbG9uZSB0aGUgc3BlY2lmaWVkIGl0ZW0gYW5kIHVwZGF0ZSBpdHMgc3RhdGVcblx0XHRcdFx0Y29uc3QgbmV3VmFsdWUgPSBPYmplY3QuYXNzaWduKHt9LCB0aGlzLnZpZXcuZ2V0TGlzdEl0ZW1zKCkuZmluZChpdGVtID0+IGl0ZW1bdGhpcy5pdGVtVmFsdWVLZXldID09PSB2YWx1ZSkpO1xuXHRcdFx0XHRuZXdWYWx1ZS5zZWxlY3RlZCA9IHRydWU7XG5cdFx0XHRcdHRoaXMudmlldy5wcm9wYWdhdGVTZWxlY3RlZChbbmV3VmFsdWVdKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdC8vIGFsbCBpdGVtcyBpbiBwcm9wYWdhdGVTZWxlY3RlZCBtdXN0IGJlIGl0ZXJhYmxlXG5cdFx0XHRcdHRoaXMudmlldy5wcm9wYWdhdGVTZWxlY3RlZChbdmFsdWUgfHwgXCJcIl0pO1xuXHRcdFx0fVxuXHRcdFx0dGhpcy5zaG93Q2xlYXJCdXR0b24gPSAhISh2YWx1ZSAmJiB0aGlzLnZpZXcuZ2V0U2VsZWN0ZWQoKS5sZW5ndGgpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRpZiAodGhpcy5pdGVtVmFsdWVLZXkpIHtcblx0XHRcdFx0Ly8gY2xvbmUgdGhlIGl0ZW1zIGFuZCB1cGRhdGUgdGhlaXIgc3RhdGUgYmFzZWQgb24gdGhlIHJlY2VpdmVkIHZhbHVlIGFycmF5XG5cdFx0XHRcdC8vIHRoaXMgd2F5IHdlIGRvbid0IGxvc2UgYW55IGFkZGl0aW9uYWwgbWV0YWRhdGEgdGhhdCBtYXkgYmUgcGFzc2VkIGluIHZpYSB0aGUgYGl0ZW1zYCBJbnB1dFxuXHRcdFx0XHRsZXQgbmV3VmFsdWVzID0gW107XG5cdFx0XHRcdGZvciAoY29uc3QgdiBvZiB2YWx1ZSkge1xuXHRcdFx0XHRcdGZvciAoY29uc3QgaXRlbSBvZiB0aGlzLnZpZXcuZ2V0TGlzdEl0ZW1zKCkpIHtcblx0XHRcdFx0XHRcdGlmIChpdGVtW3RoaXMuaXRlbVZhbHVlS2V5XSA9PT0gdikge1xuXHRcdFx0XHRcdFx0XHRuZXdWYWx1ZXMucHVzaChPYmplY3QuYXNzaWduKHt9LCBpdGVtLCB7IHNlbGVjdGVkOiB0cnVlIH0pKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0dGhpcy52aWV3LnByb3BhZ2F0ZVNlbGVjdGVkKG5ld1ZhbHVlcyk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR0aGlzLnZpZXcucHJvcGFnYXRlU2VsZWN0ZWQodmFsdWUgPyB2YWx1ZSA6IFtcIlwiXSk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHRoaXMudXBkYXRlU2VsZWN0ZWQoKTtcblx0fVxuXG5cdG9uQmx1cigpIHtcblx0XHR0aGlzLm9uVG91Y2hlZENhbGxiYWNrKCk7XG5cdH1cblxuXHRyZWdpc3Rlck9uQ2hhbmdlKGZuOiBhbnkpIHtcblx0XHR0aGlzLnByb3BhZ2F0ZUNoYW5nZUNhbGxiYWNrID0gZm47XG5cdH1cblxuXHRyZWdpc3Rlck9uVG91Y2hlZChmbjogYW55KSB7XG5cdFx0dGhpcy5vblRvdWNoZWRDYWxsYmFjayA9IGZuO1xuXHR9XG5cblx0LyoqXG5cdCAqIGBDb250cm9sVmFsdWVBY2Nlc3NvcmAgbWV0aG9kIHRvIHByb2dyYW1tYXRpY2FsbHkgZGlzYWJsZSB0aGUgY29tYm9ib3guXG5cdCAqXG5cdCAqIGV4OiBgdGhpcy5mb3JtR3JvdXAuZ2V0KFwibXlDb29sQ29tYm9ib3hcIikuZGlzYWJsZSgpO2Bcblx0ICovXG5cdHNldERpc2FibGVkU3RhdGUoaXNEaXNhYmxlZDogYm9vbGVhbikge1xuXHRcdHRoaXMuZGlzYWJsZWQgPSBpc0Rpc2FibGVkO1xuXHR9XG5cblx0LyoqXG5cdCAqIENhbGxlZCBieSBgbi1waWxsLWlucHV0YCB3aGVuIHRoZSBzZWxlY3RlZCBwaWxscyBoYXZlIGNoYW5nZWQuXG5cdCAqL1xuXHRwdWJsaWMgdXBkYXRlUGlsbHMoKSB7XG5cdFx0dGhpcy5waWxscyA9IHRoaXMudmlldy5nZXRTZWxlY3RlZCgpIHx8IFtdO1xuXHRcdHRoaXMuY2hlY2tGb3JSZW9yZGVyKCk7XG5cdH1cblxuXHRwdWJsaWMgY2xlYXJTZWxlY3RlZChldmVudCkge1xuXHRcdHRoaXMuaXRlbXMgPSB0aGlzLml0ZW1zLm1hcChpdGVtID0+IHtcblx0XHRcdGlmICghaXRlbS5kaXNhYmxlZCkge1xuXHRcdFx0XHRpdGVtLnNlbGVjdGVkID0gZmFsc2U7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gaXRlbTtcblx0XHR9KTtcblx0XHR0aGlzLnZpZXcuaXRlbXMgPSB0aGlzLml0ZW1zO1xuXHRcdHRoaXMudXBkYXRlUGlsbHMoKTtcblx0XHQvLyBjbGVhclNlbGVjdGVkIGNhbiBvbmx5IGZpcmUgb24gdHlwZT1tdWx0aVxuXHRcdC8vIHNvIHdlIGp1c3QgZW1pdCBnZXRTZWxlY3RlZCgpIChqdXN0IGluIGNhc2UgdGhlcmUncyBhbnkgZGlzYWJsZWQgYnV0IHNlbGVjdGVkIGl0ZW1zKVxuXHRcdGNvbnN0IHNlbGVjdGVkID0gdGhpcy52aWV3LmdldFNlbGVjdGVkKCk7XG5cdFx0dGhpcy5wcm9wYWdhdGVDaGFuZ2VDYWxsYmFjayhzZWxlY3RlZCk7XG5cdFx0dGhpcy5zZWxlY3RlZC5lbWl0KHNlbGVjdGVkIGFzIGFueSk7XG5cdFx0dGhpcy5jbGVhci5lbWl0KGV2ZW50KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDbG9zZXMgdGhlIGRyb3Bkb3duIGFuZCBlbWl0cyB0aGUgY2xvc2UgZXZlbnQuXG5cdCAqL1xuXHRwdWJsaWMgY2xvc2VEcm9wZG93bigpIHtcblx0XHR0aGlzLm9wZW4gPSBmYWxzZTtcblx0XHR0aGlzLmNoZWNrRm9yUmVvcmRlcigpO1xuXHRcdHRoaXMuY2xvc2UuZW1pdCgpO1xuXHRcdGlmICghdGhpcy5hcHBlbmRJbmxpbmUpIHtcblx0XHRcdHRoaXMuX2FwcGVuZFRvRHJvcGRvd24oKTtcblx0XHR9XG5cblx0XHRkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgdGhpcy5vdXRzaWRlQ2xpY2ssIHRydWUpO1xuXHR9XG5cblx0LyoqXG5cdCAqIE9wZW5zIHRoZSBkcm9wZG93bi5cblx0ICovXG5cdHB1YmxpYyBvcGVuRHJvcGRvd24oKSB7XG5cdFx0aWYgKHRoaXMuZGlzYWJsZWQgfHwgdGhpcy5yZWFkb25seSkgeyByZXR1cm47IH1cblx0XHR0aGlzLm9wZW4gPSB0cnVlO1xuXHRcdHRoaXMuX2Ryb3BVcCA9IGZhbHNlO1xuXG5cdFx0aWYgKCF0aGlzLmFwcGVuZElubGluZSkge1xuXHRcdFx0dGhpcy5fYXBwZW5kVG9Cb2R5KCk7XG5cdFx0fVxuXG5cdFx0ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIHRoaXMub3V0c2lkZUNsaWNrLCB0cnVlKTtcblxuXHRcdC8vIHNldCB0aGUgZHJvcGRvd24gbWVudSB0byBkcm9wIHVwIGlmIGl0IGlzIG5lYXIgdGhlIGJvdHRvbSBvZiB0aGUgc2NyZWVuXG5cdFx0Ly8gc2V0VGltZW91dCBsZXRzIHVzIGRvIHRoZSBjYWxjdWxhdGlvbnMgYWZ0ZXIgaXQgaXMgdmlzaWJsZSBpbiB0aGUgRE9NXG5cdFx0c2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHRpZiAodGhpcy5kcm9wVXAgPT09IG51bGwgfHwgdGhpcy5kcm9wVXAgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHR0aGlzLl9kcm9wVXAgPSB0aGlzLl9zaG91bGREcm9wVXAoKTtcblx0XHRcdH1cblx0XHR9LCAwKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUb2dnbGVzIHRoZSBkcm9wZG93bi5cblx0ICovXG5cdHB1YmxpYyB0b2dnbGVEcm9wZG93bigpIHtcblx0XHRpZiAodGhpcy5vcGVuKSB7XG5cdFx0XHR0aGlzLmNsb3NlRHJvcGRvd24oKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5vcGVuRHJvcGRvd24oKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogU2V0cyB0aGUgbGlzdCBncm91cCBmaWx0ZXIsIGFuZCBtYW5hZ2VzIHNpbmdsZSBzZWxlY3QgaXRlbSBzZWxlY3Rpb24uXG5cdCAqL1xuXHRwdWJsaWMgb25TZWFyY2goc2VhcmNoU3RyaW5nLCBzaG91bGRFbWl0U2VhcmNoID0gdHJ1ZSkge1xuXHRcdGlmIChzaG91bGRFbWl0U2VhcmNoKSB7XG5cdFx0XHR0aGlzLnNlYXJjaC5lbWl0KHNlYXJjaFN0cmluZyk7XG5cdFx0fVxuXHRcdHRoaXMuc2hvd0NsZWFyQnV0dG9uID0gISFzZWFyY2hTdHJpbmc7XG5cdFx0dGhpcy52aWV3LmZpbHRlckJ5KHNlYXJjaFN0cmluZyk7XG5cdFx0aWYgKHNlYXJjaFN0cmluZyAhPT0gXCJcIikge1xuXHRcdFx0aWYgKCF0aGlzLm9wZW4pIHtcblx0XHRcdFx0dGhpcy5vcGVuRHJvcGRvd24oKTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5zZWxlY3RlZFZhbHVlID0gXCJcIjtcblx0XHRcdGlmICh0aGlzLnR5cGUgPT09IFwibXVsdGlcIiAmJlxuXHRcdFx0XHQodGhpcy5zZWxlY3Rpb25GZWVkYmFjayA9PT0gXCJ0b3BcIiB8fCB0aGlzLnNlbGVjdGlvbkZlZWRiYWNrID09PSBcInRvcC1hZnRlci1yZW9wZW5cIikpIHtcblx0XHRcdFx0dGhpcy52aWV3LnJlb3JkZXJTZWxlY3RlZCgpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRpZiAodGhpcy50eXBlID09PSBcInNpbmdsZVwiKSB7XG5cdFx0XHQvLyBkZXNlbGVjdCBpZiB0aGUgaW5wdXQgZG9lc24ndCBtYXRjaCB0aGUgY29udGVudFxuXHRcdFx0Ly8gb2YgYW55IGdpdmVuIGl0ZW1cblx0XHRcdGNvbnN0IG1hdGNoZXMgPSB0aGlzLnZpZXcuZ2V0TGlzdEl0ZW1zKCkuc29tZShpdGVtID0+IGl0ZW0uY29udGVudC50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHNlYXJjaFN0cmluZy50b0xvd2VyQ2FzZSgpKSk7XG5cdFx0XHRpZiAoIW1hdGNoZXMpIHtcblx0XHRcdFx0Y29uc3Qgc2VsZWN0ZWQgPSB0aGlzLnZpZXcuZ2V0U2VsZWN0ZWQoKTtcblx0XHRcdFx0aWYgKCFzZWxlY3RlZCB8fCAhc2VsZWN0ZWRbMF0pIHtcblx0XHRcdFx0XHR0aGlzLnZpZXcuZmlsdGVyQnkoc2VhcmNoU3RyaW5nKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBJbnRlbmRlZCB0byBiZSB1c2VkIHRvIGFkZCBpdGVtcyB0byB0aGUgbGlzdC5cblx0ICovXG5cdHB1YmxpYyBvblN1Ym1pdChldmVudDogS2V5Ym9hcmRFdmVudCkge1xuXHRcdHRoaXMuc3VibWl0LmVtaXQoe1xuXHRcdFx0aXRlbXM6IHRoaXMudmlldy5nZXRMaXN0SXRlbXMoKSxcblx0XHRcdGluZGV4OiAwLFxuXHRcdFx0dmFsdWU6IHtcblx0XHRcdFx0Y29udGVudDogKGV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50KS52YWx1ZSxcblx0XHRcdFx0c2VsZWN0ZWQ6IGZhbHNlXG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblxuXHRjbGVhcklucHV0KGV2ZW50KSB7XG5cdFx0ZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuXHRcdGlmICh0aGlzLmRpc2FibGVkIHx8IHRoaXMucmVhZG9ubHkpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRpZiAodGhpcy50eXBlID09PSBcInNpbmdsZVwiKSB7IC8vIGRvbid0IHdhbnQgdG8gY2xlYXIgc2VsZWN0ZWQgb3IgY2xvc2UgaWYgbXVsdGlcblx0XHRcdHRoaXMuY2xlYXJTZWxlY3RlZChldmVudCk7XG5cdFx0XHR0aGlzLmNsb3NlRHJvcGRvd24oKTtcblx0XHR9XG5cblx0XHR0aGlzLnNlbGVjdGVkVmFsdWUgPSBcIlwiO1xuXHRcdHRoaXMuaW5wdXQubmF0aXZlRWxlbWVudC52YWx1ZSA9IFwiXCI7XG5cblx0XHR0aGlzLnNob3dDbGVhckJ1dHRvbiA9IGZhbHNlO1xuXHRcdHRoaXMuaW5wdXQubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuXHRcdHRoaXMub25TZWFyY2godGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50LnZhbHVlKTtcblx0fVxuXG5cdHB1YmxpYyBpc1RlbXBsYXRlKHZhbHVlKSB7XG5cdFx0cmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgVGVtcGxhdGVSZWY7XG5cdH1cblxuXHQvKipcblx0ICogSGFuZGxlcyBrZXlib2FyZCBldmVudHMgc28gdXNlcnMgYXJlIGNvbnRyb2xsaW5nIHRoZSBgRHJvcGRvd25gIGluc3RlYWQgb2YgdW5pbnRlbnRpb25hbGx5IGNvbnRyb2xsaW5nIG91dHNpZGUgZWxlbWVudHMuXG5cdCAqL1xuXHRfa2V5Ym9hcmROYXYoZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcblx0XHRpZiAoKGV2ZW50LmtleSA9PT0gXCJFc2NhcGVcIikgJiYgdGhpcy5vcGVuKSB7XG5cdFx0XHRldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTsgIC8vIGRvbid0IHVuaW50ZW50aW9uYWxseSBjbG9zZSBtb2RhbCBpZiBpbnNpZGUgb2YgaXRcblx0XHR9XG5cdFx0aWYgKGV2ZW50LmtleSA9PT0gXCJFc2NhcGVcIikge1xuXHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHRcdHRoaXMuY2xvc2VEcm9wZG93bigpO1xuXHRcdFx0dGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG5cdFx0fSBlbHNlIGlmICh0aGlzLm9wZW4gJiYgZXZlbnQua2V5ID09PSBcIlRhYlwiKSB7XG5cdFx0XHQvLyB0aGlzIHdheSBmb2N1cyB3aWxsIHN0YXJ0IG9uIHRoZSBuZXh0IGZvY3VzYWJsZSBpdGVtIGZyb20gdGhlIGRyb3Bkb3duXG5cdFx0XHQvLyBub3QgdGhlIHRvcCBvZiB0aGUgYm9keSFcblx0XHRcdHRoaXMuaW5wdXQubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuXHRcdFx0dGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50LmRpc3BhdGNoRXZlbnQobmV3IEtleWJvYXJkRXZlbnQoXCJrZXlkb3duXCIsIHsgYnViYmxlczogdHJ1ZSwgY2FuY2VsYWJsZTogdHJ1ZSwga2V5OiBcIlRhYlwiIH0pKTtcblx0XHRcdHRoaXMuY2xvc2VEcm9wZG93bigpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBDcmVhdGVzIHRoZSBgRHJvcGRvd25gIGxpc3QgYXMgYW4gZWxlbWVudCB0aGF0IGlzIGFwcGVuZGVkIHRvIHRoZSBET00gYm9keS5cblx0ICovXG5cdF9hcHBlbmRUb0JvZHkoKSB7XG5cdFx0dGhpcy5kcm9wZG93blNlcnZpY2UuYXBwZW5kVG9Cb2R5KFxuXHRcdFx0dGhpcy5saXN0Ym94Lm5hdGl2ZUVsZW1lbnQsXG5cdFx0XHR0aGlzLmRyb3Bkb3duTWVudS5uYXRpdmVFbGVtZW50LFxuXHRcdFx0YCR7dGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuY2xhc3NOYW1lfSR7dGhpcy5vcGVuID8gXCIgY2RzLS1saXN0LWJveC0tZXhwYW5kZWRcIiA6IFwiXCJ9YCk7XG5cdFx0dGhpcy5kcm9wZG93bk1lbnUubmF0aXZlRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLCB0aGlzLmtleWJvYXJkTmF2LCB0cnVlKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDcmVhdGVzIHRoZSBgRHJvcGRvd25gIGxpc3QgYXBwZW5kaW5nIGl0IHRvIHRoZSBkcm9wZG93biBwYXJlbnQgb2JqZWN0IGluc3RlYWQgb2YgdGhlIGJvZHkuXG5cdCAqL1xuXHRfYXBwZW5kVG9Ecm9wZG93bigpIHtcblx0XHR0aGlzLmRyb3Bkb3duU2VydmljZS5hcHBlbmRUb0Ryb3Bkb3duKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50KTtcblx0XHR0aGlzLmRyb3Bkb3duTWVudS5uYXRpdmVFbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJrZXlkb3duXCIsIHRoaXMua2V5Ym9hcmROYXYsIHRydWUpO1xuXHR9XG5cblx0LyoqXG5cdCAqIERldGVjdHMgd2hldGhlciBvciBub3QgdGhlIGBEcm9wZG93bmAgbGlzdCBpcyB2aXNpYmxlIHdpdGhpbiBhbGwgc2Nyb2xsYWJsZSBwYXJlbnRzLlxuXHQgKiBUaGlzIGNhbiBiZSBvdmVycmlkZGVuIGJ5IHBhc3NpbmcgaW4gYSB2YWx1ZSB0byB0aGUgYGRyb3BVcGAgaW5wdXQuXG5cdCAqL1xuXHRfc2hvdWxkRHJvcFVwKCkge1xuXHRcdC8vIGNoZWNrIGlmIGRyb3Bkb3duTWVudSBleGlzdHMgZmlyc3QuXG5cdFx0Y29uc3QgbWVudSA9IHRoaXMuZHJvcGRvd25NZW51ICYmIHRoaXMuZHJvcGRvd25NZW51Lm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcihcIi5jZHMtLWxpc3QtYm94X19tZW51XCIpO1xuXHRcdC8vIGNoZWNrIGlmIG1lbnUgZXhpc3RzIGZpcnN0LlxuXHRcdGNvbnN0IG1lbnVSZWN0ID0gbWVudSAmJiBtZW51LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXHRcdGlmIChtZW51ICYmIG1lbnVSZWN0KSB7XG5cdFx0XHRjb25zdCBzY3JvbGxhYmxlUGFyZW50cyA9IGdldFNjcm9sbGFibGVQYXJlbnRzKG1lbnUpO1xuXHRcdFx0cmV0dXJuIHNjcm9sbGFibGVQYXJlbnRzLnJlZHVjZSgoc2hvdWxkRHJvcFVwOiBib29sZWFuLCBwYXJlbnQ6IEhUTUxFbGVtZW50KSA9PiB7XG5cdFx0XHRcdGNvbnN0IHBhcmVudFJlY3QgPSBwYXJlbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cdFx0XHRcdGNvbnN0IGlzQmVsb3dQYXJlbnQgPSAhKG1lbnVSZWN0LmJvdHRvbSA8PSBwYXJlbnRSZWN0LmJvdHRvbSk7XG5cdFx0XHRcdHJldHVybiBzaG91bGREcm9wVXAgfHwgaXNCZWxvd1BhcmVudDtcblx0XHRcdH0sIGZhbHNlKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHQvKipcblx0ICogSGFuZGxlcyBjbGlja3Mgb3V0c2lkZSBvZiB0aGUgYERyb3Bkb3duYCBsaXN0LlxuXHQgKi9cblx0X291dHNpZGVDbGljayhldmVudCkge1xuXHRcdGlmICghdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuY29udGFpbnMoZXZlbnQudGFyZ2V0KSAmJlxuXHRcdFx0Ly8gaWYgd2UncmUgYXBwZW5kVG9Cb2R5IHRoZSBsaXN0IGlzbid0IHdpdGhpbiB0aGUgX2VsZW1lbnRSZWYsXG5cdFx0XHQvLyBzbyB3ZSd2ZSBnb3QgdG8gY2hlY2sgaWYgb3VyIHRhcmdldCBpcyBwb3NzaWJseSBpbiB0aGVyZSB0b28uXG5cdFx0XHQhdGhpcy5kcm9wZG93bk1lbnUubmF0aXZlRWxlbWVudC5jb250YWlucyhldmVudC50YXJnZXQpKSB7XG5cdFx0XHR0aGlzLmNsb3NlRHJvcGRvd24oKTtcblx0XHR9XG5cdH1cblxuXHRwcm90ZWN0ZWQgdXBkYXRlU2VsZWN0ZWQoKSB7XG5cdFx0Y29uc3Qgc2VsZWN0ZWQgPSB0aGlzLnZpZXcuZ2V0U2VsZWN0ZWQoKTtcblx0XHRpZiAodGhpcy50eXBlID09PSBcIm11bHRpXCIpIHtcblx0XHRcdHRoaXMudXBkYXRlUGlsbHMoKTtcblx0XHR9IGVsc2UgaWYgKHNlbGVjdGVkKSB7XG5cdFx0XHRjb25zdCB2YWx1ZSA9IHNlbGVjdGVkWzBdID8gc2VsZWN0ZWRbMF0uY29udGVudCA6IFwiXCI7XG5cdFx0XHRjb25zdCBjaGFuZ2VDYWxsYmFja1ZhbHVlID0gc2VsZWN0ZWRbMF0gPyBzZWxlY3RlZFswXSA6IFwiXCI7XG5cdFx0XHR0aGlzLnNlbGVjdGVkVmFsdWUgPSB2YWx1ZTtcblx0XHRcdHRoaXMuc2hvd0NsZWFyQnV0dG9uID0gISF2YWx1ZTtcblx0XHR9XG5cdH1cblxuXHRwcm90ZWN0ZWQgY2hlY2tGb3JSZW9yZGVyKCkge1xuXHRcdGNvbnN0IHRvcEFmdGVyUmVvcGVuID0gIXRoaXMub3BlbiAmJiB0aGlzLnNlbGVjdGlvbkZlZWRiYWNrID09PSBcInRvcC1hZnRlci1yZW9wZW5cIjtcblx0XHRpZiAoKHRoaXMudHlwZSA9PT0gXCJtdWx0aVwiKSAmJiAodG9wQWZ0ZXJSZW9wZW4gfHwgdGhpcy5zZWxlY3Rpb25GZWVkYmFjayA9PT0gXCJ0b3BcIikpIHtcblx0XHRcdHRoaXMudmlldy5yZW9yZGVyU2VsZWN0ZWQodHJ1ZSk7XG5cdFx0fVxuXHR9XG59XG4iXX0=
@@ -109,6 +109,10 @@ class ComboBox {
109
109
  * Set to `true` to disable combobox.
110
110
  */
111
111
  this.disabled = false;
112
+ /**
113
+ * Set to `true` for readonly state.
114
+ */
115
+ this.readonly = false;
112
116
  /**
113
117
  * Emits a ListItem
114
118
  *
@@ -465,7 +469,7 @@ class ComboBox {
465
469
  * Opens the dropdown.
466
470
  */
467
471
  openDropdown() {
468
- if (this.disabled) {
472
+ if (this.disabled || this.readonly) {
469
473
  return;
470
474
  }
471
475
  this.open = true;
@@ -542,7 +546,7 @@ class ComboBox {
542
546
  clearInput(event) {
543
547
  event.stopPropagation();
544
548
  event.preventDefault();
545
- if (this.disabled) {
549
+ if (this.disabled || this.readonly) {
546
550
  return;
547
551
  }
548
552
  if (this.type === "single") { // don't want to clear selected or close if multi
@@ -643,7 +647,7 @@ class ComboBox {
643
647
  }
644
648
  ComboBox.comboBoxCount = 0;
645
649
  ComboBox.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ComboBox, deps: [{ token: i0.ElementRef }, { token: i1.DropdownService }, { token: i2.I18n }], target: i0.ɵɵFactoryTarget.Component });
646
- ComboBox.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: ComboBox, selector: "cds-combo-box, ibm-combo-box", inputs: { placeholder: "placeholder", openMenuAria: "openMenuAria", closeMenuAria: "closeMenuAria", clearSelectionsTitle: "clearSelectionsTitle", clearSelectionsAria: "clearSelectionsAria", clearSelectionTitle: "clearSelectionTitle", clearSelectionAria: "clearSelectionAria", id: "id", labelId: "labelId", items: "items", type: "type", size: "size", itemValueKey: "itemValueKey", label: "label", hideLabel: "hideLabel", helperText: "helperText", appendInline: "appendInline", invalid: "invalid", invalidText: "invalidText", warn: "warn", warnText: "warnText", maxLength: "maxLength", theme: "theme", selectionFeedback: "selectionFeedback", autocomplete: "autocomplete", dropUp: "dropUp", disabled: "disabled" }, outputs: { selected: "selected", submit: "submit", close: "close", search: "search", clear: "clear" }, host: { listeners: { "keydown": "hostkeys($event)" }, properties: { "class.cds--list-box__wrapper": "this.hostClass", "style.display": "this.display" } }, providers: [
650
+ ComboBox.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: ComboBox, selector: "cds-combo-box, ibm-combo-box", inputs: { placeholder: "placeholder", openMenuAria: "openMenuAria", closeMenuAria: "closeMenuAria", clearSelectionsTitle: "clearSelectionsTitle", clearSelectionsAria: "clearSelectionsAria", clearSelectionTitle: "clearSelectionTitle", clearSelectionAria: "clearSelectionAria", id: "id", labelId: "labelId", items: "items", type: "type", size: "size", itemValueKey: "itemValueKey", label: "label", hideLabel: "hideLabel", helperText: "helperText", appendInline: "appendInline", invalid: "invalid", invalidText: "invalidText", warn: "warn", warnText: "warnText", maxLength: "maxLength", theme: "theme", selectionFeedback: "selectionFeedback", autocomplete: "autocomplete", dropUp: "dropUp", disabled: "disabled", readonly: "readonly" }, outputs: { selected: "selected", submit: "submit", close: "close", search: "search", clear: "clear" }, host: { listeners: { "keydown": "hostkeys($event)" }, properties: { "class.cds--list-box__wrapper": "this.hostClass", "style.display": "this.display" } }, providers: [
647
651
  {
648
652
  provide: NG_VALUE_ACCESSOR,
649
653
  useExisting: ComboBox,
@@ -673,6 +677,7 @@ ComboBox.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.
673
677
  'cds--list-box--md': size === 'md',
674
678
  'cds--list-box--lg': size === 'lg',
675
679
  'cds--list-box--disabled': disabled,
680
+ 'cds--combo-box--readonly': readonly,
676
681
  'cds--combo-box--warning cds--list-box--warning': warn
677
682
  }"
678
683
  class="cds--list-box cds--combo-box"
@@ -684,7 +689,7 @@ ComboBox.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.
684
689
  <div
685
690
  *ngIf="type === 'multi' && pills.length > 0"
686
691
  class="cds--tag cds--tag--filter cds--tag--high-contrast"
687
- [ngClass]="{'cds--tag--disabled': disabled}">
692
+ [ngClass]="{'cds--tag--disabled': disabled || readonly}">
688
693
  <span class="cds--tag__label">{{ pills.length }}</span>
689
694
  <button
690
695
  type="button"
@@ -694,7 +699,7 @@ ComboBox.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.
694
699
  class="cds--tag__close-icon"
695
700
  tabindex="0"
696
701
  [title]="clearSelectionsTitle"
697
- [disabled]="disabled"
702
+ [disabled]="disabled || readonly"
698
703
  [attr.aria-label]="clearSelectionAria">
699
704
  <svg
700
705
  focusable="false"
@@ -716,6 +721,7 @@ ComboBox.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.
716
721
  autocomplete="off"
717
722
  role="combobox"
718
723
  [disabled]="disabled"
724
+ [readOnly]="readonly"
719
725
  (input)="onSearch($event.target.value)"
720
726
  (blur)="onBlur()"
721
727
  (keydown.enter)="onSubmit($event)"
@@ -819,6 +825,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
819
825
  'cds--list-box--md': size === 'md',
820
826
  'cds--list-box--lg': size === 'lg',
821
827
  'cds--list-box--disabled': disabled,
828
+ 'cds--combo-box--readonly': readonly,
822
829
  'cds--combo-box--warning cds--list-box--warning': warn
823
830
  }"
824
831
  class="cds--list-box cds--combo-box"
@@ -830,7 +837,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
830
837
  <div
831
838
  *ngIf="type === 'multi' && pills.length > 0"
832
839
  class="cds--tag cds--tag--filter cds--tag--high-contrast"
833
- [ngClass]="{'cds--tag--disabled': disabled}">
840
+ [ngClass]="{'cds--tag--disabled': disabled || readonly}">
834
841
  <span class="cds--tag__label">{{ pills.length }}</span>
835
842
  <button
836
843
  type="button"
@@ -840,7 +847,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
840
847
  class="cds--tag__close-icon"
841
848
  tabindex="0"
842
849
  [title]="clearSelectionsTitle"
843
- [disabled]="disabled"
850
+ [disabled]="disabled || readonly"
844
851
  [attr.aria-label]="clearSelectionAria">
845
852
  <svg
846
853
  focusable="false"
@@ -862,6 +869,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
862
869
  autocomplete="off"
863
870
  role="combobox"
864
871
  [disabled]="disabled"
872
+ [readOnly]="readonly"
865
873
  (input)="onSearch($event.target.value)"
866
874
  (blur)="onBlur()"
867
875
  (keydown.enter)="onSubmit($event)"
@@ -999,6 +1007,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
999
1007
  type: Input
1000
1008
  }], disabled: [{
1001
1009
  type: Input
1010
+ }], readonly: [{
1011
+ type: Input
1002
1012
  }], selected: [{
1003
1013
  type: Output
1004
1014
  }], submit: [{