@mediusinc/mng-commons 0.3.0 → 0.3.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/esm2020/lib/components/action/action.component.mjs +29 -7
- package/esm2020/lib/components/action/editor/action-editor.component.mjs +7 -6
- package/esm2020/lib/components/action/models/action-execution.model.mjs +1 -1
- package/esm2020/lib/components/form/autocomplete/autocomplete.component.mjs +186 -32
- package/esm2020/lib/components/form/editor/form-editor.component.mjs +3 -3
- package/esm2020/lib/components/form/formly/fields/formly-field-autocomplete/formly-field-autocomplete.component.mjs +1 -1
- package/esm2020/lib/components/form/formly/fields/formly-field-lookup-dialog/formly-field-lookup-dialog.component.mjs +8 -8
- package/esm2020/lib/components/form/formly/fields/formly-field-table-dialog-form/formly-field-table-dialog-form.component.mjs +4 -6
- package/esm2020/lib/components/tableview/route/tableview-route.component.mjs +9 -6
- package/esm2020/lib/components/tableview/table/column-filter/column-filter.component.mjs +18 -23
- package/esm2020/lib/components/tableview/table/table.component.mjs +3 -3
- package/esm2020/lib/descriptors/action.descriptor.mjs +87 -4
- package/esm2020/lib/descriptors/editor.descriptor.mjs +32 -11
- package/esm2020/lib/descriptors/table.descriptor.mjs +28 -10
- package/esm2020/lib/mng-commons.module.mjs +6 -2
- package/esm2020/lib/models/error.model.mjs +1 -1
- package/esm2020/lib/pipes/index.mjs +2 -1
- package/esm2020/lib/pipes/link-formatter.pipe.mjs +39 -0
- package/esm2020/lib/services/action-executor.service.mjs +36 -41
- package/esm2020/lib/utils/index.mjs +2 -2
- package/esm2020/lib/utils/notification.util.mjs +47 -0
- package/fesm2015/mediusinc-mng-commons.mjs +617 -283
- package/fesm2015/mediusinc-mng-commons.mjs.map +1 -1
- package/fesm2020/mediusinc-mng-commons.mjs +611 -281
- package/fesm2020/mediusinc-mng-commons.mjs.map +1 -1
- package/lib/components/action/action.component.d.ts +12 -1
- package/lib/components/action/models/action-execution.model.d.ts +2 -0
- package/lib/components/form/autocomplete/autocomplete.component.d.ts +20 -5
- package/lib/components/tableview/table/column-filter/column-filter.component.d.ts +1 -0
- package/lib/descriptors/action.descriptor.d.ts +35 -1
- package/lib/descriptors/editor.descriptor.d.ts +12 -5
- package/lib/descriptors/table.descriptor.d.ts +15 -10
- package/lib/mng-commons.module.d.ts +69 -68
- package/lib/models/error.model.d.ts +2 -0
- package/lib/pipes/index.d.ts +1 -0
- package/lib/pipes/link-formatter.pipe.d.ts +11 -0
- package/lib/services/action-executor.service.d.ts +5 -3
- package/lib/utils/index.d.ts +1 -1
- package/lib/utils/{toast.util.d.ts → notification.util.d.ts} +7 -10
- package/package.json +1 -1
- package/scss/mng-overrides/_theme_button.scss +4 -0
- package/esm2020/lib/utils/toast.util.mjs +0 -44
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { HttpErrorResponse } from '@angular/common/http';
|
|
2
2
|
import { Inject, Injectable } from '@angular/core';
|
|
3
|
-
import { Observable, from, of } from 'rxjs';
|
|
3
|
+
import { Observable, from, of, throwError } from 'rxjs';
|
|
4
4
|
import { catchError, first, map } from 'rxjs/operators';
|
|
5
5
|
import { ActionActivationResult, ActionError, ActionExecContext, ActionRunResult, ActionTriggerResult } from '../components/action/models';
|
|
6
6
|
import { ActionActivationTriggerEnum, ActionEditorDescriptor, ActionTypeEnum } from '../descriptors';
|
|
7
|
-
import { I18nUtil,
|
|
7
|
+
import { I18nUtil, NotificationUtil } from '../utils';
|
|
8
8
|
import { ACTION_EDITOR_DIALOG_COMPONENT_SETTING } from './tokens';
|
|
9
9
|
import * as i0 from "@angular/core";
|
|
10
10
|
import * as i1 from "@angular/router";
|
|
@@ -13,8 +13,9 @@ import * as i3 from "primeng/api";
|
|
|
13
13
|
import * as i4 from "@ngx-translate/core";
|
|
14
14
|
import * as i5 from "./navigation.service";
|
|
15
15
|
import * as i6 from "./error-mapper.service";
|
|
16
|
+
import * as i7 from "../pipes";
|
|
16
17
|
export class MngActionExecutorService {
|
|
17
|
-
constructor(injector, router, dialogService, confirmationService, translate, navigationService, errorMapper, defaultEditorDialogComponent) {
|
|
18
|
+
constructor(injector, router, dialogService, confirmationService, translate, navigationService, errorMapper, linkFormatter, defaultEditorDialogComponent) {
|
|
18
19
|
this.injector = injector;
|
|
19
20
|
this.router = router;
|
|
20
21
|
this.dialogService = dialogService;
|
|
@@ -22,10 +23,12 @@ export class MngActionExecutorService {
|
|
|
22
23
|
this.translate = translate;
|
|
23
24
|
this.navigationService = navigationService;
|
|
24
25
|
this.errorMapper = errorMapper;
|
|
26
|
+
this.linkFormatter = linkFormatter;
|
|
25
27
|
this.defaultEditorDialogComponent = defaultEditorDialogComponent;
|
|
26
28
|
}
|
|
27
29
|
prepareActionExecContext(action, itemId, item, dataProvider, viewContainer, sourceComponent, actionData) {
|
|
28
|
-
|
|
30
|
+
const ctxDataProvider = dataProvider ?? action.dataProvider ?? viewContainer?.getDataProvider();
|
|
31
|
+
return new ActionExecContext(ctxDataProvider, this.getDataProviderService(ctxDataProvider) ?? undefined, {
|
|
29
32
|
item,
|
|
30
33
|
itemId,
|
|
31
34
|
actionData
|
|
@@ -68,17 +71,17 @@ export class MngActionExecutorService {
|
|
|
68
71
|
confirmParams.accept = () => {
|
|
69
72
|
action
|
|
70
73
|
.runFunction(context)
|
|
71
|
-
.pipe(first(), map(res => new ActionRunResult(context, res)), map(
|
|
74
|
+
.pipe(first(), map(res => new ActionRunResult(context, res)), map(runResult => {
|
|
72
75
|
if (action.hasRunNotificationSuccess) {
|
|
73
|
-
|
|
76
|
+
runResult.notification = NotificationUtil.actionNotificationSuccess(this.translate, action, 'run', action.runNotificationSuccessTitle, action.runNotificationSuccessMessage, viewContainer, item);
|
|
74
77
|
}
|
|
75
|
-
return
|
|
78
|
+
return runResult;
|
|
76
79
|
}), catchError(err => {
|
|
77
80
|
const actionError = this.toMngActionError(err);
|
|
78
81
|
if (action.hasRunNotificationError) {
|
|
79
|
-
|
|
82
|
+
actionError.notification = NotificationUtil.actionNotificationError(this.translate, action, actionError, 'run', viewContainer, item);
|
|
80
83
|
}
|
|
81
|
-
|
|
84
|
+
return throwError(() => actionError);
|
|
82
85
|
}))
|
|
83
86
|
.subscribe(res => {
|
|
84
87
|
observer.next(res);
|
|
@@ -93,17 +96,17 @@ export class MngActionExecutorService {
|
|
|
93
96
|
return observable;
|
|
94
97
|
}
|
|
95
98
|
else {
|
|
96
|
-
return action.runFunction(context).pipe(map(res => new ActionRunResult(context, res)), map(
|
|
99
|
+
return action.runFunction(context).pipe(map(res => new ActionRunResult(context, res)), map(runResult => {
|
|
97
100
|
if (action.hasRunNotificationSuccess) {
|
|
98
|
-
|
|
101
|
+
runResult.notification = NotificationUtil.actionNotificationSuccess(this.translate, action, 'run', action.runNotificationSuccessTitle, action.runNotificationSuccessMessage, viewContainer, item);
|
|
99
102
|
}
|
|
100
|
-
return
|
|
103
|
+
return runResult;
|
|
101
104
|
}), catchError(err => {
|
|
102
105
|
const actionError = this.toMngActionError(err);
|
|
103
106
|
if (action.hasRunNotificationError) {
|
|
104
|
-
|
|
107
|
+
actionError.notification = NotificationUtil.actionNotificationError(this.translate, action, actionError, 'run', viewContainer, item);
|
|
105
108
|
}
|
|
106
|
-
|
|
109
|
+
return throwError(() => actionError);
|
|
107
110
|
}));
|
|
108
111
|
}
|
|
109
112
|
}
|
|
@@ -123,17 +126,17 @@ export class MngActionExecutorService {
|
|
|
123
126
|
if (typeof action.submitFunction !== 'function') {
|
|
124
127
|
throw new Error(`Submit function for action ${action.actionName} cannot be invoked.`);
|
|
125
128
|
}
|
|
126
|
-
return action.submitFunction(context).pipe(map(res => new ActionRunResult(context, res)), map(
|
|
129
|
+
return action.submitFunction(context).pipe(map(res => new ActionRunResult(context, res)), map(runResult => {
|
|
127
130
|
if (action.hasRunNotificationSuccess) {
|
|
128
|
-
|
|
131
|
+
runResult.notification = NotificationUtil.actionNotificationSuccess(this.translate, action, 'submit', action.runNotificationSuccessTitle, action.runNotificationSuccessMessage, viewContainer, formItem);
|
|
129
132
|
}
|
|
130
|
-
return
|
|
133
|
+
return runResult;
|
|
131
134
|
}), catchError(err => {
|
|
132
135
|
const actionError = this.toMngActionError(err);
|
|
133
136
|
if (action.hasRunNotificationError) {
|
|
134
|
-
|
|
137
|
+
actionError.notification = NotificationUtil.actionNotificationError(this.translate, action, actionError, 'submit', viewContainer, formItem);
|
|
135
138
|
}
|
|
136
|
-
|
|
139
|
+
return throwError(() => actionError);
|
|
137
140
|
}));
|
|
138
141
|
}
|
|
139
142
|
/**
|
|
@@ -170,7 +173,7 @@ export class MngActionExecutorService {
|
|
|
170
173
|
if (!ctxDataProvider) {
|
|
171
174
|
const viewContainerDataProvider = viewContainer?.getDataProvider();
|
|
172
175
|
if (viewContainerDataProvider) {
|
|
173
|
-
ctxDataProvider =
|
|
176
|
+
ctxDataProvider = viewContainerDataProvider;
|
|
174
177
|
}
|
|
175
178
|
}
|
|
176
179
|
const context = new ActionExecContext(ctxDataProvider, this.getDataProviderService(ctxDataProvider) ?? undefined, {
|
|
@@ -206,14 +209,20 @@ export class MngActionExecutorService {
|
|
|
206
209
|
activateAction(action, itemId, item, actionData, viewContainer, sourceComponent) {
|
|
207
210
|
if (action.type === ActionTypeEnum.Editor) {
|
|
208
211
|
let dialogComponent = this.defaultEditorDialogComponent;
|
|
209
|
-
|
|
210
|
-
|
|
212
|
+
let dialogClassName = '';
|
|
213
|
+
if (action instanceof ActionEditorDescriptor) {
|
|
214
|
+
if (action.editorComponent) {
|
|
215
|
+
dialogComponent = action.editorComponent;
|
|
216
|
+
}
|
|
217
|
+
if (action.dialogClassName) {
|
|
218
|
+
dialogClassName = action.dialogClassName;
|
|
219
|
+
}
|
|
211
220
|
}
|
|
212
221
|
const dialogConfig = {
|
|
213
222
|
data: {
|
|
214
223
|
action
|
|
215
224
|
},
|
|
216
|
-
styleClass:
|
|
225
|
+
styleClass: dialogClassName
|
|
217
226
|
};
|
|
218
227
|
if (itemId) {
|
|
219
228
|
dialogConfig.data.itemId = itemId;
|
|
@@ -272,21 +281,7 @@ export class MngActionExecutorService {
|
|
|
272
281
|
if (actionUrl.startsWith('/')) {
|
|
273
282
|
actionUrl = actionUrl.substring(1);
|
|
274
283
|
}
|
|
275
|
-
const
|
|
276
|
-
const actionUrlSegments = actionUrl.split('/').map(s => {
|
|
277
|
-
if (s === ':itemId') {
|
|
278
|
-
return itemId;
|
|
279
|
-
}
|
|
280
|
-
else if (s.startsWith(`:${action.model.typeName}.`)) {
|
|
281
|
-
return itemAny[s.substring(action.model.typeName.length + 2)] ?? '';
|
|
282
|
-
}
|
|
283
|
-
else if (s.startsWith(':')) {
|
|
284
|
-
return actionData?.[s.substring(1)] ?? '';
|
|
285
|
-
}
|
|
286
|
-
else {
|
|
287
|
-
return s;
|
|
288
|
-
}
|
|
289
|
-
});
|
|
284
|
+
const actionUrlSegments = this.linkFormatter.transform(actionUrl, itemId, item, action.model, actionData);
|
|
290
285
|
return of(new ActionTriggerResult(undefined, from(this.router.navigate([baseUrl, ...actionUrlSegments], { relativeTo: route, queryParams: parsedUrl.queryParams }))));
|
|
291
286
|
}
|
|
292
287
|
else {
|
|
@@ -333,12 +328,12 @@ export class MngActionExecutorService {
|
|
|
333
328
|
return this.errorMapper.toMngError(error, actionError);
|
|
334
329
|
}
|
|
335
330
|
}
|
|
336
|
-
MngActionExecutorService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.3", ngImport: i0, type: MngActionExecutorService, deps: [{ token: i0.Injector }, { token: i1.Router }, { token: i2.DialogService }, { token: i3.ConfirmationService }, { token: i4.TranslateService }, { token: i5.MngNavigationService }, { token: i6.MngErrorMapperService }, { token: ACTION_EDITOR_DIALOG_COMPONENT_SETTING }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
331
|
+
MngActionExecutorService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.3", ngImport: i0, type: MngActionExecutorService, deps: [{ token: i0.Injector }, { token: i1.Router }, { token: i2.DialogService }, { token: i3.ConfirmationService }, { token: i4.TranslateService }, { token: i5.MngNavigationService }, { token: i6.MngErrorMapperService }, { token: i7.MngLinkFormatterPipe }, { token: ACTION_EDITOR_DIALOG_COMPONENT_SETTING }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
337
332
|
MngActionExecutorService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.1.3", ngImport: i0, type: MngActionExecutorService });
|
|
338
333
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.3", ngImport: i0, type: MngActionExecutorService, decorators: [{
|
|
339
334
|
type: Injectable
|
|
340
|
-
}], ctorParameters: function () { return [{ type: i0.Injector }, { type: i1.Router }, { type: i2.DialogService }, { type: i3.ConfirmationService }, { type: i4.TranslateService }, { type: i5.MngNavigationService }, { type: i6.MngErrorMapperService }, { type: i0.Type, decorators: [{
|
|
335
|
+
}], ctorParameters: function () { return [{ type: i0.Injector }, { type: i1.Router }, { type: i2.DialogService }, { type: i3.ConfirmationService }, { type: i4.TranslateService }, { type: i5.MngNavigationService }, { type: i6.MngErrorMapperService }, { type: i7.MngLinkFormatterPipe }, { type: i0.Type, decorators: [{
|
|
341
336
|
type: Inject,
|
|
342
337
|
args: [ACTION_EDITOR_DIALOG_COMPONENT_SETTING]
|
|
343
338
|
}] }]; } });
|
|
344
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aW9uLWV4ZWN1dG9yLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL3NlcnZpY2VzL2FjdGlvbi1leGVjdXRvci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxpQkFBaUIsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBQ3ZELE9BQU8sRUFBQyxNQUFNLEVBQUUsVUFBVSxFQUFpQixNQUFNLGVBQWUsQ0FBQztBQU1qRSxPQUFPLEVBQUMsVUFBVSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFDMUMsT0FBTyxFQUFDLFVBQVUsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFFdEQsT0FBTyxFQUFDLHNCQUFzQixFQUFjLFdBQVcsRUFBRSxpQkFBaUIsRUFBRSxlQUFlLEVBQUUsbUJBQW1CLEVBQTZCLE1BQU0sNkJBQTZCLENBQUM7QUFHakwsT0FBTyxFQUFDLDJCQUEyQixFQUFvQixzQkFBc0IsRUFBRSxjQUFjLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUdySCxPQUFPLEVBQUMsUUFBUSxFQUFFLFNBQVMsRUFBQyxNQUFNLFVBQVUsQ0FBQztBQUc3QyxPQUFPLEVBQUMsc0NBQXNDLEVBQUMsTUFBTSxVQUFVLENBQUM7Ozs7Ozs7O0FBR2hFLE1BQU0sT0FBTyx3QkFBd0I7SUFDakMsWUFDWSxRQUFrQixFQUNsQixNQUFjLEVBQ2QsYUFBNEIsRUFDNUIsbUJBQXdDLEVBQ3hDLFNBQTJCLEVBQzNCLGlCQUF1QyxFQUN2QyxXQUFrQyxFQUNjLDRCQUF1QztRQVB2RixhQUFRLEdBQVIsUUFBUSxDQUFVO1FBQ2xCLFdBQU0sR0FBTixNQUFNLENBQVE7UUFDZCxrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQUM1Qix3QkFBbUIsR0FBbkIsbUJBQW1CLENBQXFCO1FBQ3hDLGNBQVMsR0FBVCxTQUFTLENBQWtCO1FB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LENBQUMsQ0FBQztnQkFDMUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsSUFBSSxXQUFXLEVBQUUsRUFBRSxFQUFDLFVBQVUsRUFBRSxJQUFJLEVBQUMsQ0FBQyxDQUFDO2FBQ3BFO1NBQ0o7SUFDTCxDQUFDO0lBRU8sZ0JBQWdCLENBQUMsS0FBVztRQUNoQyxNQUFNLFdBQVcsR0FBYTtZQUMxQixJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksSUFBSSxjQUFjO1lBQ25DLE9BQU8sRUFBRSxLQUFLLEVBQUUsT0FBTyxJQUFJLGVBQWU7WUFDMUMsS0FBSyxFQUFFLEtBQUs7U0FDZixDQUFDO1FBQ0YsSUFBSSxLQUFLLFlBQVksaUJBQWlCLEVBQUU7WUFDcEMsV0FBVyxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDO1lBQ2xDLFdBQVcsQ0FBQyxpQkFBaUIsR0FBRyxLQUFLLENBQUMsVUFBVSxDQUFDO1lBQ2pELFdBQVcsQ0FBQyxHQUFHLEdBQUcsS0FBSyxDQUFDLEdBQUcsSUFBSSxTQUFTLENBQUM7U0FDNUM7UUFDRCxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLEtBQUssRUFBRSxXQUFXLENBQUMsQ0FBQztJQUMzRCxDQUFDOztxSEFuYlEsd0JBQXdCLHlPQVNyQixzQ0FBc0M7eUhBVHpDLHdCQUF3QjsyRkFBeEIsd0JBQXdCO2tCQURwQyxVQUFVOzswQkFVRixNQUFNOzJCQUFDLHNDQUFzQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7SHR0cEVycm9yUmVzcG9uc2V9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7SW5qZWN0LCBJbmplY3RhYmxlLCBJbmplY3RvciwgVHlwZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0FjdGl2YXRlZFJvdXRlLCBSb3V0ZXIsIFVybFRyZWV9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5cbmltcG9ydCB7VHJhbnNsYXRlU2VydmljZX0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQge0NvbmZpcm1hdGlvbiwgQ29uZmlybWF0aW9uU2VydmljZX0gZnJvbSAncHJpbWVuZy9hcGknO1xuaW1wb3J0IHtEaWFsb2dTZXJ2aWNlLCBEeW5hbWljRGlhbG9nQ29uZmlnfSBmcm9tICdwcmltZW5nL2R5bmFtaWNkaWFsb2cnO1xuaW1wb3J0IHtPYnNlcnZhYmxlLCBmcm9tLCBvZn0gZnJvbSAncnhqcyc7XG5pbXBvcnQge2NhdGNoRXJyb3IsIGZpcnN0LCBtYXB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHtBY3Rpb25BY3RpdmF0aW9uUmVzdWx0LCBBY3Rpb25EYXRhLCBBY3Rpb25FcnJvciwgQWN0aW9uRXhlY0NvbnRleHQsIEFjdGlvblJ1blJlc3VsdCwgQWN0aW9uVHJpZ2dlclJlc3VsdCwgSUFjdGlvbkNvbmZpcm1hdGlvblNlcnZpY2V9IGZyb20gJy4uL2NvbXBvbmVudHMvYWN0aW9uL21vZGVscyc7XG5pbXBvcnQge01uZ1RhYmxlQ2VsbENsaWNrRXZlbnR9IGZyb20gJy4uL2NvbXBvbmVudHMvdGFibGV2aWV3L21vZGVscyc7XG5pbXBvcnQge0lEYXRhUHJvdmlkZXIsIElFZGl0b3JEYXRhUHJvdmlkZXJ9IGZyb20gJy4uL2RhdGEtcHJvdmlkZXJzJztcbmltcG9ydCB7QWN0aW9uQWN0aXZhdGlvblRyaWdnZXJFbnVtLCBBY3Rpb25EZXNjcmlwdG9yLCBBY3Rpb25FZGl0b3JEZXNjcmlwdG9yLCBBY3Rpb25UeXBlRW51bX0gZnJvbSAnLi4vZGVzY3JpcHRvcnMnO1xuaW1wb3J0IHtJVmlld0NvbnRhaW5lciwgTW5nRXJyb3J9IGZyb20gJy4uL21vZGVscyc7XG5pbXBvcnQge0lkVHlwZX0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHtJMThuVXRpbCwgVG9hc3RVdGlsfSBmcm9tICcuLi91dGlscyc7XG5pbXBvcnQge01uZ0Vycm9yTWFwcGVyU2VydmljZX0gZnJvbSAnLi9lcnJvci1tYXBwZXIuc2VydmljZSc7XG5pbXBvcnQge01uZ05hdmlnYXRpb25TZXJ2aWNlfSBmcm9tICcuL25hdmlnYXRpb24uc2VydmljZSc7XG5pbXBvcnQge0FDVElPTl9FRElUT1JfRElBTE9HX0NPTVBPTkVOVF9TRVRUSU5HfSBmcm9tICcuL3Rva2Vucyc7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBNbmdBY3Rpb25FeGVjdXRvclNlcnZpY2Uge1xuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIGluamVjdG9yOiBJbmplY3RvcixcbiAgICAgICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcbiAgICAgICAgcHJpdmF0ZSBkaWFsb2dTZXJ2aWNlOiBEaWFsb2dTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIGNvbmZpcm1hdGlvblNlcnZpY2U6IENvbmZpcm1hdGlvblNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgdHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIG5hdmlnYXRpb25TZXJ2aWNlOiBNbmdOYXZpZ2F0aW9uU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBlcnJvck1hcHBlcjogTW5nRXJyb3JNYXBwZXJTZXJ2aWNlLFxuICAgICAgICBASW5qZWN0KEFDVElPTl9FRElUT1JfRElBTE9HX0NPTVBPTkVOVF9TRVRUSU5HKSBwcml2YXRlIGRlZmF1bHRFZGl0b3JEaWFsb2dDb21wb25lbnQ6IFR5cGU8YW55PlxuICAgICkge31cblxuICAgIHB1YmxpYyBwcmVwYXJlQWN0aW9uRXhlY0NvbnRleHQ8VCwgUz4oXG4gICAgICAgIGFjdGlvbjogQWN0aW9uRGVzY3JpcHRvcjxUPixcbiAgICAgICAgaXRlbUlkPzogSWRUeXBlLFxuICAgICAgICBpdGVtPzogVCxcbiAgICAgICAgZGF0YVByb3ZpZGVyPzogSURhdGFQcm92aWRlcjxULCBTPixcbiAgICAgICAgdmlld0NvbnRhaW5lcj86IElWaWV3Q29udGFpbmVyPFQsIFM+LFxuICAgICAgICBzb3VyY2VDb21wb25lbnQ/OiBhbnksXG4gICAgICAgIGFjdGlvbkRhdGE/OiBBY3Rpb25EYXRhXG4gICAgKTogQWN0aW9uRXhlY0NvbnRleHQ8VCwgUywgSURhdGFQcm92aWRlcjxULCBTPj4ge1xuICAgICAgICByZXR1cm4gbmV3IEFjdGlvbkV4ZWNDb250ZXh0PFQsIFMsIElEYXRhUHJvdmlkZXI8VCwgUz4+KFxuICAgICAgICAgICAgZGF0YVByb3ZpZGVyID8/IGFjdGlvbi5kYXRhUHJvdmlkZXIgPz8gdmlld0NvbnRhaW5lcj8uZ2V0RGF0YVByb3ZpZGVyKCksXG4gICAgICAgICAgICB0aGlzLmdldERhdGFQcm92aWRlclNlcnZpY2UoZGF0YVByb3ZpZGVyKSA/PyB1bmRlZmluZWQsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgaXRlbSxcbiAgICAgICAgICAgICAgICBpdGVtSWQsXG4gICAgICAgICAgICAgICAgYWN0aW9uRGF0YVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNvdXJjZUNvbXBvbmVudCxcbiAgICAgICAgICAgIHZpZXdDb250YWluZXJcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcnVuQWN0aW9uPFQsIFM+KFxuICAgICAgICBhY3Rpb246IEFjdGlvbkRlc2NyaXB0b3I8VD4sXG4gICAgICAgIGl0ZW1JZD86IElkVHlwZSxcbiAgICAgICAgaXRlbT86IFQsXG4gICAgICAgIGRhdGFQcm92aWRlcj86IElEYXRhUHJvdmlkZXI8VCwgUz4sXG4gICAgICAgIHNvdXJjZUNvbXBvbmVudD86IGFueSxcbiAgICAgICAgdmlld0NvbnRhaW5lcj86IElWaWV3Q29udGFpbmVyPFQsIFM+LFxuICAgICAgICBhY3Rpb25EYXRhPzogQWN0aW9uRGF0YVxuICAgICk6IE9ic2VydmFibGU8QWN0aW9uUnVuUmVzdWx0PFQsIFMsIElEYXRhUHJvdmlkZXI8VCwgUz4+PiB7XG4gICAgICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLnByZXBhcmVBY3Rpb25FeGVjQ29udGV4dChhY3Rpb24sIGl0ZW1JZCwgaXRlbSwgZGF0YVByb3ZpZGVyLCB2aWV3Q29udGFpbmVyLCBzb3VyY2VDb21wb25lbnQsIGFjdGlvbkRhdGEpO1xuICAgICAgICBpZiAoYWN0aW9uLmhhc1J1bkNvbmZpcm1hdGlvbikge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBzb3VyY2VDb21wb25lbnQ/LmdldENvbmZpcm1hdGlvblNlcnZpY2UgIT09ICdmdW5jdGlvbicgfHwgdHlwZW9mIHNvdXJjZUNvbXBvbmVudD8uZ2V0Q29uZmlybWF0aW9uU2VydmljZUluc3RhbmNlS2V5ICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoYFNvdXJjZSBjb21wb25lbnQgJHtzb3VyY2VDb21wb25lbnR9IHNob3VsZCBiZSBpbXBsZW1lbnRpbmcgSUNvbmZpcm1hdGlvblNlcnZpY2UgaW50ZXJmYWNlIHRvIGJlIGFibGUgdG8gcHJvdmlkZSBjb25maXJtYXRpb24gZnVuY3Rpb25hbGl0eS5gKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3Qgc3JjQ29uZmlybUNvbXBvbmVudCA9IHNvdXJjZUNvbXBvbmVudCBhcyBJQWN0aW9uQ29uZmlybWF0aW9uU2VydmljZTtcbiAgICAgICAgICAgIGNvbnN0IGNvbmZpcm1QYXJhbXM6IENvbmZpcm1hdGlvbiA9IHtcbiAgICAgICAgICAgICAgICBrZXk6IHNyY0NvbmZpcm1Db21wb25lbnQuZ2V0Q29uZmlybWF0aW9uU2VydmljZUluc3RhbmNlS2V5KGFjdGlvbiksXG4gICAgICAgICAgICAgICAgYWNjZXB0VmlzaWJsZTogZmFsc2UsXG4gICAgICAgICAgICAgICAgcmVqZWN0VmlzaWJsZTogZmFsc2VcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGlmIChhY3Rpb24ucnVuQ29uZmlybWF0aW9uVGl0bGUgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBjb25maXJtUGFyYW1zLmhlYWRlciA9XG4gICAgICAgICAgICAgICAgICAgIEkxOG5VdGlsLmluc3RhbnRBY3Rpb25UcmFuc2xhdGlvbih0aGlzLnRyYW5zbGF0ZSwgYWN0aW9uLCAnY29uZmlybS50aXRsZScsIGFjdGlvbi5ydW5Db25maXJtYXRpb25UaXRsZSwgaXRlbSwgJ2dlbmVyYWwuY29uZmlybWF0aW9uJykgPz8gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGFjdGlvbi5ydW5Db25maXJtYXRpb25NZXNzYWdlICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgY29uZmlybVBhcmFtcy5tZXNzYWdlID1cbiAgICAgICAgICAgICAgICAgICAgSTE4blV0aWwuaW5zdGFudEFjdGlvblRyYW5zbGF0aW9uKHRoaXMudHJhbnNsYXRlLCBhY3Rpb24sICdjb25maXJtLm1lc3NhZ2UnLCBhY3Rpb24ucnVuQ29uZmlybWF0aW9uTWVzc2FnZSwgaXRlbSwgJ2dlbmVyYWwuY29uZmlybWF0aW9uJykgPz8gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGFjdGlvbi5ydW5Db25maXJtYXRpb25JY29uICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgY29uZmlybVBhcmFtcy5pY29uID0gYWN0aW9uLnJ1bkNvbmZpcm1hdGlvbkljb24gPT09IHVuZGVmaW5lZCA/ICdwaSBwaS1leGNsYW1hdGlvbi10cmlhbmdsZScgOiBhY3Rpb24ucnVuQ29uZmlybWF0aW9uSWNvbjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChhY3Rpb24ucnVuQ29uZmlybWF0aW9uQWNjZXB0VGl0bGUgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBjb25maXJtUGFyYW1zLmFjY2VwdExhYmVsID1cbiAgICAgICAgICAgICAgICAgICAgSTE4blV0aWwuaW5zdGFudEFjdGlvblRyYW5zbGF0aW9uKHRoaXMudHJhbnNsYXRlLCBhY3Rpb24sICdjb25maXJtLmFjY2VwdCcsIGFjdGlvbi5ydW5Db25maXJtYXRpb25BY2NlcHRUaXRsZSwgaXRlbSwgJ2dlbmVyYWwueWVzJykgPz8gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIGNvbmZpcm1QYXJhbXMuYWNjZXB0VmlzaWJsZSA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoYWN0aW9uLnJ1bkNvbmZpcm1hdGlvblJlamVjdFRpdGxlICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgY29uZmlybVBhcmFtcy5yZWplY3RMYWJlbCA9XG4gICAgICAgICAgICAgICAgICAgIEkxOG5VdGlsLmluc3RhbnRBY3Rpb25UcmFuc2xhdGlvbih0aGlzLnRyYW5zbGF0ZSwgYWN0aW9uLCAnY29uZmlybS5yZWplY3QnLCBhY3Rpb24ucnVuQ29uZmlybWF0aW9uUmVqZWN0VGl0bGUsIGl0ZW0sICdnZW5lcmFsLm5vJykgPz8gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIGNvbmZpcm1QYXJhbXMucmVqZWN0VmlzaWJsZSA9IHRydWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IG9ic2VydmFibGUgPSBuZXcgT2JzZXJ2YWJsZTxBY3Rpb25SdW5SZXN1bHQ8VCwgUywgSURhdGFQcm92aWRlcjxULCBTPj4+KG9ic2VydmVyID0+IHtcbiAgICAgICAgICAgICAgICBjb25maXJtUGFyYW1zLmFjY2VwdCA9ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgYWN0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICAucnVuRnVuY3Rpb24oY29udGV4dClcbiAgICAgICAgICAgICAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpcnN0KCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwKHJlcyA9PiBuZXcgQWN0aW9uUnVuUmVzdWx0KGNvbnRleHQsIHJlcykpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcCh2YWx1ZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhY3Rpb24uaGFzUnVuTm90aWZpY2F0aW9uU3VjY2Vzcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVG9hc3RVdGlsLmFjdGlvbk5vdGlmaWNhdGlvblN1Y2Nlc3MoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50cmFuc2xhdGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdydW4nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbi5ydW5Ob3RpZmljYXRpb25TdWNjZXNzVGl0bGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uLnJ1bk5vdGlmaWNhdGlvblN1Y2Nlc3NNZXNzYWdlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpZXdDb250YWluZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2F0Y2hFcnJvcihlcnIgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBhY3Rpb25FcnJvciA9IHRoaXMudG9NbmdBY3Rpb25FcnJvcihlcnIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYWN0aW9uLmhhc1J1bk5vdGlmaWNhdGlvbkVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUb2FzdFV0aWwuYWN0aW9uTm90aWZpY2F0aW9uRXJyb3IodGhpcy50cmFuc2xhdGUsIGFjdGlvbiwgYWN0aW9uRXJyb3IsICdydW4nLCB2aWV3Q29udGFpbmVyLCBpdGVtKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBhY3Rpb25FcnJvcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgLnN1YnNjcmliZShyZXMgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9ic2VydmVyLm5leHQocmVzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYnNlcnZlci5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIGNvbmZpcm1QYXJhbXMucmVqZWN0ID0gKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBvYnNlcnZlci5lcnJvcihuZXcgQWN0aW9uUnVuUmVzdWx0KGNvbnRleHQsIHVuZGVmaW5lZCwgbmV3IEFjdGlvbkVycm9yKG51bGwsIHRydWUpKSk7XG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIHNyY0NvbmZpcm1Db21wb25lbnQuZ2V0Q29uZmlybWF0aW9uU2VydmljZSgpLmNvbmZpcm0oY29uZmlybVBhcmFtcyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBvYnNlcnZhYmxlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGFjdGlvbi5ydW5GdW5jdGlvbihjb250ZXh0KS5waXBlKFxuICAgICAgICAgICAgICAgIG1hcChyZXMgPT4gbmV3IEFjdGlvblJ1blJlc3VsdChjb250ZXh0LCByZXMpKSxcbiAgICAgICAgICAgICAgICBtYXAodmFsdWUgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoYWN0aW9uLmhhc1J1bk5vdGlmaWNhdGlvblN1Y2Nlc3MpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIFRvYXN0VXRpbC5hY3Rpb25Ob3RpZmljYXRpb25TdWNjZXNzKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudHJhbnNsYXRlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnVuJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb24ucnVuTm90aWZpY2F0aW9uU3VjY2Vzc1RpdGxlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbi5ydW5Ob3RpZmljYXRpb25TdWNjZXNzTWVzc2FnZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWV3Q29udGFpbmVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1cbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIGNhdGNoRXJyb3IoZXJyID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYWN0aW9uRXJyb3IgPSB0aGlzLnRvTW5nQWN0aW9uRXJyb3IoZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGFjdGlvbi5oYXNSdW5Ob3RpZmljYXRpb25FcnJvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgVG9hc3RVdGlsLmFjdGlvbk5vdGlmaWNhdGlvbkVycm9yKHRoaXMudHJhbnNsYXRlLCBhY3Rpb24sIGFjdGlvbkVycm9yLCAncnVuJywgdmlld0NvbnRhaW5lciwgaXRlbSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgYWN0aW9uRXJyb3I7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSdW5zIGVkaXRvciBhY3Rpb24gc2F2ZSBmdW5jdGlvbiB1c3VhbGx5IHRyaWdnZXJlZCBvbiBmb3JtIHN1Ym1pdC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBhY3Rpb24gQWN0aW9uIGRlc2NyaXB0b3IuXG4gICAgICogQHBhcmFtIGl0ZW1JZCBJdGVtIGlkIChpZiBleGlzdHMpLlxuICAgICAqIEBwYXJhbSBmb3JtSXRlbSBJdGVtIGluc3RhbmNlIChmcm9tIGZvcm0pLlxuICAgICAqIEBwYXJhbSBkYXRhUHJvdmlkZXIgRGF0YSBwcm92aWRlclxuICAgICAqIEBwYXJhbSBzb3VyY2VDb21wb25lbnQgU291cmNlIGNvbXBvbmVudCBmcm9tIHdoZXJlIHRoZSBmZXRjaCBmdW5jdGlvbiB3YXMgY2FsbGVkLlxuICAgICAqIEBwYXJhbSB2aWV3Q29udGFpbmVyIFZpZXcgY29udGFpbmVyL3NlcnZpY2UuXG4gICAgICogQHBhcmFtIGFjdGlvbkRhdGEgQWRkaXRpb25hbCBhY3Rpb24gZGF0YS5cbiAgICAgKi9cbiAgICBwdWJsaWMgcnVuRWRpdG9yU2F2ZTxULCBTPihcbiAgICAgICAgYWN0aW9uOiBBY3Rpb25FZGl0b3JEZXNjcmlwdG9yPFQ+LFxuICAgICAgICBpdGVtSWQ/OiBJZFR5cGUsXG4gICAgICAgIGZvcm1JdGVtPzogVCxcbiAgICAgICAgZGF0YVByb3ZpZGVyPzogSUVkaXRvckRhdGFQcm92aWRlcjxULCBTPixcbiAgICAgICAgc291cmNlQ29tcG9uZW50PzogYW55LFxuICAgICAgICB2aWV3Q29udGFpbmVyPzogSVZpZXdDb250YWluZXI8VCwgUz4sXG4gICAgICAgIGFjdGlvbkRhdGE/OiBBY3Rpb25EYXRhXG4gICAgKTogT2JzZXJ2YWJsZTxBY3Rpb25SdW5SZXN1bHQ8VCwgUywgSUVkaXRvckRhdGFQcm92aWRlcjxULCBTPj4+IHtcbiAgICAgICAgY29uc3QgY29udGV4dCA9IHRoaXMucHJlcGFyZUV4ZWNDb250ZXh0Rm9yRWRpdG9yKGFjdGlvbiwgZm9ybUl0ZW0sIGl0ZW1JZCwgZGF0YVByb3ZpZGVyLCBzb3VyY2VDb21wb25lbnQsIHZpZXdDb250YWluZXIsIGFjdGlvbkRhdGEpO1xuICAgICAgICBpZiAodHlwZW9mIGFjdGlvbi5zdWJtaXRGdW5jdGlvbiAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBTdWJtaXQgZnVuY3Rpb24gZm9yIGFjdGlvbiAke2FjdGlvbi5hY3Rpb25OYW1lfSBjYW5ub3QgYmUgaW52b2tlZC5gKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYWN0aW9uLnN1Ym1pdEZ1bmN0aW9uKGNvbnRleHQpLnBpcGUoXG4gICAgICAgICAgICBtYXAocmVzID0+IG5ldyBBY3Rpb25SdW5SZXN1bHQoY29udGV4dCwgcmVzKSksXG4gICAgICAgICAgICBtYXAodmFsdWUgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChhY3Rpb24uaGFzUnVuTm90aWZpY2F0aW9uU3VjY2Vzcykge1xuICAgICAgICAgICAgICAgICAgICBUb2FzdFV0aWwuYWN0aW9uTm90aWZpY2F0aW9uU3VjY2VzcyhcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudHJhbnNsYXRlLFxuICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ3N1Ym1pdCcsXG4gICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb24ucnVuTm90aWZpY2F0aW9uU3VjY2Vzc1RpdGxlLFxuICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uLnJ1bk5vdGlmaWNhdGlvblN1Y2Nlc3NNZXNzYWdlLFxuICAgICAgICAgICAgICAgICAgICAgICAgdmlld0NvbnRhaW5lcixcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1JdGVtXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgY2F0Y2hFcnJvcihlcnIgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGFjdGlvbkVycm9yID0gdGhpcy50b01uZ0FjdGlvbkVycm9yKGVycik7XG4gICAgICAgICAgICAgICAgaWYgKGFjdGlvbi5oYXNSdW5Ob3RpZmljYXRpb25FcnJvcikge1xuICAgICAgICAgICAgICAgICAgICBUb2FzdFV0aWwuYWN0aW9uTm90aWZpY2F0aW9uRXJyb3IodGhpcy50cmFuc2xhdGUsIGFjdGlvbiwgYWN0aW9uRXJyb3IsICdzdWJtaXQnLCB2aWV3Q29udGFpbmVyLCBmb3JtSXRlbSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRocm93IGFjdGlvbkVycm9yO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSdW5zIGVkaXRvciBhY3Rpb24gZmV0Y2ggZnVuY3Rpb24uXG4gICAgICpcbiAgICAgKiBAcGFyYW0gYWN0aW9uIEFjdGlvbiBkZXNjcmlwdG9yLlxuICAgICAqIEBwYXJhbSBpdGVtIEl0ZW0gaW5zdGFuY2UgKGlmIGV4aXN0cykuXG4gICAgICogQHBhcmFtIGl0ZW1JZCBJdGVtIGlkLlxuICAgICAqIEBwYXJhbSBkYXRhUHJvdmlkZXIgRGF0YSBwcm92aWRlclxuICAgICAqIEBwYXJhbSBzb3VyY2VDb21wb25lbnQgU291cmNlIGNvbXBvbmVudCBmcm9tIHdoZXJlIHRoZSBmZXRjaCBmdW5jdGlvbiB3YXMgY2FsbGVkLlxuICAgICAqIEBwYXJhbSB2aWV3Q29udGFpbmVyIFZpZXcgY29udGFpbmVyL3NlcnZpY2UuIFRhYmxldmlldyBjb21wb25lbnQuXG4gICAgICogQHBhcmFtIGFjdGlvbkRhdGEgQWRkaXRpb25hbCBhY3Rpb24gZGF0YS5cbiAgICAgKi9cbiAgICBwdWJsaWMgcnVuRWRpdG9yRmV0Y2g8VCwgUz4oXG4gICAgICAgIGFjdGlvbjogQWN0aW9uRWRpdG9yRGVzY3JpcHRvcjxUPixcbiAgICAgICAgaXRlbT86IFQsXG4gICAgICAgIGl0ZW1JZD86IElkVHlwZSxcbiAgICAgICAgZGF0YVByb3ZpZGVyPzogSUVkaXRvckRhdGFQcm92aWRlcjxULCBTPixcbiAgICAgICAgc291cmNlQ29tcG9uZW50PzogYW55LFxuICAgICAgICB2aWV3Q29udGFpbmVyPzogSVZpZXdDb250YWluZXI8VCwgUz4sXG4gICAgICAgIGFjdGlvbkRhdGE/OiBBY3Rpb25EYXRhXG4gICAgKTogT2JzZXJ2YWJsZTxBY3Rpb25SdW5SZXN1bHQ8VCwgUywgSUVkaXRvckRhdGFQcm92aWRlcjxULCBTPj4+IHtcbiAgICAgICAgY29uc3QgY29udGV4dCA9IHRoaXMucHJlcGFyZUV4ZWNDb250ZXh0Rm9yRWRpdG9yKGFjdGlvbiwgaXRlbSwgaXRlbUlkLCBkYXRhUHJvdmlkZXIsIHNvdXJjZUNvbXBvbmVudCwgdmlld0NvbnRhaW5lciwgYWN0aW9uRGF0YSk7XG4gICAgICAgIHJldHVybiBhY3Rpb24uZmV0Y2hGdW5jdGlvbihjb250ZXh0KS5waXBlKG1hcChyZXMgPT4gbmV3IEFjdGlvblJ1blJlc3VsdChjb250ZXh0LCByZXMpKSk7XG4gICAgICAgIC8vIFRPRE86IGVycm9yIGhhbmRsaW5nXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUHJlcGFyZXMgYWN0aW9uIGV4ZWMgY29udGV4dCBmb3IgYWN0aW9uIG9mIHR5cGUgZWRpdG9yLlxuICAgICAqXG4gICAgICogQHBhcmFtIGl0ZW0gSXRlbSBpbnN0YW5jZSAoaWYgZXhpc3RzKS5cbiAgICAgKiBAcGFyYW0gaXRlbUlkIEl0ZW0gaWQgKGlmIGV4aXN0cykuXG4gICAgICogQHBhcmFtIGRhdGFQcm92aWRlciBEYXRhIHByb3ZpZGVyLlxuICAgICAqIEBwYXJhbSBzb3VyY2VDb21wb25lbnQgU291cmNlIGNvbXBvbmVudCBmcm9tIHdoZXJlIHRoZSBjb250ZXh0IHByZXBhcmF0aW9uIHdhcyBjYWxsZWQuXG4gICAgICogQHBhcmFtIHZpZXdDb250YWluZXIgVmlldyBjb250YWluZXIvc2VydmljZS5cbiAgICAgKiBAcGFyYW0gYWN0aW9uRGF0YSBBZGRpdGlvbmFsIGFjdGlvbiBkYXRhLlxuICAgICAqL1xuICAgIHByaXZhdGUgcHJlcGFyZUV4ZWNDb250ZXh0Rm9yRWRpdG9yPFQsIFM+KFxuICAgICAgICBhY3Rpb246IEFjdGlvbkVkaXRvckRlc2NyaXB0b3I8VD4sXG4gICAgICAgIGl0ZW0/OiBULFxuICAgICAgICBpdGVtSWQ/OiBJZFR5cGUsXG4gICAgICAgIGRhdGFQcm92aWRlcj86IElFZGl0b3JEYXRhUHJvdmlkZXI8VCwgUz4sXG4gICAgICAgIHNvdXJjZUNvbXBvbmVudD86IGFueSxcbiAgICAgICAgdmlld0NvbnRhaW5lcj86IElWaWV3Q29udGFpbmVyPFQsIFM+LFxuICAgICAgICBhY3Rpb25EYXRhPzogQWN0aW9uRGF0YVxuICAgICk6IEFjdGlvbkV4ZWNDb250ZXh0PFQsIFMsIElFZGl0b3JEYXRhUHJvdmlkZXI8VCwgUz4+IHtcbiAgICAgICAgbGV0IGN0eERhdGFQcm92aWRlciA9IGRhdGFQcm92aWRlcjtcbiAgICAgICAgaWYgKCFjdHhEYXRhUHJvdmlkZXIgJiYgYWN0aW9uLmRhdGFQcm92aWRlcikge1xuICAgICAgICAgICAgY3R4RGF0YVByb3ZpZGVyID0gYWN0aW9uLmRhdGFQcm92aWRlcjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWN0eERhdGFQcm92aWRlcikge1xuICAgICAgICAgICAgY29uc3Qgdmlld0NvbnRhaW5lckRhdGFQcm92aWRlciA9IHZpZXdDb250YWluZXI/LmdldERhdGFQcm92aWRlcigpO1xuICAgICAgICAgICAgaWYgKHZpZXdDb250YWluZXJEYXRhUHJvdmlkZXIpIHtcbiAgICAgICAgICAgICAgICBjdHhEYXRhUHJvdmlkZXIgPSBhY3Rpb24uZGF0YVByb3ZpZGVyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNvbnRleHQgPSBuZXcgQWN0aW9uRXhlY0NvbnRleHQ8VCwgUywgSUVkaXRvckRhdGFQcm92aWRlcjxULCBTPj4oXG4gICAgICAgICAgICBjdHhEYXRhUHJvdmlkZXIsXG4gICAgICAgICAgICB0aGlzLmdldERhdGFQcm92aWRlclNlcnZpY2UoY3R4RGF0YVByb3ZpZGVyKSA/PyB1bmRlZmluZWQsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgaXRlbSxcbiAgICAgICAgICAgICAgICBpdGVtSWQsXG4gICAgICAgICAgICAgICAgYWN0aW9uRGF0YVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNvdXJjZUNvbXBvbmVudCxcbiAgICAgICAgICAgIHZpZXdDb250YWluZXJcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIGNvbnRleHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyBzZXJ2aWNlIGluc3RhbmNlIG9mIGRhdGEgcHJvdmlkZXIuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZGF0YVByb3ZpZGVyIERhdGEgcHJvdmlkZXIgaW5zdGFuY2UuXG4gICAgICovXG4gICAgcHJpdmF0ZSBnZXREYXRhUHJvdmlkZXJTZXJ2aWNlPFQsIFM+KGRhdGFQcm92aWRlcj86IElEYXRhUHJvdmlkZXI8VCwgUz4pOiBTIHwgbnVsbCB7XG4gICAgICAgIGlmIChkYXRhUHJvdmlkZXI/LnNlcnZpY2VUeXBlKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5pbmplY3Rvci5nZXQ8Uz4oZGF0YVByb3ZpZGVyLnNlcnZpY2VUeXBlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQWN0aXZhdGVzIGFjdGlvbi5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBhY3Rpb24gQWN0aW9uIGRlc2NyaXB0b3IuXG4gICAgICogQHBhcmFtIGl0ZW0gSXRlbSBpbnN0YW5jZSAoaWYgZXhpc3RzKS5cbiAgICAgKiBAcGFyYW0gaXRlbUlkIEl0ZW0gaWQgKGlmIGV4aXN0cykuXG4gICAgICogQHBhcmFtIGFjdGlvbkRhdGEgT3B0aW9uYWwgYWRkaXRpb25hbCBhY3Rpb24gZGF0YS5cbiAgICAgKiBAcGFyYW0gdmlld0NvbnRhaW5lciBWaWV3IGNvbnRhaW5lciBjb21wb25lbnQvc2VydmljZS5cbiAgICAgKiBAcGFyYW0gc291cmNlQ29tcG9uZW50IFNvdXJjZSBhY3RpdmF0aW9uIGNvbXBvbmVudC5cbiAgICAgKi9cbiAgICBwdWJsaWMgYWN0aXZhdGVBY3Rpb248VCwgUz4oXG4gICAgICAgIGFjdGlvbjogQWN0aW9uRGVzY3JpcHRvcjxUPixcbiAgICAgICAgaXRlbUlkPzogSWRUeXBlLFxuICAgICAgICBpdGVtPzogVCxcbiAgICAgICAgYWN0aW9uRGF0YT86IEFjdGlvbkRhdGEsXG4gICAgICAgIHZpZXdDb250YWluZXI/OiBJVmlld0NvbnRhaW5lcjxULCBTPixcbiAgICAgICAgc291cmNlQ29tcG9uZW50PzogYW55XG4gICAgKTogT2JzZXJ2YWJsZTxBY3Rpb25BY3RpdmF0aW9uUmVzdWx0PFQsIFMsIElEYXRhUHJvdmlkZXI8VCwgUz4+PiB7XG4gICAgICAgIGlmIChhY3Rpb24udHlwZSA9PT0gQWN0aW9uVHlwZUVudW0uRWRpdG9yKSB7XG4gICAgICAgICAgICBsZXQgZGlhbG9nQ29tcG9uZW50ID0gdGhpcy5kZWZhdWx0RWRpdG9yRGlhbG9nQ29tcG9uZW50O1xuICAgICAgICAgICAgaWYgKGFjdGlvbiBpbnN0YW5jZW9mIEFjdGlvbkVkaXRvckRlc2NyaXB0b3IgJiYgYWN0aW9uLmVkaXRvckNvbXBvbmVudCkge1xuICAgICAgICAgICAgICAgIGRpYWxvZ0NvbXBvbmVudCA9IGFjdGlvbi5lZGl0b3JDb21wb25lbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBkaWFsb2dDb25maWc6IER5bmFtaWNEaWFsb2dDb25maWcgPSB7XG4gICAgICAgICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgICAgICAgICBhY3Rpb25cbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHN0eWxlQ2xhc3M6IGFjdGlvbi5jbGFzc05hbWVcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBpZiAoaXRlbUlkKSB7XG4gICAgICAgICAgICAgICAgZGlhbG9nQ29uZmlnLmRhdGEuaXRlbUlkID0gaXRlbUlkO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGl0ZW0pIHtcbiAgICAgICAgICAgICAgICBkaWFsb2dDb25maWcuZGF0YS5pdGVtID0gaXRlbTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChhY3Rpb25EYXRhKSB7XG4gICAgICAgICAgICAgICAgZGlhbG9nQ29uZmlnLmRhdGEuYWN0aW9uRGF0YSA9IGFjdGlvbkRhdGE7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodmlld0NvbnRhaW5lcikge1xuICAgICAgICAgICAgICAgIGRpYWxvZ0NvbmZpZy5kYXRhLnZpZXdDb250YWluZXIgPSB2aWV3Q29udGFpbmVyO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHNvdXJjZUNvbXBvbmVudCkge1xuICAgICAgICAgICAgICAgIGRpYWxvZ0NvbmZpZy5kYXRhLnNvdXJjZUNvbXBvbmVudCA9IHNvdXJjZUNvbXBvbmVudDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nU2VydmljZS5vcGVuKGRpYWxvZ0NvbXBvbmVudCwgZGlhbG9nQ29uZmlnKTtcbiAgICAgICAgICAgIHJldHVybiBvZihuZXcgQWN0aW9uQWN0aXZhdGlvblJlc3VsdDxULCBTLCBJRGF0YVByb3ZpZGVyPFQsIFM+Pih1bmRlZmluZWQsIGRpYWxvZ1JlZikpO1xuICAgICAgICB9IGVsc2UgaWYgKGFjdGlvbi50eXBlID09PSBBY3Rpb25UeXBlRW51bS5FdmVudCkge1xuICAgICAgICAgICAgLy8ganVzdCBlbWl0IGV2ZW50XG4gICAgICAgICAgICByZXR1cm4gb2YobmV3IEFjdGlvbkFjdGl2YXRpb25SZXN1bHQ8VCwgUywgSURhdGFQcm92aWRlcjxULCBTPj4odW5kZWZpbmVkKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBkaXJlY3RseSBleGVjdXRlIGFjdGlvblxuICAgICAgICAgICAgcmV0dXJuIHRoaXMucnVuQWN0aW9uPFQsIFM+KGFjdGlvbiwgaXRlbUlkLCBpdGVtLCB1bmRlZmluZWQsIHNvdXJjZUNvbXBvbmVudCwgdmlld0NvbnRhaW5lciwgYWN0aW9uRGF0YSkucGlwZShcbiAgICAgICAgICAgICAgICBtYXAocmVzID0+IG5ldyBBY3Rpb25BY3RpdmF0aW9uUmVzdWx0PFQsIFMsIElEYXRhUHJvdmlkZXI8VCwgUz4+KHJlcykpXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVHJpZ2dlcnMgYWN0aW9uIGZyb20gdGFibGUgcm93IGNsaWNrIHBvc2l0aW9uLlxuICAgICAqXG4gICAgICogQHBhcmFtIGFjdGlvbiBBY3Rpb24gZGVzY3JpcHRvci5cbiAgICAgKiBAcGFyYW0gZXZlbnQgVGFyZ2V0IHRhYmxlIGNsaWNrIGV2ZW50LlxuICAgICAqIEBwYXJhbSByb3V0ZSBDdXJyZW50bHkgYWN0aXZhdGUgcm91dGUuXG4gICAgICovXG4gICAgcHVibGljIHRyaWdnZXJSb3dDbGlja0FjdGlvbjxUPihhY3Rpb246IEFjdGlvbkRlc2NyaXB0b3I8VD4sIGV2ZW50OiBNbmdUYWJsZUNlbGxDbGlja0V2ZW50PFQ+LCByb3V0ZT86IEFjdGl2YXRlZFJvdXRlKSB7XG4gICAgICAgIGlmICghYWN0aW9uLm1vZGVsLmlkUHJvcGVydHlOYW1lKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFJvdyBjbGljayBhY3Rpb24gJHthY3Rpb24uYWN0aW9uTmFtZX0gY2FuIG5vdCBiZSB0cmlnZ2VyZWQsIGJlY2F1c2UgbW9kZWwgaWQgcHJvcGVydHkgbmFtZSBpcyBub3QgZGVmaW5lZC5gKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByb3dJdGVtID0gZXZlbnQ/LnJvd0l0ZW0gYXMgYW55O1xuICAgICAgICByZXR1cm4gdGhpcy50cmlnZ2VyQWN0aW9uKGFjdGlvbiwgcm93SXRlbVthY3Rpb24ubW9kZWwuaWRQcm9wZXJ0eU5hbWVdLCBldmVudC5yb3dJdGVtLCB1bmRlZmluZWQsIHJvdXRlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUcmlnZ2VycyBhY3Rpb24gd2l0aCBvcHRpb25hbCBkYXRhIChpdGVtLCBpdGVtSWQsIC4uLikgYW5kIGN1cnJlbnRseSBhY3RpdmF0ZWQgcm91dGUuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gYWN0aW9uIEFjdGlvbi5cbiAgICAgKiBAcGFyYW0gYWN0aW9uRGF0YSBPcHRpb25hbCBhY3Rpb24gZGF0YS5cbiAgICAgKiBAcGFyYW0gcm91dGUgT3B0aW9uYWwgYWN0aXZhdGVkIHJvdXRlLlxuICAgICAqL1xuICAgIHB1YmxpYyB0cmlnZ2VyQWN0aW9uPFQsIFM+KFxuICAgICAgICBhY3Rpb246IEFjdGlvbkRlc2NyaXB0b3I8VD4sXG4gICAgICAgIGl0ZW1JZD86IElkVHlwZSxcbiAgICAgICAgaXRlbT86IFQsXG4gICAgICAgIGFjdGlvbkRhdGE/OiBBY3Rpb25EYXRhLFxuICAgICAgICByb3V0ZT86IEFjdGl2YXRlZFJvdXRlLFxuICAgICAgICB2aWV3Q29udGFpbmVyPzogSVZpZXdDb250YWluZXI8VCwgUz4sXG4gICAgICAgIHNvdXJjZUNvbXBvbmVudD86IGFueVxuICAgICk6IE9ic2VydmFibGU8QWN0aW9uVHJpZ2dlclJlc3VsdDxULCBTLCBJRGF0YVByb3ZpZGVyPFQsIFM+Pj4ge1xuICAgICAgICBpZiAoYWN0aW9uLmFjdGl2YXRpb25UcmlnZ2VyID09PSBBY3Rpb25BY3RpdmF0aW9uVHJpZ2dlckVudW0uT25Sb3V0ZSkge1xuICAgICAgICAgICAgY29uc3QgYmFzZVVybCA9IHRoaXMucm91dGVyLnVybC5zcGxpdCgnPycpWzBdO1xuICAgICAgICAgICAgY29uc3QgcGFyc2VkVXJsOiBVcmxUcmVlID0gdGhpcy5yb3V0ZXIucGFyc2VVcmwodGhpcy5yb3V0ZXIudXJsKTtcbiAgICAgICAgICAgIGxldCBhY3Rpb25VcmwgPSBhY3Rpb24ucm91dGVVcmwgPz8gJyc7XG4gICAgICAgICAgICAvLyBUT0RPOiBkb250IHN0cmlwICcvJywgYnV0IHVzZSBpdCBhY2NvcmRpbmdseSB3aXRoIEFuZ3VsYXIncyByb3V0ZXIgcGF0dGVybnMgKC8sIC4vLCAuLi8pXG4gICAgICAgICAgICBpZiAoYWN0aW9uVXJsLnN0YXJ0c1dpdGgoJy8nKSkge1xuICAgICAgICAgICAgICAgIGFjdGlvblVybCA9IGFjdGlvblVybC5zdWJzdHJpbmcoMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBpdGVtQW55ID0gKGl0ZW0gPz8ge30pIGFzIGFueTtcbiAgICAgICAgICAgIGNvbnN0IGFjdGlvblVybFNlZ21lbnRzID0gYWN0aW9uVXJsLnNwbGl0KCcvJykubWFwKHMgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChzID09PSAnOml0ZW1JZCcpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW1JZDtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHMuc3RhcnRzV2l0aChgOiR7YWN0aW9uLm1vZGVsLnR5cGVOYW1lfS5gKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaXRlbUFueVtzLnN1YnN0cmluZyhhY3Rpb24ubW9kZWwudHlwZU5hbWUubGVuZ3RoICsgMildID8/ICcnO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocy5zdGFydHNXaXRoKCc6JykpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGFjdGlvbkRhdGE/LltzLnN1YnN0cmluZygxKV0gPz8gJyc7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHM7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gb2YoXG4gICAgICAgICAgICAgICAgbmV3IEFjdGlvblRyaWdnZXJSZXN1bHQ8VCwgUywgSURhdGFQcm92aWRlcjxULCBTPj4oXG4gICAgICAgICAgICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgZnJvbSh0aGlzLnJvdXRlci5uYXZpZ2F0ZShbYmFzZVVybCwgLi4uYWN0aW9uVXJsU2VnbWVudHNdLCB7cmVsYXRpdmVUbzogcm91dGUsIHF1ZXJ5UGFyYW1zOiBwYXJzZWRVcmwucXVlcnlQYXJhbXN9KSlcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYWN0aXZhdGVBY3Rpb24oYWN0aW9uLCBpdGVtSWQsIGl0ZW0sIGFjdGlvbkRhdGEsIHZpZXdDb250YWluZXIsIHNvdXJjZUNvbXBvbmVudCkucGlwZShtYXAocmVzID0+IG5ldyBBY3Rpb25UcmlnZ2VyUmVzdWx0PFQsIFMsIElEYXRhUHJvdmlkZXI8VCwgUz4+KHJlcykpKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBkZWFjdGl2YXRlQWN0aW9uPFQ+KGFjdGlvbjogQWN0aW9uRGVzY3JpcHRvcjxUPikge1xuICAgICAgICBpZiAodGhpcy5uYXZpZ2F0aW9uU2VydmljZS5nZXRQcmV2aW91c0xvY2F0aW9uKCkpIHtcbiAgICAgICAgICAgIC8vIHRoZXJlIGFyZSBpbnRlcm5hbCBoaXN0b3J5IHJlY29yZHMsIHNvIGJhY2sgY2FuIGJlIG5vcm1hbGx5IGNhbGxlZFxuICAgICAgICAgICAgdGhpcy5uYXZpZ2F0aW9uU2VydmljZS5iYWNrKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyB0aGVyZSBpcyBubyBpbnRlcm5hbCBoaXN0b3J5IHJlY29yZHMsIGZpZ3VyZSBvdXQgdGhlIGJhc2UgdXJsIGJ5IGVsaW1pbmF0aW5nIGFjdGlvbiBzcGVjaWZpYyB1cmxcbiAgICAgICAgICAgIGxldCB1cmwgPSB0aGlzLm5hdmlnYXRpb25TZXJ2aWNlLmdldEN1cnJlbnRMb2NhdGlvbigpO1xuICAgICAgICAgICAgaWYgKCF1cmwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm5hdmlnYXRpb25TZXJ2aWNlLmJhY2soKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKHVybC5zdGFydHNXaXRoKCcvJykpIHtcbiAgICAgICAgICAgICAgICAgICAgdXJsID0gdXJsLnN1YnN0cmluZygxKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgdXJsUGF0aFNlZ21lbnRzID0gdXJsLnNwbGl0KCc/JylbMF0uc3BsaXQoJyMnKVswXS5zcGxpdCgnLycpO1xuICAgICAgICAgICAgICAgIGxldCBhY3Rpb25VcmwgPSBhY3Rpb24/LnJvdXRlVXJsID8/ICcnO1xuICAgICAgICAgICAgICAgIGlmIChhY3Rpb25Vcmwuc3RhcnRzV2l0aCgnLycpKSB7XG4gICAgICAgICAgICAgICAgICAgIGFjdGlvblVybCA9IGFjdGlvblVybC5zdWJzdHJpbmcoMSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IGFjdGlvblVybFNlZ21lbnRzID0gYWN0aW9uVXJsLnNwbGl0KCcvJyk7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVkaXJlY3RVcmwgPSB1cmxQYXRoU2VnbWVudHMuc2xpY2UoMCwgdXJsUGF0aFNlZ21lbnRzLmxlbmd0aCAtIGFjdGlvblVybFNlZ21lbnRzLmxlbmd0aCkuam9pbignLycpO1xuICAgICAgICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoYC8ke3JlZGlyZWN0VXJsfWAsIHtyZXBsYWNlVXJsOiB0cnVlfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHRvTW5nQWN0aW9uRXJyb3IoZXJyb3I/OiBhbnkpOiBNbmdFcnJvciB7XG4gICAgICAgIGNvbnN0IGFjdGlvbkVycm9yOiBNbmdFcnJvciA9IHtcbiAgICAgICAgICAgIG5hbWU6IGVycm9yPy5uYW1lID8/ICdVbmtub3duRXJyb3InLFxuICAgICAgICAgICAgbWVzc2FnZTogZXJyb3I/Lm1lc3NhZ2UgPz8gJ1Vua25vd24gZXJyb3InLFxuICAgICAgICAgICAgY2F1c2U6IGVycm9yXG4gICAgICAgIH07XG4gICAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEh0dHBFcnJvclJlc3BvbnNlKSB7XG4gICAgICAgICAgICBhY3Rpb25FcnJvci5zdGF0dXMgPSBlcnJvci5zdGF0dXM7XG4gICAgICAgICAgICBhY3Rpb25FcnJvci5zdGF0dXNEZXNjcmlwdGlvbiA9IGVycm9yLnN0YXR1c1RleHQ7XG4gICAgICAgICAgICBhY3Rpb25FcnJvci51cmwgPSBlcnJvci51cmwgPz8gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmVycm9yTWFwcGVyLnRvTW5nRXJyb3IoZXJyb3IsIGFjdGlvbkVycm9yKTtcbiAgICB9XG59XG4iXX0=
|
|
339
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aW9uLWV4ZWN1dG9yLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL3NlcnZpY2VzL2FjdGlvbi1leGVjdXRvci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxpQkFBaUIsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBQ3ZELE9BQU8sRUFBQyxNQUFNLEVBQUUsVUFBVSxFQUFpQixNQUFNLGVBQWUsQ0FBQztBQU1qRSxPQUFPLEVBQUMsVUFBVSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsVUFBVSxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBQ3RELE9BQU8sRUFBQyxVQUFVLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBRXRELE9BQU8sRUFBQyxzQkFBc0IsRUFBYyxXQUFXLEVBQUUsaUJBQWlCLEVBQUUsZUFBZSxFQUFFLG1CQUFtQixFQUE2QixNQUFNLDZCQUE2QixDQUFDO0FBR2pMLE9BQU8sRUFBQywyQkFBMkIsRUFBb0Isc0JBQXNCLEVBQUUsY0FBYyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFJckgsT0FBTyxFQUFDLFFBQVEsRUFBRSxnQkFBZ0IsRUFBQyxNQUFNLFVBQVUsQ0FBQztBQUdwRCxPQUFPLEVBQUMsc0NBQXNDLEVBQUMsTUFBTSxVQUFVLENBQUM7Ozs7Ozs7OztBQUdoRSxNQUFNLE9BQU8sd0JBQXdCO0lBQ2pDLFlBQ1ksUUFBa0IsRUFDbEIsTUFBYyxFQUNkLGFBQTRCLEVBQzVCLG1CQUF3QyxFQUN4QyxTQUEyQixFQUMzQixpQkFBdUMsRUFDdkMsV0FBa0MsRUFDbEMsYUFBbUMsRUFDYSw0QkFBdUM7UUFSdkYsYUFBUSxHQUFSLFFBQVEsQ0FBVTtRQUNsQixXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQ2Qsa0JBQWEsR0FBYixhQUFhLENBQWU7UUFDNUIsd0JBQW1CLEdBQW5CLG1CQUFtQixDQUFxQjtRQUN4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Q0FBQyxJQUFJLFdBQVcsRUFBRSxFQUFFLEVBQUMsVUFBVSxFQUFFLElBQUksRUFBQyxDQUFDLENBQUM7YUFDcEU7U0FDSjtJQUNMLENBQUM7SUFFTSxnQkFBZ0IsQ0FBQyxLQUFXO1FBQy9CLE1BQU0sV0FBVyxHQUFhO1lBQzFCLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxJQUFJLGNBQWM7WUFDbkMsT0FBTyxFQUFFLEtBQUssRUFBRSxPQUFPLElBQUksZUFBZTtZQUMxQyxLQUFLLEVBQUUsS0FBSztTQUNmLENBQUM7UUFDRixJQUFJLEtBQUssWUFBWSxpQkFBaUIsRUFBRTtZQUNwQyxXQUFXLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUM7WUFDbEMsV0FBVyxDQUFDLGlCQUFpQixHQUFHLEtBQUssQ0FBQyxVQUFVLENBQUM7WUFDakQsV0FBVyxDQUFDLEdBQUcsR0FBRyxLQUFLLENBQUMsR0FBRyxJQUFJLFNBQVMsQ0FBQztTQUM1QztRQUNELE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsS0FBSyxFQUFFLFdBQVcsQ0FBQyxDQUFDO0lBQzNELENBQUM7O3FIQWxiUSx3QkFBd0IsNlFBVXJCLHNDQUFzQzt5SEFWekMsd0JBQXdCOzJGQUF4Qix3QkFBd0I7a0JBRHBDLFVBQVU7OzBCQVdGLE1BQU07MkJBQUMsc0NBQXNDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtIdHRwRXJyb3JSZXNwb25zZX0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHtJbmplY3QsIEluamVjdGFibGUsIEluamVjdG9yLCBUeXBlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7QWN0aXZhdGVkUm91dGUsIFJvdXRlciwgVXJsVHJlZX0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcblxuaW1wb3J0IHtUcmFuc2xhdGVTZXJ2aWNlfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7Q29uZmlybWF0aW9uLCBDb25maXJtYXRpb25TZXJ2aWNlfSBmcm9tICdwcmltZW5nL2FwaSc7XG5pbXBvcnQge0RpYWxvZ1NlcnZpY2UsIER5bmFtaWNEaWFsb2dDb25maWd9IGZyb20gJ3ByaW1lbmcvZHluYW1pY2RpYWxvZyc7XG5pbXBvcnQge09ic2VydmFibGUsIGZyb20sIG9mLCB0aHJvd0Vycm9yfSBmcm9tICdyeGpzJztcbmltcG9ydCB7Y2F0Y2hFcnJvciwgZmlyc3QsIG1hcH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQge0FjdGlvbkFjdGl2YXRpb25SZXN1bHQsIEFjdGlvbkRhdGEsIEFjdGlvbkVycm9yLCBBY3Rpb25FeGVjQ29udGV4dCwgQWN0aW9uUnVuUmVzdWx0LCBBY3Rpb25UcmlnZ2VyUmVzdWx0LCBJQWN0aW9uQ29uZmlybWF0aW9uU2VydmljZX0gZnJvbSAnLi4vY29tcG9uZW50cy9hY3Rpb24vbW9kZWxzJztcbmltcG9ydCB7TW5nVGFibGVDZWxsQ2xpY2tFdmVudH0gZnJvbSAnLi4vY29tcG9uZW50cy90YWJsZXZpZXcvbW9kZWxzJztcbmltcG9ydCB7SURhdGFQcm92aWRlciwgSUVkaXRvckRhdGFQcm92aWRlcn0gZnJvbSAnLi4vZGF0YS1wcm92aWRlcnMnO1xuaW1wb3J0IHtBY3Rpb25BY3RpdmF0aW9uVHJpZ2dlckVudW0sIEFjdGlvbkRlc2NyaXB0b3IsIEFjdGlvbkVkaXRvckRlc2NyaXB0b3IsIEFjdGlvblR5cGVFbnVtfSBmcm9tICcuLi9kZXNjcmlwdG9ycyc7XG5pbXBvcnQge0lWaWV3Q29udGFpbmVyLCBNbmdFcnJvcn0gZnJvbSAnLi4vbW9kZWxzJztcbmltcG9ydCB7TW5nTGlua0Zvcm1hdHRlclBpcGV9IGZyb20gJy4uL3BpcGVzJztcbmltcG9ydCB7SWRUeXBlfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQge0kxOG5VdGlsLCBOb3RpZmljYXRpb25VdGlsfSBmcm9tICcuLi91dGlscyc7XG5pbXBvcnQge01uZ0Vycm9yTWFwcGVyU2VydmljZX0gZnJvbSAnLi9lcnJvci1tYXBwZXIuc2VydmljZSc7XG5pbXBvcnQge01uZ05hdmlnYXRpb25TZXJ2aWNlfSBmcm9tICcuL25hdmlnYXRpb24uc2VydmljZSc7XG5pbXBvcnQge0FDVElPTl9FRElUT1JfRElBTE9HX0NPTVBPTkVOVF9TRVRUSU5HfSBmcm9tICcuL3Rva2Vucyc7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBNbmdBY3Rpb25FeGVjdXRvclNlcnZpY2Uge1xuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIGluamVjdG9yOiBJbmplY3RvcixcbiAgICAgICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcbiAgICAgICAgcHJpdmF0ZSBkaWFsb2dTZXJ2aWNlOiBEaWFsb2dTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIGNvbmZpcm1hdGlvblNlcnZpY2U6IENvbmZpcm1hdGlvblNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgdHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIG5hdmlnYXRpb25TZXJ2aWNlOiBNbmdOYXZpZ2F0aW9uU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBlcnJvck1hcHBlcjogTW5nRXJyb3JNYXBwZXJTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIGxpbmtGb3JtYXR0ZXI6IE1uZ0xpbmtGb3JtYXR0ZXJQaXBlLFxuICAgICAgICBASW5qZWN0KEFDVElPTl9FRElUT1JfRElBTE9HX0NPTVBPTkVOVF9TRVRUSU5HKSBwcml2YXRlIGRlZmF1bHRFZGl0b3JEaWFsb2dDb21wb25lbnQ6IFR5cGU8YW55PlxuICAgICkge31cblxuICAgIHB1YmxpYyBwcmVwYXJlQWN0aW9uRXhlY0NvbnRleHQ8VCwgUz4oXG4gICAgICAgIGFjdGlvbjogQWN0aW9uRGVzY3JpcHRvcjxUPixcbiAgICAgICAgaXRlbUlkPzogSWRUeXBlLFxuICAgICAgICBpdGVtPzogVCxcbiAgICAgICAgZGF0YVByb3ZpZGVyPzogSURhdGFQcm92aWRlcjxULCBTPixcbiAgICAgICAgdmlld0NvbnRhaW5lcj86IElWaWV3Q29udGFpbmVyPFQsIFM+LFxuICAgICAgICBzb3VyY2VDb21wb25lbnQ/OiBhbnksXG4gICAgICAgIGFjdGlvbkRhdGE/OiBBY3Rpb25EYXRhXG4gICAgKTogQWN0aW9uRXhlY0NvbnRleHQ8VCwgUywgSURhdGFQcm92aWRlcjxULCBTPj4ge1xuICAgICAgICBjb25zdCBjdHhEYXRhUHJvdmlkZXIgPSBkYXRhUHJvdmlkZXIgPz8gYWN0aW9uLmRhdGFQcm92aWRlciA/PyB2aWV3Q29udGFpbmVyPy5nZXREYXRhUHJvdmlkZXIoKTtcbiAgICAgICAgcmV0dXJuIG5ldyBBY3Rpb25FeGVjQ29udGV4dDxULCBTLCBJRGF0YVByb3ZpZGVyPFQsIFM+PihcbiAgICAgICAgICAgIGN0eERhdGFQcm92aWRlcixcbiAgICAgICAgICAgIHRoaXMuZ2V0RGF0YVByb3ZpZGVyU2VydmljZShjdHhEYXRhUHJvdmlkZXIpID8/IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBpdGVtLFxuICAgICAgICAgICAgICAgIGl0ZW1JZCxcbiAgICAgICAgICAgICAgICBhY3Rpb25EYXRhXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc291cmNlQ29tcG9uZW50LFxuICAgICAgICAgICAgdmlld0NvbnRhaW5lclxuICAgICAgICApO1xuICAgIH1cblxuICAgIHB1YmxpYyBydW5BY3Rpb248VCwgUz4oXG4gICAgICAgIGFjdGlvbjogQWN0aW9uRGVzY3JpcHRvcjxUPixcbiAgICAgICAgaXRlbUlkPzogSWRUeXBlLFxuICAgICAgICBpdGVtPzogVCxcbiAgICAgICAgZGF0YVByb3ZpZGVyPzogSURhdGFQcm92aWRlcjxULCBTPixcbiAgICAgICAgc291cmNlQ29tcG9uZW50PzogYW55LFxuICAgICAgICB2aWV3Q29udGFpbmVyPzogSVZpZXdDb250YWluZXI8VCwgUz4sXG4gICAgICAgIGFjdGlvbkRhdGE/OiBBY3Rpb25EYXRhXG4gICAgKTogT2JzZXJ2YWJsZTxBY3Rpb25SdW5SZXN1bHQ8VCwgUywgSURhdGFQcm92aWRlcjxULCBTPj4+IHtcbiAgICAgICAgY29uc3QgY29udGV4dCA9IHRoaXMucHJlcGFyZUFjdGlvbkV4ZWNDb250ZXh0KGFjdGlvbiwgaXRlbUlkLCBpdGVtLCBkYXRhUHJvdmlkZXIsIHZpZXdDb250YWluZXIsIHNvdXJjZUNvbXBvbmVudCwgYWN0aW9uRGF0YSk7XG4gICAgICAgIGlmIChhY3Rpb24uaGFzUnVuQ29uZmlybWF0aW9uKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHNvdXJjZUNvbXBvbmVudD8uZ2V0Q29uZmlybWF0aW9uU2VydmljZSAhPT0gJ2Z1bmN0aW9uJyB8fCB0eXBlb2Ygc291cmNlQ29tcG9uZW50Py5nZXRDb25maXJtYXRpb25TZXJ2aWNlSW5zdGFuY2VLZXkgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBFcnJvcihgU291cmNlIGNvbXBvbmVudCAke3NvdXJjZUNvbXBvbmVudH0gc2hvdWxkIGJlIGltcGxlbWVudGluZyBJQ29uZmlybWF0aW9uU2VydmljZSBpbnRlcmZhY2UgdG8gYmUgYWJsZSB0byBwcm92aWRlIGNvbmZpcm1hdGlvbiBmdW5jdGlvbmFsaXR5LmApO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBzcmNDb25maXJtQ29tcG9uZW50ID0gc291cmNlQ29tcG9uZW50IGFzIElBY3Rpb25Db25maXJtYXRpb25TZXJ2aWNlO1xuICAgICAgICAgICAgY29uc3QgY29uZmlybVBhcmFtczogQ29uZmlybWF0aW9uID0ge1xuICAgICAgICAgICAgICAgIGtleTogc3JjQ29uZmlybUNvbXBvbmVudC5nZXRDb25maXJtYXRpb25TZXJ2aWNlSW5zdGFuY2VLZXkoYWN0aW9uKSxcbiAgICAgICAgICAgICAgICBhY2NlcHRWaXNpYmxlOiBmYWxzZSxcbiAgICAgICAgICAgICAgICByZWplY3RWaXNpYmxlOiBmYWxzZVxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgaWYgKGFjdGlvbi5ydW5Db25maXJtYXRpb25UaXRsZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGNvbmZpcm1QYXJhbXMuaGVhZGVyID1cbiAgICAgICAgICAgICAgICAgICAgSTE4blV0aWwuaW5zdGFudEFjdGlvblRyYW5zbGF0aW9uKHRoaXMudHJhbnNsYXRlLCBhY3Rpb24sICdjb25maXJtLnRpdGxlJywgYWN0aW9uLnJ1bkNvbmZpcm1hdGlvblRpdGxlLCBpdGVtLCAnZ2VuZXJhbC5jb25maXJtYXRpb24nKSA/PyB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoYWN0aW9uLnJ1bkNvbmZpcm1hdGlvbk1lc3NhZ2UgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBjb25maXJtUGFyYW1zLm1lc3NhZ2UgPVxuICAgICAgICAgICAgICAgICAgICBJMThuVXRpbC5pbnN0YW50QWN0aW9uVHJhbnNsYXRpb24odGhpcy50cmFuc2xhdGUsIGFjdGlvbiwgJ2NvbmZpcm0ubWVzc2FnZScsIGFjdGlvbi5ydW5Db25maXJtYXRpb25NZXNzYWdlLCBpdGVtLCAnZ2VuZXJhbC5jb25maXJtYXRpb24nKSA/PyB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoYWN0aW9uLnJ1bkNvbmZpcm1hdGlvbkljb24gIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBjb25maXJtUGFyYW1zLmljb24gPSBhY3Rpb24ucnVuQ29uZmlybWF0aW9uSWNvbiA9PT0gdW5kZWZpbmVkID8gJ3BpIHBpLWV4Y2xhbWF0aW9uLXRyaWFuZ2xlJyA6IGFjdGlvbi5ydW5Db25maXJtYXRpb25JY29uO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGFjdGlvbi5ydW5Db25maXJtYXRpb25BY2NlcHRUaXRsZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGNvbmZpcm1QYXJhbXMuYWNjZXB0TGFiZWwgPVxuICAgICAgICAgICAgICAgICAgICBJMThuVXRpbC5pbnN0YW50QWN0aW9uVHJhbnNsYXRpb24odGhpcy50cmFuc2xhdGUsIGFjdGlvbiwgJ2NvbmZpcm0uYWNjZXB0JywgYWN0aW9uLnJ1bkNvbmZpcm1hdGlvbkFjY2VwdFRpdGxlLCBpdGVtLCAnZ2VuZXJhbC55ZXMnKSA/PyB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgY29uZmlybVBhcmFtcy5hY2NlcHRWaXNpYmxlID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChhY3Rpb24ucnVuQ29uZmlybWF0aW9uUmVqZWN0VGl0bGUgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBjb25maXJtUGFyYW1zLnJlamVjdExhYmVsID1cbiAgICAgICAgICAgICAgICAgICAgSTE4blV0aWwuaW5zdGFudEFjdGlvblRyYW5zbGF0aW9uKHRoaXMudHJhbnNsYXRlLCBhY3Rpb24sICdjb25maXJtLnJlamVjdCcsIGFjdGlvbi5ydW5Db25maXJtYXRpb25SZWplY3RUaXRsZSwgaXRlbSwgJ2dlbmVyYWwubm8nKSA/PyB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgY29uZmlybVBhcmFtcy5yZWplY3RWaXNpYmxlID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3Qgb2JzZXJ2YWJsZSA9IG5ldyBPYnNlcnZhYmxlPEFjdGlvblJ1blJlc3VsdDxULCBTLCBJRGF0YVByb3ZpZGVyPFQsIFM+Pj4ob2JzZXJ2ZXIgPT4ge1xuICAgICAgICAgICAgICAgIGNvbmZpcm1QYXJhbXMuYWNjZXB0ID0gKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBhY3Rpb25cbiAgICAgICAgICAgICAgICAgICAgICAgIC5ydW5GdW5jdGlvbihjb250ZXh0KVxuICAgICAgICAgICAgICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3QoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXAocmVzID0+IG5ldyBBY3Rpb25SdW5SZXN1bHQoY29udGV4dCwgcmVzKSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwKHJ1blJlc3VsdCA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhY3Rpb24uaGFzUnVuTm90aWZpY2F0aW9uU3VjY2Vzcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnVuUmVzdWx0Lm5vdGlmaWNhdGlvbiA9IE5vdGlmaWNhdGlvblV0aWwuYWN0aW9uTm90aWZpY2F0aW9uU3VjY2VzcyhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRyYW5zbGF0ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb24sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3J1bicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uLnJ1bk5vdGlmaWNhdGlvblN1Y2Nlc3NUaXRsZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb24ucnVuTm90aWZpY2F0aW9uU3VjY2Vzc01lc3NhZ2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlld0NvbnRhaW5lcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBydW5SZXN1bHQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2F0Y2hFcnJvcihlcnIgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBhY3Rpb25FcnJvciA9IHRoaXMudG9NbmdBY3Rpb25FcnJvcihlcnIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYWN0aW9uLmhhc1J1bk5vdGlmaWNhdGlvbkVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb25FcnJvci5ub3RpZmljYXRpb24gPSBOb3RpZmljYXRpb25VdGlsLmFjdGlvbk5vdGlmaWNhdGlvbkVycm9yKHRoaXMudHJhbnNsYXRlLCBhY3Rpb24sIGFjdGlvbkVycm9yLCAncnVuJywgdmlld0NvbnRhaW5lciwgaXRlbSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoKCkgPT4gYWN0aW9uRXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKHJlcyA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JzZXJ2ZXIubmV4dChyZXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9ic2VydmVyLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgY29uZmlybVBhcmFtcy5yZWplY3QgPSAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIG9ic2VydmVyLmVycm9yKG5ldyBBY3Rpb25SdW5SZXN1bHQoY29udGV4dCwgdW5kZWZpbmVkLCBuZXcgQWN0aW9uRXJyb3IobnVsbCwgdHJ1ZSkpKTtcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgc3JjQ29uZmlybUNvbXBvbmVudC5nZXRDb25maXJtYXRpb25TZXJ2aWNlKCkuY29uZmlybShjb25maXJtUGFyYW1zKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIG9ic2VydmFibGU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gYWN0aW9uLnJ1bkZ1bmN0aW9uKGNvbnRleHQpLnBpcGUoXG4gICAgICAgICAgICAgICAgbWFwKHJlcyA9PiBuZXcgQWN0aW9uUnVuUmVzdWx0KGNvbnRleHQsIHJlcykpLFxuICAgICAgICAgICAgICAgIG1hcChydW5SZXN1bHQgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoYWN0aW9uLmhhc1J1bk5vdGlmaWNhdGlvblN1Y2Nlc3MpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJ1blJlc3VsdC5ub3RpZmljYXRpb24gPSBOb3RpZmljYXRpb25VdGlsLmFjdGlvbk5vdGlmaWNhdGlvblN1Y2Nlc3MoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50cmFuc2xhdGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdydW4nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbi5ydW5Ob3RpZmljYXRpb25TdWNjZXNzVGl0bGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uLnJ1bk5vdGlmaWNhdGlvblN1Y2Nlc3NNZXNzYWdlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpZXdDb250YWluZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbVxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcnVuUmVzdWx0O1xuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIGNhdGNoRXJyb3IoZXJyID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYWN0aW9uRXJyb3IgPSB0aGlzLnRvTW5nQWN0aW9uRXJyb3IoZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGFjdGlvbi5oYXNSdW5Ob3RpZmljYXRpb25FcnJvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uRXJyb3Iubm90aWZpY2F0aW9uID0gTm90aWZpY2F0aW9uVXRpbC5hY3Rpb25Ob3RpZmljYXRpb25FcnJvcih0aGlzLnRyYW5zbGF0ZSwgYWN0aW9uLCBhY3Rpb25FcnJvciwgJ3J1bicsIHZpZXdDb250YWluZXIsIGl0ZW0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCgpID0+IGFjdGlvbkVycm9yKTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJ1bnMgZWRpdG9yIGFjdGlvbiBzYXZlIGZ1bmN0aW9uIHVzdWFsbHkgdHJpZ2dlcmVkIG9uIGZvcm0gc3VibWl0LlxuICAgICAqXG4gICAgICogQHBhcmFtIGFjdGlvbiBBY3Rpb24gZGVzY3JpcHRvci5cbiAgICAgKiBAcGFyYW0gaXRlbUlkIEl0ZW0gaWQgKGlmIGV4aXN0cykuXG4gICAgICogQHBhcmFtIGZvcm1JdGVtIEl0ZW0gaW5zdGFuY2UgKGZyb20gZm9ybSkuXG4gICAgICogQHBhcmFtIGRhdGFQcm92aWRlciBEYXRhIHByb3ZpZGVyXG4gICAgICogQHBhcmFtIHNvdXJjZUNvbXBvbmVudCBTb3VyY2UgY29tcG9uZW50IGZyb20gd2hlcmUgdGhlIGZldGNoIGZ1bmN0aW9uIHdhcyBjYWxsZWQuXG4gICAgICogQHBhcmFtIHZpZXdDb250YWluZXIgVmlldyBjb250YWluZXIvc2VydmljZS5cbiAgICAgKiBAcGFyYW0gYWN0aW9uRGF0YSBBZGRpdGlvbmFsIGFjdGlvbiBkYXRhLlxuICAgICAqL1xuICAgIHB1YmxpYyBydW5FZGl0b3JTYXZlPFQsIFM+KFxuICAgICAgICBhY3Rpb246IEFjdGlvbkVkaXRvckRlc2NyaXB0b3I8VD4sXG4gICAgICAgIGl0ZW1JZD86IElkVHlwZSxcbiAgICAgICAgZm9ybUl0ZW0/OiBULFxuICAgICAgICBkYXRhUHJvdmlkZXI/OiBJRWRpdG9yRGF0YVByb3ZpZGVyPFQsIFM+LFxuICAgICAgICBzb3VyY2VDb21wb25lbnQ/OiBhbnksXG4gICAgICAgIHZpZXdDb250YWluZXI/OiBJVmlld0NvbnRhaW5lcjxULCBTPixcbiAgICAgICAgYWN0aW9uRGF0YT86IEFjdGlvbkRhdGFcbiAgICApOiBPYnNlcnZhYmxlPEFjdGlvblJ1blJlc3VsdDxULCBTLCBJRWRpdG9yRGF0YVByb3ZpZGVyPFQsIFM+Pj4ge1xuICAgICAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5wcmVwYXJlRXhlY0NvbnRleHRGb3JFZGl0b3IoYWN0aW9uLCBmb3JtSXRlbSwgaXRlbUlkLCBkYXRhUHJvdmlkZXIsIHNvdXJjZUNvbXBvbmVudCwgdmlld0NvbnRhaW5lciwgYWN0aW9uRGF0YSk7XG4gICAgICAgIGlmICh0eXBlb2YgYWN0aW9uLnN1Ym1pdEZ1bmN0aW9uICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFN1Ym1pdCBmdW5jdGlvbiBmb3IgYWN0aW9uICR7YWN0aW9uLmFjdGlvbk5hbWV9IGNhbm5vdCBiZSBpbnZva2VkLmApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhY3Rpb24uc3VibWl0RnVuY3Rpb24oY29udGV4dCkucGlwZShcbiAgICAgICAgICAgIG1hcChyZXMgPT4gbmV3IEFjdGlvblJ1blJlc3VsdChjb250ZXh0LCByZXMpKSxcbiAgICAgICAgICAgIG1hcChydW5SZXN1bHQgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChhY3Rpb24uaGFzUnVuTm90aWZpY2F0aW9uU3VjY2Vzcykge1xuICAgICAgICAgICAgICAgICAgICBydW5SZXN1bHQubm90aWZpY2F0aW9uID0gTm90aWZpY2F0aW9uVXRpbC5hY3Rpb25Ob3RpZmljYXRpb25TdWNjZXNzKFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50cmFuc2xhdGUsXG4gICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb24sXG4gICAgICAgICAgICAgICAgICAgICAgICAnc3VibWl0JyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbi5ydW5Ob3RpZmljYXRpb25TdWNjZXNzVGl0bGUsXG4gICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb24ucnVuTm90aWZpY2F0aW9uU3VjY2Vzc01lc3NhZ2UsXG4gICAgICAgICAgICAgICAgICAgICAgICB2aWV3Q29udGFpbmVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUl0ZW1cbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJ1blJlc3VsdDtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgY2F0Y2hFcnJvcihlcnIgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGFjdGlvbkVycm9yID0gdGhpcy50b01uZ0FjdGlvbkVycm9yKGVycik7XG4gICAgICAgICAgICAgICAgaWYgKGFjdGlvbi5oYXNSdW5Ob3RpZmljYXRpb25FcnJvcikge1xuICAgICAgICAgICAgICAgICAgICBhY3Rpb25FcnJvci5ub3RpZmljYXRpb24gPSBOb3RpZmljYXRpb25VdGlsLmFjdGlvbk5vdGlmaWNhdGlvbkVycm9yKHRoaXMudHJhbnNsYXRlLCBhY3Rpb24sIGFjdGlvbkVycm9yLCAnc3VibWl0Jywgdmlld0NvbnRhaW5lciwgZm9ybUl0ZW0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigoKSA9PiBhY3Rpb25FcnJvcik7XG4gICAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJ1bnMgZWRpdG9yIGFjdGlvbiBmZXRjaCBmdW5jdGlvbi5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBhY3Rpb24gQWN0aW9uIGRlc2NyaXB0b3IuXG4gICAgICogQHBhcmFtIGl0ZW0gSXRlbSBpbnN0YW5jZSAoaWYgZXhpc3RzKS5cbiAgICAgKiBAcGFyYW0gaXRlbUlkIEl0ZW0gaWQuXG4gICAgICogQHBhcmFtIGRhdGFQcm92aWRlciBEYXRhIHByb3ZpZGVyXG4gICAgICogQHBhcmFtIHNvdXJjZUNvbXBvbmVudCBTb3VyY2UgY29tcG9uZW50IGZyb20gd2hlcmUgdGhlIGZldGNoIGZ1bmN0aW9uIHdhcyBjYWxsZWQuXG4gICAgICogQHBhcmFtIHZpZXdDb250YWluZXIgVmlldyBjb250YWluZXIvc2VydmljZS4gVGFibGV2aWV3IGNvbXBvbmVudC5cbiAgICAgKiBAcGFyYW0gYWN0aW9uRGF0YSBBZGRpdGlvbmFsIGFjdGlvbiBkYXRhLlxuICAgICAqL1xuICAgIHB1YmxpYyBydW5FZGl0b3JGZXRjaDxULCBTPihcbiAgICAgICAgYWN0aW9uOiBBY3Rpb25FZGl0b3JEZXNjcmlwdG9yPFQ+LFxuICAgICAgICBpdGVtPzogVCxcbiAgICAgICAgaXRlbUlkPzogSWRUeXBlLFxuICAgICAgICBkYXRhUHJvdmlkZXI/OiBJRWRpdG9yRGF0YVByb3ZpZGVyPFQsIFM+LFxuICAgICAgICBzb3VyY2VDb21wb25lbnQ/OiBhbnksXG4gICAgICAgIHZpZXdDb250YWluZXI/OiBJVmlld0NvbnRhaW5lcjxULCBTPixcbiAgICAgICAgYWN0aW9uRGF0YT86IEFjdGlvbkRhdGFcbiAgICApOiBPYnNlcnZhYmxlPEFjdGlvblJ1blJlc3VsdDxULCBTLCBJRWRpdG9yRGF0YVByb3ZpZGVyPFQsIFM+Pj4ge1xuICAgICAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5wcmVwYXJlRXhlY0NvbnRleHRGb3JFZGl0b3IoYWN0aW9uLCBpdGVtLCBpdGVtSWQsIGRhdGFQcm92aWRlciwgc291cmNlQ29tcG9uZW50LCB2aWV3Q29udGFpbmVyLCBhY3Rpb25EYXRhKTtcbiAgICAgICAgcmV0dXJuIGFjdGlvbi5mZXRjaEZ1bmN0aW9uKGNvbnRleHQpLnBpcGUobWFwKHJlcyA9PiBuZXcgQWN0aW9uUnVuUmVzdWx0KGNvbnRleHQsIHJlcykpKTtcbiAgICAgICAgLy8gVE9ETzogZXJyb3IgaGFuZGxpbmdcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBQcmVwYXJlcyBhY3Rpb24gZXhlYyBjb250ZXh0IGZvciBhY3Rpb24gb2YgdHlwZSBlZGl0b3IuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gaXRlbSBJdGVtIGluc3RhbmNlIChpZiBleGlzdHMpLlxuICAgICAqIEBwYXJhbSBpdGVtSWQgSXRlbSBpZCAoaWYgZXhpc3RzKS5cbiAgICAgKiBAcGFyYW0gZGF0YVByb3ZpZGVyIERhdGEgcHJvdmlkZXIuXG4gICAgICogQHBhcmFtIHNvdXJjZUNvbXBvbmVudCBTb3VyY2UgY29tcG9uZW50IGZyb20gd2hlcmUgdGhlIGNvbnRleHQgcHJlcGFyYXRpb24gd2FzIGNhbGxlZC5cbiAgICAgKiBAcGFyYW0gdmlld0NvbnRhaW5lciBWaWV3IGNvbnRhaW5lci9zZXJ2aWNlLlxuICAgICAqIEBwYXJhbSBhY3Rpb25EYXRhIEFkZGl0aW9uYWwgYWN0aW9uIGRhdGEuXG4gICAgICovXG4gICAgcHJpdmF0ZSBwcmVwYXJlRXhlY0NvbnRleHRGb3JFZGl0b3I8VCwgUz4oXG4gICAgICAgIGFjdGlvbjogQWN0aW9uRWRpdG9yRGVzY3JpcHRvcjxUPixcbiAgICAgICAgaXRlbT86IFQsXG4gICAgICAgIGl0ZW1JZD86IElkVHlwZSxcbiAgICAgICAgZGF0YVByb3ZpZGVyPzogSUVkaXRvckRhdGFQcm92aWRlcjxULCBTPixcbiAgICAgICAgc291cmNlQ29tcG9uZW50PzogYW55LFxuICAgICAgICB2aWV3Q29udGFpbmVyPzogSVZpZXdDb250YWluZXI8VCwgUz4sXG4gICAgICAgIGFjdGlvbkRhdGE/OiBBY3Rpb25EYXRhXG4gICAgKTogQWN0aW9uRXhlY0NvbnRleHQ8VCwgUywgSUVkaXRvckRhdGFQcm92aWRlcjxULCBTPj4ge1xuICAgICAgICBsZXQgY3R4RGF0YVByb3ZpZGVyID0gZGF0YVByb3ZpZGVyO1xuICAgICAgICBpZiAoIWN0eERhdGFQcm92aWRlciAmJiBhY3Rpb24uZGF0YVByb3ZpZGVyKSB7XG4gICAgICAgICAgICBjdHhEYXRhUHJvdmlkZXIgPSBhY3Rpb24uZGF0YVByb3ZpZGVyO1xuICAgICAgICB9XG4gICAgICAgIGlmICghY3R4RGF0YVByb3ZpZGVyKSB7XG4gICAgICAgICAgICBjb25zdCB2aWV3Q29udGFpbmVyRGF0YVByb3ZpZGVyID0gdmlld0NvbnRhaW5lcj8uZ2V0RGF0YVByb3ZpZGVyKCk7XG4gICAgICAgICAgICBpZiAodmlld0NvbnRhaW5lckRhdGFQcm92aWRlcikge1xuICAgICAgICAgICAgICAgIGN0eERhdGFQcm92aWRlciA9IHZpZXdDb250YWluZXJEYXRhUHJvdmlkZXIgYXMgSUVkaXRvckRhdGFQcm92aWRlcjxULCBTPjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjb250ZXh0ID0gbmV3IEFjdGlvbkV4ZWNDb250ZXh0PFQsIFMsIElFZGl0b3JEYXRhUHJvdmlkZXI8VCwgUz4+KFxuICAgICAgICAgICAgY3R4RGF0YVByb3ZpZGVyLFxuICAgICAgICAgICAgdGhpcy5nZXREYXRhUHJvdmlkZXJTZXJ2aWNlKGN0eERhdGFQcm92aWRlcikgPz8gdW5kZWZpbmVkLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGl0ZW0sXG4gICAgICAgICAgICAgICAgaXRlbUlkLFxuICAgICAgICAgICAgICAgIGFjdGlvbkRhdGFcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzb3VyY2VDb21wb25lbnQsXG4gICAgICAgICAgICB2aWV3Q29udGFpbmVyXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybiBjb250ZXh0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgc2VydmljZSBpbnN0YW5jZSBvZiBkYXRhIHByb3ZpZGVyLlxuICAgICAqXG4gICAgICogQHBhcmFtIGRhdGFQcm92aWRlciBEYXRhIHByb3ZpZGVyIGluc3RhbmNlLlxuICAgICAqL1xuICAgIHByaXZhdGUgZ2V0RGF0YVByb3ZpZGVyU2VydmljZTxULCBTPihkYXRhUHJvdmlkZXI/OiBJRGF0YVByb3ZpZGVyPFQsIFM+KTogUyB8IG51bGwge1xuICAgICAgICBpZiAoZGF0YVByb3ZpZGVyPy5zZXJ2aWNlVHlwZSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaW5qZWN0b3IuZ2V0PFM+KGRhdGFQcm92aWRlci5zZXJ2aWNlVHlwZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFjdGl2YXRlcyBhY3Rpb24uXG4gICAgICpcbiAgICAgKiBAcGFyYW0gYWN0aW9uIEFjdGlvbiBkZXNjcmlwdG9yLlxuICAgICAqIEBwYXJhbSBpdGVtIEl0ZW0gaW5zdGFuY2UgKGlmIGV4aXN0cykuXG4gICAgICogQHBhcmFtIGl0ZW1JZCBJdGVtIGlkIChpZiBleGlzdHMpLlxuICAgICAqIEBwYXJhbSBhY3Rpb25EYXRhIE9wdGlvbmFsIGFkZGl0aW9uYWwgYWN0aW9uIGRhdGEuXG4gICAgICogQHBhcmFtIHZpZXdDb250YWluZXIgVmlldyBjb250YWluZXIgY29tcG9uZW50L3NlcnZpY2UuXG4gICAgICogQHBhcmFtIHNvdXJjZUNvbXBvbmVudCBTb3VyY2UgYWN0aXZhdGlvbiBjb21wb25lbnQuXG4gICAgICovXG4gICAgcHVibGljIGFjdGl2YXRlQWN0aW9uPFQsIFM+KFxuICAgICAgICBhY3Rpb246IEFjdGlvbkRlc2NyaXB0b3I8VD4sXG4gICAgICAgIGl0ZW1JZD86IElkVHlwZSxcbiAgICAgICAgaXRlbT86IFQsXG4gICAgICAgIGFjdGlvbkRhdGE/OiBBY3Rpb25EYXRhLFxuICAgICAgICB2aWV3Q29udGFpbmVyPzogSVZpZXdDb250YWluZXI8VCwgUz4sXG4gICAgICAgIHNvdXJjZUNvbXBvbmVudD86IGFueVxuICAgICk6IE9ic2VydmFibGU8QWN0aW9uQWN0aXZhdGlvblJlc3VsdDxULCBTLCBJRGF0YVByb3ZpZGVyPFQsIFM+Pj4ge1xuICAgICAgICBpZiAoYWN0aW9uLnR5cGUgPT09IEFjdGlvblR5cGVFbnVtLkVkaXRvcikge1xuICAgICAgICAgICAgbGV0IGRpYWxvZ0NvbXBvbmVudCA9IHRoaXMuZGVmYXVsdEVkaXRvckRpYWxvZ0NvbXBvbmVudDtcbiAgICAgICAgICAgIGxldCBkaWFsb2dDbGFzc05hbWUgPSAnJztcbiAgICAgICAgICAgIGlmIChhY3Rpb24gaW5zdGFuY2VvZiBBY3Rpb25FZGl0b3JEZXNjcmlwdG9yKSB7XG4gICAgICAgICAgICAgICAgaWYgKGFjdGlvbi5lZGl0b3JDb21wb25lbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgZGlhbG9nQ29tcG9uZW50ID0gYWN0aW9uLmVkaXRvckNvbXBvbmVudDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGFjdGlvbi5kaWFsb2dDbGFzc05hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgZGlhbG9nQ2xhc3NOYW1lID0gYWN0aW9uLmRpYWxvZ0NsYXNzTmFtZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBkaWFsb2dDb25maWc6IER5bmFtaWNEaWFsb2dDb25maWcgPSB7XG4gICAgICAgICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgICAgICAgICBhY3Rpb25cbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHN0eWxlQ2xhc3M6IGRpYWxvZ0NsYXNzTmFtZVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGlmIChpdGVtSWQpIHtcbiAgICAgICAgICAgICAgICBkaWFsb2dDb25maWcuZGF0YS5pdGVtSWQgPSBpdGVtSWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaXRlbSkge1xuICAgICAgICAgICAgICAgIGRpYWxvZ0NvbmZpZy5kYXRhLml0ZW0gPSBpdGVtO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGFjdGlvbkRhdGEpIHtcbiAgICAgICAgICAgICAgICBkaWFsb2dDb25maWcuZGF0YS5hY3Rpb25EYXRhID0gYWN0aW9uRGF0YTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh2aWV3Q29udGFpbmVyKSB7XG4gICAgICAgICAgICAgICAgZGlhbG9nQ29uZmlnLmRhdGEudmlld0NvbnRhaW5lciA9IHZpZXdDb250YWluZXI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoc291cmNlQ29tcG9uZW50KSB7XG4gICAgICAgICAgICAgICAgZGlhbG9nQ29uZmlnLmRhdGEuc291cmNlQ29tcG9uZW50ID0gc291cmNlQ29tcG9uZW50O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgZGlhbG9nUmVmID0gdGhpcy5kaWFsb2dTZXJ2aWNlLm9wZW4oZGlhbG9nQ29tcG9uZW50LCBkaWFsb2dDb25maWcpO1xuICAgICAgICAgICAgcmV0dXJuIG9mKG5ldyBBY3Rpb25BY3RpdmF0aW9uUmVzdWx0PFQsIFMsIElEYXRhUHJvdmlkZXI8VCwgUz4+KHVuZGVmaW5lZCwgZGlhbG9nUmVmKSk7XG4gICAgICAgIH0gZWxzZSBpZiAoYWN0aW9uLnR5cGUgPT09IEFjdGlvblR5cGVFbnVtLkV2ZW50KSB7XG4gICAgICAgICAgICAvLyBqdXN0IGVtaXQgZXZlbnRcbiAgICAgICAgICAgIHJldHVybiBvZihuZXcgQWN0aW9uQWN0aXZhdGlvblJlc3VsdDxULCBTLCBJRGF0YVByb3ZpZGVyPFQsIFM+Pih1bmRlZmluZWQpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIGRpcmVjdGx5IGV4ZWN1dGUgYWN0aW9uXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5ydW5BY3Rpb248VCwgUz4oYWN0aW9uLCBpdGVtSWQsIGl0ZW0sIHVuZGVmaW5lZCwgc291cmNlQ29tcG9uZW50LCB2aWV3Q29udGFpbmVyLCBhY3Rpb25EYXRhKS5waXBlKFxuICAgICAgICAgICAgICAgIG1hcChyZXMgPT4gbmV3IEFjdGlvbkFjdGl2YXRpb25SZXN1bHQ8VCwgUywgSURhdGFQcm92aWRlcjxULCBTPj4ocmVzKSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUcmlnZ2VycyBhY3Rpb24gZnJvbSB0YWJsZSByb3cgY2xpY2sgcG9zaXRpb24uXG4gICAgICpcbiAgICAgKiBAcGFyYW0gYWN0aW9uIEFjdGlvbiBkZXNjcmlwdG9yLlxuICAgICAqIEBwYXJhbSBldmVudCBUYXJnZXQgdGFibGUgY2xpY2sgZXZlbnQuXG4gICAgICogQHBhcmFtIHJvdXRlIEN1cnJlbnRseSBhY3RpdmF0ZSByb3V0ZS5cbiAgICAgKi9cbiAgICBwdWJsaWMgdHJpZ2dlclJvd0NsaWNrQWN0aW9uPFQ+KGFjdGlvbjogQWN0aW9uRGVzY3JpcHRvcjxUPiwgZXZlbnQ6IE1uZ1RhYmxlQ2VsbENsaWNrRXZlbnQ8VD4sIHJvdXRlPzogQWN0aXZhdGVkUm91dGUpIHtcbiAgICAgICAgaWYgKCFhY3Rpb24ubW9kZWwuaWRQcm9wZXJ0eU5hbWUpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgUm93IGNsaWNrIGFjdGlvbiAke2FjdGlvbi5hY3Rpb25OYW1lfSBjYW4gbm90IGJlIHRyaWdnZXJlZCwgYmVjYXVzZSBtb2RlbCBpZCBwcm9wZXJ0eSBuYW1lIGlzIG5vdCBkZWZpbmVkLmApO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJvd0l0ZW0gPSBldmVudD8ucm93SXRlbSBhcyBhbnk7XG4gICAgICAgIHJldHVybiB0aGlzLnRyaWdnZXJBY3Rpb24oYWN0aW9uLCByb3dJdGVtW2FjdGlvbi5tb2RlbC5pZFByb3BlcnR5TmFtZV0sIGV2ZW50LnJvd0l0ZW0sIHVuZGVmaW5lZCwgcm91dGUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRyaWdnZXJzIGFjdGlvbiB3aXRoIG9wdGlvbmFsIGRhdGEgKGl0ZW0sIGl0ZW1JZCwgLi4uKSBhbmQgY3VycmVudGx5IGFjdGl2YXRlZCByb3V0ZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBhY3Rpb24gQWN0aW9uLlxuICAgICAqIEBwYXJhbSBhY3Rpb25EYXRhIE9wdGlvbmFsIGFjdGlvbiBkYXRhLlxuICAgICAqIEBwYXJhbSByb3V0ZSBPcHRpb25hbCBhY3RpdmF0ZWQgcm91dGUuXG4gICAgICovXG4gICAgcHVibGljIHRyaWdnZXJBY3Rpb248VCwgUz4oXG4gICAgICAgIGFjdGlvbjogQWN0aW9uRGVzY3JpcHRvcjxUPixcbiAgICAgICAgaXRlbUlkPzogSWRUeXBlLFxuICAgICAgICBpdGVtPzogVCxcbiAgICAgICAgYWN0aW9uRGF0YT86IEFjdGlvbkRhdGEsXG4gICAgICAgIHJvdXRlPzogQWN0aXZhdGVkUm91dGUsXG4gICAgICAgIHZpZXdDb250YWluZXI/OiBJVmlld0NvbnRhaW5lcjxULCBTPixcbiAgICAgICAgc291cmNlQ29tcG9uZW50PzogYW55XG4gICAgKTogT2JzZXJ2YWJsZTxBY3Rpb25UcmlnZ2VyUmVzdWx0PFQsIFMsIElEYXRhUHJvdmlkZXI8VCwgUz4+PiB7XG4gICAgICAgIGlmIChhY3Rpb24uYWN0aXZhdGlvblRyaWdnZXIgPT09IEFjdGlvbkFjdGl2YXRpb25UcmlnZ2VyRW51bS5PblJvdXRlKSB7XG4gICAgICAgICAgICBjb25zdCBiYXNlVXJsID0gdGhpcy5yb3V0ZXIudXJsLnNwbGl0KCc/JylbMF07XG4gICAgICAgICAgICBjb25zdCBwYXJzZWRVcmw6IFVybFRyZWUgPSB0aGlzLnJvdXRlci5wYXJzZVVybCh0aGlzLnJvdXRlci51cmwpO1xuICAgICAgICAgICAgbGV0IGFjdGlvblVybCA9IGFjdGlvbi5yb3V0ZVVybCA/PyAnJztcbiAgICAgICAgICAgIC8vIFRPRE86IGRvbnQgc3RyaXAgJy8nLCBidXQgdXNlIGl0IGFjY29yZGluZ2x5IHdpdGggQW5ndWxhcidzIHJvdXRlciBwYXR0ZXJucyAoLywgLi8sIC4uLylcbiAgICAgICAgICAgIGlmIChhY3Rpb25Vcmwuc3RhcnRzV2l0aCgnLycpKSB7XG4gICAgICAgICAgICAgICAgYWN0aW9uVXJsID0gYWN0aW9uVXJsLnN1YnN0cmluZygxKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgYWN0aW9uVXJsU2VnbWVudHMgPSB0aGlzLmxpbmtGb3JtYXR0ZXIudHJhbnNmb3JtKGFjdGlvblVybCwgaXRlbUlkLCBpdGVtLCBhY3Rpb24ubW9kZWwsIGFjdGlvbkRhdGEpO1xuXG4gICAgICAgICAgICByZXR1cm4gb2YoXG4gICAgICAgICAgICAgICAgbmV3IEFjdGlvblRyaWdnZXJSZXN1bHQ8VCwgUywgSURhdGFQcm92aWRlcjxULCBTPj4oXG4gICAgICAgICAgICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgZnJvbSh0aGlzLnJvdXRlci5uYXZpZ2F0ZShbYmFzZVVybCwgLi4uYWN0aW9uVXJsU2VnbWVudHNdLCB7cmVsYXRpdmVUbzogcm91dGUsIHF1ZXJ5UGFyYW1zOiBwYXJzZWRVcmwucXVlcnlQYXJhbXN9KSlcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYWN0aXZhdGVBY3Rpb24oYWN0aW9uLCBpdGVtSWQsIGl0ZW0sIGFjdGlvbkRhdGEsIHZpZXdDb250YWluZXIsIHNvdXJjZUNvbXBvbmVudCkucGlwZShtYXAocmVzID0+IG5ldyBBY3Rpb25UcmlnZ2VyUmVzdWx0PFQsIFMsIElEYXRhUHJvdmlkZXI8VCwgUz4+KHJlcykpKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBkZWFjdGl2YXRlQWN0aW9uPFQ+KGFjdGlvbjogQWN0aW9uRGVzY3JpcHRvcjxUPikge1xuICAgICAgICBpZiAodGhpcy5uYXZpZ2F0aW9uU2VydmljZS5nZXRQcmV2aW91c0xvY2F0aW9uKCkpIHtcbiAgICAgICAgICAgIC8vIHRoZXJlIGFyZSBpbnRlcm5hbCBoaXN0b3J5IHJlY29yZHMsIHNvIGJhY2sgY2FuIGJlIG5vcm1hbGx5IGNhbGxlZFxuICAgICAgICAgICAgdGhpcy5uYXZpZ2F0aW9uU2VydmljZS5iYWNrKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyB0aGVyZSBpcyBubyBpbnRlcm5hbCBoaXN0b3J5IHJlY29yZHMsIGZpZ3VyZSBvdXQgdGhlIGJhc2UgdXJsIGJ5IGVsaW1pbmF0aW5nIGFjdGlvbiBzcGVjaWZpYyB1cmxcbiAgICAgICAgICAgIGxldCB1cmwgPSB0aGlzLm5hdmlnYXRpb25TZXJ2aWNlLmdldEN1cnJlbnRMb2NhdGlvbigpO1xuICAgICAgICAgICAgaWYgKCF1cmwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm5hdmlnYXRpb25TZXJ2aWNlLmJhY2soKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKHVybC5zdGFydHNXaXRoKCcvJykpIHtcbiAgICAgICAgICAgICAgICAgICAgdXJsID0gdXJsLnN1YnN0cmluZygxKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgdXJsUGF0aFNlZ21lbnRzID0gdXJsLnNwbGl0KCc/JylbMF0uc3BsaXQoJyMnKVswXS5zcGxpdCgnLycpO1xuICAgICAgICAgICAgICAgIGxldCBhY3Rpb25VcmwgPSBhY3Rpb24/LnJvdXRlVXJsID8/ICcnO1xuICAgICAgICAgICAgICAgIGlmIChhY3Rpb25Vcmwuc3RhcnRzV2l0aCgnLycpKSB7XG4gICAgICAgICAgICAgICAgICAgIGFjdGlvblVybCA9IGFjdGlvblVybC5zdWJzdHJpbmcoMSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IGFjdGlvblVybFNlZ21lbnRzID0gYWN0aW9uVXJsLnNwbGl0KCcvJyk7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVkaXJlY3RVcmwgPSB1cmxQYXRoU2VnbWVudHMuc2xpY2UoMCwgdXJsUGF0aFNlZ21lbnRzLmxlbmd0aCAtIGFjdGlvblVybFNlZ21lbnRzLmxlbmd0aCkuam9pbignLycpO1xuICAgICAgICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoYC8ke3JlZGlyZWN0VXJsfWAsIHtyZXBsYWNlVXJsOiB0cnVlfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgdG9NbmdBY3Rpb25FcnJvcihlcnJvcj86IGFueSk6IE1uZ0Vycm9yIHtcbiAgICAgICAgY29uc3QgYWN0aW9uRXJyb3I6IE1uZ0Vycm9yID0ge1xuICAgICAgICAgICAgbmFtZTogZXJyb3I/Lm5hbWUgPz8gJ1Vua25vd25FcnJvcicsXG4gICAgICAgICAgICBtZXNzYWdlOiBlcnJvcj8ubWVzc2FnZSA/PyAnVW5rbm93biBlcnJvcicsXG4gICAgICAgICAgICBjYXVzZTogZXJyb3JcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgSHR0cEVycm9yUmVzcG9uc2UpIHtcbiAgICAgICAgICAgIGFjdGlvbkVycm9yLnN0YXR1cyA9IGVycm9yLnN0YXR1cztcbiAgICAgICAgICAgIGFjdGlvbkVycm9yLnN0YXR1c0Rlc2NyaXB0aW9uID0gZXJyb3Iuc3RhdHVzVGV4dDtcbiAgICAgICAgICAgIGFjdGlvbkVycm9yLnVybCA9IGVycm9yLnVybCA/PyB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuZXJyb3JNYXBwZXIudG9NbmdFcnJvcihlcnJvciwgYWN0aW9uRXJyb3IpO1xuICAgIH1cbn1cbiJdfQ==
|
|
@@ -2,6 +2,6 @@ export * from './editor-formly.util';
|
|
|
2
2
|
export * from './enum.util';
|
|
3
3
|
export * from './i18n.util';
|
|
4
4
|
export * from './model.util';
|
|
5
|
-
export * from './
|
|
5
|
+
export * from './notification.util';
|
|
6
6
|
export * from './type.util';
|
|
7
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
7
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL3V0aWxzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsc0JBQXNCLENBQUM7QUFDckMsY0FBYyxhQUFhLENBQUM7QUFDNUIsY0FBYyxhQUFhLENBQUM7QUFDNUIsY0FBYyxjQUFjLENBQUM7QUFDN0IsY0FBYyxxQkFBcUIsQ0FBQztBQUNwQyxjQUFjLGFBQWEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vZWRpdG9yLWZvcm1seS51dGlsJztcbmV4cG9ydCAqIGZyb20gJy4vZW51bS51dGlsJztcbmV4cG9ydCAqIGZyb20gJy4vaTE4bi51dGlsJztcbmV4cG9ydCAqIGZyb20gJy4vbW9kZWwudXRpbCc7XG5leHBvcnQgKiBmcm9tICcuL25vdGlmaWNhdGlvbi51dGlsJztcbmV4cG9ydCAqIGZyb20gJy4vdHlwZS51dGlsJztcbiJdfQ==
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { I18nUtil } from './i18n.util';
|
|
2
|
+
export class NotificationUtil {
|
|
3
|
+
static notification(viewContainer, title, message, severity = 'success') {
|
|
4
|
+
const messageService = viewContainer?.getMessageService();
|
|
5
|
+
const notification = { severity: severity, summary: title, detail: message, life: severity === 'error' ? 10000 : 5000 };
|
|
6
|
+
if (messageService) {
|
|
7
|
+
messageService.add(notification);
|
|
8
|
+
}
|
|
9
|
+
else {
|
|
10
|
+
console.warn(`No message service was provided through view container, message will not be displayed.`);
|
|
11
|
+
}
|
|
12
|
+
return notification;
|
|
13
|
+
}
|
|
14
|
+
static tableNotificationError(translationService, table, error, viewContainer) {
|
|
15
|
+
const params = {};
|
|
16
|
+
if (error?.message) {
|
|
17
|
+
params.errorMessage = `: ${error.message}`;
|
|
18
|
+
}
|
|
19
|
+
else {
|
|
20
|
+
params.errorMessage = '.';
|
|
21
|
+
}
|
|
22
|
+
console.log(params);
|
|
23
|
+
const tableErrorTitle = I18nUtil.instantModelTranslation(translationService, table.model, 'table.error.title', undefined, undefined, 'general.error', params) ?? undefined;
|
|
24
|
+
const tableErrorMessage = I18nUtil.instantModelTranslation(translationService, table.model, 'table.error.message', undefined, undefined, 'general.errorMessage', params) ?? undefined;
|
|
25
|
+
return NotificationUtil.notification(viewContainer, tableErrorTitle, tableErrorMessage, 'error');
|
|
26
|
+
}
|
|
27
|
+
static actionNotificationSuccess(translationService, action, functionName, customTitleKey, customMessageKey, viewContainer, item) {
|
|
28
|
+
const actionSuccessTitle = I18nUtil.instantActionTranslation(translationService, action, 'success.title', customTitleKey, item, 'general.success', functionName) ?? undefined;
|
|
29
|
+
const actionSuccessMessage = I18nUtil.instantActionTranslation(translationService, action, 'success.message', customMessageKey, item, 'general.successMessage', functionName) ?? undefined;
|
|
30
|
+
return NotificationUtil.notification(viewContainer, actionSuccessTitle, actionSuccessMessage);
|
|
31
|
+
}
|
|
32
|
+
static actionNotificationError(translationService, action, error, functionName, viewContainer, item) {
|
|
33
|
+
const params = {
|
|
34
|
+
errorMessage: I18nUtil.instantErrorI18nTranslation(translationService, error)
|
|
35
|
+
};
|
|
36
|
+
const actionErrorTitle = I18nUtil.instantActionTranslation(translationService, action, 'error.title', action.runNotificationErrorTitle, item, 'general.error', functionName, params) ??
|
|
37
|
+
undefined;
|
|
38
|
+
const actionErrorMessage = I18nUtil.instantActionTranslation(translationService, action, 'error.message', action.runNotificationErrorMessage, item, 'general.errorMessage', functionName, params) ?? undefined;
|
|
39
|
+
return NotificationUtil.notification(viewContainer, actionErrorTitle, actionErrorMessage, 'error');
|
|
40
|
+
}
|
|
41
|
+
static getFormEditorWarningMessage(translationService, title, message) {
|
|
42
|
+
const actionErrorTitle = translationService.instant(title) ?? undefined;
|
|
43
|
+
const actionErrorMessage = translationService.instant(message) ?? undefined;
|
|
44
|
+
return { severity: 'warn', summary: actionErrorTitle, detail: actionErrorMessage };
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm90aWZpY2F0aW9uLnV0aWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL3V0aWxzL25vdGlmaWNhdGlvbi51dGlsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUtBLE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFFckMsTUFBTSxPQUFPLGdCQUFnQjtJQUNsQixNQUFNLENBQUMsWUFBWSxDQUFDLGFBQXdDLEVBQUUsS0FBYyxFQUFFLE9BQWdCLEVBQUUsV0FBeUMsU0FBUztRQUNySixNQUFNLGNBQWMsR0FBRyxhQUFhLEVBQUUsaUJBQWlCLEVBQUUsQ0FBQztRQUMxRCxNQUFNLFlBQVksR0FBWSxFQUFDLFFBQVEsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxRQUFRLEtBQUssT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBQyxDQUFDO1FBQy9ILElBQUksY0FBYyxFQUFFO1lBQ2hCLGNBQWMsQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLENBQUM7U0FDcEM7YUFBTTtZQUNILE9BQU8sQ0FBQyxJQUFJLENBQUMsd0ZBQXdGLENBQUMsQ0FBQztTQUMxRztRQUNELE9BQU8sWUFBWSxDQUFDO0lBQ3hCLENBQUM7SUFFTSxNQUFNLENBQUMsc0JBQXNCLENBQUMsa0JBQW9DLEVBQUUsS0FBMkIsRUFBRSxLQUFVLEVBQUUsYUFBd0M7UUFDeEosTUFBTSxNQUFNLEdBQVEsRUFBRSxDQUFDO1FBQ3ZCLElBQUksS0FBSyxFQUFFLE9BQU8sRUFBRTtZQUNoQixNQUFNLENBQUMsWUFBWSxHQUFHLEtBQUssS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDO1NBQzlDO2FBQU07WUFDSCxNQUFNLENBQUMsWUFBWSxHQUFHLEdBQUcsQ0FBQztTQUM3QjtRQUNELE9BQU8sQ0FBQyxHQUFHLENBQUMsTUFB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bnNsYXRlL2NvcmUnO1xuaW1wb3J0IHtNZXNzYWdlfSBmcm9tICdwcmltZW5nL2FwaSc7XG5cbmltcG9ydCB7QWN0aW9uRGVzY3JpcHRvciwgVGFibGVEZXNjcmlwdG9yfSBmcm9tICcuLi9kZXNjcmlwdG9ycyc7XG5pbXBvcnQge0lWaWV3Q29udGFpbmVyLCBNbmdFcnJvcn0gZnJvbSAnLi4vbW9kZWxzJztcbmltcG9ydCB7STE4blV0aWx9IGZyb20gJy4vaTE4bi51dGlsJztcblxuZXhwb3J0IGNsYXNzIE5vdGlmaWNhdGlvblV0aWwge1xuICAgIHB1YmxpYyBzdGF0aWMgbm90aWZpY2F0aW9uKHZpZXdDb250YWluZXI/OiBJVmlld0NvbnRhaW5lcjxhbnksIGFueT4sIHRpdGxlPzogc3RyaW5nLCBtZXNzYWdlPzogc3RyaW5nLCBzZXZlcml0eTogJ3N1Y2Nlc3MnIHwgJ3dhcm4nIHwgJ2Vycm9yJyA9ICdzdWNjZXNzJyk6IE1lc3NhZ2Uge1xuICAgICAgICBjb25zdCBtZXNzYWdlU2VydmljZSA9IHZpZXdDb250YWluZXI/LmdldE1lc3NhZ2VTZXJ2aWNlKCk7XG4gICAgICAgIGNvbnN0IG5vdGlmaWNhdGlvbjogTWVzc2FnZSA9IHtzZXZlcml0eTogc2V2ZXJpdHksIHN1bW1hcnk6IHRpdGxlLCBkZXRhaWw6IG1lc3NhZ2UsIGxpZmU6IHNldmVyaXR5ID09PSAnZXJyb3InID8gMTAwMDAgOiA1MDAwfTtcbiAgICAgICAgaWYgKG1lc3NhZ2VTZXJ2aWNlKSB7XG4gICAgICAgICAgICBtZXNzYWdlU2VydmljZS5hZGQobm90aWZpY2F0aW9uKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybihgTm8gbWVzc2FnZSBzZXJ2aWNlIHdhcyBwcm92aWRlZCB0aHJvdWdoIHZpZXcgY29udGFpbmVyLCBtZXNzYWdlIHdpbGwgbm90IGJlIGRpc3BsYXllZC5gKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbm90aWZpY2F0aW9uO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgdGFibGVOb3RpZmljYXRpb25FcnJvcih0cmFuc2xhdGlvblNlcnZpY2U6IFRyYW5zbGF0ZVNlcnZpY2UsIHRhYmxlOiBUYWJsZURlc2NyaXB0b3I8YW55PiwgZXJyb3I6IGFueSwgdmlld0NvbnRhaW5lcj86IElWaWV3Q29udGFpbmVyPGFueSwgYW55Pik6IE1lc3NhZ2Uge1xuICAgICAgICBjb25zdCBwYXJhbXM6IGFueSA9IHt9O1xuICAgICAgICBpZiAoZXJyb3I/Lm1lc3NhZ2UpIHtcbiAgICAgICAgICAgIHBhcmFtcy5lcnJvck1lc3NhZ2UgPSBgOiAke2Vycm9yLm1lc3NhZ2V9YDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHBhcmFtcy5lcnJvck1lc3NhZ2UgPSAnLic7XG4gICAgICAgIH1cbiAgICAgICAgY29uc29sZS5sb2cocGFyYW1zKTtcbiAgICAgICAgY29uc3QgdGFibGVFcnJvclRpdGxlID0gSTE4blV0aWwuaW5zdGFudE1vZGVsVHJhbnNsYXRpb24odHJhbnNsYXRpb25TZXJ2aWNlLCB0YWJsZS5tb2RlbCwgJ3RhYmxlLmVycm9yLnRpdGxlJywgdW5kZWZpbmVkLCB1bmRlZmluZWQsICdnZW5lcmFsLmVycm9yJywgcGFyYW1zKSA/PyB1bmRlZmluZWQ7XG4gICAgICAgIGNvbnN0IHRhYmxlRXJyb3JNZXNzYWdlID1cbiAgICAgICAgICAgIEkxOG5VdGlsLmluc3RhbnRNb2RlbFRyYW5zbGF0aW9uKHRyYW5zbGF0aW9uU2VydmljZSwgdGFibGUubW9kZWwsICd0YWJsZS5lcnJvci5tZXNzYWdlJywgdW5kZWZpbmVkLCB1bmRlZmluZWQsICdnZW5lcmFsLmVycm9yTWVzc2FnZScsIHBhcmFtcykgPz8gdW5kZWZpbmVkO1xuICAgICAgICByZXR1cm4gTm90aWZpY2F0aW9uVXRpbC5ub3RpZmljYXRpb24odmlld0NvbnRhaW5lciwgdGFibGVFcnJvclRpdGxlLCB0YWJsZUVycm9yTWVzc2FnZSwgJ2Vycm9yJyk7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBhY3Rpb25Ob3RpZmljYXRpb25TdWNjZXNzKFxuICAgICAgICB0cmFuc2xhdGlvblNlcnZpY2U6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgICAgIGFjdGlvbjogQWN0aW9uRGVzY3JpcHRvcjxhbnk+LFxuICAgICAgICBmdW5jdGlvbk5hbWU6IHN0cmluZyxcbiAgICAgICAgY3VzdG9tVGl0bGVLZXk/OiBzdHJpbmcsXG4gICAgICAgIGN1c3RvbU1lc3NhZ2VLZXk/OiBzdHJpbmcsXG4gICAgICAgIHZpZXdDb250YWluZXI/OiBJVmlld0NvbnRhaW5lcjxhbnksIGFueT4sXG4gICAgICAgIGl0ZW0/OiBhbnlcbiAgICApOiBNZXNzYWdlIHtcbiAgICAgICAgY29uc3QgYWN0aW9uU3VjY2Vzc1RpdGxlID1cbiAgICAgICAgICAgIEkxOG5VdGlsLmluc3RhbnRBY3Rpb25UcmFuc2xhdGlvbih0cmFuc2xhdGlvblNlcnZpY2UsIGFjdGlvbiwgJ3N1Y2Nlc3MudGl0bGUnLCBjdXN0b21UaXRsZUtleSwgaXRlbSwgJ2dlbmVyYWwuc3VjY2VzcycsIGZ1bmN0aW9uTmFtZSkgPz8gdW5kZWZpbmVkO1xuICAgICAgICBjb25zdCBhY3Rpb25TdWNjZXNzTWVzc2FnZSA9XG4gICAgICAgICAgICBJMThuVXRpbC5pbnN0YW50QWN0aW9uVHJhbnNsYXRpb24odHJhbnNsYXRpb25TZXJ2aWNlLCBhY3Rpb24sICdzdWNjZXNzLm1lc3NhZ2UnLCBjdXN0b21NZXNzYWdlS2V5LCBpdGVtLCAnZ2VuZXJhbC5zdWNjZXNzTWVzc2FnZScsIGZ1bmN0aW9uTmFtZSkgPz8gdW5kZWZpbmVkO1xuICAgICAgICByZXR1cm4gTm90aWZpY2F0aW9uVXRpbC5ub3RpZmljYXRpb24odmlld0NvbnRhaW5lciwgYWN0aW9uU3VjY2Vzc1RpdGxlLCBhY3Rpb25TdWNjZXNzTWVzc2FnZSk7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBhY3Rpb25Ob3RpZmljYXRpb25FcnJvcihcbiAgICAgICAgdHJhbnNsYXRpb25TZXJ2aWNlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgICAgICBhY3Rpb246IEFjdGlvbkRlc2NyaXB0b3I8YW55PixcbiAgICAgICAgZXJyb3I6IE1uZ0Vycm9yLFxuICAgICAgICBmdW5jdGlvbk5hbWU6IHN0cmluZyxcbiAgICAgICAgdmlld0NvbnRhaW5lcj86IElWaWV3Q29udGFpbmVyPGFueSwgYW55PixcbiAgICAgICAgaXRlbT86IGFueVxuICAgICk6IE1lc3NhZ2Uge1xuICAgICAgICBjb25zdCBwYXJhbXMgPSB7XG4gICAgICAgICAgICBlcnJvck1lc3NhZ2U6IEkxOG5VdGlsLmluc3RhbnRFcnJvckkxOG5UcmFuc2xhdGlvbih0cmFuc2xhdGlvblNlcnZpY2UsIGVycm9yKVxuICAgICAgICB9O1xuICAgICAgICBjb25zdCBhY3Rpb25FcnJvclRpdGxlID1cbiAgICAgICAgICAgIEkxOG5VdGlsLmluc3RhbnRBY3Rpb25UcmFuc2xhdGlvbih0cmFuc2xhdGlvblNlcnZpY2UsIGFjdGlvbiwgJ2Vycm9yLnRpdGxlJywgYWN0aW9uLnJ1bk5vdGlmaWNhdGlvbkVycm9yVGl0bGUsIGl0ZW0sICdnZW5lcmFsLmVycm9yJywgZnVuY3Rpb25OYW1lLCBwYXJhbXMpID8/XG4gICAgICAgICAgICB1bmRlZmluZWQ7XG4gICAgICAgIGNvbnN0IGFjdGlvbkVycm9yTWVzc2FnZSA9XG4gICAgICAgICAgICBJMThuVXRpbC5pbnN0YW50QWN0aW9uVHJhbnNsYXRpb24oXG4gICAgICAgICAgICAgICAgdHJhbnNsYXRpb25TZXJ2aWNlLFxuICAgICAgICAgICAgICAgIGFjdGlvbixcbiAgICAgICAgICAgICAgICAnZXJyb3IubWVzc2FnZScsXG4gICAgICAgICAgICAgICAgYWN0aW9uLnJ1bk5vdGlmaWNhdGlvbkVycm9yTWVzc2FnZSxcbiAgICAgICAgICAgICAgICBpdGVtLFxuICAgICAgICAgICAgICAgICdnZW5lcmFsLmVycm9yTWVzc2FnZScsXG4gICAgICAgICAgICAgICAgZnVuY3Rpb25OYW1lLFxuICAgICAgICAgICAgICAgIHBhcmFtc1xuICAgICAgICAgICAgKSA/PyB1bmRlZmluZWQ7XG4gICAgICAgIHJldHVybiBOb3RpZmljYXRpb25VdGlsLm5vdGlmaWNhdGlvbih2aWV3Q29udGFpbmVyLCBhY3Rpb25FcnJvclRpdGxlLCBhY3Rpb25FcnJvck1lc3NhZ2UsICdlcnJvcicpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgZ2V0Rm9ybUVkaXRvcldhcm5pbmdNZXNzYWdlKHRyYW5zbGF0aW9uU2VydmljZTogVHJhbnNsYXRlU2VydmljZSwgdGl0bGU6IHN0cmluZywgbWVzc2FnZTogc3RyaW5nKTogTWVzc2FnZSB7XG4gICAgICAgIGNvbnN0IGFjdGlvbkVycm9yVGl0bGUgPSB0cmFuc2xhdGlvblNlcnZpY2UuaW5zdGFudCh0aXRsZSkgPz8gdW5kZWZpbmVkO1xuICAgICAgICBjb25zdCBhY3Rpb25FcnJvck1lc3NhZ2UgPSB0cmFuc2xhdGlvblNlcnZpY2UuaW5zdGFudChtZXNzYWdlKSA/PyB1bmRlZmluZWQ7XG4gICAgICAgIHJldHVybiB7c2V2ZXJpdHk6ICd3YXJuJywgc3VtbWFyeTogYWN0aW9uRXJyb3JUaXRsZSwgZGV0YWlsOiBhY3Rpb25FcnJvck1lc3NhZ2V9O1xuICAgIH1cbn1cbiJdfQ==
|