@veloceapps/sdk 8.0.0-141 → 8.0.0-143

Sign up to get free protection for your applications and to get access to all the features.
@@ -18,13 +18,14 @@ export declare class ConfigurationStateService {
18
18
  private flowConfigurationService;
19
19
  private flowStateApiService;
20
20
  private quoteApiService;
21
+ isInitialized$: BehaviorSubject<boolean>;
22
+ canceledConfiguration$: Subject<void>;
21
23
  private readonly NOT_INITIALIZED;
22
24
  private executedFunctions;
23
25
  private stateId;
24
26
  private ownerId;
25
27
  private subscriptions;
26
- isInitialized$: BehaviorSubject<boolean>;
27
- canceledConfiguration$: Subject<void>;
28
+ private configurationStore;
28
29
  constructor(configurationRuntimeService: ConfigurationRuntimeService, configurationService: ConfigurationService, quoteDraftService: QuoteDraftService, toastService: ToastService, flowStateService: FlowStateService, flowInfoService: FlowInfoService, flowConfigurationService: FlowConfigurationService, flowStateApiService: FlowStateApiService, quoteApiService: QuoteApiService);
29
30
  init$(): Observable<void>;
30
31
  cleanup(): void;
@@ -25,10 +25,11 @@ export declare class FlowStateService {
25
25
  activeMetrics$: Observable<MetricRule[]>;
26
26
  private readonly NOT_INITIALIZED;
27
27
  private executedFunctions;
28
- private _hasStatefulUnsavedChanges;
29
28
  private stateId$;
29
+ private _hasStatefulUnsavedChanges;
30
30
  private processors;
31
31
  private subscriptions;
32
+ private flowStore;
32
33
  private cleanup$;
33
34
  constructor(contextService: ContextService, quoteDraftService: QuoteDraftService, flowInfoService: FlowInfoService, flowConfiguration: FlowConfigurationService, processorsApiService: ConfigurationProcessorsApiService, flowStateApiService: FlowStateApiService, quoteApiService: QuoteApiService, toastService: ToastService, customizationService?: FlowCustomization | undefined);
34
35
  init$(): Observable<void>;
@@ -47,6 +48,7 @@ export declare class FlowStateService {
47
48
  submit$(): Observable<{
48
49
  quoteId: string;
49
50
  }>;
51
+ getFlowStore(): Record<string, unknown>;
50
52
  private getOwnerIdByScope;
51
53
  private getScopeByOwnerId;
52
54
  private execToRequest;
@@ -26,13 +26,14 @@ export class ConfigurationStateService {
26
26
  this.flowConfigurationService = flowConfigurationService;
27
27
  this.flowStateApiService = flowStateApiService;
28
28
  this.quoteApiService = quoteApiService;
29
+ this.isInitialized$ = new BehaviorSubject(false);
30
+ this.canceledConfiguration$ = new Subject();
29
31
  this.NOT_INITIALIZED = Symbol();
30
32
  this.executedFunctions = {};
31
33
  this.stateId = null;
32
34
  this.ownerId = '';
33
35
  this.subscriptions = {};
34
- this.isInitialized$ = new BehaviorSubject(false);
35
- this.canceledConfiguration$ = new Subject();
36
+ this.configurationStore = {};
36
37
  }
37
38
  init$() {
38
39
  let request$;
@@ -49,6 +50,7 @@ export class ConfigurationStateService {
49
50
  }
50
51
  cleanup() {
51
52
  this.stateId = null;
53
+ this.configurationStore = {};
52
54
  this.configurationService.reset();
53
55
  }
54
56
  execute$(req, forceSubscriptions) {
@@ -280,6 +282,8 @@ export class ConfigurationStateService {
280
282
  return functionToExecute({
281
283
  request,
282
284
  inputData,
285
+ flowStore: this.flowStateService.getFlowStore(),
286
+ configurationStore: this.configurationStore,
283
287
  });
284
288
  }
285
289
  }
@@ -288,4 +292,4 @@ ConfigurationStateService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.
288
292
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: ConfigurationStateService, decorators: [{
289
293
  type: Injectable
290
294
  }], 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 }]; } });
291
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlndXJhdGlvbi1zdGF0ZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9zZGsvY29yZS9tb2R1bGVzL2NvbmZpZ3VyYXRpb24vc2VydmljZXMvY29uZmlndXJhdGlvbi1zdGF0ZS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLG1CQUFtQixFQUFFLGVBQWUsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDakUsT0FBTyxFQUdMLFVBQVUsRUFNVixJQUFJLEdBQ0wsTUFBTSxrQkFBa0IsQ0FBQztBQUMxQixPQUFPLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBYyxNQUFNLFFBQVEsQ0FBQztBQUN2RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsR0FBRyxFQUFjLEVBQUUsRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDbEgsT0FBTyxFQUFFLGVBQWUsRUFBRSxnQkFBZ0IsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBRXpGLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3BFLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQzlFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHlCQUF5QixDQUFDOzs7Ozs7OztBQVEvRCxNQUFNLE9BQU8seUJBQXlCO0lBV3BDLFlBQ1UsMkJBQXdELEVBQ3hELG9CQUEwQyxFQUMxQyxpQkFBb0MsRUFDcEMsWUFBMEIsRUFDMUIsZ0JBQWtDLEVBQ2xDLGVBQWdDLEVBQ2hDLHdC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QyxFQUM5QyxTQUFrQjtRQUVsQixJQUFJLGlCQUFpQixHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxzQkFBc0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUMvRSxJQUFJLENBQUMsaUJBQWlCLEVBQUU7WUFDdEIsaUJBQWlCLEdBQUcsSUFBSSxRQUFRLENBQUMsR0FBRyxzQkFBc0IsQ0FBQyxNQUFNLHFCQUFxQixDQUFDLEVBQUUsQ0FBQztZQUMxRixJQUFJLENBQUMsaUJBQWlCLENBQUMsc0JBQXNCLENBQUMsT0FBTyxDQUFDLEdBQUcsaUJBQWlCLENBQUM7U0FDNUU7UUFFRCxPQUFPLGlCQUFpQixDQUFDO1lBQ3ZCLE9BQU87WUFDUCxTQUFTO1NBQ1YsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzs7c0hBdFZVLHlCQUF5QjswSEFBekIseUJBQXlCOzJGQUF6Qix5QkFBeUI7a0JBRHJDLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGbG93U3RhdGVBcGlTZXJ2aWNlLCBRdW90ZUFwaVNlcnZpY2UgfSBmcm9tICdAdmVsb2NlYXBwcy9hcGknO1xuaW1wb3J0IHsgVG9hc3RTZXJ2aWNlLCBUb2FzdFR5cGUgfSBmcm9tICdAdmVsb2NlYXBwcy9jb21wb25lbnRzJztcbmltcG9ydCB7XG4gIENvbmZpZ3VyYXRpb25Qcm9jZXNzb3IsXG4gIENvbmZpZ3VyYXRpb25SZXF1ZXN0LFxuICBFbnRpdHlVdGlsLFxuICBGbG93U3RhdGVFeGVjdXRhYmxlRFRPLFxuICBGbG93U3RhdGVFeGVjdXRpb25SZXF1ZXN0RFRPLFxuICBGbG93U3RhdGVFeGVjdXRpb25SZXN1bHQsXG4gIEZsb3dTdGF0ZVNlbGVjdG9yUmVzcG9uc2UsXG4gIExpbmVJdGVtLFxuICBVVUlELFxufSBmcm9tICdAdmVsb2NlYXBwcy9jb3JlJztcbmltcG9ydCB7IGFzc2lnbiwgY2xvbmVEZWVwLCBEaWN0aW9uYXJ5IH0gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgZmlsdGVyLCBmaW5hbGl6ZSwgbWFwLCBPYnNlcnZhYmxlLCBvZiwgU3ViamVjdCwgc3dpdGNoTWFwLCB0YWtlVW50aWwsIHRhcCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgRmxvd0luZm9TZXJ2aWNlLCBGbG93U3RhdGVTZXJ2aWNlLCBRdW90ZURyYWZ0U2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IEZsb3dTdGF0ZVN1YnNjcmlwdGlvbk9wdGlvbnMgfSBmcm9tICcuLi8uLi8uLi90eXBlcy9mbG93LXN0YXRlLnR5cGVzJztcbmltcG9ydCB7IEZsb3dDb25maWd1cmF0aW9uU2VydmljZSB9IGZyb20gJy4uLy4uL2Zsb3ctY29uZmlndXJhdGlvbic7XG5pbXBvcnQgeyBDb25maWd1cmF0aW9uUnVudGltZVNlcnZpY2UgfSBmcm9tICcuL2NvbmZpZ3VyYXRpb24tcnVudGltZS5zZXJ2aWNlJztcbmltcG9ydCB7IENvbmZpZ3VyYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi9jb25maWd1cmF0aW9uLnNlcnZpY2UnO1xuXG50eXBlIFN0YXRlU3Vic2NyaXB0aW9uID0ge1xuICByZXF1ZXN0OiBGbG93U3RhdGVFeGVjdXRpb25SZXF1ZXN0RFRPO1xuICBkYXRhJDogQmVoYXZpb3JTdWJqZWN0PHVua25vd24+O1xufTtcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIENvbmZpZ3VyYXRpb25TdGF0ZVNlcnZpY2Uge1xuICBwcml2YXRlIHJlYWRvbmx5IE5PVF9JTklUSUFMSVpFRCA9IFN5bWJvbCgpO1xuXG4gIHByaXZhdGUgZXhlY3V0ZWRGdW5jdGlvbnM6IERpY3Rpb25hcnk8KHBheWxvYWQ6IHsgcmVxdWVzdDogQ29uZmlndXJhdGlvblJlcXVlc3Q7IGlucHV0RGF0YTogdW5rbm93biB9KSA9PiB1bmtub3duPiA9XG4gICAge307XG4gIHByaXZhdGUgc3RhdGVJZDogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgb3duZXJJZCA9ICcnO1xuICBwcml2YXRlIHN1YnNjcmlwdGlvbnM6IFJlY29yZDxzdHJpbmcsIFN0YXRlU3Vic2NyaXB0aW9uPiA9IHt9O1xuICBwdWJsaWMgaXNJbml0aWFsaXplZCQ6IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICBwdWJsaWMgY2FuY2VsZWRDb25maWd1cmF0aW9uJDogU3ViamVjdDx2b2lkPiA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBjb25maWd1cmF0aW9uUnVudGltZVNlcnZpY2U6IENvbmZpZ3VyYXRpb25SdW50aW1lU2VydmljZSxcbiAgICBwcml2YXRlIGNvbmZpZ3VyYXRpb25TZXJ2aWNlOiBDb25maWd1cmF0aW9uU2VydmljZSxcbiAgICBwcml2YXRlIHF1b3RlRHJhZnRTZXJ2aWNlOiBRdW90ZURyYWZ0U2VydmljZSxcbiAgICBwcml2YXRlIHRvYXN0U2VydmljZTogVG9hc3RTZXJ2aWNlLFxuICAgIHByaXZhdGUgZmxvd1N0YXRlU2VydmljZTogRmxvd1N0YXRlU2VydmljZSxcbiAgICBwcml2YXRlIGZsb3dJbmZvU2VydmljZTogRmxvd0luZm9TZXJ2aWNlLFxuICAgIHByaXZhdGUgZmxvd0NvbmZpZ3VyYXRpb25TZXJ2aWNlOiBGbG93Q29uZmlndXJhdGlvblNlcnZpY2UsXG4gICAgcHJpdmF0ZSBmbG93U3RhdGVBcGlTZXJ2aWNlOiBGbG93U3RhdGVBcGlTZXJ2aWNlLFxuICAgIHByaXZhdGUgcXVvdGVBcGlTZXJ2aWNlOiBRdW90ZUFwaVNlcnZpY2UsXG4gICkge31cblxuICBwdWJsaWMgaW5pdCQoKTogT2JzZXJ2YWJsZTx2b2lkPiB7XG4gICAgbGV0IHJlcXVlc3QkO1xuICAgIGlmICh0aGlzLmZsb3dTdGF0ZVNlcnZpY2Uuc3RhdGVJZCAmJiB0aGlzLmlzU3RhdGVmdWxDb25maWd1cmF0aW9uKSB7XG4gICAgICByZXF1ZXN0JCA9IHRoaXMuaW5pdFN0YXRlZnVsJCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXF1ZXN0JCA9IHRoaXMuaW5pdFN0YXRlbGVzcyQoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVxdWVzdCQucGlwZShcbiAgICAgIGZpbmFsaXplKCgpID0+IHtcbiAgICAgICAgdGhpcy5pc0luaXRpYWxpemVkJC5uZXh0KHRydWUpO1xuICAgICAgICB0aGlzLmNhbmNlbGVkQ29uZmlndXJhdGlvbiQgPSBuZXcgU3ViamVjdCgpO1xuICAgICAgfSksXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBjbGVhbnVwKCk6IHZvaWQge1xuICAgIHRoaXMuc3RhdGVJZCA9IG51bGw7XG4gICAgdGhpcy5jb25maWd1cmF0aW9uU2VydmljZS5yZXNldCgpO1xuICB9XG5cbiAgcHVibGljIGV4ZWN1dGUkKFxuICAgIHJlcTogRmxvd1N0YXRlRXhlY3V0aW9uUmVxdWVzdERUTyxcbiAgICBmb3JjZVN1YnNjcmlwdGlvbnM/OiBib29sZWFuLFxuICApOiBPYnNlcnZhYmxlPEZsb3dTdGF0ZUV4ZWN1dGlvblJlc3VsdD4ge1xuICAgIGNvbnN0IGZ1bGxSZXF1ZXN0ID0gY2xvbmVEZWVwKHJlcSk7XG4gICAgaWYgKGZ1bGxSZXF1ZXN0LmFjdGlvbnM/Lmxlbmd0aCB8fCBmb3JjZVN1YnNjcmlwdGlvbnMpIHtcbiAgICAgIGZvciAoY29uc3Qgc3Vic2NyaXB0aW9uIG9mIE9iamVjdC52YWx1ZXModGhpcy5zdWJzY3JpcHRpb25zKSkge1xuICAgICAgICBmdWxsUmVxdWVzdC5zZWxlY3RvcnMgPSBhc3NpZ24oZnVsbFJlcXVlc3Quc2VsZWN0b3JzLCBzdWJzY3JpcHRpb24ucmVxdWVzdC5zZWxlY3RvcnMpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGxldCBleGVjdXRpb24kO1xuXG4gICAgaWYgKHRoaXMuaXNTdGF0ZWZ1bENvbmZpZ3VyYXRpb24pIHtcbiAgICAgIGV4ZWN1dGlvbiQgPSB0aGlzLmV4ZWN1dGVTdGF0ZWZ1bCQoZnVsbFJlcXVlc3QpO1xuICAgIH0gZWxzZSB7XG4gICAgICBleGVjdXRpb24kID0gdGhpcy5leGVjdXRlU3RhdGVsZXNzJChmdWxsUmVxdWVzdCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGV4ZWN1dGlvbiQucGlwZSh0YXAocmVzdWx0ID0+IHRoaXMuaGFuZGxlU2VsZWN0b3JzUmVzcG9uc2UocmVzdWx0LnNlbGVjdG9ycykpKTtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlU2VsZWN0b3JzUmVzcG9uc2Uoc2VsZWN0b3JzOiBSZWNvcmQ8c3RyaW5nLCBGbG93U3RhdGVTZWxlY3RvclJlc3BvbnNlPHVua25vd24+Pik6IHZvaWQge1xuICAgIE9iamVjdC5lbnRyaWVzKHNlbGVjdG9ycykuZm9yRWFjaCgoW3JlcXVlc3RJZCwgc2VsZWN0b3JSZXN1bHRdKSA9PiB7XG4gICAgICBpZiAoIXNlbGVjdG9yUmVzdWx0LnN1Y2Nlc3MpIHtcbiAgICAgICAgdGhpcy50b2FzdFNlcnZpY2UuYWRkKHsgc2V2ZXJpdHk6IFRvYXN0VHlwZS5lcnJvciwgc3VtbWFyeTogc2VsZWN0b3JSZXN1bHQuZXJyb3JNZXNzYWdlIH0pO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBzdWJzY3JpcHRpb24kID0gdGhpcy5zdWJzY3JpcHRpb25zW3JlcXVlc3RJZF0/LmRhdGEkO1xuICAgICAgaWYgKHN1YnNjcmlwdGlvbiQpIHtcbiAgICAgICAgc3Vic2NyaXB0aW9uJC5uZXh0KHNlbGVjdG9yUmVzdWx0KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBkaXNwYXRjaCQoYWN0aW9uTmFtZTogc3RyaW5nLCBpbnB1dERhdGE6IHVua25vd24gPSB7fSk6IE9ic2VydmFibGU8Rmxvd1N0YXRlRXhlY3V0aW9uUmVzdWx0PiB7XG4gICAgcmV0dXJuIHRoaXMuZXhlY3V0ZSQoeyBhY3Rpb25zOiBbeyBhcGlOYW1lOiBhY3Rpb25OYW1lLCBpbnB1dERhdGEsIG93bmVySWQ6IHRoaXMub3duZXJJZCB9XSB9KTtcbiAgfVxuXG4gIHB1YmxpYyBzZWxlY3QkPFJlc3BvbnNlID0gdW5rbm93bj4oXG4gICAgc2VsZWN0b3JOYW1lOiBzdHJpbmcsXG4gICAgaW5wdXREYXRhOiB1bmtub3duID0ge30sXG4gICk6IE9ic2VydmFibGU8Rmxvd1N0YXRlU2VsZWN0b3JSZXNwb25zZTxSZXNwb25zZT4+IHtcbiAgICBjb25zdCByZXF1ZXN0SWQgPSBVVUlELlVVSUQoKTtcblxuICAgIHJldHVybiB0aGlzLmV4ZWN1dGUkKHtcbiAgICAgIHNlbGVjdG9yczoge1xuICAgICAgICBbcmVxdWVzdElkXToge1xuICAgICAgICAgIGFwaU5hbWU6IHNlbGVjdG9yTmFtZSxcbiAgICAgICAgICBpbnB1dERhdGEsXG4gICAgICAgICAgb3duZXJJZDogdGhpcy5vd25lcklkLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9KS5waXBlKG1hcChyZXNwb25zZSA9PiByZXNwb25zZS5zZWxlY3RvcnNbcmVxdWVzdElkXSBhcyBGbG93U3RhdGVTZWxlY3RvclJlc3BvbnNlPFJlc3BvbnNlPikpO1xuICB9XG5cbiAgcHVibGljIHN1YnNjcmliZSQ8UmVzcG9uc2UgPSB1bmtub3duPihcbiAgICBzZWxlY3Rvck5hbWU6IHN0cmluZyxcbiAgICBpbnB1dERhdGE6IHVua25vd24gPSB7fSxcbiAgICBvcHRpb25zPzogRmxvd1N0YXRlU3Vic2NyaXB0aW9uT3B0aW9ucyxcbiAgKTogT2JzZXJ2YWJsZTxGbG93U3RhdGVTZWxlY3RvclJlc3BvbnNlPFJlc3BvbnNlPj4ge1xuICAgIGNvbnN0IHJlcXVlc3RJZCA9IFVVSUQuVVVJRCgpO1xuXG4gICAgaWYgKCF0aGlzLnN1YnNjcmlwdGlvbnNbcmVxdWVzdElkXSkge1xuICAgICAgY29uc3QgcmVxdWVzdDogRmxvd1N0YXRlRXhlY3V0aW9uUmVxdWVzdERUTyA9IHtcbiAgICAgICAgc2VsZWN0b3JzOiB7XG4gICAgICAgICAgW3JlcXVlc3RJZF06IHtcbiAgICAgICAgICAgIGFwaU5hbWU6IHNlbGVjdG9yTmFtZSxcbiAgICAgICAgICAgIGlucHV0RGF0YSxcbiAgICAgICAgICAgIG93bmVySWQ6IHRoaXMub3duZXJJZCxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfTtcblxuICAgICAgdGhpcy5zdWJzY3JpcHRpb25zW3JlcXVlc3RJZF0gPSB7XG4gICAgICAgIHJlcXVlc3QsXG4gICAgICAgIGRhdGEkOiBuZXcgQmVoYXZpb3JTdWJqZWN0PHVua25vd24+KHRoaXMuTk9UX0lOSVRJQUxJWkVEKSxcbiAgICAgIH07XG5cbiAgICAgIGlmICghb3B0aW9ucz8uY29sZCkge1xuICAgICAgICB0aGlzLmV4ZWN1dGUkKHJlcXVlc3QpLnN1YnNjcmliZSgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnN1YnNjcmlwdGlvbnNbcmVxdWVzdElkXS5kYXRhJC5waXBlKFxuICAgICAgZmlsdGVyKGRhdGEgPT4gZGF0YSAhPSB0aGlzLk5PVF9JTklUSUFMSVpFRCksXG4gICAgICBtYXAoZGF0YSA9PiBkYXRhIGFzIEZsb3dTdGF0ZVNlbGVjdG9yUmVzcG9uc2U8UmVzcG9uc2U+KSxcbiAgICAgIGZpbmFsaXplKCgpID0+IHtcbiAgICAgICAgaWYgKCF0aGlzLnN1YnNjcmlwdGlvbnNbcmVxdWVzdElkXSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMuc3Vic2NyaXB0aW9uc1tyZXF1ZXN0SWRdLmRhdGEkLm9ic2VydmVkKSB7XG4gICAgICAgICAgZGVsZXRlIHRoaXMuc3Vic2NyaXB0aW9uc1tyZXF1ZXN0SWRdO1xuICAgICAgICB9XG4gICAgICB9KSxcbiAgICAgIHRha2VVbnRpbCh0aGlzLmNhbmNlbGVkQ29uZmlndXJhdGlvbiQpLFxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgc2F2ZUNvbmZpZ3VyYXRpb24ocXVvdGVJZD86IHN0cmluZywgZmxvdz86IGJvb2xlYW4pOiBPYnNlcnZhYmxlPHsgcXVvdGVJZDogc3RyaW5nIH0+IHtcbiAgICBpZiAodGhpcy5pc1N0YXRlZnVsQ29uZmlndXJhdGlvbikge1xuICAgICAgcmV0dXJuIHRoaXMuZmxvd1N0YXRlQXBpU2VydmljZVxuICAgICAgICAuc2F2ZUNvbmZpZ3VyYXRpb24odGhpcy5mbG93U3RhdGVTZXJ2aWNlLnN0YXRlSWQgPz8gJycsIHRoaXMuc3RhdGVJZCA/PyAnJylcbiAgICAgICAgLnBpcGUoc3dpdGNoTWFwKHIgPT4gdGhpcy5mbG93U3RhdGVTZXJ2aWNlLmV4ZWN1dGVSZXF1ZXN0JCh7fSwgdHJ1ZSkucGlwZShtYXAoKCkgPT4gcikpKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICghZmxvdykge1xuICAgICAgICBpZiAoIXF1b3RlSWQpIHtcbiAgICAgICAgICByZXR1cm4gb2YoeyBxdW90ZUlkOiAnJyB9KTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByb290TGluZUl0ZW0gPSB0aGlzLmNvbmZpZ3VyYXRpb25TZXJ2aWNlLmdldFNuYXBzaG90KCk7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRTdGF0ZSA9IHJvb3RMaW5lSXRlbSA/IFtyb290TGluZUl0ZW1dIDogW107XG5cbiAgICAgICAgcmV0dXJuIHRoaXMucXVvdGVBcGlTZXJ2aWNlXG4gICAgICAgICAgLmdldFF1b3RlRHJhZnQocXVvdGVJZClcbiAgICAgICAgICAucGlwZShzd2l0Y2hNYXAocXVvdGVEcmFmdCA9PiB0aGlzLnF1b3RlQXBpU2VydmljZS51cHNlcnRRdW90ZSh7IC4uLnF1b3RlRHJhZnQsIGN1cnJlbnRTdGF0ZSB9KSkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgcXVvdGVEcmFmdCA9IHRoaXMucXVvdGVEcmFmdFNlcnZpY2UucXVvdGVEcmFmdDtcbiAgICAgICAgY29uc3QgbGluZUl0ZW0gPSB0aGlzLmNvbmZpZ3VyYXRpb25TZXJ2aWNlLmdldFNuYXBzaG90KCk7XG5cbiAgICAgICAgaWYgKCFxdW90ZURyYWZ0IHx8ICFsaW5lSXRlbSkge1xuICAgICAgICAgIHJldHVybiBvZih7IHF1b3RlSWQ6ICcnIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgaXNOZXdMaW5lSXRlbSA9IHF1b3RlRHJhZnQuY3VycmVudFN0YXRlLmV2ZXJ5KGxpID0+IGxpLmlkICE9PSBsaW5lSXRlbS5pZCk7XG5cbiAgICAgICAgbGV0IHVwZGF0ZWRTdGF0ZTogTGluZUl0ZW1bXTtcbiAgICAgICAgaWYgKGlzTmV3TGluZUl0ZW0pIHtcbiAgICAgICAgICB1cGRhdGVkU3RhdGUgPSBbLi4ucXVvdGVEcmFmdC5jdXJyZW50U3RhdGUsIGxpbmVJdGVtXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB1cGRhdGVkU3RhdGUgPSBxdW90ZURyYWZ0LmN1cnJlbnRTdGF0ZS5tYXAobGkgPT4gKGxpLmlkID09PSBsaW5lSXRlbS5pZCA/IGxpbmVJdGVtIDogbGkpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLmZsb3dDb25maWd1cmF0aW9uU2VydmljZVxuICAgICAgICAgIC5jYWxjdWxhdGUkKHsgLi4ucXVvdGVEcmFmdCwgY3VycmVudFN0YXRlOiB1cGRhdGVkU3RhdGUgfSlcbiAgICAgICAgICAucGlwZShtYXAoKCkgPT4gKHsgcXVvdGVJZDogJycgfSkpKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwdWJsaWMgY2FuY2VsQ29uZmlndXJhdGlvbigpOiBPYnNlcnZhYmxlPHZvaWQ+IHtcbiAgICBpZiAoIXRoaXMuaXNJbml0aWFsaXplZCQudmFsdWUpIHtcbiAgICAgIHJldHVybiBvZih1bmRlZmluZWQpO1xuICAgIH1cblxuICAgIHRoaXMuY2FuY2VsZWRDb25maWd1cmF0aW9uJC5uZXh0KCk7XG4gICAgdGhpcy5jYW5jZWxlZENvbmZpZ3VyYXRpb24kLmNvbXBsZXRlKCk7XG4gICAgdGhpcy5zdWJzY3JpcHRpb25zID0ge307XG5cbiAgICB0aGlzLmlzSW5pdGlhbGl6ZWQkLm5leHQoZmFsc2UpO1xuICAgIGlmICghdGhpcy5pc0luaXRpYWxpemVkJC52YWx1ZSB8fCAhdGhpcy5pc1N0YXRlZnVsQ29uZmlndXJhdGlvbikge1xuICAgICAgcmV0dXJuIG9mKHVuZGVmaW5lZCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmZsb3dTdGF0ZUFwaVNlcnZpY2UuY2FuY2VsQ29uZmlndXJhdGlvbih0aGlzLmZsb3dTdGF0ZVNlcnZpY2Uuc3RhdGVJZCA/PyAnJywgdGhpcy5zdGF0ZUlkID8/ICcnKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0IGlzU3RhdGVmdWxDb25maWd1cmF0aW9uKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmZsb3dJbmZvU2VydmljZS5mbG93Py5wcm9wZXJ0aWVzLnN0YXRlZnVsID8/IGZhbHNlO1xuICB9XG5cbiAgcHJpdmF0ZSBpbml0U3RhdGVmdWwkKCk6IE9ic2VydmFibGU8dm9pZD4ge1xuICAgIHRoaXMub3duZXJJZCA9IHRoaXMuY29uZmlndXJhdGlvblJ1bnRpbWVTZXJ2aWNlLnJ1bnRpbWVDb250ZXh0Py51aURlZmluaXRpb25Db250YWluZXI/LmlkID8/ICcnO1xuICAgIGNvbnN0IGxpbmVJdGVtSWQgPSB0aGlzLmNvbmZpZ3VyYXRpb25SdW50aW1lU2VydmljZS5ydW50aW1lQ29udGV4dD8ucHJvcGVydGllcz8ubGluZUl0ZW1JZDtcbiAgICBpZiAoIXRoaXMuZmxvd1N0YXRlU2VydmljZS5zdGF0ZUlkKSB7XG4gICAgICByZXR1cm4gb2YodW5kZWZpbmVkKTtcbiAgICB9XG5cbiAgICBjb25zdCBjb250YWluZXIgPSB0aGlzLmNvbmZpZ3VyYXRpb25SdW50aW1lU2VydmljZS5ydW50aW1lQ29udGV4dD8udWlEZWZpbml0aW9uQ29udGFpbmVyO1xuXG4gICAgY29uc3QgbGluZUl0ZW0gPSB0aGlzLmNvbmZpZ3VyYXRpb25TZXJ2aWNlLmdlbmVyYXRlTGluZUl0ZW0oKTtcblxuICAgIGxldCByZXF1ZXN0JDogT2JzZXJ2YWJsZTxGbG93U3RhdGVFeGVjdXRpb25SZXN1bHQ+O1xuXG4gICAgaWYgKCFsaW5lSXRlbUlkKSB7XG4gICAgICByZXF1ZXN0JCA9IHRoaXMuZmxvd1N0YXRlQXBpU2VydmljZS5uZXdDb25maWd1cmF0aW9uKHRoaXMuZmxvd1N0YXRlU2VydmljZS5zdGF0ZUlkLCB7XG4gICAgICAgIGxpbmVJdGVtLFxuICAgICAgICBhY3Rpb25zT3ZlcnJpZGU6IGNvbnRhaW5lcj8uYWN0aW9ucz8ubWFwKHByb2Nlc3NvciA9PiAoeyAuLi5wcm9jZXNzb3IsIG93bmVySWQ6IHRoaXMub3duZXJJZCB9KSksXG4gICAgICAgIHNlbGVjdG9yc092ZXJyaWRlOiBjb250YWluZXI/LnNlbGVjdG9ycz8ubWFwKHByb2Nlc3NvciA9PiAoeyAuLi5wcm9jZXNzb3IsIG93bmVySWQ6IHRoaXMub3duZXJJZCB9KSksXG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVxdWVzdCQgPSB0aGlzLmZsb3dTdGF0ZUFwaVNlcnZpY2Uuc3RhcnRDb25maWd1cmF0aW9uKHRoaXMuZmxvd1N0YXRlU2VydmljZS5zdGF0ZUlkLCB7XG4gICAgICAgIGxpbmVJdGVtSWQsXG4gICAgICAgIGFjdGlvbnNPdmVycmlkZTogY29udGFpbmVyPy5hY3Rpb25zPy5tYXAocHJvY2Vzc29yID0+ICh7IC4uLnByb2Nlc3Nvciwgb3duZXJJZDogdGhpcy5vd25lcklkIH0pKSxcbiAgICAgICAgc2VsZWN0b3JzT3ZlcnJpZGU6IGNvbnRhaW5lcj8uc2VsZWN0b3JzPy5tYXAocHJvY2Vzc29yID0+ICh7IC4uLnByb2Nlc3Nvciwgb3duZXJJZDogdGhpcy5vd25lcklkIH0pKSxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiByZXF1ZXN0JC5waXBlKFxuICAgICAgbWFwKHIgPT4ge1xuICAgICAgICB0aGlzLnN0YXRlSWQgPSByLnN0YXRlSWQ7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9KSxcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBpbml0U3RhdGVsZXNzJCgpOiBPYnNlcnZhYmxlPHZvaWQ+IHtcbiAgICByZXR1cm4gdGhpcy5jb25maWd1cmF0aW9uU2VydmljZS5jb25maWd1cmUoKS5waXBlKG1hcCgoKSA9PiB1bmRlZmluZWQpKTtcbiAgfVxuXG4gIHByaXZhdGUgZXhlY3V0ZVN0YXRlbGVzcyQocmVxdWVzdDogRmxvd1N0YXRlRXhlY3V0aW9uUmVxdWVzdERUTyk6IE9ic2VydmFibGU8Rmxvd1N0YXRlRXhlY3V0aW9uUmVzdWx0PiB7XG4gICAgcmV0dXJuIG9mKHVuZGVmaW5lZCkucGlwZShcbiAgICAgIHN3aXRjaE1hcCgoKSA9PiB7XG4gICAgICAgIC8vIEFwcGx5IGFjdGlvbnMgYW5kIGV4ZWN1dGUgY29uZmlndXJhdGlvbi9wcmljZSBjYWxsXG4gICAgICAgIC8vIE5vIG5lZWQgdG8gcnVuIGNvbmZpZ3VyYXRpb24gaWYgbm8gYWN0aW9ucyBpbiB0aGUgcmVxdWVzdFxuICAgICAgICBpZiAoIXJlcXVlc3QuYWN0aW9ucz8ubGVuZ3RoKSB7XG4gICAgICAgICAgcmV0dXJuIG9mKHVuZGVmaW5lZCk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgY29uZmlndXJhdGlvblJlcXVlc3QgPSB0aGlzLmNvbmZpZ3VyYXRpb25TZXJ2aWNlLmdlbmVyYXRlUmVxdWVzdCgpO1xuICAgICAgICByZXF1ZXN0LmFjdGlvbnMuZm9yRWFjaChhY3Rpb24gPT4ge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25maWd1cmF0aW9uUmVxdWVzdCA9IHRoaXMuZXhlY3V0ZUFjdGlvblNjcmlwdChjb25maWd1cmF0aW9uUmVxdWVzdCwgYWN0aW9uKSA/PyBjb25maWd1cmF0aW9uUmVxdWVzdDtcbiAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGUpO1xuICAgICAgICAgICAgdGhpcy50b2FzdFNlcnZpY2UuYWRkKHsgc2V2ZXJpdHk6IFRvYXN0VHlwZS5lcnJvciwgc3VtbWFyeTogU3RyaW5nKGUpIH0pO1xuICAgICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiB0aGlzLmNvbmZpZ3VyYXRpb25TZXJ2aWNlLmNvbmZpZ3VyZVJlcXVlc3QkKGNvbmZpZ3VyYXRpb25SZXF1ZXN0KTtcbiAgICAgIH0pLFxuICAgICAgbWFwKCgpID0+IHtcbiAgICAgICAgLy8gUnVuIHNlbGVjdG9ycyBhbmQgYXBwbHkgdGhlbSB0byB0aGUgc3RhdGVcbiAgICAgICAgY29uc3QgZmluYWxDb25maWd1cmF0aW9uUmVxdWVzdCA9IHRoaXMuY29uZmlndXJhdGlvblNlcnZpY2UuZ2VuZXJhdGVSZXF1ZXN0KGZhbHNlKTtcblxuICAgICAgICBjb25zdCBzZWxlY3RvcnNSZXN1bHQgPSBFbnRpdHlVdGlsLmVudHJpZXMocmVxdWVzdC5zZWxlY3RvcnMgPz8ge30pLnJlZHVjZShcbiAgICAgICAgICAocmVzdWx0OiBGbG93U3RhdGVFeGVjdXRpb25SZXN1bHQsIFtrZXksIHNlbGVjdG9yXSkgPT4ge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgcmVzdWx0LnNlbGVjdG9yc1trZXldID0ge1xuICAgICAgICAgICAgICAgIHN1Y2Nlc3M6IHRydWUsXG4gICAgICAgICAgICAgICAgcmVzdWx0OiB0aGlzLmV4ZWN1dGVTZWxlY3RvclNjcmlwdChmaW5hbENvbmZpZ3VyYXRpb25SZXF1ZXN0LCBzZWxlY3RvciksXG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZSk7XG4gICAgICAgICAgICAgIHJlc3VsdC5zZWxlY3RvcnNba2V5XSA9IHtcbiAgICAgICAgICAgICAgICBzdWNjZXNzOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBlcnJvck1lc3NhZ2U6IFN0cmluZyhlKSxcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICB9LFxuICAgICAgICAgIHsgc3RhdGVJZDogJycsIHNlbGVjdG9yczoge30gfSxcbiAgICAgICAgKTtcblxuICAgICAgICByZXR1cm4gc2VsZWN0b3JzUmVzdWx0O1xuICAgICAgfSksXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgZXhlY3V0ZVN0YXRlZnVsJChyZXF1ZXN0OiBGbG93U3RhdGVFeGVjdXRpb25SZXF1ZXN0RFRPKTogT2JzZXJ2YWJsZTxGbG93U3RhdGVFeGVjdXRpb25SZXN1bHQ+IHtcbiAgICBpZiAoIXRoaXMuZmxvd1N0YXRlU2VydmljZS5zdGF0ZUlkIHx8ICF0aGlzLnN0YXRlSWQpIHtcbiAgICAgIHJldHVybiBvZigpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmZsb3dTdGF0ZUFwaVNlcnZpY2UuZXhlY3V0ZUNvbmZpZ3VyYXRpb24odGhpcy5mbG93U3RhdGVTZXJ2aWNlLnN0YXRlSWQsIHRoaXMuc3RhdGVJZCwgcmVxdWVzdCkucGlwZShcbiAgICAgIHRhcChyZXNwb25zZSA9PiB7XG4gICAgICAgIHRoaXMuc3RhdGVJZCA9IHJlc3BvbnNlLnN0YXRlSWQ7XG4gICAgICB9KSxcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBleGVjdXRlQWN0aW9uU2NyaXB0KHJlcXVlc3Q6IENvbmZpZ3VyYXRpb25SZXF1ZXN0LCBwcm9jZXNzb3I6IEZsb3dTdGF0ZUV4ZWN1dGFibGVEVE8pOiBDb25maWd1cmF0aW9uUmVxdWVzdCB7XG4gICAgY29uc3QgeyBhY3Rpb25zIH0gPSB0aGlzLmNvbmZpZ3VyYXRpb25SdW50aW1lU2VydmljZS5ydW50aW1lQ29udGV4dD8udWlEZWZpbml0aW9uQ29udGFpbmVyID8/IHt9O1xuICAgIGNvbnN0IGNvbmZpZ3VyYXRpb25Qcm9jZXNzb3IgPSBhY3Rpb25zPy5maW5kKGFjdGlvbiA9PiBhY3Rpb24uYXBpTmFtZSA9PT0gcHJvY2Vzc29yLmFwaU5hbWUpO1xuXG4gICAgaWYgKCFjb25maWd1cmF0aW9uUHJvY2Vzc29yPy5zY3JpcHQpIHtcbiAgICAgIHJldHVybiByZXF1ZXN0O1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmV4ZWN1dGVQcm9jZXNzb3JTY3JpcHQocmVxdWVzdCwgY29uZmlndXJhdGlvblByb2Nlc3NvciwgcHJvY2Vzc29yLmlucHV0RGF0YSkgYXMgQ29uZmlndXJhdGlvblJlcXVlc3Q7XG4gIH1cblxuICBwcml2YXRlIGV4ZWN1dGVTZWxlY3RvclNjcmlwdChyZXF1ZXN0OiBDb25maWd1cmF0aW9uUmVxdWVzdCwgcHJvY2Vzc29yOiBGbG93U3RhdGVFeGVjdXRhYmxlRFRPKTogdW5rbm93biB7XG4gICAgY29uc3QgeyBzZWxlY3RvcnMgfSA9IHRoaXMuY29uZmlndXJhdGlvblJ1bnRpbWVTZXJ2aWNlLnJ1bnRpbWVDb250ZXh0Py51aURlZmluaXRpb25Db250YWluZXIgPz8ge307XG4gICAgY29uc3QgY29uZmlndXJhdGlvblByb2Nlc3NvciA9IHNlbGVjdG9ycz8uZmluZChzZWxlY3RvciA9PiBzZWxlY3Rvci5hcGlOYW1lID09PSBwcm9jZXNzb3IuYXBpTmFtZSk7XG5cbiAgICBpZiAoIWNvbmZpZ3VyYXRpb25Qcm9jZXNzb3I/LnNjcmlwdCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuZXhlY3V0ZVByb2Nlc3NvclNjcmlwdChyZXF1ZXN0LCBjb25maWd1cmF0aW9uUHJvY2Vzc29yLCBwcm9jZXNzb3IuaW5wdXREYXRhKTtcbiAgfVxuXG4gIHByaXZhdGUgZXhlY3V0ZVByb2Nlc3NvclNjcmlwdChcbiAgICByZXF1ZXN0OiBDb25maWd1cmF0aW9uUmVxdWVzdCxcbiAgICBjb25maWd1cmF0aW9uUHJvY2Vzc29yOiBDb25maWd1cmF0aW9uUHJvY2Vzc29yLFxuICAgIGlucHV0RGF0YTogdW5rbm93bixcbiAgKTogdW5rbm93biB7XG4gICAgbGV0IGZ1bmN0aW9uVG9FeGVjdXRlID0gdGhpcy5leGVjdXRlZEZ1bmN0aW9uc1tjb25maWd1cmF0aW9uUHJvY2Vzc29yLmFwaU5hbWVdO1xuICAgIGlmICghZnVuY3Rpb25Ub0V4ZWN1dGUpIHtcbiAgICAgIGZ1bmN0aW9uVG9FeGVjdXRlID0gbmV3IEZ1bmN0aW9uKGAke2NvbmZpZ3VyYXRpb25Qcm9jZXNzb3Iuc2NyaXB0fVxcbnJldHVybiB0cmFuc2Zvcm07YCkoKTtcbiAgICAgIHRoaXMuZXhlY3V0ZWRGdW5jdGlvbnNbY29uZmlndXJhdGlvblByb2Nlc3Nvci5hcGlOYW1lXSA9IGZ1bmN0aW9uVG9FeGVjdXRlO1xuICAgIH1cblxuICAgIHJldHVybiBmdW5jdGlvblRvRXhlY3V0ZSh7XG4gICAgICByZXF1ZXN0LFxuICAgICAgaW5wdXREYXRhLFxuICAgIH0pO1xuICB9XG59XG4iXX0=
295
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlndXJhdGlvbi1zdGF0ZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9zZGsvY29yZS9tb2R1bGVzL2NvbmZpZ3VyYXRpb24vc2VydmljZXMvY29uZmlndXJhdGlvbi1zdGF0ZS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLG1CQUFtQixFQUFFLGVBQWUsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDakUsT0FBTyxFQUlMLFVBQVUsRUFNVixJQUFJLEdBQ0wsTUFBTSxrQkFBa0IsQ0FBQztBQUMxQixPQUFPLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBYyxNQUFNLFFBQVEsQ0FBQztBQUN2RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsR0FBRyxFQUFjLEVBQUUsRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDbEgsT0FBTyxFQUFFLGVBQWUsRUFBRSxnQkFBZ0IsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBRXpGLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3BFLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQzlFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHlCQUF5QixDQUFDOzs7Ozs7OztBQVEvRCxNQUFNLE9BQU8seUJBQXlCO0lBWXBDLFlBQ1UsMkJBQXdELEVBQ3hELG9CQUEwQyxFQUMxQyxpQkFBb0MsRUFDcEMsWUFBMEIsRUFDMUIsZ0JBQWtDLEVBQ2xDLGVBQWdDLEVBQ2hDLHdC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UyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQzNGLENBQUM7SUFFTyxzQkFBc0IsQ0FDNUIsT0FBNkIsRUFDN0Isc0JBQThDLEVBQzlDLFNBQWtCO1FBRWxCLElBQUksaUJBQWlCLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLHNCQUFzQixDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQy9FLElBQUksQ0FBQyxpQkFBaUIsRUFBRTtZQUN0QixpQkFBaUIsR0FBRyxJQUFJLFFBQVEsQ0FBQyxHQUFHLHNCQUFzQixDQUFDLE1BQU0scUJBQXFCLENBQUMsRUFBRSxDQUFDO1lBQzFGLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxzQkFBc0IsQ0FBQyxPQUFPLENBQUMsR0FBRyxpQkFBaUIsQ0FBQztTQUM1RTtRQUVELE9BQU8saUJBQWlCLENBQUM7WUFDdkIsT0FBTztZQUNQLFNBQVM7WUFDVCxTQUFTLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFlBQVksRUFBRTtZQUMvQyxrQkFBa0IsRUFBRSxJQUFJLENBQUMsa0JBQWtCO1NBQzVDLENBQUMsQ0FBQztJQUNMLENBQUM7O3NIQTFWVSx5QkFBeUI7MEhBQXpCLHlCQUF5QjsyRkFBekIseUJBQXlCO2tCQURyQyxVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRmxvd1N0YXRlQXBpU2VydmljZSwgUXVvdGVBcGlTZXJ2aWNlIH0gZnJvbSAnQHZlbG9jZWFwcHMvYXBpJztcbmltcG9ydCB7IFRvYXN0U2VydmljZSwgVG9hc3RUeXBlIH0gZnJvbSAnQHZlbG9jZWFwcHMvY29tcG9uZW50cyc7XG5pbXBvcnQge1xuICBDb25maWd1cmF0aW9uUHJvY2Vzc29yLFxuICBDb25maWd1cmF0aW9uUHJvY2Vzc29yU2NyaXB0Rm4sXG4gIENvbmZpZ3VyYXRpb25SZXF1ZXN0LFxuICBFbnRpdHlVdGlsLFxuICBGbG93U3RhdGVFeGVjdXRhYmxlRFRPLFxuICBGbG93U3RhdGVFeGVjdXRpb25SZXF1ZXN0RFRPLFxuICBGbG93U3RhdGVFeGVjdXRpb25SZXN1bHQsXG4gIEZsb3dTdGF0ZVNlbGVjdG9yUmVzcG9uc2UsXG4gIExpbmVJdGVtLFxuICBVVUlELFxufSBmcm9tICdAdmVsb2NlYXBwcy9jb3JlJztcbmltcG9ydCB7IGFzc2lnbiwgY2xvbmVEZWVwLCBEaWN0aW9uYXJ5IH0gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgZmlsdGVyLCBmaW5hbGl6ZSwgbWFwLCBPYnNlcnZhYmxlLCBvZiwgU3ViamVjdCwgc3dpdGNoTWFwLCB0YWtlVW50aWwsIHRhcCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgRmxvd0luZm9TZXJ2aWNlLCBGbG93U3RhdGVTZXJ2aWNlLCBRdW90ZURyYWZ0U2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IEZsb3dTdGF0ZVN1YnNjcmlwdGlvbk9wdGlvbnMgfSBmcm9tICcuLi8uLi8uLi90eXBlcy9mbG93LXN0YXRlLnR5cGVzJztcbmltcG9ydCB7IEZsb3dDb25maWd1cmF0aW9uU2VydmljZSB9IGZyb20gJy4uLy4uL2Zsb3ctY29uZmlndXJhdGlvbic7XG5pbXBvcnQgeyBDb25maWd1cmF0aW9uUnVudGltZVNlcnZpY2UgfSBmcm9tICcuL2NvbmZpZ3VyYXRpb24tcnVudGltZS5zZXJ2aWNlJztcbmltcG9ydCB7IENvbmZpZ3VyYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi9jb25maWd1cmF0aW9uLnNlcnZpY2UnO1xuXG50eXBlIFN0YXRlU3Vic2NyaXB0aW9uID0ge1xuICByZXF1ZXN0OiBGbG93U3RhdGVFeGVjdXRpb25SZXF1ZXN0RFRPO1xuICBkYXRhJDogQmVoYXZpb3JTdWJqZWN0PHVua25vd24+O1xufTtcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIENvbmZpZ3VyYXRpb25TdGF0ZVNlcnZpY2Uge1xuICBwdWJsaWMgaXNJbml0aWFsaXplZCQ6IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICBwdWJsaWMgY2FuY2VsZWRDb25maWd1cmF0aW9uJDogU3ViamVjdDx2b2lkPiA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBOT1RfSU5JVElBTElaRUQgPSBTeW1ib2woKTtcblxuICBwcml2YXRlIGV4ZWN1dGVkRnVuY3Rpb25zOiBEaWN0aW9uYXJ5PENvbmZpZ3VyYXRpb25Qcm9jZXNzb3JTY3JpcHRGbj4gPSB7fTtcbiAgcHJpdmF0ZSBzdGF0ZUlkOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBvd25lcklkID0gJyc7XG4gIHByaXZhdGUgc3Vic2NyaXB0aW9uczogUmVjb3JkPHN0cmluZywgU3RhdGVTdWJzY3JpcHRpb24+ID0ge307XG4gIHByaXZhdGUgY29uZmlndXJhdGlvblN0b3JlOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHt9O1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgY29uZmlndXJhdGlvblJ1bnRpbWVTZXJ2aWNlOiBDb25maWd1cmF0aW9uUnVudGltZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBjb25maWd1cmF0aW9uU2VydmljZTogQ29uZmlndXJhdGlvblNlcnZpY2UsXG4gICAgcHJpdmF0ZSBxdW90ZURyYWZ0U2VydmljZTogUXVvdGVEcmFmdFNlcnZpY2UsXG4gICAgcHJpdmF0ZSB0b2FzdFNlcnZpY2U6IFRvYXN0U2VydmljZSxcbiAgICBwcml2YXRlIGZsb3dTdGF0ZVNlcnZpY2U6IEZsb3dTdGF0ZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBmbG93SW5mb1NlcnZpY2U6IEZsb3dJbmZvU2VydmljZSxcbiAgICBwcml2YXRlIGZsb3dDb25maWd1cmF0aW9uU2VydmljZTogRmxvd0NvbmZpZ3VyYXRpb25TZXJ2aWNlLFxuICAgIHByaXZhdGUgZmxvd1N0YXRlQXBpU2VydmljZTogRmxvd1N0YXRlQXBpU2VydmljZSxcbiAgICBwcml2YXRlIHF1b3RlQXBpU2VydmljZTogUXVvdGVBcGlTZXJ2aWNlLFxuICApIHt9XG5cbiAgcHVibGljIGluaXQkKCk6IE9ic2VydmFibGU8dm9pZD4ge1xuICAgIGxldCByZXF1ZXN0JDtcbiAgICBpZiAodGhpcy5mbG93U3RhdGVTZXJ2aWNlLnN0YXRlSWQgJiYgdGhpcy5pc1N0YXRlZnVsQ29uZmlndXJhdGlvbikge1xuICAgICAgcmVxdWVzdCQgPSB0aGlzLmluaXRTdGF0ZWZ1bCQoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVxdWVzdCQgPSB0aGlzLmluaXRTdGF0ZWxlc3MkKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlcXVlc3QkLnBpcGUoXG4gICAgICBmaW5hbGl6ZSgoKSA9PiB7XG4gICAgICAgIHRoaXMuaXNJbml0aWFsaXplZCQubmV4dCh0cnVlKTtcbiAgICAgICAgdGhpcy5jYW5jZWxlZENvbmZpZ3VyYXRpb24kID0gbmV3IFN1YmplY3QoKTtcbiAgICAgIH0pLFxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgY2xlYW51cCgpOiB2b2lkIHtcbiAgICB0aGlzLnN0YXRlSWQgPSBudWxsO1xuICAgIHRoaXMuY29uZmlndXJhdGlvblN0b3JlID0ge307XG4gICAgdGhpcy5jb25maWd1cmF0aW9uU2VydmljZS5yZXNldCgpO1xuICB9XG5cbiAgcHVibGljIGV4ZWN1dGUkKFxuICAgIHJlcTogRmxvd1N0YXRlRXhlY3V0aW9uUmVxdWVzdERUTyxcbiAgICBmb3JjZVN1YnNjcmlwdGlvbnM/OiBib29sZWFuLFxuICApOiBPYnNlcnZhYmxlPEZsb3dTdGF0ZUV4ZWN1dGlvblJlc3VsdD4ge1xuICAgIGNvbnN0IGZ1bGxSZXF1ZXN0ID0gY2xvbmVEZWVwKHJlcSk7XG4gICAgaWYgKGZ1bGxSZXF1ZXN0LmFjdGlvbnM/Lmxlbmd0aCB8fCBmb3JjZVN1YnNjcmlwdGlvbnMpIHtcbiAgICAgIGZvciAoY29uc3Qgc3Vic2NyaXB0aW9uIG9mIE9iamVjdC52YWx1ZXModGhpcy5zdWJzY3JpcHRpb25zKSkge1xuICAgICAgICBmdWxsUmVxdWVzdC5zZWxlY3RvcnMgPSBhc3NpZ24oZnVsbFJlcXVlc3Quc2VsZWN0b3JzLCBzdWJzY3JpcHRpb24ucmVxdWVzdC5zZWxlY3RvcnMpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGxldCBleGVjdXRpb24kO1xuXG4gICAgaWYgKHRoaXMuaXNTdGF0ZWZ1bENvbmZpZ3VyYXRpb24pIHtcbiAgICAgIGV4ZWN1dGlvbiQgPSB0aGlzLmV4ZWN1dGVTdGF0ZWZ1bCQoZnVsbFJlcXVlc3QpO1xuICAgIH0gZWxzZSB7XG4gICAgICBleGVjdXRpb24kID0gdGhpcy5leGVjdXRlU3RhdGVsZXNzJChmdWxsUmVxdWVzdCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGV4ZWN1dGlvbiQucGlwZSh0YXAocmVzdWx0ID0+IHRoaXMuaGFuZGxlU2VsZWN0b3JzUmVzcG9uc2UocmVzdWx0LnNlbGVjdG9ycykpKTtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlU2VsZWN0b3JzUmVzcG9uc2Uoc2VsZWN0b3JzOiBSZWNvcmQ8c3RyaW5nLCBGbG93U3RhdGVTZWxlY3RvclJlc3BvbnNlPHVua25vd24+Pik6IHZvaWQge1xuICAgIE9iamVjdC5lbnRyaWVzKHNlbGVjdG9ycykuZm9yRWFjaCgoW3JlcXVlc3RJZCwgc2VsZWN0b3JSZXN1bHRdKSA9PiB7XG4gICAgICBpZiAoIXNlbGVjdG9yUmVzdWx0LnN1Y2Nlc3MpIHtcbiAgICAgICAgdGhpcy50b2FzdFNlcnZpY2UuYWRkKHsgc2V2ZXJpdHk6IFRvYXN0VHlwZS5lcnJvciwgc3VtbWFyeTogc2VsZWN0b3JSZXN1bHQuZXJyb3JNZXNzYWdlIH0pO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBzdWJzY3JpcHRpb24kID0gdGhpcy5zdWJzY3JpcHRpb25zW3JlcXVlc3RJZF0/LmRhdGEkO1xuICAgICAgaWYgKHN1YnNjcmlwdGlvbiQpIHtcbiAgICAgICAgc3Vic2NyaXB0aW9uJC5uZXh0KHNlbGVjdG9yUmVzdWx0KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBkaXNwYXRjaCQoYWN0aW9uTmFtZTogc3RyaW5nLCBpbnB1dERhdGE6IHVua25vd24gPSB7fSk6IE9ic2VydmFibGU8Rmxvd1N0YXRlRXhlY3V0aW9uUmVzdWx0PiB7XG4gICAgcmV0dXJuIHRoaXMuZXhlY3V0ZSQoeyBhY3Rpb25zOiBbeyBhcGlOYW1lOiBhY3Rpb25OYW1lLCBpbnB1dERhdGEsIG93bmVySWQ6IHRoaXMub3duZXJJZCB9XSB9KTtcbiAgfVxuXG4gIHB1YmxpYyBzZWxlY3QkPFJlc3BvbnNlID0gdW5rbm93bj4oXG4gICAgc2VsZWN0b3JOYW1lOiBzdHJpbmcsXG4gICAgaW5wdXREYXRhOiB1bmtub3duID0ge30sXG4gICk6IE9ic2VydmFibGU8Rmxvd1N0YXRlU2VsZWN0b3JSZXNwb25zZTxSZXNwb25zZT4+IHtcbiAgICBjb25zdCByZXF1ZXN0SWQgPSBVVUlELlVVSUQoKTtcblxuICAgIHJldHVybiB0aGlzLmV4ZWN1dGUkKHtcbiAgICAgIHNlbGVjdG9yczoge1xuICAgICAgICBbcmVxdWVzdElkXToge1xuICAgICAgICAgIGFwaU5hbWU6IHNlbGVjdG9yTmFtZSxcbiAgICAgICAgICBpbnB1dERhdGEsXG4gICAgICAgICAgb3duZXJJZDogdGhpcy5vd25lcklkLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9KS5waXBlKG1hcChyZXNwb25zZSA9PiByZXNwb25zZS5zZWxlY3RvcnNbcmVxdWVzdElkXSBhcyBGbG93U3RhdGVTZWxlY3RvclJlc3BvbnNlPFJlc3BvbnNlPikpO1xuICB9XG5cbiAgcHVibGljIHN1YnNjcmliZSQ8UmVzcG9uc2UgPSB1bmtub3duPihcbiAgICBzZWxlY3Rvck5hbWU6IHN0cmluZyxcbiAgICBpbnB1dERhdGE6IHVua25vd24gPSB7fSxcbiAgICBvcHRpb25zPzogRmxvd1N0YXRlU3Vic2NyaXB0aW9uT3B0aW9ucyxcbiAgKTogT2JzZXJ2YWJsZTxGbG93U3RhdGVTZWxlY3RvclJlc3BvbnNlPFJlc3BvbnNlPj4ge1xuICAgIGNvbnN0IHJlcXVlc3RJZCA9IFVVSUQuVVVJRCgpO1xuXG4gICAgaWYgKCF0aGlzLnN1YnNjcmlwdGlvbnNbcmVxdWVzdElkXSkge1xuICAgICAgY29uc3QgcmVxdWVzdDogRmxvd1N0YXRlRXhlY3V0aW9uUmVxdWVzdERUTyA9IHtcbiAgICAgICAgc2VsZWN0b3JzOiB7XG4gICAgICAgICAgW3JlcXVlc3RJZF06IHtcbiAgICAgICAgICAgIGFwaU5hbWU6IHNlbGVjdG9yTmFtZSxcbiAgICAgICAgICAgIGlucHV0RGF0YSxcbiAgICAgICAgICAgIG93bmVySWQ6IHRoaXMub3duZXJJZCxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfTtcblxuICAgICAgdGhpcy5zdWJzY3JpcHRpb25zW3JlcXVlc3RJZF0gPSB7XG4gICAgICAgIHJlcXVlc3QsXG4gICAgICAgIGRhdGEkOiBuZXcgQmVoYXZpb3JTdWJqZWN0PHVua25vd24+KHRoaXMuTk9UX0lOSVRJQUxJWkVEKSxcbiAgICAgIH07XG5cbiAgICAgIGlmICghb3B0aW9ucz8uY29sZCkge1xuICAgICAgICB0aGlzLmV4ZWN1dGUkKHJlcXVlc3QpLnN1YnNjcmliZSgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnN1YnNjcmlwdGlvbnNbcmVxdWVzdElkXS5kYXRhJC5waXBlKFxuICAgICAgZmlsdGVyKGRhdGEgPT4gZGF0YSAhPSB0aGlzLk5PVF9JTklUSUFMSVpFRCksXG4gICAgICBtYXAoZGF0YSA9PiBkYXRhIGFzIEZsb3dTdGF0ZVNlbGVjdG9yUmVzcG9uc2U8UmVzcG9uc2U+KSxcbiAgICAgIGZpbmFsaXplKCgpID0+IHtcbiAgICAgICAgaWYgKCF0aGlzLnN1YnNjcmlwdGlvbnNbcmVxdWVzdElkXSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMuc3Vic2NyaXB0aW9uc1tyZXF1ZXN0SWRdLmRhdGEkLm9ic2VydmVkKSB7XG4gICAgICAgICAgZGVsZXRlIHRoaXMuc3Vic2NyaXB0aW9uc1tyZXF1ZXN0SWRdO1xuICAgICAgICB9XG4gICAgICB9KSxcbiAgICAgIHRha2VVbnRpbCh0aGlzLmNhbmNlbGVkQ29uZmlndXJhdGlvbiQpLFxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgc2F2ZUNvbmZpZ3VyYXRpb24ocXVvdGVJZD86IHN0cmluZywgZmxvdz86IGJvb2xlYW4pOiBPYnNlcnZhYmxlPHsgcXVvdGVJZDogc3RyaW5nIH0+IHtcbiAgICBpZiAodGhpcy5pc1N0YXRlZnVsQ29uZmlndXJhdGlvbikge1xuICAgICAgcmV0dXJuIHRoaXMuZmxvd1N0YXRlQXBpU2VydmljZVxuICAgICAgICAuc2F2ZUNvbmZpZ3VyYXRpb24odGhpcy5mbG93U3RhdGVTZXJ2aWNlLnN0YXRlSWQgPz8gJycsIHRoaXMuc3RhdGVJZCA/PyAnJylcbiAgICAgICAgLnBpcGUoc3dpdGNoTWFwKHIgPT4gdGhpcy5mbG93U3RhdGVTZXJ2aWNlLmV4ZWN1dGVSZXF1ZXN0JCh7fSwgdHJ1ZSkucGlwZShtYXAoKCkgPT4gcikpKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICghZmxvdykge1xuICAgICAgICBpZiAoIXF1b3RlSWQpIHtcbiAgICAgICAgICByZXR1cm4gb2YoeyBxdW90ZUlkOiAnJyB9KTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByb290TGluZUl0ZW0gPSB0aGlzLmNvbmZpZ3VyYXRpb25TZXJ2aWNlLmdldFNuYXBzaG90KCk7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRTdGF0ZSA9IHJvb3RMaW5lSXRlbSA/IFtyb290TGluZUl0ZW1dIDogW107XG5cbiAgICAgICAgcmV0dXJuIHRoaXMucXVvdGVBcGlTZXJ2aWNlXG4gICAgICAgICAgLmdldFF1b3RlRHJhZnQocXVvdGVJZClcbiAgICAgICAgICAucGlwZShzd2l0Y2hNYXAocXVvdGVEcmFmdCA9PiB0aGlzLnF1b3RlQXBpU2VydmljZS51cHNlcnRRdW90ZSh7IC4uLnF1b3RlRHJhZnQsIGN1cnJlbnRTdGF0ZSB9KSkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgcXVvdGVEcmFmdCA9IHRoaXMucXVvdGVEcmFmdFNlcnZpY2UucXVvdGVEcmFmdDtcbiAgICAgICAgY29uc3QgbGluZUl0ZW0gPSB0aGlzLmNvbmZpZ3VyYXRpb25TZXJ2aWNlLmdldFNuYXBzaG90KCk7XG5cbiAgICAgICAgaWYgKCFxdW90ZURyYWZ0IHx8ICFsaW5lSXRlbSkge1xuICAgICAgICAgIHJldHVybiBvZih7IHF1b3RlSWQ6ICcnIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgaXNOZXdMaW5lSXRlbSA9IHF1b3RlRHJhZnQuY3VycmVudFN0YXRlLmV2ZXJ5KGxpID0+IGxpLmlkICE9PSBsaW5lSXRlbS5pZCk7XG5cbiAgICAgICAgbGV0IHVwZGF0ZWRTdGF0ZTogTGluZUl0ZW1bXTtcbiAgICAgICAgaWYgKGlzTmV3TGluZUl0ZW0pIHtcbiAgICAgICAgICB1cGRhdGVkU3RhdGUgPSBbLi4ucXVvdGVEcmFmdC5jdXJyZW50U3RhdGUsIGxpbmVJdGVtXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB1cGRhdGVkU3RhdGUgPSBxdW90ZURyYWZ0LmN1cnJlbnRTdGF0ZS5tYXAobGkgPT4gKGxpLmlkID09PSBsaW5lSXRlbS5pZCA/IGxpbmVJdGVtIDogbGkpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLmZsb3dDb25maWd1cmF0aW9uU2VydmljZVxuICAgICAgICAgIC5jYWxjdWxhdGUkKHsgLi4ucXVvdGVEcmFmdCwgY3VycmVudFN0YXRlOiB1cGRhdGVkU3RhdGUgfSlcbiAgICAgICAgICAucGlwZShtYXAoKCkgPT4gKHsgcXVvdGVJZDogJycgfSkpKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwdWJsaWMgY2FuY2VsQ29uZmlndXJhdGlvbigpOiBPYnNlcnZhYmxlPHZvaWQ+IHtcbiAgICBpZiAoIXRoaXMuaXNJbml0aWFsaXplZCQudmFsdWUpIHtcbiAgICAgIHJldHVybiBvZih1bmRlZmluZWQpO1xuICAgIH1cblxuICAgIHRoaXMuY2FuY2VsZWRDb25maWd1cmF0aW9uJC5uZXh0KCk7XG4gICAgdGhpcy5jYW5jZWxlZENvbmZpZ3VyYXRpb24kLmNvbXBsZXRlKCk7XG4gICAgdGhpcy5zdWJzY3JpcHRpb25zID0ge307XG5cbiAgICB0aGlzLmlzSW5pdGlhbGl6ZWQkLm5leHQoZmFsc2UpO1xuICAgIGlmICghdGhpcy5pc0luaXRpYWxpemVkJC52YWx1ZSB8fCAhdGhpcy5pc1N0YXRlZnVsQ29uZmlndXJhdGlvbikge1xuICAgICAgcmV0dXJuIG9mKHVuZGVmaW5lZCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmZsb3dTdGF0ZUFwaVNlcnZpY2UuY2FuY2VsQ29uZmlndXJhdGlvbih0aGlzLmZsb3dTdGF0ZVNlcnZpY2Uuc3RhdGVJZCA/PyAnJywgdGhpcy5zdGF0ZUlkID8/ICcnKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0IGlzU3RhdGVmdWxDb25maWd1cmF0aW9uKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmZsb3dJbmZvU2VydmljZS5mbG93Py5wcm9wZXJ0aWVzLnN0YXRlZnVsID8/IGZhbHNlO1xuICB9XG5cbiAgcHJpdmF0ZSBpbml0U3RhdGVmdWwkKCk6IE9ic2VydmFibGU8dm9pZD4ge1xuICAgIHRoaXMub3duZXJJZCA9IHRoaXMuY29uZmlndXJhdGlvblJ1bnRpbWVTZXJ2aWNlLnJ1bnRpbWVDb250ZXh0Py51aURlZmluaXRpb25Db250YWluZXI/LmlkID8/ICcnO1xuICAgIGNvbnN0IGxpbmVJdGVtSWQgPSB0aGlzLmNvbmZpZ3VyYXRpb25SdW50aW1lU2VydmljZS5ydW50aW1lQ29udGV4dD8ucHJvcGVydGllcz8ubGluZUl0ZW1JZDtcbiAgICBpZiAoIXRoaXMuZmxvd1N0YXRlU2VydmljZS5zdGF0ZUlkKSB7XG4gICAgICByZXR1cm4gb2YodW5kZWZpbmVkKTtcbiAgICB9XG5cbiAgICBjb25zdCBjb250YWluZXIgPSB0aGlzLmNvbmZpZ3VyYXRpb25SdW50aW1lU2VydmljZS5ydW50aW1lQ29udGV4dD8udWlEZWZpbml0aW9uQ29udGFpbmVyO1xuXG4gICAgY29uc3QgbGluZUl0ZW0gPSB0aGlzLmNvbmZpZ3VyYXRpb25TZXJ2aWNlLmdlbmVyYXRlTGluZUl0ZW0oKTtcblxuICAgIGxldCByZXF1ZXN0JDogT2JzZXJ2YWJsZTxGbG93U3RhdGVFeGVjdXRpb25SZXN1bHQ+O1xuXG4gICAgaWYgKCFsaW5lSXRlbUlkKSB7XG4gICAgICByZXF1ZXN0JCA9IHRoaXMuZmxvd1N0YXRlQXBpU2VydmljZS5uZXdDb25maWd1cmF0aW9uKHRoaXMuZmxvd1N0YXRlU2VydmljZS5zdGF0ZUlkLCB7XG4gICAgICAgIGxpbmVJdGVtLFxuICAgICAgICBhY3Rpb25zT3ZlcnJpZGU6IGNvbnRhaW5lcj8uYWN0aW9ucz8ubWFwKHByb2Nlc3NvciA9PiAoeyAuLi5wcm9jZXNzb3IsIG93bmVySWQ6IHRoaXMub3duZXJJZCB9KSksXG4gICAgICAgIHNlbGVjdG9yc092ZXJyaWRlOiBjb250YWluZXI/LnNlbGVjdG9ycz8ubWFwKHByb2Nlc3NvciA9PiAoeyAuLi5wcm9jZXNzb3IsIG93bmVySWQ6IHRoaXMub3duZXJJZCB9KSksXG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVxdWVzdCQgPSB0aGlzLmZsb3dTdGF0ZUFwaVNlcnZpY2Uuc3RhcnRDb25maWd1cmF0aW9uKHRoaXMuZmxvd1N0YXRlU2VydmljZS5zdGF0ZUlkLCB7XG4gICAgICAgIGxpbmVJdGVtSWQsXG4gICAgICAgIGFjdGlvbnNPdmVycmlkZTogY29udGFpbmVyPy5hY3Rpb25zPy5tYXAocHJvY2Vzc29yID0+ICh7IC4uLnByb2Nlc3Nvciwgb3duZXJJZDogdGhpcy5vd25lcklkIH0pKSxcbiAgICAgICAgc2VsZWN0b3JzT3ZlcnJpZGU6IGNvbnRhaW5lcj8uc2VsZWN0b3JzPy5tYXAocHJvY2Vzc29yID0+ICh7IC4uLnByb2Nlc3Nvciwgb3duZXJJZDogdGhpcy5vd25lcklkIH0pKSxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiByZXF1ZXN0JC5waXBlKFxuICAgICAgbWFwKHIgPT4ge1xuICAgICAgICB0aGlzLnN0YXRlSWQgPSByLnN0YXRlSWQ7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9KSxcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBpbml0U3RhdGVsZXNzJCgpOiBPYnNlcnZhYmxlPHZvaWQ+IHtcbiAgICByZXR1cm4gdGhpcy5jb25maWd1cmF0aW9uU2VydmljZS5jb25maWd1cmUoKS5waXBlKG1hcCgoKSA9PiB1bmRlZmluZWQpKTtcbiAgfVxuXG4gIHByaXZhdGUgZXhlY3V0ZVN0YXRlbGVzcyQocmVxdWVzdDogRmxvd1N0YXRlRXhlY3V0aW9uUmVxdWVzdERUTyk6IE9ic2VydmFibGU8Rmxvd1N0YXRlRXhlY3V0aW9uUmVzdWx0PiB7XG4gICAgcmV0dXJuIG9mKHVuZGVmaW5lZCkucGlwZShcbiAgICAgIHN3aXRjaE1hcCgoKSA9PiB7XG4gICAgICAgIC8vIEFwcGx5IGFjdGlvbnMgYW5kIGV4ZWN1dGUgY29uZmlndXJhdGlvbi9wcmljZSBjYWxsXG4gICAgICAgIC8vIE5vIG5lZWQgdG8gcnVuIGNvbmZpZ3VyYXRpb24gaWYgbm8gYWN0aW9ucyBpbiB0aGUgcmVxdWVzdFxuICAgICAgICBpZiAoIXJlcXVlc3QuYWN0aW9ucz8ubGVuZ3RoKSB7XG4gICAgICAgICAgcmV0dXJuIG9mKHVuZGVmaW5lZCk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgY29uZmlndXJhdGlvblJlcXVlc3QgPSB0aGlzLmNvbmZpZ3VyYXRpb25TZXJ2aWNlLmdlbmVyYXRlUmVxdWVzdCgpO1xuICAgICAgICByZXF1ZXN0LmFjdGlvbnMuZm9yRWFjaChhY3Rpb24gPT4ge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25maWd1cmF0aW9uUmVxdWVzdCA9IHRoaXMuZXhlY3V0ZUFjdGlvblNjcmlwdChjb25maWd1cmF0aW9uUmVxdWVzdCwgYWN0aW9uKSA/PyBjb25maWd1cmF0aW9uUmVxdWVzdDtcbiAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGUpO1xuICAgICAgICAgICAgdGhpcy50b2FzdFNlcnZpY2UuYWRkKHsgc2V2ZXJpdHk6IFRvYXN0VHlwZS5lcnJvciwgc3VtbWFyeTogU3RyaW5nKGUpIH0pO1xuICAgICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiB0aGlzLmNvbmZpZ3VyYXRpb25TZXJ2aWNlLmNvbmZpZ3VyZVJlcXVlc3QkKGNvbmZpZ3VyYXRpb25SZXF1ZXN0KTtcbiAgICAgIH0pLFxuICAgICAgbWFwKCgpID0+IHtcbiAgICAgICAgLy8gUnVuIHNlbGVjdG9ycyBhbmQgYXBwbHkgdGhlbSB0byB0aGUgc3RhdGVcbiAgICAgICAgY29uc3QgZmluYWxDb25maWd1cmF0aW9uUmVxdWVzdCA9IHRoaXMuY29uZmlndXJhdGlvblNlcnZpY2UuZ2VuZXJhdGVSZXF1ZXN0KGZhbHNlKTtcblxuICAgICAgICBjb25zdCBzZWxlY3RvcnNSZXN1bHQgPSBFbnRpdHlVdGlsLmVudHJpZXMocmVxdWVzdC5zZWxlY3RvcnMgPz8ge30pLnJlZHVjZShcbiAgICAgICAgICAocmVzdWx0OiBGbG93U3RhdGVFeGVjdXRpb25SZXN1bHQsIFtrZXksIHNlbGVjdG9yXSkgPT4ge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgcmVzdWx0LnNlbGVjdG9yc1trZXldID0ge1xuICAgICAgICAgICAgICAgIHN1Y2Nlc3M6IHRydWUsXG4gICAgICAgICAgICAgICAgcmVzdWx0OiB0aGlzLmV4ZWN1dGVTZWxlY3RvclNjcmlwdChmaW5hbENvbmZpZ3VyYXRpb25SZXF1ZXN0LCBzZWxlY3RvciksXG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZSk7XG4gICAgICAgICAgICAgIHJlc3VsdC5zZWxlY3RvcnNba2V5XSA9IHtcbiAgICAgICAgICAgICAgICBzdWNjZXNzOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBlcnJvck1lc3NhZ2U6IFN0cmluZyhlKSxcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICB9LFxuICAgICAgICAgIHsgc3RhdGVJZDogJycsIHNlbGVjdG9yczoge30gfSxcbiAgICAgICAgKTtcblxuICAgICAgICByZXR1cm4gc2VsZWN0b3JzUmVzdWx0O1xuICAgICAgfSksXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgZXhlY3V0ZVN0YXRlZnVsJChyZXF1ZXN0OiBGbG93U3RhdGVFeGVjdXRpb25SZXF1ZXN0RFRPKTogT2JzZXJ2YWJsZTxGbG93U3RhdGVFeGVjdXRpb25SZXN1bHQ+IHtcbiAgICBpZiAoIXRoaXMuZmxvd1N0YXRlU2VydmljZS5zdGF0ZUlkIHx8ICF0aGlzLnN0YXRlSWQpIHtcbiAgICAgIHJldHVybiBvZigpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmZsb3dTdGF0ZUFwaVNlcnZpY2UuZXhlY3V0ZUNvbmZpZ3VyYXRpb24odGhpcy5mbG93U3RhdGVTZXJ2aWNlLnN0YXRlSWQsIHRoaXMuc3RhdGVJZCwgcmVxdWVzdCkucGlwZShcbiAgICAgIHRhcChyZXNwb25zZSA9PiB7XG4gICAgICAgIHRoaXMuc3RhdGVJZCA9IHJlc3BvbnNlLnN0YXRlSWQ7XG4gICAgICB9KSxcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBleGVjdXRlQWN0aW9uU2NyaXB0KHJlcXVlc3Q6IENvbmZpZ3VyYXRpb25SZXF1ZXN0LCBwcm9jZXNzb3I6IEZsb3dTdGF0ZUV4ZWN1dGFibGVEVE8pOiBDb25maWd1cmF0aW9uUmVxdWVzdCB7XG4gICAgY29uc3QgeyBhY3Rpb25zIH0gPSB0aGlzLmNvbmZpZ3VyYXRpb25SdW50aW1lU2VydmljZS5ydW50aW1lQ29udGV4dD8udWlEZWZpbml0aW9uQ29udGFpbmVyID8/IHt9O1xuICAgIGNvbnN0IGNvbmZpZ3VyYXRpb25Qcm9jZXNzb3IgPSBhY3Rpb25zPy5maW5kKGFjdGlvbiA9PiBhY3Rpb24uYXBpTmFtZSA9PT0gcHJvY2Vzc29yLmFwaU5hbWUpO1xuXG4gICAgaWYgKCFjb25maWd1cmF0aW9uUHJvY2Vzc29yPy5zY3JpcHQpIHtcbiAgICAgIHJldHVybiByZXF1ZXN0O1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmV4ZWN1dGVQcm9jZXNzb3JTY3JpcHQocmVxdWVzdCwgY29uZmlndXJhdGlvblByb2Nlc3NvciwgcHJvY2Vzc29yLmlucHV0RGF0YSkgYXMgQ29uZmlndXJhdGlvblJlcXVlc3Q7XG4gIH1cblxuICBwcml2YXRlIGV4ZWN1dGVTZWxlY3RvclNjcmlwdChyZXF1ZXN0OiBDb25maWd1cmF0aW9uUmVxdWVzdCwgcHJvY2Vzc29yOiBGbG93U3RhdGVFeGVjdXRhYmxlRFRPKTogdW5rbm93biB7XG4gICAgY29uc3QgeyBzZWxlY3RvcnMgfSA9IHRoaXMuY29uZmlndXJhdGlvblJ1bnRpbWVTZXJ2aWNlLnJ1bnRpbWVDb250ZXh0Py51aURlZmluaXRpb25Db250YWluZXIgPz8ge307XG4gICAgY29uc3QgY29uZmlndXJhdGlvblByb2Nlc3NvciA9IHNlbGVjdG9ycz8uZmluZChzZWxlY3RvciA9PiBzZWxlY3Rvci5hcGlOYW1lID09PSBwcm9jZXNzb3IuYXBpTmFtZSk7XG5cbiAgICBpZiAoIWNvbmZpZ3VyYXRpb25Qcm9jZXNzb3I/LnNjcmlwdCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuZXhlY3V0ZVByb2Nlc3NvclNjcmlwdChyZXF1ZXN0LCBjb25maWd1cmF0aW9uUHJvY2Vzc29yLCBwcm9jZXNzb3IuaW5wdXREYXRhKTtcbiAgfVxuXG4gIHByaXZhdGUgZXhlY3V0ZVByb2Nlc3NvclNjcmlwdChcbiAgICByZXF1ZXN0OiBDb25maWd1cmF0aW9uUmVxdWVzdCxcbiAgICBjb25maWd1cmF0aW9uUHJvY2Vzc29yOiBDb25maWd1cmF0aW9uUHJvY2Vzc29yLFxuICAgIGlucHV0RGF0YTogdW5rbm93bixcbiAgKTogdW5rbm93biB7XG4gICAgbGV0IGZ1bmN0aW9uVG9FeGVjdXRlID0gdGhpcy5leGVjdXRlZEZ1bmN0aW9uc1tjb25maWd1cmF0aW9uUHJvY2Vzc29yLmFwaU5hbWVdO1xuICAgIGlmICghZnVuY3Rpb25Ub0V4ZWN1dGUpIHtcbiAgICAgIGZ1bmN0aW9uVG9FeGVjdXRlID0gbmV3IEZ1bmN0aW9uKGAke2NvbmZpZ3VyYXRpb25Qcm9jZXNzb3Iuc2NyaXB0fVxcbnJldHVybiB0cmFuc2Zvcm07YCkoKTtcbiAgICAgIHRoaXMuZXhlY3V0ZWRGdW5jdGlvbnNbY29uZmlndXJhdGlvblByb2Nlc3Nvci5hcGlOYW1lXSA9IGZ1bmN0aW9uVG9FeGVjdXRlO1xuICAgIH1cblxuICAgIHJldHVybiBmdW5jdGlvblRvRXhlY3V0ZSh7XG4gICAgICByZXF1ZXN0LFxuICAgICAgaW5wdXREYXRhLFxuICAgICAgZmxvd1N0b3JlOiB0aGlzLmZsb3dTdGF0ZVNlcnZpY2UuZ2V0Rmxvd1N0b3JlKCksXG4gICAgICBjb25maWd1cmF0aW9uU3RvcmU6IHRoaXMuY29uZmlndXJhdGlvblN0b3JlLFxuICAgIH0pO1xuICB9XG59XG4iXX0=
@@ -29,10 +29,11 @@ export class FlowStateService {
29
29
  this.customizationService = customizationService;
30
30
  this.NOT_INITIALIZED = Symbol();
31
31
  this.executedFunctions = {};
32
- this._hasStatefulUnsavedChanges = false;
33
32
  this.stateId$ = new BehaviorSubject(null);
33
+ this._hasStatefulUnsavedChanges = false;
34
34
  this.processors = {};
35
35
  this.subscriptions = {};
36
+ this.flowStore = {};
36
37
  this.cleanup$ = new Subject();
37
38
  /*
38
39
  In stateless mode watch QuoteDraft changes and call executeRequest so that
@@ -93,6 +94,7 @@ export class FlowStateService {
93
94
  this.stateId$.next(null);
94
95
  }
95
96
  this.processors = {};
97
+ this.flowStore = {};
96
98
  this.cleanup$.next();
97
99
  }
98
100
  get hasUnsavedChanges() {
@@ -194,6 +196,9 @@ export class FlowStateService {
194
196
  }
195
197
  return of({ quoteId: '' });
196
198
  }
199
+ getFlowStore() {
200
+ return this.flowStore;
201
+ }
197
202
  getOwnerIdByScope(scope) {
198
203
  const ownerId = this.flowInfoService.templates[scope]?.id;
199
204
  if (!ownerId) {
@@ -420,6 +425,7 @@ export class FlowStateService {
420
425
  return functionToExecute({
421
426
  request,
422
427
  inputData,
428
+ flowStore: this.flowStore,
423
429
  });
424
430
  }
425
431
  generateRequestId(scope, selectorName, inputData) {
@@ -463,4 +469,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
463
469
  type: Inject,
464
470
  args: [FLOW_CUSTOMIZATION]
465
471
  }] }]; } });
466
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmxvdy1zdGF0ZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9zZGsvY29yZS9zZXJ2aWNlcy9mbG93LXN0YXRlLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzdELE9BQU8sRUFBRSxpQ0FBaUMsRUFBRSxtQkFBbUIsRUFBRSxlQUFlLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMxRyxPQUFPLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ2pFLE9BQU8sRUFJTCx3QkFBd0IsRUFFeEIsMkJBQTJCLEVBQzNCLFVBQVUsRUFRVixTQUFTLEVBRVQsY0FBYyxFQUNkLElBQUksR0FDTCxNQUFNLGtCQUFrQixDQUFDO0FBQzFCLE9BQU8sRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFjLE9BQU8sRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUNoRSxPQUFPLEVBQ0wsZUFBZSxFQUNmLGFBQWEsRUFDYixNQUFNLEVBQ04sUUFBUSxFQUNSLFFBQVEsRUFDUixHQUFHLEVBQ0gsSUFBSSxFQUVKLEVBQUUsRUFDRixXQUFXLEVBQ1gsT0FBTyxFQUNQLFNBQVMsRUFDVCxTQUFTLEVBQ1QsR0FBRyxHQUNKLE1BQU0sTUFBTSxDQUFDO0FBQ2QsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQ3RELE9BQU8sRUFBcUIsa0JBQWtCLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUUxRixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDbkQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDOzs7Ozs7OztBQWMxRCxNQUFNLE9B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QU8sRUFBRSxJQUFJLENBQUM7WUFDcEIsT0FBTyxFQUFFLDJCQUEyQjtZQUNwQyxPQUFPO1lBQ1AsU0FBUyxFQUFFLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxFQUFFLENBQUMsVUFBVTtTQUNwRCxDQUFDLENBQUM7UUFFSCxPQUFPLE9BQU8sQ0FBQztJQUNqQixDQUFDOzs2R0F2bEJVLGdCQUFnQix1U0F1Qkwsa0JBQWtCO2lIQXZCN0IsZ0JBQWdCOzJGQUFoQixnQkFBZ0I7a0JBRDVCLFVBQVU7OzBCQXdCTixRQUFROzswQkFBSSxNQUFNOzJCQUFDLGtCQUFrQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdCwgSW5qZWN0YWJsZSwgT3B0aW9uYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbmZpZ3VyYXRpb25Qcm9jZXNzb3JzQXBpU2VydmljZSwgRmxvd1N0YXRlQXBpU2VydmljZSwgUXVvdGVBcGlTZXJ2aWNlIH0gZnJvbSAnQHZlbG9jZWFwcHMvYXBpJztcbmltcG9ydCB7IFRvYXN0U2VydmljZSwgVG9hc3RUeXBlIH0gZnJvbSAnQHZlbG9jZWFwcHMvY29tcG9uZW50cyc7XG5pbXBvcnQge1xuICBDaGFyZ2UsXG4gIENvbXBpbGVkUHJpY2VQbGFuLFxuICBDb25maWd1cmF0aW9uQ29udGV4dCxcbiAgQ29uZmlndXJhdGlvbkNvbnRleHRNb2RlLFxuICBDb25maWd1cmF0aW9uUHJvY2Vzc29yLFxuICBDb25maWd1cmF0aW9uUHJvY2Vzc29yVHlwZXMsXG4gIEVudGl0eVV0aWwsXG4gIEZsb3csXG4gIEZsb3dTdGF0ZSxcbiAgRmxvd1N0YXRlRXhlY3V0YWJsZURUTyxcbiAgRmxvd1N0YXRlRXhlY3V0aW9uUmVxdWVzdCxcbiAgRmxvd1N0YXRlRXhlY3V0aW9uUmVxdWVzdERUTyxcbiAgRmxvd1N0YXRlRXhlY3V0aW9uUmVzdWx0LFxuICBGbG93U3RhdGVTZWxlY3RvclJlc3BvbnNlLFxuICBpc0RlZmluZWQsXG4gIE1ldHJpY1J1bGUsXG4gIFVJVGVtcGxhdGVUeXBlLFxuICBVVUlELFxufSBmcm9tICdAdmVsb2NlYXBwcy9jb3JlJztcbmltcG9ydCB7IGFzc2lnbiwgY2xvbmVEZWVwLCBEaWN0aW9uYXJ5LCBmbGF0dGVuIH0gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7XG4gIEJlaGF2aW9yU3ViamVjdCxcbiAgY29tYmluZUxhdGVzdCxcbiAgZmlsdGVyLFxuICBmaW5hbGl6ZSxcbiAgZm9ya0pvaW4sXG4gIG1hcCxcbiAgbm9vcCxcbiAgT2JzZXJ2YWJsZSxcbiAgb2YsXG4gIHNoYXJlUmVwbGF5LFxuICBTdWJqZWN0LFxuICBzd2l0Y2hNYXAsXG4gIHRha2VVbnRpbCxcbiAgdGFwLFxufSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEZsb3dDb25maWd1cmF0aW9uU2VydmljZSB9IGZyb20gJy4uL21vZHVsZXMnO1xuaW1wb3J0IHsgRmxvd0N1c3RvbWl6YXRpb24sIEZMT1dfQ1VTVE9NSVpBVElPTiB9IGZyb20gJy4uL3R5cGVzL2Zsb3ctY3VzdG9taXphdGlvbi50eXBlcyc7XG5pbXBvcnQgeyBGbG93U3RhdGVTdWJzY3JpcHRpb25PcHRpb25zIH0gZnJvbSAnLi4vdHlwZXMvZmxvdy1zdGF0ZS50eXBlcyc7XG5pbXBvcnQgeyBDb250ZXh0U2VydmljZSB9IGZyb20gJy4vY29udGV4dC5zZXJ2aWNlJztcbmltcG9ydCB7IEZsb3dJbmZvU2VydmljZSB9IGZyb20gJy4vZmxvdy1pbmZvLnNlcnZpY2UnO1xuaW1wb3J0IHsgUXVvdGVEcmFmdFNlcnZpY2UgfSBmcm9tICcuL3F1b3RlLWRyYWZ0LnNlcnZpY2UnO1xuXG50eXBlIFByb2Nlc3NvcnNNYXAgPSBQYXJ0aWFsPHtcbiAgW293bmVySWQ6IHN0cmluZ106IHtcbiAgICBbYXBpTmFtZTogc3RyaW5nXTogQ29uZmlndXJhdGlvblByb2Nlc3NvcjtcbiAgfTtcbn0+O1xuXG50eXBlIFN1YnNjcmlwdGlvbiA9IHtcbiAgcmVxdWVzdDogRmxvd1N0YXRlRXhlY3V0aW9uUmVxdWVzdERUTztcbiAgZGF0YSQ6IEJlaGF2aW9yU3ViamVjdDx1bmtub3duPjtcbn07XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBGbG93U3RhdGVTZXJ2aWNlIHtcbiAgcHVibGljIGNoYXJnZXMkOiBPYnNlcnZhYmxlPERpY3Rpb25hcnk8Q2hhcmdlPj47XG4gIHB1YmxpYyBwcmljZVBsYW5zJDogT2JzZXJ2YWJsZTxEaWN0aW9uYXJ5PENvbXBpbGVkUHJpY2VQbGFuPj47XG4gIHB1YmxpYyBhY3RpdmVNZXRyaWNzJDogT2JzZXJ2YWJsZTxNZXRyaWNSdWxlW10+O1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgTk9UX0lOSVRJQUxJWkVEID0gU3ltYm9sKCk7XG5cbiAgcHJpdmF0ZSBleGVjdXRlZEZ1bmN0aW9uczogRGljdGlvbmFyeTwocGF5bG9hZDogeyByZXF1ZXN0OiBGbG93U3RhdGU7IGlucHV0RGF0YTogdW5rbm93biB9KSA9PiB1bmtub3duPiA9IHt9O1xuICBwcml2YXRlIF9oYXNTdGF0ZWZ1bFVuc2F2ZWRDaGFuZ2VzID0gZmFsc2U7XG4gIHByaXZhdGUgc3RhdGVJZCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZyB8IG51bGw+KG51bGwpO1xuICBwcml2YXRlIHByb2Nlc3NvcnM6IFByb2Nlc3NvcnNNYXAgPSB7fTtcbiAgcHJpdmF0ZSBzdWJzY3JpcHRpb25zOiBSZWNvcmQ8c3RyaW5nLCBTdWJzY3JpcHRpb24+ID0ge307XG4gIHByaXZhdGUgY2xlYW51cCQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgY29udGV4dFNlcnZpY2U6IENvbnRleHRTZXJ2aWNlLFxuICAgIHByaXZhdGUgcXVvdGVEcmFmdFNlcnZpY2U6IFF1b3RlRHJhZnRTZXJ2aWNlLFxuICAgIHByaXZhdGUgZmxvd0luZm9TZXJ2aWNlOiBGbG93SW5mb1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBmbG93Q29uZmlndXJhdGlvbjogRmxvd0NvbmZpZ3VyYXRpb25TZXJ2aWNlLFxuICAgIHByaXZhdGUgcHJvY2Vzc29yc0FwaVNlcnZpY2U6IENvbmZpZ3VyYXRpb25Qcm9jZXNzb3JzQXBpU2VydmljZSxcbiAgICBwcml2YXRlIGZsb3dTdGF0ZUFwaVNlcnZpY2U6IEZsb3dTdGF0ZUFwaVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBxdW90ZUFwaVNlcnZpY2U6IFF1b3RlQXBpU2VydmljZSxcbiAgICBwcml2YXRlIHRvYXN0U2VydmljZTogVG9hc3RTZXJ2aWNlLFxuICAgIEBPcHRpb25hbCgpIEBJbmplY3QoRkxPV19DVVNUT01JWkFUSU9OKSBwcml2YXRlIGN1c3RvbWl6YXRpb25TZXJ2aWNlPzogRmxvd0N1c3RvbWl6YXRpb24sXG4gICkge1xuICAgIC8qXG4gICAgICBJbiBzdGF0ZWxlc3MgbW9kZSB3YXRjaCBRdW90ZURyYWZ0IGNoYW5nZXMgYW5kIGNhbGwgZXhlY3V0ZVJlcXVlc3Qgc28gdGhhdFxuICAgICAgYWxsIHN1YnNjcmlwdGlvbnMgZ2V0IHRoZWlyIHVwZGF0ZXMgYWNjb3JkaW5nIHRvIHVwZGF0ZWQgUXVvdGVEcmFmdFxuICAgICovXG4gICAgdGhpcy5pc0luaXRpYWxpemVkJCgpXG4gICAgICAucGlwZShcbiAgICAgICAgZmlsdGVyKEJvb2xlYW4pLFxuICAgICAgICBmaWx0ZXIoKCkgPT4gIXRoaXMuZ2V0Rmxvd1NhZmUoKS5wcm9wZXJ0aWVzLnN0YXRlZnVsKSxcbiAgICAgICAgc3dpdGNoTWFwKCgpID0+IHRoaXMuZmxvd0NvbmZpZ3VyYXRpb24udXBkYXRlZCQpLFxuICAgICAgICBzd2l0Y2hNYXAoKCkgPT4gdGhpcy5leGVjdXRlUmVxdWVzdCQoe30sIHRydWUpKSxcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKTtcblxuICAgIHRoaXMuY2hhcmdlcyQgPSB0aGlzLmZsb3dJbmZvU2VydmljZS5mbG93JC5waXBlKFxuICAgICAgZmlsdGVyKGlzRGVmaW5lZCksXG4gICAgICBzd2l0Y2hNYXAoZmxvdyA9PiB7XG4gICAgICAgIGlmICghZmxvdy5wcm9wZXJ0aWVzLnN0YXRlZnVsKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMucXVvdGVEcmFmdFNlcnZpY2UucXVvdGVEcmFmdCQucGlwZShtYXAocXVvdGVEcmFmdCA9PiBxdW90ZURyYWZ0LmNoYXJnZXMpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5zdWJzY3JpYmUkPERpY3Rpb25hcnk8Q2hhcmdlPj4oVUlUZW1wbGF0ZVR5cGUuRkxPV19FTkdJTkUsICdDSEFSR0VTJywgbnVsbCwge1xuICAgICAgICAgICAgY29sZDogdHJ1ZSxcbiAgICAgICAgICB9KS5waXBlKG1hcChyZXNwb25zZSA9PiAocmVzcG9uc2Uuc3VjY2VzcyA/IHJlc3BvbnNlLnJlc3VsdCA6IHt9KSkpO1xuICAgICAgICB9XG4gICAgICB9KSxcbiAgICAgIGZpbHRlcihpc0RlZmluZWQpLFxuICAgICAgc2hhcmVSZXBsYXkoKSxcbiAgICApO1xuICAgIHRoaXMuY2hhcmdlcyQuc3Vic2NyaWJlKCk7XG5cbiAgICB0aGlzLnByaWNlUGxhbnMkID0gdGhpcy5mbG93SW5mb1NlcnZpY2UuZmxvdyQucGlwZShcbiAgICAgIGZpbHRlcihpc0RlZmluZWQpLFxuICAgICAgc3dpdGNoTWFwKGZsb3cgPT4ge1xuICAgICAgICBpZiAoIWZsb3cucHJvcGVydGllcy5zdGF0ZWZ1bCkge1xuICAgICAgICAgIHJldHVybiB0aGlzLnF1b3RlRHJhZnRTZXJ2aWNlLnF1b3RlRHJhZnQkLnBpcGUobWFwKHF1b3RlRHJhZnQgPT4gcXVvdGVEcmFmdC5wcmljZVBsYW5zKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuc3Vic2NyaWJlJDxEaWN0aW9uYXJ5PENvbXBpbGVkUHJpY2VQbGFuPj4oVUlUZW1wbGF0ZVR5cGUuRkxPV19FTkdJTkUsICdQUklDRV9QTEFOUycsIG51bGwsIHtcbiAgICAgICAgICAgIGNvbGQ6IHRydWUsXG4gICAgICAgICAgfSkucGlwZShtYXAocmVzcG9uc2UgPT4gKHJlc3BvbnNlLnN1Y2Nlc3MgPyByZXNwb25zZS5yZXN1bHQgOiB7fSkpKTtcbiAgICAgICAgfVxuICAgICAgfSksXG4gICAgICBmaWx0ZXIoaXNEZWZpbmVkKSxcbiAgICAgIHNoYXJlUmVwbGF5KCksXG4gICAgKTtcbiAgICB0aGlzLnByaWNlUGxhbnMkLnN1YnNjcmliZSgpO1xuXG4gICAgdGhpcy5hY3RpdmVNZXRyaWNzJCA9IHRoaXMuZmxvd0luZm9TZXJ2aWNlLmZsb3ckLnBpcGUoXG4gICAgICBmaWx0ZXIoaXNEZWZpbmVkKSxcbiAgICAgIHN3aXRjaE1hcChmbG93ID0+IHtcbiAgICAgICAgaWYgKCFmbG93LnByb3BlcnRpZXMuc3RhdGVmdWwpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5xdW90ZURyYWZ0U2VydmljZS5xdW90ZURyYWZ0JC5waXBlKG1hcChxdW90ZURyYWZ0ID0+IHF1b3RlRHJhZnQuYWN0aXZlTWV0cmljcykpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiB0aGlzLnN1YnNjcmliZSQ8TWV0cmljUnVsZVtdPihVSVRlbXBsYXRlVHlwZS5GTE9XX0VOR0lORSwgJ0FDVElWRV9NRVRSSUNTJywgbnVsbCwge1xuICAgICAgICAgICAgY29sZDogdHJ1ZSxcbiAgICAgICAgICB9KS5waXBlKG1hcChyZXNwb25zZSA9PiAocmVzcG9uc2Uuc3VjY2VzcyA/IHJlc3BvbnNlLnJlc3VsdCA6IFtdKSkpO1xuICAgICAgICB9XG4gICAgICB9KSxcbiAgICAgIGZpbHRlcihpc0RlZmluZWQpLFxuICAgICAgc2hhcmVSZXBsYXkoKSxcbiAgICApO1xuICAgIHRoaXMuYWN0aXZlTWV0cmljcyQuc3Vic2NyaWJlKCk7XG4gIH1cblxuICBwdWJsaWMgaW5pdCQoKTogT2JzZXJ2YWJsZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMuaW5pdFByb2Nlc3NvcnMkKCkucGlwZShcbiAgICAgIHN3aXRjaE1hcCgoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLmdldEZsb3dTYWZlKCkucHJvcGVydGllcy5zdGF0ZWZ1bCkge1xuICAgICAgICAgIHJldHVybiB0aGlzLmluaXRTdGF0ZWZ1bCQoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5pbml0U3RhdGVsZXNzJCgpO1xuICAgICAgICB9XG4gICAgICB9KSxcbiAgICApO1xuICB9XG5cbiAgcHVibGljIGNsZWFudXAoKTogdm9pZCB7XG4gICAgT2JqZWN0LnZhbHVlcyh0aGlzLnN1YnNjcmlwdGlvbnMpLmZvckVhY2goKHsgZGF0YSQgfSkgPT4gZGF0YSQuY29tcGxldGUoKSk7XG4gICAgdGhpcy5zdWJzY3JpcHRpb25zID0ge307XG5cbiAgICBpZiAodGhpcy5zdGF0ZUlkJC52YWx1ZSkge1xuICAgICAgdGhpcy5mbG93U3RhdGVBcGlTZXJ2aWNlLmNhbmNlbCh0aGlzLnN0YXRlSWQkLnZhbHVlKS5zdWJzY3JpYmUoKTtcbiAgICAgIHRoaXMuc3RhdGVJZCQubmV4dChudWxsKTtcbiAgICB9XG5cbiAgICB0aGlzLnByb2Nlc3NvcnMgPSB7fTtcbiAgICB0aGlzLmNsZWFudXAkLm5leHQoKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgaGFzVW5zYXZlZENoYW5nZXMoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0Rmxvd1NhZmUoKS5wcm9wZXJ0aWVzLnN0YXRlZnVsXG4gICAgICA/IHRoaXMuX2hhc1N0YXRlZnVsVW5zYXZlZENoYW5nZXNcbiAgICAgIDogdGhpcy5xdW90ZURyYWZ0U2VydmljZS5oYXNVbnNhdmVkQ2hhbmdlcztcbiAgfVxuXG4gIHB1YmxpYyBnZXQgc3RhdGVJZCgpOiBzdHJpbmcgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5zdGF0ZUlkJC52YWx1ZTtcbiAgfVxuXG4gIHB1YmxpYyBpc0luaXRpYWxpemVkJCgpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gY29tYmluZUxhdGVzdChbdGhpcy5zdGF0ZUlkJCwgdGhpcy5xdW90ZURyYWZ0U2VydmljZS5pc0luaXRpYWxpemVkJF0pLnBpcGUoXG4gICAgICBtYXAodmFsdWVzID0+IHZhbHVlcy5zb21lKEJvb2xlYW4pKSxcbiAgICApO1xuICB9XG5cbiAgcHVibGljIGlzSW5pdGlhbGl6ZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEJvb2xlYW4odGhpcy5zdGF0ZUlkJC52YWx1ZSkgfHwgdGhpcy5xdW90ZURyYWZ0U2VydmljZS5pc0luaXRpYWxpemVkO1xuICB9XG5cbiAgcHVibGljIGV4ZWN1dGUkKFxuICAgIHNjb3BlOiBVSVRlbXBsYXRlVHlwZSxcbiAgICBleGVjOiBGbG93U3RhdGVFeGVjdXRpb25SZXF1ZXN0LFxuICApOiBPYnNlcnZhYmxlPEZsb3dTdGF0ZUV4ZWN1dGlvblJlc3VsdFsnc2VsZWN0b3JzJ10+IHtcbiAgICBjb25zdCByZXF1ZXN0ID0gdGhpcy5leGVjVG9SZXF1ZXN0KHNjb3BlLCBleGVjKTtcblxuICAgIHJldHVybiB0aGlzLmV4ZWN1dGVSZXF1ZXN0JChyZXF1ZXN0KS5waXBlKFxuICAgICAgbWFwKHJlc3VsdCA9PiB7XG4gICAgICAgIC8vIEtlZXAgb25seSByZXF1ZXN0ZWQgcmVzdWx0c1xuICAgICAgICBjb25zdCBhY3R1YWxTZWxlY3RvcnMgPSBPYmplY3QuZW50cmllcyhyZXN1bHQuc2VsZWN0b3JzKS5yZWR1Y2UoXG4gICAgICAgICAgKHRydW5rOiBSZWNvcmQ8c3RyaW5nLCBGbG93U3RhdGVTZWxlY3RvclJlc3BvbnNlPiwgW3JlcXVlc3RJZCwgcmVzdWx0XSkgPT4ge1xuICAgICAgICAgICAgaWYgKGV4ZWMuc2VsZWN0b3JzPy5bcmVxdWVzdElkXSkge1xuICAgICAgICAgICAgICB0cnVua1tyZXF1ZXN0SWRdID0gcmVzdWx0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRydW5rO1xuICAgICAgICAgIH0sXG4gICAgICAgICAge30sXG4gICAgICAgICk7XG5cbiAgICAgICAgcmV0dXJuIGFjdHVhbFNlbGVjdG9ycztcbiAgICAgIH0pLFxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgZGlzcGF0Y2gkKHNjb3BlOiBVSVRlbXBsYXRlVHlwZSwgYWN0aW9uOiBzdHJpbmcsIGlucHV0RGF0YT86IHVua25vd24pOiBPYnNlcnZhYmxlPHZvaWQ+IHtcbiAgICBjb25zdCBleGVjOiBGbG93U3RhdGVFeGVjdXRpb25SZXF1ZXN0ID0ge1xuICAgICAgYWN0aW9uczogW3sgbmFtZTogYWN0aW9uLCBpbnB1dERhdGEgfV0sXG4gICAgfTtcbiAgICBjb25zdCByZXF1ZXN0ID0gdGhpcy5leGVjVG9SZXF1ZXN0KHNjb3BlLCBleGVjKTtcblxuICAgIHJldHVybiB0aGlzLmV4ZWN1dGVSZXF1ZXN0JChyZXF1ZXN0KS5waXBlKG1hcChub29wKSk7XG4gIH1cblxuICBwdWJsaWMgc2VsZWN0JDxSZXNwb25zZSA9IHVua25vd24+KFxuICAgIHNjb3BlOiBVSVRlbXBsYXRlVHlwZSxcbiAgICBzZWxlY3Rvck5hbWU6IHN0cmluZyxcbiAgICBpbnB1dERhdGE/OiB1bmtub3duLFxuICApOiBPYnNlcnZhYmxlPEZsb3dTdGF0ZVNlbGVjdG9yUmVzcG9uc2U8UmVzcG9uc2U+PiB7XG4gICAgY29uc3QgcmVxdWVzdElkID0gdGhpcy5nZW5lcmF0ZVJlcXVlc3RJZChzY29wZSwgc2VsZWN0b3JOYW1lLCBpbnB1dERhdGEpO1xuICAgIGNvbnN0IHJlcXVlc3QgPSB0aGlzLmV4ZWNUb1JlcXVlc3Qoc2NvcGUsIHtcbiAgICAgIHNlbGVjdG9yczoge1xuICAgICAgICBbcmVxdWVzdElkXToge1xuICAgICAgICAgIG5hbWU6IHNlbGVjdG9yTmFtZSxcbiAgICAgICAgICBpbnB1dERhdGEsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHRoaXMuZXhlY3V0ZVJlcXVlc3QkKHJlcXVlc3QpLnBpcGUoXG4gICAgICBtYXAocmVzcG9uc2UgPT4gcmVzcG9uc2Uuc2VsZWN0b3JzW3JlcXVlc3RJZF0gYXMgRmxvd1N0YXRlU2VsZWN0b3JSZXNwb25zZTxSZXNwb25zZT4pLFxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgc3Vic2NyaWJlJDxSZXNwb25zZSA9IHVua25vd24+KFxuICAgIHNjb3BlOiBVSVRlbXBsYXRlVHlwZSxcbiAgICBzZWxlY3Rvck5hbWU6IHN0cmluZyxcbiAgICBpbnB1dERhdGE/OiB1bmtub3duLFxuICAgIG9wdGlvbnM/OiBGbG93U3RhdGVTdWJzY3JpcHRpb25PcHRpb25zLFxuICApOiBPYnNlcnZhYmxlPEZsb3dTdGF0ZVNlbGVjdG9yUmVzcG9uc2U8UmVzcG9uc2U+PiB7XG4gICAgY29uc3QgcmVxdWVzdElkID0gdGhpcy5nZW5lcmF0ZVJlcXVlc3RJZChzY29wZSwgc2VsZWN0b3JOYW1lLCBpbnB1dERhdGEpO1xuXG4gICAgaWYgKCF0aGlzLnN1YnNjcmlwdGlvbnNbcmVxdWVzdElkXSkge1xuICAgICAgY29uc3QgcmVxdWVzdCA9IHRoaXMuZXhlY1RvUmVxdWVzdChzY29wZSwge1xuICAgICAgICBzZWxlY3RvcnM6IHtcbiAgICAgICAgICBbcmVxdWVzdElkXToge1xuICAgICAgICAgICAgbmFtZTogc2VsZWN0b3JOYW1lLFxuICAgICAgICAgICAgaW5wdXREYXRhLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9KTtcblxuICAgICAgdGhpcy5zdWJzY3JpcHRpb25zW3JlcXVlc3RJZF0gPSB7XG4gICAgICAgIHJlcXVlc3QsXG4gICAgICAgIGRhdGEkOiBuZXcgQmVoYXZpb3JTdWJqZWN0PHVua25vd24+KHRoaXMuTk9UX0lOSVRJQUxJWkVEKSxcbiAgICAgIH07XG5cbiAgICAgIGlmICghb3B0aW9ucz8uY29sZCkge1xuICAgICAgICB0aGlzLmV4ZWN1dGVSZXF1ZXN0JChyZXF1ZXN0KS5zdWJzY3JpYmUoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5zdWJzY3JpcHRpb25zW3JlcXVlc3RJZF0uZGF0YSQucGlwZShcbiAgICAgIGZpbHRlcihkYXRhID0+IGRhdGEgIT0gdGhpcy5OT1RfSU5JVElBTElaRUQpLFxuICAgICAgbWFwKGRhdGEgPT4gZGF0YSBhcyBGbG93U3RhdGVTZWxlY3RvclJlc3BvbnNlPFJlc3BvbnNlPiksXG4gICAgICBmaW5hbGl6ZSgoKSA9PiB7XG4gICAgICAgIGlmICghdGhpcy5zdWJzY3JpcHRpb25zW3JlcXVlc3RJZF0uZGF0YSQub2JzZXJ2ZWQpIHtcbiAgICAgICAgICBkZWxldGUgdGhpcy5zdWJzY3JpcHRpb25zW3JlcXVlc3RJZF07XG4gICAgICAgIH1cbiAgICAgIH0pLFxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgc2F2ZSQoKTogT2JzZXJ2YWJsZTx7IHF1b3RlSWQ6IHN0cmluZyB9PiB7XG4gICAgaWYgKHRoaXMuZ2V0Rmxvd1NhZmUoKS5wcm9wZXJ0aWVzLnN0YXRlZnVsKSB7XG4gICAgICBpZiAodGhpcy5zdGF0ZUlkJC52YWx1ZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5mbG93U3RhdGVBcGlTZXJ2aWNlLnNhdmUodGhpcy5zdGF0ZUlkJC52YWx1ZSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHF1b3RlRHJhZnQgPSB0aGlzLnF1b3RlRHJhZnRTZXJ2aWNlLnF1b3RlRHJhZnRGb3JBY3RpdmVQcmljZUxpc3Q7XG4gICAgICBpZiAocXVvdGVEcmFmdCkge1xuICAgICAgICByZXR1cm4gdGhpcy5xdW90ZUFwaVNlcnZpY2UudXBzZXJ0UXVvdGUocXVvdGVEcmFmdCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG9mKHsgcXVvdGVJZDogJycgfSk7XG4gIH1cblxuICBwdWJsaWMgc3VibWl0JCgpOiBPYnNlcnZhYmxlPHsgcXVvdGVJZDogc3RyaW5nIH0+IHtcbiAgICBpZiAodGhpcy5nZXRGbG93U2FmZSgpLnByb3BlcnRpZXMuc3RhdGVmdWwpIHtcbiAgICAgIGlmICh0aGlzLnN0YXRlSWQkLnZhbHVlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmZsb3dTdGF0ZUFwaVNlcnZpY2Uuc3VibWl0KHRoaXMuc3RhdGVJZCQudmFsdWUpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBxdW90ZURyYWZ0ID0gdGhpcy5xdW90ZURyYWZ0U2VydmljZS5xdW90ZURyYWZ0Rm9yQWN0aXZlUHJpY2VMaXN0O1xuICAgICAgaWYgKHF1b3RlRHJhZnQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucXVvdGVBcGlTZXJ2aWNlLnN1Ym1pdFF1b3RlKHF1b3RlRHJhZnQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBvZih7IHF1b3RlSWQ6ICcnIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRPd25lcklkQnlTY29wZShzY29wZTogVUlUZW1wbGF0ZVR5cGUpOiBzdHJpbmcge1xuICAgIGNvbnN0IG93bmVySWQgPSB0aGlzLmZsb3dJbmZvU2VydmljZS50ZW1wbGF0ZXNbc2NvcGVdPy5pZDtcbiAgICBpZiAoIW93bmVySWQpIHtcbiAgICAgIHRocm93IGBPd25lcklkIGlzIG5vdCBmb3VuZCBmb3Igc2NvcGUgJHtzY29wZX1gO1xuICAgIH1cblxuICAgIHJldHVybiBvd25lcklkO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRTY29wZUJ5T3duZXJJZChpZDogc3RyaW5nKTogVUlUZW1wbGF0ZVR5cGUgfCB1bmRlZmluZWQge1xuICAgIGZvciAoY29uc3QgdGVtcGxhdGUgb2YgT2JqZWN0LnZhbHVlcyh0aGlzLmZsb3dJbmZvU2VydmljZS50ZW1wbGF0ZXMpKSB7XG4gICAgICBpZiAodGVtcGxhdGUuaWQgPT09IGlkKSB7XG4gICAgICAgIHJldHVybiB0ZW1wbGF0ZS50eXBlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybjtcbiAgfVxuXG4gIHByaXZhdGUgZXhlY1RvUmVxdWVzdChzY29wZTogVUlUZW1wbGF0ZVR5cGUsIGV4ZWM6IEZsb3dTdGF0ZUV4ZWN1dGlvblJlcXVlc3QpOiBGbG93U3RhdGVFeGVjdXRpb25SZXF1ZXN0RFRPIHtcbiAgICBjb25zdCBvd25lcklkID0gdGhpcy5nZXRPd25lcklkQnlTY29wZShzY29wZSk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgYWN0aW9uczogZXhlYy5hY3Rpb25zPy5tYXAoYWN0aW9uID0+ICh7IGFwaU5hbWU6IGFjdGlvbi5uYW1lLCBvd25lcklkLCBpbnB1dERhdGE6IGFjdGlvbi5pbnB1dERhdGEgPz8ge30gfSkpLFxuICAgICAgc2VsZWN0b3JzOlxuICAgICAgICBleGVjLnNlbGVjdG9ycyAmJlxuICAgICAgICBPYmplY3QuZW50cmllcyhleGVjLnNlbGVjdG9ycykucmVkdWNlKFxuICAgICAgICAgICh0cnVuazogUmVjb3JkPHN0cmluZywgRmxvd1N0YXRlRXhlY3V0YWJsZURUTz4sIFtrZXksIHNlbGVjdG9yXSkgPT4gKHtcbiAgICAgICAgICAgIC4uLnRydW5rLFxuICAgICAgICAgICAgW2tleV06IHsgYXBpTmFtZTogc2VsZWN0b3IubmFtZSwgb3duZXJJZCwgaW5wdXREYXRhOiBzZWxlY3Rvci5pbnB1dERhdGEgPz8ge30gfSxcbiAgICAgICAgICB9KSxcbiAgICAgICAgICB7fSxcbiAgICAgICAgKSxcbiAgICB9O1xuICB9XG5cbiAgcHVibGljIGV4ZWN1dGVSZXF1ZXN0JChcbiAgICByZXF1ZXN0OiBGbG93U3RhdGVFeGVjdXRpb25SZXF1ZXN0RFRPLFxuICAgIGZvcmNlU3Vic2NyaXB0aW9uczogYm9vbGVhbiA9IGZhbHNlLFxuICApOiBPYnNlcnZhYmxlPEZsb3dTdGF0ZUV4ZWN1dGlvblJlc3VsdD4ge1xuICAgIGNvbnN0IGZ1bGxSZXF1ZXN0ID0gY2xvbmVEZWVwKHJlcXVlc3QpO1xuICAgIGlmIChmdWxsUmVxdWVzdC5hY3Rpb25zPy5sZW5ndGggfHwgZm9yY2VTdWJzY3JpcHRpb25zKSB7XG4gICAgICBmb3IgKGNvbnN0IHN1YnNjcmlwdGlvbiBvZiBPYmplY3QudmFsdWVzKHRoaXMuc3Vic2NyaXB0aW9ucykpIHtcbiAgICAgICAgZnVsbFJlcXVlc3Quc2VsZWN0b3JzID0gYXNzaWduKGZ1bGxSZXF1ZXN0LnNlbGVjdG9ycywgc3Vic2NyaXB0aW9uLnJlcXVlc3Quc2VsZWN0b3JzKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBleGVjdXRpb24kID0gdGhpcy5nZXRGbG93U2FmZSgpLnByb3BlcnRpZXMuc3RhdGVmdWxcbiAgICAgID8gdGhpcy5leGVjdXRlU3RhdGVmdWwkKGZ1bGxSZXF1ZXN0KVxuICAgICAgOiB0aGlzLmV4ZWN1dGVTdGF0ZWxlc3MkKGZ1bGxSZXF1ZXN0KTtcblxuICAgIHJldHVybiBleGVjdXRpb24kLnBpcGUodGFwKHJlc3VsdCA9PiB0aGlzLmhhbmRsZVNlbGVjdG9yc1Jlc3BvbnNlKHJlc3VsdC5zZWxlY3RvcnMpKSk7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZVNlbGVjdG9yc1Jlc3BvbnNlKHNlbGVjdG9yczogUmVjb3JkPHN0cmluZywgRmxvd1N0YXRlU2VsZWN0b3JSZXNwb25zZTx1bmtub3duPj4pOiB2b2lkIHtcbiAgICBPYmplY3QuZW50cmllcyhzZWxlY3RvcnMpLmZvckVhY2goKFtyZXF1ZXN0SWQsIHNlbGVjdG9yUmVzdWx0XSkgPT4ge1xuICAgICAgaWYgKCFzZWxlY3RvclJlc3VsdC5zdWNjZXNzKSB7XG4gICAgICAgIHRoaXMudG9hc3RTZXJ2aWNlLmFkZCh7IHNldmVyaXR5OiBUb2FzdFR5cGUuZXJyb3IsIHN1bW1hcnk6IHNlbGVjdG9yUmVzdWx0LmVycm9yTWVzc2FnZSB9KTtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgc3Vic2NyaXB0aW9uJCA9IHRoaXMuc3Vic2NyaXB0aW9uc1tyZXF1ZXN0SWRdPy5kYXRhJDtcbiAgICAgIGlmIChzdWJzY3JpcHRpb24kKSB7XG4gICAgICAgIHN1YnNjcmlwdGlvbiQubmV4dChzZWxlY3RvclJlc3VsdCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGluaXRTdGF0ZWZ1bCQoKTogT2JzZXJ2YWJsZTx2b2lkPiB7XG4gICAgLy8gU3Vic2NyaXB0aW9uc1xuICAgIHRoaXMuc3Vic2NyaWJlJDxDb25maWd1cmF0aW9uQ29udGV4dD4oVUlUZW1wbGF0ZVR5cGUuRkxPV19FTkdJTkUsICdDT05URVhUJywgbnVsbCwgeyBjb2xkOiB0cnVlIH0pXG4gICAgICAucGlwZShcbiAgICAgICAgdGFwKHJlc3BvbnNlID0+IHtcbiAgICAgICAgICBpZiAocmVzcG9uc2Uuc3VjY2Vzcykge1xuICAgICAgICAgICAgdGhpcy5jb250ZXh0U2VydmljZS51cGRhdGUocmVzcG9uc2UucmVzdWx0KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pLFxuICAgICAgICB0YWtlVW50aWwodGhpcy5jbGVhbnVwJCksXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCk7XG5cbiAgICBjb25zdCBwcm9jZXNzb3JzTGlzdCA9IGZsYXR0ZW4oT2JqZWN0LnZhbHVlcyh0aGlzLnByb2Nlc3NvcnMpLm1hcChvd25lck1hcCA9PiBPYmplY3QudmFsdWVzKG93bmVyTWFwID8/IHt9KSkpO1xuICAgIGNvbnN0IHByb2Nlc3NvcnMgPSBwcm9jZXNzb3JzTGlzdC5sZW5ndGggPyBwcm9jZXNzb3JzTGlzdCA6IHVuZGVmaW5lZDtcbiAgICBjb25zdCBzZWxlY3RvcnMgPSBPYmplY3QudmFsdWVzKHRoaXMuc3Vic2NyaXB0aW9ucylcbiAgICAgIC5tYXAoKHsgcmVxdWVzdCB9KSA9PiByZXF1ZXN0LnNlbGVjdG9ycylcbiAgICAgIC5maWx0ZXIoaXNEZWZpbmVkKVxuICAgICAgLnJlZHVjZSgodHJ1bmssIHNlbGVjdG9ycykgPT4gKHsgLi4udHJ1bmssIC4uLnNlbGVjdG9ycyB9KSwge30pO1xuICAgIGNvbnN0IHJlcXVlc3QgPSB0aGlzLmdldERlZmF1bHRFeGVjdXRpb25SZXF1ZXN0RFRPKCk7XG5cbiAgICByZXR1cm4gdGhpcy5mbG93U3RhdGVBcGlTZXJ2aWNlXG4gICAgICAuaW5pdCh7XG4gICAgICAgIHF1b3RlSWQ6IHRoaXMuY29udGV4dFNlcnZpY2UucmVzb2x2ZSgpLmhlYWRlcklkLFxuICAgICAgICBwYXJhbXM6IHRoaXMuZmxvd0luZm9TZXJ2aWNlLnBhcmFtcyA/PyB7fSxcbiAgICAgICAgYWN0aW9uc092ZXJyaWRlOiBwcm9jZXNzb3JzPy5maWx0ZXIocHJvY2Vzc29yID0+IHByb2Nlc3Nvci50eXBlID09PSBDb25maWd1cmF0aW9uUHJvY2Vzc29yVHlwZXMuQUNUSU9OKSxcbiAgICAgICAgc2VsZWN0b3JzT3ZlcnJpZGU6IHByb2Nlc3NvcnM/LmZpbHRlcihwcm9jZXNzb3IgPT4gcHJvY2Vzc29yLnR5cGUgPT09IENvbmZpZ3VyYXRpb25Qcm9jZXNzb3JUeXBlcy5TRUxFQ1RPUiksXG4gICAgICAgIHNlbGVjdG9yczogeyAuLi5zZWxlY3RvcnMsIC4uLnJlcXVlc3Quc2VsZWN0b3JzIH0sXG4gICAgICAgIGFjdGlvbnM6IHJlcXVlc3QuYWN0aW9ucyxcbiAgICAgIH0pXG4gICAgICAucGlwZShcbiAgICAgICAgbWFwKCh7IHN0YXRlSWQsIHNlbGVjdG9ycyB9KSA9PiB7XG4gICAgICAgICAgdGhpcy5oYW5kbGVTZWxlY3RvcnNSZXNwb25zZShzZWxlY3RvcnMpO1xuICAgICAgICAgIHRoaXMuc3RhdGVJZCQubmV4dChzdGF0ZUlkKTtcbiAgICAgICAgfSksXG4gICAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBleGVjdXRlU3RhdGVmdWwkKHJlcXVlc3Q6IEZsb3dTdGF0ZUV4ZWN1dGlvblJlcXVlc3REVE8pOiBPYnNlcnZhYmxlPEZsb3dTdGF0ZUV4ZWN1dGlvblJlc3VsdD4ge1xuICAgIGlmICghdGhpcy5zdGF0ZUlkJC52YWx1ZSkge1xuICAgICAgdGhyb3cgJ1N0YXRlZnVsIHNlc3Npb24gaXMgbm90IGluaXRpYWxpemVkJztcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5mbG93U3RhdGVBcGlTZXJ2aWNlLmV4ZWN1dGUodGhpcy5zdGF0ZUlkJC52YWx1ZSwgcmVxdWVzdCkucGlwZShcbiAgICAgIHRhcCgoKSA9PiB7XG4gICAgICAgIGlmIChyZXF1ZXN0LmFjdGlvbnM/Lmxlbmd0aCkge1xuICAgICAgICAgIHRoaXMuX2hhc1N0YXRlZnVsVW5zYXZlZENoYW5nZXMgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9KSxcbiAgICAgIHRhcChyZXNwb25zZSA9PiB0aGlzLnN0YXRlSWQkLm5leHQocmVzcG9uc2Uuc3RhdGVJZCkpLFxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGluaXRTdGF0ZWxlc3MkKCk6IE9ic2VydmFibGU8dm9pZD4ge1xuICAgIGNvbnN0IHsgaGVhZGVySWQgfSA9IHRoaXMuY29udGV4dFNlcnZpY2UucmVzb2x2ZSgpO1xuXG4gICAgcmV0dXJuIHRoaXMucXVvdGVEcmFmdFNlcnZpY2UuaW5pdChoZWFkZXJJZCwgdGhpcy5mbG93SW5mb1NlcnZpY2UucGFyYW1zID8/IHt9KS5waXBlKFxuICAgICAgc3dpdGNoTWFwKCgpID0+IHRoaXMuZXhlY3V0ZVJlcXVlc3QkKHRoaXMuZ2V0RGVmYXVsdEV4ZWN1dGlvblJlcXVlc3REVE8oKSkpLFxuICAgICAgc3dpdGNoTWFwKCgpID0+IHRoaXMuY2FsY3VsYXRlJCgpKSxcbiAgICAgIHRhcCgoKSA9PiB0aGlzLnF1b3RlRHJhZnRTZXJ2aWNlLmZpbmFsaXplSW5pdCgpKSxcbiAgICAgIG1hcChub29wKSxcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBjYWxjdWxhdGUkKCk6IE9ic2VydmFibGU8dm9pZD4ge1xuICAgIGNvbnN0IGZsb3dTdGF0ZSA9IHRoaXMucXVvdGVEcmFmdFNlcnZpY2UucXVvdGVEcmFmdDtcbiAgICBpZiAoIWZsb3dTdGF0ZSkge1xuICAgICAgcmV0dXJuIG9mKHVuZGVmaW5lZCk7XG4gICAgfVxuXG4gICAgLypcbiAgICAgIERvbid0IGV4ZWN1dGUgcHJvY2VkdXJlcyB3aGVuOlxuICAgICAgICAqIEluaXRpYWxpemluZyBhIHN0YW5kYWxvbmUgcHJvZHVjdCBjb25maWd1cmF0aW9uIFVJLCBhcyBwcm9jZWR1cmUgaXMgZXhlY3V0ZSBpbiAvcHJpY2UgY2FsbFxuICAgICAgICAqIEluaXRpYWxpemluZyBhbiBlbXB0eSBhY2NvdW50IChhY2NvdW50IHdpdGggbm8gYXNzZXRzKVxuICAgICovXG4gICAgY29uc3QgaXNFbXB0eUFjY291bnRNb2RlID1cbiAgICAgIHRoaXMuY29udGV4dFNlcnZpY2UubW9kZSA9PT0gQ29uZmlndXJhdGlvbkNvbnRleHRNb2RlLkFDQ09VTlQgJiZcbiAgICAgICF0aGlzLnF1b3RlRHJhZnRTZXJ2aWNlLmhhc1Byb2R1Y3RzICYmXG4gICAgICAhdGhpcy5xdW90ZURyYWZ0U2VydmljZS5oYXNBc3NldHMgJiZcbiAgICAgICF0aGlzLnF1b3RlRHJhZnRTZXJ2aWNlLnF1b3RlRHJhZnQ/LmluaXRpYWxTdGF0ZS5sZW5ndGg7XG5cbiAgICBpZiAodGhpcy5xdW90ZURyYWZ0U2VydmljZS5pc1N0YW5kYWxvbmUgfHwgaXNFbXB0eUFjY291bnRNb2RlKSB7XG4gICAgICByZXR1cm4gb2YodW5kZWZpbmVkKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5mbG93Q29uZmlndXJhdGlvbi5jYWxjdWxhdGUkKGZsb3dTdGF0ZSk7XG4gIH1cblxuICBwcml2YXRlIGV4ZWN1dGVTdGF0ZWxlc3MkKHJlcXVlc3Q6IEZsb3dTdGF0ZUV4ZWN1dGlvblJlcXVlc3REVE8pOiBPYnNlcnZhYmxlPEZsb3dTdGF0ZUV4ZWN1dGlvblJlc3VsdD4ge1xuICAgIHJldHVybiBvZih1bmRlZmluZWQpLnBpcGUoXG4gICAgICB0YXAoKCkgPT4gdGhpcy5leGVjdXRlU3RhdGVsZXNzQWN0aW9ucyhyZXF1ZXN0KSksXG4gICAgICBzd2l0Y2hNYXAoKCkgPT4ge1xuICAgICAgICAvKlxuICAgICAgICAgIFNraXAgcHJpY2UgY2FsY3VsYXRpb24gaW4gY2FzZVxuICAgICAgICAgIDEuIE5vIGFjdGlvbnMgaW4gdGhlIHJlcXVlc3RcbiAgICAgICAgICAyLiBJbml0aWFsaXphdGlvbiBwcm9jZXNzIGV4ZWN1dGlvbiAoc3RhdGUgbm90IGluaXRpYWxpemVkIHlldClcbiAgICAgICAgKi9cbiAgICAgICAgaWYgKCFyZXF1ZXN0LmFjdGlvbnM/Lmxlbmd0aCB8fCAhdGhpcy5pc0luaXRpYWxpemVkKCkpIHtcbiAgICAgICAgICByZXR1cm4gb2YodW5kZWZpbmVkKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5jYWxjdWxhdGUkKCk7XG4gICAgICAgIH1cbiAgICAgIH0pLFxuICAgICAgbWFwKCgpID0+IHRoaXMuZXhlY3V0ZVN0YXRlbGVzc1NlbGVjdG9ycyhyZXF1ZXN0KSksXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgZXhlY3V0ZVN0YXRlbGVzc0FjdGlvbnMocmVxdWVzdDogRmxvd1N0YXRlRXhlY3V0aW9uUmVxdWVzdERUTyk6IHZvaWQge1xuICAgIGlmICghdGhpcy5xdW90ZURyYWZ0U2VydmljZS5xdW90ZURyYWZ0IHx8ICFyZXF1ZXN0LmFjdGlvbnM/Lmxlbmd0aCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGxldCBmbG93U3RhdGUgPSB0aGlzLnF1b3RlRHJhZnRTZXJ2aWNlLnF1b3RlRHJhZnQ7XG4gICAgcmVxdWVzdC5hY3Rpb25zLmZvckVhY2goYWN0aW9uID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGZsb3dTdGF0ZSA9IHRoaXMuZXhlY3V0ZUFjdGlvblNjcmlwdChmbG93U3RhdGUsIGFjdGlvbikgPz8gZmxvd1N0YXRlO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBjb25zb2xlLmVycm9yKGUpO1xuICAgICAgICB0aGlzLnRvYXN0U2VydmljZS5hZGQoeyBzZXZlcml0eTogVG9hc3RUeXBlLmVycm9yLCBzdW1tYXJ5OiBTdHJpbmcoZSkgfSk7XG4gICAgICAgIHRocm93IGU7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICB0aGlzLnF1b3RlRHJhZnRTZXJ2aWNlLnVwZGF0ZVF1b3RlRHJhZnQoZmxvd1N0YXRlKTtcbiAgfVxuXG4gIHByaXZhdGUgZXhlY3V0ZVN0YXRlbGVzc1NlbGVjdG9ycyhyZXF1ZXN0OiBGbG93U3RhdGVFeGVjdXRpb25SZXF1ZXN0RFRPKTogRmxvd1N0YXRlRXhlY3V0aW9uUmVzdWx0IHtcbiAgICBpZiAoIXRoaXMucXVvdGVEcmFmdFNlcnZpY2UucXVvdGVEcmFmdCkge1xuICAgICAgdGhyb3cgJ1F1b3RlRHJhZnQgaXMgbm90IGluaXRpYWxpemVkJztcbiAgICB9XG5cbiAgICBjb25zdCBmbG93U3RhdGUgPSB0aGlzLnF1b3RlRHJhZnRTZXJ2aWNlLnF1b3RlRHJhZnQ7XG4gICAgcmV0dXJuIEVudGl0eVV0aWwuZW50cmllcyhyZXF1ZXN0LnNlbGVjdG9ycyA/PyB7fSkucmVkdWNlKFxuICAgICAgKHJlc3VsdDogRmxvd1N0YXRlRXhlY3V0aW9uUmVzdWx0LCBba2V5LCBzZWxlY3Rvcl0pID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICByZXN1bHQuc2VsZWN0b3JzW2tleV0gPSB7XG4gICAgICAgICAgICBzdWNjZXNzOiB0cnVlLFxuICAgICAgICAgICAgcmVzdWx0OiB0aGlzLmV4ZWN1dGVTZWxlY3RvclNjcmlwdChmbG93U3RhdGUsIHNlbGVjdG9yKSxcbiAgICAgICAgICB9O1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihlKTtcbiAgICAgICAgICByZXN1bHQuc2VsZWN0b3JzW2tleV0gPSB7XG4gICAgICAgICAgICBzdWNjZXNzOiBmYWxzZSxcbiAgICAgICAgICAgIGVycm9yTWVzc2FnZTogU3RyaW5nKGUpLFxuICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfSxcbiAgICAgIHsgc3RhdGVJZDogJycsIHNlbGVjdG9yczoge30gfSxcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRGbG93U2FmZSgpOiBGbG93IHtcbiAgICBpZiAoIXRoaXMuZmxvd0luZm9TZXJ2aWNlLmZsb3cpIHtcbiAgICAgIHRocm93ICdGbG93IGlzIG5vdCBkZWZpbmVkJztcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5mbG93SW5mb1NlcnZpY2UuZmxvdztcbiAgfVxuXG4gIHByaXZhdGUgaW5pdFByb2Nlc3NvcnMkKCk6IE9ic2VydmFibGU8dm9pZD4ge1xuICAgIGNvbnN0IGhhc092ZXJyaWRlcyA9IEJvb2xlYW4odGhpcy5jdXN0b21pemF0aW9uU2VydmljZT8uZ2V0VGVtcGxhdGVDb25maWd1cmF0aW9uUHJvY2Vzc29ycyk7XG4gICAgY29uc3QgZmxvdyA9IHRoaXMuZ2V0Rmxvd1NhZmUoKTtcblxuICAgIGlmIChmbG93LnByb3BlcnRpZXMuc3RhdGVmdWwgJiYgIWhhc092ZXJyaWRlcykge1xuICAgICAgLy8gU2tpcCBpbml0aWFsaXphdGlvbiBhcyBiYWNrZW5kIHdpbGwgdGFrZSBwcm9jZXNzb3JzIGZyb20gU0ZcbiAgICAgIHJldHVybiBvZih1bmRlZmluZWQpO1xuICAgIH1cblxuICAgIGNvbnN0IG93bmVycyQgPSBPYmplY3QudmFsdWVzKHRoaXMuZmxvd0luZm9TZXJ2aWNlLnRlbXBsYXRlcylcbiAgICAgIC5tYXAodGVtcGxhdGUgPT4ge1xuICAgICAgICBpZiAoIXRlbXBsYXRlKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgbG9jYWxQcm9jZXNzb3JzJCA9XG4gICAgICAgICAgdGhpcy5jdXN0b21pemF0aW9uU2VydmljZT8uZ2V0VGVtcGxhdGVDb25maWd1cmF0aW9uUHJvY2Vzc29ycz8uKHRlbXBsYXRlLm5hbWUpID8/IG9mKG51bGwpO1xuXG4gICAgICAgIHJldHVybiBsb2NhbFByb2Nlc3NvcnMkLnBpcGUoXG4gICAgICAgICAgc3dpdGNoTWFwKHByb2Nlc3NvcnMgPT5cbiAgICAgICAgICAgIHByb2Nlc3NvcnMgPyBvZihwcm9jZXNzb3JzKSA6IHRoaXMucHJvY2Vzc29yc0FwaVNlcnZpY2UuZmV0Y2hDb25maWd1cmF0aW9uUHJvY2Vzc29ycyQodGVtcGxhdGUuaWQpLFxuICAgICAgICAgICksXG4gICAgICAgICAgdGFwKHByb2Nlc3NvcnMgPT4ge1xuICAgICAgICAgICAgY29uc3QgcHJvY2Vzc29yc01hcCA9IHByb2Nlc3NvcnMucmVkdWNlKChhY2M6IFJlY29yZDxzdHJpbmcsIENvbmZpZ3VyYXRpb25Qcm9jZXNzb3I+LCBwKSA9PiB7XG4gICAgICAgICAgICAgIGFjY1twLmFwaU5hbWVdID0gcDtcbiAgICAgICAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgICAgICAgIH0sIHt9KTtcblxuICAgICAgICAgICAgdGhpcy5wcm9jZXNzb3JzW3RlbXBsYXRlLmlkXSA9IHByb2Nlc3NvcnNNYXA7XG4gICAgICAgICAgfSksXG4gICAgICAgICk7XG4gICAgICB9KVxuICAgICAgLmZpbHRlcihpc0RlZmluZWQpO1xuXG4gICAgaWYgKCFvd25lcnMkLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIG9mKHVuZGVmaW5lZCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZvcmtKb2luKG93bmVycyQpLnBpcGUobWFwKG5vb3ApKTtcbiAgfVxuXG4gIHByaXZhdGUgZXhlY3V0ZUFjdGlvblNjcmlwdChyZXF1ZXN0OiBGbG93U3RhdGUsIGV4ZWN1dGFibGU6IEZsb3dTdGF0ZUV4ZWN1dGFibGVEVE8pOiBGbG93U3RhdGUgfCBudWxsIHtcbiAgICBjb25zdCBjb25maWd1cmF0aW9uUHJvY2Vzc29yID0gdGhpcy5wcm9jZXNzb3JzW2V4ZWN1dGFibGUub3duZXJJZF0/LltleGVjdXRhYmxlLmFwaU5hbWVdO1xuXG4gICAgaWYgKCFjb25maWd1cmF0aW9uUHJvY2Vzc29yPy5zY3JpcHQpIHtcbiAgICAgIGNvbnN0IHNjb3BlID0gdGhpcy5nZXRTY29wZUJ5T3duZXJJZChleGVjdXRhYmxlLm93bmVySWQpO1xuICAgICAgY29uc3Qgc2NvcGVUZXh0ID0gc2NvcGUgPyBgIGluICR7c2NvcGV9YCA6ICcnO1xuICAgICAgdGhyb3cgYENvbmZpZ3VyYXRpb25Qcm9jZXNzb3IgJHtleGVjdXRhYmxlLmFwaU5hbWV9JHtzY29wZVRleHR9IG5vdCBmb3VuZGA7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuZXhlY3V0ZVByb2Nlc3NvclNjcmlwdChyZXF1ZXN0LCBjb25maWd1cmF0aW9uUHJvY2Vzc29yLCBleGVjdXRhYmxlLmlucHV0RGF0YSkgYXMgRmxvd1N0YXRlO1xuICB9XG5cbiAgcHJpdmF0ZSBleGVjdXRlU2VsZWN0b3JTY3JpcHQocmVxdWVzdDogRmxvd1N0YXRlLCBleGVjdXRhYmxlOiBGbG93U3RhdGVFeGVjdXRhYmxlRFRPKTogdW5rbm93biB7XG4gICAgY29uc3QgY29uZmlndXJhdGlvblByb2Nlc3NvciA9IHRoaXMucHJvY2Vzc29yc1tleGVjdXRhYmxlLm93bmVySWRdPy5bZXhlY3V0YWJsZS5hcGlOYW1lXTtcblxuICAgIGlmICghY29uZmlndXJhdGlvblByb2Nlc3Nvcj8uc2NyaXB0KSB7XG4gICAgICBjb25zdCBzY29wZSA9IHRoaXMuZ2V0U2NvcGVCeU93bmVySWQoZXhlY3V0YWJsZS5vd25lcklkKTtcbiAgICAgIGNvbnN0IHNjb3BlVGV4dCA9IHNjb3BlID8gYCBpbiAke3Njb3BlfWAgOiAnJztcbiAgICAgIHRocm93IGBDb25maWd1cmF0aW9uUHJvY2Vzc29yICR7ZXhlY3V0YWJsZS5hcGlOYW1lfSR7c2NvcGVUZXh0fSBub3QgZm91bmRgO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmV4ZWN1dGVQcm9jZXNzb3JTY3JpcHQocmVxdWVzdCwgY29uZmlndXJhdGlvblByb2Nlc3NvciwgZXhlY3V0YWJsZS5pbnB1dERhdGEpO1xuICB9XG5cbiAgcHJpdmF0ZSBleGVjdXRlUHJvY2Vzc29yU2NyaXB0KFxuICAgIHJlcXVlc3Q6IEZsb3dTdGF0ZSxcbiAgICBjb25maWd1cmF0aW9uUHJvY2Vzc29yOiBDb25maWd1cmF0aW9uUHJvY2Vzc29yLFxuICAgIGlucHV0RGF0YTogdW5rbm93bixcbiAgKTogdW5rbm93biB7XG4gICAgbGV0IGZ1bmN0aW9uVG9FeGVjdXRlID0gdGhpcy5leGVjdXRlZEZ1bmN0aW9uc1tjb25maWd1cmF0aW9uUHJvY2Vzc29yLmFwaU5hbWVdO1xuICAgIGlmICghZnVuY3Rpb25Ub0V4ZWN1dGUpIHtcbiAgICAgIGZ1bmN0aW9uVG9FeGVjdXRlID0gbmV3IEZ1bmN0aW9uKGAke2NvbmZpZ3VyYXRpb25Qcm9jZXNzb3Iuc2NyaXB0fVxcbnJldHVybiB0cmFuc2Zvcm07YCkoKTtcbiAgICAgIHRoaXMuZXhlY3V0ZWRGdW5jdGlvbnNbY29uZmlndXJhdGlvblByb2Nlc3Nvci5hcGlOYW1lXSA9IGZ1bmN0aW9uVG9FeGVjdXRlO1xuICAgIH1cblxuICAgIHJldHVybiBmdW5jdGlvblRvRXhlY3V0ZSh7XG4gICAgICByZXF1ZXN0LFxuICAgICAgaW5wdXREYXRhLFxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBnZW5lcmF0ZVJlcXVlc3RJZChzY29wZTogVUlUZW1wbGF0ZVR5cGUsIHNlbGVjdG9yTmFtZTogc3RyaW5nLCBpbnB1dERhdGE/OiB1bmtub3duKTogc3RyaW5nIHtcbiAgICBjb25zdCBpbnB1dERhdGFIYXNoID0gVVVJRC5oZXgoSlNPTi5zdHJpbmdpZnkoaW5wdXREYXRhKSB8fCAnJykuc2xpY2UoMCwgOCk7XG4gICAgcmV0dXJuIGAke3Njb3BlfS8ke3NlbGVjdG9yTmFtZX0vJHtpbnB1dERhdGFIYXNofWA7XG4gIH1cblxuICBwcml2YXRlIGdldERlZmF1bHRFeGVjdXRpb25SZXF1ZXN0RFRPKCk6IEZsb3dTdGF0ZUV4ZWN1dGlvblJlcXVlc3REVE8ge1xuICAgIGNvbnN0IHJlcXVlc3Q6IEZsb3dTdGF0ZUV4ZWN1dGlvblJlcXVlc3REVE8gPSB7XG4gICAgICBhY3Rpb25zOiBbXSxcbiAgICAgIHNlbGVjdG9yczoge30sXG4gICAgfTtcblxuICAgIGlmICh0aGlzLmdldEZsb3dTYWZlKCkucHJvcGVydGllcy5zdGFuZGFsb25lKSB7XG4gICAgICByZXR1cm4gcmVxdWVzdDtcbiAgICB9XG5cbiAgICBjb25zdCBvd25lcklkID0gdGhpcy5nZXRPd25lcklkQnlTY29wZShVSVRlbXBsYXRlVHlwZS5GTE9XX0VOR0lORSk7XG5cbiAgICByZXF1ZXN0LmFjdGlvbnM/LnB1c2goe1xuICAgICAgYXBpTmFtZTogJ1VQREFURV9QUklDRV9MSVNUJyxcbiAgICAgIG93bmVySWQsXG4gICAgICBpbnB1dERhdGE6IHt9LFxuICAgIH0pO1xuICAgIHJlcXVlc3QuYWN0aW9ucz8ucHVzaCh7XG4gICAgICBhcGlOYW1lOiAnVVBEQVRFX0FTU0VUX0lEUycsXG4gICAgICBvd25lcklkLFxuICAgICAgaW5wdXREYXRhOiB7fSxcbiAgICB9KTtcblxuICAgIHJlcXVlc3QuYWN0aW9ucz8ucHVzaCh7XG4gICAgICBhcGlOYW1lOiAnVVBEQVRFX0NPTlRFWFRfUFJPUEVSVElFUycsXG4gICAgICBvd25lcklkLFxuICAgICAgaW5wdXREYXRhOiB0aGlzLmNvbnRleHRTZXJ2aWNlLnJlc29sdmUoKS5wcm9wZXJ0aWVzLFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHJlcXVlc3Q7XG4gIH1cbn1cbiJdfQ==
472
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmxvdy1zdGF0ZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9zZGsvY29yZS9zZXJ2aWNlcy9mbG93LXN0YXRlLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzdELE9BQU8sRUFBRSxpQ0FBaUMsRUFBRSxtQkFBbUIsRUFBRSxlQUFlLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMxRyxPQUFPLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ2pFLE9BQU8sRUFJTCx3QkFBd0IsRUFHeEIsMkJBQTJCLEVBQzNCLFVBQVUsRUFRVixTQUFTLEVBRVQsY0FBYyxFQUNkLElBQUksR0FDTCxNQUFNLGtCQUFrQixDQUFDO0FBQzFCLE9BQU8sRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFjLE9BQU8sRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUNoRSxPQUFPLEVBQ0wsZUFBZSxFQUNmLGFBQWEsRUFDYixNQUFNLEVBQ04sUUFBUSxFQUNSLFFBQVEsRUFDUixHQUFHLEVBQ0gsSUFBSSxFQUVKLEVBQUUsRUFDRixXQUFXLEVBQ1gsT0FBTyxFQUNQLFNBQVMsRUFDVCxTQUFTLEVBQ1QsR0FBRyxHQUNKLE1BQU0sTUFBTSxDQUFDO0FBQ2QsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQ3RELE9BQU8sRUFBcUIsa0JBQWtCLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUUxRixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDbkQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDOzs7Ozs7OztBQWMxRCxNQUFNLE9B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RUFBRSxFQUFFO1NBQ2QsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUM7WUFDcEIsT0FBTyxFQUFFLGtCQUFrQjtZQUMzQixPQUFPO1lBQ1AsU0FBUyxFQUFFLEVBQUU7U0FDZCxDQUFDLENBQUM7UUFFSCxPQUFPLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQztZQUNwQixPQUFPLEVBQUUsMkJBQTJCO1lBQ3BDLE9BQU87WUFDUCxTQUFTLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxVQUFVO1NBQ3BELENBQUMsQ0FBQztRQUVILE9BQU8sT0FBTyxDQUFDO0lBQ2pCLENBQUM7OzZHQTlsQlUsZ0JBQWdCLHVTQXdCTCxrQkFBa0I7aUhBeEI3QixnQkFBZ0I7MkZBQWhCLGdCQUFnQjtrQkFENUIsVUFBVTs7MEJBeUJOLFFBQVE7OzBCQUFJLE1BQU07MkJBQUMsa0JBQWtCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0LCBJbmplY3RhYmxlLCBPcHRpb25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29uZmlndXJhdGlvblByb2Nlc3NvcnNBcGlTZXJ2aWNlLCBGbG93U3RhdGVBcGlTZXJ2aWNlLCBRdW90ZUFwaVNlcnZpY2UgfSBmcm9tICdAdmVsb2NlYXBwcy9hcGknO1xuaW1wb3J0IHsgVG9hc3RTZXJ2aWNlLCBUb2FzdFR5cGUgfSBmcm9tICdAdmVsb2NlYXBwcy9jb21wb25lbnRzJztcbmltcG9ydCB7XG4gIENoYXJnZSxcbiAgQ29tcGlsZWRQcmljZVBsYW4sXG4gIENvbmZpZ3VyYXRpb25Db250ZXh0LFxuICBDb25maWd1cmF0aW9uQ29udGV4dE1vZGUsXG4gIENvbmZpZ3VyYXRpb25Qcm9jZXNzb3IsXG4gIENvbmZpZ3VyYXRpb25Qcm9jZXNzb3JTY3JpcHRGbixcbiAgQ29uZmlndXJhdGlvblByb2Nlc3NvclR5cGVzLFxuICBFbnRpdHlVdGlsLFxuICBGbG93LFxuICBGbG93U3RhdGUsXG4gIEZsb3dTdGF0ZUV4ZWN1dGFibGVEVE8sXG4gIEZsb3dTdGF0ZUV4ZWN1dGlvblJlcXVlc3QsXG4gIEZsb3dTdGF0ZUV4ZWN1dGlvblJlcXVlc3REVE8sXG4gIEZsb3dTdGF0ZUV4ZWN1dGlvblJlc3VsdCxcbiAgRmxvd1N0YXRlU2VsZWN0b3JSZXNwb25zZSxcbiAgaXNEZWZpbmVkLFxuICBNZXRyaWNSdWxlLFxuICBVSVRlbXBsYXRlVHlwZSxcbiAgVVVJRCxcbn0gZnJvbSAnQHZlbG9jZWFwcHMvY29yZSc7XG5pbXBvcnQgeyBhc3NpZ24sIGNsb25lRGVlcCwgRGljdGlvbmFyeSwgZmxhdHRlbiB9IGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQge1xuICBCZWhhdmlvclN1YmplY3QsXG4gIGNvbWJpbmVMYXRlc3QsXG4gIGZpbHRlcixcbiAgZmluYWxpemUsXG4gIGZvcmtKb2luLFxuICBtYXAsXG4gIG5vb3AsXG4gIE9ic2VydmFibGUsXG4gIG9mLFxuICBzaGFyZVJlcGxheSxcbiAgU3ViamVjdCxcbiAgc3dpdGNoTWFwLFxuICB0YWtlVW50aWwsXG4gIHRhcCxcbn0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBGbG93Q29uZmlndXJhdGlvblNlcnZpY2UgfSBmcm9tICcuLi9tb2R1bGVzJztcbmltcG9ydCB7IEZsb3dDdXN0b21pemF0aW9uLCBGTE9XX0NVU1RPTUlaQVRJT04gfSBmcm9tICcuLi90eXBlcy9mbG93LWN1c3RvbWl6YXRpb24udHlwZXMnO1xuaW1wb3J0IHsgRmxvd1N0YXRlU3Vic2NyaXB0aW9uT3B0aW9ucyB9IGZyb20gJy4uL3R5cGVzL2Zsb3ctc3RhdGUudHlwZXMnO1xuaW1wb3J0IHsgQ29udGV4dFNlcnZpY2UgfSBmcm9tICcuL2NvbnRleHQuc2VydmljZSc7XG5pbXBvcnQgeyBGbG93SW5mb1NlcnZpY2UgfSBmcm9tICcuL2Zsb3ctaW5mby5zZXJ2aWNlJztcbmltcG9ydCB7IFF1b3RlRHJhZnRTZXJ2aWNlIH0gZnJvbSAnLi9xdW90ZS1kcmFmdC5zZXJ2aWNlJztcblxudHlwZSBQcm9jZXNzb3JzTWFwID0gUGFydGlhbDx7XG4gIFtvd25lcklkOiBzdHJpbmddOiB7XG4gICAgW2FwaU5hbWU6IHN0cmluZ106IENvbmZpZ3VyYXRpb25Qcm9jZXNzb3I7XG4gIH07XG59PjtcblxudHlwZSBTdWJzY3JpcHRpb24gPSB7XG4gIHJlcXVlc3Q6IEZsb3dTdGF0ZUV4ZWN1dGlvblJlcXVlc3REVE87XG4gIGRhdGEkOiBCZWhhdmlvclN1YmplY3Q8dW5rbm93bj47XG59O1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgRmxvd1N0YXRlU2VydmljZSB7XG4gIHB1YmxpYyBjaGFyZ2VzJDogT2JzZXJ2YWJsZTxEaWN0aW9uYXJ5PENoYXJnZT4+O1xuICBwdWJsaWMgcHJpY2VQbGFucyQ6IE9ic2VydmFibGU8RGljdGlvbmFyeTxDb21waWxlZFByaWNlUGxhbj4+O1xuICBwdWJsaWMgYWN0aXZlTWV0cmljcyQ6IE9ic2VydmFibGU8TWV0cmljUnVsZVtdPjtcblxuICBwcml2YXRlIHJlYWRvbmx5IE5PVF9JTklUSUFMSVpFRCA9IFN5bWJvbCgpO1xuXG4gIHByaXZhdGUgZXhlY3V0ZWRGdW5jdGlvbnM6IERpY3Rpb25hcnk8Q29uZmlndXJhdGlvblByb2Nlc3NvclNjcmlwdEZuPiA9IHt9O1xuICBwcml2YXRlIHN0YXRlSWQkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxzdHJpbmcgfCBudWxsPihudWxsKTtcbiAgcHJpdmF0ZSBfaGFzU3RhdGVmdWxVbnNhdmVkQ2hhbmdlcyA9IGZhbHNlO1xuICBwcml2YXRlIHByb2Nlc3NvcnM6IFByb2Nlc3NvcnNNYXAgPSB7fTtcbiAgcHJpdmF0ZSBzdWJzY3JpcHRpb25zOiBSZWNvcmQ8c3RyaW5nLCBTdWJzY3JpcHRpb24+ID0ge307XG4gIHByaXZhdGUgZmxvd1N0b3JlOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHt9O1xuICBwcml2YXRlIGNsZWFudXAkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGNvbnRleHRTZXJ2aWNlOiBDb250ZXh0U2VydmljZSxcbiAgICBwcml2YXRlIHF1b3RlRHJhZnRTZXJ2aWNlOiBRdW90ZURyYWZ0U2VydmljZSxcbiAgICBwcml2YXRlIGZsb3dJbmZvU2VydmljZTogRmxvd0luZm9TZXJ2aWNlLFxuICAgIHByaXZhdGUgZmxvd0NvbmZpZ3VyYXRpb246IEZsb3dDb25maWd1cmF0aW9uU2VydmljZSxcbiAgICBwcml2YXRlIHByb2Nlc3NvcnNBcGlTZXJ2aWNlOiBDb25maWd1cmF0aW9uUHJvY2Vzc29yc0FwaVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBmbG93U3RhdGVBcGlTZXJ2aWNlOiBGbG93U3RhdGVBcGlTZXJ2aWNlLFxuICAgIHByaXZhdGUgcXVvdGVBcGlTZXJ2aWNlOiBRdW90ZUFwaVNlcnZpY2UsXG4gICAgcHJpdmF0ZSB0b2FzdFNlcnZpY2U6IFRvYXN0U2VydmljZSxcbiAgICBAT3B0aW9uYWwoKSBASW5qZWN0KEZMT1dfQ1VTVE9NSVpBVElPTikgcHJpdmF0ZSBjdXN0b21pemF0aW9uU2VydmljZT86IEZsb3dDdXN0b21pemF0aW9uLFxuICApIHtcbiAgICAvKlxuICAgICAgSW4gc3RhdGVsZXNzIG1vZGUgd2F0Y2ggUXVvdGVEcmFmdCBjaGFuZ2VzIGFuZCBjYWxsIGV4ZWN1dGVSZXF1ZXN0IHNvIHRoYXRcbiAgICAgIGFsbCBzdWJzY3JpcHRpb25zIGdldCB0aGVpciB1cGRhdGVzIGFjY29yZGluZyB0byB1cGRhdGVkIFF1b3RlRHJhZnRcbiAgICAqL1xuICAgIHRoaXMuaXNJbml0aWFsaXplZCQoKVxuICAgICAgLnBpcGUoXG4gICAgICAgIGZpbHRlcihCb29sZWFuKSxcbiAgICAgICAgZmlsdGVyKCgpID0+ICF0aGlzLmdldEZsb3dTYWZlKCkucHJvcGVydGllcy5zdGF0ZWZ1bCksXG4gICAgICAgIHN3aXRjaE1hcCgoKSA9PiB0aGlzLmZsb3dDb25maWd1cmF0aW9uLnVwZGF0ZWQkKSxcbiAgICAgICAgc3dpdGNoTWFwKCgpID0+IHRoaXMuZXhlY3V0ZVJlcXVlc3QkKHt9LCB0cnVlKSksXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCk7XG5cbiAgICB0aGlzLmNoYXJnZXMkID0gdGhpcy5mbG93SW5mb1NlcnZpY2UuZmxvdyQucGlwZShcbiAgICAgIGZpbHRlcihpc0RlZmluZWQpLFxuICAgICAgc3dpdGNoTWFwKGZsb3cgPT4ge1xuICAgICAgICBpZiAoIWZsb3cucHJvcGVydGllcy5zdGF0ZWZ1bCkge1xuICAgICAgICAgIHJldHVybiB0aGlzLnF1b3RlRHJhZnRTZXJ2aWNlLnF1b3RlRHJhZnQkLnBpcGUobWFwKHF1b3RlRHJhZnQgPT4gcXVvdGVEcmFmdC5jaGFyZ2VzKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuc3Vic2NyaWJlJDxEaWN0aW9uYXJ5PENoYXJnZT4+KFVJVGVtcGxhdGVUeXBlLkZMT1dfRU5HSU5FLCAnQ0hBUkdFUycsIG51bGwsIHtcbiAgICAgICAgICAgIGNvbGQ6IHRydWUsXG4gICAgICAgICAgfSkucGlwZShtYXAocmVzcG9uc2UgPT4gKHJlc3BvbnNlLnN1Y2Nlc3MgPyByZXNwb25zZS5yZXN1bHQgOiB7fSkpKTtcbiAgICAgICAgfVxuICAgICAgfSksXG4gICAgICBmaWx0ZXIoaXNEZWZpbmVkKSxcbiAgICAgIHNoYXJlUmVwbGF5KCksXG4gICAgKTtcbiAgICB0aGlzLmNoYXJnZXMkLnN1YnNjcmliZSgpO1xuXG4gICAgdGhpcy5wcmljZVBsYW5zJCA9IHRoaXMuZmxvd0luZm9TZXJ2aWNlLmZsb3ckLnBpcGUoXG4gICAgICBmaWx0ZXIoaXNEZWZpbmVkKSxcbiAgICAgIHN3aXRjaE1hcChmbG93ID0+IHtcbiAgICAgICAgaWYgKCFmbG93LnByb3BlcnRpZXMuc3RhdGVmdWwpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5xdW90ZURyYWZ0U2VydmljZS5xdW90ZURyYWZ0JC5waXBlKG1hcChxdW90ZURyYWZ0ID0+IHF1b3RlRHJhZnQucHJpY2VQbGFucykpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiB0aGlzLnN1YnNjcmliZSQ8RGljdGlvbmFyeTxDb21waWxlZFByaWNlUGxhbj4+KFVJVGVtcGxhdGVUeXBlLkZMT1dfRU5HSU5FLCAnUFJJQ0VfUExBTlMnLCBudWxsLCB7XG4gICAgICAgICAgICBjb2xkOiB0cnVlLFxuICAgICAgICAgIH0pLnBpcGUobWFwKHJlc3BvbnNlID0+IChyZXNwb25zZS5zdWNjZXNzID8gcmVzcG9uc2UucmVzdWx0IDoge30pKSk7XG4gICAgICAgIH1cbiAgICAgIH0pLFxuICAgICAgZmlsdGVyKGlzRGVmaW5lZCksXG4gICAgICBzaGFyZVJlcGxheSgpLFxuICAgICk7XG4gICAgdGhpcy5wcmljZVBsYW5zJC5zdWJzY3JpYmUoKTtcblxuICAgIHRoaXMuYWN0aXZlTWV0cmljcyQgPSB0aGlzLmZsb3dJbmZvU2VydmljZS5mbG93JC5waXBlKFxuICAgICAgZmlsdGVyKGlzRGVmaW5lZCksXG4gICAgICBzd2l0Y2hNYXAoZmxvdyA9PiB7XG4gICAgICAgIGlmICghZmxvdy5wcm9wZXJ0aWVzLnN0YXRlZnVsKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMucXVvdGVEcmFmdFNlcnZpY2UucXVvdGVEcmFmdCQucGlwZShtYXAocXVvdGVEcmFmdCA9PiBxdW90ZURyYWZ0LmFjdGl2ZU1ldHJpY3MpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5zdWJzY3JpYmUkPE1ldHJpY1J1bGVbXT4oVUlUZW1wbGF0ZVR5cGUuRkxPV19FTkdJTkUsICdBQ1RJVkVfTUVUUklDUycsIG51bGwsIHtcbiAgICAgICAgICAgIGNvbGQ6IHRydWUsXG4gICAgICAgICAgfSkucGlwZShtYXAocmVzcG9uc2UgPT4gKHJlc3BvbnNlLnN1Y2Nlc3MgPyByZXNwb25zZS5yZXN1bHQgOiBbXSkpKTtcbiAgICAgICAgfVxuICAgICAgfSksXG4gICAgICBmaWx0ZXIoaXNEZWZpbmVkKSxcbiAgICAgIHNoYXJlUmVwbGF5KCksXG4gICAgKTtcbiAgICB0aGlzLmFjdGl2ZU1ldHJpY3MkLnN1YnNjcmliZSgpO1xuICB9XG5cbiAgcHVibGljIGluaXQkKCk6IE9ic2VydmFibGU8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLmluaXRQcm9jZXNzb3JzJCgpLnBpcGUoXG4gICAgICBzd2l0Y2hNYXAoKCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5nZXRGbG93U2FmZSgpLnByb3BlcnRpZXMuc3RhdGVmdWwpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5pbml0U3RhdGVmdWwkKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuaW5pdFN0YXRlbGVzcyQoKTtcbiAgICAgICAgfVxuICAgICAgfSksXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBjbGVhbnVwKCk6IHZvaWQge1xuICAgIE9iamVjdC52YWx1ZXModGhpcy5zdWJzY3JpcHRpb25zKS5mb3JFYWNoKCh7IGRhdGEkIH0pID0+IGRhdGEkLmNvbXBsZXRlKCkpO1xuICAgIHRoaXMuc3Vic2NyaXB0aW9ucyA9IHt9O1xuXG4gICAgaWYgKHRoaXMuc3RhdGVJZCQudmFsdWUpIHtcbiAgICAgIHRoaXMuZmxvd1N0YXRlQXBpU2VydmljZS5jYW5jZWwodGhpcy5zdGF0ZUlkJC52YWx1ZSkuc3Vic2NyaWJlKCk7XG4gICAgICB0aGlzLnN0YXRlSWQkLm5leHQobnVsbCk7XG4gICAgfVxuXG4gICAgdGhpcy5wcm9jZXNzb3JzID0ge307XG4gICAgdGhpcy5mbG93U3RvcmUgPSB7fTtcbiAgICB0aGlzLmNsZWFudXAkLm5leHQoKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgaGFzVW5zYXZlZENoYW5nZXMoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0Rmxvd1NhZmUoKS5wcm9wZXJ0aWVzLnN0YXRlZnVsXG4gICAgICA/IHRoaXMuX2hhc1N0YXRlZnVsVW5zYXZlZENoYW5nZXNcbiAgICAgIDogdGhpcy5xdW90ZURyYWZ0U2VydmljZS5oYXNVbnNhdmVkQ2hhbmdlcztcbiAgfVxuXG4gIHB1YmxpYyBnZXQgc3RhdGVJZCgpOiBzdHJpbmcgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5zdGF0ZUlkJC52YWx1ZTtcbiAgfVxuXG4gIHB1YmxpYyBpc0luaXRpYWxpemVkJCgpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gY29tYmluZUxhdGVzdChbdGhpcy5zdGF0ZUlkJCwgdGhpcy5xdW90ZURyYWZ0U2VydmljZS5pc0luaXRpYWxpemVkJF0pLnBpcGUoXG4gICAgICBtYXAodmFsdWVzID0+IHZhbHVlcy5zb21lKEJvb2xlYW4pKSxcbiAgICApO1xuICB9XG5cbiAgcHVibGljIGlzSW5pdGlhbGl6ZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEJvb2xlYW4odGhpcy5zdGF0ZUlkJC52YWx1ZSkgfHwgdGhpcy5xdW90ZURyYWZ0U2VydmljZS5pc0luaXRpYWxpemVkO1xuICB9XG5cbiAgcHVibGljIGV4ZWN1dGUkKFxuICAgIHNjb3BlOiBVSVRlbXBsYXRlVHlwZSxcbiAgICBleGVjOiBGbG93U3RhdGVFeGVjdXRpb25SZXF1ZXN0LFxuICApOiBPYnNlcnZhYmxlPEZsb3dTdGF0ZUV4ZWN1dGlvblJlc3VsdFsnc2VsZWN0b3JzJ10+IHtcbiAgICBjb25zdCByZXF1ZXN0ID0gdGhpcy5leGVjVG9SZXF1ZXN0KHNjb3BlLCBleGVjKTtcblxuICAgIHJldHVybiB0aGlzLmV4ZWN1dGVSZXF1ZXN0JChyZXF1ZXN0KS5waXBlKFxuICAgICAgbWFwKHJlc3VsdCA9PiB7XG4gICAgICAgIC8vIEtlZXAgb25seSByZXF1ZXN0ZWQgcmVzdWx0c1xuICAgICAgICBjb25zdCBhY3R1YWxTZWxlY3RvcnMgPSBPYmplY3QuZW50cmllcyhyZXN1bHQuc2VsZWN0b3JzKS5yZWR1Y2UoXG4gICAgICAgICAgKHRydW5rOiBSZWNvcmQ8c3RyaW5nLCBGbG93U3RhdGVTZWxlY3RvclJlc3BvbnNlPiwgW3JlcXVlc3RJZCwgcmVzdWx0XSkgPT4ge1xuICAgICAgICAgICAgaWYgKGV4ZWMuc2VsZWN0b3JzPy5bcmVxdWVzdElkXSkge1xuICAgICAgICAgICAgICB0cnVua1tyZXF1ZXN0SWRdID0gcmVzdWx0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRydW5rO1xuICAgICAgICAgIH0sXG4gICAgICAgICAge30sXG4gICAgICAgICk7XG5cbiAgICAgICAgcmV0dXJuIGFjdHVhbFNlbGVjdG9ycztcbiAgICAgIH0pLFxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgZGlzcGF0Y2gkKHNjb3BlOiBVSVRlbXBsYXRlVHlwZSwgYWN0aW9uOiBzdHJpbmcsIGlucHV0RGF0YT86IHVua25vd24pOiBPYnNlcnZhYmxlPHZvaWQ+IHtcbiAgICBjb25zdCBleGVjOiBGbG93U3RhdGVFeGVjdXRpb25SZXF1ZXN0ID0ge1xuICAgICAgYWN0aW9uczogW3sgbmFtZTogYWN0aW9uLCBpbnB1dERhdGEgfV0sXG4gICAgfTtcbiAgICBjb25zdCByZXF1ZXN0ID0gdGhpcy5leGVjVG9SZXF1ZXN0KHNjb3BlLCBleGVjKTtcblxuICAgIHJldHVybiB0aGlzLmV4ZWN1dGVSZXF1ZXN0JChyZXF1ZXN0KS5waXBlKG1hcChub29wKSk7XG4gIH1cblxuICBwdWJsaWMgc2VsZWN0JDxSZXNwb25zZSA9IHVua25vd24+KFxuICAgIHNjb3BlOiBVSVRlbXBsYXRlVHlwZSxcbiAgICBzZWxlY3Rvck5hbWU6IHN0cmluZyxcbiAgICBpbnB1dERhdGE/OiB1bmtub3duLFxuICApOiBPYnNlcnZhYmxlPEZsb3dTdGF0ZVNlbGVjdG9yUmVzcG9uc2U8UmVzcG9uc2U+PiB7XG4gICAgY29uc3QgcmVxdWVzdElkID0gdGhpcy5nZW5lcmF0ZVJlcXVlc3RJZChzY29wZSwgc2VsZWN0b3JOYW1lLCBpbnB1dERhdGEpO1xuICAgIGNvbnN0IHJlcXVlc3QgPSB0aGlzLmV4ZWNUb1JlcXVlc3Qoc2NvcGUsIHtcbiAgICAgIHNlbGVjdG9yczoge1xuICAgICAgICBbcmVxdWVzdElkXToge1xuICAgICAgICAgIG5hbWU6IHNlbGVjdG9yTmFtZSxcbiAgICAgICAgICBpbnB1dERhdGEsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHRoaXMuZXhlY3V0ZVJlcXVlc3QkKHJlcXVlc3QpLnBpcGUoXG4gICAgICBtYXAocmVzcG9uc2UgPT4gcmVzcG9uc2Uuc2VsZWN0b3JzW3JlcXVlc3RJZF0gYXMgRmxvd1N0YXRlU2VsZWN0b3JSZXNwb25zZTxSZXNwb25zZT4pLFxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgc3Vic2NyaWJlJDxSZXNwb25zZSA9IHVua25vd24+KFxuICAgIHNjb3BlOiBVSVRlbXBsYXRlVHlwZSxcbiAgICBzZWxlY3Rvck5hbWU6IHN0cmluZyxcbiAgICBpbnB1dERhdGE/OiB1bmtub3duLFxuICAgIG9wdGlvbnM/OiBGbG93U3RhdGVTdWJzY3JpcHRpb25PcHRpb25zLFxuICApOiBPYnNlcnZhYmxlPEZsb3dTdGF0ZVNlbGVjdG9yUmVzcG9uc2U8UmVzcG9uc2U+PiB7XG4gICAgY29uc3QgcmVxdWVzdElkID0gdGhpcy5nZW5lcmF0ZVJlcXVlc3RJZChzY29wZSwgc2VsZWN0b3JOYW1lLCBpbnB1dERhdGEpO1xuXG4gICAgaWYgKCF0aGlzLnN1YnNjcmlwdGlvbnNbcmVxdWVzdElkXSkge1xuICAgICAgY29uc3QgcmVxdWVzdCA9IHRoaXMuZXhlY1RvUmVxdWVzdChzY29wZSwge1xuICAgICAgICBzZWxlY3RvcnM6IHtcbiAgICAgICAgICBbcmVxdWVzdElkXToge1xuICAgICAgICAgICAgbmFtZTogc2VsZWN0b3JOYW1lLFxuICAgICAgICAgICAgaW5wdXREYXRhLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9KTtcblxuICAgICAgdGhpcy5zdWJzY3JpcHRpb25zW3JlcXVlc3RJZF0gPSB7XG4gICAgICAgIHJlcXVlc3QsXG4gICAgICAgIGRhdGEkOiBuZXcgQmVoYXZpb3JTdWJqZWN0PHVua25vd24+KHRoaXMuTk9UX0lOSVRJQUxJWkVEKSxcbiAgICAgIH07XG5cbiAgICAgIGlmICghb3B0aW9ucz8uY29sZCkge1xuICAgICAgICB0aGlzLmV4ZWN1dGVSZXF1ZXN0JChyZXF1ZXN0KS5zdWJzY3JpYmUoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5zdWJzY3JpcHRpb25zW3JlcXVlc3RJZF0uZGF0YSQucGlwZShcbiAgICAgIGZpbHRlcihkYXRhID0+IGRhdGEgIT0gdGhpcy5OT1RfSU5JVElBTElaRUQpLFxuICAgICAgbWFwKGRhdGEgPT4gZGF0YSBhcyBGbG93U3RhdGVTZWxlY3RvclJlc3BvbnNlPFJlc3BvbnNlPiksXG4gICAgICBmaW5hbGl6ZSgoKSA9PiB7XG4gICAgICAgIGlmICghdGhpcy5zdWJzY3JpcHRpb25zW3JlcXVlc3RJZF0uZGF0YSQub2JzZXJ2ZWQpIHtcbiAgICAgICAgICBkZWxldGUgdGhpcy5zdWJzY3JpcHRpb25zW3JlcXVlc3RJZF07XG4gICAgICAgIH1cbiAgICAgIH0pLFxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgc2F2ZSQoKTogT2JzZXJ2YWJsZTx7IHF1b3RlSWQ6IHN0cmluZyB9PiB7XG4gICAgaWYgKHRoaXMuZ2V0Rmxvd1NhZmUoKS5wcm9wZXJ0aWVzLnN0YXRlZnVsKSB7XG4gICAgICBpZiAodGhpcy5zdGF0ZUlkJC52YWx1ZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5mbG93U3RhdGVBcGlTZXJ2aWNlLnNhdmUodGhpcy5zdGF0ZUlkJC52YWx1ZSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHF1b3RlRHJhZnQgPSB0aGlzLnF1b3RlRHJhZnRTZXJ2aWNlLnF1b3RlRHJhZnRGb3JBY3RpdmVQcmljZUxpc3Q7XG4gICAgICBpZiAocXVvdGVEcmFmdCkge1xuICAgICAgICByZXR1cm4gdGhpcy5xdW90ZUFwaVNlcnZpY2UudXBzZXJ0UXVvdGUocXVvdGVEcmFmdCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG9mKHsgcXVvdGVJZDogJycgfSk7XG4gIH1cblxuICBwdWJsaWMgc3VibWl0JCgpOiBPYnNlcnZhYmxlPHsgcXVvdGVJZDogc3RyaW5nIH0+IHtcbiAgICBpZiAodGhpcy5nZXRGbG93U2FmZSgpLnByb3BlcnRpZXMuc3RhdGVmdWwpIHtcbiAgICAgIGlmICh0aGlzLnN0YXRlSWQkLnZhbHVlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmZsb3dTdGF0ZUFwaVNlcnZpY2Uuc3VibWl0KHRoaXMuc3RhdGVJZCQudmFsdWUpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBxdW90ZURyYWZ0ID0gdGhpcy5xdW90ZURyYWZ0U2VydmljZS5xdW90ZURyYWZ0Rm9yQWN0aXZlUHJpY2VMaXN0O1xuICAgICAgaWYgKHF1b3RlRHJhZnQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucXVvdGVBcGlTZXJ2aWNlLnN1Ym1pdFF1b3RlKHF1b3RlRHJhZnQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBvZih7IHF1b3RlSWQ6ICcnIH0pO1xuICB9XG5cbiAgcHVibGljIGdldEZsb3dTdG9yZSgpOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB7XG4gICAgcmV0dXJuIHRoaXMuZmxvd1N0b3JlO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRPd25lcklkQnlTY29wZShzY29wZTogVUlUZW1wbGF0ZVR5cGUpOiBzdHJpbmcge1xuICAgIGNvbnN0IG93bmVySWQgPSB0aGlzLmZsb3dJbmZvU2VydmljZS50ZW1wbGF0ZXNbc2NvcGVdPy5pZDtcbiAgICBpZiAoIW93bmVySWQpIHtcbiAgICAgIHRocm93IGBPd25lcklkIGlzIG5vdCBmb3VuZCBmb3Igc2NvcGUgJHtzY29wZX1gO1xuICAgIH1cblxuICAgIHJldHVybiBvd25lcklkO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRTY29wZUJ5T3duZXJJZChpZDogc3RyaW5nKTogVUlUZW1wbGF0ZVR5cGUgfCB1bmRlZmluZWQge1xuICAgIGZvciAoY29uc3QgdGVtcGxhdGUgb2YgT2JqZWN0LnZhbHVlcyh0aGlzLmZsb3dJbmZvU2VydmljZS50ZW1wbGF0ZXMpKSB7XG4gICAgICBpZiAodGVtcGxhdGUuaWQgPT09IGlkKSB7XG4gICAgICAgIHJldHVybiB0ZW1wbGF0ZS50eXBlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybjtcbiAgfVxuXG4gIHByaXZhdGUgZXhlY1RvUmVxdWVzdChzY29wZTogVUlUZW1wbGF0ZVR5cGUsIGV4ZWM6IEZsb3dTdGF0ZUV4ZWN1dGlvblJlcXVlc3QpOiBGbG93U3RhdGVFeGVjdXRpb25SZXF1ZXN0RFRPIHtcbiAgICBjb25zdCBvd25lcklkID0gdGhpcy5nZXRPd25lcklkQnlTY29wZShzY29wZSk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgYWN0aW9uczogZXhlYy5hY3Rpb25zPy5tYXAoYWN0aW9uID0+ICh7IGFwaU5hbWU6IGFjdGlvbi5uYW1lLCBvd25lcklkLCBpbnB1dERhdGE6IGFjdGlvbi5pbnB1dERhdGEgPz8ge30gfSkpLFxuICAgICAgc2VsZWN0b3JzOlxuICAgICAgICBleGVjLnNlbGVjdG9ycyAmJlxuICAgICAgICBPYmplY3QuZW50cmllcyhleGVjLnNlbGVjdG9ycykucmVkdWNlKFxuICAgICAgICAgICh0cnVuazogUmVjb3JkPHN0cmluZywgRmxvd1N0YXRlRXhlY3V0YWJsZURUTz4sIFtrZXksIHNlbGVjdG9yXSkgPT4gKHtcbiAgICAgICAgICAgIC4uLnRydW5rLFxuICAgICAgICAgICAgW2tleV06IHsgYXBpTmFtZTogc2VsZWN0b3IubmFtZSwgb3duZXJJZCwgaW5wdXREYXRhOiBzZWxlY3Rvci5pbnB1dERhdGEgPz8ge30gfSxcbiAgICAgICAgICB9KSxcbiAgICAgICAgICB7fSxcbiAgICAgICAgKSxcbiAgICB9O1xuICB9XG5cbiAgcHVibGljIGV4ZWN1dGVSZXF1ZXN0JChcbiAgICByZXF1ZXN0OiBGbG93U3RhdGVFeGVjdXRpb25SZXF1ZXN0RFRPLFxuICAgIGZvcmNlU3Vic2NyaXB0aW9uczogYm9vbGVhbiA9IGZhbHNlLFxuICApOiBPYnNlcnZhYmxlPEZsb3dTdGF0ZUV4ZWN1dGlvblJlc3VsdD4ge1xuICAgIGNvbnN0IGZ1bGxSZXF1ZXN0ID0gY2xvbmVEZWVwKHJlcXVlc3QpO1xuICAgIGlmIChmdWxsUmVxdWVzdC5hY3Rpb25zPy5sZW5ndGggfHwgZm9yY2VTdWJzY3JpcHRpb25zKSB7XG4gICAgICBmb3IgKGNvbnN0IHN1YnNjcmlwdGlvbiBvZiBPYmplY3QudmFsdWVzKHRoaXMuc3Vic2NyaXB0aW9ucykpIHtcbiAgICAgICAgZnVsbFJlcXVlc3Quc2VsZWN0b3JzID0gYXNzaWduKGZ1bGxSZXF1ZXN0LnNlbGVjdG9ycywgc3Vic2NyaXB0aW9uLnJlcXVlc3Quc2VsZWN0b3JzKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBleGVjdXRpb24kID0gdGhpcy5nZXRGbG93U2FmZSgpLnByb3BlcnRpZXMuc3RhdGVmdWxcbiAgICAgID8gdGhpcy5leGVjdXRlU3RhdGVmdWwkKGZ1bGxSZXF1ZXN0KVxuICAgICAgOiB0aGlzLmV4ZWN1dGVTdGF0ZWxlc3MkKGZ1bGxSZXF1ZXN0KTtcblxuICAgIHJldHVybiBleGVjdXRpb24kLnBpcGUodGFwKHJlc3VsdCA9PiB0aGlzLmhhbmRsZVNlbGVjdG9yc1Jlc3BvbnNlKHJlc3VsdC5zZWxlY3RvcnMpKSk7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZVNlbGVjdG9yc1Jlc3BvbnNlKHNlbGVjdG9yczogUmVjb3JkPHN0cmluZywgRmxvd1N0YXRlU2VsZWN0b3JSZXNwb25zZTx1bmtub3duPj4pOiB2b2lkIHtcbiAgICBPYmplY3QuZW50cmllcyhzZWxlY3RvcnMpLmZvckVhY2goKFtyZXF1ZXN0SWQsIHNlbGVjdG9yUmVzdWx0XSkgPT4ge1xuICAgICAgaWYgKCFzZWxlY3RvclJlc3VsdC5zdWNjZXNzKSB7XG4gICAgICAgIHRoaXMudG9hc3RTZXJ2aWNlLmFkZCh7IHNldmVyaXR5OiBUb2FzdFR5cGUuZXJyb3IsIHN1bW1hcnk6IHNlbGVjdG9yUmVzdWx0LmVycm9yTWVzc2FnZSB9KTtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgc3Vic2NyaXB0aW9uJCA9IHRoaXMuc3Vic2NyaXB0aW9uc1tyZXF1ZXN0SWRdPy5kYXRhJDtcbiAgICAgIGlmIChzdWJzY3JpcHRpb24kKSB7XG4gICAgICAgIHN1YnNjcmlwdGlvbiQubmV4dChzZWxlY3RvclJlc3VsdCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGluaXRTdGF0ZWZ1bCQoKTogT2JzZXJ2YWJsZTx2b2lkPiB7XG4gICAgLy8gU3Vic2NyaXB0aW9uc1xuICAgIHRoaXMuc3Vic2NyaWJlJDxDb25maWd1cmF0aW9uQ29udGV4dD4oVUlUZW1wbGF0ZVR5cGUuRkxPV19FTkdJTkUsICdDT05URVhUJywgbnVsbCwgeyBjb2xkOiB0cnVlIH0pXG4gICAgICAucGlwZShcbiAgICAgICAgdGFwKHJlc3BvbnNlID0+IHtcbiAgICAgICAgICBpZiAocmVzcG9uc2Uuc3VjY2Vzcykge1xuICAgICAgICAgICAgdGhpcy5jb250ZXh0U2VydmljZS51cGRhdGUocmVzcG9uc2UucmVzdWx0KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pLFxuICAgICAgICB0YWtlVW50aWwodGhpcy5jbGVhbnVwJCksXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCk7XG5cbiAgICBjb25zdCBwcm9jZXNzb3JzTGlzdCA9IGZsYXR0ZW4oT2JqZWN0LnZhbHVlcyh0aGlzLnByb2Nlc3NvcnMpLm1hcChvd25lck1hcCA9PiBPYmplY3QudmFsdWVzKG93bmVyTWFwID8/IHt9KSkpO1xuICAgIGNvbnN0IHByb2Nlc3NvcnMgPSBwcm9jZXNzb3JzTGlzdC5sZW5ndGggPyBwcm9jZXNzb3JzTGlzdCA6IHVuZGVmaW5lZDtcbiAgICBjb25zdCBzZWxlY3RvcnMgPSBPYmplY3QudmFsdWVzKHRoaXMuc3Vic2NyaXB0aW9ucylcbiAgICAgIC5tYXAoKHsgcmVxdWVzdCB9KSA9PiByZXF1ZXN0LnNlbGVjdG9ycylcbiAgICAgIC5maWx0ZXIoaXNEZWZpbmVkKVxuICAgICAgLnJlZHVjZSgodHJ1bmssIHNlbGVjdG9ycykgPT4gKHsgLi4udHJ1bmssIC4uLnNlbGVjdG9ycyB9KSwge30pO1xuICAgIGNvbnN0IHJlcXVlc3QgPSB0aGlzLmdldERlZmF1bHRFeGVjdXRpb25SZXF1ZXN0RFRPKCk7XG5cbiAgICByZXR1cm4gdGhpcy5mbG93U3RhdGVBcGlTZXJ2aWNlXG4gICAgICAuaW5pdCh7XG4gICAgICAgIHF1b3RlSWQ6IHRoaXMuY29udGV4dFNlcnZpY2UucmVzb2x2ZSgpLmhlYWRlcklkLFxuICAgICAgICBwYXJhbXM6IHRoaXMuZmxvd0luZm9TZXJ2aWNlLnBhcmFtcyA/PyB7fSxcbiAgICAgICAgYWN0aW9uc092ZXJyaWRlOiBwcm9jZXNzb3JzPy5maWx0ZXIocHJvY2Vzc29yID0+IHByb2Nlc3Nvci50eXBlID09PSBDb25maWd1cmF0aW9uUHJvY2Vzc29yVHlwZXMuQUNUSU9OKSxcbiAgICAgICAgc2VsZWN0b3JzT3ZlcnJpZGU6IHByb2Nlc3NvcnM/LmZpbHRlcihwcm9jZXNzb3IgPT4gcHJvY2Vzc29yLnR5cGUgPT09IENvbmZpZ3VyYXRpb25Qcm9jZXNzb3JUeXBlcy5TRUxFQ1RPUiksXG4gICAgICAgIHNlbGVjdG9yczogeyAuLi5zZWxlY3RvcnMsIC4uLnJlcXVlc3Quc2VsZWN0b3JzIH0sXG4gICAgICAgIGFjdGlvbnM6IHJlcXVlc3QuYWN0aW9ucyxcbiAgICAgIH0pXG4gICAgICAucGlwZShcbiAgICAgICAgbWFwKCh7IHN0YXRlSWQsIHNlbGVjdG9ycyB9KSA9PiB7XG4gICAgICAgICAgdGhpcy5oYW5kbGVTZWxlY3RvcnNSZXNwb25zZShzZWxlY3RvcnMpO1xuICAgICAgICAgIHRoaXMuc3RhdGVJZCQubmV4dChzdGF0ZUlkKTtcbiAgICAgICAgfSksXG4gICAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBleGVjdXRlU3RhdGVmdWwkKHJlcXVlc3Q6IEZsb3dTdGF0ZUV4ZWN1dGlvblJlcXVlc3REVE8pOiBPYnNlcnZhYmxlPEZsb3dTdGF0ZUV4ZWN1dGlvblJlc3VsdD4ge1xuICAgIGlmICghdGhpcy5zdGF0ZUlkJC52YWx1ZSkge1xuICAgICAgdGhyb3cgJ1N0YXRlZnVsIHNlc3Npb24gaXMgbm90IGluaXRpYWxpemVkJztcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5mbG93U3RhdGVBcGlTZXJ2aWNlLmV4ZWN1dGUodGhpcy5zdGF0ZUlkJC52YWx1ZSwgcmVxdWVzdCkucGlwZShcbiAgICAgIHRhcCgoKSA9PiB7XG4gICAgICAgIGlmIChyZXF1ZXN0LmFjdGlvbnM/Lmxlbmd0aCkge1xuICAgICAgICAgIHRoaXMuX2hhc1N0YXRlZnVsVW5zYXZlZENoYW5nZXMgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9KSxcbiAgICAgIHRhcChyZXNwb25zZSA9PiB0aGlzLnN0YXRlSWQkLm5leHQocmVzcG9uc2Uuc3RhdGVJZCkpLFxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGluaXRTdGF0ZWxlc3MkKCk6IE9ic2VydmFibGU8dm9pZD4ge1xuICAgIGNvbnN0IHsgaGVhZGVySWQgfSA9IHRoaXMuY29udGV4dFNlcnZpY2UucmVzb2x2ZSgpO1xuXG4gICAgcmV0dXJuIHRoaXMucXVvdGVEcmFmdFNlcnZpY2UuaW5pdChoZWFkZXJJZCwgdGhpcy5mbG93SW5mb1NlcnZpY2UucGFyYW1zID8/IHt9KS5waXBlKFxuICAgICAgc3dpdGNoTWFwKCgpID0+IHRoaXMuZXhlY3V0ZVJlcXVlc3QkKHRoaXMuZ2V0RGVmYXVsdEV4ZWN1dGlvblJlcXVlc3REVE8oKSkpLFxuICAgICAgc3dpdGNoTWFwKCgpID0+IHRoaXMuY2FsY3VsYXRlJCgpKSxcbiAgICAgIHRhcCgoKSA9PiB0aGlzLnF1b3RlRHJhZnRTZXJ2aWNlLmZpbmFsaXplSW5pdCgpKSxcbiAgICAgIG1hcChub29wKSxcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBjYWxjdWxhdGUkKCk6IE9ic2VydmFibGU8dm9pZD4ge1xuICAgIGNvbnN0IGZsb3dTdGF0ZSA9IHRoaXMucXVvdGVEcmFmdFNlcnZpY2UucXVvdGVEcmFmdDtcbiAgICBpZiAoIWZsb3dTdGF0ZSkge1xuICAgICAgcmV0dXJuIG9mKHVuZGVmaW5lZCk7XG4gICAgfVxuXG4gICAgLypcbiAgICAgIERvbid0IGV4ZWN1dGUgcHJvY2VkdXJlcyB3aGVuOlxuICAgICAgICAqIEluaXRpYWxpemluZyBhIHN0YW5kYWxvbmUgcHJvZHVjdCBjb25maWd1cmF0aW9uIFVJLCBhcyBwcm9jZWR1cmUgaXMgZXhlY3V0ZSBpbiAvcHJpY2UgY2FsbFxuICAgICAgICAqIEluaXRpYWxpemluZyBhbiBlbXB0eSBhY2NvdW50IChhY2NvdW50IHdpdGggbm8gYXNzZXRzKVxuICAgICovXG4gICAgY29uc3QgaXNFbXB0eUFjY291bnRNb2RlID1cbiAgICAgIHRoaXMuY29udGV4dFNlcnZpY2UubW9kZSA9PT0gQ29uZmlndXJhdGlvbkNvbnRleHRNb2RlLkFDQ09VTlQgJiZcbiAgICAgICF0aGlzLnF1b3RlRHJhZnRTZXJ2aWNlLmhhc1Byb2R1Y3RzICYmXG4gICAgICAhdGhpcy5xdW90ZURyYWZ0U2VydmljZS5oYXNBc3NldHMgJiZcbiAgICAgICF0aGlzLnF1b3RlRHJhZnRTZXJ2aWNlLnF1b3RlRHJhZnQ/LmluaXRpYWxTdGF0ZS5sZW5ndGg7XG5cbiAgICBpZiAodGhpcy5xdW90ZURyYWZ0U2VydmljZS5pc1N0YW5kYWxvbmUgfHwgaXNFbXB0eUFjY291bnRNb2RlKSB7XG4gICAgICByZXR1cm4gb2YodW5kZWZpbmVkKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5mbG93Q29uZmlndXJhdGlvbi5jYWxjdWxhdGUkKGZsb3dTdGF0ZSk7XG4gIH1cblxuICBwcml2YXRlIGV4ZWN1dGVTdGF0ZWxlc3MkKHJlcXVlc3Q6IEZsb3dTdGF0ZUV4ZWN1dGlvblJlcXVlc3REVE8pOiBPYnNlcnZhYmxlPEZsb3dTdGF0ZUV4ZWN1dGlvblJlc3VsdD4ge1xuICAgIHJldHVybiBvZih1bmRlZmluZWQpLnBpcGUoXG4gICAgICB0YXAoKCkgPT4gdGhpcy5leGVjdXRlU3RhdGVsZXNzQWN0aW9ucyhyZXF1ZXN0KSksXG4gICAgICBzd2l0Y2hNYXAoKCkgPT4ge1xuICAgICAgICAvKlxuICAgICAgICAgIFNraXAgcHJpY2UgY2FsY3VsYXRpb24gaW4gY2FzZVxuICAgICAgICAgIDEuIE5vIGFjdGlvbnMgaW4gdGhlIHJlcXVlc3RcbiAgICAgICAgICAyLiBJbml0aWFsaXphdGlvbiBwcm9jZXNzIGV4ZWN1dGlvbiAoc3RhdGUgbm90IGluaXRpYWxpemVkIHlldClcbiAgICAgICAgKi9cbiAgICAgICAgaWYgKCFyZXF1ZXN0LmFjdGlvbnM/Lmxlbmd0aCB8fCAhdGhpcy5pc0luaXRpYWxpemVkKCkpIHtcbiAgICAgICAgICByZXR1cm4gb2YodW5kZWZpbmVkKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5jYWxjdWxhdGUkKCk7XG4gICAgICAgIH1cbiAgICAgIH0pLFxuICAgICAgbWFwKCgpID0+IHRoaXMuZXhlY3V0ZVN0YXRlbGVzc1NlbGVjdG9ycyhyZXF1ZXN0KSksXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgZXhlY3V0ZVN0YXRlbGVzc0FjdGlvbnMocmVxdWVzdDogRmxvd1N0YXRlRXhlY3V0aW9uUmVxdWVzdERUTyk6IHZvaWQge1xuICAgIGlmICghdGhpcy5xdW90ZURyYWZ0U2VydmljZS5xdW90ZURyYWZ0IHx8ICFyZXF1ZXN0LmFjdGlvbnM/Lmxlbmd0aCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGxldCBmbG93U3RhdGUgPSB0aGlzLnF1b3RlRHJhZnRTZXJ2aWNlLnF1b3RlRHJhZnQ7XG4gICAgcmVxdWVzdC5hY3Rpb25zLmZvckVhY2goYWN0aW9uID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGZsb3dTdGF0ZSA9IHRoaXMuZXhlY3V0ZUFjdGlvblNjcmlwdChmbG93U3RhdGUsIGFjdGlvbikgPz8gZmxvd1N0YXRlO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBjb25zb2xlLmVycm9yKGUpO1xuICAgICAgICB0aGlzLnRvYXN0U2VydmljZS5hZGQoeyBzZXZlcml0eTogVG9hc3RUeXBlLmVycm9yLCBzdW1tYXJ5OiBTdHJpbmcoZSkgfSk7XG4gICAgICAgIHRocm93IGU7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICB0aGlzLnF1b3RlRHJhZnRTZXJ2aWNlLnVwZGF0ZVF1b3RlRHJhZnQoZmxvd1N0YXRlKTtcbiAgfVxuXG4gIHByaXZhdGUgZXhlY3V0ZVN0YXRlbGVzc1NlbGVjdG9ycyhyZXF1ZXN0OiBGbG93U3RhdGVFeGVjdXRpb25SZXF1ZXN0RFRPKTogRmxvd1N0YXRlRXhlY3V0aW9uUmVzdWx0IHtcbiAgICBpZiAoIXRoaXMucXVvdGVEcmFmdFNlcnZpY2UucXVvdGVEcmFmdCkge1xuICAgICAgdGhyb3cgJ1F1b3RlRHJhZnQgaXMgbm90IGluaXRpYWxpemVkJztcbiAgICB9XG5cbiAgICBjb25zdCBmbG93U3RhdGUgPSB0aGlzLnF1b3RlRHJhZnRTZXJ2aWNlLnF1b3RlRHJhZnQ7XG4gICAgcmV0dXJuIEVudGl0eVV0aWwuZW50cmllcyhyZXF1ZXN0LnNlbGVjdG9ycyA/PyB7fSkucmVkdWNlKFxuICAgICAgKHJlc3VsdDogRmxvd1N0YXRlRXhlY3V0aW9uUmVzdWx0LCBba2V5LCBzZWxlY3Rvcl0pID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICByZXN1bHQuc2VsZWN0b3JzW2tleV0gPSB7XG4gICAgICAgICAgICBzdWNjZXNzOiB0cnVlLFxuICAgICAgICAgICAgcmVzdWx0OiB0aGlzLmV4ZWN1dGVTZWxlY3RvclNjcmlwdChmbG93U3RhdGUsIHNlbGVjdG9yKSxcbiAgICAgICAgICB9O1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihlKTtcbiAgICAgICAgICByZXN1bHQuc2VsZWN0b3JzW2tleV0gPSB7XG4gICAgICAgICAgICBzdWNjZXNzOiBmYWxzZSxcbiAgICAgICAgICAgIGVycm9yTWVzc2FnZTogU3RyaW5nKGUpLFxuICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfSxcbiAgICAgIHsgc3RhdGVJZDogJycsIHNlbGVjdG9yczoge30gfSxcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRGbG93U2FmZSgpOiBGbG93IHtcbiAgICBpZiAoIXRoaXMuZmxvd0luZm9TZXJ2aWNlLmZsb3cpIHtcbiAgICAgIHRocm93ICdGbG93IGlzIG5vdCBkZWZpbmVkJztcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5mbG93SW5mb1NlcnZpY2UuZmxvdztcbiAgfVxuXG4gIHByaXZhdGUgaW5pdFByb2Nlc3NvcnMkKCk6IE9ic2VydmFibGU8dm9pZD4ge1xuICAgIGNvbnN0IGhhc092ZXJyaWRlcyA9IEJvb2xlYW4odGhpcy5jdXN0b21pemF0aW9uU2VydmljZT8uZ2V0VGVtcGxhdGVDb25maWd1cmF0aW9uUHJvY2Vzc29ycyk7XG4gICAgY29uc3QgZmxvdyA9IHRoaXMuZ2V0Rmxvd1NhZmUoKTtcblxuICAgIGlmIChmbG93LnByb3BlcnRpZXMuc3RhdGVmdWwgJiYgIWhhc092ZXJyaWRlcykge1xuICAgICAgLy8gU2tpcCBpbml0aWFsaXphdGlvbiBhcyBiYWNrZW5kIHdpbGwgdGFrZSBwcm9jZXNzb3JzIGZyb20gU0ZcbiAgICAgIHJldHVybiBvZih1bmRlZmluZWQpO1xuICAgIH1cblxuICAgIGNvbnN0IG93bmVycyQgPSBPYmplY3QudmFsdWVzKHRoaXMuZmxvd0luZm9TZXJ2aWNlLnRlbXBsYXRlcylcbiAgICAgIC5tYXAodGVtcGxhdGUgPT4ge1xuICAgICAgICBpZiAoIXRlbXBsYXRlKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgbG9jYWxQcm9jZXNzb3JzJCA9XG4gICAgICAgICAgdGhpcy5jdXN0b21pemF0aW9uU2VydmljZT8uZ2V0VGVtcGxhdGVDb25maWd1cmF0aW9uUHJvY2Vzc29ycz8uKHRlbXBsYXRlLm5hbWUpID8/IG9mKG51bGwpO1xuXG4gICAgICAgIHJldHVybiBsb2NhbFByb2Nlc3NvcnMkLnBpcGUoXG4gICAgICAgICAgc3dpdGNoTWFwKHByb2Nlc3NvcnMgPT5cbiAgICAgICAgICAgIHByb2Nlc3NvcnMgPyBvZihwcm9jZXNzb3JzKSA6IHRoaXMucHJvY2Vzc29yc0FwaVNlcnZpY2UuZmV0Y2hDb25maWd1cmF0aW9uUHJvY2Vzc29ycyQodGVtcGxhdGUuaWQpLFxuICAgICAgICAgICksXG4gICAgICAgICAgdGFwKHByb2Nlc3NvcnMgPT4ge1xuICAgICAgICAgICAgY29uc3QgcHJvY2Vzc29yc01hcCA9IHByb2Nlc3NvcnMucmVkdWNlKChhY2M6IFJlY29yZDxzdHJpbmcsIENvbmZpZ3VyYXRpb25Qcm9jZXNzb3I+LCBwKSA9PiB7XG4gICAgICAgICAgICAgIGFjY1twLmFwaU5hbWVdID0gcDtcbiAgICAgICAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgICAgICAgIH0sIHt9KTtcblxuICAgICAgICAgICAgdGhpcy5wcm9jZXNzb3JzW3RlbXBsYXRlLmlkXSA9IHByb2Nlc3NvcnNNYXA7XG4gICAgICAgICAgfSksXG4gICAgICAgICk7XG4gICAgICB9KVxuICAgICAgLmZpbHRlcihpc0RlZmluZWQpO1xuXG4gICAgaWYgKCFvd25lcnMkLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIG9mKHVuZGVmaW5lZCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZvcmtKb2luKG93bmVycyQpLnBpcGUobWFwKG5vb3ApKTtcbiAgfVxuXG4gIHByaXZhdGUgZXhlY3V0ZUFjdGlvblNjcmlwdChyZXF1ZXN0OiBGbG93U3RhdGUsIGV4ZWN1dGFibGU6IEZsb3dTdGF0ZUV4ZWN1dGFibGVEVE8pOiBGbG93U3RhdGUgfCBudWxsIHtcbiAgICBjb25zdCBjb25maWd1cmF0aW9uUHJvY2Vzc29yID0gdGhpcy5wcm9jZXNzb3JzW2V4ZWN1dGFibGUub3duZXJJZF0/LltleGVjdXRhYmxlLmFwaU5hbWVdO1xuXG4gICAgaWYgKCFjb25maWd1cmF0aW9uUHJvY2Vzc29yPy5zY3JpcHQpIHtcbiAgICAgIGNvbnN0IHNjb3BlID0gdGhpcy5nZXRTY29wZUJ5T3duZXJJZChleGVjdXRhYmxlLm93bmVySWQpO1xuICAgICAgY29uc3Qgc2NvcGVUZXh0ID0gc2NvcGUgPyBgIGluICR7c2NvcGV9YCA6ICcnO1xuICAgICAgdGhyb3cgYENvbmZpZ3VyYXRpb25Qcm9jZXNzb3IgJHtleGVjdXRhYmxlLmFwaU5hbWV9JHtzY29wZVRleHR9IG5vdCBmb3VuZGA7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuZXhlY3V0ZVByb2Nlc3NvclNjcmlwdChyZXF1ZXN0LCBjb25maWd1cmF0aW9uUHJvY2Vzc29yLCBleGVjdXRhYmxlLmlucHV0RGF0YSkgYXMgRmxvd1N0YXRlO1xuICB9XG5cbiAgcHJpdmF0ZSBleGVjdXRlU2VsZWN0b3JTY3JpcHQocmVxdWVzdDogRmxvd1N0YXRlLCBleGVjdXRhYmxlOiBGbG93U3RhdGVFeGVjdXRhYmxlRFRPKTogdW5rbm93biB7XG4gICAgY29uc3QgY29uZmlndXJhdGlvblByb2Nlc3NvciA9IHRoaXMucHJvY2Vzc29yc1tleGVjdXRhYmxlLm93bmVySWRdPy5bZXhlY3V0YWJsZS5hcGlOYW1lXTtcblxuICAgIGlmICghY29uZmlndXJhdGlvblByb2Nlc3Nvcj8uc2NyaXB0KSB7XG4gICAgICBjb25zdCBzY29wZSA9IHRoaXMuZ2V0U2NvcGVCeU93bmVySWQoZXhlY3V0YWJsZS5vd25lcklkKTtcbiAgICAgIGNvbnN0IHNjb3BlVGV4dCA9IHNjb3BlID8gYCBpbiAke3Njb3BlfWAgOiAnJztcbiAgICAgIHRocm93IGBDb25maWd1cmF0aW9uUHJvY2Vzc29yICR7ZXhlY3V0YWJsZS5hcGlOYW1lfSR7c2NvcGVUZXh0fSBub3QgZm91bmRgO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmV4ZWN1dGVQcm9jZXNzb3JTY3JpcHQocmVxdWVzdCwgY29uZmlndXJhdGlvblByb2Nlc3NvciwgZXhlY3V0YWJsZS5pbnB1dERhdGEpO1xuICB9XG5cbiAgcHJpdmF0ZSBleGVjdXRlUHJvY2Vzc29yU2NyaXB0KFxuICAgIHJlcXVlc3Q6IEZsb3dTdGF0ZSxcbiAgICBjb25maWd1cmF0aW9uUHJvY2Vzc29yOiBDb25maWd1cmF0aW9uUHJvY2Vzc29yLFxuICAgIGlucHV0RGF0YTogdW5rbm93bixcbiAgKTogdW5rbm93biB7XG4gICAgbGV0IGZ1bmN0aW9uVG9FeGVjdXRlID0gdGhpcy5leGVjdXRlZEZ1bmN0aW9uc1tjb25maWd1cmF0aW9uUHJvY2Vzc29yLmFwaU5hbWVdO1xuICAgIGlmICghZnVuY3Rpb25Ub0V4ZWN1dGUpIHtcbiAgICAgIGZ1bmN0aW9uVG9FeGVjdXRlID0gbmV3IEZ1bmN0aW9uKGAke2NvbmZpZ3VyYXRpb25Qcm9jZXNzb3Iuc2NyaXB0fVxcbnJldHVybiB0cmFuc2Zvcm07YCkoKTtcbiAgICAgIHRoaXMuZXhlY3V0ZWRGdW5jdGlvbnNbY29uZmlndXJhdGlvblByb2Nlc3Nvci5hcGlOYW1lXSA9IGZ1bmN0aW9uVG9FeGVjdXRlO1xuICAgIH1cblxuICAgIHJldHVybiBmdW5jdGlvblRvRXhlY3V0ZSh7XG4gICAgICByZXF1ZXN0LFxuICAgICAgaW5wdXREYXRhLFxuICAgICAgZmxvd1N0b3JlOiB0aGlzLmZsb3dTdG9yZSxcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZ2VuZXJhdGVSZXF1ZXN0SWQoc2NvcGU6IFVJVGVtcGxhdGVUeXBlLCBzZWxlY3Rvck5hbWU6IHN0cmluZywgaW5wdXREYXRhPzogdW5rbm93bik6IHN0cmluZyB7XG4gICAgY29uc3QgaW5wdXREYXRhSGFzaCA9IFVVSUQuaGV4KEpTT04uc3RyaW5naWZ5KGlucHV0RGF0YSkgfHwgJycpLnNsaWNlKDAsIDgpO1xuICAgIHJldHVybiBgJHtzY29wZX0vJHtzZWxlY3Rvck5hbWV9LyR7aW5wdXREYXRhSGFzaH1gO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXREZWZhdWx0RXhlY3V0aW9uUmVxdWVzdERUTygpOiBGbG93U3RhdGVFeGVjdXRpb25SZXF1ZXN0RFRPIHtcbiAgICBjb25zdCByZXF1ZXN0OiBGbG93U3RhdGVFeGVjdXRpb25SZXF1ZXN0RFRPID0ge1xuICAgICAgYWN0aW9uczogW10sXG4gICAgICBzZWxlY3RvcnM6IHt9LFxuICAgIH07XG5cbiAgICBpZiAodGhpcy5nZXRGbG93U2FmZSgpLnByb3BlcnRpZXMuc3RhbmRhbG9uZSkge1xuICAgICAgcmV0dXJuIHJlcXVlc3Q7XG4gICAgfVxuXG4gICAgY29uc3Qgb3duZXJJZCA9IHRoaXMuZ2V0T3duZXJJZEJ5U2NvcGUoVUlUZW1wbGF0ZVR5cGUuRkxPV19FTkdJTkUpO1xuXG4gICAgcmVxdWVzdC5hY3Rpb25zPy5wdXNoKHtcbiAgICAgIGFwaU5hbWU6ICdVUERBVEVfUFJJQ0VfTElTVCcsXG4gICAgICBvd25lcklkLFxuICAgICAgaW5wdXREYXRhOiB7fSxcbiAgICB9KTtcbiAgICByZXF1ZXN0LmFjdGlvbnM/LnB1c2goe1xuICAgICAgYXBpTmFtZTogJ1VQREFURV9BU1NFVF9JRFMnLFxuICAgICAgb3duZXJJZCxcbiAgICAgIGlucHV0RGF0YToge30sXG4gICAgfSk7XG5cbiAgICByZXF1ZXN0LmFjdGlvbnM/LnB1c2goe1xuICAgICAgYXBpTmFtZTogJ1VQREFURV9DT05URVhUX1BST1BFUlRJRVMnLFxuICAgICAgb3duZXJJZCxcbiAgICAgIGlucHV0RGF0YTogdGhpcy5jb250ZXh0U2VydmljZS5yZXNvbHZlKCkucHJvcGVydGllcyxcbiAgICB9KTtcblxuICAgIHJldHVybiByZXF1ZXN0O1xuICB9XG59XG4iXX0=
@@ -764,10 +764,11 @@ class FlowStateService {
764
764
  this.customizationService = customizationService;
765
765
  this.NOT_INITIALIZED = Symbol();
766
766
  this.executedFunctions = {};
767
- this._hasStatefulUnsavedChanges = false;
768
767
  this.stateId$ = new BehaviorSubject(null);
768
+ this._hasStatefulUnsavedChanges = false;
769
769
  this.processors = {};
770
770
  this.subscriptions = {};
771
+ this.flowStore = {};
771
772
  this.cleanup$ = new Subject();
772
773
  /*
773
774
  In stateless mode watch QuoteDraft changes and call executeRequest so that
@@ -828,6 +829,7 @@ class FlowStateService {
828
829
  this.stateId$.next(null);
829
830
  }
830
831
  this.processors = {};
832
+ this.flowStore = {};
831
833
  this.cleanup$.next();
832
834
  }
833
835
  get hasUnsavedChanges() {
@@ -930,6 +932,9 @@ class FlowStateService {
930
932
  }
931
933
  return of({ quoteId: '' });
932
934
  }
935
+ getFlowStore() {
936
+ return this.flowStore;
937
+ }
933
938
  getOwnerIdByScope(scope) {
934
939
  var _a;
935
940
  const ownerId = (_a = this.flowInfoService.templates[scope]) === null || _a === void 0 ? void 0 : _a.id;
@@ -1172,6 +1177,7 @@ class FlowStateService {
1172
1177
  return functionToExecute({
1173
1178
  request,
1174
1179
  inputData,
1180
+ flowStore: this.flowStore,
1175
1181
  });
1176
1182
  }
1177
1183
  generateRequestId(scope, selectorName, inputData) {
@@ -2155,13 +2161,14 @@ class ConfigurationStateService {
2155
2161
  this.flowConfigurationService = flowConfigurationService;
2156
2162
  this.flowStateApiService = flowStateApiService;
2157
2163
  this.quoteApiService = quoteApiService;
2164
+ this.isInitialized$ = new BehaviorSubject(false);
2165
+ this.canceledConfiguration$ = new Subject();
2158
2166
  this.NOT_INITIALIZED = Symbol();
2159
2167
  this.executedFunctions = {};
2160
2168
  this.stateId = null;
2161
2169
  this.ownerId = '';
2162
2170
  this.subscriptions = {};
2163
- this.isInitialized$ = new BehaviorSubject(false);
2164
- this.canceledConfiguration$ = new Subject();
2171
+ this.configurationStore = {};
2165
2172
  }
2166
2173
  init$() {
2167
2174
  let request$;
@@ -2178,6 +2185,7 @@ class ConfigurationStateService {
2178
2185
  }
2179
2186
  cleanup() {
2180
2187
  this.stateId = null;
2188
+ this.configurationStore = {};
2181
2189
  this.configurationService.reset();
2182
2190
  }
2183
2191
  execute$(req, forceSubscriptions) {
@@ -2420,6 +2428,8 @@ class ConfigurationStateService {
2420
2428
  return functionToExecute({
2421
2429
  request,
2422
2430
  inputData,
2431
+ flowStore: this.flowStateService.getFlowStore(),
2432
+ configurationStore: this.configurationStore,
2423
2433
  });
2424
2434
  }
2425
2435
  }