@smartbit4all/ng-client 6.0.52 → 6.0.53

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.
@@ -1006,7 +1006,9 @@ export class SmartViewContextService {
1006
1006
  }
1007
1007
  async load2(uuid) {
1008
1008
  let change = await this.view.getComponentModel2(uuid).toPromise();
1009
- this.handlePerformActionResponse(change);
1009
+ // Not awaited: the sync ends with a viewcontext PUT, which would serialise the mount.
1010
+ // The failure still has to surface, so log it instead of dropping the promise.
1011
+ this.handlePerformActionResponse(change).catch((err) => console.error('syncView after component load failed', err));
1010
1012
  return change;
1011
1013
  }
1012
1014
  getCurrentViewContext() {
@@ -1076,4 +1078,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImpo
1076
1078
  providedIn: 'root',
1077
1079
  }]
1078
1080
  }], ctorParameters: () => [] });
1079
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnQtdmlldy1jb250ZXh0LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zbWFydC1uZy1jbGllbnQvc3JjL2xpYi92aWV3LWNvbnRleHQvc21hcnQtdmlldy1jb250ZXh0LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLE1BQU0sRUFDTixVQUFVLEVBQ1YsY0FBYyxFQUlkLFFBQVEsR0FFVCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQWlCLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFHekQsT0FBTyxFQU9MLGNBQWMsRUFXZCxTQUFTLEVBRVQsUUFBUSxHQUNULE1BQU0sT0FBTyxDQUFDO0FBQ2YsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFTbkYsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBRXpELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsaUJBQWlCLEVBQW9CLE1BQU0sNEJBQTRCLENBQUM7QUFFakYsT0FBTyxFQUFFLFdBQVcsRUFBWSxNQUFNLHdCQUF3QixDQUFDO0FBQy9ELE9BQU8sRUFDTCw2QkFBNkIsR0FFOUIsTUFBTSxpQ0FBaUMsQ0FBQztBQUN6QyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUMvRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ3pDLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLDJCQUEyQixDQUFDOzs7Ozs7O0FBR3hFLE1BQU0sQ0FBQyxNQUFNLHNDQUFzQyxHQUFHLHdDQUF3QyxDQUFDO0FBQy9GLE1BQU0sQ0FBQyxNQUFNLGdDQUFnQyxH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QUUsQ0FBQztZQUNiLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsOERBQThEO1FBQzFGLENBQUM7YUFBTSxDQUFDO1lBQ04sSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyx1REFBdUQ7UUFDaEYsQ0FBQztRQUNELElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDdkIsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ3RCLENBQUM7SUFDSCxDQUFDO0lBRUQsS0FBSyxDQUFDLFlBQVk7UUFDaEIsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUM1QixJQUFJLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQztZQUMxQixPQUFPO1FBQ1QsQ0FBQztRQUVELE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDeEMsSUFBSSxZQUFZLEVBQUUsQ0FBQztZQUNqQixNQUFNLFlBQVksQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ2pELFlBQVksQ0FBQyxXQUFXLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDcEMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUMzQixDQUFDO0lBQ0gsQ0FBQzsrR0F0Q1UsZUFBZTttSEFBZixlQUFlLGNBRmQsTUFBTTs7NEZBRVAsZUFBZTtrQkFIM0IsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBJbmplY3QsXG4gIEluamVjdGFibGUsXG4gIEluamVjdGlvblRva2VuLFxuICBJbmplY3RvcixcbiAgbW9kZWwsXG4gIE9uRGVzdHJveSxcbiAgT3B0aW9uYWwsXG4gIFZpZXdDb250YWluZXJSZWYsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgbGFzdFZhbHVlRnJvbSwgU3ViamVjdCwgdGFrZVVudGlsIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBTbWFydEZvcm1JbnZhbGlkRmllbGRzIH0gZnJvbSAnLi4vc21hcnQtZm9ybS9zbWFydGZvcm0ubW9kZWwnO1xuaW1wb3J0IHsgU21hcnRTZXNzaW9uU2VydmljZSB9IGZyb20gJy4uL3Nlc3Npb24vc21hcnQtc2Vzc2lvbi5zZXJ2aWNlJztcbmltcG9ydCB7XG4gIENsaXBib2FyZERhdGEsXG4gIENvbXBvbmVudE1vZGVsLFxuICBDb21wb25lbnRNb2RlbENoYW5nZSxcbiAgRGF0YUNoYW5nZSxcbiAgRG93bmxvYWRlZEZpbGUsXG4gIExpbmssXG4gIExpbmtUYXJnZXRFbnVtLFxuICBNZXNzYWdlRGF0YSxcbiAgTWVzc2FnZVJlc3VsdCxcbiAgVWlBY3Rpb25EZXNjcmlwdG9yLFxuICBVaUFjdGlvblJlcXVlc3QsXG4gIFZpZXdDb25zdHJhaW50LFxuICBWaWV3Q29udGV4dENoYW5nZSxcbiAgVmlld0NvbnRleHREYXRhLFxuICBWaWV3Q29udGV4dFVwZGF0ZSxcbiAgVmlld0RhdGEsXG4gIFZpZXdTZXJ2aWNlLFxuICBWaWV3U3RhdGUsXG4gIFZpZXdTdGF0ZVVwZGF0ZSxcbiAgVmlld1R5cGUsXG59IGZyb20gJy4vYXBpJztcbmltcG9ydCB7IE1lc3NhZ2VEaWFsb2dDb21wb25lbnQgfSBmcm9tICcuL21lc3NhZ2UtZGlhbG9nL21lc3NhZ2UtZGlhbG9nLmNvbXBvbmVudCc7XG5pbXBvcnQge1xuICBTbWFydEVtYmVkZGVkVmlld1JlZixcbiAgU21hcnRUcmFuc2xhdGVTZXJ2aWNlLFxuICBTbWFydFZpZXdDb250ZXh0QXBpRXJyb3IsXG4gIFNtYXJ0Vmlld0NvbnRleHRBcGlFcnJvcnMsXG4gIFNtYXJ0Vmlld0RpYWxvZ1JlZixcbiAgU21hcnRWaWV3SGFuZGxlck1vZGVsLFxufSBmcm9tICcuL3NtYXJ0LXZpZXctY29udGV4dC5tb2RlbCc7XG5pbXBvcnQgeyBTbWFydFN1YmplY3QgfSBmcm9tICcuLi9zbWFydC1zdWJqZWN0L3Byb2plY3RzJztcbmltcG9ydCB7IFNtYXJ0Vmlld0NvbnRleHREaWFsb2dTZXJ2aWNlIH0gZnJvbSAnLi9zbWFydC12aWV3LWNvbnRleHQtZGlhbG9nLnNlcnZpY2UnO1xuaW1wb3J0IHsgTWF0RGlhbG9nUmVmIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcbmltcG9ydCB7IER5bmFtaWNEaWFsb2dSZWYgfSBmcm9tICdwcmltZW5nL2R5bmFtaWNkaWFsb2cnO1xuaW1wb3J0IHsgQ09NUE9ORU5UX0xJQlJBUlksIENvbXBvbmVudExpYnJhcnkgfSBmcm9tICcuL3V0aWxpdHkvY29tcG9uZW50TGlicmFyeSc7XG5pbXBvcnQgeyBDb21wb25lbnRUeXBlIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL3BvcnRhbCc7XG5pbXBvcnQgeyByZXNvbHZlU2xvdCwgU2xvdEtpbmQgfSBmcm9tICcuL3ZpZXctc2xvdC1yZXNvbHV0aW9uJztcbmltcG9ydCB7XG4gIFNNQVJUX0RFRkFVTFRfVklFV19DT01QT05FTlRTLFxuICBEZWZhdWx0Vmlld0NvbXBvbmVudEVudHJ5LFxufSBmcm9tICcuL2RlZmF1bHQtdmlldy1jb21wb25lbnRzLnRva2VuJztcbmltcG9ydCB7IHJlc29sdmVWaWV3SGFuZGxlciB9IGZyb20gJy4vdmlldy1oYW5kbGVyLXJlc29sdXRpb24nO1xuaW1wb3J0IHsgYnVpbGRWaWV3T3BzIH0gZnJvbSAnLi92aWV3LW9wJztcbmltcG9ydCB7IFJFVVNFX1JPVVRFUl9TTE9UX0NPTVBPTkVOVCB9IGZyb20gJy4vcmV1c2Utcm91dGVyLXNsb3QudG9rZW4nO1xuaW1wb3J0IHsgVGhlbWVTZXJ2aWNlIH0gZnJvbSAnLi4vdGhlbWUvdGhlbWUuc2VydmljZSc7XG5cbmV4cG9ydCBjb25zdCBTbWFydFZpZXdDb250ZXh0RXJyb3JEaWFsb2dCdXR0b25MYWJlbCA9ICdTbWFydFZpZXdDb250ZXh0RXJyb3JEaWFsb2dCdXR0b25MYWJlbCc7XG5leHBvcnQgY29uc3QgU21hcnRWaWV3Q29udGV4dEVycm9yRGlhbG9nVGl0bGUgPSAnU21hcnRWaWV3Q29udGV4dEVycm9yRGlhbG9nVGl0bGUnO1xuZXhwb3J0IGNvbnN0IFNtYXJ0Vmlld0NvbnRleHRFcnJvckRpYWxvZ01lc3NhZ2UgPSAnU21hcnRWaWV3Q29udGV4dEVycm9yRGlhbG9nTWVzc2FnZSc7XG5leHBvcnQgY29uc3QgRGVmYXVsdFVpQWN0aW9uQ29kZV9DTE9TRSA9ICdERUZBVUxUX0NMT1NFJztcblxuZXhwb3J0IGNvbnN0IERJQUxPR19ESVNBQkxFX0NMT1NFID0gbmV3IEluamVjdGlvblRva2VuPGJvb2xlYW4+KCdkaWFsb2dEaXNhYmxlQ2xvc2UnKTtcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIFNtYXJ0Vmlld0NvbnRleHRTZXJ2aWNlIGltcGxlbWVudHMgT25EZXN0cm95IHtcbiAgcHJpdmF0ZSByZWFkb25seSB2aWV3Q29udGV4dFV1aWROYW1lOiBzdHJpbmcgPSAndmlld0NvbnRleHRVdWlkJztcbiAgcHJpdmF0ZSByZWFkb25seSB2aWV3Q29udGV4dFV1aWRIZWFkZXJOYW1lOiBzdHJpbmcgPSAndmlld0NvbnRleHRVdWlkJztcbiAgcHJpdmF0ZSByZWFkb25seSBwYWdlTmFtZVByZWZpeDogc3RyaW5nID0gJ3BhZ2UuJztcbiAgcHJpdmF0ZSByZWFkb25seSBjb21wb25lbnROYW1lUHJlZml4OiBzdHJpbmcgPSAnY29tcG9uZW50Lic7XG4gIHB1YmxpYyBtZXNzYWdlRGlhbG9nbmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBwcml2YXRlIHVybD86IHN0cmluZztcbiAgcHJpdmF0ZSB2aWV3Q29udGV4dD86IFZpZXdDb250ZXh0RGF0YTtcbiAgcHJpdmF0ZSB2aWV3SGFuZGxlcnM6IEFycmF5PFNtYXJ0Vmlld0hhbmRsZXJNb2RlbD4gPSBuZXcgQXJyYXkoKTtcbiAgcHJpdmF0ZSBkZWZhdWx0Q29tcG9uZW50czogTWFwPHN0cmluZywgQ29tcG9uZW50VHlwZTxhbnk+PiA9IG5ldyBNYXAoKTtcbiAgcHJpdmF0ZSBvcGVuZWRWaWV3VXVpZHM6IEFycmF5PHN0cmluZz4gPSBuZXcgQXJyYXkoKTtcbiAgcHJpdmF0ZSBvcGVuZWRWaWV3RGF0YTogQXJyYXk8Vmlld0RhdGE+ID0gbmV3IEFycmF5KCk7XG4gIC8vIE1vbm90b25pYyBjb3VudGVyIGJ1bXBlZCBvbiBldmVyeSBzdWNjZXNzZnVsIHN0YXJ0Vmlld0NvbnRleHQoKS4gQ2FsbGVyc1xuICAvLyB0aGF0IGhvbGQgYSByZWZlcmVuY2UgdG8gYSB2aWV3LXV1aWQgZnJvbSBhIHByZXZpb3VzIHZpZXdjb250ZXh0IGNhblxuICAvLyBkZXRlY3QgYSByZWJ1aWxkIGJ5IGNvbXBhcmluZyBzbmFwc2hvdHMgb2YgdGhpcyB2YWx1ZS5cbiAgcHJpdmF0ZSBnZW5lcmF0aW9uOiBudW1iZXIgPSAwO1xuXG4gIHByaXZhdGUgX2Rlc3Ryb3kkOiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFN1YmplY3QoKTtcbiAgcHVibGljIHV1aWRPZlBhZ2VIYXNCZWVuQ2hhbmdlZDogU3ViamVjdDxzdHJpbmc+ID0gbmV3IFNtYXJ0U3ViamVjdCh0aGlzLl9kZXN0cm95JCk7XG4gIHB1YmxpYyB2aWV3Q29udGV4dEhhc0JlZW5TeW5jZWQ6IFN1YmplY3Q8dm9pZD4gPSBuZXcgU21hcnRTdWJqZWN0KHRoaXMuX2Rlc3Ryb3kkKTtcbiAgcHJpdmF0ZSBpbml0aWFsaXplUnVubmluZzogU3ViamVjdDxWaWV3Q29udGV4dERhdGE+IHwgdW5kZWZpbmVkO1xuICBwcml2YXRlIGluaXRpTmV3Q29udGV4dFJ1bm5pbmc6IFN1YmplY3Q8dm9pZD4gfCB1bmRlZmluZWQ7XG5cbiAgcHVibGljIHNtYXJ0Vmlld0NvbnRleHRBcGlFcnJvcnM/OiBTbWFydFZpZXdDb250ZXh0QXBpRXJyb3JzO1xuXG4gIHB1YmxpYyBvcGVuU21hcnRMaW5rOiBTdWJqZWN0PFtzdHJpbmcsIHN0cmluZ10+ID0gbmV3IFNtYXJ0U3ViamVjdCh0aGlzLl9kZXN0cm95JCk7XG4gIHB1YmxpYyBpc09wZW5pbmdTbWFydExpbms6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBwcml2YXRlIGRpYWxvZ1JlZnM6IFNtYXJ0Vmlld0RpYWxvZ1JlZltdID0gW107XG5cbiAgcHJpdmF0ZSBlbWJlZGRlZENvbnRhaW5lcnM6IE1hcDxzdHJpbmcsIE1hcDxzdHJpbmcsIEVtYmVkZGVkU2xvdEVudHJ5Pj4gPSBuZXcgTWFwKCk7XG4gIHByaXZhdGUgZW1iZWRkZWRWaWV3UmVmczogU21hcnRFbWJlZGRlZFZpZXdSZWZbXSA9IFtdO1xuICBwcml2YXRlIHBlbmRpbmdFbWJlZGRlZFZpZXdzOiBWaWV3RGF0YVtdID0gW107XG5cbiAgcHJpdmF0ZSBhY3Rpb25EZXNjcmlwdG9ycz86IE1hcDxzdHJpbmcsIFVpQWN0aW9uRGVzY3JpcHRvcj47XG5cbiAgcHJpdmF0ZSBtb2R1bGVVcmxzQnlNb2R1bGU/OiBNYXA8c3RyaW5nLCBzdHJpbmc+O1xuXG4gIHB1YmxpYyBjb21tb25GZWVkYmFja1RleHQ/OiBzdHJpbmc7XG5cbiAgcHVibGljIHNtYXJ0QXBpQ2xpZW50czogTWFwPHN0cmluZywgU21hcnRTdWJqZWN0PGFueT4+ID0gbmV3IE1hcCgpO1xuXG4gIHB1YmxpYyBzZXQgdHJhbnNsYXRlU2VydmljZSh0cmFuc2xhdGVTZXJ2aWNlOiBTbWFydFRyYW5zbGF0ZVNlcnZpY2UgfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLl90cmFuc2xhdGVTZXJ2aWNlID0gdHJhbnNsYXRlU2VydmljZTtcbiAgICB0aGlzLnRyYW5zbGF0ZVNlcnZpY2VDaGFuZ2VkLm5leHQoKTtcbiAgICB0aGlzLnRyYW5zbGF0ZVNlcnZpY2VDaGFuZ2VkLmNvbXBsZXRlKCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IHRyYW5zbGF0ZVNlcnZpY2UoKTogU21hcnRUcmFuc2xhdGVTZXJ2aWNlIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAodGhpcy5fdHJhbnNsYXRlU2VydmljZSkge1xuICAgICAgcmV0dXJuIHRoaXMuX3RyYW5zbGF0ZVNlcnZpY2U7XG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBwcml2YXRlIF90cmFuc2xhdGVTZXJ2aWNlPzogU21hcnRUcmFuc2xhdGVTZXJ2aWNlO1xuICBwdWJsaWMgdHJhbnNsYXRlU2VydmljZUNoYW5nZWQ6IFN1YmplY3Q8dm9pZD4gPSBuZXcgU21hcnRTdWJqZWN0KHRoaXMuX2Rlc3Ryb3kkKTtcblxuICBwdWJsaWMgY29tcG9uZW50TGlicmFyeTogQ29tcG9uZW50TGlicmFyeSB8IHVuZGVmaW5lZDtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHZpZXc6IFZpZXdTZXJ2aWNlLFxuICAgIHByaXZhdGUgc2Vzc2lvbjogU21hcnRTZXNzaW9uU2VydmljZSxcbiAgICBwcml2YXRlIGRpYWxvZzogU21hcnRWaWV3Q29udGV4dERpYWxvZ1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBhcGlRdWV1ZVNlcnZpY2U6IEFwaVF1ZXVlU2VydmljZSxcbiAgICBwcml2YXRlIHRoZW1lU2VydmljZTogVGhlbWVTZXJ2aWNlLFxuICAgIHByaXZhdGUgaW5qZWN0OiBJbmplY3RvcixcbiAgICBASW5qZWN0KENPTVBPTkVOVF9MSUJSQVJZKSBAT3B0aW9uYWwoKSBjb21wTGliPzogQ29tcG9uZW50TGlicmFyeSxcbiAgICBASW5qZWN0KFNNQVJUX0RFRkFVTFRfVklFV19DT01QT05FTlRTKVxuICAgIEBPcHRpb25hbCgpXG4gICAgZGVmYXVsdFZpZXdDb21wb25lbnRzPzogRGVmYXVsdFZpZXdDb21wb25lbnRFbnRyeVtdXG4gICkge1xuICAgIHRoaXMuY29tcG9uZW50TGlicmFyeSA9IGNvbXBMaWI7XG4gICAgZm9yIChjb25zdCBlbnRyeSBvZiBkZWZhdWx0Vmlld0NvbXBvbmVudHMgPz8gW10pIHtcbiAgICAgIHRoaXMuZGVmYXVsdENvbXBvbmVudHMuc2V0KGVudHJ5LmNvbXBvbmVudE5hbWUsIGVudHJ5LmNvbXBvbmVudCk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5fZGVzdHJveSQubmV4dCgpO1xuICAgIHRoaXMuX2Rlc3Ryb3kkLmNvbXBsZXRlKCk7XG4gIH1cblxuICBwdWJsaWMgZm9sbG93KHV1aWQ6IHN0cmluZywgZGV0ZWN0Q2hhbmdlOiBTbWFydFN1YmplY3Q8YW55Pik6IHZvaWQge1xuICAgIHRoaXMuc21hcnRBcGlDbGllbnRzLnNldCh1dWlkLCBkZXRlY3RDaGFuZ2UpO1xuICB9XG4gIHB1YmxpYyB1bmZvbGxvdyh1dWlkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLnNtYXJ0QXBpQ2xpZW50cy5kZWxldGUodXVpZCk7XG4gIH1cblxuICByZWdpc3RlckVtYmVkZGVkU2xvdChcbiAgICBjb250YWluZXJVdWlkOiBzdHJpbmcsXG4gICAgY29udGFpbmVySWQ6IHN0cmluZyxcbiAgICB2Y1JlZjogVmlld0NvbnRhaW5lclJlZixcbiAgICBraW5kOiBTbG90S2luZFxuICApOiB2b2lkIHtcbiAgICBsZXQgaW5uZXJNYXAgPSB0aGlzLmVtYmVkZGVkQ29udGFpbmVycy5nZXQoY29udGFpbmVyVXVpZCk7XG4gICAgaWYgKCFpbm5lck1hcCkge1xuICAgICAgaW5uZXJNYXAgPSBuZXcgTWFwKCk7XG4gICAgICB0aGlzLmVtYmVkZGVkQ29udGFpbmVycy5zZXQoY29udGFpbmVyVXVpZCwgaW5uZXJNYXApO1xuICAgIH1cbiAgICBpbm5lck1hcC5zZXQoY29udGFpbmVySWQsIHsgdmNSZWYsIGtpbmQgfSk7XG5cbiAgICAvLyBSZWF0dGFjaCBlbWJlZGRlZCB2aWV3cyB0aGF0IHdlcmUgZGV0YWNoZWQgYmVmb3JlIGxheW91dCByZS1yZW5kZXJcbiAgICBjb25zdCBleGlzdGluZyA9IHRoaXMuZW1iZWRkZWRWaWV3UmVmcy5maWx0ZXIoXG4gICAgICAocmVmKSA9PiByZWYuY29udGFpbmVyVXVpZCA9PT0gY29udGFpbmVyVXVpZCAmJiByZWYuY29udGFpbmVySWQgPT09IGNvbnRhaW5lcklkXG4gICAgKTtcbiAgICBmb3IgKGNvbnN0IHJlZiBvZiBleGlzdGluZykge1xuICAgICAgaWYgKCFyZWYuY29tcG9uZW50UmVmLmhvc3RWaWV3LmRlc3Ryb3llZCkge1xuICAgICAgICB2Y1JlZi5pbnNlcnQocmVmLmNvbXBvbmVudFJlZi5ob3N0Vmlldyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gRHJhaW4gcGVuZGluZyBxdWV1ZSAobWF0Y2ggb24gdGhlIHJlc29sdmVkIHNsb3QsIHNvIHJvdXRlci1zbG90IE5PUk1BTCB2aWV3cyBtYXRjaCB0b28pXG4gICAgY29uc3QgbWF0Y2hlcyA9ICh2OiBWaWV3RGF0YSkgPT4ge1xuICAgICAgY29uc3QgcyA9IHJlc29sdmVTbG90KHYpO1xuICAgICAgcmV0dXJuIHMuY29udGFpbmVyVXVpZCA9PT0gY29udGFpbmVyVXVpZCAmJiBzLmNvbnRhaW5lcklkID09PSBjb250YWluZXJJZDtcbiAgICB9O1xuICAgIGNvbnN0IG1hdGNoaW5nID0gdGhpcy5wZW5kaW5nRW1iZWRkZWRWaWV3cy5maWx0ZXIobWF0Y2hlcyk7XG4gICAgdGhpcy5wZW5kaW5nRW1iZWRkZWRWaWV3cyA9IHRoaXMucGVuZGluZ0VtYmVkZGVkVmlld3MuZmlsdGVyKCh2KSA9PiAhbWF0Y2hlcyh2KSk7XG5cbiAgICBpZiAobWF0Y2hpbmcubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgdXBkYXRlczogKFZpZXdTdGF0ZVVwZGF0ZSB8IHVuZGVmaW5lZClbXSA9IG1hdGNoaW5nLm1hcCgodikgPT4gdGhpcy5vcGVuVmlldyh2KSk7XG4gICAgICB0aGlzLnNlbmRWaWV3Q29udGV4dFVwZGF0ZXModXBkYXRlcyk7XG4gICAgfVxuICB9XG5cbiAgZGV0YWNoQWxsRW1iZWRkZWRWaWV3cyhjb250YWluZXJVdWlkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBjaGlsZHJlbiA9IHRoaXMuZW1iZWRkZWRWaWV3UmVmcy5maWx0ZXIoKHJlZikgPT4gcmVmLmNvbnRhaW5lclV1aWQgPT09IGNvbnRhaW5lclV1aWQpO1xuICAgIGZvciAoY29uc3QgY2hpbGQgb2YgY2hpbGRyZW4pIHtcbiAgICAgIGlmIChjaGlsZC5jb21wb25lbnRSZWYuaG9zdFZpZXcuZGVzdHJveWVkKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgLy8gT25seSBkZXRhY2ggdmlld3MgbGl2aW5nIGluIGEgcmUtcmVuZGVyaW5nIExBWU9VVCBzbG90LiBBIFNUQUJMRSBkaXJlY3RpdmVcbiAgICAgIC8vIHNsb3QgKHJvdXRlci1vdXRsZXQpIGxpdmVzIG91dHNpZGUgdGhlIGxheW91dCAqbmdGb3IgYW5kIHN1cnZpdmVzIHRoZSBwYXJlbnRcbiAgICAgIC8vIHJlLXJlbmRlciwgc28gaXRzIGNoaWxkIG5lZWRzIG5vIGRldGFjaCBwcm90ZWN0aW9uIOKAlCBkZXRhY2hpbmcgaXQgaGVyZSBpc1xuICAgICAgLy8gd2hhdCBwcm9kdWNlZCB0aGUgZmFsc2Utb3JwaGFuIGRlc3Ryb3kgaW4gbXVsdGktbGV2ZWwgTk9STUFMIG5lc3RpbmdcbiAgICAgIC8vIChIb21lIC0+IE1haW4gLT4gcGFnZSk6IE1haW4gZ290IHN3ZXB0IHVwIGJ5IEhvbWUncyBsYXlvdXQgZGFuY2UuICgjMjg4NzApXG4gICAgICBjb25zdCBlbnRyeSA9IHRoaXMuZW1iZWRkZWRDb250YWluZXJzLmdldChjb250YWluZXJVdWlkKT8uZ2V0KGNoaWxkLmNvbnRhaW5lcklkKTtcbiAgICAgIGlmICghZW50cnkgfHwgZW50cnkua2luZCA9PT0gJ3N0YWJsZScpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBjb25zdCBpZHggPSBlbnRyeS52Y1JlZi5pbmRleE9mKGNoaWxkLmNvbXBvbmVudFJlZi5ob3N0Vmlldyk7XG4gICAgICBpZiAoaWR4ID49IDApIHtcbiAgICAgICAgZW50cnkudmNSZWYuZGV0YWNoKGlkeCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY2xlYW51cE9ycGhhbmVkRW1iZWRkZWRWaWV3cyhjb250YWluZXJVdWlkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCByZWZzID0gdGhpcy5lbWJlZGRlZFZpZXdSZWZzLmZpbHRlcigocmVmKSA9PiByZWYuY29udGFpbmVyVXVpZCA9PT0gY29udGFpbmVyVXVpZCk7XG4gICAgY29uc3Qgb3JwaGFuZWQ6IFNtYXJ0RW1iZWRkZWRWaWV3UmVmW10gPSBbXTtcbiAgICBmb3IgKGNvbnN0IHJlZiBvZiByZWZzKSB7XG4gICAgICBpZiAocmVmLmNvbXBvbmVudFJlZi5ob3N0Vmlldy5kZXN0cm95ZWQpIHtcbiAgICAgICAgb3JwaGFuZWQucHVzaChyZWYpO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHZjUmVmID0gdGhpcy5nZXRFbWJlZGRlZFNsb3QoY29udGFpbmVyVXVpZCwgcmVmLmNvbnRhaW5lcklkKTtcbiAgICAgIGlmICghdmNSZWYpIHtcbiAgICAgICAgLy8gVGhlIHNsb3QgaXMgdHJ1bHkgZ29uZSAoaXRzIGxheW91dCBob3N0IHdhcyB0b3JuIGRvd24gYW5kIG5vdCByZWNyZWF0ZWQpOlxuICAgICAgICAvLyBhIHJlYWwgb3JwaGFuIHRvIGRlc3Ryb3kuXG4gICAgICAgIG9ycGhhbmVkLnB1c2gocmVmKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICAvLyBTbG90IHN0aWxsIHJlZ2lzdGVyZWQgYnV0IGl0cyB2aWV3IHdhcyBkZXRhY2hlZCBieSBkZXRhY2hBbGxFbWJlZGRlZFZpZXdzIGFuZFxuICAgICAgLy8gbmV2ZXIgcmVhdHRhY2hlZCwgYmVjYXVzZSB0aGUgKm5nRm9yIHJldXNlZCB0aGUgc2xvdCBob3N0IChvbmx5IGEgc2libGluZ1xuICAgICAgLy8gd2lkZ2V0IGNoYW5nZWQpIHNvIG5vIHJlLXJlZ2lzdGVyIGZpcmVkLiBSZWF0dGFjaCBzbyBldmVyeSBkZXRhY2ggaXMgcGFpcmVkLlxuICAgICAgaWYgKHZjUmVmLmluZGV4T2YocmVmLmNvbXBvbmVudFJlZi5ob3N0VmlldykgPCAwKSB7XG4gICAgICAgIHZjUmVmLmluc2VydChyZWYuY29tcG9uZW50UmVmLmhvc3RWaWV3KTtcbiAgICAgIH1cbiAgICB9XG4gICAgZm9yIChjb25zdCByZWYgb2Ygb3JwaGFuZWQpIHtcbiAgICAgIGlmICghcmVmLmNvbXBvbmVudFJlZi5ob3N0Vmlldy5kZXN0cm95ZWQpIHtcbiAgICAgICAgcmVmLmNvbXBvbmVudFJlZi5kZXN0cm95KCk7XG4gICAgICB9XG4gICAgICBjb25zdCBpZHggPSB0aGlzLm9wZW5lZFZpZXdVdWlkcy5pbmRleE9mKHJlZi51dWlkKTtcbiAgICAgIGlmIChpZHggPj0gMCkge1xuICAgICAgICB0aGlzLm9wZW5lZFZpZXdVdWlkcy5zcGxpY2UoaWR4LCAxKTtcbiAgICAgICAgdGhpcy5vcGVuZWRWaWV3RGF0YS5zcGxpY2UoaWR4LCAxKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5lbWJlZGRlZFZpZXdSZWZzID0gdGhpcy5lbWJlZGRlZFZpZXdSZWZzLmZpbHRlcigocmVmKSA9PiAhb3JwaGFuZWQuaW5jbHVkZXMocmVmKSk7XG4gIH1cblxuICBnZXRDb21wb3NpdGVNb2RlbChjb250YWluZXJVdWlkOiBzdHJpbmcpOiB7IFtrZXk6IHN0cmluZ106IGFueSB9IHtcbiAgICBjb25zdCByZXN1bHQ6IHsgW2tleTogc3RyaW5nXTogYW55IH0gPSB7fTtcbiAgICBjb25zdCBjaGlsZHJlbiA9IHRoaXMuZW1iZWRkZWRWaWV3UmVmcy5maWx0ZXIoKHJlZikgPT4gcmVmLmNvbnRhaW5lclV1aWQgPT09IGNvbnRhaW5lclV1aWQpO1xuICAgIGZvciAoY29uc3QgY2hpbGQgb2YgY2hpbGRyZW4pIHtcbiAgICAgIHJlc3VsdFtjaGlsZC51dWlkXSA9IGNoaWxkLmNvbXBvbmVudFJlZi5pbnN0YW5jZS5nZXRNb2RlbCgpO1xuICAgICAgT2JqZWN0LmFzc2lnbihyZXN1bHQsIHRoaXMuZ2V0Q29tcG9zaXRlTW9kZWwoY2hpbGQudXVpZCkpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgc3VibWl0RW1iZWRkZWRGb3Jtcyhjb250YWluZXJVdWlkOiBzdHJpbmcsIHZhbGlkYXRlOiBib29sZWFuKTogU21hcnRGb3JtSW52YWxpZEZpZWxkcyB7XG4gICAgY29uc3QgYWxsSW52YWxpZEtleXM6IHN0cmluZ1tdID0gW107XG4gICAgY29uc3QgYWxsSW52YWxpZE5hbWVzOiBzdHJpbmdbXSA9IFtdO1xuICAgIGNvbnN0IGNoaWxkcmVuID0gdGhpcy5lbWJlZGRlZFZpZXdSZWZzLmZpbHRlcigocmVmKSA9PiByZWYuY29udGFpbmVyVXVpZCA9PT0gY29udGFpbmVyVXVpZCk7XG4gICAgZm9yIChjb25zdCBjaGlsZCBvZiBjaGlsZHJlbikge1xuICAgICAgY29uc3QgaW5zdGFuY2UgPSBjaGlsZC5jb21wb25lbnRSZWYuaW5zdGFuY2U7XG4gICAgICBpbnN0YW5jZS5zdWJtaXRGb3JtKHZhbGlkYXRlKTtcbiAgICAgIGlmICh2YWxpZGF0ZSkge1xuICAgICAgICBjb25zdCBpbnZhbGlkOiBTbWFydEZvcm1JbnZhbGlkRmllbGRzID0gaW5zdGFuY2UuZ2V0SW52YWxpZEZpZWxkcygpO1xuICAgICAgICBhbGxJbnZhbGlkS2V5cy5wdXNoKC4uLmludmFsaWQuaW52YWxpZEZpZWxkS2V5cyk7XG4gICAgICAgIGFsbEludmFsaWROYW1lcy5wdXNoKC4uLmludmFsaWQuaW52YWxpZEZpZWxkTmFtZXMpO1xuICAgICAgfVxuICAgICAgY29uc3QgbmVzdGVkID0gdGhpcy5zdWJtaXRFbWJlZGRlZEZvcm1zKGNoaWxkLnV1aWQsIHZhbGlkYXRlKTtcbiAgICAgIGFsbEludmFsaWRLZXlzLnB1c2goLi4ubmVzdGVkLmludmFsaWRGaWVsZEtleXMpO1xuICAgICAgYWxsSW52YWxpZE5hbWVzLnB1c2goLi4ubmVzdGVkLmludmFsaWRGaWVsZE5hbWVzKTtcbiAgICB9XG4gICAgcmV0dXJuIHsgaW52YWxpZEZpZWxkS2V5czogYWxsSW52YWxpZEtleXMsIGludmFsaWRGaWVsZE5hbWVzOiBhbGxJbnZhbGlkTmFtZXMgfTtcbiAgfVxuXG4gIHVucmVnaXN0ZXJFbWJlZGRlZFNsb3QoY29udGFpbmVyVXVpZDogc3RyaW5nLCBjb250YWluZXJJZDogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgaW5uZXJNYXAgPSB0aGlzLmVtYmVkZGVkQ29udGFpbmVycy5nZXQoY29udGFpbmVyVXVpZCk7XG4gICAgaWYgKGlubmVyTWFwKSB7XG4gICAgICBpbm5lck1hcC5kZWxldGUoY29udGFpbmVySWQpO1xuICAgICAgaWYgKGlubmVyTWFwLnNpemUgPT09IDApIHtcbiAgICAgICAgdGhpcy5lbWJlZGRlZENvbnRhaW5lcnMuZGVsZXRlKGNvbnRhaW5lclV1aWQpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZ2V0RW1iZWRkZWRTbG90KFxuICAgIGNvbnRhaW5lclV1aWQ6IHN0cmluZyxcbiAgICBjb250YWluZXJJZDogc3RyaW5nXG4gICk6IFZpZXdDb250YWluZXJSZWYgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLmVtYmVkZGVkQ29udGFpbmVycy5nZXQoY29udGFpbmVyVXVpZCk/LmdldChjb250YWluZXJJZCk/LnZjUmVmO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSB0aGUgdmlldydzIGNvbXBvbmVudCBpbnRvIGl0cyByZXNvbHZlZCBzbG90LiBSZXR1cm5zIGZhbHNlIGFuZCBxdWV1ZXNcbiAgICogdGhlIHZpZXcgaWYgdGhlIHNsb3QgaXMgbm90IHJlZ2lzdGVyZWQgeWV0IChkcmFpbmVkIG9uIHJlZ2lzdHJhdGlvbikuXG4gICAqL1xuICBwcml2YXRlIGluc2VydFZpZXdJbnRvU2xvdCh2aWV3OiBWaWV3RGF0YSwgY29tcG9uZW50OiBDb21wb25lbnRUeXBlPGFueT4pOiBib29sZWFuIHtcbiAgICBjb25zdCB7IGNvbnRhaW5lclV1aWQsIGNvbnRhaW5lcklkIH0gPSByZXNvbHZlU2xvdCh2aWV3KTtcbiAgICBjb25zdCB2Y1JlZiA9IHRoaXMuZ2V0RW1iZWRkZWRTbG90KGNvbnRhaW5lclV1aWQsIGNvbnRhaW5lcklkKTtcbiAgICBpZiAoIXZjUmVmKSB7XG4gICAgICAvLyBTbG90IG5vdCByZWdpc3RlcmVkIHlldDogcXVldWUgdGhlIHZpZXcgYW5kIGRyYWluIGl0IHdoZW4gaXRzIHNsb3QgcmVnaXN0ZXJzXG4gICAgICAvLyAocmVnaXN0ZXJFbWJlZGRlZFNsb3QpLiBUaGUgc3luY2hyb25vdXMgZGV0ZWN0Q2hhbmdlcyBiZWxvdyByZW5kZXJzIGEgZnJlc2hseVxuICAgICAgLy8gbW91bnRlZCBwYXJlbnQncyB0ZW1wbGF0ZSBpbiB0aGUgc2FtZSBzeW5jVmlldyBwYXNzLCBzbyBhIHBhcmVudCAtPiBjaGlsZCAtPlxuICAgICAgLy8gZ3JhbmRjaGlsZCBjaGFpbiAoSG9tZSAtPiBNYWluIC0+IHBhZ2UpIHJlZ2lzdGVycyBldmVyeSBzbG90IGltbWVkaWF0ZWx5IGFuZFxuICAgICAgLy8gdGhlIHF1ZXVlIGRyYWlucyB3aXRoaW4gdGhlIHBhc3Mg4oCUIGV2ZW4gd2hlbiByZXN0b3JlVmlld3Mgb3BlbnMgYSBjaGlsZCBiZWZvcmVcbiAgICAgIC8vIGl0cyBwYXJlbnQuICgjMjg4NzApXG4gICAgICB0aGlzLnBlbmRpbmdFbWJlZGRlZFZpZXdzLnB1c2godmlldyk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGNvbnN0IGNvbXBvbmVudFJlZiA9IHZjUmVmLmNyZWF0ZUNvbXBvbmVudChjb21wb25lbnQpO1xuICAgIGNvbXBvbmVudFJlZi5pbnN0YW5jZS51dWlkID0gdmlldy51dWlkO1xuICAgIHRoaXMuZW1iZWRkZWRWaWV3UmVmcy5wdXNoKHsgdXVpZDogdmlldy51dWlkLCBjb250YWluZXJVdWlkLCBjb250YWluZXJJZCwgY29tcG9uZW50UmVmIH0pO1xuICAgIC8vIFJlbmRlciB0aGUgZnJlc2hseSBjcmVhdGVkIGNvbXBvbmVudCBzeW5jaHJvbm91c2x5IHNvIGl0cyBvd24gZW1iZWRkZWQtc2xvdFxuICAgIC8vIGRpcmVjdGl2ZXMgKHRoZSByb3V0ZXItb3V0bGV0IHNsb3Qgb2YgYSBuZXN0ZWQgTk9STUFMIHZpZXcpIHJlZ2lzdGVyIHRoZWlyXG4gICAgLy8gY29udGFpbmVycyBpbW1lZGlhdGVseS4gVGhpcyBsZXRzIGEgcGFyZW50IC0+IGNoaWxkIC0+IGdyYW5kY2hpbGQgY2hhaW5cbiAgICAvLyAoZS5nLiBIb21lIC0+IE1haW4gLT4gcGFnZSkgbW91bnQgaW4gYSBzaW5nbGUgc3luY2hyb25vdXMgc3luY1ZpZXcgcGFzc1xuICAgIC8vIGluc3RlYWQgb2YgZGVwZW5kaW5nIG9uIGEgY2hhbmdlLWRldGVjdGlvbiB0aWNrIGZpcmluZyBiZXR3ZWVuIGVhY2ggbGV2ZWwuXG4gICAgLy8gV2l0aG91dCBpdCB0aGUgY2hpbGQgY2Fubm90IHJlc29sdmUgaXRzIHNsb3QsIHF1ZXVlcyBpbnRvXG4gICAgLy8gcGVuZGluZ0VtYmVkZGVkVmlld3MsIGFuZCB0aGUgZHJhaW4gcmFjZXMgdGhlIGFzeW5jIHVwZGF0ZVZpZXdDb250ZXh0XG4gICAgLy8gcm91bmQtdHJpcHMg4oCUIGludGVybWl0dGVudGx5IGxlYXZpbmcgYSBwYXJlbnQgT1BFTkVEIGluIGJhY2tlbmQgYm9va2tlZXBpbmdcbiAgICAvLyBidXQgbmV2ZXIgbW91bnRlZCBvbiB0aGUgY2xpZW50LCBzbyBpdHMgc2xvdCBjaGlsZCBzdGF5cyBibGFuay4gKCMyODg3MClcbiAgICBjb21wb25lbnRSZWYuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIGNvbXBvbmVudFJlZi5pbnN0YW5jZS5ydW4oKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHB1YmxpYyBzZXRBY3Rpb25EZXNjcmlwdG9ycyhhY3Rpb25EZXNjcmlwdG9yczogTWFwPHN0cmluZywgVWlBY3Rpb25EZXNjcmlwdG9yPik6IHZvaWQge1xuICAgIHRoaXMuYWN0aW9uRGVzY3JpcHRvcnMgPSBhY3Rpb25EZXNjcmlwdG9ycztcbiAgfVxuXG4gIHB1YmxpYyBnZXRBY3Rpb25EZXNjcmlwdG9ycygpOiBNYXA8c3RyaW5nLCBVaUFjdGlvbkRlc2NyaXB0b3I+IHwgdW5kZWZpbmVkIHtcbiAgICBpZiAoIXRoaXMuYWN0aW9uRGVzY3JpcHRvcnMpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ05vIGFjdGlvbiBkZXNjcmlwdG9ycyBoYXMgYmVlbiBzZXQgdG8gVmlld0NvbnRleHQuJyk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmFjdGlvbkRlc2NyaXB0b3JzO1xuICB9XG5cbiAgcHVibGljIHNldFZpZXdIYW5kbGVycyh2aWV3SGFuZGxlcnM6IEFycmF5PFNtYXJ0Vmlld0hhbmRsZXJNb2RlbD4pOiB2b2lkIHtcbiAgICB0aGlzLnZpZXdIYW5kbGVycyA9IHZpZXdIYW5kbGVycztcbiAgfVxuXG4gIHB1YmxpYyBzZXRWaWV3QXBpRXJyb3JzKHZpZXdBcGlFcnJvcnM6IFNtYXJ0Vmlld0NvbnRleHRBcGlFcnJvcnMpOiB2b2lkIHtcbiAgICB0aGlzLnNtYXJ0Vmlld0NvbnRleHRBcGlFcnJvcnMgPSB2aWV3QXBpRXJyb3JzO1xuICB9XG5cbiAgcHVibGljIHNldE1lc3NhZ2VEaWFsb2dOYW1lKG1lc3NhZ2VEaWFsb2dOYW1lOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLm1lc3NhZ2VEaWFsb2duYW1lID0gbWVzc2FnZURpYWxvZ05hbWU7XG4gICAgdGhpcy52aWV3SGFuZGxlcnMucHVzaCh7XG4gICAgICBuYW1lOiBtZXNzYWdlRGlhbG9nTmFtZSxcbiAgICAgIGNvbXBvbmVudDogTWVzc2FnZURpYWxvZ0NvbXBvbmVudCxcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0VXBVcmxGb3JWaWV3U2VydmljZSgpOiB2b2lkIHtcbiAgICB0aGlzLnZpZXcuY29uZmlndXJhdGlvbi5iYXNlUGF0aCA9IHRoaXMudXJsO1xuICB9XG5cbiAgcHVibGljIGdldE1vZHVsZVVSTChtb2R1bGU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgaWYgKCF0aGlzLm1vZHVsZVVybHNCeU1vZHVsZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdNb2R1bGVzTWFwIGRvZXMgbm90IGV4aXN0LicpO1xuICAgIH1cbiAgICBsZXQgbW9kdWxlVXJsID0gdGhpcy5tb2R1bGVVcmxzQnlNb2R1bGU/LmdldChtb2R1bGUpO1xuXG4gICAgaWYgKCFtb2R1bGVVcmwpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignTW9kdWxlVXJsIGRvZXMgbm90IGV4aXN0IHdpdGggdGhlIGdpdmVuIG1vZHVsZS4nKTtcbiAgICB9XG4gICAgcmV0dXJuIG1vZHVsZVVybDtcbiAgfVxuXG4gIHB1YmxpYyBzZXRNb2R1bGVVUkwobW9kdWxlczogTWFwPHN0cmluZywgc3RyaW5nPik6IHZvaWQge1xuICAgIHRoaXMubW9kdWxlVXJsc0J5TW9kdWxlID0gbW9kdWxlcztcbiAgfVxuXG4gIHB1YmxpYyBzZXRVcmwodXJsOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLnVybCA9IHVybCArICcvdmlldyc7XG4gICAgdGhpcy5zZXRVcFVybEZvclZpZXdTZXJ2aWNlKCk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0QW5kU3luY1ZpZXdDb250ZXh0KHV1aWQ/OiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoIXV1aWQpIHtcbiAgICAgIHV1aWQgPSB0aGlzLmdldFZpZXdDb250ZXh0VXVpZCgpO1xuICAgIH1cbiAgICBhd2FpdCB0aGlzLmdldFZpZXdDb250ZXh0KHV1aWQpLnRoZW4oYXN5bmMgKCkgPT4ge1xuICAgICAgYXdhaXQgdGhpcy5zeW5jVmlldygpO1xuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGdldFZpZXdDb250ZXh0KHV1aWQ6IHN0cmluZyk6IFByb21pc2U8Vmlld0NvbnRleHREYXRhPiB7XG4gICAgdGhpcy52aWV3Q29udGV4dCA9IGF3YWl0IHRoaXMudmlldy5nZXRWaWV3Q29udGV4dCh1dWlkKS50b1Byb21pc2UoKTtcbiAgICBpZiAoIXRoaXMudmlld0NvbnRleHQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignVmlld0NvbnRleHQgZG9lcyBub3QgZXhpc3Qgd2l0aCB0aGUgZ2l2ZW4gdXVpZC4nKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMudmlld0NvbnRleHQ7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0Vmlld0NvbnRleHREYXRhQnlQYWdlTmFtZShwYWdlTmFtZTogc3RyaW5nKTogUHJvbWlzZTxWaWV3RGF0YT4ge1xuICAgIGlmICghdGhpcy52aWV3Q29udGV4dCkge1xuICAgICAgYXdhaXQgdGhpcy5nZXRWaWV3Q29udGV4dCh0aGlzLmdldFZpZXdDb250ZXh0VXVpZCgpKTtcbiAgICB9XG4gICAgbGV0IHBhZ2VVdWlkID0gdGhpcy5nZXRVdWlkT2ZQYWdlKHBhZ2VOYW1lKTtcblxuICAgIGxldCB2aWV3Q29udGV4dEJ5UGFnZU5hbWUgPSB0aGlzLnZpZXdDb250ZXh0Py52aWV3cy5maW5kKCh2aWV3KSA9PiB2aWV3LnV1aWQgPT09IHBhZ2VVdWlkKTtcbiAgICBpZiAoIXZpZXdDb250ZXh0QnlQYWdlTmFtZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBUaGUgVmlld0RhdGEgb2YgJHtwYWdlTmFtZX0gaXMgbm90IGZvdW5kIWApO1xuICAgIH1cbiAgICByZXR1cm4gdmlld0NvbnRleHRCeVBhZ2VOYW1lO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIHVwZGF0ZVZpZXdDb250ZXh0KFxuICAgIHZpZXdDb250ZXh0VXBkYXRlOiBWaWV3Q29udGV4dFVwZGF0ZVxuICApOiBQcm9taXNlPFZpZXdDb250ZXh0RGF0YSB8IHVuZGVmaW5lZD4ge1xuICAgIHZpZXdDb250ZXh0VXBkYXRlLmRldmljZUluZm8gPz89IHtcbiAgICAgIGRldmljZUlkOiAnaWQnLFxuICAgICAgdXNlckFnZW50OiBuYXZpZ2F0b3IudXNlckFnZW50LFxuICAgICAgcGFyYW1ldGVyczogbmV3IE1hcCgpLFxuICAgIH07XG4gICAgdmlld0NvbnRleHRVcGRhdGUuZGV2aWNlSW5mby5jb21wb25lbnRMaWJyYXJ5ID0gdGhpcy5jb21wb25lbnRMaWJyYXJ5O1xuICAgIHZpZXdDb250ZXh0VXBkYXRlLmRldmljZUluZm8udGhlbWVOYW1lID0gdGhpcy50aGVtZVNlcnZpY2UuY3VycmVudFRoZW1lKCk7XG5cbiAgICB0aGlzLnZpZXdDb250ZXh0ID0gYXdhaXQgdGhpcy52aWV3LnVwZGF0ZVZpZXdDb250ZXh0KHZpZXdDb250ZXh0VXBkYXRlKS50b1Byb21pc2UoKTtcblxuICAgIHJldHVybiB0aGlzLnZpZXdDb250ZXh0O1xuICB9XG5cbiAgcHJpdmF0ZSBjbGVhclNlc3Npb25TdG9yYWdlKCk6IHZvaWQge1xuICAgIHNlc3Npb25TdG9yYWdlLmNsZWFyKCk7XG4gICAgdGhpcy5jbGVhckVtYmVkZGVkVmlld3MoKTtcbiAgICB0aGlzLm9wZW5lZFZpZXdEYXRhID0gW107XG4gICAgdGhpcy5vcGVuZWRWaWV3VXVpZHMgPSBbXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUZWFyIGRvd24gYWxsIHNsb3QtaG9zdGVkIHZpZXcgY29tcG9uZW50cyBvbiBhIHZpZXdDb250ZXh0IHJlc2V0IChlLmcuIGxvZ291dCAvXG4gICAqIHZpZXdjb250ZXh0LWxvc3QpLiBXaXRob3V0IHRoaXMgdGhlIHByZXZpb3VzIHZpZXcgdHJlZSBzdGF5cyBtb3VudGVkIGluIHRoZSByb290XG4gICAqIHNsb3QgYW5kIHRoZSBuZXcgdHJlZSBpcyBhcHBlbmRlZCBhbG9uZ3NpZGUgaXQuIERlc3Ryb3lpbmcgYSBwYXJlbnQgY2FzY2FkZXMgdG9cbiAgICogaXRzIG5lc3RlZCBzbG90IGRpcmVjdGl2ZXMgKHdoaWNoIHVucmVnaXN0ZXIgdGhlaXIgY29udGFpbmVycyB2aWEgbmdPbkRlc3Ryb3kpLFxuICAgKiBsZWF2aW5nIG9ubHkgdGhlIGhvc3Qtb3duZWQgcm9vdCBzbG90IHJlZ2lzdGVyZWQuXG4gICAqL1xuICBwcml2YXRlIGNsZWFyRW1iZWRkZWRWaWV3cygpOiB2b2lkIHtcbiAgICBmb3IgKGNvbnN0IHJlZiBvZiB0aGlzLmVtYmVkZGVkVmlld1JlZnMpIHtcbiAgICAgIGlmICghcmVmLmNvbXBvbmVudFJlZi5ob3N0Vmlldy5kZXN0cm95ZWQpIHtcbiAgICAgICAgcmVmLmNvbXBvbmVudFJlZi5kZXN0cm95KCk7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuZW1iZWRkZWRWaWV3UmVmcyA9IFtdO1xuICAgIHRoaXMucGVuZGluZ0VtYmVkZGVkVmlld3MgPSBbXTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBzdGFydFZpZXdDb250ZXh0KCk6IFByb21pc2U8Vmlld0NvbnRleHREYXRhPiB7XG4gICAgdGhpcy5jbGVhclNlc3Npb25TdG9yYWdlKCk7XG4gICAgdGhpcy5zZXNzaW9uLmFkZEhlYWRlclBhcmFtKHtcbiAgICAgIGhlYWRlck5hbWU6IHRoaXMudmlld0NvbnRleHRVdWlkSGVhZGVyTmFtZSxcbiAgICAgIHZhbHVlOiAnJyxcbiAgICB9KTtcblxuICAgIGxldCBuZXdWaWV3Q29udGV4dDogVmlld0NvbnRleHREYXRhIHwgdW5kZWZpbmVkID0gYXdhaXQgdGhpcy52aWV3XG4gICAgICAuY3JlYXRlVmlld0NvbnRleHQoKVxuICAgICAgLnRvUHJvbWlzZSgpO1xuICAgIGlmICghbmV3Vmlld0NvbnRleHQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignTm8gVmlld0NvbnRleHQgd2FzIGNyZWF0ZWQnKTtcbiAgICB9XG4gICAgdGhpcy52aWV3Q29udGV4dCA9IG5ld1ZpZXdDb250ZXh0O1xuICAgIHRoaXMuc2V0Vmlld0NvbnRleHRVdWlkKG5ld1ZpZXdDb250ZXh0LnV1aWQhKTtcbiAgICB0aGlzLmdlbmVyYXRpb24rKztcblxuICAgIHJldHVybiB0aGlzLnZpZXdDb250ZXh0O1xuICB9XG5cbiAgcHVibGljIGdldEdlbmVyYXRpb24oKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5nZW5lcmF0aW9uO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGluaXRpYWxpemUodXVpZD86IHN0cmluZyk6IFByb21pc2U8Vmlld0NvbnRleHREYXRhIHwgdW5kZWZpbmVkPiB7XG4gICAgaWYgKHRoaXMuaW5pdGlhbGl6ZVJ1bm5pbmcpIHtcbiAgICAgIHJldHVybiB0aGlzLmluaXRpYWxpemVSdW5uaW5nLnRvUHJvbWlzZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmluaXRpYWxpemVSdW5uaW5nID0gbmV3IFNtYXJ0U3ViamVjdCh0aGlzLl9kZXN0cm95JCk7XG4gICAgICB0cnkge1xuICAgICAgICBpZiAodGhpcy52aWV3SGFuZGxlcnMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgXCJUaGVyZSBhcmVuJ3QgYW55IHZpZXdIYW5kbGVycyBpbiBTbWFydFZpZXdDb250ZXh0U2VydmljZSEgUHJvdmlkZSBzb21lIHRvIHVzZSBpdHMgZnVuY3Rpb25zLlwiXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMubWVzc2FnZURpYWxvZ25hbWUpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBtZXNzYWdlRGlhbG9nTmFtZSBwcm92aWRlZCBieSB0aGUgYmFja2VuZCBoYXMgbm90IGJlZW4gc2V0LicpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh1dWlkKSB7XG4gICAgICAgICAgdGhpcy5zZXRWaWV3Q29udGV4dFV1aWQodXVpZCk7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuZ2V0Vmlld0NvbnRleHQodXVpZCk7XG4gICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLnN0YXJ0Vmlld0NvbnRleHQoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYXdhaXQgdGhpcy5zdGFydFZpZXdDb250ZXh0KCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy52aWV3Q29udGV4dCE7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICB0aGlzLmluaXRpYWxpemVSdW5uaW5nLm5leHQodGhpcy52aWV3Q29udGV4dCEpO1xuICAgICAgICB0aGlzLmluaXRpYWxpemVSdW5uaW5nLmNvbXBsZXRlKCk7XG4gICAgICAgIHRoaXMuaW5pdGlhbGl6ZVJ1bm5pbmcgPSB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGFzeW5jIGluaXRWaWV3Q29udGV4dCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBsZXQgdXVpZDtcbiAgICB0cnkge1xuICAgICAgdXVpZCA9IHRoaXMuZ2V0Vmlld0NvbnRleHRVdWlkKCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGF3YWl0IHRoaXMuaW5pdGlhbGl6ZSgpO1xuICAgICAgdXVpZCA9IHRoaXMuZ2V0Vmlld0NvbnRleHRVdWlkKCk7XG4gICAgfVxuICAgIGF3YWl0IHRoaXMuaW5pdGlhbGl6ZSh1dWlkKTtcbiAgICBhd2FpdCB0aGlzLnJlc3RvcmVWaWV3cyh1dWlkKTtcbiAgICBhd2FpdCB0aGlzLmdldEFuZFN5bmNWaWV3Q29udGV4dCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEh5ZHJhdGVzIHRoZSB2aWV3LWNvbnRleHQgc3RhdGUgZnJvbSBhbiBhbHJlYWR5LWV4aXN0aW5nIFVVSUQgcHJvdmlkZWRcbiAgICogZXh0ZXJuYWxseSAoZS5nLiBieSBhIG5hdGl2ZSBtb2JpbGUgc2hlbGwgdmlhIFVSTCBmcmFnbWVudCkuIFVubGlrZVxuICAgKiBgaW5pdGlhbGl6ZSh1dWlkKWAsIHRoaXMgbWV0aG9kIGRvZXMgTk9UIGZhbGwgYmFjayB0byBjcmVhdGluZyBhIGZyZXNoXG4gICAqIHZpZXdDb250ZXh0IGlmIHRoZSBiYWNrZW5kIHJlamVjdHMgdGhlIFVVSUQg4oCUIHRoZSBjYWxsZXIgaXMgZXhwZWN0ZWQgdG9cbiAgICogc3VyZmFjZSB0aGUgZmFpbHVyZSAodHlwaWNhbGx5IHZpYSB0aGUgYm9vdHN0cmFwJ3MgYG9uU3RhcnRFcnJvcmAgaG9vaykuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgaW5pdEZyb21FeGlzdGluZ1ZpZXdDb250ZXh0KHV1aWQ6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMuc2V0Vmlld0NvbnRleHRVdWlkKHV1aWQpO1xuICAgIGF3YWl0IHRoaXMuZ2V0Vmlld0NvbnRleHQodXVpZCk7XG4gICAgYXdhaXQgdGhpcy5yZXN0b3JlVmlld3ModXVpZCk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgaW5pdE5ld1ZpZXdDb250ZXh0KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLmluaXRpTmV3Q29udGV4dFJ1bm5pbmcpIHtcbiAgICAgIHJldHVybiB0aGlzLmluaXRpTmV3Q29udGV4dFJ1bm5pbmcudG9Qcm9taXNlKCk7XG4gICAgfVxuICAgIHRoaXMuaW5pdGlOZXdDb250ZXh0UnVubmluZyA9IG5ldyBTbWFydFN1YmplY3QodGhpcy5fZGVzdHJveSQpO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLnN0YXJ0Vmlld0NvbnRleHQoKTtcbiAgICAgIGxldCB1dWlkID0gdGhpcy5nZXRWaWV3Q29udGV4dFV1aWQoKTtcbiAgICAgIGF3YWl0IHRoaXMuaW5pdGlhbGl6ZSh1dWlkKTtcbiAgICAgIGF3YWl0IHRoaXMucmVzdG9yZVZpZXdzKHV1aWQpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLmluaXRpTmV3Q29udGV4dFJ1bm5pbmcubmV4dCgpO1xuICAgICAgdGhpcy5pbml0aU5ld0NvbnRleHRSdW5uaW5nLmNvbXBsZXRlKCk7XG4gICAgICB0aGlzLmluaXRpTmV3Q29udGV4dFJ1bm5pbmcgPSB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIG9wZW5WaWV3KHZpZXc6IFZpZXdEYXRhKTogVmlld1N0YXRlVXBkYXRlIHwgdW5kZWZpbmVkIHtcbiAgICBsZXQgYWxyZWFkeU9wZW5lZCA9IHRoaXMub3BlbmVkVmlld1V1aWRzLnNvbWUoKHV1aWQpID0+IHV1aWQgPT09IHZpZXcudXVpZCk7XG4gICAgaWYgKGFscmVhZHlPcGVuZWQpIHJldHVybiB1bmRlZmluZWQ7XG5cbiAgICBjb25zdCB2aWV3SGFuZGxlciA9IHJlc29sdmVWaWV3SGFuZGxlcih0aGlzLnZpZXdIYW5kbGVycywgdGhpcy5kZWZhdWx0Q29tcG9uZW50cywgdmlldyk7XG5cbiAgICBpZiAoIXZpZXdIYW5kbGVyKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBTbWFydFZpZXdIYW5kbGVyTW9kZWwgd2FzIG5vdCBmb3VuZCBieSB2aWV3IG5hbWU6ICR7dmlldy52aWV3TmFtZX0gKGNvbXBvbmVudE5hbWU6ICR7dmlldy5jb21wb25lbnROYW1lfSlgXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAodmlldy50eXBlID09PSBWaWV3VHlwZS5ESUFMT0cpIHtcbiAgICAgIGlmICghdmlld0hhbmRsZXIuY29tcG9uZW50KSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgQ29tcG9uZW50IGlzIHVuZGVmaW5lZCBpbiBTbWFydFZpZXdIYW5kbGVyTW9kZWwgd2l0aCBuYW1lOiAke3ZpZXcudmlld05hbWV9YFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgbGV0IHJlZklzQWxyYWR5QWRkZWQgPSB0aGlzLmRpYWxvZ1JlZnMuc29tZShcbiAgICAgICAgKHJlZjogU21hcnRWaWV3RGlhbG9nUmVmKSA9PiByZWYudXVpZCA9PT0gdmlldy51dWlkXG4gICAgICApO1xuICAgICAgaWYgKCFyZWZJc0FscmFkeUFkZGVkKSB7XG4gICAgICAgIGxldCBkaWFsb2dSZWY7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgdGhpcy5vcGVuZWRWaWV3VXVpZHMucHVzaCh2aWV3LnV1aWQpO1xuICAgICAgICAgIHRoaXMub3BlbmVkVmlld0RhdGEucHVzaCh2aWV3KTtcbiAgICAgICAgICB0aGlzLnNldFV1aWRPZlBhZ2Uodmlldy52aWV3TmFtZSwgdmlldy51dWlkLCB2aWV3SGFuZGxlci5jb21wb25lbnROYW1lKTtcbiAgICAgICAgICBkaWFsb2dSZWYgPSB0aGlzLmRpYWxvZy5vcGVuQ29tcG9uZW50QXNEaWFsb2coXG4gICAgICAgICAgICB2aWV3SGFuZGxlci5jb21wb25lbnQsXG4gICAgICAgICAgICB2aWV3SGFuZGxlci5uYW1lLFxuICAgICAgICAgICAgdmlldy51dWlkXG4gICAgICAgICAgKTtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMub3BlbmVkVmlld1V1aWRzLmluZGV4T2Yodmlldy51dWlkKTtcbiAgICAgICAgICBpZiAoaW5kZXggPj0gMCkge1xuICAgICAgICAgICAgdGhpcy5vcGVuZWRWaWV3VXVpZHMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgICAgIHRoaXMub3BlbmVkVmlld0RhdGEuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgICAgIHRoaXMuY2xlYXJVdWlkT2ZQYWdlKHZpZXcudmlld05hbWUsIHZpZXdIYW5kbGVyLmNvbXBvbmVudE5hbWUpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHRoaXMuc2V0VXVpZE9mUGFnZSh2aWV3LnZpZXdOYW1lLCB2aWV3LnV1aWQsIHZpZXdIYW5kbGVyLmNvbXBvbmVudE5hbWUpO1xuICAgICAgICB9XG4gICAgICAgIGxldCBkaWFsb2dEaXNhYmxlQ2xvc2UgPSB0cnVlO1xuICAgICAgICBsZXQgaXNNZXNzYWdlRGlhbG9nID0gdmlldy52aWV3TmFtZSA9PT0gdGhpcy5tZXNzYWdlRGlhbG9nbmFtZTtcbiAgICAgICAgaWYgKCFpc01lc3NhZ2VEaWFsb2cpIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgZGlhbG9nRGlzYWJsZUNsb3NlID0gdGhpcy5pbmplY3QuZ2V0KERJQUxPR19ESVNBQkxFX0NMT1NFKTtcbiAgICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGR1cmluZyByZWFkaW5nIERJQUxPR19ESVNBQkxFX0NMT1NFJyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChkaWFsb2dSZWYgaW5zdGFuY2VvZiBNYXREaWFsb2dSZWYpIHtcbiAgICAgICAgICBkaWFsb2dSZWYuZGlzYWJsZUNsb3NlID0gZGlhbG9nRGlzYWJsZUNsb3NlO1xuICAgICAgICAgIC8vIGlmIChpc01lc3NhZ2VEaWFsb2cpIHtcbiAgICAgICAgICAvLyAgIGlmICh2aWV3Lm1lc3NhZ2U/Lm9wdGlvbnMgJiYgdmlldy5tZXNzYWdlLm9wdGlvbnMubGVuZ3RoKSB7XG4gICAgICAgICAgLy8gICB9XG4gICAgICAgICAgLy8gfVxuICAgICAgICAgIGlmICghZGlhbG9nRGlzYWJsZUNsb3NlKSB7XG4gICAgICAgICAgICBkaWFsb2dSZWZcbiAgICAgICAgICAgICAgLmFmdGVyQ2xvc2VkKClcbiAgICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kkKSlcbiAgICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5wZXJmb3JtQWN0aW9uKHZpZXcudXVpZCwgeyBjb2RlOiBEZWZhdWx0VWlBY3Rpb25Db2RlX0NMT1NFLCBwYXJhbXM6IHt9IH0pO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoZGlhbG9nUmVmIGluc3RhbmNlb2YgRHluYW1pY0RpYWxvZ1JlZikge1xuICAgICAgICAgIGlmICghZGlhbG9nRGlzYWJsZUNsb3NlKSB7XG4gICAgICAgICAgICBkaWFsb2dSZWYub25EZXN0cm95LnBpcGUodGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kkKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5wZXJmb3JtQWN0aW9uKHZpZXcudXVpZCwgeyBjb2RlOiBEZWZhdWx0VWlBY3Rpb25Db2RlX0NMT1NFLCBwYXJhbXM6IHt9IH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5kaWFsb2dSZWZzLnB1c2goe1xuICAgICAgICAgIHV1aWQ6IHZpZXcudXVpZCxcbiAgICAgICAgICBkaWFsb2dSZWYsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodmlldy50eXBlID09PSBWaWV3VHlwZS5OT1JNQUwpIHtcbiAgICAgIGlmICghdmlld0hhbmRsZXIuY29tcG9uZW50KSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgQ29tcG9uZW50IGlzIHVuZGVmaW5lZCBpbiBTbWFydFZpZXdIYW5kbGVyTW9kZWwgd2l0aCBuYW1lOiAke3ZpZXcudmlld05hbWV9YFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgLy8gQ09NUEFUSUJJTElUWSBTSElNICgjMjg4NzAsIGludGVudGlvbmFsKTogc29tZSBjaGlsZCBzZXJ2aWNlcyAoU21hcnR0cmVlR2VuZXJpY1NlcnZpY2UsXG4gICAgICAvLyBTbWFydEZpbHRlckVkaXRvclNlcnZpY2UpIGFuZCBnZW5lcmljIGNvbXBvbmVudHMgKFNlYXJjaFBhZ2VDb21wb25lbnQsIEdlbmVyaWNQYWdlQ29tcG9uZW50KVxuICAgICAgLy8gc3RpbGwgcmVzb2x2ZSB0aGVpciB2aWV3IHV1aWQgdmlhIHRoZSBwYWdlTmFtZSAtPiBnZXRVdWlkT2ZQYWdlKHNlc3Npb25TdG9yYWdlKSBpbmRpcmVjdGlvblxuICAgICAgLy8gaW4gdGhlaXIgQ09OU1RSVUNUT1IsIHdoaWNoIHJ1bnMgaW5zaWRlIGNyZWF0ZUNvbXBvbmVudCgpIGJlbG93IOKAlCBiZWZvcmUgb3BlblZpZXcncyBub3JtYWxcbiAgICAgIC8vIGJvb2trZWVwaW5nLiBTbyB0aGUgbWFwcGluZyBtdXN0IGJlIHdyaXR0ZW4gaGVyZSwgYWhlYWQgb2YgY29tcG9uZW50IGNyZWF0aW9uLiBUaGUgcHJvcGVyXG4gICAgICAvLyBmaXggKGZlZWQgdGhvc2UgY29uc3VtZXJzIHRoZSBpbmplY3RlZCB1dWlkICsgZGVmZXIgdGhlaXIgaW5pdCkgaXMgZGVmZXJyZWQgY29uc3VtZXIgcGx1bWJpbmc7XG4gICAgICAvLyB1bnRpbCB0aGVuIHRoaXMgd3JpdGUga2VlcHMgdGhlIGluZGlyZWN0aW9uIGNvcnJlY3QgaW4gdGhlIHNsb3Qgd29ybGQuXG4gICAgICB0aGlzLnNldFV1aWRPZlBhZ2Uodmlldy52aWV3TmFtZSwgdmlldy51dWlkLCB2aWV3SGFuZGxlci5jb21wb25lbnROYW1lKTtcbiAgICAgIC8vIEEgTk9STUFMIHZpZXcgd2l0aCBubyBjb250YWluZXJVdWlkIGxhbmRzIGluIHRoZSBob3N0IHJvb3Qgc2xvdCAocmVzb2x2ZVNsb3QgbWFwc1xuICAgICAgLy8gaXQgdG8gUk9PVF9DT05UQUlORVJfVVVJRCk7IGlmIG5vIHNsb3QgaXMgcmVnaXN0ZXJlZCB5ZXQgaXQgcXVldWVzIGFuZCBkcmFpbnMgbGF0ZXIuXG4gICAgICBjb25zdCBpbnNlcnRlZCA9IHRoaXMuaW5zZXJ0Vmlld0ludG9TbG90KHZpZXcsIHZpZXdIYW5kbGVyLmNvbXBvbmVudCk7XG4gICAgICBpZiAoIWluc2VydGVkKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH0gZWxzZSBpZiAodmlldy50eXBlID09PSBWaWV3VHlwZS5FTUJFRERFRCkge1xuICAgICAgaWYgKCF2aWV3SGFuZGxlci5jb21wb25lbnQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBDb21wb25lbnQgaXMgdW5kZWZpbmVkIGluIFNtYXJ0Vmlld0hhbmRsZXJNb2RlbCB3aXRoIG5hbWU6ICR7dmlldy52aWV3TmFtZX1gXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICAvLyBXcml0ZSB0aGUgcGFnZS11dWlkIG1hcHBpbmcgYWhlYWQgb2YgY29tcG9uZW50IGNyZWF0aW9uIHNvIGNvbnN0cnVjdG9yLXRpbWVcbiAgICAgIC8vIGFuZCBuZXN0ZWQgZ2V0VXVpZE9mUGFnZSh2aWV3TmFtZSkgY29uc3VtZXJzIChmaWx0ZXIsIHRyZWUpIHJlc29sdmUuIFRoZVxuICAgICAgLy8gcGFnZS48dmlld05hbWU+IGtleSBpcyBkaXN0aW5jdCBwZXIgdmlldywgc28gaXQgbmV2ZXIgY29sbGlkZXMuIFRoZVxuICAgICAgLy8gY29tcG9uZW50Ljxjb21wb25lbnROYW1lPiByZXZlcnNlIGtleSBDQU4gYmUgb3ZlcndyaXR0ZW4gYnkgYW5vdGhlclxuICAgICAgLy8gY29uY3VycmVudCBkeW5hbWljIHZpZXcgb2YgdGhlIHNhbWUgZGVmYXVsdCBjb21wb25lbnQsIGJ1dCBpdCBpcyByZWFkIG9ubHlcbiAgICAgIC8vIHN5bmNocm9ub3VzbHkgaW4gdGhlIGNvbnN0cnVjdG9yIChyaWdodCBhZnRlciB0aGlzIHdyaXRlKSBhbmQgc2xvdCB2aWV3c1xuICAgICAgLy8gbG9hZCB2aWEgdGhlIGluamVjdGVkIF91dWlkIGFmdGVyd2FyZHMsIHNvIHRoZSBvdmVyd3JpdGUgbmV2ZXIgbWlzLXJlc29sdmVzXG4gICAgICAvLyBhdCBydW50aW1lLiAoIzI4ODcwKVxuICAgICAgdGhpcy5zZXRVdWlkT2ZQYWdlKHZpZXcudmlld05hbWUsIHZpZXcudXVpZCwgdmlld0hhbmRsZXIuY29tcG9uZW50TmFtZSk7XG4gICAgICBjb25zdCBpbnNlcnRlZCA9IHRoaXMuaW5zZXJ0Vmlld0ludG9TbG90KHZpZXcsIHZpZXdIYW5kbGVyLmNvbXBvbmVudCk7XG4gICAgICBpZiAoIWluc2VydGVkKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSB0eXBlIG9mIHRoZSB2aWV3IGFuZCBpdHMgdmlld0hhbmRsZXIgaXMgbm90IHRoZSBzYW1lIScpO1xuICAgIH1cblxuICAgIHZpZXcuc3RhdGUgPSBWaWV3U3RhdGUuT1BFTkVEO1xuXG4gICAgdGhpcy5vcGVuZWRWaWV3VXVpZHMucHVzaCh2aWV3LnV1aWQpO1xuICAgIHRoaXMub3BlbmVkVmlld0RhdGEucHVzaCh2aWV3KTtcblxuICAgIGlmICh2aWV3LnR5cGUgIT09IFZpZXdUeXBlLkVNQkVEREVEKSB7XG4gICAgICB0aGlzLnNldFV1aWRPZlBhZ2Uodmlldy52aWV3TmFtZSwgdmlldy51dWlkLCB2aWV3SGFuZGxlci5jb21wb25lbnROYW1lKTtcbiAgICAgIHRoaXMudXVpZE9mUGFnZUhhc0JlZW5DaGFuZ2VkLm5leHQodmlldy52aWV3TmFtZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIHN0YXRlOiBWaWV3U3RhdGUuT1BFTkVELFxuICAgICAgdXVpZDogdmlldy51dWlkLFxuICAgIH07XG4gIH1cblxuICBwdWJsaWMgY2xvc2VWaWV3KHZpZXc6IFZpZXdEYXRhKTogVmlld1N0YXRlVXBkYXRlW10ge1xuICAgIGNvbnN0IHZpZXdIYW5kbGVyID0gcmVzb2x2ZVZpZXdIYW5kbGVyKHRoaXMudmlld0hhbmRsZXJzLCB0aGlzLmRlZmF1bHRDb21wb25lbnRzLCB2aWV3KTtcblxuICAgIGlmICghdmlld0hhbmRsZXIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYFNtYXJ0Vmlld0hhbmRsZXJNb2RlbCB3YXMgbm90IGZvdW5kIGJ5IHZpZXcgbmFtZTogJHt2aWV3LnZpZXdOYW1lfSAoY29tcG9uZW50TmFtZTogJHt2aWV3LmNvbXBvbmVudE5hbWV9KWBcbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3QgdXBkYXRlczogVmlld1N0YXRlVXBkYXRlW10gPSBbXTtcblxuICAgIGlmICh2aWV3LnR5cGUgPT09IFZpZXdUeXBlLkRJQUxPRykge1xuICAgICAgbGV0IGRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nUmVmcy5maW5kKFxuICAgICAgICAoZGlhbG9nUmVmOiBTbWFydFZpZXdEaWFsb2dSZWYpID0+IGRpYWxvZ1JlZi51dWlkID09PSB2aWV3LnV1aWRcbiAgICAgICk7XG4gICAgICBpZiAoZGlhbG9nUmVmKSB7XG4gICAgICAgIGRpYWxvZ1JlZi5kaWFsb2dSZWYuY2xvc2UoKTtcbiAgICAgICAgbGV0IGluZGV4ID0gdGhpcy5kaWFsb2dSZWZzLmluZGV4T2YoZGlhbG9nUmVmKTtcbiAgICAgICAgdGhpcy5kaWFsb2dSZWZzLnNwbGljZShpbmRleCwgMSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBjb25zb2xlLmxvZygnRGlhbG9nUmVmIGlzIG5vdCBmb3VuZCBieSB1dWlkLicpO1xuICAgICAgfVxuICAgICAgdXBkYXRlcy5wdXNoKC4uLnRoaXMuY2xlYW51cEVtYmVkZGVkQ2hpbGRyZW4odmlldy51dWlkKSk7XG4gICAgfSBlbHNlIGlmICh2aWV3LnR5cGUgPT09IFZpZXdUeXBlLk5PUk1BTCkge1xuICAgICAgLy8gRGVzdHJveSBuZXN0ZWQgY2hpbGRyZW4gZmlyc3QsIHRoZW4gdGhlIHZpZXcncyBvd24gc2xvdCBjb21wb25lbnQuXG4gICAgICAvLyBkZXN0cm95Vmlld1JlZiBpcyBhIG5vLW9wIGZvciB0aGUgbGVnYWN5IHJvdXRlLXJlbmRlcmVkIChyb290bGVzcykgY2FzZS5cbiAgICAgIHVwZGF0ZXMucHVzaCguLi50aGlzLmNsZWFudXBFbWJlZGRlZENoaWxkcmVuKHZpZXcudXVpZCkpO1xuICAgICAgdGhpcy5kZXN0cm95Vmlld1JlZih2aWV3LnV1aWQpO1xuICAgIH0gZWxzZSBpZiAodmlldy50eXBlID09PSBWaWV3VHlwZS5FTUJFRERFRCkge1xuICAgICAgdGhpcy5kZXN0cm95Vmlld1JlZih2aWV3LnV1aWQpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSB0eXBlIG9mIHRoZSB2aWV3IGFuZCBpdHMgdmlld0hhbmRsZXIgaXMgbm90IHRoZSBzYW1lIScpO1xuICAgIH1cblxuICAgIHZpZXcuc3RhdGUgPSBWaWV3U3RhdGUuQ0xPU0VEO1xuXG4gICAgY29uc3QgaW5kZXggPSB0aGlzLm9wZW5lZFZpZXdVdWlkcy5pbmRleE9mKHZpZXcudXVpZCk7XG4gICAgaWYgKGluZGV4ID49IDApIHtcbiAgICAgIHRoaXMub3BlbmVkVmlld1V1aWRzLnNwbGljZShpbmRleCwgMSk7XG4gICAgICB0aGlzLm9wZW5lZFZpZXdEYXRhLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAvLyBDbGVhciBmb3IgZXZlcnkgdHlwZTogb3BlblZpZXcgbm93IHdyaXRlcyB0aGUgcGFnZS11dWlkIG1hcHBpbmcgZm9yXG4gICAgICAvLyBFTUJFRERFRCB2aWV3cyB0b28gKCMyODg3MCksIHNvIHRoZSBjbGVhciBtdXN0IGJlIHN5bW1ldHJpYyB0byBhdm9pZCBhXG4gICAgICAvLyBzdGFsZSBzZXNzaW9uU3RvcmFnZSBlbnRyeS4gY2xlYXJVdWlkT2ZQYWdlIGlzIGEgbm8tb3AgZm9yIGtleXMgbmV2ZXJcbiAgICAgIC8vIHdyaXR0ZW4sIHNvIHRoaXMgc3RheXMgc2FmZSBmb3IgdGhlIGxlZ2FjeSByb290bGVzcyBjYXNlLlxuICAgICAgdGhpcy5jbGVhclV1aWRPZlBhZ2Uodmlldy52aWV3TmFtZSwgdmlld0hhbmRsZXIuY29tcG9uZW50TmFtZSk7XG4gICAgfVxuXG4gICAgdXBkYXRlcy5wdXNoKHtcbiAgICAgIHN0YXRlOiBWaWV3U3RhdGUuQ0xPU0VELFxuICAgICAgdXVpZDogdmlldy51dWlkLFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHVwZGF0ZXM7XG4gIH1cblxuICBwcml2YXRlIGNsZWFudXBFbWJlZGRlZENoaWxkcmVuKGNvbnRhaW5lclV1aWQ6IHN0cmluZyk6IFZpZXdTdGF0ZVVwZGF0ZVtdIHtcbiAgICBjb25zdCB1cGRhdGVzOiBWaWV3U3RhdGVVcGRhdGVbXSA9IFtdO1xuXG4gICAgY29uc3QgY2hpbGRyZW4gPSB0aGlzLmVtYmVkZGVkVmlld1JlZnMuZmlsdGVyKChyZWYpID0+IHJlZi5jb250YWluZXJVdWlkID09PSBjb250YWluZXJVdWlkKTtcbiAgICBmb3IgKGNvbnN0IGNoaWxkIG9mIGNoaWxkcmVuKSB7XG4gICAgICBjaGlsZC5jb21wb25lbnRSZWYuZGVzdHJveSgpO1xuICAgICAgdXBkYXRlcy5wdXNoKHsgc3RhdGU6IFZpZXdTdGF0ZS5DTE9TRUQsIHV1aWQ6IGNoaWxkLnV1aWQgfSk7XG4gICAgfVxuICAgIHRoaXMuZW1iZWRkZWRWaWV3UmVmcyA9IHRoaXMuZW1iZWRkZWRWaWV3UmVmcy5maWx0ZXIoXG4gICAgICAocmVmKSA9PiByZWYuY29udGFpbmVyVXVpZCAhPT0gY29udGFpbmVyVXVpZFxuICAgICk7XG5cbiAgICB0aGlzLnBlbmRpbmdFbWJlZGRlZFZpZXdzID0gdGhpcy5wZW5kaW5nRW1iZWRkZWRWaWV3cy5maWx0ZXIoXG4gICAgICAodikgPT4gdi5jb250YWluZXJVdWlkICE9PSBjb250YWluZXJVdWlkXG4gICAgKTtcblxuICAgIHRoaXMuZW1iZWRkZWRDb250YWluZXJzLmRlbGV0ZShjb250YWluZXJVdWlkKTtcblxuICAgIHJldHVybiB1cGRhdGVzO1xuICB9XG5cbiAgLyoqIERlc3Ryb3kgdGhlIGNvbXBvbmVudCBmb3IgYSB2aWV3IGxpdmluZyBpbiBhIHNsb3QsIGlmIHByZXNlbnQgKG5vLW9wIGZvciByb3V0ZS1yZW5kZXJlZCB2aWV3cykuICovXG4gIHByaXZhdGUgZGVzdHJveVZpZXdSZWYodXVpZDogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgcmVmSW5kZXggPSB0aGlzLmVtYmVkZGVkVmlld1JlZnMuZmluZEluZGV4KChyZWYpID0+IHJlZi51dWlkID09PSB1dWlkKTtcbiAgICBpZiAocmVmSW5kZXggPj0gMCkge1xuICAgICAgdGhpcy5lbWJlZGRlZFZpZXdSZWZzW3JlZkluZGV4XS5jb21wb25lbnRSZWYuZGVzdHJveSgpO1xuICAgICAgdGhpcy5lbWJlZGRlZFZpZXdSZWZzLnNwbGljZShyZWZJbmRleCwgMSk7XG4gICAgfVxuICAgIHRoaXMucGVuZGluZ0VtYmVkZGVkVmlld3MgPSB0aGlzLnBlbmRpbmdFbWJlZGRlZFZpZXdzLmZpbHRlcigodikgPT4gdi51dWlkICE9PSB1dWlkKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgc2VuZFZpZXdDb250ZXh0VXBkYXRlcyh1cGRhdGVzVG9TZW5kOiAoVmlld1N0YXRlVXBkYXRlIHwgdW5kZWZpbmVkKVtdKSB7XG4gICAgY29uc3QgdXBkYXRlczogVmlld1N0YXRlVXBkYXRlW10gPSBbXTtcbiAgICB1cGRhdGVzVG9TZW5kLmZvckVhY2goKHVwZGF0ZSkgPT4ge1xuICAgICAgaWYgKHVwZGF0ZSAhPT0gdW5kZWZpbmVkICYmIHVwZGF0ZSAhPT0gbnVsbCkgdXBkYXRlcy5wdXNoKHVwZGF0ZSk7XG4gICAgfSk7XG4gICAgaWYgKHVwZGF0ZXMubGVuZ3RoID4gMCkge1xuICAgICAgYXdhaXQgdGhpcy51cGRhdGVWaWV3Q29udGV4dCh7XG4gICAgICAgIHVwZGF0ZXMsXG4gICAgICAgIHV1aWQ6IHRoaXMudmlld0NvbnRleHQ/LnV1aWQsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cbiAgcHVibGljIGFzeW5jIHJlc3RvcmVWaWV3cyh1dWlkOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB1cGRhdGVzOiBWaWV3U3RhdGVVcGRhdGVbXSA9IFtdO1xuICAgIGlmICghdGhpcy52aWV3Q29udGV4dCkge1xuICAgICAgYXdhaXQgdGhpcy5nZXRWaWV3Q29udGV4dCh1dWlkKTtcbiAgICB9XG5cbiAgICB0aGlzLnZpZXdDb250ZXh0IS52aWV3cy5maWx0ZXIoXG4gICAgICAodmlldykgPT4gdmlldy5zdGF0ZSA9PT0gVmlld1N0YXRlLk9QRU5FRCB8fCB2aWV3LnN0YXRlID09PSBWaWV3U3RhdGUuVE9fT1BFTlxuICAgICkubWFwKCh2aWV3OiBWaWV3RGF0YSkgPT4ge1xuICAgICAgY29uc3QgdXBkYXRlID0gdGhpcy5vcGVuVmlldyh2aWV3KTtcbiAgICAgIGlmICh1cGRhdGUpIHtcbiAgICAgICAgdXBkYXRlcy5wdXNoKHVwZGF0ZSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgYXdhaXQgdGhpcy5zZW5kVmlld0NvbnRleHRVcGRhdGVzKHVwZGF0ZXMpO1xuICB9XG5cbiAgcHJpdmF0ZSByZXVzZUVuYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5pbmplY3QuZ2V0KFJFVVNFX1JPVVRFUl9TTE9UX0NPTVBPTkVOVCk7XG4gICAgICByZXR1cm4gdmFsdWUgIT09IGZhbHNlOyAvLyBkZWZhdWx0IE9OIHdoZW4gdW5zZXQvbnVsbFxuICAgIH0gY2F0Y2gge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBleGVjdXRlUmV1c2Uob2xkVmlldzogVmlld0RhdGEsIG5ld1ZpZXc6IFZpZXdEYXRhKTogVmlld1N0YXRlVXBkYXRlW10ge1xuICAgIGNvbnN0IHJlZiA9IHRoaXMuZW1iZWRkZWRWaWV3UmVmcy5maW5kKChyKSA9PiByLnV1aWQgPT09IG9sZFZpZXcudXVpZCk7XG4gICAgaWYgKCFyZWYpIHtcbiAgICAgIC8vIE5vIGxpdmUgY29tcG9uZW50IHRvIHJldXNlIChlLmcuIHdhcyByb3V0ZS1yZW5kZXJlZCkg4oCUIGZhbGwgYmFjayB0byBjbG9zZSArIG9wZW4uXG4gICAgICBjb25zdCB1cGRhdGVzID0gWy4uLnRoaXMuY2xvc2VWaWV3KG9sZFZpZXcpXTtcbiAgICAgIGNvbnN0IG9wZW5lZCA9IHRoaXMub3BlblZpZXcobmV3Vmlldyk7XG4gICAgICBpZiAob3BlbmVkKSB1cGRhdGVzLnB1c2gob3BlbmVkKTtcbiAgICAgIHJldHVybiB1cGRhdGVzO1xuICAgIH1cbiAgICAvLyBUaGUgcmV1c2VkIHBhcmVudCBpcyBsb2dpY2FsbHkgYSBmcmVzaCBwYWdlIChuZXcgdXVpZCk7IGl0cyBwcmV2aW91cyBlbWJlZGRlZFxuICAgIC8vIGNoaWxkcmVuIGRvIG5vdCBjYXJyeSBvdmVyICh0aGUgYmFja2VuZCBsZWF2ZXMgdGhlbSBrZXllZCB1bmRlciB0aGUgb2xkIHBhcmVudFxuICAgIC8vIHV1aWQpLiBUZWFyIHRoZW0gZG93biBoZXJlIGFuZCByZXBvcnQgdGhlbSBDTE9TRUQuXG4gICAgY29uc3QgY2hpbGRVcGRhdGVzID0gdGhpcy5jbGVhbnVwRW1iZWRkZWRDaGlsZHJlbihvbGRWaWV3LnV1aWQpO1xuXG4gICAgcmVmLmNvbXBvbmVudFJlZi5pbnN0YW5jZS51dWlkID0gbmV3Vmlldy51dWlkOyAvLyBzZXR0ZXIgcnVucyB1bmZvbGxvdyhvbGQpL2ZvbGxvdyhuZXcpXG4gICAgcmVmLnV1aWQgPSBuZXdWaWV3LnV1aWQ7XG5cbiAgICBjb25zdCBvbGRJZHggPSB0aGlzLm9wZW5lZFZpZXdVdWlkcy5pbmRleE9mKG9sZFZpZXcudXVpZCk7XG4gICAgaWYgKG9sZElkeCA+PSAwKSB7XG4gICAgICB0aGlzLm9wZW5lZFZpZXdVdWlkcy5zcGxpY2Uob2xkSWR4LCAxKTtcbiAgICAgIHRoaXMub3BlbmVkVmlld0RhdGEuc3BsaWNlKG9sZElkeCwgMSk7XG4gICAgfVxuICAgIHRoaXMub3BlbmVkVmlld1V1aWRzLnB1c2gobmV3Vmlldy51dWlkKTtcbiAgICB0aGlzLm9wZW5lZFZpZXdEYXRhLnB1c2gobmV3Vmlldyk7XG5cbiAgICByZWYuY29tcG9uZW50UmVmLmluc3RhbmNlLnJ1bigpO1xuXG4gICAgb2xkVmlldy5zdGF0ZSA9IFZpZXdTdGF0ZS5DTE9TRUQ7XG4gICAgbmV3Vmlldy5zdGF0ZSA9IFZpZXdTdGF0ZS5PUEVORUQ7XG5cbiAgICAvLyBNaXJyb3IgdGhlIG5vcm1hbCBvcGVuVmlldyB0YWlsIHNvIGdldFV1aWRPZlBhZ2UgY29uc3VtZXJzIChlLmcuIHRyZWVzKSByZXNvbHZlIHRoZSBuZXcgdXVpZC5cbiAgICBjb25zdCB2aWV3SGFuZGxlciA9IHJlc29sdmVWaWV3SGFuZGxlcih0aGlzLnZpZXdIYW5kbGVycywgdGhpcy5kZWZhdWx0Q29tcG9uZW50cywgbmV3Vmlldyk7XG4gICAgdGhpcy5zZXRVdWlkT2ZQYWdlKG5ld1ZpZXcudmlld05hbWUsIG5ld1ZpZXcudXVpZCwgdmlld0hhbmRsZXI/LmNvbXBvbmVudE5hbWUpO1xuICAgIHRoaXMudXVpZE9mUGFnZUhhc0JlZW5DaGFuZ2VkLm5leHQobmV3Vmlldy52aWV3TmFtZSk7XG5cbiAgICByZXR1cm4gW1xuICAgICAgLi4uY2hpbGRVcGRhdGVzLFxuICAgICAgeyBzdGF0ZTogVmlld1N0YXRlLkNMT1NFRCwgdXVpZDogb2xkVmlldy51dWlkIH0sXG4gICAgICB7IHN0YXRlOiBWaWV3U3RhdGUuT1BFTkVELCB1dWlkOiBuZXdWaWV3LnV1aWQgfSxcbiAgICBdO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIHN5bmNWaWV3KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHVwZGF0ZXM6IChWaWV3U3RhdGVVcGRhdGUgfCB1bmRlZmluZWQpW10gPSBbXTtcbiAgICBjb25zdCBvcHMgPSBidWlsZFZpZXdPcHModGhpcy52aWV3Q29udGV4dD8udmlld3MgPz8gW10sIHRoaXMucmV1c2VFbmFibGVkKCkpO1xuICAgIGZvciAoY29uc3Qgb3Agb2Ygb3BzKSB7XG4gICAgICBpZiAob3Aua2luZCA9PT0gJ29wZW4nKSB7XG4gICAgICAgIHVwZGF0ZXMucHVzaCh0aGlzLm9wZW5WaWV3KG9wLnZpZXcpKTtcbiAgICAgIH0gZWxzZSBpZiAob3Aua2luZCA9PT0gJ2Nsb3NlJykge1xuICAgICAgICB1cGRhdGVzLnB1c2goLi4udGhpcy5jbG9zZVZpZXcob3AudmlldykpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdXBkYXRlcy5wdXNoKC4uLnRoaXMuZXhlY3V0ZVJldXNlKG9wLm9sZFZpZXcsIG9wLm5ld1ZpZXcpKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCB2aWV3RGF0YVRvQ2xvc2UgPSB0aGlzLm9wZW5lZFZpZXdEYXRhLmZpbHRlcihcbiAgICAgICh2aWV3RGF0YTogVmlld0RhdGEpID0+XG4gICAgICAgICF0aGlzLnZpZXdDb250ZXh0Py52aWV3c1xuICAgICAgICAgIC5mbGF0TWFwKCh2aWV3RGF0YTogVmlld0RhdGEpID0+IHZpZXdEYXRhLnV1aWQpXG4gICAgICAgICAgLmluY2x1ZGVzKHZpZXdEYXRhLnV1aWQpXG4gICAgKTtcbiAgICBpZiAodmlld0RhdGFUb0Nsb3NlPy5sZW5ndGgpIHtcbiAgICAgIHZpZXdEYXRhVG9DbG9zZS5tYXAoKHZpZXdEYXRhOiBWaWV3RGF0YSkgPT4ge1xuICAgICAgICB1cGRhdGVzLnB1c2goLi4udGhpcy5jbG9zZVZpZXcodmlld0RhdGEpKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHRoaXMudmlld0NvbnRleHQ/LmxpbmtzPy5tYXAoKGRhdGE6IExpbmspID0+IHtcbiAgICAgIGNvbnN0IGxpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7XG4gICAgICBsZXQgdGFyZ2V0ID0gJ19ibGFuayc7IC8vIGRlZmF1bHRcbiAgICAgIHN3aXRjaCAoZGF0YS50YXJnZXQgPz8gTGlua1RhcmdldEVudW0uQkxBTkspIHtcbiAgICAgICAgY2FzZSAnU0VMRic6XG4gICAgICAgICAgdGFyZ2V0ID0gJ19zZWxmJztcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnQkxBTksnOlxuICAgICAgICAgIHRhcmdldCA9ICdfYmxhbmsnO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdQQVJFTlQnOlxuICAgICAgICAgIHRhcmdldCA9ICdfcGFyZW50JztcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnVE9QJzpcbiAgICAgICAgICB0YXJnZXQgPSAnX3RvcCc7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBsaW5rLnNldEF0dHJpYnV0ZSgndGFyZ2V0JywgdGFyZ2V0KTtcbiAgICAgIGxpbmsuc2V0QXR0cmlidXRlKCdocmVmJywgZGF0YS51cmwpO1xuICAgICAgaWYgKGRhdGEuZG93bmxvYWQpIHtcbiAgICAgICAgbGluay5zZXRBdHRyaWJ1dGUoJ2Rvd25sb2FkJywgZGF0YS5maWxlbmFtZSA/PyAnJyk7XG4gICAgICB9XG4gICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGxpbmspO1xuICAgICAgbGluay5jbGljaygpO1xuICAgICAgbGluay5yZW1vdmUoKTtcbiAgICB9KTtcblxuICAgIHRoaXMuc3RhcnREb3dubG9hZHNGaWxlcyh0aGlzLnZpZXdDb250ZXh0Py5kb3dubG9hZHMgfHwgW10pO1xuXG4gICAgY29uc3QgY2xpcGJvYXJkVGV4dCA9IHRoaXMudmlld0NvbnRleHQ/LmNsaXBib2FyZERhdGFcbiAgICAgID8ubWFwKChjZDogQ2xpcGJvYXJkRGF0YSkgPT4gY2QudGV4dCB8fCAnJylcbiAgICAgIC5qb2luKCcnKTtcbiAgICBpZiAoY2xpcGJvYXJkVGV4dCkge1xuICAgICAgY29uc3QgY2xpcGJvYXJkID0gbmF2aWdhdG9yLmNsaXBib2FyZDtcbiAgICAgIC8vIGF2YWlsYWJsZSBvbmx5IGluIHNlY3VyZSBjb250ZXh0cy5cbiAgICAgIGlmIChjbGlwYm9hcmQpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjbGlwYm9hcmRcbiAgICAgICAgICAgIC53cml0ZVRleHQoY2xpcGJvYXJkVGV4dClcbiAgICAgICAgICAgIC5jYXRjaCgoZSkgPT4gY29uc29sZS5lcnJvcignRmFpbGVkIHRvIGNvcHkgdGV4dCB0byBjbGlwYm9hcmQnLCBlKSk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBhY2Nlc3NpbmcgY2xpcGJvYXJkJywgZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgYXdhaXQgdGhpcy5zZW5kVmlld0NvbnRleHRVcGRhdGVzKHVwZGF0ZXMpO1xuICAgIHRoaXMudmlld0NvbnRleHRIYXNCZWVuU3luY2VkLm5leHQoKTtcbiAgfVxuXG4gIGFzeW5jIHN0YXJ0RG93bmxvYWRzRmlsZXMoZG93bmxvYWRzOiBEb3dubG9hZGVkRmlsZVtdKSB7XG4gICAgZm9yIChjb25zdCBmaWxlIG9mIGRvd25sb2Fkcykge1xuICAgICAgdHJ5IHtcbiAgICAgICAgbGV0IGJsb2IgPSBhd2FpdCB0aGlzLmRvd25sb2FkUmVzb3VyY2UoZmlsZS51dWlkISwgZmlsZS5pZGVudGlmaWVyISk7XG4gICAgICAgIGxldCB1cmwgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKGJsb2IpO1xuXG4gICAgICAgIGNvbnN0IGxpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7XG4gICAgICAgIGxpbmsuc2V0QXR0cmlidXRlKCd0YXJnZXQnLCAnX2JsYW5rJyk7XG4gICAgICAgIGxpbmsuc2V0QXR0cmlidXRlKCdocmVmJywgdXJsKTtcbiAgICAgICAgbGluay5zZXRBdHRyaWJ1dGUoJ2Rvd25sb2FkJywgZmlsZS5maWxlbmFtZSEpO1xuICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGxpbmspO1xuICAgICAgICBsaW5rLmNsaWNrKCk7XG4gICAgICAgIGxpbmsucmVtb3ZlKCk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGRvd25sb2FkaW5nIGZpbGUnLCBlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNldFZpZXdDb250ZXh0VXVpZCh1dWlkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBzZXNzaW9uU3RvcmFnZS5zZXRJdGVtKHRoaXMudmlld0NvbnRleHRVdWlkTmFtZSwgdXVpZCk7XG4gICAgdGhpcy5zZXNzaW9uLmFkZEhlYWRlclBhcmFtKHtcbiAgICAgIGhlYWRlck5hbWU6IHRoaXMudmlld0NvbnRleHRVdWlkSGVhZGVyTmFtZSxcbiAgICAgIHZhbHVlOiB1dWlkLFxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGdldFZpZXdDb250ZXh0VXVpZCgpOiBzdHJpbmcge1xuICAgIGxldCB2aWV3Q29udGV4dFV1aWQgPSBzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKHRoaXMudmlld0NvbnRleHRVdWlkTmFtZSk7XG4gICAgaWYgKCF2aWV3Q29udGV4dFV1aWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignVmlldyBjb250ZXh0IGlzIG5vdCBpbml0aWFsaXplZCEnKTtcbiAgICB9XG4gICAgcmV0dXJuIHZpZXdDb250ZXh0VXVpZDtcbiAgfVxuXG4gIHB1YmxpYyBoYXNWaWV3Q29udGV4dFV1aWQoKTogYm9vbGVhbiB7XG4gICAgbGV0IHZpZXdDb250ZXh0VXVpZCA9IHNlc3Npb25TdG9yYWdlLmdldEl0ZW0odGhpcy52aWV3Q29udGV4dFV1aWROYW1lKTtcbiAgICByZXR1cm4gdmlld0NvbnRleHRVdWlkICE9PSBudWxsICYmIHZpZXdDb250ZXh0VXVpZCAhPT0gdW5kZWZpbmVkO1xuICB9XG5cbiAgcHVibGljIHNldFV1aWRPZlBhZ2UocGFnZU5hbWU6IHN0cmluZywgdXVpZDogc3RyaW5nLCBjb21wb25lbnROYW1lPzogc3RyaW5nKTogdm9pZCB7XG4gICAgc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbSh0aGlzLnBhZ2VOYW1lUHJlZml4ICsgcGFnZU5hbWUsIHV1aWQpO1xuICAgIGlmIChjb21wb25lbnROYW1lKSB7XG4gICAgICBzZXNzaW9uU3RvcmFnZS5zZXRJdGVtKHRoaXMuY29tcG9uZW50TmFtZVByZWZpeCArIGNvbXBvbmVudE5hbWUsIHBhZ2VOYW1lKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgY2xlYXJVdWlkT2ZQYWdlKHBhZ2VOYW1lOiBzdHJpbmcsIGNvbXBvbmVudE5hbWU/OiBzdHJpbmcpOiB2b2lkIHtcbiAgICBzZXNzaW9uU3RvcmFnZS5yZW1vdmVJdGVtKHRoaXMucGFnZU5hbWVQcmVmaXggKyBwYWdlTmFtZSk7XG4gICAgaWYgKGNvbXBvbmVudE5hbWUpIHtcbiAgICAgIHNlc3Npb25TdG9yYWdlLnJlbW92ZUl0ZW0odGhpcy5jb21wb25lbnROYW1lUHJlZml4ICsgY29tcG9uZW50TmFtZSk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGdldFV1aWRPZlBhZ2UocGFnZU5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgbGV0IHV1aWQgPSBzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKHRoaXMucGFnZU5hbWVQcmVmaXggKyBwYWdlTmFtZSk7XG4gICAgaWYgKCF1dWlkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFRoZSB1dWlkIG9mICR7cGFnZU5hbWV9IGlzIG5vdCBhdmFpbGFibGUuYCk7XG4gICAgfVxuICAgIHJldHVybiB1dWlkO1xuICB9XG5cbiAgcHVibGljIGdldFBhZ2VOYW1lT2ZDb21wb25lbnQoY29tcG9uZW50TmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBsZXQgcGFnZU5hbWUgPSBzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKHRoaXMuY29tcG9uZW50TmFtZVByZWZpeCArIGNvbXBvbmVudE5hbWUpO1xuICAgIGlmICghcGFnZU5hbWUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVGhlIHBhZ2VOYW1lIG9mICR7Y29tcG9uZW50TmFtZX0gaXMgbm90IGF2YWlsYWJsZS5gKTtcbiAgICB9XG4gICAgcmV0dXJuIHBhZ2VOYW1lO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIG1lc3NhZ2UobWVzc2FnZURhdGE6IE1lc3NhZ2VEYXRhLCBtZXNzYWdlUmVzdWx0OiBNZXNzYWdlUmVzdWx0KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuaGFuZGxlUGVyZm9ybUFjdGlvblJlc3BvbnNlKFxuICAgICAgYXdhaXQgdGhpcy52aWV3XG4gICAgICAgIC5tZXNzYWdlKG1lc3NhZ2VEYXRhLnZpZXdVdWlkID8/ICcnLCBtZXNzYWdlRGF0YS51dWlkLCBtZXNzYWdlUmVzdWx0KVxuICAgICAgICAudG9Qcm9taXNlKClcbiAgICApO1xuICAgIC8vIGluIGZ1dHVyZSB1c2UgdGhpcy5hcGlRdWV1ZVNlcnZpY2UuYWRkVG9RdWV1ZVxuICB9XG5cbiAgcHVibGljIGFzeW5jIGdldFNtYXJ0Vmlld0NvbnRleHRBcGlFcnJvckJ5Q29kZShjb2RlOiBzdHJpbmcpOiBQcm9taXNlPFNtYXJ0Vmlld0NvbnRleHRBcGlFcnJvcj4ge1xuICAgIGxldCBidXR0b25MYWJlbDtcbiAgICBsZXQgZGlhbG9nVGl0bGU7XG4gICAgbGV0IG1lc3NhZ2U7XG4gICAgaWYgKHRoaXMudHJhbnNsYXRlU2VydmljZSkge1xuICAgICAgYnV0dG9uTGFiZWwgPSBhd2FpdCB0aGlzLnRyYW5zbGF0ZVNlcnZpY2VcbiAgICAgICAgLmdldChTbWFydFZpZXdDb250ZXh0RXJyb3JEaWFsb2dCdXR0b25MYWJlbClcbiAgICAgICAgLnRvUHJvbWlzZSgpO1xuICAgICAgZGlhbG9nVGl0bGUgPSBhd2FpdCB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuZ2V0KFNtYXJ0Vmlld0NvbnRleHRFcnJvckRpYWxvZ1RpdGxlKS50b1Byb21pc2UoKTtcbiAgICAgIG1lc3NhZ2UgPSBhd2FpdCB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuZ2V0KFNtYXJ0Vmlld0NvbnRleHRFcnJvckRpYWxvZ01lc3NhZ2UpLnRvUHJvbWlzZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICBidXR0b25MYWJlbCA9ICdPayc7XG4gICAgICBkaWFsb2dUaXRsZSA9ICdIaWJhJztcbiAgICAgIG1lc3NhZ2UgPSAnQW4gZXJyb3IgaGFzIG9jY3VyZWQuJztcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuc21hcnRWaWV3Q29udGV4dEFwaUVycm9ycykge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29kZSxcbiAgICAgICAgbWVzc2FnZSxcbiAgICAgICAgYnV0dG9uTGFiZWwsXG4gICAgICAgIGRpYWxvZ1RpdGxlLFxuICAgICAgfTtcbiAgICB9XG4gICAgbGV0IGFwaUVycm9yc1dpdGhDb2RlID0gdGhpcy5zbWFydFZpZXdDb250ZXh0QXBpRXJyb3JzLnZpZXdDb250ZXh0QXBpRXJyb3JzLmZpbHRlcihcbiAgICAgIChhcGlFcnJvcjogU21hcnRWaWV3Q29udGV4dEFwaUVycm9yKSA9PiB7XG4gICAgICAgIHJldHVybiBhcGlFcnJvci5jb2RlID09PSBjb2RlO1xuICAgICAgfVxuICAgICk7XG4gICAgaWYgKCFhcGlFcnJvcnNXaXRoQ29kZSB8fCAoYXBpRXJyb3JzV2l0aENvZGUgJiYgIWFwaUVycm9yc1dpdGhDb2RlLmxlbmd0aCkpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoYFNtYXJ0Vmlld0NvbnRleHRBcGlFcnJvciB3aXRoIGNvZGUgJHtjb2RlfSBjb3VsZCBub3QgYmUgZm91bmQuYCk7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvZGUsXG4gICAgICAgIG1lc3NhZ2UsXG4gICAgICAgIGJ1dHRvbkxhYmVsLFxuICAgICAgICBkaWFsb2dUaXRsZSxcbiAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiBhcGlFcnJvcnNXaXRoQ29kZVswXTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXRWaWV3Q29uc3RyYWludCh1dWlkOiBzdHJpbmcpOiBQcm9taXNlPFZpZXdDb25zdHJhaW50PiB7XG4gICAgbGV0IHZpZXdDb25zdHJhaW50UmVzcG9uc2UgPSBhd2FpdCB0aGlzLnZpZXcuZ2V0Vmlld0NvbnN0cmFpbnQodXVpZCkudG9Qcm9taXNlKCk7XG4gICAgaWYgKCF2aWV3Q29uc3RyYWludFJlc3BvbnNlKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDb3VsZCBub3QgZ2V0IFZpZXdDb25zdHJhaW50IHdpdGggdGhlIGdpdmVuIHV1aWQuJyk7XG4gICAgcmV0dXJuIHZpZXdDb25zdHJhaW50UmVzcG9uc2U7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgc2hvd1B1Ymxpc2hlZFZpZXcoY2hhbm5lbDogc3RyaW5nLCB1dWlkOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLmlzT3BlbmluZ1NtYXJ0TGluayA9IHRydWU7XG5cbiAgICBhd2FpdCB0aGlzLnNlc3Npb24uaW5pdGlhbGl6ZSgpO1xuICAgIC8vIFRPRE8gaW5pdCB2aWV3IGNvbnRleHQgYXV0b21hdGljYWxseVxuICAgIC8vIGF3YWl0IHRoaXMuaW5pdGlhbGl6ZSgpO1xuICAgIGF3YWl0IHRoaXMuaW5pdFZpZXdDb250ZXh0KCk7XG5cbiAgICB0aGlzLm9wZW5TbWFydExpbmsubmV4dChbY2hhbm5lbCwgdXVpZF0pO1xuICAgIGF3YWl0IHRoaXMub3BlblNtYXJ0TGluay50b1Byb21pc2UoKTtcblxuICAgIGF3YWl0IHRoaXMudmlldy5zaG93UHVibGlzaGVkVmlldyhjaGFubmVsLCB1dWlkKS50b1Byb21pc2UoKTtcbiAgICBhd2FpdCB0aGlzLmdldEFuZFN5bmNWaWV3Q29udGV4dCgpO1xuICAgIHRoaXMuaXNPcGVuaW5nU21hcnRMaW5rID0gZmFsc2U7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZG93bmxvYWRSZXNvdXJjZSh1dWlkOiBzdHJpbmcsIGl0ZW06IHN0cmluZyk6IFByb21pc2U8YW55PiB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMudmlldy5kb3dubG9hZEl0ZW0odXVpZCwgaXRlbSkudG9Qcm9taXNlKCk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgcGVyZm9ybUFjdGlvbih1dWlkOiBzdHJpbmcsIHVpQWN0aW9uUmVxdWVzdDogVWlBY3Rpb25SZXF1ZXN0KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuX3BlcmZvcm1BY3Rpb24oe1xuICAgICAgdXVpZCxcbiAgICAgIHVpQWN0aW9uUmVxdWVzdCxcbiAgICB9KTtcbiAgICAvLyBjb25zdCBpc0NvbXBsZXRlZCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG4gICAgLy8gdGhpcy5hcGlRdWV1ZVNlcnZpY2UuYWRkVG9RdWV1ZSh7XG4gICAgLy8gICBjYWxsYmFjazogdGhpcy5fcGVyZm9ybUFjdGlvbi5iaW5kKHRoaXMpLFxuICAgIC8vICAgY29uZmlnOiB7XG4gICAgLy8gICAgIHV1aWQsXG4gICAgLy8gICAgIHVpQWN0aW9uUmVxdWVzdCxcbiAgICAvLyAgIH0sXG4gICAgLy8gICBpc0NvbXBsZXRlZCxcbiAgICAvLyB9KTtcbiAgICAvLyByZXR1cm4gYXdhaXQgaXNDb21wbGV0ZWQudG9Qcm9taXNlKCk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgcGVyZm9ybVdpZGdldEFjdGlvbihcbiAgICB1dWlkOiBzdHJpbmcsXG4gICAgd2lkZ2V0SWQ6IHN0cmluZyxcbiAgICBub2RlSWQ6IHN0cmluZyxcbiAgICB1aUFjdGlvblJlcXVlc3Q6IFVpQWN0aW9uUmVxdWVzdFxuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5fcGVyZm9ybVdpZGdldEFjdGlvbih7IHV1aWQsIHdpZGdldElkLCBub2RlSWQsIHVpQWN0aW9uUmVxdWVzdCB9KTtcbiAgICAvLyBjb25zdCBpc0NvbXBsZXRlZCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG4gICAgLy8gdGhpcy5hcGlRdWV1ZVNlcnZpY2UuYWRkVG9RdWV1ZSh7XG4gICAgLy8gICBjYWxsYmFjazogdGhpcy5fcGVyZm9ybVdpZGdldEFjdGlvbi5iaW5kKHRoaXMpLFxuICAgIC8vICAgY29uZmlnOiB7XG4gICAgLy8gICAgIHV1aWQsXG4gICAgLy8gICAgIHdpZGdldElkLFxuICAgIC8vICAgICBub2RlSWQsXG4gICAgLy8gICAgIHVpQWN0aW9uUmVxdWVzdCxcbiAgICAvLyAgIH0sXG4gICAgLy8gICBpc0NvbXBsZXRlZCxcbiAgICAvLyB9KTtcbiAgICAvLyByZXR1cm4gYXdhaXQgaXNDb21wbGV0ZWQudG9Qcm9taXNlKCk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgcGVyZm9ybVdpZGdldE1haW5BY3Rpb24oXG4gICAgdXVpZDogc3RyaW5nLFxuICAgIHdpZGdldElkOiBzdHJpbmcsXG4gICAgdWlBY3Rpb25SZXF1ZXN0OiBVaUFjdGlvblJlcXVlc3RcbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuX3BlcmZvcm1XaWRnZXRNYWluQWN0aW9uKHsgdXVpZCwgd2lkZ2V0SWQsIHVpQWN0aW9uUmVxdWVzdCB9KTtcbiAgICAvLyBjb25zdCBpc0NvbXBsZXRlZCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG4gICAgLy8gdGhpcy5hcGlRdWV1ZVNlcnZpY2UuYWRkVG9RdWV1ZSh7XG4gICAgLy8gICBjYWxsYmFjazogdGhpcy5fcGVyZm9ybVdpZGdldE1haW5BY3Rpb24uYmluZCh0aGlzKSxcbiAgICAvLyAgIGNvbmZpZzoge1xuICAgIC8vICAgICB1dWlkLFxuICAgIC8vICAgICB3aWRnZXRJZCxcbiAgICAvLyAgICAgdWlBY3Rpb25SZXF1ZXN0LFxuICAgIC8vICAgfSxcbiAgICAvLyAgIGlzQ29tcGxldGVkLFxuICAgIC8vIH0pO1xuICAgIC8vIHJldHVybiBhd2FpdCBpc0NvbXBsZXRlZC50b1Byb21pc2UoKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBwZXJmb3JtVXBsb2FkQWN0aW9uKFxuICAgIHV1aWQ6IHN0cmluZyxcbiAgICB1aUFjdGlvblJlcXVlc3Q6IFVpQWN0aW9uUmVxdWVzdCxcbiAgICBwYXJhbTogJ2lucHV0JyB8ICdpbnB1dFwiJyxcbiAgICBjb250ZW50OiBhbnlcbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5fcGVyZm9ybVVwbG9hZEFjdGlvbih7XG4gICAgICB1dWlkLFxuICAgICAgdWlBY3Rpb25SZXF1ZXN0LFxuICAgICAgcGFyYW0sXG4gICAgICBjb250ZW50LFxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIHBlcmZvcm1VcGxvYWRNdWx0aXBsZUFjdGlvbihcbiAgICB1dWlkOiBzdHJpbmcsXG4gICAgdWlBY3Rpb25SZXF1ZXN0OiBVaUFjdGlvblJlcXVlc3QsXG4gICAgcGFyYW06ICdpbnB1dCcgfCAnaW5wdXQyJyxcbiAgICBjb250ZW50OiBhbnlbXVxuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLl9wZXJmb3JtVXBsb2FkTXVsdGlwbGVBY3Rpb24oe1xuICAgICAgdXVpZCxcbiAgICAgIHVpQWN0aW9uUmVxdWVzdCxcbiAgICAgIHBhcmFtLFxuICAgICAgY29udGVudCxcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBkYXRhQ2hhbmdlZCh1dWlkOiBzdHJpbmcsIGRhdGFDaGFuZ2U6IERhdGFDaGFuZ2UpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5fZGF0YUNoYW5nZWQoeyB1dWlkLCBkYXRhQ2hhbmdlIH0pO1xuICAgIC8vIGNvbnN0IGlzQ29tcGxldGVkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcbiAgICAvLyB0aGlzLmFwaVF1ZXVlU2VydmljZS5hZGRUb1F1ZXVlKFxuICAgIC8vICAge1xuICAgIC8vICAgICBjYWxsYmFjazogdGhpcy5fZGF0YUNoYW5nZWQuYmluZCh0aGlzKSxcbiAgICAvLyAgICAgY29uZmlnOiB7XG4gICAgLy8gICAgICAgdXVpZCxcbiAgICAvLyAgICAgICBkYXRhQ2hhbmdlLFxuICAgIC8vICAgICB9LFxuICAgIC8vICAgICBpc0NvbXBsZXRlZCxcbiAgICAvLyAgIH0sXG4gICAgLy8gICB0cnVlXG4gICAgLy8gKTtcbiAgICAvLyByZXR1cm4gYXdhaXQgaXNDb21wbGV0ZWQudG9Qcm9taXNlKCk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIF9wZXJmb3JtQWN0aW9uKGNvbmZpZzogYW55KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuaGFuZGxlUGVyZm9ybUFjdGlvblJlc3BvbnNlKFxuICAgICAgYXdhaXQgdGhpcy52aWV3LnBlcmZvcm1BY3Rpb24oY29uZmlnLnV1aWQsIGNvbmZpZy51aUFjdGlvblJlcXVlc3QpLnRvUHJvbWlzZSgpXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgX3BlcmZvcm1XaWRnZXRBY3Rpb24oY29uZmlnOiBhbnkpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5oYW5kbGVQZXJmb3JtQWN0aW9uUmVzcG9uc2UoXG4gICAgICBhd2FpdCB0aGlzLnZpZXdcbiAgICAgICAgLnBlcmZvcm1XaWRnZXRBY3Rpb24oY29uZmlnLnV1aWQsIGNvbmZpZy53aWRnZXRJZCwgY29uZmlnLm5vZGVJZCwgY29uZmlnLnVpQWN0aW9uUmVxdWVzdClcbiAgICAgICAgLnRvUHJvbWlzZSgpXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgX3BlcmZvcm1XaWRnZXRNYWluQWN0aW9uKGNvbmZpZzogYW55KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuaGFuZGxlUGVyZm9ybUFjdGlvblJlc3BvbnNlKFxuICAgICAgYXdhaXQgdGhpcy52aWV3XG4gICAgICAgIC5wZXJmb3JtV2lkZ2V0TWFpbkFjdGlvbihjb25maWcudXVpZCwgY29uZmlnLndpZGdldElkLCBjb25maWcudWlBY3Rpb25SZXF1ZXN0KVxuICAgICAgICAudG9Qcm9taXNlKClcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBfcGVyZm9ybVVwbG9hZEFjdGlvbihjb25maWc6IGFueSk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLmhhbmRsZVBlcmZvcm1BY3Rpb25SZXNwb25zZShcbiAgICAgIGF3YWl0IHRoaXMudmlld1xuICAgICAgICAudXBsb2FkQWN0aW9uKFxuICAgICAgICAgIGNvbmZpZy51dWlkLFxuICAgICAgICAgIEpTT04uc3RyaW5naWZ5KGNvbmZpZy51aUFjdGlvblJlcXVlc3QpLFxuICAgICAgICAgIGNvbmZpZy5wYXJhbSxcbiAgICAgICAgICBjb25maWcuY29udGVudFxuICAgICAgICApXG4gICAgICAgIC50b1Byb21pc2UoKVxuICAgICk7XG4gIH1cbiAgcHJpdmF0ZSBhc3luYyBfcGVyZm9ybVVwbG9hZE11bHRpcGxlQWN0aW9uKGNvbmZpZzogYW55KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuaGFuZGxlUGVyZm9ybUFjdGlvblJlc3BvbnNlKFxuICAgICAgYXdhaXQgdGhpcy52aWV3XG4gICAgICAgIC51cGxvYWRNdWx0aXBsZUFjdGlvbihcbiAgICAgICAgICBjb25maWcudXVpZCxcbiAgICAgICAgICBKU09OLnN0cmluZ2lmeShjb25maWcudWlBY3Rpb25SZXF1ZXN0KSxcbiAgICAgICAgICBjb25maWcucGFyYW0sXG4gICAgICAgICAgY29uZmlnLmNvbnRlbnRcbiAgICAgICAgKVxuICAgICAgICAudG9Qcm9taXNlKClcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBfZGF0YUNoYW5nZWQoY29uZmlnOiBhbnkpOiBQcm9taXNlPGFueT4ge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLmhhbmRsZVBlcmZvcm1BY3Rpb25SZXNwb25zZShcbiAgICAgIGF3YWl0IHRoaXMudmlldy5kYXRhQ2hhbmdlZChjb25maWcudXVpZCwgY29uZmlnLmRhdGFDaGFuZ2UpLnRvUHJvbWlzZSgpXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBoYW5kbGVQZXJmb3JtQWN0aW9uUmVzcG9uc2UoXG4gICAgdmlld0NvbnRleHRDaGFuZ2U6IFZpZXdDb250ZXh0Q2hhbmdlIHwgdW5kZWZpbmVkXG4gICk6IFByb21pc2U8YW55PiB7XG4gICAgdGhpcy52aWV3Q29udGV4dCA9IHZpZXdDb250ZXh0Q2hhbmdlPy52aWV3Q29udGV4dDtcbiAgICBhd2FpdCB0aGlzLnN5bmNWaWV3KCk7XG5cbiAgICBpZiAodmlld0NvbnRleHRDaGFuZ2U/LmNoYW5nZXMpIHtcbiAgICAgIHRoaXMuaGFuZGxlQ2hhbmdlcyh2aWV3Q29udGV4dENoYW5nZS5jaGFuZ2VzKTtcbiAgICB9XG4gICAgcmV0dXJuIHZpZXdDb250ZXh0Q2hhbmdlPy5yZXN1bHQ7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZUNoYW5nZXMoY2hhbmdlczogQXJyYXk8Q29tcG9uZW50TW9kZWxDaGFuZ2U+KTogdm9pZCB7XG4gICAgY2hhbmdlcy5mb3JFYWNoKChjb21wb25lbnRNb2RlbENoYW5nZTogQ29tcG9uZW50TW9kZWxDaGFuZ2UpID0+IHtcbiAgICAgIGxldCBkZXRlY3RDaGFuZ2U6IFNtYXJ0U3ViamVjdDxDb21wb25lbnRNb2RlbENoYW5nZT4gfCB1bmRlZmluZWQgPSB0aGlzLnNtYXJ0QXBpQ2xpZW50cy5nZXQoXG4gICAgICAgIGNvbXBvbmVudE1vZGVsQ2hhbmdlLnV1aWRcbiAgICAgICk7XG4gICAgICBpZiAoZGV0ZWN0Q2hhbmdlKSB7XG4gICAgICAgIGRldGVjdENoYW5nZS5uZXh0KGNvbXBvbmVudE1vZGVsQ2hhbmdlKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBsb2FkKHV1aWQ6IHN0cmluZyk6IFByb21pc2U8Q29tcG9uZW50TW9kZWwgfCB1bmRlZmluZWQ+IHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy52aWV3LmdldENvbXBvbmVudE1vZGVsKHV1aWQpLnRvUHJvbWlzZSgpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGxvYWQyKHV1aWQ6IHN0cmluZyk6IFByb21pc2U8Vmlld0NvbnRleHRDaGFuZ2UgfCB1bmRlZmluZWQ+IHtcbiAgICBsZXQgY2hhbmdlID0gYXdhaXQgdGhpcy52aWV3LmdldENvbXBvbmVudE1vZGVsMih1dWlkKS50b1Byb21pc2UoKTtcbiAgICB0aGlzLmhhbmRsZVBlcmZvcm1BY3Rpb25SZXNwb25zZShjaGFuZ2UpO1xuICAgIHJldHVybiBjaGFuZ2U7XG4gIH1cblxuICBnZXRDdXJyZW50Vmlld0NvbnRleHQoKTogVmlld0NvbnRleHREYXRhIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy52aWV3Q29udGV4dDtcbiAgfVxufVxuXG5leHBvcnQgY29uc3QgSVNfQVNZTkNfUEFSQU1fTkFNRSA9ICdpc0FzeW5jJztcblxuLyoqIEEgcmVnaXN0ZXJlZCBlbWJlZGRlZCBzbG90OiBpdHMgVmlld0NvbnRhaW5lclJlZiBwbHVzIHRoZSBsaWZlY3ljbGUgY2xhc3MgaXRzXG4gKiAgcmVnaXN0cmFudCBkZWNsYXJlZCwgc28gdGhlIGxheW91dCBkZXRhY2gvY2xlYW51cCBkYW5jZSBjYW4gc2tpcCAnc3RhYmxlJyBzbG90cy4gKi9cbmludGVyZmFjZSBFbWJlZGRlZFNsb3RFbnRyeSB7XG4gIHZjUmVmOiBWaWV3Q29udGFpbmVyUmVmO1xuICBraW5kOiBTbG90S2luZDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBcGlRdWV1ZUNhbGwge1xuICBjYWxsYmFjazogKGNvbmZpZzogYW55KSA9PiBQcm9taXNlPGFueT47XG4gIGNvbmZpZzogYW55O1xuICBpc0NvbXBsZXRlZDogU3ViamVjdDx2b2lkPjtcbn1cblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIEFwaVF1ZXVlU2VydmljZSBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XG4gIHByaXZhdGUgX2Rlc3Ryb3kkOiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFN1YmplY3QoKTtcblxuICBwcml2YXRlIHF1ZXVlOiBBcGlRdWV1ZUNhbGxbXSA9IFtdO1xuICBwcml2YXRlIGlzUHJvY2Vzc2luZyA9IGZhbHNlO1xuICBwcml2YXRlIHF1ZXVlU3ViamVjdDogU3ViamVjdDx2b2lkPiA9IG5ldyBTbWFydFN1YmplY3QodGhpcy5fZGVzdHJveSQpO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMucXVldWVTdWJqZWN0LnBpcGUodGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kkKSkuc3Vic2NyaWJlKCgpID0+IHRoaXMucHJvY2Vzc1F1ZXVlKCkpO1xuICB9XG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuX2Rlc3Ryb3kkLm5leHQoKTtcbiAgICB0aGlzLl9kZXN0cm95JC5jb21wbGV0ZSgpO1xuICB9XG5cbiAgYWRkVG9RdWV1ZShjYWxsOiBBcGlRdWV1ZUNhbGwsIHByaW9yaXR5OiBib29sZWFuID0gZmFsc2UpIHtcbiAgICBpZiAocHJpb3JpdHkpIHtcbiAgICAgIHRoaXMucXVldWUudW5zaGlmdChjYWxsKTsgLy8gQWRkIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIHF1ZXVlIGlmIGl0IGhhcyBoaWdoZXIgcHJpb3JpdHlcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5xdWV1ZS5wdXNoKGNhbGwpOyAvLyBBZGQgYXQgdGhlIGVuZCBvZiB0aGUgcXVldWUgaWYgaXQgaGFzIGxvd2VyIHByaW9yaXR5XG4gICAgfVxuICAgIGlmICghdGhpcy5pc1Byb2Nlc3NpbmcpIHtcbiAgICAgIHRoaXMucHJvY2Vzc1F1ZXVlKCk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgcHJvY2Vzc1F1ZXVlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLnF1ZXVlLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhpcy5pc1Byb2Nlc3NpbmcgPSBmYWxzZTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBhcGlRdWV1ZUNhbGwgPSB0aGlzLnF1ZXVlLnNoaWZ0KCk7XG4gICAgaWYgKGFwaVF1ZXVlQ2FsbCkge1xuICAgICAgYXdhaXQgYXBpUXVldWVDYWxsLmNhbGxiYWNrKGFwaVF1ZXVlQ2FsbC5jb25maWcpO1xuICAgICAgYXBpUXVldWVDYWxsLmlzQ29tcGxldGVkLmNvbXBsZXRlKCk7XG4gICAgICB0aGlzLnF1ZXVlU3ViamVjdC5uZXh0KCk7XG4gICAgfVxuICB9XG59XG4iXX0=
1081
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnQtdmlldy1jb250ZXh0LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zbWFydC1uZy1jbGllbnQvc3JjL2xpYi92aWV3LWNvbnRleHQvc21hcnQtdmlldy1jb250ZXh0LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLE1BQU0sRUFDTixVQUFVLEVBQ1YsY0FBYyxFQUlkLFFBQVEsR0FFVCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQWlCLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFHekQsT0FBTyxFQU9MLGNBQWMsRUFXZCxTQUFTLEVBRVQsUUFBUSxHQUNULE1BQU0sT0FBTyxDQUFDO0FBQ2YsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFTbkYsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBRXpELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsaUJBQWlCLEVBQW9CLE1BQU0sNEJBQTRCLENBQUM7QUFFakYsT0FBTyxFQUFFLFdBQVcsRUFBWSxNQUFNLHdCQUF3QixDQUFDO0FBQy9ELE9BQU8sRUFDTCw2QkFBNkIsR0FFOUIsTUFBTSxpQ0FBaUMsQ0FBQztBQUN6QyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUMvRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ3pDLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLDJCQUEyQixDQUFDOzs7Ozs7O0FBR3hFLE1BQU0sQ0FBQyxNQUFNLHNDQUFzQyxHQUFHLHdDQUF3QyxDQUFDO0FBQy9GLE1BQU0sQ0FBQyxNQUFNLGdDQUFnQyxH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blRva2VuLFxuICBJbmplY3RvcixcbiAgbW9kZWwsXG4gIE9uRGVzdHJveSxcbiAgT3B0aW9uYWwsXG4gIFZpZXdDb250YWluZXJSZWYsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgbGFzdFZhbHVlRnJvbSwgU3ViamVjdCwgdGFrZVVudGlsIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBTbWFydEZvcm1JbnZhbGlkRmllbGRzIH0gZnJvbSAnLi4vc21hcnQtZm9ybS9zbWFydGZvcm0ubW9kZWwnO1xuaW1wb3J0IHsgU21hcnRTZXNzaW9uU2VydmljZSB9IGZyb20gJy4uL3Nlc3Npb24vc21hcnQtc2Vzc2lvbi5zZXJ2aWNlJztcbmltcG9ydCB7XG4gIENsaXBib2FyZERhdGEsXG4gIENvbXBvbmVudE1vZGVsLFxuICBDb21wb25lbnRNb2RlbENoYW5nZSxcbiAgRGF0YUNoYW5nZSxcbiAgRG93bmxvYWRlZEZpbGUsXG4gIExpbmssXG4gIExpbmtUYXJnZXRFbnVtLFxuICBNZXNzYWdlRGF0YSxcbiAgTWVzc2FnZVJlc3VsdCxcbiAgVWlBY3Rpb25EZXNjcmlwdG9yLFxuICBVaUFjdGlvblJlcXVlc3QsXG4gIFZpZXdDb25zdHJhaW50LFxuICBWaWV3Q29udGV4dENoYW5nZSxcbiAgVmlld0NvbnRleHREYXRhLFxuICBWaWV3Q29udGV4dFVwZGF0ZSxcbiAgVmlld0RhdGEsXG4gIFZpZXdTZXJ2aWNlLFxuICBWaWV3U3RhdGUsXG4gIFZpZXdTdGF0ZVVwZGF0ZSxcbiAgVmlld1R5cGUsXG59IGZyb20gJy4vYXBpJztcbmltcG9ydCB7IE1lc3NhZ2VEaWFsb2dDb21wb25lbnQgfSBmcm9tICcuL21lc3NhZ2UtZGlhbG9nL21lc3NhZ2UtZGlhbG9nLmNvbXBvbmVudCc7XG5pbXBvcnQge1xuICBTbWFydEVtYmVkZGVkVmlld1JlZixcbiAgU21hcnRUcmFuc2xhdGVTZXJ2aWNlLFxuICBTbWFydFZpZXdDb250ZXh0QXBpRXJyb3IsXG4gIFNtYXJ0Vmlld0NvbnRleHRBcGlFcnJvcnMsXG4gIFNtYXJ0Vmlld0RpYWxvZ1JlZixcbiAgU21hcnRWaWV3SGFuZGxlck1vZGVsLFxufSBmcm9tICcuL3NtYXJ0LXZpZXctY29udGV4dC5tb2RlbCc7XG5pbXBvcnQgeyBTbWFydFN1YmplY3QgfSBmcm9tICcuLi9zbWFydC1zdWJqZWN0L3Byb2plY3RzJztcbmltcG9ydCB7IFNtYXJ0Vmlld0NvbnRleHREaWFsb2dTZXJ2aWNlIH0gZnJvbSAnLi9zbWFydC12aWV3LWNvbnRleHQtZGlhbG9nLnNlcnZpY2UnO1xuaW1wb3J0IHsgTWF0RGlhbG9nUmVmIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcbmltcG9ydCB7IER5bmFtaWNEaWFsb2dSZWYgfSBmcm9tICdwcmltZW5nL2R5bmFtaWNkaWFsb2cnO1xuaW1wb3J0IHsgQ09NUE9ORU5UX0xJQlJBUlksIENvbXBvbmVudExpYnJhcnkgfSBmcm9tICcuL3V0aWxpdHkvY29tcG9uZW50TGlicmFyeSc7XG5pbXBvcnQgeyBDb21wb25lbnRUeXBlIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL3BvcnRhbCc7XG5pbXBvcnQgeyByZXNvbHZlU2xvdCwgU2xvdEtpbmQgfSBmcm9tICcuL3ZpZXctc2xvdC1yZXNvbHV0aW9uJztcbmltcG9ydCB7XG4gIFNNQVJUX0RFRkFVTFRfVklFV19DT01QT05FTlRTLFxuICBEZWZhdWx0Vmlld0NvbXBvbmVudEVudHJ5LFxufSBmcm9tICcuL2RlZmF1bHQtdmlldy1jb21wb25lbnRzLnRva2VuJztcbmltcG9ydCB7IHJlc29sdmVWaWV3SGFuZGxlciB9IGZyb20gJy4vdmlldy1oYW5kbGVyLXJlc29sdXRpb24nO1xuaW1wb3J0IHsgYnVpbGRWaWV3T3BzIH0gZnJvbSAnLi92aWV3LW9wJztcbmltcG9ydCB7IFJFVVNFX1JPVVRFUl9TTE9UX0NPTVBPTkVOVCB9IGZyb20gJy4vcmV1c2Utcm91dGVyLXNsb3QudG9rZW4nO1xuaW1wb3J0IHsgVGhlbWVTZXJ2aWNlIH0gZnJvbSAnLi4vdGhlbWUvdGhlbWUuc2VydmljZSc7XG5cbmV4cG9ydCBjb25zdCBTbWFydFZpZXdDb250ZXh0RXJyb3JEaWFsb2dCdXR0b25MYWJlbCA9ICdTbWFydFZpZXdDb250ZXh0RXJyb3JEaWFsb2dCdXR0b25MYWJlbCc7XG5leHBvcnQgY29uc3QgU21hcnRWaWV3Q29udGV4dEVycm9yRGlhbG9nVGl0bGUgPSAnU21hcnRWaWV3Q29udGV4dEVycm9yRGlhbG9nVGl0bGUnO1xuZXhwb3J0IGNvbnN0IFNtYXJ0Vmlld0NvbnRleHRFcnJvckRpYWxvZ01lc3NhZ2UgPSAnU21hcnRWaWV3Q29udGV4dEVycm9yRGlhbG9nTWVzc2FnZSc7XG5leHBvcnQgY29uc3QgRGVmYXVsdFVpQWN0aW9uQ29kZV9DTE9TRSA9ICdERUZBVUxUX0NMT1NFJztcblxuZXhwb3J0IGNvbnN0IERJQUxPR19ESVNBQkxFX0NMT1NFID0gbmV3IEluamVjdGlvblRva2VuPGJvb2xlYW4+KCdkaWFsb2dEaXNhYmxlQ2xvc2UnKTtcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIFNtYXJ0Vmlld0NvbnRleHRTZXJ2aWNlIGltcGxlbWVudHMgT25EZXN0cm95IHtcbiAgcHJpdmF0ZSByZWFkb25seSB2aWV3Q29udGV4dFV1aWROYW1lOiBzdHJpbmcgPSAndmlld0NvbnRleHRVdWlkJztcbiAgcHJpdmF0ZSByZWFkb25seSB2aWV3Q29udGV4dFV1aWRIZWFkZXJOYW1lOiBzdHJpbmcgPSAndmlld0NvbnRleHRVdWlkJztcbiAgcHJpdmF0ZSByZWFkb25seSBwYWdlTmFtZVByZWZpeDogc3RyaW5nID0gJ3BhZ2UuJztcbiAgcHJpdmF0ZSByZWFkb25seSBjb21wb25lbnROYW1lUHJlZml4OiBzdHJpbmcgPSAnY29tcG9uZW50Lic7XG4gIHB1YmxpYyBtZXNzYWdlRGlhbG9nbmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBwcml2YXRlIHVybD86IHN0cmluZztcbiAgcHJpdmF0ZSB2aWV3Q29udGV4dD86IFZpZXdDb250ZXh0RGF0YTtcbiAgcHJpdmF0ZSB2aWV3SGFuZGxlcnM6IEFycmF5PFNtYXJ0Vmlld0hhbmRsZXJNb2RlbD4gPSBuZXcgQXJyYXkoKTtcbiAgcHJpdmF0ZSBkZWZhdWx0Q29tcG9uZW50czogTWFwPHN0cmluZywgQ29tcG9uZW50VHlwZTxhbnk+PiA9IG5ldyBNYXAoKTtcbiAgcHJpdmF0ZSBvcGVuZWRWaWV3VXVpZHM6IEFycmF5PHN0cmluZz4gPSBuZXcgQXJyYXkoKTtcbiAgcHJpdmF0ZSBvcGVuZWRWaWV3RGF0YTogQXJyYXk8Vmlld0RhdGE+ID0gbmV3IEFycmF5KCk7XG4gIC8vIE1vbm90b25pYyBjb3VudGVyIGJ1bXBlZCBvbiBldmVyeSBzdWNjZXNzZnVsIHN0YXJ0Vmlld0NvbnRleHQoKS4gQ2FsbGVyc1xuICAvLyB0aGF0IGhvbGQgYSByZWZlcmVuY2UgdG8gYSB2aWV3LXV1aWQgZnJvbSBhIHByZXZpb3VzIHZpZXdjb250ZXh0IGNhblxuICAvLyBkZXRlY3QgYSByZWJ1aWxkIGJ5IGNvbXBhcmluZyBzbmFwc2hvdHMgb2YgdGhpcyB2YWx1ZS5cbiAgcHJpdmF0ZSBnZW5lcmF0aW9uOiBudW1iZXIgPSAwO1xuXG4gIHByaXZhdGUgX2Rlc3Ryb3kkOiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFN1YmplY3QoKTtcbiAgcHVibGljIHV1aWRPZlBhZ2VIYXNCZWVuQ2hhbmdlZDogU3ViamVjdDxzdHJpbmc+ID0gbmV3IFNtYXJ0U3ViamVjdCh0aGlzLl9kZXN0cm95JCk7XG4gIHB1YmxpYyB2aWV3Q29udGV4dEhhc0JlZW5TeW5jZWQ6IFN1YmplY3Q8dm9pZD4gPSBuZXcgU21hcnRTdWJqZWN0KHRoaXMuX2Rlc3Ryb3kkKTtcbiAgcHJpdmF0ZSBpbml0aWFsaXplUnVubmluZzogU3ViamVjdDxWaWV3Q29udGV4dERhdGE+IHwgdW5kZWZpbmVkO1xuICBwcml2YXRlIGluaXRpTmV3Q29udGV4dFJ1bm5pbmc6IFN1YmplY3Q8dm9pZD4gfCB1bmRlZmluZWQ7XG5cbiAgcHVibGljIHNtYXJ0Vmlld0NvbnRleHRBcGlFcnJvcnM/OiBTbWFydFZpZXdDb250ZXh0QXBpRXJyb3JzO1xuXG4gIHB1YmxpYyBvcGVuU21hcnRMaW5rOiBTdWJqZWN0PFtzdHJpbmcsIHN0cmluZ10+ID0gbmV3IFNtYXJ0U3ViamVjdCh0aGlzLl9kZXN0cm95JCk7XG4gIHB1YmxpYyBpc09wZW5pbmdTbWFydExpbms6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBwcml2YXRlIGRpYWxvZ1JlZnM6IFNtYXJ0Vmlld0RpYWxvZ1JlZltdID0gW107XG5cbiAgcHJpdmF0ZSBlbWJlZGRlZENvbnRhaW5lcnM6IE1hcDxzdHJpbmcsIE1hcDxzdHJpbmcsIEVtYmVkZGVkU2xvdEVudHJ5Pj4gPSBuZXcgTWFwKCk7XG4gIHByaXZhdGUgZW1iZWRkZWRWaWV3UmVmczogU21hcnRFbWJlZGRlZFZpZXdSZWZbXSA9IFtdO1xuICBwcml2YXRlIHBlbmRpbmdFbWJlZGRlZFZpZXdzOiBWaWV3RGF0YVtdID0gW107XG5cbiAgcHJpdmF0ZSBhY3Rpb25EZXNjcmlwdG9ycz86IE1hcDxzdHJpbmcsIFVpQWN0aW9uRGVzY3JpcHRvcj47XG5cbiAgcHJpdmF0ZSBtb2R1bGVVcmxzQnlNb2R1bGU/OiBNYXA8c3RyaW5nLCBzdHJpbmc+O1xuXG4gIHB1YmxpYyBjb21tb25GZWVkYmFja1RleHQ/OiBzdHJpbmc7XG5cbiAgcHVibGljIHNtYXJ0QXBpQ2xpZW50czogTWFwPHN0cmluZywgU21hcnRTdWJqZWN0PGFueT4+ID0gbmV3IE1hcCgpO1xuXG4gIHB1YmxpYyBzZXQgdHJhbnNsYXRlU2VydmljZSh0cmFuc2xhdGVTZXJ2aWNlOiBTbWFydFRyYW5zbGF0ZVNlcnZpY2UgfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLl90cmFuc2xhdGVTZXJ2aWNlID0gdHJhbnNsYXRlU2VydmljZTtcbiAgICB0aGlzLnRyYW5zbGF0ZVNlcnZpY2VDaGFuZ2VkLm5leHQoKTtcbiAgICB0aGlzLnRyYW5zbGF0ZVNlcnZpY2VDaGFuZ2VkLmNvbXBsZXRlKCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IHRyYW5zbGF0ZVNlcnZpY2UoKTogU21hcnRUcmFuc2xhdGVTZXJ2aWNlIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAodGhpcy5fdHJhbnNsYXRlU2VydmljZSkge1xuICAgICAgcmV0dXJuIHRoaXMuX3RyYW5zbGF0ZVNlcnZpY2U7XG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBwcml2YXRlIF90cmFuc2xhdGVTZXJ2aWNlPzogU21hcnRUcmFuc2xhdGVTZXJ2aWNlO1xuICBwdWJsaWMgdHJhbnNsYXRlU2VydmljZUNoYW5nZWQ6IFN1YmplY3Q8dm9pZD4gPSBuZXcgU21hcnRTdWJqZWN0KHRoaXMuX2Rlc3Ryb3kkKTtcblxuICBwdWJsaWMgY29tcG9uZW50TGlicmFyeTogQ29tcG9uZW50TGlicmFyeSB8IHVuZGVmaW5lZDtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHZpZXc6IFZpZXdTZXJ2aWNlLFxuICAgIHByaXZhdGUgc2Vzc2lvbjogU21hcnRTZXNzaW9uU2VydmljZSxcbiAgICBwcml2YXRlIGRpYWxvZzogU21hcnRWaWV3Q29udGV4dERpYWxvZ1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBhcGlRdWV1ZVNlcnZpY2U6IEFwaVF1ZXVlU2VydmljZSxcbiAgICBwcml2YXRlIHRoZW1lU2VydmljZTogVGhlbWVTZXJ2aWNlLFxuICAgIHByaXZhdGUgaW5qZWN0OiBJbmplY3RvcixcbiAgICBASW5qZWN0KENPTVBPTkVOVF9MSUJSQVJZKSBAT3B0aW9uYWwoKSBjb21wTGliPzogQ29tcG9uZW50TGlicmFyeSxcbiAgICBASW5qZWN0KFNNQVJUX0RFRkFVTFRfVklFV19DT01QT05FTlRTKVxuICAgIEBPcHRpb25hbCgpXG4gICAgZGVmYXVsdFZpZXdDb21wb25lbnRzPzogRGVmYXVsdFZpZXdDb21wb25lbnRFbnRyeVtdXG4gICkge1xuICAgIHRoaXMuY29tcG9uZW50TGlicmFyeSA9IGNvbXBMaWI7XG4gICAgZm9yIChjb25zdCBlbnRyeSBvZiBkZWZhdWx0Vmlld0NvbXBvbmVudHMgPz8gW10pIHtcbiAgICAgIHRoaXMuZGVmYXVsdENvbXBvbmVudHMuc2V0KGVudHJ5LmNvbXBvbmVudE5hbWUsIGVudHJ5LmNvbXBvbmVudCk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5fZGVzdHJveSQubmV4dCgpO1xuICAgIHRoaXMuX2Rlc3Ryb3kkLmNvbXBsZXRlKCk7XG4gIH1cblxuICBwdWJsaWMgZm9sbG93KHV1aWQ6IHN0cmluZywgZGV0ZWN0Q2hhbmdlOiBTbWFydFN1YmplY3Q8YW55Pik6IHZvaWQge1xuICAgIHRoaXMuc21hcnRBcGlDbGllbnRzLnNldCh1dWlkLCBkZXRlY3RDaGFuZ2UpO1xuICB9XG4gIHB1YmxpYyB1bmZvbGxvdyh1dWlkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLnNtYXJ0QXBpQ2xpZW50cy5kZWxldGUodXVpZCk7XG4gIH1cblxuICByZWdpc3RlckVtYmVkZGVkU2xvdChcbiAgICBjb250YWluZXJVdWlkOiBzdHJpbmcsXG4gICAgY29udGFpbmVySWQ6IHN0cmluZyxcbiAgICB2Y1JlZjogVmlld0NvbnRhaW5lclJlZixcbiAgICBraW5kOiBTbG90S2luZFxuICApOiB2b2lkIHtcbiAgICBsZXQgaW5uZXJNYXAgPSB0aGlzLmVtYmVkZGVkQ29udGFpbmVycy5nZXQoY29udGFpbmVyVXVpZCk7XG4gICAgaWYgKCFpbm5lck1hcCkge1xuICAgICAgaW5uZXJNYXAgPSBuZXcgTWFwKCk7XG4gICAgICB0aGlzLmVtYmVkZGVkQ29udGFpbmVycy5zZXQoY29udGFpbmVyVXVpZCwgaW5uZXJNYXApO1xuICAgIH1cbiAgICBpbm5lck1hcC5zZXQoY29udGFpbmVySWQsIHsgdmNSZWYsIGtpbmQgfSk7XG5cbiAgICAvLyBSZWF0dGFjaCBlbWJlZGRlZCB2aWV3cyB0aGF0IHdlcmUgZGV0YWNoZWQgYmVmb3JlIGxheW91dCByZS1yZW5kZXJcbiAgICBjb25zdCBleGlzdGluZyA9IHRoaXMuZW1iZWRkZWRWaWV3UmVmcy5maWx0ZXIoXG4gICAgICAocmVmKSA9PiByZWYuY29udGFpbmVyVXVpZCA9PT0gY29udGFpbmVyVXVpZCAmJiByZWYuY29udGFpbmVySWQgPT09IGNvbnRhaW5lcklkXG4gICAgKTtcbiAgICBmb3IgKGNvbnN0IHJlZiBvZiBleGlzdGluZykge1xuICAgICAgaWYgKCFyZWYuY29tcG9uZW50UmVmLmhvc3RWaWV3LmRlc3Ryb3llZCkge1xuICAgICAgICB2Y1JlZi5pbnNlcnQocmVmLmNvbXBvbmVudFJlZi5ob3N0Vmlldyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gRHJhaW4gcGVuZGluZyBxdWV1ZSAobWF0Y2ggb24gdGhlIHJlc29sdmVkIHNsb3QsIHNvIHJvdXRlci1zbG90IE5PUk1BTCB2aWV3cyBtYXRjaCB0b28pXG4gICAgY29uc3QgbWF0Y2hlcyA9ICh2OiBWaWV3RGF0YSkgPT4ge1xuICAgICAgY29uc3QgcyA9IHJlc29sdmVTbG90KHYpO1xuICAgICAgcmV0dXJuIHMuY29udGFpbmVyVXVpZCA9PT0gY29udGFpbmVyVXVpZCAmJiBzLmNvbnRhaW5lcklkID09PSBjb250YWluZXJJZDtcbiAgICB9O1xuICAgIGNvbnN0IG1hdGNoaW5nID0gdGhpcy5wZW5kaW5nRW1iZWRkZWRWaWV3cy5maWx0ZXIobWF0Y2hlcyk7XG4gICAgdGhpcy5wZW5kaW5nRW1iZWRkZWRWaWV3cyA9IHRoaXMucGVuZGluZ0VtYmVkZGVkVmlld3MuZmlsdGVyKCh2KSA9PiAhbWF0Y2hlcyh2KSk7XG5cbiAgICBpZiAobWF0Y2hpbmcubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgdXBkYXRlczogKFZpZXdTdGF0ZVVwZGF0ZSB8IHVuZGVmaW5lZClbXSA9IG1hdGNoaW5nLm1hcCgodikgPT4gdGhpcy5vcGVuVmlldyh2KSk7XG4gICAgICB0aGlzLnNlbmRWaWV3Q29udGV4dFVwZGF0ZXModXBkYXRlcyk7XG4gICAgfVxuICB9XG5cbiAgZGV0YWNoQWxsRW1iZWRkZWRWaWV3cyhjb250YWluZXJVdWlkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBjaGlsZHJlbiA9IHRoaXMuZW1iZWRkZWRWaWV3UmVmcy5maWx0ZXIoKHJlZikgPT4gcmVmLmNvbnRhaW5lclV1aWQgPT09IGNvbnRhaW5lclV1aWQpO1xuICAgIGZvciAoY29uc3QgY2hpbGQgb2YgY2hpbGRyZW4pIHtcbiAgICAgIGlmIChjaGlsZC5jb21wb25lbnRSZWYuaG9zdFZpZXcuZGVzdHJveWVkKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgLy8gT25seSBkZXRhY2ggdmlld3MgbGl2aW5nIGluIGEgcmUtcmVuZGVyaW5nIExBWU9VVCBzbG90LiBBIFNUQUJMRSBkaXJlY3RpdmVcbiAgICAgIC8vIHNsb3QgKHJvdXRlci1vdXRsZXQpIGxpdmVzIG91dHNpZGUgdGhlIGxheW91dCAqbmdGb3IgYW5kIHN1cnZpdmVzIHRoZSBwYXJlbnRcbiAgICAgIC8vIHJlLXJlbmRlciwgc28gaXRzIGNoaWxkIG5lZWRzIG5vIGRldGFjaCBwcm90ZWN0aW9uIOKAlCBkZXRhY2hpbmcgaXQgaGVyZSBpc1xuICAgICAgLy8gd2hhdCBwcm9kdWNlZCB0aGUgZmFsc2Utb3JwaGFuIGRlc3Ryb3kgaW4gbXVsdGktbGV2ZWwgTk9STUFMIG5lc3RpbmdcbiAgICAgIC8vIChIb21lIC0+IE1haW4gLT4gcGFnZSk6IE1haW4gZ290IHN3ZXB0IHVwIGJ5IEhvbWUncyBsYXlvdXQgZGFuY2UuICgjMjg4NzApXG4gICAgICBjb25zdCBlbnRyeSA9IHRoaXMuZW1iZWRkZWRDb250YWluZXJzLmdldChjb250YWluZXJVdWlkKT8uZ2V0KGNoaWxkLmNvbnRhaW5lcklkKTtcbiAgICAgIGlmICghZW50cnkgfHwgZW50cnkua2luZCA9PT0gJ3N0YWJsZScpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBjb25zdCBpZHggPSBlbnRyeS52Y1JlZi5pbmRleE9mKGNoaWxkLmNvbXBvbmVudFJlZi5ob3N0Vmlldyk7XG4gICAgICBpZiAoaWR4ID49IDApIHtcbiAgICAgICAgZW50cnkudmNSZWYuZGV0YWNoKGlkeCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY2xlYW51cE9ycGhhbmVkRW1iZWRkZWRWaWV3cyhjb250YWluZXJVdWlkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCByZWZzID0gdGhpcy5lbWJlZGRlZFZpZXdSZWZzLmZpbHRlcigocmVmKSA9PiByZWYuY29udGFpbmVyVXVpZCA9PT0gY29udGFpbmVyVXVpZCk7XG4gICAgY29uc3Qgb3JwaGFuZWQ6IFNtYXJ0RW1iZWRkZWRWaWV3UmVmW10gPSBbXTtcbiAgICBmb3IgKGNvbnN0IHJlZiBvZiByZWZzKSB7XG4gICAgICBpZiAocmVmLmNvbXBvbmVudFJlZi5ob3N0Vmlldy5kZXN0cm95ZWQpIHtcbiAgICAgICAgb3JwaGFuZWQucHVzaChyZWYpO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHZjUmVmID0gdGhpcy5nZXRFbWJlZGRlZFNsb3QoY29udGFpbmVyVXVpZCwgcmVmLmNvbnRhaW5lcklkKTtcbiAgICAgIGlmICghdmNSZWYpIHtcbiAgICAgICAgLy8gVGhlIHNsb3QgaXMgdHJ1bHkgZ29uZSAoaXRzIGxheW91dCBob3N0IHdhcyB0b3JuIGRvd24gYW5kIG5vdCByZWNyZWF0ZWQpOlxuICAgICAgICAvLyBhIHJlYWwgb3JwaGFuIHRvIGRlc3Ryb3kuXG4gICAgICAgIG9ycGhhbmVkLnB1c2gocmVmKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICAvLyBTbG90IHN0aWxsIHJlZ2lzdGVyZWQgYnV0IGl0cyB2aWV3IHdhcyBkZXRhY2hlZCBieSBkZXRhY2hBbGxFbWJlZGRlZFZpZXdzIGFuZFxuICAgICAgLy8gbmV2ZXIgcmVhdHRhY2hlZCwgYmVjYXVzZSB0aGUgKm5nRm9yIHJldXNlZCB0aGUgc2xvdCBob3N0IChvbmx5IGEgc2libGluZ1xuICAgICAgLy8gd2lkZ2V0IGNoYW5nZWQpIHNvIG5vIHJlLXJlZ2lzdGVyIGZpcmVkLiBSZWF0dGFjaCBzbyBldmVyeSBkZXRhY2ggaXMgcGFpcmVkLlxuICAgICAgaWYgKHZjUmVmLmluZGV4T2YocmVmLmNvbXBvbmVudFJlZi5ob3N0VmlldykgPCAwKSB7XG4gICAgICAgIHZjUmVmLmluc2VydChyZWYuY29tcG9uZW50UmVmLmhvc3RWaWV3KTtcbiAgICAgIH1cbiAgICB9XG4gICAgZm9yIChjb25zdCByZWYgb2Ygb3JwaGFuZWQpIHtcbiAgICAgIGlmICghcmVmLmNvbXBvbmVudFJlZi5ob3N0Vmlldy5kZXN0cm95ZWQpIHtcbiAgICAgICAgcmVmLmNvbXBvbmVudFJlZi5kZXN0cm95KCk7XG4gICAgICB9XG4gICAgICBjb25zdCBpZHggPSB0aGlzLm9wZW5lZFZpZXdVdWlkcy5pbmRleE9mKHJlZi51dWlkKTtcbiAgICAgIGlmIChpZHggPj0gMCkge1xuICAgICAgICB0aGlzLm9wZW5lZFZpZXdVdWlkcy5zcGxpY2UoaWR4LCAxKTtcbiAgICAgICAgdGhpcy5vcGVuZWRWaWV3RGF0YS5zcGxpY2UoaWR4LCAxKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5lbWJlZGRlZFZpZXdSZWZzID0gdGhpcy5lbWJlZGRlZFZpZXdSZWZzLmZpbHRlcigocmVmKSA9PiAhb3JwaGFuZWQuaW5jbHVkZXMocmVmKSk7XG4gIH1cblxuICBnZXRDb21wb3NpdGVNb2RlbChjb250YWluZXJVdWlkOiBzdHJpbmcpOiB7IFtrZXk6IHN0cmluZ106IGFueSB9IHtcbiAgICBjb25zdCByZXN1bHQ6IHsgW2tleTogc3RyaW5nXTogYW55IH0gPSB7fTtcbiAgICBjb25zdCBjaGlsZHJlbiA9IHRoaXMuZW1iZWRkZWRWaWV3UmVmcy5maWx0ZXIoKHJlZikgPT4gcmVmLmNvbnRhaW5lclV1aWQgPT09IGNvbnRhaW5lclV1aWQpO1xuICAgIGZvciAoY29uc3QgY2hpbGQgb2YgY2hpbGRyZW4pIHtcbiAgICAgIHJlc3VsdFtjaGlsZC51dWlkXSA9IGNoaWxkLmNvbXBvbmVudFJlZi5pbnN0YW5jZS5nZXRNb2RlbCgpO1xuICAgICAgT2JqZWN0LmFzc2lnbihyZXN1bHQsIHRoaXMuZ2V0Q29tcG9zaXRlTW9kZWwoY2hpbGQudXVpZCkpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgc3VibWl0RW1iZWRkZWRGb3Jtcyhjb250YWluZXJVdWlkOiBzdHJpbmcsIHZhbGlkYXRlOiBib29sZWFuKTogU21hcnRGb3JtSW52YWxpZEZpZWxkcyB7XG4gICAgY29uc3QgYWxsSW52YWxpZEtleXM6IHN0cmluZ1tdID0gW107XG4gICAgY29uc3QgYWxsSW52YWxpZE5hbWVzOiBzdHJpbmdbXSA9IFtdO1xuICAgIGNvbnN0IGNoaWxkcmVuID0gdGhpcy5lbWJlZGRlZFZpZXdSZWZzLmZpbHRlcigocmVmKSA9PiByZWYuY29udGFpbmVyVXVpZCA9PT0gY29udGFpbmVyVXVpZCk7XG4gICAgZm9yIChjb25zdCBjaGlsZCBvZiBjaGlsZHJlbikge1xuICAgICAgY29uc3QgaW5zdGFuY2UgPSBjaGlsZC5jb21wb25lbnRSZWYuaW5zdGFuY2U7XG4gICAgICBpbnN0YW5jZS5zdWJtaXRGb3JtKHZhbGlkYXRlKTtcbiAgICAgIGlmICh2YWxpZGF0ZSkge1xuICAgICAgICBjb25zdCBpbnZhbGlkOiBTbWFydEZvcm1JbnZhbGlkRmllbGRzID0gaW5zdGFuY2UuZ2V0SW52YWxpZEZpZWxkcygpO1xuICAgICAgICBhbGxJbnZhbGlkS2V5cy5wdXNoKC4uLmludmFsaWQuaW52YWxpZEZpZWxkS2V5cyk7XG4gICAgICAgIGFsbEludmFsaWROYW1lcy5wdXNoKC4uLmludmFsaWQuaW52YWxpZEZpZWxkTmFtZXMpO1xuICAgICAgfVxuICAgICAgY29uc3QgbmVzdGVkID0gdGhpcy5zdWJtaXRFbWJlZGRlZEZvcm1zKGNoaWxkLnV1aWQsIHZhbGlkYXRlKTtcbiAgICAgIGFsbEludmFsaWRLZXlzLnB1c2goLi4ubmVzdGVkLmludmFsaWRGaWVsZEtleXMpO1xuICAgICAgYWxsSW52YWxpZE5hbWVzLnB1c2goLi4ubmVzdGVkLmludmFsaWRGaWVsZE5hbWVzKTtcbiAgICB9XG4gICAgcmV0dXJuIHsgaW52YWxpZEZpZWxkS2V5czogYWxsSW52YWxpZEtleXMsIGludmFsaWRGaWVsZE5hbWVzOiBhbGxJbnZhbGlkTmFtZXMgfTtcbiAgfVxuXG4gIHVucmVnaXN0ZXJFbWJlZGRlZFNsb3QoY29udGFpbmVyVXVpZDogc3RyaW5nLCBjb250YWluZXJJZDogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgaW5uZXJNYXAgPSB0aGlzLmVtYmVkZGVkQ29udGFpbmVycy5nZXQoY29udGFpbmVyVXVpZCk7XG4gICAgaWYgKGlubmVyTWFwKSB7XG4gICAgICBpbm5lck1hcC5kZWxldGUoY29udGFpbmVySWQpO1xuICAgICAgaWYgKGlubmVyTWFwLnNpemUgPT09IDApIHtcbiAgICAgICAgdGhpcy5lbWJlZGRlZENvbnRhaW5lcnMuZGVsZXRlKGNvbnRhaW5lclV1aWQpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZ2V0RW1iZWRkZWRTbG90KFxuICAgIGNvbnRhaW5lclV1aWQ6IHN0cmluZyxcbiAgICBjb250YWluZXJJZDogc3RyaW5nXG4gICk6IFZpZXdDb250YWluZXJSZWYgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLmVtYmVkZGVkQ29udGFpbmVycy5nZXQoY29udGFpbmVyVXVpZCk/LmdldChjb250YWluZXJJZCk/LnZjUmVmO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSB0aGUgdmlldydzIGNvbXBvbmVudCBpbnRvIGl0cyByZXNvbHZlZCBzbG90LiBSZXR1cm5zIGZhbHNlIGFuZCBxdWV1ZXNcbiAgICogdGhlIHZpZXcgaWYgdGhlIHNsb3QgaXMgbm90IHJlZ2lzdGVyZWQgeWV0IChkcmFpbmVkIG9uIHJlZ2lzdHJhdGlvbikuXG4gICAqL1xuICBwcml2YXRlIGluc2VydFZpZXdJbnRvU2xvdCh2aWV3OiBWaWV3RGF0YSwgY29tcG9uZW50OiBDb21wb25lbnRUeXBlPGFueT4pOiBib29sZWFuIHtcbiAgICBjb25zdCB7IGNvbnRhaW5lclV1aWQsIGNvbnRhaW5lcklkIH0gPSByZXNvbHZlU2xvdCh2aWV3KTtcbiAgICBjb25zdCB2Y1JlZiA9IHRoaXMuZ2V0RW1iZWRkZWRTbG90KGNvbnRhaW5lclV1aWQsIGNvbnRhaW5lcklkKTtcbiAgICBpZiAoIXZjUmVmKSB7XG4gICAgICAvLyBTbG90IG5vdCByZWdpc3RlcmVkIHlldDogcXVldWUgdGhlIHZpZXcgYW5kIGRyYWluIGl0IHdoZW4gaXRzIHNsb3QgcmVnaXN0ZXJzXG4gICAgICAvLyAocmVnaXN0ZXJFbWJlZGRlZFNsb3QpLiBUaGUgc3luY2hyb25vdXMgZGV0ZWN0Q2hhbmdlcyBiZWxvdyByZW5kZXJzIGEgZnJlc2hseVxuICAgICAgLy8gbW91bnRlZCBwYXJlbnQncyB0ZW1wbGF0ZSBpbiB0aGUgc2FtZSBzeW5jVmlldyBwYXNzLCBzbyBhIHBhcmVudCAtPiBjaGlsZCAtPlxuICAgICAgLy8gZ3JhbmRjaGlsZCBjaGFpbiAoSG9tZSAtPiBNYWluIC0+IHBhZ2UpIHJlZ2lzdGVycyBldmVyeSBzbG90IGltbWVkaWF0ZWx5IGFuZFxuICAgICAgLy8gdGhlIHF1ZXVlIGRyYWlucyB3aXRoaW4gdGhlIHBhc3Mg4oCUIGV2ZW4gd2hlbiByZXN0b3JlVmlld3Mgb3BlbnMgYSBjaGlsZCBiZWZvcmVcbiAgICAgIC8vIGl0cyBwYXJlbnQuICgjMjg4NzApXG4gICAgICB0aGlzLnBlbmRpbmdFbWJlZGRlZFZpZXdzLnB1c2godmlldyk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGNvbnN0IGNvbXBvbmVudFJlZiA9IHZjUmVmLmNyZWF0ZUNvbXBvbmVudChjb21wb25lbnQpO1xuICAgIGNvbXBvbmVudFJlZi5pbnN0YW5jZS51dWlkID0gdmlldy51dWlkO1xuICAgIHRoaXMuZW1iZWRkZWRWaWV3UmVmcy5wdXNoKHsgdXVpZDogdmlldy51dWlkLCBjb250YWluZXJVdWlkLCBjb250YWluZXJJZCwgY29tcG9uZW50UmVmIH0pO1xuICAgIC8vIFJlbmRlciB0aGUgZnJlc2hseSBjcmVhdGVkIGNvbXBvbmVudCBzeW5jaHJvbm91c2x5IHNvIGl0cyBvd24gZW1iZWRkZWQtc2xvdFxuICAgIC8vIGRpcmVjdGl2ZXMgKHRoZSByb3V0ZXItb3V0bGV0IHNsb3Qgb2YgYSBuZXN0ZWQgTk9STUFMIHZpZXcpIHJlZ2lzdGVyIHRoZWlyXG4gICAgLy8gY29udGFpbmVycyBpbW1lZGlhdGVseS4gVGhpcyBsZXRzIGEgcGFyZW50IC0+IGNoaWxkIC0+IGdyYW5kY2hpbGQgY2hhaW5cbiAgICAvLyAoZS5nLiBIb21lIC0+IE1haW4gLT4gcGFnZSkgbW91bnQgaW4gYSBzaW5nbGUgc3luY2hyb25vdXMgc3luY1ZpZXcgcGFzc1xuICAgIC8vIGluc3RlYWQgb2YgZGVwZW5kaW5nIG9uIGEgY2hhbmdlLWRldGVjdGlvbiB0aWNrIGZpcmluZyBiZXR3ZWVuIGVhY2ggbGV2ZWwuXG4gICAgLy8gV2l0aG91dCBpdCB0aGUgY2hpbGQgY2Fubm90IHJlc29sdmUgaXRzIHNsb3QsIHF1ZXVlcyBpbnRvXG4gICAgLy8gcGVuZGluZ0VtYmVkZGVkVmlld3MsIGFuZCB0aGUgZHJhaW4gcmFjZXMgdGhlIGFzeW5jIHVwZGF0ZVZpZXdDb250ZXh0XG4gICAgLy8gcm91bmQtdHJpcHMg4oCUIGludGVybWl0dGVudGx5IGxlYXZpbmcgYSBwYXJlbnQgT1BFTkVEIGluIGJhY2tlbmQgYm9va2tlZXBpbmdcbiAgICAvLyBidXQgbmV2ZXIgbW91bnRlZCBvbiB0aGUgY2xpZW50LCBzbyBpdHMgc2xvdCBjaGlsZCBzdGF5cyBibGFuay4gKCMyODg3MClcbiAgICBjb21wb25lbnRSZWYuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIGNvbXBvbmVudFJlZi5pbnN0YW5jZS5ydW4oKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHB1YmxpYyBzZXRBY3Rpb25EZXNjcmlwdG9ycyhhY3Rpb25EZXNjcmlwdG9yczogTWFwPHN0cmluZywgVWlBY3Rpb25EZXNjcmlwdG9yPik6IHZvaWQge1xuICAgIHRoaXMuYWN0aW9uRGVzY3JpcHRvcnMgPSBhY3Rpb25EZXNjcmlwdG9ycztcbiAgfVxuXG4gIHB1YmxpYyBnZXRBY3Rpb25EZXNjcmlwdG9ycygpOiBNYXA8c3RyaW5nLCBVaUFjdGlvbkRlc2NyaXB0b3I+IHwgdW5kZWZpbmVkIHtcbiAgICBpZiAoIXRoaXMuYWN0aW9uRGVzY3JpcHRvcnMpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ05vIGFjdGlvbiBkZXNjcmlwdG9ycyBoYXMgYmVlbiBzZXQgdG8gVmlld0NvbnRleHQuJyk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmFjdGlvbkRlc2NyaXB0b3JzO1xuICB9XG5cbiAgcHVibGljIHNldFZpZXdIYW5kbGVycyh2aWV3SGFuZGxlcnM6IEFycmF5PFNtYXJ0Vmlld0hhbmRsZXJNb2RlbD4pOiB2b2lkIHtcbiAgICB0aGlzLnZpZXdIYW5kbGVycyA9IHZpZXdIYW5kbGVycztcbiAgfVxuXG4gIHB1YmxpYyBzZXRWaWV3QXBpRXJyb3JzKHZpZXdBcGlFcnJvcnM6IFNtYXJ0Vmlld0NvbnRleHRBcGlFcnJvcnMpOiB2b2lkIHtcbiAgICB0aGlzLnNtYXJ0Vmlld0NvbnRleHRBcGlFcnJvcnMgPSB2aWV3QXBpRXJyb3JzO1xuICB9XG5cbiAgcHVibGljIHNldE1lc3NhZ2VEaWFsb2dOYW1lKG1lc3NhZ2VEaWFsb2dOYW1lOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLm1lc3NhZ2VEaWFsb2duYW1lID0gbWVzc2FnZURpYWxvZ05hbWU7XG4gICAgdGhpcy52aWV3SGFuZGxlcnMucHVzaCh7XG4gICAgICBuYW1lOiBtZXNzYWdlRGlhbG9nTmFtZSxcbiAgICAgIGNvbXBvbmVudDogTWVzc2FnZURpYWxvZ0NvbXBvbmVudCxcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0VXBVcmxGb3JWaWV3U2VydmljZSgpOiB2b2lkIHtcbiAgICB0aGlzLnZpZXcuY29uZmlndXJhdGlvbi5iYXNlUGF0aCA9IHRoaXMudXJsO1xuICB9XG5cbiAgcHVibGljIGdldE1vZHVsZVVSTChtb2R1bGU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgaWYgKCF0aGlzLm1vZHVsZVVybHNCeU1vZHVsZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdNb2R1bGVzTWFwIGRvZXMgbm90IGV4aXN0LicpO1xuICAgIH1cbiAgICBsZXQgbW9kdWxlVXJsID0gdGhpcy5tb2R1bGVVcmxzQnlNb2R1bGU/LmdldChtb2R1bGUpO1xuXG4gICAgaWYgKCFtb2R1bGVVcmwpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignTW9kdWxlVXJsIGRvZXMgbm90IGV4aXN0IHdpdGggdGhlIGdpdmVuIG1vZHVsZS4nKTtcbiAgICB9XG4gICAgcmV0dXJuIG1vZHVsZVVybDtcbiAgfVxuXG4gIHB1YmxpYyBzZXRNb2R1bGVVUkwobW9kdWxlczogTWFwPHN0cmluZywgc3RyaW5nPik6IHZvaWQge1xuICAgIHRoaXMubW9kdWxlVXJsc0J5TW9kdWxlID0gbW9kdWxlcztcbiAgfVxuXG4gIHB1YmxpYyBzZXRVcmwodXJsOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLnVybCA9IHVybCArICcvdmlldyc7XG4gICAgdGhpcy5zZXRVcFVybEZvclZpZXdTZXJ2aWNlKCk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0QW5kU3luY1ZpZXdDb250ZXh0KHV1aWQ/OiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoIXV1aWQpIHtcbiAgICAgIHV1aWQgPSB0aGlzLmdldFZpZXdDb250ZXh0VXVpZCgpO1xuICAgIH1cbiAgICBhd2FpdCB0aGlzLmdldFZpZXdDb250ZXh0KHV1aWQpLnRoZW4oYXN5bmMgKCkgPT4ge1xuICAgICAgYXdhaXQgdGhpcy5zeW5jVmlldygpO1xuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGdldFZpZXdDb250ZXh0KHV1aWQ6IHN0cmluZyk6IFByb21pc2U8Vmlld0NvbnRleHREYXRhPiB7XG4gICAgdGhpcy52aWV3Q29udGV4dCA9IGF3YWl0IHRoaXMudmlldy5nZXRWaWV3Q29udGV4dCh1dWlkKS50b1Byb21pc2UoKTtcbiAgICBpZiAoIXRoaXMudmlld0NvbnRleHQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignVmlld0NvbnRleHQgZG9lcyBub3QgZXhpc3Qgd2l0aCB0aGUgZ2l2ZW4gdXVpZC4nKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMudmlld0NvbnRleHQ7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0Vmlld0NvbnRleHREYXRhQnlQYWdlTmFtZShwYWdlTmFtZTogc3RyaW5nKTogUHJvbWlzZTxWaWV3RGF0YT4ge1xuICAgIGlmICghdGhpcy52aWV3Q29udGV4dCkge1xuICAgICAgYXdhaXQgdGhpcy5nZXRWaWV3Q29udGV4dCh0aGlzLmdldFZpZXdDb250ZXh0VXVpZCgpKTtcbiAgICB9XG4gICAgbGV0IHBhZ2VVdWlkID0gdGhpcy5nZXRVdWlkT2ZQYWdlKHBhZ2VOYW1lKTtcblxuICAgIGxldCB2aWV3Q29udGV4dEJ5UGFnZU5hbWUgPSB0aGlzLnZpZXdDb250ZXh0Py52aWV3cy5maW5kKCh2aWV3KSA9PiB2aWV3LnV1aWQgPT09IHBhZ2VVdWlkKTtcbiAgICBpZiAoIXZpZXdDb250ZXh0QnlQYWdlTmFtZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBUaGUgVmlld0RhdGEgb2YgJHtwYWdlTmFtZX0gaXMgbm90IGZvdW5kIWApO1xuICAgIH1cbiAgICByZXR1cm4gdmlld0NvbnRleHRCeVBhZ2VOYW1lO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIHVwZGF0ZVZpZXdDb250ZXh0KFxuICAgIHZpZXdDb250ZXh0VXBkYXRlOiBWaWV3Q29udGV4dFVwZGF0ZVxuICApOiBQcm9taXNlPFZpZXdDb250ZXh0RGF0YSB8IHVuZGVmaW5lZD4ge1xuICAgIHZpZXdDb250ZXh0VXBkYXRlLmRldmljZUluZm8gPz89IHtcbiAgICAgIGRldmljZUlkOiAnaWQnLFxuICAgICAgdXNlckFnZW50OiBuYXZpZ2F0b3IudXNlckFnZW50LFxuICAgICAgcGFyYW1ldGVyczogbmV3IE1hcCgpLFxuICAgIH07XG4gICAgdmlld0NvbnRleHRVcGRhdGUuZGV2aWNlSW5mby5jb21wb25lbnRMaWJyYXJ5ID0gdGhpcy5jb21wb25lbnRMaWJyYXJ5O1xuICAgIHZpZXdDb250ZXh0VXBkYXRlLmRldmljZUluZm8udGhlbWVOYW1lID0gdGhpcy50aGVtZVNlcnZpY2UuY3VycmVudFRoZW1lKCk7XG5cbiAgICB0aGlzLnZpZXdDb250ZXh0ID0gYXdhaXQgdGhpcy52aWV3LnVwZGF0ZVZpZXdDb250ZXh0KHZpZXdDb250ZXh0VXBkYXRlKS50b1Byb21pc2UoKTtcblxuICAgIHJldHVybiB0aGlzLnZpZXdDb250ZXh0O1xuICB9XG5cbiAgcHJpdmF0ZSBjbGVhclNlc3Npb25TdG9yYWdlKCk6IHZvaWQge1xuICAgIHNlc3Npb25TdG9yYWdlLmNsZWFyKCk7XG4gICAgdGhpcy5jbGVhckVtYmVkZGVkVmlld3MoKTtcbiAgICB0aGlzLm9wZW5lZFZpZXdEYXRhID0gW107XG4gICAgdGhpcy5vcGVuZWRWaWV3VXVpZHMgPSBbXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUZWFyIGRvd24gYWxsIHNsb3QtaG9zdGVkIHZpZXcgY29tcG9uZW50cyBvbiBhIHZpZXdDb250ZXh0IHJlc2V0IChlLmcuIGxvZ291dCAvXG4gICAqIHZpZXdjb250ZXh0LWxvc3QpLiBXaXRob3V0IHRoaXMgdGhlIHByZXZpb3VzIHZpZXcgdHJlZSBzdGF5cyBtb3VudGVkIGluIHRoZSByb290XG4gICAqIHNsb3QgYW5kIHRoZSBuZXcgdHJlZSBpcyBhcHBlbmRlZCBhbG9uZ3NpZGUgaXQuIERlc3Ryb3lpbmcgYSBwYXJlbnQgY2FzY2FkZXMgdG9cbiAgICogaXRzIG5lc3RlZCBzbG90IGRpcmVjdGl2ZXMgKHdoaWNoIHVucmVnaXN0ZXIgdGhlaXIgY29udGFpbmVycyB2aWEgbmdPbkRlc3Ryb3kpLFxuICAgKiBsZWF2aW5nIG9ubHkgdGhlIGhvc3Qtb3duZWQgcm9vdCBzbG90IHJlZ2lzdGVyZWQuXG4gICAqL1xuICBwcml2YXRlIGNsZWFyRW1iZWRkZWRWaWV3cygpOiB2b2lkIHtcbiAgICBmb3IgKGNvbnN0IHJlZiBvZiB0aGlzLmVtYmVkZGVkVmlld1JlZnMpIHtcbiAgICAgIGlmICghcmVmLmNvbXBvbmVudFJlZi5ob3N0Vmlldy5kZXN0cm95ZWQpIHtcbiAgICAgICAgcmVmLmNvbXBvbmVudFJlZi5kZXN0cm95KCk7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuZW1iZWRkZWRWaWV3UmVmcyA9IFtdO1xuICAgIHRoaXMucGVuZGluZ0VtYmVkZGVkVmlld3MgPSBbXTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBzdGFydFZpZXdDb250ZXh0KCk6IFByb21pc2U8Vmlld0NvbnRleHREYXRhPiB7XG4gICAgdGhpcy5jbGVhclNlc3Npb25TdG9yYWdlKCk7XG4gICAgdGhpcy5zZXNzaW9uLmFkZEhlYWRlclBhcmFtKHtcbiAgICAgIGhlYWRlck5hbWU6IHRoaXMudmlld0NvbnRleHRVdWlkSGVhZGVyTmFtZSxcbiAgICAgIHZhbHVlOiAnJyxcbiAgICB9KTtcblxuICAgIGxldCBuZXdWaWV3Q29udGV4dDogVmlld0NvbnRleHREYXRhIHwgdW5kZWZpbmVkID0gYXdhaXQgdGhpcy52aWV3XG4gICAgICAuY3JlYXRlVmlld0NvbnRleHQoKVxuICAgICAgLnRvUHJvbWlzZSgpO1xuICAgIGlmICghbmV3Vmlld0NvbnRleHQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignTm8gVmlld0NvbnRleHQgd2FzIGNyZWF0ZWQnKTtcbiAgICB9XG4gICAgdGhpcy52aWV3Q29udGV4dCA9IG5ld1ZpZXdDb250ZXh0O1xuICAgIHRoaXMuc2V0Vmlld0NvbnRleHRVdWlkKG5ld1ZpZXdDb250ZXh0LnV1aWQhKTtcbiAgICB0aGlzLmdlbmVyYXRpb24rKztcblxuICAgIHJldHVybiB0aGlzLnZpZXdDb250ZXh0O1xuICB9XG5cbiAgcHVibGljIGdldEdlbmVyYXRpb24oKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5nZW5lcmF0aW9uO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGluaXRpYWxpemUodXVpZD86IHN0cmluZyk6IFByb21pc2U8Vmlld0NvbnRleHREYXRhIHwgdW5kZWZpbmVkPiB7XG4gICAgaWYgKHRoaXMuaW5pdGlhbGl6ZVJ1bm5pbmcpIHtcbiAgICAgIHJldHVybiB0aGlzLmluaXRpYWxpemVSdW5uaW5nLnRvUHJvbWlzZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmluaXRpYWxpemVSdW5uaW5nID0gbmV3IFNtYXJ0U3ViamVjdCh0aGlzLl9kZXN0cm95JCk7XG4gICAgICB0cnkge1xuICAgICAgICBpZiAodGhpcy52aWV3SGFuZGxlcnMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgXCJUaGVyZSBhcmVuJ3QgYW55IHZpZXdIYW5kbGVycyBpbiBTbWFydFZpZXdDb250ZXh0U2VydmljZSEgUHJvdmlkZSBzb21lIHRvIHVzZSBpdHMgZnVuY3Rpb25zLlwiXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMubWVzc2FnZURpYWxvZ25hbWUpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBtZXNzYWdlRGlhbG9nTmFtZSBwcm92aWRlZCBieSB0aGUgYmFja2VuZCBoYXMgbm90IGJlZW4gc2V0LicpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh1dWlkKSB7XG4gICAgICAgICAgdGhpcy5zZXRWaWV3Q29udGV4dFV1aWQodXVpZCk7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuZ2V0Vmlld0NvbnRleHQodXVpZCk7XG4gICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLnN0YXJ0Vmlld0NvbnRleHQoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYXdhaXQgdGhpcy5zdGFydFZpZXdDb250ZXh0KCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy52aWV3Q29udGV4dCE7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICB0aGlzLmluaXRpYWxpemVSdW5uaW5nLm5leHQodGhpcy52aWV3Q29udGV4dCEpO1xuICAgICAgICB0aGlzLmluaXRpYWxpemVSdW5uaW5nLmNvbXBsZXRlKCk7XG4gICAgICAgIHRoaXMuaW5pdGlhbGl6ZVJ1bm5pbmcgPSB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGFzeW5jIGluaXRWaWV3Q29udGV4dCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBsZXQgdXVpZDtcbiAgICB0cnkge1xuICAgICAgdXVpZCA9IHRoaXMuZ2V0Vmlld0NvbnRleHRVdWlkKCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGF3YWl0IHRoaXMuaW5pdGlhbGl6ZSgpO1xuICAgICAgdXVpZCA9IHRoaXMuZ2V0Vmlld0NvbnRleHRVdWlkKCk7XG4gICAgfVxuICAgIGF3YWl0IHRoaXMuaW5pdGlhbGl6ZSh1dWlkKTtcbiAgICBhd2FpdCB0aGlzLnJlc3RvcmVWaWV3cyh1dWlkKTtcbiAgICBhd2FpdCB0aGlzLmdldEFuZFN5bmNWaWV3Q29udGV4dCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEh5ZHJhdGVzIHRoZSB2aWV3LWNvbnRleHQgc3RhdGUgZnJvbSBhbiBhbHJlYWR5LWV4aXN0aW5nIFVVSUQgcHJvdmlkZWRcbiAgICogZXh0ZXJuYWxseSAoZS5nLiBieSBhIG5hdGl2ZSBtb2JpbGUgc2hlbGwgdmlhIFVSTCBmcmFnbWVudCkuIFVubGlrZVxuICAgKiBgaW5pdGlhbGl6ZSh1dWlkKWAsIHRoaXMgbWV0aG9kIGRvZXMgTk9UIGZhbGwgYmFjayB0byBjcmVhdGluZyBhIGZyZXNoXG4gICAqIHZpZXdDb250ZXh0IGlmIHRoZSBiYWNrZW5kIHJlamVjdHMgdGhlIFVVSUQg4oCUIHRoZSBjYWxsZXIgaXMgZXhwZWN0ZWQgdG9cbiAgICogc3VyZmFjZSB0aGUgZmFpbHVyZSAodHlwaWNhbGx5IHZpYSB0aGUgYm9vdHN0cmFwJ3MgYG9uU3RhcnRFcnJvcmAgaG9vaykuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgaW5pdEZyb21FeGlzdGluZ1ZpZXdDb250ZXh0KHV1aWQ6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMuc2V0Vmlld0NvbnRleHRVdWlkKHV1aWQpO1xuICAgIGF3YWl0IHRoaXMuZ2V0Vmlld0NvbnRleHQodXVpZCk7XG4gICAgYXdhaXQgdGhpcy5yZXN0b3JlVmlld3ModXVpZCk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgaW5pdE5ld1ZpZXdDb250ZXh0KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLmluaXRpTmV3Q29udGV4dFJ1bm5pbmcpIHtcbiAgICAgIHJldHVybiB0aGlzLmluaXRpTmV3Q29udGV4dFJ1bm5pbmcudG9Qcm9taXNlKCk7XG4gICAgfVxuICAgIHRoaXMuaW5pdGlOZXdDb250ZXh0UnVubmluZyA9IG5ldyBTbWFydFN1YmplY3QodGhpcy5fZGVzdHJveSQpO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLnN0YXJ0Vmlld0NvbnRleHQoKTtcbiAgICAgIGxldCB1dWlkID0gdGhpcy5nZXRWaWV3Q29udGV4dFV1aWQoKTtcbiAgICAgIGF3YWl0IHRoaXMuaW5pdGlhbGl6ZSh1dWlkKTtcbiAgICAgIGF3YWl0IHRoaXMucmVzdG9yZVZpZXdzKHV1aWQpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLmluaXRpTmV3Q29udGV4dFJ1bm5pbmcubmV4dCgpO1xuICAgICAgdGhpcy5pbml0aU5ld0NvbnRleHRSdW5uaW5nLmNvbXBsZXRlKCk7XG4gICAgICB0aGlzLmluaXRpTmV3Q29udGV4dFJ1bm5pbmcgPSB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIG9wZW5WaWV3KHZpZXc6IFZpZXdEYXRhKTogVmlld1N0YXRlVXBkYXRlIHwgdW5kZWZpbmVkIHtcbiAgICBsZXQgYWxyZWFkeU9wZW5lZCA9IHRoaXMub3BlbmVkVmlld1V1aWRzLnNvbWUoKHV1aWQpID0+IHV1aWQgPT09IHZpZXcudXVpZCk7XG4gICAgaWYgKGFscmVhZHlPcGVuZWQpIHJldHVybiB1bmRlZmluZWQ7XG5cbiAgICBjb25zdCB2aWV3SGFuZGxlciA9IHJlc29sdmVWaWV3SGFuZGxlcih0aGlzLnZpZXdIYW5kbGVycywgdGhpcy5kZWZhdWx0Q29tcG9uZW50cywgdmlldyk7XG5cbiAgICBpZiAoIXZpZXdIYW5kbGVyKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBTbWFydFZpZXdIYW5kbGVyTW9kZWwgd2FzIG5vdCBmb3VuZCBieSB2aWV3IG5hbWU6ICR7dmlldy52aWV3TmFtZX0gKGNvbXBvbmVudE5hbWU6ICR7dmlldy5jb21wb25lbnROYW1lfSlgXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAodmlldy50eXBlID09PSBWaWV3VHlwZS5ESUFMT0cpIHtcbiAgICAgIGlmICghdmlld0hhbmRsZXIuY29tcG9uZW50KSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgQ29tcG9uZW50IGlzIHVuZGVmaW5lZCBpbiBTbWFydFZpZXdIYW5kbGVyTW9kZWwgd2l0aCBuYW1lOiAke3ZpZXcudmlld05hbWV9YFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgbGV0IHJlZklzQWxyYWR5QWRkZWQgPSB0aGlzLmRpYWxvZ1JlZnMuc29tZShcbiAgICAgICAgKHJlZjogU21hcnRWaWV3RGlhbG9nUmVmKSA9PiByZWYudXVpZCA9PT0gdmlldy51dWlkXG4gICAgICApO1xuICAgICAgaWYgKCFyZWZJc0FscmFkeUFkZGVkKSB7XG4gICAgICAgIGxldCBkaWFsb2dSZWY7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgdGhpcy5vcGVuZWRWaWV3VXVpZHMucHVzaCh2aWV3LnV1aWQpO1xuICAgICAgICAgIHRoaXMub3BlbmVkVmlld0RhdGEucHVzaCh2aWV3KTtcbiAgICAgICAgICB0aGlzLnNldFV1aWRPZlBhZ2Uodmlldy52aWV3TmFtZSwgdmlldy51dWlkLCB2aWV3SGFuZGxlci5jb21wb25lbnROYW1lKTtcbiAgICAgICAgICBkaWFsb2dSZWYgPSB0aGlzLmRpYWxvZy5vcGVuQ29tcG9uZW50QXNEaWFsb2coXG4gICAgICAgICAgICB2aWV3SGFuZGxlci5jb21wb25lbnQsXG4gICAgICAgICAgICB2aWV3SGFuZGxlci5uYW1lLFxuICAgICAgICAgICAgdmlldy51dWlkXG4gICAgICAgICAgKTtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMub3BlbmVkVmlld1V1aWRzLmluZGV4T2Yodmlldy51dWlkKTtcbiAgICAgICAgICBpZiAoaW5kZXggPj0gMCkge1xuICAgICAgICAgICAgdGhpcy5vcGVuZWRWaWV3VXVpZHMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgICAgIHRoaXMub3BlbmVkVmlld0RhdGEuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgICAgIHRoaXMuY2xlYXJVdWlkT2ZQYWdlKHZpZXcudmlld05hbWUsIHZpZXdIYW5kbGVyLmNvbXBvbmVudE5hbWUpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHRoaXMuc2V0VXVpZE9mUGFnZSh2aWV3LnZpZXdOYW1lLCB2aWV3LnV1aWQsIHZpZXdIYW5kbGVyLmNvbXBvbmVudE5hbWUpO1xuICAgICAgICB9XG4gICAgICAgIGxldCBkaWFsb2dEaXNhYmxlQ2xvc2UgPSB0cnVlO1xuICAgICAgICBsZXQgaXNNZXNzYWdlRGlhbG9nID0gdmlldy52aWV3TmFtZSA9PT0gdGhpcy5tZXNzYWdlRGlhbG9nbmFtZTtcbiAgICAgICAgaWYgKCFpc01lc3NhZ2VEaWFsb2cpIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgZGlhbG9nRGlzYWJsZUNsb3NlID0gdGhpcy5pbmplY3QuZ2V0KERJQUxPR19ESVNBQkxFX0NMT1NFKTtcbiAgICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGR1cmluZyByZWFkaW5nIERJQUxPR19ESVNBQkxFX0NMT1NFJyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChkaWFsb2dSZWYgaW5zdGFuY2VvZiBNYXREaWFsb2dSZWYpIHtcbiAgICAgICAgICBkaWFsb2dSZWYuZGlzYWJsZUNsb3NlID0gZGlhbG9nRGlzYWJsZUNsb3NlO1xuICAgICAgICAgIC8vIGlmIChpc01lc3NhZ2VEaWFsb2cpIHtcbiAgICAgICAgICAvLyAgIGlmICh2aWV3Lm1lc3NhZ2U/Lm9wdGlvbnMgJiYgdmlldy5tZXNzYWdlLm9wdGlvbnMubGVuZ3RoKSB7XG4gICAgICAgICAgLy8gICB9XG4gICAgICAgICAgLy8gfVxuICAgICAgICAgIGlmICghZGlhbG9nRGlzYWJsZUNsb3NlKSB7XG4gICAgICAgICAgICBkaWFsb2dSZWZcbiAgICAgICAgICAgICAgLmFmdGVyQ2xvc2VkKClcbiAgICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kkKSlcbiAgICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5wZXJmb3JtQWN0aW9uKHZpZXcudXVpZCwgeyBjb2RlOiBEZWZhdWx0VWlBY3Rpb25Db2RlX0NMT1NFLCBwYXJhbXM6IHt9IH0pO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoZGlhbG9nUmVmIGluc3RhbmNlb2YgRHluYW1pY0RpYWxvZ1JlZikge1xuICAgICAgICAgIGlmICghZGlhbG9nRGlzYWJsZUNsb3NlKSB7XG4gICAgICAgICAgICBkaWFsb2dSZWYub25EZXN0cm95LnBpcGUodGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kkKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5wZXJmb3JtQWN0aW9uKHZpZXcudXVpZCwgeyBjb2RlOiBEZWZhdWx0VWlBY3Rpb25Db2RlX0NMT1NFLCBwYXJhbXM6IHt9IH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5kaWFsb2dSZWZzLnB1c2goe1xuICAgICAgICAgIHV1aWQ6IHZpZXcudXVpZCxcbiAgICAgICAgICBkaWFsb2dSZWYsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodmlldy50eXBlID09PSBWaWV3VHlwZS5OT1JNQUwpIHtcbiAgICAgIGlmICghdmlld0hhbmRsZXIuY29tcG9uZW50KSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgQ29tcG9uZW50IGlzIHVuZGVmaW5lZCBpbiBTbWFydFZpZXdIYW5kbGVyTW9kZWwgd2l0aCBuYW1lOiAke3ZpZXcudmlld05hbWV9YFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgLy8gQ09NUEFUSUJJTElUWSBTSElNICgjMjg4NzAsIGludGVudGlvbmFsKTogc29tZSBjaGlsZCBzZXJ2aWNlcyAoU21hcnR0cmVlR2VuZXJpY1NlcnZpY2UsXG4gICAgICAvLyBTbWFydEZpbHRlckVkaXRvclNlcnZpY2UpIGFuZCBnZW5lcmljIGNvbXBvbmVudHMgKFNlYXJjaFBhZ2VDb21wb25lbnQsIEdlbmVyaWNQYWdlQ29tcG9uZW50KVxuICAgICAgLy8gc3RpbGwgcmVzb2x2ZSB0aGVpciB2aWV3IHV1aWQgdmlhIHRoZSBwYWdlTmFtZSAtPiBnZXRVdWlkT2ZQYWdlKHNlc3Npb25TdG9yYWdlKSBpbmRpcmVjdGlvblxuICAgICAgLy8gaW4gdGhlaXIgQ09OU1RSVUNUT1IsIHdoaWNoIHJ1bnMgaW5zaWRlIGNyZWF0ZUNvbXBvbmVudCgpIGJlbG93IOKAlCBiZWZvcmUgb3BlblZpZXcncyBub3JtYWxcbiAgICAgIC8vIGJvb2trZWVwaW5nLiBTbyB0aGUgbWFwcGluZyBtdXN0IGJlIHdyaXR0ZW4gaGVyZSwgYWhlYWQgb2YgY29tcG9uZW50IGNyZWF0aW9uLiBUaGUgcHJvcGVyXG4gICAgICAvLyBmaXggKGZlZWQgdGhvc2UgY29uc3VtZXJzIHRoZSBpbmplY3RlZCB1dWlkICsgZGVmZXIgdGhlaXIgaW5pdCkgaXMgZGVmZXJyZWQgY29uc3VtZXIgcGx1bWJpbmc7XG4gICAgICAvLyB1bnRpbCB0aGVuIHRoaXMgd3JpdGUga2VlcHMgdGhlIGluZGlyZWN0aW9uIGNvcnJlY3QgaW4gdGhlIHNsb3Qgd29ybGQuXG4gICAgICB0aGlzLnNldFV1aWRPZlBhZ2Uodmlldy52aWV3TmFtZSwgdmlldy51dWlkLCB2aWV3SGFuZGxlci5jb21wb25lbnROYW1lKTtcbiAgICAgIC8vIEEgTk9STUFMIHZpZXcgd2l0aCBubyBjb250YWluZXJVdWlkIGxhbmRzIGluIHRoZSBob3N0IHJvb3Qgc2xvdCAocmVzb2x2ZVNsb3QgbWFwc1xuICAgICAgLy8gaXQgdG8gUk9PVF9DT05UQUlORVJfVVVJRCk7IGlmIG5vIHNsb3QgaXMgcmVnaXN0ZXJlZCB5ZXQgaXQgcXVldWVzIGFuZCBkcmFpbnMgbGF0ZXIuXG4gICAgICBjb25zdCBpbnNlcnRlZCA9IHRoaXMuaW5zZXJ0Vmlld0ludG9TbG90KHZpZXcsIHZpZXdIYW5kbGVyLmNvbXBvbmVudCk7XG4gICAgICBpZiAoIWluc2VydGVkKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH0gZWxzZSBpZiAodmlldy50eXBlID09PSBWaWV3VHlwZS5FTUJFRERFRCkge1xuICAgICAgaWYgKCF2aWV3SGFuZGxlci5jb21wb25lbnQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBDb21wb25lbnQgaXMgdW5kZWZpbmVkIGluIFNtYXJ0Vmlld0hhbmRsZXJNb2RlbCB3aXRoIG5hbWU6ICR7dmlldy52aWV3TmFtZX1gXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICAvLyBXcml0ZSB0aGUgcGFnZS11dWlkIG1hcHBpbmcgYWhlYWQgb2YgY29tcG9uZW50IGNyZWF0aW9uIHNvIGNvbnN0cnVjdG9yLXRpbWVcbiAgICAgIC8vIGFuZCBuZXN0ZWQgZ2V0VXVpZE9mUGFnZSh2aWV3TmFtZSkgY29uc3VtZXJzIChmaWx0ZXIsIHRyZWUpIHJlc29sdmUuIFRoZVxuICAgICAgLy8gcGFnZS48dmlld05hbWU+IGtleSBpcyBkaXN0aW5jdCBwZXIgdmlldywgc28gaXQgbmV2ZXIgY29sbGlkZXMuIFRoZVxuICAgICAgLy8gY29tcG9uZW50Ljxjb21wb25lbnROYW1lPiByZXZlcnNlIGtleSBDQU4gYmUgb3ZlcndyaXR0ZW4gYnkgYW5vdGhlclxuICAgICAgLy8gY29uY3VycmVudCBkeW5hbWljIHZpZXcgb2YgdGhlIHNhbWUgZGVmYXVsdCBjb21wb25lbnQsIGJ1dCBpdCBpcyByZWFkIG9ubHlcbiAgICAgIC8vIHN5bmNocm9ub3VzbHkgaW4gdGhlIGNvbnN0cnVjdG9yIChyaWdodCBhZnRlciB0aGlzIHdyaXRlKSBhbmQgc2xvdCB2aWV3c1xuICAgICAgLy8gbG9hZCB2aWEgdGhlIGluamVjdGVkIF91dWlkIGFmdGVyd2FyZHMsIHNvIHRoZSBvdmVyd3JpdGUgbmV2ZXIgbWlzLXJlc29sdmVzXG4gICAgICAvLyBhdCBydW50aW1lLiAoIzI4ODcwKVxuICAgICAgdGhpcy5zZXRVdWlkT2ZQYWdlKHZpZXcudmlld05hbWUsIHZpZXcudXVpZCwgdmlld0hhbmRsZXIuY29tcG9uZW50TmFtZSk7XG4gICAgICBjb25zdCBpbnNlcnRlZCA9IHRoaXMuaW5zZXJ0Vmlld0ludG9TbG90KHZpZXcsIHZpZXdIYW5kbGVyLmNvbXBvbmVudCk7XG4gICAgICBpZiAoIWluc2VydGVkKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSB0eXBlIG9mIHRoZSB2aWV3IGFuZCBpdHMgdmlld0hhbmRsZXIgaXMgbm90IHRoZSBzYW1lIScpO1xuICAgIH1cblxuICAgIHZpZXcuc3RhdGUgPSBWaWV3U3RhdGUuT1BFTkVEO1xuXG4gICAgdGhpcy5vcGVuZWRWaWV3VXVpZHMucHVzaCh2aWV3LnV1aWQpO1xuICAgIHRoaXMub3BlbmVkVmlld0RhdGEucHVzaCh2aWV3KTtcblxuICAgIGlmICh2aWV3LnR5cGUgIT09IFZpZXdUeXBlLkVNQkVEREVEKSB7XG4gICAgICB0aGlzLnNldFV1aWRPZlBhZ2Uodmlldy52aWV3TmFtZSwgdmlldy51dWlkLCB2aWV3SGFuZGxlci5jb21wb25lbnROYW1lKTtcbiAgICAgIHRoaXMudXVpZE9mUGFnZUhhc0JlZW5DaGFuZ2VkLm5leHQodmlldy52aWV3TmFtZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIHN0YXRlOiBWaWV3U3RhdGUuT1BFTkVELFxuICAgICAgdXVpZDogdmlldy51dWlkLFxuICAgIH07XG4gIH1cblxuICBwdWJsaWMgY2xvc2VWaWV3KHZpZXc6IFZpZXdEYXRhKTogVmlld1N0YXRlVXBkYXRlW10ge1xuICAgIGNvbnN0IHZpZXdIYW5kbGVyID0gcmVzb2x2ZVZpZXdIYW5kbGVyKHRoaXMudmlld0hhbmRsZXJzLCB0aGlzLmRlZmF1bHRDb21wb25lbnRzLCB2aWV3KTtcblxuICAgIGlmICghdmlld0hhbmRsZXIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYFNtYXJ0Vmlld0hhbmRsZXJNb2RlbCB3YXMgbm90IGZvdW5kIGJ5IHZpZXcgbmFtZTogJHt2aWV3LnZpZXdOYW1lfSAoY29tcG9uZW50TmFtZTogJHt2aWV3LmNvbXBvbmVudE5hbWV9KWBcbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3QgdXBkYXRlczogVmlld1N0YXRlVXBkYXRlW10gPSBbXTtcblxuICAgIGlmICh2aWV3LnR5cGUgPT09IFZpZXdUeXBlLkRJQUxPRykge1xuICAgICAgbGV0IGRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nUmVmcy5maW5kKFxuICAgICAgICAoZGlhbG9nUmVmOiBTbWFydFZpZXdEaWFsb2dSZWYpID0+IGRpYWxvZ1JlZi51dWlkID09PSB2aWV3LnV1aWRcbiAgICAgICk7XG4gICAgICBpZiAoZGlhbG9nUmVmKSB7XG4gICAgICAgIGRpYWxvZ1JlZi5kaWFsb2dSZWYuY2xvc2UoKTtcbiAgICAgICAgbGV0IGluZGV4ID0gdGhpcy5kaWFsb2dSZWZzLmluZGV4T2YoZGlhbG9nUmVmKTtcbiAgICAgICAgdGhpcy5kaWFsb2dSZWZzLnNwbGljZShpbmRleCwgMSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBjb25zb2xlLmxvZygnRGlhbG9nUmVmIGlzIG5vdCBmb3VuZCBieSB1dWlkLicpO1xuICAgICAgfVxuICAgICAgdXBkYXRlcy5wdXNoKC4uLnRoaXMuY2xlYW51cEVtYmVkZGVkQ2hpbGRyZW4odmlldy51dWlkKSk7XG4gICAgfSBlbHNlIGlmICh2aWV3LnR5cGUgPT09IFZpZXdUeXBlLk5PUk1BTCkge1xuICAgICAgLy8gRGVzdHJveSBuZXN0ZWQgY2hpbGRyZW4gZmlyc3QsIHRoZW4gdGhlIHZpZXcncyBvd24gc2xvdCBjb21wb25lbnQuXG4gICAgICAvLyBkZXN0cm95Vmlld1JlZiBpcyBhIG5vLW9wIGZvciB0aGUgbGVnYWN5IHJvdXRlLXJlbmRlcmVkIChyb290bGVzcykgY2FzZS5cbiAgICAgIHVwZGF0ZXMucHVzaCguLi50aGlzLmNsZWFudXBFbWJlZGRlZENoaWxkcmVuKHZpZXcudXVpZCkpO1xuICAgICAgdGhpcy5kZXN0cm95Vmlld1JlZih2aWV3LnV1aWQpO1xuICAgIH0gZWxzZSBpZiAodmlldy50eXBlID09PSBWaWV3VHlwZS5FTUJFRERFRCkge1xuICAgICAgdGhpcy5kZXN0cm95Vmlld1JlZih2aWV3LnV1aWQpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSB0eXBlIG9mIHRoZSB2aWV3IGFuZCBpdHMgdmlld0hhbmRsZXIgaXMgbm90IHRoZSBzYW1lIScpO1xuICAgIH1cblxuICAgIHZpZXcuc3RhdGUgPSBWaWV3U3RhdGUuQ0xPU0VEO1xuXG4gICAgY29uc3QgaW5kZXggPSB0aGlzLm9wZW5lZFZpZXdVdWlkcy5pbmRleE9mKHZpZXcudXVpZCk7XG4gICAgaWYgKGluZGV4ID49IDApIHtcbiAgICAgIHRoaXMub3BlbmVkVmlld1V1aWRzLnNwbGljZShpbmRleCwgMSk7XG4gICAgICB0aGlzLm9wZW5lZFZpZXdEYXRhLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAvLyBDbGVhciBmb3IgZXZlcnkgdHlwZTogb3BlblZpZXcgbm93IHdyaXRlcyB0aGUgcGFnZS11dWlkIG1hcHBpbmcgZm9yXG4gICAgICAvLyBFTUJFRERFRCB2aWV3cyB0b28gKCMyODg3MCksIHNvIHRoZSBjbGVhciBtdXN0IGJlIHN5bW1ldHJpYyB0byBhdm9pZCBhXG4gICAgICAvLyBzdGFsZSBzZXNzaW9uU3RvcmFnZSBlbnRyeS4gY2xlYXJVdWlkT2ZQYWdlIGlzIGEgbm8tb3AgZm9yIGtleXMgbmV2ZXJcbiAgICAgIC8vIHdyaXR0ZW4sIHNvIHRoaXMgc3RheXMgc2FmZSBmb3IgdGhlIGxlZ2FjeSByb290bGVzcyBjYXNlLlxuICAgICAgdGhpcy5jbGVhclV1aWRPZlBhZ2Uodmlldy52aWV3TmFtZSwgdmlld0hhbmRsZXIuY29tcG9uZW50TmFtZSk7XG4gICAgfVxuXG4gICAgdXBkYXRlcy5wdXNoKHtcbiAgICAgIHN0YXRlOiBWaWV3U3RhdGUuQ0xPU0VELFxuICAgICAgdXVpZDogdmlldy51dWlkLFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHVwZGF0ZXM7XG4gIH1cblxuICBwcml2YXRlIGNsZWFudXBFbWJlZGRlZENoaWxkcmVuKGNvbnRhaW5lclV1aWQ6IHN0cmluZyk6IFZpZXdTdGF0ZVVwZGF0ZVtdIHtcbiAgICBjb25zdCB1cGRhdGVzOiBWaWV3U3RhdGVVcGRhdGVbXSA9IFtdO1xuXG4gICAgY29uc3QgY2hpbGRyZW4gPSB0aGlzLmVtYmVkZGVkVmlld1JlZnMuZmlsdGVyKChyZWYpID0+IHJlZi5jb250YWluZXJVdWlkID09PSBjb250YWluZXJVdWlkKTtcbiAgICBmb3IgKGNvbnN0IGNoaWxkIG9mIGNoaWxkcmVuKSB7XG4gICAgICBjaGlsZC5jb21wb25lbnRSZWYuZGVzdHJveSgpO1xuICAgICAgdXBkYXRlcy5wdXNoKHsgc3RhdGU6IFZpZXdTdGF0ZS5DTE9TRUQsIHV1aWQ6IGNoaWxkLnV1aWQgfSk7XG4gICAgfVxuICAgIHRoaXMuZW1iZWRkZWRWaWV3UmVmcyA9IHRoaXMuZW1iZWRkZWRWaWV3UmVmcy5maWx0ZXIoXG4gICAgICAocmVmKSA9PiByZWYuY29udGFpbmVyVXVpZCAhPT0gY29udGFpbmVyVXVpZFxuICAgICk7XG5cbiAgICB0aGlzLnBlbmRpbmdFbWJlZGRlZFZpZXdzID0gdGhpcy5wZW5kaW5nRW1iZWRkZWRWaWV3cy5maWx0ZXIoXG4gICAgICAodikgPT4gdi5jb250YWluZXJVdWlkICE9PSBjb250YWluZXJVdWlkXG4gICAgKTtcblxuICAgIHRoaXMuZW1iZWRkZWRDb250YWluZXJzLmRlbGV0ZShjb250YWluZXJVdWlkKTtcblxuICAgIHJldHVybiB1cGRhdGVzO1xuICB9XG5cbiAgLyoqIERlc3Ryb3kgdGhlIGNvbXBvbmVudCBmb3IgYSB2aWV3IGxpdmluZyBpbiBhIHNsb3QsIGlmIHByZXNlbnQgKG5vLW9wIGZvciByb3V0ZS1yZW5kZXJlZCB2aWV3cykuICovXG4gIHByaXZhdGUgZGVzdHJveVZpZXdSZWYodXVpZDogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgcmVmSW5kZXggPSB0aGlzLmVtYmVkZGVkVmlld1JlZnMuZmluZEluZGV4KChyZWYpID0+IHJlZi51dWlkID09PSB1dWlkKTtcbiAgICBpZiAocmVmSW5kZXggPj0gMCkge1xuICAgICAgdGhpcy5lbWJlZGRlZFZpZXdSZWZzW3JlZkluZGV4XS5jb21wb25lbnRSZWYuZGVzdHJveSgpO1xuICAgICAgdGhpcy5lbWJlZGRlZFZpZXdSZWZzLnNwbGljZShyZWZJbmRleCwgMSk7XG4gICAgfVxuICAgIHRoaXMucGVuZGluZ0VtYmVkZGVkVmlld3MgPSB0aGlzLnBlbmRpbmdFbWJlZGRlZFZpZXdzLmZpbHRlcigodikgPT4gdi51dWlkICE9PSB1dWlkKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgc2VuZFZpZXdDb250ZXh0VXBkYXRlcyh1cGRhdGVzVG9TZW5kOiAoVmlld1N0YXRlVXBkYXRlIHwgdW5kZWZpbmVkKVtdKSB7XG4gICAgY29uc3QgdXBkYXRlczogVmlld1N0YXRlVXBkYXRlW10gPSBbXTtcbiAgICB1cGRhdGVzVG9TZW5kLmZvckVhY2goKHVwZGF0ZSkgPT4ge1xuICAgICAgaWYgKHVwZGF0ZSAhPT0gdW5kZWZpbmVkICYmIHVwZGF0ZSAhPT0gbnVsbCkgdXBkYXRlcy5wdXNoKHVwZGF0ZSk7XG4gICAgfSk7XG4gICAgaWYgKHVwZGF0ZXMubGVuZ3RoID4gMCkge1xuICAgICAgYXdhaXQgdGhpcy51cGRhdGVWaWV3Q29udGV4dCh7XG4gICAgICAgIHVwZGF0ZXMsXG4gICAgICAgIHV1aWQ6IHRoaXMudmlld0NvbnRleHQ/LnV1aWQsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cbiAgcHVibGljIGFzeW5jIHJlc3RvcmVWaWV3cyh1dWlkOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB1cGRhdGVzOiBWaWV3U3RhdGVVcGRhdGVbXSA9IFtdO1xuICAgIGlmICghdGhpcy52aWV3Q29udGV4dCkge1xuICAgICAgYXdhaXQgdGhpcy5nZXRWaWV3Q29udGV4dCh1dWlkKTtcbiAgICB9XG5cbiAgICB0aGlzLnZpZXdDb250ZXh0IS52aWV3cy5maWx0ZXIoXG4gICAgICAodmlldykgPT4gdmlldy5zdGF0ZSA9PT0gVmlld1N0YXRlLk9QRU5FRCB8fCB2aWV3LnN0YXRlID09PSBWaWV3U3RhdGUuVE9fT1BFTlxuICAgICkubWFwKCh2aWV3OiBWaWV3RGF0YSkgPT4ge1xuICAgICAgY29uc3QgdXBkYXRlID0gdGhpcy5vcGVuVmlldyh2aWV3KTtcbiAgICAgIGlmICh1cGRhdGUpIHtcbiAgICAgICAgdXBkYXRlcy5wdXNoKHVwZGF0ZSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgYXdhaXQgdGhpcy5zZW5kVmlld0NvbnRleHRVcGRhdGVzKHVwZGF0ZXMpO1xuICB9XG5cbiAgcHJpdmF0ZSByZXVzZUVuYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5pbmplY3QuZ2V0KFJFVVNFX1JPVVRFUl9TTE9UX0NPTVBPTkVOVCk7XG4gICAgICByZXR1cm4gdmFsdWUgIT09IGZhbHNlOyAvLyBkZWZhdWx0IE9OIHdoZW4gdW5zZXQvbnVsbFxuICAgIH0gY2F0Y2gge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBleGVjdXRlUmV1c2Uob2xkVmlldzogVmlld0RhdGEsIG5ld1ZpZXc6IFZpZXdEYXRhKTogVmlld1N0YXRlVXBkYXRlW10ge1xuICAgIGNvbnN0IHJlZiA9IHRoaXMuZW1iZWRkZWRWaWV3UmVmcy5maW5kKChyKSA9PiByLnV1aWQgPT09IG9sZFZpZXcudXVpZCk7XG4gICAgaWYgKCFyZWYpIHtcbiAgICAgIC8vIE5vIGxpdmUgY29tcG9uZW50IHRvIHJldXNlIChlLmcuIHdhcyByb3V0ZS1yZW5kZXJlZCkg4oCUIGZhbGwgYmFjayB0byBjbG9zZSArIG9wZW4uXG4gICAgICBjb25zdCB1cGRhdGVzID0gWy4uLnRoaXMuY2xvc2VWaWV3KG9sZFZpZXcpXTtcbiAgICAgIGNvbnN0IG9wZW5lZCA9IHRoaXMub3BlblZpZXcobmV3Vmlldyk7XG4gICAgICBpZiAob3BlbmVkKSB1cGRhdGVzLnB1c2gob3BlbmVkKTtcbiAgICAgIHJldHVybiB1cGRhdGVzO1xuICAgIH1cbiAgICAvLyBUaGUgcmV1c2VkIHBhcmVudCBpcyBsb2dpY2FsbHkgYSBmcmVzaCBwYWdlIChuZXcgdXVpZCk7IGl0cyBwcmV2aW91cyBlbWJlZGRlZFxuICAgIC8vIGNoaWxkcmVuIGRvIG5vdCBjYXJyeSBvdmVyICh0aGUgYmFja2VuZCBsZWF2ZXMgdGhlbSBrZXllZCB1bmRlciB0aGUgb2xkIHBhcmVudFxuICAgIC8vIHV1aWQpLiBUZWFyIHRoZW0gZG93biBoZXJlIGFuZCByZXBvcnQgdGhlbSBDTE9TRUQuXG4gICAgY29uc3QgY2hpbGRVcGRhdGVzID0gdGhpcy5jbGVhbnVwRW1iZWRkZWRDaGlsZHJlbihvbGRWaWV3LnV1aWQpO1xuXG4gICAgcmVmLmNvbXBvbmVudFJlZi5pbnN0YW5jZS51dWlkID0gbmV3Vmlldy51dWlkOyAvLyBzZXR0ZXIgcnVucyB1bmZvbGxvdyhvbGQpL2ZvbGxvdyhuZXcpXG4gICAgcmVmLnV1aWQgPSBuZXdWaWV3LnV1aWQ7XG5cbiAgICBjb25zdCBvbGRJZHggPSB0aGlzLm9wZW5lZFZpZXdVdWlkcy5pbmRleE9mKG9sZFZpZXcudXVpZCk7XG4gICAgaWYgKG9sZElkeCA+PSAwKSB7XG4gICAgICB0aGlzLm9wZW5lZFZpZXdVdWlkcy5zcGxpY2Uob2xkSWR4LCAxKTtcbiAgICAgIHRoaXMub3BlbmVkVmlld0RhdGEuc3BsaWNlKG9sZElkeCwgMSk7XG4gICAgfVxuICAgIHRoaXMub3BlbmVkVmlld1V1aWRzLnB1c2gobmV3Vmlldy51dWlkKTtcbiAgICB0aGlzLm9wZW5lZFZpZXdEYXRhLnB1c2gobmV3Vmlldyk7XG5cbiAgICByZWYuY29tcG9uZW50UmVmLmluc3RhbmNlLnJ1bigpO1xuXG4gICAgb2xkVmlldy5zdGF0ZSA9IFZpZXdTdGF0ZS5DTE9TRUQ7XG4gICAgbmV3Vmlldy5zdGF0ZSA9IFZpZXdTdGF0ZS5PUEVORUQ7XG5cbiAgICAvLyBNaXJyb3IgdGhlIG5vcm1hbCBvcGVuVmlldyB0YWlsIHNvIGdldFV1aWRPZlBhZ2UgY29uc3VtZXJzIChlLmcuIHRyZWVzKSByZXNvbHZlIHRoZSBuZXcgdXVpZC5cbiAgICBjb25zdCB2aWV3SGFuZGxlciA9IHJlc29sdmVWaWV3SGFuZGxlcih0aGlzLnZpZXdIYW5kbGVycywgdGhpcy5kZWZhdWx0Q29tcG9uZW50cywgbmV3Vmlldyk7XG4gICAgdGhpcy5zZXRVdWlkT2ZQYWdlKG5ld1ZpZXcudmlld05hbWUsIG5ld1ZpZXcudXVpZCwgdmlld0hhbmRsZXI/LmNvbXBvbmVudE5hbWUpO1xuICAgIHRoaXMudXVpZE9mUGFnZUhhc0JlZW5DaGFuZ2VkLm5leHQobmV3Vmlldy52aWV3TmFtZSk7XG5cbiAgICByZXR1cm4gW1xuICAgICAgLi4uY2hpbGRVcGRhdGVzLFxuICAgICAgeyBzdGF0ZTogVmlld1N0YXRlLkNMT1NFRCwgdXVpZDogb2xkVmlldy51dWlkIH0sXG4gICAgICB7IHN0YXRlOiBWaWV3U3RhdGUuT1BFTkVELCB1dWlkOiBuZXdWaWV3LnV1aWQgfSxcbiAgICBdO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIHN5bmNWaWV3KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHVwZGF0ZXM6IChWaWV3U3RhdGVVcGRhdGUgfCB1bmRlZmluZWQpW10gPSBbXTtcbiAgICBjb25zdCBvcHMgPSBidWlsZFZpZXdPcHModGhpcy52aWV3Q29udGV4dD8udmlld3MgPz8gW10sIHRoaXMucmV1c2VFbmFibGVkKCkpO1xuICAgIGZvciAoY29uc3Qgb3Agb2Ygb3BzKSB7XG4gICAgICBpZiAob3Aua2luZCA9PT0gJ29wZW4nKSB7XG4gICAgICAgIHVwZGF0ZXMucHVzaCh0aGlzLm9wZW5WaWV3KG9wLnZpZXcpKTtcbiAgICAgIH0gZWxzZSBpZiAob3Aua2luZCA9PT0gJ2Nsb3NlJykge1xuICAgICAgICB1cGRhdGVzLnB1c2goLi4udGhpcy5jbG9zZVZpZXcob3AudmlldykpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdXBkYXRlcy5wdXNoKC4uLnRoaXMuZXhlY3V0ZVJldXNlKG9wLm9sZFZpZXcsIG9wLm5ld1ZpZXcpKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCB2aWV3RGF0YVRvQ2xvc2UgPSB0aGlzLm9wZW5lZFZpZXdEYXRhLmZpbHRlcihcbiAgICAgICh2aWV3RGF0YTogVmlld0RhdGEpID0+XG4gICAgICAgICF0aGlzLnZpZXdDb250ZXh0Py52aWV3c1xuICAgICAgICAgIC5mbGF0TWFwKCh2aWV3RGF0YTogVmlld0RhdGEpID0+IHZpZXdEYXRhLnV1aWQpXG4gICAgICAgICAgLmluY2x1ZGVzKHZpZXdEYXRhLnV1aWQpXG4gICAgKTtcbiAgICBpZiAodmlld0RhdGFUb0Nsb3NlPy5sZW5ndGgpIHtcbiAgICAgIHZpZXdEYXRhVG9DbG9zZS5tYXAoKHZpZXdEYXRhOiBWaWV3RGF0YSkgPT4ge1xuICAgICAgICB1cGRhdGVzLnB1c2goLi4udGhpcy5jbG9zZVZpZXcodmlld0RhdGEpKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHRoaXMudmlld0NvbnRleHQ/LmxpbmtzPy5tYXAoKGRhdGE6IExpbmspID0+IHtcbiAgICAgIGNvbnN0IGxpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7XG4gICAgICBsZXQgdGFyZ2V0ID0gJ19ibGFuayc7IC8vIGRlZmF1bHRcbiAgICAgIHN3aXRjaCAoZGF0YS50YXJnZXQgPz8gTGlua1RhcmdldEVudW0uQkxBTkspIHtcbiAgICAgICAgY2FzZSAnU0VMRic6XG4gICAgICAgICAgdGFyZ2V0ID0gJ19zZWxmJztcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnQkxBTksnOlxuICAgICAgICAgIHRhcmdldCA9ICdfYmxhbmsnO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdQQVJFTlQnOlxuICAgICAgICAgIHRhcmdldCA9ICdfcGFyZW50JztcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnVE9QJzpcbiAgICAgICAgICB0YXJnZXQgPSAnX3RvcCc7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBsaW5rLnNldEF0dHJpYnV0ZSgndGFyZ2V0JywgdGFyZ2V0KTtcbiAgICAgIGxpbmsuc2V0QXR0cmlidXRlKCdocmVmJywgZGF0YS51cmwpO1xuICAgICAgaWYgKGRhdGEuZG93bmxvYWQpIHtcbiAgICAgICAgbGluay5zZXRBdHRyaWJ1dGUoJ2Rvd25sb2FkJywgZGF0YS5maWxlbmFtZSA/PyAnJyk7XG4gICAgICB9XG4gICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGxpbmspO1xuICAgICAgbGluay5jbGljaygpO1xuICAgICAgbGluay5yZW1vdmUoKTtcbiAgICB9KTtcblxuICAgIHRoaXMuc3RhcnREb3dubG9hZHNGaWxlcyh0aGlzLnZpZXdDb250ZXh0Py5kb3dubG9hZHMgfHwgW10pO1xuXG4gICAgY29uc3QgY2xpcGJvYXJkVGV4dCA9IHRoaXMudmlld0NvbnRleHQ/LmNsaXBib2FyZERhdGFcbiAgICAgID8ubWFwKChjZDogQ2xpcGJvYXJkRGF0YSkgPT4gY2QudGV4dCB8fCAnJylcbiAgICAgIC5qb2luKCcnKTtcbiAgICBpZiAoY2xpcGJvYXJkVGV4dCkge1xuICAgICAgY29uc3QgY2xpcGJvYXJkID0gbmF2aWdhdG9yLmNsaXBib2FyZDtcbiAgICAgIC8vIGF2YWlsYWJsZSBvbmx5IGluIHNlY3VyZSBjb250ZXh0cy5cbiAgICAgIGlmIChjbGlwYm9hcmQpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjbGlwYm9hcmRcbiAgICAgICAgICAgIC53cml0ZVRleHQoY2xpcGJvYXJkVGV4dClcbiAgICAgICAgICAgIC5jYXRjaCgoZSkgPT4gY29uc29sZS5lcnJvcignRmFpbGVkIHRvIGNvcHkgdGV4dCB0byBjbGlwYm9hcmQnLCBlKSk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBhY2Nlc3NpbmcgY2xpcGJvYXJkJywgZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgYXdhaXQgdGhpcy5zZW5kVmlld0NvbnRleHRVcGRhdGVzKHVwZGF0ZXMpO1xuICAgIHRoaXMudmlld0NvbnRleHRIYXNCZWVuU3luY2VkLm5leHQoKTtcbiAgfVxuXG4gIGFzeW5jIHN0YXJ0RG93bmxvYWRzRmlsZXMoZG93bmxvYWRzOiBEb3dubG9hZGVkRmlsZVtdKSB7XG4gICAgZm9yIChjb25zdCBmaWxlIG9mIGRvd25sb2Fkcykge1xuICAgICAgdHJ5IHtcbiAgICAgICAgbGV0IGJsb2IgPSBhd2FpdCB0aGlzLmRvd25sb2FkUmVzb3VyY2UoZmlsZS51dWlkISwgZmlsZS5pZGVudGlmaWVyISk7XG4gICAgICAgIGxldCB1cmwgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKGJsb2IpO1xuXG4gICAgICAgIGNvbnN0IGxpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7XG4gICAgICAgIGxpbmsuc2V0QXR0cmlidXRlKCd0YXJnZXQnLCAnX2JsYW5rJyk7XG4gICAgICAgIGxpbmsuc2V0QXR0cmlidXRlKCdocmVmJywgdXJsKTtcbiAgICAgICAgbGluay5zZXRBdHRyaWJ1dGUoJ2Rvd25sb2FkJywgZmlsZS5maWxlbmFtZSEpO1xuICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGxpbmspO1xuICAgICAgICBsaW5rLmNsaWNrKCk7XG4gICAgICAgIGxpbmsucmVtb3ZlKCk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGRvd25sb2FkaW5nIGZpbGUnLCBlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNldFZpZXdDb250ZXh0VXVpZCh1dWlkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBzZXNzaW9uU3RvcmFnZS5zZXRJdGVtKHRoaXMudmlld0NvbnRleHRVdWlkTmFtZSwgdXVpZCk7XG4gICAgdGhpcy5zZXNzaW9uLmFkZEhlYWRlclBhcmFtKHtcbiAgICAgIGhlYWRlck5hbWU6IHRoaXMudmlld0NvbnRleHRVdWlkSGVhZGVyTmFtZSxcbiAgICAgIHZhbHVlOiB1dWlkLFxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGdldFZpZXdDb250ZXh0VXVpZCgpOiBzdHJpbmcge1xuICAgIGxldCB2aWV3Q29udGV4dFV1aWQgPSBzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKHRoaXMudmlld0NvbnRleHRVdWlkTmFtZSk7XG4gICAgaWYgKCF2aWV3Q29udGV4dFV1aWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignVmlldyBjb250ZXh0IGlzIG5vdCBpbml0aWFsaXplZCEnKTtcbiAgICB9XG4gICAgcmV0dXJuIHZpZXdDb250ZXh0VXVpZDtcbiAgfVxuXG4gIHB1YmxpYyBoYXNWaWV3Q29udGV4dFV1aWQoKTogYm9vbGVhbiB7XG4gICAgbGV0IHZpZXdDb250ZXh0VXVpZCA9IHNlc3Npb25TdG9yYWdlLmdldEl0ZW0odGhpcy52aWV3Q29udGV4dFV1aWROYW1lKTtcbiAgICByZXR1cm4gdmlld0NvbnRleHRVdWlkICE9PSBudWxsICYmIHZpZXdDb250ZXh0VXVpZCAhPT0gdW5kZWZpbmVkO1xuICB9XG5cbiAgcHVibGljIHNldFV1aWRPZlBhZ2UocGFnZU5hbWU6IHN0cmluZywgdXVpZDogc3RyaW5nLCBjb21wb25lbnROYW1lPzogc3RyaW5nKTogdm9pZCB7XG4gICAgc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbSh0aGlzLnBhZ2VOYW1lUHJlZml4ICsgcGFnZU5hbWUsIHV1aWQpO1xuICAgIGlmIChjb21wb25lbnROYW1lKSB7XG4gICAgICBzZXNzaW9uU3RvcmFnZS5zZXRJdGVtKHRoaXMuY29tcG9uZW50TmFtZVByZWZpeCArIGNvbXBvbmVudE5hbWUsIHBhZ2VOYW1lKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgY2xlYXJVdWlkT2ZQYWdlKHBhZ2VOYW1lOiBzdHJpbmcsIGNvbXBvbmVudE5hbWU/OiBzdHJpbmcpOiB2b2lkIHtcbiAgICBzZXNzaW9uU3RvcmFnZS5yZW1vdmVJdGVtKHRoaXMucGFnZU5hbWVQcmVmaXggKyBwYWdlTmFtZSk7XG4gICAgaWYgKGNvbXBvbmVudE5hbWUpIHtcbiAgICAgIHNlc3Npb25TdG9yYWdlLnJlbW92ZUl0ZW0odGhpcy5jb21wb25lbnROYW1lUHJlZml4ICsgY29tcG9uZW50TmFtZSk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGdldFV1aWRPZlBhZ2UocGFnZU5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgbGV0IHV1aWQgPSBzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKHRoaXMucGFnZU5hbWVQcmVmaXggKyBwYWdlTmFtZSk7XG4gICAgaWYgKCF1dWlkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFRoZSB1dWlkIG9mICR7cGFnZU5hbWV9IGlzIG5vdCBhdmFpbGFibGUuYCk7XG4gICAgfVxuICAgIHJldHVybiB1dWlkO1xuICB9XG5cbiAgcHVibGljIGdldFBhZ2VOYW1lT2ZDb21wb25lbnQoY29tcG9uZW50TmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBsZXQgcGFnZU5hbWUgPSBzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKHRoaXMuY29tcG9uZW50TmFtZVByZWZpeCArIGNvbXBvbmVudE5hbWUpO1xuICAgIGlmICghcGFnZU5hbWUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVGhlIHBhZ2VOYW1lIG9mICR7Y29tcG9uZW50TmFtZX0gaXMgbm90IGF2YWlsYWJsZS5gKTtcbiAgICB9XG4gICAgcmV0dXJuIHBhZ2VOYW1lO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIG1lc3NhZ2UobWVzc2FnZURhdGE6IE1lc3NhZ2VEYXRhLCBtZXNzYWdlUmVzdWx0OiBNZXNzYWdlUmVzdWx0KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuaGFuZGxlUGVyZm9ybUFjdGlvblJlc3BvbnNlKFxuICAgICAgYXdhaXQgdGhpcy52aWV3XG4gICAgICAgIC5tZXNzYWdlKG1lc3NhZ2VEYXRhLnZpZXdVdWlkID8/ICcnLCBtZXNzYWdlRGF0YS51dWlkLCBtZXNzYWdlUmVzdWx0KVxuICAgICAgICAudG9Qcm9taXNlKClcbiAgICApO1xuICAgIC8vIGluIGZ1dHVyZSB1c2UgdGhpcy5hcGlRdWV1ZVNlcnZpY2UuYWRkVG9RdWV1ZVxuICB9XG5cbiAgcHVibGljIGFzeW5jIGdldFNtYXJ0Vmlld0NvbnRleHRBcGlFcnJvckJ5Q29kZShjb2RlOiBzdHJpbmcpOiBQcm9taXNlPFNtYXJ0Vmlld0NvbnRleHRBcGlFcnJvcj4ge1xuICAgIGxldCBidXR0b25MYWJlbDtcbiAgICBsZXQgZGlhbG9nVGl0bGU7XG4gICAgbGV0IG1lc3NhZ2U7XG4gICAgaWYgKHRoaXMudHJhbnNsYXRlU2VydmljZSkge1xuICAgICAgYnV0dG9uTGFiZWwgPSBhd2FpdCB0aGlzLnRyYW5zbGF0ZVNlcnZpY2VcbiAgICAgICAgLmdldChTbWFydFZpZXdDb250ZXh0RXJyb3JEaWFsb2dCdXR0b25MYWJlbClcbiAgICAgICAgLnRvUHJvbWlzZSgpO1xuICAgICAgZGlhbG9nVGl0bGUgPSBhd2FpdCB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuZ2V0KFNtYXJ0Vmlld0NvbnRleHRFcnJvckRpYWxvZ1RpdGxlKS50b1Byb21pc2UoKTtcbiAgICAgIG1lc3NhZ2UgPSBhd2FpdCB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuZ2V0KFNtYXJ0Vmlld0NvbnRleHRFcnJvckRpYWxvZ01lc3NhZ2UpLnRvUHJvbWlzZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICBidXR0b25MYWJlbCA9ICdPayc7XG4gICAgICBkaWFsb2dUaXRsZSA9ICdIaWJhJztcbiAgICAgIG1lc3NhZ2UgPSAnQW4gZXJyb3IgaGFzIG9jY3VyZWQuJztcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuc21hcnRWaWV3Q29udGV4dEFwaUVycm9ycykge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29kZSxcbiAgICAgICAgbWVzc2FnZSxcbiAgICAgICAgYnV0dG9uTGFiZWwsXG4gICAgICAgIGRpYWxvZ1RpdGxlLFxuICAgICAgfTtcbiAgICB9XG4gICAgbGV0IGFwaUVycm9yc1dpdGhDb2RlID0gdGhpcy5zbWFydFZpZXdDb250ZXh0QXBpRXJyb3JzLnZpZXdDb250ZXh0QXBpRXJyb3JzLmZpbHRlcihcbiAgICAgIChhcGlFcnJvcjogU21hcnRWaWV3Q29udGV4dEFwaUVycm9yKSA9PiB7XG4gICAgICAgIHJldHVybiBhcGlFcnJvci5jb2RlID09PSBjb2RlO1xuICAgICAgfVxuICAgICk7XG4gICAgaWYgKCFhcGlFcnJvcnNXaXRoQ29kZSB8fCAoYXBpRXJyb3JzV2l0aENvZGUgJiYgIWFwaUVycm9yc1dpdGhDb2RlLmxlbmd0aCkpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoYFNtYXJ0Vmlld0NvbnRleHRBcGlFcnJvciB3aXRoIGNvZGUgJHtjb2RlfSBjb3VsZCBub3QgYmUgZm91bmQuYCk7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvZGUsXG4gICAgICAgIG1lc3NhZ2UsXG4gICAgICAgIGJ1dHRvbkxhYmVsLFxuICAgICAgICBkaWFsb2dUaXRsZSxcbiAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiBhcGlFcnJvcnNXaXRoQ29kZVswXTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXRWaWV3Q29uc3RyYWludCh1dWlkOiBzdHJpbmcpOiBQcm9taXNlPFZpZXdDb25zdHJhaW50PiB7XG4gICAgbGV0IHZpZXdDb25zdHJhaW50UmVzcG9uc2UgPSBhd2FpdCB0aGlzLnZpZXcuZ2V0Vmlld0NvbnN0cmFpbnQodXVpZCkudG9Qcm9taXNlKCk7XG4gICAgaWYgKCF2aWV3Q29uc3RyYWludFJlc3BvbnNlKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDb3VsZCBub3QgZ2V0IFZpZXdDb25zdHJhaW50IHdpdGggdGhlIGdpdmVuIHV1aWQuJyk7XG4gICAgcmV0dXJuIHZpZXdDb25zdHJhaW50UmVzcG9uc2U7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgc2hvd1B1Ymxpc2hlZFZpZXcoY2hhbm5lbDogc3RyaW5nLCB1dWlkOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLmlzT3BlbmluZ1NtYXJ0TGluayA9IHRydWU7XG5cbiAgICBhd2FpdCB0aGlzLnNlc3Npb24uaW5pdGlhbGl6ZSgpO1xuICAgIC8vIFRPRE8gaW5pdCB2aWV3IGNvbnRleHQgYXV0b21hdGljYWxseVxuICAgIC8vIGF3YWl0IHRoaXMuaW5pdGlhbGl6ZSgpO1xuICAgIGF3YWl0IHRoaXMuaW5pdFZpZXdDb250ZXh0KCk7XG5cbiAgICB0aGlzLm9wZW5TbWFydExpbmsubmV4dChbY2hhbm5lbCwgdXVpZF0pO1xuICAgIGF3YWl0IHRoaXMub3BlblNtYXJ0TGluay50b1Byb21pc2UoKTtcblxuICAgIGF3YWl0IHRoaXMudmlldy5zaG93UHVibGlzaGVkVmlldyhjaGFubmVsLCB1dWlkKS50b1Byb21pc2UoKTtcbiAgICBhd2FpdCB0aGlzLmdldEFuZFN5bmNWaWV3Q29udGV4dCgpO1xuICAgIHRoaXMuaXNPcGVuaW5nU21hcnRMaW5rID0gZmFsc2U7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZG93bmxvYWRSZXNvdXJjZSh1dWlkOiBzdHJpbmcsIGl0ZW06IHN0cmluZyk6IFByb21pc2U8YW55PiB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMudmlldy5kb3dubG9hZEl0ZW0odXVpZCwgaXRlbSkudG9Qcm9taXNlKCk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgcGVyZm9ybUFjdGlvbih1dWlkOiBzdHJpbmcsIHVpQWN0aW9uUmVxdWVzdDogVWlBY3Rpb25SZXF1ZXN0KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuX3BlcmZvcm1BY3Rpb24oe1xuICAgICAgdXVpZCxcbiAgICAgIHVpQWN0aW9uUmVxdWVzdCxcbiAgICB9KTtcbiAgICAvLyBjb25zdCBpc0NvbXBsZXRlZCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG4gICAgLy8gdGhpcy5hcGlRdWV1ZVNlcnZpY2UuYWRkVG9RdWV1ZSh7XG4gICAgLy8gICBjYWxsYmFjazogdGhpcy5fcGVyZm9ybUFjdGlvbi5iaW5kKHRoaXMpLFxuICAgIC8vICAgY29uZmlnOiB7XG4gICAgLy8gICAgIHV1aWQsXG4gICAgLy8gICAgIHVpQWN0aW9uUmVxdWVzdCxcbiAgICAvLyAgIH0sXG4gICAgLy8gICBpc0NvbXBsZXRlZCxcbiAgICAvLyB9KTtcbiAgICAvLyByZXR1cm4gYXdhaXQgaXNDb21wbGV0ZWQudG9Qcm9taXNlKCk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgcGVyZm9ybVdpZGdldEFjdGlvbihcbiAgICB1dWlkOiBzdHJpbmcsXG4gICAgd2lkZ2V0SWQ6IHN0cmluZyxcbiAgICBub2RlSWQ6IHN0cmluZyxcbiAgICB1aUFjdGlvblJlcXVlc3Q6IFVpQWN0aW9uUmVxdWVzdFxuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5fcGVyZm9ybVdpZGdldEFjdGlvbih7IHV1aWQsIHdpZGdldElkLCBub2RlSWQsIHVpQWN0aW9uUmVxdWVzdCB9KTtcbiAgICAvLyBjb25zdCBpc0NvbXBsZXRlZCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG4gICAgLy8gdGhpcy5hcGlRdWV1ZVNlcnZpY2UuYWRkVG9RdWV1ZSh7XG4gICAgLy8gICBjYWxsYmFjazogdGhpcy5fcGVyZm9ybVdpZGdldEFjdGlvbi5iaW5kKHRoaXMpLFxuICAgIC8vICAgY29uZmlnOiB7XG4gICAgLy8gICAgIHV1aWQsXG4gICAgLy8gICAgIHdpZGdldElkLFxuICAgIC8vICAgICBub2RlSWQsXG4gICAgLy8gICAgIHVpQWN0aW9uUmVxdWVzdCxcbiAgICAvLyAgIH0sXG4gICAgLy8gICBpc0NvbXBsZXRlZCxcbiAgICAvLyB9KTtcbiAgICAvLyByZXR1cm4gYXdhaXQgaXNDb21wbGV0ZWQudG9Qcm9taXNlKCk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgcGVyZm9ybVdpZGdldE1haW5BY3Rpb24oXG4gICAgdXVpZDogc3RyaW5nLFxuICAgIHdpZGdldElkOiBzdHJpbmcsXG4gICAgdWlBY3Rpb25SZXF1ZXN0OiBVaUFjdGlvblJlcXVlc3RcbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuX3BlcmZvcm1XaWRnZXRNYWluQWN0aW9uKHsgdXVpZCwgd2lkZ2V0SWQsIHVpQWN0aW9uUmVxdWVzdCB9KTtcbiAgICAvLyBjb25zdCBpc0NvbXBsZXRlZCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG4gICAgLy8gdGhpcy5hcGlRdWV1ZVNlcnZpY2UuYWRkVG9RdWV1ZSh7XG4gICAgLy8gICBjYWxsYmFjazogdGhpcy5fcGVyZm9ybVdpZGdldE1haW5BY3Rpb24uYmluZCh0aGlzKSxcbiAgICAvLyAgIGNvbmZpZzoge1xuICAgIC8vICAgICB1dWlkLFxuICAgIC8vICAgICB3aWRnZXRJZCxcbiAgICAvLyAgICAgdWlBY3Rpb25SZXF1ZXN0LFxuICAgIC8vICAgfSxcbiAgICAvLyAgIGlzQ29tcGxldGVkLFxuICAgIC8vIH0pO1xuICAgIC8vIHJldHVybiBhd2FpdCBpc0NvbXBsZXRlZC50b1Byb21pc2UoKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBwZXJmb3JtVXBsb2FkQWN0aW9uKFxuICAgIHV1aWQ6IHN0cmluZyxcbiAgICB1aUFjdGlvblJlcXVlc3Q6IFVpQWN0aW9uUmVxdWVzdCxcbiAgICBwYXJhbTogJ2lucHV0JyB8ICdpbnB1dFwiJyxcbiAgICBjb250ZW50OiBhbnlcbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5fcGVyZm9ybVVwbG9hZEFjdGlvbih7XG4gICAgICB1dWlkLFxuICAgICAgdWlBY3Rpb25SZXF1ZXN0LFxuICAgICAgcGFyYW0sXG4gICAgICBjb250ZW50LFxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIHBlcmZvcm1VcGxvYWRNdWx0aXBsZUFjdGlvbihcbiAgICB1dWlkOiBzdHJpbmcsXG4gICAgdWlBY3Rpb25SZXF1ZXN0OiBVaUFjdGlvblJlcXVlc3QsXG4gICAgcGFyYW06ICdpbnB1dCcgfCAnaW5wdXQyJyxcbiAgICBjb250ZW50OiBhbnlbXVxuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLl9wZXJmb3JtVXBsb2FkTXVsdGlwbGVBY3Rpb24oe1xuICAgICAgdXVpZCxcbiAgICAgIHVpQWN0aW9uUmVxdWVzdCxcbiAgICAgIHBhcmFtLFxuICAgICAgY29udGVudCxcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBkYXRhQ2hhbmdlZCh1dWlkOiBzdHJpbmcsIGRhdGFDaGFuZ2U6IERhdGFDaGFuZ2UpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5fZGF0YUNoYW5nZWQoeyB1dWlkLCBkYXRhQ2hhbmdlIH0pO1xuICAgIC8vIGNvbnN0IGlzQ29tcGxldGVkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcbiAgICAvLyB0aGlzLmFwaVF1ZXVlU2VydmljZS5hZGRUb1F1ZXVlKFxuICAgIC8vICAge1xuICAgIC8vICAgICBjYWxsYmFjazogdGhpcy5fZGF0YUNoYW5nZWQuYmluZCh0aGlzKSxcbiAgICAvLyAgICAgY29uZmlnOiB7XG4gICAgLy8gICAgICAgdXVpZCxcbiAgICAvLyAgICAgICBkYXRhQ2hhbmdlLFxuICAgIC8vICAgICB9LFxuICAgIC8vICAgICBpc0NvbXBsZXRlZCxcbiAgICAvLyAgIH0sXG4gICAgLy8gICB0cnVlXG4gICAgLy8gKTtcbiAgICAvLyByZXR1cm4gYXdhaXQgaXNDb21wbGV0ZWQudG9Qcm9taXNlKCk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIF9wZXJmb3JtQWN0aW9uKGNvbmZpZzogYW55KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuaGFuZGxlUGVyZm9ybUFjdGlvblJlc3BvbnNlKFxuICAgICAgYXdhaXQgdGhpcy52aWV3LnBlcmZvcm1BY3Rpb24oY29uZmlnLnV1aWQsIGNvbmZpZy51aUFjdGlvblJlcXVlc3QpLnRvUHJvbWlzZSgpXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgX3BlcmZvcm1XaWRnZXRBY3Rpb24oY29uZmlnOiBhbnkpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5oYW5kbGVQZXJmb3JtQWN0aW9uUmVzcG9uc2UoXG4gICAgICBhd2FpdCB0aGlzLnZpZXdcbiAgICAgICAgLnBlcmZvcm1XaWRnZXRBY3Rpb24oY29uZmlnLnV1aWQsIGNvbmZpZy53aWRnZXRJZCwgY29uZmlnLm5vZGVJZCwgY29uZmlnLnVpQWN0aW9uUmVxdWVzdClcbiAgICAgICAgLnRvUHJvbWlzZSgpXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgX3BlcmZvcm1XaWRnZXRNYWluQWN0aW9uKGNvbmZpZzogYW55KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuaGFuZGxlUGVyZm9ybUFjdGlvblJlc3BvbnNlKFxuICAgICAgYXdhaXQgdGhpcy52aWV3XG4gICAgICAgIC5wZXJmb3JtV2lkZ2V0TWFpbkFjdGlvbihjb25maWcudXVpZCwgY29uZmlnLndpZGdldElkLCBjb25maWcudWlBY3Rpb25SZXF1ZXN0KVxuICAgICAgICAudG9Qcm9taXNlKClcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBfcGVyZm9ybVVwbG9hZEFjdGlvbihjb25maWc6IGFueSk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLmhhbmRsZVBlcmZvcm1BY3Rpb25SZXNwb25zZShcbiAgICAgIGF3YWl0IHRoaXMudmlld1xuICAgICAgICAudXBsb2FkQWN0aW9uKFxuICAgICAgICAgIGNvbmZpZy51dWlkLFxuICAgICAgICAgIEpTT04uc3RyaW5naWZ5KGNvbmZpZy51aUFjdGlvblJlcXVlc3QpLFxuICAgICAgICAgIGNvbmZpZy5wYXJhbSxcbiAgICAgICAgICBjb25maWcuY29udGVudFxuICAgICAgICApXG4gICAgICAgIC50b1Byb21pc2UoKVxuICAgICk7XG4gIH1cbiAgcHJpdmF0ZSBhc3luYyBfcGVyZm9ybVVwbG9hZE11bHRpcGxlQWN0aW9uKGNvbmZpZzogYW55KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuaGFuZGxlUGVyZm9ybUFjdGlvblJlc3BvbnNlKFxuICAgICAgYXdhaXQgdGhpcy52aWV3XG4gICAgICAgIC51cGxvYWRNdWx0aXBsZUFjdGlvbihcbiAgICAgICAgICBjb25maWcudXVpZCxcbiAgICAgICAgICBKU09OLnN0cmluZ2lmeShjb25maWcudWlBY3Rpb25SZXF1ZXN0KSxcbiAgICAgICAgICBjb25maWcucGFyYW0sXG4gICAgICAgICAgY29uZmlnLmNvbnRlbnRcbiAgICAgICAgKVxuICAgICAgICAudG9Qcm9taXNlKClcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBfZGF0YUNoYW5nZWQoY29uZmlnOiBhbnkpOiBQcm9taXNlPGFueT4ge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLmhhbmRsZVBlcmZvcm1BY3Rpb25SZXNwb25zZShcbiAgICAgIGF3YWl0IHRoaXMudmlldy5kYXRhQ2hhbmdlZChjb25maWcudXVpZCwgY29uZmlnLmRhdGFDaGFuZ2UpLnRvUHJvbWlzZSgpXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBoYW5kbGVQZXJmb3JtQWN0aW9uUmVzcG9uc2UoXG4gICAgdmlld0NvbnRleHRDaGFuZ2U6IFZpZXdDb250ZXh0Q2hhbmdlIHwgdW5kZWZpbmVkXG4gICk6IFByb21pc2U8YW55PiB7XG4gICAgdGhpcy52aWV3Q29udGV4dCA9IHZpZXdDb250ZXh0Q2hhbmdlPy52aWV3Q29udGV4dDtcbiAgICBhd2FpdCB0aGlzLnN5bmNWaWV3KCk7XG5cbiAgICBpZiAodmlld0NvbnRleHRDaGFuZ2U/LmNoYW5nZXMpIHtcbiAgICAgIHRoaXMuaGFuZGxlQ2hhbmdlcyh2aWV3Q29udGV4dENoYW5nZS5jaGFuZ2VzKTtcbiAgICB9XG4gICAgcmV0dXJuIHZpZXdDb250ZXh0Q2hhbmdlPy5yZXN1bHQ7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZUNoYW5nZXMoY2hhbmdlczogQXJyYXk8Q29tcG9uZW50TW9kZWxDaGFuZ2U+KTogdm9pZCB7XG4gICAgY2hhbmdlcy5mb3JFYWNoKChjb21wb25lbnRNb2RlbENoYW5nZTogQ29tcG9uZW50TW9kZWxDaGFuZ2UpID0+IHtcbiAgICAgIGxldCBkZXRlY3RDaGFuZ2U6IFNtYXJ0U3ViamVjdDxDb21wb25lbnRNb2RlbENoYW5nZT4gfCB1bmRlZmluZWQgPSB0aGlzLnNtYXJ0QXBpQ2xpZW50cy5nZXQoXG4gICAgICAgIGNvbXBvbmVudE1vZGVsQ2hhbmdlLnV1aWRcbiAgICAgICk7XG4gICAgICBpZiAoZGV0ZWN0Q2hhbmdlKSB7XG4gICAgICAgIGRldGVjdENoYW5nZS5uZXh0KGNvbXBvbmVudE1vZGVsQ2hhbmdlKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBsb2FkKHV1aWQ6IHN0cmluZyk6IFByb21pc2U8Q29tcG9uZW50TW9kZWwgfCB1bmRlZmluZWQ+IHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy52aWV3LmdldENvbXBvbmVudE1vZGVsKHV1aWQpLnRvUHJvbWlzZSgpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGxvYWQyKHV1aWQ6IHN0cmluZyk6IFByb21pc2U8Vmlld0NvbnRleHRDaGFuZ2UgfCB1bmRlZmluZWQ+IHtcbiAgICBsZXQgY2hhbmdlID0gYXdhaXQgdGhpcy52aWV3LmdldENvbXBvbmVudE1vZGVsMih1dWlkKS50b1Byb21pc2UoKTtcbiAgICAvLyBOb3QgYXdhaXRlZDogdGhlIHN5bmMgZW5kcyB3aXRoIGEgdmlld2NvbnRleHQgUFVULCB3aGljaCB3b3VsZCBzZXJpYWxpc2UgdGhlIG1vdW50LlxuICAgIC8vIFRoZSBmYWlsdXJlIHN0aWxsIGhhcyB0byBzdXJmYWNlLCBzbyBsb2cgaXQgaW5zdGVhZCBvZiBkcm9wcGluZyB0aGUgcHJvbWlzZS5cbiAgICB0aGlzLmhhbmRsZVBlcmZvcm1BY3Rpb25SZXNwb25zZShjaGFuZ2UpLmNhdGNoKChlcnIpID0+XG4gICAgICBjb25zb2xlLmVycm9yKCdzeW5jVmlldyBhZnRlciBjb21wb25lbnQgbG9hZCBmYWlsZWQnLCBlcnIpXG4gICAgKTtcbiAgICByZXR1cm4gY2hhbmdlO1xuICB9XG5cbiAgZ2V0Q3VycmVudFZpZXdDb250ZXh0KCk6IFZpZXdDb250ZXh0RGF0YSB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMudmlld0NvbnRleHQ7XG4gIH1cbn1cblxuZXhwb3J0IGNvbnN0IElTX0FTWU5DX1BBUkFNX05BTUUgPSAnaXNBc3luYyc7XG5cbi8qKiBBIHJlZ2lzdGVyZWQgZW1iZWRkZWQgc2xvdDogaXRzIFZpZXdDb250YWluZXJSZWYgcGx1cyB0aGUgbGlmZWN5Y2xlIGNsYXNzIGl0c1xuICogIHJlZ2lzdHJhbnQgZGVjbGFyZWQsIHNvIHRoZSBsYXlvdXQgZGV0YWNoL2NsZWFudXAgZGFuY2UgY2FuIHNraXAgJ3N0YWJsZScgc2xvdHMuICovXG5pbnRlcmZhY2UgRW1iZWRkZWRTbG90RW50cnkge1xuICB2Y1JlZjogVmlld0NvbnRhaW5lclJlZjtcbiAga2luZDogU2xvdEtpbmQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXBpUXVldWVDYWxsIHtcbiAgY2FsbGJhY2s6IChjb25maWc6IGFueSkgPT4gUHJvbWlzZTxhbnk+O1xuICBjb25maWc6IGFueTtcbiAgaXNDb21wbGV0ZWQ6IFN1YmplY3Q8dm9pZD47XG59XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBBcGlRdWV1ZVNlcnZpY2UgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuICBwcml2YXRlIF9kZXN0cm95JDogU3ViamVjdDx2b2lkPiA9IG5ldyBTdWJqZWN0KCk7XG5cbiAgcHJpdmF0ZSBxdWV1ZTogQXBpUXVldWVDYWxsW10gPSBbXTtcbiAgcHJpdmF0ZSBpc1Byb2Nlc3NpbmcgPSBmYWxzZTtcbiAgcHJpdmF0ZSBxdWV1ZVN1YmplY3Q6IFN1YmplY3Q8dm9pZD4gPSBuZXcgU21hcnRTdWJqZWN0KHRoaXMuX2Rlc3Ryb3kkKTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLnF1ZXVlU3ViamVjdC5waXBlKHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JCkpLnN1YnNjcmliZSgoKSA9PiB0aGlzLnByb2Nlc3NRdWV1ZSgpKTtcbiAgfVxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLl9kZXN0cm95JC5uZXh0KCk7XG4gICAgdGhpcy5fZGVzdHJveSQuY29tcGxldGUoKTtcbiAgfVxuXG4gIGFkZFRvUXVldWUoY2FsbDogQXBpUXVldWVDYWxsLCBwcmlvcml0eTogYm9vbGVhbiA9IGZhbHNlKSB7XG4gICAgaWYgKHByaW9yaXR5KSB7XG4gICAgICB0aGlzLnF1ZXVlLnVuc2hpZnQoY2FsbCk7IC8vIEFkZCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBxdWV1ZSBpZiBpdCBoYXMgaGlnaGVyIHByaW9yaXR5XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucXVldWUucHVzaChjYWxsKTsgLy8gQWRkIGF0IHRoZSBlbmQgb2YgdGhlIHF1ZXVlIGlmIGl0IGhhcyBsb3dlciBwcmlvcml0eVxuICAgIH1cbiAgICBpZiAoIXRoaXMuaXNQcm9jZXNzaW5nKSB7XG4gICAgICB0aGlzLnByb2Nlc3NRdWV1ZSgpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHByb2Nlc3NRdWV1ZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5xdWV1ZS5sZW5ndGggPT09IDApIHtcbiAgICAgIHRoaXMuaXNQcm9jZXNzaW5nID0gZmFsc2U7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgYXBpUXVldWVDYWxsID0gdGhpcy5xdWV1ZS5zaGlmdCgpO1xuICAgIGlmIChhcGlRdWV1ZUNhbGwpIHtcbiAgICAgIGF3YWl0IGFwaVF1ZXVlQ2FsbC5jYWxsYmFjayhhcGlRdWV1ZUNhbGwuY29uZmlnKTtcbiAgICAgIGFwaVF1ZXVlQ2FsbC5pc0NvbXBsZXRlZC5jb21wbGV0ZSgpO1xuICAgICAgdGhpcy5xdWV1ZVN1YmplY3QubmV4dCgpO1xuICAgIH1cbiAgfVxufVxuIl19
@@ -4908,7 +4908,9 @@ class SmartViewContextService {
4908
4908
  }
4909
4909
  async load2(uuid) {
4910
4910
  let change = await this.view.getComponentModel2(uuid).toPromise();
4911
- this.handlePerformActionResponse(change);
4911
+ // Not awaited: the sync ends with a viewcontext PUT, which would serialise the mount.
4912
+ // The failure still has to surface, so log it instead of dropping the promise.
4913
+ this.handlePerformActionResponse(change).catch((err) => console.error('syncView after component load failed', err));
4912
4914
  return change;
4913
4915
  }
4914
4916
  getCurrentViewContext() {
@@ -24618,6 +24620,18 @@ class SmartComponentApiClient {
24618
24620
  await Promise.all(setupPromises);
24619
24621
  }
24620
24622
  async run() {
24623
+ if (this.runInFlight && this.runInFlight.uuid === this.uuid) {
24624
+ return this.runInFlight.promise;
24625
+ }
24626
+ const promise = this.doRun().finally(() => {
24627
+ if (this.runInFlight?.promise === promise) {
24628
+ this.runInFlight = undefined;
24629
+ }
24630
+ });
24631
+ this.runInFlight = { uuid: this.uuid, promise };
24632
+ return promise;
24633
+ }
24634
+ async doRun() {
24621
24635
  try {
24622
24636
  await this.bootstrap.whenReady();
24623
24637
  await this.load();