@rivet-health/design-system 40.4.0 → 40.6.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,26 +1,13 @@
1
1
  import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output, } from '@angular/core';
2
2
  import { cloneDeep, isEqual } from 'lodash';
3
- import { RivSelect } from '../../../input/select/state';
4
3
  import { RivViews } from '../state';
5
4
  import * as i0 from "@angular/core";
6
5
  import * as i1 from "@angular/common";
7
6
  import * as i2 from "../../../input/button/button.component";
8
7
  import * as i3 from "../../../overlay/callout/callout.component";
9
- import * as i4 from "../../../icon/icon.component";
10
- import * as i5 from "../../../overlay/overlay.directive";
11
- import * as i6 from "../../../input/search-select/search-select.component";
12
- import * as i7 from "../../../input/select/select/select.component";
13
- import * as i8 from "../../../input/text-field/text-field.component";
14
- const titles = {
15
- private: 'Private',
16
- public: 'Public',
17
- shared: 'Shared',
18
- };
19
- const subtitles = {
20
- private: 'Only visible to you',
21
- public: 'Visible to everyone',
22
- shared: 'Only visible to those with access',
23
- };
8
+ import * as i4 from "../../../overlay/overlay.directive";
9
+ import * as i5 from "../permission-picker/permission-picker.component";
10
+ import * as i6 from "../../../input/text-field/text-field.component";
24
11
  export class EditViewComponent {
25
12
  constructor(cdr) {
26
13
  this.cdr = cdr;
@@ -30,17 +17,9 @@ export class EditViewComponent {
30
17
  this.save = new EventEmitter();
31
18
  this.delete = new EventEmitter();
32
19
  this.close = new EventEmitter();
33
- this.permissionOptions = RivViews.ViewPermissions.map(permission => ({
34
- value: permission,
35
- title: titles[permission],
36
- subtitle: subtitles[permission],
37
- }));
38
- this.userOptions = [];
39
- this.selectedUsers = [];
40
20
  }
41
21
  resetView() {
42
22
  this.editedView = cloneDeep(this.view);
43
- this.setUpUserSelectManager();
44
23
  }
45
24
  ngOnInit() {
46
25
  this.resetView();
@@ -50,9 +29,6 @@ export class EditViewComponent {
50
29
  this.resetView();
51
30
  }
52
31
  }
53
- ngOnDestroy() {
54
- this.tearDownUserSelectManager();
55
- }
56
32
  canEdit() {
57
33
  return this.mode === 'edit';
58
34
  }
@@ -62,77 +38,60 @@ export class EditViewComponent {
62
38
  titleChange(value) {
63
39
  if (this.editedView)
64
40
  this.editedView.title = value;
41
+ // These handlers fire from the permission picker / text field, which render
42
+ // in the overlay outlet's change-detection subtree — a different branch than
43
+ // this OnPush component. Without markForCheck the updated editedView never
44
+ // flows back into the child input bindings (e.g. the highlighted option).
45
+ this.cdr.markForCheck();
65
46
  }
66
- permissionChange(value) {
67
- if (this.editedView)
68
- this.editedView.permission = value;
69
- }
70
- getSharedUsers(view) {
71
- if (RivViews.isSharedView(view)) {
72
- return view.sharedUsers;
73
- }
74
- return [];
75
- }
76
- tearDownUserSelectManager() {
77
- this.userSelectSubscription?.unsubscribe();
78
- }
79
- async setUpUserSelectManager() {
80
- this.tearDownUserSelectManager();
81
- if (this.userSelectMode === 'search-select') {
82
- const users = await (this.userSource || (() => []))();
83
- this.userOptions = users.map(u => ({
84
- ...u,
85
- new: u.new ?? false,
86
- }));
87
- this.selectedUsers = this.getSharedUsers(this.editedView).map(u => ({
88
- ...u,
89
- new: u.new ?? false,
90
- }));
91
- this.cdr.markForCheck();
47
+ onPermissionChange(value) {
48
+ if (!this.editedView)
49
+ return;
50
+ if (value === 'shared') {
51
+ if (!RivViews.isSharedView(this.editedView)) {
52
+ this.editedView = {
53
+ ...this.editedView,
54
+ permission: 'shared',
55
+ sharedUsers: [],
56
+ };
57
+ }
92
58
  }
93
59
  else {
94
- this.userSelectManager = RivSelect.createInMemoryManager(async () => [{ options: await (this.userSource || (() => []))() }], {
95
- allowSearch: true,
96
- allowSelectAll: true,
97
- allowMultiSelect: true,
98
- displayLimit: 500,
99
- initialState: {
100
- selection: {
101
- selected: new RivSelect.OptionSet(this.getSharedUsers(this.editedView)),
102
- },
103
- },
104
- });
105
- this.userSelectSubscription = this.userSelectManager.state.subscribe(state => {
106
- if (RivViews.isSharedView(this.editedView)) {
107
- this.editedView.sharedUsers = [...state.selection.selected];
108
- }
109
- });
110
- this.userSelectManager.actions.next({ type: 'load' });
60
+ if (RivViews.isSharedView(this.editedView)) {
61
+ const { sharedUsers, ...rest } = this.editedView;
62
+ this.editedView = {
63
+ ...rest,
64
+ permission: value,
65
+ };
66
+ }
67
+ else {
68
+ this.editedView.permission = value;
69
+ }
111
70
  }
71
+ this.cdr.markForCheck();
112
72
  }
113
- onSelectedUsersChange(users) {
114
- this.selectedUsers = users;
73
+ onSharedUsersChange(users) {
115
74
  if (RivViews.isSharedView(this.editedView)) {
116
- this.editedView.sharedUsers = RivViews.toSharedUsers(users);
75
+ this.editedView.sharedUsers = users;
117
76
  }
77
+ this.cdr.markForCheck();
118
78
  }
119
- handleAddUser(searchText) {
120
- if (!this.onAddUser)
121
- return;
122
- const newUser = this.onAddUser(searchText);
123
- this.userOptions = [...this.userOptions, newUser];
124
- this.selectedUsers = [...this.selectedUsers, newUser];
125
- if (RivViews.isSharedView(this.editedView)) {
126
- this.editedView.sharedUsers = RivViews.toSharedUsers(this.selectedUsers);
79
+ getSharedUsers(view) {
80
+ if (RivViews.isSharedView(view)) {
81
+ return view.sharedUsers;
127
82
  }
128
- this.cdr.markForCheck();
83
+ return EditViewComponent.NO_SHARED_USERS;
129
84
  }
130
85
  }
86
+ // Stable empty-array reference for the non-shared branch, so this getter
87
+ // doesn't hand the permission picker a fresh [] on every change-detection
88
+ // cycle (which would churn its @Input and trigger needless work).
89
+ EditViewComponent.NO_SHARED_USERS = [];
131
90
  EditViewComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: EditViewComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
132
- EditViewComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: EditViewComponent, selector: "riv-edit-view", inputs: { anchor: "anchor", autoSelectName: "autoSelectName", view: "view", userSource: "userSource", userSelectMode: "userSelectMode", onAddUser: "onAddUser", newTooltip: "newTooltip", mode: "mode" }, outputs: { save: "save", delete: "delete", close: "close" }, usesOnChanges: true, ngImport: i0, template: "<ng-container *ngIf=\"editedView; let ev\">\n <riv-callout\n *riv-overlay\n [anchor]=\"anchor ?? null\"\n [isModal]=\"true\"\n [showCaret]=\"false\"\n [theme]=\"'light'\"\n [preferredPosition]=\"'bottom-right'\"\n [fallbackDirection]=\"'clockwise'\"\n (close)=\"close.emit()\"\n >\n <div class=\"edit-view\">\n <div class=\"name-input\">\n <span class=\"name-label\">Name * </span>\n <riv-text-field\n [autoFocus]=\"autoSelectName ? 'select' : false\"\n [value]=\"ev.title ?? ''\"\n (valueChange)=\"titleChange($event)\"\n ></riv-text-field>\n </div>\n\n <hr class=\"divider\" />\n\n <div class=\"permissions\">\n <div class=\"permission-label\">View permissions</div>\n\n <div class=\"permission-options\">\n <button\n *ngFor=\"let option of permissionOptions\"\n class=\"permission-option\"\n [class.current]=\"ev.permission === option.value\"\n type=\"button\"\n [attr.aria-checked]=\"ev.permission === option.value\"\n [attr.aria-label]=\"option.title + ' permission'\"\n (click)=\"permissionChange(option.value)\"\n >\n <div class=\"option-content\">\n <div class=\"option-title\">\n <span>{{ option.title }}</span>\n <span class=\"option-description\">{{ option.subtitle }}</span>\n </div>\n <riv-icon\n *ngIf=\"ev.permission === option.value\"\n class=\"permission-indicator\"\n [name]=\"'Check'\"\n [size]=\"16\"\n ></riv-icon>\n </div>\n <riv-select\n *ngIf=\"\n ev.permission === 'shared' &&\n option.value === 'shared' &&\n userSelectMode === 'select' &&\n userSelectManager\n \"\n [label]=\"'Users with access'\"\n [manager]=\"userSelectManager\"\n ></riv-select>\n <riv-search-select\n *ngIf=\"\n ev.permission === 'shared' &&\n option.value === 'shared' &&\n userSelectMode === 'search-select'\n \"\n (click)=\"$event.stopPropagation()\"\n [label]=\"'Users with access'\"\n [options]=\"userOptions\"\n [selected]=\"selectedUsers\"\n [placeholder]=\"'Search users'\"\n [addNewLabel]=\"'Add'\"\n [newTooltip]=\"newTooltip\"\n (selectedChange)=\"onSelectedUsersChange($event)\"\n (addNew)=\"handleAddUser($event)\"\n ></riv-search-select>\n </button>\n </div>\n </div>\n\n <hr class=\"divider\" />\n\n <div class=\"actions\">\n <button\n rivButton\n [variant]=\"'ghost'\"\n [icon]=\"'Trash2'\"\n (click)=\"delete.emit(ev); close.emit()\"\n *ngIf=\"canEdit()\"\n >\n Delete\n </button>\n\n <div class=\"actions-spacer\"></div>\n\n <div class=\"primary-actions\">\n <button rivButton [variant]=\"'ghost'\" (click)=\"close.emit()\">\n Cancel\n </button>\n <button\n rivButton\n [variant]=\"'primary'\"\n [disabled]=\"canEdit() && isClean()\"\n (click)=\"save.emit(ev); close.emit()\"\n >\n Save\n </button>\n </div>\n </div>\n </div>\n </riv-callout>\n</ng-container>\n", styles: [".edit-view{padding:var(--size-large);display:flex;flex-direction:column;gap:var(--size-large);width:calc(var(--base-grid-size) * 104);max-width:50vw;max-height:80vh;overflow-y:auto}.divider{height:var(--border-width);background-color:var(--border-light);border:0;width:100%}.permissions{display:flex;flex-direction:column;gap:var(--size-medium)}.permission-options{display:flex;flex-direction:column}.permission-label,.name-label{font:var(--title-02)}.name-input{display:flex;flex-direction:column;gap:var(--size-small)}.permission-option{display:flex;flex-direction:column;gap:var(--size-small);padding:var(--size-small) var(--size-medium);border-radius:var(--border-radius-large);cursor:pointer;text-align:left}.permission-option:hover{background-color:var(--surface-light-1)}.permission-option:active,.permission-option.current{background-color:var(--surface-light-2)}.option-content{display:flex;justify-content:space-between;align-items:center}.option-title{font:var(--body-medium);display:flex;flex-direction:column;align-items:flex-start}.option-description{font:var(--body-medium);color:var(--type-light-low-contrast)}.permission-indicator{color:var(--type-light-link)}.actions{display:flex;justify-content:space-between;align-items:center}.actions-spacer{flex-grow:1}.primary-actions{display:flex;align-items:center;gap:var(--size-small)}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.ButtonComponent, selector: "[rivButton]", inputs: ["locked", "disabled", "loading", "full", "size", "variant", "icon", "iconPosition", "current"] }, { kind: "component", type: i3.CalloutComponent, selector: "riv-callout", inputs: ["anchor", "isModal", "preferredPosition", "allowedPositions", "fallbackDirection", "showCaret", "theme"], outputs: ["close"] }, { kind: "component", type: i4.IconComponent, selector: "riv-icon", inputs: ["name", "fillColor", "size", "customSize", "strokeWidth"] }, { kind: "directive", type: i5.OverlayDirective, selector: "[riv-overlay]" }, { kind: "component", type: i6.SearchSelectComponent, selector: "riv-search-select", inputs: ["options", "selected", "placeholder", "addNewLabel", "newTooltip", "size", "disabled", "label", "help", "required", "state", "errorMessage", "optionTemplate", "chipTemplate"], outputs: ["selectedChange", "addNew"] }, { kind: "component", type: i7.SelectComponent, selector: "riv-select", inputs: ["manager", "size", "disabled", "locked", "allowedCalloutPositions", "preferredCalloutPosition"] }, { kind: "component", type: i8.TextFieldComponent, selector: "riv-text-field", inputs: ["disabled", "readonly", "placeholder", "casing", "type", "size", "autoFocus", "name", "minLength", "maxLength", "value"], outputs: ["valueChange", "blur"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
91
+ EditViewComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: EditViewComponent, selector: "riv-edit-view", inputs: { anchor: "anchor", autoSelectName: "autoSelectName", view: "view", userSource: "userSource", userSelectMode: "userSelectMode", onAddUser: "onAddUser", newTooltip: "newTooltip", mode: "mode" }, outputs: { save: "save", delete: "delete", close: "close" }, usesOnChanges: true, ngImport: i0, template: "<ng-container *ngIf=\"editedView; let ev\">\n <riv-callout\n *riv-overlay\n [anchor]=\"anchor ?? null\"\n [isModal]=\"true\"\n [showCaret]=\"false\"\n [theme]=\"'light'\"\n [preferredPosition]=\"'bottom-right'\"\n [fallbackDirection]=\"'clockwise'\"\n (close)=\"close.emit()\"\n >\n <div class=\"edit-view\">\n <div class=\"name-input\">\n <span class=\"name-label\">Name * </span>\n <riv-text-field\n [autoFocus]=\"autoSelectName ? 'select' : false\"\n [value]=\"ev.title ?? ''\"\n (valueChange)=\"titleChange($event)\"\n ></riv-text-field>\n </div>\n\n <hr class=\"divider\" />\n\n <riv-permission-picker\n [permission]=\"ev.permission\"\n [sharedUsers]=\"getSharedUsers(ev)\"\n [userSelectMode]=\"userSelectMode\"\n [userSource]=\"userSource\"\n [onAddUser]=\"onAddUser\"\n [newTooltip]=\"newTooltip\"\n (permissionChange)=\"onPermissionChange($event)\"\n (sharedUsersChange)=\"onSharedUsersChange($event)\"\n ></riv-permission-picker>\n\n <hr class=\"divider\" />\n\n <div class=\"actions\">\n <button\n rivButton\n [variant]=\"'ghost'\"\n [icon]=\"'Trash2'\"\n (click)=\"delete.emit(ev); close.emit()\"\n *ngIf=\"canEdit()\"\n >\n Delete\n </button>\n\n <div class=\"actions-spacer\"></div>\n\n <div class=\"primary-actions\">\n <button rivButton [variant]=\"'ghost'\" (click)=\"close.emit()\">\n Cancel\n </button>\n <button\n rivButton\n [variant]=\"'primary'\"\n [disabled]=\"canEdit() && isClean()\"\n (click)=\"save.emit(ev); close.emit()\"\n >\n Save\n </button>\n </div>\n </div>\n </div>\n </riv-callout>\n</ng-container>\n", styles: [".edit-view{padding:var(--size-large);display:flex;flex-direction:column;gap:var(--size-large);width:calc(var(--base-grid-size) * 104);max-width:50vw;max-height:80vh;overflow-y:auto}.divider{height:var(--border-width);background-color:var(--border-light);border:0;width:100%}.name-label{font:var(--title-02)}.name-input{display:flex;flex-direction:column;gap:var(--size-small)}.actions{display:flex;justify-content:space-between;align-items:center}.actions-spacer{flex-grow:1}.primary-actions{display:flex;align-items:center;gap:var(--size-small)}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.ButtonComponent, selector: "[rivButton]", inputs: ["locked", "disabled", "loading", "full", "size", "variant", "icon", "iconPosition", "current"] }, { kind: "component", type: i3.CalloutComponent, selector: "riv-callout", inputs: ["anchor", "isModal", "preferredPosition", "allowedPositions", "fallbackDirection", "showCaret", "theme"], outputs: ["close"] }, { kind: "directive", type: i4.OverlayDirective, selector: "[riv-overlay]" }, { kind: "component", type: i5.PermissionPickerComponent, selector: "riv-permission-picker", inputs: ["permission", "sharedUsers", "userSelectMode", "userSource", "onAddUser", "newTooltip", "disabledPermissions"], outputs: ["permissionChange", "sharedUsersChange"] }, { kind: "component", type: i6.TextFieldComponent, selector: "riv-text-field", inputs: ["disabled", "readonly", "placeholder", "casing", "type", "size", "autoFocus", "name", "minLength", "maxLength", "value"], outputs: ["valueChange", "blur"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
133
92
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: EditViewComponent, decorators: [{
134
93
  type: Component,
135
- args: [{ selector: 'riv-edit-view', changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-container *ngIf=\"editedView; let ev\">\n <riv-callout\n *riv-overlay\n [anchor]=\"anchor ?? null\"\n [isModal]=\"true\"\n [showCaret]=\"false\"\n [theme]=\"'light'\"\n [preferredPosition]=\"'bottom-right'\"\n [fallbackDirection]=\"'clockwise'\"\n (close)=\"close.emit()\"\n >\n <div class=\"edit-view\">\n <div class=\"name-input\">\n <span class=\"name-label\">Name * </span>\n <riv-text-field\n [autoFocus]=\"autoSelectName ? 'select' : false\"\n [value]=\"ev.title ?? ''\"\n (valueChange)=\"titleChange($event)\"\n ></riv-text-field>\n </div>\n\n <hr class=\"divider\" />\n\n <div class=\"permissions\">\n <div class=\"permission-label\">View permissions</div>\n\n <div class=\"permission-options\">\n <button\n *ngFor=\"let option of permissionOptions\"\n class=\"permission-option\"\n [class.current]=\"ev.permission === option.value\"\n type=\"button\"\n [attr.aria-checked]=\"ev.permission === option.value\"\n [attr.aria-label]=\"option.title + ' permission'\"\n (click)=\"permissionChange(option.value)\"\n >\n <div class=\"option-content\">\n <div class=\"option-title\">\n <span>{{ option.title }}</span>\n <span class=\"option-description\">{{ option.subtitle }}</span>\n </div>\n <riv-icon\n *ngIf=\"ev.permission === option.value\"\n class=\"permission-indicator\"\n [name]=\"'Check'\"\n [size]=\"16\"\n ></riv-icon>\n </div>\n <riv-select\n *ngIf=\"\n ev.permission === 'shared' &&\n option.value === 'shared' &&\n userSelectMode === 'select' &&\n userSelectManager\n \"\n [label]=\"'Users with access'\"\n [manager]=\"userSelectManager\"\n ></riv-select>\n <riv-search-select\n *ngIf=\"\n ev.permission === 'shared' &&\n option.value === 'shared' &&\n userSelectMode === 'search-select'\n \"\n (click)=\"$event.stopPropagation()\"\n [label]=\"'Users with access'\"\n [options]=\"userOptions\"\n [selected]=\"selectedUsers\"\n [placeholder]=\"'Search users'\"\n [addNewLabel]=\"'Add'\"\n [newTooltip]=\"newTooltip\"\n (selectedChange)=\"onSelectedUsersChange($event)\"\n (addNew)=\"handleAddUser($event)\"\n ></riv-search-select>\n </button>\n </div>\n </div>\n\n <hr class=\"divider\" />\n\n <div class=\"actions\">\n <button\n rivButton\n [variant]=\"'ghost'\"\n [icon]=\"'Trash2'\"\n (click)=\"delete.emit(ev); close.emit()\"\n *ngIf=\"canEdit()\"\n >\n Delete\n </button>\n\n <div class=\"actions-spacer\"></div>\n\n <div class=\"primary-actions\">\n <button rivButton [variant]=\"'ghost'\" (click)=\"close.emit()\">\n Cancel\n </button>\n <button\n rivButton\n [variant]=\"'primary'\"\n [disabled]=\"canEdit() && isClean()\"\n (click)=\"save.emit(ev); close.emit()\"\n >\n Save\n </button>\n </div>\n </div>\n </div>\n </riv-callout>\n</ng-container>\n", styles: [".edit-view{padding:var(--size-large);display:flex;flex-direction:column;gap:var(--size-large);width:calc(var(--base-grid-size) * 104);max-width:50vw;max-height:80vh;overflow-y:auto}.divider{height:var(--border-width);background-color:var(--border-light);border:0;width:100%}.permissions{display:flex;flex-direction:column;gap:var(--size-medium)}.permission-options{display:flex;flex-direction:column}.permission-label,.name-label{font:var(--title-02)}.name-input{display:flex;flex-direction:column;gap:var(--size-small)}.permission-option{display:flex;flex-direction:column;gap:var(--size-small);padding:var(--size-small) var(--size-medium);border-radius:var(--border-radius-large);cursor:pointer;text-align:left}.permission-option:hover{background-color:var(--surface-light-1)}.permission-option:active,.permission-option.current{background-color:var(--surface-light-2)}.option-content{display:flex;justify-content:space-between;align-items:center}.option-title{font:var(--body-medium);display:flex;flex-direction:column;align-items:flex-start}.option-description{font:var(--body-medium);color:var(--type-light-low-contrast)}.permission-indicator{color:var(--type-light-link)}.actions{display:flex;justify-content:space-between;align-items:center}.actions-spacer{flex-grow:1}.primary-actions{display:flex;align-items:center;gap:var(--size-small)}\n"] }]
94
+ args: [{ selector: 'riv-edit-view', changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-container *ngIf=\"editedView; let ev\">\n <riv-callout\n *riv-overlay\n [anchor]=\"anchor ?? null\"\n [isModal]=\"true\"\n [showCaret]=\"false\"\n [theme]=\"'light'\"\n [preferredPosition]=\"'bottom-right'\"\n [fallbackDirection]=\"'clockwise'\"\n (close)=\"close.emit()\"\n >\n <div class=\"edit-view\">\n <div class=\"name-input\">\n <span class=\"name-label\">Name * </span>\n <riv-text-field\n [autoFocus]=\"autoSelectName ? 'select' : false\"\n [value]=\"ev.title ?? ''\"\n (valueChange)=\"titleChange($event)\"\n ></riv-text-field>\n </div>\n\n <hr class=\"divider\" />\n\n <riv-permission-picker\n [permission]=\"ev.permission\"\n [sharedUsers]=\"getSharedUsers(ev)\"\n [userSelectMode]=\"userSelectMode\"\n [userSource]=\"userSource\"\n [onAddUser]=\"onAddUser\"\n [newTooltip]=\"newTooltip\"\n (permissionChange)=\"onPermissionChange($event)\"\n (sharedUsersChange)=\"onSharedUsersChange($event)\"\n ></riv-permission-picker>\n\n <hr class=\"divider\" />\n\n <div class=\"actions\">\n <button\n rivButton\n [variant]=\"'ghost'\"\n [icon]=\"'Trash2'\"\n (click)=\"delete.emit(ev); close.emit()\"\n *ngIf=\"canEdit()\"\n >\n Delete\n </button>\n\n <div class=\"actions-spacer\"></div>\n\n <div class=\"primary-actions\">\n <button rivButton [variant]=\"'ghost'\" (click)=\"close.emit()\">\n Cancel\n </button>\n <button\n rivButton\n [variant]=\"'primary'\"\n [disabled]=\"canEdit() && isClean()\"\n (click)=\"save.emit(ev); close.emit()\"\n >\n Save\n </button>\n </div>\n </div>\n </div>\n </riv-callout>\n</ng-container>\n", styles: [".edit-view{padding:var(--size-large);display:flex;flex-direction:column;gap:var(--size-large);width:calc(var(--base-grid-size) * 104);max-width:50vw;max-height:80vh;overflow-y:auto}.divider{height:var(--border-width);background-color:var(--border-light);border:0;width:100%}.name-label{font:var(--title-02)}.name-input{display:flex;flex-direction:column;gap:var(--size-small)}.actions{display:flex;justify-content:space-between;align-items:center}.actions-spacer{flex-grow:1}.primary-actions{display:flex;align-items:center;gap:var(--size-small)}\n"] }]
136
95
  }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }]; }, propDecorators: { anchor: [{
137
96
  type: Input
138
97
  }], autoSelectName: [{
@@ -156,4 +115,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
156
115
  }], close: [{
157
116
  type: Output
158
117
  }] } });
159
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWRpdC12aWV3LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Jpdi9zcmMvbGliL25hdmlnYXRpb24vdmlld3MvZWRpdC12aWV3L2VkaXQtdmlldy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9yaXYvc3JjL2xpYi9uYXZpZ2F0aW9uL3ZpZXdzL2VkaXQtdmlldy9lZGl0LXZpZXcuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLHVCQUF1QixFQUV2QixTQUFTLEVBQ1QsWUFBWSxFQUNaLEtBQUssRUFJTCxNQUFNLEdBRVAsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFFNUMsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ3hELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxVQUFVLENBQUM7Ozs7Ozs7Ozs7QUFFcEMsTUFBTSxNQUFNLEdBQTRDO0lBQ3RELE9BQU8sRUFBRSxTQUFTO0lBQ2xCLE1BQU0sRUFBRSxRQUFRO0lBQ2hCLE1BQU0sRUFBRSxRQUFRO0NBQ2pCLENBQUM7QUFFRixNQUFNLFNBQVMsR0FBNEM7SUFDekQsT0FBTyxFQUFFLHFCQUFxQjtJQUM5QixNQUFNLEVBQUUscUJBQXFCO0lBQzdCLE1BQU0sRUFBRSxtQ0FBbUM7Q0FDNUMsQ0FBQztBQVFGLE1BQU0sT0FBTyxpQkFBaUI7SUE4RjVCLFlBQW9CLEdBQXNCO1FBQXRCLFFBQUcsR0FBSCxHQUFHLENBQW1CO1FBckYxQyxtQkFBYyxHQUFZLEtBQUssQ0FBQztRQVdoQyxtQkFBYyxHQUE0QixRQUFRLENBQUM7UUFTbkQsU0FBSSxHQUFzQixNQUFNLENBQUM7UUFHakMsU0FBSSxHQUFHLElBQUksWUFBWSxFQUEyQixDQUFDO1FB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eSxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgRXZlbnRFbWl0dGVyLFxuICBJbnB1dCxcbiAgT25DaGFuZ2VzLFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgT3V0cHV0LFxuICBTaW1wbGVDaGFuZ2VzLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGNsb25lRGVlcCwgaXNFcXVhbCB9IGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IFJpdlNlbGVjdCB9IGZyb20gJy4uLy4uLy4uL2lucHV0L3NlbGVjdC9zdGF0ZSc7XG5pbXBvcnQgeyBSaXZWaWV3cyB9IGZyb20gJy4uL3N0YXRlJztcblxuY29uc3QgdGl0bGVzOiBSZWNvcmQ8Uml2Vmlld3MuVmlld1Blcm1pc3Npb24sIHN0cmluZz4gPSB7XG4gIHByaXZhdGU6ICdQcml2YXRlJyxcbiAgcHVibGljOiAnUHVibGljJyxcbiAgc2hhcmVkOiAnU2hhcmVkJyxcbn07XG5cbmNvbnN0IHN1YnRpdGxlczogUmVjb3JkPFJpdlZpZXdzLlZpZXdQZXJtaXNzaW9uLCBzdHJpbmc+ID0ge1xuICBwcml2YXRlOiAnT25seSB2aXNpYmxlIHRvIHlvdScsXG4gIHB1YmxpYzogJ1Zpc2libGUgdG8gZXZlcnlvbmUnLFxuICBzaGFyZWQ6ICdPbmx5IHZpc2libGUgdG8gdGhvc2Ugd2l0aCBhY2Nlc3MnLFxufTtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAncml2LWVkaXQtdmlldycsXG4gIHRlbXBsYXRlVXJsOiAnLi9lZGl0LXZpZXcuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9lZGl0LXZpZXcuY29tcG9uZW50LmNzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgRWRpdFZpZXdDb21wb25lbnQ8XG4gIFUgZXh0ZW5kcyBSaXZWaWV3cy5Vc2VyLFxuICBWIGV4dGVuZHMgUml2Vmlld3MuVmlldzxVPixcbj4gaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcywgT25EZXN0cm95XG57XG4gIEBJbnB1dCgpXG4gIGFuY2hvcj86IEVsZW1lbnQgfCBET01SZWN0IHwgbnVsbDtcblxuICBASW5wdXQoKVxuICBhdXRvU2VsZWN0TmFtZTogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIEBJbnB1dCgpXG4gIHZpZXc/OiBSaXZWaWV3cy5GdWxsVmlldzxVLCBWPjtcblxuICBlZGl0ZWRWaWV3PzogUml2Vmlld3MuRnVsbFZpZXc8VSwgVj47XG5cbiAgQElucHV0KClcbiAgdXNlclNvdXJjZT86IFJpdlZpZXdzLlVzZXJTb3VyY2U8VT47XG5cbiAgQElucHV0KClcbiAgdXNlclNlbGVjdE1vZGU6IFJpdlZpZXdzLlVzZXJTZWxlY3RNb2RlID0gJ3NlbGVjdCc7XG5cbiAgQElucHV0KClcbiAgb25BZGRVc2VyPzogUml2Vmlld3MuT25BZGRVc2VyPFU+O1xuXG4gIEBJbnB1dCgpXG4gIG5ld1Rvb2x0aXA/OiBzdHJpbmc7XG5cbiAgQElucHV0KClcbiAgbW9kZTogJ2VkaXQnIHwgJ2NyZWF0ZScgPSAnZWRpdCc7XG5cbiAgQE91dHB1dCgpXG4gIHNhdmUgPSBuZXcgRXZlbnRFbWl0dGVyPFJpdlZpZXdzLkZ1bGxWaWV3PFUsIFY+PigpO1xuXG4gIEBPdXRwdXQoKVxuICBkZWxldGUgPSBuZXcgRXZlbnRFbWl0dGVyPFJpdlZpZXdzLkZ1bGxWaWV3PFUsIFY+PigpO1xuXG4gIEBPdXRwdXQoKVxuICBjbG9zZSA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcblxuICByZWFkb25seSBwZXJtaXNzaW9uT3B0aW9ucyA9IFJpdlZpZXdzLlZpZXdQZXJtaXNzaW9ucy5tYXAocGVybWlzc2lvbiA9PiAoe1xuICAgIHZhbHVlOiBwZXJtaXNzaW9uLFxuICAgIHRpdGxlOiB0aXRsZXNbcGVybWlzc2lvbl0sXG4gICAgc3VidGl0bGU6IHN1YnRpdGxlc1twZXJtaXNzaW9uXSxcbiAgfSkpO1xuXG4gIHByaXZhdGUgcmVzZXRWaWV3KCkge1xuICAgIHRoaXMuZWRpdGVkVmlldyA9IGNsb25lRGVlcCh0aGlzLnZpZXcpO1xuICAgIHRoaXMuc2V0VXBVc2VyU2VsZWN0TWFuYWdlcigpO1xuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5yZXNldFZpZXcoKTtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBpZiAoY2hhbmdlc1sndmlldyddKSB7XG4gICAgICB0aGlzLnJlc2V0VmlldygpO1xuICAgIH1cbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMudGVhckRvd25Vc2VyU2VsZWN0TWFuYWdlcigpO1xuICB9XG5cbiAgY2FuRWRpdCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5tb2RlID09PSAnZWRpdCc7XG4gIH1cblxuICBpc0NsZWFuKCkge1xuICAgIHJldHVybiBpc0VxdWFsKHRoaXMuZWRpdGVkVmlldywgdGhpcy52aWV3KTtcbiAgfVxuXG4gIHRpdGxlQ2hhbmdlKHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5lZGl0ZWRWaWV3KSB0aGlzLmVkaXRlZFZpZXcudGl0bGUgPSB2YWx1ZTtcbiAgfVxuXG4gIHBlcm1pc3Npb25DaGFuZ2UodmFsdWU6IFJpdlZpZXdzLlZpZXdQZXJtaXNzaW9uKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZWRpdGVkVmlldykgdGhpcy5lZGl0ZWRWaWV3LnBlcm1pc3Npb24gPSB2YWx1ZTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0U2hhcmVkVXNlcnModmlldz86IFJpdlZpZXdzLkZ1bGxWaWV3PFUsIFY+KTogVVtdIHtcbiAgICBpZiAoUml2Vmlld3MuaXNTaGFyZWRWaWV3KHZpZXcpKSB7XG4gICAgICByZXR1cm4gdmlldy5zaGFyZWRVc2VycztcbiAgICB9XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgdXNlclNlbGVjdE1hbmFnZXI/OiBSaXZTZWxlY3QuTWFuYWdlcjxVPjtcbiAgcHJpdmF0ZSB1c2VyU2VsZWN0U3Vic2NyaXB0aW9uPzogU3Vic2NyaXB0aW9uO1xuXG4gIHVzZXJPcHRpb25zOiBSaXZWaWV3cy5TZWFyY2hTZWxlY3RVc2VyPFU+W10gPSBbXTtcbiAgc2VsZWN0ZWRVc2VyczogUml2Vmlld3MuU2VhcmNoU2VsZWN0VXNlcjxVPltdID0gW107XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmKSB7fVxuXG4gIHByaXZhdGUgdGVhckRvd25Vc2VyU2VsZWN0TWFuYWdlcigpOiB2b2lkIHtcbiAgICB0aGlzLnVzZXJTZWxlY3RTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHNldFVwVXNlclNlbGVjdE1hbmFnZXIoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy50ZWFyRG93blVzZXJTZWxlY3RNYW5hZ2VyKCk7XG5cbiAgICBpZiAodGhpcy51c2VyU2VsZWN0TW9kZSA9PT0gJ3NlYXJjaC1zZWxlY3QnKSB7XG4gICAgICBjb25zdCB1c2VycyA9IGF3YWl0ICh0aGlzLnVzZXJTb3VyY2UgfHwgKCgpID0+IFtdKSkoKTtcbiAgICAgIHRoaXMudXNlck9wdGlvbnMgPSB1c2Vycy5tYXAodSA9PiAoe1xuICAgICAgICAuLi51LFxuICAgICAgICBuZXc6ICh1IGFzIFJpdlZpZXdzLlNlYXJjaFNlbGVjdFVzZXI8VT4pLm5ldyA/PyBmYWxzZSxcbiAgICAgIH0pKTtcbiAgICAgIHRoaXMuc2VsZWN0ZWRVc2VycyA9IHRoaXMuZ2V0U2hhcmVkVXNlcnModGhpcy5lZGl0ZWRWaWV3KS5tYXAodSA9PiAoe1xuICAgICAgICAuLi51LFxuICAgICAgICBuZXc6ICh1IGFzIFJpdlZpZXdzLlNlYXJjaFNlbGVjdFVzZXI8VT4pLm5ldyA/PyBmYWxzZSxcbiAgICAgIH0pKTtcbiAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnVzZXJTZWxlY3RNYW5hZ2VyID0gUml2U2VsZWN0LmNyZWF0ZUluTWVtb3J5TWFuYWdlcihcbiAgICAgICAgYXN5bmMgKCkgPT4gW3sgb3B0aW9uczogYXdhaXQgKHRoaXMudXNlclNvdXJjZSB8fCAoKCkgPT4gW10pKSgpIH1dLFxuICAgICAgICB7XG4gICAgICAgICAgYWxsb3dTZWFyY2g6IHRydWUsXG4gICAgICAgICAgYWxsb3dTZWxlY3RBbGw6IHRydWUsXG4gICAgICAgICAgYWxsb3dNdWx0aVNlbGVjdDogdHJ1ZSxcbiAgICAgICAgICBkaXNwbGF5TGltaXQ6IDUwMCxcbiAgICAgICAgICBpbml0aWFsU3RhdGU6IHtcbiAgICAgICAgICAgIHNlbGVjdGlvbjoge1xuICAgICAgICAgICAgICBzZWxlY3RlZDogbmV3IFJpdlNlbGVjdC5PcHRpb25TZXQoXG4gICAgICAgICAgICAgICAgdGhpcy5nZXRTaGFyZWRVc2Vycyh0aGlzLmVkaXRlZFZpZXcpLFxuICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgKTtcbiAgICAgIHRoaXMudXNlclNlbGVjdFN1YnNjcmlwdGlvbiA9IHRoaXMudXNlclNlbGVjdE1hbmFnZXIuc3RhdGUuc3Vic2NyaWJlKFxuICAgICAgICBzdGF0ZSA9PiB7XG4gICAgICAgICAgaWYgKFJpdlZpZXdzLmlzU2hhcmVkVmlldyh0aGlzLmVkaXRlZFZpZXcpKSB7XG4gICAgICAgICAgICB0aGlzLmVkaXRlZFZpZXcuc2hhcmVkVXNlcnMgPSBbLi4uc3RhdGUuc2VsZWN0aW9uLnNlbGVjdGVkXSBhcyBVW107XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgKTtcbiAgICAgIHRoaXMudXNlclNlbGVjdE1hbmFnZXIuYWN0aW9ucy5uZXh0KHsgdHlwZTogJ2xvYWQnIH0pO1xuICAgIH1cbiAgfVxuXG4gIG9uU2VsZWN0ZWRVc2Vyc0NoYW5nZSh1c2VyczogUml2Vmlld3MuU2VhcmNoU2VsZWN0VXNlcjxVPltdKTogdm9pZCB7XG4gICAgdGhpcy5zZWxlY3RlZFVzZXJzID0gdXNlcnM7XG4gICAgaWYgKFJpdlZpZXdzLmlzU2hhcmVkVmlldyh0aGlzLmVkaXRlZFZpZXcpKSB7XG4gICAgICB0aGlzLmVkaXRlZFZpZXcuc2hhcmVkVXNlcnMgPSBSaXZWaWV3cy50b1NoYXJlZFVzZXJzKHVzZXJzKTtcbiAgICB9XG4gIH1cblxuICBoYW5kbGVBZGRVc2VyKHNlYXJjaFRleHQ6IHN0cmluZyk6IHZvaWQge1xuICAgIGlmICghdGhpcy5vbkFkZFVzZXIpIHJldHVybjtcbiAgICBjb25zdCBuZXdVc2VyID0gdGhpcy5vbkFkZFVzZXIoc2VhcmNoVGV4dCk7XG4gICAgdGhpcy51c2VyT3B0aW9ucyA9IFsuLi50aGlzLnVzZXJPcHRpb25zLCBuZXdVc2VyXTtcbiAgICB0aGlzLnNlbGVjdGVkVXNlcnMgPSBbLi4udGhpcy5zZWxlY3RlZFVzZXJzLCBuZXdVc2VyXTtcbiAgICBpZiAoUml2Vmlld3MuaXNTaGFyZWRWaWV3KHRoaXMuZWRpdGVkVmlldykpIHtcbiAgICAgIHRoaXMuZWRpdGVkVmlldy5zaGFyZWRVc2VycyA9IFJpdlZpZXdzLnRvU2hhcmVkVXNlcnModGhpcy5zZWxlY3RlZFVzZXJzKTtcbiAgICB9XG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cbn1cbiIsIjxuZy1jb250YWluZXIgKm5nSWY9XCJlZGl0ZWRWaWV3OyBsZXQgZXZcIj5cbiAgPHJpdi1jYWxsb3V0XG4gICAgKnJpdi1vdmVybGF5XG4gICAgW2FuY2hvcl09XCJhbmNob3IgPz8gbnVsbFwiXG4gICAgW2lzTW9kYWxdPVwidHJ1ZVwiXG4gICAgW3Nob3dDYXJldF09XCJmYWxzZVwiXG4gICAgW3RoZW1lXT1cIidsaWdodCdcIlxuICAgIFtwcmVmZXJyZWRQb3NpdGlvbl09XCInYm90dG9tLXJpZ2h0J1wiXG4gICAgW2ZhbGxiYWNrRGlyZWN0aW9uXT1cIidjbG9ja3dpc2UnXCJcbiAgICAoY2xvc2UpPVwiY2xvc2UuZW1pdCgpXCJcbiAgPlxuICAgIDxkaXYgY2xhc3M9XCJlZGl0LXZpZXdcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJuYW1lLWlucHV0XCI+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwibmFtZS1sYWJlbFwiPk5hbWUgKiA8L3NwYW4+XG4gICAgICAgIDxyaXYtdGV4dC1maWVsZFxuICAgICAgICAgIFthdXRvRm9jdXNdPVwiYXV0b1NlbGVjdE5hbWUgPyAnc2VsZWN0JyA6IGZhbHNlXCJcbiAgICAgICAgICBbdmFsdWVdPVwiZXYudGl0bGUgPz8gJydcIlxuICAgICAgICAgICh2YWx1ZUNoYW5nZSk9XCJ0aXRsZUNoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgPjwvcml2LXRleHQtZmllbGQ+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGhyIGNsYXNzPVwiZGl2aWRlclwiIC8+XG5cbiAgICAgIDxkaXYgY2xhc3M9XCJwZXJtaXNzaW9uc1wiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwicGVybWlzc2lvbi1sYWJlbFwiPlZpZXcgcGVybWlzc2lvbnM8L2Rpdj5cblxuICAgICAgICA8ZGl2IGNsYXNzPVwicGVybWlzc2lvbi1vcHRpb25zXCI+XG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgKm5nRm9yPVwibGV0IG9wdGlvbiBvZiBwZXJtaXNzaW9uT3B0aW9uc1wiXG4gICAgICAgICAgICBjbGFzcz1cInBlcm1pc3Npb24tb3B0aW9uXCJcbiAgICAgICAgICAgIFtjbGFzcy5jdXJyZW50XT1cImV2LnBlcm1pc3Npb24gPT09IG9wdGlvbi52YWx1ZVwiXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtY2hlY2tlZF09XCJldi5wZXJtaXNzaW9uID09PSBvcHRpb24udmFsdWVcIlxuICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJvcHRpb24udGl0bGUgKyAnIHBlcm1pc3Npb24nXCJcbiAgICAgICAgICAgIChjbGljayk9XCJwZXJtaXNzaW9uQ2hhbmdlKG9wdGlvbi52YWx1ZSlcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJvcHRpb24tY29udGVudFwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwib3B0aW9uLXRpdGxlXCI+XG4gICAgICAgICAgICAgICAgPHNwYW4+e3sgb3B0aW9uLnRpdGxlIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwib3B0aW9uLWRlc2NyaXB0aW9uXCI+e3sgb3B0aW9uLnN1YnRpdGxlIH19PC9zcGFuPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPHJpdi1pY29uXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJldi5wZXJtaXNzaW9uID09PSBvcHRpb24udmFsdWVcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwicGVybWlzc2lvbi1pbmRpY2F0b3JcIlxuICAgICAgICAgICAgICAgIFtuYW1lXT1cIidDaGVjaydcIlxuICAgICAgICAgICAgICAgIFtzaXplXT1cIjE2XCJcbiAgICAgICAgICAgICAgPjwvcml2LWljb24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxyaXYtc2VsZWN0XG4gICAgICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICAgICAgZXYucGVybWlzc2lvbiA9PT0gJ3NoYXJlZCcgJiZcbiAgICAgICAgICAgICAgICBvcHRpb24udmFsdWUgPT09ICdzaGFyZWQnICYmXG4gICAgICAgICAgICAgICAgdXNlclNlbGVjdE1vZGUgPT09ICdzZWxlY3QnICYmXG4gICAgICAgICAgICAgICAgdXNlclNlbGVjdE1hbmFnZXJcbiAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgW2xhYmVsXT1cIidVc2VycyB3aXRoIGFjY2VzcydcIlxuICAgICAgICAgICAgICBbbWFuYWdlcl09XCJ1c2VyU2VsZWN0TWFuYWdlclwiXG4gICAgICAgICAgICA+PC9yaXYtc2VsZWN0PlxuICAgICAgICAgICAgPHJpdi1zZWFyY2gtc2VsZWN0XG4gICAgICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICAgICAgZXYucGVybWlzc2lvbiA9PT0gJ3NoYXJlZCcgJiZcbiAgICAgICAgICAgICAgICBvcHRpb24udmFsdWUgPT09ICdzaGFyZWQnICYmXG4gICAgICAgICAgICAgICAgdXNlclNlbGVjdE1vZGUgPT09ICdzZWFyY2gtc2VsZWN0J1xuICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICAgICAgICAgICAgW2xhYmVsXT1cIidVc2VycyB3aXRoIGFjY2VzcydcIlxuICAgICAgICAgICAgICBbb3B0aW9uc109XCJ1c2VyT3B0aW9uc1wiXG4gICAgICAgICAgICAgIFtzZWxlY3RlZF09XCJzZWxlY3RlZFVzZXJzXCJcbiAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidTZWFyY2ggdXNlcnMnXCJcbiAgICAgICAgICAgICAgW2FkZE5ld0xhYmVsXT1cIidBZGQnXCJcbiAgICAgICAgICAgICAgW25ld1Rvb2x0aXBdPVwibmV3VG9vbHRpcFwiXG4gICAgICAgICAgICAgIChzZWxlY3RlZENoYW5nZSk9XCJvblNlbGVjdGVkVXNlcnNDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgICAgICAgIChhZGROZXcpPVwiaGFuZGxlQWRkVXNlcigkZXZlbnQpXCJcbiAgICAgICAgICAgID48L3Jpdi1zZWFyY2gtc2VsZWN0PlxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8aHIgY2xhc3M9XCJkaXZpZGVyXCIgLz5cblxuICAgICAgPGRpdiBjbGFzcz1cImFjdGlvbnNcIj5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgIHJpdkJ1dHRvblxuICAgICAgICAgIFt2YXJpYW50XT1cIidnaG9zdCdcIlxuICAgICAgICAgIFtpY29uXT1cIidUcmFzaDInXCJcbiAgICAgICAgICAoY2xpY2spPVwiZGVsZXRlLmVtaXQoZXYpOyBjbG9zZS5lbWl0KClcIlxuICAgICAgICAgICpuZ0lmPVwiY2FuRWRpdCgpXCJcbiAgICAgICAgPlxuICAgICAgICAgIERlbGV0ZVxuICAgICAgICA8L2J1dHRvbj5cblxuICAgICAgICA8ZGl2IGNsYXNzPVwiYWN0aW9ucy1zcGFjZXJcIj48L2Rpdj5cblxuICAgICAgICA8ZGl2IGNsYXNzPVwicHJpbWFyeS1hY3Rpb25zXCI+XG4gICAgICAgICAgPGJ1dHRvbiByaXZCdXR0b24gW3ZhcmlhbnRdPVwiJ2dob3N0J1wiIChjbGljayk9XCJjbG9zZS5lbWl0KClcIj5cbiAgICAgICAgICAgIENhbmNlbFxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIHJpdkJ1dHRvblxuICAgICAgICAgICAgW3ZhcmlhbnRdPVwiJ3ByaW1hcnknXCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJjYW5FZGl0KCkgJiYgaXNDbGVhbigpXCJcbiAgICAgICAgICAgIChjbGljayk9XCJzYXZlLmVtaXQoZXYpOyBjbG9zZS5lbWl0KClcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIFNhdmVcbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9yaXYtY2FsbG91dD5cbjwvbmctY29udGFpbmVyPlxuIl19
118
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWRpdC12aWV3LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Jpdi9zcmMvbGliL25hdmlnYXRpb24vdmlld3MvZWRpdC12aWV3L2VkaXQtdmlldy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9yaXYvc3JjL2xpYi9uYXZpZ2F0aW9uL3ZpZXdzL2VkaXQtdmlldy9lZGl0LXZpZXcuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLHVCQUF1QixFQUV2QixTQUFTLEVBQ1QsWUFBWSxFQUNaLEtBQUssRUFHTCxNQUFNLEdBRVAsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFDNUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLFVBQVUsQ0FBQzs7Ozs7Ozs7QUFRcEMsTUFBTSxPQUFPLGlCQUFpQjtJQXdDNUIsWUFBNkIsR0FBc0I7UUFBdEIsUUFBRyxHQUFILEdBQUcsQ0FBbUI7UUEvQm5ELG1CQUFjLEdBQVksS0FBSyxDQUFDO1FBV2hDLG1CQUFjLEdBQTRCLFFBQVEsQ0FBQztRQVNuRCxTQUFJLEdBQXNCLE1BQU0sQ0FBQztRQUdqQyxTQUFJLEdBQUcsSUFBSSxZQUFZLEVBQTJCLENBQUM7UUFHbkQsV0FBTSxHQUFHLElBQUksWUFBWSxFQUEyQixDQUFDO1FBR3JELFVBQUssR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFDO0lBRXFCLENBQUM7SUFFL0MsU0FBUztRQUNmLElBQUksQ0FBQyxVQUFVLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN6QyxDQUFDO0lBRUQsUUFBUTtRQUNOLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztJQUNuQixDQUFDO0lBRUQsV0FBVyxDQUFDLE9BQXNCO1FBQ2hD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bmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIEV2ZW50RW1pdHRlcixcbiAgSW5wdXQsXG4gIE9uQ2hhbmdlcyxcbiAgT25Jbml0LFxuICBPdXRwdXQsXG4gIFNpbXBsZUNoYW5nZXMsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgY2xvbmVEZWVwLCBpc0VxdWFsIH0gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IFJpdlZpZXdzIH0gZnJvbSAnLi4vc3RhdGUnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdyaXYtZWRpdC12aWV3JyxcbiAgdGVtcGxhdGVVcmw6ICcuL2VkaXQtdmlldy5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2VkaXQtdmlldy5jb21wb25lbnQuY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBFZGl0Vmlld0NvbXBvbmVudDxcbiAgVSBleHRlbmRzIFJpdlZpZXdzLlVzZXIsXG4gIFYgZXh0ZW5kcyBSaXZWaWV3cy5WaWV3PFU+LFxuPiBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzXG57XG4gIEBJbnB1dCgpXG4gIGFuY2hvcj86IEVsZW1lbnQgfCBET01SZWN0IHwgbnVsbDtcblxuICBASW5wdXQoKVxuICBhdXRvU2VsZWN0TmFtZTogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIEBJbnB1dCgpXG4gIHZpZXc/OiBSaXZWaWV3cy5GdWxsVmlldzxVLCBWPjtcblxuICBlZGl0ZWRWaWV3PzogUml2Vmlld3MuRnVsbFZpZXc8VSwgVj47XG5cbiAgQElucHV0KClcbiAgdXNlclNvdXJjZT86IFJpdlZpZXdzLlVzZXJTb3VyY2U8VT47XG5cbiAgQElucHV0KClcbiAgdXNlclNlbGVjdE1vZGU6IFJpdlZpZXdzLlVzZXJTZWxlY3RNb2RlID0gJ3NlbGVjdCc7XG5cbiAgQElucHV0KClcbiAgb25BZGRVc2VyPzogUml2Vmlld3MuT25BZGRVc2VyPFU+O1xuXG4gIEBJbnB1dCgpXG4gIG5ld1Rvb2x0aXA/OiBzdHJpbmc7XG5cbiAgQElucHV0KClcbiAgbW9kZTogJ2VkaXQnIHwgJ2NyZWF0ZScgPSAnZWRpdCc7XG5cbiAgQE91dHB1dCgpXG4gIHNhdmUgPSBuZXcgRXZlbnRFbWl0dGVyPFJpdlZpZXdzLkZ1bGxWaWV3PFUsIFY+PigpO1xuXG4gIEBPdXRwdXQoKVxuICBkZWxldGUgPSBuZXcgRXZlbnRFbWl0dGVyPFJpdlZpZXdzLkZ1bGxWaWV3PFUsIFY+PigpO1xuXG4gIEBPdXRwdXQoKVxuICBjbG9zZSA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYpIHt9XG5cbiAgcHJpdmF0ZSByZXNldFZpZXcoKSB7XG4gICAgdGhpcy5lZGl0ZWRWaWV3ID0gY2xvbmVEZWVwKHRoaXMudmlldyk7XG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLnJlc2V0VmlldygpO1xuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGlmIChjaGFuZ2VzWyd2aWV3J10pIHtcbiAgICAgIHRoaXMucmVzZXRWaWV3KCk7XG4gICAgfVxuICB9XG5cbiAgY2FuRWRpdCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5tb2RlID09PSAnZWRpdCc7XG4gIH1cblxuICBpc0NsZWFuKCkge1xuICAgIHJldHVybiBpc0VxdWFsKHRoaXMuZWRpdGVkVmlldywgdGhpcy52aWV3KTtcbiAgfVxuXG4gIHRpdGxlQ2hhbmdlKHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5lZGl0ZWRWaWV3KSB0aGlzLmVkaXRlZFZpZXcudGl0bGUgPSB2YWx1ZTtcbiAgICAvLyBUaGVzZSBoYW5kbGVycyBmaXJlIGZyb20gdGhlIHBlcm1pc3Npb24gcGlja2VyIC8gdGV4dCBmaWVsZCwgd2hpY2ggcmVuZGVyXG4gICAgLy8gaW4gdGhlIG92ZXJsYXkgb3V0bGV0J3MgY2hhbmdlLWRldGVjdGlvbiBzdWJ0cmVlIOKAlCBhIGRpZmZlcmVudCBicmFuY2ggdGhhblxuICAgIC8vIHRoaXMgT25QdXNoIGNvbXBvbmVudC4gV2l0aG91dCBtYXJrRm9yQ2hlY2sgdGhlIHVwZGF0ZWQgZWRpdGVkVmlldyBuZXZlclxuICAgIC8vIGZsb3dzIGJhY2sgaW50byB0aGUgY2hpbGQgaW5wdXQgYmluZGluZ3MgKGUuZy4gdGhlIGhpZ2hsaWdodGVkIG9wdGlvbikuXG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBvblBlcm1pc3Npb25DaGFuZ2UodmFsdWU6IFJpdlZpZXdzLlZpZXdQZXJtaXNzaW9uKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmVkaXRlZFZpZXcpIHJldHVybjtcblxuICAgIGlmICh2YWx1ZSA9PT0gJ3NoYXJlZCcpIHtcbiAgICAgIGlmICghUml2Vmlld3MuaXNTaGFyZWRWaWV3KHRoaXMuZWRpdGVkVmlldykpIHtcbiAgICAgICAgdGhpcy5lZGl0ZWRWaWV3ID0ge1xuICAgICAgICAgIC4uLnRoaXMuZWRpdGVkVmlldyxcbiAgICAgICAgICBwZXJtaXNzaW9uOiAnc2hhcmVkJyxcbiAgICAgICAgICBzaGFyZWRVc2VyczogW10sXG4gICAgICAgIH0gYXMgdW5rbm93biBhcyBSaXZWaWV3cy5GdWxsVmlldzxVLCBWPjtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKFJpdlZpZXdzLmlzU2hhcmVkVmlldyh0aGlzLmVkaXRlZFZpZXcpKSB7XG4gICAgICAgIGNvbnN0IHsgc2hhcmVkVXNlcnMsIC4uLnJlc3QgfSA9IHRoaXMuZWRpdGVkVmlldztcbiAgICAgICAgdGhpcy5lZGl0ZWRWaWV3ID0ge1xuICAgICAgICAgIC4uLnJlc3QsXG4gICAgICAgICAgcGVybWlzc2lvbjogdmFsdWUsXG4gICAgICAgIH0gYXMgdW5rbm93biBhcyBSaXZWaWV3cy5GdWxsVmlldzxVLCBWPjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuZWRpdGVkVmlldy5wZXJtaXNzaW9uID0gdmFsdWU7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgb25TaGFyZWRVc2Vyc0NoYW5nZSh1c2VyczogVVtdKTogdm9pZCB7XG4gICAgaWYgKFJpdlZpZXdzLmlzU2hhcmVkVmlldyh0aGlzLmVkaXRlZFZpZXcpKSB7XG4gICAgICB0aGlzLmVkaXRlZFZpZXcuc2hhcmVkVXNlcnMgPSB1c2VycztcbiAgICB9XG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICAvLyBTdGFibGUgZW1wdHktYXJyYXkgcmVmZXJlbmNlIGZvciB0aGUgbm9uLXNoYXJlZCBicmFuY2gsIHNvIHRoaXMgZ2V0dGVyXG4gIC8vIGRvZXNuJ3QgaGFuZCB0aGUgcGVybWlzc2lvbiBwaWNrZXIgYSBmcmVzaCBbXSBvbiBldmVyeSBjaGFuZ2UtZGV0ZWN0aW9uXG4gIC8vIGN5Y2xlICh3aGljaCB3b3VsZCBjaHVybiBpdHMgQElucHV0IGFuZCB0cmlnZ2VyIG5lZWRsZXNzIHdvcmspLlxuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBOT19TSEFSRURfVVNFUlM6IFJpdlZpZXdzLlVzZXJbXSA9IFtdO1xuXG4gIGdldFNoYXJlZFVzZXJzKHZpZXc/OiBSaXZWaWV3cy5GdWxsVmlldzxVLCBWPik6IFVbXSB7XG4gICAgaWYgKFJpdlZpZXdzLmlzU2hhcmVkVmlldyh2aWV3KSkge1xuICAgICAgcmV0dXJuIHZpZXcuc2hhcmVkVXNlcnM7XG4gICAgfVxuICAgIHJldHVybiBFZGl0Vmlld0NvbXBvbmVudC5OT19TSEFSRURfVVNFUlMgYXMgVVtdO1xuICB9XG59XG4iLCI8bmctY29udGFpbmVyICpuZ0lmPVwiZWRpdGVkVmlldzsgbGV0IGV2XCI+XG4gIDxyaXYtY2FsbG91dFxuICAgICpyaXYtb3ZlcmxheVxuICAgIFthbmNob3JdPVwiYW5jaG9yID8/IG51bGxcIlxuICAgIFtpc01vZGFsXT1cInRydWVcIlxuICAgIFtzaG93Q2FyZXRdPVwiZmFsc2VcIlxuICAgIFt0aGVtZV09XCInbGlnaHQnXCJcbiAgICBbcHJlZmVycmVkUG9zaXRpb25dPVwiJ2JvdHRvbS1yaWdodCdcIlxuICAgIFtmYWxsYmFja0RpcmVjdGlvbl09XCInY2xvY2t3aXNlJ1wiXG4gICAgKGNsb3NlKT1cImNsb3NlLmVtaXQoKVwiXG4gID5cbiAgICA8ZGl2IGNsYXNzPVwiZWRpdC12aWV3XCI+XG4gICAgICA8ZGl2IGNsYXNzPVwibmFtZS1pbnB1dFwiPlxuICAgICAgICA8c3BhbiBjbGFzcz1cIm5hbWUtbGFiZWxcIj5OYW1lICogPC9zcGFuPlxuICAgICAgICA8cml2LXRleHQtZmllbGRcbiAgICAgICAgICBbYXV0b0ZvY3VzXT1cImF1dG9TZWxlY3ROYW1lID8gJ3NlbGVjdCcgOiBmYWxzZVwiXG4gICAgICAgICAgW3ZhbHVlXT1cImV2LnRpdGxlID8/ICcnXCJcbiAgICAgICAgICAodmFsdWVDaGFuZ2UpPVwidGl0bGVDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgID48L3Jpdi10ZXh0LWZpZWxkPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxociBjbGFzcz1cImRpdmlkZXJcIiAvPlxuXG4gICAgICA8cml2LXBlcm1pc3Npb24tcGlja2VyXG4gICAgICAgIFtwZXJtaXNzaW9uXT1cImV2LnBlcm1pc3Npb25cIlxuICAgICAgICBbc2hhcmVkVXNlcnNdPVwiZ2V0U2hhcmVkVXNlcnMoZXYpXCJcbiAgICAgICAgW3VzZXJTZWxlY3RNb2RlXT1cInVzZXJTZWxlY3RNb2RlXCJcbiAgICAgICAgW3VzZXJTb3VyY2VdPVwidXNlclNvdXJjZVwiXG4gICAgICAgIFtvbkFkZFVzZXJdPVwib25BZGRVc2VyXCJcbiAgICAgICAgW25ld1Rvb2x0aXBdPVwibmV3VG9vbHRpcFwiXG4gICAgICAgIChwZXJtaXNzaW9uQ2hhbmdlKT1cIm9uUGVybWlzc2lvbkNoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgKHNoYXJlZFVzZXJzQ2hhbmdlKT1cIm9uU2hhcmVkVXNlcnNDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICA+PC9yaXYtcGVybWlzc2lvbi1waWNrZXI+XG5cbiAgICAgIDxociBjbGFzcz1cImRpdmlkZXJcIiAvPlxuXG4gICAgICA8ZGl2IGNsYXNzPVwiYWN0aW9uc1wiPlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgcml2QnV0dG9uXG4gICAgICAgICAgW3ZhcmlhbnRdPVwiJ2dob3N0J1wiXG4gICAgICAgICAgW2ljb25dPVwiJ1RyYXNoMidcIlxuICAgICAgICAgIChjbGljayk9XCJkZWxldGUuZW1pdChldik7IGNsb3NlLmVtaXQoKVwiXG4gICAgICAgICAgKm5nSWY9XCJjYW5FZGl0KClcIlxuICAgICAgICA+XG4gICAgICAgICAgRGVsZXRlXG4gICAgICAgIDwvYnV0dG9uPlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJhY3Rpb25zLXNwYWNlclwiPjwvZGl2PlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJwcmltYXJ5LWFjdGlvbnNcIj5cbiAgICAgICAgICA8YnV0dG9uIHJpdkJ1dHRvbiBbdmFyaWFudF09XCInZ2hvc3QnXCIgKGNsaWNrKT1cImNsb3NlLmVtaXQoKVwiPlxuICAgICAgICAgICAgQ2FuY2VsXG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgcml2QnV0dG9uXG4gICAgICAgICAgICBbdmFyaWFudF09XCIncHJpbWFyeSdcIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cImNhbkVkaXQoKSAmJiBpc0NsZWFuKClcIlxuICAgICAgICAgICAgKGNsaWNrKT1cInNhdmUuZW1pdChldik7IGNsb3NlLmVtaXQoKVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgU2F2ZVxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L3Jpdi1jYWxsb3V0PlxuPC9uZy1jb250YWluZXI+XG4iXX0=
@@ -0,0 +1,151 @@
1
+ import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output, } from '@angular/core';
2
+ import { isEqual } from 'lodash';
3
+ import { distinctUntilChanged, map } from 'rxjs/operators';
4
+ import { RivSelect } from '../../../input/select/state';
5
+ import { RivViews } from '../state';
6
+ import * as i0 from "@angular/core";
7
+ import * as i1 from "@angular/common";
8
+ import * as i2 from "../../../icon/icon.component";
9
+ import * as i3 from "../../../input/search-select/search-select.component";
10
+ import * as i4 from "../../../input/select/select/select.component";
11
+ const titles = {
12
+ private: 'Private',
13
+ public: 'Public',
14
+ shared: 'Shared',
15
+ };
16
+ const subtitles = {
17
+ private: 'Only visible to you',
18
+ public: 'Visible to everyone',
19
+ shared: 'Only visible to those with access',
20
+ };
21
+ export class PermissionPickerComponent {
22
+ constructor(cdr) {
23
+ this.cdr = cdr;
24
+ this.permission = 'private';
25
+ this.sharedUsers = [];
26
+ this.userSelectMode = 'select';
27
+ this.disabledPermissions = [];
28
+ this.permissionChange = new EventEmitter();
29
+ this.sharedUsersChange = new EventEmitter();
30
+ this.permissionOptions = RivViews.ViewPermissions.map(permission => ({
31
+ value: permission,
32
+ title: titles[permission],
33
+ subtitle: subtitles[permission],
34
+ }));
35
+ this.userOptions = [];
36
+ this.selectedUsers = [];
37
+ }
38
+ ngOnInit() {
39
+ this.setUpUserSelectManager();
40
+ }
41
+ ngOnChanges(changes) {
42
+ // ngOnInit performs the initial setup, so ignore first-change events here.
43
+ // Rebuild only on a genuine change: a new data source, a mode switch, or a
44
+ // value-level change to the seeded selection. Comparing sharedUsers by value
45
+ // (rather than reference) is essential — the parent binds a fresh array each
46
+ // change-detection cycle, and reacting to that reference churn would rebuild
47
+ // the manager on every cycle.
48
+ const userSourceChanged = changes['userSource'] && !changes['userSource'].firstChange;
49
+ const userSelectModeChanged = changes['userSelectMode'] && !changes['userSelectMode'].firstChange;
50
+ const sharedUsersChanged = changes['sharedUsers'] &&
51
+ !changes['sharedUsers'].firstChange &&
52
+ !isEqual(changes['sharedUsers'].previousValue, changes['sharedUsers'].currentValue);
53
+ if (userSourceChanged || userSelectModeChanged || sharedUsersChanged) {
54
+ this.setUpUserSelectManager();
55
+ }
56
+ }
57
+ ngOnDestroy() {
58
+ this.tearDownUserSelectManager();
59
+ }
60
+ tearDownUserSelectManager() {
61
+ this.userSelectSubscription?.unsubscribe();
62
+ }
63
+ async setUpUserSelectManager() {
64
+ this.tearDownUserSelectManager();
65
+ if (this.userSelectMode === 'search-select') {
66
+ const users = await (this.userSource || (() => []))();
67
+ this.userOptions = users.map(u => ({
68
+ ...u,
69
+ new: u.new ?? false,
70
+ }));
71
+ this.selectedUsers = this.sharedUsers.map(u => ({
72
+ ...u,
73
+ new: u.new ?? false,
74
+ }));
75
+ this.cdr.markForCheck();
76
+ }
77
+ else {
78
+ this.userSelectManager = RivSelect.createInMemoryManager(async () => [{ options: await (this.userSource || (() => []))() }], {
79
+ allowSearch: true,
80
+ allowSelectAll: true,
81
+ allowMultiSelect: true,
82
+ displayLimit: 500,
83
+ initialState: {
84
+ selection: {
85
+ selected: new RivSelect.OptionSet(this.sharedUsers),
86
+ },
87
+ },
88
+ });
89
+ this.userSelectSubscription = this.userSelectManager.state
90
+ .pipe(map(state => [...state.selection.selected]), distinctUntilChanged(isEqual))
91
+ .subscribe(users => {
92
+ // The manager replays its initial (seeded) selection synchronously on
93
+ // subscribe. Emitting that back would echo the sharedUsers input to
94
+ // the parent, which mutates its view and feeds a new array reference
95
+ // straight back into this component — an infinite change-detection
96
+ // loop. Only propagate genuine, user-driven selection changes.
97
+ if (!isEqual(users, this.sharedUsers)) {
98
+ this.sharedUsersChange.emit(users);
99
+ }
100
+ });
101
+ this.userSelectManager.actions.next({ type: 'load' });
102
+ }
103
+ }
104
+ onPermissionClick(value) {
105
+ if (this.isDisabled(value)) {
106
+ return;
107
+ }
108
+ this.permissionChange.emit(value);
109
+ }
110
+ isDisabled(permission) {
111
+ return this.disabledPermissions?.includes(permission) ?? false;
112
+ }
113
+ onSelectedUsersChange(users) {
114
+ this.selectedUsers = users;
115
+ this.sharedUsersChange.emit(RivViews.toSharedUsers(users));
116
+ }
117
+ handleAddUser(searchText) {
118
+ if (!this.onAddUser)
119
+ return;
120
+ const newUser = this.onAddUser(searchText);
121
+ this.userOptions = [...this.userOptions, newUser];
122
+ this.selectedUsers = [...this.selectedUsers, newUser];
123
+ this.sharedUsersChange.emit(RivViews.toSharedUsers(this.selectedUsers));
124
+ this.cdr.markForCheck();
125
+ }
126
+ }
127
+ PermissionPickerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: PermissionPickerComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
128
+ PermissionPickerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: PermissionPickerComponent, selector: "riv-permission-picker", inputs: { permission: "permission", sharedUsers: "sharedUsers", userSelectMode: "userSelectMode", userSource: "userSource", onAddUser: "onAddUser", newTooltip: "newTooltip", disabledPermissions: "disabledPermissions" }, outputs: { permissionChange: "permissionChange", sharedUsersChange: "sharedUsersChange" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"permission-picker\">\n <div class=\"permission-label\">View permissions</div>\n\n <div class=\"permission-options\">\n <button\n *ngFor=\"let option of permissionOptions\"\n class=\"permission-option\"\n [class.current]=\"permission === option.value\"\n [class.disabled]=\"isDisabled(option.value)\"\n type=\"button\"\n [attr.aria-checked]=\"permission === option.value\"\n [attr.aria-label]=\"option.title + ' permission'\"\n [attr.aria-disabled]=\"isDisabled(option.value)\"\n (click)=\"onPermissionClick(option.value)\"\n >\n <div class=\"option-content\">\n <div class=\"option-title\">\n <span>{{ option.title }}</span>\n <span class=\"option-description\">{{ option.subtitle }}</span>\n </div>\n <riv-icon\n *ngIf=\"permission === option.value\"\n class=\"permission-indicator\"\n [name]=\"'Check'\"\n [size]=\"16\"\n ></riv-icon>\n </div>\n <riv-select\n *ngIf=\"\n permission === 'shared' &&\n option.value === 'shared' &&\n userSelectMode === 'select' &&\n userSelectManager\n \"\n [label]=\"'Users with access'\"\n [manager]=\"userSelectManager\"\n ></riv-select>\n <riv-search-select\n *ngIf=\"\n permission === 'shared' &&\n option.value === 'shared' &&\n userSelectMode === 'search-select'\n \"\n (click)=\"$event.stopPropagation()\"\n [label]=\"'Users with access'\"\n [options]=\"userOptions\"\n [selected]=\"selectedUsers\"\n [placeholder]=\"'Search users'\"\n [addNewLabel]=\"'Add'\"\n [newTooltip]=\"newTooltip\"\n (selectedChange)=\"onSelectedUsersChange($event)\"\n (addNew)=\"handleAddUser($event)\"\n ></riv-search-select>\n </button>\n </div>\n</div>\n", styles: [".permission-picker{display:flex;flex-direction:column;gap:var(--size-medium)}.permission-options{display:flex;flex-direction:column}.permission-label{font:var(--title-02)}.permission-option{display:flex;flex-direction:column;gap:var(--size-small);padding:var(--size-small) var(--size-medium);border-radius:var(--border-radius-large);cursor:pointer;text-align:left}.permission-option:hover:not(.disabled){background-color:var(--surface-light-1)}.permission-option:active:not(.disabled),.permission-option.current{background-color:var(--surface-light-2)}.permission-option.disabled{cursor:not-allowed;opacity:.5}.option-content{display:flex;justify-content:space-between;align-items:center}.option-title{font:var(--body-medium);display:flex;flex-direction:column;align-items:flex-start}.option-description{font:var(--body-medium);color:var(--type-light-low-contrast)}.permission-indicator{color:var(--type-light-link)}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.IconComponent, selector: "riv-icon", inputs: ["name", "fillColor", "size", "customSize", "strokeWidth"] }, { kind: "component", type: i3.SearchSelectComponent, selector: "riv-search-select", inputs: ["options", "selected", "placeholder", "addNewLabel", "newTooltip", "size", "disabled", "label", "help", "required", "state", "errorMessage", "optionTemplate", "chipTemplate"], outputs: ["selectedChange", "addNew"] }, { kind: "component", type: i4.SelectComponent, selector: "riv-select", inputs: ["manager", "size", "disabled", "locked", "allowedCalloutPositions", "preferredCalloutPosition"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
129
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: PermissionPickerComponent, decorators: [{
130
+ type: Component,
131
+ args: [{ selector: 'riv-permission-picker', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"permission-picker\">\n <div class=\"permission-label\">View permissions</div>\n\n <div class=\"permission-options\">\n <button\n *ngFor=\"let option of permissionOptions\"\n class=\"permission-option\"\n [class.current]=\"permission === option.value\"\n [class.disabled]=\"isDisabled(option.value)\"\n type=\"button\"\n [attr.aria-checked]=\"permission === option.value\"\n [attr.aria-label]=\"option.title + ' permission'\"\n [attr.aria-disabled]=\"isDisabled(option.value)\"\n (click)=\"onPermissionClick(option.value)\"\n >\n <div class=\"option-content\">\n <div class=\"option-title\">\n <span>{{ option.title }}</span>\n <span class=\"option-description\">{{ option.subtitle }}</span>\n </div>\n <riv-icon\n *ngIf=\"permission === option.value\"\n class=\"permission-indicator\"\n [name]=\"'Check'\"\n [size]=\"16\"\n ></riv-icon>\n </div>\n <riv-select\n *ngIf=\"\n permission === 'shared' &&\n option.value === 'shared' &&\n userSelectMode === 'select' &&\n userSelectManager\n \"\n [label]=\"'Users with access'\"\n [manager]=\"userSelectManager\"\n ></riv-select>\n <riv-search-select\n *ngIf=\"\n permission === 'shared' &&\n option.value === 'shared' &&\n userSelectMode === 'search-select'\n \"\n (click)=\"$event.stopPropagation()\"\n [label]=\"'Users with access'\"\n [options]=\"userOptions\"\n [selected]=\"selectedUsers\"\n [placeholder]=\"'Search users'\"\n [addNewLabel]=\"'Add'\"\n [newTooltip]=\"newTooltip\"\n (selectedChange)=\"onSelectedUsersChange($event)\"\n (addNew)=\"handleAddUser($event)\"\n ></riv-search-select>\n </button>\n </div>\n</div>\n", styles: [".permission-picker{display:flex;flex-direction:column;gap:var(--size-medium)}.permission-options{display:flex;flex-direction:column}.permission-label{font:var(--title-02)}.permission-option{display:flex;flex-direction:column;gap:var(--size-small);padding:var(--size-small) var(--size-medium);border-radius:var(--border-radius-large);cursor:pointer;text-align:left}.permission-option:hover:not(.disabled){background-color:var(--surface-light-1)}.permission-option:active:not(.disabled),.permission-option.current{background-color:var(--surface-light-2)}.permission-option.disabled{cursor:not-allowed;opacity:.5}.option-content{display:flex;justify-content:space-between;align-items:center}.option-title{font:var(--body-medium);display:flex;flex-direction:column;align-items:flex-start}.option-description{font:var(--body-medium);color:var(--type-light-low-contrast)}.permission-indicator{color:var(--type-light-link)}\n"] }]
132
+ }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }]; }, propDecorators: { permission: [{
133
+ type: Input
134
+ }], sharedUsers: [{
135
+ type: Input
136
+ }], userSelectMode: [{
137
+ type: Input
138
+ }], userSource: [{
139
+ type: Input
140
+ }], onAddUser: [{
141
+ type: Input
142
+ }], newTooltip: [{
143
+ type: Input
144
+ }], disabledPermissions: [{
145
+ type: Input
146
+ }], permissionChange: [{
147
+ type: Output
148
+ }], sharedUsersChange: [{
149
+ type: Output
150
+ }] } });
151
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVybWlzc2lvbi1waWNrZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcml2L3NyYy9saWIvbmF2aWdhdGlvbi92aWV3cy9wZXJtaXNzaW9uLXBpY2tlci9wZXJtaXNzaW9uLXBpY2tlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9yaXYvc3JjL2xpYi9uYXZpZ2F0aW9uL3ZpZXdzL3Blcm1pc3Npb24tcGlja2VyL3Blcm1pc3Npb24tcGlja2VyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCx1QkFBdUIsRUFFdkIsU0FBUyxFQUNULFlBQVksRUFDWixLQUFLLEVBSUwsTUFBTSxHQUVQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFFakMsT0FBTyxFQUFFLG9CQUFvQixFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzNELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sVUFBVSxDQUFDOzs7Ozs7QUFFcEMsTUFBTSxNQUFNLEdBQTRDO0lBQ3RELE9BQU8sRUFBRSxTQUFTO0lBQ2xCLE1BQU0sRUFBRSxRQUFRO0lBQ2hCLE1BQU0sRUFBRSxRQUFRO0NBQ2pCLENBQUM7QUFFRixNQUFNLFNBQVMsR0FBNEM7SUFDekQsT0FBTyxFQUFFLHFCQUFxQjtJQUM5QixNQUFNLEVBQUUscUJBQXFCO0lBQzdCLE1BQU0sRUFBRSxtQ0FBbUM7Q0FDNUMsQ0FBQztBQVFGLE1BQU0sT0FBTyx5QkFBeUI7SUEwQ3BDLFlBQW9CLEdBQXNCO1FBQXRCLFFBQUcsR0FBSCxHQUFHLENBQW1CO1FBdEMxQyxlQUFVLEdBQTRCLFNBQVMsQ0FBQztRQUdoRCxnQkFBVyxHQUFRLEVBQUUsQ0FBQztRQUd0QixtQkFBYyxHQUE0QixRQUFRLENBQUM7UUFZbkQsd0JBQW1CLEdBQThCLEVBQUUsQ0FBQztRQUdwRCxxQkFBZ0IsR0FBRyxJQUFJLFlBQVksRUFBMkIsQ0FBQztRQUcvRCxzQkFBaUIsR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFDO1FBRW5DLHNCQUFpQixHQUFHLFFBQVEsQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUN2RSxLQUFLLEVBQUUsVUFBVTtZQUNqQixLQUFLLEVBQUUsTUFBTSxDQUFDLFVBQVUsQ0FBQztZQUN6QixRQUFRLEVBQUUsU0FBUyxDQUFDLFVBQVUsQ0FBQztTQUNoQyxDQUFDLENBQUMsQ0FBQztRQUtKLGdCQUFXLEdBQW1DLEVBQUUsQ0FBQztRQUNqRCxrQkFBYSxHQUFtQyxFQUFFLENBQUM7SUFFTixDQUFDO0lBRTlDLFFBQVE7UUFDTixJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztJQUNoQyxDQUFDO0lBRUQsV0FBVyxDQUFDLE9BQXNCO1FBQ2hDLDJFQUEyRTtRQUMzRSwyRUFBMkU7UUFDM0UsNkVBQTZFO1FBQzdFLDZFQUE2RTtRQUM3RSw2RUFBNkU7UUFDN0UsOEJBQThCO1FBQzlCLE1BQU0saUJBQWlCLEdBQ3JCLE9BQU8sQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsQ0FBQyxXQUFXLENBQUM7UUFDOUQsTUFBTSxxQkFBcUIsR0FDekIsT0FBTyxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxXQUFXLENBQUM7UUFDdEUsTUFBTSxrQkFBa0IsR0FDdEIsT0FBTyxDQUFDLGFBQWEsQ0FBQztZQUN0QixDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsQ0FBQyxXQUFXO1lBQ25DLENBQUMsT0FBTyxDQUNOLE9BQU8sQ0FBQyxhQUFhLENBQUMsQ0FBQyxhQUFhLEVBQ3BDLE9BQU8sQ0FBQyxhQUFhLENBQUMsQ0FBQyxZQUFZLENBQ3BDLENBQUM7UUFFSixJQUFJLGlCQUFpQixJQUFJLHFCQUFxQixJQUFJLGtCQUFrQixFQUFFO1lBQ3BFLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO1NBQy9CO0lBQ0gsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLENBQUMseUJBQXlCLEVBQUUsQ0FBQztJQUNuQyxDQUFDO0lBRU8seUJBQXlCO1FBQy9CLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxXQUFXLEVBQUUsQ0FBQztJQUM3QyxDQUFDO0lBRU8sS0FBSyxDQUFDLHNCQUFzQjtRQUNsQyxJQUFJLENBQUMseUJBQXlCLEVBQUUsQ0FBQztRQUVqQyxJQUFJLElBQUksQ0FBQyxjQUFjLEtBQUssZUFBZSxFQUFFO1lBQzNDLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ3RELElBQUksQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7Z0JBQ2pDLEdBQUcsQ0FBQztnQkFDSixHQUFHLEVBQUcsQ0FBa0MsQ0FBQyxHQUFHLElBQUksS0FBSzthQUN0RCxDQUFDLENBQUMsQ0FBQztZQUNKLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUM5QyxHQUFHLENBQUM7Z0JBQ0osR0FBRyxFQUFHLENBQWtDLENBQUMsR0FBRyxJQUFJLEtBQUs7YUFDdEQsQ0FBQyxDQUFDLENBQUM7WUFDSixJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxDQUFDO1NBQ3pCO2FBQU07WUFDTCxJQUFJLENBQUMsaUJBQWlCLEdBQUcsU0FBUyxDQUFDLHFCQUFxQixDQUN0RCxLQUFLLElBQUksRUFBRSxDQUFDLENBQUMsRUFBRSxPQUFPLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUNsRTtnQkFDRSxXQUFXLEVBQUUsSUFBSTtnQkFDakIsY0FBYyxFQUFFLElBQUk7Z0JBQ3BCLGdCQUFnQixFQUFFLElBQUk7Z0JBQ3RCLFlBQVksRUFBRSxHQUFHO2dCQUNqQixZQUFZLEVBQUU7b0JBQ1osU0FBUyxFQUFFO3dCQUNULFFBQVEsRUFBRSxJQUFJLFNBQVMsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQztxQkFDcEQ7aUJBQ0Y7YUFDRixDQUNGLENBQUM7WUFDRixJQUFJLENBQUMsc0JBQXNCLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEtBQUs7aUJBQ3ZELElBQUksQ0FDSCxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQVEsQ0FBQyxFQUNsRCxvQkFBb0IsQ0FBQyxPQUFPLENBQUMsQ0FDOUI7aUJBQ0EsU0FBUyxDQUFDLEtBQUssQ0FBQyxFQUFFO2dCQUNqQixzRUFBc0U7Z0JBQ3RFLG9FQUFvRTtnQkFDcEUscUVBQXFFO2dCQUNyRSxtRUFBbUU7Z0JBQ25FLCtEQUErRDtnQkFDL0QsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxFQUFFO29CQUNyQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO2lCQUNwQztZQUNILENBQUMsQ0FBQyxDQUFDO1lBQ0wsSUFBSSxDQUFDLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQztTQUN2RDtJQUNILENBQUM7SUFFRCxpQkFBaUIsQ0FBQyxLQUE4QjtRQUM5QyxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDMUIsT0FBTztTQUNSO1FBQ0QsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNwQyxDQUFDO0lBRUQsVUFBVSxDQUFDLFVBQW1DO1FBQzVDLE9BQU8sSUFBSSxDQUFDLG1CQUFtQixFQUFFLFFBQVEsQ0FBQyxVQUFVLENBQUMsSUFBSSxLQUFLLENBQUM7SUFDakUsQ0FBQztJQUVELHFCQUFxQixDQUFDLEtBQXFDO1FBQ3pELElBQUksQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDO1FBQzNCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQzdELENBQUM7SUFFRCxhQUFhLENBQUMsVUFBa0I7UUFDOUIsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTO1lBQUUsT0FBTztRQUM1QixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQzNDLElBQUksQ0FBQyxXQUFXLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxXQUFXLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDbEQsSUFBSSxDQUFDLGFBQWEsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLGFBQWEsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUN0RCxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUM7UUFDeEUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUMxQixDQUFDOztzSEF2SlUseUJBQXlCOzBHQUF6Qix5QkFBeUIseVlDcEN0Qyx1NERBd0RBOzJGRHBCYSx5QkFBeUI7a0JBTnJDLFNBQVM7K0JBQ0UsdUJBQXVCLG1CQUdoQix1QkFBdUIsQ0FBQyxNQUFNO3dHQU0vQyxVQUFVO3NCQURULEtBQUs7Z0JBSU4sV0FBVztzQkFEVixLQUFLO2dCQUlOLGNBQWM7c0JBRGIsS0FBSztnQkFJTixVQUFVO3NCQURULEtBQUs7Z0JBSU4sU0FBUztzQkFEUixLQUFLO2dCQUlOLFVBQVU7c0JBRFQsS0FBSztnQkFJTixtQkFBbUI7c0JBRGxCLEtBQUs7Z0JBSU4sZ0JBQWdCO3NCQURmLE1BQU07Z0JBSVAsaUJBQWlCO3NCQURoQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIEV2ZW50RW1pdHRlcixcbiAgSW5wdXQsXG4gIE9uQ2hhbmdlcyxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIE91dHB1dCxcbiAgU2ltcGxlQ2hhbmdlcyxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBpc0VxdWFsIH0gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZGlzdGluY3RVbnRpbENoYW5nZWQsIG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IFJpdlNlbGVjdCB9IGZyb20gJy4uLy4uLy4uL2lucHV0L3NlbGVjdC9zdGF0ZSc7XG5pbXBvcnQgeyBSaXZWaWV3cyB9IGZyb20gJy4uL3N0YXRlJztcblxuY29uc3QgdGl0bGVzOiBSZWNvcmQ8Uml2Vmlld3MuVmlld1Blcm1pc3Npb24sIHN0cmluZz4gPSB7XG4gIHByaXZhdGU6ICdQcml2YXRlJyxcbiAgcHVibGljOiAnUHVibGljJyxcbiAgc2hhcmVkOiAnU2hhcmVkJyxcbn07XG5cbmNvbnN0IHN1YnRpdGxlczogUmVjb3JkPFJpdlZpZXdzLlZpZXdQZXJtaXNzaW9uLCBzdHJpbmc+ID0ge1xuICBwcml2YXRlOiAnT25seSB2aXNpYmxlIHRvIHlvdScsXG4gIHB1YmxpYzogJ1Zpc2libGUgdG8gZXZlcnlvbmUnLFxuICBzaGFyZWQ6ICdPbmx5IHZpc2libGUgdG8gdGhvc2Ugd2l0aCBhY2Nlc3MnLFxufTtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAncml2LXBlcm1pc3Npb24tcGlja2VyJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3Blcm1pc3Npb24tcGlja2VyLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vcGVybWlzc2lvbi1waWNrZXIuY29tcG9uZW50LmNzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgUGVybWlzc2lvblBpY2tlckNvbXBvbmVudDxVIGV4dGVuZHMgUml2Vmlld3MuVXNlcj5cbiAgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcywgT25EZXN0cm95XG57XG4gIEBJbnB1dCgpXG4gIHBlcm1pc3Npb246IFJpdlZpZXdzLlZpZXdQZXJtaXNzaW9uID0gJ3ByaXZhdGUnO1xuXG4gIEBJbnB1dCgpXG4gIHNoYXJlZFVzZXJzOiBVW10gPSBbXTtcblxuICBASW5wdXQoKVxuICB1c2VyU2VsZWN0TW9kZTogUml2Vmlld3MuVXNlclNlbGVjdE1vZGUgPSAnc2VsZWN0JztcblxuICBASW5wdXQoKVxuICB1c2VyU291cmNlPzogUml2Vmlld3MuVXNlclNvdXJjZTxVPjtcblxuICBASW5wdXQoKVxuICBvbkFkZFVzZXI/OiBSaXZWaWV3cy5PbkFkZFVzZXI8VT47XG5cbiAgQElucHV0KClcbiAgbmV3VG9vbHRpcD86IHN0cmluZztcblxuICBASW5wdXQoKVxuICBkaXNhYmxlZFBlcm1pc3Npb25zOiBSaXZWaWV3cy5WaWV3UGVybWlzc2lvbltdID0gW107XG5cbiAgQE91dHB1dCgpXG4gIHBlcm1pc3Npb25DaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPFJpdlZpZXdzLlZpZXdQZXJtaXNzaW9uPigpO1xuXG4gIEBPdXRwdXQoKVxuICBzaGFyZWRVc2Vyc0NoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8VVtdPigpO1xuXG4gIHJlYWRvbmx5IHBlcm1pc3Npb25PcHRpb25zID0gUml2Vmlld3MuVmlld1Blcm1pc3Npb25zLm1hcChwZXJtaXNzaW9uID0+ICh7XG4gICAgdmFsdWU6IHBlcm1pc3Npb24sXG4gICAgdGl0bGU6IHRpdGxlc1twZXJtaXNzaW9uXSxcbiAgICBzdWJ0aXRsZTogc3VidGl0bGVzW3Blcm1pc3Npb25dLFxuICB9KSk7XG5cbiAgdXNlclNlbGVjdE1hbmFnZXI/OiBSaXZTZWxlY3QuTWFuYWdlcjxVPjtcbiAgcHJpdmF0ZSB1c2VyU2VsZWN0U3Vic2NyaXB0aW9uPzogU3Vic2NyaXB0aW9uO1xuXG4gIHVzZXJPcHRpb25zOiBSaXZWaWV3cy5TZWFyY2hTZWxlY3RVc2VyPFU+W10gPSBbXTtcbiAgc2VsZWN0ZWRVc2VyczogUml2Vmlld3MuU2VhcmNoU2VsZWN0VXNlcjxVPltdID0gW107XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmKSB7fVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuc2V0VXBVc2VyU2VsZWN0TWFuYWdlcigpO1xuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIC8vIG5nT25Jbml0IHBlcmZvcm1zIHRoZSBpbml0aWFsIHNldHVwLCBzbyBpZ25vcmUgZmlyc3QtY2hhbmdlIGV2ZW50cyBoZXJlLlxuICAgIC8vIFJlYnVpbGQgb25seSBvbiBhIGdlbnVpbmUgY2hhbmdlOiBhIG5ldyBkYXRhIHNvdXJjZSwgYSBtb2RlIHN3aXRjaCwgb3IgYVxuICAgIC8vIHZhbHVlLWxldmVsIGNoYW5nZSB0byB0aGUgc2VlZGVkIHNlbGVjdGlvbi4gQ29tcGFyaW5nIHNoYXJlZFVzZXJzIGJ5IHZhbHVlXG4gICAgLy8gKHJhdGhlciB0aGFuIHJlZmVyZW5jZSkgaXMgZXNzZW50aWFsIOKAlCB0aGUgcGFyZW50IGJpbmRzIGEgZnJlc2ggYXJyYXkgZWFjaFxuICAgIC8vIGNoYW5nZS1kZXRlY3Rpb24gY3ljbGUsIGFuZCByZWFjdGluZyB0byB0aGF0IHJlZmVyZW5jZSBjaHVybiB3b3VsZCByZWJ1aWxkXG4gICAgLy8gdGhlIG1hbmFnZXIgb24gZXZlcnkgY3ljbGUuXG4gICAgY29uc3QgdXNlclNvdXJjZUNoYW5nZWQgPVxuICAgICAgY2hhbmdlc1sndXNlclNvdXJjZSddICYmICFjaGFuZ2VzWyd1c2VyU291cmNlJ10uZmlyc3RDaGFuZ2U7XG4gICAgY29uc3QgdXNlclNlbGVjdE1vZGVDaGFuZ2VkID1cbiAgICAgIGNoYW5nZXNbJ3VzZXJTZWxlY3RNb2RlJ10gJiYgIWNoYW5nZXNbJ3VzZXJTZWxlY3RNb2RlJ10uZmlyc3RDaGFuZ2U7XG4gICAgY29uc3Qgc2hhcmVkVXNlcnNDaGFuZ2VkID1cbiAgICAgIGNoYW5nZXNbJ3NoYXJlZFVzZXJzJ10gJiZcbiAgICAgICFjaGFuZ2VzWydzaGFyZWRVc2VycyddLmZpcnN0Q2hhbmdlICYmXG4gICAgICAhaXNFcXVhbChcbiAgICAgICAgY2hhbmdlc1snc2hhcmVkVXNlcnMnXS5wcmV2aW91c1ZhbHVlLFxuICAgICAgICBjaGFuZ2VzWydzaGFyZWRVc2VycyddLmN1cnJlbnRWYWx1ZSxcbiAgICAgICk7XG5cbiAgICBpZiAodXNlclNvdXJjZUNoYW5nZWQgfHwgdXNlclNlbGVjdE1vZGVDaGFuZ2VkIHx8IHNoYXJlZFVzZXJzQ2hhbmdlZCkge1xuICAgICAgdGhpcy5zZXRVcFVzZXJTZWxlY3RNYW5hZ2VyKCk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy50ZWFyRG93blVzZXJTZWxlY3RNYW5hZ2VyKCk7XG4gIH1cblxuICBwcml2YXRlIHRlYXJEb3duVXNlclNlbGVjdE1hbmFnZXIoKTogdm9pZCB7XG4gICAgdGhpcy51c2VyU2VsZWN0U3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBzZXRVcFVzZXJTZWxlY3RNYW5hZ2VyKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMudGVhckRvd25Vc2VyU2VsZWN0TWFuYWdlcigpO1xuXG4gICAgaWYgKHRoaXMudXNlclNlbGVjdE1vZGUgPT09ICdzZWFyY2gtc2VsZWN0Jykge1xuICAgICAgY29uc3QgdXNlcnMgPSBhd2FpdCAodGhpcy51c2VyU291cmNlIHx8ICgoKSA9PiBbXSkpKCk7XG4gICAgICB0aGlzLnVzZXJPcHRpb25zID0gdXNlcnMubWFwKHUgPT4gKHtcbiAgICAgICAgLi4udSxcbiAgICAgICAgbmV3OiAodSBhcyBSaXZWaWV3cy5TZWFyY2hTZWxlY3RVc2VyPFU+KS5uZXcgPz8gZmFsc2UsXG4gICAgICB9KSk7XG4gICAgICB0aGlzLnNlbGVjdGVkVXNlcnMgPSB0aGlzLnNoYXJlZFVzZXJzLm1hcCh1ID0+ICh7XG4gICAgICAgIC4uLnUsXG4gICAgICAgIG5ldzogKHUgYXMgUml2Vmlld3MuU2VhcmNoU2VsZWN0VXNlcjxVPikubmV3ID8/IGZhbHNlLFxuICAgICAgfSkpO1xuICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMudXNlclNlbGVjdE1hbmFnZXIgPSBSaXZTZWxlY3QuY3JlYXRlSW5NZW1vcnlNYW5hZ2VyKFxuICAgICAgICBhc3luYyAoKSA9PiBbeyBvcHRpb25zOiBhd2FpdCAodGhpcy51c2VyU291cmNlIHx8ICgoKSA9PiBbXSkpKCkgfV0sXG4gICAgICAgIHtcbiAgICAgICAgICBhbGxvd1NlYXJjaDogdHJ1ZSxcbiAgICAgICAgICBhbGxvd1NlbGVjdEFsbDogdHJ1ZSxcbiAgICAgICAgICBhbGxvd011bHRpU2VsZWN0OiB0cnVlLFxuICAgICAgICAgIGRpc3BsYXlMaW1pdDogNTAwLFxuICAgICAgICAgIGluaXRpYWxTdGF0ZToge1xuICAgICAgICAgICAgc2VsZWN0aW9uOiB7XG4gICAgICAgICAgICAgIHNlbGVjdGVkOiBuZXcgUml2U2VsZWN0Lk9wdGlvblNldCh0aGlzLnNoYXJlZFVzZXJzKSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICk7XG4gICAgICB0aGlzLnVzZXJTZWxlY3RTdWJzY3JpcHRpb24gPSB0aGlzLnVzZXJTZWxlY3RNYW5hZ2VyLnN0YXRlXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIG1hcChzdGF0ZSA9PiBbLi4uc3RhdGUuc2VsZWN0aW9uLnNlbGVjdGVkXSBhcyBVW10pLFxuICAgICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKGlzRXF1YWwpLFxuICAgICAgICApXG4gICAgICAgIC5zdWJzY3JpYmUodXNlcnMgPT4ge1xuICAgICAgICAgIC8vIFRoZSBtYW5hZ2VyIHJlcGxheXMgaXRzIGluaXRpYWwgKHNlZWRlZCkgc2VsZWN0aW9uIHN5bmNocm9ub3VzbHkgb25cbiAgICAgICAgICAvLyBzdWJzY3JpYmUuIEVtaXR0aW5nIHRoYXQgYmFjayB3b3VsZCBlY2hvIHRoZSBzaGFyZWRVc2VycyBpbnB1dCB0b1xuICAgICAgICAgIC8vIHRoZSBwYXJlbnQsIHdoaWNoIG11dGF0ZXMgaXRzIHZpZXcgYW5kIGZlZWRzIGEgbmV3IGFycmF5IHJlZmVyZW5jZVxuICAgICAgICAgIC8vIHN0cmFpZ2h0IGJhY2sgaW50byB0aGlzIGNvbXBvbmVudCDigJQgYW4gaW5maW5pdGUgY2hhbmdlLWRldGVjdGlvblxuICAgICAgICAgIC8vIGxvb3AuIE9ubHkgcHJvcGFnYXRlIGdlbnVpbmUsIHVzZXItZHJpdmVuIHNlbGVjdGlvbiBjaGFuZ2VzLlxuICAgICAgICAgIGlmICghaXNFcXVhbCh1c2VycywgdGhpcy5zaGFyZWRVc2VycykpIHtcbiAgICAgICAgICAgIHRoaXMuc2hhcmVkVXNlcnNDaGFuZ2UuZW1pdCh1c2Vycyk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIHRoaXMudXNlclNlbGVjdE1hbmFnZXIuYWN0aW9ucy5uZXh0KHsgdHlwZTogJ2xvYWQnIH0pO1xuICAgIH1cbiAgfVxuXG4gIG9uUGVybWlzc2lvbkNsaWNrKHZhbHVlOiBSaXZWaWV3cy5WaWV3UGVybWlzc2lvbik6IHZvaWQge1xuICAgIGlmICh0aGlzLmlzRGlzYWJsZWQodmFsdWUpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMucGVybWlzc2lvbkNoYW5nZS5lbWl0KHZhbHVlKTtcbiAgfVxuXG4gIGlzRGlzYWJsZWQocGVybWlzc2lvbjogUml2Vmlld3MuVmlld1Blcm1pc3Npb24pOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5kaXNhYmxlZFBlcm1pc3Npb25zPy5pbmNsdWRlcyhwZXJtaXNzaW9uKSA/PyBmYWxzZTtcbiAgfVxuXG4gIG9uU2VsZWN0ZWRVc2Vyc0NoYW5nZSh1c2VyczogUml2Vmlld3MuU2VhcmNoU2VsZWN0VXNlcjxVPltdKTogdm9pZCB7XG4gICAgdGhpcy5zZWxlY3RlZFVzZXJzID0gdXNlcnM7XG4gICAgdGhpcy5zaGFyZWRVc2Vyc0NoYW5nZS5lbWl0KFJpdlZpZXdzLnRvU2hhcmVkVXNlcnModXNlcnMpKTtcbiAgfVxuXG4gIGhhbmRsZUFkZFVzZXIoc2VhcmNoVGV4dDogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLm9uQWRkVXNlcikgcmV0dXJuO1xuICAgIGNvbnN0IG5ld1VzZXIgPSB0aGlzLm9uQWRkVXNlcihzZWFyY2hUZXh0KTtcbiAgICB0aGlzLnVzZXJPcHRpb25zID0gWy4uLnRoaXMudXNlck9wdGlvbnMsIG5ld1VzZXJdO1xuICAgIHRoaXMuc2VsZWN0ZWRVc2VycyA9IFsuLi50aGlzLnNlbGVjdGVkVXNlcnMsIG5ld1VzZXJdO1xuICAgIHRoaXMuc2hhcmVkVXNlcnNDaGFuZ2UuZW1pdChSaXZWaWV3cy50b1NoYXJlZFVzZXJzKHRoaXMuc2VsZWN0ZWRVc2VycykpO1xuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwicGVybWlzc2lvbi1waWNrZXJcIj5cbiAgPGRpdiBjbGFzcz1cInBlcm1pc3Npb24tbGFiZWxcIj5WaWV3IHBlcm1pc3Npb25zPC9kaXY+XG5cbiAgPGRpdiBjbGFzcz1cInBlcm1pc3Npb24tb3B0aW9uc1wiPlxuICAgIDxidXR0b25cbiAgICAgICpuZ0Zvcj1cImxldCBvcHRpb24gb2YgcGVybWlzc2lvbk9wdGlvbnNcIlxuICAgICAgY2xhc3M9XCJwZXJtaXNzaW9uLW9wdGlvblwiXG4gICAgICBbY2xhc3MuY3VycmVudF09XCJwZXJtaXNzaW9uID09PSBvcHRpb24udmFsdWVcIlxuICAgICAgW2NsYXNzLmRpc2FibGVkXT1cImlzRGlzYWJsZWQob3B0aW9uLnZhbHVlKVwiXG4gICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgIFthdHRyLmFyaWEtY2hlY2tlZF09XCJwZXJtaXNzaW9uID09PSBvcHRpb24udmFsdWVcIlxuICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJvcHRpb24udGl0bGUgKyAnIHBlcm1pc3Npb24nXCJcbiAgICAgIFthdHRyLmFyaWEtZGlzYWJsZWRdPVwiaXNEaXNhYmxlZChvcHRpb24udmFsdWUpXCJcbiAgICAgIChjbGljayk9XCJvblBlcm1pc3Npb25DbGljayhvcHRpb24udmFsdWUpXCJcbiAgICA+XG4gICAgICA8ZGl2IGNsYXNzPVwib3B0aW9uLWNvbnRlbnRcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm9wdGlvbi10aXRsZVwiPlxuICAgICAgICAgIDxzcGFuPnt7IG9wdGlvbi50aXRsZSB9fTwvc3Bhbj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cIm9wdGlvbi1kZXNjcmlwdGlvblwiPnt7IG9wdGlvbi5zdWJ0aXRsZSB9fTwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxyaXYtaWNvblxuICAgICAgICAgICpuZ0lmPVwicGVybWlzc2lvbiA9PT0gb3B0aW9uLnZhbHVlXCJcbiAgICAgICAgICBjbGFzcz1cInBlcm1pc3Npb24taW5kaWNhdG9yXCJcbiAgICAgICAgICBbbmFtZV09XCInQ2hlY2snXCJcbiAgICAgICAgICBbc2l6ZV09XCIxNlwiXG4gICAgICAgID48L3Jpdi1pY29uPlxuICAgICAgPC9kaXY+XG4gICAgICA8cml2LXNlbGVjdFxuICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgIHBlcm1pc3Npb24gPT09ICdzaGFyZWQnICYmXG4gICAgICAgICAgb3B0aW9uLnZhbHVlID09PSAnc2hhcmVkJyAmJlxuICAgICAgICAgIHVzZXJTZWxlY3RNb2RlID09PSAnc2VsZWN0JyAmJlxuICAgICAgICAgIHVzZXJTZWxlY3RNYW5hZ2VyXG4gICAgICAgIFwiXG4gICAgICAgIFtsYWJlbF09XCInVXNlcnMgd2l0aCBhY2Nlc3MnXCJcbiAgICAgICAgW21hbmFnZXJdPVwidXNlclNlbGVjdE1hbmFnZXJcIlxuICAgICAgPjwvcml2LXNlbGVjdD5cbiAgICAgIDxyaXYtc2VhcmNoLXNlbGVjdFxuICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgIHBlcm1pc3Npb24gPT09ICdzaGFyZWQnICYmXG4gICAgICAgICAgb3B0aW9uLnZhbHVlID09PSAnc2hhcmVkJyAmJlxuICAgICAgICAgIHVzZXJTZWxlY3RNb2RlID09PSAnc2VhcmNoLXNlbGVjdCdcbiAgICAgICAgXCJcbiAgICAgICAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gICAgICAgIFtsYWJlbF09XCInVXNlcnMgd2l0aCBhY2Nlc3MnXCJcbiAgICAgICAgW29wdGlvbnNdPVwidXNlck9wdGlvbnNcIlxuICAgICAgICBbc2VsZWN0ZWRdPVwic2VsZWN0ZWRVc2Vyc1wiXG4gICAgICAgIFtwbGFjZWhvbGRlcl09XCInU2VhcmNoIHVzZXJzJ1wiXG4gICAgICAgIFthZGROZXdMYWJlbF09XCInQWRkJ1wiXG4gICAgICAgIFtuZXdUb29sdGlwXT1cIm5ld1Rvb2x0aXBcIlxuICAgICAgICAoc2VsZWN0ZWRDaGFuZ2UpPVwib25TZWxlY3RlZFVzZXJzQ2hhbmdlKCRldmVudClcIlxuICAgICAgICAoYWRkTmV3KT1cImhhbmRsZUFkZFVzZXIoJGV2ZW50KVwiXG4gICAgICA+PC9yaXYtc2VhcmNoLXNlbGVjdD5cbiAgICA8L2J1dHRvbj5cbiAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==