turbogui-angular 15.1.2 → 15.2.0

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.
@@ -122,9 +122,10 @@ export class DialogService extends SingletoneStrictClass {
122
122
  * Change the application visual appearance so the user perceives that the application is
123
123
  * currently busy. While modal busy state is enabled, no user input is possible neither via
124
124
  * keyboard, mouse or touch. Use this state when performing server requests or operations that
125
- * must block the user interaction with the application.
125
+ * must block the user interaction with the application. To allow user interaction again, you must
126
+ * call removeModalBusyState()
126
127
  *
127
- * Note: We can modify the busy state component that is shown by this method. To do it, we must
128
+ * Notice: We can modify the busy state visual component that is shown by this method. To do it, we must
128
129
  * set this.customBusyStateComponentClass property with our own custom busy state component class. (We can do it at
129
130
  * our main application component constructor for example). Our custom component must extend the
130
131
  * BusyStateBaseComponent one to add its own visual appearance.
@@ -152,7 +153,7 @@ export class DialogService extends SingletoneStrictClass {
152
153
  return this._isShowingBusyState;
153
154
  }
154
155
  /**
155
- * Remove the application busy state and restore it back to normal user interaction
156
+ * Cancel the application busy state and restore it back to normal so user interaction is allowed again
156
157
  */
157
158
  removeModalBusyState() {
158
159
  if (!this._isEnabled || !this._isShowingBusyState) {
@@ -402,4 +403,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.8", ngImpor
402
403
  providedIn: 'root',
403
404
  }]
404
405
  }], ctorParameters: () => [{ type: i0.RendererFactory2 }, { type: i1.MatSnackBar }, { type: i2.MatDialog }, { type: i0.Injector }, { type: i0.ApplicationRef }, { type: i0.ComponentFactoryResolver }] });
405
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlhbG9nLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90dXJib2d1aS1hbmd1bGFyL3NyYy9tYWluL2NvbnRyb2xsZXIvZGlhbG9nLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7R0FPRztBQUVILE9BQU8sRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDM0QsT0FBTyxFQUFRLFVBQVUsRUFBcUcsTUFBTSxlQUFlLENBQUM7QUFHcEosT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sOERBQThELENBQUM7QUFDdEcsT0FBTyxFQUFFLGVBQWUsRUFBRSxlQUFlLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUV2RSxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSwwRUFBMEUsQ0FBQztBQUN4SCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQzs7OztBQUcvRTs7R0FFRztBQUlILE1BQU0sT0FBTyxhQUFjLFNBQVEscUJBQXFCO0lBeUZwRCxZQUFZLGVBQWlDLEVBQ2hCLFdBQXdCLEVBQ3hCLFNBQW9CLEVBQ3BCLFFBQWtCLEVBQ2xCLGNBQThCLEVBQzlCLHdCQUFrRDtRQUVqRixLQUFLLENBQUMsYUFBYSxDQUFDLENBQUM7UUFOVSxnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUN4QixjQUFTLEdBQVQsU0FBUyxDQUFXO1FBQ3BCLGFBQVEsR0FBUixRQUFRLENBQVU7UUFDbEIsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQzlCLDZCQUF3QixHQUF4Qix3QkFBd0IsQ0FBMEI7UUEzRi9FOzs7O1dBSUc7UUFDSCxrQ0FBNkIsR0FBaUMsc0JBQXNCLENBQUM7UUFHckY7O1dBRUc7UUFDSyxlQUFVLEdBQUcsSUFBSSxDQUFDO1FBRzFCOztXQUVHO1FBQ0ssd0JBQW1CLEdBQUcsS0FBSyxDQUFDO1FBR3BDOzs7O1dBSUc7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d0JBQXdCLEtBQUssSUFBSSxFQUFFO1lBRXhDLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxDQUFDO1lBQ2hDLElBQUksQ0FBQyx3QkFBd0IsR0FBRyxJQUFJLENBQUM7U0FDeEM7UUFFRCxJQUFJLElBQUksQ0FBQywwQkFBMEIsS0FBSyxJQUFJLEVBQUU7WUFFMUMsSUFBSSxDQUFDLDBCQUEwQixFQUFFLENBQUM7WUFDbEMsSUFBSSxDQUFDLDBCQUEwQixHQUFHLElBQUksQ0FBQztTQUMxQztRQUVELElBQUksSUFBSSxDQUFDLDRCQUE0QixLQUFLLElBQUksRUFBRTtZQUU1QyxJQUFJLENBQUMsNEJBQTRCLEVBQUUsQ0FBQztZQUNwQyxJQUFJLENBQUMsMEJBQTBCLEdBQUcsSUFBSSxDQUFDO1NBQzFDO0lBQ0wsQ0FBQzs4R0FuaUJRLGFBQWE7a0hBQWIsYUFBYSxjQUZaLE1BQU07OzJGQUVQLGFBQWE7a0JBSHpCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIFR1cmJvR1VJIGlzIEEgbGlicmFyeSB0aGF0IGhlbHBzIHdpdGggdGhlIG1vc3QgY29tbW9uIGFuZCBnZW5lcmljIFVJIGVsZW1lbnRzIGFuZCBmdW5jdGlvbmFsaXRpZXNcclxuICpcclxuICogV2Vic2l0ZSA6IC0+IGh0dHA6Ly93d3cudHVyYm9ndWkub3JnXHJcbiAqIExpY2Vuc2UgOiAtPiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wLiBZb3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXHJcbiAqIExpY2Vuc2UgVXJsIDogLT4gaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXHJcbiAqIENvcHlSaWdodCA6IC0+IENvcHlyaWdodCAyMDE4IEVkZXJ0b25lIEFkdmFuZGVkIFNvbHV0aW9ucy4gaHR0cHM6Ly93d3cuZWRlcnRvbmUuY29tXHJcbiAqL1xyXG5cclxuaW1wb3J0IHsgQXJyYXlVdGlscywgTnVtZXJpY1V0aWxzIH0gZnJvbSAndHVyYm9jb21tb25zLXRzJztcclxuaW1wb3J0IHsgVHlwZSwgSW5qZWN0YWJsZSwgQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyLCBJbmplY3RvciwgQXBwbGljYXRpb25SZWYsIFJlbmRlcmVyMiwgUmVuZGVyZXJGYWN0b3J5MiwgVmlld0NvbnRhaW5lclJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBNYXREaWFsb2csIE1hdERpYWxvZ1JlZiB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XHJcbmltcG9ydCB7IE1hdFNuYWNrQmFyLCBNYXRTbmFja0JhckNvbmZpZyB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NuYWNrLWJhcic7XHJcbmltcG9ydCB7IEJ1c3lTdGF0ZUJhc2VDb21wb25lbnQgfSBmcm9tICcuLi92aWV3L2NvbXBvbmVudHMvYnVzeS1zdGF0ZS1iYXNlL2J1c3ktc3RhdGUtYmFzZS5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBDb21wb25lbnRQb3J0YWwsIERvbVBvcnRhbE91dGxldCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9wb3J0YWwnO1xyXG5pbXBvcnQgeyBEaWFsb2dCYXNlQ29tcG9uZW50IH0gZnJvbSAnLi4vdmlldy9jb21wb25lbnRzL2RpYWxvZy1iYXNlL2RpYWxvZy1iYXNlLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IERpYWxvZ0RhdGVTZWxlY3Rpb25Db21wb25lbnQgfSBmcm9tICcuLi92aWV3L2NvbXBvbmVudHMvZGlhbG9nLWRhdGUtc2VsZWN0aW9uL2RpYWxvZy1kYXRlLXNlbGVjdGlvbi5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBTaW5nbGV0b25lU3RyaWN0Q2xhc3MgfSBmcm9tICcuLi9tb2RlbC9jbGFzc2VzL1NpbmdsZXRvbmVTdHJpY3RDbGFzcyc7XG5cclxuXHJcbi8qKlxyXG4gKiBNYW5hZ2VzIHRoZSBhcHBsaWNhdGlvbiBtb2RhbCBhbmQgbm9uIG1vZGFsIGZsb2F0aW5nIGVsZW1lbnRzXHJcbiAqL1xyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgRGlhbG9nU2VydmljZSBleHRlbmRzIFNpbmdsZXRvbmVTdHJpY3RDbGFzcyB7XHJcblxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVXNlZCB0byBtb2RpZnkgdGhlIGJ1c3kgc3RhdGUgY29tcG9uZW50IHRoYXQgaXMgc2hvd24gYnkgZGVmYXVsdCBieSB0aGUgYWRkTW9kYWxCdXN5U3RhdGUoKSBtZXRob2QuXHJcbiAgICAgKlxyXG4gICAgICogQHNlZSB0aGlzLmFkZE1vZGFsQnVzeVN0YXRlKClcclxuICAgICAqL1xyXG4gICAgY3VzdG9tQnVzeVN0YXRlQ29tcG9uZW50Q2xhc3M6IFR5cGU8QnVzeVN0YXRlQmFzZUNvbXBvbmVudD4gPSBCdXN5U3RhdGVCYXNlQ29tcG9uZW50O1xyXG5cclxuXHJcbiAgICAvKipcclxuICAgICAqIENoZWNrIHB1YmxpYyBnZXR0ZXIgZm9yIGRvY3NcclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBfaXNFbmFibGVkID0gdHJ1ZTtcclxuXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUZWxscyBpZiB0aGUgbWFpbiBhcHBsaWNhdGlvbiBpcyBjdXJyZW50bHkgc2hvd2luZyBhIGJ1c3kgc3RhdGUgdGhhdCBibG9ja3MgYWxsIHVzZXIgaW50ZXJhY3Rpb25cclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBfaXNTaG93aW5nQnVzeVN0YXRlID0gZmFsc2U7XHJcblxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQSByZWZlcmVuY2UgdG8gdGhlIG1vZGFsIGJ1c3kgc3RhdGUgY29tcG9uZW50IHRoYXQgaXMgaW5pdGlhbGl6ZWQgb25seSB0aGUgZmlyc3QgdGltZSBpdCBpcyBjYWxsZWQuXHJcbiAgICAgKlxyXG4gICAgICogKFRvIGFwcGVuZCB0aGUgYnVzeSBzdGF0ZSBkeW5hbWljYWxseSwgd2UgdXNlIHRoZSBQb3J0YWwgY29uY2VwdCBmcm9tIHRoZSBhbmd1bGFyIG1hdGVyaWFsIGxpYnJhcnkpXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgX2NvbXBvbmVudFBvcnRhbDogQ29tcG9uZW50UG9ydGFsPEJ1c3lTdGF0ZUJhc2VDb21wb25lbnQ+IHwgbnVsbCA9IG51bGw7XHJcblxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQSByZWZlcmVuY2UgdG8gdGhlIG1vZGFsIGJ1c3kgc3RhdGUgY29udGFpbmVyIHdoZXJlIHRoZSBjb21wb25lbnQgd2lsbCBiZSBhZGRlZFxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIF9tb2RhbEJ1c3lTdGF0ZUhvc3Q6IERvbVBvcnRhbE91dGxldCB8IG51bGwgPSBudWxsO1xyXG5cclxuXHJcbiAgICAvKipcclxuICAgICAqIFRlbGxzIGlmIHRoZSBtYW5hZ2VyIGlzIGN1cnJlbnRseSBzaG93aW5nIGEgc25hY2tiYXIgZWxlbWVudCBvciBub3RcclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBfaXNTaG93aW5nU25hY2tCYXIgPSBmYWxzZTtcclxuXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDb250YWlucyBhIGxpc3Qgb2YgdGhlIGRpYWxvZ3MgdGhhdCBhcmUgY3VycmVudGx5IHZpc2libGUgdG8gdGhlIHVzZXIuXHJcbiAgICAgKiBFYWNoIGl0ZW0gaW4gdGhpcyBsaXN0IGlzIGEgaGFzaCB0aGF0IGlzIGNvbXB1dGVkIHdoZW4gZGlhbG9nIGlzIGNyZWF0ZWQgdG8gdW5pcXVlbHkgaWRlbnRpZnkgaXQuXHJcbiAgICAgKlxyXG4gICAgICogRW1wdHkgbGlzdCBtZWFucyBubyBkaWFsb2dzIGFyZSBjdXJyZW50bHkgdmlzaWJsZVxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIF9hY3RpdmVEaWFsb2dzOiBzdHJpbmdbXSA9IFtdO1xyXG5cclxuXHJcbiAgICAvKipcclxuICAgICAqIENvbnRhaW5zIGEgbGlzdCB3aXRoIGFsbCB0aGUgTWF0RGlhbG9nIGluc3RhbmNlcyB0aGF0IGFyZSBjdXJyZW50bHkgdmlzaWJsZSB0byB0aGUgdXNlci5cclxuICAgICAqIFRoZSBsaXN0IHVzZXMgdGhlIHNhbWUgb3JkZXIgYXMgdGhlIGxpc3Qgb2YgX2FjdGl2ZURpYWxvZ3MgaGFzaCB2YWx1ZXNcclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBfYWN0aXZlRGlhbG9nSW5zdGFuY2VzOiBNYXREaWFsb2dSZWY8RGlhbG9nQmFzZUNvbXBvbmVudD5bXSA9IFtdO1xyXG5cclxuXHJcbiAgICAvKipcclxuICAgICAqIFVzZWQgdG8gc3RvcmUgdGhlIGluaXRpYWxpemVkIFJlbmRlcmVyIDIgaW5zdGFuY2UgdGhhdCBpcyB1c2VkIGJ5IHRoaXMgY2xhc3NcclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSByZWFkb25seSBfcmVuZGVyZXI6IFJlbmRlcmVyMjtcclxuXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBNZXRob2QgdGhhdCBpcyB1c2VkIHRvIGRlbGV0ZSB0aGUgd2luZG93IGJlZm9yZXVubG9hZCBldmVudCBsaXN0ZW5lciBvbmNlIG5vdCB1c2VkIGFueW1vcmVcclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBfd2luZG93QmVmb3JlVW5sb2FkVW5MaXN0ZW46ICgoKSA9PiB2b2lkKSB8IG51bGwgPSBudWxsO1xyXG5cclxuXHJcbiAgICAvKipcclxuICAgICAqIE1ldGhvZCB0aGF0IGlzIHVzZWQgdG8gZGVsZXRlIHRoZSBkb2N1bWVudCBrZXlkb3duIGV2ZW50IGxpc3RlbmVyIG9uY2Ugbm90IHVzZWQgYW55bW9yZVxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIF9kb2N1bWVudEtleWRvd25Vbmxpc3RlbjogKCgpID0+IHZvaWQpIHwgbnVsbCA9IG51bGw7XHJcblxyXG5cclxuICAgIC8qKlxyXG4gICAgICogTWV0aG9kIHRoYXQgaXMgdXNlZCB0byBkZWxldGUgdGhlIGRvY3VtZW50IG1vdXNlZG93biBldmVudCBsaXN0ZW5lciBvbmNlIG5vdCB1c2VkIGFueW1vcmVcclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBfZG9jdW1lbnRNb3VzZWRvd25Vbmxpc3RlbjogKCgpID0+IHZvaWQpIHwgbnVsbCA9IG51bGw7XHJcblxyXG5cclxuICAgIC8qKlxyXG4gICAgICogTWV0aG9kIHRoYXQgaXMgdXNlZCB0byBkZWxldGUgdGhlIGRvY3VtZW50IHBvaW50ZXJkb3duIGV2ZW50IGxpc3RlbmVyIG9uY2Ugbm90IHVzZWQgYW55bW9yZVxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIF9kb2N1bWVudFBvaW50ZXJkb3duVW5saXN0ZW46ICgoKSA9PiB2b2lkKSB8IG51bGwgPSBudWxsO1xyXG5cclxuXHJcbiAgICBjb25zdHJ1Y3RvcihyZW5kZXJlckZhY3Rvcnk6IFJlbmRlcmVyRmFjdG9yeTIsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIHJlYWRvbmx5IG1hdFNuYWNrQmFyOiBNYXRTbmFja0JhcixcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgcmVhZG9ubHkgbWF0RGlhbG9nOiBNYXREaWFsb2csXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIHJlYWRvbmx5IGluamVjdG9yOiBJbmplY3RvcixcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgcmVhZG9ubHkgYXBwbGljYXRpb25SZWY6IEFwcGxpY2F0aW9uUmVmLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSByZWFkb25seSBjb21wb25lbnRGYWN0b3J5UmVzb2x2ZXI6IENvbXBvbmVudEZhY3RvcnlSZXNvbHZlcikge1xyXG5cclxuXHRcdHN1cGVyKERpYWxvZ1NlcnZpY2UpO1xyXG5cclxuICAgICAgICB0aGlzLl9yZW5kZXJlciA9IHJlbmRlcmVyRmFjdG9yeS5jcmVhdGVSZW5kZXJlcihudWxsLCBudWxsKTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUZWxscyBpZiB0aGlzIGRpYWxvZyBzZXJ2aWNlIGlzIGVuYWJsZWQgb3Igbm90LiBJZiBkaWFsb2cgc2VydmljZSBpcyBkaXNhYmxlZCwgbm9uZSBvZiBpdCdzIGZlYXR1cmVzIHdpbGwgd29ya1xyXG4gICAgICogVGhpcyBpcyB1c2VkIHRvIGJsb2NrIGFsbCBkaWFsb2cgZmVhdHVyZXMgbm9ybWFsbHkgd2hlbiBzaHV0dGluZyBkb3duIHRoZSBhcHBsaWNhdGlvblxyXG4gICAgICpcclxuICAgICAqIFVzZSB3aXRoIGNhdXRpb24uIFdoZW4gdGhpcyBpcyBzZXQgdG8gZmFsc2UsIGRpYWxvZyBzZXJ2aWNlIHN0b3BzIHdvcmtpbmcuXHJcbiAgICAgKi9cclxuICAgIHNldCBpc0VuYWJsZWQodjogYm9vbGVhbikge1xyXG5cclxuICAgICAgICBpZiAodiA9PT0gdGhpcy5faXNFbmFibGVkKSB7XHJcblxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLl9pc0VuYWJsZWQgPSB2O1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvKipcclxuICAgICAqIEVuYWJsZXMgYSB3YXJuaW5nIHRoYXQgd2lsbCBiZSBzaG93biB0byB0aGUgdXNlciB3aGVuIGhlL3NoZSB0cmllcyB0byBjbG9zZSB0aGUgYXBwbGljYXRpb24uXHJcbiAgICAgKiBUaGlzIHdhcm5pbmcgd2lsbCBwcm9tcHQgdGhlIHVzZXIgdG8gY29udGludWUgd2l0aCB0aGUgZXhpdCBwcm9jZXNzIG9yIGNhbmNlbCBpdC5cclxuICAgICAqIFRoZSBzcGVjaWZpYyB0ZXh0cyBvZiB0aGlzIG1lc3NhZ2UgYXJlIGEgZ2VuZXJpYyBvbmVzIGFuZCBjYW5ub3QgYmUgY2hhbmdlZC5cclxuICAgICAqXHJcbiAgICAgKiBJTVBPUlRBTlQ6IFRoaXMgbWV0aG9kIG11c3QgYmUgY2FsbGVkIGFmdGVyIHRoZSBtYWluIGFwcGxpY2F0aW9uIGhhcyBiZWVuIGluaXRpYWxpemVkIGluIG9yZGVyIHRvIHdvcmssXHJcbiAgICAgKiBvdGhlcndpc2UgaXQgd2lsbCBkbyBub3RoaW5nLlxyXG4gICAgICovXHJcbiAgICBhZGRDbG9zZUFwcGxpY2F0aW9uV2FybmluZygpIHtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuX3dpbmRvd0JlZm9yZVVubG9hZFVuTGlzdGVuID09PSBudWxsKSB7XHJcblxyXG4gICAgICAgICAgICB0aGlzLl93aW5kb3dCZWZvcmVVbmxvYWRVbkxpc3RlbiA9IHRoaXMuX3JlbmRlcmVyLmxpc3Rlbignd2luZG93JywgJ2JlZm9yZXVubG9hZCcsXHJcbiAgICAgICAgICAgICAgICAoZXZlbnQpID0+IGV2ZW50LnJldHVyblZhbHVlID0gdHJ1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvKipcclxuICAgICAqIFJlbW92ZSB0aGUgY2xvc2UgYXBwbGljYXRpb24gd2FybmluZyBtZXNzYWdlIGlmIHByZXZpb3VzbHkgYXNzaWduZWRcclxuICAgICAqL1xyXG4gICAgcmVtb3ZlQ2xvc2VBcHBsaWNhdGlvbldhcm5pbmcoKSB7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLl93aW5kb3dCZWZvcmVVbmxvYWRVbkxpc3RlbiAhPT0gbnVsbCkge1xyXG5cclxuICAgICAgICAgICAgdGhpcy5fd2luZG93QmVmb3JlVW5sb2FkVW5MaXN0ZW4oKTtcclxuICAgICAgICAgICAgdGhpcy5fd2luZG93QmVmb3JlVW5sb2FkVW5MaXN0ZW4gPSBudWxsO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDaGFuZ2UgdGhlIGFwcGxpY2F0aW9uIHZpc3VhbCBhcHBlYXJhbmNlIHNvIHRoZSB1c2VyIHBlcmNlaXZlcyB0aGF0IHRoZSBhcHBsaWNhdGlvbiBpc1xyXG4gICAgICogY3VycmVudGx5IGJ1c3kuIFdoaWxlIG1vZGFsIGJ1c3kgc3RhdGUgaXMgZW5hYmxlZCwgbm8gdXNlciBpbnB1dCBpcyBwb3NzaWJsZSBuZWl0aGVyIHZpYVxyXG4gICAgICoga2V5Ym9hcmQsIG1vdXNlIG9yIHRvdWNoLiBVc2UgdGhpcyBzdGF0ZSB3aGVuIHBlcmZvcm1pbmcgc2VydmVyIHJlcXVlc3RzIG9yIG9wZXJhdGlvbnMgdGhhdFxyXG4gICAgICogbXVzdCBibG9jayB0aGUgdXNlciBpbnRlcmFjdGlvbiB3aXRoIHRoZSBhcHBsaWNhdGlvbi5cclxuICAgICAqXHJcbiAgICAgKiBOb3RlOiBXZSBjYW4gbW9kaWZ5IHRoZSBidXN5IHN0YXRlIGNvbXBvbmVudCB0aGF0IGlzIHNob3duIGJ5IHRoaXMgbWV0aG9kLiBUbyBkbyBpdCwgd2UgbXVzdFxyXG4gICAgICogc2V0IHRoaXMuY3VzdG9tQnVzeVN0YXRlQ29tcG9uZW50Q2xhc3MgcHJvcGVydHkgd2l0aCBvdXIgb3duIGN1c3RvbSBidXN5IHN0YXRlIGNvbXBvbmVudCBjbGFzcy4gKFdlIGNhbiBkbyBpdCBhdFxyXG4gICAgICogb3VyIG1haW4gYXBwbGljYXRpb24gY29tcG9uZW50IGNvbnN0cnVjdG9yIGZvciBleGFtcGxlKS4gT3VyIGN1c3RvbSBjb21wb25lbnQgbXVzdCBleHRlbmQgdGhlXHJcbiAgICAgKiBCdXN5U3RhdGVCYXNlQ29tcG9uZW50IG9uZSB0byBhZGQgaXRzIG93biB2aXN1YWwgYXBwZWFyYW5jZS5cclxuICAgICAqXHJcbiAgICAgKiBAc2VlIHRoaXMuY3VzdG9tQnVzeVN0YXRlQ29tcG9uZW50Q2xhc3NcclxuICAgICAqL1xyXG4gICAgYWRkTW9kYWxCdXN5U3RhdGUoKSB7XHJcblxyXG4gICAgICAgIGlmICghdGhpcy5faXNFbmFibGVkIHx8IHRoaXMuX2lzU2hvd2luZ0J1c3lTdGF0ZSkge1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5fZGlzYWJsZVVzZXJJbnRlcmFjdGlvbigpO1xyXG5cclxuICAgICAgICAvLyBEeW5hbWljYWxseSBjcmVhdGUgdGhlIGJ1c3kgc3RhdGUgY29tcG9uZW50IHJlZmVyZW5jZSBpZiB0aGlzIGlzIHRoZSBmaXJzdCB0aW1lXHJcbiAgICAgICAgaWYgKHRoaXMuX2NvbXBvbmVudFBvcnRhbCA9PT0gbnVsbCkge1xyXG5cclxuICAgICAgICAgICAgdGhpcy5fY29tcG9uZW50UG9ydGFsID0gbmV3IENvbXBvbmVudFBvcnRhbCh0aGlzLmN1c3RvbUJ1c3lTdGF0ZUNvbXBvbmVudENsYXNzKTtcclxuXHJcbiAgICAgICAgICAgIC8vIENyZWF0ZSBhIFBvcnRhbEhvc3Qgd2l0aCBkb2N1bWVudC5ib2R5IGFzIGl0cyBhbmNob3IgZWxlbWVudFxyXG4gICAgICAgICAgICB0aGlzLl9tb2RhbEJ1c3lTdGF0ZUhvc3QgPSBuZXcgRG9tUG9ydGFsT3V0bGV0KFxyXG4gICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmJvZHksXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hcHBsaWNhdGlvblJlZixcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmluamVjdG9yKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgICh0aGlzLl9tb2RhbEJ1c3lTdGF0ZUhvc3QgYXMgRG9tUG9ydGFsT3V0bGV0KS5hdHRhY2godGhpcy5fY29tcG9uZW50UG9ydGFsKTtcclxuXHJcbiAgICAgICAgdGhpcy5faXNTaG93aW5nQnVzeVN0YXRlID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUZWxscyBpZiB0aGUgYXBwbGljYXRpb24gaXMgY3VycmVudGx5IGxvY2tlZCBpbiBhIG1vZGFsIGJ1c3kgc3RhdGUgKGNhdXNlZCBieSBhbiBhZGRNb2RhbEJ1c3lTdGF0ZSgpIGNhbGwpXHJcbiAgICAgKi9cclxuICAgIGdldCBpc1Nob3dpbmdCdXN5U3RhdGUoKSB7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLl9pc1Nob3dpbmdCdXN5U3RhdGU7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmVtb3ZlIHRoZSBhcHBsaWNhdGlvbiBidXN5IHN0YXRlIGFuZCByZXN0b3JlIGl0IGJhY2sgdG8gbm9ybWFsIHVzZXIgaW50ZXJhY3Rpb25cclxuICAgICAqL1xyXG4gICAgcmVtb3ZlTW9kYWxCdXN5U3RhdGUoKSB7XHJcblxyXG4gICAgICAgIGlmICghdGhpcy5faXNFbmFibGVkIHx8ICF0aGlzLl9pc1Nob3dpbmdCdXN5U3RhdGUpIHtcclxuXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLl9jb21wb25lbnRQb3J0YWwgIT09IG51bGwpIHtcclxuXHJcbiAgICAgICAgICAgICh0aGlzLl9tb2RhbEJ1c3lTdGF0ZUhvc3QgYXMgRG9tUG9ydGFsT3V0bGV0KS5kZXRhY2goKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuX2VuYWJsZVVzZXJJbnRlcmFjdGlvbigpO1xyXG5cclxuICAgICAgICB0aGlzLl9pc1Nob3dpbmdCdXN5U3RhdGUgPSBmYWxzZTtcclxuICAgIH1cclxuICAgIFxyXG4gICAgXHJcbiAgICAvKipcclxuICAgICAqIFRPRE8gLSBhZGFwdCBmcm9tIFRTIHZlcnNpb25cclxuICAgICAqL1xyXG4gICAgYWRkVG9vbFRpcCgpIHtcclxuXHJcbiAgICAgICAgLy8gVE9ETyAtIGFkYXB0IGZyb20gVFMgdmVyc2lvblxyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvKipcclxuICAgICAqIFNob3cgYSBub24gbW9kYWwgc25hY2tiYXIgbm90aWZpY2F0aW9uIHRvIHRoZSB1c2VyIChPbmx5IG9uZSBzbmFjay1iYXIgY2FuIGV2ZXIgYmUgb3BlbmVkIGF0IHRoZSBzYW1lIHRpbWUpLlxyXG4gICAgICpcclxuICAgICAqIFNuYWNrYmFycyBpbmZvcm0gdXNlcnMgb2YgYSBwcm9jZXNzIHRoYXQgYW4gYXBwIGhhcyBwZXJmb3JtZWQgb3Igd2lsbCBwZXJmb3JtLiBUaGV5IGFwcGVhciB0ZW1wb3JhcmlseSwgdG93YXJkcyB0aGUgYm90dG9tIG9yIHRvcCBvZiB0aGUgc2NyZWVuLlxyXG4gICAgICogVGhleSBzaG91bGRu4oCZdCBpbnRlcnJ1cHQgdGhlIHVzZXIgZXhwZXJpZW5jZSwgYW5kIHRoZXkgZG9u4oCZdCByZXF1aXJlIHVzZXIgaW5wdXQgdG8gZGlzYXBwZWFyLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBjb25maWcgQSBNYXRTbmFja0JhckNvbmZpZyBpbnN0YW5jZSB3aXRoIHRoZSBjdXN0b21pemF0aW9ucyB3ZSB3YW50IGZvciB0aGlzIHNuYWNrYmFyXHJcbiAgICAgKiBAcGFyYW0gbWVzc2FnZSBUaGUgbWVzc2FnZSB0byBzaG93IG9uIHRoZSBzbmFja2JhclxyXG4gICAgICogQHBhcmFtIGFjdGlvbiBJZiBub3QgZW1wdHksIHRoZSB0ZXh0IHRvIHBsYWNlIG9uIHRoZSBzbmFja2JhciBjb25maXJtYXRpb24gYnV0dG9uXHJcbiAgICAgKiBAcGFyYW0gYWN0aW9uQ2FsbGJhY2sgQSBtZXRob2QgdG8gZXhlY3V0ZSBvbmNlIHRoZSB1c2VyIGNsaWNrcyBpbnRvIHRoZSBhY3Rpb24gYnV0dG9uLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4gdm9pZFxyXG4gICAgICovXHJcbiAgICBhZGRTbmFja0Jhcihjb25maWc6IE1hdFNuYWNrQmFyQ29uZmlnLCBtZXNzYWdlOiBzdHJpbmcsIGFjdGlvbiA9ICcnLCBhY3Rpb25DYWxsYmFjazogKCgpID0+IHZvaWQpIHwgbnVsbCA9IG51bGwpIHtcclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLl9pc0VuYWJsZWQpIHtcclxuXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLl9pc1Nob3dpbmdTbmFja0Jhcikge1xyXG5cclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUcnlpbmcgdG8gc2hvdyBhIHNuYWNrYmFyIHdoaWxlIGFub3RoZXIgb25lIGlzIHN0aWxsIHZpc2libGUnKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuX2lzU2hvd2luZ1NuYWNrQmFyID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgY29uc3Qgc25hY2tCYXJSZWYgPSB0aGlzLm1hdFNuYWNrQmFyLm9wZW4obWVzc2FnZSwgYWN0aW9uID09PSAnJyA/IHVuZGVmaW5lZCA6IGFjdGlvbiwgY29uZmlnKTtcclxuXHJcbiAgICAgICAgaWYgKGFjdGlvbkNhbGxiYWNrICE9PSBudWxsKSB7XHJcblxyXG4gICAgICAgICAgICBzbmFja0JhclJlZi5vbkFjdGlvbigpLnN1YnNjcmliZSgoKSA9PiB7XHJcblxyXG4gICAgICAgICAgICAgICAgYWN0aW9uQ2FsbGJhY2soKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvKipcclxuICAgICAqIFRlbGxzIGlmIHRoZSBhcHBsaWNhdGlvbiBpcyBjdXJyZW50bHkgc2hvd2luZyBhIHNuYWNrYmFyIG9yIG5vdFxyXG4gICAgICovXHJcbiAgICBnZXQgaXNTaG93aW5nU25hY2tCYXIoKSB7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLl9pc1Nob3dpbmdTbmFja0JhcjtcclxuICAgIH1cclxuXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBGb3JjZSB0aGUgcmVtb3ZhbCBvZiB0aGUgc25hY2sgYmFyIGRpYWxvZyBpZiBpdCBleGlzdHMuXHJcbiAgICAgKlxyXG4gICAgICogSWYgbm8gc25hY2tiYXIgaXMgY3VycmVudGx5IHZpc2libGUsIHRoaXMgbWV0aG9kIHdpbGwgZG8gbm90aGluZ1xyXG4gICAgICovXHJcbiAgICByZW1vdmVTbmFja0JhcigpIHtcclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLl9pc0VuYWJsZWQgfHwgIXRoaXMuX2lzU2hvd2luZ1NuYWNrQmFyKSB7XHJcblxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLm1hdFNuYWNrQmFyLmRpc21pc3MoKTtcclxuXHJcbiAgICAgICAgdGhpcy5faXNTaG93aW5nU25hY2tCYXIgPSBmYWxzZTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTaG93IGEgZGlhbG9nIHdpdGggb25lIG9yIG1vcmUgb3B0aW9ucyB0aGF0IGNhbiBiZSB1c2VkIHRvIGNsb3NlIGl0LiBXZSBjYW4gdXNlIGFueSBvZiB0aGUgcHJlZGVmaW5lZCBkaWFsb2cgdHlwZXMgdGhhdCBhcmUgYnVuZGxlZCB3aXRoXHJcbiAgICAgKiB0aGlzIGxpYnJhcnkgb3IgZXh0ZW5kIERpYWxvZ0Jhc2VDb21wb25lbnQgdG8gY3JlYXRlIG91ciBvd24gY3VzdG9tIG9uZXMuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIGRpYWxvZ0NvbXBvbmVudENsYXNzIEEgY2xhc3MgZm9yIGEgY29tcG9uZW50IHRoYXQgZXh0ZW5kcyBEaWFsb2dCYXNlQ29tcG9uZW50LCB3aGljaCB3aWxsIGJlIHRoZSBkaWFsb2cgdGhhdCBpcyBzaG93biB0byB0aGUgdXNlci5cclxuICAgICAqIEBwYXJhbSBwcm9wZXJ0aWVzIEFuIG9iamVjdCBjb250YWluaW5nIHRoZSBkaWZmZXJlbnQgdmlzdWFsIGFuZCB0ZXh0dWFsIG9wdGlvbnMgdGhhdCB0aGlzIGRpYWxvZyBhbGxvd3M6XHJcbiAgICAgKiAgICAgICAgICAgIC0gaWQ6IFRoZSBodG1sIHVuaXF1ZSBpZGVudGlmaWVyIHRoYXQgdGhlIGRpYWxvZyB3aWxsIGhhdmUgb25jZSBjcmVhdGVkLiBJZiBub3Qgc3BlY2lmaWVkLCBubyBpZCB3aWxsIGJlIGV4cGxpY2l0bHkgc2V0XHJcbiAgICAgKiAgICAgICAgICAgIC0gd2lkdGg6IDUwJSBieSBkZWZhdWx0LiBTcGVjaWZ5IHRoZSBjc3MgdmFsdWUgZm9yIHRoZSBkZWZhdWx0IGRpYWxvZyB3aWR0aC4gQXMgdGhlIGRpYWxvZyBpcyByZXNwb25zaXZlLCB0aGUgdmFsdWUgd2lsbCBiZSBhdXRvbWF0aWNhbGx5XHJcbiAgICAgKiAgICAgICAgICAgICAgcmVkdWNlZCBpZiB0aGUgYXZhaWxhYmxlIHNjcmVlbiBpcyBub3QgZW5vdWdoLCBhbmQgd2lsbCByZWFjaCB0aGUgZGVzaXJlZCB2YWx1ZSBvdGhlcndpc2UuIFdlIGNhbiBzZXQgYW55IGNzcyB1bml0IGxpa2UgcGl4ZWxzLCBcclxuICAgICAqICAgICAgICAgICAgICAlLCB2aCwgdncsIG9yIGFueSBvdGhlci4gRm9yIGV4YW1wbGU6ICc0MDBweCcsICc1MCUnLCBldGMuXHJcbiAgICAgKiAgICAgICAgICAgIC0gbWF4V2lkdGg6IERlZmluZXMgdGhlIG1heGltdW0gd2lkdGggdGhhdCB0aGUgZGlhbG9nIHdpbGwgaGF2ZSByZWdhcmRpbmcgdGhlIHZpZXdwb3J0LiBXZSBjYW4gc3BlY2lmeSBpdCBpbiAlIG9yIHZ3LCBqdXN0IGxpa2UgaXMgZG9uZSBpblxyXG4gICAgICogICAgICAgICAgICAgIGNzcy4gQnkgZGVmYXVsdCBpdCBpcyBkZWZpbmVkIGFzIDk2dncsIHdoaWNoIHdpbGwgZml0IDk2JSBvZiB0aGUgdmlld3BvcnQgb24gc21hbGwgZGV2aWNlc1xyXG4gICAgICogICAgICAgICAgICAtIGhlaWdodDogVE9ETyBkb2NzXHJcbiAgICAgKiAgICAgICAgICAgIC0gbWF4SGVpZ2h0OiBUT0RPIGRvY3NcclxuICAgICAqICAgICAgICAgICAgLSBtb2RhbDogVHJ1ZSAoZGVmYXVsdCkgaWYgc2VsZWN0aW5nIGFuIG9wdGlvbiBpcyBtYW5kYXRvcnkgdG8gY2xvc2UgdGhlIGRpYWxvZywgZmFsc2UgaWYgdGhlIGRpYWxvZyBjYW4gYmUgY2xvc2VkXHJcbiAgICAgKiAgICAgICAgICAgICAgYnkgdGhlIHVzZXIgY2xpY2tpbmcgb3V0c2lkZSBpdCBcclxuICAgICAqICAgICAgICAgICAgLSB0ZXh0czogQSBsaXN0IHdpdGggc3RyaW5ncyBjb250YWluaW5nIHRoZSBkaWFsb2cgdGV4dHMsIHNvcnRlZCBieSBpbXBvcnRhbmNlLiBXaGVuIGRpYWxvZyBoYXMgYSB0aXRsZSwgdGhpcyBzaG91bGRcclxuICAgICAqICAgICAgICAgICAgICBiZSBwbGFjZWQgZmlyc3QsIHN1YnRpdGxlIHNlY29uZCBhbmQgc28gKEVhY2ggZGlhbG9nIG1heSBhY2NlcHQgZGlmZmVyZW50IG51bWJlciBvZiB0ZXh0cykuXHJcbiAgICAgKiAgICAgICAgICAgIC0gb3B0aW9uczogQSBsaXN0IG9mIHN0cmluZ3MgdGhhdCB3aWxsIGJlIHVzZWQgYXMgYnV0dG9uIGNhcHRpb25zIGZvciBlYWNoIG9uZSBvZiB0aGUgYWNjZXB0ZWQgZGlhbG9nIG9wdGlvbnNcclxuICAgICAqICAgICAgICAgICAgLSB2aWV3Q29udGFpbmVyUmVmOiBUaGlzIGlzIGltcG9ydGFudCBpZiB3ZSB3YW50IHRvIHByb3BhZ2F0ZSBwcm92aWRlcnMgZnJvbSBhIHBhcmVudCBjb21wb25lbnQgdG8gdGhpcyBkaWFsb2cuIFdlIG11c3Qgc3BlY2lmeSBcclxuXHQgKiAgICAgICAgICAgICAgdGhpcyByZWZlcmVuY2UgdG8gbWFrZSBzdXJlIHRoZSBzYW1lIHNlcnZpY2VzIGluamVjdGVkIG9uIHRoZSBwYXJlbnQgYXJlIGF2YWlsYWJsZSB0b28gYXQgdGhlIGNoaWxkIGRpYWxvZyBcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIGNhbGxiYWNrIEEgZnVuY3Rpb24gdGhhdCB3aWxsIGJlIGNhbGxlZCBhZnRlciB0aGUgZGlhbG9nIGlzIGNsb3NlZCBhbmQgd2lsbCByZWNlaXZlIGEgc2VsZWN0aW9uIG9iamVjdCB3aXRoIHRoZSBudW1lcmljIGluZGV4IGFuZCB2YWx1ZSBmb3JcclxuICAgICAqICAgICAgICB0aGUgb3B0aW9uIHRoYXQncyBiZWVuIHNlbGVjdGVkIGJ5IHRoZSB1c2VyLiBpZiBubyBvcHRpb24gd2FzIHNlbGVjdGVkLCBpbmRleCB3aWxsIGJlIC0xIGFuZCB2YWx1ZSBudWxsXHJcbiAgICAgKi9cclxuICAgIGFkZERpYWxvZyhkaWFsb2dDb21wb25lbnRDbGFzczogVHlwZTxEaWFsb2dCYXNlQ29tcG9uZW50PixcclxuICAgICAgICAgICAgICBwcm9wZXJ0aWVzOiB7aWQ/OiBzdHJpbmcsXHJcblx0XHRcdFx0XHRcdCAgIHdpZHRoPzogc3RyaW5nLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhXaWR0aD86IHN0cmluZyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0Pzogc3RyaW5nLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhIZWlnaHQ/OiBzdHJpbmcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGFsPzogYm9vbGVhbixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHM/OiBzdHJpbmdbXSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucz86IHN0cmluZ1tdLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICB2aWV3Q29udGFpbmVyUmVmPzogVmlld0NvbnRhaW5lclJlZn0sIFxyXG4gICAgICAgICAgICAgIGNhbGxiYWNrOiBudWxsIHwgKChzZWxlY3Rpb246IHtpbmRleDpudW1iZXIsIHZhbHVlPzogYW55fSkgPT4gdm9pZCkgPSBudWxsKSB7XHJcblxyXG4gICAgICAgIGlmICghdGhpcy5faXNFbmFibGVkKSB7XHJcblxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICAgIC8vIFNldCB0aGUgZGVmYXVsdCB2YWx1ZXMgZm9yIG5vbiBzcGVjaWZpZWQgcHJvcGVydGllc1xyXG4gICAgICAgIHByb3BlcnRpZXMubW9kYWwgPSBwcm9wZXJ0aWVzLm1vZGFsID8/IHRydWU7XHJcbiAgICAgICAgcHJvcGVydGllcy50ZXh0cyA9IHByb3BlcnRpZXMudGV4dHMgPz8gW107XHJcbiAgICAgICAgcHJvcGVydGllcy5vcHRpb25zID0gcHJvcGVydGllcy5vcHRpb25zID8/IFtdO1xyXG5cclxuICAgICAgICAvLyBHZW5lcmF0ZSBhIHN0cmluZyB0byB1bmlxdWVseSBpZGVudGlmeSB0aGlzIGRpYWxvZyBvbiB0aGUgbGlzdCBvZiBhY3RpdmUgZGlhbG9nc1xyXG4gICAgICAgIC8vIEEgZGlhbG9nIGlzIGNvbnNpZGVyZWQgYXMgdW5pcXVlIGlmIHRoZSBkaWFsb2cgaWQgYW5kIHRleHRzIGFyZSBleGFjdGx5IHRoZSBzYW1lLiBXZSBkbyBub3QgdGFrZSBvcHRpb25zIGludG8gY29uc2lkZXJhdGlvblxyXG4gICAgICAgIC8vIGFzIHRoZXJlIG1heSBiZSBkaWFsb2dzIHdpdGggYSBiaWcgYW1vdW50IG9mIG9wdGlvbnMgYXZhaWxhYmxlLlxyXG4gICAgICAgIGxldCBjbGFzc05hbWUgPSAoZGlhbG9nQ29tcG9uZW50Q2xhc3MgYXMgYW55KS5ESUFMT0dfQ0xBU1NfTkFNRTtcclxuICAgICAgICBcclxuICAgICAgICBpZihjbGFzc05hbWUgPT09ICcnKXtcclxuICAgICAgICBcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBUaGUgc3RhdGljIHByb3BlcnR5IERJQUxPR19DTEFTU19OQU1FIGlzIG5vdCBkZWZpbmVkIG9yIGlzIGVtcHR5IGZvciB0aGlzIGRpYWxvZyBjb21wb25lbnQgKCR7ZGlhbG9nQ29tcG9uZW50Q2xhc3N9KWApOyAgICAgXHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICAgIGNvbnN0IGRpYWxvZ0hhc2ggPSBjbGFzc05hbWUgKyBwcm9wZXJ0aWVzLnRleHRzLmpvaW4oJycpO1xyXG5cclxuICAgICAgICAvLyBpZGVudGljYWwgZGlhbG9ncyB3b24ndCBiZSBhbGxvd2VkIGF0IHRoZSBzYW1lIHRpbWVcclxuICAgICAgICBpZiAodGhpcy5fYWN0aXZlRGlhbG9ncy5pbmNsdWRlcyhkaWFsb2dIYXNoKSkge1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgZGlhbG9nUmVmID0gdGhpcy5tYXREaWFsb2cub3BlbihkaWFsb2dDb21wb25lbnRDbGFzcywge1xyXG4gICAgICAgICAgICB3aWR0aDogcHJvcGVydGllcy53aWR0aCA/PyBcIjUwJVwiLFxyXG4gICAgICAgICAgICBtYXhXaWR0aDogcHJvcGVydGllcy5tYXhXaWR0aCA/PyBcIjk2dndcIixcclxuICAgICAgICAgICAgZGlzYWJsZUNsb3NlOiBwcm9wZXJ0aWVzLm1vZGFsLFxyXG4gICAgICAgICAgICBhdXRvRm9jdXM6IGZhbHNlLFxyXG4gICAgICAgICAgICBjbG9zZU9uTmF2aWdhdGlvbjogIXByb3BlcnRpZXMubW9kYWwsXHJcbiAgICAgICAgICAgIHZpZXdDb250YWluZXJSZWY6IHByb3BlcnRpZXMudmlld0NvbnRhaW5lclJlZixcclxuICAgICAgICAgICAgZGF0YTogeyB0ZXh0czogcHJvcGVydGllcy50ZXh0cywgb3B0aW9uczogcHJvcGVydGllcy5vcHRpb25zIH1cclxuICAgICAgICAgIH0pOyAgICAgIFxyXG5cdFx0XHJcblx0XHQvLyBBc3NpZ24gdGhlIGRpYWxvZyBJRCBvbmx5IGlmIHNwZWNpZmljYWxseSBzZXQgb24gcHJvcGVydGllc1xyXG5cdFx0aWYocHJvcGVydGllcy5pZCAmJiBwcm9wZXJ0aWVzLmlkICE9PSB1bmRlZmluZWQpe1xyXG5cdFx0XHRcclxuXHRcdFx0ZGlhbG9nUmVmLmlkID0gcHJvcGVydGllcy5pZDtcclxuXHRcdH1cclxuXHRcdFxyXG4gICAgICAgIHRoaXMuX2FjdGl2ZURpYWxvZ3MucHVzaChkaWFsb2dIYXNoKTtcclxuICAgICAgICB0aGlzLl9hY3RpdmVEaWFsb2dJbnN0YW5jZXMucHVzaChkaWFsb2dSZWYpO1xyXG5cclxuICAgICAgICBkaWFsb2dSZWYuYmVmb3JlQ2xvc2VkKCkuc3Vic2NyaWJlKChzZWxlY3Rpb246e2luZGV4Om51bWJlciwgdmFsdWU/OmFueX0pID0+IHtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuX2FjdGl2ZURpYWxvZ3MgPSBBcnJheVV0aWxzLnJlbW92ZUVsZW1lbnQodGhpcy5fYWN0aXZlRGlhbG9ncywgZGlhbG9nSGFzaCk7XHJcbiAgICAgICAgICAgIHRoaXMuX2FjdGl2ZURpYWxvZ0luc3RhbmNlcyA9IEFycmF5VXRpbHMucmVtb3ZlRWxlbWVudCh0aGlzLl9hY3RpdmVEaWFsb2dJbnN0YW5jZXMsIGRpYWxvZ1JlZik7XHJcblxyXG4gICAgICAgICAgICBpZighcHJvcGVydGllcy5tb2RhbCAmJiBzZWxlY3Rpb24gPT09IHVuZGVmaW5lZCl7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgc2VsZWN0aW9uID0geyBpbmRleDogLTEgfTtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIH1lbHNlIGlmICghTnVtZXJpY1V0aWxzLmlzSW50ZWdlcihzZWxlY3Rpb24uaW5kZXgpKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBjbG9zZURpYWxvZygpIGV4cGVjdHMgaW5kZXggdG8gYmUgYW4gaW50ZWdlcmApOyAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoY2FsbGJhY2sgIT09IG51bGwpIHtcclxuXHJcbiAgICAgICAgICAgICAgICBpZihzZWxlY3Rpb24uaW5kZXggPj0gMCAmJiBzZWxlY3Rpb24udmFsdWUgPT09IG51bGwpe1xyXG4gICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvbi52YWx1ZSA9IHByb3BlcnRpZXMub3B0aW9ucyFbc2VsZWN0aW9uLmluZGV4XTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAoY2FsbGJhY2sgYXMgKChzZWxlY3Rpb246e2luZGV4Om51bWJlciwgdmFsdWU/OmFueX0pID0+IHZvaWQpKShzZWxlY3Rpb24pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBcclxuICAgIFxyXG4gICAgLyoqXHJcbiAgICAgKiBTaG93IGEgZGlhbG9nIHdpdGggYSBjYWxlbmRhciB0byBsZXQgdGhlIHVzZXIgcGljayBhIGRhdGUuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHByb3BlcnRpZXMgQW4gb2JqZWN0IGNvbnRhaW5pbmcgdGhlIGRpZmZlcmVudCB2aXN1YWwgYW5kIHRleHR1YWwgb3B0aW9ucyB0aGF0IHRoaXMgZGlhbG9nIGFsbG93czpcclxuICAgICAqICAgICAgICAgICAgLSBpZDogVGhlIGh0bWwgdW5pcXVlIGlkZW50aWZpZXIgdGhhdCB0aGUgZGlhbG9nIHdpbGwgaGF2ZSBvbmNlIGNyZWF0ZWQuIElmIG5vdCBzcGVjaWZpZWQsIG5vIGlkIHdpbGwgYmUgZXhwbGljaXRseSBzZXRcclxuICAgICAqICAgICAgICAgICAgLSB3aWR0aDogU3BlY2lmeSB0aGUgY3NzIHZhbHVlIGZvciB0aGUgZGVmYXVsdCBkaWFsb2cgd2lkdGguIEFzIHRoZSBkaWFsb2cgaXMgcmVzcG9uc2l2ZSwgdGhlIHZhbHVlIHdpbGwgYmUgYXV0b21hdGljYWxseVxyXG4gICAgICogICAgICAgICAgICAgIHJlZHVjZWQgaWYgdGhlIGF2YWlsYWJsZSBzY3JlZW4gaXMgbm90IGVub3VnaCwgYW5kIHdpbGwgcmVhY2ggdGhlIGRlc2lyZWQgdmFsdWUgb3RoZXJ3aXNlLiBXZSBjYW4gc2V0IGFueSBjc3MgdW5pdCBsaWtlIHBpeGVscywgXHJcbiAgICAgKiAgICAgICAgICAgICAgJSwgdmgsIHZ3LCBvciBhbnkgb3RoZXIuIEZvciBleGFtcGxlOiAnNDAwcHgnLCAnNTAlJywgZXRjLlxyXG4gICAgICogICAgICAgICAgICAtIG1heFdpZHRoOiBEZWZpbmVzIHRoZSBtYXhpbXVtIHdpZHRoIHRoYXQgdGhlIGRpYWxvZyB3aWxsIGhhdmUgcmVnYXJkaW5nIHRoZSB2aWV3cG9ydC4gV2UgY2FuIHNwZWNpZnkgaXQgaW4gJSBvciB2dywganVzdCBsaWtlIGlzIGRvbmUgaW5cclxuICAgICAqICAgICAgICAgICAgICBjc3MuIEJ5IGRlZmF1bHQgaXQgaXMgZGVmaW5lZCBhcyA5NnZ3LCB3aGljaCB3aWxsIGZpdCA5NiUgb2YgdGhlIHZpZXdwb3J0IG9uIHNtYWxsIGRldmljZXNcclxuICAgICAqICAgICAgICAgICAgLSBoZWlnaHQ6IFRPRE8gZG9jc1xyXG4gICAgICogICAgICAgICAgICAtIG1heEhlaWdodDogVE9ETyBkb2NzXHJcbiAgICAgKiAgICAgICAgICAgIC0gbW9kYWw6IFRydWUgKGRlZmF1bHQpIGlmIHNlbGVjdGluZyBhbiBvcHRpb24gaXMgbWFuZGF0b3J5IHRvIGNsb3NlIHRoZSBkaWFsb2csIGZhbHNlIGlmIHRoZSBkaWFsb2cgY2FuIGJlIGNsb3NlZFxyXG4gICAgICogICAgICAgICAgICAgIGJ5IHRoZSB1c2VyIGNsaWNraW5nIG91dHNpZGUgaXQgXHJcbiAgICAgKiAgICAgICAgICAgIC0gdGl0bGU6IEFuIG9wdGlvbmFsIGRpYWxvZyB0aXRsZVxyXG4gICAgICogICAgICAgICAgICAtIHZpZXdDb250YWluZXJSZWY6IFRoaXMgaXMgaW1wb3J0YW50IHRvIHByb3BhZ2F0ZSBwcm92aWRlcnMgZnJvbSBhIHBhcmVudCBjb21wb25lbnQgdG8gdGhpcyBkaWFsb2cuIFdlIG11c3Qgc3BlY2lmeSBcclxuXHQgKiAgICAgICAgICAgICAgdGhpcyByZWZlcmVuY2UgdG8gbWFrZSBzdXJlIHRoZSBzYW1lIHNlcnZpY2VzIGluamVjdGVkIG9uIHRoZSBwYXJlbnQgYXJlIGF2YWlsYWJsZSB0b28gYXQgdGhlIGNoaWxkIGRpYWxvZyBcclxuICAgICAqIEBwYXJhbSBjYWxsYmFjayBBIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZCBhZnRlciB0aGUgZGlhbG9nIGlzIGNsb3NlZC4gSXQgd2lsbCByZWNlaXZlIGEgRGF0ZSgpIG9iamVjdCBzZWxlY3RlZCBieSB0aGUgdXNlciBvciBudWxsIGlmIG5vIHNlbGVjdGlvbiBoYXBwZW5lZFxyXG4gICAgICovXHJcbiAgICBhZGREYXRlU2VsZWN0aW9uRGlhbG9nKHByb3BlcnRpZXM6IHtpZD86IHN0cmluZyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoPzogc3RyaW5nLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4V2lkdGg/OiBzdHJpbmcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ/OiBzdHJpbmcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhIZWlnaHQ/OiBzdHJpbmcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RhbD86IGJvb2xlYW4sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZT86IHN0cmluZyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgXHRcdFx0XHR2aWV3Q29udGFpbmVyUmVmOiBWaWV3Q29udGFpbmVyUmVmfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2s6ICgoc2VsZWN0ZWREYXRlOiBudWxsIHwgRGF0ZSkgPT4gdm9pZCkpIHtcclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLl9pc0VuYWJsZWQpIHtcclxuXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5hZGREaWFsb2coRGlhbG9nRGF0ZVNlbGVjdGlvbkNvbXBvbmVudCxcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgaWQ6IHByb3BlcnRpZXMuaWQgPz8gdW5kZWZpbmVkLFxyXG4gICAgICAgICAgICAgICAgd2lkdGg6IHByb3BlcnRpZXMud2lkdGggPz8gXCI1MCVcIixcclxuICAgICAgICAgICAgICAgIG1heFdpZHRoOiBwcm9wZXJ0aWVzLm1heFdpZHRoID8/IFwiOTZ2d1wiLFxyXG4gICAgICAgICAgICAgICAgaGVpZ2h0OiBwcm9wZXJ0aWVzLmhlaWdodCA/PyBcIjUwJVwiLFxyXG4gICAgICAgICAgICAgICAgbWF4SGVpZ2h0OiBwcm9wZXJ0aWVzLm1heEhlaWdodCA/PyBcIjkydndcIixcclxuICAgICAgICAgICAgICAgIG1vZGFsOiBwcm9wZXJ0aWVzLm1vZGFsID8/IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgdGV4dHM6IFtwcm9wZXJ0aWVzLnRpdGxlID8/ICcnXSxcclxuICAgICAgICAgICAgICAgIHZpZXdDb250YWluZXJSZWY6IHByb3BlcnRpZXMudmlld0NvbnRhaW5lclJlZlxyXG4gICAgICAgICAgICB9LChzZWxlY3Rpb24pID0+IHtcclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgY2FsbGJhY2soc2VsZWN0aW9uLmluZGV4ID09PSAtMSA/IG51bGwgOiAoc2VsZWN0aW9uLnZhbHVlIGFzIERhdGUpKTsgIFxyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIFxyXG4gICAgXHJcbiAgICAvKipcclxuICAgICAqIEZvcmNlIHRoZSByZW1vdmFsIG9mIGFsbCB0aGUgZGlhbG9ncyB0aGF0IGFyZSBjdXJyZW50bHkgdmlzaWJsZS5cclxuICAgICAqXHJcbiAgICAgKiBJZiBubyBkaWFsb2dzIGFyZSBjdXJyZW50bHkgdmlzaWJsZSwgdGhpcyBtZXRob2Qgd2lsbCBkbyBub3RoaW5nXHJcbiAgICAgKi9cclxuICAgIHJlbW92ZUFsbERpYWxvZ3MoKSB7XHJcblxyXG4gICAgICAgIGlmICghdGhpcy5faXNFbmFibGVkKSB7XHJcblxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmb3IgKGNvbnN0IGRpYWxvZ1JlZiBvZiB0aGlzLl9hY3RpdmVEaWFsb2dJbnN0YW5jZXMpIHtcclxuXHJcbiAgICAgICAgICAgIGRpYWxvZ1JlZi5jbG9zZSh7aW5kZXg6LTF9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5fYWN0aXZlRGlhbG9ncyA9IFtdO1xyXG4gICAgICAgIHRoaXMuX2FjdGl2ZURpYWxvZ0luc3RhbmNlcyA9IFtdO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvKipcclxuICAgICAqIFRPRE8gLSB0cmFuc2xhdGUgZnJvbSBUUyB2ZXJzaW9uXHJcbiAgICAgKi9cclxuLy8gICAgYWRkU2lkZU5hdigpe1xyXG4vL1xyXG4vLyAgICB9XHJcblxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVE9ETyAtIHRyYW5zbGF0ZSBmcm9tIFRTIHZlcnNpb25cclxuICAgICAqL1xyXG4vLyAgICBnZXQgaXNTaG93aW5nU2lkZU5hdigpe1xyXG4vL1xyXG4vLyAgICB9XHJcblxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVE9ETyAtIHRyYW5zbGF0ZSBmcm9tIFRTIHZlcnNpb25cclxuICAgICAqL1xyXG4vLyAgICByZW1vdmVTaWRlTmF2KCl7XHJcbi8vXHJcbi8vICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEJsb2NrIGFsbCB0aGUgdXNlciBpbnRlcmFjdGlvbnMgd2l0aCB0aGUgYXBwbGljYXRpb24gKGtleWJvYXJkLCB0b3VjaCwgbW91c2UsIC4uLilcclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBfZGlzYWJsZVVzZXJJbnRlcmFjdGlvbigpIHtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuX2RvY3VtZW50S2V5ZG93blVubGlzdGVuID09PSBudWxsKSB7XHJcblxyXG4gICAgICAgICAgICB0aGlzLl9kb2N1bWVudEtleWRvd25Vbmxpc3RlbiA9IHRoaXMuX3JlbmRlcmVyLmxpc3RlbignZG9jdW1lbnQnLCAna2V5ZG93bicsIChldmVudCkgPT4gZXZlbnQucHJldmVudERlZmF1bHQoKSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5fZG9jdW1lbnRNb3VzZWRvd25Vbmxpc3RlbiA9PT0gbnVsbCkge1xyXG5cclxuICAgICAgICAgICAgdGhpcy5fZG9jdW1lbnRNb3VzZWRvd25Vbmxpc3RlbiA9IHRoaXMuX3JlbmRlcmVyLmxpc3RlbignZG9jdW1lbnQnLCAnbW91c2Vkb3duJywgKGV2ZW50KSA9PiBldmVudC5wcmV2ZW50RGVmYXVsdCgpKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLl9kb2N1bWVudFBvaW50ZXJkb3duVW5saXN0ZW4gPT09IG51bGwpIHtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuX2RvY3VtZW50UG9pbnRlcmRvd25Vbmxpc3RlbiA9IHRoaXMuX3JlbmRlcmVyLmxpc3RlbignZG9jdW1lbnQnLCAncG9pbnRlcmRvd24nLCAoZXZlbnQpID0+IGV2ZW50LnByZXZlbnREZWZhdWx0KCkpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXN0b3JlIHRoZSB1c2VyIGludGVyYWN0aW9ucyB0aGF0IHdlcmUgcHJldmlvdXNseSBkaXNhYmxlZCB3aXRoIF9kaXNhYmxlVXNlckludGVyYWN0aW9uIG1ldGhvZFxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIF9lbmFibGVVc2VySW50ZXJhY3Rpb24oKSB7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLl9kb2N1bWVudEtleWRvd25Vbmxpc3RlbiAhPT0gbnVsbCkge1xyXG5cclxuICAgICAgICAgICAgdGhpcy5fZG9jdW1lbnRLZXlkb3duVW5saXN0ZW4oKTtcclxuICAgICAgICAgICAgdGhpcy5fZG9jdW1lbnRLZXlkb3duVW5saXN0ZW4gPSBudWxsO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuX2RvY3VtZW50TW91c2Vkb3duVW5saXN0ZW4gIT09IG51bGwpIHtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuX2RvY3VtZW50TW91c2Vkb3duVW5saXN0ZW4oKTtcclxuICAgICAgICAgICAgdGhpcy5fZG9jdW1lbnRNb3VzZWRvd25Vbmxpc3RlbiA9IG51bGw7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5fZG9jdW1lbnRQb2ludGVyZG93blVubGlzdGVuICE9PSBudWxsKSB7XHJcblxyXG4gICAgICAgICAgICB0aGlzLl9kb2N1bWVudFBvaW50ZXJkb3duVW5saXN0ZW4oKTtcclxuICAgICAgICAgICAgdGhpcy5fZG9jdW1lbnRNb3VzZWRvd25Vbmxpc3RlbiA9IG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbiJdfQ==
406
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlhbG9nLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90dXJib2d1aS1hbmd1bGFyL3NyYy9tYWluL2NvbnRyb2xsZXIvZGlhbG9nLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7R0FPRztBQUVILE9BQU8sRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDM0QsT0FBTyxFQUFRLFVBQVUsRUFBcUcsTUFBTSxlQUFlLENBQUM7QUFHcEosT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sOERBQThELENBQUM7QUFDdEcsT0FBTyxFQUFFLGVBQWUsRUFBRSxlQUFlLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUV2RSxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSwwRUFBMEUsQ0FBQztBQUN4SCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQzs7OztBQUcvRTs7R0FFRztBQUlILE1BQU0sT0FBTyxhQUFjLFNBQVEscUJBQXFCO0lBeUZwRCxZQUFZLGVBQWlDLEVBQ2hCLFdBQXdCLEVBQ3hCLFNBQW9CLEVBQ3BCLFFBQWtCLEVBQ2xCLGNBQThCLEVBQzlCLHdCQUFrRDtRQUVqRixLQUFLLENBQUMsYUFBYSxDQUFDLENBQUM7UUFOVSxnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUN4QixjQUFTLEdBQVQsU0FBUyxDQUFXO1FBQ3BCLGFBQVEsR0FBUixRQUFRLENBQVU7UUFDbEIsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQzlCLDZCQUF3QixHQUF4Qix3QkFBd0IsQ0FBMEI7UUEzRi9FOzs7O1dBSUc7UUFDSCxrQ0FBNkIsR0FBaUMsc0JBQXNCLENBQUM7UUFHckY7O1dBRUc7UUFDSyxlQUFVLEdBQUcsSUFBSSxDQUFDO1FBRzFCOztXQUVHO1FBQ0ssd0JBQW1CLEdBQUcsS0FBSyxDQUFDO1FBR3BDOzs7O1dBSUc7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LHdCQUF3QixLQUFLLElBQUksRUFBRTtZQUV4QyxJQUFJLENBQUMsd0JBQXdCLEVBQUUsQ0FBQztZQUNoQyxJQUFJLENBQUMsd0JBQXdCLEdBQUcsSUFBSSxDQUFDO1NBQ3hDO1FBRUQsSUFBSSxJQUFJLENBQUMsMEJBQTBCLEtBQUssSUFBSSxFQUFFO1lBRTFDLElBQUksQ0FBQywwQkFBMEIsRUFBRSxDQUFDO1lBQ2xDLElBQUksQ0FBQywwQkFBMEIsR0FBRyxJQUFJLENBQUM7U0FDMUM7UUFFRCxJQUFJLElBQUksQ0FBQyw0QkFBNEIsS0FBSyxJQUFJLEVBQUU7WUFFNUMsSUFBSSxDQUFDLDRCQUE0QixFQUFFLENBQUM7WUFDcEMsSUFBSSxDQUFDLDBCQUEwQixHQUFHLElBQUksQ0FBQztTQUMxQztJQUNMLENBQUM7OEdBcGlCUSxhQUFhO2tIQUFiLGFBQWEsY0FGWixNQUFNOzsyRkFFUCxhQUFhO2tCQUh6QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBUdXJib0dVSSBpcyBBIGxpYnJhcnkgdGhhdCBoZWxwcyB3aXRoIHRoZSBtb3N0IGNvbW1vbiBhbmQgZ2VuZXJpYyBVSSBlbGVtZW50cyBhbmQgZnVuY3Rpb25hbGl0aWVzXHJcbiAqXHJcbiAqIFdlYnNpdGUgOiAtPiBodHRwOi8vd3d3LnR1cmJvZ3VpLm9yZ1xyXG4gKiBMaWNlbnNlIDogLT4gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMC4gWW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxyXG4gKiBMaWNlbnNlIFVybCA6IC0+IGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxyXG4gKiBDb3B5UmlnaHQgOiAtPiBDb3B5cmlnaHQgMjAxOCBFZGVydG9uZSBBZHZhbmRlZCBTb2x1dGlvbnMuIGh0dHBzOi8vd3d3LmVkZXJ0b25lLmNvbVxyXG4gKi9cclxuXHJcbmltcG9ydCB7IEFycmF5VXRpbHMsIE51bWVyaWNVdGlscyB9IGZyb20gJ3R1cmJvY29tbW9ucy10cyc7XHJcbmltcG9ydCB7IFR5cGUsIEluamVjdGFibGUsIENvbXBvbmVudEZhY3RvcnlSZXNvbHZlciwgSW5qZWN0b3IsIEFwcGxpY2F0aW9uUmVmLCBSZW5kZXJlcjIsIFJlbmRlcmVyRmFjdG9yeTIsIFZpZXdDb250YWluZXJSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgTWF0RGlhbG9nLCBNYXREaWFsb2dSZWYgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xyXG5pbXBvcnQgeyBNYXRTbmFja0JhciwgTWF0U25hY2tCYXJDb25maWcgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zbmFjay1iYXInO1xyXG5pbXBvcnQgeyBCdXN5U3RhdGVCYXNlQ29tcG9uZW50IH0gZnJvbSAnLi4vdmlldy9jb21wb25lbnRzL2J1c3ktc3RhdGUtYmFzZS9idXN5LXN0YXRlLWJhc2UuY29tcG9uZW50JztcclxuaW1wb3J0IHsgQ29tcG9uZW50UG9ydGFsLCBEb21Qb3J0YWxPdXRsZXQgfSBmcm9tICdAYW5ndWxhci9jZGsvcG9ydGFsJztcclxuaW1wb3J0IHsgRGlhbG9nQmFzZUNvbXBvbmVudCB9IGZyb20gJy4uL3ZpZXcvY29tcG9uZW50cy9kaWFsb2ctYmFzZS9kaWFsb2ctYmFzZS5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBEaWFsb2dEYXRlU2VsZWN0aW9uQ29tcG9uZW50IH0gZnJvbSAnLi4vdmlldy9jb21wb25lbnRzL2RpYWxvZy1kYXRlLXNlbGVjdGlvbi9kaWFsb2ctZGF0ZS1zZWxlY3Rpb24uY29tcG9uZW50JztcclxuaW1wb3J0IHsgU2luZ2xldG9uZVN0cmljdENsYXNzIH0gZnJvbSAnLi4vbW9kZWwvY2xhc3Nlcy9TaW5nbGV0b25lU3RyaWN0Q2xhc3MnO1xuXHJcblxyXG4vKipcclxuICogTWFuYWdlcyB0aGUgYXBwbGljYXRpb24gbW9kYWwgYW5kIG5vbiBtb2RhbCBmbG9hdGluZyBlbGVtZW50c1xyXG4gKi9cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290JyxcclxufSlcclxuZXhwb3J0IGNsYXNzIERpYWxvZ1NlcnZpY2UgZXh0ZW5kcyBTaW5nbGV0b25lU3RyaWN0Q2xhc3Mge1xyXG5cclxuXHJcbiAgICAvKipcclxuICAgICAqIFVzZWQgdG8gbW9kaWZ5IHRoZSBidXN5IHN0YXRlIGNvbXBvbmVudCB0aGF0IGlzIHNob3duIGJ5IGRlZmF1bHQgYnkgdGhlIGFkZE1vZGFsQnVzeVN0YXRlKCkgbWV0aG9kLlxyXG4gICAgICpcclxuICAgICAqIEBzZWUgdGhpcy5hZGRNb2RhbEJ1c3lTdGF0ZSgpXHJcbiAgICAgKi9cclxuICAgIGN1c3RvbUJ1c3lTdGF0ZUNvbXBvbmVudENsYXNzOiBUeXBlPEJ1c3lTdGF0ZUJhc2VDb21wb25lbnQ+ID0gQnVzeVN0YXRlQmFzZUNvbXBvbmVudDtcclxuXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDaGVjayBwdWJsaWMgZ2V0dGVyIGZvciBkb2NzXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgX2lzRW5hYmxlZCA9IHRydWU7XHJcblxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGVsbHMgaWYgdGhlIG1haW4gYXBwbGljYXRpb24gaXMgY3VycmVudGx5IHNob3dpbmcgYSBidXN5IHN0YXRlIHRoYXQgYmxvY2tzIGFsbCB1c2VyIGludGVyYWN0aW9uXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgX2lzU2hvd2luZ0J1c3lTdGF0ZSA9IGZhbHNlO1xyXG5cclxuXHJcbiAgICAvKipcclxuICAgICAqIEEgcmVmZXJlbmNlIHRvIHRoZSBtb2RhbCBidXN5IHN0YXRlIGNvbXBvbmVudCB0aGF0IGlzIGluaXRpYWxpemVkIG9ubHkgdGhlIGZpcnN0IHRpbWUgaXQgaXMgY2FsbGVkLlxyXG4gICAgICpcclxuICAgICAqIChUbyBhcHBlbmQgdGhlIGJ1c3kgc3RhdGUgZHluYW1pY2FsbHksIHdlIHVzZSB0aGUgUG9ydGFsIGNvbmNlcHQgZnJvbSB0aGUgYW5ndWxhciBtYXRlcmlhbCBsaWJyYXJ5KVxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIF9jb21wb25lbnRQb3J0YWw6IENvbXBvbmVudFBvcnRhbDxCdXN5U3RhdGVCYXNlQ29tcG9uZW50PiB8IG51bGwgPSBudWxsO1xyXG5cclxuXHJcbiAgICAvKipcclxuICAgICAqIEEgcmVmZXJlbmNlIHRvIHRoZSBtb2RhbCBidXN5IHN0YXRlIGNvbnRhaW5lciB3aGVyZSB0aGUgY29tcG9uZW50IHdpbGwgYmUgYWRkZWRcclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBfbW9kYWxCdXN5U3RhdGVIb3N0OiBEb21Qb3J0YWxPdXRsZXQgfCBudWxsID0gbnVsbDtcclxuXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUZWxscyBpZiB0aGUgbWFuYWdlciBpcyBjdXJyZW50bHkgc2hvd2luZyBhIHNuYWNrYmFyIGVsZW1lbnQgb3Igbm90XHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgX2lzU2hvd2luZ1NuYWNrQmFyID0gZmFsc2U7XHJcblxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ29udGFpbnMgYSBsaXN0IG9mIHRoZSBkaWFsb2dzIHRoYXQgYXJlIGN1cnJlbnRseSB2aXNpYmxlIHRvIHRoZSB1c2VyLlxyXG4gICAgICogRWFjaCBpdGVtIGluIHRoaXMgbGlzdCBpcyBhIGhhc2ggdGhhdCBpcyBjb21wdXRlZCB3aGVuIGRpYWxvZyBpcyBjcmVhdGVkIHRvIHVuaXF1ZWx5IGlkZW50aWZ5IGl0LlxyXG4gICAgICpcclxuICAgICAqIEVtcHR5IGxpc3QgbWVhbnMgbm8gZGlhbG9ncyBhcmUgY3VycmVudGx5IHZpc2libGVcclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBfYWN0aXZlRGlhbG9nczogc3RyaW5nW10gPSBbXTtcclxuXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDb250YWlucyBhIGxpc3Qgd2l0aCBhbGwgdGhlIE1hdERpYWxvZyBpbnN0YW5jZXMgdGhhdCBhcmUgY3VycmVudGx5IHZpc2libGUgdG8gdGhlIHVzZXIuXHJcbiAgICAgKiBUaGUgbGlzdCB1c2VzIHRoZSBzYW1lIG9yZGVyIGFzIHRoZSBsaXN0IG9mIF9hY3RpdmVEaWFsb2dzIGhhc2ggdmFsdWVzXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgX2FjdGl2ZURpYWxvZ0luc3RhbmNlczogTWF0RGlhbG9nUmVmPERpYWxvZ0Jhc2VDb21wb25lbnQ+W10gPSBbXTtcclxuXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBVc2VkIHRvIHN0b3JlIHRoZSBpbml0aWFsaXplZCBSZW5kZXJlciAyIGluc3RhbmNlIHRoYXQgaXMgdXNlZCBieSB0aGlzIGNsYXNzXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgcmVhZG9ubHkgX3JlbmRlcmVyOiBSZW5kZXJlcjI7XHJcblxyXG5cclxuICAgIC8qKlxyXG4gICAgICogTWV0aG9kIHRoYXQgaXMgdXNlZCB0byBkZWxldGUgdGhlIHdpbmRvdyBiZWZvcmV1bmxvYWQgZXZlbnQgbGlzdGVuZXIgb25jZSBub3QgdXNlZCBhbnltb3JlXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgX3dpbmRvd0JlZm9yZVVubG9hZFVuTGlzdGVuOiAoKCkgPT4gdm9pZCkgfCBudWxsID0gbnVsbDtcclxuXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBNZXRob2QgdGhhdCBpcyB1c2VkIHRvIGRlbGV0ZSB0aGUgZG9jdW1lbnQga2V5ZG93biBldmVudCBsaXN0ZW5lciBvbmNlIG5vdCB1c2VkIGFueW1vcmVcclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBfZG9jdW1lbnRLZXlkb3duVW5saXN0ZW46ICgoKSA9PiB2b2lkKSB8IG51bGwgPSBudWxsO1xyXG5cclxuXHJcbiAgICAvKipcclxuICAgICAqIE1ldGhvZCB0aGF0IGlzIHVzZWQgdG8gZGVsZXRlIHRoZSBkb2N1bWVudCBtb3VzZWRvd24gZXZlbnQgbGlzdGVuZXIgb25jZSBub3QgdXNlZCBhbnltb3JlXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgX2RvY3VtZW50TW91c2Vkb3duVW5saXN0ZW46ICgoKSA9PiB2b2lkKSB8IG51bGwgPSBudWxsO1xyXG5cclxuXHJcbiAgICAvKipcclxuICAgICAqIE1ldGhvZCB0aGF0IGlzIHVzZWQgdG8gZGVsZXRlIHRoZSBkb2N1bWVudCBwb2ludGVyZG93biBldmVudCBsaXN0ZW5lciBvbmNlIG5vdCB1c2VkIGFueW1vcmVcclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBfZG9jdW1lbnRQb2ludGVyZG93blVubGlzdGVuOiAoKCkgPT4gdm9pZCkgfCBudWxsID0gbnVsbDtcclxuXHJcblxyXG4gICAgY29uc3RydWN0b3IocmVuZGVyZXJGYWN0b3J5OiBSZW5kZXJlckZhY3RvcnkyLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSByZWFkb25seSBtYXRTbmFja0JhcjogTWF0U25hY2tCYXIsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIHJlYWRvbmx5IG1hdERpYWxvZzogTWF0RGlhbG9nLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSByZWFkb25seSBpbmplY3RvcjogSW5qZWN0b3IsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIHJlYWRvbmx5IGFwcGxpY2F0aW9uUmVmOiBBcHBsaWNhdGlvblJlZixcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgcmVhZG9ubHkgY29tcG9uZW50RmFjdG9yeVJlc29sdmVyOiBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIpIHtcclxuXHJcblx0XHRzdXBlcihEaWFsb2dTZXJ2aWNlKTtcclxuXHJcbiAgICAgICAgdGhpcy5fcmVuZGVyZXIgPSByZW5kZXJlckZhY3RvcnkuY3JlYXRlUmVuZGVyZXIobnVsbCwgbnVsbCk7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGVsbHMgaWYgdGhpcyBkaWFsb2cgc2VydmljZSBpcyBlbmFibGVkIG9yIG5vdC4gSWYgZGlhbG9nIHNlcnZpY2UgaXMgZGlzYWJsZWQsIG5vbmUgb2YgaXQncyBmZWF0dXJlcyB3aWxsIHdvcmtcclxuICAgICAqIFRoaXMgaXMgdXNlZCB0byBibG9jayBhbGwgZGlhbG9nIGZlYXR1cmVzIG5vcm1hbGx5IHdoZW4gc2h1dHRpbmcgZG93biB0aGUgYXBwbGljYXRpb25cclxuICAgICAqXHJcbiAgICAgKiBVc2Ugd2l0aCBjYXV0aW9uLiBXaGVuIHRoaXMgaXMgc2V0IHRvIGZhbHNlLCBkaWFsb2cgc2VydmljZSBzdG9wcyB3b3JraW5nLlxyXG4gICAgICovXHJcbiAgICBzZXQgaXNFbmFibGVkKHY6IGJvb2xlYW4pIHtcclxuXHJcbiAgICAgICAgaWYgKHYgPT09IHRoaXMuX2lzRW5hYmxlZCkge1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5faXNFbmFibGVkID0gdjtcclxuICAgIH1cclxuXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBFbmFibGVzIGEgd2FybmluZyB0aGF0IHdpbGwgYmUgc2hvd24gdG8gdGhlIHVzZXIgd2hlbiBoZS9zaGUgdHJpZXMgdG8gY2xvc2UgdGhlIGFwcGxpY2F0aW9uLlxyXG4gICAgICogVGhpcyB3YXJuaW5nIHdpbGwgcHJvbXB0IHRoZSB1c2VyIHRvIGNvbnRpbnVlIHdpdGggdGhlIGV4aXQgcHJvY2VzcyBvciBjYW5jZWwgaXQuXHJcbiAgICAgKiBUaGUgc3BlY2lmaWMgdGV4dHMgb2YgdGhpcyBtZXNzYWdlIGFyZSBhIGdlbmVyaWMgb25lcyBhbmQgY2Fubm90IGJlIGNoYW5nZWQuXHJcbiAgICAgKlxyXG4gICAgICogSU1QT1JUQU5UOiBUaGlzIG1ldGhvZCBtdXN0IGJlIGNhbGxlZCBhZnRlciB0aGUgbWFpbiBhcHBsaWNhdGlvbiBoYXMgYmVlbiBpbml0aWFsaXplZCBpbiBvcmRlciB0byB3b3JrLFxyXG4gICAgICogb3RoZXJ3aXNlIGl0IHdpbGwgZG8gbm90aGluZy5cclxuICAgICAqL1xyXG4gICAgYWRkQ2xvc2VBcHBsaWNhdGlvbldhcm5pbmcoKSB7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLl93aW5kb3dCZWZvcmVVbmxvYWRVbkxpc3RlbiA9PT0gbnVsbCkge1xyXG5cclxuICAgICAgICAgICAgdGhpcy5fd2luZG93QmVmb3JlVW5sb2FkVW5MaXN0ZW4gPSB0aGlzLl9yZW5kZXJlci5saXN0ZW4oJ3dpbmRvdycsICdiZWZvcmV1bmxvYWQnLFxyXG4gICAgICAgICAgICAgICAgKGV2ZW50KSA9PiBldmVudC5yZXR1cm5WYWx1ZSA9IHRydWUpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZW1vdmUgdGhlIGNsb3NlIGFwcGxpY2F0aW9uIHdhcm5pbmcgbWVzc2FnZSBpZiBwcmV2aW91c2x5IGFzc2lnbmVkXHJcbiAgICAgKi9cclxuICAgIHJlbW92ZUNsb3NlQXBwbGljYXRpb25XYXJuaW5nKCkge1xyXG5cclxuICAgICAgICBpZiAodGhpcy5fd2luZG93QmVmb3JlVW5sb2FkVW5MaXN0ZW4gIT09IG51bGwpIHtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuX3dpbmRvd0JlZm9yZVVubG9hZFVuTGlzdGVuKCk7XHJcbiAgICAgICAgICAgIHRoaXMuX3dpbmRvd0JlZm9yZVVubG9hZFVuTGlzdGVuID0gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2hhbmdlIHRoZSBhcHBsaWNhdGlvbiB2aXN1YWwgYXBwZWFyYW5jZSBzbyB0aGUgdXNlciBwZXJjZWl2ZXMgdGhhdCB0aGUgYXBwbGljYXRpb24gaXNcclxuICAgICAqIGN1cnJlbnRseSBidXN5LiBXaGlsZSBtb2RhbCBidXN5IHN0YXRlIGlzIGVuYWJsZWQsIG5vIHVzZXIgaW5wdXQgaXMgcG9zc2libGUgbmVpdGhlciB2aWFcclxuICAgICAqIGtleWJvYXJkLCBtb3VzZSBvciB0b3VjaC4gVXNlIHRoaXMgc3RhdGUgd2hlbiBwZXJmb3JtaW5nIHNlcnZlciByZXF1ZXN0cyBvciBvcGVyYXRpb25zIHRoYXRcclxuICAgICAqIG11c3QgYmxvY2sgdGhlIHVzZXIgaW50ZXJhY3Rpb24gd2l0aCB0aGUgYXBwbGljYXRpb24uIFRvIGFsbG93IHVzZXIgaW50ZXJhY3Rpb24gYWdhaW4sIHlvdSBtdXN0XHJcbiAgICAgKiBjYWxsIHJlbW92ZU1vZGFsQnVzeVN0YXRlKClcclxuICAgICAqXHJcbiAgICAgKiBOb3RpY2U6IFdlIGNhbiBtb2RpZnkgdGhlIGJ1c3kgc3RhdGUgdmlzdWFsIGNvbXBvbmVudCB0aGF0IGlzIHNob3duIGJ5IHRoaXMgbWV0aG9kLiBUbyBkbyBpdCwgd2UgbXVzdFxyXG4gICAgICogc2V0IHRoaXMuY3VzdG9tQnVzeVN0YXRlQ29tcG9uZW50Q2xhc3MgcHJvcGVydHkgd2l0aCBvdXIgb3duIGN1c3RvbSBidXN5IHN0YXRlIGNvbXBvbmVudCBjbGFzcy4gKFdlIGNhbiBkbyBpdCBhdFxyXG4gICAgICogb3VyIG1haW4gYXBwbGljYXRpb24gY29tcG9uZW50IGNvbnN0cnVjdG9yIGZvciBleGFtcGxlKS4gT3VyIGN1c3RvbSBjb21wb25lbnQgbXVzdCBleHRlbmQgdGhlXHJcbiAgICAgKiBCdXN5U3RhdGVCYXNlQ29tcG9uZW50IG9uZSB0byBhZGQgaXRzIG93biB2aXN1YWwgYXBwZWFyYW5jZS5cclxuICAgICAqXHJcbiAgICAgKiBAc2VlIHRoaXMuY3VzdG9tQnVzeVN0YXRlQ29tcG9uZW50Q2xhc3NcclxuICAgICAqL1xyXG4gICAgYWRkTW9kYWxCdXN5U3RhdGUoKSB7XHJcblxyXG4gICAgICAgIGlmICghdGhpcy5faXNFbmFibGVkIHx8IHRoaXMuX2lzU2hvd2luZ0J1c3lTdGF0ZSkge1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5fZGlzYWJsZVVzZXJJbnRlcmFjdGlvbigpO1xyXG5cclxuICAgICAgICAvLyBEeW5hbWljYWxseSBjcmVhdGUgdGhlIGJ1c3kgc3RhdGUgY29tcG9uZW50IHJlZmVyZW5jZSBpZiB0aGlzIGlzIHRoZSBmaXJzdCB0aW1lXHJcbiAgICAgICAgaWYgKHRoaXMuX2NvbXBvbmVudFBvcnRhbCA9PT0gbnVsbCkge1xyXG5cclxuICAgICAgICAgICAgdGhpcy5fY29tcG9uZW50UG9ydGFsID0gbmV3IENvbXBvbmVudFBvcnRhbCh0aGlzLmN1c3RvbUJ1c3lTdGF0ZUNvbXBvbmVudENsYXNzKTtcclxuXHJcbiAgICAgICAgICAgIC8vIENyZWF0ZSBhIFBvcnRhbEhvc3Qgd2l0aCBkb2N1bWVudC5ib2R5IGFzIGl0cyBhbmNob3IgZWxlbWVudFxyXG4gICAgICAgICAgICB0aGlzLl9tb2RhbEJ1c3lTdGF0ZUhvc3QgPSBuZXcgRG9tUG9ydGFsT3V0bGV0KFxyXG4gICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmJvZHksXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hcHBsaWNhdGlvblJlZixcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmluamVjdG9yKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgICh0aGlzLl9tb2RhbEJ1c3lTdGF0ZUhvc3QgYXMgRG9tUG9ydGFsT3V0bGV0KS5hdHRhY2godGhpcy5fY29tcG9uZW50UG9ydGFsKTtcclxuXHJcbiAgICAgICAgdGhpcy5faXNTaG93aW5nQnVzeVN0YXRlID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUZWxscyBpZiB0aGUgYXBwbGljYXRpb24gaXMgY3VycmVudGx5IGxvY2tlZCBpbiBhIG1vZGFsIGJ1c3kgc3RhdGUgKGNhdXNlZCBieSBhbiBhZGRNb2RhbEJ1c3lTdGF0ZSgpIGNhbGwpXHJcbiAgICAgKi9cclxuICAgIGdldCBpc1Nob3dpbmdCdXN5U3RhdGUoKSB7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLl9pc1Nob3dpbmdCdXN5U3RhdGU7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2FuY2VsIHRoZSBhcHBsaWNhdGlvbiBidXN5IHN0YXRlIGFuZCByZXN0b3JlIGl0IGJhY2sgdG8gbm9ybWFsIHNvIHVzZXIgaW50ZXJhY3Rpb24gaXMgYWxsb3dlZCBhZ2FpblxyXG4gICAgICovXHJcbiAgICByZW1vdmVNb2RhbEJ1c3lTdGF0ZSgpIHtcclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLl9pc0VuYWJsZWQgfHwgIXRoaXMuX2lzU2hvd2luZ0J1c3lTdGF0ZSkge1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuX2NvbXBvbmVudFBvcnRhbCAhPT0gbnVsbCkge1xyXG5cclxuICAgICAgICAgICAgKHRoaXMuX21vZGFsQnVzeVN0YXRlSG9zdCBhcyBEb21Qb3J0YWxPdXRsZXQpLmRldGFjaCgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5fZW5hYmxlVXNlckludGVyYWN0aW9uKCk7XHJcblxyXG4gICAgICAgIHRoaXMuX2lzU2hvd2luZ0J1c3lTdGF0ZSA9IGZhbHNlO1xyXG4gICAgfVxyXG4gICAgXHJcbiAgICBcclxuICAgIC8qKlxyXG4gICAgICogVE9ETyAtIGFkYXB0IGZyb20gVFMgdmVyc2lvblxyXG4gICAgICovXHJcbiAgICBhZGRUb29sVGlwKCkge1xyXG5cclxuICAgICAgICAvLyBUT0RPIC0gYWRhcHQgZnJvbSBUUyB2ZXJzaW9uXHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2hvdyBhIG5vbiBtb2RhbCBzbmFja2JhciBub3RpZmljYXRpb24gdG8gdGhlIHVzZXIgKE9ubHkgb25lIHNuYWNrLWJhciBjYW4gZXZlciBiZSBvcGVuZWQgYXQgdGhlIHNhbWUgdGltZSkuXHJcbiAgICAgKlxyXG4gICAgICogU25hY2tiYXJzIGluZm9ybSB1c2VycyBvZiBhIHByb2Nlc3MgdGhhdCBhbiBhcHAgaGFzIHBlcmZvcm1lZCBvciB3aWxsIHBlcmZvcm0uIFRoZXkgYXBwZWFyIHRlbXBvcmFyaWx5LCB0b3dhcmRzIHRoZSBib3R0b20gb3IgdG9wIG9mIHRoZSBzY3JlZW4uXHJcbiAgICAgKiBUaGV5IHNob3VsZG7igJl0IGludGVycnVwdCB0aGUgdXNlciBleHBlcmllbmNlLCBhbmQgdGhleSBkb27igJl0IHJlcXVpcmUgdXNlciBpbnB1dCB0byBkaXNhcHBlYXIuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIGNvbmZpZyBBIE1hdFNuYWNrQmFyQ29uZmlnIGluc3RhbmNlIHdpdGggdGhlIGN1c3RvbWl6YXRpb25zIHdlIHdhbnQgZm9yIHRoaXMgc25hY2tiYXJcclxuICAgICAqIEBwYXJhbSBtZXNzYWdlIFRoZSBtZXNzYWdlIHRvIHNob3cgb24gdGhlIHNuYWNrYmFyXHJcbiAgICAgKiBAcGFyYW0gYWN0aW9uIElmIG5vdCBlbXB0eSwgdGhlIHRleHQgdG8gcGxhY2Ugb24gdGhlIHNuYWNrYmFyIGNvbmZpcm1hdGlvbiBidXR0b25cclxuICAgICAqIEBwYXJhbSBhY3Rpb25DYWxsYmFjayBBIG1ldGhvZCB0byBleGVjdXRlIG9uY2UgdGhlIHVzZXIgY2xpY2tzIGludG8gdGhlIGFjdGlvbiBidXR0b24uXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB2b2lkXHJcbiAgICAgKi9cclxuICAgIGFkZFNuYWNrQmFyKGNvbmZpZzogTWF0U25hY2tCYXJDb25maWcsIG1lc3NhZ2U6IHN0cmluZywgYWN0aW9uID0gJycsIGFjdGlvbkNhbGxiYWNrOiAoKCkgPT4gdm9pZCkgfCBudWxsID0gbnVsbCkge1xyXG5cclxuICAgICAgICBpZiAoIXRoaXMuX2lzRW5hYmxlZCkge1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuX2lzU2hvd2luZ1NuYWNrQmFyKSB7XHJcblxyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RyeWluZyB0byBzaG93IGEgc25hY2tiYXIgd2hpbGUgYW5vdGhlciBvbmUgaXMgc3RpbGwgdmlzaWJsZScpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5faXNTaG93aW5nU25hY2tCYXIgPSB0cnVlO1xyXG5cclxuICAgICAgICBjb25zdCBzbmFja0JhclJlZiA9IHRoaXMubWF0U25hY2tCYXIub3BlbihtZXNzYWdlLCBhY3Rpb24gPT09ICcnID8gdW5kZWZpbmVkIDogYWN0aW9uLCBjb25maWcpO1xyXG5cclxuICAgICAgICBpZiAoYWN0aW9uQ2FsbGJhY2sgIT09IG51bGwpIHtcclxuXHJcbiAgICAgICAgICAgIHNuYWNrQmFyUmVmLm9uQWN0aW9uKCkuc3Vic2NyaWJlKCgpID0+IHtcclxuXHJcbiAgICAgICAgICAgICAgICBhY3Rpb25DYWxsYmFjaygpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGVsbHMgaWYgdGhlIGFwcGxpY2F0aW9uIGlzIGN1cnJlbnRseSBzaG93aW5nIGEgc25hY2tiYXIgb3Igbm90XHJcbiAgICAgKi9cclxuICAgIGdldCBpc1Nob3dpbmdTbmFja0JhcigpIHtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lzU2hvd2luZ1NuYWNrQmFyO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvKipcclxuICAgICAqIEZvcmNlIHRoZSByZW1vdmFsIG9mIHRoZSBzbmFjayBiYXIgZGlhbG9nIGlmIGl0IGV4aXN0cy5cclxuICAgICAqXHJcbiAgICAgKiBJZiBubyBzbmFja2JhciBpcyBjdXJyZW50bHkgdmlzaWJsZSwgdGhpcyBtZXRob2Qgd2lsbCBkbyBub3RoaW5nXHJcbiAgICAgKi9cclxuICAgIHJlbW92ZVNuYWNrQmFyKCkge1xyXG5cclxuICAgICAgICBpZiAoIXRoaXMuX2lzRW5hYmxlZCB8fCAhdGhpcy5faXNTaG93aW5nU25hY2tCYXIpIHtcclxuXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMubWF0U25hY2tCYXIuZGlzbWlzcygpO1xyXG5cclxuICAgICAgICB0aGlzLl9pc1Nob3dpbmdTbmFja0JhciA9IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvKipcclxuICAgICAqIFNob3cgYSBkaWFsb2cgd2l0aCBvbmUgb3IgbW9yZSBvcHRpb25zIHRoYXQgY2FuIGJlIHVzZWQgdG8gY2xvc2UgaXQuIFdlIGNhbiB1c2UgYW55IG9mIHRoZSBwcmVkZWZpbmVkIGRpYWxvZyB0eXBlcyB0aGF0IGFyZSBidW5kbGVkIHdpdGhcclxuICAgICAqIHRoaXMgbGlicmFyeSBvciBleHRlbmQgRGlhbG9nQmFzZUNvbXBvbmVudCB0byBjcmVhdGUgb3VyIG93biBjdXN0b20gb25lcy5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gZGlhbG9nQ29tcG9uZW50Q2xhc3MgQSBjbGFzcyBmb3IgYSBjb21wb25lbnQgdGhhdCBleHRlbmRzIERpYWxvZ0Jhc2VDb21wb25lbnQsIHdoaWNoIHdpbGwgYmUgdGhlIGRpYWxvZyB0aGF0IGlzIHNob3duIHRvIHRoZSB1c2VyLlxyXG4gICAgICogQHBhcmFtIHByb3BlcnRpZXMgQW4gb2JqZWN0IGNvbnRhaW5pbmcgdGhlIGRpZmZlcmVudCB2aXN1YWwgYW5kIHRleHR1YWwgb3B0aW9ucyB0aGF0IHRoaXMgZGlhbG9nIGFsbG93czpcclxuICAgICAqICAgICAgICAgICAgLSBpZDogVGhlIGh0bWwgdW5pcXVlIGlkZW50aWZpZXIgdGhhdCB0aGUgZGlhbG9nIHdpbGwgaGF2ZSBvbmNlIGNyZWF0ZWQuIElmIG5vdCBzcGVjaWZpZWQsIG5vIGlkIHdpbGwgYmUgZXhwbGljaXRseSBzZXRcclxuICAgICAqICAgICAgICAgICAgLSB3aWR0aDogNTAlIGJ5IGRlZmF1bHQuIFNwZWNpZnkgdGhlIGNzcyB2YWx1ZSBmb3IgdGhlIGRlZmF1bHQgZGlhbG9nIHdpZHRoLiBBcyB0aGUgZGlhbG9nIGlzIHJlc3BvbnNpdmUsIHRoZSB2YWx1ZSB3aWxsIGJlIGF1dG9tYXRpY2FsbHlcclxuICAgICAqICAgICAgICAgICAgICByZWR1Y2VkIGlmIHRoZSBhdmFpbGFibGUgc2NyZWVuIGlzIG5vdCBlbm91Z2gsIGFuZCB3aWxsIHJlYWNoIHRoZSBkZXNpcmVkIHZhbHVlIG90aGVyd2lzZS4gV2UgY2FuIHNldCBhbnkgY3NzIHVuaXQgbGlrZSBwaXhlbHMsIFxyXG4gICAgICogICAgICAgICAgICAgICUsIHZoLCB2dywgb3IgYW55IG90aGVyLiBGb3IgZXhhbXBsZTogJzQwMHB4JywgJzUwJScsIGV0Yy5cclxuICAgICAqICAgICAgICAgICAgLSBtYXhXaWR0aDogRGVmaW5lcyB0aGUgbWF4aW11bSB3aWR0aCB0aGF0IHRoZSBkaWFsb2cgd2lsbCBoYXZlIHJlZ2FyZGluZyB0aGUgdmlld3BvcnQuIFdlIGNhbiBzcGVjaWZ5IGl0IGluICUgb3IgdncsIGp1c3QgbGlrZSBpcyBkb25lIGluXHJcbiAgICAgKiAgICAgICAgICAgICAgY3NzLiBCeSBkZWZhdWx0IGl0IGlzIGRlZmluZWQgYXMgOTZ2dywgd2hpY2ggd2lsbCBmaXQgOTYlIG9mIHRoZSB2aWV3cG9ydCBvbiBzbWFsbCBkZXZpY2VzXHJcbiAgICAgKiAgICAgICAgICAgIC0gaGVpZ2h0OiBUT0RPIGRvY3NcclxuICAgICAqICAgICAgICAgICAgLSBtYXhIZWlnaHQ6IFRPRE8gZG9jc1xyXG4gICAgICogICAgICAgICAgICAtIG1vZGFsOiBUcnVlIChkZWZhdWx0KSBpZiBzZWxlY3RpbmcgYW4gb3B0aW9uIGlzIG1hbmRhdG9yeSB0byBjbG9zZSB0aGUgZGlhbG9nLCBmYWxzZSBpZiB0aGUgZGlhbG9nIGNhbiBiZSBjbG9zZWRcclxuICAgICAqICAgICAgICAgICAgICBieSB0aGUgdXNlciBjbGlja2luZyBvdXRzaWRlIGl0IFxyXG4gICAgICogICAgICAgICAgICAtIHRleHRzOiBBIGxpc3Qgd2l0aCBzdHJpbmdzIGNvbnRhaW5pbmcgdGhlIGRpYWxvZyB0ZXh0cywgc29ydGVkIGJ5IGltcG9ydGFuY2UuIFdoZW4gZGlhbG9nIGhhcyBhIHRpdGxlLCB0aGlzIHNob3VsZFxyXG4gICAgICogICAgICAgICAgICAgIGJlIHBsYWNlZCBmaXJzdCwgc3VidGl0bGUgc2Vjb25kIGFuZCBzbyAoRWFjaCBkaWFsb2cgbWF5IGFjY2VwdCBkaWZmZXJlbnQgbnVtYmVyIG9mIHRleHRzKS5cclxuICAgICAqICAgICAgICAgICAgLSBvcHRpb25zOiBBIGxpc3Qgb2Ygc3RyaW5ncyB0aGF0IHdpbGwgYmUgdXNlZCBhcyBidXR0b24gY2FwdGlvbnMgZm9yIGVhY2ggb25lIG9mIHRoZSBhY2NlcHRlZCBkaWFsb2cgb3B0aW9uc1xyXG4gICAgICogICAgICAgICAgICAtIHZpZXdDb250YWluZXJSZWY6IFRoaXMgaXMgaW1wb3J0YW50IGlmIHdlIHdhbnQgdG8gcHJvcGFnYXRlIHByb3ZpZGVycyBmcm9tIGEgcGFyZW50IGNvbXBvbmVudCB0byB0aGlzIGRpYWxvZy4gV2UgbXVzdCBzcGVjaWZ5IFxyXG5cdCAqICAgICAgICAgICAgICB0aGlzIHJlZmVyZW5jZSB0byBtYWtlIHN1cmUgdGhlIHNhbWUgc2VydmljZXMgaW5qZWN0ZWQgb24gdGhlIHBhcmVudCBhcmUgYXZhaWxhYmxlIHRvbyBhdCB0aGUgY2hpbGQgZGlhbG9nIFxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0gY2FsbGJhY2sgQSBmdW5jdGlvbiB0aGF0IHdpbGwgYmUgY2FsbGVkIGFmdGVyIHRoZSBkaWFsb2cgaXMgY2xvc2VkIGFuZCB3aWxsIHJlY2VpdmUgYSBzZWxlY3Rpb24gb2JqZWN0IHdpdGggdGhlIG51bWVyaWMgaW5kZXggYW5kIHZhbHVlIGZvclxyXG4gICAgICogICAgICAgIHRoZSBvcHRpb24gdGhhdCdzIGJlZW4gc2VsZWN0ZWQgYnkgdGhlIHVzZXIuIGlmIG5vIG9wdGlvbiB3YXMgc2VsZWN0ZWQsIGluZGV4IHdpbGwgYmUgLTEgYW5kIHZhbHVlIG51bGxcclxuICAgICAqL1xyXG4gICAgYWRkRGlhbG9nKGRpYWxvZ0NvbXBvbmVudENsYXNzOiBUeXBlPERpYWxvZ0Jhc2VDb21wb25lbnQ+LFxyXG4gICAgICAgICAgICAgIHByb3BlcnRpZXM6IHtpZD86IHN0cmluZyxcclxuXHRcdFx0XHRcdFx0ICAgd2lkdGg/OiBzdHJpbmcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heFdpZHRoPzogc3RyaW5nLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ/OiBzdHJpbmcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heEhlaWdodD86IHN0cmluZyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kYWw/OiBib29sZWFuLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0cz86IHN0cmluZ1tdLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zPzogc3RyaW5nW10sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpZXdDb250YWluZXJSZWY/OiBWaWV3Q29udGFpbmVyUmVmfSwgXHJcbiAgICAgICAgICAgICAgY2FsbGJhY2s6IG51bGwgfCAoKHNlbGVjdGlvbjoge2luZGV4Om51bWJlciwgdmFsdWU/OiBhbnl9KSA9PiB2b2lkKSA9IG51bGwpIHtcclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLl9pc0VuYWJsZWQpIHtcclxuXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICAgICAgLy8gU2V0IHRoZSBkZWZhdWx0IHZhbHVlcyBmb3Igbm9uIHNwZWNpZmllZCBwcm9wZXJ0aWVzXHJcbiAgICAgICAgcHJvcGVydGllcy5tb2RhbCA9IHByb3BlcnRpZXMubW9kYWwgPz8gdHJ1ZTtcclxuICAgICAgICBwcm9wZXJ0aWVzLnRleHRzID0gcHJvcGVydGllcy50ZXh0cyA/PyBbXTtcclxuICAgICAgICBwcm9wZXJ0aWVzLm9wdGlvbnMgPSBwcm9wZXJ0aWVzLm9wdGlvbnMgPz8gW107XHJcblxyXG4gICAgICAgIC8vIEdlbmVyYXRlIGEgc3RyaW5nIHRvIHVuaXF1ZWx5IGlkZW50aWZ5IHRoaXMgZGlhbG9nIG9uIHRoZSBsaXN0IG9mIGFjdGl2ZSBkaWFsb2dzXHJcbiAgICAgICAgLy8gQSBkaWFsb2cgaXMgY29uc2lkZXJlZCBhcyB1bmlxdWUgaWYgdGhlIGRpYWxvZyBpZCBhbmQgdGV4dHMgYXJlIGV4YWN0bHkgdGhlIHNhbWUuIFdlIGRvIG5vdCB0YWtlIG9wdGlvbnMgaW50byBjb25zaWRlcmF0aW9uXHJcbiAgICAgICAgLy8gYXMgdGhlcmUgbWF5IGJlIGRpYWxvZ3Mgd2l0aCBhIGJpZyBhbW91bnQgb2Ygb3B0aW9ucyBhdmFpbGFibGUuXHJcbiAgICAgICAgbGV0IGNsYXNzTmFtZSA9IChkaWFsb2dDb21wb25lbnRDbGFzcyBhcyBhbnkpLkRJQUxPR19DTEFTU19OQU1FO1xyXG4gICAgICAgIFxyXG4gICAgICAgIGlmKGNsYXNzTmFtZSA9PT0gJycpe1xyXG4gICAgICAgIFxyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFRoZSBzdGF0aWMgcHJvcGVydHkgRElBTE9HX0NMQVNTX05BTUUgaXMgbm90IGRlZmluZWQgb3IgaXMgZW1wdHkgZm9yIHRoaXMgZGlhbG9nIGNvbXBvbmVudCAoJHtkaWFsb2dDb21wb25lbnRDbGFzc30pYCk7ICAgICBcclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICAgICAgY29uc3QgZGlhbG9nSGFzaCA9IGNsYXNzTmFtZSArIHByb3BlcnRpZXMudGV4dHMuam9pbignJyk7XHJcblxyXG4gICAgICAgIC8vIGlkZW50aWNhbCBkaWFsb2dzIHdvbid0IGJlIGFsbG93ZWQgYXQgdGhlIHNhbWUgdGltZVxyXG4gICAgICAgIGlmICh0aGlzLl9hY3RpdmVEaWFsb2dzLmluY2x1ZGVzKGRpYWxvZ0hhc2gpKSB7XHJcblxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBkaWFsb2dSZWYgPSB0aGlzLm1hdERpYWxvZy5vcGVuKGRpYWxvZ0NvbXBvbmVudENsYXNzLCB7XHJcbiAgICAgICAgICAgIHdpZHRoOiBwcm9wZXJ0aWVzLndpZHRoID8/IFwiNTAlXCIsXHJcbiAgICAgICAgICAgIG1heFdpZHRoOiBwcm9wZXJ0aWVzLm1heFdpZHRoID8/IFwiOTZ2d1wiLFxyXG4gICAgICAgICAgICBkaXNhYmxlQ2xvc2U6IHByb3BlcnRpZXMubW9kYWwsXHJcbiAgICAgICAgICAgIGF1dG9Gb2N1czogZmFsc2UsXHJcbiAgICAgICAgICAgIGNsb3NlT25OYXZpZ2F0aW9uOiAhcHJvcGVydGllcy5tb2RhbCxcclxuICAgICAgICAgICAgdmlld0NvbnRhaW5lclJlZjogcHJvcGVydGllcy52aWV3Q29udGFpbmVyUmVmLFxyXG4gICAgICAgICAgICBkYXRhOiB7IHRleHRzOiBwcm9wZXJ0aWVzLnRleHRzLCBvcHRpb25zOiBwcm9wZXJ0aWVzLm9wdGlvbnMgfVxyXG4gICAgICAgICAgfSk7ICAgICAgXHJcblx0XHRcclxuXHRcdC8vIEFzc2lnbiB0aGUgZGlhbG9nIElEIG9ubHkgaWYgc3BlY2lmaWNhbGx5IHNldCBvbiBwcm9wZXJ0aWVzXHJcblx0XHRpZihwcm9wZXJ0aWVzLmlkICYmIHByb3BlcnRpZXMuaWQgIT09IHVuZGVmaW5lZCl7XHJcblx0XHRcdFxyXG5cdFx0XHRkaWFsb2dSZWYuaWQgPSBwcm9wZXJ0aWVzLmlkO1xyXG5cdFx0fVxyXG5cdFx0XHJcbiAgICAgICAgdGhpcy5fYWN0aXZlRGlhbG9ncy5wdXNoKGRpYWxvZ0hhc2gpO1xyXG4gICAgICAgIHRoaXMuX2FjdGl2ZURpYWxvZ0luc3RhbmNlcy5wdXNoKGRpYWxvZ1JlZik7XHJcblxyXG4gICAgICAgIGRpYWxvZ1JlZi5iZWZvcmVDbG9zZWQoKS5zdWJzY3JpYmUoKHNlbGVjdGlvbjp7aW5kZXg6bnVtYmVyLCB2YWx1ZT86YW55fSkgPT4ge1xyXG5cclxuICAgICAgICAgICAgdGhpcy5fYWN0aXZlRGlhbG9ncyA9IEFycmF5VXRpbHMucmVtb3ZlRWxlbWVudCh0aGlzLl9hY3RpdmVEaWFsb2dzLCBkaWFsb2dIYXNoKTtcclxuICAgICAgICAgICAgdGhpcy5fYWN0aXZlRGlhbG9nSW5zdGFuY2VzID0gQXJyYXlVdGlscy5yZW1vdmVFbGVtZW50KHRoaXMuX2FjdGl2ZURpYWxvZ0luc3RhbmNlcywgZGlhbG9nUmVmKTtcclxuXHJcbiAgICAgICAgICAgIGlmKCFwcm9wZXJ0aWVzLm1vZGFsICYmIHNlbGVjdGlvbiA9PT0gdW5kZWZpbmVkKXtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICBzZWxlY3Rpb24gPSB7IGluZGV4OiAtMSB9O1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgfWVsc2UgaWYgKCFOdW1lcmljVXRpbHMuaXNJbnRlZ2VyKHNlbGVjdGlvbi5pbmRleCkpIHtcclxuXHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGNsb3NlRGlhbG9nKCkgZXhwZWN0cyBpbmRleCB0byBiZSBhbiBpbnRlZ2VyYCk7ICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChjYWxsYmFjayAhPT0gbnVsbCkge1xyXG5cclxuICAgICAgICAgICAgICAgIGlmKHNlbGVjdGlvbi5pbmRleCA+PSAwICYmIHNlbGVjdGlvbi52YWx1ZSA9PT0gbnVsbCl7XHJcbiAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uLnZhbHVlID0gcHJvcGVydGllcy5vcHRpb25zIVtzZWxlY3Rpb24uaW5kZXhdO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIChjYWxsYmFjayBhcyAoKHNlbGVjdGlvbjp7aW5kZXg6bnVtYmVyLCB2YWx1ZT86YW55fSkgPT4gdm9pZCkpKHNlbGVjdGlvbik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIFxyXG4gICAgXHJcbiAgICAvKipcclxuICAgICAqIFNob3cgYSBkaWFsb2cgd2l0aCBhIGNhbGVuZGFyIHRvIGxldCB0aGUgdXNlciBwaWNrIGEgZGF0ZS5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gcHJvcGVydGllcyBBbiBvYmplY3QgY29udGFpbmluZyB0aGUgZGlmZmVyZW50IHZpc3VhbCBhbmQgdGV4dHVhbCBvcHRpb25zIHRoYXQgdGhpcyBkaWFsb2cgYWxsb3dzOlxyXG4gICAgICogICAgICAgICAgICAtIGlkOiBUaGUgaHRtbCB1bmlxdWUgaWRlbnRpZmllciB0aGF0IHRoZSBkaWFsb2cgd2lsbCBoYXZlIG9uY2UgY3JlYXRlZC4gSWYgbm90IHNwZWNpZmllZCwgbm8gaWQgd2lsbCBiZSBleHBsaWNpdGx5IHNldFxyXG4gICAgICogICAgICAgICAgICAtIHdpZHRoOiBTcGVjaWZ5IHRoZSBjc3MgdmFsdWUgZm9yIHRoZSBkZWZhdWx0IGRpYWxvZyB3aWR0aC4gQXMgdGhlIGRpYWxvZyBpcyByZXNwb25zaXZlLCB0aGUgdmFsdWUgd2lsbCBiZSBhdXRvbWF0aWNhbGx5XHJcbiAgICAgKiAgICAgICAgICAgICAgcmVkdWNlZCBpZiB0aGUgYXZhaWxhYmxlIHNjcmVlbiBpcyBub3QgZW5vdWdoLCBhbmQgd2lsbCByZWFjaCB0aGUgZGVzaXJlZCB2YWx1ZSBvdGhlcndpc2UuIFdlIGNhbiBzZXQgYW55IGNzcyB1bml0IGxpa2UgcGl4ZWxzLCBcclxuICAgICAqICAgICAgICAgICAgICAlLCB2aCwgdncsIG9yIGFueSBvdGhlci4gRm9yIGV4YW1wbGU6ICc0MDBweCcsICc1MCUnLCBldGMuXHJcbiAgICAgKiAgICAgICAgICAgIC0gbWF4V2lkdGg6IERlZmluZXMgdGhlIG1heGltdW0gd2lkdGggdGhhdCB0aGUgZGlhbG9nIHdpbGwgaGF2ZSByZWdhcmRpbmcgdGhlIHZpZXdwb3J0LiBXZSBjYW4gc3BlY2lmeSBpdCBpbiAlIG9yIHZ3LCBqdXN0IGxpa2UgaXMgZG9uZSBpblxyXG4gICAgICogICAgICAgICAgICAgIGNzcy4gQnkgZGVmYXVsdCBpdCBpcyBkZWZpbmVkIGFzIDk2dncsIHdoaWNoIHdpbGwgZml0IDk2JSBvZiB0aGUgdmlld3BvcnQgb24gc21hbGwgZGV2aWNlc1xyXG4gICAgICogICAgICAgICAgICAtIGhlaWdodDogVE9ETyBkb2NzXHJcbiAgICAgKiAgICAgICAgICAgIC0gbWF4SGVpZ2h0OiBUT0RPIGRvY3NcclxuICAgICAqICAgICAgICAgICAgLSBtb2RhbDogVHJ1ZSAoZGVmYXVsdCkgaWYgc2VsZWN0aW5nIGFuIG9wdGlvbiBpcyBtYW5kYXRvcnkgdG8gY2xvc2UgdGhlIGRpYWxvZywgZmFsc2UgaWYgdGhlIGRpYWxvZyBjYW4gYmUgY2xvc2VkXHJcbiAgICAgKiAgICAgICAgICAgICAgYnkgdGhlIHVzZXIgY2xpY2tpbmcgb3V0c2lkZSBpdCBcclxuICAgICAqICAgICAgICAgICAgLSB0aXRsZTogQW4gb3B0aW9uYWwgZGlhbG9nIHRpdGxlXHJcbiAgICAgKiAgICAgICAgICAgIC0gdmlld0NvbnRhaW5lclJlZjogVGhpcyBpcyBpbXBvcnRhbnQgdG8gcHJvcGFnYXRlIHByb3ZpZGVycyBmcm9tIGEgcGFyZW50IGNvbXBvbmVudCB0byB0aGlzIGRpYWxvZy4gV2UgbXVzdCBzcGVjaWZ5IFxyXG5cdCAqICAgICAgICAgICAgICB0aGlzIHJlZmVyZW5jZSB0byBtYWtlIHN1cmUgdGhlIHNhbWUgc2VydmljZXMgaW5qZWN0ZWQgb24gdGhlIHBhcmVudCBhcmUgYXZhaWxhYmxlIHRvbyBhdCB0aGUgY2hpbGQgZGlhbG9nIFxyXG4gICAgICogQHBhcmFtIGNhbGxiYWNrIEEgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIGFmdGVyIHRoZSBkaWFsb2cgaXMgY2xvc2VkLiBJdCB3aWxsIHJlY2VpdmUgYSBEYXRlKCkgb2JqZWN0IHNlbGVjdGVkIGJ5IHRoZSB1c2VyIG9yIG51bGwgaWYgbm8gc2VsZWN0aW9uIGhhcHBlbmVkXHJcbiAgICAgKi9cclxuICAgIGFkZERhdGVTZWxlY3Rpb25EaWFsb2cocHJvcGVydGllczoge2lkPzogc3RyaW5nLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg/OiBzdHJpbmcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhXaWR0aD86IHN0cmluZyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodD86IHN0cmluZyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heEhlaWdodD86IHN0cmluZyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGFsPzogYm9vbGVhbixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlPzogc3RyaW5nLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBcdFx0XHRcdHZpZXdDb250YWluZXJSZWY6IFZpZXdDb250YWluZXJSZWZ9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjazogKChzZWxlY3RlZERhdGU6IG51bGwgfCBEYXRlKSA9PiB2b2lkKSkge1xyXG5cclxuICAgICAgICBpZiAoIXRoaXMuX2lzRW5hYmxlZCkge1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgICAgICB0aGlzLmFkZERpYWxvZyhEaWFsb2dEYXRlU2VsZWN0aW9uQ29tcG9uZW50LFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBpZDogcHJvcGVydGllcy5pZCA/PyB1bmRlZmluZWQsXHJcbiAgICAgICAgICAgICAgICB3aWR0aDogcHJvcGVydGllcy53aWR0aCA/PyBcIjUwJVwiLFxyXG4gICAgICAgICAgICAgICAgbWF4V2lkdGg6IHByb3BlcnRpZXMubWF4V2lkdGggPz8gXCI5NnZ3XCIsXHJcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IHByb3BlcnRpZXMuaGVpZ2h0ID8/IFwiNTAlXCIsXHJcbiAgICAgICAgICAgICAgICBtYXhIZWlnaHQ6IHByb3BlcnRpZXMubWF4SGVpZ2h0ID8/IFwiOTJ2d1wiLFxyXG4gICAgICAgICAgICAgICAgbW9kYWw6IHByb3BlcnRpZXMubW9kYWwgPz8gZmFsc2UsXHJcbiAgICAgICAgICAgICAgICB0ZXh0czogW3Byb3BlcnRpZXMudGl0bGUgPz8gJyddLFxyXG4gICAgICAgICAgICAgICAgdmlld0NvbnRhaW5lclJlZjogcHJvcGVydGllcy52aWV3Q29udGFpbmVyUmVmXHJcbiAgICAgICAgICAgIH0sKHNlbGVjdGlvbikgPT4ge1xyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhzZWxlY3Rpb24uaW5kZXggPT09IC0xID8gbnVsbCA6IChzZWxlY3Rpb24udmFsdWUgYXMgRGF0ZSkpOyAgXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgXHJcbiAgICBcclxuICAgIC8qKlxyXG4gICAgICogRm9yY2UgdGhlIHJlbW92YWwgb2YgYWxsIHRoZSBkaWFsb2dzIHRoYXQgYXJlIGN1cnJlbnRseSB2aXNpYmxlLlxyXG4gICAgICpcclxuICAgICAqIElmIG5vIGRpYWxvZ3MgYXJlIGN1cnJlbnRseSB2aXNpYmxlLCB0aGlzIG1ldGhvZCB3aWxsIGRvIG5vdGhpbmdcclxuICAgICAqL1xyXG4gICAgcmVtb3ZlQWxsRGlhbG9ncygpIHtcclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLl9pc0VuYWJsZWQpIHtcclxuXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGZvciAoY29uc3QgZGlhbG9nUmVmIG9mIHRoaXMuX2FjdGl2ZURpYWxvZ0luc3RhbmNlcykge1xyXG5cclxuICAgICAgICAgICAgZGlhbG9nUmVmLmNsb3NlKHtpbmRleDotMX0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgICAgICB0aGlzLl9hY3RpdmVEaWFsb2dzID0gW107XHJcbiAgICAgICAgdGhpcy5fYWN0aXZlRGlhbG9nSW5zdGFuY2VzID0gW107XHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVE9ETyAtIHRyYW5zbGF0ZSBmcm9tIFRTIHZlcnNpb25cclxuICAgICAqL1xyXG4vLyAgICBhZGRTaWRlTmF2KCl7XHJcbi8vXHJcbi8vICAgIH1cclxuXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUT0RPIC0gdHJhbnNsYXRlIGZyb20gVFMgdmVyc2lvblxyXG4gICAgICovXHJcbi8vICAgIGdldCBpc1Nob3dpbmdTaWRlTmF2KCl7XHJcbi8vXHJcbi8vICAgIH1cclxuXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUT0RPIC0gdHJhbnNsYXRlIGZyb20gVFMgdmVyc2lvblxyXG4gICAgICovXHJcbi8vICAgIHJlbW92ZVNpZGVOYXYoKXtcclxuLy9cclxuLy8gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQmxvY2sgYWxsIHRoZSB1c2VyIGludGVyYWN0aW9ucyB3aXRoIHRoZSBhcHBsaWNhdGlvbiAoa2V5Ym9hcmQsIHRvdWNoLCBtb3VzZSwgLi4uKVxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIF9kaXNhYmxlVXNlckludGVyYWN0aW9uKCkge1xyXG5cclxuICAgICAgICBpZiAodGhpcy5fZG9jdW1lbnRLZXlkb3duVW5saXN0ZW4gPT09IG51bGwpIHtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuX2RvY3VtZW50S2V5ZG93blVubGlzdGVuID0gdGhpcy5fcmVuZGVyZXIubGlzdGVuKCdkb2N1bWVudCcsICdrZXlkb3duJywgKGV2ZW50KSA9PiBldmVudC5wcmV2ZW50RGVmYXVsdCgpKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLl9kb2N1bWVudE1vdXNlZG93blVubGlzdGVuID09PSBudWxsKSB7XHJcblxyXG4gICAgICAgICAgICB0aGlzLl9kb2N1bWVudE1vdXNlZG93blVubGlzdGVuID0gdGhpcy5fcmVuZGVyZXIubGlzdGVuKCdkb2N1bWVudCcsICdtb3VzZWRvd24nLCAoZXZlbnQpID0+IGV2ZW50LnByZXZlbnREZWZhdWx0KCkpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuX2RvY3VtZW50UG9pbnRlcmRvd25Vbmxpc3RlbiA9PT0gbnVsbCkge1xyXG5cclxuICAgICAgICAgICAgdGhpcy5fZG9jdW1lbnRQb2ludGVyZG93blVubGlzdGVuID0gdGhpcy5fcmVuZGVyZXIubGlzdGVuKCdkb2N1bWVudCcsICdwb2ludGVyZG93bicsIChldmVudCkgPT4gZXZlbnQucHJldmVudERlZmF1bHQoKSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvKipcclxuICAgICAqIFJlc3RvcmUgdGhlIHVzZXIgaW50ZXJhY3Rpb25zIHRoYXQgd2VyZSBwcmV2aW91c2x5IGRpc2FibGVkIHdpdGggX2Rpc2FibGVVc2VySW50ZXJhY3Rpb24gbWV0aG9kXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgX2VuYWJsZVVzZXJJbnRlcmFjdGlvbigpIHtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuX2RvY3VtZW50S2V5ZG93blVubGlzdGVuICE9PSBudWxsKSB7XHJcblxyXG4gICAgICAgICAgICB0aGlzLl9kb2N1bWVudEtleWRvd25Vbmxpc3RlbigpO1xyXG4gICAgICAgICAgICB0aGlzLl9kb2N1bWVudEtleWRvd25Vbmxpc3RlbiA9IG51bGw7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5fZG9jdW1lbnRNb3VzZWRvd25Vbmxpc3RlbiAhPT0gbnVsbCkge1xyXG5cclxuICAgICAgICAgICAgdGhpcy5fZG9jdW1lbnRNb3VzZWRvd25Vbmxpc3RlbigpO1xyXG4gICAgICAgICAgICB0aGlzLl9kb2N1bWVudE1vdXNlZG93blVubGlzdGVuID0gbnVsbDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLl9kb2N1bWVudFBvaW50ZXJkb3duVW5saXN0ZW4gIT09IG51bGwpIHtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuX2RvY3VtZW50UG9pbnRlcmRvd25Vbmxpc3RlbigpO1xyXG4gICAgICAgICAgICB0aGlzLl9kb2N1bWVudE1vdXNlZG93blVubGlzdGVuID0gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuIl19
@@ -389,4 +389,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.8", ngImpor
389
389
  providedIn: 'root',
390
390
  }]
391
391
  }], ctorParameters: () => [{ type: i1.DialogService }, { type: i2.BrowserService }] });
392
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHVyYm8tYXBpLWNhbGxlci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdHVyYm9ndWktYW5ndWxhci9zcmMvbWFpbi9jb250cm9sbGVyL3R1cmJvLWFwaS1jYWxsZXIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7OztHQU9HO0FBRUgsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUzQyxPQUFPLEVBQUUsZUFBZSxFQUFFLFdBQVcsRUFBRSxzQkFBc0IsRUFBRSxXQUFXLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNwRyxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUMvRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx3REFBd0QsQ0FBQzs7OztBQUk5Rjs7R0FFRztBQUlILE1BQU0sT0FBTyxxQkFBc0IsU0FBUSxxQkFBcUI7SUErRDVELFlBQW9CLGFBQTRCLEVBQzVCLGNBQThCO1FBRTlDLEtBQUssQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO1FBSGIsa0JBQWEsR0FBYixhQUFhLENBQWU7UUFDNUIsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBN0RsRDs7V0FFRztRQUNILG9CQUFlLEdBQUcsYUFBYSxDQUFDO1FBR2hDOztXQUVHO1FBQ0gscUJBQWdCLEdBQUcsY0FBYyxDQUFDO1FBR2xDOztXQUVHO1FBQ0gseUJBQW9CLEdBQUcsd0JBQXdCLENBQUM7UUFHaEQ7O1dBRUc7UUFDSCxhQUFRLEdBQUcsRUFBRSxDQUFDO1FBR2Q7O1dBRUc7UUFDSCxhQUFRLEdBQUcsRUFBRSxDQUFDO1FBR2Q7O1dBRUc7UUFDSyxzQkFBaUIsR0FBRyxFQUFFLENBQUM7UUFHL0I7O1dBRUc7UUFDSyxjQUFTLEdBQUcsS0FBSyxDQUFDO1FBRzFCOztXQUVHO1FBQ0ssV0FBTSxHQUFHLEVBQUUsQ0FBQztRQUdwQjs7V0FFRztRQUNL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QUcsQ0FBQyxDQUFDO0lBQ3RELENBQUM7OEdBeGdCUSxxQkFBcUI7a0hBQXJCLHFCQUFxQixjQUZwQixNQUFNOzsyRkFFUCxxQkFBcUI7a0JBSGpDLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIFR1cmJvR1VJIGlzIEEgbGlicmFyeSB0aGF0IGhlbHBzIHdpdGggdGhlIG1vc3QgY29tbW9uIGFuZCBnZW5lcmljIFVJIGVsZW1lbnRzIGFuZCBmdW5jdGlvbmFsaXRpZXNcclxuICpcclxuICogV2Vic2l0ZSA6IC0+IGh0dHA6Ly93d3cudHVyYm9ndWkub3JnXHJcbiAqIExpY2Vuc2UgOiAtPiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wLiBZb3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXHJcbiAqIExpY2Vuc2UgVXJsIDogLT4gaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXHJcbiAqIENvcHlSaWdodCA6IC0+IENvcHlyaWdodCAyMDE4IEVkZXJ0b25lIEFkdmFuZGVkIFNvbHV0aW9ucy4gaHR0cHM6Ly93d3cuZWRlcnRvbmUuY29tXHJcbiAqL1xyXG5cclxuaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRGlhbG9nU2VydmljZSB9IGZyb20gJy4vZGlhbG9nLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ29udmVyc2lvblV0aWxzLCBIVFRQTWFuYWdlciwgSFRUUE1hbmFnZXJQb3N0UmVxdWVzdCwgU3RyaW5nVXRpbHMgfSBmcm9tICd0dXJib2NvbW1vbnMtdHMnO1xyXG5pbXBvcnQgeyBTaW5nbGV0b25lU3RyaWN0Q2xhc3MgfSBmcm9tICcuLi9tb2RlbC9jbGFzc2VzL1NpbmdsZXRvbmVTdHJpY3RDbGFzcyc7XG5pbXBvcnQgeyBEaWFsb2dFcnJvckNvbXBvbmVudCB9IGZyb20gJy4uL3ZpZXcvY29tcG9uZW50cy9kaWFsb2ctZXJyb3IvZGlhbG9nLWVycm9yLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBCcm93c2VyU2VydmljZSB9IGZyb20gJy4vYnJvd3Nlci5zZXJ2aWNlJztcblxyXG5cclxuLyoqXHJcbiAqIEFsbG93cyB1cyB0byBlYXNpbHkgcGVyZm9ybSByZXF1ZXN0cyB0byBhIHJlbW90ZSBBUEkgdGhhdCBpcyBkZXZlbG9wZWQgd2l0aCBUdXJibyBmcmFtZXdvcmsuXHJcbiAqL1xyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgVHVyYm9BcGlDYWxsZXJTZXJ2aWNlIGV4dGVuZHMgU2luZ2xldG9uZVN0cmljdENsYXNzIHtcclxuICAgIFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVVJJIFBhdGggdG8gdGhlIHdlYiBzZXJ2aWNlIHRoYXQgcGVyZm9ybXMgdGhlIHVzZXIgbG9naW5cclxuICAgICAqL1xyXG4gICAgbG9naW5TZXJ2aWNlVVJJID0gJ3VzZXJzL2xvZ2luJztcclxuICAgIFxyXG4gICAgXHJcbiAgICAvKipcclxuICAgICAqIFVSSSBQYXRoIHRvIHRoZSB3ZWIgc2VydmljZSB0aGF0IHBlcmZvcm1zIHRoZSB1c2VyIGxvZyBvdXRcclxuICAgICAqL1xyXG4gICAgbG9nT3V0U2VydmljZVVSSSA9ICd1c2Vycy9sb2dvdXQnO1xyXG4gICAgXHJcbiAgICBcclxuICAgIC8qKlxyXG4gICAgICogVVJJIFBhdGggdG8gdGhlIHdlYiBzZXJ2aWNlIHRoYXQgcGVyZm9ybXMgdGhlIHZlcmlmaWNhdGlvbiBmb3IgYSB1c2VyIGVtYWlsXHJcbiAgICAgKi9cclxuICAgIG1haWxWZXJpZnlTZXJ2aWNlVVJJID0gJ3VzZXJzL3VzZXItbWFpbC12ZXJpZnknO1xyXG5cclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSB1c2VybmFtZSB0aGF0IGlzIGN1cnJlbnRseSBkZWZpbmVkIGFuZCB3aWxsIGJlIHVzZWQgYnkgdGhlIGxvZ2luIG1ldGhvZHNcclxuICAgICAqL1xyXG4gICAgdXNlck5hbWUgPSAnJztcclxuXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgcGFzc3dvcmQgZm9yIHRoZSB1c2VyIHRoYXQgaXMgY3VycmVudGx5IGRlZmluZWQgYW5kIHdpbGwgYmUgdXNlZCBieSB0aGUgbG9naW4gbWV0aG9kc1xyXG4gICAgICovXHJcbiAgICBwYXNzd29yZCA9ICcnO1xyXG4gICAgXHJcbiAgICBcclxuICAgIC8qKlxyXG4gICAgICogQ29udGFpbnMgdGhlIGxhc3QgZW1haWwgYWNjb3VudCB0aGF0IGhhcyBiZWVuIHZlcmlmaWVkIChvciB0cmllZCB0byB2ZXJpZnkpIGJ5IHRoaXMgc2VydmljZSwgaWYgYW55XHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgX2xhc3RWZXJpZmllZE1haWwgPSAnJztcclxuXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDaGVjayBwdWJsaWMgZ2V0dGVyIGZvciBkb2NzXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgX2lzTG9nZ2VkID0gZmFsc2U7XHJcblxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHNlZSB0b2tlbigpIGdldHRlciBmb3IgbW9yZSBpbmZvXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgX3Rva2VuID0gJyc7XHJcbiAgICBcclxuICAgIFxyXG4gICAgLyoqXHJcbiAgICAgKiBMaXN0IG9mIG9wZXJhdGlvbnMgdGhhdCBhcmUgYWxsb3dlZCB0byB0aGUgY3VycmVudGx5IGxvZ2VkIHVzZXIuIEl0IGdldHMgZmlsbGVkIGp1c3QgYWZ0ZXIgbG9naW4gaXMgcGVyZm9ybWVkXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgX29wZXJhdGlvbnM6c3RyaW5nW10gPSBbXTtcclxuICAgIFxyXG4gICAgXHJcbiAgICAvKipcclxuICAgICAqIFByaXZhdGUgaHR0cCBzZXJ2aWNlIGluc3RhbmNlIHRoYXQgd2lsbCBiZSBleGNsdXNpdmUgdG8gdGhpcyB0dXJibyBhcGkgY2FsbGVyIHNlcnZpY2UuIEl0IGlzIGEgZHVwbGljYXRlLlxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIGh0dHBNYW5hZ2VyOiBIVFRQTWFuYWdlcjtcclxuICAgIFxyXG4gICAgXHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIGRpYWxvZ1NlcnZpY2U6IERpYWxvZ1NlcnZpY2UsIFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBicm93c2VyU2VydmljZTogQnJvd3NlclNlcnZpY2UpIHtcclxuICAgICAgICBcclxuICAgICAgICBzdXBlcihUdXJib0FwaUNhbGxlclNlcnZpY2UpO1xyXG4gICAgICAgIFxyXG4gICAgICAgIC8vIENyZWF0ZSBhIGZyZXNoIGluc3RhbmNlIG9mIHRoZSBodHRwIHNlcnZpY2Ugc28gd2UgY2FuIHVzZSBpdCBpbmRlcGVuZGVudGx5XHJcbiAgICAgICAgdGhpcy5odHRwTWFuYWdlciA9IG5ldyBIVFRQTWFuYWdlcigpO1xyXG4gICAgICAgIHRoaXMuX2NsZWFyVXNlckFuZFRva2VuKCk7XHJcbiAgICB9XHJcbiAgICBcclxuXHJcbiAgICAvKiogXHJcbiAgICAgKiBEZWZpbmUgdGhlIHJvb3QgdXJsIHRoYXQgd2lsbCBiZSB1c2VkIGZvciBhbGwgdGhlIEFQSSBjYWxsc1xyXG4gICAgICovXHJcbiAgICBzZXQgYmFzZVVybCh1cmw6c3RyaW5nKXtcclxuICAgICAgICBcclxuICAgICAgICB0aGlzLmh0dHBNYW5hZ2VyLmJhc2VVcmwgPSB1cmw7XHJcbiAgICB9XHJcbiAgICBcclxuICAgIFxyXG4gICAgLyoqIFxyXG4gICAgICogRGVmaW5lIHRoZSByb290IHVybCB0aGF0IHdpbGwgYmUgdXNlZCBmb3IgYWxsIHRoZSBBUEkgY2FsbHNcclxuICAgICAqL1xyXG4gICAgZ2V0IGJhc2VVcmwoKXtcclxuICAgICAgICBcclxuICAgICAgICByZXR1cm4gdGhpcy5odHRwTWFuYWdlci5iYXNlVXJsO1xyXG4gICAgfVxyXG4gICAgXHJcbiAgICBcclxuICAgIC8qKlxyXG4gICAgICogSWYgdGhlIGN1cnJlbnQgYnJvd3NlciBVUkwgY29udGFpbnMgYSBoYXNoIGZyYWdtZW50IChUaGUgcGFydCBhZnRlciB0aGUgIyBjaGFyYWN0ZXIpIHRoYXQgY29udGFpbnMgZW5jb2RlZCB1c2VyIG9yIHBhc3N3b3JkXHJcbiAgICAgKiB2YWx1ZXMsIHRoaXMgbWV0aG9kIHdpbGwgcGFyc2UgYW5kIGF1dG9tYXRpY2FsbHkgc2V0IHRoZW0gYXMgdGhlIGNyZWRlbnRpYWxzIHRvIHVzZS5cclxuICAgICAqIFxyXG4gICAgICogVGhlIFVSTCBoYXNoIGlzIG5vdCBhbHRlcmVkIGluIGFueSB3YXkgYnkgdGhpcyBtZXRob2QuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybnMgVHJ1ZSBpZiBhbnkgY3JlZGVudGlhbHMgd2VyZSBmb3VuZCBhbmQgbG9hZGVkLCBmYWxzZSBpZiBub3RoaW5nIGhhcHBlbmVkXHJcbiAgICAgKi9cclxuICAgIGxvYWRDcmVkZW50aWFsc0Zyb21VUkxIYXNoRnJhZ21lbnQoKSB7XHJcbiAgICBcclxuICAgICAgICAvLyBJZiB0aGUgaGFzaCBmcmFnbWVudCBpcyBlbXB0eSwgbm90aGluZyB0byBkb1xyXG4gICAgICAgIGlmKCF0aGlzLmJyb3dzZXJTZXJ2aWNlLmlzQ3VycmVudFVybFdpdGhIYXNoRnJhZ21lbnQoKSl7XHJcbiAgICAgICAgICAgXHJcbiAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgIFxyXG4gICAgICAgIGxldCB2YWx1ZXNGb3VuZCA9IGZhbHNlO1xyXG4gICAgICAgXHJcbiAgICAgICAgLy8gU3BsaXQgdGhlIGhhc2ggZnJhZ21lbnQgdG8gb2J0YWluIHRoZSBkaWZmZXJlbnQgdmFsdWVzIHRoYXQgY29udGFpbnNcclxuICAgICAgICBsZXQgaGFzaERhdGEgPSB0aGlzLmJyb3dzZXJTZXJ2aWNlLmdldEN1cnJlbnRVcmxIYXNoRnJhZ21lbnQoKS5zcGxpdCgnLycpO1xyXG4gICAgICAgXHJcbiAgICAgICAgLy8gVXNlciBuYW1lIGlzIHRoZSBmaXJzdCBlbGVtZW50IG9mIHRoZSBoYXNoIGZyYWdtZW50LiBJZiB3ZSBmb3VuZCBhIHZhbHVlLCBcclxuICAgICAgICAvLyB3ZSB3aWxsIGZpbGwgaXQgYXV0b21hdGljYWxseVxyXG4gICAgICAgIGlmKGhhc2hEYXRhLmxlbmd0aCA+IDApe1xyXG4gICAgICAgICAgIFxyXG4gICAgICAgICAgICB2YWx1ZXNGb3VuZCA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMudXNlck5hbWUgPSBDb252ZXJzaW9uVXRpbHMuYmFzZTY0VG9TdHJpbmcoaGFzaERhdGFbMF0pO1xyXG4gICAgICAgIH1cclxuICAgICAgIFxyXG4gICAgICAgIC8vIEF1dG8gZmlsbCB0aGUgcGFzc3dvcmQgaWYgaXQgaXMgcmVjZWl2ZWRcclxuICAgICAgICBpZihoYXNoRGF0YS5sZW5ndGggPiAzKXtcclxuICAgICAgICBcclxuICAgICAgICAgICAgdmFsdWVzRm91bmQgPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLnBhc3N3b3JkID0gQ29udmVyc2lvblV0aWxzLmJhc2U2NFRvU3RyaW5nKGhhc2hEYXRhWzNdKTtcclxuICAgICAgICB9XHJcbiAgICAgICBcclxuICAgICAgICByZXR1cm4gdmFsdWVzRm91bmQ7XHJcbiAgICB9XHJcbiAgICBcclxuICAgIFxyXG4gICAgLyoqXHJcbiAgICAgKiBJZiB0aGUgY3VycmVudCBicm93c2VyIFVSTCBjb250YWlucyBhIGhhc2ggZnJhZ21lbnQgKFRoZSBwYXJ0IGFmdGVyIHRoZSAjIGNoYXJhY3RlcikgdGhhdCBjb250YWlucyBlbmNvZGVkIHVzZXIsIG1haWwgYW5kXHJcbiAgICAgKiBoYXMgdmVyaWZpY2F0aW9uIGNvZGUgdmFsdWVzLCB0aGlzIG1ldGhvZCB3aWxsIHBlcmZvcm0gdGhlIHJlcXVlc3QgdG8gc2VydmVyIHRvIHZlcmlmeSB0aGF0IGVtYWlsIGFjY291bnQgZm9yIHRoZSB1c2VyLlxyXG4gICAgICogXHJcbiAgICAgKiBUaGUgVVJJIHBhdGggdG8gdGhlIG1haWwgdmVyaWZpY2F0aW9uIHNlcnZpY2UgbXVzdCBiZSBjb3JyZWN0bHkgZGVmaW5lZCBhdCB0aGlzLm1haWxWZXJpZnlTZXJ2aWNlVVJJIHByb3BlcnR5LlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm5zIEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIHNlcnZlciByZXNwb25zZSBpZiB0aGUgdmVyaWZpY2F0aW9uIGlzIHN1Y2Nlc3NmdWwsXHJcbiAgICAgKiAgICAgICAgICBvciByZWplY3RzIHdpdGggYW4gZXJyb3IgaWYgdGhlIHZlcmlmaWNhdGlvbiBmYWlscy4gUmVzcG9uc2Ugd2lsbCBoYXZlIDQgcG9zc2libGUgdmFsdWVzOlxyXG4gICAgICogICAgICAgICAgICAgICB1bmRlZmluZWQgLSBtZWFuaW5nIHRoYXQgdGhlIFVSTCBoYXNoIGZyYWdtZW50IGRpZG4ndCBjb250YWluIHZhbGlkIHZlcmlmaWNhdGlvbiB2YWx1ZXNcclxuICAgICAqICAgICAgICAgICAgICAtMSAtIG1lYW5pbmcgdmVyaWZpY2F0aW9uIGZhaWxlZFxyXG4gICAgICogICAgICAgICAgICAgICAwIC0gbWVhbmluZyB2ZXJpZmljYXRpb24gc3VjY2VlZGVkXHJcbiAgICAgKiAgICAgICAgICAgICAgIDEgLSBtZWFuaW5nIHRoZSBlbWFpbCB3YXMgYWxyZWFkeSBwcmV2aW91bHkgdmVyaWZpZWRcclxuICAgICAqL1xyXG4gICAgdmVyaWZ5VXNlck1haWxGcm9tVVJMSGFzaEZyYWdtZW50KCkge1xyXG5cclxuICAgICAgICAvLyBJZiB0aGUgaGFzaCBmcmFnbWVudCBpcyBlbXB0eSwgbm90aGluZyB0byBkb1xyXG4gICAgICAgIGlmKHRoaXMuYnJvd3NlclNlcnZpY2UuaXNDdXJyZW50VXJsV2l0aEhhc2hGcmFnbWVudCgpKXtcclxuICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBsZXQgaGFzaERhdGEgPSB0aGlzLmJyb3dzZXJTZXJ2aWNlLmdldEN1cnJlbnRVcmxIYXNoRnJhZ21lbnQoKS5zcGxpdCgnLycpO1xyXG4gICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBpZihoYXNoRGF0YS5sZW5ndGggPj0gMyl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgLy8gQ2FsbCBmb3IgdGhlIHVzZXIgbWFpbCB2ZXJpZmljYXRpb24gaWYgdXNlciwgbWFpbCBhbmQgaGFzaCBhcmUgcmVjZWl2ZWRcclxuICAgICAgICAgICAgICAgIGxldCB1c2VyID0gQ29udmVyc2lvblV0aWxzLmJhc2U2NFRvU3RyaW5nKGhhc2hEYXRhWzBdKTtcclxuICAgICAgICAgICAgICAgIGxldCBtYWlsID0gQ29udmVyc2lvblV0aWxzLmJhc2U2NFRvU3RyaW5nKGhhc2hEYXRhWzFdKTtcclxuICAgICAgICAgICAgICAgIGxldCBoYXNoID0gQ29udmVyc2lvblV0aWxzLmJhc2U2NFRvU3RyaW5nKGhhc2hEYXRhWzJdKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICBpZighU3RyaW5nVXRpbHMuaXNFbXB0eSh1c2VyKSAmJiAhU3RyaW5nVXRpbHMuaXNFbXB0eShtYWlsKSAmJiAhU3RyaW5nVXRpbHMuaXNFbXB0eShoYXNoKSl7XHJcbiAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fbGFzdFZlcmlmaWVkTWFpbCA9IG1haWw7XHJcbiAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2FsbCh0aGlzLm1haWxWZXJpZnlTZXJ2aWNlVVJJLCB7dXNlck5hbWU6IHVzZXIsIG1haWw6IG1haWwsIGhhc2g6IGhhc2h9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHVuZGVmaW5lZCk7XHJcbiAgICB9XHJcbiAgICBcclxuICAgIFxyXG4gICAgLyoqXHJcbiAgICAgKiBPYnRhaW4gdGhlIGxhdCB1c2VyIG1haWwgYWNjb3VudCB0aGF0IGhhcyBiZWVuIHZlcmlmaWVkIChvciBhdHRlbXB0ZWQgdG8gdmVyaWZ5KSBieSB0aGlzIHNlcnZpY2UuXHJcbiAgICAgKi9cclxuICAgIGdldExhc3RWZXJpZmllZE1haWwoKXtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2xhc3RWZXJpZmllZE1haWw7O1xuICAgIH1cclxuICAgIFxyXG4gICAgXHJcbiAgICAvKipcclxuICAgICAqIEF1dGhlbnRpY2F0ZXMgdGhlIHVzZXIgYnkgc2VuZGluZyBhbiBlbmNvZGVkIGNyZWRlbnRpYWxzIHJlcXVlc3QgdG8gdGhlIGxvZ2luIHdlYiBzZXJ2aWNlLlxyXG4gICAgICogUmV0dXJucyBhIHByb21pc2UgdGhhdCByZXNvbHZlcyB3aXRoIHRoZSBzZXJ2ZXIncyByZXNwb25zZSBvciByZWplY3RzIHdpdGggYW4gZXJyb3IgaWYgdGhlIGxvZ2luIGZhaWxzLlxyXG4gICAgICogUGF0aCB0byB0aGUgbG9naW4gc2VydmljZSBtdXN0IGJlIGNvcnJlY3RseSBkZWZpbmVkIGF0IHRoaXMubG9naW5XZWJTZXJ2aWNlXHJcbiAgICAgKlxyXG4gICAgICogSGVyZSdzIGFuIGV4YW1wbGUgb2YgYSBjYWxsOlxyXG4gICAgICogXHJcbiAgICAgKiAgbG9naW4oKS50aGVuKHJlc3BvbnNlID0+IHtcclxuICAgICAqICAgICBjb25zb2xlLmxvZygnTG9naW4gc3VjY2Vzc2Z1bDonLCByZXNwb25zZSk7XHJcbiAgICAgKiAgfSkuY2F0Y2goKCkgPT4ge1xyXG4gICAgICogICAgIGNvbnNvbGUuZXJyb3IoJ0xvZ2luIGZhaWxlZDonKTtcclxuICAgICAqICB9KTtcclxuICAgICAqIFxyXG4gICAgICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgc2VydmVyIHJlc3BvbnNlIGlmIHRoZSBsb2dpbiBpcyBzdWNjZXNzZnVsLFxyXG4gICAgICogICAgICAgICAgb3IgcmVqZWN0cyB3aXRoIGFuIGVycm9yIGlmIHRoZSBsb2dpbiBmYWlscy5cclxuICAgICAqL1xyXG4gICAgbG9naW4oKSB7XHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLmFkZE1vZGFsQnVzeVN0YXRlKCk7IFxyXG4gICAgICAgIFxyXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZToocjphbnkpID0+IGFueSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgXHJcbiAgICAgICAgICAgIGNvbnN0IHJlcXVlc3QgPSBuZXcgSFRUUE1hbmFnZXJQb3N0UmVxdWVzdCh0aGlzLmxvZ2luU2VydmljZVVSSSk7XHJcbiAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIHJlcXVlc3QuaWdub3JlR2xvYmFsUG9zdFBhcmFtcyA9IHRydWU7XHJcbiAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBjb25zdCBlbmNvZGVkQ3JlZGVudGlhbHMgPSBDb252ZXJzaW9uVXRpbHMuc3RyaW5nVG9CYXNlNjQoXHJcbiAgICAgICAgICAgICAgICBDb252ZXJzaW9uVXRpbHMuc3RyaW5nVG9CYXNlNjQodGhpcy51c2VyTmFtZSkgKyAnLCcgKyBDb252ZXJzaW9uVXRpbHMuc3RyaW5nVG9CYXNlNjQodGhpcy5wYXNzd29yZCkpO1xyXG4gICAgXHJcbiAgICAgICAgICAgIHJlcXVlc3QucGFyYW1ldGVycyA9IHsgZGF0YTogZW5jb2RlZENyZWRlbnRpYWxzIH07XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICByZXF1ZXN0LnN1Y2Nlc3NDYWxsYmFjayA9IChyZXNwb25zZSkgPT4ge1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZSAhPT0gJycpIHtcclxuICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICByZXNwb25zZSA9IEpTT04ucGFyc2UocmVzcG9uc2UpOyAgICAgICAgICAgIFxyXG4gICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2lzTG9nZ2VkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl90b2tlbiA9IHJlc3BvbnNlLnRva2VuO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX29wZXJhdGlvbnMgPSByZXNwb25zZS5vcGVyYXRpb25zO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaHR0cE1hbmFnZXIuc2V0R2xvYmFsUG9zdFBhcmFtKCd0b2tlbicsIHJlc3BvbnNlLnRva2VuKTtcclxuICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHJlc3BvbnNlKTtcclxuICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2xlYXJVc2VyQW5kVG9rZW4oKTtcclxuICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICByZWplY3QobmV3IEVycm9yKCkpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgcmVxdWVzdC5lcnJvckNhbGxiYWNrID0gKCkgPT4ge1xyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMuX2NsZWFyVXNlckFuZFRva2VuKCk7XHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoKSk7ICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICByZXF1ZXN0LmZpbmFsbHlDYWxsYmFjayA9ICgpID0+IHtcclxuICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5yZW1vdmVNb2RhbEJ1c3lTdGF0ZSgpO1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIFxyXG4gICAgICAgICAgICB0aGlzLmh0dHBNYW5hZ2VyLmV4ZWN1dGUocmVxdWVzdCk7XHJcbiAgICAgICAgfSk7IFxyXG4gICAgfVxyXG4gICAgXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDaGVja3MgaWYgdGhlIHVzZXIgYW5kIHBhc3N3b3JkIGNyZWRlbnRpYWxzIGFyZSBmaWxsZWQgYW5kIG5vdCBlbXB0eS5cclxuICAgICAqIElmIGFueSBvZiB0aGUgdHdvIHZhbHVlcyBpcyBlbXB0eSwgZmFsc2Ugd2lsbCBiZSByZXR1cm5lZFxyXG4gICAgICovXHJcbiAgICBnZXQgaXNVc2VyQW5kUHN3RGVmaW5lZCgpOiBib29sZWFuICB7XHJcblxyXG4gICAgICAgIHJldHVybiAhU3RyaW5nVXRpbHMuaXNFbXB0eSh0aGlzLnVzZXJOYW1lKSAmJiAhU3RyaW5nVXRpbHMuaXNFbXB0eSh0aGlzLnBhc3N3b3JkKTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUZWxscyBpZiBleGlzdHMgYSB1c2VyIHRoYXQgaXMgY3VycmVudGx5IGxvZ2dlZCBvciBub3RcclxuICAgICAqL1xyXG4gICAgZ2V0IGlzTG9nZ2VkKCk6IGJvb2xlYW4ge1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5faXNMb2dnZWQ7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2l2ZXMgdGhlIHZhbHVlIGZvciB0aGUgY3VycmVudGx5IGFjdGl2ZSB1c2VyIGF1dGhlbnRpY2F0aW9uIHRva2VuIG9yIGFuIGVtcHR5IHN0cmluZyBpZiBubyB1c2VyIGxvZ2dlZFxyXG4gICAgICovXHJcbiAgICBnZXQgdG9rZW4oKSB7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLl90b2tlbjtcclxuICAgIH1cclxuICAgIFxyXG4gICAgXHJcbiAgICAvKipcclxuICAgICAqIENoZWNrcyBpZiB0aGUgY3VycmVudGx5IGxvZ2dlZCB1c2VyIGlzIGFsbG93ZWQgdG8gcGVyZm9ybSB0aGUgc3BlY2lmaWVkIG9wZXJhdGlvbi5cclxuICAgICAqIFRoaXMgd2lsbCBjaGVjayB0aGUgdXNlciBwZXJtaXNpb25zIGFzIGRlZmluZWQgb24gc2VydmVyIHNpZGUgYW5kIHJldHVybiB0cnVlIGlmIHRoZSBvcGVyYXRpb24gaXMgYWxsb3dlZFxyXG4gICAgICogb3IgZmFsc2UgaWYgbm90LiBXZSBjYW4gdGhlbiBkZWNpZGUgd2hhdCB0byBkbyAoaGlkZSBhbiBhcHAgc2VjdGlvbiwgYmxvY2sgYSBidXR0b24sIGV0YylcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIG9wZXJhdGlvbiBUaGUgbmFtZSBvZiB0aGUgb3BlcmF0aW9uIHRvIGNoZWNrIFxyXG4gICAgICogXHJcbiAgICAgKiBAcmV0dXJucyBUcnVlIGlmIHRoZSBvcGVyYXRpb24gaXMgYWxsb3dlZCwgZmFsc2Ugb3RoZXJ3aXNlIFxyXG4gICAgICovXHJcbiAgICBpc1VzZXJBbGxvd2VkVG8ob3BlcmF0aW9uOnN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX29wZXJhdGlvbnMuaW5jbHVkZXMob3BlcmF0aW9uKTtcclxuICAgIH1cclxuICAgICAgICBcclxuICAgIFxyXG4gICAgLyoqXHJcbiAgICAgKiBQZXJmb3JtcyBhIHN0YW5kYXJkIHJlcXVlc3QgdG8gYW4gQVBJIHNlcnZpY2UgYW5kIHJldHVybnMgYSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgcmVzcG9uc2UgZGF0YS5cclxuICAgICAqIFxyXG4gICAgICogRm9sbG93aW5nIGlzIGFuIGV4YW1wbGUgb2YgYSBjYWxsOlxyXG4gICAgICogXHJcbiAgICAgKiAgICAgdGhpcy5hcGlTZXJ2aWNlLmNhbGwoJ3VzZXJzL3VzZXItY3JlYXRlJywgdGhpcy51c2VyRGF0YSwge2hhbmRsZUVycm9yczogZmFsc2V9KS50aGVuKHJlc3BvbnNlID0+IHtcclxuICAgICAqICAgICAgICAgIFxyXG4gICAgICogICAgICAgICAgY29uc29sZS5sb2coJ1N1Y2Nlc3M6JywgcmVzcG9uc2UpO1xyXG4gICAgICogICAgICAgICAgXHJcbiAgICAgKiAgICAgIH0pLmNhdGNoKGVycm9yID0+IHtcclxuICAgICAqICAgICAgICAgIFxyXG4gICAgICogICAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3I6JywgZXJyb3IubWVzc2FnZSk7XHJcbiAgICAgKiAgICAgIH0pO1xyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBhcGlQYXRoIC0gQSByZWxhdGl2ZSBVUkwgKGJhc2VkIG9uIHRoZSBkZWZpbmVkIGJhc2Ugcm9vdCB1cmwpIHRoYXQgZGVmaW5lcyB0aGUgcGF0aCB0byB0aGUgc2VydmljZSB0byBjYWxsLlxyXG4gICAgICogICAgICAgIEZvciBleGFtcGxlOiAndXNlcnMvbG9naW4nXHJcbiAgICAgKiBAcGFyYW0gcGFyYW1ldGVycyAtIEFuIG9iamVjdCBjb250YWluaW5nIGtleS12YWx1ZSBwYWlycyB0aGF0IGFyZSBzZW50IGFzIHRoZSByZXF1ZXN0IGJvZHkuXHJcbiAgICAgKiAgICAgICAgdG9rZW4gcGFyYW1ldGVyIGlzIG5vdCBuZWNlc3NhcnksIGl0IGlzIGF1dG9tYXRpY2FsbHkgYXBwZW5kZWRcclxuICAgICAqIEBwYXJhbSBvcHRpb25zIEFuIG9iamVjdCBkZWZpbmluZyBzZXZlcmFsIG9wdGlvbnMgZm9yIHRoZSByZXF1ZXN0OlxyXG4gICAgICogICAgICAgIHJlc3VsdEZvcm1hdDogJ0pTT04nIGJ5IGRlZmF1bHQuIFRoZSBleHBlY3RlZCBmb3JtYXQgb2YgdGhlIHJlc3BvbnNlLiBcclxuICAgICAqICAgICAgICBidXN5U3RhdGU6IEVuYWJsZWQgYnkgZGVmYXVsdC4gRW5hYmxlcyBvciBkaXNhYmxlcyB0aGUgYnVzeSBzdGF0ZSB0byBsb2NrIHVzZXIgaW50ZXJhY3Rpb24gd2hpbGUgcGVyZm9ybWluZyB0aGUgaHR0cCBjYWxscy5cclxuICAgICAqICAgICAgICBoYW5kbGVFcnJvcnM6IEVuYWJsZWQgYnkgZGVmYXVsdC4gSWYgc2V0IHRvIHRydWUsIGFuIGVycm9yIGRpYWxvZyB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgc2hvd24gd2hlbiB0aGUgY2FsbCBmYWlscy5cclxuICAgICAqICAgICAgICBJZiBzZXQgdG8gZmFsc2UsIHRoZSBwcm9taXNlIHdpbGwgZ2VuZXJhdGUgYSByZWplY3QgZXJyb3IgdGhhdCBtdXN0IGJlIGhhbmRsZWQgYnkgb3VyIGNvZGUuXHJcbiAgICAgKiAgICAgICBcclxuICAgICAqIEByZXR1cm5zIEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIHJlc3BvbnNlIGRhdGEgY29ycmVjdGx5IHBhcnNlZCBpZiB0aGUgcmVxdWVzdCBpcyBzdWNjZXNzZnVsLCBvciByZWplY3RzIFxyXG4gICAgICogICAgICAgICAgd2l0aCBhbiBlcnJvciAoY29udGFpbmluZyBhbGwgdGhlIGVycm9yIHJlc3BvbnNlIGRldGFpbHMpIGlmIHRoZSByZXF1ZXN0IGZhaWxzLlxyXG4gICAgICovXHJcbiAgICBjYWxsKGFwaVBhdGg6c3RyaW5nLCBwYXJhbWV0ZXJzID0ge30sIG9wdGlvbnM6IHtyZXN1bHRGb3JtYXQ/OidTVFJJTkcnfCdKU09OJywgYnVzeVN0YXRlPzpib29sZWFuLCBoYW5kbGVFcnJvcnM/OmJvb2xlYW59ID0ge30pe1xyXG4gICAgXHJcbiAgICAgICAgLy8gU2V0IHRoZSBkZWZhdWx0IHZhbHVlcyBmb3Igbm9uIHNwZWNpZmllZCBwcm9wZXJ0aWVzXHJcbiAgICAgICAgb3B0aW9ucy5yZXN1bHRGb3JtYXQgPSBvcHRpb25zLnJlc3VsdEZvcm1hdCA/PyAnSlNPTic7XHJcbiAgICAgICAgb3B0aW9ucy5idXN5U3RhdGUgPSBvcHRpb25zLmJ1c3lTdGF0ZSA/PyB0cnVlO1xyXG4gICAgICAgIG9wdGlvbnMuaGFuZGxlRXJyb3JzID0gb3B0aW9ucy5oYW5kbGVFcnJvcnMgPz8gdHJ1ZTtcclxuICAgICAgICBcclxuICAgICAgICBpZihvcHRpb25zLmJ1c3lTdGF0ZSl7XHJcbiAgICAgICAgICAgXHJcbiAgICAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLmFkZE1vZGFsQnVzeVN0YXRlKCk7IFxyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmU6KHI6YW55KSA9PiBhbnksIHJlamVjdCkgPT4ge1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgLy8gQ3JlYXRlIHRoZSByZXF1ZXN0IG9iamVjdFxyXG4gICAgICAgICAgICBjb25zdCByZXF1ZXN0ID0gbmV3IEhUVFBNYW5hZ2VyUG9zdFJlcXVlc3QoXHJcbiAgICAgICAgICAgICAgICBhcGlQYXRoLCBcclxuICAgICAgICAgICAgICAgIG9wdGlvbnMucmVzdWx0Rm9ybWF0ID09PSAnU1RSSU5HJyA/IEhUVFBNYW5hZ2VyUG9zdFJlcXVlc3QuU1RSSU5HIDogSFRUUE1hbmFnZXJQb3N0UmVxdWVzdC5KU09OXHJcbiAgICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgICByZXF1ZXN0LnBhcmFtZXRlcnMgPSBwYXJhbWV0ZXJzO1xyXG5cclxuICAgICAgICAgICAgcmVxdWVzdC5zdWNjZXNzQ2FsbGJhY2sgPSAocmVzcG9uc2U6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICByZXNvbHZlKHJlc3BvbnNlKTtcclxuICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgIHJlcXVlc3QuZXJyb3JDYWxsYmFjayA9IChlcnJvck1zZywgZXJyb3JDb2RlLCByZXNwb25zZSkgPT4ge1xyXG5cclxuICAgICAgICAgICAgICAgIGlmKG9wdGlvbnMuaGFuZGxlRXJyb3JzKXtcclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2hvd0Vycm9yRGlhbG9nKGVycm9yTXNnLCBlcnJvckNvZGUsIHJlc3BvbnNlKTtcclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcihlcnJvck1zZyArICcgJyArIGVycm9yQ29kZSArICcgJyArIHJlc3BvbnNlKSk7XHJcbiAgICAgICAgICAgICAgICB9ICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgcmVxdWVzdC5maW5hbGx5Q2FsbGJhY2sgPSAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIGlmKG9wdGlvbnMuYnVzeVN0YXRlKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2UucmVtb3ZlTW9kYWxCdXN5U3RhdGUoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIHRoaXMuaHR0cE1hbmFnZXIuZXhlY3V0ZShyZXF1ZXN0KTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIFxyXG4gICAgXHJcbiAgICAvKipcclxuICAgICAqIFBlcmZvcm1zIGEgcmVxdWVzdCB0byBjaGFpbiBzZXZlcmFsIGFwaSBjYWxscyBpbnRvIGEgc2luZ2xlIGh0dHAgcmVxdWVzdCwgdmlhIHRoZSBjaGFpbiBzZXJ2aWNlcyBtZWNoYW5pc20gb2YgdGhlIHR1cmJvZnJhbWV3b3JrIEFQSS5cclxuICAgICAqIFJldHVybnMgYSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCBhbiBhcnJheSBvZiByZXNwb25zZSBvYmplY3RzLiBPbmUgZm9yIGVhY2ggb2YgdGhlIHJlcXVlc3QgY2FsbHMuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIGFwaVBhdGggLSBBIHJlbGF0aXZlIFVSTCAoYmFzZWQgb24gdGhlIGRlZmluZWQgYmFzZSByb290IHVybCkgdGhhdCBkZWZpbmVzIHRoZSBwYXRoIHRvIHRoZSByb290IG9mIHRoZSBjaGFpbiBzZXJ2aWNlcyBjYWxsLlxyXG4gICAgICogICAgICAgIEZvciBleGFtcGxlOiAndHVyYm9zaXRlL2NoYWluL2NoYWluLXNlcnZpY2VzJ1xyXG4gICAgICogQHBhcmFtIHNlcnZpY2VzIC0gQW4gYXJyYXkgb2Ygb2JqZWN0cywgd2VyZSBlYWNoIG9iamVjdCBjb250YWlucyBhIHZhbGlkIHN0cnVjdHVyZSBmb3IgdGhlIGNoYWluIHNlcnZpY2VzIGNhbGwuIFxyXG4gICAgICogICAgICAgIFRva2VuIHBhcmFtZXRlciBpcyBub3QgbmVjZXNzYXJ5LCBpdCBpcyBhdXRvbWF0aWNhbGx5IGFwcGVuZGVkXHJcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyBBbiBvYmplY3QgZGVmaW5pbmcgc2V2ZXJhbCBvcHRpb25zIGZvciB0aGUgcmVxdWVzdDpcclxuICAgICAqICAgICAgICBidXN5U3RhdGU6IEVuYWJsZXMgb3IgZGlzYWJsZXMgdGhlIGJ1c3kgc3RhdGUgdG8gbG9jayB1c2VyIGludGVyYWN0aW9uIHdoaWxlIHBlcmZvcm1pbmcgdGhlIGh0dHAgY2FsbHMuIEVuYWJsZWQgYnkgZGVmYXVsdFxyXG4gICAgICogICAgICAgIGhhbmRsZUVycm9yczogRW5hYmxlZCBieSBkZWZhdWx0LiBJZiBzZXQgdG8gdHJ1ZSwgYW4gZXJyb3IgZGlhbG9nIHdpbGwgYmUgYXV0b21hdGljYWxseSBzaG93biB3aGVuIHRoZSBjYWxsIGZhaWxzLlxyXG4gICAgICogICAgICAgIElmIHNldCB0byBmYWxzZSwgdGhlIHByb21pc2Ugd2lsbCBnZW5lcmF0ZSBhIHJlamVjdCBlcnJvciB0aGF0IG11c3QgYmUgaGFuZGxlZCBieSBvdXIgY29kZS5cclxuICAgICAqIFxyXG4gICAgICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgcmVzcG9uc2UgZGF0YSBjb3JyZWN0bHkgcGFyc2VkIGlmIHRoZSByZXF1ZXN0IGlzIHN1Y2Nlc3NmdWwsIG9yIHJlamVjdHMgXHJcbiAgICAgKiAgICAgICAgICB3aXRoIGFuIGVycm9yIChjb250YWluaW5nIGFsbCB0aGUgZXJyb3IgcmVzcG9uc2UgZGV0YWlscykgaWYgdGhlIHJlcXVlc3QgZmFpbHMuXHJcbiAgICAgKi9cclxuICAgIGNhbGxDaGFpbihhcGlQYXRoOnN0cmluZywgc2VydmljZXM6e31bXSwgb3B0aW9uczoge2J1c3lTdGF0ZT86Ym9vbGVhbiwgaGFuZGxlRXJyb3JzPzpib29sZWFufSA9IHt9KXtcclxuICAgIFxyXG4gICAgICAgIC8vIFNldCB0aGUgZGVmYXVsdCB2YWx1ZXMgZm9yIG5vbiBzcGVjaWZpZWQgcHJvcGVydGllc1xyXG4gICAgICAgIG9wdGlvbnMuYnVzeVN0YXRlID0gb3B0aW9ucy5idXN5U3RhdGUgPz8gdHJ1ZTtcclxuICAgICAgICBvcHRpb25zLmhhbmRsZUVycm9ycyA9IG9wdGlvbnMuaGFuZGxlRXJyb3JzID8/IHRydWU7XHJcbiAgICAgICAgXHJcbiAgICAgICAgaWYob3B0aW9ucy5idXN5U3RhdGUpe1xyXG4gICAgICAgICAgIFxyXG4gICAgICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5hZGRNb2RhbEJ1c3lTdGF0ZSgpOyBcclxuICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmU6KHI6YW55KSA9PiBhbnksIHJlamVjdCkgPT4ge1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgY29uc3QgcmVxdWVzdCA9IG5ldyBIVFRQTWFuYWdlclBvc3RSZXF1ZXN0KGFwaVBhdGgsIEhUVFBNYW5hZ2VyUG9zdFJlcXVlc3QuSlNPTik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICByZXF1ZXN0Lmlnbm9yZUdsb2JhbFBvc3RQYXJhbXMgPSB0cnVlOyAgICAgIFxyXG5cclxuICAgICAgICAgICAgcmVxdWVzdC5wYXJhbWV0ZXJzID0geyBzZXJ2aWNlczogc2VydmljZXMgfTtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIHJlcXVlc3Quc3VjY2Vzc0NhbGxiYWNrID0gKHJlc3BvbnNlOmFueVtdKSA9PiB7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgcmVzb2x2ZShyZXNwb25zZSk7XHJcbiAgICAgICAgICAgIH07ICAgICAgXHJcblxyXG4gICAgICAgICAgICByZXF1ZXN0LmVycm9yQ2FsbGJhY2sgPSAoZXJyb3JNc2csIGVycm9yQ29kZSwgcmVzcG9uc2UpID0+IHtcclxuXHJcbiAgICAgICAgICAgICAgICBpZihvcHRpb25zLmhhbmRsZUVycm9ycyl7XHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3dFcnJvckRpYWxvZyhlcnJvck1zZywgZXJyb3JDb2RlLCByZXNwb25zZSk7ICAgIFxyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICByZWplY3QobmV3IEVycm9yKGVycm9yTXNnICsgJyAnICsgZXJyb3JDb2RlICsgJyAnICsgcmVzcG9uc2UpKTtcclxuICAgICAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICByZXF1ZXN0LmZpbmFsbHlDYWxsYmFjayA9ICgpID0+IHtcclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgaWYob3B0aW9ucy5idXN5U3RhdGUpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5yZW1vdmVNb2RhbEJ1c3lTdGF0ZSgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgdGhpcy5odHRwTWFuYWdlci5leGVjdXRlKHJlcXVlc3QpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgXHJcbiAgICBcclxuICAgIC8qKlxyXG4gICAgICogQXV4IG1ldGhvZCB0byBzaG93IGFuIGVycm9yIGRpYWxvZyB3aGVuIGEgcmVxdWVzdCBmYWlscyBhbmQgZXJyb3IgaGFuZGxpbmcgaXMgZW5hYmxlZFxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIHNob3dFcnJvckRpYWxvZyhlcnJvck1zZzpzdHJpbmcsIGVycm9yQ29kZTpudW1iZXIsIHJlc3BvbnNlOmFueSl7XHJcbiAgICAgICAgXHJcbiAgICAgICAgZXJyb3JNc2cgPSBlcnJvck1zZyArICdcXG5cXG4nICsgcmVzcG9uc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICBpZihTdHJpbmdVdGlscy5pc0VtcHR5KGVycm9yTXNnKSl7XHJcbiAgICAgICAgXHJcbiAgICAgICAgICAgIGVycm9yTXNnID0gJ1Vua25vd24gZXJyb3IuIE1ha2Ugc3VyZSBJbnRlcm5ldCBjb25uZWN0aW9uIGlzIGF2YWlsYWJsZSc7ICAgIFxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLmFkZERpYWxvZyhEaWFsb2dFcnJvckNvbXBvbmVudCxcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgd2lkdGg6JzUwdncnLFxyXG4gICAgICAgICAgICAgICAgdGV4dHM6IFsnRXJyb3I6ICcgKyBlcnJvckNvZGUsIGVycm9yTXNnXSxcclxuICAgICAgICAgICAgICAgIG9wdGlvbnM6IFsnT2snXVxyXG4gICAgICAgICAgICB9KTsgXHJcbiAgICB9XHJcbiAgICBcclxuICAgIFxyXG4gICAgLyoqXHJcbiAgICAgKiBQZXJmb3JtIHRoZSBsb2dvdXQgZm9yIHRoZSBjdXJyZW50bHkgbG9nZ2VkIHVzZXJcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyBBbiBvYmplY3QgZGVmaW5pbmcgc2V2ZXJhbCBvcHRpb25zIGZvciB0aGUgcmVxdWVzdDpcclxuICAgICAqICAgICAgICBoYW5kbGVFcnJvcnM6IEVuYWJsZWQgYnkgZGVmYXVsdC4gSWYgc2V0IHRvIHRydWUsIGFuIGVycm9yIGRpYWxvZyB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgc2hvd24gd2hlbiB0aGUgY2FsbCBmYWlscy5cclxuICAgICAqICAgICAgICBJZiBzZXQgdG8gZmFsc2UsIHRoZSBwcm9taXNlIHdpbGwgZ2VuZXJhdGUgYSByZWplY3QgZXJyb3IgdGhhdCBtdXN0IGJlIGhhbmRsZWQgYnkgb3VyIGNvZGUuXHJcbiAgICAgKiBcclxuICAgICAqIEByZXR1cm5zIEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIGNvcnJlY3RseSBpZiB0aGUgbG9nb3V0IGlzIGNvcnJlY3QsIG9yIHJlamVjdHMgd2l0aCBhbiBlcnJvciAoY29udGFpbmluZyBhbGwgdGhlIGVycm9yIFxyXG4gICAgICogICAgICAgICAgcmVzcG9uc2UgZGV0YWlscykgaWYgdGhlIHJlcXVlc3QgZmFpbHMuXHJcbiAgICAgKi9cclxuICAgIGxvZ291dChvcHRpb25zOiB7aGFuZGxlRXJyb3JzPzpib29sZWFufSA9IHt9KSB7XHJcbiAgICAgICAgXHJcbiAgICAgICAgLy8gU2V0IHRoZSBkZWZhdWx0IHZhbHVlcyBmb3Igbm9uIHNwZWNpZmllZCBwcm9wZXJ0aWVzXHJcbiAgICAgICAgb3B0aW9ucy5oYW5kbGVFcnJvcnMgPSBvcHRpb25zLmhhbmRsZUVycm9ycyA/PyB0cnVlO1xyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLmFkZE1vZGFsQnVzeVN0YXRlKCk7IFxyXG4gICAgICAgIFxyXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgY29uc3QgcmVxdWVzdCA9IG5ldyBIVFRQTWFuYWdlclBvc3RSZXF1ZXN0KHRoaXMubG9nT3V0U2VydmljZVVSSSk7XHJcbiAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIHJlcXVlc3QucGFyYW1ldGVycyA9IHsgdG9rZW46IHRoaXMuX3Rva2VuIH07XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICByZXF1ZXN0LnN1Y2Nlc3NDYWxsYmFjayA9ICgpID0+IHtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICB0aGlzLl9jbGVhclVzZXJBbmRUb2tlbigpO1xyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICByZXNvbHZlKHVuZGVmaW5lZCk7XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICByZXF1ZXN0LmVycm9yQ2FsbGJhY2sgPSAoZXJyb3JNc2csIGVycm9yQ29kZSwgcmVzcG9uc2UpID0+IHtcclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgaWYob3B0aW9ucy5oYW5kbGVFcnJvcnMpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2hvd0Vycm9yRGlhbG9nKGVycm9yTXNnLCBlcnJvckNvZGUsIHJlc3BvbnNlKTsgICAgXHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoZXJyb3JNc2cgKyAnICcgKyBlcnJvckNvZGUgKyAnICcgKyByZXNwb25zZSkpO1xyXG4gICAgICAgICAgICAgICAgfSAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgcmVxdWVzdC5maW5hbGx5Q2FsbGJhY2sgPSAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2UucmVtb3ZlTW9kYWxCdXN5U3RhdGUoKTtcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICBcclxuICAgICAgICAgICAgdGhpcy5odHRwTWFuYWdlci5leGVjdXRlKHJlcXVlc3QpO1xyXG4gICAgICAgIH0pOyBcclxuICAgIH1cclxuICAgIFxyXG4gICAgXHJcbiAgICAvKipcclxuICAgICAqIEF1eCBtZXRob3QgdG8gY2xlYXIgYWxsIHRoZSBjdXJyZW50bHkgbG9nZ2VkIHVzZXIgZGF0YVxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIF9jbGVhclVzZXJBbmRUb2tlbigpe1xyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMudXNlck5hbWUgPSAnJztcclxuICAgICAgICB0aGlzLnBhc3N3b3JkID0gJyc7XHJcbiAgICAgICAgdGhpcy5faXNMb2dnZWQgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLl90b2tlbiA9ICcnO1xyXG4gICAgICAgIHRoaXMuaHR0cE1hbmFnZXIuc2V0R2xvYmFsUG9zdFBhcmFtKCd0b2tlbicsICctJyk7IFxyXG4gICAgfVxyXG59XHJcbiJdfQ==
392
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHVyYm8tYXBpLWNhbGxlci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdHVyYm9ndWktYW5ndWxhci9zcmMvbWFpbi9jb250cm9sbGVyL3R1cmJvLWFwaS1jYWxsZXIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7OztHQU9HO0FBRUgsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUzQyxPQUFPLEVBQUUsZUFBZSxFQUFFLFdBQVcsRUFBRSxzQkFBc0IsRUFBRSxXQUFXLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNwRyxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUMvRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx3REFBd0QsQ0FBQzs7OztBQUk5Rjs7R0FFRztBQUlILE1BQU0sT0FBTyxxQkFBc0IsU0FBUSxxQkFBcUI7SUErRDVELFlBQW9CLGFBQTRCLEVBQzVCLGNBQThCO1FBRTlDLEtBQUssQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO1FBSGIsa0JBQWEsR0FBYixhQUFhLENBQWU7UUFDNUIsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBN0RsRDs7V0FFRztRQUNILG9CQUFlLEdBQUcsYUFBYSxDQUFDO1FBR2hDOztXQUVHO1FBQ0gscUJBQWdCLEdBQUcsY0FBYyxDQUFDO1FBR2xDOztXQUVHO1FBQ0gseUJBQW9CLEdBQUcsd0JBQXdCLENBQUM7UUFHaEQ7O1dBRUc7UUFDSCxhQUFRLEdBQUcsRUFBRSxDQUFDO1FBR2Q7O1dBRUc7UUFDSCxhQUFRLEdBQUcsRUFBRSxDQUFDO1FBR2Q7O1dBRUc7UUFDSyxzQkFBaUIsR0FBRyxFQUFFLENBQUM7UUFHL0I7O1dBRUc7UUFDSyxjQUFTLEdBQUcsS0FBSyxDQUFDO1FBRzFCOztXQUVHO1FBQ0ssV0FBTSxHQUFHLEVBQUUsQ0FBQztRQUdwQjs7V0FFRztRQUNL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QUcsQ0FBQyxDQUFDO0lBQ3RELENBQUM7OEdBeGdCUSxxQkFBcUI7a0hBQXJCLHFCQUFxQixjQUZwQixNQUFNOzsyRkFFUCxxQkFBcUI7a0JBSGpDLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIFR1cmJvR1VJIGlzIEEgbGlicmFyeSB0aGF0IGhlbHBzIHdpdGggdGhlIG1vc3QgY29tbW9uIGFuZCBnZW5lcmljIFVJIGVsZW1lbnRzIGFuZCBmdW5jdGlvbmFsaXRpZXNcclxuICpcclxuICogV2Vic2l0ZSA6IC0+IGh0dHA6Ly93d3cudHVyYm9ndWkub3JnXHJcbiAqIExpY2Vuc2UgOiAtPiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wLiBZb3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXHJcbiAqIExpY2Vuc2UgVXJsIDogLT4gaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXHJcbiAqIENvcHlSaWdodCA6IC0+IENvcHlyaWdodCAyMDE4IEVkZXJ0b25lIEFkdmFuZGVkIFNvbHV0aW9ucy4gaHR0cHM6Ly93d3cuZWRlcnRvbmUuY29tXHJcbiAqL1xyXG5cclxuaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBEaWFsb2dTZXJ2aWNlIH0gZnJvbSAnLi9kaWFsb2cuc2VydmljZSc7XHJcbmltcG9ydCB7IENvbnZlcnNpb25VdGlscywgSFRUUE1hbmFnZXIsIEhUVFBNYW5hZ2VyUG9zdFJlcXVlc3QsIFN0cmluZ1V0aWxzIH0gZnJvbSAndHVyYm9jb21tb25zLXRzJztcclxuaW1wb3J0IHsgU2luZ2xldG9uZVN0cmljdENsYXNzIH0gZnJvbSAnLi4vbW9kZWwvY2xhc3Nlcy9TaW5nbGV0b25lU3RyaWN0Q2xhc3MnO1xyXG5pbXBvcnQgeyBEaWFsb2dFcnJvckNvbXBvbmVudCB9IGZyb20gJy4uL3ZpZXcvY29tcG9uZW50cy9kaWFsb2ctZXJyb3IvZGlhbG9nLWVycm9yLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEJyb3dzZXJTZXJ2aWNlIH0gZnJvbSAnLi9icm93c2VyLnNlcnZpY2UnO1xyXG5cclxuXHJcbi8qKlxyXG4gKiBBbGxvd3MgdXMgdG8gZWFzaWx5IHBlcmZvcm0gcmVxdWVzdHMgdG8gYSByZW1vdGUgQVBJIHRoYXQgaXMgZGV2ZWxvcGVkIHdpdGggVHVyYm8gZnJhbWV3b3JrLlxyXG4gKi9cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290JyxcclxufSlcclxuZXhwb3J0IGNsYXNzIFR1cmJvQXBpQ2FsbGVyU2VydmljZSBleHRlbmRzIFNpbmdsZXRvbmVTdHJpY3RDbGFzcyB7XHJcbiAgICBcclxuXHJcbiAgICAvKipcclxuICAgICAqIFVSSSBQYXRoIHRvIHRoZSB3ZWIgc2VydmljZSB0aGF0IHBlcmZvcm1zIHRoZSB1c2VyIGxvZ2luXHJcbiAgICAgKi9cclxuICAgIGxvZ2luU2VydmljZVVSSSA9ICd1c2Vycy9sb2dpbic7XHJcbiAgICBcclxuICAgIFxyXG4gICAgLyoqXHJcbiAgICAgKiBVUkkgUGF0aCB0byB0aGUgd2ViIHNlcnZpY2UgdGhhdCBwZXJmb3JtcyB0aGUgdXNlciBsb2cgb3V0XHJcbiAgICAgKi9cclxuICAgIGxvZ091dFNlcnZpY2VVUkkgPSAndXNlcnMvbG9nb3V0JztcclxuICAgIFxyXG4gICAgXHJcbiAgICAvKipcclxuICAgICAqIFVSSSBQYXRoIHRvIHRoZSB3ZWIgc2VydmljZSB0aGF0IHBlcmZvcm1zIHRoZSB2ZXJpZmljYXRpb24gZm9yIGEgdXNlciBlbWFpbFxyXG4gICAgICovXHJcbiAgICBtYWlsVmVyaWZ5U2VydmljZVVSSSA9ICd1c2Vycy91c2VyLW1haWwtdmVyaWZ5JztcclxuXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgdXNlcm5hbWUgdGhhdCBpcyBjdXJyZW50bHkgZGVmaW5lZCBhbmQgd2lsbCBiZSB1c2VkIGJ5IHRoZSBsb2dpbiBtZXRob2RzXHJcbiAgICAgKi9cclxuICAgIHVzZXJOYW1lID0gJyc7XHJcblxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIHBhc3N3b3JkIGZvciB0aGUgdXNlciB0aGF0IGlzIGN1cnJlbnRseSBkZWZpbmVkIGFuZCB3aWxsIGJlIHVzZWQgYnkgdGhlIGxvZ2luIG1ldGhvZHNcclxuICAgICAqL1xyXG4gICAgcGFzc3dvcmQgPSAnJztcclxuICAgIFxyXG4gICAgXHJcbiAgICAvKipcclxuICAgICAqIENvbnRhaW5zIHRoZSBsYXN0IGVtYWlsIGFjY291bnQgdGhhdCBoYXMgYmVlbiB2ZXJpZmllZCAob3IgdHJpZWQgdG8gdmVyaWZ5KSBieSB0aGlzIHNlcnZpY2UsIGlmIGFueVxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIF9sYXN0VmVyaWZpZWRNYWlsID0gJyc7XHJcblxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2hlY2sgcHVibGljIGdldHRlciBmb3IgZG9jc1xyXG4gICAgICovXHJcbiAgICBwcml2YXRlIF9pc0xvZ2dlZCA9IGZhbHNlO1xyXG5cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBzZWUgdG9rZW4oKSBnZXR0ZXIgZm9yIG1vcmUgaW5mb1xyXG4gICAgICovXHJcbiAgICBwcml2YXRlIF90b2tlbiA9ICcnO1xyXG4gICAgXHJcbiAgICBcclxuICAgIC8qKlxyXG4gICAgICogTGlzdCBvZiBvcGVyYXRpb25zIHRoYXQgYXJlIGFsbG93ZWQgdG8gdGhlIGN1cnJlbnRseSBsb2dlZCB1c2VyLiBJdCBnZXRzIGZpbGxlZCBqdXN0IGFmdGVyIGxvZ2luIGlzIHBlcmZvcm1lZFxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIF9vcGVyYXRpb25zOnN0cmluZ1tdID0gW107XHJcbiAgICBcclxuICAgIFxyXG4gICAgLyoqXHJcbiAgICAgKiBQcml2YXRlIGh0dHAgc2VydmljZSBpbnN0YW5jZSB0aGF0IHdpbGwgYmUgZXhjbHVzaXZlIHRvIHRoaXMgdHVyYm8gYXBpIGNhbGxlciBzZXJ2aWNlLiBJdCBpcyBhIGR1cGxpY2F0ZS5cclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBodHRwTWFuYWdlcjogSFRUUE1hbmFnZXI7XHJcbiAgICBcclxuICAgIFxyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBkaWFsb2dTZXJ2aWNlOiBEaWFsb2dTZXJ2aWNlLCBcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgYnJvd3NlclNlcnZpY2U6IEJyb3dzZXJTZXJ2aWNlKSB7XHJcbiAgICAgICAgXHJcbiAgICAgICAgc3VwZXIoVHVyYm9BcGlDYWxsZXJTZXJ2aWNlKTtcclxuICAgICAgICBcclxuICAgICAgICAvLyBDcmVhdGUgYSBmcmVzaCBpbnN0YW5jZSBvZiB0aGUgaHR0cCBzZXJ2aWNlIHNvIHdlIGNhbiB1c2UgaXQgaW5kZXBlbmRlbnRseVxyXG4gICAgICAgIHRoaXMuaHR0cE1hbmFnZXIgPSBuZXcgSFRUUE1hbmFnZXIoKTtcclxuICAgICAgICB0aGlzLl9jbGVhclVzZXJBbmRUb2tlbigpO1xyXG4gICAgfVxyXG4gICAgXHJcblxyXG4gICAgLyoqIFxyXG4gICAgICogRGVmaW5lIHRoZSByb290IHVybCB0aGF0IHdpbGwgYmUgdXNlZCBmb3IgYWxsIHRoZSBBUEkgY2FsbHNcclxuICAgICAqL1xyXG4gICAgc2V0IGJhc2VVcmwodXJsOnN0cmluZyl7XHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5odHRwTWFuYWdlci5iYXNlVXJsID0gdXJsO1xyXG4gICAgfVxyXG4gICAgXHJcbiAgICBcclxuICAgIC8qKiBcclxuICAgICAqIERlZmluZSB0aGUgcm9vdCB1cmwgdGhhdCB3aWxsIGJlIHVzZWQgZm9yIGFsbCB0aGUgQVBJIGNhbGxzXHJcbiAgICAgKi9cclxuICAgIGdldCBiYXNlVXJsKCl7XHJcbiAgICAgICAgXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cE1hbmFnZXIuYmFzZVVybDtcclxuICAgIH1cclxuICAgIFxyXG4gICAgXHJcbiAgICAvKipcclxuICAgICAqIElmIHRoZSBjdXJyZW50IGJyb3dzZXIgVVJMIGNvbnRhaW5zIGEgaGFzaCBmcmFnbWVudCAoVGhlIHBhcnQgYWZ0ZXIgdGhlICMgY2hhcmFjdGVyKSB0aGF0IGNvbnRhaW5zIGVuY29kZWQgdXNlciBvciBwYXNzd29yZFxyXG4gICAgICogdmFsdWVzLCB0aGlzIG1ldGhvZCB3aWxsIHBhcnNlIGFuZCBhdXRvbWF0aWNhbGx5IHNldCB0aGVtIGFzIHRoZSBjcmVkZW50aWFscyB0byB1c2UuXHJcbiAgICAgKiBcclxuICAgICAqIFRoZSBVUkwgaGFzaCBpcyBub3QgYWx0ZXJlZCBpbiBhbnkgd2F5IGJ5IHRoaXMgbWV0aG9kLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm5zIFRydWUgaWYgYW55IGNyZWRlbnRpYWxzIHdlcmUgZm91bmQgYW5kIGxvYWRlZCwgZmFsc2UgaWYgbm90aGluZyBoYXBwZW5lZFxyXG4gICAgICovXHJcbiAgICBsb2FkQ3JlZGVudGlhbHNGcm9tVVJMSGFzaEZyYWdtZW50KCkge1xyXG4gICAgXHJcbiAgICAgICAgLy8gSWYgdGhlIGhhc2ggZnJhZ21lbnQgaXMgZW1wdHksIG5vdGhpbmcgdG8gZG9cclxuICAgICAgICBpZighdGhpcy5icm93c2VyU2VydmljZS5pc0N1cnJlbnRVcmxXaXRoSGFzaEZyYWdtZW50KCkpe1xyXG4gICAgICAgICAgIFxyXG4gICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICBcclxuICAgICAgICBsZXQgdmFsdWVzRm91bmQgPSBmYWxzZTtcclxuICAgICAgIFxyXG4gICAgICAgIC8vIFNwbGl0IHRoZSBoYXNoIGZyYWdtZW50IHRvIG9idGFpbiB0aGUgZGlmZmVyZW50IHZhbHVlcyB0aGF0IGNvbnRhaW5zXHJcbiAgICAgICAgbGV0IGhhc2hEYXRhID0gdGhpcy5icm93c2VyU2VydmljZS5nZXRDdXJyZW50VXJsSGFzaEZyYWdtZW50KCkuc3BsaXQoJy8nKTtcclxuICAgICAgIFxyXG4gICAgICAgIC8vIFVzZXIgbmFtZSBpcyB0aGUgZmlyc3QgZWxlbWVudCBvZiB0aGUgaGFzaCBmcmFnbWVudC4gSWYgd2UgZm91bmQgYSB2YWx1ZSwgXHJcbiAgICAgICAgLy8gd2Ugd2lsbCBmaWxsIGl0IGF1dG9tYXRpY2FsbHlcclxuICAgICAgICBpZihoYXNoRGF0YS5sZW5ndGggPiAwKXtcclxuICAgICAgICAgICBcclxuICAgICAgICAgICAgdmFsdWVzRm91bmQgPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLnVzZXJOYW1lID0gQ29udmVyc2lvblV0aWxzLmJhc2U2NFRvU3RyaW5nKGhhc2hEYXRhWzBdKTtcclxuICAgICAgICB9XHJcbiAgICAgICBcclxuICAgICAgICAvLyBBdXRvIGZpbGwgdGhlIHBhc3N3b3JkIGlmIGl0IGlzIHJlY2VpdmVkXHJcbiAgICAgICAgaWYoaGFzaERhdGEubGVuZ3RoID4gMyl7XHJcbiAgICAgICAgXHJcbiAgICAgICAgICAgIHZhbHVlc0ZvdW5kID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5wYXNzd29yZCA9IENvbnZlcnNpb25VdGlscy5iYXNlNjRUb1N0cmluZyhoYXNoRGF0YVszXSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgXHJcbiAgICAgICAgcmV0dXJuIHZhbHVlc0ZvdW5kO1xyXG4gICAgfVxyXG4gICAgXHJcbiAgICBcclxuICAgIC8qKlxyXG4gICAgICogSWYgdGhlIGN1cnJlbnQgYnJvd3NlciBVUkwgY29udGFpbnMgYSBoYXNoIGZyYWdtZW50IChUaGUgcGFydCBhZnRlciB0aGUgIyBjaGFyYWN0ZXIpIHRoYXQgY29udGFpbnMgZW5jb2RlZCB1c2VyLCBtYWlsIGFuZFxyXG4gICAgICogaGFzIHZlcmlmaWNhdGlvbiBjb2RlIHZhbHVlcywgdGhpcyBtZXRob2Qgd2lsbCBwZXJmb3JtIHRoZSByZXF1ZXN0IHRvIHNlcnZlciB0byB2ZXJpZnkgdGhhdCBlbWFpbCBhY2NvdW50IGZvciB0aGUgdXNlci5cclxuICAgICAqIFxyXG4gICAgICogVGhlIFVSSSBwYXRoIHRvIHRoZSBtYWlsIHZlcmlmaWNhdGlvbiBzZXJ2aWNlIG11c3QgYmUgY29ycmVjdGx5IGRlZmluZWQgYXQgdGhpcy5tYWlsVmVyaWZ5U2VydmljZVVSSSBwcm9wZXJ0eS5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJucyBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB3aXRoIHRoZSBzZXJ2ZXIgcmVzcG9uc2UgaWYgdGhlIHZlcmlmaWNhdGlvbiBpcyBzdWNjZXNzZnVsLFxyXG4gICAgICogICAgICAgICAgb3IgcmVqZWN0cyB3aXRoIGFuIGVycm9yIGlmIHRoZSB2ZXJpZmljYXRpb24gZmFpbHMuIFJlc3BvbnNlIHdpbGwgaGF2ZSA0IHBvc3NpYmxlIHZhbHVlczpcclxuICAgICAqICAgICAgICAgICAgICAgdW5kZWZpbmVkIC0gbWVhbmluZyB0aGF0IHRoZSBVUkwgaGFzaCBmcmFnbWVudCBkaWRuJ3QgY29udGFpbiB2YWxpZCB2ZXJpZmljYXRpb24gdmFsdWVzXHJcbiAgICAgKiAgICAgICAgICAgICAgLTEgLSBtZWFuaW5nIHZlcmlmaWNhdGlvbiBmYWlsZWRcclxuICAgICAqICAgICAgICAgICAgICAgMCAtIG1lYW5pbmcgdmVyaWZpY2F0aW9uIHN1Y2NlZWRlZFxyXG4gICAgICogICAgICAgICAgICAgICAxIC0gbWVhbmluZyB0aGUgZW1haWwgd2FzIGFscmVhZHkgcHJldmlvdWx5IHZlcmlmaWVkXHJcbiAgICAgKi9cclxuICAgIHZlcmlmeVVzZXJNYWlsRnJvbVVSTEhhc2hGcmFnbWVudCgpIHtcclxuXHJcbiAgICAgICAgLy8gSWYgdGhlIGhhc2ggZnJhZ21lbnQgaXMgZW1wdHksIG5vdGhpbmcgdG8gZG9cclxuICAgICAgICBpZih0aGlzLmJyb3dzZXJTZXJ2aWNlLmlzQ3VycmVudFVybFdpdGhIYXNoRnJhZ21lbnQoKSl7XHJcbiAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgbGV0IGhhc2hEYXRhID0gdGhpcy5icm93c2VyU2VydmljZS5nZXRDdXJyZW50VXJsSGFzaEZyYWdtZW50KCkuc3BsaXQoJy8nKTtcclxuICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgaWYoaGFzaERhdGEubGVuZ3RoID49IDMpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIC8vIENhbGwgZm9yIHRoZSB1c2VyIG1haWwgdmVyaWZpY2F0aW9uIGlmIHVzZXIsIG1haWwgYW5kIGhhc2ggYXJlIHJlY2VpdmVkXHJcbiAgICAgICAgICAgICAgICBsZXQgdXNlciA9IENvbnZlcnNpb25VdGlscy5iYXNlNjRUb1N0cmluZyhoYXNoRGF0YVswXSk7XHJcbiAgICAgICAgICAgICAgICBsZXQgbWFpbCA9IENvbnZlcnNpb25VdGlscy5iYXNlNjRUb1N0cmluZyhoYXNoRGF0YVsxXSk7XHJcbiAgICAgICAgICAgICAgICBsZXQgaGFzaCA9IENvbnZlcnNpb25VdGlscy5iYXNlNjRUb1N0cmluZyhoYXNoRGF0YVsyXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgaWYoIVN0cmluZ1V0aWxzLmlzRW1wdHkodXNlcikgJiYgIVN0cmluZ1V0aWxzLmlzRW1wdHkobWFpbCkgJiYgIVN0cmluZ1V0aWxzLmlzRW1wdHkoaGFzaCkpe1xyXG4gICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2xhc3RWZXJpZmllZE1haWwgPSBtYWlsO1xyXG4gICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNhbGwodGhpcy5tYWlsVmVyaWZ5U2VydmljZVVSSSwge3VzZXJOYW1lOiB1c2VyLCBtYWlsOiBtYWlsLCBoYXNoOiBoYXNofSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh1bmRlZmluZWQpO1xyXG4gICAgfVxyXG4gICAgXHJcbiAgICBcclxuICAgIC8qKlxyXG4gICAgICogT2J0YWluIHRoZSBsYXQgdXNlciBtYWlsIGFjY291bnQgdGhhdCBoYXMgYmVlbiB2ZXJpZmllZCAob3IgYXR0ZW1wdGVkIHRvIHZlcmlmeSkgYnkgdGhpcyBzZXJ2aWNlLlxyXG4gICAgICovXHJcbiAgICBnZXRMYXN0VmVyaWZpZWRNYWlsKCl7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLl9sYXN0VmVyaWZpZWRNYWlsOztcclxuICAgIH1cclxuICAgIFxyXG4gICAgXHJcbiAgICAvKipcclxuICAgICAqIEF1dGhlbnRpY2F0ZXMgdGhlIHVzZXIgYnkgc2VuZGluZyBhbiBlbmNvZGVkIGNyZWRlbnRpYWxzIHJlcXVlc3QgdG8gdGhlIGxvZ2luIHdlYiBzZXJ2aWNlLlxyXG4gICAgICogUmV0dXJucyBhIHByb21pc2UgdGhhdCByZXNvbHZlcyB3aXRoIHRoZSBzZXJ2ZXIncyByZXNwb25zZSBvciByZWplY3RzIHdpdGggYW4gZXJyb3IgaWYgdGhlIGxvZ2luIGZhaWxzLlxyXG4gICAgICogUGF0aCB0byB0aGUgbG9naW4gc2VydmljZSBtdXN0IGJlIGNvcnJlY3RseSBkZWZpbmVkIGF0IHRoaXMubG9naW5XZWJTZXJ2aWNlXHJcbiAgICAgKlxyXG4gICAgICogSGVyZSdzIGFuIGV4YW1wbGUgb2YgYSBjYWxsOlxyXG4gICAgICogXHJcbiAgICAgKiAgbG9naW4oKS50aGVuKHJlc3BvbnNlID0+IHtcclxuICAgICAqICAgICBjb25zb2xlLmxvZygnTG9naW4gc3VjY2Vzc2Z1bDonLCByZXNwb25zZSk7XHJcbiAgICAgKiAgfSkuY2F0Y2goKCkgPT4ge1xyXG4gICAgICogICAgIGNvbnNvbGUuZXJyb3IoJ0xvZ2luIGZhaWxlZDonKTtcclxuICAgICAqICB9KTtcclxuICAgICAqIFxyXG4gICAgICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgc2VydmVyIHJlc3BvbnNlIGlmIHRoZSBsb2dpbiBpcyBzdWNjZXNzZnVsLFxyXG4gICAgICogICAgICAgICAgb3IgcmVqZWN0cyB3aXRoIGFuIGVycm9yIGlmIHRoZSBsb2dpbiBmYWlscy5cclxuICAgICAqL1xyXG4gICAgbG9naW4oKSB7XHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLmFkZE1vZGFsQnVzeVN0YXRlKCk7IFxyXG4gICAgICAgIFxyXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZToocjphbnkpID0+IGFueSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgXHJcbiAgICAgICAgICAgIGNvbnN0IHJlcXVlc3QgPSBuZXcgSFRUUE1hbmFnZXJQb3N0UmVxdWVzdCh0aGlzLmxvZ2luU2VydmljZVVSSSk7XHJcbiAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIHJlcXVlc3QuaWdub3JlR2xvYmFsUG9zdFBhcmFtcyA9IHRydWU7XHJcbiAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBjb25zdCBlbmNvZGVkQ3JlZGVudGlhbHMgPSBDb252ZXJzaW9uVXRpbHMuc3RyaW5nVG9CYXNlNjQoXHJcbiAgICAgICAgICAgICAgICBDb252ZXJzaW9uVXRpbHMuc3RyaW5nVG9CYXNlNjQodGhpcy51c2VyTmFtZSkgKyAnLCcgKyBDb252ZXJzaW9uVXRpbHMuc3RyaW5nVG9CYXNlNjQodGhpcy5wYXNzd29yZCkpO1xyXG4gICAgXHJcbiAgICAgICAgICAgIHJlcXVlc3QucGFyYW1ldGVycyA9IHsgZGF0YTogZW5jb2RlZENyZWRlbnRpYWxzIH07XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICByZXF1ZXN0LnN1Y2Nlc3NDYWxsYmFjayA9IChyZXNwb25zZSkgPT4ge1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZSAhPT0gJycpIHtcclxuICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICByZXNwb25zZSA9IEpTT04ucGFyc2UocmVzcG9uc2UpOyAgICAgICAgICAgIFxyXG4gICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2lzTG9nZ2VkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl90b2tlbiA9IHJlc3BvbnNlLnRva2VuO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX29wZXJhdGlvbnMgPSByZXNwb25zZS5vcGVyYXRpb25zO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaHR0cE1hbmFnZXIuc2V0R2xvYmFsUG9zdFBhcmFtKCd0b2tlbicsIHJlc3BvbnNlLnRva2VuKTtcclxuICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHJlc3BvbnNlKTtcclxuICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2xlYXJVc2VyQW5kVG9rZW4oKTtcclxuICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICByZWplY3QobmV3IEVycm9yKCkpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgcmVxdWVzdC5lcnJvckNhbGxiYWNrID0gKCkgPT4ge1xyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMuX2NsZWFyVXNlckFuZFRva2VuKCk7XHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoKSk7ICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICByZXF1ZXN0LmZpbmFsbHlDYWxsYmFjayA9ICgpID0+IHtcclxuICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5yZW1vdmVNb2RhbEJ1c3lTdGF0ZSgpO1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIFxyXG4gICAgICAgICAgICB0aGlzLmh0dHBNYW5hZ2VyLmV4ZWN1dGUocmVxdWVzdCk7XHJcbiAgICAgICAgfSk7IFxyXG4gICAgfVxyXG4gICAgXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDaGVja3MgaWYgdGhlIHVzZXIgYW5kIHBhc3N3b3JkIGNyZWRlbnRpYWxzIGFyZSBmaWxsZWQgYW5kIG5vdCBlbXB0eS5cclxuICAgICAqIElmIGFueSBvZiB0aGUgdHdvIHZhbHVlcyBpcyBlbXB0eSwgZmFsc2Ugd2lsbCBiZSByZXR1cm5lZFxyXG4gICAgICovXHJcbiAgICBnZXQgaXNVc2VyQW5kUHN3RGVmaW5lZCgpOiBib29sZWFuICB7XHJcblxyXG4gICAgICAgIHJldHVybiAhU3RyaW5nVXRpbHMuaXNFbXB0eSh0aGlzLnVzZXJOYW1lKSAmJiAhU3RyaW5nVXRpbHMuaXNFbXB0eSh0aGlzLnBhc3N3b3JkKTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUZWxscyBpZiBleGlzdHMgYSB1c2VyIHRoYXQgaXMgY3VycmVudGx5IGxvZ2dlZCBvciBub3RcclxuICAgICAqL1xyXG4gICAgZ2V0IGlzTG9nZ2VkKCk6IGJvb2xlYW4ge1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5faXNMb2dnZWQ7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2l2ZXMgdGhlIHZhbHVlIGZvciB0aGUgY3VycmVudGx5IGFjdGl2ZSB1c2VyIGF1dGhlbnRpY2F0aW9uIHRva2VuIG9yIGFuIGVtcHR5IHN0cmluZyBpZiBubyB1c2VyIGxvZ2dlZFxyXG4gICAgICovXHJcbiAgICBnZXQgdG9rZW4oKSB7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLl90b2tlbjtcclxuICAgIH1cclxuICAgIFxyXG4gICAgXHJcbiAgICAvKipcclxuICAgICAqIENoZWNrcyBpZiB0aGUgY3VycmVudGx5IGxvZ2dlZCB1c2VyIGlzIGFsbG93ZWQgdG8gcGVyZm9ybSB0aGUgc3BlY2lmaWVkIG9wZXJhdGlvbi5cclxuICAgICAqIFRoaXMgd2lsbCBjaGVjayB0aGUgdXNlciBwZXJtaXNpb25zIGFzIGRlZmluZWQgb24gc2VydmVyIHNpZGUgYW5kIHJldHVybiB0cnVlIGlmIHRoZSBvcGVyYXRpb24gaXMgYWxsb3dlZFxyXG4gICAgICogb3IgZmFsc2UgaWYgbm90LiBXZSBjYW4gdGhlbiBkZWNpZGUgd2hhdCB0byBkbyAoaGlkZSBhbiBhcHAgc2VjdGlvbiwgYmxvY2sgYSBidXR0b24sIGV0YylcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIG9wZXJhdGlvbiBUaGUgbmFtZSBvZiB0aGUgb3BlcmF0aW9uIHRvIGNoZWNrIFxyXG4gICAgICogXHJcbiAgICAgKiBAcmV0dXJucyBUcnVlIGlmIHRoZSBvcGVyYXRpb24gaXMgYWxsb3dlZCwgZmFsc2Ugb3RoZXJ3aXNlIFxyXG4gICAgICovXHJcbiAgICBpc1VzZXJBbGxvd2VkVG8ob3BlcmF0aW9uOnN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX29wZXJhdGlvbnMuaW5jbHVkZXMob3BlcmF0aW9uKTtcclxuICAgIH1cclxuICAgICAgICBcclxuICAgIFxyXG4gICAgLyoqXHJcbiAgICAgKiBQZXJmb3JtcyBhIHN0YW5kYXJkIHJlcXVlc3QgdG8gYW4gQVBJIHNlcnZpY2UgYW5kIHJldHVybnMgYSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgcmVzcG9uc2UgZGF0YS5cclxuICAgICAqIFxyXG4gICAgICogRm9sbG93aW5nIGlzIGFuIGV4YW1wbGUgb2YgYSBjYWxsOlxyXG4gICAgICogXHJcbiAgICAgKiAgICAgdGhpcy5hcGlTZXJ2aWNlLmNhbGwoJ3VzZXJzL3VzZXItY3JlYXRlJywgdGhpcy51c2VyRGF0YSwge2hhbmRsZUVycm9yczogZmFsc2V9KS50aGVuKHJlc3BvbnNlID0+IHtcclxuICAgICAqICAgICAgICAgIFxyXG4gICAgICogICAgICAgICAgY29uc29sZS5sb2coJ1N1Y2Nlc3M6JywgcmVzcG9uc2UpO1xyXG4gICAgICogICAgICAgICAgXHJcbiAgICAgKiAgICAgIH0pLmNhdGNoKGVycm9yID0+IHtcclxuICAgICAqICAgICAgICAgIFxyXG4gICAgICogICAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3I6JywgZXJyb3IubWVzc2FnZSk7XHJcbiAgICAgKiAgICAgIH0pO1xyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBhcGlQYXRoIC0gQSByZWxhdGl2ZSBVUkwgKGJhc2VkIG9uIHRoZSBkZWZpbmVkIGJhc2Ugcm9vdCB1cmwpIHRoYXQgZGVmaW5lcyB0aGUgcGF0aCB0byB0aGUgc2VydmljZSB0byBjYWxsLlxyXG4gICAgICogICAgICAgIEZvciBleGFtcGxlOiAndXNlcnMvbG9naW4nXHJcbiAgICAgKiBAcGFyYW0gcGFyYW1ldGVycyAtIEFuIG9iamVjdCBjb250YWluaW5nIGtleS12YWx1ZSBwYWlycyB0aGF0IGFyZSBzZW50IGFzIHRoZSByZXF1ZXN0IGJvZHkuXHJcbiAgICAgKiAgICAgICAgdG9rZW4gcGFyYW1ldGVyIGlzIG5vdCBuZWNlc3NhcnksIGl0IGlzIGF1dG9tYXRpY2FsbHkgYXBwZW5kZWRcclxuICAgICAqIEBwYXJhbSBvcHRpb25zIEFuIG9iamVjdCBkZWZpbmluZyBzZXZlcmFsIG9wdGlvbnMgZm9yIHRoZSByZXF1ZXN0OlxyXG4gICAgICogICAgICAgIHJlc3VsdEZvcm1hdDogJ0pTT04nIGJ5IGRlZmF1bHQuIFRoZSBleHBlY3RlZCBmb3JtYXQgb2YgdGhlIHJlc3BvbnNlLiBcclxuICAgICAqICAgICAgICBidXN5U3RhdGU6IEVuYWJsZWQgYnkgZGVmYXVsdC4gRW5hYmxlcyBvciBkaXNhYmxlcyB0aGUgYnVzeSBzdGF0ZSB0byBsb2NrIHVzZXIgaW50ZXJhY3Rpb24gd2hpbGUgcGVyZm9ybWluZyB0aGUgaHR0cCBjYWxscy5cclxuICAgICAqICAgICAgICBoYW5kbGVFcnJvcnM6IEVuYWJsZWQgYnkgZGVmYXVsdC4gSWYgc2V0IHRvIHRydWUsIGFuIGVycm9yIGRpYWxvZyB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgc2hvd24gd2hlbiB0aGUgY2FsbCBmYWlscy5cclxuICAgICAqICAgICAgICBJZiBzZXQgdG8gZmFsc2UsIHRoZSBwcm9taXNlIHdpbGwgZ2VuZXJhdGUgYSByZWplY3QgZXJyb3IgdGhhdCBtdXN0IGJlIGhhbmRsZWQgYnkgb3VyIGNvZGUuXHJcbiAgICAgKiAgICAgICBcclxuICAgICAqIEByZXR1cm5zIEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIHJlc3BvbnNlIGRhdGEgY29ycmVjdGx5IHBhcnNlZCBpZiB0aGUgcmVxdWVzdCBpcyBzdWNjZXNzZnVsLCBvciByZWplY3RzIFxyXG4gICAgICogICAgICAgICAgd2l0aCBhbiBlcnJvciAoY29udGFpbmluZyBhbGwgdGhlIGVycm9yIHJlc3BvbnNlIGRldGFpbHMpIGlmIHRoZSByZXF1ZXN0IGZhaWxzLlxyXG4gICAgICovXHJcbiAgICBjYWxsKGFwaVBhdGg6c3RyaW5nLCBwYXJhbWV0ZXJzID0ge30sIG9wdGlvbnM6IHtyZXN1bHRGb3JtYXQ/OidTVFJJTkcnfCdKU09OJywgYnVzeVN0YXRlPzpib29sZWFuLCBoYW5kbGVFcnJvcnM/OmJvb2xlYW59ID0ge30pe1xyXG4gICAgXHJcbiAgICAgICAgLy8gU2V0IHRoZSBkZWZhdWx0IHZhbHVlcyBmb3Igbm9uIHNwZWNpZmllZCBwcm9wZXJ0aWVzXHJcbiAgICAgICAgb3B0aW9ucy5yZXN1bHRGb3JtYXQgPSBvcHRpb25zLnJlc3VsdEZvcm1hdCA/PyAnSlNPTic7XHJcbiAgICAgICAgb3B0aW9ucy5idXN5U3RhdGUgPSBvcHRpb25zLmJ1c3lTdGF0ZSA/PyB0cnVlO1xyXG4gICAgICAgIG9wdGlvbnMuaGFuZGxlRXJyb3JzID0gb3B0aW9ucy5oYW5kbGVFcnJvcnMgPz8gdHJ1ZTtcclxuICAgICAgICBcclxuICAgICAgICBpZihvcHRpb25zLmJ1c3lTdGF0ZSl7XHJcbiAgICAgICAgICAgXHJcbiAgICAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLmFkZE1vZGFsQnVzeVN0YXRlKCk7IFxyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmU6KHI6YW55KSA9PiBhbnksIHJlamVjdCkgPT4ge1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgLy8gQ3JlYXRlIHRoZSByZXF1ZXN0IG9iamVjdFxyXG4gICAgICAgICAgICBjb25zdCByZXF1ZXN0ID0gbmV3IEhUVFBNYW5hZ2VyUG9zdFJlcXVlc3QoXHJcbiAgICAgICAgICAgICAgICBhcGlQYXRoLCBcclxuICAgICAgICAgICAgICAgIG9wdGlvbnMucmVzdWx0Rm9ybWF0ID09PSAnU1RSSU5HJyA/IEhUVFBNYW5hZ2VyUG9zdFJlcXVlc3QuU1RSSU5HIDogSFRUUE1hbmFnZXJQb3N0UmVxdWVzdC5KU09OXHJcbiAgICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgICByZXF1ZXN0LnBhcmFtZXRlcnMgPSBwYXJhbWV0ZXJzO1xyXG5cclxuICAgICAgICAgICAgcmVxdWVzdC5zdWNjZXNzQ2FsbGJhY2sgPSAocmVzcG9uc2U6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICByZXNvbHZlKHJlc3BvbnNlKTtcclxuICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgIHJlcXVlc3QuZXJyb3JDYWxsYmFjayA9IChlcnJvck1zZywgZXJyb3JDb2RlLCByZXNwb25zZSkgPT4ge1xyXG5cclxuICAgICAgICAgICAgICAgIGlmKG9wdGlvbnMuaGFuZGxlRXJyb3JzKXtcclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2hvd0Vycm9yRGlhbG9nKGVycm9yTXNnLCBlcnJvckNvZGUsIHJlc3BvbnNlKTtcclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcihlcnJvck1zZyArICcgJyArIGVycm9yQ29kZSArICcgJyArIHJlc3BvbnNlKSk7XHJcbiAgICAgICAgICAgICAgICB9ICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgcmVxdWVzdC5maW5hbGx5Q2FsbGJhY2sgPSAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIGlmKG9wdGlvbnMuYnVzeVN0YXRlKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2UucmVtb3ZlTW9kYWxCdXN5U3RhdGUoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIHRoaXMuaHR0cE1hbmFnZXIuZXhlY3V0ZShyZXF1ZXN0KTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIFxyXG4gICAgXHJcbiAgICAvKipcclxuICAgICAqIFBlcmZvcm1zIGEgcmVxdWVzdCB0byBjaGFpbiBzZXZlcmFsIGFwaSBjYWxscyBpbnRvIGEgc2luZ2xlIGh0dHAgcmVxdWVzdCwgdmlhIHRoZSBjaGFpbiBzZXJ2aWNlcyBtZWNoYW5pc20gb2YgdGhlIHR1cmJvZnJhbWV3b3JrIEFQSS5cclxuICAgICAqIFJldHVybnMgYSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCBhbiBhcnJheSBvZiByZXNwb25zZSBvYmplY3RzLiBPbmUgZm9yIGVhY2ggb2YgdGhlIHJlcXVlc3QgY2FsbHMuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIGFwaVBhdGggLSBBIHJlbGF0aXZlIFVSTCAoYmFzZWQgb24gdGhlIGRlZmluZWQgYmFzZSByb290IHVybCkgdGhhdCBkZWZpbmVzIHRoZSBwYXRoIHRvIHRoZSByb290IG9mIHRoZSBjaGFpbiBzZXJ2aWNlcyBjYWxsLlxyXG4gICAgICogICAgICAgIEZvciBleGFtcGxlOiAndHVyYm9zaXRlL2NoYWluL2NoYWluLXNlcnZpY2VzJ1xyXG4gICAgICogQHBhcmFtIHNlcnZpY2VzIC0gQW4gYXJyYXkgb2Ygb2JqZWN0cywgd2VyZSBlYWNoIG9iamVjdCBjb250YWlucyBhIHZhbGlkIHN0cnVjdHVyZSBmb3IgdGhlIGNoYWluIHNlcnZpY2VzIGNhbGwuIFxyXG4gICAgICogICAgICAgIFRva2VuIHBhcmFtZXRlciBpcyBub3QgbmVjZXNzYXJ5LCBpdCBpcyBhdXRvbWF0aWNhbGx5IGFwcGVuZGVkXHJcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyBBbiBvYmplY3QgZGVmaW5pbmcgc2V2ZXJhbCBvcHRpb25zIGZvciB0aGUgcmVxdWVzdDpcclxuICAgICAqICAgICAgICBidXN5U3RhdGU6IEVuYWJsZXMgb3IgZGlzYWJsZXMgdGhlIGJ1c3kgc3RhdGUgdG8gbG9jayB1c2VyIGludGVyYWN0aW9uIHdoaWxlIHBlcmZvcm1pbmcgdGhlIGh0dHAgY2FsbHMuIEVuYWJsZWQgYnkgZGVmYXVsdFxyXG4gICAgICogICAgICAgIGhhbmRsZUVycm9yczogRW5hYmxlZCBieSBkZWZhdWx0LiBJZiBzZXQgdG8gdHJ1ZSwgYW4gZXJyb3IgZGlhbG9nIHdpbGwgYmUgYXV0b21hdGljYWxseSBzaG93biB3aGVuIHRoZSBjYWxsIGZhaWxzLlxyXG4gICAgICogICAgICAgIElmIHNldCB0byBmYWxzZSwgdGhlIHByb21pc2Ugd2lsbCBnZW5lcmF0ZSBhIHJlamVjdCBlcnJvciB0aGF0IG11c3QgYmUgaGFuZGxlZCBieSBvdXIgY29kZS5cclxuICAgICAqIFxyXG4gICAgICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgcmVzcG9uc2UgZGF0YSBjb3JyZWN0bHkgcGFyc2VkIGlmIHRoZSByZXF1ZXN0IGlzIHN1Y2Nlc3NmdWwsIG9yIHJlamVjdHMgXHJcbiAgICAgKiAgICAgICAgICB3aXRoIGFuIGVycm9yIChjb250YWluaW5nIGFsbCB0aGUgZXJyb3IgcmVzcG9uc2UgZGV0YWlscykgaWYgdGhlIHJlcXVlc3QgZmFpbHMuXHJcbiAgICAgKi9cclxuICAgIGNhbGxDaGFpbihhcGlQYXRoOnN0cmluZywgc2VydmljZXM6e31bXSwgb3B0aW9uczoge2J1c3lTdGF0ZT86Ym9vbGVhbiwgaGFuZGxlRXJyb3JzPzpib29sZWFufSA9IHt9KXtcclxuICAgIFxyXG4gICAgICAgIC8vIFNldCB0aGUgZGVmYXVsdCB2YWx1ZXMgZm9yIG5vbiBzcGVjaWZpZWQgcHJvcGVydGllc1xyXG4gICAgICAgIG9wdGlvbnMuYnVzeVN0YXRlID0gb3B0aW9ucy5idXN5U3RhdGUgPz8gdHJ1ZTtcclxuICAgICAgICBvcHRpb25zLmhhbmRsZUVycm9ycyA9IG9wdGlvbnMuaGFuZGxlRXJyb3JzID8/IHRydWU7XHJcbiAgICAgICAgXHJcbiAgICAgICAgaWYob3B0aW9ucy5idXN5U3RhdGUpe1xyXG4gICAgICAgICAgIFxyXG4gICAgICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5hZGRNb2RhbEJ1c3lTdGF0ZSgpOyBcclxuICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmU6KHI6YW55KSA9PiBhbnksIHJlamVjdCkgPT4ge1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgY29uc3QgcmVxdWVzdCA9IG5ldyBIVFRQTWFuYWdlclBvc3RSZXF1ZXN0KGFwaVBhdGgsIEhUVFBNYW5hZ2VyUG9zdFJlcXVlc3QuSlNPTik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICByZXF1ZXN0Lmlnbm9yZUdsb2JhbFBvc3RQYXJhbXMgPSB0cnVlOyAgICAgIFxyXG5cclxuICAgICAgICAgICAgcmVxdWVzdC5wYXJhbWV0ZXJzID0geyBzZXJ2aWNlczogc2VydmljZXMgfTtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIHJlcXVlc3Quc3VjY2Vzc0NhbGxiYWNrID0gKHJlc3BvbnNlOmFueVtdKSA9PiB7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgcmVzb2x2ZShyZXNwb25zZSk7XHJcbiAgICAgICAgICAgIH07ICAgICAgXHJcblxyXG4gICAgICAgICAgICByZXF1ZXN0LmVycm9yQ2FsbGJhY2sgPSAoZXJyb3JNc2csIGVycm9yQ29kZSwgcmVzcG9uc2UpID0+IHtcclxuXHJcbiAgICAgICAgICAgICAgICBpZihvcHRpb25zLmhhbmRsZUVycm9ycyl7XHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3dFcnJvckRpYWxvZyhlcnJvck1zZywgZXJyb3JDb2RlLCByZXNwb25zZSk7ICAgIFxyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICByZWplY3QobmV3IEVycm9yKGVycm9yTXNnICsgJyAnICsgZXJyb3JDb2RlICsgJyAnICsgcmVzcG9uc2UpKTtcclxuICAgICAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICByZXF1ZXN0LmZpbmFsbHlDYWxsYmFjayA9ICgpID0+IHtcclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgaWYob3B0aW9ucy5idXN5U3RhdGUpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5yZW1vdmVNb2RhbEJ1c3lTdGF0ZSgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgdGhpcy5odHRwTWFuYWdlci5leGVjdXRlKHJlcXVlc3QpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgXHJcbiAgICBcclxuICAgIC8qKlxyXG4gICAgICogQXV4IG1ldGhvZCB0byBzaG93IGFuIGVycm9yIGRpYWxvZyB3aGVuIGEgcmVxdWVzdCBmYWlscyBhbmQgZXJyb3IgaGFuZGxpbmcgaXMgZW5hYmxlZFxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIHNob3dFcnJvckRpYWxvZyhlcnJvck1zZzpzdHJpbmcsIGVycm9yQ29kZTpudW1iZXIsIHJlc3BvbnNlOmFueSl7XHJcbiAgICAgICAgXHJcbiAgICAgICAgZXJyb3JNc2cgPSBlcnJvck1zZyArICdcXG5cXG4nICsgcmVzcG9uc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICBpZihTdHJpbmdVdGlscy5pc0VtcHR5KGVycm9yTXNnKSl7XHJcbiAgICAgICAgXHJcbiAgICAgICAgICAgIGVycm9yTXNnID0gJ1Vua25vd24gZXJyb3IuIE1ha2Ugc3VyZSBJbnRlcm5ldCBjb25uZWN0aW9uIGlzIGF2YWlsYWJsZSc7ICAgIFxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLmFkZERpYWxvZyhEaWFsb2dFcnJvckNvbXBvbmVudCxcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgd2lkdGg6JzUwdncnLFxyXG4gICAgICAgICAgICAgICAgdGV4dHM6IFsnRXJyb3I6ICcgKyBlcnJvckNvZGUsIGVycm9yTXNnXSxcclxuICAgICAgICAgICAgICAgIG9wdGlvbnM6IFsnT2snXVxyXG4gICAgICAgICAgICB9KTsgXHJcbiAgICB9XHJcbiAgICBcclxuICAgIFxyXG4gICAgLyoqXHJcbiAgICAgKiBQZXJmb3JtIHRoZSBsb2dvdXQgZm9yIHRoZSBjdXJyZW50bHkgbG9nZ2VkIHVzZXJcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyBBbiBvYmplY3QgZGVmaW5pbmcgc2V2ZXJhbCBvcHRpb25zIGZvciB0aGUgcmVxdWVzdDpcclxuICAgICAqICAgICAgICBoYW5kbGVFcnJvcnM6IEVuYWJsZWQgYnkgZGVmYXVsdC4gSWYgc2V0IHRvIHRydWUsIGFuIGVycm9yIGRpYWxvZyB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgc2hvd24gd2hlbiB0aGUgY2FsbCBmYWlscy5cclxuICAgICAqICAgICAgICBJZiBzZXQgdG8gZmFsc2UsIHRoZSBwcm9taXNlIHdpbGwgZ2VuZXJhdGUgYSByZWplY3QgZXJyb3IgdGhhdCBtdXN0IGJlIGhhbmRsZWQgYnkgb3VyIGNvZGUuXHJcbiAgICAgKiBcclxuICAgICAqIEByZXR1cm5zIEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIGNvcnJlY3RseSBpZiB0aGUgbG9nb3V0IGlzIGNvcnJlY3QsIG9yIHJlamVjdHMgd2l0aCBhbiBlcnJvciAoY29udGFpbmluZyBhbGwgdGhlIGVycm9yIFxyXG4gICAgICogICAgICAgICAgcmVzcG9uc2UgZGV0YWlscykgaWYgdGhlIHJlcXVlc3QgZmFpbHMuXHJcbiAgICAgKi9cclxuICAgIGxvZ291dChvcHRpb25zOiB7aGFuZGxlRXJyb3JzPzpib29sZWFufSA9IHt9KSB7XHJcbiAgICAgICAgXHJcbiAgICAgICAgLy8gU2V0IHRoZSBkZWZhdWx0IHZhbHVlcyBmb3Igbm9uIHNwZWNpZmllZCBwcm9wZXJ0aWVzXHJcbiAgICAgICAgb3B0aW9ucy5oYW5kbGVFcnJvcnMgPSBvcHRpb25zLmhhbmRsZUVycm9ycyA/PyB0cnVlO1xyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLmFkZE1vZGFsQnVzeVN0YXRlKCk7IFxyXG4gICAgICAgIFxyXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgY29uc3QgcmVxdWVzdCA9IG5ldyBIVFRQTWFuYWdlclBvc3RSZXF1ZXN0KHRoaXMubG9nT3V0U2VydmljZVVSSSk7XHJcbiAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIHJlcXVlc3QucGFyYW1ldGVycyA9IHsgdG9rZW46IHRoaXMuX3Rva2VuIH07XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICByZXF1ZXN0LnN1Y2Nlc3NDYWxsYmFjayA9ICgpID0+IHtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICB0aGlzLl9jbGVhclVzZXJBbmRUb2tlbigpO1xyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICByZXNvbHZlKHVuZGVmaW5lZCk7XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICByZXF1ZXN0LmVycm9yQ2FsbGJhY2sgPSAoZXJyb3JNc2csIGVycm9yQ29kZSwgcmVzcG9uc2UpID0+IHtcclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgaWYob3B0aW9ucy5oYW5kbGVFcnJvcnMpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2hvd0Vycm9yRGlhbG9nKGVycm9yTXNnLCBlcnJvckNvZGUsIHJlc3BvbnNlKTsgICAgXHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoZXJyb3JNc2cgKyAnICcgKyBlcnJvckNvZGUgKyAnICcgKyByZXNwb25zZSkpO1xyXG4gICAgICAgICAgICAgICAgfSAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgcmVxdWVzdC5maW5hbGx5Q2FsbGJhY2sgPSAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2UucmVtb3ZlTW9kYWxCdXN5U3RhdGUoKTtcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICBcclxuICAgICAgICAgICAgdGhpcy5odHRwTWFuYWdlci5leGVjdXRlKHJlcXVlc3QpO1xyXG4gICAgICAgIH0pOyBcclxuICAgIH1cclxuICAgIFxyXG4gICAgXHJcbiAgICAvKipcclxuICAgICAqIEF1eCBtZXRob3QgdG8gY2xlYXIgYWxsIHRoZSBjdXJyZW50bHkgbG9nZ2VkIHVzZXIgZGF0YVxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIF9jbGVhclVzZXJBbmRUb2tlbigpe1xyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMudXNlck5hbWUgPSAnJztcclxuICAgICAgICB0aGlzLnBhc3N3b3JkID0gJyc7XHJcbiAgICAgICAgdGhpcy5faXNMb2dnZWQgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLl90b2tlbiA9ICcnO1xyXG4gICAgICAgIHRoaXMuaHR0cE1hbmFnZXIuc2V0R2xvYmFsUG9zdFBhcmFtKCd0b2tlbicsICctJyk7IFxyXG4gICAgfVxyXG59XHJcbiJdfQ==
@@ -8,14 +8,16 @@
8
8
  */
9
9
  import { Injectable } from '@angular/core';
10
10
  import { SingletoneStrictClass } from '../model/classes/SingletoneStrictClass';
11
+ import { animate, style } from '@angular/animations';
11
12
  import * as i0 from "@angular/core";
13
+ import * as i1 from "@angular/animations";
12
14
  /**
13
15
  * Manages adding, removing and manipulating the application views
14
16
  */
15
17
  export class ViewsService extends SingletoneStrictClass {
16
- constructor(componentFactoryResolver) {
18
+ constructor(animationBuilder) {
17
19
  super(ViewsService);
18
- this.componentFactoryResolver = componentFactoryResolver;
20
+ this.animationBuilder = animationBuilder;
19
21
  /**
20
22
  * See getter method for docs
21
23
  */
@@ -24,6 +26,10 @@ export class ViewsService extends SingletoneStrictClass {
24
26
  * See setter method for docs
25
27
  */
26
28
  this._viewContainerRef = null;
29
+ /**
30
+ * Contains the reference to the currently loaded view component
31
+ */
32
+ this._currentComponentRef = null;
27
33
  }
28
34
  /**
29
35
  * Tells if there's any view currently loaded on the application views container
@@ -53,32 +59,71 @@ export class ViewsService extends SingletoneStrictClass {
53
59
  *
54
60
  * @return The instance of the newly added and created view.
55
61
  */
56
- pushView(view) {
62
+ async pushView(view) {
63
+ this.verifyViewsContainerExist();
64
+ // If the loaded view is the same as the specified one, we will do nothing
65
+ if (this._loadedViewClass === view) {
66
+ return this._currentComponentRef;
67
+ }
57
68
  // If a view is already loaded, we will unload it first
58
69
  if (this._loadedViewClass !== null) {
59
- // If the loaded view is the same as the specified one, we will do nothing
60
- if (this._loadedViewClass === view) {
61
- return;
62
- }
63
- this.popView();
70
+ await this.removeCurrentView();
64
71
  }
65
- this.verifyViewsContainerExist();
66
- const factory = this.componentFactoryResolver.resolveComponentFactory(view);
67
- const componentRef = this._viewContainerRef.createComponent(factory);
68
- componentRef.changeDetectorRef.detectChanges();
69
- this._loadedViewClass = view;
70
- return componentRef;
72
+ // Create the new view
73
+ const newComponentRef = this._viewContainerRef.createComponent(view);
74
+ newComponentRef.changeDetectorRef.detectChanges();
75
+ // Set initial opacity to 0
76
+ newComponentRef.location.nativeElement.style.opacity = '0';
77
+ // Fade in the new view
78
+ const fadeInPlayer = this.animationBuilder.build([
79
+ style({ opacity: 0 }),
80
+ animate('300ms ease', style({ opacity: 1 }))
81
+ ]).create(newComponentRef.location.nativeElement);
82
+ await new Promise((resolve) => {
83
+ fadeInPlayer.onDone(() => {
84
+ this._currentComponentRef = newComponentRef;
85
+ this._loadedViewClass = view;
86
+ resolve();
87
+ });
88
+ fadeInPlayer.play();
89
+ });
90
+ return this._currentComponentRef;
71
91
  }
72
92
  /**
73
93
  * Delete the currently loaded view from the views container, and leave it empty.
74
94
  * If no view is currently loaded, this method will do nothing
75
95
  */
76
- popView() {
96
+ async popView() {
77
97
  this.verifyViewsContainerExist();
78
- if (this._loadedViewClass !== null) {
79
- this._viewContainerRef.clear();
98
+ if (this._loadedViewClass !== null && this._currentComponentRef) {
99
+ await this.removeCurrentView();
80
100
  }
81
- this._loadedViewClass = null;
101
+ }
102
+ /**
103
+ * Aux method to remove the currently loaded view from the views container using a promise
104
+ */
105
+ removeCurrentView() {
106
+ return new Promise((resolve) => {
107
+ if (this._currentComponentRef) {
108
+ const element = this._currentComponentRef.location.nativeElement;
109
+ const fadeOutPlayer = this.animationBuilder.build([
110
+ style({ opacity: 1 }),
111
+ animate('300ms ease', style({ opacity: 0 }))
112
+ ]).create(element);
113
+ fadeOutPlayer.onDone(() => {
114
+ if (this._viewContainerRef !== null) {
115
+ this._viewContainerRef.clear();
116
+ }
117
+ this._currentComponentRef = null;
118
+ this._loadedViewClass = null;
119
+ resolve();
120
+ });
121
+ fadeOutPlayer.play();
122
+ }
123
+ else {
124
+ resolve();
125
+ }
126
+ });
82
127
  }
83
128
  /**
84
129
  * Auxiliary method to test if the views container instance is available on the application
@@ -88,7 +133,7 @@ export class ViewsService extends SingletoneStrictClass {
88
133
  throw new Error('Views container not defined. Please declare a <views-container> element in your application');
89
134
  }
90
135
  }
91
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.8", ngImport: i0, type: ViewsService, deps: [{ token: i0.ComponentFactoryResolver }], target: i0.ɵɵFactoryTarget.Injectable }); }
136
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.8", ngImport: i0, type: ViewsService, deps: [{ token: i1.AnimationBuilder }], target: i0.ɵɵFactoryTarget.Injectable }); }
92
137
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.0.8", ngImport: i0, type: ViewsService, providedIn: 'root' }); }
93
138
  }
94
139
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.8", ngImport: i0, type: ViewsService, decorators: [{
@@ -96,5 +141,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.8", ngImpor
96
141
  args: [{
97
142
  providedIn: 'root',
98
143
  }]
99
- }], ctorParameters: () => [{ type: i0.ComponentFactoryResolver }] });
100
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlld3Muc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3R1cmJvZ3VpLWFuZ3VsYXIvc3JjL21haW4vY29udHJvbGxlci92aWV3cy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7O0dBT0c7QUFFSCxPQUFPLEVBQTBCLFVBQVUsRUFBNEIsTUFBTSxlQUFlLENBQUM7QUFFN0YsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sd0NBQXdDLENBQUM7O0FBRy9FOztHQUVHO0FBSUgsTUFBTSxPQUFPLFlBQWEsU0FBUSxxQkFBcUI7SUFlbkQsWUFBNkIsd0JBQWtEO1FBRWpGLEtBQUssQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUZXLDZCQUF3QixHQUF4Qix3QkFBd0IsQ0FBMEI7UUFaL0U7O1dBRUc7UUFDSyxxQkFBZ0IsR0FBc0IsSUFBSSxDQUFDO1FBR25EOztXQUVHO1FBQ0ssc0JBQWlCLEdBQTRCLElBQUksQ0FBQztJQU0xRCxDQUFDO0lBR0Q7O09BRUc7SUFDSCxJQUFJLFlBQVk7UUFFWixPQUFPLElBQUksQ0FBQyxnQkFBZ0IsS0FBSyxJQUFJLENBQUM7SUFDMUMsQ0FBQztJQUdEOzs7OztPQUtHO0lBQ0gsSUFBSSxnQkFBZ0IsQ0FBQyxHQUE0QjtRQUU3QyxJQUFJLEdBQUcsS0FBSyxJQUFJLElBQUksSUFBSSxDQUFDLGlCQUFpQixLQUFLLElBQUksRUFBRTtZQUVqRCxNQUFNLElBQUksS0FBSyxDQUFDLCtGQUErRixDQUFDLENBQUM7U0FDcEg7UUFFRCxJQUFJLENBQUMsaUJBQWlCLEdBQUcsR0FBRyxDQUFDO0lBQ2pDLENBQUM7SUFHRDs7Ozs7Ozs7O09BU0c7SUFDSCxRQUFRLENBQUMsSUFBZ0I7UUFFckIsdURBQXVEO1FBQ3ZELElBQUksSUFBSSxDQUFDLGdCQUFnQixLQUFLLElBQUksRUFBRTtZQUVoQywwRUFBMEU7WUFDMUUsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLEtBQUssSUFBSSxFQUFFO2dCQUVoQyxPQUFPO2FBQ1Y7WUFFRCxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7U0FDbEI7UUFFRCxJQUFJLENBQUMseUJBQXlCLEVBQUUsQ0FBQztRQUVqQyxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsd0JBQXdCLENBQUMsdUJBQXVCLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFNUUsTUFBTSxZQUFZLEdBQUksSUFBSSxDQUFDLGlCQUFzQyxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUUzRixZQUFZLENBQUMsaUJBQWlCLENBQUMsYUFBYSxFQUFFLENBQUM7UUFFL0MsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQztRQUU3QixPQUFPLFlBQVksQ0FBQztJQUN4QixDQUFDO0lBR0Q7OztPQUdHO0lBQ0gsT0FBTztRQUVILElBQUksQ0FBQyx5QkFBeUIsRUFBRSxDQUFDO1FBRWpDLElBQUksSUFBSSxDQUFDLGdCQUFnQixLQUFLLElBQUksRUFBRTtZQUUvQixJQUFJLENBQUMsaUJBQXNDLENBQUMsS0FBSyxFQUFFLENBQUM7U0FDeEQ7UUFFRCxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDO0lBQ2pDLENBQUM7SUFHRDs7T0FFRztJQUNLLHlCQUF5QjtRQUU3QixJQUFJLElBQUksQ0FBQyxpQkFBaUIsS0FBSyxJQUFJLEVBQUU7WUFFakMsTUFBTSxJQUFJLEtBQUssQ0FBQyw2RkFBNkYsQ0FBQyxDQUFDO1NBQ2xIO0lBQ0wsQ0FBQzs4R0EvR1EsWUFBWTtrSEFBWixZQUFZLGNBRlgsTUFBTTs7MkZBRVAsWUFBWTtrQkFIeEIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogVHVyYm9HVUkgaXMgQSBsaWJyYXJ5IHRoYXQgaGVscHMgd2l0aCB0aGUgbW9zdCBjb21tb24gYW5kIGdlbmVyaWMgVUkgZWxlbWVudHMgYW5kIGZ1bmN0aW9uYWxpdGllc1xyXG4gKlxyXG4gKiBXZWJzaXRlIDogLT4gaHR0cDovL3d3dy50dXJib2d1aS5vcmdcclxuICogTGljZW5zZSA6IC0+IExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAuIFlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cclxuICogTGljZW5zZSBVcmwgOiAtPiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcclxuICogQ29weVJpZ2h0IDogLT4gQ29weXJpZ2h0IDIwMTggRWRlcnRvbmUgQWR2YW5kZWQgU29sdXRpb25zLiBodHRwczovL3d3dy5lZGVydG9uZS5jb21cclxuICovXHJcblxyXG5pbXBvcnQgeyBUeXBlLCBWaWV3Q29udGFpbmVyUmVmLCBJbmplY3RhYmxlLCBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgVmlldyB9IGZyb20gJy4uL21vZGVsL2NsYXNzZXMvVmlldyc7XHJcbmltcG9ydCB7IFNpbmdsZXRvbmVTdHJpY3RDbGFzcyB9IGZyb20gJy4uL21vZGVsL2NsYXNzZXMvU2luZ2xldG9uZVN0cmljdENsYXNzJztcblxyXG5cclxuLyoqXHJcbiAqIE1hbmFnZXMgYWRkaW5nLCByZW1vdmluZyBhbmQgbWFuaXB1bGF0aW5nIHRoZSBhcHBsaWNhdGlvbiB2aWV3c1xyXG4gKi9cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290JyxcclxufSlcclxuZXhwb3J0IGNsYXNzIFZpZXdzU2VydmljZSBleHRlbmRzIFNpbmdsZXRvbmVTdHJpY3RDbGFzcyB7XHJcblxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2VlIGdldHRlciBtZXRob2QgZm9yIGRvY3NcclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBfbG9hZGVkVmlld0NsYXNzOiBUeXBlPFZpZXc+IHwgbnVsbCA9IG51bGw7XHJcblxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2VlIHNldHRlciBtZXRob2QgZm9yIGRvY3NcclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBfdmlld0NvbnRhaW5lclJlZjogVmlld0NvbnRhaW5lclJlZiB8IG51bGwgPSBudWxsO1xyXG5cclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IGNvbXBvbmVudEZhY3RvcnlSZXNvbHZlcjogQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyKSB7XHJcblxyXG5cdFx0c3VwZXIoVmlld3NTZXJ2aWNlKTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUZWxscyBpZiB0aGVyZSdzIGFueSB2aWV3IGN1cnJlbnRseSBsb2FkZWQgb24gdGhlIGFwcGxpY2F0aW9uIHZpZXdzIGNvbnRhaW5lclxyXG4gICAgICovXHJcbiAgICBnZXQgaXNWaWV3TG9hZGVkKCkge1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5fbG9hZGVkVmlld0NsYXNzICE9PSBudWxsO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvKipcclxuICAgICAqIFN0b3JlcyBhIHJlZmVyZW5jZSB0byB0aGUgdmlzdWFsIGVsZW1lbnQgdGhhdCB3aWxsIGJlIHVzZWQgYXMgdGhlIGNvbnRhaW5lciBmb3IgYWxsIHRoZSB2aWV3cy5cclxuICAgICAqIFRoaXMgaXMgYXV0b21hdGljYWxseSBhc3NpZ25lZCBieSB0aGUgdGctdmlld3MtY29udGFpbmVyIGNvbXBvbmVudCBvbmNlIGl0IGlzIGNyZWF0ZWQuXHJcbiAgICAgKlxyXG4gICAgICogQHNlZSBWaWV3c0NvbnRhaW5lckNvbXBvbmVudCBmb3IgbW9yZSBpbmZvcm1hdGlvblxyXG4gICAgICovXHJcbiAgICBzZXQgdmlld0NvbnRhaW5lclJlZihyZWY6IFZpZXdDb250YWluZXJSZWYgfCBudWxsKSB7XHJcblxyXG4gICAgICAgIGlmIChyZWYgIT09IG51bGwgJiYgdGhpcy5fdmlld0NvbnRhaW5lclJlZiAhPT0gbnVsbCkge1xyXG5cclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdWaWV3cyBjb250YWluZXIgYWxyZWFkeSBkZWZpbmVkLiBPbmx5IG9uZSB2aWV3cyBjb250YWluZXIgZWxlbWVudCBjYW4gZXhpc3Qgb24gYW4gYXBwbGljYXRpb24nKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuX3ZpZXdDb250YWluZXJSZWYgPSByZWY7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ3JlYXRlIGEgbmV3IHZpZXcgaW5zdGFuY2Ugd2l0aCB0aGUgc3BlY2lmaWVkIHR5cGUgYW5kIGFkZCBpdCB0byB0aGUgY3VycmVudCBhcHBsaWNhdGlvbiB2aWV3cyBjb250YWluZXIuIEFueSBjdXJyZW50bHkgbG9hZGVkIFxyXG4gICAgICogdmlldyB3aWxsIGJlIHJlbW92ZWRcclxuICAgICAqXHJcbiAgICAgKiBNYWtlIHN1cmUgdGhpcyBtZXRob2QgaXMgY2FsbGVkIHdoZW4gYWxsIHRoZSB2aXN1YWwgY29tcG9uZW50cyBvZiB0aGUgYXBwbGljYXRpb24gaGF2ZSBiZWVuIGNyZWF0ZWQgKG5nQWZ0ZXJWaWV3SW5pdClcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gdmlldyBUaGUgY2xhc3NuYW1lIGZvciB0aGUgdmlldyB0aGF0IHdlIHdhbnQgdG8gY3JlYXRlIGFuZCBhZGQgdG8gdGhlIHZpZXdzIGNvbnRhaW5lciAobXVzdCBleHRlbmQgVmlldyBiYXNlIGNsYXNzKS5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIFRoZSBpbnN0YW5jZSBvZiB0aGUgbmV3bHkgYWRkZWQgYW5kIGNyZWF0ZWQgdmlldy4gXHJcbiAgICAgKi9cclxuICAgIHB1c2hWaWV3KHZpZXc6IFR5cGU8Vmlldz4pIHtcclxuXHJcbiAgICAgICAgLy8gSWYgYSB2aWV3IGlzIGFscmVhZHkgbG9hZGVkLCB3ZSB3aWxsIHVubG9hZCBpdCBmaXJzdFxyXG4gICAgICAgIGlmICh0aGlzLl9sb2FkZWRWaWV3Q2xhc3MgIT09IG51bGwpIHtcclxuXHJcbiAgICAgICAgICAgIC8vIElmIHRoZSBsb2FkZWQgdmlldyBpcyB0aGUgc2FtZSBhcyB0aGUgc3BlY2lmaWVkIG9uZSwgd2Ugd2lsbCBkbyBub3RoaW5nXHJcbiAgICAgICAgICAgIGlmICh0aGlzLl9sb2FkZWRWaWV3Q2xhc3MgPT09IHZpZXcpIHtcclxuXHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHRoaXMucG9wVmlldygpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy52ZXJpZnlWaWV3c0NvbnRhaW5lckV4aXN0KCk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgY29uc3QgZmFjdG9yeSA9IHRoaXMuY29tcG9uZW50RmFjdG9yeVJlc29sdmVyLnJlc29sdmVDb21wb25lbnRGYWN0b3J5KHZpZXcpO1xyXG5cclxuICAgICAgICBjb25zdCBjb21wb25lbnRSZWYgPSAodGhpcy5fdmlld0NvbnRhaW5lclJlZiBhcyBWaWV3Q29udGFpbmVyUmVmKS5jcmVhdGVDb21wb25lbnQoZmFjdG9yeSk7XHJcblxyXG4gICAgICAgIGNvbXBvbmVudFJlZi5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcblxyXG4gICAgICAgIHRoaXMuX2xvYWRlZFZpZXdDbGFzcyA9IHZpZXc7XHJcblxyXG4gICAgICAgIHJldHVybiBjb21wb25lbnRSZWY7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRGVsZXRlIHRoZSBjdXJyZW50bHkgbG9hZGVkIHZpZXcgZnJvbSB0aGUgdmlld3MgY29udGFpbmVyLCBhbmQgbGVhdmUgaXQgZW1wdHkuXHJcbiAgICAgKiBJZiBubyB2aWV3IGlzIGN1cnJlbnRseSBsb2FkZWQsIHRoaXMgbWV0aG9kIHdpbGwgZG8gbm90aGluZ1xyXG4gICAgICovXHJcbiAgICBwb3BWaWV3KCkge1xyXG5cclxuICAgICAgICB0aGlzLnZlcmlmeVZpZXdzQ29udGFpbmVyRXhpc3QoKTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuX2xvYWRlZFZpZXdDbGFzcyAhPT0gbnVsbCkge1xyXG5cclxuICAgICAgICAgICAgKHRoaXMuX3ZpZXdDb250YWluZXJSZWYgYXMgVmlld0NvbnRhaW5lclJlZikuY2xlYXIoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuX2xvYWRlZFZpZXdDbGFzcyA9IG51bGw7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQXV4aWxpYXJ5IG1ldGhvZCB0byB0ZXN0IGlmIHRoZSB2aWV3cyBjb250YWluZXIgaW5zdGFuY2UgaXMgYXZhaWxhYmxlIG9uIHRoZSBhcHBsaWNhdGlvblxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIHZlcmlmeVZpZXdzQ29udGFpbmVyRXhpc3QoKSB7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLl92aWV3Q29udGFpbmVyUmVmID09PSBudWxsKSB7XHJcblxyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1ZpZXdzIGNvbnRhaW5lciBub3QgZGVmaW5lZC4gUGxlYXNlIGRlY2xhcmUgYSA8dmlld3MtY29udGFpbmVyPiBlbGVtZW50IGluIHlvdXIgYXBwbGljYXRpb24nKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuIl19
144
+ }], ctorParameters: () => [{ type: i1.AnimationBuilder }] });
145
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlld3Muc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3R1cmJvZ3VpLWFuZ3VsYXIvc3JjL21haW4vY29udHJvbGxlci92aWV3cy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7O0dBT0c7QUFFSCxPQUFPLEVBQTBCLFVBQVUsRUFBZ0IsTUFBTSxlQUFlLENBQUM7QUFFakYsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFDL0UsT0FBTyxFQUFvQixPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0scUJBQXFCLENBQUM7OztBQUd2RTs7R0FFRztBQUlILE1BQU0sT0FBTyxZQUFhLFNBQVEscUJBQXFCO0lBcUJuRCxZQUFvQixnQkFBa0M7UUFFeEQsS0FBSyxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBRkUscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQWxCdEQ7O1dBRUc7UUFDSyxxQkFBZ0IsR0FBc0IsSUFBSSxDQUFDO1FBR25EOztXQUVHO1FBQ0ssc0JBQWlCLEdBQTRCLElBQUksQ0FBQztRQUcxRDs7V0FFRztRQUNLLHlCQUFvQixHQUE4QixJQUFJLENBQUM7SUFNL0QsQ0FBQztJQUdEOztPQUVHO0lBQ0gsSUFBSSxZQUFZO1FBRVosT0FBTyxJQUFJLENBQUMsZ0JBQWdCLEtBQUssSUFBSSxDQUFDO0lBQzFDLENBQUM7SUFHRDs7Ozs7T0FLRztJQUNILElBQUksZ0JBQWdCLENBQUMsR0FBNEI7UUFFN0MsSUFBSSxHQUFHLEtBQUssSUFBSSxJQUFJLElBQUksQ0FBQyxpQkFBaUIsS0FBSyxJQUFJLEVBQUU7WUFFakQsTUFBTSxJQUFJLEtBQUssQ0FBQywrRkFBK0YsQ0FBQyxDQUFDO1NBQ3BIO1FBRUQsSUFBSSxDQUFDLGlCQUFpQixHQUFHLEdBQUcsQ0FBQztJQUNqQyxDQUFDO0lBR0Q7Ozs7Ozs7OztPQVNHO0lBQ0gsS0FBSyxDQUFD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QztnQkFFSCxhQUFhLENBQUMsSUFBSSxFQUFFLENBQUM7YUFFeEI7aUJBQU07Z0JBRUgsT0FBTyxFQUFFLENBQUM7YUFDYjtRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUdEOztPQUVHO0lBQ0sseUJBQXlCO1FBRTdCLElBQUksSUFBSSxDQUFDLGlCQUFpQixLQUFLLElBQUksRUFBRTtZQUVqQyxNQUFNLElBQUksS0FBSyxDQUFDLDZGQUE2RixDQUFDLENBQUM7U0FDbEg7SUFDTCxDQUFDOzhHQXZLUSxZQUFZO2tIQUFaLFlBQVksY0FGWCxNQUFNOzsyRkFFUCxZQUFZO2tCQUh4QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBUdXJib0dVSSBpcyBBIGxpYnJhcnkgdGhhdCBoZWxwcyB3aXRoIHRoZSBtb3N0IGNvbW1vbiBhbmQgZ2VuZXJpYyBVSSBlbGVtZW50cyBhbmQgZnVuY3Rpb25hbGl0aWVzXHJcbiAqXHJcbiAqIFdlYnNpdGUgOiAtPiBodHRwOi8vd3d3LnR1cmJvZ3VpLm9yZ1xyXG4gKiBMaWNlbnNlIDogLT4gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMC4gWW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxyXG4gKiBMaWNlbnNlIFVybCA6IC0+IGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxyXG4gKiBDb3B5UmlnaHQgOiAtPiBDb3B5cmlnaHQgMjAxOCBFZGVydG9uZSBBZHZhbmRlZCBTb2x1dGlvbnMuIGh0dHBzOi8vd3d3LmVkZXJ0b25lLmNvbVxyXG4gKi9cclxuXHJcbmltcG9ydCB7IFR5cGUsIFZpZXdDb250YWluZXJSZWYsIEluamVjdGFibGUsIENvbXBvbmVudFJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBWaWV3IH0gZnJvbSAnLi4vbW9kZWwvY2xhc3Nlcy9WaWV3JztcclxuaW1wb3J0IHsgU2luZ2xldG9uZVN0cmljdENsYXNzIH0gZnJvbSAnLi4vbW9kZWwvY2xhc3Nlcy9TaW5nbGV0b25lU3RyaWN0Q2xhc3MnO1xuaW1wb3J0IHsgQW5pbWF0aW9uQnVpbGRlciwgYW5pbWF0ZSwgc3R5bGUgfSBmcm9tICdAYW5ndWxhci9hbmltYXRpb25zJztcblxyXG5cclxuLyoqXHJcbiAqIE1hbmFnZXMgYWRkaW5nLCByZW1vdmluZyBhbmQgbWFuaXB1bGF0aW5nIHRoZSBhcHBsaWNhdGlvbiB2aWV3c1xyXG4gKi9cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290JyxcclxufSlcclxuZXhwb3J0IGNsYXNzIFZpZXdzU2VydmljZSBleHRlbmRzIFNpbmdsZXRvbmVTdHJpY3RDbGFzcyB7XHJcblxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2VlIGdldHRlciBtZXRob2QgZm9yIGRvY3NcclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBfbG9hZGVkVmlld0NsYXNzOiBUeXBlPFZpZXc+IHwgbnVsbCA9IG51bGw7XHJcblxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2VlIHNldHRlciBtZXRob2QgZm9yIGRvY3NcclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBfdmlld0NvbnRhaW5lclJlZjogVmlld0NvbnRhaW5lclJlZiB8IG51bGwgPSBudWxsO1xyXG4gICAgXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDb250YWlucyB0aGUgcmVmZXJlbmNlIHRvIHRoZSBjdXJyZW50bHkgbG9hZGVkIHZpZXcgY29tcG9uZW50XHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgX2N1cnJlbnRDb21wb25lbnRSZWY6IENvbXBvbmVudFJlZjxWaWV3PiB8IG51bGwgPSBudWxsO1xyXG4gICAgXHJcblxyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBhbmltYXRpb25CdWlsZGVyOiBBbmltYXRpb25CdWlsZGVyKSB7XHJcblxyXG5cdFx0c3VwZXIoVmlld3NTZXJ2aWNlKTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUZWxscyBpZiB0aGVyZSdzIGFueSB2aWV3IGN1cnJlbnRseSBsb2FkZWQgb24gdGhlIGFwcGxpY2F0aW9uIHZpZXdzIGNvbnRhaW5lclxyXG4gICAgICovXHJcbiAgICBnZXQgaXNWaWV3TG9hZGVkKCkge1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5fbG9hZGVkVmlld0NsYXNzICE9PSBudWxsO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvKipcclxuICAgICAqIFN0b3JlcyBhIHJlZmVyZW5jZSB0byB0aGUgdmlzdWFsIGVsZW1lbnQgdGhhdCB3aWxsIGJlIHVzZWQgYXMgdGhlIGNvbnRhaW5lciBmb3IgYWxsIHRoZSB2aWV3cy5cclxuICAgICAqIFRoaXMgaXMgYXV0b21hdGljYWxseSBhc3NpZ25lZCBieSB0aGUgdGctdmlld3MtY29udGFpbmVyIGNvbXBvbmVudCBvbmNlIGl0IGlzIGNyZWF0ZWQuXHJcbiAgICAgKlxyXG4gICAgICogQHNlZSBWaWV3c0NvbnRhaW5lckNvbXBvbmVudCBmb3IgbW9yZSBpbmZvcm1hdGlvblxyXG4gICAgICovXHJcbiAgICBzZXQgdmlld0NvbnRhaW5lclJlZihyZWY6IFZpZXdDb250YWluZXJSZWYgfCBudWxsKSB7XHJcblxyXG4gICAgICAgIGlmIChyZWYgIT09IG51bGwgJiYgdGhpcy5fdmlld0NvbnRhaW5lclJlZiAhPT0gbnVsbCkge1xyXG5cclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdWaWV3cyBjb250YWluZXIgYWxyZWFkeSBkZWZpbmVkLiBPbmx5IG9uZSB2aWV3cyBjb250YWluZXIgZWxlbWVudCBjYW4gZXhpc3Qgb24gYW4gYXBwbGljYXRpb24nKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuX3ZpZXdDb250YWluZXJSZWYgPSByZWY7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ3JlYXRlIGEgbmV3IHZpZXcgaW5zdGFuY2Ugd2l0aCB0aGUgc3BlY2lmaWVkIHR5cGUgYW5kIGFkZCBpdCB0byB0aGUgY3VycmVudCBhcHBsaWNhdGlvbiB2aWV3cyBjb250YWluZXIuIEFueSBjdXJyZW50bHkgbG9hZGVkIFxyXG4gICAgICogdmlldyB3aWxsIGJlIHJlbW92ZWRcclxuICAgICAqXHJcbiAgICAgKiBNYWtlIHN1cmUgdGhpcyBtZXRob2QgaXMgY2FsbGVkIHdoZW4gYWxsIHRoZSB2aXN1YWwgY29tcG9uZW50cyBvZiB0aGUgYXBwbGljYXRpb24gaGF2ZSBiZWVuIGNyZWF0ZWQgKG5nQWZ0ZXJWaWV3SW5pdClcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gdmlldyBUaGUgY2xhc3NuYW1lIGZvciB0aGUgdmlldyB0aGF0IHdlIHdhbnQgdG8gY3JlYXRlIGFuZCBhZGQgdG8gdGhlIHZpZXdzIGNvbnRhaW5lciAobXVzdCBleHRlbmQgVmlldyBiYXNlIGNsYXNzKS5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIFRoZSBpbnN0YW5jZSBvZiB0aGUgbmV3bHkgYWRkZWQgYW5kIGNyZWF0ZWQgdmlldy4gXHJcbiAgICAgKi9cclxuICAgIGFzeW5jIHB1c2hWaWV3KHZpZXc6IFR5cGU8Vmlldz4pIHtcclxuICAgICAgICBcclxuICAgICAgICB0aGlzLnZlcmlmeVZpZXdzQ29udGFpbmVyRXhpc3QoKTtcclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgIC8vIElmIHRoZSBsb2FkZWQgdmlldyBpcyB0aGUgc2FtZSBhcyB0aGUgc3BlY2lmaWVkIG9uZSwgd2Ugd2lsbCBkbyBub3RoaW5nXHJcbiAgICAgICAgaWYgKHRoaXMuX2xvYWRlZFZpZXdDbGFzcyA9PT0gdmlldykge1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2N1cnJlbnRDb21wb25lbnRSZWY7XHJcbiAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgIC8vIElmIGEgdmlldyBpcyBhbHJlYWR5IGxvYWRlZCwgd2Ugd2lsbCB1bmxvYWQgaXQgZmlyc3RcclxuICAgICAgICBpZiAodGhpcy5fbG9hZGVkVmlld0NsYXNzICE9PSBudWxsKSB7XHJcblxyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLnJlbW92ZUN1cnJlbnRWaWV3KCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBDcmVhdGUgdGhlIG5ldyB2aWV3XHJcbiAgICAgICAgY29uc3QgbmV3Q29tcG9uZW50UmVmID0gKHRoaXMuX3ZpZXdDb250YWluZXJSZWYgYXMgVmlld0NvbnRhaW5lclJlZikuY3JlYXRlQ29tcG9uZW50KHZpZXcpO1xyXG4gICAgICAgIG5ld0NvbXBvbmVudFJlZi5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcblxyXG4gICAgICAgIC8vIFNldCBpbml0aWFsIG9wYWNpdHkgdG8gMFxyXG4gICAgICAgIG5ld0NvbXBvbmVudFJlZi5sb2NhdGlvbi5uYXRpdmVFbGVtZW50LnN0eWxlLm9wYWNpdHkgPSAnMCc7XHJcblxyXG4gICAgICAgIC8vIEZhZGUgaW4gdGhlIG5ldyB2aWV3XHJcbiAgICAgICAgY29uc3QgZmFkZUluUGxheWVyID0gdGhpcy5hbmltYXRpb25CdWlsZGVyLmJ1aWxkKFtcclxuICAgICAgICAgICAgc3R5bGUoeyBvcGFjaXR5OiAwIH0pLFxyXG4gICAgICAgICAgICBhbmltYXRlKCczMDBtcyBlYXNlJywgc3R5bGUoeyBvcGFjaXR5OiAxIH0pKVxyXG4gICAgICAgIF0pLmNyZWF0ZShuZXdDb21wb25lbnRSZWYubG9jYXRpb24ubmF0aXZlRWxlbWVudCk7XHJcblxyXG4gICAgICAgIGF3YWl0IG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlKSA9PiB7XHJcbiAgICAgICAgICAgIGZhZGVJblBsYXllci5vbkRvbmUoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fY3VycmVudENvbXBvbmVudFJlZiA9IG5ld0NvbXBvbmVudFJlZjtcclxuICAgICAgICAgICAgICAgIHRoaXMuX2xvYWRlZFZpZXdDbGFzcyA9IHZpZXc7XHJcbiAgICAgICAgICAgICAgICByZXNvbHZlKCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBmYWRlSW5QbGF5ZXIucGxheSgpO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5fY3VycmVudENvbXBvbmVudFJlZjtcclxuICAgIH1cclxuXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEZWxldGUgdGhlIGN1cnJlbnRseSBsb2FkZWQgdmlldyBmcm9tIHRoZSB2aWV3cyBjb250YWluZXIsIGFuZCBsZWF2ZSBpdCBlbXB0eS5cclxuICAgICAqIElmIG5vIHZpZXcgaXMgY3VycmVudGx5IGxvYWRlZCwgdGhpcyBtZXRob2Qgd2lsbCBkbyBub3RoaW5nXHJcbiAgICAgKi9cclxuICAgIGFzeW5jIHBvcFZpZXcoKSB7XHJcblxyXG4gICAgICAgIHRoaXMudmVyaWZ5Vmlld3NDb250YWluZXJFeGlzdCgpO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5fbG9hZGVkVmlld0NsYXNzICE9PSBudWxsICYmIHRoaXMuX2N1cnJlbnRDb21wb25lbnRSZWYpIHtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMucmVtb3ZlQ3VycmVudFZpZXcoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBcclxuICAgIFxyXG4gICAgLyoqXHJcbiAgICAgKiBBdXggbWV0aG9kIHRvIHJlbW92ZSB0aGUgY3VycmVudGx5IGxvYWRlZCB2aWV3IGZyb20gdGhlIHZpZXdzIGNvbnRhaW5lciB1c2luZyBhIHByb21pc2VcclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSByZW1vdmVDdXJyZW50VmlldygpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgICAgICBcclxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUpID0+IHtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGlmICh0aGlzLl9jdXJyZW50Q29tcG9uZW50UmVmKSB7XHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLl9jdXJyZW50Q29tcG9uZW50UmVmLmxvY2F0aW9uLm5hdGl2ZUVsZW1lbnQ7XHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIGNvbnN0IGZhZGVPdXRQbGF5ZXIgPSB0aGlzLmFuaW1hdGlvbkJ1aWxkZXIuYnVpbGQoW1xyXG4gICAgICAgICAgICAgICAgICAgIHN0eWxlKHsgb3BhY2l0eTogMSB9KSxcclxuICAgICAgICAgICAgICAgICAgICBhbmltYXRlKCczMDBtcyBlYXNlJywgc3R5bGUoeyBvcGFjaXR5OiAwIH0pKVxyXG4gICAgICAgICAgICAgICAgXSkuY3JlYXRlKGVsZW1lbnQpO1xyXG5cclxuICAgICAgICAgICAgICAgIGZhZGVPdXRQbGF5ZXIub25Eb25lKCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICBpZih0aGlzLl92aWV3Q29udGFpbmVyUmVmICE9PSBudWxsKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3ZpZXdDb250YWluZXJSZWYuY2xlYXIoKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY3VycmVudENvbXBvbmVudFJlZiA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fbG9hZGVkVmlld0NsYXNzID0gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKCk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICBmYWRlT3V0UGxheWVyLnBsYXkoKTtcclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICByZXNvbHZlKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBdXhpbGlhcnkgbWV0aG9kIHRvIHRlc3QgaWYgdGhlIHZpZXdzIGNvbnRhaW5lciBpbnN0YW5jZSBpcyBhdmFpbGFibGUgb24gdGhlIGFwcGxpY2F0aW9uXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgdmVyaWZ5Vmlld3NDb250YWluZXJFeGlzdCgpIHtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuX3ZpZXdDb250YWluZXJSZWYgPT09IG51bGwpIHtcclxuXHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVmlld3MgY29udGFpbmVyIG5vdCBkZWZpbmVkLiBQbGVhc2UgZGVjbGFyZSBhIDx2aWV3cy1jb250YWluZXI+IGVsZW1lbnQgaW4geW91ciBhcHBsaWNhdGlvbicpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG4iXX0=