@quadrel-enterprise-ui/framework 18.32.0 → 18.32.1-beta.102.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -51,6 +51,7 @@ export class QdPageObjectHeaderComponent {
51
51
  _pageObjectDataSubject = new BehaviorSubject({});
52
52
  _isLoadingSubject = new BehaviorSubject(false);
53
53
  _customActionsSubject = new BehaviorSubject({ actions: [] });
54
+ _customActionsSub;
54
55
  _destroyed$ = new Subject();
55
56
  pageObjectData$ = this._pageObjectDataSubject.asObservable();
56
57
  isLoading$ = this._isLoadingSubject.asObservable().pipe(debounceTime(400));
@@ -242,17 +243,32 @@ export class QdPageObjectHeaderComponent {
242
243
  }))));
243
244
  }
244
245
  updateCustomActions() {
245
- if (this.config.pageType === 'inspect') {
246
- const operationMode = this.config.pageTypeConfig?.operationMode;
247
- if (operationMode)
248
- this.pageStoreService.toggleViewonly(operationMode === 'view');
249
- this.pageStoreService.isViewonly$.pipe(takeUntil(this._destroyed$)).subscribe(isViewonly => {
250
- const customActions = this.config.pageTypeConfig?.customActions ?? [];
251
- this._customActionsSubject.next(this.getCustomActionsByMode(customActions, isViewonly ? 'view' : 'edit'));
252
- });
246
+ // 1. Handle non-inspect pages early
247
+ if (this.config.pageType !== 'inspect') {
248
+ const actions = this.config.pageTypeConfig?.customActions ?? [];
249
+ this._customActionsSubject.next({ actions });
250
+ return;
251
+ }
252
+ // 2. Setup Inspect-specific logic
253
+ const config = this.config.pageTypeConfig;
254
+ if (config?.operationMode) {
255
+ this.pageStoreService.toggleViewonly(config.operationMode === 'view');
253
256
  }
254
- if (this.config.pageType !== 'inspect')
255
- this._customActionsSubject.next({ actions: this.config.pageTypeConfig?.customActions ?? [] });
257
+ this.subscribeToViewOnlyMode();
258
+ }
259
+ subscribeToViewOnlyMode() {
260
+ this._customActionsSub?.unsubscribe();
261
+ this._customActionsSub = this.pageStoreService.isViewonly$
262
+ .pipe(takeUntil(this._destroyed$))
263
+ .subscribe(isViewonly => {
264
+ const mode = isViewonly ? 'view' : 'edit';
265
+ const config = this.config.pageTypeConfig;
266
+ if (config) {
267
+ config.operationMode = mode;
268
+ }
269
+ const actions = config?.customActions ?? [];
270
+ this._customActionsSubject.next(this.getCustomActionsByMode(actions, mode));
271
+ });
256
272
  }
257
273
  getCustomActionsByMode(customActions, mode) {
258
274
  const actions = customActions
@@ -310,4 +326,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImpor
310
326
  type: HostListener,
311
327
  args: ['click']
312
328
  }] } });
313
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFnZS1vYmplY3QtaGVhZGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvcWQtdWkvc3JjL2xpYi9wYWdlL29iamVjdC1oZWFkZXIvcGFnZS1vYmplY3QtaGVhZGVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvcWQtdWkvc3JjL2xpYi9wYWdlL29iamVjdC1oZWFkZXIvcGFnZS1vYmplY3QtaGVhZGVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFdBQVcsRUFDWCxZQUFZLEVBQ1osTUFBTSxFQUNOLEtBQUssRUFJTCxRQUFRLEVBRVQsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGVBQWUsRUFBRSxhQUFhLEVBQUUsWUFBWSxFQUFjLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDcEcsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFakYsT0FBTyxFQUFFLGlCQUFpQixFQUFFLGVBQWUsRUFBRSxZQUFZLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUM5RixPQUFPLEVBQUUsdUNBQXVDLEVBQUUsTUFBTSx5RUFBeUUsQ0FBQztBQWdCbEksT0FBTyxFQUFFLDZCQUE2QixFQUF3QixNQUFNLCtCQUErQixDQUFDO0FBQ3BHLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ3RFLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLCtDQUErQyxDQUFDO0FBQzFGLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBQzNFLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLDZDQUE2QyxDQUFD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USxFQUFFLElBQUksRUFBRTtnQkFJekIsYUFBYTtzQkFEWixLQUFLO3VCQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRTtnQkFHRixNQUFNO3NCQUE1QixLQUFLO3VCQUFDLGNBQWM7Z0JBR2pCLFVBQVU7c0JBRGIsV0FBVzt1QkFBQyxpQkFBaUI7Z0JBTTlCLFlBQVk7c0JBRFgsWUFBWTt1QkFBQyxPQUFPIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgSG9zdEJpbmRpbmcsXG4gIEhvc3RMaXN0ZW5lcixcbiAgSW5qZWN0LFxuICBJbnB1dCxcbiAgT25DaGFuZ2VzLFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgT3B0aW9uYWwsXG4gIFNpbXBsZUNoYW5nZXNcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIGNvbWJpbmVMYXRlc3QsIGlzT2JzZXJ2YWJsZSwgT2JzZXJ2YWJsZSwgU3ViamVjdCwgc3dpdGNoTWFwIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUsIGZpbHRlciwgbWFwLCB0YWtlLCB0YWtlVW50aWwsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IFFkTWVudUJ1dHRvbkFjdGlvbkNvbmZpZywgUWRNZW51QnV0dG9uQ29uZmlnIH0gZnJvbSAnLi4vLi4vYnV0dG9uL21vZGVsL2J1dHRvbi1jb25maWcnO1xuaW1wb3J0IHsgUWREaWFsb2dDb21wb25lbnQsIFFkRGlhbG9nU2VydmljZSwgUWREaWFsb2dTaXplIH0gZnJvbSAnLi4vLi4vZGlhbG9nL2RpYWxvZy5tb2R1bGUnO1xuaW1wb3J0IHsgUWRQYWdlQ2FuY2VsQ29uZmlybWF0aW9uRGlhbG9nQ29tcG9uZW50IH0gZnJvbSAnLi4vY2FuY2VsLWNvbmZpcm1hdGlvbi1kaWFsb2cvcGFnZS1jYW5jZWwtY29uZmlybWF0aW9uLWRpYWxvZy5jb21wb25lbnQnO1xuaW1wb3J0IHtcbiAgUWRJbnNwZWN0T3BlcmF0aW9uTW9kZSxcbiAgUWRQYWdlQ29uZmlnLFxuICBRZFBhZ2VDb25maWdDcmVhdGUsXG4gIFFkUGFnZUNvbmZpZ0N1c3RvbSxcbiAgUWRQYWdlQ29uZmlnSW5zcGVjdCxcbiAgUWRQYWdlQ29udGV4dENvbmZpZyxcbiAgUWRQYWdlU2VsZWN0ZWRDb250ZXh0LFxuICBRZFBhZ2VUeXBlSW5zcGVjdENvbmZpZ1xufSBmcm9tICcuLi9tb2RlbC9wYWdlLWNvbmZpZy5pbnRlcmZhY2UnO1xuaW1wb3J0IHtcbiAgUWRGYWNldE9wdGlvbk11bHRpU2VsZWN0LFxuICBRZEZhY2V0T3B0aW9uU2luZ2xlU2VsZWN0LFxuICBRZFBhZ2VIZWFkZXJGYWNldENvbmZpZ1xufSBmcm9tICcuLi9tb2RlbC9wYWdlLWhlYWRlci1mYWNldC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgUURfUEFHRV9PQkpFQ1RfUkVTT0xWRVJfVE9LRU4sIFFkUGFnZU9iamVjdFJlc29sdmVyIH0gZnJvbSAnLi4vbW9kZWwvcGFnZS1vYmplY3QtcmVzb2x2ZXInO1xuaW1wb3J0IHsgUWRDb250ZXh0U2VydmljZSB9IGZyb20gJy4uL3NoYXJlZC9zZXJ2aWNlcy9jb250ZXh0LnNlcnZpY2UnO1xuaW1wb3J0IHsgUWRGb3JtR3JvdXBNYW5hZ2VyU2VydmljZSB9IGZyb20gJy4uL3NoYXJlZC9zZXJ2aWNlcy9mb3JtLWdyb3VwLW1hbmFnZXIuc2VydmljZSc7XG5pbXBvcnQgeyBRZFBhZ2VTdG9yZVNlcnZpY2UgfSBmcm9tICcuLi9zaGFyZWQvc2VydmljZXMvcGFnZS1zdG9yZS5zZXJ2aWNlJztcbmltcG9ydCB7IFFkUmVzb2x2ZXJUcmlnZ2VyU2VydmljZSB9IGZyb20gJy4uL3NoYXJlZC9zZXJ2aWNlcy9yZXNvbHZlci10cmlnZ2VyLnNlcnZpY2UnO1xuaW1wb3J0IHsgUWRDb250ZXh0U2VsZWN0RGlhbG9nQ29tcG9uZW50IH0gZnJvbSAnLi9jb250ZXh0LXNlbGVjdC1kaWFsb2cvY29udGV4dC1zZWxlY3QtZGlhbG9nLmNvbXBvbmVudCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3FkLXBhZ2Utb2JqZWN0LWhlYWRlcicsXG4gIHRlbXBsYXRlVXJsOiAnLi9wYWdlLW9iamVjdC1oZWFkZXIuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9wYWdlLW9iamVjdC1oZWFkZXIuY29tcG9uZW50LnNjc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGhvc3Q6IHsgJ1tzdHlsZS5ib3JkZXJCb3R0b21dJzogJ2JvcmRlckJvdHRvbVN0eWxlJyB9XG59KVxuZXhwb3J0IGNsYXNzIFFkUGFnZU9iamVjdEhlYWRlckNvbXBvbmVudDxUIGV4dGVuZHMgb2JqZWN0PiBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3kge1xuICBASW5wdXQoeyByZXF1aXJlZDogdHJ1ZSB9KVxuICBjb25maWchOiBRZFBhZ2VDb25maWc8VD47XG5cbiAgQElucHV0KHsgcmVxdWlyZWQ6IHRydWUgfSlcbiAgaGFzTmF2aWdhdGlvbiA9IGZhbHNlO1xuXG4gIEBJbnB1dCgnZGF0YS10ZXN0LWlkJykgdGVzdElkID0gJ3BhZ2Utb2JqZWN0LWhlYWRlcic7XG5cbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5pbi1kaWFsb2cnKVxuICBnZXQgaXNJbkRpYWxvZygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISF0aGlzLmRpYWxvZ0NvbXBvbmVudDtcbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ2NsaWNrJylcbiAgdG9nZ2xlRmFjZXRzKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5hZGFwdGl2ZU1vZGUgfHwgKHRoaXMuaGVhZGVyRmFjZXRzPy5sZW5ndGggPz8gMCkgPj0gMikgcmV0dXJuO1xuXG4gICAgdGhpcy5mYWNldHNDb2xsYXBzZWQgPSAhdGhpcy5mYWNldHNDb2xsYXBzZWQ7XG4gIH1cblxuICBnZXQgYWRhcHRpdmVNb2RlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAodGhpcy5jb25maWcgYXMgUWRQYWdlQ29uZmlnSW5zcGVjdCB8IFFkUGFnZUNvbmZpZ0N1c3RvbSkuYWRhcHRpdmVNb2RlO1xuICB9XG5cbiAgcHJpdmF0ZSBfcGFnZU9iamVjdERhdGFTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxUPih7fSBhcyBUKTtcbiAgcHJpdmF0ZSBfaXNMb2FkaW5nU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICBwcml2YXRlIF9jdXN0b21BY3Rpb25zU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8UWRNZW51QnV0dG9uQ29uZmlnPih7IGFjdGlvbnM6IFtdIH0pO1xuICBwcml2YXRlIF9kZXN0cm95ZWQkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICBwYWdlT2JqZWN0RGF0YSQ6IE9ic2VydmFibGU8VD4gPSB0aGlzLl9wYWdlT2JqZWN0RGF0YVN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG4gIGlzTG9hZGluZyQ6IE9ic2VydmFibGU8Ym9vbGVhbj4gPSB0aGlzLl9pc0xvYWRpbmdTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpLnBpcGUoZGVib3VuY2VUaW1lKDQwMCkpO1xuICBjdXN0b21BY3Rpb25zJDogT2JzZXJ2YWJsZTxRZE1lbnVCdXR0b25Db25maWc+ID0gdGhpcy5fY3VzdG9tQWN0aW9uc1N1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG5cbiAgZmFjZXRzQ29sbGFwc2VkID0gdHJ1ZTtcblxuICBjb250ZXh0cyQhOiBPYnNlcnZhYmxlPFxuICAgIHtcbiAgICAgIGxhYmVsOiBzdHJpbmc7XG4gICAgICB2YWx1ZTogUWRQYWdlU2VsZWN0ZWRDb250ZXh0W107XG4gICAgICBjb250ZXh0OiBRZFBhZ2VDb250ZXh0Q29uZmlnO1xuICAgICAgc2VsZWN0aW9uOiBRZFBhZ2VTZWxlY3RlZENvbnRleHQgfCBRZFBhZ2VTZWxlY3RlZENvbnRleHRbXTtcbiAgICB9W11cbiAgPjtcblxuICBnZXQgYm9yZGVyQm90dG9tU3R5bGUoKTogc3RyaW5nIHtcbiAgICBjb25zdCBwYWdlVHlwZSA9IHRoaXMuY29uZmlnLnBhZ2VUeXBlO1xuXG4gICAgcmV0dXJuIHBhZ2VUeXBlID09PSAnY3JlYXRlJyB8fFxuICAgICAgKHBhZ2VUeXBlID09PSAnaW5zcGVjdCcgJiYgdGhpcy5oYXNOYXZpZ2F0aW9uKSB8fFxuICAgICAgKHBhZ2VUeXBlID09PSAnY3VzdG9tJyAmJiB0aGlzLmhhc05hdmlnYXRpb24pIHx8XG4gICAgICAocGFnZVR5cGUgPT09ICdvdmVydmlldycgJiYgdGhpcy5oYXNOYXZpZ2F0aW9uKVxuICAgICAgPyAnbm9uZSAhaW1wb3J0YW50J1xuICAgICAgOiAnJztcbiAgfVxuXG4gIGdldCBzaG93RWRpdCQoKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuaXNJbnNwZWN0QW5kVmlld01vZGUkLnBpcGUobWFwKHYgPT4gdiAmJiAhdGhpcy5oaWRlRWRpdCkpO1xuICB9XG5cbiAgZ2V0IHNob3dEZWxldGUkKCk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLmlzSW5zcGVjdEFuZFZpZXdNb2RlJC5waXBlKG1hcCh2ID0+IHYgJiYgISF0aGlzLmRlbGV0ZUJ1dHRvbikpO1xuICB9XG5cbiAgZ2V0IHNob3dBcmNoaXZlJCgpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5pc0luc3BlY3RBbmRWaWV3TW9kZSQucGlwZShtYXAodiA9PiB2ICYmICEhdGhpcy5hcmNoaXZlQnV0dG9uKSk7XG4gIH1cblxuICBnZXQgc2hvd0NhbmNlbCQoKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuaXNJbnNwZWN0QW5kVmlld01vZGUkLnBpcGUobWFwKHYgPT4gIXYgJiYgISF0aGlzLmNhbmNlbEJ1dHRvbiAmJiAhdGhpcy5pc0NyZWF0ZSkpO1xuICB9XG5cbiAgZ2V0IHNob3dTYXZlJCgpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5pc0luc3BlY3RBbmRWaWV3TW9kZSQucGlwZShtYXAodiA9PiAhdiAmJiAhIXRoaXMuc2F2ZUJ1dHRvbikpO1xuICB9XG5cbiAgZ2V0IGhlYWRlckZhY2V0cygpOiBRZFBhZ2VIZWFkZXJGYWNldENvbmZpZzxUPltdIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAodGhpcy5oYXNIZWFkZXJGYWNldHModGhpcy5jb25maWcpKSByZXR1cm4gdGhpcy5jb25maWcuaGVhZGVyRmFjZXRzO1xuICB9XG5cbiAgZ2V0IGlzSW5zcGVjdEFuZFZpZXdNb2RlJCgpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5wYWdlU3RvcmVTZXJ2aWNlLmlzVmlld29ubHkkLnBpcGUoXG4gICAgICB0YWtlVW50aWwodGhpcy5fZGVzdHJveWVkJCksXG4gICAgICBtYXAoaXNWaWV3ID0+IHRoaXMuY29uZmlnLnBhZ2VUeXBlID09PSAnaW5zcGVjdCcgJiYgaXNWaWV3KVxuICAgICk7XG4gIH1cblxuICBnZXQgaXNDcmVhdGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuY29uZmlnLnBhZ2VUeXBlID09PSAnY3JlYXRlJztcbiAgfVxuXG4gIGdldCBpc092ZXJ2aWV3KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZy5wYWdlVHlwZSA9PT0gJ292ZXJ2aWV3JztcbiAgfVxuXG4gIGdldCBpc0NvbnRleHRTZWxlY3RhYmxlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZy5wYWdlVHlwZSA9PT0gJ292ZXJ2aWV3JyB8fCB0aGlzLmNvbmZpZy5wYWdlVHlwZSA9PT0gJ2N1c3RvbSc7XG4gIH1cblxuICBnZXQgZWRpdEJ1dHRvbigpOiBRZFBhZ2VUeXBlSW5zcGVjdENvbmZpZ1snZWRpdCddIHtcbiAgICByZXR1cm4gKHRoaXMuY29uZmlnLnBhZ2VUeXBlQ29uZmlnIGFzIFFkUGFnZVR5cGVJbnNwZWN0Q29uZmlnKT8uZWRpdDtcbiAgfVxuXG4gIGdldCBkZWxldGVCdXR0b24oKTogUWRQYWdlVHlwZUluc3BlY3RDb25maWdbJ2RlbGV0ZSddIHtcbiAgICByZXR1cm4gKHRoaXMuY29uZmlnLnBhZ2VUeXBlQ29uZmlnIGFzIFFkUGFnZVR5cGVJbnNwZWN0Q29uZmlnKT8uZGVsZXRlO1xuICB9XG5cbiAgZ2V0IGFyY2hpdmVCdXR0b24oKTogUWRQYWdlVHlwZUluc3BlY3RDb25maWdbJ2FyY2hpdmUnXSB7XG4gICAgcmV0dXJuICh0aGlzLmNvbmZpZy5wYWdlVHlwZUNvbmZpZyBhcyBRZFBhZ2VUeXBlSW5zcGVjdENvbmZpZyk/LmFyY2hpdmU7XG4gIH1cblxuICBnZXQgY2FuY2VsQnV0dG9uKCk6IFFkUGFnZVR5cGVJbnNwZWN0Q29uZmlnWydjYW5jZWwnXSB7XG4gICAgcmV0dXJuICh0aGlzLmNvbmZpZy5wYWdlVHlwZUNvbmZpZyBhcyBRZFBhZ2VUeXBlSW5zcGVjdENvbmZpZyk/LmNhbmNlbDtcbiAgfVxuXG4gIGdldCBzYXZlQnV0dG9uKCk6IFFkUGFnZVR5cGVJbnNwZWN0Q29uZmlnWydzYXZlJ10ge1xuICAgIHJldHVybiAodGhpcy5jb25maWcucGFnZVR5cGVDb25maWcgYXMgUWRQYWdlVHlwZUluc3BlY3RDb25maWcpPy5zYXZlO1xuICB9XG5cbiAgZ2V0IGhpZGVFZGl0KCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGNvbmZpZyA9IHRoaXMuY29uZmlnLnBhZ2VUeXBlQ29uZmlnIGFzIFFkUGFnZVR5cGVJbnNwZWN0Q29uZmlnIHwgdW5kZWZpbmVkO1xuXG4gICAgaWYgKCFjb25maWcpIHJldHVybiBmYWxzZTtcbiAgICBpZiAoY29uZmlnLm9wZXJhdGlvbk1vZGUgIT09ICdlZGl0JykgcmV0dXJuIGNvbmZpZy5oaWRlRWRpdCA9PT0gdHJ1ZTtcblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGdldCBoYXNWYWx1ZXNDaGFuZ2VkJCgpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5mb3JtR3JvdXBNYW5hZ2VyU2VydmljZS4kaGFzVmFsdWVzQ2hhbmdlZCgpO1xuICB9XG5cbiAgZ2V0ICRjYW5TYXZlKCk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgIGlmICgodGhpcy5jb25maWcucGFnZVR5cGVDb25maWcgYXMgUWRQYWdlVHlwZUluc3BlY3RDb25maWcpPy5zYXZlPy5oYXNWYWxpZGF0aW9uID09PSBmYWxzZSlcbiAgICAgIHJldHVybiB0aGlzLmZvcm1Hcm91cE1hbmFnZXJTZXJ2aWNlLiRoYXNWYWx1ZXNDaGFuZ2VkKCk7XG5cbiAgICByZXR1cm4gY29tYmluZUxhdGVzdChbXG4gICAgICB0aGlzLmZvcm1Hcm91cE1hbmFnZXJTZXJ2aWNlLiRhcmVGb3JtR3JvdXBzVmFsaWQoKSxcbiAgICAgIHRoaXMuZm9ybUdyb3VwTWFuYWdlclNlcnZpY2UuJGhhc1ZhbHVlc0NoYW5nZWQoKVxuICAgIF0pLnBpcGUobWFwKChbaXNWYWxpZCwgaGFzQ2hhbmdlc10pID0+IGlzVmFsaWQgJiYgaGFzQ2hhbmdlcykpO1xuICB9XG5cbiAgY29uc3RydWN0b3IoXG4gICAgQE9wdGlvbmFsKCkgQEluamVjdChRRF9QQUdFX09CSkVDVF9SRVNPTFZFUl9UT0tFTikgcHJpdmF0ZSBwYWdlT2JqZWN0UmVzb2x2ZXI6IFFkUGFnZU9iamVjdFJlc29sdmVyPFQ+LFxuICAgIEBPcHRpb25hbCgpIHByaXZhdGUgZm9ybUdyb3VwTWFuYWdlclNlcnZpY2U6IFFkRm9ybUdyb3VwTWFuYWdlclNlcnZpY2UsXG4gICAgQE9wdGlvbmFsKCkgcHJpdmF0ZSBkaWFsb2dDb21wb25lbnQ6IFFkRGlhbG9nQ29tcG9uZW50LFxuICAgIHByaXZhdGUgZGlhbG9nOiBRZERpYWxvZ1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBjb250ZXh0U2VydmljZTogUWRDb250ZXh0U2VydmljZSxcbiAgICBwcml2YXRlIHJlc29sdmVyVHJpZ2dlclNlcnZpY2U6IFFkUmVzb2x2ZXJUcmlnZ2VyU2VydmljZSxcbiAgICBwcml2YXRlIHBhZ2VTdG9yZVNlcnZpY2U6IFFkUGFnZVN0b3JlU2VydmljZTxUPlxuICApIHtcbiAgICBpZiAocGFnZU9iamVjdFJlc29sdmVyKSB7XG4gICAgICBjb25zdCBvcmlnaW5hbFVwZGF0ZU1ldGFkYXRhID0gdGhpcy5wYWdlT2JqZWN0UmVzb2x2ZXIudXBkYXRlTWV0YWRhdGE/LmJpbmQodGhpcy5wYWdlT2JqZWN0UmVzb2x2ZXIpO1xuICAgICAgdGhpcy5wYWdlT2JqZWN0UmVzb2x2ZXIudXBkYXRlTWV0YWRhdGEgPSAocHJvcHM6IFBhcnRpYWw8VD4pOiB2b2lkID0+IHtcbiAgICAgICAgdGhpcy51cGRhdGVNZXRhZGF0YShwcm9wcyk7XG4gICAgICAgIGlmIChvcmlnaW5hbFVwZGF0ZU1ldGFkYXRhKSBvcmlnaW5hbFVwZGF0ZU1ldGFkYXRhKHByb3BzKTtcbiAgICAgIH07XG5cbiAgICAgIHRoaXMuc2V0dXBSZXNvbHZlclRyaWdnZXIoKTtcbiAgICB9XG5cbiAgICB0aGlzLmluaXRDb250ZXh0cygpO1xuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMucGFnZU9iamVjdFJlc29sdmVyKSB0aGlzLnNldHVwUmVzb2x2ZXJUcmlnZ2VyKCk7XG5cbiAgICB0aGlzLnVwZGF0ZUN1c3RvbUFjdGlvbnMoKTtcbiAgICB0aGlzLmZvcm1Hcm91cE1hbmFnZXJTZXJ2aWNlLnRha2VGb3JtR3JvdXBzU25hcHNob3QoKTtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBpZiAoY2hhbmdlc1snY29uZmlnJ10gJiYgIWNoYW5nZXNbJ2NvbmZpZyddLmZpcnN0Q2hhbmdlKSB0aGlzLnVwZGF0ZUN1c3RvbUFjdGlvbnMoKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMucGFnZVN0b3JlU2VydmljZS50b2dnbGVWaWV3b25seShmYWxzZSk7XG5cbiAgICB0aGlzLl9kZXN0cm95ZWQkLm5leHQoKTtcbiAgICB0aGlzLl9kZXN0cm95ZWQkLmNvbXBsZXRlKCk7XG4gIH1cblxuICB1cGRhdGVNZXRhZGF0YShtZXRhZGF0YTogUGFydGlhbDxUPik6IHZvaWQge1xuICAgIGNvbnN0IHVwZGF0ZWRNZXRhZGF0YSA9IHsgLi4udGhpcy5fcGFnZU9iamVjdERhdGFTdWJqZWN0LnZhbHVlLCAuLi5tZXRhZGF0YSB9O1xuICAgIHRoaXMuX3BhZ2VPYmplY3REYXRhU3ViamVjdC5uZXh0KHVwZGF0ZWRNZXRhZGF0YSk7XG4gIH1cblxuICBoYW5kbGVBY3Rpb24oZmFjZXQ6IFFkRmFjZXRPcHRpb25TaW5nbGVTZWxlY3QgfCBRZEZhY2V0T3B0aW9uTXVsdGlTZWxlY3QpOiB2b2lkIHtcbiAgICBmYWNldD8uYWN0aW9uPy5oYW5kbGVyKCk7XG4gIH1cblxuICBoYXNIZWFkZXJGYWNldHMoXG4gICAgY29uZmlnOiBRZFBhZ2VDb25maWc8VD5cbiAgKTogY29uZmlnIGlzIFFkUGFnZUNvbmZpZ0NyZWF0ZTxUPiB8IFFkUGFnZUNvbmZpZ0luc3BlY3Q8VD4gfCBRZFBhZ2VDb25maWdDdXN0b208VD4ge1xuICAgIHJldHVybiAodGhpcy5jb25maWcgYXMgeyBoZWFkZXJGYWNldHM6IFFkUGFnZUhlYWRlckZhY2V0Q29uZmlnPFQ+W10gfSkuaGVhZGVyRmFjZXRzICE9IG51bGw7XG4gIH1cblxuICBlZGl0KCk6IHZvaWQge1xuICAgIHRoaXMuZm9ybUdyb3VwTWFuYWdlclNlcnZpY2UudGFrZUZvcm1Hcm91cHNTbmFwc2hvdCgpO1xuICAgIHRoaXMucGFnZVN0b3JlU2VydmljZS50b2dnbGVWaWV3b25seShmYWxzZSk7XG4gICAgaWYgKHRoaXMuZWRpdEJ1dHRvbj8uaGFuZGxlcikgdGhpcy5lZGl0QnV0dG9uLmhhbmRsZXIoKTtcbiAgfVxuXG4gIGNhbmNlbCgpOiB2b2lkIHtcbiAgICB0aGlzLmZvcm1Hcm91cE1hbmFnZXJTZXJ2aWNlXG4gICAgICAuJGhhc1ZhbHVlc0NoYW5nZWQoKVxuICAgICAgLnBpcGUodGFrZSgxKSlcbiAgICAgIC5zdWJzY3JpYmUoaGFzQ2hhbmdlZCA9PiB7XG4gICAgICAgIGlmIChoYXNDaGFuZ2VkKSB7XG4gICAgICAgICAgdGhpcy5vcGVuQ2FuY2VsRGlhbG9nKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5mb3JtR3JvdXBNYW5hZ2VyU2VydmljZS5jYW5jZWxQZW5kaW5nQXN5bmNWYWxpZGF0aW9uKCk7XG4gICAgICAgICAgdGhpcy5wYWdlU3RvcmVTZXJ2aWNlLnRvZ2dsZVZpZXdvbmx5KHRydWUpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgfVxuXG4gIHNhdmUoKTogdm9pZCB7XG4gICAgY29uc3QgaGFuZGxlU3VjY2VzcyA9ICgpOiB2b2lkID0+IHtcbiAgICAgIHRoaXMuZm9ybUdyb3VwTWFuYWdlclNlcnZpY2UuY2FuY2VsUGVuZGluZ0FzeW5jVmFsaWRhdGlvbigpO1xuICAgICAgdGhpcy5wYWdlU3RvcmVTZXJ2aWNlLnRvZ2dsZVZpZXdvbmx5KHRydWUpO1xuICAgICAgdGhpcy5mb3JtR3JvdXBNYW5hZ2VyU2VydmljZS50YWtlRm9ybUdyb3Vwc1NuYXBzaG90KCk7XG4gICAgfTtcblxuICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuc2F2ZUJ1dHRvbj8uaGFuZGxlcj8uKHRoaXMuZm9ybUdyb3VwTWFuYWdlclNlcnZpY2UuZ2V0QWxsVmFsdWVzKCkpO1xuXG4gICAgaXNPYnNlcnZhYmxlKHJlc3VsdCkgPyByZXN1bHQucGlwZSh0YWtlKDEpKS5zdWJzY3JpYmUoKG9rOiBib29sZWFuKSA9PiBvayAmJiBoYW5kbGVTdWNjZXNzKCkpIDogaGFuZGxlU3VjY2VzcygpO1xuICB9XG5cbiAgY2hhbmdlQ29udGV4dChcbiAgICBjb250ZXh0OiBRZFBhZ2VDb250ZXh0Q29uZmlnLFxuICAgIHNlbGVjdGlvbjogUWRQYWdlU2VsZWN0ZWRDb250ZXh0IHwgUWRQYWdlU2VsZWN0ZWRDb250ZXh0W10sXG4gICAgZXZlbnQ6IE1vdXNlRXZlbnRcbiAgKTogdm9pZCB7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICBpZiAoY29udGV4dC50eXBlID09PSAnY3VzdG9tJykge1xuICAgICAgY29udGV4dC5vcGVuKCk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBkaWFsb2dSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKFFkQ29udGV4dFNlbGVjdERpYWxvZ0NvbXBvbmVudCwge1xuICAgICAgZGF0YTogeyBjb25maWc6IGNvbnRleHQsIHNlbGVjdGlvbiB9LFxuICAgICAgZGlhbG9nU2l6ZTogUWREaWFsb2dTaXplLlNtYWxsLFxuICAgICAgdGl0bGU6IGNvbnRleHQudGl0bGVcbiAgICB9KTtcblxuICAgIGRpYWxvZ1JlZi5jbG9zZWQuc3Vic2NyaWJlKChkYXRhOiB7IHNlbGVjdGVkOiBRZFBhZ2VTZWxlY3RlZENvbnRleHRbXSB9KSA9PiB7XG4gICAgICBpZiAoZGF0YSkgdGhpcy5jb250ZXh0U2VydmljZS5zZXRWYWx1ZShjb250ZXh0LmlkLCBkYXRhLnNlbGVjdGVkKTtcbiAgICB9KTtcbiAgfVxuXG4gIGNsZWFyQ29udGV4dChjb250ZXh0OiBRZFBhZ2VDb250ZXh0Q29uZmlnKTogdm9pZCB7XG4gICAgdGhpcy5jb250ZXh0U2VydmljZS5jbGVhcihjb250ZXh0LmlkKTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0dXBSZXNvbHZlclRyaWdnZXIoKTogdm9pZCB7XG4gICAgdGhpcy5yZXNvbHZlclRyaWdnZXJTZXJ2aWNlXG4gICAgICAuc2hvdWxkVHJpZ2dlclJlc29sdmVyKHRoaXMucGFnZU9iamVjdFJlc29sdmVyLmNvbmZpZz8udHJpZ2dlck9uID8/ICdwYXRoUGFyYW1zQ2hhbmdlJylcbiAgICAgIC5waXBlKFxuICAgICAgICB0YWtlVW50aWwodGhpcy5fZGVzdHJveWVkJCksXG4gICAgICAgIGZpbHRlcihzaG91bGRUcmlnZ2VyID0+IHNob3VsZFRyaWdnZXIpLFxuICAgICAgICB0YXAoKCkgPT4gdGhpcy5faXNMb2FkaW5nU3ViamVjdC5uZXh0KHRydWUpKSxcbiAgICAgICAgc3dpdGNoTWFwKCgpID0+IHRoaXMucGFnZU9iamVjdFJlc29sdmVyLnJlc29sdmUoKSksXG4gICAgICAgIHRhcChvYmplY3REYXRhID0+IHRoaXMuX3BhZ2VPYmplY3REYXRhU3ViamVjdC5uZXh0KG9iamVjdERhdGEpKSxcbiAgICAgICAgdGFwKCgpID0+IHRoaXMuX2lzTG9hZGluZ1N1YmplY3QubmV4dChmYWxzZSkpLFxuICAgICAgICB0YXAoKCkgPT4gdGhpcy5mb3JtR3JvdXBNYW5hZ2VyU2VydmljZS50YWtlRm9ybUdyb3Vwc1NuYXBzaG90KCkpXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCk7XG4gIH1cblxuICBwcml2YXRlIGluaXRDb250ZXh0cygpOiB2b2lkIHtcbiAgICB0aGlzLmNvbnRleHRzJCA9IHRoaXMuY29udGV4dFNlcnZpY2UuY29udGV4dHMkLnBpcGUoXG4gICAgICBtYXAoY29udGV4dHMgPT4gY29udGV4dHMuZmlsdGVyKGNvbnRleHQgPT4gY29udGV4dC5zZWxlY3Rpb24gfHwgdGhpcy5jb25maWcucGFnZVR5cGUgPT09ICdvdmVydmlldycpKSxcbiAgICAgIG1hcChjb250ZXh0cyA9PlxuICAgICAgICBjb250ZXh0cz8ubWFwKCh7IHNlbGVjdGlvbiwgY29udGV4dCB9KSA9PiAoe1xuICAgICAgICAgIGxhYmVsOiBjb250ZXh0LmxhYmVsLmkxOG4sXG4gICAgICAgICAgdmFsdWU6IEFycmF5LmlzQXJyYXkoc2VsZWN0aW9uPy52YWx1ZSlcbiAgICAgICAgICAgID8gc2VsZWN0aW9uPy52YWx1ZS5maWx0ZXIoaXRlbSA9PiBpdGVtICE9PSBudWxsICYmIGl0ZW0gIT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgIDogc2VsZWN0aW9uPy52YWx1ZSAhPT0gbnVsbCAmJiBzZWxlY3Rpb24/LnZhbHVlICE9PSB1bmRlZmluZWRcbiAgICAgICAgICAgID8gW3NlbGVjdGlvbj8udmFsdWVdXG4gICAgICAgICAgICA6IChbXSBhcyBRZFBhZ2VTZWxlY3RlZENvbnRleHRbXSksXG4gICAgICAgICAgY29udGV4dCxcbiAgICAgICAgICBzZWxlY3Rpb246IHNlbGVjdGlvbj8udmFsdWUgPz8gW11cbiAgICAgICAgfSkpXG4gICAgICApXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlQ3VzdG9tQWN0aW9ucygpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5jb25maWcucGFnZVR5cGUgPT09ICdpbnNwZWN0Jykge1xuICAgICAgY29uc3Qgb3BlcmF0aW9uTW9kZSA9IHRoaXMuY29uZmlnLnBhZ2VUeXBlQ29uZmlnPy5vcGVyYXRpb25Nb2RlO1xuXG4gICAgICBpZiAob3BlcmF0aW9uTW9kZSkgdGhpcy5wYWdlU3RvcmVTZXJ2aWNlLnRvZ2dsZVZpZXdvbmx5KG9wZXJhdGlvbk1vZGUgPT09ICd2aWV3Jyk7XG5cbiAgICAgIHRoaXMucGFnZVN0b3JlU2VydmljZS5pc1ZpZXdvbmx5JC5waXBlKHRha2VVbnRpbCh0aGlzLl9kZXN0cm95ZWQkKSkuc3Vic2NyaWJlKGlzVmlld29ubHkgPT4ge1xuICAgICAgICBjb25zdCBjdXN0b21BY3Rpb25zID0gdGhpcy5jb25maWcucGFnZVR5cGVDb25maWc/LmN1c3RvbUFjdGlvbnMgPz8gW107XG5cbiAgICAgICAgdGhpcy5fY3VzdG9tQWN0aW9uc1N1YmplY3QubmV4dCh0aGlzLmdldEN1c3RvbUFjdGlvbnNCeU1vZGUoY3VzdG9tQWN0aW9ucywgaXNWaWV3b25seSA/ICd2aWV3JyA6ICdlZGl0JykpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuY29uZmlnLnBhZ2VUeXBlICE9PSAnaW5zcGVjdCcpXG4gICAgICB0aGlzLl9jdXN0b21BY3Rpb25zU3ViamVjdC5uZXh0KHsgYWN0aW9uczogdGhpcy5jb25maWcucGFnZVR5cGVDb25maWc/LmN1c3RvbUFjdGlvbnMgPz8gW10gfSk7XG4gIH1cblxuICBwcml2YXRlIGdldEN1c3RvbUFjdGlvbnNCeU1vZGUoXG4gICAgY3VzdG9tQWN0aW9uczogKFFkTWVudUJ1dHRvbkFjdGlvbkNvbmZpZyAmIHsgb3BlcmF0aW9uTW9kZT86IFFkSW5zcGVjdE9wZXJhdGlvbk1vZGUgfSlbXSxcbiAgICBtb2RlOiBRZEluc3BlY3RPcGVyYXRpb25Nb2RlXG4gICk6IFFkTWVudUJ1dHRvbkNvbmZpZyB7XG4gICAgY29uc3QgYWN0aW9ucyA9IGN1c3RvbUFjdGlvbnNcbiAgICAgIC5maWx0ZXIoYWN0aW9uID0+ICFhY3Rpb24ub3BlcmF0aW9uTW9kZSB8fCBhY3Rpb24ub3BlcmF0aW9uTW9kZSA9PT0gbW9kZSlcbiAgICAgIC5tYXAoYWN0aW9uID0+IHtcbiAgICAgICAgY29uc3QgbWVudUJ1dHRvbkFjdGlvbiA9IHsgLi4uYWN0aW9uIH07XG4gICAgICAgIGRlbGV0ZSBtZW51QnV0dG9uQWN0aW9uLm9wZXJhdGlvbk1vZGU7XG4gICAgICAgIHJldHVybiBtZW51QnV0dG9uQWN0aW9uO1xuICAgICAgfSk7XG5cbiAgICByZXR1cm4geyBhY3Rpb25zIH07XG4gIH1cblxuICBwcml2YXRlIG9wZW5DYW5jZWxEaWFsb2coKTogdm9pZCB7XG4gICAgdGhpcy5kaWFsb2dcbiAgICAgIC5vcGVuKFFkUGFnZUNhbmNlbENvbmZpcm1hdGlvbkRpYWxvZ0NvbXBvbmVudCwge1xuICAgICAgICB0aXRsZTogeyBpMThuOiAnaTE4bi5xZC5wYWdlLmNhbmNlbC5jb25maXJtYXRpb24uZGlhbG9nLnRpdGxlJyB9LFxuICAgICAgICBkaWFsb2dTaXplOiBRZERpYWxvZ1NpemUuU21hbGwsXG4gICAgICAgIGRhdGE6IHRoaXMuY29uZmlnLnBhZ2VUeXBlQ29uZmlnXG4gICAgICB9KVxuICAgICAgLmNsb3NlZC5waXBlKHRha2VVbnRpbCh0aGlzLl9kZXN0cm95ZWQkKSlcbiAgICAgIC5zdWJzY3JpYmUoY29uZmlybSA9PiB7XG4gICAgICAgIGlmIChjb25maXJtKSB7XG4gICAgICAgICAgdGhpcy5mb3JtR3JvdXBNYW5hZ2VyU2VydmljZS5yZXN0b3JlRm9ybUdyb3Vwc0Zyb21TbmFwc2hvdCgpO1xuICAgICAgICAgIHRoaXMucGFnZVN0b3JlU2VydmljZS50b2dnbGVWaWV3b25seSh0cnVlKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJsb2FkaW5nLW92ZXJsYXlcIiAqbmdJZj1cImlzTG9hZGluZyQgfCBhc3luY1wiPjxxZC1zcGlubmVyPjwvcWQtc3Bpbm5lcj48L2Rpdj5cblxuPGRpdiBjbGFzcz1cIm9iamVjdC1oZWFkZXItdG9wXCI+XG4gIDxoZWFkZXIgY2xhc3M9XCJvYmplY3QtaGVhZGVyLXRpdGxlXCI+e3sgY29uZmlnLnRpdGxlLmkxOG4gfCB0cmFuc2xhdGUgfX08L2hlYWRlcj5cbiAgPGRpdiBjbGFzcz1cIm9iamVjdC1oZWFkZXItdG9vbGJhclwiPlxuICAgIDxidXR0b24gY2xhc3M9XCJidXR0b24taWNvblwiIGRhdGEtdGVzdC1pZD1cImFyY2hpdmUtYnV0dG9uXCI+XG4gICAgICA8cWQtaWNvblxuICAgICAgICAqbmdJZj1cInNob3dBcmNoaXZlJCB8IGFzeW5jXCJcbiAgICAgICAgKGNsaWNrKT1cImFyY2hpdmVCdXR0b24/LmhhbmRsZXIoKVwiXG4gICAgICAgIGNsYXNzPVwiaGVhZGVyLWFjdGlvbi1pY29uXCJcbiAgICAgICAgW2ljb25dPVwiJ3Jlc3VsdE5ldydcIlxuICAgICAgPjwvcWQtaWNvbj5cbiAgICA8L2J1dHRvbj5cblxuICAgIDxidXR0b24gY2xhc3M9XCJidXR0b24taWNvblwiIGRhdGEtdGVzdC1pZD1cImRlbGV0ZS1idXR0b25cIj5cbiAgICAgIDxxZC1pY29uXG4gICAgICAgIGNsYXNzPVwiaGVhZGVyLWFjdGlvbi1pY29uXCJcbiAgICAgICAgKm5nSWY9XCJzaG93RGVsZXRlJCB8IGFzeW5jXCJcbiAgICAgICAgKGNsaWNrKT1cImRlbGV0ZUJ1dHRvbj8uaGFuZGxlcigpXCJcbiAgICAgICAgW2ljb25dPVwiJ3RyYXNoJ1wiXG4gICAgICA+PC9xZC1pY29uPlxuICAgIDwvYnV0dG9uPlxuXG4gICAgPGJ1dHRvbiAqbmdJZj1cInNob3dFZGl0JCB8IGFzeW5jXCIgcWRCdXR0b24gKGNsaWNrKT1cImVkaXQoKVwiIGRhdGEtdGVzdC1pZD1cImVkaXQtYnV0dG9uXCI+XG4gICAgICB7eyBlZGl0QnV0dG9uPy5sYWJlbD8uaTE4biB8fCBcImkxOG4ucWQucGFnZS5oZWFkZXIuZWRpdFwiIHwgdHJhbnNsYXRlIH19XG4gICAgPC9idXR0b24+XG5cbiAgICA8YnV0dG9uICpuZ0lmPVwic2hvd0NhbmNlbCQgfCBhc3luY1wiIHFkQnV0dG9uIHFkQnV0dG9uR2hvc3QgKGNsaWNrKT1cImNhbmNlbCgpXCIgZGF0YS10ZXN0LWlkPVwiY2FuY2VsLWJ1dHRvblwiPlxuICAgICAge3sgY2FuY2VsQnV0dG9uLmxhYmVsPy5pMThuIHx8IFwiaTE4bi5xZC5wYWdlLmhlYWRlci5jYW5jZWxcIiB8IHRyYW5zbGF0ZSB9fVxuICAgIDwvYnV0dG9uPlxuXG4gICAgPGJ1dHRvblxuICAgICAgKm5nSWY9XCJzaG93U2F2ZSQgfCBhc3luY1wiXG4gICAgICBxZEJ1dHRvblxuICAgICAgKGNsaWNrKT1cInNhdmUoKVwiXG4gICAgICBkYXRhLXRlc3QtaWQ9XCJzYXZlLWJ1dHRvblwiXG4gICAgICBbZGlzYWJsZWRdPVwiKCRjYW5TYXZlIHwgYXN5bmMpID09PSBmYWxzZVwiXG4gICAgPlxuICAgICAge3sgc2F2ZUJ1dHRvbi5sYWJlbD8uaTE4biB8fCBcImkxOG4ucWQucGFnZS5oZWFkZXIuc2F2ZVwiIHwgdHJhbnNsYXRlIH19XG4gICAgPC9idXR0b24+XG5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY3VzdG9tQWN0aW9ucyQgfCBhc3luYyBhcyBjdXN0b21BY3Rpb25zXCI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWFkYXB0aXZlTW9kZTsgZWxzZSBhZGFwdGl2ZVwiPlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgW3FkTWVudUJ1dHRvbl09XCJjdXN0b21BY3Rpb25zXCJcbiAgICAgICAgICBbYXV0b1NpemVdPVwiZmFsc2VcIlxuICAgICAgICAgIFtkYXRhLXRlc3QtaWRdPVwiJ3BhZ2UtJ1wiXG4gICAgICAgICAgKm5nSWY9XCJjdXN0b21BY3Rpb25zLmFjdGlvbnMubGVuZ3RoID4gMTsgZWxzZSBzaW5nbGVCdXR0b25cIlxuICAgICAgICAgIGRhdGEtdGVzdC1pZD1cImN1c3RvbS1idXR0b25cIlxuICAgICAgICA+XG4gICAgICAgICAge3sgY29uZmlnPy5jdXN0b21BY3Rpb25zTGFiZWw/LmkxOG4gfHwgXCJpMThuLnFkLnBhZ2UuaGVhZGVyLmFjdGlvbnNcIiB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICA8L2J1dHRvbj5cblxuICAgICAgICA8bmctdGVtcGxhdGUgI3NpbmdsZUJ1dHRvbj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiKGN1c3RvbUFjdGlvbnMkIHwgYXN5bmMpLmFjdGlvbnNbMF0gYXMgc2luZ2xlQWN0aW9uXCI+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIHFkQnV0dG9uXG4gICAgICAgICAgICAgICpuZ0lmPVwic2luZ2xlQWN0aW9uLmhhbmRsZXIgJiYgIXNpbmdsZUFjdGlvbi5pc0hpZGRlblwiXG4gICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJzaW5nbGVBY3Rpb24uaXNEaXNhYmxlZFwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJzaW5nbGVBY3Rpb24uaGFuZGxlcigpXCJcbiAgICAgICAgICAgICAgZGF0YS10ZXN0LWlkPVwiY3VzdG9tLWJ1dHRvblwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIHt7IHNpbmdsZUFjdGlvbi5sYWJlbD8uaTE4biB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgPG5nLXRlbXBsYXRlICNhZGFwdGl2ZT5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICpuZ0lmPVwiKGN1c3RvbUFjdGlvbnMkIHwgYXN5bmMpPy5hY3Rpb25zLmxlbmd0aCA+PSAxXCJcbiAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICBjbGFzcz1cImFkYXB0aXZlLW1lbnUtYnV0dG9uXCJcbiAgICAgICAgICBbcWRQb3BvdmVyT25DbGlja109XCJtZW51XCJcbiAgICAgICAgICBbcWRQb3BvdmVyQ2xvc2VTdHJhdGVneV09XCInb25FdmVyeUNsaWNrJ1wiXG4gICAgICAgICAgW3FkUG9wb3ZlclN0b3BQcm9wYWdhdGlvbl09XCJ0cnVlXCJcbiAgICAgICAgICBbcWRQb3BvdmVyTWluV2lkdGhdPVwiMTYwXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxxZC1pY29uIGljb249XCJvdmVyZmxvd01lbnVWZXJ0aWNhbFwiPjwvcWQtaWNvbj5cbiAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgPG5nLXRlbXBsYXRlICNtZW51PlxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICpuZ0Zvcj1cImxldCBhY3Rpb24gb2YgY3VzdG9tQWN0aW9ucy5hY3Rpb25zOyBsZXQgaSA9IGluZGV4XCJcbiAgICAgICAgICAgIGNsYXNzPVwiYWRhcHRpdmUtbWVudS1lbnRyeVwiXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJhY3Rpb24uaXNEaXNhYmxlZFwiXG4gICAgICAgICAgICAoY2xpY2spPVwiYWN0aW9uLmhhbmRsZXIoKVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAge3sgYWN0aW9uLmxhYmVsLmkxOG4gfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPC9uZy1jb250YWluZXI+XG4gIDwvZGl2PlxuPC9kaXY+XG5cbjxkaXYgY2xhc3M9XCJvYmplY3QtaGVhZGVyLWZhY2V0c1wiIFtuZ0NsYXNzXT1cInsgYW1vbmdUaGVtc2VsdmVzOiBhZGFwdGl2ZU1vZGUgJiYgIWZhY2V0c0NvbGxhcHNlZCB9XCI+XG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCJwYWdlT2JqZWN0RGF0YSQgfCBhc3luYyBhcyBkYXRhXCI+XG4gICAgPGRpdlxuICAgICAgY2xhc3M9XCJvYmplY3QtaGVhZGVyLWZhY2V0XCJcbiAgICAgICpuZ0Zvcj1cImxldCBmYWNldCBvZiBoZWFkZXJGYWNldHMgfCBzbGljZSA6IDAgOiAoYWRhcHRpdmVNb2RlICYmIGZhY2V0c0NvbGxhcHNlZCA/IDIgOiBoZWFkZXJGYWNldHM/Lmxlbmd0aCA/PyAwKVwiXG4gICAgICBbYXR0ci5kYXRhLXRlc3QtaWRdPVwidGVzdElkICsgJy1mYWNldC0nICsgZmFjZXQubmFtZVwiXG4gICAgPlxuICAgICAgPGRpdiBjbGFzcz1cImZhY2V0LWxhYmVsXCI+e3sgZmFjZXQubGFiZWwuaTE4biB8IHRyYW5zbGF0ZSB9fTwvZGl2PlxuICAgICAgPHFkLWR5bmFtaWMtZmFjZXQgY2xhc3M9XCJkeW5hbWljLWZhY2V0XCIgW2ZhY2V0XT1cImZhY2V0XCIgW2RhdGFdPVwiZGF0YVwiPjwvcWQtZHluYW1pYy1mYWNldD5cbiAgICA8L2Rpdj5cbiAgPC9uZy1jb250YWluZXI+XG5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFjb25maWcuaGlkZUNvbnRleHRzICYmIGNvbnRleHRzJCB8IGFzeW5jIGFzIGNvbnRleHRzXCI+XG4gICAgPGRpdlxuICAgICAgY2xhc3M9XCJvYmplY3QtaGVhZGVyLWZhY2V0XCJcbiAgICAgICpuZ0Zvcj1cIlxuICAgICAgICBsZXQgY29udGV4dCBvZiBjb250ZXh0c1xuICAgICAgICAgIHwgc2xpY2UgOiAwIDogKGFkYXB0aXZlTW9kZSAmJiBmYWNldHNDb2xsYXBzZWQgPyAyIC0gKGhlYWRlckZhY2V0cz8ubGVuZ3RoID8/IDApIDogY29udGV4dHMubGVuZ3RoKTtcbiAgICAgICAgbGV0IGluZGV4ID0gaW5kZXg7XG4gICAgICAgIGxldCBmaXJzdCA9IGZpcnN0XG4gICAgICBcIlxuICAgICAgW25nQ2xhc3NdPVwieyBoYXNEaXZpZGVyOiBoZWFkZXJGYWNldHMgJiYgZmlyc3QgfVwiXG4gICAgPlxuICAgICAgPGRpdiBjbGFzcz1cImZhY2V0LWxhYmVsXCI+e3sgY29udGV4dC5sYWJlbCB8IHRyYW5zbGF0ZSB9fTwvZGl2PlxuXG4gICAgICA8c3BhbiAqbmdJZj1cImNvbnRleHQudmFsdWUubGVuZ3RoID09PSAwXCIgY2xhc3M9XCJuby1zZWxlY3RlZC1jb250ZXh0XCI+e3tcbiAgICAgICAgXCJpMThuLnFkLnBhZ2UuY29udGV4dC5ub1NlbGVjdGlvblBsYWNlaG9sZGVyXCIgfCB0cmFuc2xhdGVcbiAgICAgIH19PC9zcGFuPlxuXG4gICAgICA8c3BhbiAqbmdJZj1cImNvbnRleHQudmFsdWUubGVuZ3RoICE9PSAwXCI+XG4gICAgICAgIDxxZC1jaGlwIHN0YXRlPVwibm9uZVwiIFtjbG9zZV09XCJpc0NvbnRleHRTZWxlY3RhYmxlXCIgKGNsb3NlQ2xpY2tFbWl0dGVyKT1cImNsZWFyQ29udGV4dChjb250ZXh0LmNvbnRleHQpXCI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgdmFsIG9mIGNvbnRleHQudmFsdWU7IGxldCBsYXN0ID0gbGFzdFwiPlxuICAgICAgICAgICAge3sgdmFsLmxhYmVsLmkxOG4gfCB0cmFuc2xhdGUgfX08c3BhbiAqbmdJZj1cIiFsYXN0XCI+LCA8L3NwYW4+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvcWQtY2hpcD5cbiAgICAgIDwvc3Bhbj5cblxuICAgICAgPHNwYW4gKm5nSWY9XCJpc0NvbnRleHRTZWxlY3RhYmxlICYmICghZmFjZXRzQ29sbGFwc2VkIHx8ICFhZGFwdGl2ZU1vZGUpXCIgY2xhc3M9XCJzZWxlY3QtYnV0dG9uXCI+XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICBxZEJ1dHRvblxuICAgICAgICAgIHFkQnV0dG9uTGlua1xuICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgIChjbGljayk9XCJjaGFuZ2VDb250ZXh0KGNvbnRleHQuY29udGV4dCwgY29udGV4dC5zZWxlY3Rpb24sICRldmVudClcIlxuICAgICAgICAgIFtkYXRhLXRlc3QtaWRdPVwiJ29iamVjdC1oZWFkZXItc2VsZWN0LWNvbnRleHQtJyArIGNvbnRleHQuY29udGV4dC5pZFwiXG4gICAgICAgID5cbiAgICAgICAgICB7e1xuICAgICAgICAgICAgY29udGV4dC52YWx1ZS5sZW5ndGggIT09IDBcbiAgICAgICAgICAgICAgPyAoXCJpMThuLnFkLnBhZ2UuY29udGV4dC5idXR0b24uY2hhbmdlXCIgfCB0cmFuc2xhdGUpXG4gICAgICAgICAgICAgIDogKFwiaTE4bi5xZC5wYWdlLmNvbnRleHQuYnV0dG9uLnNlbGVjdFwiIHwgdHJhbnNsYXRlKVxuICAgICAgICAgIH19XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9zcGFuPlxuICAgIDwvZGl2PlxuICA8L25nLWNvbnRhaW5lcj5cblxuICA8c3BhbiBjbGFzcz1cImZhY2V0cy10b2dnbGVyXCIgKm5nSWY9XCJhZGFwdGl2ZU1vZGUgJiYgaGVhZGVyRmFjZXRzLmxlbmd0aCArIChjb250ZXh0cyQgfCBhc3luYykubGVuZ3RoID4gMlwiPlxuICAgIDxzcGFuICpuZ0lmPVwiZmFjZXRzQ29sbGFwc2VkXCI+K3t7IGhlYWRlckZhY2V0cy5sZW5ndGggKyAoY29udGV4dHMkIHwgYXN5bmMpLmxlbmd0aCAtIDIgfX08L3NwYW4+XG4gICAgPGJ1dHRvbiBxZEljb25CdXR0b24+XG4gICAgICA8cWQtaWNvbiBbaWNvbl09XCJmYWNldHNDb2xsYXBzZWQgPyAnY3RybERvd24nIDogJ2N0cmxUb3AnXCI+PC9xZC1pY29uPlxuICAgIDwvYnV0dG9uPlxuICA8L3NwYW4+XG48L2Rpdj5cbiJdfQ==
329
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFnZS1vYmplY3QtaGVhZGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvcWQtdWkvc3JjL2xpYi9wYWdlL29iamVjdC1oZWFkZXIvcGFnZS1vYmplY3QtaGVhZGVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvcWQtdWkvc3JjL2xpYi9wYWdlL29iamVjdC1oZWFkZXIvcGFnZS1vYmplY3QtaGVhZGVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFdBQVcsRUFDWCxZQUFZLEVBQ1osTUFBTSxFQUNOLEtBQUssRUFJTCxRQUFRLEVBRVQsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGVBQWUsRUFBRSxhQUFhLEVBQUUsWUFBWSxFQUFjLE9BQU8sRUFBZ0IsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ2xILE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRWpGLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxlQUFlLEVBQUUsWUFBWSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDOUYsT0FBTyxFQUFFLHVDQUF1QyxFQUFFLE1BQU0seUVBQXlFLENBQUM7QUFnQmxJLE9BQU8sRUFBRSw2QkFBNkIsRUFBd0IsTUFBTSwrQkFBK0IsQ0FBQztBQUNwRyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUN0RSxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSwrQ0FBK0MsQ0FBQztBQUMxRixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUMzRSxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSw2Q0FBNkMsQ0FB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LElBQUksQ0FBQyxDQUFDO1lBQzdDLENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7dUdBbldVLDJCQUEyQixrQkFnSmhCLDZCQUE2QjsyRkFoSnhDLDJCQUEyQix5VUMvQ3hDLGloTUErSkE7OzJGRGhIYSwyQkFBMkI7a0JBUHZDLFNBQVM7K0JBQ0UsdUJBQXVCLG1CQUdoQix1QkFBdUIsQ0FBQyxNQUFNLFFBQ3pDLEVBQUUsc0JBQXNCLEVBQUUsbUJBQW1CLEVBQUU7OzBCQWtKbEQsUUFBUTs7MEJBQUksTUFBTTsyQkFBQyw2QkFBNkI7OzBCQUNoRCxRQUFROzswQkFDUixRQUFROzhLQWhKWCxNQUFNO3NCQURMLEtBQUs7dUJBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFO2dCQUl6QixhQUFhO3NCQURaLEtBQUs7dUJBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFO2dCQUdGLE1BQU07c0JBQTVCLEtBQUs7dUJBQUMsY0FBYztnQkFHakIsVUFBVTtzQkFEYixXQUFXO3VCQUFDLGlCQUFpQjtnQkFNOUIsWUFBWTtzQkFEWCxZQUFZO3VCQUFDLE9BQU8iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ29tcG9uZW50LFxuICBIb3N0QmluZGluZyxcbiAgSG9zdExpc3RlbmVyLFxuICBJbmplY3QsXG4gIElucHV0LFxuICBPbkNoYW5nZXMsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBPcHRpb25hbCxcbiAgU2ltcGxlQ2hhbmdlc1xufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgY29tYmluZUxhdGVzdCwgaXNPYnNlcnZhYmxlLCBPYnNlcnZhYmxlLCBTdWJqZWN0LCBTdWJzY3JpcHRpb24sIHN3aXRjaE1hcCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZGVib3VuY2VUaW1lLCBmaWx0ZXIsIG1hcCwgdGFrZSwgdGFrZVVudGlsLCB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBRZE1lbnVCdXR0b25BY3Rpb25Db25maWcsIFFkTWVudUJ1dHRvbkNvbmZpZyB9IGZyb20gJy4uLy4uL2J1dHRvbi9tb2RlbC9idXR0b24tY29uZmlnJztcbmltcG9ydCB7IFFkRGlhbG9nQ29tcG9uZW50LCBRZERpYWxvZ1NlcnZpY2UsIFFkRGlhbG9nU2l6ZSB9IGZyb20gJy4uLy4uL2RpYWxvZy9kaWFsb2cubW9kdWxlJztcbmltcG9ydCB7IFFkUGFnZUNhbmNlbENvbmZpcm1hdGlvbkRpYWxvZ0NvbXBvbmVudCB9IGZyb20gJy4uL2NhbmNlbC1jb25maXJtYXRpb24tZGlhbG9nL3BhZ2UtY2FuY2VsLWNvbmZpcm1hdGlvbi1kaWFsb2cuY29tcG9uZW50JztcbmltcG9ydCB7XG4gIFFkSW5zcGVjdE9wZXJhdGlvbk1vZGUsXG4gIFFkUGFnZUNvbmZpZyxcbiAgUWRQYWdlQ29uZmlnQ3JlYXRlLFxuICBRZFBhZ2VDb25maWdDdXN0b20sXG4gIFFkUGFnZUNvbmZpZ0luc3BlY3QsXG4gIFFkUGFnZUNvbnRleHRDb25maWcsXG4gIFFkUGFnZVNlbGVjdGVkQ29udGV4dCxcbiAgUWRQYWdlVHlwZUluc3BlY3RDb25maWdcbn0gZnJvbSAnLi4vbW9kZWwvcGFnZS1jb25maWcuaW50ZXJmYWNlJztcbmltcG9ydCB7XG4gIFFkRmFjZXRPcHRpb25NdWx0aVNlbGVjdCxcbiAgUWRGYWNldE9wdGlvblNpbmdsZVNlbGVjdCxcbiAgUWRQYWdlSGVhZGVyRmFjZXRDb25maWdcbn0gZnJvbSAnLi4vbW9kZWwvcGFnZS1oZWFkZXItZmFjZXQuaW50ZXJmYWNlJztcbmltcG9ydCB7IFFEX1BBR0VfT0JKRUNUX1JFU09MVkVSX1RPS0VOLCBRZFBhZ2VPYmplY3RSZXNvbHZlciB9IGZyb20gJy4uL21vZGVsL3BhZ2Utb2JqZWN0LXJlc29sdmVyJztcbmltcG9ydCB7IFFkQ29udGV4dFNlcnZpY2UgfSBmcm9tICcuLi9zaGFyZWQvc2VydmljZXMvY29udGV4dC5zZXJ2aWNlJztcbmltcG9ydCB7IFFkRm9ybUdyb3VwTWFuYWdlclNlcnZpY2UgfSBmcm9tICcuLi9zaGFyZWQvc2VydmljZXMvZm9ybS1ncm91cC1tYW5hZ2VyLnNlcnZpY2UnO1xuaW1wb3J0IHsgUWRQYWdlU3RvcmVTZXJ2aWNlIH0gZnJvbSAnLi4vc2hhcmVkL3NlcnZpY2VzL3BhZ2Utc3RvcmUuc2VydmljZSc7XG5pbXBvcnQgeyBRZFJlc29sdmVyVHJpZ2dlclNlcnZpY2UgfSBmcm9tICcuLi9zaGFyZWQvc2VydmljZXMvcmVzb2x2ZXItdHJpZ2dlci5zZXJ2aWNlJztcbmltcG9ydCB7IFFkQ29udGV4dFNlbGVjdERpYWxvZ0NvbXBvbmVudCB9IGZyb20gJy4vY29udGV4dC1zZWxlY3QtZGlhbG9nL2NvbnRleHQtc2VsZWN0LWRpYWxvZy5jb21wb25lbnQnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdxZC1wYWdlLW9iamVjdC1oZWFkZXInLFxuICB0ZW1wbGF0ZVVybDogJy4vcGFnZS1vYmplY3QtaGVhZGVyLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vcGFnZS1vYmplY3QtaGVhZGVyLmNvbXBvbmVudC5zY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBob3N0OiB7ICdbc3R5bGUuYm9yZGVyQm90dG9tXSc6ICdib3JkZXJCb3R0b21TdHlsZScgfVxufSlcbmV4cG9ydCBjbGFzcyBRZFBhZ2VPYmplY3RIZWFkZXJDb21wb25lbnQ8VCBleHRlbmRzIG9iamVjdD4gaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcywgT25EZXN0cm95IHtcbiAgQElucHV0KHsgcmVxdWlyZWQ6IHRydWUgfSlcbiAgY29uZmlnITogUWRQYWdlQ29uZmlnPFQ+O1xuXG4gIEBJbnB1dCh7IHJlcXVpcmVkOiB0cnVlIH0pXG4gIGhhc05hdmlnYXRpb24gPSBmYWxzZTtcblxuICBASW5wdXQoJ2RhdGEtdGVzdC1pZCcpIHRlc3RJZCA9ICdwYWdlLW9iamVjdC1oZWFkZXInO1xuXG4gIEBIb3N0QmluZGluZygnY2xhc3MuaW4tZGlhbG9nJylcbiAgZ2V0IGlzSW5EaWFsb2coKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhdGhpcy5kaWFsb2dDb21wb25lbnQ7XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCdjbGljaycpXG4gIHRvZ2dsZUZhY2V0cygpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuYWRhcHRpdmVNb2RlIHx8ICh0aGlzLmhlYWRlckZhY2V0cz8ubGVuZ3RoID8/IDApID49IDIpIHJldHVybjtcblxuICAgIHRoaXMuZmFjZXRzQ29sbGFwc2VkID0gIXRoaXMuZmFjZXRzQ29sbGFwc2VkO1xuICB9XG5cbiAgZ2V0IGFkYXB0aXZlTW9kZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKHRoaXMuY29uZmlnIGFzIFFkUGFnZUNvbmZpZ0luc3BlY3QgfCBRZFBhZ2VDb25maWdDdXN0b20pLmFkYXB0aXZlTW9kZTtcbiAgfVxuXG4gIHByaXZhdGUgX3BhZ2VPYmplY3REYXRhU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8VD4oe30gYXMgVCk7XG4gIHByaXZhdGUgX2lzTG9hZGluZ1N1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgcHJpdmF0ZSBfY3VzdG9tQWN0aW9uc1N1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFFkTWVudUJ1dHRvbkNvbmZpZz4oeyBhY3Rpb25zOiBbXSB9KTtcbiAgcHJpdmF0ZSBfY3VzdG9tQWN0aW9uc1N1Yj86IFN1YnNjcmlwdGlvbjtcbiAgcHJpdmF0ZSBfZGVzdHJveWVkJCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgcGFnZU9iamVjdERhdGEkOiBPYnNlcnZhYmxlPFQ+ID0gdGhpcy5fcGFnZU9iamVjdERhdGFTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuICBpc0xvYWRpbmckOiBPYnNlcnZhYmxlPGJvb2xlYW4+ID0gdGhpcy5faXNMb2FkaW5nU3ViamVjdC5hc09ic2VydmFibGUoKS5waXBlKGRlYm91bmNlVGltZSg0MDApKTtcbiAgY3VzdG9tQWN0aW9ucyQ6IE9ic2VydmFibGU8UWRNZW51QnV0dG9uQ29uZmlnPiA9IHRoaXMuX2N1c3RvbUFjdGlvbnNTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuXG4gIGZhY2V0c0NvbGxhcHNlZCA9IHRydWU7XG5cbiAgY29udGV4dHMkITogT2JzZXJ2YWJsZTxcbiAgICB7XG4gICAgICBsYWJlbDogc3RyaW5nO1xuICAgICAgdmFsdWU6IFFkUGFnZVNlbGVjdGVkQ29udGV4dFtdO1xuICAgICAgY29udGV4dDogUWRQYWdlQ29udGV4dENvbmZpZztcbiAgICAgIHNlbGVjdGlvbjogUWRQYWdlU2VsZWN0ZWRDb250ZXh0IHwgUWRQYWdlU2VsZWN0ZWRDb250ZXh0W107XG4gICAgfVtdXG4gID47XG5cbiAgZ2V0IGJvcmRlckJvdHRvbVN0eWxlKCk6IHN0cmluZyB7XG4gICAgY29uc3QgcGFnZVR5cGUgPSB0aGlzLmNvbmZpZy5wYWdlVHlwZTtcblxuICAgIHJldHVybiBwYWdlVHlwZSA9PT0gJ2NyZWF0ZScgfHxcbiAgICAgIChwYWdlVHlwZSA9PT0gJ2luc3BlY3QnICYmIHRoaXMuaGFzTmF2aWdhdGlvbikgfHxcbiAgICAgIChwYWdlVHlwZSA9PT0gJ2N1c3RvbScgJiYgdGhpcy5oYXNOYXZpZ2F0aW9uKSB8fFxuICAgICAgKHBhZ2VUeXBlID09PSAnb3ZlcnZpZXcnICYmIHRoaXMuaGFzTmF2aWdhdGlvbilcbiAgICAgID8gJ25vbmUgIWltcG9ydGFudCdcbiAgICAgIDogJyc7XG4gIH1cblxuICBnZXQgc2hvd0VkaXQkKCk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLmlzSW5zcGVjdEFuZFZpZXdNb2RlJC5waXBlKG1hcCh2ID0+IHYgJiYgIXRoaXMuaGlkZUVkaXQpKTtcbiAgfVxuXG4gIGdldCBzaG93RGVsZXRlJCgpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5pc0luc3BlY3RBbmRWaWV3TW9kZSQucGlwZShtYXAodiA9PiB2ICYmICEhdGhpcy5kZWxldGVCdXR0b24pKTtcbiAgfVxuXG4gIGdldCBzaG93QXJjaGl2ZSQoKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuaXNJbnNwZWN0QW5kVmlld01vZGUkLnBpcGUobWFwKHYgPT4gdiAmJiAhIXRoaXMuYXJjaGl2ZUJ1dHRvbikpO1xuICB9XG5cbiAgZ2V0IHNob3dDYW5jZWwkKCk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLmlzSW5zcGVjdEFuZFZpZXdNb2RlJC5waXBlKG1hcCh2ID0+ICF2ICYmICEhdGhpcy5jYW5jZWxCdXR0b24gJiYgIXRoaXMuaXNDcmVhdGUpKTtcbiAgfVxuXG4gIGdldCBzaG93U2F2ZSQoKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuaXNJbnNwZWN0QW5kVmlld01vZGUkLnBpcGUobWFwKHYgPT4gIXYgJiYgISF0aGlzLnNhdmVCdXR0b24pKTtcbiAgfVxuXG4gIGdldCBoZWFkZXJGYWNldHMoKTogUWRQYWdlSGVhZGVyRmFjZXRDb25maWc8VD5bXSB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKHRoaXMuaGFzSGVhZGVyRmFjZXRzKHRoaXMuY29uZmlnKSkgcmV0dXJuIHRoaXMuY29uZmlnLmhlYWRlckZhY2V0cztcbiAgfVxuXG4gIGdldCBpc0luc3BlY3RBbmRWaWV3TW9kZSQoKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMucGFnZVN0b3JlU2VydmljZS5pc1ZpZXdvbmx5JC5waXBlKFxuICAgICAgdGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3llZCQpLFxuICAgICAgbWFwKGlzVmlldyA9PiB0aGlzLmNvbmZpZy5wYWdlVHlwZSA9PT0gJ2luc3BlY3QnICYmIGlzVmlldylcbiAgICApO1xuICB9XG5cbiAgZ2V0IGlzQ3JlYXRlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZy5wYWdlVHlwZSA9PT0gJ2NyZWF0ZSc7XG4gIH1cblxuICBnZXQgaXNPdmVydmlldygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5jb25maWcucGFnZVR5cGUgPT09ICdvdmVydmlldyc7XG4gIH1cblxuICBnZXQgaXNDb250ZXh0U2VsZWN0YWJsZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5jb25maWcucGFnZVR5cGUgPT09ICdvdmVydmlldycgfHwgdGhpcy5jb25maWcucGFnZVR5cGUgPT09ICdjdXN0b20nO1xuICB9XG5cbiAgZ2V0IGVkaXRCdXR0b24oKTogUWRQYWdlVHlwZUluc3BlY3RDb25maWdbJ2VkaXQnXSB7XG4gICAgcmV0dXJuICh0aGlzLmNvbmZpZy5wYWdlVHlwZUNvbmZpZyBhcyBRZFBhZ2VUeXBlSW5zcGVjdENvbmZpZyk/LmVkaXQ7XG4gIH1cblxuICBnZXQgZGVsZXRlQnV0dG9uKCk6IFFkUGFnZVR5cGVJbnNwZWN0Q29uZmlnWydkZWxldGUnXSB7XG4gICAgcmV0dXJuICh0aGlzLmNvbmZpZy5wYWdlVHlwZUNvbmZpZyBhcyBRZFBhZ2VUeXBlSW5zcGVjdENvbmZpZyk/LmRlbGV0ZTtcbiAgfVxuXG4gIGdldCBhcmNoaXZlQnV0dG9uKCk6IFFkUGFnZVR5cGVJbnNwZWN0Q29uZmlnWydhcmNoaXZlJ10ge1xuICAgIHJldHVybiAodGhpcy5jb25maWcucGFnZVR5cGVDb25maWcgYXMgUWRQYWdlVHlwZUluc3BlY3RDb25maWcpPy5hcmNoaXZlO1xuICB9XG5cbiAgZ2V0IGNhbmNlbEJ1dHRvbigpOiBRZFBhZ2VUeXBlSW5zcGVjdENvbmZpZ1snY2FuY2VsJ10ge1xuICAgIHJldHVybiAodGhpcy5jb25maWcucGFnZVR5cGVDb25maWcgYXMgUWRQYWdlVHlwZUluc3BlY3RDb25maWcpPy5jYW5jZWw7XG4gIH1cblxuICBnZXQgc2F2ZUJ1dHRvbigpOiBRZFBhZ2VUeXBlSW5zcGVjdENvbmZpZ1snc2F2ZSddIHtcbiAgICByZXR1cm4gKHRoaXMuY29uZmlnLnBhZ2VUeXBlQ29uZmlnIGFzIFFkUGFnZVR5cGVJbnNwZWN0Q29uZmlnKT8uc2F2ZTtcbiAgfVxuXG4gIGdldCBoaWRlRWRpdCgpOiBib29sZWFuIHtcbiAgICBjb25zdCBjb25maWcgPSB0aGlzLmNvbmZpZy5wYWdlVHlwZUNvbmZpZyBhcyBRZFBhZ2VUeXBlSW5zcGVjdENvbmZpZyB8IHVuZGVmaW5lZDtcblxuICAgIGlmICghY29uZmlnKSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKGNvbmZpZy5vcGVyYXRpb25Nb2RlICE9PSAnZWRpdCcpIHJldHVybiBjb25maWcuaGlkZUVkaXQgPT09IHRydWU7XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBnZXQgaGFzVmFsdWVzQ2hhbmdlZCQoKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuZm9ybUdyb3VwTWFuYWdlclNlcnZpY2UuJGhhc1ZhbHVlc0NoYW5nZWQoKTtcbiAgfVxuXG4gIGdldCAkY2FuU2F2ZSgpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcbiAgICBpZiAoKHRoaXMuY29uZmlnLnBhZ2VUeXBlQ29uZmlnIGFzIFFkUGFnZVR5cGVJbnNwZWN0Q29uZmlnKT8uc2F2ZT8uaGFzVmFsaWRhdGlvbiA9PT0gZmFsc2UpXG4gICAgICByZXR1cm4gdGhpcy5mb3JtR3JvdXBNYW5hZ2VyU2VydmljZS4kaGFzVmFsdWVzQ2hhbmdlZCgpO1xuXG4gICAgcmV0dXJuIGNvbWJpbmVMYXRlc3QoW1xuICAgICAgdGhpcy5mb3JtR3JvdXBNYW5hZ2VyU2VydmljZS4kYXJlRm9ybUdyb3Vwc1ZhbGlkKCksXG4gICAgICB0aGlzLmZvcm1Hcm91cE1hbmFnZXJTZXJ2aWNlLiRoYXNWYWx1ZXNDaGFuZ2VkKClcbiAgICBdKS5waXBlKG1hcCgoW2lzVmFsaWQsIGhhc0NoYW5nZXNdKSA9PiBpc1ZhbGlkICYmIGhhc0NoYW5nZXMpKTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIEBPcHRpb25hbCgpIEBJbmplY3QoUURfUEFHRV9PQkpFQ1RfUkVTT0xWRVJfVE9LRU4pIHByaXZhdGUgcGFnZU9iamVjdFJlc29sdmVyOiBRZFBhZ2VPYmplY3RSZXNvbHZlcjxUPixcbiAgICBAT3B0aW9uYWwoKSBwcml2YXRlIGZvcm1Hcm91cE1hbmFnZXJTZXJ2aWNlOiBRZEZvcm1Hcm91cE1hbmFnZXJTZXJ2aWNlLFxuICAgIEBPcHRpb25hbCgpIHByaXZhdGUgZGlhbG9nQ29tcG9uZW50OiBRZERpYWxvZ0NvbXBvbmVudCxcbiAgICBwcml2YXRlIGRpYWxvZzogUWREaWFsb2dTZXJ2aWNlLFxuICAgIHByaXZhdGUgY29udGV4dFNlcnZpY2U6IFFkQ29udGV4dFNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZXNvbHZlclRyaWdnZXJTZXJ2aWNlOiBRZFJlc29sdmVyVHJpZ2dlclNlcnZpY2UsXG4gICAgcHJpdmF0ZSBwYWdlU3RvcmVTZXJ2aWNlOiBRZFBhZ2VTdG9yZVNlcnZpY2U8VD5cbiAgKSB7XG4gICAgaWYgKHBhZ2VPYmplY3RSZXNvbHZlcikge1xuICAgICAgY29uc3Qgb3JpZ2luYWxVcGRhdGVNZXRhZGF0YSA9IHRoaXMucGFnZU9iamVjdFJlc29sdmVyLnVwZGF0ZU1ldGFkYXRhPy5iaW5kKHRoaXMucGFnZU9iamVjdFJlc29sdmVyKTtcbiAgICAgIHRoaXMucGFnZU9iamVjdFJlc29sdmVyLnVwZGF0ZU1ldGFkYXRhID0gKHByb3BzOiBQYXJ0aWFsPFQ+KTogdm9pZCA9PiB7XG4gICAgICAgIHRoaXMudXBkYXRlTWV0YWRhdGEocHJvcHMpO1xuICAgICAgICBpZiAob3JpZ2luYWxVcGRhdGVNZXRhZGF0YSkgb3JpZ2luYWxVcGRhdGVNZXRhZGF0YShwcm9wcyk7XG4gICAgICB9O1xuXG4gICAgICB0aGlzLnNldHVwUmVzb2x2ZXJUcmlnZ2VyKCk7XG4gICAgfVxuXG4gICAgdGhpcy5pbml0Q29udGV4dHMoKTtcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnBhZ2VPYmplY3RSZXNvbHZlcikgdGhpcy5zZXR1cFJlc29sdmVyVHJpZ2dlcigpO1xuXG4gICAgdGhpcy51cGRhdGVDdXN0b21BY3Rpb25zKCk7XG4gICAgdGhpcy5mb3JtR3JvdXBNYW5hZ2VyU2VydmljZS50YWtlRm9ybUdyb3Vwc1NuYXBzaG90KCk7XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgaWYgKGNoYW5nZXNbJ2NvbmZpZyddICYmICFjaGFuZ2VzWydjb25maWcnXS5maXJzdENoYW5nZSkgdGhpcy51cGRhdGVDdXN0b21BY3Rpb25zKCk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLnBhZ2VTdG9yZVNlcnZpY2UudG9nZ2xlVmlld29ubHkoZmFsc2UpO1xuXG4gICAgdGhpcy5fZGVzdHJveWVkJC5uZXh0KCk7XG4gICAgdGhpcy5fZGVzdHJveWVkJC5jb21wbGV0ZSgpO1xuICB9XG5cbiAgdXBkYXRlTWV0YWRhdGEobWV0YWRhdGE6IFBhcnRpYWw8VD4pOiB2b2lkIHtcbiAgICBjb25zdCB1cGRhdGVkTWV0YWRhdGEgPSB7IC4uLnRoaXMuX3BhZ2VPYmplY3REYXRhU3ViamVjdC52YWx1ZSwgLi4ubWV0YWRhdGEgfTtcbiAgICB0aGlzLl9wYWdlT2JqZWN0RGF0YVN1YmplY3QubmV4dCh1cGRhdGVkTWV0YWRhdGEpO1xuICB9XG5cbiAgaGFuZGxlQWN0aW9uKGZhY2V0OiBRZEZhY2V0T3B0aW9uU2luZ2xlU2VsZWN0IHwgUWRGYWNldE9wdGlvbk11bHRpU2VsZWN0KTogdm9pZCB7XG4gICAgZmFjZXQ/LmFjdGlvbj8uaGFuZGxlcigpO1xuICB9XG5cbiAgaGFzSGVhZGVyRmFjZXRzKFxuICAgIGNvbmZpZzogUWRQYWdlQ29uZmlnPFQ+XG4gICk6IGNvbmZpZyBpcyBRZFBhZ2VDb25maWdDcmVhdGU8VD4gfCBRZFBhZ2VDb25maWdJbnNwZWN0PFQ+IHwgUWRQYWdlQ29uZmlnQ3VzdG9tPFQ+IHtcbiAgICByZXR1cm4gKHRoaXMuY29uZmlnIGFzIHsgaGVhZGVyRmFjZXRzOiBRZFBhZ2VIZWFkZXJGYWNldENvbmZpZzxUPltdIH0pLmhlYWRlckZhY2V0cyAhPSBudWxsO1xuICB9XG5cbiAgZWRpdCgpOiB2b2lkIHtcbiAgICB0aGlzLmZvcm1Hcm91cE1hbmFnZXJTZXJ2aWNlLnRha2VGb3JtR3JvdXBzU25hcHNob3QoKTtcbiAgICB0aGlzLnBhZ2VTdG9yZVNlcnZpY2UudG9nZ2xlVmlld29ubHkoZmFsc2UpO1xuICAgIGlmICh0aGlzLmVkaXRCdXR0b24/LmhhbmRsZXIpIHRoaXMuZWRpdEJ1dHRvbi5oYW5kbGVyKCk7XG4gIH1cblxuICBjYW5jZWwoKTogdm9pZCB7XG4gICAgdGhpcy5mb3JtR3JvdXBNYW5hZ2VyU2VydmljZVxuICAgICAgLiRoYXNWYWx1ZXNDaGFuZ2VkKClcbiAgICAgIC5waXBlKHRha2UoMSkpXG4gICAgICAuc3Vic2NyaWJlKGhhc0NoYW5nZWQgPT4ge1xuICAgICAgICBpZiAoaGFzQ2hhbmdlZCkge1xuICAgICAgICAgIHRoaXMub3BlbkNhbmNlbERpYWxvZygpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuZm9ybUdyb3VwTWFuYWdlclNlcnZpY2UuY2FuY2VsUGVuZGluZ0FzeW5jVmFsaWRhdGlvbigpO1xuICAgICAgICAgIHRoaXMucGFnZVN0b3JlU2VydmljZS50b2dnbGVWaWV3b25seSh0cnVlKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gIH1cblxuICBzYXZlKCk6IHZvaWQge1xuICAgIGNvbnN0IGhhbmRsZVN1Y2Nlc3MgPSAoKTogdm9pZCA9PiB7XG4gICAgICB0aGlzLmZvcm1Hcm91cE1hbmFnZXJTZXJ2aWNlLmNhbmNlbFBlbmRpbmdBc3luY1ZhbGlkYXRpb24oKTtcbiAgICAgIHRoaXMucGFnZVN0b3JlU2VydmljZS50b2dnbGVWaWV3b25seSh0cnVlKTtcbiAgICAgIHRoaXMuZm9ybUdyb3VwTWFuYWdlclNlcnZpY2UudGFrZUZvcm1Hcm91cHNTbmFwc2hvdCgpO1xuICAgIH07XG5cbiAgICBjb25zdCByZXN1bHQgPSB0aGlzLnNhdmVCdXR0b24/LmhhbmRsZXI/Lih0aGlzLmZvcm1Hcm91cE1hbmFnZXJTZXJ2aWNlLmdldEFsbFZhbHVlcygpKTtcblxuICAgIGlzT2JzZXJ2YWJsZShyZXN1bHQpID8gcmVzdWx0LnBpcGUodGFrZSgxKSkuc3Vic2NyaWJlKChvazogYm9vbGVhbikgPT4gb2sgJiYgaGFuZGxlU3VjY2VzcygpKSA6IGhhbmRsZVN1Y2Nlc3MoKTtcbiAgfVxuXG4gIGNoYW5nZUNvbnRleHQoXG4gICAgY29udGV4dDogUWRQYWdlQ29udGV4dENvbmZpZyxcbiAgICBzZWxlY3Rpb246IFFkUGFnZVNlbGVjdGVkQ29udGV4dCB8IFFkUGFnZVNlbGVjdGVkQ29udGV4dFtdLFxuICAgIGV2ZW50OiBNb3VzZUV2ZW50XG4gICk6IHZvaWQge1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXG4gICAgaWYgKGNvbnRleHQudHlwZSA9PT0gJ2N1c3RvbScpIHtcbiAgICAgIGNvbnRleHQub3BlbigpO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgZGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3BlbihRZENvbnRleHRTZWxlY3REaWFsb2dDb21wb25lbnQsIHtcbiAgICAgIGRhdGE6IHsgY29uZmlnOiBjb250ZXh0LCBzZWxlY3Rpb24gfSxcbiAgICAgIGRpYWxvZ1NpemU6IFFkRGlhbG9nU2l6ZS5TbWFsbCxcbiAgICAgIHRpdGxlOiBjb250ZXh0LnRpdGxlXG4gICAgfSk7XG5cbiAgICBkaWFsb2dSZWYuY2xvc2VkLnN1YnNjcmliZSgoZGF0YTogeyBzZWxlY3RlZDogUWRQYWdlU2VsZWN0ZWRDb250ZXh0W10gfSkgPT4ge1xuICAgICAgaWYgKGRhdGEpIHRoaXMuY29udGV4dFNlcnZpY2Uuc2V0VmFsdWUoY29udGV4dC5pZCwgZGF0YS5zZWxlY3RlZCk7XG4gICAgfSk7XG4gIH1cblxuICBjbGVhckNvbnRleHQoY29udGV4dDogUWRQYWdlQ29udGV4dENvbmZpZyk6IHZvaWQge1xuICAgIHRoaXMuY29udGV4dFNlcnZpY2UuY2xlYXIoY29udGV4dC5pZCk7XG4gIH1cblxuICBwcml2YXRlIHNldHVwUmVzb2x2ZXJUcmlnZ2VyKCk6IHZvaWQge1xuICAgIHRoaXMucmVzb2x2ZXJUcmlnZ2VyU2VydmljZVxuICAgICAgLnNob3VsZFRyaWdnZXJSZXNvbHZlcih0aGlzLnBhZ2VPYmplY3RSZXNvbHZlci5jb25maWc/LnRyaWdnZXJPbiA/PyAncGF0aFBhcmFtc0NoYW5nZScpXG4gICAgICAucGlwZShcbiAgICAgICAgdGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3llZCQpLFxuICAgICAgICBmaWx0ZXIoc2hvdWxkVHJpZ2dlciA9PiBzaG91bGRUcmlnZ2VyKSxcbiAgICAgICAgdGFwKCgpID0+IHRoaXMuX2lzTG9hZGluZ1N1YmplY3QubmV4dCh0cnVlKSksXG4gICAgICAgIHN3aXRjaE1hcCgoKSA9PiB0aGlzLnBhZ2VPYmplY3RSZXNvbHZlci5yZXNvbHZlKCkpLFxuICAgICAgICB0YXAob2JqZWN0RGF0YSA9PiB0aGlzLl9wYWdlT2JqZWN0RGF0YVN1YmplY3QubmV4dChvYmplY3REYXRhKSksXG4gICAgICAgIHRhcCgoKSA9PiB0aGlzLl9pc0xvYWRpbmdTdWJqZWN0Lm5leHQoZmFsc2UpKSxcbiAgICAgICAgdGFwKCgpID0+IHRoaXMuZm9ybUdyb3VwTWFuYWdlclNlcnZpY2UudGFrZUZvcm1Hcm91cHNTbmFwc2hvdCgpKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBpbml0Q29udGV4dHMoKTogdm9pZCB7XG4gICAgdGhpcy5jb250ZXh0cyQgPSB0aGlzLmNvbnRleHRTZXJ2aWNlLmNvbnRleHRzJC5waXBlKFxuICAgICAgbWFwKGNvbnRleHRzID0+IGNvbnRleHRzLmZpbHRlcihjb250ZXh0ID0+IGNvbnRleHQuc2VsZWN0aW9uIHx8IHRoaXMuY29uZmlnLnBhZ2VUeXBlID09PSAnb3ZlcnZpZXcnKSksXG4gICAgICBtYXAoY29udGV4dHMgPT5cbiAgICAgICAgY29udGV4dHM/Lm1hcCgoeyBzZWxlY3Rpb24sIGNvbnRleHQgfSkgPT4gKHtcbiAgICAgICAgICBsYWJlbDogY29udGV4dC5sYWJlbC5pMThuLFxuICAgICAgICAgIHZhbHVlOiBBcnJheS5pc0FycmF5KHNlbGVjdGlvbj8udmFsdWUpXG4gICAgICAgICAgICA/IHNlbGVjdGlvbj8udmFsdWUuZmlsdGVyKGl0ZW0gPT4gaXRlbSAhPT0gbnVsbCAmJiBpdGVtICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICA6IHNlbGVjdGlvbj8udmFsdWUgIT09IG51bGwgJiYgc2VsZWN0aW9uPy52YWx1ZSAhPT0gdW5kZWZpbmVkXG4gICAgICAgICAgICA/IFtzZWxlY3Rpb24/LnZhbHVlXVxuICAgICAgICAgICAgOiAoW10gYXMgUWRQYWdlU2VsZWN0ZWRDb250ZXh0W10pLFxuICAgICAgICAgIGNvbnRleHQsXG4gICAgICAgICAgc2VsZWN0aW9uOiBzZWxlY3Rpb24/LnZhbHVlID8/IFtdXG4gICAgICAgIH0pKVxuICAgICAgKVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZUN1c3RvbUFjdGlvbnMoKTogdm9pZCB7XG4gICAgLy8gMS4gSGFuZGxlIG5vbi1pbnNwZWN0IHBhZ2VzIGVhcmx5XG4gICAgaWYgKHRoaXMuY29uZmlnLnBhZ2VUeXBlICE9PSAnaW5zcGVjdCcpIHtcbiAgICAgIGNvbnN0IGFjdGlvbnMgPSB0aGlzLmNvbmZpZy5wYWdlVHlwZUNvbmZpZz8uY3VzdG9tQWN0aW9ucyA/PyBbXTtcbiAgICAgIHRoaXMuX2N1c3RvbUFjdGlvbnNTdWJqZWN0Lm5leHQoeyBhY3Rpb25zIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIDIuIFNldHVwIEluc3BlY3Qtc3BlY2lmaWMgbG9naWNcbiAgICBjb25zdCBjb25maWcgPSB0aGlzLmNvbmZpZy5wYWdlVHlwZUNvbmZpZztcbiAgICBpZiAoY29uZmlnPy5vcGVyYXRpb25Nb2RlKSB7XG4gICAgICB0aGlzLnBhZ2VTdG9yZVNlcnZpY2UudG9nZ2xlVmlld29ubHkoY29uZmlnLm9wZXJhdGlvbk1vZGUgPT09ICd2aWV3Jyk7XG4gICAgfVxuXG4gICAgdGhpcy5zdWJzY3JpYmVUb1ZpZXdPbmx5TW9kZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBzdWJzY3JpYmVUb1ZpZXdPbmx5TW9kZSgpOiB2b2lkIHtcbiAgICB0aGlzLl9jdXN0b21BY3Rpb25zU3ViPy51bnN1YnNjcmliZSgpO1xuXG4gICAgdGhpcy5fY3VzdG9tQWN0aW9uc1N1YiA9IHRoaXMucGFnZVN0b3JlU2VydmljZS5pc1ZpZXdvbmx5JFxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3llZCQpKVxuICAgICAgLnN1YnNjcmliZShpc1ZpZXdvbmx5ID0+IHtcbiAgICAgICAgY29uc3QgbW9kZSA9IGlzVmlld29ubHkgPyAndmlldycgOiAnZWRpdCc7XG4gICAgICAgIGNvbnN0IGNvbmZpZyA9IHRoaXMuY29uZmlnLnBhZ2VUeXBlQ29uZmlnO1xuXG4gICAgICAgIGlmIChjb25maWcpIHtcbiAgICAgICAgICAoY29uZmlnIGFzIFFkUGFnZVR5cGVJbnNwZWN0Q29uZmlnKS5vcGVyYXRpb25Nb2RlID0gbW9kZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGFjdGlvbnMgPSBjb25maWc/LmN1c3RvbUFjdGlvbnMgPz8gW107XG4gICAgICAgIHRoaXMuX2N1c3RvbUFjdGlvbnNTdWJqZWN0Lm5leHQodGhpcy5nZXRDdXN0b21BY3Rpb25zQnlNb2RlKGFjdGlvbnMsIG1vZGUpKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRDdXN0b21BY3Rpb25zQnlNb2RlKFxuICAgIGN1c3RvbUFjdGlvbnM6IChRZE1lbnVCdXR0b25BY3Rpb25Db25maWcgJiB7IG9wZXJhdGlvbk1vZGU/OiBRZEluc3BlY3RPcGVyYXRpb25Nb2RlIH0pW10sXG4gICAgbW9kZTogUWRJbnNwZWN0T3BlcmF0aW9uTW9kZVxuICApOiBRZE1lbnVCdXR0b25Db25maWcge1xuICAgIGNvbnN0IGFjdGlvbnMgPSBjdXN0b21BY3Rpb25zXG4gICAgICAuZmlsdGVyKGFjdGlvbiA9PiAhYWN0aW9uLm9wZXJhdGlvbk1vZGUgfHwgYWN0aW9uLm9wZXJhdGlvbk1vZGUgPT09IG1vZGUpXG4gICAgICAubWFwKGFjdGlvbiA9PiB7XG4gICAgICAgIGNvbnN0IG1lbnVCdXR0b25BY3Rpb24gPSB7IC4uLmFjdGlvbiB9O1xuICAgICAgICBkZWxldGUgbWVudUJ1dHRvbkFjdGlvbi5vcGVyYXRpb25Nb2RlO1xuICAgICAgICByZXR1cm4gbWVudUJ1dHRvbkFjdGlvbjtcbiAgICAgIH0pO1xuXG4gICAgcmV0dXJuIHsgYWN0aW9ucyB9O1xuICB9XG5cbiAgcHJpdmF0ZSBvcGVuQ2FuY2VsRGlhbG9nKCk6IHZvaWQge1xuICAgIHRoaXMuZGlhbG9nXG4gICAgICAub3BlbihRZFBhZ2VDYW5jZWxDb25maXJtYXRpb25EaWFsb2dDb21wb25lbnQsIHtcbiAgICAgICAgdGl0bGU6IHsgaTE4bjogJ2kxOG4ucWQucGFnZS5jYW5jZWwuY29uZmlybWF0aW9uLmRpYWxvZy50aXRsZScgfSxcbiAgICAgICAgZGlhbG9nU2l6ZTogUWREaWFsb2dTaXplLlNtYWxsLFxuICAgICAgICBkYXRhOiB0aGlzLmNvbmZpZy5wYWdlVHlwZUNvbmZpZ1xuICAgICAgfSlcbiAgICAgIC5jbG9zZWQucGlwZSh0YWtlVW50aWwodGhpcy5fZGVzdHJveWVkJCkpXG4gICAgICAuc3Vic2NyaWJlKGNvbmZpcm0gPT4ge1xuICAgICAgICBpZiAoY29uZmlybSkge1xuICAgICAgICAgIHRoaXMuZm9ybUdyb3VwTWFuYWdlclNlcnZpY2UucmVzdG9yZUZvcm1Hcm91cHNGcm9tU25hcHNob3QoKTtcbiAgICAgICAgICB0aGlzLnBhZ2VTdG9yZVNlcnZpY2UudG9nZ2xlVmlld29ubHkodHJ1ZSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwibG9hZGluZy1vdmVybGF5XCIgKm5nSWY9XCJpc0xvYWRpbmckIHwgYXN5bmNcIj48cWQtc3Bpbm5lcj48L3FkLXNwaW5uZXI+PC9kaXY+XG5cbjxkaXYgY2xhc3M9XCJvYmplY3QtaGVhZGVyLXRvcFwiPlxuICA8aGVhZGVyIGNsYXNzPVwib2JqZWN0LWhlYWRlci10aXRsZVwiPnt7IGNvbmZpZy50aXRsZS5pMThuIHwgdHJhbnNsYXRlIH19PC9oZWFkZXI+XG4gIDxkaXYgY2xhc3M9XCJvYmplY3QtaGVhZGVyLXRvb2xiYXJcIj5cbiAgICA8YnV0dG9uIGNsYXNzPVwiYnV0dG9uLWljb25cIiBkYXRhLXRlc3QtaWQ9XCJhcmNoaXZlLWJ1dHRvblwiPlxuICAgICAgPHFkLWljb25cbiAgICAgICAgKm5nSWY9XCJzaG93QXJjaGl2ZSQgfCBhc3luY1wiXG4gICAgICAgIChjbGljayk9XCJhcmNoaXZlQnV0dG9uPy5oYW5kbGVyKClcIlxuICAgICAgICBjbGFzcz1cImhlYWRlci1hY3Rpb24taWNvblwiXG4gICAgICAgIFtpY29uXT1cIidyZXN1bHROZXcnXCJcbiAgICAgID48L3FkLWljb24+XG4gICAgPC9idXR0b24+XG5cbiAgICA8YnV0dG9uIGNsYXNzPVwiYnV0dG9uLWljb25cIiBkYXRhLXRlc3QtaWQ9XCJkZWxldGUtYnV0dG9uXCI+XG4gICAgICA8cWQtaWNvblxuICAgICAgICBjbGFzcz1cImhlYWRlci1hY3Rpb24taWNvblwiXG4gICAgICAgICpuZ0lmPVwic2hvd0RlbGV0ZSQgfCBhc3luY1wiXG4gICAgICAgIChjbGljayk9XCJkZWxldGVCdXR0b24/LmhhbmRsZXIoKVwiXG4gICAgICAgIFtpY29uXT1cIid0cmFzaCdcIlxuICAgICAgPjwvcWQtaWNvbj5cbiAgICA8L2J1dHRvbj5cblxuICAgIDxidXR0b24gKm5nSWY9XCJzaG93RWRpdCQgfCBhc3luY1wiIHFkQnV0dG9uIChjbGljayk9XCJlZGl0KClcIiBkYXRhLXRlc3QtaWQ9XCJlZGl0LWJ1dHRvblwiPlxuICAgICAge3sgZWRpdEJ1dHRvbj8ubGFiZWw/LmkxOG4gfHwgXCJpMThuLnFkLnBhZ2UuaGVhZGVyLmVkaXRcIiB8IHRyYW5zbGF0ZSB9fVxuICAgIDwvYnV0dG9uPlxuXG4gICAgPGJ1dHRvbiAqbmdJZj1cInNob3dDYW5jZWwkIHwgYXN5bmNcIiBxZEJ1dHRvbiBxZEJ1dHRvbkdob3N0IChjbGljayk9XCJjYW5jZWwoKVwiIGRhdGEtdGVzdC1pZD1cImNhbmNlbC1idXR0b25cIj5cbiAgICAgIHt7IGNhbmNlbEJ1dHRvbi5sYWJlbD8uaTE4biB8fCBcImkxOG4ucWQucGFnZS5oZWFkZXIuY2FuY2VsXCIgfCB0cmFuc2xhdGUgfX1cbiAgICA8L2J1dHRvbj5cblxuICAgIDxidXR0b25cbiAgICAgICpuZ0lmPVwic2hvd1NhdmUkIHwgYXN5bmNcIlxuICAgICAgcWRCdXR0b25cbiAgICAgIChjbGljayk9XCJzYXZlKClcIlxuICAgICAgZGF0YS10ZXN0LWlkPVwic2F2ZS1idXR0b25cIlxuICAgICAgW2Rpc2FibGVkXT1cIigkY2FuU2F2ZSB8IGFzeW5jKSA9PT0gZmFsc2VcIlxuICAgID5cbiAgICAgIHt7IHNhdmVCdXR0b24ubGFiZWw/LmkxOG4gfHwgXCJpMThuLnFkLnBhZ2UuaGVhZGVyLnNhdmVcIiB8IHRyYW5zbGF0ZSB9fVxuICAgIDwvYnV0dG9uPlxuXG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImN1c3RvbUFjdGlvbnMkIHwgYXN5bmMgYXMgY3VzdG9tQWN0aW9uc1wiPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFhZGFwdGl2ZU1vZGU7IGVsc2UgYWRhcHRpdmVcIj5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgIFtxZE1lbnVCdXR0b25dPVwiY3VzdG9tQWN0aW9uc1wiXG4gICAgICAgICAgW2F1dG9TaXplXT1cImZhbHNlXCJcbiAgICAgICAgICBbZGF0YS10ZXN0LWlkXT1cIidwYWdlLSdcIlxuICAgICAgICAgICpuZ0lmPVwiY3VzdG9tQWN0aW9ucy5hY3Rpb25zLmxlbmd0aCA+IDE7IGVsc2Ugc2luZ2xlQnV0dG9uXCJcbiAgICAgICAgICBkYXRhLXRlc3QtaWQ9XCJjdXN0b20tYnV0dG9uXCJcbiAgICAgICAgPlxuICAgICAgICAgIHt7IGNvbmZpZz8uY3VzdG9tQWN0aW9uc0xhYmVsPy5pMThuIHx8IFwiaTE4bi5xZC5wYWdlLmhlYWRlci5hY3Rpb25zXCIgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgPG5nLXRlbXBsYXRlICNzaW5nbGVCdXR0b24+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIihjdXN0b21BY3Rpb25zJCB8IGFzeW5jKS5hY3Rpb25zWzBdIGFzIHNpbmdsZUFjdGlvblwiPlxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICBxZEJ1dHRvblxuICAgICAgICAgICAgICAqbmdJZj1cInNpbmdsZUFjdGlvbi5oYW5kbGVyICYmICFzaW5nbGVBY3Rpb24uaXNIaWRkZW5cIlxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwic2luZ2xlQWN0aW9uLmlzRGlzYWJsZWRcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwic2luZ2xlQWN0aW9uLmhhbmRsZXIoKVwiXG4gICAgICAgICAgICAgIGRhdGEtdGVzdC1pZD1cImN1c3RvbS1idXR0b25cIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7eyBzaW5nbGVBY3Rpb24ubGFiZWw/LmkxOG4gfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgIDxuZy10ZW1wbGF0ZSAjYWRhcHRpdmU+XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICAqbmdJZj1cIihjdXN0b21BY3Rpb25zJCB8IGFzeW5jKT8uYWN0aW9ucy5sZW5ndGggPj0gMVwiXG4gICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgY2xhc3M9XCJhZGFwdGl2ZS1tZW51LWJ1dHRvblwiXG4gICAgICAgICAgW3FkUG9wb3Zlck9uQ2xpY2tdPVwibWVudVwiXG4gICAgICAgICAgW3FkUG9wb3ZlckNsb3NlU3RyYXRlZ3ldPVwiJ29uRXZlcnlDbGljaydcIlxuICAgICAgICAgIFtxZFBvcG92ZXJTdG9wUHJvcGFnYXRpb25dPVwidHJ1ZVwiXG4gICAgICAgICAgW3FkUG9wb3Zlck1pbldpZHRoXT1cIjE2MFwiXG4gICAgICAgID5cbiAgICAgICAgICA8cWQtaWNvbiBpY29uPVwib3ZlcmZsb3dNZW51VmVydGljYWxcIj48L3FkLWljb24+XG4gICAgICAgIDwvYnV0dG9uPlxuXG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjbWVudT5cbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAqbmdGb3I9XCJsZXQgYWN0aW9uIG9mIGN1c3RvbUFjdGlvbnMuYWN0aW9uczsgbGV0IGkgPSBpbmRleFwiXG4gICAgICAgICAgICBjbGFzcz1cImFkYXB0aXZlLW1lbnUtZW50cnlcIlxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiYWN0aW9uLmlzRGlzYWJsZWRcIlxuICAgICAgICAgICAgKGNsaWNrKT1cImFjdGlvbi5oYW5kbGVyKClcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIHt7IGFjdGlvbi5sYWJlbC5pMThuIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgIDwvbmctY29udGFpbmVyPlxuICA8L2Rpdj5cbjwvZGl2PlxuXG48ZGl2IGNsYXNzPVwib2JqZWN0LWhlYWRlci1mYWNldHNcIiBbbmdDbGFzc109XCJ7IGFtb25nVGhlbXNlbHZlczogYWRhcHRpdmVNb2RlICYmICFmYWNldHNDb2xsYXBzZWQgfVwiPlxuICA8bmctY29udGFpbmVyICpuZ0lmPVwicGFnZU9iamVjdERhdGEkIHwgYXN5bmMgYXMgZGF0YVwiPlxuICAgIDxkaXZcbiAgICAgIGNsYXNzPVwib2JqZWN0LWhlYWRlci1mYWNldFwiXG4gICAgICAqbmdGb3I9XCJsZXQgZmFjZXQgb2YgaGVhZGVyRmFjZXRzIHwgc2xpY2UgOiAwIDogKGFkYXB0aXZlTW9kZSAmJiBmYWNldHNDb2xsYXBzZWQgPyAyIDogaGVhZGVyRmFjZXRzPy5sZW5ndGggPz8gMClcIlxuICAgICAgW2F0dHIuZGF0YS10ZXN0LWlkXT1cInRlc3RJZCArICctZmFjZXQtJyArIGZhY2V0Lm5hbWVcIlxuICAgID5cbiAgICAgIDxkaXYgY2xhc3M9XCJmYWNldC1sYWJlbFwiPnt7IGZhY2V0LmxhYmVsLmkxOG4gfCB0cmFuc2xhdGUgfX08L2Rpdj5cbiAgICAgIDxxZC1keW5hbWljLWZhY2V0IGNsYXNzPVwiZHluYW1pYy1mYWNldFwiIFtmYWNldF09XCJmYWNldFwiIFtkYXRhXT1cImRhdGFcIj48L3FkLWR5bmFtaWMtZmFjZXQ+XG4gICAgPC9kaXY+XG4gIDwvbmctY29udGFpbmVyPlxuXG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCIhY29uZmlnLmhpZGVDb250ZXh0cyAmJiBjb250ZXh0cyQgfCBhc3luYyBhcyBjb250ZXh0c1wiPlxuICAgIDxkaXZcbiAgICAgIGNsYXNzPVwib2JqZWN0LWhlYWRlci1mYWNldFwiXG4gICAgICAqbmdGb3I9XCJcbiAgICAgICAgbGV0IGNvbnRleHQgb2YgY29udGV4dHNcbiAgICAgICAgICB8IHNsaWNlIDogMCA6IChhZGFwdGl2ZU1vZGUgJiYgZmFjZXRzQ29sbGFwc2VkID8gMiAtIChoZWFkZXJGYWNldHM/Lmxlbmd0aCA/PyAwKSA6IGNvbnRleHRzLmxlbmd0aCk7XG4gICAgICAgIGxldCBpbmRleCA9IGluZGV4O1xuICAgICAgICBsZXQgZmlyc3QgPSBmaXJzdFxuICAgICAgXCJcbiAgICAgIFtuZ0NsYXNzXT1cInsgaGFzRGl2aWRlcjogaGVhZGVyRmFjZXRzICYmIGZpcnN0IH1cIlxuICAgID5cbiAgICAgIDxkaXYgY2xhc3M9XCJmYWNldC1sYWJlbFwiPnt7IGNvbnRleHQubGFiZWwgfCB0cmFuc2xhdGUgfX08L2Rpdj5cblxuICAgICAgPHNwYW4gKm5nSWY9XCJjb250ZXh0LnZhbHVlLmxlbmd0aCA9PT0gMFwiIGNsYXNzPVwibm8tc2VsZWN0ZWQtY29udGV4dFwiPnt7XG4gICAgICAgIFwiaTE4bi5xZC5wYWdlLmNvbnRleHQubm9TZWxlY3Rpb25QbGFjZWhvbGRlclwiIHwgdHJhbnNsYXRlXG4gICAgICB9fTwvc3Bhbj5cblxuICAgICAgPHNwYW4gKm5nSWY9XCJjb250ZXh0LnZhbHVlLmxlbmd0aCAhPT0gMFwiPlxuICAgICAgICA8cWQtY2hpcCBzdGF0ZT1cIm5vbmVcIiBbY2xvc2VdPVwiaXNDb250ZXh0U2VsZWN0YWJsZVwiIChjbG9zZUNsaWNrRW1pdHRlcik9XCJjbGVhckNvbnRleHQoY29udGV4dC5jb250ZXh0KVwiPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHZhbCBvZiBjb250ZXh0LnZhbHVlOyBsZXQgbGFzdCA9IGxhc3RcIj5cbiAgICAgICAgICAgIHt7IHZhbC5sYWJlbC5pMThuIHwgdHJhbnNsYXRlIH19PHNwYW4gKm5nSWY9XCIhbGFzdFwiPiwgPC9zcGFuPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L3FkLWNoaXA+XG4gICAgICA8L3NwYW4+XG5cbiAgICAgIDxzcGFuICpuZ0lmPVwiaXNDb250ZXh0U2VsZWN0YWJsZSAmJiAoIWZhY2V0c0NvbGxhcHNlZCB8fCAhYWRhcHRpdmVNb2RlKVwiIGNsYXNzPVwic2VsZWN0LWJ1dHRvblwiPlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgcWRCdXR0b25cbiAgICAgICAgICBxZEJ1dHRvbkxpbmtcbiAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAoY2xpY2spPVwiY2hhbmdlQ29udGV4dChjb250ZXh0LmNvbnRleHQsIGNvbnRleHQuc2VsZWN0aW9uLCAkZXZlbnQpXCJcbiAgICAgICAgICBbZGF0YS10ZXN0LWlkXT1cIidvYmplY3QtaGVhZGVyLXNlbGVjdC1jb250ZXh0LScgKyBjb250ZXh0LmNvbnRleHQuaWRcIlxuICAgICAgICA+XG4gICAgICAgICAge3tcbiAgICAgICAgICAgIGNvbnRleHQudmFsdWUubGVuZ3RoICE9PSAwXG4gICAgICAgICAgICAgID8gKFwiaTE4bi5xZC5wYWdlLmNvbnRleHQuYnV0dG9uLmNoYW5nZVwiIHwgdHJhbnNsYXRlKVxuICAgICAgICAgICAgICA6IChcImkxOG4ucWQucGFnZS5jb250ZXh0LmJ1dHRvbi5zZWxlY3RcIiB8IHRyYW5zbGF0ZSlcbiAgICAgICAgICB9fVxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvc3Bhbj5cbiAgICA8L2Rpdj5cbiAgPC9uZy1jb250YWluZXI+XG5cbiAgPHNwYW4gY2xhc3M9XCJmYWNldHMtdG9nZ2xlclwiICpuZ0lmPVwiYWRhcHRpdmVNb2RlICYmIGhlYWRlckZhY2V0cy5sZW5ndGggKyAoY29udGV4dHMkIHwgYXN5bmMpLmxlbmd0aCA+IDJcIj5cbiAgICA8c3BhbiAqbmdJZj1cImZhY2V0c0NvbGxhcHNlZFwiPit7eyBoZWFkZXJGYWNldHMubGVuZ3RoICsgKGNvbnRleHRzJCB8IGFzeW5jKS5sZW5ndGggLSAyIH19PC9zcGFuPlxuICAgIDxidXR0b24gcWRJY29uQnV0dG9uPlxuICAgICAgPHFkLWljb24gW2ljb25dPVwiZmFjZXRzQ29sbGFwc2VkID8gJ2N0cmxEb3duJyA6ICdjdHJsVG9wJ1wiPjwvcWQtaWNvbj5cbiAgICA8L2J1dHRvbj5cbiAgPC9zcGFuPlxuPC9kaXY+XG4iXX0=
@@ -16,7 +16,13 @@ export class QdPageStoreService {
16
16
  }
17
17
  initPageState(config) {
18
18
  this.config = config;
19
- this.config?.pageType === 'inspect' ? this.toggleViewonly(true) : this.toggleViewonly(false);
19
+ if (this.config?.pageType === 'inspect') {
20
+ const operationMode = this.config.pageTypeConfig?.operationMode;
21
+ this.toggleViewonly(operationMode !== 'edit');
22
+ }
23
+ else {
24
+ this.toggleViewonly(false);
25
+ }
20
26
  }
21
27
  getConfig() {
22
28
  return this.config;
@@ -30,4 +36,4 @@ export class QdPageStoreService {
30
36
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: QdPageStoreService, decorators: [{
31
37
  type: Injectable
32
38
  }], ctorParameters: () => [{ type: i1.QdEventBrokerService }] });
33
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFnZS1zdG9yZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9xZC11aS9zcmMvbGliL3BhZ2Uvc2hhcmVkL3NlcnZpY2VzL3BhZ2Utc3RvcmUuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRzNDLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNyQyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQzs7O0FBT25GLE1BQU0sT0FBTyxrQkFBa0I7SUFTVDtJQVJaLE1BQU0sQ0FBOEI7SUFFNUMsSUFBSSxXQUFXO1FBQ2IsT0FBTyxJQUFJLENBQUMsa0JBQWtCO2FBQzNCLE9BQU8sQ0FBeUIsd0JBQXdCLENBQUM7YUFDekQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztJQUNsRCxDQUFDO0lBRUQsWUFBb0Isa0JBQXdDO1FBQXhDLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBc0I7SUFBRyxDQUFDO0lBRWhFLGFBQWEsQ0FBQyxNQUF1QjtRQUNuQyxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztRQUVyQixJQUFJLENBQUMsTUFBTSxFQUFFLFFBQVEsS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDL0YsQ0FBQztJQUVELFNBQVM7UUFDUCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUM7SUFDckIsQ0FBQztJQUVELGNBQWMsQ0FBQyxVQUFtQjtRQUNoQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsT0FBTyxDQUF5Qix3QkFBd0IsRUFBRSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsQ0FBQyxDQUFDO0lBQ2hILENBQUM7dUdBdkJVLGtCQUFrQjsyR0FBbEIsa0JBQWtCOzsyRkFBbEIsa0JBQWtCO2tCQUQ5QixVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgUWRQYWdlQ29uZmlnIH0gZnJvbSAnLi4vLi4vbW9kZWwvcGFnZS1jb25maWcuaW50ZXJmYWNlJztcbmltcG9ydCB7IG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IFFkRXZlbnRCcm9rZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vY29yZS9zZXJ2aWNlcy9ldmVudC1icm9rZXIuc2VydmljZSc7XG5cbmludGVyZmFjZSBRZE9wZXJhdGlvbk1vZGVNZXNzYWdlIHtcbiAgaXNWaWV3b25seTogYm9vbGVhbjtcbn1cblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIFFkUGFnZVN0b3JlU2VydmljZTxUIGV4dGVuZHMgb2JqZWN0PiB7XG4gIHByaXZhdGUgY29uZmlnOiBRZFBhZ2VDb25maWc8VD4gfCB1bmRlZmluZWQ7XG5cbiAgZ2V0IGlzVmlld29ubHkkKCk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLmV2ZW50QnJva2VyU2VydmljZVxuICAgICAgLmNvbnN1bWU8UWRPcGVyYXRpb25Nb2RlTWVzc2FnZT4oJ29wZXJhdGlvbl9tb2RlX2NoYW5nZWQnKVxuICAgICAgLnBpcGUobWFwKHRvcGljID0+IHRvcGljLnBheWxvYWQuaXNWaWV3b25seSkpO1xuICB9XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBldmVudEJyb2tlclNlcnZpY2U6IFFkRXZlbnRCcm9rZXJTZXJ2aWNlKSB7fVxuXG4gIGluaXRQYWdlU3RhdGUoY29uZmlnOiBRZFBhZ2VDb25maWc8VD4pOiB2b2lkIHtcbiAgICB0aGlzLmNvbmZpZyA9IGNvbmZpZztcblxuICAgIHRoaXMuY29uZmlnPy5wYWdlVHlwZSA9PT0gJ2luc3BlY3QnID8gdGhpcy50b2dnbGVWaWV3b25seSh0cnVlKSA6IHRoaXMudG9nZ2xlVmlld29ubHkoZmFsc2UpO1xuICB9XG5cbiAgZ2V0Q29uZmlnKCk6IFFkUGFnZUNvbmZpZzxUPiB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuY29uZmlnO1xuICB9XG5cbiAgdG9nZ2xlVmlld29ubHkoaXNWaWV3b25seTogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuZXZlbnRCcm9rZXJTZXJ2aWNlLnByb2R1Y2U8UWRPcGVyYXRpb25Nb2RlTWVzc2FnZT4oJ29wZXJhdGlvbl9tb2RlX2NoYW5nZWQnLCB7IGlzVmlld29ubHk6IGlzVmlld29ubHkgfSk7XG4gIH1cbn1cbiJdfQ==
39
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFnZS1zdG9yZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9xZC11aS9zcmMvbGliL3BhZ2Uvc2hhcmVkL3NlcnZpY2VzL3BhZ2Utc3RvcmUuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRzNDLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNyQyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQzs7O0FBT25GLE1BQU0sT0FBTyxrQkFBa0I7SUFTVDtJQVJaLE1BQU0sQ0FBOEI7SUFFNUMsSUFBSSxXQUFXO1FBQ2IsT0FBTyxJQUFJLENBQUMsa0JBQWtCO2FBQzNCLE9BQU8sQ0FBeUIsd0JBQXdCLENBQUM7YUFDekQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztJQUNsRCxDQUFDO0lBRUQsWUFBb0Isa0JBQXdDO1FBQXhDLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBc0I7SUFBRyxDQUFDO0lBRWhFLGFBQWEsQ0FBQyxNQUF1QjtRQUNuQyxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztRQUVyQixJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsUUFBUSxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQ3hDLE1BQU0sYUFBYSxHQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsY0FBMEMsRUFBRSxhQUFhLENBQUM7WUFDN0YsSUFBSSxDQUFDLGNBQWMsQ0FBQyxhQUFhLEtBQUssTUFBTSxDQUFDLENBQUM7UUFDaEQsQ0FBQzthQUFNLENBQUM7WUFDTixJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzdCLENBQUM7SUFDSCxDQUFDO0lBRUQsU0FBUztRQUNQLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQztJQUNyQixDQUFDO0lBRUQsY0FBYyxDQUFDLFVBQW1CO1FBQ2hDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxPQUFPLENBQXlCLHdCQUF3QixFQUFFLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxDQUFDLENBQUM7SUFDaEgsQ0FBQzt1R0E1QlUsa0JBQWtCOzJHQUFsQixrQkFBa0I7OzJGQUFsQixrQkFBa0I7a0JBRDlCLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBRZFBhZ2VDb25maWcsIFFkUGFnZVR5cGVJbnNwZWN0Q29uZmlnIH0gZnJvbSAnLi4vLi4vbW9kZWwvcGFnZS1jb25maWcuaW50ZXJmYWNlJztcbmltcG9ydCB7IG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IFFkRXZlbnRCcm9rZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vY29yZS9zZXJ2aWNlcy9ldmVudC1icm9rZXIuc2VydmljZSc7XG5cbmludGVyZmFjZSBRZE9wZXJhdGlvbk1vZGVNZXNzYWdlIHtcbiAgaXNWaWV3b25seTogYm9vbGVhbjtcbn1cblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIFFkUGFnZVN0b3JlU2VydmljZTxUIGV4dGVuZHMgb2JqZWN0PiB7XG4gIHByaXZhdGUgY29uZmlnOiBRZFBhZ2VDb25maWc8VD4gfCB1bmRlZmluZWQ7XG5cbiAgZ2V0IGlzVmlld29ubHkkKCk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLmV2ZW50QnJva2VyU2VydmljZVxuICAgICAgLmNvbnN1bWU8UWRPcGVyYXRpb25Nb2RlTWVzc2FnZT4oJ29wZXJhdGlvbl9tb2RlX2NoYW5nZWQnKVxuICAgICAgLnBpcGUobWFwKHRvcGljID0+IHRvcGljLnBheWxvYWQuaXNWaWV3b25seSkpO1xuICB9XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBldmVudEJyb2tlclNlcnZpY2U6IFFkRXZlbnRCcm9rZXJTZXJ2aWNlKSB7fVxuXG4gIGluaXRQYWdlU3RhdGUoY29uZmlnOiBRZFBhZ2VDb25maWc8VD4pOiB2b2lkIHtcbiAgICB0aGlzLmNvbmZpZyA9IGNvbmZpZztcblxuICAgIGlmICh0aGlzLmNvbmZpZz8ucGFnZVR5cGUgPT09ICdpbnNwZWN0Jykge1xuICAgICAgY29uc3Qgb3BlcmF0aW9uTW9kZSA9ICh0aGlzLmNvbmZpZy5wYWdlVHlwZUNvbmZpZyBhcyBRZFBhZ2VUeXBlSW5zcGVjdENvbmZpZyk/Lm9wZXJhdGlvbk1vZGU7XG4gICAgICB0aGlzLnRvZ2dsZVZpZXdvbmx5KG9wZXJhdGlvbk1vZGUgIT09ICdlZGl0Jyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMudG9nZ2xlVmlld29ubHkoZmFsc2UpO1xuICAgIH1cbiAgfVxuXG4gIGdldENvbmZpZygpOiBRZFBhZ2VDb25maWc8VD4gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZztcbiAgfVxuXG4gIHRvZ2dsZVZpZXdvbmx5KGlzVmlld29ubHk6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLmV2ZW50QnJva2VyU2VydmljZS5wcm9kdWNlPFFkT3BlcmF0aW9uTW9kZU1lc3NhZ2U+KCdvcGVyYXRpb25fbW9kZV9jaGFuZ2VkJywgeyBpc1ZpZXdvbmx5OiBpc1ZpZXdvbmx5IH0pO1xuICB9XG59XG4iXX0=
@@ -2,7 +2,7 @@ import { ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, In
2
2
  import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
3
3
  import { ControlContainer, FormBuilder, FormGroup } from '@angular/forms';
4
4
  import { combineLatest, filter, of, Subject, takeUntil } from 'rxjs';
5
- import { distinctUntilChanged, map, startWith, tap } from 'rxjs/operators';
5
+ import { map, startWith, tap } from 'rxjs/operators';
6
6
  import { QdContainerActionService } from '../container/services/container-action.service';
7
7
  import { COMPONENT_MAP } from '../core/data-facets/data-facets.model';
8
8
  import { QdFocusableDirective } from '../core/focusable/focusable.directive';
@@ -345,9 +345,7 @@ export class QdQuickEditComponent {
345
345
  initManualChangeDetectionForControlReset() {
346
346
  if (!this.isFormControl)
347
347
  return;
348
- this.controlContainer.control.valueChanges
349
- .pipe(startWith(this.controlContainer.control.value.length), map(() => this.controlContainer.control.value.length), distinctUntilChanged(), tap(() => this.changeDetectorRef.detectChanges()))
350
- .subscribe();
348
+ this.controlContainer.control.valueChanges.pipe(tap(() => this.changeDetectorRef.detectChanges())).subscribe();
351
349
  }
352
350
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: QdQuickEditComponent, deps: [{ token: i1.FormBuilder }, { token: i2.QdPageFooterService, optional: true }, { token: i3.QdPageStoreService, optional: true }, { token: i4.QdSectionToolbarActionService, optional: true }, { token: i5.QdContainerActionService, optional: true }, { token: i6.QdEventBrokerService, optional: true }, { token: i0.ChangeDetectorRef }, { token: i1.ControlContainer, optional: true, self: true }], target: i0.ɵɵFactoryTarget.Component });
353
351
  static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.9", type: QdQuickEditComponent, selector: "qd-quick-edit", inputs: { config: "config", data: "data", testId: ["data-test-id", "testId"] }, outputs: { formGroupChange: "formGroupChange", addNewClicked: "addNewClicked" }, viewQueries: [{ propertyName: "customForDirective", first: true, predicate: QdCustomForDirective, descendants: true }, { propertyName: "focusables", predicate: QdFocusableDirective, descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"editable-actions\" *ngIf=\"showStandaloneCreate\">\n <button\n qdButton\n qdButtonGhost\n icon=\"plus\"\n (click)=\"createRow()\"\n [data-test-id]=\"testId + '-button-add-new'\"\n class=\"create-button-standalone\"\n >\n {{ config.standaloneCreateLabel?.i18n ?? \"i18n.qd.quick.edit.createButtonLabel\" | translate }}\n </button>\n</div>\n\n<div class=\"table\" [formGroup]=\"control\">\n <div class=\"table-header\" *ngIf=\"!config.canAdd || templateData.length > 0 || config.emptyStateView\">\n <div class=\"table-row\">\n <div class=\"table-cell\" *ngFor=\"let header of visibleColumns\">\n {{ header?.i18n | translate }}\n <qd-icon\n *ngIf=\"hasTooltip(header?.tooltip)\"\n icon=\"circleInfo\"\n class=\"additional-info\"\n qdTooltipOnClick\n [qdTooltipContent]=\"header?.tooltip?.content\"\n ></qd-icon>\n </div>\n <div class=\"table-cell actions-column\" *ngIf=\"config?.secondaryActions?.length > 0\">\n <button class=\"menu-button\">\n <qd-icon icon=\"overflowMenuHorizontal\"></qd-icon>\n </button>\n </div>\n </div>\n </div>\n <div class=\"table-body\">\n <div\n class=\"table-row\"\n *qdCustomFor=\"let row of templateData; let rowIndex = index; toggler: togglerDrawing\"\n [formGroupName]=\"rowIndex\"\n >\n <ng-container *ngFor=\"let column of visibleColumns\">\n <div class=\"table-cell\">\n <qd-dropdown\n [config]=\"{\n filter: column.filter,\n options: column.options,\n placeholder: column.placeholder,\n placeholderPrefix: column.placeholderPrefix,\n viewonly: (viewonly$ | async) === true || !column.isEditable(row, column.name)\n }\"\n [data-test-id]=\"column.name + rowIndex\"\n *ngIf=\"column.type === 'enum'; else otherTypes\"\n [dense]=\"true\"\n [formControl]=\"$any(control.controls[rowIndex])?.controls[column.name]\"\n qdFocusable\n class=\"dropdown\"\n >\n </qd-dropdown>\n\n <ng-template #otherTypes>\n <qd-input\n [data-test-id]=\"column.name + rowIndex\"\n [formControlName]=\"column.name\"\n *ngIf=\"column.type !== 'enum' && $any(control.controls[rowIndex])?.controls[column.name]\"\n [config]=\"{\n inputType: column.type === 'integer' ? 'number' : 'text',\n viewonly: (viewonly$ | async) === true || !column.isEditable(row, column.name)\n }\"\n qdFocusable\n ></qd-input>\n </ng-template>\n </div>\n </ng-container>\n <td\n *ngIf=\"config.secondaryActions?.length > 0 || canAdd\"\n class=\"table-cell actions\"\n [attr.data-test-id]=\"testId + '-cell-inline-actions'\"\n >\n <button\n type=\"button\"\n [qdPopoverOnClick]=\"menu\"\n [qdPopoverCloseStrategy]=\"'onEveryClick'\"\n [qdPopoverStopPropagation]=\"true\"\n class=\"menu-button\"\n data-test=\"secondary-actions-toggler\"\n >\n <qd-icon icon=\"overflowMenuHorizontal\"></qd-icon>\n </button>\n\n <ng-template #menu>\n <button\n *ngFor=\"let secondaryAction of actions$ | async\"\n class=\"secondary-actions\"\n [ngClass]=\"{ disabled: secondaryAction.isDisabled }\"\n (click)=\"handleSecondaryAction(secondaryAction, rowIndex)\"\n >\n {{ secondaryAction.label.i18n | translate }}\n </button>\n <button\n *ngIf=\"canAdd && (viewonly$ | async) === false\"\n class=\"secondary-actions\"\n (click)=\"removeRow(rowIndex)\"\n >\n {{ \"i18n.qd.quick.edit.removeButtonLabel\" | translate }}\n </button>\n </ng-template>\n </td>\n </div>\n </div>\n <div class=\"empty-body\" *ngIf=\"config.emptyStateView && !config.emptyStateView.disabled && templateData.length === 0\">\n <p>{{ config.emptyStateView.i18n | translate }}</p>\n </div>\n</div>\n", styles: [".table{display:flex;width:100%;flex-direction:column;margin:1.25rem auto;background-color:#fff;font-size:.875rem}.table ::ng-deep .qd-input-input{margin-bottom:0!important}.table-header .table-row{padding-top:.125rem;padding-bottom:.125rem;background-color:#e5e5e5;font-weight:700}.table-header .table-row .actions-column{flex:0;border-right:none;visibility:hidden}.table-header,.table-body{display:flex;flex-direction:column}.table-row{display:flex;flex-direction:row;padding:.25rem 1rem;border-bottom:.0625rem solid rgb(213,213,213);gap:1rem}.table-row ::ng-deep qd-form-label{display:none!important}.table-row ::ng-deep qd-form-hint .qd-form-hint{display:none}.table-row ::ng-deep qd-input{margin-bottom:0!important}.table-cell{display:flex;height:37px;flex:1;align-items:center;text-align:left}.table-cell:has(.qd-input-error),.table-cell:has(.qd-dropdown-error){height:auto;align-items:flex-start}.table-cell.actions{flex:0}.table-row:last-child{border-bottom:none}.table-cell:last-child{border-right:none}.editable-actions{display:flex;justify-content:flex-end;margin-right:.625rem;gap:.625rem}.menu-button{display:flex;padding:0 .625rem 0 .375rem;background:unset;color:#454545;font-size:2rem;vertical-align:middle}.menu-button:hover,.menu-button:focus{color:#000;outline:0!important}.secondary-actions{display:block;width:100%;min-height:2rem;padding:0 1rem;background:#fff0;font-size:.75rem;text-align:left}.secondary-actions:hover{background-color:#f2f7fa}.secondary-actions.disabled{color:#b4b4b4;cursor:not-allowed}.secondary-actions.disabled:hover{background-color:#fff0}.dropdown{min-width:160px}.empty-body{padding:1.5rem;background:#fff}.empty-body p{margin:0 0 .5rem}.additional-info{align-self:center;margin-left:.25rem;color:#069;cursor:pointer;font-size:1rem;font-weight:400;transform:translateY(.0625rem)}.additional-info:hover,.additional-info:focus,.additional-info:active{color:#14516f}\n"], dependencies: [{ kind: "component", type: i7.QdButtonComponent, selector: "button[qdButton], a[qdButton], button[qd-button]", inputs: ["disabled", "color", "icon", "data-test-id", "additionalInfo"] }, { kind: "directive", type: i8.QdButtonGhostDirective, selector: "button[qdButtonGhost], a[qdButtonGhost]" }, { kind: "directive", type: i9.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i9.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i9.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i10.QdDropdownComponent, selector: "qd-dropdown", inputs: ["value", "id", "formControlName", "config", "data-test-id", "qdPopoverMaxHeight", "dense"], outputs: ["valueChange", "enterClick", "clickHint", "clickReadonly", "clickViewonly"] }, { kind: "component", type: i11.QdInputComponent, selector: "qd-input", inputs: ["formControlName", "value", "config", "isError", "data-test-id"], outputs: ["valueChange", "enterClick", "clickClear", "clickHint", "clickReadonly", "clickViewonly"] }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i1.FormGroupName, selector: "[formGroupName]", inputs: ["formGroupName"] }, { kind: "component", type: i12.QdIconComponent, selector: "qd-icon", inputs: ["icon"] }, { kind: "directive", type: i13.QdPopoverOnClickDirective, selector: "[qdPopoverOnClick]", inputs: ["qdPopoverOnClick", "positionStrategy", "qdPopoverCloseStrategy", "qdPopoverDisabled", "qdPopoverStopPropagation", "qdPopoverBackgroundColor", "qdPopoverMaxHeight", "qdPopoverMinWidth", "qdPopoverMaxWidth", "qdPopoverAutoSize", "qdPopoverEnableKeyControl"], outputs: ["opened", "closed"], exportAs: ["qdPopoverOnClick"] }, { kind: "directive", type: i14.QdFocusableDirective, selector: "[qdFocusable]" }, { kind: "directive", type: i15.QdTooltipOnClickDirective, selector: "[qdTooltipOnClick]", inputs: ["qdTooltipContent"] }, { kind: "directive", type: i16.QdCustomForDirective, selector: "[qdCustomFor]", inputs: ["qdCustomForOf", "qdCustomForToggler"] }, { kind: "pipe", type: i9.AsyncPipe, name: "async" }, { kind: "pipe", type: i17.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
@@ -388,4 +386,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImpor
388
386
  type: ViewChild,
389
387
  args: [QdCustomForDirective]
390
388
  }] } });
391
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVpY2stZWRpdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL3FkLXVpL3NyYy9saWIvcXVpY2stZWRpdC9xdWljay1lZGl0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL2xpYnMvcWQtdWkvc3JjL2xpYi9xdWljay1lZGl0L3F1aWNrLWVkaXQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixpQkFBaUIsRUFDakIsU0FBUyxFQUNULFlBQVksRUFDWixLQUFLLEVBSUwsUUFBUSxFQUNSLE1BQU0sRUFDTixTQUFTLEVBQ1QsSUFBSSxFQUdKLFNBQVMsRUFDVCxZQUFZLEVBQ2IsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDaEUsT0FBTyxFQUFFLGdCQUFnQixFQUFhLFdBQVcsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNyRixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sRUFBYyxFQUFFLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNqRixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUUzRSxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxnREFBZ0QsQ0FBQztBQUMxRixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDdEUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDN0UsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDN0UsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3hELE9BQU8sRUFBRSxtQkFBbUIsRUFB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LFlBQVk7dUJBQUMsb0JBQW9CO2dCQUlsQyxrQkFBa0I7c0JBRGpCLFNBQVM7dUJBQUMsb0JBQW9CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIEV2ZW50RW1pdHRlcixcbiAgSW5wdXQsXG4gIE9uQ2hhbmdlcyxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIE9wdGlvbmFsLFxuICBPdXRwdXQsXG4gIFF1ZXJ5TGlzdCxcbiAgU2VsZixcbiAgU2ltcGxlQ2hhbmdlcyxcbiAgVHlwZSxcbiAgVmlld0NoaWxkLFxuICBWaWV3Q2hpbGRyZW5cbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyB0YWtlVW50aWxEZXN0cm95ZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQgeyBDb250cm9sQ29udGFpbmVyLCBGb3JtQXJyYXksIEZvcm1CdWlsZGVyLCBGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBjb21iaW5lTGF0ZXN0LCBmaWx0ZXIsIE9ic2VydmFibGUsIG9mLCBTdWJqZWN0LCB0YWtlVW50aWwgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBtYXAsIHN0YXJ0V2l0aCwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBRZENvbnRhaW5lckFjdGlvblNlcnZpY2UgfSBmcm9tICcuLi9jb250YWluZXIvc2VydmljZXMvY29udGFpbmVyLWFjdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7IENPTVBPTkVOVF9NQVAgfSBmcm9tICcuLi9jb3JlL2RhdGEtZmFjZXRzL2RhdGEtZmFjZXRzLm1vZGVsJztcbmltcG9ydCB7IFFkRm9jdXNhYmxlRGlyZWN0aXZlIH0gZnJvbSAnLi4vY29yZS9mb2N1c2FibGUvZm9jdXNhYmxlLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBRZEV2ZW50QnJva2VyU2VydmljZSB9IGZyb20gJy4uL2NvcmUvc2VydmljZXMvZXZlbnQtYnJva2VyLnNlcnZpY2UnO1xuaW1wb3J0IHsgUWRGb3JtQ29udHJvbCB9IGZyb20gJy4uL2Zvcm1zL3FkLWZvcm0ubW9kdWxlJztcbmltcG9ydCB7IFFkUGFnZUZvb3RlclNlcnZpY2UgfSBmcm9tICcuLi9wYWdlL3NoYXJlZC9zZXJ2aWNlcy9wYWdlLWZvb3Rlci5zZXJ2aWNlJztcbmltcG9ydCB7IFFkUGFnZVN0b3JlU2VydmljZSB9IGZyb20gJy4uL3BhZ2Uvc2hhcmVkL3NlcnZpY2VzL3BhZ2Utc3RvcmUuc2VydmljZSc7XG5pbXBvcnQgeyBRZFNlY3Rpb25Ub29sYmFyQWN0aW9uU2VydmljZSB9IGZyb20gJy4uL3NlY3Rpb24vc2VydmljZXMvc2VjdGlvbi10b29sYmFyLWFjdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7IFFkUXVpY2tFZGl0Q29sdW1uLCBRZFF1aWNrRWRpdENvbmZpZywgUWRRdWlja0VkaXRTZWNvbmRhcnlBY3Rpb24gfSBmcm9tICcuL21vZGVsL3F1aWNrLWVkaXQtY29uZmlnJztcbmltcG9ydCB7IFFkUXVpY2tFZGl0RGF0YSwgUWRRdWlja0VkaXREYXRhVmFsdWUsIFFkUXVpY2tFZGl0Um93IH0gZnJvbSAnLi9tb2RlbC9xdWljay1lZGl0LWRhdGEnO1xuaW1wb3J0IHsgUWRDdXN0b21Gb3JEaXJlY3RpdmUgfSBmcm9tICcuL3FkLW5nLWZvci5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgUWRUb29sdGlwIH0gZnJvbSAnLi4vZm9ybXMvbW9kZWwvZm9ybXMuaW50ZXJmYWNlJztcblxuLyoqXG4gKiBUaGUgKipRZFF1aWNrRWRpdENvbXBvbmVudCoqIGlzIGEgZHluYW1pYyB0b29sIHRoYXQgZW5hYmxlcyB1c2VycyB0byBzd2lmdGx5IGVkaXQgZGF0YSB3aXRob3V0IHRoZSBuZWVkIGZvciB0cmFkaXRpb25hbCBmb3Jtcy5cbiAqIEl0IGlzIHNwZWNpZmljYWxseSBkZXNpZ25lZCBmb3IgaW5saW5lIGVkaXRpbmcsIHByb3ZpZGluZyBhIG1vcmUgc2VhbWxlc3MgYW5kIGVmZmljaWVudCB1c2VyIGV4cGVyaWVuY2UuXG4gKiBUaGUgY29tcG9uZW50IGN1cnJlbnRseSBzdXBwb3J0cyBlZGl0aW5nIGNvbHVtbnMgd2l0aCBkYXRhIHR5cGVzIHN1Y2ggYXMgc3RyaW5nLCBudW1iZXIsIGFuZCBlbnVtLlxuICogSW4gYWRkaXRpb24gdG8gaXRzIGVkaXRpbmcgY2FwYWJpbGl0aWVzLCB0aGUgUWRRdWlja0VkaXRDb21wb25lbnQgYWxzbyBvZmZlcnMgZmVhdHVyZXMgZm9yIGFkZGluZyBuZXcgcm93cyBhbmQgZGVsZXRpbmcgZXhpc3Rpbmcgb25lcy5cbiAqXG4gKiBRdWlja0VkaXQgc3VwcG9ydHMgdHdvIG1vZGVzOlxuICogLSAqKlJlYWN0aXZlIEZvcm1zIE1vZGUqKiB2aWEgYGZvcm1BcnJheU5hbWVgIOKAkyByZWNvbW1lbmRlZCBmb3IgZnVsbCBjb250cm9sIGFuZCB2YWxpZGF0aW9uLlxuICogLSAqKlRlbXBsYXRlIERhdGEgTW9kZSoqIHZpYSBgZGF0YWAgaW5wdXQg4oCTIGZvciB1c2UgY2FzZXMgd2l0aG91dCBleHRlcm5hbCBmb3Jtcy5cbiAqXG4gKiAjIyMgVXNhZ2VcbiAqXG4gKiAjIyMjIENvbmZpZ3VyYXRpb25cbiAqXG4gKiBgYGB0c1xuICogdHlwZSBDb2x1bW5EZWZpbml0aW9uID0gJ3J1YnJpaycgfCAnZGF0YScgfCAnc3RhdHVzJztcbiAqIGNvbnN0IGNvbmZpZzogUWRRdWlja0VkaXRDb25maWc8Q29sdW1uRGVmaW5pdGlvbj4gPSB7XG4gKiAgIGNvbHVtbnM6IFtcbiAqICAgICB7XG4gKiAgICAgICBuYW1lOiAncnVicmlrJyxcbiAqICAgICAgIHR5cGU6ICd0ZXh0JyxcbiAqICAgICAgIGkxOG46ICd0cmFuc2xhdGlvbi5rZXkucnVicmlrJyxcbiAqICAgICAgIGlzRWRpdGFibGU6ICgpID0+IGZhbHNlXG4gKiAgICAgfSxcbiAqICAgICB7XG4gKiAgICAgICBuYW1lOiAnZGF0YScsXG4gKiAgICAgICB0eXBlOiAnaW50ZWdlcicsXG4gKiAgICAgICBpMThuOiAndHJhbnNsYXRpb24ua2V5LmRhdGEnLFxuICogICAgICAgaXNFZGl0YWJsZTogKHJvdywgY29sdW1uKSA9PiAhIXJvd1sncnVicmlrJ10sXG4gKiAgICAgICB2YWxpZGF0b3JzOiBbVmFsaWRhdG9ycy5yZXF1aXJlZF0gLy8gb25seSByZWxldmFudCBpbiB0ZW1wbGF0ZSBkYXRhIG1vZGVcbiAqICAgICB9XG4gKiAgIF0sXG4gKiAgIGNhbkFkZDogdHJ1ZSxcbiAqICAgc2Vjb25kYXJ5QWN0aW9uczogWy4uLl1cbiAqIH1cbiAqIGBgYFxuICpcbiAqICMjIyMgRm9ybUFycmF5IChyZWNvbW1lbmRlZClcbiAqXG4gKiBUbyB1c2UgUXVpY2tFZGl0IHdpdGggQW5ndWxhciBSZWFjdGl2ZSBGb3JtcywgZGVmaW5lIGEgRm9ybUdyb3VwIGNvbnRhaW5pbmcgYSBGb3JtQXJyYXkuIFRoZSBjb250cm9scyBtdXN0IG1hdGNoIHRoZSBkZWZpbmVkIGNvbHVtbnMuXG4gKlxuICogYGBgdHNcbiAqIGZvcm0gPSBuZXcgRm9ybUdyb3VwKHtcbiAqICAgZGF0YTogbmV3IEZvcm1BcnJheShbXG4gKiAgICAgbmV3IEZvcm1Hcm91cCh7XG4gKiAgICAgICBydWJyaWs6IG5ldyBRZEZvcm1Db250cm9sKCdUZXh0JyksXG4gKiAgICAgICBkYXRhOiBuZXcgUWRGb3JtQ29udHJvbCgxMjMpXG4gKiAgICAgfSlcbiAqICAgXSlcbiAqIH0pXG4gKiBgYGBcbiAqXG4gKiBUaGVuIGJpbmQgdGhlIGBmb3JtQXJyYXlOYW1lYCBkaXJlY3RpdmUgaW4gdGhlIHRlbXBsYXRlOlxuICpcbiAqIGBgYGh0bWxcbiAqIDxmb3JtIFtmb3JtR3JvdXBdPVwiZm9ybVwiPlxuICogICA8cWQtcXVpY2stZWRpdCBbY29uZmlnXT1cImNvbmZpZ1wiIGZvcm1BcnJheU5hbWU9XCJkYXRhXCI+PC9xZC1xdWljay1lZGl0PlxuICogPC9mb3JtPlxuICogYGBgXG4gKlxuICogWW91IGNhbiBhZGQgbmV3IHJvd3MgYnkgcmVhY3RpbmcgdG8gYChhZGROZXdDbGlja2VkKWA6XG4gKlxuICogYGBgdHNcbiAqIGFkZENvbnRyb2woKTogdm9pZCB7XG4gKiAgIHRoaXMuZm9ybS5nZXQoJ2RhdGEnKT8uaW5zZXJ0KDAsIG5ldyBGb3JtR3JvdXAoeyAuLi4gfSkpO1xuICogfVxuICogYGBgXG4gKlxuICogIyMjIyBUZW1wbGF0ZSBEYXRhIChvcHRpb25hbClcbiAqXG4gKiBBbHRlcm5hdGl2ZWx5LCB5b3UgY2FuIHByb3ZpZGUgYSBzdGF0aWMgYGRhdGFgIGFycmF5LiBUaGlzIGlzIHVzZWZ1bCBmb3IgcmVhZC1vbmx5IHNjZW5hcmlvcyB3aXRob3V0IHJlYWN0aXZlIGZvcm1zLlxuICpcbiAqIGBgYHRzXG4gKiBjb25zdCBkYXRhOiBRZFF1aWNrRWRpdERhdGE8TXlDb2x1bW5zPiA9IFtcbiAqICAgeyBydWJyaWs6ICdGb28nLCBkYXRhOiA0MiB9LFxuICogICB7IHJ1YnJpazogJ0JhcicsIGRhdGE6IDc3IH1cbiAqIF07XG4gKiBgYGBcbiAqXG4gKiBgYGBodG1sXG4gKiA8cWQtcXVpY2stZWRpdCBbY29uZmlnXT1cImNvbmZpZ1wiIFtkYXRhXT1cImRhdGFcIj48L3FkLXF1aWNrLWVkaXQ+XG4gKiBgYGBcbiAqXG4gKiAjIyMjIFZhbGlkYXRpb25cbiAqXG4gKiAtIEluICoqRm9ybUFycmF5IG1vZGUqKiwgdmFsaWRhdG9ycyBtdXN0IGJlIHNldCBkaXJlY3RseSBvbiB5b3VyIEZvcm1Db250cm9scy4gVmFsaWRhdG9ycyBpbiBgY29uZmlnLmNvbHVtbnNgIGFyZSBpZ25vcmVkLlxuICogLSBJbiAqKnRlbXBsYXRlIGRhdGEgbW9kZSoqLCB2YWxpZGF0b3JzIGRlZmluZWQgaW4gYGNvbmZpZy5jb2x1bW5zYCBhcmUgYXBwbGllZC5cbiAqXG4gKiAqKk5vdGU6IERvIG5vdCBjb21iaW5lIGJvdGggYXBwcm9hY2hlcy4gV2hlbiB1c2luZyBgZm9ybUFycmF5TmFtZWAsIG9ubHkgdGhlIGV4dGVybmFsIEZvcm1Hcm91cCBpcyB1c2VkIGZvciB2YWxpZGF0aW9uIGFuZCB2YWx1ZSBhY2Nlc3MuKipcbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAncWQtcXVpY2stZWRpdCcsXG4gIHRlbXBsYXRlVXJsOiAncXVpY2stZWRpdC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWydxdWljay1lZGl0LmNvbXBvbmVudC5zY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXG59KVxuZXhwb3J0IGNsYXNzIFFkUXVpY2tFZGl0Q29tcG9uZW50PFQgZXh0ZW5kcyBzdHJpbmc+IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMsIE9uRGVzdHJveSB7XG4gIC8qKlxuICAgKiBDb25maWd1cmF0aW9uIG9mIHRoZSBRdWlja0VkaXQuIFRoZSBnZW5lcmljIHR5cGUgc3BlY2lmaWVzIHRoZSBjb2x1bW4gZGVmaW5pdGlvbi4gPGJyIC8+XG4gICAqXG4gICAqICoqVXNhZ2U6KipcbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogdHlwZSBDb2x1bW5EZWZpbml0aW9uID0gJ2FydGljbGUnIHwgJ21hc3MnIHwgJ2RvY3VtZW50cyc7XG4gICAqIGNvbnN0IGNvbmZpZzogUWRRdWlja0VkaXRDb25maWc8Q29sdW1uRGVmaW5pdGlvbj4gPSB7XG4gICAqICAgY29sdW1uczogW1xuICAgKiAgICAge1xuICAgKiAgICAgICBuYW1lOiAncnVicmlrJyxcbiAgICogICAgICAgdHlwZTogJ3RleHQnLFxuICAgKiAgICAgICBpMThuOiAndHJhbnNsYXRpb24ua2V5LnJ1YnJpaycsXG4gICAqICAgICAgIGlzRWRpdGFibGU6ICgpID0+IGZhbHNlXG4gICAqICAgICB9LFxuICAgKiAgICAge1xuICAgKiAgICAgICBuYW1lOiAnZGF0YScsXG4gICAqICAgICAgIHR5cGU6ICdpbnRlZ2VyJyxcbiAgICogICAgICAgaTE4bjogJ3RyYW5zbGF0aW9uLmtleS5kYXRhJyxcbiAgICogICAgICAgaXNFZGl0YWJsZTogKHJvdywgY29sdW1uKSA9PiByb3dbJ2FjdGl2ZSddID09IDEsXG4gICAqICAgICAgIHZhbGlkYXRvcnM6IFtWYWxpZGF0b3JzLnJlcXVpcmVkXVxuICAgKiAgICAgfSxcbiAgICogICAgIHtcbiAgICogICAgICAgbmFtZTogJ3NpemUnLFxuICAgKiAgICAgICB0eXBlOiAnYm9vbGVhbicsXG4gICAqICAgICAgIGkxOG46ICd0cmFuc2xhdGlvbi5rZXkuc2l6ZScsXG4gICAqICAgICAgIHZhbGlkYXRvcnM6IFtjdXN0b21WYWxpZGF0b3JGdW5jdGlvbigpXVxuICAgKiAgICAgfVxuICAgKiAgIF1cbiAgICogfVxuICAgKi9cbiAgQElucHV0KHsgcmVxdWlyZWQ6IHRydWUgfSkgY29uZmlnITogUWRRdWlja0VkaXRDb25maWc8VD47XG5cbiAgLyoqXG4gICAqIERhdGEgcHJvdmlkZXIgZm9yIFF1aWNrRWRpdC5cbiAgICovXG4gIEBJbnB1dCgpIGRhdGE6IFFkUXVpY2tFZGl0RGF0YTxUPiB8IHVuZGVmaW5lZDtcblxuICBnZXQgdGVtcGxhdGVEYXRhKCk6IFFkUXVpY2tFZGl0RGF0YTxUPiB7XG4gICAgcmV0dXJuIHRoaXMuY29udHJvbENvbnRhaW5lcj8uY29udHJvbD8udmFsdWUgPz8gdGhpcy5kYXRhO1xuICB9XG5cbiAgZ2V0IHRlbXBsYXRlRGF0YSQoKTogT2JzZXJ2YWJsZTxRZFF1aWNrRWRpdERhdGE8VD4+IHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5jb250cm9sQ29udGFpbmVyPy5jb250cm9sPy52YWx1ZUNoYW5nZXMucGlwZShzdGFydFdpdGgodGhpcy5jb250cm9sQ29udGFpbmVyLmNvbnRyb2wudmFsdWUpKSA/PyBvZih0aGlzLmRhdGEpXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBIHN0YXRpYyB0ZXN0IElEIGZvciBpbnRlZ3JhdGlvbiB0ZXN0cyBjYW4gYmUgc2V0LiA8YnIgLz5cbiAgICogVGhlIHZhbHVlIGZvciB0aGUgSFRNTCBhdHRyaWJ1dGUgW2RhdGEtdGVzdC1pZF0uXG4gICAqL1xuICBASW5wdXQoJ2RhdGEtdGVzdC1pZCcpXG4gIHRlc3RJZD86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGZvcm0gZ3JvdXAgaW5zdGFuY2Ugb2YgUWRRdWlja0VkaXQuXG4gICAqIFVzZSB0aGlzIGZvcm0gZ3JvdXAgdG8gYmluZCBpdCB0byBzdGVwLWNvbnRyb2wgb2YgUWRTdGVwcGVyIG9yIG90aGVyIGN1c3RvbSBsb2dpY3MuXG4gICAqL1xuICBAT3V0cHV0KCkgZm9ybUdyb3VwQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgQE91dHB1dCgpIGFkZE5ld0NsaWNrZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgQFZpZXdDaGlsZHJlbihRZEZvY3VzYWJsZURpcmVjdGl2ZSlcbiAgZm9jdXNhYmxlczogUXVlcnlMaXN0PFFkRm9jdXNhYmxlRGlyZWN0aXZlPiB8IHVuZGVmaW5lZDtcblxuICBAVmlld0NoaWxkKFFkQ3VzdG9tRm9yRGlyZWN0aXZlKVxuICBjdXN0b21Gb3JEaXJlY3RpdmUhOiBRZEN1c3RvbUZvckRpcmVjdGl2ZTtcblxuICBxdWlja0VkaXRGb3JtR3JvdXAhOiBGb3JtR3JvdXA7XG4gIHZpZXdvbmx5JDogT2JzZXJ2YWJsZTxib29sZWFuPiA9IG9mKGZhbHNlKTtcbiAgYWN0aW9ucyQhOiBPYnNlcnZhYmxlPFFkUXVpY2tFZGl0U2Vjb25kYXJ5QWN0aW9uPFQ+W10+O1xuXG4gIHByaXZhdGUgX2Rlc3Ryb3llZCQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gIGdldCBjb250cm9sKCk6IEZvcm1Hcm91cCB7XG4gICAgcmV0dXJuICh0aGlzLmNvbnRyb2xDb250YWluZXI/LmNvbnRyb2wgPz8gdGhpcy5xdWlja0VkaXRGb3JtR3JvdXAuZ2V0KCdyb3dzJykpIGFzIEZvcm1Hcm91cDtcbiAgfVxuXG4gIGdldCBzaG93U3RhbmRhbG9uZUNyZWF0ZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gIXRoaXMuY29udGFpbmVyQWN0aW9uU2VydmljZSAmJiAhdGhpcy5zZWN0aW9uQWN0aW9uU2VydmljZSAmJiB0aGlzLmNvbmZpZy5jYW5BZGQ7XG4gIH1cblxuICBnZXQgY2FuQWRkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZy5jYW5BZGQgPz8gdGhpcy5zZWN0aW9uQWN0aW9uU2VydmljZSAhPSBudWxsO1xuICB9XG5cbiAgZ2V0IHJvd3MoKTogRm9ybUFycmF5IHtcbiAgICByZXR1cm4gdGhpcy5xdWlja0VkaXRGb3JtR3JvdXAuZ2V0KCdyb3dzJykgYXMgRm9ybUFycmF5O1xuICB9XG5cbiAgZ2V0IHZpc2libGVDb2x1bW5zKCk6IFFkUXVpY2tFZGl0Q29sdW1uPFQ+W10ge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZy5jb2x1bW5zLmZpbHRlcihjb2x1bW4gPT4gIWNvbHVtbi5pc0hpZGRlbik7XG4gIH1cblxuICBnZXQgaXNGb3JtQ29udHJvbCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5jb250cm9sQ29udGFpbmVyICE9IG51bGw7XG4gIH1cblxuICB0b2dnbGVyRHJhd2luZyA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgZmI6IEZvcm1CdWlsZGVyLFxuICAgIEBPcHRpb25hbCgpIHJlYWRvbmx5IGZvb3RlclNlcnZpY2U6IFFkUGFnZUZvb3RlclNlcnZpY2UsXG4gICAgQE9wdGlvbmFsKCkgcmVhZG9ubHkgcGFnZVNlcnZpY2U6IFFkUGFnZVN0b3JlU2VydmljZTxhbnk+LFxuICAgIEBPcHRpb25hbCgpIHByaXZhdGUgcmVhZG9ubHkgc2VjdGlvbkFjdGlvblNlcnZpY2U6IFFkU2VjdGlvblRvb2xiYXJBY3Rpb25TZXJ2aWNlLFxuICAgIEBPcHRpb25hbCgpIHByaXZhdGUgcmVhZG9ubHkgY29udGFpbmVyQWN0aW9uU2VydmljZTogUWRDb250YWluZXJBY3Rpb25TZXJ2aWNlLFxuICAgIEBPcHRpb25hbCgpIHByaXZhdGUgcmVhZG9ubHkgZXZlbnRCcm9rZXJTZXJ2aWNlOiBRZEV2ZW50QnJva2VyU2VydmljZSxcbiAgICBwcml2YXRlIGNoYW5nZURldGVjdG9yUmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBAT3B0aW9uYWwoKSBAU2VsZigpIHByaXZhdGUgY29udHJvbENvbnRhaW5lcjogQ29udHJvbENvbnRhaW5lclxuICApIHtcbiAgICBpZiAoIXRoaXMuaXNGb3JtQ29udHJvbCkge1xuICAgICAgdGhpcy5xdWlja0VkaXRGb3JtR3JvdXAgPSB0aGlzLmZiLmdyb3VwKHtcbiAgICAgICAgcm93czogdGhpcy5mYi5hcnJheShbXSlcbiAgICAgIH0pO1xuXG4gICAgICB0aGlzLnF1aWNrRWRpdEZvcm1Hcm91cC52YWx1ZUNoYW5nZXMucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQoKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgdGhpcy5mb3JtR3JvdXBDaGFuZ2UuZW1pdCh0aGlzLnF1aWNrRWRpdEZvcm1Hcm91cCk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLnZhbGlkYXRlU2V0dXAoKTtcbiAgICB0aGlzLmluaXRPcE1vZGVTdWJzY3JpcHRpb24oKTtcbiAgICB0aGlzLmluaXRDcmVhdGluZygpO1xuICAgIHRoaXMuaW5pdEFjdGlvbnNTdHJlYW0oKTtcbiAgICB0aGlzLmluaXRNYW51YWxDaGFuZ2VEZXRlY3Rpb25Gb3JDb250cm9sUmVzZXQoKTtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBpZiAoY2hhbmdlc1snZGF0YSddIHx8IGNoYW5nZXNbJ2NvbmZpZyddKSB0aGlzLmluaXRSb3dzKCk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLl9kZXN0cm95ZWQkLm5leHQoKTtcbiAgICB0aGlzLl9kZXN0cm95ZWQkLmNvbXBsZXRlKCk7XG4gIH1cblxuICBoYW5kbGVTZWNvbmRhcnlBY3Rpb24oYWN0aW9uOiBRZFF1aWNrRWRpdFNlY29uZGFyeUFjdGlvbjxUPiwgcm93SW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgIGlmICghYWN0aW9uKSByZXR1cm47XG5cbiAgICBjb25zdCBzZWxlY3RlZFJvd0RhdGEgPVxuICAgICAgKHRoaXMuY29udHJvbENvbnRhaW5lcj8uY29udHJvbCBhcyBGb3JtQXJyYXkpPy5jb250cm9sc1tyb3dJbmRleF0udmFsdWUgPz8gdGhpcy5yb3dzLnZhbHVlW3Jvd0luZGV4XTtcbiAgICBhY3Rpb24uaGFuZGxlcihzZWxlY3RlZFJvd0RhdGEpO1xuICB9XG5cbiAgZ2V0Q29tcG9uZW50VHlwZShjb2x1bW46IFFkUXVpY2tFZGl0Q29sdW1uPFQ+KTogVHlwZTx1bmtub3duPiB8IG51bGwge1xuICAgIHJldHVybiBDT01QT05FTlRfTUFQW2NvbHVtbi50eXBlXSB8fCBudWxsO1xuICB9XG5cbiAgZ2V0Q29tcG9uZW50SW5wdXRzKGNvbHVtbjogUWRRdWlja0VkaXRDb2x1bW48VD4sIHJvdzogUWRRdWlja0VkaXRSb3c8VD4pOiBhbnkge1xuICAgIGNvbnN0IHRlc3RJZCA9IHRoaXMudGVzdElkICYmIHRoaXMudGVzdElkICsgJy1jZWxsLScgKyBjb2x1bW4ubmFtZTtcblxuICAgIGlmIChjb2x1bW4udHlwZSA9PT0gJ2VudW0nKVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZGF0YTogY29sdW1uLm9wdGlvbnM/LmZpbmQob3B0aW9uID0+IG9wdGlvbi52YWx1ZSA9PT0gcm93W2NvbHVtbi5uYW1lXSk/LmkxOG4sXG4gICAgICAgIHRlc3RJZFxuICAgICAgfTtcblxuICAgIHJldHVybiB7IGRhdGE6IHJvd1tjb2x1bW4ubmFtZV0sIHRlc3RJZCB9O1xuICB9XG5cbiAgY3JlYXRlUm93KCk6IHZvaWQge1xuICAgIHRoaXMucmVkcmF3T25OZXh0Q2hhbmdlKCk7XG5cbiAgICBpZiAodGhpcy5jb250cm9sQ29udGFpbmVyKSB7XG4gICAgICB0aGlzLmFkZE5ld0NsaWNrZWQubmV4dCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBmb3JtR3JvdXAgPSBPYmplY3QuYXNzaWduKFxuICAgICAgICB7fSxcbiAgICAgICAgLi4udGhpcy5jb25maWcuY29sdW1ucy5tYXAoY29sdW1uID0+ICh7XG4gICAgICAgICAgW2NvbHVtbi5uYW1lXTogbmV3IFFkRm9ybUNvbnRyb2w8UWRRdWlja0VkaXREYXRhVmFsdWU+KHVuZGVmaW5lZCwgY29sdW1uLnZhbGlkYXRvcnMpXG4gICAgICAgIH0pKVxuICAgICAgKTtcblxuICAgICAgdGhpcy5yb3dzLmluc2VydCgwLCBuZXcgRm9ybUdyb3VwKGZvcm1Hcm91cCkpO1xuXG4gICAgICBpZiAoIXRoaXMuZGF0YSkgdGhpcy5kYXRhID0gW107XG5cbiAgICAgIHRoaXMuZGF0YS51bnNoaWZ0KFxuICAgICAgICBPYmplY3QuYXNzaWduKHt9LCAuLi50aGlzLmNvbmZpZy5jb2x1bW5zLm1hcChjb2x1bW4gPT4gKHsgW2NvbHVtbi5uYW1lXTogbnVsbCB9KSkpIGFzIFFkUXVpY2tFZGl0Um93PFQ+XG4gICAgICApO1xuICAgIH1cblxuICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuXG4gICAgd2luZG93LnNldFRpbWVvdXQoKCkgPT4gdGhpcy5mb2N1c0ZpcnN0Q29udHJvbCgpKTtcbiAgfVxuXG4gIHJlbW92ZVJvdyhpbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy5yZWRyYXdPbk5leHRDaGFuZ2UoKTtcblxuICAgIGlmICh0aGlzLmNvbnRyb2xDb250YWluZXIpIHtcbiAgICAgICh0aGlzLmNvbnRyb2xDb250YWluZXIuY29udHJvbCBhcyBGb3JtQXJyYXkpLnJlbW92ZUF0KGluZGV4KTtcbiAgICAgIHRoaXMuY29udHJvbENvbnRhaW5lci5jb250cm9sPy5zZXRWYWx1ZSh0aGlzLmNvbnRyb2xDb250YWluZXIudmFsdWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnJvd3MucmVtb3ZlQXQoaW5kZXgpO1xuICAgICAgdGhpcy5kYXRhPy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgIH1cbiAgfVxuXG4gIGhhc1Rvb2x0aXAodG9vbHRpcDogUWRUb29sdGlwKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhdG9vbHRpcCAmJiAhdG9vbHRpcC5oaWRkZW47XG4gIH1cblxuICBwcml2YXRlIGluaXRSb3dzKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmNvbnRyb2xDb250YWluZXIpIHJldHVybjtcblxuICAgIHdoaWxlICh0aGlzLnJvd3MubGVuZ3RoKSB7XG4gICAgICB0aGlzLnJvd3MucmVtb3ZlQXQoMCk7XG4gICAgfVxuXG4gICAgdGhpcy5kYXRhPy5mb3JFYWNoKHJvdyA9PiB0aGlzLmNyZWF0ZUZvcm1Hcm91cFJvdyhyb3cpKTtcbiAgfVxuXG4gIHByaXZhdGUgaW5pdENyZWF0aW5nKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmNvbnRhaW5lckFjdGlvblNlcnZpY2UpXG4gICAgICB0aGlzLmNvbnRhaW5lckFjdGlvblNlcnZpY2UuYWN0aW9uJC5waXBlKHRha2VVbnRpbCh0aGlzLl9kZXN0cm95ZWQkKSkuc3Vic2NyaWJlKCgpID0+IHRoaXMuY3JlYXRlUm93KCkpO1xuXG4gICAgaWYgKHRoaXMuc2VjdGlvbkFjdGlvblNlcnZpY2UpXG4gICAgICB0aGlzLnNlY3Rpb25BY3Rpb25TZXJ2aWNlLmFjdGlvbiRcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgdGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3llZCQpLFxuICAgICAgICAgIGZpbHRlcih0eXBlID0+IHR5cGUgPT09ICdhZGROZXcnKVxuICAgICAgICApXG4gICAgICAgIC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5jcmVhdGVSb3coKSk7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZUZvcm1Hcm91cFJvdyhyb3c6IFFkUXVpY2tFZGl0Um93PFQ+KTogdm9pZCB7XG4gICAgY29uc3QgZ3JvdXA6IGFueSA9IHt9O1xuXG4gICAgdGhpcy5jb25maWcuY29sdW1ucy5mb3JFYWNoKGNvbHVtbiA9PiB7XG4gICAgICBncm91cFtjb2x1bW4ubmFtZV0gPSBuZXcgUWRGb3JtQ29udHJvbDxRZFF1aWNrRWRpdERhdGFWYWx1ZT4ocm93W2NvbHVtbi5uYW1lXSwgY29sdW1uLnZhbGlkYXRvcnMpO1xuICAgIH0pO1xuXG4gICAgY29uc3QgZm9ybSA9IG5ldyBGb3JtR3JvdXAoZ3JvdXApO1xuICAgIHRoaXMucm93cy5wdXNoKGZvcm0pO1xuICB9XG5cbiAgcHJpdmF0ZSBmb2N1c0ZpcnN0Q29udHJvbCgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuZm9jdXNhYmxlcykgcmV0dXJuO1xuXG4gICAgdGhpcy5mb2N1c2FibGVzLmZpcnN0Py5mb2N1cygpO1xuICB9XG5cbiAgcHJpdmF0ZSBpbml0T3BNb2RlU3Vic2NyaXB0aW9uKCk6IHZvaWQge1xuICAgIHRoaXMudmlld29ubHkkID1cbiAgICAgIHR5cGVvZiB0aGlzLmNvbmZpZy52aWV3b25seSA9PT0gJ2Jvb2xlYW4nXG4gICAgICAgID8gb2YodGhpcy5jb25maWcudmlld29ubHkpXG4gICAgICAgIDogdGhpcy5ldmVudEJyb2tlclNlcnZpY2U/LmNvbnN1bWU8eyBpc1ZpZXdvbmx5OiBib29sZWFuIH0+KCdvcGVyYXRpb25fbW9kZV9jaGFuZ2VkJykucGlwZShcbiAgICAgICAgICAgIG1hcChlID0+IGUucGF5bG9hZC5pc1ZpZXdvbmx5KSxcbiAgICAgICAgICAgIHN0YXJ0V2l0aChmYWxzZSlcbiAgICAgICAgICApID8/IG9mKGZhbHNlKTtcbiAgfVxuXG4gIHByaXZhdGUgdmFsaWRhdGVTZXR1cCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5kYXRhICE9IG51bGwgJiYgdGhpcy5jb250cm9sQ29udGFpbmVyICE9IG51bGwpXG4gICAgICBjb25zb2xlLndhcm4oJ1FkUXVpY2tFZGl0IHwgRGF0YSBpcyBiZWluZyBpZ25vcmVkIHdoZW4gdXNlZCBhcyBGb3JtQXJyYXknKTtcblxuICAgIGlmICghdGhpcy5kYXRhICYmICF0aGlzLmNvbnRyb2xDb250YWluZXIpXG4gICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICdRZFF1aWNrRWRpdCB8IEVpdGhlciB1c2UgUXVpY2tFZGl0IGFzIEZvcm1Db250cm9sIHdpdGggZm9ybUFycmF5TmFtZSBiaW5kaW5nIG9yIHByb3ZpZGUgZGF0YSB2aWEgaW5wdXQuJ1xuICAgICAgKTtcblxuICAgIGlmICh0aGlzLmNvbnRyb2xDb250YWluZXIgJiYgdGhpcy5jb25maWcuY29sdW1ucy5zb21lKGNvbHVtbiA9PiBjb2x1bW4udmFsaWRhdG9ycyAhPSBudWxsKSlcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgJ1FkUXVpY2tFZGl0IHwgUGxlYXNlIHByb3ZpZGUgdmFsaWRhdG9ycyBpbiB0aGUgc3BlY2lmaWMgRm9ybUNvbnRyb2xzIGRpcmVjdGx5IGZvciBkZWZhdWx0IHZhbGlkYXRvcnMgdG8gYmUgYWRkZWQuJ1xuICAgICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVkcmF3T25OZXh0Q2hhbmdlKCk6IHZvaWQge1xuICAgIHRoaXMudG9nZ2xlckRyYXdpbmcgPSAhdGhpcy50b2dnbGVyRHJhd2luZztcbiAgfVxuXG4gIHByaXZhdGUgaW5pdEFjdGlvbnNTdHJlYW0oKTogdm9pZCB7XG4gICAgdGhpcy5hY3Rpb25zJCA9IGNvbWJpbmVMYXRlc3QoW29mKHRoaXMuY29uZmlnLnNlY29uZGFyeUFjdGlvbnMgPz8gW10pLCB0aGlzLnZpZXdvbmx5JF0pLnBpcGUoXG4gICAgICBtYXAoKFthY3Rpb25zLCBpc1ZpZXdvbmx5XSkgPT4gdGhpcy5maWx0ZXJBY3Rpb25zQnlNb2RlKGFjdGlvbnMsIGlzVmlld29ubHkpKVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGZpbHRlckFjdGlvbnNCeU1vZGUoXG4gICAgYWN0aW9uczogUWRRdWlja0VkaXRTZWNvbmRhcnlBY3Rpb248VD5bXSxcbiAgICBpc1ZpZXdvbmx5OiBib29sZWFuXG4gICk6IFFkUXVpY2tFZGl0U2Vjb25kYXJ5QWN0aW9uPFQ+W10ge1xuICAgIGNvbnN0IGN1cnJlbnRNb2RlID0gaXNWaWV3b25seSA/ICd2aWV3JyA6ICdlZGl0JztcblxuICAgIHJldHVybiBhY3Rpb25zLmZpbHRlcihhY3Rpb24gPT4gIWFjdGlvbi5vcGVyYXRpb25Nb2RlIHx8IGFjdGlvbi5vcGVyYXRpb25Nb2RlID09PSBjdXJyZW50TW9kZSk7XG4gIH1cblxuICBwcml2YXRlIGluaXRNYW51YWxDaGFuZ2VEZXRlY3Rpb25Gb3JDb250cm9sUmVzZXQoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmlzRm9ybUNvbnRyb2wpIHJldHVybjtcblxuICAgIHRoaXMuY29udHJvbENvbnRhaW5lci5jb250cm9sLnZhbHVlQ2hhbmdlc1xuICAgICAgLnBpcGUoXG4gICAgICAgIHN0YXJ0V2l0aCh0aGlzLmNvbnRyb2xDb250YWluZXIuY29udHJvbC52YWx1ZS5sZW5ndGgpLFxuICAgICAgICBtYXAoKCkgPT4gdGhpcy5jb250cm9sQ29udGFpbmVyLmNvbnRyb2wudmFsdWUubGVuZ3RoKSxcbiAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICAgICAgdGFwKCgpID0+IHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgpO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwiZWRpdGFibGUtYWN0aW9uc1wiICpuZ0lmPVwic2hvd1N0YW5kYWxvbmVDcmVhdGVcIj5cbiAgPGJ1dHRvblxuICAgIHFkQnV0dG9uXG4gICAgcWRCdXR0b25HaG9zdFxuICAgIGljb249XCJwbHVzXCJcbiAgICAoY2xpY2spPVwiY3JlYXRlUm93KClcIlxuICAgIFtkYXRhLXRlc3QtaWRdPVwidGVzdElkICsgJy1idXR0b24tYWRkLW5ldydcIlxuICAgIGNsYXNzPVwiY3JlYXRlLWJ1dHRvbi1zdGFuZGFsb25lXCJcbiAgPlxuICAgIHt7IGNvbmZpZy5zdGFuZGFsb25lQ3JlYXRlTGFiZWw/LmkxOG4gPz8gXCJpMThuLnFkLnF1aWNrLmVkaXQuY3JlYXRlQnV0dG9uTGFiZWxcIiB8IHRyYW5zbGF0ZSB9fVxuICA8L2J1dHRvbj5cbjwvZGl2PlxuXG48ZGl2IGNsYXNzPVwidGFibGVcIiBbZm9ybUdyb3VwXT1cImNvbnRyb2xcIj5cbiAgPGRpdiBjbGFzcz1cInRhYmxlLWhlYWRlclwiICpuZ0lmPVwiIWNvbmZpZy5jYW5BZGQgfHwgdGVtcGxhdGVEYXRhLmxlbmd0aCA+IDAgfHwgY29uZmlnLmVtcHR5U3RhdGVWaWV3XCI+XG4gICAgPGRpdiBjbGFzcz1cInRhYmxlLXJvd1wiPlxuICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLWNlbGxcIiAqbmdGb3I9XCJsZXQgaGVhZGVyIG9mIHZpc2libGVDb2x1bW5zXCI+XG4gICAgICAgIHt7IGhlYWRlcj8uaTE4biB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICA8cWQtaWNvblxuICAgICAgICAgICpuZ0lmPVwiaGFzVG9vbHRpcChoZWFkZXI/LnRvb2x0aXApXCJcbiAgICAgICAgICBpY29uPVwiY2lyY2xlSW5mb1wiXG4gICAgICAgICAgY2xhc3M9XCJhZGRpdGlvbmFsLWluZm9cIlxuICAgICAgICAgIHFkVG9vbHRpcE9uQ2xpY2tcbiAgICAgICAgICBbcWRUb29sdGlwQ29udGVudF09XCJoZWFkZXI/LnRvb2x0aXA/LmNvbnRlbnRcIlxuICAgICAgICA+PC9xZC1pY29uPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwidGFibGUtY2VsbCBhY3Rpb25zLWNvbHVtblwiICpuZ0lmPVwiY29uZmlnPy5zZWNvbmRhcnlBY3Rpb25zPy5sZW5ndGggPiAwXCI+XG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJtZW51LWJ1dHRvblwiPlxuICAgICAgICAgIDxxZC1pY29uIGljb249XCJvdmVyZmxvd01lbnVIb3Jpem9udGFsXCI+PC9xZC1pY29uPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgPGRpdiBjbGFzcz1cInRhYmxlLWJvZHlcIj5cbiAgICA8ZGl2XG4gICAgICBjbGFzcz1cInRhYmxlLXJvd1wiXG4gICAgICAqcWRDdXN0b21Gb3I9XCJsZXQgcm93IG9mIHRlbXBsYXRlRGF0YTsgbGV0IHJvd0luZGV4ID0gaW5kZXg7IHRvZ2dsZXI6IHRvZ2dsZXJEcmF3aW5nXCJcbiAgICAgIFtmb3JtR3JvdXBOYW1lXT1cInJvd0luZGV4XCJcbiAgICA+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBjb2x1bW4gb2YgdmlzaWJsZUNvbHVtbnNcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLWNlbGxcIj5cbiAgICAgICAgICA8cWQtZHJvcGRvd25cbiAgICAgICAgICAgIFtjb25maWddPVwie1xuICAgICAgICAgICAgICBmaWx0ZXI6IGNvbHVtbi5maWx0ZXIsXG4gICAgICAgICAgICAgIG9wdGlvbnM6IGNvbHVtbi5vcHRpb25zLFxuICAgICAgICAgICAgICBwbGFjZWhvbGRlcjogY29sdW1uLnBsYWNlaG9sZGVyLFxuICAgICAgICAgICAgICBwbGFjZWhvbGRlclByZWZpeDogY29sdW1uLnBsYWNlaG9sZGVyUHJlZml4LFxuICAgICAgICAgICAgICB2aWV3b25seTogKHZpZXdvbmx5JCB8IGFzeW5jKSA9PT0gdHJ1ZSB8fCAhY29sdW1uLmlzRWRpdGFibGUocm93LCBjb2x1bW4ubmFtZSlcbiAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgW2RhdGEtdGVzdC1pZF09XCJjb2x1bW4ubmFtZSArIHJvd0luZGV4XCJcbiAgICAgICAgICAgICpuZ0lmPVwiY29sdW1uLnR5cGUgPT09ICdlbnVtJzsgZWxzZSBvdGhlclR5cGVzXCJcbiAgICAgICAgICAgIFtkZW5zZV09XCJ0cnVlXCJcbiAgICAgICAgICAgIFtmb3JtQ29udHJvbF09XCIkYW55KGNvbnRyb2wuY29udHJvbHNbcm93SW5kZXhdKT8uY29udHJvbHNbY29sdW1uLm5hbWVdXCJcbiAgICAgICAgICAgIHFkRm9jdXNhYmxlXG4gICAgICAgICAgICBjbGFzcz1cImRyb3Bkb3duXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgPC9xZC1kcm9wZG93bj5cblxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjb3RoZXJUeXBlcz5cbiAgICAgICAgICAgIDxxZC1pbnB1dFxuICAgICAgICAgICAgICBbZGF0YS10ZXN0LWlkXT1cImNvbHVtbi5uYW1lICsgcm93SW5kZXhcIlxuICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cImNvbHVtbi5uYW1lXCJcbiAgICAgICAgICAgICAgKm5nSWY9XCJjb2x1bW4udHlwZSAhPT0gJ2VudW0nICYmICRhbnkoY29udHJvbC5jb250cm9sc1tyb3dJbmRleF0pPy5jb250cm9sc1tjb2x1bW4ubmFtZV1cIlxuICAgICAgICAgICAgICBbY29uZmlnXT1cIntcbiAgICAgICAgICAgICAgICBpbnB1dFR5cGU6IGNvbHVtbi50eXBlID09PSAnaW50ZWdlcicgPyAnbnVtYmVyJyA6ICd0ZXh0JyxcbiAgICAgICAgICAgICAgICB2aWV3b25seTogKHZpZXdvbmx5JCB8IGFzeW5jKSA9PT0gdHJ1ZSB8fCAhY29sdW1uLmlzRWRpdGFibGUocm93LCBjb2x1bW4ubmFtZSlcbiAgICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICAgIHFkRm9jdXNhYmxlXG4gICAgICAgICAgICA+PC9xZC1pbnB1dD5cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPHRkXG4gICAgICAgICpuZ0lmPVwiY29uZmlnLnNlY29uZGFyeUFjdGlvbnM/Lmxlbmd0aCA+IDAgfHwgY2FuQWRkXCJcbiAgICAgICAgY2xhc3M9XCJ0YWJsZS1jZWxsIGFjdGlvbnNcIlxuICAgICAgICBbYXR0ci5kYXRhLXRlc3QtaWRdPVwidGVzdElkICsgJy1jZWxsLWlubGluZS1hY3Rpb25zJ1wiXG4gICAgICA+XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICBbcWRQb3BvdmVyT25DbGlja109XCJtZW51XCJcbiAgICAgICAgICBbcWRQb3BvdmVyQ2xvc2VTdHJhdGVneV09XCInb25FdmVyeUNsaWNrJ1wiXG4gICAgICAgICAgW3FkUG9wb3ZlclN0b3BQcm9wYWdhdGlvbl09XCJ0cnVlXCJcbiAgICAgICAgICBjbGFzcz1cIm1lbnUtYnV0dG9uXCJcbiAgICAgICAgICBkYXRhLXRlc3Q9XCJzZWNvbmRhcnktYWN0aW9ucy10b2dnbGVyXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxxZC1pY29uIGljb249XCJvdmVyZmxvd01lbnVIb3Jpem9udGFsXCI+PC9xZC1pY29uPlxuICAgICAgICA8L2J1dHRvbj5cblxuICAgICAgICA8bmctdGVtcGxhdGUgI21lbnU+XG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgKm5nRm9yPVwibGV0IHNlY29uZGFyeUFjdGlvbiBvZiBhY3Rpb25zJCB8IGFzeW5jXCJcbiAgICAgICAgICAgIGNsYXNzPVwic2Vjb25kYXJ5LWFjdGlvbnNcIlxuICAgICAgICAgICAgW25nQ2xhc3NdPVwieyBkaXNhYmxlZDogc2Vjb25kYXJ5QWN0aW9uLmlzRGlzYWJsZWQgfVwiXG4gICAgICAgICAgICAoY2xpY2spPVwiaGFuZGxlU2Vjb25kYXJ5QWN0aW9uKHNlY29uZGFyeUFjdGlvbiwgcm93SW5kZXgpXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICB7eyBzZWNvbmRhcnlBY3Rpb24ubGFiZWwuaTE4biB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICpuZ0lmPVwiY2FuQWRkICYmICh2aWV3b25seSQgfCBhc3luYykgPT09IGZhbHNlXCJcbiAgICAgICAgICAgIGNsYXNzPVwic2Vjb25kYXJ5LWFjdGlvbnNcIlxuICAgICAgICAgICAgKGNsaWNrKT1cInJlbW92ZVJvdyhyb3dJbmRleClcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIHt7IFwiaTE4bi5xZC5xdWljay5lZGl0LnJlbW92ZUJ1dHRvbkxhYmVsXCIgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgIDwvdGQ+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPVwiZW1wdHktYm9keVwiICpuZ0lmPVwiY29uZmlnLmVtcHR5U3RhdGVWaWV3ICYmICFjb25maWcuZW1wdHlTdGF0ZVZpZXcuZGlzYWJsZWQgJiYgdGVtcGxhdGVEYXRhLmxlbmd0aCA9PT0gMFwiPlxuICAgIDxwPnt7IGNvbmZpZy5lbXB0eVN0YXRlVmlldy5pMThuIHwgdHJhbnNsYXRlIH19PC9wPlxuICA8L2Rpdj5cbjwvZGl2PlxuIl19
389
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVpY2stZWRpdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL3FkLXVpL3NyYy9saWIvcXVpY2stZWRpdC9xdWljay1lZGl0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL2xpYnMvcWQtdWkvc3JjL2xpYi9xdWljay1lZGl0L3F1aWNrLWVkaXQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixpQkFBaUIsRUFDakIsU0FBUyxFQUNULFlBQVksRUFDWixLQUFLLEVBSUwsUUFBUSxFQUNSLE1BQU0sRUFDTixTQUFTLEVBQ1QsSUFBSSxFQUdKLFNBQVMsRUFDVCxZQUFZLEVBQ2IsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDaEUsT0FBTyxFQUFFLGdCQUFnQixFQUFhLFdBQVcsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNyRixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sRUFBYyxFQUFFLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNqRixPQUFPLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVyRCxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxnREFBZ0QsQ0FBQztBQUMxRixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDdEUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDN0UsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDN0UsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3hELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDZDQUE2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QU8sT0FBTyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLGFBQWEsSUFBSSxNQUFNLENBQUMsYUFBYSxLQUFLLFdBQVcsQ0FBQyxDQUFDO0lBQ2pHLENBQUM7SUFFTyx3Q0FBd0M7UUFDOUMsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhO1lBQUUsT0FBTztRQUVoQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBUSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxhQUFhLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUyxFQUFFLENBQUM7SUFDbEgsQ0FBQzt1R0F2U1Usb0JBQW9COzJGQUFwQixvQkFBb0IsMFFBbUVwQixvQkFBb0IsZ0VBSGpCLG9CQUFvQixxRUNwTXBDLGlxSUFnSEE7OzJGRG9CYSxvQkFBb0I7a0JBTmhDLFNBQVM7K0JBQ0UsZUFBZSxtQkFHUix1QkFBdUIsQ0FBQyxNQUFNOzswQkEwRzVDLFFBQVE7OzBCQUNSLFFBQVE7OzBCQUNSLFFBQVE7OzBCQUNSLFFBQVE7OzBCQUNSLFFBQVE7OzBCQUVSLFFBQVE7OzBCQUFJLElBQUk7eUNBOUVRLE1BQU07c0JBQWhDLEtBQUs7dUJBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFO2dCQUtoQixJQUFJO3NCQUFaLEtBQUs7Z0JBaUJOLE1BQU07c0JBREwsS0FBSzt1QkFBQyxjQUFjO2dCQU9YLGVBQWU7c0JBQXhCLE1BQU07Z0JBRUcsYUFBYTtzQkFBdEIsTUFBTTtnQkFHUCxVQUFVO3NCQURULFlBQVk7dUJBQUMsb0JBQW9CO2dCQUlsQyxrQkFBa0I7c0JBRGpCLFNBQVM7dUJBQUMsb0JBQW9CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIEV2ZW50RW1pdHRlcixcbiAgSW5wdXQsXG4gIE9uQ2hhbmdlcyxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIE9wdGlvbmFsLFxuICBPdXRwdXQsXG4gIFF1ZXJ5TGlzdCxcbiAgU2VsZixcbiAgU2ltcGxlQ2hhbmdlcyxcbiAgVHlwZSxcbiAgVmlld0NoaWxkLFxuICBWaWV3Q2hpbGRyZW5cbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyB0YWtlVW50aWxEZXN0cm95ZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQgeyBDb250cm9sQ29udGFpbmVyLCBGb3JtQXJyYXksIEZvcm1CdWlsZGVyLCBGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBjb21iaW5lTGF0ZXN0LCBmaWx0ZXIsIE9ic2VydmFibGUsIG9mLCBTdWJqZWN0LCB0YWtlVW50aWwgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IG1hcCwgc3RhcnRXaXRoLCB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7IFFkQ29udGFpbmVyQWN0aW9uU2VydmljZSB9IGZyb20gJy4uL2NvbnRhaW5lci9zZXJ2aWNlcy9jb250YWluZXItYWN0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ09NUE9ORU5UX01BUCB9IGZyb20gJy4uL2NvcmUvZGF0YS1mYWNldHMvZGF0YS1mYWNldHMubW9kZWwnO1xuaW1wb3J0IHsgUWRGb2N1c2FibGVEaXJlY3RpdmUgfSBmcm9tICcuLi9jb3JlL2ZvY3VzYWJsZS9mb2N1c2FibGUuZGlyZWN0aXZlJztcbmltcG9ydCB7IFFkRXZlbnRCcm9rZXJTZXJ2aWNlIH0gZnJvbSAnLi4vY29yZS9zZXJ2aWNlcy9ldmVudC1icm9rZXIuc2VydmljZSc7XG5pbXBvcnQgeyBRZEZvcm1Db250cm9sIH0gZnJvbSAnLi4vZm9ybXMvcWQtZm9ybS5tb2R1bGUnO1xuaW1wb3J0IHsgUWRQYWdlRm9vdGVyU2VydmljZSB9IGZyb20gJy4uL3BhZ2Uvc2hhcmVkL3NlcnZpY2VzL3BhZ2UtZm9vdGVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgUWRQYWdlU3RvcmVTZXJ2aWNlIH0gZnJvbSAnLi4vcGFnZS9zaGFyZWQvc2VydmljZXMvcGFnZS1zdG9yZS5zZXJ2aWNlJztcbmltcG9ydCB7IFFkU2VjdGlvblRvb2xiYXJBY3Rpb25TZXJ2aWNlIH0gZnJvbSAnLi4vc2VjdGlvbi9zZXJ2aWNlcy9zZWN0aW9uLXRvb2xiYXItYWN0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgUWRRdWlja0VkaXRDb2x1bW4sIFFkUXVpY2tFZGl0Q29uZmlnLCBRZFF1aWNrRWRpdFNlY29uZGFyeUFjdGlvbiB9IGZyb20gJy4vbW9kZWwvcXVpY2stZWRpdC1jb25maWcnO1xuaW1wb3J0IHsgUWRRdWlja0VkaXREYXRhLCBRZFF1aWNrRWRpdERhdGFWYWx1ZSwgUWRRdWlja0VkaXRSb3cgfSBmcm9tICcuL21vZGVsL3F1aWNrLWVkaXQtZGF0YSc7XG5pbXBvcnQgeyBRZEN1c3RvbUZvckRpcmVjdGl2ZSB9IGZyb20gJy4vcWQtbmctZm9yLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBRZFRvb2x0aXAgfSBmcm9tICcuLi9mb3Jtcy9tb2RlbC9mb3Jtcy5pbnRlcmZhY2UnO1xuXG4vKipcbiAqIFRoZSAqKlFkUXVpY2tFZGl0Q29tcG9uZW50KiogaXMgYSBkeW5hbWljIHRvb2wgdGhhdCBlbmFibGVzIHVzZXJzIHRvIHN3aWZ0bHkgZWRpdCBkYXRhIHdpdGhvdXQgdGhlIG5lZWQgZm9yIHRyYWRpdGlvbmFsIGZvcm1zLlxuICogSXQgaXMgc3BlY2lmaWNhbGx5IGRlc2lnbmVkIGZvciBpbmxpbmUgZWRpdGluZywgcHJvdmlkaW5nIGEgbW9yZSBzZWFtbGVzcyBhbmQgZWZmaWNpZW50IHVzZXIgZXhwZXJpZW5jZS5cbiAqIFRoZSBjb21wb25lbnQgY3VycmVudGx5IHN1cHBvcnRzIGVkaXRpbmcgY29sdW1ucyB3aXRoIGRhdGEgdHlwZXMgc3VjaCBhcyBzdHJpbmcsIG51bWJlciwgYW5kIGVudW0uXG4gKiBJbiBhZGRpdGlvbiB0byBpdHMgZWRpdGluZyBjYXBhYmlsaXRpZXMsIHRoZSBRZFF1aWNrRWRpdENvbXBvbmVudCBhbHNvIG9mZmVycyBmZWF0dXJlcyBmb3IgYWRkaW5nIG5ldyByb3dzIGFuZCBkZWxldGluZyBleGlzdGluZyBvbmVzLlxuICpcbiAqIFF1aWNrRWRpdCBzdXBwb3J0cyB0d28gbW9kZXM6XG4gKiAtICoqUmVhY3RpdmUgRm9ybXMgTW9kZSoqIHZpYSBgZm9ybUFycmF5TmFtZWAg4oCTIHJlY29tbWVuZGVkIGZvciBmdWxsIGNvbnRyb2wgYW5kIHZhbGlkYXRpb24uXG4gKiAtICoqVGVtcGxhdGUgRGF0YSBNb2RlKiogdmlhIGBkYXRhYCBpbnB1dCDigJMgZm9yIHVzZSBjYXNlcyB3aXRob3V0IGV4dGVybmFsIGZvcm1zLlxuICpcbiAqICMjIyBVc2FnZVxuICpcbiAqICMjIyMgQ29uZmlndXJhdGlvblxuICpcbiAqIGBgYHRzXG4gKiB0eXBlIENvbHVtbkRlZmluaXRpb24gPSAncnVicmlrJyB8ICdkYXRhJyB8ICdzdGF0dXMnO1xuICogY29uc3QgY29uZmlnOiBRZFF1aWNrRWRpdENvbmZpZzxDb2x1bW5EZWZpbml0aW9uPiA9IHtcbiAqICAgY29sdW1uczogW1xuICogICAgIHtcbiAqICAgICAgIG5hbWU6ICdydWJyaWsnLFxuICogICAgICAgdHlwZTogJ3RleHQnLFxuICogICAgICAgaTE4bjogJ3RyYW5zbGF0aW9uLmtleS5ydWJyaWsnLFxuICogICAgICAgaXNFZGl0YWJsZTogKCkgPT4gZmFsc2VcbiAqICAgICB9LFxuICogICAgIHtcbiAqICAgICAgIG5hbWU6ICdkYXRhJyxcbiAqICAgICAgIHR5cGU6ICdpbnRlZ2VyJyxcbiAqICAgICAgIGkxOG46ICd0cmFuc2xhdGlvbi5rZXkuZGF0YScsXG4gKiAgICAgICBpc0VkaXRhYmxlOiAocm93LCBjb2x1bW4pID0+ICEhcm93WydydWJyaWsnXSxcbiAqICAgICAgIHZhbGlkYXRvcnM6IFtWYWxpZGF0b3JzLnJlcXVpcmVkXSAvLyBvbmx5IHJlbGV2YW50IGluIHRlbXBsYXRlIGRhdGEgbW9kZVxuICogICAgIH1cbiAqICAgXSxcbiAqICAgY2FuQWRkOiB0cnVlLFxuICogICBzZWNvbmRhcnlBY3Rpb25zOiBbLi4uXVxuICogfVxuICogYGBgXG4gKlxuICogIyMjIyBGb3JtQXJyYXkgKHJlY29tbWVuZGVkKVxuICpcbiAqIFRvIHVzZSBRdWlja0VkaXQgd2l0aCBBbmd1bGFyIFJlYWN0aXZlIEZvcm1zLCBkZWZpbmUgYSBGb3JtR3JvdXAgY29udGFpbmluZyBhIEZvcm1BcnJheS4gVGhlIGNvbnRyb2xzIG11c3QgbWF0Y2ggdGhlIGRlZmluZWQgY29sdW1ucy5cbiAqXG4gKiBgYGB0c1xuICogZm9ybSA9IG5ldyBGb3JtR3JvdXAoe1xuICogICBkYXRhOiBuZXcgRm9ybUFycmF5KFtcbiAqICAgICBuZXcgRm9ybUdyb3VwKHtcbiAqICAgICAgIHJ1YnJpazogbmV3IFFkRm9ybUNvbnRyb2woJ1RleHQnKSxcbiAqICAgICAgIGRhdGE6IG5ldyBRZEZvcm1Db250cm9sKDEyMylcbiAqICAgICB9KVxuICogICBdKVxuICogfSlcbiAqIGBgYFxuICpcbiAqIFRoZW4gYmluZCB0aGUgYGZvcm1BcnJheU5hbWVgIGRpcmVjdGl2ZSBpbiB0aGUgdGVtcGxhdGU6XG4gKlxuICogYGBgaHRtbFxuICogPGZvcm0gW2Zvcm1Hcm91cF09XCJmb3JtXCI+XG4gKiAgIDxxZC1xdWljay1lZGl0IFtjb25maWddPVwiY29uZmlnXCIgZm9ybUFycmF5TmFtZT1cImRhdGFcIj48L3FkLXF1aWNrLWVkaXQ+XG4gKiA8L2Zvcm0+XG4gKiBgYGBcbiAqXG4gKiBZb3UgY2FuIGFkZCBuZXcgcm93cyBieSByZWFjdGluZyB0byBgKGFkZE5ld0NsaWNrZWQpYDpcbiAqXG4gKiBgYGB0c1xuICogYWRkQ29udHJvbCgpOiB2b2lkIHtcbiAqICAgdGhpcy5mb3JtLmdldCgnZGF0YScpPy5pbnNlcnQoMCwgbmV3IEZvcm1Hcm91cCh7IC4uLiB9KSk7XG4gKiB9XG4gKiBgYGBcbiAqXG4gKiAjIyMjIFRlbXBsYXRlIERhdGEgKG9wdGlvbmFsKVxuICpcbiAqIEFsdGVybmF0aXZlbHksIHlvdSBjYW4gcHJvdmlkZSBhIHN0YXRpYyBgZGF0YWAgYXJyYXkuIFRoaXMgaXMgdXNlZnVsIGZvciByZWFkLW9ubHkgc2NlbmFyaW9zIHdpdGhvdXQgcmVhY3RpdmUgZm9ybXMuXG4gKlxuICogYGBgdHNcbiAqIGNvbnN0IGRhdGE6IFFkUXVpY2tFZGl0RGF0YTxNeUNvbHVtbnM+ID0gW1xuICogICB7IHJ1YnJpazogJ0ZvbycsIGRhdGE6IDQyIH0sXG4gKiAgIHsgcnVicmlrOiAnQmFyJywgZGF0YTogNzcgfVxuICogXTtcbiAqIGBgYFxuICpcbiAqIGBgYGh0bWxcbiAqIDxxZC1xdWljay1lZGl0IFtjb25maWddPVwiY29uZmlnXCIgW2RhdGFdPVwiZGF0YVwiPjwvcWQtcXVpY2stZWRpdD5cbiAqIGBgYFxuICpcbiAqICMjIyMgVmFsaWRhdGlvblxuICpcbiAqIC0gSW4gKipGb3JtQXJyYXkgbW9kZSoqLCB2YWxpZGF0b3JzIG11c3QgYmUgc2V0IGRpcmVjdGx5IG9uIHlvdXIgRm9ybUNvbnRyb2xzLiBWYWxpZGF0b3JzIGluIGBjb25maWcuY29sdW1uc2AgYXJlIGlnbm9yZWQuXG4gKiAtIEluICoqdGVtcGxhdGUgZGF0YSBtb2RlKiosIHZhbGlkYXRvcnMgZGVmaW5lZCBpbiBgY29uZmlnLmNvbHVtbnNgIGFyZSBhcHBsaWVkLlxuICpcbiAqICoqTm90ZTogRG8gbm90IGNvbWJpbmUgYm90aCBhcHByb2FjaGVzLiBXaGVuIHVzaW5nIGBmb3JtQXJyYXlOYW1lYCwgb25seSB0aGUgZXh0ZXJuYWwgRm9ybUdyb3VwIGlzIHVzZWQgZm9yIHZhbGlkYXRpb24gYW5kIHZhbHVlIGFjY2Vzcy4qKlxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdxZC1xdWljay1lZGl0JyxcbiAgdGVtcGxhdGVVcmw6ICdxdWljay1lZGl0LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJ3F1aWNrLWVkaXQuY29tcG9uZW50LnNjc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcbn0pXG5leHBvcnQgY2xhc3MgUWRRdWlja0VkaXRDb21wb25lbnQ8VCBleHRlbmRzIHN0cmluZz4gaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcywgT25EZXN0cm95IHtcbiAgLyoqXG4gICAqIENvbmZpZ3VyYXRpb24gb2YgdGhlIFF1aWNrRWRpdC4gVGhlIGdlbmVyaWMgdHlwZSBzcGVjaWZpZXMgdGhlIGNvbHVtbiBkZWZpbml0aW9uLiA8YnIgLz5cbiAgICpcbiAgICogKipVc2FnZToqKlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiB0eXBlIENvbHVtbkRlZmluaXRpb24gPSAnYXJ0aWNsZScgfCAnbWFzcycgfCAnZG9jdW1lbnRzJztcbiAgICogY29uc3QgY29uZmlnOiBRZFF1aWNrRWRpdENvbmZpZzxDb2x1bW5EZWZpbml0aW9uPiA9IHtcbiAgICogICBjb2x1bW5zOiBbXG4gICAqICAgICB7XG4gICAqICAgICAgIG5hbWU6ICdydWJyaWsnLFxuICAgKiAgICAgICB0eXBlOiAndGV4dCcsXG4gICAqICAgICAgIGkxOG46ICd0cmFuc2xhdGlvbi5rZXkucnVicmlrJyxcbiAgICogICAgICAgaXNFZGl0YWJsZTogKCkgPT4gZmFsc2VcbiAgICogICAgIH0sXG4gICAqICAgICB7XG4gICAqICAgICAgIG5hbWU6ICdkYXRhJyxcbiAgICogICAgICAgdHlwZTogJ2ludGVnZXInLFxuICAgKiAgICAgICBpMThuOiAndHJhbnNsYXRpb24ua2V5LmRhdGEnLFxuICAgKiAgICAgICBpc0VkaXRhYmxlOiAocm93LCBjb2x1bW4pID0+IHJvd1snYWN0aXZlJ10gPT0gMSxcbiAgICogICAgICAgdmFsaWRhdG9yczogW1ZhbGlkYXRvcnMucmVxdWlyZWRdXG4gICAqICAgICB9LFxuICAgKiAgICAge1xuICAgKiAgICAgICBuYW1lOiAnc2l6ZScsXG4gICAqICAgICAgIHR5cGU6ICdib29sZWFuJyxcbiAgICogICAgICAgaTE4bjogJ3RyYW5zbGF0aW9uLmtleS5zaXplJyxcbiAgICogICAgICAgdmFsaWRhdG9yczogW2N1c3RvbVZhbGlkYXRvckZ1bmN0aW9uKCldXG4gICAqICAgICB9XG4gICAqICAgXVxuICAgKiB9XG4gICAqL1xuICBASW5wdXQoeyByZXF1aXJlZDogdHJ1ZSB9KSBjb25maWchOiBRZFF1aWNrRWRpdENvbmZpZzxUPjtcblxuICAvKipcbiAgICogRGF0YSBwcm92aWRlciBmb3IgUXVpY2tFZGl0LlxuICAgKi9cbiAgQElucHV0KCkgZGF0YTogUWRRdWlja0VkaXREYXRhPFQ+IHwgdW5kZWZpbmVkO1xuXG4gIGdldCB0ZW1wbGF0ZURhdGEoKTogUWRRdWlja0VkaXREYXRhPFQ+IHtcbiAgICByZXR1cm4gdGhpcy5jb250cm9sQ29udGFpbmVyPy5jb250cm9sPy52YWx1ZSA/PyB0aGlzLmRhdGE7XG4gIH1cblxuICBnZXQgdGVtcGxhdGVEYXRhJCgpOiBPYnNlcnZhYmxlPFFkUXVpY2tFZGl0RGF0YTxUPj4ge1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLmNvbnRyb2xDb250YWluZXI/LmNvbnRyb2w/LnZhbHVlQ2hhbmdlcy5waXBlKHN0YXJ0V2l0aCh0aGlzLmNvbnRyb2xDb250YWluZXIuY29udHJvbC52YWx1ZSkpID8/IG9mKHRoaXMuZGF0YSlcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEEgc3RhdGljIHRlc3QgSUQgZm9yIGludGVncmF0aW9uIHRlc3RzIGNhbiBiZSBzZXQuIDxiciAvPlxuICAgKiBUaGUgdmFsdWUgZm9yIHRoZSBIVE1MIGF0dHJpYnV0ZSBbZGF0YS10ZXN0LWlkXS5cbiAgICovXG4gIEBJbnB1dCgnZGF0YS10ZXN0LWlkJylcbiAgdGVzdElkPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgZm9ybSBncm91cCBpbnN0YW5jZSBvZiBRZFF1aWNrRWRpdC5cbiAgICogVXNlIHRoaXMgZm9ybSBncm91cCB0byBiaW5kIGl0IHRvIHN0ZXAtY29udHJvbCBvZiBRZFN0ZXBwZXIgb3Igb3RoZXIgY3VzdG9tIGxvZ2ljcy5cbiAgICovXG4gIEBPdXRwdXQoKSBmb3JtR3JvdXBDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICBAT3V0cHV0KCkgYWRkTmV3Q2xpY2tlZCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcblxuICBAVmlld0NoaWxkcmVuKFFkRm9jdXNhYmxlRGlyZWN0aXZlKVxuICBmb2N1c2FibGVzOiBRdWVyeUxpc3Q8UWRGb2N1c2FibGVEaXJlY3RpdmU+IHwgdW5kZWZpbmVkO1xuXG4gIEBWaWV3Q2hpbGQoUWRDdXN0b21Gb3JEaXJlY3RpdmUpXG4gIGN1c3RvbUZvckRpcmVjdGl2ZSE6IFFkQ3VzdG9tRm9yRGlyZWN0aXZlO1xuXG4gIHF1aWNrRWRpdEZvcm1Hcm91cCE6IEZvcm1Hcm91cDtcbiAgdmlld29ubHkkOiBPYnNlcnZhYmxlPGJvb2xlYW4+ID0gb2YoZmFsc2UpO1xuICBhY3Rpb25zJCE6IE9ic2VydmFibGU8UWRRdWlja0VkaXRTZWNvbmRhcnlBY3Rpb248VD5bXT47XG5cbiAgcHJpdmF0ZSBfZGVzdHJveWVkJCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgZ2V0IGNvbnRyb2woKTogRm9ybUdyb3VwIHtcbiAgICByZXR1cm4gKHRoaXMuY29udHJvbENvbnRhaW5lcj8uY29udHJvbCA/PyB0aGlzLnF1aWNrRWRpdEZvcm1Hcm91cC5nZXQoJ3Jvd3MnKSkgYXMgRm9ybUdyb3VwO1xuICB9XG5cbiAgZ2V0IHNob3dTdGFuZGFsb25lQ3JlYXRlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhdGhpcy5jb250YWluZXJBY3Rpb25TZXJ2aWNlICYmICF0aGlzLnNlY3Rpb25BY3Rpb25TZXJ2aWNlICYmIHRoaXMuY29uZmlnLmNhbkFkZDtcbiAgfVxuXG4gIGdldCBjYW5BZGQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuY29uZmlnLmNhbkFkZCA/PyB0aGlzLnNlY3Rpb25BY3Rpb25TZXJ2aWNlICE9IG51bGw7XG4gIH1cblxuICBnZXQgcm93cygpOiBGb3JtQXJyYXkge1xuICAgIHJldHVybiB0aGlzLnF1aWNrRWRpdEZvcm1Hcm91cC5nZXQoJ3Jvd3MnKSBhcyBGb3JtQXJyYXk7XG4gIH1cblxuICBnZXQgdmlzaWJsZUNvbHVtbnMoKTogUWRRdWlja0VkaXRDb2x1bW48VD5bXSB7XG4gICAgcmV0dXJuIHRoaXMuY29uZmlnLmNvbHVtbnMuZmlsdGVyKGNvbHVtbiA9PiAhY29sdW1uLmlzSGlkZGVuKTtcbiAgfVxuXG4gIGdldCBpc0Zvcm1Db250cm9sKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmNvbnRyb2xDb250YWluZXIgIT0gbnVsbDtcbiAgfVxuXG4gIHRvZ2dsZXJEcmF3aW5nID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBmYjogRm9ybUJ1aWxkZXIsXG4gICAgQE9wdGlvbmFsKCkgcmVhZG9ubHkgZm9vdGVyU2VydmljZTogUWRQYWdlRm9vdGVyU2VydmljZSxcbiAgICBAT3B0aW9uYWwoKSByZWFkb25seSBwYWdlU2VydmljZTogUWRQYWdlU3RvcmVTZXJ2aWNlPGFueT4sXG4gICAgQE9wdGlvbmFsKCkgcHJpdmF0ZSByZWFkb25seSBzZWN0aW9uQWN0aW9uU2VydmljZTogUWRTZWN0aW9uVG9vbGJhckFjdGlvblNlcnZpY2UsXG4gICAgQE9wdGlvbmFsKCkgcHJpdmF0ZSByZWFkb25seSBjb250YWluZXJBY3Rpb25TZXJ2aWNlOiBRZENvbnRhaW5lckFjdGlvblNlcnZpY2UsXG4gICAgQE9wdGlvbmFsKCkgcHJpdmF0ZSByZWFkb25seSBldmVudEJyb2tlclNlcnZpY2U6IFFkRXZlbnRCcm9rZXJTZXJ2aWNlLFxuICAgIHByaXZhdGUgY2hhbmdlRGV0ZWN0b3JSZWY6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIEBPcHRpb25hbCgpIEBTZWxmKCkgcHJpdmF0ZSBjb250cm9sQ29udGFpbmVyOiBDb250cm9sQ29udGFpbmVyXG4gICkge1xuICAgIGlmICghdGhpcy5pc0Zvcm1Db250cm9sKSB7XG4gICAgICB0aGlzLnF1aWNrRWRpdEZvcm1Hcm91cCA9IHRoaXMuZmIuZ3JvdXAoe1xuICAgICAgICByb3dzOiB0aGlzLmZiLmFycmF5KFtdKVxuICAgICAgfSk7XG5cbiAgICAgIHRoaXMucXVpY2tFZGl0Rm9ybUdyb3VwLnZhbHVlQ2hhbmdlcy5waXBlKHRha2VVbnRpbERlc3Ryb3llZCgpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICB0aGlzLmZvcm1Hcm91cENoYW5nZS5lbWl0KHRoaXMucXVpY2tFZGl0Rm9ybUdyb3VwKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMudmFsaWRhdGVTZXR1cCgpO1xuICAgIHRoaXMuaW5pdE9wTW9kZVN1YnNjcmlwdGlvbigpO1xuICAgIHRoaXMuaW5pdENyZWF0aW5nKCk7XG4gICAgdGhpcy5pbml0QWN0aW9uc1N0cmVhbSgpO1xuICAgIHRoaXMuaW5pdE1hbnVhbENoYW5nZURldGVjdGlvbkZvckNvbnRyb2xSZXNldCgpO1xuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGlmIChjaGFuZ2VzWydkYXRhJ10gfHwgY2hhbmdlc1snY29uZmlnJ10pIHRoaXMuaW5pdFJvd3MoKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuX2Rlc3Ryb3llZCQubmV4dCgpO1xuICAgIHRoaXMuX2Rlc3Ryb3llZCQuY29tcGxldGUoKTtcbiAgfVxuXG4gIGhhbmRsZVNlY29uZGFyeUFjdGlvbihhY3Rpb246IFFkUXVpY2tFZGl0U2Vjb25kYXJ5QWN0aW9uPFQ+LCByb3dJbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgaWYgKCFhY3Rpb24pIHJldHVybjtcblxuICAgIGNvbnN0IHNlbGVjdGVkUm93RGF0YSA9XG4gICAgICAodGhpcy5jb250cm9sQ29udGFpbmVyPy5jb250cm9sIGFzIEZvcm1BcnJheSk/LmNvbnRyb2xzW3Jvd0luZGV4XS52YWx1ZSA/PyB0aGlzLnJvd3MudmFsdWVbcm93SW5kZXhdO1xuICAgIGFjdGlvbi5oYW5kbGVyKHNlbGVjdGVkUm93RGF0YSk7XG4gIH1cblxuICBnZXRDb21wb25lbnRUeXBlKGNvbHVtbjogUWRRdWlja0VkaXRDb2x1bW48VD4pOiBUeXBlPHVua25vd24+IHwgbnVsbCB7XG4gICAgcmV0dXJuIENPTVBPTkVOVF9NQVBbY29sdW1uLnR5cGVdIHx8IG51bGw7XG4gIH1cblxuICBnZXRDb21wb25lbnRJbnB1dHMoY29sdW1uOiBRZFF1aWNrRWRpdENvbHVtbjxUPiwgcm93OiBRZFF1aWNrRWRpdFJvdzxUPik6IGFueSB7XG4gICAgY29uc3QgdGVzdElkID0gdGhpcy50ZXN0SWQgJiYgdGhpcy50ZXN0SWQgKyAnLWNlbGwtJyArIGNvbHVtbi5uYW1lO1xuXG4gICAgaWYgKGNvbHVtbi50eXBlID09PSAnZW51bScpXG4gICAgICByZXR1cm4ge1xuICAgICAgICBkYXRhOiBjb2x1bW4ub3B0aW9ucz8uZmluZChvcHRpb24gPT4gb3B0aW9uLnZhbHVlID09PSByb3dbY29sdW1uLm5hbWVdKT8uaTE4bixcbiAgICAgICAgdGVzdElkXG4gICAgICB9O1xuXG4gICAgcmV0dXJuIHsgZGF0YTogcm93W2NvbHVtbi5uYW1lXSwgdGVzdElkIH07XG4gIH1cblxuICBjcmVhdGVSb3coKTogdm9pZCB7XG4gICAgdGhpcy5yZWRyYXdPbk5leHRDaGFuZ2UoKTtcblxuICAgIGlmICh0aGlzLmNvbnRyb2xDb250YWluZXIpIHtcbiAgICAgIHRoaXMuYWRkTmV3Q2xpY2tlZC5uZXh0KCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGZvcm1Hcm91cCA9IE9iamVjdC5hc3NpZ24oXG4gICAgICAgIHt9LFxuICAgICAgICAuLi50aGlzLmNvbmZpZy5jb2x1bW5zLm1hcChjb2x1bW4gPT4gKHtcbiAgICAgICAgICBbY29sdW1uLm5hbWVdOiBuZXcgUWRGb3JtQ29udHJvbDxRZFF1aWNrRWRpdERhdGFWYWx1ZT4odW5kZWZpbmVkLCBjb2x1bW4udmFsaWRhdG9ycylcbiAgICAgICAgfSkpXG4gICAgICApO1xuXG4gICAgICB0aGlzLnJvd3MuaW5zZXJ0KDAsIG5ldyBGb3JtR3JvdXAoZm9ybUdyb3VwKSk7XG5cbiAgICAgIGlmICghdGhpcy5kYXRhKSB0aGlzLmRhdGEgPSBbXTtcblxuICAgICAgdGhpcy5kYXRhLnVuc2hpZnQoXG4gICAgICAgIE9iamVjdC5hc3NpZ24oe30sIC4uLnRoaXMuY29uZmlnLmNvbHVtbnMubWFwKGNvbHVtbiA9PiAoeyBbY29sdW1uLm5hbWVdOiBudWxsIH0pKSkgYXMgUWRRdWlja0VkaXRSb3c8VD5cbiAgICAgICk7XG4gICAgfVxuXG4gICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XG5cbiAgICB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB0aGlzLmZvY3VzRmlyc3RDb250cm9sKCkpO1xuICB9XG5cbiAgcmVtb3ZlUm93KGluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLnJlZHJhd09uTmV4dENoYW5nZSgpO1xuXG4gICAgaWYgKHRoaXMuY29udHJvbENvbnRhaW5lcikge1xuICAgICAgKHRoaXMuY29udHJvbENvbnRhaW5lci5jb250cm9sIGFzIEZvcm1BcnJheSkucmVtb3ZlQXQoaW5kZXgpO1xuICAgICAgdGhpcy5jb250cm9sQ29udGFpbmVyLmNvbnRyb2w/LnNldFZhbHVlKHRoaXMuY29udHJvbENvbnRhaW5lci52YWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucm93cy5yZW1vdmVBdChpbmRleCk7XG4gICAgICB0aGlzLmRhdGE/LnNwbGljZShpbmRleCwgMSk7XG4gICAgfVxuICB9XG5cbiAgaGFzVG9vbHRpcCh0b29sdGlwOiBRZFRvb2x0aXApOiBib29sZWFuIHtcbiAgICByZXR1cm4gISF0b29sdGlwICYmICF0b29sdGlwLmhpZGRlbjtcbiAgfVxuXG4gIHByaXZhdGUgaW5pdFJvd3MoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuY29udHJvbENvbnRhaW5lcikgcmV0dXJuO1xuXG4gICAgd2hpbGUgKHRoaXMucm93cy5sZW5ndGgpIHtcbiAgICAgIHRoaXMucm93cy5yZW1vdmVBdCgwKTtcbiAgICB9XG5cbiAgICB0aGlzLmRhdGE/LmZvckVhY2gocm93ID0+IHRoaXMuY3JlYXRlRm9ybUdyb3VwUm93KHJvdykpO1xuICB9XG5cbiAgcHJpdmF0ZSBpbml0Q3JlYXRpbmcoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuY29udGFpbmVyQWN0aW9uU2VydmljZSlcbiAgICAgIHRoaXMuY29udGFpbmVyQWN0aW9uU2VydmljZS5hY3Rpb24kLnBpcGUodGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3llZCQpKS5zdWJzY3JpYmUoKCkgPT4gdGhpcy5jcmVhdGVSb3coKSk7XG5cbiAgICBpZiAodGhpcy5zZWN0aW9uQWN0aW9uU2VydmljZSlcbiAgICAgIHRoaXMuc2VjdGlvbkFjdGlvblNlcnZpY2UuYWN0aW9uJFxuICAgICAgICAucGlwZShcbiAgICAgICAgICB0YWtlVW50aWwodGhpcy5fZGVzdHJveWVkJCksXG4gICAgICAgICAgZmlsdGVyKHR5cGUgPT4gdHlwZSA9PT0gJ2FkZE5ldycpXG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB0aGlzLmNyZWF0ZVJvdygpKTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlRm9ybUdyb3VwUm93KHJvdzogUWRRdWlja0VkaXRSb3c8VD4pOiB2b2lkIHtcbiAgICBjb25zdCBncm91cDogYW55ID0ge307XG5cbiAgICB0aGlzLmNvbmZpZy5jb2x1bW5zLmZvckVhY2goY29sdW1uID0+IHtcbiAgICAgIGdyb3VwW2NvbHVtbi5uYW1lXSA9IG5ldyBRZEZvcm1Db250cm9sPFFkUXVpY2tFZGl0RGF0YVZhbHVlPihyb3dbY29sdW1uLm5hbWVdLCBjb2x1bW4udmFsaWRhdG9ycyk7XG4gICAgfSk7XG5cbiAgICBjb25zdCBmb3JtID0gbmV3IEZvcm1Hcm91cChncm91cCk7XG4gICAgdGhpcy5yb3dzLnB1c2goZm9ybSk7XG4gIH1cblxuICBwcml2YXRlIGZvY3VzRmlyc3RDb250cm9sKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5mb2N1c2FibGVzKSByZXR1cm47XG5cbiAgICB0aGlzLmZvY3VzYWJsZXMuZmlyc3Q/LmZvY3VzKCk7XG4gIH1cblxuICBwcml2YXRlIGluaXRPcE1vZGVTdWJzY3JpcHRpb24oKTogdm9pZCB7XG4gICAgdGhpcy52aWV3b25seSQgPVxuICAgICAgdHlwZW9mIHRoaXMuY29uZmlnLnZpZXdvbmx5ID09PSAnYm9vbGVhbidcbiAgICAgICAgPyBvZih0aGlzLmNvbmZpZy52aWV3b25seSlcbiAgICAgICAgOiB0aGlzLmV2ZW50QnJva2VyU2VydmljZT8uY29uc3VtZTx7IGlzVmlld29ubHk6IGJvb2xlYW4gfT4oJ29wZXJhdGlvbl9tb2RlX2NoYW5nZWQnKS5waXBlKFxuICAgICAgICAgICAgbWFwKGUgPT4gZS5wYXlsb2FkLmlzVmlld29ubHkpLFxuICAgICAgICAgICAgc3RhcnRXaXRoKGZhbHNlKVxuICAgICAgICAgICkgPz8gb2YoZmFsc2UpO1xuICB9XG5cbiAgcHJpdmF0ZSB2YWxpZGF0ZVNldHVwKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmRhdGEgIT0gbnVsbCAmJiB0aGlzLmNvbnRyb2xDb250YWluZXIgIT0gbnVsbClcbiAgICAgIGNvbnNvbGUud2FybignUWRRdWlja0VkaXQgfCBEYXRhIGlzIGJlaW5nIGlnbm9yZWQgd2hlbiB1c2VkIGFzIEZvcm1BcnJheScpO1xuXG4gICAgaWYgKCF0aGlzLmRhdGEgJiYgIXRoaXMuY29udHJvbENvbnRhaW5lcilcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgJ1FkUXVpY2tFZGl0IHwgRWl0aGVyIHVzZSBRdWlja0VkaXQgYXMgRm9ybUNvbnRyb2wgd2l0aCBmb3JtQXJyYXlOYW1lIGJpbmRpbmcgb3IgcHJvdmlkZSBkYXRhIHZpYSBpbnB1dC4nXG4gICAgICApO1xuXG4gICAgaWYgKHRoaXMuY29udHJvbENvbnRhaW5lciAmJiB0aGlzLmNvbmZpZy5jb2x1bW5zLnNvbWUoY29sdW1uID0+IGNvbHVtbi52YWxpZGF0b3JzICE9IG51bGwpKVxuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAnUWRRdWlja0VkaXQgfCBQbGVhc2UgcHJvdmlkZSB2YWxpZGF0b3JzIGluIHRoZSBzcGVjaWZpYyBGb3JtQ29udHJvbHMgZGlyZWN0bHkgZm9yIGRlZmF1bHQgdmFsaWRhdG9ycyB0byBiZSBhZGRlZC4nXG4gICAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSByZWRyYXdPbk5leHRDaGFuZ2UoKTogdm9pZCB7XG4gICAgdGhpcy50b2dnbGVyRHJhd2luZyA9ICF0aGlzLnRvZ2dsZXJEcmF3aW5nO1xuICB9XG5cbiAgcHJpdmF0ZSBpbml0QWN0aW9uc1N0cmVhbSgpOiB2b2lkIHtcbiAgICB0aGlzLmFjdGlvbnMkID0gY29tYmluZUxhdGVzdChbb2YodGhpcy5jb25maWcuc2Vjb25kYXJ5QWN0aW9ucyA/PyBbXSksIHRoaXMudmlld29ubHkkXSkucGlwZShcbiAgICAgIG1hcCgoW2FjdGlvbnMsIGlzVmlld29ubHldKSA9PiB0aGlzLmZpbHRlckFjdGlvbnNCeU1vZGUoYWN0aW9ucywgaXNWaWV3b25seSkpXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgZmlsdGVyQWN0aW9uc0J5TW9kZShcbiAgICBhY3Rpb25zOiBRZFF1aWNrRWRpdFNlY29uZGFyeUFjdGlvbjxUPltdLFxuICAgIGlzVmlld29ubHk6IGJvb2xlYW5cbiAgKTogUWRRdWlja0VkaXRTZWNvbmRhcnlBY3Rpb248VD5bXSB7XG4gICAgY29uc3QgY3VycmVudE1vZGUgPSBpc1ZpZXdvbmx5ID8gJ3ZpZXcnIDogJ2VkaXQnO1xuXG4gICAgcmV0dXJuIGFjdGlvbnMuZmlsdGVyKGFjdGlvbiA9PiAhYWN0aW9uLm9wZXJhdGlvbk1vZGUgfHwgYWN0aW9uLm9wZXJhdGlvbk1vZGUgPT09IGN1cnJlbnRNb2RlKTtcbiAgfVxuXG4gIHByaXZhdGUgaW5pdE1hbnVhbENoYW5nZURldGVjdGlvbkZvckNvbnRyb2xSZXNldCgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuaXNGb3JtQ29udHJvbCkgcmV0dXJuO1xuXG4gICAgdGhpcy5jb250cm9sQ29udGFpbmVyLmNvbnRyb2whLnZhbHVlQ2hhbmdlcy5waXBlKHRhcCgoKSA9PiB0aGlzLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKSkpLnN1YnNjcmliZSgpO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwiZWRpdGFibGUtYWN0aW9uc1wiICpuZ0lmPVwic2hvd1N0YW5kYWxvbmVDcmVhdGVcIj5cbiAgPGJ1dHRvblxuICAgIHFkQnV0dG9uXG4gICAgcWRCdXR0b25HaG9zdFxuICAgIGljb249XCJwbHVzXCJcbiAgICAoY2xpY2spPVwiY3JlYXRlUm93KClcIlxuICAgIFtkYXRhLXRlc3QtaWRdPVwidGVzdElkICsgJy1idXR0b24tYWRkLW5ldydcIlxuICAgIGNsYXNzPVwiY3JlYXRlLWJ1dHRvbi1zdGFuZGFsb25lXCJcbiAgPlxuICAgIHt7IGNvbmZpZy5zdGFuZGFsb25lQ3JlYXRlTGFiZWw/LmkxOG4gPz8gXCJpMThuLnFkLnF1aWNrLmVkaXQuY3JlYXRlQnV0dG9uTGFiZWxcIiB8IHRyYW5zbGF0ZSB9fVxuICA8L2J1dHRvbj5cbjwvZGl2PlxuXG48ZGl2IGNsYXNzPVwidGFibGVcIiBbZm9ybUdyb3VwXT1cImNvbnRyb2xcIj5cbiAgPGRpdiBjbGFzcz1cInRhYmxlLWhlYWRlclwiICpuZ0lmPVwiIWNvbmZpZy5jYW5BZGQgfHwgdGVtcGxhdGVEYXRhLmxlbmd0aCA+IDAgfHwgY29uZmlnLmVtcHR5U3RhdGVWaWV3XCI+XG4gICAgPGRpdiBjbGFzcz1cInRhYmxlLXJvd1wiPlxuICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLWNlbGxcIiAqbmdGb3I9XCJsZXQgaGVhZGVyIG9mIHZpc2libGVDb2x1bW5zXCI+XG4gICAgICAgIHt7IGhlYWRlcj8uaTE4biB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICA8cWQtaWNvblxuICAgICAgICAgICpuZ0lmPVwiaGFzVG9vbHRpcChoZWFkZXI/LnRvb2x0aXApXCJcbiAgICAgICAgICBpY29uPVwiY2lyY2xlSW5mb1wiXG4gICAgICAgICAgY2xhc3M9XCJhZGRpdGlvbmFsLWluZm9cIlxuICAgICAgICAgIHFkVG9vbHRpcE9uQ2xpY2tcbiAgICAgICAgICBbcWRUb29sdGlwQ29udGVudF09XCJoZWFkZXI/LnRvb2x0aXA/LmNvbnRlbnRcIlxuICAgICAgICA+PC9xZC1pY29uPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwidGFibGUtY2VsbCBhY3Rpb25zLWNvbHVtblwiICpuZ0lmPVwiY29uZmlnPy5zZWNvbmRhcnlBY3Rpb25zPy5sZW5ndGggPiAwXCI+XG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJtZW51LWJ1dHRvblwiPlxuICAgICAgICAgIDxxZC1pY29uIGljb249XCJvdmVyZmxvd01lbnVIb3Jpem9udGFsXCI+PC9xZC1pY29uPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgPGRpdiBjbGFzcz1cInRhYmxlLWJvZHlcIj5cbiAgICA8ZGl2XG4gICAgICBjbGFzcz1cInRhYmxlLXJvd1wiXG4gICAgICAqcWRDdXN0b21Gb3I9XCJsZXQgcm93IG9mIHRlbXBsYXRlRGF0YTsgbGV0IHJvd0luZGV4ID0gaW5kZXg7IHRvZ2dsZXI6IHRvZ2dsZXJEcmF3aW5nXCJcbiAgICAgIFtmb3JtR3JvdXBOYW1lXT1cInJvd0luZGV4XCJcbiAgICA+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBjb2x1bW4gb2YgdmlzaWJsZUNvbHVtbnNcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLWNlbGxcIj5cbiAgICAgICAgICA8cWQtZHJvcGRvd25cbiAgICAgICAgICAgIFtjb25maWddPVwie1xuICAgICAgICAgICAgICBmaWx0ZXI6IGNvbHVtbi5maWx0ZXIsXG4gICAgICAgICAgICAgIG9wdGlvbnM6IGNvbHVtbi5vcHRpb25zLFxuICAgICAgICAgICAgICBwbGFjZWhvbGRlcjogY29sdW1uLnBsYWNlaG9sZGVyLFxuICAgICAgICAgICAgICBwbGFjZWhvbGRlclByZWZpeDogY29sdW1uLnBsYWNlaG9sZGVyUHJlZml4LFxuICAgICAgICAgICAgICB2aWV3b25seTogKHZpZXdvbmx5JCB8IGFzeW5jKSA9PT0gdHJ1ZSB8fCAhY29sdW1uLmlzRWRpdGFibGUocm93LCBjb2x1bW4ubmFtZSlcbiAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgW2RhdGEtdGVzdC1pZF09XCJjb2x1bW4ubmFtZSArIHJvd0luZGV4XCJcbiAgICAgICAgICAgICpuZ0lmPVwiY29sdW1uLnR5cGUgPT09ICdlbnVtJzsgZWxzZSBvdGhlclR5cGVzXCJcbiAgICAgICAgICAgIFtkZW5zZV09XCJ0cnVlXCJcbiAgICAgICAgICAgIFtmb3JtQ29udHJvbF09XCIkYW55KGNvbnRyb2wuY29udHJvbHNbcm93SW5kZXhdKT8uY29udHJvbHNbY29sdW1uLm5hbWVdXCJcbiAgICAgICAgICAgIHFkRm9jdXNhYmxlXG4gICAgICAgICAgICBjbGFzcz1cImRyb3Bkb3duXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgPC9xZC1kcm9wZG93bj5cblxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjb3RoZXJUeXBlcz5cbiAgICAgICAgICAgIDxxZC1pbnB1dFxuICAgICAgICAgICAgICBbZGF0YS10ZXN0LWlkXT1cImNvbHVtbi5uYW1lICsgcm93SW5kZXhcIlxuICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cImNvbHVtbi5uYW1lXCJcbiAgICAgICAgICAgICAgKm5nSWY9XCJjb2x1bW4udHlwZSAhPT0gJ2VudW0nICYmICRhbnkoY29udHJvbC5jb250cm9sc1tyb3dJbmRleF0pPy5jb250cm9sc1tjb2x1bW4ubmFtZV1cIlxuICAgICAgICAgICAgICBbY29uZmlnXT1cIntcbiAgICAgICAgICAgICAgICBpbnB1dFR5cGU6IGNvbHVtbi50eXBlID09PSAnaW50ZWdlcicgPyAnbnVtYmVyJyA6ICd0ZXh0JyxcbiAgICAgICAgICAgICAgICB2aWV3b25seTogKHZpZXdvbmx5JCB8IGFzeW5jKSA9PT0gdHJ1ZSB8fCAhY29sdW1uLmlzRWRpdGFibGUocm93LCBjb2x1bW4ubmFtZSlcbiAgICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICAgIHFkRm9jdXNhYmxlXG4gICAgICAgICAgICA+PC9xZC1pbnB1dD5cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPHRkXG4gICAgICAgICpuZ0lmPVwiY29uZmlnLnNlY29uZGFyeUFjdGlvbnM/Lmxlbmd0aCA+IDAgfHwgY2FuQWRkXCJcbiAgICAgICAgY2xhc3M9XCJ0YWJsZS1jZWxsIGFjdGlvbnNcIlxuICAgICAgICBbYXR0ci5kYXRhLXRlc3QtaWRdPVwidGVzdElkICsgJy1jZWxsLWlubGluZS1hY3Rpb25zJ1wiXG4gICAgICA+XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICBbcWRQb3BvdmVyT25DbGlja109XCJtZW51XCJcbiAgICAgICAgICBbcWRQb3BvdmVyQ2xvc2VTdHJhdGVneV09XCInb25FdmVyeUNsaWNrJ1wiXG4gICAgICAgICAgW3FkUG9wb3ZlclN0b3BQcm9wYWdhdGlvbl09XCJ0cnVlXCJcbiAgICAgICAgICBjbGFzcz1cIm1lbnUtYnV0dG9uXCJcbiAgICAgICAgICBkYXRhLXRlc3Q9XCJzZWNvbmRhcnktYWN0aW9ucy10b2dnbGVyXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxxZC1pY29uIGljb249XCJvdmVyZmxvd01lbnVIb3Jpem9udGFsXCI+PC9xZC1pY29uPlxuICAgICAgICA8L2J1dHRvbj5cblxuICAgICAgICA8bmctdGVtcGxhdGUgI21lbnU+XG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgKm5nRm9yPVwibGV0IHNlY29uZGFyeUFjdGlvbiBvZiBhY3Rpb25zJCB8IGFzeW5jXCJcbiAgICAgICAgICAgIGNsYXNzPVwic2Vjb25kYXJ5LWFjdGlvbnNcIlxuICAgICAgICAgICAgW25nQ2xhc3NdPVwieyBkaXNhYmxlZDogc2Vjb25kYXJ5QWN0aW9uLmlzRGlzYWJsZWQgfVwiXG4gICAgICAgICAgICAoY2xpY2spPVwiaGFuZGxlU2Vjb25kYXJ5QWN0aW9uKHNlY29uZGFyeUFjdGlvbiwgcm93SW5kZXgpXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICB7eyBzZWNvbmRhcnlBY3Rpb24ubGFiZWwuaTE4biB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICpuZ0lmPVwiY2FuQWRkICYmICh2aWV3b25seSQgfCBhc3luYykgPT09IGZhbHNlXCJcbiAgICAgICAgICAgIGNsYXNzPVwic2Vjb25kYXJ5LWFjdGlvbnNcIlxuICAgICAgICAgICAgKGNsaWNrKT1cInJlbW92ZVJvdyhyb3dJbmRleClcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIHt7IFwiaTE4bi5xZC5xdWljay5lZGl0LnJlbW92ZUJ1dHRvbkxhYmVsXCIgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgIDwvdGQ+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPVwiZW1wdHktYm9keVwiICpuZ0lmPVwiY29uZmlnLmVtcHR5U3RhdGVWaWV3ICYmICFjb25maWcuZW1wdHlTdGF0ZVZpZXcuZGlzYWJsZWQgJiYgdGVtcGxhdGVEYXRhLmxlbmd0aCA9PT0gMFwiPlxuICAgIDxwPnt7IGNvbmZpZy5lbXB0eVN0YXRlVmlldy5pMThuIHwgdHJhbnNsYXRlIH19PC9wPlxuICA8L2Rpdj5cbjwvZGl2PlxuIl19
@@ -19155,7 +19155,13 @@ class QdPageStoreService {
19155
19155
  }
19156
19156
  initPageState(config) {
19157
19157
  this.config = config;
19158
- this.config?.pageType === 'inspect' ? this.toggleViewonly(true) : this.toggleViewonly(false);
19158
+ if (this.config?.pageType === 'inspect') {
19159
+ const operationMode = this.config.pageTypeConfig?.operationMode;
19160
+ this.toggleViewonly(operationMode !== 'edit');
19161
+ }
19162
+ else {
19163
+ this.toggleViewonly(false);
19164
+ }
19159
19165
  }
19160
19166
  getConfig() {
19161
19167
  return this.config;
@@ -33542,6 +33548,7 @@ class QdPageObjectHeaderComponent {
33542
33548
  _pageObjectDataSubject = new BehaviorSubject({});
33543
33549
  _isLoadingSubject = new BehaviorSubject(false);
33544
33550
  _customActionsSubject = new BehaviorSubject({ actions: [] });
33551
+ _customActionsSub;
33545
33552
  _destroyed$ = new Subject();
33546
33553
  pageObjectData$ = this._pageObjectDataSubject.asObservable();
33547
33554
  isLoading$ = this._isLoadingSubject.asObservable().pipe(debounceTime(400));
@@ -33733,17 +33740,32 @@ class QdPageObjectHeaderComponent {
33733
33740
  }))));
33734
33741
  }
33735
33742
  updateCustomActions() {
33736
- if (this.config.pageType === 'inspect') {
33737
- const operationMode = this.config.pageTypeConfig?.operationMode;
33738
- if (operationMode)
33739
- this.pageStoreService.toggleViewonly(operationMode === 'view');
33740
- this.pageStoreService.isViewonly$.pipe(takeUntil(this._destroyed$)).subscribe(isViewonly => {
33741
- const customActions = this.config.pageTypeConfig?.customActions ?? [];
33742
- this._customActionsSubject.next(this.getCustomActionsByMode(customActions, isViewonly ? 'view' : 'edit'));
33743
- });
33743
+ // 1. Handle non-inspect pages early
33744
+ if (this.config.pageType !== 'inspect') {
33745
+ const actions = this.config.pageTypeConfig?.customActions ?? [];
33746
+ this._customActionsSubject.next({ actions });
33747
+ return;
33744
33748
  }
33745
- if (this.config.pageType !== 'inspect')
33746
- this._customActionsSubject.next({ actions: this.config.pageTypeConfig?.customActions ?? [] });
33749
+ // 2. Setup Inspect-specific logic
33750
+ const config = this.config.pageTypeConfig;
33751
+ if (config?.operationMode) {
33752
+ this.pageStoreService.toggleViewonly(config.operationMode === 'view');
33753
+ }
33754
+ this.subscribeToViewOnlyMode();
33755
+ }
33756
+ subscribeToViewOnlyMode() {
33757
+ this._customActionsSub?.unsubscribe();
33758
+ this._customActionsSub = this.pageStoreService.isViewonly$
33759
+ .pipe(takeUntil(this._destroyed$))
33760
+ .subscribe(isViewonly => {
33761
+ const mode = isViewonly ? 'view' : 'edit';
33762
+ const config = this.config.pageTypeConfig;
33763
+ if (config) {
33764
+ config.operationMode = mode;
33765
+ }
33766
+ const actions = config?.customActions ?? [];
33767
+ this._customActionsSubject.next(this.getCustomActionsByMode(actions, mode));
33768
+ });
33747
33769
  }
33748
33770
  getCustomActionsByMode(customActions, mode) {
33749
33771
  const actions = customActions
@@ -38315,9 +38337,7 @@ class QdQuickEditComponent {
38315
38337
  initManualChangeDetectionForControlReset() {
38316
38338
  if (!this.isFormControl)
38317
38339
  return;
38318
- this.controlContainer.control.valueChanges
38319
- .pipe(startWith(this.controlContainer.control.value.length), map(() => this.controlContainer.control.value.length), distinctUntilChanged(), tap(() => this.changeDetectorRef.detectChanges()))
38320
- .subscribe();
38340
+ this.controlContainer.control.valueChanges.pipe(tap(() => this.changeDetectorRef.detectChanges())).subscribe();
38321
38341
  }
38322
38342
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: QdQuickEditComponent, deps: [{ token: i1$4.FormBuilder }, { token: QdPageFooterService, optional: true }, { token: QdPageStoreService, optional: true }, { token: QdSectionToolbarActionService, optional: true }, { token: QdContainerActionService, optional: true }, { token: QdEventBrokerService, optional: true }, { token: i0.ChangeDetectorRef }, { token: i1$4.ControlContainer, optional: true, self: true }], target: i0.ɵɵFactoryTarget.Component });
38323
38343
  static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.9", type: QdQuickEditComponent, selector: "qd-quick-edit", inputs: { config: "config", data: "data", testId: ["data-test-id", "testId"] }, outputs: { formGroupChange: "formGroupChange", addNewClicked: "addNewClicked" }, viewQueries: [{ propertyName: "customForDirective", first: true, predicate: QdCustomForDirective, descendants: true }, { propertyName: "focusables", predicate: QdFocusableDirective, descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"editable-actions\" *ngIf=\"showStandaloneCreate\">\n <button\n qdButton\n qdButtonGhost\n icon=\"plus\"\n (click)=\"createRow()\"\n [data-test-id]=\"testId + '-button-add-new'\"\n class=\"create-button-standalone\"\n >\n {{ config.standaloneCreateLabel?.i18n ?? \"i18n.qd.quick.edit.createButtonLabel\" | translate }}\n </button>\n</div>\n\n<div class=\"table\" [formGroup]=\"control\">\n <div class=\"table-header\" *ngIf=\"!config.canAdd || templateData.length > 0 || config.emptyStateView\">\n <div class=\"table-row\">\n <div class=\"table-cell\" *ngFor=\"let header of visibleColumns\">\n {{ header?.i18n | translate }}\n <qd-icon\n *ngIf=\"hasTooltip(header?.tooltip)\"\n icon=\"circleInfo\"\n class=\"additional-info\"\n qdTooltipOnClick\n [qdTooltipContent]=\"header?.tooltip?.content\"\n ></qd-icon>\n </div>\n <div class=\"table-cell actions-column\" *ngIf=\"config?.secondaryActions?.length > 0\">\n <button class=\"menu-button\">\n <qd-icon icon=\"overflowMenuHorizontal\"></qd-icon>\n </button>\n </div>\n </div>\n </div>\n <div class=\"table-body\">\n <div\n class=\"table-row\"\n *qdCustomFor=\"let row of templateData; let rowIndex = index; toggler: togglerDrawing\"\n [formGroupName]=\"rowIndex\"\n >\n <ng-container *ngFor=\"let column of visibleColumns\">\n <div class=\"table-cell\">\n <qd-dropdown\n [config]=\"{\n filter: column.filter,\n options: column.options,\n placeholder: column.placeholder,\n placeholderPrefix: column.placeholderPrefix,\n viewonly: (viewonly$ | async) === true || !column.isEditable(row, column.name)\n }\"\n [data-test-id]=\"column.name + rowIndex\"\n *ngIf=\"column.type === 'enum'; else otherTypes\"\n [dense]=\"true\"\n [formControl]=\"$any(control.controls[rowIndex])?.controls[column.name]\"\n qdFocusable\n class=\"dropdown\"\n >\n </qd-dropdown>\n\n <ng-template #otherTypes>\n <qd-input\n [data-test-id]=\"column.name + rowIndex\"\n [formControlName]=\"column.name\"\n *ngIf=\"column.type !== 'enum' && $any(control.controls[rowIndex])?.controls[column.name]\"\n [config]=\"{\n inputType: column.type === 'integer' ? 'number' : 'text',\n viewonly: (viewonly$ | async) === true || !column.isEditable(row, column.name)\n }\"\n qdFocusable\n ></qd-input>\n </ng-template>\n </div>\n </ng-container>\n <td\n *ngIf=\"config.secondaryActions?.length > 0 || canAdd\"\n class=\"table-cell actions\"\n [attr.data-test-id]=\"testId + '-cell-inline-actions'\"\n >\n <button\n type=\"button\"\n [qdPopoverOnClick]=\"menu\"\n [qdPopoverCloseStrategy]=\"'onEveryClick'\"\n [qdPopoverStopPropagation]=\"true\"\n class=\"menu-button\"\n data-test=\"secondary-actions-toggler\"\n >\n <qd-icon icon=\"overflowMenuHorizontal\"></qd-icon>\n </button>\n\n <ng-template #menu>\n <button\n *ngFor=\"let secondaryAction of actions$ | async\"\n class=\"secondary-actions\"\n [ngClass]=\"{ disabled: secondaryAction.isDisabled }\"\n (click)=\"handleSecondaryAction(secondaryAction, rowIndex)\"\n >\n {{ secondaryAction.label.i18n | translate }}\n </button>\n <button\n *ngIf=\"canAdd && (viewonly$ | async) === false\"\n class=\"secondary-actions\"\n (click)=\"removeRow(rowIndex)\"\n >\n {{ \"i18n.qd.quick.edit.removeButtonLabel\" | translate }}\n </button>\n </ng-template>\n </td>\n </div>\n </div>\n <div class=\"empty-body\" *ngIf=\"config.emptyStateView && !config.emptyStateView.disabled && templateData.length === 0\">\n <p>{{ config.emptyStateView.i18n | translate }}</p>\n </div>\n</div>\n", styles: [".table{display:flex;width:100%;flex-direction:column;margin:1.25rem auto;background-color:#fff;font-size:.875rem}.table ::ng-deep .qd-input-input{margin-bottom:0!important}.table-header .table-row{padding-top:.125rem;padding-bottom:.125rem;background-color:#e5e5e5;font-weight:700}.table-header .table-row .actions-column{flex:0;border-right:none;visibility:hidden}.table-header,.table-body{display:flex;flex-direction:column}.table-row{display:flex;flex-direction:row;padding:.25rem 1rem;border-bottom:.0625rem solid rgb(213,213,213);gap:1rem}.table-row ::ng-deep qd-form-label{display:none!important}.table-row ::ng-deep qd-form-hint .qd-form-hint{display:none}.table-row ::ng-deep qd-input{margin-bottom:0!important}.table-cell{display:flex;height:37px;flex:1;align-items:center;text-align:left}.table-cell:has(.qd-input-error),.table-cell:has(.qd-dropdown-error){height:auto;align-items:flex-start}.table-cell.actions{flex:0}.table-row:last-child{border-bottom:none}.table-cell:last-child{border-right:none}.editable-actions{display:flex;justify-content:flex-end;margin-right:.625rem;gap:.625rem}.menu-button{display:flex;padding:0 .625rem 0 .375rem;background:unset;color:#454545;font-size:2rem;vertical-align:middle}.menu-button:hover,.menu-button:focus{color:#000;outline:0!important}.secondary-actions{display:block;width:100%;min-height:2rem;padding:0 1rem;background:#fff0;font-size:.75rem;text-align:left}.secondary-actions:hover{background-color:#f2f7fa}.secondary-actions.disabled{color:#b4b4b4;cursor:not-allowed}.secondary-actions.disabled:hover{background-color:#fff0}.dropdown{min-width:160px}.empty-body{padding:1.5rem;background:#fff}.empty-body p{margin:0 0 .5rem}.additional-info{align-self:center;margin-left:.25rem;color:#069;cursor:pointer;font-size:1rem;font-weight:400;transform:translateY(.0625rem)}.additional-info:hover,.additional-info:focus,.additional-info:active{color:#14516f}\n"], dependencies: [{ kind: "component", type: QdButtonComponent, selector: "button[qdButton], a[qdButton], button[qd-button]", inputs: ["disabled", "color", "icon", "data-test-id", "additionalInfo"] }, { kind: "directive", type: QdButtonGhostDirective, selector: "button[qdButtonGhost], a[qdButtonGhost]" }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: QdDropdownComponent, selector: "qd-dropdown", inputs: ["value", "id", "formControlName", "config", "data-test-id", "qdPopoverMaxHeight", "dense"], outputs: ["valueChange", "enterClick", "clickHint", "clickReadonly", "clickViewonly"] }, { kind: "component", type: QdInputComponent, selector: "qd-input", inputs: ["formControlName", "value", "config", "isError", "data-test-id"], outputs: ["valueChange", "enterClick", "clickClear", "clickHint", "clickReadonly", "clickViewonly"] }, { kind: "directive", type: i1$4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$4.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$4.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i1$4.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1$4.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i1$4.FormGroupName, selector: "[formGroupName]", inputs: ["formGroupName"] }, { kind: "component", type: QdIconComponent, selector: "qd-icon", inputs: ["icon"] }, { kind: "directive", type: QdPopoverOnClickDirective, selector: "[qdPopoverOnClick]", inputs: ["qdPopoverOnClick", "positionStrategy", "qdPopoverCloseStrategy", "qdPopoverDisabled", "qdPopoverStopPropagation", "qdPopoverBackgroundColor", "qdPopoverMaxHeight", "qdPopoverMinWidth", "qdPopoverMaxWidth", "qdPopoverAutoSize", "qdPopoverEnableKeyControl"], outputs: ["opened", "closed"], exportAs: ["qdPopoverOnClick"] }, { kind: "directive", type: QdFocusableDirective, selector: "[qdFocusable]" }, { kind: "directive", type: QdTooltipOnClickDirective, selector: "[qdTooltipOnClick]", inputs: ["qdTooltipContent"] }, { kind: "directive", type: QdCustomForDirective, selector: "[qdCustomFor]", inputs: ["qdCustomForOf", "qdCustomForToggler"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "pipe", type: i1$3.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });