@energycap/components 0.39.21-ECAP-25650-file-upload-validation-support.20240806-0942 → 0.39.21-ECAP-25650-file-upload-validation-support.20240806-1029

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.
@@ -192,6 +192,8 @@ export class PageBaseComponent {
192
192
  * @param event
193
193
  */
194
194
  async onSave(event) {
195
+ // Show the saving overlay in case we have async validators in play
196
+ this.showStatus(PageStatus.Saving);
195
197
  this.formGroup.markAllAsTouched();
196
198
  // If the form has pending async validators, wait for it them to complete before proceeding
197
199
  if (this.formGroup.pending) {
@@ -201,6 +203,8 @@ export class PageBaseComponent {
201
203
  await this.save();
202
204
  }
203
205
  else {
206
+ // Remove the saving overlay to display any errors
207
+ this.showStatus(PageStatus.Loaded);
204
208
  // Only show the banner with the generic message if the parent component hasn't already set one
205
209
  // by implementing onSave for additional validation
206
210
  if (this.errors === '') {
@@ -380,4 +384,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
380
384
  type: HostBinding,
381
385
  args: ['class']
382
386
  }] } });
383
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFnZS1iYXNlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvc3JjL2xpYi9zaGFyZWQvcGFnZS9wYWdlLWJhc2UvcGFnZS1iYXNlLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWlCLFNBQVMsRUFBRSxXQUFXLEVBQStCLE1BQU0sZUFBZSxDQUFDO0FBQ25HLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxjQUFjLEVBQUUsYUFBYSxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3hFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3ZELE9BQU8sRUFBYyxhQUFhLEVBQUUsT0FBTyxFQUFnQixNQUFNLE1BQU0sQ0FBQztBQUN4RSxPQUFPLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUV6RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDM0QsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQ25FLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFFdkUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxzREFBc0QsQ0FBQztBQUMvRSxPQUFPLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBRSxNQUFNLGtCQUFrQixDQUFDOztBQUU1RCxNQUFNLE9BQU8sY0FBYztJQUEzQjtRQUNFLFVBQUssR0FBWSxFQUFFLENBQUM7UUFDcEIsYUFBUSxHQUFZLEVBQUUsQ0FB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QUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxZQUFZLGFBQWEsQ0FBQyxDQUN4QyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRTtnQkFDZCxJQUFJO29CQUNGLElBQUksVUFBVSxHQUEyQixDQUFFLENBQUMsR0FBRyxDQUFDO29CQUVoRCxJQUFJLElBQUksQ0FBQyxtQ0FBbUMsRUFBRTt3QkFDNUMsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxVQUFVLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFOzRCQUMvRCxJQUFJLENBQUMsb0JBQW9CLENBQWlCLENBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQzt5QkFDbkQ7cUJBQ0Y7eUJBQU07d0JBQ0wsSUFBSSxJQUFJLENBQUMsV0FBVyxLQUFLLFVBQVUsRUFBRTs0QkFDbkMsSUFBSSxDQUFDLG9CQUFvQixDQUFpQixDQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7eUJBQ25EO3FCQUNGO2lCQUNGO2dCQUFDLE9BQU8sS0FBSyxFQUFFO29CQUNkLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7aUJBQ3JCO1lBQ0gsQ0FBQyxDQUFDLENBQUM7U0FDSjtJQUNILENBQUM7SUFFTyxvQkFBb0IsQ0FBQyxHQUFXO1FBQ3RDLElBQUksQ0FBQyxXQUFXLEdBQUcsR0FBRyxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztJQUN6QixDQUFDOzs4R0EvYm1CLGlCQUFpQjtrR0FBakIsaUJBQWlCOzJGQUFqQixpQkFBaUI7a0JBRHRDLFNBQVM7K0ZBR3dCLFNBQVM7c0JBQXhDLFdBQVc7dUJBQUMsT0FBTyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFmdGVyVmlld0luaXQsIERpcmVjdGl2ZSwgSG9zdEJpbmRpbmcsIEluamVjdG9yLCBPbkRlc3Ryb3ksIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBVbnR5cGVkRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgTmF2aWdhdGlvbkVuZCwgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xyXG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBSZXBsYXlTdWJqZWN0LCBTdWJqZWN0LCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgZmlsdGVyLCB0YWtlLCB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7IE5hdkl0ZW0gfSBmcm9tICcuLi8uLi8uLi9jb250cm9scy9uYXZpZ2F0aW9uL25hdi1pdGVtJztcclxuaW1wb3J0IHsgRXJyb3JTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vY29yZS9lcnJvci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgUm91dGVySGVscGVyIH0gZnJvbSAnLi4vLi4vLi4vY29yZS9yb3V0ZXItaGVscGVyLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBTY3JvbGxTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vY29yZS9zY3JvbGwuc2VydmljZSc7XHJcbmltcG9ydCB7IERpYWxvZ1NlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9kaXNwbGF5L2RpYWxvZy9kaWFsb2cuc2VydmljZSc7XHJcbmltcG9ydCB7IEhlbHAgfSBmcm9tICcuLi8uLi8uLi9kaXNwbGF5L2hlbHAvaGVscC10eXBlcyc7XHJcbmltcG9ydCB7IFNwbGFzaFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9kaXNwbGF5L3NwbGFzaC9zcGxhc2guc2VydmljZSc7XHJcbmltcG9ydCB7IE92ZXJsYXkgfSBmcm9tICcuLi8uLi8uLi9kaXNwbGF5L3ZpZXctb3ZlcmxheS92aWV3LW92ZXJsYXkuY29tcG9uZW50JztcclxuaW1wb3J0IHsgUGFnZVN0YXR1cywgUGFnZVN0YXR1c2VzIH0gZnJvbSAnLi4vcGFnZS1zdGF0dXNlcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgUGFnZUluaXRSZXN1bHQge1xyXG4gIHRpdGxlPzogc3RyaW5nID0gJyc7XHJcbiAgc3ViVGl0bGU/OiBzdHJpbmcgPSAnJztcclxuICBzdWJUaXRsZVVybD86IHN0cmluZyA9ICcnO1xyXG4gIGJyZWFkY3J1bWJzPzogTmF2SXRlbVtdO1xyXG4gIGhlbHA/OiBIZWxwO1xyXG59XHJcblxyXG5ARGlyZWN0aXZlKClcclxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFBhZ2VCYXNlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kge1xyXG4gIC8qKiBEZWZhdWx0IGNzcyBjbGFzc2VzIGFwcGxpZWQgdG8gaG9zdCBlbGVtZW50ICovXHJcbiAgQEhvc3RCaW5kaW5nKCdjbGFzcycpIHByb3RlY3RlZCBjbGFzc0xpc3QgPSAnZC1mbGV4IGZsZXgtZ3Jvdyc7XHJcblxyXG4gIC8qKlxyXG4gICAqIFRpdGxlIGZvciB0aGUgcGFnZSBkaXNwbGF5ZWQgaW4gdGhlIGhlYWRlclxyXG4gICAqL1xyXG4gIHB1YmxpYyB0aXRsZT86IHN0cmluZyA9ICcnO1xyXG5cclxuICAvKipcclxuICAgKiBTdWIgdGl0bGUgZm9yIHRoZSBwYWdlIGRpc3BsYXllZCBpbiB0aGUgaGVhZGVyXHJcbiAgICovXHJcbiAgcHVibGljIHN1YlRpdGxlPzogc3RyaW5nID0gJyc7XHJcblxyXG4gIC8qKlxyXG4gICAqIFN1YiB0aXRsZSB1cmwgZm9yIHRoZSBwYWdlIGRpc3BsYXllZCBpbiB0aGUgaGVhZGVyXHJcbiAgICovXHJcbiAgcHVibGljIHN1YlRpdGxlVXJsPzogc3RyaW5nID0gJyc7XHJcblxyXG4gIC8qKlxyXG4gICAqIFN0YXR1cyBvdmVybGF5IGZvciB0aGUgcGFnZVxyXG4gICAqL1xyXG4gIHB1YmxpYyBzdGF0dXM6IE92ZXJsYXkgPSBuZXcgT3ZlcmxheSgncGVuZGluZycsICdMb2FkaW5nJyk7XHJcblxyXG4gIC8qKlxyXG4gICAqIEJyZWFkY3J1bWJzIGRpc3BsYXllZCBpbiB0aGUgaGVhZGVyXHJcbiAgICovXHJcbiAgcHVibGljIGJyZWFkY3J1bWJzPzogTmF2SXRlbVtdO1xyXG5cclxuICAvKipcclxuICAgKiBSZXN1bHQgcmV0dXJuZWQgZnJvbSB0aGUgb25Jbml0IGZ1bmN0aW9uXHJcbiAgICovXHJcbiAgcHVibGljIGluaXRSZXN1bHQhOiBQYWdlSW5pdFJlc3VsdDtcclxuXHJcbiAgLyoqXHJcbiAgICogSGVscCBpbmZvcm1hdGlvbiBmb3IgdGhlIGNvbXBvbmVudCwgd2hpY2ggY2FuIG9ubHkgYmUgc2V0IHRocm91Z2ggb25Jbml0XHJcbiAgICovXHJcbiAgcHVibGljIGhlbHA6IEhlbHAgfCB1bmRlZmluZWQ7XHJcblxyXG4gIC8qKlxyXG4gICAqIEZvcm0gZ3JvdXAgdG8gYmUgdXNlZCBpZiBuZWVkZWQgYnkgdGhlIHBhZ2VcclxuICAgKi9cclxuICBwdWJsaWMgZm9ybUdyb3VwOiBVbnR5cGVkRm9ybUdyb3VwID0gbmV3IFVudHlwZWRGb3JtR3JvdXAoe30pO1xyXG5cclxuICAvKipcclxuICAgKiBEZWZhdWx0IGludmFsaWQgZm9ybSBtZXNzYWdlLCBvdmVycmlkZSBpZiBhIG1vcmUgc3BlY2lmaWMgbWVzc2FnZSBpcyBuZWVkZWRcclxuICAgKi9cclxuICBwdWJsaWMgZGVmYXVsdEludmFsaWRGb3JtTWVzc2FnZTogc3RyaW5nID0gJ1BsZWFzZUNvcnJlY3RGb3JtX1NDJztcclxuXHJcbiAgLyoqXHJcbiAgICogRGVmYXVsdCB1bmtub3duIHNhdmUgZXJyb3IgbWVzc2FnZSwgb3ZlcnJpZGUgaWYgYSBtb3JlIHNwZWNpZmljIG1lc3NhZ2UgaXMgbmVlZGVkXHJcbiAgICovXHJcbiAgcHVibGljIGRlZmF1bHRVbmtub3duU2F2ZUVycm9yOiBzdHJpbmcgPSAnUGFnZUJhc2VVbmtub3duU2F2ZUVycm9yX1NDJztcclxuXHJcbiAgLyoqXHJcbiAgICogVXNlZCB0byBvcHQgb3V0IG9mIGhpZGluZyB0aGUgc3BsYXNoIHNjcmVlbiB3aGVuIHRoZSBwYWdlIGlzIGxvYWRlZFxyXG4gICAqL1xyXG4gIHB1YmxpYyBza2lwSGlkZVNwbGFzaE9uQ29tcGxldGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgLyoqXHJcbiAgICogV2hlbiBzZXQgdG8gdHJ1ZSBhbnkgbmF2aWdhdGlvbiBlbmQgZXZlbnRzIHRoYXQgYXJlIHN0cmljdGx5IHF1ZXJ5IHBhcmFtIGNoYW5nZXMgd2lsbFxyXG4gICAqIG5vdCBjYWxsIHRoZSBvbk5hdmlnYXRpb25FbmQgZnVuY3Rpb24uIFRoaXMgYWxsb3dzIHBhZ2VzIHRvIGNoYW5nZSB0aGUgdmlldyB3aXRoIHF1ZXJ5XHJcbiAgICogcGFyYW1zIGFuZCBub3QgdHJpZ2dlciBhIGZ1bGwgcmVmcmVzaC5cclxuICAgKi9cclxuICBwdWJsaWMgaWdub3JlUXVlcnlQYXJhbXNPbk5hdmlnYXRpb25DaGFuZ2U6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgcHJpdmF0ZSBwcmV2aW91c1VybDogc3RyaW5nID0gXCJcIjtcclxuXHJcbiAgLyoqXHJcbiAgICogVXNlZCB0byB1bnN1YnNjcmliZSBmcm9tIG9ic2VydmFibGVzXHJcbiAgICovXHJcbiAgcHVibGljIGRlc3Ryb3llZDogU3ViamVjdDxhbnk+ID0gbmV3IFN1YmplY3Q8YW55PigpO1xyXG5cclxuICAvKipcclxuICAgKiBVc2VkIHRvIGtub3cgd2hlbiB0aGUgcGFnZSBoYXMgYmVlbiBsb2FkZWQsIHRoaXMgd2lsbCBiZSBjb21wbGV0ZWRcclxuICAgKiBhZnRlciBvbkFmdGVyVmlld0luaXRcclxuICAgKi9cclxuICBwcml2YXRlIF9hZnRlclZpZXdJbml0Q29tcGxldGU6IFJlcGxheVN1YmplY3Q8dm9pZD4gPSBuZXcgUmVwbGF5U3ViamVjdCgpO1xyXG4gIHB1YmxpYyBhZnRlclZpZXdJbml0Q29tcGxldGU6IE9ic2VydmFibGU8dm9pZD4gPSB0aGlzLl9hZnRlclZpZXdJbml0Q29tcGxldGU7XHJcblxyXG4gIC8qKlxyXG4gICAqIElmIGRlZmluZWQgdGhlIGZvcm0gd2lsbCBhdXRvbWF0aWNhbGx5IHNjcm9sbCB0byB0aGUgZmlyc3QgaW52YWxpZCBmb3JtIGNvbnRyb2xcclxuICAgKiBpZiBpdCdzIG91dHNpZGUgb2YgdGhlIHZpZXdcclxuICAgKi9cclxuICBwcm90ZWN0ZWQgc2Nyb2xsQ29udGFpbmVyU2VsZWN0b3I6IHN0cmluZyB8IHVuZGVmaW5lZDtcclxuXHJcbiAgLyoqXHJcbiAgICogU3Vic2NyaXB0aW9uIHRvIHRoZSByb3V0ZXIgZXZlbnRzIE5hdmlnYXRpb25FbmRcclxuICAgKiBVc2VkIHRvIGtub3cgaWYgYWxyZWFkeSBzdWJzY3JpYmVkIHRvXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBuYXZpZ2F0aW9uRW5kU3Vic2NyaXB0aW9uPzogU3Vic2NyaXB0aW9uO1xyXG5cclxuICAvKipcclxuICAgKiBDb21tb24gc2VydmljZXMgdXNlZCBieSBwYWdlLWJhc2VcclxuICAgKi9cclxuICBwcm90ZWN0ZWQgZXJyb3JTZXJ2aWNlOiBFcnJvclNlcnZpY2U7XHJcbiAgcHJvdGVjdGVkIHRyYW5zbGF0ZVNlcnZpY2U6IFRyYW5zbGF0ZVNlcnZpY2U7XHJcbiAgcHJvdGVjdGVkIHNjcm9sbFNlcnZpY2U6IFNjcm9sbFNlcnZpY2U7XHJcbiAgcHJvdGVjdGVkIHJvdXRlcjogUm91dGVyO1xyXG4gIHByb3RlY3RlZCBhY3RpdmF0ZWRSb3V0ZTogQWN0aXZhdGVkUm91dGU7XHJcbiAgcHJvdGVjdGVkIGRpYWxvZ1NlcnZpY2U6IERpYWxvZ1NlcnZpY2U7XHJcbiAgcHJvdGVjdGVkIHNwbGFzaFNlcnZpY2U6IFNwbGFzaFNlcnZpY2U7XHJcbiAgcHJvdGVjdGVkIHJvdXRlckhlbHBlcjogUm91dGVySGVscGVyO1xyXG5cclxuICBjb25zdHJ1Y3RvcihpbmplY3RvcjogSW5qZWN0b3IpIHtcclxuICAgIHRoaXMuZXJyb3JTZXJ2aWNlID0gaW5qZWN0b3IuZ2V0KEVycm9yU2VydmljZSk7XHJcbiAgICB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UgPSBpbmplY3Rvci5nZXQoVHJhbnNsYXRlU2VydmljZSk7XHJcbiAgICB0aGlzLnNjcm9sbFNlcnZpY2UgPSBpbmplY3Rvci5nZXQoU2Nyb2xsU2VydmljZSk7XHJcbiAgICB0aGlzLnJvdXRlciA9IGluamVjdG9yLmdldChSb3V0ZXIpO1xyXG4gICAgdGhpcy5hY3RpdmF0ZWRSb3V0ZSA9IGluamVjdG9yLmdldChBY3RpdmF0ZWRSb3V0ZSk7XHJcbiAgICB0aGlzLmRpYWxvZ1NlcnZpY2UgPSBpbmplY3Rvci5nZXQoRGlhbG9nU2VydmljZSk7XHJcbiAgICB0aGlzLnNwbGFzaFNlcnZpY2UgPSBpbmplY3Rvci5nZXQoU3BsYXNoU2VydmljZSk7XHJcbiAgICB0aGlzLnJvdXRlckhlbHBlciA9IGluamVjdG9yLmdldChSb3V0ZXJIZWxwZXIpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRXJyb3JzIHRvIGJlIHNob3duIGZvciB0aGUgY29tcG9uZW50LlxyXG4gICAqIEF1dG9tYXRpY2FsbHkgcG9wdWxhdGVkIG9uIHByb21pc2UgcmVqZWN0aW9uIGZyb20gc2F2ZSBhbmQgc2hhcmVkIHdpdGggdGhlIFVJLlxyXG4gICAqL1xyXG4gIHByaXZhdGUgX2Vycm9yczogc3RyaW5nID0gJyc7XHJcbiAgcHVibGljIGdldCBlcnJvcnMoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLl9lcnJvcnM7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBPcHRpb25hbCBsaWZlY3ljbGUgaG9vayB0aGF0IGlzIGNhbGxlZCBhcyBwYXJ0IG9mIHRoZSBBbmd1bGFyIG5nT25Jbml0IGxpZmVjeWNsZSBob29rLlxyXG4gICAqIENhbGxlZCBiZWZvcmUgb25Jbml0IGlzIGNhbGxlZCBmb3IgdGhlIGZpcnN0IHRpbWUuIEFkZCBzZXR1cCBsb2dpYyBoZXJlIHRoYXQgZG9lc1xyXG4gICAqIG5vdCBuZWVkIHRvIGJlIHJ1biBvbiBldmVyeSByZWxvYWQuXHJcbiAgICovXHJcbiAgcHJvdGVjdGVkIG9uRmlyc3RJbml0KCk6IHZvaWQgeyB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBpbiB0aGUgZGVyaXZlZCBjbGFzcyBhcyBwYXJ0IG9mIHRoZSBBbmd1bGFyIG5nT25Jbml0XHJcbiAgICogbGlmZWN5Y2xlIGhvb2suIEl0IG11c3QgcHJvdmlkZSBhIFBhZ2VJbml0UmVzdWx0IGJhY2sgdG8gdGhlIGJhc2UgY2xhc3MgdG8gcHJvcGVybHlcclxuICAgKiBzZXQgdXAgdGhlIHBhZ2UuXHJcbiAgICovXHJcbiAgcHJvdGVjdGVkIGFic3RyYWN0IG9uSW5pdCgpOiBQcm9taXNlPFBhZ2VJbml0UmVzdWx0PjtcclxuICBwcm90ZWN0ZWQgaW5pdFByb21pc2UhOiBQcm9taXNlPFBhZ2VJbml0UmVzdWx0PjtcclxuXHJcbiAgcHVibGljIGFzeW5jIG5nT25Jbml0KCkge1xyXG4gICAgdHJ5IHtcclxuICAgICAgdGhpcy5zaG93U3RhdHVzKFBhZ2VTdGF0dXMuTG9hZGluZyk7XHJcbiAgICAgIHRoaXMuc2V0VXBSb3V0ZXJTdWJzY3JpcHRpb25zKCk7XHJcbiAgICAgIHRoaXMub25GaXJzdEluaXQoKTtcclxuICAgICAgdGhpcy5pbml0UHJvbWlzZSA9IHRoaXMub25Jbml0KCk7XHJcblxyXG4gICAgICBhd2FpdCB0aGlzLmluaXRQcm9taXNlO1xyXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgdGhpcy5zcGxhc2hTZXJ2aWNlLmhpZGVTcGxhc2goKTtcclxuICAgICAgdGhpcy5vbkVycm9yKGVycm9yKTtcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQganVzdCBhZnRlciB0aGUgQW5ndWxhciBMaWZlY3ljbGUgZXZlbnQgbmdPbkFmdGVyVmlld0luaXQuXHJcbiAgICogSXQgZmlyZXMgYWZ0ZXIgYWxsIHN1Yi1jb21wb25lbnRzIGhhdmUgZ29uZSB0aHJvdWdoIHRoZWlyIGluaXRpYWxpemF0aW9uIHBoYXNlLlxyXG4gICAqIEl0IGlzIGluIHRoaXMgcGhhc2UgdGhhdCB0aGUgdmlldyBjb21wb25lbnRzIHNob3VsZCBhbHJlYWR5IGV4aXN0LCBzbyBhIGRlcml2ZWQgY2xhc3Mgc2hvdWxkXHJcbiAgICogbG9hZCBkYXRhIGZyb20gdGhlIEFQSSB0byBwb3B1bGF0ZSBhbnkgdmlldyBjb21wb25lbnRzLiBUaGUgcHJvbWlzZSB0aGF0XHJcbiAgICogaXMgcmV0dXJuZWQgbXVzdCBub3QgcmVzb2x2ZSB1bnRpbCBhbGwgcmVxdWlyZWQgZGF0YSBoYXMgY29tcGxldGVseSBsb2FkZWRcclxuICAgKi9cclxuICBwcm90ZWN0ZWQgYXN5bmMgb25BZnRlclZpZXdJbml0KCk6IFByb21pc2U8dm9pZD4geyB9O1xyXG4gIHB1YmxpYyBhc3luYyBuZ0FmdGVyVmlld0luaXQoKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICB0cnkge1xyXG4gICAgICBjb25zdCBpbml0UmVzdWx0ID0gYXdhaXQgdGhpcy5pbml0UHJvbWlzZTtcclxuICAgICAgdGhpcy5wYXJzZUluaXRSZXN1bHQoaW5pdFJlc3VsdCk7XHJcblxyXG4gICAgICBhd2FpdCB0aGlzLm9uQWZ0ZXJWaWV3SW5pdCgpO1xyXG5cclxuICAgICAgdGhpcy5fYWZ0ZXJWaWV3SW5pdENvbXBsZXRlLm5leHQoKTtcclxuICAgICAgdGhpcy5fYWZ0ZXJWaWV3SW5pdENvbXBsZXRlLmNvbXBsZXRlKCk7XHJcblxyXG4gICAgICBhd2FpdCB0aGlzLm9uRm9ybUxvYWRDb21wbGV0ZSgpO1xyXG5cclxuICAgICAgaWYgKHRoaXMuc3RhdHVzLnN0YXR1cyA9PT0gJ3BlbmRpbmcnKSB7XHJcbiAgICAgICAgdGhpcy5zaG93U3RhdHVzKFBhZ2VTdGF0dXMuTG9hZGVkKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKCF0aGlzLnNraXBIaWRlU3BsYXNoT25Db21wbGV0ZSkge1xyXG4gICAgICAgIHRoaXMuc3BsYXNoU2VydmljZS5oaWRlU3BsYXNoKCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICB0aGlzLnNwbGFzaFNlcnZpY2UuaGlkZVNwbGFzaCgpO1xyXG4gICAgICB0aGlzLm9uRXJyb3IoZXJyb3IpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQSBsaWZlY3ljbGUgbWV0aG9kIHRoYXQgZXhlY3V0ZXMgb25jZSBhbGwgZGF0YSBoYXMgYmVlbiBsb2FkZWRcclxuICAgKiB0aHJvdWdoIG5nQWZ0ZXJWaWV3SW5pdCBhbmQgZnJvbSBsb2NhbCBzdG9yYWdlIGlmIHJlcXVpcmVkLlxyXG4gICAqIEl0IGlzIGF0IHRoaXMgcG9pbnQgdGhhdCB5b3UgY2FuIHN1YnNjcmliZSB0byBjaGFuZ2VzIG9uIHRoZSBmb3JtXHJcbiAgICogcmVsaWFibHlcclxuICAgKlxyXG4gICAqIEBwcm90ZWN0ZWRcclxuICAgKiBAbWVtYmVyb2YgUGFnZUJhc2VDb21wb25lbnRcclxuICAgKi9cclxuICBwcm90ZWN0ZWQgYXN5bmMgb25Gb3JtTG9hZENvbXBsZXRlKCk6IFByb21pc2U8YW55PiB7IH1cclxuXHJcbiAgLyoqXHJcbiAgICogQSBsaWZlY3ljbGUgaG9vayB0aGF0IGlzIGNhbGxlZCBhZnRlciBldmVyeSBOYXZpZ2F0aW9uRW5kIGV2ZW50LlxyXG4gICAqL1xyXG4gIHByb3RlY3RlZCBvbk5hdmlnYXRpb25FbmQoKTogdm9pZCB7IH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmVsb2FkIHRoZSBjb21wb25lbnQga2lja2luZyBvZmYgdGhlIG5nT25Jbml0IGFuZCBuZ0FmdGVyVmlld0luaXQgbGlmZWN5Y2xlIGhvb2tzLlxyXG4gICAqIEFueSBzdGF0ZSB0aGF0IG5lZWRzIHRvIGJlIHJlc2V0IHNob3VsZCBiZSBkb25lIHNvIGJlZm9yZSBjYWxsaW5nIHRoaXMgbWV0aG9kLlxyXG4gICAqL1xyXG4gIHB1YmxpYyByZWxvYWQoKTogdm9pZCB7XHJcbiAgICB0aGlzLl9hZnRlclZpZXdJbml0Q29tcGxldGUgPSBuZXcgUmVwbGF5U3ViamVjdCgpO1xyXG5cclxuICAgIHRoaXMuc2hvd1N0YXR1cyhQYWdlU3RhdHVzLkxvYWRpbmcpO1xyXG4gICAgdGhpcy5pbml0UHJvbWlzZSA9IHRoaXMub25Jbml0KCk7XHJcbiAgICB0aGlzLm5nQWZ0ZXJWaWV3SW5pdCgpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogV2hlbiBvdmVycmlkZGVuIGluIGEgZGVyaXZlZCBjbGFzcyB0aGlzIG1ldGhvZCB3aWxsIHN5bmMgdGhlIGZvcm0gc3RhdGVcclxuICAgKiBpbnRvIHRoZSBvYmplY3QgdGhhdCB3aWxsIGJlIHBlcnNpc3RlZCB0byB0aGUgQVBJLiBUaGUgdmFsdWUgc2hvdWxkIG5vdFxyXG4gICAqIGFjdHVhbGx5IGJlIHNlbnQgdG8gdGhlIEFQSSB5ZXQuXHJcbiAgICovXHJcbiAgcHJvdGVjdGVkIGFzeW5jIGFwcGx5TW9kZWxVcGRhdGVzKCk6IFByb21pc2U8dm9pZD4geyB9O1xyXG5cclxuICAvKipcclxuICAgKiBTYXZlIHRoZSBtb2RlbCBzdGF0ZSB0byB0aGUgQVBJIGFuZCByZXR1cm4gYSBwcm9taXNlIHRoYXRcclxuICAgKiBjb250YWlucyB0aGUgdXBkYXRlZCBlbnRpdHlJRC4gVGhlIHByb21pc2Ugc2hvdWxkIGJlIHJlamVjdGVkXHJcbiAgICogaWYgdGhlIHNhdmUgZmFpbHMgYW5kIGVycm9ycyBhbmQgdGhlIG92ZXJsYXkgc3RhdHVzIHdpbGwgYmUgdXBkYXRlZFxyXG4gICAqIGFjY29yZGluZ2x5XHJcbiAgICovXHJcbiAgcHJvdGVjdGVkIGFzeW5jIHNhdmVUb0FwaSgpOiBQcm9taXNlPG51bWJlciB8IHZvaWQ+IHsgfTtcclxuXHJcbiAgLyoqXHJcbiAgICogQ2FsbGVkIGFmdGVyIHRoZSBzYXZlIGhhcyBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5LlxyXG4gICAqIEl0IGlzIHRoZSByZXNwb25zaWJpbGl0eSBvZiB0aGUgZGVyaXZlZCBjbGFzcyB0byBuYXZpZ2F0ZVxyXG4gICAqIHRvIGEgcHJvcGVydGllcy9zdGF0dXMgcGFnZSBvciBlbWl0IGFwcHJvcHJpYXRlbHkgaWYgd2l0aGluIGEgZGlhbG9nXHJcbiAgICogQHBhcmFtIGVudGl0eUlkXHJcbiAgICovXHJcbiAgcHJvdGVjdGVkIG9uU2F2ZUNvbXBsZXRlKGVudGl0eUlkPzogbnVtYmVyKTogdm9pZCB7IH07XHJcblxyXG4gIC8qKlxyXG4gICAqIEZ1bmN0aW9uIGNhbGxlZCB3aGVuIHRoZSB1c2VyIGNsaWNrcyBzYXZlLiAgV2Ugd2lsbCBmaXJzdCB0b3VjaCBhbGwgY29udHJvbHMgdG8gc2hvdyB2YWxpZGF0aW9uIG1lc3NhZ2VzXHJcbiAgICogaWYgdGhlIGZvcm0gaXMgaW52YWxpZC4gIElmIHRoZSBmb3JtIGlzIHZhbGlkIHdlIHdpbGwgYXR0ZW1wdCB0byBzYXZlIGFuZCBhbnkgZXJyb3JzIHdpbGwgYmUgcmVwb3J0ZWRcclxuICAgKiBiYWNrIHRvIHRoZSB1c2VyXHJcbiAgICogQHBhcmFtIGV2ZW50XHJcbiAgICovXHJcbiAgcHVibGljIGFzeW5jIG9uU2F2ZShldmVudDogRXZlbnQpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIHRoaXMuZm9ybUdyb3VwLm1hcmtBbGxBc1RvdWNoZWQoKTtcclxuXHJcbiAgICAvLyBJZiB0aGUgZm9ybSBoYXMgcGVuZGluZyBhc3luYyB2YWxpZGF0b3JzLCB3YWl0IGZvciBpdCB0aGVtIHRvIGNvbXBsZXRlIGJlZm9yZSBwcm9jZWVkaW5nXHJcbiAgICBpZiAodGhpcy5mb3JtR3JvdXAucGVuZGluZykge1xyXG4gICAgICBhd2FpdCB0aGlzLmZvcm1Hcm91cC5zdGF0dXNDaGFuZ2VzLnBpcGUoXHJcbiAgICAgICAgZmlsdGVyKHN0YXR1cyA9PiBzdGF0dXMgIT09ICdQRU5ESU5HJyksXHJcbiAgICAgICAgdGFrZSgxKSxcclxuICAgICAgICB0YWtlVW50aWwodGhpcy5kZXN0cm95ZWQpXHJcbiAgICAgICkudG9Qcm9taXNlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuZm9ybUdyb3VwLnZhbGlkKSB7XHJcbiAgICAgIGF3YWl0IHRoaXMuc2F2ZSgpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLy8gT25seSBzaG93IHRoZSBiYW5uZXIgd2l0aCB0aGUgZ2VuZXJpYyBtZXNzYWdlIGlmIHRoZSBwYXJlbnQgY29tcG9uZW50IGhhc24ndCBhbHJlYWR5IHNldCBvbmVcclxuICAgICAgLy8gYnkgaW1wbGVtZW50aW5nIG9uU2F2ZSBmb3IgYWRkaXRpb25hbCB2YWxpZGF0aW9uXHJcbiAgICAgIGlmICh0aGlzLmVycm9ycyA9PT0gJycpIHtcclxuICAgICAgICB0aGlzLnNob3dFcnJvckJhbm5lcih0aGlzLmRlZmF1bHRJbnZhbGlkRm9ybU1lc3NhZ2UpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAodGhpcy5zY3JvbGxDb250YWluZXJTZWxlY3Rvcikge1xyXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5zY3JvbGxTZXJ2aWNlLnNjcm9sbFRvSXRlbSh0aGlzLnNjcm9sbENvbnRhaW5lclNlbGVjdG9yISwgXCIubmctaW52YWxpZFwiKTtcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRnVuY3Rpb24gYXZhaWxhYmxlIHRvIHRyaWdnZXIgYSBzYXZlIGFuZCBieXBhc3MgdGhlIGZvcm0gdmFsaWRhdGlvbiBjaGVja3MuXHJcbiAgICogVGhpcyBpcyB1c2VmdWwgaWYgdGhlIHVzZXIgY2hvb3NlcyBhIHJlbW92ZSBhY3Rpb24gZnJvbSB3aXRoaW4gYW4gZWRpdCBkaWFsb2cuIElmIHRoZSBkaWFsb2cgZm9ybSBpcyBpbnZhbGlkXHJcbiAgICogdGhhdCBpcyBubyBjb25jZXJuIHRvIHRoZSB1c2VyIGlmIHRoZXkgd2lzaCB0byByZW1vdmUgdGhlIGl0ZW0gdGhleSBhcmUgZWRpdGluZy5cclxuICAgKiBAcGFyYW0gZXZlbnRcclxuICAgKi9cclxuICBwdWJsaWMgYXN5bmMgb25TYXZlV2l0aG91dFZhbGlkYXRlKGV2ZW50OiBFdmVudCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgYXdhaXQgdGhpcy5zYXZlKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBGdW5jdGlvbiBjYWxsZWQgd2hlbiB0aGUgY29tcG9uZW50IGlzIGRlc3Ryb3llZFxyXG4gICAqL1xyXG4gIHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMuZGVzdHJveWVkLm5leHQoKTtcclxuICAgIHRoaXMuZGVzdHJveWVkLnVuc3Vic2NyaWJlKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBGdW5jdGlvbiB0aGF0IHdpbGwgbG9nIGFuIGVycm9yIHRoYXQgaXMgcGFzc2VkIGluIHRvIHRoZSBjb25zb2xlXHJcbiAgICogQHBhcmFtIGVcclxuICAgKi9cclxuICBwcm90ZWN0ZWQgb25FcnJvcihlcnJvcjogRXJyb3IpOiB2b2lkIHtcclxuICAgIHRoaXMuZXJyb3JTZXJ2aWNlLmxvZ0NvbnNvbGVFcnJvcihlcnJvcik7XHJcbiAgICB0aGlzLnNob3dFcnJvck92ZXJsYXkoZXJyb3IpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2hvdyBhbiBlcnJvciBtZXNzYWdlIGluIGEgd2hvbGUtcGFnZSBvdmVybGF5LiBUaGlzIHdpbGwgcHJldmVudCBhbnkgbW9yZVxyXG4gICAqIGludGVyYWN0aW9ucyB3aXRoIHRoZSBwYWdlLiBJdCBjYW4gdGFrZSBhIHN0cmluZyBlcnJvciBtZXNzYWdlIG9yIGEgcmF3IEFQSVxyXG4gICAqIGVycm9yIHRoYXQgbmVlZHMgdG8gYmUgcGFyc2VkLiBJZiB0aGUgQVBJIGVycm9yIGlzbid0IHNvbWV0aGluZyB3ZSBjYW4gaGFuZGxlXHJcbiAgICogYSBnZW5lcmljIG1lc3NhZ2UgaXMgc2hvd24gaW5zdGVhZFxyXG4gICAqIEBwYXJhbSB7KEVycm9yIHwgc3RyaW5nKX0gZXJyb3JcclxuICAgKi9cclxuICBwcm90ZWN0ZWQgc2hvd0Vycm9yT3ZlcmxheShlcnJvcjogRXJyb3IgfCBzdHJpbmcpIHtcclxuICAgIHRoaXMuZ2V0RXJyb3JNZXNzYWdlKGVycm9yKS5zdWJzY3JpYmUoKHRyYW5zbGF0ZWRNZXNzYWdlOiBzdHJpbmcpID0+IHtcclxuICAgICAgdGhpcy5zdGF0dXMuc2V0U3RhdHVzKCdlcnJvcicsIHRyYW5zbGF0ZWRNZXNzYWdlKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2hvdyBhbiBlcnJvciBpbiB0aGUgYmFubmVyIGF0IHRoZSB0b3Agb2YgdGhlIHNjcmVlbi4gIFRoaXMgd2lsbCBub3QgcHJvZHVjZSBhXHJcbiAgICogd2hvbGUtcGFnZSBvdmVybGF5IGxpa2UgdGhlIGZ1bmN0aW9uIHNob3dFcnJvciB3aWxsLiAgSXQgY2FuIHRha2UgYSBzdHJpbmcgZXJyb3IgbWVzc2FnZVxyXG4gICAqIG9yIHJhdyBBUEkgZXJyb3IgdGhhdCBuZWVkcyB0byBiZSBwYXJzZWQuICBJZiB0aGUgQVBJIGVycm9yIGlzbid0IHNvbWV0aGluZyB3ZSBjYW4gaGFuZGxlLFxyXG4gICAqIGEgZ2VuZXJpYyBtZXNzYWdlIChjdXN0b21pemFibGUgdmlhIHVua25vd25FcnJvckRlZmF1bHQpIGlzIHNob3duIGluc3RlYWQuXHJcbiAgICogQHBhcmFtIGVycm9yXHJcbiAgICogQHBhcmFtIHVua25vd25FcnJvckRlZmF1bHRcclxuICAgKi9cclxuICBwcm90ZWN0ZWQgc2hvd0Vycm9yQmFubmVyKGVycm9yOiBFcnJvciB8IHN0cmluZywgdW5rbm93bkVycm9yRGVmYXVsdD86IHN0cmluZyk6IHZvaWQge1xyXG4gICAgdGhpcy5nZXRFcnJvck1lc3NhZ2UoZXJyb3IsIHVua25vd25FcnJvckRlZmF1bHQpLnN1YnNjcmliZSgodHJhbnNsYXRlZE1lc3NhZ2U6IHN0cmluZykgPT4ge1xyXG4gICAgICB0aGlzLl9lcnJvcnMgPSB0cmFuc2xhdGVkTWVzc2FnZTtcclxuICAgICAgdGhpcy5zaG93U3RhdHVzKFBhZ2VTdGF0dXMuTG9hZGVkKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUGFyc2VzIGFuZCB0cmFuc2xhdGVzIGFuIEFQSSBlcnJvciBvciBlcnJvciBzdHJpbmcuXHJcbiAgICogQHBhcmFtIGVcclxuICAgKiBAcGFyYW0gdW5rbm93bkVycm9yRGVmYXVsdFxyXG4gICAqL1xyXG4gIHByb3RlY3RlZCBnZXRFcnJvck1lc3NhZ2UoZTogRXJyb3IgfCBzdHJpbmcsIHVua25vd25FcnJvckRlZmF1bHQ/OiBzdHJpbmcpOiBPYnNlcnZhYmxlPHN0cmluZz4ge1xyXG4gICAgbGV0IGV4dHJhY3RlZE1lc3NhZ2UgPSB0aGlzLmVycm9yU2VydmljZS5wYXJzZUFwaUVycm9yKGUsIHVua25vd25FcnJvckRlZmF1bHQpO1xyXG4gICAgcmV0dXJuIHRoaXMudHJhbnNsYXRlU2VydmljZS5nZXQoZXh0cmFjdGVkTWVzc2FnZSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDbGVhciB0aGUgZXJyb3JzIHRvIGhpZGUgdGhlIGVycm9ycyBiYW5uZXIuXHJcbiAgICovXHJcbiAgcHJvdGVjdGVkIGhpZGVFcnJvckJhbm5lcigpOiB2b2lkIHtcclxuICAgIHRoaXMuX2Vycm9ycyA9ICcnO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ2hhbmdlIHRoZSBkaXNwbGF5IHN0YXR1cyB0byBvdmVybGF5IHRoZSB3aG9sZSBwYWdlIHdoaWxlIGxvYWRpbmcgb3Igc2F2aW5nXHJcbiAgICogYW5kIGNsZWFyIGl0IHdoZW4gdGhlIGZvcm0gaXMgcmVhZHlcclxuICAgKiBAcHJvdGVjdGVkXHJcbiAgICogQHBhcmFtIHtQYWdlU3RhdHVzfSBzdGF0dXNcclxuICAgKiBAbWVtYmVyb2YgRm9ybUJhc2VDb21wb25lbnRcclxuICAgKi9cclxuICBwcm90ZWN0ZWQgc2hvd1N0YXR1cyhzdGF0dXM6IFBhZ2VTdGF0dXMpIHtcclxuICAgIGxldCBrbm93blN0YXR1cyA9IFBhZ2VTdGF0dXNlc1tzdGF0dXNdO1xyXG4gICAgaWYgKGtub3duU3RhdHVzKSB7XHJcbiAgICAgIHRoaXMuc3RhdHVzLnNldFN0YXR1cyhrbm93blN0YXR1cy5zdGF0dXMsIGtub3duU3RhdHVzLm1lc3NhZ2UsIHVuZGVmaW5lZCwga25vd25TdGF0dXMubm9EYXRhVGVtcGxhdGUsIGtub3duU3RhdHVzLm92ZXJsYXlDbGFzc0xpc3QpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQWxsb3dzIHRoZSBjb21wb25lbnQgdG8gZW50ZXIgYSBwZW5kaW5nIHN0YXR1cyBhbmQgZXhlY3V0ZSBhIGZ1bmN0aW9uIHRoYXQgb24gY29tcGxldGlvbiB3aWxsIHJldHVybiB0aGUgc3RhdHVzXHJcbiAgICogdG8gaGFzRGF0YS4gSWYgYW4gZXJyb3Igb2NjdXJzIHdpdGhpbiB0aGUgY2FsbGJhY2sgYW4gZXJyb3IgYmFubmVyIGNhbiBiZSBzaG93bi5cclxuICAgKiBAcGFyYW0gY2FsbGJhY2tcclxuICAgKiBAcGFyYW0gcGVuZGluZ01lc3NhZ2UgLSBvcHRpb25hbCBjdXN0b20gcGVuZGluZyBtZXNzYWdlXHJcbiAgICogQHJldHVybnNcclxuICAgKi9cclxuICBwcm90ZWN0ZWQgYXN5bmMgcnVuQmxvY2tpbmdBY3Rpb24oY2FsbGJhY2s6ICgpID0+IFByb21pc2U8YW55PiwgcGVuZGluZ01lc3NhZ2U/OiBzdHJpbmcpOiBQcm9taXNlPGFueT4ge1xyXG4gICAgdGhpcy5oaWRlRXJyb3JCYW5uZXIoKTtcclxuICAgIHRoaXMuc3RhdHVzLnNldFN0YXR1cygncGVuZGluZycsIHBlbmRpbmdNZXNzYWdlKTtcclxuXHJcbiAgICByZXR1cm4gY2FsbGJhY2soKS5jYXRjaChlcnJvciA9PiB7XHJcbiAgICAgIHRoaXMuc2hvd0Vycm9yQmFubmVyKGVycm9yKTtcclxuICAgICAgLy8gVGhyb3cgdGhlIGVycm9yIGZvciBhbnkgZG93bnN0cmVhbSBjb21wb25lbnRzIHRoYXQgbWF5IGJlIGxpc3RlbmluZyBhbmQgbmVlZCB0byByZWFjdFxyXG4gICAgICAvLyB0byBhbnkgZXJyb3JzIGhhcHBlbmluZyB3aXRoaW4gdGhpcyBjYWxsYmFja1xyXG4gICAgICB0aHJvdyAoZXJyb3IpO1xyXG4gICAgfSkuZmluYWxseSgoKSA9PiB7XHJcbiAgICAgIHRoaXMuc2hvd1N0YXR1cyhQYWdlU3RhdHVzLkxvYWRlZCk7XHJcbiAgICB9KTtcclxuICB9O1xyXG5cclxuICAvKipcclxuICAgKiBQYXJzZXMgdGhlIHBhZ2UgaW5pdCByZXN1bHQgYW5kIHNldHMgdGhlIG5lY2Vzc2FyeSBwcm9wZXJ0aWVzIG9uIHRoZSBwYWdlXHJcbiAgICogQHBhcmFtIHJlc3VsdFxyXG4gICAqL1xyXG4gIHByaXZhdGUgcGFyc2VJbml0UmVzdWx0KHJlc3VsdDogUGFnZUluaXRSZXN1bHQpOiB2b2lkIHtcclxuICAgIHRoaXMuaW5pdFJlc3VsdCA9IHJlc3VsdDtcclxuICAgIHRoaXMudGl0bGUgPSByZXN1bHQudGl0bGU7XHJcbiAgICB0aGlzLnN1YlRpdGxlID0gcmVzdWx0LnN1YlRpdGxlO1xyXG4gICAgdGhpcy5zdWJUaXRsZVVybCA9IHJlc3VsdC5zdWJUaXRsZVVybDtcclxuICAgIHRoaXMuYnJlYWRjcnVtYnMgPSByZXN1bHQuYnJlYWRjcnVtYnM7XHJcbiAgICB0aGlzLmhlbHAgPSByZXN1bHQuaGVscDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENvbnRyb2xzIHRoZSBwYWdlIHN0YXR1cywgdHJpZ2dlcnMgdGhlIHNhdmUgYWN0aW9uIGFuZCBoYW5kbGVzIGVycm9ycyB0aHJvd24uXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBhc3luYyBzYXZlKCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgdGhpcy5zaG93U3RhdHVzKFBhZ2VTdGF0dXMuU2F2aW5nKTtcclxuXHJcbiAgICB0cnkge1xyXG4gICAgICBhd2FpdCB0aGlzLmFwcGx5TW9kZWxVcGRhdGVzKCk7XHJcbiAgICAgIGxldCBlbnRpdHlJZCA9IGF3YWl0IHRoaXMuc2F2ZVRvQXBpKCkgfHwgLTE7XHJcblxyXG4gICAgICB0aGlzLl9lcnJvcnMgPSAnJztcclxuXHJcbiAgICAgIHRoaXMub25TYXZlQ29tcGxldGUoZW50aXR5SWQpO1xyXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgLy9jbGVhciB0aGUgXCJzYXZpbmdcIiBvdmVybGF5IGFuZCBzaG93IHRoZSBtZXNzYWdlIGF0IHRoZSB0b3Agb2YgdGhlIHZpZXcgdGhyb3VnaCB0aGUgZXJyb3JzIHByb3BlcnR5XHJcbiAgICAgIHRoaXMuc2hvd0Vycm9yQmFubmVyKGVycm9yLCB0aGlzLmRlZmF1bHRVbmtub3duU2F2ZUVycm9yKTtcclxuICAgICAgdGhpcy5zcGxhc2hTZXJ2aWNlLmhpZGVTcGxhc2goKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNldHMgdXAgdGhlIHJvdXRlciBldmVudCBzdWJzY3JpcHRpb25zXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBzZXRVcFJvdXRlclN1YnNjcmlwdGlvbnMoKTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMubmF2aWdhdGlvbkVuZFN1YnNjcmlwdGlvbiAmJiAhdGhpcy5kZXN0cm95ZWQuY2xvc2VkKSB7XHJcbiAgICAgIHRoaXMucHJldmlvdXNVcmwgPSB0aGlzLnJvdXRlci51cmw7XHJcblxyXG4gICAgICAvLyBSZWFjdCB0byBuYXZpZ2F0aW9uIGV2ZW50c1xyXG4gICAgICB0aGlzLm5hdmlnYXRpb25FbmRTdWJzY3JpcHRpb24gPSB0aGlzLnJvdXRlci5ldmVudHMucGlwZShcclxuICAgICAgICB0YWtlVW50aWwodGhpcy5kZXN0cm95ZWQpLFxyXG4gICAgICAgIGZpbHRlcihlID0+IGUgaW5zdGFuY2VvZiBOYXZpZ2F0aW9uRW5kKSxcclxuICAgICAgKS5zdWJzY3JpYmUoZSA9PiB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgIGxldCBjdXJyZW50VXJsOiBzdHJpbmcgPSAoPE5hdmlnYXRpb25FbmQ+ZSkudXJsO1xyXG5cclxuICAgICAgICAgIGlmICh0aGlzLmlnbm9yZVF1ZXJ5UGFyYW1zT25OYXZpZ2F0aW9uQ2hhbmdlKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnByZXZpb3VzVXJsLnNwbGl0KCc/JylbMF0gIT09IGN1cnJlbnRVcmwuc3BsaXQoJz8nKVswXSkge1xyXG4gICAgICAgICAgICAgIHRoaXMubmF2aWdhdGlvbkVuZEhhbmRsZXIoKDxOYXZpZ2F0aW9uRW5kPmUpLnVybCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnByZXZpb3VzVXJsICE9PSBjdXJyZW50VXJsKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5uYXZpZ2F0aW9uRW5kSGFuZGxlcigoPE5hdmlnYXRpb25FbmQ+ZSkudXJsKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgICB0aGlzLm9uRXJyb3IoZXJyb3IpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIG5hdmlnYXRpb25FbmRIYW5kbGVyKHVybDogc3RyaW5nKTogdm9pZCB7XHJcbiAgICB0aGlzLnByZXZpb3VzVXJsID0gdXJsO1xyXG4gICAgdGhpcy5vbk5hdmlnYXRpb25FbmQoKTtcclxuICB9XHJcbn1cclxuIl19
387
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFnZS1iYXNlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvc3JjL2xpYi9zaGFyZWQvcGFnZS9wYWdlLWJhc2UvcGFnZS1iYXNlLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWlCLFNBQVMsRUFBRSxXQUFXLEVBQStCLE1BQU0sZUFBZSxDQUFDO0FBQ25HLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxjQUFjLEVBQUUsYUFBYSxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3hFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3ZELE9BQU8sRUFBYyxhQUFhLEVBQUUsT0FBTyxFQUFnQixNQUFNLE1BQU0sQ0FBQztBQUN4RSxPQUFPLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUV6RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDM0QsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQ25FLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFFdkUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxzREFBc0QsQ0FBQztBQUMvRSxPQUFPLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBRSxNQUFNLGtCQUFrQixDQUFDOztBQUU1RCxNQUFNLE9BQU8sY0FBYztJQUEzQjtRQUNFLFVBQUssR0FBWSxFQUFFLENBQUM7UUFDcEIsYUFBUSxHQUFZLEVBQUUsQ0FB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cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWZ0ZXJWaWV3SW5pdCwgRGlyZWN0aXZlLCBIb3N0QmluZGluZywgSW5qZWN0b3IsIE9uRGVzdHJveSwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFVudHlwZWRGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBOYXZpZ2F0aW9uRW5kLCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XHJcbmltcG9ydCB7IE9ic2VydmFibGUsIFJlcGxheVN1YmplY3QsIFN1YmplY3QsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBmaWx0ZXIsIHRha2UsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgTmF2SXRlbSB9IGZyb20gJy4uLy4uLy4uL2NvbnRyb2xzL25hdmlnYXRpb24vbmF2LWl0ZW0nO1xyXG5pbXBvcnQgeyBFcnJvclNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9jb3JlL2Vycm9yLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBSb3V0ZXJIZWxwZXIgfSBmcm9tICcuLi8uLi8uLi9jb3JlL3JvdXRlci1oZWxwZXIuc2VydmljZSc7XHJcbmltcG9ydCB7IFNjcm9sbFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9jb3JlL3Njcm9sbC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRGlhbG9nU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL2Rpc3BsYXkvZGlhbG9nL2RpYWxvZy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgSGVscCB9IGZyb20gJy4uLy4uLy4uL2Rpc3BsYXkvaGVscC9oZWxwLXR5cGVzJztcclxuaW1wb3J0IHsgU3BsYXNoU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL2Rpc3BsYXkvc3BsYXNoL3NwbGFzaC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgT3ZlcmxheSB9IGZyb20gJy4uLy4uLy4uL2Rpc3BsYXkvdmlldy1vdmVybGF5L3ZpZXctb3ZlcmxheS5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBQYWdlU3RhdHVzLCBQYWdlU3RhdHVzZXMgfSBmcm9tICcuLi9wYWdlLXN0YXR1c2VzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBQYWdlSW5pdFJlc3VsdCB7XHJcbiAgdGl0bGU/OiBzdHJpbmcgPSAnJztcclxuICBzdWJUaXRsZT86IHN0cmluZyA9ICcnO1xyXG4gIHN1YlRpdGxlVXJsPzogc3RyaW5nID0gJyc7XHJcbiAgYnJlYWRjcnVtYnM/OiBOYXZJdGVtW107XHJcbiAgaGVscD86IEhlbHA7XHJcbn1cclxuXHJcbkBEaXJlY3RpdmUoKVxyXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgUGFnZUJhc2VDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSB7XHJcbiAgLyoqIERlZmF1bHQgY3NzIGNsYXNzZXMgYXBwbGllZCB0byBob3N0IGVsZW1lbnQgKi9cclxuICBASG9zdEJpbmRpbmcoJ2NsYXNzJykgcHJvdGVjdGVkIGNsYXNzTGlzdCA9ICdkLWZsZXggZmxleC1ncm93JztcclxuXHJcbiAgLyoqXHJcbiAgICogVGl0bGUgZm9yIHRoZSBwYWdlIGRpc3BsYXllZCBpbiB0aGUgaGVhZGVyXHJcbiAgICovXHJcbiAgcHVibGljIHRpdGxlPzogc3RyaW5nID0gJyc7XHJcblxyXG4gIC8qKlxyXG4gICAqIFN1YiB0aXRsZSBmb3IgdGhlIHBhZ2UgZGlzcGxheWVkIGluIHRoZSBoZWFkZXJcclxuICAgKi9cclxuICBwdWJsaWMgc3ViVGl0bGU/OiBzdHJpbmcgPSAnJztcclxuXHJcbiAgLyoqXHJcbiAgICogU3ViIHRpdGxlIHVybCBmb3IgdGhlIHBhZ2UgZGlzcGxheWVkIGluIHRoZSBoZWFkZXJcclxuICAgKi9cclxuICBwdWJsaWMgc3ViVGl0bGVVcmw/OiBzdHJpbmcgPSAnJztcclxuXHJcbiAgLyoqXHJcbiAgICogU3RhdHVzIG92ZXJsYXkgZm9yIHRoZSBwYWdlXHJcbiAgICovXHJcbiAgcHVibGljIHN0YXR1czogT3ZlcmxheSA9IG5ldyBPdmVybGF5KCdwZW5kaW5nJywgJ0xvYWRpbmcnKTtcclxuXHJcbiAgLyoqXHJcbiAgICogQnJlYWRjcnVtYnMgZGlzcGxheWVkIGluIHRoZSBoZWFkZXJcclxuICAgKi9cclxuICBwdWJsaWMgYnJlYWRjcnVtYnM/OiBOYXZJdGVtW107XHJcblxyXG4gIC8qKlxyXG4gICAqIFJlc3VsdCByZXR1cm5lZCBmcm9tIHRoZSBvbkluaXQgZnVuY3Rpb25cclxuICAgKi9cclxuICBwdWJsaWMgaW5pdFJlc3VsdCE6IFBhZ2VJbml0UmVzdWx0O1xyXG5cclxuICAvKipcclxuICAgKiBIZWxwIGluZm9ybWF0aW9uIGZvciB0aGUgY29tcG9uZW50LCB3aGljaCBjYW4gb25seSBiZSBzZXQgdGhyb3VnaCBvbkluaXRcclxuICAgKi9cclxuICBwdWJsaWMgaGVscDogSGVscCB8IHVuZGVmaW5lZDtcclxuXHJcbiAgLyoqXHJcbiAgICogRm9ybSBncm91cCB0byBiZSB1c2VkIGlmIG5lZWRlZCBieSB0aGUgcGFnZVxyXG4gICAqL1xyXG4gIHB1YmxpYyBmb3JtR3JvdXA6IFVudHlwZWRGb3JtR3JvdXAgPSBuZXcgVW50eXBlZEZvcm1Hcm91cCh7fSk7XHJcblxyXG4gIC8qKlxyXG4gICAqIERlZmF1bHQgaW52YWxpZCBmb3JtIG1lc3NhZ2UsIG92ZXJyaWRlIGlmIGEgbW9yZSBzcGVjaWZpYyBtZXNzYWdlIGlzIG5lZWRlZFxyXG4gICAqL1xyXG4gIHB1YmxpYyBkZWZhdWx0SW52YWxpZEZvcm1NZXNzYWdlOiBzdHJpbmcgPSAnUGxlYXNlQ29ycmVjdEZvcm1fU0MnO1xyXG5cclxuICAvKipcclxuICAgKiBEZWZhdWx0IHVua25vd24gc2F2ZSBlcnJvciBtZXNzYWdlLCBvdmVycmlkZSBpZiBhIG1vcmUgc3BlY2lmaWMgbWVzc2FnZSBpcyBuZWVkZWRcclxuICAgKi9cclxuICBwdWJsaWMgZGVmYXVsdFVua25vd25TYXZlRXJyb3I6IHN0cmluZyA9ICdQYWdlQmFzZVVua25vd25TYXZlRXJyb3JfU0MnO1xyXG5cclxuICAvKipcclxuICAgKiBVc2VkIHRvIG9wdCBvdXQgb2YgaGlkaW5nIHRoZSBzcGxhc2ggc2NyZWVuIHdoZW4gdGhlIHBhZ2UgaXMgbG9hZGVkXHJcbiAgICovXHJcbiAgcHVibGljIHNraXBIaWRlU3BsYXNoT25Db21wbGV0ZTogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAvKipcclxuICAgKiBXaGVuIHNldCB0byB0cnVlIGFueSBuYXZpZ2F0aW9uIGVuZCBldmVudHMgdGhhdCBhcmUgc3RyaWN0bHkgcXVlcnkgcGFyYW0gY2hhbmdlcyB3aWxsXHJcbiAgICogbm90IGNhbGwgdGhlIG9uTmF2aWdhdGlvbkVuZCBmdW5jdGlvbi4gVGhpcyBhbGxvd3MgcGFnZXMgdG8gY2hhbmdlIHRoZSB2aWV3IHdpdGggcXVlcnlcclxuICAgKiBwYXJhbXMgYW5kIG5vdCB0cmlnZ2VyIGEgZnVsbCByZWZyZXNoLlxyXG4gICAqL1xyXG4gIHB1YmxpYyBpZ25vcmVRdWVyeVBhcmFtc09uTmF2aWdhdGlvbkNoYW5nZTogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBwcml2YXRlIHByZXZpb3VzVXJsOiBzdHJpbmcgPSBcIlwiO1xyXG5cclxuICAvKipcclxuICAgKiBVc2VkIHRvIHVuc3Vic2NyaWJlIGZyb20gb2JzZXJ2YWJsZXNcclxuICAgKi9cclxuICBwdWJsaWMgZGVzdHJveWVkOiBTdWJqZWN0PGFueT4gPSBuZXcgU3ViamVjdDxhbnk+KCk7XHJcblxyXG4gIC8qKlxyXG4gICAqIFVzZWQgdG8ga25vdyB3aGVuIHRoZSBwYWdlIGhhcyBiZWVuIGxvYWRlZCwgdGhpcyB3aWxsIGJlIGNvbXBsZXRlZFxyXG4gICAqIGFmdGVyIG9uQWZ0ZXJWaWV3SW5pdFxyXG4gICAqL1xyXG4gIHByaXZhdGUgX2FmdGVyVmlld0luaXRDb21wbGV0ZTogUmVwbGF5U3ViamVjdDx2b2lkPiA9IG5ldyBSZXBsYXlTdWJqZWN0KCk7XHJcbiAgcHVibGljIGFmdGVyVmlld0luaXRDb21wbGV0ZTogT2JzZXJ2YWJsZTx2b2lkPiA9IHRoaXMuX2FmdGVyVmlld0luaXRDb21wbGV0ZTtcclxuXHJcbiAgLyoqXHJcbiAgICogSWYgZGVmaW5lZCB0aGUgZm9ybSB3aWxsIGF1dG9tYXRpY2FsbHkgc2Nyb2xsIHRvIHRoZSBmaXJzdCBpbnZhbGlkIGZvcm0gY29udHJvbFxyXG4gICAqIGlmIGl0J3Mgb3V0c2lkZSBvZiB0aGUgdmlld1xyXG4gICAqL1xyXG4gIHByb3RlY3RlZCBzY3JvbGxDb250YWluZXJTZWxlY3Rvcjogc3RyaW5nIHwgdW5kZWZpbmVkO1xyXG5cclxuICAvKipcclxuICAgKiBTdWJzY3JpcHRpb24gdG8gdGhlIHJvdXRlciBldmVudHMgTmF2aWdhdGlvbkVuZFxyXG4gICAqIFVzZWQgdG8ga25vdyBpZiBhbHJlYWR5IHN1YnNjcmliZWQgdG9cclxuICAgKi9cclxuICBwcml2YXRlIG5hdmlnYXRpb25FbmRTdWJzY3JpcHRpb24/OiBTdWJzY3JpcHRpb247XHJcblxyXG4gIC8qKlxyXG4gICAqIENvbW1vbiBzZXJ2aWNlcyB1c2VkIGJ5IHBhZ2UtYmFzZVxyXG4gICAqL1xyXG4gIHByb3RlY3RlZCBlcnJvclNlcnZpY2U6IEVycm9yU2VydmljZTtcclxuICBwcm90ZWN0ZWQgdHJhbnNsYXRlU2VydmljZTogVHJhbnNsYXRlU2VydmljZTtcclxuICBwcm90ZWN0ZWQgc2Nyb2xsU2VydmljZTogU2Nyb2xsU2VydmljZTtcclxuICBwcm90ZWN0ZWQgcm91dGVyOiBSb3V0ZXI7XHJcbiAgcHJvdGVjdGVkIGFjdGl2YXRlZFJvdXRlOiBBY3RpdmF0ZWRSb3V0ZTtcclxuICBwcm90ZWN0ZWQgZGlhbG9nU2VydmljZTogRGlhbG9nU2VydmljZTtcclxuICBwcm90ZWN0ZWQgc3BsYXNoU2VydmljZTogU3BsYXNoU2VydmljZTtcclxuICBwcm90ZWN0ZWQgcm91dGVySGVscGVyOiBSb3V0ZXJIZWxwZXI7XHJcblxyXG4gIGNvbnN0cnVjdG9yKGluamVjdG9yOiBJbmplY3Rvcikge1xyXG4gICAgdGhpcy5lcnJvclNlcnZpY2UgPSBpbmplY3Rvci5nZXQoRXJyb3JTZXJ2aWNlKTtcclxuICAgIHRoaXMudHJhbnNsYXRlU2VydmljZSA9IGluamVjdG9yLmdldChUcmFuc2xhdGVTZXJ2aWNlKTtcclxuICAgIHRoaXMuc2Nyb2xsU2VydmljZSA9IGluamVjdG9yLmdldChTY3JvbGxTZXJ2aWNlKTtcclxuICAgIHRoaXMucm91dGVyID0gaW5qZWN0b3IuZ2V0KFJvdXRlcik7XHJcbiAgICB0aGlzLmFjdGl2YXRlZFJvdXRlID0gaW5qZWN0b3IuZ2V0KEFjdGl2YXRlZFJvdXRlKTtcclxuICAgIHRoaXMuZGlhbG9nU2VydmljZSA9IGluamVjdG9yLmdldChEaWFsb2dTZXJ2aWNlKTtcclxuICAgIHRoaXMuc3BsYXNoU2VydmljZSA9IGluamVjdG9yLmdldChTcGxhc2hTZXJ2aWNlKTtcclxuICAgIHRoaXMucm91dGVySGVscGVyID0gaW5qZWN0b3IuZ2V0KFJvdXRlckhlbHBlcik7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBFcnJvcnMgdG8gYmUgc2hvd24gZm9yIHRoZSBjb21wb25lbnQuXHJcbiAgICogQXV0b21hdGljYWxseSBwb3B1bGF0ZWQgb24gcHJvbWlzZSByZWplY3Rpb24gZnJvbSBzYXZlIGFuZCBzaGFyZWQgd2l0aCB0aGUgVUkuXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBfZXJyb3JzOiBzdHJpbmcgPSAnJztcclxuICBwdWJsaWMgZ2V0IGVycm9ycygpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuX2Vycm9ycztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE9wdGlvbmFsIGxpZmVjeWNsZSBob29rIHRoYXQgaXMgY2FsbGVkIGFzIHBhcnQgb2YgdGhlIEFuZ3VsYXIgbmdPbkluaXQgbGlmZWN5Y2xlIGhvb2suXHJcbiAgICogQ2FsbGVkIGJlZm9yZSBvbkluaXQgaXMgY2FsbGVkIGZvciB0aGUgZmlyc3QgdGltZS4gQWRkIHNldHVwIGxvZ2ljIGhlcmUgdGhhdCBkb2VzXHJcbiAgICogbm90IG5lZWQgdG8gYmUgcnVuIG9uIGV2ZXJ5IHJlbG9hZC5cclxuICAgKi9cclxuICBwcm90ZWN0ZWQgb25GaXJzdEluaXQoKTogdm9pZCB7IH1cclxuXHJcbiAgLyoqXHJcbiAgICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGluIHRoZSBkZXJpdmVkIGNsYXNzIGFzIHBhcnQgb2YgdGhlIEFuZ3VsYXIgbmdPbkluaXRcclxuICAgKiBsaWZlY3ljbGUgaG9vay4gSXQgbXVzdCBwcm92aWRlIGEgUGFnZUluaXRSZXN1bHQgYmFjayB0byB0aGUgYmFzZSBjbGFzcyB0byBwcm9wZXJseVxyXG4gICAqIHNldCB1cCB0aGUgcGFnZS5cclxuICAgKi9cclxuICBwcm90ZWN0ZWQgYWJzdHJhY3Qgb25Jbml0KCk6IFByb21pc2U8UGFnZUluaXRSZXN1bHQ+O1xyXG4gIHByb3RlY3RlZCBpbml0UHJvbWlzZSE6IFByb21pc2U8UGFnZUluaXRSZXN1bHQ+O1xyXG5cclxuICBwdWJsaWMgYXN5bmMgbmdPbkluaXQoKSB7XHJcbiAgICB0cnkge1xyXG4gICAgICB0aGlzLnNob3dTdGF0dXMoUGFnZVN0YXR1cy5Mb2FkaW5nKTtcclxuICAgICAgdGhpcy5zZXRVcFJvdXRlclN1YnNjcmlwdGlvbnMoKTtcclxuICAgICAgdGhpcy5vbkZpcnN0SW5pdCgpO1xyXG4gICAgICB0aGlzLmluaXRQcm9taXNlID0gdGhpcy5vbkluaXQoKTtcclxuXHJcbiAgICAgIGF3YWl0IHRoaXMuaW5pdFByb21pc2U7XHJcbiAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICB0aGlzLnNwbGFzaFNlcnZpY2UuaGlkZVNwbGFzaCgpO1xyXG4gICAgICB0aGlzLm9uRXJyb3IoZXJyb3IpO1xyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBqdXN0IGFmdGVyIHRoZSBBbmd1bGFyIExpZmVjeWNsZSBldmVudCBuZ09uQWZ0ZXJWaWV3SW5pdC5cclxuICAgKiBJdCBmaXJlcyBhZnRlciBhbGwgc3ViLWNvbXBvbmVudHMgaGF2ZSBnb25lIHRocm91Z2ggdGhlaXIgaW5pdGlhbGl6YXRpb24gcGhhc2UuXHJcbiAgICogSXQgaXMgaW4gdGhpcyBwaGFzZSB0aGF0IHRoZSB2aWV3IGNvbXBvbmVudHMgc2hvdWxkIGFscmVhZHkgZXhpc3QsIHNvIGEgZGVyaXZlZCBjbGFzcyBzaG91bGRcclxuICAgKiBsb2FkIGRhdGEgZnJvbSB0aGUgQVBJIHRvIHBvcHVsYXRlIGFueSB2aWV3IGNvbXBvbmVudHMuIFRoZSBwcm9taXNlIHRoYXRcclxuICAgKiBpcyByZXR1cm5lZCBtdXN0IG5vdCByZXNvbHZlIHVudGlsIGFsbCByZXF1aXJlZCBkYXRhIGhhcyBjb21wbGV0ZWx5IGxvYWRlZFxyXG4gICAqL1xyXG4gIHByb3RlY3RlZCBhc3luYyBvbkFmdGVyVmlld0luaXQoKTogUHJvbWlzZTx2b2lkPiB7IH07XHJcbiAgcHVibGljIGFzeW5jIG5nQWZ0ZXJWaWV3SW5pdCgpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIHRyeSB7XHJcbiAgICAgIGNvbnN0IGluaXRSZXN1bHQgPSBhd2FpdCB0aGlzLmluaXRQcm9taXNlO1xyXG4gICAgICB0aGlzLnBhcnNlSW5pdFJlc3VsdChpbml0UmVzdWx0KTtcclxuXHJcbiAgICAgIGF3YWl0IHRoaXMub25BZnRlclZpZXdJbml0KCk7XHJcblxyXG4gICAgICB0aGlzLl9hZnRlclZpZXdJbml0Q29tcGxldGUubmV4dCgpO1xyXG4gICAgICB0aGlzLl9hZnRlclZpZXdJbml0Q29tcGxldGUuY29tcGxldGUoKTtcclxuXHJcbiAgICAgIGF3YWl0IHRoaXMub25Gb3JtTG9hZENvbXBsZXRlKCk7XHJcblxyXG4gICAgICBpZiAodGhpcy5zdGF0dXMuc3RhdHVzID09PSAncGVuZGluZycpIHtcclxuICAgICAgICB0aGlzLnNob3dTdGF0dXMoUGFnZVN0YXR1cy5Mb2FkZWQpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoIXRoaXMuc2tpcEhpZGVTcGxhc2hPbkNvbXBsZXRlKSB7XHJcbiAgICAgICAgdGhpcy5zcGxhc2hTZXJ2aWNlLmhpZGVTcGxhc2goKTtcclxuICAgICAgfVxyXG5cclxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgIHRoaXMuc3BsYXNoU2VydmljZS5oaWRlU3BsYXNoKCk7XHJcbiAgICAgIHRoaXMub25FcnJvcihlcnJvcik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBBIGxpZmVjeWNsZSBtZXRob2QgdGhhdCBleGVjdXRlcyBvbmNlIGFsbCBkYXRhIGhhcyBiZWVuIGxvYWRlZFxyXG4gICAqIHRocm91Z2ggbmdBZnRlclZpZXdJbml0IGFuZCBmcm9tIGxvY2FsIHN0b3JhZ2UgaWYgcmVxdWlyZWQuXHJcbiAgICogSXQgaXMgYXQgdGhpcyBwb2ludCB0aGF0IHlvdSBjYW4gc3Vic2NyaWJlIHRvIGNoYW5nZXMgb24gdGhlIGZvcm1cclxuICAgKiByZWxpYWJseVxyXG4gICAqXHJcbiAgICogQHByb3RlY3RlZFxyXG4gICAqIEBtZW1iZXJvZiBQYWdlQmFzZUNvbXBvbmVudFxyXG4gICAqL1xyXG4gIHByb3RlY3RlZCBhc3luYyBvbkZvcm1Mb2FkQ29tcGxldGUoKTogUHJvbWlzZTxhbnk+IHsgfVxyXG5cclxuICAvKipcclxuICAgKiBBIGxpZmVjeWNsZSBob29rIHRoYXQgaXMgY2FsbGVkIGFmdGVyIGV2ZXJ5IE5hdmlnYXRpb25FbmQgZXZlbnQuXHJcbiAgICovXHJcbiAgcHJvdGVjdGVkIG9uTmF2aWdhdGlvbkVuZCgpOiB2b2lkIHsgfVxyXG5cclxuICAvKipcclxuICAgKiBSZWxvYWQgdGhlIGNvbXBvbmVudCBraWNraW5nIG9mZiB0aGUgbmdPbkluaXQgYW5kIG5nQWZ0ZXJWaWV3SW5pdCBsaWZlY3ljbGUgaG9va3MuXHJcbiAgICogQW55IHN0YXRlIHRoYXQgbmVlZHMgdG8gYmUgcmVzZXQgc2hvdWxkIGJlIGRvbmUgc28gYmVmb3JlIGNhbGxpbmcgdGhpcyBtZXRob2QuXHJcbiAgICovXHJcbiAgcHVibGljIHJlbG9hZCgpOiB2b2lkIHtcclxuICAgIHRoaXMuX2FmdGVyVmlld0luaXRDb21wbGV0ZSA9IG5ldyBSZXBsYXlTdWJqZWN0KCk7XHJcblxyXG4gICAgdGhpcy5zaG93U3RhdHVzKFBhZ2VTdGF0dXMuTG9hZGluZyk7XHJcbiAgICB0aGlzLmluaXRQcm9taXNlID0gdGhpcy5vbkluaXQoKTtcclxuICAgIHRoaXMubmdBZnRlclZpZXdJbml0KCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBXaGVuIG92ZXJyaWRkZW4gaW4gYSBkZXJpdmVkIGNsYXNzIHRoaXMgbWV0aG9kIHdpbGwgc3luYyB0aGUgZm9ybSBzdGF0ZVxyXG4gICAqIGludG8gdGhlIG9iamVjdCB0aGF0IHdpbGwgYmUgcGVyc2lzdGVkIHRvIHRoZSBBUEkuIFRoZSB2YWx1ZSBzaG91bGQgbm90XHJcbiAgICogYWN0dWFsbHkgYmUgc2VudCB0byB0aGUgQVBJIHlldC5cclxuICAgKi9cclxuICBwcm90ZWN0ZWQgYXN5bmMgYXBwbHlNb2RlbFVwZGF0ZXMoKTogUHJvbWlzZTx2b2lkPiB7IH07XHJcblxyXG4gIC8qKlxyXG4gICAqIFNhdmUgdGhlIG1vZGVsIHN0YXRlIHRvIHRoZSBBUEkgYW5kIHJldHVybiBhIHByb21pc2UgdGhhdFxyXG4gICAqIGNvbnRhaW5zIHRoZSB1cGRhdGVkIGVudGl0eUlELiBUaGUgcHJvbWlzZSBzaG91bGQgYmUgcmVqZWN0ZWRcclxuICAgKiBpZiB0aGUgc2F2ZSBmYWlscyBhbmQgZXJyb3JzIGFuZCB0aGUgb3ZlcmxheSBzdGF0dXMgd2lsbCBiZSB1cGRhdGVkXHJcbiAgICogYWNjb3JkaW5nbHlcclxuICAgKi9cclxuICBwcm90ZWN0ZWQgYXN5bmMgc2F2ZVRvQXBpKCk6IFByb21pc2U8bnVtYmVyIHwgdm9pZD4geyB9O1xyXG5cclxuICAvKipcclxuICAgKiBDYWxsZWQgYWZ0ZXIgdGhlIHNhdmUgaGFzIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkuXHJcbiAgICogSXQgaXMgdGhlIHJlc3BvbnNpYmlsaXR5IG9mIHRoZSBkZXJpdmVkIGNsYXNzIHRvIG5hdmlnYXRlXHJcbiAgICogdG8gYSBwcm9wZXJ0aWVzL3N0YXR1cyBwYWdlIG9yIGVtaXQgYXBwcm9wcmlhdGVseSBpZiB3aXRoaW4gYSBkaWFsb2dcclxuICAgKiBAcGFyYW0gZW50aXR5SWRcclxuICAgKi9cclxuICBwcm90ZWN0ZWQgb25TYXZlQ29tcGxldGUoZW50aXR5SWQ/OiBudW1iZXIpOiB2b2lkIHsgfTtcclxuXHJcbiAgLyoqXHJcbiAgICogRnVuY3Rpb24gY2FsbGVkIHdoZW4gdGhlIHVzZXIgY2xpY2tzIHNhdmUuICBXZSB3aWxsIGZpcnN0IHRvdWNoIGFsbCBjb250cm9scyB0byBzaG93IHZhbGlkYXRpb24gbWVzc2FnZXNcclxuICAgKiBpZiB0aGUgZm9ybSBpcyBpbnZhbGlkLiAgSWYgdGhlIGZvcm0gaXMgdmFsaWQgd2Ugd2lsbCBhdHRlbXB0IHRvIHNhdmUgYW5kIGFueSBlcnJvcnMgd2lsbCBiZSByZXBvcnRlZFxyXG4gICAqIGJhY2sgdG8gdGhlIHVzZXJcclxuICAgKiBAcGFyYW0gZXZlbnRcclxuICAgKi9cclxuICBwdWJsaWMgYXN5bmMgb25TYXZlKGV2ZW50OiBFdmVudCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgLy8gU2hvdyB0aGUgc2F2aW5nIG92ZXJsYXkgaW4gY2FzZSB3ZSBoYXZlIGFzeW5jIHZhbGlkYXRvcnMgaW4gcGxheVxyXG4gICAgdGhpcy5zaG93U3RhdHVzKFBhZ2VTdGF0dXMuU2F2aW5nKTtcclxuICAgIFxyXG4gICAgdGhpcy5mb3JtR3JvdXAubWFya0FsbEFzVG91Y2hlZCgpO1xyXG5cclxuICAgIC8vIElmIHRoZSBmb3JtIGhhcyBwZW5kaW5nIGFzeW5jIHZhbGlkYXRvcnMsIHdhaXQgZm9yIGl0IHRoZW0gdG8gY29tcGxldGUgYmVmb3JlIHByb2NlZWRpbmdcclxuICAgIGlmICh0aGlzLmZvcm1Hcm91cC5wZW5kaW5nKSB7XHJcbiAgICAgIGF3YWl0IHRoaXMuZm9ybUdyb3VwLnN0YXR1c0NoYW5nZXMucGlwZShcclxuICAgICAgICBmaWx0ZXIoc3RhdHVzID0+IHN0YXR1cyAhPT0gJ1BFTkRJTkcnKSxcclxuICAgICAgICB0YWtlKDEpLFxyXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLmRlc3Ryb3llZClcclxuICAgICAgKS50b1Byb21pc2UoKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5mb3JtR3JvdXAudmFsaWQpIHtcclxuICAgICAgYXdhaXQgdGhpcy5zYXZlKCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAvLyBSZW1vdmUgdGhlIHNhdmluZyBvdmVybGF5IHRvIGRpc3BsYXkgYW55IGVycm9yc1xyXG4gICAgICB0aGlzLnNob3dTdGF0dXMoUGFnZVN0YXR1cy5Mb2FkZWQpO1xyXG4gICAgICBcclxuICAgICAgLy8gT25seSBzaG93IHRoZSBiYW5uZXIgd2l0aCB0aGUgZ2VuZXJpYyBtZXNzYWdlIGlmIHRoZSBwYXJlbnQgY29tcG9uZW50IGhhc24ndCBhbHJlYWR5IHNldCBvbmVcclxuICAgICAgLy8gYnkgaW1wbGVtZW50aW5nIG9uU2F2ZSBmb3IgYWRkaXRpb25hbCB2YWxpZGF0aW9uXHJcbiAgICAgIGlmICh0aGlzLmVycm9ycyA9PT0gJycpIHtcclxuICAgICAgICB0aGlzLnNob3dFcnJvckJhbm5lcih0aGlzLmRlZmF1bHRJbnZhbGlkRm9ybU1lc3NhZ2UpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAodGhpcy5zY3JvbGxDb250YWluZXJTZWxlY3Rvcikge1xyXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5zY3JvbGxTZXJ2aWNlLnNjcm9sbFRvSXRlbSh0aGlzLnNjcm9sbENvbnRhaW5lclNlbGVjdG9yISwgXCIubmctaW52YWxpZFwiKTtcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRnVuY3Rpb24gYXZhaWxhYmxlIHRvIHRyaWdnZXIgYSBzYXZlIGFuZCBieXBhc3MgdGhlIGZvcm0gdmFsaWRhdGlvbiBjaGVja3MuXHJcbiAgICogVGhpcyBpcyB1c2VmdWwgaWYgdGhlIHVzZXIgY2hvb3NlcyBhIHJlbW92ZSBhY3Rpb24gZnJvbSB3aXRoaW4gYW4gZWRpdCBkaWFsb2cuIElmIHRoZSBkaWFsb2cgZm9ybSBpcyBpbnZhbGlkXHJcbiAgICogdGhhdCBpcyBubyBjb25jZXJuIHRvIHRoZSB1c2VyIGlmIHRoZXkgd2lzaCB0byByZW1vdmUgdGhlIGl0ZW0gdGhleSBhcmUgZWRpdGluZy5cclxuICAgKiBAcGFyYW0gZXZlbnRcclxuICAgKi9cclxuICBwdWJsaWMgYXN5bmMgb25TYXZlV2l0aG91dFZhbGlkYXRlKGV2ZW50OiBFdmVudCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgYXdhaXQgdGhpcy5zYXZlKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBGdW5jdGlvbiBjYWxsZWQgd2hlbiB0aGUgY29tcG9uZW50IGlzIGRlc3Ryb3llZFxyXG4gICAqL1xyXG4gIHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMuZGVzdHJveWVkLm5leHQoKTtcclxuICAgIHRoaXMuZGVzdHJveWVkLnVuc3Vic2NyaWJlKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBGdW5jdGlvbiB0aGF0IHdpbGwgbG9nIGFuIGVycm9yIHRoYXQgaXMgcGFzc2VkIGluIHRvIHRoZSBjb25zb2xlXHJcbiAgICogQHBhcmFtIGVcclxuICAgKi9cclxuICBwcm90ZWN0ZWQgb25FcnJvcihlcnJvcjogRXJyb3IpOiB2b2lkIHtcclxuICAgIHRoaXMuZXJyb3JTZXJ2aWNlLmxvZ0NvbnNvbGVFcnJvcihlcnJvcik7XHJcbiAgICB0aGlzLnNob3dFcnJvck92ZXJsYXkoZXJyb3IpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2hvdyBhbiBlcnJvciBtZXNzYWdlIGluIGEgd2hvbGUtcGFnZSBvdmVybGF5LiBUaGlzIHdpbGwgcHJldmVudCBhbnkgbW9yZVxyXG4gICAqIGludGVyYWN0aW9ucyB3aXRoIHRoZSBwYWdlLiBJdCBjYW4gdGFrZSBhIHN0cmluZyBlcnJvciBtZXNzYWdlIG9yIGEgcmF3IEFQSVxyXG4gICAqIGVycm9yIHRoYXQgbmVlZHMgdG8gYmUgcGFyc2VkLiBJZiB0aGUgQVBJIGVycm9yIGlzbid0IHNvbWV0aGluZyB3ZSBjYW4gaGFuZGxlXHJcbiAgICogYSBnZW5lcmljIG1lc3NhZ2UgaXMgc2hvd24gaW5zdGVhZFxyXG4gICAqIEBwYXJhbSB7KEVycm9yIHwgc3RyaW5nKX0gZXJyb3JcclxuICAgKi9cclxuICBwcm90ZWN0ZWQgc2hvd0Vycm9yT3ZlcmxheShlcnJvcjogRXJyb3IgfCBzdHJpbmcpIHtcclxuICAgIHRoaXMuZ2V0RXJyb3JNZXNzYWdlKGVycm9yKS5zdWJzY3JpYmUoKHRyYW5zbGF0ZWRNZXNzYWdlOiBzdHJpbmcpID0+IHtcclxuICAgICAgdGhpcy5zdGF0dXMuc2V0U3RhdHVzKCdlcnJvcicsIHRyYW5zbGF0ZWRNZXNzYWdlKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2hvdyBhbiBlcnJvciBpbiB0aGUgYmFubmVyIGF0IHRoZSB0b3Agb2YgdGhlIHNjcmVlbi4gIFRoaXMgd2lsbCBub3QgcHJvZHVjZSBhXHJcbiAgICogd2hvbGUtcGFnZSBvdmVybGF5IGxpa2UgdGhlIGZ1bmN0aW9uIHNob3dFcnJvciB3aWxsLiAgSXQgY2FuIHRha2UgYSBzdHJpbmcgZXJyb3IgbWVzc2FnZVxyXG4gICAqIG9yIHJhdyBBUEkgZXJyb3IgdGhhdCBuZWVkcyB0byBiZSBwYXJzZWQuICBJZiB0aGUgQVBJIGVycm9yIGlzbid0IHNvbWV0aGluZyB3ZSBjYW4gaGFuZGxlLFxyXG4gICAqIGEgZ2VuZXJpYyBtZXNzYWdlIChjdXN0b21pemFibGUgdmlhIHVua25vd25FcnJvckRlZmF1bHQpIGlzIHNob3duIGluc3RlYWQuXHJcbiAgICogQHBhcmFtIGVycm9yXHJcbiAgICogQHBhcmFtIHVua25vd25FcnJvckRlZmF1bHRcclxuICAgKi9cclxuICBwcm90ZWN0ZWQgc2hvd0Vycm9yQmFubmVyKGVycm9yOiBFcnJvciB8IHN0cmluZywgdW5rbm93bkVycm9yRGVmYXVsdD86IHN0cmluZyk6IHZvaWQge1xyXG4gICAgdGhpcy5nZXRFcnJvck1lc3NhZ2UoZXJyb3IsIHVua25vd25FcnJvckRlZmF1bHQpLnN1YnNjcmliZSgodHJhbnNsYXRlZE1lc3NhZ2U6IHN0cmluZykgPT4ge1xyXG4gICAgICB0aGlzLl9lcnJvcnMgPSB0cmFuc2xhdGVkTWVzc2FnZTtcclxuICAgICAgdGhpcy5zaG93U3RhdHVzKFBhZ2VTdGF0dXMuTG9hZGVkKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUGFyc2VzIGFuZCB0cmFuc2xhdGVzIGFuIEFQSSBlcnJvciBvciBlcnJvciBzdHJpbmcuXHJcbiAgICogQHBhcmFtIGVcclxuICAgKiBAcGFyYW0gdW5rbm93bkVycm9yRGVmYXVsdFxyXG4gICAqL1xyXG4gIHByb3RlY3RlZCBnZXRFcnJvck1lc3NhZ2UoZTogRXJyb3IgfCBzdHJpbmcsIHVua25vd25FcnJvckRlZmF1bHQ/OiBzdHJpbmcpOiBPYnNlcnZhYmxlPHN0cmluZz4ge1xyXG4gICAgbGV0IGV4dHJhY3RlZE1lc3NhZ2UgPSB0aGlzLmVycm9yU2VydmljZS5wYXJzZUFwaUVycm9yKGUsIHVua25vd25FcnJvckRlZmF1bHQpO1xyXG4gICAgcmV0dXJuIHRoaXMudHJhbnNsYXRlU2VydmljZS5nZXQoZXh0cmFjdGVkTWVzc2FnZSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDbGVhciB0aGUgZXJyb3JzIHRvIGhpZGUgdGhlIGVycm9ycyBiYW5uZXIuXHJcbiAgICovXHJcbiAgcHJvdGVjdGVkIGhpZGVFcnJvckJhbm5lcigpOiB2b2lkIHtcclxuICAgIHRoaXMuX2Vycm9ycyA9ICcnO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ2hhbmdlIHRoZSBkaXNwbGF5IHN0YXR1cyB0byBvdmVybGF5IHRoZSB3aG9sZSBwYWdlIHdoaWxlIGxvYWRpbmcgb3Igc2F2aW5nXHJcbiAgICogYW5kIGNsZWFyIGl0IHdoZW4gdGhlIGZvcm0gaXMgcmVhZHlcclxuICAgKiBAcHJvdGVjdGVkXHJcbiAgICogQHBhcmFtIHtQYWdlU3RhdHVzfSBzdGF0dXNcclxuICAgKiBAbWVtYmVyb2YgRm9ybUJhc2VDb21wb25lbnRcclxuICAgKi9cclxuICBwcm90ZWN0ZWQgc2hvd1N0YXR1cyhzdGF0dXM6IFBhZ2VTdGF0dXMpIHtcclxuICAgIGxldCBrbm93blN0YXR1cyA9IFBhZ2VTdGF0dXNlc1tzdGF0dXNdO1xyXG4gICAgaWYgKGtub3duU3RhdHVzKSB7XHJcbiAgICAgIHRoaXMuc3RhdHVzLnNldFN0YXR1cyhrbm93blN0YXR1cy5zdGF0dXMsIGtub3duU3RhdHVzLm1lc3NhZ2UsIHVuZGVmaW5lZCwga25vd25TdGF0dXMubm9EYXRhVGVtcGxhdGUsIGtub3duU3RhdHVzLm92ZXJsYXlDbGFzc0xpc3QpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQWxsb3dzIHRoZSBjb21wb25lbnQgdG8gZW50ZXIgYSBwZW5kaW5nIHN0YXR1cyBhbmQgZXhlY3V0ZSBhIGZ1bmN0aW9uIHRoYXQgb24gY29tcGxldGlvbiB3aWxsIHJldHVybiB0aGUgc3RhdHVzXHJcbiAgICogdG8gaGFzRGF0YS4gSWYgYW4gZXJyb3Igb2NjdXJzIHdpdGhpbiB0aGUgY2FsbGJhY2sgYW4gZXJyb3IgYmFubmVyIGNhbiBiZSBzaG93bi5cclxuICAgKiBAcGFyYW0gY2FsbGJhY2tcclxuICAgKiBAcGFyYW0gcGVuZGluZ01lc3NhZ2UgLSBvcHRpb25hbCBjdXN0b20gcGVuZGluZyBtZXNzYWdlXHJcbiAgICogQHJldHVybnNcclxuICAgKi9cclxuICBwcm90ZWN0ZWQgYXN5bmMgcnVuQmxvY2tpbmdBY3Rpb24oY2FsbGJhY2s6ICgpID0+IFByb21pc2U8YW55PiwgcGVuZGluZ01lc3NhZ2U/OiBzdHJpbmcpOiBQcm9taXNlPGFueT4ge1xyXG4gICAgdGhpcy5oaWRlRXJyb3JCYW5uZXIoKTtcclxuICAgIHRoaXMuc3RhdHVzLnNldFN0YXR1cygncGVuZGluZycsIHBlbmRpbmdNZXNzYWdlKTtcclxuXHJcbiAgICByZXR1cm4gY2FsbGJhY2soKS5jYXRjaChlcnJvciA9PiB7XHJcbiAgICAgIHRoaXMuc2hvd0Vycm9yQmFubmVyKGVycm9yKTtcclxuICAgICAgLy8gVGhyb3cgdGhlIGVycm9yIGZvciBhbnkgZG93bnN0cmVhbSBjb21wb25lbnRzIHRoYXQgbWF5IGJlIGxpc3RlbmluZyBhbmQgbmVlZCB0byByZWFjdFxyXG4gICAgICAvLyB0byBhbnkgZXJyb3JzIGhhcHBlbmluZyB3aXRoaW4gdGhpcyBjYWxsYmFja1xyXG4gICAgICB0aHJvdyAoZXJyb3IpO1xyXG4gICAgfSkuZmluYWxseSgoKSA9PiB7XHJcbiAgICAgIHRoaXMuc2hvd1N0YXR1cyhQYWdlU3RhdHVzLkxvYWRlZCk7XHJcbiAgICB9KTtcclxuICB9O1xyXG5cclxuICAvKipcclxuICAgKiBQYXJzZXMgdGhlIHBhZ2UgaW5pdCByZXN1bHQgYW5kIHNldHMgdGhlIG5lY2Vzc2FyeSBwcm9wZXJ0aWVzIG9uIHRoZSBwYWdlXHJcbiAgICogQHBhcmFtIHJlc3VsdFxyXG4gICAqL1xyXG4gIHByaXZhdGUgcGFyc2VJbml0UmVzdWx0KHJlc3VsdDogUGFnZUluaXRSZXN1bHQpOiB2b2lkIHtcclxuICAgIHRoaXMuaW5pdFJlc3VsdCA9IHJlc3VsdDtcclxuICAgIHRoaXMudGl0bGUgPSByZXN1bHQudGl0bGU7XHJcbiAgICB0aGlzLnN1YlRpdGxlID0gcmVzdWx0LnN1YlRpdGxlO1xyXG4gICAgdGhpcy5zdWJUaXRsZVVybCA9IHJlc3VsdC5zdWJUaXRsZVVybDtcclxuICAgIHRoaXMuYnJlYWRjcnVtYnMgPSByZXN1bHQuYnJlYWRjcnVtYnM7XHJcbiAgICB0aGlzLmhlbHAgPSByZXN1bHQuaGVscDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENvbnRyb2xzIHRoZSBwYWdlIHN0YXR1cywgdHJpZ2dlcnMgdGhlIHNhdmUgYWN0aW9uIGFuZCBoYW5kbGVzIGVycm9ycyB0aHJvd24uXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBhc3luYyBzYXZlKCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgdGhpcy5zaG93U3RhdHVzKFBhZ2VTdGF0dXMuU2F2aW5nKTtcclxuXHJcbiAgICB0cnkge1xyXG4gICAgICBhd2FpdCB0aGlzLmFwcGx5TW9kZWxVcGRhdGVzKCk7XHJcbiAgICAgIGxldCBlbnRpdHlJZCA9IGF3YWl0IHRoaXMuc2F2ZVRvQXBpKCkgfHwgLTE7XHJcblxyXG4gICAgICB0aGlzLl9lcnJvcnMgPSAnJztcclxuXHJcbiAgICAgIHRoaXMub25TYXZlQ29tcGxldGUoZW50aXR5SWQpO1xyXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgLy9jbGVhciB0aGUgXCJzYXZpbmdcIiBvdmVybGF5IGFuZCBzaG93IHRoZSBtZXNzYWdlIGF0IHRoZSB0b3Agb2YgdGhlIHZpZXcgdGhyb3VnaCB0aGUgZXJyb3JzIHByb3BlcnR5XHJcbiAgICAgIHRoaXMuc2hvd0Vycm9yQmFubmVyKGVycm9yLCB0aGlzLmRlZmF1bHRVbmtub3duU2F2ZUVycm9yKTtcclxuICAgICAgdGhpcy5zcGxhc2hTZXJ2aWNlLmhpZGVTcGxhc2goKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNldHMgdXAgdGhlIHJvdXRlciBldmVudCBzdWJzY3JpcHRpb25zXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBzZXRVcFJvdXRlclN1YnNjcmlwdGlvbnMoKTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMubmF2aWdhdGlvbkVuZFN1YnNjcmlwdGlvbiAmJiAhdGhpcy5kZXN0cm95ZWQuY2xvc2VkKSB7XHJcbiAgICAgIHRoaXMucHJldmlvdXNVcmwgPSB0aGlzLnJvdXRlci51cmw7XHJcblxyXG4gICAgICAvLyBSZWFjdCB0byBuYXZpZ2F0aW9uIGV2ZW50c1xyXG4gICAgICB0aGlzLm5hdmlnYXRpb25FbmRTdWJzY3JpcHRpb24gPSB0aGlzLnJvdXRlci5ldmVudHMucGlwZShcclxuICAgICAgICB0YWtlVW50aWwodGhpcy5kZXN0cm95ZWQpLFxyXG4gICAgICAgIGZpbHRlcihlID0+IGUgaW5zdGFuY2VvZiBOYXZpZ2F0aW9uRW5kKSxcclxuICAgICAgKS5zdWJzY3JpYmUoZSA9PiB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgIGxldCBjdXJyZW50VXJsOiBzdHJpbmcgPSAoPE5hdmlnYXRpb25FbmQ+ZSkudXJsO1xyXG5cclxuICAgICAgICAgIGlmICh0aGlzLmlnbm9yZVF1ZXJ5UGFyYW1zT25OYXZpZ2F0aW9uQ2hhbmdlKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnByZXZpb3VzVXJsLnNwbGl0KCc/JylbMF0gIT09IGN1cnJlbnRVcmwuc3BsaXQoJz8nKVswXSkge1xyXG4gICAgICAgICAgICAgIHRoaXMubmF2aWdhdGlvbkVuZEhhbmRsZXIoKDxOYXZpZ2F0aW9uRW5kPmUpLnVybCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnByZXZpb3VzVXJsICE9PSBjdXJyZW50VXJsKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5uYXZpZ2F0aW9uRW5kSGFuZGxlcigoPE5hdmlnYXRpb25FbmQ+ZSkudXJsKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgICB0aGlzLm9uRXJyb3IoZXJyb3IpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIG5hdmlnYXRpb25FbmRIYW5kbGVyKHVybDogc3RyaW5nKTogdm9pZCB7XHJcbiAgICB0aGlzLnByZXZpb3VzVXJsID0gdXJsO1xyXG4gICAgdGhpcy5vbk5hdmlnYXRpb25FbmQoKTtcclxuICB9XHJcbn1cclxuIl19
@@ -10717,6 +10717,8 @@ class PageBaseComponent {
10717
10717
  */
10718
10718
  onSave(event) {
10719
10719
  return __awaiter(this, void 0, void 0, function* () {
10720
+ // Show the saving overlay in case we have async validators in play
10721
+ this.showStatus(PageStatus.Saving);
10720
10722
  this.formGroup.markAllAsTouched();
10721
10723
  // If the form has pending async validators, wait for it them to complete before proceeding
10722
10724
  if (this.formGroup.pending) {
@@ -10726,6 +10728,8 @@ class PageBaseComponent {
10726
10728
  yield this.save();
10727
10729
  }
10728
10730
  else {
10731
+ // Remove the saving overlay to display any errors
10732
+ this.showStatus(PageStatus.Loaded);
10729
10733
  // Only show the banner with the generic message if the parent component hasn't already set one
10730
10734
  // by implementing onSave for additional validation
10731
10735
  if (this.errors === '') {