@cqa-lib/cqa-ui 1.1.286 → 1.1.287
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2020/lib/test-case-details/element-list/element-list.component.mjs +41 -3
- package/esm2020/lib/test-case-details/element-popup/element-popup-data.mjs +1 -1
- package/esm2020/lib/test-case-details/element-popup/element-popup.component.mjs +3 -3
- package/esm2020/lib/test-case-details/loop-step/loop-step.component.mjs +37 -17
- package/fesm2015/cqa-lib-cqa-ui.mjs +79 -20
- package/fesm2015/cqa-lib-cqa-ui.mjs.map +1 -1
- package/fesm2020/cqa-lib-cqa-ui.mjs +78 -20
- package/fesm2020/cqa-lib-cqa-ui.mjs.map +1 -1
- package/lib/test-case-details/element-list/element-list.component.d.ts +13 -1
- package/lib/test-case-details/element-popup/element-popup-data.d.ts +10 -0
- package/lib/test-case-details/loop-step/loop-step.component.d.ts +9 -0
- package/package.json +1 -1
- package/styles.css +1 -1
|
@@ -11,8 +11,12 @@ export class ElementListComponent {
|
|
|
11
11
|
this.selectorKey = 'selector';
|
|
12
12
|
/** Key to access the labels array from each item (default: 'labels') */
|
|
13
13
|
this.labelsKey = 'labels';
|
|
14
|
+
/** Key on each item for the screen name object (e.g. 'screenNameObj'); its 'name' property is shown below the selector */
|
|
15
|
+
this.screenNameObjectKey = 'screenNameObj';
|
|
14
16
|
/** Maximum height for the scrollable container (default: '200px') */
|
|
15
17
|
this.maxHeight = '200px';
|
|
18
|
+
/** Currently selected item to highlight in the list (same reference or matching id/title+selector) */
|
|
19
|
+
this.selectedItem = null;
|
|
16
20
|
/** Whether more items can be loaded */
|
|
17
21
|
this.hasMore = false;
|
|
18
22
|
/** Emitted when an item is clicked */
|
|
@@ -28,12 +32,42 @@ export class ElementListComponent {
|
|
|
28
32
|
getItemValue(item, key) {
|
|
29
33
|
return item?.[key];
|
|
30
34
|
}
|
|
35
|
+
/**
|
|
36
|
+
* Get screen name from item (screenNameObj.name or screenName string) for display below selector
|
|
37
|
+
*/
|
|
38
|
+
getScreenName(item) {
|
|
39
|
+
if (!item)
|
|
40
|
+
return null;
|
|
41
|
+
const obj = item[this.screenNameObjectKey];
|
|
42
|
+
if (obj && obj.name != null && String(obj.name).trim() !== '') {
|
|
43
|
+
return String(obj.name).trim();
|
|
44
|
+
}
|
|
45
|
+
const flat = item['screenName'];
|
|
46
|
+
if (flat != null && String(flat).trim() !== '') {
|
|
47
|
+
return String(flat).trim();
|
|
48
|
+
}
|
|
49
|
+
return null;
|
|
50
|
+
}
|
|
31
51
|
/**
|
|
32
52
|
* Handle item click
|
|
33
53
|
*/
|
|
34
54
|
onItemClick(item) {
|
|
35
55
|
this.itemClick.emit(item);
|
|
36
56
|
}
|
|
57
|
+
/**
|
|
58
|
+
* Whether the given item is the selected one (for highlighting).
|
|
59
|
+
*/
|
|
60
|
+
isSelected(item) {
|
|
61
|
+
if (this.selectedItem == null)
|
|
62
|
+
return false;
|
|
63
|
+
if (item === this.selectedItem)
|
|
64
|
+
return true;
|
|
65
|
+
if (this.selectedItem.id != null && item?.id != null && Number(item.id) === Number(this.selectedItem.id))
|
|
66
|
+
return true;
|
|
67
|
+
const sameTitle = (this.getItemValue(item, this.titleKey) ?? '') === (this.getItemValue(this.selectedItem, this.titleKey) ?? '');
|
|
68
|
+
const sameSelector = (this.getItemValue(item, this.selectorKey) ?? '') === (this.getItemValue(this.selectedItem, this.selectorKey) ?? '');
|
|
69
|
+
return sameTitle && sameSelector;
|
|
70
|
+
}
|
|
37
71
|
ngAfterViewInit() {
|
|
38
72
|
if (this.hasMore) {
|
|
39
73
|
setTimeout(() => this.setupScrollObserver(), 0);
|
|
@@ -85,10 +119,10 @@ export class ElementListComponent {
|
|
|
85
119
|
}
|
|
86
120
|
}
|
|
87
121
|
ElementListComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: ElementListComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
88
|
-
ElementListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: ElementListComponent, selector: "cqa-element-list", inputs: { items: "items", titleKey: "titleKey", selectorKey: "selectorKey", labelsKey: "labelsKey", maxHeight: "maxHeight", hasMore: "hasMore" }, outputs: { itemClick: "itemClick", loadMore: "loadMore" }, host: { classAttribute: "cqa-ui-root" }, viewQueries: [{ propertyName: "scrollContainer", first: true, predicate: ["scrollContainer"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div \n #scrollContainer\n class=\"cqa-max-h-[200px] cqa-overflow-y-auto cqa-scrollbar-thin cqa-scrollbar-track-transparent cqa-scrollbar-thumb-[#E5E7EB] cqa-scrollbar-thumb-rounded-full cqa-scrollbar-thumb-hover:cqa-bg-[#D1D5DB] cqa-flex cqa-items-center cqa-justify-center cqa-flex-col cqa-gap-2\"\n [style.max-height]=\"maxHeight\">\n <div *ngFor=\"let item of items\" (click)=\"onItemClick(item)\" class=\"cqa-w-full\">\n <div class=\"hover:cqa-bg-[#F5F5F5] cqa-flex cqa-
|
|
122
|
+
ElementListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: ElementListComponent, selector: "cqa-element-list", inputs: { items: "items", titleKey: "titleKey", selectorKey: "selectorKey", labelsKey: "labelsKey", screenNameObjectKey: "screenNameObjectKey", maxHeight: "maxHeight", selectedItem: "selectedItem", hasMore: "hasMore" }, outputs: { itemClick: "itemClick", loadMore: "loadMore" }, host: { classAttribute: "cqa-ui-root" }, viewQueries: [{ propertyName: "scrollContainer", first: true, predicate: ["scrollContainer"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div \n #scrollContainer\n class=\"cqa-max-h-[200px] cqa-overflow-y-auto cqa-scrollbar-thin cqa-scrollbar-track-transparent cqa-scrollbar-thumb-[#E5E7EB] cqa-scrollbar-thumb-rounded-full cqa-scrollbar-thumb-hover:cqa-bg-[#D1D5DB] cqa-flex cqa-items-center cqa-justify-center cqa-flex-col cqa-gap-2\"\n [style.max-height]=\"maxHeight\">\n <div *ngFor=\"let item of items\" (click)=\"onItemClick(item)\" class=\"cqa-w-full\">\n <div class=\"hover:cqa-bg-[#F5F5F5] cqa-flex cqa-flex-col cqa-border cqa-border-solid cqa-rounded-lg cqa-p-3 cqa-cursor-pointer cqa-gap-1\"\n [class.cqa-bg-[#EFF6FF]]=\"isSelected(item)\"\n [class.cqa-border-2]=\"isSelected(item)\"\n [class.cqa-border-[#3F43EE]]=\"isSelected(item)\"\n [class.cqa-border-[#FDE68A]]=\"!isSelected(item)\">\n <div class=\"cqa-flex cqa-items-center cqa-justify-between cqa-gap-1\">\n <div class=\"cqa-min-w-0 cqa-flex-1 cqa-break-words\">\n <h6 class=\"cqa-text-[12px] cqa-leading-[100%] cqa-font-[400] cqa-text-[#171717]\">\n {{ getItemValue(item, titleKey) }}\n </h6>\n <span class=\"cqa-text-[10px] cqa-leading-[100%] cqa-text-[#6B7280]\">\n {{ getItemValue(item, selectorKey) }}\n </span>\n </div>\n <div class=\"cqa-flex cqa-gap-1 cqa-min-w-[80px] cqa-justify-end\">\n <span \n *ngFor=\"let tag of getItemValue(item, labelsKey)\" \n class=\"cqa-text-[11px] cqa-text-[#4b74ec] cqa-rounded-full cqa-px-2 cqa-bg-[#eff6ff] cqa-border cqa-border-solid cqa-border-[#c8e0ff]\">\n {{ tag }}\n </span>\n </div>\n </div>\n <div *ngIf=\"getScreenName(item)\" class=\"cqa-mt-2 cqa-flex cqa-justify-start cqa-items-center\">\n <span class=\"cqa-inline-flex cqa-items-center cqa-gap-1 cqa-text-[11px] cqa-font-medium cqa-text-[#3F43EE] cqa-bg-[#EFF6FF] cqa-border cqa-border-solid cqa-border-[#C8E0FF] cqa-rounded-md cqa-px-2 cqa-py-0.5 cqa-w-fit\">\n <span class=\"cqa-text-[#6B7280] cqa-font-normal\">Screen:</span> {{ getScreenName(item) }}\n </span>\n </div>\n </div>\n </div>\n <!-- No elements found message -->\n <div *ngIf=\"items.length === 0 && !hasMore\" class=\"cqa-flex cqa-justify-center cqa-items-center cqa-py-4 cqa-text-[12px] cqa-text-[#6B7280]\">\n No elements found\n </div>\n <!-- Sentinel element for infinite scroll -->\n <div *ngIf=\"hasMore\" class=\"load-more-sentinel cqa-flex cqa-flex-col cqa-items-center cqa-justify-center cqa-gap-3 cqa-py-2\">\n <svg class=\"cqa-animate-spin cqa-h-6 cqa-w-6 cqa-text-[#3F43EE]\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\">\n <circle class=\"cqa-opacity-25\" cx=\"12\" cy=\"12\" r=\"10\" stroke=\"currentColor\" stroke-width=\"4\"></circle>\n <path class=\"cqa-opacity-75\" fill=\"currentColor\" d=\"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z\"></path>\n </svg>\n <span class=\"cqa-text-[12px] cqa-text-[#6B7280]\">{{ items.length === 0 ? 'Loading...' : 'Loading more...' }}</span>\n </div>\n</div>\n\n", directives: [{ type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
89
123
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: ElementListComponent, decorators: [{
|
|
90
124
|
type: Component,
|
|
91
|
-
args: [{ selector: 'cqa-element-list', host: { class: 'cqa-ui-root' }, changeDetection: ChangeDetectionStrategy.OnPush, template: "<div \n #scrollContainer\n class=\"cqa-max-h-[200px] cqa-overflow-y-auto cqa-scrollbar-thin cqa-scrollbar-track-transparent cqa-scrollbar-thumb-[#E5E7EB] cqa-scrollbar-thumb-rounded-full cqa-scrollbar-thumb-hover:cqa-bg-[#D1D5DB] cqa-flex cqa-items-center cqa-justify-center cqa-flex-col cqa-gap-2\"\n [style.max-height]=\"maxHeight\">\n <div *ngFor=\"let item of items\" (click)=\"onItemClick(item)\" class=\"cqa-w-full\">\n <div class=\"hover:cqa-bg-[#F5F5F5] cqa-flex cqa-
|
|
125
|
+
args: [{ selector: 'cqa-element-list', host: { class: 'cqa-ui-root' }, changeDetection: ChangeDetectionStrategy.OnPush, template: "<div \n #scrollContainer\n class=\"cqa-max-h-[200px] cqa-overflow-y-auto cqa-scrollbar-thin cqa-scrollbar-track-transparent cqa-scrollbar-thumb-[#E5E7EB] cqa-scrollbar-thumb-rounded-full cqa-scrollbar-thumb-hover:cqa-bg-[#D1D5DB] cqa-flex cqa-items-center cqa-justify-center cqa-flex-col cqa-gap-2\"\n [style.max-height]=\"maxHeight\">\n <div *ngFor=\"let item of items\" (click)=\"onItemClick(item)\" class=\"cqa-w-full\">\n <div class=\"hover:cqa-bg-[#F5F5F5] cqa-flex cqa-flex-col cqa-border cqa-border-solid cqa-rounded-lg cqa-p-3 cqa-cursor-pointer cqa-gap-1\"\n [class.cqa-bg-[#EFF6FF]]=\"isSelected(item)\"\n [class.cqa-border-2]=\"isSelected(item)\"\n [class.cqa-border-[#3F43EE]]=\"isSelected(item)\"\n [class.cqa-border-[#FDE68A]]=\"!isSelected(item)\">\n <div class=\"cqa-flex cqa-items-center cqa-justify-between cqa-gap-1\">\n <div class=\"cqa-min-w-0 cqa-flex-1 cqa-break-words\">\n <h6 class=\"cqa-text-[12px] cqa-leading-[100%] cqa-font-[400] cqa-text-[#171717]\">\n {{ getItemValue(item, titleKey) }}\n </h6>\n <span class=\"cqa-text-[10px] cqa-leading-[100%] cqa-text-[#6B7280]\">\n {{ getItemValue(item, selectorKey) }}\n </span>\n </div>\n <div class=\"cqa-flex cqa-gap-1 cqa-min-w-[80px] cqa-justify-end\">\n <span \n *ngFor=\"let tag of getItemValue(item, labelsKey)\" \n class=\"cqa-text-[11px] cqa-text-[#4b74ec] cqa-rounded-full cqa-px-2 cqa-bg-[#eff6ff] cqa-border cqa-border-solid cqa-border-[#c8e0ff]\">\n {{ tag }}\n </span>\n </div>\n </div>\n <div *ngIf=\"getScreenName(item)\" class=\"cqa-mt-2 cqa-flex cqa-justify-start cqa-items-center\">\n <span class=\"cqa-inline-flex cqa-items-center cqa-gap-1 cqa-text-[11px] cqa-font-medium cqa-text-[#3F43EE] cqa-bg-[#EFF6FF] cqa-border cqa-border-solid cqa-border-[#C8E0FF] cqa-rounded-md cqa-px-2 cqa-py-0.5 cqa-w-fit\">\n <span class=\"cqa-text-[#6B7280] cqa-font-normal\">Screen:</span> {{ getScreenName(item) }}\n </span>\n </div>\n </div>\n </div>\n <!-- No elements found message -->\n <div *ngIf=\"items.length === 0 && !hasMore\" class=\"cqa-flex cqa-justify-center cqa-items-center cqa-py-4 cqa-text-[12px] cqa-text-[#6B7280]\">\n No elements found\n </div>\n <!-- Sentinel element for infinite scroll -->\n <div *ngIf=\"hasMore\" class=\"load-more-sentinel cqa-flex cqa-flex-col cqa-items-center cqa-justify-center cqa-gap-3 cqa-py-2\">\n <svg class=\"cqa-animate-spin cqa-h-6 cqa-w-6 cqa-text-[#3F43EE]\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\">\n <circle class=\"cqa-opacity-25\" cx=\"12\" cy=\"12\" r=\"10\" stroke=\"currentColor\" stroke-width=\"4\"></circle>\n <path class=\"cqa-opacity-75\" fill=\"currentColor\" d=\"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z\"></path>\n </svg>\n <span class=\"cqa-text-[12px] cqa-text-[#6B7280]\">{{ items.length === 0 ? 'Loading...' : 'Loading more...' }}</span>\n </div>\n</div>\n\n" }]
|
|
92
126
|
}], propDecorators: { scrollContainer: [{
|
|
93
127
|
type: ViewChild,
|
|
94
128
|
args: ['scrollContainer', { static: false }]
|
|
@@ -100,8 +134,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImpor
|
|
|
100
134
|
type: Input
|
|
101
135
|
}], labelsKey: [{
|
|
102
136
|
type: Input
|
|
137
|
+
}], screenNameObjectKey: [{
|
|
138
|
+
type: Input
|
|
103
139
|
}], maxHeight: [{
|
|
104
140
|
type: Input
|
|
141
|
+
}], selectedItem: [{
|
|
142
|
+
type: Input
|
|
105
143
|
}], hasMore: [{
|
|
106
144
|
type: Input
|
|
107
145
|
}], itemClick: [{
|
|
@@ -109,4 +147,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImpor
|
|
|
109
147
|
}], loadMore: [{
|
|
110
148
|
type: Output
|
|
111
149
|
}] } });
|
|
112
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWxlbWVudC1saXN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvdGVzdC1jYXNlLWRldGFpbHMvZWxlbWVudC1saXN0L2VsZW1lbnQtbGlzdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL3Rlc3QtY2FzZS1kZXRhaWxzL2VsZW1lbnQtbGlzdC9lbGVtZW50LWxpc3QuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSx1QkFBdUIsRUFBNEIsU0FBUyxFQUF3QyxNQUFNLGVBQWUsQ0FBQzs7O0FBUTNLLE1BQU0sT0FBTyxvQkFBb0I7SUFOakM7UUFTRSxnQ0FBZ0M7UUFDdkIsVUFBSyxHQUFVLEVBQUUsQ0FBQztRQUUzQix5RUFBeUU7UUFDaEUsYUFBUSxHQUFXLE9BQU8sQ0FBQztRQUVwQywrRUFBK0U7UUFDdEUsZ0JBQVcsR0FBVyxVQUFVLENBQUM7UUFFMUMsd0VBQXdFO1FBQy9ELGNBQVMsR0FBVyxRQUFRLENBQUM7UUFFdEMscUVBQXFFO1FBQzVELGNBQVMsR0FBVyxPQUFPLENBQUM7UUFFckMsdUNBQXVDO1FBQzlCLFlBQU8sR0FBWSxLQUFLLENBQUM7UUFFbEMsc0NBQXNDO1FBQzVCLGNBQVMsR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFDO1FBRTlDLGdGQUFnRjtRQUN0RSxhQUFRLEdBQUcsSUFBSSxZQUFZLEVBQVEsQ0FBQztRQUc5QywrSEFBK0g7UUFDdkgseUJBQW9CLEdBQUcsS0FBSyxDQUFDO0tBNEV0QztJQTFFQzs7T0FFRztJQUNILFlBQVksQ0FBQyxJQUFTLEVBQUUsR0FBVztRQUNqQyxPQUFPLElBQUksRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3JCLENBQUM7SUFFRDs7T0FFRztJQUNILFdBQVcsQ0FBQyxJQUFTO1FBQ25CLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzVCLENBQUM7SUFFRCxlQUFlO1FBQ2IsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFO1lBQ2hCLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztTQUNqRDtJQUNILENBQUM7SUFFRCxXQUFXLENBQUMsT0FBc0I7UUFDaEMsSUFBSSxPQUFPLENBQUMsU0FBUyxDQUFDLElBQUksSUFBSSxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsZUFBZSxFQUFFO1lBQzlELFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztTQUNqRDtJQUNILENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxJQUFJLENBQUMsY0FBYyxFQUFFO1lBQ3ZCLElBQUksQ0FBQyxjQUFjLENBQUMsVUFBVSxFQUFFLENBQUM7U0FDbEM7SUFDSCxDQUFDO0lBRU8sbUJBQW1CO1FBQ3pCLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRTtZQUMxQyxPQUFPO1NBQ1I7UUFFRCxnREFBZ0Q7UUFDaEQsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDLHFCQUFxQixDQUF1QixDQUFDO1FBQy9HLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDYixPQUFPO1NBQ1I7UUFFRCxzQ0FBc0M7UUFDdEMsSUFBSSxJQUFJLENBQUMsY0FBYyxFQUFFO1lBQ3ZCLElBQUksQ0FBQyxjQUFjLENBQUMsVUFBVSxFQUFFLENBQUM7U0FDbEM7UUFFRCx1RkFBdUY7UUFDdkYsNEZBQTRGO1FBQzVGLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxJQUFJLENBQUM7UUFFakMsc0VBQXNFO1FBQ3RFLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxvQkFBb0IsQ0FDNUMsQ0FBQyxPQUFPLEVBQUUsRUFBRTtZQUNWLEtBQUssTUFBTSxLQUFLLElBQUksT0FBTyxFQUFFO2dCQUMzQixJQUFJLEtBQUssQ0FBQyxjQUFjLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRTtvQkFDeEMsSUFBSSxJQUFJLENBQUMsb0JBQW9CLEVBQUU7d0JBQzdCLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxLQUFLLENBQUM7d0JBQ2xDLE9BQU87cUJBQ1I7b0JBQ0QsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQztpQkFDdEI7YUFDRjtRQUNILENBQUMsRUFDRDtZQUNFLElBQUksRUFBRSxJQUFJLENBQUMsZUFBZSxDQUFDLGFBQWE7WUFDeEMsVUFBVSxFQUFFLE1BQU07WUFDbEIsU0FBUyxFQUFFLEdBQUc7U0FDZixDQUNGLENBQUM7UUFFRixJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUN4QyxDQUFDOztpSEF4R1Usb0JBQW9CO3FHQUFwQixvQkFBb0IsdWJDUmpDLGcxRUFzQ0E7MkZEOUJhLG9CQUFvQjtrQkFOaEMsU0FBUzsrQkFDRSxrQkFBa0IsUUFFdEIsRUFBRSxLQUFLLEVBQUUsYUFBYSxFQUFFLG1CQUNiLHVCQUF1QixDQUFDLE1BQU07OEJBR0UsZUFBZTtzQkFBL0QsU0FBUzt1QkFBQyxpQkFBaUIsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7Z0JBR3RDLEtBQUs7c0JBQWIsS0FBSztnQkFHRyxRQUFRO3NCQUFoQixLQUFLO2dCQUdHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBR0csU0FBUztzQkFBakIsS0FBSztnQkFHRyxTQUFTO3NCQUFqQixLQUFLO2dCQUdHLE9BQU87c0JBQWYsS0FBSztnQkFHSSxTQUFTO3NCQUFsQixNQUFNO2dCQUdHLFFBQVE7c0JBQWpCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBPdXRwdXQsIEV2ZW50RW1pdHRlciwgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSwgVmlld0NoaWxkLCBFbGVtZW50UmVmLCBPbkNoYW5nZXMsIFNpbXBsZUNoYW5nZXMgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnY3FhLWVsZW1lbnQtbGlzdCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9lbGVtZW50LWxpc3QuY29tcG9uZW50Lmh0bWwnLFxuICBob3N0OiB7IGNsYXNzOiAnY3FhLXVpLXJvb3QnIH0sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBFbGVtZW50TGlzdENvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSwgT25DaGFuZ2VzIHtcbiAgQFZpZXdDaGlsZCgnc2Nyb2xsQ29udGFpbmVyJywgeyBzdGF0aWM6IGZhbHNlIH0pIHNjcm9sbENvbnRhaW5lcj86IEVsZW1lbnRSZWY8SFRNTERpdkVsZW1lbnQ+O1xuICBcbiAgLyoqIEFycmF5IG9mIGl0ZW1zIHRvIGRpc3BsYXkgKi9cbiAgQElucHV0KCkgaXRlbXM6IGFueVtdID0gW107XG4gIFxuICAvKiogS2V5IHRvIGFjY2VzcyB0aGUgdGl0bGUgcHJvcGVydHkgZnJvbSBlYWNoIGl0ZW0gKGRlZmF1bHQ6ICd0aXRsZScpICovXG4gIEBJbnB1dCgpIHRpdGxlS2V5OiBzdHJpbmcgPSAndGl0bGUnO1xuICBcbiAgLyoqIEtleSB0byBhY2Nlc3MgdGhlIHNlbGVjdG9yIHByb3BlcnR5IGZyb20gZWFjaCBpdGVtIChkZWZhdWx0OiAnc2VsZWN0b3InKSAqL1xuICBASW5wdXQoKSBzZWxlY3RvcktleTogc3RyaW5nID0gJ3NlbGVjdG9yJztcbiAgXG4gIC8qKiBLZXkgdG8gYWNjZXNzIHRoZSBsYWJlbHMgYXJyYXkgZnJvbSBlYWNoIGl0ZW0gKGRlZmF1bHQ6ICdsYWJlbHMnKSAqL1xuICBASW5wdXQoKSBsYWJlbHNLZXk6IHN0cmluZyA9ICdsYWJlbHMnO1xuICBcbiAgLyoqIE1heGltdW0gaGVpZ2h0IGZvciB0aGUgc2Nyb2xsYWJsZSBjb250YWluZXIgKGRlZmF1bHQ6ICcyMDBweCcpICovXG4gIEBJbnB1dCgpIG1heEhlaWdodDogc3RyaW5nID0gJzIwMHB4JztcblxuICAvKiogV2hldGhlciBtb3JlIGl0ZW1zIGNhbiBiZSBsb2FkZWQgKi9cbiAgQElucHV0KCkgaGFzTW9yZTogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8qKiBFbWl0dGVkIHdoZW4gYW4gaXRlbSBpcyBjbGlja2VkICovXG4gIEBPdXRwdXQoKSBpdGVtQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICAvKiogRW1pdHRlZCB3aGVuIHVzZXIgc2Nyb2xscyBuZWFyIHRoZSBib3R0b20gYW5kIG1vcmUgaXRlbXMgc2hvdWxkIGJlIGxvYWRlZCAqL1xuICBAT3V0cHV0KCkgbG9hZE1vcmUgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgcHJpdmF0ZSBzY3JvbGxPYnNlcnZlcj86IEludGVyc2VjdGlvbk9ic2VydmVyO1xuICAvKiogU2tpcCB0aGUgZmlyc3QgaW50ZXJzZWN0aW9uIGNhbGxiYWNrIChmaXJlcyBpbW1lZGlhdGVseSB3aGVuIG9ic2VydmUoKSBpcyBjYWxsZWQpIHRvIHByZXZlbnQgZHVwbGljYXRlIEFQSSBjYWxscyBvbiBsb2FkICovXG4gIHByaXZhdGUgc2tpcE5leHRJbnRlcnNlY3Rpb24gPSBmYWxzZTtcblxuICAvKipcbiAgICogR2V0IHRoZSB2YWx1ZSBmcm9tIGFuIGl0ZW0gdXNpbmcgdGhlIHNwZWNpZmllZCBrZXlcbiAgICovXG4gIGdldEl0ZW1WYWx1ZShpdGVtOiBhbnksIGtleTogc3RyaW5nKTogYW55IHtcbiAgICByZXR1cm4gaXRlbT8uW2tleV07XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlIGl0ZW0gY2xpY2tcbiAgICovXG4gIG9uSXRlbUNsaWNrKGl0ZW06IGFueSk6IHZvaWQge1xuICAgIHRoaXMuaXRlbUNsaWNrLmVtaXQoaXRlbSk7XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaGFzTW9yZSkge1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLnNldHVwU2Nyb2xsT2JzZXJ2ZXIoKSwgMCk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGlmIChjaGFuZ2VzWydoYXNNb3JlJ10gJiYgdGhpcy5oYXNNb3JlICYmIHRoaXMuc2Nyb2xsQ29udGFpbmVyKSB7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMuc2V0dXBTY3JvbGxPYnNlcnZlcigpLCAwKTtcbiAgICB9XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5zY3JvbGxPYnNlcnZlcikge1xuICAgICAgdGhpcy5zY3JvbGxPYnNlcnZlci5kaXNjb25uZWN0KCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzZXR1cFNjcm9sbE9ic2VydmVyKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5oYXNNb3JlIHx8ICF0aGlzLnNjcm9sbENvbnRhaW5lcikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIEZpbmQgdGhlIHNlbnRpbmVsIGVsZW1lbnQgKGxvYWRpbmcgaW5kaWNhdG9yKVxuICAgIGNvbnN0IHNlbnRpbmVsID0gdGhpcy5zY3JvbGxDb250YWluZXIubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCcubG9hZC1tb3JlLXNlbnRpbmVsJykgYXMgSFRNTEVsZW1lbnQgfCBudWxsO1xuICAgIGlmICghc2VudGluZWwpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBEaXNjb25uZWN0IGV4aXN0aW5nIG9ic2VydmVyIGlmIGFueVxuICAgIGlmICh0aGlzLnNjcm9sbE9ic2VydmVyKSB7XG4gICAgICB0aGlzLnNjcm9sbE9ic2VydmVyLmRpc2Nvbm5lY3QoKTtcbiAgICB9XG5cbiAgICAvLyBTa2lwIHRoZSBmaXJzdCBpbnRlcnNlY3Rpb24gY2FsbGJhY2sgLSBpdCBmaXJlcyBpbW1lZGlhdGVseSB3aGVuIG9ic2VydmUoKSBpcyBjYWxsZWRcbiAgICAvLyBpZiB0aGUgc2VudGluZWwgaXMgYWxyZWFkeSBpbiB2aWV3LCBjYXVzaW5nIGR1cGxpY2F0ZSBBUEkgY2FsbHMgKHBhZ2UgMCArIHBhZ2UgMSkgb24gbG9hZFxuICAgIHRoaXMuc2tpcE5leHRJbnRlcnNlY3Rpb24gPSB0cnVlO1xuXG4gICAgLy8gQ3JlYXRlIEludGVyc2VjdGlvbk9ic2VydmVyIHRvIGRldGVjdCB3aGVuIHNlbnRpbmVsIGNvbWVzIGludG8gdmlld1xuICAgIHRoaXMuc2Nyb2xsT2JzZXJ2ZXIgPSBuZXcgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIoXG4gICAgICAoZW50cmllcykgPT4ge1xuICAgICAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIGVudHJpZXMpIHtcbiAgICAgICAgICBpZiAoZW50cnkuaXNJbnRlcnNlY3RpbmcgJiYgdGhpcy5oYXNNb3JlKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5za2lwTmV4dEludGVyc2VjdGlvbikge1xuICAgICAgICAgICAgICB0aGlzLnNraXBOZXh0SW50ZXJzZWN0aW9uID0gZmFsc2U7XG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMubG9hZE1vcmUuZW1pdCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgcm9vdDogdGhpcy5zY3JvbGxDb250YWluZXIubmF0aXZlRWxlbWVudCxcbiAgICAgICAgcm9vdE1hcmdpbjogJzUwcHgnLFxuICAgICAgICB0aHJlc2hvbGQ6IDAuMVxuICAgICAgfVxuICAgICk7XG5cbiAgICB0aGlzLnNjcm9sbE9ic2VydmVyLm9ic2VydmUoc2VudGluZWwpO1xuICB9XG59XG5cbiIsIjxkaXYgXG4gICNzY3JvbGxDb250YWluZXJcbiAgY2xhc3M9XCJjcWEtbWF4LWgtWzIwMHB4XSBjcWEtb3ZlcmZsb3cteS1hdXRvIGNxYS1zY3JvbGxiYXItdGhpbiBjcWEtc2Nyb2xsYmFyLXRyYWNrLXRyYW5zcGFyZW50IGNxYS1zY3JvbGxiYXItdGh1bWItWyNFNUU3RUJdIGNxYS1zY3JvbGxiYXItdGh1bWItcm91bmRlZC1mdWxsIGNxYS1zY3JvbGxiYXItdGh1bWItaG92ZXI6Y3FhLWJnLVsjRDFENURCXSBjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1qdXN0aWZ5LWNlbnRlciBjcWEtZmxleC1jb2wgY3FhLWdhcC0yXCJcbiAgW3N0eWxlLm1heC1oZWlnaHRdPVwibWF4SGVpZ2h0XCI+XG4gIDxkaXYgKm5nRm9yPVwibGV0IGl0ZW0gb2YgaXRlbXNcIiAoY2xpY2spPVwib25JdGVtQ2xpY2soaXRlbSlcIiBjbGFzcz1cImNxYS13LWZ1bGxcIj5cbiAgICA8ZGl2IGNsYXNzPVwiaG92ZXI6Y3FhLWJnLVsjRjVGNUY1XSBjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1qdXN0aWZ5LWJldHdlZW4gY3FhLWJvcmRlciBjcWEtYm9yZGVyLVsjRkRFNjhBXVxuICAgICAgICAgICAgIGNxYS1yb3VuZGVkLWxnIGNxYS1wLTMgY3FhLWN1cnNvci1wb2ludGVyIGNxYS1nYXAtMVwiPlxuICAgICAgPGRpdiBjbGFzcz1cImNxYS1taW4tdy0wIGNxYS1mbGV4LTEgY3FhLWJyZWFrLXdvcmRzXCI+XG4gICAgICAgIDxoNiBjbGFzcz1cImNxYS10ZXh0LVsxMnB4XSBjcWEtbGVhZGluZy1bMTAwJV0gY3FhLWZvbnQtWzQwMF0gY3FhLXRleHQtWyMxNzE3MTddXCI+XG4gICAgICAgICAge3sgZ2V0SXRlbVZhbHVlKGl0ZW0sIHRpdGxlS2V5KSB9fVxuICAgICAgICA8L2g2PlxuICAgICAgICA8c3BhbiBjbGFzcz1cImNxYS10ZXh0LVsxMHB4XSBjcWEtbGVhZGluZy1bMTAwJV0gY3FhLXRleHQtWyM2QjcyODBdXCI+XG4gICAgICAgICAge3sgZ2V0SXRlbVZhbHVlKGl0ZW0sIHNlbGVjdG9yS2V5KSB9fVxuICAgICAgICA8L3NwYW4+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtZ2FwLTEgY3FhLW1pbi13LVs4MHB4XSBjcWEtanVzdGlmeS1lbmRcIj5cbiAgICAgICAgPHNwYW4gXG4gICAgICAgICAgKm5nRm9yPVwibGV0IHRhZyBvZiBnZXRJdGVtVmFsdWUoaXRlbSwgbGFiZWxzS2V5KVwiIFxuICAgICAgICAgIGNsYXNzPVwiY3FhLXRleHQtWzExcHhdIGNxYS10ZXh0LVsjNGI3NGVjXSBjcWEtcm91bmRlZC1mdWxsIGNxYS1weC0yIGNxYS1iZy1bI2VmZjZmZl0gY3FhLWJvcmRlciBjcWEtYm9yZGVyLXNvbGlkIGNxYS1ib3JkZXItWyNjOGUwZmZdXCI+XG4gICAgICAgICAge3sgdGFnIH19XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgPCEtLSBObyBlbGVtZW50cyBmb3VuZCBtZXNzYWdlIC0tPlxuICA8ZGl2ICpuZ0lmPVwiaXRlbXMubGVuZ3RoID09PSAwICYmICFoYXNNb3JlXCIgY2xhc3M9XCJjcWEtZmxleCBjcWEtanVzdGlmeS1jZW50ZXIgY3FhLWl0ZW1zLWNlbnRlciBjcWEtcHktNCBjcWEtdGV4dC1bMTJweF0gY3FhLXRleHQtWyM2QjcyODBdXCI+XG4gICAgTm8gZWxlbWVudHMgZm91bmRcbiAgPC9kaXY+XG4gIDwhLS0gU2VudGluZWwgZWxlbWVudCBmb3IgaW5maW5pdGUgc2Nyb2xsIC0tPlxuICA8ZGl2ICpuZ0lmPVwiaGFzTW9yZVwiIGNsYXNzPVwibG9hZC1tb3JlLXNlbnRpbmVsIGNxYS1mbGV4IGNxYS1mbGV4LWNvbCBjcWEtaXRlbXMtY2VudGVyIGNxYS1qdXN0aWZ5LWNlbnRlciBjcWEtZ2FwLTMgY3FhLXB5LTJcIj5cbiAgICA8c3ZnIGNsYXNzPVwiY3FhLWFuaW1hdGUtc3BpbiBjcWEtaC02IGNxYS13LTYgY3FhLXRleHQtWyMzRjQzRUVdXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIGZpbGw9XCJub25lXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiPlxuICAgICAgPGNpcmNsZSBjbGFzcz1cImNxYS1vcGFjaXR5LTI1XCIgY3g9XCIxMlwiIGN5PVwiMTJcIiByPVwiMTBcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiBzdHJva2Utd2lkdGg9XCI0XCI+PC9jaXJjbGU+XG4gICAgICA8cGF0aCBjbGFzcz1cImNxYS1vcGFjaXR5LTc1XCIgZmlsbD1cImN1cnJlbnRDb2xvclwiIGQ9XCJNNCAxMmE4IDggMCAwMTgtOFYwQzUuMzczIDAgMCA1LjM3MyAwIDEyaDR6bTIgNS4yOTFBNy45NjIgNy45NjIgMCAwMTQgMTJIMGMwIDMuMDQyIDEuMTM1IDUuODI0IDMgNy45MzhsMy0yLjY0N3pcIj48L3BhdGg+XG4gICAgPC9zdmc+XG4gICAgPHNwYW4gY2xhc3M9XCJjcWEtdGV4dC1bMTJweF0gY3FhLXRleHQtWyM2QjcyODBdXCI+e3sgaXRlbXMubGVuZ3RoID09PSAwID8gJ0xvYWRpbmcuLi4nIDogJ0xvYWRpbmcgbW9yZS4uLicgfX08L3NwYW4+XG4gIDwvZGl2PlxuPC9kaXY+XG5cbiJdfQ==
|
|
150
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWxlbWVudC1saXN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvdGVzdC1jYXNlLWRldGFpbHMvZWxlbWVudC1saXN0L2VsZW1lbnQtbGlzdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL3Rlc3QtY2FzZS1kZXRhaWxzL2VsZW1lbnQtbGlzdC9lbGVtZW50LWxpc3QuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSx1QkFBdUIsRUFBNEIsU0FBUyxFQUF3QyxNQUFNLGVBQWUsQ0FBQzs7O0FBUTNLLE1BQU0sT0FBTyxvQkFBb0I7SUFOakM7UUFTRSxnQ0FBZ0M7UUFDdkIsVUFBSyxHQUFVLEVBQUUsQ0FBQztRQUUzQix5RUFBeUU7UUFDaEUsYUFBUSxHQUFXLE9BQU8sQ0FBQztRQUVwQywrRUFBK0U7UUFDdEUsZ0JBQVcsR0FBVyxVQUFVLENBQUM7UUFFMUMsd0VBQXdFO1FBQy9ELGNBQVMsR0FBVyxRQUFRLENBQUM7UUFFdEMsMEhBQTBIO1FBQ2pILHdCQUFtQixHQUFXLGVBQWUsQ0FBQztRQUV2RCxxRUFBcUU7UUFDNUQsY0FBUyxHQUFXLE9BQU8sQ0FBQztRQUVyQyxzR0FBc0c7UUFDN0YsaUJBQVksR0FBUSxJQUFJLENBQUM7UUFFbEMsdUNBQXVDO1FBQzlCLFlBQU8sR0FBWSxLQUFLLENBQUM7UUFFbEMsc0NBQXNDO1FBQzVCLGNBQVMsR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFDO1FBRTlDLGdGQUFnRjtRQUN0RSxhQUFRLEdBQUcsSUFBSSxZQUFZLEVBQVEsQ0FBQztRQUc5QywrSEFBK0g7UUFDdkgseUJBQW9CLEdBQUcsS0FBSyxDQUFDO0tBd0d0QztJQXRHQzs7T0FFRztJQUNILFlBQVksQ0FBQyxJQUFTLEVBQUUsR0FBVztR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MkZEeENhLG9CQUFvQjtrQkFOaEMsU0FBUzsrQkFDRSxrQkFBa0IsUUFFdEIsRUFBRSxLQUFLLEVBQUUsYUFBYSxFQUFFLG1CQUNiLHVCQUF1QixDQUFDLE1BQU07OEJBR0UsZUFBZTtzQkFBL0QsU0FBUzt1QkFBQyxpQkFBaUIsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7Z0JBR3RDLEtBQUs7c0JBQWIsS0FBSztnQkFHRyxRQUFRO3NCQUFoQixLQUFLO2dCQUdHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBR0csU0FBUztzQkFBakIsS0FBSztnQkFHRyxtQkFBbUI7c0JBQTNCLEtBQUs7Z0JBR0csU0FBUztzQkFBakIsS0FBSztnQkFHRyxZQUFZO3NCQUFwQixLQUFLO2dCQUdHLE9BQU87c0JBQWYsS0FBSztnQkFHSSxTQUFTO3NCQUFsQixNQUFNO2dCQUdHLFFBQVE7c0JBQWpCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBPdXRwdXQsIEV2ZW50RW1pdHRlciwgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSwgVmlld0NoaWxkLCBFbGVtZW50UmVmLCBPbkNoYW5nZXMsIFNpbXBsZUNoYW5nZXMgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnY3FhLWVsZW1lbnQtbGlzdCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9lbGVtZW50LWxpc3QuY29tcG9uZW50Lmh0bWwnLFxuICBob3N0OiB7IGNsYXNzOiAnY3FhLXVpLXJvb3QnIH0sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBFbGVtZW50TGlzdENvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSwgT25DaGFuZ2VzIHtcbiAgQFZpZXdDaGlsZCgnc2Nyb2xsQ29udGFpbmVyJywgeyBzdGF0aWM6IGZhbHNlIH0pIHNjcm9sbENvbnRhaW5lcj86IEVsZW1lbnRSZWY8SFRNTERpdkVsZW1lbnQ+O1xuICBcbiAgLyoqIEFycmF5IG9mIGl0ZW1zIHRvIGRpc3BsYXkgKi9cbiAgQElucHV0KCkgaXRlbXM6IGFueVtdID0gW107XG4gIFxuICAvKiogS2V5IHRvIGFjY2VzcyB0aGUgdGl0bGUgcHJvcGVydHkgZnJvbSBlYWNoIGl0ZW0gKGRlZmF1bHQ6ICd0aXRsZScpICovXG4gIEBJbnB1dCgpIHRpdGxlS2V5OiBzdHJpbmcgPSAndGl0bGUnO1xuICBcbiAgLyoqIEtleSB0byBhY2Nlc3MgdGhlIHNlbGVjdG9yIHByb3BlcnR5IGZyb20gZWFjaCBpdGVtIChkZWZhdWx0OiAnc2VsZWN0b3InKSAqL1xuICBASW5wdXQoKSBzZWxlY3RvcktleTogc3RyaW5nID0gJ3NlbGVjdG9yJztcbiAgXG4gIC8qKiBLZXkgdG8gYWNjZXNzIHRoZSBsYWJlbHMgYXJyYXkgZnJvbSBlYWNoIGl0ZW0gKGRlZmF1bHQ6ICdsYWJlbHMnKSAqL1xuICBASW5wdXQoKSBsYWJlbHNLZXk6IHN0cmluZyA9ICdsYWJlbHMnO1xuXG4gIC8qKiBLZXkgb24gZWFjaCBpdGVtIGZvciB0aGUgc2NyZWVuIG5hbWUgb2JqZWN0IChlLmcuICdzY3JlZW5OYW1lT2JqJyk7IGl0cyAnbmFtZScgcHJvcGVydHkgaXMgc2hvd24gYmVsb3cgdGhlIHNlbGVjdG9yICovXG4gIEBJbnB1dCgpIHNjcmVlbk5hbWVPYmplY3RLZXk6IHN0cmluZyA9ICdzY3JlZW5OYW1lT2JqJztcbiAgXG4gIC8qKiBNYXhpbXVtIGhlaWdodCBmb3IgdGhlIHNjcm9sbGFibGUgY29udGFpbmVyIChkZWZhdWx0OiAnMjAwcHgnKSAqL1xuICBASW5wdXQoKSBtYXhIZWlnaHQ6IHN0cmluZyA9ICcyMDBweCc7XG5cbiAgLyoqIEN1cnJlbnRseSBzZWxlY3RlZCBpdGVtIHRvIGhpZ2hsaWdodCBpbiB0aGUgbGlzdCAoc2FtZSByZWZlcmVuY2Ugb3IgbWF0Y2hpbmcgaWQvdGl0bGUrc2VsZWN0b3IpICovXG4gIEBJbnB1dCgpIHNlbGVjdGVkSXRlbTogYW55ID0gbnVsbDtcblxuICAvKiogV2hldGhlciBtb3JlIGl0ZW1zIGNhbiBiZSBsb2FkZWQgKi9cbiAgQElucHV0KCkgaGFzTW9yZTogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8qKiBFbWl0dGVkIHdoZW4gYW4gaXRlbSBpcyBjbGlja2VkICovXG4gIEBPdXRwdXQoKSBpdGVtQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICAvKiogRW1pdHRlZCB3aGVuIHVzZXIgc2Nyb2xscyBuZWFyIHRoZSBib3R0b20gYW5kIG1vcmUgaXRlbXMgc2hvdWxkIGJlIGxvYWRlZCAqL1xuICBAT3V0cHV0KCkgbG9hZE1vcmUgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgcHJpdmF0ZSBzY3JvbGxPYnNlcnZlcj86IEludGVyc2VjdGlvbk9ic2VydmVyO1xuICAvKiogU2tpcCB0aGUgZmlyc3QgaW50ZXJzZWN0aW9uIGNhbGxiYWNrIChmaXJlcyBpbW1lZGlhdGVseSB3aGVuIG9ic2VydmUoKSBpcyBjYWxsZWQpIHRvIHByZXZlbnQgZHVwbGljYXRlIEFQSSBjYWxscyBvbiBsb2FkICovXG4gIHByaXZhdGUgc2tpcE5leHRJbnRlcnNlY3Rpb24gPSBmYWxzZTtcblxuICAvKipcbiAgICogR2V0IHRoZSB2YWx1ZSBmcm9tIGFuIGl0ZW0gdXNpbmcgdGhlIHNwZWNpZmllZCBrZXlcbiAgICovXG4gIGdldEl0ZW1WYWx1ZShpdGVtOiBhbnksIGtleTogc3RyaW5nKTogYW55IHtcbiAgICByZXR1cm4gaXRlbT8uW2tleV07XG4gIH1cblxuICAvKipcbiAgICogR2V0IHNjcmVlbiBuYW1lIGZyb20gaXRlbSAoc2NyZWVuTmFtZU9iai5uYW1lIG9yIHNjcmVlbk5hbWUgc3RyaW5nKSBmb3IgZGlzcGxheSBiZWxvdyBzZWxlY3RvclxuICAgKi9cbiAgZ2V0U2NyZWVuTmFtZShpdGVtOiBhbnkpOiBzdHJpbmcgfCBudWxsIHtcbiAgICBpZiAoIWl0ZW0pIHJldHVybiBudWxsO1xuICAgIGNvbnN0IG9iaiA9IGl0ZW1bdGhpcy5zY3JlZW5OYW1lT2JqZWN0S2V5XTtcbiAgICBpZiAob2JqICYmIG9iai5uYW1lICE9IG51bGwgJiYgU3RyaW5nKG9iai5uYW1lKS50cmltKCkgIT09ICcnKSB7XG4gICAgICByZXR1cm4gU3RyaW5nKG9iai5uYW1lKS50cmltKCk7XG4gICAgfVxuICAgIGNvbnN0IGZsYXQgPSBpdGVtWydzY3JlZW5OYW1lJ107XG4gICAgaWYgKGZsYXQgIT0gbnVsbCAmJiBTdHJpbmcoZmxhdCkudHJpbSgpICE9PSAnJykge1xuICAgICAgcmV0dXJuIFN0cmluZyhmbGF0KS50cmltKCk7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZSBpdGVtIGNsaWNrXG4gICAqL1xuICBvbkl0ZW1DbGljayhpdGVtOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLml0ZW1DbGljay5lbWl0KGl0ZW0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIGdpdmVuIGl0ZW0gaXMgdGhlIHNlbGVjdGVkIG9uZSAoZm9yIGhpZ2hsaWdodGluZykuXG4gICAqL1xuICBpc1NlbGVjdGVkKGl0ZW06IGFueSk6IGJvb2xlYW4ge1xuICAgIGlmICh0aGlzLnNlbGVjdGVkSXRlbSA9PSBudWxsKSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKGl0ZW0gPT09IHRoaXMuc2VsZWN0ZWRJdGVtKSByZXR1cm4gdHJ1ZTtcbiAgICBpZiAodGhpcy5zZWxlY3RlZEl0ZW0uaWQgIT0gbnVsbCAmJiBpdGVtPy5pZCAhPSBudWxsICYmIE51bWJlcihpdGVtLmlkKSA9PT0gTnVtYmVyKHRoaXMuc2VsZWN0ZWRJdGVtLmlkKSkgcmV0dXJuIHRydWU7XG4gICAgY29uc3Qgc2FtZVRpdGxlID0gKHRoaXMuZ2V0SXRlbVZhbHVlKGl0ZW0sIHRoaXMudGl0bGVLZXkpID8/ICcnKSA9PT0gKHRoaXMuZ2V0SXRlbVZhbHVlKHRoaXMuc2VsZWN0ZWRJdGVtLCB0aGlzLnRpdGxlS2V5KSA/PyAnJyk7XG4gICAgY29uc3Qgc2FtZVNlbGVjdG9yID0gKHRoaXMuZ2V0SXRlbVZhbHVlKGl0ZW0sIHRoaXMuc2VsZWN0b3JLZXkpID8/ICcnKSA9PT0gKHRoaXMuZ2V0SXRlbVZhbHVlKHRoaXMuc2VsZWN0ZWRJdGVtLCB0aGlzLnNlbGVjdG9yS2V5KSA/PyAnJyk7XG4gICAgcmV0dXJuIHNhbWVUaXRsZSAmJiBzYW1lU2VsZWN0b3I7XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaGFzTW9yZSkge1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLnNldHVwU2Nyb2xsT2JzZXJ2ZXIoKSwgMCk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGlmIChjaGFuZ2VzWydoYXNNb3JlJ10gJiYgdGhpcy5oYXNNb3JlICYmIHRoaXMuc2Nyb2xsQ29udGFpbmVyKSB7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMuc2V0dXBTY3JvbGxPYnNlcnZlcigpLCAwKTtcbiAgICB9XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5zY3JvbGxPYnNlcnZlcikge1xuICAgICAgdGhpcy5zY3JvbGxPYnNlcnZlci5kaXNjb25uZWN0KCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzZXR1cFNjcm9sbE9ic2VydmVyKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5oYXNNb3JlIHx8ICF0aGlzLnNjcm9sbENvbnRhaW5lcikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIEZpbmQgdGhlIHNlbnRpbmVsIGVsZW1lbnQgKGxvYWRpbmcgaW5kaWNhdG9yKVxuICAgIGNvbnN0IHNlbnRpbmVsID0gdGhpcy5zY3JvbGxDb250YWluZXIubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCcubG9hZC1tb3JlLXNlbnRpbmVsJykgYXMgSFRNTEVsZW1lbnQgfCBudWxsO1xuICAgIGlmICghc2VudGluZWwpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBEaXNjb25uZWN0IGV4aXN0aW5nIG9ic2VydmVyIGlmIGFueVxuICAgIGlmICh0aGlzLnNjcm9sbE9ic2VydmVyKSB7XG4gICAgICB0aGlzLnNjcm9sbE9ic2VydmVyLmRpc2Nvbm5lY3QoKTtcbiAgICB9XG5cbiAgICAvLyBTa2lwIHRoZSBmaXJzdCBpbnRlcnNlY3Rpb24gY2FsbGJhY2sgLSBpdCBmaXJlcyBpbW1lZGlhdGVseSB3aGVuIG9ic2VydmUoKSBpcyBjYWxsZWRcbiAgICAvLyBpZiB0aGUgc2VudGluZWwgaXMgYWxyZWFkeSBpbiB2aWV3LCBjYXVzaW5nIGR1cGxpY2F0ZSBBUEkgY2FsbHMgKHBhZ2UgMCArIHBhZ2UgMSkgb24gbG9hZFxuICAgIHRoaXMuc2tpcE5leHRJbnRlcnNlY3Rpb24gPSB0cnVlO1xuXG4gICAgLy8gQ3JlYXRlIEludGVyc2VjdGlvbk9ic2VydmVyIHRvIGRldGVjdCB3aGVuIHNlbnRpbmVsIGNvbWVzIGludG8gdmlld1xuICAgIHRoaXMuc2Nyb2xsT2JzZXJ2ZXIgPSBuZXcgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIoXG4gICAgICAoZW50cmllcykgPT4ge1xuICAgICAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIGVudHJpZXMpIHtcbiAgICAgICAgICBpZiAoZW50cnkuaXNJbnRlcnNlY3RpbmcgJiYgdGhpcy5oYXNNb3JlKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5za2lwTmV4dEludGVyc2VjdGlvbikge1xuICAgICAgICAgICAgICB0aGlzLnNraXBOZXh0SW50ZXJzZWN0aW9uID0gZmFsc2U7XG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMubG9hZE1vcmUuZW1pdCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgcm9vdDogdGhpcy5zY3JvbGxDb250YWluZXIubmF0aXZlRWxlbWVudCxcbiAgICAgICAgcm9vdE1hcmdpbjogJzUwcHgnLFxuICAgICAgICB0aHJlc2hvbGQ6IDAuMVxuICAgICAgfVxuICAgICk7XG5cbiAgICB0aGlzLnNjcm9sbE9ic2VydmVyLm9ic2VydmUoc2VudGluZWwpO1xuICB9XG59XG5cbiIsIjxkaXYgXG4gICNzY3JvbGxDb250YWluZXJcbiAgY2xhc3M9XCJjcWEtbWF4LWgtWzIwMHB4XSBjcWEtb3ZlcmZsb3cteS1hdXRvIGNxYS1zY3JvbGxiYXItdGhpbiBjcWEtc2Nyb2xsYmFyLXRyYWNrLXRyYW5zcGFyZW50IGNxYS1zY3JvbGxiYXItdGh1bWItWyNFNUU3RUJdIGNxYS1zY3JvbGxiYXItdGh1bWItcm91bmRlZC1mdWxsIGNxYS1zY3JvbGxiYXItdGh1bWItaG92ZXI6Y3FhLWJnLVsjRDFENURCXSBjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1qdXN0aWZ5LWNlbnRlciBjcWEtZmxleC1jb2wgY3FhLWdhcC0yXCJcbiAgW3N0eWxlLm1heC1oZWlnaHRdPVwibWF4SGVpZ2h0XCI+XG4gIDxkaXYgKm5nRm9yPVwibGV0IGl0ZW0gb2YgaXRlbXNcIiAoY2xpY2spPVwib25JdGVtQ2xpY2soaXRlbSlcIiBjbGFzcz1cImNxYS13LWZ1bGxcIj5cbiAgICA8ZGl2IGNsYXNzPVwiaG92ZXI6Y3FhLWJnLVsjRjVGNUY1XSBjcWEtZmxleCBjcWEtZmxleC1jb2wgY3FhLWJvcmRlciBjcWEtYm9yZGVyLXNvbGlkIGNxYS1yb3VuZGVkLWxnIGNxYS1wLTMgY3FhLWN1cnNvci1wb2ludGVyIGNxYS1nYXAtMVwiXG4gICAgICAgICBbY2xhc3MuY3FhLWJnLVsjRUZGNkZGXV09XCJpc1NlbGVjdGVkKGl0ZW0pXCJcbiAgICAgICAgIFtjbGFzcy5jcWEtYm9yZGVyLTJdPVwiaXNTZWxlY3RlZChpdGVtKVwiXG4gICAgICAgICBbY2xhc3MuY3FhLWJvcmRlci1bIzNGNDNFRV1dPVwiaXNTZWxlY3RlZChpdGVtKVwiXG4gICAgICAgICBbY2xhc3MuY3FhLWJvcmRlci1bI0ZERTY4QV1dPVwiIWlzU2VsZWN0ZWQoaXRlbSlcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1qdXN0aWZ5LWJldHdlZW4gY3FhLWdhcC0xXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjcWEtbWluLXctMCBjcWEtZmxleC0xIGNxYS1icmVhay13b3Jkc1wiPlxuICAgICAgICAgIDxoNiBjbGFzcz1cImNxYS10ZXh0LVsxMnB4XSBjcWEtbGVhZGluZy1bMTAwJV0gY3FhLWZvbnQtWzQwMF0gY3FhLXRleHQtWyMxNzE3MTddXCI+XG4gICAgICAgICAgICB7eyBnZXRJdGVtVmFsdWUoaXRlbSwgdGl0bGVLZXkpIH19XG4gICAgICAgICAgPC9oNj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImNxYS10ZXh0LVsxMHB4XSBjcWEtbGVhZGluZy1bMTAwJV0gY3FhLXRleHQtWyM2QjcyODBdXCI+XG4gICAgICAgICAgICB7eyBnZXRJdGVtVmFsdWUoaXRlbSwgc2VsZWN0b3JLZXkpIH19XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1nYXAtMSBjcWEtbWluLXctWzgwcHhdIGNxYS1qdXN0aWZ5LWVuZFwiPlxuICAgICAgICAgIDxzcGFuIFxuICAgICAgICAgICAgKm5nRm9yPVwibGV0IHRhZyBvZiBnZXRJdGVtVmFsdWUoaXRlbSwgbGFiZWxzS2V5KVwiIFxuICAgICAgICAgICAgY2xhc3M9XCJjcWEtdGV4dC1bMTFweF0gY3FhLXRleHQtWyM0Yjc0ZWNdIGNxYS1yb3VuZGVkLWZ1bGwgY3FhLXB4LTIgY3FhLWJnLVsjZWZmNmZmXSBjcWEtYm9yZGVyIGNxYS1ib3JkZXItc29saWQgY3FhLWJvcmRlci1bI2M4ZTBmZl1cIj5cbiAgICAgICAgICAgIHt7IHRhZyB9fVxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgKm5nSWY9XCJnZXRTY3JlZW5OYW1lKGl0ZW0pXCIgY2xhc3M9XCJjcWEtbXQtMiBjcWEtZmxleCBjcWEtanVzdGlmeS1zdGFydCBjcWEtaXRlbXMtY2VudGVyXCI+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwiY3FhLWlubGluZS1mbGV4IGNxYS1pdGVtcy1jZW50ZXIgY3FhLWdhcC0xIGNxYS10ZXh0LVsxMXB4XSBjcWEtZm9udC1tZWRpdW0gY3FhLXRleHQtWyMzRjQzRUVdIGNxYS1iZy1bI0VGRjZGRl0gY3FhLWJvcmRlciBjcWEtYm9yZGVyLXNvbGlkIGNxYS1ib3JkZXItWyNDOEUwRkZdIGNxYS1yb3VuZGVkLW1kIGNxYS1weC0yIGNxYS1weS0wLjUgY3FhLXctZml0XCI+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJjcWEtdGV4dC1bIzZCNzI4MF0gY3FhLWZvbnQtbm9ybWFsXCI+U2NyZWVuOjwvc3Bhbj4ge3sgZ2V0U2NyZWVuTmFtZShpdGVtKSB9fVxuICAgICAgICA8L3NwYW4+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDwhLS0gTm8gZWxlbWVudHMgZm91bmQgbWVzc2FnZSAtLT5cbiAgPGRpdiAqbmdJZj1cIml0ZW1zLmxlbmd0aCA9PT0gMCAmJiAhaGFzTW9yZVwiIGNsYXNzPVwiY3FhLWZsZXggY3FhLWp1c3RpZnktY2VudGVyIGNxYS1pdGVtcy1jZW50ZXIgY3FhLXB5LTQgY3FhLXRleHQtWzEycHhdIGNxYS10ZXh0LVsjNkI3MjgwXVwiPlxuICAgIE5vIGVsZW1lbnRzIGZvdW5kXG4gIDwvZGl2PlxuICA8IS0tIFNlbnRpbmVsIGVsZW1lbnQgZm9yIGluZmluaXRlIHNjcm9sbCAtLT5cbiAgPGRpdiAqbmdJZj1cImhhc01vcmVcIiBjbGFzcz1cImxvYWQtbW9yZS1zZW50aW5lbCBjcWEtZmxleCBjcWEtZmxleC1jb2wgY3FhLWl0ZW1zLWNlbnRlciBjcWEtanVzdGlmeS1jZW50ZXIgY3FhLWdhcC0zIGNxYS1weS0yXCI+XG4gICAgPHN2ZyBjbGFzcz1cImNxYS1hbmltYXRlLXNwaW4gY3FhLWgtNiBjcWEtdy02IGNxYS10ZXh0LVsjM0Y0M0VFXVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiBmaWxsPVwibm9uZVwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIj5cbiAgICAgIDxjaXJjbGUgY2xhc3M9XCJjcWEtb3BhY2l0eS0yNVwiIGN4PVwiMTJcIiBjeT1cIjEyXCIgcj1cIjEwXCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgc3Ryb2tlLXdpZHRoPVwiNFwiPjwvY2lyY2xlPlxuICAgICAgPHBhdGggY2xhc3M9XCJjcWEtb3BhY2l0eS03NVwiIGZpbGw9XCJjdXJyZW50Q29sb3JcIiBkPVwiTTQgMTJhOCA4IDAgMDE4LThWMEM1LjM3MyAwIDAgNS4zNzMgMCAxMmg0em0yIDUuMjkxQTcuOTYyIDcuOTYyIDAgMDE0IDEySDBjMCAzLjA0MiAxLjEzNSA1LjgyNCAzIDcuOTM4bDMtMi42NDd6XCI+PC9wYXRoPlxuICAgIDwvc3ZnPlxuICAgIDxzcGFuIGNsYXNzPVwiY3FhLXRleHQtWzEycHhdIGNxYS10ZXh0LVsjNkI3MjgwXVwiPnt7IGl0ZW1zLmxlbmd0aCA9PT0gMCA/ICdMb2FkaW5nLi4uJyA6ICdMb2FkaW5nIG1vcmUuLi4nIH19PC9zcGFuPlxuICA8L2Rpdj5cbjwvZGl2PlxuXG4iXX0=
|
|
@@ -2,4 +2,4 @@ import { InjectionToken } from '@angular/core';
|
|
|
2
2
|
/** Sentinel returned from afterClosed() when user clicked "Edit in depth". */
|
|
3
3
|
export const ELEMENT_POPUP_EDIT_IN_DEPTH = Symbol('ElementPopupEditInDepth');
|
|
4
4
|
export const ELEMENT_POPUP_DATA = new InjectionToken('ELEMENT_POPUP_DATA');
|
|
5
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
5
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWxlbWVudC1wb3B1cC1kYXRhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi90ZXN0LWNhc2UtZGV0YWlscy9lbGVtZW50LXBvcHVwL2VsZW1lbnQtcG9wdXAtZGF0YS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBOEIvQyw4RUFBOEU7QUFDOUUsTUFBTSxDQUFDLE1BQU0sMkJBQTJCLEdBQUcsTUFBTSxDQUFDLHlCQUF5QixDQUFDLENBQUM7QUFFN0UsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQUcsSUFBSSxjQUFjLENBQ2xELG9CQUFvQixDQUNyQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiXG5pbXBvcnQgeyBJbmplY3Rpb25Ub2tlbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEVsZW1lbnRQb3B1cERhdGEge1xuICBlbGVtZW50PzogRWxlbWVudFBvcHVwRGF0YUVsZW1lbnRzO1xuICBsYWJlbHM6IHN0cmluZ1tdO1xuICBlbGVtZW50czogRWxlbWVudFBvcHVwRGF0YUVsZW1lbnRzW107XG4gIGRlc2NyaXB0aW9uOiBzdHJpbmc7XG4gIGhlbHBVcmw/OiBzdHJpbmc7XG59XG5cblxuLyoqIFNjcmVlbiBuYW1lIG9iamVjdCBmcm9tIEFQSSAoZS5nLiBsaXN0IGVsZW1lbnRzIHJlc3BvbnNlKSAqL1xuZXhwb3J0IGludGVyZmFjZSBFbGVtZW50UG9wdXBTY3JlZW5OYW1lT2JqIHtcbiAgaWQ/OiBudW1iZXI7XG4gIHdvcmtzcGFjZVZlcnNpb25JZD86IG51bWJlcjtcbiAgbmFtZTogc3RyaW5nO1xuICB1cmw/OiBzdHJpbmc7XG4gIGVsZW1lbnRDb3VudD86IG51bWJlciB8IG51bGw7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRWxlbWVudFBvcHVwRGF0YUVsZW1lbnRzIHtcbiAgbGFiZWxzOiBzdHJpbmdbXTtcbiAgdGl0bGU6IHN0cmluZztcbiAgc2VsZWN0b3I/OiBzdHJpbmc7XG4gIGlkPzogbnVtYmVyO1xuICBzY3JlZW5OYW1lPzogc3RyaW5nO1xuICBzY3JlZW5OYW1lSWQ/OiBudW1iZXI7XG4gIC8qKiBTY3JlZW4gbmFtZSBvYmplY3QgZnJvbSBBUEk7IGRpc3BsYXkgbmFtZSB2aWEgc2NyZWVuTmFtZU9iai5uYW1lICovXG4gIHNjcmVlbk5hbWVPYmo/OiBFbGVtZW50UG9wdXBTY3JlZW5OYW1lT2JqO1xufVxuLyoqIFNlbnRpbmVsIHJldHVybmVkIGZyb20gYWZ0ZXJDbG9zZWQoKSB3aGVuIHVzZXIgY2xpY2tlZCBcIkVkaXQgaW4gZGVwdGhcIi4gKi9cbmV4cG9ydCBjb25zdCBFTEVNRU5UX1BPUFVQX0VESVRfSU5fREVQVEggPSBTeW1ib2woJ0VsZW1lbnRQb3B1cEVkaXRJbkRlcHRoJyk7XG5cbmV4cG9ydCBjb25zdCBFTEVNRU5UX1BPUFVQX0RBVEEgPSBuZXcgSW5qZWN0aW9uVG9rZW48RWxlbWVudFBvcHVwRGF0YT4oXG4gICdFTEVNRU5UX1BPUFVQX0RBVEEnXG4pO1xuIl19
|
|
@@ -221,10 +221,10 @@ export class ElementPopupComponent {
|
|
|
221
221
|
}
|
|
222
222
|
}
|
|
223
223
|
ElementPopupComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: ElementPopupComponent, deps: [{ token: CUSTOM_ELEMENT_POPUP_REF, optional: true }, { token: ELEMENT_POPUP_DATA, optional: true }, { token: i0.ChangeDetectorRef, optional: true }], target: i0.ɵɵFactoryTarget.Component });
|
|
224
|
-
ElementPopupComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: ElementPopupComponent, selector: "cqa-element-popup", inputs: { value: "value", helpUrl: "helpUrl", labels: "labels", element: "element", elements: "elements", enableForm: "enableForm", isOnRecord: "isOnRecord", hasMoreElements: "hasMoreElements", elementId: "elementId", screenNameOptions: "screenNameOptions", hasMoreScreenNames: "hasMoreScreenNames", isLoadingScreenNames: "isLoadingScreenNames", suggestedTags: "suggestedTags", isElementLoading: "isElementLoading", recentSearchedItems: "recentSearchedItems" }, outputs: { apply: "apply", cancel: "cancel", editInDepth: "editInDepth", searchElement: "searchElement", recentItemClick: "recentItemClick", loadMoreElements: "loadMoreElements", createElement: "createElement", updateElement: "updateElement", createScreenNameRequest: "createScreenNameRequest", searchScreenName: "searchScreenName", loadMoreScreenNames: "loadMoreScreenNames", formOpenRequest: "formOpenRequest", elementSelect: "elementSelect", toggleRecord: "toggleRecord" }, host: { classAttribute: "cqa-ui-root" }, viewQueries: [{ propertyName: "elementFormComponent", first: true, predicate: ElementFormComponent, descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div\n class=\"cqa-bg-white cqa-rounded-[12px] cqa-shadow-lg cqa-border cqa-border-solid cqa-border-[#E5E7EB] cqa-w-[500px] cqa-flex cqa-flex-col cqa-gap-[12px] cqa-p-2 cqa-box-border\" style=\"width: 100%;\">\n <!-- Header: title left; Need help? + close icon right -->\n <div class=\"cqa-flex cqa-items-center cqa-justify-between cqa-gap-2 cqa-px-4\">\n <h2 class=\"cqa-text-[16px] cqa-leading-[24px] cqa-font-bold cqa-text-[#111827] cqa-m-0 cqa-font-[600]\">\n Element\n </h2>\n <div class=\"cqa-flex cqa-items-center cqa-gap-2\">\n <!-- Need help? with custom tooltip (works inside overlay) -->\n <div class=\"cqa-relative cqa-inline-flex\"\n (mouseenter)=\"showHelpTooltip = true\" (mouseleave)=\"showHelpTooltip = false\">\n <a *ngIf=\"helpUrl\" href=\"#\" (click)=\"onHelp($event)\"\n class=\"cqa-flex cqa-items-center cqa-gap-1 cqa-text-[#3F43EE] cqa-text-[12px] cqa-leading-[21px] cqa-no-underline cqa-cursor-pointer\">\n <svg width=\"17\" height=\"16\" viewBox=\"0 0 17 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" class=\"cqa-flex-shrink-0\" aria-hidden=\"true\">\n <g clip-path=\"url(#help-icon-clip)\">\n <path d=\"M8.50033 14.6663C12.4123 14.6663 15.5837 11.6816 15.5837 7.99967C15.5837 4.31778 12.4123 1.33301 8.50033 1.33301C4.58831 1.33301 1.41699 4.31778 1.41699 7.99967C1.41699 11.6816 4.58831 14.6663 8.50033 14.6663Z\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <path d=\"M6.43848 6.00038C6.60501 5.55483 6.93371 5.17912 7.36636 4.9398C7.79901 4.70049 8.30769 4.61301 8.80231 4.69285C9.29693 4.7727 9.74556 5.01473 10.0687 5.37607C10.3919 5.7374 10.5688 6.19473 10.5681 6.66705C10.5681 8.00038 8.44306 8.66705 8.44306 8.66705\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <path d=\"M8.5 11.333H8.50966\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </g>\n <defs>\n <clipPath id=\"help-icon-clip\">\n <rect width=\"17\" height=\"16\" fill=\"white\"/>\n </clipPath>\n </defs>\n </svg>\n Need help ?\n </a>\n <span *ngIf=\"!helpUrl\" class=\"cqa-flex cqa-items-center cqa-gap-1.5 cqa-font-[500] cqa-text-[10px] cqa-cursor-default\">\n <svg width=\"17\" height=\"16\" viewBox=\"0 0 17 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" class=\"cqa-flex-shrink-0 cqa-text-[#3F43EE]\" aria-hidden=\"true\">\n <g clip-path=\"url(#help-icon-clip-nolink)\">\n <path d=\"M8.50033 14.6663C12.4123 14.6663 15.5837 11.6816 15.5837 7.99967C15.5837 4.31778 12.4123 1.33301 8.50033 1.33301C4.58831 1.33301 1.41699 4.31778 1.41699 7.99967C1.41699 11.6816 4.58831 14.6663 8.50033 14.6663Z\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <path d=\"M6.43848 6.00038C6.60501 5.55483 6.93371 5.17912 7.36636 4.9398C7.79901 4.70049 8.30769 4.61301 8.80231 4.69285C9.29693 4.7727 9.74556 5.01473 10.0687 5.37607C10.3919 5.7374 10.5688 6.19473 10.5681 6.66705C10.5681 8.00038 8.44306 8.66705 8.44306 8.66705\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <path d=\"M8.5 11.333H8.50966\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </g>\n <defs>\n <clipPath id=\"help-icon-clip-nolink\">\n <rect width=\"17\" height=\"16\" fill=\"white\"/>\n </clipPath>\n </defs>\n </svg>\n Need help ?\n </span>\n <!-- Custom tooltip (exact spec: 306\u00D720 content, 6px radius, #0A0A0A, no arrow) -->\n <div *ngIf=\"showHelpTooltip\" class=\"cqa-absolute cqa-pointer-events-none cqa-z-[100] cqa-top-[-24px] cqa-left-[-125px]\"\n role=\"tooltip\">\n <div class=\"cqa-text-white cqa-text-center cqa-whitespace-nowrap cqa-w-[306px] cqa-min-h-[20px] cqa-rounded-[6px] cqa-py-1 cqa-px-2 cqa-bg-[#0A0A0A] cqa-leading-[20px] cqa-text-[8px]\">\n {{ helpTooltipText }}\n </div>\n </div>\n </div>\n <cqa-button type=\"button\" variant=\"text\" btnSize=\"md\"\n [text]=\"''\"\n icon=\"close\"\n (clicked)=\"onClose()\"\n [customClass]=\"'cqa-min-h-[28px] cqa-min-w-[28px] cqa-p-1 cqa-text-[#6B7280] hover:cqa-bg-[#F3F4F6]'\"\n title=\"Close\"\n aria-label=\"Close\">\n </cqa-button>\n </div>\n </div>\n\n <!-- Line below header (full width of modal, no side margin) -->\n <div class=\"cqa--mx-2 cqa-w-[calc(100%+1rem)] cqa-flex-shrink-0\">\n <div class=\"cqa-h-px cqa-w-full cqa-bg-[#E5E7EB]\" role=\"presentation\"></div>\n </div>\n\n <ng-container *ngIf=\"enableForm && !isOnRecord\">\n <cqa-element-form\n #elementForm\n [elementId]=\"elementId\"\n [element]=\"element\"\n [screenNameOptions]=\"screenNameOptions\"\n [hasMoreScreenNames]=\"hasMoreScreenNames\"\n [isLoadingScreenNames]=\"isLoadingScreenNames\"\n [isElementLoading]=\"isElementLoading\"\n [isEditMode]=\"isEditMode\"\n [isCreateMode]=\"isCreateMode\"\n (createElement)=\"onElementFormCreate($event)\"\n (updateElement)=\"onElementFormUpdate($event)\"\n (createScreenNameRequest)=\"createScreenNameRequest.emit($event)\"\n (searchScreenName)=\"searchScreenName.emit($event)\"\n (loadMoreScreenNames)=\"loadMoreScreenNames.emit($event)\"\n (cancel)=\"onElementFormCancel()\"\n (editInDepth)=\"onEditInDepth()\">\n </cqa-element-form>\n </ng-container>\n\n<ng-container *ngIf=\"isOnRecord && !enableForm\">\n <div\n class=\"cqa-flex cqa-flex-col cqa-items-center cqa-justify-center cqa-text-center cqa-gap-3 cqa-pt-10\">\n\n <!-- Video Icon -->\n <div\n class=\"cqa-flex cqa-items-center cqa-justify-center cqa-w-[64px] cqa-h-[64px] cqa-rounded-full cqa-bg-[#FEE2E2]\">\n <svg width=\"32\" height=\"32\" viewBox=\"0 0 32 32\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M21.333 17.3333L28.297 21.9759C28.3974 22.0428 28.514 22.0811 28.6345 22.0868C28.7549 22.0926 28.8747 22.0656 28.981 22.0087C29.0873 21.9517 29.1762 21.8671 29.2382 21.7636C29.3002 21.6602 29.3329 21.5419 29.333 21.4213V10.4933C29.333 10.376 29.3021 10.2607 29.2434 10.1592C29.1846 10.0577 29.1001 9.97344 28.9984 9.91501C28.8967 9.85658 28.7814 9.82602 28.6641 9.82642C28.5468 9.82682 28.4317 9.85816 28.3303 9.91728L21.333 13.9999\" stroke=\"#E7000B\" stroke-width=\"2.66667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <path d=\"M18.667 8H5.33366C3.8609 8 2.66699 9.19391 2.66699 10.6667V21.3333C2.66699 22.8061 3.8609 24 5.33366 24H18.667C20.1398 24 21.3337 22.8061 21.3337 21.3333V10.6667C21.3337 9.19391 20.1398 8 18.667 8Z\" stroke=\"#E7000B\" stroke-width=\"2.66667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n \n </div>\n\n <!-- Title -->\n <h4 class=\"cqa-m-0 cqa-text-[16px] cqa-leading-[24px] cqa-font-[600] cqa-text-[#0A0A0A]\">\n Recording Mode Active\n </h4>\n\n <!-- Subtitle -->\n <p class=\"cqa-m-0 cqa-text-[12px] cqa-leading-[18px] cqa-text-[#6B7280]\">\n Click on any element in the browser to capture it\n </p>\n </div>\n\n <!-- Footer -->\n <div class=\"cqa-flex cqa-justify-center cqa-pb-4\">\n <cqa-button\n variant=\"outlined\"\n btnSize=\"lg\"\n [text]=\"'Cancel Recording'\"\n (clicked)=\"onToggleRecordClick()\"\n [customClass]=\"'cqa-text-[14px] cqa-px-16 cqa-py-[9px] cqa-border-[#414146]'\">\n </cqa-button>\n </div>\n</ng-container>\n\n\n <ng-container *ngIf=\"!enableForm && !isOnRecord\">\n<div class=\"cqa-flex cqa-flex-col cqa-gap-4 cqa-px-1 cqa-pt-3\">\n\n <!-- Selected -->\n <div class=\"cqa-flex cqa-flex-col cqa-gap-2\">\n <span class=\"cqa-text-[12px] cqa-text-[#6B7280]\">Selected</span>\n\n <div\n class=\"cqa-flex cqa-items-center cqa-justify-between\n cqa-bg-[#FFFBEB] cqa-border cqa-border-[#fadfba]\n cqa-rounded-lg cqa-p-3 cqa-border-solid cqa-gap-3\">\n\n <div class=\"cqa-flex cqa-px-3 cqa-py-2 cqa-rounded-lg cqa-flex-col cqa-gap-0.5 cqa-bg-[#f5f5f5] cqa-flex-1\">\n <div class=\"cqa-flex cqa-items-center cqa-justify-between cqa-gap-2 cqa-min-w-0\">\n <span class=\"cqa-text-[14px] cqa-font-[600] cqa-text-[#111827] cqa-min-w-0 cqa-flex-1\"\n style=\"display: -webkit-box; -webkit-line-clamp: 2; line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; text-overflow: ellipsis;\"\n [matTooltip]=\"element.title\"\n matTooltipPosition=\"above\">\n {{element.title}}\n </span>\n\n <div class=\"cqa-flex cqa-gap-2 cqa-max-w-[80px] cqa-justify-end cqa-flex-wrap\">\n <span *ngFor=\"let l of element.labels\"\n class=\"cqa-text-[10px] cqa-px-1.5 cqa-py-0.5\n cqa-rounded cqa-bg-[#EEF2FF] cqa-text-[#3F43EE] cqa-rounded-full cqa-px-2 cqa-bg-[#eff6ff] cqa-border cqa-border-solid cqa-border-[#c8e0ff]\"\n style=\"display: -webkit-box; -webkit-line-clamp: 2; line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; text-overflow: ellipsis;\"\n [matTooltip]=\"l\"\n matTooltipPosition=\"above\">\n {{l}}\n </span>\n </div>\n </div>\n\n <span class=\"cqa-text-[10px] cqa-text-[#6B7280]\">\n {{element.selector}}\n </span>\n </div>\n <cqa-button variant=\"outlined\" icon=\"edit\" btnSize=\"lg\" [text]=\"'Edit'\" [fullWidth]=\"true\" (clicked)=\"toggleForm()\"\n [customClass]=\"'cqa-text-[14px] cqa-py-[9px] cqa-border-[#414146]'\"></cqa-button>\n </div>\n </div>\n\n <!-- Recent -->\n <div class=\"cqa-flex cqa-flex-col cqa-gap-2\" *ngIf=\"recentSearchedItems.length > 0\">\n <span class=\"cqa-text-[12px] cqa-text-[#6B7280]\">Recent</span>\n\n <div class=\"cqa-flex cqa-gap-2 cqa-overflow-x-auto cqa-scrollbar-thin cqa-scrollbar-track-transparent cqa-scrollbar-thumb-[#E5E7EB] cqa-scrollbar-thumb-rounded-full cqa-scrollbar-thumb-hover:cqa-bg-[#D1D5DB]\">\n\n <div *ngFor=\"let item of recentSearchedItems\" \n class=\"cqa-cursor-pointer cqa-inline-block\"\n (click)=\"onRecentItemClick(item)\">\n <cqa-badge \n class=\"cqa-element-badge cqa-mb-2 cqa-chip !cqa-bg-white !cqa-text-[12px] cqa-whitespace-nowrap\" \n [label]=\"item\"></cqa-badge>\n </div>\n </div>\n </div>\n\n <!-- Element Library -->\n <div class=\"cqa-flex cqa-flex-col cqa-gap-2\">\n <span class=\"cqa-text-[12px] cqa-text-[#6B7280]\">Element Library</span>\n <cqa-search-bar [fullWidth]=\"true\" [value]=\"searchValue\" placeholder=\"Search library\" (valueChange)=\"search($event)\"></cqa-search-bar> \n </div>\n\n <cqa-element-list \n [items]=\"elements\"\n [titleKey]=\"'title'\"\n [selectorKey]=\"'selector'\"\n [labelsKey]=\"'labels'\"\n [maxHeight]=\"'200px'\"\n [hasMore]=\"hasMoreElements\"\n (itemClick)=\"onElementClick($event)\"\n (loadMore)=\"onLoadMoreElements()\">\n </cqa-element-list>\n</div>\n\n\n <!-- Footer: Cancel, Apply (full width in one row) -->\n <div class=\"cqa-flex cqa-flex-col cqa-gap-3\">\n <div class=\"cqa-flex cqa-items-stretch cqa-gap-2 cqa-w-full\">\n <div class=\"cqa-flex-1 cqa-min-w-0\">\n <cqa-button variant=\"outlined\" icon=\"radio_button_checked\" btnSize=\"lg\" [text]=\"'Record'\" [fullWidth]=\"true\" (clicked)=\"onToggleRecordClick()\"\n [customClass]=\"'cqa-text-[14px] cqa-py-[9px] cqa-border-[#414146]'\"></cqa-button>\n </div>\n <div class=\"cqa-flex-1 cqa-min-w-0\">\n <cqa-button variant=\"outlined\" icon=\"add\" btnSize=\"lg\" [text]=\"'Create New'\" [fullWidth]=\"true\" (clicked)=\"openCreateForm()\"\n [customClass]=\"'cqa-text-[14px] cqa-py-[9px] cqa-border-[#414146]'\"></cqa-button>\n </div>\n </div>\n </div>\n </ng-container>\n\n</div>\n", components: [{ type: i1.ButtonComponent, selector: "cqa-button", inputs: ["variant", "btnSize", "disabled", "icon", "iconPosition", "fullWidth", "iconColor", "type", "text", "customClass", "inlineStyles", "tooltip", "tooltipPosition"], outputs: ["clicked"] }, { type: i2.ElementFormComponent, selector: "cqa-element-form", inputs: ["elementId", "element", "screenNameOptions", "hasMoreScreenNames", "isLoadingScreenNames", "isElementLoading", "isEditMode", "isCreateMode", "isEditInDepthAvailable"], outputs: ["createElement", "updateElement", "createScreenNameRequest", "searchScreenName", "loadMoreScreenNames", "cancel", "editInDepth"] }, { type: i3.BadgeComponent, selector: "cqa-badge", inputs: ["type", "label", "icon", "iconLibrary", "variant", "size", "backgroundColor", "textColor", "borderColor", "iconBackgroundColor", "iconColor", "iconSize", "inlineStyles", "key", "value", "keyTextColor", "valueTextColor", "isLoading", "fullWidth", "centerContent"] }, { type: i4.SearchBarComponent, selector: "cqa-search-bar", inputs: ["placeholder", "value", "disabled", "showClear", "ariaLabel", "autoFocus", "size", "fullWidth"], outputs: ["valueChange", "search", "cleared"] }, { type: i5.ElementListComponent, selector: "cqa-element-list", inputs: ["items", "titleKey", "selectorKey", "labelsKey", "maxHeight", "hasMore"], outputs: ["itemClick", "loadMore"] }], directives: [{ type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i7.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { type: i6.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
224
|
+
ElementPopupComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: ElementPopupComponent, selector: "cqa-element-popup", inputs: { value: "value", helpUrl: "helpUrl", labels: "labels", element: "element", elements: "elements", enableForm: "enableForm", isOnRecord: "isOnRecord", hasMoreElements: "hasMoreElements", elementId: "elementId", screenNameOptions: "screenNameOptions", hasMoreScreenNames: "hasMoreScreenNames", isLoadingScreenNames: "isLoadingScreenNames", suggestedTags: "suggestedTags", isElementLoading: "isElementLoading", recentSearchedItems: "recentSearchedItems" }, outputs: { apply: "apply", cancel: "cancel", editInDepth: "editInDepth", searchElement: "searchElement", recentItemClick: "recentItemClick", loadMoreElements: "loadMoreElements", createElement: "createElement", updateElement: "updateElement", createScreenNameRequest: "createScreenNameRequest", searchScreenName: "searchScreenName", loadMoreScreenNames: "loadMoreScreenNames", formOpenRequest: "formOpenRequest", elementSelect: "elementSelect", toggleRecord: "toggleRecord" }, host: { classAttribute: "cqa-ui-root" }, viewQueries: [{ propertyName: "elementFormComponent", first: true, predicate: ElementFormComponent, descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div\n class=\"cqa-bg-white cqa-rounded-[12px] cqa-shadow-lg cqa-border cqa-border-solid cqa-border-[#E5E7EB] cqa-w-[500px] cqa-flex cqa-flex-col cqa-gap-[12px] cqa-p-2 cqa-box-border\" style=\"width: 100%;\">\n <!-- Header: title left; Need help? + close icon right -->\n <div class=\"cqa-flex cqa-items-center cqa-justify-between cqa-gap-2 cqa-px-4\">\n <h2 class=\"cqa-text-[16px] cqa-leading-[24px] cqa-font-bold cqa-text-[#111827] cqa-m-0 cqa-font-[600]\">\n Element\n </h2>\n <div class=\"cqa-flex cqa-items-center cqa-gap-2\">\n <!-- Need help? with custom tooltip (works inside overlay) -->\n <div class=\"cqa-relative cqa-inline-flex\"\n (mouseenter)=\"showHelpTooltip = true\" (mouseleave)=\"showHelpTooltip = false\">\n <a *ngIf=\"helpUrl\" href=\"#\" (click)=\"onHelp($event)\"\n class=\"cqa-flex cqa-items-center cqa-gap-1 cqa-text-[#3F43EE] cqa-text-[12px] cqa-leading-[21px] cqa-no-underline cqa-cursor-pointer\">\n <svg width=\"17\" height=\"16\" viewBox=\"0 0 17 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" class=\"cqa-flex-shrink-0\" aria-hidden=\"true\">\n <g clip-path=\"url(#help-icon-clip)\">\n <path d=\"M8.50033 14.6663C12.4123 14.6663 15.5837 11.6816 15.5837 7.99967C15.5837 4.31778 12.4123 1.33301 8.50033 1.33301C4.58831 1.33301 1.41699 4.31778 1.41699 7.99967C1.41699 11.6816 4.58831 14.6663 8.50033 14.6663Z\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <path d=\"M6.43848 6.00038C6.60501 5.55483 6.93371 5.17912 7.36636 4.9398C7.79901 4.70049 8.30769 4.61301 8.80231 4.69285C9.29693 4.7727 9.74556 5.01473 10.0687 5.37607C10.3919 5.7374 10.5688 6.19473 10.5681 6.66705C10.5681 8.00038 8.44306 8.66705 8.44306 8.66705\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <path d=\"M8.5 11.333H8.50966\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </g>\n <defs>\n <clipPath id=\"help-icon-clip\">\n <rect width=\"17\" height=\"16\" fill=\"white\"/>\n </clipPath>\n </defs>\n </svg>\n Need help ?\n </a>\n <span *ngIf=\"!helpUrl\" class=\"cqa-flex cqa-items-center cqa-gap-1.5 cqa-font-[500] cqa-text-[10px] cqa-cursor-default\">\n <svg width=\"17\" height=\"16\" viewBox=\"0 0 17 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" class=\"cqa-flex-shrink-0 cqa-text-[#3F43EE]\" aria-hidden=\"true\">\n <g clip-path=\"url(#help-icon-clip-nolink)\">\n <path d=\"M8.50033 14.6663C12.4123 14.6663 15.5837 11.6816 15.5837 7.99967C15.5837 4.31778 12.4123 1.33301 8.50033 1.33301C4.58831 1.33301 1.41699 4.31778 1.41699 7.99967C1.41699 11.6816 4.58831 14.6663 8.50033 14.6663Z\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <path d=\"M6.43848 6.00038C6.60501 5.55483 6.93371 5.17912 7.36636 4.9398C7.79901 4.70049 8.30769 4.61301 8.80231 4.69285C9.29693 4.7727 9.74556 5.01473 10.0687 5.37607C10.3919 5.7374 10.5688 6.19473 10.5681 6.66705C10.5681 8.00038 8.44306 8.66705 8.44306 8.66705\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <path d=\"M8.5 11.333H8.50966\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </g>\n <defs>\n <clipPath id=\"help-icon-clip-nolink\">\n <rect width=\"17\" height=\"16\" fill=\"white\"/>\n </clipPath>\n </defs>\n </svg>\n Need help ?\n </span>\n <!-- Custom tooltip (exact spec: 306\u00D720 content, 6px radius, #0A0A0A, no arrow) -->\n <div *ngIf=\"showHelpTooltip\" class=\"cqa-absolute cqa-pointer-events-none cqa-z-[100] cqa-top-[-24px] cqa-left-[-125px]\"\n role=\"tooltip\">\n <div class=\"cqa-text-white cqa-text-center cqa-whitespace-nowrap cqa-w-[306px] cqa-min-h-[20px] cqa-rounded-[6px] cqa-py-1 cqa-px-2 cqa-bg-[#0A0A0A] cqa-leading-[20px] cqa-text-[8px]\">\n {{ helpTooltipText }}\n </div>\n </div>\n </div>\n <cqa-button type=\"button\" variant=\"text\" btnSize=\"md\"\n [text]=\"''\"\n icon=\"close\"\n (clicked)=\"onClose()\"\n [customClass]=\"'cqa-min-h-[28px] cqa-min-w-[28px] cqa-p-1 cqa-text-[#6B7280] hover:cqa-bg-[#F3F4F6]'\"\n title=\"Close\"\n aria-label=\"Close\">\n </cqa-button>\n </div>\n </div>\n\n <!-- Line below header (full width of modal, no side margin) -->\n <div class=\"cqa--mx-2 cqa-w-[calc(100%+1rem)] cqa-flex-shrink-0\">\n <div class=\"cqa-h-px cqa-w-full cqa-bg-[#E5E7EB]\" role=\"presentation\"></div>\n </div>\n\n <ng-container *ngIf=\"enableForm && !isOnRecord\">\n <cqa-element-form\n #elementForm\n [elementId]=\"elementId\"\n [element]=\"element\"\n [screenNameOptions]=\"screenNameOptions\"\n [hasMoreScreenNames]=\"hasMoreScreenNames\"\n [isLoadingScreenNames]=\"isLoadingScreenNames\"\n [isElementLoading]=\"isElementLoading\"\n [isEditMode]=\"isEditMode\"\n [isCreateMode]=\"isCreateMode\"\n (createElement)=\"onElementFormCreate($event)\"\n (updateElement)=\"onElementFormUpdate($event)\"\n (createScreenNameRequest)=\"createScreenNameRequest.emit($event)\"\n (searchScreenName)=\"searchScreenName.emit($event)\"\n (loadMoreScreenNames)=\"loadMoreScreenNames.emit($event)\"\n (cancel)=\"onElementFormCancel()\"\n (editInDepth)=\"onEditInDepth()\">\n </cqa-element-form>\n </ng-container>\n\n<ng-container *ngIf=\"isOnRecord && !enableForm\">\n <div\n class=\"cqa-flex cqa-flex-col cqa-items-center cqa-justify-center cqa-text-center cqa-gap-3 cqa-pt-10\">\n\n <!-- Video Icon -->\n <div\n class=\"cqa-flex cqa-items-center cqa-justify-center cqa-w-[64px] cqa-h-[64px] cqa-rounded-full cqa-bg-[#FEE2E2]\">\n <svg width=\"32\" height=\"32\" viewBox=\"0 0 32 32\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M21.333 17.3333L28.297 21.9759C28.3974 22.0428 28.514 22.0811 28.6345 22.0868C28.7549 22.0926 28.8747 22.0656 28.981 22.0087C29.0873 21.9517 29.1762 21.8671 29.2382 21.7636C29.3002 21.6602 29.3329 21.5419 29.333 21.4213V10.4933C29.333 10.376 29.3021 10.2607 29.2434 10.1592C29.1846 10.0577 29.1001 9.97344 28.9984 9.91501C28.8967 9.85658 28.7814 9.82602 28.6641 9.82642C28.5468 9.82682 28.4317 9.85816 28.3303 9.91728L21.333 13.9999\" stroke=\"#E7000B\" stroke-width=\"2.66667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <path d=\"M18.667 8H5.33366C3.8609 8 2.66699 9.19391 2.66699 10.6667V21.3333C2.66699 22.8061 3.8609 24 5.33366 24H18.667C20.1398 24 21.3337 22.8061 21.3337 21.3333V10.6667C21.3337 9.19391 20.1398 8 18.667 8Z\" stroke=\"#E7000B\" stroke-width=\"2.66667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n \n </div>\n\n <!-- Title -->\n <h4 class=\"cqa-m-0 cqa-text-[16px] cqa-leading-[24px] cqa-font-[600] cqa-text-[#0A0A0A]\">\n Recording Mode Active\n </h4>\n\n <!-- Subtitle -->\n <p class=\"cqa-m-0 cqa-text-[12px] cqa-leading-[18px] cqa-text-[#6B7280]\">\n Click on any element in the browser to capture it\n </p>\n </div>\n\n <!-- Footer -->\n <div class=\"cqa-flex cqa-justify-center cqa-pb-4\">\n <cqa-button\n variant=\"outlined\"\n btnSize=\"lg\"\n [text]=\"'Cancel Recording'\"\n (clicked)=\"onToggleRecordClick()\"\n [customClass]=\"'cqa-text-[14px] cqa-px-16 cqa-py-[9px] cqa-border-[#414146]'\">\n </cqa-button>\n </div>\n</ng-container>\n\n\n <ng-container *ngIf=\"!enableForm && !isOnRecord\">\n<div class=\"cqa-flex cqa-flex-col cqa-gap-4 cqa-px-1 cqa-pt-3\">\n\n <!-- Selected -->\n <div class=\"cqa-flex cqa-flex-col cqa-gap-2\">\n <span class=\"cqa-text-[12px] cqa-text-[#6B7280]\">Selected</span>\n\n <div\n class=\"cqa-flex cqa-items-center cqa-justify-between\n cqa-bg-[#FFFBEB] cqa-border cqa-border-[#fadfba]\n cqa-rounded-lg cqa-p-3 cqa-border-solid cqa-gap-3\">\n\n <div class=\"cqa-flex cqa-px-3 cqa-py-2 cqa-rounded-lg cqa-flex-col cqa-gap-0.5 cqa-bg-[#f5f5f5] cqa-flex-1\">\n <div class=\"cqa-flex cqa-items-center cqa-justify-between cqa-gap-2 cqa-min-w-0\">\n <span class=\"cqa-text-[14px] cqa-font-[600] cqa-text-[#111827] cqa-min-w-0 cqa-flex-1\"\n style=\"display: -webkit-box; -webkit-line-clamp: 2; line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; text-overflow: ellipsis;\"\n [matTooltip]=\"element.title\"\n matTooltipPosition=\"above\">\n {{element.title}}\n </span>\n\n <div class=\"cqa-flex cqa-gap-2 cqa-max-w-[80px] cqa-justify-end cqa-flex-wrap\">\n <span *ngFor=\"let l of element.labels\"\n class=\"cqa-text-[10px] cqa-px-1.5 cqa-py-0.5\n cqa-rounded cqa-bg-[#EEF2FF] cqa-text-[#3F43EE] cqa-rounded-full cqa-px-2 cqa-bg-[#eff6ff] cqa-border cqa-border-solid cqa-border-[#c8e0ff]\"\n style=\"display: -webkit-box; -webkit-line-clamp: 2; line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; text-overflow: ellipsis;\"\n [matTooltip]=\"l\"\n matTooltipPosition=\"above\">\n {{l}}\n </span>\n </div>\n </div>\n\n <span class=\"cqa-text-[10px] cqa-text-[#6B7280]\">\n {{element.selector}}\n </span>\n </div>\n <cqa-button variant=\"outlined\" icon=\"edit\" btnSize=\"lg\" [text]=\"'Edit'\" [fullWidth]=\"true\" (clicked)=\"toggleForm()\"\n [customClass]=\"'cqa-text-[14px] cqa-py-[9px] cqa-border-[#414146]'\"></cqa-button>\n </div>\n </div>\n\n <!-- Recent -->\n <div class=\"cqa-flex cqa-flex-col cqa-gap-2\" *ngIf=\"recentSearchedItems.length > 0\">\n <span class=\"cqa-text-[12px] cqa-text-[#6B7280]\">Recent</span>\n\n <div class=\"cqa-flex cqa-gap-2 cqa-overflow-x-auto cqa-scrollbar-thin cqa-scrollbar-track-transparent cqa-scrollbar-thumb-[#E5E7EB] cqa-scrollbar-thumb-rounded-full cqa-scrollbar-thumb-hover:cqa-bg-[#D1D5DB]\">\n\n <div *ngFor=\"let item of recentSearchedItems\" \n class=\"cqa-cursor-pointer cqa-inline-block\"\n (click)=\"onRecentItemClick(item)\">\n <cqa-badge \n class=\"cqa-element-badge cqa-mb-2 cqa-chip !cqa-bg-white !cqa-text-[12px] cqa-whitespace-nowrap\" \n [label]=\"item\"></cqa-badge>\n </div>\n </div>\n </div>\n\n <!-- Element Library -->\n <div class=\"cqa-flex cqa-flex-col cqa-gap-2\">\n <span class=\"cqa-text-[12px] cqa-text-[#6B7280]\">Element Library</span>\n <cqa-search-bar [fullWidth]=\"true\" [value]=\"searchValue\" placeholder=\"Search library\" (valueChange)=\"search($event)\"></cqa-search-bar> \n </div>\n\n <cqa-element-list \n [items]=\"elements\"\n [selectedItem]=\"element\"\n [titleKey]=\"'title'\"\n [selectorKey]=\"'selector'\"\n [labelsKey]=\"'labels'\"\n [maxHeight]=\"'200px'\"\n [hasMore]=\"hasMoreElements\"\n (itemClick)=\"onElementClick($event)\"\n (loadMore)=\"onLoadMoreElements()\">\n </cqa-element-list>\n</div>\n\n\n <!-- Footer: Cancel, Apply (full width in one row) -->\n <div class=\"cqa-flex cqa-flex-col cqa-gap-3\">\n <div class=\"cqa-flex cqa-items-stretch cqa-gap-2 cqa-w-full\">\n <div class=\"cqa-flex-1 cqa-min-w-0\">\n <cqa-button variant=\"outlined\" icon=\"radio_button_checked\" btnSize=\"lg\" [text]=\"'Record'\" [fullWidth]=\"true\" (clicked)=\"onToggleRecordClick()\"\n [customClass]=\"'cqa-text-[14px] cqa-py-[9px] cqa-border-[#414146]'\"></cqa-button>\n </div>\n <div class=\"cqa-flex-1 cqa-min-w-0\">\n <cqa-button variant=\"outlined\" icon=\"add\" btnSize=\"lg\" [text]=\"'Create New'\" [fullWidth]=\"true\" (clicked)=\"openCreateForm()\"\n [customClass]=\"'cqa-text-[14px] cqa-py-[9px] cqa-border-[#414146]'\"></cqa-button>\n </div>\n </div>\n </div>\n </ng-container>\n\n</div>\n", components: [{ type: i1.ButtonComponent, selector: "cqa-button", inputs: ["variant", "btnSize", "disabled", "icon", "iconPosition", "fullWidth", "iconColor", "type", "text", "customClass", "inlineStyles", "tooltip", "tooltipPosition"], outputs: ["clicked"] }, { type: i2.ElementFormComponent, selector: "cqa-element-form", inputs: ["elementId", "element", "screenNameOptions", "hasMoreScreenNames", "isLoadingScreenNames", "isElementLoading", "isEditMode", "isCreateMode", "isEditInDepthAvailable"], outputs: ["createElement", "updateElement", "createScreenNameRequest", "searchScreenName", "loadMoreScreenNames", "cancel", "editInDepth"] }, { type: i3.BadgeComponent, selector: "cqa-badge", inputs: ["type", "label", "icon", "iconLibrary", "variant", "size", "backgroundColor", "textColor", "borderColor", "iconBackgroundColor", "iconColor", "iconSize", "inlineStyles", "key", "value", "keyTextColor", "valueTextColor", "isLoading", "fullWidth", "centerContent"] }, { type: i4.SearchBarComponent, selector: "cqa-search-bar", inputs: ["placeholder", "value", "disabled", "showClear", "ariaLabel", "autoFocus", "size", "fullWidth"], outputs: ["valueChange", "search", "cleared"] }, { type: i5.ElementListComponent, selector: "cqa-element-list", inputs: ["items", "titleKey", "selectorKey", "labelsKey", "screenNameObjectKey", "maxHeight", "selectedItem", "hasMore"], outputs: ["itemClick", "loadMore"] }], directives: [{ type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i7.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { type: i6.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
225
225
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: ElementPopupComponent, decorators: [{
|
|
226
226
|
type: Component,
|
|
227
|
-
args: [{ selector: 'cqa-element-popup', host: { class: 'cqa-ui-root' }, changeDetection: ChangeDetectionStrategy.OnPush, template: "<div\n class=\"cqa-bg-white cqa-rounded-[12px] cqa-shadow-lg cqa-border cqa-border-solid cqa-border-[#E5E7EB] cqa-w-[500px] cqa-flex cqa-flex-col cqa-gap-[12px] cqa-p-2 cqa-box-border\" style=\"width: 100%;\">\n <!-- Header: title left; Need help? + close icon right -->\n <div class=\"cqa-flex cqa-items-center cqa-justify-between cqa-gap-2 cqa-px-4\">\n <h2 class=\"cqa-text-[16px] cqa-leading-[24px] cqa-font-bold cqa-text-[#111827] cqa-m-0 cqa-font-[600]\">\n Element\n </h2>\n <div class=\"cqa-flex cqa-items-center cqa-gap-2\">\n <!-- Need help? with custom tooltip (works inside overlay) -->\n <div class=\"cqa-relative cqa-inline-flex\"\n (mouseenter)=\"showHelpTooltip = true\" (mouseleave)=\"showHelpTooltip = false\">\n <a *ngIf=\"helpUrl\" href=\"#\" (click)=\"onHelp($event)\"\n class=\"cqa-flex cqa-items-center cqa-gap-1 cqa-text-[#3F43EE] cqa-text-[12px] cqa-leading-[21px] cqa-no-underline cqa-cursor-pointer\">\n <svg width=\"17\" height=\"16\" viewBox=\"0 0 17 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" class=\"cqa-flex-shrink-0\" aria-hidden=\"true\">\n <g clip-path=\"url(#help-icon-clip)\">\n <path d=\"M8.50033 14.6663C12.4123 14.6663 15.5837 11.6816 15.5837 7.99967C15.5837 4.31778 12.4123 1.33301 8.50033 1.33301C4.58831 1.33301 1.41699 4.31778 1.41699 7.99967C1.41699 11.6816 4.58831 14.6663 8.50033 14.6663Z\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <path d=\"M6.43848 6.00038C6.60501 5.55483 6.93371 5.17912 7.36636 4.9398C7.79901 4.70049 8.30769 4.61301 8.80231 4.69285C9.29693 4.7727 9.74556 5.01473 10.0687 5.37607C10.3919 5.7374 10.5688 6.19473 10.5681 6.66705C10.5681 8.00038 8.44306 8.66705 8.44306 8.66705\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <path d=\"M8.5 11.333H8.50966\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </g>\n <defs>\n <clipPath id=\"help-icon-clip\">\n <rect width=\"17\" height=\"16\" fill=\"white\"/>\n </clipPath>\n </defs>\n </svg>\n Need help ?\n </a>\n <span *ngIf=\"!helpUrl\" class=\"cqa-flex cqa-items-center cqa-gap-1.5 cqa-font-[500] cqa-text-[10px] cqa-cursor-default\">\n <svg width=\"17\" height=\"16\" viewBox=\"0 0 17 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" class=\"cqa-flex-shrink-0 cqa-text-[#3F43EE]\" aria-hidden=\"true\">\n <g clip-path=\"url(#help-icon-clip-nolink)\">\n <path d=\"M8.50033 14.6663C12.4123 14.6663 15.5837 11.6816 15.5837 7.99967C15.5837 4.31778 12.4123 1.33301 8.50033 1.33301C4.58831 1.33301 1.41699 4.31778 1.41699 7.99967C1.41699 11.6816 4.58831 14.6663 8.50033 14.6663Z\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <path d=\"M6.43848 6.00038C6.60501 5.55483 6.93371 5.17912 7.36636 4.9398C7.79901 4.70049 8.30769 4.61301 8.80231 4.69285C9.29693 4.7727 9.74556 5.01473 10.0687 5.37607C10.3919 5.7374 10.5688 6.19473 10.5681 6.66705C10.5681 8.00038 8.44306 8.66705 8.44306 8.66705\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <path d=\"M8.5 11.333H8.50966\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </g>\n <defs>\n <clipPath id=\"help-icon-clip-nolink\">\n <rect width=\"17\" height=\"16\" fill=\"white\"/>\n </clipPath>\n </defs>\n </svg>\n Need help ?\n </span>\n <!-- Custom tooltip (exact spec: 306\u00D720 content, 6px radius, #0A0A0A, no arrow) -->\n <div *ngIf=\"showHelpTooltip\" class=\"cqa-absolute cqa-pointer-events-none cqa-z-[100] cqa-top-[-24px] cqa-left-[-125px]\"\n role=\"tooltip\">\n <div class=\"cqa-text-white cqa-text-center cqa-whitespace-nowrap cqa-w-[306px] cqa-min-h-[20px] cqa-rounded-[6px] cqa-py-1 cqa-px-2 cqa-bg-[#0A0A0A] cqa-leading-[20px] cqa-text-[8px]\">\n {{ helpTooltipText }}\n </div>\n </div>\n </div>\n <cqa-button type=\"button\" variant=\"text\" btnSize=\"md\"\n [text]=\"''\"\n icon=\"close\"\n (clicked)=\"onClose()\"\n [customClass]=\"'cqa-min-h-[28px] cqa-min-w-[28px] cqa-p-1 cqa-text-[#6B7280] hover:cqa-bg-[#F3F4F6]'\"\n title=\"Close\"\n aria-label=\"Close\">\n </cqa-button>\n </div>\n </div>\n\n <!-- Line below header (full width of modal, no side margin) -->\n <div class=\"cqa--mx-2 cqa-w-[calc(100%+1rem)] cqa-flex-shrink-0\">\n <div class=\"cqa-h-px cqa-w-full cqa-bg-[#E5E7EB]\" role=\"presentation\"></div>\n </div>\n\n <ng-container *ngIf=\"enableForm && !isOnRecord\">\n <cqa-element-form\n #elementForm\n [elementId]=\"elementId\"\n [element]=\"element\"\n [screenNameOptions]=\"screenNameOptions\"\n [hasMoreScreenNames]=\"hasMoreScreenNames\"\n [isLoadingScreenNames]=\"isLoadingScreenNames\"\n [isElementLoading]=\"isElementLoading\"\n [isEditMode]=\"isEditMode\"\n [isCreateMode]=\"isCreateMode\"\n (createElement)=\"onElementFormCreate($event)\"\n (updateElement)=\"onElementFormUpdate($event)\"\n (createScreenNameRequest)=\"createScreenNameRequest.emit($event)\"\n (searchScreenName)=\"searchScreenName.emit($event)\"\n (loadMoreScreenNames)=\"loadMoreScreenNames.emit($event)\"\n (cancel)=\"onElementFormCancel()\"\n (editInDepth)=\"onEditInDepth()\">\n </cqa-element-form>\n </ng-container>\n\n<ng-container *ngIf=\"isOnRecord && !enableForm\">\n <div\n class=\"cqa-flex cqa-flex-col cqa-items-center cqa-justify-center cqa-text-center cqa-gap-3 cqa-pt-10\">\n\n <!-- Video Icon -->\n <div\n class=\"cqa-flex cqa-items-center cqa-justify-center cqa-w-[64px] cqa-h-[64px] cqa-rounded-full cqa-bg-[#FEE2E2]\">\n <svg width=\"32\" height=\"32\" viewBox=\"0 0 32 32\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M21.333 17.3333L28.297 21.9759C28.3974 22.0428 28.514 22.0811 28.6345 22.0868C28.7549 22.0926 28.8747 22.0656 28.981 22.0087C29.0873 21.9517 29.1762 21.8671 29.2382 21.7636C29.3002 21.6602 29.3329 21.5419 29.333 21.4213V10.4933C29.333 10.376 29.3021 10.2607 29.2434 10.1592C29.1846 10.0577 29.1001 9.97344 28.9984 9.91501C28.8967 9.85658 28.7814 9.82602 28.6641 9.82642C28.5468 9.82682 28.4317 9.85816 28.3303 9.91728L21.333 13.9999\" stroke=\"#E7000B\" stroke-width=\"2.66667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <path d=\"M18.667 8H5.33366C3.8609 8 2.66699 9.19391 2.66699 10.6667V21.3333C2.66699 22.8061 3.8609 24 5.33366 24H18.667C20.1398 24 21.3337 22.8061 21.3337 21.3333V10.6667C21.3337 9.19391 20.1398 8 18.667 8Z\" stroke=\"#E7000B\" stroke-width=\"2.66667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n \n </div>\n\n <!-- Title -->\n <h4 class=\"cqa-m-0 cqa-text-[16px] cqa-leading-[24px] cqa-font-[600] cqa-text-[#0A0A0A]\">\n Recording Mode Active\n </h4>\n\n <!-- Subtitle -->\n <p class=\"cqa-m-0 cqa-text-[12px] cqa-leading-[18px] cqa-text-[#6B7280]\">\n Click on any element in the browser to capture it\n </p>\n </div>\n\n <!-- Footer -->\n <div class=\"cqa-flex cqa-justify-center cqa-pb-4\">\n <cqa-button\n variant=\"outlined\"\n btnSize=\"lg\"\n [text]=\"'Cancel Recording'\"\n (clicked)=\"onToggleRecordClick()\"\n [customClass]=\"'cqa-text-[14px] cqa-px-16 cqa-py-[9px] cqa-border-[#414146]'\">\n </cqa-button>\n </div>\n</ng-container>\n\n\n <ng-container *ngIf=\"!enableForm && !isOnRecord\">\n<div class=\"cqa-flex cqa-flex-col cqa-gap-4 cqa-px-1 cqa-pt-3\">\n\n <!-- Selected -->\n <div class=\"cqa-flex cqa-flex-col cqa-gap-2\">\n <span class=\"cqa-text-[12px] cqa-text-[#6B7280]\">Selected</span>\n\n <div\n class=\"cqa-flex cqa-items-center cqa-justify-between\n cqa-bg-[#FFFBEB] cqa-border cqa-border-[#fadfba]\n cqa-rounded-lg cqa-p-3 cqa-border-solid cqa-gap-3\">\n\n <div class=\"cqa-flex cqa-px-3 cqa-py-2 cqa-rounded-lg cqa-flex-col cqa-gap-0.5 cqa-bg-[#f5f5f5] cqa-flex-1\">\n <div class=\"cqa-flex cqa-items-center cqa-justify-between cqa-gap-2 cqa-min-w-0\">\n <span class=\"cqa-text-[14px] cqa-font-[600] cqa-text-[#111827] cqa-min-w-0 cqa-flex-1\"\n style=\"display: -webkit-box; -webkit-line-clamp: 2; line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; text-overflow: ellipsis;\"\n [matTooltip]=\"element.title\"\n matTooltipPosition=\"above\">\n {{element.title}}\n </span>\n\n <div class=\"cqa-flex cqa-gap-2 cqa-max-w-[80px] cqa-justify-end cqa-flex-wrap\">\n <span *ngFor=\"let l of element.labels\"\n class=\"cqa-text-[10px] cqa-px-1.5 cqa-py-0.5\n cqa-rounded cqa-bg-[#EEF2FF] cqa-text-[#3F43EE] cqa-rounded-full cqa-px-2 cqa-bg-[#eff6ff] cqa-border cqa-border-solid cqa-border-[#c8e0ff]\"\n style=\"display: -webkit-box; -webkit-line-clamp: 2; line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; text-overflow: ellipsis;\"\n [matTooltip]=\"l\"\n matTooltipPosition=\"above\">\n {{l}}\n </span>\n </div>\n </div>\n\n <span class=\"cqa-text-[10px] cqa-text-[#6B7280]\">\n {{element.selector}}\n </span>\n </div>\n <cqa-button variant=\"outlined\" icon=\"edit\" btnSize=\"lg\" [text]=\"'Edit'\" [fullWidth]=\"true\" (clicked)=\"toggleForm()\"\n [customClass]=\"'cqa-text-[14px] cqa-py-[9px] cqa-border-[#414146]'\"></cqa-button>\n </div>\n </div>\n\n <!-- Recent -->\n <div class=\"cqa-flex cqa-flex-col cqa-gap-2\" *ngIf=\"recentSearchedItems.length > 0\">\n <span class=\"cqa-text-[12px] cqa-text-[#6B7280]\">Recent</span>\n\n <div class=\"cqa-flex cqa-gap-2 cqa-overflow-x-auto cqa-scrollbar-thin cqa-scrollbar-track-transparent cqa-scrollbar-thumb-[#E5E7EB] cqa-scrollbar-thumb-rounded-full cqa-scrollbar-thumb-hover:cqa-bg-[#D1D5DB]\">\n\n <div *ngFor=\"let item of recentSearchedItems\" \n class=\"cqa-cursor-pointer cqa-inline-block\"\n (click)=\"onRecentItemClick(item)\">\n <cqa-badge \n class=\"cqa-element-badge cqa-mb-2 cqa-chip !cqa-bg-white !cqa-text-[12px] cqa-whitespace-nowrap\" \n [label]=\"item\"></cqa-badge>\n </div>\n </div>\n </div>\n\n <!-- Element Library -->\n <div class=\"cqa-flex cqa-flex-col cqa-gap-2\">\n <span class=\"cqa-text-[12px] cqa-text-[#6B7280]\">Element Library</span>\n <cqa-search-bar [fullWidth]=\"true\" [value]=\"searchValue\" placeholder=\"Search library\" (valueChange)=\"search($event)\"></cqa-search-bar> \n </div>\n\n <cqa-element-list \n [items]=\"elements\"\n [titleKey]=\"'title'\"\n [selectorKey]=\"'selector'\"\n [labelsKey]=\"'labels'\"\n [maxHeight]=\"'200px'\"\n [hasMore]=\"hasMoreElements\"\n (itemClick)=\"onElementClick($event)\"\n (loadMore)=\"onLoadMoreElements()\">\n </cqa-element-list>\n</div>\n\n\n <!-- Footer: Cancel, Apply (full width in one row) -->\n <div class=\"cqa-flex cqa-flex-col cqa-gap-3\">\n <div class=\"cqa-flex cqa-items-stretch cqa-gap-2 cqa-w-full\">\n <div class=\"cqa-flex-1 cqa-min-w-0\">\n <cqa-button variant=\"outlined\" icon=\"radio_button_checked\" btnSize=\"lg\" [text]=\"'Record'\" [fullWidth]=\"true\" (clicked)=\"onToggleRecordClick()\"\n [customClass]=\"'cqa-text-[14px] cqa-py-[9px] cqa-border-[#414146]'\"></cqa-button>\n </div>\n <div class=\"cqa-flex-1 cqa-min-w-0\">\n <cqa-button variant=\"outlined\" icon=\"add\" btnSize=\"lg\" [text]=\"'Create New'\" [fullWidth]=\"true\" (clicked)=\"openCreateForm()\"\n [customClass]=\"'cqa-text-[14px] cqa-py-[9px] cqa-border-[#414146]'\"></cqa-button>\n </div>\n </div>\n </div>\n </ng-container>\n\n</div>\n" }]
|
|
227
|
+
args: [{ selector: 'cqa-element-popup', host: { class: 'cqa-ui-root' }, changeDetection: ChangeDetectionStrategy.OnPush, template: "<div\n class=\"cqa-bg-white cqa-rounded-[12px] cqa-shadow-lg cqa-border cqa-border-solid cqa-border-[#E5E7EB] cqa-w-[500px] cqa-flex cqa-flex-col cqa-gap-[12px] cqa-p-2 cqa-box-border\" style=\"width: 100%;\">\n <!-- Header: title left; Need help? + close icon right -->\n <div class=\"cqa-flex cqa-items-center cqa-justify-between cqa-gap-2 cqa-px-4\">\n <h2 class=\"cqa-text-[16px] cqa-leading-[24px] cqa-font-bold cqa-text-[#111827] cqa-m-0 cqa-font-[600]\">\n Element\n </h2>\n <div class=\"cqa-flex cqa-items-center cqa-gap-2\">\n <!-- Need help? with custom tooltip (works inside overlay) -->\n <div class=\"cqa-relative cqa-inline-flex\"\n (mouseenter)=\"showHelpTooltip = true\" (mouseleave)=\"showHelpTooltip = false\">\n <a *ngIf=\"helpUrl\" href=\"#\" (click)=\"onHelp($event)\"\n class=\"cqa-flex cqa-items-center cqa-gap-1 cqa-text-[#3F43EE] cqa-text-[12px] cqa-leading-[21px] cqa-no-underline cqa-cursor-pointer\">\n <svg width=\"17\" height=\"16\" viewBox=\"0 0 17 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" class=\"cqa-flex-shrink-0\" aria-hidden=\"true\">\n <g clip-path=\"url(#help-icon-clip)\">\n <path d=\"M8.50033 14.6663C12.4123 14.6663 15.5837 11.6816 15.5837 7.99967C15.5837 4.31778 12.4123 1.33301 8.50033 1.33301C4.58831 1.33301 1.41699 4.31778 1.41699 7.99967C1.41699 11.6816 4.58831 14.6663 8.50033 14.6663Z\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <path d=\"M6.43848 6.00038C6.60501 5.55483 6.93371 5.17912 7.36636 4.9398C7.79901 4.70049 8.30769 4.61301 8.80231 4.69285C9.29693 4.7727 9.74556 5.01473 10.0687 5.37607C10.3919 5.7374 10.5688 6.19473 10.5681 6.66705C10.5681 8.00038 8.44306 8.66705 8.44306 8.66705\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <path d=\"M8.5 11.333H8.50966\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </g>\n <defs>\n <clipPath id=\"help-icon-clip\">\n <rect width=\"17\" height=\"16\" fill=\"white\"/>\n </clipPath>\n </defs>\n </svg>\n Need help ?\n </a>\n <span *ngIf=\"!helpUrl\" class=\"cqa-flex cqa-items-center cqa-gap-1.5 cqa-font-[500] cqa-text-[10px] cqa-cursor-default\">\n <svg width=\"17\" height=\"16\" viewBox=\"0 0 17 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" class=\"cqa-flex-shrink-0 cqa-text-[#3F43EE]\" aria-hidden=\"true\">\n <g clip-path=\"url(#help-icon-clip-nolink)\">\n <path d=\"M8.50033 14.6663C12.4123 14.6663 15.5837 11.6816 15.5837 7.99967C15.5837 4.31778 12.4123 1.33301 8.50033 1.33301C4.58831 1.33301 1.41699 4.31778 1.41699 7.99967C1.41699 11.6816 4.58831 14.6663 8.50033 14.6663Z\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <path d=\"M6.43848 6.00038C6.60501 5.55483 6.93371 5.17912 7.36636 4.9398C7.79901 4.70049 8.30769 4.61301 8.80231 4.69285C9.29693 4.7727 9.74556 5.01473 10.0687 5.37607C10.3919 5.7374 10.5688 6.19473 10.5681 6.66705C10.5681 8.00038 8.44306 8.66705 8.44306 8.66705\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <path d=\"M8.5 11.333H8.50966\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </g>\n <defs>\n <clipPath id=\"help-icon-clip-nolink\">\n <rect width=\"17\" height=\"16\" fill=\"white\"/>\n </clipPath>\n </defs>\n </svg>\n Need help ?\n </span>\n <!-- Custom tooltip (exact spec: 306\u00D720 content, 6px radius, #0A0A0A, no arrow) -->\n <div *ngIf=\"showHelpTooltip\" class=\"cqa-absolute cqa-pointer-events-none cqa-z-[100] cqa-top-[-24px] cqa-left-[-125px]\"\n role=\"tooltip\">\n <div class=\"cqa-text-white cqa-text-center cqa-whitespace-nowrap cqa-w-[306px] cqa-min-h-[20px] cqa-rounded-[6px] cqa-py-1 cqa-px-2 cqa-bg-[#0A0A0A] cqa-leading-[20px] cqa-text-[8px]\">\n {{ helpTooltipText }}\n </div>\n </div>\n </div>\n <cqa-button type=\"button\" variant=\"text\" btnSize=\"md\"\n [text]=\"''\"\n icon=\"close\"\n (clicked)=\"onClose()\"\n [customClass]=\"'cqa-min-h-[28px] cqa-min-w-[28px] cqa-p-1 cqa-text-[#6B7280] hover:cqa-bg-[#F3F4F6]'\"\n title=\"Close\"\n aria-label=\"Close\">\n </cqa-button>\n </div>\n </div>\n\n <!-- Line below header (full width of modal, no side margin) -->\n <div class=\"cqa--mx-2 cqa-w-[calc(100%+1rem)] cqa-flex-shrink-0\">\n <div class=\"cqa-h-px cqa-w-full cqa-bg-[#E5E7EB]\" role=\"presentation\"></div>\n </div>\n\n <ng-container *ngIf=\"enableForm && !isOnRecord\">\n <cqa-element-form\n #elementForm\n [elementId]=\"elementId\"\n [element]=\"element\"\n [screenNameOptions]=\"screenNameOptions\"\n [hasMoreScreenNames]=\"hasMoreScreenNames\"\n [isLoadingScreenNames]=\"isLoadingScreenNames\"\n [isElementLoading]=\"isElementLoading\"\n [isEditMode]=\"isEditMode\"\n [isCreateMode]=\"isCreateMode\"\n (createElement)=\"onElementFormCreate($event)\"\n (updateElement)=\"onElementFormUpdate($event)\"\n (createScreenNameRequest)=\"createScreenNameRequest.emit($event)\"\n (searchScreenName)=\"searchScreenName.emit($event)\"\n (loadMoreScreenNames)=\"loadMoreScreenNames.emit($event)\"\n (cancel)=\"onElementFormCancel()\"\n (editInDepth)=\"onEditInDepth()\">\n </cqa-element-form>\n </ng-container>\n\n<ng-container *ngIf=\"isOnRecord && !enableForm\">\n <div\n class=\"cqa-flex cqa-flex-col cqa-items-center cqa-justify-center cqa-text-center cqa-gap-3 cqa-pt-10\">\n\n <!-- Video Icon -->\n <div\n class=\"cqa-flex cqa-items-center cqa-justify-center cqa-w-[64px] cqa-h-[64px] cqa-rounded-full cqa-bg-[#FEE2E2]\">\n <svg width=\"32\" height=\"32\" viewBox=\"0 0 32 32\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M21.333 17.3333L28.297 21.9759C28.3974 22.0428 28.514 22.0811 28.6345 22.0868C28.7549 22.0926 28.8747 22.0656 28.981 22.0087C29.0873 21.9517 29.1762 21.8671 29.2382 21.7636C29.3002 21.6602 29.3329 21.5419 29.333 21.4213V10.4933C29.333 10.376 29.3021 10.2607 29.2434 10.1592C29.1846 10.0577 29.1001 9.97344 28.9984 9.91501C28.8967 9.85658 28.7814 9.82602 28.6641 9.82642C28.5468 9.82682 28.4317 9.85816 28.3303 9.91728L21.333 13.9999\" stroke=\"#E7000B\" stroke-width=\"2.66667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <path d=\"M18.667 8H5.33366C3.8609 8 2.66699 9.19391 2.66699 10.6667V21.3333C2.66699 22.8061 3.8609 24 5.33366 24H18.667C20.1398 24 21.3337 22.8061 21.3337 21.3333V10.6667C21.3337 9.19391 20.1398 8 18.667 8Z\" stroke=\"#E7000B\" stroke-width=\"2.66667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n \n </div>\n\n <!-- Title -->\n <h4 class=\"cqa-m-0 cqa-text-[16px] cqa-leading-[24px] cqa-font-[600] cqa-text-[#0A0A0A]\">\n Recording Mode Active\n </h4>\n\n <!-- Subtitle -->\n <p class=\"cqa-m-0 cqa-text-[12px] cqa-leading-[18px] cqa-text-[#6B7280]\">\n Click on any element in the browser to capture it\n </p>\n </div>\n\n <!-- Footer -->\n <div class=\"cqa-flex cqa-justify-center cqa-pb-4\">\n <cqa-button\n variant=\"outlined\"\n btnSize=\"lg\"\n [text]=\"'Cancel Recording'\"\n (clicked)=\"onToggleRecordClick()\"\n [customClass]=\"'cqa-text-[14px] cqa-px-16 cqa-py-[9px] cqa-border-[#414146]'\">\n </cqa-button>\n </div>\n</ng-container>\n\n\n <ng-container *ngIf=\"!enableForm && !isOnRecord\">\n<div class=\"cqa-flex cqa-flex-col cqa-gap-4 cqa-px-1 cqa-pt-3\">\n\n <!-- Selected -->\n <div class=\"cqa-flex cqa-flex-col cqa-gap-2\">\n <span class=\"cqa-text-[12px] cqa-text-[#6B7280]\">Selected</span>\n\n <div\n class=\"cqa-flex cqa-items-center cqa-justify-between\n cqa-bg-[#FFFBEB] cqa-border cqa-border-[#fadfba]\n cqa-rounded-lg cqa-p-3 cqa-border-solid cqa-gap-3\">\n\n <div class=\"cqa-flex cqa-px-3 cqa-py-2 cqa-rounded-lg cqa-flex-col cqa-gap-0.5 cqa-bg-[#f5f5f5] cqa-flex-1\">\n <div class=\"cqa-flex cqa-items-center cqa-justify-between cqa-gap-2 cqa-min-w-0\">\n <span class=\"cqa-text-[14px] cqa-font-[600] cqa-text-[#111827] cqa-min-w-0 cqa-flex-1\"\n style=\"display: -webkit-box; -webkit-line-clamp: 2; line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; text-overflow: ellipsis;\"\n [matTooltip]=\"element.title\"\n matTooltipPosition=\"above\">\n {{element.title}}\n </span>\n\n <div class=\"cqa-flex cqa-gap-2 cqa-max-w-[80px] cqa-justify-end cqa-flex-wrap\">\n <span *ngFor=\"let l of element.labels\"\n class=\"cqa-text-[10px] cqa-px-1.5 cqa-py-0.5\n cqa-rounded cqa-bg-[#EEF2FF] cqa-text-[#3F43EE] cqa-rounded-full cqa-px-2 cqa-bg-[#eff6ff] cqa-border cqa-border-solid cqa-border-[#c8e0ff]\"\n style=\"display: -webkit-box; -webkit-line-clamp: 2; line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; text-overflow: ellipsis;\"\n [matTooltip]=\"l\"\n matTooltipPosition=\"above\">\n {{l}}\n </span>\n </div>\n </div>\n\n <span class=\"cqa-text-[10px] cqa-text-[#6B7280]\">\n {{element.selector}}\n </span>\n </div>\n <cqa-button variant=\"outlined\" icon=\"edit\" btnSize=\"lg\" [text]=\"'Edit'\" [fullWidth]=\"true\" (clicked)=\"toggleForm()\"\n [customClass]=\"'cqa-text-[14px] cqa-py-[9px] cqa-border-[#414146]'\"></cqa-button>\n </div>\n </div>\n\n <!-- Recent -->\n <div class=\"cqa-flex cqa-flex-col cqa-gap-2\" *ngIf=\"recentSearchedItems.length > 0\">\n <span class=\"cqa-text-[12px] cqa-text-[#6B7280]\">Recent</span>\n\n <div class=\"cqa-flex cqa-gap-2 cqa-overflow-x-auto cqa-scrollbar-thin cqa-scrollbar-track-transparent cqa-scrollbar-thumb-[#E5E7EB] cqa-scrollbar-thumb-rounded-full cqa-scrollbar-thumb-hover:cqa-bg-[#D1D5DB]\">\n\n <div *ngFor=\"let item of recentSearchedItems\" \n class=\"cqa-cursor-pointer cqa-inline-block\"\n (click)=\"onRecentItemClick(item)\">\n <cqa-badge \n class=\"cqa-element-badge cqa-mb-2 cqa-chip !cqa-bg-white !cqa-text-[12px] cqa-whitespace-nowrap\" \n [label]=\"item\"></cqa-badge>\n </div>\n </div>\n </div>\n\n <!-- Element Library -->\n <div class=\"cqa-flex cqa-flex-col cqa-gap-2\">\n <span class=\"cqa-text-[12px] cqa-text-[#6B7280]\">Element Library</span>\n <cqa-search-bar [fullWidth]=\"true\" [value]=\"searchValue\" placeholder=\"Search library\" (valueChange)=\"search($event)\"></cqa-search-bar> \n </div>\n\n <cqa-element-list \n [items]=\"elements\"\n [selectedItem]=\"element\"\n [titleKey]=\"'title'\"\n [selectorKey]=\"'selector'\"\n [labelsKey]=\"'labels'\"\n [maxHeight]=\"'200px'\"\n [hasMore]=\"hasMoreElements\"\n (itemClick)=\"onElementClick($event)\"\n (loadMore)=\"onLoadMoreElements()\">\n </cqa-element-list>\n</div>\n\n\n <!-- Footer: Cancel, Apply (full width in one row) -->\n <div class=\"cqa-flex cqa-flex-col cqa-gap-3\">\n <div class=\"cqa-flex cqa-items-stretch cqa-gap-2 cqa-w-full\">\n <div class=\"cqa-flex-1 cqa-min-w-0\">\n <cqa-button variant=\"outlined\" icon=\"radio_button_checked\" btnSize=\"lg\" [text]=\"'Record'\" [fullWidth]=\"true\" (clicked)=\"onToggleRecordClick()\"\n [customClass]=\"'cqa-text-[14px] cqa-py-[9px] cqa-border-[#414146]'\"></cqa-button>\n </div>\n <div class=\"cqa-flex-1 cqa-min-w-0\">\n <cqa-button variant=\"outlined\" icon=\"add\" btnSize=\"lg\" [text]=\"'Create New'\" [fullWidth]=\"true\" (clicked)=\"openCreateForm()\"\n [customClass]=\"'cqa-text-[14px] cqa-py-[9px] cqa-border-[#414146]'\"></cqa-button>\n </div>\n </div>\n </div>\n </ng-container>\n\n</div>\n" }]
|
|
228
228
|
}], ctorParameters: function () { return [{ type: i8.ElementPopupRef, decorators: [{
|
|
229
229
|
type: Optional
|
|
230
230
|
}, {
|
|
@@ -299,4 +299,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImpor
|
|
|
299
299
|
type: ViewChild,
|
|
300
300
|
args: [ElementFormComponent]
|
|
301
301
|
}] } });
|
|
302
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWxlbWVudC1wb3B1cC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL3Rlc3QtY2FzZS1kZXRhaWxzL2VsZW1lbnQtcG9wdXAvZWxlbWVudC1wb3B1cC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL3Rlc3QtY2FzZS1kZXRhaWxzL2VsZW1lbnQtcG9wdXAvZWxlbWVudC1wb3B1cC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsdUJBQXVCLEVBRXZCLFNBQVMsRUFDVCxZQUFZLEVBQ1osTUFBTSxFQUNOLEtBQUssRUFHTCxRQUFRLEVBQ1IsTUFBTSxFQUVOLFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQ0wsa0JBQWtCLEVBQ2xCLDJCQUEyQixHQUc1QixNQUFNLHNCQUFzQixDQUFDO0FBRTlCLE9BQU8sRUFBRSx3QkFBd0IsRUFBbUIsTUFBTSxzQ0FBc0MsQ0FBQztBQUNqRyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQzs7Ozs7Ozs7OztBQVE3RSxNQUFNLE9BQU8scUJBQXFCO0lBNERoQyxZQUN3RCxHQUFxQixFQUNuQyxJQUF1QixFQUNsQyxHQUF1QjtRQUZFLFFBQUcsR0FBSCxHQUFHLENBQWtCO1FBRTlDLFFBQUcsR0FBSCxHQUFHLENBQW9CO1FBOUQ3QyxVQUFLLEdBQVcsRUFBRSxDQUFDO1FBQ25CLFlBQU8sR0FBVyxFQUFFLENBQUM7UUFDckIsV0FBTSxHQUFhLEVBQUUsQ0FBQztRQUN0QixZQUFPLEdBQTZCLEVBQUMsS0FBSyxFQUFFLEVBQUUsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUMsQ0FBQztRQUMxRSxhQUFRLEdBQStCLEVBQUUsQ0FBQztRQUMxQyxlQUFVLEdBQVksS0FBSyxDQUFDO1FBQzVCLGVBQVUsR0FB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QUFtQjtzQkFBNUIsTUFBTTtnQkFFRyxlQUFlO3NCQUF4QixNQUFNO2dCQUVHLGFBQWE7c0JBQXRCLE1BQU07Z0JBRUcsWUFBWTtzQkFBckIsTUFBTTtnQkFFMEIsb0JBQW9CO3NCQUFwRCxTQUFTO3VCQUFDLG9CQUFvQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBFdmVudEVtaXR0ZXIsXG4gIEluamVjdCxcbiAgSW5wdXQsXG4gIE9uQ2hhbmdlcyxcbiAgT25Jbml0LFxuICBPcHRpb25hbCxcbiAgT3V0cHV0LFxuICBTaW1wbGVDaGFuZ2VzLFxuICBWaWV3Q2hpbGQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgRUxFTUVOVF9QT1BVUF9EQVRBLFxuICBFTEVNRU5UX1BPUFVQX0VESVRfSU5fREVQVEgsXG4gIEVsZW1lbnRQb3B1cERhdGEsXG4gIEVsZW1lbnRQb3B1cERhdGFFbGVtZW50cyxcbn0gZnJvbSAnLi9lbGVtZW50LXBvcHVwLWRhdGEnO1xuaW1wb3J0IHsgRWxlbWVudENyZWF0ZVBheWxvYWQsIEVsZW1lbnRVcGRhdGVQYXlsb2FkLCBTY3JlZW5OYW1lT3B0aW9uIH0gZnJvbSAnLi9lbGVtZW50LXBvcHVwLWZvcm0tZGF0YSc7XG5pbXBvcnQgeyBDVVNUT01fRUxFTUVOVF9QT1BVUF9SRUYsIEVsZW1lbnRQb3B1cFJlZiB9IGZyb20gJy4vLi4vZWxlbWVudC1wb3B1cC9lbGVtZW50LXBvcHVwLXJlZic7XG5pbXBvcnQgeyBFbGVtZW50Rm9ybUNvbXBvbmVudCB9IGZyb20gJy4vZWxlbWVudC1mb3JtL2VsZW1lbnQtZm9ybS5jb21wb25lbnQnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjcWEtZWxlbWVudC1wb3B1cCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9lbGVtZW50LXBvcHVwLmNvbXBvbmVudC5odG1sJyxcbiAgaG9zdDogeyBjbGFzczogJ2NxYS11aS1yb290JyB9LFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgRWxlbWVudFBvcHVwQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMge1xuICBASW5wdXQoKSB2YWx1ZTogc3RyaW5nID0gJyc7XG4gIEBJbnB1dCgpIGhlbHBVcmw6IHN0cmluZyA9ICcnO1xuICBASW5wdXQoKSBsYWJlbHM6IHN0cmluZ1tdID0gW107XG4gIEBJbnB1dCgpIGVsZW1lbnQ6IEVsZW1lbnRQb3B1cERhdGFFbGVtZW50cyA9IHt0aXRsZTogJycsIHNlbGVjdG9yOiAnJywgbGFiZWxzOiBbXX07XG4gIEBJbnB1dCgpIGVsZW1lbnRzOiBFbGVtZW50UG9wdXBEYXRhRWxlbWVudHNbXSA9IFtdO1xuICBASW5wdXQoKSBlbmFibGVGb3JtOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIGlzT25SZWNvcmQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgaGFzTW9yZUVsZW1lbnRzOiBib29sZWFuID0gZmFsc2U7XG4gIC8qKiBFbGVtZW50IElEIHdoZW4gZWRpdGluZyBleGlzdGluZyBlbGVtZW50ICovXG4gIEBJbnB1dCgpIGVsZW1lbnRJZD86IG51bWJlcjtcbiAgLyoqIFNjcmVlbiBuYW1lIG9wdGlvbnMgZm9yIGF1dG9jb21wbGV0ZSAoZnJvbSBBUEkpICovXG4gIEBJbnB1dCgpIHNjcmVlbk5hbWVPcHRpb25zOiBTY3JlZW5OYW1lT3B0aW9uW10gPSBbXTtcbiAgLyoqIFdoZXRoZXIgbW9yZSBzY3JlZW4gbmFtZXMgYXJlIGF2YWlsYWJsZSBmb3IgaW5maW5pdGUgc2Nyb2xsICovXG4gIEBJbnB1dCgpIGhhc01vcmVTY3JlZW5OYW1lczogYm9vbGVhbiA9IGZhbHNlO1xuICAvKiogVHJ1ZSB3aGlsZSBwYXJlbnQgaXMgbG9hZGluZyBzY3JlZW4gbmFtZXMgKHNlYXJjaCBvciBsb2FkIG1vcmUpICovXG4gIEBJbnB1dCgpIGlzTG9hZGluZ1NjcmVlbk5hbWVzOiBib29sZWFuID0gZmFsc2U7XG4gIC8qKiBTdWdnZXN0ZWQgdGFncyBmcm9tIEFQSSBmb3IgbGFiZWxzIGZpZWxkICovXG4gIEBJbnB1dCgpIHN1Z2dlc3RlZFRhZ3M6IHN0cmluZ1tdID0gW107XG4gIC8qKiBUcnVlIHdoaWxlIHBhcmVudCBpcyBmZXRjaGluZyBsYXRlc3QgZWxlbWVudCBkYXRhIGZvciBlZGl0IChzaG93cyBsb2FkaW5nIHN0YXRlKSAqL1xuICBASW5wdXQoKSBpc0VsZW1lbnRMb2FkaW5nOiBib29sZWFuID0gZmFsc2U7XG4gIC8qKiBSZWNlbnQgc2VhcmNoZWQgaXRlbXMgdG8gZGlzcGxheSBpbiBSZWNlbnQgc2VjdGlvbiAqL1xuICBASW5wdXQoKSByZWNlbnRTZWFyY2hlZEl0ZW1zOiBzdHJpbmdbXSA9IFtdO1xuXG4gIEBPdXRwdXQoKSBhcHBseSA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xuICBAT3V0cHV0KCkgY2FuY2VsID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICBAT3V0cHV0KCkgZWRpdEluRGVwdGggPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG4gIEBPdXRwdXQoKSBzZWFyY2hFbGVtZW50ID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XG4gIC8qKiBFbWl0dGVkIHdoZW4gdXNlciBjbGlja3Mgb24gYSByZWNlbnQgc2VhcmNoZWQgaXRlbSAqL1xuICBAT3V0cHV0KCkgcmVjZW50SXRlbUNsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XG4gIEBPdXRwdXQoKSBsb2FkTW9yZUVsZW1lbnRzID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICAvKiogRW1pdHRlZCB3aGVuIHVzZXIgY3JlYXRlcyBhIG5ldyBlbGVtZW50IChwYXJlbnQgc2hvdWxkIGNhbGwgQVBJKSAqL1xuICBAT3V0cHV0KCkgY3JlYXRlRWxlbWVudCA9IG5ldyBFdmVudEVtaXR0ZXI8RWxlbWVudENyZWF0ZVBheWxvYWQ+KCk7XG4gIC8qKiBFbWl0dGVkIHdoZW4gdXNlciB1cGRhdGVzIGFuIGVsZW1lbnQgKHBhcmVudCBzaG91bGQgY2FsbCBBUEkpICovXG4gIEBPdXRwdXQoKSB1cGRhdGVFbGVtZW50ID0gbmV3IEV2ZW50RW1pdHRlcjxFbGVtZW50VXBkYXRlUGF5bG9hZD4oKTtcbiAgLyoqIEVtaXR0ZWQgd2hlbiB1c2VyIHJlcXVlc3RzIHRvIGNyZWF0ZSBhIG5ldyBzY3JlZW4gbmFtZSAqL1xuICBAT3V0cHV0KCkgY3JlYXRlU2NyZWVuTmFtZVJlcXVlc3QgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcbiAgLyoqIEVtaXR0ZWQgd2hlbiB1c2VyIHNlYXJjaGVzIHNjcmVlbiBuYW1lcyAoc2VydmVyIHNlYXJjaCkgKi9cbiAgQE91dHB1dCgpIHNlYXJjaFNjcmVlbk5hbWUgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcbiAgLyoqIEVtaXR0ZWQgd2hlbiB1c2VyIHNjcm9sbHMgdG8gbG9hZCBtb3JlIHNjcmVlbiBuYW1lcyAocGFzc2VzIGN1cnJlbnQgc2VhcmNoIHF1ZXJ5KSAqL1xuICBAT3V0cHV0KCkgbG9hZE1vcmVTY3JlZW5OYW1lcyA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xuICAvKiogRW1pdHRlZCB3aGVuIENyZWF0ZSBvciBFZGl0IGZvcm0gaXMgb3BlbmVkIC0gcGFyZW50IHNob3VsZCBmZXRjaCBzY3JlZW4gbmFtZXMgYW5kIChmb3IgZWRpdCkgbGF0ZXN0IGVsZW1lbnQgKi9cbiAgQE91dHB1dCgpIGZvcm1PcGVuUmVxdWVzdCA9IG5ldyBFdmVudEVtaXR0ZXI8eyBtb2RlOiAnY3JlYXRlJyB8ICdlZGl0JzsgZWxlbWVudElkPzogbnVtYmVyIH0+KCk7XG4gIC8qKiBFbWl0dGVkIHdoZW4gdXNlciBzZWxlY3RzIGFuIGVsZW1lbnQgZnJvbSB0aGUgbGlzdCAtIHBhcmVudCBzaG91bGQgc2V0IGVsZW1lbnQgYW5kIGVkaXRpbmdFbGVtZW50SWQgZm9yIEVkaXQgZmxvdyAqL1xuICBAT3V0cHV0KCkgZWxlbWVudFNlbGVjdCA9IG5ldyBFdmVudEVtaXR0ZXI8RWxlbWVudFBvcHVwRGF0YUVsZW1lbnRzPigpO1xuICAvKiogRW1pdHRlZCB3aGVuIHVzZXIgY2xpY2tzIFJlY29yZCAtIHBhcmVudCBzaG91bGQgY2hlY2sgZXh0ZW5zaW9uIGFuZCBjYWxsIGluc3RhbGxQbHVnaW4gb3Igb3BlblNpZGVQYW5lbEFuZExpc3RTdGVwcyAqL1xuICBAT3V0cHV0KCkgdG9nZ2xlUmVjb3JkID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuXG4gIEBWaWV3Q2hpbGQoRWxlbWVudEZvcm1Db21wb25lbnQpIGVsZW1lbnRGb3JtQ29tcG9uZW50PzogRWxlbWVudEZvcm1Db21wb25lbnQ7XG5cbiAgaGVscFRvb2x0aXBUZXh0ID0gJ05vdCBzdXJlIHdoYXQgdG8gZG8/IENsaWNrIHRvIGdvIHRvIG91ciBkZXRhaWxlZCBzdGVwIGNyZWF0aW9uIGRvY3VtZW50YXRpb24nO1xuICBzaG93SGVscFRvb2x0aXAgPSBmYWxzZTtcbiAgaXNFZGl0TW9kZTogYm9vbGVhbiA9IGZhbHNlO1xuICAvKiogV2hldGhlciB3ZSdyZSBpbiBjcmVhdGUgbW9kZSAobm8gZWxlbWVudElkKSAqL1xuICBpc0NyZWF0ZU1vZGU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgLyoqIEN1cnJlbnQgc2VhcmNoIGlucHV0IHZhbHVlIChib3VuZCB0byBzZWFyY2ggYmFyKSAqL1xuICBzZWFyY2hWYWx1ZSA9ICcnO1xuXG4gIHByaXZhdGUgaW5qZWN0ZWREYXRhPzogRWxlbWVudFBvcHVwRGF0YTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBAT3B0aW9uYWwoKSBASW5qZWN0KENVU1RPTV9FTEVNRU5UX1BPUFVQX1JFRikgcHJpdmF0ZSByZWY/OiBFbGVtZW50UG9wdXBSZWYsXG4gICAgQE9wdGlvbmFsKCkgQEluamVjdChFTEVNRU5UX1BPUFVQX0RBVEEpIGRhdGE/OiBFbGVtZW50UG9wdXBEYXRhLFxuICAgIEBPcHRpb25hbCgpIHByaXZhdGUgcmVhZG9ubHkgY2RyPzogQ2hhbmdlRGV0ZWN0b3JSZWZcbiAgKSB7XG4gICAgdGhpcy5pbmplY3RlZERhdGEgPSBkYXRhO1xuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGlmICgoY2hhbmdlc1snZWxlbWVudCddIHx8IGNoYW5nZXNbJ2VsZW1lbnRJZCddKSAmJiB0aGlzLmVuYWJsZUZvcm0pIHtcbiAgICAgIGlmICh0aGlzLmVsZW1lbnRJZCkge1xuICAgICAgICB0aGlzLmlzQ3JlYXRlTW9kZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLmlzRWRpdE1vZGUgPSB0cnVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5pc0NyZWF0ZU1vZGUgPSB0cnVlO1xuICAgICAgICB0aGlzLmlzRWRpdE1vZGUgPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pbmplY3RlZERhdGEpIHtcbiAgICAgIGlmICghdGhpcy52YWx1ZSkgdGhpcy52YWx1ZSA9IHRoaXMuaW5qZWN0ZWREYXRhLmRlc2NyaXB0aW9uID8/ICcnO1xuICAgICAgaWYgKCF0aGlzLmhlbHBVcmwpIHRoaXMuaGVscFVybCA9IHRoaXMuaW5qZWN0ZWREYXRhLmhlbHBVcmwgPz8gJyc7XG4gICAgICBpZiAodGhpcy5sYWJlbHMubGVuZ3RoID09PSAwKSB0aGlzLmxhYmVscyA9IHRoaXMuaW5qZWN0ZWREYXRhLmxhYmVscyA/PyBbXTtcbiAgICAgIGlmICh0aGlzLmVsZW1lbnRzLmxlbmd0aCA9PT0gMCkgdGhpcy5lbGVtZW50cyA9IHRoaXMuaW5qZWN0ZWREYXRhLmVsZW1lbnRzID8/IFtdO1xuICAgICAgaWYgKCF0aGlzLmVsZW1lbnQgfHwgIXRoaXMuZWxlbWVudC50aXRsZSkge1xuICAgICAgICB0aGlzLmVsZW1lbnQgPSB0aGlzLmluamVjdGVkRGF0YS5lbGVtZW50ID8/IHt0aXRsZTogJycsIHNlbGVjdG9yOiAnJywgbGFiZWxzOiBbXX07XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSByZXNldEZvcm0oKTogdm9pZCB7XG4gICAgdGhpcy5pc0VkaXRNb2RlID0gZmFsc2U7XG4gICAgdGhpcy5pc0NyZWF0ZU1vZGUgPSBmYWxzZTtcbiAgfVxuXG4gIG9uRWxlbWVudEZvcm1DcmVhdGUocGF5bG9hZDogRWxlbWVudENyZWF0ZVBheWxvYWQpOiB2b2lkIHtcbiAgICB0aGlzLmNyZWF0ZUVsZW1lbnQuZW1pdChwYXlsb2FkKTtcbiAgfVxuXG4gIG9uRWxlbWVudEZvcm1VcGRhdGUocGF5bG9hZDogRWxlbWVudFVwZGF0ZVBheWxvYWQpOiB2b2lkIHtcbiAgICB0aGlzLnVwZGF0ZUVsZW1lbnQuZW1pdChwYXlsb2FkKTtcbiAgfVxuXG4gIG9uRWxlbWVudEZvcm1DYW5jZWwoKTogdm9pZCB7XG4gICAgdGhpcy50b2dnbGVGb3JtKCk7XG4gIH1cblxuICBvbkNyZWF0ZU9yVXBkYXRlU3VjY2VzcygpOiB2b2lkIHtcbiAgICB0aGlzLmVuYWJsZUZvcm0gPSBmYWxzZTtcbiAgICB0aGlzLnJlc2V0Rm9ybSgpO1xuICAgIHRoaXMuY2RyPy5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIG9uQ3JlYXRlT3JVcGRhdGVFcnJvcigpOiB2b2lkIHtcbiAgICB0aGlzLmNkcj8ubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICB0b2dnbGVGb3JtKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5lbmFibGVGb3JtKSB7XG4gICAgICAvLyBJZiBubyBlbGVtZW50SWQsIGdvIHRvIGNyZWF0ZSBtb2RlIGluc3RlYWQgb2YgZWRpdCBtb2RlXG4gICAgICBpZiAoIXRoaXMuZWxlbWVudElkKSB7XG4gICAgICAgIHRoaXMuaXNDcmVhdGVNb2RlID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5pc0VkaXRNb2RlID0gZmFsc2U7XG4gICAgICAgIHRoaXMuZm9ybU9wZW5SZXF1ZXN0LmVtaXQoeyBtb2RlOiAnY3JlYXRlJyB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIEhhcyBlbGVtZW50SWQsIGdvIHRvIGVkaXQgbW9kZVxuICAgICAgICB0aGlzLmlzQ3JlYXRlTW9kZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLmlzRWRpdE1vZGUgPSB0cnVlO1xuICAgICAgICB0aGlzLmZvcm1PcGVuUmVxdWVzdC5lbWl0KHsgbW9kZTogJ2VkaXQnLCBlbGVtZW50SWQ6IHRoaXMuZWxlbWVudElkIH0pO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBDbG9zaW5nIGZvcm0gLSByZXNldCBldmVyeXRoaW5nXG4gICAgICAvLyBJZiBpbiBjcmVhdGUgbW9kZSwgcmVzZXQgbGFiZWxzIHdoZW4gZ29pbmcgYmFjayB0byBlbGVtZW50IGxpc3RcbiAgICAgIGlmICh0aGlzLmlzQ3JlYXRlTW9kZSkge1xuICAgICAgICB0aGlzLmxhYmVscyA9IFtdO1xuICAgICAgfVxuICAgICAgdGhpcy5yZXNldEZvcm0oKTtcbiAgICAgIHRoaXMuaXNDcmVhdGVNb2RlID0gZmFsc2U7XG4gICAgfVxuICAgIHRoaXMuZW5hYmxlRm9ybSA9ICF0aGlzLmVuYWJsZUZvcm07XG4gICAgdGhpcy5jZHI/Lm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgb3BlbkNyZWF0ZUZvcm0oKTogdm9pZCB7XG4gICAgdGhpcy5pc0NyZWF0ZU1vZGUgPSB0cnVlO1xuICAgIHRoaXMuaXNFZGl0TW9kZSA9IGZhbHNlO1xuICAgIHRoaXMucmVzZXRGb3JtKCk7XG4gICAgdGhpcy5lbmFibGVGb3JtID0gdHJ1ZTtcbiAgICB0aGlzLmZvcm1PcGVuUmVxdWVzdC5lbWl0KHsgbW9kZTogJ2NyZWF0ZScgfSk7XG4gICAgdGhpcy5jZHI/Lm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgb25Ub2dnbGVSZWNvcmRDbGljaygpOiB2b2lkIHtcbiAgICB0aGlzLnRvZ2dsZVJlY29yZC5lbWl0KCk7XG4gIH1cblxuICBvbkNhbmNlbCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5lbmFibGVGb3JtKSB7XG4gICAgICAvLyBJZiBpbiBjcmVhdGUgbW9kZSwgZ28gYmFjayB0byBlbGVtZW50IGxpc3QgYW5kIHJlc2V0IGxhYmVsc1xuICAgICAgaWYgKHRoaXMuaXNDcmVhdGVNb2RlKSB7XG4gICAgICAgIHRoaXMucmVzZXRGb3JtKCk7XG4gICAgICAgIHRoaXMuZW5hYmxlRm9ybSA9IGZhbHNlO1xuICAgICAgICB0aGlzLmlzQ3JlYXRlTW9kZSA9IGZhbHNlO1xuICAgICAgICAvLyBSZXNldCBsYWJlbHMgd2hlbiBnb2luZyBiYWNrIGZyb20gY3JlYXRlIG1vZGVcbiAgICAgICAgdGhpcy5sYWJlbHMgPSBbXTtcbiAgICAgICAgdGhpcy5jZHI/Lm1hcmtGb3JDaGVjaygpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gRWRpdCBtb2RlIC0ganVzdCByZXNldCBmb3JtXG4gICAgICAgIHRoaXMucmVzZXRGb3JtKCk7XG4gICAgICAgIHRoaXMuZW5hYmxlRm9ybSA9IGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLmNhbmNlbC5lbWl0KCk7XG4gICAgaWYgKHRoaXMucmVmKSB0aGlzLnJlZi5jbG9zZSh1bmRlZmluZWQpO1xuICB9XG5cbiAgb25DbG9zZSgpOiB2b2lkIHtcbiAgICB0aGlzLm9uQ2FuY2VsKCk7XG4gIH1cblxuICBvbkVkaXRJbkRlcHRoKCk6IHZvaWQge1xuICAgIHRoaXMuZWRpdEluRGVwdGguZW1pdCgpO1xuICAgIGlmICh0aGlzLnJlZikgdGhpcy5yZWYuY2xvc2UoRUxFTUVOVF9QT1BVUF9FRElUX0lOX0RFUFRIIGFzIGFueSk7XG4gIH1cblxuICBzZWFyY2goZXZlbnQ6IHN0cmluZyk6IHZvaWQge1xuICAgIC8vIFVwZGF0ZSBzZWFyY2hWYWx1ZSB0byBrZWVwIGl0IGluIHN5bmMgd2l0aCBzZWFyY2ggYmFyIGlucHV0XG4gICAgdGhpcy5zZWFyY2hWYWx1ZSA9IGV2ZW50O1xuICAgIHRoaXMuc2VhcmNoRWxlbWVudC5lbWl0KGV2ZW50KTtcbiAgICB0aGlzLmNkcj8ubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBvbkhlbHAoZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaGVscFVybCkge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIHdpbmRvdy5vcGVuKHRoaXMuaGVscFVybCwgJ19ibGFuaycpO1xuICAgIH1cbiAgfVxuXG5cbiAgb25FbGVtZW50Q2xpY2soZWxlbWVudDogRWxlbWVudFBvcHVwRGF0YUVsZW1lbnRzKTogdm9pZCB7XG4gICAgdGhpcy5lbGVtZW50ID0gZWxlbWVudDtcbiAgICB0aGlzLmVsZW1lbnRTZWxlY3QuZW1pdChlbGVtZW50KTtcbiAgICBpZiAodGhpcy5lbmFibGVGb3JtKSB7XG4gICAgICB0aGlzLmVuYWJsZUZvcm0gPSBmYWxzZTtcbiAgICAgIHRoaXMuaXNDcmVhdGVNb2RlID0gZmFsc2U7XG4gICAgfVxuICAgIHRoaXMuY2RyPy5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIG9uTG9hZE1vcmVFbGVtZW50cygpOiB2b2lkIHtcbiAgICB0aGlzLmxvYWRNb3JlRWxlbWVudHMuZW1pdCgpO1xuICB9XG5cbiAgb25SZWNlbnRJdGVtQ2xpY2soaXRlbTogc3RyaW5nKTogdm9pZCB7XG4gICAgLy8gVXBkYXRlIHNlYXJjaCBiYXIgaW5wdXQgd2l0aCB0aGUgcmVjZW50IGl0ZW1cbiAgICB0aGlzLnNlYXJjaFZhbHVlID0gaXRlbTtcbiAgICAvLyBFbWl0IGV2ZW50IHRvIHRyaWdnZXIgc2VhcmNoIGZvciB0aGlzIHJlY2VudCBpdGVtXG4gICAgdGhpcy5yZWNlbnRJdGVtQ2xpY2suZW1pdChpdGVtKTtcbiAgICAvLyBBbHNvIHRyaWdnZXIgc2VhcmNoIGRpcmVjdGx5XG4gICAgdGhpcy5zZWFyY2hFbGVtZW50LmVtaXQoaXRlbSk7XG4gICAgdGhpcy5jZHI/Lm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgLyoqIENhbGxlZCBieSBwYXJlbnQgd2hlbiBhIG5ldyBzY3JlZW4gbmFtZSB3YXMgY3JlYXRlZCAoc28gd2UgY2FuIHNldCB0aGUgc2VsZWN0ZWQgdmFsdWUpICovXG4gIHNldENyZWF0ZWRTY3JlZW5OYW1lKG9wdDogeyBpZDogbnVtYmVyOyBuYW1lOiBzdHJpbmcgfSk6IHZvaWQge1xuICAgIHRoaXMuZWxlbWVudEZvcm1Db21wb25lbnQ/LnNldENyZWF0ZWRTY3JlZW5OYW1lKG9wdCk7XG4gIH1cbn1cbiIsIjxkaXZcbiAgY2xhc3M9XCJjcWEtYmctd2hpdGUgY3FhLXJvdW5kZWQtWzEycHhdIGNxYS1zaGFkb3ctbGcgY3FhLWJvcmRlciBjcWEtYm9yZGVyLXNvbGlkIGNxYS1ib3JkZXItWyNFNUU3RUJdIGNxYS13LVs1MDBweF0gY3FhLWZsZXggY3FhLWZsZXgtY29sIGNxYS1nYXAtWzEycHhdIGNxYS1wLTIgY3FhLWJveC1ib3JkZXJcIiBzdHlsZT1cIndpZHRoOiAxMDAlO1wiPlxuICA8IS0tIEhlYWRlcjogdGl0bGUgbGVmdDsgTmVlZCBoZWxwPyArIGNsb3NlIGljb24gcmlnaHQgLS0+XG4gIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1qdXN0aWZ5LWJldHdlZW4gY3FhLWdhcC0yIGNxYS1weC00XCI+XG4gICAgPGgyIGNsYXNzPVwiY3FhLXRleHQtWzE2cHhdIGNxYS1sZWFkaW5nLVsyNHB4XSBjcWEtZm9udC1ib2xkIGNxYS10ZXh0LVsjMTExODI3XSBjcWEtbS0wIGNxYS1mb250LVs2MDBdXCI+XG4gICAgICBFbGVtZW50XG4gICAgPC9oMj5cbiAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlciBjcWEtZ2FwLTJcIj5cbiAgICAgIDwhLS0gTmVlZCBoZWxwPyB3aXRoIGN1c3RvbSB0b29sdGlwICh3b3JrcyBpbnNpZGUgb3ZlcmxheSkgLS0+XG4gICAgICA8ZGl2IGNsYXNzPVwiY3FhLXJlbGF0aXZlIGNxYS1pbmxpbmUtZmxleFwiXG4gICAgICAgIChtb3VzZWVudGVyKT1cInNob3dIZWxwVG9vbHRpcCA9IHRydWVcIiAobW91c2VsZWF2ZSk9XCJzaG93SGVscFRvb2x0aXAgPSBmYWxzZVwiPlxuICAgICAgICA8YSAqbmdJZj1cImhlbHBVcmxcIiBocmVmPVwiI1wiIChjbGljayk9XCJvbkhlbHAoJGV2ZW50KVwiXG4gICAgICAgICAgY2xhc3M9XCJjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1nYXAtMSBjcWEtdGV4dC1bIzNGNDNFRV0gY3FhLXRleHQtWzEycHhdIGNxYS1sZWFkaW5nLVsyMXB4XSBjcWEtbm8tdW5kZXJsaW5lIGNxYS1jdXJzb3ItcG9pbnRlclwiPlxuICAgICAgICAgIDxzdmcgd2lkdGg9XCIxN1wiIGhlaWdodD1cIjE2XCIgdmlld0JveD1cIjAgMCAxNyAxNlwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIGNsYXNzPVwiY3FhLWZsZXgtc2hyaW5rLTBcIiBhcmlhLWhpZGRlbj1cInRydWVcIj5cbiAgICAgICAgICAgIDxnIGNsaXAtcGF0aD1cInVybCgjaGVscC1pY29uLWNsaXApXCI+XG4gICAgICAgICAgICAgIDxwYXRoIGQ9XCJNOC41MDAzMyAxNC42NjYzQzEyLjQxMjMgMTQuNjY2MyAxNS41ODM3IDExLjY4MTYgMTUuNTgzNyA3Ljk5OTY3QzE1LjU4MzcgNC4zMTc3OCAxMi40MTIzIDEuMzMzMDEgOC41MDAzMyAxLjMzMzAxQzQuNTg4MzEgMS4zMzMwMSAxLjQxNjk5IDQuMzE3NzggMS40MTY5OSA3Ljk5OTY3QzEuNDE2OTkgMTEuNjgxNiA0LjU4ODMxIDE0LjY2NjMgOC41MDAzMyAxNC42NjYzWlwiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz5cbiAgICAgICAgICAgICAgPHBhdGggZD1cIk02LjQzODQ4IDYuMDAwMzhDNi42MDUwMSA1LjU1NDgzIDYuOTMzNzEgNS4xNzkxMiA3LjM2NjM2IDQuOTM5OEM3Ljc5OTAxIDQuNzAwNDkgOC4zMDc2OSA0LjYxMzAxIDguODAyMzEgNC42OTI4NUM5LjI5NjkzIDQuNzcyNyA5Ljc0NTU2IDUuMDE0NzMgMTAuMDY4NyA1LjM3NjA3QzEwLjM5MTkgNS43Mzc0IDEwLjU2ODggNi4xOTQ3MyAxMC41NjgxIDYuNjY3MDVDMTAuNTY4MSA4LjAwMDM4IDguNDQzMDYgOC42NjcwNSA4LjQ0MzA2IDguNjY3MDVcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+XG4gICAgICAgICAgICAgIDxwYXRoIGQ9XCJNOC41IDExLjMzM0g4LjUwOTY2XCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPlxuICAgICAgICAgICAgPC9nPlxuICAgICAgICAgICAgPGRlZnM+XG4gICAgICAgICAgICAgIDxjbGlwUGF0aCBpZD1cImhlbHAtaWNvbi1jbGlwXCI+XG4gICAgICAgICAgICAgICAgPHJlY3Qgd2lkdGg9XCIxN1wiIGhlaWdodD1cIjE2XCIgZmlsbD1cIndoaXRlXCIvPlxuICAgICAgICAgICAgICA8L2NsaXBQYXRoPlxuICAgICAgICAgICAgPC9kZWZzPlxuICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgIE5lZWQgaGVscCA/XG4gICAgICAgIDwvYT5cbiAgICAgICAgPHNwYW4gKm5nSWY9XCIhaGVscFVybFwiIGNsYXNzPVwiY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlciBjcWEtZ2FwLTEuNSBjcWEtZm9udC1bNTAwXSBjcWEtdGV4dC1bMTBweF0gY3FhLWN1cnNvci1kZWZhdWx0XCI+XG4gICAgICAgICAgPHN2ZyB3aWR0aD1cIjE3XCIgaGVpZ2h0PVwiMTZcIiB2aWV3Qm94PVwiMCAwIDE3IDE2XCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgY2xhc3M9XCJjcWEtZmxleC1zaHJpbmstMCBjcWEtdGV4dC1bIzNGNDNFRV1cIiBhcmlhLWhpZGRlbj1cInRydWVcIj5cbiAgICAgICAgICAgIDxnIGNsaXAtcGF0aD1cInVybCgjaGVscC1pY29uLWNsaXAtbm9saW5rKVwiPlxuICAgICAgICAgICAgICA8cGF0aCBkPVwiTTguNTAwMzMgMTQuNjY2M0MxMi40MTIzIDE0LjY2NjMgMTUuNTgzNyAxMS42ODE2IDE1LjU4MzcgNy45OTk2N0MxNS41ODM3IDQuMzE3NzggMTIuNDEyMyAxLjMzMzAxIDguNTAwMzMgMS4zMzMwMUM0LjU4ODMxIDEuMzMzMDEgMS40MTY5OSA0LjMxNzc4IDEuNDE2OTkgNy45OTk2N0MxLjQxNjk5IDExLjY4MTYgNC41ODgzMSAxNC42NjYzIDguNTAwMzMgMTQuNjY2M1pcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+XG4gICAgICAgICAgICAgIDxwYXRoIGQ9XCJNNi40Mzg0OCA2LjAwMDM4QzYuNjA1MDEgNS41NTQ4MyA2LjkzMzcxIDUuMTc5MTIgNy4zNjYzNiA0LjkzOThDNy43OTkwMSA0LjcwMDQ5IDguMzA3NjkgNC42MTMwMSA4LjgwMjMxIDQuNjkyODVDOS4yOTY5MyA0Ljc3MjcgOS43NDU1NiA1LjAxNDczIDEwLjA2ODcgNS4zNzYwN0MxMC4zOTE5IDUuNzM3NCAxMC41Njg4IDYuMTk0NzMgMTAuNTY4MSA2LjY2NzA1QzEwLjU2ODEgOC4wMDAzOCA4LjQ0MzA2IDguNjY3MDUgOC40NDMwNiA4LjY2NzA1XCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPlxuICAgICAgICAgICAgICA8cGF0aCBkPVwiTTguNSAxMS4zMzNIOC41MDk2NlwiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz5cbiAgICAgICAgICAgIDwvZz5cbiAgICAgICAgICAgIDxkZWZzPlxuICAgICAgICAgICAgICA8Y2xpcFBhdGggaWQ9XCJoZWxwLWljb24tY2xpcC1ub2xpbmtcIj5cbiAgICAgICAgICAgICAgICA8cmVjdCB3aWR0aD1cIjE3XCIgaGVpZ2h0PVwiMTZcIiBmaWxsPVwid2hpdGVcIi8+XG4gICAgICAgICAgICAgIDwvY2xpcFBhdGg+XG4gICAgICAgICAgICA8L2RlZnM+XG4gICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgTmVlZCBoZWxwID9cbiAgICAgICAgPC9zcGFuPlxuICAgICAgICA8IS0tIEN1c3RvbSB0b29sdGlwIChleGFjdCBzcGVjOiAzMDbDlzIwIGNvbnRlbnQsIDZweCByYWRpdXMsICMwQTBBMEEsIG5vIGFycm93KSAtLT5cbiAgICAgICAgPGRpdiAqbmdJZj1cInNob3dIZWxwVG9vbHRpcFwiIGNsYXNzPVwiY3FhLWFic29sdXRlIGNxYS1wb2ludGVyLWV2ZW50cy1ub25lIGNxYS16LVsxMDBdIGNxYS10b3AtWy0yNHB4XSBjcWEtbGVmdC1bLTEyNXB4XVwiXG4gICAgICAgICAgcm9sZT1cInRvb2x0aXBcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3FhLXRleHQtd2hpdGUgY3FhLXRleHQtY2VudGVyIGNxYS13aGl0ZXNwYWNlLW5vd3JhcCBjcWEtdy1bMzA2cHhdIGNxYS1taW4taC1bMjBweF0gY3FhLXJvdW5kZWQtWzZweF0gY3FhLXB5LTEgY3FhLXB4LTIgY3FhLWJnLVsjMEEwQTBBXSBjcWEtbGVhZGluZy1bMjBweF0gY3FhLXRleHQtWzhweF1cIj5cbiAgICAgICAgICAgIHt7IGhlbHBUb29sdGlwVGV4dCB9fVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGNxYS1idXR0b24gdHlwZT1cImJ1dHRvblwiIHZhcmlhbnQ9XCJ0ZXh0XCIgYnRuU2l6ZT1cIm1kXCJcbiAgICAgICAgW3RleHRdPVwiJydcIlxuICAgICAgICBpY29uPVwiY2xvc2VcIlxuICAgICAgICAoY2xpY2tlZCk9XCJvbkNsb3NlKClcIlxuICAgICAgICBbY3VzdG9tQ2xhc3NdPVwiJ2NxYS1taW4taC1bMjhweF0gY3FhLW1pbi13LVsyOHB4XSBjcWEtcC0xIGNxYS10ZXh0LVsjNkI3MjgwXSBob3ZlcjpjcWEtYmctWyNGM0Y0RjZdJ1wiXG4gICAgICAgIHRpdGxlPVwiQ2xvc2VcIlxuICAgICAgICBhcmlhLWxhYmVsPVwiQ2xvc2VcIj5cbiAgICAgIDwvY3FhLWJ1dHRvbj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPCEtLSBMaW5lIGJlbG93IGhlYWRlciAoZnVsbCB3aWR0aCBvZiBtb2RhbCwgbm8gc2lkZSBtYXJnaW4pIC0tPlxuICA8ZGl2IGNsYXNzPVwiY3FhLS1teC0yIGNxYS13LVtjYWxjKDEwMCUrMXJlbSldIGNxYS1mbGV4LXNocmluay0wXCI+XG4gICAgPGRpdiBjbGFzcz1cImNxYS1oLXB4IGNxYS13LWZ1bGwgY3FhLWJnLVsjRTVFN0VCXVwiIHJvbGU9XCJwcmVzZW50YXRpb25cIj48L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImVuYWJsZUZvcm0gJiYgIWlzT25SZWNvcmRcIj5cbiAgICA8Y3FhLWVsZW1lbnQtZm9ybVxuICAgICAgI2VsZW1lbnRGb3JtXG4gICAgICBbZWxlbWVudElkXT1cImVsZW1lbnRJZFwiXG4gICAgICBbZWxlbWVudF09XCJlbGVtZW50XCJcbiAgICAgIFtzY3JlZW5OYW1lT3B0aW9uc109XCJzY3JlZW5OYW1lT3B0aW9uc1wiXG4gICAgICBbaGFzTW9yZVNjcmVlbk5hbWVzXT1cImhhc01vcmVTY3JlZW5OYW1lc1wiXG4gICAgICBbaXNMb2FkaW5nU2NyZWVuTmFtZXNdPVwiaXNMb2FkaW5nU2NyZWVuTmFtZXNcIlxuICAgICAgW2lzRWxlbWVudExvYWRpbmddPVwiaXNFbGVtZW50TG9hZGluZ1wiXG4gICAgICBbaXNFZGl0TW9kZV09XCJpc0VkaXRNb2RlXCJcbiAgICAgIFtpc0NyZWF0ZU1vZGVdPVwiaXNDcmVhdGVNb2RlXCJcbiAgICAgIChjcmVhdGVFbGVtZW50KT1cIm9uRWxlbWVudEZvcm1DcmVhdGUoJGV2ZW50KVwiXG4gICAgICAodXBkYXRlRWxlbWVudCk9XCJvbkVsZW1lbnRGb3JtVXBkYXRlKCRldmVudClcIlxuICAgICAgKGNyZWF0ZVNjcmVlbk5hbWVSZXF1ZXN0KT1cImNyZWF0ZVNjcmVlbk5hbWVSZXF1ZXN0LmVtaXQoJGV2ZW50KVwiXG4gICAgICAoc2VhcmNoU2NyZWVuTmFtZSk9XCJzZWFyY2hTY3JlZW5OYW1lLmVtaXQoJGV2ZW50KVwiXG4gICAgICAobG9hZE1vcmVTY3JlZW5OYW1lcyk9XCJsb2FkTW9yZVNjcmVlbk5hbWVzLmVtaXQoJGV2ZW50KVwiXG4gICAgICAoY2FuY2VsKT1cIm9uRWxlbWVudEZvcm1DYW5jZWwoKVwiXG4gICAgICAoZWRpdEluRGVwdGgpPVwib25FZGl0SW5EZXB0aCgpXCI+XG4gICAgPC9jcWEtZWxlbWVudC1mb3JtPlxuICA8L25nLWNvbnRhaW5lcj5cblxuPG5nLWNvbnRhaW5lciAqbmdJZj1cImlzT25SZWNvcmQgJiYgIWVuYWJsZUZvcm1cIj5cbiAgPGRpdlxuICAgIGNsYXNzPVwiY3FhLWZsZXggY3FhLWZsZXgtY29sIGNxYS1pdGVtcy1jZW50ZXIgY3FhLWp1c3RpZnktY2VudGVyIGNxYS10ZXh0LWNlbnRlciBjcWEtZ2FwLTMgY3FhLXB0LTEwXCI+XG5cbiAgICA8IS0tIFZpZGVvIEljb24gLS0+XG4gICAgPGRpdlxuICAgICAgY2xhc3M9XCJjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1qdXN0aWZ5LWNlbnRlciBjcWEtdy1bNjRweF0gY3FhLWgtWzY0cHhdIGNxYS1yb3VuZGVkLWZ1bGwgY3FhLWJnLVsjRkVFMkUyXVwiPlxuICAgICAgPHN2ZyB3aWR0aD1cIjMyXCIgaGVpZ2h0PVwiMzJcIiB2aWV3Qm94PVwiMCAwIDMyIDMyXCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XG4gICAgICAgIDxwYXRoIGQ9XCJNMjEuMzMzIDE3LjMzMzNMMjguMjk3IDIxLjk3NTlDMjguMzk3NCAyMi4wNDI4IDI4LjUxNCAyMi4wODExIDI4LjYzNDUgMjIuMDg2OEMyOC43NTQ5IDIyLjA5MjYgMjguODc0NyAyMi4wNjU2IDI4Ljk4MSAyMi4wMDg3QzI5LjA4NzMgMjEuOTUxNyAyOS4xNzYyIDIxLjg2NzEgMjkuMjM4MiAyMS43NjM2QzI5LjMwMDIgMjEuNjYwMiAyOS4zMzI5IDIxLjU0MTkgMjkuMzMzIDIxLjQyMTNWMTAuNDkzM0MyOS4zMzMgMTAuMzc2IDI5LjMwMjEgMTAuMjYwNyAyOS4yNDM0IDEwLjE1OTJDMjkuMTg0NiAxMC4wNTc3IDI5LjEwMDEgOS45NzM0NCAyOC45OTg0IDkuOTE1MDFDMjguODk2NyA5Ljg1NjU4IDI4Ljc4MTQgOS44MjYwMiAyOC42NjQxIDkuODI2NDJDMjguNTQ2OCA5LjgyNjgyIDI4LjQzMTcgOS44NTgxNiAyOC4zMzAzIDkuOTE3MjhMMjEuMzMzIDEzLjk5OTlcIiBzdHJva2U9XCIjRTcwMDBCXCIgc3Ryb2tlLXdpZHRoPVwiMi42NjY2N1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz5cbiAgICAgICAgPHBhdGggZD1cIk0xOC42NjcgOEg1LjMzMzY2QzMuODYwOSA4IDIuNjY2OTkgOS4xOTM5MSAyLjY2Njk5IDEwLjY2NjdWMjEuMzMzM0MyLjY2Njk5IDIyLjgwNjEgMy44NjA5IDI0IDUuMzMzNjYgMjRIMTguNjY3QzIwLjEzOTggMjQgMjEuMzMzNyAyMi44MDYxIDIxLjMzMzcgMjEuMzMzM1YxMC42NjY3QzIxLjMzMzcgOS4xOTM5MSAyMC4xMzk4IDggMTguNjY3IDhaXCIgc3Ryb2tlPVwiI0U3MDAwQlwiIHN0cm9rZS13aWR0aD1cIjIuNjY2NjdcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+XG4gICAgICAgIDwvc3ZnPlxuICAgICAgICBcbiAgICA8L2Rpdj5cblxuICAgIDwhLS0gVGl0bGUgLS0+XG4gICAgPGg0IGNsYXNzPVwiY3FhLW0tMCBjcWEtdGV4dC1bMTZweF0gY3FhLWxlYWRpbmctWzI0cHhdIGNxYS1mb250LVs2MDBdIGNxYS10ZXh0LVsjMEEwQTBBXVwiPlxuICAgICAgUmVjb3JkaW5nIE1vZGUgQWN0aXZlXG4gICAgPC9oND5cblxuICAgIDwhLS0gU3VidGl0bGUgLS0+XG4gICAgPHAgY2xhc3M9XCJjcWEtbS0wIGNxYS10ZXh0LVsxMnB4XSBjcWEtbGVhZGluZy1bMThweF0gY3FhLXRleHQtWyM2QjcyODBdXCI+XG4gICAgICBDbGljayBvbiBhbnkgZWxlbWVudCBpbiB0aGUgYnJvd3NlciB0byBjYXB0dXJlIGl0XG4gICAgPC9wPlxuICA8L2Rpdj5cblxuICA8IS0tIEZvb3RlciAtLT5cbiAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1qdXN0aWZ5LWNlbnRlciBjcWEtcGItNFwiPlxuICAgIDxjcWEtYnV0dG9uXG4gICAgICB2YXJpYW50PVwib3V0bGluZWRcIlxuICAgICAgYnRuU2l6ZT1cImxnXCJcbiAgICAgIFt0ZXh0XT1cIidDYW5jZWwgUmVjb3JkaW5nJ1wiXG4gICAgICAoY2xpY2tlZCk9XCJvblRvZ2dsZVJlY29yZENsaWNrKClcIlxuICAgICAgW2N1c3RvbUNsYXNzXT1cIidjcWEtdGV4dC1bMTRweF0gY3FhLXB4LTE2IGNxYS1weS1bOXB4XSBjcWEtYm9yZGVyLVsjNDE0MTQ2XSdcIj5cbiAgICA8L2NxYS1idXR0b24+XG4gIDwvZGl2PlxuPC9uZy1jb250YWluZXI+XG5cblxuICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWVuYWJsZUZvcm0gJiYgIWlzT25SZWNvcmRcIj5cbjxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtZmxleC1jb2wgY3FhLWdhcC00IGNxYS1weC0xIGNxYS1wdC0zXCI+XG5cbiAgPCEtLSBTZWxlY3RlZCAtLT5cbiAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1mbGV4LWNvbCBjcWEtZ2FwLTJcIj5cbiAgICA8c3BhbiBjbGFzcz1cImNxYS10ZXh0LVsxMnB4XSBjcWEtdGV4dC1bIzZCNzI4MF1cIj5TZWxlY3RlZDwvc3Bhbj5cblxuICAgIDxkaXZcbiAgICAgIGNsYXNzPVwiY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlciBjcWEtanVzdGlmeS1iZXR3ZWVuXG4gICAgICAgICAgICAgY3FhLWJnLVsjRkZGQkVCXSBjcWEtYm9yZGVyIGNxYS1ib3JkZXItWyNmYWRmYmFdXG4gICAgICAgICAgICAgY3FhLXJvdW5kZWQtbGcgY3FhLXAtMyBjcWEtYm9yZGVyLXNvbGlkIGNxYS1nYXAtM1wiPlxuXG4gICAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLXB4LTMgY3FhLXB5LTIgY3FhLXJvdW5kZWQtbGcgY3FhLWZsZXgtY29sIGNxYS1nYXAtMC41IGNxYS1iZy1bI2Y1ZjVmNV0gY3FhLWZsZXgtMVwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlciBjcWEtanVzdGlmeS1iZXR3ZWVuIGNxYS1nYXAtMiBjcWEtbWluLXctMFwiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3FhLXRleHQtWzE0cHhdIGNxYS1mb250LVs2MDBdIGNxYS10ZXh0LVsjMTExODI3XSBjcWEtbWluLXctMCBjcWEtZmxleC0xXCJcbiAgICAgICAgICBzdHlsZT1cImRpc3BsYXk6IC13ZWJraXQtYm94OyAtd2Via2l0LWxpbmUtY2xhbXA6IDI7IGxpbmUtY2xhbXA6IDI7IC13ZWJraXQtYm94LW9yaWVudDogdmVydGljYWw7IG92ZXJmbG93OiBoaWRkZW47IHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1wiXG4gICAgICAgICAgW21hdFRvb2x0aXBdPVwiZWxlbWVudC50aXRsZVwiXG4gICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPVwiYWJvdmVcIj5cbiAgICAgICAgICB7e2VsZW1lbnQudGl0bGV9fVxuICAgICAgICA8L3NwYW4+XG5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1nYXAtMiBjcWEtbWF4LXctWzgwcHhdIGNxYS1qdXN0aWZ5LWVuZCBjcWEtZmxleC13cmFwXCI+XG4gICAgICAgICAgPHNwYW4gKm5nRm9yPVwibGV0IGwgb2YgZWxlbWVudC5sYWJlbHNcIlxuICAgICAgICAgICAgY2xhc3M9XCJjcWEtdGV4dC1bMTBweF0gY3FhLXB4LTEuNSBjcWEtcHktMC41XG4gICAgICAgICAgICAgICAgICBjcWEtcm91bmRlZCBjcWEtYmctWyNFRUYyRkZdIGNxYS10ZXh0LVsjM0Y0M0VFXSBjcWEtcm91bmRlZC1mdWxsIGNxYS1weC0yIGNxYS1iZy1bI2VmZjZmZl0gY3FhLWJvcmRlciBjcWEtYm9yZGVyLXNvbGlkIGNxYS1ib3JkZXItWyNjOGUwZmZdXCJcbiAgICAgICAgICAgIHN0eWxlPVwiZGlzcGxheTogLXdlYmtpdC1ib3g7IC13ZWJraXQtbGluZS1jbGFtcDogMjsgbGluZS1jbGFtcDogMjsgLXdlYmtpdC1ib3gtb3JpZW50OiB2ZXJ0aWNhbDsgb3ZlcmZsb3c6IGhpZGRlbjsgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XCJcbiAgICAgICAgICAgIFttYXRUb29sdGlwXT1cImxcIlxuICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPVwiYWJvdmVcIj5cbiAgICAgICAgICAgIHt7bH19XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8c3BhbiBjbGFzcz1cImNxYS10ZXh0LVsxMHB4XSBjcWEtdGV4dC1bIzZCNzI4MF1cIj5cbiAgICAgICAgICB7e2VsZW1lbnQuc2VsZWN0b3J9fVxuICAgICAgICA8L3NwYW4+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxjcWEtYnV0dG9uIHZhcmlhbnQ9XCJvdXRsaW5lZFwiIGljb249XCJlZGl0XCIgYnRuU2l6ZT1cImxnXCIgW3RleHRdPVwiJ0VkaXQnXCIgW2Z1bGxXaWR0aF09XCJ0cnVlXCIgKGNsaWNrZWQpPVwidG9nZ2xlRm9ybSgpXCJcbiAgICAgICAgICAgICAgW2N1c3RvbUNsYXNzXT1cIidjcWEtdGV4dC1bMTRweF0gY3FhLXB5LVs5cHhdIGNxYS1ib3JkZXItWyM0MTQxNDZdJ1wiPjwvY3FhLWJ1dHRvbj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPCEtLSBSZWNlbnQgLS0+XG4gIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtZmxleC1jb2wgY3FhLWdhcC0yXCIgKm5nSWY9XCJyZWNlbnRTZWFyY2hlZEl0ZW1zLmxlbmd0aCA+IDBcIj5cbiAgICA8c3BhbiBjbGFzcz1cImNxYS10ZXh0LVsxMnB4XSBjcWEtdGV4dC1bIzZCNzI4MF1cIj5SZWNlbnQ8L3NwYW4+XG5cbiAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWdhcC0yIGNxYS1vdmVyZmxvdy14LWF1dG8gY3FhLXNjcm9sbGJhci10aGluIGNxYS1zY3JvbGxiYXItdHJhY2stdHJhbnNwYXJlbnQgY3FhLXNjcm9sbGJhci10aHVtYi1bI0U1RTdFQl0gY3FhLXNjcm9sbGJhci10aHVtYi1yb3VuZGVkLWZ1bGwgY3FhLXNjcm9sbGJhci10aHVtYi1ob3ZlcjpjcWEtYmctWyNEMUQ1REJdXCI+XG5cbiAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGl0ZW0gb2YgcmVjZW50U2VhcmNoZWRJdGVtc1wiIFxuICAgICAgICBjbGFzcz1cImNxYS1jdXJzb3ItcG9pbnRlciBjcWEtaW5saW5lLWJsb2NrXCJcbiAgICAgICAgKGNsaWNrKT1cIm9uUmVjZW50SXRlbUNsaWNrKGl0ZW0pXCI+XG4gICAgICAgIDxjcWEtYmFkZ2UgIFxuICAgICAgICAgIGNsYXNzPVwiY3FhLWVsZW1lbnQtYmFkZ2UgY3FhLW1iLTIgY3FhLWNoaXAgIWNxYS1iZy13aGl0ZSAhY3FhLXRleHQtWzEycHhdIGNxYS13aGl0ZXNwYWNlLW5vd3JhcFwiIFxuICAgICAgICAgIFtsYWJlbF09XCJpdGVtXCI+PC9jcWEtYmFkZ2U+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPCEtLSBFbGVtZW50IExpYnJhcnkgLS0+XG4gIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtZmxleC1jb2wgY3FhLWdhcC0yXCI+XG4gICAgPHNwYW4gY2xhc3M9XCJjcWEtdGV4dC1bMTJweF0gY3FhLXRleHQtWyM2QjcyODBdXCI+RWxlbWVudCBMaWJyYXJ5PC9zcGFuPlxuICAgIDxjcWEtc2VhcmNoLWJhciBbZnVsbFdpZHRoXT1cInRydWVcIiBbdmFsdWVdPVwic2VhcmNoVmFsdWVcIiBwbGFjZWhvbGRlcj1cIlNlYXJjaCBsaWJyYXJ5XCIgKHZhbHVlQ2hhbmdlKT1cInNlYXJjaCgkZXZlbnQpXCI+PC9jcWEtc2VhcmNoLWJhcj4gICAgICAgIFxuICA8L2Rpdj5cblxuICA8Y3FhLWVsZW1lbnQtbGlzdCBcbiAgICBbaXRlbXNdPVwiZWxlbWVudHNcIlxuICAgIFt0aXRsZUtleV09XCIndGl0bGUnXCJcbiAgICBbc2VsZWN0b3JLZXldPVwiJ3NlbGVjdG9yJ1wiXG4gICAgW2xhYmVsc0tleV09XCInbGFiZWxzJ1wiXG4gICAgW21heEhlaWdodF09XCInMjAwcHgnXCJcbiAgICBbaGFzTW9yZV09XCJoYXNNb3JlRWxlbWVudHNcIlxuICAgIChpdGVtQ2xpY2spPVwib25FbGVtZW50Q2xpY2soJGV2ZW50KVwiXG4gICAgKGxvYWRNb3JlKT1cIm9uTG9hZE1vcmVFbGVtZW50cygpXCI+XG4gIDwvY3FhLWVsZW1lbnQtbGlzdD5cbjwvZGl2PlxuXG5cbiAgICAgIDwhLS0gRm9vdGVyOiBDYW5jZWwsIEFwcGx5IChmdWxsIHdpZHRoIGluIG9uZSByb3cpIC0tPlxuICAgICAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1mbGV4LWNvbCBjcWEtZ2FwLTNcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1pdGVtcy1zdHJldGNoIGNxYS1nYXAtMiBjcWEtdy1mdWxsXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNxYS1mbGV4LTEgY3FhLW1pbi13LTBcIj5cbiAgICAgICAgICAgIDxjcWEtYnV0dG9uIHZhcmlhbnQ9XCJvdXRsaW5lZFwiIGljb249XCJyYWRpb19idXR0b25fY2hlY2tlZFwiIGJ0blNpemU9XCJsZ1wiIFt0ZXh0XT1cIidSZWNvcmQnXCIgW2Z1bGxXaWR0aF09XCJ0cnVlXCIgKGNsaWNrZWQpPVwib25Ub2dnbGVSZWNvcmRDbGljaygpXCJcbiAgICAgICAgICAgICAgW2N1c3RvbUNsYXNzXT1cIidjcWEtdGV4dC1bMTRweF0gY3FhLXB5LVs5cHhdIGNxYS1ib3JkZXItWyM0MTQxNDZdJ1wiPjwvY3FhLWJ1dHRvbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXgtMSBjcWEtbWluLXctMFwiPlxuICAgICAgICAgICAgPGNxYS1idXR0b24gdmFyaWFudD1cIm91dGxpbmVkXCIgaWNvbj1cImFkZFwiIGJ0blNpemU9XCJsZ1wiIFt0ZXh0XT1cIidDcmVhdGUgTmV3J1wiIFtmdWxsV2lkdGhdPVwidHJ1ZVwiIChjbGlja2VkKT1cIm9wZW5DcmVhdGVGb3JtKClcIlxuICAgICAgICAgICAgICBbY3VzdG9tQ2xhc3NdPVwiJ2NxYS10ZXh0LVsxNHB4XSBjcWEtcHktWzlweF0gY3FhLWJvcmRlci1bIzQxNDE0Nl0nXCI+PC9jcWEtYnV0dG9uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICA8L25nLWNvbnRhaW5lcj5cblxuPC9kaXY+XG4iXX0=
|
|
302
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWxlbWVudC1wb3B1cC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL3Rlc3QtY2FzZS1kZXRhaWxzL2VsZW1lbnQtcG9wdXAvZWxlbWVudC1wb3B1cC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL3Rlc3QtY2FzZS1kZXRhaWxzL2VsZW1lbnQtcG9wdXAvZWxlbWVudC1wb3B1cC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsdUJBQXVCLEVBRXZCLFNBQVMsRUFDVCxZQUFZLEVBQ1osTUFBTSxFQUNOLEtBQUssRUFHTCxRQUFRLEVBQ1IsTUFBTSxFQUVOLFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQ0wsa0JBQWtCLEVBQ2xCLDJCQUEyQixHQUc1QixNQUFNLHNCQUFzQixDQUFDO0FBRTlCLE9BQU8sRUFBRSx3QkFBd0IsRUFBbUIsTUFBTSxzQ0FBc0MsQ0FBQztBQUNqRyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQzs7Ozs7Ozs7OztBQVE3RSxNQUFNLE9BQU8scUJBQXFCO0lBNERoQyxZQUN3RCxHQUFxQixFQUNuQyxJQUF1QixFQUNsQyxHQUF1QjtRQUZFLFFBQUcsR0FBSCxHQUFHLENBQWtCO1FBRTlDLFFBQUcsR0FBSCxHQUFHLENBQW9CO1FBOUQ3QyxVQUFLLEdBQVcsRUFBRSxDQUFDO1FBQ25CLFlBQU8sR0FBVyxFQUFFLENBQUM7UUFDckIsV0FBTSxHQUFhLEVBQUUsQ0FBQztRQUN0QixZQUFPLEdBQTZCLEVBQUMsS0FBSyxFQUFFLEVBQUUsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUMsQ0FBQztRQUMxRSxhQUFRLEdBQStCLEVBQUUsQ0FBQztRQUMxQyxlQUFVLEdBQVksS0FBSyxDQUFDO1FBQzVCLGVBQVUsR0FBWSxLQUFLLENBQUM7UUFDNUIsb0JBQWUsR0FBWSxLQUFLLENBQUM7UUFHMUMsc0RBQXNEO1FBQzdDLHNCQUFpQixHQUF1QixFQUFFLENBQUM7UUFDcEQsa0VBQWtFO1FBQ3pELHVCQUFrQixHQUFZLEtBQUssQ0FBQztRQUM3QyxzRUFBc0U7UUFDN0QseUJBQW9CLEdBQVksS0FBSyxDQUFDO1FBQy9DLCtDQUErQztRQUN0QyxrQkFBYSxHQUFhLEVBQUUsQ0FBQztRQUN0Qyx1RkFBdUY7UUFDOUUscUJBQWdCLEdBQVksS0FBSyxDQUFDO1FBQzNDLHlEQUF5RDtRQUNoRCx3QkFBbUIsR0FBYSxFQUFFLENBQUM7UUFFbEMsVUFBSyxHQUFHLElBQUksWUFBWSxFQUFVLENBQUM7UUFDbkMsV0FBTSxHQUFHLElBQUksWUFBWSxFQUFRLENBQUM7UUFDbEMsZ0JBQVcsR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFDO1FBQ3ZDLGtCQUFhLEdBQUcsSUFBSSxZQUFZLEVBQVUsQ0FBQztRQUNyRCx5REFBeUQ7UUFDL0Msb0JBQWUsR0FBRyxJQUFJLFlBQVksRUFBVSxDQUFDO1FBQzdDLHFCQUFnQixHQUFHLElBQUksWUFBWSxFQUFRLENBQUM7UUFDdEQsdUVBQXVFO1FBQzdELGtCQUFhLEdBQUcsSUFBSSxZQUFZLEVBQXdCLENBQUM7UUFDbkUsb0VBQW9FO1FBQzFELGtCQUFhLEdBQUcsSUFBSSxZQUFZLEVBQXdCLENBQUM7UUFDbkUsNkRBQTZEO1FBQ25ELDRCQUF1QixHQUFHLElBQUksWUFBWSxFQUFVLENBQUM7UUFDL0QsOERBQThEO1FBQ3BELHFCQUFnQixHQUFHLElBQUksWUFBWSxFQUFVLENBQUM7UUFDeEQsd0ZBQXdGO1FBQzlFLHdCQUFtQixHQUFHLElBQUksWUFBWSxFQUFVLENBQUM7UUFDM0Qsa0hBQWtIO1FBQ3hHLG9CQUFlLEdBQUcsSUFBSSxZQUFZLEVBQW1ELENBQUM7UUFDaEcsd0hBQXdIO1FBQzlHLGtCQUFhLEdBQUcsSUFBSSxZQUFZLEVBQTRCLENBQUM7UUFDdkUsMEhBQTBIO1FBQ2hILGlCQUFZLEdBQUcsSUFBSSxZQUFZLEVBQVEsQ0FBQztRQUlsRCxvQkFBZSxHQUFHLDhFQUE4RSxDQUFDO1FBQ2pHLG9CQUFlLEdBQUcsS0FBSyxDQUFDO1FBQ3hCLGVBQVUsR0FBWSxLQUFLLENBQUM7UUFDNUIsa0RBQWtEO1FBQ2xELGlCQUFZLEdBQVksS0FBSyxDQUFDO1FBQzlCLHVEQUF1RDtRQUN2RCxnQkFBVyxHQUFHLEVBQUUsQ0FBQztRQVNmLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDO0lBQzNCLENBQUM7SUFFRCxXQUFXLENBQUMsT0FBc0I7UUFDaEMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsSUFBSSxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFO1lBQ25FLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRTtnQkFDbEIsSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7Z0JBQzFCLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO2FBQ3hCO2lCQUFNO2dCQUNMLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDO2dCQUN6QixJQUFJLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQzthQUN6QjtTQUNGO0lBQ0gsQ0FBQztJQUVELFFBQVE7UUFDTixJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUU7WUFDckIsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLO2dCQUFFLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxXQUFXLElBQUksRUFBRSxDQUFDO1lBQ2xFLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTztnQkFBRSxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxJQUFJLEVBQUUsQ0FBQztZQUNsRSxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxLQUFLLENBQUM7Z0JBQUUsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sSUFBSSxFQUFFLENBQUM7WUFDM0UsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sS0FBSyxDQUFDO2dCQUFFLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLElBQUksRUFBRSxDQUFDO1lBQ2pGLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUU7Z0JBQ3hDLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLElBQUksRUFBQyxLQUFLLEVBQUUsRUFBRSxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBQyxDQUFDO2FBQ25GO1NBQ0Y7SUFDSCxDQUFDO0lBRU8sU0FBUztRQUNmLElBQUksQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDO1FBQ3hCLElBQUksQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDO0lBQzVCLENBQUM7SUFFRCxtQkFBbUIsQ0FBQyxPQUE2QjtRQUMvQyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNuQyxDQUFDO0lBRUQsbUJBQW1CLENBQUMsT0FBNkI7UUFDL0MsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDbkMsQ0FBQztJQUVELG1CQUFtQjtRQUNqQixJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7SUFDcEIsQ0FBQztJQUVELHVCQUF1QjtRQUNyQixJQUFJLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQztRQUN4QixJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDakIsSUFBSSxDQUFDLEdBQUcsRUFBRSxZQUFZLEVBQUUsQ0FBQztJQUMzQixDQUFDO0lBRUQscUJBQXFCO1FBQ25CLElBQUksQ0FBQyxHQUFHLEVBQUUsWUFBWSxFQUFFLENBQUM7SUFDM0IsQ0FBQztJQUVELFVBQVU7UUFDUixJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRTtZQUNwQiwwREFBMEQ7WUFDMUQsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUU7Z0JBQ25CLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDO2dCQUN6QixJQUFJLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQztnQkFDeEIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQzthQUMvQztpQkFBTTtnQkFDTCxpQ0FBaUM7Z0JBQ2pDLElBQUksQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDO2dCQUMxQixJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztnQkFDdkIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQzthQUN4RTtTQUNGO2FBQU07WUFDTCxrQ0FBa0M7WUFDbEMsa0VBQWtFO1lBQ2xFLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRTtnQkFDckIsSUFBSSxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUM7YUFDbEI7WUFDRCxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDakIsSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7U0FDM0I7UUFDRCxJQUFJLENBQUMsVUFBVSxHQUFHLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQztRQUNuQyxJQUFJLENBQUMsR0FBRyxFQUFFLFlBQVksRUFBRSxDQUFDO0lBQzNCLENBQUM7SUFFRCxjQUFjO1FBQ1osSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUM7UUFDekIsSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7UUFDeEIsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQ2pCLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUM7UUFDOUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxZQUFZLEVBQUUsQ0FBQztJQUMzQixDQUFDO0lBRUQsbUJBQW1CO1FBQ2pCLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDM0IsQ0FBQztJQUVELFFBQVE7UUFDTixJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUU7WUFDbkIsOERBQThEO1lBQzlELElBQUksSUFBSSxDQUFDLFlBQVksRUFBRTtnQkFDckIsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO2dCQUNqQixJQUFJLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQztnQkFDeEIsSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7Z0JBQzFCLGdEQUFnRDtnQkFDaEQsSUFBSSxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUM7Z0JBQ2pCLElBQUksQ0FBQyxHQUFHLEVBQUUsWUFBWSxFQUFFLENBQUM7YUFDMUI7aUJBQU07Z0JBQ0wsOEJBQThCO2dCQUM5QixJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7Z0JBQ2pCLElBQUksQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDO2FBQ3pCO1NBQ0Y7UUFDRCxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ25CLElBQUksSUFBSSxDQUFDLEdBQUc7WUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUMxQyxDQUFDO0lBRUQsT0FBTztRQUNMLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUNsQixDQUFDO0lBRUQsYUFBYTtRQUNYLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDeEIsSUFBSSxJQUFJLENBQUMsR0FBRztZQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLDJCQUFrQyxDQUFDLENBQUM7SUFDbkUsQ0FBQztJQUVELE1BQU0sQ0FBQyxLQUFhO1FBQ2xCLDhEQUE4RDtRQUM5RCxJQUFJLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQztRQUN6QixJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMvQixJQUFJLENBQUMsR0FBRyxFQUFFLFlBQVksRUFBRSxDQUFDO0lBQzNCLENBQUM7SUFFRCxNQUFNLENBQUMsS0FBWTtRQUNqQixJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUU7WUFDaEIsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ3ZCLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxRQUFRLENBQUMsQ0FBQztTQUNyQztJQUNILENBQUM7SUFHRCxjQUFjLENBQUMsT0FBaUM7UUFDOUMsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7UUFDdkIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDakMsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFO1lBQ25CLElBQUksQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDO1lBQ3hCLElBQUksQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDO1NBQzNCO1FBQ0QsSUFBSSxDQUFDLEdBQUcsRUFBRSxZQUFZLEVBQUUsQ0FBQztJQUMzQixDQUFDO0lBRUQsa0JBQWtCO1FBQ2hCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUMvQixDQUFDO0lBRUQsaUJBQWlCLENBQUMsSUFBWTtRQUM1QiwrQ0FBK0M7UUFDL0MsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7UUFDeEIsb0RBQW9EO1FBQ3BELElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2hDLCtCQUErQjtRQUMvQixJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM5QixJQUFJLENBQUMsR0FBRyxFQUFFLFlBQVksRUFBRSxDQUFDO0lBQzNCLENBQUM7SUFFRCw2RkFBNkY7SUFDN0Ysb0JBQW9CLENBQUMsR0FBaUM7UUFDcEQsSUFBSSxDQUFDLG9CQUFvQixFQUFFLG9CQUFvQixDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3ZELENBQUM7O2tIQXJPVSxxQkFBcUIsa0JBNkRWLHdCQUF3Qiw2QkFDeEIsa0JBQWtCO3NHQTlEN0IscUJBQXFCLG1rQ0FnRHJCLG9CQUFvQixxRUM5RWpDLGk4WEEyTkE7MkZEN0xhLHFCQUFxQjtrQkFOakMsU0FBUzsrQkFDRSxtQkFBbUIsUUFFdkIsRUFBRSxLQUFLLEVBQUUsYUFBYSxFQUFFLG1CQUNiLHVCQUF1QixDQUFDLE1BQU07OzBCQStENUMsUUFBUTs7MEJBQUksTUFBTTsyQkFBQyx3QkFBd0I7OzBCQUMzQyxRQUFROzswQkFBSSxNQUFNOzJCQUFDLGtCQUFrQjs7MEJBQ3JDLFFBQVE7NENBOURGLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csTUFBTTtzQkFBZCxLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxlQUFlO3NCQUF2QixLQUFLO2dCQUVHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBRUcsaUJBQWlCO3NCQUF6QixLQUFLO2dCQUVHLGtCQUFrQjtzQkFBMUIsS0FBSztnQkFFRyxvQkFBb0I7c0JBQTVCLEtBQUs7Z0JBRUcsYUFBYTtzQkFBckIsS0FBSztnQkFFRyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBRUcsbUJBQW1CO3NCQUEzQixLQUFLO2dCQUVJLEtBQUs7c0JBQWQsTUFBTTtnQkFDRyxNQUFNO3NCQUFmLE1BQU07Z0JBQ0csV0FBVztzQkFBcEIsTUFBTTtnQkFDRyxhQUFhO3NCQUF0QixNQUFNO2dCQUVHLGVBQWU7c0JBQXhCLE1BQU07Z0JBQ0csZ0JBQWdCO3NCQUF6QixNQUFNO2dCQUVHLGFBQWE7c0JBQXRCLE1BQU07Z0JBRUcsYUFBYTtzQkFBdEIsTUFBTTtnQkFFRyx1QkFBdUI7c0JBQWhDLE1BQU07Z0JBRUcsZ0JBQWdCO3NCQUF6QixNQUFNO2dCQUVHLG1CQUFtQjtzQkFBNUIsTUFBTTtnQkFFRyxlQUFlO3NCQUF4QixNQUFNO2dCQUVHLGFBQWE7c0JBQXRCLE1BQU07Z0JBRUcsWUFBWTtzQkFBckIsTUFBTTtnQkFFMEIsb0JBQW9CO3NCQUFwRCxTQUFTO3VCQUFDLG9CQUFvQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBFdmVudEVtaXR0ZXIsXG4gIEluamVjdCxcbiAgSW5wdXQsXG4gIE9uQ2hhbmdlcyxcbiAgT25Jbml0LFxuICBPcHRpb25hbCxcbiAgT3V0cHV0LFxuICBTaW1wbGVDaGFuZ2VzLFxuICBWaWV3Q2hpbGQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgRUxFTUVOVF9QT1BVUF9EQVRBLFxuICBFTEVNRU5UX1BPUFVQX0VESVRfSU5fREVQVEgsXG4gIEVsZW1lbnRQb3B1cERhdGEsXG4gIEVsZW1lbnRQb3B1cERhdGFFbGVtZW50cyxcbn0gZnJvbSAnLi9lbGVtZW50LXBvcHVwLWRhdGEnO1xuaW1wb3J0IHsgRWxlbWVudENyZWF0ZVBheWxvYWQsIEVsZW1lbnRVcGRhdGVQYXlsb2FkLCBTY3JlZW5OYW1lT3B0aW9uIH0gZnJvbSAnLi9lbGVtZW50LXBvcHVwLWZvcm0tZGF0YSc7XG5pbXBvcnQgeyBDVVNUT01fRUxFTUVOVF9QT1BVUF9SRUYsIEVsZW1lbnRQb3B1cFJlZiB9IGZyb20gJy4vLi4vZWxlbWVudC1wb3B1cC9lbGVtZW50LXBvcHVwLXJlZic7XG5pbXBvcnQgeyBFbGVtZW50Rm9ybUNvbXBvbmVudCB9IGZyb20gJy4vZWxlbWVudC1mb3JtL2VsZW1lbnQtZm9ybS5jb21wb25lbnQnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjcWEtZWxlbWVudC1wb3B1cCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9lbGVtZW50LXBvcHVwLmNvbXBvbmVudC5odG1sJyxcbiAgaG9zdDogeyBjbGFzczogJ2NxYS11aS1yb290JyB9LFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgRWxlbWVudFBvcHVwQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMge1xuICBASW5wdXQoKSB2YWx1ZTogc3RyaW5nID0gJyc7XG4gIEBJbnB1dCgpIGhlbHBVcmw6IHN0cmluZyA9ICcnO1xuICBASW5wdXQoKSBsYWJlbHM6IHN0cmluZ1tdID0gW107XG4gIEBJbnB1dCgpIGVsZW1lbnQ6IEVsZW1lbnRQb3B1cERhdGFFbGVtZW50cyA9IHt0aXRsZTogJycsIHNlbGVjdG9yOiAnJywgbGFiZWxzOiBbXX07XG4gIEBJbnB1dCgpIGVsZW1lbnRzOiBFbGVtZW50UG9wdXBEYXRhRWxlbWVudHNbXSA9IFtdO1xuICBASW5wdXQoKSBlbmFibGVGb3JtOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIGlzT25SZWNvcmQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgaGFzTW9yZUVsZW1lbnRzOiBib29sZWFuID0gZmFsc2U7XG4gIC8qKiBFbGVtZW50IElEIHdoZW4gZWRpdGluZyBleGlzdGluZyBlbGVtZW50ICovXG4gIEBJbnB1dCgpIGVsZW1lbnRJZD86IG51bWJlcjtcbiAgLyoqIFNjcmVlbiBuYW1lIG9wdGlvbnMgZm9yIGF1dG9jb21wbGV0ZSAoZnJvbSBBUEkpICovXG4gIEBJbnB1dCgpIHNjcmVlbk5hbWVPcHRpb25zOiBTY3JlZW5OYW1lT3B0aW9uW10gPSBbXTtcbiAgLyoqIFdoZXRoZXIgbW9yZSBzY3JlZW4gbmFtZXMgYXJlIGF2YWlsYWJsZSBmb3IgaW5maW5pdGUgc2Nyb2xsICovXG4gIEBJbnB1dCgpIGhhc01vcmVTY3JlZW5OYW1lczogYm9vbGVhbiA9IGZhbHNlO1xuICAvKiogVHJ1ZSB3aGlsZSBwYXJlbnQgaXMgbG9hZGluZyBzY3JlZW4gbmFtZXMgKHNlYXJjaCBvciBsb2FkIG1vcmUpICovXG4gIEBJbnB1dCgpIGlzTG9hZGluZ1NjcmVlbk5hbWVzOiBib29sZWFuID0gZmFsc2U7XG4gIC8qKiBTdWdnZXN0ZWQgdGFncyBmcm9tIEFQSSBmb3IgbGFiZWxzIGZpZWxkICovXG4gIEBJbnB1dCgpIHN1Z2dlc3RlZFRhZ3M6IHN0cmluZ1tdID0gW107XG4gIC8qKiBUcnVlIHdoaWxlIHBhcmVudCBpcyBmZXRjaGluZyBsYXRlc3QgZWxlbWVudCBkYXRhIGZvciBlZGl0IChzaG93cyBsb2FkaW5nIHN0YXRlKSAqL1xuICBASW5wdXQoKSBpc0VsZW1lbnRMb2FkaW5nOiBib29sZWFuID0gZmFsc2U7XG4gIC8qKiBSZWNlbnQgc2VhcmNoZWQgaXRlbXMgdG8gZGlzcGxheSBpbiBSZWNlbnQgc2VjdGlvbiAqL1xuICBASW5wdXQoKSByZWNlbnRTZWFyY2hlZEl0ZW1zOiBzdHJpbmdbXSA9IFtdO1xuXG4gIEBPdXRwdXQoKSBhcHBseSA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xuICBAT3V0cHV0KCkgY2FuY2VsID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICBAT3V0cHV0KCkgZWRpdEluRGVwdGggPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG4gIEBPdXRwdXQoKSBzZWFyY2hFbGVtZW50ID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XG4gIC8qKiBFbWl0dGVkIHdoZW4gdXNlciBjbGlja3Mgb24gYSByZWNlbnQgc2VhcmNoZWQgaXRlbSAqL1xuICBAT3V0cHV0KCkgcmVjZW50SXRlbUNsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XG4gIEBPdXRwdXQoKSBsb2FkTW9yZUVsZW1lbnRzID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICAvKiogRW1pdHRlZCB3aGVuIHVzZXIgY3JlYXRlcyBhIG5ldyBlbGVtZW50IChwYXJlbnQgc2hvdWxkIGNhbGwgQVBJKSAqL1xuICBAT3V0cHV0KCkgY3JlYXRlRWxlbWVudCA9IG5ldyBFdmVudEVtaXR0ZXI8RWxlbWVudENyZWF0ZVBheWxvYWQ+KCk7XG4gIC8qKiBFbWl0dGVkIHdoZW4gdXNlciB1cGRhdGVzIGFuIGVsZW1lbnQgKHBhcmVudCBzaG91bGQgY2FsbCBBUEkpICovXG4gIEBPdXRwdXQoKSB1cGRhdGVFbGVtZW50ID0gbmV3IEV2ZW50RW1pdHRlcjxFbGVtZW50VXBkYXRlUGF5bG9hZD4oKTtcbiAgLyoqIEVtaXR0ZWQgd2hlbiB1c2VyIHJlcXVlc3RzIHRvIGNyZWF0ZSBhIG5ldyBzY3JlZW4gbmFtZSAqL1xuICBAT3V0cHV0KCkgY3JlYXRlU2NyZWVuTmFtZVJlcXVlc3QgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcbiAgLyoqIEVtaXR0ZWQgd2hlbiB1c2VyIHNlYXJjaGVzIHNjcmVlbiBuYW1lcyAoc2VydmVyIHNlYXJjaCkgKi9cbiAgQE91dHB1dCgpIHNlYXJjaFNjcmVlbk5hbWUgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcbiAgLyoqIEVtaXR0ZWQgd2hlbiB1c2VyIHNjcm9sbHMgdG8gbG9hZCBtb3JlIHNjcmVlbiBuYW1lcyAocGFzc2VzIGN1cnJlbnQgc2VhcmNoIHF1ZXJ5KSAqL1xuICBAT3V0cHV0KCkgbG9hZE1vcmVTY3JlZW5OYW1lcyA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xuICAvKiogRW1pdHRlZCB3aGVuIENyZWF0ZSBvciBFZGl0IGZvcm0gaXMgb3BlbmVkIC0gcGFyZW50IHNob3VsZCBmZXRjaCBzY3JlZW4gbmFtZXMgYW5kIChmb3IgZWRpdCkgbGF0ZXN0IGVsZW1lbnQgKi9cbiAgQE91dHB1dCgpIGZvcm1PcGVuUmVxdWVzdCA9IG5ldyBFdmVudEVtaXR0ZXI8eyBtb2RlOiAnY3JlYXRlJyB8ICdlZGl0JzsgZWxlbWVudElkPzogbnVtYmVyIH0+KCk7XG4gIC8qKiBFbWl0dGVkIHdoZW4gdXNlciBzZWxlY3RzIGFuIGVsZW1lbnQgZnJvbSB0aGUgbGlzdCAtIHBhcmVudCBzaG91bGQgc2V0IGVsZW1lbnQgYW5kIGVkaXRpbmdFbGVtZW50SWQgZm9yIEVkaXQgZmxvdyAqL1xuICBAT3V0cHV0KCkgZWxlbWVudFNlbGVjdCA9IG5ldyBFdmVudEVtaXR0ZXI8RWxlbWVudFBvcHVwRGF0YUVsZW1lbnRzPigpO1xuICAvKiogRW1pdHRlZCB3aGVuIHVzZXIgY2xpY2tzIFJlY29yZCAtIHBhcmVudCBzaG91bGQgY2hlY2sgZXh0ZW5zaW9uIGFuZCBjYWxsIGluc3RhbGxQbHVnaW4gb3Igb3BlblNpZGVQYW5lbEFuZExpc3RTdGVwcyAqL1xuICBAT3V0cHV0KCkgdG9nZ2xlUmVjb3JkID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuXG4gIEBWaWV3Q2hpbGQoRWxlbWVudEZvcm1Db21wb25lbnQpIGVsZW1lbnRGb3JtQ29tcG9uZW50PzogRWxlbWVudEZvcm1Db21wb25lbnQ7XG5cbiAgaGVscFRvb2x0aXBUZXh0ID0gJ05vdCBzdXJlIHdoYXQgdG8gZG8/IENsaWNrIHRvIGdvIHRvIG91ciBkZXRhaWxlZCBzdGVwIGNyZWF0aW9uIGRvY3VtZW50YXRpb24nO1xuICBzaG93SGVscFRvb2x0aXAgPSBmYWxzZTtcbiAgaXNFZGl0TW9kZTogYm9vbGVhbiA9IGZhbHNlO1xuICAvKiogV2hldGhlciB3ZSdyZSBpbiBjcmVhdGUgbW9kZSAobm8gZWxlbWVudElkKSAqL1xuICBpc0NyZWF0ZU1vZGU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgLyoqIEN1cnJlbnQgc2VhcmNoIGlucHV0IHZhbHVlIChib3VuZCB0byBzZWFyY2ggYmFyKSAqL1xuICBzZWFyY2hWYWx1ZSA9ICcnO1xuXG4gIHByaXZhdGUgaW5qZWN0ZWREYXRhPzogRWxlbWVudFBvcHVwRGF0YTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBAT3B0aW9uYWwoKSBASW5qZWN0KENVU1RPTV9FTEVNRU5UX1BPUFVQX1JFRikgcHJpdmF0ZSByZWY/OiBFbGVtZW50UG9wdXBSZWYsXG4gICAgQE9wdGlvbmFsKCkgQEluamVjdChFTEVNRU5UX1BPUFVQX0RBVEEpIGRhdGE/OiBFbGVtZW50UG9wdXBEYXRhLFxuICAgIEBPcHRpb25hbCgpIHByaXZhdGUgcmVhZG9ubHkgY2RyPzogQ2hhbmdlRGV0ZWN0b3JSZWZcbiAgKSB7XG4gICAgdGhpcy5pbmplY3RlZERhdGEgPSBkYXRhO1xuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGlmICgoY2hhbmdlc1snZWxlbWVudCddIHx8IGNoYW5nZXNbJ2VsZW1lbnRJZCddKSAmJiB0aGlzLmVuYWJsZUZvcm0pIHtcbiAgICAgIGlmICh0aGlzLmVsZW1lbnRJZCkge1xuICAgICAgICB0aGlzLmlzQ3JlYXRlTW9kZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLmlzRWRpdE1vZGUgPSB0cnVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5pc0NyZWF0ZU1vZGUgPSB0cnVlO1xuICAgICAgICB0aGlzLmlzRWRpdE1vZGUgPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pbmplY3RlZERhdGEpIHtcbiAgICAgIGlmICghdGhpcy52YWx1ZSkgdGhpcy52YWx1ZSA9IHRoaXMuaW5qZWN0ZWREYXRhLmRlc2NyaXB0aW9uID8/ICcnO1xuICAgICAgaWYgKCF0aGlzLmhlbHBVcmwpIHRoaXMuaGVscFVybCA9IHRoaXMuaW5qZWN0ZWREYXRhLmhlbHBVcmwgPz8gJyc7XG4gICAgICBpZiAodGhpcy5sYWJlbHMubGVuZ3RoID09PSAwKSB0aGlzLmxhYmVscyA9IHRoaXMuaW5qZWN0ZWREYXRhLmxhYmVscyA/PyBbXTtcbiAgICAgIGlmICh0aGlzLmVsZW1lbnRzLmxlbmd0aCA9PT0gMCkgdGhpcy5lbGVtZW50cyA9IHRoaXMuaW5qZWN0ZWREYXRhLmVsZW1lbnRzID8/IFtdO1xuICAgICAgaWYgKCF0aGlzLmVsZW1lbnQgfHwgIXRoaXMuZWxlbWVudC50aXRsZSkge1xuICAgICAgICB0aGlzLmVsZW1lbnQgPSB0aGlzLmluamVjdGVkRGF0YS5lbGVtZW50ID8/IHt0aXRsZTogJycsIHNlbGVjdG9yOiAnJywgbGFiZWxzOiBbXX07XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSByZXNldEZvcm0oKTogdm9pZCB7XG4gICAgdGhpcy5pc0VkaXRNb2RlID0gZmFsc2U7XG4gICAgdGhpcy5pc0NyZWF0ZU1vZGUgPSBmYWxzZTtcbiAgfVxuXG4gIG9uRWxlbWVudEZvcm1DcmVhdGUocGF5bG9hZDogRWxlbWVudENyZWF0ZVBheWxvYWQpOiB2b2lkIHtcbiAgICB0aGlzLmNyZWF0ZUVsZW1lbnQuZW1pdChwYXlsb2FkKTtcbiAgfVxuXG4gIG9uRWxlbWVudEZvcm1VcGRhdGUocGF5bG9hZDogRWxlbWVudFVwZGF0ZVBheWxvYWQpOiB2b2lkIHtcbiAgICB0aGlzLnVwZGF0ZUVsZW1lbnQuZW1pdChwYXlsb2FkKTtcbiAgfVxuXG4gIG9uRWxlbWVudEZvcm1DYW5jZWwoKTogdm9pZCB7XG4gICAgdGhpcy50b2dnbGVGb3JtKCk7XG4gIH1cblxuICBvbkNyZWF0ZU9yVXBkYXRlU3VjY2VzcygpOiB2b2lkIHtcbiAgICB0aGlzLmVuYWJsZUZvcm0gPSBmYWxzZTtcbiAgICB0aGlzLnJlc2V0Rm9ybSgpO1xuICAgIHRoaXMuY2RyPy5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIG9uQ3JlYXRlT3JVcGRhdGVFcnJvcigpOiB2b2lkIHtcbiAgICB0aGlzLmNkcj8ubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICB0b2dnbGVGb3JtKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5lbmFibGVGb3JtKSB7XG4gICAgICAvLyBJZiBubyBlbGVtZW50SWQsIGdvIHRvIGNyZWF0ZSBtb2RlIGluc3RlYWQgb2YgZWRpdCBtb2RlXG4gICAgICBpZiAoIXRoaXMuZWxlbWVudElkKSB7XG4gICAgICAgIHRoaXMuaXNDcmVhdGVNb2RlID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5pc0VkaXRNb2RlID0gZmFsc2U7XG4gICAgICAgIHRoaXMuZm9ybU9wZW5SZXF1ZXN0LmVtaXQoeyBtb2RlOiAnY3JlYXRlJyB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIEhhcyBlbGVtZW50SWQsIGdvIHRvIGVkaXQgbW9kZVxuICAgICAgICB0aGlzLmlzQ3JlYXRlTW9kZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLmlzRWRpdE1vZGUgPSB0cnVlO1xuICAgICAgICB0aGlzLmZvcm1PcGVuUmVxdWVzdC5lbWl0KHsgbW9kZTogJ2VkaXQnLCBlbGVtZW50SWQ6IHRoaXMuZWxlbWVudElkIH0pO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBDbG9zaW5nIGZvcm0gLSByZXNldCBldmVyeXRoaW5nXG4gICAgICAvLyBJZiBpbiBjcmVhdGUgbW9kZSwgcmVzZXQgbGFiZWxzIHdoZW4gZ29pbmcgYmFjayB0byBlbGVtZW50IGxpc3RcbiAgICAgIGlmICh0aGlzLmlzQ3JlYXRlTW9kZSkge1xuICAgICAgICB0aGlzLmxhYmVscyA9IFtdO1xuICAgICAgfVxuICAgICAgdGhpcy5yZXNldEZvcm0oKTtcbiAgICAgIHRoaXMuaXNDcmVhdGVNb2RlID0gZmFsc2U7XG4gICAgfVxuICAgIHRoaXMuZW5hYmxlRm9ybSA9ICF0aGlzLmVuYWJsZUZvcm07XG4gICAgdGhpcy5jZHI/Lm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgb3BlbkNyZWF0ZUZvcm0oKTogdm9pZCB7XG4gICAgdGhpcy5pc0NyZWF0ZU1vZGUgPSB0cnVlO1xuICAgIHRoaXMuaXNFZGl0TW9kZSA9IGZhbHNlO1xuICAgIHRoaXMucmVzZXRGb3JtKCk7XG4gICAgdGhpcy5lbmFibGVGb3JtID0gdHJ1ZTtcbiAgICB0aGlzLmZvcm1PcGVuUmVxdWVzdC5lbWl0KHsgbW9kZTogJ2NyZWF0ZScgfSk7XG4gICAgdGhpcy5jZHI/Lm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgb25Ub2dnbGVSZWNvcmRDbGljaygpOiB2b2lkIHtcbiAgICB0aGlzLnRvZ2dsZVJlY29yZC5lbWl0KCk7XG4gIH1cblxuICBvbkNhbmNlbCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5lbmFibGVGb3JtKSB7XG4gICAgICAvLyBJZiBpbiBjcmVhdGUgbW9kZSwgZ28gYmFjayB0byBlbGVtZW50IGxpc3QgYW5kIHJlc2V0IGxhYmVsc1xuICAgICAgaWYgKHRoaXMuaXNDcmVhdGVNb2RlKSB7XG4gICAgICAgIHRoaXMucmVzZXRGb3JtKCk7XG4gICAgICAgIHRoaXMuZW5hYmxlRm9ybSA9IGZhbHNlO1xuICAgICAgICB0aGlzLmlzQ3JlYXRlTW9kZSA9IGZhbHNlO1xuICAgICAgICAvLyBSZXNldCBsYWJlbHMgd2hlbiBnb2luZyBiYWNrIGZyb20gY3JlYXRlIG1vZGVcbiAgICAgICAgdGhpcy5sYWJlbHMgPSBbXTtcbiAgICAgICAgdGhpcy5jZHI/Lm1hcmtGb3JDaGVjaygpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gRWRpdCBtb2RlIC0ganVzdCByZXNldCBmb3JtXG4gICAgICAgIHRoaXMucmVzZXRGb3JtKCk7XG4gICAgICAgIHRoaXMuZW5hYmxlRm9ybSA9IGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLmNhbmNlbC5lbWl0KCk7XG4gICAgaWYgKHRoaXMucmVmKSB0aGlzLnJlZi5jbG9zZSh1bmRlZmluZWQpO1xuICB9XG5cbiAgb25DbG9zZSgpOiB2b2lkIHtcbiAgICB0aGlzLm9uQ2FuY2VsKCk7XG4gIH1cblxuICBvbkVkaXRJbkRlcHRoKCk6IHZvaWQge1xuICAgIHRoaXMuZWRpdEluRGVwdGguZW1pdCgpO1xuICAgIGlmICh0aGlzLnJlZikgdGhpcy5yZWYuY2xvc2UoRUxFTUVOVF9QT1BVUF9FRElUX0lOX0RFUFRIIGFzIGFueSk7XG4gIH1cblxuICBzZWFyY2goZXZlbnQ6IHN0cmluZyk6IHZvaWQge1xuICAgIC8vIFVwZGF0ZSBzZWFyY2hWYWx1ZSB0byBrZWVwIGl0IGluIHN5bmMgd2l0aCBzZWFyY2ggYmFyIGlucHV0XG4gICAgdGhpcy5zZWFyY2hWYWx1ZSA9IGV2ZW50O1xuICAgIHRoaXMuc2VhcmNoRWxlbWVudC5lbWl0KGV2ZW50KTtcbiAgICB0aGlzLmNkcj8ubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBvbkhlbHAoZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaGVscFVybCkge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIHdpbmRvdy5vcGVuKHRoaXMuaGVscFVybCwgJ19ibGFuaycpO1xuICAgIH1cbiAgfVxuXG5cbiAgb25FbGVtZW50Q2xpY2soZWxlbWVudDogRWxlbWVudFBvcHVwRGF0YUVsZW1lbnRzKTogdm9pZCB7XG4gICAgdGhpcy5lbGVtZW50ID0gZWxlbWVudDtcbiAgICB0aGlzLmVsZW1lbnRTZWxlY3QuZW1pdChlbGVtZW50KTtcbiAgICBpZiAodGhpcy5lbmFibGVGb3JtKSB7XG4gICAgICB0aGlzLmVuYWJsZUZvcm0gPSBmYWxzZTtcbiAgICAgIHRoaXMuaXNDcmVhdGVNb2RlID0gZmFsc2U7XG4gICAgfVxuICAgIHRoaXMuY2RyPy5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIG9uTG9hZE1vcmVFbGVtZW50cygpOiB2b2lkIHtcbiAgICB0aGlzLmxvYWRNb3JlRWxlbWVudHMuZW1pdCgpO1xuICB9XG5cbiAgb25SZWNlbnRJdGVtQ2xpY2soaXRlbTogc3RyaW5nKTogdm9pZCB7XG4gICAgLy8gVXBkYXRlIHNlYXJjaCBiYXIgaW5wdXQgd2l0aCB0aGUgcmVjZW50IGl0ZW1cbiAgICB0aGlzLnNlYXJjaFZhbHVlID0gaXRlbTtcbiAgICAvLyBFbWl0IGV2ZW50IHRvIHRyaWdnZXIgc2VhcmNoIGZvciB0aGlzIHJlY2VudCBpdGVtXG4gICAgdGhpcy5yZWNlbnRJdGVtQ2xpY2suZW1pdChpdGVtKTtcbiAgICAvLyBBbHNvIHRyaWdnZXIgc2VhcmNoIGRpcmVjdGx5XG4gICAgdGhpcy5zZWFyY2hFbGVtZW50LmVtaXQoaXRlbSk7XG4gICAgdGhpcy5jZHI/Lm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgLyoqIENhbGxlZCBieSBwYXJlbnQgd2hlbiBhIG5ldyBzY3JlZW4gbmFtZSB3YXMgY3JlYXRlZCAoc28gd2UgY2FuIHNldCB0aGUgc2VsZWN0ZWQgdmFsdWUpICovXG4gIHNldENyZWF0ZWRTY3JlZW5OYW1lKG9wdDogeyBpZDogbnVtYmVyOyBuYW1lOiBzdHJpbmcgfSk6IHZvaWQge1xuICAgIHRoaXMuZWxlbWVudEZvcm1Db21wb25lbnQ/LnNldENyZWF0ZWRTY3JlZW5OYW1lKG9wdCk7XG4gIH1cbn1cbiIsIjxkaXZcbiAgY2xhc3M9XCJjcWEtYmctd2hpdGUgY3FhLXJvdW5kZWQtWzEycHhdIGNxYS1zaGFkb3ctbGcgY3FhLWJvcmRlciBjcWEtYm9yZGVyLXNvbGlkIGNxYS1ib3JkZXItWyNFNUU3RUJdIGNxYS13LVs1MDBweF0gY3FhLWZsZXggY3FhLWZsZXgtY29sIGNxYS1nYXAtWzEycHhdIGNxYS1wLTIgY3FhLWJveC1ib3JkZXJcIiBzdHlsZT1cIndpZHRoOiAxMDAlO1wiPlxuICA8IS0tIEhlYWRlcjogdGl0bGUgbGVmdDsgTmVlZCBoZWxwPyArIGNsb3NlIGljb24gcmlnaHQgLS0+XG4gIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1qdXN0aWZ5LWJldHdlZW4gY3FhLWdhcC0yIGNxYS1weC00XCI+XG4gICAgPGgyIGNsYXNzPVwiY3FhLXRleHQtWzE2cHhdIGNxYS1sZWFkaW5nLVsyNHB4XSBjcWEtZm9udC1ib2xkIGNxYS10ZXh0LVsjMTExODI3XSBjcWEtbS0wIGNxYS1mb250LVs2MDBdXCI+XG4gICAgICBFbGVtZW50XG4gICAgPC9oMj5cbiAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlciBjcWEtZ2FwLTJcIj5cbiAgICAgIDwhLS0gTmVlZCBoZWxwPyB3aXRoIGN1c3RvbSB0b29sdGlwICh3b3JrcyBpbnNpZGUgb3ZlcmxheSkgLS0+XG4gICAgICA8ZGl2IGNsYXNzPVwiY3FhLXJlbGF0aXZlIGNxYS1pbmxpbmUtZmxleFwiXG4gICAgICAgIChtb3VzZWVudGVyKT1cInNob3dIZWxwVG9vbHRpcCA9IHRydWVcIiAobW91c2VsZWF2ZSk9XCJzaG93SGVscFRvb2x0aXAgPSBmYWxzZVwiPlxuICAgICAgICA8YSAqbmdJZj1cImhlbHBVcmxcIiBocmVmPVwiI1wiIChjbGljayk9XCJvbkhlbHAoJGV2ZW50KVwiXG4gICAgICAgICAgY2xhc3M9XCJjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1nYXAtMSBjcWEtdGV4dC1bIzNGNDNFRV0gY3FhLXRleHQtWzEycHhdIGNxYS1sZWFkaW5nLVsyMXB4XSBjcWEtbm8tdW5kZXJsaW5lIGNxYS1jdXJzb3ItcG9pbnRlclwiPlxuICAgICAgICAgIDxzdmcgd2lkdGg9XCIxN1wiIGhlaWdodD1cIjE2XCIgdmlld0JveD1cIjAgMCAxNyAxNlwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIGNsYXNzPVwiY3FhLWZsZXgtc2hyaW5rLTBcIiBhcmlhLWhpZGRlbj1cInRydWVcIj5cbiAgICAgICAgICAgIDxnIGNsaXAtcGF0aD1cInVybCgjaGVscC1pY29uLWNsaXApXCI+XG4gICAgICAgICAgICAgIDxwYXRoIGQ9XCJNOC41MDAzMyAxNC42NjYzQzEyLjQxMjMgMTQuNjY2MyAxNS41ODM3IDExLjY4MTYgMTUuNTgzNyA3Ljk5OTY3QzE1LjU4MzcgNC4zMTc3OCAxMi40MTIzIDEuMzMzMDEgOC41MDAzMyAxLjMzMzAxQzQuNTg4MzEgMS4zMzMwMSAxLjQxNjk5IDQuMzE3NzggMS40MTY5OSA3Ljk5OTY3QzEuNDE2OTkgMTEuNjgxNiA0LjU4ODMxIDE0LjY2NjMgOC41MDAzMyAxNC42NjYzWlwiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz5cbiAgICAgICAgICAgICAgPHBhdGggZD1cIk02LjQzODQ4IDYuMDAwMzhDNi42MDUwMSA1LjU1NDgzIDYuOTMzNzEgNS4xNzkxMiA3LjM2NjM2IDQuOTM5OEM3Ljc5OTAxIDQuNzAwNDkgOC4zMDc2OSA0LjYxMzAxIDguODAyMzEgNC42OTI4NUM5LjI5NjkzIDQuNzcyNyA5Ljc0NTU2IDUuMDE0NzMgMTAuMDY4NyA1LjM3NjA3QzEwLjM5MTkgNS43Mzc0IDEwLjU2ODggNi4xOTQ3MyAxMC41NjgxIDYuNjY3MDVDMTAuNTY4MSA4LjAwMDM4IDguNDQzMDYgOC42NjcwNSA4LjQ0MzA2IDguNjY3MDVcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+XG4gICAgICAgICAgICAgIDxwYXRoIGQ9XCJNOC41IDExLjMzM0g4LjUwOTY2XCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPlxuICAgICAgICAgICAgPC9nPlxuICAgICAgICAgICAgPGRlZnM+XG4gICAgICAgICAgICAgIDxjbGlwUGF0aCBpZD1cImhlbHAtaWNvbi1jbGlwXCI+XG4gICAgICAgICAgICAgICAgPHJlY3Qgd2lkdGg9XCIxN1wiIGhlaWdodD1cIjE2XCIgZmlsbD1cIndoaXRlXCIvPlxuICAgICAgICAgICAgICA8L2NsaXBQYXRoPlxuICAgICAgICAgICAgPC9kZWZzPlxuICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgIE5lZWQgaGVscCA/XG4gICAgICAgIDwvYT5cbiAgICAgICAgPHNwYW4gKm5nSWY9XCIhaGVscFVybFwiIGNsYXNzPVwiY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlciBjcWEtZ2FwLTEuNSBjcWEtZm9udC1bNTAwXSBjcWEtdGV4dC1bMTBweF0gY3FhLWN1cnNvci1kZWZhdWx0XCI+XG4gICAgICAgICAgPHN2ZyB3aWR0aD1cIjE3XCIgaGVpZ2h0PVwiMTZcIiB2aWV3Qm94PVwiMCAwIDE3IDE2XCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgY2xhc3M9XCJjcWEtZmxleC1zaHJpbmstMCBjcWEtdGV4dC1bIzNGNDNFRV1cIiBhcmlhLWhpZGRlbj1cInRydWVcIj5cbiAgICAgICAgICAgIDxnIGNsaXAtcGF0aD1cInVybCgjaGVscC1pY29uLWNsaXAtbm9saW5rKVwiPlxuICAgICAgICAgICAgICA8cGF0aCBkPVwiTTguNTAwMzMgMTQuNjY2M0MxMi40MTIzIDE0LjY2NjMgMTUuNTgzNyAxMS42ODE2IDE1LjU4MzcgNy45OTk2N0MxNS41ODM3IDQuMzE3NzggMTIuNDEyMyAxLjMzMzAxIDguNTAwMzMgMS4zMzMwMUM0LjU4ODMxIDEuMzMzMDEgMS40MTY5OSA0LjMxNzc4IDEuNDE2OTkgNy45OTk2N0MxLjQxNjk5IDExLjY4MTYgNC41ODgzMSAxNC42NjYzIDguNTAwMzMgMTQuNjY2M1pcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+XG4gICAgICAgICAgICAgIDxwYXRoIGQ9XCJNNi40Mzg0OCA2LjAwMDM4QzYuNjA1MDEgNS41NTQ4MyA2LjkzMzcxIDUuMTc5MTIgNy4zNjYzNiA0LjkzOThDNy43OTkwMSA0LjcwMDQ5IDguMzA3NjkgNC42MTMwMSA4LjgwMjMxIDQuNjkyODVDOS4yOTY5MyA0Ljc3MjcgOS43NDU1NiA1LjAxNDczIDEwLjA2ODcgNS4zNzYwN0MxMC4zOTE5IDUuNzM3NCAxMC41Njg4IDYuMTk0NzMgMTAuNTY4MSA2LjY2NzA1QzEwLjU2ODEgOC4wMDAzOCA4LjQ0MzA2IDguNjY3MDUgOC40NDMwNiA4LjY2NzA1XCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPlxuICAgICAgICAgICAgICA8cGF0aCBkPVwiTTguNSAxMS4zMzNIOC41MDk2NlwiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz5cbiAgICAgICAgICAgIDwvZz5cbiAgICAgICAgICAgIDxkZWZzPlxuICAgICAgICAgICAgICA8Y2xpcFBhdGggaWQ9XCJoZWxwLWljb24tY2xpcC1ub2xpbmtcIj5cbiAgICAgICAgICAgICAgICA8cmVjdCB3aWR0aD1cIjE3XCIgaGVpZ2h0PVwiMTZcIiBmaWxsPVwid2hpdGVcIi8+XG4gICAgICAgICAgICAgIDwvY2xpcFBhdGg+XG4gICAgICAgICAgICA8L2RlZnM+XG4gICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgTmVlZCBoZWxwID9cbiAgICAgICAgPC9zcGFuPlxuICAgICAgICA8IS0tIEN1c3RvbSB0b29sdGlwIChleGFjdCBzcGVjOiAzMDbDlzIwIGNvbnRlbnQsIDZweCByYWRpdXMsICMwQTBBMEEsIG5vIGFycm93KSAtLT5cbiAgICAgICAgPGRpdiAqbmdJZj1cInNob3dIZWxwVG9vbHRpcFwiIGNsYXNzPVwiY3FhLWFic29sdXRlIGNxYS1wb2ludGVyLWV2ZW50cy1ub25lIGNxYS16LVsxMDBdIGNxYS10b3AtWy0yNHB4XSBjcWEtbGVmdC1bLTEyNXB4XVwiXG4gICAgICAgICAgcm9sZT1cInRvb2x0aXBcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3FhLXRleHQtd2hpdGUgY3FhLXRleHQtY2VudGVyIGNxYS13aGl0ZXNwYWNlLW5vd3JhcCBjcWEtdy1bMzA2cHhdIGNxYS1taW4taC1bMjBweF0gY3FhLXJvdW5kZWQtWzZweF0gY3FhLXB5LTEgY3FhLXB4LTIgY3FhLWJnLVsjMEEwQTBBXSBjcWEtbGVhZGluZy1bMjBweF0gY3FhLXRleHQtWzhweF1cIj5cbiAgICAgICAgICAgIHt7IGhlbHBUb29sdGlwVGV4dCB9fVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGNxYS1idXR0b24gdHlwZT1cImJ1dHRvblwiIHZhcmlhbnQ9XCJ0ZXh0XCIgYnRuU2l6ZT1cIm1kXCJcbiAgICAgICAgW3RleHRdPVwiJydcIlxuICAgICAgICBpY29uPVwiY2xvc2VcIlxuICAgICAgICAoY2xpY2tlZCk9XCJvbkNsb3NlKClcIlxuICAgICAgICBbY3VzdG9tQ2xhc3NdPVwiJ2NxYS1taW4taC1bMjhweF0gY3FhLW1pbi13LVsyOHB4XSBjcWEtcC0xIGNxYS10ZXh0LVsjNkI3MjgwXSBob3ZlcjpjcWEtYmctWyNGM0Y0RjZdJ1wiXG4gICAgICAgIHRpdGxlPVwiQ2xvc2VcIlxuICAgICAgICBhcmlhLWxhYmVsPVwiQ2xvc2VcIj5cbiAgICAgIDwvY3FhLWJ1dHRvbj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPCEtLSBMaW5lIGJlbG93IGhlYWRlciAoZnVsbCB3aWR0aCBvZiBtb2RhbCwgbm8gc2lkZSBtYXJnaW4pIC0tPlxuICA8ZGl2IGNsYXNzPVwiY3FhLS1teC0yIGNxYS13LVtjYWxjKDEwMCUrMXJlbSldIGNxYS1mbGV4LXNocmluay0wXCI+XG4gICAgPGRpdiBjbGFzcz1cImNxYS1oLXB4IGNxYS13LWZ1bGwgY3FhLWJnLVsjRTVFN0VCXVwiIHJvbGU9XCJwcmVzZW50YXRpb25cIj48L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImVuYWJsZUZvcm0gJiYgIWlzT25SZWNvcmRcIj5cbiAgICA8Y3FhLWVsZW1lbnQtZm9ybVxuICAgICAgI2VsZW1lbnRGb3JtXG4gICAgICBbZWxlbWVudElkXT1cImVsZW1lbnRJZFwiXG4gICAgICBbZWxlbWVudF09XCJlbGVtZW50XCJcbiAgICAgIFtzY3JlZW5OYW1lT3B0aW9uc109XCJzY3JlZW5OYW1lT3B0aW9uc1wiXG4gICAgICBbaGFzTW9yZVNjcmVlbk5hbWVzXT1cImhhc01vcmVTY3JlZW5OYW1lc1wiXG4gICAgICBbaXNMb2FkaW5nU2NyZWVuTmFtZXNdPVwiaXNMb2FkaW5nU2NyZWVuTmFtZXNcIlxuICAgICAgW2lzRWxlbWVudExvYWRpbmddPVwiaXNFbGVtZW50TG9hZGluZ1wiXG4gICAgICBbaXNFZGl0TW9kZV09XCJpc0VkaXRNb2RlXCJcbiAgICAgIFtpc0NyZWF0ZU1vZGVdPVwiaXNDcmVhdGVNb2RlXCJcbiAgICAgIChjcmVhdGVFbGVtZW50KT1cIm9uRWxlbWVudEZvcm1DcmVhdGUoJGV2ZW50KVwiXG4gICAgICAodXBkYXRlRWxlbWVudCk9XCJvbkVsZW1lbnRGb3JtVXBkYXRlKCRldmVudClcIlxuICAgICAgKGNyZWF0ZVNjcmVlbk5hbWVSZXF1ZXN0KT1cImNyZWF0ZVNjcmVlbk5hbWVSZXF1ZXN0LmVtaXQoJGV2ZW50KVwiXG4gICAgICAoc2VhcmNoU2NyZWVuTmFtZSk9XCJzZWFyY2hTY3JlZW5OYW1lLmVtaXQoJGV2ZW50KVwiXG4gICAgICAobG9hZE1vcmVTY3JlZW5OYW1lcyk9XCJsb2FkTW9yZVNjcmVlbk5hbWVzLmVtaXQoJGV2ZW50KVwiXG4gICAgICAoY2FuY2VsKT1cIm9uRWxlbWVudEZvcm1DYW5jZWwoKVwiXG4gICAgICAoZWRpdEluRGVwdGgpPVwib25FZGl0SW5EZXB0aCgpXCI+XG4gICAgPC9jcWEtZWxlbWVudC1mb3JtPlxuICA8L25nLWNvbnRhaW5lcj5cblxuPG5nLWNvbnRhaW5lciAqbmdJZj1cImlzT25SZWNvcmQgJiYgIWVuYWJsZUZvcm1cIj5cbiAgPGRpdlxuICAgIGNsYXNzPVwiY3FhLWZsZXggY3FhLWZsZXgtY29sIGNxYS1pdGVtcy1jZW50ZXIgY3FhLWp1c3RpZnktY2VudGVyIGNxYS10ZXh0LWNlbnRlciBjcWEtZ2FwLTMgY3FhLXB0LTEwXCI+XG5cbiAgICA8IS0tIFZpZGVvIEljb24gLS0+XG4gICAgPGRpdlxuICAgICAgY2xhc3M9XCJjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1qdXN0aWZ5LWNlbnRlciBjcWEtdy1bNjRweF0gY3FhLWgtWzY0cHhdIGNxYS1yb3VuZGVkLWZ1bGwgY3FhLWJnLVsjRkVFMkUyXVwiPlxuICAgICAgPHN2ZyB3aWR0aD1cIjMyXCIgaGVpZ2h0PVwiMzJcIiB2aWV3Qm94PVwiMCAwIDMyIDMyXCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XG4gICAgICAgIDxwYXRoIGQ9XCJNMjEuMzMzIDE3LjMzMzNMMjguMjk3IDIxLjk3NTlDMjguMzk3NCAyMi4wNDI4IDI4LjUxNCAyMi4wODExIDI4LjYzNDUgMjIuMDg2OEMyOC43NTQ5IDIyLjA5MjYgMjguODc0NyAyMi4wNjU2IDI4Ljk4MSAyMi4wMDg3QzI5LjA4NzMgMjEuOTUxNyAyOS4xNzYyIDIxLjg2NzEgMjkuMjM4MiAyMS43NjM2QzI5LjMwMDIgMjEuNjYwMiAyOS4zMzI5IDIxLjU0MTkgMjkuMzMzIDIxLjQyMTNWMTAuNDkzM0MyOS4zMzMgMTAuMzc2IDI5LjMwMjEgMTAuMjYwNyAyOS4yNDM0IDEwLjE1OTJDMjkuMTg0NiAxMC4wNTc3IDI5LjEwMDEgOS45NzM0NCAyOC45OTg0IDkuOTE1MDFDMjguODk2NyA5Ljg1NjU4IDI4Ljc4MTQgOS44MjYwMiAyOC42NjQxIDkuODI2NDJDMjguNTQ2OCA5LjgyNjgyIDI4LjQzMTcgOS44NTgxNiAyOC4zMzAzIDkuOTE3MjhMMjEuMzMzIDEzLjk5OTlcIiBzdHJva2U9XCIjRTcwMDBCXCIgc3Ryb2tlLXdpZHRoPVwiMi42NjY2N1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz5cbiAgICAgICAgPHBhdGggZD1cIk0xOC42NjcgOEg1LjMzMzY2QzMuODYwOSA4IDIuNjY2OTkgOS4xOTM5MSAyLjY2Njk5IDEwLjY2NjdWMjEuMzMzM0MyLjY2Njk5IDIyLjgwNjEgMy44NjA5IDI0IDUuMzMzNjYgMjRIMTguNjY3QzIwLjEzOTggMjQgMjEuMzMzNyAyMi44MDYxIDIxLjMzMzcgMjEuMzMzM1YxMC42NjY3QzIxLjMzMzcgOS4xOTM5MSAyMC4xMzk4IDggMTguNjY3IDhaXCIgc3Ryb2tlPVwiI0U3MDAwQlwiIHN0cm9rZS13aWR0aD1cIjIuNjY2NjdcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+XG4gICAgICAgIDwvc3ZnPlxuICAgICAgICBcbiAgICA8L2Rpdj5cblxuICAgIDwhLS0gVGl0bGUgLS0+XG4gICAgPGg0IGNsYXNzPVwiY3FhLW0tMCBjcWEtdGV4dC1bMTZweF0gY3FhLWxlYWRpbmctWzI0cHhdIGNxYS1mb250LVs2MDBdIGNxYS10ZXh0LVsjMEEwQTBBXVwiPlxuICAgICAgUmVjb3JkaW5nIE1vZGUgQWN0aXZlXG4gICAgPC9oND5cblxuICAgIDwhLS0gU3VidGl0bGUgLS0+XG4gICAgPHAgY2xhc3M9XCJjcWEtbS0wIGNxYS10ZXh0LVsxMnB4XSBjcWEtbGVhZGluZy1bMThweF0gY3FhLXRleHQtWyM2QjcyODBdXCI+XG4gICAgICBDbGljayBvbiBhbnkgZWxlbWVudCBpbiB0aGUgYnJvd3NlciB0byBjYXB0dXJlIGl0XG4gICAgPC9wPlxuICA8L2Rpdj5cblxuICA8IS0tIEZvb3RlciAtLT5cbiAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1qdXN0aWZ5LWNlbnRlciBjcWEtcGItNFwiPlxuICAgIDxjcWEtYnV0dG9uXG4gICAgICB2YXJpYW50PVwib3V0bGluZWRcIlxuICAgICAgYnRuU2l6ZT1cImxnXCJcbiAgICAgIFt0ZXh0XT1cIidDYW5jZWwgUmVjb3JkaW5nJ1wiXG4gICAgICAoY2xpY2tlZCk9XCJvblRvZ2dsZVJlY29yZENsaWNrKClcIlxuICAgICAgW2N1c3RvbUNsYXNzXT1cIidjcWEtdGV4dC1bMTRweF0gY3FhLXB4LTE2IGNxYS1weS1bOXB4XSBjcWEtYm9yZGVyLVsjNDE0MTQ2XSdcIj5cbiAgICA8L2NxYS1idXR0b24+XG4gIDwvZGl2PlxuPC9uZy1jb250YWluZXI+XG5cblxuICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWVuYWJsZUZvcm0gJiYgIWlzT25SZWNvcmRcIj5cbjxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtZmxleC1jb2wgY3FhLWdhcC00IGNxYS1weC0xIGNxYS1wdC0zXCI+XG5cbiAgPCEtLSBTZWxlY3RlZCAtLT5cbiAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1mbGV4LWNvbCBjcWEtZ2FwLTJcIj5cbiAgICA8c3BhbiBjbGFzcz1cImNxYS10ZXh0LVsxMnB4XSBjcWEtdGV4dC1bIzZCNzI4MF1cIj5TZWxlY3RlZDwvc3Bhbj5cblxuICAgIDxkaXZcbiAgICAgIGNsYXNzPVwiY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlciBjcWEtanVzdGlmeS1iZXR3ZWVuXG4gICAgICAgICAgICAgY3FhLWJnLVsjRkZGQkVCXSBjcWEtYm9yZGVyIGNxYS1ib3JkZXItWyNmYWRmYmFdXG4gICAgICAgICAgICAgY3FhLXJvdW5kZWQtbGcgY3FhLXAtMyBjcWEtYm9yZGVyLXNvbGlkIGNxYS1nYXAtM1wiPlxuXG4gICAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLXB4LTMgY3FhLXB5LTIgY3FhLXJvdW5kZWQtbGcgY3FhLWZsZXgtY29sIGNxYS1nYXAtMC41IGNxYS1iZy1bI2Y1ZjVmNV0gY3FhLWZsZXgtMVwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlciBjcWEtanVzdGlmeS1iZXR3ZWVuIGNxYS1nYXAtMiBjcWEtbWluLXctMFwiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3FhLXRleHQtWzE0cHhdIGNxYS1mb250LVs2MDBdIGNxYS10ZXh0LVsjMTExODI3XSBjcWEtbWluLXctMCBjcWEtZmxleC0xXCJcbiAgICAgICAgICBzdHlsZT1cImRpc3BsYXk6IC13ZWJraXQtYm94OyAtd2Via2l0LWxpbmUtY2xhbXA6IDI7IGxpbmUtY2xhbXA6IDI7IC13ZWJraXQtYm94LW9yaWVudDogdmVydGljYWw7IG92ZXJmbG93OiBoaWRkZW47IHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1wiXG4gICAgICAgICAgW21hdFRvb2x0aXBdPVwiZWxlbWVudC50aXRsZVwiXG4gICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPVwiYWJvdmVcIj5cbiAgICAgICAgICB7e2VsZW1lbnQudGl0bGV9fVxuICAgICAgICA8L3NwYW4+XG5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1nYXAtMiBjcWEtbWF4LXctWzgwcHhdIGNxYS1qdXN0aWZ5LWVuZCBjcWEtZmxleC13cmFwXCI+XG4gICAgICAgICAgPHNwYW4gKm5nRm9yPVwibGV0IGwgb2YgZWxlbWVudC5sYWJlbHNcIlxuICAgICAgICAgICAgY2xhc3M9XCJjcWEtdGV4dC1bMTBweF0gY3FhLXB4LTEuNSBjcWEtcHktMC41XG4gICAgICAgICAgICAgICAgICBjcWEtcm91bmRlZCBjcWEtYmctWyNFRUYyRkZdIGNxYS10ZXh0LVsjM0Y0M0VFXSBjcWEtcm91bmRlZC1mdWxsIGNxYS1weC0yIGNxYS1iZy1bI2VmZjZmZl0gY3FhLWJvcmRlciBjcWEtYm9yZGVyLXNvbGlkIGNxYS1ib3JkZXItWyNjOGUwZmZdXCJcbiAgICAgICAgICAgIHN0eWxlPVwiZGlzcGxheTogLXdlYmtpdC1ib3g7IC13ZWJraXQtbGluZS1jbGFtcDogMjsgbGluZS1jbGFtcDogMjsgLXdlYmtpdC1ib3gtb3JpZW50OiB2ZXJ0aWNhbDsgb3ZlcmZsb3c6IGhpZGRlbjsgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XCJcbiAgICAgICAgICAgIFttYXRUb29sdGlwXT1cImxcIlxuICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPVwiYWJvdmVcIj5cbiAgICAgICAgICAgIHt7bH19XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8c3BhbiBjbGFzcz1cImNxYS10ZXh0LVsxMHB4XSBjcWEtdGV4dC1bIzZCNzI4MF1cIj5cbiAgICAgICAgICB7e2VsZW1lbnQuc2VsZWN0b3J9fVxuICAgICAgICA8L3NwYW4+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxjcWEtYnV0dG9uIHZhcmlhbnQ9XCJvdXRsaW5lZFwiIGljb249XCJlZGl0XCIgYnRuU2l6ZT1cImxnXCIgW3RleHRdPVwiJ0VkaXQnXCIgW2Z1bGxXaWR0aF09XCJ0cnVlXCIgKGNsaWNrZWQpPVwidG9nZ2xlRm9ybSgpXCJcbiAgICAgICAgICAgICAgW2N1c3RvbUNsYXNzXT1cIidjcWEtdGV4dC1bMTRweF0gY3FhLXB5LVs5cHhdIGNxYS1ib3JkZXItWyM0MTQxNDZdJ1wiPjwvY3FhLWJ1dHRvbj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPCEtLSBSZWNlbnQgLS0+XG4gIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtZmxleC1jb2wgY3FhLWdhcC0yXCIgKm5nSWY9XCJyZWNlbnRTZWFyY2hlZEl0ZW1zLmxlbmd0aCA+IDBcIj5cbiAgICA8c3BhbiBjbGFzcz1cImNxYS10ZXh0LVsxMnB4XSBjcWEtdGV4dC1bIzZCNzI4MF1cIj5SZWNlbnQ8L3NwYW4+XG5cbiAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWdhcC0yIGNxYS1vdmVyZmxvdy14LWF1dG8gY3FhLXNjcm9sbGJhci10aGluIGNxYS1zY3JvbGxiYXItdHJhY2stdHJhbnNwYXJlbnQgY3FhLXNjcm9sbGJhci10aHVtYi1bI0U1RTdFQl0gY3FhLXNjcm9sbGJhci10aHVtYi1yb3VuZGVkLWZ1bGwgY3FhLXNjcm9sbGJhci10aHVtYi1ob3ZlcjpjcWEtYmctWyNEMUQ1REJdXCI+XG5cbiAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGl0ZW0gb2YgcmVjZW50U2VhcmNoZWRJdGVtc1wiIFxuICAgICAgICBjbGFzcz1cImNxYS1jdXJzb3ItcG9pbnRlciBjcWEtaW5saW5lLWJsb2NrXCJcbiAgICAgICAgKGNsaWNrKT1cIm9uUmVjZW50SXRlbUNsaWNrKGl0ZW0pXCI+XG4gICAgICAgIDxjcWEtYmFkZ2UgIFxuICAgICAgICAgIGNsYXNzPVwiY3FhLWVsZW1lbnQtYmFkZ2UgY3FhLW1iLTIgY3FhLWNoaXAgIWNxYS1iZy13aGl0ZSAhY3FhLXRleHQtWzEycHhdIGNxYS13aGl0ZXNwYWNlLW5vd3JhcFwiIFxuICAgICAgICAgIFtsYWJlbF09XCJpdGVtXCI+PC9jcWEtYmFkZ2U+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPCEtLSBFbGVtZW50IExpYnJhcnkgLS0+XG4gIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtZmxleC1jb2wgY3FhLWdhcC0yXCI+XG4gICAgPHNwYW4gY2xhc3M9XCJjcWEtdGV4dC1bMTJweF0gY3FhLXRleHQtWyM2QjcyODBdXCI+RWxlbWVudCBMaWJyYXJ5PC9zcGFuPlxuICAgIDxjcWEtc2VhcmNoLWJhciBbZnVsbFdpZHRoXT1cInRydWVcIiBbdmFsdWVdPVwic2VhcmNoVmFsdWVcIiBwbGFjZWhvbGRlcj1cIlNlYXJjaCBsaWJyYXJ5XCIgKHZhbHVlQ2hhbmdlKT1cInNlYXJjaCgkZXZlbnQpXCI+PC9jcWEtc2VhcmNoLWJhcj4gICAgICAgIFxuICA8L2Rpdj5cblxuICA8Y3FhLWVsZW1lbnQtbGlzdCBcbiAgICBbaXRlbXNdPVwiZWxlbWVudHNcIlxuICAgIFtzZWxlY3RlZEl0ZW1dPVwiZWxlbWVudFwiXG4gICAgW3RpdGxlS2V5XT1cIid0aXRsZSdcIlxuICAgIFtzZWxlY3RvcktleV09XCInc2VsZWN0b3InXCJcbiAgICBbbGFiZWxzS2V5XT1cIidsYWJlbHMnXCJcbiAgICBbbWF4SGVpZ2h0XT1cIicyMDBweCdcIlxuICAgIFtoYXNNb3JlXT1cImhhc01vcmVFbGVtZW50c1wiXG4gICAgKGl0ZW1DbGljayk9XCJvbkVsZW1lbnRDbGljaygkZXZlbnQpXCJcbiAgICAobG9hZE1vcmUpPVwib25Mb2FkTW9yZUVsZW1lbnRzKClcIj5cbiAgPC9jcWEtZWxlbWVudC1saXN0PlxuPC9kaXY+XG5cblxuICAgICAgPCEtLSBGb290ZXI6IENhbmNlbCwgQXBwbHkgKGZ1bGwgd2lkdGggaW4gb25lIHJvdykgLS0+XG4gICAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWZsZXgtY29sIGNxYS1nYXAtM1wiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWl0ZW1zLXN0cmV0Y2ggY3FhLWdhcC0yIGNxYS13LWZ1bGxcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXgtMSBjcWEtbWluLXctMFwiPlxuICAgICAgICAgICAgPGNxYS1idXR0b24gdmFyaWFudD1cIm91dGxpbmVkXCIgaWNvbj1cInJhZGlvX2J1dHRvbl9jaGVja2VkXCIgYnRuU2l6ZT1cImxnXCIgW3RleHRdPVwiJ1JlY29yZCdcIiBbZnVsbFdpZHRoXT1cInRydWVcIiAoY2xpY2tlZCk9XCJvblRvZ2dsZVJlY29yZENsaWNrKClcIlxuICAgICAgICAgICAgICBbY3VzdG9tQ2xhc3NdPVwiJ2NxYS10ZXh0LVsxNHB4XSBjcWEtcHktWzlweF0gY3FhLWJvcmRlci1bIzQxNDE0Nl0nXCI+PC9jcWEtYnV0dG9uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjcWEtZmxleC0xIGNxYS1taW4tdy0wXCI+XG4gICAgICAgICAgICA8Y3FhLWJ1dHRvbiB2YXJpYW50PVwib3V0bGluZWRcIiBpY29uPVwiYWRkXCIgYnRuU2l6ZT1cImxnXCIgW3RleHRdPVwiJ0NyZWF0ZSBOZXcnXCIgW2Z1bGxXaWR0aF09XCJ0cnVlXCIgKGNsaWNrZWQpPVwib3BlbkNyZWF0ZUZvcm0oKVwiXG4gICAgICAgICAgICAgIFtjdXN0b21DbGFzc109XCInY3FhLXRleHQtWzE0cHhdIGNxYS1weS1bOXB4XSBjcWEtYm9yZGVyLVsjNDE0MTQ2XSdcIj48L2NxYS1idXR0b24+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gIDwvbmctY29udGFpbmVyPlxuXG48L2Rpdj5cbiJdfQ==
|