@magicx-eng/ai-autocomplete-angular 0.3.3 → 0.4.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.
@@ -1,5 +1,5 @@
1
1
  import { CommonModule } from "@angular/common";
2
- import { ChangeDetectionStrategy, Component, Input, ViewEncapsulation, } from "@angular/core";
2
+ import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, inject, ViewEncapsulation, } from "@angular/core";
3
3
  import { getFooterHint, } from "@magicx-eng/ai-autocomplete-vanilla";
4
4
  import { BehaviorSubject, combineLatest } from "rxjs";
5
5
  import { map } from "rxjs/operators";
@@ -28,6 +28,9 @@ export class AIAutocompleteDropdownComponent {
28
28
  constructor() {
29
29
  /** Whether to render the pillbar above the options grid. Default: true. */
30
30
  this.showPills = true;
31
+ /** Concrete resolved mode, or null when `mode` is unset (inherit from ancestor). */
32
+ this.resolvedMode = null;
33
+ this.cdr = inject(ChangeDetectorRef);
31
34
  /** Fallback skeleton-bar widths used when loading with zero cached options. */
32
35
  this.fallbackSkeletonBarWidths = [159, 119, 164];
33
36
  // Bridge for the @Input `showPills` into the reactive pipeline. Without this,
@@ -40,15 +43,28 @@ export class AIAutocompleteDropdownComponent {
40
43
  this.lastVisibleContent = null;
41
44
  this.trackByWidth = (_, w) => w;
42
45
  }
46
+ /** Root class list — adds `magicx-aia` only when self-scoping via `mode`. */
47
+ get rootClass() {
48
+ let cls = "magicx-aia-dropdown";
49
+ if (this.resolvedMode)
50
+ cls += " magicx-aia";
51
+ if (this.className)
52
+ cls += ` ${this.className}`;
53
+ return cls;
54
+ }
43
55
  ngOnInit() {
44
56
  // Seed showPills$ from the input's resolved value at init time.
45
57
  this.showPills$.next(this.showPills);
58
+ this.applyMode();
46
59
  this.initVm();
47
60
  }
48
61
  ngOnChanges(changes) {
49
62
  if (changes["showPills"]) {
50
63
  this.showPills$.next(this.showPills);
51
64
  }
65
+ if (changes["mode"] && !changes["mode"].firstChange) {
66
+ this.applyMode();
67
+ }
52
68
  // Re-bind vm$ when the controller @Input is swapped (e.g. a multi-step form
53
69
  // toggling between controllers). Without this, vm$ stays subscribed to the
54
70
  // previous controller's dropdown$ — rendering stale options, or, if that
@@ -59,6 +75,44 @@ export class AIAutocompleteDropdownComponent {
59
75
  this.initVm();
60
76
  }
61
77
  }
78
+ ngOnDestroy() {
79
+ this.teardownModeListener();
80
+ }
81
+ /**
82
+ * Resolve the `mode` input into `resolvedMode`. Unset → null (the dropdown
83
+ * stays class-less and inherits from a `.magicx-aia` ancestor). `"auto"` reads
84
+ * `prefers-color-scheme` and tracks it live via a media-query listener.
85
+ */
86
+ applyMode() {
87
+ this.teardownModeListener();
88
+ if (this.mode === undefined) {
89
+ this.resolvedMode = null;
90
+ return;
91
+ }
92
+ if (this.mode === "light" || this.mode === "dark") {
93
+ this.resolvedMode = this.mode;
94
+ return;
95
+ }
96
+ // "auto"
97
+ if (typeof window === "undefined" || typeof window.matchMedia !== "function") {
98
+ this.resolvedMode = "light";
99
+ return;
100
+ }
101
+ this.modeMql = window.matchMedia("(prefers-color-scheme: dark)");
102
+ this.resolvedMode = this.modeMql.matches ? "dark" : "light";
103
+ this.modeListener = () => {
104
+ this.resolvedMode = this.modeMql?.matches ? "dark" : "light";
105
+ this.cdr.markForCheck();
106
+ };
107
+ this.modeMql.addEventListener("change", this.modeListener);
108
+ }
109
+ teardownModeListener() {
110
+ if (this.modeMql && this.modeListener) {
111
+ this.modeMql.removeEventListener("change", this.modeListener);
112
+ }
113
+ this.modeMql = undefined;
114
+ this.modeListener = undefined;
115
+ }
62
116
  /** Build the view-model stream from the current controller + showPills$. */
63
117
  initVm() {
64
118
  this.vm$ = combineLatest([this.controller.dropdown$, this.showPills$]).pipe(map(([dd, showPills]) => {
@@ -89,6 +143,7 @@ export class AIAutocompleteDropdownComponent {
89
143
  showsFallbackSkeleton,
90
144
  footerKey,
91
145
  footerHint,
146
+ optionsPosition: dd.optionsPosition,
92
147
  };
93
148
  if (isVisible)
94
149
  this.lastVisibleContent = content;
@@ -110,7 +165,7 @@ export class AIAutocompleteDropdownComponent {
110
165
  }
111
166
  }
112
167
  AIAutocompleteDropdownComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: AIAutocompleteDropdownComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
113
- AIAutocompleteDropdownComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: AIAutocompleteDropdownComponent, isStandalone: true, selector: "ai-autocomplete-dropdown", inputs: { controller: "controller", showPills: "showPills", className: "className" }, usesOnChanges: true, ngImport: i0, template: "<div\n *ngIf=\"vm$ | async as vm\"\n [id]=\"controller.listboxId\"\n role=\"listbox\"\n data-aia-dropdown=\"\"\n [attr.data-aia-loading]=\"vm.isLoading ? '' : null\"\n [class]=\"className ? 'magicx-aia-dropdown ' + className : 'magicx-aia-dropdown'\"\n [class.magicx-aia-dropdown-visible]=\"vm.isVisible\"\n (mousedown)=\"preventBlur($event)\"\n>\n <aia-stack space=\"8px\">\n <aia-cluster\n *ngIf=\"vm.showsPills\"\n class=\"magicx-aia-dropdown-pillbar\"\n data-aia-pillbar=\"\"\n [noWrap]=\"true\"\n >\n <aia-pill-list\n [pills]=\"vm.pills\"\n [activePillIndex]=\"0\"\n [activeSelected]=\"vm.isActivePillSelected\"\n [rounded]=\"true\"\n [loading]=\"vm.isLoading\"\n (selectPill)=\"onPillClick($event)\"\n ></aia-pill-list>\n </aia-cluster>\n\n <aia-suggestion-grid\n *ngIf=\"vm.showsOptions\"\n [options]=\"vm.options\"\n [activeIndex]=\"vm.activeIndex\"\n [listboxId]=\"controller.listboxId\"\n [loading]=\"vm.isLoading\"\n (select)=\"onSelect($event)\"\n (highlight)=\"onHighlight($event)\"\n ></aia-suggestion-grid>\n\n <div\n *ngIf=\"vm.showsFallbackSkeleton\"\n class=\"magicx-aia-dropdown-skeleton-bars\"\n data-aia-skeleton-bars=\"\"\n >\n <span\n *ngFor=\"let w of fallbackSkeletonBarWidths; trackBy: trackByWidth\"\n class=\"magicx-aia-dropdown-skeleton-bar\"\n [style.width.px]=\"w\"\n ></span>\n </div>\n\n <footer class=\"magicx-aia-footer\" data-aia-footer=\"\">\n <div class=\"magicx-aia-footer-divider\"></div>\n <div class=\"magicx-aia-footer-row\">\n <span class=\"magicx-aia-footer-hint-group\">\n <kbd class=\"magicx-aia-footer-key\">{{ vm.footerKey }}</kbd>\n <span class=\"magicx-aia-footer-hint\">{{ vm.footerHint }}</span>\n </span>\n <a\n class=\"magicx-aia-footer-brand-link\"\n href=\"https://ai-autocomplete.com\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >\n <span class=\"magicx-aia-footer-brand\">AI</span>\n <span class=\"magicx-aia-footer-badge\">Autocomplete</span>\n </a>\n </div>\n </footer>\n </aia-stack>\n</div>\n", styles: [".magicx-aia-dropdown{position:absolute;left:0;right:0;top:100%;max-width:544px;margin-top:6px;display:flex;flex-direction:column;box-sizing:border-box;padding:10px 8px;overflow:hidden;container-type:inline-size;z-index:10;opacity:0;pointer-events:none;transition:opacity .4s cubic-bezier(.4,0,.2,1);background:var(--aia-surface, #ffffff);border:1px solid var(--aia-dropdown-border, #e5e7eb);border-radius:18px;box-shadow:var(--aia-dropdown-shadow, 0 8px 12px rgba(0, 0, 0, .1))}.magicx-aia-dropdown[data-aia-surface=glass]{background:transparent;border-color:transparent;box-shadow:#fff -3.2px -3.2px 3.2px -3.2px inset,#fff 6.4px 6.4px 1.6px -8px inset,var(--aia-dropdown-bg, transparent) -6.4px 6.4px 1.6px -8px inset,var(--aia-dropdown-bg, transparent) 6.4px -6.4px 1.6px -8px inset,#ffffff26 -1.6px 0 0 -1.6px inset,#ffffff26 0 -1.6px 0 -1.6px inset,#ffffff4d 0 1.6px inset,#ffffff4d 1.6px 0 inset,inset 0 0 30px 5px #0000000d,#00000014 0 0 30px 2px;backdrop-filter:blur(30px)}.magicx-aia-dropdown-visible{opacity:1;pointer-events:auto}.magicx-aia-dropdown-pillbar{overflow-x:auto;overflow-y:hidden;scrollbar-width:none;mask-image:linear-gradient(to right,#000 0,#000 calc(100% - 48px),transparent 100%);-webkit-mask-image:linear-gradient(to right,#000 0,#000 calc(100% - 48px),transparent 100%)}.magicx-aia-dropdown-pillbar::-webkit-scrollbar{display:none}.magicx-aia-footer{display:flex;flex-direction:column;gap:8px;padding:0 8px}.magicx-aia-footer-divider{border-top:1px solid var(--aia-footer-divider, rgba(176, 176, 176, .4))}.magicx-aia-footer-row{display:flex;align-items:center;justify-content:space-between}.magicx-aia-footer-hint-group{display:inline-flex;align-items:center;gap:5px}.magicx-aia-footer-brand-link{display:inline-flex;align-items:center;gap:2px;text-decoration:none;cursor:pointer;transition:opacity .15s ease-out}.magicx-aia-footer-brand-link:hover{opacity:.7}.magicx-aia-footer-key{display:inline-flex;align-items:center;justify-content:center;min-width:30px;height:22px;padding:2px 6px;border:.5px solid var(--aia-footer-hint-color, #505050);border-radius:5px;font-family:inherit;font-size:11px;line-height:18px;color:var(--aia-footer-hint-color, #505050)}.magicx-aia-footer-hint{font-family:inherit;font-size:11px;line-height:18px;color:var(--aia-footer-hint-color, #505050)}.magicx-aia-footer-brand{font-family:inherit;font-size:10px;line-height:18px;color:var(--aia-footer-brand-color, #b0b0b0)}.magicx-aia-footer-badge{display:inline-flex;align-items:center;height:23px;padding:2.5px 5.5px;border:.5px solid var(--aia-footer-badge-border, rgba(189, 189, 189, .51));border-radius:999px;font-family:inherit;font-size:10px;line-height:18px;color:var(--aia-footer-brand-color, #b0b0b0)}.magicx-aia-dropdown-skeleton-bars{display:flex;flex-direction:column;gap:20px;padding:7px 8px}.magicx-aia-dropdown-skeleton-bar{display:block;height:14px;border-radius:999px;background:var(--aia-skeleton-bg, var(--aia-pill-bg, rgba(189, 189, 189, .51)));opacity:.5;animation:aiaDropdownSkeletonPulse 1.4s ease-in-out infinite}.magicx-aia-dropdown-skeleton-bar:nth-child(2){animation-delay:.15s}.magicx-aia-dropdown-skeleton-bar:nth-child(3){animation-delay:.3s}@keyframes aiaDropdownSkeletonPulse{0%,to{opacity:.5}50%{opacity:.25}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "component", type: PillListComponent, selector: "aia-pill-list", inputs: ["pills", "activePillIndex", "rounded", "loading", "activeSelected"], outputs: ["selectPill"] }, { kind: "component", type: SuggestionGridComponent, selector: "aia-suggestion-grid", inputs: ["options", "activeIndex", "listboxId", "loading"], outputs: ["select", "highlight"] }, { kind: "component", type: StackComponent, selector: "aia-stack", inputs: ["space", "align"] }, { kind: "component", type: ClusterComponent, selector: "aia-cluster", inputs: ["gap", "align", "justify", "noWrap", "inline"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
168
+ AIAutocompleteDropdownComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: AIAutocompleteDropdownComponent, isStandalone: true, selector: "ai-autocomplete-dropdown", inputs: { controller: "controller", showPills: "showPills", className: "className", mode: "mode" }, usesOnChanges: true, ngImport: i0, template: "<div\n *ngIf=\"vm$ | async as vm\"\n [id]=\"controller.listboxId\"\n role=\"listbox\"\n data-aia-dropdown=\"\"\n [attr.data-aia-loading]=\"vm.isLoading ? '' : null\"\n [attr.data-mode]=\"resolvedMode\"\n [attr.data-options-position]=\"vm.optionsPosition\"\n [class]=\"rootClass\"\n [class.magicx-aia-dropdown-visible]=\"vm.isVisible\"\n (mousedown)=\"preventBlur($event)\"\n>\n <aia-stack space=\"8px\">\n <aia-cluster\n *ngIf=\"vm.showsPills\"\n class=\"magicx-aia-dropdown-pillbar\"\n data-aia-pillbar=\"\"\n [noWrap]=\"true\"\n >\n <aia-pill-list\n [pills]=\"vm.pills\"\n [activePillIndex]=\"0\"\n [activeSelected]=\"vm.isActivePillSelected\"\n [rounded]=\"true\"\n [loading]=\"vm.isLoading\"\n (selectPill)=\"onPillClick($event)\"\n ></aia-pill-list>\n </aia-cluster>\n\n <aia-suggestion-grid\n *ngIf=\"vm.showsOptions\"\n [options]=\"vm.options\"\n [activeIndex]=\"vm.activeIndex\"\n [listboxId]=\"controller.listboxId\"\n [loading]=\"vm.isLoading\"\n (select)=\"onSelect($event)\"\n (highlight)=\"onHighlight($event)\"\n ></aia-suggestion-grid>\n\n <div\n *ngIf=\"vm.showsFallbackSkeleton\"\n class=\"magicx-aia-dropdown-skeleton-bars\"\n data-aia-skeleton-bars=\"\"\n >\n <span\n *ngFor=\"let w of fallbackSkeletonBarWidths; trackBy: trackByWidth\"\n class=\"magicx-aia-dropdown-skeleton-bar\"\n [style.width.px]=\"w\"\n ></span>\n </div>\n\n <footer class=\"magicx-aia-footer\" data-aia-footer=\"\">\n <div class=\"magicx-aia-footer-divider\"></div>\n <div class=\"magicx-aia-footer-row\">\n <span class=\"magicx-aia-footer-hint-group\">\n <kbd class=\"magicx-aia-footer-key\">{{ vm.footerKey }}</kbd>\n <span class=\"magicx-aia-footer-hint\">{{ vm.footerHint }}</span>\n </span>\n <a\n class=\"magicx-aia-footer-brand-link\"\n href=\"https://ai-autocomplete.com\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >\n <span class=\"magicx-aia-footer-brand\">AI</span>\n <span class=\"magicx-aia-footer-badge\">Autocomplete</span>\n </a>\n </div>\n </footer>\n </aia-stack>\n</div>\n", styles: [":where(.magicx-aia,.magicx-aia *,.magicx-aia *::before,.magicx-aia *::after){box-sizing:border-box}:where(.magicx-aia),:where(.magicx-aia[data-mode=\"light\"]){--aia-surface: #ffffff;--aia-border: #b0b0b0;--aia-dropdown-border: #e5e7eb;--aia-dropdown-shadow: 0 8px 12px rgba(0, 0, 0, .1);--aia-pill-bg: #bdbdbd;--aia-pill-color: #333539;--aia-pill-font-size: 14px;--aia-option-bg: #eef2ff;--aia-option-color: #505050;--aia-option-color-selected: #000000;--aia-option-font-size: 14px;--aia-written-text-color: #000000;--aia-written-text-font-size: 14px;--aia-caret-color: var(--aia-written-text-color, #000000);--aia-submit-bg: #000000;--aia-submit-color: #ffffff;--aia-color-text-muted: #6b7280;--aia-skeleton-bg: rgba(189, 189, 189, .51);--aia-streak-rgb: 99, 102, 241;--aia-streak-glass-bg: rgba(99, 102, 241, .1);--aia-footer-divider: rgba(176, 176, 176, .4);--aia-footer-hint-color: #505050;--aia-footer-brand-color: #b0b0b0;--aia-footer-badge-border: rgba(189, 189, 189, .51)}:where(.magicx-aia[data-mode=\"dark\"]){--aia-surface: #000000;--aia-border: #505050;--aia-dropdown-border: #484848;--aia-dropdown-shadow: 0 8px 12px rgba(0, 0, 0, .1);--aia-pill-bg: #bdbdbd;--aia-pill-color: #b0b0b0;--aia-pill-font-size: 14px;--aia-option-bg: #323232;--aia-option-color: #b0b0b0;--aia-option-color-selected: #ffffff;--aia-option-font-size: 14px;--aia-written-text-color: #ffffff;--aia-written-text-font-size: 14px;--aia-caret-color: var(--aia-written-text-color, #ffffff);--aia-submit-bg: #ffffff;--aia-submit-color: #000000;--aia-color-text-muted: #c1c4cb;--aia-skeleton-bg: #333539;--aia-streak-rgb: 255, 255, 255;--aia-streak-glass-bg: rgba(255, 255, 255, .1);--aia-footer-divider: rgba(255, 255, 255, .15);--aia-footer-hint-color: #b0b0b0;--aia-footer-brand-color: #505050;--aia-footer-badge-border: #505050}:where(.magicx-aia[data-options-position=\"above\"]) [data-aia-dropdown],[data-aia-dropdown][data-options-position=above]{top:auto;bottom:100%;margin-top:0;margin-bottom:6px}:where(.magicx-aia[data-options-position=\"above\"]) [data-aia-dropdown] .aia-stack,[data-aia-dropdown][data-options-position=above] .aia-stack{flex-direction:column-reverse}:where(.magicx-aia[data-options-position=\"above\"]) [data-aia-dropdown] .magicx-aia-footer,[data-aia-dropdown][data-options-position=above] .magicx-aia-footer{flex-direction:column-reverse}\n", ".magicx-aia-dropdown{position:absolute;left:0;right:0;top:100%;max-width:544px;margin-top:6px;display:flex;flex-direction:column;box-sizing:border-box;padding:10px 8px;overflow:hidden;container-type:inline-size;z-index:10;opacity:0;pointer-events:none;transition:opacity .4s cubic-bezier(.4,0,.2,1);background:var(--aia-surface, #ffffff);border:1px solid var(--aia-dropdown-border, #e5e7eb);border-radius:18px;box-shadow:var(--aia-dropdown-shadow, 0 8px 12px rgba(0, 0, 0, .1))}.magicx-aia-dropdown[data-aia-surface=glass]{background:transparent;border-color:transparent;box-shadow:#fff -3.2px -3.2px 3.2px -3.2px inset,#fff 6.4px 6.4px 1.6px -8px inset,var(--aia-dropdown-bg, transparent) -6.4px 6.4px 1.6px -8px inset,var(--aia-dropdown-bg, transparent) 6.4px -6.4px 1.6px -8px inset,#ffffff26 -1.6px 0 0 -1.6px inset,#ffffff26 0 -1.6px 0 -1.6px inset,#ffffff4d 0 1.6px inset,#ffffff4d 1.6px 0 inset,inset 0 0 30px 5px #0000000d,#00000014 0 0 30px 2px;backdrop-filter:blur(30px)}.magicx-aia-dropdown-visible{opacity:1;pointer-events:auto}.magicx-aia-dropdown-pillbar{overflow-x:auto;overflow-y:hidden;scrollbar-width:none;mask-image:linear-gradient(to right,#000 0,#000 calc(100% - 48px),transparent 100%);-webkit-mask-image:linear-gradient(to right,#000 0,#000 calc(100% - 48px),transparent 100%)}.magicx-aia-dropdown-pillbar::-webkit-scrollbar{display:none}.magicx-aia-footer{display:flex;flex-direction:column;gap:8px;padding:0 8px}.magicx-aia-footer-divider{border-top:1px solid var(--aia-footer-divider, rgba(176, 176, 176, .4))}.magicx-aia-footer-row{display:flex;align-items:center;justify-content:space-between}.magicx-aia-footer-hint-group{display:inline-flex;align-items:center;gap:5px}.magicx-aia-footer-brand-link{display:inline-flex;align-items:center;gap:2px;text-decoration:none;cursor:pointer;transition:opacity .15s ease-out}.magicx-aia-footer-brand-link:hover{opacity:.7}.magicx-aia-footer-key{display:inline-flex;align-items:center;justify-content:center;min-width:30px;height:22px;padding:2px 6px;border:.5px solid var(--aia-footer-hint-color, #505050);border-radius:5px;font-family:inherit;font-size:11px;line-height:18px;color:var(--aia-footer-hint-color, #505050)}.magicx-aia-footer-hint{font-family:inherit;font-size:11px;line-height:18px;color:var(--aia-footer-hint-color, #505050)}.magicx-aia-footer-brand{font-family:inherit;font-size:10px;line-height:18px;color:var(--aia-footer-brand-color, #b0b0b0)}.magicx-aia-footer-badge{display:inline-flex;align-items:center;height:23px;padding:2.5px 5.5px;border:.5px solid var(--aia-footer-badge-border, rgba(189, 189, 189, .51));border-radius:999px;font-family:inherit;font-size:10px;line-height:18px;color:var(--aia-footer-brand-color, #b0b0b0)}.magicx-aia-dropdown-skeleton-bars{display:flex;flex-direction:column;gap:20px;padding:7px 8px}.magicx-aia-dropdown-skeleton-bar{display:block;height:14px;border-radius:999px;background:var(--aia-skeleton-bg, var(--aia-pill-bg, rgba(189, 189, 189, .51)));opacity:.5;animation:aiaDropdownSkeletonPulse 1.4s ease-in-out infinite}.magicx-aia-dropdown-skeleton-bar:nth-child(2){animation-delay:.15s}.magicx-aia-dropdown-skeleton-bar:nth-child(3){animation-delay:.3s}@keyframes aiaDropdownSkeletonPulse{0%,to{opacity:.5}50%{opacity:.25}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "component", type: PillListComponent, selector: "aia-pill-list", inputs: ["pills", "activePillIndex", "rounded", "loading", "activeSelected"], outputs: ["selectPill"] }, { kind: "component", type: SuggestionGridComponent, selector: "aia-suggestion-grid", inputs: ["options", "activeIndex", "listboxId", "loading"], outputs: ["select", "highlight"] }, { kind: "component", type: StackComponent, selector: "aia-stack", inputs: ["space", "align"] }, { kind: "component", type: ClusterComponent, selector: "aia-cluster", inputs: ["gap", "align", "justify", "noWrap", "inline"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
114
169
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: AIAutocompleteDropdownComponent, decorators: [{
115
170
  type: Component,
116
171
  args: [{ selector: "ai-autocomplete-dropdown", standalone: true, imports: [
@@ -119,12 +174,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
119
174
  SuggestionGridComponent,
120
175
  StackComponent,
121
176
  ClusterComponent,
122
- ], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, template: "<div\n *ngIf=\"vm$ | async as vm\"\n [id]=\"controller.listboxId\"\n role=\"listbox\"\n data-aia-dropdown=\"\"\n [attr.data-aia-loading]=\"vm.isLoading ? '' : null\"\n [class]=\"className ? 'magicx-aia-dropdown ' + className : 'magicx-aia-dropdown'\"\n [class.magicx-aia-dropdown-visible]=\"vm.isVisible\"\n (mousedown)=\"preventBlur($event)\"\n>\n <aia-stack space=\"8px\">\n <aia-cluster\n *ngIf=\"vm.showsPills\"\n class=\"magicx-aia-dropdown-pillbar\"\n data-aia-pillbar=\"\"\n [noWrap]=\"true\"\n >\n <aia-pill-list\n [pills]=\"vm.pills\"\n [activePillIndex]=\"0\"\n [activeSelected]=\"vm.isActivePillSelected\"\n [rounded]=\"true\"\n [loading]=\"vm.isLoading\"\n (selectPill)=\"onPillClick($event)\"\n ></aia-pill-list>\n </aia-cluster>\n\n <aia-suggestion-grid\n *ngIf=\"vm.showsOptions\"\n [options]=\"vm.options\"\n [activeIndex]=\"vm.activeIndex\"\n [listboxId]=\"controller.listboxId\"\n [loading]=\"vm.isLoading\"\n (select)=\"onSelect($event)\"\n (highlight)=\"onHighlight($event)\"\n ></aia-suggestion-grid>\n\n <div\n *ngIf=\"vm.showsFallbackSkeleton\"\n class=\"magicx-aia-dropdown-skeleton-bars\"\n data-aia-skeleton-bars=\"\"\n >\n <span\n *ngFor=\"let w of fallbackSkeletonBarWidths; trackBy: trackByWidth\"\n class=\"magicx-aia-dropdown-skeleton-bar\"\n [style.width.px]=\"w\"\n ></span>\n </div>\n\n <footer class=\"magicx-aia-footer\" data-aia-footer=\"\">\n <div class=\"magicx-aia-footer-divider\"></div>\n <div class=\"magicx-aia-footer-row\">\n <span class=\"magicx-aia-footer-hint-group\">\n <kbd class=\"magicx-aia-footer-key\">{{ vm.footerKey }}</kbd>\n <span class=\"magicx-aia-footer-hint\">{{ vm.footerHint }}</span>\n </span>\n <a\n class=\"magicx-aia-footer-brand-link\"\n href=\"https://ai-autocomplete.com\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >\n <span class=\"magicx-aia-footer-brand\">AI</span>\n <span class=\"magicx-aia-footer-badge\">Autocomplete</span>\n </a>\n </div>\n </footer>\n </aia-stack>\n</div>\n", styles: [".magicx-aia-dropdown{position:absolute;left:0;right:0;top:100%;max-width:544px;margin-top:6px;display:flex;flex-direction:column;box-sizing:border-box;padding:10px 8px;overflow:hidden;container-type:inline-size;z-index:10;opacity:0;pointer-events:none;transition:opacity .4s cubic-bezier(.4,0,.2,1);background:var(--aia-surface, #ffffff);border:1px solid var(--aia-dropdown-border, #e5e7eb);border-radius:18px;box-shadow:var(--aia-dropdown-shadow, 0 8px 12px rgba(0, 0, 0, .1))}.magicx-aia-dropdown[data-aia-surface=glass]{background:transparent;border-color:transparent;box-shadow:#fff -3.2px -3.2px 3.2px -3.2px inset,#fff 6.4px 6.4px 1.6px -8px inset,var(--aia-dropdown-bg, transparent) -6.4px 6.4px 1.6px -8px inset,var(--aia-dropdown-bg, transparent) 6.4px -6.4px 1.6px -8px inset,#ffffff26 -1.6px 0 0 -1.6px inset,#ffffff26 0 -1.6px 0 -1.6px inset,#ffffff4d 0 1.6px inset,#ffffff4d 1.6px 0 inset,inset 0 0 30px 5px #0000000d,#00000014 0 0 30px 2px;backdrop-filter:blur(30px)}.magicx-aia-dropdown-visible{opacity:1;pointer-events:auto}.magicx-aia-dropdown-pillbar{overflow-x:auto;overflow-y:hidden;scrollbar-width:none;mask-image:linear-gradient(to right,#000 0,#000 calc(100% - 48px),transparent 100%);-webkit-mask-image:linear-gradient(to right,#000 0,#000 calc(100% - 48px),transparent 100%)}.magicx-aia-dropdown-pillbar::-webkit-scrollbar{display:none}.magicx-aia-footer{display:flex;flex-direction:column;gap:8px;padding:0 8px}.magicx-aia-footer-divider{border-top:1px solid var(--aia-footer-divider, rgba(176, 176, 176, .4))}.magicx-aia-footer-row{display:flex;align-items:center;justify-content:space-between}.magicx-aia-footer-hint-group{display:inline-flex;align-items:center;gap:5px}.magicx-aia-footer-brand-link{display:inline-flex;align-items:center;gap:2px;text-decoration:none;cursor:pointer;transition:opacity .15s ease-out}.magicx-aia-footer-brand-link:hover{opacity:.7}.magicx-aia-footer-key{display:inline-flex;align-items:center;justify-content:center;min-width:30px;height:22px;padding:2px 6px;border:.5px solid var(--aia-footer-hint-color, #505050);border-radius:5px;font-family:inherit;font-size:11px;line-height:18px;color:var(--aia-footer-hint-color, #505050)}.magicx-aia-footer-hint{font-family:inherit;font-size:11px;line-height:18px;color:var(--aia-footer-hint-color, #505050)}.magicx-aia-footer-brand{font-family:inherit;font-size:10px;line-height:18px;color:var(--aia-footer-brand-color, #b0b0b0)}.magicx-aia-footer-badge{display:inline-flex;align-items:center;height:23px;padding:2.5px 5.5px;border:.5px solid var(--aia-footer-badge-border, rgba(189, 189, 189, .51));border-radius:999px;font-family:inherit;font-size:10px;line-height:18px;color:var(--aia-footer-brand-color, #b0b0b0)}.magicx-aia-dropdown-skeleton-bars{display:flex;flex-direction:column;gap:20px;padding:7px 8px}.magicx-aia-dropdown-skeleton-bar{display:block;height:14px;border-radius:999px;background:var(--aia-skeleton-bg, var(--aia-pill-bg, rgba(189, 189, 189, .51)));opacity:.5;animation:aiaDropdownSkeletonPulse 1.4s ease-in-out infinite}.magicx-aia-dropdown-skeleton-bar:nth-child(2){animation-delay:.15s}.magicx-aia-dropdown-skeleton-bar:nth-child(3){animation-delay:.3s}@keyframes aiaDropdownSkeletonPulse{0%,to{opacity:.5}50%{opacity:.25}}\n"] }]
177
+ ], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, template: "<div\n *ngIf=\"vm$ | async as vm\"\n [id]=\"controller.listboxId\"\n role=\"listbox\"\n data-aia-dropdown=\"\"\n [attr.data-aia-loading]=\"vm.isLoading ? '' : null\"\n [attr.data-mode]=\"resolvedMode\"\n [attr.data-options-position]=\"vm.optionsPosition\"\n [class]=\"rootClass\"\n [class.magicx-aia-dropdown-visible]=\"vm.isVisible\"\n (mousedown)=\"preventBlur($event)\"\n>\n <aia-stack space=\"8px\">\n <aia-cluster\n *ngIf=\"vm.showsPills\"\n class=\"magicx-aia-dropdown-pillbar\"\n data-aia-pillbar=\"\"\n [noWrap]=\"true\"\n >\n <aia-pill-list\n [pills]=\"vm.pills\"\n [activePillIndex]=\"0\"\n [activeSelected]=\"vm.isActivePillSelected\"\n [rounded]=\"true\"\n [loading]=\"vm.isLoading\"\n (selectPill)=\"onPillClick($event)\"\n ></aia-pill-list>\n </aia-cluster>\n\n <aia-suggestion-grid\n *ngIf=\"vm.showsOptions\"\n [options]=\"vm.options\"\n [activeIndex]=\"vm.activeIndex\"\n [listboxId]=\"controller.listboxId\"\n [loading]=\"vm.isLoading\"\n (select)=\"onSelect($event)\"\n (highlight)=\"onHighlight($event)\"\n ></aia-suggestion-grid>\n\n <div\n *ngIf=\"vm.showsFallbackSkeleton\"\n class=\"magicx-aia-dropdown-skeleton-bars\"\n data-aia-skeleton-bars=\"\"\n >\n <span\n *ngFor=\"let w of fallbackSkeletonBarWidths; trackBy: trackByWidth\"\n class=\"magicx-aia-dropdown-skeleton-bar\"\n [style.width.px]=\"w\"\n ></span>\n </div>\n\n <footer class=\"magicx-aia-footer\" data-aia-footer=\"\">\n <div class=\"magicx-aia-footer-divider\"></div>\n <div class=\"magicx-aia-footer-row\">\n <span class=\"magicx-aia-footer-hint-group\">\n <kbd class=\"magicx-aia-footer-key\">{{ vm.footerKey }}</kbd>\n <span class=\"magicx-aia-footer-hint\">{{ vm.footerHint }}</span>\n </span>\n <a\n class=\"magicx-aia-footer-brand-link\"\n href=\"https://ai-autocomplete.com\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >\n <span class=\"magicx-aia-footer-brand\">AI</span>\n <span class=\"magicx-aia-footer-badge\">Autocomplete</span>\n </a>\n </div>\n </footer>\n </aia-stack>\n</div>\n", styles: [":where(.magicx-aia,.magicx-aia *,.magicx-aia *::before,.magicx-aia *::after){box-sizing:border-box}:where(.magicx-aia),:where(.magicx-aia[data-mode=\"light\"]){--aia-surface: #ffffff;--aia-border: #b0b0b0;--aia-dropdown-border: #e5e7eb;--aia-dropdown-shadow: 0 8px 12px rgba(0, 0, 0, .1);--aia-pill-bg: #bdbdbd;--aia-pill-color: #333539;--aia-pill-font-size: 14px;--aia-option-bg: #eef2ff;--aia-option-color: #505050;--aia-option-color-selected: #000000;--aia-option-font-size: 14px;--aia-written-text-color: #000000;--aia-written-text-font-size: 14px;--aia-caret-color: var(--aia-written-text-color, #000000);--aia-submit-bg: #000000;--aia-submit-color: #ffffff;--aia-color-text-muted: #6b7280;--aia-skeleton-bg: rgba(189, 189, 189, .51);--aia-streak-rgb: 99, 102, 241;--aia-streak-glass-bg: rgba(99, 102, 241, .1);--aia-footer-divider: rgba(176, 176, 176, .4);--aia-footer-hint-color: #505050;--aia-footer-brand-color: #b0b0b0;--aia-footer-badge-border: rgba(189, 189, 189, .51)}:where(.magicx-aia[data-mode=\"dark\"]){--aia-surface: #000000;--aia-border: #505050;--aia-dropdown-border: #484848;--aia-dropdown-shadow: 0 8px 12px rgba(0, 0, 0, .1);--aia-pill-bg: #bdbdbd;--aia-pill-color: #b0b0b0;--aia-pill-font-size: 14px;--aia-option-bg: #323232;--aia-option-color: #b0b0b0;--aia-option-color-selected: #ffffff;--aia-option-font-size: 14px;--aia-written-text-color: #ffffff;--aia-written-text-font-size: 14px;--aia-caret-color: var(--aia-written-text-color, #ffffff);--aia-submit-bg: #ffffff;--aia-submit-color: #000000;--aia-color-text-muted: #c1c4cb;--aia-skeleton-bg: #333539;--aia-streak-rgb: 255, 255, 255;--aia-streak-glass-bg: rgba(255, 255, 255, .1);--aia-footer-divider: rgba(255, 255, 255, .15);--aia-footer-hint-color: #b0b0b0;--aia-footer-brand-color: #505050;--aia-footer-badge-border: #505050}:where(.magicx-aia[data-options-position=\"above\"]) [data-aia-dropdown],[data-aia-dropdown][data-options-position=above]{top:auto;bottom:100%;margin-top:0;margin-bottom:6px}:where(.magicx-aia[data-options-position=\"above\"]) [data-aia-dropdown] .aia-stack,[data-aia-dropdown][data-options-position=above] .aia-stack{flex-direction:column-reverse}:where(.magicx-aia[data-options-position=\"above\"]) [data-aia-dropdown] .magicx-aia-footer,[data-aia-dropdown][data-options-position=above] .magicx-aia-footer{flex-direction:column-reverse}\n", ".magicx-aia-dropdown{position:absolute;left:0;right:0;top:100%;max-width:544px;margin-top:6px;display:flex;flex-direction:column;box-sizing:border-box;padding:10px 8px;overflow:hidden;container-type:inline-size;z-index:10;opacity:0;pointer-events:none;transition:opacity .4s cubic-bezier(.4,0,.2,1);background:var(--aia-surface, #ffffff);border:1px solid var(--aia-dropdown-border, #e5e7eb);border-radius:18px;box-shadow:var(--aia-dropdown-shadow, 0 8px 12px rgba(0, 0, 0, .1))}.magicx-aia-dropdown[data-aia-surface=glass]{background:transparent;border-color:transparent;box-shadow:#fff -3.2px -3.2px 3.2px -3.2px inset,#fff 6.4px 6.4px 1.6px -8px inset,var(--aia-dropdown-bg, transparent) -6.4px 6.4px 1.6px -8px inset,var(--aia-dropdown-bg, transparent) 6.4px -6.4px 1.6px -8px inset,#ffffff26 -1.6px 0 0 -1.6px inset,#ffffff26 0 -1.6px 0 -1.6px inset,#ffffff4d 0 1.6px inset,#ffffff4d 1.6px 0 inset,inset 0 0 30px 5px #0000000d,#00000014 0 0 30px 2px;backdrop-filter:blur(30px)}.magicx-aia-dropdown-visible{opacity:1;pointer-events:auto}.magicx-aia-dropdown-pillbar{overflow-x:auto;overflow-y:hidden;scrollbar-width:none;mask-image:linear-gradient(to right,#000 0,#000 calc(100% - 48px),transparent 100%);-webkit-mask-image:linear-gradient(to right,#000 0,#000 calc(100% - 48px),transparent 100%)}.magicx-aia-dropdown-pillbar::-webkit-scrollbar{display:none}.magicx-aia-footer{display:flex;flex-direction:column;gap:8px;padding:0 8px}.magicx-aia-footer-divider{border-top:1px solid var(--aia-footer-divider, rgba(176, 176, 176, .4))}.magicx-aia-footer-row{display:flex;align-items:center;justify-content:space-between}.magicx-aia-footer-hint-group{display:inline-flex;align-items:center;gap:5px}.magicx-aia-footer-brand-link{display:inline-flex;align-items:center;gap:2px;text-decoration:none;cursor:pointer;transition:opacity .15s ease-out}.magicx-aia-footer-brand-link:hover{opacity:.7}.magicx-aia-footer-key{display:inline-flex;align-items:center;justify-content:center;min-width:30px;height:22px;padding:2px 6px;border:.5px solid var(--aia-footer-hint-color, #505050);border-radius:5px;font-family:inherit;font-size:11px;line-height:18px;color:var(--aia-footer-hint-color, #505050)}.magicx-aia-footer-hint{font-family:inherit;font-size:11px;line-height:18px;color:var(--aia-footer-hint-color, #505050)}.magicx-aia-footer-brand{font-family:inherit;font-size:10px;line-height:18px;color:var(--aia-footer-brand-color, #b0b0b0)}.magicx-aia-footer-badge{display:inline-flex;align-items:center;height:23px;padding:2.5px 5.5px;border:.5px solid var(--aia-footer-badge-border, rgba(189, 189, 189, .51));border-radius:999px;font-family:inherit;font-size:10px;line-height:18px;color:var(--aia-footer-brand-color, #b0b0b0)}.magicx-aia-dropdown-skeleton-bars{display:flex;flex-direction:column;gap:20px;padding:7px 8px}.magicx-aia-dropdown-skeleton-bar{display:block;height:14px;border-radius:999px;background:var(--aia-skeleton-bg, var(--aia-pill-bg, rgba(189, 189, 189, .51)));opacity:.5;animation:aiaDropdownSkeletonPulse 1.4s ease-in-out infinite}.magicx-aia-dropdown-skeleton-bar:nth-child(2){animation-delay:.15s}.magicx-aia-dropdown-skeleton-bar:nth-child(3){animation-delay:.3s}@keyframes aiaDropdownSkeletonPulse{0%,to{opacity:.5}50%{opacity:.25}}\n"] }]
123
178
  }], propDecorators: { controller: [{
124
179
  type: Input
125
180
  }], showPills: [{
126
181
  type: Input
127
182
  }], className: [{
128
183
  type: Input
184
+ }], mode: [{
185
+ type: Input
129
186
  }] } });
130
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWktYXV0b2NvbXBsZXRlLWRyb3Bkb3duLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvYWktYXV0b2NvbXBsZXRlLWRyb3Bkb3duL2FpLWF1dG9jb21wbGV0ZS1kcm9wZG93bi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9zcmMvbGliL2FpLWF1dG9jb21wbGV0ZS1kcm9wZG93bi9haS1hdXRvY29tcGxldGUtZHJvcGRvd24uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULEtBQUssRUFJTCxpQkFBaUIsR0FDbEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUNMLGFBQWEsR0FHZCxNQUFNLHFDQUFxQyxDQUFDO0FBQzdDLE9BQU8sRUFBRSxlQUFlLEVBQUUsYUFBYSxFQUFtQixNQUFNLE1BQU0sQ0FBQztBQUN2RSxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFckMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDeEUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ3BFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDJDQUEyQyxDQUFDO0FBQzlFLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLHVEQUF1RCxDQUFDOzs7QUFtQmhHOzs7Ozs7Ozs7Ozs7OztHQWNHO0FBZ0JILE1BQU0sT0FBTywrQkFBK0I7SUFmNUM7UUFrQkUsMkVBQTJFO1FBQ2xFLGNBQVMsR0FBRyxJQUFJLENBQUM7UUFJMUIsK0VBQStFO1FBQ3RFLDhCQUF5QixHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztRQWVyRCw4RUFBOEU7UUFD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QUFLO2dCQUVHLFNBQVM7c0JBQWpCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tIFwiQGFuZ3VsYXIvY29tbW9uXCI7XG5pbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ29tcG9uZW50LFxuICBJbnB1dCxcbiAgdHlwZSBPbkNoYW5nZXMsXG4gIHR5cGUgT25Jbml0LFxuICB0eXBlIFNpbXBsZUNoYW5nZXMsXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHtcbiAgZ2V0Rm9vdGVySGludCxcbiAgdHlwZSBTdWdnZXN0aW9uLFxuICB0eXBlIFN1Z2dlc3Rpb25PcHRpb24sXG59IGZyb20gXCJAbWFnaWN4LWVuZy9haS1hdXRvY29tcGxldGUtdmFuaWxsYVwiO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBjb21iaW5lTGF0ZXN0LCB0eXBlIE9ic2VydmFibGUgfSBmcm9tIFwicnhqc1wiO1xuaW1wb3J0IHsgbWFwIH0gZnJvbSBcInJ4anMvb3BlcmF0b3JzXCI7XG5pbXBvcnQgdHlwZSB7IEFJQXV0b2NvbXBsZXRlQ29udHJvbGxlciB9IGZyb20gXCIuLi9jb250cm9sbGVyL2FpLWF1dG9jb21wbGV0ZS5jb250cm9sbGVyXCI7XG5pbXBvcnQgeyBDbHVzdGVyQ29tcG9uZW50IH0gZnJvbSBcIi4uL2ludGVybmFsL2xheW91dC9jbHVzdGVyLmNvbXBvbmVudFwiO1xuaW1wb3J0IHsgU3RhY2tDb21wb25lbnQgfSBmcm9tIFwiLi4vaW50ZXJuYWwvbGF5b3V0L3N0YWNrLmNvbXBvbmVudFwiO1xuaW1wb3J0IHsgUGlsbExpc3RDb21wb25lbnQgfSBmcm9tIFwiLi4vaW50ZXJuYWwvcGlsbC1saXN0L3BpbGwtbGlzdC5jb21wb25lbnRcIjtcbmltcG9ydCB7IFN1Z2dlc3Rpb25HcmlkQ29tcG9uZW50IH0gZnJvbSBcIi4uL2ludGVybmFsL3N1Z2dlc3Rpb24tZ3JpZC9zdWdnZXN0aW9uLWdyaWQuY29tcG9uZW50XCI7XG5cbmludGVyZmFjZSBEcm9wZG93blZtIHtcbiAgcGlsbHM6IFN1Z2dlc3Rpb25bXTtcbiAgb3B0aW9uczogU3VnZ2VzdGlvbk9wdGlvbltdO1xuICBhY3RpdmVJbmRleDogbnVtYmVyO1xuICBpc0FjdGl2ZVBpbGxTZWxlY3RlZDogYm9vbGVhbjtcbiAgaXNMb2FkaW5nOiBib29sZWFuO1xuICBzaG93c1BpbGxzOiBib29sZWFuO1xuICBzaG93c09wdGlvbnM6IGJvb2xlYW47XG4gIHNob3dzRmFsbGJhY2tTa2VsZXRvbjogYm9vbGVhbjtcbiAgaXNWaXNpYmxlOiBib29sZWFuO1xuICBmb290ZXJLZXk6IHN0cmluZztcbiAgZm9vdGVySGludDogc3RyaW5nO1xufVxuXG4vKiogVGhlIGNvbnRlbnQtYmVhcmluZyBmaWVsZHMgb2YgdGhlIHZpZXctbW9kZWwgKGV2ZXJ5dGhpbmcgYnV0IGBpc1Zpc2libGVgKS4gKi9cbnR5cGUgRHJvcGRvd25Db250ZW50ID0gT21pdDxEcm9wZG93blZtLCBcImlzVmlzaWJsZVwiPjtcblxuLyoqXG4gKiBUaWVyIDIgZHJvcGRvd24gY29tcG9uZW50IOKAlCB0aGUgQW5ndWxhciBlcXVpdmFsZW50IG9mIFJlYWN0J3NcbiAqIGA8QUlBdXRvY29tcGxldGVEcm9wZG93biAvPmAuIFJlbmRlcnMgdGhlIHBpbGxiYXIsIG9wdGlvbnMgZ3JpZCwgYW5kXG4gKiBsb2FkaW5nIHNrZWxldG9uIGJhc2VkIG9uIHRoZSBzdXBwbGllZCBjb250cm9sbGVyJ3MgYGRyb3Bkb3duJGAgc25hcHNob3QuXG4gKlxuICogYGBgaHRtbFxuICogPGFpLWF1dG9jb21wbGV0ZS1kcm9wZG93biBbY29udHJvbGxlcl09XCJhY1wiPjwvYWktYXV0b2NvbXBsZXRlLWRyb3Bkb3duPlxuICogYGBgXG4gKlxuICogQWxsIGFjdGlvbnMgKHBpbGwgY2xpY2ssIG9wdGlvbiBzZWxlY3QsIG9wdGlvbiBoaWdobGlnaHQpIGFyZSBmb3J3YXJkZWQgdG9cbiAqIHRoZSBjb250cm9sbGVyLiBDb25zdW1lcnMgd2hvIG5lZWQgdG8gb2JzZXJ2ZSB0aGVzZSBldmVudHMgY2FuIHN1YnNjcmliZVxuICogdG8gdGhlIGNvbnRyb2xsZXIncyBwZXItZmllbGQgb2JzZXJ2YWJsZXMuXG4gKlxuICogQHB1YmxpY1xuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6IFwiYWktYXV0b2NvbXBsZXRlLWRyb3Bkb3duXCIsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtcbiAgICBDb21tb25Nb2R1bGUsXG4gICAgUGlsbExpc3RDb21wb25lbnQsXG4gICAgU3VnZ2VzdGlvbkdyaWRDb21wb25lbnQsXG4gICAgU3RhY2tDb21wb25lbnQsXG4gICAgQ2x1c3RlckNvbXBvbmVudCxcbiAgXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gIHRlbXBsYXRlVXJsOiBcIi4vYWktYXV0b2NvbXBsZXRlLWRyb3Bkb3duLmNvbXBvbmVudC5odG1sXCIsXG4gIHN0eWxlVXJsczogW1wiLi9haS1hdXRvY29tcGxldGUtZHJvcGRvd24uY29tcG9uZW50LmNzc1wiXSxcbn0pXG5leHBvcnQgY2xhc3MgQUlBdXRvY29tcGxldGVEcm9wZG93bkNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzIHtcbiAgLyoqIFRoZSBjb250cm9sbGVyIHRoYXQgb3ducyB0aGUgYXV0b2NvbXBsZXRlIHN0YXRlLiBSZXF1aXJlZC4gKi9cbiAgQElucHV0KCkgY29udHJvbGxlciE6IEFJQXV0b2NvbXBsZXRlQ29udHJvbGxlcjtcbiAgLyoqIFdoZXRoZXIgdG8gcmVuZGVyIHRoZSBwaWxsYmFyIGFib3ZlIHRoZSBvcHRpb25zIGdyaWQuIERlZmF1bHQ6IHRydWUuICovXG4gIEBJbnB1dCgpIHNob3dQaWxscyA9IHRydWU7XG4gIC8qKiBPcHRpb25hbCBDU1MgY2xhc3MgYXBwbGllZCB0byB0aGUgZHJvcGRvd24gcm9vdC4gKi9cbiAgQElucHV0KCkgY2xhc3NOYW1lPzogc3RyaW5nO1xuXG4gIC8qKiBGYWxsYmFjayBza2VsZXRvbi1iYXIgd2lkdGhzIHVzZWQgd2hlbiBsb2FkaW5nIHdpdGggemVybyBjYWNoZWQgb3B0aW9ucy4gKi9cbiAgcmVhZG9ubHkgZmFsbGJhY2tTa2VsZXRvbkJhcldpZHRocyA9IFsxNTksIDExOSwgMTY0XTtcblxuICAvKipcbiAgICogVmlldy1tb2RlbCBkZXJpdmVkIGZyb20gdGhlIGNvbnRyb2xsZXIncyBgZHJvcGRvd24kYC4gQWRkcyB0aHJlZSBib29sZWFuc1xuICAgKiAoYHNob3dzUGlsbHNgLCBgc2hvd3NPcHRpb25zYCwgYHNob3dzRmFsbGJhY2tTa2VsZXRvbmAsIGBpc1Zpc2libGVgKSB0aGF0XG4gICAqIGtlZXAgdGVtcGxhdGUtbGV2ZWwgbG9naWMgdG8gYSBwcm9wZXJ0eSByZWFkIHBlciDCpzE5LjYuXG4gICAqXG4gICAqIEluaXRpYWxpemVkIG9uY2UgaW4gYG5nT25Jbml0YCDigJQgbXVzdCBOT1QgYmUgYSBnZXR0ZXIuIEEgZ2V0dGVyIHJldHVybnMgYVxuICAgKiBmcmVzaCBgT2JzZXJ2YWJsZWAgaW5zdGFuY2Ugb24gZXZlcnkgcHJvcGVydHkgcmVhZDsgd2l0aCBPblB1c2ggKyBgYXN5bmNgXG4gICAqIHBpcGUgdGhhdCBtZWFucyBlYWNoIGNoYW5nZS1kZXRlY3Rpb24gY3ljbGUgdW5zdWJzY3JpYmVzL3Jlc3Vic2NyaWJlcyxcbiAgICogY2F1c2luZyB0aGUgYCpuZ0lmPVwidm0kIHwgYXN5bmMgYXMgdm1cImAgcm9vdCB0byBicmllZmx5IHJlc29sdmUgYG51bGxgXG4gICAqIGFuZCBmbGlja2VyIHRoZSBlbnRpcmUgZHJvcGRvd24gRE9NLlxuICAgKi9cbiAgdm0kITogT2JzZXJ2YWJsZTxEcm9wZG93blZtPjtcblxuICAvLyBCcmlkZ2UgZm9yIHRoZSBASW5wdXQgYHNob3dQaWxsc2AgaW50byB0aGUgcmVhY3RpdmUgcGlwZWxpbmUuIFdpdGhvdXQgdGhpcyxcbiAgLy8gY2hhbmdpbmcgdGhlIGlucHV0IGFmdGVyIGluaXQgd291bGRuJ3QgdHJpZ2dlciBhIG5ldyB2bSBlbWlzc2lvbiB1bnRpbCB0aGVcbiAgLy8gbmV4dCBjb250cm9sbGVyLmRyb3Bkb3duJCB0aWNrIOKAlCBhbmQgd2UnZCBsb3NlIHRoZSBzaG93UGlsbHMgdXBkYXRlIGVudGlyZWx5XG4gIC8vIGlmIHRoZSBjb250cm9sbGVyIGlzIGlkbGUuIFVwZGF0ZWQgZnJvbSBuZ09uQ2hhbmdlcyBiZWxvdy5cbiAgcHJpdmF0ZSByZWFkb25seSBzaG93UGlsbHMkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPih0cnVlKTtcblxuICAvLyBMYXN0IGNvbnRlbnQgZW1pdHRlZCB3aGlsZSB0aGUgZHJvcGRvd24gd2FzIHZpc2libGUuIFJldXNlZCBkdXJpbmcgdGhlXG4gIC8vIGNsb3NlIGZhZGUgc28gdGhlIHBvcHVsYXRlZCBkcm9wZG93biBmYWRlcyBvdXQgYXMgb25lIOKAlCBzZWUgaW5pdFZtLlxuICBwcml2YXRlIGxhc3RWaXNpYmxlQ29udGVudDogRHJvcGRvd25Db250ZW50IHwgbnVsbCA9IG51bGw7XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgLy8gU2VlZCBzaG93UGlsbHMkIGZyb20gdGhlIGlucHV0J3MgcmVzb2x2ZWQgdmFsdWUgYXQgaW5pdCB0aW1lLlxuICAgIHRoaXMuc2hvd1BpbGxzJC5uZXh0KHRoaXMuc2hvd1BpbGxzKTtcbiAgICB0aGlzLmluaXRWbSgpO1xuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGlmIChjaGFuZ2VzW1wic2hvd1BpbGxzXCJdKSB7XG4gICAgICB0aGlzLnNob3dQaWxscyQubmV4dCh0aGlzLnNob3dQaWxscyk7XG4gICAgfVxuICAgIC8vIFJlLWJpbmQgdm0kIHdoZW4gdGhlIGNvbnRyb2xsZXIgQElucHV0IGlzIHN3YXBwZWQgKGUuZy4gYSBtdWx0aS1zdGVwIGZvcm1cbiAgICAvLyB0b2dnbGluZyBiZXR3ZWVuIGNvbnRyb2xsZXJzKS4gV2l0aG91dCB0aGlzLCB2bSQgc3RheXMgc3Vic2NyaWJlZCB0byB0aGVcbiAgICAvLyBwcmV2aW91cyBjb250cm9sbGVyJ3MgZHJvcGRvd24kIOKAlCByZW5kZXJpbmcgc3RhbGUgb3B0aW9ucywgb3IsIGlmIHRoYXRcbiAgICAvLyBjb250cm9sbGVyIHdhcyBkZXN0cm95KCktZWQsIHJlY2VpdmluZyBhIGNvbXBsZXRpb24gdGhhdCBjb2xsYXBzZXMgdGhlXG4gICAgLy8gZHJvcGRvd24gcGVybWFuZW50bHkuIFNraXAgdGhlIGZpcnN0IGNoYW5nZTogbmdPbkNoYW5nZXMgZmlyZXMgYmVmb3JlXG4gICAgLy8gbmdPbkluaXQsIHdoaWNoIG93bnMgdGhlIGluaXRpYWwgY3JlYXRpb24uXG4gICAgaWYgKGNoYW5nZXNbXCJjb250cm9sbGVyXCJdICYmICFjaGFuZ2VzW1wiY29udHJvbGxlclwiXS5maXJzdENoYW5nZSAmJiB0aGlzLmNvbnRyb2xsZXIpIHtcbiAgICAgIHRoaXMuaW5pdFZtKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqIEJ1aWxkIHRoZSB2aWV3LW1vZGVsIHN0cmVhbSBmcm9tIHRoZSBjdXJyZW50IGNvbnRyb2xsZXIgKyBzaG93UGlsbHMkLiAqL1xuICBwcml2YXRlIGluaXRWbSgpOiB2b2lkIHtcbiAgICB0aGlzLnZtJCA9IGNvbWJpbmVMYXRlc3QoW3RoaXMuY29udHJvbGxlci5kcm9wZG93biQsIHRoaXMuc2hvd1BpbGxzJF0pLnBpcGUoXG4gICAgICBtYXAoKFtkZCwgc2hvd1BpbGxzXSkgPT4ge1xuICAgICAgICBjb25zdCBvcHRpb25zID0gZGQuc3VnZ2VzdGlvbnNbMF0/Lm9wdGlvbnMgPz8gW107XG4gICAgICAgIGNvbnN0IHNob3dzUGlsbHMgPSBzaG93UGlsbHMgJiYgKGRkLnBpbGxzLmxlbmd0aCA+IDAgfHwgZGQuaXNMb2FkaW5nKTtcbiAgICAgICAgY29uc3Qgc2hvd3NPcHRpb25zID0gb3B0aW9ucy5sZW5ndGggPiAwO1xuICAgICAgICBjb25zdCBzaG93c0ZhbGxiYWNrU2tlbGV0b24gPSBkZC5pc0xvYWRpbmcgJiYgIXNob3dzT3B0aW9ucztcbiAgICAgICAgY29uc3QgaXNWaXNpYmxlID0gZGQuaXNPcGVuICYmIChzaG93c09wdGlvbnMgfHwgc2hvd3NQaWxscyB8fCBkZC5pc0xvYWRpbmcpO1xuXG4gICAgICAgIC8vIFdoaWxlIGNsb3NpbmcsIHJldXNlIHRoZSBsYXN0IHZpc2libGUgY29udGVudCBzbyB0aGUgcG9wdWxhdGVkXG4gICAgICAgIC8vIGRyb3Bkb3duIGZhZGVzIG91dCBhcyBvbmUuIE90aGVyd2lzZSB0aGUgcGlsbHMvb3B0aW9ucyB2YW5pc2ggdGhlXG4gICAgICAgIC8vIGluc3RhbnQgdGhlIHN0YXRlIGVtcHRpZXMgKGUuZy4gc2tpcHBpbmcgdGhlIGxhc3QgcGlsbCB3aXRoIOKGkiksXG4gICAgICAgIC8vIGxlYXZpbmcgdGhlIGFsd2F5cy1wcmVzZW50IGZvb3RlciBhbG9uZSBmb3IgYSBmbGFzaCBvZiBhIGZvb3Rlci1vbmx5XG4gICAgICAgIC8vIFwibm8gb3B0aW9uc1wiIGJveCBtaWQtZmFkZS4gT25seSBgaXNWaXNpYmxlYCB0cmFja3MgbGl2ZSBzdGF0ZSB0b1xuICAgICAgICAvLyBkcml2ZSB0aGUgb3BhY2l0eSB0cmFuc2l0aW9uLlxuICAgICAgICBpZiAoIWlzVmlzaWJsZSAmJiB0aGlzLmxhc3RWaXNpYmxlQ29udGVudCkge1xuICAgICAgICAgIHJldHVybiB7IC4uLnRoaXMubGFzdFZpc2libGVDb250ZW50LCBpc1Zpc2libGU6IGZhbHNlIH07XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBvcHRpb25IaWdobGlnaHRlZCA9XG4gICAgICAgICAgZGQuYWN0aXZlSW5kZXggPj0gMCAmJiBCb29sZWFuKG9wdGlvbnNbZGQuYWN0aXZlSW5kZXhdPy5pc190YXBwYWJsZSk7XG4gICAgICAgIGNvbnN0IHsga2V5OiBmb290ZXJLZXksIGhpbnQ6IGZvb3RlckhpbnQgfSA9IGdldEZvb3RlckhpbnQoXG4gICAgICAgICAgZGQuaGFzVGFiYmVkVG9IaWdobGlnaHQsXG4gICAgICAgICAgb3B0aW9uSGlnaGxpZ2h0ZWQsXG4gICAgICAgICAgZGQuaXNJbnB1dEVtcHR5LFxuICAgICAgICApO1xuICAgICAgICBjb25zdCBjb250ZW50OiBEcm9wZG93bkNvbnRlbnQgPSB7XG4gICAgICAgICAgcGlsbHM6IGRkLnBpbGxzLFxuICAgICAgICAgIG9wdGlvbnMsXG4gICAgICAgICAgYWN0aXZlSW5kZXg6IGRkLmFjdGl2ZUluZGV4LFxuICAgICAgICAgIGlzQWN0aXZlUGlsbFNlbGVjdGVkOiBkZC5pc0FjdGl2ZVBpbGxTZWxlY3RlZCxcbiAgICAgICAgICBpc0xvYWRpbmc6IGRkLmlzTG9hZGluZyxcbiAgICAgICAgICBzaG93c1BpbGxzLFxuICAgICAgICAgIHNob3dzT3B0aW9ucyxcbiAgICAgICAgICBzaG93c0ZhbGxiYWNrU2tlbGV0b24sXG4gICAgICAgICAgZm9vdGVyS2V5LFxuICAgICAgICAgIGZvb3RlckhpbnQsXG4gICAgICAgIH07XG4gICAgICAgIGlmIChpc1Zpc2libGUpIHRoaXMubGFzdFZpc2libGVDb250ZW50ID0gY29udGVudDtcbiAgICAgICAgcmV0dXJuIHsgLi4uY29udGVudCwgaXNWaXNpYmxlIH07XG4gICAgICB9KSxcbiAgICApO1xuICB9XG5cbiAgdHJhY2tCeVdpZHRoID0gKF86IG51bWJlciwgdzogbnVtYmVyKTogbnVtYmVyID0+IHc7XG5cbiAgb25QaWxsQ2xpY2soaW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMuY29udHJvbGxlci5zZXRBY3RpdmVQaWxsKGluZGV4KTtcbiAgfVxuXG4gIG9uU2VsZWN0KG9wdGlvbjogU3VnZ2VzdGlvbk9wdGlvbik6IHZvaWQge1xuICAgIHRoaXMuY29udHJvbGxlci5zZWxlY3RPcHRpb24ob3B0aW9uKTtcbiAgfVxuXG4gIG9uSGlnaGxpZ2h0KGluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLmNvbnRyb2xsZXIuc2V0QWN0aXZlRHJvcGRvd25JbmRleChpbmRleCk7XG4gIH1cblxuICBwcmV2ZW50Qmx1cihldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICAvLyBQcmV2ZW50IHRoZSBlZGl0b3IgZnJvbSBsb3NpbmcgZm9jdXMgd2hlbiBpbnRlcmFjdGluZyB3aXRoIHRoZSBkcm9wZG93bi5cbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICB9XG59XG4iLCI8ZGl2XG4gICpuZ0lmPVwidm0kIHwgYXN5bmMgYXMgdm1cIlxuICBbaWRdPVwiY29udHJvbGxlci5saXN0Ym94SWRcIlxuICByb2xlPVwibGlzdGJveFwiXG4gIGRhdGEtYWlhLWRyb3Bkb3duPVwiXCJcbiAgW2F0dHIuZGF0YS1haWEtbG9hZGluZ109XCJ2bS5pc0xvYWRpbmcgPyAnJyA6IG51bGxcIlxuICBbY2xhc3NdPVwiY2xhc3NOYW1lID8gJ21hZ2ljeC1haWEtZHJvcGRvd24gJyArIGNsYXNzTmFtZSA6ICdtYWdpY3gtYWlhLWRyb3Bkb3duJ1wiXG4gIFtjbGFzcy5tYWdpY3gtYWlhLWRyb3Bkb3duLXZpc2libGVdPVwidm0uaXNWaXNpYmxlXCJcbiAgKG1vdXNlZG93bik9XCJwcmV2ZW50Qmx1cigkZXZlbnQpXCJcbj5cbiAgPGFpYS1zdGFjayBzcGFjZT1cIjhweFwiPlxuICAgIDxhaWEtY2x1c3RlclxuICAgICAgKm5nSWY9XCJ2bS5zaG93c1BpbGxzXCJcbiAgICAgIGNsYXNzPVwibWFnaWN4LWFpYS1kcm9wZG93bi1waWxsYmFyXCJcbiAgICAgIGRhdGEtYWlhLXBpbGxiYXI9XCJcIlxuICAgICAgW25vV3JhcF09XCJ0cnVlXCJcbiAgICA+XG4gICAgICA8YWlhLXBpbGwtbGlzdFxuICAgICAgICBbcGlsbHNdPVwidm0ucGlsbHNcIlxuICAgICAgICBbYWN0aXZlUGlsbEluZGV4XT1cIjBcIlxuICAgICAgICBbYWN0aXZlU2VsZWN0ZWRdPVwidm0uaXNBY3RpdmVQaWxsU2VsZWN0ZWRcIlxuICAgICAgICBbcm91bmRlZF09XCJ0cnVlXCJcbiAgICAgICAgW2xvYWRpbmddPVwidm0uaXNMb2FkaW5nXCJcbiAgICAgICAgKHNlbGVjdFBpbGwpPVwib25QaWxsQ2xpY2soJGV2ZW50KVwiXG4gICAgICA+PC9haWEtcGlsbC1saXN0PlxuICAgIDwvYWlhLWNsdXN0ZXI+XG5cbiAgICA8YWlhLXN1Z2dlc3Rpb24tZ3JpZFxuICAgICAgKm5nSWY9XCJ2bS5zaG93c09wdGlvbnNcIlxuICAgICAgW29wdGlvbnNdPVwidm0ub3B0aW9uc1wiXG4gICAgICBbYWN0aXZlSW5kZXhdPVwidm0uYWN0aXZlSW5kZXhcIlxuICAgICAgW2xpc3Rib3hJZF09XCJjb250cm9sbGVyLmxpc3Rib3hJZFwiXG4gICAgICBbbG9hZGluZ109XCJ2bS5pc0xvYWRpbmdcIlxuICAgICAgKHNlbGVjdCk9XCJvblNlbGVjdCgkZXZlbnQpXCJcbiAgICAgIChoaWdobGlnaHQpPVwib25IaWdobGlnaHQoJGV2ZW50KVwiXG4gICAgPjwvYWlhLXN1Z2dlc3Rpb24tZ3JpZD5cblxuICAgIDxkaXZcbiAgICAgICpuZ0lmPVwidm0uc2hvd3NGYWxsYmFja1NrZWxldG9uXCJcbiAgICAgIGNsYXNzPVwibWFnaWN4LWFpYS1kcm9wZG93bi1za2VsZXRvbi1iYXJzXCJcbiAgICAgIGRhdGEtYWlhLXNrZWxldG9uLWJhcnM9XCJcIlxuICAgID5cbiAgICAgIDxzcGFuXG4gICAgICAgICpuZ0Zvcj1cImxldCB3IG9mIGZhbGxiYWNrU2tlbGV0b25CYXJXaWR0aHM7IHRyYWNrQnk6IHRyYWNrQnlXaWR0aFwiXG4gICAgICAgIGNsYXNzPVwibWFnaWN4LWFpYS1kcm9wZG93bi1za2VsZXRvbi1iYXJcIlxuICAgICAgICBbc3R5bGUud2lkdGgucHhdPVwid1wiXG4gICAgICA+PC9zcGFuPlxuICAgIDwvZGl2PlxuXG4gICAgPGZvb3RlciBjbGFzcz1cIm1hZ2ljeC1haWEtZm9vdGVyXCIgZGF0YS1haWEtZm9vdGVyPVwiXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwibWFnaWN4LWFpYS1mb290ZXItZGl2aWRlclwiPjwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cIm1hZ2ljeC1haWEtZm9vdGVyLXJvd1wiPlxuICAgICAgICA8c3BhbiBjbGFzcz1cIm1hZ2ljeC1haWEtZm9vdGVyLWhpbnQtZ3JvdXBcIj5cbiAgICAgICAgICA8a2JkIGNsYXNzPVwibWFnaWN4LWFpYS1mb290ZXIta2V5XCI+e3sgdm0uZm9vdGVyS2V5IH19PC9rYmQ+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYWdpY3gtYWlhLWZvb3Rlci1oaW50XCI+e3sgdm0uZm9vdGVySGludCB9fTwvc3Bhbj5cbiAgICAgICAgPC9zcGFuPlxuICAgICAgICA8YVxuICAgICAgICAgIGNsYXNzPVwibWFnaWN4LWFpYS1mb290ZXItYnJhbmQtbGlua1wiXG4gICAgICAgICAgaHJlZj1cImh0dHBzOi8vYWktYXV0b2NvbXBsZXRlLmNvbVwiXG4gICAgICAgICAgdGFyZ2V0PVwiX2JsYW5rXCJcbiAgICAgICAgICByZWw9XCJub29wZW5lciBub3JlZmVycmVyXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWFnaWN4LWFpYS1mb290ZXItYnJhbmRcIj5BSTwvc3Bhbj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hZ2ljeC1haWEtZm9vdGVyLWJhZGdlXCI+QXV0b2NvbXBsZXRlPC9zcGFuPlxuICAgICAgICA8L2E+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Zvb3Rlcj5cbiAgPC9haWEtc3RhY2s+XG48L2Rpdj5cbiJdfQ==
187
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWktYXV0b2NvbXBsZXRlLWRyb3Bkb3duLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvYWktYXV0b2NvbXBsZXRlLWRyb3Bkb3duL2FpLWF1dG9jb21wbGV0ZS1kcm9wZG93bi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9zcmMvbGliL2FpLWF1dG9jb21wbGV0ZS1kcm9wZG93bi9haS1hdXRvY29tcGxldGUtZHJvcGRvd24uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxLQUFLLEVBQ0wsTUFBTSxFQUtOLGlCQUFpQixHQUNsQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBRUwsYUFBYSxHQUdkLE1BQU0scUNBQXFDLENBQUM7QUFDN0MsT0FBTyxFQUFFLGVBQWUsRUFBRSxhQUFhLEVBQW1CLE1BQU0sTUFBTSxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVyQyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUN4RSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDcEUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFDOUUsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sdURBQXVELENBQUM7OztBQW9CaEc7Ozs7Ozs7Ozs7Ozs7O0dBY0c7QUFtQkgsTUFBTSxPQUFPLCtCQUErQjtJQWxCNUM7UUFxQkUsMkVBQTJFO1FBQ2xFLGNBQVMsR0FBRyxJQUFJLENBQUM7UUFXMUIsb0ZBQW9GO1FBQ3BGLGlCQUFZLEdBQTRCLElBQUksQ0FBQztRQUc1QixRQUFHLEdBQUcsTUFBTSxD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RSxHQUFHLE9BQU8sRUFBRSxTQUFTLEVBQUUsQ0FBQztRQUNuQyxDQUFDLENBQUMsQ0FDSCxDQUFDO0lBQ0osQ0FBQztJQUlELFdBQVcsQ0FBQyxLQUFhO1FBQ3ZCLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7SUFFRCxRQUFRLENBQUMsTUFBd0I7UUFDL0IsSUFBSSxDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDdkMsQ0FBQztJQUVELFdBQVcsQ0FBQyxLQUFhO1FBQ3ZCLElBQUksQ0FBQyxVQUFVLENBQUMsc0JBQXNCLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDaEQsQ0FBQztJQUVELFdBQVcsQ0FBQyxLQUFZO1FBQ3RCLDJFQUEyRTtRQUMzRSxLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7SUFDekIsQ0FBQzs7NkhBeExVLCtCQUErQjtpSEFBL0IsK0JBQStCLDZNQzlFNUMsd3dFQXVFQSxpaUxEUEksWUFBWSxxVEFDWixpQkFBaUIsaUtBQ2pCLHVCQUF1Qiw4SkFDdkIsY0FBYyxrRkFDZCxnQkFBZ0I7NEZBVVAsK0JBQStCO2tCQWxCM0MsU0FBUzsrQkFDRSwwQkFBMEIsY0FDeEIsSUFBSSxXQUNQO3dCQUNQLFlBQVk7d0JBQ1osaUJBQWlCO3dCQUNqQix1QkFBdUI7d0JBQ3ZCLGNBQWM7d0JBQ2QsZ0JBQWdCO3FCQUNqQixtQkFDZ0IsdUJBQXVCLENBQUMsTUFBTSxpQkFDaEMsaUJBQWlCLENBQUMsSUFBSTs4QkFTNUIsVUFBVTtzQkFBbEIsS0FBSztnQkFFRyxTQUFTO3NCQUFqQixLQUFLO2dCQUVHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBT0csSUFBSTtzQkFBWixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSBcIkBhbmd1bGFyL2NvbW1vblwiO1xuaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIElucHV0LFxuICBpbmplY3QsXG4gIHR5cGUgT25DaGFuZ2VzLFxuICB0eXBlIE9uRGVzdHJveSxcbiAgdHlwZSBPbkluaXQsXG4gIHR5cGUgU2ltcGxlQ2hhbmdlcyxcbiAgVmlld0VuY2Fwc3VsYXRpb24sXG59IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQge1xuICB0eXBlIEFwcGVhcmFuY2VNb2RlLFxuICBnZXRGb290ZXJIaW50LFxuICB0eXBlIFN1Z2dlc3Rpb24sXG4gIHR5cGUgU3VnZ2VzdGlvbk9wdGlvbixcbn0gZnJvbSBcIkBtYWdpY3gtZW5nL2FpLWF1dG9jb21wbGV0ZS12YW5pbGxhXCI7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIGNvbWJpbmVMYXRlc3QsIHR5cGUgT2JzZXJ2YWJsZSB9IGZyb20gXCJyeGpzXCI7XG5pbXBvcnQgeyBtYXAgfSBmcm9tIFwicnhqcy9vcGVyYXRvcnNcIjtcbmltcG9ydCB0eXBlIHsgQUlBdXRvY29tcGxldGVDb250cm9sbGVyIH0gZnJvbSBcIi4uL2NvbnRyb2xsZXIvYWktYXV0b2NvbXBsZXRlLmNvbnRyb2xsZXJcIjtcbmltcG9ydCB7IENsdXN0ZXJDb21wb25lbnQgfSBmcm9tIFwiLi4vaW50ZXJuYWwvbGF5b3V0L2NsdXN0ZXIuY29tcG9uZW50XCI7XG5pbXBvcnQgeyBTdGFja0NvbXBvbmVudCB9IGZyb20gXCIuLi9pbnRlcm5hbC9sYXlvdXQvc3RhY2suY29tcG9uZW50XCI7XG5pbXBvcnQgeyBQaWxsTGlzdENvbXBvbmVudCB9IGZyb20gXCIuLi9pbnRlcm5hbC9waWxsLWxpc3QvcGlsbC1saXN0LmNvbXBvbmVudFwiO1xuaW1wb3J0IHsgU3VnZ2VzdGlvbkdyaWRDb21wb25lbnQgfSBmcm9tIFwiLi4vaW50ZXJuYWwvc3VnZ2VzdGlvbi1ncmlkL3N1Z2dlc3Rpb24tZ3JpZC5jb21wb25lbnRcIjtcblxuaW50ZXJmYWNlIERyb3Bkb3duVm0ge1xuICBwaWxsczogU3VnZ2VzdGlvbltdO1xuICBvcHRpb25zOiBTdWdnZXN0aW9uT3B0aW9uW107XG4gIGFjdGl2ZUluZGV4OiBudW1iZXI7XG4gIGlzQWN0aXZlUGlsbFNlbGVjdGVkOiBib29sZWFuO1xuICBpc0xvYWRpbmc6IGJvb2xlYW47XG4gIHNob3dzUGlsbHM6IGJvb2xlYW47XG4gIHNob3dzT3B0aW9uczogYm9vbGVhbjtcbiAgc2hvd3NGYWxsYmFja1NrZWxldG9uOiBib29sZWFuO1xuICBpc1Zpc2libGU6IGJvb2xlYW47XG4gIGZvb3RlcktleTogc3RyaW5nO1xuICBmb290ZXJIaW50OiBzdHJpbmc7XG4gIG9wdGlvbnNQb3NpdGlvbjogXCJhYm92ZVwiIHwgXCJiZWxvd1wiO1xufVxuXG4vKiogVGhlIGNvbnRlbnQtYmVhcmluZyBmaWVsZHMgb2YgdGhlIHZpZXctbW9kZWwgKGV2ZXJ5dGhpbmcgYnV0IGBpc1Zpc2libGVgKS4gKi9cbnR5cGUgRHJvcGRvd25Db250ZW50ID0gT21pdDxEcm9wZG93blZtLCBcImlzVmlzaWJsZVwiPjtcblxuLyoqXG4gKiBUaWVyIDIgZHJvcGRvd24gY29tcG9uZW50IOKAlCB0aGUgQW5ndWxhciBlcXVpdmFsZW50IG9mIFJlYWN0J3NcbiAqIGA8QUlBdXRvY29tcGxldGVEcm9wZG93biAvPmAuIFJlbmRlcnMgdGhlIHBpbGxiYXIsIG9wdGlvbnMgZ3JpZCwgYW5kXG4gKiBsb2FkaW5nIHNrZWxldG9uIGJhc2VkIG9uIHRoZSBzdXBwbGllZCBjb250cm9sbGVyJ3MgYGRyb3Bkb3duJGAgc25hcHNob3QuXG4gKlxuICogYGBgaHRtbFxuICogPGFpLWF1dG9jb21wbGV0ZS1kcm9wZG93biBbY29udHJvbGxlcl09XCJhY1wiPjwvYWktYXV0b2NvbXBsZXRlLWRyb3Bkb3duPlxuICogYGBgXG4gKlxuICogQWxsIGFjdGlvbnMgKHBpbGwgY2xpY2ssIG9wdGlvbiBzZWxlY3QsIG9wdGlvbiBoaWdobGlnaHQpIGFyZSBmb3J3YXJkZWQgdG9cbiAqIHRoZSBjb250cm9sbGVyLiBDb25zdW1lcnMgd2hvIG5lZWQgdG8gb2JzZXJ2ZSB0aGVzZSBldmVudHMgY2FuIHN1YnNjcmliZVxuICogdG8gdGhlIGNvbnRyb2xsZXIncyBwZXItZmllbGQgb2JzZXJ2YWJsZXMuXG4gKlxuICogQHB1YmxpY1xuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6IFwiYWktYXV0b2NvbXBsZXRlLWRyb3Bkb3duXCIsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtcbiAgICBDb21tb25Nb2R1bGUsXG4gICAgUGlsbExpc3RDb21wb25lbnQsXG4gICAgU3VnZ2VzdGlvbkdyaWRDb21wb25lbnQsXG4gICAgU3RhY2tDb21wb25lbnQsXG4gICAgQ2x1c3RlckNvbXBvbmVudCxcbiAgXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gIHRlbXBsYXRlVXJsOiBcIi4vYWktYXV0b2NvbXBsZXRlLWRyb3Bkb3duLmNvbXBvbmVudC5odG1sXCIsXG4gIC8vIFRoZSBzaGFyZWQgYXBwZWFyYW5jZSBsYXllciBjYXJyaWVzIHRoZSBkZXNpZ24gdG9rZW5zICsgYm94LXNpemluZyByZXNldCArXG4gIC8vIG9wdGlvbnNQb3NpdGlvbiByZXZlcnNhbCwgc28gYSBzdGFuZGFsb25lIGRyb3Bkb3duIChubyBUaWVyIDEgY29tcG9uZW50IG9uXG4gIC8vIHRoZSBwYWdlKSBpcyBmdWxseSBzdHlsZWQgb25jZSBgbW9kZWAgaXMgc2V0LlxuICBzdHlsZVVybHM6IFtcIi4uL3NoYXJlZC9hcHBlYXJhbmNlLmNzc1wiLCBcIi4vYWktYXV0b2NvbXBsZXRlLWRyb3Bkb3duLmNvbXBvbmVudC5jc3NcIl0sXG59KVxuZXhwb3J0IGNsYXNzIEFJQXV0b2NvbXBsZXRlRHJvcGRvd25Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcywgT25EZXN0cm95IHtcbiAgLyoqIFRoZSBjb250cm9sbGVyIHRoYXQgb3ducyB0aGUgYXV0b2NvbXBsZXRlIHN0YXRlLiBSZXF1aXJlZC4gKi9cbiAgQElucHV0KCkgY29udHJvbGxlciE6IEFJQXV0b2NvbXBsZXRlQ29udHJvbGxlcjtcbiAgLyoqIFdoZXRoZXIgdG8gcmVuZGVyIHRoZSBwaWxsYmFyIGFib3ZlIHRoZSBvcHRpb25zIGdyaWQuIERlZmF1bHQ6IHRydWUuICovXG4gIEBJbnB1dCgpIHNob3dQaWxscyA9IHRydWU7XG4gIC8qKiBPcHRpb25hbCBDU1MgY2xhc3MgYXBwbGllZCB0byB0aGUgZHJvcGRvd24gcm9vdC4gKi9cbiAgQElucHV0KCkgY2xhc3NOYW1lPzogc3RyaW5nO1xuICAvKipcbiAgICogQ29sb3IgbW9kZSBmb3IgYSBzdGFuZGFsb25lIGRyb3Bkb3duLiBXaGVuIHNldCwgdGhlIGRyb3Bkb3duIHNlbGYtc2NvcGVzIHRoZVxuICAgKiBkZXNpZ24gdG9rZW5zIHRvIGl0cyBvd24gcm9vdCAoYWRkcyBgbWFnaWN4LWFpYWAgKyBgZGF0YS1tb2RlYCksIHNvIGl0IG5lZWRzXG4gICAqIG5vIGAubWFnaWN4LWFpYWAgd3JhcHBlci4gYFwiYXV0b1wiYCBmb2xsb3dzIGBwcmVmZXJzLWNvbG9yLXNjaGVtZWAuIExlYXZlIGl0XG4gICAqIHVuc2V0IHdoZW4gdGhlIGRyb3Bkb3duIHNpdHMgaW5zaWRlIGEgYC5tYWdpY3gtYWlhYCBhbmNlc3RvciAoZS5nLiBUaWVyIDEpLlxuICAgKi9cbiAgQElucHV0KCkgbW9kZT86IEFwcGVhcmFuY2VNb2RlO1xuXG4gIC8qKiBDb25jcmV0ZSByZXNvbHZlZCBtb2RlLCBvciBudWxsIHdoZW4gYG1vZGVgIGlzIHVuc2V0IChpbmhlcml0IGZyb20gYW5jZXN0b3IpLiAqL1xuICByZXNvbHZlZE1vZGU6IFwibGlnaHRcIiB8IFwiZGFya1wiIHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgbW9kZU1xbD86IE1lZGlhUXVlcnlMaXN0O1xuICBwcml2YXRlIG1vZGVMaXN0ZW5lcj86ICgpID0+IHZvaWQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgY2RyID0gaW5qZWN0KENoYW5nZURldGVjdG9yUmVmKTtcblxuICAvKiogUm9vdCBjbGFzcyBsaXN0IOKAlCBhZGRzIGBtYWdpY3gtYWlhYCBvbmx5IHdoZW4gc2VsZi1zY29waW5nIHZpYSBgbW9kZWAuICovXG4gIGdldCByb290Q2xhc3MoKTogc3RyaW5nIHtcbiAgICBsZXQgY2xzID0gXCJtYWdpY3gtYWlhLWRyb3Bkb3duXCI7XG4gICAgaWYgKHRoaXMucmVzb2x2ZWRNb2RlKSBjbHMgKz0gXCIgbWFnaWN4LWFpYVwiO1xuICAgIGlmICh0aGlzLmNsYXNzTmFtZSkgY2xzICs9IGAgJHt0aGlzLmNsYXNzTmFtZX1gO1xuICAgIHJldHVybiBjbHM7XG4gIH1cblxuICAvKiogRmFsbGJhY2sgc2tlbGV0b24tYmFyIHdpZHRocyB1c2VkIHdoZW4gbG9hZGluZyB3aXRoIHplcm8gY2FjaGVkIG9wdGlvbnMuICovXG4gIHJlYWRvbmx5IGZhbGxiYWNrU2tlbGV0b25CYXJXaWR0aHMgPSBbMTU5LCAxMTksIDE2NF07XG5cbiAgLyoqXG4gICAqIFZpZXctbW9kZWwgZGVyaXZlZCBmcm9tIHRoZSBjb250cm9sbGVyJ3MgYGRyb3Bkb3duJGAuIEFkZHMgdGhyZWUgYm9vbGVhbnNcbiAgICogKGBzaG93c1BpbGxzYCwgYHNob3dzT3B0aW9uc2AsIGBzaG93c0ZhbGxiYWNrU2tlbGV0b25gLCBgaXNWaXNpYmxlYCkgdGhhdFxuICAgKiBrZWVwIHRlbXBsYXRlLWxldmVsIGxvZ2ljIHRvIGEgcHJvcGVydHkgcmVhZCBwZXIgwqcxOS42LlxuICAgKlxuICAgKiBJbml0aWFsaXplZCBvbmNlIGluIGBuZ09uSW5pdGAg4oCUIG11c3QgTk9UIGJlIGEgZ2V0dGVyLiBBIGdldHRlciByZXR1cm5zIGFcbiAgICogZnJlc2ggYE9ic2VydmFibGVgIGluc3RhbmNlIG9uIGV2ZXJ5IHByb3BlcnR5IHJlYWQ7IHdpdGggT25QdXNoICsgYGFzeW5jYFxuICAgKiBwaXBlIHRoYXQgbWVhbnMgZWFjaCBjaGFuZ2UtZGV0ZWN0aW9uIGN5Y2xlIHVuc3Vic2NyaWJlcy9yZXN1YnNjcmliZXMsXG4gICAqIGNhdXNpbmcgdGhlIGAqbmdJZj1cInZtJCB8IGFzeW5jIGFzIHZtXCJgIHJvb3QgdG8gYnJpZWZseSByZXNvbHZlIGBudWxsYFxuICAgKiBhbmQgZmxpY2tlciB0aGUgZW50aXJlIGRyb3Bkb3duIERPTS5cbiAgICovXG4gIHZtJCE6IE9ic2VydmFibGU8RHJvcGRvd25WbT47XG5cbiAgLy8gQnJpZGdlIGZvciB0aGUgQElucHV0IGBzaG93UGlsbHNgIGludG8gdGhlIHJlYWN0aXZlIHBpcGVsaW5lLiBXaXRob3V0IHRoaXMsXG4gIC8vIGNoYW5naW5nIHRoZSBpbnB1dCBhZnRlciBpbml0IHdvdWxkbid0IHRyaWdnZXIgYSBuZXcgdm0gZW1pc3Npb24gdW50aWwgdGhlXG4gIC8vIG5leHQgY29udHJvbGxlci5kcm9wZG93biQgdGljayDigJQgYW5kIHdlJ2QgbG9zZSB0aGUgc2hvd1BpbGxzIHVwZGF0ZSBlbnRpcmVseVxuICAvLyBpZiB0aGUgY29udHJvbGxlciBpcyBpZGxlLiBVcGRhdGVkIGZyb20gbmdPbkNoYW5nZXMgYmVsb3cuXG4gIHByaXZhdGUgcmVhZG9ubHkgc2hvd1BpbGxzJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4odHJ1ZSk7XG5cbiAgLy8gTGFzdCBjb250ZW50IGVtaXR0ZWQgd2hpbGUgdGhlIGRyb3Bkb3duIHdhcyB2aXNpYmxlLiBSZXVzZWQgZHVyaW5nIHRoZVxuICAvLyBjbG9zZSBmYWRlIHNvIHRoZSBwb3B1bGF0ZWQgZHJvcGRvd24gZmFkZXMgb3V0IGFzIG9uZSDigJQgc2VlIGluaXRWbS5cbiAgcHJpdmF0ZSBsYXN0VmlzaWJsZUNvbnRlbnQ6IERyb3Bkb3duQ29udGVudCB8IG51bGwgPSBudWxsO1xuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIC8vIFNlZWQgc2hvd1BpbGxzJCBmcm9tIHRoZSBpbnB1dCdzIHJlc29sdmVkIHZhbHVlIGF0IGluaXQgdGltZS5cbiAgICB0aGlzLnNob3dQaWxscyQubmV4dCh0aGlzLnNob3dQaWxscyk7XG4gICAgdGhpcy5hcHBseU1vZGUoKTtcbiAgICB0aGlzLmluaXRWbSgpO1xuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGlmIChjaGFuZ2VzW1wic2hvd1BpbGxzXCJdKSB7XG4gICAgICB0aGlzLnNob3dQaWxscyQubmV4dCh0aGlzLnNob3dQaWxscyk7XG4gICAgfVxuICAgIGlmIChjaGFuZ2VzW1wibW9kZVwiXSAmJiAhY2hhbmdlc1tcIm1vZGVcIl0uZmlyc3RDaGFuZ2UpIHtcbiAgICAgIHRoaXMuYXBwbHlNb2RlKCk7XG4gICAgfVxuICAgIC8vIFJlLWJpbmQgdm0kIHdoZW4gdGhlIGNvbnRyb2xsZXIgQElucHV0IGlzIHN3YXBwZWQgKGUuZy4gYSBtdWx0aS1zdGVwIGZvcm1cbiAgICAvLyB0b2dnbGluZyBiZXR3ZWVuIGNvbnRyb2xsZXJzKS4gV2l0aG91dCB0aGlzLCB2bSQgc3RheXMgc3Vic2NyaWJlZCB0byB0aGVcbiAgICAvLyBwcmV2aW91cyBjb250cm9sbGVyJ3MgZHJvcGRvd24kIOKAlCByZW5kZXJpbmcgc3RhbGUgb3B0aW9ucywgb3IsIGlmIHRoYXRcbiAgICAvLyBjb250cm9sbGVyIHdhcyBkZXN0cm95KCktZWQsIHJlY2VpdmluZyBhIGNvbXBsZXRpb24gdGhhdCBjb2xsYXBzZXMgdGhlXG4gICAgLy8gZHJvcGRvd24gcGVybWFuZW50bHkuIFNraXAgdGhlIGZpcnN0IGNoYW5nZTogbmdPbkNoYW5nZXMgZmlyZXMgYmVmb3JlXG4gICAgLy8gbmdPbkluaXQsIHdoaWNoIG93bnMgdGhlIGluaXRpYWwgY3JlYXRpb24uXG4gICAgaWYgKGNoYW5nZXNbXCJjb250cm9sbGVyXCJdICYmICFjaGFuZ2VzW1wiY29udHJvbGxlclwiXS5maXJzdENoYW5nZSAmJiB0aGlzLmNvbnRyb2xsZXIpIHtcbiAgICAgIHRoaXMuaW5pdFZtKCk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy50ZWFyZG93bk1vZGVMaXN0ZW5lcigpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlc29sdmUgdGhlIGBtb2RlYCBpbnB1dCBpbnRvIGByZXNvbHZlZE1vZGVgLiBVbnNldCDihpIgbnVsbCAodGhlIGRyb3Bkb3duXG4gICAqIHN0YXlzIGNsYXNzLWxlc3MgYW5kIGluaGVyaXRzIGZyb20gYSBgLm1hZ2ljeC1haWFgIGFuY2VzdG9yKS4gYFwiYXV0b1wiYCByZWFkc1xuICAgKiBgcHJlZmVycy1jb2xvci1zY2hlbWVgIGFuZCB0cmFja3MgaXQgbGl2ZSB2aWEgYSBtZWRpYS1xdWVyeSBsaXN0ZW5lci5cbiAgICovXG4gIHByaXZhdGUgYXBwbHlNb2RlKCk6IHZvaWQge1xuICAgIHRoaXMudGVhcmRvd25Nb2RlTGlzdGVuZXIoKTtcbiAgICBpZiAodGhpcy5tb2RlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMucmVzb2x2ZWRNb2RlID0gbnVsbDtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHRoaXMubW9kZSA9PT0gXCJsaWdodFwiIHx8IHRoaXMubW9kZSA9PT0gXCJkYXJrXCIpIHtcbiAgICAgIHRoaXMucmVzb2x2ZWRNb2RlID0gdGhpcy5tb2RlO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAvLyBcImF1dG9cIlxuICAgIGlmICh0eXBlb2Ygd2luZG93ID09PSBcInVuZGVmaW5lZFwiIHx8IHR5cGVvZiB3aW5kb3cubWF0Y2hNZWRpYSAhPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICB0aGlzLnJlc29sdmVkTW9kZSA9IFwibGlnaHRcIjtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5tb2RlTXFsID0gd2luZG93Lm1hdGNoTWVkaWEoXCIocHJlZmVycy1jb2xvci1zY2hlbWU6IGRhcmspXCIpO1xuICAgIHRoaXMucmVzb2x2ZWRNb2RlID0gdGhpcy5tb2RlTXFsLm1hdGNoZXMgPyBcImRhcmtcIiA6IFwibGlnaHRcIjtcbiAgICB0aGlzLm1vZGVMaXN0ZW5lciA9ICgpID0+IHtcbiAgICAgIHRoaXMucmVzb2x2ZWRNb2RlID0gdGhpcy5tb2RlTXFsPy5tYXRjaGVzID8gXCJkYXJrXCIgOiBcImxpZ2h0XCI7XG4gICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9O1xuICAgIHRoaXMubW9kZU1xbC5hZGRFdmVudExpc3RlbmVyKFwiY2hhbmdlXCIsIHRoaXMubW9kZUxpc3RlbmVyKTtcbiAgfVxuXG4gIHByaXZhdGUgdGVhcmRvd25Nb2RlTGlzdGVuZXIoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMubW9kZU1xbCAmJiB0aGlzLm1vZGVMaXN0ZW5lcikge1xuICAgICAgdGhpcy5tb2RlTXFsLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJjaGFuZ2VcIiwgdGhpcy5tb2RlTGlzdGVuZXIpO1xuICAgIH1cbiAgICB0aGlzLm1vZGVNcWwgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5tb2RlTGlzdGVuZXIgPSB1bmRlZmluZWQ7XG4gIH1cblxuICAvKiogQnVpbGQgdGhlIHZpZXctbW9kZWwgc3RyZWFtIGZyb20gdGhlIGN1cnJlbnQgY29udHJvbGxlciArIHNob3dQaWxscyQuICovXG4gIHByaXZhdGUgaW5pdFZtKCk6IHZvaWQge1xuICAgIHRoaXMudm0kID0gY29tYmluZUxhdGVzdChbdGhpcy5jb250cm9sbGVyLmRyb3Bkb3duJCwgdGhpcy5zaG93UGlsbHMkXSkucGlwZShcbiAgICAgIG1hcCgoW2RkLCBzaG93UGlsbHNdKSA9PiB7XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSBkZC5zdWdnZXN0aW9uc1swXT8ub3B0aW9ucyA/PyBbXTtcbiAgICAgICAgY29uc3Qgc2hvd3NQaWxscyA9IHNob3dQaWxscyAmJiAoZGQucGlsbHMubGVuZ3RoID4gMCB8fCBkZC5pc0xvYWRpbmcpO1xuICAgICAgICBjb25zdCBzaG93c09wdGlvbnMgPSBvcHRpb25zLmxlbmd0aCA+IDA7XG4gICAgICAgIGNvbnN0IHNob3dzRmFsbGJhY2tTa2VsZXRvbiA9IGRkLmlzTG9hZGluZyAmJiAhc2hvd3NPcHRpb25zO1xuICAgICAgICBjb25zdCBpc1Zpc2libGUgPSBkZC5pc09wZW4gJiYgKHNob3dzT3B0aW9ucyB8fCBzaG93c1BpbGxzIHx8IGRkLmlzTG9hZGluZyk7XG5cbiAgICAgICAgLy8gV2hpbGUgY2xvc2luZywgcmV1c2UgdGhlIGxhc3QgdmlzaWJsZSBjb250ZW50IHNvIHRoZSBwb3B1bGF0ZWRcbiAgICAgICAgLy8gZHJvcGRvd24gZmFkZXMgb3V0IGFzIG9uZS4gT3RoZXJ3aXNlIHRoZSBwaWxscy9vcHRpb25zIHZhbmlzaCB0aGVcbiAgICAgICAgLy8gaW5zdGFudCB0aGUgc3RhdGUgZW1wdGllcyAoZS5nLiBza2lwcGluZyB0aGUgbGFzdCBwaWxsIHdpdGgg4oaSKSxcbiAgICAgICAgLy8gbGVhdmluZyB0aGUgYWx3YXlzLXByZXNlbnQgZm9vdGVyIGFsb25lIGZvciBhIGZsYXNoIG9mIGEgZm9vdGVyLW9ubHlcbiAgICAgICAgLy8gXCJubyBvcHRpb25zXCIgYm94IG1pZC1mYWRlLiBPbmx5IGBpc1Zpc2libGVgIHRyYWNrcyBsaXZlIHN0YXRlIHRvXG4gICAgICAgIC8vIGRyaXZlIHRoZSBvcGFjaXR5IHRyYW5zaXRpb24uXG4gICAgICAgIGlmICghaXNWaXNpYmxlICYmIHRoaXMubGFzdFZpc2libGVDb250ZW50KSB7XG4gICAgICAgICAgcmV0dXJuIHsgLi4udGhpcy5sYXN0VmlzaWJsZUNvbnRlbnQsIGlzVmlzaWJsZTogZmFsc2UgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG9wdGlvbkhpZ2hsaWdodGVkID1cbiAgICAgICAgICBkZC5hY3RpdmVJbmRleCA+PSAwICYmIEJvb2xlYW4ob3B0aW9uc1tkZC5hY3RpdmVJbmRleF0/LmlzX3RhcHBhYmxlKTtcbiAgICAgICAgY29uc3QgeyBrZXk6IGZvb3RlcktleSwgaGludDogZm9vdGVySGludCB9ID0gZ2V0Rm9vdGVySGludChcbiAgICAgICAgICBkZC5oYXNUYWJiZWRUb0hpZ2hsaWdodCxcbiAgICAgICAgICBvcHRpb25IaWdobGlnaHRlZCxcbiAgICAgICAgICBkZC5pc0lucHV0RW1wdHksXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IGNvbnRlbnQ6IERyb3Bkb3duQ29udGVudCA9IHtcbiAgICAgICAgICBwaWxsczogZGQucGlsbHMsXG4gICAgICAgICAgb3B0aW9ucyxcbiAgICAgICAgICBhY3RpdmVJbmRleDogZGQuYWN0aXZlSW5kZXgsXG4gICAgICAgICAgaXNBY3RpdmVQaWxsU2VsZWN0ZWQ6IGRkLmlzQWN0aXZlUGlsbFNlbGVjdGVkLFxuICAgICAgICAgIGlzTG9hZGluZzogZGQuaXNMb2FkaW5nLFxuICAgICAgICAgIHNob3dzUGlsbHMsXG4gICAgICAgICAgc2hvd3NPcHRpb25zLFxuICAgICAgICAgIHNob3dzRmFsbGJhY2tTa2VsZXRvbixcbiAgICAgICAgICBmb290ZXJLZXksXG4gICAgICAgICAgZm9vdGVySGludCxcbiAgICAgICAgICBvcHRpb25zUG9zaXRpb246IGRkLm9wdGlvbnNQb3NpdGlvbixcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKGlzVmlzaWJsZSkgdGhpcy5sYXN0VmlzaWJsZUNvbnRlbnQgPSBjb250ZW50O1xuICAgICAgICByZXR1cm4geyAuLi5jb250ZW50LCBpc1Zpc2libGUgfTtcbiAgICAgIH0pLFxuICAgICk7XG4gIH1cblxuICB0cmFja0J5V2lkdGggPSAoXzogbnVtYmVyLCB3OiBudW1iZXIpOiBudW1iZXIgPT4gdztcblxuICBvblBpbGxDbGljayhpbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy5jb250cm9sbGVyLnNldEFjdGl2ZVBpbGwoaW5kZXgpO1xuICB9XG5cbiAgb25TZWxlY3Qob3B0aW9uOiBTdWdnZXN0aW9uT3B0aW9uKTogdm9pZCB7XG4gICAgdGhpcy5jb250cm9sbGVyLnNlbGVjdE9wdGlvbihvcHRpb24pO1xuICB9XG5cbiAgb25IaWdobGlnaHQoaW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMuY29udHJvbGxlci5zZXRBY3RpdmVEcm9wZG93bkluZGV4KGluZGV4KTtcbiAgfVxuXG4gIHByZXZlbnRCbHVyKGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgIC8vIFByZXZlbnQgdGhlIGVkaXRvciBmcm9tIGxvc2luZyBmb2N1cyB3aGVuIGludGVyYWN0aW5nIHdpdGggdGhlIGRyb3Bkb3duLlxuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gIH1cbn1cbiIsIjxkaXZcbiAgKm5nSWY9XCJ2bSQgfCBhc3luYyBhcyB2bVwiXG4gIFtpZF09XCJjb250cm9sbGVyLmxpc3Rib3hJZFwiXG4gIHJvbGU9XCJsaXN0Ym94XCJcbiAgZGF0YS1haWEtZHJvcGRvd249XCJcIlxuICBbYXR0ci5kYXRhLWFpYS1sb2FkaW5nXT1cInZtLmlzTG9hZGluZyA/ICcnIDogbnVsbFwiXG4gIFthdHRyLmRhdGEtbW9kZV09XCJyZXNvbHZlZE1vZGVcIlxuICBbYXR0ci5kYXRhLW9wdGlvbnMtcG9zaXRpb25dPVwidm0ub3B0aW9uc1Bvc2l0aW9uXCJcbiAgW2NsYXNzXT1cInJvb3RDbGFzc1wiXG4gIFtjbGFzcy5tYWdpY3gtYWlhLWRyb3Bkb3duLXZpc2libGVdPVwidm0uaXNWaXNpYmxlXCJcbiAgKG1vdXNlZG93bik9XCJwcmV2ZW50Qmx1cigkZXZlbnQpXCJcbj5cbiAgPGFpYS1zdGFjayBzcGFjZT1cIjhweFwiPlxuICAgIDxhaWEtY2x1c3RlclxuICAgICAgKm5nSWY9XCJ2bS5zaG93c1BpbGxzXCJcbiAgICAgIGNsYXNzPVwibWFnaWN4LWFpYS1kcm9wZG93bi1waWxsYmFyXCJcbiAgICAgIGRhdGEtYWlhLXBpbGxiYXI9XCJcIlxuICAgICAgW25vV3JhcF09XCJ0cnVlXCJcbiAgICA+XG4gICAgICA8YWlhLXBpbGwtbGlzdFxuICAgICAgICBbcGlsbHNdPVwidm0ucGlsbHNcIlxuICAgICAgICBbYWN0aXZlUGlsbEluZGV4XT1cIjBcIlxuICAgICAgICBbYWN0aXZlU2VsZWN0ZWRdPVwidm0uaXNBY3RpdmVQaWxsU2VsZWN0ZWRcIlxuICAgICAgICBbcm91bmRlZF09XCJ0cnVlXCJcbiAgICAgICAgW2xvYWRpbmddPVwidm0uaXNMb2FkaW5nXCJcbiAgICAgICAgKHNlbGVjdFBpbGwpPVwib25QaWxsQ2xpY2soJGV2ZW50KVwiXG4gICAgICA+PC9haWEtcGlsbC1saXN0PlxuICAgIDwvYWlhLWNsdXN0ZXI+XG5cbiAgICA8YWlhLXN1Z2dlc3Rpb24tZ3JpZFxuICAgICAgKm5nSWY9XCJ2bS5zaG93c09wdGlvbnNcIlxuICAgICAgW29wdGlvbnNdPVwidm0ub3B0aW9uc1wiXG4gICAgICBbYWN0aXZlSW5kZXhdPVwidm0uYWN0aXZlSW5kZXhcIlxuICAgICAgW2xpc3Rib3hJZF09XCJjb250cm9sbGVyLmxpc3Rib3hJZFwiXG4gICAgICBbbG9hZGluZ109XCJ2bS5pc0xvYWRpbmdcIlxuICAgICAgKHNlbGVjdCk9XCJvblNlbGVjdCgkZXZlbnQpXCJcbiAgICAgIChoaWdobGlnaHQpPVwib25IaWdobGlnaHQoJGV2ZW50KVwiXG4gICAgPjwvYWlhLXN1Z2dlc3Rpb24tZ3JpZD5cblxuICAgIDxkaXZcbiAgICAgICpuZ0lmPVwidm0uc2hvd3NGYWxsYmFja1NrZWxldG9uXCJcbiAgICAgIGNsYXNzPVwibWFnaWN4LWFpYS1kcm9wZG93bi1za2VsZXRvbi1iYXJzXCJcbiAgICAgIGRhdGEtYWlhLXNrZWxldG9uLWJhcnM9XCJcIlxuICAgID5cbiAgICAgIDxzcGFuXG4gICAgICAgICpuZ0Zvcj1cImxldCB3IG9mIGZhbGxiYWNrU2tlbGV0b25CYXJXaWR0aHM7IHRyYWNrQnk6IHRyYWNrQnlXaWR0aFwiXG4gICAgICAgIGNsYXNzPVwibWFnaWN4LWFpYS1kcm9wZG93bi1za2VsZXRvbi1iYXJcIlxuICAgICAgICBbc3R5bGUud2lkdGgucHhdPVwid1wiXG4gICAgICA+PC9zcGFuPlxuICAgIDwvZGl2PlxuXG4gICAgPGZvb3RlciBjbGFzcz1cIm1hZ2ljeC1haWEtZm9vdGVyXCIgZGF0YS1haWEtZm9vdGVyPVwiXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwibWFnaWN4LWFpYS1mb290ZXItZGl2aWRlclwiPjwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cIm1hZ2ljeC1haWEtZm9vdGVyLXJvd1wiPlxuICAgICAgICA8c3BhbiBjbGFzcz1cIm1hZ2ljeC1haWEtZm9vdGVyLWhpbnQtZ3JvdXBcIj5cbiAgICAgICAgICA8a2JkIGNsYXNzPVwibWFnaWN4LWFpYS1mb290ZXIta2V5XCI+e3sgdm0uZm9vdGVyS2V5IH19PC9rYmQ+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYWdpY3gtYWlhLWZvb3Rlci1oaW50XCI+e3sgdm0uZm9vdGVySGludCB9fTwvc3Bhbj5cbiAgICAgICAgPC9zcGFuPlxuICAgICAgICA8YVxuICAgICAgICAgIGNsYXNzPVwibWFnaWN4LWFpYS1mb290ZXItYnJhbmQtbGlua1wiXG4gICAgICAgICAgaHJlZj1cImh0dHBzOi8vYWktYXV0b2NvbXBsZXRlLmNvbVwiXG4gICAgICAgICAgdGFyZ2V0PVwiX2JsYW5rXCJcbiAgICAgICAgICByZWw9XCJub29wZW5lciBub3JlZmVycmVyXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWFnaWN4LWFpYS1mb290ZXItYnJhbmRcIj5BSTwvc3Bhbj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hZ2ljeC1haWEtZm9vdGVyLWJhZGdlXCI+QXV0b2NvbXBsZXRlPC9zcGFuPlxuICAgICAgICA8L2E+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Zvb3Rlcj5cbiAgPC9haWEtc3RhY2s+XG48L2Rpdj5cbiJdfQ==
@@ -1,5 +1,5 @@
1
1
  import { AIAutocomplete as CoreAIAutocomplete, } from "@magicx-eng/ai-autocomplete-vanilla";
2
- import { BehaviorSubject, map, shareReplay } from "rxjs";
2
+ import { BehaviorSubject, combineLatest, map, shareReplay } from "rxjs";
3
3
  import { deriveField } from "./observables";
4
4
  /**
5
5
  * Tier 2 logic surface for `@magicx-eng/ai-autocomplete-angular` — the Angular
@@ -20,6 +20,10 @@ export class AIAutocompleteController {
20
20
  * Universal, gate construction with `isPlatformBrowser` — see TDB §16.3.
21
21
  */
22
22
  constructor(opts = {}) {
23
+ // optionsPosition isn't part of CoreState (it's a core option), so track it
24
+ // here and fold it into `dropdown$` so the dropdown can read placement from
25
+ // the controller — configured once, kept in sync through update().
26
+ this.optionsPosition$ = new BehaviorSubject("below");
23
27
  this.isDestroyed = false;
24
28
  if (typeof document === "undefined") {
25
29
  throw new Error("AIAutocompleteController requires a browser environment. " +
@@ -90,7 +94,8 @@ export class AIAutocompleteController {
90
94
  // `caretOffset` still held their old values — leaving the caret stuck
91
95
  // at the pre-click position.
92
96
  this.state$ = this.rawState$.pipe(map(computeState), shareReplay({ bufferSize: 1, refCount: true }));
93
- this.dropdown$ = deriveField(this.rawState$, computeDropdown);
97
+ this.optionsPosition$.next(opts.optionsPosition ?? "below");
98
+ this.dropdown$ = combineLatest([this.rawState$, this.optionsPosition$]).pipe(map(([s, optionsPosition]) => computeDropdown(s, optionsPosition)), shareReplay({ bufferSize: 1, refCount: true }));
94
99
  }
95
100
  // === Read-only accessors ===
96
101
  /** Stable ARIA listbox ID for the dropdown. Pass to `<textarea aria-controls="...">`. */
@@ -227,6 +232,9 @@ export class AIAutocompleteController {
227
232
  if (this.isDestroyed)
228
233
  return;
229
234
  this.core.update(opts);
235
+ if (opts.optionsPosition !== undefined) {
236
+ this.optionsPosition$.next(opts.optionsPosition);
237
+ }
230
238
  }
231
239
  /**
232
240
  * Release all resources — unsubscribes from the core, destroys the core,
@@ -284,7 +292,7 @@ function computeState(s) {
284
292
  caretOffset: s.caretOffset,
285
293
  };
286
294
  }
287
- function computeDropdown(s) {
295
+ function computeDropdown(s, optionsPosition) {
288
296
  const editingParam = s.editingParam;
289
297
  const activeSuggestion = s.actionableSuggestions[0];
290
298
  const dropdownPill = editingParam
@@ -306,6 +314,7 @@ function computeDropdown(s) {
306
314
  isLoading: computeUiLoading(s),
307
315
  hasTabbedToHighlight: s.hasTabbedToHighlight,
308
316
  isInputEmpty: s.text.trim().length === 0,
317
+ optionsPosition,
309
318
  };
310
319
  }
311
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWktYXV0b2NvbXBsZXRlLmNvbnRyb2xsZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL2NvbnRyb2xsZXIvYWktYXV0b2NvbXBsZXRlLmNvbnRyb2xsZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLGNBQWMsSUFBSSxrQkFBa0IsR0FLckMsTUFBTSxxQ0FBcUMsQ0FBQztBQUM3QyxPQUFPLEVBQUUsZUFBZSxFQUFFLEdBQUcsRUFBbUIsV0FBVyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBTzFFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFNUM7Ozs7Ozs7Ozs7OztHQVlHO0FBQ0gsTUFBTSxPQUFPLHdCQUF3QjtJQW9FbkM7OztPQUdHO0lBQ0gsWUFBWSxPQUF3QyxFQUFFO1FBcEU5QyxnQkFBVyxHQUFHLEtBQUssQ0FBQztRQXFFMUIsSUFBSSxPQUFPLFFBQVEsS0FBSyxXQUFXLEVBQUU7WUFDbkMsTUFBTSxJQUFJLEtBQUssQ0FDYiwyREFBMkQ7Z0JBQ3pELHdFQUF3RSxDQUMzRSxDQUFDO1NBQ0g7UUFFRCx3RUFBd0U7UUFDeEUscUVBQXFFO1FBQ3JFLE1BQU0sSUFBSSxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFM0MsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLGtCQUFrQixDQUFDLElBQUksRUFBRTtZQUN2QyxHQUFHLElBQUk7WUFDUCxVQUFVLEVBQUUsVUFBVTtZQUN0QixNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU0sSUFBSSxjQUFjO1lBQ3JDLGlFQUFpRTtZQUNqRSxvRUFBb0U7WUFDcEUsMkNBQTJDO1lBQzNDLGVBQWUsRUFBRSxJQUFJLENBQUMsZUFBZSxJQUFJLE9BQU87U0FDakQsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLGVBQWUsQ0FBWSxJQUFJLENBQUMsSUFBSSxDQUFDLFFB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Q0FBQyxvQkFBb0I7UUFDNUMsU0FBUyxFQUFFLGdCQUFnQixDQUFDLENBQUMsQ0FBQztRQUM5QixvQkFBb0IsRUFBRSxDQUFDLENBQUMsb0JBQW9CO1FBQzVDLFlBQVksRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLE1BQU0sS0FBSyxDQUFDO0tBQ3pDLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgdHlwZSBDb21wbGV0ZWRQYXJhbVN0YXRlLFxuICBBSUF1dG9jb21wbGV0ZSBhcyBDb3JlQUlBdXRvY29tcGxldGUsXG4gIHR5cGUgQ29yZVN0YXRlLFxuICB0eXBlIFNlZ21lbnQsXG4gIHR5cGUgU3VnZ2VzdGlvbixcbiAgdHlwZSBTdWdnZXN0aW9uT3B0aW9uLFxufSBmcm9tIFwiQG1hZ2ljeC1lbmcvYWktYXV0b2NvbXBsZXRlLXZhbmlsbGFcIjtcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgbWFwLCB0eXBlIE9ic2VydmFibGUsIHNoYXJlUmVwbGF5IH0gZnJvbSBcInJ4anNcIjtcbmltcG9ydCB0eXBlIHtcbiAgQUlBdXRvY29tcGxldGVDb250cm9sbGVyT3B0aW9ucyxcbiAgQUlBdXRvY29tcGxldGVDb250cm9sbGVyU3RhdGUsXG4gIEFJQXV0b2NvbXBsZXRlQ29udHJvbGxlclVwZGF0ZSxcbiAgQUlBdXRvY29tcGxldGVEcm9wZG93blN0YXRlLFxufSBmcm9tIFwiLi4vc2hhcmVkL3R5cGVzXCI7XG5pbXBvcnQgeyBkZXJpdmVGaWVsZCB9IGZyb20gXCIuL29ic2VydmFibGVzXCI7XG5cbi8qKlxuICogVGllciAyIGxvZ2ljIHN1cmZhY2UgZm9yIGBAbWFnaWN4LWVuZy9haS1hdXRvY29tcGxldGUtYW5ndWxhcmAg4oCUIHRoZSBBbmd1bGFyXG4gKiBlcXVpdmFsZW50IG9mIFJlYWN0J3MgYHVzZUFJQXV0b2NvbXBsZXRlKClgIGhvb2suIFdyYXBzIGEgaGVhZGxlc3NcbiAqIGBAbWFnaWN4LWVuZy9haS1hdXRvY29tcGxldGUtdmFuaWxsYWAgY29yZSBhbmQgZXhwb3NlcyBpdHMgc3RhdGUgYXMgUnhKU1xuICogb2JzZXJ2YWJsZXMgcGx1cyB0aGluIGFjdGlvbiBtZXRob2RzLlxuICpcbiAqIFBlciBUREIgwqczLjMsIHRoZSBjb250cm9sbGVyIGlzIGNvbnN1bWVyLW1hbmFnZWQg4oCUIHRoZSBjb25zdW1lciBjcmVhdGVzIGl0XG4gKiB3aXRoIGBuZXdgLCBob2xkcyB0aGUgcmVmZXJlbmNlLCBhbmQgKiptdXN0IGNhbGwgYGRlc3Ryb3koKWAqKiBpbiB0aGVpclxuICogb3duIGBuZ09uRGVzdHJveWAuIFRoZSBUaWVyIDEgYDxhaS1hdXRvY29tcGxldGU+YCBjb21wb25lbnQgZG9lcyB0aGlzXG4gKiBhdXRvbWF0aWNhbGx5OyBUaWVyIDIgY29uc3VtZXJzIGRvIG5vdCBnZXQgYXV0by1jbGVhbnVwLlxuICpcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNsYXNzIEFJQXV0b2NvbXBsZXRlQ29udHJvbGxlciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgY29yZTogQ29yZUFJQXV0b2NvbXBsZXRlO1xuICBwcml2YXRlIHJlYWRvbmx5IHJhd1N0YXRlJDogQmVoYXZpb3JTdWJqZWN0PENvcmVTdGF0ZT47XG4gIHByaXZhdGUgcmVhZG9ubHkgdW5zdWJzY3JpYmVDb3JlOiAoKSA9PiB2b2lkO1xuICBwcml2YXRlIGlzRGVzdHJveWVkID0gZmFsc2U7XG5cbiAgLy8gPT09IFBlci1maWVsZCBvYnNlcnZhYmxlcyA9PT1cbiAgLy8gRWFjaCBvbmUgcnVucyB0aHJvdWdoIGRlcml2ZUZpZWxkLCB3aGljaCBiYWtlcyBpbiBkaXN0aW5jdFVudGlsQ2hhbmdlZFxuICAvLyBhbmQgc2hhcmVSZXBsYXkoeyBidWZmZXJTaXplOiAxLCByZWZDb3VudDogdHJ1ZSB9KSBwZXIgwqcxOS40LlxuXG4gIC8qKiBQbGFpbi10ZXh0IGNvbnRlbnQgb2YgdGhlIGVkaXRvci4gKi9cbiAgcmVhZG9ubHkgdGV4dCQ6IE9ic2VydmFibGU8c3RyaW5nPjtcbiAgLyoqIENvbXBsZXRlZCAoYm9sZCkgcGFyYW1zIGN1cnJlbnRseSBpbiB0aGUgZWRpdG9yLiAqL1xuICByZWFkb25seSBjb21wbGV0ZWRQYXJhbXMkOiBPYnNlcnZhYmxlPENvbXBsZXRlZFBhcmFtU3RhdGVbXT47XG4gIC8qKiBBY3Rpb25hYmxlIHN1Z2dlc3Rpb24gcGlsbHMgKGZpcnN0IG9uZSBpcyB0aGUgYWN0aXZlIHBpbGwpLiAqL1xuICByZWFkb25seSBzdWdnZXN0aW9uUGlsbHMkOiBPYnNlcnZhYmxlPFN1Z2dlc3Rpb25bXT47XG4gIC8qKiBUZXh0ICsgY29tcGxldGVkLXBhcmFtIHNlZ21lbnRzIGZvciByZW5kZXJpbmcgdGhlIGVkaXRvciBib2R5LiAqL1xuICByZWFkb25seSBzZWdtZW50cyQ6IE9ic2VydmFibGU8U2VnbWVudFtdPjtcbiAgLyoqIElEIG9mIHRoZSBtb3N0LXJlY2VudGx5LXByb21vdGVkIHBhcmFtIChkcml2ZXMgc2hpbW1lciBhbmltYXRpb24pLiAqL1xuICByZWFkb25seSBuZXdQYXJhbUlkJDogT2JzZXJ2YWJsZTxzdHJpbmcgfCBudWxsPjtcbiAgLyoqIEFsbCBzdWdnZXN0aW9ucyBmcm9tIHRoZSBzZXJ2ZXIgKGluY2x1ZGluZyBub24tYWN0aW9uYWJsZSBvbmVzKS4gKi9cbiAgcmVhZG9ubHkgc3VnZ2VzdGlvbnMkOiBPYnNlcnZhYmxlPFN1Z2dlc3Rpb25bXT47XG4gIC8qKiBDdXJyZW50bHkgaGlnaGxpZ2h0ZWQgZHJvcGRvd24gb3B0aW9uIGluZGV4LiAtMSA9IG5vbmUuICovXG4gIHJlYWRvbmx5IGFjdGl2ZUluZGV4JDogT2JzZXJ2YWJsZTxudW1iZXI+O1xuICAvKipcbiAgICogVUktdmlzaWJsZSBsb2FkaW5nIGZsYWcg4oCUIHN1cHByZXNzZWQgZHVyaW5nIHRoZSBwb3N0LXNlbGVjdCBzdHJlYWtcbiAgICogYW5pbWF0aW9uIGFuZCBkdXJpbmcgcmUtZWRpdCAoY2FjaGVkIG9wdGlvbnMgc3RheSB2aXNpYmxlIHRoZXJlKS4gVXNlXG4gICAqIHRoaXMgaW5zdGVhZCBvZiB0aGUgcmF3IGNvcmUgc3RhdGUgZm9yIGFueSBsb2FkaW5nLXNrZWxldG9uIGJpbmRpbmcuXG4gICAqL1xuICByZWFkb25seSBpc0xvYWRpbmckOiBPYnNlcnZhYmxlPGJvb2xlYW4+O1xuICAvKiogU2VydmVyLXJlcG9ydGVkIFwicXVlcnkgaXMgY29tcGxldGVcIiBmbGFnLiAqL1xuICByZWFkb25seSBpc1JlYWR5JDogT2JzZXJ2YWJsZTxib29sZWFuPjtcbiAgLyoqIFdoZXRoZXIgdGhlIGVkaXRvciBjdXJyZW50bHkgaGFzIGZvY3VzLiAqL1xuICByZWFkb25seSBpc0ZvY3VzZWQkOiBPYnNlcnZhYmxlPGJvb2xlYW4+O1xuICAvKiogV2hldGhlciB0aGUgZHJvcGRvd24gc2hvdWxkIGN1cnJlbnRseSBiZSB2aXNpYmxlLiAqL1xuICByZWFkb25seSBpc0Ryb3Bkb3duT3BlbiQ6IE9ic2VydmFibGU8Ym9vbGVhbj47XG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBhY3RpdmUgKGxlYWRpbmcpIHBpbGwgc2hvdWxkIHJlbmRlciBzZWxlY3RlZCAoZnVsbCBvcGFjaXR5KVxuICAgKiByYXRoZXIgdGhhbiB0aGUgZGUtZW1waGFzaXplZCBgZmlyc3RgIHRpZXIuIEF1dG8gdHJpZ2dlciDih5IgdHJ1ZSBvbmx5IHdoaWxlXG4gICAqIGEgZHJvcGRvd24gb3B0aW9uIGlzIGhpZ2hsaWdodGVkOyBtYW51YWwg4oeSIHRydWUgb25jZSB0aGUgcGlsbCBpcyB0YXBwZWQuXG4gICAqL1xuICByZWFkb25seSBpc0FjdGl2ZVBpbGxTZWxlY3RlZCQ6IE9ic2VydmFibGU8Ym9vbGVhbj47XG4gIC8qKiBTZXJ2ZXItc3VnZ2VzdGVkIHBsYWNlaG9sZGVyIHRleHQgZm9yIHRoZSBlZGl0b3IuICovXG4gIHJlYWRvbmx5IHBsYWNlaG9sZGVyVGV4dCQ6IE9ic2VydmFibGU8c3RyaW5nPjtcbiAgLyoqIExhc3QgZmV0Y2ggZXJyb3IsIG9yIG51bGwuICovXG4gIHJlYWRvbmx5IGVycm9yJDogT2JzZXJ2YWJsZTxFcnJvciB8IG51bGw+O1xuICAvKiogUGFyYW0gY3VycmVudGx5IGJlaW5nIHJlLWVkaXRlZCwgb3IgbnVsbC4gKi9cbiAgcmVhZG9ubHkgZWRpdGluZ1BhcmFtJDogT2JzZXJ2YWJsZTxDb21wbGV0ZWRQYXJhbVN0YXRlIHwgbnVsbD47XG4gIC8qKiBQbGFpbi10ZXh0IG9mZnNldCB3aGVyZSB0aGUgZWRpdCByZWdpb24gc3RhcnRzLCBvciBudWxsLiAqL1xuICByZWFkb25seSBlZGl0aW5nQW5jaG9yJDogT2JzZXJ2YWJsZTxudW1iZXIgfCBudWxsPjtcbiAgLyoqIExpdmUgY2FyZXQgb2Zmc2V0IHdpdGhpbiB0aGUgZWRpdG9yLiAqL1xuICByZWFkb25seSBjYXJldE9mZnNldCQ6IE9ic2VydmFibGU8bnVtYmVyIHwgbnVsbD47XG5cbiAgLy8gPT09IENvbXBvc2l0ZSBvYnNlcnZhYmxlcyA9PT1cblxuICAvKipcbiAgICogU25hcHNob3Qgb2YgZXZlcnkgcHVibGljIGZpZWxkIGluIG9uZSBvYmplY3QuIENvbnZlbmllbnQgZm9yXG4gICAqIGAqbmdJZj1cImN0cmwuc3RhdGUkIHwgYXN5bmMgYXMgc3RhdGVcImAgdGVtcGxhdGluZyDigJQgYWxpYXNlcyBhbGwgZmllbGRzXG4gICAqIHVuZGVyIGEgc2luZ2xlIHN1YnNjcmlwdGlvbiBpbnN0ZWFkIG9mIG11bHRpcGxlIGB8IGFzeW5jYCBwaXBlcy5cbiAgICovXG4gIHJlYWRvbmx5IHN0YXRlJDogT2JzZXJ2YWJsZTxBSUF1dG9jb21wbGV0ZUNvbnRyb2xsZXJTdGF0ZT47XG5cbiAgLyoqXG4gICAqIENvbXBvc2l0ZSBzdGF0ZSBmb3IgdGhlIGRyb3Bkb3duIHZpZXcuIFRpZXIgMiBjb25zdW1lcnMgc3ByZWFkIHRoaXMgaW50b1xuICAgKiBgPGFpLWF1dG9jb21wbGV0ZS1kcm9wZG93bj5gOyBUaWVyIDEgdXNlcyB0aGUgc2FtZSBzaGFwZSBpbnRlcm5hbGx5LlxuICAgKi9cbiAgcmVhZG9ubHkgZHJvcGRvd24kOiBPYnNlcnZhYmxlPEFJQXV0b2NvbXBsZXRlRHJvcGRvd25TdGF0ZT47XG5cbiAgLyoqXG4gICAqIFRocm93cyBpZiBpbnZva2VkIG91dHNpZGUgYSBicm93c2VyIGVudmlyb25tZW50LiBGb3IgU1NSIC8gQW5ndWxhclxuICAgKiBVbml2ZXJzYWwsIGdhdGUgY29uc3RydWN0aW9uIHdpdGggYGlzUGxhdGZvcm1Ccm93c2VyYCDigJQgc2VlIFREQiDCpzE2LjMuXG4gICAqL1xuICBjb25zdHJ1Y3RvcihvcHRzOiBBSUF1dG9jb21wbGV0ZUNvbnRyb2xsZXJPcHRpb25zID0ge30pIHtcbiAgICBpZiAodHlwZW9mIGRvY3VtZW50ID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIFwiQUlBdXRvY29tcGxldGVDb250cm9sbGVyIHJlcXVpcmVzIGEgYnJvd3NlciBlbnZpcm9ubWVudC4gXCIgK1xuICAgICAgICAgIFwiRm9yIFNTUiAvIEFuZ3VsYXIgVW5pdmVyc2FsLCBnYXRlIGNvbnN0cnVjdGlvbiB3aXRoIGlzUGxhdGZvcm1Ccm93c2VyLlwiLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBIZWFkbGVzcyBtb2RlIG5ldmVyIHJlbmRlcnMgdG8gdGhlIGhvc3QsIHNvIGEgdGhyb3dhd2F5IGRpdiBpcyBmaW5lIOKAlFxuICAgIC8vIGl0J3MgcmVxdWlyZWQgYnkgdGhlIGNvcmUncyBzaWduYXR1cmUgZm9yIHN5bW1ldHJ5IHdpdGggZnVsbCBtb2RlLlxuICAgIGNvbnN0IGhvc3QgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuXG4gICAgdGhpcy5jb3JlID0gbmV3IENvcmVBSUF1dG9jb21wbGV0ZShob3N0LCB7XG4gICAgICAuLi5vcHRzLFxuICAgICAgcmVuZGVyTW9kZTogXCJoZWFkbGVzc1wiLFxuICAgICAgc291cmNlOiBvcHRzLnNvdXJjZSA/PyBcImhlYWRsZXNzLXNka1wiLFxuICAgICAgLy8gSGVhZGxlc3MgbW9kZSBuZXZlciByZW5kZXJzIHRoZSBkcm9wZG93biBET00sIGJ1dCB0aGUga2V5Ym9hcmRcbiAgICAgIC8vIGNvbnRyb2xsZXIgc3RpbGwgcmVhZHMgYG9wdGlvbnNQb3NpdGlvbmAgdG8gZGVjaWRlIHdoaWNoIHZlcnRpY2FsXG4gICAgICAvLyBhcnJvdyBvcGVucyB0aGUgZHJvcGRvd24gZnJvbSB0aGUgaW5wdXQuXG4gICAgICBvcHRpb25zUG9zaXRpb246IG9wdHMub3B0aW9uc1Bvc2l0aW9uID8/IFwiYmVsb3dcIixcbiAgICB9KTtcblxuICAgIHRoaXMucmF3U3RhdGUkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxDb3JlU3RhdGU+KHRoaXMuY29yZS5nZXRTdGF0ZSgpKTtcbiAgICAvLyBQdXNoIHRoZSBzdG9yZSdzICpjdXJyZW50KiBzdGF0ZSwgbm90IHRoZSBzbmFwc2hvdCB0aGUgbGlzdGVuZXIgd2FzXG4gICAgLy8gaGFuZGVkLiBUaGUgY29yZSBub3RpZmllcyBsaXN0ZW5lcnMgc3luY2hyb25vdXNseSwgYW5kIHNvbWUgYWN0aW9uc1xuICAgIC8vIHRyaWdnZXIgcmVlbnRyYW50IGBzdG9yZS5zZXRgIGNhbGxzIChlLmcuIHR5cGluZyBhIG5vbi1tYXRjaGluZyBjaGFyXG4gICAgLy8gZHVyaW5nIHJlLWVkaXQgbWFrZXMgdGhlIGNvcmUgc3luY2hyb25vdXNseSBleGl0IHJlLWVkaXQgYW5kIGtpY2sgb2ZmIGFcbiAgICAvLyBmZXRjaCkuIFJlZW50cmFuY3kgbWFrZXMgdGhlIG91dGVyIHNldCdzIGxpc3RlbmVyIGxvb3AgY29udGludWUgd2l0aCBhXG4gICAgLy8gbm93LXN0YWxlIHNuYXBzaG90LCBzbyB0aGUgbGlzdGVuZXIgY2FuIGZpcmUgKm91dCBvZiBvcmRlciog4oCUIGRlbGl2ZXJpbmdcbiAgICAvLyBhbiBvbGRlciBzdGF0ZSAoc3RpbGwgaW4gcmUtZWRpdCkgYWZ0ZXIgYSBuZXdlciBvbmUgKHJlLWVkaXQgZXhpdGVkKS5cbiAgICAvLyBSZWFkaW5nIGBnZXRTdGF0ZSgpYCBhdCBlbWlzc2lvbiB0aW1lIGNvbGxhcHNlcyBldmVyeSBub3RpZmljYXRpb24gb250b1xuICAgIC8vIHRoZSB0cnVlIGxhdGVzdCBzdGF0ZSwgc28gYSBzdGFsZSBgZWRpdGluZ1BhcmFtYCBjYW4ndCByZXN1cnJlY3QgYW5kXG4gICAgLy8gcmV0cmlnZ2VyIHRoZSBlZGl0b3IncyByZS1lZGl0IGNhcmV0LXBhcmsgKHdoaWNoIHdvdWxkIHlhbmsgdGhlIGNhcmV0XG4gICAgLy8gYmFjayB0byB3aGVyZSByZS1lZGl0aW5nIHN0YXJ0ZWQpLiBkaXN0aW5jdFVudGlsQ2hhbmdlZCBkb3duc3RyZWFtIGRyb3BzXG4gICAgLy8gdGhlIHJlc3VsdGluZyBkdXBsaWNhdGUgZW1pc3Npb25zLiBSZWFjdCBhdm9pZHMgdGhpcyBiZWNhdXNlIGl0IGJhdGNoZXNcbiAgICAvLyByZW5kZXJzIGFuZCBpdHMgY2FyZXQgZWZmZWN0cyBhcmUgZGVwZW5kZW5jeS1nYXRlZDsgb3VyIHN1YnNjcmlwdGlvbiBpc1xuICAgIC8vIHN5bmNocm9ub3VzLCBzbyB3ZSBjb2FsZXNjZSBoZXJlIGluc3RlYWQuXG4gICAgdGhpcy51bnN1YnNjcmliZUNvcmUgPSB0aGlzLmNvcmUuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIGlmICghdGhpcy5pc0Rlc3Ryb3llZCkgdGhpcy5yYXdTdGF0ZSQubmV4dCh0aGlzLmNvcmUuZ2V0U3RhdGUoKSk7XG4gICAgfSk7XG5cbiAgICAvLyA9PT0gUGVyLWZpZWxkIG9ic2VydmFibGVzID09PVxuICAgIC8vIEFycmF5LXZhbHVlZCBmaWVsZHMgdXNlIHNoYWxsb3cgZXF1YWxpdHkuIFRoZSB2YW5pbGxhIHN0b3JlIHNwcmVhZHMgb25cbiAgICAvLyBldmVyeSB3cml0ZSAoYHN0b3JlLnNldCh7IGNvbXBsZXRlZFBhcmFtczogWy4uLl0gfSlgKSwgc28gcmVmZXJlbmNlXG4gICAgLy8gZXF1YWxpdHkgd291bGQgcmUtZmlyZSBkb3duc3RyZWFtIHN1YnNjcmliZXJzIG9uIGV2ZXJ5IHN0YXRlIHRpY2sgZXZlblxuICAgIC8vIHdoZW4gdGhlIGFycmF5J3MgY29udGVudHMgYXJlIHVuY2hhbmdlZC4gVGhlIG90aGVyIGZpZWxkcyBhcmVcbiAgICAvLyBwcmltaXRpdmVzIG9yIHN0YWJsZSBvYmplY3QgcmVmZXJlbmNlcywgc28gZGVmYXVsdCBpZGVudGl0eSBlcXVhbGl0eVxuICAgIC8vIHdvcmtzIGZpbmUuXG4gICAgdGhpcy50ZXh0JCA9IGRlcml2ZUZpZWxkKHRoaXMucmF3U3RhdGUkLCAocykgPT4gcy50ZXh0KTtcbiAgICB0aGlzLmNvbXBsZXRlZFBhcmFtcyQgPSBkZXJpdmVGaWVsZCh0aGlzLnJhd1N0YXRlJCwgKHMpID0+IHMuY29tcGxldGVkUGFyYW1zLCBhcnJFcSk7XG4gICAgdGhpcy5zdWdnZXN0aW9uUGlsbHMkID0gZGVyaXZlRmllbGQodGhpcy5yYXdTdGF0ZSQsIChzKSA9PiBzLmFjdGlvbmFibGVTdWdnZXN0aW9ucywgYXJyRXEpO1xuICAgIHRoaXMuc2VnbWVudHMkID0gZGVyaXZlRmllbGQodGhpcy5yYXdTdGF0ZSQsIChzKSA9PiBzLnNlZ21lbnRzLCBhcnJFcSk7XG4gICAgdGhpcy5uZXdQYXJhbUlkJCA9IGRlcml2ZUZpZWxkKHRoaXMucmF3U3RhdGUkLCAocykgPT4gcy5uZXdQYXJhbUlkKTtcbiAgICB0aGlzLnN1Z2dlc3Rpb25zJCA9IGRlcml2ZUZpZWxkKHRoaXMucmF3U3RhdGUkLCAocykgPT4gcy5zdWdnZXN0aW9ucywgYXJyRXEpO1xuICAgIHRoaXMuYWN0aXZlSW5kZXgkID0gZGVyaXZlRmllbGQodGhpcy5yYXdTdGF0ZSQsIChzKSA9PiBzLmFjdGl2ZURyb3Bkb3duSW5kZXgpO1xuICAgIHRoaXMuaXNMb2FkaW5nJCA9IGRlcml2ZUZpZWxkKHRoaXMucmF3U3RhdGUkLCBjb21wdXRlVWlMb2FkaW5nKTtcbiAgICB0aGlzLmlzUmVhZHkkID0gZGVyaXZlRmllbGQodGhpcy5yYXdTdGF0ZSQsIChzKSA9PiBzLmlzUmVhZHkpO1xuICAgIHRoaXMuaXNGb2N1c2VkJCA9IGRlcml2ZUZpZWxkKHRoaXMucmF3U3RhdGUkLCAocykgPT4gcy5pc0ZvY3VzZWQpO1xuICAgIHRoaXMuaXNEcm9wZG93bk9wZW4kID0gZGVyaXZlRmllbGQodGhpcy5yYXdTdGF0ZSQsIChzKSA9PiBzLmlzRHJvcGRvd25PcGVuKTtcbiAgICB0aGlzLmlzQWN0aXZlUGlsbFNlbGVjdGVkJCA9IGRlcml2ZUZpZWxkKHRoaXMucmF3U3RhdGUkLCAocykgPT4gcy5pc0FjdGl2ZVBpbGxTZWxlY3RlZCk7XG4gICAgdGhpcy5wbGFjZWhvbGRlclRleHQkID0gZGVyaXZlRmllbGQodGhpcy5yYXdTdGF0ZSQsIChzKSA9PiBzLnBsYWNlaG9sZGVyVGV4dCk7XG4gICAgdGhpcy5lcnJvciQgPSBkZXJpdmVGaWVsZCh0aGlzLnJhd1N0YXRlJCwgKHMpID0+IHMuZXJyb3IpO1xuICAgIHRoaXMuZWRpdGluZ1BhcmFtJCA9IGRlcml2ZUZpZWxkKHRoaXMucmF3U3RhdGUkLCAocykgPT4gcy5lZGl0aW5nUGFyYW0pO1xuICAgIHRoaXMuZWRpdGluZ0FuY2hvciQgPSBkZXJpdmVGaWVsZCh0aGlzLnJhd1N0YXRlJCwgKHMpID0+IHMuZWRpdGluZ0FuY2hvcik7XG4gICAgdGhpcy5jYXJldE9mZnNldCQgPSBkZXJpdmVGaWVsZCh0aGlzLnJhd1N0YXRlJCwgKHMpID0+IHMuY2FyZXRPZmZzZXQpO1xuXG4gICAgLy8gPT09IENvbXBvc2l0ZSBvYnNlcnZhYmxlcyA9PT1cbiAgICAvLyBQcm9qZWN0IGRpcmVjdGx5IG9mZiBgcmF3U3RhdGUkYCB3aXRoIGEgc2luZ2xlIG1hcCgpIHNvIGVhY2ggc3RvcmVcbiAgICAvLyB0aWNrIHByb2R1Y2VzIGV4YWN0bHkgT05FIGNvaGVyZW50IHN0YXRlJCBlbWlzc2lvbi4gVXNpbmdcbiAgICAvLyBgY29tYmluZUxhdGVzdGAgb3ZlciB0aGUgcGVyLWZpZWxkIG9ic2VydmFibGVzIGhlcmUgd291bGQgZmlyZSBvbmVcbiAgICAvLyBlbWlzc2lvbiBwZXIgaW5uZXItc291cmNlIHRpY2sgKHVwIHRvIE4gcGVyIHN0b3JlIHVwZGF0ZSksIGFuZCB0aGVcbiAgICAvLyBlZGl0b3ItaG9zdCBkaXJlY3RpdmUncyBwb3N0LXByb21vdGUgcmVmb2N1cyB3b3VsZCBydW4gYWdhaW5zdCBhblxuICAgIC8vIGludGVybWVkaWF0ZSBzdGF0ZSB3aGVyZSBgbmV3UGFyYW1JZGAgd2FzIHNldCBidXQgYHNlZ21lbnRzYCAvXG4gICAgLy8gYGNhcmV0T2Zmc2V0YCBzdGlsbCBoZWxkIHRoZWlyIG9sZCB2YWx1ZXMg4oCUIGxlYXZpbmcgdGhlIGNhcmV0IHN0dWNrXG4gICAgLy8gYXQgdGhlIHByZS1jbGljayBwb3NpdGlvbi5cbiAgICB0aGlzLnN0YXRlJCA9IHRoaXMucmF3U3RhdGUkLnBpcGUoXG4gICAgICBtYXAoY29tcHV0ZVN0YXRlKSxcbiAgICAgIHNoYXJlUmVwbGF5KHsgYnVmZmVyU2l6ZTogMSwgcmVmQ291bnQ6IHRydWUgfSksXG4gICAgKTtcblxuICAgIHRoaXMuZHJvcGRvd24kID0gZGVyaXZlRmllbGQodGhpcy5yYXdTdGF0ZSQsIGNvbXB1dGVEcm9wZG93bik7XG4gIH1cblxuICAvLyA9PT0gUmVhZC1vbmx5IGFjY2Vzc29ycyA9PT1cblxuICAvKiogU3RhYmxlIEFSSUEgbGlzdGJveCBJRCBmb3IgdGhlIGRyb3Bkb3duLiBQYXNzIHRvIGA8dGV4dGFyZWEgYXJpYS1jb250cm9scz1cIi4uLlwiPmAuICovXG4gIGdldCBsaXN0Ym94SWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5jb3JlLmxpc3Rib3hJZDtcbiAgfVxuXG4gIC8qKiBXaGV0aGVyIGBkZXN0cm95KClgIGhhcyBiZWVuIGNhbGxlZC4gQWZ0ZXIgZGVzdHJ1Y3Rpb24gYWxsIGFjdGlvbiBtZXRob2RzIG5vLW9wLiAqL1xuICBnZXQgZGVzdHJveWVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmlzRGVzdHJveWVkO1xuICB9XG5cbiAgLyoqXG4gICAqIFN5bmNocm9ub3VzIHNuYXBzaG90IG9mIHRoZSBjb250cm9sbGVyJ3MgY3VycmVudCBwdWJsaWMgc3RhdGUuIE1pcnJvcnNcbiAgICogdGhlIGxhdGVzdCBlbWlzc2lvbiBvZiBgc3RhdGUkYC4gVXNlZnVsIGluIGNhbGxiYWNrcyB3aGVyZSB5b3UgY2FuJ3RcbiAgICogYHN1YnNjcmliZWAgKGUuZy4gaW5zaWRlIGFuIGV2ZW50IGhhbmRsZXIpLlxuICAgKi9cbiAgZ2V0U3RhdGUoKTogQUlBdXRvY29tcGxldGVDb250cm9sbGVyU3RhdGUge1xuICAgIHJldHVybiBjb21wdXRlU3RhdGUodGhpcy5yYXdTdGF0ZSQudmFsdWUpO1xuICB9XG5cbiAgLy8gPT09IEFjdGlvbiBtZXRob2RzIChwYXNzLXRocm91Z2ggdG8gdGhlIGNvcmUpID09PVxuICAvL1xuICAvLyBFdmVyeSBhY3Rpb24gbWV0aG9kIGJlZ2lucyB3aXRoIGFuIGBpc0Rlc3Ryb3llZGAgZ3VhcmQgc28gdGhhdCBjYWxsZXJzXG4gIC8vIHdobyBob2xkIGEgc3RhbGUgcmVmZXJlbmNlIGFmdGVyIGBkZXN0cm95KClgIGRvbid0IGFjY2lkZW50YWxseSB0cmlnZ2VyXG4gIC8vIHdvcmsgb24gYSB0b3JuLWRvd24gY29yZS4gVGhlIHZhbmlsbGEgY29yZSBkb2VzIG5vdCBnYXRlIGl0cyBvd24gbWV0aG9kc1xuICAvLyBwb3N0LWRpc3Bvc2Ug4oCUIGByZXNldCgpYCwgYGhhbmRsZVRleHRDaGFuZ2UoKWAsIGFuZCBmcmllbmRzIHdvdWxkIHN0aWxsXG4gIC8vIHNjaGVkdWxlIGZldGNoZXMgb3IgZmlyZSBIVFRQIHJlcXVlc3RzIGFnYWluc3QgYW4gYWJvcnRlZCBjb250cm9sbGVyLFxuICAvLyBhbmQgdGhlIHJlc3BvbnNlcyB3b3VsZCBoYXZlIG5vd2hlcmUgdG8gc3VyZmFjZSAocmF3U3RhdGUkIGlzIGFscmVhZHlcbiAgLy8gY29tcGxldGUpLiBUaGUgZ3VhcmQgbWFrZXMgdGhlIEpTRG9jLXByb21pc2VkIFwibm8tb3Agc2lsZW50bHlcIlxuICAvLyBzZW1hbnRpY3MgYWN0dWFsbHkgdHJ1ZS5cblxuICAvKiogQ2xlYXIgYWxsIHN0YXRlLCByb3RhdGUgYHNlc3Npb25faWRgLCBhbmQgcmUtZmV0Y2guIENhbGwgYWZ0ZXIgc3VibWl0LiAqL1xuICByZXNldCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pc0Rlc3Ryb3llZCkgcmV0dXJuO1xuICAgIHRoaXMuY29yZS5yZXNldCgpO1xuICB9XG5cbiAgLyoqIFBpY2sgYSBkcm9wZG93biBvcHRpb24gKG9yIHJlcGxhY2UgdGhlIHJlLWVkaXRlZCBwYXJhbSBpZiBpbiByZS1lZGl0IG1vZGUpLiAqL1xuICBzZWxlY3RPcHRpb24ob3B0aW9uOiBTdWdnZXN0aW9uT3B0aW9uKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaXNEZXN0cm95ZWQpIHJldHVybjtcbiAgICB0aGlzLmNvcmUuc2VsZWN0T3B0aW9uKG9wdGlvbik7XG4gIH1cblxuICAvKiogUHJvbW90ZSB0aGUgcGlsbCBhdCBgaW5kZXhgIHRvIGFjdGl2ZSAoZnJvbnQgb2YgdGhlIGxpc3QpLiAqL1xuICBzZXRBY3RpdmVQaWxsKGluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pc0Rlc3Ryb3llZCkgcmV0dXJuO1xuICAgIHRoaXMuY29yZS5zZXRBY3RpdmVQaWxsKGluZGV4KTtcbiAgfVxuXG4gIC8qKiBEcm9wIHRoZSBsYXN0IGNvbXBsZXRlZCBwYXJhbSdzIFwiY29tcGxldGVkXCIgc3RhdHVzLiBUZXh0IHN0YXlzIGFzIHBsYWluIHRleHQuICovXG4gIHJlbW92ZUxhc3RQYXJhbSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pc0Rlc3Ryb3llZCkgcmV0dXJuO1xuICAgIHRoaXMuY29yZS5yZW1vdmVMYXN0UGFyYW0oKTtcbiAgfVxuXG4gIC8qKiBDbGVhciB0aGUgc2hpbW1lciBhbmltYXRpb24gc3RhdGUgZm9yIHRoZSBtb3N0LXJlY2VudGx5LWFkZGVkIHBhcmFtLiAqL1xuICBjbGVhck5ld1BhcmFtSWQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaXNEZXN0cm95ZWQpIHJldHVybjtcbiAgICB0aGlzLmNvcmUuY2xlYXJOZXdQYXJhbUlkKCk7XG4gIH1cblxuICAvKiogQ29udHJvbGxlZC1tb2RlIHNldHRlciBmb3IgZWRpdG9yIHRleHQuICovXG4gIHNldFZhbHVlKHRleHQ6IHN0cmluZyk6IHZvaWQge1xuICAgIGlmICh0aGlzLmlzRGVzdHJveWVkKSByZXR1cm47XG4gICAgdGhpcy5jb3JlLnNldFZhbHVlKHRleHQpO1xuICB9XG5cbiAgLyoqIENvbnRyb2xsZWQtbW9kZSBzZXR0ZXIgZm9yIGNvbXBsZXRlZCBwYXJhbXMuICovXG4gIHNldENvbXBsZXRlZFBhcmFtcyhwYXJhbXM6IENvbXBsZXRlZFBhcmFtU3RhdGVbXSk6IHZvaWQge1xuICAgIGlmICh0aGlzLmlzRGVzdHJveWVkKSByZXR1cm47XG4gICAgdGhpcy5jb3JlLnNldENvbXBsZXRlZFBhcmFtcyhwYXJhbXMpO1xuICB9XG5cbiAgLyoqIEZvcndhcmQgcGxhaW4tdGV4dCBpbnB1dCBmcm9tIHRoZSBjb25zdW1lcidzIGA8dGV4dGFyZWE+YCB0byB0aGUgY29yZS4gKi9cbiAgaGFuZGxlVGV4dENoYW5nZSh2YWx1ZTogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaXNEZXN0cm95ZWQpIHJldHVybjtcbiAgICB0aGlzLmNvcmUuaGFuZGxlVGV4dENoYW5nZSh2YWx1ZSk7XG4gIH1cblxuICAvKiogRm9yd2FyZCBrZXlib2FyZCBldmVudHMgZnJvbSB0aGUgY29uc3VtZXIncyBgPHRleHRhcmVhPmAgdG8gdGhlIGNvcmUuICovXG4gIGhhbmRsZUtleURvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pc0Rlc3Ryb3llZCkgcmV0dXJuO1xuICAgIHRoaXMuY29yZS5oYW5kbGVLZXlEb3duKGV2ZW50KTtcbiAgfVxuXG4gIC8qKiBOb3RpZnkgdGhlIGNvcmUgb2YgZm9jdXMgc3RhdGUuICovXG4gIHNldEZvY3VzZWQoZm9jdXNlZDogYm9vbGVhbik6IHZvaWQge1xuICAgIGlmICh0aGlzLmlzRGVzdHJveWVkKSByZXR1cm47XG4gICAgdGhpcy5jb3JlLnNldEZvY3VzZWQoZm9jdXNlZCk7XG4gIH1cblxuICAvKiogRW50ZXIgcmUtZWRpdCBtb2RlIGZvciB0aGUgYm9sZCBwYXJhbSB3aXRoIHRoZSBnaXZlbiBpZC4gKi9cbiAgc3RhcnRFZGl0aW5nUGFyYW0ocGFyYW1JZDogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaXNEZXN0cm95ZWQpIHJldHVybjtcbiAgICB0aGlzLmNvcmUuc3RhcnRFZGl0aW5nUGFyYW0ocGFyYW1JZCk7XG4gIH1cblxuICAvKiogRXhpdCByZS1lZGl0IG1vZGUgd2l0aG91dCBjaGFuZ2luZyB0aGUgYm9sZCBwYXJhbS4gKi9cbiAgZXhpdEVkaXRNb2RlKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmlzRGVzdHJveWVkKSByZXR1cm47XG4gICAgdGhpcy5jb3JlLmV4aXRFZGl0TW9kZSgpO1xuICB9XG5cbiAgLyoqIEZvcndhcmQgcG9zdC1pbnB1dCBjYXJldCBwb3NpdGlvbiAoZXh0ZW5kcyB0aGUgZWRpdCB0YWlsKS4gKi9cbiAgaGFuZGxlQ2FyZXRBZnRlcklucHV0KG9mZnNldDogbnVtYmVyIHwgbnVsbCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmlzRGVzdHJveWVkKSByZXR1cm47XG4gICAgdGhpcy5jb3JlLmhhbmRsZUNhcmV0QWZ0ZXJJbnB1dChvZmZzZXQpO1xuICB9XG5cbiAgLyoqIEZvcndhcmQgc2VsZWN0aW9uLW9ubHkgY2FyZXQgbW92ZXMgKG1heSBleGl0IHJlLWVkaXQpLiAqL1xuICBoYW5kbGVDYXJldE1vdmUob2Zmc2V0OiBudW1iZXIgfCBudWxsKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaXNEZXN0cm95ZWQpIHJldHVybjtcbiAgICB0aGlzLmNvcmUuaGFuZGxlQ2FyZXRNb3ZlKG9mZnNldCk7XG4gIH1cblxuICAvKiogUmVwbGFjZSB0aGUgYm9sZCBwYXJhbSBiZWluZyByZS1lZGl0ZWQuIFJldHVybnMgdHJ1ZSB3aGVuIGFwcGxpZWQuICovXG4gIHJlcGxhY2VFZGl0aW5nUmFuZ2UocmVwbGFjZW1lbnQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGlmICh0aGlzLmlzRGVzdHJveWVkKSByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuIHRoaXMuY29yZS5yZXBsYWNlRWRpdGluZ1JhbmdlKHJlcGxhY2VtZW50KTtcbiAgfVxuXG4gIC8qKiBTZXQgdGhlIGhpZ2hsaWdodGVkIG9wdGlvbiBpbmRleCAodHlwaWNhbGx5IGRyaXZlbiBieSBob3ZlcikuICovXG4gIHNldEFjdGl2ZURyb3Bkb3duSW5kZXgoaW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgIGlmICh0aGlzLmlzRGVzdHJveWVkKSByZXR1cm47XG4gICAgdGhpcy5jb3JlLnNldEFjdGl2ZURyb3Bkb3duSW5kZXgoaW5kZXgpO1xuICB9XG5cbiAgLy8gPT09IExpZmVjeWNsZSA9PT1cblxuICAvKipcbiAgICogQXBwbHkgcnVudGltZSBjaGFuZ2VzIHRvIGEgc3Vic2V0IG9mIG9wdGlvbnMuIEV2ZW50IGNhbGxiYWNrc1xuICAgKiAoYG9uU3VibWl0YCwgYG9uRXJyb3JgLCBldGMuKSBjYW5ub3QgYmUgc3dhcHBlZCB0aGlzIHdheSDigJQgdGhleSBhcmVcbiAgICogcmVnaXN0ZXJlZCBvbmNlIGF0IGNvbnN0cnVjdGlvbiAobWF0Y2hlcyB0aGUgUmVhY3QgaG9vaydzIGRlc2lnbikuIEZvclxuICAgKiBkeW5hbWljIGV2ZW50IHJlYWN0aXZpdHksIHN1YnNjcmliZSB0byB0aGUgY29ycmVzcG9uZGluZyBvYnNlcnZhYmxlXG4gICAqIChlLmcuIGB0ZXh0JGAgaW5zdGVhZCBvZiBgb25DaGFuZ2VgKS5cbiAgICovXG4gIHVwZGF0ZShvcHRzOiBBSUF1dG9jb21wbGV0ZUNvbnRyb2xsZXJVcGRhdGUpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pc0Rlc3Ryb3llZCkgcmV0dXJuO1xuICAgIHRoaXMuY29yZS51cGRhdGUob3B0cyk7XG4gIH1cblxuICAvKipcbiAgICogUmVsZWFzZSBhbGwgcmVzb3VyY2VzIOKAlCB1bnN1YnNjcmliZXMgZnJvbSB0aGUgY29yZSwgZGVzdHJveXMgdGhlIGNvcmUsXG4gICAqIGFuZCBjb21wbGV0ZXMgdGhlIGludGVybmFsIHN0YXRlIHN1YmplY3QuIFNhZmUgdG8gY2FsbCBtdWx0aXBsZSB0aW1lcy5cbiAgICogQWZ0ZXIgZGVzdHJ1Y3Rpb24sIGFjdGlvbiBtZXRob2RzIG5vLW9wIHNpbGVudGx5LlxuICAgKi9cbiAgZGVzdHJveSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pc0Rlc3Ryb3llZCkgcmV0dXJuO1xuICAgIHRoaXMuaXNEZXN0cm95ZWQgPSB0cnVlO1xuICAgIHRoaXMudW5zdWJzY3JpYmVDb3JlKCk7XG4gICAgdGhpcy5jb3JlLmRlc3Ryb3koKTtcbiAgICB0aGlzLnJhd1N0YXRlJC5jb21wbGV0ZSgpO1xuICB9XG59XG5cbi8vID09PT09IFB1cmUgaGVscGVycyDigJQgbm90IHBhcnQgb2YgdGhlIHB1YmxpYyBzdXJmYWNlID09PT09XG5cbi8qKlxuICogU2hhbGxvdyBhcnJheSBlcXVhbGl0eS4gVGhlIHZhbmlsbGEgc3RvcmUgcmVhc3NpZ25zIGFycmF5IGZpZWxkcyBvbiBldmVyeVxuICogd3JpdGUgKGBzdG9yZS5zZXQoeyBjb21wbGV0ZWRQYXJhbXM6IFsuLi5wcmV2LCB4XSB9KWApLCBzbyByZWZlcmVuY2VcbiAqIGVxdWFsaXR5IGFsb25lIHdvdWxkIHJlLWVtaXQgZG93bnN0cmVhbSBldmVuIHdoZW4gdGhlIGNvbnRlbnRzIGFyZVxuICogaWRlbnRpY2FsLiBVc2VkIGZvciBgY29tcGxldGVkUGFyYW1zJGAsIGBzdWdnZXN0aW9ucyRgLCBgc3VnZ2VzdGlvblBpbGxzJGAsXG4gKiBhbmQgYHNlZ21lbnRzJGAuXG4gKi9cbmZ1bmN0aW9uIGFyckVxPFQ+KGE6IHJlYWRvbmx5IFRbXSwgYjogcmVhZG9ubHkgVFtdKTogYm9vbGVhbiB7XG4gIGlmIChhID09PSBiKSByZXR1cm4gdHJ1ZTtcbiAgaWYgKGEubGVuZ3RoICE9PSBiLmxlbmd0aCkgcmV0dXJuIGZhbHNlO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGEubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoYVtpXSAhPT0gYltpXSkgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiBjb21wdXRlVWlMb2FkaW5nKHM6IENvcmVTdGF0ZSk6IGJvb2xlYW4ge1xuICByZXR1cm4gcy5pc0xvYWRpbmcgJiYgIXMuZWRpdGluZ1BhcmFtICYmICFzLmluU2VsZWN0aW9uQW5pbWF0aW9uO1xufVxuXG5mdW5jdGlvbiBjb21wdXRlU3RhdGUoczogQ29yZVN0YXRlKTogQUlBdXRvY29tcGxldGVDb250cm9sbGVyU3RhdGUge1xuICByZXR1cm4ge1xuICAgIHRleHQ6IHMudGV4dCxcbiAgICBjb21wbGV0ZWRQYXJhbXM6IHMuY29tcGxldGVkUGFyYW1zLFxuICAgIHN1Z2dlc3Rpb25QaWxsczogcy5hY3Rpb25hYmxlU3VnZ2VzdGlvbnMsXG4gICAgc2VnbWVudHM6IHMuc2VnbWVudHMsXG4gICAgbmV3UGFyYW1JZDogcy5uZXdQYXJhbUlkLFxuICAgIHN1Z2dlc3Rpb25zOiBzLnN1Z2dlc3Rpb25zLFxuICAgIGFjdGl2ZUluZGV4OiBzLmFjdGl2ZURyb3Bkb3duSW5kZXgsXG4gICAgaXNMb2FkaW5nOiBjb21wdXRlVWlMb2FkaW5nKHMpLFxuICAgIGlzUmVhZHk6IHMuaXNSZWFkeSxcbiAgICBpc0ZvY3VzZWQ6IHMuaXNGb2N1c2VkLFxuICAgIGlzRHJvcGRvd25PcGVuOiBzLmlzRHJvcGRvd25PcGVuLFxuICAgIHBsYWNlaG9sZGVyVGV4dDogcy5wbGFjZWhvbGRlclRleHQsXG4gICAgZXJyb3I6IHMuZXJyb3IsXG4gICAgZWRpdGluZ1BhcmFtOiBzLmVkaXRpbmdQYXJhbSxcbiAgICBlZGl0aW5nQW5jaG9yOiBzLmVkaXRpbmdBbmNob3IsXG4gICAgY2FyZXRPZmZzZXQ6IHMuY2FyZXRPZmZzZXQsXG4gIH07XG59XG5cbmZ1bmN0aW9uIGNvbXB1dGVEcm9wZG93bihzOiBDb3JlU3RhdGUpOiBBSUF1dG9jb21wbGV0ZURyb3Bkb3duU3RhdGUge1xuICBjb25zdCBlZGl0aW5nUGFyYW0gPSBzLmVkaXRpbmdQYXJhbTtcbiAgY29uc3QgYWN0aXZlU3VnZ2VzdGlvbiA9IHMuYWN0aW9uYWJsZVN1Z2dlc3Rpb25zWzBdO1xuICBjb25zdCBkcm9wZG93blBpbGw6IFN1Z2dlc3Rpb24gfCBudWxsID0gZWRpdGluZ1BhcmFtXG4gICAgPyB7XG4gICAgICAgIHR5cGU6IGVkaXRpbmdQYXJhbS5zdWdnZXN0aW9uVHlwZSxcbiAgICAgICAgdGV4dDogZWRpdGluZ1BhcmFtLnN1Z2dlc3Rpb25QbGFjZWhvbGRlcixcbiAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgIG9wdGlvbnM6IGVkaXRpbmdQYXJhbS5vcHRpb25zLFxuICAgICAgfVxuICAgIDogbnVsbDtcbiAgY29uc3QgZHJvcGRvd25BY3RpdmVQaWxsID0gZHJvcGRvd25QaWxsID8/IGFjdGl2ZVN1Z2dlc3Rpb247XG4gIGNvbnN0IGRyb3Bkb3duUGlsbHMgPSBkcm9wZG93blBpbGwgPyBbZHJvcGRvd25QaWxsXSA6IHMuYWN0aW9uYWJsZVN1Z2dlc3Rpb25zO1xuICByZXR1cm4ge1xuICAgIHN1Z2dlc3Rpb25zOiBkcm9wZG93bkFjdGl2ZVBpbGwgPyBbeyAuLi5kcm9wZG93bkFjdGl2ZVBpbGwsIG9wdGlvbnM6IHMuZmlsdGVyZWRPcHRpb25zIH1dIDogW10sXG4gICAgYWN0aXZlSW5kZXg6IHMuYWN0aXZlRHJvcGRvd25JbmRleCxcbiAgICBpc09wZW46IHMuaXNEcm9wZG93bk9wZW4sXG4gICAgcGlsbHM6IGRyb3Bkb3duUGlsbHMsXG4gICAgaXNBY3RpdmVQaWxsU2VsZWN0ZWQ6IHMuaXNBY3RpdmVQaWxsU2VsZWN0ZWQsXG4gICAgaXNMb2FkaW5nOiBjb21wdXRlVWlMb2FkaW5nKHMpLFxuICAgIGhhc1RhYmJlZFRvSGlnaGxpZ2h0OiBzLmhhc1RhYmJlZFRvSGlnaGxpZ2h0LFxuICAgIGlzSW5wdXRFbXB0eTogcy50ZXh0LnRyaW0oKS5sZW5ndGggPT09IDAsXG4gIH07XG59XG4iXX0=
320
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWktYXV0b2NvbXBsZXRlLmNvbnRyb2xsZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL2NvbnRyb2xsZXIvYWktYXV0b2NvbXBsZXRlLmNvbnRyb2xsZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLGNBQWMsSUFBSSxrQkFBa0IsR0FLckMsTUFBTSxxQ0FBcUMsQ0FBQztBQUM3QyxPQUFPLEVBQUUsZUFBZSxFQUFFLGFBQWEsRUFBRSxHQUFHLEVBQW1CLFdBQVcsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQU96RixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTVDOzs7Ozs7Ozs7Ozs7R0FZRztBQUNILE1BQU0sT0FBTyx3QkFBd0I7SUF3RW5DOzs7T0FHRztJQUNILFlBQVksT0FBd0MsRUFBRTtRQXpFdEQsNEVBQTRFO1FBQzVFLDRFQUE0RTtRQUM1RSxtRUFBbUU7UUFDbEQscUJBQWdCLEdBQUcsSUFBSSxlQUFlLENBQW9CLE9BQU8sQ0FBQyxDQUFDO1FBRTVFLGdCQUFXLEdBQUcsS0FBSyxDQUFDO1FBcUUxQixJQUFJLE9BQU8sUUFBUSxLQUFLLFdBQVcsRUFBRTtZQUNuQyxNQUFNLElBQUksS0FBSyxDQUNiLDJEQUEyRDtnQkFDekQsd0VBQXdFLENBQzNFLENBQUM7U0FDSDtRQUVELHdFQUF3RTtRQUN4RSxxRUFBcUU7UUFDckUsTUFBTSxJQUFJLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUUzQyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksa0JBQWtCLENBQUMsSUFBSSxFQUFFO1lBQ3ZDLEdBQUcsSUFBSTtZQUNQLFVBQVUsRUFBRSxVQUFVO1lBQ3RCLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTSxJQUFJLGNBQWM7WUFDckMsaUVBQWlFO1lBQ2pFLG9FQUFvRTtZQUNwRSwyQ0FBMkM7WUFDM0MsZUFBZSxFQUFFLElBQUks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O1lBQ2pDLElBQUksRUFBRSxZQUFZLENBQUMscUJBQXFCO1lBQ3hDLFFBQVEsRUFBRSxJQUFJO1lBQ2QsT0FBTyxFQUFFLFlBQVksQ0FBQyxPQUFPO1NBQzlCO1FBQ0gsQ0FBQyxDQUFDLElBQUksQ0FBQztJQUNULE1BQU0sa0JBQWtCLEdBQUcsWUFBWSxJQUFJLGdCQUFnQixDQUFDO0lBQzVELE1BQU0sYUFBYSxHQUFHLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLHFCQUFxQixDQUFDO0lBQzlFLE9BQU87UUFDTCxXQUFXLEVBQUUsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLGtCQUFrQixFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUMsZUFBZSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRTtRQUM5RixXQUFXLEVBQUUsQ0FBQyxDQUFDLG1CQUFtQjtRQUNsQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLGNBQWM7UUFDeEIsS0FBSyxFQUFFLGFBQWE7UUFDcEIsb0JBQW9CLEVBQUUsQ0FBQyxDQUFDLG9CQUFvQjtRQUM1QyxTQUFTLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDO1FBQzlCLG9CQUFvQixFQUFFLENBQUMsQ0FBQyxvQkFBb0I7UUFDNUMsWUFBWSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsTUFBTSxLQUFLLENBQUM7UUFDeEMsZUFBZTtLQUNoQixDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIHR5cGUgQ29tcGxldGVkUGFyYW1TdGF0ZSxcbiAgQUlBdXRvY29tcGxldGUgYXMgQ29yZUFJQXV0b2NvbXBsZXRlLFxuICB0eXBlIENvcmVTdGF0ZSxcbiAgdHlwZSBTZWdtZW50LFxuICB0eXBlIFN1Z2dlc3Rpb24sXG4gIHR5cGUgU3VnZ2VzdGlvbk9wdGlvbixcbn0gZnJvbSBcIkBtYWdpY3gtZW5nL2FpLWF1dG9jb21wbGV0ZS12YW5pbGxhXCI7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIGNvbWJpbmVMYXRlc3QsIG1hcCwgdHlwZSBPYnNlcnZhYmxlLCBzaGFyZVJlcGxheSB9IGZyb20gXCJyeGpzXCI7XG5pbXBvcnQgdHlwZSB7XG4gIEFJQXV0b2NvbXBsZXRlQ29udHJvbGxlck9wdGlvbnMsXG4gIEFJQXV0b2NvbXBsZXRlQ29udHJvbGxlclN0YXRlLFxuICBBSUF1dG9jb21wbGV0ZUNvbnRyb2xsZXJVcGRhdGUsXG4gIEFJQXV0b2NvbXBsZXRlRHJvcGRvd25TdGF0ZSxcbn0gZnJvbSBcIi4uL3NoYXJlZC90eXBlc1wiO1xuaW1wb3J0IHsgZGVyaXZlRmllbGQgfSBmcm9tIFwiLi9vYnNlcnZhYmxlc1wiO1xuXG4vKipcbiAqIFRpZXIgMiBsb2dpYyBzdXJmYWNlIGZvciBgQG1hZ2ljeC1lbmcvYWktYXV0b2NvbXBsZXRlLWFuZ3VsYXJgIOKAlCB0aGUgQW5ndWxhclxuICogZXF1aXZhbGVudCBvZiBSZWFjdCdzIGB1c2VBSUF1dG9jb21wbGV0ZSgpYCBob29rLiBXcmFwcyBhIGhlYWRsZXNzXG4gKiBgQG1hZ2ljeC1lbmcvYWktYXV0b2NvbXBsZXRlLXZhbmlsbGFgIGNvcmUgYW5kIGV4cG9zZXMgaXRzIHN0YXRlIGFzIFJ4SlNcbiAqIG9ic2VydmFibGVzIHBsdXMgdGhpbiBhY3Rpb24gbWV0aG9kcy5cbiAqXG4gKiBQZXIgVERCIMKnMy4zLCB0aGUgY29udHJvbGxlciBpcyBjb25zdW1lci1tYW5hZ2VkIOKAlCB0aGUgY29uc3VtZXIgY3JlYXRlcyBpdFxuICogd2l0aCBgbmV3YCwgaG9sZHMgdGhlIHJlZmVyZW5jZSwgYW5kICoqbXVzdCBjYWxsIGBkZXN0cm95KClgKiogaW4gdGhlaXJcbiAqIG93biBgbmdPbkRlc3Ryb3lgLiBUaGUgVGllciAxIGA8YWktYXV0b2NvbXBsZXRlPmAgY29tcG9uZW50IGRvZXMgdGhpc1xuICogYXV0b21hdGljYWxseTsgVGllciAyIGNvbnN1bWVycyBkbyBub3QgZ2V0IGF1dG8tY2xlYW51cC5cbiAqXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjbGFzcyBBSUF1dG9jb21wbGV0ZUNvbnRyb2xsZXIge1xuICBwcml2YXRlIHJlYWRvbmx5IGNvcmU6IENvcmVBSUF1dG9jb21wbGV0ZTtcbiAgcHJpdmF0ZSByZWFkb25seSByYXdTdGF0ZSQ6IEJlaGF2aW9yU3ViamVjdDxDb3JlU3RhdGU+O1xuICAvLyBvcHRpb25zUG9zaXRpb24gaXNuJ3QgcGFydCBvZiBDb3JlU3RhdGUgKGl0J3MgYSBjb3JlIG9wdGlvbiksIHNvIHRyYWNrIGl0XG4gIC8vIGhlcmUgYW5kIGZvbGQgaXQgaW50byBgZHJvcGRvd24kYCBzbyB0aGUgZHJvcGRvd24gY2FuIHJlYWQgcGxhY2VtZW50IGZyb21cbiAgLy8gdGhlIGNvbnRyb2xsZXIg4oCUIGNvbmZpZ3VyZWQgb25jZSwga2VwdCBpbiBzeW5jIHRocm91Z2ggdXBkYXRlKCkuXG4gIHByaXZhdGUgcmVhZG9ubHkgb3B0aW9uc1Bvc2l0aW9uJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8XCJhYm92ZVwiIHwgXCJiZWxvd1wiPihcImJlbG93XCIpO1xuICBwcml2YXRlIHJlYWRvbmx5IHVuc3Vic2NyaWJlQ29yZTogKCkgPT4gdm9pZDtcbiAgcHJpdmF0ZSBpc0Rlc3Ryb3llZCA9IGZhbHNlO1xuXG4gIC8vID09PSBQZXItZmllbGQgb2JzZXJ2YWJsZXMgPT09XG4gIC8vIEVhY2ggb25lIHJ1bnMgdGhyb3VnaCBkZXJpdmVGaWVsZCwgd2hpY2ggYmFrZXMgaW4gZGlzdGluY3RVbnRpbENoYW5nZWRcbiAgLy8gYW5kIHNoYXJlUmVwbGF5KHsgYnVmZmVyU2l6ZTogMSwgcmVmQ291bnQ6IHRydWUgfSkgcGVyIMKnMTkuNC5cblxuICAvKiogUGxhaW4tdGV4dCBjb250ZW50IG9mIHRoZSBlZGl0b3IuICovXG4gIHJlYWRvbmx5IHRleHQkOiBPYnNlcnZhYmxlPHN0cmluZz47XG4gIC8qKiBDb21wbGV0ZWQgKGJvbGQpIHBhcmFtcyBjdXJyZW50bHkgaW4gdGhlIGVkaXRvci4gKi9cbiAgcmVhZG9ubHkgY29tcGxldGVkUGFyYW1zJDogT2JzZXJ2YWJsZTxDb21wbGV0ZWRQYXJhbVN0YXRlW10+O1xuICAvKiogQWN0aW9uYWJsZSBzdWdnZXN0aW9uIHBpbGxzIChmaXJzdCBvbmUgaXMgdGhlIGFjdGl2ZSBwaWxsKS4gKi9cbiAgcmVhZG9ubHkgc3VnZ2VzdGlvblBpbGxzJDogT2JzZXJ2YWJsZTxTdWdnZXN0aW9uW10+O1xuICAvKiogVGV4dCArIGNvbXBsZXRlZC1wYXJhbSBzZWdtZW50cyBmb3IgcmVuZGVyaW5nIHRoZSBlZGl0b3IgYm9keS4gKi9cbiAgcmVhZG9ubHkgc2VnbWVudHMkOiBPYnNlcnZhYmxlPFNlZ21lbnRbXT47XG4gIC8qKiBJRCBvZiB0aGUgbW9zdC1yZWNlbnRseS1wcm9tb3RlZCBwYXJhbSAoZHJpdmVzIHNoaW1tZXIgYW5pbWF0aW9uKS4gKi9cbiAgcmVhZG9ubHkgbmV3UGFyYW1JZCQ6IE9ic2VydmFibGU8c3RyaW5nIHwgbnVsbD47XG4gIC8qKiBBbGwgc3VnZ2VzdGlvbnMgZnJvbSB0aGUgc2VydmVyIChpbmNsdWRpbmcgbm9uLWFjdGlvbmFibGUgb25lcykuICovXG4gIHJlYWRvbmx5IHN1Z2dlc3Rpb25zJDogT2JzZXJ2YWJsZTxTdWdnZXN0aW9uW10+O1xuICAvKiogQ3VycmVudGx5IGhpZ2hsaWdodGVkIGRyb3Bkb3duIG9wdGlvbiBpbmRleC4gLTEgPSBub25lLiAqL1xuICByZWFkb25seSBhY3RpdmVJbmRleCQ6IE9ic2VydmFibGU8bnVtYmVyPjtcbiAgLyoqXG4gICAqIFVJLXZpc2libGUgbG9hZGluZyBmbGFnIOKAlCBzdXBwcmVzc2VkIGR1cmluZyB0aGUgcG9zdC1zZWxlY3Qgc3RyZWFrXG4gICAqIGFuaW1hdGlvbiBhbmQgZHVyaW5nIHJlLWVkaXQgKGNhY2hlZCBvcHRpb25zIHN0YXkgdmlzaWJsZSB0aGVyZSkuIFVzZVxuICAgKiB0aGlzIGluc3RlYWQgb2YgdGhlIHJhdyBjb3JlIHN0YXRlIGZvciBhbnkgbG9hZGluZy1za2VsZXRvbiBiaW5kaW5nLlxuICAgKi9cbiAgcmVhZG9ubHkgaXNMb2FkaW5nJDogT2JzZXJ2YWJsZTxib29sZWFuPjtcbiAgLyoqIFNlcnZlci1yZXBvcnRlZCBcInF1ZXJ5IGlzIGNvbXBsZXRlXCIgZmxhZy4gKi9cbiAgcmVhZG9ubHkgaXNSZWFkeSQ6IE9ic2VydmFibGU8Ym9vbGVhbj47XG4gIC8qKiBXaGV0aGVyIHRoZSBlZGl0b3IgY3VycmVudGx5IGhhcyBmb2N1cy4gKi9cbiAgcmVhZG9ubHkgaXNGb2N1c2VkJDogT2JzZXJ2YWJsZTxib29sZWFuPjtcbiAgLyoqIFdoZXRoZXIgdGhlIGRyb3Bkb3duIHNob3VsZCBjdXJyZW50bHkgYmUgdmlzaWJsZS4gKi9cbiAgcmVhZG9ubHkgaXNEcm9wZG93bk9wZW4kOiBPYnNlcnZhYmxlPGJvb2xlYW4+O1xuICAvKipcbiAgICogV2hldGhlciB0aGUgYWN0aXZlIChsZWFkaW5nKSBwaWxsIHNob3VsZCByZW5kZXIgc2VsZWN0ZWQgKGZ1bGwgb3BhY2l0eSlcbiAgICogcmF0aGVyIHRoYW4gdGhlIGRlLWVtcGhhc2l6ZWQgYGZpcnN0YCB0aWVyLiBBdXRvIHRyaWdnZXIg4oeSIHRydWUgb25seSB3aGlsZVxuICAgKiBhIGRyb3Bkb3duIG9wdGlvbiBpcyBoaWdobGlnaHRlZDsgbWFudWFsIOKHkiB0cnVlIG9uY2UgdGhlIHBpbGwgaXMgdGFwcGVkLlxuICAgKi9cbiAgcmVhZG9ubHkgaXNBY3RpdmVQaWxsU2VsZWN0ZWQkOiBPYnNlcnZhYmxlPGJvb2xlYW4+O1xuICAvKiogU2VydmVyLXN1Z2dlc3RlZCBwbGFjZWhvbGRlciB0ZXh0IGZvciB0aGUgZWRpdG9yLiAqL1xuICByZWFkb25seSBwbGFjZWhvbGRlclRleHQkOiBPYnNlcnZhYmxlPHN0cmluZz47XG4gIC8qKiBMYXN0IGZldGNoIGVycm9yLCBvciBudWxsLiAqL1xuICByZWFkb25seSBlcnJvciQ6IE9ic2VydmFibGU8RXJyb3IgfCBudWxsPjtcbiAgLyoqIFBhcmFtIGN1cnJlbnRseSBiZWluZyByZS1lZGl0ZWQsIG9yIG51bGwuICovXG4gIHJlYWRvbmx5IGVkaXRpbmdQYXJhbSQ6IE9ic2VydmFibGU8Q29tcGxldGVkUGFyYW1TdGF0ZSB8IG51bGw+O1xuICAvKiogUGxhaW4tdGV4dCBvZmZzZXQgd2hlcmUgdGhlIGVkaXQgcmVnaW9uIHN0YXJ0cywgb3IgbnVsbC4gKi9cbiAgcmVhZG9ubHkgZWRpdGluZ0FuY2hvciQ6IE9ic2VydmFibGU8bnVtYmVyIHwgbnVsbD47XG4gIC8qKiBMaXZlIGNhcmV0IG9mZnNldCB3aXRoaW4gdGhlIGVkaXRvci4gKi9cbiAgcmVhZG9ubHkgY2FyZXRPZmZzZXQkOiBPYnNlcnZhYmxlPG51bWJlciB8IG51bGw+O1xuXG4gIC8vID09PSBDb21wb3NpdGUgb2JzZXJ2YWJsZXMgPT09XG5cbiAgLyoqXG4gICAqIFNuYXBzaG90IG9mIGV2ZXJ5IHB1YmxpYyBmaWVsZCBpbiBvbmUgb2JqZWN0LiBDb252ZW5pZW50IGZvclxuICAgKiBgKm5nSWY9XCJjdHJsLnN0YXRlJCB8IGFzeW5jIGFzIHN0YXRlXCJgIHRlbXBsYXRpbmcg4oCUIGFsaWFzZXMgYWxsIGZpZWxkc1xuICAgKiB1bmRlciBhIHNpbmdsZSBzdWJzY3JpcHRpb24gaW5zdGVhZCBvZiBtdWx0aXBsZSBgfCBhc3luY2AgcGlwZXMuXG4gICAqL1xuICByZWFkb25seSBzdGF0ZSQ6IE9ic2VydmFibGU8QUlBdXRvY29tcGxldGVDb250cm9sbGVyU3RhdGU+O1xuXG4gIC8qKlxuICAgKiBDb21wb3NpdGUgc3RhdGUgZm9yIHRoZSBkcm9wZG93biB2aWV3LiBUaWVyIDIgY29uc3VtZXJzIHNwcmVhZCB0aGlzIGludG9cbiAgICogYDxhaS1hdXRvY29tcGxldGUtZHJvcGRvd24+YDsgVGllciAxIHVzZXMgdGhlIHNhbWUgc2hhcGUgaW50ZXJuYWxseS5cbiAgICovXG4gIHJlYWRvbmx5IGRyb3Bkb3duJDogT2JzZXJ2YWJsZTxBSUF1dG9jb21wbGV0ZURyb3Bkb3duU3RhdGU+O1xuXG4gIC8qKlxuICAgKiBUaHJvd3MgaWYgaW52b2tlZCBvdXRzaWRlIGEgYnJvd3NlciBlbnZpcm9ubWVudC4gRm9yIFNTUiAvIEFuZ3VsYXJcbiAgICogVW5pdmVyc2FsLCBnYXRlIGNvbnN0cnVjdGlvbiB3aXRoIGBpc1BsYXRmb3JtQnJvd3NlcmAg4oCUIHNlZSBUREIgwqcxNi4zLlxuICAgKi9cbiAgY29uc3RydWN0b3Iob3B0czogQUlBdXRvY29tcGxldGVDb250cm9sbGVyT3B0aW9ucyA9IHt9KSB7XG4gICAgaWYgKHR5cGVvZiBkb2N1bWVudCA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBcIkFJQXV0b2NvbXBsZXRlQ29udHJvbGxlciByZXF1aXJlcyBhIGJyb3dzZXIgZW52aXJvbm1lbnQuIFwiICtcbiAgICAgICAgICBcIkZvciBTU1IgLyBBbmd1bGFyIFVuaXZlcnNhbCwgZ2F0ZSBjb25zdHJ1Y3Rpb24gd2l0aCBpc1BsYXRmb3JtQnJvd3Nlci5cIixcbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gSGVhZGxlc3MgbW9kZSBuZXZlciByZW5kZXJzIHRvIHRoZSBob3N0LCBzbyBhIHRocm93YXdheSBkaXYgaXMgZmluZSDigJRcbiAgICAvLyBpdCdzIHJlcXVpcmVkIGJ5IHRoZSBjb3JlJ3Mgc2lnbmF0dXJlIGZvciBzeW1tZXRyeSB3aXRoIGZ1bGwgbW9kZS5cbiAgICBjb25zdCBob3N0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcblxuICAgIHRoaXMuY29yZSA9IG5ldyBDb3JlQUlBdXRvY29tcGxldGUoaG9zdCwge1xuICAgICAgLi4ub3B0cyxcbiAgICAgIHJlbmRlck1vZGU6IFwiaGVhZGxlc3NcIixcbiAgICAgIHNvdXJjZTogb3B0cy5zb3VyY2UgPz8gXCJoZWFkbGVzcy1zZGtcIixcbiAgICAgIC8vIEhlYWRsZXNzIG1vZGUgbmV2ZXIgcmVuZGVycyB0aGUgZHJvcGRvd24gRE9NLCBidXQgdGhlIGtleWJvYXJkXG4gICAgICAvLyBjb250cm9sbGVyIHN0aWxsIHJlYWRzIGBvcHRpb25zUG9zaXRpb25gIHRvIGRlY2lkZSB3aGljaCB2ZXJ0aWNhbFxuICAgICAgLy8gYXJyb3cgb3BlbnMgdGhlIGRyb3Bkb3duIGZyb20gdGhlIGlucHV0LlxuICAgICAgb3B0aW9uc1Bvc2l0aW9uOiBvcHRzLm9wdGlvbnNQb3NpdGlvbiA/PyBcImJlbG93XCIsXG4gICAgfSk7XG5cbiAgICB0aGlzLnJhd1N0YXRlJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Q29yZVN0YXRlPih0aGlzLmNvcmUuZ2V0U3RhdGUoKSk7XG4gICAgLy8gUHVzaCB0aGUgc3RvcmUncyAqY3VycmVudCogc3RhdGUsIG5vdCB0aGUgc25hcHNob3QgdGhlIGxpc3RlbmVyIHdhc1xuICAgIC8vIGhhbmRlZC4gVGhlIGNvcmUgbm90aWZpZXMgbGlzdGVuZXJzIHN5bmNocm9ub3VzbHksIGFuZCBzb21lIGFjdGlvbnNcbiAgICAvLyB0cmlnZ2VyIHJlZW50cmFudCBgc3RvcmUuc2V0YCBjYWxscyAoZS5nLiB0eXBpbmcgYSBub24tbWF0Y2hpbmcgY2hhclxuICAgIC8vIGR1cmluZyByZS1lZGl0IG1ha2VzIHRoZSBjb3JlIHN5bmNocm9ub3VzbHkgZXhpdCByZS1lZGl0IGFuZCBraWNrIG9mZiBhXG4gICAgLy8gZmV0Y2gpLiBSZWVudHJhbmN5IG1ha2VzIHRoZSBvdXRlciBzZXQncyBsaXN0ZW5lciBsb29wIGNvbnRpbnVlIHdpdGggYVxuICAgIC8vIG5vdy1zdGFsZSBzbmFwc2hvdCwgc28gdGhlIGxpc3RlbmVyIGNhbiBmaXJlICpvdXQgb2Ygb3JkZXIqIOKAlCBkZWxpdmVyaW5nXG4gICAgLy8gYW4gb2xkZXIgc3RhdGUgKHN0aWxsIGluIHJlLWVkaXQpIGFmdGVyIGEgbmV3ZXIgb25lIChyZS1lZGl0IGV4aXRlZCkuXG4gICAgLy8gUmVhZGluZyBgZ2V0U3RhdGUoKWAgYXQgZW1pc3Npb24gdGltZSBjb2xsYXBzZXMgZXZlcnkgbm90aWZpY2F0aW9uIG9udG9cbiAgICAvLyB0aGUgdHJ1ZSBsYXRlc3Qgc3RhdGUsIHNvIGEgc3RhbGUgYGVkaXRpbmdQYXJhbWAgY2FuJ3QgcmVzdXJyZWN0IGFuZFxuICAgIC8vIHJldHJpZ2dlciB0aGUgZWRpdG9yJ3MgcmUtZWRpdCBjYXJldC1wYXJrICh3aGljaCB3b3VsZCB5YW5rIHRoZSBjYXJldFxuICAgIC8vIGJhY2sgdG8gd2hlcmUgcmUtZWRpdGluZyBzdGFydGVkKS4gZGlzdGluY3RVbnRpbENoYW5nZWQgZG93bnN0cmVhbSBkcm9wc1xuICAgIC8vIHRoZSByZXN1bHRpbmcgZHVwbGljYXRlIGVtaXNzaW9ucy4gUmVhY3QgYXZvaWRzIHRoaXMgYmVjYXVzZSBpdCBiYXRjaGVzXG4gICAgLy8gcmVuZGVycyBhbmQgaXRzIGNhcmV0IGVmZmVjdHMgYXJlIGRlcGVuZGVuY3ktZ2F0ZWQ7IG91ciBzdWJzY3JpcHRpb24gaXNcbiAgICAvLyBzeW5jaHJvbm91cywgc28gd2UgY29hbGVzY2UgaGVyZSBpbnN0ZWFkLlxuICAgIHRoaXMudW5zdWJzY3JpYmVDb3JlID0gdGhpcy5jb3JlLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICBpZiAoIXRoaXMuaXNEZXN0cm95ZWQpIHRoaXMucmF3U3RhdGUkLm5leHQodGhpcy5jb3JlLmdldFN0YXRlKCkpO1xuICAgIH0pO1xuXG4gICAgLy8gPT09IFBlci1maWVsZCBvYnNlcnZhYmxlcyA9PT1cbiAgICAvLyBBcnJheS12YWx1ZWQgZmllbGRzIHVzZSBzaGFsbG93IGVxdWFsaXR5LiBUaGUgdmFuaWxsYSBzdG9yZSBzcHJlYWRzIG9uXG4gICAgLy8gZXZlcnkgd3JpdGUgKGBzdG9yZS5zZXQoeyBjb21wbGV0ZWRQYXJhbXM6IFsuLi5dIH0pYCksIHNvIHJlZmVyZW5jZVxuICAgIC8vIGVxdWFsaXR5IHdvdWxkIHJlLWZpcmUgZG93bnN0cmVhbSBzdWJzY3JpYmVycyBvbiBldmVyeSBzdGF0ZSB0aWNrIGV2ZW5cbiAgICAvLyB3aGVuIHRoZSBhcnJheSdzIGNvbnRlbnRzIGFyZSB1bmNoYW5nZWQuIFRoZSBvdGhlciBmaWVsZHMgYXJlXG4gICAgLy8gcHJpbWl0aXZlcyBvciBzdGFibGUgb2JqZWN0IHJlZmVyZW5jZXMsIHNvIGRlZmF1bHQgaWRlbnRpdHkgZXF1YWxpdHlcbiAgICAvLyB3b3JrcyBmaW5lLlxuICAgIHRoaXMudGV4dCQgPSBkZXJpdmVGaWVsZCh0aGlzLnJhd1N0YXRlJCwgKHMpID0+IHMudGV4dCk7XG4gICAgdGhpcy5jb21wbGV0ZWRQYXJhbXMkID0gZGVyaXZlRmllbGQodGhpcy5yYXdTdGF0ZSQsIChzKSA9PiBzLmNvbXBsZXRlZFBhcmFtcywgYXJyRXEpO1xuICAgIHRoaXMuc3VnZ2VzdGlvblBpbGxzJCA9IGRlcml2ZUZpZWxkKHRoaXMucmF3U3RhdGUkLCAocykgPT4gcy5hY3Rpb25hYmxlU3VnZ2VzdGlvbnMsIGFyckVxKTtcbiAgICB0aGlzLnNlZ21lbnRzJCA9IGRlcml2ZUZpZWxkKHRoaXMucmF3U3RhdGUkLCAocykgPT4gcy5zZWdtZW50cywgYXJyRXEpO1xuICAgIHRoaXMubmV3UGFyYW1JZCQgPSBkZXJpdmVGaWVsZCh0aGlzLnJhd1N0YXRlJCwgKHMpID0+IHMubmV3UGFyYW1JZCk7XG4gICAgdGhpcy5zdWdnZXN0aW9ucyQgPSBkZXJpdmVGaWVsZCh0aGlzLnJhd1N0YXRlJCwgKHMpID0+IHMuc3VnZ2VzdGlvbnMsIGFyckVxKTtcbiAgICB0aGlzLmFjdGl2ZUluZGV4JCA9IGRlcml2ZUZpZWxkKHRoaXMucmF3U3RhdGUkLCAocykgPT4gcy5hY3RpdmVEcm9wZG93bkluZGV4KTtcbiAgICB0aGlzLmlzTG9hZGluZyQgPSBkZXJpdmVGaWVsZCh0aGlzLnJhd1N0YXRlJCwgY29tcHV0ZVVpTG9hZGluZyk7XG4gICAgdGhpcy5pc1JlYWR5JCA9IGRlcml2ZUZpZWxkKHRoaXMucmF3U3RhdGUkLCAocykgPT4gcy5pc1JlYWR5KTtcbiAgICB0aGlzLmlzRm9jdXNlZCQgPSBkZXJpdmVGaWVsZCh0aGlzLnJhd1N0YXRlJCwgKHMpID0+IHMuaXNGb2N1c2VkKTtcbiAgICB0aGlzLmlzRHJvcGRvd25PcGVuJCA9IGRlcml2ZUZpZWxkKHRoaXMucmF3U3RhdGUkLCAocykgPT4gcy5pc0Ryb3Bkb3duT3Blbik7XG4gICAgdGhpcy5pc0FjdGl2ZVBpbGxTZWxlY3RlZCQgPSBkZXJpdmVGaWVsZCh0aGlzLnJhd1N0YXRlJCwgKHMpID0+IHMuaXNBY3RpdmVQaWxsU2VsZWN0ZWQpO1xuICAgIHRoaXMucGxhY2Vob2xkZXJUZXh0JCA9IGRlcml2ZUZpZWxkKHRoaXMucmF3U3RhdGUkLCAocykgPT4gcy5wbGFjZWhvbGRlclRleHQpO1xuICAgIHRoaXMuZXJyb3IkID0gZGVyaXZlRmllbGQodGhpcy5yYXdTdGF0ZSQsIChzKSA9PiBzLmVycm9yKTtcbiAgICB0aGlzLmVkaXRpbmdQYXJhbSQgPSBkZXJpdmVGaWVsZCh0aGlzLnJhd1N0YXRlJCwgKHMpID0+IHMuZWRpdGluZ1BhcmFtKTtcbiAgICB0aGlzLmVkaXRpbmdBbmNob3IkID0gZGVyaXZlRmllbGQodGhpcy5yYXdTdGF0ZSQsIChzKSA9PiBzLmVkaXRpbmdBbmNob3IpO1xuICAgIHRoaXMuY2FyZXRPZmZzZXQkID0gZGVyaXZlRmllbGQodGhpcy5yYXdTdGF0ZSQsIChzKSA9PiBzLmNhcmV0T2Zmc2V0KTtcblxuICAgIC8vID09PSBDb21wb3NpdGUgb2JzZXJ2YWJsZXMgPT09XG4gICAgLy8gUHJvamVjdCBkaXJlY3RseSBvZmYgYHJhd1N0YXRlJGAgd2l0aCBhIHNpbmdsZSBtYXAoKSBzbyBlYWNoIHN0b3JlXG4gICAgLy8gdGljayBwcm9kdWNlcyBleGFjdGx5IE9ORSBjb2hlcmVudCBzdGF0ZSQgZW1pc3Npb24uIFVzaW5nXG4gICAgLy8gYGNvbWJpbmVMYXRlc3RgIG92ZXIgdGhlIHBlci1maWVsZCBvYnNlcnZhYmxlcyBoZXJlIHdvdWxkIGZpcmUgb25lXG4gICAgLy8gZW1pc3Npb24gcGVyIGlubmVyLXNvdXJjZSB0aWNrICh1cCB0byBOIHBlciBzdG9yZSB1cGRhdGUpLCBhbmQgdGhlXG4gICAgLy8gZWRpdG9yLWhvc3QgZGlyZWN0aXZlJ3MgcG9zdC1wcm9tb3RlIHJlZm9jdXMgd291bGQgcnVuIGFnYWluc3QgYW5cbiAgICAvLyBpbnRlcm1lZGlhdGUgc3RhdGUgd2hlcmUgYG5ld1BhcmFtSWRgIHdhcyBzZXQgYnV0IGBzZWdtZW50c2AgL1xuICAgIC8vIGBjYXJldE9mZnNldGAgc3RpbGwgaGVsZCB0aGVpciBvbGQgdmFsdWVzIOKAlCBsZWF2aW5nIHRoZSBjYXJldCBzdHVja1xuICAgIC8vIGF0IHRoZSBwcmUtY2xpY2sgcG9zaXRpb24uXG4gICAgdGhpcy5zdGF0ZSQgPSB0aGlzLnJhd1N0YXRlJC5waXBlKFxuICAgICAgbWFwKGNvbXB1dGVTdGF0ZSksXG4gICAgICBzaGFyZVJlcGxheSh7IGJ1ZmZlclNpemU6IDEsIHJlZkNvdW50OiB0cnVlIH0pLFxuICAgICk7XG5cbiAgICB0aGlzLm9wdGlvbnNQb3NpdGlvbiQubmV4dChvcHRzLm9wdGlvbnNQb3NpdGlvbiA/PyBcImJlbG93XCIpO1xuICAgIHRoaXMuZHJvcGRvd24kID0gY29tYmluZUxhdGVzdChbdGhpcy5yYXdTdGF0ZSQsIHRoaXMub3B0aW9uc1Bvc2l0aW9uJF0pLnBpcGUoXG4gICAgICBtYXAoKFtzLCBvcHRpb25zUG9zaXRpb25dKSA9PiBjb21wdXRlRHJvcGRvd24ocywgb3B0aW9uc1Bvc2l0aW9uKSksXG4gICAgICBzaGFyZVJlcGxheSh7IGJ1ZmZlclNpemU6IDEsIHJlZkNvdW50OiB0cnVlIH0pLFxuICAgICk7XG4gIH1cblxuICAvLyA9PT0gUmVhZC1vbmx5IGFjY2Vzc29ycyA9PT1cblxuICAvKiogU3RhYmxlIEFSSUEgbGlzdGJveCBJRCBmb3IgdGhlIGRyb3Bkb3duLiBQYXNzIHRvIGA8dGV4dGFyZWEgYXJpYS1jb250cm9scz1cIi4uLlwiPmAuICovXG4gIGdldCBsaXN0Ym94SWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5jb3JlLmxpc3Rib3hJZDtcbiAgfVxuXG4gIC8qKiBXaGV0aGVyIGBkZXN0cm95KClgIGhhcyBiZWVuIGNhbGxlZC4gQWZ0ZXIgZGVzdHJ1Y3Rpb24gYWxsIGFjdGlvbiBtZXRob2RzIG5vLW9wLiAqL1xuICBnZXQgZGVzdHJveWVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmlzRGVzdHJveWVkO1xuICB9XG5cbiAgLyoqXG4gICAqIFN5bmNocm9ub3VzIHNuYXBzaG90IG9mIHRoZSBjb250cm9sbGVyJ3MgY3VycmVudCBwdWJsaWMgc3RhdGUuIE1pcnJvcnNcbiAgICogdGhlIGxhdGVzdCBlbWlzc2lvbiBvZiBgc3RhdGUkYC4gVXNlZnVsIGluIGNhbGxiYWNrcyB3aGVyZSB5b3UgY2FuJ3RcbiAgICogYHN1YnNjcmliZWAgKGUuZy4gaW5zaWRlIGFuIGV2ZW50IGhhbmRsZXIpLlxuICAgKi9cbiAgZ2V0U3RhdGUoKTogQUlBdXRvY29tcGxldGVDb250cm9sbGVyU3RhdGUge1xuICAgIHJldHVybiBjb21wdXRlU3RhdGUodGhpcy5yYXdTdGF0ZSQudmFsdWUpO1xuICB9XG5cbiAgLy8gPT09IEFjdGlvbiBtZXRob2RzIChwYXNzLXRocm91Z2ggdG8gdGhlIGNvcmUpID09PVxuICAvL1xuICAvLyBFdmVyeSBhY3Rpb24gbWV0aG9kIGJlZ2lucyB3aXRoIGFuIGBpc0Rlc3Ryb3llZGAgZ3VhcmQgc28gdGhhdCBjYWxsZXJzXG4gIC8vIHdobyBob2xkIGEgc3RhbGUgcmVmZXJlbmNlIGFmdGVyIGBkZXN0cm95KClgIGRvbid0IGFjY2lkZW50YWxseSB0cmlnZ2VyXG4gIC8vIHdvcmsgb24gYSB0b3JuLWRvd24gY29yZS4gVGhlIHZhbmlsbGEgY29yZSBkb2VzIG5vdCBnYXRlIGl0cyBvd24gbWV0aG9kc1xuICAvLyBwb3N0LWRpc3Bvc2Ug4oCUIGByZXNldCgpYCwgYGhhbmRsZVRleHRDaGFuZ2UoKWAsIGFuZCBmcmllbmRzIHdvdWxkIHN0aWxsXG4gIC8vIHNjaGVkdWxlIGZldGNoZXMgb3IgZmlyZSBIVFRQIHJlcXVlc3RzIGFnYWluc3QgYW4gYWJvcnRlZCBjb250cm9sbGVyLFxuICAvLyBhbmQgdGhlIHJlc3BvbnNlcyB3b3VsZCBoYXZlIG5vd2hlcmUgdG8gc3VyZmFjZSAocmF3U3RhdGUkIGlzIGFscmVhZHlcbiAgLy8gY29tcGxldGUpLiBUaGUgZ3VhcmQgbWFrZXMgdGhlIEpTRG9jLXByb21pc2VkIFwibm8tb3Agc2lsZW50bHlcIlxuICAvLyBzZW1hbnRpY3MgYWN0dWFsbHkgdHJ1ZS5cblxuICAvKiogQ2xlYXIgYWxsIHN0YXRlLCByb3RhdGUgYHNlc3Npb25faWRgLCBhbmQgcmUtZmV0Y2guIENhbGwgYWZ0ZXIgc3VibWl0LiAqL1xuICByZXNldCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pc0Rlc3Ryb3llZCkgcmV0dXJuO1xuICAgIHRoaXMuY29yZS5yZXNldCgpO1xuICB9XG5cbiAgLyoqIFBpY2sgYSBkcm9wZG93biBvcHRpb24gKG9yIHJlcGxhY2UgdGhlIHJlLWVkaXRlZCBwYXJhbSBpZiBpbiByZS1lZGl0IG1vZGUpLiAqL1xuICBzZWxlY3RPcHRpb24ob3B0aW9uOiBTdWdnZXN0aW9uT3B0aW9uKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaXNEZXN0cm95ZWQpIHJldHVybjtcbiAgICB0aGlzLmNvcmUuc2VsZWN0T3B0aW9uKG9wdGlvbik7XG4gIH1cblxuICAvKiogUHJvbW90ZSB0aGUgcGlsbCBhdCBgaW5kZXhgIHRvIGFjdGl2ZSAoZnJvbnQgb2YgdGhlIGxpc3QpLiAqL1xuICBzZXRBY3RpdmVQaWxsKGluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pc0Rlc3Ryb3llZCkgcmV0dXJuO1xuICAgIHRoaXMuY29yZS5zZXRBY3RpdmVQaWxsKGluZGV4KTtcbiAgfVxuXG4gIC8qKiBEcm9wIHRoZSBsYXN0IGNvbXBsZXRlZCBwYXJhbSdzIFwiY29tcGxldGVkXCIgc3RhdHVzLiBUZXh0IHN0YXlzIGFzIHBsYWluIHRleHQuICovXG4gIHJlbW92ZUxhc3RQYXJhbSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pc0Rlc3Ryb3llZCkgcmV0dXJuO1xuICAgIHRoaXMuY29yZS5yZW1vdmVMYXN0UGFyYW0oKTtcbiAgfVxuXG4gIC8qKiBDbGVhciB0aGUgc2hpbW1lciBhbmltYXRpb24gc3RhdGUgZm9yIHRoZSBtb3N0LXJlY2VudGx5LWFkZGVkIHBhcmFtLiAqL1xuICBjbGVhck5ld1BhcmFtSWQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaXNEZXN0cm95ZWQpIHJldHVybjtcbiAgICB0aGlzLmNvcmUuY2xlYXJOZXdQYXJhbUlkKCk7XG4gIH1cblxuICAvKiogQ29udHJvbGxlZC1tb2RlIHNldHRlciBmb3IgZWRpdG9yIHRleHQuICovXG4gIHNldFZhbHVlKHRleHQ6IHN0cmluZyk6IHZvaWQge1xuICAgIGlmICh0aGlzLmlzRGVzdHJveWVkKSByZXR1cm47XG4gICAgdGhpcy5jb3JlLnNldFZhbHVlKHRleHQpO1xuICB9XG5cbiAgLyoqIENvbnRyb2xsZWQtbW9kZSBzZXR0ZXIgZm9yIGNvbXBsZXRlZCBwYXJhbXMuICovXG4gIHNldENvbXBsZXRlZFBhcmFtcyhwYXJhbXM6IENvbXBsZXRlZFBhcmFtU3RhdGVbXSk6IHZvaWQge1xuICAgIGlmICh0aGlzLmlzRGVzdHJveWVkKSByZXR1cm47XG4gICAgdGhpcy5jb3JlLnNldENvbXBsZXRlZFBhcmFtcyhwYXJhbXMpO1xuICB9XG5cbiAgLyoqIEZvcndhcmQgcGxhaW4tdGV4dCBpbnB1dCBmcm9tIHRoZSBjb25zdW1lcidzIGA8dGV4dGFyZWE+YCB0byB0aGUgY29yZS4gKi9cbiAgaGFuZGxlVGV4dENoYW5nZSh2YWx1ZTogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaXNEZXN0cm95ZWQpIHJldHVybjtcbiAgICB0aGlzLmNvcmUuaGFuZGxlVGV4dENoYW5nZSh2YWx1ZSk7XG4gIH1cblxuICAvKiogRm9yd2FyZCBrZXlib2FyZCBldmVudHMgZnJvbSB0aGUgY29uc3VtZXIncyBgPHRleHRhcmVhPmAgdG8gdGhlIGNvcmUuICovXG4gIGhhbmRsZUtleURvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pc0Rlc3Ryb3llZCkgcmV0dXJuO1xuICAgIHRoaXMuY29yZS5oYW5kbGVLZXlEb3duKGV2ZW50KTtcbiAgfVxuXG4gIC8qKiBOb3RpZnkgdGhlIGNvcmUgb2YgZm9jdXMgc3RhdGUuICovXG4gIHNldEZvY3VzZWQoZm9jdXNlZDogYm9vbGVhbik6IHZvaWQge1xuICAgIGlmICh0aGlzLmlzRGVzdHJveWVkKSByZXR1cm47XG4gICAgdGhpcy5jb3JlLnNldEZvY3VzZWQoZm9jdXNlZCk7XG4gIH1cblxuICAvKiogRW50ZXIgcmUtZWRpdCBtb2RlIGZvciB0aGUgYm9sZCBwYXJhbSB3aXRoIHRoZSBnaXZlbiBpZC4gKi9cbiAgc3RhcnRFZGl0aW5nUGFyYW0ocGFyYW1JZDogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaXNEZXN0cm95ZWQpIHJldHVybjtcbiAgICB0aGlzLmNvcmUuc3RhcnRFZGl0aW5nUGFyYW0ocGFyYW1JZCk7XG4gIH1cblxuICAvKiogRXhpdCByZS1lZGl0IG1vZGUgd2l0aG91dCBjaGFuZ2luZyB0aGUgYm9sZCBwYXJhbS4gKi9cbiAgZXhpdEVkaXRNb2RlKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmlzRGVzdHJveWVkKSByZXR1cm47XG4gICAgdGhpcy5jb3JlLmV4aXRFZGl0TW9kZSgpO1xuICB9XG5cbiAgLyoqIEZvcndhcmQgcG9zdC1pbnB1dCBjYXJldCBwb3NpdGlvbiAoZXh0ZW5kcyB0aGUgZWRpdCB0YWlsKS4gKi9cbiAgaGFuZGxlQ2FyZXRBZnRlcklucHV0KG9mZnNldDogbnVtYmVyIHwgbnVsbCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmlzRGVzdHJveWVkKSByZXR1cm47XG4gICAgdGhpcy5jb3JlLmhhbmRsZUNhcmV0QWZ0ZXJJbnB1dChvZmZzZXQpO1xuICB9XG5cbiAgLyoqIEZvcndhcmQgc2VsZWN0aW9uLW9ubHkgY2FyZXQgbW92ZXMgKG1heSBleGl0IHJlLWVkaXQpLiAqL1xuICBoYW5kbGVDYXJldE1vdmUob2Zmc2V0OiBudW1iZXIgfCBudWxsKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaXNEZXN0cm95ZWQpIHJldHVybjtcbiAgICB0aGlzLmNvcmUuaGFuZGxlQ2FyZXRNb3ZlKG9mZnNldCk7XG4gIH1cblxuICAvKiogUmVwbGFjZSB0aGUgYm9sZCBwYXJhbSBiZWluZyByZS1lZGl0ZWQuIFJldHVybnMgdHJ1ZSB3aGVuIGFwcGxpZWQuICovXG4gIHJlcGxhY2VFZGl0aW5nUmFuZ2UocmVwbGFjZW1lbnQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGlmICh0aGlzLmlzRGVzdHJveWVkKSByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuIHRoaXMuY29yZS5yZXBsYWNlRWRpdGluZ1JhbmdlKHJlcGxhY2VtZW50KTtcbiAgfVxuXG4gIC8qKiBTZXQgdGhlIGhpZ2hsaWdodGVkIG9wdGlvbiBpbmRleCAodHlwaWNhbGx5IGRyaXZlbiBieSBob3ZlcikuICovXG4gIHNldEFjdGl2ZURyb3Bkb3duSW5kZXgoaW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgIGlmICh0aGlzLmlzRGVzdHJveWVkKSByZXR1cm47XG4gICAgdGhpcy5jb3JlLnNldEFjdGl2ZURyb3Bkb3duSW5kZXgoaW5kZXgpO1xuICB9XG5cbiAgLy8gPT09IExpZmVjeWNsZSA9PT1cblxuICAvKipcbiAgICogQXBwbHkgcnVudGltZSBjaGFuZ2VzIHRvIGEgc3Vic2V0IG9mIG9wdGlvbnMuIEV2ZW50IGNhbGxiYWNrc1xuICAgKiAoYG9uU3VibWl0YCwgYG9uRXJyb3JgLCBldGMuKSBjYW5ub3QgYmUgc3dhcHBlZCB0aGlzIHdheSDigJQgdGhleSBhcmVcbiAgICogcmVnaXN0ZXJlZCBvbmNlIGF0IGNvbnN0cnVjdGlvbiAobWF0Y2hlcyB0aGUgUmVhY3QgaG9vaydzIGRlc2lnbikuIEZvclxuICAgKiBkeW5hbWljIGV2ZW50IHJlYWN0aXZpdHksIHN1YnNjcmliZSB0byB0aGUgY29ycmVzcG9uZGluZyBvYnNlcnZhYmxlXG4gICAqIChlLmcuIGB0ZXh0JGAgaW5zdGVhZCBvZiBgb25DaGFuZ2VgKS5cbiAgICovXG4gIHVwZGF0ZShvcHRzOiBBSUF1dG9jb21wbGV0ZUNvbnRyb2xsZXJVcGRhdGUpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pc0Rlc3Ryb3llZCkgcmV0dXJuO1xuICAgIHRoaXMuY29yZS51cGRhdGUob3B0cyk7XG4gICAgaWYgKG9wdHMub3B0aW9uc1Bvc2l0aW9uICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMub3B0aW9uc1Bvc2l0aW9uJC5uZXh0KG9wdHMub3B0aW9uc1Bvc2l0aW9uKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmVsZWFzZSBhbGwgcmVzb3VyY2VzIOKAlCB1bnN1YnNjcmliZXMgZnJvbSB0aGUgY29yZSwgZGVzdHJveXMgdGhlIGNvcmUsXG4gICAqIGFuZCBjb21wbGV0ZXMgdGhlIGludGVybmFsIHN0YXRlIHN1YmplY3QuIFNhZmUgdG8gY2FsbCBtdWx0aXBsZSB0aW1lcy5cbiAgICogQWZ0ZXIgZGVzdHJ1Y3Rpb24sIGFjdGlvbiBtZXRob2RzIG5vLW9wIHNpbGVudGx5LlxuICAgKi9cbiAgZGVzdHJveSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pc0Rlc3Ryb3llZCkgcmV0dXJuO1xuICAgIHRoaXMuaXNEZXN0cm95ZWQgPSB0cnVlO1xuICAgIHRoaXMudW5zdWJzY3JpYmVDb3JlKCk7XG4gICAgdGhpcy5jb3JlLmRlc3Ryb3koKTtcbiAgICB0aGlzLnJhd1N0YXRlJC5jb21wbGV0ZSgpO1xuICB9XG59XG5cbi8vID09PT09IFB1cmUgaGVscGVycyDigJQgbm90IHBhcnQgb2YgdGhlIHB1YmxpYyBzdXJmYWNlID09PT09XG5cbi8qKlxuICogU2hhbGxvdyBhcnJheSBlcXVhbGl0eS4gVGhlIHZhbmlsbGEgc3RvcmUgcmVhc3NpZ25zIGFycmF5IGZpZWxkcyBvbiBldmVyeVxuICogd3JpdGUgKGBzdG9yZS5zZXQoeyBjb21wbGV0ZWRQYXJhbXM6IFsuLi5wcmV2LCB4XSB9KWApLCBzbyByZWZlcmVuY2VcbiAqIGVxdWFsaXR5IGFsb25lIHdvdWxkIHJlLWVtaXQgZG93bnN0cmVhbSBldmVuIHdoZW4gdGhlIGNvbnRlbnRzIGFyZVxuICogaWRlbnRpY2FsLiBVc2VkIGZvciBgY29tcGxldGVkUGFyYW1zJGAsIGBzdWdnZXN0aW9ucyRgLCBgc3VnZ2VzdGlvblBpbGxzJGAsXG4gKiBhbmQgYHNlZ21lbnRzJGAuXG4gKi9cbmZ1bmN0aW9uIGFyckVxPFQ+KGE6IHJlYWRvbmx5IFRbXSwgYjogcmVhZG9ubHkgVFtdKTogYm9vbGVhbiB7XG4gIGlmIChhID09PSBiKSByZXR1cm4gdHJ1ZTtcbiAgaWYgKGEubGVuZ3RoICE9PSBiLmxlbmd0aCkgcmV0dXJuIGZhbHNlO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGEubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoYVtpXSAhPT0gYltpXSkgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiBjb21wdXRlVWlMb2FkaW5nKHM6IENvcmVTdGF0ZSk6IGJvb2xlYW4ge1xuICByZXR1cm4gcy5pc0xvYWRpbmcgJiYgIXMuZWRpdGluZ1BhcmFtICYmICFzLmluU2VsZWN0aW9uQW5pbWF0aW9uO1xufVxuXG5mdW5jdGlvbiBjb21wdXRlU3RhdGUoczogQ29yZVN0YXRlKTogQUlBdXRvY29tcGxldGVDb250cm9sbGVyU3RhdGUge1xuICByZXR1cm4ge1xuICAgIHRleHQ6IHMudGV4dCxcbiAgICBjb21wbGV0ZWRQYXJhbXM6IHMuY29tcGxldGVkUGFyYW1zLFxuICAgIHN1Z2dlc3Rpb25QaWxsczogcy5hY3Rpb25hYmxlU3VnZ2VzdGlvbnMsXG4gICAgc2VnbWVudHM6IHMuc2VnbWVudHMsXG4gICAgbmV3UGFyYW1JZDogcy5uZXdQYXJhbUlkLFxuICAgIHN1Z2dlc3Rpb25zOiBzLnN1Z2dlc3Rpb25zLFxuICAgIGFjdGl2ZUluZGV4OiBzLmFjdGl2ZURyb3Bkb3duSW5kZXgsXG4gICAgaXNMb2FkaW5nOiBjb21wdXRlVWlMb2FkaW5nKHMpLFxuICAgIGlzUmVhZHk6IHMuaXNSZWFkeSxcbiAgICBpc0ZvY3VzZWQ6IHMuaXNGb2N1c2VkLFxuICAgIGlzRHJvcGRvd25PcGVuOiBzLmlzRHJvcGRvd25PcGVuLFxuICAgIHBsYWNlaG9sZGVyVGV4dDogcy5wbGFjZWhvbGRlclRleHQsXG4gICAgZXJyb3I6IHMuZXJyb3IsXG4gICAgZWRpdGluZ1BhcmFtOiBzLmVkaXRpbmdQYXJhbSxcbiAgICBlZGl0aW5nQW5jaG9yOiBzLmVkaXRpbmdBbmNob3IsXG4gICAgY2FyZXRPZmZzZXQ6IHMuY2FyZXRPZmZzZXQsXG4gIH07XG59XG5cbmZ1bmN0aW9uIGNvbXB1dGVEcm9wZG93bihcbiAgczogQ29yZVN0YXRlLFxuICBvcHRpb25zUG9zaXRpb246IFwiYWJvdmVcIiB8IFwiYmVsb3dcIixcbik6IEFJQXV0b2NvbXBsZXRlRHJvcGRvd25TdGF0ZSB7XG4gIGNvbnN0IGVkaXRpbmdQYXJhbSA9IHMuZWRpdGluZ1BhcmFtO1xuICBjb25zdCBhY3RpdmVTdWdnZXN0aW9uID0gcy5hY3Rpb25hYmxlU3VnZ2VzdGlvbnNbMF07XG4gIGNvbnN0IGRyb3Bkb3duUGlsbDogU3VnZ2VzdGlvbiB8IG51bGwgPSBlZGl0aW5nUGFyYW1cbiAgICA/IHtcbiAgICAgICAgdHlwZTogZWRpdGluZ1BhcmFtLnN1Z2dlc3Rpb25UeXBlLFxuICAgICAgICB0ZXh0OiBlZGl0aW5nUGFyYW0uc3VnZ2VzdGlvblBsYWNlaG9sZGVyLFxuICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgb3B0aW9uczogZWRpdGluZ1BhcmFtLm9wdGlvbnMsXG4gICAgICB9XG4gICAgOiBudWxsO1xuICBjb25zdCBkcm9wZG93bkFjdGl2ZVBpbGwgPSBkcm9wZG93blBpbGwgPz8gYWN0aXZlU3VnZ2VzdGlvbjtcbiAgY29uc3QgZHJvcGRvd25QaWxscyA9IGRyb3Bkb3duUGlsbCA/IFtkcm9wZG93blBpbGxdIDogcy5hY3Rpb25hYmxlU3VnZ2VzdGlvbnM7XG4gIHJldHVybiB7XG4gICAgc3VnZ2VzdGlvbnM6IGRyb3Bkb3duQWN0aXZlUGlsbCA/IFt7IC4uLmRyb3Bkb3duQWN0aXZlUGlsbCwgb3B0aW9uczogcy5maWx0ZXJlZE9wdGlvbnMgfV0gOiBbXSxcbiAgICBhY3RpdmVJbmRleDogcy5hY3RpdmVEcm9wZG93bkluZGV4LFxuICAgIGlzT3Blbjogcy5pc0Ryb3Bkb3duT3BlbixcbiAgICBwaWxsczogZHJvcGRvd25QaWxscyxcbiAgICBpc0FjdGl2ZVBpbGxTZWxlY3RlZDogcy5pc0FjdGl2ZVBpbGxTZWxlY3RlZCxcbiAgICBpc0xvYWRpbmc6IGNvbXB1dGVVaUxvYWRpbmcocyksXG4gICAgaGFzVGFiYmVkVG9IaWdobGlnaHQ6IHMuaGFzVGFiYmVkVG9IaWdobGlnaHQsXG4gICAgaXNJbnB1dEVtcHR5OiBzLnRleHQudHJpbSgpLmxlbmd0aCA9PT0gMCxcbiAgICBvcHRpb25zUG9zaXRpb24sXG4gIH07XG59XG4iXX0=
@@ -64,10 +64,10 @@ export class PillListComponent {
64
64
  }
65
65
  }
66
66
  PillListComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: PillListComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
67
- PillListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: PillListComponent, isStandalone: true, selector: "aia-pill-list", inputs: { pills: "pills", activePillIndex: "activePillIndex", rounded: "rounded", loading: "loading", activeSelected: "activeSelected" }, outputs: { selectPill: "selectPill" }, ngImport: i0, template: "<ng-container *ngIf=\"loading && pills.length === 0; else realPills\">\n <span class=\"aia-pill-list\" data-aia-pill-list-loading=\"\">\n <span\n *ngFor=\"let w of fallbackSkeletonWidths; trackBy: trackByWidth; let i = index\"\n data-aia-pill-skeleton=\"\"\n class=\"aia-pill aia-pill-skeleton\"\n [class.aia-pill-rounded]=\"rounded\"\n [style.width.px]=\"w\"\n [style.opacity]=\"pillOpacity(i)\"\n ></span>\n </span>\n</ng-container>\n\n<ng-template #realPills>\n <span\n class=\"aia-pill-list\"\n [attr.data-aia-pill-list-loading]=\"loading ? '' : null\"\n >\n <button\n *ngFor=\"let pill of pills; trackBy: trackByType; let i = index\"\n type=\"button\"\n data-aia-pill=\"\"\n [attr.data-aia-loading]=\"loading ? '' : null\"\n tabindex=\"-1\"\n class=\"aia-pill\"\n [class.aia-pill-rounded]=\"rounded\"\n [class.aia-pill-active]=\"isSelected(i) && !loading\"\n [class.aia-pill-skeleton]=\"loading\"\n [style.opacity]=\"pillOpacity(i)\"\n [disabled]=\"loading\"\n (mousedown)=\"onPillMouseDown($event)\"\n (click)=\"onPillClick(i)\"\n >\n {{ pill.text }}\n </button>\n </span>\n</ng-template>\n", styles: [".aia-pill-list{position:relative;z-index:1;pointer-events:auto;display:inline-flex;gap:7px;align-items:center;vertical-align:middle}.aia-pill{display:inline-flex;align-items:center;justify-content:center;padding:7px 8px;border:none;border-radius:999px;background:rgba(49,50,85,.25);background:color-mix(in srgb,var(--aia-pill-bg, var(--aia-color-background-supportive, #313255)) 30%,transparent);color:var(--aia-pill-color, var(--aia-color-text-muted, #c1c4cb));font-family:inherit;font-size:var(--aia-pill-font-size, 14px);font-weight:500;line-height:normal;cursor:pointer;white-space:nowrap;animation:aiaPillFadeIn .4s cubic-bezier(.4,0,.2,1) forwards}.aia-pill-rounded{border-radius:999px}.aia-pill-skeleton{pointer-events:none;cursor:default;color:transparent;animation:aiaPillSkeletonPulse 1.4s ease-in-out infinite}@keyframes aiaPillFadeIn{0%{opacity:0}}@keyframes aiaPillSkeletonPulse{0%,to{filter:brightness(1)}50%{filter:brightness(.55)}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
67
+ PillListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: PillListComponent, isStandalone: true, selector: "aia-pill-list", inputs: { pills: "pills", activePillIndex: "activePillIndex", rounded: "rounded", loading: "loading", activeSelected: "activeSelected" }, outputs: { selectPill: "selectPill" }, ngImport: i0, template: "<ng-container *ngIf=\"loading && pills.length === 0; else realPills\">\n <span class=\"aia-pill-list\" data-aia-pill-list-loading=\"\">\n <span\n *ngFor=\"let w of fallbackSkeletonWidths; trackBy: trackByWidth; let i = index\"\n data-aia-pill-skeleton=\"\"\n class=\"aia-pill aia-pill-skeleton\"\n [class.aia-pill-rounded]=\"rounded\"\n [style.width.px]=\"w\"\n [style.opacity]=\"pillOpacity(i)\"\n ></span>\n </span>\n</ng-container>\n\n<ng-template #realPills>\n <span\n class=\"aia-pill-list\"\n [attr.data-aia-pill-list-loading]=\"loading ? '' : null\"\n >\n <button\n *ngFor=\"let pill of pills; trackBy: trackByType; let i = index\"\n type=\"button\"\n data-aia-pill=\"\"\n [attr.data-aia-loading]=\"loading ? '' : null\"\n tabindex=\"-1\"\n class=\"aia-pill\"\n [class.aia-pill-rounded]=\"rounded\"\n [class.aia-pill-active]=\"isSelected(i) && !loading\"\n [class.aia-pill-skeleton]=\"loading\"\n [style.opacity]=\"pillOpacity(i)\"\n [disabled]=\"loading\"\n (mousedown)=\"onPillMouseDown($event)\"\n (click)=\"onPillClick(i)\"\n >\n {{ pill.text }}\n </button>\n </span>\n</ng-template>\n", styles: [".aia-pill-list{position:relative;z-index:1;pointer-events:auto;display:inline-flex;gap:7px;padding:0 8px;align-items:center;vertical-align:middle}.aia-pill{display:inline-flex;align-items:center;justify-content:center;padding:7px 8px;border:none;border-radius:999px;background:rgba(49,50,85,.25);background:color-mix(in srgb,var(--aia-pill-bg, var(--aia-color-background-supportive, #313255)) 30%,transparent);color:var(--aia-pill-color, var(--aia-color-text-muted, #c1c4cb));font-family:inherit;font-size:var(--aia-pill-font-size, 14px);font-weight:500;line-height:normal;cursor:pointer;white-space:nowrap;animation:aiaPillFadeIn .4s cubic-bezier(.4,0,.2,1) forwards}.aia-pill-rounded{border-radius:999px}.aia-pill-skeleton{pointer-events:none;cursor:default;color:transparent;animation:aiaPillSkeletonPulse 1.4s ease-in-out infinite}@keyframes aiaPillFadeIn{0%{opacity:0}}@keyframes aiaPillSkeletonPulse{0%,to{filter:brightness(1)}50%{filter:brightness(.55)}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
68
68
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: PillListComponent, decorators: [{
69
69
  type: Component,
70
- args: [{ selector: "aia-pill-list", standalone: true, imports: [CommonModule], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, template: "<ng-container *ngIf=\"loading && pills.length === 0; else realPills\">\n <span class=\"aia-pill-list\" data-aia-pill-list-loading=\"\">\n <span\n *ngFor=\"let w of fallbackSkeletonWidths; trackBy: trackByWidth; let i = index\"\n data-aia-pill-skeleton=\"\"\n class=\"aia-pill aia-pill-skeleton\"\n [class.aia-pill-rounded]=\"rounded\"\n [style.width.px]=\"w\"\n [style.opacity]=\"pillOpacity(i)\"\n ></span>\n </span>\n</ng-container>\n\n<ng-template #realPills>\n <span\n class=\"aia-pill-list\"\n [attr.data-aia-pill-list-loading]=\"loading ? '' : null\"\n >\n <button\n *ngFor=\"let pill of pills; trackBy: trackByType; let i = index\"\n type=\"button\"\n data-aia-pill=\"\"\n [attr.data-aia-loading]=\"loading ? '' : null\"\n tabindex=\"-1\"\n class=\"aia-pill\"\n [class.aia-pill-rounded]=\"rounded\"\n [class.aia-pill-active]=\"isSelected(i) && !loading\"\n [class.aia-pill-skeleton]=\"loading\"\n [style.opacity]=\"pillOpacity(i)\"\n [disabled]=\"loading\"\n (mousedown)=\"onPillMouseDown($event)\"\n (click)=\"onPillClick(i)\"\n >\n {{ pill.text }}\n </button>\n </span>\n</ng-template>\n", styles: [".aia-pill-list{position:relative;z-index:1;pointer-events:auto;display:inline-flex;gap:7px;align-items:center;vertical-align:middle}.aia-pill{display:inline-flex;align-items:center;justify-content:center;padding:7px 8px;border:none;border-radius:999px;background:rgba(49,50,85,.25);background:color-mix(in srgb,var(--aia-pill-bg, var(--aia-color-background-supportive, #313255)) 30%,transparent);color:var(--aia-pill-color, var(--aia-color-text-muted, #c1c4cb));font-family:inherit;font-size:var(--aia-pill-font-size, 14px);font-weight:500;line-height:normal;cursor:pointer;white-space:nowrap;animation:aiaPillFadeIn .4s cubic-bezier(.4,0,.2,1) forwards}.aia-pill-rounded{border-radius:999px}.aia-pill-skeleton{pointer-events:none;cursor:default;color:transparent;animation:aiaPillSkeletonPulse 1.4s ease-in-out infinite}@keyframes aiaPillFadeIn{0%{opacity:0}}@keyframes aiaPillSkeletonPulse{0%,to{filter:brightness(1)}50%{filter:brightness(.55)}}\n"] }]
70
+ args: [{ selector: "aia-pill-list", standalone: true, imports: [CommonModule], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, template: "<ng-container *ngIf=\"loading && pills.length === 0; else realPills\">\n <span class=\"aia-pill-list\" data-aia-pill-list-loading=\"\">\n <span\n *ngFor=\"let w of fallbackSkeletonWidths; trackBy: trackByWidth; let i = index\"\n data-aia-pill-skeleton=\"\"\n class=\"aia-pill aia-pill-skeleton\"\n [class.aia-pill-rounded]=\"rounded\"\n [style.width.px]=\"w\"\n [style.opacity]=\"pillOpacity(i)\"\n ></span>\n </span>\n</ng-container>\n\n<ng-template #realPills>\n <span\n class=\"aia-pill-list\"\n [attr.data-aia-pill-list-loading]=\"loading ? '' : null\"\n >\n <button\n *ngFor=\"let pill of pills; trackBy: trackByType; let i = index\"\n type=\"button\"\n data-aia-pill=\"\"\n [attr.data-aia-loading]=\"loading ? '' : null\"\n tabindex=\"-1\"\n class=\"aia-pill\"\n [class.aia-pill-rounded]=\"rounded\"\n [class.aia-pill-active]=\"isSelected(i) && !loading\"\n [class.aia-pill-skeleton]=\"loading\"\n [style.opacity]=\"pillOpacity(i)\"\n [disabled]=\"loading\"\n (mousedown)=\"onPillMouseDown($event)\"\n (click)=\"onPillClick(i)\"\n >\n {{ pill.text }}\n </button>\n </span>\n</ng-template>\n", styles: [".aia-pill-list{position:relative;z-index:1;pointer-events:auto;display:inline-flex;gap:7px;padding:0 8px;align-items:center;vertical-align:middle}.aia-pill{display:inline-flex;align-items:center;justify-content:center;padding:7px 8px;border:none;border-radius:999px;background:rgba(49,50,85,.25);background:color-mix(in srgb,var(--aia-pill-bg, var(--aia-color-background-supportive, #313255)) 30%,transparent);color:var(--aia-pill-color, var(--aia-color-text-muted, #c1c4cb));font-family:inherit;font-size:var(--aia-pill-font-size, 14px);font-weight:500;line-height:normal;cursor:pointer;white-space:nowrap;animation:aiaPillFadeIn .4s cubic-bezier(.4,0,.2,1) forwards}.aia-pill-rounded{border-radius:999px}.aia-pill-skeleton{pointer-events:none;cursor:default;color:transparent;animation:aiaPillSkeletonPulse 1.4s ease-in-out infinite}@keyframes aiaPillFadeIn{0%{opacity:0}}@keyframes aiaPillSkeletonPulse{0%,to{filter:brightness(1)}50%{filter:brightness(.55)}}\n"] }]
71
71
  }], propDecorators: { pills: [{
72
72
  type: Input
73
73
  }], activePillIndex: [{
@@ -81,4 +81,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
81
81
  }], selectPill: [{
82
82
  type: Output
83
83
  }] } });
84
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGlsbC1saXN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvaW50ZXJuYWwvcGlsbC1saXN0L3BpbGwtbGlzdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL2ludGVybmFsL3BpbGwtbGlzdC9waWxsLWxpc3QuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFlBQVksRUFDWixLQUFLLEVBQ0wsTUFBTSxFQUNOLGlCQUFpQixHQUNsQixNQUFNLGVBQWUsQ0FBQzs7O0FBR3ZCOzs7Ozs7O0dBT0c7QUFVSCxNQUFNLE9BQU8saUJBQWlCO0lBVDlCO1FBVVcsVUFBSyxHQUFpQixFQUFFLENBQUM7UUFDekIsb0JBQWUsR0FBRyxDQUFDLENBQUM7UUFDcEIsWUFBTyxHQUFHLEtBQUssQ0FBQztRQUN6Qjs7Ozs7V0FLRztRQUNNLFlBQU8sR0FBRyxLQUFLLENBQUM7UUFDekI7Ozs7O1dBS0c7UUFDTSxtQkFBYyxHQUFHLEtBQUssQ0FBQztRQUViLGVBQVUsR0FBRyxJQUFJLFlBQVksRUFBVSxDQUFDO1FBRTNELDJFQUEyRTtRQUNsRSwyQkFBc0IsR0FBRyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQztRQW1CNUMsZ0JBQVcsR0FBRyxDQUFDLENBQVMsRUFBRSxJQUFnQixFQUFVLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO1FBQ2pFLGlCQUFZLEdBQUcsQ0FBQyxDQUFTLEVBQUUsQ0FBUyxFQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUM7S0FXcEQ7SUE3QkMsdUVBQXVFO0lBQ3ZFLFVBQVUsQ0FBQyxLQUFhO1FBQ3RCLE9BQU8sSUFBSSxDQUFDLGNBQWMsSUFBSSxLQUFLLEtBQUssSUFBSSxDQUFDLGVBQWUsQ0FBQztJQUMvRCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILFdBQVcsQ0FBQyxLQUFhO1FBQ3ZCLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUM7WUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLFdBQVc7UUFDakQsSUFBSSxLQUFLLEtBQUssQ0FBQztZQUFFLE9BQU8sR0FBRyxDQUFDLENBQUMsUUFBUTtRQUNyQyxJQUFJLEtBQUssS0FBSyxDQUFDO1lBQUUsT0FBTyxHQUFHLENBQUMsQ0FBQyxPQUFPO1FBQ3BDLE9BQU8sR0FBRyxDQUFDLENBQUMsT0FBTztJQUNyQixDQUFDO0lBS0QsV0FBVyxDQUFDLEtBQWE7UUFDdkIsSUFBSSxJQUFJLENBQUMsT0FBTztZQUFFLE9BQU87UUFDekIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDOUIsQ0FBQztJQUVELGVBQWUsQ0FBQyxLQUFZO1FBQzFCLDhEQUE4RDtRQUM5RCxLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7SUFDekIsQ0FBQzs7K0dBcERVLGlCQUFpQjttR0FBakIsaUJBQWlCLDBQQzVCOUIsd3NDQXFDQSw4K0JEZlksWUFBWTs0RkFNWCxpQkFBaUI7a0JBVDdCLFNBQVM7K0JBQ0UsZUFBZSxjQUNiLElBQUksV0FDUCxDQUFDLFlBQVksQ0FBQyxtQkFDTix1QkFBdUIsQ0FBQyxNQUFNLGlCQUNoQyxpQkFBaUIsQ0FBQyxJQUFJOzhCQUs1QixLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csZUFBZTtzQkFBdkIsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBT0csT0FBTztzQkFBZixLQUFLO2dCQU9HLGNBQWM7c0JBQXRCLEtBQUs7Z0JBRWEsVUFBVTtzQkFBNUIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gXCJAYW5ndWxhci9jb21tb25cIjtcbmltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDb21wb25lbnQsXG4gIEV2ZW50RW1pdHRlcixcbiAgSW5wdXQsXG4gIE91dHB1dCxcbiAgVmlld0VuY2Fwc3VsYXRpb24sXG59IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgdHlwZSB7IFN1Z2dlc3Rpb24gfSBmcm9tIFwiQG1hZ2ljeC1lbmcvYWktYXV0b2NvbXBsZXRlLXZhbmlsbGFcIjtcblxuLyoqXG4gKiBJbnRlcm5hbCBwaWxsIGxpc3QgdXNlZCBieSBib3RoIHRoZSBkcm9wZG93biBhbmQgVGllciAxJ3MgaW5saW5lIHBpbGxiYXIuXG4gKiBNaXJyb3JzIGBwYWNrYWdlcy9yZWFjdC9zcmMvY29tcG9uZW50cy9QaWxsTGlzdC50c3hgIG9uZS1mb3Itb25lIOKAlCBpbmNsdWRpbmdcbiAqIHRoZSBwZXItaW5kZXggb3BhY2l0eSByYW1wICgxIC8gMC43IC8gMC40IC8gMC4yKSBhbmQgdGhlIHNrZWxldG9uLWxvYWRpbmdcbiAqIGZhbGxiYWNrIHRoYXQgcHJlc2VydmVzIGxheW91dCB3aGlsZSB0aGUgbmV4dCBmZXRjaCBpcyBpbiBmbGlnaHQuXG4gKlxuICogQGludGVybmFsXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogXCJhaWEtcGlsbC1saXN0XCIsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGVdLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgdGVtcGxhdGVVcmw6IFwiLi9waWxsLWxpc3QuY29tcG9uZW50Lmh0bWxcIixcbiAgc3R5bGVVcmxzOiBbXCIuL3BpbGwtbGlzdC5jb21wb25lbnQuY3NzXCJdLFxufSlcbmV4cG9ydCBjbGFzcyBQaWxsTGlzdENvbXBvbmVudCB7XG4gIEBJbnB1dCgpIHBpbGxzOiBTdWdnZXN0aW9uW10gPSBbXTtcbiAgQElucHV0KCkgYWN0aXZlUGlsbEluZGV4ID0gMDtcbiAgQElucHV0KCkgcm91bmRlZCA9IGZhbHNlO1xuICAvKipcbiAgICogV2hlbiB0cnVlLCBwaWxscyBiZWNvbWUgbm9uLWludGVyYWN0aXZlIHNoaW1tZXJpbmcgc2tlbGV0b25zLiBSZWFsIHBpbGxzXG4gICAqICh3aXRoIHRoZWlyIHRleHQpIGFyZSByZW5kZXJlZCB3aGVuIHByb3ZpZGVkIHNvIHdpZHRocy9wb3NpdGlvbnMgbWF0Y2hcbiAgICogdGhlIHByZXZpb3VzIHN0YXRlOyB3aXRoIG5vIHBpbGxzLCBmaXhlZC13aWR0aCBmYWxsYmFjayBwbGFjZWhvbGRlcnMgYXJlXG4gICAqIHJlbmRlcmVkIGluc3RlYWQuXG4gICAqL1xuICBASW5wdXQoKSBsb2FkaW5nID0gZmFsc2U7XG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBhY3RpdmUgKGxlYWRpbmcpIHBpbGwgc2hvdWxkIHJlbmRlciBzZWxlY3RlZCAoZnVsbCBvcGFjaXR5KVxuICAgKiByYXRoZXIgdGhhbiBpdHMgcG9zaXRpb25hbCBgZmlyc3RgIHRpZXIuIEF1dG8gdHJpZ2dlciDih5IgdHJ1ZSB3aGlsZSBhXG4gICAqIGRyb3Bkb3duIG9wdGlvbiBpcyBoaWdobGlnaHRlZDsgbWFudWFsIHRyaWdnZXIg4oeSIHRydWUgYWZ0ZXIgdGhlIHVzZXIgdGFwc1xuICAgKiB0aGUgcGlsbC4gU2VlIGBBSUF1dG9jb21wbGV0ZUNvbnRyb2xsZXIuaXNBY3RpdmVQaWxsU2VsZWN0ZWQkYC5cbiAgICovXG4gIEBJbnB1dCgpIGFjdGl2ZVNlbGVjdGVkID0gZmFsc2U7XG5cbiAgQE91dHB1dCgpIHJlYWRvbmx5IHNlbGVjdFBpbGwgPSBuZXcgRXZlbnRFbWl0dGVyPG51bWJlcj4oKTtcblxuICAvKiogRmFsbGJhY2sgd2lkdGhzIHdoZW4gbG9hZGluZyB3aXRoIHplcm8gY2FjaGVkIHBpbGxzIChtYXRjaGVzIFJlYWN0KS4gKi9cbiAgcmVhZG9ubHkgZmFsbGJhY2tTa2VsZXRvbldpZHRocyA9IFsxMjUsIDY5XTtcblxuICAvKiogVGhlIGFjdGl2ZSBwaWxsIGlzIFwic2VsZWN0ZWRcIiBvbmx5IHdoZW4gYGFjdGl2ZVNlbGVjdGVkYCBpcyBzZXQuICovXG4gIGlzU2VsZWN0ZWQoaW5kZXg6IG51bWJlcik6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmFjdGl2ZVNlbGVjdGVkICYmIGluZGV4ID09PSB0aGlzLmFjdGl2ZVBpbGxJbmRleDtcbiAgfVxuXG4gIC8qKlxuICAgKiBPcGFjaXR5IHBlciBwaWxsIHN0YXRlIOKAlCBtaXJyb3JzIFBpbGxMaXN0LnRzeCBgUElMTF9PUEFDSVRZYC4gVGhlIHNlbGVjdGVkXG4gICAqIHBpbGwgaXMgZnVsbCBvcGFjaXR5OyBvdGhlcndpc2UgcGlsbHMgdGFrZSBhIHBvc2l0aW9uYWwgdGllciAoZmlyc3QgLyBuZXh0XG4gICAqIC8gbGFzdCkuXG4gICAqL1xuICBwaWxsT3BhY2l0eShpbmRleDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICBpZiAodGhpcy5pc1NlbGVjdGVkKGluZGV4KSkgcmV0dXJuIDE7IC8vIFNlbGVjdGVkXG4gICAgaWYgKGluZGV4ID09PSAwKSByZXR1cm4gMC43OyAvLyBGaXJzdFxuICAgIGlmIChpbmRleCA9PT0gMSkgcmV0dXJuIDAuNDsgLy8gTmV4dFxuICAgIHJldHVybiAwLjI7IC8vIExhc3RcbiAgfVxuXG4gIHRyYWNrQnlUeXBlID0gKF86IG51bWJlciwgcGlsbDogU3VnZ2VzdGlvbik6IHN0cmluZyA9PiBwaWxsLnR5cGU7XG4gIHRyYWNrQnlXaWR0aCA9IChfOiBudW1iZXIsIHc6IG51bWJlcik6IG51bWJlciA9PiB3O1xuXG4gIG9uUGlsbENsaWNrKGluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5sb2FkaW5nKSByZXR1cm47XG4gICAgdGhpcy5zZWxlY3RQaWxsLmVtaXQoaW5kZXgpO1xuICB9XG5cbiAgb25QaWxsTW91c2VEb3duKGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgIC8vIFByZXZlbnQgdGhlIGVkaXRvciBmcm9tIGxvc2luZyBmb2N1cyB3aGVuIGEgcGlsbCBpcyB0YXBwZWQuXG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgfVxufVxuIiwiPG5nLWNvbnRhaW5lciAqbmdJZj1cImxvYWRpbmcgJiYgcGlsbHMubGVuZ3RoID09PSAwOyBlbHNlIHJlYWxQaWxsc1wiPlxuICA8c3BhbiBjbGFzcz1cImFpYS1waWxsLWxpc3RcIiBkYXRhLWFpYS1waWxsLWxpc3QtbG9hZGluZz1cIlwiPlxuICAgIDxzcGFuXG4gICAgICAqbmdGb3I9XCJsZXQgdyBvZiBmYWxsYmFja1NrZWxldG9uV2lkdGhzOyB0cmFja0J5OiB0cmFja0J5V2lkdGg7IGxldCBpID0gaW5kZXhcIlxuICAgICAgZGF0YS1haWEtcGlsbC1za2VsZXRvbj1cIlwiXG4gICAgICBjbGFzcz1cImFpYS1waWxsIGFpYS1waWxsLXNrZWxldG9uXCJcbiAgICAgIFtjbGFzcy5haWEtcGlsbC1yb3VuZGVkXT1cInJvdW5kZWRcIlxuICAgICAgW3N0eWxlLndpZHRoLnB4XT1cIndcIlxuICAgICAgW3N0eWxlLm9wYWNpdHldPVwicGlsbE9wYWNpdHkoaSlcIlxuICAgID48L3NwYW4+XG4gIDwvc3Bhbj5cbjwvbmctY29udGFpbmVyPlxuXG48bmctdGVtcGxhdGUgI3JlYWxQaWxscz5cbiAgPHNwYW5cbiAgICBjbGFzcz1cImFpYS1waWxsLWxpc3RcIlxuICAgIFthdHRyLmRhdGEtYWlhLXBpbGwtbGlzdC1sb2FkaW5nXT1cImxvYWRpbmcgPyAnJyA6IG51bGxcIlxuICA+XG4gICAgPGJ1dHRvblxuICAgICAgKm5nRm9yPVwibGV0IHBpbGwgb2YgcGlsbHM7IHRyYWNrQnk6IHRyYWNrQnlUeXBlOyBsZXQgaSA9IGluZGV4XCJcbiAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgZGF0YS1haWEtcGlsbD1cIlwiXG4gICAgICBbYXR0ci5kYXRhLWFpYS1sb2FkaW5nXT1cImxvYWRpbmcgPyAnJyA6IG51bGxcIlxuICAgICAgdGFiaW5kZXg9XCItMVwiXG4gICAgICBjbGFzcz1cImFpYS1waWxsXCJcbiAgICAgIFtjbGFzcy5haWEtcGlsbC1yb3VuZGVkXT1cInJvdW5kZWRcIlxuICAgICAgW2NsYXNzLmFpYS1waWxsLWFjdGl2ZV09XCJpc1NlbGVjdGVkKGkpICYmICFsb2FkaW5nXCJcbiAgICAgIFtjbGFzcy5haWEtcGlsbC1za2VsZXRvbl09XCJsb2FkaW5nXCJcbiAgICAgIFtzdHlsZS5vcGFjaXR5XT1cInBpbGxPcGFjaXR5KGkpXCJcbiAgICAgIFtkaXNhYmxlZF09XCJsb2FkaW5nXCJcbiAgICAgIChtb3VzZWRvd24pPVwib25QaWxsTW91c2VEb3duKCRldmVudClcIlxuICAgICAgKGNsaWNrKT1cIm9uUGlsbENsaWNrKGkpXCJcbiAgICA+XG4gICAgICB7eyBwaWxsLnRleHQgfX1cbiAgICA8L2J1dHRvbj5cbiAgPC9zcGFuPlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
84
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGlsbC1saXN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvaW50ZXJuYWwvcGlsbC1saXN0L3BpbGwtbGlzdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL2ludGVybmFsL3BpbGwtbGlzdC9waWxsLWxpc3QuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFlBQVksRUFDWixLQUFLLEVBQ0wsTUFBTSxFQUNOLGlCQUFpQixHQUNsQixNQUFNLGVBQWUsQ0FBQzs7O0FBR3ZCOzs7Ozs7O0dBT0c7QUFVSCxNQUFNLE9BQU8saUJBQWlCO0lBVDlCO1FBVVcsVUFBSyxHQUFpQixFQUFFLENBQUM7UUFDekIsb0JBQWUsR0FBRyxDQUFDLENBQUM7UUFDcEIsWUFBTyxHQUFHLEtBQUssQ0FBQztRQUN6Qjs7Ozs7V0FLRztRQUNNLFlBQU8sR0FBRyxLQUFLLENBQUM7UUFDekI7Ozs7O1dBS0c7UUFDTSxtQkFBYyxHQUFHLEtBQUssQ0FBQztRQUViLGVBQVUsR0FBRyxJQUFJLFlBQVksRUFBVSxDQUFDO1FBRTNELDJFQUEyRTtRQUNsRSwyQkFBc0IsR0FBRyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQztRQW1CNUMsZ0JBQVcsR0FBRyxDQUFDLENBQVMsRUFBRSxJQUFnQixFQUFVLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO1FBQ2pFLGlCQUFZLEdBQUcsQ0FBQyxDQUFTLEVBQUUsQ0FBUyxFQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUM7S0FXcEQ7SUE3QkMsdUVBQXVFO0lBQ3ZFLFVBQVUsQ0FBQyxLQUFhO1FBQ3RCLE9BQU8sSUFBSSxDQUFDLGNBQWMsSUFBSSxLQUFLLEtBQUssSUFBSSxDQUFDLGVBQWUsQ0FBQztJQUMvRCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILFdBQVcsQ0FBQyxLQUFhO1FBQ3ZCLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUM7WUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLFdBQVc7UUFDakQsSUFBSSxLQUFLLEtBQUssQ0FBQztZQUFFLE9BQU8sR0FBRyxDQUFDLENBQUMsUUFBUTtRQUNyQyxJQUFJLEtBQUssS0FBSyxDQUFDO1lBQUUsT0FBTyxHQUFHLENBQUMsQ0FBQyxPQUFPO1FBQ3BDLE9BQU8sR0FBRyxDQUFDLENBQUMsT0FBTztJQUNyQixDQUFDO0lBS0QsV0FBVyxDQUFDLEtBQWE7UUFDdkIsSUFBSSxJQUFJLENBQUMsT0FBTztZQUFFLE9BQU87UUFDekIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDOUIsQ0FBQztJQUVELGVBQWUsQ0FBQyxLQUFZO1FBQzFCLDhEQUE4RDtRQUM5RCxLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7SUFDekIsQ0FBQzs7K0dBcERVLGlCQUFpQjttR0FBakIsaUJBQWlCLDBQQzVCOUIsd3NDQXFDQSw0L0JEZlksWUFBWTs0RkFNWCxpQkFBaUI7a0JBVDdCLFNBQVM7K0JBQ0UsZUFBZSxjQUNiLElBQUksV0FDUCxDQUFDLFlBQVksQ0FBQyxtQkFDTix1QkFBdUIsQ0FBQyxNQUFNLGlCQUNoQyxpQkFBaUIsQ0FBQyxJQUFJOzhCQUs1QixLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csZUFBZTtzQkFBdkIsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBT0csT0FBTztzQkFBZixLQUFLO2dCQU9HLGNBQWM7c0JBQXRCLEtBQUs7Z0JBRWEsVUFBVTtzQkFBNUIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gXCJAYW5ndWxhci9jb21tb25cIjtcbmltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDb21wb25lbnQsXG4gIEV2ZW50RW1pdHRlcixcbiAgSW5wdXQsXG4gIE91dHB1dCxcbiAgVmlld0VuY2Fwc3VsYXRpb24sXG59IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgdHlwZSB7IFN1Z2dlc3Rpb24gfSBmcm9tIFwiQG1hZ2ljeC1lbmcvYWktYXV0b2NvbXBsZXRlLXZhbmlsbGFcIjtcblxuLyoqXG4gKiBJbnRlcm5hbCBwaWxsIGxpc3QgdXNlZCBieSBib3RoIHRoZSBkcm9wZG93biBhbmQgVGllciAxJ3MgaW5saW5lIHBpbGxiYXIuXG4gKiBNaXJyb3JzIGBwYWNrYWdlcy9yZWFjdC9zcmMvY29tcG9uZW50cy9QaWxsTGlzdC50c3hgIG9uZS1mb3Itb25lIOKAlCBpbmNsdWRpbmdcbiAqIHRoZSBwZXItaW5kZXggb3BhY2l0eSByYW1wICgxIC8gMC43IC8gMC40IC8gMC4yKSBhbmQgdGhlIHNrZWxldG9uLWxvYWRpbmdcbiAqIGZhbGxiYWNrIHRoYXQgcHJlc2VydmVzIGxheW91dCB3aGlsZSB0aGUgbmV4dCBmZXRjaCBpcyBpbiBmbGlnaHQuXG4gKlxuICogQGludGVybmFsXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogXCJhaWEtcGlsbC1saXN0XCIsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGVdLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgdGVtcGxhdGVVcmw6IFwiLi9waWxsLWxpc3QuY29tcG9uZW50Lmh0bWxcIixcbiAgc3R5bGVVcmxzOiBbXCIuL3BpbGwtbGlzdC5jb21wb25lbnQuY3NzXCJdLFxufSlcbmV4cG9ydCBjbGFzcyBQaWxsTGlzdENvbXBvbmVudCB7XG4gIEBJbnB1dCgpIHBpbGxzOiBTdWdnZXN0aW9uW10gPSBbXTtcbiAgQElucHV0KCkgYWN0aXZlUGlsbEluZGV4ID0gMDtcbiAgQElucHV0KCkgcm91bmRlZCA9IGZhbHNlO1xuICAvKipcbiAgICogV2hlbiB0cnVlLCBwaWxscyBiZWNvbWUgbm9uLWludGVyYWN0aXZlIHNoaW1tZXJpbmcgc2tlbGV0b25zLiBSZWFsIHBpbGxzXG4gICAqICh3aXRoIHRoZWlyIHRleHQpIGFyZSByZW5kZXJlZCB3aGVuIHByb3ZpZGVkIHNvIHdpZHRocy9wb3NpdGlvbnMgbWF0Y2hcbiAgICogdGhlIHByZXZpb3VzIHN0YXRlOyB3aXRoIG5vIHBpbGxzLCBmaXhlZC13aWR0aCBmYWxsYmFjayBwbGFjZWhvbGRlcnMgYXJlXG4gICAqIHJlbmRlcmVkIGluc3RlYWQuXG4gICAqL1xuICBASW5wdXQoKSBsb2FkaW5nID0gZmFsc2U7XG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBhY3RpdmUgKGxlYWRpbmcpIHBpbGwgc2hvdWxkIHJlbmRlciBzZWxlY3RlZCAoZnVsbCBvcGFjaXR5KVxuICAgKiByYXRoZXIgdGhhbiBpdHMgcG9zaXRpb25hbCBgZmlyc3RgIHRpZXIuIEF1dG8gdHJpZ2dlciDih5IgdHJ1ZSB3aGlsZSBhXG4gICAqIGRyb3Bkb3duIG9wdGlvbiBpcyBoaWdobGlnaHRlZDsgbWFudWFsIHRyaWdnZXIg4oeSIHRydWUgYWZ0ZXIgdGhlIHVzZXIgdGFwc1xuICAgKiB0aGUgcGlsbC4gU2VlIGBBSUF1dG9jb21wbGV0ZUNvbnRyb2xsZXIuaXNBY3RpdmVQaWxsU2VsZWN0ZWQkYC5cbiAgICovXG4gIEBJbnB1dCgpIGFjdGl2ZVNlbGVjdGVkID0gZmFsc2U7XG5cbiAgQE91dHB1dCgpIHJlYWRvbmx5IHNlbGVjdFBpbGwgPSBuZXcgRXZlbnRFbWl0dGVyPG51bWJlcj4oKTtcblxuICAvKiogRmFsbGJhY2sgd2lkdGhzIHdoZW4gbG9hZGluZyB3aXRoIHplcm8gY2FjaGVkIHBpbGxzIChtYXRjaGVzIFJlYWN0KS4gKi9cbiAgcmVhZG9ubHkgZmFsbGJhY2tTa2VsZXRvbldpZHRocyA9IFsxMjUsIDY5XTtcblxuICAvKiogVGhlIGFjdGl2ZSBwaWxsIGlzIFwic2VsZWN0ZWRcIiBvbmx5IHdoZW4gYGFjdGl2ZVNlbGVjdGVkYCBpcyBzZXQuICovXG4gIGlzU2VsZWN0ZWQoaW5kZXg6IG51bWJlcik6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmFjdGl2ZVNlbGVjdGVkICYmIGluZGV4ID09PSB0aGlzLmFjdGl2ZVBpbGxJbmRleDtcbiAgfVxuXG4gIC8qKlxuICAgKiBPcGFjaXR5IHBlciBwaWxsIHN0YXRlIOKAlCBtaXJyb3JzIFBpbGxMaXN0LnRzeCBgUElMTF9PUEFDSVRZYC4gVGhlIHNlbGVjdGVkXG4gICAqIHBpbGwgaXMgZnVsbCBvcGFjaXR5OyBvdGhlcndpc2UgcGlsbHMgdGFrZSBhIHBvc2l0aW9uYWwgdGllciAoZmlyc3QgLyBuZXh0XG4gICAqIC8gbGFzdCkuXG4gICAqL1xuICBwaWxsT3BhY2l0eShpbmRleDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICBpZiAodGhpcy5pc1NlbGVjdGVkKGluZGV4KSkgcmV0dXJuIDE7IC8vIFNlbGVjdGVkXG4gICAgaWYgKGluZGV4ID09PSAwKSByZXR1cm4gMC43OyAvLyBGaXJzdFxuICAgIGlmIChpbmRleCA9PT0gMSkgcmV0dXJuIDAuNDsgLy8gTmV4dFxuICAgIHJldHVybiAwLjI7IC8vIExhc3RcbiAgfVxuXG4gIHRyYWNrQnlUeXBlID0gKF86IG51bWJlciwgcGlsbDogU3VnZ2VzdGlvbik6IHN0cmluZyA9PiBwaWxsLnR5cGU7XG4gIHRyYWNrQnlXaWR0aCA9IChfOiBudW1iZXIsIHc6IG51bWJlcik6IG51bWJlciA9PiB3O1xuXG4gIG9uUGlsbENsaWNrKGluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5sb2FkaW5nKSByZXR1cm47XG4gICAgdGhpcy5zZWxlY3RQaWxsLmVtaXQoaW5kZXgpO1xuICB9XG5cbiAgb25QaWxsTW91c2VEb3duKGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgIC8vIFByZXZlbnQgdGhlIGVkaXRvciBmcm9tIGxvc2luZyBmb2N1cyB3aGVuIGEgcGlsbCBpcyB0YXBwZWQuXG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgfVxufVxuIiwiPG5nLWNvbnRhaW5lciAqbmdJZj1cImxvYWRpbmcgJiYgcGlsbHMubGVuZ3RoID09PSAwOyBlbHNlIHJlYWxQaWxsc1wiPlxuICA8c3BhbiBjbGFzcz1cImFpYS1waWxsLWxpc3RcIiBkYXRhLWFpYS1waWxsLWxpc3QtbG9hZGluZz1cIlwiPlxuICAgIDxzcGFuXG4gICAgICAqbmdGb3I9XCJsZXQgdyBvZiBmYWxsYmFja1NrZWxldG9uV2lkdGhzOyB0cmFja0J5OiB0cmFja0J5V2lkdGg7IGxldCBpID0gaW5kZXhcIlxuICAgICAgZGF0YS1haWEtcGlsbC1za2VsZXRvbj1cIlwiXG4gICAgICBjbGFzcz1cImFpYS1waWxsIGFpYS1waWxsLXNrZWxldG9uXCJcbiAgICAgIFtjbGFzcy5haWEtcGlsbC1yb3VuZGVkXT1cInJvdW5kZWRcIlxuICAgICAgW3N0eWxlLndpZHRoLnB4XT1cIndcIlxuICAgICAgW3N0eWxlLm9wYWNpdHldPVwicGlsbE9wYWNpdHkoaSlcIlxuICAgID48L3NwYW4+XG4gIDwvc3Bhbj5cbjwvbmctY29udGFpbmVyPlxuXG48bmctdGVtcGxhdGUgI3JlYWxQaWxscz5cbiAgPHNwYW5cbiAgICBjbGFzcz1cImFpYS1waWxsLWxpc3RcIlxuICAgIFthdHRyLmRhdGEtYWlhLXBpbGwtbGlzdC1sb2FkaW5nXT1cImxvYWRpbmcgPyAnJyA6IG51bGxcIlxuICA+XG4gICAgPGJ1dHRvblxuICAgICAgKm5nRm9yPVwibGV0IHBpbGwgb2YgcGlsbHM7IHRyYWNrQnk6IHRyYWNrQnlUeXBlOyBsZXQgaSA9IGluZGV4XCJcbiAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgZGF0YS1haWEtcGlsbD1cIlwiXG4gICAgICBbYXR0ci5kYXRhLWFpYS1sb2FkaW5nXT1cImxvYWRpbmcgPyAnJyA6IG51bGxcIlxuICAgICAgdGFiaW5kZXg9XCItMVwiXG4gICAgICBjbGFzcz1cImFpYS1waWxsXCJcbiAgICAgIFtjbGFzcy5haWEtcGlsbC1yb3VuZGVkXT1cInJvdW5kZWRcIlxuICAgICAgW2NsYXNzLmFpYS1waWxsLWFjdGl2ZV09XCJpc1NlbGVjdGVkKGkpICYmICFsb2FkaW5nXCJcbiAgICAgIFtjbGFzcy5haWEtcGlsbC1za2VsZXRvbl09XCJsb2FkaW5nXCJcbiAgICAgIFtzdHlsZS5vcGFjaXR5XT1cInBpbGxPcGFjaXR5KGkpXCJcbiAgICAgIFtkaXNhYmxlZF09XCJsb2FkaW5nXCJcbiAgICAgIChtb3VzZWRvd24pPVwib25QaWxsTW91c2VEb3duKCRldmVudClcIlxuICAgICAgKGNsaWNrKT1cIm9uUGlsbENsaWNrKGkpXCJcbiAgICA+XG4gICAgICB7eyBwaWxsLnRleHQgfX1cbiAgICA8L2J1dHRvbj5cbiAgPC9zcGFuPlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==