@skyux/datetime 7.4.1 → 7.5.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.
@@ -204,7 +204,7 @@ export class SkyFuzzyDatepickerInputDirective {
204
204
  }
205
205
  ngAfterViewInit() {
206
206
  // This is needed to address a bug in Angular 4.
207
- // When a control value is set intially, its value is not represented on the view.
207
+ // When a control value is set initially, its value is not represented on the view.
208
208
  // See: https://github.com/angular/angular/issues/13792
209
209
  // Of note is the parent check which allows us to determine if the form is reactive.
210
210
  // Without this check there is a changed before checked error
@@ -458,4 +458,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.11", ngImpo
458
458
  type: HostListener,
459
459
  args: ['input']
460
460
  }] } });
461
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZXBpY2tlci1pbnB1dC1mdXp6eS5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvZGF0ZXRpbWUvc3JjL2xpYi9tb2R1bGVzL2RhdGVwaWNrZXIvZGF0ZXBpY2tlci1pbnB1dC1mdXp6eS5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxPQUFPLEVBSUwsU0FBUyxFQUVULFlBQVksRUFDWixLQUFLLEVBR0wsUUFBUSxFQUVSLFVBQVUsR0FDWCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBR0wsYUFBYSxFQUNiLGlCQUFpQixHQUdsQixNQUFNLGdCQUFnQixDQUFDO0FBR3hCLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0IsT0FBTyxFQUFFLG9CQUFvQixFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRWpFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGtCQUFrQixDQUFDOzs7Ozs7QUFNcEQsTUFBTSxtQ0FBbUMsR0FBRztJQUMxQyxPQUFPLEVBQUUsaUJBQWlCO0lBQzFCLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsZ0NBQWdDLENBQUM7SUFDL0QsS0FBSyxFQUFFLElBQUk7Q0FDWixDQUFDO0FBRUYsTUFBTSw4QkFBOEIsR0FBRztJQUNyQyxPQUFPLEVBQUUsYUFBYTtJQUN0QixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLGdDQUFnQyxDQUFDO0lBQy9ELEtBQUssRUFBRSxJQUFJO0NBQ1osQ0FBQztBQVNGLE1BQU0sT0FBTyxnQ0FBZ0M7SUE2TDNDLFlBQ0UsY0FBaUMsRUFDakMsYUFBeUMsRUFDekMsVUFBc0IsRUFDdEIsZ0JBQXFDLEVBQ3JDLGNBQW9DLEVBQ3BDLFFBQW1CLEVBQ25CLGdCQUF3QyxFQUM1QixtQkFBNEM7O1FBMUYxRDs7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a0JLLFlBQVk7c0JBRHRCLEtBQUs7Z0JBcUpDLGFBQWE7c0JBRG5CLFlBQVk7dUJBQUMsUUFBUSxFQUFFLENBQUMsUUFBUSxDQUFDO2dCQU0zQixXQUFXO3NCQURqQixZQUFZO3VCQUFDLE1BQU07Z0JBZ0JiLE9BQU87c0JBRGIsWUFBWTt1QkFBQyxPQUFPIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQWZ0ZXJDb250ZW50SW5pdCxcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIERpcmVjdGl2ZSxcbiAgRWxlbWVudFJlZixcbiAgSG9zdExpc3RlbmVyLFxuICBJbnB1dCxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIE9wdGlvbmFsLFxuICBSZW5kZXJlcjIsXG4gIGZvcndhcmRSZWYsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgQWJzdHJhY3RDb250cm9sLFxuICBDb250cm9sVmFsdWVBY2Nlc3NvcixcbiAgTkdfVkFMSURBVE9SUyxcbiAgTkdfVkFMVUVfQUNDRVNTT1IsXG4gIFZhbGlkYXRpb25FcnJvcnMsXG4gIFZhbGlkYXRvcixcbn0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgU2t5QXBwTG9jYWxlUHJvdmlkZXIsIFNreUxpYlJlc291cmNlc1NlcnZpY2UgfSBmcm9tICdAc2t5dXgvaTE4bic7XG5cbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGRpc3RpbmN0VW50aWxDaGFuZ2VkLCB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7IFNreURhdGVGb3JtYXR0ZXIgfSBmcm9tICcuL2RhdGUtZm9ybWF0dGVyJztcbmltcG9ydCB7IFNreURhdGVwaWNrZXJDb25maWdTZXJ2aWNlIH0gZnJvbSAnLi9kYXRlcGlja2VyLWNvbmZpZy5zZXJ2aWNlJztcbmltcG9ydCB7IFNreURhdGVwaWNrZXJDb21wb25lbnQgfSBmcm9tICcuL2RhdGVwaWNrZXIuY29tcG9uZW50JztcbmltcG9ydCB7IFNreUZ1enp5RGF0ZSB9IGZyb20gJy4vZnV6enktZGF0ZSc7XG5pbXBvcnQgeyBTa3lGdXp6eURhdGVTZXJ2aWNlIH0gZnJvbSAnLi9mdXp6eS1kYXRlLnNlcnZpY2UnO1xuXG5jb25zdCBTS1lfRlVaWllfREFURVBJQ0tFUl9WQUxVRV9BQ0NFU1NPUiA9IHtcbiAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IFNreUZ1enp5RGF0ZXBpY2tlcklucHV0RGlyZWN0aXZlKSxcbiAgbXVsdGk6IHRydWUsXG59O1xuXG5jb25zdCBTS1lfRlVaWllfREFURVBJQ0tFUl9WQUxJREFUT1IgPSB7XG4gIHByb3ZpZGU6IE5HX1ZBTElEQVRPUlMsXG4gIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IFNreUZ1enp5RGF0ZXBpY2tlcklucHV0RGlyZWN0aXZlKSxcbiAgbXVsdGk6IHRydWUsXG59O1xuXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6ICdbc2t5RnV6enlEYXRlcGlja2VySW5wdXRdJyxcbiAgcHJvdmlkZXJzOiBbXG4gICAgU0tZX0ZVWlpZX0RBVEVQSUNLRVJfVkFMVUVfQUNDRVNTT1IsXG4gICAgU0tZX0ZVWlpZX0RBVEVQSUNLRVJfVkFMSURBVE9SLFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBTa3lGdXp6eURhdGVwaWNrZXJJbnB1dERpcmVjdGl2ZVxuICBpbXBsZW1lbnRzXG4gICAgT25Jbml0LFxuICAgIE9uRGVzdHJveSxcbiAgICBBZnRlclZpZXdJbml0LFxuICAgIEFmdGVyQ29udGVudEluaXQsXG4gICAgQ29udHJvbFZhbHVlQWNjZXNzb3IsXG4gICAgVmFsaWRhdG9yXG57XG4gIC8qKlxuICAgKiBTcGVjaWZpZXMgdGhlIGRhdGUgZm9ybWF0IGZvciB0aGUgaW5wdXQuIFBsYWNlIHRoaXMgYXR0cmlidXRlIG9uIHRoZSBgaW5wdXRgIGVsZW1lbnRcbiAgICogdG8gb3ZlcnJpZGUgdGhlIGRlZmF1bHQgaW4gYFNreURhdGVwaWNrZXJDb25maWdTZXJ2aWNlYC5cbiAgICogQGRlZmF1bHQgXCJNTS9ERC9ZWVlZXCJcbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgZGF0ZUZvcm1hdCh2YWx1ZTogc3RyaW5nIHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy4jX2RhdGVGb3JtYXQgPSB2YWx1ZTtcblxuICAgIGlmICh0aGlzLiN2YWx1ZSkge1xuICAgICAgY29uc3QgZm9ybWF0dGVkRGF0ZSA9IHRoaXMuI2Z1enp5RGF0ZVNlcnZpY2UuZm9ybWF0KFxuICAgICAgICB0aGlzLiN2YWx1ZSxcbiAgICAgICAgdGhpcy5kYXRlRm9ybWF0LFxuICAgICAgICB0aGlzLiNsb2NhbGVcbiAgICAgICk7XG4gICAgICB0aGlzLiNzZXRJbnB1dEVsZW1lbnRWYWx1ZShmb3JtYXR0ZWREYXRlKTtcbiAgICAgIHRoaXMuI2NoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cbiAgfVxuXG4gIC8vIFRPRE86IFJlZmFjdG9yIHRvIG5vdCBoYXZlIGdldHRlciBsb2dpY1xuICBwdWJsaWMgZ2V0IGRhdGVGb3JtYXQoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy4jX2RhdGVGb3JtYXQgfHxcbiAgICAgIHRoaXMuI2NvbmZpZ1NlcnZpY2UuZGF0ZUZvcm1hdCB8fFxuICAgICAgdGhpcy4jcHJlZmVycmVkU2hvcnREYXRlRm9ybWF0XG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgd2hldGhlciB0byBkaXNhYmxlIHRoZSBkYXRlcGlja2VyLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBkaXNhYmxlZCh2YWx1ZTogYm9vbGVhbiB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuI19kaXNhYmxlZCA9IHZhbHVlO1xuICAgIHRoaXMuI2RhdGVwaWNrZXJDb21wb25lbnQuZGlzYWJsZWQgPSB2YWx1ZTtcblxuICAgIHRoaXMuI3JlbmRlcmVyLnNldFByb3BlcnR5KFxuICAgICAgdGhpcy4jZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LFxuICAgICAgJ2Rpc2FibGVkJyxcbiAgICAgIHZhbHVlXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgZGlzYWJsZWQoKTogYm9vbGVhbiB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuI19kaXNhYmxlZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgd2hldGhlciB0byBwcmV2ZW50IHVzZXJzIGZyb20gc3BlY2lmeWluZyBkYXRlcyB0aGF0IGFyZSBpbiB0aGUgZnV0dXJlLlxuICAgKiBQbGFjZSB0aGlzIGF0dHJpYnV0ZSBvbiB0aGUgYGlucHV0YCBlbGVtZW50LlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBmdXR1cmVEaXNhYmxlZCh2YWx1ZTogYm9vbGVhbiB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuI19mdXR1cmVEaXNhYmxlZCA9IHZhbHVlO1xuICAgIHRoaXMuI29uVmFsaWRhdG9yQ2hhbmdlKCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGZ1dHVyZURpc2FibGVkKCk6IGJvb2xlYW4gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLiNfZnV0dXJlRGlzYWJsZWQ7XG4gIH1cblxuICAvKipcbiAgICogU3BlY2lmaWVzIHRoZSBsYXRlc3QgZnV6enkgZGF0ZSBhbGxvd2VkLiBQbGFjZSB0aGlzIGF0dHJpYnV0ZSBvbiB0aGUgYGlucHV0YCBlbGVtZW50XG4gICAqIHRvIHByZXZlbnQgZnV6enkgZGF0ZXMgYWZ0ZXIgYSBzcGVjaWZpZWQgZGF0ZS4gVGhpcyBwcm9wZXJ0eSBhY2NlcHRzXG4gICAqIGEgYFNreUZ1enp5RGF0ZWAgdmFsdWUgdGhhdCBpbmNsdWRlcyBudW1lcmljIG1vbnRoLCBkYXksIGFuZCB5ZWFyIHZhbHVlcy5cbiAgICogRm9yIGV4YW1wbGU6IGB7IG1vbnRoOiAxLCBkYXk6IDEsIHllYXI6IDIwMjcgfWAuXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IG1heERhdGUodmFsdWU6IFNreUZ1enp5RGF0ZSB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuI19tYXhEYXRlID0gdmFsdWU7XG4gICAgdGhpcy4jZGF0ZXBpY2tlckNvbXBvbmVudC5tYXhEYXRlID0gdGhpcy4jZ2V0TWF4RGF0ZSgpO1xuICAgIHRoaXMuI29uVmFsaWRhdG9yQ2hhbmdlKCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IG1heERhdGUoKTogU2t5RnV6enlEYXRlIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy4jX21heERhdGU7XG4gIH1cblxuICAvKipcbiAgICogU3BlY2lmaWVzIHRoZSBlYXJsaWVzdCBmdXp6eSBkYXRlIGFsbG93ZWQuIFBsYWNlIHRoaXMgYXR0cmlidXRlIG9uIHRoZSBgaW5wdXRgIGVsZW1lbnRcbiAgICogdG8gcHJldmVudCBmdXp6eSBkYXRlcyBiZWZvcmUgYSBzcGVjaWZpZWQgZGF0ZS4gVGhpcyBwcm9wZXJ0eSBhY2NlcHRzIGEgYFNreUZ1enp5RGF0ZWAgdmFsdWVcbiAgICogdGhhdCBpbmNsdWRlcyBudW1lcmljIG1vbnRoLCBkYXksIGFuZCB5ZWFyIHZhbHVlcy5cbiAgICogRm9yIGV4YW1wbGU6IGB7IG1vbnRoOiAxLCBkYXk6IDEsIHllYXI6IDIwMDcgfWAuXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IG1pbkRhdGUodmFsdWU6IFNreUZ1enp5RGF0ZSB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuI19taW5EYXRlID0gdmFsdWU7XG4gICAgdGhpcy4jZGF0ZXBpY2tlckNvbXBvbmVudC5taW5EYXRlID0gdGhpcy4jZ2V0TWluRGF0ZSgpO1xuICAgIHRoaXMuI29uVmFsaWRhdG9yQ2hhbmdlKCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IG1pbkRhdGUoKTogU2t5RnV6enlEYXRlIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy4jX21pbkRhdGU7XG4gIH1cblxuICAvKipcbiAgICogSW5kaWNhdGVzIHdoZXRoZXIgdG8gZGlzYWJsZSBkYXRlIHZhbGlkYXRpb24gb24gdGhlIGZ1enp5IGRhdGVwaWNrZXIgaW5wdXQuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2t5RGF0ZXBpY2tlck5vVmFsaWRhdGU6IGJvb2xlYW4gfCB1bmRlZmluZWQgPSBmYWxzZTtcblxuICAvKipcbiAgICogU3BlY2lmaWVzIHRoZSBzdGFydGluZyBkYXkgb2YgdGhlIHdlZWsgaW4gdGhlIGNhbGVuZGFyLCB3aGVyZSBgMGAgc2V0cyB0aGUgc3RhcnRpbmcgZGF5XG4gICAqIHRvIFN1bmRheS4gUGxhY2UgdGhpcyBhdHRyaWJ1dGUgb24gdGhlIGBpbnB1dGAgZWxlbWVudCB0byBvdmVycmlkZSB0aGUgZGVmYXVsdFxuICAgKiBpbiBgU2t5RGF0ZXBpY2tlckNvbmZpZ1NlcnZpY2VgLlxuICAgKiBAZGVmYXVsdCAwXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IHN0YXJ0aW5nRGF5KHZhbHVlOiBudW1iZXIgfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLiNfc3RhcnRpbmdEYXkgPSB2YWx1ZTtcbiAgICB0aGlzLiNkYXRlcGlja2VyQ29tcG9uZW50LnN0YXJ0aW5nRGF5ID0gdGhpcy5zdGFydGluZ0RheTtcblxuICAgIHRoaXMuI29uVmFsaWRhdG9yQ2hhbmdlKCk7XG4gIH1cblxuICAvLyBUT0RPOiBSZWZhY3RvciB0byBub3QgaGF2ZSBnZXR0ZXIgbG9naWNcbiAgcHVibGljIGdldCBzdGFydGluZ0RheSgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLiNfc3RhcnRpbmdEYXkgfHwgdGhpcy4jY29uZmlnU2VydmljZS5zdGFydGluZ0RheTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgd2hldGhlciB0byByZXF1aXJlIHRoZSB5ZWFyIGluIGZ1enp5IGRhdGVzLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNldCB5ZWFyUmVxdWlyZWQodmFsdWU6IGJvb2xlYW4gfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLiNfeWVhclJlcXVpcmVkID0gdmFsdWU7XG4gICAgdGhpcy4jb25WYWxpZGF0b3JDaGFuZ2UoKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgeWVhclJlcXVpcmVkKCk6IGJvb2xlYW4gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLiNfeWVhclJlcXVpcmVkO1xuICB9XG5cbiAgZ2V0ICN2YWx1ZSgpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLiNfdmFsdWU7XG4gIH1cblxuICBzZXQgI3ZhbHVlKHZhbHVlOiBhbnkpIHtcbiAgICB0aGlzLiN1cGRhdGVWYWx1ZSh2YWx1ZSk7XG4gIH1cblxuICAjY29udHJvbDogQWJzdHJhY3RDb250cm9sIHwgdW5kZWZpbmVkO1xuXG4gICNkYXRlRm9ybWF0dGVyID0gbmV3IFNreURhdGVGb3JtYXR0ZXIoKTtcblxuICAjbG9jYWxlOiBzdHJpbmc7XG5cbiAgI3ByZWZlcnJlZFNob3J0RGF0ZUZvcm1hdDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gICNuZ1Vuc3Vic2NyaWJlID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICAjX2Z1dHVyZURpc2FibGVkOiBib29sZWFuIHwgdW5kZWZpbmVkID0gZmFsc2U7XG5cbiAgI19kYXRlRm9ybWF0OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgI19kaXNhYmxlZDogYm9vbGVhbiB8IHVuZGVmaW5lZCA9IGZhbHNlO1xuXG4gICNfbWF4RGF0ZTogU2t5RnV6enlEYXRlIHwgdW5kZWZpbmVkO1xuXG4gICNfbWluRGF0ZTogU2t5RnV6enlEYXRlIHwgdW5kZWZpbmVkO1xuXG4gICNfc3RhcnRpbmdEYXk6IG51bWJlciB8IHVuZGVmaW5lZDtcblxuICAjX3ZhbHVlOiBhbnk7XG5cbiAgI195ZWFyUmVxdWlyZWQ6IGJvb2xlYW4gfCB1bmRlZmluZWQgPSBmYWxzZTtcblxuICAjY2hhbmdlRGV0ZWN0b3I6IENoYW5nZURldGVjdG9yUmVmO1xuICAjY29uZmlnU2VydmljZTogU2t5RGF0ZXBpY2tlckNvbmZpZ1NlcnZpY2U7XG4gICNlbGVtZW50UmVmOiBFbGVtZW50UmVmO1xuICAjZnV6enlEYXRlU2VydmljZTogU2t5RnV6enlEYXRlU2VydmljZTtcbiAgI3JlbmRlcmVyOiBSZW5kZXJlcjI7XG4gICNyZXNvdXJjZXNTZXJ2aWNlOiBTa3lMaWJSZXNvdXJjZXNTZXJ2aWNlO1xuICAjZGF0ZXBpY2tlckNvbXBvbmVudDogU2t5RGF0ZXBpY2tlckNvbXBvbmVudDtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBjaGFuZ2VEZXRlY3RvcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgY29uZmlnU2VydmljZTogU2t5RGF0ZXBpY2tlckNvbmZpZ1NlcnZpY2UsXG4gICAgZWxlbWVudFJlZjogRWxlbWVudFJlZixcbiAgICBmdXp6eURhdGVTZXJ2aWNlOiBTa3lGdXp6eURhdGVTZXJ2aWNlLFxuICAgIGxvY2FsZVByb3ZpZGVyOiBTa3lBcHBMb2NhbGVQcm92aWRlcixcbiAgICByZW5kZXJlcjogUmVuZGVyZXIyLFxuICAgIHJlc291cmNlc1NlcnZpY2U6IFNreUxpYlJlc291cmNlc1NlcnZpY2UsXG4gICAgQE9wdGlvbmFsKCkgZGF0ZXBpY2tlckNvbXBvbmVudD86IFNreURhdGVwaWNrZXJDb21wb25lbnRcbiAgKSB7XG4gICAgaWYgKCFkYXRlcGlja2VyQ29tcG9uZW50KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICdZb3UgbXVzdCB3cmFwIHRoZSBgc2t5RnV6enlEYXRlcGlja2VySW5wdXRgIGRpcmVjdGl2ZSB3aXRoaW4gYSAnICtcbiAgICAgICAgICAnYDxza3ktZGF0ZXBpY2tlcj5gIGNvbXBvbmVudCEnXG4gICAgICApO1xuICAgIH1cblxuICAgIHRoaXMuI2NoYW5nZURldGVjdG9yID0gY2hhbmdlRGV0ZWN0b3I7XG4gICAgdGhpcy4jY29uZmlnU2VydmljZSA9IGNvbmZpZ1NlcnZpY2U7XG4gICAgdGhpcy4jZWxlbWVudFJlZiA9IGVsZW1lbnRSZWY7XG4gICAgdGhpcy4jZnV6enlEYXRlU2VydmljZSA9IGZ1enp5RGF0ZVNlcnZpY2U7XG4gICAgdGhpcy4jcmVuZGVyZXIgPSByZW5kZXJlcjtcbiAgICB0aGlzLiNyZXNvdXJjZXNTZXJ2aWNlID0gcmVzb3VyY2VzU2VydmljZTtcbiAgICB0aGlzLiNkYXRlcGlja2VyQ29tcG9uZW50ID0gZGF0ZXBpY2tlckNvbXBvbmVudDtcblxuICAgIHRoaXMuI2xvY2FsZSA9IGxvY2FsZVByb3ZpZGVyLmRlZmF1bHRMb2NhbGU7XG4gICAgbG9jYWxlUHJvdmlkZXJcbiAgICAgIC5nZXRMb2NhbGVJbmZvKClcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLiNuZ1Vuc3Vic2NyaWJlKSlcbiAgICAgIC5zdWJzY3JpYmUoKGxvY2FsZUluZm8pID0+IHtcbiAgICAgICAgdGhpcy4jbG9jYWxlID0gbG9jYWxlSW5mby5sb2NhbGU7XG4gICAgICAgIFNreURhdGVGb3JtYXR0ZXIuc2V0TG9jYWxlKHRoaXMuI2xvY2FsZSk7XG4gICAgICAgIHRoaXMuI3ByZWZlcnJlZFNob3J0RGF0ZUZvcm1hdCA9XG4gICAgICAgICAgU2t5RGF0ZUZvcm1hdHRlci5nZXRQcmVmZXJyZWRTaG9ydERhdGVGb3JtYXQoKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnllYXJSZXF1aXJlZCkge1xuICAgICAgaWYgKHRoaXMuZGF0ZUZvcm1hdD8udG9Mb3dlckNhc2UoKS5pbmRleE9mKCd5JykgPT09IC0xKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAnWW91IGhhdmUgY29uZmlndXJlZCBjb25mbGljdGluZyBzZXR0aW5ncy4gWWVhciBpcyByZXF1aXJlZCBhbmQgZGF0ZUZvcm1hdCBkb2VzIG5vdCBpbmNsdWRlIHllYXIuJ1xuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLiNlbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7XG5cbiAgICB0aGlzLiNyZW5kZXJlci5hZGRDbGFzcyhlbGVtZW50LCAnc2t5LWZvcm0tY29udHJvbCcpO1xuXG4gICAgY29uc3QgaGFzQXJpYUxhYmVsID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2FyaWEtbGFiZWwnKTtcblxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgaWYgKCFoYXNBcmlhTGFiZWwpIHtcbiAgICAgIHRoaXMuI3Jlc291cmNlc1NlcnZpY2VcbiAgICAgICAgLmdldFN0cmluZygnc2t5dXhfZGF0ZV9maWVsZF9kZWZhdWx0X2xhYmVsJylcbiAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuI25nVW5zdWJzY3JpYmUpKVxuICAgICAgICAuc3Vic2NyaWJlKCh2YWx1ZTogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgdGhpcy4jcmVuZGVyZXIuc2V0QXR0cmlidXRlKGVsZW1lbnQsICdhcmlhLWxhYmVsJywgdmFsdWUpO1xuICAgICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgbmdBZnRlckNvbnRlbnRJbml0KCk6IHZvaWQge1xuICAgIHRoaXMuI2RhdGVwaWNrZXJDb21wb25lbnQuZGF0ZUNoYW5nZVxuICAgICAgLnBpcGUoZGlzdGluY3RVbnRpbENoYW5nZWQoKSwgdGFrZVVudGlsKHRoaXMuI25nVW5zdWJzY3JpYmUpKVxuICAgICAgLnN1YnNjcmliZSgodmFsdWU6IERhdGUpID0+IHtcbiAgICAgICAgdGhpcy4jdmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgdGhpcy4jb25Ub3VjaGVkKCk7XG4gICAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgLy8gVGhpcyBpcyBuZWVkZWQgdG8gYWRkcmVzcyBhIGJ1ZyBpbiBBbmd1bGFyIDQuXG4gICAgLy8gV2hlbiBhIGNvbnRyb2wgdmFsdWUgaXMgc2V0IGludGlhbGx5LCBpdHMgdmFsdWUgaXMgbm90IHJlcHJlc2VudGVkIG9uIHRoZSB2aWV3LlxuICAgIC8vIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL2FuZ3VsYXIvYW5ndWxhci9pc3N1ZXMvMTM3OTJcbiAgICAvLyBPZiBub3RlIGlzIHRoZSBwYXJlbnQgY2hlY2sgd2hpY2ggYWxsb3dzIHVzIHRvIGRldGVybWluZSBpZiB0aGUgZm9ybSBpcyByZWFjdGl2ZS5cbiAgICAvLyBXaXRob3V0IHRoaXMgY2hlY2sgdGhlcmUgaXMgYSBjaGFuZ2VkIGJlZm9yZSBjaGVja2VkIGVycm9yXG4gICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cblxuICAgIGlmICh0aGlzLiNjb250cm9sICYmIHRoaXMuI2NvbnRyb2wucGFyZW50KSB7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy4jY29udHJvbD8uc2V0VmFsdWUodGhpcy4jdmFsdWUsIHtcbiAgICAgICAgICBlbWl0RXZlbnQ6IGZhbHNlLFxuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLiNjaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLiNuZ1Vuc3Vic2NyaWJlLm5leHQoKTtcbiAgICB0aGlzLiNuZ1Vuc3Vic2NyaWJlLmNvbXBsZXRlKCk7XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCdjaGFuZ2UnLCBbJyRldmVudCddKVxuICBwdWJsaWMgb25JbnB1dENoYW5nZShldmVudDogYW55KSB7XG4gICAgdGhpcy4jb25WYWx1ZUNoYW5nZShldmVudC50YXJnZXQudmFsdWUpO1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignYmx1cicpXG4gIHB1YmxpYyBvbklucHV0Qmx1cigpOiB2b2lkIHtcbiAgICB0aGlzLiNvblRvdWNoZWQoKTtcblxuICAgIGNvbnN0IGZvcm1hdHRlZERhdGUgPSB0aGlzLiNmdXp6eURhdGVTZXJ2aWNlLmZvcm1hdChcbiAgICAgIHRoaXMuI3ZhbHVlLFxuICAgICAgdGhpcy5kYXRlRm9ybWF0LFxuICAgICAgdGhpcy4jbG9jYWxlXG4gICAgKTtcblxuICAgIGlmICh0aGlzLiNjb250cm9sPy52YWxpZCkge1xuICAgICAgdGhpcy4jc2V0SW5wdXRFbGVtZW50VmFsdWUoZm9ybWF0dGVkRGF0ZSk7XG4gICAgfVxuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignaW5wdXQnKVxuICBwdWJsaWMgb25JbnB1dCgpOiB2b2lkIHtcbiAgICB0aGlzLiNjb250cm9sPy5tYXJrQXNEaXJ0eSgpO1xuICB9XG5cbiAgcHVibGljIHdyaXRlVmFsdWUodmFsdWU6IGFueSk6IHZvaWQge1xuICAgIHRoaXMuI3VwZGF0ZVZhbHVlKHZhbHVlLCBmYWxzZSk7XG4gIH1cblxuICBwdWJsaWMgdmFsaWRhdGUoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwge1xuICAgIGlmICghdGhpcy4jY29udHJvbCkge1xuICAgICAgdGhpcy4jY29udHJvbCA9IGNvbnRyb2w7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuc2t5RGF0ZXBpY2tlck5vVmFsaWRhdGUpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGlmICghdGhpcy4jY29udHJvbC52YWx1ZSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY29uc3QgdmFsdWU6IGFueSA9IGNvbnRyb2wudmFsdWU7XG5cbiAgICBsZXQgZnV6enlEYXRlOiBTa3lGdXp6eURhdGUgfCB1bmRlZmluZWQ7XG4gICAgbGV0IHZhbGlkYXRpb25FcnJvcjogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwgPSBudWxsO1xuXG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGZ1enp5RGF0ZSA9IHRoaXMuI2Z1enp5RGF0ZVNlcnZpY2UuZ2V0RnV6enlEYXRlRnJvbVN0cmluZyhcbiAgICAgICAgdmFsdWUsXG4gICAgICAgIHRoaXMuZGF0ZUZvcm1hdFxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZnV6enlEYXRlID0gdmFsdWU7XG4gICAgfVxuXG4gICAgaWYgKCFmdXp6eURhdGUpIHtcbiAgICAgIHZhbGlkYXRpb25FcnJvciA9IHtcbiAgICAgICAgc2t5RnV6enlEYXRlOiB7XG4gICAgICAgICAgaW52YWxpZDogdmFsdWUsXG4gICAgICAgIH0sXG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoIWZ1enp5RGF0ZS55ZWFyICYmIHRoaXMueWVhclJlcXVpcmVkKSB7XG4gICAgICAgIHZhbGlkYXRpb25FcnJvciA9IHtcbiAgICAgICAgICBza3lGdXp6eURhdGU6IHtcbiAgICAgICAgICAgIHllYXJSZXF1aXJlZDogdmFsdWUsXG4gICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgaWYgKCF2YWxpZGF0aW9uRXJyb3IgJiYgZnV6enlEYXRlLnllYXIpIHtcbiAgICAgICAgbGV0IGZ1enp5RGF0ZVJhbmdlO1xuXG4gICAgICAgIGlmICh0aGlzLm1heERhdGUpIHtcbiAgICAgICAgICBmdXp6eURhdGVSYW5nZSA9IHRoaXMuI2Z1enp5RGF0ZVNlcnZpY2UuZ2V0RnV6enlEYXRlUmFuZ2UoXG4gICAgICAgICAgICBmdXp6eURhdGUsXG4gICAgICAgICAgICB0aGlzLm1heERhdGVcbiAgICAgICAgICApO1xuXG4gICAgICAgICAgaWYgKCFmdXp6eURhdGVSYW5nZS52YWxpZCkge1xuICAgICAgICAgICAgdmFsaWRhdGlvbkVycm9yID0ge1xuICAgICAgICAgICAgICBza3lGdXp6eURhdGU6IHtcbiAgICAgICAgICAgICAgICBtYXhEYXRlOiB2YWx1ZSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF2YWxpZGF0aW9uRXJyb3IgJiYgdGhpcy5taW5EYXRlKSB7XG4gICAgICAgICAgZnV6enlEYXRlUmFuZ2UgPSB0aGlzLiNmdXp6eURhdGVTZXJ2aWNlLmdldEZ1enp5RGF0ZVJhbmdlKFxuICAgICAgICAgICAgdGhpcy5taW5EYXRlLFxuICAgICAgICAgICAgZnV6enlEYXRlXG4gICAgICAgICAgKTtcbiAgICAgICAgICBpZiAoIWZ1enp5RGF0ZVJhbmdlLnZhbGlkKSB7XG4gICAgICAgICAgICB2YWxpZGF0aW9uRXJyb3IgPSB7XG4gICAgICAgICAgICAgIHNreUZ1enp5RGF0ZToge1xuICAgICAgICAgICAgICAgIG1pbkRhdGU6IHZhbHVlLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXZhbGlkYXRpb25FcnJvciAmJiB0aGlzLmZ1dHVyZURpc2FibGVkKSB7XG4gICAgICAgICAgZnV6enlEYXRlUmFuZ2UgPSB0aGlzLiNmdXp6eURhdGVTZXJ2aWNlLmdldEZ1enp5RGF0ZVJhbmdlKFxuICAgICAgICAgICAgZnV6enlEYXRlLFxuICAgICAgICAgICAgdGhpcy4jZnV6enlEYXRlU2VydmljZS5nZXRDdXJyZW50RnV6enlEYXRlKClcbiAgICAgICAgICApO1xuICAgICAgICAgIGlmICghZnV6enlEYXRlUmFuZ2UudmFsaWQpIHtcbiAgICAgICAgICAgIHZhbGlkYXRpb25FcnJvciA9IHtcbiAgICAgICAgICAgICAgc2t5RnV6enlEYXRlOiB7XG4gICAgICAgICAgICAgICAgZnV0dXJlRGlzYWJsZWQ6IHZhbHVlLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodmFsaWRhdGlvbkVycm9yKSB7XG4gICAgICAvLyBNYXJrIHRoZSBpbnZhbGlkIGNvbnRyb2wgYXMgdG91Y2hlZCBzbyB0aGF0IHRoZSBpbnB1dCdzIGludmFsaWQgQ1NTIHN0eWxlcyBhcHBlYXIuXG4gICAgICAvLyAoVGhpcyBpcyBvbmx5IHJlcXVpcmVkIHdoZW4gdGhlIGludmFsaWQgdmFsdWUgaXMgc2V0IGJ5IHRoZSBGb3JtQ29udHJvbCBjb25zdHJ1Y3Rvci4pXG4gICAgICB0aGlzLiNjb250cm9sLm1hcmtBc1RvdWNoZWQoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdmFsaWRhdGlvbkVycm9yO1xuICB9XG5cbiAgcHVibGljIHJlZ2lzdGVyT25DaGFuZ2UoZm46ICh2YWx1ZTogYW55KSA9PiB2b2lkKTogdm9pZCB7XG4gICAgdGhpcy4jb25DaGFuZ2UgPSBmbjtcbiAgfVxuXG4gIHB1YmxpYyByZWdpc3Rlck9uVG91Y2hlZChmbjogKCkgPT4gdm9pZCk6IHZvaWQge1xuICAgIHRoaXMuI29uVG91Y2hlZCA9IGZuO1xuICB9XG5cbiAgcHVibGljIHJlZ2lzdGVyT25WYWxpZGF0b3JDaGFuZ2UoZm46ICgpID0+IHZvaWQpOiB2b2lkIHtcbiAgICB0aGlzLiNvblZhbGlkYXRvckNoYW5nZSA9IGZuO1xuICB9XG5cbiAgcHVibGljIHNldERpc2FibGVkU3RhdGUoZGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLmRpc2FibGVkID0gZGlzYWJsZWQ7XG4gICAgdGhpcy4jZGF0ZXBpY2tlckNvbXBvbmVudC5kaXNhYmxlZCA9IGRpc2FibGVkO1xuICB9XG5cbiAgLyoqXG4gICAqIERldGVjdHMgY2hhbmdlcyB0byB0aGUgdW5kZXJseWluZyBpbnB1dCBlbGVtZW50J3MgdmFsdWUgYW5kIHVwZGF0ZXMgdGhlIG5nTW9kZWwgYWNjb3JkaW5nbHkuXG4gICAqIFRoaXMgaXMgdXNlZnVsIGlmIHlvdSBuZWVkIHRvIHVwZGF0ZSB0aGUgbmdNb2RlbCB2YWx1ZSBiZWZvcmUgdGhlIGlucHV0IGVsZW1lbnQgbG9zZXMgZm9jdXMuXG4gICAqL1xuICBwdWJsaWMgZGV0ZWN0SW5wdXRWYWx1ZUNoYW5nZSgpOiB2b2lkIHtcbiAgICB0aGlzLiNvblZhbHVlQ2hhbmdlKHRoaXMuI2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC52YWx1ZSk7XG4gIH1cblxuICAjb25WYWx1ZUNoYW5nZShuZXdWYWx1ZTogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy4jdmFsdWUgPSBuZXdWYWx1ZTtcbiAgfVxuXG4gICNzZXRJbnB1dEVsZW1lbnRWYWx1ZSh2YWx1ZTogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy4jcmVuZGVyZXIuc2V0UHJvcGVydHkodGhpcy4jZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCAndmFsdWUnLCB2YWx1ZSk7XG4gIH1cblxuICAjZ2V0TWF4RGF0ZSgpOiBEYXRlIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAodGhpcy5tYXhEYXRlKSB7XG4gICAgICBjb25zdCBtYXhEYXRlID0gdGhpcy4jZnV6enlEYXRlU2VydmljZS5nZXRNb21lbnRGcm9tRnV6enlEYXRlKFxuICAgICAgICB0aGlzLm1heERhdGVcbiAgICAgICk7XG4gICAgICBpZiAobWF4RGF0ZS5pc1ZhbGlkKCkpIHtcbiAgICAgICAgcmV0dXJuIG1heERhdGUudG9EYXRlKCk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0aGlzLmZ1dHVyZURpc2FibGVkKSB7XG4gICAgICByZXR1cm4gbmV3IERhdGUoKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuI2NvbmZpZ1NlcnZpY2UubWF4RGF0ZTtcbiAgfVxuXG4gICNnZXRNaW5EYXRlKCk6IERhdGUgfCB1bmRlZmluZWQge1xuICAgIGlmICh0aGlzLm1pbkRhdGUpIHtcbiAgICAgIGNvbnN0IG1pbkRhdGUgPSB0aGlzLiNmdXp6eURhdGVTZXJ2aWNlLmdldE1vbWVudEZyb21GdXp6eURhdGUoXG4gICAgICAgIHRoaXMubWluRGF0ZVxuICAgICAgKTtcbiAgICAgIGlmIChtaW5EYXRlLmlzVmFsaWQoKSkge1xuICAgICAgICByZXR1cm4gbWluRGF0ZS50b0RhdGUoKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuI2NvbmZpZ1NlcnZpY2UubWluRGF0ZTtcbiAgfVxuXG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICNmdXp6eURhdGVzRXF1YWwoZGF0ZUE/OiBTa3lGdXp6eURhdGUsIGRhdGVCPzogU2t5RnV6enlEYXRlKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgIGRhdGVBICE9PSB1bmRlZmluZWQgJiZcbiAgICAgIGRhdGVCICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICgoIWRhdGVBLmRheSAmJiAhZGF0ZUIuZGF5KSB8fCBkYXRlQS5kYXkgPT09IGRhdGVCLmRheSkgJiZcbiAgICAgICgoIWRhdGVBLm1vbnRoICYmICFkYXRlQi5tb250aCkgfHwgZGF0ZUEubW9udGggPT09IGRhdGVCLm1vbnRoKSAmJlxuICAgICAgKCghZGF0ZUEueWVhciAmJiAhZGF0ZUIueWVhcikgfHwgZGF0ZUEueWVhciA9PT0gZGF0ZUIueWVhcilcbiAgICApO1xuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1lbXB0eS1mdW5jdGlvblxuICAvLyBpc3RhbmJ1bCBpZ25vcmUgbmV4dFxuICAjb25DaGFuZ2UgPSAoXzogYW55KSA9PiB7fTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1lbXB0eS1mdW5jdGlvblxuICAvLyBpc3RhbmJ1bCBpZ25vcmUgbmV4dFxuICAjb25Ub3VjaGVkID0gKCkgPT4ge307XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZW1wdHktZnVuY3Rpb25cbiAgLy8gaXN0YW5idWwgaWdub3JlIG5leHRcbiAgI29uVmFsaWRhdG9yQ2hhbmdlID0gKCkgPT4ge307XG5cbiAgLyoqXG4gICAqIFVwZGF0ZSB0aGUgdmFsdWUgb2YgdGhlIGZvcm0gY29udHJvbCBhbmQgaW5wdXQgZWxlbWVudFxuICAgKiBAcGFyYW0gZW1pdEV2ZW50IERlbm90ZXMgaWYgd2UgZW1pdCBhbiBldmVudCB0byB0aGUgY29uc3VtZXIncyBmb3JtIGNvbnRyb2wuIFdlIGRvIG5vdCB3YW50IHRvIGRvIHRoaXMgaWYgdGhlIHZhbHVlIGlzIGJlaW5nIHVwZGF0ZWQgdmlhIGEgYHNldFZhbHVlYCBjYWxsIG9yIGEgYHBhdGNoVmFsdWVgIGNhbGwgYXMgdGhpcyBpcyBhbHJlYWR5IGhhbmRsZWQgYnkgQW5ndWxhci5cbiAgICogSW4gdGhlc2UgY2FzZXMgd2UgZG8gbm90IHdhbnQgdG8gZmlyZSBgb25DaGFuZ2VgIGFzIGl0IHdpbGwgY2F1c2UgZXh0cmEgYHZhbHVlQ2hhbmdlYCBhbmQgYHN0YXR1c0NoYW5nZWAgZXZlbnRzIGFuZCB0aGUgc3RhdHVzIG9mIHRoZSBmb3JtIHNob3VsZCBub3QgYmUgYWZmZWN0ZWQgYnkgdGhlc2UgY2hhbmdlcy5cbiAgICovXG4gICN1cGRhdGVWYWx1ZSh2YWx1ZTogYW55LCBlbWl0RXZlbnQgPSB0cnVlKTogdm9pZCB7XG4gICAgaWYgKFxuICAgICAgdGhpcy4jX3ZhbHVlID09PSB2YWx1ZSB8fFxuICAgICAgKHRoaXMuI192YWx1ZSA9PT0gdW5kZWZpbmVkICYmIHZhbHVlID09PSBudWxsKVxuICAgICkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGxldCBmdXp6eURhdGU6IFNreUZ1enp5RGF0ZSB8IHVuZGVmaW5lZDtcbiAgICBsZXQgZnV6enlNb21lbnQ6IGFueTtcbiAgICBsZXQgZGF0ZVZhbHVlOiBEYXRlIHwgdW5kZWZpbmVkO1xuICAgIGxldCBmb3JtYXR0ZWREYXRlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBEYXRlKSB7XG4gICAgICBkYXRlVmFsdWUgPSB2YWx1ZTtcbiAgICAgIGZvcm1hdHRlZERhdGUgPSB0aGlzLiNkYXRlRm9ybWF0dGVyLmZvcm1hdCh2YWx1ZSwgdGhpcy5kYXRlRm9ybWF0KTtcbiAgICAgIGZ1enp5RGF0ZSA9IHRoaXMuI2Z1enp5RGF0ZVNlcnZpY2UuZ2V0RnV6enlEYXRlRnJvbVNlbGVjdGVkRGF0ZShcbiAgICAgICAgdmFsdWUsXG4gICAgICAgIHRoaXMuZGF0ZUZvcm1hdFxuICAgICAgKTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGZ1enp5RGF0ZSA9IHRoaXMuI2Z1enp5RGF0ZVNlcnZpY2UuZ2V0RnV6enlEYXRlRnJvbVN0cmluZyhcbiAgICAgICAgdmFsdWUsXG4gICAgICAgIHRoaXMuZGF0ZUZvcm1hdFxuICAgICAgKTtcbiAgICAgIGlmIChmdXp6eURhdGUpIHtcbiAgICAgICAgZm9ybWF0dGVkRGF0ZSA9IHRoaXMuI2Z1enp5RGF0ZVNlcnZpY2UuZm9ybWF0KFxuICAgICAgICAgIGZ1enp5RGF0ZSxcbiAgICAgICAgICB0aGlzLmRhdGVGb3JtYXQsXG4gICAgICAgICAgdGhpcy4jbG9jYWxlXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIGlmICghZm9ybWF0dGVkRGF0ZSkge1xuICAgICAgICBmb3JtYXR0ZWREYXRlID0gdmFsdWU7XG4gICAgICB9XG5cbiAgICAgIGZ1enp5TW9tZW50ID0gdGhpcy4jZnV6enlEYXRlU2VydmljZS5nZXRNb21lbnRGcm9tRnV6enlEYXRlKGZ1enp5RGF0ZSk7XG5cbiAgICAgIGlmIChmdXp6eU1vbWVudCkge1xuICAgICAgICBkYXRlVmFsdWUgPSBmdXp6eU1vbWVudC50b0RhdGUoKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgZnV6enlEYXRlID0gdmFsdWUgYXMgU2t5RnV6enlEYXRlO1xuICAgICAgZm9ybWF0dGVkRGF0ZSA9IHRoaXMuI2Z1enp5RGF0ZVNlcnZpY2UuZm9ybWF0KFxuICAgICAgICBmdXp6eURhdGUsXG4gICAgICAgIHRoaXMuZGF0ZUZvcm1hdCxcbiAgICAgICAgdGhpcy4jbG9jYWxlXG4gICAgICApO1xuICAgICAgZnV6enlNb21lbnQgPSB0aGlzLiNmdXp6eURhdGVTZXJ2aWNlLmdldE1vbWVudEZyb21GdXp6eURhdGUoZnV6enlEYXRlKTtcblxuICAgICAgaWYgKGZ1enp5TW9tZW50KSB7XG4gICAgICAgIGRhdGVWYWx1ZSA9IGZ1enp5TW9tZW50LnRvRGF0ZSgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGFyZUZ1enp5RGF0ZXNFcXVhbCA9IHRoaXMuI2Z1enp5RGF0ZXNFcXVhbCh0aGlzLiNfdmFsdWUsIGZ1enp5RGF0ZSk7XG4gICAgY29uc3QgaXNOZXdWYWx1ZSA9IGZ1enp5RGF0ZSAhPT0gdGhpcy4jX3ZhbHVlIHx8ICFhcmVGdXp6eURhdGVzRXF1YWw7XG5cbiAgICB0aGlzLiNfdmFsdWUgPSBmdXp6eURhdGUgfHwgdmFsdWU7XG5cbiAgICBpZiAoaXNOZXdWYWx1ZSkge1xuICAgICAgaWYgKGVtaXRFdmVudCkge1xuICAgICAgICB0aGlzLiNvbkNoYW5nZSh0aGlzLiNfdmFsdWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy4jY29udHJvbD8uc2V0VmFsdWUodGhpcy4jX3ZhbHVlLCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuI2RhdGVwaWNrZXJDb21wb25lbnQuc2VsZWN0ZWREYXRlID0gZGF0ZVZhbHVlO1xuICAgIH1cblxuICAgIHRoaXMuI3NldElucHV0RWxlbWVudFZhbHVlKGZvcm1hdHRlZERhdGUgfHwgJycpO1xuICB9XG59XG4iXX0=
461
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZXBpY2tlci1pbnB1dC1mdXp6eS5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvZGF0ZXRpbWUvc3JjL2xpYi9tb2R1bGVzL2RhdGVwaWNrZXIvZGF0ZXBpY2tlci1pbnB1dC1mdXp6eS5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxPQUFPLEVBSUwsU0FBUyxFQUVULFlBQVksRUFDWixLQUFLLEVBR0wsUUFBUSxFQUVSLFVBQVUsR0FDWCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBR0wsYUFBYSxFQUNiLGlCQUFpQixHQUdsQixNQUFNLGdCQUFnQixDQUFDO0FBR3hCLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0IsT0FBTyxFQUFFLG9CQUFvQixFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRWpFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGtCQUFrQixDQUFDOzs7Ozs7QUFNcEQsTUFBTSxtQ0FBbUMsR0FBRztJQUMxQyxPQUFPLEVBQUUsaUJBQWlCO0lBQzFCLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsZ0NBQWdDLENBQUM7SUFDL0QsS0FBSyxFQUFFLElBQUk7Q0FDWixDQUFDO0FBRUYsTUFBTSw4QkFBOEIsR0FBRztJQUNyQyxPQUFPLEVBQUUsYUFBYTtJQUN0QixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLGdDQUFnQyxDQUFDO0lBQy9ELEtBQUssRUFBRSxJQUFJO0NBQ1osQ0FBQztBQVNGLE1BQU0sT0FBTyxnQ0FBZ0M7SUE2TDNDLFlBQ0UsY0FBaUMsRUFDakMsYUFBeUMsRUFDekMsVUFBc0IsRUFDdEIsZ0JBQXFDLEVBQ3JDLGNBQW9DLEVBQ3BDLFFBQW1CLEVBQ25CLGdCQUF3QyxFQUM1QixtQkFBNEM7O1FBMUYxRDs7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a0JLLFlBQVk7c0JBRHRCLEtBQUs7Z0JBcUpDLGFBQWE7c0JBRG5CLFlBQVk7dUJBQUMsUUFBUSxFQUFFLENBQUMsUUFBUSxDQUFDO2dCQU0zQixXQUFXO3NCQURqQixZQUFZO3VCQUFDLE1BQU07Z0JBZ0JiLE9BQU87c0JBRGIsWUFBWTt1QkFBQyxPQUFPIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQWZ0ZXJDb250ZW50SW5pdCxcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIERpcmVjdGl2ZSxcbiAgRWxlbWVudFJlZixcbiAgSG9zdExpc3RlbmVyLFxuICBJbnB1dCxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIE9wdGlvbmFsLFxuICBSZW5kZXJlcjIsXG4gIGZvcndhcmRSZWYsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgQWJzdHJhY3RDb250cm9sLFxuICBDb250cm9sVmFsdWVBY2Nlc3NvcixcbiAgTkdfVkFMSURBVE9SUyxcbiAgTkdfVkFMVUVfQUNDRVNTT1IsXG4gIFZhbGlkYXRpb25FcnJvcnMsXG4gIFZhbGlkYXRvcixcbn0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgU2t5QXBwTG9jYWxlUHJvdmlkZXIsIFNreUxpYlJlc291cmNlc1NlcnZpY2UgfSBmcm9tICdAc2t5dXgvaTE4bic7XG5cbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGRpc3RpbmN0VW50aWxDaGFuZ2VkLCB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7IFNreURhdGVGb3JtYXR0ZXIgfSBmcm9tICcuL2RhdGUtZm9ybWF0dGVyJztcbmltcG9ydCB7IFNreURhdGVwaWNrZXJDb25maWdTZXJ2aWNlIH0gZnJvbSAnLi9kYXRlcGlja2VyLWNvbmZpZy5zZXJ2aWNlJztcbmltcG9ydCB7IFNreURhdGVwaWNrZXJDb21wb25lbnQgfSBmcm9tICcuL2RhdGVwaWNrZXIuY29tcG9uZW50JztcbmltcG9ydCB7IFNreUZ1enp5RGF0ZSB9IGZyb20gJy4vZnV6enktZGF0ZSc7XG5pbXBvcnQgeyBTa3lGdXp6eURhdGVTZXJ2aWNlIH0gZnJvbSAnLi9mdXp6eS1kYXRlLnNlcnZpY2UnO1xuXG5jb25zdCBTS1lfRlVaWllfREFURVBJQ0tFUl9WQUxVRV9BQ0NFU1NPUiA9IHtcbiAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IFNreUZ1enp5RGF0ZXBpY2tlcklucHV0RGlyZWN0aXZlKSxcbiAgbXVsdGk6IHRydWUsXG59O1xuXG5jb25zdCBTS1lfRlVaWllfREFURVBJQ0tFUl9WQUxJREFUT1IgPSB7XG4gIHByb3ZpZGU6IE5HX1ZBTElEQVRPUlMsXG4gIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IFNreUZ1enp5RGF0ZXBpY2tlcklucHV0RGlyZWN0aXZlKSxcbiAgbXVsdGk6IHRydWUsXG59O1xuXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6ICdbc2t5RnV6enlEYXRlcGlja2VySW5wdXRdJyxcbiAgcHJvdmlkZXJzOiBbXG4gICAgU0tZX0ZVWlpZX0RBVEVQSUNLRVJfVkFMVUVfQUNDRVNTT1IsXG4gICAgU0tZX0ZVWlpZX0RBVEVQSUNLRVJfVkFMSURBVE9SLFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBTa3lGdXp6eURhdGVwaWNrZXJJbnB1dERpcmVjdGl2ZVxuICBpbXBsZW1lbnRzXG4gICAgT25Jbml0LFxuICAgIE9uRGVzdHJveSxcbiAgICBBZnRlclZpZXdJbml0LFxuICAgIEFmdGVyQ29udGVudEluaXQsXG4gICAgQ29udHJvbFZhbHVlQWNjZXNzb3IsXG4gICAgVmFsaWRhdG9yXG57XG4gIC8qKlxuICAgKiBTcGVjaWZpZXMgdGhlIGRhdGUgZm9ybWF0IGZvciB0aGUgaW5wdXQuIFBsYWNlIHRoaXMgYXR0cmlidXRlIG9uIHRoZSBgaW5wdXRgIGVsZW1lbnRcbiAgICogdG8gb3ZlcnJpZGUgdGhlIGRlZmF1bHQgaW4gYFNreURhdGVwaWNrZXJDb25maWdTZXJ2aWNlYC5cbiAgICogQGRlZmF1bHQgXCJNTS9ERC9ZWVlZXCJcbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgZGF0ZUZvcm1hdCh2YWx1ZTogc3RyaW5nIHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy4jX2RhdGVGb3JtYXQgPSB2YWx1ZTtcblxuICAgIGlmICh0aGlzLiN2YWx1ZSkge1xuICAgICAgY29uc3QgZm9ybWF0dGVkRGF0ZSA9IHRoaXMuI2Z1enp5RGF0ZVNlcnZpY2UuZm9ybWF0KFxuICAgICAgICB0aGlzLiN2YWx1ZSxcbiAgICAgICAgdGhpcy5kYXRlRm9ybWF0LFxuICAgICAgICB0aGlzLiNsb2NhbGVcbiAgICAgICk7XG4gICAgICB0aGlzLiNzZXRJbnB1dEVsZW1lbnRWYWx1ZShmb3JtYXR0ZWREYXRlKTtcbiAgICAgIHRoaXMuI2NoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cbiAgfVxuXG4gIC8vIFRPRE86IFJlZmFjdG9yIHRvIG5vdCBoYXZlIGdldHRlciBsb2dpY1xuICBwdWJsaWMgZ2V0IGRhdGVGb3JtYXQoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy4jX2RhdGVGb3JtYXQgfHxcbiAgICAgIHRoaXMuI2NvbmZpZ1NlcnZpY2UuZGF0ZUZvcm1hdCB8fFxuICAgICAgdGhpcy4jcHJlZmVycmVkU2hvcnREYXRlRm9ybWF0XG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgd2hldGhlciB0byBkaXNhYmxlIHRoZSBkYXRlcGlja2VyLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBkaXNhYmxlZCh2YWx1ZTogYm9vbGVhbiB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuI19kaXNhYmxlZCA9IHZhbHVlO1xuICAgIHRoaXMuI2RhdGVwaWNrZXJDb21wb25lbnQuZGlzYWJsZWQgPSB2YWx1ZTtcblxuICAgIHRoaXMuI3JlbmRlcmVyLnNldFByb3BlcnR5KFxuICAgICAgdGhpcy4jZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LFxuICAgICAgJ2Rpc2FibGVkJyxcbiAgICAgIHZhbHVlXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgZGlzYWJsZWQoKTogYm9vbGVhbiB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuI19kaXNhYmxlZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgd2hldGhlciB0byBwcmV2ZW50IHVzZXJzIGZyb20gc3BlY2lmeWluZyBkYXRlcyB0aGF0IGFyZSBpbiB0aGUgZnV0dXJlLlxuICAgKiBQbGFjZSB0aGlzIGF0dHJpYnV0ZSBvbiB0aGUgYGlucHV0YCBlbGVtZW50LlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBmdXR1cmVEaXNhYmxlZCh2YWx1ZTogYm9vbGVhbiB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuI19mdXR1cmVEaXNhYmxlZCA9IHZhbHVlO1xuICAgIHRoaXMuI29uVmFsaWRhdG9yQ2hhbmdlKCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGZ1dHVyZURpc2FibGVkKCk6IGJvb2xlYW4gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLiNfZnV0dXJlRGlzYWJsZWQ7XG4gIH1cblxuICAvKipcbiAgICogU3BlY2lmaWVzIHRoZSBsYXRlc3QgZnV6enkgZGF0ZSBhbGxvd2VkLiBQbGFjZSB0aGlzIGF0dHJpYnV0ZSBvbiB0aGUgYGlucHV0YCBlbGVtZW50XG4gICAqIHRvIHByZXZlbnQgZnV6enkgZGF0ZXMgYWZ0ZXIgYSBzcGVjaWZpZWQgZGF0ZS4gVGhpcyBwcm9wZXJ0eSBhY2NlcHRzXG4gICAqIGEgYFNreUZ1enp5RGF0ZWAgdmFsdWUgdGhhdCBpbmNsdWRlcyBudW1lcmljIG1vbnRoLCBkYXksIGFuZCB5ZWFyIHZhbHVlcy5cbiAgICogRm9yIGV4YW1wbGU6IGB7IG1vbnRoOiAxLCBkYXk6IDEsIHllYXI6IDIwMjcgfWAuXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IG1heERhdGUodmFsdWU6IFNreUZ1enp5RGF0ZSB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuI19tYXhEYXRlID0gdmFsdWU7XG4gICAgdGhpcy4jZGF0ZXBpY2tlckNvbXBvbmVudC5tYXhEYXRlID0gdGhpcy4jZ2V0TWF4RGF0ZSgpO1xuICAgIHRoaXMuI29uVmFsaWRhdG9yQ2hhbmdlKCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IG1heERhdGUoKTogU2t5RnV6enlEYXRlIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy4jX21heERhdGU7XG4gIH1cblxuICAvKipcbiAgICogU3BlY2lmaWVzIHRoZSBlYXJsaWVzdCBmdXp6eSBkYXRlIGFsbG93ZWQuIFBsYWNlIHRoaXMgYXR0cmlidXRlIG9uIHRoZSBgaW5wdXRgIGVsZW1lbnRcbiAgICogdG8gcHJldmVudCBmdXp6eSBkYXRlcyBiZWZvcmUgYSBzcGVjaWZpZWQgZGF0ZS4gVGhpcyBwcm9wZXJ0eSBhY2NlcHRzIGEgYFNreUZ1enp5RGF0ZWAgdmFsdWVcbiAgICogdGhhdCBpbmNsdWRlcyBudW1lcmljIG1vbnRoLCBkYXksIGFuZCB5ZWFyIHZhbHVlcy5cbiAgICogRm9yIGV4YW1wbGU6IGB7IG1vbnRoOiAxLCBkYXk6IDEsIHllYXI6IDIwMDcgfWAuXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IG1pbkRhdGUodmFsdWU6IFNreUZ1enp5RGF0ZSB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuI19taW5EYXRlID0gdmFsdWU7XG4gICAgdGhpcy4jZGF0ZXBpY2tlckNvbXBvbmVudC5taW5EYXRlID0gdGhpcy4jZ2V0TWluRGF0ZSgpO1xuICAgIHRoaXMuI29uVmFsaWRhdG9yQ2hhbmdlKCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IG1pbkRhdGUoKTogU2t5RnV6enlEYXRlIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy4jX21pbkRhdGU7XG4gIH1cblxuICAvKipcbiAgICogSW5kaWNhdGVzIHdoZXRoZXIgdG8gZGlzYWJsZSBkYXRlIHZhbGlkYXRpb24gb24gdGhlIGZ1enp5IGRhdGVwaWNrZXIgaW5wdXQuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2t5RGF0ZXBpY2tlck5vVmFsaWRhdGU6IGJvb2xlYW4gfCB1bmRlZmluZWQgPSBmYWxzZTtcblxuICAvKipcbiAgICogU3BlY2lmaWVzIHRoZSBzdGFydGluZyBkYXkgb2YgdGhlIHdlZWsgaW4gdGhlIGNhbGVuZGFyLCB3aGVyZSBgMGAgc2V0cyB0aGUgc3RhcnRpbmcgZGF5XG4gICAqIHRvIFN1bmRheS4gUGxhY2UgdGhpcyBhdHRyaWJ1dGUgb24gdGhlIGBpbnB1dGAgZWxlbWVudCB0byBvdmVycmlkZSB0aGUgZGVmYXVsdFxuICAgKiBpbiBgU2t5RGF0ZXBpY2tlckNvbmZpZ1NlcnZpY2VgLlxuICAgKiBAZGVmYXVsdCAwXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IHN0YXJ0aW5nRGF5KHZhbHVlOiBudW1iZXIgfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLiNfc3RhcnRpbmdEYXkgPSB2YWx1ZTtcbiAgICB0aGlzLiNkYXRlcGlja2VyQ29tcG9uZW50LnN0YXJ0aW5nRGF5ID0gdGhpcy5zdGFydGluZ0RheTtcblxuICAgIHRoaXMuI29uVmFsaWRhdG9yQ2hhbmdlKCk7XG4gIH1cblxuICAvLyBUT0RPOiBSZWZhY3RvciB0byBub3QgaGF2ZSBnZXR0ZXIgbG9naWNcbiAgcHVibGljIGdldCBzdGFydGluZ0RheSgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLiNfc3RhcnRpbmdEYXkgfHwgdGhpcy4jY29uZmlnU2VydmljZS5zdGFydGluZ0RheTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgd2hldGhlciB0byByZXF1aXJlIHRoZSB5ZWFyIGluIGZ1enp5IGRhdGVzLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNldCB5ZWFyUmVxdWlyZWQodmFsdWU6IGJvb2xlYW4gfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLiNfeWVhclJlcXVpcmVkID0gdmFsdWU7XG4gICAgdGhpcy4jb25WYWxpZGF0b3JDaGFuZ2UoKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgeWVhclJlcXVpcmVkKCk6IGJvb2xlYW4gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLiNfeWVhclJlcXVpcmVkO1xuICB9XG5cbiAgZ2V0ICN2YWx1ZSgpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLiNfdmFsdWU7XG4gIH1cblxuICBzZXQgI3ZhbHVlKHZhbHVlOiBhbnkpIHtcbiAgICB0aGlzLiN1cGRhdGVWYWx1ZSh2YWx1ZSk7XG4gIH1cblxuICAjY29udHJvbDogQWJzdHJhY3RDb250cm9sIHwgdW5kZWZpbmVkO1xuXG4gICNkYXRlRm9ybWF0dGVyID0gbmV3IFNreURhdGVGb3JtYXR0ZXIoKTtcblxuICAjbG9jYWxlOiBzdHJpbmc7XG5cbiAgI3ByZWZlcnJlZFNob3J0RGF0ZUZvcm1hdDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gICNuZ1Vuc3Vic2NyaWJlID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICAjX2Z1dHVyZURpc2FibGVkOiBib29sZWFuIHwgdW5kZWZpbmVkID0gZmFsc2U7XG5cbiAgI19kYXRlRm9ybWF0OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgI19kaXNhYmxlZDogYm9vbGVhbiB8IHVuZGVmaW5lZCA9IGZhbHNlO1xuXG4gICNfbWF4RGF0ZTogU2t5RnV6enlEYXRlIHwgdW5kZWZpbmVkO1xuXG4gICNfbWluRGF0ZTogU2t5RnV6enlEYXRlIHwgdW5kZWZpbmVkO1xuXG4gICNfc3RhcnRpbmdEYXk6IG51bWJlciB8IHVuZGVmaW5lZDtcblxuICAjX3ZhbHVlOiBhbnk7XG5cbiAgI195ZWFyUmVxdWlyZWQ6IGJvb2xlYW4gfCB1bmRlZmluZWQgPSBmYWxzZTtcblxuICAjY2hhbmdlRGV0ZWN0b3I6IENoYW5nZURldGVjdG9yUmVmO1xuICAjY29uZmlnU2VydmljZTogU2t5RGF0ZXBpY2tlckNvbmZpZ1NlcnZpY2U7XG4gICNlbGVtZW50UmVmOiBFbGVtZW50UmVmO1xuICAjZnV6enlEYXRlU2VydmljZTogU2t5RnV6enlEYXRlU2VydmljZTtcbiAgI3JlbmRlcmVyOiBSZW5kZXJlcjI7XG4gICNyZXNvdXJjZXNTZXJ2aWNlOiBTa3lMaWJSZXNvdXJjZXNTZXJ2aWNlO1xuICAjZGF0ZXBpY2tlckNvbXBvbmVudDogU2t5RGF0ZXBpY2tlckNvbXBvbmVudDtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBjaGFuZ2VEZXRlY3RvcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgY29uZmlnU2VydmljZTogU2t5RGF0ZXBpY2tlckNvbmZpZ1NlcnZpY2UsXG4gICAgZWxlbWVudFJlZjogRWxlbWVudFJlZixcbiAgICBmdXp6eURhdGVTZXJ2aWNlOiBTa3lGdXp6eURhdGVTZXJ2aWNlLFxuICAgIGxvY2FsZVByb3ZpZGVyOiBTa3lBcHBMb2NhbGVQcm92aWRlcixcbiAgICByZW5kZXJlcjogUmVuZGVyZXIyLFxuICAgIHJlc291cmNlc1NlcnZpY2U6IFNreUxpYlJlc291cmNlc1NlcnZpY2UsXG4gICAgQE9wdGlvbmFsKCkgZGF0ZXBpY2tlckNvbXBvbmVudD86IFNreURhdGVwaWNrZXJDb21wb25lbnRcbiAgKSB7XG4gICAgaWYgKCFkYXRlcGlja2VyQ29tcG9uZW50KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICdZb3UgbXVzdCB3cmFwIHRoZSBgc2t5RnV6enlEYXRlcGlja2VySW5wdXRgIGRpcmVjdGl2ZSB3aXRoaW4gYSAnICtcbiAgICAgICAgICAnYDxza3ktZGF0ZXBpY2tlcj5gIGNvbXBvbmVudCEnXG4gICAgICApO1xuICAgIH1cblxuICAgIHRoaXMuI2NoYW5nZURldGVjdG9yID0gY2hhbmdlRGV0ZWN0b3I7XG4gICAgdGhpcy4jY29uZmlnU2VydmljZSA9IGNvbmZpZ1NlcnZpY2U7XG4gICAgdGhpcy4jZWxlbWVudFJlZiA9IGVsZW1lbnRSZWY7XG4gICAgdGhpcy4jZnV6enlEYXRlU2VydmljZSA9IGZ1enp5RGF0ZVNlcnZpY2U7XG4gICAgdGhpcy4jcmVuZGVyZXIgPSByZW5kZXJlcjtcbiAgICB0aGlzLiNyZXNvdXJjZXNTZXJ2aWNlID0gcmVzb3VyY2VzU2VydmljZTtcbiAgICB0aGlzLiNkYXRlcGlja2VyQ29tcG9uZW50ID0gZGF0ZXBpY2tlckNvbXBvbmVudDtcblxuICAgIHRoaXMuI2xvY2FsZSA9IGxvY2FsZVByb3ZpZGVyLmRlZmF1bHRMb2NhbGU7XG4gICAgbG9jYWxlUHJvdmlkZXJcbiAgICAgIC5nZXRMb2NhbGVJbmZvKClcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLiNuZ1Vuc3Vic2NyaWJlKSlcbiAgICAgIC5zdWJzY3JpYmUoKGxvY2FsZUluZm8pID0+IHtcbiAgICAgICAgdGhpcy4jbG9jYWxlID0gbG9jYWxlSW5mby5sb2NhbGU7XG4gICAgICAgIFNreURhdGVGb3JtYXR0ZXIuc2V0TG9jYWxlKHRoaXMuI2xvY2FsZSk7XG4gICAgICAgIHRoaXMuI3ByZWZlcnJlZFNob3J0RGF0ZUZvcm1hdCA9XG4gICAgICAgICAgU2t5RGF0ZUZvcm1hdHRlci5nZXRQcmVmZXJyZWRTaG9ydERhdGVGb3JtYXQoKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnllYXJSZXF1aXJlZCkge1xuICAgICAgaWYgKHRoaXMuZGF0ZUZvcm1hdD8udG9Mb3dlckNhc2UoKS5pbmRleE9mKCd5JykgPT09IC0xKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAnWW91IGhhdmUgY29uZmlndXJlZCBjb25mbGljdGluZyBzZXR0aW5ncy4gWWVhciBpcyByZXF1aXJlZCBhbmQgZGF0ZUZvcm1hdCBkb2VzIG5vdCBpbmNsdWRlIHllYXIuJ1xuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLiNlbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7XG5cbiAgICB0aGlzLiNyZW5kZXJlci5hZGRDbGFzcyhlbGVtZW50LCAnc2t5LWZvcm0tY29udHJvbCcpO1xuXG4gICAgY29uc3QgaGFzQXJpYUxhYmVsID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2FyaWEtbGFiZWwnKTtcblxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgaWYgKCFoYXNBcmlhTGFiZWwpIHtcbiAgICAgIHRoaXMuI3Jlc291cmNlc1NlcnZpY2VcbiAgICAgICAgLmdldFN0cmluZygnc2t5dXhfZGF0ZV9maWVsZF9kZWZhdWx0X2xhYmVsJylcbiAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuI25nVW5zdWJzY3JpYmUpKVxuICAgICAgICAuc3Vic2NyaWJlKCh2YWx1ZTogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgdGhpcy4jcmVuZGVyZXIuc2V0QXR0cmlidXRlKGVsZW1lbnQsICdhcmlhLWxhYmVsJywgdmFsdWUpO1xuICAgICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgbmdBZnRlckNvbnRlbnRJbml0KCk6IHZvaWQge1xuICAgIHRoaXMuI2RhdGVwaWNrZXJDb21wb25lbnQuZGF0ZUNoYW5nZVxuICAgICAgLnBpcGUoZGlzdGluY3RVbnRpbENoYW5nZWQoKSwgdGFrZVVudGlsKHRoaXMuI25nVW5zdWJzY3JpYmUpKVxuICAgICAgLnN1YnNjcmliZSgodmFsdWU6IERhdGUpID0+IHtcbiAgICAgICAgdGhpcy4jdmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgdGhpcy4jb25Ub3VjaGVkKCk7XG4gICAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgLy8gVGhpcyBpcyBuZWVkZWQgdG8gYWRkcmVzcyBhIGJ1ZyBpbiBBbmd1bGFyIDQuXG4gICAgLy8gV2hlbiBhIGNvbnRyb2wgdmFsdWUgaXMgc2V0IGluaXRpYWxseSwgaXRzIHZhbHVlIGlzIG5vdCByZXByZXNlbnRlZCBvbiB0aGUgdmlldy5cbiAgICAvLyBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9hbmd1bGFyL2FuZ3VsYXIvaXNzdWVzLzEzNzkyXG4gICAgLy8gT2Ygbm90ZSBpcyB0aGUgcGFyZW50IGNoZWNrIHdoaWNoIGFsbG93cyB1cyB0byBkZXRlcm1pbmUgaWYgdGhlIGZvcm0gaXMgcmVhY3RpdmUuXG4gICAgLy8gV2l0aG91dCB0aGlzIGNoZWNrIHRoZXJlIGlzIGEgY2hhbmdlZCBiZWZvcmUgY2hlY2tlZCBlcnJvclxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG5cbiAgICBpZiAodGhpcy4jY29udHJvbCAmJiB0aGlzLiNjb250cm9sLnBhcmVudCkge1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMuI2NvbnRyb2w/LnNldFZhbHVlKHRoaXMuI3ZhbHVlLCB7XG4gICAgICAgICAgZW1pdEV2ZW50OiBmYWxzZSxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy4jY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy4jbmdVbnN1YnNjcmliZS5uZXh0KCk7XG4gICAgdGhpcy4jbmdVbnN1YnNjcmliZS5jb21wbGV0ZSgpO1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignY2hhbmdlJywgWyckZXZlbnQnXSlcbiAgcHVibGljIG9uSW5wdXRDaGFuZ2UoZXZlbnQ6IGFueSkge1xuICAgIHRoaXMuI29uVmFsdWVDaGFuZ2UoZXZlbnQudGFyZ2V0LnZhbHVlKTtcbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ2JsdXInKVxuICBwdWJsaWMgb25JbnB1dEJsdXIoKTogdm9pZCB7XG4gICAgdGhpcy4jb25Ub3VjaGVkKCk7XG5cbiAgICBjb25zdCBmb3JtYXR0ZWREYXRlID0gdGhpcy4jZnV6enlEYXRlU2VydmljZS5mb3JtYXQoXG4gICAgICB0aGlzLiN2YWx1ZSxcbiAgICAgIHRoaXMuZGF0ZUZvcm1hdCxcbiAgICAgIHRoaXMuI2xvY2FsZVxuICAgICk7XG5cbiAgICBpZiAodGhpcy4jY29udHJvbD8udmFsaWQpIHtcbiAgICAgIHRoaXMuI3NldElucHV0RWxlbWVudFZhbHVlKGZvcm1hdHRlZERhdGUpO1xuICAgIH1cbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ2lucHV0JylcbiAgcHVibGljIG9uSW5wdXQoKTogdm9pZCB7XG4gICAgdGhpcy4jY29udHJvbD8ubWFya0FzRGlydHkoKTtcbiAgfVxuXG4gIHB1YmxpYyB3cml0ZVZhbHVlKHZhbHVlOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLiN1cGRhdGVWYWx1ZSh2YWx1ZSwgZmFsc2UpO1xuICB9XG5cbiAgcHVibGljIHZhbGlkYXRlKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsIHtcbiAgICBpZiAoIXRoaXMuI2NvbnRyb2wpIHtcbiAgICAgIHRoaXMuI2NvbnRyb2wgPSBjb250cm9sO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnNreURhdGVwaWNrZXJOb1ZhbGlkYXRlKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuI2NvbnRyb2wudmFsdWUpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IHZhbHVlOiBhbnkgPSBjb250cm9sLnZhbHVlO1xuXG4gICAgbGV0IGZ1enp5RGF0ZTogU2t5RnV6enlEYXRlIHwgdW5kZWZpbmVkO1xuICAgIGxldCB2YWxpZGF0aW9uRXJyb3I6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsID0gbnVsbDtcblxuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICBmdXp6eURhdGUgPSB0aGlzLiNmdXp6eURhdGVTZXJ2aWNlLmdldEZ1enp5RGF0ZUZyb21TdHJpbmcoXG4gICAgICAgIHZhbHVlLFxuICAgICAgICB0aGlzLmRhdGVGb3JtYXRcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGZ1enp5RGF0ZSA9IHZhbHVlO1xuICAgIH1cblxuICAgIGlmICghZnV6enlEYXRlKSB7XG4gICAgICB2YWxpZGF0aW9uRXJyb3IgPSB7XG4gICAgICAgIHNreUZ1enp5RGF0ZToge1xuICAgICAgICAgIGludmFsaWQ6IHZhbHVlLFxuICAgICAgICB9LFxuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKCFmdXp6eURhdGUueWVhciAmJiB0aGlzLnllYXJSZXF1aXJlZCkge1xuICAgICAgICB2YWxpZGF0aW9uRXJyb3IgPSB7XG4gICAgICAgICAgc2t5RnV6enlEYXRlOiB7XG4gICAgICAgICAgICB5ZWFyUmVxdWlyZWQ6IHZhbHVlLFxuICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIGlmICghdmFsaWRhdGlvbkVycm9yICYmIGZ1enp5RGF0ZS55ZWFyKSB7XG4gICAgICAgIGxldCBmdXp6eURhdGVSYW5nZTtcblxuICAgICAgICBpZiAodGhpcy5tYXhEYXRlKSB7XG4gICAgICAgICAgZnV6enlEYXRlUmFuZ2UgPSB0aGlzLiNmdXp6eURhdGVTZXJ2aWNlLmdldEZ1enp5RGF0ZVJhbmdlKFxuICAgICAgICAgICAgZnV6enlEYXRlLFxuICAgICAgICAgICAgdGhpcy5tYXhEYXRlXG4gICAgICAgICAgKTtcblxuICAgICAgICAgIGlmICghZnV6enlEYXRlUmFuZ2UudmFsaWQpIHtcbiAgICAgICAgICAgIHZhbGlkYXRpb25FcnJvciA9IHtcbiAgICAgICAgICAgICAgc2t5RnV6enlEYXRlOiB7XG4gICAgICAgICAgICAgICAgbWF4RGF0ZTogdmFsdWUsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdmFsaWRhdGlvbkVycm9yICYmIHRoaXMubWluRGF0ZSkge1xuICAgICAgICAgIGZ1enp5RGF0ZVJhbmdlID0gdGhpcy4jZnV6enlEYXRlU2VydmljZS5nZXRGdXp6eURhdGVSYW5nZShcbiAgICAgICAgICAgIHRoaXMubWluRGF0ZSxcbiAgICAgICAgICAgIGZ1enp5RGF0ZVxuICAgICAgICAgICk7XG4gICAgICAgICAgaWYgKCFmdXp6eURhdGVSYW5nZS52YWxpZCkge1xuICAgICAgICAgICAgdmFsaWRhdGlvbkVycm9yID0ge1xuICAgICAgICAgICAgICBza3lGdXp6eURhdGU6IHtcbiAgICAgICAgICAgICAgICBtaW5EYXRlOiB2YWx1ZSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF2YWxpZGF0aW9uRXJyb3IgJiYgdGhpcy5mdXR1cmVEaXNhYmxlZCkge1xuICAgICAgICAgIGZ1enp5RGF0ZVJhbmdlID0gdGhpcy4jZnV6enlEYXRlU2VydmljZS5nZXRGdXp6eURhdGVSYW5nZShcbiAgICAgICAgICAgIGZ1enp5RGF0ZSxcbiAgICAgICAgICAgIHRoaXMuI2Z1enp5RGF0ZVNlcnZpY2UuZ2V0Q3VycmVudEZ1enp5RGF0ZSgpXG4gICAgICAgICAgKTtcbiAgICAgICAgICBpZiAoIWZ1enp5RGF0ZVJhbmdlLnZhbGlkKSB7XG4gICAgICAgICAgICB2YWxpZGF0aW9uRXJyb3IgPSB7XG4gICAgICAgICAgICAgIHNreUZ1enp5RGF0ZToge1xuICAgICAgICAgICAgICAgIGZ1dHVyZURpc2FibGVkOiB2YWx1ZSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHZhbGlkYXRpb25FcnJvcikge1xuICAgICAgLy8gTWFyayB0aGUgaW52YWxpZCBjb250cm9sIGFzIHRvdWNoZWQgc28gdGhhdCB0aGUgaW5wdXQncyBpbnZhbGlkIENTUyBzdHlsZXMgYXBwZWFyLlxuICAgICAgLy8gKFRoaXMgaXMgb25seSByZXF1aXJlZCB3aGVuIHRoZSBpbnZhbGlkIHZhbHVlIGlzIHNldCBieSB0aGUgRm9ybUNvbnRyb2wgY29uc3RydWN0b3IuKVxuICAgICAgdGhpcy4jY29udHJvbC5tYXJrQXNUb3VjaGVkKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbGlkYXRpb25FcnJvcjtcbiAgfVxuXG4gIHB1YmxpYyByZWdpc3Rlck9uQ2hhbmdlKGZuOiAodmFsdWU6IGFueSkgPT4gdm9pZCk6IHZvaWQge1xuICAgIHRoaXMuI29uQ2hhbmdlID0gZm47XG4gIH1cblxuICBwdWJsaWMgcmVnaXN0ZXJPblRvdWNoZWQoZm46ICgpID0+IHZvaWQpOiB2b2lkIHtcbiAgICB0aGlzLiNvblRvdWNoZWQgPSBmbjtcbiAgfVxuXG4gIHB1YmxpYyByZWdpc3Rlck9uVmFsaWRhdG9yQ2hhbmdlKGZuOiAoKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgdGhpcy4jb25WYWxpZGF0b3JDaGFuZ2UgPSBmbjtcbiAgfVxuXG4gIHB1YmxpYyBzZXREaXNhYmxlZFN0YXRlKGRpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5kaXNhYmxlZCA9IGRpc2FibGVkO1xuICAgIHRoaXMuI2RhdGVwaWNrZXJDb21wb25lbnQuZGlzYWJsZWQgPSBkaXNhYmxlZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXRlY3RzIGNoYW5nZXMgdG8gdGhlIHVuZGVybHlpbmcgaW5wdXQgZWxlbWVudCdzIHZhbHVlIGFuZCB1cGRhdGVzIHRoZSBuZ01vZGVsIGFjY29yZGluZ2x5LlxuICAgKiBUaGlzIGlzIHVzZWZ1bCBpZiB5b3UgbmVlZCB0byB1cGRhdGUgdGhlIG5nTW9kZWwgdmFsdWUgYmVmb3JlIHRoZSBpbnB1dCBlbGVtZW50IGxvc2VzIGZvY3VzLlxuICAgKi9cbiAgcHVibGljIGRldGVjdElucHV0VmFsdWVDaGFuZ2UoKTogdm9pZCB7XG4gICAgdGhpcy4jb25WYWx1ZUNoYW5nZSh0aGlzLiNlbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQudmFsdWUpO1xuICB9XG5cbiAgI29uVmFsdWVDaGFuZ2UobmV3VmFsdWU6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuI3ZhbHVlID0gbmV3VmFsdWU7XG4gIH1cblxuICAjc2V0SW5wdXRFbGVtZW50VmFsdWUodmFsdWU6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuI3JlbmRlcmVyLnNldFByb3BlcnR5KHRoaXMuI2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwgJ3ZhbHVlJywgdmFsdWUpO1xuICB9XG5cbiAgI2dldE1heERhdGUoKTogRGF0ZSB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKHRoaXMubWF4RGF0ZSkge1xuICAgICAgY29uc3QgbWF4RGF0ZSA9IHRoaXMuI2Z1enp5RGF0ZVNlcnZpY2UuZ2V0TW9tZW50RnJvbUZ1enp5RGF0ZShcbiAgICAgICAgdGhpcy5tYXhEYXRlXG4gICAgICApO1xuICAgICAgaWYgKG1heERhdGUuaXNWYWxpZCgpKSB7XG4gICAgICAgIHJldHVybiBtYXhEYXRlLnRvRGF0ZSgpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodGhpcy5mdXR1cmVEaXNhYmxlZCkge1xuICAgICAgcmV0dXJuIG5ldyBEYXRlKCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLiNjb25maWdTZXJ2aWNlLm1heERhdGU7XG4gIH1cblxuICAjZ2V0TWluRGF0ZSgpOiBEYXRlIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAodGhpcy5taW5EYXRlKSB7XG4gICAgICBjb25zdCBtaW5EYXRlID0gdGhpcy4jZnV6enlEYXRlU2VydmljZS5nZXRNb21lbnRGcm9tRnV6enlEYXRlKFxuICAgICAgICB0aGlzLm1pbkRhdGVcbiAgICAgICk7XG4gICAgICBpZiAobWluRGF0ZS5pc1ZhbGlkKCkpIHtcbiAgICAgICAgcmV0dXJuIG1pbkRhdGUudG9EYXRlKCk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzLiNjb25maWdTZXJ2aWNlLm1pbkRhdGU7XG4gIH1cblxuICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAjZnV6enlEYXRlc0VxdWFsKGRhdGVBPzogU2t5RnV6enlEYXRlLCBkYXRlQj86IFNreUZ1enp5RGF0ZSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoXG4gICAgICBkYXRlQSAhPT0gdW5kZWZpbmVkICYmXG4gICAgICBkYXRlQiAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAoKCFkYXRlQS5kYXkgJiYgIWRhdGVCLmRheSkgfHwgZGF0ZUEuZGF5ID09PSBkYXRlQi5kYXkpICYmXG4gICAgICAoKCFkYXRlQS5tb250aCAmJiAhZGF0ZUIubW9udGgpIHx8IGRhdGVBLm1vbnRoID09PSBkYXRlQi5tb250aCkgJiZcbiAgICAgICgoIWRhdGVBLnllYXIgJiYgIWRhdGVCLnllYXIpIHx8IGRhdGVBLnllYXIgPT09IGRhdGVCLnllYXIpXG4gICAgKTtcbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZW1wdHktZnVuY3Rpb25cbiAgLy8gaXN0YW5idWwgaWdub3JlIG5leHRcbiAgI29uQ2hhbmdlID0gKF86IGFueSkgPT4ge307XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZW1wdHktZnVuY3Rpb25cbiAgLy8gaXN0YW5idWwgaWdub3JlIG5leHRcbiAgI29uVG91Y2hlZCA9ICgpID0+IHt9O1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWVtcHR5LWZ1bmN0aW9uXG4gIC8vIGlzdGFuYnVsIGlnbm9yZSBuZXh0XG4gICNvblZhbGlkYXRvckNoYW5nZSA9ICgpID0+IHt9O1xuXG4gIC8qKlxuICAgKiBVcGRhdGUgdGhlIHZhbHVlIG9mIHRoZSBmb3JtIGNvbnRyb2wgYW5kIGlucHV0IGVsZW1lbnRcbiAgICogQHBhcmFtIGVtaXRFdmVudCBEZW5vdGVzIGlmIHdlIGVtaXQgYW4gZXZlbnQgdG8gdGhlIGNvbnN1bWVyJ3MgZm9ybSBjb250cm9sLiBXZSBkbyBub3Qgd2FudCB0byBkbyB0aGlzIGlmIHRoZSB2YWx1ZSBpcyBiZWluZyB1cGRhdGVkIHZpYSBhIGBzZXRWYWx1ZWAgY2FsbCBvciBhIGBwYXRjaFZhbHVlYCBjYWxsIGFzIHRoaXMgaXMgYWxyZWFkeSBoYW5kbGVkIGJ5IEFuZ3VsYXIuXG4gICAqIEluIHRoZXNlIGNhc2VzIHdlIGRvIG5vdCB3YW50IHRvIGZpcmUgYG9uQ2hhbmdlYCBhcyBpdCB3aWxsIGNhdXNlIGV4dHJhIGB2YWx1ZUNoYW5nZWAgYW5kIGBzdGF0dXNDaGFuZ2VgIGV2ZW50cyBhbmQgdGhlIHN0YXR1cyBvZiB0aGUgZm9ybSBzaG91bGQgbm90IGJlIGFmZmVjdGVkIGJ5IHRoZXNlIGNoYW5nZXMuXG4gICAqL1xuICAjdXBkYXRlVmFsdWUodmFsdWU6IGFueSwgZW1pdEV2ZW50ID0gdHJ1ZSk6IHZvaWQge1xuICAgIGlmIChcbiAgICAgIHRoaXMuI192YWx1ZSA9PT0gdmFsdWUgfHxcbiAgICAgICh0aGlzLiNfdmFsdWUgPT09IHVuZGVmaW5lZCAmJiB2YWx1ZSA9PT0gbnVsbClcbiAgICApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBsZXQgZnV6enlEYXRlOiBTa3lGdXp6eURhdGUgfCB1bmRlZmluZWQ7XG4gICAgbGV0IGZ1enp5TW9tZW50OiBhbnk7XG4gICAgbGV0IGRhdGVWYWx1ZTogRGF0ZSB8IHVuZGVmaW5lZDtcbiAgICBsZXQgZm9ybWF0dGVkRGF0ZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgRGF0ZSkge1xuICAgICAgZGF0ZVZhbHVlID0gdmFsdWU7XG4gICAgICBmb3JtYXR0ZWREYXRlID0gdGhpcy4jZGF0ZUZvcm1hdHRlci5mb3JtYXQodmFsdWUsIHRoaXMuZGF0ZUZvcm1hdCk7XG4gICAgICBmdXp6eURhdGUgPSB0aGlzLiNmdXp6eURhdGVTZXJ2aWNlLmdldEZ1enp5RGF0ZUZyb21TZWxlY3RlZERhdGUoXG4gICAgICAgIHZhbHVlLFxuICAgICAgICB0aGlzLmRhdGVGb3JtYXRcbiAgICAgICk7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICBmdXp6eURhdGUgPSB0aGlzLiNmdXp6eURhdGVTZXJ2aWNlLmdldEZ1enp5RGF0ZUZyb21TdHJpbmcoXG4gICAgICAgIHZhbHVlLFxuICAgICAgICB0aGlzLmRhdGVGb3JtYXRcbiAgICAgICk7XG4gICAgICBpZiAoZnV6enlEYXRlKSB7XG4gICAgICAgIGZvcm1hdHRlZERhdGUgPSB0aGlzLiNmdXp6eURhdGVTZXJ2aWNlLmZvcm1hdChcbiAgICAgICAgICBmdXp6eURhdGUsXG4gICAgICAgICAgdGhpcy5kYXRlRm9ybWF0LFxuICAgICAgICAgIHRoaXMuI2xvY2FsZVxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBpZiAoIWZvcm1hdHRlZERhdGUpIHtcbiAgICAgICAgZm9ybWF0dGVkRGF0ZSA9IHZhbHVlO1xuICAgICAgfVxuXG4gICAgICBmdXp6eU1vbWVudCA9IHRoaXMuI2Z1enp5RGF0ZVNlcnZpY2UuZ2V0TW9tZW50RnJvbUZ1enp5RGF0ZShmdXp6eURhdGUpO1xuXG4gICAgICBpZiAoZnV6enlNb21lbnQpIHtcbiAgICAgICAgZGF0ZVZhbHVlID0gZnV6enlNb21lbnQudG9EYXRlKCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGZ1enp5RGF0ZSA9IHZhbHVlIGFzIFNreUZ1enp5RGF0ZTtcbiAgICAgIGZvcm1hdHRlZERhdGUgPSB0aGlzLiNmdXp6eURhdGVTZXJ2aWNlLmZvcm1hdChcbiAgICAgICAgZnV6enlEYXRlLFxuICAgICAgICB0aGlzLmRhdGVGb3JtYXQsXG4gICAgICAgIHRoaXMuI2xvY2FsZVxuICAgICAgKTtcbiAgICAgIGZ1enp5TW9tZW50ID0gdGhpcy4jZnV6enlEYXRlU2VydmljZS5nZXRNb21lbnRGcm9tRnV6enlEYXRlKGZ1enp5RGF0ZSk7XG5cbiAgICAgIGlmIChmdXp6eU1vbWVudCkge1xuICAgICAgICBkYXRlVmFsdWUgPSBmdXp6eU1vbWVudC50b0RhdGUoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBhcmVGdXp6eURhdGVzRXF1YWwgPSB0aGlzLiNmdXp6eURhdGVzRXF1YWwodGhpcy4jX3ZhbHVlLCBmdXp6eURhdGUpO1xuICAgIGNvbnN0IGlzTmV3VmFsdWUgPSBmdXp6eURhdGUgIT09IHRoaXMuI192YWx1ZSB8fCAhYXJlRnV6enlEYXRlc0VxdWFsO1xuXG4gICAgdGhpcy4jX3ZhbHVlID0gZnV6enlEYXRlIHx8IHZhbHVlO1xuXG4gICAgaWYgKGlzTmV3VmFsdWUpIHtcbiAgICAgIGlmIChlbWl0RXZlbnQpIHtcbiAgICAgICAgdGhpcy4jb25DaGFuZ2UodGhpcy4jX3ZhbHVlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuI2NvbnRyb2w/LnNldFZhbHVlKHRoaXMuI192YWx1ZSwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgICAgfVxuXG4gICAgICB0aGlzLiNkYXRlcGlja2VyQ29tcG9uZW50LnNlbGVjdGVkRGF0ZSA9IGRhdGVWYWx1ZTtcbiAgICB9XG5cbiAgICB0aGlzLiNzZXRJbnB1dEVsZW1lbnRWYWx1ZShmb3JtYXR0ZWREYXRlIHx8ICcnKTtcbiAgfVxufVxuIl19
@@ -206,7 +206,7 @@ export class SkyDatepickerInputDirective {
206
206
  }
207
207
  ngAfterViewInit() {
208
208
  // This is needed to address a bug in Angular 4.
209
- // When a control value is set intially, its value is not represented on the view.
209
+ // When a control value is set initially, its value is not represented on the view.
210
210
  // See: https://github.com/angular/angular/issues/13792
211
211
  // Of note is the parent check which allows us to determine if the form is reactive.
212
212
  // Without this check there is a changed before checked error
@@ -492,4 +492,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.11", ngImpo
492
492
  type: HostListener,
493
493
  args: ['input']
494
494
  }] } });
495
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZXBpY2tlci1pbnB1dC5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvZGF0ZXRpbWUvc3JjL2xpYi9tb2R1bGVzL2RhdGVwaWNrZXIvZGF0ZXBpY2tlci1pbnB1dC5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxPQUFPLEVBSUwsU0FBUyxFQUVULFlBQVksRUFDWixLQUFLLEVBR0wsUUFBUSxFQUVSLFVBQVUsR0FDWCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBR0wsYUFBYSxFQUNiLGlCQUFpQixHQUdsQixNQUFNLGdCQUFnQixDQUFDO0FBR3hCLE9BQU8sTUFBTSxNQUFNLFFBQVEsQ0FBQztBQUM1QixPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9CLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVqRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNwRCxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQzs7Ozs7O0FBSTNFLE1BQU0sNkJBQTZCLEdBQUc7SUFDcEMsT0FBTyxFQUFFLGlCQUFpQjtJQUMxQixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLDJCQUEyQixDQUFDO0lBQzFELEtBQUssRUFBRSxJQUFJO0NBQ1osQ0FBQztBQUVGLE1BQU0sd0JBQXdCLEdBQUc7SUFDL0IsT0FBTyxFQUFFLGFBQWE7SUFDdEIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQywyQkFBMkIsQ0FBQztJQUMxRCxLQUFLLEVBQUUsSUFBSTtDQUNaLENBQUM7QUFVRixNQUFNLE9BQU8sMkJBQTJCO0lBb0x0QyxZQUNFLE9BQW9DLEVBQ3BDLGNBQWlDLEVBQ2pDLGFBQXlDLEVBQ3pDLFVBQXNCLEVBQ3RCLGNBQW9DLEVBQ3BDLFFBQW1CLEVBQ25CLGdCQUF3QyxFQUM1QixtQkFBNEM7O1FBbEYxRDs7O1dBR0c7UUFFSSw0QkFBdUIsR0FBd0IsS0FBSyxDQUFDO1FBOEM1RCx1REFBc0M7UUFDdEMscURBQWlCLElBQUksZ0JBQWdCLEVBQUUsRUFBQztRQUN4QyxrRUFBNEI7UUFDNUIsd0VBQThDO1FBQzlDLHFEQUFpQixJQUFJLE9BQU8sRUFBUSxFQUFDO1FBRXJDLDJEQUFpQztRQUNqQyxpREFBYSxLQUFLLEVBQUM7UUFDbkIsd0RBQTRCO1FBQzVCLHdEQUE0QjtRQUM1Qiw0REFBa0M7UUFDbEMsK0NBQVcsS0FBSyxFQUFDO1FBQ2pCLHNEQUFhO1FBRWIsdURBQXNDO1FBQ3RDLDhEQUFtQztRQUNuQyw2REFBMkM7UUFDM0MsMERBQXdCO1FBQ3hCLDhEQUFzQztRQUN0Qyx3REFBcUI7UUFDckIsZ0VBQTBDO1FBQzFDLG1FQUE2QztRQTJVN0MsZ0VBQWdFO1FBQ2hFLHVCQUF1QjtRQUN2QixnREFBWSxDQUFDLENBQU0sRUFBRSxFQUFFLEdBQUUsQ0FBQyxFQUFDO1FBQzNCLGdFQUFnRTtRQUNoRSx1QkFBdUI7UUFDdkIsaURBQWEsR0FBRyxFQUFFLEdBQUUsQ0FBQyxFQUFDO1FBQ3RCLGdFQUFnRTtRQUNoRSx1QkFBdUI7UUFDdkIseURBQXFCLEdBQUcsRUFBRSxHQUFFLENBQUMsRUFBQztRQXZVNUIsSUFBSSxDQUFDLG1CQUFtQixFQUFFO1lBQ3hCLE1BQU0sSUFBSSxLQUFLLENBQ2IsNERBQTREO2dCQUMxRCwrQkFBK0IsQ0FDbEMsQ0FBQztTQUNIO1FBQ0QsdUJBQUEsSUFBSSx3Q0FBWSxPQUFPLE1BQUEsQ0FBQztRQUN4Qix1QkFBQSxJQUFJLCtDQUFtQixjQUFjLE1BQUEsQ0FBQztRQUN0Qyx1QkFBQSxJQUFJLDhDQUFrQixhQUFhLE1BQUEsQ0FBQztRQUNwQyx1QkFBQSxJQUFJLDJDQUFlLFVBQVUsTUFBQSxDQUFDO1FBQzlCLHVCQUFBLElBQUksK0NBQW1CLGNBQWMsTUFBQSxDQUFDO1FBQ3RDLHVCQUFBLElBQUkseUNBQWEsUUFBUSxNQUFBLENBQUM7UUFDMUIsdUJBQUEsSUFBSSxpREFBcUIsZ0JBQWdCLE1BQUEsQ0FBQztRQUMxQyx1QkFBQSxJQUFJLG9EQUF3QixtQkFBbUIsTUFBQSxDQUFDO1FBQ2hELHVCQUFBLElBQUksbURBQXVCLHVCQUFBLElBQUksNENBQVMsQ0FBQyxjQUFjLENBQUMsdUJBQUEsSUFBSSwrQ0FBWSxDQUFDLE1BQUEsQ0FBQztRQUMxRSx1QkFBQSxJQUFJLDhGQUFtQixNQUF2QixJQUFJLENBQXFCLENBQUM7UUFFMUIsdUJBQUEsSUFBSSxtREFBZ0I7YUFDakIsYUFBYSxFQUFFO2FBQ2YsSUFBSSxDQUFDLFNBQVMsQ0FBQyx1QkFBQSxJQUFJLGtEQUFlLENBQUMsQ0FBQzthQUNwQyxTQUFTLENBQUMsQ0FBQyxVQUFVLEVBQUUsRUFBRTtZQUN4QixnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQzlDLHVCQUFBLElBQUkseURBQ0YsZ0JBQWdCLENBQUMsMkJBQTJCLEVBQUUsTUFBQSxDQUFDO1lBQ2pELHVCQUFBLElBQUksNEZBQWlCLE1BQXJCLElBQUksQ0FBbUIsQ0FBQztRQUMxQixDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUEvTUQ7Ozs7T0FJRztJQUNILElBQ1csVUFBVSxDQUFDLEtBQXlCO1FBQzdDLDBCQUEwQjtRQUMxQixJQUFJLEtBQUssS0FBSyx1QkFBQSxJQUFJLGdEQUFhLEVBQUU7WUFDL0IsdUJBQUEsSUFBSSw0Q0FBZ0IsS0FBSyxNQUFBLENBQUM7WUFDMUIsdUJBQUEsSUFBSSw0RkFBaUIsTUFBckIsSUFBSSxDQUFtQixDQUFDO1NBQ3pCO0lBQ0gsQ0FBQztJQUVELDBDQUEwQztJQUMxQyxJQUFXLFVBQVU7UUFDbkIsT0FBTyxDQUNMLHVCQUFBLElBQUksZ0RBQWE7WUFDakIsdUJBQUEsSUFBSSxrREFBZSxDQUFDLFVBQVU7WUFDOUIsdUJBQUEsSUFBSSw2REFBMEIsQ0FDL0IsQ0FBQztJQUNKLENBQUM7SUFFRDs7O09BR0c7SUFDSCxJQUNXLFFBQVEsQ0FBQyxLQUEwQjtRQUM1Qyx1QkFBQSxJQUFJLDBDQUFjLEtBQUssSUFBSSxLQUFLLE1BQUEsQ0FBQztRQUNqQyx1QkFBQSxJQUFJLHdEQUFxQixDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7UUFDM0MsdUJBQUEsSUFBSSw2Q0FBVSxDQUFDLFdBQVcsQ0FDeEIsdUJBQUEsSUFBSSwrQ0FBWSxDQUFDLGFBQWEsRUFDOUIsVUFBVSxFQUNWLEtBQUssQ0FDTixDQUFDO0lBQ0osQ0FBQztJQUVELElBQVcsUUFBUTtRQUNqQixPQUFPLHVCQUFBLElBQUksOENBQVcsQ0FBQztJQUN6QixDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsSUFDVyxPQUFPLENBQUMsS0FBdUI7UUFDeEMsdUJBQUEsSUFBSSx5Q0FBYSxLQUFLLE1BQUEsQ0FBQztRQUN2Qix1QkFBQSxJQUFJLHdEQUFxQixDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDO1FBRWpELHVCQUFBLElBQUksc0RBQW1CLE1BQXZCLElBQUksQ0FBcUIsQ0FBQztJQUM1QixDQUFDO0lBRUQsMENBQTBDO0lBQzFDLElBQVcsT0FBTztRQUNoQixPQUFPLHVCQUFBLElBQUksNkNBQVUsSUFBSSx1QkFBQSxJQUFJLGtEQUFlLENBQUMsT0FBTyxDQUFDO0lBQ3ZELENBQUM7SUFFRDs7O09BR0c7SUFDSCxJQUNXLE9BQU8sQ0FBQyxLQUF1QjtRQUN4Qyx1QkFBQSxJQUFJLHlDQUFhLEtBQUssTUFBQSxDQUFDO1FBQ3ZCLHVCQUFBLElBQUksd0RBQXFCLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUM7UUFFakQsdUJBQUEsSUFBSSxzREFBbUIsTUFBdkIsSUFBSSxDQUFxQixDQUFDO0lBQzVCLENBQUM7SUFFRCwwQ0FBMEM7SUFDMUMsSUFBVyxPQUFPO1FBQ2hCLE9BQU8sdUJBQUEsSUFBSSw2Q0FBVSxJQUFJLHVCQUFBLElBQUksa0RBQWUsQ0FBQyxPQUFPLENBQUM7SUFDdkQsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsSUFDVyxrQkFBa0IsQ0FDM0IsS0FBOEM7UUFFOUMsSUFBSSxLQUFLLEVBQUU7WUFDVCxPQUFPLENBQUMsSUFBSSxDQUNWLG9GQUFvRjtnQkFDbEYsb0ZBQW9GO2dCQUNwRiwyQkFBMkI7Z0JBQzNCLG9CQUFvQjtnQkFDcEIscUVBQXFFLENBQ3hFLENBQUM7U0FDSDtJQUNILENBQUM7SUFTRDs7Ozs7T0FLRztJQUNILElBQ1csV0FBVyxDQUFDLEtBQXlCO1FBQzlDLHVCQUFBLElBQUksNkNBQWlCLEtBQUssTUFBQSxDQUFDO1FBQzNCLHVCQUFBLElBQUksd0RBQXFCLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUM7UUFFekQsdUJBQUEsSUFBSSxzREFBbUIsTUFBdkIsSUFBSSxDQUFxQixDQUFDO0lBQzVCLENBQUM7SUFFRCwwQ0FBMEM7SUFDMUMsSUFBVyxXQUFXO1FBQ3BCLE9BQU8sdUJBQUEsSUFBSSxpREFBYyxJQUFJLHVCQUFBLElBQUksa0RBQWUsQ0FBQyxXQUFXLENBQUM7SUFDL0QsQ0FBQztJQUVEOzs7Ozs7O09BT0c7SUFDSCxJQUNXLE1BQU0sQ0FBQyxLQUEwQjtRQUMxQyx1QkFBQSxJQUFJLHdDQUFZLEtBQUssSUFBSSxLQUFLLE1BQUEsQ0FBQztJQUNqQyxDQUFDO0lBRUQsSUFBVyxNQUFNO1FBQ2YsT0FBTyx1QkFBQSxJQUFJLDRDQUFTLENBQUM7SUFDdkIsQ0FBQztJQXVFTSxRQUFRO1FBQ2IsTUFBTSxPQUFPLEdBQUcsdUJBQUEsSUFBSSwrQ0FBWSxDQUFDLGFBQWEsQ0FBQztRQUUvQyx1QkFBQSxJQUFJLDZDQUFVLENBQUMsUUFBUSxDQUFDLE9BQU8sRUFBRSxrQkFBa0IsQ0FBQyxDQUFDO1FBRXJELE1BQU0sWUFBWSxHQUFHLE9BQU8sQ0FBQyxZQUFZLENBQUMsWUFBWSxDQUFDLENBQUM7UUFFeEQsSUFBSSxDQUFDLFlBQVksRUFBRTtZQUNqQix1QkFBQSxJQUFJLHFEQUFrQjtpQkFDbkIsU0FBUyxDQUFDLGdDQUFnQyxDQUFDO2lCQUMzQyxJQUFJLENBQUMsU0FBUyxDQUFDLHVCQUFBLElBQUksa0RBQWUsQ0FBQyxDQUFDO2lCQUNwQyxTQUFTLENBQUMsQ0FBQyxLQUFhLEVBQUUsRUFBRTtnQkFDM0IsdUJBQUEsSUFBSSw2Q0FBVSxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsWUFBWSxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQzVELENBQUMsQ0FBQyxDQUFDO1NBQ047SUFDSCxDQUFDO0lBRU0sa0JBQWtCO1FBQ3ZCLHVCQUFBLElBQUksd0RBQXFCLENBQUMsVUFBVTthQUNqQyxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQzthQUM1QixJQUFJLENBQUMsU0FBUyxDQUFDLHVCQUFBLElBQUksa0RBQWUsQ0FBQyxDQUFDO2FBQ3BDLFNBQVMsQ0FBQyxDQUFDLEtBQVcsRUFBRSxFQUFFO1lBQ3pCLHVCQUFBLElBQUksMENBQVUsS0FBSyw4Q0FBQSxDQUFDO1lBQ3BCLHVCQUFBLElBQUksOENBQVcsTUFBZixJQUFJLENBQWEsQ0FBQztRQUNwQixDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFTSxlQUFlO1FBQ3BCLGdEQUFnRDtRQUNoRCxrRkFBa0Y7UUFDbEYsdURBQXVEO1FBQ3ZELG9GQUFvRjtRQUNwRiw2REFBNkQ7UUFDN0QsMEJBQTBCO1FBQzFCLElBQUksdUJBQUEsSUFBSSw0Q0FBUyxJQUFJLHVCQUFBLElBQUksNENBQVMsQ0FBQyxNQUFNLEVBQUU7WUFDekMsVUFBVSxDQUFDLEdBQUcsRUFBRTtnQkFDZCx1QkFBQSxJQUFJLDRDQUFTLEVBQUUsUUFBUSxDQUFDLHVCQUFBLElBQUksc0ZBQU8sRUFBRTtvQkFDbkMsU0FBUyxFQUFFLEtBQUs7aUJBQ2pCLENBQUMsQ0FBQztnQkFFSCx1QkFBQSxJQUFJLG1EQUFnQixDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ3RDLENBQUMsQ0FBQyxDQUFDO1NBQ0o7SUFDSCxDQUFDO0lBRU0sV0FBVztRQUNoQix1QkFBQSxJQUFJLGtEQUFlLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDM0IsdUJBQUEsSUFBSSxrREFBZSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ2pDLENBQUM7SUFHTSxhQUFhLENBQUMsS0FBVTtRQUM3QixNQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQztRQUVqQyxJQUFJLElBQUksQ0FBQyx1QkFBdUIsRUFBRTtZQUNoQyx1QkFBQSxJQUFJLDBGQUFlLE1BQW5CLElBQUksRUFBZ0IsS0FBSyxDQUFDLENBQUM7WUFDM0IsT0FBTztTQUNSO1FBRUQsNEVBQTRFO1FBQzVFLElBQUksdUJBQUEsSUFBSSw4RkFBbUIsTUFBdkIsSUFBSSxFQUFvQixLQUFLLENBQUMsRUFBRTtZQUNsQyx1QkFBQSxJQUFJLDBGQUFlLE1BQW5CLElBQUksRUFBZ0IsS0FBSyxDQUFDLENBQUM7WUFDM0IsT0FBTztTQUNSO1FBRUQsdUJBQUEsSUFBSSx1Q0FBVyxLQUFLLE1BQUEsQ0FBQztRQUNyQix1QkFBQSxJQUFJLDZDQUFVLE1BQWQsSUFBSSxFQUFXLEtBQUssQ0FBQyxDQUFDO1FBRXRCLHVCQUFBLElBQUksNENBQVMsRUFBRSxTQUFTLENBQUM7WUFDdkIsT0FBTyxFQUFFO2dCQUNQLE9BQU8sRUFBRSxJQUFJO2FBQ2Q7U0FDRixDQUFDLENBQUM7SUFDTCxDQUFDO0lBR00sV0FBVztRQUNoQix1QkFBQSxJQUFJLDhDQUFXLE1BQWYsSUFBSSxDQUFhLENBQUM7SUFDcEIsQ0FBQztJQUdNLE9BQU87UUFDWix1QkFBQSxJQUFJLDRDQUFTLEVBQUUsV0FBVyxFQUFFLENBQUM7SUFDL0IsQ0FBQztJQUVNLFVBQVUsQ0FBQyxLQUFVO1FBQzFCLHVCQUFBLElBQUksd0ZBQWEsTUFBakIsSUFBSSxFQUFjLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztJQUNsQyxDQUFDO0lBRU0sUUFBUSxDQUFDLE9BQXdCO1FBQ3RDLElBQUksQ0FBQyx1QkFBQSxJQUFJLDRDQUFTLEVBQUU7WUFDbEIsdUJBQUEsSUFBSSx3Q0FBWSxPQUFPLE1BQUEsQ0FBQztZQUN4Qiw4RUFBOEU7WUFDOUUsSUFBSSx1QkFBQSxJQUFJLDRDQUFTLENBQUMsS0FBSyxLQUFLLHVCQUFBLElBQUksc0ZBQU8sRUFBRTtnQkFDdkMsdUJBQUEsSUFBSSw0Q0FBUyxDQUFDLFVBQVUsQ0FBQyx1QkFBQSxJQUFJLHNGQUFPLEVBQUUsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQzthQUM3RDtTQUNGO1FBRUQsSUFBSSxJQUFJLENBQUMsdUJBQXVCLEVBQUU7WUFDaEMsT0FBTyxJQUFJLENBQUM7U0FDYjtRQUVELE1BQU0sS0FBSyxHQUFZLE9BQU8sQ0FBQyxLQUFLLENBQUM7UUFFckMsSUFBSSxDQUFDLEtBQUssRUFBRTtZQUNWLE9BQU8sSUFBSSxDQUFDO1NBQ2I7UUFFRCxJQUFJLEtBQUssWUFBWSxJQUFJLEVBQUU7WUFDekIsTUFBTSxXQUFXLEdBQUcsdUJBQUEsSUFBSSxrREFBZSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUUzRCxJQUFJLENBQUMsV0FBVyxFQUFFO2dCQUNoQixxRkFBcUY7Z0JBQ3JGLHdGQUF3RjtnQkFDeEYsdUJBQUEsSUFBSSw0Q0FBUyxDQUFDLGFBQWEsRUFBRSxDQUFDO2dCQUU5QixPQUFPO29CQUNMLE9BQU8sRUFBRTt3QkFDUCxPQUFPLEVBQUUsS0FBSztxQkFDZjtpQkFDRixDQUFDO2FBQ0g7WUFFRCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDO1lBRTdCLElBQ0UsT0FBTztnQkFDUCx1QkFBQSxJQUFJLGtEQUFlLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQztnQkFDeEMsS0FBSyxHQUFHLE9BQU8sRUFDZjtnQkFDQSxPQUFPO29CQUNMLE9BQU8sRUFBRTt3QkFDUCxPQUFPO3FCQUNSO2lCQUNGLENBQUM7YUFDSDtZQUVELE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUM7WUFFN0IsSUFDRSxPQUFPO2dCQUNQLHVCQUFBLElBQUksa0RBQWUsQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDO2dCQUN4QyxLQUFLLEdBQUcsT0FBTyxFQUNmO2dCQUNBLE9BQU87b0JBQ0wsT0FBTyxFQUFFO3dCQUNQLE9BQU87cUJBQ1I7aUJBQ0YsQ0FBQzthQUNIO1NBQ0Y7YUFBTTtZQUNMLHFGQUFxRjtZQUNyRix3RkFBd0Y7WUFDeEYsdUJBQUEsSUFBSSw0Q0FBUyxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBRTlCLE9BQU87Z0JBQ0wsT0FBTyxFQUFFO29CQUNQLE9BQU8sRUFBRSxLQUFLO2lCQUNmO2FBQ0YsQ0FBQztTQUNIO1FBQ0QsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRU0sZ0JBQWdCLENBQUMsRUFBd0I7UUFDOUMsdUJBQUEsSUFBSSx5Q0FBYSxFQUFFLE1BQUEsQ0FBQztJQUN0QixDQUFDO0lBRU0saUJBQWlCLENBQUMsRUFBYztRQUNyQyx1QkFBQSxJQUFJLDBDQUFjLEVBQUUsTUFBQSxDQUFDO0lBQ3ZCLENBQUM7SUFFTSx5QkFBeUIsQ0FBQyxFQUFjO1FBQzdDLHVCQUFBLElBQUksa0RBQXNCLEVBQUUsTUFBQSxDQUFDO0lBQy9CLENBQUM7SUFFTSxnQkFBZ0IsQ0FBQyxRQUFpQjtRQUN2QyxJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztRQUN6Qix1QkFBQSxJQUFJLHdEQUFxQixDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7SUFDaEQsQ0FBQztJQUVEOzs7T0FHRztJQUNJLHNCQUFzQjtRQUMzQix1QkFBQSxJQUFJLDBGQUFlLE1BQW5CLElBQUksRUFBZ0IsdUJBQUEsSUFBSSwrQ0FBWSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM1RCxDQUFDOzs7SUEvUEMsT0FBTyx1QkFBQSxJQUFJLDJDQUFRLENBQUM7QUFDdEIsQ0FBQywyRkFFVSxLQUFVO0lBQ25CLHVCQUFBLElBQUksd0ZBQWEsTUFBakIsSUFBSSxFQUFjLEtBQUssQ0FBQyxDQUFDO0FBQzNCLENBQUM7SUE2UEMsdUJBQUEsSUFBSSw4RkFBbUIsTUFBdkIsSUFBSSxDQUFxQixDQUFDO0lBQzFCLElBQUksdUJBQUEsSUFBSSxzRkFBTyxFQUFFO1FBQ2YsTUFBTSxhQUFhLEdBQUcsdUJBQUEsSUFBSSxrREFBZSxDQUFDLE1BQU0sQ0FDOUMsdUJBQUEsSUFBSSxzRkFBTyxFQUNYLElBQUksQ0FBQyxVQUFVLENBQ2hCLENBQUM7UUFDRix1QkFBQSxJQUFJLGlHQUFzQixNQUExQixJQUFJLEVBQXVCLGFBQWEsQ0FBQyxDQUFDO1FBQzFDLHVCQUFBLElBQUksbURBQWdCLENBQUMsWUFBWSxFQUFFLENBQUM7S0FDckM7QUFDSCxDQUFDLG1HQUVjLFFBQWdCO0lBQzdCLHVCQUFBLElBQUksMENBQVUsUUFBUSw4Q0FBQSxDQUFDO0FBQ3pCLENBQUMsaUhBRXFCLEtBQWE7SUFDakMsdUJBQUEsSUFBSSw2Q0FBVSxDQUFDLFdBQVcsQ0FBQyx1QkFBQSxJQUFJLCtDQUFZLENBQUMsYUFBYSxFQUFFLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQztBQUM3RSxDQUFDLGlHQU9hLEtBQWM7SUFDMUIsSUFBSSxLQUFLLFlBQVksSUFBSSxFQUFFO1FBQ3pCLE9BQU8sS0FBSyxDQUFDO0tBQ2Q7U0FBTSxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsRUFBRTtRQUNwQyxPQUFPLHVCQUFBLElBQUksbUdBQXdCLE1BQTVCLElBQUksRUFBeUIsS0FBSyxDQUFDLENBQUM7S0FDNUM7SUFDRCxPQUFPLFNBQVMsQ0FBQztBQUNuQixDQUFDLHFIQU91QixLQUFhO0lBQ25DLE1BQU0sR0FBRyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMxQixJQUFJLE1BQU0sQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEVBQUU7UUFDekIseUpBQXlKO1FBQ3pKLElBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7WUFDdEIsTUFBTSxLQUFLLEdBQUcsSUFBSSxNQUFNLENBQUMsdUNBQXVDLEVBQUUsR0FBRyxDQUFDLENBQUM7WUFDdkUsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsVUFBVTtnQkFDdEMsRUFBRSxLQUFLLENBQUMsS0FBSyxDQUFDO2dCQUNkLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQztpQkFDVCxPQUFPLENBQUMsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUM7WUFFckMsSUFBSSxnQkFBZ0IsSUFBSSxnQkFBZ0IsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO2dCQUNyRCxNQUFNLElBQUksR0FBRyx1QkFBQSxJQUFJLGtEQUFlLENBQUMsaUJBQWlCLENBQ2hELEtBQUssRUFDTCxnQkFBZ0IsRUFDaEIsSUFBSSxDQUNMLENBQUM7Z0JBQ0YsSUFBSSx1QkFBQSxJQUFJLGtEQUFlLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxFQUFFO29CQUN6QyxPQUFPLElBQUksQ0FBQztpQkFDYjthQUNGO1NBQ0Y7UUFDRCxNQUFNLEdBQUcsR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO1FBQ3ZCLE1BQU0sWUFBWSxHQUFHLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxXQUFXLEVBQUUsRUFBRSxHQUFHLENBQUMsUUFBUSxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDdEUsTUFBTSxXQUFXLEdBQUcsWUFBWSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQzNDLElBQUksR0FBRyxHQUFHLENBQUMsSUFBSSxHQUFHLElBQUksV0FBVyxFQUFFO1lBQ2pDLE9BQU8sWUFBWSxDQUFDO1NBQ3JCO0tBQ0Y7U0FBTTtRQUNMLE1BQU0sSUFBSSxHQUFHLHVCQUFBLElBQUksa0RBQWUsQ0FBQyxpQkFBaUIsQ0FDaEQsS0FBSyxFQUNMLElBQUksQ0FBQyxVQUFVLEVBQ2YsSUFBSSxDQUFDLE1BQU0sQ0FDWixDQUFDO1FBQ0YsSUFBSSx1QkFBQSxJQUFJLGtEQUFlLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQ3pDLE9BQU8sSUFBSSxDQUFDO1NBQ2I7S0FDRjtJQUNELE9BQU8sU0FBUyxDQUFDO0FBQ25CLENBQUMsMkdBS2tCLEtBQWE7SUFDOUIsSUFBSSxDQUFDLEtBQUssSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLEVBQUU7UUFDdkMsT0FBTyxJQUFJLENBQUM7S0FDYjtJQUVELDBEQUEwRDtJQUMxRCxNQUFNLE1BQU0sR0FBRyxXQUFXLENBQUM7SUFDM0IsTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUVuQyxJQUFJLE9BQU8sRUFBRTtRQUNYLE9BQU8sSUFBSSxDQUFDO0tBQ2I7SUFFRCxzREFBc0Q7SUFDdEQsTUFBTSxVQUFVLEdBQUcsTUFBTSxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUM7SUFFNUQsT0FBTyxVQUFVLENBQUM7QUFDcEIsQ0FBQztJQWFDLElBQUksQ0FBQyx1QkFBQSxJQUFJLHVEQUFvQixJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUU7UUFDaEQsdUJBQUEsSUFBSSw0Q0FBUyxDQUFDLGNBQWMsQ0FBQyx1QkFBQSxJQUFJLCtDQUFZLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0tBQ2pFO0FBQ0gsQ0FBQywrRkFPWSxLQUFVLEVBQUUsU0FBUyxHQUFHLElBQUk7SUFDdkMsSUFBSSx1QkFBQSxJQUFJLDJDQUFRLEtBQUssS0FBSyxFQUFFO1FBQzFCLE9BQU87S0FDUjtJQUVELE1BQU0saUJBQWlCLEdBQUcsdUJBQUEsSUFBSSw4RkFBbUIsTUFBdkIsSUFBSSxFQUFvQixLQUFLLENBQUMsQ0FBQztJQUV6RCwwRkFBMEY7SUFDMUYsd0hBQXdIO0lBQ3hILElBQUksQ0FBQyxpQkFBaUIsRUFBRTtRQUN0Qix1QkFBQSxJQUFJLHVDQUFXLEtBQUssTUFBQSxDQUFDO1FBQ3JCLElBQUksU0FBUyxFQUFFO1lBQ2IsdUJBQUEsSUFBSSw2Q0FBVSxNQUFkLElBQUksRUFBVyx1QkFBQSxJQUFJLDJDQUFRLENBQUMsQ0FBQztTQUM5QjthQUFNO1lBQ0wsdUJBQUEsSUFBSSw0Q0FBUyxFQUFFLFFBQVEsQ0FBQyx1QkFBQSxJQUFJLDJDQUFRLEVBQUUsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztTQUM3RDtRQUVELHVCQUFBLElBQUksd0RBQXFCLENBQUMsWUFBWSxHQUFHLHVCQUFBLElBQUksMkNBQVEsQ0FBQztRQUV0RCx1QkFBQSxJQUFJLGlHQUFzQixNQUExQixJQUFJLEVBQXVCLEtBQUssQ0FBQyxDQUFDO0tBQ25DO1NBQU07UUFDTCxrRUFBa0U7UUFDbEUsZ0VBQWdFO1FBQ2hFLE1BQU0sU0FBUyxHQUFxQix1QkFBQSxJQUFJLHlGQUFjLE1BQWxCLElBQUksRUFBZSxLQUFLLENBQUMsQ0FBQztRQUU5RCxNQUFNLGFBQWEsR0FDakIsdUJBQUEsSUFBSSwyQ0FBUSxZQUFZLElBQUk7WUFDNUIsU0FBUztZQUNULFNBQVMsQ0FBQyxPQUFPLEVBQUUsS0FBSyx1QkFBQSxJQUFJLDJDQUFRLENBQUMsT0FBTyxFQUFFLENBQUM7UUFFakQsSUFBSSxTQUFTLEtBQUssdUJBQUEsSUFBSSwyQ0FBUSxJQUFJLENBQUMsYUFBYSxFQUFFO1lBQ2hELHVCQUFBLElBQUksdUNBQVcsU0FBUyxJQUFJLEtBQUssTUFBQSxDQUFDO1lBQ2xDLElBQUksU0FBUyxFQUFFO2dCQUNiLHVCQUFBLElBQUksNkNBQVUsTUFBZCxJQUFJLEVBQVcsdUJBQUEsSUFBSSwyQ0FBUSxDQUFDLENBQUM7YUFDOUI7aUJBQU07Z0JBQ0wsdUJBQUEsSUFBSSw0Q0FBUyxFQUFFLFFBQVEsQ0FBQyx1QkFBQSxJQUFJLDJDQUFRLEVBQUUsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQzthQUM3RDtZQUVELHVCQUFBLElBQUksd0RBQXFCLENBQUMsWUFBWSxHQUFHLHVCQUFBLElBQUksMkNBQVEsQ0FBQztTQUN2RDtRQUVELElBQUksU0FBUyxFQUFFO1lBQ2IsTUFBTSxtQkFBbUIsR0FBRyx1QkFBQSxJQUFJLGtEQUFlLENBQUMsTUFBTSxDQUNwRCxTQUFTLEVBQ1QsSUFBSSxDQUFDLFVBQVUsQ0FDaEIsQ0FBQztZQUNGLHVCQUFBLElBQUksaUdBQXNCLE1BQTFCLElBQUksRUFBdUIsbUJBQW1CLENBQUMsQ0FBQztTQUNqRDthQUFNO1lBQ0wsdUJBQUEsSUFBSSxpR0FBc0IsTUFBMUIsSUFBSSxFQUF1QixLQUFLLElBQUksRUFBRSxDQUFDLENBQUM7U0FDekM7S0FDRjtBQUNILENBQUM7eUhBcmtCVSwyQkFBMkI7NkdBQTNCLDJCQUEyQiwwWUFOM0I7UUFDVCw2QkFBNkI7UUFDN0Isd0JBQXdCO1FBQ3hCLDJCQUEyQjtLQUM1Qjs0RkFFVSwyQkFBMkI7a0JBUnZDLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLHNCQUFzQjtvQkFDaEMsU0FBUyxFQUFFO3dCQUNULDZCQUE2Qjt3QkFDN0Isd0JBQXdCO3dCQUN4QiwyQkFBMkI7cUJBQzVCO2lCQUNGOzswQkE2TEksUUFBUTs0Q0E3S0EsVUFBVTtzQkFEcEIsS0FBSztnQkF1QkssUUFBUTtzQkFEbEIsS0FBSztnQkFvQkssT0FBTztzQkFEakIsS0FBSztnQkFrQkssT0FBTztzQkFEakIsS0FBSztnQkFvQkssa0JBQWtCO3NCQUQ1QixLQUFLO2dCQW9CQyx1QkFBdUI7c0JBRDdCLEtBQUs7Z0JBVUssV0FBVztzQkFEckIsS0FBSztnQkFzQkssTUFBTTtzQkFEaEIsS0FBSztnQkFpSUMsYUFBYTtzQkFEbkIsWUFBWTt1QkFBQyxRQUFRLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0JBMEIzQixXQUFXO3NCQURqQixZQUFZO3VCQUFDLE1BQU07Z0JBTWIsT0FBTztzQkFEYixZQUFZO3VCQUFDLE9BQU8iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBZnRlckNvbnRlbnRJbml0LFxuICBBZnRlclZpZXdJbml0LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgRGlyZWN0aXZlLFxuICBFbGVtZW50UmVmLFxuICBIb3N0TGlzdGVuZXIsXG4gIElucHV0LFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgT3B0aW9uYWwsXG4gIFJlbmRlcmVyMixcbiAgZm9yd2FyZFJlZixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBBYnN0cmFjdENvbnRyb2wsXG4gIENvbnRyb2xWYWx1ZUFjY2Vzc29yLFxuICBOR19WQUxJREFUT1JTLFxuICBOR19WQUxVRV9BQ0NFU1NPUixcbiAgVmFsaWRhdGlvbkVycm9ycyxcbiAgVmFsaWRhdG9yLFxufSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBTa3lBcHBMb2NhbGVQcm92aWRlciwgU2t5TGliUmVzb3VyY2VzU2VydmljZSB9IGZyb20gJ0Bza3l1eC9pMThuJztcblxuaW1wb3J0IG1vbWVudCBmcm9tICdtb21lbnQnO1xuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZGlzdGluY3RVbnRpbENoYW5nZWQsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHsgU2t5RGF0ZUZvcm1hdHRlciB9IGZyb20gJy4vZGF0ZS1mb3JtYXR0ZXInO1xuaW1wb3J0IHsgU2t5RGF0ZXBpY2tlckFkYXB0ZXJTZXJ2aWNlIH0gZnJvbSAnLi9kYXRlcGlja2VyLWFkYXB0ZXIuc2VydmljZSc7XG5pbXBvcnQgeyBTa3lEYXRlcGlja2VyQ29uZmlnU2VydmljZSB9IGZyb20gJy4vZGF0ZXBpY2tlci1jb25maWcuc2VydmljZSc7XG5pbXBvcnQgeyBTa3lEYXRlcGlja2VyQ29tcG9uZW50IH0gZnJvbSAnLi9kYXRlcGlja2VyLmNvbXBvbmVudCc7XG5cbmNvbnN0IFNLWV9EQVRFUElDS0VSX1ZBTFVFX0FDQ0VTU09SID0ge1xuICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gU2t5RGF0ZXBpY2tlcklucHV0RGlyZWN0aXZlKSxcbiAgbXVsdGk6IHRydWUsXG59O1xuXG5jb25zdCBTS1lfREFURVBJQ0tFUl9WQUxJREFUT1IgPSB7XG4gIHByb3ZpZGU6IE5HX1ZBTElEQVRPUlMsXG4gIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IFNreURhdGVwaWNrZXJJbnB1dERpcmVjdGl2ZSksXG4gIG11bHRpOiB0cnVlLFxufTtcblxuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiAnW3NreURhdGVwaWNrZXJJbnB1dF0nLFxuICBwcm92aWRlcnM6IFtcbiAgICBTS1lfREFURVBJQ0tFUl9WQUxVRV9BQ0NFU1NPUixcbiAgICBTS1lfREFURVBJQ0tFUl9WQUxJREFUT1IsXG4gICAgU2t5RGF0ZXBpY2tlckFkYXB0ZXJTZXJ2aWNlLFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBTa3lEYXRlcGlja2VySW5wdXREaXJlY3RpdmVcbiAgaW1wbGVtZW50c1xuICAgIE9uSW5pdCxcbiAgICBPbkRlc3Ryb3ksXG4gICAgQWZ0ZXJWaWV3SW5pdCxcbiAgICBBZnRlckNvbnRlbnRJbml0LFxuICAgIENvbnRyb2xWYWx1ZUFjY2Vzc29yLFxuICAgIFZhbGlkYXRvclxue1xuICAvKipcbiAgICogU3BlY2lmaWVzIHRoZSBkYXRlIGZvcm1hdCBmb3IgdGhlIGlucHV0LiBQbGFjZSB0aGlzIGF0dHJpYnV0ZSBvbiB0aGUgYGlucHV0YCBlbGVtZW50XG4gICAqIHRvIG92ZXJyaWRlIHRoZSBkZWZhdWx0IGluIHRoZSBgU2t5RGF0ZXBpY2tlckNvbmZpZ1NlcnZpY2VgLlxuICAgKiBAZGVmYXVsdCBcIk1NL0REL1lZWVlcIlxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBkYXRlRm9ybWF0KHZhbHVlOiBzdHJpbmcgfCB1bmRlZmluZWQpIHtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgIGlmICh2YWx1ZSAhPT0gdGhpcy4jX2RhdGVGb3JtYXQpIHtcbiAgICAgIHRoaXMuI19kYXRlRm9ybWF0ID0gdmFsdWU7XG4gICAgICB0aGlzLiNhcHBseURhdGVGb3JtYXQoKTtcbiAgICB9XG4gIH1cblxuICAvLyBUT0RPOiBSZWZhY3RvciB0byBub3QgaGF2ZSBnZXR0ZXIgbG9naWNcbiAgcHVibGljIGdldCBkYXRlRm9ybWF0KCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMuI19kYXRlRm9ybWF0IHx8XG4gICAgICB0aGlzLiNjb25maWdTZXJ2aWNlLmRhdGVGb3JtYXQgfHxcbiAgICAgIHRoaXMuI3ByZWZlcnJlZFNob3J0RGF0ZUZvcm1hdFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogSW5kaWNhdGVzIHdoZXRoZXIgdG8gZGlzYWJsZSB0aGUgZGF0ZXBpY2tlci5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgZGlzYWJsZWQodmFsdWU6IGJvb2xlYW4gfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLiNfZGlzYWJsZWQgPSB2YWx1ZSB8fCBmYWxzZTtcbiAgICB0aGlzLiNkYXRlcGlja2VyQ29tcG9uZW50LmRpc2FibGVkID0gdmFsdWU7XG4gICAgdGhpcy4jcmVuZGVyZXIuc2V0UHJvcGVydHkoXG4gICAgICB0aGlzLiNlbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsXG4gICAgICAnZGlzYWJsZWQnLFxuICAgICAgdmFsdWVcbiAgICApO1xuICB9XG5cbiAgcHVibGljIGdldCBkaXNhYmxlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy4jX2Rpc2FibGVkO1xuICB9XG5cbiAgLyoqXG4gICAqIFNwZWNpZmllcyB0aGUgbGF0ZXN0IGRhdGUgdGhhdCBpcyBhdmFpbGFibGUgaW4gdGhlIGNhbGVuZGFyLiBQbGFjZSB0aGlzIGF0dHJpYnV0ZSBvblxuICAgKiB0aGUgYGlucHV0YCBlbGVtZW50IHRvIG92ZXJyaWRlIHRoZSBkZWZhdWx0IGluIGBTa3lEYXRlcGlja2VyQ29uZmlnU2VydmljZWAuXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IG1heERhdGUodmFsdWU6IERhdGUgfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLiNfbWF4RGF0ZSA9IHZhbHVlO1xuICAgIHRoaXMuI2RhdGVwaWNrZXJDb21wb25lbnQubWF4RGF0ZSA9IHRoaXMubWF4RGF0ZTtcblxuICAgIHRoaXMuI29uVmFsaWRhdG9yQ2hhbmdlKCk7XG4gIH1cblxuICAvLyBUT0RPOiBSZWZhY3RvciB0byBub3QgaGF2ZSBnZXR0ZXIgbG9naWNcbiAgcHVibGljIGdldCBtYXhEYXRlKCk6IERhdGUgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLiNfbWF4RGF0ZSB8fCB0aGlzLiNjb25maWdTZXJ2aWNlLm1heERhdGU7XG4gIH1cblxuICAvKipcbiAgICogU3BlY2lmaWVzIHRoZSBlYXJsaWVzdCBkYXRlIHRoYXQgaXMgYXZhaWxhYmxlIGluIHRoZSBjYWxlbmRhci4gUGxhY2UgdGhpcyBhdHRyaWJ1dGUgb25cbiAgICogdGhlIGBpbnB1dGAgZWxlbWVudCB0byBvdmVycmlkZSB0aGUgZGVmYXVsdCBpbiBgU2t5RGF0ZXBpY2tlckNvbmZpZ1NlcnZpY2VgLiBUbyBhdm9pZCB2YWxpZGF0aW9uIGVycm9ycywgdGhlIHRpbWUgYXNzb2NpYXRlZCB3aXRoIHRoZSBtaW5pbXVtIGRhdGUgbXVzdCBiZSBtaWRuaWdodC4gVGhpcyBpcyBuZWNlc3NhcnkgYmVjYXVzZSB0aGUgZGF0ZXBpY2tlciBhdXRvbWF0aWNhbGx5IHNldHMgdGhlIHRpbWUgb24gdGhlIGBEYXRlYCBvYmplY3QgZm9yIHNlbGVjdGVkIGRhdGVzIHRvIG1pZG5pZ2h0IGluIHRoZSBjdXJyZW50IHVzZXIncyB0aW1lIHpvbmUuXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IG1pbkRhdGUodmFsdWU6IERhdGUgfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLiNfbWluRGF0ZSA9IHZhbHVlO1xuICAgIHRoaXMuI2RhdGVwaWNrZXJDb21wb25lbnQubWluRGF0ZSA9IHRoaXMubWluRGF0ZTtcblxuICAgIHRoaXMuI29uVmFsaWRhdG9yQ2hhbmdlKCk7XG4gIH1cblxuICAvLyBUT0RPOiBSZWZhY3RvciB0byBub3QgaGF2ZSBnZXR0ZXIgbG9naWNcbiAgcHVibGljIGdldCBtaW5EYXRlKCk6IERhdGUgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLiNfbWluRGF0ZSB8fCB0aGlzLiNjb25maWdTZXJ2aWNlLm1pbkRhdGU7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyB0aGUgZGF0ZXBpY2tlciBpbnB1dCBhbmQgY2FsZW5kYXIuIFBsYWNlIHRoaXMgZGlyZWN0aXZlIG9uIGFuIGBpbnB1dGAgZWxlbWVudCxcbiAgICogYW5kIHdyYXAgdGhlIGlucHV0IGluIGEgYHNreS1kYXRlcGlja2VyYCBjb21wb25lbnQuIFRoZSB2YWx1ZSB0aGF0IHVzZXJzIHNlbGVjdCBpcyBkcml2ZW5cbiAgICogdGhyb3VnaCB0aGUgYG5nTW9kZWxgIGF0dHJpYnV0ZSBzcGVjaWZpZWQgb24gdGhlIGBpbnB1dGAgZWxlbWVudC5cbiAgICogQHJlcXVpcmVkXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IHNreURhdGVwaWNrZXJJbnB1dChcbiAgICB2YWx1ZTogU2t5RGF0ZXBpY2tlckNvbXBvbmVudCB8IHVuZGVmaW5lZCB8ICcnXG4gICkge1xuICAgIGlmICh2YWx1ZSkge1xuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAnW0RlcHJlY2F0aW9uIHdhcm5pbmddIFlvdSBubyBsb25nZXIgbmVlZCB0byBwcm92aWRlIGEgdGVtcGxhdGUgcmVmZXJlbmNlIHZhcmlhYmxlICcgK1xuICAgICAgICAgICd0byB0aGUgYHNreURhdGVwaWNrZXJJbnB1dGAgYXR0cmlidXRlICh0aGlzIHdpbGwgYmUgYSBicmVha2luZyBjaGFuZ2UgaW4gdGhlIG5leHQgJyArXG4gICAgICAgICAgJ21ham9yIHZlcnNpb24gcmVsZWFzZSkuXFxuJyArXG4gICAgICAgICAgJ0RvIHRoaXMgaW5zdGVhZDpcXG4nICtcbiAgICAgICAgICAnPHNreS1kYXRlcGlja2VyPlxcbiAgPGlucHV0IHNreURhdGVwaWNrZXJJbnB1dCAvPlxcbjwvc2t5LWRhdGVwaWNrZXI+J1xuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSW5kaWNhdGVzIHdoZXRoZXIgdG8gZGlzYWJsZSBkYXRlIHZhbGlkYXRpb24gb24gdGhlIGRhdGVwaWNrZXIgaW5wdXQuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2t5RGF0ZXBpY2tlck5vVmFsaWRhdGU6IGJvb2xlYW4gfCB1bmRlZmluZWQgPSBmYWxzZTtcblxuICAvKipcbiAgICogU3BlY2lmaWVzIHRoZSBzdGFydGluZyBkYXkgb2YgdGhlIHdlZWsgaW4gdGhlIGNhbGVuZGFyLCB3aGVyZSBgMGAgc2V0cyB0aGUgc3RhcnRpbmcgZGF5XG4gICAqIHRvIFN1bmRheS4gUGxhY2UgdGhpcyBhdHRyaWJ1dGUgb24gdGhlIGBpbnB1dGAgZWxlbWVudCB0byBvdmVycmlkZSB0aGUgZGVmYXVsdFxuICAgKiBpbiBgU2t5RGF0ZXBpY2tlckNvbmZpZ1NlcnZpY2VgLlxuICAgKiBAZGVmYXVsdCAwXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IHN0YXJ0aW5nRGF5KHZhbHVlOiBudW1iZXIgfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLiNfc3RhcnRpbmdEYXkgPSB2YWx1ZTtcbiAgICB0aGlzLiNkYXRlcGlja2VyQ29tcG9uZW50LnN0YXJ0aW5nRGF5ID0gdGhpcy5zdGFydGluZ0RheTtcblxuICAgIHRoaXMuI29uVmFsaWRhdG9yQ2hhbmdlKCk7XG4gIH1cblxuICAvLyBUT0RPOiBSZWZhY3RvciB0byBub3QgaGF2ZSBnZXR0ZXIgbG9naWNcbiAgcHVibGljIGdldCBzdGFydGluZ0RheSgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLiNfc3RhcnRpbmdEYXkgfHwgdGhpcy4jY29uZmlnU2VydmljZS5zdGFydGluZ0RheTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgd2hldGhlciB0aGUgZm9ybWF0IG9mIHRoZSBkYXRlIHZhbHVlIG11c3QgbWF0Y2ggdGhlIGZvcm1hdCBmcm9tIHRoZSBgZGF0ZUZvcm1hdGAgdmFsdWUuXG4gICAqIElmIHRoaXMgcHJvcGVydHkgaXMgYHRydWVgIGFuZCB0aGUgZGF0ZXBpY2tlciBpbnB1dCBkaXJlY3RpdmUgY2Fubm90IGZpbmQgYW4gZXhhY3QgbWF0Y2gsIHRoZW5cbiAgICogdGhlIGlucHV0IGlzIG1hcmtlZCBhcyBpbnZhbGlkLlxuICAgKiBJZiB0aGlzIHByb3BlcnR5IGlzIGBmYWxzZWAgYW5kIHRoZSBkYXRlcGlja2VyIGlucHV0IGRpcmVjdGl2ZSBjYW5ub3QgZmluZCBhbiBleGFjdCBtYXRjaCwgdGhlblxuICAgKiBpdCBhdHRlbXB0cyB0byBmb3JtYXQgdGhlIHN0cmluZyBiYXNlZCBvbiB0aGUgW0lTTyA4NjAxIHN0YW5kYXJkIGZvcm1hdF0oaHR0cHM6Ly93d3cuaXNvLm9yZy9pc28tODYwMS1kYXRlLWFuZC10aW1lLWZvcm1hdC5odG1sKS5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgc3RyaWN0KHZhbHVlOiBib29sZWFuIHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy4jX3N0cmljdCA9IHZhbHVlIHx8IGZhbHNlO1xuICB9XG5cbiAgcHVibGljIGdldCBzdHJpY3QoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuI19zdHJpY3Q7XG4gIH1cblxuICBnZXQgI3ZhbHVlKCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMuI192YWx1ZTtcbiAgfVxuXG4gIHNldCAjdmFsdWUodmFsdWU6IGFueSkge1xuICAgIHRoaXMuI3VwZGF0ZVZhbHVlKHZhbHVlKTtcbiAgfVxuXG4gICNjb250cm9sOiBBYnN0cmFjdENvbnRyb2wgfCB1bmRlZmluZWQ7XG4gICNkYXRlRm9ybWF0dGVyID0gbmV3IFNreURhdGVGb3JtYXR0ZXIoKTtcbiAgI2luaXRpYWxQbGFjZWhvbGRlcjogc3RyaW5nO1xuICAjcHJlZmVycmVkU2hvcnREYXRlRm9ybWF0OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICNuZ1Vuc3Vic2NyaWJlID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICAjX2RhdGVGb3JtYXQ6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgI19kaXNhYmxlZCA9IGZhbHNlO1xuICAjX21heERhdGU6IERhdGUgfCB1bmRlZmluZWQ7XG4gICNfbWluRGF0ZTogRGF0ZSB8IHVuZGVmaW5lZDtcbiAgI19zdGFydGluZ0RheTogbnVtYmVyIHwgdW5kZWZpbmVkO1xuICAjX3N0cmljdCA9IGZhbHNlO1xuICAjX3ZhbHVlOiBhbnk7XG5cbiAgI2FkYXB0ZXI6IFNreURhdGVwaWNrZXJBZGFwdGVyU2VydmljZTtcbiAgI2NoYW5nZURldGVjdG9yOiBDaGFuZ2VEZXRlY3RvclJlZjtcbiAgI2NvbmZpZ1NlcnZpY2U6IFNreURhdGVwaWNrZXJDb25maWdTZXJ2aWNlO1xuICAjZWxlbWVudFJlZjogRWxlbWVudFJlZjtcbiAgI2xvY2FsZVByb3ZpZGVyOiBTa3lBcHBMb2NhbGVQcm92aWRlcjtcbiAgI3JlbmRlcmVyOiBSZW5kZXJlcjI7XG4gICNyZXNvdXJjZXNTZXJ2aWNlOiBTa3lMaWJSZXNvdXJjZXNTZXJ2aWNlO1xuICAjZGF0ZXBpY2tlckNvbXBvbmVudDogU2t5RGF0ZXBpY2tlckNvbXBvbmVudDtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBhZGFwdGVyOiBTa3lEYXRlcGlja2VyQWRhcHRlclNlcnZpY2UsXG4gICAgY2hhbmdlRGV0ZWN0b3I6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIGNvbmZpZ1NlcnZpY2U6IFNreURhdGVwaWNrZXJDb25maWdTZXJ2aWNlLFxuICAgIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYsXG4gICAgbG9jYWxlUHJvdmlkZXI6IFNreUFwcExvY2FsZVByb3ZpZGVyLFxuICAgIHJlbmRlcmVyOiBSZW5kZXJlcjIsXG4gICAgcmVzb3VyY2VzU2VydmljZTogU2t5TGliUmVzb3VyY2VzU2VydmljZSxcbiAgICBAT3B0aW9uYWwoKSBkYXRlcGlja2VyQ29tcG9uZW50PzogU2t5RGF0ZXBpY2tlckNvbXBvbmVudFxuICApIHtcbiAgICBpZiAoIWRhdGVwaWNrZXJDb21wb25lbnQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgJ1lvdSBtdXN0IHdyYXAgdGhlIGBza3lEYXRlcGlja2VySW5wdXRgIGRpcmVjdGl2ZSB3aXRoaW4gYSAnICtcbiAgICAgICAgICAnYDxza3ktZGF0ZXBpY2tlcj5gIGNvbXBvbmVudCEnXG4gICAgICApO1xuICAgIH1cbiAgICB0aGlzLiNhZGFwdGVyID0gYWRhcHRlcjtcbiAgICB0aGlzLiNjaGFuZ2VEZXRlY3RvciA9IGNoYW5nZURldGVjdG9yO1xuICAgIHRoaXMuI2NvbmZpZ1NlcnZpY2UgPSBjb25maWdTZXJ2aWNlO1xuICAgIHRoaXMuI2VsZW1lbnRSZWYgPSBlbGVtZW50UmVmO1xuICAgIHRoaXMuI2xvY2FsZVByb3ZpZGVyID0gbG9jYWxlUHJvdmlkZXI7XG4gICAgdGhpcy4jcmVuZGVyZXIgPSByZW5kZXJlcjtcbiAgICB0aGlzLiNyZXNvdXJjZXNTZXJ2aWNlID0gcmVzb3VyY2VzU2VydmljZTtcbiAgICB0aGlzLiNkYXRlcGlja2VyQ29tcG9uZW50ID0gZGF0ZXBpY2tlckNvbXBvbmVudDtcbiAgICB0aGlzLiNpbml0aWFsUGxhY2Vob2xkZXIgPSB0aGlzLiNhZGFwdGVyLmdldFBsYWNlaG9sZGVyKHRoaXMuI2VsZW1lbnRSZWYpO1xuICAgIHRoaXMuI3VwZGF0ZVBsYWNlaG9sZGVyKCk7XG5cbiAgICB0aGlzLiNsb2NhbGVQcm92aWRlclxuICAgICAgLmdldExvY2FsZUluZm8oKVxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuI25nVW5zdWJzY3JpYmUpKVxuICAgICAgLnN1YnNjcmliZSgobG9jYWxlSW5mbykgPT4ge1xuICAgICAgICBTa3lEYXRlRm9ybWF0dGVyLnNldExvY2FsZShsb2NhbGVJbmZvLmxvY2FsZSk7XG4gICAgICAgIHRoaXMuI3ByZWZlcnJlZFNob3J0RGF0ZUZvcm1hdCA9XG4gICAgICAgICAgU2t5RGF0ZUZvcm1hdHRlci5nZXRQcmVmZXJyZWRTaG9ydERhdGVGb3JtYXQoKTtcbiAgICAgICAgdGhpcy4jYXBwbHlEYXRlRm9ybWF0KCk7XG4gICAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICBjb25zdCBlbGVtZW50ID0gdGhpcy4jZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O1xuXG4gICAgdGhpcy4jcmVuZGVyZXIuYWRkQ2xhc3MoZWxlbWVudCwgJ3NreS1mb3JtLWNvbnRyb2wnKTtcblxuICAgIGNvbnN0IGhhc0FyaWFMYWJlbCA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlKCdhcmlhLWxhYmVsJyk7XG5cbiAgICBpZiAoIWhhc0FyaWFMYWJlbCkge1xuICAgICAgdGhpcy4jcmVzb3VyY2VzU2VydmljZVxuICAgICAgICAuZ2V0U3RyaW5nKCdza3l1eF9kYXRlX2ZpZWxkX2RlZmF1bHRfbGFiZWwnKVxuICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy4jbmdVbnN1YnNjcmliZSkpXG4gICAgICAgIC5zdWJzY3JpYmUoKHZhbHVlOiBzdHJpbmcpID0+IHtcbiAgICAgICAgICB0aGlzLiNyZW5kZXJlci5zZXRBdHRyaWJ1dGUoZWxlbWVudCwgJ2FyaWEtbGFiZWwnLCB2YWx1ZSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBuZ0FmdGVyQ29udGVudEluaXQoKTogdm9pZCB7XG4gICAgdGhpcy4jZGF0ZXBpY2tlckNvbXBvbmVudC5kYXRlQ2hhbmdlXG4gICAgICAucGlwZShkaXN0aW5jdFVudGlsQ2hhbmdlZCgpKVxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuI25nVW5zdWJzY3JpYmUpKVxuICAgICAgLnN1YnNjcmliZSgodmFsdWU6IERhdGUpID0+IHtcbiAgICAgICAgdGhpcy4jdmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgdGhpcy4jb25Ub3VjaGVkKCk7XG4gICAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgLy8gVGhpcyBpcyBuZWVkZWQgdG8gYWRkcmVzcyBhIGJ1ZyBpbiBBbmd1bGFyIDQuXG4gICAgLy8gV2hlbiBhIGNvbnRyb2wgdmFsdWUgaXMgc2V0IGludGlhbGx5LCBpdHMgdmFsdWUgaXMgbm90IHJlcHJlc2VudGVkIG9uIHRoZSB2aWV3LlxuICAgIC8vIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL2FuZ3VsYXIvYW5ndWxhci9pc3N1ZXMvMTM3OTJcbiAgICAvLyBPZiBub3RlIGlzIHRoZSBwYXJlbnQgY2hlY2sgd2hpY2ggYWxsb3dzIHVzIHRvIGRldGVybWluZSBpZiB0aGUgZm9ybSBpcyByZWFjdGl2ZS5cbiAgICAvLyBXaXRob3V0IHRoaXMgY2hlY2sgdGhlcmUgaXMgYSBjaGFuZ2VkIGJlZm9yZSBjaGVja2VkIGVycm9yXG4gICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICBpZiAodGhpcy4jY29udHJvbCAmJiB0aGlzLiNjb250cm9sLnBhcmVudCkge1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMuI2NvbnRyb2w/LnNldFZhbHVlKHRoaXMuI3ZhbHVlLCB7XG4gICAgICAgICAgZW1pdEV2ZW50OiBmYWxzZSxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy4jY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy4jbmdVbnN1YnNjcmliZS5uZXh0KCk7XG4gICAgdGhpcy4jbmdVbnN1YnNjcmliZS5jb21wbGV0ZSgpO1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignY2hhbmdlJywgWyckZXZlbnQnXSlcbiAgcHVibGljIG9uSW5wdXRDaGFuZ2UoZXZlbnQ6IGFueSkge1xuICAgIGNvbnN0IHZhbHVlID0gZXZlbnQudGFyZ2V0LnZhbHVlO1xuXG4gICAgaWYgKHRoaXMuc2t5RGF0ZXBpY2tlck5vVmFsaWRhdGUpIHtcbiAgICAgIHRoaXMuI29uVmFsdWVDaGFuZ2UodmFsdWUpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIERvbid0IHRyeSB0byBwYXJzZSB0aGUgc3RyaW5nIHZhbHVlIGludG8gYSBEYXRlIHZhbHVlIGlmIGl0IGlzIG1hbGZvcm1lZC5cbiAgICBpZiAodGhpcy4jaXNEYXRlU3RyaW5nVmFsaWQodmFsdWUpKSB7XG4gICAgICB0aGlzLiNvblZhbHVlQ2hhbmdlKHZhbHVlKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLiNfdmFsdWUgPSB2YWx1ZTtcbiAgICB0aGlzLiNvbkNoYW5nZSh2YWx1ZSk7XG5cbiAgICB0aGlzLiNjb250cm9sPy5zZXRFcnJvcnMoe1xuICAgICAgc2t5RGF0ZToge1xuICAgICAgICBpbnZhbGlkOiB0cnVlLFxuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ2JsdXInKVxuICBwdWJsaWMgb25JbnB1dEJsdXIoKTogdm9pZCB7XG4gICAgdGhpcy4jb25Ub3VjaGVkKCk7XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCdpbnB1dCcpXG4gIHB1YmxpYyBvbklucHV0KCk6IHZvaWQge1xuICAgIHRoaXMuI2NvbnRyb2w/Lm1hcmtBc0RpcnR5KCk7XG4gIH1cblxuICBwdWJsaWMgd3JpdGVWYWx1ZSh2YWx1ZTogYW55KTogdm9pZCB7XG4gICAgdGhpcy4jdXBkYXRlVmFsdWUodmFsdWUsIGZhbHNlKTtcbiAgfVxuXG4gIHB1YmxpYyB2YWxpZGF0ZShjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCB7XG4gICAgaWYgKCF0aGlzLiNjb250cm9sKSB7XG4gICAgICB0aGlzLiNjb250cm9sID0gY29udHJvbDtcbiAgICAgIC8vIEFjY291bnQgZm9yIGFueSBkYXRlIGNvbnZlcnNpb24gdGhhdCBtYXkgaGF2ZSBvY2N1cnJlZCBwcmlvciB0byB2YWxpZGF0aW9uLlxuICAgICAgaWYgKHRoaXMuI2NvbnRyb2wudmFsdWUgIT09IHRoaXMuI3ZhbHVlKSB7XG4gICAgICAgIHRoaXMuI2NvbnRyb2wucGF0Y2hWYWx1ZSh0aGlzLiN2YWx1ZSwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLnNreURhdGVwaWNrZXJOb1ZhbGlkYXRlKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCB2YWx1ZTogdW5rbm93biA9IGNvbnRyb2wudmFsdWU7XG5cbiAgICBpZiAoIXZhbHVlKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBEYXRlKSB7XG4gICAgICBjb25zdCBpc0RhdGVWYWxpZCA9IHRoaXMuI2RhdGVGb3JtYXR0ZXIuZGF0ZUlzVmFsaWQodmFsdWUpO1xuXG4gICAgICBpZiAoIWlzRGF0ZVZhbGlkKSB7XG4gICAgICAgIC8vIE1hcmsgdGhlIGludmFsaWQgY29udHJvbCBhcyB0b3VjaGVkIHNvIHRoYXQgdGhlIGlucHV0J3MgaW52YWxpZCBDU1Mgc3R5bGVzIGFwcGVhci5cbiAgICAgICAgLy8gKFRoaXMgaXMgb25seSByZXF1aXJlZCB3aGVuIHRoZSBpbnZhbGlkIHZhbHVlIGlzIHNldCBieSB0aGUgRm9ybUNvbnRyb2wgY29uc3RydWN0b3IuKVxuICAgICAgICB0aGlzLiNjb250cm9sLm1hcmtBc1RvdWNoZWQoKTtcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHNreURhdGU6IHtcbiAgICAgICAgICAgIGludmFsaWQ6IHZhbHVlLFxuICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG1pbkRhdGUgPSB0aGlzLm1pbkRhdGU7XG5cbiAgICAgIGlmIChcbiAgICAgICAgbWluRGF0ZSAmJlxuICAgICAgICB0aGlzLiNkYXRlRm9ybWF0dGVyLmRhdGVJc1ZhbGlkKG1pbkRhdGUpICYmXG4gICAgICAgIHZhbHVlIDwgbWluRGF0ZVxuICAgICAgKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgc2t5RGF0ZToge1xuICAgICAgICAgICAgbWluRGF0ZSxcbiAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICBjb25zdCBtYXhEYXRlID0gdGhpcy5tYXhEYXRlO1xuXG4gICAgICBpZiAoXG4gICAgICAgIG1heERhdGUgJiZcbiAgICAgICAgdGhpcy4jZGF0ZUZvcm1hdHRlci5kYXRlSXNWYWxpZChtYXhEYXRlKSAmJlxuICAgICAgICB2YWx1ZSA+IG1heERhdGVcbiAgICAgICkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHNreURhdGU6IHtcbiAgICAgICAgICAgIG1heERhdGUsXG4gICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gTWFyayB0aGUgaW52YWxpZCBjb250cm9sIGFzIHRvdWNoZWQgc28gdGhhdCB0aGUgaW5wdXQncyBpbnZhbGlkIENTUyBzdHlsZXMgYXBwZWFyLlxuICAgICAgLy8gKFRoaXMgaXMgb25seSByZXF1aXJlZCB3aGVuIHRoZSBpbnZhbGlkIHZhbHVlIGlzIHNldCBieSB0aGUgRm9ybUNvbnRyb2wgY29uc3RydWN0b3IuKVxuICAgICAgdGhpcy4jY29udHJvbC5tYXJrQXNUb3VjaGVkKCk7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIHNreURhdGU6IHtcbiAgICAgICAgICBpbnZhbGlkOiB2YWx1ZSxcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcHVibGljIHJlZ2lzdGVyT25DaGFuZ2UoZm46ICh2YWx1ZTogYW55KSA9PiB2b2lkKTogdm9pZCB7XG4gICAgdGhpcy4jb25DaGFuZ2UgPSBmbjtcbiAgfVxuXG4gIHB1YmxpYyByZWdpc3Rlck9uVG91Y2hlZChmbjogKCkgPT4gdm9pZCk6IHZvaWQge1xuICAgIHRoaXMuI29uVG91Y2hlZCA9IGZuO1xuICB9XG5cbiAgcHVibGljIHJlZ2lzdGVyT25WYWxpZGF0b3JDaGFuZ2UoZm46ICgpID0+IHZvaWQpOiB2b2lkIHtcbiAgICB0aGlzLiNvblZhbGlkYXRvckNoYW5nZSA9IGZuO1xuICB9XG5cbiAgcHVibGljIHNldERpc2FibGVkU3RhdGUoZGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLmRpc2FibGVkID0gZGlzYWJsZWQ7XG4gICAgdGhpcy4jZGF0ZXBpY2tlckNvbXBvbmVudC5kaXNhYmxlZCA9IGRpc2FibGVkO1xuICB9XG5cbiAgLyoqXG4gICAqIERldGVjdHMgY2hhbmdlcyB0byB0aGUgdW5kZXJseWluZyBpbnB1dCBlbGVtZW50J3MgdmFsdWUgYW5kIHVwZGF0ZXMgdGhlIG5nTW9kZWwgYWNjb3JkaW5nbHkuXG4gICAqIFRoaXMgaXMgdXNlZnVsIGlmIHlvdSBuZWVkIHRvIHVwZGF0ZSB0aGUgbmdNb2RlbCB2YWx1ZSBiZWZvcmUgdGhlIGlucHV0IGVsZW1lbnQgbG9zZXMgZm9jdXMuXG4gICAqL1xuICBwdWJsaWMgZGV0ZWN0SW5wdXRWYWx1ZUNoYW5nZSgpOiB2b2lkIHtcbiAgICB0aGlzLiNvblZhbHVlQ2hhbmdlKHRoaXMuI2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC52YWx1ZSk7XG4gIH1cblxuICAjYXBwbHlEYXRlRm9ybWF0KCk6IHZvaWQge1xuICAgIHRoaXMuI3VwZGF0ZVBsYWNlaG9sZGVyKCk7XG4gICAgaWYgKHRoaXMuI3ZhbHVlKSB7XG4gICAgICBjb25zdCBmb3JtYXR0ZWREYXRlID0gdGhpcy4jZGF0ZUZvcm1hdHRlci5mb3JtYXQoXG4gICAgICAgIHRoaXMuI3ZhbHVlLFxuICAgICAgICB0aGlzLmRhdGVGb3JtYXRcbiAgICAgICk7XG4gICAgICB0aGlzLiNzZXRJbnB1dEVsZW1lbnRWYWx1ZShmb3JtYXR0ZWREYXRlKTtcbiAgICAgIHRoaXMuI2NoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cbiAgfVxuXG4gICNvblZhbHVlQ2hhbmdlKG5ld1ZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLiN2YWx1ZSA9IG5ld1ZhbHVlO1xuICB9XG5cbiAgI3NldElucHV0RWxlbWVudFZhbHVlKHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLiNyZW5kZXJlci5zZXRQcm9wZXJ0eSh0aGlzLiNlbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsICd2YWx1ZScsIHZhbHVlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBkYXRlIHZhbHVlIGZyb20gYSB2YWx1ZSAtIGlmIHBvc3NpYmxlLlxuICAgKiBXaWxsIG5vdCBjb252ZXJ0IHVuY29udmVydGFibGUgZGF0ZXMgb3IgbnVtYmVycyBvdXRzaWRlIG9mIHRoZSBjdXJyZW50IG1vbnRoJ3MgbnVtYmVyIG9mIGRheXMuXG4gICAqIFJldHVybnMgYHVuZGVmaW5lZGAgaWYgdGhlIHZhbHVlIGNhbiBub3QgYmUgY29udmVydGVkLlxuICAgKi9cbiAgI2dldERhdGVWYWx1ZSh2YWx1ZTogdW5rbm93bik6IERhdGUgfCB1bmRlZmluZWQge1xuICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHJldHVybiB0aGlzLiNnZXRTaG9ydGN1dE9yRGF0ZVZhbHVlKHZhbHVlKTtcbiAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb252ZXJ0cyBhIHN0cmluZyB0byBhIGRhdGUgb2JqZWN0IGlmIHRoZSBzdHJpbmcgaXMgYSB2YWxpZCBkYXRlIHN0cmluZy5cbiAgICogSXQgd2lsbCBhbHNvIGNvbnZlcnQgbnVtZXJpYyBpbnB1dCB0byBhIGRhdGUgaWYgdGhhdCBudW1iZXIgaXMgd2l0aGluIHRoZSBjdXJyZW50IG1vbnRoJ3MgbnVtYmVyIG9mIGRheXMuXG4gICAqIElmIHRoZSBzdHJpbmcgY2FuIG5vdCBiZSBjb252ZXJ0ZWQsIGB1bmRlZmluZWRgIGJlIHJldHVybmVkLlxuICAgKi9cbiAgI2dldFNob3J0Y3V0T3JEYXRlVmFsdWUodmFsdWU6IHN0cmluZyk6IERhdGUgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IG51bSA9IE51bWJlcih2YWx1ZSk7XG4gICAgaWYgKE51bWJlci5pc0ludGVnZXIobnVtKSkge1xuICAgICAgLy8gV2UgcmVxdWlyZSA4IGRpZ2l0cyBpbiBvcmRlciB0byBrbm93IHRoYXQgd2UgaGF2ZSBhbGwgaW5mb3JtYXRpb24gbmVlZGVkIHRvIGRldGVybWluZSB3aGF0IHBhcnQgb2YgdGhlIG51bWJlciBpcyB0aGUgbW9udGggKDIpLCBkYXkgKDIpLCBhbmQgeWVhciAoNCkuXG4gICAgICBpZiAodmFsdWUubGVuZ3RoID09PSA4KSB7XG4gICAgICAgIGNvbnN0IHJlZ2V4ID0gbmV3IFJlZ0V4cCgvXFxiKE1NKVxcYnxcXGIoREQpXFxifFxcYihZWSlcXGJ8XFxiKFlZWVkpXFxiLywgJ2cnKTtcbiAgICAgICAgY29uc3QgZm9ybWF0VG9rZW5zT25seSA9IHRoaXMuZGF0ZUZvcm1hdFxuICAgICAgICAgID8ubWF0Y2gocmVnZXgpXG4gICAgICAgICAgPy5qb2luKCcnKVxuICAgICAgICAgIC5yZXBsYWNlKG5ldyBSZWdFeHAoL1krLyksICdZWVlZJyk7XG5cbiAgICAgICAgaWYgKGZvcm1hdFRva2Vuc09ubHkgJiYgZm9ybWF0VG9rZW5zT25seS5sZW5ndGggPT09IDgpIHtcbiAgICAgICAgICBjb25zdCBkYXRlID0gdGhpcy4jZGF0ZUZvcm1hdHRlci5nZXREYXRlRnJvbVN0cmluZyhcbiAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAgZm9ybWF0VG9rZW5zT25seSxcbiAgICAgICAgICAgIHRydWVcbiAgICAgICAgICApO1xuICAgICAgICAgIGlmICh0aGlzLiNkYXRlRm9ybWF0dGVyLmRhdGVJc1ZhbGlkKGRhdGUpKSB7XG4gICAgICAgICAgICByZXR1cm4gZGF0ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGNvbnN0IG5vdyA9IG5ldyBEYXRlKCk7XG4gICAgICBjb25zdCBzaG9ydGN1dERhdGUgPSBuZXcgRGF0ZShub3cuZ2V0RnVsbFllYXIoKSwgbm93LmdldE1vbnRoKCksIG51bSk7XG4gICAgICBjb25zdCBkYXlzSW5Nb250aCA9IHNob3J0Y3V0RGF0ZS5nZXREYXRlKCk7XG4gICAgICBpZiAobnVtID4gMCAmJiBudW0gPD0gZGF5c0luTW9udGgpIHtcbiAgICAgICAgcmV0dXJuIHNob3J0Y3V0RGF0ZTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgZGF0ZSA9IHRoaXMuI2RhdGVGb3JtYXR0ZXIuZ2V0RGF0ZUZyb21TdHJpbmcoXG4gICAgICAgIHZhbHVlLFxuICAgICAgICB0aGlzLmRhdGVGb3JtYXQsXG4gICAgICAgIHRoaXMuc3RyaWN0XG4gICAgICApO1xuICAgICAgaWYgKHRoaXMuI2RhdGVGb3JtYXR0ZXIuZGF0ZUlzVmFsaWQoZGF0ZSkpIHtcbiAgICAgICAgcmV0dXJuIGRhdGU7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGVzIHRoZSBpbnB1dCB2YWx1ZSB0byBlbnN1cmUgaXQgaXMgZm9ybWF0dGVkIGNvcnJlY3RseS5cbiAgICovXG4gICNpc0RhdGVTdHJpbmdWYWxpZCh2YWx1ZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgaWYgKCF2YWx1ZSB8fCB0eXBlb2YgdmFsdWUgIT09ICdzdHJpbmcnKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICAvLyBEb2VzIHRoZSB2YWx1ZSBvbmx5IGluY2x1ZGUgZGlnaXRzLCBkYXNoZXMsIG9yIHNsYXNoZXM/XG4gICAgY29uc3QgcmVnZXhwID0gL15bXFxkLy1dKyQvO1xuICAgIGNvbnN0IGlzVmFsaWQgPSByZWdleHAudGVzdCh2YWx1ZSk7XG5cbiAgICBpZiAoaXNWYWxpZCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgLy8gSWYgbm90LCBkb2VzIGl0IGNvbmZvcm0gdG8gdGhlIHN0YW5kYXJkIElTTyBmb3JtYXQ/XG4gICAgY29uc3QgaXNWYWxpZElzbyA9IG1vbWVudCh2YWx1ZSwgbW9tZW50LklTT184NjAxKS5pc1ZhbGlkKCk7XG5cbiAgICByZXR1cm4gaXNWYWxpZElzbztcbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZW1wdHktZnVuY3Rpb25cbiAgLy8gaXN0YW5idWwgaWdub3JlIG5leHRcbiAgI29uQ2hhbmdlID0gKF86IGFueSkgPT4ge307XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZW1wdHktZnVuY3Rpb25cbiAgLy8gaXN0YW5idWwgaWdub3JlIG5leHRcbiAgI29uVG91Y2hlZCA9ICgpID0+IHt9O1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWVtcHR5LWZ1bmN0aW9uXG4gIC8vIGlzdGFuYnVsIGlnbm9yZSBuZXh0XG4gICNvblZhbGlkYXRvckNoYW5nZSA9ICgpID0+IHt9O1xuXG4gICN1cGRhdGVQbGFjZWhvbGRlcigpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuI2luaXRpYWxQbGFjZWhvbGRlciAmJiB0aGlzLmRhdGVGb3JtYXQpIHtcbiAgICAgIHRoaXMuI2FkYXB0ZXIuc2V0UGxhY2Vob2xkZXIodGhpcy4jZWxlbWVudFJlZiwgdGhpcy5kYXRlRm9ybWF0KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlIHRoZSB2YWx1ZSBvZiB0aGUgZm9ybSBjb250cm9sIGFuZCBpbnB1dCBlbGVtZW50XG4gICAqIEBwYXJhbSBlbWl0RXZlbnQgRGVub3RlcyBpZiB3ZSBlbWl0IGFuIGV2ZW50IHRvIHRoZSBjb25zdW1lcidzIGZvcm0gY29udHJvbC4gV2UgZG8gbm90IHdhbnQgdG8gZG8gdGhpcyBpZiB0aGUgdmFsdWUgaXMgYmVpbmcgdXBkYXRlZCB2aWEgYSBgc2V0VmFsdWVgIGNhbGwgb3IgYSBgcGF0Y2hWYWx1ZWAgY2FsbCBhcyB0aGlzIGlzIGFscmVhZHkgaGFuZGxlZCBieSBBbmd1bGFyLlxuICAgKiBJbiB0aGVzZSBjYXNlcyB3ZSBkbyBub3Qgd2FudCB0byBmaXJlIGBvbkNoYW5nZWAgYXMgaXQgd2lsbCBjYXVzZSBleHRyYSBgdmFsdWVDaGFuZ2VgIGFuZCBgc3RhdHVzQ2hhbmdlYCBldmVudHMgYW5kIHRoZSBzdGF0dXMgb2YgdGhlIGZvcm0gc2hvdWxkIG5vdCBiZSBhZmZlY3RlZCBieSB0aGVzZSBjaGFuZ2VzLlxuICAgKi9cbiAgI3VwZGF0ZVZhbHVlKHZhbHVlOiBhbnksIGVtaXRFdmVudCA9IHRydWUpOiB2b2lkIHtcbiAgICBpZiAodGhpcy4jX3ZhbHVlID09PSB2YWx1ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGlzVmFsaWREYXRlU3RyaW5nID0gdGhpcy4jaXNEYXRlU3RyaW5nVmFsaWQodmFsdWUpO1xuXG4gICAgLy8gSWYgdGhlIHN0cmluZyB2YWx1ZSBzdXBwbGllZCBpcyBtYWxmb3JtZWQsIGRvIG5vdCBzZXQgdGhlIHZhbHVlIHRvIGl0cyBEYXRlIGVxdWl2YWxlbnQuXG4gICAgLy8gKEphdmFTY3JpcHQncyBEYXRlIHBhcnNlciB3aWxsIGNvbnZlcnQgcG9vcmx5IGZvcm1hdHRlZCBkYXRlcyB0byBEYXRlIG9iamVjdHMsIHN1Y2ggYXMgXCJhYmMgMTIzXCIsIHdoaWNoIGlzbid0IGlkZWFsLilcbiAgICBpZiAoIWlzVmFsaWREYXRlU3RyaW5nKSB7XG4gICAgICB0aGlzLiNfdmFsdWUgPSB2YWx1ZTtcbiAgICAgIGlmIChlbWl0RXZlbnQpIHtcbiAgICAgICAgdGhpcy4jb25DaGFuZ2UodGhpcy4jX3ZhbHVlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuI2NvbnRyb2w/LnNldFZhbHVlKHRoaXMuI192YWx1ZSwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgICAgfVxuXG4gICAgICB0aGlzLiNkYXRlcGlja2VyQ29tcG9uZW50LnNlbGVjdGVkRGF0ZSA9IHRoaXMuI192YWx1ZTtcblxuICAgICAgdGhpcy4jc2V0SW5wdXRFbGVtZW50VmFsdWUodmFsdWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBUaGlzIHZhbHVlIHJlcHJlc2VudHMgdGhlIGRhdGUgdmFsdWUgZm9yIHRoZSBpbnB1dCBpZiBwb3NzaWJsZS5cbiAgICAgIC8vIFRoaXMgdmFsdWUgd2lsbCB0YWtlIGludG8gYWNjb3VudCBhbGwgc2hvcnRjdXQgZnVuY3Rpb25hbGl0eS5cbiAgICAgIGNvbnN0IGRhdGVWYWx1ZTogRGF0ZSB8IHVuZGVmaW5lZCA9IHRoaXMuI2dldERhdGVWYWx1ZSh2YWx1ZSk7XG5cbiAgICAgIGNvbnN0IGFyZURhdGVzRXF1YWwgPVxuICAgICAgICB0aGlzLiNfdmFsdWUgaW5zdGFuY2VvZiBEYXRlICYmXG4gICAgICAgIGRhdGVWYWx1ZSAmJlxuICAgICAgICBkYXRlVmFsdWUuZ2V0VGltZSgpID09PSB0aGlzLiNfdmFsdWUuZ2V0VGltZSgpO1xuXG4gICAgICBpZiAoZGF0ZVZhbHVlICE9PSB0aGlzLiNfdmFsdWUgfHwgIWFyZURhdGVzRXF1YWwpIHtcbiAgICAgICAgdGhpcy4jX3ZhbHVlID0gZGF0ZVZhbHVlIHx8IHZhbHVlO1xuICAgICAgICBpZiAoZW1pdEV2ZW50KSB7XG4gICAgICAgICAgdGhpcy4jb25DaGFuZ2UodGhpcy4jX3ZhbHVlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLiNjb250cm9sPy5zZXRWYWx1ZSh0aGlzLiNfdmFsdWUsIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuI2RhdGVwaWNrZXJDb21wb25lbnQuc2VsZWN0ZWREYXRlID0gdGhpcy4jX3ZhbHVlO1xuICAgICAgfVxuXG4gICAgICBpZiAoZGF0ZVZhbHVlKSB7XG4gICAgICAgIGNvbnN0IGZvcm1hdHRlZERhdGVTdHJpbmcgPSB0aGlzLiNkYXRlRm9ybWF0dGVyLmZvcm1hdChcbiAgICAgICAgICBkYXRlVmFsdWUsXG4gICAgICAgICAgdGhpcy5kYXRlRm9ybWF0XG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuI3NldElucHV0RWxlbWVudFZhbHVlKGZvcm1hdHRlZERhdGVTdHJpbmcpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy4jc2V0SW5wdXRFbGVtZW50VmFsdWUodmFsdWUgfHwgJycpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIl19
495
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZXBpY2tlci1pbnB1dC5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvZGF0ZXRpbWUvc3JjL2xpYi9tb2R1bGVzL2RhdGVwaWNrZXIvZGF0ZXBpY2tlci1pbnB1dC5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxPQUFPLEVBSUwsU0FBUyxFQUVULFlBQVksRUFDWixLQUFLLEVBR0wsUUFBUSxFQUVSLFVBQVUsR0FDWCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBR0wsYUFBYSxFQUNiLGlCQUFpQixHQUdsQixNQUFNLGdCQUFnQixDQUFDO0FBR3hCLE9BQU8sTUFBTSxNQUFNLFFBQVEsQ0FBQztBQUM1QixPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9CLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVqRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNwRCxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQzs7Ozs7O0FBSTNFLE1BQU0sNkJBQTZCLEdBQUc7SUFDcEMsT0FBTyxFQUFFLGlCQUFpQjtJQUMxQixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLDJCQUEyQixDQUFDO0lBQzFELEtBQUssRUFBRSxJQUFJO0NBQ1osQ0FBQztBQUVGLE1BQU0sd0JBQXdCLEdBQUc7SUFDL0IsT0FBTyxFQUFFLGFBQWE7SUFDdEIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQywyQkFBMkIsQ0FBQztJQUMxRCxLQUFLLEVBQUUsSUFBSTtDQUNaLENBQUM7QUFVRixNQUFNLE9BQU8sMkJBQTJCO0lBb0x0QyxZQUNFLE9BQW9DLEVBQ3BDLGNBQWlDLEVBQ2pDLGFBQXlDLEVBQ3pDLFVB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QUEsSUFBSSxpR0FBc0IsTUFBMUIsSUFBSSxFQUF1QixLQUFLLElBQUksRUFBRSxDQUFDLENBQUM7U0FDekM7S0FDRjtBQUNILENBQUM7eUhBcmtCVSwyQkFBMkI7NkdBQTNCLDJCQUEyQiwwWUFOM0I7UUFDVCw2QkFBNkI7UUFDN0Isd0JBQXdCO1FBQ3hCLDJCQUEyQjtLQUM1Qjs0RkFFVSwyQkFBMkI7a0JBUnZDLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLHNCQUFzQjtvQkFDaEMsU0FBUyxFQUFFO3dCQUNULDZCQUE2Qjt3QkFDN0Isd0JBQXdCO3dCQUN4QiwyQkFBMkI7cUJBQzVCO2lCQUNGOzswQkE2TEksUUFBUTs0Q0E3S0EsVUFBVTtzQkFEcEIsS0FBSztnQkF1QkssUUFBUTtzQkFEbEIsS0FBSztnQkFvQkssT0FBTztzQkFEakIsS0FBSztnQkFrQkssT0FBTztzQkFEakIsS0FBSztnQkFvQkssa0JBQWtCO3NCQUQ1QixLQUFLO2dCQW9CQyx1QkFBdUI7c0JBRDdCLEtBQUs7Z0JBVUssV0FBVztzQkFEckIsS0FBSztnQkFzQkssTUFBTTtzQkFEaEIsS0FBSztnQkFpSUMsYUFBYTtzQkFEbkIsWUFBWTt1QkFBQyxRQUFRLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0JBMEIzQixXQUFXO3NCQURqQixZQUFZO3VCQUFDLE1BQU07Z0JBTWIsT0FBTztzQkFEYixZQUFZO3VCQUFDLE9BQU8iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBZnRlckNvbnRlbnRJbml0LFxuICBBZnRlclZpZXdJbml0LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgRGlyZWN0aXZlLFxuICBFbGVtZW50UmVmLFxuICBIb3N0TGlzdGVuZXIsXG4gIElucHV0LFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgT3B0aW9uYWwsXG4gIFJlbmRlcmVyMixcbiAgZm9yd2FyZFJlZixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBBYnN0cmFjdENvbnRyb2wsXG4gIENvbnRyb2xWYWx1ZUFjY2Vzc29yLFxuICBOR19WQUxJREFUT1JTLFxuICBOR19WQUxVRV9BQ0NFU1NPUixcbiAgVmFsaWRhdGlvbkVycm9ycyxcbiAgVmFsaWRhdG9yLFxufSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBTa3lBcHBMb2NhbGVQcm92aWRlciwgU2t5TGliUmVzb3VyY2VzU2VydmljZSB9IGZyb20gJ0Bza3l1eC9pMThuJztcblxuaW1wb3J0IG1vbWVudCBmcm9tICdtb21lbnQnO1xuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZGlzdGluY3RVbnRpbENoYW5nZWQsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHsgU2t5RGF0ZUZvcm1hdHRlciB9IGZyb20gJy4vZGF0ZS1mb3JtYXR0ZXInO1xuaW1wb3J0IHsgU2t5RGF0ZXBpY2tlckFkYXB0ZXJTZXJ2aWNlIH0gZnJvbSAnLi9kYXRlcGlja2VyLWFkYXB0ZXIuc2VydmljZSc7XG5pbXBvcnQgeyBTa3lEYXRlcGlja2VyQ29uZmlnU2VydmljZSB9IGZyb20gJy4vZGF0ZXBpY2tlci1jb25maWcuc2VydmljZSc7XG5pbXBvcnQgeyBTa3lEYXRlcGlja2VyQ29tcG9uZW50IH0gZnJvbSAnLi9kYXRlcGlja2VyLmNvbXBvbmVudCc7XG5cbmNvbnN0IFNLWV9EQVRFUElDS0VSX1ZBTFVFX0FDQ0VTU09SID0ge1xuICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gU2t5RGF0ZXBpY2tlcklucHV0RGlyZWN0aXZlKSxcbiAgbXVsdGk6IHRydWUsXG59O1xuXG5jb25zdCBTS1lfREFURVBJQ0tFUl9WQUxJREFUT1IgPSB7XG4gIHByb3ZpZGU6IE5HX1ZBTElEQVRPUlMsXG4gIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IFNreURhdGVwaWNrZXJJbnB1dERpcmVjdGl2ZSksXG4gIG11bHRpOiB0cnVlLFxufTtcblxuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiAnW3NreURhdGVwaWNrZXJJbnB1dF0nLFxuICBwcm92aWRlcnM6IFtcbiAgICBTS1lfREFURVBJQ0tFUl9WQUxVRV9BQ0NFU1NPUixcbiAgICBTS1lfREFURVBJQ0tFUl9WQUxJREFUT1IsXG4gICAgU2t5RGF0ZXBpY2tlckFkYXB0ZXJTZXJ2aWNlLFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBTa3lEYXRlcGlja2VySW5wdXREaXJlY3RpdmVcbiAgaW1wbGVtZW50c1xuICAgIE9uSW5pdCxcbiAgICBPbkRlc3Ryb3ksXG4gICAgQWZ0ZXJWaWV3SW5pdCxcbiAgICBBZnRlckNvbnRlbnRJbml0LFxuICAgIENvbnRyb2xWYWx1ZUFjY2Vzc29yLFxuICAgIFZhbGlkYXRvclxue1xuICAvKipcbiAgICogU3BlY2lmaWVzIHRoZSBkYXRlIGZvcm1hdCBmb3IgdGhlIGlucHV0LiBQbGFjZSB0aGlzIGF0dHJpYnV0ZSBvbiB0aGUgYGlucHV0YCBlbGVtZW50XG4gICAqIHRvIG92ZXJyaWRlIHRoZSBkZWZhdWx0IGluIHRoZSBgU2t5RGF0ZXBpY2tlckNvbmZpZ1NlcnZpY2VgLlxuICAgKiBAZGVmYXVsdCBcIk1NL0REL1lZWVlcIlxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBkYXRlRm9ybWF0KHZhbHVlOiBzdHJpbmcgfCB1bmRlZmluZWQpIHtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgIGlmICh2YWx1ZSAhPT0gdGhpcy4jX2RhdGVGb3JtYXQpIHtcbiAgICAgIHRoaXMuI19kYXRlRm9ybWF0ID0gdmFsdWU7XG4gICAgICB0aGlzLiNhcHBseURhdGVGb3JtYXQoKTtcbiAgICB9XG4gIH1cblxuICAvLyBUT0RPOiBSZWZhY3RvciB0byBub3QgaGF2ZSBnZXR0ZXIgbG9naWNcbiAgcHVibGljIGdldCBkYXRlRm9ybWF0KCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMuI19kYXRlRm9ybWF0IHx8XG4gICAgICB0aGlzLiNjb25maWdTZXJ2aWNlLmRhdGVGb3JtYXQgfHxcbiAgICAgIHRoaXMuI3ByZWZlcnJlZFNob3J0RGF0ZUZvcm1hdFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogSW5kaWNhdGVzIHdoZXRoZXIgdG8gZGlzYWJsZSB0aGUgZGF0ZXBpY2tlci5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgZGlzYWJsZWQodmFsdWU6IGJvb2xlYW4gfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLiNfZGlzYWJsZWQgPSB2YWx1ZSB8fCBmYWxzZTtcbiAgICB0aGlzLiNkYXRlcGlja2VyQ29tcG9uZW50LmRpc2FibGVkID0gdmFsdWU7XG4gICAgdGhpcy4jcmVuZGVyZXIuc2V0UHJvcGVydHkoXG4gICAgICB0aGlzLiNlbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsXG4gICAgICAnZGlzYWJsZWQnLFxuICAgICAgdmFsdWVcbiAgICApO1xuICB9XG5cbiAgcHVibGljIGdldCBkaXNhYmxlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy4jX2Rpc2FibGVkO1xuICB9XG5cbiAgLyoqXG4gICAqIFNwZWNpZmllcyB0aGUgbGF0ZXN0IGRhdGUgdGhhdCBpcyBhdmFpbGFibGUgaW4gdGhlIGNhbGVuZGFyLiBQbGFjZSB0aGlzIGF0dHJpYnV0ZSBvblxuICAgKiB0aGUgYGlucHV0YCBlbGVtZW50IHRvIG92ZXJyaWRlIHRoZSBkZWZhdWx0IGluIGBTa3lEYXRlcGlja2VyQ29uZmlnU2VydmljZWAuXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IG1heERhdGUodmFsdWU6IERhdGUgfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLiNfbWF4RGF0ZSA9IHZhbHVlO1xuICAgIHRoaXMuI2RhdGVwaWNrZXJDb21wb25lbnQubWF4RGF0ZSA9IHRoaXMubWF4RGF0ZTtcblxuICAgIHRoaXMuI29uVmFsaWRhdG9yQ2hhbmdlKCk7XG4gIH1cblxuICAvLyBUT0RPOiBSZWZhY3RvciB0byBub3QgaGF2ZSBnZXR0ZXIgbG9naWNcbiAgcHVibGljIGdldCBtYXhEYXRlKCk6IERhdGUgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLiNfbWF4RGF0ZSB8fCB0aGlzLiNjb25maWdTZXJ2aWNlLm1heERhdGU7XG4gIH1cblxuICAvKipcbiAgICogU3BlY2lmaWVzIHRoZSBlYXJsaWVzdCBkYXRlIHRoYXQgaXMgYXZhaWxhYmxlIGluIHRoZSBjYWxlbmRhci4gUGxhY2UgdGhpcyBhdHRyaWJ1dGUgb25cbiAgICogdGhlIGBpbnB1dGAgZWxlbWVudCB0byBvdmVycmlkZSB0aGUgZGVmYXVsdCBpbiBgU2t5RGF0ZXBpY2tlckNvbmZpZ1NlcnZpY2VgLiBUbyBhdm9pZCB2YWxpZGF0aW9uIGVycm9ycywgdGhlIHRpbWUgYXNzb2NpYXRlZCB3aXRoIHRoZSBtaW5pbXVtIGRhdGUgbXVzdCBiZSBtaWRuaWdodC4gVGhpcyBpcyBuZWNlc3NhcnkgYmVjYXVzZSB0aGUgZGF0ZXBpY2tlciBhdXRvbWF0aWNhbGx5IHNldHMgdGhlIHRpbWUgb24gdGhlIGBEYXRlYCBvYmplY3QgZm9yIHNlbGVjdGVkIGRhdGVzIHRvIG1pZG5pZ2h0IGluIHRoZSBjdXJyZW50IHVzZXIncyB0aW1lIHpvbmUuXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IG1pbkRhdGUodmFsdWU6IERhdGUgfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLiNfbWluRGF0ZSA9IHZhbHVlO1xuICAgIHRoaXMuI2RhdGVwaWNrZXJDb21wb25lbnQubWluRGF0ZSA9IHRoaXMubWluRGF0ZTtcblxuICAgIHRoaXMuI29uVmFsaWRhdG9yQ2hhbmdlKCk7XG4gIH1cblxuICAvLyBUT0RPOiBSZWZhY3RvciB0byBub3QgaGF2ZSBnZXR0ZXIgbG9naWNcbiAgcHVibGljIGdldCBtaW5EYXRlKCk6IERhdGUgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLiNfbWluRGF0ZSB8fCB0aGlzLiNjb25maWdTZXJ2aWNlLm1pbkRhdGU7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyB0aGUgZGF0ZXBpY2tlciBpbnB1dCBhbmQgY2FsZW5kYXIuIFBsYWNlIHRoaXMgZGlyZWN0aXZlIG9uIGFuIGBpbnB1dGAgZWxlbWVudCxcbiAgICogYW5kIHdyYXAgdGhlIGlucHV0IGluIGEgYHNreS1kYXRlcGlja2VyYCBjb21wb25lbnQuIFRoZSB2YWx1ZSB0aGF0IHVzZXJzIHNlbGVjdCBpcyBkcml2ZW5cbiAgICogdGhyb3VnaCB0aGUgYG5nTW9kZWxgIGF0dHJpYnV0ZSBzcGVjaWZpZWQgb24gdGhlIGBpbnB1dGAgZWxlbWVudC5cbiAgICogQHJlcXVpcmVkXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IHNreURhdGVwaWNrZXJJbnB1dChcbiAgICB2YWx1ZTogU2t5RGF0ZXBpY2tlckNvbXBvbmVudCB8IHVuZGVmaW5lZCB8ICcnXG4gICkge1xuICAgIGlmICh2YWx1ZSkge1xuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAnW0RlcHJlY2F0aW9uIHdhcm5pbmddIFlvdSBubyBsb25nZXIgbmVlZCB0byBwcm92aWRlIGEgdGVtcGxhdGUgcmVmZXJlbmNlIHZhcmlhYmxlICcgK1xuICAgICAgICAgICd0byB0aGUgYHNreURhdGVwaWNrZXJJbnB1dGAgYXR0cmlidXRlICh0aGlzIHdpbGwgYmUgYSBicmVha2luZyBjaGFuZ2UgaW4gdGhlIG5leHQgJyArXG4gICAgICAgICAgJ21ham9yIHZlcnNpb24gcmVsZWFzZSkuXFxuJyArXG4gICAgICAgICAgJ0RvIHRoaXMgaW5zdGVhZDpcXG4nICtcbiAgICAgICAgICAnPHNreS1kYXRlcGlja2VyPlxcbiAgPGlucHV0IHNreURhdGVwaWNrZXJJbnB1dCAvPlxcbjwvc2t5LWRhdGVwaWNrZXI+J1xuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSW5kaWNhdGVzIHdoZXRoZXIgdG8gZGlzYWJsZSBkYXRlIHZhbGlkYXRpb24gb24gdGhlIGRhdGVwaWNrZXIgaW5wdXQuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2t5RGF0ZXBpY2tlck5vVmFsaWRhdGU6IGJvb2xlYW4gfCB1bmRlZmluZWQgPSBmYWxzZTtcblxuICAvKipcbiAgICogU3BlY2lmaWVzIHRoZSBzdGFydGluZyBkYXkgb2YgdGhlIHdlZWsgaW4gdGhlIGNhbGVuZGFyLCB3aGVyZSBgMGAgc2V0cyB0aGUgc3RhcnRpbmcgZGF5XG4gICAqIHRvIFN1bmRheS4gUGxhY2UgdGhpcyBhdHRyaWJ1dGUgb24gdGhlIGBpbnB1dGAgZWxlbWVudCB0byBvdmVycmlkZSB0aGUgZGVmYXVsdFxuICAgKiBpbiBgU2t5RGF0ZXBpY2tlckNvbmZpZ1NlcnZpY2VgLlxuICAgKiBAZGVmYXVsdCAwXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IHN0YXJ0aW5nRGF5KHZhbHVlOiBudW1iZXIgfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLiNfc3RhcnRpbmdEYXkgPSB2YWx1ZTtcbiAgICB0aGlzLiNkYXRlcGlja2VyQ29tcG9uZW50LnN0YXJ0aW5nRGF5ID0gdGhpcy5zdGFydGluZ0RheTtcblxuICAgIHRoaXMuI29uVmFsaWRhdG9yQ2hhbmdlKCk7XG4gIH1cblxuICAvLyBUT0RPOiBSZWZhY3RvciB0byBub3QgaGF2ZSBnZXR0ZXIgbG9naWNcbiAgcHVibGljIGdldCBzdGFydGluZ0RheSgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLiNfc3RhcnRpbmdEYXkgfHwgdGhpcy4jY29uZmlnU2VydmljZS5zdGFydGluZ0RheTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgd2hldGhlciB0aGUgZm9ybWF0IG9mIHRoZSBkYXRlIHZhbHVlIG11c3QgbWF0Y2ggdGhlIGZvcm1hdCBmcm9tIHRoZSBgZGF0ZUZvcm1hdGAgdmFsdWUuXG4gICAqIElmIHRoaXMgcHJvcGVydHkgaXMgYHRydWVgIGFuZCB0aGUgZGF0ZXBpY2tlciBpbnB1dCBkaXJlY3RpdmUgY2Fubm90IGZpbmQgYW4gZXhhY3QgbWF0Y2gsIHRoZW5cbiAgICogdGhlIGlucHV0IGlzIG1hcmtlZCBhcyBpbnZhbGlkLlxuICAgKiBJZiB0aGlzIHByb3BlcnR5IGlzIGBmYWxzZWAgYW5kIHRoZSBkYXRlcGlja2VyIGlucHV0IGRpcmVjdGl2ZSBjYW5ub3QgZmluZCBhbiBleGFjdCBtYXRjaCwgdGhlblxuICAgKiBpdCBhdHRlbXB0cyB0byBmb3JtYXQgdGhlIHN0cmluZyBiYXNlZCBvbiB0aGUgW0lTTyA4NjAxIHN0YW5kYXJkIGZvcm1hdF0oaHR0cHM6Ly93d3cuaXNvLm9yZy9pc28tODYwMS1kYXRlLWFuZC10aW1lLWZvcm1hdC5odG1sKS5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgc3RyaWN0KHZhbHVlOiBib29sZWFuIHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy4jX3N0cmljdCA9IHZhbHVlIHx8IGZhbHNlO1xuICB9XG5cbiAgcHVibGljIGdldCBzdHJpY3QoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuI19zdHJpY3Q7XG4gIH1cblxuICBnZXQgI3ZhbHVlKCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMuI192YWx1ZTtcbiAgfVxuXG4gIHNldCAjdmFsdWUodmFsdWU6IGFueSkge1xuICAgIHRoaXMuI3VwZGF0ZVZhbHVlKHZhbHVlKTtcbiAgfVxuXG4gICNjb250cm9sOiBBYnN0cmFjdENvbnRyb2wgfCB1bmRlZmluZWQ7XG4gICNkYXRlRm9ybWF0dGVyID0gbmV3IFNreURhdGVGb3JtYXR0ZXIoKTtcbiAgI2luaXRpYWxQbGFjZWhvbGRlcjogc3RyaW5nO1xuICAjcHJlZmVycmVkU2hvcnREYXRlRm9ybWF0OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICNuZ1Vuc3Vic2NyaWJlID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICAjX2RhdGVGb3JtYXQ6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgI19kaXNhYmxlZCA9IGZhbHNlO1xuICAjX21heERhdGU6IERhdGUgfCB1bmRlZmluZWQ7XG4gICNfbWluRGF0ZTogRGF0ZSB8IHVuZGVmaW5lZDtcbiAgI19zdGFydGluZ0RheTogbnVtYmVyIHwgdW5kZWZpbmVkO1xuICAjX3N0cmljdCA9IGZhbHNlO1xuICAjX3ZhbHVlOiBhbnk7XG5cbiAgI2FkYXB0ZXI6IFNreURhdGVwaWNrZXJBZGFwdGVyU2VydmljZTtcbiAgI2NoYW5nZURldGVjdG9yOiBDaGFuZ2VEZXRlY3RvclJlZjtcbiAgI2NvbmZpZ1NlcnZpY2U6IFNreURhdGVwaWNrZXJDb25maWdTZXJ2aWNlO1xuICAjZWxlbWVudFJlZjogRWxlbWVudFJlZjtcbiAgI2xvY2FsZVByb3ZpZGVyOiBTa3lBcHBMb2NhbGVQcm92aWRlcjtcbiAgI3JlbmRlcmVyOiBSZW5kZXJlcjI7XG4gICNyZXNvdXJjZXNTZXJ2aWNlOiBTa3lMaWJSZXNvdXJjZXNTZXJ2aWNlO1xuICAjZGF0ZXBpY2tlckNvbXBvbmVudDogU2t5RGF0ZXBpY2tlckNvbXBvbmVudDtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBhZGFwdGVyOiBTa3lEYXRlcGlja2VyQWRhcHRlclNlcnZpY2UsXG4gICAgY2hhbmdlRGV0ZWN0b3I6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIGNvbmZpZ1NlcnZpY2U6IFNreURhdGVwaWNrZXJDb25maWdTZXJ2aWNlLFxuICAgIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYsXG4gICAgbG9jYWxlUHJvdmlkZXI6IFNreUFwcExvY2FsZVByb3ZpZGVyLFxuICAgIHJlbmRlcmVyOiBSZW5kZXJlcjIsXG4gICAgcmVzb3VyY2VzU2VydmljZTogU2t5TGliUmVzb3VyY2VzU2VydmljZSxcbiAgICBAT3B0aW9uYWwoKSBkYXRlcGlja2VyQ29tcG9uZW50PzogU2t5RGF0ZXBpY2tlckNvbXBvbmVudFxuICApIHtcbiAgICBpZiAoIWRhdGVwaWNrZXJDb21wb25lbnQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgJ1lvdSBtdXN0IHdyYXAgdGhlIGBza3lEYXRlcGlja2VySW5wdXRgIGRpcmVjdGl2ZSB3aXRoaW4gYSAnICtcbiAgICAgICAgICAnYDxza3ktZGF0ZXBpY2tlcj5gIGNvbXBvbmVudCEnXG4gICAgICApO1xuICAgIH1cbiAgICB0aGlzLiNhZGFwdGVyID0gYWRhcHRlcjtcbiAgICB0aGlzLiNjaGFuZ2VEZXRlY3RvciA9IGNoYW5nZURldGVjdG9yO1xuICAgIHRoaXMuI2NvbmZpZ1NlcnZpY2UgPSBjb25maWdTZXJ2aWNlO1xuICAgIHRoaXMuI2VsZW1lbnRSZWYgPSBlbGVtZW50UmVmO1xuICAgIHRoaXMuI2xvY2FsZVByb3ZpZGVyID0gbG9jYWxlUHJvdmlkZXI7XG4gICAgdGhpcy4jcmVuZGVyZXIgPSByZW5kZXJlcjtcbiAgICB0aGlzLiNyZXNvdXJjZXNTZXJ2aWNlID0gcmVzb3VyY2VzU2VydmljZTtcbiAgICB0aGlzLiNkYXRlcGlja2VyQ29tcG9uZW50ID0gZGF0ZXBpY2tlckNvbXBvbmVudDtcbiAgICB0aGlzLiNpbml0aWFsUGxhY2Vob2xkZXIgPSB0aGlzLiNhZGFwdGVyLmdldFBsYWNlaG9sZGVyKHRoaXMuI2VsZW1lbnRSZWYpO1xuICAgIHRoaXMuI3VwZGF0ZVBsYWNlaG9sZGVyKCk7XG5cbiAgICB0aGlzLiNsb2NhbGVQcm92aWRlclxuICAgICAgLmdldExvY2FsZUluZm8oKVxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuI25nVW5zdWJzY3JpYmUpKVxuICAgICAgLnN1YnNjcmliZSgobG9jYWxlSW5mbykgPT4ge1xuICAgICAgICBTa3lEYXRlRm9ybWF0dGVyLnNldExvY2FsZShsb2NhbGVJbmZvLmxvY2FsZSk7XG4gICAgICAgIHRoaXMuI3ByZWZlcnJlZFNob3J0RGF0ZUZvcm1hdCA9XG4gICAgICAgICAgU2t5RGF0ZUZvcm1hdHRlci5nZXRQcmVmZXJyZWRTaG9ydERhdGVGb3JtYXQoKTtcbiAgICAgICAgdGhpcy4jYXBwbHlEYXRlRm9ybWF0KCk7XG4gICAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICBjb25zdCBlbGVtZW50ID0gdGhpcy4jZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O1xuXG4gICAgdGhpcy4jcmVuZGVyZXIuYWRkQ2xhc3MoZWxlbWVudCwgJ3NreS1mb3JtLWNvbnRyb2wnKTtcblxuICAgIGNvbnN0IGhhc0FyaWFMYWJlbCA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlKCdhcmlhLWxhYmVsJyk7XG5cbiAgICBpZiAoIWhhc0FyaWFMYWJlbCkge1xuICAgICAgdGhpcy4jcmVzb3VyY2VzU2VydmljZVxuICAgICAgICAuZ2V0U3RyaW5nKCdza3l1eF9kYXRlX2ZpZWxkX2RlZmF1bHRfbGFiZWwnKVxuICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy4jbmdVbnN1YnNjcmliZSkpXG4gICAgICAgIC5zdWJzY3JpYmUoKHZhbHVlOiBzdHJpbmcpID0+IHtcbiAgICAgICAgICB0aGlzLiNyZW5kZXJlci5zZXRBdHRyaWJ1dGUoZWxlbWVudCwgJ2FyaWEtbGFiZWwnLCB2YWx1ZSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBuZ0FmdGVyQ29udGVudEluaXQoKTogdm9pZCB7XG4gICAgdGhpcy4jZGF0ZXBpY2tlckNvbXBvbmVudC5kYXRlQ2hhbmdlXG4gICAgICAucGlwZShkaXN0aW5jdFVudGlsQ2hhbmdlZCgpKVxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuI25nVW5zdWJzY3JpYmUpKVxuICAgICAgLnN1YnNjcmliZSgodmFsdWU6IERhdGUpID0+IHtcbiAgICAgICAgdGhpcy4jdmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgdGhpcy4jb25Ub3VjaGVkKCk7XG4gICAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgLy8gVGhpcyBpcyBuZWVkZWQgdG8gYWRkcmVzcyBhIGJ1ZyBpbiBBbmd1bGFyIDQuXG4gICAgLy8gV2hlbiBhIGNvbnRyb2wgdmFsdWUgaXMgc2V0IGluaXRpYWxseSwgaXRzIHZhbHVlIGlzIG5vdCByZXByZXNlbnRlZCBvbiB0aGUgdmlldy5cbiAgICAvLyBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9hbmd1bGFyL2FuZ3VsYXIvaXNzdWVzLzEzNzkyXG4gICAgLy8gT2Ygbm90ZSBpcyB0aGUgcGFyZW50IGNoZWNrIHdoaWNoIGFsbG93cyB1cyB0byBkZXRlcm1pbmUgaWYgdGhlIGZvcm0gaXMgcmVhY3RpdmUuXG4gICAgLy8gV2l0aG91dCB0aGlzIGNoZWNrIHRoZXJlIGlzIGEgY2hhbmdlZCBiZWZvcmUgY2hlY2tlZCBlcnJvclxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgaWYgKHRoaXMuI2NvbnRyb2wgJiYgdGhpcy4jY29udHJvbC5wYXJlbnQpIHtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLiNjb250cm9sPy5zZXRWYWx1ZSh0aGlzLiN2YWx1ZSwge1xuICAgICAgICAgIGVtaXRFdmVudDogZmFsc2UsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuI2NoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuI25nVW5zdWJzY3JpYmUubmV4dCgpO1xuICAgIHRoaXMuI25nVW5zdWJzY3JpYmUuY29tcGxldGUoKTtcbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ2NoYW5nZScsIFsnJGV2ZW50J10pXG4gIHB1YmxpYyBvbklucHV0Q2hhbmdlKGV2ZW50OiBhbnkpIHtcbiAgICBjb25zdCB2YWx1ZSA9IGV2ZW50LnRhcmdldC52YWx1ZTtcblxuICAgIGlmICh0aGlzLnNreURhdGVwaWNrZXJOb1ZhbGlkYXRlKSB7XG4gICAgICB0aGlzLiNvblZhbHVlQ2hhbmdlKHZhbHVlKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBEb24ndCB0cnkgdG8gcGFyc2UgdGhlIHN0cmluZyB2YWx1ZSBpbnRvIGEgRGF0ZSB2YWx1ZSBpZiBpdCBpcyBtYWxmb3JtZWQuXG4gICAgaWYgKHRoaXMuI2lzRGF0ZVN0cmluZ1ZhbGlkKHZhbHVlKSkge1xuICAgICAgdGhpcy4jb25WYWx1ZUNoYW5nZSh2YWx1ZSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy4jX3ZhbHVlID0gdmFsdWU7XG4gICAgdGhpcy4jb25DaGFuZ2UodmFsdWUpO1xuXG4gICAgdGhpcy4jY29udHJvbD8uc2V0RXJyb3JzKHtcbiAgICAgIHNreURhdGU6IHtcbiAgICAgICAgaW52YWxpZDogdHJ1ZSxcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCdibHVyJylcbiAgcHVibGljIG9uSW5wdXRCbHVyKCk6IHZvaWQge1xuICAgIHRoaXMuI29uVG91Y2hlZCgpO1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignaW5wdXQnKVxuICBwdWJsaWMgb25JbnB1dCgpOiB2b2lkIHtcbiAgICB0aGlzLiNjb250cm9sPy5tYXJrQXNEaXJ0eSgpO1xuICB9XG5cbiAgcHVibGljIHdyaXRlVmFsdWUodmFsdWU6IGFueSk6IHZvaWQge1xuICAgIHRoaXMuI3VwZGF0ZVZhbHVlKHZhbHVlLCBmYWxzZSk7XG4gIH1cblxuICBwdWJsaWMgdmFsaWRhdGUoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwge1xuICAgIGlmICghdGhpcy4jY29udHJvbCkge1xuICAgICAgdGhpcy4jY29udHJvbCA9IGNvbnRyb2w7XG4gICAgICAvLyBBY2NvdW50IGZvciBhbnkgZGF0ZSBjb252ZXJzaW9uIHRoYXQgbWF5IGhhdmUgb2NjdXJyZWQgcHJpb3IgdG8gdmFsaWRhdGlvbi5cbiAgICAgIGlmICh0aGlzLiNjb250cm9sLnZhbHVlICE9PSB0aGlzLiN2YWx1ZSkge1xuICAgICAgICB0aGlzLiNjb250cm9sLnBhdGNoVmFsdWUodGhpcy4jdmFsdWUsIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy5za3lEYXRlcGlja2VyTm9WYWxpZGF0ZSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY29uc3QgdmFsdWU6IHVua25vd24gPSBjb250cm9sLnZhbHVlO1xuXG4gICAgaWYgKCF2YWx1ZSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgRGF0ZSkge1xuICAgICAgY29uc3QgaXNEYXRlVmFsaWQgPSB0aGlzLiNkYXRlRm9ybWF0dGVyLmRhdGVJc1ZhbGlkKHZhbHVlKTtcblxuICAgICAgaWYgKCFpc0RhdGVWYWxpZCkge1xuICAgICAgICAvLyBNYXJrIHRoZSBpbnZhbGlkIGNvbnRyb2wgYXMgdG91Y2hlZCBzbyB0aGF0IHRoZSBpbnB1dCdzIGludmFsaWQgQ1NTIHN0eWxlcyBhcHBlYXIuXG4gICAgICAgIC8vIChUaGlzIGlzIG9ubHkgcmVxdWlyZWQgd2hlbiB0aGUgaW52YWxpZCB2YWx1ZSBpcyBzZXQgYnkgdGhlIEZvcm1Db250cm9sIGNvbnN0cnVjdG9yLilcbiAgICAgICAgdGhpcy4jY29udHJvbC5tYXJrQXNUb3VjaGVkKCk7XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBza3lEYXRlOiB7XG4gICAgICAgICAgICBpbnZhbGlkOiB2YWx1ZSxcbiAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICBjb25zdCBtaW5EYXRlID0gdGhpcy5taW5EYXRlO1xuXG4gICAgICBpZiAoXG4gICAgICAgIG1pbkRhdGUgJiZcbiAgICAgICAgdGhpcy4jZGF0ZUZvcm1hdHRlci5kYXRlSXNWYWxpZChtaW5EYXRlKSAmJlxuICAgICAgICB2YWx1ZSA8IG1pbkRhdGVcbiAgICAgICkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHNreURhdGU6IHtcbiAgICAgICAgICAgIG1pbkRhdGUsXG4gICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgbWF4RGF0ZSA9IHRoaXMubWF4RGF0ZTtcblxuICAgICAgaWYgKFxuICAgICAgICBtYXhEYXRlICYmXG4gICAgICAgIHRoaXMuI2RhdGVGb3JtYXR0ZXIuZGF0ZUlzVmFsaWQobWF4RGF0ZSkgJiZcbiAgICAgICAgdmFsdWUgPiBtYXhEYXRlXG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBza3lEYXRlOiB7XG4gICAgICAgICAgICBtYXhEYXRlLFxuICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIE1hcmsgdGhlIGludmFsaWQgY29udHJvbCBhcyB0b3VjaGVkIHNvIHRoYXQgdGhlIGlucHV0J3MgaW52YWxpZCBDU1Mgc3R5bGVzIGFwcGVhci5cbiAgICAgIC8vIChUaGlzIGlzIG9ubHkgcmVxdWlyZWQgd2hlbiB0aGUgaW52YWxpZCB2YWx1ZSBpcyBzZXQgYnkgdGhlIEZvcm1Db250cm9sIGNvbnN0cnVjdG9yLilcbiAgICAgIHRoaXMuI2NvbnRyb2wubWFya0FzVG91Y2hlZCgpO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBza3lEYXRlOiB7XG4gICAgICAgICAgaW52YWxpZDogdmFsdWUsXG4gICAgICAgIH0sXG4gICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHB1YmxpYyByZWdpc3Rlck9uQ2hhbmdlKGZuOiAodmFsdWU6IGFueSkgPT4gdm9pZCk6IHZvaWQge1xuICAgIHRoaXMuI29uQ2hhbmdlID0gZm47XG4gIH1cblxuICBwdWJsaWMgcmVnaXN0ZXJPblRvdWNoZWQoZm46ICgpID0+IHZvaWQpOiB2b2lkIHtcbiAgICB0aGlzLiNvblRvdWNoZWQgPSBmbjtcbiAgfVxuXG4gIHB1YmxpYyByZWdpc3Rlck9uVmFsaWRhdG9yQ2hhbmdlKGZuOiAoKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgdGhpcy4jb25WYWxpZGF0b3JDaGFuZ2UgPSBmbjtcbiAgfVxuXG4gIHB1YmxpYyBzZXREaXNhYmxlZFN0YXRlKGRpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5kaXNhYmxlZCA9IGRpc2FibGVkO1xuICAgIHRoaXMuI2RhdGVwaWNrZXJDb21wb25lbnQuZGlzYWJsZWQgPSBkaXNhYmxlZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXRlY3RzIGNoYW5nZXMgdG8gdGhlIHVuZGVybHlpbmcgaW5wdXQgZWxlbWVudCdzIHZhbHVlIGFuZCB1cGRhdGVzIHRoZSBuZ01vZGVsIGFjY29yZGluZ2x5LlxuICAgKiBUaGlzIGlzIHVzZWZ1bCBpZiB5b3UgbmVlZCB0byB1cGRhdGUgdGhlIG5nTW9kZWwgdmFsdWUgYmVmb3JlIHRoZSBpbnB1dCBlbGVtZW50IGxvc2VzIGZvY3VzLlxuICAgKi9cbiAgcHVibGljIGRldGVjdElucHV0VmFsdWVDaGFuZ2UoKTogdm9pZCB7XG4gICAgdGhpcy4jb25WYWx1ZUNoYW5nZSh0aGlzLiNlbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQudmFsdWUpO1xuICB9XG5cbiAgI2FwcGx5RGF0ZUZvcm1hdCgpOiB2b2lkIHtcbiAgICB0aGlzLiN1cGRhdGVQbGFjZWhvbGRlcigpO1xuICAgIGlmICh0aGlzLiN2YWx1ZSkge1xuICAgICAgY29uc3QgZm9ybWF0dGVkRGF0ZSA9IHRoaXMuI2RhdGVGb3JtYXR0ZXIuZm9ybWF0KFxuICAgICAgICB0aGlzLiN2YWx1ZSxcbiAgICAgICAgdGhpcy5kYXRlRm9ybWF0XG4gICAgICApO1xuICAgICAgdGhpcy4jc2V0SW5wdXRFbGVtZW50VmFsdWUoZm9ybWF0dGVkRGF0ZSk7XG4gICAgICB0aGlzLiNjaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG4gIH1cblxuICAjb25WYWx1ZUNoYW5nZShuZXdWYWx1ZTogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy4jdmFsdWUgPSBuZXdWYWx1ZTtcbiAgfVxuXG4gICNzZXRJbnB1dEVsZW1lbnRWYWx1ZSh2YWx1ZTogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy4jcmVuZGVyZXIuc2V0UHJvcGVydHkodGhpcy4jZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCAndmFsdWUnLCB2YWx1ZSk7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgZGF0ZSB2YWx1ZSBmcm9tIGEgdmFsdWUgLSBpZiBwb3NzaWJsZS5cbiAgICogV2lsbCBub3QgY29udmVydCB1bmNvbnZlcnRpYmxlIGRhdGVzIG9yIG51bWJlcnMgb3V0c2lkZSBvZiB0aGUgY3VycmVudCBtb250aCdzIG51bWJlciBvZiBkYXlzLlxuICAgKiBSZXR1cm5zIGB1bmRlZmluZWRgIGlmIHRoZSB2YWx1ZSBjYW4gbm90IGJlIGNvbnZlcnRlZC5cbiAgICovXG4gICNnZXREYXRlVmFsdWUodmFsdWU6IHVua25vd24pOiBEYXRlIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBEYXRlKSB7XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICByZXR1cm4gdGhpcy4jZ2V0U2hvcnRjdXRPckRhdGVWYWx1ZSh2YWx1ZSk7XG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICAvKipcbiAgICogQ29udmVydHMgYSBzdHJpbmcgdG8gYSBkYXRlIG9iamVjdCBpZiB0aGUgc3RyaW5nIGlzIGEgdmFsaWQgZGF0ZSBzdHJpbmcuXG4gICAqIEl0IHdpbGwgYWxzbyBjb252ZXJ0IG51bWVyaWMgaW5wdXQgdG8gYSBkYXRlIGlmIHRoYXQgbnVtYmVyIGlzIHdpdGhpbiB0aGUgY3VycmVudCBtb250aCdzIG51bWJlciBvZiBkYXlzLlxuICAgKiBJZiB0aGUgc3RyaW5nIGNhbiBub3QgYmUgY29udmVydGVkLCBgdW5kZWZpbmVkYCBiZSByZXR1cm5lZC5cbiAgICovXG4gICNnZXRTaG9ydGN1dE9yRGF0ZVZhbHVlKHZhbHVlOiBzdHJpbmcpOiBEYXRlIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCBudW0gPSBOdW1iZXIodmFsdWUpO1xuICAgIGlmIChOdW1iZXIuaXNJbnRlZ2VyKG51bSkpIHtcbiAgICAgIC8vIFdlIHJlcXVpcmUgOCBkaWdpdHMgaW4gb3JkZXIgdG8ga25vdyB0aGF0IHdlIGhhdmUgYWxsIGluZm9ybWF0aW9uIG5lZWRlZCB0byBkZXRlcm1pbmUgd2hhdCBwYXJ0IG9mIHRoZSBudW1iZXIgaXMgdGhlIG1vbnRoICgyKSwgZGF5ICgyKSwgYW5kIHllYXIgKDQpLlxuICAgICAgaWYgKHZhbHVlLmxlbmd0aCA9PT0gOCkge1xuICAgICAgICBjb25zdCByZWdleCA9IG5ldyBSZWdFeHAoL1xcYihNTSlcXGJ8XFxiKEREKVxcYnxcXGIoWVkpXFxifFxcYihZWVlZKVxcYi8sICdnJyk7XG4gICAgICAgIGNvbnN0IGZvcm1hdFRva2Vuc09ubHkgPSB0aGlzLmRhdGVGb3JtYXRcbiAgICAgICAgICA/Lm1hdGNoKHJlZ2V4KVxuICAgICAgICAgID8uam9pbignJylcbiAgICAgICAgICAucmVwbGFjZShuZXcgUmVnRXhwKC9ZKy8pLCAnWVlZWScpO1xuXG4gICAgICAgIGlmIChmb3JtYXRUb2tlbnNPbmx5ICYmIGZvcm1hdFRva2Vuc09ubHkubGVuZ3RoID09PSA4KSB7XG4gICAgICAgICAgY29uc3QgZGF0ZSA9IHRoaXMuI2RhdGVGb3JtYXR0ZXIuZ2V0RGF0ZUZyb21TdHJpbmcoXG4gICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICAgIGZvcm1hdFRva2Vuc09ubHksXG4gICAgICAgICAgICB0cnVlXG4gICAgICAgICAgKTtcbiAgICAgICAgICBpZiAodGhpcy4jZGF0ZUZvcm1hdHRlci5kYXRlSXNWYWxpZChkYXRlKSkge1xuICAgICAgICAgICAgcmV0dXJuIGRhdGU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBjb25zdCBub3cgPSBuZXcgRGF0ZSgpO1xuICAgICAgY29uc3Qgc2hvcnRjdXREYXRlID0gbmV3IERhdGUobm93LmdldEZ1bGxZZWFyKCksIG5vdy5nZXRNb250aCgpLCBudW0pO1xuICAgICAgY29uc3QgZGF5c0luTW9udGggPSBzaG9ydGN1dERhdGUuZ2V0RGF0ZSgpO1xuICAgICAgaWYgKG51bSA+IDAgJiYgbnVtIDw9IGRheXNJbk1vbnRoKSB7XG4gICAgICAgIHJldHVybiBzaG9ydGN1dERhdGU7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGRhdGUgPSB0aGlzLiNkYXRlRm9ybWF0dGVyLmdldERhdGVGcm9tU3RyaW5nKFxuICAgICAgICB2YWx1ZSxcbiAgICAgICAgdGhpcy5kYXRlRm9ybWF0LFxuICAgICAgICB0aGlzLnN0cmljdFxuICAgICAgKTtcbiAgICAgIGlmICh0aGlzLiNkYXRlRm9ybWF0dGVyLmRhdGVJc1ZhbGlkKGRhdGUpKSB7XG4gICAgICAgIHJldHVybiBkYXRlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlcyB0aGUgaW5wdXQgdmFsdWUgdG8gZW5zdXJlIGl0IGlzIGZvcm1hdHRlZCBjb3JyZWN0bHkuXG4gICAqL1xuICAjaXNEYXRlU3RyaW5nVmFsaWQodmFsdWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGlmICghdmFsdWUgfHwgdHlwZW9mIHZhbHVlICE9PSAnc3RyaW5nJykge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgLy8gRG9lcyB0aGUgdmFsdWUgb25seSBpbmNsdWRlIGRpZ2l0cywgZGFzaGVzLCBvciBzbGFzaGVzP1xuICAgIGNvbnN0IHJlZ2V4cCA9IC9eW1xcZC8tXSskLztcbiAgICBjb25zdCBpc1ZhbGlkID0gcmVnZXhwLnRlc3QodmFsdWUpO1xuXG4gICAgaWYgKGlzVmFsaWQpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIC8vIElmIG5vdCwgZG9lcyBpdCBjb25mb3JtIHRvIHRoZSBzdGFuZGFyZCBJU08gZm9ybWF0P1xuICAgIGNvbnN0IGlzVmFsaWRJc28gPSBtb21lbnQodmFsdWUsIG1vbWVudC5JU09fODYwMSkuaXNWYWxpZCgpO1xuXG4gICAgcmV0dXJuIGlzVmFsaWRJc287XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWVtcHR5LWZ1bmN0aW9uXG4gIC8vIGlzdGFuYnVsIGlnbm9yZSBuZXh0XG4gICNvbkNoYW5nZSA9IChfOiBhbnkpID0+IHt9O1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWVtcHR5LWZ1bmN0aW9uXG4gIC8vIGlzdGFuYnVsIGlnbm9yZSBuZXh0XG4gICNvblRvdWNoZWQgPSAoKSA9PiB7fTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1lbXB0eS1mdW5jdGlvblxuICAvLyBpc3RhbmJ1bCBpZ25vcmUgbmV4dFxuICAjb25WYWxpZGF0b3JDaGFuZ2UgPSAoKSA9PiB7fTtcblxuICAjdXBkYXRlUGxhY2Vob2xkZXIoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLiNpbml0aWFsUGxhY2Vob2xkZXIgJiYgdGhpcy5kYXRlRm9ybWF0KSB7XG4gICAgICB0aGlzLiNhZGFwdGVyLnNldFBsYWNlaG9sZGVyKHRoaXMuI2VsZW1lbnRSZWYsIHRoaXMuZGF0ZUZvcm1hdCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZSB0aGUgdmFsdWUgb2YgdGhlIGZvcm0gY29udHJvbCBhbmQgaW5wdXQgZWxlbWVudFxuICAgKiBAcGFyYW0gZW1pdEV2ZW50IERlbm90ZXMgaWYgd2UgZW1pdCBhbiBldmVudCB0byB0aGUgY29uc3VtZXIncyBmb3JtIGNvbnRyb2wuIFdlIGRvIG5vdCB3YW50IHRvIGRvIHRoaXMgaWYgdGhlIHZhbHVlIGlzIGJlaW5nIHVwZGF0ZWQgdmlhIGEgYHNldFZhbHVlYCBjYWxsIG9yIGEgYHBhdGNoVmFsdWVgIGNhbGwgYXMgdGhpcyBpcyBhbHJlYWR5IGhhbmRsZWQgYnkgQW5ndWxhci5cbiAgICogSW4gdGhlc2UgY2FzZXMgd2UgZG8gbm90IHdhbnQgdG8gZmlyZSBgb25DaGFuZ2VgIGFzIGl0IHdpbGwgY2F1c2UgZXh0cmEgYHZhbHVlQ2hhbmdlYCBhbmQgYHN0YXR1c0NoYW5nZWAgZXZlbnRzIGFuZCB0aGUgc3RhdHVzIG9mIHRoZSBmb3JtIHNob3VsZCBub3QgYmUgYWZmZWN0ZWQgYnkgdGhlc2UgY2hhbmdlcy5cbiAgICovXG4gICN1cGRhdGVWYWx1ZSh2YWx1ZTogYW55LCBlbWl0RXZlbnQgPSB0cnVlKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuI192YWx1ZSA9PT0gdmFsdWUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBpc1ZhbGlkRGF0ZVN0cmluZyA9IHRoaXMuI2lzRGF0ZVN0cmluZ1ZhbGlkKHZhbHVlKTtcblxuICAgIC8vIElmIHRoZSBzdHJpbmcgdmFsdWUgc3VwcGxpZWQgaXMgbWFsZm9ybWVkLCBkbyBub3Qgc2V0IHRoZSB2YWx1ZSB0byBpdHMgRGF0ZSBlcXVpdmFsZW50LlxuICAgIC8vIChKYXZhU2NyaXB0J3MgRGF0ZSBwYXJzZXIgd2lsbCBjb252ZXJ0IHBvb3JseSBmb3JtYXR0ZWQgZGF0ZXMgdG8gRGF0ZSBvYmplY3RzLCBzdWNoIGFzIFwiYWJjIDEyM1wiLCB3aGljaCBpc24ndCBpZGVhbC4pXG4gICAgaWYgKCFpc1ZhbGlkRGF0ZVN0cmluZykge1xuICAgICAgdGhpcy4jX3ZhbHVlID0gdmFsdWU7XG4gICAgICBpZiAoZW1pdEV2ZW50KSB7XG4gICAgICAgIHRoaXMuI29uQ2hhbmdlKHRoaXMuI192YWx1ZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLiNjb250cm9sPy5zZXRWYWx1ZSh0aGlzLiNfdmFsdWUsIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICAgIH1cblxuICAgICAgdGhpcy4jZGF0ZXBpY2tlckNvbXBvbmVudC5zZWxlY3RlZERhdGUgPSB0aGlzLiNfdmFsdWU7XG5cbiAgICAgIHRoaXMuI3NldElucHV0RWxlbWVudFZhbHVlKHZhbHVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gVGhpcyB2YWx1ZSByZXByZXNlbnRzIHRoZSBkYXRlIHZhbHVlIGZvciB0aGUgaW5wdXQgaWYgcG9zc2libGUuXG4gICAgICAvLyBUaGlzIHZhbHVlIHdpbGwgdGFrZSBpbnRvIGFjY291bnQgYWxsIHNob3J0Y3V0IGZ1bmN0aW9uYWxpdHkuXG4gICAgICBjb25zdCBkYXRlVmFsdWU6IERhdGUgfCB1bmRlZmluZWQgPSB0aGlzLiNnZXREYXRlVmFsdWUodmFsdWUpO1xuXG4gICAgICBjb25zdCBhcmVEYXRlc0VxdWFsID1cbiAgICAgICAgdGhpcy4jX3ZhbHVlIGluc3RhbmNlb2YgRGF0ZSAmJlxuICAgICAgICBkYXRlVmFsdWUgJiZcbiAgICAgICAgZGF0ZVZhbHVlLmdldFRpbWUoKSA9PT0gdGhpcy4jX3ZhbHVlLmdldFRpbWUoKTtcblxuICAgICAgaWYgKGRhdGVWYWx1ZSAhPT0gdGhpcy4jX3ZhbHVlIHx8ICFhcmVEYXRlc0VxdWFsKSB7XG4gICAgICAgIHRoaXMuI192YWx1ZSA9IGRhdGVWYWx1ZSB8fCB2YWx1ZTtcbiAgICAgICAgaWYgKGVtaXRFdmVudCkge1xuICAgICAgICAgIHRoaXMuI29uQ2hhbmdlKHRoaXMuI192YWx1ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy4jY29udHJvbD8uc2V0VmFsdWUodGhpcy4jX3ZhbHVlLCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLiNkYXRlcGlja2VyQ29tcG9uZW50LnNlbGVjdGVkRGF0ZSA9IHRoaXMuI192YWx1ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKGRhdGVWYWx1ZSkge1xuICAgICAgICBjb25zdCBmb3JtYXR0ZWREYXRlU3RyaW5nID0gdGhpcy4jZGF0ZUZvcm1hdHRlci5mb3JtYXQoXG4gICAgICAgICAgZGF0ZVZhbHVlLFxuICAgICAgICAgIHRoaXMuZGF0ZUZvcm1hdFxuICAgICAgICApO1xuICAgICAgICB0aGlzLiNzZXRJbnB1dEVsZW1lbnRWYWx1ZShmb3JtYXR0ZWREYXRlU3RyaW5nKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuI3NldElucHV0RWxlbWVudFZhbHVlKHZhbHVlIHx8ICcnKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiJdfQ==
@@ -1,4 +1,4 @@
1
- var _SkyDatepickerComponent_instances, _SkyDatepickerComponent_affixer, _SkyDatepickerComponent_calendarUnsubscribe, _SkyDatepickerComponent_customDatesSubscription, _SkyDatepickerComponent_ngUnsubscribe, _SkyDatepickerComponent_overlay, _SkyDatepickerComponent_overlayKeydownListner, _SkyDatepickerComponent__calendarRef, _SkyDatepickerComponent__disabled, _SkyDatepickerComponent__selectedDate, _SkyDatepickerComponent_affixService, _SkyDatepickerComponent_changeDetector, _SkyDatepickerComponent_coreAdapter, _SkyDatepickerComponent_overlayService, _SkyDatepickerComponent_closePicker, _SkyDatepickerComponent_openPicker, _SkyDatepickerComponent_createAffixer, _SkyDatepickerComponent_destroyAffixer, _SkyDatepickerComponent_createOverlay, _SkyDatepickerComponent_destroyOverlay, _SkyDatepickerComponent_addKeydownListener, _SkyDatepickerComponent_removePickerEventListeners, _SkyDatepickerComponent_cancelCustomDatesSubscription;
1
+ var _SkyDatepickerComponent_instances, _SkyDatepickerComponent_affixer, _SkyDatepickerComponent_calendarUnsubscribe, _SkyDatepickerComponent_customDatesSubscription, _SkyDatepickerComponent_ngUnsubscribe, _SkyDatepickerComponent_overlay, _SkyDatepickerComponent_overlayKeydownListener, _SkyDatepickerComponent__calendarRef, _SkyDatepickerComponent__disabled, _SkyDatepickerComponent__selectedDate, _SkyDatepickerComponent_affixService, _SkyDatepickerComponent_changeDetector, _SkyDatepickerComponent_coreAdapter, _SkyDatepickerComponent_overlayService, _SkyDatepickerComponent_closePicker, _SkyDatepickerComponent_openPicker, _SkyDatepickerComponent_createAffixer, _SkyDatepickerComponent_destroyAffixer, _SkyDatepickerComponent_createOverlay, _SkyDatepickerComponent_destroyOverlay, _SkyDatepickerComponent_addKeydownListener, _SkyDatepickerComponent_removePickerEventListeners, _SkyDatepickerComponent_cancelCustomDatesSubscription;
2
2
  import { __classPrivateFieldGet, __classPrivateFieldSet } from "tslib";
3
3
  import { ChangeDetectionStrategy, Component, ElementRef, EventEmitter, Input, Optional, Output, TemplateRef, ViewChild, } from '@angular/core';
4
4
  import { SkyAffixAutoFitContext, } from '@skyux/core';
@@ -42,7 +42,7 @@ export class SkyDatepickerComponent {
42
42
  _SkyDatepickerComponent_customDatesSubscription.set(this, void 0);
43
43
  _SkyDatepickerComponent_ngUnsubscribe.set(this, new Subject());
44
44
  _SkyDatepickerComponent_overlay.set(this, void 0);
45
- _SkyDatepickerComponent_overlayKeydownListner.set(this, void 0);
45
+ _SkyDatepickerComponent_overlayKeydownListener.set(this, void 0);
46
46
  _SkyDatepickerComponent__calendarRef.set(this, void 0);
47
47
  _SkyDatepickerComponent__disabled.set(this, false);
48
48
  _SkyDatepickerComponent__selectedDate.set(this, void 0);
@@ -174,7 +174,7 @@ export class SkyDatepickerComponent {
174
174
  }
175
175
  }
176
176
  }
177
- _SkyDatepickerComponent_affixer = new WeakMap(), _SkyDatepickerComponent_calendarUnsubscribe = new WeakMap(), _SkyDatepickerComponent_customDatesSubscription = new WeakMap(), _SkyDatepickerComponent_ngUnsubscribe = new WeakMap(), _SkyDatepickerComponent_overlay = new WeakMap(), _SkyDatepickerComponent_overlayKeydownListner = new WeakMap(), _SkyDatepickerComponent__calendarRef = new WeakMap(), _SkyDatepickerComponent__disabled = new WeakMap(), _SkyDatepickerComponent__selectedDate = new WeakMap(), _SkyDatepickerComponent_affixService = new WeakMap(), _SkyDatepickerComponent_changeDetector = new WeakMap(), _SkyDatepickerComponent_coreAdapter = new WeakMap(), _SkyDatepickerComponent_overlayService = new WeakMap(), _SkyDatepickerComponent_instances = new WeakSet(), _SkyDatepickerComponent_closePicker = function _SkyDatepickerComponent_closePicker() {
177
+ _SkyDatepickerComponent_affixer = new WeakMap(), _SkyDatepickerComponent_calendarUnsubscribe = new WeakMap(), _SkyDatepickerComponent_customDatesSubscription = new WeakMap(), _SkyDatepickerComponent_ngUnsubscribe = new WeakMap(), _SkyDatepickerComponent_overlay = new WeakMap(), _SkyDatepickerComponent_overlayKeydownListener = new WeakMap(), _SkyDatepickerComponent__calendarRef = new WeakMap(), _SkyDatepickerComponent__disabled = new WeakMap(), _SkyDatepickerComponent__selectedDate = new WeakMap(), _SkyDatepickerComponent_affixService = new WeakMap(), _SkyDatepickerComponent_changeDetector = new WeakMap(), _SkyDatepickerComponent_coreAdapter = new WeakMap(), _SkyDatepickerComponent_overlayService = new WeakMap(), _SkyDatepickerComponent_instances = new WeakSet(), _SkyDatepickerComponent_closePicker = function _SkyDatepickerComponent_closePicker() {
178
178
  __classPrivateFieldGet(this, _SkyDatepickerComponent_instances, "m", _SkyDatepickerComponent_destroyAffixer).call(this);
179
179
  __classPrivateFieldGet(this, _SkyDatepickerComponent_instances, "m", _SkyDatepickerComponent_destroyOverlay).call(this);
180
180
  __classPrivateFieldGet(this, _SkyDatepickerComponent_instances, "m", _SkyDatepickerComponent_removePickerEventListeners).call(this);
@@ -239,7 +239,7 @@ _SkyDatepickerComponent_affixer = new WeakMap(), _SkyDatepickerComponent_calenda
239
239
  __classPrivateFieldSet(this, _SkyDatepickerComponent_overlay, undefined, "f");
240
240
  }
241
241
  }, _SkyDatepickerComponent_addKeydownListener = function _SkyDatepickerComponent_addKeydownListener() {
242
- __classPrivateFieldSet(this, _SkyDatepickerComponent_overlayKeydownListner, fromEvent(window.document, 'keydown')
242
+ __classPrivateFieldSet(this, _SkyDatepickerComponent_overlayKeydownListener, fromEvent(window.document, 'keydown')
243
243
  .pipe(takeUntil(__classPrivateFieldGet(this, _SkyDatepickerComponent_ngUnsubscribe, "f")))
244
244
  .subscribe((event) => {
245
245
  const key = event.key?.toLowerCase();
@@ -251,7 +251,7 @@ _SkyDatepickerComponent_affixer = new WeakMap(), _SkyDatepickerComponent_calenda
251
251
  __classPrivateFieldGet(this, _SkyDatepickerComponent_calendarUnsubscribe, "f").next();
252
252
  __classPrivateFieldGet(this, _SkyDatepickerComponent_calendarUnsubscribe, "f").complete();
253
253
  __classPrivateFieldSet(this, _SkyDatepickerComponent_calendarUnsubscribe, new Subject(), "f");
254
- __classPrivateFieldGet(this, _SkyDatepickerComponent_overlayKeydownListner, "f")?.unsubscribe();
254
+ __classPrivateFieldGet(this, _SkyDatepickerComponent_overlayKeydownListener, "f")?.unsubscribe();
255
255
  }, _SkyDatepickerComponent_cancelCustomDatesSubscription = function _SkyDatepickerComponent_cancelCustomDatesSubscription() {
256
256
  if (__classPrivateFieldGet(this, _SkyDatepickerComponent_customDatesSubscription, "f")) {
257
257
  __classPrivateFieldGet(this, _SkyDatepickerComponent_customDatesSubscription, "f").unsubscribe();
@@ -302,4 +302,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.11", ngImpo
302
302
  static: true,
303
303
  }]
304
304
  }] } });
305
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZXBpY2tlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvZGF0ZXRpbWUvc3JjL2xpYi9tb2R1bGVzL2RhdGVwaWNrZXIvZGF0ZXBpY2tlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvZGF0ZXRpbWUvc3JjL2xpYi9tb2R1bGVzL2RhdGVwaWNrZXIvZGF0ZXBpY2tlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLE9BQU8sRUFDTCx1QkFBdUIsRUFFdkIsU0FBUyxFQUNULFVBQVUsRUFDVixZQUFZLEVBQ1osS0FBSyxFQUdMLFFBQVEsRUFDUixNQUFNLEVBQ04sV0FBVyxFQUNYLFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQ0wsc0JBQXNCLEdBTXZCLE1BQU0sYUFBYSxDQUFDO0FBSXJCLE9BQU8sRUFBRSxPQUFPLEVBQWdCLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN4RCxPQUFPLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBR3pELE9BQU8sRUFBRSw4QkFBOEIsRUFBRSxNQUFNLGlDQUFpQyxDQUFDOzs7Ozs7Ozs7QUFHakYsSUFBSSxNQUFNLEdBQUcsQ0FBQyxDQUFDO0FBRWY7OztHQUdHO0FBT0gsTUFBTSxPQUFPLHNCQUFzQjtJQTRJakMsWUFDRSxZQUE2QixFQUM3QixjQUFpQyxFQUNqQyxXQUFrQyxFQUNsQyxjQUFpQyxFQUNkLG1CQUE0QyxFQUNuRCxRQUEwQjtRQURuQix3QkFBbUIsR0FBbkIsbUJBQW1CLENBQXlCOztRQWhKakU7OztXQUdHO1FBRUksZ0JBQVcsR0FBdUIsRUFBRSxDQUFDO1FBc0I1Qzs7OztXQUlHO1FBRUksNEJBQXVCLEdBQUcsSUFBSSxZQUFZLEVBQStCLENBQUM7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QUFDO1FBQzVDLHVCQUFBLElBQUksbURBQTRCLFNBQVMsTUFBQSxDQUFDO0tBQzNDO0FBQ0gsQ0FBQztvSEFoV1Usc0JBQXNCO3dHQUF0QixzQkFBc0IseU1Bd0R0Qiw4QkFBOEIsd0hBSWpDLFVBQVUscUhBb0NWLFdBQVcsK0dBS1gsVUFBVSwrR0FLVixXQUFXLDZJQU1YLFdBQVcsMkNDNUpyQixnaUVBK0RBOzRGRG5CYSxzQkFBc0I7a0JBTmxDLFNBQVM7K0JBQ0UsZ0JBQWdCLG1CQUdULHVCQUF1QixDQUFDLE1BQU07OzBCQW1KNUMsUUFBUTs7MEJBQ1IsUUFBUTs0Q0E1SUosV0FBVztzQkFEakIsS0FBSztnQkE2QkMsdUJBQXVCO3NCQUQ3QixNQUFNO2dCQXdCQSxRQUFRO3NCQURkLFNBQVM7dUJBQUMsOEJBQThCO2dCQU05QixXQUFXO3NCQUhyQixTQUFTO3VCQUFDLGFBQWEsRUFBRTt3QkFDeEIsSUFBSSxFQUFFLFVBQVU7cUJBQ2pCO2dCQXFDTSxtQkFBbUI7c0JBSHpCLFNBQVM7dUJBQUMscUJBQXFCLEVBQUU7d0JBQ2hDLElBQUksRUFBRSxXQUFXO3FCQUNsQjtnQkFNTSxnQkFBZ0I7c0JBSHRCLFNBQVM7dUJBQUMsa0JBQWtCLEVBQUU7d0JBQzdCLElBQUksRUFBRSxVQUFVO3FCQUNqQjtnQkFPTSxnQkFBZ0I7c0JBSnRCLFNBQVM7dUJBQUMsa0JBQWtCLEVBQUU7d0JBQzdCLElBQUksRUFBRSxXQUFXO3dCQUNqQixNQUFNLEVBQUUsSUFBSTtxQkFDYjtnQkFPTSx3QkFBd0I7c0JBSjlCLFNBQVM7dUJBQUMsMEJBQTBCLEVBQUU7d0JBQ3JDLElBQUksRUFBRSxXQUFXO3dCQUNqQixNQUFNLEVBQUUsSUFBSTtxQkFDYiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIElucHV0LFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgT3B0aW9uYWwsXG4gIE91dHB1dCxcbiAgVGVtcGxhdGVSZWYsXG4gIFZpZXdDaGlsZCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBTa3lBZmZpeEF1dG9GaXRDb250ZXh0LFxuICBTa3lBZmZpeFNlcnZpY2UsXG4gIFNreUFmZml4ZXIsXG4gIFNreUNvcmVBZGFwdGVyU2VydmljZSxcbiAgU2t5T3ZlcmxheUluc3RhbmNlLFxuICBTa3lPdmVybGF5U2VydmljZSxcbn0gZnJvbSAnQHNreXV4L2NvcmUnO1xuaW1wb3J0IHsgU2t5SW5wdXRCb3hIb3N0U2VydmljZSB9IGZyb20gJ0Bza3l1eC9mb3Jtcyc7XG5pbXBvcnQgeyBTa3lUaGVtZVNlcnZpY2UgfSBmcm9tICdAc2t5dXgvdGhlbWUnO1xuXG5pbXBvcnQgeyBTdWJqZWN0LCBTdWJzY3JpcHRpb24sIGZyb21FdmVudCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZGVib3VuY2VUaW1lLCB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7IFNreURhdGVwaWNrZXJDYWxlbmRhckNoYW5nZSB9IGZyb20gJy4vZGF0ZXBpY2tlci1jYWxlbmRhci1jaGFuZ2UnO1xuaW1wb3J0IHsgU2t5RGF0ZXBpY2tlckNhbGVuZGFyQ29tcG9uZW50IH0gZnJvbSAnLi9kYXRlcGlja2VyLWNhbGVuZGFyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBTa3lEYXRlcGlja2VyQ3VzdG9tRGF0ZSB9IGZyb20gJy4vZGF0ZXBpY2tlci1jdXN0b20tZGF0ZSc7XG5cbmxldCBuZXh0SWQgPSAwO1xuXG4vKipcbiAqIENyZWF0ZXMgdGhlIGRhdGVwaWNrZXIgYnV0dG9uIGFuZCBjYWxlbmRhci5cbiAqIFlvdSBtdXN0IHdyYXAgdGhpcyBjb21wb25lbnQgYXJvdW5kIGFuIGlucHV0IHdpdGggdGhlIGBza3lEYXRlcGlja2VySW5wdXRgIGRpcmVjdGl2ZS5cbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnc2t5LWRhdGVwaWNrZXInLFxuICB0ZW1wbGF0ZVVybDogJy4vZGF0ZXBpY2tlci5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2RhdGVwaWNrZXIuY29tcG9uZW50LnNjc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIFNreURhdGVwaWNrZXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkRlc3Ryb3ksIE9uSW5pdCB7XG4gIC8qKlxuICAgKiBBZGRzIGEgY2xhc3MgdG8gdGhlIGRhdGVwaWNrZXIuXG4gICAqIEBkZWZhdWx0IFwiXCJcbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBwaWNrZXJDbGFzczogc3RyaW5nIHwgdW5kZWZpbmVkID0gJyc7XG5cbiAgcHVibGljIGdldCBkaXNhYmxlZCgpOiBib29sZWFuIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy4jX2Rpc2FibGVkO1xuICB9XG5cbiAgcHVibGljIHNldCBkaXNhYmxlZCh2YWx1ZTogYm9vbGVhbiB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuI19kaXNhYmxlZCA9IHZhbHVlO1xuICAgIHRoaXMuI2NoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgcHVibGljIHNldCBzZWxlY3RlZERhdGUodmFsdWU6IERhdGUgfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLiNfc2VsZWN0ZWREYXRlID0gdmFsdWU7XG4gICAgaWYgKHRoaXMuY2FsZW5kYXIpIHtcbiAgICAgIHRoaXMuY2FsZW5kYXIud3JpdGVWYWx1ZSh2YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGdldCBzZWxlY3RlZERhdGUoKTogRGF0ZSB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuI19zZWxlY3RlZERhdGU7XG4gIH1cblxuICAvKipcbiAgICogRmlyZXMgd2hlbiB0aGUgcmFuZ2Ugb2YgZGlzcGxheWVkIGRhdGVzIGluIHRoZSBjYWxlbmRhciBjaGFuZ2VzLiBQcm92aWRlcyB0aGVcbiAgICogY3VycmVudCByYW5nZSBvZiBkaXNwbGF5ZWQgZGF0ZXMgYW5kIGEgbXV0YWJsZSBgY3VzdG9tRGF0ZWAgcHJvcGVydHkgY29uc3VtZXJzIGNhbiB1c2VcbiAgICogdG8gbW9kaWZ5IGluZGl2aWR1YWwgZGF0ZXMgb24gdGhlIGNhbGVuZGFyLlxuICAgKi9cbiAgQE91dHB1dCgpXG4gIHB1YmxpYyBjYWxlbmRhckRhdGVSYW5nZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8U2t5RGF0ZXBpY2tlckNhbGVuZGFyQ2hhbmdlPigpO1xuXG4gIHB1YmxpYyBjYWxlbmRhcklkOiBzdHJpbmc7XG5cbiAgcHVibGljIGN1c3RvbURhdGVzOiBTa3lEYXRlcGlja2VyQ3VzdG9tRGF0ZVtdIHwgdW5kZWZpbmVkO1xuXG4gIHB1YmxpYyBkYXRlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxEYXRlPigpO1xuXG4gIHB1YmxpYyBpc0RheXBpY2tlcldhaXRpbmcgPSBmYWxzZTtcblxuICBwdWJsaWMgaXNPcGVuID0gZmFsc2U7XG5cbiAgcHVibGljIGlzVmlzaWJsZSA9IGZhbHNlO1xuXG4gIHB1YmxpYyBtYXhEYXRlOiBEYXRlIHwgdW5kZWZpbmVkO1xuXG4gIHB1YmxpYyBtaW5EYXRlOiBEYXRlIHwgdW5kZWZpbmVkO1xuXG4gIHB1YmxpYyBzdGFydGluZ0RheTogbnVtYmVyIHwgdW5kZWZpbmVkO1xuXG4gIHB1YmxpYyB0cmlnZ2VyQnV0dG9uSWQ6IHN0cmluZztcblxuICBAVmlld0NoaWxkKFNreURhdGVwaWNrZXJDYWxlbmRhckNvbXBvbmVudClcbiAgcHVibGljIGNhbGVuZGFyOiBTa3lEYXRlcGlja2VyQ2FsZW5kYXJDb21wb25lbnQgfCB1bmRlZmluZWQ7XG5cbiAgQFZpZXdDaGlsZCgnY2FsZW5kYXJSZWYnLCB7XG4gICAgcmVhZDogRWxlbWVudFJlZixcbiAgfSlcbiAgcHVibGljIHNldCBjYWxlbmRhclJlZih2YWx1ZTogRWxlbWVudFJlZiB8IHVuZGVmaW5lZCkge1xuICAgIGlmICh2YWx1ZSkge1xuICAgICAgdGhpcy4jX2NhbGVuZGFyUmVmID0gdmFsdWU7XG5cbiAgICAgIC8vIFdhaXQgZm9yIHRoZSBjYWxlbmRhciBjb21wb25lbnQgdG8gcmVuZGVyIGJlZm9yZSBnYXVnaW5nIGRpbWVuc2lvbnMuXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgaWYgKHRoaXMuY2FsZW5kYXJSZWYpIHtcbiAgICAgICAgICB0aGlzLmNhbGVuZGFyPy53cml0ZVZhbHVlKHRoaXMuc2VsZWN0ZWREYXRlKTtcblxuICAgICAgICAgIHRoaXMuI2Rlc3Ryb3lBZmZpeGVyKCk7XG4gICAgICAgICAgdGhpcy4jY3JlYXRlQWZmaXhlcigpO1xuXG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5jYWxlbmRhclJlZikge1xuICAgICAgICAgICAgICB0aGlzLiNjb3JlQWRhcHRlci5nZXRGb2N1c2FibGVDaGlsZHJlbkFuZEFwcGx5Rm9jdXMoXG4gICAgICAgICAgICAgICAgdGhpcy5jYWxlbmRhclJlZixcbiAgICAgICAgICAgICAgICAnLnNreS1kYXRlcGlja2VyLWNhbGVuZGFyLWlubmVyJyxcbiAgICAgICAgICAgICAgICBmYWxzZVxuICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgIHRoaXMuaXNWaXNpYmxlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgdGhpcy4jY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBnZXQgY2FsZW5kYXJSZWYoKTogRWxlbWVudFJlZiB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuI19jYWxlbmRhclJlZjtcbiAgfVxuXG4gIEBWaWV3Q2hpbGQoJ2NhbGVuZGFyVGVtcGxhdGVSZWYnLCB7XG4gICAgcmVhZDogVGVtcGxhdGVSZWYsXG4gIH0pXG4gIHB1YmxpYyBjYWxlbmRhclRlbXBsYXRlUmVmOiBUZW1wbGF0ZVJlZjx1bmtub3duPiB8IHVuZGVmaW5lZDtcblxuICBAVmlld0NoaWxkKCd0cmlnZ2VyQnV0dG9uUmVmJywge1xuICAgIHJlYWQ6IEVsZW1lbnRSZWYsXG4gIH0pXG4gIHB1YmxpYyB0cmlnZ2VyQnV0dG9uUmVmOiBFbGVtZW50UmVmIHwgdW5kZWZpbmVkO1xuXG4gIEBWaWV3Q2hpbGQoJ2lucHV0VGVtcGxhdGVSZWYnLCB7XG4gICAgcmVhZDogVGVtcGxhdGVSZWYsXG4gICAgc3RhdGljOiB0cnVlLFxuICB9KVxuICBwdWJsaWMgaW5wdXRUZW1wbGF0ZVJlZjogVGVtcGxhdGVSZWY8dW5rbm93bj4gfCB1bmRlZmluZWQ7XG5cbiAgQFZpZXdDaGlsZCgndHJpZ2dlckJ1dHRvblRlbXBsYXRlUmVmJywge1xuICAgIHJlYWQ6IFRlbXBsYXRlUmVmLFxuICAgIHN0YXRpYzogdHJ1ZSxcbiAgfSlcbiAgcHVibGljIHRyaWdnZXJCdXR0b25UZW1wbGF0ZVJlZjogVGVtcGxhdGVSZWY8dW5rbm93bj4gfCB1bmRlZmluZWQ7XG5cbiAgI2FmZml4ZXI6IFNreUFmZml4ZXIgfCB1bmRlZmluZWQ7XG5cbiAgI2NhbGVuZGFyVW5zdWJzY3JpYmU6IFN1YmplY3Q8dm9pZD4gPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gICNjdXN0b21EYXRlc1N1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uIHwgdW5kZWZpbmVkO1xuXG4gICNuZ1Vuc3Vic2NyaWJlID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICAjb3ZlcmxheTogU2t5T3ZlcmxheUluc3RhbmNlIHwgdW5kZWZpbmVkO1xuXG4gICNvdmVybGF5S2V5ZG93bkxpc3RuZXI6IFN1YnNjcmlwdGlvbiB8IHVuZGVmaW5lZDtcblxuICAjX2NhbGVuZGFyUmVmOiBFbGVtZW50UmVmIHwgdW5kZWZpbmVkO1xuXG4gICNfZGlzYWJsZWQ6IGJvb2xlYW4gfCB1bmRlZmluZWQgPSBmYWxzZTtcblxuICAjX3NlbGVjdGVkRGF0ZTogRGF0ZSB8IHVuZGVmaW5lZDtcblxuICAjYWZmaXhTZXJ2aWNlOiBTa3lBZmZpeFNlcnZpY2U7XG4gICNjaGFuZ2VEZXRlY3RvcjogQ2hhbmdlRGV0ZWN0b3JSZWY7XG4gICNjb3JlQWRhcHRlcjogU2t5Q29yZUFkYXB0ZXJTZXJ2aWNlO1xuICAjb3ZlcmxheVNlcnZpY2U6IFNreU92ZXJsYXlTZXJ2aWNlO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIGFmZml4U2VydmljZTogU2t5QWZmaXhTZXJ2aWNlLFxuICAgIGNoYW5nZURldGVjdG9yOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBjb3JlQWRhcHRlcjogU2t5Q29yZUFkYXB0ZXJTZXJ2aWNlLFxuICAgIG92ZXJsYXlTZXJ2aWNlOiBTa3lPdmVybGF5U2VydmljZSxcbiAgICBAT3B0aW9uYWwoKSBwdWJsaWMgaW5wdXRCb3hIb3N0U2VydmljZT86IFNreUlucHV0Qm94SG9zdFNlcnZpY2UsXG4gICAgQE9wdGlvbmFsKCkgdGhlbWVTdmM/OiBTa3lUaGVtZVNlcnZpY2VcbiAgKSB7XG4gICAgdGhpcy4jYWZmaXhTZXJ2aWNlID0gYWZmaXhTZXJ2aWNlO1xuICAgIHRoaXMuI2NoYW5nZURldGVjdG9yID0gY2hhbmdlRGV0ZWN0b3I7XG4gICAgdGhpcy4jY29yZUFkYXB0ZXIgPSBjb3JlQWRhcHRlcjtcbiAgICB0aGlzLiNvdmVybGF5U2VydmljZSA9IG92ZXJsYXlTZXJ2aWNlO1xuICAgIGNvbnN0IHVuaXF1ZUlkID0gbmV4dElkKys7XG4gICAgdGhpcy5jYWxlbmRhcklkID0gYHNreS1kYXRlcGlja2VyLWNhbGVuZGFyLSR7dW5pcXVlSWR9YDtcbiAgICB0aGlzLnRyaWdnZXJCdXR0b25JZCA9IGBza3ktZGF0ZXBpY2tlci1idXR0b24tJHt1bmlxdWVJZH1gO1xuXG4gICAgLy8gVXBkYXRlIGljb25zIHdoZW4gdGhlbWUgY2hhbmdlcy5cbiAgICB0aGVtZVN2Yz8uc2V0dGluZ3NDaGFuZ2VcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLiNuZ1Vuc3Vic2NyaWJlKSlcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICB0aGlzLiNjaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmlucHV0Qm94SG9zdFNlcnZpY2UgJiYgdGhpcy5pbnB1dFRlbXBsYXRlUmVmKSB7XG4gICAgICB0aGlzLmlucHV0Qm94SG9zdFNlcnZpY2UucG9wdWxhdGUoe1xuICAgICAgICBpbnB1dFRlbXBsYXRlOiB0aGlzLmlucHV0VGVtcGxhdGVSZWYsXG4gICAgICAgIGJ1dHRvbnNUZW1wbGF0ZTogdGhpcy50cmlnZ2VyQnV0dG9uVGVtcGxhdGVSZWYsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5kYXRlQ2hhbmdlLmNvbXBsZXRlKCk7XG4gICAgdGhpcy4jbmdVbnN1YnNjcmliZS5uZXh0KCk7XG4gICAgdGhpcy4jbmdVbnN1YnNjcmliZS5jb21wbGV0ZSgpO1xuICAgIHRoaXMuI3JlbW92ZVBpY2tlckV2ZW50TGlzdGVuZXJzKCk7XG4gICAgdGhpcy4jZGVzdHJveUFmZml4ZXIoKTtcbiAgICB0aGlzLiNkZXN0cm95T3ZlcmxheSgpO1xuICB9XG5cbiAgcHVibGljIG9uQ2FsZW5kYXJNb2RlQ2hhbmdlKCk6IHZvaWQge1xuICAgIC8vIExldCB0aGUgY2FsZW5kYXIgcG9wdWxhdGUgaW4gdGhlIERPTSBiZWZvcmUgcmVjYWxjdWxhdGluZyBwbGFjZW1lbnQuXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLiNhZmZpeGVyPy5yZWFmZml4KCk7XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgb25TZWxlY3RlZERhdGVDaGFuZ2UodmFsdWU6IERhdGUpOiB2b2lkIHtcbiAgICB0aGlzLmRhdGVDaGFuZ2UuZW1pdCh2YWx1ZSk7XG4gICAgdGhpcy4jY2xvc2VQaWNrZXIoKTtcbiAgfVxuXG4gIHB1YmxpYyBvblRyaWdnZXJCdXR0b25DbGljaygpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pc09wZW4pIHtcbiAgICAgIHRoaXMuI2Nsb3NlUGlja2VyKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuI29wZW5QaWNrZXIoKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgb25DYWxlbmRhckRhdGVSYW5nZUNoYW5nZShldmVudD86IFNreURhdGVwaWNrZXJDYWxlbmRhckNoYW5nZSk6IHZvaWQge1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgaWYgKGV2ZW50KSB7XG4gICAgICB0aGlzLiNjYW5jZWxDdXN0b21EYXRlc1N1YnNjcmlwdGlvbigpO1xuXG4gICAgICBjb25zdCBhcmdzOiBTa3lEYXRlcGlja2VyQ2FsZW5kYXJDaGFuZ2UgPSB7XG4gICAgICAgIHN0YXJ0RGF0ZTogZXZlbnQuc3RhcnREYXRlLFxuICAgICAgICBlbmREYXRlOiBldmVudC5lbmREYXRlLFxuICAgICAgICBjdXN0b21EYXRlczogdW5kZWZpbmVkLFxuICAgICAgfTtcbiAgICAgIHRoaXMuY2FsZW5kYXJEYXRlUmFuZ2VDaGFuZ2UuZW1pdChhcmdzKTtcbiAgICAgIC8vIElmIGNvbnN1bWVyIGhhcyBhZGRlZCBhbiBvYnNlcnZhYmxlIHRvIHRoZSBhcmdzLCB3YXRjaCBmb3IgaW5jb21pbmcgY3VzdG9tIGRhdGVzLlxuICAgICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICAgIGlmIChhcmdzLmN1c3RvbURhdGVzKSB7XG4gICAgICAgIHRoaXMuaXNEYXlwaWNrZXJXYWl0aW5nID0gdHJ1ZTtcbiAgICAgICAgLy8gQXZvaWQgYW4gRXhwcmVzc2lvbkNoYW5nZWRBZnRlckl0SGFzQmVlbkNoZWNrZWRFcnJvci5cbiAgICAgICAgdGhpcy4jY2hhbmdlRGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpO1xuXG4gICAgICAgIHRoaXMuI2N1c3RvbURhdGVzU3Vic2NyaXB0aW9uID0gYXJncy5jdXN0b21EYXRlc1xuICAgICAgICAgIC5waXBlKGRlYm91bmNlVGltZSgyNTApKVxuICAgICAgICAgIC5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5jdXN0b21EYXRlcyA9IHJlc3VsdDtcbiAgICAgICAgICAgIHRoaXMuaXNEYXlwaWNrZXJXYWl0aW5nID0gZmFsc2U7XG5cbiAgICAgICAgICAgIC8vIFRyaWdnZXIgY2hhbmdlIGRldGVjdGlvbiBpbiBjaGlsZCBjb21wb25lbnRzIHRvIHNob3cgY2hhbmdlcyBpbiB0aGUgY2FsZW5kYXIuXG4gICAgICAgICAgICB0aGlzLiNjaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIElmIGNvbnN1bWVyIHJldHVybnMgYW4gdW5kZWZpbmVkIHZhbHVlIGFmdGVyIGN1c3RvbSBkYXRlcyBoYXZlXG4gICAgICAgIC8vIGFscmVhZHkgYmVuIGVzdGFibGlzaGVkLCByZW1vdmUgY3VzdG9tIGRhdGVzLlxuICAgICAgICBpZiAodGhpcy5jdXN0b21EYXRlcykge1xuICAgICAgICAgIHRoaXMuY3VzdG9tRGF0ZXMgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgLy8gQXZvaWQgYW4gRXhwcmVzc2lvbkNoYW5nZWRBZnRlckl0SGFzQmVlbkNoZWNrZWRFcnJvci5cbiAgICAgICAgICB0aGlzLiNjaGFuZ2VEZXRlY3Rvci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAjY2xvc2VQaWNrZXIoKSB7XG4gICAgdGhpcy4jZGVzdHJveUFmZml4ZXIoKTtcbiAgICB0aGlzLiNkZXN0cm95T3ZlcmxheSgpO1xuICAgIHRoaXMuI3JlbW92ZVBpY2tlckV2ZW50TGlzdGVuZXJzKCk7XG4gICAgdGhpcy50cmlnZ2VyQnV0dG9uUmVmPy5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgdGhpcy5pc09wZW4gPSBmYWxzZTtcbiAgfVxuXG4gICNvcGVuUGlja2VyKCk6IHZvaWQge1xuICAgIHRoaXMuaXNWaXNpYmxlID0gZmFsc2U7XG4gICAgdGhpcy4jY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XG5cbiAgICB0aGlzLiNyZW1vdmVQaWNrZXJFdmVudExpc3RlbmVycygpO1xuICAgIHRoaXMuI2Rlc3Ryb3lPdmVybGF5KCk7XG4gICAgdGhpcy4jY3JlYXRlT3ZlcmxheSgpO1xuXG4gICAgdGhpcy5pc09wZW4gPSB0cnVlO1xuICAgIHRoaXMuI2NoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgI2NyZWF0ZUFmZml4ZXIoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuY2FsZW5kYXJSZWYgJiYgdGhpcy50cmlnZ2VyQnV0dG9uUmVmKSB7XG4gICAgICBjb25zdCBhZmZpeGVyID0gdGhpcy4jYWZmaXhTZXJ2aWNlLmNyZWF0ZUFmZml4ZXIodGhpcy5jYWxlbmRhclJlZik7XG5cbiAgICAgIC8vIEhpZGUgY2FsZW5kYXIgd2hlbiB0cmlnZ2VyIGJ1dHRvbiBpcyBzY3JvbGxlZCBvZmYgc2NyZWVuLlxuICAgICAgYWZmaXhlci5wbGFjZW1lbnRDaGFuZ2VcbiAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuI2NhbGVuZGFyVW5zdWJzY3JpYmUpKVxuICAgICAgICAuc3Vic2NyaWJlKChjaGFuZ2UpID0+IHtcbiAgICAgICAgICB0aGlzLmlzVmlzaWJsZSA9IGNoYW5nZS5wbGFjZW1lbnQgIT09IG51bGw7XG4gICAgICAgICAgdGhpcy4jY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XG4gICAgICAgIH0pO1xuXG4gICAgICBhZmZpeGVyLmFmZml4VG8odGhpcy50cmlnZ2VyQnV0dG9uUmVmLm5hdGl2ZUVsZW1lbnQsIHtcbiAgICAgICAgYXV0b0ZpdENvbnRleHQ6IFNreUFmZml4QXV0b0ZpdENvbnRleHQuVmlld3BvcnQsXG4gICAgICAgIGVuYWJsZUF1dG9GaXQ6IHRydWUsXG4gICAgICAgIGhvcml6b250YWxBbGlnbm1lbnQ6ICdyaWdodCcsXG4gICAgICAgIGlzU3RpY2t5OiB0cnVlLFxuICAgICAgICBwbGFjZW1lbnQ6ICdiZWxvdycsXG4gICAgICB9KTtcblxuICAgICAgdGhpcy4jYWZmaXhlciA9IGFmZml4ZXI7XG4gICAgfVxuICB9XG5cbiAgI2Rlc3Ryb3lBZmZpeGVyKCk6IHZvaWQge1xuICAgIC8qaXN0YW5idWwgaWdub3JlIGVsc2UqL1xuICAgIGlmICh0aGlzLiNhZmZpeGVyKSB7XG4gICAgICB0aGlzLiNhZmZpeGVyLmRlc3Ryb3koKTtcbiAgICAgIHRoaXMuI2FmZml4ZXIgPSB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG5cbiAgI2NyZWF0ZU92ZXJsYXkoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuY2FsZW5kYXJUZW1wbGF0ZVJlZikge1xuICAgICAgY29uc3Qgb3ZlcmxheSA9IHRoaXMuI292ZXJsYXlTZXJ2aWNlLmNyZWF0ZSh7XG4gICAgICAgIHdyYXBwZXJDbGFzczogdGhpcy5waWNrZXJDbGFzcyxcbiAgICAgICAgZW5hYmxlQ2xvc2U6IGZhbHNlLFxuICAgICAgICBlbmFibGVQb2ludGVyRXZlbnRzOiBmYWxzZSxcbiAgICAgIH0pO1xuXG4gICAgICBvdmVybGF5LmJhY2tkcm9wQ2xpY2tcbiAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuI2NhbGVuZGFyVW5zdWJzY3JpYmUpKVxuICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgICAgIGlmICh0aGlzLmlzT3Blbikge1xuICAgICAgICAgICAgdGhpcy4jY2xvc2VQaWNrZXIoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICB0aGlzLiNhZGRLZXlkb3duTGlzdGVuZXIoKTtcblxuICAgICAgb3ZlcmxheS5hdHRhY2hUZW1wbGF0ZSh0aGlzLmNhbGVuZGFyVGVtcGxhdGVSZWYpO1xuXG4gICAgICB0aGlzLiNvdmVybGF5ID0gb3ZlcmxheTtcbiAgICB9XG4gIH1cblxuICAjZGVzdHJveU92ZXJsYXkoKTogdm9pZCB7XG4gICAgLyppc3RhbmJ1bCBpZ25vcmUgZWxzZSovXG4gICAgaWYgKHRoaXMuI292ZXJsYXkpIHtcbiAgICAgIHRoaXMuI292ZXJsYXlTZXJ2aWNlLmNsb3NlKHRoaXMuI292ZXJsYXkpO1xuICAgICAgdGhpcy4jb3ZlcmxheSA9IHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cblxuICAjYWRkS2V5ZG93bkxpc3RlbmVyKCk6IHZvaWQge1xuICAgIHRoaXMuI292ZXJsYXlLZXlkb3duTGlzdG5lciA9IGZyb21FdmVudDxLZXlib2FyZEV2ZW50PihcbiAgICAgIHdpbmRvdy5kb2N1bWVudCxcbiAgICAgICdrZXlkb3duJ1xuICAgIClcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLiNuZ1Vuc3Vic2NyaWJlKSlcbiAgICAgIC5zdWJzY3JpYmUoKGV2ZW50KSA9PiB7XG4gICAgICAgIGNvbnN0IGtleSA9IGV2ZW50LmtleT8udG9Mb3dlckNhc2UoKTtcbiAgICAgICAgaWYgKGtleSA9PT0gJ2VzY2FwZScgJiYgdGhpcy5pc09wZW4pIHtcbiAgICAgICAgICB0aGlzLiNjbG9zZVBpY2tlcigpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgfVxuXG4gICNyZW1vdmVQaWNrZXJFdmVudExpc3RlbmVycygpOiB2b2lkIHtcbiAgICB0aGlzLiNjYWxlbmRhclVuc3Vic2NyaWJlLm5leHQoKTtcbiAgICB0aGlzLiNjYWxlbmRhclVuc3Vic2NyaWJlLmNvbXBsZXRlKCk7XG4gICAgdGhpcy4jY2FsZW5kYXJVbnN1YnNjcmliZSA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG4gICAgdGhpcy4jb3ZlcmxheUtleWRvd25MaXN0bmVyPy51bnN1YnNjcmliZSgpO1xuICB9XG5cbiAgI2NhbmNlbEN1c3RvbURhdGVzU3Vic2NyaXB0aW9uKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLiNjdXN0b21EYXRlc1N1YnNjcmlwdGlvbikge1xuICAgICAgdGhpcy4jY3VzdG9tRGF0ZXNTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgIHRoaXMuI2N1c3RvbURhdGVzU3Vic2NyaXB0aW9uID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cInNreS1kYXRlcGlja2VyXCI+XG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCIhaW5wdXRCb3hIb3N0U2VydmljZVwiPlxuICAgIDxkaXYgY2xhc3M9XCJza3ktaW5wdXQtZ3JvdXBcIj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJpbnB1dFRlbXBsYXRlUmVmXCI+PC9uZy1jb250YWluZXI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwidHJpZ2dlckJ1dHRvblRlbXBsYXRlUmVmXCI+PC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+XG4gIDwvbmctY29udGFpbmVyPlxuPC9kaXY+XG5cbjxuZy10ZW1wbGF0ZSAjaW5wdXRUZW1wbGF0ZVJlZj5cbiAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICN0cmlnZ2VyQnV0dG9uVGVtcGxhdGVSZWY+XG4gIDxkaXYgY2xhc3M9XCJza3ktaW5wdXQtZ3JvdXAtYnRuXCI+XG4gICAgPGJ1dHRvblxuICAgICAgYXJpYS1oYXNwb3B1cD1cImRpYWxvZ1wiXG4gICAgICBjbGFzcz1cInNreS1idG4gc2t5LWJ0bi1kZWZhdWx0IHNreS1pbnB1dC1ncm91cC1kYXRlcGlja2VyLWJ0blwiXG4gICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgIFthdHRyLmFyaWEtY29udHJvbHNdPVwiaXNPcGVuID8gY2FsZW5kYXJJZCA6IG51bGxcIlxuICAgICAgW2F0dHIuYXJpYS1leHBhbmRlZF09XCJpc09wZW5cIlxuICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJcbiAgICAgICAgJ3NreXV4X2RhdGVwaWNrZXJfdHJpZ2dlcl9idXR0b25fbGFiZWwnIHwgc2t5TGliUmVzb3VyY2VzXG4gICAgICBcIlxuICAgICAgW2F0dHIuaWRdPVwidHJpZ2dlckJ1dHRvbklkXCJcbiAgICAgIFthdHRyLnRpdGxlXT1cIidza3l1eF9kYXRlcGlja2VyX3RyaWdnZXJfYnV0dG9uX2xhYmVsJyB8IHNreUxpYlJlc291cmNlc1wiXG4gICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgKGNsaWNrKT1cIm9uVHJpZ2dlckJ1dHRvbkNsaWNrKClcIlxuICAgICAgI3RyaWdnZXJCdXR0b25SZWZcbiAgICA+XG4gICAgICA8c2t5LWljb24gKnNreVRoZW1lSWY9XCInZGVmYXVsdCdcIiBpY29uPVwiY2FsZW5kYXJcIiBzaXplPVwibGdcIj48L3NreS1pY29uPlxuICAgICAgPHNreS1pY29uXG4gICAgICAgICpza3lUaGVtZUlmPVwiJ21vZGVybidcIlxuICAgICAgICBpY29uPVwiY2FsZW5kYXJcIlxuICAgICAgICBzaXplPVwibGdcIlxuICAgICAgICBpY29uVHlwZT1cInNreXV4XCJcbiAgICAgID48L3NreS1pY29uPlxuICAgIDwvYnV0dG9uPlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjY2FsZW5kYXJUZW1wbGF0ZVJlZj5cbiAgPGRpdlxuICAgIGNsYXNzPVwic2t5LWRhdGVwaWNrZXItY2FsZW5kYXItY29udGFpbmVyIHNreS1zaGFkb3cgc2t5LWVsZXZhdGlvbi00XCJcbiAgICByb2xlPVwiZGlhbG9nXCJcbiAgICBbYXR0ci5hcmlhLWxhYmVsbGVkYnldPVwidHJpZ2dlckJ1dHRvbklkXCJcbiAgICBbYXR0ci5pZF09XCJjYWxlbmRhcklkXCJcbiAgICBbY2xhc3Muc2t5LWRhdGVwaWNrZXItaGlkZGVuXT1cIiFpc1Zpc2libGVcIlxuICAgICNjYWxlbmRhclJlZlxuICA+XG4gICAgPHNreS1kYXRlcGlja2VyLWNhbGVuZGFyXG4gICAgICBbY3VzdG9tRGF0ZXNdPVwiY3VzdG9tRGF0ZXNcIlxuICAgICAgW2lzRGF5cGlja2VyV2FpdGluZ109XCJpc0RheXBpY2tlcldhaXRpbmdcIlxuICAgICAgW21heERhdGVdPVwibWF4RGF0ZVwiXG4gICAgICBbbWluRGF0ZV09XCJtaW5EYXRlXCJcbiAgICAgIFtzdGFydGluZ0RheV09XCJzdGFydGluZ0RheVwiXG4gICAgICAoY2FsZW5kYXJEYXRlUmFuZ2VDaGFuZ2UpPVwib25DYWxlbmRhckRhdGVSYW5nZUNoYW5nZSgkZXZlbnQpXCJcbiAgICAgIChjYWxlbmRhck1vZGVDaGFuZ2UpPVwib25DYWxlbmRhck1vZGVDaGFuZ2UoKVwiXG4gICAgICAoc2VsZWN0ZWREYXRlQ2hhbmdlKT1cIm9uU2VsZWN0ZWREYXRlQ2hhbmdlKCRldmVudClcIlxuICAgID5cbiAgICA8L3NreS1kYXRlcGlja2VyLWNhbGVuZGFyPlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
305
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZXBpY2tlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvZGF0ZXRpbWUvc3JjL2xpYi9tb2R1bGVzL2RhdGVwaWNrZXIvZGF0ZXBpY2tlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvZGF0ZXRpbWUvc3JjL2xpYi9tb2R1bGVzL2RhdGVwaWNrZXIvZGF0ZXBpY2tlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLE9BQU8sRUFDTCx1QkFBdUIsRUFFdkIsU0FBUyxFQUNULFVBQVUsRUFDVixZQUFZLEVBQ1osS0FBSyxFQUdMLFFBQVEsRUFDUixNQUFNLEVBQ04sV0FBVyxFQUNYLFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQ0wsc0JBQXNCLEdBTXZCLE1BQU0sYUFBYSxDQUFDO0FBSXJCLE9BQU8sRUFBRSxPQUFPLEVBQWdCLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN4RCxPQUFPLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBR3pELE9BQU8sRUFBRSw4QkFBOEIsRUFBRSxNQUFNLGlDQUFpQyxDQUFDOzs7Ozs7Ozs7QUFHakYsSUFBSSxNQUFNLEdBQUcsQ0FBQyxDQUFDO0FBRWY7OztHQUdHO0FBT0gsTUFBTSxPQUFPLHNCQUFzQjtJQTRJakMsWUFDRSxZQUE2QixFQUM3QixjQUFpQyxFQUNqQyxXQUFrQyxFQUNsQyxjQUFpQyxFQUNkLG1CQUE0QyxFQUNuRCxRQUEwQjtRQURuQix3QkFBbUIsR0FBbkIsbUJBQW1CLENBQXlCOztRQWhKakU7OztXQUdHO1FBRUksZ0JBQVcsR0FBdUIsRUFBRSxDQUFDO1FBc0I1Qzs7OztXQUlHO1FBRUksNEJBQXVCLEdBQUcsSUFBSSxZQUFZLEVBQStCLENBQUM7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QUFDO1FBQzVDLHVCQUFBLElBQUksbURBQTRCLFNBQVMsTUFBQSxDQUFDO0tBQzNDO0FBQ0gsQ0FBQztvSEFoV1Usc0JBQXNCO3dHQUF0QixzQkFBc0IseU1Bd0R0Qiw4QkFBOEIsd0hBSWpDLFVBQVUscUhBb0NWLFdBQVcsK0dBS1gsVUFBVSwrR0FLVixXQUFXLDZJQU1YLFdBQVcsMkNDNUpyQixnaUVBK0RBOzRGRG5CYSxzQkFBc0I7a0JBTmxDLFNBQVM7K0JBQ0UsZ0JBQWdCLG1CQUdULHVCQUF1QixDQUFDLE1BQU07OzBCQW1KNUMsUUFBUTs7MEJBQ1IsUUFBUTs0Q0E1SUosV0FBVztzQkFEakIsS0FBSztnQkE2QkMsdUJBQXVCO3NCQUQ3QixNQUFNO2dCQXdCQSxRQUFRO3NCQURkLFNBQVM7dUJBQUMsOEJBQThCO2dCQU05QixXQUFXO3NCQUhyQixTQUFTO3VCQUFDLGFBQWEsRUFBRTt3QkFDeEIsSUFBSSxFQUFFLFVBQVU7cUJBQ2pCO2dCQXFDTSxtQkFBbUI7c0JBSHpCLFNBQVM7dUJBQUMscUJBQXFCLEVBQUU7d0JBQ2hDLElBQUksRUFBRSxXQUFXO3FCQUNsQjtnQkFNTSxnQkFBZ0I7c0JBSHRCLFNBQVM7dUJBQUMsa0JBQWtCLEVBQUU7d0JBQzdCLElBQUksRUFBRSxVQUFVO3FCQUNqQjtnQkFPTSxnQkFBZ0I7c0JBSnRCLFNBQVM7dUJBQUMsa0JBQWtCLEVBQUU7d0JBQzdCLElBQUksRUFBRSxXQUFXO3dCQUNqQixNQUFNLEVBQUUsSUFBSTtxQkFDYjtnQkFPTSx3QkFBd0I7c0JBSjlCLFNBQVM7dUJBQUMsMEJBQTBCLEVBQUU7d0JBQ3JDLElBQUksRUFBRSxXQUFXO3dCQUNqQixNQUFNLEVBQUUsSUFBSTtxQkFDYiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIElucHV0LFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgT3B0aW9uYWwsXG4gIE91dHB1dCxcbiAgVGVtcGxhdGVSZWYsXG4gIFZpZXdDaGlsZCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBTa3lBZmZpeEF1dG9GaXRDb250ZXh0LFxuICBTa3lBZmZpeFNlcnZpY2UsXG4gIFNreUFmZml4ZXIsXG4gIFNreUNvcmVBZGFwdGVyU2VydmljZSxcbiAgU2t5T3ZlcmxheUluc3RhbmNlLFxuICBTa3lPdmVybGF5U2VydmljZSxcbn0gZnJvbSAnQHNreXV4L2NvcmUnO1xuaW1wb3J0IHsgU2t5SW5wdXRCb3hIb3N0U2VydmljZSB9IGZyb20gJ0Bza3l1eC9mb3Jtcyc7XG5pbXBvcnQgeyBTa3lUaGVtZVNlcnZpY2UgfSBmcm9tICdAc2t5dXgvdGhlbWUnO1xuXG5pbXBvcnQgeyBTdWJqZWN0LCBTdWJzY3JpcHRpb24sIGZyb21FdmVudCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZGVib3VuY2VUaW1lLCB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7IFNreURhdGVwaWNrZXJDYWxlbmRhckNoYW5nZSB9IGZyb20gJy4vZGF0ZXBpY2tlci1jYWxlbmRhci1jaGFuZ2UnO1xuaW1wb3J0IHsgU2t5RGF0ZXBpY2tlckNhbGVuZGFyQ29tcG9uZW50IH0gZnJvbSAnLi9kYXRlcGlja2VyLWNhbGVuZGFyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBTa3lEYXRlcGlja2VyQ3VzdG9tRGF0ZSB9IGZyb20gJy4vZGF0ZXBpY2tlci1jdXN0b20tZGF0ZSc7XG5cbmxldCBuZXh0SWQgPSAwO1xuXG4vKipcbiAqIENyZWF0ZXMgdGhlIGRhdGVwaWNrZXIgYnV0dG9uIGFuZCBjYWxlbmRhci5cbiAqIFlvdSBtdXN0IHdyYXAgdGhpcyBjb21wb25lbnQgYXJvdW5kIGFuIGlucHV0IHdpdGggdGhlIGBza3lEYXRlcGlja2VySW5wdXRgIGRpcmVjdGl2ZS5cbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnc2t5LWRhdGVwaWNrZXInLFxuICB0ZW1wbGF0ZVVybDogJy4vZGF0ZXBpY2tlci5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2RhdGVwaWNrZXIuY29tcG9uZW50LnNjc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIFNreURhdGVwaWNrZXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkRlc3Ryb3ksIE9uSW5pdCB7XG4gIC8qKlxuICAgKiBBZGRzIGEgY2xhc3MgdG8gdGhlIGRhdGVwaWNrZXIuXG4gICAqIEBkZWZhdWx0IFwiXCJcbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBwaWNrZXJDbGFzczogc3RyaW5nIHwgdW5kZWZpbmVkID0gJyc7XG5cbiAgcHVibGljIGdldCBkaXNhYmxlZCgpOiBib29sZWFuIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy4jX2Rpc2FibGVkO1xuICB9XG5cbiAgcHVibGljIHNldCBkaXNhYmxlZCh2YWx1ZTogYm9vbGVhbiB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuI19kaXNhYmxlZCA9IHZhbHVlO1xuICAgIHRoaXMuI2NoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgcHVibGljIHNldCBzZWxlY3RlZERhdGUodmFsdWU6IERhdGUgfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLiNfc2VsZWN0ZWREYXRlID0gdmFsdWU7XG4gICAgaWYgKHRoaXMuY2FsZW5kYXIpIHtcbiAgICAgIHRoaXMuY2FsZW5kYXIud3JpdGVWYWx1ZSh2YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGdldCBzZWxlY3RlZERhdGUoKTogRGF0ZSB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuI19zZWxlY3RlZERhdGU7XG4gIH1cblxuICAvKipcbiAgICogRmlyZXMgd2hlbiB0aGUgcmFuZ2Ugb2YgZGlzcGxheWVkIGRhdGVzIGluIHRoZSBjYWxlbmRhciBjaGFuZ2VzLiBQcm92aWRlcyB0aGVcbiAgICogY3VycmVudCByYW5nZSBvZiBkaXNwbGF5ZWQgZGF0ZXMgYW5kIGEgbXV0YWJsZSBgY3VzdG9tRGF0ZWAgcHJvcGVydHkgY29uc3VtZXJzIGNhbiB1c2VcbiAgICogdG8gbW9kaWZ5IGluZGl2aWR1YWwgZGF0ZXMgb24gdGhlIGNhbGVuZGFyLlxuICAgKi9cbiAgQE91dHB1dCgpXG4gIHB1YmxpYyBjYWxlbmRhckRhdGVSYW5nZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8U2t5RGF0ZXBpY2tlckNhbGVuZGFyQ2hhbmdlPigpO1xuXG4gIHB1YmxpYyBjYWxlbmRhcklkOiBzdHJpbmc7XG5cbiAgcHVibGljIGN1c3RvbURhdGVzOiBTa3lEYXRlcGlja2VyQ3VzdG9tRGF0ZVtdIHwgdW5kZWZpbmVkO1xuXG4gIHB1YmxpYyBkYXRlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxEYXRlPigpO1xuXG4gIHB1YmxpYyBpc0RheXBpY2tlcldhaXRpbmcgPSBmYWxzZTtcblxuICBwdWJsaWMgaXNPcGVuID0gZmFsc2U7XG5cbiAgcHVibGljIGlzVmlzaWJsZSA9IGZhbHNlO1xuXG4gIHB1YmxpYyBtYXhEYXRlOiBEYXRlIHwgdW5kZWZpbmVkO1xuXG4gIHB1YmxpYyBtaW5EYXRlOiBEYXRlIHwgdW5kZWZpbmVkO1xuXG4gIHB1YmxpYyBzdGFydGluZ0RheTogbnVtYmVyIHwgdW5kZWZpbmVkO1xuXG4gIHB1YmxpYyB0cmlnZ2VyQnV0dG9uSWQ6IHN0cmluZztcblxuICBAVmlld0NoaWxkKFNreURhdGVwaWNrZXJDYWxlbmRhckNvbXBvbmVudClcbiAgcHVibGljIGNhbGVuZGFyOiBTa3lEYXRlcGlja2VyQ2FsZW5kYXJDb21wb25lbnQgfCB1bmRlZmluZWQ7XG5cbiAgQFZpZXdDaGlsZCgnY2FsZW5kYXJSZWYnLCB7XG4gICAgcmVhZDogRWxlbWVudFJlZixcbiAgfSlcbiAgcHVibGljIHNldCBjYWxlbmRhclJlZih2YWx1ZTogRWxlbWVudFJlZiB8IHVuZGVmaW5lZCkge1xuICAgIGlmICh2YWx1ZSkge1xuICAgICAgdGhpcy4jX2NhbGVuZGFyUmVmID0gdmFsdWU7XG5cbiAgICAgIC8vIFdhaXQgZm9yIHRoZSBjYWxlbmRhciBjb21wb25lbnQgdG8gcmVuZGVyIGJlZm9yZSBnYXVnaW5nIGRpbWVuc2lvbnMuXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgaWYgKHRoaXMuY2FsZW5kYXJSZWYpIHtcbiAgICAgICAgICB0aGlzLmNhbGVuZGFyPy53cml0ZVZhbHVlKHRoaXMuc2VsZWN0ZWREYXRlKTtcblxuICAgICAgICAgIHRoaXMuI2Rlc3Ryb3lBZmZpeGVyKCk7XG4gICAgICAgICAgdGhpcy4jY3JlYXRlQWZmaXhlcigpO1xuXG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5jYWxlbmRhclJlZikge1xuICAgICAgICAgICAgICB0aGlzLiNjb3JlQWRhcHRlci5nZXRGb2N1c2FibGVDaGlsZHJlbkFuZEFwcGx5Rm9jdXMoXG4gICAgICAgICAgICAgICAgdGhpcy5jYWxlbmRhclJlZixcbiAgICAgICAgICAgICAgICAnLnNreS1kYXRlcGlja2VyLWNhbGVuZGFyLWlubmVyJyxcbiAgICAgICAgICAgICAgICBmYWxzZVxuICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgIHRoaXMuaXNWaXNpYmxlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgdGhpcy4jY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBnZXQgY2FsZW5kYXJSZWYoKTogRWxlbWVudFJlZiB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuI19jYWxlbmRhclJlZjtcbiAgfVxuXG4gIEBWaWV3Q2hpbGQoJ2NhbGVuZGFyVGVtcGxhdGVSZWYnLCB7XG4gICAgcmVhZDogVGVtcGxhdGVSZWYsXG4gIH0pXG4gIHB1YmxpYyBjYWxlbmRhclRlbXBsYXRlUmVmOiBUZW1wbGF0ZVJlZjx1bmtub3duPiB8IHVuZGVmaW5lZDtcblxuICBAVmlld0NoaWxkKCd0cmlnZ2VyQnV0dG9uUmVmJywge1xuICAgIHJlYWQ6IEVsZW1lbnRSZWYsXG4gIH0pXG4gIHB1YmxpYyB0cmlnZ2VyQnV0dG9uUmVmOiBFbGVtZW50UmVmIHwgdW5kZWZpbmVkO1xuXG4gIEBWaWV3Q2hpbGQoJ2lucHV0VGVtcGxhdGVSZWYnLCB7XG4gICAgcmVhZDogVGVtcGxhdGVSZWYsXG4gICAgc3RhdGljOiB0cnVlLFxuICB9KVxuICBwdWJsaWMgaW5wdXRUZW1wbGF0ZVJlZjogVGVtcGxhdGVSZWY8dW5rbm93bj4gfCB1bmRlZmluZWQ7XG5cbiAgQFZpZXdDaGlsZCgndHJpZ2dlckJ1dHRvblRlbXBsYXRlUmVmJywge1xuICAgIHJlYWQ6IFRlbXBsYXRlUmVmLFxuICAgIHN0YXRpYzogdHJ1ZSxcbiAgfSlcbiAgcHVibGljIHRyaWdnZXJCdXR0b25UZW1wbGF0ZVJlZjogVGVtcGxhdGVSZWY8dW5rbm93bj4gfCB1bmRlZmluZWQ7XG5cbiAgI2FmZml4ZXI6IFNreUFmZml4ZXIgfCB1bmRlZmluZWQ7XG5cbiAgI2NhbGVuZGFyVW5zdWJzY3JpYmU6IFN1YmplY3Q8dm9pZD4gPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gICNjdXN0b21EYXRlc1N1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uIHwgdW5kZWZpbmVkO1xuXG4gICNuZ1Vuc3Vic2NyaWJlID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICAjb3ZlcmxheTogU2t5T3ZlcmxheUluc3RhbmNlIHwgdW5kZWZpbmVkO1xuXG4gICNvdmVybGF5S2V5ZG93bkxpc3RlbmVyOiBTdWJzY3JpcHRpb24gfCB1bmRlZmluZWQ7XG5cbiAgI19jYWxlbmRhclJlZjogRWxlbWVudFJlZiB8IHVuZGVmaW5lZDtcblxuICAjX2Rpc2FibGVkOiBib29sZWFuIHwgdW5kZWZpbmVkID0gZmFsc2U7XG5cbiAgI19zZWxlY3RlZERhdGU6IERhdGUgfCB1bmRlZmluZWQ7XG5cbiAgI2FmZml4U2VydmljZTogU2t5QWZmaXhTZXJ2aWNlO1xuICAjY2hhbmdlRGV0ZWN0b3I6IENoYW5nZURldGVjdG9yUmVmO1xuICAjY29yZUFkYXB0ZXI6IFNreUNvcmVBZGFwdGVyU2VydmljZTtcbiAgI292ZXJsYXlTZXJ2aWNlOiBTa3lPdmVybGF5U2VydmljZTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBhZmZpeFNlcnZpY2U6IFNreUFmZml4U2VydmljZSxcbiAgICBjaGFuZ2VEZXRlY3RvcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgY29yZUFkYXB0ZXI6IFNreUNvcmVBZGFwdGVyU2VydmljZSxcbiAgICBvdmVybGF5U2VydmljZTogU2t5T3ZlcmxheVNlcnZpY2UsXG4gICAgQE9wdGlvbmFsKCkgcHVibGljIGlucHV0Qm94SG9zdFNlcnZpY2U/OiBTa3lJbnB1dEJveEhvc3RTZXJ2aWNlLFxuICAgIEBPcHRpb25hbCgpIHRoZW1lU3ZjPzogU2t5VGhlbWVTZXJ2aWNlXG4gICkge1xuICAgIHRoaXMuI2FmZml4U2VydmljZSA9IGFmZml4U2VydmljZTtcbiAgICB0aGlzLiNjaGFuZ2VEZXRlY3RvciA9IGNoYW5nZURldGVjdG9yO1xuICAgIHRoaXMuI2NvcmVBZGFwdGVyID0gY29yZUFkYXB0ZXI7XG4gICAgdGhpcy4jb3ZlcmxheVNlcnZpY2UgPSBvdmVybGF5U2VydmljZTtcbiAgICBjb25zdCB1bmlxdWVJZCA9IG5leHRJZCsrO1xuICAgIHRoaXMuY2FsZW5kYXJJZCA9IGBza3ktZGF0ZXBpY2tlci1jYWxlbmRhci0ke3VuaXF1ZUlkfWA7XG4gICAgdGhpcy50cmlnZ2VyQnV0dG9uSWQgPSBgc2t5LWRhdGVwaWNrZXItYnV0dG9uLSR7dW5pcXVlSWR9YDtcblxuICAgIC8vIFVwZGF0ZSBpY29ucyB3aGVuIHRoZW1lIGNoYW5nZXMuXG4gICAgdGhlbWVTdmM/LnNldHRpbmdzQ2hhbmdlXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy4jbmdVbnN1YnNjcmliZSkpXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgdGhpcy4jY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XG4gICAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pbnB1dEJveEhvc3RTZXJ2aWNlICYmIHRoaXMuaW5wdXRUZW1wbGF0ZVJlZikge1xuICAgICAgdGhpcy5pbnB1dEJveEhvc3RTZXJ2aWNlLnBvcHVsYXRlKHtcbiAgICAgICAgaW5wdXRUZW1wbGF0ZTogdGhpcy5pbnB1dFRlbXBsYXRlUmVmLFxuICAgICAgICBidXR0b25zVGVtcGxhdGU6IHRoaXMudHJpZ2dlckJ1dHRvblRlbXBsYXRlUmVmLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuZGF0ZUNoYW5nZS5jb21wbGV0ZSgpO1xuICAgIHRoaXMuI25nVW5zdWJzY3JpYmUubmV4dCgpO1xuICAgIHRoaXMuI25nVW5zdWJzY3JpYmUuY29tcGxldGUoKTtcbiAgICB0aGlzLiNyZW1vdmVQaWNrZXJFdmVudExpc3RlbmVycygpO1xuICAgIHRoaXMuI2Rlc3Ryb3lBZmZpeGVyKCk7XG4gICAgdGhpcy4jZGVzdHJveU92ZXJsYXkoKTtcbiAgfVxuXG4gIHB1YmxpYyBvbkNhbGVuZGFyTW9kZUNoYW5nZSgpOiB2b2lkIHtcbiAgICAvLyBMZXQgdGhlIGNhbGVuZGFyIHBvcHVsYXRlIGluIHRoZSBET00gYmVmb3JlIHJlY2FsY3VsYXRpbmcgcGxhY2VtZW50LlxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy4jYWZmaXhlcj8ucmVhZmZpeCgpO1xuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIG9uU2VsZWN0ZWREYXRlQ2hhbmdlKHZhbHVlOiBEYXRlKTogdm9pZCB7XG4gICAgdGhpcy5kYXRlQ2hhbmdlLmVtaXQodmFsdWUpO1xuICAgIHRoaXMuI2Nsb3NlUGlja2VyKCk7XG4gIH1cblxuICBwdWJsaWMgb25UcmlnZ2VyQnV0dG9uQ2xpY2soKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaXNPcGVuKSB7XG4gICAgICB0aGlzLiNjbG9zZVBpY2tlcigpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLiNvcGVuUGlja2VyKCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIG9uQ2FsZW5kYXJEYXRlUmFuZ2VDaGFuZ2UoZXZlbnQ/OiBTa3lEYXRlcGlja2VyQ2FsZW5kYXJDaGFuZ2UpOiB2b2lkIHtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgIGlmIChldmVudCkge1xuICAgICAgdGhpcy4jY2FuY2VsQ3VzdG9tRGF0ZXNTdWJzY3JpcHRpb24oKTtcblxuICAgICAgY29uc3QgYXJnczogU2t5RGF0ZXBpY2tlckNhbGVuZGFyQ2hhbmdlID0ge1xuICAgICAgICBzdGFydERhdGU6IGV2ZW50LnN0YXJ0RGF0ZSxcbiAgICAgICAgZW5kRGF0ZTogZXZlbnQuZW5kRGF0ZSxcbiAgICAgICAgY3VzdG9tRGF0ZXM6IHVuZGVmaW5lZCxcbiAgICAgIH07XG4gICAgICB0aGlzLmNhbGVuZGFyRGF0ZVJhbmdlQ2hhbmdlLmVtaXQoYXJncyk7XG4gICAgICAvLyBJZiBjb25zdW1lciBoYXMgYWRkZWQgYW4gb2JzZXJ2YWJsZSB0byB0aGUgYXJncywgd2F0Y2ggZm9yIGluY29taW5nIGN1c3RvbSBkYXRlcy5cbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgICBpZiAoYXJncy5jdXN0b21EYXRlcykge1xuICAgICAgICB0aGlzLmlzRGF5cGlja2VyV2FpdGluZyA9IHRydWU7XG4gICAgICAgIC8vIEF2b2lkIGFuIEV4cHJlc3Npb25DaGFuZ2VkQWZ0ZXJJdEhhc0JlZW5DaGVja2VkRXJyb3IuXG4gICAgICAgIHRoaXMuI2NoYW5nZURldGVjdG9yLmRldGVjdENoYW5nZXMoKTtcblxuICAgICAgICB0aGlzLiNjdXN0b21EYXRlc1N1YnNjcmlwdGlvbiA9IGFyZ3MuY3VzdG9tRGF0ZXNcbiAgICAgICAgICAucGlwZShkZWJvdW5jZVRpbWUoMjUwKSlcbiAgICAgICAgICAuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcbiAgICAgICAgICAgIHRoaXMuY3VzdG9tRGF0ZXMgPSByZXN1bHQ7XG4gICAgICAgICAgICB0aGlzLmlzRGF5cGlja2VyV2FpdGluZyA9IGZhbHNlO1xuXG4gICAgICAgICAgICAvLyBUcmlnZ2VyIGNoYW5nZSBkZXRlY3Rpb24gaW4gY2hpbGQgY29tcG9uZW50cyB0byBzaG93IGNoYW5nZXMgaW4gdGhlIGNhbGVuZGFyLlxuICAgICAgICAgICAgdGhpcy4jY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XG4gICAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBJZiBjb25zdW1lciByZXR1cm5zIGFuIHVuZGVmaW5lZCB2YWx1ZSBhZnRlciBjdXN0b20gZGF0ZXMgaGF2ZVxuICAgICAgICAvLyBhbHJlYWR5IGJlbiBlc3RhYmxpc2hlZCwgcmVtb3ZlIGN1c3RvbSBkYXRlcy5cbiAgICAgICAgaWYgKHRoaXMuY3VzdG9tRGF0ZXMpIHtcbiAgICAgICAgICB0aGlzLmN1c3RvbURhdGVzID0gdW5kZWZpbmVkO1xuICAgICAgICAgIC8vIEF2b2lkIGFuIEV4cHJlc3Npb25DaGFuZ2VkQWZ0ZXJJdEhhc0JlZW5DaGVja2VkRXJyb3IuXG4gICAgICAgICAgdGhpcy4jY2hhbmdlRGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgI2Nsb3NlUGlja2VyKCkge1xuICAgIHRoaXMuI2Rlc3Ryb3lBZmZpeGVyKCk7XG4gICAgdGhpcy4jZGVzdHJveU92ZXJsYXkoKTtcbiAgICB0aGlzLiNyZW1vdmVQaWNrZXJFdmVudExpc3RlbmVycygpO1xuICAgIHRoaXMudHJpZ2dlckJ1dHRvblJlZj8ubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgIHRoaXMuaXNPcGVuID0gZmFsc2U7XG4gIH1cblxuICAjb3BlblBpY2tlcigpOiB2b2lkIHtcbiAgICB0aGlzLmlzVmlzaWJsZSA9IGZhbHNlO1xuICAgIHRoaXMuI2NoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpO1xuXG4gICAgdGhpcy4jcmVtb3ZlUGlja2VyRXZlbnRMaXN0ZW5lcnMoKTtcbiAgICB0aGlzLiNkZXN0cm95T3ZlcmxheSgpO1xuICAgIHRoaXMuI2NyZWF0ZU92ZXJsYXkoKTtcblxuICAgIHRoaXMuaXNPcGVuID0gdHJ1ZTtcbiAgICB0aGlzLiNjaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gICNjcmVhdGVBZmZpeGVyKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmNhbGVuZGFyUmVmICYmIHRoaXMudHJpZ2dlckJ1dHRvblJlZikge1xuICAgICAgY29uc3QgYWZmaXhlciA9IHRoaXMuI2FmZml4U2VydmljZS5jcmVhdGVBZmZpeGVyKHRoaXMuY2FsZW5kYXJSZWYpO1xuXG4gICAgICAvLyBIaWRlIGNhbGVuZGFyIHdoZW4gdHJpZ2dlciBidXR0b24gaXMgc2Nyb2xsZWQgb2ZmIHNjcmVlbi5cbiAgICAgIGFmZml4ZXIucGxhY2VtZW50Q2hhbmdlXG4gICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLiNjYWxlbmRhclVuc3Vic2NyaWJlKSlcbiAgICAgICAgLnN1YnNjcmliZSgoY2hhbmdlKSA9PiB7XG4gICAgICAgICAgdGhpcy5pc1Zpc2libGUgPSBjaGFuZ2UucGxhY2VtZW50ICE9PSBudWxsO1xuICAgICAgICAgIHRoaXMuI2NoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICB9KTtcblxuICAgICAgYWZmaXhlci5hZmZpeFRvKHRoaXMudHJpZ2dlckJ1dHRvblJlZi5uYXRpdmVFbGVtZW50LCB7XG4gICAgICAgIGF1dG9GaXRDb250ZXh0OiBTa3lBZmZpeEF1dG9GaXRDb250ZXh0LlZpZXdwb3J0LFxuICAgICAgICBlbmFibGVBdXRvRml0OiB0cnVlLFxuICAgICAgICBob3Jpem9udGFsQWxpZ25tZW50OiAncmlnaHQnLFxuICAgICAgICBpc1N0aWNreTogdHJ1ZSxcbiAgICAgICAgcGxhY2VtZW50OiAnYmVsb3cnLFxuICAgICAgfSk7XG5cbiAgICAgIHRoaXMuI2FmZml4ZXIgPSBhZmZpeGVyO1xuICAgIH1cbiAgfVxuXG4gICNkZXN0cm95QWZmaXhlcigpOiB2b2lkIHtcbiAgICAvKmlzdGFuYnVsIGlnbm9yZSBlbHNlKi9cbiAgICBpZiAodGhpcy4jYWZmaXhlcikge1xuICAgICAgdGhpcy4jYWZmaXhlci5kZXN0cm95KCk7XG4gICAgICB0aGlzLiNhZmZpeGVyID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuXG4gICNjcmVhdGVPdmVybGF5KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmNhbGVuZGFyVGVtcGxhdGVSZWYpIHtcbiAgICAgIGNvbnN0IG92ZXJsYXkgPSB0aGlzLiNvdmVybGF5U2VydmljZS5jcmVhdGUoe1xuICAgICAgICB3cmFwcGVyQ2xhc3M6IHRoaXMucGlja2VyQ2xhc3MsXG4gICAgICAgIGVuYWJsZUNsb3NlOiBmYWxzZSxcbiAgICAgICAgZW5hYmxlUG9pbnRlckV2ZW50czogZmFsc2UsXG4gICAgICB9KTtcblxuICAgICAgb3ZlcmxheS5iYWNrZHJvcENsaWNrXG4gICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLiNjYWxlbmRhclVuc3Vic2NyaWJlKSlcbiAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICAgICAgICBpZiAodGhpcy5pc09wZW4pIHtcbiAgICAgICAgICAgIHRoaXMuI2Nsb3NlUGlja2VyKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgdGhpcy4jYWRkS2V5ZG93bkxpc3RlbmVyKCk7XG5cbiAgICAgIG92ZXJsYXkuYXR0YWNoVGVtcGxhdGUodGhpcy5jYWxlbmRhclRlbXBsYXRlUmVmKTtcblxuICAgICAgdGhpcy4jb3ZlcmxheSA9IG92ZXJsYXk7XG4gICAgfVxuICB9XG5cbiAgI2Rlc3Ryb3lPdmVybGF5KCk6IHZvaWQge1xuICAgIC8qaXN0YW5idWwgaWdub3JlIGVsc2UqL1xuICAgIGlmICh0aGlzLiNvdmVybGF5KSB7XG4gICAgICB0aGlzLiNvdmVybGF5U2VydmljZS5jbG9zZSh0aGlzLiNvdmVybGF5KTtcbiAgICAgIHRoaXMuI292ZXJsYXkgPSB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG5cbiAgI2FkZEtleWRvd25MaXN0ZW5lcigpOiB2b2lkIHtcbiAgICB0aGlzLiNvdmVybGF5S2V5ZG93bkxpc3RlbmVyID0gZnJvbUV2ZW50PEtleWJvYXJkRXZlbnQ+KFxuICAgICAgd2luZG93LmRvY3VtZW50LFxuICAgICAgJ2tleWRvd24nXG4gICAgKVxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuI25nVW5zdWJzY3JpYmUpKVxuICAgICAgLnN1YnNjcmliZSgoZXZlbnQpID0+IHtcbiAgICAgICAgY29uc3Qga2V5ID0gZXZlbnQua2V5Py50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBpZiAoa2V5ID09PSAnZXNjYXBlJyAmJiB0aGlzLmlzT3Blbikge1xuICAgICAgICAgIHRoaXMuI2Nsb3NlUGlja2VyKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICB9XG5cbiAgI3JlbW92ZVBpY2tlckV2ZW50TGlzdGVuZXJzKCk6IHZvaWQge1xuICAgIHRoaXMuI2NhbGVuZGFyVW5zdWJzY3JpYmUubmV4dCgpO1xuICAgIHRoaXMuI2NhbGVuZGFyVW5zdWJzY3JpYmUuY29tcGxldGUoKTtcbiAgICB0aGlzLiNjYWxlbmRhclVuc3Vic2NyaWJlID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcbiAgICB0aGlzLiNvdmVybGF5S2V5ZG93bkxpc3RlbmVyPy51bnN1YnNjcmliZSgpO1xuICB9XG5cbiAgI2NhbmNlbEN1c3RvbURhdGVzU3Vic2NyaXB0aW9uKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLiNjdXN0b21EYXRlc1N1YnNjcmlwdGlvbikge1xuICAgICAgdGhpcy4jY3VzdG9tRGF0ZXNTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgIHRoaXMuI2N1c3RvbURhdGVzU3Vic2NyaXB0aW9uID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cInNreS1kYXRlcGlja2VyXCI+XG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCIhaW5wdXRCb3hIb3N0U2VydmljZVwiPlxuICAgIDxkaXYgY2xhc3M9XCJza3ktaW5wdXQtZ3JvdXBcIj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJpbnB1dFRlbXBsYXRlUmVmXCI+PC9uZy1jb250YWluZXI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwidHJpZ2dlckJ1dHRvblRlbXBsYXRlUmVmXCI+PC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+XG4gIDwvbmctY29udGFpbmVyPlxuPC9kaXY+XG5cbjxuZy10ZW1wbGF0ZSAjaW5wdXRUZW1wbGF0ZVJlZj5cbiAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICN0cmlnZ2VyQnV0dG9uVGVtcGxhdGVSZWY+XG4gIDxkaXYgY2xhc3M9XCJza3ktaW5wdXQtZ3JvdXAtYnRuXCI+XG4gICAgPGJ1dHRvblxuICAgICAgYXJpYS1oYXNwb3B1cD1cImRpYWxvZ1wiXG4gICAgICBjbGFzcz1cInNreS1idG4gc2t5LWJ0bi1kZWZhdWx0IHNreS1pbnB1dC1ncm91cC1kYXRlcGlja2VyLWJ0blwiXG4gICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgIFthdHRyLmFyaWEtY29udHJvbHNdPVwiaXNPcGVuID8gY2FsZW5kYXJJZCA6IG51bGxcIlxuICAgICAgW2F0dHIuYXJpYS1leHBhbmRlZF09XCJpc09wZW5cIlxuICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJcbiAgICAgICAgJ3NreXV4X2RhdGVwaWNrZXJfdHJpZ2dlcl9idXR0b25fbGFiZWwnIHwgc2t5TGliUmVzb3VyY2VzXG4gICAgICBcIlxuICAgICAgW2F0dHIuaWRdPVwidHJpZ2dlckJ1dHRvbklkXCJcbiAgICAgIFthdHRyLnRpdGxlXT1cIidza3l1eF9kYXRlcGlja2VyX3RyaWdnZXJfYnV0dG9uX2xhYmVsJyB8IHNreUxpYlJlc291cmNlc1wiXG4gICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgKGNsaWNrKT1cIm9uVHJpZ2dlckJ1dHRvbkNsaWNrKClcIlxuICAgICAgI3RyaWdnZXJCdXR0b25SZWZcbiAgICA+XG4gICAgICA8c2t5LWljb24gKnNreVRoZW1lSWY9XCInZGVmYXVsdCdcIiBpY29uPVwiY2FsZW5kYXJcIiBzaXplPVwibGdcIj48L3NreS1pY29uPlxuICAgICAgPHNreS1pY29uXG4gICAgICAgICpza3lUaGVtZUlmPVwiJ21vZGVybidcIlxuICAgICAgICBpY29uPVwiY2FsZW5kYXJcIlxuICAgICAgICBzaXplPVwibGdcIlxuICAgICAgICBpY29uVHlwZT1cInNreXV4XCJcbiAgICAgID48L3NreS1pY29uPlxuICAgIDwvYnV0dG9uPlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjY2FsZW5kYXJUZW1wbGF0ZVJlZj5cbiAgPGRpdlxuICAgIGNsYXNzPVwic2t5LWRhdGVwaWNrZXItY2FsZW5kYXItY29udGFpbmVyIHNreS1zaGFkb3cgc2t5LWVsZXZhdGlvbi00XCJcbiAgICByb2xlPVwiZGlhbG9nXCJcbiAgICBbYXR0ci5hcmlhLWxhYmVsbGVkYnldPVwidHJpZ2dlckJ1dHRvbklkXCJcbiAgICBbYXR0ci5pZF09XCJjYWxlbmRhcklkXCJcbiAgICBbY2xhc3Muc2t5LWRhdGVwaWNrZXItaGlkZGVuXT1cIiFpc1Zpc2libGVcIlxuICAgICNjYWxlbmRhclJlZlxuICA+XG4gICAgPHNreS1kYXRlcGlja2VyLWNhbGVuZGFyXG4gICAgICBbY3VzdG9tRGF0ZXNdPVwiY3VzdG9tRGF0ZXNcIlxuICAgICAgW2lzRGF5cGlja2VyV2FpdGluZ109XCJpc0RheXBpY2tlcldhaXRpbmdcIlxuICAgICAgW21heERhdGVdPVwibWF4RGF0ZVwiXG4gICAgICBbbWluRGF0ZV09XCJtaW5EYXRlXCJcbiAgICAgIFtzdGFydGluZ0RheV09XCJzdGFydGluZ0RheVwiXG4gICAgICAoY2FsZW5kYXJEYXRlUmFuZ2VDaGFuZ2UpPVwib25DYWxlbmRhckRhdGVSYW5nZUNoYW5nZSgkZXZlbnQpXCJcbiAgICAgIChjYWxlbmRhck1vZGVDaGFuZ2UpPVwib25DYWxlbmRhck1vZGVDaGFuZ2UoKVwiXG4gICAgICAoc2VsZWN0ZWREYXRlQ2hhbmdlKT1cIm9uU2VsZWN0ZWREYXRlQ2hhbmdlKCRldmVudClcIlxuICAgID5cbiAgICA8L3NreS1kYXRlcGlja2VyLWNhbGVuZGFyPlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=