@veloceapps/sdk 8.0.0-135 → 8.0.0-136
Sign up to get free protection for your applications and to get access to all the features.
- package/core/modules/configuration/services/configuration-state.service.d.ts +3 -1
- package/core/services/flow-info.service.d.ts +1 -0
- package/core/services/flow-state.service.d.ts +1 -0
- package/esm2020/core/modules/configuration/services/configuration-state.service.mjs +29 -13
- package/esm2020/core/services/flow-info.service.mjs +4 -1
- package/esm2020/core/services/flow-state.service.mjs +16 -10
- package/esm2020/src/pages/product/product.component.mjs +2 -2
- package/esm2020/src/services/flow-router.service.mjs +3 -3
- package/esm2020/src/services/flow.service.mjs +7 -6
- package/fesm2015/veloceapps-sdk-core.mjs +50 -24
- package/fesm2015/veloceapps-sdk-core.mjs.map +1 -1
- package/fesm2015/veloceapps-sdk.mjs +9 -8
- package/fesm2015/veloceapps-sdk.mjs.map +1 -1
- package/fesm2020/veloceapps-sdk-core.mjs +45 -20
- package/fesm2020/veloceapps-sdk-core.mjs.map +1 -1
- package/fesm2020/veloceapps-sdk.mjs +9 -8
- package/fesm2020/veloceapps-sdk.mjs.map +1 -1
- package/package.json +1 -1
- package/src/services/flow.service.d.ts +1 -1
@@ -1,7 +1,7 @@
|
|
1
1
|
import { FlowStateApiService, QuoteApiService } from '@veloceapps/api';
|
2
2
|
import { ToastService } from '@veloceapps/components';
|
3
3
|
import { FlowStateExecutionRequestDTO, FlowStateExecutionResult, FlowStateSelectorResponse } from '@veloceapps/core';
|
4
|
-
import { BehaviorSubject, Observable } from 'rxjs';
|
4
|
+
import { BehaviorSubject, Observable, Subject } from 'rxjs';
|
5
5
|
import { ConfigurationRuntimeService } from './configuration-runtime.service';
|
6
6
|
import { ConfigurationService } from './configuration.service';
|
7
7
|
import { FlowInfoService, FlowStateService, QuoteDraftService } from '../../../services';
|
@@ -19,10 +19,12 @@ export declare class ConfigurationStateService {
|
|
19
19
|
private flowStateApiService;
|
20
20
|
private quoteApiService;
|
21
21
|
private readonly NOT_INITIALIZED;
|
22
|
+
private executedFunctions;
|
22
23
|
private stateId;
|
23
24
|
private ownerId;
|
24
25
|
private subscriptions;
|
25
26
|
isInitialized$: BehaviorSubject<boolean>;
|
27
|
+
canceledConfiguration$: Subject<void>;
|
26
28
|
constructor(configurationRuntimeService: ConfigurationRuntimeService, configurationService: ConfigurationService, quoteDraftService: QuoteDraftService, toastService: ToastService, flowStateService: FlowStateService, flowInfoService: FlowInfoService, flowConfigurationService: FlowConfigurationService, flowStateApiService: FlowStateApiService, quoteApiService: QuoteApiService);
|
27
29
|
init$(): Observable<void>;
|
28
30
|
cleanup(): void;
|
@@ -16,6 +16,7 @@ export declare class FlowInfoService {
|
|
16
16
|
get flow(): Flow | null;
|
17
17
|
set flow(value: Flow | null);
|
18
18
|
get isLegacy(): boolean;
|
19
|
+
get isStateful(): boolean;
|
19
20
|
private readonly defaultTemplates;
|
20
21
|
private flowSubj$;
|
21
22
|
constructor(flowsApiService: FlowsApiService, templatesApiService: UITemplatesApiService, customizationService?: FlowCustomization | undefined);
|
@@ -24,6 +24,7 @@ export declare class FlowStateService {
|
|
24
24
|
pricePlans$: Observable<Dictionary<CompiledPricePlan>>;
|
25
25
|
activeMetrics$: Observable<MetricRule[]>;
|
26
26
|
private readonly NOT_INITIALIZED;
|
27
|
+
private executedFunctions;
|
27
28
|
private _hasStatefulUnsavedChanges;
|
28
29
|
private stateId$;
|
29
30
|
private processors;
|
@@ -3,7 +3,7 @@ import { FlowStateApiService, QuoteApiService } from '@veloceapps/api';
|
|
3
3
|
import { ToastService, ToastType } from '@veloceapps/components';
|
4
4
|
import { EntityUtil, UUID, } from '@veloceapps/core';
|
5
5
|
import { assign, cloneDeep } from 'lodash';
|
6
|
-
import { BehaviorSubject, filter, finalize, map, of, switchMap, tap } from 'rxjs';
|
6
|
+
import { BehaviorSubject, filter, finalize, map, of, Subject, switchMap, takeUntil, tap } from 'rxjs';
|
7
7
|
import { ConfigurationRuntimeService } from './configuration-runtime.service';
|
8
8
|
import { ConfigurationService } from './configuration.service';
|
9
9
|
import { FlowInfoService, FlowStateService, QuoteDraftService } from '../../../services';
|
@@ -27,10 +27,12 @@ export class ConfigurationStateService {
|
|
27
27
|
this.flowStateApiService = flowStateApiService;
|
28
28
|
this.quoteApiService = quoteApiService;
|
29
29
|
this.NOT_INITIALIZED = Symbol();
|
30
|
+
this.executedFunctions = {};
|
30
31
|
this.stateId = null;
|
31
32
|
this.ownerId = '';
|
32
33
|
this.subscriptions = {};
|
33
34
|
this.isInitialized$ = new BehaviorSubject(false);
|
35
|
+
this.canceledConfiguration$ = new Subject();
|
34
36
|
}
|
35
37
|
init$() {
|
36
38
|
let request$;
|
@@ -40,7 +42,10 @@ export class ConfigurationStateService {
|
|
40
42
|
else {
|
41
43
|
request$ = this.initStateless$();
|
42
44
|
}
|
43
|
-
return request$.pipe(finalize(() =>
|
45
|
+
return request$.pipe(finalize(() => {
|
46
|
+
this.isInitialized$.next(true);
|
47
|
+
this.canceledConfiguration$ = new Subject();
|
48
|
+
}));
|
44
49
|
}
|
45
50
|
cleanup() {
|
46
51
|
this.stateId = null;
|
@@ -109,10 +114,13 @@ export class ConfigurationStateService {
|
|
109
114
|
}
|
110
115
|
}
|
111
116
|
return this.subscriptions[requestId].data$.pipe(filter(data => data != this.NOT_INITIALIZED), map(data => data), finalize(() => {
|
117
|
+
if (!this.subscriptions[requestId]) {
|
118
|
+
return;
|
119
|
+
}
|
112
120
|
if (!this.subscriptions[requestId].data$.observed) {
|
113
121
|
delete this.subscriptions[requestId];
|
114
122
|
}
|
115
|
-
}));
|
123
|
+
}), takeUntil(this.canceledConfiguration$));
|
116
124
|
}
|
117
125
|
saveConfiguration(quoteId, flow) {
|
118
126
|
if (this.isStatefulConfiguration) {
|
@@ -155,6 +163,9 @@ export class ConfigurationStateService {
|
|
155
163
|
if (!this.isInitialized$.value) {
|
156
164
|
return of(undefined);
|
157
165
|
}
|
166
|
+
this.canceledConfiguration$.next();
|
167
|
+
this.canceledConfiguration$.complete();
|
168
|
+
this.subscriptions = {};
|
158
169
|
this.isInitialized$.next(false);
|
159
170
|
if (!this.isInitialized$.value || !this.isStatefulConfiguration) {
|
160
171
|
return of(undefined);
|
@@ -238,24 +249,29 @@ export class ConfigurationStateService {
|
|
238
249
|
}
|
239
250
|
executeActionScript(request, processor) {
|
240
251
|
const { actions } = this.configurationRuntimeService.runtimeContext?.uiDefinitionContainer ?? {};
|
241
|
-
const
|
242
|
-
if (!script) {
|
252
|
+
const configurationProcessor = actions?.find(action => action.apiName === processor.apiName);
|
253
|
+
if (!configurationProcessor?.script) {
|
243
254
|
return request;
|
244
255
|
}
|
245
|
-
return this.executeProcessorScript(request,
|
256
|
+
return this.executeProcessorScript(request, configurationProcessor, processor.inputData);
|
246
257
|
}
|
247
258
|
executeSelectorScript(request, processor) {
|
248
259
|
const { selectors } = this.configurationRuntimeService.runtimeContext?.uiDefinitionContainer ?? {};
|
249
|
-
const
|
250
|
-
if (!script) {
|
260
|
+
const configurationProcessor = selectors?.find(selector => selector.apiName === processor.apiName);
|
261
|
+
if (!configurationProcessor?.script) {
|
251
262
|
return null;
|
252
263
|
}
|
253
|
-
return this.executeProcessorScript(request,
|
264
|
+
return this.executeProcessorScript(request, configurationProcessor, processor.inputData);
|
254
265
|
}
|
255
|
-
executeProcessorScript(request,
|
256
|
-
|
266
|
+
executeProcessorScript(request, configurationProcessor, inputData) {
|
267
|
+
let functionToExecute = this.executedFunctions[configurationProcessor.apiName];
|
268
|
+
if (!functionToExecute) {
|
269
|
+
functionToExecute = new Function(`${configurationProcessor.script}\nreturn transform;`)();
|
270
|
+
this.executedFunctions[configurationProcessor.apiName] = functionToExecute;
|
271
|
+
}
|
272
|
+
return functionToExecute({
|
257
273
|
request,
|
258
|
-
inputData
|
274
|
+
inputData,
|
259
275
|
});
|
260
276
|
}
|
261
277
|
}
|
@@ -264,4 +280,4 @@ ConfigurationStateService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.
|
|
264
280
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: ConfigurationStateService, decorators: [{
|
265
281
|
type: Injectable
|
266
282
|
}], ctorParameters: function () { return [{ type: i1.ConfigurationRuntimeService }, { type: i2.ConfigurationService }, { type: i3.QuoteDraftService }, { type: i4.ToastService }, { type: i3.FlowStateService }, { type: i3.FlowInfoService }, { type: i5.FlowConfigurationService }, { type: i6.FlowStateApiService }, { type: i6.QuoteApiService }]; } });
|
267
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlndXJhdGlvbi1zdGF0ZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9zZGsvY29yZS9tb2R1bGVzL2NvbmZpZ3VyYXRpb24vc2VydmljZXMvY29uZmlndXJhdGlvbi1zdGF0ZS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLG1CQUFtQixFQUFFLGVBQWUsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDakUsT0FBTyxFQUVMLFVBQVUsRUFNVixJQUFJLEdBQ0wsTUFBTSxrQkFBa0IsQ0FBQztBQUMxQixPQUFPLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUMzQyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsR0FBRyxFQUFjLEVBQUUsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzlGLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQzlFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQy9ELE9BQU8sRUFBa0IsZUFBZSxFQUFFLGdCQUFnQixFQUFFLGlCQUFpQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFFekcsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sMEJBQTBCLENBQUM7Ozs7Ozs7O0FBUXBFLE1BQU0sT0FBTyx5QkFBeUI7SUFRcEMsWUFDVSwyQkFBd0QsRUFDeEQsb0JBQTBDLEVBQzFDLGlCQUFvQyxFQUNwQyxZQUEwQixFQUMxQixnQkFBa0MsRUFDbEMsZUFBZ0MsRUFDaEMsd0JBQWtELEVBQ2xELG1CQUF3QyxF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QUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsT0FBTyxLQUFLLFNBQVMsQ0FBQyxPQUFPLENBQUMsRUFBRSxNQUFNLENBQUM7UUFDM0YsSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNYLE9BQU8sSUFBSSxDQUFDO1NBQ2I7UUFFRCxPQUFPLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUMzRSxDQUFDO0lBRU8sc0JBQXNCLENBQUMsT0FBNkIsRUFBRSxNQUFjLEVBQUUsU0FBa0I7UUFDOUYsT0FBTyxJQUFJLFFBQVEsQ0FBQyxHQUFHLE1BQU0scUJBQXFCLENBQUMsRUFBRSxDQUFDO1lBQ3BELE9BQU87WUFDUCxTQUFTLEVBQUUsU0FBUztTQUNyQixDQUFDLENBQUM7SUFDTCxDQUFDOztzSEFuVFUseUJBQXlCOzBIQUF6Qix5QkFBeUI7MkZBQXpCLHlCQUF5QjtrQkFEckMsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZsb3dTdGF0ZUFwaVNlcnZpY2UsIFF1b3RlQXBpU2VydmljZSB9IGZyb20gJ0B2ZWxvY2VhcHBzL2FwaSc7XG5pbXBvcnQgeyBUb2FzdFNlcnZpY2UsIFRvYXN0VHlwZSB9IGZyb20gJ0B2ZWxvY2VhcHBzL2NvbXBvbmVudHMnO1xuaW1wb3J0IHtcbiAgQ29uZmlndXJhdGlvblJlcXVlc3QsXG4gIEVudGl0eVV0aWwsXG4gIEZsb3dTdGF0ZUV4ZWN1dGFibGVEVE8sXG4gIEZsb3dTdGF0ZUV4ZWN1dGlvblJlcXVlc3REVE8sXG4gIEZsb3dTdGF0ZUV4ZWN1dGlvblJlc3VsdCxcbiAgRmxvd1N0YXRlU2VsZWN0b3JSZXNwb25zZSxcbiAgTGluZUl0ZW0sXG4gIFVVSUQsXG59IGZyb20gJ0B2ZWxvY2VhcHBzL2NvcmUnO1xuaW1wb3J0IHsgYXNzaWduLCBjbG9uZURlZXAgfSBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBmaWx0ZXIsIGZpbmFsaXplLCBtYXAsIE9ic2VydmFibGUsIG9mLCBzd2l0Y2hNYXAsIHRhcCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgQ29uZmlndXJhdGlvblJ1bnRpbWVTZXJ2aWNlIH0gZnJvbSAnLi9jb25maWd1cmF0aW9uLXJ1bnRpbWUuc2VydmljZSc7XG5pbXBvcnQgeyBDb25maWd1cmF0aW9uU2VydmljZSB9IGZyb20gJy4vY29uZmlndXJhdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7IENvbnRleHRTZXJ2aWNlLCBGbG93SW5mb1NlcnZpY2UsIEZsb3dTdGF0ZVNlcnZpY2UsIFF1b3RlRHJhZnRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsgRmxvd1N0YXRlU3Vic2NyaXB0aW9uT3B0aW9ucyB9IGZyb20gJy4uLy4uLy4uL3R5cGVzL2Zsb3ctc3RhdGUudHlwZXMnO1xuaW1wb3J0IHsgRmxvd0NvbmZpZ3VyYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vZmxvdy1jb25maWd1cmF0aW9uJztcblxudHlwZSBTdGF0ZVN1YnNjcmlwdGlvbiA9IHtcbiAgcmVxdWVzdDogRmxvd1N0YXRlRXhlY3V0aW9uUmVxdWVzdERUTztcbiAgZGF0YSQ6IEJlaGF2aW9yU3ViamVjdDx1bmtub3duPjtcbn07XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBDb25maWd1cmF0aW9uU3RhdGVTZXJ2aWNlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBOT1RfSU5JVElBTElaRUQgPSBTeW1ib2woKTtcblxuICBwcml2YXRlIHN0YXRlSWQ6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIG93bmVySWQgPSAnJztcbiAgcHJpdmF0ZSBzdWJzY3JpcHRpb25zOiBSZWNvcmQ8c3RyaW5nLCBTdGF0ZVN1YnNjcmlwdGlvbj4gPSB7fTtcbiAgcHVibGljIGlzSW5pdGlhbGl6ZWQkOiBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGNvbmZpZ3VyYXRpb25SdW50aW1lU2VydmljZTogQ29uZmlndXJhdGlvblJ1bnRpbWVTZXJ2aWNlLFxuICAgIHByaXZhdGUgY29uZmlndXJhdGlvblNlcnZpY2U6IENvbmZpZ3VyYXRpb25TZXJ2aWNlLFxuICAgIHByaXZhdGUgcXVvdGVEcmFmdFNlcnZpY2U6IFF1b3RlRHJhZnRTZXJ2aWNlLFxuICAgIHByaXZhdGUgdG9hc3RTZXJ2aWNlOiBUb2FzdFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBmbG93U3RhdGVTZXJ2aWNlOiBGbG93U3RhdGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgZmxvd0luZm9TZXJ2aWNlOiBGbG93SW5mb1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBmbG93Q29uZmlndXJhdGlvblNlcnZpY2U6IEZsb3dDb25maWd1cmF0aW9uU2VydmljZSxcbiAgICBwcml2YXRlIGZsb3dTdGF0ZUFwaVNlcnZpY2U6IEZsb3dTdGF0ZUFwaVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBxdW90ZUFwaVNlcnZpY2U6IFF1b3RlQXBpU2VydmljZSxcbiAgKSB7fVxuXG4gIHB1YmxpYyBpbml0JCgpOiBPYnNlcnZhYmxlPHZvaWQ+IHtcbiAgICBsZXQgcmVxdWVzdCQ7XG4gICAgaWYgKHRoaXMuZmxvd1N0YXRlU2VydmljZS5zdGF0ZUlkICYmIHRoaXMuaXNTdGF0ZWZ1bENvbmZpZ3VyYXRpb24pIHtcbiAgICAgIHJlcXVlc3QkID0gdGhpcy5pbml0U3RhdGVmdWwkKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlcXVlc3QkID0gdGhpcy5pbml0U3RhdGVsZXNzJCgpO1xuICAgIH1cblxuICAgIHJldHVybiByZXF1ZXN0JC5waXBlKGZpbmFsaXplKCgpID0+IHRoaXMuaXNJbml0aWFsaXplZCQubmV4dCh0cnVlKSkpO1xuICB9XG5cbiAgcHVibGljIGNsZWFudXAoKTogdm9pZCB7XG4gICAgdGhpcy5zdGF0ZUlkID0gbnVsbDtcbiAgICB0aGlzLmNvbmZpZ3VyYXRpb25TZXJ2aWNlLnJlc2V0KCk7XG4gIH1cblxuICBwdWJsaWMgZXhlY3V0ZSQoXG4gICAgcmVxOiBGbG93U3RhdGVFeGVjdXRpb25SZXF1ZXN0RFRPLFxuICAgIGZvcmNlU3Vic2NyaXB0aW9ucz86IGJvb2xlYW4sXG4gICk6IE9ic2VydmFibGU8Rmxvd1N0YXRlRXhlY3V0aW9uUmVzdWx0PiB7XG4gICAgY29uc3QgZnVsbFJlcXVlc3QgPSBjbG9uZURlZXAocmVxKTtcbiAgICBpZiAoZnVsbFJlcXVlc3QuYWN0aW9ucz8ubGVuZ3RoIHx8IGZvcmNlU3Vic2NyaXB0aW9ucykge1xuICAgICAgZm9yIChjb25zdCBzdWJzY3JpcHRpb24gb2YgT2JqZWN0LnZhbHVlcyh0aGlzLnN1YnNjcmlwdGlvbnMpKSB7XG4gICAgICAgIGZ1bGxSZXF1ZXN0LnNlbGVjdG9ycyA9IGFzc2lnbihmdWxsUmVxdWVzdC5zZWxlY3RvcnMsIHN1YnNjcmlwdGlvbi5yZXF1ZXN0LnNlbGVjdG9ycyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgbGV0IGV4ZWN1dGlvbiQ7XG5cbiAgICBpZiAodGhpcy5pc1N0YXRlZnVsQ29uZmlndXJhdGlvbikge1xuICAgICAgZXhlY3V0aW9uJCA9IHRoaXMuZXhlY3V0ZVN0YXRlZnVsJChmdWxsUmVxdWVzdCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGV4ZWN1dGlvbiQgPSB0aGlzLmV4ZWN1dGVTdGF0ZWxlc3MkKGZ1bGxSZXF1ZXN0KTtcbiAgICB9XG5cbiAgICByZXR1cm4gZXhlY3V0aW9uJC5waXBlKHRhcChyZXN1bHQgPT4gdGhpcy5oYW5kbGVTZWxlY3RvcnNSZXNwb25zZShyZXN1bHQuc2VsZWN0b3JzKSkpO1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVTZWxlY3RvcnNSZXNwb25zZShzZWxlY3RvcnM6IFJlY29yZDxzdHJpbmcsIEZsb3dTdGF0ZVNlbGVjdG9yUmVzcG9uc2U8dW5rbm93bj4+KTogdm9pZCB7XG4gICAgT2JqZWN0LmVudHJpZXMoc2VsZWN0b3JzKS5mb3JFYWNoKChbcmVxdWVzdElkLCBzZWxlY3RvclJlc3VsdF0pID0+IHtcbiAgICAgIGlmICghc2VsZWN0b3JSZXN1bHQuc3VjY2Vzcykge1xuICAgICAgICB0aGlzLnRvYXN0U2VydmljZS5hZGQoeyBzZXZlcml0eTogVG9hc3RUeXBlLmVycm9yLCBzdW1tYXJ5OiBzZWxlY3RvclJlc3VsdC5lcnJvck1lc3NhZ2UgfSk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHN1YnNjcmlwdGlvbiQgPSB0aGlzLnN1YnNjcmlwdGlvbnNbcmVxdWVzdElkXT8uZGF0YSQ7XG4gICAgICBpZiAoc3Vic2NyaXB0aW9uJCkge1xuICAgICAgICBzdWJzY3JpcHRpb24kLm5leHQoc2VsZWN0b3JSZXN1bHQpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGRpc3BhdGNoJChhY3Rpb25OYW1lOiBzdHJpbmcsIGlucHV0RGF0YTogdW5rbm93biA9IHt9KTogT2JzZXJ2YWJsZTxGbG93U3RhdGVFeGVjdXRpb25SZXN1bHQ+IHtcbiAgICByZXR1cm4gdGhpcy5leGVjdXRlJCh7IGFjdGlvbnM6IFt7IGFwaU5hbWU6IGFjdGlvbk5hbWUsIGlucHV0RGF0YSwgb3duZXJJZDogdGhpcy5vd25lcklkIH1dIH0pO1xuICB9XG5cbiAgcHVibGljIHNlbGVjdCQ8UmVzcG9uc2UgPSB1bmtub3duPihcbiAgICBzZWxlY3Rvck5hbWU6IHN0cmluZyxcbiAgICBpbnB1dERhdGE6IHVua25vd24gPSB7fSxcbiAgKTogT2JzZXJ2YWJsZTxGbG93U3RhdGVTZWxlY3RvclJlc3BvbnNlPFJlc3BvbnNlPj4ge1xuICAgIGNvbnN0IHJlcXVlc3RJZCA9IFVVSUQuVVVJRCgpO1xuXG4gICAgcmV0dXJuIHRoaXMuZXhlY3V0ZSQoe1xuICAgICAgc2VsZWN0b3JzOiB7XG4gICAgICAgIFtyZXF1ZXN0SWRdOiB7XG4gICAgICAgICAgYXBpTmFtZTogc2VsZWN0b3JOYW1lLFxuICAgICAgICAgIGlucHV0RGF0YSxcbiAgICAgICAgICBvd25lcklkOiB0aGlzLm93bmVySWQsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0pLnBpcGUobWFwKHJlc3BvbnNlID0+IHJlc3BvbnNlLnNlbGVjdG9yc1tyZXF1ZXN0SWRdIGFzIEZsb3dTdGF0ZVNlbGVjdG9yUmVzcG9uc2U8UmVzcG9uc2U+KSk7XG4gIH1cblxuICBwdWJsaWMgc3Vic2NyaWJlJDxSZXNwb25zZSA9IHVua25vd24+KFxuICAgIHNlbGVjdG9yTmFtZTogc3RyaW5nLFxuICAgIGlucHV0RGF0YTogdW5rbm93biA9IHt9LFxuICAgIG9wdGlvbnM/OiBGbG93U3RhdGVTdWJzY3JpcHRpb25PcHRpb25zLFxuICApOiBPYnNlcnZhYmxlPEZsb3dTdGF0ZVNlbGVjdG9yUmVzcG9uc2U8UmVzcG9uc2U+PiB7XG4gICAgY29uc3QgcmVxdWVzdElkID0gVVVJRC5VVUlEKCk7XG5cbiAgICBpZiAoIXRoaXMuc3Vic2NyaXB0aW9uc1tyZXF1ZXN0SWRdKSB7XG4gICAgICBjb25zdCByZXF1ZXN0OiBGbG93U3RhdGVFeGVjdXRpb25SZXF1ZXN0RFRPID0ge1xuICAgICAgICBzZWxlY3RvcnM6IHtcbiAgICAgICAgICBbcmVxdWVzdElkXToge1xuICAgICAgICAgICAgYXBpTmFtZTogc2VsZWN0b3JOYW1lLFxuICAgICAgICAgICAgaW5wdXREYXRhLFxuICAgICAgICAgICAgb3duZXJJZDogdGhpcy5vd25lcklkLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9O1xuXG4gICAgICB0aGlzLnN1YnNjcmlwdGlvbnNbcmVxdWVzdElkXSA9IHtcbiAgICAgICAgcmVxdWVzdCxcbiAgICAgICAgZGF0YSQ6IG5ldyBCZWhhdmlvclN1YmplY3Q8dW5rbm93bj4odGhpcy5OT1RfSU5JVElBTElaRUQpLFxuICAgICAgfTtcblxuICAgICAgaWYgKCFvcHRpb25zPy5jb2xkKSB7XG4gICAgICAgIHRoaXMuZXhlY3V0ZSQocmVxdWVzdCkuc3Vic2NyaWJlKCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuc3Vic2NyaXB0aW9uc1tyZXF1ZXN0SWRdLmRhdGEkLnBpcGUoXG4gICAgICBmaWx0ZXIoZGF0YSA9PiBkYXRhICE9IHRoaXMuTk9UX0lOSVRJQUxJWkVEKSxcbiAgICAgIG1hcChkYXRhID0+IGRhdGEgYXMgRmxvd1N0YXRlU2VsZWN0b3JSZXNwb25zZTxSZXNwb25zZT4pLFxuICAgICAgZmluYWxpemUoKCkgPT4ge1xuICAgICAgICBpZiAoIXRoaXMuc3Vic2NyaXB0aW9uc1tyZXF1ZXN0SWRdLmRhdGEkLm9ic2VydmVkKSB7XG4gICAgICAgICAgZGVsZXRlIHRoaXMuc3Vic2NyaXB0aW9uc1tyZXF1ZXN0SWRdO1xuICAgICAgICB9XG4gICAgICB9KSxcbiAgICApO1xuICB9XG5cbiAgcHVibGljIHNhdmVDb25maWd1cmF0aW9uKHF1b3RlSWQ/OiBzdHJpbmcsIGZsb3c/OiBib29sZWFuKTogT2JzZXJ2YWJsZTx7IHF1b3RlSWQ6IHN0cmluZyB9PiB7XG4gICAgaWYgKHRoaXMuaXNTdGF0ZWZ1bENvbmZpZ3VyYXRpb24pIHtcbiAgICAgIHJldHVybiB0aGlzLmZsb3dTdGF0ZUFwaVNlcnZpY2VcbiAgICAgICAgLnNhdmVDb25maWd1cmF0aW9uKHRoaXMuZmxvd1N0YXRlU2VydmljZS5zdGF0ZUlkID8/ICcnLCB0aGlzLnN0YXRlSWQgPz8gJycpXG4gICAgICAgIC5waXBlKHN3aXRjaE1hcChyID0+IHRoaXMuZmxvd1N0YXRlU2VydmljZS5leGVjdXRlUmVxdWVzdCQoe30sIHRydWUpLnBpcGUobWFwKCgpID0+IHIpKSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoIWZsb3cpIHtcbiAgICAgICAgaWYgKCFxdW90ZUlkKSB7XG4gICAgICAgICAgcmV0dXJuIG9mKHsgcXVvdGVJZDogJycgfSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgcm9vdExpbmVJdGVtID0gdGhpcy5jb25maWd1cmF0aW9uU2VydmljZS5nZXRTbmFwc2hvdCgpO1xuICAgICAgICBjb25zdCBjdXJyZW50U3RhdGUgPSByb290TGluZUl0ZW0gPyBbcm9vdExpbmVJdGVtXSA6IFtdO1xuXG4gICAgICAgIHJldHVybiB0aGlzLnF1b3RlQXBpU2VydmljZVxuICAgICAgICAgIC5nZXRRdW90ZURyYWZ0KHF1b3RlSWQpXG4gICAgICAgICAgLnBpcGUoc3dpdGNoTWFwKHF1b3RlRHJhZnQgPT4gdGhpcy5xdW90ZUFwaVNlcnZpY2UudXBzZXJ0UXVvdGUoeyAuLi5xdW90ZURyYWZ0LCBjdXJyZW50U3RhdGUgfSkpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHF1b3RlRHJhZnQgPSB0aGlzLnF1b3RlRHJhZnRTZXJ2aWNlLnF1b3RlRHJhZnQ7XG4gICAgICAgIGNvbnN0IGxpbmVJdGVtID0gdGhpcy5jb25maWd1cmF0aW9uU2VydmljZS5nZXRTbmFwc2hvdCgpO1xuXG4gICAgICAgIGlmICghcXVvdGVEcmFmdCB8fCAhbGluZUl0ZW0pIHtcbiAgICAgICAgICByZXR1cm4gb2YoeyBxdW90ZUlkOiAnJyB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGlzTmV3TGluZUl0ZW0gPSBxdW90ZURyYWZ0LmN1cnJlbnRTdGF0ZS5ldmVyeShsaSA9PiBsaS5pZCAhPT0gbGluZUl0ZW0uaWQpO1xuXG4gICAgICAgIGxldCB1cGRhdGVkU3RhdGU6IExpbmVJdGVtW107XG4gICAgICAgIGlmIChpc05ld0xpbmVJdGVtKSB7XG4gICAgICAgICAgdXBkYXRlZFN0YXRlID0gWy4uLnF1b3RlRHJhZnQuY3VycmVudFN0YXRlLCBsaW5lSXRlbV07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdXBkYXRlZFN0YXRlID0gcXVvdGVEcmFmdC5jdXJyZW50U3RhdGUubWFwKGxpID0+IChsaS5pZCA9PT0gbGluZUl0ZW0uaWQgPyBsaW5lSXRlbSA6IGxpKSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5mbG93Q29uZmlndXJhdGlvblNlcnZpY2VcbiAgICAgICAgICAuY2FsY3VsYXRlJCh7IC4uLnF1b3RlRHJhZnQsIGN1cnJlbnRTdGF0ZTogdXBkYXRlZFN0YXRlIH0pXG4gICAgICAgICAgLnBpcGUobWFwKCgpID0+ICh7IHF1b3RlSWQ6ICcnIH0pKSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGNhbmNlbENvbmZpZ3VyYXRpb24oKTogT2JzZXJ2YWJsZTx2b2lkPiB7XG4gICAgaWYgKCF0aGlzLmlzSW5pdGlhbGl6ZWQkLnZhbHVlKSB7XG4gICAgICByZXR1cm4gb2YodW5kZWZpbmVkKTtcbiAgICB9XG4gICAgdGhpcy5pc0luaXRpYWxpemVkJC5uZXh0KGZhbHNlKTtcbiAgICBpZiAoIXRoaXMuaXNJbml0aWFsaXplZCQudmFsdWUgfHwgIXRoaXMuaXNTdGF0ZWZ1bENvbmZpZ3VyYXRpb24pIHtcbiAgICAgIHJldHVybiBvZih1bmRlZmluZWQpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5mbG93U3RhdGVBcGlTZXJ2aWNlLmNhbmNlbENvbmZpZ3VyYXRpb24odGhpcy5mbG93U3RhdGVTZXJ2aWNlLnN0YXRlSWQgPz8gJycsIHRoaXMuc3RhdGVJZCA/PyAnJyk7XG4gIH1cblxuICBwcml2YXRlIGdldCBpc1N0YXRlZnVsQ29uZmlndXJhdGlvbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5mbG93SW5mb1NlcnZpY2UuZmxvdz8ucHJvcGVydGllcy5zdGF0ZWZ1bCA/PyBmYWxzZTtcbiAgfVxuXG4gIHByaXZhdGUgaW5pdFN0YXRlZnVsJCgpOiBPYnNlcnZhYmxlPHZvaWQ+IHtcbiAgICB0aGlzLm93bmVySWQgPSB0aGlzLmNvbmZpZ3VyYXRpb25SdW50aW1lU2VydmljZS5ydW50aW1lQ29udGV4dD8udWlEZWZpbml0aW9uQ29udGFpbmVyPy5pZCA/PyAnJztcbiAgICBjb25zdCBsaW5lSXRlbUlkID0gdGhpcy5jb25maWd1cmF0aW9uUnVudGltZVNlcnZpY2UucnVudGltZUNvbnRleHQ/LnByb3BlcnRpZXM/LmxpbmVJdGVtSWQ7XG4gICAgaWYgKCF0aGlzLmZsb3dTdGF0ZVNlcnZpY2Uuc3RhdGVJZCkge1xuICAgICAgcmV0dXJuIG9mKHVuZGVmaW5lZCk7XG4gICAgfVxuXG4gICAgY29uc3QgY29udGFpbmVyID0gdGhpcy5jb25maWd1cmF0aW9uUnVudGltZVNlcnZpY2UucnVudGltZUNvbnRleHQ/LnVpRGVmaW5pdGlvbkNvbnRhaW5lcjtcblxuICAgIGNvbnN0IGxpbmVJdGVtID0gdGhpcy5jb25maWd1cmF0aW9uU2VydmljZS5nZW5lcmF0ZUxpbmVJdGVtKCk7XG5cbiAgICBsZXQgcmVxdWVzdCQ6IE9ic2VydmFibGU8Rmxvd1N0YXRlRXhlY3V0aW9uUmVzdWx0PjtcblxuICAgIGlmICghbGluZUl0ZW1JZCkge1xuICAgICAgcmVxdWVzdCQgPSB0aGlzLmZsb3dTdGF0ZUFwaVNlcnZpY2UubmV3Q29uZmlndXJhdGlvbih0aGlzLmZsb3dTdGF0ZVNlcnZpY2Uuc3RhdGVJZCwge1xuICAgICAgICBsaW5lSXRlbSxcbiAgICAgICAgYWN0aW9uc092ZXJyaWRlOiBjb250YWluZXI/LmFjdGlvbnM/Lm1hcChwcm9jZXNzb3IgPT4gKHsgLi4ucHJvY2Vzc29yLCBvd25lcklkOiB0aGlzLm93bmVySWQgfSkpLFxuICAgICAgICBzZWxlY3RvcnNPdmVycmlkZTogY29udGFpbmVyPy5zZWxlY3RvcnM/Lm1hcChwcm9jZXNzb3IgPT4gKHsgLi4ucHJvY2Vzc29yLCBvd25lcklkOiB0aGlzLm93bmVySWQgfSkpLFxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlcXVlc3QkID0gdGhpcy5mbG93U3RhdGVBcGlTZXJ2aWNlLnN0YXJ0Q29uZmlndXJhdGlvbih0aGlzLmZsb3dTdGF0ZVNlcnZpY2Uuc3RhdGVJZCwge1xuICAgICAgICBsaW5lSXRlbUlkLFxuICAgICAgICBhY3Rpb25zT3ZlcnJpZGU6IGNvbnRhaW5lcj8uYWN0aW9ucz8ubWFwKHByb2Nlc3NvciA9PiAoeyAuLi5wcm9jZXNzb3IsIG93bmVySWQ6IHRoaXMub3duZXJJZCB9KSksXG4gICAgICAgIHNlbGVjdG9yc092ZXJyaWRlOiBjb250YWluZXI/LnNlbGVjdG9ycz8ubWFwKHByb2Nlc3NvciA9PiAoeyAuLi5wcm9jZXNzb3IsIG93bmVySWQ6IHRoaXMub3duZXJJZCB9KSksXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVxdWVzdCQucGlwZShcbiAgICAgIG1hcChyID0+IHtcbiAgICAgICAgdGhpcy5zdGF0ZUlkID0gci5zdGF0ZUlkO1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfSksXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgaW5pdFN0YXRlbGVzcyQoKTogT2JzZXJ2YWJsZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMuY29uZmlndXJhdGlvblNlcnZpY2UuY29uZmlndXJlKCkucGlwZShtYXAoKCkgPT4gdW5kZWZpbmVkKSk7XG4gIH1cblxuICBwcml2YXRlIGV4ZWN1dGVTdGF0ZWxlc3MkKHJlcXVlc3Q6IEZsb3dTdGF0ZUV4ZWN1dGlvblJlcXVlc3REVE8pOiBPYnNlcnZhYmxlPEZsb3dTdGF0ZUV4ZWN1dGlvblJlc3VsdD4ge1xuICAgIHJldHVybiBvZih1bmRlZmluZWQpLnBpcGUoXG4gICAgICBzd2l0Y2hNYXAoKCkgPT4ge1xuICAgICAgICAvLyBBcHBseSBhY3Rpb25zIGFuZCBleGVjdXRlIGNvbmZpZ3VyYXRpb24vcHJpY2UgY2FsbFxuICAgICAgICAvLyBObyBuZWVkIHRvIHJ1biBjb25maWd1cmF0aW9uIGlmIG5vIGFjdGlvbnMgaW4gdGhlIHJlcXVlc3RcbiAgICAgICAgaWYgKCFyZXF1ZXN0LmFjdGlvbnM/Lmxlbmd0aCkge1xuICAgICAgICAgIHJldHVybiBvZih1bmRlZmluZWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGNvbmZpZ3VyYXRpb25SZXF1ZXN0ID0gdGhpcy5jb25maWd1cmF0aW9uU2VydmljZS5nZW5lcmF0ZVJlcXVlc3QoKTtcbiAgICAgICAgcmVxdWVzdC5hY3Rpb25zLmZvckVhY2goYWN0aW9uID0+IHtcbiAgICAgICAgICBjb25maWd1cmF0aW9uUmVxdWVzdCA9IHRoaXMuZXhlY3V0ZUFjdGlvblNjcmlwdChjb25maWd1cmF0aW9uUmVxdWVzdCwgYWN0aW9uKSA/PyBjb25maWd1cmF0aW9uUmVxdWVzdDtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuY29uZmlndXJhdGlvblNlcnZpY2UuY29uZmlndXJlUmVxdWVzdCQoY29uZmlndXJhdGlvblJlcXVlc3QpO1xuICAgICAgfSksXG4gICAgICBtYXAoKCkgPT4ge1xuICAgICAgICAvLyBSdW4gc2VsZWN0b3JzIGFuZCBhcHBseSB0aGVtIHRvIHRoZSBzdGF0ZVxuICAgICAgICBjb25zdCBmaW5hbENvbmZpZ3VyYXRpb25SZXF1ZXN0ID0gdGhpcy5jb25maWd1cmF0aW9uU2VydmljZS5nZW5lcmF0ZVJlcXVlc3QoZmFsc2UpO1xuXG4gICAgICAgIGNvbnN0IHNlbGVjdG9yc1Jlc3VsdCA9IEVudGl0eVV0aWwuZW50cmllcyhyZXF1ZXN0LnNlbGVjdG9ycyA/PyB7fSkucmVkdWNlKFxuICAgICAgICAgIChyZXN1bHQ6IEZsb3dTdGF0ZUV4ZWN1dGlvblJlc3VsdCwgW2tleSwgc2VsZWN0b3JdKSA9PiB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICByZXN1bHQuc2VsZWN0b3JzW2tleV0gPSB7XG4gICAgICAgICAgICAgICAgc3VjY2VzczogdHJ1ZSxcbiAgICAgICAgICAgICAgICByZXN1bHQ6IHRoaXMuZXhlY3V0ZVNlbGVjdG9yU2NyaXB0KGZpbmFsQ29uZmlndXJhdGlvblJlcXVlc3QsIHNlbGVjdG9yKSxcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgcmVzdWx0LnNlbGVjdG9yc1trZXldID0ge1xuICAgICAgICAgICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgICAgICAgICAgICAgIGVycm9yTWVzc2FnZTogU3RyaW5nKGUpLFxuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgIH0sXG4gICAgICAgICAgeyBzdGF0ZUlkOiAnJywgc2VsZWN0b3JzOiB7fSB9LFxuICAgICAgICApO1xuXG4gICAgICAgIHJldHVybiBzZWxlY3RvcnNSZXN1bHQ7XG4gICAgICB9KSxcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBleGVjdXRlU3RhdGVmdWwkKHJlcXVlc3Q6IEZsb3dTdGF0ZUV4ZWN1dGlvblJlcXVlc3REVE8pOiBPYnNlcnZhYmxlPEZsb3dTdGF0ZUV4ZWN1dGlvblJlc3VsdD4ge1xuICAgIGlmICghdGhpcy5mbG93U3RhdGVTZXJ2aWNlLnN0YXRlSWQgfHwgIXRoaXMuc3RhdGVJZCkge1xuICAgICAgcmV0dXJuIG9mKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuZmxvd1N0YXRlQXBpU2VydmljZS5leGVjdXRlQ29uZmlndXJhdGlvbih0aGlzLmZsb3dTdGF0ZVNlcnZpY2Uuc3RhdGVJZCwgdGhpcy5zdGF0ZUlkLCByZXF1ZXN0KS5waXBlKFxuICAgICAgdGFwKHJlc3BvbnNlID0+IHtcbiAgICAgICAgdGhpcy5zdGF0ZUlkID0gcmVzcG9uc2Uuc3RhdGVJZDtcbiAgICAgIH0pLFxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGV4ZWN1dGVBY3Rpb25TY3JpcHQocmVxdWVzdDogQ29uZmlndXJhdGlvblJlcXVlc3QsIHByb2Nlc3NvcjogRmxvd1N0YXRlRXhlY3V0YWJsZURUTyk6IENvbmZpZ3VyYXRpb25SZXF1ZXN0IHtcbiAgICBjb25zdCB7IGFjdGlvbnMgfSA9IHRoaXMuY29uZmlndXJhdGlvblJ1bnRpbWVTZXJ2aWNlLnJ1bnRpbWVDb250ZXh0Py51aURlZmluaXRpb25Db250YWluZXIgPz8ge307XG4gICAgY29uc3Qgc2NyaXB0ID0gYWN0aW9ucz8uZmluZChhY3Rpb24gPT4gYWN0aW9uLmFwaU5hbWUgPT09IHByb2Nlc3Nvci5hcGlOYW1lKT8uc2NyaXB0O1xuXG4gICAgaWYgKCFzY3JpcHQpIHtcbiAgICAgIHJldHVybiByZXF1ZXN0O1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmV4ZWN1dGVQcm9jZXNzb3JTY3JpcHQocmVxdWVzdCwgc2NyaXB0LCBwcm9jZXNzb3IuaW5wdXREYXRhKSBhcyBDb25maWd1cmF0aW9uUmVxdWVzdDtcbiAgfVxuXG4gIHByaXZhdGUgZXhlY3V0ZVNlbGVjdG9yU2NyaXB0KHJlcXVlc3Q6IENvbmZpZ3VyYXRpb25SZXF1ZXN0LCBwcm9jZXNzb3I6IEZsb3dTdGF0ZUV4ZWN1dGFibGVEVE8pOiB1bmtub3duIHtcbiAgICBjb25zdCB7IHNlbGVjdG9ycyB9ID0gdGhpcy5jb25maWd1cmF0aW9uUnVudGltZVNlcnZpY2UucnVudGltZUNvbnRleHQ/LnVpRGVmaW5pdGlvbkNvbnRhaW5lciA/PyB7fTtcbiAgICBjb25zdCBzY3JpcHQgPSBzZWxlY3RvcnM/LmZpbmQoc2VsZWN0b3IgPT4gc2VsZWN0b3IuYXBpTmFtZSA9PT0gcHJvY2Vzc29yLmFwaU5hbWUpPy5zY3JpcHQ7XG4gICAgaWYgKCFzY3JpcHQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmV4ZWN1dGVQcm9jZXNzb3JTY3JpcHQocmVxdWVzdCwgc2NyaXB0LCBwcm9jZXNzb3IuaW5wdXREYXRhKTtcbiAgfVxuXG4gIHByaXZhdGUgZXhlY3V0ZVByb2Nlc3NvclNjcmlwdChyZXF1ZXN0OiBDb25maWd1cmF0aW9uUmVxdWVzdCwgc2NyaXB0OiBzdHJpbmcsIGlucHV0RGF0YTogdW5rbm93bik6IHVua25vd24ge1xuICAgIHJldHVybiBuZXcgRnVuY3Rpb24oYCR7c2NyaXB0fVxcbnJldHVybiB0cmFuc2Zvcm07YCkoKSh7XG4gICAgICByZXF1ZXN0LFxuICAgICAgaW5wdXREYXRhOiBpbnB1dERhdGEsXG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==
|
283
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlndXJhdGlvbi1zdGF0ZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9zZGsvY29yZS9tb2R1bGVzL2NvbmZpZ3VyYXRpb24vc2VydmljZXMvY29uZmlndXJhdGlvbi1zdGF0ZS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLG1CQUFtQixFQUFFLGVBQWUsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDakUsT0FBTyxFQUdMLFVBQVUsRUFNVixJQUFJLEdBQ0wsTUFBTSxrQkFBa0IsQ0FBQztBQUMxQixPQUFPLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBYyxNQUFNLFFBQVEsQ0FBQztBQUN2RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsR0FBRyxFQUFjLEVBQUUsRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDbEgsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDOUUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDL0QsT0FBTyxFQUFFLGVBQWUsRUFBRSxnQkFBZ0IsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBRXpGLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLDBCQUEwQixDQUFDOzs7Ozs7OztBQVFwRSxNQUFNLE9BQU8seUJBQXlCO0lBV3BDLFlBQ1UsMkJBQXdELEVBQ3hELG9CQUEwQyxFQUMxQyxpQkFBb0MsRUFDcEMsWUFBMEIsRUFDMUIsZ0JBQWtDLEVBQ2xDLGVBQWdDLEVBQ2hDLHdC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RUQsT0FBTyxpQkFBaUIsQ0FBQztZQUN2QixPQUFPO1lBQ1AsU0FBUztTQUNWLENBQUMsQ0FBQztJQUNMLENBQUM7O3NIQS9VVSx5QkFBeUI7MEhBQXpCLHlCQUF5QjsyRkFBekIseUJBQXlCO2tCQURyQyxVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRmxvd1N0YXRlQXBpU2VydmljZSwgUXVvdGVBcGlTZXJ2aWNlIH0gZnJvbSAnQHZlbG9jZWFwcHMvYXBpJztcbmltcG9ydCB7IFRvYXN0U2VydmljZSwgVG9hc3RUeXBlIH0gZnJvbSAnQHZlbG9jZWFwcHMvY29tcG9uZW50cyc7XG5pbXBvcnQge1xuICBDb25maWd1cmF0aW9uUHJvY2Vzc29yLFxuICBDb25maWd1cmF0aW9uUmVxdWVzdCxcbiAgRW50aXR5VXRpbCxcbiAgRmxvd1N0YXRlRXhlY3V0YWJsZURUTyxcbiAgRmxvd1N0YXRlRXhlY3V0aW9uUmVxdWVzdERUTyxcbiAgRmxvd1N0YXRlRXhlY3V0aW9uUmVzdWx0LFxuICBGbG93U3RhdGVTZWxlY3RvclJlc3BvbnNlLFxuICBMaW5lSXRlbSxcbiAgVVVJRCxcbn0gZnJvbSAnQHZlbG9jZWFwcHMvY29yZSc7XG5pbXBvcnQgeyBhc3NpZ24sIGNsb25lRGVlcCwgRGljdGlvbmFyeSB9IGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIGZpbHRlciwgZmluYWxpemUsIG1hcCwgT2JzZXJ2YWJsZSwgb2YsIFN1YmplY3QsIHN3aXRjaE1hcCwgdGFrZVVudGlsLCB0YXAgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IENvbmZpZ3VyYXRpb25SdW50aW1lU2VydmljZSB9IGZyb20gJy4vY29uZmlndXJhdGlvbi1ydW50aW1lLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ29uZmlndXJhdGlvblNlcnZpY2UgfSBmcm9tICcuL2NvbmZpZ3VyYXRpb24uc2VydmljZSc7XG5pbXBvcnQgeyBGbG93SW5mb1NlcnZpY2UsIEZsb3dTdGF0ZVNlcnZpY2UsIFF1b3RlRHJhZnRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsgRmxvd1N0YXRlU3Vic2NyaXB0aW9uT3B0aW9ucyB9IGZyb20gJy4uLy4uLy4uL3R5cGVzL2Zsb3ctc3RhdGUudHlwZXMnO1xuaW1wb3J0IHsgRmxvd0NvbmZpZ3VyYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vZmxvdy1jb25maWd1cmF0aW9uJztcblxudHlwZSBTdGF0ZVN1YnNjcmlwdGlvbiA9IHtcbiAgcmVxdWVzdDogRmxvd1N0YXRlRXhlY3V0aW9uUmVxdWVzdERUTztcbiAgZGF0YSQ6IEJlaGF2aW9yU3ViamVjdDx1bmtub3duPjtcbn07XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBDb25maWd1cmF0aW9uU3RhdGVTZXJ2aWNlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBOT1RfSU5JVElBTElaRUQgPSBTeW1ib2woKTtcblxuICBwcml2YXRlIGV4ZWN1dGVkRnVuY3Rpb25zOiBEaWN0aW9uYXJ5PChwYXlsb2FkOiB7IHJlcXVlc3Q6IENvbmZpZ3VyYXRpb25SZXF1ZXN0OyBpbnB1dERhdGE6IHVua25vd24gfSkgPT4gdW5rbm93bj4gPVxuICAgIHt9O1xuICBwcml2YXRlIHN0YXRlSWQ6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIG93bmVySWQgPSAnJztcbiAgcHJpdmF0ZSBzdWJzY3JpcHRpb25zOiBSZWNvcmQ8c3RyaW5nLCBTdGF0ZVN1YnNjcmlwdGlvbj4gPSB7fTtcbiAgcHVibGljIGlzSW5pdGlhbGl6ZWQkOiBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgcHVibGljIGNhbmNlbGVkQ29uZmlndXJhdGlvbiQ6IFN1YmplY3Q8dm9pZD4gPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgY29uZmlndXJhdGlvblJ1bnRpbWVTZXJ2aWNlOiBDb25maWd1cmF0aW9uUnVudGltZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBjb25maWd1cmF0aW9uU2VydmljZTogQ29uZmlndXJhdGlvblNlcnZpY2UsXG4gICAgcHJpdmF0ZSBxdW90ZURyYWZ0U2VydmljZTogUXVvdGVEcmFmdFNlcnZpY2UsXG4gICAgcHJpdmF0ZSB0b2FzdFNlcnZpY2U6IFRvYXN0U2VydmljZSxcbiAgICBwcml2YXRlIGZsb3dTdGF0ZVNlcnZpY2U6IEZsb3dTdGF0ZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBmbG93SW5mb1NlcnZpY2U6IEZsb3dJbmZvU2VydmljZSxcbiAgICBwcml2YXRlIGZsb3dDb25maWd1cmF0aW9uU2VydmljZTogRmxvd0NvbmZpZ3VyYXRpb25TZXJ2aWNlLFxuICAgIHByaXZhdGUgZmxvd1N0YXRlQXBpU2VydmljZTogRmxvd1N0YXRlQXBpU2VydmljZSxcbiAgICBwcml2YXRlIHF1b3RlQXBpU2VydmljZTogUXVvdGVBcGlTZXJ2aWNlLFxuICApIHt9XG5cbiAgcHVibGljIGluaXQkKCk6IE9ic2VydmFibGU8dm9pZD4ge1xuICAgIGxldCByZXF1ZXN0JDtcbiAgICBpZiAodGhpcy5mbG93U3RhdGVTZXJ2aWNlLnN0YXRlSWQgJiYgdGhpcy5pc1N0YXRlZnVsQ29uZmlndXJhdGlvbikge1xuICAgICAgcmVxdWVzdCQgPSB0aGlzLmluaXRTdGF0ZWZ1bCQoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVxdWVzdCQgPSB0aGlzLmluaXRTdGF0ZWxlc3MkKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlcXVlc3QkLnBpcGUoXG4gICAgICBmaW5hbGl6ZSgoKSA9PiB7XG4gICAgICAgIHRoaXMuaXNJbml0aWFsaXplZCQubmV4dCh0cnVlKTtcbiAgICAgICAgdGhpcy5jYW5jZWxlZENvbmZpZ3VyYXRpb24kID0gbmV3IFN1YmplY3QoKTtcbiAgICAgIH0pLFxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgY2xlYW51cCgpOiB2b2lkIHtcbiAgICB0aGlzLnN0YXRlSWQgPSBudWxsO1xuICAgIHRoaXMuY29uZmlndXJhdGlvblNlcnZpY2UucmVzZXQoKTtcbiAgfVxuXG4gIHB1YmxpYyBleGVjdXRlJChcbiAgICByZXE6IEZsb3dTdGF0ZUV4ZWN1dGlvblJlcXVlc3REVE8sXG4gICAgZm9yY2VTdWJzY3JpcHRpb25zPzogYm9vbGVhbixcbiAgKTogT2JzZXJ2YWJsZTxGbG93U3RhdGVFeGVjdXRpb25SZXN1bHQ+IHtcbiAgICBjb25zdCBmdWxsUmVxdWVzdCA9IGNsb25lRGVlcChyZXEpO1xuICAgIGlmIChmdWxsUmVxdWVzdC5hY3Rpb25zPy5sZW5ndGggfHwgZm9yY2VTdWJzY3JpcHRpb25zKSB7XG4gICAgICBmb3IgKGNvbnN0IHN1YnNjcmlwdGlvbiBvZiBPYmplY3QudmFsdWVzKHRoaXMuc3Vic2NyaXB0aW9ucykpIHtcbiAgICAgICAgZnVsbFJlcXVlc3Quc2VsZWN0b3JzID0gYXNzaWduKGZ1bGxSZXF1ZXN0LnNlbGVjdG9ycywgc3Vic2NyaXB0aW9uLnJlcXVlc3Quc2VsZWN0b3JzKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBsZXQgZXhlY3V0aW9uJDtcblxuICAgIGlmICh0aGlzLmlzU3RhdGVmdWxDb25maWd1cmF0aW9uKSB7XG4gICAgICBleGVjdXRpb24kID0gdGhpcy5leGVjdXRlU3RhdGVmdWwkKGZ1bGxSZXF1ZXN0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgZXhlY3V0aW9uJCA9IHRoaXMuZXhlY3V0ZVN0YXRlbGVzcyQoZnVsbFJlcXVlc3QpO1xuICAgIH1cblxuICAgIHJldHVybiBleGVjdXRpb24kLnBpcGUodGFwKHJlc3VsdCA9PiB0aGlzLmhhbmRsZVNlbGVjdG9yc1Jlc3BvbnNlKHJlc3VsdC5zZWxlY3RvcnMpKSk7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZVNlbGVjdG9yc1Jlc3BvbnNlKHNlbGVjdG9yczogUmVjb3JkPHN0cmluZywgRmxvd1N0YXRlU2VsZWN0b3JSZXNwb25zZTx1bmtub3duPj4pOiB2b2lkIHtcbiAgICBPYmplY3QuZW50cmllcyhzZWxlY3RvcnMpLmZvckVhY2goKFtyZXF1ZXN0SWQsIHNlbGVjdG9yUmVzdWx0XSkgPT4ge1xuICAgICAgaWYgKCFzZWxlY3RvclJlc3VsdC5zdWNjZXNzKSB7XG4gICAgICAgIHRoaXMudG9hc3RTZXJ2aWNlLmFkZCh7IHNldmVyaXR5OiBUb2FzdFR5cGUuZXJyb3IsIHN1bW1hcnk6IHNlbGVjdG9yUmVzdWx0LmVycm9yTWVzc2FnZSB9KTtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgc3Vic2NyaXB0aW9uJCA9IHRoaXMuc3Vic2NyaXB0aW9uc1tyZXF1ZXN0SWRdPy5kYXRhJDtcbiAgICAgIGlmIChzdWJzY3JpcHRpb24kKSB7XG4gICAgICAgIHN1YnNjcmlwdGlvbiQubmV4dChzZWxlY3RvclJlc3VsdCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgZGlzcGF0Y2gkKGFjdGlvbk5hbWU6IHN0cmluZywgaW5wdXREYXRhOiB1bmtub3duID0ge30pOiBPYnNlcnZhYmxlPEZsb3dTdGF0ZUV4ZWN1dGlvblJlc3VsdD4ge1xuICAgIHJldHVybiB0aGlzLmV4ZWN1dGUkKHsgYWN0aW9uczogW3sgYXBpTmFtZTogYWN0aW9uTmFtZSwgaW5wdXREYXRhLCBvd25lcklkOiB0aGlzLm93bmVySWQgfV0gfSk7XG4gIH1cblxuICBwdWJsaWMgc2VsZWN0JDxSZXNwb25zZSA9IHVua25vd24+KFxuICAgIHNlbGVjdG9yTmFtZTogc3RyaW5nLFxuICAgIGlucHV0RGF0YTogdW5rbm93biA9IHt9LFxuICApOiBPYnNlcnZhYmxlPEZsb3dTdGF0ZVNlbGVjdG9yUmVzcG9uc2U8UmVzcG9uc2U+PiB7XG4gICAgY29uc3QgcmVxdWVzdElkID0gVVVJRC5VVUlEKCk7XG5cbiAgICByZXR1cm4gdGhpcy5leGVjdXRlJCh7XG4gICAgICBzZWxlY3RvcnM6IHtcbiAgICAgICAgW3JlcXVlc3RJZF06IHtcbiAgICAgICAgICBhcGlOYW1lOiBzZWxlY3Rvck5hbWUsXG4gICAgICAgICAgaW5wdXREYXRhLFxuICAgICAgICAgIG93bmVySWQ6IHRoaXMub3duZXJJZCxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSkucGlwZShtYXAocmVzcG9uc2UgPT4gcmVzcG9uc2Uuc2VsZWN0b3JzW3JlcXVlc3RJZF0gYXMgRmxvd1N0YXRlU2VsZWN0b3JSZXNwb25zZTxSZXNwb25zZT4pKTtcbiAgfVxuXG4gIHB1YmxpYyBzdWJzY3JpYmUkPFJlc3BvbnNlID0gdW5rbm93bj4oXG4gICAgc2VsZWN0b3JOYW1lOiBzdHJpbmcsXG4gICAgaW5wdXREYXRhOiB1bmtub3duID0ge30sXG4gICAgb3B0aW9ucz86IEZsb3dTdGF0ZVN1YnNjcmlwdGlvbk9wdGlvbnMsXG4gICk6IE9ic2VydmFibGU8Rmxvd1N0YXRlU2VsZWN0b3JSZXNwb25zZTxSZXNwb25zZT4+IHtcbiAgICBjb25zdCByZXF1ZXN0SWQgPSBVVUlELlVVSUQoKTtcblxuICAgIGlmICghdGhpcy5zdWJzY3JpcHRpb25zW3JlcXVlc3RJZF0pIHtcbiAgICAgIGNvbnN0IHJlcXVlc3Q6IEZsb3dTdGF0ZUV4ZWN1dGlvblJlcXVlc3REVE8gPSB7XG4gICAgICAgIHNlbGVjdG9yczoge1xuICAgICAgICAgIFtyZXF1ZXN0SWRdOiB7XG4gICAgICAgICAgICBhcGlOYW1lOiBzZWxlY3Rvck5hbWUsXG4gICAgICAgICAgICBpbnB1dERhdGEsXG4gICAgICAgICAgICBvd25lcklkOiB0aGlzLm93bmVySWQsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH07XG5cbiAgICAgIHRoaXMuc3Vic2NyaXB0aW9uc1tyZXF1ZXN0SWRdID0ge1xuICAgICAgICByZXF1ZXN0LFxuICAgICAgICBkYXRhJDogbmV3IEJlaGF2aW9yU3ViamVjdDx1bmtub3duPih0aGlzLk5PVF9JTklUSUFMSVpFRCksXG4gICAgICB9O1xuXG4gICAgICBpZiAoIW9wdGlvbnM/LmNvbGQpIHtcbiAgICAgICAgdGhpcy5leGVjdXRlJChyZXF1ZXN0KS5zdWJzY3JpYmUoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5zdWJzY3JpcHRpb25zW3JlcXVlc3RJZF0uZGF0YSQucGlwZShcbiAgICAgIGZpbHRlcihkYXRhID0+IGRhdGEgIT0gdGhpcy5OT1RfSU5JVElBTElaRUQpLFxuICAgICAgbWFwKGRhdGEgPT4gZGF0YSBhcyBGbG93U3RhdGVTZWxlY3RvclJlc3BvbnNlPFJlc3BvbnNlPiksXG4gICAgICBmaW5hbGl6ZSgoKSA9PiB7XG4gICAgICAgIGlmICghdGhpcy5zdWJzY3JpcHRpb25zW3JlcXVlc3RJZF0pIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0aGlzLnN1YnNjcmlwdGlvbnNbcmVxdWVzdElkXS5kYXRhJC5vYnNlcnZlZCkge1xuICAgICAgICAgIGRlbGV0ZSB0aGlzLnN1YnNjcmlwdGlvbnNbcmVxdWVzdElkXTtcbiAgICAgICAgfVxuICAgICAgfSksXG4gICAgICB0YWtlVW50aWwodGhpcy5jYW5jZWxlZENvbmZpZ3VyYXRpb24kKSxcbiAgICApO1xuICB9XG5cbiAgcHVibGljIHNhdmVDb25maWd1cmF0aW9uKHF1b3RlSWQ/OiBzdHJpbmcsIGZsb3c/OiBib29sZWFuKTogT2JzZXJ2YWJsZTx7IHF1b3RlSWQ6IHN0cmluZyB9PiB7XG4gICAgaWYgKHRoaXMuaXNTdGF0ZWZ1bENvbmZpZ3VyYXRpb24pIHtcbiAgICAgIHJldHVybiB0aGlzLmZsb3dTdGF0ZUFwaVNlcnZpY2VcbiAgICAgICAgLnNhdmVDb25maWd1cmF0aW9uKHRoaXMuZmxvd1N0YXRlU2VydmljZS5zdGF0ZUlkID8/ICcnLCB0aGlzLnN0YXRlSWQgPz8gJycpXG4gICAgICAgIC5waXBlKHN3aXRjaE1hcChyID0+IHRoaXMuZmxvd1N0YXRlU2VydmljZS5leGVjdXRlUmVxdWVzdCQoe30sIHRydWUpLnBpcGUobWFwKCgpID0+IHIpKSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoIWZsb3cpIHtcbiAgICAgICAgaWYgKCFxdW90ZUlkKSB7XG4gICAgICAgICAgcmV0dXJuIG9mKHsgcXVvdGVJZDogJycgfSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgcm9vdExpbmVJdGVtID0gdGhpcy5jb25maWd1cmF0aW9uU2VydmljZS5nZXRTbmFwc2hvdCgpO1xuICAgICAgICBjb25zdCBjdXJyZW50U3RhdGUgPSByb290TGluZUl0ZW0gPyBbcm9vdExpbmVJdGVtXSA6IFtdO1xuXG4gICAgICAgIHJldHVybiB0aGlzLnF1b3RlQXBpU2VydmljZVxuICAgICAgICAgIC5nZXRRdW90ZURyYWZ0KHF1b3RlSWQpXG4gICAgICAgICAgLnBpcGUoc3dpdGNoTWFwKHF1b3RlRHJhZnQgPT4gdGhpcy5xdW90ZUFwaVNlcnZpY2UudXBzZXJ0UXVvdGUoeyAuLi5xdW90ZURyYWZ0LCBjdXJyZW50U3RhdGUgfSkpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHF1b3RlRHJhZnQgPSB0aGlzLnF1b3RlRHJhZnRTZXJ2aWNlLnF1b3RlRHJhZnQ7XG4gICAgICAgIGNvbnN0IGxpbmVJdGVtID0gdGhpcy5jb25maWd1cmF0aW9uU2VydmljZS5nZXRTbmFwc2hvdCgpO1xuXG4gICAgICAgIGlmICghcXVvdGVEcmFmdCB8fCAhbGluZUl0ZW0pIHtcbiAgICAgICAgICByZXR1cm4gb2YoeyBxdW90ZUlkOiAnJyB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGlzTmV3TGluZUl0ZW0gPSBxdW90ZURyYWZ0LmN1cnJlbnRTdGF0ZS5ldmVyeShsaSA9PiBsaS5pZCAhPT0gbGluZUl0ZW0uaWQpO1xuXG4gICAgICAgIGxldCB1cGRhdGVkU3RhdGU6IExpbmVJdGVtW107XG4gICAgICAgIGlmIChpc05ld0xpbmVJdGVtKSB7XG4gICAgICAgICAgdXBkYXRlZFN0YXRlID0gWy4uLnF1b3RlRHJhZnQuY3VycmVudFN0YXRlLCBsaW5lSXRlbV07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdXBkYXRlZFN0YXRlID0gcXVvdGVEcmFmdC5jdXJyZW50U3RhdGUubWFwKGxpID0+IChsaS5pZCA9PT0gbGluZUl0ZW0uaWQgPyBsaW5lSXRlbSA6IGxpKSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5mbG93Q29uZmlndXJhdGlvblNlcnZpY2VcbiAgICAgICAgICAuY2FsY3VsYXRlJCh7IC4uLnF1b3RlRHJhZnQsIGN1cnJlbnRTdGF0ZTogdXBkYXRlZFN0YXRlIH0pXG4gICAgICAgICAgLnBpcGUobWFwKCgpID0+ICh7IHF1b3RlSWQ6ICcnIH0pKSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGNhbmNlbENvbmZpZ3VyYXRpb24oKTogT2JzZXJ2YWJsZTx2b2lkPiB7XG4gICAgaWYgKCF0aGlzLmlzSW5pdGlhbGl6ZWQkLnZhbHVlKSB7XG4gICAgICByZXR1cm4gb2YodW5kZWZpbmVkKTtcbiAgICB9XG5cbiAgICB0aGlzLmNhbmNlbGVkQ29uZmlndXJhdGlvbiQubmV4dCgpO1xuICAgIHRoaXMuY2FuY2VsZWRDb25maWd1cmF0aW9uJC5jb21wbGV0ZSgpO1xuICAgIHRoaXMuc3Vic2NyaXB0aW9ucyA9IHt9O1xuXG4gICAgdGhpcy5pc0luaXRpYWxpemVkJC5uZXh0KGZhbHNlKTtcbiAgICBpZiAoIXRoaXMuaXNJbml0aWFsaXplZCQudmFsdWUgfHwgIXRoaXMuaXNTdGF0ZWZ1bENvbmZpZ3VyYXRpb24pIHtcbiAgICAgIHJldHVybiBvZih1bmRlZmluZWQpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5mbG93U3RhdGVBcGlTZXJ2aWNlLmNhbmNlbENvbmZpZ3VyYXRpb24odGhpcy5mbG93U3RhdGVTZXJ2aWNlLnN0YXRlSWQgPz8gJycsIHRoaXMuc3RhdGVJZCA/PyAnJyk7XG4gIH1cblxuICBwcml2YXRlIGdldCBpc1N0YXRlZnVsQ29uZmlndXJhdGlvbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5mbG93SW5mb1NlcnZpY2UuZmxvdz8ucHJvcGVydGllcy5zdGF0ZWZ1bCA/PyBmYWxzZTtcbiAgfVxuXG4gIHByaXZhdGUgaW5pdFN0YXRlZnVsJCgpOiBPYnNlcnZhYmxlPHZvaWQ+IHtcbiAgICB0aGlzLm93bmVySWQgPSB0aGlzLmNvbmZpZ3VyYXRpb25SdW50aW1lU2VydmljZS5ydW50aW1lQ29udGV4dD8udWlEZWZpbml0aW9uQ29udGFpbmVyPy5pZCA/PyAnJztcbiAgICBjb25zdCBsaW5lSXRlbUlkID0gdGhpcy5jb25maWd1cmF0aW9uUnVudGltZVNlcnZpY2UucnVudGltZUNvbnRleHQ/LnByb3BlcnRpZXM/LmxpbmVJdGVtSWQ7XG4gICAgaWYgKCF0aGlzLmZsb3dTdGF0ZVNlcnZpY2Uuc3RhdGVJZCkge1xuICAgICAgcmV0dXJuIG9mKHVuZGVmaW5lZCk7XG4gICAgfVxuXG4gICAgY29uc3QgY29udGFpbmVyID0gdGhpcy5jb25maWd1cmF0aW9uUnVudGltZVNlcnZpY2UucnVudGltZUNvbnRleHQ/LnVpRGVmaW5pdGlvbkNvbnRhaW5lcjtcblxuICAgIGNvbnN0IGxpbmVJdGVtID0gdGhpcy5jb25maWd1cmF0aW9uU2VydmljZS5nZW5lcmF0ZUxpbmVJdGVtKCk7XG5cbiAgICBsZXQgcmVxdWVzdCQ6IE9ic2VydmFibGU8Rmxvd1N0YXRlRXhlY3V0aW9uUmVzdWx0PjtcblxuICAgIGlmICghbGluZUl0ZW1JZCkge1xuICAgICAgcmVxdWVzdCQgPSB0aGlzLmZsb3dTdGF0ZUFwaVNlcnZpY2UubmV3Q29uZmlndXJhdGlvbih0aGlzLmZsb3dTdGF0ZVNlcnZpY2Uuc3RhdGVJZCwge1xuICAgICAgICBsaW5lSXRlbSxcbiAgICAgICAgYWN0aW9uc092ZXJyaWRlOiBjb250YWluZXI/LmFjdGlvbnM/Lm1hcChwcm9jZXNzb3IgPT4gKHsgLi4ucHJvY2Vzc29yLCBvd25lcklkOiB0aGlzLm93bmVySWQgfSkpLFxuICAgICAgICBzZWxlY3RvcnNPdmVycmlkZTogY29udGFpbmVyPy5zZWxlY3RvcnM/Lm1hcChwcm9jZXNzb3IgPT4gKHsgLi4ucHJvY2Vzc29yLCBvd25lcklkOiB0aGlzLm93bmVySWQgfSkpLFxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlcXVlc3QkID0gdGhpcy5mbG93U3RhdGVBcGlTZXJ2aWNlLnN0YXJ0Q29uZmlndXJhdGlvbih0aGlzLmZsb3dTdGF0ZVNlcnZpY2Uuc3RhdGVJZCwge1xuICAgICAgICBsaW5lSXRlbUlkLFxuICAgICAgICBhY3Rpb25zT3ZlcnJpZGU6IGNvbnRhaW5lcj8uYWN0aW9ucz8ubWFwKHByb2Nlc3NvciA9PiAoeyAuLi5wcm9jZXNzb3IsIG93bmVySWQ6IHRoaXMub3duZXJJZCB9KSksXG4gICAgICAgIHNlbGVjdG9yc092ZXJyaWRlOiBjb250YWluZXI/LnNlbGVjdG9ycz8ubWFwKHByb2Nlc3NvciA9PiAoeyAuLi5wcm9jZXNzb3IsIG93bmVySWQ6IHRoaXMub3duZXJJZCB9KSksXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVxdWVzdCQucGlwZShcbiAgICAgIG1hcChyID0+IHtcbiAgICAgICAgdGhpcy5zdGF0ZUlkID0gci5zdGF0ZUlkO1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfSksXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgaW5pdFN0YXRlbGVzcyQoKTogT2JzZXJ2YWJsZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMuY29uZmlndXJhdGlvblNlcnZpY2UuY29uZmlndXJlKCkucGlwZShtYXAoKCkgPT4gdW5kZWZpbmVkKSk7XG4gIH1cblxuICBwcml2YXRlIGV4ZWN1dGVTdGF0ZWxlc3MkKHJlcXVlc3Q6IEZsb3dTdGF0ZUV4ZWN1dGlvblJlcXVlc3REVE8pOiBPYnNlcnZhYmxlPEZsb3dTdGF0ZUV4ZWN1dGlvblJlc3VsdD4ge1xuICAgIHJldHVybiBvZih1bmRlZmluZWQpLnBpcGUoXG4gICAgICBzd2l0Y2hNYXAoKCkgPT4ge1xuICAgICAgICAvLyBBcHBseSBhY3Rpb25zIGFuZCBleGVjdXRlIGNvbmZpZ3VyYXRpb24vcHJpY2UgY2FsbFxuICAgICAgICAvLyBObyBuZWVkIHRvIHJ1biBjb25maWd1cmF0aW9uIGlmIG5vIGFjdGlvbnMgaW4gdGhlIHJlcXVlc3RcbiAgICAgICAgaWYgKCFyZXF1ZXN0LmFjdGlvbnM/Lmxlbmd0aCkge1xuICAgICAgICAgIHJldHVybiBvZih1bmRlZmluZWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGNvbmZpZ3VyYXRpb25SZXF1ZXN0ID0gdGhpcy5jb25maWd1cmF0aW9uU2VydmljZS5nZW5lcmF0ZVJlcXVlc3QoKTtcbiAgICAgICAgcmVxdWVzdC5hY3Rpb25zLmZvckVhY2goYWN0aW9uID0+IHtcbiAgICAgICAgICBjb25maWd1cmF0aW9uUmVxdWVzdCA9IHRoaXMuZXhlY3V0ZUFjdGlvblNjcmlwdChjb25maWd1cmF0aW9uUmVxdWVzdCwgYWN0aW9uKSA/PyBjb25maWd1cmF0aW9uUmVxdWVzdDtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuY29uZmlndXJhdGlvblNlcnZpY2UuY29uZmlndXJlUmVxdWVzdCQoY29uZmlndXJhdGlvblJlcXVlc3QpO1xuICAgICAgfSksXG4gICAgICBtYXAoKCkgPT4ge1xuICAgICAgICAvLyBSdW4gc2VsZWN0b3JzIGFuZCBhcHBseSB0aGVtIHRvIHRoZSBzdGF0ZVxuICAgICAgICBjb25zdCBmaW5hbENvbmZpZ3VyYXRpb25SZXF1ZXN0ID0gdGhpcy5jb25maWd1cmF0aW9uU2VydmljZS5nZW5lcmF0ZVJlcXVlc3QoZmFsc2UpO1xuXG4gICAgICAgIGNvbnN0IHNlbGVjdG9yc1Jlc3VsdCA9IEVudGl0eVV0aWwuZW50cmllcyhyZXF1ZXN0LnNlbGVjdG9ycyA/PyB7fSkucmVkdWNlKFxuICAgICAgICAgIChyZXN1bHQ6IEZsb3dTdGF0ZUV4ZWN1dGlvblJlc3VsdCwgW2tleSwgc2VsZWN0b3JdKSA9PiB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICByZXN1bHQuc2VsZWN0b3JzW2tleV0gPSB7XG4gICAgICAgICAgICAgICAgc3VjY2VzczogdHJ1ZSxcbiAgICAgICAgICAgICAgICByZXN1bHQ6IHRoaXMuZXhlY3V0ZVNlbGVjdG9yU2NyaXB0KGZpbmFsQ29uZmlndXJhdGlvblJlcXVlc3QsIHNlbGVjdG9yKSxcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgcmVzdWx0LnNlbGVjdG9yc1trZXldID0ge1xuICAgICAgICAgICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgICAgICAgICAgICAgIGVycm9yTWVzc2FnZTogU3RyaW5nKGUpLFxuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgIH0sXG4gICAgICAgICAgeyBzdGF0ZUlkOiAnJywgc2VsZWN0b3JzOiB7fSB9LFxuICAgICAgICApO1xuXG4gICAgICAgIHJldHVybiBzZWxlY3RvcnNSZXN1bHQ7XG4gICAgICB9KSxcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBleGVjdXRlU3RhdGVmdWwkKHJlcXVlc3Q6IEZsb3dTdGF0ZUV4ZWN1dGlvblJlcXVlc3REVE8pOiBPYnNlcnZhYmxlPEZsb3dTdGF0ZUV4ZWN1dGlvblJlc3VsdD4ge1xuICAgIGlmICghdGhpcy5mbG93U3RhdGVTZXJ2aWNlLnN0YXRlSWQgfHwgIXRoaXMuc3RhdGVJZCkge1xuICAgICAgcmV0dXJuIG9mKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuZmxvd1N0YXRlQXBpU2VydmljZS5leGVjdXRlQ29uZmlndXJhdGlvbih0aGlzLmZsb3dTdGF0ZVNlcnZpY2Uuc3RhdGVJZCwgdGhpcy5zdGF0ZUlkLCByZXF1ZXN0KS5waXBlKFxuICAgICAgdGFwKHJlc3BvbnNlID0+IHtcbiAgICAgICAgdGhpcy5zdGF0ZUlkID0gcmVzcG9uc2Uuc3RhdGVJZDtcbiAgICAgIH0pLFxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGV4ZWN1dGVBY3Rpb25TY3JpcHQocmVxdWVzdDogQ29uZmlndXJhdGlvblJlcXVlc3QsIHByb2Nlc3NvcjogRmxvd1N0YXRlRXhlY3V0YWJsZURUTyk6IENvbmZpZ3VyYXRpb25SZXF1ZXN0IHtcbiAgICBjb25zdCB7IGFjdGlvbnMgfSA9IHRoaXMuY29uZmlndXJhdGlvblJ1bnRpbWVTZXJ2aWNlLnJ1bnRpbWVDb250ZXh0Py51aURlZmluaXRpb25Db250YWluZXIgPz8ge307XG4gICAgY29uc3QgY29uZmlndXJhdGlvblByb2Nlc3NvciA9IGFjdGlvbnM/LmZpbmQoYWN0aW9uID0+IGFjdGlvbi5hcGlOYW1lID09PSBwcm9jZXNzb3IuYXBpTmFtZSk7XG5cbiAgICBpZiAoIWNvbmZpZ3VyYXRpb25Qcm9jZXNzb3I/LnNjcmlwdCkge1xuICAgICAgcmV0dXJuIHJlcXVlc3Q7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuZXhlY3V0ZVByb2Nlc3NvclNjcmlwdChyZXF1ZXN0LCBjb25maWd1cmF0aW9uUHJvY2Vzc29yLCBwcm9jZXNzb3IuaW5wdXREYXRhKSBhcyBDb25maWd1cmF0aW9uUmVxdWVzdDtcbiAgfVxuXG4gIHByaXZhdGUgZXhlY3V0ZVNlbGVjdG9yU2NyaXB0KHJlcXVlc3Q6IENvbmZpZ3VyYXRpb25SZXF1ZXN0LCBwcm9jZXNzb3I6IEZsb3dTdGF0ZUV4ZWN1dGFibGVEVE8pOiB1bmtub3duIHtcbiAgICBjb25zdCB7IHNlbGVjdG9ycyB9ID0gdGhpcy5jb25maWd1cmF0aW9uUnVudGltZVNlcnZpY2UucnVudGltZUNvbnRleHQ/LnVpRGVmaW5pdGlvbkNvbnRhaW5lciA/PyB7fTtcbiAgICBjb25zdCBjb25maWd1cmF0aW9uUHJvY2Vzc29yID0gc2VsZWN0b3JzPy5maW5kKHNlbGVjdG9yID0+IHNlbGVjdG9yLmFwaU5hbWUgPT09IHByb2Nlc3Nvci5hcGlOYW1lKTtcblxuICAgIGlmICghY29uZmlndXJhdGlvblByb2Nlc3Nvcj8uc2NyaXB0KSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5leGVjdXRlUHJvY2Vzc29yU2NyaXB0KHJlcXVlc3QsIGNvbmZpZ3VyYXRpb25Qcm9jZXNzb3IsIHByb2Nlc3Nvci5pbnB1dERhdGEpO1xuICB9XG5cbiAgcHJpdmF0ZSBleGVjdXRlUHJvY2Vzc29yU2NyaXB0KFxuICAgIHJlcXVlc3Q6IENvbmZpZ3VyYXRpb25SZXF1ZXN0LFxuICAgIGNvbmZpZ3VyYXRpb25Qcm9jZXNzb3I6IENvbmZpZ3VyYXRpb25Qcm9jZXNzb3IsXG4gICAgaW5wdXREYXRhOiB1bmtub3duLFxuICApOiB1bmtub3duIHtcbiAgICBsZXQgZnVuY3Rpb25Ub0V4ZWN1dGUgPSB0aGlzLmV4ZWN1dGVkRnVuY3Rpb25zW2NvbmZpZ3VyYXRpb25Qcm9jZXNzb3IuYXBpTmFtZV07XG4gICAgaWYgKCFmdW5jdGlvblRvRXhlY3V0ZSkge1xuICAgICAgZnVuY3Rpb25Ub0V4ZWN1dGUgPSBuZXcgRnVuY3Rpb24oYCR7Y29uZmlndXJhdGlvblByb2Nlc3Nvci5zY3JpcHR9XFxucmV0dXJuIHRyYW5zZm9ybTtgKSgpO1xuICAgICAgdGhpcy5leGVjdXRlZEZ1bmN0aW9uc1tjb25maWd1cmF0aW9uUHJvY2Vzc29yLmFwaU5hbWVdID0gZnVuY3Rpb25Ub0V4ZWN1dGU7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZ1bmN0aW9uVG9FeGVjdXRlKHtcbiAgICAgIHJlcXVlc3QsXG4gICAgICBpbnB1dERhdGEsXG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==
|
@@ -16,6 +16,9 @@ export class FlowInfoService {
|
|
16
16
|
get isLegacy() {
|
17
17
|
return !!this.flow && this.flow?.properties.stateful == null;
|
18
18
|
}
|
19
|
+
get isStateful() {
|
20
|
+
return !!this.flow?.properties.stateful;
|
21
|
+
}
|
19
22
|
constructor(flowsApiService, templatesApiService, customizationService) {
|
20
23
|
this.flowsApiService = flowsApiService;
|
21
24
|
this.templatesApiService = templatesApiService;
|
@@ -93,4 +96,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
|
|
93
96
|
type: Inject,
|
94
97
|
args: [FLOW_CUSTOMIZATION]
|
95
98
|
}] }]; } });
|
96
|
-
//# sourceMappingURL=data:application/json;base64,
|
99
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmxvdy1pbmZvLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL3Nkay9jb3JlL3NlcnZpY2VzL2Zsb3ctaW5mby5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUU3RCxPQUFPLEVBQUUsZUFBZSxFQUFFLHFCQUFxQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDekUsT0FBTyxFQUFzQyxjQUFjLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUN0RixPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBQ2pDLE9BQU8sRUFBRSxlQUFlLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFjLEVBQUUsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLFVBQVUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNwSCxPQUFPLEVBQXFCLGtCQUFrQixFQUFFLE1BQU0sVUFBVSxDQUFDOzs7QUFHakUsTUFBTSxPQUFPLGVBQWU7SUFLMUIsSUFBVyxJQUFJO1FBQ2IsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQztJQUM5QixDQUFDO0lBQ0QsSUFBVyxJQUFJLENBQUMsS0FBa0I7UUFDaEMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDN0IsQ0FBQztJQUVELElBQVcsUUFBUTtRQUNqQixPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsVUFBVSxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUM7SUFDL0QsQ0FBQztJQUVELElBQVcsVUFBVTtRQUNuQixPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLFVBQVUsQ0FBQyxRQUFRLENBQUM7SUFDMUMs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SUFBSSxDQUFDLENBQUM7aUJBQ2hGO1lBQ0gsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FDSCxDQUFDO0lBQ0osQ0FBQztJQUVPLGlCQUFpQixDQUFDLFlBQW9CO1FBQzVDLFFBQVEsWUFBa0QsRUFBRTtZQUMxRCxLQUFLLFlBQVk7Z0JBQ2YsT0FBTyxjQUFjLENBQUMsV0FBVyxDQUFDO1lBQ3BDO2dCQUNFLE1BQU07U0FDVDtRQUVELFFBQVEsWUFBc0MsRUFBRTtZQUM5QyxLQUFLLFFBQVEsQ0FBQztZQUNkLEtBQUssY0FBYztnQkFDakIsNENBQTRDO2dCQUM1QyxPQUFPLGNBQWMsQ0FBQyxhQUFhLENBQUM7WUFDdEMsS0FBSyxTQUFTO2dCQUNaLE9BQU8sY0FBYyxDQUFDLE9BQU8sQ0FBQztZQUNoQyxLQUFLLFFBQVE7Z0JBQ1gsT0FBTyxjQUFjLENBQUMsTUFBTSxDQUFDO1lBQy9CLEtBQUssZUFBZTtnQkFDbEIsT0FBTyxjQUFjLENBQUMsY0FBYyxDQUFDO1lBQ3ZDLEtBQUssWUFBWTtnQkFDZixPQUFPLGNBQWMsQ0FBQyxXQUFXLENBQUM7WUFDcEM7Z0JBQ0UsTUFBTTtTQUNUO1FBRUQsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQzs7NEdBckdVLGVBQWUsc0ZBNEJKLGtCQUFrQjtnSEE1QjdCLGVBQWU7MkZBQWYsZUFBZTtrQkFEM0IsVUFBVTs7MEJBNkJOLFFBQVE7OzBCQUFJLE1BQU07MkJBQUMsa0JBQWtCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0LCBJbmplY3RhYmxlLCBPcHRpb25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgUGFyYW1zIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IEZsb3dzQXBpU2VydmljZSwgVUlUZW1wbGF0ZXNBcGlTZXJ2aWNlIH0gZnJvbSAnQHZlbG9jZWFwcHMvYXBpJztcbmltcG9ydCB7IEZsb3csIEZsb3dUZW1wbGF0ZXNNYXAsIFVJVGVtcGxhdGUsIFVJVGVtcGxhdGVUeXBlIH0gZnJvbSAnQHZlbG9jZWFwcHMvY29yZSc7XG5pbXBvcnQgeyBpc0VtcHR5IH0gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgY2F0Y2hFcnJvciwgZm9ya0pvaW4sIG1hcCwgbm9vcCwgT2JzZXJ2YWJsZSwgb2YsIHN3aXRjaE1hcCwgdGFwLCB0aHJvd0Vycm9yIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBGbG93Q3VzdG9taXphdGlvbiwgRkxPV19DVVNUT01JWkFUSU9OIH0gZnJvbSAnLi4vdHlwZXMnO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgRmxvd0luZm9TZXJ2aWNlIHtcbiAgcHVibGljIGZsb3ckOiBPYnNlcnZhYmxlPEZsb3cgfCBudWxsPjtcbiAgcHVibGljIHBhcmFtcz86IFBhcmFtcztcbiAgcHVibGljIHRlbXBsYXRlczogeyBba2V5IGluIFVJVGVtcGxhdGVUeXBlXT86IFVJVGVtcGxhdGUgfSA9IHt9O1xuXG4gIHB1YmxpYyBnZXQgZmxvdygpOiBGbG93IHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuZmxvd1N1YmokLnZhbHVlO1xuICB9XG4gIHB1YmxpYyBzZXQgZmxvdyh2YWx1ZTogRmxvdyB8IG51bGwpIHtcbiAgICB0aGlzLmZsb3dTdWJqJC5uZXh0KHZhbHVlKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgaXNMZWdhY3koKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhdGhpcy5mbG93ICYmIHRoaXMuZmxvdz8ucHJvcGVydGllcy5zdGF0ZWZ1bCA9PSBudWxsO1xuICB9XG5cbiAgcHVibGljIGdldCBpc1N0YXRlZnVsKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIXRoaXMuZmxvdz8ucHJvcGVydGllcy5zdGF0ZWZ1bDtcbiAgfVxuXG4gIHByaXZhdGUgcmVhZG9ubHkgZGVmYXVsdFRlbXBsYXRlcyA9IHtcbiAgICBmbG93RW5naW5lOiAnRmxvdyBFbmdpbmUnLFxuICB9O1xuICBwcml2YXRlIGZsb3dTdWJqJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8RmxvdyB8IG51bGw+KG51bGwpO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgZmxvd3NBcGlTZXJ2aWNlOiBGbG93c0FwaVNlcnZpY2UsXG4gICAgcHJpdmF0ZSB0ZW1wbGF0ZXNBcGlTZXJ2aWNlOiBVSVRlbXBsYXRlc0FwaVNlcnZpY2UsXG4gICAgQE9wdGlvbmFsKCkgQEluamVjdChGTE9XX0NVU1RPTUlaQVRJT04pIHByaXZhdGUgY3VzdG9taXphdGlvblNlcnZpY2U/OiBGbG93Q3VzdG9taXphdGlvbixcbiAgKSB7XG4gICAgdGhpcy5mbG93JCA9IHRoaXMuZmxvd1N1YmokLmFzT2JzZXJ2YWJsZSgpO1xuICB9XG5cbiAgcHVibGljIGluaXQkKGZsb3dJZDogc3RyaW5nLCBwYXJhbXM6IFBhcmFtcyk6IE9ic2VydmFibGU8dm9pZD4ge1xuICAgIHRoaXMucGFyYW1zID0gcGFyYW1zO1xuICAgIHJldHVybiB0aGlzLmZsb3dzQXBpU2VydmljZS5nZXRGbG93KGZsb3dJZCkucGlwZShcbiAgICAgIHN3aXRjaE1hcChmbG93ID0+IHRoaXMuaW5pdEZsb3dUZW1wbGF0ZXMkKGZsb3cpLnBpcGUobWFwKCgpID0+IGZsb3cpKSksXG4gICAgICB0YXAoZmxvdyA9PiB0aGlzLmZsb3dTdWJqJC5uZXh0KGZsb3cpKSxcbiAgICAgIG1hcChub29wKSxcbiAgICAgIGNhdGNoRXJyb3IoZSA9PiB7XG4gICAgICAgIHRoaXMuZmxvd1N1YmokLm5leHQobnVsbCk7XG4gICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCgpID0+IGUpO1xuICAgICAgfSksXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBjbGVhbnVwKCk6IHZvaWQge1xuICAgIHRoaXMuZmxvd1N1YmokLm5leHQobnVsbCk7XG4gICAgdGhpcy5wYXJhbXMgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy50ZW1wbGF0ZXMgPSB7fTtcbiAgfVxuXG4gIHByaXZhdGUgaW5pdEZsb3dUZW1wbGF0ZXMkKGZsb3c6IEZsb3cpOiBPYnNlcnZhYmxlPHZvaWQ+IHtcbiAgICBpZiAoaXNFbXB0eShmbG93LnByb3BlcnRpZXMudGVtcGxhdGVzKSkge1xuICAgICAgcmV0dXJuIG9mKHVuZGVmaW5lZCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZvcmtKb2luKFtcbiAgICAgIHRoaXMudGVtcGxhdGVzQXBpU2VydmljZS5mZXRjaFRlbXBsYXRlcyQoKSxcbiAgICAgIHRoaXMuY3VzdG9taXphdGlvblNlcnZpY2U/LmdldFRlbXBsYXRlcz8uKCkgPz8gb2YoW10pLFxuICAgIF0pLnBpcGUoXG4gICAgICBtYXAoKFt0ZW1wbGF0ZXMsIGxvY2FsVGVtcGxhdGVzXSkgPT4ge1xuICAgICAgICBPYmplY3QuZW50cmllcyh7IC4uLnRoaXMuZGVmYXVsdFRlbXBsYXRlcywgLi4uZmxvdy5wcm9wZXJ0aWVzLnRlbXBsYXRlcyB9KS5mb3JFYWNoKChba2V5LCBuYW1lXSkgPT4ge1xuICAgICAgICAgIGNvbnN0IHR5cGUgPSB0aGlzLnJlbWFwVGVtcGxhdGVOYW1lKGtleSk7XG5cbiAgICAgICAgICBpZiAodHlwZSkge1xuICAgICAgICAgICAgdGhpcy50ZW1wbGF0ZXNbdHlwZV0gPVxuICAgICAgICAgICAgICBsb2NhbFRlbXBsYXRlcy5maW5kKHRlbXBsYXRlID0+IHRlbXBsYXRlLm5hbWUgPT09IG5hbWUgJiYgdGVtcGxhdGUudHlwZSA9PT0gdHlwZSkgPz9cbiAgICAgICAgICAgICAgdGVtcGxhdGVzLmZpbmQodGVtcGxhdGUgPT4gdGVtcGxhdGUubmFtZSA9PT0gbmFtZSAmJiB0ZW1wbGF0ZS50eXBlID09PSB0eXBlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSksXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVtYXBUZW1wbGF0ZU5hbWUodGVtcGxhdGVUeXBlOiBzdHJpbmcpOiBVSVRlbXBsYXRlVHlwZSB8IHVuZGVmaW5lZCB7XG4gICAgc3dpdGNoICh0ZW1wbGF0ZVR5cGUgYXMga2V5b2YgdHlwZW9mIHRoaXMuZGVmYXVsdFRlbXBsYXRlcykge1xuICAgICAgY2FzZSAnZmxvd0VuZ2luZSc6XG4gICAgICAgIHJldHVybiBVSVRlbXBsYXRlVHlwZS5GTE9XX0VOR0lORTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIHN3aXRjaCAodGVtcGxhdGVUeXBlIGFzIGtleW9mIEZsb3dUZW1wbGF0ZXNNYXApIHtcbiAgICAgIGNhc2UgJ2Fzc2V0cyc6XG4gICAgICBjYXNlICdzaG9wcGluZ0NhcnQnOlxuICAgICAgICAvLyBObyBzZXBhcmF0ZSBBc3NldHMgdGVtcGxhdGUgYXQgdGhlIG1vbWVudFxuICAgICAgICByZXR1cm4gVUlUZW1wbGF0ZVR5cGUuU0hPUFBJTkdfQ0FSVDtcbiAgICAgIGNhc2UgJ2NhdGFsb2cnOlxuICAgICAgICByZXR1cm4gVUlUZW1wbGF0ZVR5cGUuQ0FUQUxPRztcbiAgICAgIGNhc2UgJ2RvY0dlbic6XG4gICAgICAgIHJldHVybiBVSVRlbXBsYXRlVHlwZS5ET0NHRU47XG4gICAgICBjYXNlICdndWlkZWRTZWxsaW5nJzpcbiAgICAgICAgcmV0dXJuIFVJVGVtcGxhdGVUeXBlLkdVSURFRF9TRUxMSU5HO1xuICAgICAgY2FzZSAnZmxvd0hlYWRlcic6XG4gICAgICAgIHJldHVybiBVSVRlbXBsYXRlVHlwZS5GTE9XX0hFQURFUjtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbn1cbiJdfQ==
|