@fundamental-ngx/core 0.44.0-rc.2 → 0.44.0-rc.3
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/breadcrumb/breadcrumb.component.d.ts +4 -4
- package/content-density/providers/content-density-observer-providers.d.ts +1 -1
- package/content-density/services/content-density-observer.service.d.ts +3 -3
- package/dialog/dialog-container/dialog-container.component.d.ts +4 -4
- package/esm2022/breadcrumb/breadcrumb.component.mjs +9 -11
- package/esm2022/content-density/providers/content-density-observer-providers.mjs +4 -4
- package/esm2022/content-density/services/content-density-observer.service.mjs +13 -13
- package/esm2022/dialog/dialog-container/dialog-container.component.mjs +12 -13
- package/esm2022/message-box/message-box-container/message-box-container.component.mjs +12 -15
- package/esm2022/message-strip/alert/message-strip-alert-container-footer/message-strip-alert-container-footer.component.mjs +8 -9
- package/esm2022/message-strip/auto-dismiss-message-strip.directive.mjs +10 -9
- package/esm2022/multi-combobox/base-multi-combobox.class.mjs +17 -14
- package/esm2022/multi-combobox/multi-combobox.component.mjs +44 -45
- package/esm2022/multi-combobox/select-all-toggler/select-all-toggler.component.mjs +8 -10
- package/esm2022/overflow-layout/directives/overflow-layout-popover-content.directive.mjs +9 -11
- package/esm2022/segmented-button/segmented-button.component.mjs +19 -21
- package/esm2022/shellbar/shellbar.component.mjs +12 -11
- package/esm2022/split-button/split-button.component.mjs +15 -16
- package/esm2022/table/directives/table-cell.directive.mjs +5 -7
- package/esm2022/table/directives/table-row.directive.mjs +17 -20
- package/esm2022/table/table.component.mjs +10 -9
- package/esm2022/tabs/tab-list.component.mjs +26 -28
- package/esm2022/token/token.component.mjs +13 -13
- package/esm2022/toolbar/toolbar.component.mjs +23 -24
- package/esm2022/tree/components/tree-item/tree-item.component.mjs +21 -21
- package/esm2022/tree/tree.component.mjs +23 -22
- package/fesm2022/fundamental-ngx-core-breadcrumb.mjs +9 -10
- package/fesm2022/fundamental-ngx-core-breadcrumb.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-content-density.mjs +15 -14
- package/fesm2022/fundamental-ngx-core-content-density.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-dialog.mjs +10 -9
- package/fesm2022/fundamental-ngx-core-dialog.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-message-box.mjs +11 -11
- package/fesm2022/fundamental-ngx-core-message-box.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-message-strip.mjs +16 -14
- package/fesm2022/fundamental-ngx-core-message-strip.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-multi-combobox.mjs +62 -63
- package/fesm2022/fundamental-ngx-core-multi-combobox.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-overflow-layout.mjs +9 -10
- package/fesm2022/fundamental-ngx-core-overflow-layout.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-segmented-button.mjs +17 -19
- package/fesm2022/fundamental-ngx-core-segmented-button.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-shellbar.mjs +11 -10
- package/fesm2022/fundamental-ngx-core-shellbar.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-split-button.mjs +13 -13
- package/fesm2022/fundamental-ngx-core-split-button.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-table.mjs +26 -30
- package/fesm2022/fundamental-ngx-core-table.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-tabs.mjs +27 -28
- package/fesm2022/fundamental-ngx-core-tabs.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-token.mjs +13 -12
- package/fesm2022/fundamental-ngx-core-token.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-toolbar.mjs +21 -22
- package/fesm2022/fundamental-ngx-core-toolbar.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-tree.mjs +38 -38
- package/fesm2022/fundamental-ngx-core-tree.mjs.map +1 -1
- package/fundamental-ngx-core-v0.44.0-rc.3.tgz +0 -0
- package/message-box/message-box-container/message-box-container.component.d.ts +4 -6
- package/message-strip/alert/message-strip-alert-container-footer/message-strip-alert-container-footer.component.d.ts +1 -1
- package/message-strip/auto-dismiss-message-strip.directive.d.ts +3 -3
- package/multi-combobox/base-multi-combobox.class.d.ts +30 -30
- package/multi-combobox/multi-combobox.component.d.ts +17 -18
- package/multi-combobox/select-all-toggler/select-all-toggler.component.d.ts +1 -1
- package/overflow-layout/directives/overflow-layout-popover-content.directive.d.ts +5 -6
- package/package.json +3 -3
- package/schematics/add-dependencies/index.js +4 -4
- package/segmented-button/segmented-button.component.d.ts +6 -7
- package/shellbar/shellbar.component.d.ts +1 -1
- package/split-button/split-button.component.d.ts +3 -4
- package/table/directives/table-row.directive.d.ts +2 -4
- package/table/table.component.d.ts +3 -4
- package/tabs/tab-list.component.d.ts +4 -5
- package/token/token.component.d.ts +5 -5
- package/toolbar/toolbar.component.d.ts +6 -6
- package/tree/components/tree-item/tree-item.component.d.ts +28 -28
- package/tree/tree.component.d.ts +7 -7
- package/fundamental-ngx-core-v0.44.0-rc.2.tgz +0 -0
|
@@ -1,10 +1,11 @@
|
|
|
1
|
-
import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ContentChildren, ElementRef, EventEmitter, HostBinding, inject, Input, Output, QueryList, ViewChild, ViewEncapsulation } from '@angular/core';
|
|
1
|
+
import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ContentChildren, DestroyRef, ElementRef, EventEmitter, HostBinding, inject, Input, Output, QueryList, ViewChild, ViewEncapsulation } from '@angular/core';
|
|
2
2
|
import { DataSourceDirective } from '@fundamental-ngx/cdk/data-source';
|
|
3
|
-
import {
|
|
4
|
-
import { distinctUntilChanged, filter, startWith, Subject, switchMap
|
|
3
|
+
import { FDK_SELECTABLE_ITEM_PROVIDER, SelectableItemDirective, SelectableItemToken, uuidv4 } from '@fundamental-ngx/cdk/utils';
|
|
4
|
+
import { distinctUntilChanged, filter, startWith, Subject, switchMap } from 'rxjs';
|
|
5
5
|
import { TreeService } from '../../tree.service';
|
|
6
6
|
import { BaseTreeItem } from '../../models/base-tree-item.class';
|
|
7
7
|
import { TreeItemDirective } from '../../directives/tree-item.directive';
|
|
8
|
+
import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
|
|
8
9
|
import * as i0 from "@angular/core";
|
|
9
10
|
import * as i1 from "@fundamental-ngx/cdk/data-source";
|
|
10
11
|
import * as i2 from "@angular/common";
|
|
@@ -96,13 +97,6 @@ export class TreeItemComponent extends BaseTreeItem {
|
|
|
96
97
|
* Whether to wrap content.
|
|
97
98
|
*/
|
|
98
99
|
this.wrapContent = false;
|
|
99
|
-
/** @hidden */
|
|
100
|
-
this._expanded = false;
|
|
101
|
-
/**
|
|
102
|
-
* @hidden
|
|
103
|
-
* Whether the tree item should have a navigation indicator.
|
|
104
|
-
*/
|
|
105
|
-
this._navigationIndicator = false;
|
|
106
100
|
/**
|
|
107
101
|
* Event emitted when user clicks on tree item.
|
|
108
102
|
*/
|
|
@@ -111,6 +105,11 @@ export class TreeItemComponent extends BaseTreeItem {
|
|
|
111
105
|
* Event emitted when `expanded` state changes.
|
|
112
106
|
*/
|
|
113
107
|
this.expandedChange = new EventEmitter();
|
|
108
|
+
/**
|
|
109
|
+
* @hidden
|
|
110
|
+
* Whether the tree item should have a navigation indicator.
|
|
111
|
+
*/
|
|
112
|
+
this._navigationIndicator = false;
|
|
114
113
|
/**
|
|
115
114
|
* @hidden
|
|
116
115
|
* Selection state.
|
|
@@ -125,14 +124,17 @@ export class TreeItemComponent extends BaseTreeItem {
|
|
|
125
124
|
/** @hidden */
|
|
126
125
|
this._totalChildrenLoaded = false;
|
|
127
126
|
/** @hidden */
|
|
127
|
+
this.elementRef = inject(ElementRef);
|
|
128
|
+
/** @hidden */
|
|
129
|
+
this._expanded = false;
|
|
130
|
+
/** @hidden */
|
|
128
131
|
this._dsChildrenNumber = 0;
|
|
129
132
|
/** @hidden */
|
|
130
133
|
this._clicked$ = new Subject();
|
|
131
134
|
/** Clicked behavior implementation. */
|
|
135
|
+
// eslint-disable-next-line @typescript-eslint/member-ordering
|
|
132
136
|
this.clicked = this._clicked$.asObservable();
|
|
133
137
|
/** @hidden */
|
|
134
|
-
this.elementRef = inject(ElementRef);
|
|
135
|
-
/** @hidden */
|
|
136
138
|
this._treeItemDir = inject(TreeItemDirective, {
|
|
137
139
|
optional: true
|
|
138
140
|
});
|
|
@@ -143,7 +145,7 @@ export class TreeItemComponent extends BaseTreeItem {
|
|
|
143
145
|
/** @hidden */
|
|
144
146
|
this._cdr = inject(ChangeDetectorRef);
|
|
145
147
|
/** @hidden */
|
|
146
|
-
this.
|
|
148
|
+
this._destroyRef = inject(DestroyRef);
|
|
147
149
|
/** @hidden */
|
|
148
150
|
this._parentTreeItem = inject(TreeItemComponent, {
|
|
149
151
|
optional: true,
|
|
@@ -153,11 +155,11 @@ export class TreeItemComponent extends BaseTreeItem {
|
|
|
153
155
|
}
|
|
154
156
|
/** @hidden */
|
|
155
157
|
ngOnInit() {
|
|
156
|
-
this._treeService.selectionMode.pipe(
|
|
158
|
+
this._treeService.selectionMode.pipe(takeUntilDestroyed(this._destroyRef)).subscribe((model) => {
|
|
157
159
|
this._selectionModel = model;
|
|
158
160
|
this._cdr.detectChanges();
|
|
159
161
|
});
|
|
160
|
-
this._treeService.navigationIndicator.pipe(
|
|
162
|
+
this._treeService.navigationIndicator.pipe(takeUntilDestroyed(this._destroyRef)).subscribe((value) => {
|
|
161
163
|
this._navigationIndicator = value;
|
|
162
164
|
this._cdr.detectChanges();
|
|
163
165
|
});
|
|
@@ -165,14 +167,14 @@ export class TreeItemComponent extends BaseTreeItem {
|
|
|
165
167
|
this._treeService.addExpandableItem(this.id, this.level, this.expanded);
|
|
166
168
|
this._dataSourceDirective.dataSourceProvider
|
|
167
169
|
?.getTotalItems()
|
|
168
|
-
.pipe(
|
|
170
|
+
.pipe(takeUntilDestroyed(this._destroyRef))
|
|
169
171
|
.subscribe((totalItems) => {
|
|
170
172
|
this._dsChildrenNumber = totalItems;
|
|
171
173
|
this._totalChildrenLoaded = true;
|
|
172
174
|
this._cdr.detectChanges();
|
|
173
175
|
});
|
|
174
176
|
this._dataSourceDirective.dataSourceProvider?.dataReceived
|
|
175
|
-
.pipe(filter((received) => received), switchMap(() => this._dataSourceDirective.dataChanged$),
|
|
177
|
+
.pipe(filter((received) => received), switchMap(() => this._dataSourceDirective.dataChanged$), takeUntilDestroyed(this._destroyRef))
|
|
176
178
|
.subscribe((data) => {
|
|
177
179
|
this.children = this._treeService.normalizeTreeItems(data, this.id, this.level + 1);
|
|
178
180
|
this.childrenLoaded = true;
|
|
@@ -185,7 +187,7 @@ export class TreeItemComponent extends BaseTreeItem {
|
|
|
185
187
|
/** @hidden */
|
|
186
188
|
ngAfterViewInit() {
|
|
187
189
|
this._projectedTreeItems.changes
|
|
188
|
-
.pipe(startWith(null), distinctUntilChanged(),
|
|
190
|
+
.pipe(startWith(null), distinctUntilChanged(), takeUntilDestroyed(this._destroyRef))
|
|
189
191
|
.subscribe(() => {
|
|
190
192
|
this._cdr.detectChanges();
|
|
191
193
|
this._projectedTreeItems.forEach((treeItem, index) => {
|
|
@@ -235,7 +237,6 @@ export class TreeItemComponent extends BaseTreeItem {
|
|
|
235
237
|
}
|
|
236
238
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.0", ngImport: i0, type: TreeItemComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
237
239
|
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.0", type: TreeItemComponent, selector: "fd-tree-item", inputs: { value: "value", id: "id", ariaLabel: "ariaLabel", parentId: "parentId", navigatable: "navigatable", state: "state", childNodes: "childNodes", wrapContent: "wrapContent", level: "level", expanded: "expanded" }, outputs: { treeItemClick: "treeItemClick", expandedChange: "expandedChange" }, host: { attributes: { "role": "presentation" }, properties: { "attr.aria-label": "this.ariaLabel", "attr.aria-level": "this.level" }, classAttribute: "fd-tree__item" }, providers: [
|
|
238
|
-
DestroyedService,
|
|
239
240
|
{
|
|
240
241
|
provide: FDK_SELECTABLE_ITEM_PROVIDER,
|
|
241
242
|
useExisting: TreeItemComponent
|
|
@@ -252,7 +253,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.0", ngImpor
|
|
|
252
253
|
class: 'fd-tree__item',
|
|
253
254
|
role: 'presentation'
|
|
254
255
|
}, providers: [
|
|
255
|
-
DestroyedService,
|
|
256
256
|
{
|
|
257
257
|
provide: FDK_SELECTABLE_ITEM_PROVIDER,
|
|
258
258
|
useExisting: TreeItemComponent
|
|
@@ -302,4 +302,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.0", ngImpor
|
|
|
302
302
|
type: ContentChildren,
|
|
303
303
|
args: [BaseTreeItem]
|
|
304
304
|
}] } });
|
|
305
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS1pdGVtLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS9zcmMvbGliL3RyZWUvY29tcG9uZW50cy90cmVlLWl0ZW0vdHJlZS1pdGVtLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS9zcmMvbGliL3RyZWUvY29tcG9uZW50cy90cmVlLWl0ZW0vdHJlZS1pdGVtLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFSCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxlQUFlLEVBQ2YsVUFBVSxFQUNWLFlBQVksRUFDWixXQUFXLEVBQ1gsTUFBTSxFQUNOLEtBQUssRUFHTCxNQUFNLEVBQ04sU0FBUyxFQUNULFNBQVMsRUFDVCxpQkFBaUIsRUFDcEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFjLG1CQUFtQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDbkYsT0FBTyxFQUNILGdCQUFnQixFQUNoQiw0QkFBNEIsRUFFNUIsdUJBQXVCLEVBQ3ZCLG1CQUFtQixFQUNuQixNQUFNLEVBQ1QsTUFBTSw0QkFBNEIsQ0FBQztBQUNwQyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUc5RixPQUFPLEVBQUUsV0FBVyxFQUFzQixNQUFNLG9CQUFvQixDQUFDO0FBQ3JFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUNqRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQzs7Ozs7Ozs7Ozs7QUF3QnpFLE1BQU0sT0FBTyxpQkFDVCxTQUFRLFlBQWtCO0lBcUIxQjs7T0FFRztJQUNILElBQ0ksUUFBUSxDQUFDLEtBQXVCO1FBQ2hD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QUFpQjtnQkFnQjFCLFFBQVE7c0JBRFgsS0FBSztnQkF1Q0csYUFBYTtzQkFEckIsTUFBTTtnQkFPUCxjQUFjO3NCQURiLE1BQU07Z0JBc0NQLGFBQWE7c0JBRFosU0FBUzt1QkFBQyxlQUFlLEVBQUUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFO2dCQUtoRCxrQkFBa0I7c0JBRGpCLFNBQVM7dUJBQUMsdUJBQXVCO2dCQUtsQyxtQkFBbUI7c0JBRGxCLGVBQWU7dUJBQUMsWUFBWSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQWZ0ZXJWaWV3SW5pdCxcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBDb21wb25lbnQsXG4gICAgQ29udGVudENoaWxkcmVuLFxuICAgIEVsZW1lbnRSZWYsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIEhvc3RCaW5kaW5nLFxuICAgIGluamVjdCxcbiAgICBJbnB1dCxcbiAgICBPbkRlc3Ryb3ksXG4gICAgT25Jbml0LFxuICAgIE91dHB1dCxcbiAgICBRdWVyeUxpc3QsXG4gICAgVmlld0NoaWxkLFxuICAgIFZpZXdFbmNhcHN1bGF0aW9uXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRGF0YVNvdXJjZSwgRGF0YVNvdXJjZURpcmVjdGl2ZSB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY2RrL2RhdGEtc291cmNlJztcbmltcG9ydCB7XG4gICAgRGVzdHJveWVkU2VydmljZSxcbiAgICBGREtfU0VMRUNUQUJMRV9JVEVNX1BST1ZJREVSLFxuICAgIE51bGxhYmxlLFxuICAgIFNlbGVjdGFibGVJdGVtRGlyZWN0aXZlLFxuICAgIFNlbGVjdGFibGVJdGVtVG9rZW4sXG4gICAgdXVpZHY0XG59IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY2RrL3V0aWxzJztcbmltcG9ydCB7IGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBmaWx0ZXIsIHN0YXJ0V2l0aCwgU3ViamVjdCwgc3dpdGNoTWFwLCB0YWtlVW50aWwgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEZkVHJlZUFjY2VwdGFibGVEYXRhU291cmNlLCBGZFRyZWVEYXRhU291cmNlIH0gZnJvbSAnLi4vLi4vZGF0YS1zb3VyY2UvdHJlZS1kYXRhLXNvdXJjZSc7XG5pbXBvcnQgeyBUcmVlSXRlbSwgVHJlZUl0ZW1TdGF0ZSB9IGZyb20gJy4uLy4uL21vZGVscy90cmVlLWl0ZW0nO1xuaW1wb3J0IHsgVHJlZVNlcnZpY2UsIFNlbGVjdGlvbk1vZGVNb2RlbCB9IGZyb20gJy4uLy4uL3RyZWUuc2VydmljZSc7XG5pbXBvcnQgeyBCYXNlVHJlZUl0ZW0gfSBmcm9tICcuLi8uLi9tb2RlbHMvYmFzZS10cmVlLWl0ZW0uY2xhc3MnO1xuaW1wb3J0IHsgVHJlZUl0ZW1EaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmVzL3RyZWUtaXRlbS5kaXJlY3RpdmUnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2ZkLXRyZWUtaXRlbScsXG4gICAgdGVtcGxhdGVVcmw6ICcuL3RyZWUtaXRlbS5jb21wb25lbnQuaHRtbCcsXG4gICAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgICBob3N0RGlyZWN0aXZlczogW0RhdGFTb3VyY2VEaXJlY3RpdmVdLFxuICAgIGhvc3Q6IHtcbiAgICAgICAgY2xhc3M6ICdmZC10cmVlX19pdGVtJyxcbiAgICAgICAgcm9sZTogJ3ByZXNlbnRhdGlvbidcbiAgICB9LFxuICAgIHByb3ZpZGVyczogW1xuICAgICAgICBEZXN0cm95ZWRTZXJ2aWNlLFxuICAgICAgICB7XG4gICAgICAgICAgICBwcm92aWRlOiBGREtfU0VMRUNUQUJMRV9JVEVNX1BST1ZJREVSLFxuICAgICAgICAgICAgdXNlRXhpc3Rpbmc6IFRyZWVJdGVtQ29tcG9uZW50XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIHByb3ZpZGU6IEJhc2VUcmVlSXRlbSxcbiAgICAgICAgICAgIHVzZUV4aXN0aW5nOiBUcmVlSXRlbUNvbXBvbmVudFxuICAgICAgICB9XG4gICAgXVxufSlcbmV4cG9ydCBjbGFzcyBUcmVlSXRlbUNvbXBvbmVudDxUIGV4dGVuZHMgVHJlZUl0ZW0gPSBUcmVlSXRlbSwgUCA9IGFueT5cbiAgICBleHRlbmRzIEJhc2VUcmVlSXRlbTxULCBQPlxuICAgIGltcGxlbWVudHMgUGFydGlhbDxTZWxlY3RhYmxlSXRlbVRva2VuPEhUTUxFbGVtZW50LCBQPj4sIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95XG57XG4gICAgLyoqXG4gICAgICogVHJlZSBpdGVtIHZhbHVlLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgdmFsdWU6IFA7XG4gICAgLyoqXG4gICAgICogVHJlZSBpdGVtIElELlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgaWQgPSB1dWlkdjQoKTtcblxuICAgIC8qKlxuICAgICAqIFRyZWUgaXRlbSBhcmlhIGxhYmVsLlxuICAgICAqL1xuICAgIEBIb3N0QmluZGluZygnYXR0ci5hcmlhLWxhYmVsJylcbiAgICBASW5wdXQoKVxuICAgIGFyaWFMYWJlbDogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogVHJlZSBpdGVtIHBhcmVudCBJRC5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCBwYXJlbnRJZCh2YWx1ZTogTnVsbGFibGU8c3RyaW5nPikge1xuICAgICAgICB0aGlzLl9wYXJlbnRJZCA9IHZhbHVlO1xuICAgIH1cblxuICAgIGdldCBwYXJlbnRJZCgpOiBOdWxsYWJsZTxzdHJpbmc+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3BhcmVudElkIHx8IHRoaXMuX3BhcmVudFRyZWVJdGVtPy5pZDtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3BhcmVudElkOiBOdWxsYWJsZTxzdHJpbmc+O1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciB0aGUgdHJlZSBpdGVtIGlzIG5hdmlnYXRhYmxlLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgbmF2aWdhdGFibGUgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIFRyZWUgaXRlbSBzdGF0ZS5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHN0YXRlOiBOdWxsYWJsZTxUcmVlSXRlbVN0YXRlPjtcblxuICAgIC8qKlxuICAgICAqIFRyZWUgaXRlbSBjaGlsZCBub2RlcyBkYXRhIHNvdXJjZS5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIGNoaWxkTm9kZXM6IEZkVHJlZUFjY2VwdGFibGVEYXRhU291cmNlPFQ+ID0gW107XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHRvIHdyYXAgY29udGVudC5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHdyYXBDb250ZW50ID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBUcmVlIGl0ZW0gbGV2ZWwuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBASG9zdEJpbmRpbmcoJ2F0dHIuYXJpYS1sZXZlbCcpXG4gICAgc2V0IGxldmVsKHZhbHVlOiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5fbGV2ZWwgPSB2YWx1ZTtcbiAgICB9XG5cbiAgICBnZXQgbGV2ZWwoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2xldmVsIHx8ICh0aGlzLl9wYXJlbnRUcmVlSXRlbSAhPT0gbnVsbCA/IHRoaXMuX3BhcmVudFRyZWVJdGVtLmxldmVsICsgMSA6IDEpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfbGV2ZWw6IG51bWJlcjtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdGhlIHRyZWUgaXRlbSBpcyBleHBhbmRlZC5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCBleHBhbmRlZCh2YWx1ZTogYm9vbGVhbikge1xuICAgICAgICBpZiAodmFsdWUgPT09IHRoaXMuX2V4cGFuZGVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fdHJlZVNlcnZpY2UuYWRkRXhwYW5kYWJsZUl0ZW0odGhpcy5pZCwgdGhpcy5sZXZlbCwgdmFsdWUpO1xuICAgICAgICB0aGlzLl9leHBhbmRlZCA9IHZhbHVlO1xuXG4gICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fdHJlZVNlcnZpY2UuZGV0ZWN0Q2hhbmdlcy5uZXh0KCk7XG4gICAgICAgICAgICAgICAgdGhpcy5fZGF0YVNvdXJjZURpcmVjdGl2ZS5kYXRhU291cmNlUHJvdmlkZXI/Lm1hdGNoKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuY2hpbGRyZW4gPSBbXTtcbiAgICAgICAgICAgIHRoaXMuY2hpbGRyZW5Mb2FkZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuX3RyZWVTZXJ2aWNlLmRldGVjdENoYW5nZXMubmV4dCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG5cbiAgICBnZXQgZXhwYW5kZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9leHBhbmRlZDtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2V4cGFuZGVkID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogV2hldGhlciB0aGUgdHJlZSBpdGVtIHNob3VsZCBoYXZlIGEgbmF2aWdhdGlvbiBpbmRpY2F0b3IuXG4gICAgICovXG4gICAgX25hdmlnYXRpb25JbmRpY2F0b3IgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIEV2ZW50IGVtaXR0ZWQgd2hlbiB1c2VyIGNsaWNrcyBvbiB0cmVlIGl0ZW0uXG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgcmVhZG9ubHkgdHJlZUl0ZW1DbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8TW91c2VFdmVudCB8IEtleWJvYXJkRXZlbnQ+KCk7XG5cbiAgICAvKipcbiAgICAgKiBFdmVudCBlbWl0dGVkIHdoZW4gYGV4cGFuZGVkYCBzdGF0ZSBjaGFuZ2VzLlxuICAgICAqL1xuICAgIEBPdXRwdXQoKVxuICAgIGV4cGFuZGVkQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIFNlbGVjdGlvbiBzdGF0ZS5cbiAgICAgKi9cbiAgICBfc2VsZWN0aW9uU3RhdGUgPSBmYWxzZTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgY2hpbGRyZW46IFRbXSA9IFtdO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBjaGlsZHJlbkxvYWRlZCA9IGZhbHNlO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfc2VsZWN0aW9uTW9kZWw6IE51bGxhYmxlPFNlbGVjdGlvbk1vZGVNb2RlbD47XG5cbiAgICAvKiogV2hldGhlciB0aGUgdHJlZSBpdGVtIGhhcyBhbnkgdHlwZSBvZiBjaGlsZCBub2Rlcy4gKi9cbiAgICBnZXQgaGFzQ2hpbGRyZW4oKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAhIXRoaXMuY2hpbGROb2RlcyB8fCB0aGlzLmhhc1Byb2plY3RlZENoaWxkcmVuO1xuICAgIH1cblxuICAgIC8qKiBXaGV0aGVyIHRoZSB0cmVlIGl0ZW0gaGFzIGNvbnRlbnQtcHJvamVjdGVkIGNoaWxkIG5vZGVzLiAqL1xuICAgIGdldCBoYXNQcm9qZWN0ZWRDaGlsZHJlbigpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Byb2plY3RlZFRyZWVJdGVtcyAmJiB0aGlzLl9wcm9qZWN0ZWRUcmVlSXRlbXMubGVuZ3RoID4gMDtcbiAgICB9XG5cbiAgICAvKiogV2hldGhlciB0aGUgdHJlZSBpdGVtIGhhcyBkYXRhIHNvdXJjZSBjaGlsZHJlbi4gKi9cbiAgICBnZXQgaGFzRHNDaGlsZHJlbigpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RzQ2hpbGRyZW5OdW1iZXIgPiAwO1xuICAgIH1cblxuICAgIC8qKiBASGlkZGVuICovXG4gICAgX2NvbnRhaW5lclRhYkluZGV4ID0gMDtcblxuICAgIC8qKiBUcmVlIGl0ZW0gZm9jdXNhYmxlIGNvbnRhaW5lci4gKi9cbiAgICBAVmlld0NoaWxkKCdpdGVtQ29udGFpbmVyJywgeyByZWFkOiBFbGVtZW50UmVmIH0pXG4gICAgaXRlbUNvbnRhaW5lcjogTnVsbGFibGU8RWxlbWVudFJlZjxIVE1MRWxlbWVudD4+O1xuXG4gICAgLyoqIFNlbGVjdGFibGUgaXRlbS4gKi9cbiAgICBAVmlld0NoaWxkKFNlbGVjdGFibGVJdGVtRGlyZWN0aXZlKVxuICAgIHNlbGVjdGFibGVMaXN0SXRlbTogU2VsZWN0YWJsZUl0ZW1Ub2tlbjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQENvbnRlbnRDaGlsZHJlbihCYXNlVHJlZUl0ZW0pXG4gICAgX3Byb2plY3RlZFRyZWVJdGVtczogUXVlcnlMaXN0PEJhc2VUcmVlSXRlbT47XG5cbiAgICAvKiogV2hldGhlciB0aGUgaXRlbSBpcyBhY2Nlc3NpYmxlIHZpYSBrZXlib2FyZC4gKi9cbiAgICBnZXQga2V5Ym9hcmRBY2Nlc3NpYmxlKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fcGFyZW50VHJlZUl0ZW0gPT09IG51bGxcbiAgICAgICAgICAgID8gdHJ1ZVxuICAgICAgICAgICAgOiB0aGlzLl9wYXJlbnRUcmVlSXRlbS5rZXlib2FyZEFjY2Vzc2libGUgJiYgdGhpcy5fcGFyZW50VHJlZUl0ZW0uZXhwYW5kZWQ7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfc2V0U2l6ZTogbnVtYmVyO1xuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX2N1cnJlbnRQb3NpdGlvbjogbnVtYmVyO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfdG90YWxDaGlsZHJlbkxvYWRlZCA9IGZhbHNlO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9kc0NoaWxkcmVuTnVtYmVyID0gMDtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSByZWFkb25seSBfY2xpY2tlZCQgPSBuZXcgU3ViamVjdDxNb3VzZUV2ZW50IHwgS2V5Ym9hcmRFdmVudD4oKTtcblxuICAgIC8qKiBDbGlja2VkIGJlaGF2aW9yIGltcGxlbWVudGF0aW9uLiAqL1xuICAgIGNsaWNrZWQgPSB0aGlzLl9jbGlja2VkJC5hc09ic2VydmFibGUoKTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHVibGljIHJlYWRvbmx5IGVsZW1lbnRSZWYgPSBpbmplY3QoRWxlbWVudFJlZik7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX3RyZWVJdGVtRGlyID0gaW5qZWN0PFRyZWVJdGVtRGlyZWN0aXZlPFQsIFA+PihUcmVlSXRlbURpcmVjdGl2ZSwge1xuICAgICAgICBvcHRpb25hbDogdHJ1ZVxuICAgIH0pO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IF90cmVlU2VydmljZSA9IGluamVjdChUcmVlU2VydmljZSk7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX2RhdGFTb3VyY2VEaXJlY3RpdmUgPSBpbmplY3Q8RGF0YVNvdXJjZURpcmVjdGl2ZTxULCBGZFRyZWVEYXRhU291cmNlPFQ+Pj4oRGF0YVNvdXJjZURpcmVjdGl2ZSk7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX2NkciA9IGluamVjdChDaGFuZ2VEZXRlY3RvclJlZik7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX2Rlc3Ryb3kkID0gaW5qZWN0KERlc3Ryb3llZFNlcnZpY2UpO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IF9wYXJlbnRUcmVlSXRlbSA9IGluamVjdChUcmVlSXRlbUNvbXBvbmVudCwge1xuICAgICAgICBvcHRpb25hbDogdHJ1ZSxcbiAgICAgICAgc2tpcFNlbGY6IHRydWVcbiAgICB9KTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMuX3RyZWVJdGVtRGlyPy5zZXRUcmVlSXRlbSh0aGlzKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLl90cmVlU2VydmljZS5zZWxlY3Rpb25Nb2RlLnBpcGUodGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kkKSkuc3Vic2NyaWJlKChtb2RlbCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fc2VsZWN0aW9uTW9kZWwgPSBtb2RlbDtcbiAgICAgICAgICAgIHRoaXMuX2Nkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuX3RyZWVTZXJ2aWNlLm5hdmlnYXRpb25JbmRpY2F0b3IucGlwZSh0YWtlVW50aWwodGhpcy5fZGVzdHJveSQpKS5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9uYXZpZ2F0aW9uSW5kaWNhdG9yID0gdmFsdWU7XG4gICAgICAgICAgICB0aGlzLl9jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLl9kYXRhU291cmNlRGlyZWN0aXZlLmRhdGFTb3VyY2UgPSB0aGlzLmNoaWxkTm9kZXMgYXMgRGF0YVNvdXJjZTxULCBGZFRyZWVEYXRhU291cmNlPFQ+PjtcbiAgICAgICAgdGhpcy5fdHJlZVNlcnZpY2UuYWRkRXhwYW5kYWJsZUl0ZW0odGhpcy5pZCwgdGhpcy5sZXZlbCwgdGhpcy5leHBhbmRlZCk7XG5cbiAgICAgICAgdGhpcy5fZGF0YVNvdXJjZURpcmVjdGl2ZS5kYXRhU291cmNlUHJvdmlkZXJcbiAgICAgICAgICAgID8uZ2V0VG90YWxJdGVtcygpXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5fZGVzdHJveSQpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgodG90YWxJdGVtcykgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuX2RzQ2hpbGRyZW5OdW1iZXIgPSB0b3RhbEl0ZW1zO1xuICAgICAgICAgICAgICAgIHRoaXMuX3RvdGFsQ2hpbGRyZW5Mb2FkZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHRoaXMuX2Nkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLl9kYXRhU291cmNlRGlyZWN0aXZlLmRhdGFTb3VyY2VQcm92aWRlcj8uZGF0YVJlY2VpdmVkXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICBmaWx0ZXIoKHJlY2VpdmVkKSA9PiByZWNlaXZlZCksXG4gICAgICAgICAgICAgICAgc3dpdGNoTWFwKCgpID0+IHRoaXMuX2RhdGFTb3VyY2VEaXJlY3RpdmUuZGF0YUNoYW5nZWQkKSxcbiAgICAgICAgICAgICAgICB0YWtlVW50aWwodGhpcy5fZGVzdHJveSQpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChkYXRhKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5jaGlsZHJlbiA9IHRoaXMuX3RyZWVTZXJ2aWNlLm5vcm1hbGl6ZVRyZWVJdGVtcyhkYXRhLCB0aGlzLmlkLCB0aGlzLmxldmVsICsgMSkgYXMgVFtdO1xuICAgICAgICAgICAgICAgIHRoaXMuY2hpbGRyZW5Mb2FkZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl90cmVlU2VydmljZS5kZXRlY3RDaGFuZ2VzLm5leHQoKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9wcm9qZWN0ZWRUcmVlSXRlbXMuY2hhbmdlc1xuICAgICAgICAgICAgLnBpcGUoc3RhcnRXaXRoKG51bGwpLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLCB0YWtlVW50aWwodGhpcy5fZGVzdHJveSQpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9wcm9qZWN0ZWRUcmVlSXRlbXMuZm9yRWFjaCgodHJlZUl0ZW0sIGluZGV4KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRyZWVJdGVtLnNldFBvc2l0aW9uKHRoaXMuX3Byb2plY3RlZFRyZWVJdGVtcy5sZW5ndGgsIGluZGV4ICsgMSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICB0aGlzLl90cmVlU2VydmljZS5yZW1vdmVFeHBhbmRhYmxlSXRlbSh0aGlzLmlkLCB0aGlzLmxldmVsISk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyBwb3NpdGlvbiBvZiB0aGUgY3VycmVudCBpdGVtIGluIHRoZSBzZXQuXG4gICAgICogQHBhcmFtIHRvdGFsSXRlbXMgVG90YWwgaXRlbXMgYW1vdW50IGluIHRoZSBzZXQuXG4gICAgICogQHBhcmFtIGN1cnJlbnRJbmRleCBDdXJyZW50IGl0ZW0gcG9zaXRpb24gaW4gdGhlIHNldC5cbiAgICAgKi9cbiAgICBzZXRQb3NpdGlvbih0b3RhbEl0ZW1zOiBudW1iZXIsIGN1cnJlbnRJbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3NldFNpemUgPSB0b3RhbEl0ZW1zO1xuICAgICAgICB0aGlzLl9jdXJyZW50UG9zaXRpb24gPSBjdXJyZW50SW5kZXg7XG4gICAgfVxuXG4gICAgLyoqIE1ldGhvZCB0byBmb2N1cyBvbiB0aGUgdHJlZSBpdGVtLiAqL1xuICAgIGZvY3VzKCk6IHZvaWQge1xuICAgICAgICB0aGlzLml0ZW1Db250YWluZXI/Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICB9XG5cbiAgICAvKiogTWV0aG9kIGZvciBzZXR0aW5nIHRoZSBmb2N1c2FibGUgdGFiaW5kZXguICovXG4gICAgc2V0Q29udGFpbmVyVGFiSW5kZXgodmFsdWU6IG51bWJlcik6IHZvaWQge1xuICAgICAgICB0aGlzLl9jb250YWluZXJUYWJJbmRleCA9IHZhbHVlO1xuICAgICAgICB0aGlzLl9jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfdG9nZ2xlRXhwYW5kU3RhdGUoZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgLy8gRG8gbm90IGJ1YmJsZSB1cCB0byBzZWxlY3Rpb24gY2hhbmdlIGV2ZW50LlxuICAgICAgICBldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcbiAgICAgICAgdGhpcy5leHBhbmRlZCA9ICF0aGlzLmV4cGFuZGVkO1xuICAgICAgICB0aGlzLmV4cGFuZGVkQ2hhbmdlLmVtaXQodGhpcy5leHBhbmRlZCk7XG4gICAgICAgIHRoaXMuZm9jdXMoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9vbkNsaWNrKGV2ZW50OiBNb3VzZUV2ZW50IHwgS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgICAgICBldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcblxuICAgICAgICB0aGlzLl9jbGlja2VkJC5uZXh0KGV2ZW50KTtcbiAgICAgICAgdGhpcy50cmVlSXRlbUNsaWNrLmVtaXQoZXZlbnQpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX3NldFNlbGVjdGVkKHNlbGVjdGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3NlbGVjdGlvblN0YXRlID0gc2VsZWN0ZWQ7XG4gICAgfVxufVxuIiwiPGRpdlxuICAgIGNsYXNzPVwiZmQtdHJlZV9faXRlbS1jb250YWluZXJcIlxuICAgIFthdHRyLnRhYmluZGV4XT1cIl9jb250YWluZXJUYWJJbmRleFwiXG4gICAgKGZka0NsaWNrZWQpPVwiX29uQ2xpY2soJGV2ZW50KVwiXG4gICAgZmRrU2VsZWN0YWJsZUl0ZW1cbiAgICAoc2VsZWN0ZWQpPVwiX3NldFNlbGVjdGVkKCRldmVudClcIlxuICAgIFt2YWx1ZV09XCJ2YWx1ZVwiXG4gICAgW2F0dHIuYXJpYS1oYXNwb3B1cF09XCJjaGlsZHJlbi5sZW5ndGggPiAwIHx8IGhhc1Byb2plY3RlZENoaWxkcmVuXCJcbiAgICBbYXR0ci5hcmlhLWV4cGFuZGVkXT1cImV4cGFuZGVkXCJcbiAgICBbYXR0ci5hcmlhLXNldHNpemVdPVwiX3NldFNpemVcIlxuICAgIFthdHRyLmFyaWEtcG9zaW5zZXRdPVwiX2N1cnJlbnRQb3NpdGlvblwiXG4gICAgcm9sZT1cInRyZWVpdGVtXCJcbiAgICBbYXR0ci5hcmlhLWxldmVsXT1cImxldmVsXCJcbiAgICAjaXRlbUNvbnRhaW5lclxuICAgIFtuZ0NsYXNzXT1cIltcbiAgICAgICAgc3RhdGUgPyAnaGFzLWhpZ2hsaWdodC1pbmRpY2F0b3IgaGFzLWhpZ2hsaWdodC1pbmRpY2F0b3ItLScgKyBzdGF0ZSA6ICcnLFxuICAgICAgICBuYXZpZ2F0YWJsZSA/ICdmZC10cmVlX19pdGVtLWNvbnRhaW5lci0tYWN0aXZlJyA6ICcnLFxuICAgICAgICB3cmFwQ29udGVudCA/ICdmZC10cmVlX19jb250ZW50LS13cmFwJyA6ICcnXG4gICAgXVwiXG4+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIl9zZWxlY3Rpb25Nb2RlbD8ucGxhY2VtZW50ID09PSAnbGVmdCdcIj5cbiAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInNlbGVjdGlvblwiPjwvbmctdGVtcGxhdGU+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImhhc0NoaWxkcmVuXCI+XG4gICAgICAgIDxzcGFuXG4gICAgICAgICAgICAqbmdJZj1cImhhc0RzQ2hpbGRyZW4gfHwgaGFzUHJvamVjdGVkQ2hpbGRyZW5cIlxuICAgICAgICAgICAgKGNsaWNrKT1cIl90b2dnbGVFeHBhbmRTdGF0ZSgkZXZlbnQpXCJcbiAgICAgICAgICAgIGNsYXNzPVwiZmQtdHJlZV9fZXhwYW5kZXJcIlxuICAgICAgICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCJcbiAgICAgICAgICAgIHJvbGU9XCJwcmVzZW50YXRpb25cIlxuICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCIoZXhwYW5kZWQgPyAnY29yZVRyZWUuY29sbGFwc2UnIDogJ2NvcmVUcmVlLmV4cGFuZCcpIHwgZmRUcmFuc2xhdGVcIlxuICAgICAgICAgICAgW2NsYXNzLmlzLWV4cGFuZGVkXT1cImV4cGFuZGVkXCJcbiAgICAgICAgPlxuICAgICAgICAgICAgPGZkLWljb25cbiAgICAgICAgICAgICAgICBjbGFzcz1cImZkLXRyZWVfX2ljb25cIlxuICAgICAgICAgICAgICAgIFtnbHlwaF09XCJleHBhbmRlZCA/ICduYXZpZ2F0aW9uLWRvd24tYXJyb3cnIDogJ25hdmlnYXRpb24tcmlnaHQtYXJyb3cnXCJcbiAgICAgICAgICAgID48L2ZkLWljb24+XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZkLXRyZWVfX2V4cGFuZGVyIGZkLXRyZWVfX2V4cGFuZGVyLS1sb2FkaW5nXCIgKm5nSWY9XCIhX3RvdGFsQ2hpbGRyZW5Mb2FkZWRcIj5cbiAgICAgICAgICAgIDxmZC1za2VsZXRvbiB0eXBlPVwicmVjdGFuZ2xlXCIgd2lkdGg9XCIxcmVtXCIgaGVpZ2h0PVwiMXJlbVwiPjwvZmQtc2tlbGV0b24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiX3NlbGVjdGlvbk1vZGVsPy5wbGFjZW1lbnQgPT09ICdhZnRlckV4cGFuZCdcIj5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCJzZWxlY3Rpb25cIj48L25nLXRlbXBsYXRlPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8ZGl2IGNsYXNzPVwiZmQtdHJlZV9fY29udGVudFwiPlxuICAgICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJbZmRUcmVlSXRlbUljb25dXCI+PC9uZy1jb250ZW50PlxuICAgICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJbZmRUcmVlSXRlbVRleHRdXCI+PC9uZy1jb250ZW50PlxuICAgIDwvZGl2PlxuICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIltmZFRyZWVJdGVtQnV0dG9uXVwiPjwvbmctY29udGVudD5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiX3NlbGVjdGlvbk1vZGVsPy5wbGFjZW1lbnQgPT09ICdyaWdodCdcIj5cbiAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInNlbGVjdGlvblwiPjwvbmctdGVtcGxhdGU+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPGZkLWljb25cbiAgICAgICAgZ2x5cGg9XCJzbGltLWFycm93LXJpZ2h0XCJcbiAgICAgICAgY2xhc3M9XCJmZC10cmVlX19pY29uIGZkLXRyZWVfX2ljb24tLW5hdmlnYXRpb25cIlxuICAgICAgICAqbmdJZj1cIm5hdmlnYXRhYmxlICYmIF9uYXZpZ2F0aW9uSW5kaWNhdG9yXCJcbiAgICA+PC9mZC1pY29uPlxuPC9kaXY+XG5cbjxuZy1jb250YWluZXIgKm5nSWY9XCJoYXNQcm9qZWN0ZWRDaGlsZHJlbiAmJiBleHBhbmRlZFwiPlxuICAgIDxkaXYgY2xhc3M9XCJmZC10cmVlXCI+XG4gICAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cImZkLXRyZWUtaXRlbVwiPjwvbmctY29udGVudD5cbiAgICA8L2Rpdj5cbjwvbmctY29udGFpbmVyPlxuXG48bmctdGVtcGxhdGUgI3NlbGVjdGlvbj5cbiAgICA8ZGl2IGNsYXNzPVwiZmQtZm9ybS1pdGVtXCI+XG4gICAgICAgIDxmZC1jaGVja2JveFxuICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJfc2VsZWN0aW9uU3RhdGVcIlxuICAgICAgICAgICAgW25nTW9kZWxPcHRpb25zXT1cInsgc3RhbmRhbG9uZTogdHJ1ZSB9XCJcbiAgICAgICAgICAgIFtzdGFuZGFsb25lXT1cInRydWVcIlxuICAgICAgICAgICAgdGFiSW5kZXhWYWx1ZT1cIi0xXCJcbiAgICAgICAgICAgICpuZ0lmPVwiX3NlbGVjdGlvbk1vZGVsPy5tb2RlID09PSAnbXVsdGlwbGUnXCJcbiAgICAgICAgPjwvZmQtY2hlY2tib3g+XG4gICAgICAgIDxmZC1yYWRpby1idXR0b25cbiAgICAgICAgICAgIFsobmdNb2RlbCldPVwiX3NlbGVjdGlvblN0YXRlXCJcbiAgICAgICAgICAgIFtuZ01vZGVsT3B0aW9uc109XCJ7IHN0YW5kYWxvbmU6IHRydWUgfVwiXG4gICAgICAgICAgICBbc2VsZWN0ZWRWYWx1ZV09XCJfc2VsZWN0aW9uU3RhdGVcIlxuICAgICAgICAgICAgW3ZhbHVlXT1cInRydWVcIlxuICAgICAgICAgICAgdGFiSW5kZXg9XCItMVwiXG4gICAgICAgICAgICBbc3RhbmRhbG9uZV09XCJ0cnVlXCJcbiAgICAgICAgICAgIHRhYkluZGV4VmFsdWU9XCItMVwiXG4gICAgICAgICAgICAqbmdJZj1cIl9zZWxlY3Rpb25Nb2RlbD8ubW9kZSA9PT0gJ3NpbmdsZSdcIlxuICAgICAgICA+PC9mZC1yYWRpby1idXR0b24+XG4gICAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuIl19
|
|
305
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS1pdGVtLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS9zcmMvbGliL3RyZWUvY29tcG9uZW50cy90cmVlLWl0ZW0vdHJlZS1pdGVtLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS9zcmMvbGliL3RyZWUvY29tcG9uZW50cy90cmVlLWl0ZW0vdHJlZS1pdGVtLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFSCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxlQUFlLEVBQ2YsVUFBVSxFQUNWLFVBQVUsRUFDVixZQUFZLEVBQ1osV0FBVyxFQUNYLE1BQU0sRUFDTixLQUFLLEVBR0wsTUFBTSxFQUNOLFNBQVMsRUFDVCxTQUFTLEVBQ1QsaUJBQWlCLEVBQ3BCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBYyxtQkFBbUIsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ25GLE9BQU8sRUFDSCw0QkFBNEIsRUFFNUIsdUJBQXVCLEVBQ3ZCLG1CQUFtQixFQUNuQixNQUFNLEVBQ1QsTUFBTSw0QkFBNEIsQ0FBQztBQUNwQyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBR25GLE9BQU8sRUFBc0IsV0FBVyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDckUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ2pFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQ3pFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDOzs7Ozs7Ozs7OztBQXVCaEUsTUFBTSxPQUFPLGlCQUNULFNBQVEsWUFBa0I7SUFxQjFCOztPQUVHO0lBQ0gsSUFDSSxRQUFRLENBQUMsS0FBdUI7UUFDaEMsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7SUFDM0IsQ0FBQztJQUVELElBQUksUUFBUTtRQUNSLE9BQU8sSUFBSSxDQUFDLFNBQVMsSUFBSSxJQUFJLENBQUMsZUFBZSxFQUFFLEVBQUUsQ0FBQztJQUN0RCxDQUFDO0lBMEJEOztPQUVHO0lBQ0gsSUFFSSxLQUFLLENBQUMsS0FBYTtRQUNuQixJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztJQUN4QixDQUFDO0lBRUQsSUFBSSxLQUFLO1FBQ0wsT0FBTyxJQUFJLENBQUMsTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDL0YsQ0FBQztJQUVEOztPQUVHO0lBQ0gsSUFDSSxRQUFRLENBQUMsS0FBYztRQUN2QixJQUFJLEtBQUssS0FBSyxJQUFJLENBQUMsU0FBUyxFQUFFO1lBQzFCLE9BQU87U0FDVjtRQUNELElBQUksQ0FBQyxZQUFZLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ2hFLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO1FBRXZCLElBQUksS0FBSyxFQUFFO1lBQ1AsVUFBVSxDQUFDLEdBQUcsRUFBRTtnQkFDWixJQUFJLENBQUMsWUFBWSxDQUFDLGFBQWEsQ0FBQyxJQUFJLEVBQUUsQ0FBQztnQkFDdkMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLGtCQUFrQixFQUFFLEtBQUssRUFBRSxDQUFDO1lBQzFELENBQUMsQ0FBQyxDQUFDO1NBQ047YUFBTTtZQUNILElBQUksQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDO1lBQ25CLElBQUksQ0FBQyxjQUFjLEdBQUcsS0FBSyxDQUFDO1lBQzVCLElBQUksQ0FBQyxZQUFZLENBQUMsYUFBYSxDQUFDLElBQUksRUFBRSxDQUFDO1NBQzFDO1FBRUQsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUM5QixDQUFDO0lBRUQsSUFBSSxRQUFRO1FBQ1IsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQzFCLENBQUM7SUFzRUQseURBQXlEO0lBQ3pELElBQUksV0FBVztRQUNYLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLElBQUksSUFBSSxDQUFDLG9CQUFvQixDQUFDO0lBQzFELENBQUM7SUFFRCwrREFBK0Q7SUFDL0QsSUFBSSxvQkFBb0I7UUFDcEIsT0FBTyxJQUFJLENBQUMsbUJBQW1CLElBQUksSUFBSSxDQUFDLG1CQUFtQixDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7SUFDM0UsQ0FBQztJQUVELHNEQUFzRDtJQUN0RCxJQUFJLGFBQWE7UUFDYixPQUFPLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxDQUFDLENBQUM7SUFDdEMsQ0FBQztJQUVELG1EQUFtRDtJQUNuRCxJQUFJLGtCQUFrQjtRQUNsQixPQUFPLElBQUksQ0FBQyxlQUFlLEtBQUssSUFBSTtZQUNoQyxDQUFDLENBQUMsSUFBSTtZQUNOLENBQUMsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLGtCQUFrQixJQUFJLElBQUksQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDO0lBQ25GLENBQUM7SUFtQ0QsY0FBYztJQUNkO1FBQ0ksS0FBSyxFQUFFLENBQUM7UUF4Tlo7O1dBRUc7UUFFSCxPQUFFLEdBQUcsTUFBTSxFQUFFLENBQUM7UUFxQmQ7O1dBRUc7UUFFSCxnQkFBVyxHQUFHLEtBQUssQ0FBQztRQVFwQjs7V0FFRztRQUVILGVBQVUsR0FBa0MsRUFBRSxDQUFDO1FBRS9DOztXQUVHO1FBRUgsZ0JBQVcsR0FBRyxLQUFLLENBQUM7UUE0Q3BCOztXQUVHO1FBRU0sa0JBQWEsR0FBRyxJQUFJLFlBQVksRUFBOEIsQ0FBQztRQUV4RTs7V0FFRztRQUVILG1CQUFjLEdBQUcsSUFBSSxZQUFZLEVBQVcsQ0FBQztRQWM3Qzs7O1dBR0c7UUFDSCx5QkFBb0IsR0FBRyxLQUFLLENBQUM7UUFFN0I7OztXQUdHO1FBQ0gsb0JBQWUsR0FBRyxLQUFLLENBQUM7UUFFeEIsY0FBYztRQUNkLGFBQVEsR0FBUSxFQUFFLENBQUM7UUFFbkIsY0FBYztRQUNkLG1CQUFjLEdBQUcsS0FBSyxDQUFDO1FBS3ZCLGNBQWM7UUFDZCx1QkFBa0IsR0FBRyxDQUFDLENBQUM7UUFPdkIsY0FBYztRQUNkLHlCQUFvQixHQUFHLEtBQUssQ0FBQztRQUU3QixjQUFjO1FBQ0wsZUFBVSxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztRQVF6QyxjQUFjO1FBQ04sY0FBUyxHQUFHLEtBQUssQ0FBQztRQXdCMUIsY0FBYztRQUNOLHNCQUFpQixHQUFHLENBQUMsQ0FBQztRQUU5QixjQUFjO1FBQ0csY0FBUyxHQUFHLElBQUksT0FBTyxFQUE4QixDQUFDO1FBRXZFLHVDQUF1QztRQUN2Qyw4REFBOEQ7UUFDOUQsWUFBTyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsWUFBWSxFQUFFLENBQUM7UUFFeEMsY0FBYztRQUNHLGlCQUFZLEdBQUcsTUFBTSxDQUEwQixpQkFBaUIsRUFBRTtZQUMvRSxRQUFRLEVBQUUsSUFBSTtTQUNqQixDQUFDLENBQUM7UUFFSCxjQUFjO1FBQ0csaUJBQVksR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUM7UUFFcEQsY0FBYztRQUNHLHlCQUFvQixHQUFHLE1BQU0sQ0FBOEMsbUJBQW1CLENBQUMsQ0FBQztRQUVqSCxjQUFjO1FBQ0csU0FBSSxHQUFHLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBRWxELGNBQWM7UUFDRyxnQkFBVyxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUVsRCxjQUFjO1FBQ0csb0JBQWUsR0FBRyxNQUFNLENBQUMsaUJBQWlCLEVBQUU7WUFDekQsUUFBUSxFQUFFLElBQUk7WUFDZCxRQUFRLEVBQUUsSUFBSTtTQUNqQixDQUFDLENBQUM7UUFLQyxJQUFJLENBQUMsWUFBWSxFQUFFLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN6QyxDQUFDO0lBRUQsY0FBYztJQUNkLFFBQVE7UUFDSixJQUFJLENBQUMsWUFBWSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDM0YsSUFBSSxDQUFDLGVBQWUsR0FBRyxLQUFLLENBQUM7WUFDN0IsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUM5QixDQUFDLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxZQUFZLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO1lBQ2pHLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxLQUFLLENBQUM7WUFDbEMsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUM5QixDQUFDLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLFVBQWdELENBQUM7UUFDN0YsSUFBSSxDQUFDLFlBQVksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBRXhFLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxrQkFBa0I7WUFDeEMsRUFBRSxhQUFhLEVBQUU7YUFDaEIsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQzthQUMxQyxTQUFTLENBQUMsQ0FBQyxVQUFVLEVBQUUsRUFBRTtZQUN0QixJQUFJLENBQUMsaUJBQWlCLEdBQUcsVUFBVSxDQUFDO1lBQ3BDLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxJQUFJLENBQUM7WUFDakMsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUM5QixDQUFDLENBQUMsQ0FBQztRQUVQLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxrQkFBa0IsRUFBRSxZQUFZO2FBQ3JELElBQUksQ0FDRCxNQUFNLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxFQUM5QixTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLFlBQVksQ0FBQyxFQUN2RCxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQ3ZDO2FBQ0EsU0FBUyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7WUFDaEIsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLGtCQUFrQixDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFRLENBQUM7WUFDM0YsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUM7WUFDM0IsVUFBVSxDQUFDLEdBQUcsRUFBRTtnQkFDWixJQUFJLENBQUMsWUFBWSxDQUFDLGFBQWEsQ0FBQyxJQUFJLEVBQUUsQ0FBQztnQkFDdkMsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUM5QixDQUFDLENBQUMsQ0FBQztRQUNQLENBQUMsQ0FBQyxDQUFDO0lBQ1gsQ0FBQztJQUVELGNBQWM7SUFDZCxlQUFlO1FBQ1gsSUFBSSxDQUFDLG1CQUFtQixDQUFDLE9BQU87YUFDM0IsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRSxvQkFBb0IsRUFBRSxFQUFFLGtCQUFrQixDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQzthQUNuRixTQUFTLENBQUMsR0FBRyxFQUFFO1lBQ1osSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUMxQixJQUFJLENBQUMsbUJBQW1CLENBQUMsT0FBTyxDQUFDLENBQUMsUUFBUSxFQUFFLEtBQUssRUFBRSxFQUFFO2dCQUNqRCxRQUFRLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxNQUFNLEVBQUUsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQ3JFLENBQUMsQ0FBQyxDQUFDO1FBQ1AsQ0FBQyxDQUFDLENBQUM7SUFDWCxDQUFDO0lBRUQsY0FBYztJQUNkLFdBQVc7UUFDUCxJQUFJLENBQUMsWUFBWSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEtBQU0sQ0FBQyxDQUFDO0lBQ2pFLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsV0FBVyxDQUFDLFVBQWtCLEVBQUUsWUFBb0I7UUFDaEQsSUFBSSxDQUFDLFFBQVEsR0FBRyxVQUFVLENBQUM7UUFDM0IsSUFBSSxDQUFDLGdCQUFnQixHQUFHLFlBQVksQ0FBQztJQUN6QyxDQUFDO0lBRUQsd0NBQXdDO0lBQ3hDLEtBQUs7UUFDRCxJQUFJLENBQUMsYUFBYSxFQUFFLGFBQWEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUM5QyxDQUFDO0lBRUQsaURBQWlEO0lBQ2pELG9CQUFvQixDQUFDLEtBQWE7UUFDOUIsSUFBSSxDQUFDLGtCQUFrQixHQUFHLEtBQUssQ0FBQztRQUNoQyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQzdCLENBQUM7SUFFRCxjQUFjO0lBQ2Qsa0JBQWtCLENBQUMsS0FBaUI7UUFDaEMsOENBQThDO1FBQzlDLEtBQUssQ0FBQyx3QkFBd0IsRUFBRSxDQUFDO1FBQ2pDLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO1FBQy9CLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUN4QyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDakIsQ0FBQztJQUVELGNBQWM7SUFDZCxRQUFRLENBQUMsS0FBaUM7UUFDdEMsS0FBSyxDQUFDLHdCQUF3QixFQUFFLENBQUM7UUFFakMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDM0IsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDbkMsQ0FBQztJQUVELGNBQWM7SUFDZCxZQUFZLENBQUMsUUFBaUI7UUFDMUIsSUFBSSxDQUFDLGVBQWUsR0FBRyxRQUFRLENBQUM7SUFDcEMsQ0FBQzs4R0F2VVEsaUJBQWlCO2tHQUFqQixpQkFBaUIsMmZBWGY7WUFDUDtnQkFDSSxPQUFPLEVBQUUsNEJBQTRCO2dCQUNyQyxXQUFXLEVBQUUsaUJBQWlCO2FBQ2pDO1lBQ0Q7Z0JBQ0ksT0FBTyxFQUFFLFlBQVk7Z0JBQ3JCLFdBQVcsRUFBRSxpQkFBaUI7YUFDakM7U0FDSiw4REEySGdCLFlBQVksd0hBUk8sVUFBVSxrRUFJbkMsdUJBQXVCLGdJQzdLdEMsbTNHQXVGQTs7MkZEL0JhLGlCQUFpQjtrQkFyQjdCLFNBQVM7K0JBQ0ksY0FBYyxpQkFFVCxpQkFBaUIsQ0FBQyxJQUFJLG1CQUNwQix1QkFBdUIsQ0FBQyxNQUFNLGtCQUMvQixDQUFDLG1CQUFtQixDQUFDLFFBQy9CO3dCQUNGLEtBQUssRUFBRSxlQUFlO3dCQUN0QixJQUFJLEVBQUUsY0FBYztxQkFDdkIsYUFDVTt3QkFDUDs0QkFDSSxPQUFPLEVBQUUsNEJBQTRCOzRCQUNyQyxXQUFXLG1CQUFtQjt5QkFDakM7d0JBQ0Q7NEJBQ0ksT0FBTyxFQUFFLFlBQVk7NEJBQ3JCLFdBQVcsbUJBQW1CO3lCQUNqQztxQkFDSjswRUFVRCxLQUFLO3NCQURKLEtBQUs7Z0JBTU4sRUFBRTtzQkFERCxLQUFLO2dCQVFOLFNBQVM7c0JBRlIsV0FBVzt1QkFBQyxpQkFBaUI7O3NCQUM3QixLQUFLO2dCQU9GLFFBQVE7c0JBRFgsS0FBSztnQkFhTixXQUFXO3NCQURWLEtBQUs7Z0JBT04sS0FBSztzQkFESixLQUFLO2dCQU9OLFVBQVU7c0JBRFQsS0FBSztnQkFPTixXQUFXO3NCQURWLEtBQUs7Z0JBUUYsS0FBSztzQkFGUixLQUFLOztzQkFDTCxXQUFXO3VCQUFDLGlCQUFpQjtnQkFhMUIsUUFBUTtzQkFEWCxLQUFLO2dCQThCRyxhQUFhO3NCQURyQixNQUFNO2dCQU9QLGNBQWM7c0JBRGIsTUFBTTtnQkFLUCxhQUFhO3NCQURaLFNBQVM7dUJBQUMsZUFBZSxFQUFFLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRTtnQkFLaEQsa0JBQWtCO3NCQURqQixTQUFTO3VCQUFDLHVCQUF1QjtnQkFLbEMsbUJBQW1CO3NCQURsQixlQUFlO3VCQUFDLFlBQVkiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIEFmdGVyVmlld0luaXQsXG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQ29tcG9uZW50LFxuICAgIENvbnRlbnRDaGlsZHJlbixcbiAgICBEZXN0cm95UmVmLFxuICAgIEVsZW1lbnRSZWYsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIEhvc3RCaW5kaW5nLFxuICAgIGluamVjdCxcbiAgICBJbnB1dCxcbiAgICBPbkRlc3Ryb3ksXG4gICAgT25Jbml0LFxuICAgIE91dHB1dCxcbiAgICBRdWVyeUxpc3QsXG4gICAgVmlld0NoaWxkLFxuICAgIFZpZXdFbmNhcHN1bGF0aW9uXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRGF0YVNvdXJjZSwgRGF0YVNvdXJjZURpcmVjdGl2ZSB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY2RrL2RhdGEtc291cmNlJztcbmltcG9ydCB7XG4gICAgRkRLX1NFTEVDVEFCTEVfSVRFTV9QUk9WSURFUixcbiAgICBOdWxsYWJsZSxcbiAgICBTZWxlY3RhYmxlSXRlbURpcmVjdGl2ZSxcbiAgICBTZWxlY3RhYmxlSXRlbVRva2VuLFxuICAgIHV1aWR2NFxufSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2Nkay91dGlscyc7XG5pbXBvcnQgeyBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgZmlsdGVyLCBzdGFydFdpdGgsIFN1YmplY3QsIHN3aXRjaE1hcCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgRmRUcmVlQWNjZXB0YWJsZURhdGFTb3VyY2UsIEZkVHJlZURhdGFTb3VyY2UgfSBmcm9tICcuLi8uLi9kYXRhLXNvdXJjZS90cmVlLWRhdGEtc291cmNlJztcbmltcG9ydCB7IFRyZWVJdGVtLCBUcmVlSXRlbVN0YXRlIH0gZnJvbSAnLi4vLi4vbW9kZWxzL3RyZWUtaXRlbSc7XG5pbXBvcnQgeyBTZWxlY3Rpb25Nb2RlTW9kZWwsIFRyZWVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vdHJlZS5zZXJ2aWNlJztcbmltcG9ydCB7IEJhc2VUcmVlSXRlbSB9IGZyb20gJy4uLy4uL21vZGVscy9iYXNlLXRyZWUtaXRlbS5jbGFzcyc7XG5pbXBvcnQgeyBUcmVlSXRlbURpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZXMvdHJlZS1pdGVtLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyB0YWtlVW50aWxEZXN0cm95ZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnZmQtdHJlZS1pdGVtJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vdHJlZS1pdGVtLmNvbXBvbmVudC5odG1sJyxcbiAgICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgIGhvc3REaXJlY3RpdmVzOiBbRGF0YVNvdXJjZURpcmVjdGl2ZV0sXG4gICAgaG9zdDoge1xuICAgICAgICBjbGFzczogJ2ZkLXRyZWVfX2l0ZW0nLFxuICAgICAgICByb2xlOiAncHJlc2VudGF0aW9uJ1xuICAgIH0sXG4gICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIHByb3ZpZGU6IEZES19TRUxFQ1RBQkxFX0lURU1fUFJPVklERVIsXG4gICAgICAgICAgICB1c2VFeGlzdGluZzogVHJlZUl0ZW1Db21wb25lbnRcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgcHJvdmlkZTogQmFzZVRyZWVJdGVtLFxuICAgICAgICAgICAgdXNlRXhpc3Rpbmc6IFRyZWVJdGVtQ29tcG9uZW50XG4gICAgICAgIH1cbiAgICBdXG59KVxuZXhwb3J0IGNsYXNzIFRyZWVJdGVtQ29tcG9uZW50PFQgZXh0ZW5kcyBUcmVlSXRlbSA9IFRyZWVJdGVtLCBQID0gYW55PlxuICAgIGV4dGVuZHMgQmFzZVRyZWVJdGVtPFQsIFA+XG4gICAgaW1wbGVtZW50cyBQYXJ0aWFsPFNlbGVjdGFibGVJdGVtVG9rZW48SFRNTEVsZW1lbnQsIFA+PiwgT25Jbml0LCBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3lcbntcbiAgICAvKipcbiAgICAgKiBUcmVlIGl0ZW0gdmFsdWUuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICB2YWx1ZTogUDtcbiAgICAvKipcbiAgICAgKiBUcmVlIGl0ZW0gSUQuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBpZCA9IHV1aWR2NCgpO1xuXG4gICAgLyoqXG4gICAgICogVHJlZSBpdGVtIGFyaWEgbGFiZWwuXG4gICAgICovXG4gICAgQEhvc3RCaW5kaW5nKCdhdHRyLmFyaWEtbGFiZWwnKVxuICAgIEBJbnB1dCgpXG4gICAgYXJpYUxhYmVsOiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBUcmVlIGl0ZW0gcGFyZW50IElELlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IHBhcmVudElkKHZhbHVlOiBOdWxsYWJsZTxzdHJpbmc+KSB7XG4gICAgICAgIHRoaXMuX3BhcmVudElkID0gdmFsdWU7XG4gICAgfVxuXG4gICAgZ2V0IHBhcmVudElkKCk6IE51bGxhYmxlPHN0cmluZz4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fcGFyZW50SWQgfHwgdGhpcy5fcGFyZW50VHJlZUl0ZW0/LmlkO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdGhlIHRyZWUgaXRlbSBpcyBuYXZpZ2F0YWJsZS5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIG5hdmlnYXRhYmxlID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBUcmVlIGl0ZW0gc3RhdGUuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBzdGF0ZTogTnVsbGFibGU8VHJlZUl0ZW1TdGF0ZT47XG5cbiAgICAvKipcbiAgICAgKiBUcmVlIGl0ZW0gY2hpbGQgbm9kZXMgZGF0YSBzb3VyY2UuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBjaGlsZE5vZGVzOiBGZFRyZWVBY2NlcHRhYmxlRGF0YVNvdXJjZTxUPiA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciB0byB3cmFwIGNvbnRlbnQuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICB3cmFwQ29udGVudCA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogVHJlZSBpdGVtIGxldmVsLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgQEhvc3RCaW5kaW5nKCdhdHRyLmFyaWEtbGV2ZWwnKVxuICAgIHNldCBsZXZlbCh2YWx1ZTogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMuX2xldmVsID0gdmFsdWU7XG4gICAgfVxuXG4gICAgZ2V0IGxldmVsKCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLl9sZXZlbCB8fCAodGhpcy5fcGFyZW50VHJlZUl0ZW0gIT09IG51bGwgPyB0aGlzLl9wYXJlbnRUcmVlSXRlbS5sZXZlbCArIDEgOiAxKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHRoZSB0cmVlIGl0ZW0gaXMgZXhwYW5kZWQuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBzZXQgZXhwYW5kZWQodmFsdWU6IGJvb2xlYW4pIHtcbiAgICAgICAgaWYgKHZhbHVlID09PSB0aGlzLl9leHBhbmRlZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3RyZWVTZXJ2aWNlLmFkZEV4cGFuZGFibGVJdGVtKHRoaXMuaWQsIHRoaXMubGV2ZWwsIHZhbHVlKTtcbiAgICAgICAgdGhpcy5fZXhwYW5kZWQgPSB2YWx1ZTtcblxuICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuX3RyZWVTZXJ2aWNlLmRldGVjdENoYW5nZXMubmV4dCgpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2RhdGFTb3VyY2VEaXJlY3RpdmUuZGF0YVNvdXJjZVByb3ZpZGVyPy5tYXRjaCgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmNoaWxkcmVuID0gW107XG4gICAgICAgICAgICB0aGlzLmNoaWxkcmVuTG9hZGVkID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLl90cmVlU2VydmljZS5kZXRlY3RDaGFuZ2VzLm5leHQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2Nkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuXG4gICAgZ2V0IGV4cGFuZGVkKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fZXhwYW5kZWQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRXZlbnQgZW1pdHRlZCB3aGVuIHVzZXIgY2xpY2tzIG9uIHRyZWUgaXRlbS5cbiAgICAgKi9cbiAgICBAT3V0cHV0KClcbiAgICByZWFkb25seSB0cmVlSXRlbUNsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjxNb3VzZUV2ZW50IHwgS2V5Ym9hcmRFdmVudD4oKTtcblxuICAgIC8qKlxuICAgICAqIEV2ZW50IGVtaXR0ZWQgd2hlbiBgZXhwYW5kZWRgIHN0YXRlIGNoYW5nZXMuXG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgZXhwYW5kZWRDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG5cbiAgICAvKiogVHJlZSBpdGVtIGZvY3VzYWJsZSBjb250YWluZXIuICovXG4gICAgQFZpZXdDaGlsZCgnaXRlbUNvbnRhaW5lcicsIHsgcmVhZDogRWxlbWVudFJlZiB9KVxuICAgIGl0ZW1Db250YWluZXI6IE51bGxhYmxlPEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+PjtcblxuICAgIC8qKiBTZWxlY3RhYmxlIGl0ZW0uICovXG4gICAgQFZpZXdDaGlsZChTZWxlY3RhYmxlSXRlbURpcmVjdGl2ZSlcbiAgICBzZWxlY3RhYmxlTGlzdEl0ZW06IFNlbGVjdGFibGVJdGVtVG9rZW47XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBDb250ZW50Q2hpbGRyZW4oQmFzZVRyZWVJdGVtKVxuICAgIF9wcm9qZWN0ZWRUcmVlSXRlbXM6IFF1ZXJ5TGlzdDxCYXNlVHJlZUl0ZW0+O1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIFdoZXRoZXIgdGhlIHRyZWUgaXRlbSBzaG91bGQgaGF2ZSBhIG5hdmlnYXRpb24gaW5kaWNhdG9yLlxuICAgICAqL1xuICAgIF9uYXZpZ2F0aW9uSW5kaWNhdG9yID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogU2VsZWN0aW9uIHN0YXRlLlxuICAgICAqL1xuICAgIF9zZWxlY3Rpb25TdGF0ZSA9IGZhbHNlO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBjaGlsZHJlbjogVFtdID0gW107XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGNoaWxkcmVuTG9hZGVkID0gZmFsc2U7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9zZWxlY3Rpb25Nb2RlbDogTnVsbGFibGU8U2VsZWN0aW9uTW9kZU1vZGVsPjtcblxuICAgIC8qKiBASGlkZGVuICovXG4gICAgX2NvbnRhaW5lclRhYkluZGV4ID0gMDtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX3NldFNpemU6IG51bWJlcjtcbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9jdXJyZW50UG9zaXRpb246IG51bWJlcjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX3RvdGFsQ2hpbGRyZW5Mb2FkZWQgPSBmYWxzZTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcmVhZG9ubHkgZWxlbWVudFJlZiA9IGluamVjdChFbGVtZW50UmVmKTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfcGFyZW50SWQ6IE51bGxhYmxlPHN0cmluZz47XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2xldmVsOiBudW1iZXI7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2V4cGFuZGVkID0gZmFsc2U7XG5cbiAgICAvKiogV2hldGhlciB0aGUgdHJlZSBpdGVtIGhhcyBhbnkgdHlwZSBvZiBjaGlsZCBub2Rlcy4gKi9cbiAgICBnZXQgaGFzQ2hpbGRyZW4oKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAhIXRoaXMuY2hpbGROb2RlcyB8fCB0aGlzLmhhc1Byb2plY3RlZENoaWxkcmVuO1xuICAgIH1cblxuICAgIC8qKiBXaGV0aGVyIHRoZSB0cmVlIGl0ZW0gaGFzIGNvbnRlbnQtcHJvamVjdGVkIGNoaWxkIG5vZGVzLiAqL1xuICAgIGdldCBoYXNQcm9qZWN0ZWRDaGlsZHJlbigpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Byb2plY3RlZFRyZWVJdGVtcyAmJiB0aGlzLl9wcm9qZWN0ZWRUcmVlSXRlbXMubGVuZ3RoID4gMDtcbiAgICB9XG5cbiAgICAvKiogV2hldGhlciB0aGUgdHJlZSBpdGVtIGhhcyBkYXRhIHNvdXJjZSBjaGlsZHJlbi4gKi9cbiAgICBnZXQgaGFzRHNDaGlsZHJlbigpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RzQ2hpbGRyZW5OdW1iZXIgPiAwO1xuICAgIH1cblxuICAgIC8qKiBXaGV0aGVyIHRoZSBpdGVtIGlzIGFjY2Vzc2libGUgdmlhIGtleWJvYXJkLiAqL1xuICAgIGdldCBrZXlib2FyZEFjY2Vzc2libGUoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9wYXJlbnRUcmVlSXRlbSA9PT0gbnVsbFxuICAgICAgICAgICAgPyB0cnVlXG4gICAgICAgICAgICA6IHRoaXMuX3BhcmVudFRyZWVJdGVtLmtleWJvYXJkQWNjZXNzaWJsZSAmJiB0aGlzLl9wYXJlbnRUcmVlSXRlbS5leHBhbmRlZDtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2RzQ2hpbGRyZW5OdW1iZXIgPSAwO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IF9jbGlja2VkJCA9IG5ldyBTdWJqZWN0PE1vdXNlRXZlbnQgfCBLZXlib2FyZEV2ZW50PigpO1xuXG4gICAgLyoqIENsaWNrZWQgYmVoYXZpb3IgaW1wbGVtZW50YXRpb24uICovXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9tZW1iZXItb3JkZXJpbmdcbiAgICBjbGlja2VkID0gdGhpcy5fY2xpY2tlZCQuYXNPYnNlcnZhYmxlKCk7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX3RyZWVJdGVtRGlyID0gaW5qZWN0PFRyZWVJdGVtRGlyZWN0aXZlPFQsIFA+PihUcmVlSXRlbURpcmVjdGl2ZSwge1xuICAgICAgICBvcHRpb25hbDogdHJ1ZVxuICAgIH0pO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IF90cmVlU2VydmljZSA9IGluamVjdChUcmVlU2VydmljZSk7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX2RhdGFTb3VyY2VEaXJlY3RpdmUgPSBpbmplY3Q8RGF0YVNvdXJjZURpcmVjdGl2ZTxULCBGZFRyZWVEYXRhU291cmNlPFQ+Pj4oRGF0YVNvdXJjZURpcmVjdGl2ZSk7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX2NkciA9IGluamVjdChDaGFuZ2VEZXRlY3RvclJlZik7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX2Rlc3Ryb3lSZWYgPSBpbmplY3QoRGVzdHJveVJlZik7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX3BhcmVudFRyZWVJdGVtID0gaW5qZWN0KFRyZWVJdGVtQ29tcG9uZW50LCB7XG4gICAgICAgIG9wdGlvbmFsOiB0cnVlLFxuICAgICAgICBza2lwU2VsZjogdHJ1ZVxuICAgIH0pO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5fdHJlZUl0ZW1EaXI/LnNldFRyZWVJdGVtKHRoaXMpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3RyZWVTZXJ2aWNlLnNlbGVjdGlvbk1vZGUucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5fZGVzdHJveVJlZikpLnN1YnNjcmliZSgobW9kZWwpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX3NlbGVjdGlvbk1vZGVsID0gbW9kZWw7XG4gICAgICAgICAgICB0aGlzLl9jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLl90cmVlU2VydmljZS5uYXZpZ2F0aW9uSW5kaWNhdG9yLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKHRoaXMuX2Rlc3Ryb3lSZWYpKS5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9uYXZpZ2F0aW9uSW5kaWNhdG9yID0gdmFsdWU7XG4gICAgICAgICAgICB0aGlzLl9jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLl9kYXRhU291cmNlRGlyZWN0aXZlLmRhdGFTb3VyY2UgPSB0aGlzLmNoaWxkTm9kZXMgYXMgRGF0YVNvdXJjZTxULCBGZFRyZWVEYXRhU291cmNlPFQ+PjtcbiAgICAgICAgdGhpcy5fdHJlZVNlcnZpY2UuYWRkRXhwYW5kYWJsZUl0ZW0odGhpcy5pZCwgdGhpcy5sZXZlbCwgdGhpcy5leHBhbmRlZCk7XG5cbiAgICAgICAgdGhpcy5fZGF0YVNvdXJjZURpcmVjdGl2ZS5kYXRhU291cmNlUHJvdmlkZXJcbiAgICAgICAgICAgID8uZ2V0VG90YWxJdGVtcygpXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5fZGVzdHJveVJlZikpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCh0b3RhbEl0ZW1zKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZHNDaGlsZHJlbk51bWJlciA9IHRvdGFsSXRlbXM7XG4gICAgICAgICAgICAgICAgdGhpcy5fdG90YWxDaGlsZHJlbkxvYWRlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgdGhpcy5fY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuX2RhdGFTb3VyY2VEaXJlY3RpdmUuZGF0YVNvdXJjZVByb3ZpZGVyPy5kYXRhUmVjZWl2ZWRcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIGZpbHRlcigocmVjZWl2ZWQpID0+IHJlY2VpdmVkKSxcbiAgICAgICAgICAgICAgICBzd2l0Y2hNYXAoKCkgPT4gdGhpcy5fZGF0YVNvdXJjZURpcmVjdGl2ZS5kYXRhQ2hhbmdlZCQpLFxuICAgICAgICAgICAgICAgIHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLl9kZXN0cm95UmVmKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoZGF0YSkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuY2hpbGRyZW4gPSB0aGlzLl90cmVlU2VydmljZS5ub3JtYWxpemVUcmVlSXRlbXMoZGF0YSwgdGhpcy5pZCwgdGhpcy5sZXZlbCArIDEpIGFzIFRbXTtcbiAgICAgICAgICAgICAgICB0aGlzLmNoaWxkcmVuTG9hZGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fdHJlZVNlcnZpY2UuZGV0ZWN0Q2hhbmdlcy5uZXh0KCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2Nkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fcHJvamVjdGVkVHJlZUl0ZW1zLmNoYW5nZXNcbiAgICAgICAgICAgIC5waXBlKHN0YXJ0V2l0aChudWxsKSwgZGlzdGluY3RVbnRpbENoYW5nZWQoKSwgdGFrZVVudGlsRGVzdHJveWVkKHRoaXMuX2Rlc3Ryb3lSZWYpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9wcm9qZWN0ZWRUcmVlSXRlbXMuZm9yRWFjaCgodHJlZUl0ZW0sIGluZGV4KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRyZWVJdGVtLnNldFBvc2l0aW9uKHRoaXMuX3Byb2plY3RlZFRyZWVJdGVtcy5sZW5ndGgsIGluZGV4ICsgMSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICB0aGlzLl90cmVlU2VydmljZS5yZW1vdmVFeHBhbmRhYmxlSXRlbSh0aGlzLmlkLCB0aGlzLmxldmVsISk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyBwb3NpdGlvbiBvZiB0aGUgY3VycmVudCBpdGVtIGluIHRoZSBzZXQuXG4gICAgICogQHBhcmFtIHRvdGFsSXRlbXMgVG90YWwgaXRlbXMgYW1vdW50IGluIHRoZSBzZXQuXG4gICAgICogQHBhcmFtIGN1cnJlbnRJbmRleCBDdXJyZW50IGl0ZW0gcG9zaXRpb24gaW4gdGhlIHNldC5cbiAgICAgKi9cbiAgICBzZXRQb3NpdGlvbih0b3RhbEl0ZW1zOiBudW1iZXIsIGN1cnJlbnRJbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3NldFNpemUgPSB0b3RhbEl0ZW1zO1xuICAgICAgICB0aGlzLl9jdXJyZW50UG9zaXRpb24gPSBjdXJyZW50SW5kZXg7XG4gICAgfVxuXG4gICAgLyoqIE1ldGhvZCB0byBmb2N1cyBvbiB0aGUgdHJlZSBpdGVtLiAqL1xuICAgIGZvY3VzKCk6IHZvaWQge1xuICAgICAgICB0aGlzLml0ZW1Db250YWluZXI/Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICB9XG5cbiAgICAvKiogTWV0aG9kIGZvciBzZXR0aW5nIHRoZSBmb2N1c2FibGUgdGFiaW5kZXguICovXG4gICAgc2V0Q29udGFpbmVyVGFiSW5kZXgodmFsdWU6IG51bWJlcik6IHZvaWQge1xuICAgICAgICB0aGlzLl9jb250YWluZXJUYWJJbmRleCA9IHZhbHVlO1xuICAgICAgICB0aGlzLl9jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfdG9nZ2xlRXhwYW5kU3RhdGUoZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgLy8gRG8gbm90IGJ1YmJsZSB1cCB0byBzZWxlY3Rpb24gY2hhbmdlIGV2ZW50LlxuICAgICAgICBldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcbiAgICAgICAgdGhpcy5leHBhbmRlZCA9ICF0aGlzLmV4cGFuZGVkO1xuICAgICAgICB0aGlzLmV4cGFuZGVkQ2hhbmdlLmVtaXQodGhpcy5leHBhbmRlZCk7XG4gICAgICAgIHRoaXMuZm9jdXMoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9vbkNsaWNrKGV2ZW50OiBNb3VzZUV2ZW50IHwgS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgICAgICBldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcblxuICAgICAgICB0aGlzLl9jbGlja2VkJC5uZXh0KGV2ZW50KTtcbiAgICAgICAgdGhpcy50cmVlSXRlbUNsaWNrLmVtaXQoZXZlbnQpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX3NldFNlbGVjdGVkKHNlbGVjdGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3NlbGVjdGlvblN0YXRlID0gc2VsZWN0ZWQ7XG4gICAgfVxufVxuIiwiPGRpdlxuICAgIGNsYXNzPVwiZmQtdHJlZV9faXRlbS1jb250YWluZXJcIlxuICAgIFthdHRyLnRhYmluZGV4XT1cIl9jb250YWluZXJUYWJJbmRleFwiXG4gICAgKGZka0NsaWNrZWQpPVwiX29uQ2xpY2soJGV2ZW50KVwiXG4gICAgZmRrU2VsZWN0YWJsZUl0ZW1cbiAgICAoc2VsZWN0ZWQpPVwiX3NldFNlbGVjdGVkKCRldmVudClcIlxuICAgIFt2YWx1ZV09XCJ2YWx1ZVwiXG4gICAgW2F0dHIuYXJpYS1oYXNwb3B1cF09XCJjaGlsZHJlbi5sZW5ndGggPiAwIHx8IGhhc1Byb2plY3RlZENoaWxkcmVuXCJcbiAgICBbYXR0ci5hcmlhLWV4cGFuZGVkXT1cImV4cGFuZGVkXCJcbiAgICBbYXR0ci5hcmlhLXNldHNpemVdPVwiX3NldFNpemVcIlxuICAgIFthdHRyLmFyaWEtcG9zaW5zZXRdPVwiX2N1cnJlbnRQb3NpdGlvblwiXG4gICAgcm9sZT1cInRyZWVpdGVtXCJcbiAgICBbYXR0ci5hcmlhLWxldmVsXT1cImxldmVsXCJcbiAgICAjaXRlbUNvbnRhaW5lclxuICAgIFtuZ0NsYXNzXT1cIltcbiAgICAgICAgc3RhdGUgPyAnaGFzLWhpZ2hsaWdodC1pbmRpY2F0b3IgaGFzLWhpZ2hsaWdodC1pbmRpY2F0b3ItLScgKyBzdGF0ZSA6ICcnLFxuICAgICAgICBuYXZpZ2F0YWJsZSA/ICdmZC10cmVlX19pdGVtLWNvbnRhaW5lci0tYWN0aXZlJyA6ICcnLFxuICAgICAgICB3cmFwQ29udGVudCA/ICdmZC10cmVlX19jb250ZW50LS13cmFwJyA6ICcnXG4gICAgXVwiXG4+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIl9zZWxlY3Rpb25Nb2RlbD8ucGxhY2VtZW50ID09PSAnbGVmdCdcIj5cbiAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInNlbGVjdGlvblwiPjwvbmctdGVtcGxhdGU+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImhhc0NoaWxkcmVuXCI+XG4gICAgICAgIDxzcGFuXG4gICAgICAgICAgICAqbmdJZj1cImhhc0RzQ2hpbGRyZW4gfHwgaGFzUHJvamVjdGVkQ2hpbGRyZW5cIlxuICAgICAgICAgICAgKGNsaWNrKT1cIl90b2dnbGVFeHBhbmRTdGF0ZSgkZXZlbnQpXCJcbiAgICAgICAgICAgIGNsYXNzPVwiZmQtdHJlZV9fZXhwYW5kZXJcIlxuICAgICAgICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCJcbiAgICAgICAgICAgIHJvbGU9XCJwcmVzZW50YXRpb25cIlxuICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCIoZXhwYW5kZWQgPyAnY29yZVRyZWUuY29sbGFwc2UnIDogJ2NvcmVUcmVlLmV4cGFuZCcpIHwgZmRUcmFuc2xhdGVcIlxuICAgICAgICAgICAgW2NsYXNzLmlzLWV4cGFuZGVkXT1cImV4cGFuZGVkXCJcbiAgICAgICAgPlxuICAgICAgICAgICAgPGZkLWljb25cbiAgICAgICAgICAgICAgICBjbGFzcz1cImZkLXRyZWVfX2ljb25cIlxuICAgICAgICAgICAgICAgIFtnbHlwaF09XCJleHBhbmRlZCA/ICduYXZpZ2F0aW9uLWRvd24tYXJyb3cnIDogJ25hdmlnYXRpb24tcmlnaHQtYXJyb3cnXCJcbiAgICAgICAgICAgID48L2ZkLWljb24+XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZkLXRyZWVfX2V4cGFuZGVyIGZkLXRyZWVfX2V4cGFuZGVyLS1sb2FkaW5nXCIgKm5nSWY9XCIhX3RvdGFsQ2hpbGRyZW5Mb2FkZWRcIj5cbiAgICAgICAgICAgIDxmZC1za2VsZXRvbiB0eXBlPVwicmVjdGFuZ2xlXCIgd2lkdGg9XCIxcmVtXCIgaGVpZ2h0PVwiMXJlbVwiPjwvZmQtc2tlbGV0b24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiX3NlbGVjdGlvbk1vZGVsPy5wbGFjZW1lbnQgPT09ICdhZnRlckV4cGFuZCdcIj5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCJzZWxlY3Rpb25cIj48L25nLXRlbXBsYXRlPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8ZGl2IGNsYXNzPVwiZmQtdHJlZV9fY29udGVudFwiPlxuICAgICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJbZmRUcmVlSXRlbUljb25dXCI+PC9uZy1jb250ZW50PlxuICAgICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJbZmRUcmVlSXRlbVRleHRdXCI+PC9uZy1jb250ZW50PlxuICAgIDwvZGl2PlxuICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIltmZFRyZWVJdGVtQnV0dG9uXVwiPjwvbmctY29udGVudD5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiX3NlbGVjdGlvbk1vZGVsPy5wbGFjZW1lbnQgPT09ICdyaWdodCdcIj5cbiAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInNlbGVjdGlvblwiPjwvbmctdGVtcGxhdGU+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPGZkLWljb25cbiAgICAgICAgZ2x5cGg9XCJzbGltLWFycm93LXJpZ2h0XCJcbiAgICAgICAgY2xhc3M9XCJmZC10cmVlX19pY29uIGZkLXRyZWVfX2ljb24tLW5hdmlnYXRpb25cIlxuICAgICAgICAqbmdJZj1cIm5hdmlnYXRhYmxlICYmIF9uYXZpZ2F0aW9uSW5kaWNhdG9yXCJcbiAgICA+PC9mZC1pY29uPlxuPC9kaXY+XG5cbjxuZy1jb250YWluZXIgKm5nSWY9XCJoYXNQcm9qZWN0ZWRDaGlsZHJlbiAmJiBleHBhbmRlZFwiPlxuICAgIDxkaXYgY2xhc3M9XCJmZC10cmVlXCI+XG4gICAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cImZkLXRyZWUtaXRlbVwiPjwvbmctY29udGVudD5cbiAgICA8L2Rpdj5cbjwvbmctY29udGFpbmVyPlxuXG48bmctdGVtcGxhdGUgI3NlbGVjdGlvbj5cbiAgICA8ZGl2IGNsYXNzPVwiZmQtZm9ybS1pdGVtXCI+XG4gICAgICAgIDxmZC1jaGVja2JveFxuICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJfc2VsZWN0aW9uU3RhdGVcIlxuICAgICAgICAgICAgW25nTW9kZWxPcHRpb25zXT1cInsgc3RhbmRhbG9uZTogdHJ1ZSB9XCJcbiAgICAgICAgICAgIFtzdGFuZGFsb25lXT1cInRydWVcIlxuICAgICAgICAgICAgdGFiSW5kZXhWYWx1ZT1cIi0xXCJcbiAgICAgICAgICAgICpuZ0lmPVwiX3NlbGVjdGlvbk1vZGVsPy5tb2RlID09PSAnbXVsdGlwbGUnXCJcbiAgICAgICAgPjwvZmQtY2hlY2tib3g+XG4gICAgICAgIDxmZC1yYWRpby1idXR0b25cbiAgICAgICAgICAgIFsobmdNb2RlbCldPVwiX3NlbGVjdGlvblN0YXRlXCJcbiAgICAgICAgICAgIFtuZ01vZGVsT3B0aW9uc109XCJ7IHN0YW5kYWxvbmU6IHRydWUgfVwiXG4gICAgICAgICAgICBbc2VsZWN0ZWRWYWx1ZV09XCJfc2VsZWN0aW9uU3RhdGVcIlxuICAgICAgICAgICAgW3ZhbHVlXT1cInRydWVcIlxuICAgICAgICAgICAgdGFiSW5kZXg9XCItMVwiXG4gICAgICAgICAgICBbc3RhbmRhbG9uZV09XCJ0cnVlXCJcbiAgICAgICAgICAgIHRhYkluZGV4VmFsdWU9XCItMVwiXG4gICAgICAgICAgICAqbmdJZj1cIl9zZWxlY3Rpb25Nb2RlbD8ubW9kZSA9PT0gJ3NpbmdsZSdcIlxuICAgICAgICA+PC9mZC1yYWRpby1idXR0b24+XG4gICAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuIl19
|
|
@@ -1,17 +1,18 @@
|
|
|
1
1
|
import { __decorate, __metadata } from "tslib";
|
|
2
2
|
import { FocusKeyManager } from '@angular/cdk/a11y';
|
|
3
3
|
import { DOWN_ARROW, LEFT_ARROW, RIGHT_ARROW, UP_ARROW } from '@angular/cdk/keycodes';
|
|
4
|
-
import { ChangeDetectorRef, Component, ContentChild, ContentChildren, ElementRef, EventEmitter, HostListener, inject, Input, Output, QueryList, ViewChildren, ViewEncapsulation } from '@angular/core';
|
|
4
|
+
import { ChangeDetectorRef, Component, ContentChild, ContentChildren, DestroyRef, ElementRef, EventEmitter, HostListener, inject, Input, Output, QueryList, ViewChildren, ViewEncapsulation } from '@angular/core';
|
|
5
5
|
import { DataSourceDirective, FD_DATA_SOURCE_TRANSFORMER } from '@fundamental-ngx/cdk/data-source';
|
|
6
6
|
import { CvaDirective } from '@fundamental-ngx/cdk/forms';
|
|
7
|
-
import { applyCssClass,
|
|
7
|
+
import { applyCssClass, KeyUtil, RtlService, SelectionService } from '@fundamental-ngx/cdk/utils';
|
|
8
8
|
import { ContentDensityObserver, contentDensityObserverProviders } from '@fundamental-ngx/core/content-density';
|
|
9
|
-
import { distinctUntilChanged, filter, fromEvent, startWith, Subscription, switchMap
|
|
9
|
+
import { distinctUntilChanged, filter, fromEvent, startWith, Subscription, switchMap } from 'rxjs';
|
|
10
10
|
import { TreeDataSourceParser } from './data-source/tree-data-source-parser';
|
|
11
11
|
import { TreeItemDefDirective } from './directives/tree-item-def.directive';
|
|
12
12
|
import { TreeItemDirective } from './directives/tree-item.directive';
|
|
13
13
|
import { BaseTreeItem } from './models/base-tree-item.class';
|
|
14
14
|
import { TreeService } from './tree.service';
|
|
15
|
+
import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
|
|
15
16
|
import * as i0 from "@angular/core";
|
|
16
17
|
import * as i1 from "@fundamental-ngx/cdk/data-source";
|
|
17
18
|
import * as i2 from "@fundamental-ngx/cdk/forms";
|
|
@@ -88,7 +89,7 @@ export class TreeComponent {
|
|
|
88
89
|
/** @hidden */
|
|
89
90
|
this._dataSourceDirective = inject(DataSourceDirective);
|
|
90
91
|
/** @hidden */
|
|
91
|
-
this.
|
|
92
|
+
this._destroyRef = inject(DestroyRef);
|
|
92
93
|
/** @hidden */
|
|
93
94
|
this.elementRef = inject(ElementRef);
|
|
94
95
|
/** @hidden */
|
|
@@ -122,17 +123,19 @@ export class TreeComponent {
|
|
|
122
123
|
ngOnInit() {
|
|
123
124
|
this._openDataStream();
|
|
124
125
|
this.buildComponentCssClass();
|
|
125
|
-
this._treeService.expandedLevel
|
|
126
|
+
this._treeService.expandedLevel
|
|
127
|
+
.pipe(distinctUntilChanged(), takeUntilDestroyed(this._destroyRef))
|
|
128
|
+
.subscribe((level) => {
|
|
126
129
|
this._expandedLevel = level;
|
|
127
130
|
this.buildComponentCssClass();
|
|
128
131
|
this._cdr.detectChanges();
|
|
129
132
|
});
|
|
130
|
-
this._treeService.detectChanges.pipe(
|
|
133
|
+
this._treeService.detectChanges.pipe(takeUntilDestroyed(this._destroyRef)).subscribe(() => {
|
|
131
134
|
this._cdr.detectChanges();
|
|
132
135
|
});
|
|
133
136
|
if (this.selection !== 'none') {
|
|
134
137
|
this._selectionService.setValue(this._cvaDirective.value);
|
|
135
|
-
this._cvaDirective.ngControl?.valueChanges?.pipe(
|
|
138
|
+
this._cvaDirective.ngControl?.valueChanges?.pipe(takeUntilDestroyed(this._destroyRef)).subscribe(() => {
|
|
136
139
|
this._selectionService.setValue(this._cvaDirective.value);
|
|
137
140
|
});
|
|
138
141
|
}
|
|
@@ -162,7 +165,7 @@ export class TreeComponent {
|
|
|
162
165
|
if (this.selection !== 'none') {
|
|
163
166
|
this._selectionService.setValue(this._cvaDirective.value);
|
|
164
167
|
this._selectionSub = this._cvaDirective.ngControl?.valueChanges
|
|
165
|
-
?.pipe(
|
|
168
|
+
?.pipe(takeUntilDestroyed(this._destroyRef))
|
|
166
169
|
.subscribe(() => {
|
|
167
170
|
this._selectionService.setValue(this._cvaDirective.value);
|
|
168
171
|
});
|
|
@@ -171,7 +174,7 @@ export class TreeComponent {
|
|
|
171
174
|
/** @hidden */
|
|
172
175
|
_listenToTreeItemDirectiveChanges() {
|
|
173
176
|
this._treeItemDirectives.changes
|
|
174
|
-
.pipe(startWith(null), filter(() => this.treeItemDef !== undefined),
|
|
177
|
+
.pipe(startWith(null), filter(() => this.treeItemDef !== undefined), takeUntilDestroyed(this._destroyRef))
|
|
175
178
|
.subscribe(() => {
|
|
176
179
|
this._allItems = this._treeItemDirectives.toArray().map((item) => item.treeItem);
|
|
177
180
|
const flattenedItems = this._sortTreeItems(this._allItems);
|
|
@@ -181,7 +184,7 @@ export class TreeComponent {
|
|
|
181
184
|
/** @hidden */
|
|
182
185
|
_listenToTreeItemsChanges() {
|
|
183
186
|
this._projectedTreeItems.changes
|
|
184
|
-
.pipe(startWith(null), filter(() => !this.treeItemDef),
|
|
187
|
+
.pipe(startWith(null), filter(() => !this.treeItemDef), takeUntilDestroyed(this._destroyRef))
|
|
185
188
|
.subscribe(() => {
|
|
186
189
|
this._allItems = this._projectedTreeItems.toArray();
|
|
187
190
|
const flattenedItems = this._sortTreeItems(this._allItems);
|
|
@@ -308,6 +311,15 @@ export class TreeComponent {
|
|
|
308
311
|
_trackFn(index, item) {
|
|
309
312
|
return item.id;
|
|
310
313
|
}
|
|
314
|
+
/**
|
|
315
|
+
* @hidden
|
|
316
|
+
* Select list interface method implementation.
|
|
317
|
+
* Sets value for control value accessor and emits it.
|
|
318
|
+
* @param value value of the selection.
|
|
319
|
+
*/
|
|
320
|
+
onChange(value) {
|
|
321
|
+
this._cvaDirective.setValue(value, true);
|
|
322
|
+
}
|
|
311
323
|
/** @hidden */
|
|
312
324
|
_expandTreeSection(treeItem) {
|
|
313
325
|
if (treeItem.expanded) {
|
|
@@ -350,21 +362,11 @@ export class TreeComponent {
|
|
|
350
362
|
}));
|
|
351
363
|
this._dataSourceDirective.dataSourceProvider?.match();
|
|
352
364
|
}
|
|
353
|
-
/**
|
|
354
|
-
* @hidden
|
|
355
|
-
* Select list interface method implementation.
|
|
356
|
-
* Sets value for control value accessor and emits it.
|
|
357
|
-
* @param value value of the selection.
|
|
358
|
-
*/
|
|
359
|
-
onChange(value) {
|
|
360
|
-
this._cvaDirective.setValue(value, true);
|
|
361
|
-
}
|
|
362
365
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.0", ngImport: i0, type: TreeComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
363
366
|
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.0", type: TreeComponent, selector: "fd-tree", inputs: { class: "class", noBorder: "noBorder", selection: "selection", selectionPlacement: "selectionPlacement", independentSections: "independentSections", navigationIndicator: "navigationIndicator" }, outputs: { dataRequested: "dataRequested", dataReceived: "dataReceived", selectedChange: "selectedChange" }, host: { attributes: { "role": "tree" }, listeners: { "keydown": "_onKeyUp($event)" } }, providers: [
|
|
364
367
|
contentDensityObserverProviders(),
|
|
365
368
|
TreeService,
|
|
366
369
|
SelectionService,
|
|
367
|
-
DestroyedService,
|
|
368
370
|
{
|
|
369
371
|
provide: FD_DATA_SOURCE_TRANSFORMER,
|
|
370
372
|
useClass: TreeDataSourceParser
|
|
@@ -398,7 +400,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.0", ngImpor
|
|
|
398
400
|
contentDensityObserverProviders(),
|
|
399
401
|
TreeService,
|
|
400
402
|
SelectionService,
|
|
401
|
-
DestroyedService,
|
|
402
403
|
{
|
|
403
404
|
provide: FD_DATA_SOURCE_TRANSFORMER,
|
|
404
405
|
useClass: TreeDataSourceParser
|
|
@@ -435,4 +436,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.0", ngImpor
|
|
|
435
436
|
type: HostListener,
|
|
436
437
|
args: ['keydown', ['$event']]
|
|
437
438
|
}] } });
|
|
438
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL2NvcmUvc3JjL2xpYi90cmVlL3RyZWUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL3NyYy9saWIvdHJlZS90cmVlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFFcEQsT0FBTyxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3RGLE9BQU8sRUFFSCxpQkFBaUIsRUFDakIsU0FBUyxFQUNULFlBQVksRUFDWixlQUFlLEVBQ2YsVUFBVSxFQUNWLFlBQVksRUFDWixZQUFZLEVBQ1osTUFBTSxFQUNOLEtBQUssRUFJTCxNQUFNLEVBQ04sU0FBUyxFQUVULFlBQVksRUFDWixpQkFBaUIsRUFDcEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLG1CQUFtQixFQUFFLDBCQUEwQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDbkcsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzFELE9BQU8sRUFDSCxhQUFhLEVBRWIsZ0JBQWdCLEVBQ2hCLE9BQU8sRUFFUCxVQUFVLEVBR1YsZ0JBQWdCLEVBQ25CLE1BQU0sNEJBQTRCLENBQUM7QUFDcEMsT0FBTyxFQUFFLHNCQUFzQixFQUFFLCtCQUErQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDaEgsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRTlHLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBQzdFLE9BQU8sRUFB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b0JBQW9CO2dCQThCbEMsbUJBQW1CO3NCQURsQixZQUFZO3VCQUFDLGlCQUFpQjtnQkFLdEIsbUJBQW1CO3NCQUQzQixlQUFlO3VCQUFDLFlBQVksRUFBRSxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUU7Z0JBMlBwRCxzQkFBc0IsTUFpQmQsUUFBUTtzQkFEZixZQUFZO3VCQUFDLFNBQVMsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEZvY3VzS2V5TWFuYWdlciB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9hMTF5JztcbmltcG9ydCB7IEJvb2xlYW5JbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2VyY2lvbic7XG5pbXBvcnQgeyBET1dOX0FSUk9XLCBMRUZUX0FSUk9XLCBSSUdIVF9BUlJPVywgVVBfQVJST1cgfSBmcm9tICdAYW5ndWxhci9jZGsva2V5Y29kZXMnO1xuaW1wb3J0IHtcbiAgICBBZnRlclZpZXdJbml0LFxuICAgIENoYW5nZURldGVjdG9yUmVmLFxuICAgIENvbXBvbmVudCxcbiAgICBDb250ZW50Q2hpbGQsXG4gICAgQ29udGVudENoaWxkcmVuLFxuICAgIEVsZW1lbnRSZWYsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIEhvc3RMaXN0ZW5lcixcbiAgICBpbmplY3QsXG4gICAgSW5wdXQsXG4gICAgT25DaGFuZ2VzLFxuICAgIE9uRGVzdHJveSxcbiAgICBPbkluaXQsXG4gICAgT3V0cHV0LFxuICAgIFF1ZXJ5TGlzdCxcbiAgICBTaW1wbGVDaGFuZ2VzLFxuICAgIFZpZXdDaGlsZHJlbixcbiAgICBWaWV3RW5jYXBzdWxhdGlvblxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IERhdGFTb3VyY2VEaXJlY3RpdmUsIEZEX0RBVEFfU09VUkNFX1RSQU5TRk9STUVSIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jZGsvZGF0YS1zb3VyY2UnO1xuaW1wb3J0IHsgQ3ZhRGlyZWN0aXZlIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jZGsvZm9ybXMnO1xuaW1wb3J0IHtcbiAgICBhcHBseUNzc0NsYXNzLFxuICAgIENzc0NsYXNzQnVpbGRlcixcbiAgICBEZXN0cm95ZWRTZXJ2aWNlLFxuICAgIEtleVV0aWwsXG4gICAgTnVsbGFibGUsXG4gICAgUnRsU2VydmljZSxcbiAgICBTZWxlY3RhYmxlTGlzdFZhbHVlVHlwZSxcbiAgICBTZWxlY3RDb21wb25lbnRSb290VG9rZW4sXG4gICAgU2VsZWN0aW9uU2VydmljZVxufSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2Nkay91dGlscyc7XG5pbXBvcnQgeyBDb250ZW50RGVuc2l0eU9ic2VydmVyLCBjb250ZW50RGVuc2l0eU9ic2VydmVyUHJvdmlkZXJzIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL2NvbnRlbnQtZGVuc2l0eSc7XG5pbXBvcnQgeyBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgZmlsdGVyLCBmcm9tRXZlbnQsIHN0YXJ0V2l0aCwgU3Vic2NyaXB0aW9uLCBzd2l0Y2hNYXAsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgRmRUcmVlQWNjZXB0YWJsZURhdGFTb3VyY2UsIEZkVHJlZURhdGFTb3VyY2UsIEZkVHJlZUl0ZW1UeXBlIH0gZnJvbSAnLi9kYXRhLXNvdXJjZS90cmVlLWRhdGEtc291cmNlJztcbmltcG9ydCB7IFRyZWVEYXRhU291cmNlUGFyc2VyIH0gZnJvbSAnLi9kYXRhLXNvdXJjZS90cmVlLWRhdGEtc291cmNlLXBhcnNlcic7XG5pbXBvcnQgeyBUcmVlSXRlbURlZkRpcmVjdGl2ZSB9IGZyb20gJy4vZGlyZWN0aXZlcy90cmVlLWl0ZW0tZGVmLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBUcmVlSXRlbURpcmVjdGl2ZSB9IGZyb20gJy4vZGlyZWN0aXZlcy90cmVlLWl0ZW0uZGlyZWN0aXZlJztcbmltcG9ydCB7IEJhc2VUcmVlSXRlbSB9IGZyb20gJy4vbW9kZWxzL2Jhc2UtdHJlZS1pdGVtLmNsYXNzJztcbmltcG9ydCB7IFRyZWVTZXJ2aWNlIH0gZnJvbSAnLi90cmVlLnNlcnZpY2UnO1xuaW1wb3J0IHsgU2VsZWN0aW9uUGxhY2VtZW50LCBTZWxlY3Rpb25UeXBlIH0gZnJvbSAnLi9tb2RlbHMvc2VsZWN0aW9uLXR5cGUnO1xuaW1wb3J0IHsgVHJlZUl0ZW0sIFRyZWVJdGVtR2VuZXJpYyB9IGZyb20gJy4vbW9kZWxzL3RyZWUtaXRlbSc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnZmQtdHJlZScsXG4gICAgdGVtcGxhdGVVcmw6ICcuL3RyZWUuY29tcG9uZW50Lmh0bWwnLFxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gICAgc3R5bGVVcmxzOiBbJy4vdHJlZS5jb21wb25lbnQuc2NzcyddLFxuICAgIGhvc3REaXJlY3RpdmVzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIGRpcmVjdGl2ZTogRGF0YVNvdXJjZURpcmVjdGl2ZSxcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvbm8taW5wdXRzLW1ldGFkYXRhLXByb3BlcnR5XG4gICAgICAgICAgICBpbnB1dHM6IFsnZGF0YVNvdXJjZSddLFxuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9uby1vdXRwdXRzLW1ldGFkYXRhLXByb3BlcnR5XG4gICAgICAgICAgICBvdXRwdXRzOiBbJ2RhdGFDaGFuZ2VkJ11cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgZGlyZWN0aXZlOiBDdmFEaXJlY3RpdmUsXG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L25vLWlucHV0cy1tZXRhZGF0YS1wcm9wZXJ0eVxuICAgICAgICAgICAgaW5wdXRzOiBbJ25hbWUnLCAnaWQnLCAnc3RhdGUnLCAnc3RhdGVNZXNzYWdlJywgJ2Rpc2FibGVkJywgJ3JlYWRvbmx5J11cbiAgICAgICAgfVxuICAgIF0sXG4gICAgaG9zdDoge1xuICAgICAgICByb2xlOiAndHJlZSdcbiAgICB9LFxuICAgIHByb3ZpZGVyczogW1xuICAgICAgICBjb250ZW50RGVuc2l0eU9ic2VydmVyUHJvdmlkZXJzKCksXG4gICAgICAgIFRyZWVTZXJ2aWNlLFxuICAgICAgICBTZWxlY3Rpb25TZXJ2aWNlLFxuICAgICAgICBEZXN0cm95ZWRTZXJ2aWNlLFxuICAgICAgICB7XG4gICAgICAgICAgICBwcm92aWRlOiBGRF9EQVRBX1NPVVJDRV9UUkFOU0ZPUk1FUixcbiAgICAgICAgICAgIHVzZUNsYXNzOiBUcmVlRGF0YVNvdXJjZVBhcnNlclxuICAgICAgICB9XG4gICAgXVxufSlcbmV4cG9ydCBjbGFzcyBUcmVlQ29tcG9uZW50PFAgZXh0ZW5kcyBGZFRyZWVBY2NlcHRhYmxlRGF0YVNvdXJjZSwgVCBleHRlbmRzIFRyZWVJdGVtID0gRmRUcmVlSXRlbVR5cGU8UD4+XG4gICAgaW1wbGVtZW50cyBDc3NDbGFzc0J1aWxkZXIsIE9uSW5pdCwgT25DaGFuZ2VzLCBBZnRlclZpZXdJbml0LCBTZWxlY3RDb21wb25lbnRSb290VG9rZW4sIE9uRGVzdHJveVxue1xuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQElucHV0KClcbiAgICBjbGFzczogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciB0aGUgdHJlZSBzaG91bGQgYmUgYm9yZGVybGVzcy5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIG5vQm9yZGVyID0gZmFsc2U7XG5cbiAgICAvKiogVHlwZSBvZiB0cmVlIGl0ZW1zIHNlbGVjdGlvbi4gKi9cbiAgICBASW5wdXQoKVxuICAgIHNlbGVjdGlvbjogU2VsZWN0aW9uVHlwZSA9ICdub25lJztcblxuICAgIC8qKiBQbGFjZW1lbnQgb2YgdGhlIHNlbGVjdGlvbiBjb250cm9sLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2VsZWN0aW9uUGxhY2VtZW50OiBTZWxlY3Rpb25QbGFjZW1lbnQgPSAnbm9uZSc7XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHRoZSBzZWN0aW9ucyBzaG91bGQgYmUgZGVwZW5kZW50IGZvciBzZWxlY3Rpb24gbW9kZS5cbiAgICAgKiBJZiB0cnVlLCBzZWxlY3Rpb24gY29udHJvbCB3aWxsIHNoaWZ0LCBhY2NvcmRpbmcgdG8gdGhlIGxldmVsLlxuICAgICAqIElmIGZhbHNlLCBzZWxlY3Rpb24gY29udHJvbCB3aWxsIHN0YXkgb24gdGhlIHNhbWUgcGxhY2UgaWdub3JpbmcgdGhlIGl0ZW0gbGV2ZWwuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBpbmRlcGVuZGVudFNlY3Rpb25zID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHRoZSBUcmVlIGNvbXBvbmVudCBoYXMgbmF2aWdhdGlvbiBpbmRpY2F0b3JzLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IG5hdmlnYXRpb25JbmRpY2F0b3IodmFsdWU6IGJvb2xlYW4pIHtcbiAgICAgICAgaWYgKHZhbHVlID09PSB0aGlzLl9uYXZpZ2F0aW9uSW5kaWNhdG9yKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fbmF2aWdhdGlvbkluZGljYXRvciA9IHZhbHVlO1xuICAgICAgICB0aGlzLl90cmVlU2VydmljZS5zZXROYXZpZ2F0aW9uSW5kaWNhdG9yKHZhbHVlKTtcbiAgICB9XG5cbiAgICBnZXQgbmF2aWdhdGlvbkluZGljYXRvcigpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX25hdmlnYXRpb25JbmRpY2F0b3I7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9uYXZpZ2F0aW9uSW5kaWNhdG9yID0gZmFsc2U7XG5cbiAgICAvKiogRXZlbnQgZW1pdHRlZCB3aGVuIGRhdGEgbG9hZGluZyBpcyBzdGFydGVkLiAqL1xuICAgIEBPdXRwdXQoKVxuICAgIGRhdGFSZXF1ZXN0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG5cbiAgICAvKiogRXZlbnQgZW1pdHRlZCB3aGVuIGRhdGEgbG9hZGluZyBpcyBmaW5pc2hlZC4gKi9cbiAgICBAT3V0cHV0KClcbiAgICBkYXRhUmVjZWl2ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG5cbiAgICAvKiogRXZlbnQgZW1pdHRlZCB3aGVuIHNlbGVjdGVkIHN0YXRlIGNoYW5nZWQuICovXG4gICAgQE91dHB1dCgpXG4gICAgc2VsZWN0ZWRDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX2l0ZW1zOiBUcmVlSXRlbTxUcmVlSXRlbUdlbmVyaWM8VD4+W10gPSBbXTtcblxuICAgIC8qKiBUcmVlIGl0ZW0gdGVtcGxhdGUgZGVmaW5pdGlvbi4gKi9cbiAgICBAQ29udGVudENoaWxkKFRyZWVJdGVtRGVmRGlyZWN0aXZlKVxuICAgIHNldCB0cmVlSXRlbURlZih2YWx1ZTogTnVsbGFibGU8VHJlZUl0ZW1EZWZEaXJlY3RpdmU+KSB7XG4gICAgICAgIHRoaXMuX3RyZWVJdGVtRGVmID0gdmFsdWU7XG4gICAgICAgIC8vIFNldCBuZXcgcmVuZGVyZXJcbiAgICAgICAgdGhpcy5fdHJlZVNlcnZpY2UudHJlZUl0ZW1UZW1wbGF0ZVJlZiA9IHZhbHVlPy50ZW1wbGF0ZVJlZjtcbiAgICAgICAgdGhpcy5faXRlbXMgPSB0aGlzLl90cmVlU2VydmljZS5ub3JtYWxpemVUcmVlSXRlbXModGhpcy5faXRlbXMpO1xuICAgIH1cblxuICAgIGdldCB0cmVlSXRlbURlZigpOiBOdWxsYWJsZTxUcmVlSXRlbURlZkRpcmVjdGl2ZT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fdHJlZUl0ZW1EZWY7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBnZXQgbXVsdGlwbGUoKTogQm9vbGVhbklucHV0IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0aW9uID09PSAnbXVsdGlwbGUnO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgZ2V0IHRvZ2dsZSgpOiBCb29sZWFuSW5wdXQge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogVXNlZCBmb3Igc2tlbGV0b24gdG8gYXBwZWFyIGJlZm9yZSBmaXJzdCBtZWFuaW5nZnVsIGRhdGEgYmVpbmcgbG9hZGVkLlxuICAgICAqL1xuICAgIF9pbml0aWFsRGF0YUxvYWRlZCA9IGZhbHNlO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBAVmlld0NoaWxkcmVuKFRyZWVJdGVtRGlyZWN0aXZlKVxuICAgIF90cmVlSXRlbURpcmVjdGl2ZXM6IFF1ZXJ5TGlzdDxUcmVlSXRlbURpcmVjdGl2ZTxUcmVlSXRlbSwgYW55Pj47XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBDb250ZW50Q2hpbGRyZW4oQmFzZVRyZWVJdGVtLCB7IGRlc2NlbmRhbnRzOiB0cnVlIH0pXG4gICAgcmVhZG9ubHkgX3Byb2plY3RlZFRyZWVJdGVtczogUXVlcnlMaXN0PEJhc2VUcmVlSXRlbT47XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3RyZWVJdGVtRGVmOiBOdWxsYWJsZTxUcmVlSXRlbURlZkRpcmVjdGl2ZT47XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX2NvbnRlbnREZW5zaXR5T2JzZXJ2ZXIgPSBpbmplY3QoQ29udGVudERlbnNpdHlPYnNlcnZlcik7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX2RhdGFTb3VyY2VEaXJlY3RpdmUgPSBpbmplY3Q8RGF0YVNvdXJjZURpcmVjdGl2ZTxULCBGZFRyZWVEYXRhU291cmNlPFQ+Pj4oRGF0YVNvdXJjZURpcmVjdGl2ZSk7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX2Rlc3Ryb3kkID0gaW5qZWN0KERlc3Ryb3llZFNlcnZpY2UpO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwdWJsaWMgcmVhZG9ubHkgZWxlbWVudFJlZiA9IGluamVjdChFbGVtZW50UmVmKTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSByZWFkb25seSBfdHJlZVNlcnZpY2UgPSBpbmplY3QoVHJlZVNlcnZpY2UpO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IF9zZWxlY3Rpb25TZXJ2aWNlID0gaW5qZWN0KFNlbGVjdGlvblNlcnZpY2UpO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IF9ydGwgPSBpbmplY3QoUnRsU2VydmljZSwge1xuICAgICAgICBvcHRpb25hbDogdHJ1ZVxuICAgIH0pO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IF9jdmFEaXJlY3RpdmUgPSBpbmplY3QoQ3ZhRGlyZWN0aXZlKTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSByZWFkb25seSBfY2RyID0gaW5qZWN0KENoYW5nZURldGVjdG9yUmVmKTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfZHNTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbiB8IG51bGwgPSBudWxsO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9leHBhbmRlZExldmVsOiBudW1iZXIgfCB1bmRlZmluZWQ7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2ZvY3VzS2V5TWFuYWdlcjogRm9jdXNLZXlNYW5hZ2VyPEJhc2VUcmVlSXRlbT47XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogU29ydGVkIHRyZWUgaXRlbSBjb21wb25lbnRzLlxuICAgICAqL1xuICAgIHByaXZhdGUgX3NvcnRlZFRyZWVJdGVtczogQmFzZVRyZWVJdGVtW10gPSBbXTtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBBbGwgdHJlZSBpdGVtIGNvbXBvbmVudHMuXG4gICAgICovXG4gICAgcHJpdmF0ZSBfYWxsSXRlbXM6IEJhc2VUcmVlSXRlbVtdID0gW107XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2V2ZW50U3ViOiBTdWJzY3JpcHRpb247XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3NlbGVjdGlvblN1YjogU3Vic2NyaXB0aW9uIHwgdW5kZWZpbmVkO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy5fc2VsZWN0aW9uU2VydmljZS5yZWdpc3RlclJvb3RDb21wb25lbnQodGhpcyk7XG4gICAgICAgIHRoaXMuX2NvbnRlbnREZW5zaXR5T2JzZXJ2ZXIuc3Vic2NyaWJlKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fb3BlbkRhdGFTdHJlYW0oKTtcbiAgICAgICAgdGhpcy5idWlsZENvbXBvbmVudENzc0NsYXNzKCk7XG5cbiAgICAgICAgdGhpcy5fdHJlZVNlcnZpY2UuZXhwYW5kZWRMZXZlbC5waXBlKGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksIHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JCkpLnN1YnNjcmliZSgobGV2ZWwpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX2V4cGFuZGVkTGV2ZWwgPSBsZXZlbDtcbiAgICAgICAgICAgIHRoaXMuYnVpbGRDb21wb25lbnRDc3NDbGFzcygpO1xuICAgICAgICAgICAgdGhpcy5fY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5fdHJlZVNlcnZpY2UuZGV0ZWN0Q2hhbmdlcy5waXBlKHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JCkpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpZiAodGhpcy5zZWxlY3Rpb24gIT09ICdub25lJykge1xuICAgICAgICAgICAgdGhpcy5fc2VsZWN0aW9uU2VydmljZS5zZXRWYWx1ZSh0aGlzLl9jdmFEaXJlY3RpdmUudmFsdWUpO1xuXG4gICAgICAgICAgICB0aGlzLl9jdmFEaXJlY3RpdmUubmdDb250cm9sPy52YWx1ZUNoYW5nZXM/LnBpcGUodGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kkKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9zZWxlY3Rpb25TZXJ2aWNlLnNldFZhbHVlKHRoaXMuX2N2YURpcmVjdGl2ZS52YWx1ZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgICAgICB0aGlzLmJ1aWxkQ29tcG9uZW50Q3NzQ2xhc3MoKTtcblxuICAgICAgICBpZiAoJ3NlbGVjdGlvbicgaW4gY2hhbmdlcyB8fCAnc2VsZWN0aW9uUGxhY2VtZW50JyBpbiBjaGFuZ2VzKSB7XG4gICAgICAgICAgICB0aGlzLl90cmVlU2VydmljZS5zZXRTZWxlY3Rpb25Nb2RlKHRoaXMuc2VsZWN0aW9uLCB0aGlzLnNlbGVjdGlvblBsYWNlbWVudCk7XG4gICAgICAgICAgICB0aGlzLl9zZXRTZWxlY3Rpb25MaXN0ZW5lcigpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2xpc3RlblRvVHJlZUl0ZW1zQ2hhbmdlcygpO1xuICAgICAgICB0aGlzLl9saXN0ZW5Ub1RyZWVJdGVtRGlyZWN0aXZlQ2hhbmdlcygpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2RzU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICAgICAgICB0aGlzLl9ldmVudFN1Yj8udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgdGhpcy5fc2VsZWN0aW9uU3ViPy51bnN1YnNjcmliZSgpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfc2V0U2VsZWN0aW9uTGlzdGVuZXIoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3NlbGVjdGlvblN1Yj8udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0aW9uICE9PSAnbm9uZScpIHtcbiAgICAgICAgICAgIHRoaXMuX3NlbGVjdGlvblNlcnZpY2Uuc2V0VmFsdWUodGhpcy5fY3ZhRGlyZWN0aXZlLnZhbHVlKTtcblxuICAgICAgICAgICAgdGhpcy5fc2VsZWN0aW9uU3ViID0gdGhpcy5fY3ZhRGlyZWN0aXZlLm5nQ29udHJvbD8udmFsdWVDaGFuZ2VzXG4gICAgICAgICAgICAgICAgPy5waXBlKHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JCkpXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3NlbGVjdGlvblNlcnZpY2Uuc2V0VmFsdWUodGhpcy5fY3ZhRGlyZWN0aXZlLnZhbHVlKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfbGlzdGVuVG9UcmVlSXRlbURpcmVjdGl2ZUNoYW5nZXMoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3RyZWVJdGVtRGlyZWN0aXZlcy5jaGFuZ2VzXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICBzdGFydFdpdGgobnVsbCksXG4gICAgICAgICAgICAgICAgZmlsdGVyKCgpID0+IHRoaXMudHJlZUl0ZW1EZWYgIT09IHVuZGVmaW5lZCksXG4gICAgICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kkKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fYWxsSXRlbXMgPSB0aGlzLl90cmVlSXRlbURpcmVjdGl2ZXMudG9BcnJheSgpLm1hcCgoaXRlbSkgPT4gaXRlbS50cmVlSXRlbSEpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGZsYXR0ZW5lZEl0ZW1zID0gdGhpcy5fc29ydFRyZWVJdGVtcyh0aGlzLl9hbGxJdGVtcyk7XG4gICAgICAgICAgICAgICAgdGhpcy5fc2V0RmxhdHRlbmVkSXRlbXMoZmxhdHRlbmVkSXRlbXMpO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9saXN0ZW5Ub1RyZWVJdGVtc0NoYW5nZXMoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3Byb2plY3RlZFRyZWVJdGVtcy5jaGFuZ2VzXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICBzdGFydFdpdGgobnVsbCksXG4gICAgICAgICAgICAgICAgZmlsdGVyKCgpID0+ICF0aGlzLnRyZWVJdGVtRGVmKSxcbiAgICAgICAgICAgICAgICB0YWtlVW50aWwodGhpcy5fZGVzdHJveSQpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9hbGxJdGVtcyA9IHRoaXMuX3Byb2plY3RlZFRyZWVJdGVtcy50b0FycmF5KCk7XG4gICAgICAgICAgICAgICAgY29uc3QgZmxhdHRlbmVkSXRlbXMgPSB0aGlzLl9zb3J0VHJlZUl0ZW1zKHRoaXMuX2FsbEl0ZW1zKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9zZXRGbGF0dGVuZWRJdGVtcyhmbGF0dGVuZWRJdGVtcyk7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3NldEZsYXR0ZW5lZEl0ZW1zKGl0ZW1zOiBCYXNlVHJlZUl0ZW1bXSk6IHZvaWQge1xuICAgICAgICB0aGlzLl9zb3J0ZWRUcmVlSXRlbXMgPSBpdGVtcztcblxuICAgICAgICBjb25zdCBhY3RpdmVJdGVtID0gdGhpcy5fZm9jdXNLZXlNYW5hZ2VyPy5hY3RpdmVJdGVtO1xuICAgICAgICBjb25zdCBuZXdBY3RpdmVJdGVtSW5kZXggPSBpdGVtcy5maW5kSW5kZXgoKGl0ZW0pID0+IGl0ZW0gPT09IGFjdGl2ZUl0ZW0pO1xuICAgICAgICB0aGlzLl9mb2N1c0tleU1hbmFnZXI/LmRlc3Ryb3koKTtcblxuICAgICAgICB0aGlzLl9mb2N1c0tleU1hbmFnZXIgPSBuZXcgRm9jdXNLZXlNYW5hZ2VyKGl0ZW1zKVxuICAgICAgICAgICAgLndpdGhWZXJ0aWNhbE9yaWVudGF0aW9uKHRydWUpXG4gICAgICAgICAgICAuc2tpcFByZWRpY2F0ZSgoaXRlbSkgPT4gIWl0ZW0ua2V5Ym9hcmRBY2Nlc3NpYmxlKTtcblxuICAgICAgICBpZiAobmV3QWN0aXZlSXRlbUluZGV4ID4gLTEpIHtcbiAgICAgICAgICAgIHRoaXMuX2ZvY3VzS2V5TWFuYWdlci5zZXRBY3RpdmVJdGVtKG5ld0FjdGl2ZUl0ZW1JbmRleCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9zZWxlY3Rpb25TZXJ2aWNlLmluaXRpYWxpemUodGhpcy5fc29ydGVkVHJlZUl0ZW1zLm1hcCgoaXRlbSkgPT4gaXRlbS5zZWxlY3RhYmxlTGlzdEl0ZW0pKTtcblxuICAgICAgICB0aGlzLl9zZXR1cEV2ZW50TGlzdGVuZXJzKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfb25JdGVtRm9jdXNlZCh0cmVlSXRlbTogQmFzZVRyZWVJdGVtKTogdm9pZCB7XG4gICAgICAgIGxldCBmb2N1c2VkSW5kZXggPSAtMTtcbiAgICAgICAgdGhpcy5fc29ydGVkVHJlZUl0ZW1zLmZvckVhY2goKGl0ZW0sIGluZGV4KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBpc0ZvY3VzZWQgPSB0cmVlSXRlbSA9PT0gaXRlbTtcbiAgICAgICAgICAgIGl0ZW0uc2V0Q29udGFpbmVyVGFiSW5kZXgoaXNGb2N1c2VkID8gMCA6IC0xKTtcbiAgICAgICAgICAgIGlmIChpc0ZvY3VzZWQpIHtcbiAgICAgICAgICAgICAgICBmb2N1c2VkSW5kZXggPSBpbmRleDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKGZvY3VzZWRJbmRleCA9PT0gLTEpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2ZvY3VzS2V5TWFuYWdlci5zZXRBY3RpdmVJdGVtKGZvY3VzZWRJbmRleCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9zZXR1cEV2ZW50TGlzdGVuZXJzKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9ldmVudFN1Yj8udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgdGhpcy5fZXZlbnRTdWIgPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG5cbiAgICAgICAgdGhpcy5fc29ydGVkVHJlZUl0ZW1zLmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgICAgICAgIHRoaXMuX2V2ZW50U3ViLmFkZChcbiAgICAgICAgICAgICAgICBmcm9tRXZlbnQ8S2V5Ym9hcmRFdmVudD4oaXRlbS5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsICdrZXlkb3duJykuc3Vic2NyaWJlKChldmVudCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9vbkl0ZW1LZXlEb3duKGV2ZW50LCBpdGVtKTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHRoaXMuX2V2ZW50U3ViLmFkZChcbiAgICAgICAgICAgICAgICBmcm9tRXZlbnQoaXRlbS5pdGVtQ29udGFpbmVyPy5uYXRpdmVFbGVtZW50LCAnZm9jdXMnKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9vbkl0ZW1Gb2N1c2VkKGl0ZW0pO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3NvcnRUcmVlSXRlbXMoaXRlbXM6IEJhc2VUcmVlSXRlbVtdKTogQmFzZVRyZWVJdGVtW10ge1xuICAgICAgICBjb25zdCBjb21wb25lbnRzOiBCYXNlVHJlZUl0ZW1bXSA9IFtdO1xuICAgICAgICBjb25zdCByb290SXRlbXMgPSBpdGVtcy5maWx0ZXIoKGl0ZW0pID0+IGl0ZW0ubGV2ZWwgPT09IDEpO1xuXG4gICAgICAgIHJvb3RJdGVtcy5mb3JFYWNoKCh0cmVlSXRlbSwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgIHRyZWVJdGVtLnNldFBvc2l0aW9uKHJvb3RJdGVtcy5sZW5ndGgsIGluZGV4ICsgMSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0ZW1zLmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgICAgICAgIGlmICghaXRlbSB8fCBjb21wb25lbnRzLmluY2x1ZGVzKGl0ZW0pKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb21wb25lbnRzLnB1c2goaXRlbSk7XG5cbiAgICAgICAgICAgIGlmIChpdGVtLmNoaWxkcmVuLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgY2hpbGRJdGVtcyA9IHRoaXMuX3NvcnRUcmVlSXRlbXModGhpcy5fYWxsSXRlbXMuZmlsdGVyKChpKSA9PiBpLnBhcmVudElkID09PSBpdGVtLmlkKSk7XG5cbiAgICAgICAgICAgIGNoaWxkSXRlbXMuZm9yRWFjaCgodHJlZUl0ZW0sIGluZGV4KSA9PiB7XG4gICAgICAgICAgICAgICAgdHJlZUl0ZW0uc2V0UG9zaXRpb24oY2hpbGRJdGVtcy5sZW5ndGgsIGluZGV4ICsgMSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgY29tcG9uZW50cy5wdXNoKC4uLmNoaWxkSXRlbXMpO1xuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gY29tcG9uZW50cztcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBhcHBseUNzc0NsYXNzXG4gICAgYnVpbGRDb21wb25lbnRDc3NDbGFzcygpOiBzdHJpbmdbXSB7XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICB0aGlzLmNsYXNzLFxuICAgICAgICAgICAgdGhpcy5fZXhwYW5kZWRMZXZlbCA/IGBleHBhbmRlZC1sZXZlbC0ke3RoaXMuX2V4cGFuZGVkTGV2ZWx9YCA6ICcnLFxuICAgICAgICAgICAgdGhpcy5ub0JvcmRlciA/ICdmZC10cmVlLS1uby1ib3JkZXInIDogJycsXG4gICAgICAgICAgICB0aGlzLl9pdGVtcy5sZW5ndGggPT09IDAgJiYgdGhpcy5faW5pdGlhbERhdGFMb2FkZWQgPyAnZmQtdHJlZS0tbm8tZGF0YScgOiAnJyxcbiAgICAgICAgICAgIHRoaXMuaW5kZXBlbmRlbnRTZWN0aW9ucyA/ICdmZC10cmVlLS1pbmRlcGVuZGVudC1tdWx0aS1zZWxlY3Rpb24nIDogJycsXG4gICAgICAgICAgICAnZmQtdHJlZSdcbiAgICAgICAgXTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogS2V5Ym9hcmQgbmF2aWdhdGlvblxuICAgICAqIEBwYXJhbSBldmVudCBLZXlib2FyZCBldmVudC5cbiAgICAgKi9cbiAgICBASG9zdExpc3RlbmVyKCdrZXlkb3duJywgWyckZXZlbnQnXSlcbiAgICBwcml2YXRlIF9vbktleVVwKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgICAgIGlmIChLZXlVdGlsLmlzS2V5Q29kZShldmVudCwgW0RPV05fQVJST1csIFVQX0FSUk9XXSkpIHtcbiAgICAgICAgICAgIGlmIChldmVudC5kZWZhdWx0UHJldmVudGVkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIHRoaXMuX2ZvY3VzS2V5TWFuYWdlcj8ub25LZXlkb3duKGV2ZW50KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX29uSXRlbUtleURvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQsIHRyZWVJdGVtOiBOdWxsYWJsZTxCYXNlVHJlZUl0ZW0+KTogdm9pZCB7XG4gICAgICAgIGlmICghdHJlZUl0ZW0pIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGlzUnRsID0gISF0aGlzLl9ydGw/LnJ0bC52YWx1ZTtcbiAgICAgICAgY29uc3QgZXhwYW5kS2V5ID0gaXNSdGwgPyBMRUZUX0FSUk9XIDogUklHSFRfQVJST1c7XG4gICAgICAgIGNvbnN0IGNvbGxhcHNlS2V5ID0gaXNSdGwgPyBSSUdIVF9BUlJPVyA6IExFRlRfQVJST1c7XG5cbiAgICAgICAgaWYgKEtleVV0aWwuaXNLZXlDb2RlKGV2ZW50LCBleHBhbmRLZXkpICYmICh0cmVlSXRlbS5oYXNEc0NoaWxkcmVuIHx8IHRyZWVJdGVtLmhhc1Byb2plY3RlZENoaWxkcmVuKSkge1xuICAgICAgICAgICAgaWYgKGV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgICAgICAgICB0aGlzLl9leHBhbmRUcmVlU2VjdGlvbih0cmVlSXRlbSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoS2V5VXRpbC5pc0tleUNvZGUoZXZlbnQsIGNvbGxhcHNlS2V5KSkge1xuICAgICAgICAgICAgaWYgKGV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgICAgICAgICB0aGlzLl9jb2xsYXBzZVRyZWVTZWN0aW9uKHRyZWVJdGVtKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX3RyYWNrRm4oaW5kZXg6IG51bWJlciwgaXRlbTogVHJlZUl0ZW08VHJlZUl0ZW1HZW5lcmljPFQ+Pik6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBpdGVtLmlkO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfZXhwYW5kVHJlZVNlY3Rpb24odHJlZUl0ZW06IEJhc2VUcmVlSXRlbSk6IHZvaWQge1xuICAgICAgICBpZiAodHJlZUl0ZW0uZXhwYW5kZWQpIHtcbiAgICAgICAgICAgIC8vIFNoaWZ0IGZvY3VzIG9uIHRoZSBmaXJzdCBjaGlsZCBpdGVtXG4gICAgICAgICAgICBjb25zdCBpdGVtSW5kZXggPSB0aGlzLl9zb3J0ZWRUcmVlSXRlbXMuZmluZEluZGV4KChpdGVtKSA9PiBpdGVtLmlkID09PSB0cmVlSXRlbS5pZCk7XG4gICAgICAgICAgICBjb25zdCBuZXh0SXRlbSA9IHRoaXMuX3NvcnRlZFRyZWVJdGVtc1tpdGVtSW5kZXggKyAxXTtcbiAgICAgICAgICAgIGlmIChuZXh0SXRlbT8ucGFyZW50SWQgPT09IHRyZWVJdGVtLmlkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZm9jdXNLZXlNYW5hZ2VyLnNldEFjdGl2ZUl0ZW0oaXRlbUluZGV4ICsgMSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRyZWVJdGVtLmV4cGFuZGVkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5fY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2NvbGxhcHNlVHJlZVNlY3Rpb24odHJlZUl0ZW06IEJhc2VUcmVlSXRlbSk6IHZvaWQge1xuICAgICAgICBpZiAoIXRyZWVJdGVtLmV4cGFuZGVkICYmIHRyZWVJdGVtLnBhcmVudElkKSB7XG4gICAgICAgICAgICBjb25zdCBwYXJlbnRJdGVtSW5kZXggPSB0aGlzLl9zb3J0ZWRUcmVlSXRlbXMuZmluZEluZGV4KChpdGVtKSA9PiBpdGVtLmlkID09PSB0cmVlSXRlbS5wYXJlbnRJZCk7XG5cbiAgICAgICAgICAgIGlmIChwYXJlbnRJdGVtSW5kZXggPiAtMSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2ZvY3VzS2V5TWFuYWdlci5zZXRBY3RpdmVJdGVtKHBhcmVudEl0ZW1JbmRleCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRyZWVJdGVtLmV4cGFuZGVkID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX2Nkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9vcGVuRGF0YVN0cmVhbSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fZHNTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIHRoaXMuX2RzU3Vic2NyaXB0aW9uID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuICAgICAgICB0aGlzLl9kc1N1YnNjcmlwdGlvbi5hZGQoXG4gICAgICAgICAgICB0aGlzLl9kYXRhU291cmNlRGlyZWN0aXZlLmRhdGFTb3VyY2VQcm92aWRlcj8uZGF0YVJlcXVlc3RlZC5zdWJzY3JpYmUodGhpcy5kYXRhUmVxdWVzdGVkKVxuICAgICAgICApO1xuICAgICAgICB0aGlzLl9kc1N1YnNjcmlwdGlvbi5hZGQoXG4gICAgICAgICAgICB0aGlzLl9kYXRhU291cmNlRGlyZWN0aXZlLmRhdGFTb3VyY2VQcm92aWRlcj8uZGF0YVJlY2VpdmVkLnN1YnNjcmliZSh0aGlzLmRhdGFSZWNlaXZlZClcbiAgICAgICAgKTtcblxuICAgICAgICB0aGlzLl9kc1N1YnNjcmlwdGlvbi5hZGQoXG4gICAgICAgICAgICB0aGlzLl9kYXRhU291cmNlRGlyZWN0aXZlLmRhdGFTb3VyY2VQcm92aWRlcj8uZGF0YVJlY2VpdmVkXG4gICAgICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgICAgIGZpbHRlcigocmVjZWl2ZWQpID0+IHJlY2VpdmVkKSxcbiAgICAgICAgICAgICAgICAgICAgc3dpdGNoTWFwKCgpID0+IHRoaXMuX2RhdGFTb3VyY2VEaXJlY3RpdmUuZGF0YUNoYW5nZWQkKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKChkYXRhKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2luaXRpYWxEYXRhTG9hZGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5faXRlbXMgPSB0aGlzLl90cmVlU2VydmljZS5ub3JtYWxpemVUcmVlSXRlbXMoZGF0YSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYnVpbGRDb21wb25lbnRDc3NDbGFzcygpO1xuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2Nkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICApO1xuXG4gICAgICAgIHRoaXMuX2RhdGFTb3VyY2VEaXJlY3RpdmUuZGF0YVNvdXJjZVByb3ZpZGVyPy5tYXRjaCgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBTZWxlY3QgbGlzdCBpbnRlcmZhY2UgbWV0aG9kIGltcGxlbWVudGF0aW9uLlxuICAgICAqIFNldHMgdmFsdWUgZm9yIGNvbnRyb2wgdmFsdWUgYWNjZXNzb3IgYW5kIGVtaXRzIGl0LlxuICAgICAqIEBwYXJhbSB2YWx1ZSB2YWx1ZSBvZiB0aGUgc2VsZWN0aW9uLlxuICAgICAqL1xuICAgIG9uQ2hhbmdlKHZhbHVlOiBTZWxlY3RhYmxlTGlzdFZhbHVlVHlwZTxhbnk+KTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2N2YURpcmVjdGl2ZS5zZXRWYWx1ZSh2YWx1ZSwgdHJ1ZSk7XG4gICAgfVxufVxuIiwiPG5nLXRlbXBsYXRlICNkYXRhU291cmNlUmVuZGVyZXI+XG4gICAgPG5nLXRlbXBsYXRlXG4gICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIiFfaW5pdGlhbERhdGFMb2FkZWQgPyBsb2FkaW5nUmVuZGVyZXIgOiBkYXRhTG9hZGVkVHBsXCJcbiAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgJGltcGxpY2l0OiAxIH1cIlxuICAgID48L25nLXRlbXBsYXRlPlxuXG4gICAgPG5nLXRlbXBsYXRlICNsb2FkaW5nUmVuZGVyZXIgbGV0LWxldmVsPlxuICAgICAgICA8ZGl2ICpmZGtSZXBlYXQ9XCI1XCIgcm9sZT1cInRyZWVpdGVtXCIgW2F0dHIuYXJpYS1sZXZlbF09XCJsZXZlbFwiIGNsYXNzPVwiZmQtdHJlZV9faXRlbVwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZkLXRyZWVfX2l0ZW0tY29udGFpbmVyXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZkLXRyZWVfX2NvbnRlbnRcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmZC10cmVlX190ZXh0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZmQtc2tlbGV0b24gdHlwZT1cInRleHRcIiB3aWR0aD1cIjEwMHB4XCIgdGV4dExpbmVzPVwiMVwiPjwvZmQtc2tlbGV0b24+XG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICA8L25nLXRlbXBsYXRlPlxuXG4gICAgPG5nLXRlbXBsYXRlICNkYXRhTG9hZGVkVHBsPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiX2l0ZW1zLmxlbmd0aCA+IDAgJiYgdHJlZUl0ZW1EZWY7IGVsc2Ugbm9EYXRhVHBsXCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBpdGVtIG9mIF9pdGVtczsgdHJhY2tCeTogX3RyYWNrRm5cIj5cbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwicmVuZGVyZXJcIlxuICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyAkaW1wbGljaXQ6IGl0ZW0gfVwiXG4gICAgICAgICAgICAgICAgPjwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9uZy10ZW1wbGF0ZT5cblxuICAgIDxuZy10ZW1wbGF0ZSAjcmVuZGVyZXIgbGV0LWl0ZW0+XG4gICAgICAgIDxuZy1jb250YWluZXIgZmRUcmVlSXRlbSBmZGtTZWxlY3RhYmxlSXRlbSAjdHJlZUl0ZW1EaXJlY3RpdmU9XCJmZFRyZWVJdGVtXCI+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJpdGVtLnJlbmRlcmVyXCJcbiAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyAkaW1wbGljaXQ6IGl0ZW0gfVwiXG4gICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRJbmplY3Rvcl09XCJ0cmVlSXRlbURpcmVjdGl2ZS5pbmplY3RvclwiXG4gICAgICAgICAgICA+PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICAgICAgdHJlZUl0ZW1EaXJlY3RpdmUudHJlZUl0ZW0/Lmhhc0RzQ2hpbGRyZW4gJiZcbiAgICAgICAgICAgICAgICAhIXRyZWVJdGVtRGlyZWN0aXZlLnRyZWVJdGVtPy5leHBhbmRlZCAmJlxuICAgICAgICAgICAgICAgICF0cmVlSXRlbURpcmVjdGl2ZS50cmVlSXRlbT8uY2hpbGRyZW5Mb2FkZWRcbiAgICAgICAgICAgIFwiXG4gICAgICAgID5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImxvYWRpbmdSZW5kZXJlclwiXG4gICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgJGltcGxpY2l0OiBpdGVtLmxldmVsICsgMSB9XCJcbiAgICAgICAgICAgID48L25nLXRlbXBsYXRlPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInRyZWVJdGVtRGlyZWN0aXZlLnRyZWVJdGVtPy5jaGlsZHJlbiBhcyBjaGlsZEl0ZW1zXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmQtdHJlZVwiICpuZ0lmPVwiY2hpbGRJdGVtcyAmJiBjaGlsZEl0ZW1zLmxlbmd0aCA+IDAgJiYgISF0cmVlSXRlbURpcmVjdGl2ZT8udHJlZUl0ZW0/LmV4cGFuZGVkXCI+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgY2hpbGQgb2YgY2hpbGRJdGVtczsgdHJhY2tCeTogX3RyYWNrRm5cIj5cbiAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlXG4gICAgICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJyZW5kZXJlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyAkaW1wbGljaXQ6IGNoaWxkIH1cIlxuICAgICAgICAgICAgICAgICAgICA+PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L25nLXRlbXBsYXRlPlxuXG4gICAgPG5nLXRlbXBsYXRlICNub0RhdGFUcGw+XG4gICAgICAgIDxkaXYgcm9sZT1cInRyZWVpdGVtXCIgYXJpYS1sZXZlbD1cIjFcIiBjbGFzcz1cImZkLXRyZWVfX2l0ZW1cIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmZC10cmVlX19pdGVtLWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmZC10cmVlX19jb250ZW50XCI+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZmQtdHJlZV9fdGV4dFwiPnt7ICdjb3JlVHJlZS5ub0RhdGEnIHwgZmRUcmFuc2xhdGUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbjwvbmctdGVtcGxhdGU+XG48bmctdGVtcGxhdGUgI3Byb2plY3RlZENvbnRlbnRSZW5kZXJlcj5cbiAgICA8bmctY29udGVudCBzZWxlY3Q9XCJmZC10cmVlLWl0ZW1cIj48L25nLWNvbnRlbnQ+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgW25nVGVtcGxhdGVPdXRsZXRdPVwidHJlZUl0ZW1EZWYgPyBkYXRhU291cmNlUmVuZGVyZXIgOiBwcm9qZWN0ZWRDb250ZW50UmVuZGVyZXJcIj48L25nLXRlbXBsYXRlPlxuIl19
|
|
439
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL2NvcmUvc3JjL2xpYi90cmVlL3RyZWUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL3NyYy9saWIvdHJlZS90cmVlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFFcEQsT0FBTyxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3RGLE9BQU8sRUFFSCxpQkFBaUIsRUFDakIsU0FBUyxFQUNULFlBQVksRUFDWixlQUFlLEVBQ2YsVUFBVSxFQUNWLFVBQVUsRUFDVixZQUFZLEVBQ1osWUFBWSxFQUNaLE1BQU0sRUFDTixLQUFLLEVBSUwsTUFBTSxFQUNOLFNBQVMsRUFFVCxZQUFZLEVBQ1osaUJBQWlCLEVBQ3BCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSwwQkFBMEIsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ25HLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUMxRCxPQUFPLEVBQ0gsYUFBYSxFQUViLE9BQU8sRUFFUCxVQUFVLEVBR1YsZ0JBQWdCLEVBQ25CLE1BQU0sNEJBQTRCLENBQUM7QUFDcEMsT0FBTyxFQUFFLHNCQUFzQixFQUFFLCtCQUErQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDaEgsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFbkcsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDN0UsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDNUUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDckUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQzdELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUc3QyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQzs7Ozs7Ozs7O0FBa0NoRSxNQUFNLE9BQU8sYUFBYTtJQTZCdEI7O09BRUc7SUFDSCxJQUNJLG1CQUFtQixDQUFDLEtBQWM7UUFDbEMsSUFBSSxLQUFLLEtBQUssSUFBSSxDQUFDLG9CQUFvQixFQUFFO1lBQ3JDLE9BQU87U0FDVjtRQUNELElBQUksQ0FBQyxvQkFBb0IsR0FBRyxLQUFLLENBQUM7UUFDbEMsSUFBSSxDQUFDLFlBQVksQ0FBQyxzQkFBc0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNwRCxDQUFDO0lBRUQsSUFBSSxtQkFBbUI7UUFDbkIsT0FBTyxJQUFJLENBQUMsb0JBQW9CLENBQUM7SUFDckMsQ0FBQztJQW9CRCxxQ0FBcUM7SUFDckMsSUFDSSxXQUFXLENBQUMsS0FBcUM7UUFDakQsSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7UUFDMUIsbUJBQW1CO1FBQ25CLElBQUksQ0FBQyxZQUFZLENBQUMsbUJBQW1CLEdBQUcsS0FBSyxFQUFFLFdBQVcsQ0FBQztRQUMzRCxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3BFLENBQUM7SUFFRCxJQUFJLFdBQVc7UUFDWCxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUM7SUFDN0IsQ0FBQztJQUVELGNBQWM7SUFDZCxJQUFJLFFBQVE7UUFDUixPQUFPLElBQUksQ0FBQyxTQUFTLEtBQUssVUFBVSxDQUFDO0lBQ3pDLENBQUM7SUFFRCxjQUFjO0lBQ2QsSUFBSSxNQUFNO1FBQ04sT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztJQTJFRCxjQUFjO0lBQ2Q7UUF6SkE7O1dBRUc7UUFFSCxhQUFRLEdBQUcsS0FBSyxDQUFDO1FBRWpCLG9DQUFvQztRQUVwQyxjQUFTLEdBQWtCLE1BQU0sQ0FBQztRQUVsQywwQ0FBMEM7UUFFMUMsdUJBQWtCLEdBQXVCLE1BQU0sQ0FBQztRQUVoRDs7OztXQUlHO1FBRUgsd0JBQW1CLEdBQUcsS0FBSyxDQUFDO1FBa0I1QixjQUFjO1FBQ04seUJBQW9CLEdBQUcsS0FBSyxDQUFDO1FBRXJDLGtEQUFrRDtRQUVsRCxrQkFBYSxHQUFHLElBQUksWUFBWSxFQUFXLENBQUM7UUFFNUMsbURBQW1EO1FBRW5ELGlCQUFZLEdBQUcsSUFBSSxZQUFZLEVBQVcsQ0FBQztRQUUzQyxpREFBaUQ7UUFFakQsbUJBQWMsR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFDO1FBRXpDLGNBQWM7UUFDZCxXQUFNLEdBQW1DLEVBQUUsQ0FBQztRQXlCNUM7OztXQUdHO1FBQ0gsdUJBQWtCLEdBQUcsS0FBSyxDQUFDO1FBYTNCLGNBQWM7UUFDRyw0QkFBdUIsR0FBRyxNQUFNLENBQUMsc0JBQXNCLENBQUMsQ0FBQztRQUUxRSxjQUFjO1FBQ0cseUJBQW9CLEdBQUcsTUFBTSxDQUE4QyxtQkFBbUIsQ0FBQyxDQUFDO1FBRWpILGNBQWM7UUFDRyxnQkFBVyxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUVsRCxjQUFjO1FBQ0UsZUFBVSxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUVoRCxjQUFjO1FBQ0csaUJBQVksR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUM7UUFFcEQsY0FBYztRQUNHLHNCQUFpQixHQUFHLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBRTlELGNBQWM7UUFDRyxTQUFJLEdBQUcsTUFBTSxDQUFDLFVBQVUsRUFBRTtZQUN2QyxRQUFRLEVBQUUsSUFBSTtTQUNqQixDQUFDLENBQUM7UUFFSCxjQUFjO1FBQ0csa0JBQWEsR0FBRyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUM7UUFFdEQsY0FBYztRQUNHLFNBQUksR0FBRyxNQUFNLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUVsRCxjQUFjO1FBQ04sb0JBQWUsR0FBd0IsSUFBSSxDQUFDO1FBUXBEOzs7V0FHRztRQUNLLHFCQUFnQixHQUFtQixFQUFFLENBQUM7UUFFOUM7OztXQUdHO1FBQ0ssY0FBUyxHQUFtQixFQUFFLENBQUM7UUFVbkMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ25ELElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxTQUFTLEVBQUUsQ0FBQztJQUM3QyxDQUFDO0lBRUQsY0FBYztJQUNkLFFBQVE7UUFDSixJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDdkIsSUFBSSxDQUFDLHNCQUFzQixFQUFFLENBQUM7UUFFOUIsSUFBSSxDQUFDLFlBQVksQ0FBQyxhQUFhO2FBQzFCLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxFQUFFLGtCQUFrQixDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQzthQUNsRSxTQUFTLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUNqQixJQUFJLENBQUMsY0FBYyxHQUFHLEtBQUssQ0FBQztZQUM1QixJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztZQUM5QixJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQzlCLENBQUMsQ0FBQyxDQUFDO1FBRVAsSUFBSSxDQUFDLFlBQVksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7WUFDdEYsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUM5QixDQUFDLENBQUMsQ0FBQztRQUVILElBQUksSUFBSSxDQUFDLFNBQVMsS0FBSyxNQUFNLEVBQUU7WUFDM0IsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBRTFELElBQUksQ0FBQyxhQUFhLENBQUMsU0FBUyxFQUFFLFlBQVksRUFBRSxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRTtnQkFDbEcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzlELENBQUMsQ0FBQyxDQUFDO1NBQ047SUFDTCxDQUFDO0lBRUQsY0FBYztJQUNkLFdBQVcsQ0FBQyxPQUFzQjtRQUM5QixJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztRQUU5QixJQUFJLFdBQVcsSUFBSSxPQUFPLElBQUksb0JBQW9CLElBQUksT0FBTyxFQUFFO1lBQzNELElBQUksQ0FBQyxZQUFZLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQztZQUM1RSxJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQztTQUNoQztJQUNMLENBQUM7SUFFRCxjQUFjO0lBQ2QsZUFBZTtRQUNYLElBQUksQ0FBQyx5QkFBeUIsRUFBRSxDQUFDO1FBQ2pDLElBQUksQ0FBQyxpQ0FBaUMsRUFBRSxDQUFDO0lBQzdDLENBQUM7SUFFRCxjQUFjO0lBQ2QsV0FBVztRQUNQLElBQUksQ0FBQyxlQUFlLEVBQUUsV0FBVyxFQUFFLENBQUM7UUFDcEMsSUFBSSxDQUFDLFNBQVMsRUFBRSxXQUFXLEVBQUUsQ0FBQztRQUM5QixJQUFJLENBQUMsYUFBYSxFQUFFLFdBQVcsRUFBRSxDQUFDO0lBQ3RDLENBQUM7SUFFRCxjQUFjO0lBQ04scUJBQXFCO1FBQ3pCLElBQUksQ0FBQyxhQUFhLEVBQUUsV0FBVyxFQUFFLENBQUM7UUFDbEMsSUFBSSxJQUFJLENBQUMsU0FBUyxLQUFLLE1BQU0sRUFBRTtZQUMzQixJQUFJLENBQUMsaUJBQWlCLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7WUFFMUQsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLFNBQVMsRUFBRSxZQUFZO2dCQUMzRCxFQUFFLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7aUJBQzNDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7Z0JBQ1osSUFBSSxDQUFDLGlCQUFpQixDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzlELENBQUMsQ0FBQyxDQUFDO1NBQ1Y7SUFDTCxDQUFDO0lBRUQsY0FBYztJQUNOLGlDQUFpQztRQUNyQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsT0FBTzthQUMzQixJQUFJLENBQ0QsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUNmLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxLQUFLLFNBQVMsQ0FBQyxFQUM1QyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQ3ZDO2FBQ0EsU0FBUyxDQUFDLEdBQUcsRUFBRTtZQUNaLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLE9BQU8sRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVMsQ0FBQyxDQUFDO1lBQ2xGLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQzNELElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUM1QyxDQUFDLENBQUMsQ0FBQztJQUNYLENBQUM7SUFFRCxjQUFjO0lBQ04seUJBQXlCO1FBQzdCLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxPQUFPO2FBQzNCLElBQUksQ0FDRCxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQ2YsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxFQUMvQixrQkFBa0IsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQ3ZDO2FBQ0EsU0FBUyxDQUFDLEdBQUcsRUFBRTtZQUNaLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ3BELE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQzNELElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUM1QyxDQUFDLENBQUMsQ0FBQztJQUNYLENBQUM7SUFFRCxjQUFjO0lBQ04sa0JBQWtCLENBQUMsS0FBcUI7UUFDNUMsSUFBSSxDQUFDLGdCQUFnQixHQUFHLEtBQUssQ0FBQztRQUU5QixNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsVUFBVSxDQUFDO1FBQ3JELE1BQU0sa0JBQWtCLEdBQUcsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxLQUFLLFVBQVUsQ0FBQyxDQUFDO1FBQzFFLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxPQUFPLEVBQUUsQ0FBQztRQUVqQyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxlQUFlLENBQUMsS0FBSyxDQUFDO2FBQzdDLHVCQUF1QixDQUFDLElBQUksQ0FBQzthQUM3QixhQUFhLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUM7UUFFdkQsSUFBSSxrQkFBa0IsR0FBRyxDQUFDLENBQUMsRUFBRTtZQUN6QixJQUFJLENBQUMsZ0JBQWdCLENBQUMsYUFBYSxDQUFDLGtCQUFrQixDQUFDLENBQUM7U0FDM0Q7UUFFRCxJQUFJLENBQUMsaUJBQWlCLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUM7UUFFaEcsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7SUFDaEMsQ0FBQztJQUVELGNBQWM7SUFDZCxjQUFjLENBQUMsUUFBc0I7UUFDakMsSUFBSSxZQUFZLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDdEIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRTtZQUMxQyxNQUFNLFNBQVMsR0FBRyxRQUFRLEtBQUssSUFBSSxDQUFDO1lBQ3BDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUM5QyxJQUFJLFNBQVMsRUFBRTtnQkFDWCxZQUFZLEdBQUcsS0FBSyxDQUFDO2FBQ3hCO1FBQ0wsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLFlBQVksS0FBSyxDQUFDLENBQUMsRUFBRTtZQUNyQixPQUFPO1NBQ1Y7UUFFRCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsYUFBYSxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQ3RELENBQUM7SUFFRCxjQUFjO0lBQ04sb0JBQW9CO1FBQ3hCLElBQUksQ0FBQyxTQUFTLEVBQUUsV0FBVyxFQUFFLENBQUM7UUFDOUIsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBRXBDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtZQUNuQyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FDZCxTQUFTLENBQWdCLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxFQUFFLFNBQVMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO2dCQUNuRixJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztZQUNyQyxDQUFDLENBQUMsQ0FDTCxDQUFDO1lBQ0YsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQ2QsU0FBUyxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsYUFBYSxFQUFFLE9BQU8sQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7Z0JBQ2pFLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDOUIsQ0FBQyxDQUFDLENBQ0wsQ0FBQztRQUNOLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELGNBQWM7SUFDTixjQUFjLENBQUMsS0FBcUI7UUFDeEMsTUFBTSxVQUFVLEdBQW1CLEVBQUUsQ0FBQztRQUN0QyxNQUFNLFNBQVMsR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBRTNELFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxRQUFRLEVBQUUsS0FBSyxFQUFFLEVBQUU7WUFDbEMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFFLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQztRQUN0RCxDQUFDLENBQUMsQ0FBQztRQUVILEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtZQUNuQixJQUFJLENBQUMsSUFBSSxJQUFJLFVBQVUsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUU7Z0JBQ3BDLE9BQU87YUFDVjtZQUVELFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7WUFFdEIsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7Z0JBQzVCLE9BQU87YUFDVjtZQUVELE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLEtBQUssSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFFN0YsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDLFFBQVEsRUFBRSxLQUFLLEVBQUUsRUFBRTtnQkFDbkMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsTUFBTSxFQUFFLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQztZQUN2RCxDQUFDLENBQUMsQ0FBQztZQUVILFVBQVUsQ0FBQyxJQUFJLENBQUMsR0FBRyxVQUFVLENBQUMsQ0FBQztRQUNuQyxDQUFDLENBQUMsQ0FBQztRQUVILE9BQU8sVUFBVSxDQUFDO0lBQ3RCLENBQUM7SUFFRCxjQUFjO0lBRWQsc0JBQXNCO1FBQ2xCLE9BQU87WUFDSCxJQUFJLENBQUMsS0FBSztZQUNWLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLGtCQUFrQixJQUFJLENBQUMsY0FBYyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDbEUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDekMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEtBQUssQ0FBQyxJQUFJLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDN0UsSUFBSSxDQUFDLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxzQ0FBc0MsQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUN0RSxTQUFTO1NBQ1osQ0FBQztJQUNOLENBQUM7SUFFRDs7OztPQUlHO0lBRUssUUFBUSxDQUFDLEtBQW9CO1FBQ2pDLElBQUksT0FBTyxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxVQUFVLEVBQUUsUUFBUSxDQUFDLENBQUMsRUFBRTtZQUNsRCxJQUFJLEtBQUssQ0FBQyxnQkFBZ0IsRUFBRTtnQkFDeEIsT0FBTzthQUNWO1lBQ0QsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ3ZCLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDM0M7SUFDTCxDQUFDO0lBRUQsY0FBYztJQUNkLGNBQWMsQ0FBQyxLQUFvQixFQUFFLFFBQWdDO1FBQ2pFLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDWCxPQUFPO1NBQ1Y7UUFFRCxNQUFNLEtBQUssR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsS0FBSyxDQUFDO1FBQ3JDLE1BQU0sU0FBUyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUM7UUFDbkQsTUFBTSxXQUFXLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQztRQUVyRCxJQUFJLE9BQU8sQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLGFBQWEsSUFBSSxRQUFRLENBQUMsb0JBQW9CLENBQUMsRUFBRTtZQUNsRyxJQUFJLEtBQUssQ0FBQyxnQkFBZ0IsRUFBRTtnQkFDeEIsT0FBTzthQUNWO1lBQ0QsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBRXZCLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUNsQyxPQUFPO1NBQ1Y7UUFFRCxJQUFJLE9BQU8sQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLFdBQVcsQ0FBQyxFQUFFO1lBQ3ZDLElBQUksS0FBSyxDQUFDLGdCQUFnQixFQUFFO2dCQUN4QixPQUFPO2FBQ1Y7WUFDRCxLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7WUFFdkIsSUFBSSxDQUFDLG9CQUFvQixDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ3BDLE9BQU87U0FDVjtJQUNMLENBQUM7SUFFRCxjQUFjO0lBQ2QsUUFBUSxDQUFDLEtBQWEsRUFBRSxJQUFrQztRQUN0RCxPQUFPLElBQUksQ0FBQyxFQUFFLENBQUM7SUFDbkIsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsUUFBUSxDQUFDLEtBQW1DO1FBQ3hDLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztJQUM3QyxDQUFDO0lBRUQsY0FBYztJQUNOLGtCQUFrQixDQUFDLFFBQXNCO1FBQzdDLElBQUksUUFBUSxDQUFDLFFBQVEsRUFBRTtZQUNuQixzQ0FBc0M7WUFDdEMsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDckYsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsQ0FBQztZQUN0RCxJQUFJLFFBQVEsRUFBRSxRQUFRLEtBQUssUUFBUSxDQUFDLEVBQUUsRUFBRTtnQkFDcEMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLGFBQWEsQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLENBQUM7YUFDdEQ7WUFFRCxPQUFPO1NBQ1Y7UUFFRCxRQUFRLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztRQUN6QixJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQzlCLENBQUM7SUFFRCxjQUFjO0lBQ04sb0JBQW9CLENBQUMsUUFBc0I7UUFDL0MsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLElBQUksUUFBUSxDQUFDLFFBQVEsRUFBRTtZQUN6QyxNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxLQUFLLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUVqRyxJQUFJLGVBQWUsR0FBRyxDQUFDLENBQUMsRUFBRTtnQkFDdEIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLGFBQWEsQ0FBQyxlQUFlLENBQUMsQ0FBQztnQkFDckQsT0FBTzthQUNWO1NBQ0o7UUFDRCxRQUFRLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztRQUMxQixJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQzlCLENBQUM7SUFFRCxjQUFjO0lBQ04sZUFBZTtRQUNuQixJQUFJLENBQUMsZUFBZSxFQUFFLFdBQVcsRUFBRSxDQUFDO1FBQ3BDLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUMxQyxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FDcEIsSUFBSSxDQUFDLG9CQUFvQixDQUFDLGtCQUFrQixFQUFFLGFBQWEsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUM1RixDQUFDO1FBQ0YsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQ3BCLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxrQkFBa0IsRUFBRSxZQUFZLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FDMUYsQ0FBQztRQUVGLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUNwQixJQUFJLENBQUMsb0JBQW9CLENBQUMsa0JBQWtCLEVBQUUsWUFBWTthQUNyRCxJQUFJLENBQ0QsTUFBTSxDQUFDLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxRQUFRLENBQUMsRUFDOUIsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxZQUFZLENBQUMsQ0FDMUQ7YUFDQSxTQUFTLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtZQUNoQixJQUFJLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxDQUFDO1lBQy9CLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUN6RCxJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztZQUU5QixJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQzdCLENBQUMsQ0FBQyxDQUNULENBQUM7UUFFRixJQUFJLENBQUMsb0JBQW9CLENBQUMsa0JBQWtCLEVBQUUsS0FBSyxFQUFFLENBQUM7SUFDMUQsQ0FBQzs4R0FqZVEsYUFBYTtrR0FBYixhQUFhLG1iQVZYO1lBQ1AsK0JBQStCLEVBQUU7WUFDakMsV0FBVztZQUNYLGdCQUFnQjtZQUNoQjtnQkFDSSxPQUFPLEVBQUUsMEJBQTBCO2dCQUNuQyxRQUFRLEVBQUUsb0JBQW9CO2FBQ2pDO1NBQ0osbUVBa0VhLG9CQUFvQix5RUFpQ2pCLFlBQVksd0ZBSmYsaUJBQWlCLHFYQzdLbkMsb3RHQTRFQTs7QURrV0k7SUFEQyxhQUFhOzs7OzJEQVViOzJGQXZXUSxhQUFhO2tCQWhDekIsU0FBUzsrQkFDSSxTQUFTLGlCQUVKLGlCQUFpQixDQUFDLElBQUksa0JBRXJCO3dCQUNaOzRCQUNJLFNBQVMsRUFBRSxtQkFBbUI7NEJBQzlCLHVFQUF1RTs0QkFDdkUsTUFBTSxFQUFFLENBQUMsWUFBWSxDQUFDOzRCQUN0Qix3RUFBd0U7NEJBQ3hFLE9BQU8sRUFBRSxDQUFDLGFBQWEsQ0FBQzt5QkFDM0I7d0JBQ0Q7NEJBQ0ksU0FBUyxFQUFFLFlBQVk7NEJBQ3ZCLHVFQUF1RTs0QkFDdkUsTUFBTSxFQUFFLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsY0FBYyxFQUFFLFVBQVUsRUFBRSxVQUFVLENBQUM7eUJBQzFFO3FCQUNKLFFBQ0s7d0JBQ0YsSUFBSSxFQUFFLE1BQU07cUJBQ2YsYUFDVTt3QkFDUCwrQkFBK0IsRUFBRTt3QkFDakMsV0FBVzt3QkFDWCxnQkFBZ0I7d0JBQ2hCOzRCQUNJLE9BQU8sRUFBRSwwQkFBMEI7NEJBQ25DLFFBQVEsRUFBRSxvQkFBb0I7eUJBQ2pDO3FCQUNKOzBFQU9ELEtBQUs7c0JBREosS0FBSztnQkFPTixRQUFRO3NCQURQLEtBQUs7Z0JBS04sU0FBUztzQkFEUixLQUFLO2dCQUtOLGtCQUFrQjtzQkFEakIsS0FBSztnQkFTTixtQkFBbUI7c0JBRGxCLEtBQUs7Z0JBT0YsbUJBQW1CO3NCQUR0QixLQUFLO2dCQWtCTixhQUFhO3NCQURaLE1BQU07Z0JBS1AsWUFBWTtzQkFEWCxNQUFNO2dCQUtQLGNBQWM7c0JBRGIsTUFBTTtnQkFRSCxXQUFXO3NCQURkLFlBQVk7dUJBQUMsb0JBQW9CO2dCQThCbEMsbUJBQW1CO3NCQURsQixZQUFZO3VCQUFDLGlCQUFpQjtnQkFLdEIsbUJBQW1CO3NCQUQzQixlQUFlO3VCQUFDLFlBQVksRUFBRSxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUU7Z0JBNlBwRCxzQkFBc0IsTUFpQmQsUUFBUTtzQkFEZixZQUFZO3VCQUFDLFNBQVMsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEZvY3VzS2V5TWFuYWdlciB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9hMTF5JztcbmltcG9ydCB7IEJvb2xlYW5JbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2VyY2lvbic7XG5pbXBvcnQgeyBET1dOX0FSUk9XLCBMRUZUX0FSUk9XLCBSSUdIVF9BUlJPVywgVVBfQVJST1cgfSBmcm9tICdAYW5ndWxhci9jZGsva2V5Y29kZXMnO1xuaW1wb3J0IHtcbiAgICBBZnRlclZpZXdJbml0LFxuICAgIENoYW5nZURldGVjdG9yUmVmLFxuICAgIENvbXBvbmVudCxcbiAgICBDb250ZW50Q2hpbGQsXG4gICAgQ29udGVudENoaWxkcmVuLFxuICAgIERlc3Ryb3lSZWYsXG4gICAgRWxlbWVudFJlZixcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgSG9zdExpc3RlbmVyLFxuICAgIGluamVjdCxcbiAgICBJbnB1dCxcbiAgICBPbkNoYW5nZXMsXG4gICAgT25EZXN0cm95LFxuICAgIE9uSW5pdCxcbiAgICBPdXRwdXQsXG4gICAgUXVlcnlMaXN0LFxuICAgIFNpbXBsZUNoYW5nZXMsXG4gICAgVmlld0NoaWxkcmVuLFxuICAgIFZpZXdFbmNhcHN1bGF0aW9uXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRGF0YVNvdXJjZURpcmVjdGl2ZSwgRkRfREFUQV9TT1VSQ0VfVFJBTlNGT1JNRVIgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2Nkay9kYXRhLXNvdXJjZSc7XG5pbXBvcnQgeyBDdmFEaXJlY3RpdmUgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2Nkay9mb3Jtcyc7XG5pbXBvcnQge1xuICAgIGFwcGx5Q3NzQ2xhc3MsXG4gICAgQ3NzQ2xhc3NCdWlsZGVyLFxuICAgIEtleVV0aWwsXG4gICAgTnVsbGFibGUsXG4gICAgUnRsU2VydmljZSxcbiAgICBTZWxlY3RhYmxlTGlzdFZhbHVlVHlwZSxcbiAgICBTZWxlY3RDb21wb25lbnRSb290VG9rZW4sXG4gICAgU2VsZWN0aW9uU2VydmljZVxufSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2Nkay91dGlscyc7XG5pbXBvcnQgeyBDb250ZW50RGVuc2l0eU9ic2VydmVyLCBjb250ZW50RGVuc2l0eU9ic2VydmVyUHJvdmlkZXJzIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL2NvbnRlbnQtZGVuc2l0eSc7XG5pbXBvcnQgeyBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgZmlsdGVyLCBmcm9tRXZlbnQsIHN0YXJ0V2l0aCwgU3Vic2NyaXB0aW9uLCBzd2l0Y2hNYXAgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEZkVHJlZUFjY2VwdGFibGVEYXRhU291cmNlLCBGZFRyZWVEYXRhU291cmNlLCBGZFRyZWVJdGVtVHlwZSB9IGZyb20gJy4vZGF0YS1zb3VyY2UvdHJlZS1kYXRhLXNvdXJjZSc7XG5pbXBvcnQgeyBUcmVlRGF0YVNvdXJjZVBhcnNlciB9IGZyb20gJy4vZGF0YS1zb3VyY2UvdHJlZS1kYXRhLXNvdXJjZS1wYXJzZXInO1xuaW1wb3J0IHsgVHJlZUl0ZW1EZWZEaXJlY3RpdmUgfSBmcm9tICcuL2RpcmVjdGl2ZXMvdHJlZS1pdGVtLWRlZi5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgVHJlZUl0ZW1EaXJlY3RpdmUgfSBmcm9tICcuL2RpcmVjdGl2ZXMvdHJlZS1pdGVtLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBCYXNlVHJlZUl0ZW0gfSBmcm9tICcuL21vZGVscy9iYXNlLXRyZWUtaXRlbS5jbGFzcyc7XG5pbXBvcnQgeyBUcmVlU2VydmljZSB9IGZyb20gJy4vdHJlZS5zZXJ2aWNlJztcbmltcG9ydCB7IFNlbGVjdGlvblBsYWNlbWVudCwgU2VsZWN0aW9uVHlwZSB9IGZyb20gJy4vbW9kZWxzL3NlbGVjdGlvbi10eXBlJztcbmltcG9ydCB7IFRyZWVJdGVtLCBUcmVlSXRlbUdlbmVyaWMgfSBmcm9tICcuL21vZGVscy90cmVlLWl0ZW0nO1xuaW1wb3J0IHsgdGFrZVVudGlsRGVzdHJveWVkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2ZkLXRyZWUnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi90cmVlLmNvbXBvbmVudC5odG1sJyxcbiAgICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICAgIHN0eWxlVXJsczogWycuL3RyZWUuY29tcG9uZW50LnNjc3MnXSxcbiAgICBob3N0RGlyZWN0aXZlczogW1xuICAgICAgICB7XG4gICAgICAgICAgICBkaXJlY3RpdmU6IERhdGFTb3VyY2VEaXJlY3RpdmUsXG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L25vLWlucHV0cy1tZXRhZGF0YS1wcm9wZXJ0eVxuICAgICAgICAgICAgaW5wdXRzOiBbJ2RhdGFTb3VyY2UnXSxcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvbm8tb3V0cHV0cy1tZXRhZGF0YS1wcm9wZXJ0eVxuICAgICAgICAgICAgb3V0cHV0czogWydkYXRhQ2hhbmdlZCddXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIGRpcmVjdGl2ZTogQ3ZhRGlyZWN0aXZlLFxuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9uby1pbnB1dHMtbWV0YWRhdGEtcHJvcGVydHlcbiAgICAgICAgICAgIGlucHV0czogWyduYW1lJywgJ2lkJywgJ3N0YXRlJywgJ3N0YXRlTWVzc2FnZScsICdkaXNhYmxlZCcsICdyZWFkb25seSddXG4gICAgICAgIH1cbiAgICBdLFxuICAgIGhvc3Q6IHtcbiAgICAgICAgcm9sZTogJ3RyZWUnXG4gICAgfSxcbiAgICBwcm92aWRlcnM6IFtcbiAgICAgICAgY29udGVudERlbnNpdHlPYnNlcnZlclByb3ZpZGVycygpLFxuICAgICAgICBUcmVlU2VydmljZSxcbiAgICAgICAgU2VsZWN0aW9uU2VydmljZSxcbiAgICAgICAge1xuICAgICAgICAgICAgcHJvdmlkZTogRkRfREFUQV9TT1VSQ0VfVFJBTlNGT1JNRVIsXG4gICAgICAgICAgICB1c2VDbGFzczogVHJlZURhdGFTb3VyY2VQYXJzZXJcbiAgICAgICAgfVxuICAgIF1cbn0pXG5leHBvcnQgY2xhc3MgVHJlZUNvbXBvbmVudDxQIGV4dGVuZHMgRmRUcmVlQWNjZXB0YWJsZURhdGFTb3VyY2UsIFQgZXh0ZW5kcyBUcmVlSXRlbSA9IEZkVHJlZUl0ZW1UeXBlPFA+PlxuICAgIGltcGxlbWVudHMgQ3NzQ2xhc3NCdWlsZGVyLCBPbkluaXQsIE9uQ2hhbmdlcywgQWZ0ZXJWaWV3SW5pdCwgU2VsZWN0Q29tcG9uZW50Um9vdFRva2VuLCBPbkRlc3Ryb3lcbntcbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBJbnB1dCgpXG4gICAgY2xhc3M6IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdGhlIHRyZWUgc2hvdWxkIGJlIGJvcmRlcmxlc3MuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBub0JvcmRlciA9IGZhbHNlO1xuXG4gICAgLyoqIFR5cGUgb2YgdHJlZSBpdGVtcyBzZWxlY3Rpb24uICovXG4gICAgQElucHV0KClcbiAgICBzZWxlY3Rpb246IFNlbGVjdGlvblR5cGUgPSAnbm9uZSc7XG5cbiAgICAvKiogUGxhY2VtZW50IG9mIHRoZSBzZWxlY3Rpb24gY29udHJvbC4gKi9cbiAgICBASW5wdXQoKVxuICAgIHNlbGVjdGlvblBsYWNlbWVudDogU2VsZWN0aW9uUGxhY2VtZW50ID0gJ25vbmUnO1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciB0aGUgc2VjdGlvbnMgc2hvdWxkIGJlIGRlcGVuZGVudCBmb3Igc2VsZWN0aW9uIG1vZGUuXG4gICAgICogSWYgdHJ1ZSwgc2VsZWN0aW9uIGNvbnRyb2wgd2lsbCBzaGlmdCwgYWNjb3JkaW5nIHRvIHRoZSBsZXZlbC5cbiAgICAgKiBJZiBmYWxzZSwgc2VsZWN0aW9uIGNvbnRyb2wgd2lsbCBzdGF5IG9uIHRoZSBzYW1lIHBsYWNlIGlnbm9yaW5nIHRoZSBpdGVtIGxldmVsLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgaW5kZXBlbmRlbnRTZWN0aW9ucyA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciB0aGUgVHJlZSBjb21wb25lbnQgaGFzIG5hdmlnYXRpb24gaW5kaWNhdG9ycy5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCBuYXZpZ2F0aW9uSW5kaWNhdG9yKHZhbHVlOiBib29sZWFuKSB7XG4gICAgICAgIGlmICh2YWx1ZSA9PT0gdGhpcy5fbmF2aWdhdGlvbkluZGljYXRvcikge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX25hdmlnYXRpb25JbmRpY2F0b3IgPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5fdHJlZVNlcnZpY2Uuc2V0TmF2aWdhdGlvbkluZGljYXRvcih2YWx1ZSk7XG4gICAgfVxuXG4gICAgZ2V0IG5hdmlnYXRpb25JbmRpY2F0b3IoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9uYXZpZ2F0aW9uSW5kaWNhdG9yO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfbmF2aWdhdGlvbkluZGljYXRvciA9IGZhbHNlO1xuXG4gICAgLyoqIEV2ZW50IGVtaXR0ZWQgd2hlbiBkYXRhIGxvYWRpbmcgaXMgc3RhcnRlZC4gKi9cbiAgICBAT3V0cHV0KClcbiAgICBkYXRhUmVxdWVzdGVkID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuXG4gICAgLyoqIEV2ZW50IGVtaXR0ZWQgd2hlbiBkYXRhIGxvYWRpbmcgaXMgZmluaXNoZWQuICovXG4gICAgQE91dHB1dCgpXG4gICAgZGF0YVJlY2VpdmVkID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuXG4gICAgLyoqIEV2ZW50IGVtaXR0ZWQgd2hlbiBzZWxlY3RlZCBzdGF0ZSBjaGFuZ2VkLiAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHNlbGVjdGVkQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9pdGVtczogVHJlZUl0ZW08VHJlZUl0ZW1HZW5lcmljPFQ+PltdID0gW107XG5cbiAgICAvKiogVHJlZSBpdGVtIHRlbXBsYXRlIGRlZmluaXRpb24uICovXG4gICAgQENvbnRlbnRDaGlsZChUcmVlSXRlbURlZkRpcmVjdGl2ZSlcbiAgICBzZXQgdHJlZUl0ZW1EZWYodmFsdWU6IE51bGxhYmxlPFRyZWVJdGVtRGVmRGlyZWN0aXZlPikge1xuICAgICAgICB0aGlzLl90cmVlSXRlbURlZiA9IHZhbHVlO1xuICAgICAgICAvLyBTZXQgbmV3IHJlbmRlcmVyXG4gICAgICAgIHRoaXMuX3RyZWVTZXJ2aWNlLnRyZWVJdGVtVGVtcGxhdGVSZWYgPSB2YWx1ZT8udGVtcGxhdGVSZWY7XG4gICAgICAgIHRoaXMuX2l0ZW1zID0gdGhpcy5fdHJlZVNlcnZpY2Uubm9ybWFsaXplVHJlZUl0ZW1zKHRoaXMuX2l0ZW1zKTtcbiAgICB9XG5cbiAgICBnZXQgdHJlZUl0ZW1EZWYoKTogTnVsbGFibGU8VHJlZUl0ZW1EZWZEaXJlY3RpdmU+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3RyZWVJdGVtRGVmO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgZ2V0IG11bHRpcGxlKCk6IEJvb2xlYW5JbnB1dCB7XG4gICAgICAgIHJldHVybiB0aGlzLnNlbGVjdGlvbiA9PT0gJ211bHRpcGxlJztcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGdldCB0b2dnbGUoKTogQm9vbGVhbklucHV0IHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIFVzZWQgZm9yIHNrZWxldG9uIHRvIGFwcGVhciBiZWZvcmUgZmlyc3QgbWVhbmluZ2Z1bCBkYXRhIGJlaW5nIGxvYWRlZC5cbiAgICAgKi9cbiAgICBfaW5pdGlhbERhdGFMb2FkZWQgPSBmYWxzZTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQFZpZXdDaGlsZHJlbihUcmVlSXRlbURpcmVjdGl2ZSlcbiAgICBfdHJlZUl0ZW1EaXJlY3RpdmVzOiBRdWVyeUxpc3Q8VHJlZUl0ZW1EaXJlY3RpdmU8VHJlZUl0ZW0sIGFueT4+O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBAQ29udGVudENoaWxkcmVuKEJhc2VUcmVlSXRlbSwgeyBkZXNjZW5kYW50czogdHJ1ZSB9KVxuICAgIHJlYWRvbmx5IF9wcm9qZWN0ZWRUcmVlSXRlbXM6IFF1ZXJ5TGlzdDxCYXNlVHJlZUl0ZW0+O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF90cmVlSXRlbURlZjogTnVsbGFibGU8VHJlZUl0ZW1EZWZEaXJlY3RpdmU+O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IF9jb250ZW50RGVuc2l0eU9ic2VydmVyID0gaW5qZWN0KENvbnRlbnREZW5zaXR5T2JzZXJ2ZXIpO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IF9kYXRhU291cmNlRGlyZWN0aXZlID0gaW5qZWN0PERhdGFTb3VyY2VEaXJlY3RpdmU8VCwgRmRUcmVlRGF0YVNvdXJjZTxUPj4+KERhdGFTb3VyY2VEaXJlY3RpdmUpO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IF9kZXN0cm95UmVmID0gaW5qZWN0KERlc3Ryb3lSZWYpO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwdWJsaWMgcmVhZG9ubHkgZWxlbWVudFJlZiA9IGluamVjdChFbGVtZW50UmVmKTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSByZWFkb25seSBfdHJlZVNlcnZpY2UgPSBpbmplY3QoVHJlZVNlcnZpY2UpO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IF9zZWxlY3Rpb25TZXJ2aWNlID0gaW5qZWN0KFNlbGVjdGlvblNlcnZpY2UpO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IF9ydGwgPSBpbmplY3QoUnRsU2VydmljZSwge1xuICAgICAgICBvcHRpb25hbDogdHJ1ZVxuICAgIH0pO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IF9jdmFEaXJlY3RpdmUgPSBpbmplY3QoQ3ZhRGlyZWN0aXZlKTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSByZWFkb25seSBfY2RyID0gaW5qZWN0KENoYW5nZURldGVjdG9yUmVmKTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfZHNTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbiB8IG51bGwgPSBudWxsO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9leHBhbmRlZExldmVsOiBudW1iZXIgfCB1bmRlZmluZWQ7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2ZvY3VzS2V5TWFuYWdlcjogRm9jdXNLZXlNYW5hZ2VyPEJhc2VUcmVlSXRlbT47XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogU29ydGVkIHRyZWUgaXRlbSBjb21wb25lbnRzLlxuICAgICAqL1xuICAgIHByaXZhdGUgX3NvcnRlZFRyZWVJdGVtczogQmFzZVRyZWVJdGVtW10gPSBbXTtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBBbGwgdHJlZSBpdGVtIGNvbXBvbmVudHMuXG4gICAgICovXG4gICAgcHJpdmF0ZSBfYWxsSXRlbXM6IEJhc2VUcmVlSXRlbVtdID0gW107XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2V2ZW50U3ViOiBTdWJzY3JpcHRpb247XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3NlbGVjdGlvblN1YjogU3Vic2NyaXB0aW9uIHwgdW5kZWZpbmVkO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy5fc2VsZWN0aW9uU2VydmljZS5yZWdpc3RlclJvb3RDb21wb25lbnQodGhpcyk7XG4gICAgICAgIHRoaXMuX2NvbnRlbnREZW5zaXR5T2JzZXJ2ZXIuc3Vic2NyaWJlKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fb3BlbkRhdGFTdHJlYW0oKTtcbiAgICAgICAgdGhpcy5idWlsZENvbXBvbmVudENzc0NsYXNzKCk7XG5cbiAgICAgICAgdGhpcy5fdHJlZVNlcnZpY2UuZXhwYW5kZWRMZXZlbFxuICAgICAgICAgICAgLnBpcGUoZGlzdGluY3RVbnRpbENoYW5nZWQoKSwgdGFrZVVudGlsRGVzdHJveWVkKHRoaXMuX2Rlc3Ryb3lSZWYpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgobGV2ZWwpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9leHBhbmRlZExldmVsID0gbGV2ZWw7XG4gICAgICAgICAgICAgICAgdGhpcy5idWlsZENvbXBvbmVudENzc0NsYXNzKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5fY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuX3RyZWVTZXJ2aWNlLmRldGVjdENoYW5nZXMucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5fZGVzdHJveVJlZikpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpZiAodGhpcy5zZWxlY3Rpb24gIT09ICdub25lJykge1xuICAgICAgICAgICAgdGhpcy5fc2VsZWN0aW9uU2VydmljZS5zZXRWYWx1ZSh0aGlzLl9jdmFEaXJlY3RpdmUudmFsdWUpO1xuXG4gICAgICAgICAgICB0aGlzLl9jdmFEaXJlY3RpdmUubmdDb250cm9sPy52YWx1ZUNoYW5nZXM/LnBpcGUodGFrZVVudGlsRGVzdHJveWVkKHRoaXMuX2Rlc3Ryb3lSZWYpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuX3NlbGVjdGlvblNlcnZpY2Uuc2V0VmFsdWUodGhpcy5fY3ZhRGlyZWN0aXZlLnZhbHVlKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgICAgIHRoaXMuYnVpbGRDb21wb25lbnRDc3NDbGFzcygpO1xuXG4gICAgICAgIGlmICgnc2VsZWN0aW9uJyBpbiBjaGFuZ2VzIHx8ICdzZWxlY3Rpb25QbGFjZW1lbnQnIGluIGNoYW5nZXMpIHtcbiAgICAgICAgICAgIHRoaXMuX3RyZWVTZXJ2aWNlLnNldFNlbGVjdGlvbk1vZGUodGhpcy5zZWxlY3Rpb24sIHRoaXMuc2VsZWN0aW9uUGxhY2VtZW50KTtcbiAgICAgICAgICAgIHRoaXMuX3NldFNlbGVjdGlvbkxpc3RlbmVyKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fbGlzdGVuVG9UcmVlSXRlbXNDaGFuZ2VzKCk7XG4gICAgICAgIHRoaXMuX2xpc3RlblRvVHJlZUl0ZW1EaXJlY3RpdmVDaGFuZ2VzKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fZHNTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIHRoaXMuX2V2ZW50U3ViPy51bnN1YnNjcmliZSgpO1xuICAgICAgICB0aGlzLl9zZWxlY3Rpb25TdWI/LnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9zZXRTZWxlY3Rpb25MaXN0ZW5lcigpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fc2VsZWN0aW9uU3ViPy51bnN1YnNjcmliZSgpO1xuICAgICAgICBpZiAodGhpcy5zZWxlY3Rpb24gIT09ICdub25lJykge1xuICAgICAgICAgICAgdGhpcy5fc2VsZWN0aW9uU2VydmljZS5zZXRWYWx1ZSh0aGlzLl9jdmFEaXJlY3RpdmUudmFsdWUpO1xuXG4gICAgICAgICAgICB0aGlzLl9zZWxlY3Rpb25TdWIgPSB0aGlzLl9jdmFEaXJlY3RpdmUubmdDb250cm9sPy52YWx1ZUNoYW5nZXNcbiAgICAgICAgICAgICAgICA/LnBpcGUodGFrZVVudGlsRGVzdHJveWVkKHRoaXMuX2Rlc3Ryb3lSZWYpKVxuICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9zZWxlY3Rpb25TZXJ2aWNlLnNldFZhbHVlKHRoaXMuX2N2YURpcmVjdGl2ZS52YWx1ZSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2xpc3RlblRvVHJlZUl0ZW1EaXJlY3RpdmVDaGFuZ2VzKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl90cmVlSXRlbURpcmVjdGl2ZXMuY2hhbmdlc1xuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgc3RhcnRXaXRoKG51bGwpLFxuICAgICAgICAgICAgICAgIGZpbHRlcigoKSA9PiB0aGlzLnRyZWVJdGVtRGVmICE9PSB1bmRlZmluZWQpLFxuICAgICAgICAgICAgICAgIHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLl9kZXN0cm95UmVmKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fYWxsSXRlbXMgPSB0aGlzLl90cmVlSXRlbURpcmVjdGl2ZXMudG9BcnJheSgpLm1hcCgoaXRlbSkgPT4gaXRlbS50cmVlSXRlbSEpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGZsYXR0ZW5lZEl0ZW1zID0gdGhpcy5fc29ydFRyZWVJdGVtcyh0aGlzLl9hbGxJdGVtcyk7XG4gICAgICAgICAgICAgICAgdGhpcy5fc2V0RmxhdHRlbmVkSXRlbXMoZmxhdHRlbmVkSXRlbXMpO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9saXN0ZW5Ub1RyZWVJdGVtc0NoYW5nZXMoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3Byb2plY3RlZFRyZWVJdGVtcy5jaGFuZ2VzXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICBzdGFydFdpdGgobnVsbCksXG4gICAgICAgICAgICAgICAgZmlsdGVyKCgpID0+ICF0aGlzLnRyZWVJdGVtRGVmKSxcbiAgICAgICAgICAgICAgICB0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5fZGVzdHJveVJlZilcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuX2FsbEl0ZW1zID0gdGhpcy5fcHJvamVjdGVkVHJlZUl0ZW1zLnRvQXJyYXkoKTtcbiAgICAgICAgICAgICAgICBjb25zdCBmbGF0dGVuZWRJdGVtcyA9IHRoaXMuX3NvcnRUcmVlSXRlbXModGhpcy5fYWxsSXRlbXMpO1xuICAgICAgICAgICAgICAgIHRoaXMuX3NldEZsYXR0ZW5lZEl0ZW1zKGZsYXR0ZW5lZEl0ZW1zKTtcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfc2V0RmxhdHRlbmVkSXRlbXMoaXRlbXM6IEJhc2VUcmVlSXRlbVtdKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3NvcnRlZFRyZWVJdGVtcyA9IGl0ZW1zO1xuXG4gICAgICAgIGNvbnN0IGFjdGl2ZUl0ZW0gPSB0aGlzLl9mb2N1c0tleU1hbmFnZXI/LmFjdGl2ZUl0ZW07XG4gICAgICAgIGNvbnN0IG5ld0FjdGl2ZUl0ZW1JbmRleCA9IGl0ZW1zLmZpbmRJbmRleCgoaXRlbSkgPT4gaXRlbSA9PT0gYWN0aXZlSXRlbSk7XG4gICAgICAgIHRoaXMuX2ZvY3VzS2V5TWFuYWdlcj8uZGVzdHJveSgpO1xuXG4gICAgICAgIHRoaXMuX2ZvY3VzS2V5TWFuYWdlciA9IG5ldyBGb2N1c0tleU1hbmFnZXIoaXRlbXMpXG4gICAgICAgICAgICAud2l0aFZlcnRpY2FsT3JpZW50YXRpb24odHJ1ZSlcbiAgICAgICAgICAgIC5za2lwUHJlZGljYXRlKChpdGVtKSA9PiAhaXRlbS5rZXlib2FyZEFjY2Vzc2libGUpO1xuXG4gICAgICAgIGlmIChuZXdBY3RpdmVJdGVtSW5kZXggPiAtMSkge1xuICAgICAgICAgICAgdGhpcy5fZm9jdXNLZXlNYW5hZ2VyLnNldEFjdGl2ZUl0ZW0obmV3QWN0aXZlSXRlbUluZGV4KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX3NlbGVjdGlvblNlcnZpY2UuaW5pdGlhbGl6ZSh0aGlzLl9zb3J0ZWRUcmVlSXRlbXMubWFwKChpdGVtKSA9PiBpdGVtLnNlbGVjdGFibGVMaXN0SXRlbSkpO1xuXG4gICAgICAgIHRoaXMuX3NldHVwRXZlbnRMaXN0ZW5lcnMoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9vbkl0ZW1Gb2N1c2VkKHRyZWVJdGVtOiBCYXNlVHJlZUl0ZW0pOiB2b2lkIHtcbiAgICAgICAgbGV0IGZvY3VzZWRJbmRleCA9IC0xO1xuICAgICAgICB0aGlzLl9zb3J0ZWRUcmVlSXRlbXMuZm9yRWFjaCgoaXRlbSwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGlzRm9jdXNlZCA9IHRyZWVJdGVtID09PSBpdGVtO1xuICAgICAgICAgICAgaXRlbS5zZXRDb250YWluZXJUYWJJbmRleChpc0ZvY3VzZWQgPyAwIDogLTEpO1xuICAgICAgICAgICAgaWYgKGlzRm9jdXNlZCkge1xuICAgICAgICAgICAgICAgIGZvY3VzZWRJbmRleCA9IGluZGV4O1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBpZiAoZm9jdXNlZEluZGV4ID09PSAtMSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fZm9jdXNLZXlNYW5hZ2VyLnNldEFjdGl2ZUl0ZW0oZm9jdXNlZEluZGV4KTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3NldHVwRXZlbnRMaXN0ZW5lcnMoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2V2ZW50U3ViPy51bnN1YnNjcmliZSgpO1xuICAgICAgICB0aGlzLl9ldmVudFN1YiA9IG5ldyBTdWJzY3JpcHRpb24oKTtcblxuICAgICAgICB0aGlzLl9zb3J0ZWRUcmVlSXRlbXMuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fZXZlbnRTdWIuYWRkKFxuICAgICAgICAgICAgICAgIGZyb21FdmVudDxLZXlib2FyZEV2ZW50PihpdGVtLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwgJ2tleWRvd24nKS5zdWJzY3JpYmUoKGV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX29uSXRlbUtleURvd24oZXZlbnQsIGl0ZW0pO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgdGhpcy5fZXZlbnRTdWIuYWRkKFxuICAgICAgICAgICAgICAgIGZyb21FdmVudChpdGVtLml0ZW1Db250YWluZXI/Lm5hdGl2ZUVsZW1lbnQsICdmb2N1cycpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX29uSXRlbUZvY3VzZWQoaXRlbSk7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfc29ydFRyZWVJdGVtcyhpdGVtczogQmFzZVRyZWVJdGVtW10pOiBCYXNlVHJlZUl0ZW1bXSB7XG4gICAgICAgIGNvbnN0IGNvbXBvbmVudHM6IEJhc2VUcmVlSXRlbVtdID0gW107XG4gICAgICAgIGNvbnN0IHJvb3RJdGVtcyA9IGl0ZW1zLmZpbHRlcigoaXRlbSkgPT4gaXRlbS5sZXZlbCA9PT0gMSk7XG5cbiAgICAgICAgcm9vdEl0ZW1zLmZvckVhY2goKHRyZWVJdGVtLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgdHJlZUl0ZW0uc2V0UG9zaXRpb24ocm9vdEl0ZW1zLmxlbmd0aCwgaW5kZXggKyAxKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXRlbXMuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgICAgICAgaWYgKCFpdGVtIHx8IGNvbXBvbmVudHMuaW5jbHVkZXMoaXRlbSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbXBvbmVudHMucHVzaChpdGVtKTtcblxuICAgICAgICAgICAgaWYgKGl0ZW0uY2hpbGRyZW4ubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBjaGlsZEl0ZW1zID0gdGhpcy5fc29ydFRyZWVJdGVtcyh0aGlzLl9hbGxJdGVtcy5maWx0ZXIoKGkpID0+IGkucGFyZW50SWQgPT09IGl0ZW0uaWQpKTtcblxuICAgICAgICAgICAgY2hpbGRJdGVtcy5mb3JFYWNoKCh0cmVlSXRlbSwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgICB0cmVlSXRlbS5zZXRQb3NpdGlvbihjaGlsZEl0ZW1zLmxlbmd0aCwgaW5kZXggKyAxKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBjb21wb25lbnRzLnB1c2goLi4uY2hpbGRJdGVtcyk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiBjb21wb25lbnRzO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQGFwcGx5Q3NzQ2xhc3NcbiAgICBidWlsZENvbXBvbmVudENzc0NsYXNzKCk6IHN0cmluZ1tdIHtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIHRoaXMuY2xhc3MsXG4gICAgICAgICAgICB0aGlzLl9leHBhbmRlZExldmVsID8gYGV4cGFuZGVkLWxldmVsLSR7dGhpcy5fZXhwYW5kZWRMZXZlbH1gIDogJycsXG4gICAgICAgICAgICB0aGlzLm5vQm9yZGVyID8gJ2ZkLXRyZWUtLW5vLWJvcmRlcicgOiAnJyxcbiAgICAgICAgICAgIHRoaXMuX2l0ZW1zLmxlbmd0aCA9PT0gMCAmJiB0aGlzLl9pbml0aWFsRGF0YUxvYWRlZCA/ICdmZC10cmVlLS1uby1kYXRhJyA6ICcnLFxuICAgICAgICAgICAgdGhpcy5pbmRlcGVuZGVudFNlY3Rpb25zID8gJ2ZkLXRyZWUtLWluZGVwZW5kZW50LW11bHRpLXNlbGVjdGlvbicgOiAnJyxcbiAgICAgICAgICAgICdmZC10cmVlJ1xuICAgICAgICBdO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBLZXlib2FyZCBuYXZpZ2F0aW9uXG4gICAgICogQHBhcmFtIGV2ZW50IEtleWJvYXJkIGV2ZW50LlxuICAgICAqL1xuICAgIEBIb3N0TGlzdGVuZXIoJ2tleWRvd24nLCBbJyRldmVudCddKVxuICAgIHByaXZhdGUgX29uS2V5VXAoZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgaWYgKEtleVV0aWwuaXNLZXlDb2RlKGV2ZW50LCBbRE9XTl9BUlJPVywgVVBfQVJST1ddKSkge1xuICAgICAgICAgICAgaWYgKGV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgdGhpcy5fZm9jdXNLZXlNYW5hZ2VyPy5vbktleWRvd24oZXZlbnQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfb25JdGVtS2V5RG93bihldmVudDogS2V5Ym9hcmRFdmVudCwgdHJlZUl0ZW06IE51bGxhYmxlPEJhc2VUcmVlSXRlbT4pOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0cmVlSXRlbSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgaXNSdGwgPSAhIXRoaXMuX3J0bD8ucnRsLnZhbHVlO1xuICAgICAgICBjb25zdCBleHBhbmRLZXkgPSBpc1J0bCA/IExFRlRfQVJST1cgOiBSSUdIVF9BUlJPVztcbiAgICAgICAgY29uc3QgY29sbGFwc2VLZXkgPSBpc1J0bCA/IFJJR0hUX0FSUk9XIDogTEVGVF9BUlJPVztcblxuICAgICAgICBpZiAoS2V5VXRpbC5pc0tleUNvZGUoZXZlbnQsIGV4cGFuZEtleSkgJiYgKHRyZWVJdGVtLmhhc0RzQ2hpbGRyZW4gfHwgdHJlZUl0ZW0uaGFzUHJvamVjdGVkQ2hpbGRyZW4pKSB7XG4gICAgICAgICAgICBpZiAoZXZlbnQuZGVmYXVsdFByZXZlbnRlZCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAgICAgICAgIHRoaXMuX2V4cGFuZFRyZWVTZWN0aW9uKHRyZWVJdGVtKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChLZXlVdGlsLmlzS2V5Q29kZShldmVudCwgY29sbGFwc2VLZXkpKSB7XG4gICAgICAgICAgICBpZiAoZXZlbnQuZGVmYXVsdFByZXZlbnRlZCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAgICAgICAgIHRoaXMuX2NvbGxhcHNlVHJlZVNlY3Rpb24odHJlZUl0ZW0pO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfdHJhY2tGbihpbmRleDogbnVtYmVyLCBpdGVtOiBUcmVlSXRlbTxUcmVlSXRlbUdlbmVyaWM8VD4+KTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIGl0ZW0uaWQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIFNlbGVjdCBsaXN0IGludGVyZmFjZSBtZXRob2QgaW1wbGVtZW50YXRpb24uXG4gICAgICogU2V0cyB2YWx1ZSBmb3IgY29udHJvbCB2YWx1ZSBhY2Nlc3NvciBhbmQgZW1pdHMgaXQuXG4gICAgICogQHBhcmFtIHZhbHVlIHZhbHVlIG9mIHRoZSBzZWxlY3Rpb24uXG4gICAgICovXG4gICAgb25DaGFuZ2UodmFsdWU6IFNlbGVjdGFibGVMaXN0VmFsdWVUeXBlPGFueT4pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fY3ZhRGlyZWN0aXZlLnNldFZhbHVlKHZhbHVlLCB0cnVlKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2V4cGFuZFRyZWVTZWN0aW9uKHRyZWVJdGVtOiBCYXNlVHJlZUl0ZW0pOiB2b2lkIHtcbiAgICAgICAgaWYgKHRyZWVJdGVtLmV4cGFuZGVkKSB7XG4gICAgICAgICAgICAvLyBTaGlmdCBmb2N1cyBvbiB0aGUgZmlyc3QgY2hpbGQgaXRlbVxuICAgICAgICAgICAgY29uc3QgaXRlbUluZGV4ID0gdGhpcy5fc29ydGVkVHJlZUl0ZW1zLmZpbmRJbmRleCgoaXRlbSkgPT4gaXRlbS5pZCA9PT0gdHJlZUl0ZW0uaWQpO1xuICAgICAgICAgICAgY29uc3QgbmV4dEl0ZW0gPSB0aGlzLl9zb3J0ZWRUcmVlSXRlbXNbaXRlbUluZGV4ICsgMV07XG4gICAgICAgICAgICBpZiAobmV4dEl0ZW0/LnBhcmVudElkID09PSB0cmVlSXRlbS5pZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2ZvY3VzS2V5TWFuYWdlci5zZXRBY3RpdmVJdGVtKGl0ZW1JbmRleCArIDEpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0cmVlSXRlbS5leHBhbmRlZCA9IHRydWU7XG4gICAgICAgIHRoaXMuX2Nkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9jb2xsYXBzZVRyZWVTZWN0aW9uKHRyZWVJdGVtOiBCYXNlVHJlZUl0ZW0pOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0cmVlSXRlbS5leHBhbmRlZCAmJiB0cmVlSXRlbS5wYXJlbnRJZCkge1xuICAgICAgICAgICAgY29uc3QgcGFyZW50SXRlbUluZGV4ID0gdGhpcy5fc29ydGVkVHJlZUl0ZW1zLmZpbmRJbmRleCgoaXRlbSkgPT4gaXRlbS5pZCA9PT0gdHJlZUl0ZW0ucGFyZW50SWQpO1xuXG4gICAgICAgICAgICBpZiAocGFyZW50SXRlbUluZGV4ID4gLTEpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9mb2N1c0tleU1hbmFnZXIuc2V0QWN0aXZlSXRlbShwYXJlbnRJdGVtSW5kZXgpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0cmVlSXRlbS5leHBhbmRlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfb3BlbkRhdGFTdHJlYW0oKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2RzU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICAgICAgICB0aGlzLl9kc1N1YnNjcmlwdGlvbiA9IG5ldyBTdWJzY3JpcHRpb24oKTtcbiAgICAgICAgdGhpcy5fZHNTdWJzY3JpcHRpb24uYWRkKFxuICAgICAgICAgICAgdGhpcy5fZGF0YVNvdXJjZURpcmVjdGl2ZS5kYXRhU291cmNlUHJvdmlkZXI/LmRhdGFSZXF1ZXN0ZWQuc3Vic2NyaWJlKHRoaXMuZGF0YVJlcXVlc3RlZClcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5fZHNTdWJzY3JpcHRpb24uYWRkKFxuICAgICAgICAgICAgdGhpcy5fZGF0YVNvdXJjZURpcmVjdGl2ZS5kYXRhU291cmNlUHJvdmlkZXI/LmRhdGFSZWNlaXZlZC5zdWJzY3JpYmUodGhpcy5kYXRhUmVjZWl2ZWQpXG4gICAgICAgICk7XG5cbiAgICAgICAgdGhpcy5fZHNTdWJzY3JpcHRpb24uYWRkKFxuICAgICAgICAgICAgdGhpcy5fZGF0YVNvdXJjZURpcmVjdGl2ZS5kYXRhU291cmNlUHJvdmlkZXI/LmRhdGFSZWNlaXZlZFxuICAgICAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgICAgICBmaWx0ZXIoKHJlY2VpdmVkKSA9PiByZWNlaXZlZCksXG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaE1hcCgoKSA9PiB0aGlzLl9kYXRhU291cmNlRGlyZWN0aXZlLmRhdGFDaGFuZ2VkJClcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZSgoZGF0YSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9pbml0aWFsRGF0YUxvYWRlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2l0ZW1zID0gdGhpcy5fdHJlZVNlcnZpY2Uubm9ybWFsaXplVHJlZUl0ZW1zKGRhdGEpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmJ1aWxkQ29tcG9uZW50Q3NzQ2xhc3MoKTtcblxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcblxuICAgICAgICB0aGlzLl9kYXRhU291cmNlRGlyZWN0aXZlLmRhdGFTb3VyY2VQcm92aWRlcj8ubWF0Y2goKTtcbiAgICB9XG59XG4iLCI8bmctdGVtcGxhdGUgI2RhdGFTb3VyY2VSZW5kZXJlcj5cbiAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiIV9pbml0aWFsRGF0YUxvYWRlZCA/IGxvYWRpbmdSZW5kZXJlciA6IGRhdGFMb2FkZWRUcGxcIlxuICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyAkaW1wbGljaXQ6IDEgfVwiXG4gICAgPjwvbmctdGVtcGxhdGU+XG5cbiAgICA8bmctdGVtcGxhdGUgI2xvYWRpbmdSZW5kZXJlciBsZXQtbGV2ZWw+XG4gICAgICAgIDxkaXYgKmZka1JlcGVhdD1cIjVcIiByb2xlPVwidHJlZWl0ZW1cIiBbYXR0ci5hcmlhLWxldmVsXT1cImxldmVsXCIgY2xhc3M9XCJmZC10cmVlX19pdGVtXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmQtdHJlZV9faXRlbS1jb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmQtdHJlZV9fY29udGVudFwiPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZkLXRyZWVfX3RleHRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxmZC1za2VsZXRvbiB0eXBlPVwidGV4dFwiIHdpZHRoPVwiMTAwcHhcIiB0ZXh0TGluZXM9XCIxXCI+PC9mZC1za2VsZXRvbj5cbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvbmctdGVtcGxhdGU+XG5cbiAgICA8bmctdGVtcGxhdGUgI2RhdGFMb2FkZWRUcGw+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJfaXRlbXMubGVuZ3RoID4gMCAmJiB0cmVlSXRlbURlZjsgZWxzZSBub0RhdGFUcGxcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGl0ZW0gb2YgX2l0ZW1zOyB0cmFja0J5OiBfdHJhY2tGblwiPlxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJyZW5kZXJlclwiXG4gICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7ICRpbXBsaWNpdDogaXRlbSB9XCJcbiAgICAgICAgICAgICAgICA+PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L25nLXRlbXBsYXRlPlxuXG4gICAgPG5nLXRlbXBsYXRlICNyZW5kZXJlciBsZXQtaXRlbT5cbiAgICAgICAgPG5nLWNvbnRhaW5lciBmZFRyZWVJdGVtIGZka1NlbGVjdGFibGVJdGVtICN0cmVlSXRlbURpcmVjdGl2ZT1cImZkVHJlZUl0ZW1cIj5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIml0ZW0ucmVuZGVyZXJcIlxuICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7ICRpbXBsaWNpdDogaXRlbSB9XCJcbiAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldEluamVjdG9yXT1cInRyZWVJdGVtRGlyZWN0aXZlLmluamVjdG9yXCJcbiAgICAgICAgICAgID48L25nLXRlbXBsYXRlPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgICAgICB0cmVlSXRlbURpcmVjdGl2ZS50cmVlSXRlbT8uaGFzRHNDaGlsZHJlbiAmJlxuICAgICAgICAgICAgICAgICEhdHJlZUl0ZW1EaXJlY3RpdmUudHJlZUl0ZW0/LmV4cGFuZGVkICYmXG4gICAgICAgICAgICAgICAgIXRyZWVJdGVtRGlyZWN0aXZlLnRyZWVJdGVtPy5jaGlsZHJlbkxvYWRlZFxuICAgICAgICAgICAgXCJcbiAgICAgICAgPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlXG4gICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwibG9hZGluZ1JlbmRlcmVyXCJcbiAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyAkaW1wbGljaXQ6IGl0ZW0ubGV2ZWwgKyAxIH1cIlxuICAgICAgICAgICAgPjwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwidHJlZUl0ZW1EaXJlY3RpdmUudHJlZUl0ZW0/LmNoaWxkcmVuIGFzIGNoaWxkSXRlbXNcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmZC10cmVlXCIgKm5nSWY9XCJjaGlsZEl0ZW1zICYmIGNoaWxkSXRlbXMubGVuZ3RoID4gMCAmJiAhIXRyZWVJdGVtRGlyZWN0aXZlPy50cmVlSXRlbT8uZXhwYW5kZWRcIj5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBjaGlsZCBvZiBjaGlsZEl0ZW1zOyB0cmFja0J5OiBfdHJhY2tGblwiPlxuICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInJlbmRlcmVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7ICRpbXBsaWNpdDogY2hpbGQgfVwiXG4gICAgICAgICAgICAgICAgICAgID48L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvbmctdGVtcGxhdGU+XG5cbiAgICA8bmctdGVtcGxhdGUgI25vRGF0YVRwbD5cbiAgICAgICAgPGRpdiByb2xlPVwidHJlZWl0ZW1cIiBhcmlhLWxldmVsPVwiMVwiIGNsYXNzPVwiZmQtdHJlZV9faXRlbVwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZkLXRyZWVfX2l0ZW0tY29udGFpbmVyXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZkLXRyZWVfX2NvbnRlbnRcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmZC10cmVlX190ZXh0XCI+e3sgJ2NvcmVUcmVlLm5vRGF0YScgfCBmZFRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICA8L25nLXRlbXBsYXRlPlxuPC9uZy10ZW1wbGF0ZT5cbjxuZy10ZW1wbGF0ZSAjcHJvamVjdGVkQ29udGVudFJlbmRlcmVyPlxuICAgIDxuZy1jb250ZW50IHNlbGVjdD1cImZkLXRyZWUtaXRlbVwiPjwvbmctY29udGVudD5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCJ0cmVlSXRlbURlZiA/IGRhdGFTb3VyY2VSZW5kZXJlciA6IHByb2plY3RlZENvbnRlbnRSZW5kZXJlclwiPjwvbmctdGVtcGxhdGU+XG4iXX0=
|