@skyux/lists 8.0.0-alpha.2 → 8.0.0-alpha.21
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/documentation.json +1921 -453
- package/esm2020/lib/modules/filter/filter-button.component.mjs +13 -13
- package/esm2020/lib/modules/filter/filter-inline-item.component.mjs +3 -3
- package/esm2020/lib/modules/filter/filter-inline.component.mjs +3 -3
- package/esm2020/lib/modules/filter/filter-summary-item.component.mjs +3 -3
- package/esm2020/lib/modules/filter/filter-summary.component.mjs +3 -3
- package/esm2020/lib/modules/filter/filter.module.mjs +4 -4
- package/esm2020/lib/modules/infinite-scroll/infinite-scroll-dom-adapter.service.mjs +3 -3
- package/esm2020/lib/modules/infinite-scroll/infinite-scroll.component.mjs +23 -23
- package/esm2020/lib/modules/infinite-scroll/infinite-scroll.module.mjs +4 -4
- package/esm2020/lib/modules/paging/paging.component.mjs +4 -4
- package/esm2020/lib/modules/paging/paging.module.mjs +4 -4
- package/esm2020/lib/modules/repeater/repeater-adapter.service.mjs +3 -3
- package/esm2020/lib/modules/repeater/repeater-auto-scroll-options.mjs +2 -0
- package/esm2020/lib/modules/repeater/repeater-auto-scroll.service.mjs +17 -0
- package/esm2020/lib/modules/repeater/repeater-auto-scroller.mjs +2 -0
- package/esm2020/lib/modules/repeater/repeater-item-content.component.mjs +3 -3
- package/esm2020/lib/modules/repeater/repeater-item-context-menu.component.mjs +3 -3
- package/esm2020/lib/modules/repeater/repeater-item-title.component.mjs +3 -3
- package/esm2020/lib/modules/repeater/repeater-item.component.mjs +88 -86
- package/esm2020/lib/modules/repeater/repeater.component.mjs +109 -65
- package/esm2020/lib/modules/repeater/repeater.module.mjs +4 -4
- package/esm2020/lib/modules/repeater/repeater.service.mjs +4 -4
- package/esm2020/lib/modules/shared/sky-lists-resources.module.mjs +9 -7
- package/esm2020/lib/modules/sort/sort-item.component.mjs +5 -5
- package/esm2020/lib/modules/sort/sort-menu-heading.component.mjs +3 -3
- package/esm2020/lib/modules/sort/sort.component.mjs +3 -3
- package/esm2020/lib/modules/sort/sort.module.mjs +4 -4
- package/esm2020/lib/modules/sort/sort.service.mjs +3 -3
- package/esm2020/testing/filter/filter-testing.module.mjs +4 -4
- package/esm2020/testing/infinite-scroll/infinite-scroll-testing.module.mjs +4 -4
- package/esm2020/testing/paging/paging-fixture.mjs +9 -9
- package/esm2020/testing/paging/paging-testing.module.mjs +4 -4
- package/esm2020/testing/repeater/repeater-harness.mjs +1 -2
- package/esm2020/testing/repeater/repeater-item-harness.mjs +84 -4
- package/esm2020/testing/sort/sort-fixture.mjs +8 -8
- package/esm2020/testing/sort/sort-testing.module.mjs +4 -4
- package/fesm2015/skyux-lists-testing.mjs +133 -35
- package/fesm2015/skyux-lists-testing.mjs.map +1 -1
- package/fesm2015/skyux-lists.mjs +321 -259
- package/fesm2015/skyux-lists.mjs.map +1 -1
- package/fesm2020/skyux-lists-testing.mjs +114 -35
- package/fesm2020/skyux-lists-testing.mjs.map +1 -1
- package/fesm2020/skyux-lists.mjs +320 -259
- package/fesm2020/skyux-lists.mjs.map +1 -1
- package/lib/modules/repeater/repeater-auto-scroll-options.d.ts +9 -0
- package/lib/modules/repeater/repeater-auto-scroll.service.d.ts +11 -0
- package/lib/modules/repeater/repeater-auto-scroller.d.ts +6 -0
- package/lib/modules/repeater/repeater-expand-mode-type.d.ts +1 -1
- package/lib/modules/repeater/repeater-item-roles.type.d.ts +1 -1
- package/lib/modules/repeater/repeater-item.component.d.ts +2 -1
- package/lib/modules/repeater/repeater-role.type.d.ts +1 -1
- package/lib/modules/repeater/repeater.component.d.ts +6 -8
- package/lib/modules/repeater/repeater.service.d.ts +2 -2
- package/package.json +18 -16
- package/testing/filter/lists-filter-fixture-button.d.ts +1 -1
- package/testing/repeater/repeater-harness.d.ts +0 -1
- package/testing/repeater/repeater-item-harness.d.ts +37 -2
|
@@ -19,6 +19,81 @@ let nextContentId = 0;
|
|
|
19
19
|
* Creates an individual repeater item.
|
|
20
20
|
*/
|
|
21
21
|
export class SkyRepeaterItemComponent {
|
|
22
|
+
/**
|
|
23
|
+
* Make the first, non-disabled item tab-focusable.
|
|
24
|
+
* - Disabled items should not be focusable per [W3C](https://www.w3.org/TR/wai-aria-practices-1.1/#kbd_disabled_controls).
|
|
25
|
+
* - One item per list/grid/listbox should be tab focusable per [W3C](https://www.w3.org/TR/wai-aria-practices-1.1/#grid).
|
|
26
|
+
*/
|
|
27
|
+
get tabindex() {
|
|
28
|
+
return __classPrivateFieldGet(this, _SkyRepeaterItemComponent_repeaterService, "f").items.filter((item) => !item.disabled)[0] ===
|
|
29
|
+
this
|
|
30
|
+
? 0
|
|
31
|
+
: -1;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Whether to exclude an item when cycling through.
|
|
35
|
+
*/
|
|
36
|
+
set disabled(value) {
|
|
37
|
+
if (__classPrivateFieldGet(this, _SkyRepeaterItemComponent__isDisabled, "f") !== value) {
|
|
38
|
+
if (value) {
|
|
39
|
+
this.isSelected = false;
|
|
40
|
+
__classPrivateFieldSet(this, _SkyRepeaterItemComponent__isDisabled, true, "f");
|
|
41
|
+
}
|
|
42
|
+
else {
|
|
43
|
+
__classPrivateFieldSet(this, _SkyRepeaterItemComponent__isDisabled, false, "f");
|
|
44
|
+
}
|
|
45
|
+
if (this.isActive) {
|
|
46
|
+
__classPrivateFieldGet(this, _SkyRepeaterItemComponent_repeaterService, "f").activateItemByIndex(undefined);
|
|
47
|
+
}
|
|
48
|
+
if (__classPrivateFieldGet(this, _SkyRepeaterItemComponent_elementRef, "f").nativeElement.matches(':focus-within')) {
|
|
49
|
+
__classPrivateFieldGet(this, _SkyRepeaterItemComponent_elementRef, "f").nativeElement.ownerDocument.activeElement.blur();
|
|
50
|
+
}
|
|
51
|
+
__classPrivateFieldGet(this, _SkyRepeaterItemComponent_changeDetector, "f").markForCheck();
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
get disabled() {
|
|
55
|
+
return __classPrivateFieldGet(this, _SkyRepeaterItemComponent__isDisabled, "f");
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Whether the repeater item is expanded.
|
|
59
|
+
* @default true
|
|
60
|
+
*/
|
|
61
|
+
set isExpanded(value) {
|
|
62
|
+
this.updateForExpanded(value !== false, true);
|
|
63
|
+
}
|
|
64
|
+
get isExpanded() {
|
|
65
|
+
return __classPrivateFieldGet(this, _SkyRepeaterItemComponent_isExpanded, "f");
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Whether the repeater item's checkbox is selected.
|
|
69
|
+
* When users select the repeater item, the specified property on your model is updated accordingly.
|
|
70
|
+
* @default false
|
|
71
|
+
*/
|
|
72
|
+
set isSelected(value) {
|
|
73
|
+
if (!this.disabled && value !== __classPrivateFieldGet(this, _SkyRepeaterItemComponent__isSelected, "f")) {
|
|
74
|
+
__classPrivateFieldSet(this, _SkyRepeaterItemComponent__isSelected, value, "f");
|
|
75
|
+
this.isSelectedChange.emit(__classPrivateFieldGet(this, _SkyRepeaterItemComponent__isSelected, "f"));
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
get isSelected() {
|
|
79
|
+
return __classPrivateFieldGet(this, _SkyRepeaterItemComponent__isSelected, "f");
|
|
80
|
+
}
|
|
81
|
+
set isCollapsible(value) {
|
|
82
|
+
if (this.isCollapsible !== value) {
|
|
83
|
+
__classPrivateFieldSet(this, _SkyRepeaterItemComponent__isCollapsible, value !== false, "f");
|
|
84
|
+
/*istanbul ignore else */
|
|
85
|
+
if (!__classPrivateFieldGet(this, _SkyRepeaterItemComponent__isCollapsible, "f")) {
|
|
86
|
+
this.updateForExpanded(true, true);
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
__classPrivateFieldGet(this, _SkyRepeaterItemComponent_changeDetector, "f").markForCheck();
|
|
90
|
+
}
|
|
91
|
+
get isCollapsible() {
|
|
92
|
+
return __classPrivateFieldGet(this, _SkyRepeaterItemComponent__isCollapsible, "f");
|
|
93
|
+
}
|
|
94
|
+
get repeaterGroupClass() {
|
|
95
|
+
return 'sky-repeater-item-group-' + __classPrivateFieldGet(this, _SkyRepeaterItemComponent_repeaterService, "f").repeaterGroupId;
|
|
96
|
+
}
|
|
22
97
|
constructor(repeaterService, changeDetector, adapterService, elementRef, resourceService) {
|
|
23
98
|
_SkyRepeaterItemComponent_instances.add(this);
|
|
24
99
|
/**
|
|
@@ -55,6 +130,7 @@ export class SkyRepeaterItemComponent {
|
|
|
55
130
|
this.hasItemContent = false;
|
|
56
131
|
this.isActive = false;
|
|
57
132
|
this.reorderButtonLabel = '';
|
|
133
|
+
this.animationDisabled = false;
|
|
58
134
|
_SkyRepeaterItemComponent_adapterService.set(this, void 0);
|
|
59
135
|
_SkyRepeaterItemComponent_changeDetector.set(this, void 0);
|
|
60
136
|
_SkyRepeaterItemComponent_elementRef.set(this, void 0);
|
|
@@ -78,7 +154,7 @@ export class SkyRepeaterItemComponent {
|
|
|
78
154
|
__classPrivateFieldSet(this, _SkyRepeaterItemComponent_adapterService, adapterService, "f");
|
|
79
155
|
__classPrivateFieldSet(this, _SkyRepeaterItemComponent_elementRef, elementRef, "f");
|
|
80
156
|
__classPrivateFieldSet(this, _SkyRepeaterItemComponent_resourceService, resourceService, "f");
|
|
81
|
-
__classPrivateFieldGet(this, _SkyRepeaterItemComponent_instances, "m", _SkyRepeaterItemComponent_slideForExpanded).call(this);
|
|
157
|
+
__classPrivateFieldGet(this, _SkyRepeaterItemComponent_instances, "m", _SkyRepeaterItemComponent_slideForExpanded).call(this, false);
|
|
82
158
|
observableForkJoin([
|
|
83
159
|
__classPrivateFieldGet(this, _SkyRepeaterItemComponent_resourceService, "f").getString('skyux_repeater_item_reorder_cancel'),
|
|
84
160
|
__classPrivateFieldGet(this, _SkyRepeaterItemComponent_resourceService, "f").getString('skyux_repeater_item_reorder_finish'),
|
|
@@ -98,81 +174,6 @@ export class SkyRepeaterItemComponent {
|
|
|
98
174
|
this.contentId = `sky-repeater-item-content-${++nextContentId}`;
|
|
99
175
|
this.itemRole$ = __classPrivateFieldGet(this, _SkyRepeaterItemComponent_repeaterService, "f").itemRole.asObservable();
|
|
100
176
|
}
|
|
101
|
-
/**
|
|
102
|
-
* Make the first, non-disabled item tab-focusable.
|
|
103
|
-
* - Disabled items should not be focusable per [W3C](https://www.w3.org/TR/wai-aria-practices-1.1/#kbd_disabled_controls).
|
|
104
|
-
* - One item per list/grid/listbox should be tab focusable per [W3C](https://www.w3.org/TR/wai-aria-practices-1.1/#grid).
|
|
105
|
-
*/
|
|
106
|
-
get tabindex() {
|
|
107
|
-
return __classPrivateFieldGet(this, _SkyRepeaterItemComponent_repeaterService, "f").items.filter((item) => !item.disabled)[0] ===
|
|
108
|
-
this
|
|
109
|
-
? 0
|
|
110
|
-
: -1;
|
|
111
|
-
}
|
|
112
|
-
/**
|
|
113
|
-
* Whether to exclude an item when cycling through.
|
|
114
|
-
*/
|
|
115
|
-
set disabled(value) {
|
|
116
|
-
if (__classPrivateFieldGet(this, _SkyRepeaterItemComponent__isDisabled, "f") !== value) {
|
|
117
|
-
if (value) {
|
|
118
|
-
this.isSelected = false;
|
|
119
|
-
__classPrivateFieldSet(this, _SkyRepeaterItemComponent__isDisabled, true, "f");
|
|
120
|
-
}
|
|
121
|
-
else {
|
|
122
|
-
__classPrivateFieldSet(this, _SkyRepeaterItemComponent__isDisabled, false, "f");
|
|
123
|
-
}
|
|
124
|
-
if (this.isActive) {
|
|
125
|
-
__classPrivateFieldGet(this, _SkyRepeaterItemComponent_repeaterService, "f").activateItemByIndex(undefined);
|
|
126
|
-
}
|
|
127
|
-
if (__classPrivateFieldGet(this, _SkyRepeaterItemComponent_elementRef, "f").nativeElement.matches(':focus-within')) {
|
|
128
|
-
__classPrivateFieldGet(this, _SkyRepeaterItemComponent_elementRef, "f").nativeElement.ownerDocument.activeElement.blur();
|
|
129
|
-
}
|
|
130
|
-
__classPrivateFieldGet(this, _SkyRepeaterItemComponent_changeDetector, "f").markForCheck();
|
|
131
|
-
}
|
|
132
|
-
}
|
|
133
|
-
get disabled() {
|
|
134
|
-
return __classPrivateFieldGet(this, _SkyRepeaterItemComponent__isDisabled, "f");
|
|
135
|
-
}
|
|
136
|
-
/**
|
|
137
|
-
* Whether the repeater item is expanded.
|
|
138
|
-
* @default true
|
|
139
|
-
*/
|
|
140
|
-
set isExpanded(value) {
|
|
141
|
-
this.updateForExpanded(value !== false);
|
|
142
|
-
}
|
|
143
|
-
get isExpanded() {
|
|
144
|
-
return __classPrivateFieldGet(this, _SkyRepeaterItemComponent_isExpanded, "f");
|
|
145
|
-
}
|
|
146
|
-
/**
|
|
147
|
-
* Whether the repeater item's checkbox is selected.
|
|
148
|
-
* When users select the repeater item, the specified property on your model is updated accordingly.
|
|
149
|
-
* @default false
|
|
150
|
-
*/
|
|
151
|
-
set isSelected(value) {
|
|
152
|
-
if (!this.disabled && value !== __classPrivateFieldGet(this, _SkyRepeaterItemComponent__isSelected, "f")) {
|
|
153
|
-
__classPrivateFieldSet(this, _SkyRepeaterItemComponent__isSelected, value, "f");
|
|
154
|
-
this.isSelectedChange.emit(__classPrivateFieldGet(this, _SkyRepeaterItemComponent__isSelected, "f"));
|
|
155
|
-
}
|
|
156
|
-
}
|
|
157
|
-
get isSelected() {
|
|
158
|
-
return __classPrivateFieldGet(this, _SkyRepeaterItemComponent__isSelected, "f");
|
|
159
|
-
}
|
|
160
|
-
set isCollapsible(value) {
|
|
161
|
-
if (this.isCollapsible !== value) {
|
|
162
|
-
__classPrivateFieldSet(this, _SkyRepeaterItemComponent__isCollapsible, value !== false, "f");
|
|
163
|
-
/*istanbul ignore else */
|
|
164
|
-
if (!__classPrivateFieldGet(this, _SkyRepeaterItemComponent__isCollapsible, "f")) {
|
|
165
|
-
this.updateForExpanded(true);
|
|
166
|
-
}
|
|
167
|
-
}
|
|
168
|
-
__classPrivateFieldGet(this, _SkyRepeaterItemComponent_changeDetector, "f").markForCheck();
|
|
169
|
-
}
|
|
170
|
-
get isCollapsible() {
|
|
171
|
-
return __classPrivateFieldGet(this, _SkyRepeaterItemComponent__isCollapsible, "f");
|
|
172
|
-
}
|
|
173
|
-
get repeaterGroupClass() {
|
|
174
|
-
return 'sky-repeater-item-group-' + __classPrivateFieldGet(this, _SkyRepeaterItemComponent_repeaterService, "f").repeaterGroupId;
|
|
175
|
-
}
|
|
176
177
|
ngOnInit() {
|
|
177
178
|
__classPrivateFieldGet(this, _SkyRepeaterItemComponent_repeaterService, "f").registerItem(this);
|
|
178
179
|
__classPrivateFieldGet(this, _SkyRepeaterItemComponent_repeaterService, "f").activeItemChange
|
|
@@ -268,11 +269,11 @@ export class SkyRepeaterItemComponent {
|
|
|
268
269
|
}
|
|
269
270
|
headerClick() {
|
|
270
271
|
if (this.isCollapsible) {
|
|
271
|
-
this.updateForExpanded(!this.isExpanded);
|
|
272
|
+
this.updateForExpanded(!this.isExpanded, true);
|
|
272
273
|
}
|
|
273
274
|
}
|
|
274
275
|
chevronDirectionChange(direction) {
|
|
275
|
-
this.updateForExpanded(direction === 'up');
|
|
276
|
+
this.updateForExpanded(direction === 'up', true);
|
|
276
277
|
}
|
|
277
278
|
onRepeaterItemClick(event) {
|
|
278
279
|
// Only activate item if clicking on the title, content, or parent item div.
|
|
@@ -284,7 +285,7 @@ export class SkyRepeaterItemComponent {
|
|
|
284
285
|
__classPrivateFieldGet(this, _SkyRepeaterItemComponent_repeaterService, "f").activateItem(this);
|
|
285
286
|
}
|
|
286
287
|
}
|
|
287
|
-
updateForExpanded(value) {
|
|
288
|
+
updateForExpanded(value, animate) {
|
|
288
289
|
if (this.isCollapsible === false && value === false) {
|
|
289
290
|
console.warn(`Setting isExpanded to false when the repeater item is not collapsible
|
|
290
291
|
will have no effect.`);
|
|
@@ -298,7 +299,7 @@ export class SkyRepeaterItemComponent {
|
|
|
298
299
|
this.collapse.emit();
|
|
299
300
|
}
|
|
300
301
|
__classPrivateFieldGet(this, _SkyRepeaterItemComponent_repeaterService, "f").onItemCollapseStateChange(this);
|
|
301
|
-
__classPrivateFieldGet(this, _SkyRepeaterItemComponent_instances, "m", _SkyRepeaterItemComponent_slideForExpanded).call(this);
|
|
302
|
+
__classPrivateFieldGet(this, _SkyRepeaterItemComponent_instances, "m", _SkyRepeaterItemComponent_slideForExpanded).call(this, animate);
|
|
302
303
|
__classPrivateFieldGet(this, _SkyRepeaterItemComponent_changeDetector, "f").markForCheck();
|
|
303
304
|
}
|
|
304
305
|
}
|
|
@@ -374,7 +375,8 @@ export class SkyRepeaterItemComponent {
|
|
|
374
375
|
this.reorderState = undefined;
|
|
375
376
|
}
|
|
376
377
|
}
|
|
377
|
-
_SkyRepeaterItemComponent_adapterService = new WeakMap(), _SkyRepeaterItemComponent_changeDetector = new WeakMap(), _SkyRepeaterItemComponent_elementRef = new WeakMap(), _SkyRepeaterItemComponent_isExpanded = new WeakMap(), _SkyRepeaterItemComponent_keyboardReorderingEnabled = new WeakMap(), _SkyRepeaterItemComponent_ngUnsubscribe = new WeakMap(), _SkyRepeaterItemComponent_reorderCancelText = new WeakMap(), _SkyRepeaterItemComponent_reorderCurrentIndex = new WeakMap(), _SkyRepeaterItemComponent_reorderFinishText = new WeakMap(), _SkyRepeaterItemComponent_reorderInstructions = new WeakMap(), _SkyRepeaterItemComponent_reorderMovedText = new WeakMap(), _SkyRepeaterItemComponent_reorderStateDescription = new WeakMap(), _SkyRepeaterItemComponent_reorderSteps = new WeakMap(), _SkyRepeaterItemComponent_repeaterService = new WeakMap(), _SkyRepeaterItemComponent_resourceService = new WeakMap(), _SkyRepeaterItemComponent__isCollapsible = new WeakMap(), _SkyRepeaterItemComponent__isDisabled = new WeakMap(), _SkyRepeaterItemComponent__isSelected = new WeakMap(), _SkyRepeaterItemComponent_instances = new WeakSet(), _SkyRepeaterItemComponent_slideForExpanded = function _SkyRepeaterItemComponent_slideForExpanded() {
|
|
378
|
+
_SkyRepeaterItemComponent_adapterService = new WeakMap(), _SkyRepeaterItemComponent_changeDetector = new WeakMap(), _SkyRepeaterItemComponent_elementRef = new WeakMap(), _SkyRepeaterItemComponent_isExpanded = new WeakMap(), _SkyRepeaterItemComponent_keyboardReorderingEnabled = new WeakMap(), _SkyRepeaterItemComponent_ngUnsubscribe = new WeakMap(), _SkyRepeaterItemComponent_reorderCancelText = new WeakMap(), _SkyRepeaterItemComponent_reorderCurrentIndex = new WeakMap(), _SkyRepeaterItemComponent_reorderFinishText = new WeakMap(), _SkyRepeaterItemComponent_reorderInstructions = new WeakMap(), _SkyRepeaterItemComponent_reorderMovedText = new WeakMap(), _SkyRepeaterItemComponent_reorderStateDescription = new WeakMap(), _SkyRepeaterItemComponent_reorderSteps = new WeakMap(), _SkyRepeaterItemComponent_repeaterService = new WeakMap(), _SkyRepeaterItemComponent_resourceService = new WeakMap(), _SkyRepeaterItemComponent__isCollapsible = new WeakMap(), _SkyRepeaterItemComponent__isDisabled = new WeakMap(), _SkyRepeaterItemComponent__isSelected = new WeakMap(), _SkyRepeaterItemComponent_instances = new WeakSet(), _SkyRepeaterItemComponent_slideForExpanded = function _SkyRepeaterItemComponent_slideForExpanded(animate) {
|
|
379
|
+
this.animationDisabled = !animate;
|
|
378
380
|
this.slideDirection = this.isExpanded ? 'down' : 'up';
|
|
379
381
|
}, _SkyRepeaterItemComponent_keyboardReorderUp = function _SkyRepeaterItemComponent_keyboardReorderUp() {
|
|
380
382
|
var _a;
|
|
@@ -429,11 +431,11 @@ _SkyRepeaterItemComponent_adapterService = new WeakMap(), _SkyRepeaterItemCompon
|
|
|
429
431
|
}
|
|
430
432
|
});
|
|
431
433
|
};
|
|
432
|
-
SkyRepeaterItemComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1
|
|
433
|
-
SkyRepeaterItemComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.1.4", type: SkyRepeaterItemComponent, selector: "sky-repeater-item", inputs: { disabled: "disabled", itemName: "itemName", inlineFormConfig: "inlineFormConfig", inlineFormTemplate: "inlineFormTemplate", isExpanded: "isExpanded", isSelected: "isSelected", reorderable: "reorderable", selectable: "selectable", showInlineForm: "showInlineForm", tag: "tag" }, outputs: { collapse: "collapse", expand: "expand", inlineFormClose: "inlineFormClose", isSelectedChange: "isSelectedChange" }, host: { listeners: { "keydown": "onKeydown($event)" }, properties: { "class": "this.repeaterGroupClass" } }, queries: [{ propertyName: "contextMenu", first: true, predicate: SkyRepeaterItemContextMenuComponent, descendants: true, read: ElementRef }, { propertyName: "repeaterItemContentComponents", predicate: SkyRepeaterItemContentComponent }], viewQueries: [{ propertyName: "grabHandle", first: true, predicate: ["grabHandle"], descendants: true, read: ElementRef }, { propertyName: "itemContentRef", first: true, predicate: ["itemContentRef"], descendants: true, read: ElementRef }, { propertyName: "itemHeaderRef", first: true, predicate: ["itemHeaderRef"], descendants: true, read: ElementRef }, { propertyName: "itemRef", first: true, predicate: ["itemRef"], descendants: true, read: ElementRef }], ngImport: i0, template: "<div\n class=\"sky-repeater-item sky-padding-even-default\"\n [attr.aria-label]=\"itemName\"\n [attr.aria-selected]=\"selectable ? !!isSelected : undefined\"\n [attr.role]=\"(itemRole$ | async)?.item\"\n [attr.tabIndex]=\"tabindex\"\n [ngClass]=\"{\n 'sky-repeater-item-active': isActive,\n 'sky-repeater-item-collapsible': isCollapsible,\n 'sky-repeater-item-selected': isSelected\n }\"\n (click)=\"onRepeaterItemClick($event)\"\n #itemRef\n>\n <div #inlineDelete>\n <ng-content select=\"sky-inline-delete\"></ng-content>\n </div>\n\n <ng-container *ngIf=\"inlineFormTemplate\">\n <sky-inline-form\n [config]=\"inlineFormConfig\"\n [showForm]=\"showInlineForm\"\n [template]=\"inlineFormTemplate\"\n (close)=\"onInlineFormClose($event)\"\n >\n <ng-container *ngTemplateOutlet=\"skyRepeaterItemLeft\"></ng-container>\n <ng-container *ngTemplateOutlet=\"skyRepeaterItemRight\"></ng-container>\n </sky-inline-form>\n </ng-container>\n\n <ng-container *ngIf=\"!inlineFormTemplate\">\n <ng-container *ngTemplateOutlet=\"skyRepeaterItemLeft\"></ng-container>\n <ng-container *ngTemplateOutlet=\"skyRepeaterItemRight\"></ng-container>\n </ng-container>\n</div>\n\n<ng-template #skyRepeaterItemLeft>\n <div\n [attr.role]=\"!showInlineForm ? (itemRole$ | async)?.content : undefined\"\n class=\"sky-repeater-item-left\"\n >\n <ng-container *ngIf=\"reorderable\">\n <span\n aria-live=\"assertive\"\n class=\"sky-screen-reader-only\"\n [id]=\"contentId + '-reorder-state'\"\n >\n {{ reorderState }}\n </span>\n <span\n class=\"sky-screen-reader-only\"\n [id]=\"contentId + '-reorder-instructions'\"\n >{{ reorderButtonLabel }}</span\n >\n <button\n class=\"sky-btn sky-tile-tools-control sky-repeater-item-grab-handle\"\n type=\"button\"\n [attr.aria-describedby]=\"contentId + '-reorder-instructions'\"\n [attr.aria-label]=\"\n itemName\n ? ('skyux_repeater_item_reorder_label' | skyLibResources : itemName)\n : ('skyux_repeater_item_reorder_label_default' | skyLibResources)\n \"\n (blur)=\"onReorderHandleBlur($event)\"\n (keydown)=\"onReorderHandleKeyDown($event)\"\n #grabHandle\n >\n <sky-icon icon=\"arrows-v\"></sky-icon>\n </button>\n </ng-container>\n <sky-checkbox\n *ngIf=\"selectable\"\n class=\"sky-repeater-item-checkbox\"\n [checked]=\"isSelected\"\n [label]=\"\n itemName\n ? ('skyux_repeater_item_checkbox_label' | skyLibResources : itemName)\n : ('skyux_repeater_item_checkbox_label_default' | skyLibResources)\n \"\n (change)=\"onCheckboxChange($event)\"\n >\n </sky-checkbox>\n <div\n class=\"sky-repeater-item-context-menu\"\n [hidden]=\"contextMenuEl.children.length === 0\"\n #contextMenuEl\n >\n <ng-content select=\"sky-repeater-item-context-menu\"></ng-content>\n </div>\n </div>\n</ng-template>\n\n<ng-template #skyRepeaterItemRight>\n <div class=\"sky-repeater-item-right\" #itemHeaderRef>\n <div\n class=\"sky-repeater-item-header\"\n [attr.role]=\"(itemRole$ | async)?.title\"\n [hidden]=\"titleRef.children.length === 0\"\n (click)=\"headerClick()\"\n >\n <div class=\"sky-repeater-item-title sky-emphasized\" #titleRef>\n <ng-content select=\"sky-repeater-item-title\"></ng-content>\n </div>\n <button\n *ngIf=\"reorderable\"\n class=\"sky-btn sky-btn-link sky-repeater-item-reorder-top\"\n type=\"button\"\n [attr.aria-label]=\"\n itemName\n ? ('skyux_repeater_item_reorder_top_label'\n | skyLibResources : itemName)\n : ('skyux_repeater_item_reorder_top_label_default'\n | skyLibResources)\n \"\n (click)=\"moveToTop($event)\"\n >\n <sky-icon icon=\"arrow-circle-up\"></sky-icon>\n {{ 'skyux_repeater_item_reorder_top' | skyLibResources }}\n </button>\n <div *ngIf=\"isCollapsible\" class=\"sky-repeater-item-chevron\">\n <sky-chevron\n [ariaControls]=\"contentId\"\n [ariaLabel]=\"\n itemName\n ? ('skyux_repeater_item_expand' | skyLibResources : itemName)\n : ('skyux_repeater_item_expand_default' | skyLibResources)\n \"\n [direction]=\"isExpanded ? 'up' : 'down'\"\n (directionChange)=\"chevronDirectionChange($event)\"\n >\n </sky-chevron>\n </div>\n <!-- Used for when the chevron is hidden to ensure that the right side is the same height as the left.-->\n <div\n *ngIf=\"!isCollapsible && !contextMenu\"\n class=\"sky-repeater-item-chevron-placeholder\"\n ></div>\n <!-- Used to ensure that the right side is the same height as the left.-->\n <div\n *ngIf=\"contextMenu\"\n class=\"sky-repeater-item-chevron-placeholder-with-context\"\n ></div>\n </div>\n <div\n class=\"sky-repeater-item-content\"\n [id]=\"contentId\"\n [@skyAnimationSlide]=\"slideDirection\"\n #itemContentRef\n [attr.role]=\"(itemRole$ | async)?.content\"\n >\n <ng-content select=\"sky-repeater-item-content\"></ng-content>\n </div>\n </div>\n</ng-template>\n", styles: ["sky-repeater-item .sky-repeater-item{display:flex;border-bottom:1px dotted #cdcfd2;padding-top:0;position:relative;transition:box-shadow .15s;align-items:flex-start}sky-repeater-item .sky-repeater-item sky-inline-form{display:block;width:100%}sky-repeater-item .sky-repeater-item sky-inline-form>:first-child,sky-repeater-item .sky-repeater-item sky-inline-form .sky-slide-dissolve-first,sky-repeater-item .sky-repeater-item sky-inline-form .sky-slide-dissolve-last{display:flex;flex:1 0 auto;width:100%}sky-repeater-item .sky-repeater-item sky-inline-form .sky-slide-dissolve-last{padding-top:10px}sky-repeater-item .sky-repeater-item.sky-repeater-item-active{background-color:#eeeeef;color:#212327;padding-left:6px;border-left:4px solid #00b4f1}sky-repeater-item .sky-repeater-item.sky-repeater-item-active .sky-inline-delete{margin-left:-4px;width:calc(100% + 4px)}sky-repeater-item .sky-repeater-item-left{display:flex;padding-top:10px;align-items:center}sky-repeater-item .sky-repeater-item-left sky-checkbox{display:flex}sky-repeater-item .sky-repeater-item-right{max-width:100%;flex-grow:1;align-self:center}sky-repeater-item .sky-repeater-item-header{align-items:center;display:flex;padding-top:10px}sky-repeater-item .sky-repeater-item-chevron{margin-left:10px}sky-repeater-item .sky-repeater-item-chevron-placeholder{height:24px}sky-repeater-item .sky-repeater-item-chevron-placeholder-with-context{height:29px}sky-repeater-item .sky-repeater-item-context-menu{padding:0 10px 0 0}sky-repeater-item .sky-repeater-item-checkbox{padding:0 5px 0 0}sky-repeater-item .sky-repeater-item-selected{background-color:#f1eef6;transition:background-color .15s}sky-repeater-item .sky-repeater-item-title{margin:0;flex-grow:1;line-height:1.1;color:#212327}sky-repeater-item sky-repeater-item-content{display:block;margin:10px 0 0}sky-repeater-item .sky-repeater-item-collapsible .sky-repeater-item-header{cursor:pointer}sky-repeater-item .sky-repeater-item-collapsible .sky-repeater-item-content{padding-right:34px}sky-repeater-item .sky-repeater-item-collapsed .sky-repeater-item-content{display:none}sky-repeater-item .sky-repeater-item-grab-handle{color:#cdcfd2;cursor:pointer;border:0;width:24px;height:24px;cursor:grab;cursor:-moz-grab;padding:0;margin:5px 10px 5px 0}sky-repeater-item .sky-repeater-item-grab-handle:hover{color:#979ba2;transition:color .15s}sky-repeater-item.sky-repeater-item-dragging.gu-mirror{opacity:initial;-ms-filter:initial;filter:initial;background-color:#fff;box-shadow:0 0 5px #0000004d}sky-repeater-item.sky-repeater-item-dragging.gu-transit .sky-repeater-item{background-color:#d8d8d8}sky-repeater-item.sky-repeater-item-dragging.gu-transit .sky-repeater-item .sky-repeater-item-left,sky-repeater-item.sky-repeater-item-dragging.gu-transit .sky-repeater-item .sky-repeater-item-right{visibility:hidden}sky-repeater-item.sky-repeater-item-dragging .sky-repeater-item-grab-handle{cursor:grabbing;cursor:-webkit-grabbing}.sky-theme-modern sky-repeater-item .sky-repeater-item{padding-bottom:20px}.sky-theme-modern sky-repeater-item .sky-repeater-item.sky-repeater-item-active{background-color:transparent;border-left-color:#1870b8}.sky-theme-modern sky-repeater-item .sky-repeater-item:focus,.sky-theme-modern sky-repeater-item .sky-repeater-item:active:focus{outline:solid 2px #1870B8;outline-offset:-2px}.sky-theme-modern sky-repeater-item .sky-repeater-item:focus:not(:active){box-shadow:0 1px 8px #0000004d}.sky-theme-modern sky-repeater-item .sky-repeater-item-header[hidden]+.sky-repeater-item-content sky-repeater-item-content{margin:20px 0 0}.sky-theme-modern sky-repeater-item .sky-repeater-item-header,.sky-theme-modern sky-repeater-item .sky-repeater-item-left{padding-top:20px}.sky-theme-modern sky-repeater-item sky-inline-form .sky-slide-dissolve-last{padding-top:20px}.sky-theme-modern.sky-theme-mode-dark sky-repeater-item .sky-repeater-item{border-bottom-color:#686c73}.sky-theme-modern.sky-theme-mode-dark sky-repeater-item .sky-repeater-item.sky-repeater-item-active{color:#fbfcfe}.sky-theme-modern.sky-theme-mode-dark sky-repeater-item .sky-repeater-item-title{color:#fbfcfe}\n"], dependencies: [{ kind: "directive", type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i5.λ2, selector: "sky-chevron", inputs: ["ariaControls", "ariaLabel", "direction", "disabled"], outputs: ["directionChange"] }, { kind: "component", type: i6.λ3, selector: "sky-checkbox", inputs: ["label", "labelledBy", "id", "disabled", "tabindex", "name", "icon", "checkboxType", "checked", "indeterminate", "required"], outputs: ["change", "checkedChange", "disabledChange", "indeterminateChange"] }, { kind: "component", type: i5.λ4, selector: "sky-icon", inputs: ["icon", "iconType", "size", "fixedWidth", "variant"] }, { kind: "component", type: i7.λ1, selector: "sky-inline-form", inputs: ["config", "template", "showForm"], outputs: ["close"] }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }, { kind: "pipe", type: i3.SkyLibResourcesPipe, name: "skyLibResources" }], animations: [skyAnimationSlide], encapsulation: i0.ViewEncapsulation.None });
|
|
434
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1
|
|
434
|
+
SkyRepeaterItemComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.1", ngImport: i0, type: SkyRepeaterItemComponent, deps: [{ token: i1.SkyRepeaterService }, { token: i0.ChangeDetectorRef }, { token: i2.SkyRepeaterAdapterService }, { token: i0.ElementRef }, { token: i3.SkyLibResourcesService }], target: i0.ɵɵFactoryTarget.Component });
|
|
435
|
+
SkyRepeaterItemComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.1", type: SkyRepeaterItemComponent, selector: "sky-repeater-item", inputs: { disabled: "disabled", itemName: "itemName", inlineFormConfig: "inlineFormConfig", inlineFormTemplate: "inlineFormTemplate", isExpanded: "isExpanded", isSelected: "isSelected", reorderable: "reorderable", selectable: "selectable", showInlineForm: "showInlineForm", tag: "tag" }, outputs: { collapse: "collapse", expand: "expand", inlineFormClose: "inlineFormClose", isSelectedChange: "isSelectedChange" }, host: { listeners: { "keydown": "onKeydown($event)" }, properties: { "class": "this.repeaterGroupClass" } }, queries: [{ propertyName: "contextMenu", first: true, predicate: SkyRepeaterItemContextMenuComponent, descendants: true, read: ElementRef }, { propertyName: "repeaterItemContentComponents", predicate: SkyRepeaterItemContentComponent }], viewQueries: [{ propertyName: "grabHandle", first: true, predicate: ["grabHandle"], descendants: true, read: ElementRef }, { propertyName: "itemContentRef", first: true, predicate: ["itemContentRef"], descendants: true, read: ElementRef }, { propertyName: "itemHeaderRef", first: true, predicate: ["itemHeaderRef"], descendants: true, read: ElementRef }, { propertyName: "itemRef", first: true, predicate: ["itemRef"], descendants: true, read: ElementRef }], ngImport: i0, template: "<div\n class=\"sky-repeater-item sky-padding-even-default\"\n [attr.aria-label]=\"itemName\"\n [attr.aria-selected]=\"selectable ? !!isSelected : undefined\"\n [attr.role]=\"(itemRole$ | async)?.item\"\n [attr.tabIndex]=\"tabindex\"\n [ngClass]=\"{\n 'sky-repeater-item-active': isActive,\n 'sky-repeater-item-collapsible': isCollapsible,\n 'sky-repeater-item-selected': isSelected\n }\"\n (click)=\"onRepeaterItemClick($event)\"\n #itemRef\n>\n <div #inlineDelete>\n <ng-content select=\"sky-inline-delete\"></ng-content>\n </div>\n\n <ng-container *ngIf=\"inlineFormTemplate\">\n <sky-inline-form\n [config]=\"inlineFormConfig\"\n [showForm]=\"showInlineForm\"\n [template]=\"inlineFormTemplate\"\n (close)=\"onInlineFormClose($event)\"\n >\n <ng-container *ngTemplateOutlet=\"skyRepeaterItemLeft\"></ng-container>\n <ng-container *ngTemplateOutlet=\"skyRepeaterItemRight\"></ng-container>\n </sky-inline-form>\n </ng-container>\n\n <ng-container *ngIf=\"!inlineFormTemplate\">\n <ng-container *ngTemplateOutlet=\"skyRepeaterItemLeft\"></ng-container>\n <ng-container *ngTemplateOutlet=\"skyRepeaterItemRight\"></ng-container>\n </ng-container>\n</div>\n\n<ng-template #skyRepeaterItemLeft>\n <div\n [attr.role]=\"!showInlineForm ? (itemRole$ | async)?.content : undefined\"\n class=\"sky-repeater-item-left\"\n >\n <ng-container *ngIf=\"reorderable\">\n <span\n aria-live=\"assertive\"\n class=\"sky-screen-reader-only\"\n [id]=\"contentId + '-reorder-state'\"\n >\n {{ reorderState }}\n </span>\n <span\n class=\"sky-screen-reader-only\"\n [id]=\"contentId + '-reorder-instructions'\"\n >{{ reorderButtonLabel }}</span\n >\n <button\n class=\"sky-btn sky-tile-tools-control sky-repeater-item-grab-handle\"\n type=\"button\"\n [attr.aria-describedby]=\"contentId + '-reorder-instructions'\"\n [attr.aria-label]=\"\n itemName\n ? ('skyux_repeater_item_reorder_label' | skyLibResources : itemName)\n : ('skyux_repeater_item_reorder_label_default' | skyLibResources)\n \"\n (blur)=\"onReorderHandleBlur($event)\"\n (keydown)=\"onReorderHandleKeyDown($event)\"\n #grabHandle\n >\n <sky-icon icon=\"arrows-v\"></sky-icon>\n </button>\n </ng-container>\n <sky-checkbox\n *ngIf=\"selectable\"\n class=\"sky-repeater-item-checkbox\"\n [checked]=\"isSelected\"\n [label]=\"\n itemName\n ? ('skyux_repeater_item_checkbox_label' | skyLibResources : itemName)\n : ('skyux_repeater_item_checkbox_label_default' | skyLibResources)\n \"\n (change)=\"onCheckboxChange($event)\"\n >\n </sky-checkbox>\n <div\n class=\"sky-repeater-item-context-menu\"\n [hidden]=\"contextMenuEl.children.length === 0\"\n #contextMenuEl\n >\n <ng-content select=\"sky-repeater-item-context-menu\"></ng-content>\n </div>\n </div>\n</ng-template>\n\n<ng-template #skyRepeaterItemRight>\n <div class=\"sky-repeater-item-right\" #itemHeaderRef>\n <div\n class=\"sky-repeater-item-header\"\n [attr.role]=\"(itemRole$ | async)?.title\"\n [hidden]=\"titleRef.children.length === 0\"\n (click)=\"headerClick()\"\n >\n <div class=\"sky-repeater-item-title sky-font-emphasized\" #titleRef>\n <ng-content select=\"sky-repeater-item-title\"></ng-content>\n </div>\n <button\n *ngIf=\"reorderable\"\n class=\"sky-btn sky-btn-link sky-repeater-item-reorder-top\"\n type=\"button\"\n [attr.aria-label]=\"\n itemName\n ? ('skyux_repeater_item_reorder_top_label'\n | skyLibResources : itemName)\n : ('skyux_repeater_item_reorder_top_label_default'\n | skyLibResources)\n \"\n (click)=\"moveToTop($event)\"\n >\n <sky-icon icon=\"arrow-circle-up\"></sky-icon>\n {{ 'skyux_repeater_item_reorder_top' | skyLibResources }}\n </button>\n <div *ngIf=\"isCollapsible\" class=\"sky-repeater-item-chevron\">\n <sky-chevron\n [ariaControls]=\"contentId\"\n [ariaLabel]=\"\n itemName\n ? isExpanded\n ? ('skyux_repeater_item_expand' | skyLibResources : itemName)\n : ('skyux_repeater_item_collapse' | skyLibResources : itemName)\n : isExpanded\n ? ('skyux_repeater_item_expand_default' | skyLibResources)\n : ('skyux_repeater_item_collapse_default' | skyLibResources)\n \"\n [direction]=\"isExpanded ? 'up' : 'down'\"\n (directionChange)=\"chevronDirectionChange($event)\"\n >\n </sky-chevron>\n </div>\n <!-- Used for when the chevron is hidden to ensure that the right side is the same height as the left.-->\n <div\n *ngIf=\"!isCollapsible && !contextMenu\"\n class=\"sky-repeater-item-chevron-placeholder\"\n ></div>\n <!-- Used to ensure that the right side is the same height as the left.-->\n <div\n *ngIf=\"contextMenu\"\n class=\"sky-repeater-item-chevron-placeholder-with-context\"\n ></div>\n </div>\n <div\n class=\"sky-repeater-item-content\"\n [id]=\"contentId\"\n [@.disabled]=\"animationDisabled\"\n [@skyAnimationSlide]=\"slideDirection\"\n #itemContentRef\n [attr.role]=\"(itemRole$ | async)?.content\"\n >\n <ng-content select=\"sky-repeater-item-content\"></ng-content>\n </div>\n </div>\n</ng-template>\n", styles: ["sky-repeater-item .sky-repeater-item{display:flex;border-bottom:1px dotted #cdcfd2;padding-top:0;position:relative;transition:box-shadow .15s;align-items:flex-start}sky-repeater-item .sky-repeater-item sky-inline-form{display:block;width:100%}sky-repeater-item .sky-repeater-item sky-inline-form>:first-child,sky-repeater-item .sky-repeater-item sky-inline-form .sky-slide-dissolve-first,sky-repeater-item .sky-repeater-item sky-inline-form .sky-slide-dissolve-last{display:flex;flex:1 0 auto;width:100%}sky-repeater-item .sky-repeater-item sky-inline-form .sky-slide-dissolve-last{padding-top:10px}sky-repeater-item .sky-repeater-item.sky-repeater-item-active{background-color:#eeeeef;color:#212327;padding-left:6px;border-left:4px solid #00b4f1}sky-repeater-item .sky-repeater-item.sky-repeater-item-active .sky-inline-delete{margin-left:-4px;width:calc(100% + 4px)}sky-repeater-item .sky-repeater-item-left{display:flex;padding-top:10px;align-items:center}sky-repeater-item .sky-repeater-item-left sky-checkbox{display:flex}sky-repeater-item .sky-repeater-item-right{max-width:100%;flex-grow:1;align-self:center}sky-repeater-item .sky-repeater-item-header{align-items:center;display:flex;padding-top:10px}sky-repeater-item .sky-repeater-item-chevron{margin-left:10px}sky-repeater-item .sky-repeater-item-chevron-placeholder{height:24px}sky-repeater-item .sky-repeater-item-chevron-placeholder-with-context{height:29px}sky-repeater-item .sky-repeater-item-context-menu{padding:0 10px 0 0}sky-repeater-item .sky-repeater-item-checkbox{padding:0 5px 0 0}sky-repeater-item .sky-repeater-item-selected{background-color:#f1eef6;transition:background-color .15s}sky-repeater-item .sky-repeater-item-title{margin:0;flex-grow:1;line-height:1.1;color:#212327}sky-repeater-item sky-repeater-item-content{display:block;margin:10px 0 0}sky-repeater-item .sky-repeater-item-collapsible .sky-repeater-item-header{cursor:pointer}sky-repeater-item .sky-repeater-item-collapsible .sky-repeater-item-content{padding-right:34px}sky-repeater-item .sky-repeater-item-collapsed .sky-repeater-item-content{display:none}sky-repeater-item .sky-repeater-item-grab-handle{color:#cdcfd2;cursor:pointer;border:0;width:24px;height:24px;cursor:grab;cursor:-moz-grab;padding:0;margin:5px 10px 5px 0}sky-repeater-item .sky-repeater-item-grab-handle:hover{color:#979ba2;transition:color .15s}sky-repeater-item.sky-repeater-item-dragging.gu-mirror{opacity:initial;-ms-filter:initial;filter:initial;background-color:#fff;box-shadow:0 0 5px #0000004d}sky-repeater-item.sky-repeater-item-dragging.gu-transit .sky-repeater-item{background-color:#d8d8d8}sky-repeater-item.sky-repeater-item-dragging.gu-transit .sky-repeater-item .sky-repeater-item-left,sky-repeater-item.sky-repeater-item-dragging.gu-transit .sky-repeater-item .sky-repeater-item-right{visibility:hidden}sky-repeater-item.sky-repeater-item-dragging .sky-repeater-item-grab-handle{cursor:grabbing;cursor:-webkit-grabbing}.sky-theme-modern sky-repeater-item .sky-repeater-item{padding-bottom:20px}.sky-theme-modern sky-repeater-item .sky-repeater-item.sky-repeater-item-active{background-color:transparent;border-left-color:#1870b8}.sky-theme-modern sky-repeater-item .sky-repeater-item:focus,.sky-theme-modern sky-repeater-item .sky-repeater-item:active:focus{outline:solid 2px #1870B8;outline-offset:-2px}.sky-theme-modern sky-repeater-item .sky-repeater-item:focus:not(:active){box-shadow:0 1px 8px #0000004d}.sky-theme-modern sky-repeater-item .sky-repeater-item-header[hidden]+.sky-repeater-item-content sky-repeater-item-content{margin:20px 0 0}.sky-theme-modern sky-repeater-item .sky-repeater-item-header,.sky-theme-modern sky-repeater-item .sky-repeater-item-left{padding-top:20px}.sky-theme-modern sky-repeater-item sky-inline-form .sky-slide-dissolve-last{padding-top:20px}.sky-theme-modern.sky-theme-mode-dark sky-repeater-item .sky-repeater-item{border-bottom-color:#686c73}.sky-theme-modern.sky-theme-mode-dark sky-repeater-item .sky-repeater-item.sky-repeater-item-active{color:#fbfcfe}.sky-theme-modern.sky-theme-mode-dark sky-repeater-item .sky-repeater-item-title{color:#fbfcfe}\n"], dependencies: [{ kind: "directive", type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i5.λ2, selector: "sky-chevron", inputs: ["ariaControls", "ariaLabel", "direction", "disabled"], outputs: ["directionChange"] }, { kind: "component", type: i6.λ3, selector: "sky-checkbox", inputs: ["label", "labelledBy", "id", "disabled", "tabindex", "name", "icon", "checkboxType", "checked", "indeterminate", "required"], outputs: ["change", "checkedChange", "disabledChange", "indeterminateChange"] }, { kind: "component", type: i5.λ4, selector: "sky-icon", inputs: ["icon", "iconType", "size", "fixedWidth", "variant"] }, { kind: "component", type: i7.λ1, selector: "sky-inline-form", inputs: ["config", "template", "showForm"], outputs: ["close"] }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }, { kind: "pipe", type: i3.SkyLibResourcesPipe, name: "skyLibResources" }], animations: [skyAnimationSlide], encapsulation: i0.ViewEncapsulation.None });
|
|
436
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.1", ngImport: i0, type: SkyRepeaterItemComponent, decorators: [{
|
|
435
437
|
type: Component,
|
|
436
|
-
args: [{ selector: 'sky-repeater-item', animations: [skyAnimationSlide], encapsulation: ViewEncapsulation.None, template: "<div\n class=\"sky-repeater-item sky-padding-even-default\"\n [attr.aria-label]=\"itemName\"\n [attr.aria-selected]=\"selectable ? !!isSelected : undefined\"\n [attr.role]=\"(itemRole$ | async)?.item\"\n [attr.tabIndex]=\"tabindex\"\n [ngClass]=\"{\n 'sky-repeater-item-active': isActive,\n 'sky-repeater-item-collapsible': isCollapsible,\n 'sky-repeater-item-selected': isSelected\n }\"\n (click)=\"onRepeaterItemClick($event)\"\n #itemRef\n>\n <div #inlineDelete>\n <ng-content select=\"sky-inline-delete\"></ng-content>\n </div>\n\n <ng-container *ngIf=\"inlineFormTemplate\">\n <sky-inline-form\n [config]=\"inlineFormConfig\"\n [showForm]=\"showInlineForm\"\n [template]=\"inlineFormTemplate\"\n (close)=\"onInlineFormClose($event)\"\n >\n <ng-container *ngTemplateOutlet=\"skyRepeaterItemLeft\"></ng-container>\n <ng-container *ngTemplateOutlet=\"skyRepeaterItemRight\"></ng-container>\n </sky-inline-form>\n </ng-container>\n\n <ng-container *ngIf=\"!inlineFormTemplate\">\n <ng-container *ngTemplateOutlet=\"skyRepeaterItemLeft\"></ng-container>\n <ng-container *ngTemplateOutlet=\"skyRepeaterItemRight\"></ng-container>\n </ng-container>\n</div>\n\n<ng-template #skyRepeaterItemLeft>\n <div\n [attr.role]=\"!showInlineForm ? (itemRole$ | async)?.content : undefined\"\n class=\"sky-repeater-item-left\"\n >\n <ng-container *ngIf=\"reorderable\">\n <span\n aria-live=\"assertive\"\n class=\"sky-screen-reader-only\"\n [id]=\"contentId + '-reorder-state'\"\n >\n {{ reorderState }}\n </span>\n <span\n class=\"sky-screen-reader-only\"\n [id]=\"contentId + '-reorder-instructions'\"\n >{{ reorderButtonLabel }}</span\n >\n <button\n class=\"sky-btn sky-tile-tools-control sky-repeater-item-grab-handle\"\n type=\"button\"\n [attr.aria-describedby]=\"contentId + '-reorder-instructions'\"\n [attr.aria-label]=\"\n itemName\n ? ('skyux_repeater_item_reorder_label' | skyLibResources : itemName)\n : ('skyux_repeater_item_reorder_label_default' | skyLibResources)\n \"\n (blur)=\"onReorderHandleBlur($event)\"\n (keydown)=\"onReorderHandleKeyDown($event)\"\n #grabHandle\n >\n <sky-icon icon=\"arrows-v\"></sky-icon>\n </button>\n </ng-container>\n <sky-checkbox\n *ngIf=\"selectable\"\n class=\"sky-repeater-item-checkbox\"\n [checked]=\"isSelected\"\n [label]=\"\n itemName\n ? ('skyux_repeater_item_checkbox_label' | skyLibResources : itemName)\n : ('skyux_repeater_item_checkbox_label_default' | skyLibResources)\n \"\n (change)=\"onCheckboxChange($event)\"\n >\n </sky-checkbox>\n <div\n class=\"sky-repeater-item-context-menu\"\n [hidden]=\"contextMenuEl.children.length === 0\"\n #contextMenuEl\n >\n <ng-content select=\"sky-repeater-item-context-menu\"></ng-content>\n </div>\n </div>\n</ng-template>\n\n<ng-template #skyRepeaterItemRight>\n <div class=\"sky-repeater-item-right\" #itemHeaderRef>\n <div\n class=\"sky-repeater-item-header\"\n [attr.role]=\"(itemRole$ | async)?.title\"\n [hidden]=\"titleRef.children.length === 0\"\n (click)=\"headerClick()\"\n >\n <div class=\"sky-repeater-item-title sky-emphasized\" #titleRef>\n <ng-content select=\"sky-repeater-item-title\"></ng-content>\n </div>\n <button\n *ngIf=\"reorderable\"\n class=\"sky-btn sky-btn-link sky-repeater-item-reorder-top\"\n type=\"button\"\n [attr.aria-label]=\"\n itemName\n ? ('skyux_repeater_item_reorder_top_label'\n | skyLibResources : itemName)\n : ('skyux_repeater_item_reorder_top_label_default'\n | skyLibResources)\n \"\n (click)=\"moveToTop($event)\"\n >\n <sky-icon icon=\"arrow-circle-up\"></sky-icon>\n {{ 'skyux_repeater_item_reorder_top' | skyLibResources }}\n </button>\n <div *ngIf=\"isCollapsible\" class=\"sky-repeater-item-chevron\">\n <sky-chevron\n [ariaControls]=\"contentId\"\n [ariaLabel]=\"\n itemName\n ? ('skyux_repeater_item_expand' | skyLibResources : itemName)\n : ('skyux_repeater_item_expand_default' | skyLibResources)\n \"\n [direction]=\"isExpanded ? 'up' : 'down'\"\n (directionChange)=\"chevronDirectionChange($event)\"\n >\n </sky-chevron>\n </div>\n <!-- Used for when the chevron is hidden to ensure that the right side is the same height as the left.-->\n <div\n *ngIf=\"!isCollapsible && !contextMenu\"\n class=\"sky-repeater-item-chevron-placeholder\"\n ></div>\n <!-- Used to ensure that the right side is the same height as the left.-->\n <div\n *ngIf=\"contextMenu\"\n class=\"sky-repeater-item-chevron-placeholder-with-context\"\n ></div>\n </div>\n <div\n class=\"sky-repeater-item-content\"\n [id]=\"contentId\"\n [@skyAnimationSlide]=\"slideDirection\"\n #itemContentRef\n [attr.role]=\"(itemRole$ | async)?.content\"\n >\n <ng-content select=\"sky-repeater-item-content\"></ng-content>\n </div>\n </div>\n</ng-template>\n", styles: ["sky-repeater-item .sky-repeater-item{display:flex;border-bottom:1px dotted #cdcfd2;padding-top:0;position:relative;transition:box-shadow .15s;align-items:flex-start}sky-repeater-item .sky-repeater-item sky-inline-form{display:block;width:100%}sky-repeater-item .sky-repeater-item sky-inline-form>:first-child,sky-repeater-item .sky-repeater-item sky-inline-form .sky-slide-dissolve-first,sky-repeater-item .sky-repeater-item sky-inline-form .sky-slide-dissolve-last{display:flex;flex:1 0 auto;width:100%}sky-repeater-item .sky-repeater-item sky-inline-form .sky-slide-dissolve-last{padding-top:10px}sky-repeater-item .sky-repeater-item.sky-repeater-item-active{background-color:#eeeeef;color:#212327;padding-left:6px;border-left:4px solid #00b4f1}sky-repeater-item .sky-repeater-item.sky-repeater-item-active .sky-inline-delete{margin-left:-4px;width:calc(100% + 4px)}sky-repeater-item .sky-repeater-item-left{display:flex;padding-top:10px;align-items:center}sky-repeater-item .sky-repeater-item-left sky-checkbox{display:flex}sky-repeater-item .sky-repeater-item-right{max-width:100%;flex-grow:1;align-self:center}sky-repeater-item .sky-repeater-item-header{align-items:center;display:flex;padding-top:10px}sky-repeater-item .sky-repeater-item-chevron{margin-left:10px}sky-repeater-item .sky-repeater-item-chevron-placeholder{height:24px}sky-repeater-item .sky-repeater-item-chevron-placeholder-with-context{height:29px}sky-repeater-item .sky-repeater-item-context-menu{padding:0 10px 0 0}sky-repeater-item .sky-repeater-item-checkbox{padding:0 5px 0 0}sky-repeater-item .sky-repeater-item-selected{background-color:#f1eef6;transition:background-color .15s}sky-repeater-item .sky-repeater-item-title{margin:0;flex-grow:1;line-height:1.1;color:#212327}sky-repeater-item sky-repeater-item-content{display:block;margin:10px 0 0}sky-repeater-item .sky-repeater-item-collapsible .sky-repeater-item-header{cursor:pointer}sky-repeater-item .sky-repeater-item-collapsible .sky-repeater-item-content{padding-right:34px}sky-repeater-item .sky-repeater-item-collapsed .sky-repeater-item-content{display:none}sky-repeater-item .sky-repeater-item-grab-handle{color:#cdcfd2;cursor:pointer;border:0;width:24px;height:24px;cursor:grab;cursor:-moz-grab;padding:0;margin:5px 10px 5px 0}sky-repeater-item .sky-repeater-item-grab-handle:hover{color:#979ba2;transition:color .15s}sky-repeater-item.sky-repeater-item-dragging.gu-mirror{opacity:initial;-ms-filter:initial;filter:initial;background-color:#fff;box-shadow:0 0 5px #0000004d}sky-repeater-item.sky-repeater-item-dragging.gu-transit .sky-repeater-item{background-color:#d8d8d8}sky-repeater-item.sky-repeater-item-dragging.gu-transit .sky-repeater-item .sky-repeater-item-left,sky-repeater-item.sky-repeater-item-dragging.gu-transit .sky-repeater-item .sky-repeater-item-right{visibility:hidden}sky-repeater-item.sky-repeater-item-dragging .sky-repeater-item-grab-handle{cursor:grabbing;cursor:-webkit-grabbing}.sky-theme-modern sky-repeater-item .sky-repeater-item{padding-bottom:20px}.sky-theme-modern sky-repeater-item .sky-repeater-item.sky-repeater-item-active{background-color:transparent;border-left-color:#1870b8}.sky-theme-modern sky-repeater-item .sky-repeater-item:focus,.sky-theme-modern sky-repeater-item .sky-repeater-item:active:focus{outline:solid 2px #1870B8;outline-offset:-2px}.sky-theme-modern sky-repeater-item .sky-repeater-item:focus:not(:active){box-shadow:0 1px 8px #0000004d}.sky-theme-modern sky-repeater-item .sky-repeater-item-header[hidden]+.sky-repeater-item-content sky-repeater-item-content{margin:20px 0 0}.sky-theme-modern sky-repeater-item .sky-repeater-item-header,.sky-theme-modern sky-repeater-item .sky-repeater-item-left{padding-top:20px}.sky-theme-modern sky-repeater-item sky-inline-form .sky-slide-dissolve-last{padding-top:20px}.sky-theme-modern.sky-theme-mode-dark sky-repeater-item .sky-repeater-item{border-bottom-color:#686c73}.sky-theme-modern.sky-theme-mode-dark sky-repeater-item .sky-repeater-item.sky-repeater-item-active{color:#fbfcfe}.sky-theme-modern.sky-theme-mode-dark sky-repeater-item .sky-repeater-item-title{color:#fbfcfe}\n"] }]
|
|
438
|
+
args: [{ selector: 'sky-repeater-item', animations: [skyAnimationSlide], encapsulation: ViewEncapsulation.None, template: "<div\n class=\"sky-repeater-item sky-padding-even-default\"\n [attr.aria-label]=\"itemName\"\n [attr.aria-selected]=\"selectable ? !!isSelected : undefined\"\n [attr.role]=\"(itemRole$ | async)?.item\"\n [attr.tabIndex]=\"tabindex\"\n [ngClass]=\"{\n 'sky-repeater-item-active': isActive,\n 'sky-repeater-item-collapsible': isCollapsible,\n 'sky-repeater-item-selected': isSelected\n }\"\n (click)=\"onRepeaterItemClick($event)\"\n #itemRef\n>\n <div #inlineDelete>\n <ng-content select=\"sky-inline-delete\"></ng-content>\n </div>\n\n <ng-container *ngIf=\"inlineFormTemplate\">\n <sky-inline-form\n [config]=\"inlineFormConfig\"\n [showForm]=\"showInlineForm\"\n [template]=\"inlineFormTemplate\"\n (close)=\"onInlineFormClose($event)\"\n >\n <ng-container *ngTemplateOutlet=\"skyRepeaterItemLeft\"></ng-container>\n <ng-container *ngTemplateOutlet=\"skyRepeaterItemRight\"></ng-container>\n </sky-inline-form>\n </ng-container>\n\n <ng-container *ngIf=\"!inlineFormTemplate\">\n <ng-container *ngTemplateOutlet=\"skyRepeaterItemLeft\"></ng-container>\n <ng-container *ngTemplateOutlet=\"skyRepeaterItemRight\"></ng-container>\n </ng-container>\n</div>\n\n<ng-template #skyRepeaterItemLeft>\n <div\n [attr.role]=\"!showInlineForm ? (itemRole$ | async)?.content : undefined\"\n class=\"sky-repeater-item-left\"\n >\n <ng-container *ngIf=\"reorderable\">\n <span\n aria-live=\"assertive\"\n class=\"sky-screen-reader-only\"\n [id]=\"contentId + '-reorder-state'\"\n >\n {{ reorderState }}\n </span>\n <span\n class=\"sky-screen-reader-only\"\n [id]=\"contentId + '-reorder-instructions'\"\n >{{ reorderButtonLabel }}</span\n >\n <button\n class=\"sky-btn sky-tile-tools-control sky-repeater-item-grab-handle\"\n type=\"button\"\n [attr.aria-describedby]=\"contentId + '-reorder-instructions'\"\n [attr.aria-label]=\"\n itemName\n ? ('skyux_repeater_item_reorder_label' | skyLibResources : itemName)\n : ('skyux_repeater_item_reorder_label_default' | skyLibResources)\n \"\n (blur)=\"onReorderHandleBlur($event)\"\n (keydown)=\"onReorderHandleKeyDown($event)\"\n #grabHandle\n >\n <sky-icon icon=\"arrows-v\"></sky-icon>\n </button>\n </ng-container>\n <sky-checkbox\n *ngIf=\"selectable\"\n class=\"sky-repeater-item-checkbox\"\n [checked]=\"isSelected\"\n [label]=\"\n itemName\n ? ('skyux_repeater_item_checkbox_label' | skyLibResources : itemName)\n : ('skyux_repeater_item_checkbox_label_default' | skyLibResources)\n \"\n (change)=\"onCheckboxChange($event)\"\n >\n </sky-checkbox>\n <div\n class=\"sky-repeater-item-context-menu\"\n [hidden]=\"contextMenuEl.children.length === 0\"\n #contextMenuEl\n >\n <ng-content select=\"sky-repeater-item-context-menu\"></ng-content>\n </div>\n </div>\n</ng-template>\n\n<ng-template #skyRepeaterItemRight>\n <div class=\"sky-repeater-item-right\" #itemHeaderRef>\n <div\n class=\"sky-repeater-item-header\"\n [attr.role]=\"(itemRole$ | async)?.title\"\n [hidden]=\"titleRef.children.length === 0\"\n (click)=\"headerClick()\"\n >\n <div class=\"sky-repeater-item-title sky-font-emphasized\" #titleRef>\n <ng-content select=\"sky-repeater-item-title\"></ng-content>\n </div>\n <button\n *ngIf=\"reorderable\"\n class=\"sky-btn sky-btn-link sky-repeater-item-reorder-top\"\n type=\"button\"\n [attr.aria-label]=\"\n itemName\n ? ('skyux_repeater_item_reorder_top_label'\n | skyLibResources : itemName)\n : ('skyux_repeater_item_reorder_top_label_default'\n | skyLibResources)\n \"\n (click)=\"moveToTop($event)\"\n >\n <sky-icon icon=\"arrow-circle-up\"></sky-icon>\n {{ 'skyux_repeater_item_reorder_top' | skyLibResources }}\n </button>\n <div *ngIf=\"isCollapsible\" class=\"sky-repeater-item-chevron\">\n <sky-chevron\n [ariaControls]=\"contentId\"\n [ariaLabel]=\"\n itemName\n ? isExpanded\n ? ('skyux_repeater_item_expand' | skyLibResources : itemName)\n : ('skyux_repeater_item_collapse' | skyLibResources : itemName)\n : isExpanded\n ? ('skyux_repeater_item_expand_default' | skyLibResources)\n : ('skyux_repeater_item_collapse_default' | skyLibResources)\n \"\n [direction]=\"isExpanded ? 'up' : 'down'\"\n (directionChange)=\"chevronDirectionChange($event)\"\n >\n </sky-chevron>\n </div>\n <!-- Used for when the chevron is hidden to ensure that the right side is the same height as the left.-->\n <div\n *ngIf=\"!isCollapsible && !contextMenu\"\n class=\"sky-repeater-item-chevron-placeholder\"\n ></div>\n <!-- Used to ensure that the right side is the same height as the left.-->\n <div\n *ngIf=\"contextMenu\"\n class=\"sky-repeater-item-chevron-placeholder-with-context\"\n ></div>\n </div>\n <div\n class=\"sky-repeater-item-content\"\n [id]=\"contentId\"\n [@.disabled]=\"animationDisabled\"\n [@skyAnimationSlide]=\"slideDirection\"\n #itemContentRef\n [attr.role]=\"(itemRole$ | async)?.content\"\n >\n <ng-content select=\"sky-repeater-item-content\"></ng-content>\n </div>\n </div>\n</ng-template>\n", styles: ["sky-repeater-item .sky-repeater-item{display:flex;border-bottom:1px dotted #cdcfd2;padding-top:0;position:relative;transition:box-shadow .15s;align-items:flex-start}sky-repeater-item .sky-repeater-item sky-inline-form{display:block;width:100%}sky-repeater-item .sky-repeater-item sky-inline-form>:first-child,sky-repeater-item .sky-repeater-item sky-inline-form .sky-slide-dissolve-first,sky-repeater-item .sky-repeater-item sky-inline-form .sky-slide-dissolve-last{display:flex;flex:1 0 auto;width:100%}sky-repeater-item .sky-repeater-item sky-inline-form .sky-slide-dissolve-last{padding-top:10px}sky-repeater-item .sky-repeater-item.sky-repeater-item-active{background-color:#eeeeef;color:#212327;padding-left:6px;border-left:4px solid #00b4f1}sky-repeater-item .sky-repeater-item.sky-repeater-item-active .sky-inline-delete{margin-left:-4px;width:calc(100% + 4px)}sky-repeater-item .sky-repeater-item-left{display:flex;padding-top:10px;align-items:center}sky-repeater-item .sky-repeater-item-left sky-checkbox{display:flex}sky-repeater-item .sky-repeater-item-right{max-width:100%;flex-grow:1;align-self:center}sky-repeater-item .sky-repeater-item-header{align-items:center;display:flex;padding-top:10px}sky-repeater-item .sky-repeater-item-chevron{margin-left:10px}sky-repeater-item .sky-repeater-item-chevron-placeholder{height:24px}sky-repeater-item .sky-repeater-item-chevron-placeholder-with-context{height:29px}sky-repeater-item .sky-repeater-item-context-menu{padding:0 10px 0 0}sky-repeater-item .sky-repeater-item-checkbox{padding:0 5px 0 0}sky-repeater-item .sky-repeater-item-selected{background-color:#f1eef6;transition:background-color .15s}sky-repeater-item .sky-repeater-item-title{margin:0;flex-grow:1;line-height:1.1;color:#212327}sky-repeater-item sky-repeater-item-content{display:block;margin:10px 0 0}sky-repeater-item .sky-repeater-item-collapsible .sky-repeater-item-header{cursor:pointer}sky-repeater-item .sky-repeater-item-collapsible .sky-repeater-item-content{padding-right:34px}sky-repeater-item .sky-repeater-item-collapsed .sky-repeater-item-content{display:none}sky-repeater-item .sky-repeater-item-grab-handle{color:#cdcfd2;cursor:pointer;border:0;width:24px;height:24px;cursor:grab;cursor:-moz-grab;padding:0;margin:5px 10px 5px 0}sky-repeater-item .sky-repeater-item-grab-handle:hover{color:#979ba2;transition:color .15s}sky-repeater-item.sky-repeater-item-dragging.gu-mirror{opacity:initial;-ms-filter:initial;filter:initial;background-color:#fff;box-shadow:0 0 5px #0000004d}sky-repeater-item.sky-repeater-item-dragging.gu-transit .sky-repeater-item{background-color:#d8d8d8}sky-repeater-item.sky-repeater-item-dragging.gu-transit .sky-repeater-item .sky-repeater-item-left,sky-repeater-item.sky-repeater-item-dragging.gu-transit .sky-repeater-item .sky-repeater-item-right{visibility:hidden}sky-repeater-item.sky-repeater-item-dragging .sky-repeater-item-grab-handle{cursor:grabbing;cursor:-webkit-grabbing}.sky-theme-modern sky-repeater-item .sky-repeater-item{padding-bottom:20px}.sky-theme-modern sky-repeater-item .sky-repeater-item.sky-repeater-item-active{background-color:transparent;border-left-color:#1870b8}.sky-theme-modern sky-repeater-item .sky-repeater-item:focus,.sky-theme-modern sky-repeater-item .sky-repeater-item:active:focus{outline:solid 2px #1870B8;outline-offset:-2px}.sky-theme-modern sky-repeater-item .sky-repeater-item:focus:not(:active){box-shadow:0 1px 8px #0000004d}.sky-theme-modern sky-repeater-item .sky-repeater-item-header[hidden]+.sky-repeater-item-content sky-repeater-item-content{margin:20px 0 0}.sky-theme-modern sky-repeater-item .sky-repeater-item-header,.sky-theme-modern sky-repeater-item .sky-repeater-item-left{padding-top:20px}.sky-theme-modern sky-repeater-item sky-inline-form .sky-slide-dissolve-last{padding-top:20px}.sky-theme-modern.sky-theme-mode-dark sky-repeater-item .sky-repeater-item{border-bottom-color:#686c73}.sky-theme-modern.sky-theme-mode-dark sky-repeater-item .sky-repeater-item.sky-repeater-item-active{color:#fbfcfe}.sky-theme-modern.sky-theme-mode-dark sky-repeater-item .sky-repeater-item-title{color:#fbfcfe}\n"] }]
|
|
437
439
|
}], ctorParameters: function () { return [{ type: i1.SkyRepeaterService }, { type: i0.ChangeDetectorRef }, { type: i2.SkyRepeaterAdapterService }, { type: i0.ElementRef }, { type: i3.SkyLibResourcesService }]; }, propDecorators: { disabled: [{
|
|
438
440
|
type: Input
|
|
439
441
|
}], itemName: [{
|
|
@@ -487,4 +489,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.4", ngImpor
|
|
|
487
489
|
type: HostListener,
|
|
488
490
|
args: ['keydown', ['$event']]
|
|
489
491
|
}] } });
|
|
490
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwZWF0ZXItaXRlbS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvbGlzdHMvc3JjL2xpYi9tb2R1bGVzL3JlcGVhdGVyL3JlcGVhdGVyLWl0ZW0uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21wb25lbnRzL2xpc3RzL3NyYy9saWIvbW9kdWxlcy9yZXBlYXRlci9yZXBlYXRlci1pdGVtLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsT0FBTyxFQUdMLFNBQVMsRUFDVCxZQUFZLEVBQ1osZUFBZSxFQUNmLFVBQVUsRUFDVixZQUFZLEVBQ1osV0FBVyxFQUNYLFlBQVksRUFDWixLQUFLLEVBR0wsTUFBTSxFQUdOLFNBQVMsRUFDVCxpQkFBaUIsR0FDbEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFRdEQsT0FBTyxFQUFjLE9BQU8sRUFBRSxRQUFRLElBQUksa0JBQWtCLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDM0UsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRzNDLE9BQU8sRUFBRSwrQkFBK0IsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ3BGLE9BQU8sRUFBRSxtQ0FBbUMsRUFBRSxNQUFNLHdDQUF3QyxDQUFDOzs7Ozs7Ozs7QUFJN0YsSUFBSSxhQUFhLEdBQUcsQ0FBQyxDQUFDO0FBRXRCOztHQUVHO0FBUUgsTUFBTSxPQUFPLHdCQUF3QjtJQStObkMsWUFDRSxlQUFtQyxFQUNuQyxjQUFpQyxFQUNqQyxjQUF5QyxFQUN6QyxVQUFzQixFQUN0QixlQUF1Qzs7UUFySXpDOzs7V0FHRztRQUVJLGdCQUFXLEdBQXdCLEtBQUssQ0FBQztRQUVoRDs7V0FFRztRQUVJLGVBQVUsR0FBd0IsS0FB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YztzQkFEcEIsU0FBUzt1QkFBQyxnQkFBZ0IsRUFBRSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUU7Z0JBSTFDLGFBQWE7c0JBRG5CLFNBQVM7dUJBQUMsZUFBZSxFQUFFLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRTtnQkFJekMsT0FBTztzQkFEYixTQUFTO3VCQUFDLFNBQVMsRUFBRSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUU7Z0JBSW5DLDZCQUE2QjtzQkFEbkMsZUFBZTt1QkFBQywrQkFBK0I7Z0JBcUd6QyxTQUFTO3NCQURmLFlBQVk7dUJBQUMsU0FBUyxFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgQ29udGVudENoaWxkLFxuICBDb250ZW50Q2hpbGRyZW4sXG4gIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgSG9zdEJpbmRpbmcsXG4gIEhvc3RMaXN0ZW5lcixcbiAgSW5wdXQsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBPdXRwdXQsXG4gIFF1ZXJ5TGlzdCxcbiAgVGVtcGxhdGVSZWYsXG4gIFZpZXdDaGlsZCxcbiAgVmlld0VuY2Fwc3VsYXRpb24sXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgc2t5QW5pbWF0aW9uU2xpZGUgfSBmcm9tICdAc2t5dXgvYW5pbWF0aW9ucyc7XG5pbXBvcnQgeyBTa3lDaGVja2JveENoYW5nZSB9IGZyb20gJ0Bza3l1eC9mb3Jtcyc7XG5pbXBvcnQgeyBTa3lMaWJSZXNvdXJjZXNTZXJ2aWNlIH0gZnJvbSAnQHNreXV4L2kxOG4nO1xuaW1wb3J0IHtcbiAgU2t5SW5saW5lRm9ybUNsb3NlQXJncyxcbiAgU2t5SW5saW5lRm9ybUNvbmZpZyxcbn0gZnJvbSAnQHNreXV4L2lubGluZS1mb3JtJztcblxuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgU3ViamVjdCwgZm9ya0pvaW4gYXMgb2JzZXJ2YWJsZUZvcmtKb2luIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7IFNreVJlcGVhdGVyQWRhcHRlclNlcnZpY2UgfSBmcm9tICcuL3JlcGVhdGVyLWFkYXB0ZXIuc2VydmljZSc7XG5pbXBvcnQgeyBTa3lSZXBlYXRlckl0ZW1Db250ZW50Q29tcG9uZW50IH0gZnJvbSAnLi9yZXBlYXRlci1pdGVtLWNvbnRlbnQuY29tcG9uZW50JztcbmltcG9ydCB7IFNreVJlcGVhdGVySXRlbUNvbnRleHRNZW51Q29tcG9uZW50IH0gZnJvbSAnLi9yZXBlYXRlci1pdGVtLWNvbnRleHQtbWVudS5jb21wb25lbnQnO1xuaW1wb3J0IHsgU2t5UmVwZWF0ZXJJdGVtUm9sZXNUeXBlIH0gZnJvbSAnLi9yZXBlYXRlci1pdGVtLXJvbGVzLnR5cGUnO1xuaW1wb3J0IHsgU2t5UmVwZWF0ZXJTZXJ2aWNlIH0gZnJvbSAnLi9yZXBlYXRlci5zZXJ2aWNlJztcblxubGV0IG5leHRDb250ZW50SWQgPSAwO1xuXG4vKipcbiAqIENyZWF0ZXMgYW4gaW5kaXZpZHVhbCByZXBlYXRlciBpdGVtLlxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdza3ktcmVwZWF0ZXItaXRlbScsXG4gIHN0eWxlVXJsczogWycuL3JlcGVhdGVyLWl0ZW0uY29tcG9uZW50LnNjc3MnXSxcbiAgdGVtcGxhdGVVcmw6ICcuL3JlcGVhdGVyLWl0ZW0uY29tcG9uZW50Lmh0bWwnLFxuICBhbmltYXRpb25zOiBbc2t5QW5pbWF0aW9uU2xpZGVdLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxufSlcbmV4cG9ydCBjbGFzcyBTa3lSZXBlYXRlckl0ZW1Db21wb25lbnRcbiAgaW1wbGVtZW50cyBPbkRlc3Ryb3ksIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdFxue1xuICAvKipcbiAgICogTWFrZSB0aGUgZmlyc3QsIG5vbi1kaXNhYmxlZCBpdGVtIHRhYi1mb2N1c2FibGUuXG4gICAqIC0gRGlzYWJsZWQgaXRlbXMgc2hvdWxkIG5vdCBiZSBmb2N1c2FibGUgcGVyIFtXM0NdKGh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS1wcmFjdGljZXMtMS4xLyNrYmRfZGlzYWJsZWRfY29udHJvbHMpLlxuICAgKiAtIE9uZSBpdGVtIHBlciBsaXN0L2dyaWQvbGlzdGJveCBzaG91bGQgYmUgdGFiIGZvY3VzYWJsZSBwZXIgW1czQ10oaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLXByYWN0aWNlcy0xLjEvI2dyaWQpLlxuICAgKi9cbiAgcHVibGljIGdldCB0YWJpbmRleCgpOiAwIHwgLTEge1xuICAgIHJldHVybiB0aGlzLiNyZXBlYXRlclNlcnZpY2UuaXRlbXMuZmlsdGVyKChpdGVtKSA9PiAhaXRlbS5kaXNhYmxlZClbMF0gPT09XG4gICAgICB0aGlzXG4gICAgICA/IDBcbiAgICAgIDogLTE7XG4gIH1cblxuICAvKipcbiAgICogV2hldGhlciB0byBleGNsdWRlIGFuIGl0ZW0gd2hlbiBjeWNsaW5nIHRocm91Z2guXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IGRpc2FibGVkKHZhbHVlOiBib29sZWFuIHwgdW5kZWZpbmVkKSB7XG4gICAgaWYgKHRoaXMuI19pc0Rpc2FibGVkICE9PSB2YWx1ZSkge1xuICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgIHRoaXMuaXNTZWxlY3RlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLiNfaXNEaXNhYmxlZCA9IHRydWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLiNfaXNEaXNhYmxlZCA9IGZhbHNlO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuaXNBY3RpdmUpIHtcbiAgICAgICAgdGhpcy4jcmVwZWF0ZXJTZXJ2aWNlLmFjdGl2YXRlSXRlbUJ5SW5kZXgodW5kZWZpbmVkKTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLiNlbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQubWF0Y2hlcygnOmZvY3VzLXdpdGhpbicpKSB7XG4gICAgICAgIHRoaXMuI2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5vd25lckRvY3VtZW50LmFjdGl2ZUVsZW1lbnQuYmx1cigpO1xuICAgICAgfVxuICAgICAgdGhpcy4jY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuICB9XG4gIHB1YmxpYyBnZXQgZGlzYWJsZWQoKTogYm9vbGVhbiB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuI19pc0Rpc2FibGVkO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBodW1hbi1yZWFkYWJsZSBuYW1lIGZvciB0aGUgcmVwZWF0ZXIgaXRlbSB0aGF0IGlzIGF2YWlsYWJsZSBmb3IgbXVsdGlwbGUgcHVycG9zZXMsXG4gICAqIHN1Y2ggYXMgYWNjZXNzaWJpbGl0eSBhbmQgaW5zdHJ1bWVudGF0aW9uLiBGb3IgZXhhbXBsZSwgdGhlIGNvbXBvbmVudCB1c2VzIHRoZSBuYW1lIHRvXG4gICAqIGNvbnN0cnVjdCBBUklBIGxhYmVscyBmb3IgdGhlIHJlcGVhdGVyIGl0ZW0gY29udHJvbHNcbiAgICogdG8gW3N1cHBvcnQgYWNjZXNzaWJpbGl0eV0oaHR0cHM6Ly9kZXZlbG9wZXIuYmxhY2tiYXVkLmNvbS9za3l1eC9sZWFybi9hY2Nlc3NpYmlsaXR5KS5cbiAgICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGBhcmlhLWxhYmVsYCBhdHRyaWJ1dGUsIHNlZSB0aGUgW1dBSS1BUklBIGRlZmluaXRpb25dKGh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS8jYXJpYS1sYWJlbCkuXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgaXRlbU5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogQ29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0aGUgYnV0dG9ucyB0byBkaXNwbGF5IG9uIGFuIGlubGluZSBmb3JtXG4gICAqIHdpdGhpbiB0aGUgcmVwZWF0ZXIuIFRoaXMgcHJvcGVydHkgYWNjZXB0c1xuICAgKiBbYSBgU2t5SW5saW5lRm9ybUNvbmZpZ2Agb2JqZWN0XShodHRwczovL2RldmVsb3Blci5ibGFja2JhdWQuY29tL3NreXV4L2NvbXBvbmVudHMvaW5saW5lLWZvcm0jc2t5aW5saW5lZm9ybWNvbmZpZy1wcm9wZXJ0aWVzKS5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBpbmxpbmVGb3JtQ29uZmlnOiBTa3lJbmxpbmVGb3JtQ29uZmlnIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBTcGVjaWZpZXMgW2FuIEFuZ3VsYXIgYFRlbXBsYXRlUmVmYF0oaHR0cHM6Ly9hbmd1bGFyLmlvL2FwaS9jb3JlL1RlbXBsYXRlUmVmKSB0byB1c2VcbiAgICogYXMgYSB0ZW1wbGF0ZSB0byBpbnN0YW50aWF0ZSBhbiBpbmxpbmUgZm9ybSB3aXRoaW4gdGhlIHJlcGVhdGVyLlxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIGlubGluZUZvcm1UZW1wbGF0ZTogVGVtcGxhdGVSZWY8dW5rbm93bj4gfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIHJlcGVhdGVyIGl0ZW0gaXMgZXhwYW5kZWQuXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgaXNFeHBhbmRlZCh2YWx1ZTogYm9vbGVhbiB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMudXBkYXRlRm9yRXhwYW5kZWQodmFsdWUgIT09IGZhbHNlKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgaXNFeHBhbmRlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy4jaXNFeHBhbmRlZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSByZXBlYXRlciBpdGVtJ3MgY2hlY2tib3ggaXMgc2VsZWN0ZWQuXG4gICAqIFdoZW4gdXNlcnMgc2VsZWN0IHRoZSByZXBlYXRlciBpdGVtLCB0aGUgc3BlY2lmaWVkIHByb3BlcnR5IG9uIHlvdXIgbW9kZWwgaXMgdXBkYXRlZCBhY2NvcmRpbmdseS5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgaXNTZWxlY3RlZCh2YWx1ZTogYm9vbGVhbiB8IHVuZGVmaW5lZCkge1xuICAgIGlmICghdGhpcy5kaXNhYmxlZCAmJiB2YWx1ZSAhPT0gdGhpcy4jX2lzU2VsZWN0ZWQpIHtcbiAgICAgIHRoaXMuI19pc1NlbGVjdGVkID0gdmFsdWU7XG4gICAgICB0aGlzLmlzU2VsZWN0ZWRDaGFuZ2UuZW1pdCh0aGlzLiNfaXNTZWxlY3RlZCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGdldCBpc1NlbGVjdGVkKCk6IGJvb2xlYW4gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLiNfaXNTZWxlY3RlZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHVzZXJzIGNhbiBjaGFuZ2UgdGhlIG9yZGVyIG9mIHRoZSByZXBlYXRlciBpdGVtLlxuICAgKiBUaGUgcmVwZWF0ZXIgY29tcG9uZW50J3MgYHJlb3JkZXJhYmxlYCBwcm9wZXJ0eSBtdXN0IGFsc28gYmUgc2V0IHRvIGB0cnVlYC5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyByZW9yZGVyYWJsZTogYm9vbGVhbiB8IHVuZGVmaW5lZCA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIGRpc3BsYXkgYSBjaGVja2JveCBpbiB0aGUgbGVmdCBvZiB0aGUgcmVwZWF0ZXIgaXRlbS5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZWxlY3RhYmxlOiBib29sZWFuIHwgdW5kZWZpbmVkID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gZGlzcGxheSBhbiBpbmxpbmUgZm9ybSB3aXRoaW4gdGhlIHJlcGVhdGVyLlxuICAgKiBVc2VycyBjYW4gdG9nZ2xlIGJldHdlZW4gZGlzcGxheWluZyBhbmQgaGlkaW5nIHRoZSBpbmxpbmUgZm9ybS5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzaG93SW5saW5lRm9ybTogYm9vbGVhbiB8IHVuZGVmaW5lZCA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBUaGUgb2JqZWN0IHRoYXQgdGhlIHJlcGVhdGVyIGNvbXBvbmVudCByZXR1cm5zIGZvciB0aGlzIHJlcGVhdGVyIGl0ZW1cbiAgICogd2hlbiB0aGUgYG9yZGVyQ2hhbmdlYCBldmVudCBmaXJlcy4gVGhpcyBpcyByZXF1aXJlZFxuICAgKiBpZiB5b3Ugc2V0IHRoZSBgcmVvcmRlcmFibGVgIHByb3BlcnR5IHRvIGB0cnVlYC5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyB0YWc6IGFueTtcblxuICAvKipcbiAgICogRmlyZXMgd2hlbiB1c2VycyBjb2xsYXBzZSB0aGUgcmVwZWF0ZXIgaXRlbS5cbiAgICovXG4gIEBPdXRwdXQoKVxuICBwdWJsaWMgY29sbGFwc2UgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgLyoqXG4gICAqIEZpcmVzIHdoZW4gdXNlcnMgZXhwYW5kIHRoZSByZXBlYXRlciBpdGVtLlxuICAgKi9cbiAgQE91dHB1dCgpXG4gIHB1YmxpYyBleHBhbmQgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgLyoqXG4gICAqIEZpcmVzIHdoZW4gdGhlIHJlcGVhdGVyIGluY2x1ZGVzIGFuIGlubGluZSBmb3JtIGFuZCB1c2VycyBjbG9zZSBpdC4gVGhpcyBldmVudCBlbWl0c1xuICAgKiBbYSBgU2t5SW5saW5lRm9ybUNsb3NlQXJnc2AgdHlwZV0oaHR0cHM6Ly9kZXZlbG9wZXIuYmxhY2tiYXVkLmNvbS9za3l1eC9jb21wb25lbnRzL2lubGluZS1mb3JtI3NreWlubGluZWZvcm1jbG9zZWFyZ3MtcHJvcGVydGllcykuXG4gICAqL1xuICBAT3V0cHV0KClcbiAgcHVibGljIGlubGluZUZvcm1DbG9zZSA9IG5ldyBFdmVudEVtaXR0ZXI8U2t5SW5saW5lRm9ybUNsb3NlQXJncz4oKTtcblxuICAvKipcbiAgICogRmlyZXMgd2hlbiB1c2VycyBzZWxlY3Qgb3IgY2xlYXIgdGhlIGNoZWNrYm94IGZvciB0aGUgcmVwZWF0ZXIgaXRlbS5cbiAgICovXG4gIEBPdXRwdXQoKVxuICBwdWJsaWMgaXNTZWxlY3RlZENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcblxuICBAQ29udGVudENoaWxkKFNreVJlcGVhdGVySXRlbUNvbnRleHRNZW51Q29tcG9uZW50LCB7IHJlYWQ6IEVsZW1lbnRSZWYgfSlcbiAgcHVibGljIGNvbnRleHRNZW51OiBFbGVtZW50UmVmIHwgdW5kZWZpbmVkO1xuXG4gIHB1YmxpYyBjb250ZW50SWQ6IHN0cmluZztcblxuICBwdWJsaWMgaGFzSXRlbUNvbnRlbnQgPSBmYWxzZTtcblxuICBwdWJsaWMgaXNBY3RpdmUgPSBmYWxzZTtcblxuICBwdWJsaWMgc2V0IGlzQ29sbGFwc2libGUodmFsdWU6IGJvb2xlYW4gfCB1bmRlZmluZWQpIHtcbiAgICBpZiAodGhpcy5pc0NvbGxhcHNpYmxlICE9PSB2YWx1ZSkge1xuICAgICAgdGhpcy4jX2lzQ29sbGFwc2libGUgPSB2YWx1ZSAhPT0gZmFsc2U7XG5cbiAgICAgIC8qaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICAgIGlmICghdGhpcy4jX2lzQ29sbGFwc2libGUpIHtcbiAgICAgICAgdGhpcy51cGRhdGVGb3JFeHBhbmRlZCh0cnVlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLiNjaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgaXNDb2xsYXBzaWJsZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy4jX2lzQ29sbGFwc2libGU7XG4gIH1cblxuICBwdWJsaWMgaXRlbVJvbGUkOiBPYnNlcnZhYmxlPFNreVJlcGVhdGVySXRlbVJvbGVzVHlwZT47XG5cbiAgcHVibGljIHJlb3JkZXJCdXR0b25MYWJlbCA9ICcnO1xuXG4gIHB1YmxpYyByZW9yZGVyU3RhdGU6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICBwdWJsaWMgc2xpZGVEaXJlY3Rpb246IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICBASG9zdEJpbmRpbmcoJ2NsYXNzJylcbiAgZ2V0IHJlcGVhdGVyR3JvdXBDbGFzcygpOiBzdHJpbmcge1xuICAgIHJldHVybiAnc2t5LXJlcGVhdGVyLWl0ZW0tZ3JvdXAtJyArIHRoaXMuI3JlcGVhdGVyU2VydmljZS5yZXBlYXRlckdyb3VwSWQ7XG4gIH1cblxuICBAVmlld0NoaWxkKCdncmFiSGFuZGxlJywgeyByZWFkOiBFbGVtZW50UmVmIH0pXG4gIHB1YmxpYyBncmFiSGFuZGxlOiBFbGVtZW50UmVmIHwgdW5kZWZpbmVkO1xuXG4gIEBWaWV3Q2hpbGQoJ2l0ZW1Db250ZW50UmVmJywgeyByZWFkOiBFbGVtZW50UmVmIH0pXG4gIHB1YmxpYyBpdGVtQ29udGVudFJlZjogRWxlbWVudFJlZiB8IHVuZGVmaW5lZDtcblxuICBAVmlld0NoaWxkKCdpdGVtSGVhZGVyUmVmJywgeyByZWFkOiBFbGVtZW50UmVmIH0pXG4gIHB1YmxpYyBpdGVtSGVhZGVyUmVmOiBFbGVtZW50UmVmIHwgdW5kZWZpbmVkO1xuXG4gIEBWaWV3Q2hpbGQoJ2l0ZW1SZWYnLCB7IHJlYWQ6IEVsZW1lbnRSZWYgfSlcbiAgcHVibGljIGl0ZW1SZWY6IEVsZW1lbnRSZWYgfCB1bmRlZmluZWQ7XG5cbiAgQENvbnRlbnRDaGlsZHJlbihTa3lSZXBlYXRlckl0ZW1Db250ZW50Q29tcG9uZW50KVxuICBwdWJsaWMgcmVwZWF0ZXJJdGVtQ29udGVudENvbXBvbmVudHM6XG4gICAgfCBRdWVyeUxpc3Q8U2t5UmVwZWF0ZXJJdGVtQ29udGVudENvbXBvbmVudD5cbiAgICB8IHVuZGVmaW5lZDtcblxuICAjYWRhcHRlclNlcnZpY2U6IFNreVJlcGVhdGVyQWRhcHRlclNlcnZpY2U7XG4gICNjaGFuZ2VEZXRlY3RvcjogQ2hhbmdlRGV0ZWN0b3JSZWY7XG4gICNlbGVtZW50UmVmOiBFbGVtZW50UmVmO1xuICAjaXNFeHBhbmRlZCA9IHRydWU7XG4gICNrZXlib2FyZFJlb3JkZXJpbmdFbmFibGVkID0gZmFsc2U7XG4gICNuZ1Vuc3Vic2NyaWJlID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcbiAgI3Jlb3JkZXJDYW5jZWxUZXh0ID0gJyc7XG4gICNyZW9yZGVyQ3VycmVudEluZGV4ID0gLTE7XG4gICNyZW9yZGVyRmluaXNoVGV4dCA9ICcnO1xuICAjcmVvcmRlckluc3RydWN0aW9ucyA9ICcnO1xuICAjcmVvcmRlck1vdmVkVGV4dCA9ICcnO1xuICAjcmVvcmRlclN0YXRlRGVzY3JpcHRpb24gPSAnJztcbiAgI3Jlb3JkZXJTdGVwcyA9IDA7XG4gICNyZXBlYXRlclNlcnZpY2U6IFNreVJlcGVhdGVyU2VydmljZTtcbiAgI3Jlc291cmNlU2VydmljZTogU2t5TGliUmVzb3VyY2VzU2VydmljZTtcbiAgI19pc0NvbGxhcHNpYmxlID0gdHJ1ZTtcbiAgI19pc0Rpc2FibGVkOiBib29sZWFuIHwgdW5kZWZpbmVkID0gZmFsc2U7XG4gICNfaXNTZWxlY3RlZDogYm9vbGVhbiB8IHVuZGVmaW5lZDtcblxuICBjb25zdHJ1Y3RvcihcbiAgICByZXBlYXRlclNlcnZpY2U6IFNreVJlcGVhdGVyU2VydmljZSxcbiAgICBjaGFuZ2VEZXRlY3RvcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgYWRhcHRlclNlcnZpY2U6IFNreVJlcGVhdGVyQWRhcHRlclNlcnZpY2UsXG4gICAgZWxlbWVudFJlZjogRWxlbWVudFJlZixcbiAgICByZXNvdXJjZVNlcnZpY2U6IFNreUxpYlJlc291cmNlc1NlcnZpY2VcbiAgKSB7XG4gICAgdGhpcy4jcmVwZWF0ZXJTZXJ2aWNlID0gcmVwZWF0ZXJTZXJ2aWNlO1xuICAgIHRoaXMuI2NoYW5nZURldGVjdG9yID0gY2hhbmdlRGV0ZWN0b3I7XG4gICAgdGhpcy4jYWRhcHRlclNlcnZpY2UgPSBhZGFwdGVyU2VydmljZTtcbiAgICB0aGlzLiNlbGVtZW50UmVmID0gZWxlbWVudFJlZjtcbiAgICB0aGlzLiNyZXNvdXJjZVNlcnZpY2UgPSByZXNvdXJjZVNlcnZpY2U7XG5cbiAgICB0aGlzLiNzbGlkZUZvckV4cGFuZGVkKCk7XG5cbiAgICBvYnNlcnZhYmxlRm9ya0pvaW4oW1xuICAgICAgdGhpcy4jcmVzb3VyY2VTZXJ2aWNlLmdldFN0cmluZygnc2t5dXhfcmVwZWF0ZXJfaXRlbV9yZW9yZGVyX2NhbmNlbCcpLFxuICAgICAgdGhpcy4jcmVzb3VyY2VTZXJ2aWNlLmdldFN0cmluZygnc2t5dXhfcmVwZWF0ZXJfaXRlbV9yZW9yZGVyX2ZpbmlzaCcpLFxuICAgICAgdGhpcy4jcmVzb3VyY2VTZXJ2aWNlLmdldFN0cmluZyhcbiAgICAgICAgJ3NreXV4X3JlcGVhdGVyX2l0ZW1fcmVvcmRlcl9pbnN0cnVjdGlvbnMnXG4gICAgICApLFxuICAgICAgdGhpcy4jcmVzb3VyY2VTZXJ2aWNlLmdldFN0cmluZygnc2t5dXhfcmVwZWF0ZXJfaXRlbV9yZW9yZGVyX29wZXJhdGlvbicpLFxuICAgICAgdGhpcy4jcmVzb3VyY2VTZXJ2aWNlLmdldFN0cmluZygnc2t5dXhfcmVwZWF0ZXJfaXRlbV9yZW9yZGVyX21vdmVkJyksXG4gICAgXSlcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLiNuZ1Vuc3Vic2NyaWJlKSlcbiAgICAgIC5zdWJzY3JpYmUoXG4gICAgICAgIChbXG4gICAgICAgICAgcmVvcmRlckNhbmNlbFRleHQsXG4gICAgICAgICAgcmVvcmRlckZpbmlzaFRleHQsXG4gICAgICAgICAgcmVvcmRlckluc3RydWN0aW9uc1RleHQsXG4gICAgICAgICAgcmVvcmRlck9wZXJhdGlvblRleHQsXG4gICAgICAgICAgcmVvcmRlck1vdmVkVGV4dCxcbiAgICAgICAgXSkgPT4ge1xuICAgICAgICAgIHRoaXMuI3Jlb3JkZXJDYW5jZWxUZXh0ID0gcmVvcmRlckNhbmNlbFRleHQ7XG4gICAgICAgICAgdGhpcy4jcmVvcmRlckZpbmlzaFRleHQgPSByZW9yZGVyRmluaXNoVGV4dDtcbiAgICAgICAgICB0aGlzLiNyZW9yZGVyU3RhdGVEZXNjcmlwdGlvbiA9IHJlb3JkZXJJbnN0cnVjdGlvbnNUZXh0O1xuICAgICAgICAgIHRoaXMuI3Jlb3JkZXJJbnN0cnVjdGlvbnMgPSByZW9yZGVyT3BlcmF0aW9uVGV4dDtcbiAgICAgICAgICB0aGlzLiNyZW9yZGVyTW92ZWRUZXh0ID0gcmVvcmRlck1vdmVkVGV4dDtcbiAgICAgICAgICB0aGlzLnJlb3JkZXJCdXR0b25MYWJlbCA9IHRoaXMuI3Jlb3JkZXJJbnN0cnVjdGlvbnM7XG4gICAgICAgIH1cbiAgICAgICk7XG5cbiAgICB0aGlzLmNvbnRlbnRJZCA9IGBza3ktcmVwZWF0ZXItaXRlbS1jb250ZW50LSR7KytuZXh0Q29udGVudElkfWA7XG4gICAgdGhpcy5pdGVtUm9sZSQgPSB0aGlzLiNyZXBlYXRlclNlcnZpY2UuaXRlbVJvbGUuYXNPYnNlcnZhYmxlKCk7XG4gIH1cblxuICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy4jcmVwZWF0ZXJTZXJ2aWNlLnJlZ2lzdGVySXRlbSh0aGlzKTtcbiAgICB0aGlzLiNyZXBlYXRlclNlcnZpY2UuYWN0aXZlSXRlbUNoYW5nZVxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuI25nVW5zdWJzY3JpYmUpKVxuICAgICAgLnN1YnNjcmliZSgoaXRlbSkgPT4ge1xuICAgICAgICBjb25zdCBuZXdJc0FjdGl2ZVZhbHVlID0gdGhpcyA9PT0gaXRlbTtcbiAgICAgICAgaWYgKG5ld0lzQWN0aXZlVmFsdWUgIT09IHRoaXMuaXNBY3RpdmUpIHtcbiAgICAgICAgICB0aGlzLmlzQWN0aXZlID0gbmV3SXNBY3RpdmVWYWx1ZTtcbiAgICAgICAgICB0aGlzLiNjaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gIH1cblxuICBwdWJsaWMgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIHRoaXMuaGFzSXRlbUNvbnRlbnQgPSAhIXRoaXMucmVwZWF0ZXJJdGVtQ29udGVudENvbXBvbmVudHM/Lmxlbmd0aDtcbiAgICB0aGlzLiN1cGRhdGVFeHBhbmRPbkNvbnRlbnRDaGFuZ2UoKTtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLmNvbGxhcHNlLmNvbXBsZXRlKCk7XG4gICAgdGhpcy5leHBhbmQuY29tcGxldGUoKTtcbiAgICB0aGlzLmlubGluZUZvcm1DbG9zZS5jb21wbGV0ZSgpO1xuICAgIHRoaXMuaXNTZWxlY3RlZENoYW5nZS5jb21wbGV0ZSgpO1xuXG4gICAgdGhpcy4jbmdVbnN1YnNjcmliZS5uZXh0KCk7XG4gICAgdGhpcy4jbmdVbnN1YnNjcmliZS5jb21wbGV0ZSgpO1xuXG4gICAgdGhpcy4jcmVwZWF0ZXJTZXJ2aWNlLnVucmVnaXN0ZXJJdGVtKHRoaXMpO1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcigna2V5ZG93bicsIFsnJGV2ZW50J10pXG4gIHB1YmxpYyBvbktleWRvd24oJGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgaWYgKFxuICAgICAgWycgJywgJ0VudGVyJywgJ0hvbWUnLCAnRW5kJywgJ0Fycm93VXAnLCAnQXJyb3dEb3duJ10uaW5jbHVkZXMoJGV2ZW50LmtleSlcbiAgICApIHtcbiAgICAgIGlmIChcbiAgICAgICAgKCRldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQpLm1hdGNoZXMoXG4gICAgICAgICAgJ2lucHV0LCB0ZXh0YXJlYSwgc2VsZWN0LCBvcHRpb24sIFtjb250ZW50ZWRpdGFibGVdLCBbY29udGVudGVkaXRhYmxlXSAqJ1xuICAgICAgICApXG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgJGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICBsZXQgYWN0aXZhdGVJdGVtOiBTa3lSZXBlYXRlckl0ZW1Db21wb25lbnQgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgaWYgKFsnICcsICdFbnRlciddLmluY2x1ZGVzKCRldmVudC5rZXkpKSB7XG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGFibGUpIHtcbiAgICAgICAgICB0aGlzLmlzU2VsZWN0ZWQgPSAhdGhpcy5pc1NlbGVjdGVkO1xuICAgICAgICB9XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdGhpcy1hbGlhc1xuICAgICAgICBhY3RpdmF0ZUl0ZW0gPSB0aGlzO1xuICAgICAgfVxuICAgICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICAgIGlmIChbJ0hvbWUnLCAnRW5kJ10uaW5jbHVkZXMoJGV2ZW50LmtleSkpIHtcbiAgICAgICAgY29uc3QgaXRlbXMgPSB0aGlzLiNyZXBlYXRlclNlcnZpY2UuaXRlbXMuZmlsdGVyKFxuICAgICAgICAgIChpdGVtKSA9PiAhaXRlbS5kaXNhYmxlZFxuICAgICAgICApO1xuICAgICAgICBpZiAoJGV2ZW50LmtleSA9PT0gJ0hvbWUnKSB7XG4gICAgICAgICAgYWN0aXZhdGVJdGVtID0gaXRlbXMuc2hpZnQoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBhY3RpdmF0ZUl0ZW0gPSBpdGVtcy5wb3AoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICAgIGlmIChbJ0Fycm93VXAnLCAnQXJyb3dEb3duJ10uaW5jbHVkZXMoJGV2ZW50LmtleSkpIHtcbiAgICAgICAgY29uc3QgY3VycmVudEluZGV4ID0gdGhpcy4jcmVwZWF0ZXJTZXJ2aWNlLml0ZW1zLmZpbmRJbmRleChcbiAgICAgICAgICAoaXRlbSkgPT4gaXRlbSA9PT0gdGhpc1xuICAgICAgICApO1xuICAgICAgICBsZXQgc2xpY2VGcm9tOiBudW1iZXI7XG4gICAgICAgIGxldCBzbGljZVRvOiBudW1iZXIgfCB1bmRlZmluZWQ7XG4gICAgICAgIGlmICgkZXZlbnQua2V5ID09PSAnQXJyb3dVcCcpIHtcbiAgICAgICAgICBzbGljZUZyb20gPSAwO1xuICAgICAgICAgIHNsaWNlVG8gPSBjdXJyZW50SW5kZXg7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc2xpY2VGcm9tID0gY3VycmVudEluZGV4ICsgMTtcbiAgICAgICAgICBzbGljZVRvID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGl0ZW1zID0gdGhpcy4jcmVwZWF0ZXJTZXJ2aWNlLml0ZW1zXG4gICAgICAgICAgLnNsaWNlKHNsaWNlRnJvbSwgc2xpY2VUbylcbiAgICAgICAgICAuZmlsdGVyKChpdGVtKSA9PiAhaXRlbS5kaXNhYmxlZCk7XG4gICAgICAgIGFjdGl2YXRlSXRlbSA9ICRldmVudC5rZXkgPT09ICdBcnJvd1VwJyA/IGl0ZW1zLnBvcCgpIDogaXRlbXMuc2hpZnQoKTtcbiAgICAgICAgaWYgKCFhY3RpdmF0ZUl0ZW0pIHtcbiAgICAgICAgICAvLyBXcmFwIGFyb3VuZC5cbiAgICAgICAgICBpZiAoJGV2ZW50LmtleSA9PT0gJ0Fycm93RG93bicpIHtcbiAgICAgICAgICAgIHNsaWNlRnJvbSA9IDA7XG4gICAgICAgICAgICBzbGljZVRvID0gY3VycmVudEluZGV4O1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzbGljZUZyb20gPSBjdXJyZW50SW5kZXggKyAxO1xuICAgICAgICAgICAgc2xpY2VUbyA9IHVuZGVmaW5lZDtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3QgaXRlbXMgPSB0aGlzLiNyZXBlYXRlclNlcnZpY2UuaXRlbXNcbiAgICAgICAgICAgIC5zbGljZShzbGljZUZyb20sIHNsaWNlVG8pXG4gICAgICAgICAgICAuZmlsdGVyKChpdGVtKSA9PiAhaXRlbS5kaXNhYmxlZCk7XG4gICAgICAgICAgYWN0aXZhdGVJdGVtID0gJGV2ZW50LmtleSA9PT0gJ0Fycm93VXAnID8gaXRlbXMucG9wKCkgOiBpdGVtcy5zaGlmdCgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgaWYgKGFjdGl2YXRlSXRlbSAmJiAhYWN0aXZhdGVJdGVtLmlzQWN0aXZlKSB7XG4gICAgICAgIHRoaXMuI3JlcGVhdGVyU2VydmljZS5hY3RpdmF0ZUl0ZW0oYWN0aXZhdGVJdGVtKTtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICEoYWN0aXZhdGVJdGVtLiNlbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQgYXMgRWxlbWVudCkubWF0Y2hlcyhcbiAgICAgICAgICAgICc6Zm9jdXMtd2l0aGluJ1xuICAgICAgICAgIClcbiAgICAgICAgKSB7XG4gICAgICAgICAgYWN0aXZhdGVJdGVtLml0ZW1SZWY/Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBoZWFkZXJDbGljaygpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pc0NvbGxhcHNpYmxlKSB7XG4gICAgICB0aGlzLnVwZGF0ZUZvckV4cGFuZGVkKCF0aGlzLmlzRXhwYW5kZWQpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBjaGV2cm9uRGlyZWN0aW9uQ2hhbmdlKGRpcmVjdGlvbjogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy51cGRhdGVGb3JFeHBhbmRlZChkaXJlY3Rpb24gPT09ICd1cCcpO1xuICB9XG5cbiAgcHVibGljIG9uUmVwZWF0ZXJJdGVtQ2xpY2soZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICAvLyBPbmx5IGFjdGl2YXRlIGl0ZW0gaWYgY2xpY2tpbmcgb24gdGhlIHRpdGxlLCBjb250ZW50LCBvciBwYXJlbnQgaXRlbSBkaXYuXG4gICAgLy8gVGhpcyB3aWxsIGF2b2lkIGFjY2lkZW50YWwgYWN0aXZhdGlvbnMgd2hlbiBjbGlja2luZyBpbnNpZGUgaW50ZXJhY3RpdmUgZWxlbWVudHMgbGlrZVxuICAgIC8vIHRoZSBleHBhbmQvY29sbGFwc2UgY2hldnJvbiwgZHJvcGRvd24sIGlubGluZS1kZWxldGUsIGV0Yy4uLlxuICAgIGlmIChcbiAgICAgIGV2ZW50LnRhcmdldCA9PT0gdGhpcy5pdGVtUmVmPy5uYXRpdmVFbGVtZW50IHx8XG4gICAgICB0aGlzLml0ZW1Db250ZW50UmVmPy5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKGV2ZW50LnRhcmdldCkgfHxcbiAgICAgIHRoaXMuaXRlbUhlYWRlclJlZj8ubmF0aXZlRWxlbWVudC5jb250YWlucyhldmVudC50YXJnZXQpXG4gICAgKSB7XG4gICAgICB0aGlzLiNyZXBlYXRlclNlcnZpY2UuYWN0aXZhdGVJdGVtKHRoaXMpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyB1cGRhdGVGb3JFeHBhbmRlZCh2YWx1ZTogYm9vbGVhbik6IHZvaWQge1xuICAgIGlmICh0aGlzLmlzQ29sbGFwc2libGUgPT09IGZhbHNlICYmIHZhbHVlID09PSBmYWxzZSkge1xuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICBgU2V0dGluZyBpc0V4cGFuZGVkIHRvIGZhbHNlIHdoZW4gdGhlIHJlcGVhdGVyIGl0ZW0gaXMgbm90IGNvbGxhcHNpYmxlXG4gICAgICAgIHdpbGwgaGF2ZSBubyBlZmZlY3QuYFxuICAgICAgKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuI2lzRXhwYW5kZWQgIT09IHZhbHVlKSB7XG4gICAgICB0aGlzLiNpc0V4cGFuZGVkID0gdmFsdWU7XG5cbiAgICAgIGlmICh0aGlzLiNpc0V4cGFuZGVkKSB7XG4gICAgICAgIHRoaXMuZXhwYW5kLmVtaXQoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuY29sbGFwc2UuZW1pdCgpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLiNyZXBlYXRlclNlcnZpY2Uub25JdGVtQ29sbGFwc2VTdGF0ZUNoYW5nZSh0aGlzKTtcbiAgICAgIHRoaXMuI3NsaWRlRm9yRXhwYW5kZWQoKTtcbiAgICAgIHRoaXMuI2NoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBvbkNoZWNrYm94Q2hhbmdlKHZhbHVlOiBTa3lDaGVja2JveENoYW5nZSk6IHZvaWQge1xuICAgIHRoaXMuaXNTZWxlY3RlZCA9IHZhbHVlLmNoZWNrZWQ7XG4gIH1cblxuICBwdWJsaWMgb25JbmxpbmVGb3JtQ2xvc2UoaW5saW5lRm9ybUNsb3NlQXJnczogU2t5SW5saW5lRm9ybUNsb3NlQXJncyk6IHZvaWQge1xuICAgIHRoaXMuaW5saW5lRm9ybUNsb3NlLmVtaXQoaW5saW5lRm9ybUNsb3NlQXJncyk7XG4gIH1cblxuICBwdWJsaWMgbW92ZVRvVG9wKGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIHRoaXMuI2FkYXB0ZXJTZXJ2aWNlLm1vdmVJdGVtVXAodGhpcy4jZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCB0cnVlKTtcbiAgICB0aGlzLiNhZGFwdGVyU2VydmljZS5mb2N1c0VsZW1lbnQoZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50KTtcbiAgICB0aGlzLiNyZXBlYXRlclNlcnZpY2UucmVnaXN0ZXJPcmRlckNoYW5nZSgpO1xuICB9XG5cbiAgcHVibGljIG9uUmVvcmRlckhhbmRsZUtleURvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICAvKmlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgaWYgKGV2ZW50LmtleSkge1xuICAgICAgc3dpdGNoIChldmVudC5rZXkudG9Mb3dlckNhc2UoKSkge1xuICAgICAgICBjYXNlICcgJzpcbiAgICAgICAgY2FzZSAnZW50ZXInOlxuICAgICAgICAgIHRoaXMuI2tleWJvYXJkVG9nZ2xlUmVvcmRlcigpO1xuICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAnZXNjYXBlJzpcbiAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgICAgIGlmICh0aGlzLiNrZXlib2FyZFJlb3JkZXJpbmdFbmFibGVkKSB7XG4gICAgICAgICAgICB0aGlzLiNrZXlib2FyZFJlb3JkZXJpbmdFbmFibGVkID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLiNyZXZlcnRSZW9yZGVyU3RlcHMoKTtcbiAgICAgICAgICAgIHRoaXMucmVvcmRlckJ1dHRvbkxhYmVsID1cbiAgICAgICAgICAgICAgdGhpcy4jcmVvcmRlckNhbmNlbFRleHQgKyAnICcgKyB0aGlzLiNyZW9yZGVySW5zdHJ1Y3Rpb25zO1xuICAgICAgICAgICAgdGhpcy4jYWRhcHRlclNlcnZpY2UuZm9jdXNFbGVtZW50KGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudCk7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgJ2Fycm93dXAnOlxuICAgICAgICAgIGlmICh0aGlzLiNrZXlib2FyZFJlb3JkZXJpbmdFbmFibGVkKSB7XG4gICAgICAgICAgICB0aGlzLiNrZXlib2FyZFJlb3JkZXJVcCgpO1xuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgdGhpcy4jcmVwZWF0ZXJTZXJ2aWNlLnJlZ2lzdGVyT3JkZXJDaGFuZ2UoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAnYXJyb3dkb3duJzpcbiAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgICAgIGlmICh0aGlzLiNrZXlib2FyZFJlb3JkZXJpbmdFbmFibGVkKSB7XG4gICAgICAgICAgICB0aGlzLiNrZXlib2FyZFJlb3JkZXJEb3duKCk7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgICB0aGlzLiNyZXBlYXRlclNlcnZpY2UucmVnaXN0ZXJPcmRlckNoYW5nZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlICdhcnJvd2xlZnQnOlxuICAgICAgICBjYXNlICdhcnJvd3JpZ2h0JzpcbiAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgICAgIGlmICh0aGlzLiNrZXlib2FyZFJlb3JkZXJpbmdFbmFibGVkKSB7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHVibGljIG9uUmVvcmRlckhhbmRsZUJsdXIoZXZlbnQ6IGFueSk6IHZvaWQge1xuICAgIHRoaXMuI2tleWJvYXJkUmVvcmRlcmluZ0VuYWJsZWQgPSBmYWxzZTtcbiAgICB0aGlzLiNyZXZlcnRSZW9yZGVyU3RlcHMoKTtcbiAgICB0aGlzLnJlb3JkZXJCdXR0b25MYWJlbCA9IHRoaXMuI3Jlb3JkZXJJbnN0cnVjdGlvbnM7XG4gICAgdGhpcy5yZW9yZGVyU3RhdGUgPSB1bmRlZmluZWQ7XG4gIH1cblxuICAjc2xpZGVGb3JFeHBhbmRlZCgpOiB2b2lkIHtcbiAgICB0aGlzLnNsaWRlRGlyZWN0aW9uID0gdGhpcy5pc0V4cGFuZGVkID8gJ2Rvd24nIDogJ3VwJztcbiAgfVxuXG4gICNrZXlib2FyZFJlb3JkZXJVcCgpOiB2b2lkIHtcbiAgICBjb25zdCBuZXdJbmRleCA9IHRoaXMuI2FkYXB0ZXJTZXJ2aWNlLm1vdmVJdGVtVXAoXG4gICAgICB0aGlzLiNlbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnRcbiAgICApO1xuICAgIGlmIChuZXdJbmRleCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLiNyZW9yZGVyQ3VycmVudEluZGV4ID0gbmV3SW5kZXg7XG4gICAgICB0aGlzLiNyZW9yZGVyU3RlcHMtLTtcbiAgICAgIHRoaXMuI2FkYXB0ZXJTZXJ2aWNlLmZvY3VzRWxlbWVudCh0aGlzLmdyYWJIYW5kbGUpO1xuICAgICAgdGhpcy4ja2V5Ym9hcmRSZW9yZGVyaW5nRW5hYmxlZCA9IHRydWU7XG4gICAgICB0aGlzLnJlb3JkZXJCdXR0b25MYWJlbCA9IGAke3RoaXMuI3Jlb3JkZXJNb3ZlZFRleHR9ICR7XG4gICAgICAgIHRoaXMuI3Jlb3JkZXJDdXJyZW50SW5kZXggKyAxXG4gICAgICB9YDtcbiAgICB9XG4gIH1cblxuICAja2V5Ym9hcmRSZW9yZGVyRG93bigpOiB2b2lkIHtcbiAgICBjb25zdCBuZXdJbmRleCA9IHRoaXMuI2FkYXB0ZXJTZXJ2aWNlLm1vdmVJdGVtRG93bihcbiAgICAgIHRoaXMuI2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudFxuICAgICk7XG4gICAgaWYgKG5ld0luZGV4KSB7XG4gICAgICB0aGlzLiNyZW9yZGVyQ3VycmVudEluZGV4ID0gbmV3SW5kZXg7XG4gICAgICB0aGlzLiNyZW9yZGVyU3RlcHMrKztcbiAgICAgIHRoaXMuI2FkYXB0ZXJTZXJ2aWNlLmZvY3VzRWxlbWVudCh0aGlzLmdyYWJIYW5kbGUpO1xuICAgICAgdGhpcy4ja2V5Ym9hcmRSZW9yZGVyaW5nRW5hYmxlZCA9IHRydWU7XG4gICAgICB0aGlzLnJlb3JkZXJCdXR0b25MYWJlbCA9IGAke3RoaXMuI3Jlb3JkZXJNb3ZlZFRleHR9ICR7XG4gICAgICAgIHRoaXMuI3Jlb3JkZXJDdXJyZW50SW5kZXggKyAxXG4gICAgICB9YDtcbiAgICB9XG4gIH1cblxuICAja2V5Ym9hcmRUb2dnbGVSZW9yZGVyKCk6IHZvaWQge1xuICAgIHRoaXMuI2tleWJvYXJkUmVvcmRlcmluZ0VuYWJsZWQgPSAhdGhpcy4ja2V5Ym9hcmRSZW9yZGVyaW5nRW5hYmxlZDtcbiAgICB0aGlzLiNyZW9yZGVyU3RlcHMgPSAwO1xuXG4gICAgaWYgKHRoaXMuI2tleWJvYXJkUmVvcmRlcmluZ0VuYWJsZWQpIHtcbiAgICAgIHRoaXMucmVvcmRlclN0YXRlID0gdGhpcy4jcmVvcmRlclN0YXRlRGVzY3JpcHRpb247XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFRPRE86IE5lZWRzIGltcHJvdmVtZW50IHRvIGJlIGxvY2FsaXplZFxuICAgICAgdGhpcy5yZW9yZGVyU3RhdGUgPSBgJHt0aGlzLiNyZW9yZGVyRmluaXNoVGV4dH0gJHtcbiAgICAgICAgdGhpcy4jcmVvcmRlckN1cnJlbnRJbmRleCArIDFcbiAgICAgIH0gJHt0aGlzLiNyZW9yZGVySW5zdHJ1Y3Rpb25zfWA7XG4gICAgICB0aGlzLiNyZW9yZGVyQ3VycmVudEluZGV4ID0gLTE7XG4gICAgfVxuICB9XG5cbiAgI3JldmVydFJlb3JkZXJTdGVwcygpOiB2b2lkIHtcbiAgICBpZiAodGhpcy4jcmVvcmRlclN0ZXBzIDwgMCkge1xuICAgICAgdGhpcy4jYWRhcHRlclNlcnZpY2UubW92ZUl0ZW1Eb3duKFxuICAgICAgICB0aGlzLiNlbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsXG4gICAgICAgIE1hdGguYWJzKHRoaXMuI3Jlb3JkZXJTdGVwcylcbiAgICAgICk7XG4gICAgfSBlbHNlIGlmICh0aGlzLiNyZW9yZGVyU3RlcHMgPiAwKSB7XG4gICAgICB0aGlzLiNhZGFwdGVyU2VydmljZS5tb3ZlSXRlbVVwKFxuICAgICAgICB0aGlzLiNlbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsXG4gICAgICAgIGZhbHNlLFxuICAgICAgICB0aGlzLiNyZW9yZGVyU3RlcHNcbiAgICAgICk7XG4gICAgfVxuICAgIHRoaXMuI3JlcGVhdGVyU2VydmljZS5yZWdpc3Rlck9yZGVyQ2hhbmdlKCk7XG4gIH1cblxuICAjdXBkYXRlRXhwYW5kT25Db250ZW50Q2hhbmdlKCk6IHZvaWQge1xuICAgIHRoaXMucmVwZWF0ZXJJdGVtQ29udGVudENvbXBvbmVudHM/LmNoYW5nZXNcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLiNuZ1Vuc3Vic2NyaWJlKSlcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICB0aGlzLmhhc0l0ZW1Db250ZW50ID0gISF0aGlzLnJlcGVhdGVySXRlbUNvbnRlbnRDb21wb25lbnRzPy5sZW5ndGg7XG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgICAgIHRoaXMuaXNDb2xsYXBzaWJsZSA9XG4gICAgICAgICAgdGhpcy5oYXNJdGVtQ29udGVudCAmJiB0aGlzLiNyZXBlYXRlclNlcnZpY2UuZXhwYW5kTW9kZSAhPT0gJ25vbmUnO1xuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgICBpZiAodGhpcy4jcmVwZWF0ZXJTZXJ2aWNlLmV4cGFuZE1vZGUgPT09ICdzaW5nbGUnKSB7XG4gICAgICAgICAgdGhpcy4jcmVwZWF0ZXJTZXJ2aWNlLm9uSXRlbUNvbGxhcHNlU3RhdGVDaGFuZ2UodGhpcyk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICB9XG59XG4iLCI8ZGl2XG4gIGNsYXNzPVwic2t5LXJlcGVhdGVyLWl0ZW0gc2t5LXBhZGRpbmctZXZlbi1kZWZhdWx0XCJcbiAgW2F0dHIuYXJpYS1sYWJlbF09XCJpdGVtTmFtZVwiXG4gIFthdHRyLmFyaWEtc2VsZWN0ZWRdPVwic2VsZWN0YWJsZSA/ICEhaXNTZWxlY3RlZCA6IHVuZGVmaW5lZFwiXG4gIFthdHRyLnJvbGVdPVwiKGl0ZW1Sb2xlJCB8IGFzeW5jKT8uaXRlbVwiXG4gIFthdHRyLnRhYkluZGV4XT1cInRhYmluZGV4XCJcbiAgW25nQ2xhc3NdPVwie1xuICAgICdza3ktcmVwZWF0ZXItaXRlbS1hY3RpdmUnOiBpc0FjdGl2ZSxcbiAgICAnc2t5LXJlcGVhdGVyLWl0ZW0tY29sbGFwc2libGUnOiBpc0NvbGxhcHNpYmxlLFxuICAgICdza3ktcmVwZWF0ZXItaXRlbS1zZWxlY3RlZCc6IGlzU2VsZWN0ZWRcbiAgfVwiXG4gIChjbGljayk9XCJvblJlcGVhdGVySXRlbUNsaWNrKCRldmVudClcIlxuICAjaXRlbVJlZlxuPlxuICA8ZGl2ICNpbmxpbmVEZWxldGU+XG4gICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwic2t5LWlubGluZS1kZWxldGVcIj48L25nLWNvbnRlbnQ+XG4gIDwvZGl2PlxuXG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCJpbmxpbmVGb3JtVGVtcGxhdGVcIj5cbiAgICA8c2t5LWlubGluZS1mb3JtXG4gICAgICBbY29uZmlnXT1cImlubGluZUZvcm1Db25maWdcIlxuICAgICAgW3Nob3dGb3JtXT1cInNob3dJbmxpbmVGb3JtXCJcbiAgICAgIFt0ZW1wbGF0ZV09XCJpbmxpbmVGb3JtVGVtcGxhdGVcIlxuICAgICAgKGNsb3NlKT1cIm9uSW5saW5lRm9ybUNsb3NlKCRldmVudClcIlxuICAgID5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJza3lSZXBlYXRlckl0ZW1MZWZ0XCI+PC9uZy1jb250YWluZXI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwic2t5UmVwZWF0ZXJJdGVtUmlnaHRcIj48L25nLWNvbnRhaW5lcj5cbiAgICA8L3NreS1pbmxpbmUtZm9ybT5cbiAgPC9uZy1jb250YWluZXI+XG5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFpbmxpbmVGb3JtVGVtcGxhdGVcIj5cbiAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwic2t5UmVwZWF0ZXJJdGVtTGVmdFwiPjwvbmctY29udGFpbmVyPlxuICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJza3lSZXBlYXRlckl0ZW1SaWdodFwiPjwvbmctY29udGFpbmVyPlxuICA8L25nLWNvbnRhaW5lcj5cbjwvZGl2PlxuXG48bmctdGVtcGxhdGUgI3NreVJlcGVhdGVySXRlbUxlZnQ+XG4gIDxkaXZcbiAgICBbYXR0ci5yb2xlXT1cIiFzaG93SW5saW5lRm9ybSA/IChpdGVtUm9sZSQgfCBhc3luYyk/LmNvbnRlbnQgOiB1bmRlZmluZWRcIlxuICAgIGNsYXNzPVwic2t5LXJlcGVhdGVyLWl0ZW0tbGVmdFwiXG4gID5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwicmVvcmRlcmFibGVcIj5cbiAgICAgIDxzcGFuXG4gICAgICAgIGFyaWEtbGl2ZT1cImFzc2VydGl2ZVwiXG4gICAgICAgIGNsYXNzPVwic2t5LXNjcmVlbi1yZWFkZXItb25seVwiXG4gICAgICAgIFtpZF09XCJjb250ZW50SWQgKyAnLXJlb3JkZXItc3RhdGUnXCJcbiAgICAgID5cbiAgICAgICAge3sgcmVvcmRlclN0YXRlIH19XG4gICAgICA8L3NwYW4+XG4gICAgICA8c3BhblxuICAgICAgICBjbGFzcz1cInNreS1zY3JlZW4tcmVhZGVyLW9ubHlcIlxuICAgICAgICBbaWRdPVwiY29udGVudElkICsgJy1yZW9yZGVyLWluc3RydWN0aW9ucydcIlxuICAgICAgICA+e3sgcmVvcmRlckJ1dHRvbkxhYmVsIH19PC9zcGFuXG4gICAgICA+XG4gICAgICA8YnV0dG9uXG4gICAgICAgIGNsYXNzPVwic2t5LWJ0biBza3ktdGlsZS10b29scy1jb250cm9sIHNreS1yZXBlYXRlci1pdGVtLWdyYWItaGFuZGxlXCJcbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIFthdHRyLmFyaWEtZGVzY3JpYmVkYnldPVwiY29udGVudElkICsgJy1yZW9yZGVyLWluc3RydWN0aW9ucydcIlxuICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIlxuICAgICAgICAgIGl0ZW1OYW1lXG4gICAgICAgICAgICA/ICgnc2t5dXhfcmVwZWF0ZXJfaXRlbV9yZW9yZGVyX2xhYmVsJyB8IHNreUxpYlJlc291cmNlcyA6IGl0ZW1OYW1lKVxuICAgICAgICAgICAgOiAoJ3NreXV4X3JlcGVhdGVyX2l0ZW1fcmVvcmRlcl9sYWJlbF9kZWZhdWx0JyB8IHNreUxpYlJlc291cmNlcylcbiAgICAgICAgXCJcbiAgICAgICAgKGJsdXIpPVwib25SZW9yZGVySGFuZGxlQmx1cigkZXZlbnQpXCJcbiAgICAgICAgKGtleWRvd24pPVwib25SZW9yZGVySGFuZGxlS2V5RG93bigkZXZlbnQpXCJcbiAgICAgICAgI2dyYWJIYW5kbGVcbiAgICAgID5cbiAgICAgICAgPHNreS1pY29uIGljb249XCJhcnJvd3MtdlwiPjwvc2t5LWljb24+XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8c2t5LWNoZWNrYm94XG4gICAgICAqbmdJZj1cInNlbGVjdGFibGVcIlxuICAgICAgY2xhc3M9XCJza3ktcmVwZWF0ZXItaXRlbS1jaGVja2JveFwiXG4gICAgICBbY2hlY2tlZF09XCJpc1NlbGVjdGVkXCJcbiAgICAgIFtsYWJlbF09XCJcbiAgICAgICAgaXRlbU5hbWVcbiAgICAgICAgICA/ICgnc2t5dXhfcmVwZWF0ZXJfaXRlbV9jaGVja2JveF9sYWJlbCcgfCBza3lMaWJSZXNvdXJjZXMgOiBpdGVtTmFtZSlcbiAgICAgICAgICA6ICgnc2t5dXhfcmVwZWF0ZXJfaXRlbV9jaGVja2JveF9sYWJlbF9kZWZhdWx0JyB8IHNreUxpYlJlc291cmNlcylcbiAgICAgIFwiXG4gICAgICAoY2hhbmdlKT1cIm9uQ2hlY2tib3hDaGFuZ2UoJGV2ZW50KVwiXG4gICAgPlxuICAgIDwvc2t5LWNoZWNrYm94PlxuICAgIDxkaXZcbiAgICAgIGNsYXNzPVwic2t5LXJlcGVhdGVyLWl0ZW0tY29udGV4dC1tZW51XCJcbiAgICAgIFtoaWRkZW5dPVwiY29udGV4dE1lbnVFbC5jaGlsZHJlbi5sZW5ndGggPT09IDBcIlxuICAgICAgI2NvbnRleHRNZW51RWxcbiAgICA+XG4gICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJza3ktcmVwZWF0ZXItaXRlbS1jb250ZXh0LW1lbnVcIj48L25nLWNvbnRlbnQ+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNza3lSZXBlYXRlckl0ZW1SaWdodD5cbiAgPGRpdiBjbGFzcz1cInNreS1yZXBlYXRlci1pdGVtLXJpZ2h0XCIgI2l0ZW1IZWFkZXJSZWY+XG4gICAgPGRpdlxuICAgICAgY2xhc3M9XCJza3ktcmVwZWF0ZXItaXRlbS1oZWFkZXJcIlxuICAgICAgW2F0dHIucm9sZV09XCIoaXRlbVJvbGUkIHwgYXN5bmMpPy50aXRsZVwiXG4gICAgICBbaGlkZGVuXT1cInRpdGxlUmVmLmNoaWxkcmVuLmxlbmd0aCA9PT0gMFwiXG4gICAgICAoY2xpY2spPVwiaGVhZGVyQ2xpY2soKVwiXG4gICAgPlxuICAgICAgPGRpdiBjbGFzcz1cInNreS1yZXBlYXRlci1pdGVtLXRpdGxlIHNreS1lbXBoYXNpemVkXCIgI3RpdGxlUmVmPlxuICAgICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJza3ktcmVwZWF0ZXItaXRlbS10aXRsZVwiPjwvbmctY29udGVudD5cbiAgICAgIDwvZGl2PlxuICAgICAgPGJ1dHRvblxuICAgICAgICAqbmdJZj1cInJlb3JkZXJhYmxlXCJcbiAgICAgICAgY2xhc3M9XCJza3ktYnRuIHNreS1idG4tbGluayBza3ktcmVwZWF0ZXItaXRlbS1yZW9yZGVyLXRvcFwiXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIlxuICAgICAgICAgIGl0ZW1OYW1lXG4gICAgICAgICAgICA/ICgnc2t5dXhfcmVwZWF0ZXJfaXRlbV9yZW9yZGVyX3RvcF9sYWJlbCdcbiAgICAgICAgICAgICAgfCBza3lMaWJSZXNvdXJjZXMgOiBpdGVtTmFtZSlcbiAgICAgICAgICAgIDogKCdza3l1eF9yZXBlYXRlcl9pdGVtX3Jlb3JkZXJfdG9wX2xhYmVsX2RlZmF1bHQnXG4gICAgICAgICAgICAgIHwgc2t5TGliUmVzb3VyY2VzKVxuICAgICAgICBcIlxuICAgICAgICAoY2xpY2spPVwibW92ZVRvVG9wKCRldmVudClcIlxuICAgICAgPlxuICAgICAgICA8c2t5LWljb24gaWNvbj1cImFycm93LWNpcmNsZS11cFwiPjwvc2t5LWljb24+XG4gICAgICAgIHt7ICdza3l1eF9yZXBlYXRlcl9pdGVtX3Jlb3JkZXJfdG9wJyB8IHNreUxpYlJlc291cmNlcyB9fVxuICAgICAgPC9idXR0b24+XG4gICAgICA8ZGl2ICpuZ0lmPVwiaXNDb2xsYXBzaWJsZVwiIGNsYXNzPVwic2t5LXJlcGVhdGVyLWl0ZW0tY2hldnJvblwiPlxuICAgICAgICA8c2t5LWNoZXZyb25cbiAgICAgICAgICBbYXJpYUNvbnRyb2xzXT1cImNvbnRlbnRJZFwiXG4gICAgICAgICAgW2FyaWFMYWJlbF09XCJcbiAgICAgICAgICAgIGl0ZW1OYW1lXG4gICAgICAgICAgICAgID8gKCdza3l1eF9yZXBlYXRlcl9pdGVtX2V4cGFuZCcgfCBza3lMaWJSZXNvdXJjZXMgOiBpdGVtTmFtZSlcbiAgICAgICAgICAgICAgOiAoJ3NreXV4X3JlcGVhdGVyX2l0ZW1fZXhwYW5kX2RlZmF1bHQnIHwgc2t5TGliUmVzb3VyY2VzKVxuICAgICAgICAgIFwiXG4gICAgICAgICAgW2RpcmVjdGlvbl09XCJpc0V4cGFuZGVkID8gJ3VwJyA6ICdkb3duJ1wiXG4gICAgICAgICAgKGRpcmVjdGlvbkNoYW5nZSk9XCJjaGV2cm9uRGlyZWN0aW9uQ2hhbmdlKCRldmVudClcIlxuICAgICAgICA+XG4gICAgICAgIDwvc2t5LWNoZXZyb24+XG4gICAgICA8L2Rpdj5cbiAgICAgIDwhLS0gVXNlZCBmb3Igd2hlbiB0aGUgY2hldnJvbiBpcyBoaWRkZW4gdG8gZW5zdXJlIHRoYXQgdGhlIHJpZ2h0IHNpZGUgaXMgdGhlIHNhbWUgaGVpZ2h0IGFzIHRoZSBsZWZ0Li0tPlxuICAgICAgPGRpdlxuICAgICAgICAqbmdJZj1cIiFpc0NvbGxhcHNpYmxlICYmICFjb250ZXh0TWVudVwiXG4gICAgICAgIGNsYXNzPVwic2t5LXJlcGVhdGVyLWl0ZW0tY2hldnJvbi1wbGFjZWhvbGRlclwiXG4gICAgICA+PC9kaXY+XG4gICAgICA8IS0tIFVzZWQgdG8gZW5zdXJlIHRoYXQgdGhlIHJpZ2h0IHNpZGUgaXMgdGhlIHNhbWUgaGVpZ2h0IGFzIHRoZSBsZWZ0Li0tPlxuICAgICAgPGRpdlxuICAgICAgICAqbmdJZj1cImNvbnRleHRNZW51XCJcbiAgICAgICAgY2xhc3M9XCJza3ktcmVwZWF0ZXItaXRlbS1jaGV2cm9uLXBsYWNlaG9sZGVyLXdpdGgtY29udGV4dFwiXG4gICAgICA+PC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdlxuICAgICAgY2xhc3M9XCJza3ktcmVwZWF0ZXItaXRlbS1jb250ZW50XCJcbiAgICAgIFtpZF09XCJjb250ZW50SWRcIlxuICAgICAgW0Bza3lBbmltYXRpb25TbGlkZV09XCJzbGlkZURpcmVjdGlvblwiXG4gICAgICAjaXRlbUNvbnRlbnRSZWZcbiAgICAgIFthdHRyLnJvbGVdPVwiKGl0ZW1Sb2xlJCB8IGFzeW5jKT8uY29udGVudFwiXG4gICAgPlxuICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwic2t5LXJlcGVhdGVyLWl0ZW0tY29udGVudFwiPjwvbmctY29udGVudD5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuIl19
|
|
492
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwZWF0ZXItaXRlbS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvbGlzdHMvc3JjL2xpYi9tb2R1bGVzL3JlcGVhdGVyL3JlcGVhdGVyLWl0ZW0uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21wb25lbnRzL2xpc3RzL3NyYy9saWIvbW9kdWxlcy9yZXBlYXRlci9yZXBlYXRlci1pdGVtLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsT0FBTyxFQUdMLFNBQVMsRUFDVCxZQUFZLEVBQ1osZUFBZSxFQUNmLFVBQVUsRUFDVixZQUFZLEVBQ1osV0FBVyxFQUNYLFlBQVksRUFDWixLQUFLLEVBR0wsTUFBTSxFQUdOLFNBQVMsRUFDVCxpQkFBaUIsR0FDbEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFRdEQsT0FBTyxFQUFjLE9BQU8sRUFBRSxRQUFRLElBQUksa0JBQWtCLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDM0UsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRzNDLE9BQU8sRUFBRSwrQkFBK0IsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ3BGLE9BQU8sRUFBRSxtQ0FBbUMsRUFBRSxNQUFNLHdDQUF3QyxDQUFDOzs7Ozs7Ozs7QUFJN0YsSUFBSSxhQUFhLEdBQUcsQ0FBQyxDQUFDO0FBRXRCOztHQUVHO0FBUUgsTUFBTSxPQUFPLHdCQUF3QjtJQUduQzs7OztPQUlHO0lBQ0gsSUFBVyxRQUFRO1FBQ2pCLE9BQU8sdUJBQUEsSUFBSSxpREFBaUIsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDcEUsSUFBSTtZQUNKLENBQUMsQ0FBQyxDQUFDO1lBQ0gsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ1QsQ0FBQztJQUVEOztPQUVHO0lBQ0gsSUFDVyxRQUFRLENBQUMsS0FBMEI7UUFDNUMsSUFBSSx1QkFBQSxJQUFJLDZDQUFhLEtBQUssS0FBSyxFQUFFO1lBQy9CLElBQUksS0FBSyxFQUFFO2dCQUNULElBQUksQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDO2dCQUN4Qix1QkFBQSxJQUFJLHlDQUFnQixJQUFJLE1BQUEsQ0FBQzthQUMxQjtpQkFBTTtnQkFDTCx1QkFBQSxJQUFJLHlDQUFnQixLQUFLLE1BQUEsQ0FBQzthQUMzQjtZQUNELElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRTtnQkFDakIsdUJBQUEsSUFBSSxpREFBaUIsQ0FBQyxtQkFBbUIsQ0FBQyxTQUFTLENBQUMsQ0FBQzthQUN0RDtZQUNELElBQUksdUJBQUEsSUFBSSw0Q0FBWSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDLEVBQUU7Z0JBQzNELHVCQUFBLElBQUksNENBQVksQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDLGFBQWEsQ0FBQyxJQUFJLEVBQUUsQ0FBQzthQUNuRTtZQUNELHVCQUFBLElBQUksZ0RBQWdCLENBQUMsWUFBWSxFQUFFLENBQUM7U0FDckM7SUFDSCxDQUFDO0lBQ0QsSUFBVyxRQUFRO1FBQ2pCLE9BQU8sdUJBQUEsSUFBSSw2Q0FBYSxDQUFDO0lBQzNCLENBQUM7SUEyQkQ7OztPQUdHO0lBQ0gsSUFDVyxVQUFVLENBQUMsS0FBMEI7UUFDOUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEtBQUssS0FBSyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDaEQsQ0FBQztJQUVELElBQVcsVUFBVTtRQUNuQixPQUFPLHVCQUFBLElBQUksNENBQVksQ0FBQztJQUMxQixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILElBQ1csVUFBVSxDQUFDLEtBQTBCO1FBQzlDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxJQUFJLEtBQUssS0FBSyx1QkFBQSxJQUFJLDZDQUFhLEVBQUU7WUFDakQsdUJBQUEsSUFBSSx5Q0FBZ0IsS0FBSyxNQUFBLENBQUM7WUFDMUIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyx1QkFBQSxJQUFJLDZDQUFhLENBQUMsQ0FBQztTQUMvQztJQUNILENBQUM7SUFFRCxJQUFXLFVBQVU7UUFDbkIsT0FBTyx1QkFBQSxJQUFJLDZDQUFhLENBQUM7SUFDM0IsQ0FBQztJQWdFRCxJQUFXLGFBQWEsQ0FBQyxLQUEwQjtRQUNqRCxJQUFJLElBQUksQ0FBQyxhQUFhLEtBQUssS0FBSyxFQUFFO1lBQ2hDLHVCQUFBLElBQUksNENBQW1CLEtBQUssS0FBSyxLQUFLLE1BQUEsQ0FBQztZQUV2Qyx5QkFBeUI7WUFDekIsSUFBSSxDQUFDLHVCQUFBLElBQUksZ0RBQWdCLEVBQUU7Z0JBQ3pCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7YUFDcEM7U0FDRjtRQUVELHVCQUFBLElBQUksZ0RBQWdCLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDdEMsQ0FBQztJQUVELElBQVcsYUFBYTtRQUN0QixPQUFPLHVCQUFBLElBQUksZ0RBQWdCLENBQUM7SUFDOUIsQ0FBQztJQVlELElBQ1csa0JBQWtCO1FBQzNCLE9BQU8sMEJBQTBCLEdBQUcsdUJBQUEsSUFBSSxpREFBaUIsQ0FBQyxlQUFlLENBQUM7SUFDNUUsQ0FBQztJQXNDRCxZQUNFLGVBQW1DLEVBQ25DLGNBQWlDLEVBQ2pDLGNBQXlDLEVBQ3pDLFVBQXNCLEVBQ3RCLGVBQXVDOztRQXZJekM7OztXQUdHO1FBRUksZ0JBQVcsR0FBd0IsS0FBSyxDQUFDO1FBRWhEOztXQUVHO1FBRUksZUFBVSxHQUF3QixLQUFLLENBQUM7UUFFL0M7OztXQUdHO1FBRUksbUJBQWMsR0FBd0IsS0FBSyxDQUFDO1FBVW5EOztXQUVHO1FBRUksYUFBUSxHQUFHLElBQUksWUFBWSxFQUFRLENBQUM7UUFFM0M7O1dBRUc7UUFFSSxXQUFNLEdBQUcsSUFBSSxZQUFZLEVBQVEsQ0FBQztRQUV6Qzs7O1dBR0c7UUFFSSxvQkFBZSxHQUFHLElBQUksWUFBWSxFQUEwQixDQUFDO1FBRXBFOztXQUVHO1FBRUkscUJBQWdCLEdBQUcsSUFBSSxZQUFZLEVBQVcsQ0FBQztRQU8vQyxtQkFBYyxHQUFHLEtBQUssQ0FBQztRQUV2QixhQUFRLEdBQUcsS0FBSyxDQUFDO1FBcUJqQix1QkFBa0IsR0FBRyxFQUFFLENBQUM7UUFNeEIsc0JBQWlCLEdBQUcsS0FBSyxDQUFDO1FBd0JqQywyREFBMkM7UUFDM0MsMkRBQW1DO1FBQ25DLHVEQUF3QjtRQUN4QiwrQ0FBYyxJQUFJLEVBQUM7UUFDbkIsOERBQTZCLEtBQUssRUFBQztRQUNuQyxrREFBaUIsSUFBSSxPQUFPLEVBQVEsRUFBQztRQUNyQyxzREFBcUIsRUFBRSxFQUFDO1FBQ3hCLHdEQUF1QixDQUFDLENBQUMsRUFBQztRQUMxQixzREFBcUIsRUFBRSxFQUFDO1FBQ3hCLHdEQUF1QixFQUFFLEVBQUM7UUFDMUIscURBQW9CLEVBQUUsRUFBQztRQUN2Qiw0REFBMkIsRUFBRSxFQUFDO1FBQzlCLGlEQUFnQixDQUFDLEVBQUM7UUFDbEIsNERBQXFDO1FBQ3JDLDREQUF5QztRQUN6QyxtREFBa0IsSUFBSSxFQUFDO1FBQ3ZCLGdEQUFvQyxLQUFLLEVBQUM7UUFDMUMsd0RBQWtDO1FBU2hDLHVCQUFBLElBQUksNkNBQW9CLGVBQWUsTUFBQSxDQUFDO1FBQ3hDLHVCQUFBLElBQUksNENBQW1CLGNBQWMsTUFBQSxDQUFDO1FBQ3RDLHVCQUFBLElBQUksNENBQW1CLGNBQWMsTUFBQSxDQUFDO1FBQ3RDLHVCQUFBLElBQUksd0NBQWUsVUFBVSxNQUFBLENBQUM7UUFDOUIsdUJBQUEsSUFBSSw2Q0FBb0IsZUFBZSxNQUFBLENBQUM7UUFFeEMsdUJBQUEsSUFBSSx1RkFBa0IsTUFBdEIsSUFBSSxFQUFtQixLQUFLLENBQUMsQ0FBQztRQUU5QixrQkFBa0IsQ0FBQztZQUNqQix1QkFBQSxJQUFJLGlEQUFpQixDQUFDLFNBQVMsQ0FBQyxvQ0FBb0MsQ0FBQztZQUNyRSx1QkFBQSxJQUFJLGlEQUFpQixDQUFDLFNBQVMsQ0FBQyxvQ0FBb0MsQ0FBQztZQUNyRSx1QkFBQSxJQUFJLGlEQUFpQixDQUFDLFNBQVMsQ0FDN0IsMENBQTBDLENBQzNDO1lBQ0QsdUJBQUEsSUFBSSxpREFBaUIsQ0FBQyxTQUFTLENBQUMsdUNBQXVDLENBQUM7WUFDeEUsdUJBQUEsSUFBSSxpREFBaUIsQ0FBQyxTQUFTLENBQUMsbUNBQW1DLENBQUM7U0FDckUsQ0FBQzthQUNDLElBQUksQ0FBQyxTQUFTLENBQUMsdUJBQUEsSUFBSSwrQ0FBZSxDQUFDLENBQUM7YUFDcEMsU0FBUyxDQUNSLENBQUMsQ0FDQyxpQkFBaUIsRUFDakIsaUJBQWlCLEVBQ2pCLHVCQUF1QixFQUN2QixvQkFBb0IsRUFDcEIsZ0JBQWdCLEVBQ2pCLEVBQUUsRUFBRTtZQUNILHVCQUFBLElBQUksK0NBQXNCLGlCQUFpQixNQUFBLENBQUM7WUFDNUMsdUJBQUEsSUFBSSwrQ0FBc0IsaUJBQWlCLE1BQUEsQ0FBQztZQUM1Qyx1QkFBQSxJQUFJLHFEQUE0Qix1QkFBdUIsTUFBQSxDQUFDO1lBQ3hELHVCQUFBLElBQUksaURBQXdCLG9CQUFvQixNQUFBLENBQUM7WUFDakQsdUJBQUEsSUFBSSw4Q0FBcUIsZ0JBQWdCLE1BQUEsQ0FBQztZQUMxQyxJQUFJLENBQUMsa0JBQWtCLEdBQUcsdUJBQUEsSUFBSSxxREFBcUIsQ0FBQztRQUN0RCxDQUFDLENBQ0YsQ0FBQztRQUVKLElBQUksQ0FBQyxTQUFTLEdBQUcsNkJBQTZCLEVBQUUsYUFBYSxFQUFFLENBQUM7UUFDaEUsSUFBSSxDQUFDLFNBQVMsR0FBRyx1QkFBQSxJQUFJLGlEQUFpQixDQUFDLFFBQVEsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUNqRSxDQUFDO0lBRU0sUUFBUTtRQUNiLHVCQUFBLElBQUksaURBQWlCLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3pDLHVCQUFBLElBQUksaURBQWlCLENBQUMsZ0JBQWdCO2FBQ25DLElBQUksQ0FBQyxTQUFTLENBQUMsdUJBQUEsSUFBSSwrQ0FBZSxDQUFDLENBQUM7YUFDcEMsU0FBUyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7WUFDbEIsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLEtBQUssSUFBSSxDQUFDO1lBQ3ZDLElBQUksZ0JBQWdCLEtBQUssSUFBSSxDQUFDLFFBQVEsRUFBRTtnQkFDdEMsSUFBSSxDQUFDLFFBQVEsR0FBRyxnQkFBZ0IsQ0FBQztnQkFDakMsdUJBQUEsSUFBSSxnREFBZ0IsQ0FBQyxZQUFZLEVBQUUsQ0FBQzthQUNyQztRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVNLGVBQWU7UUFDcEIsSUFBSSxDQUFDLGNBQWMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLDZCQUE2QixFQUFFLE1BQU0sQ0FBQztRQUNuRSx1QkFBQSxJQUFJLGtHQUE2QixNQUFqQyxJQUFJLENBQStCLENBQUM7SUFDdEMsQ0FBQztJQUVNLFdBQVc7UUFDaEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUN6QixJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxlQUFlLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDaEMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsRUFBRSxDQUFDO1FBRWpDLHVCQUFBLElBQUksK0NBQWUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUMzQix1QkFBQSxJQUFJLCtDQUFlLENBQUMsUUFBUSxFQUFFLENBQUM7UUFFL0IsdUJBQUEsSUFBSSxpREFBaUIsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDN0MsQ0FBQztJQUdNLFNBQVMsQ0FBQyxNQUFxQjtRQUNwQyxJQUNFLENBQUMsR0FBRyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxXQUFXLENBQUMsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUMxRTtZQUNBLElBQ0csTUFBTSxDQUFDLE1BQXNCLENBQUMsT0FBTyxDQUNwQyx5RUFBeUUsQ0FDMUUsRUFDRDtnQkFDQSxPQUFPO2FBQ1I7WUFDRCxNQUFNLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDeEIsTUFBTSxDQUFDLGVBQWUsRUFBRSxDQUFDO1lBQ3pCLElBQUksWUFBWSxHQUF5QyxTQUFTLENBQUM7WUFDbkUsMEJBQTBCO1lBQzFCLElBQUksQ0FBQyxHQUFHLEVBQUUsT0FBTyxDQUFDLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRTtnQkFDdkMsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFO29CQUNuQixJQUFJLENBQUMsVUFBVSxHQUFHLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQztpQkFDcEM7Z0JBQ0QsNERBQTREO2dCQUM1RCxZQUFZLEdBQUcsSUFBSSxDQUFDO2FBQ3JCO1lBQ0QsMEJBQTBCO1lBQzFCLElBQUksQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRTtnQkFDeEMsTUFBTSxLQUFLLEdBQUcsdUJBQUEsSUFBSSxpREFBaUIsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUM5QyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUN6QixDQUFDO2dCQUNGLElBQUksTUFBTSxDQUFDLEdBQUcsS0FBSyxNQUFNLEVBQUU7b0JBQ3pCLFlBQVksR0FBRyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7aUJBQzlCO3FCQUFNO29CQUNMLFlBQVksR0FBRyxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUM7aUJBQzVCO2FBQ0Y7WUFDRCwwQkFBMEI7WUFDMUIsSUFBSSxDQUFDLFNBQVMsRUFBRSxXQUFXLENBQUMsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFO2dCQUNqRCxNQUFNLFlBQVksR0FBRyx1QkFBQSxJQUFJLGlEQUFpQixDQUFDLEtBQUssQ0FBQyxTQUFTLENBQ3hELENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUN4QixDQUFDO2dCQUNGLElBQUksU0FBaUIsQ0FBQztnQkFDdEIsSUFBSSxPQUEyQixDQUFDO2dCQUNoQyxJQUFJLE1BQU0sQ0FBQyxHQUFHLEtBQUssU0FBUyxFQUFFO29CQUM1QixTQUFTLEdBQUcsQ0FBQyxDQUFDO29CQUNkLE9BQU8sR0FBRyxZQUFZLENBQUM7aUJBQ3hCO3FCQUFNO29CQUNMLFNBQVMsR0FBRyxZQUFZLEdBQUcsQ0FBQyxDQUFDO29CQUM3QixPQUFPLEdBQUcsU0FBUyxDQUFDO2lCQUNyQjtnQkFDRCxNQUFNLEtBQUssR0FBRyx1QkFBQSxJQUFJLGlEQUFpQixDQUFDLEtBQUs7cUJBQ3RDLEtBQUssQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFDO3FCQUN6QixNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUNwQyxZQUFZLEdBQUcsTUFBTSxDQUFDLEdBQUcsS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO2dCQUN0RSxJQUFJLENBQUMsWUFBWSxFQUFFO29CQUNqQixlQUFlO29CQUNmLElBQUksTUFBTSxDQUFDLEdBQUcsS0FBSyxXQUFXLEVBQUU7d0JBQzlCLFNBQVMsR0FBRyxDQUFDLENBQUM7d0JBQ2QsT0FBTyxHQUFHLFlBQVksQ0FBQztxQkFDeEI7eUJBQU07d0JBQ0wsU0FBUyxHQUFHLFlBQVksR0FBRyxDQUFDLENBQUM7d0JBQzdCLE9BQU8sR0FBRyxTQUFTLENBQUM7cUJBQ3JCO29CQUNELE1BQU0sS0FBSyxHQUFHLHVCQUFBLElBQUksaURBQWlCLENBQUMsS0FBSzt5QkFDdEMsS0FBSyxDQUFDLFNBQVMsRUFBRSxPQUFPLENBQUM7eUJBQ3pCLE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7b0JBQ3BDLFlBQVksR0FBRyxNQUFNLENBQUMsR0FBRyxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7aUJBQ3ZFO2FBQ0Y7WUFDRCwwQkFBMEI7WUFDMUIsSUFBSSxZQUFZLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxFQUFFO2dCQUMxQyx1QkFBQSxJQUFJLGlEQUFpQixDQUFDLFlBQVksQ0FBQyxZQUFZLENBQUMsQ0FBQztnQkFDakQsSUFDRSxDQUFFLHVCQUFBLFlBQVksNENBQVksQ0FBQyxhQUF5QixDQUFDLE9BQU8sQ0FDMUQsZUFBZSxDQUNoQixFQUNEO29CQUNBLFlBQVksQ0FBQyxPQUFPLEVBQUUsYUFBYSxDQUFDLEtBQUssRUFBRSxDQUFDO2lCQUM3QzthQUNGO1NBQ0Y7SUFDSCxDQUFDO0lBRU0sV0FBVztRQUNoQixJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUU7WUFDdEIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsQ0FBQztTQUNoRDtJQUNILENBQUM7SUFFTSxzQkFBc0IsQ0FBQyxTQUFpQjtRQUM3QyxJQUFJLENBQUMsaUJBQWlCLENBQUMsU0FBUyxLQUFLLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztJQUNuRCxDQUFDO0lBRU0sbUJBQW1CLENBQUMsS0FBaUI7UUFDMUMsNEVBQTRFO1FBQzVFLHdGQUF3RjtRQUN4RiwrREFBK0Q7UUFDL0QsSUFDRSxLQUFLLENBQUMsTUFBTSxLQUFLLElBQUksQ0FBQyxPQUFPLEVBQUUsYUFBYTtZQUM1QyxJQUFJLENBQUMsY0FBYyxFQUFFLGFBQWEsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQztZQUN6RCxJQUFJLENBQUMsYUFBYSxFQUFFLGFBQWEsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxFQUN4RDtZQUNBLHVCQUFBLElBQUksaURBQWlCLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQzFDO0lBQ0gsQ0FBQztJQUVNLGlCQUFpQixDQUFDLEtBQWMsRUFBRSxPQUFnQjtRQUN2RCxJQUFJLElBQUksQ0FBQyxhQUFhLEtBQUssS0FBSyxJQUFJLEtBQUssS0FBSyxLQUFLLEVBQUU7WUFDbkQsT0FBTyxDQUFDLElBQUksQ0FDVjs2QkFDcUIsQ0FDdEIsQ0FBQztTQUNIO2FBQU0sSUFBSSx1QkFBQSxJQUFJLDRDQUFZLEtBQUssS0FBSyxFQUFFO1lBQ3JDLHVCQUFBLElBQUksd0NBQWUsS0FBSyxNQUFBLENBQUM7WUFFekIsSUFBSSx1QkFBQSxJQUFJLDRDQUFZLEVBQUU7Z0JBQ3BCLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUM7YUFDcEI7aUJBQU07Z0JBQ0wsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQzthQUN0QjtZQUVELHVCQUFBLElBQUksaURBQWlCLENBQUMseUJBQXlCLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDdEQsdUJBQUEsSUFBSSx1RkFBa0IsTUFBdEIsSUFBSSxFQUFtQixPQUFPLENBQUMsQ0FBQztZQUNoQyx1QkFBQSxJQUFJLGdEQUFnQixDQUFDLFlBQVksRUFBRSxDQUFDO1NBQ3JDO0lBQ0gsQ0FBQztJQUVNLGdCQUFnQixDQUFDLEtBQXdCO1FBQzlDLElBQUksQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQztJQUNsQyxDQUFDO0lBRU0saUJBQWlCLENBQUMsbUJBQTJDO1FBQ2xFLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLENBQUM7SUFDakQsQ0FBQztJQUVNLFNBQVMsQ0FBQyxLQUFZO1FBQzNCLEtBQUssQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUN4Qix1QkFBQSxJQUFJLGdEQUFnQixDQUFDLFVBQVUsQ0FBQyx1QkFBQSxJQUFJLDRDQUFZLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ3RFLHVCQUFBLElBQUksZ0RBQWdCLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxNQUFxQixDQUFDLENBQUM7UUFDL0QsdUJBQUEsSUFBSSxpREFBaUIsQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO0lBQzlDLENBQUM7SUFFTSxzQkFBc0IsQ0FBQyxLQUFvQjtRQUNoRCx5QkFBeUI7UUFDekIsSUFBSSxLQUFLLENBQUMsR0FBRyxFQUFFO1lBQ2IsUUFBUSxLQUFLLENBQUMsR0FBRyxDQUFDLFdBQVcsRUFBRSxFQUFFO2dCQUMvQixLQUFLLEdBQUcsQ0FBQztnQkFDVCxLQUFLLE9BQU87b0JBQ1YsdUJBQUEsSUFBSSw0RkFBdUIsTUFBM0IsSUFBSSxDQUF5QixDQUFDO29CQUM5QixLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7b0JBQ3ZCLEtBQUssQ0FBQyxlQUFlLEVBQUUsQ0FBQztvQkFDeEIsTUFBTTtnQkFFUixLQUFLLFFBQVE7b0JBQ1gsMEJBQTBCO29CQUMxQixJQUFJLHVCQUFBLElBQUksMkRBQTJCLEVBQUU7d0JBQ25DLHVCQUFBLElBQUksdURBQThCLEtBQUssTUFBQSxDQUFDO3dCQUN4Qyx1QkFBQSxJQUFJLHlGQUFvQixNQUF4QixJQUFJLENBQXNCLENBQUM7d0JBQzNCLElBQUksQ0FBQyxrQkFBa0I7NEJBQ3JCLHVCQUFBLElBQUksbURBQW1CLEdBQUcsR0FBRyxHQUFHLHVCQUFBLElBQUkscURBQXFCLENBQUM7d0JBQzVELHVCQUFBLElBQUksZ0RBQWdCLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxNQUFxQixDQUFDLENBQUM7d0JBQy9ELEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQzt3QkFDdkIsS0FBSyxDQUFDLGVBQWUsRUFBRSxDQUFDO3FCQUN6QjtvQkFDRCxNQUFNO2dCQUVSLEtBQUssU0FBUztvQkFDWixJQUFJLHVCQUFBLElBQUksMkRBQTJCLEVBQUU7d0JBQ25DLHVCQUFBLElBQUksd0ZBQW1CLE1BQXZCLElBQUksQ0FBcUIsQ0FBQzt3QkFDMUIsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO3dCQUN2QixLQUFLLENBQUMsZUFBZSxFQUFFLENBQUM7d0JBQ3hCLHVCQUFBLElBQUksaURBQWlCLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztxQkFDN0M7b0JBQ0QsTUFBTTtnQkFFUixLQUFLLFdBQVc7b0JBQ2QsMEJBQTBCO29CQUMxQixJQUFJLHVCQUFBLElBQUksMkRBQTJCLEVBQUU7d0JBQ25DLHVCQUFBLElBQUksMEZBQXFCLE1BQXpCLElBQUksQ0FBdUIsQ0FBQzt3QkFDNUIsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO3dCQUN2QixLQUFLLENBQUMsZUFBZSxFQUFFLENBQUM7d0JBQ3hCLHVCQUFBLElBQUksaURBQWlCLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztxQkFDN0M7b0JBQ0QsTUFBTTtnQkFFUixLQUFLLFdBQVcsQ0FBQztnQkFDakIsS0FBSyxZQUFZO29CQUNmLDBCQUEwQjtvQkFDMUIsSUFBSSx1QkFBQSxJQUFJLDJEQUEyQixFQUFFO3dCQUNuQyxLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7d0JBQ3ZCLEtBQUssQ0FBQyxlQUFlLEVBQUUsQ0FBQztxQkFDekI7b0JBQ0QsTUFBTTtnQkFFUiwwQkFBMEI7Z0JBQzFCO29CQUNFLE1BQU07YUFDVDtTQUNGO0lBQ0gsQ0FBQztJQUVNLG1CQUFtQixDQUFDLEtBQVU7UUFDbkMsdUJBQUEsSUFBSSx1REFBOEIsS0FBSyxNQUFBLENBQUM7UUFDeEMsdUJBQUEsSUFBSSx5RkFBb0IsTUFBeEIsSUFBSSxDQUFzQixDQUFDO1FBQzNCLElBQUksQ0FBQyxrQkFBa0IsR0FBRyx1QkFBQSxJQUFJLHFEQUFxQixDQUFDO1FBQ3BELElBQUksQ0FBQyxZQUFZLEdBQUcsU0FBUyxDQUFDO0lBQ2hDLENBQUM7O2lzQ0FFaUIsT0FBZ0I7SUFDaEMsSUFBSSxDQUFDLGlCQUFpQixHQUFHLENBQUMsT0FBTyxDQUFDO0lBQ2xDLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7QUFDeEQsQ0FBQzs7SUFHQyxNQUFNLFFBQVEsR0FBRyx1QkFBQSxJQUFJLGdEQUFnQixDQUFDLFVBQVUsQ0FDOUMsdUJBQUEsSUFBSSw0Q0FBWSxDQUFDLGFBQWEsQ0FDL0IsQ0FBQztJQUNGLElBQUksUUFBUSxLQUFLLFNBQVMsRUFBRTtRQUMxQix1QkFBQSxJQUFJLGlEQUF3QixRQUFRLE1BQUEsQ0FBQztRQUNyQyxxRUFBQSxDQUFBLDhFQUFrQixFQUFsQixJQUFvQixJQUFBLENBQUEsTUFBQSxDQUFDO1FBQ3JCLHVCQUFBLElBQUksZ0RBQWdCLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNuRCx1QkFBQSxJQUFJLHVEQUE4QixJQUFJLE1BQUEsQ0FBQztRQUN2QyxJQUFJLENBQUMsa0JBQWtCLEdBQUcsR0FBRyx1QkFBQSxJQUFJLGtEQUFrQixJQUNqRCx1QkFBQSxJQUFJLHFEQUFxQixHQUFHLENBQzlCLEVBQUUsQ0FBQztLQUNKO0FBQ0gsQ0FBQzs7SUFHQyxNQUFNLFFBQVEsR0FBRyx1QkFBQSxJQUFJLGdEQUFnQixDQUFDLFlBQVksQ0FDaEQsdUJBQUEsSUFBSSw0Q0FBWSxDQUFDLGFBQWEsQ0FDL0IsQ0FBQztJQUNGLElBQUksUUFBUSxFQUFFO1FBQ1osdUJBQUEsSUFBSSxpREFBd0IsUUFBUSxNQUFBLENBQUM7UUFDckMscUVBQUEsQ0FBQSw4RUFBa0IsRUFBbEIsSUFBb0IsSUFBQSxDQUFBLE1BQUEsQ0FBQztRQUNyQix1QkFBQSxJQUFJLGdEQUFnQixDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDbkQsdUJBQUEsSUFBSSx1REFBOEIsSUFBSSxNQUFBLENBQUM7UUFDdkMsSUFBSSxDQUFDLGtCQUFrQixHQUFHLEdBQUcsdUJBQUEsSUFBSSxrREFBa0IsSUFDakQsdUJBQUEsSUFBSSxxREFBcUIsR0FBRyxDQUM5QixFQUFFLENBQUM7S0FDSjtBQUNILENBQUM7SUFHQyx1QkFBQSxJQUFJLHVEQUE4QixDQUFDLHVCQUFBLElBQUksMkRBQTJCLE1BQUEsQ0FBQztJQUNuRSx1QkFBQSxJQUFJLDBDQUFpQixDQUFDLE1BQUEsQ0FBQztJQUV2QixJQUFJLHVCQUFBLElBQUksMkRBQTJCLEVBQUU7UUFDbkMsSUFBSSxDQUFDLFlBQVksR0FBRyx1QkFBQSxJQUFJLHlEQUF5QixDQUFDO0tBQ25EO1NBQU07UUFDTCwwQ0FBMEM7UUFDMUMsSUFBSSxDQUFDLFlBQVksR0FBRyxHQUFHLHVCQUFBLElBQUksbURBQW1CLElBQzVDLHVCQUFBLElBQUkscURBQXFCLEdBQUcsQ0FDOUIsSUFBSSx1QkFBQSxJQUFJLHFEQUFxQixFQUFFLENBQUM7UUFDaEMsdUJBQUEsSUFBSSxpREFBd0IsQ0FBQyxDQUFDLE1BQUEsQ0FBQztLQUNoQztBQUNILENBQUM7SUFHQyxJQUFJLHVCQUFBLElBQUksOENBQWMsR0FBRyxDQUFDLEVBQUU7UUFDMUIsdUJBQUEsSUFBSSxnREFBZ0IsQ0FBQyxZQUFZLENBQy9CLHVCQUFBLElBQUksNENBQVksQ0FBQyxhQUFhLEVBQzlCLElBQUksQ0FBQyxHQUFHLENBQUMsdUJBQUEsSUFBSSw4Q0FBYyxDQUFDLENBQzdCLENBQUM7S0FDSDtTQUFNLElBQUksdUJBQUEsSUFBSSw4Q0FBYyxHQUFHLENBQUMsRUFBRTtRQUNqQyx1QkFBQSxJQUFJLGdEQUFnQixDQUFDLFVBQVUsQ0FDN0IsdUJBQUEsSUFBSSw0Q0FBWSxDQUFDLGFBQWEsRUFDOUIsS0FBSyxFQUNMLHVCQUFBLElBQUksOENBQWMsQ0FDbkIsQ0FBQztLQUNIO0lBQ0QsdUJBQUEsSUFBSSxpREFBaUIsQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO0FBQzlDLENBQUM7SUFHQyxJQUFJLENBQUMsNkJBQTZCLEVBQUUsT0FBTztTQUN4QyxJQUFJLENBQUMsU0FBUyxDQUFDLHVCQUFBLElBQUksK0NBQWUsQ0FBQyxDQUFDO1NBQ3BDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7UUFDZCxJQUFJLENBQUMsY0FBYyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsNkJBQTZCLEVBQUUsTUFBTSxDQUFDO1FBQ25FLDBCQUEwQjtRQUMxQixJQUFJLENBQUMsYUFBYTtZQUNoQixJQUFJLENBQUMsY0FBYyxJQUFJLHVCQUFBLElBQUksaURBQWlCLENBQUMsVUFBVSxLQUFLLE1BQU0sQ0FBQztRQUNyRSwwQkFBMEI7UUFDMUIsSUFBSSx1QkFBQSxJQUFJLGlEQUFpQixDQUFDLFVBQVUsS0FBSyxRQUFRLEVBQUU7WUFDakQsdUJBQUEsSUFBSSxpREFBaUIsQ0FBQyx5QkFBeUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUN2RDtJQUNILENBQUMsQ0FBQyxDQUFDO0FBQ1AsQ0FBQztxSEExa0JVLHdCQUF3Qjt5R0FBeEIsd0JBQXdCLDhtQkFvSnJCLG1DQUFtQywyQkFBVSxVQUFVLGdFQXFEcEQsK0JBQStCLGtIQVpmLFVBQVUsMkdBR04sVUFBVSx5R0FHWCxVQUFVLDZGQUdoQixVQUFVLDZCQ3RQMUMsNmlMQStKQSx5dEtEbEhjLENBQUMsaUJBQWlCLENBQUM7MkZBR3BCLHdCQUF3QjtrQkFQcEMsU0FBUzsrQkFDRSxtQkFBbUIsY0FHakIsQ0FBQyxpQkFBaUIsQ0FBQyxpQkFDaEIsaUJBQWlCLENBQUMsSUFBSTsrT0FxQjFCLFFBQVE7c0JBRGxCLEtBQUs7Z0JBOEJDLFFBQVE7c0JBRGQsS0FBSztnQkFTQyxnQkFBZ0I7c0JBRHRCLEtBQUs7Z0JBUUMsa0JBQWtCO3NCQUR4QixLQUFLO2dCQVFLLFVBQVU7c0JBRHBCLEtBQUs7Z0JBZUssVUFBVTtzQkFEcEIsS0FBSztnQkFpQkMsV0FBVztzQkFEakIsS0FBSztnQkFPQyxVQUFVO3NCQURoQixLQUFLO2dCQVFDLGNBQWM7c0JBRHBCLEtBQUs7Z0JBU0MsR0FBRztzQkFEVCxLQUFLO2dCQU9DLFFBQVE7c0JBRGQsTUFBTTtnQkFPQSxNQUFNO3NCQURaLE1BQU07Z0JBUUEsZUFBZTtzQkFEckIsTUFBTTtnQkFPQSxnQkFBZ0I7c0JBRHRCLE1BQU07Z0JBSUEsV0FBVztzQkFEakIsWUFBWTt1QkFBQyxtQ0FBbUMsRUFBRSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUU7Z0JBcUM1RCxrQkFBa0I7c0JBRDVCLFdBQVc7dUJBQUMsT0FBTztnQkFNYixVQUFVO3NCQURoQixTQUFTO3VCQUFDLFlBQVksRUFBRSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUU7Z0JBSXRDLGNBQWM7c0JBRHBCLFNBQVM7dUJBQUMsZ0JBQWdCLEVBQUUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFO2dCQUkxQyxhQUFhO3NCQURuQixTQUFTO3VCQUFDLGVBQWUsRUFBRSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUU7Z0JBSXpDLE9BQU87c0JBRGIsU0FBUzt1QkFBQyxTQUFTLEVBQUUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFO2dCQUluQyw2QkFBNkI7c0JBRG5DLGVBQWU7dUJBQUMsK0JBQStCO2dCQXFHekMsU0FBUztzQkFEZixZQUFZO3VCQUFDLFNBQVMsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEFmdGVyVmlld0luaXQsXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIENvbnRlbnRDaGlsZCxcbiAgQ29udGVudENoaWxkcmVuLFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIEhvc3RCaW5kaW5nLFxuICBIb3N0TGlzdGVuZXIsXG4gIElucHV0LFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgT3V0cHV0LFxuICBRdWVyeUxpc3QsXG4gIFRlbXBsYXRlUmVmLFxuICBWaWV3Q2hpbGQsXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHNreUFuaW1hdGlvblNsaWRlIH0gZnJvbSAnQHNreXV4L2FuaW1hdGlvbnMnO1xuaW1wb3J0IHsgU2t5Q2hlY2tib3hDaGFuZ2UgfSBmcm9tICdAc2t5dXgvZm9ybXMnO1xuaW1wb3J0IHsgU2t5TGliUmVzb3VyY2VzU2VydmljZSB9IGZyb20gJ0Bza3l1eC9pMThuJztcbmltcG9ydCB7XG4gIFNreUlubGluZUZvcm1DbG9zZUFyZ3MsXG4gIFNreUlubGluZUZvcm1Db25maWcsXG59IGZyb20gJ0Bza3l1eC9pbmxpbmUtZm9ybSc7XG5cbmltcG9ydCB7IE9ic2VydmFibGUsIFN1YmplY3QsIGZvcmtKb2luIGFzIG9ic2VydmFibGVGb3JrSm9pbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBTa3lSZXBlYXRlckFkYXB0ZXJTZXJ2aWNlIH0gZnJvbSAnLi9yZXBlYXRlci1hZGFwdGVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgU2t5UmVwZWF0ZXJJdGVtQ29udGVudENvbXBvbmVudCB9IGZyb20gJy4vcmVwZWF0ZXItaXRlbS1jb250ZW50LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBTa3lSZXBlYXRlckl0ZW1Db250ZXh0TWVudUNvbXBvbmVudCB9IGZyb20gJy4vcmVwZWF0ZXItaXRlbS1jb250ZXh0LW1lbnUuY29tcG9uZW50JztcbmltcG9ydCB7IFNreVJlcGVhdGVySXRlbVJvbGVzVHlwZSB9IGZyb20gJy4vcmVwZWF0ZXItaXRlbS1yb2xlcy50eXBlJztcbmltcG9ydCB7IFNreVJlcGVhdGVyU2VydmljZSB9IGZyb20gJy4vcmVwZWF0ZXIuc2VydmljZSc7XG5cbmxldCBuZXh0Q29udGVudElkID0gMDtcblxuLyoqXG4gKiBDcmVhdGVzIGFuIGluZGl2aWR1YWwgcmVwZWF0ZXIgaXRlbS5cbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnc2t5LXJlcGVhdGVyLWl0ZW0nLFxuICBzdHlsZVVybHM6IFsnLi9yZXBlYXRlci1pdGVtLmNvbXBvbmVudC5zY3NzJ10sXG4gIHRlbXBsYXRlVXJsOiAnLi9yZXBlYXRlci1pdGVtLmNvbXBvbmVudC5odG1sJyxcbiAgYW5pbWF0aW9uczogW3NreUFuaW1hdGlvblNsaWRlXSxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbn0pXG5leHBvcnQgY2xhc3MgU2t5UmVwZWF0ZXJJdGVtQ29tcG9uZW50XG4gIGltcGxlbWVudHMgT25EZXN0cm95LCBPbkluaXQsIEFmdGVyVmlld0luaXRcbntcbiAgLyoqXG4gICAqIE1ha2UgdGhlIGZpcnN0LCBub24tZGlzYWJsZWQgaXRlbSB0YWItZm9jdXNhYmxlLlxuICAgKiAtIERpc2FibGVkIGl0ZW1zIHNob3VsZCBub3QgYmUgZm9jdXNhYmxlIHBlciBbVzNDXShodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtcHJhY3RpY2VzLTEuMS8ja2JkX2Rpc2FibGVkX2NvbnRyb2xzKS5cbiAgICogLSBPbmUgaXRlbSBwZXIgbGlzdC9ncmlkL2xpc3Rib3ggc2hvdWxkIGJlIHRhYiBmb2N1c2FibGUgcGVyIFtXM0NdKGh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS1wcmFjdGljZXMtMS4xLyNncmlkKS5cbiAgICovXG4gIHB1YmxpYyBnZXQgdGFiaW5kZXgoKTogMCB8IC0xIHtcbiAgICByZXR1cm4gdGhpcy4jcmVwZWF0ZXJTZXJ2aWNlLml0ZW1zLmZpbHRlcigoaXRlbSkgPT4gIWl0ZW0uZGlzYWJsZWQpWzBdID09PVxuICAgICAgdGhpc1xuICAgICAgPyAwXG4gICAgICA6IC0xO1xuICB9XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gZXhjbHVkZSBhbiBpdGVtIHdoZW4gY3ljbGluZyB0aHJvdWdoLlxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBkaXNhYmxlZCh2YWx1ZTogYm9vbGVhbiB8IHVuZGVmaW5lZCkge1xuICAgIGlmICh0aGlzLiNfaXNEaXNhYmxlZCAhPT0gdmFsdWUpIHtcbiAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICB0aGlzLmlzU2VsZWN0ZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy4jX2lzRGlzYWJsZWQgPSB0cnVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy4jX2lzRGlzYWJsZWQgPSBmYWxzZTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmlzQWN0aXZlKSB7XG4gICAgICAgIHRoaXMuI3JlcGVhdGVyU2VydmljZS5hY3RpdmF0ZUl0ZW1CeUluZGV4KHVuZGVmaW5lZCk7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy4jZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50Lm1hdGNoZXMoJzpmb2N1cy13aXRoaW4nKSkge1xuICAgICAgICB0aGlzLiNlbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQub3duZXJEb2N1bWVudC5hY3RpdmVFbGVtZW50LmJsdXIoKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuI2NoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cbiAgfVxuICBwdWJsaWMgZ2V0IGRpc2FibGVkKCk6IGJvb2xlYW4gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLiNfaXNEaXNhYmxlZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgaHVtYW4tcmVhZGFibGUgbmFtZSBmb3IgdGhlIHJlcGVhdGVyIGl0ZW0gdGhhdCBpcyBhdmFpbGFibGUgZm9yIG11bHRpcGxlIHB1cnBvc2VzLFxuICAgKiBzdWNoIGFzIGFjY2Vzc2liaWxpdHkgYW5kIGluc3RydW1lbnRhdGlvbi4gRm9yIGV4YW1wbGUsIHRoZSBjb21wb25lbnQgdXNlcyB0aGUgbmFtZSB0b1xuICAgKiBjb25zdHJ1Y3QgQVJJQSBsYWJlbHMgZm9yIHRoZSByZXBlYXRlciBpdGVtIGNvbnRyb2xzXG4gICAqIHRvIFtzdXBwb3J0IGFjY2Vzc2liaWxpdHldKGh0dHBzOi8vZGV2ZWxvcGVyLmJsYWNrYmF1ZC5jb20vc2t5dXgvbGVhcm4vYWNjZXNzaWJpbGl0eSkuXG4gICAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBgYXJpYS1sYWJlbGAgYXR0cmlidXRlLCBzZWUgdGhlIFtXQUktQVJJQSBkZWZpbml0aW9uXShodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEvI2FyaWEtbGFiZWwpLlxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIGl0ZW1OYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIENvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhlIGJ1dHRvbnMgdG8gZGlzcGxheSBvbiBhbiBpbmxpbmUgZm9ybVxuICAgKiB3aXRoaW4gdGhlIHJlcGVhdGVyLiBUaGlzIHByb3BlcnR5IGFjY2VwdHNcbiAgICogW2EgYFNreUlubGluZUZvcm1Db25maWdgIG9iamVjdF0oaHR0cHM6Ly9kZXZlbG9wZXIuYmxhY2tiYXVkLmNvbS9za3l1eC9jb21wb25lbnRzL2lubGluZS1mb3JtI3NreWlubGluZWZvcm1jb25maWctcHJvcGVydGllcykuXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgaW5saW5lRm9ybUNvbmZpZzogU2t5SW5saW5lRm9ybUNvbmZpZyB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogU3BlY2lmaWVzIFthbiBBbmd1bGFyIGBUZW1wbGF0ZVJlZmBdKGh0dHBzOi8vYW5ndWxhci5pby9hcGkvY29yZS9UZW1wbGF0ZVJlZikgdG8gdXNlXG4gICAqIGFzIGEgdGVtcGxhdGUgdG8gaW5zdGFudGlhdGUgYW4gaW5saW5lIGZvcm0gd2l0aGluIHRoZSByZXBlYXRlci5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBpbmxpbmVGb3JtVGVtcGxhdGU6IFRlbXBsYXRlUmVmPHVua25vd24+IHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSByZXBlYXRlciBpdGVtIGlzIGV4cGFuZGVkLlxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IGlzRXhwYW5kZWQodmFsdWU6IGJvb2xlYW4gfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLnVwZGF0ZUZvckV4cGFuZGVkKHZhbHVlICE9PSBmYWxzZSwgdHJ1ZSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGlzRXhwYW5kZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuI2lzRXhwYW5kZWQ7XG4gIH1cblxuICAvKipcbiAgICogV2hldGhlciB0aGUgcmVwZWF0ZXIgaXRlbSdzIGNoZWNrYm94IGlzIHNlbGVjdGVkLlxuICAgKiBXaGVuIHVzZXJzIHNlbGVjdCB0aGUgcmVwZWF0ZXIgaXRlbSwgdGhlIHNwZWNpZmllZCBwcm9wZXJ0eSBvbiB5b3VyIG1vZGVsIGlzIHVwZGF0ZWQgYWNjb3JkaW5nbHkuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IGlzU2VsZWN0ZWQodmFsdWU6IGJvb2xlYW4gfCB1bmRlZmluZWQpIHtcbiAgICBpZiAoIXRoaXMuZGlzYWJsZWQgJiYgdmFsdWUgIT09IHRoaXMuI19pc1NlbGVjdGVkKSB7XG4gICAgICB0aGlzLiNfaXNTZWxlY3RlZCA9IHZhbHVlO1xuICAgICAgdGhpcy5pc1NlbGVjdGVkQ2hhbmdlLmVtaXQodGhpcy4jX2lzU2VsZWN0ZWQpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBnZXQgaXNTZWxlY3RlZCgpOiBib29sZWFuIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy4jX2lzU2VsZWN0ZWQ7XG4gIH1cblxuICAvKipcbiAgICogV2hldGhlciB1c2VycyBjYW4gY2hhbmdlIHRoZSBvcmRlciBvZiB0aGUgcmVwZWF0ZXIgaXRlbS5cbiAgICogVGhlIHJlcGVhdGVyIGNvbXBvbmVudCdzIGByZW9yZGVyYWJsZWAgcHJvcGVydHkgbXVzdCBhbHNvIGJlIHNldCB0byBgdHJ1ZWAuXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgcmVvcmRlcmFibGU6IGJvb2xlYW4gfCB1bmRlZmluZWQgPSBmYWxzZTtcblxuICAvKipcbiAgICogV2hldGhlciB0byBkaXNwbGF5IGEgY2hlY2tib3ggaW4gdGhlIGxlZnQgb2YgdGhlIHJlcGVhdGVyIGl0ZW0uXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2VsZWN0YWJsZTogYm9vbGVhbiB8IHVuZGVmaW5lZCA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIGRpc3BsYXkgYW4gaW5saW5lIGZvcm0gd2l0aGluIHRoZSByZXBlYXRlci5cbiAgICogVXNlcnMgY2FuIHRvZ2dsZSBiZXR3ZWVuIGRpc3BsYXlpbmcgYW5kIGhpZGluZyB0aGUgaW5saW5lIGZvcm0uXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2hvd0lubGluZUZvcm06IGJvb2xlYW4gfCB1bmRlZmluZWQgPSBmYWxzZTtcblxuICAvKipcbiAgICogVGhlIG9iamVjdCB0aGF0IHRoZSByZXBlYXRlciBjb21wb25lbnQgcmV0dXJucyBmb3IgdGhpcyByZXBlYXRlciBpdGVtXG4gICAqIHdoZW4gdGhlIGBvcmRlckNoYW5nZWAgZXZlbnQgZmlyZXMuIFRoaXMgaXMgcmVxdWlyZWRcbiAgICogaWYgeW91IHNldCB0aGUgYHJlb3JkZXJhYmxlYCBwcm9wZXJ0eSB0byBgdHJ1ZWAuXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgdGFnOiBhbnk7XG5cbiAgLyoqXG4gICAqIEZpcmVzIHdoZW4gdXNlcnMgY29sbGFwc2UgdGhlIHJlcGVhdGVyIGl0ZW0uXG4gICAqL1xuICBAT3V0cHV0KClcbiAgcHVibGljIGNvbGxhcHNlID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuXG4gIC8qKlxuICAgKiBGaXJlcyB3aGVuIHVzZXJzIGV4cGFuZCB0aGUgcmVwZWF0ZXIgaXRlbS5cbiAgICovXG4gIEBPdXRwdXQoKVxuICBwdWJsaWMgZXhwYW5kID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuXG4gIC8qKlxuICAgKiBGaXJlcyB3aGVuIHRoZSByZXBlYXRlciBpbmNsdWRlcyBhbiBpbmxpbmUgZm9ybSBhbmQgdXNlcnMgY2xvc2UgaXQuIFRoaXMgZXZlbnQgZW1pdHNcbiAgICogW2EgYFNreUlubGluZUZvcm1DbG9zZUFyZ3NgIHR5cGVdKGh0dHBzOi8vZGV2ZWxvcGVyLmJsYWNrYmF1ZC5jb20vc2t5dXgvY29tcG9uZW50cy9pbmxpbmUtZm9ybSNza3lpbmxpbmVmb3JtY2xvc2VhcmdzLXByb3BlcnRpZXMpLlxuICAgKi9cbiAgQE91dHB1dCgpXG4gIHB1YmxpYyBpbmxpbmVGb3JtQ2xvc2UgPSBuZXcgRXZlbnRFbWl0dGVyPFNreUlubGluZUZvcm1DbG9zZUFyZ3M+KCk7XG5cbiAgLyoqXG4gICAqIEZpcmVzIHdoZW4gdXNlcnMgc2VsZWN0IG9yIGNsZWFyIHRoZSBjaGVja2JveCBmb3IgdGhlIHJlcGVhdGVyIGl0ZW0uXG4gICAqL1xuICBAT3V0cHV0KClcbiAgcHVibGljIGlzU2VsZWN0ZWRDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG5cbiAgQENvbnRlbnRDaGlsZChTa3lSZXBlYXRlckl0ZW1Db250ZXh0TWVudUNvbXBvbmVudCwgeyByZWFkOiBFbGVtZW50UmVmIH0pXG4gIHB1YmxpYyBjb250ZXh0TWVudTogRWxlbWVudFJlZiB8IHVuZGVmaW5lZDtcblxuICBwdWJsaWMgY29udGVudElkOiBzdHJpbmc7XG5cbiAgcHVibGljIGhhc0l0ZW1Db250ZW50ID0gZmFsc2U7XG5cbiAgcHVibGljIGlzQWN0aXZlID0gZmFsc2U7XG5cbiAgcHVibGljIHNldCBpc0NvbGxhcHNpYmxlKHZhbHVlOiBib29sZWFuIHwgdW5kZWZpbmVkKSB7XG4gICAgaWYgKHRoaXMuaXNDb2xsYXBzaWJsZSAhPT0gdmFsdWUpIHtcbiAgICAgIHRoaXMuI19pc0NvbGxhcHNpYmxlID0gdmFsdWUgIT09IGZhbHNlO1xuXG4gICAgICAvKmlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgICBpZiAoIXRoaXMuI19pc0NvbGxhcHNpYmxlKSB7XG4gICAgICAgIHRoaXMudXBkYXRlRm9yRXhwYW5kZWQodHJ1ZSwgdHJ1ZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy4jY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGlzQ29sbGFwc2libGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuI19pc0NvbGxhcHNpYmxlO1xuICB9XG5cbiAgcHVibGljIGl0ZW1Sb2xlJDogT2JzZXJ2YWJsZTxTa3lSZXBlYXRlckl0ZW1Sb2xlc1R5cGU+O1xuXG4gIHB1YmxpYyByZW9yZGVyQnV0dG9uTGFiZWwgPSAnJztcblxuICBwdWJsaWMgcmVvcmRlclN0YXRlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgcHVibGljIHNsaWRlRGlyZWN0aW9uOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgcHVibGljIGFuaW1hdGlvbkRpc2FibGVkID0gZmFsc2U7XG5cbiAgQEhvc3RCaW5kaW5nKCdjbGFzcycpXG4gIHB1YmxpYyBnZXQgcmVwZWF0ZXJHcm91cENsYXNzKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuICdza3ktcmVwZWF0ZXItaXRlbS1ncm91cC0nICsgdGhpcy4jcmVwZWF0ZXJTZXJ2aWNlLnJlcGVhdGVyR3JvdXBJZDtcbiAgfVxuXG4gIEBWaWV3Q2hpbGQoJ2dyYWJIYW5kbGUnLCB7IHJlYWQ6IEVsZW1lbnRSZWYgfSlcbiAgcHVibGljIGdyYWJIYW5kbGU6IEVsZW1lbnRSZWYgfCB1bmRlZmluZWQ7XG5cbiAgQFZpZXdDaGlsZCgnaXRlbUNvbnRlbnRSZWYnLCB7IHJlYWQ6IEVsZW1lbnRSZWYgfSlcbiAgcHVibGljIGl0ZW1Db250ZW50UmVmOiBFbGVtZW50UmVmIHwgdW5kZWZpbmVkO1xuXG4gIEBWaWV3Q2hpbGQoJ2l0ZW1IZWFkZXJSZWYnLCB7IHJlYWQ6IEVsZW1lbnRSZWYgfSlcbiAgcHVibGljIGl0ZW1IZWFkZXJSZWY6IEVsZW1lbnRSZWYgfCB1bmRlZmluZWQ7XG5cbiAgQFZpZXdDaGlsZCgnaXRlbVJlZicsIHsgcmVhZDogRWxlbWVudFJlZiB9KVxuICBwdWJsaWMgaXRlbVJlZjogRWxlbWVudFJlZiB8IHVuZGVmaW5lZDtcblxuICBAQ29udGVudENoaWxkcmVuKFNreVJlcGVhdGVySXRlbUNvbnRlbnRDb21wb25lbnQpXG4gIHB1YmxpYyByZXBlYXRlckl0ZW1Db250ZW50Q29tcG9uZW50czpcbiAgICB8IFF1ZXJ5TGlzdDxTa3lSZXBlYXRlckl0ZW1Db250ZW50Q29tcG9uZW50PlxuICAgIHwgdW5kZWZpbmVkO1xuXG4gICNhZGFwdGVyU2VydmljZTogU2t5UmVwZWF0ZXJBZGFwdGVyU2VydmljZTtcbiAgI2NoYW5nZURldGVjdG9yOiBDaGFuZ2VEZXRlY3RvclJlZjtcbiAgI2VsZW1lbnRSZWY6IEVsZW1lbnRSZWY7XG4gICNpc0V4cGFuZGVkID0gdHJ1ZTtcbiAgI2tleWJvYXJkUmVvcmRlcmluZ0VuYWJsZWQgPSBmYWxzZTtcbiAgI25nVW5zdWJzY3JpYmUgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuICAjcmVvcmRlckNhbmNlbFRleHQgPSAnJztcbiAgI3Jlb3JkZXJDdXJyZW50SW5kZXggPSAtMTtcbiAgI3Jlb3JkZXJGaW5pc2hUZXh0ID0gJyc7XG4gICNyZW9yZGVySW5zdHJ1Y3Rpb25zID0gJyc7XG4gICNyZW9yZGVyTW92ZWRUZXh0ID0gJyc7XG4gICNyZW9yZGVyU3RhdGVEZXNjcmlwdGlvbiA9ICcnO1xuICAjcmVvcmRlclN0ZXBzID0gMDtcbiAgI3JlcGVhdGVyU2VydmljZTogU2t5UmVwZWF0ZXJTZXJ2aWNlO1xuICAjcmVzb3VyY2VTZXJ2aWNlOiBTa3lMaWJSZXNvdXJjZXNTZXJ2aWNlO1xuICAjX2lzQ29sbGFwc2libGUgPSB0cnVlO1xuICAjX2lzRGlzYWJsZWQ6IGJvb2xlYW4gfCB1bmRlZmluZWQgPSBmYWxzZTtcbiAgI19pc1NlbGVjdGVkOiBib29sZWFuIHwgdW5kZWZpbmVkO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHJlcGVhdGVyU2VydmljZTogU2t5UmVwZWF0ZXJTZXJ2aWNlLFxuICAgIGNoYW5nZURldGVjdG9yOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBhZGFwdGVyU2VydmljZTogU2t5UmVwZWF0ZXJBZGFwdGVyU2VydmljZSxcbiAgICBlbGVtZW50UmVmOiBFbGVtZW50UmVmLFxuICAgIHJlc291cmNlU2VydmljZTogU2t5TGliUmVzb3VyY2VzU2VydmljZVxuICApIHtcbiAgICB0aGlzLiNyZXBlYXRlclNlcnZpY2UgPSByZXBlYXRlclNlcnZpY2U7XG4gICAgdGhpcy4jY2hhbmdlRGV0ZWN0b3IgPSBjaGFuZ2VEZXRlY3RvcjtcbiAgICB0aGlzLiNhZGFwdGVyU2VydmljZSA9IGFkYXB0ZXJTZXJ2aWNlO1xuICAgIHRoaXMuI2VsZW1lbnRSZWYgPSBlbGVtZW50UmVmO1xuICAgIHRoaXMuI3Jlc291cmNlU2VydmljZSA9IHJlc291cmNlU2VydmljZTtcblxuICAgIHRoaXMuI3NsaWRlRm9yRXhwYW5kZWQoZmFsc2UpO1xuXG4gICAgb2JzZXJ2YWJsZUZvcmtKb2luKFtcbiAgICAgIHRoaXMuI3Jlc291cmNlU2VydmljZS5nZXRTdHJpbmcoJ3NreXV4X3JlcGVhdGVyX2l0ZW1fcmVvcmRlcl9jYW5jZWwnKSxcbiAgICAgIHRoaXMuI3Jlc291cmNlU2VydmljZS5nZXRTdHJpbmcoJ3NreXV4X3JlcGVhdGVyX2l0ZW1fcmVvcmRlcl9maW5pc2gnKSxcbiAgICAgIHRoaXMuI3Jlc291cmNlU2VydmljZS5nZXRTdHJpbmcoXG4gICAgICAgICdza3l1eF9yZXBlYXRlcl9pdGVtX3Jlb3JkZXJfaW5zdHJ1Y3Rpb25zJ1xuICAgICAgKSxcbiAgICAgIHRoaXMuI3Jlc291cmNlU2VydmljZS5nZXRTdHJpbmcoJ3NreXV4X3JlcGVhdGVyX2l0ZW1fcmVvcmRlcl9vcGVyYXRpb24nKSxcbiAgICAgIHRoaXMuI3Jlc291cmNlU2VydmljZS5nZXRTdHJpbmcoJ3NreXV4X3JlcGVhdGVyX2l0ZW1fcmVvcmRlcl9tb3ZlZCcpLFxuICAgIF0pXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy4jbmdVbnN1YnNjcmliZSkpXG4gICAgICAuc3Vic2NyaWJlKFxuICAgICAgICAoW1xuICAgICAgICAgIHJlb3JkZXJDYW5jZWxUZXh0LFxuICAgICAgICAgIHJlb3JkZXJGaW5pc2hUZXh0LFxuICAgICAgICAgIHJlb3JkZXJJbnN0cnVjdGlvbnNUZXh0LFxuICAgICAgICAgIHJlb3JkZXJPcGVyYXRpb25UZXh0LFxuICAgICAgICAgIHJlb3JkZXJNb3ZlZFRleHQsXG4gICAgICAgIF0pID0+IHtcbiAgICAgICAgICB0aGlzLiNyZW9yZGVyQ2FuY2VsVGV4dCA9IHJlb3JkZXJDYW5jZWxUZXh0O1xuICAgICAgICAgIHRoaXMuI3Jlb3JkZXJGaW5pc2hUZXh0ID0gcmVvcmRlckZpbmlzaFRleHQ7XG4gICAgICAgICAgdGhpcy4jcmVvcmRlclN0YXRlRGVzY3JpcHRpb24gPSByZW9yZGVySW5zdHJ1Y3Rpb25zVGV4dDtcbiAgICAgICAgICB0aGlzLiNyZW9yZGVySW5zdHJ1Y3Rpb25zID0gcmVvcmRlck9wZXJhdGlvblRleHQ7XG4gICAgICAgICAgdGhpcy4jcmVvcmRlck1vdmVkVGV4dCA9IHJlb3JkZXJNb3ZlZFRleHQ7XG4gICAgICAgICAgdGhpcy5yZW9yZGVyQnV0dG9uTGFiZWwgPSB0aGlzLiNyZW9yZGVySW5zdHJ1Y3Rpb25zO1xuICAgICAgICB9XG4gICAgICApO1xuXG4gICAgdGhpcy5jb250ZW50SWQgPSBgc2t5LXJlcGVhdGVyLWl0ZW0tY29udGVudC0keysrbmV4dENvbnRlbnRJZH1gO1xuICAgIHRoaXMuaXRlbVJvbGUkID0gdGhpcy4jcmVwZWF0ZXJTZXJ2aWNlLml0ZW1Sb2xlLmFzT2JzZXJ2YWJsZSgpO1xuICB9XG5cbiAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuI3JlcGVhdGVyU2VydmljZS5yZWdpc3Rlckl0ZW0odGhpcyk7XG4gICAgdGhpcy4jcmVwZWF0ZXJTZXJ2aWNlLmFjdGl2ZUl0ZW1DaGFuZ2VcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLiNuZ1Vuc3Vic2NyaWJlKSlcbiAgICAgIC5zdWJzY3JpYmUoKGl0ZW0pID0+IHtcbiAgICAgICAgY29uc3QgbmV3SXNBY3RpdmVWYWx1ZSA9IHRoaXMgPT09IGl0ZW07XG4gICAgICAgIGlmIChuZXdJc0FjdGl2ZVZhbHVlICE9PSB0aGlzLmlzQWN0aXZlKSB7XG4gICAgICAgICAgdGhpcy5pc0FjdGl2ZSA9IG5ld0lzQWN0aXZlVmFsdWU7XG4gICAgICAgICAgdGhpcy4jY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICB9XG5cbiAgcHVibGljIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmhhc0l0ZW1Db250ZW50ID0gISF0aGlzLnJlcGVhdGVySXRlbUNvbnRlbnRDb21wb25lbnRzPy5sZW5ndGg7XG4gICAgdGhpcy4jdXBkYXRlRXhwYW5kT25Db250ZW50Q2hhbmdlKCk7XG4gIH1cblxuICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5jb2xsYXBzZS5jb21wbGV0ZSgpO1xuICAgIHRoaXMuZXhwYW5kLmNvbXBsZXRlKCk7XG4gICAgdGhpcy5pbmxpbmVGb3JtQ2xvc2UuY29tcGxldGUoKTtcbiAgICB0aGlzLmlzU2VsZWN0ZWRDaGFuZ2UuY29tcGxldGUoKTtcblxuICAgIHRoaXMuI25nVW5zdWJzY3JpYmUubmV4dCgpO1xuICAgIHRoaXMuI25nVW5zdWJzY3JpYmUuY29tcGxldGUoKTtcblxuICAgIHRoaXMuI3JlcGVhdGVyU2VydmljZS51bnJlZ2lzdGVySXRlbSh0aGlzKTtcbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ2tleWRvd24nLCBbJyRldmVudCddKVxuICBwdWJsaWMgb25LZXlkb3duKCRldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgIGlmIChcbiAgICAgIFsnICcsICdFbnRlcicsICdIb21lJywgJ0VuZCcsICdBcnJvd1VwJywgJ0Fycm93RG93biddLmluY2x1ZGVzKCRldmVudC5rZXkpXG4gICAgKSB7XG4gICAgICBpZiAoXG4gICAgICAgICgkZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50KS5tYXRjaGVzKFxuICAgICAgICAgICdpbnB1dCwgdGV4dGFyZWEsIHNlbGVjdCwgb3B0aW9uLCBbY29udGVudGVkaXRhYmxlXSwgW2NvbnRlbnRlZGl0YWJsZV0gKidcbiAgICAgICAgKVxuICAgICAgKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgICRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgbGV0IGFjdGl2YXRlSXRlbTogU2t5UmVwZWF0ZXJJdGVtQ29tcG9uZW50IHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkO1xuICAgICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICAgIGlmIChbJyAnLCAnRW50ZXInXS5pbmNsdWRlcygkZXZlbnQua2V5KSkge1xuICAgICAgICBpZiAodGhpcy5zZWxlY3RhYmxlKSB7XG4gICAgICAgICAgdGhpcy5pc1NlbGVjdGVkID0gIXRoaXMuaXNTZWxlY3RlZDtcbiAgICAgICAgfVxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXRoaXMtYWxpYXNcbiAgICAgICAgYWN0aXZhdGVJdGVtID0gdGhpcztcbiAgICAgIH1cbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgICBpZiAoWydIb21lJywgJ0VuZCddLmluY2x1ZGVzKCRldmVudC5rZXkpKSB7XG4gICAgICAgIGNvbnN0IGl0ZW1zID0gdGhpcy4jcmVwZWF0ZXJTZXJ2aWNlLml0ZW1zLmZpbHRlcihcbiAgICAgICAgICAoaXRlbSkgPT4gIWl0ZW0uZGlzYWJsZWRcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKCRldmVudC5rZXkgPT09ICdIb21lJykge1xuICAgICAgICAgIGFjdGl2YXRlSXRlbSA9IGl0ZW1zLnNoaWZ0KCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYWN0aXZhdGVJdGVtID0gaXRlbXMucG9wKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgICBpZiAoWydBcnJvd1VwJywgJ0Fycm93RG93biddLmluY2x1ZGVzKCRldmVudC5rZXkpKSB7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRJbmRleCA9IHRoaXMuI3JlcGVhdGVyU2VydmljZS5pdGVtcy5maW5kSW5kZXgoXG4gICAgICAgICAgKGl0ZW0pID0+IGl0ZW0gPT09IHRoaXNcbiAgICAgICAgKTtcbiAgICAgICAgbGV0IHNsaWNlRnJvbTogbnVtYmVyO1xuICAgICAgICBsZXQgc2xpY2VUbzogbnVtYmVyIHwgdW5kZWZpbmVkO1xuICAgICAgICBpZiAoJGV2ZW50LmtleSA9PT0gJ0Fycm93VXAnKSB7XG4gICAgICAgICAgc2xpY2VGcm9tID0gMDtcbiAgICAgICAgICBzbGljZVRvID0gY3VycmVudEluZGV4O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHNsaWNlRnJvbSA9IGN1cnJlbnRJbmRleCArIDE7XG4gICAgICAgICAgc2xpY2VUbyA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBpdGVtcyA9IHRoaXMuI3JlcGVhdGVyU2VydmljZS5pdGVtc1xuICAgICAgICAgIC5zbGljZShzbGljZUZyb20sIHNsaWNlVG8pXG4gICAgICAgICAgLmZpbHRlcigoaXRlbSkgPT4gIWl0ZW0uZGlzYWJsZWQpO1xuICAgICAgICBhY3RpdmF0ZUl0ZW0gPSAkZXZlbnQua2V5ID09PSAnQXJyb3dVcCcgPyBpdGVtcy5wb3AoKSA6IGl0ZW1zLnNoaWZ0KCk7XG4gICAgICAgIGlmICghYWN0aXZhdGVJdGVtKSB7XG4gICAgICAgICAgLy8gV3JhcCBhcm91bmQuXG4gICAgICAgICAgaWYgKCRldmVudC5rZXkgPT09ICdBcnJvd0Rvd24nKSB7XG4gICAgICAgICAgICBzbGljZUZyb20gPSAwO1xuICAgICAgICAgICAgc2xpY2VUbyA9IGN1cnJlbnRJbmRleDtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc2xpY2VGcm9tID0gY3VycmVudEluZGV4ICsgMTtcbiAgICAgICAgICAgIHNsaWNlVG8gPSB1bmRlZmluZWQ7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IGl0ZW1zID0gdGhpcy4jcmVwZWF0ZXJTZXJ2aWNlLml0ZW1zXG4gICAgICAgICAgICAuc2xpY2Uoc2xpY2VGcm9tLCBzbGljZVRvKVxuICAgICAgICAgICAgLmZpbHRlcigoaXRlbSkgPT4gIWl0ZW0uZGlzYWJsZWQpO1xuICAgICAgICAgIGFjdGl2YXRlSXRlbSA9ICRldmVudC5rZXkgPT09ICdBcnJvd1VwJyA/IGl0ZW1zLnBvcCgpIDogaXRlbXMuc2hpZnQoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICAgIGlmIChhY3RpdmF0ZUl0ZW0gJiYgIWFjdGl2YXRlSXRlbS5pc0FjdGl2ZSkge1xuICAgICAgICB0aGlzLiNyZXBlYXRlclNlcnZpY2UuYWN0aXZhdGVJdGVtKGFjdGl2YXRlSXRlbSk7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAhKGFjdGl2YXRlSXRlbS4jZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50IGFzIEVsZW1lbnQpLm1hdGNoZXMoXG4gICAgICAgICAgICAnOmZvY3VzLXdpdGhpbidcbiAgICAgICAgICApXG4gICAgICAgICkge1xuICAgICAgICAgIGFjdGl2YXRlSXRlbS5pdGVtUmVmPy5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwdWJsaWMgaGVhZGVyQ2xpY2soKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaXNDb2xsYXBzaWJsZSkge1xuICAgICAgdGhpcy51cGRhdGVGb3JFeHBhbmRlZCghdGhpcy5pc0V4cGFuZGVkLCB0cnVlKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgY2hldnJvbkRpcmVjdGlvbkNoYW5nZShkaXJlY3Rpb246IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMudXBkYXRlRm9yRXhwYW5kZWQoZGlyZWN0aW9uID09PSAndXAnLCB0cnVlKTtcbiAgfVxuXG4gIHB1YmxpYyBvblJlcGVhdGVySXRlbUNsaWNrKGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgLy8gT25seSBhY3RpdmF0ZSBpdGVtIGlmIGNsaWNraW5nIG9uIHRoZSB0aXRsZSwgY29udGVudCwgb3IgcGFyZW50IGl0ZW0gZGl2LlxuICAgIC8vIFRoaXMgd2lsbCBhdm9pZCBhY2NpZGVudGFsIGFjdGl2YXRpb25zIHdoZW4gY2xpY2tpbmcgaW5zaWRlIGludGVyYWN0aXZlIGVsZW1lbnRzIGxpa2VcbiAgICAvLyB0aGUgZXhwYW5kL2NvbGxhcHNlIGNoZXZyb24sIGRyb3Bkb3duLCBpbmxpbmUtZGVsZXRlLCBldGMuLi5cbiAgICBpZiAoXG4gICAgICBldmVudC50YXJnZXQgPT09IHRoaXMuaXRlbVJlZj8ubmF0aXZlRWxlbWVudCB8fFxuICAgICAgdGhpcy5pdGVtQ29udGVudFJlZj8ubmF0aXZlRWxlbWVudC5jb250YWlucyhldmVudC50YXJnZXQpIHx8XG4gICAgICB0aGlzLml0ZW1IZWFkZXJSZWY/Lm5hdGl2ZUVsZW1lbnQuY29udGFpbnMoZXZlbnQudGFyZ2V0KVxuICAgICkge1xuICAgICAgdGhpcy4jcmVwZWF0ZXJTZXJ2aWNlLmFjdGl2YXRlSXRlbSh0aGlzKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgdXBkYXRlRm9yRXhwYW5kZWQodmFsdWU6IGJvb2xlYW4sIGFuaW1hdGU6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pc0NvbGxhcHNpYmxlID09PSBmYWxzZSAmJiB2YWx1ZSA9PT0gZmFsc2UpIHtcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgYFNldHRpbmcgaXNFeHBhbmRlZCB0byBmYWxzZSB3aGVuIHRoZSByZXBlYXRlciBpdGVtIGlzIG5vdCBjb2xsYXBzaWJsZVxuICAgICAgICB3aWxsIGhhdmUgbm8gZWZmZWN0LmBcbiAgICAgICk7XG4gICAgfSBlbHNlIGlmICh0aGlzLiNpc0V4cGFuZGVkICE9PSB2YWx1ZSkge1xuICAgICAgdGhpcy4jaXNFeHBhbmRlZCA9IHZhbHVlO1xuXG4gICAgICBpZiAodGhpcy4jaXNFeHBhbmRlZCkge1xuICAgICAgICB0aGlzLmV4cGFuZC5lbWl0KCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmNvbGxhcHNlLmVtaXQoKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy4jcmVwZWF0ZXJTZXJ2aWNlLm9uSXRlbUNvbGxhcHNlU3RhdGVDaGFuZ2UodGhpcyk7XG4gICAgICB0aGlzLiNzbGlkZUZvckV4cGFuZGVkKGFuaW1hdGUpO1xuICAgICAgdGhpcy4jY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIG9uQ2hlY2tib3hDaGFuZ2UodmFsdWU6IFNreUNoZWNrYm94Q2hhbmdlKTogdm9pZCB7XG4gICAgdGhpcy5pc1NlbGVjdGVkID0gdmFsdWUuY2hlY2tlZDtcbiAgfVxuXG4gIHB1YmxpYyBvbklubGluZUZvcm1DbG9zZShpbmxpbmVGb3JtQ2xvc2VBcmdzOiBTa3lJbmxpbmVGb3JtQ2xvc2VBcmdzKTogdm9pZCB7XG4gICAgdGhpcy5pbmxpbmVGb3JtQ2xvc2UuZW1pdChpbmxpbmVGb3JtQ2xvc2VBcmdzKTtcbiAgfVxuXG4gIHB1YmxpYyBtb3ZlVG9Ub3AoZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgdGhpcy4jYWRhcHRlclNlcnZpY2UubW92ZUl0ZW1VcCh0aGlzLiNlbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsIHRydWUpO1xuICAgIHRoaXMuI2FkYXB0ZXJTZXJ2aWNlLmZvY3VzRWxlbWVudChldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQpO1xuICAgIHRoaXMuI3JlcGVhdGVyU2VydmljZS5yZWdpc3Rlck9yZGVyQ2hhbmdlKCk7XG4gIH1cblxuICBwdWJsaWMgb25SZW9yZGVySGFuZGxlS2V5RG93bihldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgIC8qaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICBpZiAoZXZlbnQua2V5KSB7XG4gICAgICBzd2l0Y2ggKGV2ZW50LmtleS50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICAgIGNhc2UgJyAnOlxuICAgICAgICBjYXNlICdlbnRlcic6XG4gICAgICAgICAgdGhpcy4ja2V5Ym9hcmRUb2dnbGVSZW9yZGVyKCk7XG4gICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlICdlc2NhcGUnOlxuICAgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgICAgICAgaWYgKHRoaXMuI2tleWJvYXJkUmVvcmRlcmluZ0VuYWJsZWQpIHtcbiAgICAgICAgICAgIHRoaXMuI2tleWJvYXJkUmVvcmRlcmluZ0VuYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuI3JldmVydFJlb3JkZXJTdGVwcygpO1xuICAgICAgICAgICAgdGhpcy5yZW9yZGVyQnV0dG9uTGFiZWwgPVxuICAgICAgICAgICAgICB0aGlzLiNyZW9yZGVyQ2FuY2VsVGV4dCArICcgJyArIHRoaXMuI3Jlb3JkZXJJbnN0cnVjdGlvbnM7XG4gICAgICAgICAgICB0aGlzLiNhZGFwdGVyU2VydmljZS5mb2N1c0VsZW1lbnQoZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50KTtcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAnYXJyb3d1cCc6XG4gICAgICAgICAgaWYgKHRoaXMuI2tleWJvYXJkUmVvcmRlcmluZ0VuYWJsZWQpIHtcbiAgICAgICAgICAgIHRoaXMuI2tleWJvYXJkUmVvcmRlclVwKCk7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgICB0aGlzLiNyZXBlYXRlclNlcnZpY2UucmVnaXN0ZXJPcmRlckNoYW5nZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlICdhcnJvd2Rvd24nOlxuICAgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgICAgICAgaWYgKHRoaXMuI2tleWJvYXJkUmVvcmRlcmluZ0VuYWJsZWQpIHtcbiAgICAgICAgICAgIHRoaXMuI2tleWJvYXJkUmVvcmRlckRvd24oKTtcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgIHRoaXMuI3JlcGVhdGVyU2VydmljZS5yZWdpc3Rlck9yZGVyQ2hhbmdlKCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgJ2Fycm93bGVmdCc6XG4gICAgICAgIGNhc2UgJ2Fycm93cmlnaHQnOlxuICAgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgICAgICAgaWYgKHRoaXMuI2tleWJvYXJkUmVvcmRlcmluZ0VuYWJsZWQpIHtcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwdWJsaWMgb25SZW9yZGVySGFuZGxlQmx1cihldmVudDogYW55KTogdm9pZCB7XG4gICAgdGhpcy4ja2V5Ym9hcmRSZW9yZGVyaW5nRW5hYmxlZCA9IGZhbHNlO1xuICAgIHRoaXMuI3JldmVydFJlb3JkZXJTdGVwcygpO1xuICAgIHRoaXMucmVvcmRlckJ1dHRvbkxhYmVsID0gdGhpcy4jcmVvcmRlckluc3RydWN0aW9ucztcbiAgICB0aGlzLnJlb3JkZXJTdGF0ZSA9IHVuZGVmaW5lZDtcbiAgfVxuXG4gICNzbGlkZUZvckV4cGFuZGVkKGFuaW1hdGU6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLmFuaW1hdGlvbkRpc2FibGVkID0gIWFuaW1hdGU7XG4gICAgdGhpcy5zbGlkZURpcmVjdGlvbiA9IHRoaXMuaXNFeHBhbmRlZCA/ICdkb3duJyA6ICd1cCc7XG4gIH1cblxuICAja2V5Ym9hcmRSZW9yZGVyVXAoKTogdm9pZCB7XG4gICAgY29uc3QgbmV3SW5kZXggPSB0aGlzLiNhZGFwdGVyU2VydmljZS5tb3ZlSXRlbVVwKFxuICAgICAgdGhpcy4jZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50XG4gICAgKTtcbiAgICBpZiAobmV3SW5kZXggIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy4jcmVvcmRlckN1cnJlbnRJbmRleCA9IG5ld0luZGV4O1xuICAgICAgdGhpcy4jcmVvcmRlclN0ZXBzLS07XG4gICAgICB0aGlzLiNhZGFwdGVyU2VydmljZS5mb2N1c0VsZW1lbnQodGhpcy5ncmFiSGFuZGxlKTtcbiAgICAgIHRoaXMuI2tleWJvYXJkUmVvcmRlcmluZ0VuYWJsZWQgPSB0cnVlO1xuICAgICAgdGhpcy5yZW9yZGVyQnV0dG9uTGFiZWwgPSBgJHt0aGlzLiNyZW9yZGVyTW92ZWRUZXh0fSAke1xuICAgICAgICB0aGlzLiNyZW9yZGVyQ3VycmVudEluZGV4ICsgMVxuICAgICAgfWA7XG4gICAgfVxuICB9XG5cbiAgI2tleWJvYXJkUmVvcmRlckRvd24oKTogdm9pZCB7XG4gICAgY29uc3QgbmV3SW5kZXggPSB0aGlzLiNhZGFwdGVyU2VydmljZS5tb3ZlSXRlbURvd24oXG4gICAgICB0aGlzLiNlbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnRcbiAgICApO1xuICAgIGlmIChuZXdJbmRleCkge1xuICAgICAgdGhpcy4jcmVvcmRlckN1cnJlbnRJbmRleCA9IG5ld0luZGV4O1xuICAgICAgdGhpcy4jcmVvcmRlclN0ZXBzKys7XG4gICAgICB0aGlzLiNhZGFwdGVyU2VydmljZS5mb2N1c0VsZW1lbnQodGhpcy5ncmFiSGFuZGxlKTtcbiAgICAgIHRoaXMuI2tleWJvYXJkUmVvcmRlcmluZ0VuYWJsZWQgPSB0cnVlO1xuICAgICAgdGhpcy5yZW9yZGVyQnV0dG9uTGFiZWwgPSBgJHt0aGlzLiNyZW9yZGVyTW92ZWRUZXh0fSAke1xuICAgICAgICB0aGlzLiNyZW9yZGVyQ3VycmVudEluZGV4ICsgMVxuICAgICAgfWA7XG4gICAgfVxuICB9XG5cbiAgI2tleWJvYXJkVG9nZ2xlUmVvcmRlcigpOiB2b2lkIHtcbiAgICB0aGlzLiNrZXlib2FyZFJlb3JkZXJpbmdFbmFibGVkID0gIXRoaXMuI2tleWJvYXJkUmVvcmRlcmluZ0VuYWJsZWQ7XG4gICAgdGhpcy4jcmVvcmRlclN0ZXBzID0gMDtcblxuICAgIGlmICh0aGlzLiNrZXlib2FyZFJlb3JkZXJpbmdFbmFibGVkKSB7XG4gICAgICB0aGlzLnJlb3JkZXJTdGF0ZSA9IHRoaXMuI3Jlb3JkZXJTdGF0ZURlc2NyaXB0aW9uO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBUT0RPOiBOZWVkcyBpbXByb3ZlbWVudCB0byBiZSBsb2NhbGl6ZWRcbiAgICAgIHRoaXMucmVvcmRlclN0YXRlID0gYCR7dGhpcy4jcmVvcmRlckZpbmlzaFRleHR9ICR7XG4gICAgICAgIHRoaXMuI3Jlb3JkZXJDdXJyZW50SW5kZXggKyAxXG4gICAgICB9ICR7dGhpcy4jcmVvcmRlckluc3RydWN0aW9uc31gO1xuICAgICAgdGhpcy4jcmVvcmRlckN1cnJlbnRJbmRleCA9IC0xO1xuICAgIH1cbiAgfVxuXG4gICNyZXZlcnRSZW9yZGVyU3RlcHMoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuI3Jlb3JkZXJTdGVwcyA8IDApIHtcbiAgICAgIHRoaXMuI2FkYXB0ZXJTZXJ2aWNlLm1vdmVJdGVtRG93bihcbiAgICAgICAgdGhpcy4jZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LFxuICAgICAgICBNYXRoLmFicyh0aGlzLiNyZW9yZGVyU3RlcHMpXG4gICAgICApO1xuICAgIH0gZWxzZSBpZiAodGhpcy4jcmVvcmRlclN0ZXBzID4gMCkge1xuICAgICAgdGhpcy4jYWRhcHRlclNlcnZpY2UubW92ZUl0ZW1VcChcbiAgICAgICAgdGhpcy4jZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LFxuICAgICAgICBmYWxzZSxcbiAgICAgICAgdGhpcy4jcmVvcmRlclN0ZXBzXG4gICAgICApO1xuICAgIH1cbiAgICB0aGlzLiNyZXBlYXRlclNlcnZpY2UucmVnaXN0ZXJPcmRlckNoYW5nZSgpO1xuICB9XG5cbiAgI3VwZGF0ZUV4cGFuZE9uQ29udGVudENoYW5nZSgpOiB2b2lkIHtcbiAgICB0aGlzLnJlcGVhdGVySXRlbUNvbnRlbnRDb21wb25lbnRzPy5jaGFuZ2VzXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy4jbmdVbnN1YnNjcmliZSkpXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgdGhpcy5oYXNJdGVtQ29udGVudCA9ICEhdGhpcy5yZXBlYXRlckl0ZW1Db250ZW50Q29tcG9uZW50cz8ubGVuZ3RoO1xuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgICAgICB0aGlzLmlzQ29sbGFwc2libGUgPVxuICAgICAgICAgIHRoaXMuaGFzSXRlbUNvbnRlbnQgJiYgdGhpcy4jcmVwZWF0ZXJTZXJ2aWNlLmV4cGFuZE1vZGUgIT09ICdub25lJztcbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICAgICAgaWYgKHRoaXMuI3JlcGVhdGVyU2VydmljZS5leHBhbmRNb2RlID09PSAnc2luZ2xlJykge1xuICAgICAgICAgIHRoaXMuI3JlcGVhdGVyU2VydmljZS5vbkl0ZW1Db2xsYXBzZVN0YXRlQ2hhbmdlKHRoaXMpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgfVxufVxuIiwiPGRpdlxuICBjbGFzcz1cInNreS1yZXBlYXRlci1pdGVtIHNreS1wYWRkaW5nLWV2ZW4tZGVmYXVsdFwiXG4gIFthdHRyLmFyaWEtbGFiZWxdPVwiaXRlbU5hbWVcIlxuICBbYXR0ci5hcmlhLXNlbGVjdGVkXT1cInNlbGVjdGFibGUgPyAhIWlzU2VsZWN0ZWQgOiB1bmRlZmluZWRcIlxuICBbYXR0ci5yb2xlXT1cIihpdGVtUm9sZSQgfCBhc3luYyk/Lml0ZW1cIlxuICBbYXR0ci50YWJJbmRleF09XCJ0YWJpbmRleFwiXG4gIFtuZ0NsYXNzXT1cIntcbiAgICAnc2t5LXJlcGVhdGVyLWl0ZW0tYWN0aXZlJzogaXNBY3RpdmUsXG4gICAgJ3NreS1yZXBlYXRlci1pdGVtLWNvbGxhcHNpYmxlJzogaXNDb2xsYXBzaWJsZSxcbiAgICAnc2t5LXJlcGVhdGVyLWl0ZW0tc2VsZWN0ZWQnOiBpc1NlbGVjdGVkXG4gIH1cIlxuICAoY2xpY2spPVwib25SZXBlYXRlckl0ZW1DbGljaygkZXZlbnQpXCJcbiAgI2l0ZW1SZWZcbj5cbiAgPGRpdiAjaW5saW5lRGVsZXRlPlxuICAgIDxuZy1jb250ZW50IHNlbGVjdD1cInNreS1pbmxpbmUtZGVsZXRlXCI+PC9uZy1jb250ZW50PlxuICA8L2Rpdj5cblxuICA8bmctY29udGFpbmVyICpuZ0lmPVwiaW5saW5lRm9ybVRlbXBsYXRlXCI+XG4gICAgPHNreS1pbmxpbmUtZm9ybVxuICAgICAgW2NvbmZpZ109XCJpbmxpbmVGb3JtQ29uZmlnXCJcbiAgICAgIFtzaG93Rm9ybV09XCJzaG93SW5saW5lRm9ybVwiXG4gICAgICBbdGVtcGxhdGVdPVwiaW5saW5lRm9ybVRlbXBsYXRlXCJcbiAgICAgIChjbG9zZSk9XCJvbklubGluZUZvcm1DbG9zZSgkZXZlbnQpXCJcbiAgICA+XG4gICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwic2t5UmVwZWF0ZXJJdGVtTGVmdFwiPjwvbmctY29udGFpbmVyPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInNreVJlcGVhdGVySXRlbVJpZ2h0XCI+PC9uZy1jb250YWluZXI+XG4gICAgPC9za3ktaW5saW5lLWZvcm0+XG4gIDwvbmctY29udGFpbmVyPlxuXG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCIhaW5saW5lRm9ybVRlbXBsYXRlXCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInNreVJlcGVhdGVySXRlbUxlZnRcIj48L25nLWNvbnRhaW5lcj5cbiAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwic2t5UmVwZWF0ZXJJdGVtUmlnaHRcIj48L25nLWNvbnRhaW5lcj5cbiAgPC9uZy1jb250YWluZXI+XG48L2Rpdj5cblxuPG5nLXRlbXBsYXRlICNza3lSZXBlYXRlckl0ZW1MZWZ0PlxuICA8ZGl2XG4gICAgW2F0dHIucm9sZV09XCIhc2hvd0lubGluZUZvcm0gPyAoaXRlbVJvbGUkIHwgYXN5bmMpPy5jb250ZW50IDogdW5kZWZpbmVkXCJcbiAgICBjbGFzcz1cInNreS1yZXBlYXRlci1pdGVtLWxlZnRcIlxuICA+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInJlb3JkZXJhYmxlXCI+XG4gICAgICA8c3BhblxuICAgICAgICBhcmlhLWxpdmU9XCJhc3NlcnRpdmVcIlxuICAgICAgICBjbGFzcz1cInNreS1zY3JlZW4tcmVhZGVyLW9ubHlcIlxuICAgICAgICBbaWRdPVwiY29udGVudElkICsgJy1yZW9yZGVyLXN0YXRlJ1wiXG4gICAgICA+XG4gICAgICAgIHt7IHJlb3JkZXJTdGF0ZSB9fVxuICAgICAgPC9zcGFuPlxuICAgICAgPHNwYW5cbiAgICAgICAgY2xhc3M9XCJza3ktc2NyZWVuLXJlYWRlci1vbmx5XCJcbiAgICAgICAgW2lkXT1cImNvbnRlbnRJZCArICctcmVvcmRlci1pbnN0cnVjdGlvbnMnXCJcbiAgICAgICAgPnt7IHJlb3JkZXJCdXR0b25MYWJlbCB9fTwvc3BhblxuICAgICAgPlxuICAgICAgPGJ1dHRvblxuICAgICAgICBjbGFzcz1cInNreS1idG4gc2t5LXRpbGUtdG9vbHMtY29udHJvbCBza3ktcmVwZWF0ZXItaXRlbS1ncmFiLWhhbmRsZVwiXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICBbYXR0ci5hcmlhLWRlc2NyaWJlZGJ5XT1cImNvbnRlbnRJZCArICctcmVvcmRlci1pbnN0cnVjdGlvbnMnXCJcbiAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJcbiAgICAgICAgICBpdGVtTmFtZVxuICAgICAgICAgICAgPyAoJ3NreXV4X3JlcGVhdGVyX2l0ZW1fcmVvcmRlcl9sYWJlbCcgfCBza3lMaWJSZXNvdXJjZXMgOiBpdGVtTmFtZSlcbiAgICAgICAgICAgIDogKCdza3l1eF9yZXBlYXRlcl9pdGVtX3Jlb3JkZXJfbGFiZWxfZGVmYXVsdCcgfCBza3lMaWJSZXNvdXJjZXMpXG4gICAgICAgIFwiXG4gICAgICAgIChibHVyKT1cIm9uUmVvcmRlckhhbmRsZUJsdXIoJGV2ZW50KVwiXG4gICAgICAgIChrZXlkb3duKT1cIm9uUmVvcmRlckhhbmRsZUtleURvd24oJGV2ZW50KVwiXG4gICAgICAgICNncmFiSGFuZGxlXG4gICAgICA+XG4gICAgICAgIDxza3ktaWNvbiBpY29uPVwiYXJyb3dzLXZcIj48L3NreS1pY29uPlxuICAgICAgPC9idXR0b24+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPHNreS1jaGVja2JveFxuICAgICAgKm5nSWY9XCJzZWxlY3RhYmxlXCJcbiAgICAgIGNsYXNzPVwic2t5LXJlcGVhdGVyLWl0ZW0tY2hlY2tib3hcIlxuICAgICAgW2NoZWNrZWRdPVwiaXNTZWxlY3RlZFwiXG4gICAgICBbbGFiZWxdPVwiXG4gICAgICAgIGl0ZW1OYW1lXG4gICAgICAgICAgPyAoJ3NreXV4X3JlcGVhdGVyX2l0ZW1fY2hlY2tib3hfbGFiZWwnIHwgc2t5TGliUmVzb3VyY2VzIDogaXRlbU5hbWUpXG4gICAgICAgICAgOiAoJ3NreXV4X3JlcGVhdGVyX2l0ZW1fY2hlY2tib3hfbGFiZWxfZGVmYXVsdCcgfCBza3lMaWJSZXNvdXJjZXMpXG4gICAgICBcIlxuICAgICAgKGNoYW5nZSk9XCJvbkNoZWNrYm94Q2hhbmdlKCRldmVudClcIlxuICAgID5cbiAgICA8L3NreS1jaGVja2JveD5cbiAgICA8ZGl2XG4gICAgICBjbGFzcz1cInNreS1yZXBlYXRlci1pdGVtLWNvbnRleHQtbWVudVwiXG4gICAgICBbaGlkZGVuXT1cImNvbnRleHRNZW51RWwuY2hpbGRyZW4ubGVuZ3RoID09PSAwXCJcbiAgICAgICNjb250ZXh0TWVudUVsXG4gICAgPlxuICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwic2t5LXJlcGVhdGVyLWl0ZW0tY29udGV4dC1tZW51XCI+PC9uZy1jb250ZW50PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjc2t5UmVwZWF0ZXJJdGVtUmlnaHQ+XG4gIDxkaXYgY2xhc3M9XCJza3ktcmVwZWF0ZXItaXRlbS1yaWdodFwiICNpdGVtSGVhZGVyUmVmPlxuICAgIDxkaXZcbiAgICAgIGNsYXNzPVwic2t5LXJlcGVhdGVyLWl0ZW0taGVhZGVyXCJcbiAgICAgIFthdHRyLnJvbGVdPVwiKGl0ZW1Sb2xlJCB8IGFzeW5jKT8udGl0bGVcIlxuICAgICAgW2hpZGRlbl09XCJ0aXRsZVJlZi5jaGlsZHJlbi5sZW5ndGggPT09IDBcIlxuICAgICAgKGNsaWNrKT1cImhlYWRlckNsaWNrKClcIlxuICAgID5cbiAgICAgIDxkaXYgY2xhc3M9XCJza3ktcmVwZWF0ZXItaXRlbS10aXRsZSBza3ktZm9udC1lbXBoYXNpemVkXCIgI3RpdGxlUmVmPlxuICAgICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJza3ktcmVwZWF0ZXItaXRlbS10aXRsZVwiPjwvbmctY29udGVudD5cbiAgICAgIDwvZGl2PlxuICAgICAgPGJ1dHRvblxuICAgICAgICAqbmdJZj1cInJlb3JkZXJhYmxlXCJcbiAgICAgICAgY2xhc3M9XCJza3ktYnRuIHNreS1idG4tbGluayBza3ktcmVwZWF0ZXItaXRlbS1yZW9yZGVyLXRvcFwiXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIlxuICAgICAgICAgIGl0ZW1OYW1lXG4gICAgICAgICAgICA/ICgnc2t5dXhfcmVwZWF0ZXJfaXRlbV9yZW9yZGVyX3RvcF9sYWJlbCdcbiAgICAgICAgICAgICAgfCBza3lMaWJSZXNvdXJjZXMgOiBpdGVtTmFtZSlcbiAgICAgICAgICAgIDogKCdza3l1eF9yZXBlYXRlcl9pdGVtX3Jlb3JkZXJfdG9wX2xhYmVsX2RlZmF1bHQnXG4gICAgICAgICAgICAgIHwgc2t5TGliUmVzb3VyY2VzKVxuICAgICAgICBcIlxuICAgICAgICAoY2xpY2spPVwibW92ZVRvVG9wKCRldmVudClcIlxuICAgICAgPlxuICAgICAgICA8c2t5LWljb24gaWNvbj1cImFycm93LWNpcmNsZS11cFwiPjwvc2t5LWljb24+XG4gICAgICAgIHt7ICdza3l1eF9yZXBlYXRlcl9pdGVtX3Jlb3JkZXJfdG9wJyB8IHNreUxpYlJlc291cmNlcyB9fVxuICAgICAgPC9idXR0b24+XG4gICAgICA8ZGl2ICpuZ0lmPVwiaXNDb2xsYXBzaWJsZVwiIGNsYXNzPVwic2t5LXJlcGVhdGVyLWl0ZW0tY2hldnJvblwiPlxuICAgICAgICA8c2t5LWNoZXZyb25cbiAgICAgICAgICBbYXJpYUNvbnRyb2xzXT1cImNvbnRlbnRJZFwiXG4gICAgICAgICAgW2FyaWFMYWJlbF09XCJcbiAgICAgICAgICAgIGl0ZW1OYW1lXG4gICAgICAgICAgICAgID8gaXNFeHBhbmRlZFxuICAgICAgICAgICAgICAgID8gKCdza3l1eF9yZXBlYXRlcl9pdGVtX2V4cGFuZCcgfCBza3lMaWJSZXNvdXJjZXMgOiBpdGVtTmFtZSlcbiAgICAgICAgICAgICAgICA6ICgnc2t5dXhfcmVwZWF0ZXJfaXRlbV9jb2xsYXBzZScgfCBza3lMaWJSZXNvdXJjZXMgOiBpdGVtTmFtZSlcbiAgICAgICAgICAgICAgOiBpc0V4cGFuZGVkXG4gICAgICAgICAgICAgID8gKCdza3l1eF9yZXBlYXRlcl9pdGVtX2V4cGFuZF9kZWZhdWx0JyB8IHNreUxpYlJlc291cmNlcylcbiAgICAgICAgICAgICAgOiAoJ3NreXV4X3JlcGVhdGVyX2l0ZW1fY29sbGFwc2VfZGVmYXVsdCcgfCBza3lMaWJSZXNvdXJjZXMpXG4gICAgICAgICAgXCJcbiAgICAgICAgICBbZGlyZWN0aW9uXT1cImlzRXhwYW5kZWQgPyAndXAnIDogJ2Rvd24nXCJcbiAgICAgICAgICAoZGlyZWN0aW9uQ2hhbmdlKT1cImNoZXZyb25EaXJlY3Rpb25DaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgID5cbiAgICAgICAgPC9za3ktY2hldnJvbj5cbiAgICAgIDwvZGl2PlxuICAgICAgPCEtLSBVc2VkIGZvciB3aGVuIHRoZSBjaGV2cm9uIGlzIGhpZGRlbiB0byBlbnN1cmUgdGhhdCB0aGUgcmlnaHQgc2lkZSBpcyB0aGUgc2FtZSBoZWlnaHQgYXMgdGhlIGxlZnQuLS0+XG4gICAgICA8ZGl2XG4gICAgICAgICpuZ0lmPVwiIWlzQ29sbGFwc2libGUgJiYgIWNvbnRleHRNZW51XCJcbiAgICAgICAgY2xhc3M9XCJza3ktcmVwZWF0ZXItaXRlbS1jaGV2cm9uLXBsYWNlaG9sZGVyXCJcbiAgICAgID48L2Rpdj5cbiAgICAgIDwhLS0gVXNlZCB0byBlbnN1cmUgdGhhdCB0aGUgcmlnaHQgc2lkZSBpcyB0aGUgc2FtZSBoZWlnaHQgYXMgdGhlIGxlZnQuLS0+XG4gICAgICA8ZGl2XG4gICAgICAgICpuZ0lmPVwiY29udGV4dE1lbnVcIlxuICAgICAgICBjbGFzcz1cInNreS1yZXBlYXRlci1pdGVtLWNoZXZyb24tcGxhY2Vob2xkZXItd2l0aC1jb250ZXh0XCJcbiAgICAgID48L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2XG4gICAgICBjbGFzcz1cInNreS1yZXBlYXRlci1pdGVtLWNvbnRlbnRcIlxuICAgICAgW2lkXT1cImNvbnRlbnRJZFwiXG4gICAgICBbQC5kaXNhYmxlZF09XCJhbmltYXRpb25EaXNhYmxlZFwiXG4gICAgICBbQHNreUFuaW1hdGlvblNsaWRlXT1cInNsaWRlRGlyZWN0aW9uXCJcbiAgICAgICNpdGVtQ29udGVudFJlZlxuICAgICAgW2F0dHIucm9sZV09XCIoaXRlbVJvbGUkIHwgYXN5bmMpPy5jb250ZW50XCJcbiAgICA+XG4gICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJza3ktcmVwZWF0ZXItaXRlbS1jb250ZW50XCI+PC9uZy1jb250ZW50PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
|