@skyux/lookup 8.5.0 → 8.7.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.
@@ -382,6 +382,7 @@ _SkyCountryFieldComponent_changeDetector = new WeakMap(), _SkyCountryFieldCompon
382
382
  this.countries = sortedNewCountries;
383
383
  }, _SkyCountryFieldComponent_updateInputBox = function _SkyCountryFieldComponent_updateInputBox() {
384
384
  if (this.inputBoxHostSvc && this.inputTemplateRef) {
385
+ this.inputId = this.inputBoxHostSvc.controlId;
385
386
  this.inputBoxHostSvc.populate({
386
387
  inputTemplate: this.inputTemplateRef,
387
388
  iconsInsetTemplate: this.currentTheme === 'modern'
@@ -429,4 +430,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
429
430
  static: true,
430
431
  }]
431
432
  }] } });
432
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY291bnRyeS1maWVsZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvbG9va3VwL3NyYy9saWIvbW9kdWxlcy9jb3VudHJ5LWZpZWxkL2NvdW50cnktZmllbGQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21wb25lbnRzL2xvb2t1cC9zcmMvbGliL21vZHVsZXMvY291bnRyeS1maWVsZC9jb3VudHJ5LWZpZWxkLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsT0FBTyxFQUVMLHVCQUF1QixFQUV2QixTQUFTLEVBRVQsWUFBWSxFQUVaLEtBQUssRUFHTCxRQUFRLEVBQ1IsTUFBTSxFQUNOLFdBQVcsRUFFWCxTQUFTLEVBQ1QsVUFBVSxFQUNWLE1BQU0sR0FDUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBR0wsYUFBYSxFQUNiLFNBQVMsRUFDVCxPQUFPLEVBQ1Asa0JBQWtCLEdBR25CLE1BQU0sZ0JBQWdCLENBQUM7QUFLeEIsT0FBTyxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMxQyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFM0MsT0FBTyxFQUFFLDZCQUE2QixFQUFFLE1BQU0sOENBQThDLENBQUM7QUFLN0YsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0scUNBQXFDLENBQUM7Ozs7Ozs7Ozs7O0FBRWhGLE1BQU0sb0JBQW9CLEdBQUcsSUFBSSxDQUFDO0FBRWxDLE1BQU0sMkJBQTJCLEdBQUc7SUFDbEMsT0FBTyxFQUFFLGFBQWE7SUFDdEIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyx3QkFBd0IsQ0FBQztJQUN2RCxLQUFLLEVBQUUsSUFBSTtDQUNaLENB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LDhGQWtJN0IsNkJBQTZCLGtJQXNFaEMsV0FBVyx1SUFNWCxXQUFXLDJDQ3hRckIsby9FQTZFQTsyRkRoQmEsd0JBQXdCO2tCQVBwQyxTQUFTOytCQUNFLG1CQUFtQixhQUdsQixDQUFDLDJCQUEyQixDQUFDLG1CQUN2Qix1QkFBdUIsQ0FBQyxNQUFNOzswQkF5UDVDLFFBQVE7OzBCQUNSLFFBQVE7NENBalBKLHFCQUFxQjtzQkFEM0IsS0FBSztnQkFVSyxjQUFjO3NCQUR4QixLQUFLO2dCQTJCSyxRQUFRO3NCQURsQixLQUFLO2dCQTRCSyx1QkFBdUI7c0JBRGpDLEtBQUs7Z0JBZUssZ0JBQWdCO3NCQUQxQixLQUFLO2dCQWdCSyxvQkFBb0I7c0JBRDlCLEtBQUs7Z0JBbUJDLHFCQUFxQjtzQkFEM0IsTUFBTTtnQkFhQSxrQ0FBa0M7c0JBRHhDLFNBQVM7dUJBQUMsNkJBQTZCO2dCQXlFakMsZ0JBQWdCO3NCQUp0QixTQUFTO3VCQUFDLGtCQUFrQixFQUFFO3dCQUM3QixJQUFJLEVBQUUsV0FBVzt3QkFDakIsTUFBTSxFQUFFLElBQUk7cUJBQ2I7Z0JBT00scUJBQXFCO3NCQUozQixTQUFTO3VCQUFDLHVCQUF1QixFQUFFO3dCQUNsQyxJQUFJLEVBQUUsV0FBVzt3QkFDakIsTUFBTSxFQUFFLElBQUk7cUJBQ2IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBZnRlclZpZXdJbml0LFxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBJbmplY3RvcixcbiAgSW5wdXQsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBPcHRpb25hbCxcbiAgT3V0cHV0LFxuICBUZW1wbGF0ZVJlZixcbiAgVHlwZSxcbiAgVmlld0NoaWxkLFxuICBmb3J3YXJkUmVmLFxuICBpbmplY3QsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgQWJzdHJhY3RDb250cm9sLFxuICBDb250cm9sVmFsdWVBY2Nlc3NvcixcbiAgTkdfVkFMSURBVE9SUyxcbiAgTmdDb250cm9sLFxuICBOZ01vZGVsLFxuICBVbnR5cGVkRm9ybUNvbnRyb2wsXG4gIFZhbGlkYXRpb25FcnJvcnMsXG4gIFZhbGlkYXRvcixcbn0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgU2t5QXBwV2luZG93UmVmIH0gZnJvbSAnQHNreXV4L2NvcmUnO1xuaW1wb3J0IHsgU2t5SW5wdXRCb3hIb3N0U2VydmljZSB9IGZyb20gJ0Bza3l1eC9mb3Jtcyc7XG5pbXBvcnQgeyBTa3lUaGVtZVNlcnZpY2UgfSBmcm9tICdAc2t5dXgvdGhlbWUnO1xuXG5pbXBvcnQgJ2ludGwtdGVsLWlucHV0JztcbmltcG9ydCB7IFN1YmplY3QsIGZyb21FdmVudCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBTa3lBdXRvY29tcGxldGVJbnB1dERpcmVjdGl2ZSB9IGZyb20gJy4uL2F1dG9jb21wbGV0ZS9hdXRvY29tcGxldGUtaW5wdXQuZGlyZWN0aXZlJztcbmltcG9ydCB7IFNreUF1dG9jb21wbGV0ZVNlbGVjdGlvbkNoYW5nZSB9IGZyb20gJy4uL2F1dG9jb21wbGV0ZS90eXBlcy9hdXRvY29tcGxldGUtc2VsZWN0aW9uLWNoYW5nZSc7XG5cbmltcG9ydCB7IFNreUNvdW50cnlGaWVsZENvdW50cnkgfSBmcm9tICcuL3R5cGVzL2NvdW50cnknO1xuaW1wb3J0IHsgU2t5Q291bnRyeUZpZWxkQ29udGV4dCB9IGZyb20gJy4vdHlwZXMvY291bnRyeS1maWVsZC1jb250ZXh0JztcbmltcG9ydCB7IFNLWV9DT1VOVFJZX0ZJRUxEX0NPTlRFWFQgfSBmcm9tICcuL3R5cGVzL2NvdW50cnktZmllbGQtY29udGV4dC10b2tlbic7XG5cbmNvbnN0IERFRkFVTFRfQ09VTlRSWV9DT0RFID0gJ3VzJztcblxuY29uc3QgU0tZX0NPVU5UUllfRklFTERfVkFMSURBVE9SID0ge1xuICBwcm92aWRlOiBOR19WQUxJREFUT1JTLFxuICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBTa3lDb3VudHJ5RmllbGRDb21wb25lbnQpLFxuICBtdWx0aTogdHJ1ZSxcbn07XG5cbmxldCB1bmlxdWVJZCA9IDA7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3NreS1jb3VudHJ5LWZpZWxkJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2NvdW50cnktZmllbGQuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9jb3VudHJ5LWZpZWxkLmNvbXBvbmVudC5zY3NzJ10sXG4gIHByb3ZpZGVyczogW1NLWV9DT1VOVFJZX0ZJRUxEX1ZBTElEQVRPUl0sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBTa3lDb3VudHJ5RmllbGRDb21wb25lbnRcbiAgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBDb250cm9sVmFsdWVBY2Nlc3NvciwgT25EZXN0cm95LCBPbkluaXQsIFZhbGlkYXRvclxue1xuICAvKipcbiAgICogVGhlIHZhbHVlIGZvciB0aGUgSFRNTCBgYXV0b2NvbXBsZXRlYCBhdHRyaWJ1dGUgb24gdGhlIGZvcm0gaW5wdXQuXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgYXV0b2NvbXBsZXRlQXR0cmlidXRlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIFRoZSBbSW50ZXJuYXRpb25hbCBPcmdhbml6YXRpb24gZm9yIFN0YW5kYXJkaXphdGlvbiBBbHBoYSAyXShodHRwczovL3d3dy5uYXRpb25zb25saW5lLm9yZy9vbmV3b3JsZC9jb3VudHJ5X2NvZGVfbGlzdC5odG0pXG4gICAqIGNvdW50cnkgY29kZSBmb3IgdGhlIGRlZmF1bHQgY291bnRyeS5cbiAgICogV2hlbiBzZWFyY2ggcmVzdWx0cyBpbmNsdWRlIHRoZSBkZWZhdWx0IGNvdW50cnksIGl0IGFwcGVhcnMgYXQgdGhlIHRvcCBvZiB0aGUgbGlzdC5cbiAgICogQGRlZmF1bHQgXCJ1c1wiXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IGRlZmF1bHRDb3VudHJ5KHZhbHVlOiBzdHJpbmcgfCB1bmRlZmluZWQpIHtcbiAgICBpZiAoIXZhbHVlKSB7XG4gICAgICB2YWx1ZSA9IERFRkFVTFRfQ09VTlRSWV9DT0RFO1xuICAgIH1cblxuICAgIGlmICh2YWx1ZSAhPT0gdGhpcy4jX2RlZmF1bHRDb3VudHJ5KSB7XG4gICAgICB0aGlzLiNfZGVmYXVsdENvdW50cnkgPSB2YWx1ZS50b0xvd2VyQ2FzZSgpO1xuXG4gICAgICB0aGlzLiNkZWZhdWx0Q291bnRyeURhdGEgPSB0aGlzLmNvdW50cmllcy5maW5kKFxuICAgICAgICAoY291bnRyeSkgPT4gY291bnRyeS5pc28yID09PSB0aGlzLiNfZGVmYXVsdENvdW50cnlcbiAgICAgICk7XG5cbiAgICAgIHRoaXMuI3NvcnRDb3VudHJpZXNXaXRoU2VsZWN0ZWRBbmREZWZhdWx0KHRoaXMuc2VsZWN0ZWRDb3VudHJ5KTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZ2V0IGRlZmF1bHRDb3VudHJ5KCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuI19kZWZhdWx0Q291bnRyeTtcbiAgfVxuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIGRpc2FibGUgdGhlIGNvdW50cnkgZmllbGQgb24gdGVtcGxhdGUtZHJpdmVuIGZvcm1zLiBEb24ndCB1c2UgdGhpcyBpbnB1dCBvbiByZWFjdGl2ZSBmb3JtcyBiZWNhdXNlIHRoZXkgbWF5IG92ZXJ3cml0ZSB0aGUgaW5wdXQgb3IgbGVhdmUgdGhlIGNvbnRyb2wgb3V0IG9mIHN5bmMuXG4gICAqIFRvIHNldCB0aGUgZGlzYWJsZWQgc3RhdGUgb24gcmVhY3RpdmUgZm9ybXMsIHVzZSB0aGUgYEZvcm1Db250cm9sYCBpbnN0ZWFkLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBkaXNhYmxlZChpc0Rpc2FibGVkOiBib29sZWFuIHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy4jcmVtb3ZlRXZlbnRMaXN0ZW5lcnMoKTtcblxuICAgIGlmICghaXNEaXNhYmxlZCkge1xuICAgICAgdGhpcy4jYWRkRXZlbnRMaXN0ZW5lcnMoKTtcbiAgICB9XG5cbiAgICB0aGlzLiNfZGlzYWJsZWQgPSBpc0Rpc2FibGVkID8/IGZhbHNlO1xuXG4gICAgaWYgKGlzRGlzYWJsZWQpIHtcbiAgICAgIHRoaXMuY291bnRyeVNlYXJjaEZvcm1Db250cm9sLmRpc2FibGUoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jb3VudHJ5U2VhcmNoRm9ybUNvbnRyb2wuZW5hYmxlKCk7XG4gICAgfVxuXG4gICAgdGhpcy4jY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGRpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLiNfZGlzYWJsZWQ7XG4gIH1cblxuICAvKipcbiAgICogV2hldGhlciB0byBoaWRlIHRoZSBmbGFnIGluIHRoZSBpbnB1dCBlbGVtZW50LlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBoaWRlU2VsZWN0ZWRDb3VudHJ5RmxhZyh2YWx1ZTogYm9vbGVhbiB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuI19oaWRlU2VsZWN0ZWRDb3VudHJ5RmxhZyA9IHZhbHVlID8/IGZhbHNlO1xuICB9XG5cbiAgcHVibGljIGdldCBoaWRlU2VsZWN0ZWRDb3VudHJ5RmxhZygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy4jX2hpZGVTZWxlY3RlZENvdW50cnlGbGFnO1xuICB9XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gaW5jbHVkZSBwaG9uZSBpbmZvcm1hdGlvbiBpbiB0aGUgc2VsZWN0ZWQgY291bnRyeSBhbmQgY291bnRyeSBkcm9wZG93bi5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICogQGludGVybmFsXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IGluY2x1ZGVQaG9uZUluZm8odmFsdWU6IGJvb2xlYW4gfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLiNfaW5jbHVkZVBob25lSW5mbyA9IHZhbHVlID8/IGZhbHNlO1xuXG4gICAgdGhpcy4jc2V0dXBDb3VudHJpZXMoKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgaW5jbHVkZVBob25lSW5mbygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy4jX2luY2x1ZGVQaG9uZUluZm87XG4gIH1cblxuICAvKipcbiAgICogVGhlIFtJbnRlcm5hdGlvbmFsIE9yZ2FuaXphdGlvbiBmb3IgU3RhbmRhcmRpemF0aW9uIEFscGhhIDJdKGh0dHBzOi8vd3d3Lm5hdGlvbnNvbmxpbmUub3JnL29uZXdvcmxkL2NvdW50cnlfY29kZV9saXN0Lmh0bSlcbiAgICogY291bnRyeSBjb2RlcyBmb3IgdGhlIGNvdW50cmllcyB0aGF0IHVzZXJzIGNhbiBzZWxlY3QuIEJ5IGRlZmF1bHQsIGFsbCBjb3VudHJpZXMgYXJlIGF2YWlsYWJsZS5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgc3VwcG9ydGVkQ291bnRyeUlTT3ModmFsdWU6IHN0cmluZ1tdIHwgdW5kZWZpbmVkKSB7XG4gICAgLy8gRW5zdXJlIGFsbCB2YWx1ZXMgYXJlIHRoZSBzYW1lIGNhc2UuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICB2YWx1ZSA9IHZhbHVlLm1hcCgodikgPT4gdi50b0xvd2VyQ2FzZSgpKTtcbiAgICB9XG5cbiAgICB0aGlzLiNfc3VwcG9ydGVkQ291bnRyeUlTT3MgPSB2YWx1ZTtcbiAgICB0aGlzLiNzZXR1cENvdW50cmllcygpO1xuICB9XG5cbiAgcHVibGljIGdldCBzdXBwb3J0ZWRDb3VudHJ5SVNPcygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIHRoaXMuI19zdXBwb3J0ZWRDb3VudHJ5SVNPcyB8fCBbXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGaXJlcyB3aGVuIHRoZSBzZWxlY3RlZCBjb3VudHJ5IGNoYW5nZXMuXG4gICAqL1xuICBAT3V0cHV0KClcbiAgcHVibGljIHNlbGVjdGVkQ291bnRyeUNoYW5nZTogRXZlbnRFbWl0dGVyPFNreUNvdW50cnlGaWVsZENvdW50cnk+ID1cbiAgICBuZXcgRXZlbnRFbWl0dGVyPFNreUNvdW50cnlGaWVsZENvdW50cnk+KCk7XG5cbiAgcHVibGljIGNvdW50cmllczogU2t5Q291bnRyeUZpZWxkQ291bnRyeVtdID0gW107XG5cbiAgcHVibGljIGNvdW50cnlTZWFyY2hGb3JtQ29udHJvbDogVW50eXBlZEZvcm1Db250cm9sO1xuXG4gIHB1YmxpYyBpc0lucHV0Rm9jdXNlZCA9IGZhbHNlO1xuXG4gIHB1YmxpYyBzZWFyY2hUZXh0TWluaW11bUNoYXJhY3RlcnMgPSAyO1xuXG4gIEBWaWV3Q2hpbGQoU2t5QXV0b2NvbXBsZXRlSW5wdXREaXJlY3RpdmUpXG4gIHB1YmxpYyBjb3VudHJ5U2VhcmNoQXV0b2NvbXBsZXRlRGlyZWN0aXZlOlxuICAgIHwgU2t5QXV0b2NvbXBsZXRlSW5wdXREaXJlY3RpdmVcbiAgICB8IHVuZGVmaW5lZDtcblxuICBwdWJsaWMgc2V0IHNlbGVjdGVkQ291bnRyeShuZXdDb3VudHJ5OiBTa3lDb3VudHJ5RmllbGRDb3VudHJ5IHwgdW5kZWZpbmVkKSB7XG4gICAgaWYgKCF0aGlzLiNjb3VudHJpZXNBcmVFcXVhbCh0aGlzLnNlbGVjdGVkQ291bnRyeSwgbmV3Q291bnRyeSkpIHtcbiAgICAgIGNvbnN0IG5ld0NvdW50cnlJc28gPSBuZXdDb3VudHJ5ICYmIG5ld0NvdW50cnkuaXNvMjtcbiAgICAgIGlmIChuZXdDb3VudHJ5SXNvKSB7XG4gICAgICAgIGNvbnN0IGlzb0NvdW50cnkgPSB0aGlzLmNvdW50cmllcy5maW5kKFxuICAgICAgICAgIChjb3VudHJ5KSA9PiBjb3VudHJ5LmlzbzIgPT09IG5ld0NvdW50cnlJc29cbiAgICAgICAgKTtcblxuICAgICAgICBpZiAoaXNvQ291bnRyeSkge1xuICAgICAgICAgIG5ld0NvdW50cnkgPSBpc29Db3VudHJ5O1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHRoaXMuI19zZWxlY3RlZENvdW50cnkgPSBuZXdDb3VudHJ5O1xuXG4gICAgICB0aGlzLiNzb3J0Q291bnRyaWVzV2l0aFNlbGVjdGVkQW5kRGVmYXVsdChuZXdDb3VudHJ5KTtcblxuICAgICAgdGhpcy4jaW50ZXJuYWxGb3JtQ2hhbmdlID0gdHJ1ZTtcbiAgICAgIHRoaXMuY291bnRyeVNlYXJjaEZvcm1Db250cm9sLnNldFZhbHVlKHRoaXMuc2VsZWN0ZWRDb3VudHJ5KTtcblxuICAgICAgaWYgKCF0aGlzLiNpc0luaXRpYWxDaGFuZ2UpIHtcbiAgICAgICAgdGhpcy5vbkNoYW5nZShuZXdDb3VudHJ5KTtcbiAgICAgICAgdGhpcy5vblRvdWNoZWQoKTtcblxuICAgICAgICB0aGlzLnNlbGVjdGVkQ291bnRyeUNoYW5nZS5lbWl0KG5ld0NvdW50cnkpO1xuICAgICAgfVxuXG4gICAgICAvLyBEbyBub3QgbWFyayB0aGUgZmllbGQgYXMgXCJkaXJ0eVwiXG4gICAgICAvLyBpZiB0aGUgZmllbGQgaGFzIGJlZW4gaW5pdGlhbGl6ZWQgd2l0aCBhIHZhbHVlLlxuICAgICAgaWYgKHRoaXMuI2lzSW5pdGlhbENoYW5nZSAmJiB0aGlzLiNuZ0NvbnRyb2wgJiYgdGhpcy4jbmdDb250cm9sLmNvbnRyb2wpIHtcbiAgICAgICAgdGhpcy4jbmdDb250cm9sLmNvbnRyb2wubWFya0FzUHJpc3RpbmUoKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy4jaXNJbml0aWFsQ2hhbmdlID0gZmFsc2U7XG5cbiAgICAgIC8qKlxuICAgICAgICogVGhlIHNlY29uZCBwb3J0aW9uIG9mIHRoaXMgaWYgc3RhdGVtZW50IGlzIGNvbXBsZXguIFRoZSBjb250cm9sIHR5cGUgY2hlY2sgZW5zdXJlcyB0aGF0XG4gICAgICAgKiB3ZSBvbmx5IHdhdGNoIGZvciB0aGUgaW5pdGlhbCB0aW1lIHRocm91Z2ggdGhpcyBmdW5jdGlvbiBvbiByZWFjdGl2ZSBmb3Jtcy4gSG93ZXZlcixcbiAgICAgICAqIHRlbXBsYXRlIGZvcm1zIHdpbGwgc2VuZCB0aHJvdWdoIGBudWxsYCBhbmQgdGhlbiBgdW5kZWZpbmVkYCBvbiBlbXB0eSBpbml0aWFsaXphdGlvblxuICAgICAgICogc28gd2UgaGF2ZSB0byBjaGVjayBmb3Igd2hlbiB0aGUgbm9uLW51bGwgcGFzcyB0aHJvdWdoIGhhcHBlbnMuXG4gICAgICAgKi9cbiAgICB9IGVsc2UgaWYgKFxuICAgICAgdGhpcy4jaXNJbml0aWFsQ2hhbmdlICYmXG4gICAgICAoISh0aGlzLiNuZ0NvbnRyb2wgaW5zdGFuY2VvZiBOZ01vZGVsKSB8fCBuZXdDb3VudHJ5ICE9PSBudWxsKVxuICAgICkge1xuICAgICAgdGhpcy4jaXNJbml0aWFsQ2hhbmdlID0gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGdldCBzZWxlY3RlZENvdW50cnkoKTogU2t5Q291bnRyeUZpZWxkQ291bnRyeSB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuI19zZWxlY3RlZENvdW50cnk7XG4gIH1cblxuICBwdWJsaWMgY29udGV4dDogU2t5Q291bnRyeUZpZWxkQ29udGV4dCB8IG51bGwgPSBpbmplY3QoXG4gICAgU0tZX0NPVU5UUllfRklFTERfQ09OVEVYVCxcbiAgICB7XG4gICAgICBvcHRpb25hbDogdHJ1ZSxcbiAgICB9XG4gICk7XG5cbiAgcHVibGljIGN1cnJlbnRUaGVtZSA9ICdkZWZhdWx0JztcblxuICBwdWJsaWMgaW5wdXRJZDogc3RyaW5nO1xuXG4gIEBWaWV3Q2hpbGQoJ2lucHV0VGVtcGxhdGVSZWYnLCB7XG4gICAgcmVhZDogVGVtcGxhdGVSZWYsXG4gICAgc3RhdGljOiB0cnVlLFxuICB9KVxuICBwdWJsaWMgaW5wdXRUZW1wbGF0ZVJlZjogVGVtcGxhdGVSZWY8dW5rbm93bj4gfCB1bmRlZmluZWQ7XG5cbiAgQFZpZXdDaGlsZCgnc2VhcmNoSWNvblRlbXBsYXRlUmVmJywge1xuICAgIHJlYWQ6IFRlbXBsYXRlUmVmLFxuICAgIHN0YXRpYzogdHJ1ZSxcbiAgfSlcbiAgcHVibGljIHNlYXJjaEljb25UZW1wbGF0ZVJlZjogVGVtcGxhdGVSZWY8dW5rbm93bj4gfCB1bmRlZmluZWQ7XG5cbiAgI2NoYW5nZURldGVjdG9yOiBDaGFuZ2VEZXRlY3RvclJlZjtcblxuICAjZGVmYXVsdENvdW50cnlEYXRhOiBTa3lDb3VudHJ5RmllbGRDb3VudHJ5IHwgdW5kZWZpbmVkO1xuXG4gICNlbFJlZjogRWxlbWVudFJlZjtcblxuICAjaWRsZSA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgI2luamVjdG9yOiBJbmplY3RvcjtcblxuICAjaW50ZXJuYWxGb3JtQ2hhbmdlID0gZmFsc2U7XG5cbiAgI2lzSW5pdGlhbENoYW5nZSA9IHRydWU7XG5cbiAgI25nQ29udHJvbDogTmdDb250cm9sIHwgbnVsbCA9IG51bGw7XG5cbiAgI25nVW5zdWJzY3JpYmUgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gICN0aGVtZVN2YzogU2t5VGhlbWVTZXJ2aWNlIHwgdW5kZWZpbmVkO1xuXG4gICN3aW5kb3dSZWY6IFNreUFwcFdpbmRvd1JlZjtcblxuICAjX2RlZmF1bHRDb3VudHJ5OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgI19kaXNhYmxlZCA9IGZhbHNlO1xuXG4gICNfaGlkZVNlbGVjdGVkQ291bnRyeUZsYWcgPSBmYWxzZTtcblxuICAjX2luY2x1ZGVQaG9uZUluZm8gPSBmYWxzZTtcblxuICAjX3NlbGVjdGVkQ291bnRyeTogU2t5Q291bnRyeUZpZWxkQ291bnRyeSB8IHVuZGVmaW5lZDtcblxuICAjX3N1cHBvcnRlZENvdW50cnlJU09zOiBzdHJpbmdbXSB8IHVuZGVmaW5lZDtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBjaGFuZ2VEZXRlY3RvcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgZWxSZWY6IEVsZW1lbnRSZWYsXG4gICAgd2luZG93UmVmOiBTa3lBcHBXaW5kb3dSZWYsXG4gICAgaW5qZWN0b3I6IEluamVjdG9yLFxuICAgIEBPcHRpb25hbCgpIHB1YmxpYyBpbnB1dEJveEhvc3RTdmM/OiBTa3lJbnB1dEJveEhvc3RTZXJ2aWNlLFxuICAgIEBPcHRpb25hbCgpIHRoZW1lU3ZjPzogU2t5VGhlbWVTZXJ2aWNlXG4gICkge1xuICAgIHRoaXMuI2NoYW5nZURldGVjdG9yID0gY2hhbmdlRGV0ZWN0b3I7XG4gICAgdGhpcy4jZWxSZWYgPSBlbFJlZjtcbiAgICB0aGlzLiN3aW5kb3dSZWYgPSB3aW5kb3dSZWY7XG4gICAgdGhpcy4jaW5qZWN0b3IgPSBpbmplY3RvcjtcbiAgICB0aGlzLiN0aGVtZVN2YyA9IHRoZW1lU3ZjO1xuXG4gICAgdGhpcy5pbnB1dElkID0gYHNreS1jb3VudHJ5LWZpZWxkLWlucHV0LSR7dW5pcXVlSWQrK31gO1xuXG4gICAgdGhpcy4jc2V0dXBDb3VudHJpZXMoKTtcblxuICAgIHRoaXMuY291bnRyeVNlYXJjaEZvcm1Db250cm9sID0gbmV3IFVudHlwZWRGb3JtQ29udHJvbCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFuZ3VsYXIgbGlmZWN5Y2xlIGhvb2sgZm9yIHdoZW4gdGhlIGNvbXBvbmVudCBpcyBpbml0aWFsaXplZFxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLiN1cGRhdGVJbnB1dEJveCgpO1xuXG4gICAgdGhpcy4jbmdDb250cm9sID0gdGhpcy4jaW5qZWN0b3IuZ2V0PE5nQ29udHJvbCB8IG51bGw+KFxuICAgICAgTmdDb250cm9sIGFzIHVua25vd24gYXMgVHlwZTxOZ0NvbnRyb2w+LFxuICAgICAgbnVsbFxuICAgICk7XG5cbiAgICBpZiAodGhpcy4jbmdDb250cm9sKSB7XG4gICAgICB0aGlzLiNuZ0NvbnRyb2wudmFsdWVBY2Nlc3NvciA9IHRoaXM7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8qKlxuICAgICAgICogVGhlIGluaXRpYWwgY2hhbmdlIGJvb2xlYW4gaXMgdG8gZGV0ZXJtaW5lIGlmIHRoZSBmb3JtIGlzIHNldHRpbmcgdGhlIHZhbHVlLiBXaGVuIG5vIGZvcm1cbiAgICAgICAqIGlzIHByZXNlbnQgd2UgZG9uJ3Qgd2FudCB0byBpZ25vcmUgdGhlIGZpcnN0IGNoYW5nZS5cbiAgICAgICAqL1xuICAgICAgdGhpcy4jaXNJbml0aWFsQ2hhbmdlID0gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLmRlZmF1bHRDb3VudHJ5KSB7XG4gICAgICB0aGlzLmRlZmF1bHRDb3VudHJ5ID0gREVGQVVMVF9DT1VOVFJZX0NPREU7XG4gICAgfVxuXG4gICAgdGhpcy5jb3VudHJ5U2VhcmNoRm9ybUNvbnRyb2wudmFsdWVDaGFuZ2VzXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy4jbmdVbnN1YnNjcmliZSkpXG4gICAgICAuc3Vic2NyaWJlKChuZXdWYWx1ZSkgPT4ge1xuICAgICAgICBpZiAobmV3VmFsdWUgJiYgIXRoaXMuI2ludGVybmFsRm9ybUNoYW5nZSkge1xuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRDb3VudHJ5ID0gbmV3VmFsdWU7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgaWYgKCF0aGlzLmRpc2FibGVkKSB7XG4gICAgICB0aGlzLiNhZGRFdmVudExpc3RlbmVycygpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICBpZiAodGhpcy4jdGhlbWVTdmMpIHtcbiAgICAgIHRoaXMuI3RoZW1lU3ZjLnNldHRpbmdzQ2hhbmdlLnN1YnNjcmliZSgoY2hhbmdlKSA9PiB7XG4gICAgICAgIHRoaXMuY3VycmVudFRoZW1lID0gY2hhbmdlLmN1cnJlbnRTZXR0aW5ncy50aGVtZS5uYW1lO1xuICAgICAgICB0aGlzLiN1cGRhdGVJbnB1dEJveCgpO1xuICAgICAgICB0aGlzLiNjaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBBbmd1bGFyIGxpZmVjeWNsZSBob29rIGZvciB3aGVuIHRoZSBjb21wb25lbnQgaXMgZGVzdHJ1Y3RlZC5cbiAgICogQGludGVybmFsXG4gICAqL1xuICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5zZWxlY3RlZENvdW50cnlDaGFuZ2UuY29tcGxldGUoKTtcbiAgICB0aGlzLiNyZW1vdmVFdmVudExpc3RlbmVycygpO1xuICAgIHRoaXMuI25nVW5zdWJzY3JpYmUubmV4dCgpO1xuICAgIHRoaXMuI25nVW5zdWJzY3JpYmUuY29tcGxldGUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBjb21wb25lbnQncyB0b3VjaGVkIHZhbHVlIHdoZW4gdGhlIGF1dG9jb21wbGV0ZSBpcyBibHVycmVkXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgcHVibGljIG9uQXV0b2NvbXBsZXRlQmx1cigpOiB2b2lkIHtcbiAgICB0aGlzLm9uVG91Y2hlZCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIGNvdW50cnkgdG8gdmFsaWRhdGUgYWdhaW5zdCBiYXNlZCBvbiB0aGUgY291bnR5J3MgaXNvMiBjb2RlLlxuICAgKiBAcGFyYW0gbmV3Q291bnRyeSBUaGUgSW50ZXJuYXRpb25hbCBPcmdhbml6YXRpb24gZm9yIFN0YW5kYXJkaXphdGlvbidzIHR3by1sZXR0ZXIgY29kZVxuICAgKiBmb3IgdGhlIGRlZmF1bHQgY291bnRyeS5cbiAgICogQGludGVybmFsXG4gICAqL1xuICBwdWJsaWMgb25Db3VudHJ5U2VsZWN0ZWQobmV3Q291bnRyeTogU2t5QXV0b2NvbXBsZXRlU2VsZWN0aW9uQ2hhbmdlKTogdm9pZCB7XG4gICAgaWYgKG5ld0NvdW50cnkuc2VsZWN0ZWRJdGVtKSB7XG4gICAgICB0aGlzLndyaXRlVmFsdWUoXG4gICAgICAgIHRoaXMuY291bnRyaWVzLmZpbmQoXG4gICAgICAgICAgKGNvdW50cnlJbmZvKSA9PiBjb3VudHJ5SW5mby5pc28yID09PSBuZXdDb3VudHJ5LnNlbGVjdGVkSXRlbS5pc28yXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMud3JpdGVWYWx1ZSh1bmRlZmluZWQpO1xuICAgIH1cbiAgfVxuXG4gIC8vIEFuZ3VsYXIgYXV0b21hdGljYWxseSBjb25zdHJ1Y3RzIHRoZXNlIG1ldGhvZHMuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZW1wdHktZnVuY3Rpb25cbiAgcHVibGljIG9uQ2hhbmdlID0gKHZhbHVlOiBTa3lDb3VudHJ5RmllbGRDb3VudHJ5IHwgdW5kZWZpbmVkKSA9PiB7fTtcblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWVtcHR5LWZ1bmN0aW9uXG4gIHB1YmxpYyBvblRvdWNoZWQgPSAoKSA9PiB7fTtcblxuICBwdWJsaWMgcmVnaXN0ZXJPbkNoYW5nZShcbiAgICBmbjogKHZhbHVlOiBTa3lDb3VudHJ5RmllbGRDb3VudHJ5IHwgdW5kZWZpbmVkKSA9PiB2b2lkXG4gICk6IHZvaWQge1xuICAgIHRoaXMub25DaGFuZ2UgPSBmbjtcbiAgfVxuXG4gIHB1YmxpYyByZWdpc3Rlck9uVG91Y2hlZChmbjogKCkgPT4gdm9pZCk6IHZvaWQge1xuICAgIHRoaXMub25Ub3VjaGVkID0gZm47XG4gIH1cblxuICAvLyBBbGxvd3MgQW5ndWxhciB0byBkaXNhYmxlIHRoZSBpbnB1dC5cbiAgcHVibGljIHNldERpc2FibGVkU3RhdGUoZGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLmRpc2FibGVkID0gZGlzYWJsZWQ7XG4gIH1cblxuICBwdWJsaWMgdmFsaWRhdGUoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwge1xuICAgIGlmIChjb250cm9sLnZhbHVlKSB7XG4gICAgICBpZiAoXG4gICAgICAgICh0aGlzLnN1cHBvcnRlZENvdW50cnlJU09zICYmXG4gICAgICAgICAgdGhpcy5zdXBwb3J0ZWRDb3VudHJ5SVNPcy5sZW5ndGggPiAwICYmXG4gICAgICAgICAgdGhpcy5zdXBwb3J0ZWRDb3VudHJ5SVNPcy5pbmRleE9mKGNvbnRyb2wudmFsdWUuaXNvMikgPCAwKSB8fFxuICAgICAgICAhdGhpcy5jb3VudHJpZXMuZmluZCgoY291bnRyeSkgPT4gY291bnRyeS5pc28yID09PSBjb250cm9sLnZhbHVlLmlzbzIpXG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuIHsgdW5zdXBwb3J0ZWRDb3VudHJ5OiB0cnVlIH07XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBwdWJsaWMgd3JpdGVWYWx1ZSh2YWx1ZTogU2t5Q291bnRyeUZpZWxkQ291bnRyeSB8IHVuZGVmaW5lZCk6IHZvaWQge1xuICAgIHRoaXMuc2VsZWN0ZWRDb3VudHJ5ID0gdmFsdWU7XG4gICAgdGhpcy4jY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICAjYWRkRXZlbnRMaXN0ZW5lcnMoKTogdm9pZCB7XG4gICAgdGhpcy4jcmVtb3ZlRXZlbnRMaXN0ZW5lcnMoKTtcblxuICAgIHRoaXMuI2lkbGUgPSBuZXcgU3ViamVjdCgpO1xuXG4gICAgY29uc3QgZG9jdW1lbnRPYmogPSB0aGlzLiN3aW5kb3dSZWYubmF0aXZlV2luZG93LmRvY3VtZW50O1xuXG4gICAgZnJvbUV2ZW50PE1vdXNlRXZlbnQ+KGRvY3VtZW50T2JqLCAnbW91c2Vkb3duJylcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLiNpZGxlKSlcbiAgICAgIC5zdWJzY3JpYmUoKGV2ZW50KSA9PiB7XG4gICAgICAgIHRoaXMuaXNJbnB1dEZvY3VzZWQgPSB0aGlzLiNlbFJlZi5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKGV2ZW50LnRhcmdldCk7XG4gICAgICAgIHRoaXMuI2NoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpO1xuICAgICAgfSk7XG5cbiAgICBmcm9tRXZlbnQ8S2V5Ym9hcmRFdmVudD4oZG9jdW1lbnRPYmosICdmb2N1c2luJylcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLiNpZGxlKSlcbiAgICAgIC5zdWJzY3JpYmUoKGV2ZW50KSA9PiB7XG4gICAgICAgIHRoaXMuaXNJbnB1dEZvY3VzZWQgPSB0aGlzLiNlbFJlZi5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKGV2ZW50LnRhcmdldCk7XG4gICAgICAgIHRoaXMuI2NoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpO1xuICAgICAgfSk7XG4gIH1cblxuICAjY291bnRyaWVzQXJlRXF1YWwoXG4gICAgY291bnRyeTE6IFNreUNvdW50cnlGaWVsZENvdW50cnkgfCB1bmRlZmluZWQsXG4gICAgY291bnRyeTI6IFNreUNvdW50cnlGaWVsZENvdW50cnkgfCB1bmRlZmluZWRcbiAgKTogYm9vbGVhbiB7XG4gICAgaWYgKGNvdW50cnkxICYmIGNvdW50cnkyKSB7XG4gICAgICByZXR1cm4gY291bnRyeTEuaXNvMiA9PT0gY291bnRyeTIuaXNvMjtcbiAgICB9XG5cbiAgICAvLyBOT1RFOiBXZSBhcmUgZG9pbmcgdGhpcyBpbiAgdGhpcyB3YXkgYmVjYXVzZSB0ZW1wbGF0ZSBmb3JtcyB3aWxsIHNlbmQgdGhyb3VnaCBgbnVsbGBcbiAgICAvLyBhbmQgdGhlbiBgdW5kZWZpbmVkYCBvbiBlbXB0eSBpbml0aWFsaXphdGlvbi4gVGhlc2UgYXJlIGZ1bmN0aW9uYWxseSBlcXVpdmFsZW50IGJ1dCB3aWxsXG4gICAgLy8gbm90IHBhc3MgYSBzdGFuZGFyZCB0cmlwbGUgZXF1YWxzIGNoZWNrLlxuICAgIHJldHVybiAhY291bnRyeTEgJiYgIWNvdW50cnkyO1xuICB9XG5cbiAgI2NvdW50cmllc0VxdWFsKFxuICAgIGE6IFNreUNvdW50cnlGaWVsZENvdW50cnksXG4gICAgYjogU2t5Q291bnRyeUZpZWxkQ291bnRyeVxuICApOiBib29sZWFuIHtcbiAgICByZXR1cm4gYS5pc28yID09PSBiLmlzbzIgJiYgYS5uYW1lID09PSBiLm5hbWU7XG4gIH1cblxuICAjcmVtb3ZlRXZlbnRMaXN0ZW5lcnMoKTogdm9pZCB7XG4gICAgdGhpcy4jaWRsZS5uZXh0KCk7XG4gICAgdGhpcy4jaWRsZS5jb21wbGV0ZSgpO1xuICB9XG5cbiAgI3NldHVwQ291bnRyaWVzKCk6IHZvaWQge1xuICAgIC8qKlxuICAgICAqIFRoZSBqc29uIGZ1bmN0aW9ucyBoZXJlIGVuc3VyZXMgdGhhdCB3ZSBnZXQgYSBjb3B5IG9mIHRoZSBhcnJheSBhbmQgbm90IHRoZSBnbG9iYWwgb3JpZ2luYWwuXG4gICAgICogVGhpcyBlbnN1cmVzIHRoYXQgbXVsdGlwbGUgaW5zdGFuY2VzIG9mIHRoZSBjb21wb25lbnQgZG9uJ3Qgb3ZlcndyaXRlIHRoZSBvcmlnaW5hbCBkYXRhLlxuICAgICAqXG4gICAgICogV2UgbXVzdCB0eXBlIHRoZSB3aW5kb3cgb2JqZWN0IGFzIGFueSBoZXJlIGFzIHRoZSBpbnRsLXRlbC1pbnB1dCBsaWJyYXJ5IGFkZHMgaXRzIG9iamVjdFxuICAgICAqIHRvIHRoZSBtYWluIHdpbmRvdyBvYmplY3QuXG4gICAgICovXG4gICAgdGhpcy5jb3VudHJpZXMgPSBKU09OLnBhcnNlKFxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICAgIEpTT04uc3RyaW5naWZ5KCh3aW5kb3cgYXMgYW55KS5pbnRsVGVsSW5wdXRHbG9iYWxzLmdldENvdW50cnlEYXRhKCkpXG4gICAgKTtcblxuICAgIC8vIElnbm9yaW5nIGNvdmVyYWdlIGhlcmUgYXMgdGhpcyB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIG5leHQgcmVsZWFzZS5cbiAgICAvLyBpc3RhbmJ1bCBpZ25vcmUgbmV4dFxuICAgIGlmICghdGhpcy5pbmNsdWRlUGhvbmVJbmZvICYmICF0aGlzLmhpZGVTZWxlY3RlZENvdW50cnlGbGFnKSB7XG4gICAgICBpZiAoXG4gICAgICAgIChcbiAgICAgICAgICB0aGlzLiNlbFJlZi5uYXRpdmVFbGVtZW50LnBhcmVudEVsZW1lbnQgYXMgSFRNTEVsZW1lbnRcbiAgICAgICAgKT8uY2xhc3NMaXN0Py5jb250YWlucygnc2t5LXBob25lLWZpZWxkLWNvdW50cnktc2VhcmNoJylcbiAgICAgICkge1xuICAgICAgICB0aGlzLmluY2x1ZGVQaG9uZUluZm8gPSB0cnVlO1xuICAgICAgICB0aGlzLmhpZGVTZWxlY3RlZENvdW50cnlGbGFnID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgIGlmICghdGhpcy5pbmNsdWRlUGhvbmVJbmZvKSB7XG4gICAgICAvKipcbiAgICAgICAqIFRoZSBsaWJyYXJ5IHdlIGdldCB0aGUgY291bnRyeSBkYXRhIGZyb20gaW5jbHVkZXMgZXh0cmEgcGhvbmUgcHJvcGVydGllcy5cbiAgICAgICAqIFdlIHdhbnQgdG8gcmVtb3ZlIHRoZXNlIHVubGVzcyB3ZSBhcmUgaW4gYSBwaG9uZSBmaWVsZFxuICAgICAgICovXG4gICAgICB0aGlzLmNvdW50cmllcy5mb3JFYWNoKChjb3VudHJ5KSA9PiB7XG4gICAgICAgIGRlbGV0ZSBjb3VudHJ5LmRpYWxDb2RlO1xuICAgICAgICBkZWxldGUgY291bnRyeS5hcmVhQ29kZXM7XG4gICAgICAgIGRlbGV0ZSBjb3VudHJ5LnByaW9yaXR5O1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgdGhpcy4jc29ydENvdW50cmllc1dpdGhTZWxlY3RlZEFuZERlZmF1bHQodGhpcy5zZWxlY3RlZENvdW50cnkpO1xuXG4gICAgaWYgKHRoaXMuc3VwcG9ydGVkQ291bnRyeUlTT3MgJiYgdGhpcy5zdXBwb3J0ZWRDb3VudHJ5SVNPcy5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLmNvdW50cmllcyA9IHRoaXMuY291bnRyaWVzLmZpbHRlcihcbiAgICAgICAgKGNvdW50cnk6IFNreUNvdW50cnlGaWVsZENvdW50cnkpID0+IHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5zdXBwb3J0ZWRDb3VudHJ5SVNPcy5pbmRleE9mKGNvdW50cnkuaXNvMikgPj0gMDtcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICAjc29ydENvdW50cmllc1dpdGhTZWxlY3RlZEFuZERlZmF1bHQoXG4gICAgc2VsZWN0ZWRDb3VudHJ5OiBTa3lDb3VudHJ5RmllbGRDb3VudHJ5IHwgdW5kZWZpbmVkXG4gICk6IHZvaWQge1xuICAgIGxldCBzZWxlY3RlZENvdW50cnlJbmRleDogbnVtYmVyO1xuICAgIGxldCBzZWxlY3RlZENvdW50cnlEYXRhOiBTa3lDb3VudHJ5RmllbGRDb3VudHJ5O1xuXG4gICAgY29uc3Qgc29ydGVkTmV3Q291bnRyaWVzID0gdGhpcy5jb3VudHJpZXMuc29ydCgoYSwgYikgPT4ge1xuICAgICAgaWYgKFxuICAgICAgICAoKHRoaXMuI2RlZmF1bHRDb3VudHJ5RGF0YSAmJlxuICAgICAgICAgIHRoaXMuI2NvdW50cmllc0VxdWFsKGEsIHRoaXMuI2RlZmF1bHRDb3VudHJ5RGF0YSkpIHx8XG4gICAgICAgICAgKGEubmFtZSAmJiBiLm5hbWUgJiYgYS5uYW1lIDwgYi5uYW1lKSkgJiZcbiAgICAgICAgKCF0aGlzLiNkZWZhdWx0Q291bnRyeURhdGEgfHxcbiAgICAgICAgICAhdGhpcy4jY291bnRyaWVzRXF1YWwodGhpcy4jZGVmYXVsdENvdW50cnlEYXRhLCBiKSlcbiAgICAgICkge1xuICAgICAgICByZXR1cm4gLTE7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gMTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGlmIChzZWxlY3RlZENvdW50cnkpIHtcbiAgICAgIC8vIE5vdGU6IFdlIGFyZSBsb29raW5nIHVwIHRoaXMgZGF0YSBoZXJlIHRvIGVuc3VyZSB3ZSBhcmUgdXNpbmcgdGhlIG9mZmljaWFsIGRhdGEgZnJvbSB0aGVcbiAgICAgIC8vIGxpYnJhcnkgYW5kIG5vdCB0aGUgZGF0YSBwcm92aWRlZCBieSB0aGUgdXNlciBvbiBpbml0aWFsaXphdGlvbiBvZiB0aGUgY29tcG9uZW50XG4gICAgICBjb25zdCBmb3VuZENvdW50cnkgPSB0aGlzLmNvdW50cmllcy5maW5kKFxuICAgICAgICAoY291bnRyeSkgPT4gY291bnRyeS5pc28yID09PSBzZWxlY3RlZENvdW50cnkuaXNvMi50b0xvY2FsZUxvd2VyQ2FzZSgpXG4gICAgICApO1xuXG4gICAgICBpZiAoZm91bmRDb3VudHJ5KSB7XG4gICAgICAgIHNlbGVjdGVkQ291bnRyeURhdGEgPSBmb3VuZENvdW50cnk7XG4gICAgICAgIHNlbGVjdGVkQ291bnRyeUluZGV4ID0gdGhpcy5jb3VudHJpZXMuaW5kZXhPZihzZWxlY3RlZENvdW50cnlEYXRhKTtcblxuICAgICAgICBpZiAoc2VsZWN0ZWRDb3VudHJ5SW5kZXggPj0gMCkge1xuICAgICAgICAgIHRoaXMuY291bnRyaWVzLnNwbGljZShzZWxlY3RlZENvdW50cnlJbmRleCwgMSk7XG4gICAgICAgICAgc29ydGVkTmV3Q291bnRyaWVzLnNwbGljZSgwLCAwLCBzZWxlY3RlZENvdW50cnlEYXRhKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuY291bnRyaWVzID0gc29ydGVkTmV3Q291bnRyaWVzO1xuICB9XG5cbiAgI3VwZGF0ZUlucHV0Qm94KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmlucHV0Qm94SG9zdFN2YyAmJiB0aGlzLmlucHV0VGVtcGxhdGVSZWYpIHtcbiAgICAgIHRoaXMuaW5wdXRCb3hIb3N0U3ZjLnBvcHVsYXRlKHtcbiAgICAgICAgaW5wdXRUZW1wbGF0ZTogdGhpcy5pbnB1dFRlbXBsYXRlUmVmLFxuICAgICAgICBpY29uc0luc2V0VGVtcGxhdGU6XG4gICAgICAgICAgdGhpcy5jdXJyZW50VGhlbWUgPT09ICdtb2Rlcm4nXG4gICAgICAgICAgICA/IHRoaXMuc2VhcmNoSWNvblRlbXBsYXRlUmVmXG4gICAgICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxufVxuIiwiPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFpbnB1dEJveEhvc3RTdmNcIj5cbiAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImlucHV0VGVtcGxhdGVSZWZcIj48L25nLWNvbnRhaW5lcj5cbjwvbmctY29udGFpbmVyPlxuXG48bmctdGVtcGxhdGUgI2lucHV0VGVtcGxhdGVSZWY+XG4gIDxzcGFuXG4gICAgY2xhc3M9XCJza3ktY291bnRyeS1maWVsZC1jb250YWluZXJcIlxuICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICdza3ktY291bnRyeS1maWVsZC1kaXNhYmxlZCc6IGRpc2FibGVkXG4gICAgfVwiXG4gID5cbiAgICA8c2t5LWF1dG9jb21wbGV0ZVxuICAgICAgW2FyaWFMYWJlbGxlZEJ5XT1cImlucHV0SWRcIlxuICAgICAgW2RhdGFdPVwiY291bnRyaWVzXCJcbiAgICAgIFtwcm9wZXJ0aWVzVG9TZWFyY2hdPVwiWyduYW1lJywgJ2lzbzInXVwiXG4gICAgICBbc2VhcmNoUmVzdWx0VGVtcGxhdGVdPVwiY291bnRyeVNlYXJjaFJlc3VsdFRlbXBsYXRlXCJcbiAgICAgIFtzZWFyY2hUZXh0TWluaW11bUNoYXJhY3RlcnNdPVwic2VhcmNoVGV4dE1pbmltdW1DaGFyYWN0ZXJzXCJcbiAgICAgIChzZWxlY3Rpb25DaGFuZ2UpPVwib25Db3VudHJ5U2VsZWN0ZWQoJGV2ZW50KVwiXG4gICAgPlxuICAgICAgPGRpdlxuICAgICAgICBjbGFzcz1cInNreS1jb3VudHJ5LWZpZWxkLWlucHV0XCJcbiAgICAgICAgW25nQ2xhc3NdPVwie1xuICAgICAgICAgICdza3ktY291bnRyeS1maWVsZC1pbnB1dC13aXRoLWZsYWcnOlxuICAgICAgICAgICAgc2VsZWN0ZWRDb3VudHJ5ICYmIHNlbGVjdGVkQ291bnRyeS5pc28yICYmICFoaWRlU2VsZWN0ZWRDb3VudHJ5RmxhZ1xuICAgICAgICB9XCJcbiAgICAgID5cbiAgICAgICAgPGRpdlxuICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICBzZWxlY3RlZENvdW50cnkgJiYgc2VsZWN0ZWRDb3VudHJ5LmlzbzIgJiYgIWhpZGVTZWxlY3RlZENvdW50cnlGbGFnXG4gICAgICAgICAgXCJcbiAgICAgICAgICBjbGFzcz1cInNreS1jb3VudHJ5LWZpZWxkLWZsYWdcIlxuICAgICAgICA+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3M9XCJpdGlfX2ZsYWdcIlxuICAgICAgICAgICAgW25nQ2xhc3NdPVwiJ2l0aV9fJyArIHNlbGVjdGVkQ291bnRyeS5pc28yLnRvTG93ZXJDYXNlKClcIlxuICAgICAgICAgID48L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDx0ZXh0YXJlYVxuICAgICAgICAgIGNsYXNzPVwic2t5LWZvcm0tY29udHJvbFwiXG4gICAgICAgICAgbmFtZT1cInNlbGVjdGVkQ291bnRyeVwiXG4gICAgICAgICAgcm93cz1cIjFcIlxuICAgICAgICAgIHNreUF1dG9jb21wbGV0ZVxuICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiXG4gICAgICAgICAgICAnc2t5dXhfY291bnRyeV9maWVsZF9zZWFyY2hfcGxhY2Vob2xkZXInIHwgc2t5TGliUmVzb3VyY2VzXG4gICAgICAgICAgXCJcbiAgICAgICAgICBbYXR0ci5pZF09XCJpbnB1dElkXCJcbiAgICAgICAgICBbYXV0b2NvbXBsZXRlQXR0cmlidXRlXT1cImF1dG9jb21wbGV0ZUF0dHJpYnV0ZVwiXG4gICAgICAgICAgW2Zvcm1Db250cm9sXT1cImNvdW50cnlTZWFyY2hGb3JtQ29udHJvbFwiXG4gICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIlxuICAgICAgICAgICAgY29udGV4dD8uc2hvd1BsYWNlaG9sZGVyVGV4dCB8fCBjdXJyZW50VGhlbWUgPT09ICdkZWZhdWx0J1xuICAgICAgICAgICAgICA/ICgnc2t5dXhfY291bnRyeV9maWVsZF9zZWFyY2hfcGxhY2Vob2xkZXInIHwgc2t5TGliUmVzb3VyY2VzKVxuICAgICAgICAgICAgICA6ICcnXG4gICAgICAgICAgXCJcbiAgICAgICAgICAoYmx1cik9XCJvbkF1dG9jb21wbGV0ZUJsdXIoKVwiXG4gICAgICAgID48L3RleHRhcmVhPlxuICAgICAgPC9kaXY+XG4gICAgPC9za3ktYXV0b2NvbXBsZXRlPlxuICA8L3NwYW4+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgbGV0LWl0ZW09XCJpdGVtXCIgI2NvdW50cnlTZWFyY2hSZXN1bHRUZW1wbGF0ZT5cbiAgPGRpdlxuICAgIGNsYXNzPVwic2t5LWNvdW50cnktZmllbGQtc2VhcmNoLXJlc3VsdC1mbGFnXCJcbiAgICBbbmdDbGFzc109XCInaXRpX19mbGFnIGl0aV9fJyArIGl0ZW0uaXNvMi50b0xvd2VyQ2FzZSgpXCJcbiAgPjwvZGl2PlxuICB7eyBpdGVtLm5hbWUgfX1cbiAgPHNwYW4gKm5nSWY9XCJpbmNsdWRlUGhvbmVJbmZvXCIgY2xhc3M9XCJza3ktZGVlbXBoYXNpemVkXCI+XG4gICAge3sgaXRlbS5kaWFsQ29kZSB9fVxuICA8L3NwYW4+XG48L25nLXRlbXBsYXRlPlxuXG48IS0tIFRoaXMgdGVtcGxhdGUgc2hvdWxkIG9ubHkgYmUgdXNlZCBpbiBtb2Rlcm4gdGhlbWUgaW5wdXQgYm94ZXMuIC0tPlxuPG5nLXRlbXBsYXRlICNzZWFyY2hJY29uVGVtcGxhdGVSZWY+XG4gIDxkaXYgY2xhc3M9XCJza3ktaW5wdXQtZ3JvdXAtaWNvbiBza3ktaW5wdXQtYm94LWljb24taW5zZXRcIj5cbiAgICA8c2t5LWljb24gaWNvblR5cGU9XCJza3l1eFwiIGljb249XCJzZWFyY2hcIj48L3NreS1pY29uPlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
433
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY291bnRyeS1maWVsZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvbG9va3VwL3NyYy9saWIvbW9kdWxlcy9jb3VudHJ5LWZpZWxkL2NvdW50cnktZmllbGQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21wb25lbnRzL2xvb2t1cC9zcmMvbGliL21vZHVsZXMvY291bnRyeS1maWVsZC9jb3VudHJ5LWZpZWxkLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsT0FBTyxFQUVMLHVCQUF1QixFQUV2QixTQUFTLEVBRVQsWUFBWSxFQUVaLEtBQUssRUFHTCxRQUFRLEVBQ1IsTUFBTSxFQUNOLFdBQVcsRUFFWCxTQUFTLEVBQ1QsVUFBVSxFQUNWLE1BQU0sR0FDUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBR0wsYUFBYSxFQUNiLFNBQVMsRUFDVCxPQUFPLEVBQ1Asa0JBQWtCLEdBR25CLE1BQU0sZ0JBQWdCLENBQUM7QUFLeEIsT0FBTyxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMxQyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFM0MsT0FBTyxFQUFFLDZCQUE2QixFQUFFLE1BQU0sOENBQThDLENBQUM7QUFLN0YsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0scUNBQXFDLENBQUM7Ozs7Ozs7Ozs7O0FBRWhGLE1BQU0sb0JBQW9CLEdBQUcsSUFBSSxDQUFDO0FBRWxDLE1BQU0sMkJBQTJCLEdBQUc7SUFDbEMsT0FBTyxFQUFFLGFBQWE7SUFDdEIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyx3QkFBd0IsQ0FBQztJQUN2RCxLQUFLLEVBQUUsSUFBSTtDQUNaLENBQUM7QUFFRixJQUFJLFFBQVEsR0FBRyxDQUFDLENBQUM7QUFTakIsTUFBTSxPQUFPLHdCQUF3QjtJQVNuQzs7Ozs7T0FLRztJQUNILElBQ1csY0FBYyxDQUFDLEtBQXlCO1FBQ2pELElBQUksQ0FBQyxLQUFLLEVBQUU7WUFDVixLQUFLLEdBQUcsb0JBQW9CLENBQUM7U0FDOUI7UUFFRCxJQUFJLEtBQUssS0FBSyx1QkFBQSxJQUFJLGlEQUFpQixFQUFFO1lBQ25DLHVCQUFBLElBQUksNkNBQW9CLEtBQUssQ0FBQyxXQUFXLEVBQUUsTUFBQSxDQUFDO1lBRTVDLHVCQUFBLElBQUksZ0RBQXVCLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUM1QyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksS0FBSyx1QkFBQSxJQUFJLGlEQUFpQixDQUNwRCxNQUFBLENBQUM7WUFFRix1QkFBQSxJQUFJLDBHQUFxQyxNQUF6QyxJQUFJLEVBQXNDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztTQUNqRTtJQUNILENBQUM7SUFFRCxJQUFXLGNBQWM7UUFDdkIsT0FBTyx1QkFBQSxJQUFJLGlEQUFpQixDQUFDO0lBQy9CLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsSUFDVyxRQUFRLENBQUMsVUFBK0I7UUFDakQsdUJBQUEsSUFBSSwyRkFBc0IsTUFBMUIsSUFBSSxDQUF3QixDQUFDO1FBRTdCLElBQUksQ0FBQyxVQUFVLEVBQUU7WUFDZix1QkFBQSxJQUFJLHdGQUFtQixNQUF2QixJQUFJLENBQXFCLENBQUM7U0FDM0I7UUFFRCx1QkFBQSxJQUFJLHVDQUFjLFVBQVUsSUFBSSxLQUFLLE1BQUEsQ0FBQztRQUV0QyxJQUFJLFVBQVUsRUFBRTtZQUNkLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxPQUFPLEVBQUUsQ0FBQztTQUN6QzthQUFNO1lBQ0wsSUFBSSxDQUFDLHdCQUF3QixDQUFDLE1BQU0sRUFBRSxDQUFDO1NBQ3hDO1FBRUQsdUJBQUEsSUFBSSxnREFBZ0IsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUN0QyxDQUFDO0lBRUQsSUFBVyxRQUFRO1FBQ2pCLE9BQU8sdUJBQUEsSUFBSSwyQ0FBVyxDQUFDO0lBQ3pCLENBQUM7SUFFRDs7O09BR0c7SUFDSCxJQUNXLHVCQUF1QixDQUFDLEtBQTBCO1FBQzNELHVCQUFBLElBQUksc0RBQTZCLEtBQUssSUFBSSxLQUFLLE1BQUEsQ0FBQztJQUNsRCxDQUFDO0lBRUQsSUFBVyx1QkFBdUI7UUFDaEMsT0FBTyx1QkFBQSxJQUFJLDBEQUEwQixDQUFDO0lBQ3hDLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsSUFDVyxnQkFBZ0IsQ0FBQyxLQUEwQjtRQUNwRCx1QkFBQSxJQUFJLCtDQUFzQixLQUFLLElBQUksS0FBSyxNQUFBLENBQUM7UUFFekMsdUJBQUEsSUFBSSxxRkFBZ0IsTUFBcEIsSUFBSSxDQUFrQixDQUFDO0lBQ3pCLENBQUM7SUFFRCxJQUFXLGdCQUFnQjtRQUN6QixPQUFPLHVCQUFBLElBQUksbURBQW1CLENBQUM7SUFDakMsQ0FBQztJQUVEOzs7T0FHRztJQUNILElBQ1csb0JBQW9CLENBQUMsS0FBMkI7UUFDekQsdUNBQXVDO1FBQ3ZDLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUN4QixLQUFLLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7U0FDM0M7UUFFRCx1QkFBQSxJQUFJLG1EQUEwQixLQUFLLE1BQUEsQ0FBQztRQUNwQyx1QkFBQSxJQUFJLHFGQUFnQixNQUFwQixJQUFJLENBQWtCLENBQUM7SUFDekIsQ0FBQztJQUVELElBQVcsb0JBQW9CO1FBQzdCLE9BQU8sdUJBQUEsSUFBSSx1REFBdUIsSUFBSSxFQUFFLENBQUM7SUFDM0MsQ0FBQztJQXNCRCxJQUFXLGVBQWUsQ0FBQyxVQUE4QztRQUN2RSxJQUFJLENBQUMsdUJBQUEsSUFBSSx3RkFBbUIsTUFBdkIsSUFBSSxFQUFvQixJQUFJLENBQUMsZUFBZSxFQUFFLFVBQVUsQ0FBQyxFQUFFO1lBQzlELE1BQU0sYUFBYSxHQUFHLFVBQVUsSUFBSSxVQUFVLENBQUMsSUFBSSxDQUFDO1lBQ3BELElBQUksYUFBYSxFQUFFO2dCQUNqQixNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FDcEMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEtBQUssYUFBYSxDQUM1QyxDQUFDO2dCQUVGLElBQUksVUFBVSxFQUFFO29CQUNkLFVBQVUsR0FBRyxVQUFVLENBQUM7aUJBQ3pCO2FBQ0Y7WUFFRCx1QkFBQSxJQUFJLDhDQUFxQixVQUFVLE1BQUEsQ0FBQztZQUVwQyx1QkFBQSxJQUFJLDBHQUFxQyxNQUF6QyxJQUFJLEVBQXNDLFVBQVUsQ0FBQyxDQUFDO1lBRXRELHVCQUFBLElBQUksZ0RBQXVCLElBQUksTUFBQSxDQUFDO1lBQ2hDLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1lBRTdELElBQUksQ0FBQyx1QkFBQSxJQUFJLGlEQUFpQixFQUFFO2dCQUMxQixJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUFDO2dCQUMxQixJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7Z0JBRWpCLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7YUFDN0M7WUFFRCxtQ0FBbUM7WUFDbkMsa0RBQWtEO1lBQ2xELElBQUksdUJBQUEsSUFBSSxpREFBaUIsSUFBSSx1QkFBQSxJQUFJLDJDQUFXLElBQUksdUJBQUEsSUFBSSwyQ0FBVyxDQUFDLE9BQU8sRUFBRTtnQkFDdkUsdUJBQUEsSUFBSSwyQ0FBVyxDQUFDLE9BQU8sQ0FBQyxjQUFjLEVBQUUsQ0FBQzthQUMxQztZQUVELHVCQUFBLElBQUksNkNBQW9CLEtBQUssTUFBQSxDQUFDO1lBRTlCOzs7OztlQUtHO1NBQ0o7YUFBTSxJQUNMLHVCQUFBLElBQUksaURBQWlCO1lBQ3JCLENBQUMsQ0FBQyxDQUFDLHVCQUFBLElBQUksMkNBQVcsWUFBWSxPQUFPLENBQUMsSUFBSSxVQUFVLEtBQUssSUFBSSxDQUFDLEVBQzlEO1lBQ0EsdUJBQUEsSUFBSSw2Q0FBb0IsS0FBSyxNQUFBLENBQUM7U0FDL0I7SUFDSCxDQUFDO0lBRUQsSUFBVyxlQUFlO1FBQ3hCLE9BQU8sdUJBQUEsSUFBSSxrREFBa0IsQ0FBQztJQUNoQyxDQUFDO0lBMkRELFlBQ0UsY0FBaUMsRUFDakMsS0FBaUIsRUFDakIsU0FBMEIsRUFDMUIsUUFBa0IsRUFDQyxlQUF3QyxFQUMvQyxRQUEwQjtRQURuQixvQkFBZSxHQUFmLGVBQWUsQ0FBeUI7O1FBdkk3RDs7V0FFRztRQUVJLDBCQUFxQixHQUMxQixJQUFJLFlBQVksRUFBMEIsQ0FBQztRQUV0QyxjQUFTLEdBQTZCLEVBQUUsQ0FBQztRQUl6QyxtQkFBYyxHQUFHLEtBQUssQ0FBQztRQUV2QixnQ0FBMkIsR0FBRyxDQUFDLENBQUM7UUE0RGhDLFlBQU8sR0FBa0MsTUFBTSxDQUNwRCx5QkFBeUIsRUFDekI7WUFDRSxRQUFRLEVBQUUsSUFBSTtTQUNmLENBQ0YsQ0FBQztRQUVLLGlCQUFZLEdBQUcsU0FBUyxDQUFDO1FBZ0JoQywyREFBbUM7UUFFbkMsK0RBQXdEO1FBRXhELGtEQUFtQjtRQUVuQix5Q0FBUSxJQUFJLE9BQU8sRUFBUSxFQUFDO1FBRTVCLHFEQUFvQjtRQUVwQix1REFBc0IsS0FBSyxFQUFDO1FBRTVCLG9EQUFtQixJQUFJLEVBQUM7UUFFeEIsOENBQStCLElBQUksRUFBQztRQUVwQyxrREFBaUIsSUFBSSxPQUFPLEVBQVEsRUFBQztRQUVyQyxxREFBdUM7UUFFdkMsc0RBQTRCO1FBRTVCLDREQUFxQztRQUVyQyw4Q0FBYSxLQUFLLEVBQUM7UUFFbkIsNkRBQTRCLEtBQUssRUFBQztRQUVsQyxzREFBcUIsS0FBSyxFQUFDO1FBRTNCLDZEQUFzRDtRQUV0RCxrRUFBNkM7UUE4RzdDLGtEQUFrRDtRQUNsRCxnRUFBZ0U7UUFDekQsYUFBUSxHQUFHLENBQUMsS0FBeUMsRUFBRSxFQUFFLEdBQUUsQ0FBQyxDQUFDO1FBRXBFLGdFQUFnRTtRQUN6RCxjQUFTLEdBQUcsR0FBRyxFQUFFLEdBQUUsQ0FBQyxDQUFDO1FBekcxQix1QkFBQSxJQUFJLDRDQUFtQixjQUFjLE1BQUEsQ0FBQztRQUN0Qyx1QkFBQSxJQUFJLG1DQUFVLEtBQUssTUFBQSxDQUFDO1FBQ3BCLHVCQUFBLElBQUksdUNBQWMsU0FBUyxNQUFBLENBQUM7UUFDNUIsdUJBQUEsSUFBSSxzQ0FBYSxRQUFRLE1BQUEsQ0FBQztRQUMxQix1QkFBQSxJQUFJLHNDQUFhLFFBQVEsTUFBQSxDQUFDO1FBRTFCLElBQUksQ0FBQyxPQUFPLEdBQUcsMkJBQTJCLFFBQVEsRUFBRSxFQUFFLENBQUM7UUFFdkQsdUJBQUEsSUFBSSxxRkFBZ0IsTUFBcEIsSUFBSSxDQUFrQixDQUFDO1FBRXZCLElBQUksQ0FBQyx3QkFBd0IsR0FBRyxJQUFJLGtCQUFrQixFQUFFLENBQUM7SUFDM0QsQ0FBQztJQUVEOzs7T0FHRztJQUNJLFFBQVE7UUFDYix1QkFBQSxJQUFJLHFGQUFnQixNQUFwQixJQUFJLENBQWtCLENBQUM7UUFFdkIsdUJBQUEsSUFBSSx1Q0FBYyx1QkFBQSxJQUFJLDBDQUFVLENBQUMsR0FBRyxDQUNsQyxTQUF1QyxFQUN2QyxJQUFJLENBQ0wsTUFBQSxDQUFDO1FBRUYsSUFBSSx1QkFBQSxJQUFJLDJDQUFXLEVBQUU7WUFDbkIsdUJBQUEsSUFBSSwyQ0FBVyxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUM7U0FDdEM7YUFBTTtZQUNMOzs7ZUFHRztZQUNILHVCQUFBLElBQUksNkNBQW9CLEtBQUssTUFBQSxDQUFDO1NBQy9CO1FBRUQsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUU7WUFDeEIsSUFBSSxDQUFDLGNBQWMsR0FBRyxvQkFBb0IsQ0FBQztTQUM1QztRQUVELElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxZQUFZO2FBQ3ZDLElBQUksQ0FBQyxTQUFTLENBQUMsdUJBQUEsSUFBSSwrQ0FBZSxDQUFDLENBQUM7YUFDcEMsU0FBUyxDQUFDLENBQUMsUUFBUSxFQUFFLEVBQUU7WUFDdEIsSUFBSSxRQUFRLElBQUksQ0FBQyx1QkFBQSxJQUFJLG9EQUFvQixFQUFFO2dCQUN6QyxJQUFJLENBQUMsZUFBZSxHQUFHLFFBQVEsQ0FBQzthQUNqQztRQUNILENBQUMsQ0FBQyxDQUFDO1FBRUwsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDbEIsdUJBQUEsSUFBSSx3RkFBbUIsTUFBdkIsSUFBSSxDQUFxQixDQUFDO1NBQzNCO0lBQ0gsQ0FBQztJQUVNLGVBQWU7UUFDcEIsMEJBQTBCO1FBQzFCLElBQUksdUJBQUEsSUFBSSwwQ0FBVSxFQUFFO1lBQ2xCLHVCQUFBLElBQUksMENBQVUsQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUU7Z0JBQ2pELElBQUksQ0FBQyxZQUFZLEdBQUcsTUFBTSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDO2dCQUN0RCx1QkFBQSxJQUFJLHFGQUFnQixNQUFwQixJQUFJLENBQWtCLENBQUM7Z0JBQ3ZCLHVCQUFBLElBQUksZ0RBQWdCLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDdEMsQ0FBQyxDQUFDLENBQUM7U0FDSjtJQUNILENBQUM7SUFFRDs7O09BR0c7SUFDSSxXQUFXO1FBQ2hCLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUN0Qyx1QkFBQSxJQUFJLDJGQUFzQixNQUExQixJQUFJLENBQXdCLENBQUM7UUFDN0IsdUJBQUEsSUFBSSwrQ0FBZSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQzNCLHVCQUFBLElBQUksK0NBQWUsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUNqQyxDQUFDO0lBRUQ7OztPQUdHO0lBQ0ksa0JBQWtCO1FBQ3ZCLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztJQUNuQixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSSxpQkFBaUIsQ0FBQyxVQUEwQztRQUNqRSxJQUFJLFVBQVUsQ0FBQyxZQUFZLEVBQUU7WUFDM0IsSUFBSSxDQUFDLFVBQVUsQ0FDYixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FDakIsQ0FBQyxXQUFXLEVBQUUsRUFBRSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEtBQUssVUFBVSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQ25FLENBQ0YsQ0FBQztTQUNIO2FBQU07WUFDTCxJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1NBQzVCO0lBQ0gsQ0FBQztJQVNNLGdCQUFnQixDQUNyQixFQUF1RDtRQUV2RCxJQUFJLENBQUMsUUFBUSxHQUFHLEVBQUUsQ0FBQztJQUNyQixDQUFDO0lBRU0saUJBQWlCLENBQUMsRUFBYztRQUNyQyxJQUFJLENBQUMsU0FBUyxHQUFHLEVBQUUsQ0FBQztJQUN0QixDQUFDO0lBRUQsdUNBQXVDO0lBQ2hDLGdCQUFnQixDQUFDLFFBQWlCO1FBQ3ZDLElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO0lBQzNCLENBQUM7SUFFTSxRQUFRLENBQUMsT0FBd0I7UUFDdEMsSUFBSSxPQUFPLENBQUMsS0FBSyxFQUFFO1lBQ2pCLElBQ0UsQ0FBQyxJQUFJLENBQUMsb0JBQW9CO2dCQUN4QixJQUFJLENBQUMsb0JBQW9CLENBQUMsTUFBTSxHQUFHLENBQUM7Z0JBQ3BDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQzVELENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEtBQUssT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFDdEU7Z0JBQ0EsT0FBTyxFQUFFLGtCQUFrQixFQUFFLElBQUksRUFBRSxDQUFDO2FBQ3JDO1NBQ0Y7UUFFRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFTSxVQUFVLENBQUMsS0FBeUM7UUFDekQsSUFBSSxDQUFDLGVBQWUsR0FBRyxLQUFLLENBQUM7UUFDN0IsdUJBQUEsSUFBSSxnREFBZ0IsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUN0QyxDQUFDOzs7SUFHQyx1QkFBQSxJQUFJLDJGQUFzQixNQUExQixJQUFJLENBQXdCLENBQUM7SUFFN0IsdUJBQUEsSUFBSSxrQ0FBUyxJQUFJLE9BQU8sRUFBRSxNQUFBLENBQUM7SUFFM0IsTUFBTSxXQUFXLEdBQUcsdUJBQUEsSUFBSSwyQ0FBVyxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUM7SUFFMUQsU0FBUyxDQUFhLFdBQVcsRUFBRSxXQUFXLENBQUM7U0FDNUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyx1QkFBQSxJQUFJLHNDQUFNLENBQUMsQ0FBQztTQUMzQixTQUFTLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtRQUNuQixJQUFJLENBQUMsY0FBYyxHQUFHLHVCQUFBLElBQUksdUNBQU8sQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN2RSx1QkFBQSxJQUFJLGdEQUFnQixDQUFDLFlBQVksRUFBRSxDQUFDO0lBQ3RDLENBQUMsQ0FBQyxDQUFDO0lBRUwsU0FBUyxDQUFnQixXQUFXLEVBQUUsU0FBUyxDQUFDO1NBQzdDLElBQUksQ0FBQyxTQUFTLENBQUMsdUJBQUEsSUFBSSxzQ0FBTSxDQUFDLENBQUM7U0FDM0IsU0FBUyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7UUFDbkIsSUFBSSxDQUFDLGNBQWMsR0FBRyx1QkFBQSxJQUFJLHVDQUFPLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDdkUsdUJBQUEsSUFBSSxnREFBZ0IsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUN0QyxDQUFDLENBQUMsQ0FBQztBQUNQLENBQUMscUdBR0MsUUFBNEMsRUFDNUMsUUFBNEM7SUFFNUMsSUFBSSxRQUFRLElBQUksUUFBUSxFQUFFO1FBQ3hCLE9BQU8sUUFBUSxDQUFDLElBQUksS0FBSyxRQUFRLENBQUMsSUFBSSxDQUFDO0tBQ3hDO0lBRUQsdUZBQXVGO0lBQ3ZGLDJGQUEyRjtJQUMzRiwyQ0FBMkM7SUFDM0MsT0FBTyxDQUFDLFFBQVEsSUFBSSxDQUFDLFFBQVEsQ0FBQztBQUNoQyxDQUFDLCtGQUdDLENBQXlCLEVBQ3pCLENBQXlCO0lBRXpCLE9BQU8sQ0FBQyxDQUFDLElBQUksS0FBSyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQztBQUNoRCxDQUFDO0lBR0MsdUJBQUEsSUFBSSxzQ0FBTSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ2xCLHVCQUFBLElBQUksc0NBQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQztBQUN4QixDQUFDO0lBR0M7Ozs7OztPQU1HO0lBQ0gsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsS0FBSztJQUN6Qiw4REFBOEQ7SUFDOUQsSUFBSSxDQUFDLFNBQVMsQ0FBRSxNQUFjLENBQUMsbUJBQW1CLENBQUMsY0FBYyxFQUFFLENBQUMsQ0FDckUsQ0FBQztJQUVGLHNFQUFzRTtJQUN0RSx1QkFBdUI7SUFDdkIsSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsSUFBSSxDQUFDLElBQUksQ0FBQyx1QkFBdUIsRUFBRTtRQUMzRCxJQUVJLHVCQUFBLElBQUksdUNBQU8sQ0FBQyxhQUFhLENBQUMsYUFDM0IsRUFBRSxTQUFTLEVBQUUsUUFBUSxDQUFDLGdDQUFnQyxDQUFDLEVBQ3hEO1lBQ0EsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQztZQUM3QixJQUFJLENBQUMsdUJBQXVCLEdBQUcsSUFBSSxDQUFDO1NBQ3JDO0tBQ0Y7SUFFRCwwQkFBMEI7SUFDMUIsSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRTtRQUMxQjs7O1dBR0c7UUFDSCxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFO1lBQ2pDLE9BQU8sT0FBTyxDQUFDLFFBQVEsQ0FBQztZQUN4QixPQUFPLE9BQU8sQ0FBQyxTQUFTLENBQUM7WUFDekIsT0FBTyxPQUFPLENBQUMsUUFBUSxDQUFDO1FBQzFCLENBQUMsQ0FBQyxDQUFDO0tBQ0o7SUFFRCx1QkFBQSxJQUFJLDBHQUFxQyxNQUF6QyxJQUFJLEVBQXNDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztJQUVoRSxJQUFJLElBQUksQ0FBQyxvQkFBb0IsSUFBSSxJQUFJLENBQUMsb0JBQW9CLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtRQUNyRSxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUNwQyxDQUFDLE9BQStCLEVBQUUsRUFBRTtZQUNsQyxPQUFPLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM5RCxDQUFDLENBQ0YsQ0FBQztLQUNIO0FBQ0gsQ0FBQyx5SUFHQyxlQUFtRDtJQUVuRCxJQUFJLG9CQUE0QixDQUFDO0lBQ2pDLElBQUksbUJBQTJDLENBQUM7SUFFaEQsTUFBTSxrQkFBa0IsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtRQUN0RCxJQUNFLENBQUMsQ0FBQyx1QkFBQSxJQUFJLG9EQUFvQjtZQUN4Qix1QkFBQSxJQUFJLHFGQUFnQixNQUFwQixJQUFJLEVBQWlCLENBQUMsRUFBRSx1QkFBQSxJQUFJLG9EQUFvQixDQUFDLENBQUM7WUFDbEQsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDeEMsQ0FBQyxDQUFDLHVCQUFBLElBQUksb0RBQW9CO2dCQUN4QixDQUFDLHVCQUFBLElBQUkscUZBQWdCLE1BQXBCLElBQUksRUFBaUIsdUJBQUEsSUFBSSxvREFBb0IsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUNyRDtZQUNBLE9BQU8sQ0FBQyxDQUFDLENBQUM7U0FDWDthQUFNO1lBQ0wsT0FBTyxDQUFDLENBQUM7U0FDVjtJQUNILENBQUMsQ0FBQyxDQUFDO0lBRUgsSUFBSSxlQUFlLEVBQUU7UUFDbkIsMkZBQTJGO1FBQzNGLG1GQUFtRjtRQUNuRixNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FDdEMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEtBQUssZUFBZSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUN2RSxDQUFDO1FBRUYsSUFBSSxZQUFZLEVBQUU7WUFDaEIsbUJBQW1CLEdBQUcsWUFBWSxDQUFDO1lBQ25DLG9CQUFvQixHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLG1CQUFtQixDQUFDLENBQUM7WUFFbkUsSUFBSSxvQkFBb0IsSUFBSSxDQUFDLEVBQUU7Z0JBQzdCLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLG9CQUFvQixFQUFFLENBQUMsQ0FBQyxDQUFDO2dCQUMvQyxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxtQkFBbUIsQ0FBQyxDQUFDO2FBQ3REO1NBQ0Y7S0FDRjtJQUVELElBQUksQ0FBQyxTQUFTLEdBQUcsa0JBQWtCLENBQUM7QUFDdEMsQ0FBQztJQUdDLElBQUksSUFBSSxDQUFDLGVBQWUsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLEVBQUU7UUFDakQsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLFNBQVMsQ0FBQztRQUU5QyxJQUFJLENBQUMsZUFBZSxDQUFDLFFBQVEsQ0FBQztZQUM1QixhQUFhLEVBQUUsSUFBSSxDQUFDLGdCQUFnQjtZQUNwQyxrQkFBa0IsRUFDaEIsSUFBSSxDQUFDLFlBQVksS0FBSyxRQUFRO2dCQUM1QixDQUFDLENBQUMsSUFBSSxDQUFDLHFCQUFxQjtnQkFDNUIsQ0FBQyxDQUFDLFNBQVM7U0FDaEIsQ0FBQyxDQUFDO0tBQ0o7QUFDSCxDQUFDO3FIQS9oQlUsd0JBQXdCO3lHQUF4Qix3QkFBd0IscVdBSHhCLENBQUMsMkJBQTJCLENBQUMsOEZBa0k3Qiw2QkFBNkIsa0lBc0VoQyxXQUFXLHVJQU1YLFdBQVcsMkNDeFFyQixvL0VBNkVBOzJGRGhCYSx3QkFBd0I7a0JBUHBDLFNBQVM7K0JBQ0UsbUJBQW1CLGFBR2xCLENBQUMsMkJBQTJCLENBQUMsbUJBQ3ZCLHVCQUF1QixDQUFDLE1BQU07OzBCQXlQNUMsUUFBUTs7MEJBQ1IsUUFBUTs0Q0FqUEoscUJBQXFCO3NCQUQzQixLQUFLO2dCQVVLLGNBQWM7c0JBRHhCLEtBQUs7Z0JBMkJLLFFBQVE7c0JBRGxCLEtBQUs7Z0JBNEJLLHVCQUF1QjtzQkFEakMsS0FBSztnQkFlSyxnQkFBZ0I7c0JBRDFCLEtBQUs7Z0JBZ0JLLG9CQUFvQjtzQkFEOUIsS0FBSztnQkFtQkMscUJBQXFCO3NCQUQzQixNQUFNO2dCQWFBLGtDQUFrQztzQkFEeEMsU0FBUzt1QkFBQyw2QkFBNkI7Z0JBeUVqQyxnQkFBZ0I7c0JBSnRCLFNBQVM7dUJBQUMsa0JBQWtCLEVBQUU7d0JBQzdCLElBQUksRUFBRSxXQUFXO3dCQUNqQixNQUFNLEVBQUUsSUFBSTtxQkFDYjtnQkFPTSxxQkFBcUI7c0JBSjNCLFNBQVM7dUJBQUMsdUJBQXVCLEVBQUU7d0JBQ2xDLElBQUksRUFBRSxXQUFXO3dCQUNqQixNQUFNLEVBQUUsSUFBSTtxQkFDYiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEFmdGVyVmlld0luaXQsXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIEluamVjdG9yLFxuICBJbnB1dCxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIE9wdGlvbmFsLFxuICBPdXRwdXQsXG4gIFRlbXBsYXRlUmVmLFxuICBUeXBlLFxuICBWaWV3Q2hpbGQsXG4gIGZvcndhcmRSZWYsXG4gIGluamVjdCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBBYnN0cmFjdENvbnRyb2wsXG4gIENvbnRyb2xWYWx1ZUFjY2Vzc29yLFxuICBOR19WQUxJREFUT1JTLFxuICBOZ0NvbnRyb2wsXG4gIE5nTW9kZWwsXG4gIFVudHlwZWRGb3JtQ29udHJvbCxcbiAgVmFsaWRhdGlvbkVycm9ycyxcbiAgVmFsaWRhdG9yLFxufSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBTa3lBcHBXaW5kb3dSZWYgfSBmcm9tICdAc2t5dXgvY29yZSc7XG5pbXBvcnQgeyBTa3lJbnB1dEJveEhvc3RTZXJ2aWNlIH0gZnJvbSAnQHNreXV4L2Zvcm1zJztcbmltcG9ydCB7IFNreVRoZW1lU2VydmljZSB9IGZyb20gJ0Bza3l1eC90aGVtZSc7XG5cbmltcG9ydCAnaW50bC10ZWwtaW5wdXQnO1xuaW1wb3J0IHsgU3ViamVjdCwgZnJvbUV2ZW50IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7IFNreUF1dG9jb21wbGV0ZUlucHV0RGlyZWN0aXZlIH0gZnJvbSAnLi4vYXV0b2NvbXBsZXRlL2F1dG9jb21wbGV0ZS1pbnB1dC5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgU2t5QXV0b2NvbXBsZXRlU2VsZWN0aW9uQ2hhbmdlIH0gZnJvbSAnLi4vYXV0b2NvbXBsZXRlL3R5cGVzL2F1dG9jb21wbGV0ZS1zZWxlY3Rpb24tY2hhbmdlJztcblxuaW1wb3J0IHsgU2t5Q291bnRyeUZpZWxkQ291bnRyeSB9IGZyb20gJy4vdHlwZXMvY291bnRyeSc7XG5pbXBvcnQgeyBTa3lDb3VudHJ5RmllbGRDb250ZXh0IH0gZnJvbSAnLi90eXBlcy9jb3VudHJ5LWZpZWxkLWNvbnRleHQnO1xuaW1wb3J0IHsgU0tZX0NPVU5UUllfRklFTERfQ09OVEVYVCB9IGZyb20gJy4vdHlwZXMvY291bnRyeS1maWVsZC1jb250ZXh0LXRva2VuJztcblxuY29uc3QgREVGQVVMVF9DT1VOVFJZX0NPREUgPSAndXMnO1xuXG5jb25zdCBTS1lfQ09VTlRSWV9GSUVMRF9WQUxJREFUT1IgPSB7XG4gIHByb3ZpZGU6IE5HX1ZBTElEQVRPUlMsXG4gIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IFNreUNvdW50cnlGaWVsZENvbXBvbmVudCksXG4gIG11bHRpOiB0cnVlLFxufTtcblxubGV0IHVuaXF1ZUlkID0gMDtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnc2t5LWNvdW50cnktZmllbGQnLFxuICB0ZW1wbGF0ZVVybDogJy4vY291bnRyeS1maWVsZC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2NvdW50cnktZmllbGQuY29tcG9uZW50LnNjc3MnXSxcbiAgcHJvdmlkZXJzOiBbU0tZX0NPVU5UUllfRklFTERfVkFMSURBVE9SXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIFNreUNvdW50cnlGaWVsZENvbXBvbmVudFxuICBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQsIENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBPbkRlc3Ryb3ksIE9uSW5pdCwgVmFsaWRhdG9yXG57XG4gIC8qKlxuICAgKiBUaGUgdmFsdWUgZm9yIHRoZSBIVE1MIGBhdXRvY29tcGxldGVgIGF0dHJpYnV0ZSBvbiB0aGUgZm9ybSBpbnB1dC5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBhdXRvY29tcGxldGVBdHRyaWJ1dGU6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogVGhlIFtJbnRlcm5hdGlvbmFsIE9yZ2FuaXphdGlvbiBmb3IgU3RhbmRhcmRpemF0aW9uIEFscGhhIDJdKGh0dHBzOi8vd3d3Lm5hdGlvbnNvbmxpbmUub3JnL29uZXdvcmxkL2NvdW50cnlfY29kZV9saXN0Lmh0bSlcbiAgICogY291bnRyeSBjb2RlIGZvciB0aGUgZGVmYXVsdCBjb3VudHJ5LlxuICAgKiBXaGVuIHNlYXJjaCByZXN1bHRzIGluY2x1ZGUgdGhlIGRlZmF1bHQgY291bnRyeSwgaXQgYXBwZWFycyBhdCB0aGUgdG9wIG9mIHRoZSBsaXN0LlxuICAgKiBAZGVmYXVsdCBcInVzXCJcbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgZGVmYXVsdENvdW50cnkodmFsdWU6IHN0cmluZyB8IHVuZGVmaW5lZCkge1xuICAgIGlmICghdmFsdWUpIHtcbiAgICAgIHZhbHVlID0gREVGQVVMVF9DT1VOVFJZX0NPREU7XG4gICAgfVxuXG4gICAgaWYgKHZhbHVlICE9PSB0aGlzLiNfZGVmYXVsdENvdW50cnkpIHtcbiAgICAgIHRoaXMuI19kZWZhdWx0Q291bnRyeSA9IHZhbHVlLnRvTG93ZXJDYXNlKCk7XG5cbiAgICAgIHRoaXMuI2RlZmF1bHRDb3VudHJ5RGF0YSA9IHRoaXMuY291bnRyaWVzLmZpbmQoXG4gICAgICAgIChjb3VudHJ5KSA9PiBjb3VudHJ5LmlzbzIgPT09IHRoaXMuI19kZWZhdWx0Q291bnRyeVxuICAgICAgKTtcblxuICAgICAgdGhpcy4jc29ydENvdW50cmllc1dpdGhTZWxlY3RlZEFuZERlZmF1bHQodGhpcy5zZWxlY3RlZENvdW50cnkpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBnZXQgZGVmYXVsdENvdW50cnkoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy4jX2RlZmF1bHRDb3VudHJ5O1xuICB9XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gZGlzYWJsZSB0aGUgY291bnRyeSBmaWVsZCBvbiB0ZW1wbGF0ZS1kcml2ZW4gZm9ybXMuIERvbid0IHVzZSB0aGlzIGlucHV0IG9uIHJlYWN0aXZlIGZvcm1zIGJlY2F1c2UgdGhleSBtYXkgb3ZlcndyaXRlIHRoZSBpbnB1dCBvciBsZWF2ZSB0aGUgY29udHJvbCBvdXQgb2Ygc3luYy5cbiAgICogVG8gc2V0IHRoZSBkaXNhYmxlZCBzdGF0ZSBvbiByZWFjdGl2ZSBmb3JtcywgdXNlIHRoZSBgRm9ybUNvbnRyb2xgIGluc3RlYWQuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IGRpc2FibGVkKGlzRGlzYWJsZWQ6IGJvb2xlYW4gfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLiNyZW1vdmVFdmVudExpc3RlbmVycygpO1xuXG4gICAgaWYgKCFpc0Rpc2FibGVkKSB7XG4gICAgICB0aGlzLiNhZGRFdmVudExpc3RlbmVycygpO1xuICAgIH1cblxuICAgIHRoaXMuI19kaXNhYmxlZCA9IGlzRGlzYWJsZWQgPz8gZmFsc2U7XG5cbiAgICBpZiAoaXNEaXNhYmxlZCkge1xuICAgICAgdGhpcy5jb3VudHJ5U2VhcmNoRm9ybUNvbnRyb2wuZGlzYWJsZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmNvdW50cnlTZWFyY2hGb3JtQ29udHJvbC5lbmFibGUoKTtcbiAgICB9XG5cbiAgICB0aGlzLiNjaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgZGlzYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuI19kaXNhYmxlZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIGhpZGUgdGhlIGZsYWcgaW4gdGhlIGlucHV0IGVsZW1lbnQuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IGhpZGVTZWxlY3RlZENvdW50cnlGbGFnKHZhbHVlOiBib29sZWFuIHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy4jX2hpZGVTZWxlY3RlZENvdW50cnlGbGFnID0gdmFsdWUgPz8gZmFsc2U7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGhpZGVTZWxlY3RlZENvdW50cnlGbGFnKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLiNfaGlkZVNlbGVjdGVkQ291bnRyeUZsYWc7XG4gIH1cblxuICAvKipcbiAgICogV2hldGhlciB0byBpbmNsdWRlIHBob25lIGluZm9ybWF0aW9uIGluIHRoZSBzZWxlY3RlZCBjb3VudHJ5IGFuZCBjb3VudHJ5IGRyb3Bkb3duLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgaW5jbHVkZVBob25lSW5mbyh2YWx1ZTogYm9vbGVhbiB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuI19pbmNsdWRlUGhvbmVJbmZvID0gdmFsdWUgPz8gZmFsc2U7XG5cbiAgICB0aGlzLiNzZXR1cENvdW50cmllcygpO1xuICB9XG5cbiAgcHVibGljIGdldCBpbmNsdWRlUGhvbmVJbmZvKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLiNfaW5jbHVkZVBob25lSW5mbztcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgW0ludGVybmF0aW9uYWwgT3JnYW5pemF0aW9uIGZvciBTdGFuZGFyZGl6YXRpb24gQWxwaGEgMl0oaHR0cHM6Ly93d3cubmF0aW9uc29ubGluZS5vcmcvb25ld29ybGQvY291bnRyeV9jb2RlX2xpc3QuaHRtKVxuICAgKiBjb3VudHJ5IGNvZGVzIGZvciB0aGUgY291bnRyaWVzIHRoYXQgdXNlcnMgY2FuIHNlbGVjdC4gQnkgZGVmYXVsdCwgYWxsIGNvdW50cmllcyBhcmUgYXZhaWxhYmxlLlxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBzdXBwb3J0ZWRDb3VudHJ5SVNPcyh2YWx1ZTogc3RyaW5nW10gfCB1bmRlZmluZWQpIHtcbiAgICAvLyBFbnN1cmUgYWxsIHZhbHVlcyBhcmUgdGhlIHNhbWUgY2FzZS5cbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgIHZhbHVlID0gdmFsdWUubWFwKCh2KSA9PiB2LnRvTG93ZXJDYXNlKCkpO1xuICAgIH1cblxuICAgIHRoaXMuI19zdXBwb3J0ZWRDb3VudHJ5SVNPcyA9IHZhbHVlO1xuICAgIHRoaXMuI3NldHVwQ291bnRyaWVzKCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IHN1cHBvcnRlZENvdW50cnlJU09zKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gdGhpcy4jX3N1cHBvcnRlZENvdW50cnlJU09zIHx8IFtdO1xuICB9XG5cbiAgLyoqXG4gICAqIEZpcmVzIHdoZW4gdGhlIHNlbGVjdGVkIGNvdW50cnkgY2hhbmdlcy5cbiAgICovXG4gIEBPdXRwdXQoKVxuICBwdWJsaWMgc2VsZWN0ZWRDb3VudHJ5Q2hhbmdlOiBFdmVudEVtaXR0ZXI8U2t5Q291bnRyeUZpZWxkQ291bnRyeT4gPVxuICAgIG5ldyBFdmVudEVtaXR0ZXI8U2t5Q291bnRyeUZpZWxkQ291bnRyeT4oKTtcblxuICBwdWJsaWMgY291bnRyaWVzOiBTa3lDb3VudHJ5RmllbGRDb3VudHJ5W10gPSBbXTtcblxuICBwdWJsaWMgY291bnRyeVNlYXJjaEZvcm1Db250cm9sOiBVbnR5cGVkRm9ybUNvbnRyb2w7XG5cbiAgcHVibGljIGlzSW5wdXRGb2N1c2VkID0gZmFsc2U7XG5cbiAgcHVibGljIHNlYXJjaFRleHRNaW5pbXVtQ2hhcmFjdGVycyA9IDI7XG5cbiAgQFZpZXdDaGlsZChTa3lBdXRvY29tcGxldGVJbnB1dERpcmVjdGl2ZSlcbiAgcHVibGljIGNvdW50cnlTZWFyY2hBdXRvY29tcGxldGVEaXJlY3RpdmU6XG4gICAgfCBTa3lBdXRvY29tcGxldGVJbnB1dERpcmVjdGl2ZVxuICAgIHwgdW5kZWZpbmVkO1xuXG4gIHB1YmxpYyBzZXQgc2VsZWN0ZWRDb3VudHJ5KG5ld0NvdW50cnk6IFNreUNvdW50cnlGaWVsZENvdW50cnkgfCB1bmRlZmluZWQpIHtcbiAgICBpZiAoIXRoaXMuI2NvdW50cmllc0FyZUVxdWFsKHRoaXMuc2VsZWN0ZWRDb3VudHJ5LCBuZXdDb3VudHJ5KSkge1xuICAgICAgY29uc3QgbmV3Q291bnRyeUlzbyA9IG5ld0NvdW50cnkgJiYgbmV3Q291bnRyeS5pc28yO1xuICAgICAgaWYgKG5ld0NvdW50cnlJc28pIHtcbiAgICAgICAgY29uc3QgaXNvQ291bnRyeSA9IHRoaXMuY291bnRyaWVzLmZpbmQoXG4gICAgICAgICAgKGNvdW50cnkpID0+IGNvdW50cnkuaXNvMiA9PT0gbmV3Q291bnRyeUlzb1xuICAgICAgICApO1xuXG4gICAgICAgIGlmIChpc29Db3VudHJ5KSB7XG4gICAgICAgICAgbmV3Q291bnRyeSA9IGlzb0NvdW50cnk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdGhpcy4jX3NlbGVjdGVkQ291bnRyeSA9IG5ld0NvdW50cnk7XG5cbiAgICAgIHRoaXMuI3NvcnRDb3VudHJpZXNXaXRoU2VsZWN0ZWRBbmREZWZhdWx0KG5ld0NvdW50cnkpO1xuXG4gICAgICB0aGlzLiNpbnRlcm5hbEZvcm1DaGFuZ2UgPSB0cnVlO1xuICAgICAgdGhpcy5jb3VudHJ5U2VhcmNoRm9ybUNvbnRyb2wuc2V0VmFsdWUodGhpcy5zZWxlY3RlZENvdW50cnkpO1xuXG4gICAgICBpZiAoIXRoaXMuI2lzSW5pdGlhbENoYW5nZSkge1xuICAgICAgICB0aGlzLm9uQ2hhbmdlKG5ld0NvdW50cnkpO1xuICAgICAgICB0aGlzLm9uVG91Y2hlZCgpO1xuXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRDb3VudHJ5Q2hhbmdlLmVtaXQobmV3Q291bnRyeSk7XG4gICAgICB9XG5cbiAgICAgIC8vIERvIG5vdCBtYXJrIHRoZSBmaWVsZCBhcyBcImRpcnR5XCJcbiAgICAgIC8vIGlmIHRoZSBmaWVsZCBoYXMgYmVlbiBpbml0aWFsaXplZCB3aXRoIGEgdmFsdWUuXG4gICAgICBpZiAodGhpcy4jaXNJbml0aWFsQ2hhbmdlICYmIHRoaXMuI25nQ29udHJvbCAmJiB0aGlzLiNuZ0NvbnRyb2wuY29udHJvbCkge1xuICAgICAgICB0aGlzLiNuZ0NvbnRyb2wuY29udHJvbC5tYXJrQXNQcmlzdGluZSgpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLiNpc0luaXRpYWxDaGFuZ2UgPSBmYWxzZTtcblxuICAgICAgLyoqXG4gICAgICAgKiBUaGUgc2Vjb25kIHBvcnRpb24gb2YgdGhpcyBpZiBzdGF0ZW1lbnQgaXMgY29tcGxleC4gVGhlIGNvbnRyb2wgdHlwZSBjaGVjayBlbnN1cmVzIHRoYXRcbiAgICAgICAqIHdlIG9ubHkgd2F0Y2ggZm9yIHRoZSBpbml0aWFsIHRpbWUgdGhyb3VnaCB0aGlzIGZ1bmN0aW9uIG9uIHJlYWN0aXZlIGZvcm1zLiBIb3dldmVyLFxuICAgICAgICogdGVtcGxhdGUgZm9ybXMgd2lsbCBzZW5kIHRocm91Z2ggYG51bGxgIGFuZCB0aGVuIGB1bmRlZmluZWRgIG9uIGVtcHR5IGluaXRpYWxpemF0aW9uXG4gICAgICAgKiBzbyB3ZSBoYXZlIHRvIGNoZWNrIGZvciB3aGVuIHRoZSBub24tbnVsbCBwYXNzIHRocm91Z2ggaGFwcGVucy5cbiAgICAgICAqL1xuICAgIH0gZWxzZSBpZiAoXG4gICAgICB0aGlzLiNpc0luaXRpYWxDaGFuZ2UgJiZcbiAgICAgICghKHRoaXMuI25nQ29udHJvbCBpbnN0YW5jZW9mIE5nTW9kZWwpIHx8IG5ld0NvdW50cnkgIT09IG51bGwpXG4gICAgKSB7XG4gICAgICB0aGlzLiNpc0luaXRpYWxDaGFuZ2UgPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZ2V0IHNlbGVjdGVkQ291bnRyeSgpOiBTa3lDb3VudHJ5RmllbGRDb3VudHJ5IHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy4jX3NlbGVjdGVkQ291bnRyeTtcbiAgfVxuXG4gIHB1YmxpYyBjb250ZXh0OiBTa3lDb3VudHJ5RmllbGRDb250ZXh0IHwgbnVsbCA9IGluamVjdChcbiAgICBTS1lfQ09VTlRSWV9GSUVMRF9DT05URVhULFxuICAgIHtcbiAgICAgIG9wdGlvbmFsOiB0cnVlLFxuICAgIH1cbiAgKTtcblxuICBwdWJsaWMgY3VycmVudFRoZW1lID0gJ2RlZmF1bHQnO1xuXG4gIHB1YmxpYyBpbnB1dElkOiBzdHJpbmc7XG5cbiAgQFZpZXdDaGlsZCgnaW5wdXRUZW1wbGF0ZVJlZicsIHtcbiAgICByZWFkOiBUZW1wbGF0ZVJlZixcbiAgICBzdGF0aWM6IHRydWUsXG4gIH0pXG4gIHB1YmxpYyBpbnB1dFRlbXBsYXRlUmVmOiBUZW1wbGF0ZVJlZjx1bmtub3duPiB8IHVuZGVmaW5lZDtcblxuICBAVmlld0NoaWxkKCdzZWFyY2hJY29uVGVtcGxhdGVSZWYnLCB7XG4gICAgcmVhZDogVGVtcGxhdGVSZWYsXG4gICAgc3RhdGljOiB0cnVlLFxuICB9KVxuICBwdWJsaWMgc2VhcmNoSWNvblRlbXBsYXRlUmVmOiBUZW1wbGF0ZVJlZjx1bmtub3duPiB8IHVuZGVmaW5lZDtcblxuICAjY2hhbmdlRGV0ZWN0b3I6IENoYW5nZURldGVjdG9yUmVmO1xuXG4gICNkZWZhdWx0Q291bnRyeURhdGE6IFNreUNvdW50cnlGaWVsZENvdW50cnkgfCB1bmRlZmluZWQ7XG5cbiAgI2VsUmVmOiBFbGVtZW50UmVmO1xuXG4gICNpZGxlID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICAjaW5qZWN0b3I6IEluamVjdG9yO1xuXG4gICNpbnRlcm5hbEZvcm1DaGFuZ2UgPSBmYWxzZTtcblxuICAjaXNJbml0aWFsQ2hhbmdlID0gdHJ1ZTtcblxuICAjbmdDb250cm9sOiBOZ0NvbnRyb2wgfCBudWxsID0gbnVsbDtcblxuICAjbmdVbnN1YnNjcmliZSA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgI3RoZW1lU3ZjOiBTa3lUaGVtZVNlcnZpY2UgfCB1bmRlZmluZWQ7XG5cbiAgI3dpbmRvd1JlZjogU2t5QXBwV2luZG93UmVmO1xuXG4gICNfZGVmYXVsdENvdW50cnk6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAjX2Rpc2FibGVkID0gZmFsc2U7XG5cbiAgI19oaWRlU2VsZWN0ZWRDb3VudHJ5RmxhZyA9IGZhbHNlO1xuXG4gICNfaW5jbHVkZVBob25lSW5mbyA9IGZhbHNlO1xuXG4gICNfc2VsZWN0ZWRDb3VudHJ5OiBTa3lDb3VudHJ5RmllbGRDb3VudHJ5IHwgdW5kZWZpbmVkO1xuXG4gICNfc3VwcG9ydGVkQ291bnRyeUlTT3M6IHN0cmluZ1tdIHwgdW5kZWZpbmVkO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIGNoYW5nZURldGVjdG9yOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBlbFJlZjogRWxlbWVudFJlZixcbiAgICB3aW5kb3dSZWY6IFNreUFwcFdpbmRvd1JlZixcbiAgICBpbmplY3RvcjogSW5qZWN0b3IsXG4gICAgQE9wdGlvbmFsKCkgcHVibGljIGlucHV0Qm94SG9zdFN2Yz86IFNreUlucHV0Qm94SG9zdFNlcnZpY2UsXG4gICAgQE9wdGlvbmFsKCkgdGhlbWVTdmM/OiBTa3lUaGVtZVNlcnZpY2VcbiAgKSB7XG4gICAgdGhpcy4jY2hhbmdlRGV0ZWN0b3IgPSBjaGFuZ2VEZXRlY3RvcjtcbiAgICB0aGlzLiNlbFJlZiA9IGVsUmVmO1xuICAgIHRoaXMuI3dpbmRvd1JlZiA9IHdpbmRvd1JlZjtcbiAgICB0aGlzLiNpbmplY3RvciA9IGluamVjdG9yO1xuICAgIHRoaXMuI3RoZW1lU3ZjID0gdGhlbWVTdmM7XG5cbiAgICB0aGlzLmlucHV0SWQgPSBgc2t5LWNvdW50cnktZmllbGQtaW5wdXQtJHt1bmlxdWVJZCsrfWA7XG5cbiAgICB0aGlzLiNzZXR1cENvdW50cmllcygpO1xuXG4gICAgdGhpcy5jb3VudHJ5U2VhcmNoRm9ybUNvbnRyb2wgPSBuZXcgVW50eXBlZEZvcm1Db250cm9sKCk7XG4gIH1cblxuICAvKipcbiAgICogQW5ndWxhciBsaWZlY3ljbGUgaG9vayBmb3Igd2hlbiB0aGUgY29tcG9uZW50IGlzIGluaXRpYWxpemVkXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuI3VwZGF0ZUlucHV0Qm94KCk7XG5cbiAgICB0aGlzLiNuZ0NvbnRyb2wgPSB0aGlzLiNpbmplY3Rvci5nZXQ8TmdDb250cm9sIHwgbnVsbD4oXG4gICAgICBOZ0NvbnRyb2wgYXMgdW5rbm93biBhcyBUeXBlPE5nQ29udHJvbD4sXG4gICAgICBudWxsXG4gICAgKTtcblxuICAgIGlmICh0aGlzLiNuZ0NvbnRyb2wpIHtcbiAgICAgIHRoaXMuI25nQ29udHJvbC52YWx1ZUFjY2Vzc29yID0gdGhpcztcbiAgICB9IGVsc2Uge1xuICAgICAgLyoqXG4gICAgICAgKiBUaGUgaW5pdGlhbCBjaGFuZ2UgYm9vbGVhbiBpcyB0byBkZXRlcm1pbmUgaWYgdGhlIGZvcm0gaXMgc2V0dGluZyB0aGUgdmFsdWUuIFdoZW4gbm8gZm9ybVxuICAgICAgICogaXMgcHJlc2VudCB3ZSBkb24ndCB3YW50IHRvIGlnbm9yZSB0aGUgZmlyc3QgY2hhbmdlLlxuICAgICAgICovXG4gICAgICB0aGlzLiNpc0luaXRpYWxDaGFuZ2UgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuZGVmYXVsdENvdW50cnkpIHtcbiAgICAgIHRoaXMuZGVmYXVsdENvdW50cnkgPSBERUZBVUxUX0NPVU5UUllfQ09ERTtcbiAgICB9XG5cbiAgICB0aGlzLmNvdW50cnlTZWFyY2hGb3JtQ29udHJvbC52YWx1ZUNoYW5nZXNcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLiNuZ1Vuc3Vic2NyaWJlKSlcbiAgICAgIC5zdWJzY3JpYmUoKG5ld1ZhbHVlKSA9PiB7XG4gICAgICAgIGlmIChuZXdWYWx1ZSAmJiAhdGhpcy4jaW50ZXJuYWxGb3JtQ2hhbmdlKSB7XG4gICAgICAgICAgdGhpcy5zZWxlY3RlZENvdW50cnkgPSBuZXdWYWx1ZTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICBpZiAoIXRoaXMuZGlzYWJsZWQpIHtcbiAgICAgIHRoaXMuI2FkZEV2ZW50TGlzdGVuZXJzKCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgIGlmICh0aGlzLiN0aGVtZVN2Yykge1xuICAgICAgdGhpcy4jdGhlbWVTdmMuc2V0dGluZ3NDaGFuZ2Uuc3Vic2NyaWJlKChjaGFuZ2UpID0+IHtcbiAgICAgICAgdGhpcy5jdXJyZW50VGhlbWUgPSBjaGFuZ2UuY3VycmVudFNldHRpbmdzLnRoZW1lLm5hbWU7XG4gICAgICAgIHRoaXMuI3VwZGF0ZUlucHV0Qm94KCk7XG4gICAgICAgIHRoaXMuI2NoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEFuZ3VsYXIgbGlmZWN5Y2xlIGhvb2sgZm9yIHdoZW4gdGhlIGNvbXBvbmVudCBpcyBkZXN0cnVjdGVkLlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLnNlbGVjdGVkQ291bnRyeUNoYW5nZS5jb21wbGV0ZSgpO1xuICAgIHRoaXMuI3JlbW92ZUV2ZW50TGlzdGVuZXJzKCk7XG4gICAgdGhpcy4jbmdVbnN1YnNjcmliZS5uZXh0KCk7XG4gICAgdGhpcy4jbmdVbnN1YnNjcmliZS5jb21wbGV0ZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIGNvbXBvbmVudCdzIHRvdWNoZWQgdmFsdWUgd2hlbiB0aGUgYXV0b2NvbXBsZXRlIGlzIGJsdXJyZWRcbiAgICogQGludGVybmFsXG4gICAqL1xuICBwdWJsaWMgb25BdXRvY29tcGxldGVCbHVyKCk6IHZvaWQge1xuICAgIHRoaXMub25Ub3VjaGVkKCk7XG4gIH1cblxuICAvKipcbiAgICogU2V0cyB0aGUgY291bnRyeSB0byB2YWxpZGF0ZSBhZ2FpbnN0IGJhc2VkIG9uIHRoZSBjb3VudHkncyBpc28yIGNvZGUuXG4gICAqIEBwYXJhbSBuZXdDb3VudHJ5IFRoZSBJbnRlcm5hdGlvbmFsIE9yZ2FuaXphdGlvbiBmb3IgU3RhbmRhcmRpemF0aW9uJ3MgdHdvLWxldHRlciBjb2RlXG4gICAqIGZvciB0aGUgZGVmYXVsdCBjb3VudHJ5LlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHB1YmxpYyBvbkNvdW50cnlTZWxlY3RlZChuZXdDb3VudHJ5OiBTa3lBdXRvY29tcGxldGVTZWxlY3Rpb25DaGFuZ2UpOiB2b2lkIHtcbiAgICBpZiAobmV3Q291bnRyeS5zZWxlY3RlZEl0ZW0pIHtcbiAgICAgIHRoaXMud3JpdGVWYWx1ZShcbiAgICAgICAgdGhpcy5jb3VudHJpZXMuZmluZChcbiAgICAgICAgICAoY291bnRyeUluZm8pID0+IGNvdW50cnlJbmZvLmlzbzIgPT09IG5ld0NvdW50cnkuc2VsZWN0ZWRJdGVtLmlzbzJcbiAgICAgICAgKVxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy53cml0ZVZhbHVlKHVuZGVmaW5lZCk7XG4gICAgfVxuICB9XG5cbiAgLy8gQW5ndWxhciBhdXRvbWF0aWNhbGx5IGNvbnN0cnVjdHMgdGhlc2UgbWV0aG9kcy5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1lbXB0eS1mdW5jdGlvblxuICBwdWJsaWMgb25DaGFuZ2UgPSAodmFsdWU6IFNreUNvdW50cnlGaWVsZENvdW50cnkgfCB1bmRlZmluZWQpID0+IHt9O1xuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZW1wdHktZnVuY3Rpb25cbiAgcHVibGljIG9uVG91Y2hlZCA9ICgpID0+IHt9O1xuXG4gIHB1YmxpYyByZWdpc3Rlck9uQ2hhbmdlKFxuICAgIGZuOiAodmFsdWU6IFNreUNvdW50cnlGaWVsZENvdW50cnkgfCB1bmRlZmluZWQpID0+IHZvaWRcbiAgKTogdm9pZCB7XG4gICAgdGhpcy5vbkNoYW5nZSA9IGZuO1xuICB9XG5cbiAgcHVibGljIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiAoKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgdGhpcy5vblRvdWNoZWQgPSBmbjtcbiAgfVxuXG4gIC8vIEFsbG93cyBBbmd1bGFyIHRvIGRpc2FibGUgdGhlIGlucHV0LlxuICBwdWJsaWMgc2V0RGlzYWJsZWRTdGF0ZShkaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuZGlzYWJsZWQgPSBkaXNhYmxlZDtcbiAgfVxuXG4gIHB1YmxpYyB2YWxpZGF0ZShjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCB7XG4gICAgaWYgKGNvbnRyb2wudmFsdWUpIHtcbiAgICAgIGlmIChcbiAgICAgICAgKHRoaXMuc3VwcG9ydGVkQ291bnRyeUlTT3MgJiZcbiAgICAgICAgICB0aGlzLnN1cHBvcnRlZENvdW50cnlJU09zLmxlbmd0aCA+IDAgJiZcbiAgICAgICAgICB0aGlzLnN1cHBvcnRlZENvdW50cnlJU09zLmluZGV4T2YoY29udHJvbC52YWx1ZS5pc28yKSA8IDApIHx8XG4gICAgICAgICF0aGlzLmNvdW50cmllcy5maW5kKChjb3VudHJ5KSA9PiBjb3VudHJ5LmlzbzIgPT09IGNvbnRyb2wudmFsdWUuaXNvMilcbiAgICAgICkge1xuICAgICAgICByZXR1cm4geyB1bnN1cHBvcnRlZENvdW50cnk6IHRydWUgfTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHB1YmxpYyB3cml0ZVZhbHVlKHZhbHVlOiBTa3lDb3VudHJ5RmllbGRDb3VudHJ5IHwgdW5kZWZpbmVkKTogdm9pZCB7XG4gICAgdGhpcy5zZWxlY3RlZENvdW50cnkgPSB2YWx1ZTtcbiAgICB0aGlzLiNjaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gICNhZGRFdmVudExpc3RlbmVycygpOiB2b2lkIHtcbiAgICB0aGlzLiNyZW1vdmVFdmVudExpc3RlbmVycygpO1xuXG4gICAgdGhpcy4jaWRsZSA9IG5ldyBTdWJqZWN0KCk7XG5cbiAgICBjb25zdCBkb2N1bWVudE9iaiA9IHRoaXMuI3dpbmRvd1JlZi5uYXRpdmVXaW5kb3cuZG9jdW1lbnQ7XG5cbiAgICBmcm9tRXZlbnQ8TW91c2VFdmVudD4oZG9jdW1lbnRPYmosICdtb3VzZWRvd24nKVxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuI2lkbGUpKVxuICAgICAgLnN1YnNjcmliZSgoZXZlbnQpID0+IHtcbiAgICAgICAgdGhpcy5pc0lucHV0Rm9jdXNlZCA9IHRoaXMuI2VsUmVmLm5hdGl2ZUVsZW1lbnQuY29udGFpbnMoZXZlbnQudGFyZ2V0KTtcbiAgICAgICAgdGhpcy4jY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XG4gICAgICB9KTtcblxuICAgIGZyb21FdmVudDxLZXlib2FyZEV2ZW50Pihkb2N1bWVudE9iaiwgJ2ZvY3VzaW4nKVxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuI2lkbGUpKVxuICAgICAgLnN1YnNjcmliZSgoZXZlbnQpID0+IHtcbiAgICAgICAgdGhpcy5pc0lucHV0Rm9jdXNlZCA9IHRoaXMuI2VsUmVmLm5hdGl2ZUVsZW1lbnQuY29udGFpbnMoZXZlbnQudGFyZ2V0KTtcbiAgICAgICAgdGhpcy4jY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XG4gICAgICB9KTtcbiAgfVxuXG4gICNjb3VudHJpZXNBcmVFcXVhbChcbiAgICBjb3VudHJ5MTogU2t5Q291bnRyeUZpZWxkQ291bnRyeSB8IHVuZGVmaW5lZCxcbiAgICBjb3VudHJ5MjogU2t5Q291bnRyeUZpZWxkQ291bnRyeSB8IHVuZGVmaW5lZFxuICApOiBib29sZWFuIHtcbiAgICBpZiAoY291bnRyeTEgJiYgY291bnRyeTIpIHtcbiAgICAgIHJldHVybiBjb3VudHJ5MS5pc28yID09PSBjb3VudHJ5Mi5pc28yO1xuICAgIH1cblxuICAgIC8vIE5PVEU6IFdlIGFyZSBkb2luZyB0aGlzIGluICB0aGlzIHdheSBiZWNhdXNlIHRlbXBsYXRlIGZvcm1zIHdpbGwgc2VuZCB0aHJvdWdoIGBudWxsYFxuICAgIC8vIGFuZCB0aGVuIGB1bmRlZmluZWRgIG9uIGVtcHR5IGluaXRpYWxpemF0aW9uLiBUaGVzZSBhcmUgZnVuY3Rpb25hbGx5IGVxdWl2YWxlbnQgYnV0IHdpbGxcbiAgICAvLyBub3QgcGFzcyBhIHN0YW5kYXJkIHRyaXBsZSBlcXVhbHMgY2hlY2suXG4gICAgcmV0dXJuICFjb3VudHJ5MSAmJiAhY291bnRyeTI7XG4gIH1cblxuICAjY291bnRyaWVzRXF1YWwoXG4gICAgYTogU2t5Q291bnRyeUZpZWxkQ291bnRyeSxcbiAgICBiOiBTa3lDb3VudHJ5RmllbGRDb3VudHJ5XG4gICk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBhLmlzbzIgPT09IGIuaXNvMiAmJiBhLm5hbWUgPT09IGIubmFtZTtcbiAgfVxuXG4gICNyZW1vdmVFdmVudExpc3RlbmVycygpOiB2b2lkIHtcbiAgICB0aGlzLiNpZGxlLm5leHQoKTtcbiAgICB0aGlzLiNpZGxlLmNvbXBsZXRlKCk7XG4gIH1cblxuICAjc2V0dXBDb3VudHJpZXMoKTogdm9pZCB7XG4gICAgLyoqXG4gICAgICogVGhlIGpzb24gZnVuY3Rpb25zIGhlcmUgZW5zdXJlcyB0aGF0IHdlIGdldCBhIGNvcHkgb2YgdGhlIGFycmF5IGFuZCBub3QgdGhlIGdsb2JhbCBvcmlnaW5hbC5cbiAgICAgKiBUaGlzIGVuc3VyZXMgdGhhdCBtdWx0aXBsZSBpbnN0YW5jZXMgb2YgdGhlIGNvbXBvbmVudCBkb24ndCBvdmVyd3JpdGUgdGhlIG9yaWdpbmFsIGRhdGEuXG4gICAgICpcbiAgICAgKiBXZSBtdXN0IHR5cGUgdGhlIHdpbmRvdyBvYmplY3QgYXMgYW55IGhlcmUgYXMgdGhlIGludGwtdGVsLWlucHV0IGxpYnJhcnkgYWRkcyBpdHMgb2JqZWN0XG4gICAgICogdG8gdGhlIG1haW4gd2luZG93IG9iamVjdC5cbiAgICAgKi9cbiAgICB0aGlzLmNvdW50cmllcyA9IEpTT04ucGFyc2UoXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgICAgSlNPTi5zdHJpbmdpZnkoKHdpbmRvdyBhcyBhbnkpLmludGxUZWxJbnB1dEdsb2JhbHMuZ2V0Q291bnRyeURhdGEoKSlcbiAgICApO1xuXG4gICAgLy8gSWdub3JpbmcgY292ZXJhZ2UgaGVyZSBhcyB0aGlzIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgbmV4dCByZWxlYXNlLlxuICAgIC8vIGlzdGFuYnVsIGlnbm9yZSBuZXh0XG4gICAgaWYgKCF0aGlzLmluY2x1ZGVQaG9uZUluZm8gJiYgIXRoaXMuaGlkZVNlbGVjdGVkQ291bnRyeUZsYWcpIHtcbiAgICAgIGlmIChcbiAgICAgICAgKFxuICAgICAgICAgIHRoaXMuI2VsUmVmLm5hdGl2ZUVsZW1lbnQucGFyZW50RWxlbWVudCBhcyBIVE1MRWxlbWVudFxuICAgICAgICApPy5jbGFzc0xpc3Q/LmNvbnRhaW5zKCdza3ktcGhvbmUtZmllbGQtY291bnRyeS1zZWFyY2gnKVxuICAgICAgKSB7XG4gICAgICAgIHRoaXMuaW5jbHVkZVBob25lSW5mbyA9IHRydWU7XG4gICAgICAgIHRoaXMuaGlkZVNlbGVjdGVkQ291bnRyeUZsYWcgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgaWYgKCF0aGlzLmluY2x1ZGVQaG9uZUluZm8pIHtcbiAgICAgIC8qKlxuICAgICAgICogVGhlIGxpYnJhcnkgd2UgZ2V0IHRoZSBjb3VudHJ5IGRhdGEgZnJvbSBpbmNsdWRlcyBleHRyYSBwaG9uZSBwcm9wZXJ0aWVzLlxuICAgICAgICogV2Ugd2FudCB0byByZW1vdmUgdGhlc2UgdW5sZXNzIHdlIGFyZSBpbiBhIHBob25lIGZpZWxkXG4gICAgICAgKi9cbiAgICAgIHRoaXMuY291bnRyaWVzLmZvckVhY2goKGNvdW50cnkpID0+IHtcbiAgICAgICAgZGVsZXRlIGNvdW50cnkuZGlhbENvZGU7XG4gICAgICAgIGRlbGV0ZSBjb3VudHJ5LmFyZWFDb2RlcztcbiAgICAgICAgZGVsZXRlIGNvdW50cnkucHJpb3JpdHk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICB0aGlzLiNzb3J0Q291bnRyaWVzV2l0aFNlbGVjdGVkQW5kRGVmYXVsdCh0aGlzLnNlbGVjdGVkQ291bnRyeSk7XG5cbiAgICBpZiAodGhpcy5zdXBwb3J0ZWRDb3VudHJ5SVNPcyAmJiB0aGlzLnN1cHBvcnRlZENvdW50cnlJU09zLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMuY291bnRyaWVzID0gdGhpcy5jb3VudHJpZXMuZmlsdGVyKFxuICAgICAgICAoY291bnRyeTogU2t5Q291bnRyeUZpZWxkQ291bnRyeSkgPT4ge1xuICAgICAgICAgIHJldHVybiB0aGlzLnN1cHBvcnRlZENvdW50cnlJU09zLmluZGV4T2YoY291bnRyeS5pc28yKSA+PSAwO1xuICAgICAgICB9XG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gICNzb3J0Q291bnRyaWVzV2l0aFNlbGVjdGVkQW5kRGVmYXVsdChcbiAgICBzZWxlY3RlZENvdW50cnk6IFNreUNvdW50cnlGaWVsZENvdW50cnkgfCB1bmRlZmluZWRcbiAgKTogdm9pZCB7XG4gICAgbGV0IHNlbGVjdGVkQ291bnRyeUluZGV4OiBudW1iZXI7XG4gICAgbGV0IHNlbGVjdGVkQ291bnRyeURhdGE6IFNreUNvdW50cnlGaWVsZENvdW50cnk7XG5cbiAgICBjb25zdCBzb3J0ZWROZXdDb3VudHJpZXMgPSB0aGlzLmNvdW50cmllcy5zb3J0KChhLCBiKSA9PiB7XG4gICAgICBpZiAoXG4gICAgICAgICgodGhpcy4jZGVmYXVsdENvdW50cnlEYXRhICYmXG4gICAgICAgICAgdGhpcy4jY291bnRyaWVzRXF1YWwoYSwgdGhpcy4jZGVmYXVsdENvdW50cnlEYXRhKSkgfHxcbiAgICAgICAgICAoYS5uYW1lICYmIGIubmFtZSAmJiBhLm5hbWUgPCBiLm5hbWUpKSAmJlxuICAgICAgICAoIXRoaXMuI2RlZmF1bHRDb3VudHJ5RGF0YSB8fFxuICAgICAgICAgICF0aGlzLiNjb3VudHJpZXNFcXVhbCh0aGlzLiNkZWZhdWx0Q291bnRyeURhdGEsIGIpKVxuICAgICAgKSB7XG4gICAgICAgIHJldHVybiAtMTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiAxO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgaWYgKHNlbGVjdGVkQ291bnRyeSkge1xuICAgICAgLy8gTm90ZTogV2UgYXJlIGxvb2tpbmcgdXAgdGhpcyBkYXRhIGhlcmUgdG8gZW5zdXJlIHdlIGFyZSB1c2luZyB0aGUgb2ZmaWNpYWwgZGF0YSBmcm9tIHRoZVxuICAgICAgLy8gbGlicmFyeSBhbmQgbm90IHRoZSBkYXRhIHByb3ZpZGVkIGJ5IHRoZSB1c2VyIG9uIGluaXRpYWxpemF0aW9uIG9mIHRoZSBjb21wb25lbnRcbiAgICAgIGNvbnN0IGZvdW5kQ291bnRyeSA9IHRoaXMuY291bnRyaWVzLmZpbmQoXG4gICAgICAgIChjb3VudHJ5KSA9PiBjb3VudHJ5LmlzbzIgPT09IHNlbGVjdGVkQ291bnRyeS5pc28yLnRvTG9jYWxlTG93ZXJDYXNlKClcbiAgICAgICk7XG5cbiAgICAgIGlmIChmb3VuZENvdW50cnkpIHtcbiAgICAgICAgc2VsZWN0ZWRDb3VudHJ5RGF0YSA9IGZvdW5kQ291bnRyeTtcbiAgICAgICAgc2VsZWN0ZWRDb3VudHJ5SW5kZXggPSB0aGlzLmNvdW50cmllcy5pbmRleE9mKHNlbGVjdGVkQ291bnRyeURhdGEpO1xuXG4gICAgICAgIGlmIChzZWxlY3RlZENvdW50cnlJbmRleCA+PSAwKSB7XG4gICAgICAgICAgdGhpcy5jb3VudHJpZXMuc3BsaWNlKHNlbGVjdGVkQ291bnRyeUluZGV4LCAxKTtcbiAgICAgICAgICBzb3J0ZWROZXdDb3VudHJpZXMuc3BsaWNlKDAsIDAsIHNlbGVjdGVkQ291bnRyeURhdGEpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5jb3VudHJpZXMgPSBzb3J0ZWROZXdDb3VudHJpZXM7XG4gIH1cblxuICAjdXBkYXRlSW5wdXRCb3goKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaW5wdXRCb3hIb3N0U3ZjICYmIHRoaXMuaW5wdXRUZW1wbGF0ZVJlZikge1xuICAgICAgdGhpcy5pbnB1dElkID0gdGhpcy5pbnB1dEJveEhvc3RTdmMuY29udHJvbElkO1xuXG4gICAgICB0aGlzLmlucHV0Qm94SG9zdFN2Yy5wb3B1bGF0ZSh7XG4gICAgICAgIGlucHV0VGVtcGxhdGU6IHRoaXMuaW5wdXRUZW1wbGF0ZVJlZixcbiAgICAgICAgaWNvbnNJbnNldFRlbXBsYXRlOlxuICAgICAgICAgIHRoaXMuY3VycmVudFRoZW1lID09PSAnbW9kZXJuJ1xuICAgICAgICAgICAgPyB0aGlzLnNlYXJjaEljb25UZW1wbGF0ZVJlZlxuICAgICAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cbn1cbiIsIjxuZy1jb250YWluZXIgKm5nSWY9XCIhaW5wdXRCb3hIb3N0U3ZjXCI+XG4gIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJpbnB1dFRlbXBsYXRlUmVmXCI+PC9uZy1jb250YWluZXI+XG48L25nLWNvbnRhaW5lcj5cblxuPG5nLXRlbXBsYXRlICNpbnB1dFRlbXBsYXRlUmVmPlxuICA8c3BhblxuICAgIGNsYXNzPVwic2t5LWNvdW50cnktZmllbGQtY29udGFpbmVyXCJcbiAgICBbbmdDbGFzc109XCJ7XG4gICAgICAnc2t5LWNvdW50cnktZmllbGQtZGlzYWJsZWQnOiBkaXNhYmxlZFxuICAgIH1cIlxuICA+XG4gICAgPHNreS1hdXRvY29tcGxldGVcbiAgICAgIFthcmlhTGFiZWxsZWRCeV09XCJpbnB1dElkXCJcbiAgICAgIFtkYXRhXT1cImNvdW50cmllc1wiXG4gICAgICBbcHJvcGVydGllc1RvU2VhcmNoXT1cIlsnbmFtZScsICdpc28yJ11cIlxuICAgICAgW3NlYXJjaFJlc3VsdFRlbXBsYXRlXT1cImNvdW50cnlTZWFyY2hSZXN1bHRUZW1wbGF0ZVwiXG4gICAgICBbc2VhcmNoVGV4dE1pbmltdW1DaGFyYWN0ZXJzXT1cInNlYXJjaFRleHRNaW5pbXVtQ2hhcmFjdGVyc1wiXG4gICAgICAoc2VsZWN0aW9uQ2hhbmdlKT1cIm9uQ291bnRyeVNlbGVjdGVkKCRldmVudClcIlxuICAgID5cbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCJza3ktY291bnRyeS1maWVsZC1pbnB1dFwiXG4gICAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgICAnc2t5LWNvdW50cnktZmllbGQtaW5wdXQtd2l0aC1mbGFnJzpcbiAgICAgICAgICAgIHNlbGVjdGVkQ291bnRyeSAmJiBzZWxlY3RlZENvdW50cnkuaXNvMiAmJiAhaGlkZVNlbGVjdGVkQ291bnRyeUZsYWdcbiAgICAgICAgfVwiXG4gICAgICA+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgc2VsZWN0ZWRDb3VudHJ5ICYmIHNlbGVjdGVkQ291bnRyeS5pc28yICYmICFoaWRlU2VsZWN0ZWRDb3VudHJ5RmxhZ1xuICAgICAgICAgIFwiXG4gICAgICAgICAgY2xhc3M9XCJza3ktY291bnRyeS1maWVsZC1mbGFnXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwiaXRpX19mbGFnXCJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cIidpdGlfXycgKyBzZWxlY3RlZENvdW50cnkuaXNvMi50b0xvd2VyQ2FzZSgpXCJcbiAgICAgICAgICA+PC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8dGV4dGFyZWFcbiAgICAgICAgICBjbGFzcz1cInNreS1mb3JtLWNvbnRyb2xcIlxuICAgICAgICAgIG5hbWU9XCJzZWxlY3RlZENvdW50cnlcIlxuICAgICAgICAgIHJvd3M9XCIxXCJcbiAgICAgICAgICBza3lBdXRvY29tcGxldGVcbiAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIlxuICAgICAgICAgICAgJ3NreXV4X2NvdW50cnlfZmllbGRfc2VhcmNoX3BsYWNlaG9sZGVyJyB8IHNreUxpYlJlc291cmNlc1xuICAgICAgICAgIFwiXG4gICAgICAgICAgW2F0dHIuaWRdPVwiaW5wdXRJZFwiXG4gICAgICAgICAgW2F1dG9jb21wbGV0ZUF0dHJpYnV0ZV09XCJhdXRvY29tcGxldGVBdHRyaWJ1dGVcIlxuICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJjb3VudHJ5U2VhcmNoRm9ybUNvbnRyb2xcIlxuICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJcbiAgICAgICAgICAgIGNvbnRleHQ/LnNob3dQbGFjZWhvbGRlclRleHQgfHwgY3VycmVudFRoZW1lID09PSAnZGVmYXVsdCdcbiAgICAgICAgICAgICAgPyAoJ3NreXV4X2NvdW50cnlfZmllbGRfc2VhcmNoX3BsYWNlaG9sZGVyJyB8IHNreUxpYlJlc291cmNlcylcbiAgICAgICAgICAgICAgOiAnJ1xuICAgICAgICAgIFwiXG4gICAgICAgICAgKGJsdXIpPVwib25BdXRvY29tcGxldGVCbHVyKClcIlxuICAgICAgICA+PC90ZXh0YXJlYT5cbiAgICAgIDwvZGl2PlxuICAgIDwvc2t5LWF1dG9jb21wbGV0ZT5cbiAgPC9zcGFuPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlIGxldC1pdGVtPVwiaXRlbVwiICNjb3VudHJ5U2VhcmNoUmVzdWx0VGVtcGxhdGU+XG4gIDxkaXZcbiAgICBjbGFzcz1cInNreS1jb3VudHJ5LWZpZWxkLXNlYXJjaC1yZXN1bHQtZmxhZ1wiXG4gICAgW25nQ2xhc3NdPVwiJ2l0aV9fZmxhZyBpdGlfXycgKyBpdGVtLmlzbzIudG9Mb3dlckNhc2UoKVwiXG4gID48L2Rpdj5cbiAge3sgaXRlbS5uYW1lIH19XG4gIDxzcGFuICpuZ0lmPVwiaW5jbHVkZVBob25lSW5mb1wiIGNsYXNzPVwic2t5LWRlZW1waGFzaXplZFwiPlxuICAgIHt7IGl0ZW0uZGlhbENvZGUgfX1cbiAgPC9zcGFuPlxuPC9uZy10ZW1wbGF0ZT5cblxuPCEtLSBUaGlzIHRlbXBsYXRlIHNob3VsZCBvbmx5IGJlIHVzZWQgaW4gbW9kZXJuIHRoZW1lIGlucHV0IGJveGVzLiAtLT5cbjxuZy10ZW1wbGF0ZSAjc2VhcmNoSWNvblRlbXBsYXRlUmVmPlxuICA8ZGl2IGNsYXNzPVwic2t5LWlucHV0LWdyb3VwLWljb24gc2t5LWlucHV0LWJveC1pY29uLWluc2V0XCI+XG4gICAgPHNreS1pY29uIGljb25UeXBlPVwic2t5dXhcIiBpY29uPVwic2VhcmNoXCI+PC9za3ktaWNvbj5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuIl19