nuxeo-development-framework 2.0.3 → 2.0.5

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.
@@ -34,6 +34,8 @@ export class PdftronComponent {
34
34
  this.DOCUMENT_TYPE = 'application/pdf';
35
35
  this.fitMode = 'FitWidth';
36
36
  this.searchString = ''; // string to search for it in the document
37
+ this.trackSignature = false; // to enable tracking signature position and emit it after every change it signature
38
+ this.onSignatureTracking = new EventEmitter(); // event to emit signature changes
37
39
  this.useOutsideAnotations = false; // flage to indicat if using out side anotations or not
38
40
  this.onAddingAnotation = new EventEmitter(); // used to export all anotations to outside
39
41
  this.events = new EventEmitter();
@@ -178,6 +180,10 @@ export class PdftronComponent {
178
180
  this.webViewerInstance.annotManager.exportAnnotations().then(exctractedAnotations => {
179
181
  this.onAddingAnotation.emit(exctractedAnotations);
180
182
  });
183
+ // if tracking signature location is enable then emit signature outside with every changes in it
184
+ if (this.trackSignature) {
185
+ this.onSignatureTracking.emit({ anotations: annotations, action: action });
186
+ }
181
187
  });
182
188
  }
183
189
  importSignature() {
@@ -675,7 +681,7 @@ export class PdftronComponent {
675
681
  }
676
682
  }
677
683
  PdftronComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.4", ngImport: i0, type: PdftronComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.PdftronService }, { token: i2.NuxeoService }, { token: APP_BASE_HREF }, { token: i3.SecurePipe }, { token: i4.TranslationService }, { token: 'environment' }], target: i0.ɵɵFactoryTarget.Component });
678
- PdftronComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.4", type: PdftronComponent, selector: "app-pdftron", inputs: { editMode: "editMode", actionClicked: "actionClicked", fileTitle: "fileTitle", docId: "docId", DOCUMENT_TYPE: "DOCUMENT_TYPE", fileData: "fileData", fitMode: "fitMode", authHeader: "authHeader", fileURL: "fileURL", correspondance: "correspondance", secrecyProperty: "secrecyProperty", editingType: "editingType", userSignatures: "userSignatures", searchString: "searchString", useOutsideAnotations: "useOutsideAnotations", importedAnotations: "importedAnotations" }, outputs: { onAddingAnotation: "onAddingAnotation", events: "events", SignatureEvent: "SignatureEvent" }, providers: [SecurePipe], viewQueries: [{ propertyName: "viewerRef", first: true, predicate: ["fileViewer"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div #fileViewer style=\"width: 100%; height: 100%;\"></div>\r\n", styles: [""] });
684
+ PdftronComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.4", type: PdftronComponent, selector: "app-pdftron", inputs: { editMode: "editMode", actionClicked: "actionClicked", fileTitle: "fileTitle", docId: "docId", DOCUMENT_TYPE: "DOCUMENT_TYPE", fileData: "fileData", fitMode: "fitMode", authHeader: "authHeader", fileURL: "fileURL", correspondance: "correspondance", secrecyProperty: "secrecyProperty", editingType: "editingType", userSignatures: "userSignatures", searchString: "searchString", trackSignature: "trackSignature", useOutsideAnotations: "useOutsideAnotations", importedAnotations: "importedAnotations" }, outputs: { onSignatureTracking: "onSignatureTracking", onAddingAnotation: "onAddingAnotation", events: "events", SignatureEvent: "SignatureEvent" }, providers: [SecurePipe], viewQueries: [{ propertyName: "viewerRef", first: true, predicate: ["fileViewer"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div #fileViewer style=\"width: 100%; height: 100%;\"></div>\r\n", styles: [""] });
679
685
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.4", ngImport: i0, type: PdftronComponent, decorators: [{
680
686
  type: Component,
681
687
  args: [{
@@ -721,6 +727,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.4", ngImpor
721
727
  type: Input
722
728
  }], searchString: [{
723
729
  type: Input
730
+ }], trackSignature: [{
731
+ type: Input
732
+ }], onSignatureTracking: [{
733
+ type: Output
724
734
  }], useOutsideAnotations: [{
725
735
  type: Input
726
736
  }], importedAnotations: [{
@@ -732,4 +742,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.4", ngImpor
732
742
  }], SignatureEvent: [{
733
743
  type: Output
734
744
  }] } });
735
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGRmdHJvbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9udXhlby1kZXZlbG9wbWVudC1mcmFtZXdvcmsvc3JjL2xpYi9jb21wb25lbnRzL3BkZi10cm9uL3BkZnRyb24vcGRmdHJvbi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9udXhlby1kZXZlbG9wbWVudC1mcmFtZXdvcmsvc3JjL2xpYi9jb21wb25lbnRzL3BkZi10cm9uL3BkZnRyb24vcGRmdHJvbi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUdMLFNBQVMsRUFFVCxZQUFZLEVBQ1osTUFBTSxFQUNOLEtBQUssRUFJTCxNQUFNLEVBQ04sU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sU0FBMkIsTUFBTSxvQkFBb0IsQ0FBQztBQUc3RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDaEQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLDRCQUE0QixDQUFDOzs7Ozs7QUFLeEQ7Ozs7Ozs7Ozs7OztHQVlHO0FBT0gsTUFBTSxPQUFPLGdCQUFnQjtJQTZDM0IsWUFDUyxHQUFzQixFQUNyQixjQUE4QixFQUM5QixLQUFtQixFQUNJLFFBQWdCLEVBQ3ZDLFVBQXNCLEVBQ3RCLGtCQUF1QyxFQUNoQixXQUFXO1FBTm5DLFFBQUcsR0FBSCxHQUFHLENBQW1CO1FBQ3JCLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQUM5QixVQUFLLEdBQUwsS0FBSyxDQUFjO1FBQ0ksYUFBUSxHQUFSLFFBQVEsQ0FBUTtRQUN2QyxlQUFVLEdBQVYsVUFBVSxDQUFZO1FBQ3RCLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBcUI7UUFDaEIsZ0JBQVcsR0FBWCxXQUFXLENBQUE7UUE3Q25DLGtCQUFhLEdBQUcsS0FBSyxDQUFDLENB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QixrRUFDQTsyRkR5Q2EsZ0JBQWdCO2tCQU41QixTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxhQUFhO29CQUN2QixXQUFXLEVBQUUsMEJBQTBCO29CQUN2QyxTQUFTLEVBQUUsQ0FBQywwQkFBMEIsQ0FBQztvQkFDdkMsU0FBUyxFQUFFLENBQUMsVUFBVSxDQUFDO2lCQUN4Qjs7MEJBa0RJLE1BQU07MkJBQUMsYUFBYTs7MEJBR3BCLE1BQU07MkJBQUMsYUFBYTs0Q0FsREUsU0FBUztzQkFBakMsU0FBUzt1QkFBQyxZQUFZO2dCQUl2QixRQUFRO3NCQURQLEtBQUs7Z0JBRUcsYUFBYTtzQkFBckIsS0FBSztnQkFLTixTQUFTO3NCQURSLEtBQUs7Z0JBSU4sS0FBSztzQkFESixLQUFLO2dCQUdOLGFBQWE7c0JBRFosS0FBSztnQkFHTixRQUFRO3NCQURQLEtBQUs7Z0JBR04sT0FBTztzQkFETixLQUFLO2dCQUdOLFVBQVU7c0JBRFQsS0FBSztnQkFHTixPQUFPO3NCQUROLEtBQUs7Z0JBR04sY0FBYztzQkFEYixLQUFLO2dCQUdHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxjQUFjO3NCQUF0QixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBRUcsb0JBQW9CO3NCQUE1QixLQUFLO2dCQUNHLGtCQUFrQjtzQkFBMUIsS0FBSztnQkFDSSxpQkFBaUI7c0JBQTFCLE1BQU07Z0JBRVAsTUFBTTtzQkFETCxNQUFNO2dCQUVHLGNBQWM7c0JBQXZCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIEFmdGVyVmlld0luaXQsXHJcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgQ29tcG9uZW50LFxyXG4gIEVsZW1lbnRSZWYsXHJcbiAgRXZlbnRFbWl0dGVyLFxyXG4gIEluamVjdCxcclxuICBJbnB1dCxcclxuICBPbkNoYW5nZXMsXHJcbiAgT25EZXN0cm95LFxyXG4gIE9uSW5pdCxcclxuICBPdXRwdXQsXHJcbiAgVmlld0NoaWxkLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgV2ViVmlld2VyLCB7IENvcmVDb250cm9scyB9IGZyb20gJ0BwZGZ0cm9uL3dlYnZpZXdlcic7XHJcbmltcG9ydCB7IE51eGVvU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL0NvcmUvc2VydmljZXMvbnV4ZW8vbnV4ZW8uc2VydmljZSc7XHJcbmltcG9ydCB7IFBkZnRyb25TZXJ2aWNlIH0gZnJvbSAnLi9wZGZ0cm9uLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBBUFBfQkFTRV9IUkVGIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgU2VjdXJlUGlwZSB9IGZyb20gJy4uLy4uLy4uL3BpcGVzL3NlY3VyZS5waXBlJztcclxuaW1wb3J0IHsgVGhyb3dTdG10IH0gZnJvbSAnQGFuZ3VsYXIvY29tcGlsZXInO1xyXG5pbXBvcnQgeyBUcmFuc2xhdGlvblNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9Db3JlL3NlcnZpY2VzL3RyYW5zbGF0aW9uL3RyYW5zbGF0aW9uLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcclxuXHJcbi8qKlxyXG4gKiBBIHJldXNhYmxlIGZpbGUgdmlld2VyIGJhc2VkIG9uIFBERlRyb24gTGlicmFyeVxyXG4gKiBAdGl0bGVcclxuICogUERGVHJvbiBWaWV3ZXJcclxuICogQGV4YW1wbGVcclxuICogPGFwcC1wZGZ0cm9uXHJcbiAqICAgW2ZpbGVEYXRhXT1cImZpbGVEYXRhXCJcclxuICogICBbZWRpdE1vZGVdPVwiZmFsc2VcIlxyXG4gKiAgIFtkb2NJZF09XCJmaWxlSWRcIlxyXG4gKiAgIFtmaWxlVGl0bGVdPVwiZmlsZS50aXRsZVwiXHJcbiAqID5cclxuICogPC9hcHAtcGRmdHJvbj5cclxuICovXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnYXBwLXBkZnRyb24nLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9wZGZ0cm9uLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9wZGZ0cm9uLmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgcHJvdmlkZXJzOiBbU2VjdXJlUGlwZV0sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBQZGZ0cm9uQ29tcG9uZW50XHJcbiAgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSwgT25DaGFuZ2VzIHtcclxuICBAVmlld0NoaWxkKCdmaWxlVmlld2VyJykgdmlld2VyUmVmOiBFbGVtZW50UmVmO1xyXG4gIHdlYlZpZXdlckluc3RhbmNlO1xyXG4gIC8qKiBEaXNhYmxlL0VuYWJsZSBBbm5vdGF0aW9uICovXHJcbiAgQElucHV0KClcclxuICBlZGl0TW9kZTogYm9vbGVhbjtcclxuICBASW5wdXQoKSBhY3Rpb25DbGlja2VkID0gZmFsc2U7IC8vIHVzZWQgdG8ga25vdyBpZiB0aGVyZSBpcyBhY3Rpb24gY2xpY2tlZCBvdXRzaWRlIHRvIHN0YXJ0IGVkaXQgbW9kZSBvciBub3RcclxuICBpc0RvY3VtZW50TG9hZGluZzogYm9vbGVhbjtcclxuICBpc0ZldGNoaW5nOiBib29sZWFuO1xyXG4gIC8qKiBEb2N1bWVudCB0aXRsZSAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgZmlsZVRpdGxlOiBzdHJpbmc7XHJcbiAgLyoqIERvY3VtZW50IElEICovXHJcbiAgQElucHV0KClcclxuICBkb2NJZDogc3RyaW5nO1xyXG4gIEBJbnB1dCgpXHJcbiAgRE9DVU1FTlRfVFlQRSA9ICdhcHBsaWNhdGlvbi9wZGYnO1xyXG4gIEBJbnB1dCgpXHJcbiAgZmlsZURhdGE7XHJcbiAgQElucHV0KClcclxuICBmaXRNb2RlOiAnRml0V2lkdGgnIHwgJ0ZpdFBhZ2UnIHwgJ1pvb20nID0gJ0ZpdFdpZHRoJztcclxuICBASW5wdXQoKVxyXG4gIGF1dGhIZWFkZXI6IHN0cmluZztcclxuICBASW5wdXQoKVxyXG4gIGZpbGVVUkw6IHN0cmluZztcclxuICBASW5wdXQoKVxyXG4gIGNvcnJlc3BvbmRhbmNlO1xyXG5cclxuICBASW5wdXQoKSBzZWNyZWN5UHJvcGVydHk7IC8vIHVzZWQgdG8gYWRkIHdhdGVybWFyayBhY29yZGluZyBjZXJ0YWluIHNlY3JlY3kgbGV2ZWxcclxuICBASW5wdXQoKSBlZGl0aW5nVHlwZTtcclxuICBASW5wdXQoKSB1c2VyU2lnbmF0dXJlcztcclxuICBASW5wdXQoKSBzZWFyY2hTdHJpbmcgPSAnJzsgLy8gc3RyaW5nIHRvIHNlYXJjaCBmb3IgaXQgaW4gdGhlIGRvY3VtZW50XHJcblxyXG4gIEBJbnB1dCgpIHVzZU91dHNpZGVBbm90YXRpb25zID0gZmFsc2U7IC8vIGZsYWdlIHRvIGluZGljYXQgaWYgdXNpbmcgb3V0IHNpZGUgYW5vdGF0aW9ucyBvciBub3RcclxuICBASW5wdXQoKSBpbXBvcnRlZEFub3RhdGlvbnMgOyAvLyBpbXBvcnRlZCBhbm90YXRpb25zIGZyb20gb3V0c2lkZVxyXG4gIEBPdXRwdXQoKSBvbkFkZGluZ0Fub3RhdGlvbiA9IG5ldyBFdmVudEVtaXR0ZXIoKTsgLy8gdXNlZCB0byBleHBvcnQgYWxsIGFub3RhdGlvbnMgdG8gb3V0c2lkZVxyXG4gIEBPdXRwdXQoKVxyXG4gIGV2ZW50cyA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgU2lnbmF0dXJlRXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7IC8vIHVzZWQgdG8gZXhwb3J0IHNpZ25hdHVyZSB0byBvdXRzaWRlXHJcbiAgZmlyc3RUaW1lTG9hZCA9IHRydWU7IC8vZmxhZ2UgdG8gY29udHJvbCBpbXBvcnRpbmcgc2lnbmF0dXJlcyBpbiB0aGUgZmlyc3QgdGltZSBsb2FkIG9ubHlcclxuICBmaXJzdFNpZ25hdHVyZUxvYWQgPSB0cnVlOyAvLyBmbGFnZSB0byBwYXNzIGZpcnN0IGxvYWQgb2YgaW1wb3J0ZWQgc2lnbmF0dXJlcyB3aXRob3V0IGVtaXR0aW5nIHRoZSBldmVudCBcclxuICBuZXdTaWduQ3JlYXRpb24gPSBmYWxzZTsgLy8gZmxhZ2UgdG8gaW5kaWNhdGUgc2lnbmF0dXJlIGNyZWF0aW9uIGlzIGNyZWF0ZWQgb3IgY2hvb3NlZCBmcm9tIHN0b3JlZCBvbmVzXHJcbiAgdHJhbnNlbGF0aW9uU3Vic2NyaXRpb24gOiBTdWJzY3JpcHRpb247XHJcbiAgaXNBcmFiaWM7XHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwdWJsaWMgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcclxuICAgIHByaXZhdGUgcGRmdHJvblNlcnZpY2U6IFBkZnRyb25TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBudXhlbzogTnV4ZW9TZXJ2aWNlLFxyXG4gICAgQEluamVjdChBUFBfQkFTRV9IUkVGKSBwcml2YXRlIGJhc2VIcmVmOiBzdHJpbmcsXHJcbiAgICBwcml2YXRlIHNlY3VyZVBpcGU6IFNlY3VyZVBpcGUsXHJcbiAgICBwcml2YXRlIHRyYW5zbGF0aW9uU2VydmljZSA6IFRyYW5zbGF0aW9uU2VydmljZSxcclxuICAgIEBJbmplY3QoJ2Vudmlyb25tZW50JykgcHJpdmF0ZSBlbnZpcm9ubWVudFxyXG4gICkgeyB9XHJcblxyXG4gIGFzeW5jIG5nT25Jbml0KCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgdGhpcy50cmFuc2VsYXRpb25TdWJzY3JpdGlvbiA9IHRoaXMudHJhbnNsYXRpb25TZXJ2aWNlLmlzQXJhYmljLnN1YnNjcmliZShyZXMgPT4ge1xyXG4gICAgICB0aGlzLmlzQXJhYmljID0gcmVzIDtcclxuICAgIH0pXHJcbiAgIH1cclxuXHJcbiAgYXN5bmMgbmdBZnRlclZpZXdJbml0KCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgdGhpcy5yZWNpdmVkU2VhcmNoU3RyaW5nc0FycmF5ID0gdGhpcy5zZWFyY2hTdHJpbmcudHJpbSgpID8gdGhpcy5zZWFyY2hTdHJpbmcuc3BsaXQoJywnKSA6IFtdO1xyXG5cclxuICAgIGlmICh0aGlzLmZpbGVUaXRsZS5lbmRzV2l0aCgnLnBwdCcpKSB7XHJcbiAgICAgIHRoaXMuRE9DVU1FTlRfVFlQRSA9ICdhcHBsaWNhdGlvbi92bmQubXMtcG93ZXJwb2ludCc7XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuZmlsZVRpdGxlLmVuZHNXaXRoKCcucHB0eCcpKSB7XHJcbiAgICAgIHRoaXMuRE9DVU1FTlRfVFlQRSA9XHJcbiAgICAgICAgJ2FwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5wcmVzZW50YXRpb25tbC5wcmVzZW50YXRpb24nO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLmZpbGVUaXRsZS5lbmRzV2l0aCgnLmRvYycpKSB7XHJcbiAgICAgIHRoaXMuRE9DVU1FTlRfVFlQRSA9ICdhcHBsaWNhdGlvbi9tc3dvcmQnO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLmZpbGVUaXRsZS5lbmRzV2l0aCgnLmRvY3gnKSkge1xyXG4gICAgICB0aGlzLkRPQ1VNRU5UX1RZUEUgPVxyXG4gICAgICAgICdhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQud29yZHByb2Nlc3NpbmdtbC5kb2N1bWVudCc7XHJcbiAgICB9XHJcbiAgICBXZWJWaWV3ZXIoXHJcbiAgICAgIHtcclxuICAgICAgICBwYXRoOiB0aGlzLmJhc2VIcmVmICsgJy9hc3NldHMvcGRmdHJvbnMnLFxyXG4gICAgICAgIGZvcmNlQ2xpZW50U2lkZUluaXQ6IHRydWUsXHJcbiAgICAgICAgc3RyZWFtaW5nOiB0cnVlLFxyXG4gICAgICAgIGxpY2Vuc2VLZXk6IHRoaXMuZW52aXJvbm1lbnQucGRmdHJvbkxpY2VuY2VLZXksXHJcbiAgICAgICAgY3NzOiB0aGlzLmlzQXJhYmljID8gKHRoaXMuYmFzZUhyZWYgKyAnL2Fzc2V0cy9zdHlsZXMvYXItbXlwZGZ0cm9uLmNzcycpIDogKHRoaXMuYmFzZUhyZWYgKyAnL2Fzc2V0cy9zdHlsZXMvZW4tbXlwZGZ0cm9uLmNzcycpLFxyXG4gICAgICAgIGFubm90YXRpb25Vc2VyOiB0aGlzLm51eGVvLm51eGVvQ2xpZW50LnVzZXIucHJvcGVydGllcy5maXJzdE5hbWUgKyAnICcgKyB0aGlzLm51eGVvLm51eGVvQ2xpZW50LnVzZXIucHJvcGVydGllcy5sYXN0TmFtZSxcclxuICAgICAgICBkaXNhYmxlZEVsZW1lbnRzOiBbJ2Rvd25sb2FkQnV0dG9uJywgJ3ByaW50QnV0dG9uJ10sXHJcblxyXG4gICAgICB9LFxyXG4gICAgICB0aGlzLnZpZXdlclJlZi5uYXRpdmVFbGVtZW50XHJcbiAgICApLnRoZW4oYXN5bmMgKGluc3RhbmNlKSA9PiB7XHJcbiAgICAgIHRoaXMuaXNBcmFiaWMgPyBpbnN0YW5jZS5zZXRMYW5ndWFnZSgnYXInKSA6IGluc3RhbmNlLnNldExhbmd1YWdlKCdlbicpIDtcclxuICAgICAgdGhpcy5wZGZ0cm9uU2VydmljZS5pbnN0YW5jZSA9IHRoaXMud2ViVmlld2VySW5zdGFuY2UgPSBpbnN0YW5jZTtcclxuICAgICAgaWYodGhpcy5jb3JyZXNwb25kYW5jZS5mYWNldHMuaW5kZXhPZignY3RvY3InKSA+IC0xKXtcclxuICAgICAgICB0aGlzLmZpbGVXaXRoT2NyID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnBhZ2VzID0gSlNPTi5wYXJzZSh0aGlzLmNvcnJlc3BvbmRhbmNlLnByb3BlcnRpZXNbJ2N0b2NyOnJlY29nbml6ZWRKc29uJ10pO1xyXG4gICAgICAgIC8vIG92ZXJyaWRlIHNlYXJjaCBmdW50aW9uIHRvIHVzZSBvdXIgc2VhcmNoIGluIG9jciBub3QgZGVmdWx0IHNlYXJjaFxyXG4gICAgICAgIGluc3RhbmNlLm92ZXJyaWRlU2VhcmNoRXhlY3V0aW9uKHRoaXMuc2VhcmNoRm4pO1xyXG4gICAgICAgIH1lbHNle1xyXG4gICAgICAgIC8vIGlmIG5vIG9jciB0aGVuIGFkZCBzZWFyY2ggbGlzbmVyIHRvIGxpc25lIHRvIGludGVybmFsIHNlYXJjaCBhbmQgY2F0Y2ggcmVzdWx0c1xyXG4gICAgICAgICAgICB0aGlzLmFkZFNlYXJjaExpc3RuZXIoKTtcclxuICAgICAgICB9XHJcbiAgICAgIHRoaXMuYWRkUHJpbnRCdXR0b24oKTtcclxuICAgICAgdGhpcy5hZGREb3dubG9hZEJ1dHRvbigpO1xyXG4gICAgICB0aGlzLmltcG9ydFNpZ25hdHVyZSgpO1xyXG4gICAgICB0aGlzLmV4cG9ydGluZ1NpZ25hdHVyZSgpO1xyXG4gICAgICB0aGlzLmRlbGV0ZUFubm90YXRpb24oKTtcclxuICAgICAgdGhpcy5leHBvcnRpbmdTYXZlZFNpZ25hdHVyZSgpO1xyXG4gICAgICBpZih0aGlzLnVzZU91dHNpZGVBbm90YXRpb25zKXtcclxuICAgICAgICB0aGlzLmltcG9ydEFub3RhdGlvbnNGcm9tT3V0c2lkZSgpO1xyXG4gICAgICAgIHRoaXMuZXhwb3J0QW5vdGF0aW9uc1RvT3V0c2lkZSgpO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMud2ViVmlld2VySW5zdGFuY2UuZG9jVmlld2VyLnNldFNlYXJjaEhpZ2hsaWdodENvbG9ycyh7XHJcbiAgICAgICAgLy8gc2V0U2VhcmNoSGlnaGxpZ2h0Q29sb3JzIGFjY2VwdHMgYm90aCBBbm5vdGF0aW9ucy5Db2xvciBvYmplY3RzIG9yICdyZ2JhJyBzdHJpbmdzXHJcbiAgICAgICAgc2VhcmNoUmVzdWx0OiBuZXcgdGhpcy53ZWJWaWV3ZXJJbnN0YW5jZS5Bbm5vdGF0aW9ucy5Db2xvcigyNTAsMjA2LDAsMC41MDE5NiksXHJcbiAgICAgICAgYWN0aXZlU2VhcmNoUmVzdWx0OiBuZXcgdGhpcy53ZWJWaWV3ZXJJbnN0YW5jZS5Bbm5vdGF0aW9ucy5Db2xvcigyNTAsMjA2LDAsMC41MDE5NiksXHJcbiAgICAgIH0pO1xyXG4gICAgICBpZih0aGlzLnJlY2l2ZWRTZWFyY2hTdHJpbmdzQXJyYXkubGVuZ3RoICE9PSAwKXtcclxuICAgICAgICB0aGlzLmF1dG9tYXRpY1NlYXJjaCh0aGlzLnJlY2l2ZWRTZWFyY2hTdHJpbmdzQXJyYXkpO1xyXG4gICAgfVxyXG4gICAgICB0aGlzLmxvYWREb2N1bWVudCgpO1xyXG5cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgaW1wb3J0QW5vdGF0aW9uc0Zyb21PdXRzaWRlKCl7XHJcbiAgICBjb25zdCBkb2N1bWVudFZpZXdlciA9IHRoaXMud2ViVmlld2VySW5zdGFuY2UuZG9jVmlld2VyO1xyXG5cclxuICAgIGRvY3VtZW50Vmlld2VyLm9uKCdkb2N1bWVudExvYWRlZCcsICgpID0+IHtcclxuICAgICAgdGhpcy53ZWJWaWV3ZXJJbnN0YW5jZS5hbm5vdE1hbmFnZXIuaW1wb3J0QW5ub3RhdGlvbnModGhpcy5pbXBvcnRlZEFub3RhdGlvbnMpXHJcbiAgICB9KVxyXG4gICAgLy8gLnRoZW4oYW5ub3RhdGlvbnMgPT4ge1xyXG4gICAgLy8gICBhbm5vdGF0aW9ucy5mb3JFYWNoKGFubm90YXRpb24gPT4ge1xyXG4gICAgLy8gICAgIHRoaXMud2ViVmlld2VySW5zdGFuY2UuYW5ub3RNYW5hZ2VyLnJlZHJhd0Fubm90YXRpb24oYW5ub3RhdGlvbik7XHJcbiAgICAvLyAgIH0pO1xyXG4gICAgLy8gfSk7XHJcbiAgfVxyXG5cclxuICAvLyBleGN0cmFjdCBhbGwgYW5vdGF0aW9ucyBvbiB0aGUgZmlsZSBhbmQgc2VuZCBpdCBvdXQgc2lkZSB0byBiZSBzYXZlZCBhbmQgbGVhdmUgdGhlIGZpbGUgYXMgaXQgaXMgd2l0aG91dCBhbnkgYW5vdGF0aW9ucyBvbiBpdFxyXG4gIGV4cG9ydEFub3RhdGlvbnNUb091dHNpZGUoKXtcclxuICAgIHRoaXMud2ViVmlld2VySW5zdGFuY2UuYW5ub3RNYW5hZ2VyLm9uKCdhbm5vdGF0aW9uQ2hhbmdlZCcsIChhbm5vdGF0aW9ucywgYWN0aW9uLCB7IGltcG9ydGVkIH0pID0+IHtcclxuICAgICAgaWYgKGltcG9ydGVkKSByZXR1cm47XHJcbiAgICAgIHRoaXMud2ViVmlld2VySW5zdGFuY2UuYW5ub3RNYW5hZ2VyLmV4cG9ydEFubm90YXRpb25zKCkudGhlbihleGN0cmFjdGVkQW5vdGF0aW9ucyA9PiB7XHJcbiAgICAgICAgdGhpcy5vbkFkZGluZ0Fub3RhdGlvbi5lbWl0KGV4Y3RyYWN0ZWRBbm90YXRpb25zKTtcclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGltcG9ydFNpZ25hdHVyZSgpIHtcclxuICAgIGNvbnN0IGRvY3VtZW50Vmlld2VyID0gdGhpcy53ZWJWaWV3ZXJJbnN0YW5jZS5kb2NWaWV3ZXI7XHJcbiAgICBjb25zdCBzaWduYXR1cmVUb29sID0gZG9jdW1lbnRWaWV3ZXIuZ2V0VG9vbCgnQW5ub3RhdGlvbkNyZWF0ZVNpZ25hdHVyZScpO1xyXG5cclxuICAgIGRvY3VtZW50Vmlld2VyLm9uKCdkb2N1bWVudExvYWRlZCcsICgpID0+IHtcclxuICAgICAgaWYodGhpcy5maXJzdFRpbWVMb2FkKXtcclxuICAgICAgICBzaWduYXR1cmVUb29sLmltcG9ydFNpZ25hdHVyZXMoWy4uLnRoaXMudXNlclNpZ25hdHVyZXNdKTtcclxuICAgICAgICB0aGlzLmZpcnN0VGltZUxvYWQgPSBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgfSlcclxuICB9XHJcbiAgXHJcbiAgZXhwb3J0aW5nU2F2ZWRTaWduYXR1cmUoKSB7XHJcbiAgICBjb25zdCBkb2N1bWVudFZpZXdlciA9IHRoaXMud2ViVmlld2VySW5zdGFuY2UuZG9jVmlld2VyO1xyXG4gICAgY29uc3QgU2lnbmF0dXJlQ3JlYXRlVG9vbCA9IGRvY3VtZW50Vmlld2VyLmdldFRvb2woJ0Fubm90YXRpb25DcmVhdGVTaWduYXR1cmUnKVxyXG4gICAgU2lnbmF0dXJlQ3JlYXRlVG9vbC5vbignc2lnbmF0dXJlU2F2ZWQnLCAoYW5ub3RhdGlvbikgPT4ge1xyXG4gICAgICBpZighdGhpcy5maXJzdFNpZ25hdHVyZUxvYWQpe1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCdzaWduYXR1cmUgc2F2ZWQgdHJpZ2VyZWQnKTtcclxuICAgICAgICB0aGlzLm5ld1NpZ25DcmVhdGlvbiA9IHRydWU7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5maXJzdFNpZ25hdHVyZUxvYWQgPSBmYWxzZTtcclxuICAgIH0pOztcclxuICB9XHJcbiAgXHJcbiAgZXhwb3J0aW5nU2lnbmF0dXJlKCkge1xyXG4gICAgY29uc3QgZG9jdW1lbnRWaWV3ZXIgPSB0aGlzLndlYlZpZXdlckluc3RhbmNlLmRvY1ZpZXdlcjtcclxuICAgIGNvbnN0IFNpZ25hdHVyZUNyZWF0ZVRvb2wgPSBkb2N1bWVudFZpZXdlci5nZXRUb29sKCdBbm5vdGF0aW9uQ3JlYXRlU2lnbmF0dXJlJylcclxuICAgIFNpZ25hdHVyZUNyZWF0ZVRvb2wub24oJ2Fubm90YXRpb25BZGRlZCcsIChhbm5vdGF0aW9uKSA9PiB7XHJcbiAgICAgIGlmIChhbm5vdGF0aW9uICYmIHRoaXMubmV3U2lnbkNyZWF0aW9uKSB7XHJcbiAgICAgICAgdGhpcy5uZXdTaWduQ3JlYXRpb24gPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmV4dHJhY3RBbm90YXRpb24oYW5ub3RhdGlvbiAsIGRvY3VtZW50Vmlld2VyKTtcclxuICAgICAgICBjb25zb2xlLmxvZyhhbm5vdGF0aW9uKVxyXG4gICAgICB9XHJcbiAgICB9KTs7XHJcbiAgfVxyXG5cclxuICBleHRyYWN0QW5vdGF0aW9uKGFubm90YXRpb24gLCBkb2N1bWVudFZpZXdlcil7XHJcbiAgICBpZihhbm5vdGF0aW9uWydpbWFnZSddKXtcclxuICAgICAgLy8gY29udmVydCBiYXNlNjQgc2lnbmF0dXJlIGludG8gZmlsZSBhbmQgZW1pdCBpdCB0byBvdXQgc2lkZSBcclxuICAgICAgbGV0IGJhc2U2NEltZyA9IGFubm90YXRpb25bJ2ltYWdlJ11bJ2N1cnJlbnRTcmMnXTtcclxuICAgICAgdmFyIGFyciA9IGJhc2U2NEltZy5zcGxpdCgnLCcpLFxyXG4gICAgICBtaW1lID0gYXJyWzBdLm1hdGNoKC86KC4qPyk7LylbMV0sXHJcbiAgICAgIGJzdHIgPSBhdG9iKGFyclsxXSksIFxyXG4gICAgICBuID0gYnN0ci5sZW5ndGgsIFxyXG4gICAgICB1OGFyciA9IG5ldyBVaW50OEFycmF5KG4pO1xyXG4gICAgICB3aGlsZShuLS0pe1xyXG4gICAgICAgICAgdThhcnJbbl0gPSBic3RyLmNoYXJDb2RlQXQobik7XHJcbiAgICAgIH1cclxuICAgICAgbGV0IG5hbWUgPSBtaW1lLnJlcGxhY2UoJy8nICwgJy4nKVxyXG4gICAgICBsZXQgbXlGaWxlID0gbmV3IEZpbGUoW3U4YXJyXSwgJ215U2lnbmF0dXJlLnBuZycsIHt0eXBlOm1pbWV9KTtcclxuICAgICAgdGhpcy5TaWduYXR1cmVFdmVudC5lbWl0KHsgZGF0YTogbXlGaWxlLCBldmVudE5hbWU6ICdleHBvcnQnIH0pO1xyXG5cclxuICAgIH1lbHNle1xyXG4gICAgICB0aGlzLmV4dHJhY3RBbm5vdGF0aW9uU2lnbmF0dXJlKGFubm90YXRpb24gLCBkb2N1bWVudFZpZXdlcilcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGFzeW5jIGV4dHJhY3RBbm5vdGF0aW9uU2lnbmF0dXJlKGFubm90YXRpb24sIGRvY1ZpZXdlcikge1xyXG4gICAgLy8gQ3JlYXRlIGEgbmV3IENhbnZhcyB0byBkcmF3IHRoZSBBbm5vdGF0aW9uIG9uXHJcbiAgICBjb25zdCBjYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcclxuICAgIC8vIFJlZmVyZW5jZSB0aGUgYW5ub3RhdGlvbiBmcm9tIHRoZSBEb2N1bWVudFxyXG4gICAgY29uc3QgcGFnZU1hdHJpeCA9IGRvY1ZpZXdlci5nZXREb2N1bWVudCgpLmdldFBhZ2VNYXRyaXgoYW5ub3RhdGlvbi5QYWdlTnVtYmVyKTtcclxuICAgIC8vIFNldCB0aGUgaGVpZ2h0ICYgd2lkdGggb2YgdGhlIGNhbnZhcyB0byBtYXRjaCB0aGUgYW5ub3RhdGlvblxyXG4gICAgY2FudmFzLmhlaWdodCA9IGFubm90YXRpb24uSGVpZ2h0O1xyXG4gICAgY2FudmFzLndpZHRoID0gYW5ub3RhdGlvbi5XaWR0aDtcclxuICAgIGNvbnN0IGN0eCA9IGNhbnZhcy5nZXRDb250ZXh0KCcyZCcpO1xyXG4gICAgLy8gVHJhbnNsYXRlIHRoZSBBbm5vdGF0aW9uIHRvIHRoZSB0b3AgVG9wIExlZnQgQ29ybmVyIG9mIHRoZSBDYW52YXMgaWUgKDAsIDApXHJcbiAgICBjdHgudHJhbnNsYXRlKC1hbm5vdGF0aW9uLlgsIC1hbm5vdGF0aW9uLlkpO1xyXG4gICAgLy8gRHJhdyB0aGUgQW5ub3RhdGlvbiBvbnRvIHRoZSBDYW52YXNcclxuICAgIGFubm90YXRpb24uZHJhdyhjdHgsIHBhZ2VNYXRyaXgpO1xyXG4gICAgLy8gQ29udmVydCB0aGUgQ2FudmFzIHRvIGEgQmxvYiBPYmplY3QgZm9yIFVwbG9hZFxyXG4gICAgY2FudmFzLnRvQmxvYigoYmxvYikgPT4ge1xyXG4gICAgICAvLyBDYWxsIHlvdXIgQmxvYiBTdG9yYWdlIFVwbG9hZCBGdW5jdGlvblxyXG4gICAgICBsZXQgbmFtZSA9IGJsb2IudHlwZS5yZXBsYWNlKCcvJyAsICcuJylcclxuICAgICAgbGV0IG15RmlsZSA9IG5ldyBGaWxlKFtibG9iXSwgbmFtZSk7XHJcbiAgICAgIHRoaXMuU2lnbmF0dXJlRXZlbnQuZW1pdCh7IGRhdGE6IG15RmlsZSwgZXZlbnROYW1lOiAnZXhwb3J0JyB9KTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgZGVsZXRlQW5ub3RhdGlvbigpIHtcclxuICAgIGNvbnN0IGRvY3VtZW50Vmlld2VyID0gdGhpcy53ZWJWaWV3ZXJJbnN0YW5jZS5kb2NWaWV3ZXI7XHJcbiAgICBjb25zdCBTaWduYXR1cmVDcmVhdGVUb29sID0gZG9jdW1lbnRWaWV3ZXIuZ2V0VG9vbCgnQW5ub3RhdGlvbkNyZWF0ZVNpZ25hdHVyZScpO1xyXG4gICAgU2lnbmF0dXJlQ3JlYXRlVG9vbC5vbignc2lnbmF0dXJlRGVsZXRlZCcsIChhbm5vdGF0aW9uLCBpbmRleCkgPT4ge1xyXG4gICAgICBjb25zb2xlLmxvZygndGhlcmUgd2VyZSBhbm5vdGF0aW9ucyBkZWxldGVkJyk7XHJcbiAgICAgIHRoaXMudXNlclNpZ25hdHVyZXMuc3BsaWNlKGluZGV4ICwgMSk7XHJcbiAgICAgIHRoaXMuU2lnbmF0dXJlRXZlbnQuZW1pdCh7IGRhdGE6IHsgc2lnbmF0dXJlOiBhbm5vdGF0aW9uLCBpbmRleDogaW5kZXggfSwgZXZlbnROYW1lOiAnZGVsZXRlJyB9KTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgYWRkRG93bmxvYWRCdXR0b24oKSB7XHJcbiAgICB0aGlzLndlYlZpZXdlckluc3RhbmNlLnNldEhlYWRlckl0ZW1zKChoZWFkZXIpID0+IHtcclxuICAgICAgaGVhZGVyLnB1c2goe1xyXG4gICAgICAgIHR5cGU6ICdhY3Rpb25CdXR0b24nLFxyXG4gICAgICAgIGltZzogJzxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIGZpbGw9XCJjdXJyZW50Q29sb3JcIiBjbGFzcz1cImJpIGJpLWZpbGUtZWFybWFyay1hcnJvdy1kb3duXCIgdmlld0JveD1cIjAgMCAxNiAxNlwiPiA8cGF0aCBkPVwiTTguNSA2LjVhLjUuNSAwIDAgMC0xIDB2My43OTNMNi4zNTQgOS4xNDZhLjUuNSAwIDEgMC0uNzA4LjcwOGwyIDJhLjUuNSAwIDAgMCAuNzA4IDBsMi0yYS41LjUgMCAwIDAtLjcwOC0uNzA4TDguNSAxMC4yOTNWNi41elwiLz4gPHBhdGggZD1cIk0xNCAxNFY0LjVMOS41IDBINGEyIDIgMCAwIDAtMiAydjEyYTIgMiAwIDAgMCAyIDJoOGEyIDIgMCAwIDAgMi0yek05LjUgM0ExLjUgMS41IDAgMCAwIDExIDQuNWgyVjE0YTEgMSAwIDAgMS0xIDFINGExIDEgMCAwIDEtMS0xVjJhMSAxIDAgMCAxIDEtMWg1LjV2MnpcIi8+PC9zdmc+JyxcclxuICAgICAgICB0aXRsZTogdGhpcy5pc0FyYWJpYyA/ICfYqtmG2LLZitmEJyA6ICdEb3dubG9hZCcsXHJcbiAgICAgICAgb25DbGljazogYXN5bmMgKCkgPT4ge1xyXG4gICAgICAgICAgY29uc3QgeyBEb2N1bWVudFZpZXdlciwgQW5ub3RhdGlvbk1hbmFnZXIsIFNhdmVPcHRpb25zIH0gPSB0aGlzLndlYlZpZXdlckluc3RhbmNlLkNvcmVDb250cm9scztcclxuICAgICAgICAgIC8vIGNvbnN0IHhmZGZTdHJpbmcgPSBhd2FpdCBBbm5vdGF0aW9uTWFuYWdlci5leHBvcnRBbm5vdGF0aW9ucygpO1xyXG4gICAgICAgICAgY29uc3Qgc2F2ZU9wdGlvbnMgPSBTYXZlT3B0aW9ucztcclxuICAgICAgICAgIGNvbnN0IG9wdGlvbnMgPSB7XHJcbiAgICAgICAgICAgIGZpbGVuYW1lOiB0aGlzLmNvcnJlc3BvbmRhbmNlLnRpdGxlID8gdGhpcy5jb3JyZXNwb25kYW5jZS50aXRsZSA6ICdteURvY3VtZW50LnBkZicsXHJcbiAgICAgICAgICAgIC8vIHhmZGZTdHJpbmcsXHJcbiAgICAgICAgICAgIGZsYWdzOiBzYXZlT3B0aW9ucy5MSU5FQVJJWkVELFxyXG4gICAgICAgICAgICBkb3dubG9hZFR5cGU6ICdwZGYnXHJcbiAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgIHRoaXMucGRmdHJvblNlcnZpY2UuaW5zdGFuY2UuZG93bmxvYWRQZGYob3B0aW9ucyk7XHJcbiAgICAgICAgICB0aGlzLmV2ZW50cy5uZXh0KCdkb3dubG9hZCcpO1xyXG4gICAgICAgICAgLy8gbGV0IHVybCA9IHRoaXMuY29ycmVzcG9uZGFuY2UucHJvcGVydGllcy5jb250ZW50LmRhdGE7XHJcbiAgICAgICAgICAvLyBsZXQgZmlsZU5hbWUgPSB0aGlzLmNvcnJlc3BvbmRhbmNlLnByb3BlcnRpZXMuY29udGVudC5uYW1lO1xyXG4gICAgICAgICAgLy8gaWYgKHVybCAmJiBmaWxlTmFtZSkge1xyXG4gICAgICAgICAgLy8gICBsZXQgc2FmZVVybCA9IHRoaXMuc2VjdXJlUGlwZS50cmFuc2Zvcm0odXJsKTtcclxuICAgICAgICAgIC8vICAgc2FmZVVybC5zdWJzY3JpYmUoKHVybDogYW55KSA9PiB7XHJcbiAgICAgICAgICAvLyAgICAgY29uc3QgbGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcclxuICAgICAgICAgIC8vICAgICBsaW5rLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XHJcbiAgICAgICAgICAvLyAgICAgbGluay5ocmVmID0gdXJsLmNoYW5naW5nVGhpc0JyZWFrc0FwcGxpY2F0aW9uU2VjdXJpdHk7XHJcbiAgICAgICAgICAvLyAgICAgbGluay5kb3dubG9hZCA9IGZpbGVOYW1lO1xyXG4gICAgICAgICAgLy8gICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQobGluayk7XHJcbiAgICAgICAgICAvLyAgICAgbGluay5jbGljaygpO1xyXG4gICAgICAgICAgLy8gICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQobGluayk7XHJcbiAgICAgICAgICAvLyAgICAgdGhpcy5ldmVudHMubmV4dCgnZG93bmxvYWQnKTtcclxuICAgICAgICAgIC8vICAgfSk7XHJcbiAgICAgICAgICAvLyB9XHJcbiAgICAgICAgfSxcclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGFkZFByaW50QnV0dG9uKCkge1xyXG4gICAgdGhpcy53ZWJWaWV3ZXJJbnN0YW5jZS5zZXRIZWFkZXJJdGVtcygoaGVhZGVyKSA9PiB7XHJcbiAgICAgIGhlYWRlci5wdXNoKHtcclxuICAgICAgICB0eXBlOiAnYWN0aW9uQnV0dG9uJyxcclxuICAgICAgICBpbWc6ICc8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCI+PGRlZnM+PHN0eWxlPi5jbHMtMXtmaWxsOiNhYmIwYzQ7fTwvc3R5bGU+PC9kZWZzPjx0aXRsZT5pY29uIC0gaGVhZGVyIC0gcHJpbnQgLSBsaW5lPC90aXRsZT48cGF0aCBjbGFzcz1cImNscy0xXCIgZD1cIk0yMCw2SDE4VjJINlY2SDRBMiwyLDAsMCwwLDIsOHY5YTIsMiwwLDAsMCwyLDJINnYzSDE4VjE5aDJhMiwyLDAsMCwwLDItMlY4QTIsMiwwLDAsMCwyMCw2Wk04LDRoOFY2SDhabTgsMTZIOFYxNmg4Wm00LTNIMThWMTRINnYzSDRWOEgyMFptLTQtN2gydjJIMTZabS0zLDBoMnYySDEzWlwiPjwvcGF0aD48L3N2Zz4nLFxyXG4gICAgICAgIHRpdGxlOiB0aGlzLmlzQXJhYmljID8gXCLYt9io2KfYudipXCIgOiAnUHJpbnQnLFxyXG4gICAgICAgIG9uQ2xpY2s6ICgpID0+IHtcclxuICAgICAgICAgIHRoaXMucGRmdHJvblNlcnZpY2UuaW5zdGFuY2UucHJpbnQoKTtcclxuICAgICAgICAgIHRoaXMuZXZlbnRzLm5leHQoJ3ByaW50Jyk7XHJcbiAgICAgICAgfSxcclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGFkZFdhdGVybWFyaygpIHtcclxuICAgIGNvbnN0IHVzZXJpbmZvID0gdGhpcy5udXhlby5udXhlb0NsaWVudC51c2VyLnByb3BlcnRpZXM7XHJcbiAgICB0aGlzLnBkZnRyb25TZXJ2aWNlLmFkZFdhdGVybWFyayhcclxuICAgICAgYCR7dXNlcmluZm8udXNlcm5hbWV9ICAgIGBcclxuICAgICAgLy8gYCR7dXNlcmluZm8uZmlyc3ROYW1lfSAke1xyXG4gICAgICAvLyAgIHVzZXJpbmZvLmxhc3ROYW1lXHJcbiAgICAgIC8vIH0gYFxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIGxvYWREb2N1bWVudCgpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy53ZWJWaWV3ZXJJbnN0YW5jZSB8fCAoIXRoaXMuZmlsZURhdGEgJiYgIXRoaXMuZmlsZVVSTCkpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgY29uc3QgeyBkb2NWaWV3ZXIsIGFubm90TWFuYWdlciwgQW5ub3RhdGlvbnMgfSA9IHRoaXMud2ViVmlld2VySW5zdGFuY2U7XHJcbiAgICBkb2NWaWV3ZXIub24oJ2RvY3VtZW50TG9hZGVkJywgKCkgPT4ge1xyXG4gICAgICBsZXQgZml0TW9kZSA9IHRoaXMud2ViVmlld2VySW5zdGFuY2UuRml0TW9kZS5GaXRXaWR0aDtcclxuICAgICAgaWYgKHRoaXMuZml0TW9kZSA9PT0gJ0ZpdFBhZ2UnKSB7XHJcbiAgICAgICAgZml0TW9kZSA9IHRoaXMud2ViVmlld2VySW5zdGFuY2UuRml0TW9kZS5GaXRQYWdlO1xyXG4gICAgICB9IGVsc2UgaWYgKHRoaXMuZml0TW9kZSA9PT0gJ1pvb20nKSB7XHJcbiAgICAgICAgZml0TW9kZSA9IHRoaXMud2ViVmlld2VySW5zdGFuY2UuRml0TW9kZS5ab29tO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMud2ViVmlld2VySW5zdGFuY2Uuc2V0Rml0TW9kZShmaXRNb2RlKTtcclxuICAgIH0pO1xyXG4gICAgaWYgKCF0aGlzLmVkaXRNb2RlKSB7XHJcbiAgICAgIHRoaXMud2ViVmlld2VySW5zdGFuY2UuYW5ub3RNYW5hZ2VyLnNldFJlYWRPbmx5KHRydWUpO1xyXG4gICAgICAvLyBpbnN0YW5jZS5lbmFibGVUb29scyhbXSk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5maWxlVVJMICYmIHRoaXMuZmlsZVVSTC5sZW5ndGgpIHtcclxuICAgICAgdGhpcy53ZWJWaWV3ZXJJbnN0YW5jZS5sb2FkRG9jdW1lbnQodGhpcy5maWxlVVJMLCB7XHJcbiAgICAgICAgeG9kc3RyZWFtaW5nOnRydWUsXHJcbiAgICAgICAgY3VzdG9tSGVhZGVyczoge1xyXG4gICAgICAgICAgQXV0aG9yaXphdGlvbjogdGhpcy5hdXRoSGVhZGVyLFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgLy8gd2l0aENyZWRlbnRpYWxzOiB0cnVlLFxyXG4gICAgICB9KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMud2ViVmlld2VySW5zdGFuY2UubG9hZERvY3VtZW50KFxyXG4gICAgICAgIG5ldyBCbG9iKFtuZXcgVWludDhBcnJheSh0aGlzLmZpbGVEYXRhKV0sIHsgdHlwZTogdGhpcy5ET0NVTUVOVF9UWVBFIH0pLFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIGZpbGVuYW1lOiB0aGlzLmZpbGVUaXRsZSxcclxuICAgICAgICB9XHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5pc0ZldGNoaW5nID0gZmFsc2U7XHJcbiAgICBpZiAodGhpcy5jb3JyZXNwb25kYW5jZSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIC8vIGlmIHdlIG5lZWQgdG8gY2hlY2sgb24gc2VjcmVjeSBsZXZlbCBmb3IgYWRkaW5nIHdhdGVyIG1hcmsgb3Igbm90IFxyXG4gICAgICBpZiAodGhpcy5lbnZpcm9ubWVudC5lbmFibGVWaWV3ZXJXYXRlck1hcmsgJiYgdGhpcy5zZWNyZWN5UHJvcGVydHkpIHtcclxuICAgICAgICAvLyBjaGVjayBmb3Igc2VjcmVjeSBsZXZlbCBiZWZvciBhZGRpbmcgd2F0ZXJtYXJrXHJcbiAgICAgICAgaWYgKHRoaXMuY29ycmVzcG9uZGFuY2UucHJvcGVydGllc1t0aGlzLnNlY3JlY3lQcm9wZXJ0eV0gJiYgdGhpcy5jb3JyZXNwb25kYW5jZS5wcm9wZXJ0aWVzW3RoaXMuc2VjcmVjeVByb3BlcnR5XSAhPT0gJ05vcm1hbCcpIHtcclxuICAgICAgICAgIHRoaXMuYWRkV2F0ZXJtYXJrKClcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSBpZiAodGhpcy5lbnZpcm9ubWVudC5lbmFibGVWaWV3ZXJXYXRlck1hcmsgJiYgIXRoaXMuc2VjcmVjeVByb3BlcnR5KSB7XHJcbiAgICAgICAgdGhpcy5hZGRXYXRlcm1hcmsoKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgZXhwb3J0QXNCbG9iKCk6IFByb21pc2U8QmxvYj4ge1xyXG4gICAgY29uc3QgZG9jID0gdGhpcy53ZWJWaWV3ZXJJbnN0YW5jZS5kb2NWaWV3ZXIuZ2V0RG9jdW1lbnQoKTtcclxuICAgIGNvbnN0IHhmZGZTdHJpbmcgPVxyXG4gICAgICBhd2FpdCB0aGlzLndlYlZpZXdlckluc3RhbmNlLmFubm90TWFuYWdlci5leHBvcnRBbm5vdGF0aW9ucygpO1xyXG4gICAgY29uc3QgZGF0YSA9IGF3YWl0IGRvYy5nZXRGaWxlRGF0YSh7XHJcbiAgICAgIC8vIHNhdmVzIHRoZSBkb2N1bWVudCB3aXRoIGFubm90YXRpb25zIGluIGl0XHJcbiAgICAgIHhmZGZTdHJpbmcsXHJcbiAgICB9KTtcclxuICAgIGNvbnN0IGFyciA9IG5ldyBVaW50OEFycmF5KGRhdGEpO1xyXG4gICAgY29uc3QgYmxvYiA9IG5ldyBCbG9iKFthcnJdLCB7IHR5cGU6IHRoaXMuRE9DVU1FTlRfVFlQRSB9KTtcclxuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoYmxvYik7XHJcbiAgfVxyXG5cclxuICB0b2dnbGVFZGl0KCk6IHZvaWQge1xyXG4gICAgaWYgKCF0aGlzLmFjdGlvbkNsaWNrZWQpIHtcclxuICAgICAgLy8gYWN0aW9uIGNsaWNrZWQgaXMgbm90IGNsaWNrZWQgdGhlbiBubyB1cGRhdGUgbW9kZSBvcGVuZWRcclxuICAgICAgdGhpcy53ZWJWaWV3ZXJJbnN0YW5jZS5kaXNhYmxlRWxlbWVudHMoW1xyXG4gICAgICAgICd0b29sYmFyR3JvdXAtU2hhcGVzJyxcclxuICAgICAgICAndG9vbGJhckdyb3VwLUVkaXQnLFxyXG4gICAgICAgICd0b29sYmFyR3JvdXAtSW5zZXJ0JyxcclxuICAgICAgICAndG9vbGJhckdyb3VwLUFubm90YXRlJyxcclxuICAgICAgXSk7XHJcbiAgICAgIHRoaXMud2ViVmlld2VySW5zdGFuY2UuYW5ub3RNYW5hZ2VyLnNldFJlYWRPbmx5KHRydWUpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLy8gZWRpdCBtb2RlIG9wZW5lZCBhbmQgbXVzdCBiZSB3aGVuIGFjdGlvbiBpcyBjbGlja2VkXHJcbiAgICAgIGlmICh0aGlzLmVkaXRpbmdUeXBlKSB7XHJcbiAgICAgICAgdGhpcy53ZWJWaWV3ZXJJbnN0YW5jZS5kaXNhYmxlRWxlbWVudHMoW1xyXG4gICAgICAgICAgJ3Rvb2xiYXJHcm91cC1TaGFwZXMnLFxyXG4gICAgICAgICAgJ3Rvb2xiYXJHcm91cC1FZGl0JyxcclxuICAgICAgICAgICd0b29sYmFyR3JvdXAtSW5zZXJ0JyxcclxuICAgICAgICAgICd0b29sYmFyR3JvdXAtQW5ub3RhdGUnLFxyXG4gICAgICAgIF0pO1xyXG4gICAgICAgIGxldCBncm91cCA7XHJcbiAgICAgICAgaWYodGhpcy5lZGl0aW5nVHlwZSA9PT0gJ3NpZ25Eb2MnKXtcclxuICAgICAgICAgIHRoaXMud2ViVmlld2VySW5zdGFuY2UuZW5hYmxlRWxlbWVudHMoW1xyXG4gICAgICAgICAgICAndG9vbGJhckdyb3VwLUluc2VydCdcclxuICAgICAgICAgIF0pO1xyXG5cclxuICAgICAgICB9ZWxzZSBpZih0aGlzLmVkaXRpbmdUeXBlID09PSAnYW5ub3RhdGUnKXtcclxuICAgICAgICAgIHRoaXMud2ViVmlld2VySW5zdGFuY2UuZW5hYmxlRWxlbWVudHMoW1xyXG4gICAgICAgICAgICAndG9vbGJhckdyb3VwLVNoYXBlcycsXHJcbiAgICAgICAgICAgICd0b29sYmFyR3JvdXAtRWRpdCcsXHJcbiAgICAgICAgICAgICd0b29sYmFyR3JvdXAtQW5ub3RhdGUnLFxyXG4gICAgICAgICAgXSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMud2ViVmlld2VySW5zdGFuY2UuZW5hYmxlRWxlbWVudHMoW1xyXG4gICAgICAgICAgJ3Rvb2xiYXJHcm91cC1TaGFwZXMnLFxyXG4gICAgICAgICAgJ3Rvb2xiYXJHcm91cC1FZGl0JyxcclxuICAgICAgICAgICd0b29sYmFyR3JvdXAtSW5zZXJ0JyxcclxuICAgICAgICAgICd0b29sYmFyR3JvdXAtQW5ub3RhdGUnLFxyXG4gICAgICAgIF0pO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMud2ViVmlld2VySW5zdGFuY2UuYW5ub3RNYW5hZ2VyLnNldFJlYWRPbmx5KGZhbHNlKTtcclxuICAgICAgLy8gdGhpcy53ZWJWaWV3ZXJJbnN0YW5jZS5zZXRUb29sYmFyR3JvdXAoJ3Rvb2xiYXJHcm91cC1Bbm5vdGF0ZScpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbmdPbkNoYW5nZXMoY2hhbmdlcyk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMud2ViVmlld2VySW5zdGFuY2UpIHtcclxuICAgICAgdGhpcy50b2dnbGVFZGl0KCk7XHJcbiAgICAgIGlmIChcclxuICAgICAgICBjaGFuZ2VzLnVybEZpbGVDb250ZW50ICYmXHJcbiAgICAgICAgY2hhbmdlcy51cmxGaWxlQ29udGVudC5wcmV2aW91c1ZhbHVlICYmXHJcbiAgICAgICAgY2hhbmdlcy51cmxGaWxlQ29udGVudC5wcmV2aW91c1ZhbHVlICE9PVxyXG4gICAgICAgIGNoYW5nZXMudXJsRmlsZUNvbnRlbnQuY3VycmVudFZhbHVlXHJcbiAgICAgICkge1xyXG4gICAgICAgIHRoaXMubmdPbkRlc3Ryb3koKTtcclxuICAgICAgICB0aGlzLm5nT25Jbml0KCk7XHJcbiAgICAgICAgdGhpcy5uZ0FmdGVyVmlld0luaXQoKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBwZGZUcm9uRXZlbnQoZXZlbnQpIHtcclxuICAgIGlmICh0aGlzW2V2ZW50LmFjdGlvbl0pIHtcclxuICAgICAgLy8gbWV0aG9kIGV4aXN0cyBpbiB0aGUgY29tcG9uZW50XHJcbiAgICAgIC8vICB0aGlzW2V2ZW50LmFjdGlvbl0oZXZlbnQucGFyYW1zKTsgLy8gY2FsbCBpdFxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBzZWFyY2ggcmVzdWx0cyBzZWN0aW9uIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIFxyXG4gIHBhZ2VzOmFueTtcclxuICBzdGFuZGFyZEhlaWdodDtcclxuICBzdGFuZGFyZFdpZHRoO1xyXG4gIHBhZ2VIZWlnaHQ7XHJcbiAgcGFnZVdpZHRoO1xyXG4gIHNhdmVkQW5vdGF0aW9ucyA9IFtdO1xyXG4gIGZpbGVXaXRoT2NyID0gZmFsc2U7XHJcbiAgbmV3QW5ub3RhdGlvbnM9W107XHJcbiAgbXlTZWFyY2hTdHJpbmdSZXN1bHRzID0gW107XHJcbiAgcmVjaXZlZFNlYXJjaFN0cmluZ3NBcnJheSA9IFtdO1xyXG5cclxuICAvLyBhZGRpbmcgc2VhcmNoIGxpc25lciB0byBsaXNlbiB0byBpbnRlcm5hbCBzZWFyY2ggZnJvbSB1aSBhbmQgd2l0aG91dCBvY3JcclxuICBhZGRTZWFyY2hMaXN0bmVyKCkge1xyXG4gICAgY29uc3QgeyBhbm5vdE1hbmFnZXIsIGRvY1ZpZXdlciwgQW5ub3RhdGlvbnMgfSA9IHRoaXMud2ViVmlld2VySW5zdGFuY2U7XHJcbiAgICBjb25zdCBzZWFyY2hMaXN0ZW5lciA9IChzZWFyY2hQYXR0ZXJuLCBvcHRpb25zLCByZXN1bHRzKSA9PiB7XHJcblxyXG4gICAgICAgIHRoaXMubXlTZWFyY2hTdHJpbmdSZXN1bHRzID0gW107XHJcbiAgICAgIGlmKHRoaXMuc2F2ZWRBbm90YXRpb25zLmxlbmd0aCA+IDApe1xyXG4gICAgICAgIHRoaXMuc2F2ZWRBbm90YXRpb25zLm1hcChhbm5vdGF0aW9uID0+IHtcclxuICAgICAgICAgIGFubm90YXRpb24uSGlkZGVuID0gdHJ1ZTtcclxuICAgICAgICAvLyBBbHdheXMgcmVkcmF3IGFubm90YXRpb24gaWYgcmVuZGVyaW5nIHdhcyB1cGRhdGVkXHJcbiAgICAgICAgYW5ub3RNYW5hZ2VyLnJlZHJhd0Fubm90YXRpb24oYW5ub3RhdGlvbik7XHJcbiAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICAgIC8vIGRvbid0IGRvIGFueSBzZWFyY2ggdW50aWwgdGhlcmUgaXMgYSBzZWFyY2ggcGF0dGVyblxyXG4gICAgICBpZihzZWFyY2hQYXR0ZXJuLnRyaW0oKS5sZW5ndGggPiAwKXtcclxuICAgICAgICAgICAgLy8gYWRkIHJlZGFjdGlvbiBhbm5vdGF0aW9uIGZvciBlYWNoIHNlYXJjaCByZXN1bHRcclxuICAgICAgICAgICAgdGhpcy5uZXdBbm5vdGF0aW9ucyA9IHJlc3VsdHMubWFwKHJlc3VsdCA9PiB7XHJcbiAgICAgICAgICAgICAgY29uc3QgYW5ub3RhdGlvbiA9IG5ldyBBbm5vdGF0aW9ucy5UZXh0SGlnaGxpZ2h0QW5ub3RhdGlvbigpO1xyXG4gICAgICAgICAgICAgIGFubm90YXRpb24uUXVhZHMgPSByZXN1bHQucXVhZHMubWFwKHF1YWQgPT4gcXVhZC5nZXRQb2ludHMoKSk7XHJcbiAgICAgICAgICAgICAgYW5ub3RhdGlvbi5QYWdlTnVtYmVyID0gcmVzdWx0LnBhZ2VOdW07XHJcbiAgICAgICAgICAgICAgYW5ub3RhdGlvbi5TdHJva2VDb2xvciA9IG5ldyBBbm5vdGF0aW9ucy5Db2xvcigyNTAsMjA2LDAsMC41MDE5Nik7ICBcclxuICAgICAgICAgICAgICBhbm5vdGF0aW9uLkF1dGhvciA9IHRoaXMud2ViVmlld2VySW5zdGFuY2UuYW5ub3RNYW5hZ2VyLmdldEN1cnJlbnRVc2VyKCk7ICAgICAgXHJcbiAgICAgICAgICAgICAgcmV0dXJuIGFubm90YXRpb247XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB0aGlzLnNhdmVkQW5vdGF0aW9ucy5wdXNoKC4uLnRoaXMubmV3QW5ub3RhdGlvbnMpO1xyXG4gICAgICAgICAgICBhbm5vdE1hbmFnZXIuYWRkQW5ub3RhdGlvbnModGhpcy5uZXdBbm5vdGF0aW9ucyk7XHJcbiAgICAgICAgICAgIGFubm90TWFuYWdlci5kcmF3QW5ub3RhdGlvbnNGcm9tTGlzdCh0aGlzLm5ld0Fubm90YXRpb25zKTtcclxuICAgICAgfWVsc2V7XHJcbiAgICAgICAgZG9jVmlld2VyLmNsZWFyU2VhcmNoUmVzdWx0cygpO1xyXG4gICAgICB9XHJcbiAgICB9O1xyXG5cclxuICAgIGRvY1ZpZXdlci5vbignZG9jdW1lbnRMb2FkZWQnLCAoKSA9PiB7XHJcbiAgICAgIHRoaXMud2ViVmlld2VySW5zdGFuY2UuYWRkU2VhcmNoTGlzdGVuZXIoc2VhcmNoTGlzdGVuZXIpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvLyBwZXJmb3JtIGF1dG9tYXRpYyBzZWFyY2ggd2hlbiBpbnRlcmluZyB0aGUgcGFnZSBcclxuICBhdXRvbWF0aWNTZWFyY2goc2VhcmNoVGV4dEFycmF5KXtcclxuICAgIGNvbnN0IHsgYW5ub3RNYW5hZ2VyLCBkb2NWaWV3ZXIsIEFubm90YXRpb25zIH0gPSB0aGlzLndlYlZpZXdlckluc3RhbmNlO1xyXG4gICAgbGV0IHNlYXJjaE9wdGlvbnM7XHJcbiAgICB0aGlzLndlYlZpZXdlckluc3RhbmNlLm9wZW5FbGVtZW50cyhbJ3NlYXJjaFBhbmVsJ10pO1xyXG4gICAgZG9jVmlld2VyLm9uKCdkb2N1bWVudExvYWRlZCcsICgpID0+IHtcclxuICAgICAgY29uc3QgbW9kZSA9IHRoaXMud2ViVmlld2VySW5zdGFuY2UuQ29yZUNvbnRyb2xzLlNlYXJjaC5Nb2RlLlBBR0VfU1RPUCB8IHRoaXMud2ViVmlld2VySW5zdGFuY2UuQ29yZUNvbnRyb2xzLlNlYXJjaC5Nb2RlLkhJR0hMSUdIVCB8IHRoaXMud2ViVmlld2VySW5zdGFuY2UuQ29yZUNvbnRyb2xzLlNlYXJjaC5Nb2RlLkFNQklFTlRfU1RSSU5HO1xyXG4gICAgICB0aGlzLm15U2VhcmNoU3RyaW5nUmVzdWx0cyA9IFtdOyAvLyBlbXB0eSBteSBzZWFyY2ggcmVzdWx0IHdoZW4gc3RhcnRpbmcgbmV3IHNlYXJjaFxyXG4gICAgICBpZiAodGhpcy5maWxlV2l0aE9jcikge1xyXG4gICAgICAgIFxyXG4gICAgICAgIC8vIGFkZCByZWRhY3Rpb24gYW5ub3RhdGlvbiBmb3IgZWFjaCBzZWFyY2ggcmVzdWx0XHJcbiAgICAgICAgICBjb25zdCBhbm5vdGF0aW9uID0gbmV3IEFubm90YXRpb25zLlRleHRIaWdobGlnaHRBbm5vdGF0aW9uKCk7XHJcbiAgICAgICAgICBzZWFyY2hUZXh0QXJyYXkubWFwKHNlYXJjaFRleHQgPT4ge1xyXG4gICAgICAgICAgICBsZXQgbXlTZWFyY2ggPSBzZWFyY2hUZXh0LnNwbGl0KCcgJyk7XHJcbiAgICAgICAgICAgIGlmKG15U2VhcmNoLmxlbmd0aCA+IDEpe1xyXG4gICAgICAgICAgICAgIC8vIHRoZW4gaSBhbSBzZWFyY2hpbmcgd2l0aCBtb3JlIHRoYW4gb25lIHdvcmRcclxuICAgICAgICAgICAgICB0aGlzLnBhZ2VzLnBhZ2VzLmZvckVhY2goKHBhZ2UgLCBpbmRleCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5wYWdlSGVpZ2h0ID0gcGFnZS5wYWdlX2hlaWdodDtcclxuICAgICAgICAgICAgICAgIHRoaXMucGFnZVdpZHRoID0gcGFnZS5wYWdlX3dpZHRoO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zdGFuZGFyZEhlaWdodCA9IHRoaXMud2ViVmlld2VySW5zdGFuY2UuZG9jVmlld2VyLmdldFBhZ2VIZWlnaHQoKGluZGV4KzEpKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc3RhbmRhcmRXaWR0aCA9IHRoaXMud2ViVmlld2VySW5zdGFuY2UuZG9jVmlld2VyLmdldFBhZ2VXaWR0aCgoaW5kZXgrMSkpO1xyXG4gICAgICAgICAgICAgICAgcGFnZS56b25lcy5mb3JFYWNoKHpvbmUgPT4ge1xyXG4gICAgICAgICAgICAgICAgICB6b25lLnBhcmFncmFwaHMuZm9yRWFjaChwYXJhZ3JhcGggPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHBhcmFncmFwaC5saW5lcy5mb3JFYWNoKGxpbmUgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgaWYobGluZS50ZXh0LmluY2x1ZGVzKHNlYXJjaFRleHQpKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5TZWFyY2hGb3JXb3JkSW5MaW5lKG15U2VhcmNoLGxpbmUsKGluZGV4KzEpICwgcGFnZSlcclxuICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgIC8vIHRoZW4gaSBhbSBzZWFyY2hpbmcgd2l0aCBvbmx5IG9uZSB3b3JkIFxyXG4gICAgICAgICAgICAgIHRoaXMuc2VhcmNoRm9yV29yZEluQWxsUGFnZXMoc2VhcmNoVGV4dClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSlcclxuICAgICAgICAgIGRvY1ZpZXdlci5jbGVhclNlYXJjaFJlc3VsdHMoKTtcclxuICAgICAgICAgIHRoaXMuZGlzcGFsYXlTZWFyY2hSZXN1bHRzKGRvY1ZpZXdlcik7XHJcbiAgICAgIH0gZWxzZXtcclxuICAgICAgICBzZWFyY2hPcHRpb25zID0ge1xyXG4gICAgICAgICAgLy8gSWYgdHJ1ZSwgYSBzZWFyY2ggb2YgdGhlIGVudGlyZSBkb2N1bWVudCB3aWxsIGJlIHBlcmZvcm1lZC4gT3RoZXJ3aXNlLCBhIHNpbmdsZSBzZWFyY2ggd2lsbCBiZSBwZXJmb3JtZWQuXHJcbiAgICAgICAgICBmdWxsU2VhcmNoOiB0cnVlLFxyXG4gICAgICAgICAgLy8gVGhlIGNhbGxiYWNrIGZ1bmN0aW9uIHRoYXQgaXMgY2FsbGVkIHdoZW4gdGhlIHNlYXJjaCByZXR1cm5zIGEgcmVzdWx0LlxyXG4gICAgICAgICAgb25SZXN1bHQ6IHJlc3VsdCA9PiB7XHJcbiAgICAgICAgICAgIC8vIHdpdGggJ1BBR0VfU1RPUCcgbW9kZSwgdGhlIGNhbGxiYWNrIGlzIGludm9rZWQgYWZ0ZXIgZWFjaCBwYWdlIGhhcyBiZWVuIHNlYXJjaGVkLlxyXG4gICAgICAgICAgICBpZiAocmVzdWx0LnJlc3VsdENvZGUgPT09IHRoaXMud2ViVmlld2VySW5zdGFuY2UuQ29yZUNvbnRyb2xzLlNlYXJjaC5SZXN1bHRDb2RlLkZPVU5EKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBhbm5vdGF0aW9uID0gbmV3IEFubm90YXRpb25zLlRleHRIaWdobGlnaHRBbm5vdGF0aW9uKCk7XHJcbiAgICAgICAgICAgICAgICBhbm5vdGF0aW9uLlF1YWRzID0gcmVzdWx0LnF1YWRzLm1hcChxdWFkID0+IHF1YWQuZ2V0UG9pbnRzKCkpO1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coYW5ub3RhdGlvbi5RdWFkcyk7XHJcbiAgICAgICAgICAgICAgICBhbm5vdGF0aW9uLlBhZ2VOdW1iZXIgPSByZXN1bHQucGFnZU51bTtcclxuICAgICAgICAgICAgICAgIGFubm90YXRpb24uU3Ryb2tlQ29sb3IgPSBuZXcgQW5ub3RhdGlvbnMuQ29sb3IoMjUwLDIwNiwwLDAuNTAxOTYpOyAgIFxyXG4gICAgICAgICAgICAgICAgYW5ub3RhdGlvbi5BdXRob3IgPSB0aGlzLndlYlZpZXdlckluc3RhbmNlLmFubm90TWFuYWdlci5nZXRDdXJyZW50VXNlcigpOyAgXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNhdmVkQW5vdGF0aW9ucy5wdXNoKGFubm90YXRpb24pICAgO1xyXG4gICAgICAgICAgICAgICAgYW5ub3RNYW5hZ2VyLmFkZEFubm90YXRpb25zKFthbm5vdGF0aW9uXSk7XHJcbiAgICAgICAgICAgICAgICBhbm5vdE1hbmFnZXIuZHJhd0Fubm90YXRpb25zRnJvbUxpc3QoW2Fubm90YXRpb25dKTtcclxuICAgICAgICAgICAgICAgIGRvY1ZpZXdlci5kaXNwbGF5QWRkaXRpb25hbFNlYXJjaFJlc3VsdHMoW3Jlc3VsdF0pO1xyXG5cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgc2VhcmNoVGV4dEFycmF5Lm1hcChzZWFyY2hlZFRleHQgPT4ge1xyXG4gICAgICAgICAgZG9jVmlld2VyLnRleHRTZWFyY2hJbml0KHNlYXJjaGVkVGV4dCwgbW9kZSwgc2VhcmNoT3B0aW9ucyk7XHJcbiAgICAgICAgfSlcclxuICAgICAgfVxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIC8vIHNlYXJjaCBmb3Igc2luZ2xlIHdvcmQgaW4gYWxsIHBhZ2VzIFxyXG4gIHNlYXJjaEZvcldvcmRJbkFsbFBhZ2VzKHNlYXJjaGVkV29yZCl7XHJcbiAgICB0aGlzLnBhZ2VzLnBhZ2VzLmZvckVhY2goKHBhZ2UgLCBpbmRleCkgPT4ge1xyXG4gICAgICB0aGlzLnBhZ2VIZWlnaHQgPSBwYWdlLnBhZ2VfaGVpZ2h0O1xyXG4gICAgICB0aGlzLnBhZ2VXaWR0aCA9IHBhZ2UucGFnZV93aWR0aDtcclxuICAgICAgdGhpcy5zdGFuZGFyZEhlaWdodCA9IHRoaXMud2ViVmlld2VySW5zdGFuY2UuZG9jVmlld2VyLmdldFBhZ2VIZWlnaHQoKGluZGV4KzEpKTtcclxuICAgICAgdGhpcy5zdGFuZGFyZFdpZHRoID0gdGhpcy53ZWJWaWV3ZXJJbnN0YW5jZS5kb2NWaWV3ZXIuZ2V0UGFnZVdpZHRoKChpbmRleCsxKSk7XHJcbiAgICAgIGNvbnN0IHggPSAodGhpcy5wYWdlV2lkdGggLyB0aGlzLnN0YW5kYXJkV2lkdGgpOyAvLyB3aWR0aCByYXRpb1xyXG4gICAgICBjb25zdCB5ID0gKHRoaXMucGFnZUhlaWdodCAvIHRoaXMuc3RhbmRhcmRIZWlnaHQpOyAvLyBoZWlnaHQgcmF0aW9cclxuICAgICAgcGFnZS56b25lcy5mb3JFYWNoKHpvbmUgPT4ge1xyXG4gICAgICAgIHpvbmUucGFyYWdyYXBocy5mb3JFYWNoKHBhcmFncmFwaCA9PiB7XHJcbiAgICAgICAgICBwYXJhZ3JhcGgubGluZXMuZm9yRWFjaChsaW5lID0+IHtcclxuICAgICAgICAgICAgbGluZS53b3Jkcy5mb3JFYWNoKHdvcmQgPT4ge1xyXG4gICAgICAgICAgICAgIGlmICh3b3JkLnRleHQuaW5jbHVkZXMoc2VhcmNoZWRXb3JkKSkge1xyXG4gICAgICAgICAgICAgICAgLy8gYW5ub3RhdGlvbi5QYWdlTnVtYmVyID0gaW5kZXgrMTtcclxuICAgICAgICAgICAgICAgIGxldCBxdWFkcyA9IFt7XHJcbiAgICAgICAgICAgICAgICAgICAgeDE6ICh3b3JkLmNvb3JkaW5hdGVzLnVwcGVyX2xlZnQueCAvIHgpLFxyXG4gICAgICAgICAgICAgICAgICAgIHgyOiAod29yZC5jb29yZGluYXRlcy5ib3R0b21fcmlnaHQueCAvIHgpLFxyXG4gICAgICAgICAgICAgICAgICAgIHgzOiAod29yZC5jb29yZGluYXRlcy5ib3R0b21fcmlnaHQueCAvIHgpLFxyXG4gICAgICAgICAgICAgICAgICAgIHg0OiAod29yZC5jb29yZGluYXRlcy51cHBlcl9sZWZ0LnggLyB4KSxcclxuICAgICAgICAgICAgICAgICAgICB5MTogKHdvcmQuY29vcmRpbmF0ZXMudXBwZXJfbGVmdC55IC8geSksXHJcbiAgICAgICAgICAgICAgICAgICAgeTI6ICh3b3JkLmNvb3JkaW5hdGVzLnVwcGVyX2xlZnQueSAvIHkpLFxyXG4gICAgICAgICAgICAgICAgICAgIHkzOiAod29yZC5jb29yZGluYXRlcy5ib3R0b21fcmlnaHQueSAvIHkpLFxyXG4gICAgICAgICAgICAgICAgICAgIHk0OiAod29yZC5jb29yZGluYXRlcy5ib3R0b21fcmlnaHQueSAvIHkpLFxyXG4gICAgICAgICAgICAgICAgICB9XVxyXG4gICAgICAgICAgICAgICAgdGhpcy5oaWdsaWdodFRleHQoXHJcbiAgICAgICAgICAgICAgICAgIHF1YWRzLCBcclxuICAgICAgICAgICAgICAgICAgaW5kZXgrMVxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuY29uc3RydWN0U2VhcmNoUmVzdWx0KHNlYXJjaGVkV29yZCAsIGluZGV4KzEgLCBxdWFkcyAsIGxpbmUudGV4dCApO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgICAgfSlcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLy8gc2VhcmNoIGZvciB3b3JkIGluIHNpbmdsZSBsaW5lIFxyXG4gIFNlYXJjaEZvcldvcmRJbkxpbmUobGlzdE9mU2VhcmNoZWRXb3JkcywgbGluZSwgcGFnZW51bWJlciwgcGFnZSkge1xyXG4gICAgdGhpcy5wYWdlSGVpZ2h0ID0gcGFnZS5wYWdlX2hlaWdodDtcclxuICAgIHRoaXMucGFnZVdpZHRoID0gcGFnZS5wYWdlX3dpZHRoO1xyXG4gICAgdGhpcy5zdGFuZGFyZEhlaWdodCA9IHRoaXMud2ViVmlld2VySW5zdGFuY2UuZG9jVmlld2VyLmdldFBhZ2VIZWlnaHQoKHBhZ2VudW1iZXIpKTtcclxuICAgIHRoaXMuc3RhbmRhcmRXaWR0aCA9IHRoaXMud2ViVmlld2VySW5zdGFuY2UuZG9jVmlld2VyLmdldFBhZ2VXaWR0aCgocGFnZW51bWJlcikpO1xyXG4gICAgY29uc3QgeCA9ICh0aGlzLnBhZ2VXaWR0aCAvIHRoaXMuc3RhbmRhcmRXaWR0aCk7IC8vIHdpZHRoIHJhdGlvXHJcbiAgICBjb25zdCB5ID0gKHRoaXMucGFnZUhlaWdodCAvIHRoaXMuc3RhbmRhcmRIZWlnaHQpOyAvLyBoZWlnaHQgcmF0aW9cclxuICAgIC8vIGZpbmQgb25seSB3b3JkcyByZWxhdGVkIHRvIG15IHNlYXJjaCBmb3JtIHRoZSBsaW5lXHJcbiAgICBsZXQgbXlGb3VuZGVkUmVzdWx0cyA9IFtdO1xyXG4gICAgbGV0IGNvcnJlY3RSZXN1bHRzID0gW107XHJcbiAgICBsaW5lLndvcmRzLmZvckVhY2goKHdvcmQsIHdvcmRJbmRleCkgPT4ge1xyXG4gICAgICBpZiAobGlzdE9mU2VhcmNoZWRXb3Jkcy5pbmRleE9mKHdvcmQudGV4dCkgPiAtMSkge1xyXG4gICAgICAgIG15Rm91bmRlZFJlc3VsdHMucHVzaCh7IHdvcmQ6IHdvcmQsIHdvcmRJbmRleDogd29yZEluZGV4IH0pXHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIC8vIGZpbmQgb25seSB3b3JkcyBleGlzdCBpbiBteSBzZWFyY2ggc2VudGVuY2UgYW5kIG5vdCBzaW5nbGUgYW5kIHJlcGVhdGVkIHdvcmRcclxuICAgIG15Rm91bmRlZFJlc3VsdHMubWFwKChyZXN1bHQsIGluZGV4KSA9PiB7XHJcbiAgICAgIGlmICgobXlGb3VuZGVkUmVzdWx0c1tpbmRleF1bJ3dvcmRJbmRleCddIC0gMSA9PT0gKG15Rm91bmRlZFJlc3VsdHNbaW5kZXggLSAxXSAmJiBteUZvdW5kZWRSZXN1bHRzW2luZGV4IC0gMV1bJ3dvcmRJbmRleCddKSkgfHxcclxuICAgICAgICAobXlGb3VuZGVkUmVzdWx0c1tpbmRleCArIDFdICYmIChteUZvdW5kZWRSZXN1bHRzW2luZGV4ICsgMV1bJ3dvcmRJbmRleCddIC0gMSA9PT0gbXlGb3VuZGVkUmVzdWx0c1tpbmRleF1bJ3dvcmRJbmRleCddKSkpIHtcclxuICAgICAgICBjb3JyZWN0UmVzdWx0cy5wdXNoKHJlc3VsdClcclxuICAgICAgfVxyXG4gICAgfSlcclxuXHJcbiAgICAvLyBoaWdobGlodCB0aGVzZSB3b3JkcyBhZnRlciBlbGVtaW5hdGluZyBhbGwgcmVwZWF0ZWQgYW5kIHJlbGF0ZWQgd29yZHNcclxuICAgIC8vIG11c3QgYmUgZm9yIGxvb3Agc3AgaSBjYW4gY29udHJvbCB0aGUgc3RlcCBpbiBlYWNoIGxvb3BcclxuICAgIGxldCBxdWFkcyA9IFtdO1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb3JyZWN0UmVzdWx0cy5sZW5ndGg7IChpID0gaSArIGxpc3RPZlNlYXJjaGVkV29yZHMubGVuZ3RoKSkge1xyXG4gICAgICBxdWFkcy5wdXNoKFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIHgxOiAoY29ycmVjdFJlc3VsdHNbKChpICsgbGlzdE9mU2VhcmNoZWRXb3Jkcy5sZW5ndGgpIC0gMSldLndvcmQuY29vcmRpbmF0ZXMudXBwZXJfbGVmdC54IC8geCksXHJcbiAgICAgICAgICB4MjogKGNvcnJlY3RSZXN1bHRzW2ldLndvcmQuY29vcmRpbmF0ZXMuYm90dG9tX3JpZ2h0LnggLyB4KSxcclxuICAgICAgICAgIHgzOiAoY29ycmVjdFJlc3VsdHNbaV0ud29yZC5jb29yZGluYXRlcy5ib3R0b21fcmlnaHQueCAvIHgpLFxyXG4gICAgICAgICAgeDQ6IChjb3JyZWN0UmVzdWx0c1soKGkgKyBsaXN0T2ZTZWFyY2hlZFdvcmRzLmxlbmd0aCkgLSAxKV0ud29yZC5jb29yZGluYXRlcy51cHBlcl9sZWZ0LnggLyB4KSxcclxuICAgICAgICAgIHkxOiAoY29ycmVjdFJlc3VsdHNbaV0ud29yZC5jb29yZGluYXRlcy51cHBlcl9sZWZ0LnkgLyB5KSxcclxuICAgICAgICAgIHkyOiAoY29ycmVjdFJlc3VsdHNbKChpICsgbGlzdE9mU2VhcmNoZWRXb3Jkcy5sZW5ndGgpIC0gMSldLndvcmQuY29vcmRpbmF0ZXMudXBwZXJfbGVmdC55IC8geSksXHJcbiAgICAgICAgICB5MzogKGNvcnJlY3RSZXN1bHRzWygoaSArIGxpc3RPZlNlYXJjaGVkV29yZHMubGVuZ3RoKSAtIDEpXS53b3JkLmNvb3JkaW5hdGVzLmJvdHRvbV9yaWdodC55IC8geSksXHJcbiAgICAgICAgICB5NDogKGNvcnJlY3RSZXN1bHRzW2ldLndvcmQuY29vcmRpbmF0ZXMuYm90dG9tX3JpZ2h0LnkgLyB5KSxcclxuICAgICAgICB9KTtcclxuICAgICAgdGhpcy5oaWdsaWdodFRleHQoXHJcbiAgICAgICAgcXVhZHMsXHJcbiAgICAgICAgcGFnZW51bWJlclxyXG4gICAgICApO1xyXG4gICAgICB0aGlzLmNvbnN0cnVjdFNlYXJjaFJlc3VsdChsaXN0T2ZTZWFyY2hlZFdvcmRzLmpvaW4oXCIgXCIpICwgcGFnZW51bWJlciAsIHF1YWRzICwgbGluZS50ZXh0KVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY29uc3RydWN0U2VhcmNoUmVzdWx0KHNlYXJjaGVkVGV4dCAsIHBhZ2VOdW0gLCBxdWFkcyAsIGxpbmUpe1xyXG4gICBsZXQgbXlTZWFyY2hTdGFydFRleHRJbmRleCA9IGxpbmUuaW5kZXhPZihzZWFyY2hlZFRleHQpO1xyXG4gICBsZXQgbXlTZWVhcmNoZWRUZXh0RW5kSW5kZXggPSBteVNlYXJjaFN0YXJ0VGV4dEluZGV4ICsgc2VhcmNoZWRUZXh0Lmxlbmd0aDtcclxuICAgIGxldCBzZWFyY2hSZXN1bHRPYmplY3QgPSB7XHJcbiAgICAgICAgYW1iaWVudFN0cjogbGluZSxcclxuICAgICAgICByZXN1bHRTdHI6IHNlYXJjaGVkVGV4dCxcclxuICAgICAgICByZXN1bHRTdHJTdGFydDpteVNlYXJjaFN0YXJ0VGV4dEluZGV4LFxyXG4gICAgICAgIHJlc3VsdFN0ckVuZDogbXlTZWVhcmNoZWRUZXh0RW5kSW5kZXgsXHJcbiAgICAgICAgcGFnZU51bTogcGFnZU51bSxcclxuICAgICAgICByZXN1bHRDb2RlOiAyLFxyXG4gICAgICAgIHF1YWRzOiBbe1xyXG4gICAgICAgICAgICBlYTogcXVhZHNbMF1bJ3kzJ10sXHJcbiAgICAgICAgICAgIGZhOiBxdWFkc1swXVsneTQnXSxcclxuICAgICAgICAgICAgaGE6IHF1YWRzWzBdWyd4MSddLFxyXG4gICAgICAgICAgICBpYTogcXVhZHNbMF1bJ3gyJ10sXHJcbiAgICAgICAgICAgIHBCOiBxdWFkc1swXVsneDMnXSxcclxuICAgICAgICAgICAgcUI6IHF1YWRzWzBdWyd4NCddLFxyXG4gICAgICAgICAgICByQjogcXVhZHNbMF1bJ3kxJ10sXHJcbiAgICAgICAgICAgIHNCOiBxdWFkc1swXVsneTInXVxyXG4gICAgICAgIH1dXHJcbiAgICB9XHJcbiAgICB0aGlzLm15U2VhcmNoU3RyaW5nUmVzdWx0cy5wdXNoKHNlYXJjaFJlc3VsdE9iamVjdCk7XHJcbiAgICBjb25zb2xlLmxvZyh0aGlzLm15U2VhcmNoU3RyaW5nUmVzdWx0cyk7XHJcbiAgfVxyXG5cclxuICBkaXNwYWxheVNlYXJjaFJlc3VsdHMoZG9jVmlld2VyKXtcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgIGRvY1ZpZXdlci5kaXNwbGF5QWRkaXRpb25hbFNlYXJjaFJlc3VsdHModGhpcy5teVNlYXJjaFN0cmluZ1Jlc3VsdHMpO1xyXG4gICAgfSwgNTAwKTtcclxuICB9XHJcblxyXG4gIC8vIGRyYXcgaGlsaWd0aGluZyBhcm91bmQgY2VydGFpbiBjaGFyYXRhY3RlcnNcclxuICBoaWdsaWdodFRleHQocXVhZHMsIHBhZ2VOdW1iZXIpIHtcclxuICAgIGNvbnN0IGhpZ2hsaWdodGluZ0Fubm90ID0gbmV3IHRoaXMud2ViVmlld2VySW5zdGFuY2UuQW5ub3RhdGlvbnMuVGV4dEhpZ2hsaWdodEFubm90YXRpb24oKTtcclxuICAgIGhpZ2hsaWdodGluZ0Fubm90LlN0cm9rZUNvbG9yID0gbmV3IHRoaXMud2ViVmlld2VySW5zdGFuY2UuQW5ub3RhdGlvbnMuQ29sb3IoMjUwLDIwNiwwLDAuNTAxOTYpO1xyXG4gICAgaGlnaGxpZ2h0aW5nQW5ub3QuUXVhZHMgPSBxdWFkcztcclxuICAgIGhpZ2hsaWdodGluZ0Fubm90LlBhZ2VOdW1iZXIgPSBwYWdlTnVtYmVyO1xyXG4gICAgaGlnaGxpZ2h0aW5nQW5ub3QuQXV0aG9yID0gdGhpcy53ZWJWaWV3ZXJJbnN0YW5jZS5hbm5vdE1hbmFnZXIuZ2V0Q3VycmVudFVzZXIoKTtcclxuICAgIHRoaXMuc2F2ZWRBbm90YXRpb25zLnB1c2goaGlnaGxpZ2h0aW5nQW5ub3QpO1xyXG4gICAgdGhpcy53ZWJWaWV3ZXJJbnN0YW5jZS5hbm5vdE1hbmFnZXIuYWRkQW5ub3RhdGlvbihoaWdobGlnaHRpbmdBbm5vdCk7XHJcblxyXG4gICAgLy8gbmVlZCB0byBkcmF3IHRoZSBhbm5vdGF0aW9uIG90aGVyd2lzZSBpdCB3b24ndCBzaG93IHVwIHVudGlsIHRoZSBwYWdlIGlzIHJlZnJlc2hlZFxyXG4gICAgdGhpcy53ZWJWaWV3ZXJJbnN0YW5jZS5hbm5vdE1hbmFnZXIucmVkcmF3QW5ub3RhdGlvbihoaWdobGlnaHRpbmdBbm5vdCk7XHJcbiAgfVxyXG5cclxuICBzZWFyY2hGbiA9IChzZWFyY2hWYWx1ZSwgb3B0aW9ucykgPT4ge1xyXG4gICAgdGhpcy5teVNlYXJjaFN0cmluZ1Jlc3VsdHMgPSBbXTtcclxuICAgaWYodGhpcy5zYXZlZEFub3RhdGlvbnMubGVuZ3RoID4gMCl7XHJcbiAgICAgdGhpcy5zYXZlZEFub3RhdGlvbnMubWFwKGFubm90YXRpb24gPT4ge1xyXG4gICAgICAgYW5ub3RhdGlvbi5IaWRkZW4gPSB0cnVlO1xyXG4gICAgIC8vIEFsd2F5cyByZWRyYXcgYW5ub3RhdGlvbiBpZiByZW5kZXJpbmcgd2FzIHVwZGF0ZWRcclxuICAgICB0aGlzLndlYlZpZXdlckluc3RhbmNlLmFubm90TWFuYWdlci5yZWRyYXdBbm5vdGF0aW9uKGFubm90YXRpb24pO1xyXG4gICB9KTtcclxuICAgfVxyXG4gICAvLyBkb24ndCBkbyBhbnkgc2VhcmNoIHVudGlsIHRoZXJlIGlzIGEgc2VhcmNoIHBhdHRlcm5cclxuICAgaWYoc2VhcmNoVmFsdWUudHJpbSgpLmxlbmd0aCA+IDApe1xyXG4gICAgICAgaWYgKHRoaXMuZmlsZVdpdGhPY3IpIHtcclxuICAgICAgICAgLy8gYWRkIHJlZGFjdGlvbiBhbm5vdGF0aW9uIGZvciBlYWNoIHNlYXJjaCByZXN1bHRcclxuICAgICAgICAgICAvLyBjb25zdCBhbm5vdGF0aW9uID0gbmV3IEFubm90YXRpb25zLlRleHRIaWdobGlnaHRBbm5vdGF0aW9uKCk7XHJcbiAgICAgICAgICAgbGV0IG15U2VhcmNoID0gc2VhcmNoVmFsdWUuc3BsaXQoJyAnKTtcclxuICAgICAgICAgICBpZihteVNlYXJjaC5sZW5ndGggPiAxKXtcclxuICAgICAgICAgICAgIC8vIHRoZW4gaSBhbSBzZWFyY2hpbmcgd2l0aCBtb3JlIHRoYW4gb25lIHdvcmRcclxuICAgICAgICAgICAgIHRoaXMucGFnZXMucGFnZXMuZm9yRWFjaCgocGFnZSAsIGluZGV4KSA9PiB7XHJcbiAgICAgICAgICAgICAgIHRoaXMucGFnZUhlaWdodCA9IHBhZ2UucGFnZV9oZWlnaHQ7XHJcbiAgICAgICAgICAgICAgIHRoaXMucGFnZVdpZHRoID0gcGFnZS5wYWdlX3dpZHRoO1xyXG4gICAgICAgICAgICAgICB0aGlzLnN0YW5kYXJkSGVpZ2h0ID0gdGhpcy53ZWJWaWV3ZXJJbnN0YW5jZS5kb2NWaWV3ZXIuZ2V0UGFnZUhlaWdodCgoaW5kZXgrMSkpO1xyXG4gICAgICAgICAgICAgICB0aGlzLnN0YW5kYXJkV2lkdGggPSB0aGlzLndlYlZpZXdlckluc3RhbmNlLmRvY1ZpZXdlci5nZXRQYWdlV2lkdGgoKGluZGV4KzEpKTtcclxuICAgICAgICAgICAgICAgcGFnZS56b25lcy5mb3JFYWNoKHpvbmUgPT4ge1xyXG4gICAgICAgICAgICAgICAgIHpvbmUucGFyYWdyYXBocy5mb3JFYWNoKHBhcmFncmFwaCA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICBwYXJhZ3JhcGgubGluZXMuZm9yRWFjaChsaW5lID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgaWYobGluZS50ZXh0LmluY2x1ZGVzKHNlYXJjaFZhbHVlKSl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5TZWFyY2hGb3JXb3JkSW5MaW5lKG15U2VhcmNoLGxpbmUsKGluZGV4KzEpICwgcGFnZSlcclxuICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgLy8gdGhlbiBpIGFtIHNlYXJjaGluZyB3aXRoIG9ubHkgb25lIHdvcmQgXHJcbiAgICAgICAgICAgICB0aGlzLnNlYXJjaEZvcldvcmRJbkFsbFBhZ2VzKHNlYXJjaFZhbHVlKVxyXG4gICAgICAgICAgIH1cclxuICAgICAgICAgICB0aGlzLndlYlZpZXdlckluc3RhbmNlLmRvY1ZpZXdlci5jbGVhclNlYXJjaFJlc3VsdHMoKTtcclxuICAgICAgICAgICAgIHRoaXMuZGlzcGFsYXlTZWFyY2hSZXN1bHRzKHRoaXMud2ViVmlld2VySW5zdGFuY2UuZG9jVmlld2VyKTtcclxuICAgICAgIH1cclxuIH1lbHNle1xyXG4gICB0aGlzLndlYlZpZXdlckluc3RhbmNlLmRvY1ZpZXdlci5jbGVhclNlYXJjaFJlc3VsdHMoKTtcclxuIH1cclxufVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMud2ViVmlld2VySW5zdGFuY2UpIHtcclxuICAgICAgdGhpcy53ZWJWaWV3ZXJJbnN0YW5jZS5jbG9zZURvY3VtZW50KCkudGhlbigoKSA9PiB7XHJcbiAgICAgICAgY29uc29sZS5sb2coJ2RvY3VtZW50IGNsb3NlZCEnKTtcclxuICAgICAgfSk7XHJcbiAgICAgIHRoaXMucGRmdHJvblNlcnZpY2UuaW5zdGFuY2UgPSB0aGlzLndlYlZpZXdlckluc3RhbmNlID0gbnVsbDtcclxuICAgIH1cclxuICAgIHRoaXMudHJhbnNlbGF0aW9uU3Vic2NyaXRpb24gPyB0aGlzLnRyYW5zZWxhdGlvblN1YnNjcml0aW9uLnVuc3Vic2NyaWJlKCkgOiBudWxsO1xyXG4gIH1cclxufVxyXG4iLCI8ZGl2ICNmaWxlVmlld2VyIHN0eWxlPVwid2lkdGg6IDEwMCU7IGhlaWdodDogMTAwJTtcIj48L2Rpdj5cclxuIl19
745
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGRmdHJvbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9udXhlby1kZXZlbG9wbWVudC1mcmFtZXdvcmsvc3JjL2xpYi9jb21wb25lbnRzL3BkZi10cm9uL3BkZnRyb24vcGRmdHJvbi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9udXhlby1kZXZlbG9wbWVudC1mcmFtZXdvcmsvc3JjL2xpYi9jb21wb25lbnRzL3BkZi10cm9uL3BkZnRyb24vcGRmdHJvbi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUdMLFNBQVMsRUFFVCxZQUFZLEVBQ1osTUFBTSxFQUNOLEtBQUssRUFJTCxNQUFNLEVBQ04sU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sU0FBMkIsTUFBTSxvQkFBb0IsQ0FBQztBQUc3RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDaEQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLDRCQUE0QixDQUFDOzs7Ozs7QUFLeEQ7Ozs7Ozs7Ozs7OztHQVlHO0FBT0gsTUFBTSxPQUFPLGdCQUFnQjtJQWdEM0IsWUFDUyxHQUFzQixFQUNyQixjQUE4QixFQUM5QixLQUFtQixFQUNJLFFBQWdCLEVBQ3ZDLFVBQXNCLEVBQ3RCLGtCQUF1QyxFQUNoQixXQUFXO1FBTm5DLFFBQUcsR0FBSCxHQUFHLENBQW1CO1FBQ3JCLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQUM5QixVQUFLLEdBQUwsS0FBSyxDQUFjO1FBQ0ksYUFBUSxHQUFSLFFBQVEsQ0FBUTtRQUN2QyxlQUFVLEdBQVYsVUFBVSxDQUFZO1FBQ3RCLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBcUI7UUFDaEIsZ0JBQVcsR0FBWCxXQUFXLENBQUE7UUFoRG5DLGtCQUFhLEdBQUcsS0FBSyxDQUFDLENB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QUExQixNQUFNO2dCQUVQLE1BQU07c0JBREwsTUFBTTtnQkFFRyxjQUFjO3NCQUF2QixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBBZnRlclZpZXdJbml0LFxyXG4gIENoYW5nZURldGVjdG9yUmVmLFxyXG4gIENvbXBvbmVudCxcclxuICBFbGVtZW50UmVmLFxyXG4gIEV2ZW50RW1pdHRlcixcclxuICBJbmplY3QsXHJcbiAgSW5wdXQsXHJcbiAgT25DaGFuZ2VzLFxyXG4gIE9uRGVzdHJveSxcclxuICBPbkluaXQsXHJcbiAgT3V0cHV0LFxyXG4gIFZpZXdDaGlsZCxcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IFdlYlZpZXdlciwgeyBDb3JlQ29udHJvbHMgfSBmcm9tICdAcGRmdHJvbi93ZWJ2aWV3ZXInO1xyXG5pbXBvcnQgeyBOdXhlb1NlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9Db3JlL3NlcnZpY2VzL251eGVvL251eGVvLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBQZGZ0cm9uU2VydmljZSB9IGZyb20gJy4vcGRmdHJvbi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQVBQX0JBU0VfSFJFRiB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IFNlY3VyZVBpcGUgfSBmcm9tICcuLi8uLi8uLi9waXBlcy9zZWN1cmUucGlwZSc7XHJcbmltcG9ydCB7IFRocm93U3RtdCB9IGZyb20gJ0Bhbmd1bGFyL2NvbXBpbGVyJztcclxuaW1wb3J0IHsgVHJhbnNsYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vQ29yZS9zZXJ2aWNlcy90cmFuc2xhdGlvbi90cmFuc2xhdGlvbi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XHJcblxyXG4vKipcclxuICogQSByZXVzYWJsZSBmaWxlIHZpZXdlciBiYXNlZCBvbiBQREZUcm9uIExpYnJhcnlcclxuICogQHRpdGxlXHJcbiAqIFBERlRyb24gVmlld2VyXHJcbiAqIEBleGFtcGxlXHJcbiAqIDxhcHAtcGRmdHJvblxyXG4gKiAgIFtmaWxlRGF0YV09XCJmaWxlRGF0YVwiXHJcbiAqICAgW2VkaXRNb2RlXT1cImZhbHNlXCJcclxuICogICBbZG9jSWRdPVwiZmlsZUlkXCJcclxuICogICBbZmlsZVRpdGxlXT1cImZpbGUudGl0bGVcIlxyXG4gKiA+XHJcbiAqIDwvYXBwLXBkZnRyb24+XHJcbiAqL1xyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2FwcC1wZGZ0cm9uJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vcGRmdHJvbi5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vcGRmdHJvbi5jb21wb25lbnQuc2NzcyddLFxyXG4gIHByb3ZpZGVyczogW1NlY3VyZVBpcGVdLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgUGRmdHJvbkNvbXBvbmVudFxyXG4gIGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3ksIE9uQ2hhbmdlcyB7XHJcbiAgQFZpZXdDaGlsZCgnZmlsZVZpZXdlcicpIHZpZXdlclJlZjogRWxlbWVudFJlZjtcclxuICB3ZWJWaWV3ZXJJbnN0YW5jZTtcclxuICAvKiogRGlzYWJsZS9FbmFibGUgQW5ub3RhdGlvbiAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgZWRpdE1vZGU6IGJvb2xlYW47XHJcbiAgQElucHV0KCkgYWN0aW9uQ2xpY2tlZCA9IGZhbHNlOyAvLyB1c2VkIHRvIGtub3cgaWYgdGhlcmUgaXMgYWN0aW9uIGNsaWNrZWQgb3V0c2lkZSB0byBzdGFydCBlZGl0IG1vZGUgb3Igbm90XHJcbiAgaXNEb2N1bWVudExvYWRpbmc6IGJvb2xlYW47XHJcbiAgaXNGZXRjaGluZzogYm9vbGVhbjtcclxuICAvKiogRG9jdW1lbnQgdGl0bGUgKi9cclxuICBASW5wdXQoKVxyXG4gIGZpbGVUaXRsZTogc3RyaW5nO1xyXG4gIC8qKiBEb2N1bWVudCBJRCAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgZG9jSWQ6IHN0cmluZztcclxuICBASW5wdXQoKVxyXG4gIERPQ1VNRU5UX1RZUEUgPSAnYXBwbGljYXRpb24vcGRmJztcclxuICBASW5wdXQoKVxyXG4gIGZpbGVEYXRhO1xyXG4gIEBJbnB1dCgpXHJcbiAgZml0TW9kZTogJ0ZpdFdpZHRoJyB8ICdGaXRQYWdlJyB8ICdab29tJyA9ICdGaXRXaWR0aCc7XHJcbiAgQElucHV0KClcclxuICBhdXRoSGVhZGVyOiBzdHJpbmc7XHJcbiAgQElucHV0KClcclxuICBmaWxlVVJMOiBzdHJpbmc7XHJcbiAgQElucHV0KClcclxuICBjb3JyZXNwb25kYW5jZTtcclxuXHJcbiAgQElucHV0KCkgc2VjcmVjeVByb3BlcnR5OyAvLyB1c2VkIHRvIGFkZCB3YXRlcm1hcmsgYWNvcmRpbmcgY2VydGFpbiBzZWNyZWN5IGxldmVsXHJcbiAgQElucHV0KCkgZWRpdGluZ1R5cGU7XHJcbiAgQElucHV0KCkgdXNlclNpZ25hdHVyZXM7XHJcbiAgQElucHV0KCkgc2VhcmNoU3RyaW5nID0gJyc7IC8vIHN0cmluZyB0byBzZWFyY2ggZm9yIGl0IGluIHRoZSBkb2N1bWVudFxyXG5cclxuICBASW5wdXQoKSB0cmFja1NpZ25hdHVyZSA9IGZhbHNlOyAvLyB0byBlbmFibGUgdHJhY2tpbmcgc2lnbmF0dXJlIHBvc2l0aW9uIGFuZCBlbWl0IGl0IGFmdGVyIGV2ZXJ5IGNoYW5nZSBpdCBzaWduYXR1cmVcclxuICBAT3V0cHV0KCkgb25TaWduYXR1cmVUcmFja2luZyA9IG5ldyBFdmVudEVtaXR0ZXIoKTsgLy8gZXZlbnQgdG8gZW1pdCBzaWduYXR1cmUgY2hhbmdlc1xyXG5cclxuICBASW5wdXQoKSB1c2VPdXRzaWRlQW5vdGF0aW9ucyA9IGZhbHNlOyAvLyBmbGFnZSB0byBpbmRpY2F0IGlmIHVzaW5nIG91dCBzaWRlIGFub3RhdGlvbnMgb3Igbm90XHJcbiAgQElucHV0KCkgaW1wb3J0ZWRBbm90YXRpb25zIDsgLy8gaW1wb3J0ZWQgYW5vdGF0aW9ucyBmcm9tIG91dHNpZGVcclxuICBAT3V0cHV0KCkgb25BZGRpbmdBbm90YXRpb24gPSBuZXcgRXZlbnRFbWl0dGVyKCk7IC8vIHVzZWQgdG8gZXhwb3J0IGFsbCBhbm90YXRpb25zIHRvIG91dHNpZGVcclxuICBAT3V0cHV0KClcclxuICBldmVudHMgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIFNpZ25hdHVyZUV2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcigpOyAvLyB1c2VkIHRvIGV4cG9ydCBzaWduYXR1cmUgdG8gb3V0c2lkZVxyXG4gIGZpcnN0VGltZUxvYWQgPSB0cnVlOyAvL2ZsYWdlIHRvIGNvbnRyb2wgaW1wb3J0aW5nIHNpZ25hdHVyZXMgaW4gdGhlIGZpcnN0IHRpbWUgbG9hZCBvbmx5XHJcbiAgZmlyc3RTaWduYXR1cmVMb2FkID0gdHJ1ZTsgLy8gZmxhZ2UgdG8gcGFzcyBmaXJzdCBsb2FkIG9mIGltcG9ydGVkIHNpZ25hdHVyZXMgd2l0aG91dCBlbWl0dGluZyB0aGUgZXZlbnQgXHJcbiAgbmV3U2lnbkNyZWF0aW9uID0gZmFsc2U7IC8vIGZsYWdlIHRvIGluZGljYXRlIHNpZ25hdHVyZSBjcmVhdGlvbiBpcyBjcmVhdGVkIG9yIGNob29zZWQgZnJvbSBzdG9yZWQgb25lc1xyXG4gIHRyYW5zZWxhdGlvblN1YnNjcml0aW9uIDogU3Vic2NyaXB0aW9uO1xyXG4gIGlzQXJhYmljO1xyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHVibGljIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgICBwcml2YXRlIHBkZnRyb25TZXJ2aWNlOiBQZGZ0cm9uU2VydmljZSxcclxuICAgIHByaXZhdGUgbnV4ZW86IE51eGVvU2VydmljZSxcclxuICAgIEBJbmplY3QoQVBQX0JBU0VfSFJFRikgcHJpdmF0ZSBiYXNlSHJlZjogc3RyaW5nLFxyXG4gICAgcHJpdmF0ZSBzZWN1cmVQaXBlOiBTZWN1cmVQaXBlLFxyXG4gICAgcHJpdmF0ZSB0cmFuc2xhdGlvblNlcnZpY2UgOiBUcmFuc2xhdGlvblNlcnZpY2UsXHJcbiAgICBASW5qZWN0KCdlbnZpcm9ubWVudCcpIHByaXZhdGUgZW52aXJvbm1lbnRcclxuICApIHsgfVxyXG5cclxuICBhc3luYyBuZ09uSW5pdCgpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIHRoaXMudHJhbnNlbGF0aW9uU3Vic2NyaXRpb24gPSB0aGlzLnRyYW5zbGF0aW9uU2VydmljZS5pc0FyYWJpYy5zdWJzY3JpYmUocmVzID0+IHtcclxuICAgICAgdGhpcy5pc0FyYWJpYyA9IHJlcyA7XHJcbiAgICB9KVxyXG4gICB9XHJcblxyXG4gIGFzeW5jIG5nQWZ0ZXJWaWV3SW5pdCgpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIHRoaXMucmVjaXZlZFNlYXJjaFN0cmluZ3NBcnJheSA9IHRoaXMuc2VhcmNoU3RyaW5nLnRyaW0oKSA/IHRoaXMuc2VhcmNoU3RyaW5nLnNwbGl0KCcsJykgOiBbXTtcclxuXHJcbiAgICBpZiAodGhpcy5maWxlVGl0bGUuZW5kc1dpdGgoJy5wcHQnKSkge1xyXG4gICAgICB0aGlzLkRPQ1VNRU5UX1RZUEUgPSAnYXBwbGljYXRpb24vdm5kLm1zLXBvd2VycG9pbnQnO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLmZpbGVUaXRsZS5lbmRzV2l0aCgnLnBwdHgnKSkge1xyXG4gICAgICB0aGlzLkRPQ1VNRU5UX1RZUEUgPVxyXG4gICAgICAgICdhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQucHJlc2VudGF0aW9ubWwucHJlc2VudGF0aW9uJztcclxuICAgIH0gZWxzZSBpZiAodGhpcy5maWxlVGl0bGUuZW5kc1dpdGgoJy5kb2MnKSkge1xyXG4gICAgICB0aGlzLkRPQ1VNRU5UX1RZUEUgPSAnYXBwbGljYXRpb24vbXN3b3JkJztcclxuICAgIH0gZWxzZSBpZiAodGhpcy5maWxlVGl0bGUuZW5kc1dpdGgoJy5kb2N4JykpIHtcclxuICAgICAgdGhpcy5ET0NVTUVOVF9UWVBFID1cclxuICAgICAgICAnYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LndvcmRwcm9jZXNzaW5nbWwuZG9jdW1lbnQnO1xyXG4gICAgfVxyXG4gICAgV2ViVmlld2VyKFxyXG4gICAgICB7XHJcbiAgICAgICAgcGF0aDogdGhpcy5iYXNlSHJlZiArICcvYXNzZXRzL3BkZnRyb25zJyxcclxuICAgICAgICBmb3JjZUNsaWVudFNpZGVJbml0OiB0cnVlLFxyXG4gICAgICAgIHN0cmVhbWluZzogdHJ1ZSxcclxuICAgICAgICBsaWNlbnNlS2V5OiB0aGlzLmVudmlyb25tZW50LnBkZnRyb25MaWNlbmNlS2V5LFxyXG4gICAgICAgIGNzczogdGhpcy5pc0FyYWJpYyA/ICh0aGlzLmJhc2VIcmVmICsgJy9hc3NldHMvc3R5bGVzL2FyLW15cGRmdHJvbi5jc3MnKSA6ICh0aGlzLmJhc2VIcmVmICsgJy9hc3NldHMvc3R5bGVzL2VuLW15cGRmdHJvbi5jc3MnKSxcclxuICAgICAgICBhbm5vdGF0aW9uVXNlcjogdGhpcy5udXhlby5udXhlb0NsaWVudC51c2VyLnByb3BlcnRpZXMuZmlyc3ROYW1lICsgJyAnICsgdGhpcy5udXhlby5udXhlb0NsaWVudC51c2VyLnByb3BlcnRpZXMubGFzdE5hbWUsXHJcbiAgICAgICAgZGlzYWJsZWRFbGVtZW50czogWydkb3dubG9hZEJ1dHRvbicsICdwcmludEJ1dHRvbiddLFxyXG5cclxuICAgICAgfSxcclxuICAgICAgdGhpcy52aWV3ZXJSZWYubmF0aXZlRWxlbWVudFxyXG4gICAgKS50aGVuKGFzeW5jIChpbnN0YW5jZSkgPT4ge1xyXG4gICAgICB0aGlzLmlzQXJhYmljID8gaW5zdGFuY2Uuc2V0TGFuZ3VhZ2UoJ2FyJykgOiBpbnN0YW5jZS5zZXRMYW5ndWFnZSgnZW4nKSA7XHJcbiAgICAgIHRoaXMucGRmdHJvblNlcnZpY2UuaW5zdGFuY2UgPSB0aGlzLndlYlZpZXdlckluc3RhbmNlID0gaW5zdGFuY2U7XHJcbiAgICAgIGlmKHRoaXMuY29ycmVzcG9uZGFuY2UuZmFjZXRzLmluZGV4T2YoJ2N0b2NyJykgPiAtMSl7XHJcbiAgICAgICAgdGhpcy5maWxlV2l0aE9jciA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5wYWdlcyA9IEpTT04ucGFyc2UodGhpcy5jb3JyZXNwb25kYW5jZS5wcm9wZXJ0aWVzWydjdG9jcjpyZWNvZ25pemVkSnNvbiddKTtcclxuICAgICAgICAvLyBvdmVycmlkZSBzZWFyY2ggZnVudGlvbiB0byB1c2Ugb3VyIHNlYXJjaCBpbiBvY3Igbm90IGRlZnVsdCBzZWFyY2hcclxuICAgICAgICBpbnN0YW5jZS5vdmVycmlkZVNlYXJjaEV4ZWN1dGlvbih0aGlzLnNlYXJjaEZuKTtcclxuICAgICAgICB9ZWxzZXtcclxuICAgICAgICAvLyBpZiBubyBvY3IgdGhlbiBhZGQgc2VhcmNoIGxpc25lciB0byBsaXNuZSB0byBpbnRlcm5hbCBzZWFyY2ggYW5kIGNhdGNoIHJlc3VsdHNcclxuICAgICAgICAgICAgdGhpcy5hZGRTZWFyY2hMaXN0bmVyKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB0aGlzLmFkZFByaW50QnV0dG9uKCk7XHJcbiAgICAgIHRoaXMuYWRkRG93bmxvYWRCdXR0b24oKTtcclxuICAgICAgdGhpcy5pbXBvcnRTaWduYXR1cmUoKTtcclxuICAgICAgdGhpcy5leHBvcnRpbmdTaWduYXR1cmUoKTtcclxuICAgICAgdGhpcy5kZWxldGVBbm5vdGF0aW9uKCk7XHJcbiAgICAgIHRoaXMuZXhwb3J0aW5nU2F2ZWRTaWduYXR1cmUoKTtcclxuICAgICAgaWYodGhpcy51c2VPdXRzaWRlQW5vdGF0aW9ucyl7XHJcbiAgICAgICAgdGhpcy5pbXBvcnRBbm90YXRpb25zRnJvbU91dHNpZGUoKTtcclxuICAgICAgICB0aGlzLmV4cG9ydEFub3RhdGlvbnNUb091dHNpZGUoKTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLndlYlZpZXdlckluc3RhbmNlLmRvY1ZpZXdlci5zZXRTZWFyY2hIaWdobGlnaHRDb2xvcnMoe1xyXG4gICAgICAgIC8vIHNldFNlYXJjaEhpZ2hsaWdodENvbG9ycyBhY2NlcHRzIGJvdGggQW5ub3RhdGlvbnMuQ29sb3Igb2JqZWN0cyBvciAncmdiYScgc3RyaW5nc1xyXG4gICAgICAgIHNlYXJjaFJlc3VsdDogbmV3IHRoaXMud2ViVmlld2VySW5zdGFuY2UuQW5ub3RhdGlvbnMuQ29sb3IoMjUwLDIwNiwwLDAuNTAxOTYpLFxyXG4gICAgICAgIGFjdGl2ZVNlYXJjaFJlc3VsdDogbmV3IHRoaXMud2ViVmlld2VySW5zdGFuY2UuQW5ub3RhdGlvbnMuQ29sb3IoMjUwLDIwNiwwLDAuNTAxOTYpLFxyXG4gICAgICB9KTtcclxuICAgICAgaWYodGhpcy5yZWNpdmVkU2VhcmNoU3RyaW5nc0FycmF5Lmxlbmd0aCAhPT0gMCl7XHJcbiAgICAgICAgdGhpcy5hdXRvbWF0aWNTZWFyY2godGhpcy5yZWNpdmVkU2VhcmNoU3RyaW5nc0FycmF5KTtcclxuICAgIH1cclxuICAgICAgdGhpcy5sb2FkRG9jdW1lbnQoKTtcclxuXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGltcG9ydEFub3RhdGlvbnNGcm9tT3V0c2lkZSgpe1xyXG4gICAgY29uc3QgZG9jdW1lbnRWaWV3ZXIgPSB0aGlzLndlYlZpZXdlckluc3RhbmNlLmRvY1ZpZXdlcjtcclxuXHJcbiAgICBkb2N1bWVudFZpZXdlci5vbignZG9jdW1lbnRMb2FkZWQnLCAoKSA9PiB7XHJcbiAgICAgIHRoaXMud2ViVmlld2VySW5zdGFuY2UuYW5ub3RNYW5hZ2VyLmltcG9ydEFubm90YXRpb25zKHRoaXMuaW1wb3J0ZWRBbm90YXRpb25zKVxyXG4gICAgfSlcclxuICAgIC8vIC50aGVuKGFubm90YXRpb25zID0+IHtcclxuICAgIC8vICAgYW5ub3RhdGlvbnMuZm9yRWFjaChhbm5vdGF0aW9uID0+IHtcclxuICAgIC8vICAgICB0aGlzLndlYlZpZXdlckluc3RhbmNlLmFubm90TWFuYWdlci5yZWRyYXdBbm5vdGF0aW9uKGFubm90YXRpb24pO1xyXG4gICAgLy8gICB9KTtcclxuICAgIC8vIH0pO1xyXG4gIH1cclxuXHJcbiAgLy8gZXhjdHJhY3QgYWxsIGFub3RhdGlvbnMgb24gdGhlIGZpbGUgYW5kIHNlbmQgaXQgb3V0IHNpZGUgdG8gYmUgc2F2ZWQgYW5kIGxlYXZlIHRoZSBmaWxlIGFzIGl0IGlzIHdpdGhvdXQgYW55IGFub3RhdGlvbnMgb24gaXRcclxuICBleHBvcnRBbm90YXRpb25zVG9PdXRzaWRlKCl7XHJcbiAgICB0aGlzLndlYlZpZXdlckluc3RhbmNlLmFubm90TWFuYWdlci5vbignYW5ub3RhdGlvbkNoYW5nZWQnLCAoYW5ub3RhdGlvbnMsIGFjdGlvbiwgeyBpbXBvcnRlZCB9KSA9PiB7XHJcbiAgICAgIGlmIChpbXBvcnRlZCkgcmV0dXJuO1xyXG4gICAgICB0aGlzLndlYlZpZXdlckluc3RhbmNlLmFubm90TWFuYWdlci5leHBvcnRBbm5vdGF0aW9ucygpLnRoZW4oZXhjdHJhY3RlZEFub3RhdGlvbnMgPT4ge1xyXG4gICAgICAgIHRoaXMub25BZGRpbmdBbm90YXRpb24uZW1pdChleGN0cmFjdGVkQW5vdGF0aW9ucyk7XHJcbiAgICAgIH0pO1xyXG4gICAgICAvLyBpZiB0cmFja2luZyBzaWduYXR1cmUgbG9jYXRpb24gaXMgZW5hYmxlIHRoZW4gZW1pdCBzaWduYXR1cmUgb3V0c2lkZSB3aXRoIGV2ZXJ5IGNoYW5nZXMgaW4gaXRcclxuICAgICAgaWYodGhpcy50cmFja1NpZ25hdHVyZSl7XHJcbiAgICAgICAgdGhpcy5vblNpZ25hdHVyZVRyYWNraW5nLmVtaXQoe2Fub3RhdGlvbnMgOiBhbm5vdGF0aW9ucyAsIGFjdGlvbiA6IGFjdGlvbn0pXHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgaW1wb3J0U2lnbmF0dXJlKCkge1xyXG4gICAgY29uc3QgZG9jdW1lbnRWaWV3ZXIgPSB0aGlzLndlYlZpZXdlckluc3RhbmNlLmRvY1ZpZXdlcjtcclxuICAgIGNvbnN0IHNpZ25hdHVyZVRvb2wgPSBkb2N1bWVudFZpZXdlci5nZXRUb29sKCdBbm5vdGF0aW9uQ3JlYXRlU2lnbmF0dXJlJyk7XHJcblxyXG4gICAgZG9jdW1lbnRWaWV3ZXIub24oJ2RvY3VtZW50TG9hZGVkJywgKCkgPT4ge1xyXG4gICAgICBpZih0aGlzLmZpcnN0VGltZUxvYWQpe1xyXG4gICAgICAgIHNpZ25hdHVyZVRvb2wuaW1wb3J0U2lnbmF0dXJlcyhbLi4udGhpcy51c2VyU2lnbmF0dXJlc10pO1xyXG4gICAgICAgIHRoaXMuZmlyc3RUaW1lTG9hZCA9IGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICB9KVxyXG4gIH1cclxuICBcclxuICBleHBvcnRpbmdTYXZlZFNpZ25hdHVyZSgpIHtcclxuICAgIGNvbnN0IGRvY3VtZW50Vmlld2VyID0gdGhpcy53ZWJWaWV3ZXJJbnN0YW5jZS5kb2NWaWV3ZXI7XHJcbiAgICBjb25zdCBTaWduYXR1cmVDcmVhdGVUb29sID0gZG9jdW1lbnRWaWV3ZXIuZ2V0VG9vbCgnQW5ub3RhdGlvbkNyZWF0ZVNpZ25hdHVyZScpXHJcbiAgICBTaWduYXR1cmVDcmVhdGVUb29sLm9uKCdzaWduYXR1cmVTYXZlZCcsIChhbm5vdGF0aW9uKSA9PiB7XHJcbiAgICAgIGlmKCF0aGlzLmZpcnN0U2lnbmF0dXJlTG9hZCl7XHJcbiAgICAgICAgY29uc29sZS5sb2coJ3NpZ25hdHVyZSBzYXZlZCB0cmlnZXJlZCcpO1xyXG4gICAgICAgIHRoaXMubmV3U2lnbkNyZWF0aW9uID0gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmZpcnN0U2lnbmF0dXJlTG9hZCA9IGZhbHNlO1xyXG4gICAgfSk7O1xyXG4gIH1cclxuICBcclxuICBleHBvcnRpbmdTaWduYXR1cmUoKSB7XHJcbiAgICBjb25zdCBkb2N1bWVudFZpZXdlciA9IHRoaXMud2ViVmlld2VySW5zdGFuY2UuZG9jVmlld2VyO1xyXG4gICAgY29uc3QgU2lnbmF0dXJlQ3JlYXRlVG9vbCA9IGRvY3VtZW50Vmlld2VyLmdldFRvb2woJ0Fubm90YXRpb25DcmVhdGVTaWduYXR1cmUnKVxyXG4gICAgU2lnbmF0dXJlQ3JlYXRlVG9vbC5vbignYW5ub3RhdGlvbkFkZGVkJywgKGFubm90YXRpb24pID0+IHtcclxuICAgICAgaWYgKGFubm90YXRpb24gJiYgdGhpcy5uZXdTaWduQ3JlYXRpb24pIHtcclxuICAgICAgICB0aGlzLm5ld1NpZ25DcmVhdGlvbiA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuZXh0cmFjdEFub3RhdGlvbihhbm5vdGF0aW9uICwgZG9jdW1lbnRWaWV3ZXIpO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKGFubm90YXRpb24pXHJcbiAgICAgIH1cclxuICAgIH0pOztcclxuICB9XHJcblxyXG4gIGV4dHJhY3RBbm90YXRpb24oYW5ub3RhdGlvbiAsIGRvY3VtZW50Vmlld2VyKXtcclxuICAgIGlmKGFubm90YXRpb25bJ2ltYWdlJ10pe1xyXG4gICAgICAvLyBjb252ZXJ0IGJhc2U2NCBzaWduYXR1cmUgaW50byBmaWxlIGFuZCBlbWl0IGl0IHRvIG91dCBzaWRlIFxyXG4gICAgICBsZXQgYmFzZTY0SW1nID0gYW5ub3RhdGlvblsnaW1hZ2UnXVsnY3VycmVudFNyYyddO1xyXG4gICAgICB2YXIgYXJyID0gYmFzZTY0SW1nLnNwbGl0KCcsJyksXHJcbiAgICAgIG1pbWUgPSBhcnJbMF0ubWF0Y2goLzooLio/KTsvKVsxXSxcclxuICAgICAgYnN0ciA9IGF0b2IoYXJyWzFdKSwgXHJcbiAgICAgIG4gPSBic3RyLmxlbmd0aCwgXHJcbiAgICAgIHU4YXJyID0gbmV3IFVpbnQ4QXJyYXkobik7XHJcbiAgICAgIHdoaWxlKG4tLSl7XHJcbiAgICAgICAgICB1OGFycltuXSA9IGJzdHIuY2hhckNvZGVBdChuKTtcclxuICAgICAgfVxyXG4gICAgICBsZXQgbmFtZSA9IG1pbWUucmVwbGFjZSgnLycgLCAnLicpXHJcbiAgICAgIGxldCBteUZpbGUgPSBuZXcgRmlsZShbdThhcnJdLCAnbXlTaWduYXR1cmUucG5nJywge3R5cGU6bWltZX0pO1xyXG4gICAgICB0aGlzLlNpZ25hdHVyZUV2ZW50LmVtaXQoeyBkYXRhOiBteUZpbGUsIGV2ZW50TmFtZTogJ2V4cG9ydCcgfSk7XHJcblxyXG4gICAgfWVsc2V7XHJcbiAgICAgIHRoaXMuZXh0cmFjdEFubm90YXRpb25TaWduYXR1cmUoYW5ub3RhdGlvbiAsIGRvY3VtZW50Vmlld2VyKVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYXN5bmMgZXh0cmFjdEFubm90YXRpb25TaWduYXR1cmUoYW5ub3RhdGlvbiwgZG9jVmlld2VyKSB7XHJcbiAgICAvLyBDcmVhdGUgYSBuZXcgQ2FudmFzIHRvIGRyYXcgdGhlIEFubm90YXRpb24gb25cclxuICAgIGNvbnN0IGNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xyXG4gICAgLy8gUmVmZXJlbmNlIHRoZSBhbm5vdGF0aW9uIGZyb20gdGhlIERvY3VtZW50XHJcbiAgICBjb25zdCBwYWdlTWF0cml4ID0gZG9jVmlld2VyLmdldERvY3VtZW50KCkuZ2V0UGFnZU1hdHJpeChhbm5vdGF0aW9uLlBhZ2VOdW1iZXIpO1xyXG4gICAgLy8gU2V0IHRoZSBoZWlnaHQgJiB3aWR0aCBvZiB0aGUgY2FudmFzIHRvIG1hdGNoIHRoZSBhbm5vdGF0aW9uXHJcbiAgICBjYW52YXMuaGVpZ2h0ID0gYW5ub3RhdGlvbi5IZWlnaHQ7XHJcbiAgICBjYW52YXMud2lkdGggPSBhbm5vdGF0aW9uLldpZHRoO1xyXG4gICAgY29uc3QgY3R4ID0gY2FudmFzLmdldENvbnRleHQoJzJkJyk7XHJcbiAgICAvLyBUcmFuc2xhdGUgdGhlIEFubm90YXRpb24gdG8gdGhlIHRvcCBUb3AgTGVmdCBDb3JuZXIgb2YgdGhlIENhbnZhcyBpZSAoMCwgMClcclxuICAgIGN0eC50cmFuc2xhdGUoLWFubm90YXRpb24uWCwgLWFubm90YXRpb24uWSk7XHJcbiAgICAvLyBEcmF3IHRoZSBBbm5vdGF0aW9uIG9udG8gdGhlIENhbnZhc1xyXG4gICAgYW5ub3RhdGlvbi5kcmF3KGN0eCwgcGFnZU1hdHJpeCk7XHJcbiAgICAvLyBDb252ZXJ0IHRoZSBDYW52YXMgdG8gYSBCbG9iIE9iamVjdCBmb3IgVXBsb2FkXHJcbiAgICBjYW52YXMudG9CbG9iKChibG9iKSA9PiB7XHJcbiAgICAgIC8vIENhbGwgeW91ciBCbG9iIFN0b3JhZ2UgVXBsb2FkIEZ1bmN0aW9uXHJcbiAgICAgIGxldCBuYW1lID0gYmxvYi50eXBlLnJlcGxhY2UoJy8nICwgJy4nKVxyXG4gICAgICBsZXQgbXlGaWxlID0gbmV3IEZpbGUoW2Jsb2JdLCBuYW1lKTtcclxuICAgICAgdGhpcy5TaWduYXR1cmVFdmVudC5lbWl0KHsgZGF0YTogbXlGaWxlLCBldmVudE5hbWU6ICdleHBvcnQnIH0pO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBkZWxldGVBbm5vdGF0aW9uKCkge1xyXG4gICAgY29uc3QgZG9jdW1lbnRWaWV3ZXIgPSB0aGlzLndlYlZpZXdlckluc3RhbmNlLmRvY1ZpZXdlcjtcclxuICAgIGNvbnN0IFNpZ25hdHVyZUNyZWF0ZVRvb2wgPSBkb2N1bWVudFZpZXdlci5nZXRUb29sKCdBbm5vdGF0aW9uQ3JlYXRlU2lnbmF0dXJlJyk7XHJcbiAgICBTaWduYXR1cmVDcmVhdGVUb29sLm9uKCdzaWduYXR1cmVEZWxldGVkJywgKGFubm90YXRpb24sIGluZGV4KSA9PiB7XHJcbiAgICAgIGNvbnNvbGUubG9nKCd0aGVyZSB3ZXJlIGFubm90YXRpb25zIGRlbGV0ZWQnKTtcclxuICAgICAgdGhpcy51c2VyU2lnbmF0dXJlcy5zcGxpY2UoaW5kZXggLCAxKTtcclxuICAgICAgdGhpcy5TaWduYXR1cmVFdmVudC5lbWl0KHsgZGF0YTogeyBzaWduYXR1cmU6IGFubm90YXRpb24sIGluZGV4OiBpbmRleCB9LCBldmVudE5hbWU6ICdkZWxldGUnIH0pO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBhZGREb3dubG9hZEJ1dHRvbigpIHtcclxuICAgIHRoaXMud2ViVmlld2VySW5zdGFuY2Uuc2V0SGVhZGVySXRlbXMoKGhlYWRlcikgPT4ge1xyXG4gICAgICBoZWFkZXIucHVzaCh7XHJcbiAgICAgICAgdHlwZTogJ2FjdGlvbkJ1dHRvbicsXHJcbiAgICAgICAgaW1nOiAnPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgZmlsbD1cImN1cnJlbnRDb2xvclwiIGNsYXNzPVwiYmkgYmktZmlsZS1lYXJtYXJrLWFycm93LWRvd25cIiB2aWV3Qm94PVwiMCAwIDE2IDE2XCI+IDxwYXRoIGQ9XCJNOC41IDYuNWEuNS41IDAgMCAwLTEgMHYzLjc5M0w2LjM1NCA5LjE0NmEuNS41IDAgMSAwLS43MDguNzA4bDIgMmEuNS41IDAgMCAwIC43MDggMGwyLTJhLjUuNSAwIDAgMC0uNzA4LS43MDhMOC41IDEwLjI5M1Y2LjV6XCIvPiA8cGF0aCBkPVwiTTE0IDE0VjQuNUw5LjUgMEg0YTIgMiAwIDAgMC0yIDJ2MTJhMiAyIDAgMCAwIDIgMmg4YTIgMiAwIDAgMCAyLTJ6TTkuNSAzQTEuNSAxLjUgMCAwIDAgMTEgNC41aDJWMTRhMSAxIDAgMCAxLTEgMUg0YTEgMSAwIDAgMS0xLTFWMmExIDEgMCAwIDEgMS0xaDUuNXYyelwiLz48L3N2Zz4nLFxyXG4gICAgICAgIHRpdGxlOiB0aGlzLmlzQXJhYmljID8gJ9iq2YbYstmK2YQnIDogJ0Rvd25sb2FkJyxcclxuICAgICAgICBvbkNsaWNrOiBhc3luYyAoKSA9PiB7XHJcbiAgICAgICAgICBjb25zdCB7IERvY3VtZW50Vmlld2VyLCBBbm5vdGF0aW9uTWFuYWdlciwgU2F2ZU9wdGlvbnMgfSA9IHRoaXMud2ViVmlld2VySW5zdGFuY2UuQ29yZUNvbnRyb2xzO1xyXG4gICAgICAgICAgLy8gY29uc3QgeGZkZlN0cmluZyA9IGF3YWl0IEFubm90YXRpb25NYW5hZ2VyLmV4cG9ydEFubm90YXRpb25zKCk7XHJcbiAgICAgICAgICBjb25zdCBzYXZlT3B0aW9ucyA9IFNhdmVPcHRpb25zO1xyXG4gICAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHtcclxuICAgICAgICAgICAgZmlsZW5hbWU6IHRoaXMuY29ycmVzcG9uZGFuY2UudGl0bGUgPyB0aGlzLmNvcnJlc3BvbmRhbmNlLnRpdGxlIDogJ215RG9jdW1lbnQucGRmJyxcclxuICAgICAgICAgICAgLy8geGZkZlN0cmluZyxcclxuICAgICAgICAgICAgZmxhZ3M6IHNhdmVPcHRpb25zLkxJTkVBUklaRUQsXHJcbiAgICAgICAgICAgIGRvd25sb2FkVHlwZTogJ3BkZidcclxuICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgdGhpcy5wZGZ0cm9uU2VydmljZS5pbnN0YW5jZS5kb3dubG9hZFBkZihvcHRpb25zKTtcclxuICAgICAgICAgIHRoaXMuZXZlbnRzLm5leHQoJ2Rvd25sb2FkJyk7XHJcbiAgICAgICAgICAvLyBsZXQgdXJsID0gdGhpcy5jb3JyZXNwb25kYW5jZS5wcm9wZXJ0aWVzLmNvbnRlbnQuZGF0YTtcclxuICAgICAgICAgIC8vIGxldCBmaWxlTmFtZSA9IHRoaXMuY29ycmVzcG9uZGFuY2UucHJvcGVydGllcy5jb250ZW50Lm5hbWU7XHJcbiAgICAgICAgICAvLyBpZiAodXJsICYmIGZpbGVOYW1lKSB7XHJcbiAgICAgICAgICAvLyAgIGxldCBzYWZlVXJsID0gdGhpcy5zZWN1cmVQaXBlLnRyYW5zZm9ybSh1cmwpO1xyXG4gICAgICAgICAgLy8gICBzYWZlVXJsLnN1YnNjcmliZSgodXJsOiBhbnkpID0+IHtcclxuICAgICAgICAgIC8vICAgICBjb25zdCBsaW5rID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xyXG4gICAgICAgICAgLy8gICAgIGxpbmsuc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICAgIC8vICAgICBsaW5rLmhyZWYgPSB1cmwuY2hhbmdpbmdUaGlzQnJlYWtzQXBwbGljYXRpb25TZWN1cml0eTtcclxuICAgICAgICAgIC8vICAgICBsaW5rLmRvd25sb2FkID0gZmlsZU5hbWU7XHJcbiAgICAgICAgICAvLyAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChsaW5rKTtcclxuICAgICAgICAgIC8vICAgICBsaW5rLmNsaWNrKCk7XHJcbiAgICAgICAgICAvLyAgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChsaW5rKTtcclxuICAgICAgICAgIC8vICAgICB0aGlzLmV2ZW50cy5uZXh0KCdkb3dubG9hZCcpO1xyXG4gICAgICAgICAgLy8gICB9KTtcclxuICAgICAgICAgIC8vIH1cclxuICAgICAgICB9LFxyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgYWRkUHJpbnRCdXR0b24oKSB7XHJcbiAgICB0aGlzLndlYlZpZXdlckluc3RhbmNlLnNldEhlYWRlckl0ZW1zKChoZWFkZXIpID0+IHtcclxuICAgICAgaGVhZGVyLnB1c2goe1xyXG4gICAgICAgIHR5cGU6ICdhY3Rpb25CdXR0b24nLFxyXG4gICAgICAgIGltZzogJzxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIj48ZGVmcz48c3R5bGU+LmNscy0xe2ZpbGw6I2FiYjBjNDt9PC9zdHlsZT48L2RlZnM+PHRpdGxlPmljb24gLSBoZWFkZXIgLSBwcmludCAtIGxpbmU8L3RpdGxlPjxwYXRoIGNsYXNzPVwiY2xzLTFcIiBkPVwiTTIwLDZIMThWMkg2VjZINEEyLDIsMCwwLDAsMiw4djlhMiwyLDAsMCwwLDIsMkg2djNIMThWMTloMmEyLDIsMCwwLDAsMi0yVjhBMiwyLDAsMCwwLDIwLDZaTTgsNGg4VjZIOFptOCwxNkg4VjE2aDhabTQtM0gxOFYxNEg2djNINFY4SDIwWm0tNC03aDJ2MkgxNlptLTMsMGgydjJIMTNaXCI+PC9wYXRoPjwvc3ZnPicsXHJcbiAgICAgICAgdGl0bGU6IHRoaXMuaXNBcmFiaWMgPyBcIti32KjYp9i52KlcIiA6ICdQcmludCcsXHJcbiAgICAgICAgb25DbGljazogKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5wZGZ0cm9uU2VydmljZS5pbnN0YW5jZS5wcmludCgpO1xyXG4gICAgICAgICAgdGhpcy5ldmVudHMubmV4dCgncHJpbnQnKTtcclxuICAgICAgICB9LFxyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgYWRkV2F0ZXJtYXJrKCkge1xyXG4gICAgY29uc3QgdXNlcmluZm8gPSB0aGlzLm51eGVvLm51eGVvQ2xpZW50LnVzZXIucHJvcGVydGllcztcclxuICAgIHRoaXMucGRmdHJvblNlcnZpY2UuYWRkV2F0ZXJtYXJrKFxyXG4gICAgICBgJHt1c2VyaW5mby51c2VybmFtZX0gICAgYFxyXG4gICAgICAvLyBgJHt1c2VyaW5mby5maXJzdE5hbWV9ICR7XHJcbiAgICAgIC8vICAgdXNlcmluZm8ubGFzdE5hbWVcclxuICAgICAgLy8gfSBgXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgbG9hZERvY3VtZW50KCk6IHZvaWQge1xyXG4gICAgaWYgKCF0aGlzLndlYlZpZXdlckluc3RhbmNlIHx8ICghdGhpcy5maWxlRGF0YSAmJiAhdGhpcy5maWxlVVJMKSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBjb25zdCB7IGRvY1ZpZXdlciwgYW5ub3RNYW5hZ2VyLCBBbm5vdGF0aW9ucyB9ID0gdGhpcy53ZWJWaWV3ZXJJbnN0YW5jZTtcclxuICAgIGRvY1ZpZXdlci5vbignZG9jdW1lbnRMb2FkZWQnLCAoKSA9PiB7XHJcbiAgICAgIGxldCBmaXRNb2RlID0gdGhpcy53ZWJWaWV3ZXJJbnN0YW5jZS5GaXRNb2RlLkZpdFdpZHRoO1xyXG4gICAgICBpZiAodGhpcy5maXRNb2RlID09PSAnRml0UGFnZScpIHtcclxuICAgICAgICBmaXRNb2RlID0gdGhpcy53ZWJWaWV3ZXJJbnN0YW5jZS5GaXRNb2RlLkZpdFBhZ2U7XHJcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5maXRNb2RlID09PSAnWm9vbScpIHtcclxuICAgICAgICBmaXRNb2RlID0gdGhpcy53ZWJWaWV3ZXJJbnN0YW5jZS5GaXRNb2RlLlpvb207XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy53ZWJWaWV3ZXJJbnN0YW5jZS5zZXRGaXRNb2RlKGZpdE1vZGUpO1xyXG4gICAgfSk7XHJcbiAgICBpZiAoIXRoaXMuZWRpdE1vZGUpIHtcclxuICAgICAgdGhpcy53ZWJWaWV3ZXJJbnN0YW5jZS5hbm5vdE1hbmFnZXIuc2V0UmVhZE9ubHkodHJ1ZSk7XHJcbiAgICAgIC8vIGluc3RhbmNlLmVuYWJsZVRvb2xzKFtdKTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmZpbGVVUkwgJiYgdGhpcy5maWxlVVJMLmxlbmd0aCkge1xyXG4gICAgICB0aGlzLndlYlZpZXdlckluc3RhbmNlLmxvYWREb2N1bWVudCh0aGlzLmZpbGVVUkwsIHtcclxuICAgICAgICB4b2RzdHJlYW1pbmc6dHJ1ZSxcclxuICAgICAgICBjdXN0b21IZWFkZXJzOiB7XHJcbiAgICAgICAgICBBdXRob3JpemF0aW9uOiB0aGlzLmF1dGhIZWFkZXIsXHJcbiAgICAgICAgfSxcclxuICAgICAgICAvLyB3aXRoQ3JlZGVudGlhbHM6IHRydWUsXHJcbiAgICAgIH0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy53ZWJWaWV3ZXJJbnN0YW5jZS5sb2FkRG9jdW1lbnQoXHJcbiAgICAgICAgbmV3IEJsb2IoW25ldyBVaW50OEFycmF5KHRoaXMuZmlsZURhdGEpXSwgeyB0eXBlOiB0aGlzLkRPQ1VNRU5UX1RZUEUgfSksXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgZmlsZW5hbWU6IHRoaXMuZmlsZVRpdGxlLFxyXG4gICAgICAgIH1cclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmlzRmV0Y2hpbmcgPSBmYWxzZTtcclxuICAgIGlmICh0aGlzLmNvcnJlc3BvbmRhbmNlICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgLy8gaWYgd2UgbmVlZCB0byBjaGVjayBvbiBzZWNyZWN5IGxldmVsIGZvciBhZGRpbmcgd2F0ZXIgbWFyayBvciBub3QgXHJcbiAgICAgIGlmICh0aGlzLmVudmlyb25tZW50LmVuYWJsZVZpZXdlcldhdGVyTWFyayAmJiB0aGlzLnNlY3JlY3lQcm9wZXJ0eSkge1xyXG4gICAgICAgIC8vIGNoZWNrIGZvciBzZWNyZWN5IGxldmVsIGJlZm9yIGFkZGluZyB3YXRlcm1hcmtcclxuICAgICAgICBpZiAodGhpcy5jb3JyZXNwb25kYW5jZS5wcm9wZXJ0aWVzW3RoaXMuc2VjcmVjeVByb3BlcnR5XSAmJiB0aGlzLmNvcnJlc3BvbmRhbmNlLnByb3BlcnRpZXNbdGhpcy5zZWNyZWN5UHJvcGVydHldICE9PSAnTm9ybWFsJykge1xyXG4gICAgICAgICAgdGhpcy5hZGRXYXRlcm1hcmsoKVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBlbHNlIGlmICh0aGlzLmVudmlyb25tZW50LmVuYWJsZVZpZXdlcldhdGVyTWFyayAmJiAhdGhpcy5zZWNyZWN5UHJvcGVydHkpIHtcclxuICAgICAgICB0aGlzLmFkZFdhdGVybWFyaygpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgfVxyXG5cclxuICBhc3luYyBleHBvcnRBc0Jsb2IoKTogUHJvbWlzZTxCbG9iPiB7XHJcbiAgICBjb25zdCBkb2MgPSB0aGlzLndlYlZpZXdlckluc3RhbmNlLmRvY1ZpZXdlci5nZXREb2N1bWVudCgpO1xyXG4gICAgY29uc3QgeGZkZlN0cmluZyA9XHJcbiAgICAgIGF3YWl0IHRoaXMud2ViVmlld2VySW5zdGFuY2UuYW5ub3RNYW5hZ2VyLmV4cG9ydEFubm90YXRpb25zKCk7XHJcbiAgICBjb25zdCBkYXRhID0gYXdhaXQgZG9jLmdldEZpbGVEYXRhKHtcclxuICAgICAgLy8gc2F2ZXMgdGhlIGRvY3VtZW50IHdpdGggYW5ub3RhdGlvbnMgaW4gaXRcclxuICAgICAgeGZkZlN0cmluZyxcclxuICAgIH0pO1xyXG4gICAgY29uc3QgYXJyID0gbmV3IFVpbnQ4QXJyYXkoZGF0YSk7XHJcbiAgICBjb25zdCBibG9iID0gbmV3IEJsb2IoW2Fycl0sIHsgdHlwZTogdGhpcy5ET0NVTUVOVF9UWVBFIH0pO1xyXG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShibG9iKTtcclxuICB9XHJcblxyXG4gIHRvZ2dsZUVkaXQoKTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMuYWN0aW9uQ2xpY2tlZCkge1xyXG4gICAgICAvLyBhY3Rpb24gY2xpY2tlZCBpcyBub3QgY2xpY2tlZCB0aGVuIG5vIHVwZGF0ZSBtb2RlIG9wZW5lZFxyXG4gICAgICB0aGlzLndlYlZpZXdlckluc3RhbmNlLmRpc2FibGVFbGVtZW50cyhbXHJcbiAgICAgICAgJ3Rvb2xiYXJHcm91cC1TaGFwZXMnLFxyXG4gICAgICAgICd0b29sYmFyR3JvdXAtRWRpdCcsXHJcbiAgICAgICAgJ3Rvb2xiYXJHcm91cC1JbnNlcnQnLFxyXG4gICAgICAgICd0b29sYmFyR3JvdXAtQW5ub3RhdGUnLFxyXG4gICAgICBdKTtcclxuICAgICAgdGhpcy53ZWJWaWV3ZXJJbnN0YW5jZS5hbm5vdE1hbmFnZXIuc2V0UmVhZE9ubHkodHJ1ZSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAvLyBlZGl0IG1vZGUgb3BlbmVkIGFuZCBtdXN0IGJlIHdoZW4gYWN0aW9uIGlzIGNsaWNrZWRcclxuICAgICAgaWYgKHRoaXMuZWRpdGluZ1R5cGUpIHtcclxuICAgICAgICB0aGlzLndlYlZpZXdlckluc3RhbmNlLmRpc2FibGVFbGVtZW50cyhbXHJcbiAgICAgICAgICAndG9vbGJhckdyb3VwLVNoYXBlcycsXHJcbiAgICAgICAgICAndG9vbGJhckdyb3VwLUVkaXQnLFxyXG4gICAgICAgICAgJ3Rvb2xiYXJHcm91cC1JbnNlcnQnLFxyXG4gICAgICAgICAgJ3Rvb2xiYXJHcm91cC1Bbm5vdGF0ZScsXHJcbiAgICAgICAgXSk7XHJcbiAgICAgICAgbGV0IGdyb3VwIDtcclxuICAgICAgICBpZih0aGlzLmVkaXRpbmdUeXBlID09PSAnc2lnbkRvYycpe1xyXG4gICAgICAgICAgdGhpcy53ZWJWaWV3ZXJJbnN0YW5jZS5lbmFibGVFbGVtZW50cyhbXHJcbiAgICAgICAgICAgICd0b29sYmFyR3JvdXAtSW5zZXJ0J1xyXG4gICAgICAgICAgXSk7XHJcblxyXG4gICAgICAgIH1lbHNlIGlmKHRoaXMuZWRpdGluZ1R5cGUgPT09ICdhbm5vdGF0ZScpe1xyXG4gICAgICAgICAgdGhpcy53ZWJWaWV3ZXJJbnN0YW5jZS5lbmFibGVFbGVtZW50cyhbXHJcbiAgICAgICAgICAgICd0b29sYmFyR3JvdXAtU2hhcGVzJyxcclxuICAgICAgICAgICAgJ3Rvb2xiYXJHcm91cC1FZGl0JyxcclxuICAgICAgICAgICAgJ3Rvb2xiYXJHcm91cC1Bbm5vdGF0ZScsXHJcbiAgICAgICAgICBdKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy53ZWJWaWV3ZXJJbnN0YW5jZS5lbmFibGVFbGVtZW50cyhbXHJcbiAgICAgICAgICAndG9vbGJhckdyb3VwLVNoYXBlcycsXHJcbiAgICAgICAgICAndG9vbGJhckdyb3VwLUVkaXQnLFxyXG4gICAgICAgICAgJ3Rvb2xiYXJHcm91cC1JbnNlcnQnLFxyXG4gICAgICAgICAgJ3Rvb2xiYXJHcm91cC1Bbm5vdGF0ZScsXHJcbiAgICAgICAgXSk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy53ZWJWaWV3ZXJJbnN0YW5jZS5hbm5vdE1hbmFnZXIuc2V0UmVhZE9ubHkoZmFsc2UpO1xyXG4gICAgICAvLyB0aGlzLndlYlZpZXdlckluc3RhbmNlLnNldFRvb2xiYXJHcm91cCgndG9vbGJhckdyb3VwLUFubm90YXRlJyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy53ZWJWaWV3ZXJJbnN0YW5jZSkge1xyXG4gICAgICB0aGlzLnRvZ2dsZUVkaXQoKTtcclxuICAgICAgaWYgKFxyXG4gICAgICAgIGNoYW5nZXMudXJsRmlsZUNvbnRlbnQgJiZcclxuICAgICAgICBjaGFuZ2VzLnVybEZpbGVDb250ZW50LnByZXZpb3VzVmFsdWUgJiZcclxuICAgICAgICBjaGFuZ2VzLnVybEZpbGVDb250ZW50LnByZXZpb3VzVmFsdWUgIT09XHJcbiAgICAgICAgY2hhbmdlcy51cmxGaWxlQ29udGVudC5jdXJyZW50VmFsdWVcclxuICAgICAgKSB7XHJcbiAgICAgICAgdGhpcy5uZ09uRGVzdHJveSgpO1xyXG4gICAgICAgIHRoaXMubmdPbkluaXQoKTtcclxuICAgICAgICB0aGlzLm5nQWZ0ZXJWaWV3SW5pdCgpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHBkZlRyb25FdmVudChldmVudCkge1xyXG4gICAgaWYgKHRoaXNbZXZlbnQuYWN0aW9uXSkge1xyXG4gICAgICAvLyBtZXRob2QgZXhpc3RzIGluIHRoZSBjb21wb25lbnRcclxuICAgICAgLy8gIHRoaXNbZXZlbnQuYWN0aW9uXShldmVudC5wYXJhbXMpOyAvLyBjYWxsIGl0XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHNlYXJjaCByZXN1bHRzIHNlY3Rpb24gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgXHJcbiAgcGFnZXM6YW55O1xyXG4gIHN0YW5kYXJkSGVpZ2h0O1xyXG4gIHN0YW5kYXJkV2lkdGg7XHJcbiAgcGFnZUhlaWdodDtcclxuICBwYWdlV2lkdGg7XHJcbiAgc2F2ZWRBbm90YXRpb25zID0gW107XHJcbiAgZmlsZVdpdGhPY3IgPSBmYWxzZTtcclxuICBuZXdBbm5vdGF0aW9ucz1bXTtcclxuICBteVNlYXJjaFN0cmluZ1Jlc3VsdHMgPSBbXTtcclxuICByZWNpdmVkU2VhcmNoU3RyaW5nc0FycmF5ID0gW107XHJcblxyXG4gIC8vIGFkZGluZyBzZWFyY2ggbGlzbmVyIHRvIGxpc2VuIHRvIGludGVybmFsIHNlYXJjaCBmcm9tIHVpIGFuZCB3aXRob3V0IG9jclxyXG4gIGFkZFNlYXJjaExpc3RuZXIoKSB7XHJcbiAgICBjb25zdCB7IGFubm90TWFuYWdlciwgZG9jVmlld2VyLCBBbm5vdGF0aW9ucyB9ID0gdGhpcy53ZWJWaWV3ZXJJbnN0YW5jZTtcclxuICAgIGNvbnN0IHNlYXJjaExpc3RlbmVyID0gKHNlYXJjaFBhdHRlcm4sIG9wdGlvbnMsIHJlc3VsdHMpID0+IHtcclxuXHJcbiAgICAgICAgdGhpcy5teVNlYXJjaFN0cmluZ1Jlc3VsdHMgPSBbXTtcclxuICAgICAgaWYodGhpcy5zYXZlZEFub3RhdGlvbnMubGVuZ3RoID4gMCl7XHJcbiAgICAgICAgdGhpcy5zYXZlZEFub3RhdGlvbnMubWFwKGFubm90YXRpb24gPT4ge1xyXG4gICAgICAgICAgYW5ub3RhdGlvbi5IaWRkZW4gPSB0cnVlO1xyXG4gICAgICAgIC8vIEFsd2F5cyByZWRyYXcgYW5ub3RhdGlvbiBpZiByZW5kZXJpbmcgd2FzIHVwZGF0ZWRcclxuICAgICAgICBhbm5vdE1hbmFnZXIucmVkcmF3QW5ub3RhdGlvbihhbm5vdGF0aW9uKTtcclxuICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgICAgLy8gZG9uJ3QgZG8gYW55IHNlYXJjaCB1bnRpbCB0aGVyZSBpcyBhIHNlYXJjaCBwYXR0ZXJuXHJcbiAgICAgIGlmKHNlYXJjaFBhdHRlcm4udHJpbSgpLmxlbmd0aCA+IDApe1xyXG4gICAgICAgICAgICAvLyBhZGQgcmVkYWN0aW9uIGFubm90YXRpb24gZm9yIGVhY2ggc2VhcmNoIHJlc3VsdFxyXG4gICAgICAgICAgICB0aGlzLm5ld0Fubm90YXRpb25zID0gcmVzdWx0cy5tYXAocmVzdWx0ID0+IHtcclxuICAgICAgICAgICAgICBjb25zdCBhbm5vdGF0aW9uID0gbmV3IEFubm90YXRpb25zLlRleHRIaWdobGlnaHRBbm5vdGF0aW9uKCk7XHJcbiAgICAgICAgICAgICAgYW5ub3RhdGlvbi5RdWFkcyA9IHJlc3VsdC5xdWFkcy5tYXAocXVhZCA9PiBxdWFkLmdldFBvaW50cygpKTtcclxuICAgICAgICAgICAgICBhbm5vdGF0aW9uLlBhZ2VOdW1iZXIgPSByZXN1bHQucGFnZU51bTtcclxuICAgICAgICAgICAgICBhbm5vdGF0aW9uLlN0cm9rZUNvbG9yID0gbmV3IEFubm90YXRpb25zLkNvbG9yKDI1MCwyMDYsMCwwLjUwMTk2KTsgIFxyXG4gICAgICAgICAgICAgIGFubm90YXRpb24uQXV0aG9yID0gdGhpcy53ZWJWaWV3ZXJJbnN0YW5jZS5hbm5vdE1hbmFnZXIuZ2V0Q3VycmVudFVzZXIoKTsgICAgICBcclxuICAgICAgICAgICAgICByZXR1cm4gYW5ub3RhdGlvbjtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHRoaXMuc2F2ZWRBbm90YXRpb25zLnB1c2goLi4udGhpcy5uZXdBbm5vdGF0aW9ucyk7XHJcbiAgICAgICAgICAgIGFubm90TWFuYWdlci5hZGRBbm5vdGF0aW9ucyh0aGlzLm5ld0Fubm90YXRpb25zKTtcclxuICAgICAgICAgICAgYW5ub3RNYW5hZ2VyLmRyYXdBbm5vdGF0aW9uc0Zyb21MaXN0KHRoaXMubmV3QW5ub3RhdGlvbnMpO1xyXG4gICAgICB9ZWxzZXtcclxuICAgICAgICBkb2NWaWV3ZXIuY2xlYXJTZWFyY2hSZXN1bHRzKCk7XHJcbiAgICAgIH1cclxuICAgIH07XHJcblxyXG4gICAgZG9jVmlld2VyLm9uKCdkb2N1bWVudExvYWRlZCcsICgpID0+IHtcclxuICAgICAgdGhpcy53ZWJWaWV3ZXJJbnN0YW5jZS5hZGRTZWFyY2hMaXN0ZW5lcihzZWFyY2hMaXN0ZW5lcik7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8vIHBlcmZvcm0gYXV0b21hdGljIHNlYXJjaCB3aGVuIGludGVyaW5nIHRoZSBwYWdlIFxyXG4gIGF1dG9tYXRpY1NlYXJjaChzZWFyY2hUZXh0QXJyYXkpe1xyXG4gICAgY29uc3QgeyBhbm5vdE1hbmFnZXIsIGRvY1ZpZXdlciwgQW5ub3RhdGlvbnMgfSA9IHRoaXMud2ViVmlld2VySW5zdGFuY2U7XHJcbiAgICBsZXQgc2VhcmNoT3B0aW9ucztcclxuICAgIHRoaXMud2ViVmlld2VySW5zdGFuY2Uub3BlbkVsZW1lbnRzKFsnc2VhcmNoUGFuZWwnXSk7XHJcbiAgICBkb2NWaWV3ZXIub24oJ2RvY3VtZW50TG9hZGVkJywgKCkgPT4ge1xyXG4gICAgICBjb25zdCBtb2RlID0gdGhpcy53ZWJWaWV3ZXJJbnN0YW5jZS5Db3JlQ29udHJvbHMuU2VhcmNoLk1vZGUuUEFHRV9TVE9QIHwgdGhpcy53ZWJWaWV3ZXJJbnN0YW5jZS5Db3JlQ29udHJvbHMuU2VhcmNoLk1vZGUuSElHSExJR0hUIHwgdGhpcy53ZWJWaWV3ZXJJbnN0YW5jZS5Db3JlQ29udHJvbHMuU2VhcmNoLk1vZGUuQU1CSUVOVF9TVFJJTkc7XHJcbiAgICAgIHRoaXMubXlTZWFyY2hTdHJpbmdSZXN1bHRzID0gW107IC8vIGVtcHR5IG15IHNlYXJjaCByZXN1bHQgd2hlbiBzdGFydGluZyBuZXcgc2VhcmNoXHJcbiAgICAgIGlmICh0aGlzLmZpbGVXaXRoT2NyKSB7XHJcbiAgICAgICAgXHJcbiAgICAgICAgLy8gYWRkIHJlZGFjdGlvbiBhbm5vdGF0aW9uIGZvciBlYWNoIHNlYXJjaCByZXN1bHRcclxuICAgICAgICAgIGNvbnN0IGFubm90YXRpb24gPSBuZXcgQW5ub3RhdGlvbnMuVGV4dEhpZ2hsaWdodEFubm90YXRpb24oKTtcclxuICAgICAgICAgIHNlYXJjaFRleHRBcnJheS5tYXAoc2VhcmNoVGV4dCA9PiB7XHJcbiAgICAgICAgICAgIGxldCBteVNlYXJjaCA9IHNlYXJjaFRleHQuc3BsaXQoJyAnKTtcclxuICAgICAgICAgICAgaWYobXlTZWFyY2gubGVuZ3RoID4gMSl7XHJcbiAgICAgICAgICAgICAgLy8gdGhlbiBpIGFtIHNlYXJjaGluZyB3aXRoIG1vcmUgdGhhbiBvbmUgd29yZFxyXG4gICAgICAgICAgICAgIHRoaXMucGFnZXMucGFnZXMuZm9yRWFjaCgocGFnZSAsIGluZGV4KSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnBhZ2VIZWlnaHQgPSBwYWdlLnBhZ2VfaGVpZ2h0O1xyXG4gICAgICAgICAgICAgICAgdGhpcy5wYWdlV2lkdGggPSBwYWdlLnBhZ2Vfd2lkdGg7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnN0YW5kYXJkSGVpZ2h0ID0gdGhpcy53ZWJWaWV3ZXJJbnN0YW5jZS5kb2NWaWV3ZXIuZ2V0UGFnZUhlaWdodCgoaW5kZXgrMSkpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zdGFuZGFyZFdpZHRoID0gdGhpcy53ZWJWaWV3ZXJJbnN0YW5jZS5kb2NWaWV3ZXIuZ2V0UGFnZVdpZHRoKChpbmRleCsxKSk7XHJcbiAgICAgICAgICAgICAgICBwYWdlLnpvbmVzLmZvckVhY2goem9uZSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgIHpvbmUucGFyYWdyYXBocy5mb3JFYWNoKHBhcmFncmFwaCA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgcGFyYWdyYXBoLmxpbmVzLmZvckVhY2gobGluZSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICBpZihsaW5lLnRleHQuaW5jbHVkZXMoc2VhcmNoVGV4dCkpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLlNlYXJjaEZvcldvcmRJbkxpbmUobXlTZWFyY2gsbGluZSwoaW5kZXgrMSkgLCBwYWdlKVxyXG4gICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgLy8gdGhlbiBpIGFtIHNlYXJjaGluZyB3aXRoIG9ubHkgb25lIHdvcmQgXHJcbiAgICAgICAgICAgICAgdGhpcy5zZWFyY2hGb3JXb3JkSW5BbGxQYWdlcyhzZWFyY2hUZXh0KVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICAgZG9jVmlld2VyLmNsZWFyU2VhcmNoUmVzdWx0cygpO1xyXG4gICAgICAgICAgdGhpcy5kaXNwYWxheVNlYXJjaFJlc3VsdHMoZG9jVmlld2VyKTtcclxuICAgICAgfSBlbHNle1xyXG4gICAgICAgIHNlYXJjaE9wdGlvbnMgPSB7XHJcbiAgICAgICAgICAvLyBJZiB0cnVlLCBhIHNlYXJjaCBvZiB0aGUgZW50aXJlIGRvY3VtZW50IHdpbGwgYmUgcGVyZm9ybWVkLiBPdGhlcndpc2UsIGEgc2luZ2xlIHNlYXJjaCB3aWxsIGJlIHBlcmZvcm1lZC5cclxuICAgICAgICAgIGZ1bGxTZWFyY2g6IHRydWUsXHJcbiAgICAgICAgICAvLyBUaGUgY2FsbGJhY2sgZnVuY3Rpb24gdGhhdCBpcyBjYWxsZWQgd2hlbiB0aGUgc2VhcmNoIHJldHVybnMgYSByZXN1bHQuXHJcbiAgICAgICAgICBvblJlc3VsdDogcmVzdWx0ID0+IHtcclxuICAgICAgICAgICAgLy8gd2l0aCAnUEFHRV9TVE9QJyBtb2RlLCB0aGUgY2FsbGJhY2sgaXMgaW52b2tlZCBhZnRlciBlYWNoIHBhZ2UgaGFzIGJlZW4gc2VhcmNoZWQuXHJcbiAgICAgICAgICAgIGlmIChyZXN1bHQucmVzdWx0Q29kZSA9PT0gdGhpcy53ZWJWaWV3ZXJJbnN0YW5jZS5Db3JlQ29udHJvbHMuU2VhcmNoLlJlc3VsdENvZGUuRk9VTkQpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGFubm90YXRpb24gPSBuZXcgQW5ub3RhdGlvbnMuVGV4dEhpZ2hsaWdodEFubm90YXRpb24oKTtcclxuICAgICAgICAgICAgICAgIGFubm90YXRpb24uUXVhZHMgPSByZXN1bHQucXVhZHMubWFwKHF1YWQgPT4gcXVhZC5nZXRQb2ludHMoKSk7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhhbm5vdGF0aW9uLlF1YWRzKTtcclxuICAgICAgICAgICAgICAgIGFubm90YXRpb24uUGFnZU51bWJlciA9IHJlc3VsdC5wYWdlTnVtO1xyXG4gICAgICAgICAgICAgICAgYW5ub3RhdGlvbi5TdHJva2VDb2xvciA9IG5ldyBBbm5vdGF0aW9ucy5Db2xvcigyNTAsMjA2LDAsMC41MDE5Nik7ICAgXHJcbiAgICAgICAgICAgICAgICBhbm5vdGF0aW9uLkF1dGhvciA9IHRoaXMud2ViVmlld2VySW5zdGFuY2UuYW5ub3RNYW5hZ2VyLmdldEN1cnJlbnRVc2VyKCk7ICBcclxuICAgICAgICAgICAgICAgIHRoaXMuc2F2ZWRBbm90YXRpb25zLnB1c2goYW5ub3RhdGlvbikgICA7XHJcbiAgICAgICAgICAgICAgICBhbm5vdE1hbmFnZXIuYWRkQW5ub3RhdGlvbnMoW2Fubm90YXRpb25dKTtcclxuICAgICAgICAgICAgICAgIGFubm90TWFuYWdlci5kcmF3QW5ub3RhdGlvbnNGcm9tTGlzdChbYW5ub3RhdGlvbl0pO1xyXG4gICAgICAgICAgICAgICAgZG9jVmlld2VyLmRpc3BsYXlBZGRpdGlvbmFsU2VhcmNoUmVzdWx0cyhbcmVzdWx0XSk7XHJcblxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuICAgICAgICBzZWFyY2hUZXh0QXJyYXkubWFwKHNlYXJjaGVkVGV4dCA9PiB7XHJcbiAgICAgICAgICBkb2NWaWV3ZXIudGV4dFNlYXJjaEluaXQoc2VhcmNoZWRUZXh0LCBtb2RlLCBzZWFyY2hPcHRpb25zKTtcclxuICAgICAgICB9KVxyXG4gICAgICB9XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgLy8gc2VhcmNoIGZvciBzaW5nbGUgd29yZCBpbiBhbGwgcGFnZXMgXHJcbiAgc2VhcmNoRm9yV29yZEluQWxsUGFnZXMoc2VhcmNoZWRXb3JkKXtcclxuICAgIHRoaXMucGFnZXMucGFnZXMuZm9yRWFjaCgocGFnZSAsIGluZGV4KSA9PiB7XHJcbiAgICAgIHRoaXMucGFnZUhlaWdodCA9IHBhZ2UucGFnZV9oZWlnaHQ7XHJcbiAgICAgIHRoaXMucGFnZVdpZHRoID0gcGFnZS5wYWdlX3dpZHRoO1xyXG4gICAgICB0aGlzLnN0YW5kYXJkSGVpZ2h0ID0gdGhpcy53ZWJWaWV3ZXJJbnN0YW5jZS5kb2NWaWV3ZXIuZ2V0UGFnZUhlaWdodCgoaW5kZXgrMSkpO1xyXG4gICAgICB0aGlzLnN0YW5kYXJkV2lkdGggPSB0aGlzLndlYlZpZXdlckluc3RhbmNlLmRvY1ZpZXdlci5nZXRQYWdlV2lkdGgoKGluZGV4KzEpKTtcclxuICAgICAgY29uc3QgeCA9ICh0aGlzLnBhZ2VXaWR0aCAvIHRoaXMuc3RhbmRhcmRXaWR0aCk7IC8vIHdpZHRoIHJhdGlvXHJcbiAgICAgIGNvbnN0IHkgPSAodGhpcy5wYWdlSGVpZ2h0IC8gdGhpcy5zdGFuZGFyZEhlaWdodCk7IC8vIGhlaWdodCByYXRpb1xyXG4gICAgICBwYWdlLnpvbmVzLmZvckVhY2goem9uZSA9PiB7XHJcbiAgICAgICAgem9uZS5wYXJhZ3JhcGhzLmZvckVhY2gocGFyYWdyYXBoID0+IHtcclxuICAgICAgICAgIHBhcmFncmFwaC5saW5lcy5mb3JFYWNoKGxpbmUgPT4ge1xyXG4gICAgICAgICAgICBsaW5lLndvcmRzLmZvckVhY2god29yZCA9PiB7XHJcbiAgICAgICAgICAgICAgaWYgKHdvcmQudGV4dC5pbmNsdWRlcyhzZWFyY2hlZFdvcmQpKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBhbm5vdGF0aW9uLlBhZ2VOdW1iZXIgPSBpbmRleCsxO1xyXG4gICAgICAgICAgICAgICAgbGV0IHF1YWRzID0gW3tcclxuICAgICAgICAgICAgICAgICAgICB4MTogKHdvcmQuY29vcmRpbmF0ZXMudXBwZXJfbGVmdC54IC8geCksXHJcbiAgICAgICAgICAgICAgICAgICAgeDI6ICh3b3JkLmNvb3JkaW5hdGVzLmJvdHRvbV9yaWdodC54IC8geCksXHJcbiAgICAgICAgICAgICAgICAgICAgeDM6ICh3b3JkLmNvb3JkaW5hdGVzLmJvdHRvbV9yaWdodC54IC8geCksXHJcbiAgICAgICAgICAgICAgICAgICAgeDQ6ICh3b3JkLmNvb3JkaW5hdGVzLnVwcGVyX2xlZnQueCAvIHgpLFxyXG4gICAgICAgICAgICAgICAgICAgIHkxOiAod29yZC5jb29yZGluYXRlcy51cHBlcl9sZWZ0LnkgLyB5KSxcclxuICAgICAgICAgICAgICAgICAgICB5MjogKHdvcmQuY29vcmRpbmF0ZXMudXBwZXJfbGVmdC55IC8geSksXHJcbiAgICAgICAgICAgICAgICAgICAgeTM6ICh3b3JkLmNvb3JkaW5hdGVzLmJvdHRvbV9yaWdodC55IC8geSksXHJcbiAgICAgICAgICAgICAgICAgICAgeTQ6ICh3b3JkLmNvb3JkaW5hdGVzLmJvdHRvbV9yaWdodC55IC8geSksXHJcbiAgICAgICAgICAgICAgICAgIH1dXHJcbiAgICAgICAgICAgICAgICB0aGlzLmhpZ2xpZ2h0VGV4dChcclxuICAgICAgICAgICAgICAgICAgcXVhZHMsIFxyXG4gICAgICAgICAgICAgICAgICBpbmRleCsxXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jb25zdHJ1Y3RTZWFyY2hSZXN1bHQoc2VhcmNoZWRXb3JkICwgaW5kZXgrMSAsIHF1YWRzICwgbGluZS50ZXh0ICk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9KVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvLyBzZWFyY2ggZm9yIHdvcmQgaW4gc2luZ2xlIGxpbmUgXHJcbiAgU2VhcmNoRm9yV29yZEluTGluZShsaXN0T2ZTZWFyY2hlZFdvcmRzLCBsaW5lLCBwYWdlbnVtYmVyLCBwYWdlKSB7XHJcbiAgICB0aGlzLnBhZ2VIZWlnaHQgPSBwYWdlLnBhZ2VfaGVpZ2h0O1xyXG4gICAgdGhpcy5wYWdlV2lkdGggPSBwYWdlLnBhZ2Vfd2lkdGg7XHJcbiAgICB0aGlzLnN0YW5kYXJkSGVpZ2h0ID0gdGhpcy53ZWJWaWV3ZXJJbnN0YW5jZS5kb2NWaWV3ZXIuZ2V0UGFnZUhlaWdodCgocGFnZW51bWJlcikpO1xyXG4gICAgdGhpcy5zdGFuZGFyZFdpZHRoID0gdGhpcy53ZWJWaWV3ZXJJbnN0YW5jZS5kb2NWaWV3ZXIuZ2V0UGFnZVdpZHRoKChwYWdlbnVtYmVyKSk7XHJcbiAgICBjb25zdCB4ID0gKHRoaXMucGFnZVdpZHRoIC8gdGhpcy5zdGFuZGFyZFdpZHRoKTsgLy8gd2lkdGggcmF0aW9cclxuICAgIGNvbnN0IHkgPSAodGhpcy5wYWdlSGVpZ2h0IC8gdGhpcy5zdGFuZGFyZEhlaWdodCk7IC8vIGhlaWdodCByYXRpb1xyXG4gICAgLy8gZmluZCBvbmx5IHdvcmRzIHJlbGF0ZWQgdG8gbXkgc2VhcmNoIGZvcm0gdGhlIGxpbmVcclxuICAgIGxldCBteUZvdW5kZWRSZXN1bHRzID0gW107XHJcbiAgICBsZXQgY29ycmVjdFJlc3VsdHMgPSBbXTtcclxuICAgIGxpbmUud29yZHMuZm9yRWFjaCgod29yZCwgd29yZEluZGV4KSA9PiB7XHJcbiAgICAgIGlmIChsaXN0T2ZTZWFyY2hlZFdvcmRzLmluZGV4T2Yod29yZC50ZXh0KSA+IC0xKSB7XHJcbiAgICAgICAgbXlGb3VuZGVkUmVzdWx0cy5wdXNoKHsgd29yZDogd29yZCwgd29yZEluZGV4OiB3b3JkSW5kZXggfSlcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgLy8gZmluZCBvbmx5IHdvcmRzIGV4aXN0IGluIG15IHNlYXJjaCBzZW50ZW5jZSBhbmQgbm90IHNpbmdsZSBhbmQgcmVwZWF0ZWQgd29yZFxyXG4gICAgbXlGb3VuZGVkUmVzdWx0cy5tYXAoKHJlc3VsdCwgaW5kZXgpID0+IHtcclxuICAgICAgaWYgKChteUZvdW5kZWRSZXN1bHRzW2luZGV4XVsnd29yZEluZGV4J10gLSAxID09PSAobXlGb3VuZGVkUmVzdWx0c1tpbmRleCAtIDFdICYmIG15Rm91bmRlZFJlc3VsdHNbaW5kZXggLSAxXVsnd29yZEluZGV4J10pKSB8fFxyXG4gICAgICAgIChteUZvdW5kZWRSZXN1bHRzW2luZGV4ICsgMV0gJiYgKG15Rm91bmRlZFJlc3VsdHNbaW5kZXggKyAxXVsnd29yZEluZGV4J10gLSAxID09PSBteUZvdW5kZWRSZXN1bHRzW2luZGV4XVsnd29yZEluZGV4J10pKSkge1xyXG4gICAgICAgIGNvcnJlY3RSZXN1bHRzLnB1c2gocmVzdWx0KVxyXG4gICAgICB9XHJcbiAgICB9KVxyXG5cclxuICAgIC8vIGhpZ2hsaWh0IHRoZXNlIHdvcmRzIGFmdGVyIGVsZW1pbmF0aW5nIGFsbCByZXBlYXRlZCBhbmQgcmVsYXRlZCB3b3Jkc1xyXG4gICAgLy8gbXVzdCBiZSBmb3IgbG9vcCBzcCBpIGNhbiBjb250cm9sIHRoZSBzdGVwIGluIGVhY2ggbG9vcFxyXG4gICAgbGV0IHF1YWRzID0gW107XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvcnJlY3RSZXN1bHRzLmxlbmd0aDsgKGkgPSBpICsgbGlzdE9mU2VhcmNoZWRXb3Jkcy5sZW5ndGgpKSB7XHJcbiAgICAgIHF1YWRzLnB1c2goXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgeDE6IChjb3JyZWN0UmVzdWx0c1soKGkgKyBsaXN0T2ZTZWFyY2hlZFdvcmRzLmxlbmd0aCkgLSAxKV0ud29yZC5jb29yZGluYXRlcy51cHBlcl9sZWZ0LnggLyB4KSxcclxuICAgICAgICAgIHgyOiAoY29ycmVjdFJlc3VsdHNbaV0ud29yZC5jb29yZGluYXRlcy5ib3R0b21fcmlnaHQueCAvIHgpLFxyXG4gICAgICAgICAgeDM6IChjb3JyZWN0UmVzdWx0c1tpXS53b3JkLmNvb3JkaW5hdGVzLmJvdHRvbV9yaWdodC54IC8geCksXHJcbiAgICAgICAgICB4NDogKGNvcnJlY3RSZXN1bHRzWygoaSArIGxpc3RPZlNlYXJjaGVkV29yZHMubGVuZ3RoKSAtIDEpXS53b3JkLmNvb3JkaW5hdGVzLnVwcGVyX2xlZnQueCAvIHgpLFxyXG4gICAgICAgICAgeTE6IChjb3JyZWN0UmVzdWx0c1tpXS53b3JkLmNvb3JkaW5hdGVzLnVwcGVyX2xlZnQueSAvIHkpLFxyXG4gICAgICAgICAgeTI6IChjb3JyZWN0UmVzdWx0c1soKGkgKyBsaXN0T2ZTZWFyY2hlZFdvcmRzLmxlbmd0aCkgLSAxKV0ud29yZC5jb29yZGluYXRlcy51cHBlcl9sZWZ0LnkgLyB5KSxcclxuICAgICAgICAgIHkzOiAoY29ycmVjdFJlc3VsdHNbKChpICsgbGlzdE9mU2VhcmNoZWRXb3Jkcy5sZW5ndGgpIC0gMSldLndvcmQuY29vcmRpbmF0ZXMuYm90dG9tX3JpZ2h0LnkgLyB5KSxcclxuICAgICAgICAgIHk0OiAoY29ycmVjdFJlc3VsdHNbaV0ud29yZC5jb29yZGluYXRlcy5ib3R0b21fcmlnaHQueSAvIHkpLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICB0aGlzLmhpZ2xpZ2h0VGV4dChcclxuICAgICAgICBxdWFkcyxcclxuICAgICAgICBwYWdlbnVtYmVyXHJcbiAgICAgICk7XHJcbiAgICAgIHRoaXMuY29uc3RydWN0U2VhcmNoUmVzdWx0KGxpc3RPZlNlYXJjaGVkV29yZHMuam9pbihcIiBcIikgLCBwYWdlbnVtYmVyICwgcXVhZHMgLCBsaW5lLnRleHQpXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjb25zdHJ1Y3RTZWFyY2hSZXN1bHQoc2VhcmNoZWRUZXh0ICwgcGFnZU51bSAsIHF1YWRzICwgbGluZSl7XHJcbiAgIGxldCBteVNlYXJjaFN0YXJ0VGV4dEluZGV4ID0gbGluZS5pbmRleE9mKHNlYXJjaGVkVGV4dCk7XHJcbiAgIGxldCBteVNlZWFyY2hlZFRleHRFbmRJbmRleCA9IG15U2VhcmNoU3RhcnRUZXh0SW5kZXggKyBzZWFyY2hlZFRleHQubGVuZ3RoO1xyXG4gICAgbGV0IHNlYXJjaFJlc3VsdE9iamVjdCA9IHtcclxuICAgICAgICBhbWJpZW50U3RyOiBsaW5lLFxyXG4gICAgICAgIHJlc3VsdFN0cjogc2VhcmNoZWRUZXh0LFxyXG4gICAgICAgIHJlc3VsdFN0clN0YXJ0Om15U2VhcmNoU3RhcnRUZXh0SW5kZXgsXHJcbiAgICAgICAgcmVzdWx0U3RyRW5kOiBteVNlZWFyY2hlZFRleHRFbmRJbmRleCxcclxuICAgICAgICBwYWdlTnVtOiBwYWdlTnVtLFxyXG4gICAgICAgIHJlc3VsdENvZGU6IDIsXHJcbiAgICAgICAgcXVhZHM6IFt7XHJcbiAgICAgICAgICAgIGVhOiBxdWFkc1swXVsneTMnXSxcclxuICAgICAgICAgICAgZmE6IHF1YWRzWzBdWyd5NCddLFxyXG4gICAgICAgICAgICBoYTogcXVhZHNbMF1bJ3gxJ10sXHJcbiAgICAgICAgICAgIGlhOiBxdWFkc1swXVsneDInXSxcclxuICAgICAgICAgICAgcEI6IHF1YWRzWzBdWyd4MyddLFxyXG4gICAgICAgICAgICBxQjogcXVhZHNbMF1bJ3g0J10sXHJcbiAgICAgICAgICAgIHJCOiBxdWFkc1swXVsneTEnXSxcclxuICAgICAgICAgICAgc0I6IHF1YWRzWzBdWyd5MiddXHJcbiAgICAgICAgfV1cclxuICAgIH1cclxuICAgIHRoaXMubXlTZWFyY2hTdHJpbmdSZXN1bHRzLnB1c2goc2VhcmNoUmVzdWx0T2JqZWN0KTtcclxuICAgIGNvbnNvbGUubG9nKHRoaXMubXlTZWFyY2hTdHJpbmdSZXN1bHRzKTtcclxuICB9XHJcblxyXG4gIGRpc3BhbGF5U2VhcmNoUmVzdWx0cyhkb2NWaWV3ZXIpe1xyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgZG9jVmlld2VyLmRpc3BsYXlBZGRpdGlvbmFsU2VhcmNoUmVzdWx0cyh0aGlzLm15U2VhcmNoU3RyaW5nUmVzdWx0cyk7XHJcbiAgICB9LCA1MDApO1xyXG4gIH1cclxuXHJcbiAgLy8gZHJhdyBoaWxpZ3RoaW5nIGFyb3VuZCBjZXJ0YWluIGNoYXJhdGFjdGVyc1xyXG4gIGhpZ2xpZ2h0VGV4dChxdWFkcywgcGFnZU51bWJlcikge1xyXG4gICAgY29uc3QgaGlnaGxpZ2h0aW5nQW5ub3QgPSBuZXcgdGhpcy53ZWJWaWV3ZXJJbnN0YW5jZS5Bbm5vdGF0aW9ucy5UZXh0SGlnaGxpZ2h0QW5ub3RhdGlvbigpO1xyXG4gICAgaGlnaGxpZ2h0aW5nQW5ub3QuU3Ryb2tlQ29sb3IgPSBuZXcgdGhpcy53ZWJWaWV3ZXJJbnN0YW5jZS5Bbm5vdGF0aW9ucy5Db2xvcigyNTAsMjA2LDAsMC41MDE5Nik7XHJcbiAgICBoaWdobGlnaHRpbmdBbm5vdC5RdWFkcyA9IHF1YWRzO1xyXG4gICAgaGlnaGxpZ2h0aW5nQW5ub3QuUGFnZU51bWJlciA9IHBhZ2VOdW1iZXI7XHJcbiAgICBoaWdobGlnaHRpbmdBbm5vdC5BdXRob3IgPSB0aGlzLndlYlZpZXdlckluc3RhbmNlLmFubm90TWFuYWdlci5nZXRDdXJyZW50VXNlcigpO1xyXG4gICAgdGhpcy5zYXZlZEFub3RhdGlvbnMucHVzaChoaWdobGlnaHRpbmdBbm5vdCk7XHJcbiAgICB0aGlzLndlYlZpZXdlckluc3RhbmNlLmFubm90TWFuYWdlci5hZGRBbm5vdGF0aW9uKGhpZ2hsaWdodGluZ0Fubm90KTtcclxuXHJcbiAgICAvLyBuZWVkIHRvIGRyYXcgdGhlIGFubm90YXRpb24gb3RoZXJ3aXNlIGl0IHdvbid0IHNob3cgdXAgdW50aWwgdGhlIHBhZ2UgaXMgcmVmcmVzaGVkXHJcbiAgICB0aGlzLndlYlZpZXdlckluc3RhbmNlLmFubm90TWFuYWdlci5yZWRyYXdBbm5vdGF0aW9uKGhpZ2hsaWdodGluZ0Fubm90KTtcclxuICB9XHJcblxyXG4gIHNlYXJjaEZuID0gKHNlYXJjaFZhbHVlLCBvcHRpb25zKSA9PiB7XHJcbiAgICB0aGlzLm15U2VhcmNoU3RyaW5nUmVzdWx0cyA9IFtdO1xyXG4gICBpZih0aGlzLnNhdmVkQW5vdGF0aW9ucy5sZW5ndGggPiAwKXtcclxuICAgICB0aGlzLnNhdmVkQW5vdGF0aW9ucy5tYXAoYW5ub3RhdGlvbiA9PiB7XHJcbiAgICAgICBhbm5vdGF0aW9uLkhpZGRlbiA9IHRydWU7XHJcbiAgICAgLy8gQWx3YXlzIHJlZHJhdyBhbm5vdGF0aW9uIGlmIHJlbmRlcmluZyB3YXMgdXBkYXRlZFxyXG4gICAgIHRoaXMud2ViVmlld2VySW5zdGFuY2UuYW5ub3RNYW5hZ2VyLnJlZHJhd0Fubm90YXRpb24oYW5ub3RhdGlvbik7XHJcbiAgIH0pO1xyXG4gICB9XHJcbiAgIC8vIGRvbid0IGRvIGFueSBzZWFyY2ggdW50aWwgdGhlcmUgaXMgYSBzZWFyY2ggcGF0dGVyblxyXG4gICBpZihzZWFyY2hWYWx1ZS50cmltKCkubGVuZ3RoID4gMCl7XHJcbiAgICAgICBpZiAodGhpcy5maWxlV2l0aE9jcikge1xyXG4gICAgICAgICAvLyBhZGQgcmVkYWN0aW9uIGFubm90YXRpb24gZm9yIGVhY2ggc2VhcmNoIHJlc3VsdFxyXG4gICAgICAgICAgIC8vIGNvbnN0IGFubm90YXRpb24gPSBuZXcgQW5ub3RhdGlvbnMuVGV4dEhpZ2hsaWdodEFubm90YXRpb24oKTtcclxuICAgICAgICAgICBsZXQgbXlTZWFyY2ggPSBzZWFyY2hWYWx1ZS5zcGxpdCgnICcpO1xyXG4gICAgICAgICAgIGlmKG15U2VhcmNoLmxlbmd0aCA+IDEpe1xyXG4gICAgICAgICAgICAgLy8gdGhlbiBpIGFtIHNlYXJjaGluZyB3aXRoIG1vcmUgdGhhbiBvbmUgd29yZFxyXG4gICAgICAgICAgICAgdGhpcy5wYWdlcy5wYWdlcy5mb3JFYWNoKChwYWdlICwgaW5kZXgpID0+IHtcclxuICAgICAgICAgICAgICAgdGhpcy5wYWdlSGVpZ2h0ID0gcGFnZS5wYWdlX2hlaWdodDtcclxuICAgICAgICAgICAgICAgdGhpcy5wYWdlV2lkdGggPSBwYWdlLnBhZ2Vfd2lkdGg7XHJcbiAgICAgICAgICAgICAgIHRoaXMuc3RhbmRhcmRIZWlnaHQgPSB0aGlzLndlYlZpZXdlckluc3RhbmNlLmRvY1ZpZXdlci5nZXRQYWdlSGVpZ2h0KChpbmRleCsxKSk7XHJcbiAgICAgICAgICAgICAgIHRoaXMuc3RhbmRhcmRXaWR0aCA9IHRoaXMud2ViVmlld2VySW5zdGFuY2UuZG9jVmlld2VyLmdldFBhZ2VXaWR0aCgoaW5kZXgrMSkpO1xyXG4gICAgICAgICAgICAgICBwYWdlLnpvbmVzLmZvckVhY2goem9uZSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgem9uZS5wYXJhZ3JhcGhzLmZvckVhY2gocGFyYWdyYXBoID0+IHtcclxuICAgICAgICAgICAgICAgICAgIHBhcmFncmFwaC5saW5lcy5mb3JFYWNoKGxpbmUgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICBpZihsaW5lLnRleHQuaW5jbHVkZXMoc2VhcmNoVmFsdWUpKXtcclxuICAgICAgICAgICAgICAgICAgICAgICB0aGlzLlNlYXJjaEZvcldvcmRJbkxpbmUobXlTZWFyY2gsbGluZSwoaW5kZXgrMSkgLCBwYWdlKVxyXG4gICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAvLyB0aGVuIGkgYW0gc2VhcmNoaW5nIHdpdGggb25seSBvbmUgd29yZCBcclxuICAgICAgICAgICAgIHRoaXMuc2VhcmNoRm9yV29yZEluQWxsUGFnZXMoc2VhcmNoVmFsdWUpXHJcbiAgICAgICAgICAgfVxyXG4gICAgICAgICAgIHRoaXMud2ViVmlld2VySW5zdGFuY2UuZG9jVmlld2VyLmNsZWFyU2VhcmNoUmVzdWx0cygpO1xyXG4gICAgICAgICAgICAgdGhpcy5kaXNwYWxheVNlYXJjaFJlc3VsdHModGhpcy53ZWJWaWV3ZXJJbnN0YW5jZS5kb2NWaWV3ZXIpO1xyXG4gICAgICAgfVxyXG4gfWVsc2V7XHJcbiAgIHRoaXMud2ViVmlld2VySW5zdGFuY2UuZG9jVmlld2VyLmNsZWFyU2VhcmNoUmVzdWx0cygpO1xyXG4gfVxyXG59XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy53ZWJWaWV3ZXJJbnN0YW5jZSkge1xyXG4gICAgICB0aGlzLndlYlZpZXdlckluc3RhbmNlLmNsb3NlRG9jdW1lbnQoKS50aGVuKCgpID0+IHtcclxuICAgICAgICBjb25zb2xlLmxvZygnZG9jdW1lbnQgY2xvc2VkIScpO1xyXG4gICAgICB9KTtcclxuICAgICAgdGhpcy5wZGZ0cm9uU2VydmljZS5pbnN0YW5jZSA9IHRoaXMud2ViVmlld2VySW5zdGFuY2UgPSBudWxsO1xyXG4gICAgfVxyXG4gICAgdGhpcy50cmFuc2VsYXRpb25TdWJzY3JpdGlvbiA/IHRoaXMudHJhbnNlbGF0aW9uU3Vic2NyaXRpb24udW5zdWJzY3JpYmUoKSA6IG51bGw7XHJcbiAgfVxyXG59XHJcbiIsIjxkaXYgI2ZpbGVWaWV3ZXIgc3R5bGU9XCJ3aWR0aDogMTAwJTsgaGVpZ2h0OiAxMDAlO1wiPjwvZGl2PlxyXG4iXX0=
@@ -7,6 +7,7 @@ export class PdftronService {
7
7
  this.stampAnnots = [];
8
8
  this.signatureAnnotations = [];
9
9
  this.pdfTronStream = new EventEmitter();
10
+ this.onImageExtraction = new EventEmitter();
10
11
  }
11
12
  disableQrCodeModifybeforesave() {
12
13
  return __awaiter(this, void 0, void 0, function* () {
@@ -175,6 +176,57 @@ export class PdftronService {
175
176
  this.instance.docViewer.refreshAll();
176
177
  this.instance.docViewer.updateView();
177
178
  }
179
+ extractAnotation(annotation) {
180
+ if (annotation['image']) {
181
+ // convert base64 signature into file and emit it to out side
182
+ let base64Img = annotation['image']['currentSrc'];
183
+ // var arr = base64Img.split(','),
184
+ // mime = arr[0].match(/:(.*?);/)[1],
185
+ // bstr = atob(arr[1]),
186
+ // n = bstr.length,
187
+ // u8arr = new Uint8Array(n);
188
+ // while(n--){
189
+ // u8arr[n] = bstr.charCodeAt(n);
190
+ // }
191
+ // let name = mime.replace('/' , '.')
192
+ // let myFile = new File([u8arr], 'mySignature.png', {type:mime});
193
+ this.onImageExtraction.emit(base64Img);
194
+ // return {type:'base64' , file : base64Img}
195
+ }
196
+ else {
197
+ this.extractAnnotationSignature(annotation, this.instance.docViewer);
198
+ }
199
+ }
200
+ extractAnnotationSignature(annotation, docViewer) {
201
+ return __awaiter(this, void 0, void 0, function* () {
202
+ // Create a new Canvas to draw the Annotation on
203
+ const canvas = document.createElement('canvas');
204
+ // Reference the annotation from the Document
205
+ const pageMatrix = docViewer.getDocument().getPageMatrix(annotation.PageNumber);
206
+ // Set the height & width of the canvas to match the annotation
207
+ canvas.height = annotation.Height;
208
+ canvas.width = annotation.Width;
209
+ const ctx = canvas.getContext('2d');
210
+ // Translate the Annotation to the top Top Left Corner of the Canvas ie (0, 0)
211
+ ctx.translate(-annotation.X, -annotation.Y);
212
+ // Draw the Annotation onto the Canvas
213
+ annotation.draw(ctx, pageMatrix);
214
+ // Convert the Canvas to a Blob Object for Upload
215
+ canvas.toBlob((blob) => {
216
+ // Call your Blob Storage Upload Function
217
+ // let name = blob.type.replace('/' , '.')
218
+ // let myFile = new File([blob], name);
219
+ var reader = new FileReader();
220
+ reader.readAsDataURL(blob);
221
+ reader.onloadend = () => {
222
+ var base64data = reader.result;
223
+ console.log(base64data);
224
+ this.onImageExtraction.emit(base64data);
225
+ };
226
+ // return {type: 'blob' , file : blob}
227
+ });
228
+ });
229
+ }
178
230
  }
179
231
  PdftronService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.4", ngImport: i0, type: PdftronService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
180
232
  PdftronService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.4", ngImport: i0, type: PdftronService, providedIn: "root" });
@@ -184,4 +236,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.4", ngImpor
184
236
  providedIn: "root",
185
237
  }]
186
238
  }], ctorParameters: function () { return []; } });
187
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGRmdHJvbi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbnV4ZW8tZGV2ZWxvcG1lbnQtZnJhbWV3b3JrL3NyYy9saWIvY29tcG9uZW50cy9wZGYtdHJvbi9wZGZ0cm9uL3BkZnRyb24uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBTXpELE1BQU0sT0FBTyxjQUFjO0lBTXpCO1FBTEEsU0FBSSxHQUFXLEVBQUUsQ0FBQztRQUVsQixnQkFBVyxHQUFVLEVBQUUsQ0FBQztRQUN4Qix5QkFBb0IsR0FBVSxFQUFFLENBQUM7UUFDakMsa0JBQWEsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO0lBQ3BCLENBQUM7SUFDViw2QkFBNkI7O1lBQ2pDLEtBQUssSUFBSSxVQUFVLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRTtnQkFDdkMsVUFBVSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7YUFDNUI7UUFDSCxDQUFDO0tBQUE7SUFFRCx5QkFBeUI7UUFDdkIsSUFBSSxDQUFDLG9CQUFvQixHQUFHLEVBQUUsQ0FBQztJQUNqQyxDQUFDO0lBQ0ssbUNBQW1DOztZQUN2QyxJQUFJLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsbUJBQW1CLENBQUMsQ0FBQztZQUNwRCxJQUFJLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsQ0FBQztRQUN6RSxDQUFDO0tBQUE7SUFFRCwwQkFBMEI7UUFDeEIsSUFBSSxhQUFhLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO1lBQ3pELElBQUksVUFBVSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLGFBQWEs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VUFBVSxHQUFHLFNBQVMsR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDO29CQUNuRSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLFVBQVUsR0FBRyxHQUFHLENBQUMsR0FBRyxTQUFTLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTt3QkFDbEUsR0FBRyxDQUFDLElBQUksRUFBRSxDQUFDO3dCQUNYLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQzt3QkFDaEIsR0FBRyxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxTQUFTLENBQUMsQ0FBQzt3QkFDckMsR0FBRyxDQUFDLE9BQU8sRUFBRSxDQUFDO3FCQUNmO2dCQUNILENBQUM7YUFDRixDQUFDLENBQUM7U0FDSjthQUFNO1lBQ0wsT0FBTyxDQUFDLEtBQUssQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO1NBQ3RDO0lBQ0gsQ0FBQztJQUVELGVBQWU7UUFDYixJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDekMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDckMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsVUFBVSxFQUFFLENBQUM7SUFDdkMsQ0FBQzs7MkdBakxVLGNBQWM7K0dBQWQsY0FBYyxjQUZiLE1BQU07MkZBRVAsY0FBYztrQkFIMUIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFdmVudEVtaXR0ZXIsIEluamVjdGFibGUgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQgeyBvYnNlcnZhYmxlLCBPYnNlcnZhYmxlIH0gZnJvbSBcInJ4anNcIjtcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiBcInJvb3RcIixcclxufSlcclxuZXhwb3J0IGNsYXNzIFBkZnRyb25TZXJ2aWNlIHtcclxuICBtb2RlOiBTdHJpbmcgPSBcIlwiO1xyXG4gIGluc3RhbmNlO1xyXG4gIHN0YW1wQW5ub3RzOiBhbnlbXSA9IFtdO1xyXG4gIHNpZ25hdHVyZUFubm90YXRpb25zOiBhbnlbXSA9IFtdO1xyXG4gIHBkZlRyb25TdHJlYW0gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgY29uc3RydWN0b3IoKSB7fVxyXG4gIGFzeW5jIGRpc2FibGVRckNvZGVNb2RpZnliZWZvcmVzYXZlKCkge1xyXG4gICAgZm9yIChsZXQgc3RhbXBBbm5vdCBvZiB0aGlzLnN0YW1wQW5ub3RzKSB7XHJcbiAgICAgIHN0YW1wQW5ub3QuUmVhZE9ubHkgPSB0cnVlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY2xlYXJTaWduYXR1cmVBbm5vdGF0aW9ucygpIHtcclxuICAgIHRoaXMuc2lnbmF0dXJlQW5ub3RhdGlvbnMgPSBbXTtcclxuICB9XHJcbiAgYXN5bmMgcmVtb3ZlU2lnbmF0dXJlQW5ub3RhaW9uc2JlZm9yZXNhdmUoKSB7XHJcbiAgICB0aGlzLmluc3RhbmNlLmFubm90TWFuYWdlci5vZmYoXCJhbm5vdGF0aW9uQ2hhbmdlZFwiKTtcclxuICAgIHRoaXMuaW5zdGFuY2UuYW5ub3RNYW5hZ2VyLmRlbGV0ZUFubm90YXRpb24odGhpcy5zaWduYXR1cmVBbm5vdGF0aW9ucyk7XHJcbiAgfVxyXG5cclxuICBnZXRTaWduYXR1cmVBbm5vdGFpb25zSW5mbygpIHtcclxuICAgIGxldCBzaWduYXR1cmVJbmZvID0gdGhpcy5zaWduYXR1cmVBbm5vdGF0aW9ucy5tYXAoKGl0ZW0pID0+IHtcclxuICAgICAgbGV0IFBhZ2VIZWlnaHQgPSB0aGlzLmluc3RhbmNlLmRvY1ZpZXdlci5nZXRQYWdlSGVpZ2h0KGl0ZW0uUGFnZU51bWJlcik7XHJcbiAgICAgIGxldCBQYWdlV2lkdGggPSB0aGlzLmluc3RhbmNlLmRvY1ZpZXdlci5nZXRQYWdlV2lkdGgoaXRlbS5QYWdlTnVtYmVyKTtcclxuICAgICAgbGV0IHlDb25zdCA9IHRoaXMubW9kaWZ5U2lnbmF0dXJlQW5ub3RhaW9uSGVpZ2h0QW5kV2lkdGgoXHJcbiAgICAgICAgUGFnZUhlaWdodCxcclxuICAgICAgICBQYWdlV2lkdGhcclxuICAgICAgKS55O1xyXG4gICAgICAvLyBsZXQgeENvbnN0ID0gdGhpcy5tb2RpZnlTaWduYXR1cmVBbm5vdGFpb25IZWlnaHRBbmRXaWR0aChcclxuICAgICAgLy8gICBQYWdlSGVpZ2h0LFxyXG4gICAgICAvLyAgIFBhZ2VXaWR0aFxyXG4gICAgICAvLyApLng7XHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgcGFnZW5vOiBpdGVtLlBhZ2VOdW1iZXIsXHJcbiAgICAgICAgLy94OiBpdGVtLlggKyB4Q29uc3QsXHJcbiAgICAgICAgeDogaXRlbS5YLFxyXG4gICAgICAgIHk6IGl0ZW0uWSArIHlDb25zdCxcclxuICAgICAgICBoZWlnaHQ6IGl0ZW0uZ2V0SGVpZ2h0KCksXHJcbiAgICAgICAgd2lkdGg6IGl0ZW0uZ2V0V2lkdGgoKSxcclxuICAgICAgfTtcclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIHNpZ25hdHVyZUluZm87XHJcbiAgfVxyXG4gIG1vZGlmeVNpZ25hdHVyZUFubm90YWlvbkhlaWdodEFuZFdpZHRoKFBhZ2VIZWlnaHQsIFBhZ2VXaWR0aCkge1xyXG4gICAgY29uc3Qgc3RhbmRhcmRIZWlnaHQgPSA4NDI7XHJcbiAgICBjb25zdCBzdGFuZGFyZFdpZHRoID0gNTk1O1xyXG4gICAgbGV0IHk6IG51bWJlciA9IDA7XHJcbiAgICBsZXQgeDogbnVtYmVyID0gMDtcclxuICAgIC8vaGVpZ2h0XHJcbiAgICBpZiAoc3RhbmRhcmRIZWlnaHQgPiBQYWdlSGVpZ2h0IHx8IHN0YW5kYXJkSGVpZ2h0IDwgUGFnZUhlaWdodCkge1xyXG4gICAgICB5ID0gc3RhbmRhcmRIZWlnaHQgLSBQYWdlSGVpZ2h0O1xyXG4gICAgfVxyXG4gICAgLy8gd2lkaHRcclxuICAgIGlmIChzdGFuZGFyZFdpZHRoID4gUGFnZVdpZHRoIHx8IHN0YW5kYXJkV2lkdGggPCBQYWdlV2lkdGgpIHtcclxuICAgICAgeCA9IHN0YW5kYXJkV2lkdGggLSBQYWdlV2lkdGg7XHJcbiAgICB9XHJcbiAgICByZXR1cm4geyB5LCB4IH07XHJcbiAgfVxyXG4gIGFkZFNpZ25hdHVyZShiYXNlNjQpIHtcclxuICAgIGlmICh0aGlzLmluc3RhbmNlKSB7XHJcbiAgICAgIGxldCBjdXJyZW50UGFnZSA9IHRoaXMuaW5zdGFuY2UuZG9jVmlld2VyLmdldEN1cnJlbnRQYWdlKCk7XHJcblxyXG4gICAgICB0aGlzLmluc3RhbmNlLmFubm90TWFuYWdlci5zZXRSZWFkT25seShmYWxzZSk7XHJcbiAgICAgIHRoaXMuaW5zdGFuY2UuZGlzYWJsZUVsZW1lbnRzKFtcclxuICAgICAgICBcInRvb2xiYXJHcm91cC1TaGFwZXNcIixcclxuICAgICAgICBcInRvb2xiYXJHcm91cC1FZGl0XCIsXHJcbiAgICAgICAgXCJ0b29sYmFyR3JvdXAtSW5zZXJ0XCIsXHJcbiAgICAgICAgXCJ0b29sYmFyR3JvdXAtQW5ub3RhdGVcIixcclxuICAgICAgXSk7XHJcbiAgICAgIGNvbnN0IHNpZ25hdHVyZUFubm90ID0gbmV3IHRoaXMuaW5zdGFuY2UuQW5ub3RhdGlvbnMuU3RhbXBBbm5vdGF0aW9uKCk7XHJcbiAgICAgIHNpZ25hdHVyZUFubm90LlBhZ2VOdW1iZXIgPSBjdXJyZW50UGFnZTtcclxuICAgICAgc2lnbmF0dXJlQW5ub3QuWCA9IDEwMDtcclxuICAgICAgc2lnbmF0dXJlQW5ub3QuWSA9IDI1MDtcclxuICAgICAgc2lnbmF0dXJlQW5ub3QuV2lkdGggPSAxNDA7XHJcbiAgICAgIHNpZ25hdHVyZUFubm90LkhlaWdodCA9IDYwO1xyXG4gICAgICBjb25zdCBrZWVwQXNTVkcgPSBmYWxzZTtcclxuICAgICAgc2lnbmF0dXJlQW5ub3Quc2V0SW1hZ2VEYXRhKGJhc2U2NCwga2VlcEFzU1ZHKTtcclxuICAgICAgc2lnbmF0dXJlQW5ub3QuQXV0aG9yID0gdGhpcy5pbnN0YW5jZS5hbm5vdE1hbmFnZXIuZ2V0Q3VycmVudFVzZXIoKTtcclxuXHJcbiAgICAgIHRoaXMuaW5zdGFuY2UuYW5ub3RNYW5hZ2VyLmFkZEFubm90YXRpb24oc2lnbmF0dXJlQW5ub3QpO1xyXG4gICAgICB0aGlzLmluc3RhbmNlLmFubm90TWFuYWdlci5yZWRyYXdBbm5vdGF0aW9uKHNpZ25hdHVyZUFubm90KTtcclxuICAgICAgdGhpcy5wZGZUcm9uU3RyZWFtLm5leHQoeyBhY3Rpb246IFwiYWRkU3RhbXBcIiwgcGFyYW1zOiB7IGJhc2U2NCB9IH0pO1xyXG5cclxuICAgICAgdGhpcy5zaWduYXR1cmVBbm5vdGF0aW9ucy5wdXNoKHNpZ25hdHVyZUFubm90KTtcclxuICAgICAgdGhpcy5pbnN0YW5jZS5hbm5vdE1hbmFnZXIub24oXHJcbiAgICAgICAgXCJhbm5vdGF0aW9uQ2hhbmdlZFwiLFxyXG4gICAgICAgIChhbm5vdGF0aW9ucywgYWN0aW9uKSA9PiB7XHJcbiAgICAgICAgICBpZiAoYWN0aW9uID09PSBcIm1vZGlmeVwiKSB7XHJcbiAgICAgICAgICAgIGFubm90YXRpb25zLmZvckVhY2goKGNoYW5nZWRhbm5vdCkgPT4ge1xyXG4gICAgICAgICAgICAgIC8vIHRoaXMuc2lnbmF0dXJlQW5ub3RhdGlvbnMuZm9yRWFjaChmdW5jdGlvbihpdGVtLGkpIHtcclxuICAgICAgICAgICAgICAvLyAgIGlmIChpdGVtLklkID09IGNoYW5nZWRhbm5vdC5JZCkgaXRlbSA9IGNoYW5nZWRhbm5vdDtcclxuICAgICAgICAgICAgICAvLyB9KTtcclxuICAgICAgICAgICAgICBsZXQgaW5kZXggPSB0aGlzLnNpZ25hdHVyZUFubm90YXRpb25zXHJcbiAgICAgICAgICAgICAgICAubWFwKChpdGVtKSA9PiBpdGVtLklkKVxyXG4gICAgICAgICAgICAgICAgLmluZGV4T2YoY2hhbmdlZGFubm90LklkKTtcclxuICAgICAgICAgICAgICBpZiAoaW5kZXggPiAtMSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zaWduYXR1cmVBbm5vdGF0aW9uc1tpbmRleF0gPSBjaGFuZ2VkYW5ub3Q7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH0gZWxzZSBpZiAoYWN0aW9uID09PSBcImRlbGV0ZVwiKSB7XHJcbiAgICAgICAgICAgIGFubm90YXRpb25zLmZvckVhY2goKGNoYW5nZWRhbm5vdCkgPT4ge1xyXG4gICAgICAgICAgICAgIGxldCBpbmRleCA9IHRoaXMuc2lnbmF0dXJlQW5ub3RhdGlvbnNcclxuICAgICAgICAgICAgICAgIC5tYXAoKGl0ZW0pID0+IGl0ZW0uSWQpXHJcbiAgICAgICAgICAgICAgICAuaW5kZXhPZihjaGFuZ2VkYW5ub3QuSWQpO1xyXG4gICAgICAgICAgICAgIGlmIChpbmRleCA+IC0xKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNpZ25hdHVyZUFubm90YXRpb25zLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zb2xlLmVycm9yKFwiTm8gcGRmVHJvbiBpbnN0YW5jZVwiKTtcclxuICAgIH1cclxuICB9XHJcbiAgYWRkU3RhbXAodXJsKSB7XHJcbiAgICBpZiAodGhpcy5pbnN0YW5jZSkge1xyXG4gICAgICB0aGlzLmluc3RhbmNlLmFubm90TWFuYWdlci5zZXRSZWFkT25seShmYWxzZSk7XHJcbiAgICAgIHRoaXMuaW5zdGFuY2UuZGlzYWJsZUVsZW1lbnRzKFtcclxuICAgICAgICBcInRvb2xiYXJHcm91cC1TaGFwZXNcIixcclxuICAgICAgICBcInRvb2xiYXJHcm91cC1FZGl0XCIsXHJcbiAgICAgICAgXCJ0b29sYmFyR3JvdXAtSW5zZXJ0XCIsXHJcbiAgICAgICAgXCJ0b29sYmFyR3JvdXAtQW5ub3RhdGVcIixcclxuICAgICAgXSk7XHJcbiAgICAgIHRoaXMucGRmVHJvblN0cmVhbS5uZXh0KHsgYWN0aW9uOiBcImFkZFN0YW1wXCIsIHBhcmFtczogeyB1cmwgfSB9KTtcclxuICAgICAgbGV0IHN0YW1wQW5ub3QgPSBuZXcgdGhpcy5pbnN0YW5jZS5Bbm5vdGF0aW9ucy5TdGFtcEFubm90YXRpb24oKTtcclxuICAgICAgbGV0IHJvdGF0aW9uID0gdGhpcy5pbnN0YW5jZS5kb2NWaWV3ZXIuZ2V0Q29tcGxldGVSb3RhdGlvbih0aGlzLmluc3RhbmNlLmRvY1ZpZXdlci5nZXRDdXJyZW50UGFnZSgpKTtcclxuICAgICAgc3RhbXBBbm5vdC5QYWdlTnVtYmVyID0gMTtcclxuICAgICAgc3RhbXBBbm5vdC5YID0gMDtcclxuICAgICAgc3RhbXBBbm5vdC5ZID0gMDtcclxuICAgICAgc3RhbXBBbm5vdC5XaWR0aCA9IDE1MDtcclxuICAgICAgc3RhbXBBbm5vdC5IZWlnaHQgPSA3ODtcclxuICAgICAgY29uc3Qga2VlcEFzU1ZHID0gZmFsc2U7XHJcbiAgICAgIGlmIChyb3RhdGlvbiA9PSAxKSB7XHJcbiAgICAgICAgc3RhbXBBbm5vdC5Sb3RhdGlvbiA9IDkwO1xyXG4gICAgICAgIHN0YW1wQW5ub3QuV2lkdGggPSA3ODtcclxuICAgICAgICBzdGFtcEFubm90LkhlaWdodCA9IDE1MDtcclxuICAgICAgfVxyXG4gICAgICBzdGFtcEFubm90LlJlYWRPbmx5ID0gZmFsc2U7XHJcbiAgICAgIHN0YW1wQW5ub3Quc2V0SW1hZ2VEYXRhKHVybCwga2VlcEFzU1ZHKTtcclxuICAgICAgc3RhbXBBbm5vdC5BdXRob3IgPSB0aGlzLmluc3RhbmNlLmFubm90TWFuYWdlci5nZXRDdXJyZW50VXNlcigpO1xyXG4gICAgICB0aGlzLmluc3RhbmNlLmFubm90TWFuYWdlci5hZGRBbm5vdGF0aW9uKHN0YW1wQW5ub3QpO1xyXG4gICAgICB0aGlzLmluc3RhbmNlLmFubm90TWFuYWdlci5yZWRyYXdBbm5vdGF0aW9uKHN0YW1wQW5ub3QpO1xyXG4gICAgICB0aGlzLnN0YW1wQW5ub3RzLnB1c2goc3RhbXBBbm5vdCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zb2xlLmVycm9yKFwiTm8gcGRmVHJvbiBpbnN0YW5jZVwiKTtcclxuICAgIH1cclxuICB9XHJcbiAgYWRkV2F0ZXJtYXJrKHRleHQpIHtcclxuICAgIHRleHQgPSBuZXcgQXJyYXkoMTAwICogMikuam9pbih0ZXh0ICsgXCIgXCIpOyAvLyBudW1iZXIgb2YgbGluZXNcclxuICAgIGlmICh0aGlzLmluc3RhbmNlKSB7XHJcbiAgICAgIHRoaXMuaW5zdGFuY2UuZG9jVmlld2VyLnNldFdhdGVybWFyayh7XHJcbiAgICAgICAgY3VzdG9tOiAoY3R4LCBwYWdlTnVtYmVyLCBwYWdlV2lkdGgsIHBhZ2VIZWlnaHQpID0+IHtcclxuICAgICAgICAgIC8vIGN0eCBpcyBhbiBpbnN0YW5jZSBvZiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRcclxuICAgICAgICAgIGN0eC5maWxsU3R5bGUgPSBcIiNkOWRjZTJcIjtcclxuICAgICAgICAgIGN0eC5mb250ID0gXCIxNnB0IEFyaWFsXCI7XHJcbiAgICAgICAgICBjdHguZ2xvYmFsQWxwaGEgPSAwLjM7XHJcbiAgICAgICAgICBsZXQgdHh0SGVpZ2h0ID0gNTA7XHJcbiAgICAgICAgICBjb25zdCBsaW5lTnVtYmVyID0gcGFnZVdpZHRoID4gcGFnZUhlaWdodCA/IHBhZ2VXaWR0aCA6IHBhZ2VIZWlnaHQ7XHJcbiAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IE1hdGguY2VpbCgobGluZU51bWJlciAqIDEuNSkgLyB0eHRIZWlnaHQpOyBpKyspIHtcclxuICAgICAgICAgICAgY3R4LnNhdmUoKTtcclxuICAgICAgICAgICAgY3R4LnJvdGF0ZSgtNDUpO1xyXG4gICAgICAgICAgICBjdHguZmlsbFRleHQodGV4dCwgMCwgaSAqIHR4dEhlaWdodCk7XHJcbiAgICAgICAgICAgIGN0eC5yZXN0b3JlKCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zb2xlLmVycm9yKFwiTm8gcGRmVHJvbiBpbnN0YW5jZVwiKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHJlbW92ZVdhdGVybWFyaygpIHtcclxuICAgIHRoaXMuaW5zdGFuY2UuZG9jVmlld2VyLnNldFdhdGVybWFyayh7fSk7XHJcbiAgICB0aGlzLmluc3RhbmNlLmRvY1ZpZXdlci5yZWZyZXNoQWxsKCk7XHJcbiAgICB0aGlzLmluc3RhbmNlLmRvY1ZpZXdlci51cGRhdGVWaWV3KCk7XHJcbiAgfVxyXG59XHJcbiJdfQ==
239
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGRmdHJvbi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbnV4ZW8tZGV2ZWxvcG1lbnQtZnJhbWV3b3JrL3NyYy9saWIvY29tcG9uZW50cy9wZGYtdHJvbi9wZGZ0cm9uL3BkZnRyb24uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBTXpELE1BQU0sT0FBTyxjQUFjO0lBT3pCO1FBTkEsU0FBSSxHQUFXLEVBQUUsQ0FBQztRQUVsQixnQkFBVyxHQUFVLEVBQUUsQ0FBQztRQUN4Qix5QkFBb0IsR0FBVSxFQUFFLENBQUM7UUFDakMsa0JBQWEsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBQ25DLHNCQUFpQixHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7SUFDeEIsQ0FBQztJQUNWLDZCQUE2Qjs7WUFDakMsS0FBSyxJQUFJLFVBQVUsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFO2dCQUN2QyxVQUFVLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQzthQUM1QjtRQUNILENBQUM7S0FBQTtJQUVELHlCQUF5QjtRQUN2QixJQUFJLENBQUMsb0JBQW9CLEdBQUcsRUFBRSxDQUFDO0lBQ2pDLENBQUM7SUFDSyxtQ0FBbUM7O1lBQ3ZDLElBQUksQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1lBQ3BELElBQUksQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1FBQ3pFLENBQUM7S0FBQTtJQUVELDBCQUEwQjtRQUN4QixJQUFJLGFBQWEsR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7WUFDekQsSUFBSSxVQUFVLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUN4RSxJQUFJLFNBQVMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQ3RFLElBQUksTUFBTSxHQUFHLElBQUksQ0FBQyxzQ0FBc0MsQ0FDdEQsVUFBVSxFQUNWLFNBQVMsQ0FDVixDQUFDLENBQUMsQ0FBQztZQUNKLDREQUE0RDtZQUM1RCxnQkFBZ0I7WUFDaEIsY0FBYztZQUNkLE9BQU87WUFDUCxPQUFPO2dCQUNMLE1BQU0sRUFBRSxJQUFJLENBQUMsVUFBVTtnQkFDdkIscUJBQXFCO2dCQUNyQixDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7Z0JBQ1QsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLEdBQUcsTUFBTTtnQkFDbEIsTUFBTSxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUU7Z0JBQ3hCLEtBQUssRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFO2FBQ3ZCLENBQUM7UUFDSixDQUFDLENBQUMsQ0FBQztRQUNILE9BQU8sYUFBYSxDQUFDO0lBQ3ZCLENBQUM7SUFDRCxzQ0FBc0MsQ0FBQyxVQUFVLEVBQUUsU0FBUztRQUMxRCxNQUFNLGNBQWMsR0FBRyxHQUFHLENBQUM7UUFDM0IsTUFBTSxhQUFhLEdBQUcsR0FBRyxDQUFDO1FBQzFCLElBQUksQ0FBQyxHQUFXLENBQUMsQ0FBQztRQUNsQixJQUFJLENBQUMsR0FBVyxDQUFDLENBQUM7UUFDbEIsUUFBUTtRQUNSLElBQUksY0FBYyxHQUFHLFVBQVUsSUFBSSxjQUFjLEdBQUcsVUFBVSxFQUFFO1lBQzlELENBQUMsR0FBRyxjQUFjLEdBQUcsVUFBVSxDQUFDO1NBQ2pDO1FBQ0QsUUFBUTtRQUNSLElBQUksYUFBYSxHQUFHLFNBQVMsSUFBSSxhQUFhLEdBQUcsU0FBUyxFQUFFO1lBQzFELENBQUMsR0FBRyxhQUFhLEdBQUcsU0FBUyxDQUFDO1NBQy9CO1FBQ0QsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztJQUNsQixDQUFDO0lBQ0QsWUFBWSxDQUFDLE1BQU07UUFDakIsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ2pCLElBQUksV0FBVyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBRTNELElBQUksQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUM5QyxJQUFJLENBQUMsUUFBUSxDQUFDLGVBQWUsQ0FBQztnQkFDNUIscUJBQXFCO2dCQUNyQixtQkFBbUI7Z0JBQ25CLHFCQUFxQjtnQkFDckIsdUJBQXVCO2FBQ3hCLENBQUMsQ0FBQztZQUNILE1BQU0sY0FBYyxHQUFHLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsZUFBZSxFQUFFLENBQUM7WUFDdkUsY0FBYyxDQUFDLFVBQVUsR0FBRyxXQUFXLENBQUM7WUFDeEMsY0FBYyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7WUFDdkIsY0FBYyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7WUFDdkIsY0FBYyxDQUFDLEtBQUssR0FBRyxHQUFHLENBQUM7WUFDM0IsY0FBYyxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUM7WUFDM0IsTUFBTSxTQUFTLEdBQUcsS0FBSyxDQUFDO1lBQ3hCLGNBQWMsQ0FBQyxZQUFZLENBQUMsTUFBTSxFQUFFLFNBQVMsQ0FBQyxDQUFDO1lBQy9DLGNBQWMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsY0FBYyxFQUFFLENBQUM7WUFFcEUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1lBQ3pELElBQUksQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLGdCQUFnQixDQUFDLGNBQWMsQ0FBQyxDQUFDO1lBQzVELElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsRUFBRSxNQUFNLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFFcEUsSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztZQUMvQyxJQUFJLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQzNCLG1CQUFtQixFQUNuQixDQUFDLFdBQVcsRUFBRSxNQUFNLEVBQUUsRUFBRTtnQkFDdEIsSUFBSSxNQUFNLEtBQUssUUFBUSxFQUFFO29CQUN2QixXQUFXLENBQUMsT0FBTyxDQUFDLENBQUMsWUFBWSxFQUFFLEVBQUU7d0JBQ25DLHVEQUF1RDt3QkFDdkQseURBQXlEO3dCQUN6RCxNQUFNO3dCQUNOLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxvQkFBb0I7NkJBQ2xDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQzs2QkFDdEIsT0FBTyxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUMsQ0FBQzt3QkFDNUIsSUFBSSxLQUFLLEdBQUcsQ0FBQyxDQUFDLEVBQUU7NEJBQ2QsSUFBSSxDQUFDLG9CQUFvQixDQUFDLEtBQUssQ0FBQyxHQUFHLFlBQVksQ0FBQzt5QkFDakQ7b0JBQ0gsQ0FBQyxDQUFDLENBQUM7aUJBQ0o7cUJBQU0sSUFBSSxNQUFNLEtBQUssUUFBUSxFQUFFO29CQUM5QixXQUFXLENBQUMsT0FBTyxDQUFDLENBQUMsWUFBWSxFQUFFLEVBQUU7d0JBQ25DLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxvQkFBb0I7NkJBQ2xDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQzs2QkFDdEIsT0FBTyxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUMsQ0FBQzt3QkFDNUIsSUFBSSxLQUFLLEdBQUcsQ0FBQyxDQUFDLEVBQUU7NEJBQ2QsSUFBSSxDQUFDLG9CQUFvQixDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7eUJBQzVDO29CQUNILENBQUMsQ0FBQyxDQUFDO2lCQUNKO1lBQ0gsQ0FBQyxDQUNGLENBQUM7U0FDSDthQUFNO1lBQ0wsT0FBTyxDQUFDLEtBQUssQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO1NBQ3RDO0lBQ0gsQ0FBQztJQUNELFFBQVEsQ0FBQyxHQUFHO1FBQ1YsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ2pCLElBQUksQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUM5QyxJQUFJLENBQUMsUUFBUSxDQUFDLGVBQWUsQ0FBQztnQkFDNUIscUJBQXFCO2dCQUNyQixtQkFBbUI7Z0JBQ25CLHFCQUFxQjtnQkFDckIsdUJBQXVCO2FBQ3hCLENBQUMsQ0FBQztZQUNILElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDakUsSUFBSSxVQUFVLEdBQUcsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxlQUFlLEVBQUUsQ0FBQztZQUNqRSxJQUFJLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxjQUFjLEVBQUUsQ0FBQyxDQUFDO1lBQ3JHLFVBQVUsQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDO1lBQzFCLFVBQVUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ2pCLFVBQVUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ2pCLFVBQVUsQ0FBQyxLQUFLLEdBQUcsR0FBRyxDQUFDO1lBQ3ZCLFVBQVUsQ0FBQyxNQUFNLEdBQUcsRUFBRSxDQUFDO1lBQ3ZCLE1BQU0sU0FBUyxHQUFHLEtBQUssQ0FBQztZQUN4QixJQUFJLFFBQVEsSUFBSSxDQUFDLEVBQUU7Z0JBQ2pCLFVBQVUsQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDO2dCQUN6QixVQUFVLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQztnQkFDdEIsVUFBVSxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUM7YUFDekI7WUFDRCxVQUFVLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztZQUM1QixVQUFVLENBQUMsWUFBWSxDQUFDLEdBQUcsRUFBRSxTQUFTLENBQUMsQ0FBQztZQUN4QyxVQUFVLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ2hFLElBQUksQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUNyRCxJQUFJLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxnQkFBZ0IsQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUN4RCxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztTQUNuQzthQUFNO1lBQ0wsT0FBTyxDQUFDLEtBQUssQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO1NBQ3RDO0lBQ0gsQ0FBQztJQUNELFlBQVksQ0FBQyxJQUFJO1FBQ2YsSUFBSSxHQUFHLElBQUksS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsa0JBQWtCO1FBQzlELElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUNqQixJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUM7Z0JBQ25DLE1BQU0sRUFBRSxDQUFDLEdBQUcsRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxFQUFFO29CQUNqRCxpREFBaUQ7b0JBQ2pELEdBQUcsQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDO29CQUMxQixHQUFHLENBQUMsSUFBSSxHQUFHLFlBQVksQ0FBQztvQkFDeEIsR0FBRyxDQUFDLFdBQVcsR0FBRyxHQUFHLENBQUM7b0JBQ3RCLElBQUksU0FBUyxHQUFHLEVBQUUsQ0FBQztvQkFDbkIsTUFBTSxVQUFVLEdBQUcsU0FBUyxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUM7b0JBQ25FLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsVUFBVSxHQUFHLEdBQUcsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO3dCQUNsRSxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUM7d0JBQ1gsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO3dCQUNoQixHQUFHLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxDQUFDO3dCQUNyQyxHQUFHLENBQUMsT0FBTyxFQUFFLENBQUM7cUJBQ2Y7Z0JBQ0gsQ0FBQzthQUNGLENBQUMsQ0FBQztTQUNKO2FBQU07WUFDTCxPQUFPLENBQUMsS0FBSyxDQUFDLHFCQUFxQixDQUFDLENBQUM7U0FDdEM7SUFDSCxDQUFDO0lBRUQsZUFBZTtRQUNiLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN6QyxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUNyQyxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxVQUFVLEVBQUUsQ0FBQztJQUN2QyxDQUFDO0lBRUQsZ0JBQWdCLENBQUMsVUFBVTtRQUN6QixJQUFHLFVBQVUsQ0FBQyxPQUFPLENBQUMsRUFBQztZQUNyQiw4REFBOEQ7WUFDOUQsSUFBSSxTQUFTLEdBQUcsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDO1lBQ2xELGtDQUFrQztZQUNsQyxxQ0FBcUM7WUFDckMsd0JBQXdCO1lBQ3hCLG9CQUFvQjtZQUNwQiw2QkFBNkI7WUFDN0IsY0FBYztZQUNkLHFDQUFxQztZQUNyQyxJQUFJO1lBQ0oscUNBQXFDO1lBQ3JDLGtFQUFrRTtZQUNsRSxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQ3ZDLDRDQUE0QztTQUM3QzthQUFJO1lBQ0gsSUFBSSxDQUFDLDBCQUEwQixDQUFDLFVBQVUsRUFBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFBO1NBQ3RFO0lBQ0gsQ0FBQztJQUVLLDBCQUEwQixDQUFDLFVBQVUsRUFBRSxTQUFTOztZQUNwRCxnREFBZ0Q7WUFDaEQsTUFBTSxNQUFNLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUNoRCw2Q0FBNkM7WUFDN0MsTUFBTSxVQUFVLEdBQUcsU0FBUyxDQUFDLFdBQVcsRUFBRSxDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDaEYsK0RBQStEO1lBQy9ELE1BQU0sQ0FBQyxNQUFNLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FBQztZQUNsQyxNQUFNLENBQUMsS0FBSyxHQUFHLFVBQVUsQ0FBQyxLQUFLLENBQUM7WUFDaEMsTUFBTSxHQUFHLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNwQyw4RUFBOEU7WUFDOUUsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDNUMsc0NBQXNDO1lBQ3RDLFVBQVUsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLFVBQVUsQ0FBQyxDQUFDO1lBQ2pDLGlEQUFpRDtZQUNqRCxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7Z0JBQ3JCLHlDQUF5QztnQkFDekMsMENBQTBDO2dCQUMxQyx1Q0FBdUM7Z0JBQ3ZDLElBQUksTUFBTSxHQUFHLElBQUksVUFBVSxFQUFFLENBQUM7Z0JBQzlCLE1BQU0sQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQzNCLE1BQU0sQ0FBQyxTQUFTLEdBQUcsR0FBRyxFQUFFO29CQUN0QixJQUFJLFVBQVUsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDO29CQUMvQixPQUFPLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDO29CQUN4QixJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO2dCQUMxQyxDQUFDLENBQUE7Z0JBQ0Qsc0NBQXNDO1lBQ3hDLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztLQUFBOzsyR0FwT1UsY0FBYzsrR0FBZCxjQUFjLGNBRmIsTUFBTTsyRkFFUCxjQUFjO2tCQUgxQixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEV2ZW50RW1pdHRlciwgSW5qZWN0YWJsZSB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7IG9ic2VydmFibGUsIE9ic2VydmFibGUgfSBmcm9tIFwicnhqc1wiO1xyXG5cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46IFwicm9vdFwiLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgUGRmdHJvblNlcnZpY2Uge1xyXG4gIG1vZGU6IFN0cmluZyA9IFwiXCI7XHJcbiAgaW5zdGFuY2U7XHJcbiAgc3RhbXBBbm5vdHM6IGFueVtdID0gW107XHJcbiAgc2lnbmF0dXJlQW5ub3RhdGlvbnM6IGFueVtdID0gW107XHJcbiAgcGRmVHJvblN0cmVhbSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBvbkltYWdlRXh0cmFjdGlvbiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBjb25zdHJ1Y3RvcigpIHt9XHJcbiAgYXN5bmMgZGlzYWJsZVFyQ29kZU1vZGlmeWJlZm9yZXNhdmUoKSB7XHJcbiAgICBmb3IgKGxldCBzdGFtcEFubm90IG9mIHRoaXMuc3RhbXBBbm5vdHMpIHtcclxuICAgICAgc3RhbXBBbm5vdC5SZWFkT25seSA9IHRydWU7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjbGVhclNpZ25hdHVyZUFubm90YXRpb25zKCkge1xyXG4gICAgdGhpcy5zaWduYXR1cmVBbm5vdGF0aW9ucyA9IFtdO1xyXG4gIH1cclxuICBhc3luYyByZW1vdmVTaWduYXR1cmVBbm5vdGFpb25zYmVmb3Jlc2F2ZSgpIHtcclxuICAgIHRoaXMuaW5zdGFuY2UuYW5ub3RNYW5hZ2VyLm9mZihcImFubm90YXRpb25DaGFuZ2VkXCIpO1xyXG4gICAgdGhpcy5pbnN0YW5jZS5hbm5vdE1hbmFnZXIuZGVsZXRlQW5ub3RhdGlvbih0aGlzLnNpZ25hdHVyZUFubm90YXRpb25zKTtcclxuICB9XHJcblxyXG4gIGdldFNpZ25hdHVyZUFubm90YWlvbnNJbmZvKCkge1xyXG4gICAgbGV0IHNpZ25hdHVyZUluZm8gPSB0aGlzLnNpZ25hdHVyZUFubm90YXRpb25zLm1hcCgoaXRlbSkgPT4ge1xyXG4gICAgICBsZXQgUGFnZUhlaWdodCA9IHRoaXMuaW5zdGFuY2UuZG9jVmlld2VyLmdldFBhZ2VIZWlnaHQoaXRlbS5QYWdlTnVtYmVyKTtcclxuICAgICAgbGV0IFBhZ2VXaWR0aCA9IHRoaXMuaW5zdGFuY2UuZG9jVmlld2VyLmdldFBhZ2VXaWR0aChpdGVtLlBhZ2VOdW1iZXIpO1xyXG4gICAgICBsZXQgeUNvbnN0ID0gdGhpcy5tb2RpZnlTaWduYXR1cmVBbm5vdGFpb25IZWlnaHRBbmRXaWR0aChcclxuICAgICAgICBQYWdlSGVpZ2h0LFxyXG4gICAgICAgIFBhZ2VXaWR0aFxyXG4gICAgICApLnk7XHJcbiAgICAgIC8vIGxldCB4Q29uc3QgPSB0aGlzLm1vZGlmeVNpZ25hdHVyZUFubm90YWlvbkhlaWdodEFuZFdpZHRoKFxyXG4gICAgICAvLyAgIFBhZ2VIZWlnaHQsXHJcbiAgICAgIC8vICAgUGFnZVdpZHRoXHJcbiAgICAgIC8vICkueDtcclxuICAgICAgcmV0dXJuIHtcclxuICAgICAgICBwYWdlbm86IGl0ZW0uUGFnZU51bWJlcixcclxuICAgICAgICAvL3g6IGl0ZW0uWCArIHhDb25zdCxcclxuICAgICAgICB4OiBpdGVtLlgsXHJcbiAgICAgICAgeTogaXRlbS5ZICsgeUNvbnN0LFxyXG4gICAgICAgIGhlaWdodDogaXRlbS5nZXRIZWlnaHQoKSxcclxuICAgICAgICB3aWR0aDogaXRlbS5nZXRXaWR0aCgpLFxyXG4gICAgICB9O1xyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gc2lnbmF0dXJlSW5mbztcclxuICB9XHJcbiAgbW9kaWZ5U2lnbmF0dXJlQW5ub3RhaW9uSGVpZ2h0QW5kV2lkdGgoUGFnZUhlaWdodCwgUGFnZVdpZHRoKSB7XHJcbiAgICBjb25zdCBzdGFuZGFyZEhlaWdodCA9IDg0MjtcclxuICAgIGNvbnN0IHN0YW5kYXJkV2lkdGggPSA1OTU7XHJcbiAgICBsZXQgeTogbnVtYmVyID0gMDtcclxuICAgIGxldCB4OiBudW1iZXIgPSAwO1xyXG4gICAgLy9oZWlnaHRcclxuICAgIGlmIChzdGFuZGFyZEhlaWdodCA+IFBhZ2VIZWlnaHQgfHwgc3RhbmRhcmRIZWlnaHQgPCBQYWdlSGVpZ2h0KSB7XHJcbiAgICAgIHkgPSBzdGFuZGFyZEhlaWdodCAtIFBhZ2VIZWlnaHQ7XHJcbiAgICB9XHJcbiAgICAvLyB3aWRodFxyXG4gICAgaWYgKHN0YW5kYXJkV2lkdGggPiBQYWdlV2lkdGggfHwgc3RhbmRhcmRXaWR0aCA8IFBhZ2VXaWR0aCkge1xyXG4gICAgICB4ID0gc3RhbmRhcmRXaWR0aCAtIFBhZ2VXaWR0aDtcclxuICAgIH1cclxuICAgIHJldHVybiB7IHksIHggfTtcclxuICB9XHJcbiAgYWRkU2lnbmF0dXJlKGJhc2U2NCkge1xyXG4gICAgaWYgKHRoaXMuaW5zdGFuY2UpIHtcclxuICAgICAgbGV0IGN1cnJlbnRQYWdlID0gdGhpcy5pbnN0YW5jZS5kb2NWaWV3ZXIuZ2V0Q3VycmVudFBhZ2UoKTtcclxuXHJcbiAgICAgIHRoaXMuaW5zdGFuY2UuYW5ub3RNYW5hZ2VyLnNldFJlYWRPbmx5KGZhbHNlKTtcclxuICAgICAgdGhpcy5pbnN0YW5jZS5kaXNhYmxlRWxlbWVudHMoW1xyXG4gICAgICAgIFwidG9vbGJhckdyb3VwLVNoYXBlc1wiLFxyXG4gICAgICAgIFwidG9vbGJhckdyb3VwLUVkaXRcIixcclxuICAgICAgICBcInRvb2xiYXJHcm91cC1JbnNlcnRcIixcclxuICAgICAgICBcInRvb2xiYXJHcm91cC1Bbm5vdGF0ZVwiLFxyXG4gICAgICBdKTtcclxuICAgICAgY29uc3Qgc2lnbmF0dXJlQW5ub3QgPSBuZXcgdGhpcy5pbnN0YW5jZS5Bbm5vdGF0aW9ucy5TdGFtcEFubm90YXRpb24oKTtcclxuICAgICAgc2lnbmF0dXJlQW5ub3QuUGFnZU51bWJlciA9IGN1cnJlbnRQYWdlO1xyXG4gICAgICBzaWduYXR1cmVBbm5vdC5YID0gMTAwO1xyXG4gICAgICBzaWduYXR1cmVBbm5vdC5ZID0gMjUwO1xyXG4gICAgICBzaWduYXR1cmVBbm5vdC5XaWR0aCA9IDE0MDtcclxuICAgICAgc2lnbmF0dXJlQW5ub3QuSGVpZ2h0ID0gNjA7XHJcbiAgICAgIGNvbnN0IGtlZXBBc1NWRyA9IGZhbHNlO1xyXG4gICAgICBzaWduYXR1cmVBbm5vdC5zZXRJbWFnZURhdGEoYmFzZTY0LCBrZWVwQXNTVkcpO1xyXG4gICAgICBzaWduYXR1cmVBbm5vdC5BdXRob3IgPSB0aGlzLmluc3RhbmNlLmFubm90TWFuYWdlci5nZXRDdXJyZW50VXNlcigpO1xyXG5cclxuICAgICAgdGhpcy5pbnN0YW5jZS5hbm5vdE1hbmFnZXIuYWRkQW5ub3RhdGlvbihzaWduYXR1cmVBbm5vdCk7XHJcbiAgICAgIHRoaXMuaW5zdGFuY2UuYW5ub3RNYW5hZ2VyLnJlZHJhd0Fubm90YXRpb24oc2lnbmF0dXJlQW5ub3QpO1xyXG4gICAgICB0aGlzLnBkZlRyb25TdHJlYW0ubmV4dCh7IGFjdGlvbjogXCJhZGRTdGFtcFwiLCBwYXJhbXM6IHsgYmFzZTY0IH0gfSk7XHJcblxyXG4gICAgICB0aGlzLnNpZ25hdHVyZUFubm90YXRpb25zLnB1c2goc2lnbmF0dXJlQW5ub3QpO1xyXG4gICAgICB0aGlzLmluc3RhbmNlLmFubm90TWFuYWdlci5vbihcclxuICAgICAgICBcImFubm90YXRpb25DaGFuZ2VkXCIsXHJcbiAgICAgICAgKGFubm90YXRpb25zLCBhY3Rpb24pID0+IHtcclxuICAgICAgICAgIGlmIChhY3Rpb24gPT09IFwibW9kaWZ5XCIpIHtcclxuICAgICAgICAgICAgYW5ub3RhdGlvbnMuZm9yRWFjaCgoY2hhbmdlZGFubm90KSA9PiB7XHJcbiAgICAgICAgICAgICAgLy8gdGhpcy5zaWduYXR1cmVBbm5vdGF0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uKGl0ZW0saSkge1xyXG4gICAgICAgICAgICAgIC8vICAgaWYgKGl0ZW0uSWQgPT0gY2hhbmdlZGFubm90LklkKSBpdGVtID0gY2hhbmdlZGFubm90O1xyXG4gICAgICAgICAgICAgIC8vIH0pO1xyXG4gICAgICAgICAgICAgIGxldCBpbmRleCA9IHRoaXMuc2lnbmF0dXJlQW5ub3RhdGlvbnNcclxuICAgICAgICAgICAgICAgIC5tYXAoKGl0ZW0pID0+IGl0ZW0uSWQpXHJcbiAgICAgICAgICAgICAgICAuaW5kZXhPZihjaGFuZ2VkYW5ub3QuSWQpO1xyXG4gICAgICAgICAgICAgIGlmIChpbmRleCA+IC0xKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNpZ25hdHVyZUFubm90YXRpb25zW2luZGV4XSA9IGNoYW5nZWRhbm5vdDtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfSBlbHNlIGlmIChhY3Rpb24gPT09IFwiZGVsZXRlXCIpIHtcclxuICAgICAgICAgICAgYW5ub3RhdGlvbnMuZm9yRWFjaCgoY2hhbmdlZGFubm90KSA9PiB7XHJcbiAgICAgICAgICAgICAgbGV0IGluZGV4ID0gdGhpcy5zaWduYXR1cmVBbm5vdGF0aW9uc1xyXG4gICAgICAgICAgICAgICAgLm1hcCgoaXRlbSkgPT4gaXRlbS5JZClcclxuICAgICAgICAgICAgICAgIC5pbmRleE9mKGNoYW5nZWRhbm5vdC5JZCk7XHJcbiAgICAgICAgICAgICAgaWYgKGluZGV4ID4gLTEpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2lnbmF0dXJlQW5ub3RhdGlvbnMuc3BsaWNlKGluZGV4LCAxKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoXCJObyBwZGZUcm9uIGluc3RhbmNlXCIpO1xyXG4gICAgfVxyXG4gIH1cclxuICBhZGRTdGFtcCh1cmwpIHtcclxuICAgIGlmICh0aGlzLmluc3RhbmNlKSB7XHJcbiAgICAgIHRoaXMuaW5zdGFuY2UuYW5ub3RNYW5hZ2VyLnNldFJlYWRPbmx5KGZhbHNlKTtcclxuICAgICAgdGhpcy5pbnN0YW5jZS5kaXNhYmxlRWxlbWVudHMoW1xyXG4gICAgICAgIFwidG9vbGJhckdyb3VwLVNoYXBlc1wiLFxyXG4gICAgICAgIFwidG9vbGJhckdyb3VwLUVkaXRcIixcclxuICAgICAgICBcInRvb2xiYXJHcm91cC1JbnNlcnRcIixcclxuICAgICAgICBcInRvb2xiYXJHcm91cC1Bbm5vdGF0ZVwiLFxyXG4gICAgICBdKTtcclxuICAgICAgdGhpcy5wZGZUcm9uU3RyZWFtLm5leHQoeyBhY3Rpb246IFwiYWRkU3RhbXBcIiwgcGFyYW1zOiB7IHVybCB9IH0pO1xyXG4gICAgICBsZXQgc3RhbXBBbm5vdCA9IG5ldyB0aGlzLmluc3RhbmNlLkFubm90YXRpb25zLlN0YW1wQW5ub3RhdGlvbigpO1xyXG4gICAgICBsZXQgcm90YXRpb24gPSB0aGlzLmluc3RhbmNlLmRvY1ZpZXdlci5nZXRDb21wbGV0ZVJvdGF0aW9uKHRoaXMuaW5zdGFuY2UuZG9jVmlld2VyLmdldEN1cnJlbnRQYWdlKCkpO1xyXG4gICAgICBzdGFtcEFubm90LlBhZ2VOdW1iZXIgPSAxO1xyXG4gICAgICBzdGFtcEFubm90LlggPSAwO1xyXG4gICAgICBzdGFtcEFubm90LlkgPSAwO1xyXG4gICAgICBzdGFtcEFubm90LldpZHRoID0gMTUwO1xyXG4gICAgICBzdGFtcEFubm90LkhlaWdodCA9IDc4O1xyXG4gICAgICBjb25zdCBrZWVwQXNTVkcgPSBmYWxzZTtcclxuICAgICAgaWYgKHJvdGF0aW9uID09IDEpIHtcclxuICAgICAgICBzdGFtcEFubm90LlJvdGF0aW9uID0gOTA7XHJcbiAgICAgICAgc3RhbXBBbm5vdC5XaWR0aCA9IDc4O1xyXG4gICAgICAgIHN0YW1wQW5ub3QuSGVpZ2h0ID0gMTUwO1xyXG4gICAgICB9XHJcbiAgICAgIHN0YW1wQW5ub3QuUmVhZE9ubHkgPSBmYWxzZTtcclxuICAgICAgc3RhbXBBbm5vdC5zZXRJbWFnZURhdGEodXJsLCBrZWVwQXNTVkcpO1xyXG4gICAgICBzdGFtcEFubm90LkF1dGhvciA9IHRoaXMuaW5zdGFuY2UuYW5ub3RNYW5hZ2VyLmdldEN1cnJlbnRVc2VyKCk7XHJcbiAgICAgIHRoaXMuaW5zdGFuY2UuYW5ub3RNYW5hZ2VyLmFkZEFubm90YXRpb24oc3RhbXBBbm5vdCk7XHJcbiAgICAgIHRoaXMuaW5zdGFuY2UuYW5ub3RNYW5hZ2VyLnJlZHJhd0Fubm90YXRpb24oc3RhbXBBbm5vdCk7XHJcbiAgICAgIHRoaXMuc3RhbXBBbm5vdHMucHVzaChzdGFtcEFubm90KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoXCJObyBwZGZUcm9uIGluc3RhbmNlXCIpO1xyXG4gICAgfVxyXG4gIH1cclxuICBhZGRXYXRlcm1hcmsodGV4dCkge1xyXG4gICAgdGV4dCA9IG5ldyBBcnJheSgxMDAgKiAyKS5qb2luKHRleHQgKyBcIiBcIik7IC8vIG51bWJlciBvZiBsaW5lc1xyXG4gICAgaWYgKHRoaXMuaW5zdGFuY2UpIHtcclxuICAgICAgdGhpcy5pbnN0YW5jZS5kb2NWaWV3ZXIuc2V0V2F0ZXJtYXJrKHtcclxuICAgICAgICBjdXN0b206IChjdHgsIHBhZ2VOdW1iZXIsIHBhZ2VXaWR0aCwgcGFnZUhlaWdodCkgPT4ge1xyXG4gICAgICAgICAgLy8gY3R4IGlzIGFuIGluc3RhbmNlIG9mIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRFxyXG4gICAgICAgICAgY3R4LmZpbGxTdHlsZSA9IFwiI2Q5ZGNlMlwiO1xyXG4gICAgICAgICAgY3R4LmZvbnQgPSBcIjE2cHQgQXJpYWxcIjtcclxuICAgICAgICAgIGN0eC5nbG9iYWxBbHBoYSA9IDAuMztcclxuICAgICAgICAgIGxldCB0eHRIZWlnaHQgPSA1MDtcclxuICAgICAgICAgIGNvbnN0IGxpbmVOdW1iZXIgPSBwYWdlV2lkdGggPiBwYWdlSGVpZ2h0ID8gcGFnZVdpZHRoIDogcGFnZUhlaWdodDtcclxuICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgTWF0aC5jZWlsKChsaW5lTnVtYmVyICogMS41KSAvIHR4dEhlaWdodCk7IGkrKykge1xyXG4gICAgICAgICAgICBjdHguc2F2ZSgpO1xyXG4gICAgICAgICAgICBjdHgucm90YXRlKC00NSk7XHJcbiAgICAgICAgICAgIGN0eC5maWxsVGV4dCh0ZXh0LCAwLCBpICogdHh0SGVpZ2h0KTtcclxuICAgICAgICAgICAgY3R4LnJlc3RvcmUoKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICB9KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoXCJObyBwZGZUcm9uIGluc3RhbmNlXCIpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmVtb3ZlV2F0ZXJtYXJrKCkge1xyXG4gICAgdGhpcy5pbnN0YW5jZS5kb2NWaWV3ZXIuc2V0V2F0ZXJtYXJrKHt9KTtcclxuICAgIHRoaXMuaW5zdGFuY2UuZG9jVmlld2VyLnJlZnJlc2hBbGwoKTtcclxuICAgIHRoaXMuaW5zdGFuY2UuZG9jVmlld2VyLnVwZGF0ZVZpZXcoKTtcclxuICB9XHJcblxyXG4gIGV4dHJhY3RBbm90YXRpb24oYW5ub3RhdGlvbil7IFxyXG4gICAgaWYoYW5ub3RhdGlvblsnaW1hZ2UnXSl7XHJcbiAgICAgIC8vIGNvbnZlcnQgYmFzZTY0IHNpZ25hdHVyZSBpbnRvIGZpbGUgYW5kIGVtaXQgaXQgdG8gb3V0IHNpZGUgXHJcbiAgICAgIGxldCBiYXNlNjRJbWcgPSBhbm5vdGF0aW9uWydpbWFnZSddWydjdXJyZW50U3JjJ107XHJcbiAgICAgIC8vIHZhciBhcnIgPSBiYXNlNjRJbWcuc3BsaXQoJywnKSxcclxuICAgICAgLy8gbWltZSA9IGFyclswXS5tYXRjaCgvOiguKj8pOy8pWzFdLFxyXG4gICAgICAvLyBic3RyID0gYXRvYihhcnJbMV0pLCBcclxuICAgICAgLy8gbiA9IGJzdHIubGVuZ3RoLCBcclxuICAgICAgLy8gdThhcnIgPSBuZXcgVWludDhBcnJheShuKTtcclxuICAgICAgLy8gd2hpbGUobi0tKXtcclxuICAgICAgLy8gICAgIHU4YXJyW25dID0gYnN0ci5jaGFyQ29kZUF0KG4pO1xyXG4gICAgICAvLyB9XHJcbiAgICAgIC8vIGxldCBuYW1lID0gbWltZS5yZXBsYWNlKCcvJyAsICcuJylcclxuICAgICAgLy8gbGV0IG15RmlsZSA9IG5ldyBGaWxlKFt1OGFycl0sICdteVNpZ25hdHVyZS5wbmcnLCB7dHlwZTptaW1lfSk7XHJcbiAgICAgIHRoaXMub25JbWFnZUV4dHJhY3Rpb24uZW1pdChiYXNlNjRJbWcpO1xyXG4gICAgICAvLyByZXR1cm4ge3R5cGU6J2Jhc2U2NCcgLCBmaWxlIDogYmFzZTY0SW1nfVxyXG4gICAgfWVsc2V7XHJcbiAgICAgIHRoaXMuZXh0cmFjdEFubm90YXRpb25TaWduYXR1cmUoYW5ub3RhdGlvbiAsIHRoaXMuaW5zdGFuY2UuZG9jVmlld2VyKVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYXN5bmMgZXh0cmFjdEFubm90YXRpb25TaWduYXR1cmUoYW5ub3RhdGlvbiwgZG9jVmlld2VyKSB7XHJcbiAgICAvLyBDcmVhdGUgYSBuZXcgQ2FudmFzIHRvIGRyYXcgdGhlIEFubm90YXRpb24gb25cclxuICAgIGNvbnN0IGNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xyXG4gICAgLy8gUmVmZXJlbmNlIHRoZSBhbm5vdGF0aW9uIGZyb20gdGhlIERvY3VtZW50XHJcbiAgICBjb25zdCBwYWdlTWF0cml4ID0gZG9jVmlld2VyLmdldERvY3VtZW50KCkuZ2V0UGFnZU1hdHJpeChhbm5vdGF0aW9uLlBhZ2VOdW1iZXIpO1xyXG4gICAgLy8gU2V0IHRoZSBoZWlnaHQgJiB3aWR0aCBvZiB0aGUgY2FudmFzIHRvIG1hdGNoIHRoZSBhbm5vdGF0aW9uXHJcbiAgICBjYW52YXMuaGVpZ2h0ID0gYW5ub3RhdGlvbi5IZWlnaHQ7XHJcbiAgICBjYW52YXMud2lkdGggPSBhbm5vdGF0aW9uLldpZHRoO1xyXG4gICAgY29uc3QgY3R4ID0gY2FudmFzLmdldENvbnRleHQoJzJkJyk7XHJcbiAgICAvLyBUcmFuc2xhdGUgdGhlIEFubm90YXRpb24gdG8gdGhlIHRvcCBUb3AgTGVmdCBDb3JuZXIgb2YgdGhlIENhbnZhcyBpZSAoMCwgMClcclxuICAgIGN0eC50cmFuc2xhdGUoLWFubm90YXRpb24uWCwgLWFubm90YXRpb24uWSk7XHJcbiAgICAvLyBEcmF3IHRoZSBBbm5vdGF0aW9uIG9udG8gdGhlIENhbnZhc1xyXG4gICAgYW5ub3RhdGlvbi5kcmF3KGN0eCwgcGFnZU1hdHJpeCk7XHJcbiAgICAvLyBDb252ZXJ0IHRoZSBDYW52YXMgdG8gYSBCbG9iIE9iamVjdCBmb3IgVXBsb2FkXHJcbiAgICBjYW52YXMudG9CbG9iKChibG9iKSA9PiB7XHJcbiAgICAgIC8vIENhbGwgeW91ciBCbG9iIFN0b3JhZ2UgVXBsb2FkIEZ1bmN0aW9uXHJcbiAgICAgIC8vIGxldCBuYW1lID0gYmxvYi50eXBlLnJlcGxhY2UoJy8nICwgJy4nKVxyXG4gICAgICAvLyBsZXQgbXlGaWxlID0gbmV3IEZpbGUoW2Jsb2JdLCBuYW1lKTtcclxuICAgICAgdmFyIHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XHJcbiAgICAgIHJlYWRlci5yZWFkQXNEYXRhVVJMKGJsb2IpOyBcclxuICAgICAgcmVhZGVyLm9ubG9hZGVuZCA9ICgpID0+IHtcclxuICAgICAgICB2YXIgYmFzZTY0ZGF0YSA9IHJlYWRlci5yZXN1bHQ7ICAgICAgICAgICAgICAgIFxyXG4gICAgICAgIGNvbnNvbGUubG9nKGJhc2U2NGRhdGEpO1xyXG4gICAgICAgIHRoaXMub25JbWFnZUV4dHJhY3Rpb24uZW1pdChiYXNlNjRkYXRhKTsgXHJcbiAgICAgIH1cclxuICAgICAgLy8gcmV0dXJuIHt0eXBlOiAnYmxvYicgLCBmaWxlIDogYmxvYn1cclxuICAgIH0pO1xyXG4gIH1cclxufVxyXG4iXX0=