igniteui-angular 14.2.30 → 14.2.31

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.
@@ -258,6 +258,9 @@ export class IgxHierarchicalGridComponent extends IgxHierarchicalGridBaseDirecti
258
258
  set data(value) {
259
259
  this._data = value || [];
260
260
  this.summaryService.clearSummaryCache();
261
+ if (!this._init) {
262
+ this.validation.updateAll(this._data);
263
+ }
261
264
  if (this.shouldGenerate) {
262
265
  this.setupColumns();
263
266
  this.reflow();
@@ -1029,4 +1032,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.1", ngImpor
1029
1032
  }], expandChildren: [{
1030
1033
  type: Input
1031
1034
  }] } });
1032
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGllcmFyY2hpY2FsLWdyaWQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaWduaXRldWktYW5ndWxhci9zcmMvbGliL2dyaWRzL2hpZXJhcmNoaWNhbC1ncmlkL2hpZXJhcmNoaWNhbC1ncmlkLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2lnbml0ZXVpLWFuZ3VsYXIvc3JjL2xpYi9ncmlkcy9oaWVyYXJjaGljYWwtZ3JpZC9jaGlsZC1ncmlkLXJvdy5jb21wb25lbnQuaHRtbCIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2lnbml0ZXVpLWFuZ3VsYXIvc3JjL2xpYi9ncmlkcy9oaWVyYXJjaGljYWwtZ3JpZC9oaWVyYXJjaGljYWwtZ3JpZC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBR0gsdUJBQXVCLEVBRXZCLFNBQVMsRUFFVCxZQUFZLEVBQ1osZUFBZSxFQUdmLFdBQVcsRUFDWCxNQUFNLEVBQ04sS0FBSyxFQUtMLFdBQVcsRUFDWCxTQUFTLEVBQ1QsWUFBWSxFQUNaLGdCQUFnQixFQUNuQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNoRixPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUMvRCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUUxRSxPQUFPLEVBQUUsb0NBQW9DLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUM5RixPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUMxRSxPQUFPLEVBQUUsZ0NBQWdDLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUN0RixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0MsT0FB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RUFBRSxFQUFFLElBQUksRUFBRSxnQkFBZ0IsRUFBRTtnQkFNakQsZUFBZTtzQkFEckIsWUFBWTt1QkFBQywwQkFBMEIsRUFBRSxFQUFFLElBQUksRUFBRSwwQkFBMEIsRUFBRTtnQkFPdkUsZ0JBQWdCO3NCQUR0QixZQUFZO3VCQUFDLHdCQUF3QjtnQkFJNUIsMEJBQTBCO3NCQURuQyxTQUFTO3VCQUFDLDhCQUE4QixFQUFFLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQUlwRSxhQUFhO3NCQUR0QixTQUFTO3VCQUFDLHVCQUF1QixFQUFFLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQW9ENUQsRUFBRTtzQkFGWixXQUFXO3VCQUFDLFNBQVM7O3NCQUNyQixLQUFLO2dCQWlCSyxJQUFJO3NCQURkLEtBQUs7Z0JBa0dLLGNBQWM7c0JBRHhCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIEFmdGVyQ29udGVudEluaXQsXG4gICAgQWZ0ZXJWaWV3SW5pdCxcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBDb21wb25lbnQsXG4gICAgQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyLFxuICAgIENvbnRlbnRDaGlsZCxcbiAgICBDb250ZW50Q2hpbGRyZW4sXG4gICAgRG9DaGVjayxcbiAgICBFbGVtZW50UmVmLFxuICAgIEhvc3RCaW5kaW5nLFxuICAgIEluamVjdCxcbiAgICBJbnB1dCxcbiAgICBPbkRlc3Ryb3ksXG4gICAgT25Jbml0LFxuICAgIFF1ZXJ5TGlzdCxcbiAgICBTaW1wbGVDaGFuZ2VzLFxuICAgIFRlbXBsYXRlUmVmLFxuICAgIFZpZXdDaGlsZCxcbiAgICBWaWV3Q2hpbGRyZW4sXG4gICAgVmlld0NvbnRhaW5lclJlZlxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IElneEhpZXJhcmNoaWNhbEdyaWRBUElTZXJ2aWNlIH0gZnJvbSAnLi9oaWVyYXJjaGljYWwtZ3JpZC1hcGkuc2VydmljZSc7XG5pbXBvcnQgeyBJZ3hSb3dJc2xhbmRDb21wb25lbnQgfSBmcm9tICcuL3Jvdy1pc2xhbmQuY29tcG9uZW50JztcbmltcG9ydCB7IElneEZpbHRlcmluZ1NlcnZpY2UgfSBmcm9tICcuLi9maWx0ZXJpbmcvZ3JpZC1maWx0ZXJpbmcuc2VydmljZSc7XG5pbXBvcnQgeyBJZ3hDb2x1bW5Db21wb25lbnQsIH0gZnJvbSAnLi4vY29sdW1ucy9jb2x1bW4uY29tcG9uZW50JztcbmltcG9ydCB7IElneEhpZXJhcmNoaWNhbEdyaWROYXZpZ2F0aW9uU2VydmljZSB9IGZyb20gJy4vaGllcmFyY2hpY2FsLWdyaWQtbmF2aWdhdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7IElneEdyaWRTdW1tYXJ5U2VydmljZSB9IGZyb20gJy4uL3N1bW1hcmllcy9ncmlkLXN1bW1hcnkuc2VydmljZSc7XG5pbXBvcnQgeyBJZ3hIaWVyYXJjaGljYWxHcmlkQmFzZURpcmVjdGl2ZSB9IGZyb20gJy4vaGllcmFyY2hpY2FsLWdyaWQtYmFzZS5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgSWd4VGVtcGxhdGVPdXRsZXREaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmVzL3RlbXBsYXRlLW91dGxldC90ZW1wbGF0ZV9vdXRsZXQuZGlyZWN0aXZlJztcbmltcG9ydCB7IElneEdyaWRTZWxlY3Rpb25TZXJ2aWNlIH0gZnJvbSAnLi4vc2VsZWN0aW9uL3NlbGVjdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7IElneEZvck9mU3luY1NlcnZpY2UsIElneEZvck9mU2Nyb2xsU3luY1NlcnZpY2UgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmVzL2Zvci1vZi9mb3Jfb2Yuc3luYy5zZXJ2aWNlJztcbmltcG9ydCB7IENlbGxUeXBlLCBHcmlkVHlwZSwgSUdYX0dSSURfQkFTRSwgSUdYX0dSSURfU0VSVklDRV9CQVNFLCBSb3dUeXBlIH0gZnJvbSAnLi4vY29tbW9uL2dyaWQuaW50ZXJmYWNlJztcbmltcG9ydCB7IElneFJvd0lzbGFuZEFQSVNlcnZpY2UgfSBmcm9tICcuL3Jvdy1pc2xhbmQtYXBpLnNlcnZpY2UnO1xuaW1wb3J0IHsgSWd4R3JpZFRvb2xiYXJEaXJlY3RpdmUsIElneEdyaWRUb29sYmFyVGVtcGxhdGVDb250ZXh0IH0gZnJvbSAnLi4vdG9vbGJhci9jb21tb24nO1xuaW1wb3J0IHsgSWd4R3JpZENSVURTZXJ2aWNlIH0gZnJvbSAnLi4vY29tbW9uL2NydWQuc2VydmljZSc7XG5pbXBvcnQgeyBJZ3hIaWVyYXJjaGljYWxHcmlkUm93IH0gZnJvbSAnLi4vZ3JpZC1wdWJsaWMtcm93JztcbmltcG9ydCB7IElneEdyaWRDZWxsIH0gZnJvbSAnLi4vZ3JpZC1wdWJsaWMtY2VsbCc7XG5pbXBvcnQgeyBJZ3hQYWdpbmF0b3JDb21wb25lbnQgfSBmcm9tICcuLi8uLi9wYWdpbmF0b3IvcGFnaW5hdG9yLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBJZ3hHcmlkQ29tcG9uZW50IH0gZnJvbSAnLi4vZ3JpZC9ncmlkLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBJZ3hPdmVybGF5T3V0bGV0RGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlcy90b2dnbGUvdG9nZ2xlLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBJZ3hDb2x1bW5SZXNpemluZ1NlcnZpY2UgfSBmcm9tICcuLi9yZXNpemluZy9yZXNpemluZy5zZXJ2aWNlJztcbmltcG9ydCB7IElneEdyaWRFeGNlbFN0eWxlRmlsdGVyaW5nQ29tcG9uZW50IH0gZnJvbSAnLi4vZmlsdGVyaW5nL2V4Y2VsLXN0eWxlL2dyaWQuZXhjZWwtc3R5bGUtZmlsdGVyaW5nLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBJZ3hHcmlkVmFsaWRhdGlvblNlcnZpY2UgfSBmcm9tICcuLi9ncmlkL2dyaWQtdmFsaWRhdGlvbi5zZXJ2aWNlJztcblxubGV0IE5FWFRfSUQgPSAwO1xuXG5leHBvcnQgaW50ZXJmYWNlIEhpZXJhcmNoaWNhbFN0YXRlUmVjb3JkIHtcbiAgICByb3dJRDogYW55O1xufVxuXG5AQ29tcG9uZW50KHtcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgICBzZWxlY3RvcjogJ2lneC1jaGlsZC1ncmlkLXJvdycsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2NoaWxkLWdyaWQtcm93LmNvbXBvbmVudC5odG1sJyxcbn0pXG5leHBvcnQgY2xhc3MgSWd4Q2hpbGRHcmlkUm93Q29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgT25Jbml0IHtcbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBsYXlvdXQ6IElneFJvd0lzbGFuZENvbXBvbmVudDtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IHBhcmVudEhhc1Njcm9sbCgpIHtcbiAgICAgICAgcmV0dXJuICF0aGlzLnBhcmVudEdyaWQudmVydGljYWxTY3JvbGxDb250YWluZXIuZGMuaW5zdGFuY2Uubm90VmlydHVhbDtcbiAgICB9XG5cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBwYXJlbnRHcmlkSUQ6IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqICBUaGUgZGF0YSBwYXNzZWQgdG8gdGhlIHJvdyBjb21wb25lbnQuXG4gICAgICpcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogLy8gZ2V0IHRoZSByb3cgZGF0YSBmb3IgdGhlIGZpcnN0IHNlbGVjdGVkIHJvd1xuICAgICAqIGxldCBzZWxlY3RlZFJvd0RhdGEgPSB0aGlzLmdyaWQuc2VsZWN0ZWRSb3dzWzBdLmRhdGE7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgZGF0YTogYW55ID0gW107XG4gICAgLyoqXG4gICAgICogVGhlIGluZGV4IG9mIHRoZSByb3cuXG4gICAgICpcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogLy8gZ2V0IHRoZSBpbmRleCBvZiB0aGUgc2Vjb25kIHNlbGVjdGVkIHJvd1xuICAgICAqIGxldCBzZWxlY3RlZFJvd0luZGV4ID0gdGhpcy5ncmlkLnNlbGVjdGVkUm93c1sxXS5pbmRleDtcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBpbmRleDogbnVtYmVyO1xuXG4gICAgQFZpZXdDaGlsZCgnaGdyaWQnLCB7IHN0YXRpYzogdHJ1ZSB9KVxuICAgIHB1YmxpYyBoR3JpZDogSWd4SGllcmFyY2hpY2FsR3JpZENvbXBvbmVudDtcblxuICAgIC8qKlxuICAgICAqIEdldCBhIHJlZmVyZW5jZSB0byB0aGUgZ3JpZCB0aGF0IGNvbnRhaW5zIHRoZSBzZWxlY3RlZCByb3cuXG4gICAgICpcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogaGFuZGxlUm93U2VsZWN0aW9uKGV2ZW50KSB7XG4gICAgICogIC8vIHRoZSBncmlkIG9uIHdoaWNoIHRoZSByb3dTZWxlY3RlZCBldmVudCB3YXMgdHJpZ2dlcmVkXG4gICAgICogIGNvbnN0IGdyaWQgPSBldmVudC5yb3cuZ3JpZDtcbiAgICAgKiB9XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBgYGBodG1sXG4gICAgICogIDxpZ3gtZ3JpZFxuICAgICAqICAgIFtkYXRhXT1cImRhdGFcIlxuICAgICAqICAgIChyb3dTZWxlY3RlZCk9XCJoYW5kbGVSb3dTZWxlY3Rpb24oJGV2ZW50KVwiPlxuICAgICAqICA8L2lneC1ncmlkPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIC8vIFRPRE86IFJlZmFjdG9yXG4gICAgcHVibGljIGdldCBwYXJlbnRHcmlkKCk6IElneEhpZXJhcmNoaWNhbEdyaWRDb21wb25lbnQge1xuICAgICAgICByZXR1cm4gdGhpcy5ncmlkQVBJLmdyaWQgYXMgSWd4SGllcmFyY2hpY2FsR3JpZENvbXBvbmVudDtcbiAgICB9XG5cbiAgICBASG9zdEJpbmRpbmcoJ2F0dHIuYXJpYS1sZXZlbCcpXG4gICAgcHVibGljIGdldCBsZXZlbCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubGF5b3V0LmxldmVsO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBuYXRpdmUgRE9NIGVsZW1lbnQgcmVwcmVzZW50aW5nIHRoZSByb3cuIENvdWxkIGJlIG51bGwgaW4gY2VydGFpbiBlbnZpcm9ubWVudHMuXG4gICAgICpcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogLy8gZ2V0IHRoZSBuYXRpdmVFbGVtZW50IG9mIHRoZSBzZWNvbmQgc2VsZWN0ZWQgcm93XG4gICAgICogbGV0IHNlbGVjdGVkUm93TmF0aXZlRWxlbWVudCA9IHRoaXMuZ3JpZC5zZWxlY3RlZFJvd3NbMV0ubmF0aXZlRWxlbWVudDtcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IG5hdGl2ZUVsZW1lbnQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHdoZXRoZXIgdGhlIHJvdyBpcyBleHBhbmRlZC5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogY29uc3QgUm93RXhwYW5kZWQgPSB0aGlzLmdyaWQxLnJvd0xpc3QuZmlyc3QuZXhwYW5kZWQ7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgcHVibGljIGV4cGFuZGVkID0gZmFsc2U7XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgQEluamVjdChJR1hfR1JJRF9TRVJWSUNFX0JBU0UpIHB1YmxpYyBncmlkQVBJOiBJZ3hIaWVyYXJjaGljYWxHcmlkQVBJU2VydmljZSxcbiAgICAgICAgcHVibGljIGVsZW1lbnQ6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+LFxuICAgICAgICBwcml2YXRlIHJlc29sdmVyOiBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsXG4gICAgICAgIHB1YmxpYyBjZHI6IENoYW5nZURldGVjdG9yUmVmKSB7IH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwdWJsaWMgbmdPbkluaXQoKSB7XG4gICAgICAgIHRoaXMubGF5b3V0LmxheW91dENoYW5nZS5zdWJzY3JpYmUoKGNoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9oYW5kbGVMYXlvdXRDaGFuZ2VzKGNoKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IGNoYW5nZXMgPSB0aGlzLmxheW91dC5pbml0aWFsQ2hhbmdlcztcbiAgICAgICAgY2hhbmdlcy5mb3JFYWNoKGNoYW5nZSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9oYW5kbGVMYXlvdXRDaGFuZ2VzKGNoYW5nZSk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmhHcmlkLnBhcmVudCA9IHRoaXMucGFyZW50R3JpZDtcbiAgICAgICAgdGhpcy5oR3JpZC5wYXJlbnRJc2xhbmQgPSB0aGlzLmxheW91dDtcbiAgICAgICAgdGhpcy5oR3JpZC5jaGlsZFJvdyA9IHRoaXM7XG4gICAgICAgIC8vIGhhbmRsZXIgbG9naWMgdGhhdCByZS1lbWl0cyBoZ3JpZCBldmVudHMgb24gdGhlIHJvdyBpc2xhbmRcbiAgICAgICAgdGhpcy5zZXR1cEV2ZW50RW1pdHRlcnMoKTtcbiAgICAgICAgdGhpcy5sYXlvdXQuZ3JpZENyZWF0ZWQuZW1pdCh7XG4gICAgICAgICAgICBvd25lcjogdGhpcy5sYXlvdXQsXG4gICAgICAgICAgICBwYXJlbnRJRDogdGhpcy5kYXRhLnJvd0lELFxuICAgICAgICAgICAgZ3JpZDogdGhpcy5oR3JpZFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHVibGljIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICAgICAgdGhpcy5oR3JpZC5jaGlsZExheW91dExpc3QgPSB0aGlzLmxheW91dC5jaGlsZHJlbjtcbiAgICAgICAgY29uc3QgbGF5b3V0cyA9IHRoaXMuaEdyaWQuY2hpbGRMYXlvdXRMaXN0LnRvQXJyYXkoKTtcbiAgICAgICAgbGF5b3V0cy5mb3JFYWNoKChsKSA9PiB0aGlzLmhHcmlkLmdyaWRBUEkucmVnaXN0ZXJDaGlsZFJvd0lzbGFuZChsKSk7XG4gICAgICAgIHRoaXMucGFyZW50R3JpZC5ncmlkQVBJLnJlZ2lzdGVyQ2hpbGRHcmlkKHRoaXMuZGF0YS5yb3dJRCwgdGhpcy5sYXlvdXQua2V5LCB0aGlzLmhHcmlkKTtcbiAgICAgICAgdGhpcy5sYXlvdXQucm93SXNsYW5kQVBJLnJlZ2lzdGVyQ2hpbGRHcmlkKHRoaXMuZGF0YS5yb3dJRCwgdGhpcy5oR3JpZCk7XG5cbiAgICAgICAgdGhpcy5sYXlvdXQuZ3JpZEluaXRpYWxpemVkLmVtaXQoe1xuICAgICAgICAgICAgb3duZXI6IHRoaXMubGF5b3V0LFxuICAgICAgICAgICAgcGFyZW50SUQ6IHRoaXMuZGF0YS5yb3dJRCxcbiAgICAgICAgICAgIGdyaWQ6IHRoaXMuaEdyaWRcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5oR3JpZC5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2V0dXBFdmVudEVtaXR0ZXJzKCkge1xuICAgICAgICBjb25zdCBkZXN0cnVjdG9yID0gdGFrZVVudGlsKHRoaXMuaEdyaWQuZGVzdHJveSQpO1xuXG4gICAgICAgIGNvbnN0IGZhY3RvcnkgPSB0aGlzLnJlc29sdmVyLnJlc29sdmVDb21wb25lbnRGYWN0b3J5KElneEdyaWRDb21wb25lbnQpO1xuICAgICAgICAvLyBleGNsdWRlIG91dHB1dHMgcmVsYXRlZCB0byB0d28td2F5IGJpbmRpbmcgZnVuY3Rpb25hbGl0eVxuICAgICAgICBjb25zdCBpbnB1dE5hbWVzID0gZmFjdG9yeS5pbnB1dHMubWFwKGlucHV0ID0+IGlucHV0LnByb3BOYW1lKTtcbiAgICAgICAgY29uc3Qgb3V0cHV0cyA9IGZhY3Rvcnkub3V0cHV0cy5maWx0ZXIobyA9PiB7XG4gICAgICAgICAgICBjb25zdCBtYXRjaGluZ0lucHV0UHJvcE5hbWUgPSBvLnByb3BOYW1lLnNsaWNlKDAsIG8ucHJvcE5hbWUuaW5kZXhPZignQ2hhbmdlJykpO1xuICAgICAgICAgICAgcmV0dXJuIGlucHV0TmFtZXMuaW5kZXhPZihtYXRjaGluZ0lucHV0UHJvcE5hbWUpID09PSAtMTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gVE9ETzogU2tpcCB0aGUgYHJlbmRlcmVkYCBvdXRwdXQuIFJlbmRlcmVkIHNob3VsZCBiZSBjYWxsZWQgb25jZSBwZXIgZ3JpZC5cbiAgICAgICAgb3V0cHV0cy5maWx0ZXIobyA9PiBvLnByb3BOYW1lICE9PSAncmVuZGVyZWQnKS5mb3JFYWNoKG91dHB1dCA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5oR3JpZFtvdXRwdXQucHJvcE5hbWVdKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5oR3JpZFtvdXRwdXQucHJvcE5hbWVdLnBpcGUoZGVzdHJ1Y3Rvcikuc3Vic2NyaWJlKChhcmdzKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghYXJncykge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXJncyA9IHt9O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGFyZ3Mub3duZXIgPSB0aGlzLmhHcmlkO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmxheW91dFtvdXRwdXQucHJvcE5hbWVdLmVtaXQoYXJncyk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuXG4gICAgcHJpdmF0ZSBfaGFuZGxlTGF5b3V0Q2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XG4gICAgICAgIGZvciAoY29uc3QgY2hhbmdlIGluIGNoYW5nZXMpIHtcbiAgICAgICAgICAgIGlmIChjaGFuZ2VzLmhhc093blByb3BlcnR5KGNoYW5nZSkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmhHcmlkW2NoYW5nZV0gPSBjaGFuZ2VzW2NoYW5nZV0uY3VycmVudFZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuXG5cbkBDb21wb25lbnQoe1xuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgIHNlbGVjdG9yOiAnaWd4LWhpZXJhcmNoaWNhbC1ncmlkJyxcbiAgICB0ZW1wbGF0ZVVybDogJ2hpZXJhcmNoaWNhbC1ncmlkLmNvbXBvbmVudC5odG1sJyxcbiAgICBwcm92aWRlcnM6IFtcbiAgICAgICAgSWd4R3JpZENSVURTZXJ2aWNlLFxuICAgICAgICBJZ3hHcmlkVmFsaWRhdGlvblNlcnZpY2UsXG4gICAgICAgIElneEdyaWRTZWxlY3Rpb25TZXJ2aWNlLFxuICAgICAgICB7IHByb3ZpZGU6IElHWF9HUklEX1NFUlZJQ0VfQkFTRSwgdXNlQ2xhc3M6IElneEhpZXJhcmNoaWNhbEdyaWRBUElTZXJ2aWNlIH0sXG4gICAgICAgIHsgcHJvdmlkZTogSUdYX0dSSURfQkFTRSwgdXNlRXhpc3Rpbmc6IElneEhpZXJhcmNoaWNhbEdyaWRDb21wb25lbnQgfSxcbiAgICAgICAgSWd4R3JpZFN1bW1hcnlTZXJ2aWNlLFxuICAgICAgICBJZ3hGaWx0ZXJpbmdTZXJ2aWNlLFxuICAgICAgICBJZ3hIaWVyYXJjaGljYWxHcmlkTmF2aWdhdGlvblNlcnZpY2UsXG4gICAgICAgIElneENvbHVtblJlc2l6aW5nU2VydmljZSxcbiAgICAgICAgSWd4Rm9yT2ZTeW5jU2VydmljZSxcbiAgICAgICAgSWd4Rm9yT2ZTY3JvbGxTeW5jU2VydmljZSxcbiAgICAgICAgSWd4Um93SXNsYW5kQVBJU2VydmljZVxuICAgIF1cbn0pXG5leHBvcnQgY2xhc3MgSWd4SGllcmFyY2hpY2FsR3JpZENvbXBvbmVudCBleHRlbmRzIElneEhpZXJhcmNoaWNhbEdyaWRCYXNlRGlyZWN0aXZlXG4gICAgaW1wbGVtZW50cyBHcmlkVHlwZSwgQWZ0ZXJWaWV3SW5pdCwgQWZ0ZXJDb250ZW50SW5pdCwgT25Jbml0LCBPbkRlc3Ryb3ksIERvQ2hlY2sge1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBASG9zdEJpbmRpbmcoJ2F0dHIucm9sZScpXG4gICAgcHVibGljIHJvbGUgPSAnZ3JpZCc7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgQENvbnRlbnRDaGlsZHJlbihJZ3hSb3dJc2xhbmRDb21wb25lbnQsIHsgcmVhZDogSWd4Um93SXNsYW5kQ29tcG9uZW50LCBkZXNjZW5kYW50czogZmFsc2UgfSlcbiAgICBwdWJsaWMgY2hpbGRMYXlvdXRMaXN0OiBRdWVyeUxpc3Q8SWd4Um93SXNsYW5kQ29tcG9uZW50PjtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBAQ29udGVudENoaWxkcmVuKElneFJvd0lzbGFuZENvbXBvbmVudCwgeyByZWFkOiBJZ3hSb3dJc2xhbmRDb21wb25lbnQsIGRlc2NlbmRhbnRzOiB0cnVlIH0pXG4gICAgcHVibGljIGFsbExheW91dExpc3Q6IFF1ZXJ5TGlzdDxJZ3hSb3dJc2xhbmRDb21wb25lbnQ+O1xuXG4gICAgQENvbnRlbnRDaGlsZChJZ3hHcmlkVG9vbGJhckRpcmVjdGl2ZSwgeyByZWFkOiBUZW1wbGF0ZVJlZiwgc3RhdGljOiB0cnVlIH0pXG4gICAgcHVibGljIHRvb2xiYXJUZW1wbGF0ZTogVGVtcGxhdGVSZWY8SWd4R3JpZFRvb2xiYXJUZW1wbGF0ZUNvbnRleHQ+O1xuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgQENvbnRlbnRDaGlsZHJlbihJZ3hQYWdpbmF0b3JDb21wb25lbnQsIHsgZGVzY2VuZGFudHM6IHRydWUgfSlcbiAgICBwdWJsaWMgcGFnaW5hdG9yTGlzdDogUXVlcnlMaXN0PElneFBhZ2luYXRvckNvbXBvbmVudD47XG5cbiAgICBAVmlld0NoaWxkKCd0b29sYmFyT3V0bGV0JywgeyByZWFkOiBWaWV3Q29udGFpbmVyUmVmIH0pXG4gICAgcHVibGljIHRvb2xiYXJPdXRsZXQ6IFZpZXdDb250YWluZXJSZWY7XG5cbiAgICBAVmlld0NoaWxkKCdwYWdpbmF0b3JPdXRsZXQnLCB7IHJlYWQ6IFZpZXdDb250YWluZXJSZWYgfSlcbiAgICBwdWJsaWMgcGFnaW5hdG9yT3V0bGV0OiBWaWV3Q29udGFpbmVyUmVmO1xuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBAVmlld0NoaWxkcmVuKElneFRlbXBsYXRlT3V0bGV0RGlyZWN0aXZlLCB7IHJlYWQ6IElneFRlbXBsYXRlT3V0bGV0RGlyZWN0aXZlIH0pXG4gICAgcHVibGljIHRlbXBsYXRlT3V0bGV0czogUXVlcnlMaXN0PGFueT47XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgQFZpZXdDaGlsZHJlbihJZ3hDaGlsZEdyaWRSb3dDb21wb25lbnQpXG4gICAgcHVibGljIGhpZXJhcmNoaWNhbFJvd3M6IFF1ZXJ5TGlzdDxJZ3hDaGlsZEdyaWRSb3dDb21wb25lbnQ+O1xuXG4gICAgQFZpZXdDaGlsZCgnaGllcmFyY2hpY2FsX3JlY29yZF90ZW1wbGF0ZScsIHsgcmVhZDogVGVtcGxhdGVSZWYsIHN0YXRpYzogdHJ1ZSB9KVxuICAgIHByb3RlY3RlZCBoaWVyYXJjaGljYWxSZWNvcmRUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcblxuICAgIEBWaWV3Q2hpbGQoJ2NoaWxkX3JlY29yZF90ZW1wbGF0ZScsIHsgcmVhZDogVGVtcGxhdGVSZWYsIHN0YXRpYzogdHJ1ZSB9KVxuICAgIHByb3RlY3RlZCBjaGlsZFRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gICAgLy8gQFZpZXdDaGlsZCgnaGVhZGVySGllcmFyY2h5RXhwYW5kZXInLCB7IHJlYWQ6IEVsZW1lbnRSZWYsIHN0YXRpYzogdHJ1ZSB9KVxuICAgIHByb3RlY3RlZCBnZXQgaGVhZGVySGllcmFyY2h5RXhwYW5kZXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRoZWFkUm93Py5oZWFkZXJIaWVyYXJjaHlFeHBhbmRlcjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHVibGljIGNoaWxkTGF5b3V0S2V5cyA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHB1YmxpYyBoaWdobGlnaHRlZFJvd0lEID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwdWJsaWMgdXBkYXRlT25SZW5kZXIgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwdWJsaWMgcGFyZW50OiBJZ3hIaWVyYXJjaGljYWxHcmlkQ29tcG9uZW50ID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwdWJsaWMgY2hpbGRSb3c6IElneENoaWxkR3JpZFJvd0NvbXBvbmVudDtcblxuICAgIHByaXZhdGUgX2RhdGE7XG4gICAgcHJpdmF0ZSBfZmlsdGVyZWREYXRhID0gbnVsbDtcbiAgICBwcml2YXRlIGhfaWQgPSBgaWd4LWhpZXJhcmNoaWNhbC1ncmlkLSR7TkVYVF9JRCsrfWA7XG4gICAgcHJpdmF0ZSBjaGlsZEdyaWRUZW1wbGF0ZXM6IE1hcDxhbnksIGFueT4gPSBuZXcgTWFwKCk7XG4gICAgcHJpdmF0ZSBzY3JvbGxUb3AgPSAwO1xuICAgIHByaXZhdGUgc2Nyb2xsTGVmdCA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBHZXRzL1NldHMgdGhlIHZhbHVlIG9mIHRoZSBgaWRgIGF0dHJpYnV0ZS5cbiAgICAgKlxuICAgICAqIEByZW1hcmtzXG4gICAgICogSWYgbm90IHByb3ZpZGVkIGl0IHdpbGwgYmUgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1oaWVyYXJjaGljYWwtZ3JpZCBbaWRdPVwiJ2lneC1oZ3JpZC0xJ1wiIFtkYXRhXT1cIkRhdGFcIiBbYXV0b0dlbmVyYXRlXT1cInRydWVcIj48L2lneC1oaWVyYXJjaGljYWwtZ3JpZD5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASG9zdEJpbmRpbmcoJ2F0dHIuaWQnKVxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGdldCBpZCgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5oX2lkO1xuICAgIH1cbiAgICBwdWJsaWMgc2V0IGlkKHZhbHVlOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5oX2lkID0gdmFsdWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQW4gQElucHV0IHByb3BlcnR5IHRoYXQgbGV0cyB5b3UgZmlsbCB0aGUgYElneEhpZXJhcmNoaWNhbEdyaWRDb21wb25lbnRgIHdpdGggYW4gYXJyYXkgb2YgZGF0YS5cbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1oaWVyYXJjaGljYWwtZ3JpZCBbZGF0YV09XCJEYXRhXCIgW2F1dG9HZW5lcmF0ZV09XCJ0cnVlXCI+PC9pZ3gtaGllcmFyY2hpY2FsLWdyaWQ+XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBAbWVtYmVyb2YgSWd4SGllcmFyY2hpY2FsR3JpZENvbXBvbmVudFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHNldCBkYXRhKHZhbHVlOiBhbnlbXSB8IG51bGwpIHtcbiAgICAgICAgdGhpcy5fZGF0YSA9IHZhbHVlIHx8IFtdO1xuICAgICAgICB0aGlzLnN1bW1hcnlTZXJ2aWNlLmNsZWFyU3VtbWFyeUNhY2hlKCk7XG4gICAgICAgIGlmICh0aGlzLnNob3VsZEdlbmVyYXRlKSB7XG4gICAgICAgICAgICB0aGlzLnNldHVwQ29sdW1ucygpO1xuICAgICAgICAgICAgdGhpcy5yZWZsb3coKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgaWYgKHRoaXMucGFyZW50ICYmICh0aGlzLmhlaWdodCA9PT0gbnVsbCB8fCB0aGlzLmhlaWdodC5pbmRleE9mKCclJykgIT09IC0xKSkge1xuICAgICAgICAgICAgLy8gSWYgdGhlIGhlaWdodCB3aWxsIGNoYW5nZSBiYXNlZCBvbiBob3cgbXVjaCBkYXRhIHRoZXJlIGlzLCByZWNhbGN1bGF0ZSBzaXplcyBpbiBpZ3hGb3JPZi5cbiAgICAgICAgICAgIHRoaXMubm90aWZ5Q2hhbmdlcyh0cnVlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgYW4gYXJyYXkgb2YgZGF0YSBzZXQgdG8gdGhlIGBJZ3hIaWVyYXJjaGljYWxHcmlkQ29tcG9uZW50YC5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogbGV0IGZpbHRlcmVkRGF0YSA9IHRoaXMuZ3JpZC5maWx0ZXJlZERhdGE7XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBAbWVtYmVyb2YgSWd4SGllcmFyY2hpY2FsR3JpZENvbXBvbmVudFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgZGF0YSgpOiBhbnlbXSB8IG51bGwge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGF0YTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgZ2V0IHBhZ2luYXRvcigpIHtcbiAgICAgICAgY29uc3QgaWQgPSB0aGlzLmlkO1xuICAgICAgICByZXR1cm4gKCF0aGlzLnBhcmVudElzbGFuZCAmJiB0aGlzLnBhZ2luYXRpb25Db21wb25lbnRzPy5maXJzdCkgfHwgdGhpcy5yb290R3JpZC5wYWdpbmF0b3JMaXN0Py5maW5kKChwZykgPT5cbiAgICAgICAgICAgIHBnLm5hdGl2ZUVsZW1lbnQub2Zmc2V0UGFyZW50Py5pZCA9PT0gaWQpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyBnZXQgZXhjZWxTdHlsZUZpbHRlcmluZ0NvbXBvbmVudCgpIDogSWd4R3JpZEV4Y2VsU3R5bGVGaWx0ZXJpbmdDb21wb25lbnQge1xuICAgICAgICByZXR1cm4gdGhpcy5wYXJlbnRJc2xhbmQgP1xuICAgICAgICAgICAgdGhpcy5wYXJlbnRJc2xhbmQuZXhjZWxTdHlsZUZpbHRlcmluZ0NvbXBvbmVudHMuZmlyc3QgOlxuICAgICAgICAgICAgc3VwZXIuZXhjZWxTdHlsZUZpbHRlcmluZ0NvbXBvbmVudDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIGFuIGFycmF5IG9mIG9iamVjdHMgY29udGFpbmluZyB0aGUgZmlsdGVyZWQgZGF0YSBpbiB0aGUgYElneEhpZXJhcmNoaWNhbEdyaWRDb21wb25lbnRgLlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiB0aGlzLmdyaWQuZmlsdGVyZWREYXRhID0gW3tcbiAgICAgKiAgICAgICBJRDogMSxcbiAgICAgKiAgICAgICBOYW1lOiBcIkFcIlxuICAgICAqIH1dO1xuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQG1lbWJlcm9mIElneEhpZXJhcmNoaWNhbEdyaWRDb21wb25lbnRcbiAgICAgKi9cbiAgICBwdWJsaWMgc2V0IGZpbHRlcmVkRGF0YSh2YWx1ZSkge1xuICAgICAgICB0aGlzLl9maWx0ZXJlZERhdGEgPSB2YWx1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGFuIGFycmF5IG9mIG9iamVjdHMgY29udGFpbmluZyB0aGUgZmlsdGVyZWQgZGF0YSBpbiB0aGUgYElneEhpZXJhcmNoaWNhbEdyaWRDb21wb25lbnRgLlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBsZXQgZmlsdGVyZWREYXRhID0gdGhpcy5ncmlkLmZpbHRlcmVkRGF0YTtcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEBtZW1iZXJvZiBJZ3hIaWVyYXJjaGljYWxHcmlkQ29tcG9uZW50XG4gICAgICovXG4gICAgcHVibGljIGdldCBmaWx0ZXJlZERhdGEoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9maWx0ZXJlZERhdGE7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cy9TZXRzIHRoZSB0b3RhbCBudW1iZXIgb2YgcmVjb3JkcyBpbiB0aGUgZGF0YSBzb3VyY2UuXG4gICAgICpcbiAgICAgKiBAcmVtYXJrc1xuICAgICAqIFRoaXMgcHJvcGVydHkgaXMgcmVxdWlyZWQgZm9yIHJlbW90ZSBncmlkIHZpcnR1YWxpemF0aW9uIHRvIGZ1bmN0aW9uIHdoZW4gaXQgaXMgYm91bmQgdG8gcmVtb3RlIGRhdGEuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogY29uc3QgaXRlbUNvdW50ID0gdGhpcy5ncmlkMS50b3RhbEl0ZW1Db3VudDtcbiAgICAgKiB0aGlzLmdyaWQxLnRvdGFsSXRlbUNvdW50ID0gNTU7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgcHVibGljIHNldCB0b3RhbEl0ZW1Db3VudChjb3VudCkge1xuICAgICAgICB0aGlzLnZlcnRpY2FsU2Nyb2xsQ29udGFpbmVyLnRvdGFsSXRlbUNvdW50ID0gY291bnQ7XG4gICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHRvdGFsSXRlbUNvdW50KCkge1xuICAgICAgICByZXR1cm4gdGhpcy52ZXJ0aWNhbFNjcm9sbENvbnRhaW5lci50b3RhbEl0ZW1Db3VudDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIGlmIGFsbCBpbW1lZGlhdGUgY2hpbGRyZW4gb2YgdGhlIGBJZ3hIaWVyYXJjaGljYWxHcmlkQ29tcG9uZW50YCBzaG91bGQgYmUgZXhwYW5kZWQvY29sbGFwc2VkLlxuICAgICAqIERlZnVsdCB2YWx1ZSBpcyBmYWxzZS5cbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1oaWVyYXJjaGljYWwtZ3JpZCBbaWRdPVwiJ2lneC1ncmlkLTEnXCIgW2RhdGFdPVwiRGF0YVwiIFthdXRvR2VuZXJhdGVdPVwidHJ1ZVwiIFtleHBhbmRDaGlsZHJlbl09XCJ0cnVlXCI+PC9pZ3gtaGllcmFyY2hpY2FsLWdyaWQ+XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBAbWVtYmVyb2YgSWd4SGllcmFyY2hpY2FsR3JpZENvbXBvbmVudFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHNldCBleHBhbmRDaGlsZHJlbih2YWx1ZTogYm9vbGVhbikge1xuICAgICAgICB0aGlzLl9kZWZhdWx0RXhwYW5kU3RhdGUgPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5leHBhbnNpb25TdGF0ZXMgPSBuZXcgTWFwPGFueSwgYm9vbGVhbj4oKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIGlmIGFsbCBpbW1lZGlhdGUgY2hpbGRyZW4gb2YgdGhlIGBJZ3hIaWVyYXJjaGljYWxHcmlkQ29tcG9uZW50YCBwcmV2aW91c2x5IGhhdmUgYmVlbiBzZXQgdG8gYmUgZXhwYW5kZWQvY29sbGFwc2VkLlxuICAgICAqIElmIHByZXZpb3VzbHkgc2V0IGFuZCBzb21lIHJvd3MgaGF2ZSBiZWVuIG1hbnVhbGx5IGV4cGFuZGVkL2NvbGxhcHNlZCBpdCB3aWxsIHN0aWxsIHJldHVybiB0aGUgbGFzdCBzZXQgdmFsdWUuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGNvbnN0IGV4cGFuZGVkID0gdGhpcy5ncmlkLmV4cGFuZENoaWxkcmVuO1xuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQG1lbWJlcm9mIElneEhpZXJhcmNoaWNhbEdyaWRDb21wb25lbnRcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IGV4cGFuZENoaWxkcmVuKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGVmYXVsdEV4cGFuZFN0YXRlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBkZXByZWNhdGVkIGluIHZlcnNpb24gMTIuMS4wLiBVc2UgYGdldENlbGxCeUNvbHVtbmAgb3IgYGdldENlbGxCeUtleWAgaW5zdGVhZFxuICAgICAqXG4gICAgICogUmV0dXJucyBhIGBDZWxsVHlwZWAgb2JqZWN0IHRoYXQgbWF0Y2hlcyB0aGUgY29uZGl0aW9ucy5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGNvbnN0IG15Q2VsbCA9IHRoaXMuZ3JpZDEuZ2V0Q2VsbEJ5Q29sdW1uVmlzaWJsZUluZGV4KDIsXCJVbml0UHJpY2VcIik7XG4gICAgICogYGBgXG4gICAgICogQHBhcmFtIHJvd0luZGV4XG4gICAgICogQHBhcmFtIGluZGV4XG4gICAgICovXG4gICAgcHVibGljIGdldENlbGxCeUNvbHVtblZpc2libGVJbmRleChyb3dJbmRleDogbnVtYmVyLCBpbmRleDogbnVtYmVyKTogQ2VsbFR5cGUge1xuICAgICAgICBjb25zdCByb3cgPSB0aGlzLmdldFJvd0J5SW5kZXgocm93SW5kZXgpO1xuICAgICAgICBjb25zdCBjb2x1bW4gPSB0aGlzLmNvbHVtbnMuZmluZCgoY29sKSA9PiBjb2wudmlzaWJsZUluZGV4ID09PSBpbmRleCk7XG4gICAgICAgIGlmIChyb3cgJiYgcm93IGluc3RhbmNlb2YgSWd4SGllcmFyY2hpY2FsR3JpZFJvdyAmJiBjb2x1bW4pIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgSWd4R3JpZENlbGwodGhpcywgcm93SW5kZXgsIGNvbHVtbi5maWVsZCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSB1bmlxdWUgaWRlbnRpZmllciBvZiB0aGUgcGFyZW50IHJvdy4gSXQgbWF5IGJlIGEgYHN0cmluZ2Agb3IgYG51bWJlcmAgaWYgYHByaW1hcnlLZXlgIG9mIHRoZVxuICAgICAqIHBhcmVudCBncmlkIGlzIHNldCBvciBhbiBvYmplY3QgcmVmZXJlbmNlIG9mIHRoZSBwYXJlbnQgcmVjb3JkIG90aGVyd2lzZS5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogY29uc3QgZm9yZWlnbktleSA9IHRoaXMuZ3JpZC5mb3JlaWduS2V5O1xuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQG1lbWJlcm9mIElneEhpZXJhcmNoaWNhbEdyaWRDb21wb25lbnRcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IGZvcmVpZ25LZXkoKSB7XG4gICAgICAgIGlmICghdGhpcy5wYXJlbnQpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLnBhcmVudC5ncmlkQVBJLmdldFBhcmVudFJvd0lkKHRoaXMpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IGhhc0V4cGFuZGFibGVDaGlsZHJlbigpIHtcbiAgICAgICAgcmV0dXJuICEhdGhpcy5jaGlsZExheW91dEtleXMubGVuZ3RoO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IHJlc29sdmVSb3dFZGl0Q29udGFpbmVyKCkge1xuICAgICAgICBpZiAodGhpcy5wYXJlbnRJc2xhbmQgJiYgdGhpcy5wYXJlbnRJc2xhbmQucm93RWRpdEN1c3RvbSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucGFyZW50SXNsYW5kLnJvd0VkaXRDb250YWluZXI7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMucm93RWRpdENvbnRhaW5lcjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHVibGljIGdldCByZXNvbHZlUm93RWRpdEFjdGlvbnMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnBhcmVudElzbGFuZCA/IHRoaXMucGFyZW50SXNsYW5kLnJvd0VkaXRBY3Rpb25zIDogdGhpcy5yb3dFZGl0QWN0aW9ucztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHVibGljIGdldCByZXNvbHZlUm93RWRpdFRleHQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnBhcmVudElzbGFuZCA/IHRoaXMucGFyZW50SXNsYW5kLnJvd0VkaXRUZXh0IDogdGhpcy5yb3dFZGl0VGV4dDtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHB1YmxpYyBoaWRlQWN0aW9uU3RyaXAoKSB7XG4gICAgICAgIGlmICghdGhpcy5wYXJlbnQpIHtcbiAgICAgICAgICAgIC8vIGhpZGUgY2hpbGQgbGF5b3V0IGFjdGlvbnMgc3RyaXBzIHdoZW5cbiAgICAgICAgICAgIC8vIG1vdmluZyBvdXRzaWRlIHJvb3QgZ3JpZC5cbiAgICAgICAgICAgIHN1cGVyLmhpZGVBY3Rpb25TdHJpcCgpO1xuICAgICAgICAgICAgdGhpcy5hbGxMYXlvdXRMaXN0LmZvckVhY2gocmkgPT4ge1xuICAgICAgICAgICAgICAgIHJpLmFjdGlvblN0cmlwPy5oaWRlKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IHBhcmVudFJvd091dGxldERpcmVjdGl2ZSgpIHtcbiAgICAgICAgLy8gVGFyZ2V0aW5nIHBhcmVudCBvdXRsZXQgaW4gb3JkZXIgdG8gcHJldmVudCBoaWRpbmcgd2hlbiBvdXRsZXRcbiAgICAgICAgLy8gaXMgcHJlc2VudCBhdCBhIGNoaWxkIGdyaWQgYW5kIGlzIGF0dGFjaGVkIHRvIGEgcm93LlxuICAgICAgICByZXR1cm4gdGhpcy5wYXJlbnQgPyB0aGlzLnBhcmVudC5yb3dPdXRsZXREaXJlY3RpdmUgOiB0aGlzLm91dGxldDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHVibGljIG5nT25Jbml0KCkge1xuICAgICAgICAvLyB0aGlzLmV4cGFuc2lvblN0YXRlc0NoYW5nZS5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKCh2YWx1ZTogTWFwPGFueSwgYm9vbGVhbj4pID0+IHtcbiAgICAgICAgLy8gICAgIGNvbnN0IHJlcyA9IEFycmF5LmZyb20odmFsdWUuZW50cmllcygpKS5maWx0ZXIoKHsxOiB2fSkgPT4gdiA9PT0gdHJ1ZSkubWFwKChba10pID0+IGspO1xuICAgICAgICAvLyB9KTtcbiAgICAgICAgdGhpcy5iYXRjaEVkaXRpbmcgPSAhIXRoaXMucm9vdEdyaWQuYmF0Y2hFZGl0aW5nO1xuICAgICAgICBpZiAodGhpcy5yb290R3JpZCAhPT0gdGhpcykge1xuICAgICAgICAgICAgdGhpcy5yb290R3JpZC5iYXRjaEVkaXRpbmdDaGFuZ2UucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgodmFsOiBib29sZWFuKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5iYXRjaEVkaXRpbmcgPSB2YWw7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBzdXBlci5uZ09uSW5pdCgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwdWJsaWMgbmdBZnRlclZpZXdJbml0KCkge1xuICAgICAgICBzdXBlci5uZ0FmdGVyVmlld0luaXQoKTtcbiAgICAgICAgdGhpcy56b25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMudmVydGljYWxTY3JvbGxDb250YWluZXIuZ2V0U2Nyb2xsKCkuYWRkRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgdGhpcy5oZ192ZXJ0aWNhbFNjcm9sbEhhbmRsZXIuYmluZCh0aGlzKSk7XG4gICAgICAgICAgICB0aGlzLmhlYWRlckNvbnRhaW5lci5nZXRTY3JvbGwoKS5hZGRFdmVudExpc3RlbmVyKCdzY3JvbGwnLCB0aGlzLmhnX2hvcml6b250YWxTY3JvbGxIYW5kbGVyLmJpbmQodGhpcykpO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy52ZXJ0aWNhbFNjcm9sbENvbnRhaW5lci5iZWZvcmVWaWV3RGVzdHJveWVkLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKHZpZXcpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHJvd0RhdGEgPSB2aWV3LmNvbnRleHQuJGltcGxpY2l0O1xuICAgICAgICAgICAgaWYgKHRoaXMuaXNDaGlsZEdyaWRSZWNvcmQocm93RGF0YSkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjYWNoZWREYXRhID0gdGhpcy5jaGlsZEdyaWRUZW1wbGF0ZXMuZ2V0KHJvd0RhdGEucm93SUQpO1xuICAgICAgICAgICAgICAgIGlmIChjYWNoZWREYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHRtbHBPdXRsZXQgPSBjYWNoZWREYXRhLm93bmVyO1xuICAgICAgICAgICAgICAgICAgICB0bWxwT3V0bGV0Ll92aWV3Q29udGFpbmVyUmVmLmRldGFjaCgwKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmICh0aGlzLnBhcmVudCkge1xuICAgICAgICAgICAgdGhpcy5fZGlzcGxheURlbnNpdHkgPSB0aGlzLnJvb3RHcmlkLmRpc3BsYXlEZW5zaXR5O1xuICAgICAgICAgICAgdGhpcy5zdW1tYXJ5U2VydmljZS5zdW1tYXJ5SGVpZ2h0ID0gMDtcbiAgICAgICAgICAgIHRoaXMucm9vdEdyaWQub25EZW5zaXR5Q2hhbmdlZC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9kaXNwbGF5RGVuc2l0eSA9IHRoaXMucm9vdEdyaWQuZGlzcGxheURlbnNpdHk7XG4gICAgICAgICAgICAgICAgdGhpcy5zdW1tYXJ5U2VydmljZS5zdW1tYXJ5SGVpZ2h0ID0gMDtcbiAgICAgICAgICAgICAgICB0aGlzLm5vdGlmeUNoYW5nZXModHJ1ZSk7XG4gICAgICAgICAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMuY2hpbGRMYXlvdXRLZXlzID0gdGhpcy5wYXJlbnRJc2xhbmQuY2hpbGRyZW4ubWFwKChpdGVtKSA9PiBpdGVtLmtleSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmFjdGlvblN0cmlwID0gdGhpcy5wYXJlbnRJc2xhbmQgPyB0aGlzLnBhcmVudElzbGFuZC5hY3Rpb25TdHJpcCA6IHRoaXMuYWN0aW9uU3RyaXA7XG5cbiAgICAgICAgdGhpcy5oZWFkU2VsZWN0b3JzVGVtcGxhdGVzID0gdGhpcy5wYXJlbnRJc2xhbmQgP1xuICAgICAgICAgICAgdGhpcy5wYXJlbnRJc2xhbmQuaGVhZFNlbGVjdG9yc1RlbXBsYXRlcyA6XG4gICAgICAgICAgICB0aGlzLmhlYWRTZWxlY3RvcnNUZW1wbGF0ZXM7XG5cbiAgICAgICAgdGhpcy5yb3dTZWxlY3RvcnNUZW1wbGF0ZXMgPSB0aGlzLnBhcmVudElzbGFuZCA/XG4gICAgICAgICAgICB0aGlzLnBhcmVudElzbGFuZC5yb3dTZWxlY3RvcnNUZW1wbGF0ZXMgOlxuICAgICAgICAgICAgdGhpcy5yb3dTZWxlY3RvcnNUZW1wbGF0ZXM7XG4gICAgICAgIHRoaXMuZHJhZ0luZGljYXRvckljb25UZW1wbGF0ZSA9IHRoaXMucGFyZW50SXNsYW5kID9cbiAgICAgICAgICAgIHRoaXMucGFyZW50SXNsYW5kLmRyYWdJbmRpY2F0b3JJY29uVGVtcGxhdGUgOlxuICAgICAgICAgICAgdGhpcy5kcmFnSW5kaWNhdG9ySWNvblRlbXBsYXRlO1xuICAgICAgICB0aGlzLnJvd0V4cGFuZGVkSW5kaWNhdG9yVGVtcGxhdGUgPSB0aGlzLnJvb3RHcmlkLnJvd0V4cGFuZGVkSW5kaWNhdG9yVGVtcGxhdGU7XG4gICAgICAgIHRoaXMucm93Q29sbGFwc2VkSW5kaWNhdG9yVGVtcGxhdGUgPSB0aGlzLnJvb3RHcmlkLnJvd0NvbGxhcHNlZEluZGljYXRvclRlbXBsYXRlO1xuICAgICAgICB0aGlzLmhlYWRlckNvbGxhcHNlSW5kaWNhdG9yVGVtcGxhdGUgPSB0aGlzLnJvb3RHcmlkLmhlYWRlckNvbGxhcHNlSW5kaWNhdG9yVGVtcGxhdGU7XG4gICAgICAgIHRoaXMuaGVhZGVyRXhwYW5kSW5kaWNhdG9yVGVtcGxhdGUgPSB0aGlzLnJvb3RHcmlkLmhlYWRlckV4cGFuZEluZGljYXRvclRlbXBsYXRlO1xuICAgICAgICB0aGlzLmV4Y2VsU3R5bGVIZWFkZXJJY29uVGVtcGxhdGUgPSB0aGlzLnJvb3RHcmlkLmV4Y2VsU3R5bGVIZWFkZXJJY29uVGVtcGxhdGU7XG4gICAgICAgIHRoaXMuc29ydEFzY2VuZGluZ0hlYWRlckljb25UZW1wbGF0ZSA9IHRoaXMucm9vdEdyaWQuc29ydEFzY2VuZGluZ0hlYWRlckljb25UZW1wbGF0ZTtcbiAgICAgICAgdGhpcy5zb3J0RGVzY2VuZGluZ0hlYWRlckljb25UZW1wbGF0ZSA9IHRoaXMucm9vdEdyaWQuc29ydERlc2NlbmRpbmdIZWFkZXJJY29uVGVtcGxhdGU7XG4gICAgICAgIHRoaXMuc29ydEhlYWRlckljb25UZW1wbGF0ZSA9IHRoaXMucm9vdEdyaWQuc29ydEhlYWRlckljb25UZW1wbGF0ZTtcbiAgICAgICAgdGhpcy5oYXNDaGlsZHJlbktleSA9IHRoaXMucGFyZW50SXNsYW5kID9cbiAgICAgICAgICAgIHRoaXMucGFyZW50SXNsYW5kLmhhc0NoaWxkcmVuS2V5IHx8IHRoaXMucm9vdEdyaWQuaGFzQ2hpbGRyZW5LZXkgOlxuICAgICAgICAgICAgdGhpcy5yb290R3JpZC5oYXNDaGlsZHJlbktleTtcbiAgICAgICAgdGhpcy5zaG93RXhwYW5kQWxsID0gdGhpcy5wYXJlbnRJc2xhbmQgP1xuICAgICAgICAgICAgdGhpcy5wYXJlbnRJc2xhbmQuc2hvd0V4cGFuZEFsbCA6IHRoaXMucm9vdEdyaWQuc2hvd0V4cGFuZEFsbDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IG91dGxldERpcmVjdGl2ZSgpOiBJZ3hPdmVybGF5T3V0bGV0RGlyZWN0aXZlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucm9vdEdyaWQub3V0bGV0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwdWJsaWMgbmdBZnRlckNvbnRlbnRJbml0KCkge1xuICAgICAgICB0aGlzLnVwZGF0ZUNvbHVtbkxpc3QoZmFsc2UpO1xuICAgICAgICB0aGlzLmNoaWxkTGF5b3V0S2V5cyA9IHRoaXMucGFyZW50ID9cbiAgICAgICAgICAgIHRoaXMucGFyZW50SXNsYW5kLmNoaWxkcmVuLm1hcCgoaXRlbSkgPT4gaXRlbS5rZXkpIDpcbiAgICAgICAgICAgIHRoaXMuY2hpbGRMYXlvdXRLZXlzID0gdGhpcy5jaGlsZExheW91dExpc3QubWFwKChpdGVtKSA9PiBpdGVtLmtleSk7XG4gICAgICAgIHRoaXMuY2hpbGRMYXlvdXRMaXN0Lm5vdGlmeU9uQ2hhbmdlcygpO1xuICAgICAgICB0aGlzLmNoaWxkTGF5b3V0TGlzdC5jaGFuZ2VzLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKCkgPT5cbiAgICAgICAgICAgIHRoaXMub25Sb3dJc2xhbmRDaGFuZ2UoKVxuICAgICAgICApO1xuICAgICAgICBzdXBlci5uZ0FmdGVyQ29udGVudEluaXQoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBgUm93VHlwZWAgYnkgaW5kZXguXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBjb25zdCBteVJvdyA9IHRoaXMuZ3JpZDEuZ2V0Um93QnlJbmRleCgxKTtcbiAgICAgKiBgYGBcbiAgICAgKiBAcGFyYW0gaW5kZXhcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0Um93QnlJbmRleChpbmRleDogbnVtYmVyKTogUm93VHlwZSB7XG4gICAgICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0gdGhpcy5kYXRhVmlldy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlUm93KGluZGV4KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBgUm93VHlwZWAgYnkga2V5LlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogY29uc3QgbXlSb3cgPSB0aGlzLmdyaWQxLmdldFJvd0J5S2V5KDEpO1xuICAgICAqIGBgYFxuICAgICAqIEBwYXJhbSBrZXlcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0Um93QnlLZXkoa2V5OiBhbnkpOiBSb3dUeXBlIHtcbiAgICAgICAgY29uc3QgZGF0YSA9IHRoaXMuZGF0YVZpZXc7XG4gICAgICAgIGNvbnN0IHJlYyA9IHRoaXMucHJpbWFyeUtleSA/XG4gICAgICAgICAgICBkYXRhLmZpbmQocmVjb3JkID0+IHJlY29yZFt0aGlzLnByaW1hcnlLZXldID09PSBrZXkpIDpcbiAgICAgICAgICAgIGRhdGEuZmluZChyZWNvcmQgPT4gcmVjb3JkID09PSBrZXkpO1xuICAgICAgICBjb25zdCBpbmRleCA9IGRhdGEuaW5kZXhPZihyZWMpO1xuICAgICAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID4gZGF0YS5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbmV3IElneEhpZXJhcmNoaWNhbEdyaWRSb3codGhpcyBhcyBhbnksIGluZGV4LCByZWMpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIGFsbFJvd3MoKTogUm93VHlwZVtdIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGF0YVZpZXcubWFwKChyZWMsIGluZGV4KSA9PiB0aGlzLmNyZWF0ZVJvdyhpbmRleCkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIGNvbGxlY3Rpb24gb2YgYElneEhpZXJhcmNoaWNhbEdyaWRSb3dgcyBmb3IgY3VycmVudCBwYWdlLlxuICAgICAqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgZGF0YVJvd3MoKTogUm93VHlwZVtdIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYWxsUm93cygpLmZpbHRlcihyb3cgPT4gcm93IGluc3RhbmNlb2YgSWd4SGllcmFyY2hpY2FsR3JpZFJvdyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhbiBhcnJheSBvZiB0aGUgc2VsZWN0ZWQgYElneEdyaWRDZWxsYHMuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBjb25zdCBzZWxlY3RlZENlbGxzID0gdGhpcy5ncmlkLnNlbGVjdGVkQ2VsbHM7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgcHVibGljIGdldCBzZWxlY3RlZENlbGxzKCk6IENlbGxUeXBlW10ge1xuICAgICAgICByZXR1cm4gdGhpcy5kYXRhUm93cygpLm1hcCgocm93KSA9PiByb3cuY2VsbHMuZmlsdGVyKChjZWxsKSA9PiBjZWxsLnNlbGVjdGVkKSlcbiAgICAgICAgICAgIC5yZWR1Y2UoKGEsIGIpID0+IGEuY29uY2F0KGIpLCBbXSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIGBDZWxsVHlwZWAgb2JqZWN0IHRoYXQgbWF0Y2hlcyB0aGUgY29uZGl0aW9ucy5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGNvbnN0IG15Q2VsbCA9IHRoaXMuZ3JpZDEuZ2V0Q2VsbEJ5Q29sdW1uKDIsIFwiVW5pdFByaWNlXCIpO1xuICAgICAqIGBgYFxuICAgICAqIEBwYXJhbSByb3dJbmRleFxuICAgICAqIEBwYXJhbSBjb2x1bW5GaWVsZFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRDZWxsQnlDb2x1bW4ocm93SW5kZXg6IG51bWJlciwgY29sdW1uRmllbGQ6IHN0cmluZyk6IENlbGxUeXBlIHtcbiAgICAgICAgY29uc3Qgcm93ID0gdGhpcy5nZXRSb3dCeUluZGV4KHJvd0luZGV4KTtcbiAgICAgICAgY29uc3QgY29sdW1uID0gdGhpcy5jb2x1bW5zLmZpbmQoKGNvbCkgPT4gY29sLmZpZWxkID09PSBjb2x1bW5GaWVsZCk7XG4gICAgICAgIGlmIChyb3cgJiYgcm93IGluc3RhbmNlb2YgSWd4SGllcmFyY2hpY2FsR3JpZFJvdyAmJiBjb2x1bW4pIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgSWd4R3JpZENlbGwodGhpcywgcm93SW5kZXgsIGNvbHVtbkZpZWxkKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgYSBgQ2VsbFR5cGVgIG9iamVjdCB0aGF0IG1hdGNoZXMgdGhlIGNvbmRpdGlvbnMuXG4gICAgICpcbiAgICAgKiBAcmVtYXJrc1xuICAgICAqIFJlcXVpcmVzIHRoYXQgdGhlIHByaW1hcnlLZXkgcHJvcGVydHkgaXMgc2V0LlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGdyaWQuZ2V0Q2VsbEJ5S2V5KDEsICdpbmRleCcpO1xuICAgICAqIGBgYFxuICAgICAqIEBwYXJhbSByb3dTZWxlY3RvciBtYXRjaCBhbnkgcm93SURcbiAgICAgKiBAcGFyYW0gY29sdW1uRmllbGRcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0Q2VsbEJ5S2V5KHJvd1NlbGVjdG9yOiBhbnksIGNvbHVtbkZpZWxkOiBzdHJpbmcpOiBDZWxsVHlwZSB7XG4gICAgICAgIGNvbnN0IHJvdyA9IHRoaXMuZ2V0Um93QnlLZXkocm93U2VsZWN0b3IpO1xuICAgICAgICBjb25zdCBjb2x1bW4gPSB0aGlzLmNvbHVtbnMuZmluZCgoY29sKSA9PiBjb2wuZmllbGQgPT09IGNvbHVtbkZpZWxkKTtcbiAgICAgICAgaWYgKHJvdyAmJiBjb2x1bW4pIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgSWd4R3JpZENlbGwodGhpcywgcm93LmluZGV4LCBjb2x1bW5GaWVsZCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgcGluUm93KHJvd0lEOiBhbnksIGluZGV4PzogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IHJvdyA9IHRoaXMuZ2V0Um93QnlLZXkocm93SUQpO1xuICAgICAgICByZXR1cm4gc3VwZXIucGluUm93KHJvd0lELCBpbmRleCwgcm93KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgdW5waW5Sb3cocm93SUQ6IGFueSk6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCByb3cgPSB0aGlzLmdldFJvd0J5S2V5KHJvd0lEKTtcbiAgICAgICAgcmV0dXJuIHN1cGVyLnVucGluUm93KHJvd0lELCByb3cpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIGRhdGFMb2FkaW5nKGV2ZW50KSB7XG4gICAgICAgIHRoaXMuZGF0YVByZUxvYWQuZW1pdChldmVudCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwdWJsaWMgZmVhdHVyZUNvbHVtbnNXaWR0aCgpIHtcbiAgICAgICAgcmV0dXJuIHN1cGVyLmZlYXR1cmVDb2x1bW5zV2lkdGgodGhpcy5oZWFkZXJIaWVyYXJjaHlFeHBhbmRlcik7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHB1YmxpYyBvblJvd0lzbGFuZENoYW5nZSgpIHtcbiAgICAgICAgaWYgKHRoaXMucGFyZW50KSB7XG4gICAgICAgICAgICB0aGlzLmNoaWxkTGF5b3V0S2V5cyA9IHRoaXMucGFyZW50SXNsYW5kLmNoaWxkcmVuLmZpbHRlcihpdGVtID0+ICEoaXRlbSBhcyBhbnkpLl9kZXN0cm95ZWQpLm1hcCgoaXRlbSkgPT4gaXRlbS5rZXkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5jaGlsZExheW91dEtleXMgPSB0aGlzLmNoaWxkTGF5b3V0TGlzdC5maWx0ZXIoaXRlbSA9PiAhKGl0ZW0gYXMgYW55KS5fZGVzdHJveWVkKS5tYXAoKGl0ZW0pID0+IGl0ZW0ua2V5KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoISh0aGlzLmNkciBhcyBhbnkpLmRlc3Ryb3llZCkge1xuICAgICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIG5nT25EZXN0cm95KCkge1xuICAgICAgICBpZiAoIXRoaXMucGFyZW50KSB7XG4gICAgICAgICAgICB0aGlzLmdyaWRBUEkuZ2V0Q2hpbGRHcmlkcyh0cnVlKS5mb3JFYWNoKChncmlkKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCFncmlkLmNoaWxkUm93LmNkci5kZXN0cm95ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgZ3JpZC5jaGlsZFJvdy5jZHIuZGVzdHJveSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnBhcmVudCAmJiB0aGlzLnNlbGVjdGlvblNlcnZpY2UuYWN0aXZlRWxlbWVudCkge1xuICAgICAgICAgICAgLy8gaW4gY2FzZSBzZWxlY3Rpb24gaXMgaW4gZGVzdHJveWVkIGNoaWxkIGdyaWQsIHNlbGVjdGlvbiBzaG91bGQgYmUgY2xlYXJlZC5cbiAgICAgICAgICAgIHRoaXMuX2NsZWFyU2VsZXRpb25IaWdobGlnaHRzKCk7XG4gICAgICAgIH1cbiAgICAgICAgc3VwZXIubmdPbkRlc3Ryb3koKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHVibGljIGlzUm93SGlnaGxpZ2h0ZWQocm93RGF0YSkge1xuICAgICAgICByZXR1cm4gdGhpcy5oaWdobGlnaHRlZFJvd0lEID09PSByb3dEYXRhLnJvd0lEO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwdWJsaWMgaXNIaWVyYXJjaGljYWxSZWNvcmQocmVjb3JkOiBhbnkpOiBib29sZWFuIHtcbiAgICAgICAgaWYgKHRoaXMuaXNHaG9zdFJlY29yZChyZWNvcmQpKSB7XG4gICAgICAgICAgICByZWNvcmQgPSByZWNvcmQucmVjb3JkUmVmO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmNoaWxkTGF5b3V0TGlzdC5sZW5ndGggIT09IDAgJiYgcmVjb3JkW3RoaXMuY2hpbGRMYXlvdXRMaXN0LmZpcnN0LmtleV07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHB1YmxpYyBpc0NoaWxkR3JpZFJlY29yZChyZWNvcmQ6IGFueSk6IGJvb2xlYW4ge1xuICAgICAgICAvLyBDYW4gYmUgbnVsbCB3aGVuIHRoZXJlIGlzIGRlZmluZWQgbGF5b3V0IGJ1dCBubyBjaGlsZCBkYXRhIHdhcyBmb3VuZFxuICAgICAgICByZXR1cm4gcmVjb3JkPy5jaGlsZEdyaWRzRGF0YSAhPT0gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwdWJsaWMgdHJhY2tDaGFuZ2VzKGluZGV4LCByZWMpIHtcbiAgICAgICAgaWYgKHJlYy5jaGlsZEdyaWRzRGF0YSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAvLyBpZiBpcyBjaGlsZCByZWNcbiAgICAgICAgICAgIHJldHVybiByZWMucm93SUQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlYztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHVibGljIGdldENvbnRleHQocm93RGF0YSwgcm93SW5kZXgsIHBpbm5lZCk6IGFueSB7XG4gICAgICAgIGlmICh0aGlzLmlzQ2hpbGRHcmlkUmVjb3JkKHJvd0RhdGEpKSB7XG4gICAgICAgICAgICBjb25zdCBjYWNoZWREYXRhID0gdGhpcy5jaGlsZEdyaWRUZW1wbGF0ZXMuZ2V0KHJvd0RhdGEucm93SUQpO1xuICAgICAgICAgICAgaWYgKGNhY2hlZERhdGEpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB2aWV3ID0gY2FjaGVkRGF0YS52aWV3O1xuICAgICAgICAgICAgICAgIGNvbnN0IHRtbHBPdXRsZXQgPSBjYWNoZWREYXRhLm93bmVyO1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICRpbXBsaWNpdDogcm93RGF0YSxcbiAgICAgICAgICAgICAgICAgICAgbW92ZVZpZXc6IHZpZXcsXG4gICAgICAgICAgICAgICAgICAgIG93bmVyOiB0bWxwT3V0bGV0LFxuICAgICAgICAgICAgICAgICAgICBpbmRleDogdGhpcy5kYXRhVmlldy5pbmRleE9mKHJvd0RhdGEpXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gY2hpbGQgcm93cyBjb250YWluIHVuaXF1ZSBncmlkcywgaGVuY2Ugc2hvdWxkIGhhdmUgdW5pcXVlIHRlbXBsYXRlc1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICRpbXBsaWNpdDogcm93RGF0YSxcbiAgICAgICAgICAgICAgICAgICAgdGVtcGxhdGVJRDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ2NoaWxkUm93JyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkOiByb3dEYXRhLnJvd0lEXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIGluZGV4OiB0aGlzLmRhdGFWaWV3LmluZGV4T2Yocm93RGF0YSlcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAkaW1wbGljaXQ6IHRoaXMuaXNHaG9zdFJlY29yZChyb3dEYXRhKSA/IHJvd0RhdGEucmVjb3JkUmVmIDogcm93RGF0YSxcbiAgICAgICAgICAgICAgICB0ZW1wbGF0ZUlEOiB7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6ICdkYXRhUm93JyxcbiAgICAgICAgICAgICAgICAgICAgaWQ6IG51bGxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGluZGV4OiB0aGlzLmdldERhdGFWaWV3SW5kZXgocm93SW5kZXgsIHBpbm5lZCksXG4gICAgICAgICAgICAgICAgZGlzYWJsZWQ6IHRoaXMuaXNHaG9zdFJlY29yZChyb3dEYXRhKVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IHJvb3RHcmlkKCk6IEdyaWRUeXBlIHtcbiAgICAgICAgbGV0IGN1cnJHcmlkID0gdGhpcyBhcyBJZ3hIaWVyYXJjaGljYWxHcmlkQ29tcG9uZW50O1xuICAgICAgICB3aGlsZSAoY3VyckdyaWQucGFyZW50KSB7XG4gICAgICAgICAgICBjdXJyR3JpZCA9IGN1cnJHcmlkLnBhcmVudDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY3VyckdyaWQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgaWNvblRlbXBsYXRlKCkge1xuICAgICAgICBjb25zdCBleHBhbmRlZCA9IHRoaXMuaGFzRXhwYW5kZWRSZWNvcmRzKCkgJiYgdGhpcy5oYXNFeHBhbmRhYmxlQ2hpbGRyZW47XG4gICAgICAgIGlmICghZXhwYW5kZWQgJiYgdGhpcy5zaG93RXhwYW5kQWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5oZWFkZXJDb2xsYXBzZUluZGljYXRvclRlbXBsYXRlIHx8IHRoaXMuZGVmYXVsdENvbGxhcHNlZFRlbXBsYXRlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaGVhZGVyRXhwYW5kSW5kaWNhdG9yVGVtcGxhdGUgfHwgdGhpcy5kZWZhdWx0RXhwYW5kZWRUZW1wbGF0ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0RHJhZ0dob3N0Q3VzdG9tVGVtcGxhdGUoKTogVGVtcGxhdGVSZWY8YW55PiB7XG4gICAgICAgIGlmICh0aGlzLnBhcmVudElzbGFuZCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucGFyZW50SXNsYW5kLmdldERyYWdHaG9zdEN1c3RvbVRlbXBsYXRlKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHN1cGVyLmdldERyYWdHaG9zdEN1c3RvbVRlbXBsYXRlKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEdldHMgdGhlIHZpc2libGUgY29udGVudCBoZWlnaHQgdGhhdCBpbmNsdWRlcyBoZWFkZXIgKyB0Ym9keSArIGZvb3Rlci5cbiAgICAgKiBGb3IgaGllcmFyY2hpY2FsIGNoaWxkIGdyaWQgaXQgbWF5IGJlIHNjcm9sbGVkIGFuZCBub3QgZnVsbHkgdmlzaWJsZS5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0VmlzaWJsZUNvbnRlbnRIZWlnaHQoKSB7XG4gICAgICAgIGxldCBoZWlnaHQgPSBzdXBlci5nZXRWaXNpYmxlQ29udGVudEhlaWdodCgpO1xuICAgICAgICBpZiAodGhpcy5wYXJlbnQpIHtcbiAgICAgICAgICAgIGNvbnN0IHJvb3RIZWlnaHQgPSB0aGlzLnJvb3RHcmlkLmdldFZpc2libGVDb250ZW50SGVpZ2h0KCk7XG4gICAgICAgICAgICBjb25zdCB0b3BEaWZmID0gdGhpcy5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcCAtIHRoaXMucm9vdEdyaWQubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3A7XG4gICAgICAgICAgICBoZWlnaHQgPSByb290SGVpZ2h0IC0gdG9wRGlmZiA+IGhlaWdodCA/IGhlaWdodCA6IHJvb3RIZWlnaHQgLSB0b3BEaWZmO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBoZWlnaHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHB1YmxpYyB0b2dnbGVBbGwoKSB7XG4gICAgICAgIGNvbnN0IGV4cGFuZGVkID0gdGhpcy5oYXNFeHBhbmRlZFJlY29yZHMoKSAmJiB0aGlzLmhhc0V4cGFuZGFibGVDaGlsZHJlbjtcbiAgICAgICAgaWYgKCFleHBhbmRlZCAmJiB0aGlzLnNob3dFeHBhbmRBbGwpIHtcbiAgICAgICAgICAgIHRoaXMuZXhwYW5kQWxsKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmNvbGxhcHNlQWxsKCk7XG4gICAgICAgIH1cbiAgICB9XG5cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgaGFzRXhwYW5kZWRSZWNvcmRzKCkge1xuICAgICAgICBpZiAodGhpcy5leHBhbmRDaGlsZHJlbikge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGhhc0V4cGFuZGVkRW50cnkgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5leHBhbnNpb25TdGF0ZXMuZm9yRWFjaCh2YWx1ZSA9PiB7XG4gICAgICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICAgICAgICBoYXNFeHBhbmRlZEVudHJ5ID0gdmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gaGFzRXhwYW5kZWRFbnRyeTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0RGVmYXVsdEV4cGFuZFN0YXRlKHJlY29yZDogYW55KSB7XG4gICAgICAgIGlmICh0aGlzLmhhc0NoaWxkcmVuS2V5ICYmICFyZWNvcmRbdGhpcy5oYXNDaGlsZHJlbktleV0pIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5leHBhbmRDaGlsZHJlbjtcblxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwdWJsaWMgaXNFeHBhbmRlZChyZWNvcmQ6IGFueSk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5ncmlkQVBJLmdldF9yb3dfZXhwYW5zaW9uX3N0YXRlKHJlY29yZCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHB1YmxpYyB2aWV3Q3JlYXRlZEhhbmRsZXIoYXJncykge1xuICAgICAgICBpZiAodGhpcy5pc0NoaWxkR3JpZFJlY29yZChhcmdzLmNvbnRleHQuJGltcGxpY2l0KSkge1xuICAgICAgICAgICAgY29uc3Qga2V5ID0gYXJncy5jb250ZXh0LiRpbXBsaWNpdC5yb3dJRDtcbiAgICAgICAgICAgIHRoaXMuY2hpbGRHcmlkVGVtcGxhdGVzLnNldChrZXksIGFyZ3MpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHB1YmxpYyB2aWV3TW92ZWRIYW5kbGVyKGFyZ3MpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNDaGlsZEdyaWRSZWNvcmQoYXJncy5jb250ZXh0LiRpbXBsaWNpdCkpIHtcbiAgICAgICAgICAgIC8vIHZpZXcgd2FzIG1vdmVkLCB1cGRhdGUgb3duZXIgaW4gY2FjaGVcbiAgICAgICAgICAgIGNvbnN0IGtleSA9IGFyZ3MuY29udGV4dC4kaW1wbGljaXQucm93SUQ7XG4gICAgICAgICAgICBjb25zdCBjYWNoZWREYXRhID0gdGhpcy5jaGlsZEdyaWRUZW1wbGF0ZXMuZ2V0KGtleSk7XG4gICAgICAgICAgICBjYWNoZWREYXRhLm93bmVyID0gYXJncy5vd25lcjtcblxuICAgICAgICAgICAgdGhpcy5jaGlsZExheW91dExpc3QuZm9yRWFjaCgobGF5b3V0KSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVsYXRlZEdyaWQgPSB0aGlzLmdyaWRBUEkuZ2V0Q2hpbGRHcmlkQnlJRChsYXlvdXQua2V5LCBhcmdzLmNvbnRleHQuJGltcGxpY2l0LnJvd0lEKTtcbiAgICAgICAgICAgICAgICBpZiAocmVsYXRlZEdyaWQgJiYgcmVsYXRlZEdyaWQudXBkYXRlT25SZW5kZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gRGV0ZWN0IGNoYW5nZXMgaWYgYGV4cGFuZENoaWxkcmVuYCBoYXMgY2hhbmdlZCB3aGVuIHRoZSBncmlkIHdhc24ndCB2aXNpYmxlLiBUaGlzIGlzIGZvciBwZXJmb3JtYW5jZSByZWFzb25zLlxuICAgICAgICAgICAgICAgICAgICByZWxhdGVkR3JpZC5ub3RpZnlDaGFuZ2VzKHRydWUpO1xuICAgICAgICAgICAgICAgICAgICByZWxhdGVkR3JpZC51cGRhdGVPblJlbmRlciA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIG9uQ29udGFpbmVyU2Nyb2xsKCkge1xuICAgICAgICB0aGlzLmhpZGVPdmVybGF5cygpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwdWJsaWMgY3JlYXRlUm93KGluZGV4OiBudW1iZXIsIGRhdGE/OiBhbnkpOiBSb3dUeXBlIHtcbiAgICAgICAgbGV0IHJvdzogUm93VHlwZTtcbiAgICAgICAgY29uc3QgZGF0YUluZGV4ID0gdGhpcy5fZ2V0RGF0YVZpZXdJbmRleChpbmRleCk7XG4gICAgICAgIGNvbnN0IHJlYzogYW55ID0gZGF0YSA/PyB0aGlzLmRhdGFWaWV3W2RhdGFJbmRleF07XG5cbiAgICAgICAgaWYgKCFyb3cgJiYgcmVjICYmICFyZWMuY2hpbGRHcmlkc0RhdGEpIHtcbiAgICAgICAgICAgIHJvdyA9IG5ldyBJZ3hIaWVyYXJjaGljYWxHcmlkUm93KHRoaXMgYXMgYW55LCBpbmRleCwgcmVjKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByb3c7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgcHVibGljIGdldENoaWxkR3JpZHMoaW5EZXBoPzogYm9vbGVhbikge1xuICAgICAgICByZXR1cm4gdGhpcy5ncmlkQVBJLmdldENoaWxkR3JpZHMoaW5EZXBoKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgZ2VuZXJhdGVEYXRhRmllbGRzKGRhdGE6IGFueVtdKTogc3RyaW5nW10ge1xuICAgICAgICByZXR1cm4gc3VwZXIuZ2VuZXJhdGVEYXRhRmllbGRzKGRhdGEpLmZpbHRlcigoZmllbGQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGxheW91dHNMaXN0ID0gdGhpcy5wYXJlbnRJc2xhbmQgPyB0aGlzLnBhcmVudElzbGFuZC5jaGlsZHJlbiA6IHRoaXMuY2hpbGRMYXlvdXRMaXN0O1xuICAgICAgICAgICAgY29uc3Qga2V5cyA9IGxheW91dHNMaXN0Lm1hcCgoaXRlbSkgPT4gaXRlbS5rZXkpO1xuICAgICAgICAgICAgcmV0dXJuIGtleXMuaW5kZXhPZihmaWVsZCkgPT09IC0xO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgcmVzaXplTm90aWZ5SGFuZGxlcigpIHtcbiAgICAgICAgLy8gZG8gbm90IHRyaWdnZXIgcmVmbG93IGlmIGVsZW1lbnQgaXMgZGV0YWNoZWQgb3IgaWYgaXQgaXMgY2hpbGQgZ3JpZC5cbiAgICAgICAgaWYgKHRoaXMuZG9jdW1lbnQuY29udGFpbnModGhpcy5uYXRpdmVFbGVtZW50KSAmJiAhdGhpcy5wYXJlbnQpIHtcbiAgICAgICAgICAgIHRoaXMubm90aWZ5Q2hhbmdlcyh0cnVlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgaW5pdENvbHVtbnMoY29sbGVjdGlvbjogSWd4Q29sdW1uQ29tcG9uZW50W10sIGNiOiAoYXJnczogYW55KSA9PiB2b2lkID0gbnVsbCkge1xuICAgICAgICBpZiAodGhpcy5oYXNDb2x1bW5MYXlvdXRzKSB7XG4gICAgICAgICAgICAvLyBpbnZhbGlkIGNvbmZpZ3VyYXRpb24gLSBoaWVyYXJjaGljYWwgZ3JpZCBzaG91bGQgbm90IGFsbG93IGNvbHVtbiBsYXlvdXRzXG4gICAgICAgICAgICAvLyByZW1vdmUgY29sdW1uIGxheW91dHNcbiAgICAgICAgICAgIGNvbnN0IG5vbkNvbHVtbkxheW91dENvbHVtbnMgPSB0aGlzLmNvbHVtbnMuZmlsdGVyKChjb2wpID0+ICFjb2wuY29sdW1uTGF5b3V0ICYmICFjb2wuY29sdW1uTGF5b3V0Q2hpbGQpO1xuICAgICAgICAgICAgdGhpcy51cGRhdGVDb2x1bW5zKG5vbkNvbHVtbkxheW91dENvbHVtbnMpO1xuICAgICAgICB9XG4gICAgICAgIHN1cGVyLmluaXRDb2x1bW5zKGNvbGxlY3Rpb24sIGNiKTtcbiAgICB9XG5cblxuICAgIHByb3RlY3RlZCBzZXR1cENvbHVtbnMoKSB7XG4gICAgICAgIGlmICh0aGlzLnBhcmVudElzbGFuZCAmJiB0aGlzLnBhcmVudElzbGFuZC5jaGlsZENvbHVtbnMubGVuZ3RoID4gMCAmJiAhdGhpcy5hdXRvR2VuZXJhdGUpIHtcbiAgICAgICAgICAgIHRoaXMuY3JlYXRlQ29sdW1uc0xpc3QodGhpcy5wYXJlbnRJc2xhbmQuY2hpbGRDb2x1bW5zLnRvQXJyYXkoKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzdXBlci5zZXR1cENvbHVtbnMoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByb3RlY3RlZCBnZXRDb2x1bW5MaXN0KCkge1xuICAgICAgICBjb25zdCBjaGlsZExheW91dHMgPSB0aGlzLnBhcmVudCA/IHRoaXMuY2hpbGRMYXlvdXRMaXN0IDogdGhpcy5hbGxMYXlvdXRMaXN0O1xuICAgICAgICBjb25zdCBuZXN0ZWRDb2x1bW5zID0gY2hpbGRMYXlvdXRzLm1hcCgobGF5b3V0KSA9PiBsYXlvdXQuY29sdW1uTGlzdC50b0FycmF5KCkpO1xuICAgICAgICBjb25zdCBjb2xzQXJyYXkgPSBbXS5jb25jYXQuYXBwbHkoW10sIG5lc3RlZENvbHVtbnMpO1xuICAgICAgICBpZiAoY29sc0FycmF5Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGNvbnN0IHRvcENvbHMgPSB0aGlzLmNvbHVtbkxpc3QuZmlsdGVyKChpdGVtKSA9PiBjb2xzQXJyYXkuaW5kZXhPZihpdGVtKSA9PT0gLTEpO1xuICAgICAgICAgICAgcmV0dXJuIHRvcENvbHM7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgIHJldHVybiB0aGlzLmNvbHVtbkxpc3QudG9BcnJheSgpXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgb25Db2x1bW5zQ2hhbmdlZChjaGFuZ2U6IFF1ZXJ5TGlzdDxJZ3hDb2x1bW5Db21wb25lbnQ+KSB7XG4gICAgICAgIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVDb2x1bW5MaXN0KCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBfc2hvdWxkQXV0b1NpemUocmVuZGVyZWRIZWlnaHQpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNQZXJjZW50SGVpZ2h0ICYmIHRoaXMucGFyZW50KSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc3VwZXIuX3Nob3VsZEF1dG9TaXplKHJlbmRlcmVkSGVpZ2h0KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHVwZGF0ZUNvbHVtbkxpc3QocmVjYWxjQ29sU2l6ZXMgPSB0cnVlKSB7XG4gICAgICAgIGNvbnN0IGNoaWxkTGF5b3V0cyA9IHRoaXMucGFyZW50ID8gdGhpcy5jaGlsZExheW91dExpc3QgOiB0aGlzLmFsbExheW91dExpc3Q7XG4gICAgICAgIGNvbnN0IG5lc3RlZENvbHVtbnMgPSBjaGlsZExheW91dHMubWFwKChsYXlvdXQpID0+IGxheW91dC5jb2x1bW5MaXN0LnRvQXJyYXkoKSk7XG4gICAgICAgIGNvbnN0IGNvbHNBcnJheSA9IFtdLmNvbmNhdC5hcHBseShbXSwgbmVzdGVkQ29sdW1ucyk7XG4gICAgICAgIGNvbnN0IGNvbExlbmd0aCA9IHRoaXMuY29sdW1uTGlzdC5sZW5ndGg7XG4gICAgICAgIGNvbnN0IHRvcENvbHMgPSB0aGlzLmNvbHVtbkxpc3QuZmlsdGVyKChpdGVtKSA9PiBjb2xzQXJyYXkuaW5kZXhPZihpdGVtKSA9PT0gLTEpO1xuICAgICAgICBpZiAodG9wQ29scy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUNvbHVtbnModG9wQ29scyk7XG4gICAgICAgICAgICBpZiAocmVjYWxjQ29sU2l6ZXMgJiYgdGhpcy5jb2x1bW5zLmxlbmd0aCAhPT0gY29sTGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jYWxjdWxhdGVHcmlkU2l6ZXMoZmFsc2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfY2xlYXJTZWxldGlvbkhpZ2hsaWdodHMoKSB7XG4gICAgICAgIFt0aGlzLnJvb3RHcmlkLCAuLi50aGlzLnJvb3RHcmlkLmdldENoaWxkR3JpZHModHJ1ZSldLmZvckVhY2goZ3JpZCA9PiB7XG4gICAgICAgICAgICBncmlkLnNlbGVjdGlvblNlcnZpY2UuY2xlYXIoKTtcbiAgICAgICAgICAgIGdyaWQuc2VsZWN0aW9uU2VydmljZS5hY3RpdmVFbGVtZW50ID0gbnVsbDtcbiAgICAgICAgICAgIGdyaWQubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKCdpZ3gtZ3JpZF9fdHItLWhpZ2hsaWdodGVkJyk7XG4gICAgICAgICAgICBncmlkLmhpZ2hsaWdodGVkUm93SUQgPSBudWxsO1xuICAgICAgICAgICAgZ3JpZC5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuXG4gICAgcHJpdmF0ZSBoZ192ZXJ0aWNhbFNjcm9sbEhhbmRsZXIoZXZlbnQpIHtcbiAgICAgICAgdGhpcy5zY3JvbGxUb3AgPSB0aGlzLnZlcnRpY2FsU2Nyb2xsQ29udGFpbmVyLnNjcm9sbFBvc2l0aW9uO1xuICAgIH1cbiAgICBwcml2YXRlIGhnX2hvcml6b250YWxTY3JvbGxIYW5kbGVyKGV2ZW50KSB7XG4gICAgICAgIHRoaXMuc2Nyb2xsTGVmdCA9IHRoaXMuaGVhZGVyQ29udGFpbmVyLnNjcm9sbFBvc2l0aW9uO1xuICAgIH1cbn1cblxuIiwiPGRpdiBjbGFzcz1cImlneC1ncmlkX19oaWVyYXJjaGljYWwtaW5kZW50XCIgW25nQ2xhc3NdPVwieydpZ3gtZ3JpZF9faGllcmFyY2hpY2FsLWluZGVudC0tc2Nyb2xsJzogcGFyZW50SGFzU2Nyb2xsfVwiPlxuICAgIDxpZ3gtaGllcmFyY2hpY2FsLWdyaWQgI2hncmlkIFtkYXRhXT0nZGF0YS5jaGlsZEdyaWRzRGF0YVtsYXlvdXQua2V5XSc+PC9pZ3gtaGllcmFyY2hpY2FsLWdyaWQ+XG48L2Rpdj5cbiIsIjxuZy1jb250ZW50IHNlbGVjdD1cImlneC1ncmlkLXRvb2xiYXJcIj48L25nLWNvbnRlbnQ+XG48bmctY29udGFpbmVyICN0b29sYmFyT3V0bGV0PjwvbmctY29udGFpbmVyPlxuXG48aWd4LWdyaWQtaGVhZGVyLXJvdyBjbGFzcz1cImlneC1ncmlkLXRoZWFkXCIgdGFiaW5kZXg9XCIwXCJcbiAgICBbZ3JpZF09XCJ0aGlzXCJcbiAgICBbaGFzTVJMXT1cImhhc0NvbHVtbkxheW91dHNcIlxuICAgIFthY3RpdmVEZXNjZW5kYW50XT1cImFjdGl2ZURlc2NlbmRhbnRcIlxuICAgIFt3aWR0aF09XCJjYWxjV2lkdGhcIlxuICAgIFtwaW5uZWRDb2x1bW5Db2xsZWN0aW9uXT1cInBpbm5lZENvbHVtbnNcIlxuICAgIFt1bnBpbm5lZENvbHVtbkNvbGxlY3Rpb25dPVwidW5waW5uZWRDb2x1bW5zXCJcbiAgICAoa2V5ZG93bi5tZXRhLmMpPVwiY29weUhhbmRsZXIoJGV2ZW50KVwiXG4gICAgKGtleWRvd24uY29udHJvbC5jKT1cImNvcHlIYW5kbGVyKCRldmVudClcIlxuICAgIChjb3B5KT1cImNvcHlIYW5kbGVyKCRldmVudClcIlxuICAgIChrZXlkb3duKT1cIm5hdmlnYXRpb24uaGVhZGVyTmF2aWdhdGlvbigkZXZlbnQpXCJcbiAgICAoZm9jdXMpPVwibmF2aWdhdGlvbi5mb2N1c0ZpcnN0Q2VsbCgpXCJcbj5cbjwvaWd4LWdyaWQtaGVhZGVyLXJvdz5cblxuPGRpdiBpZ3hHcmlkQm9keSAoa2V5ZG93bi5jb250cm9sLmMpPVwiY29weUhhbmRsZXIoJGV2ZW50KVwiIChjb3B5KT1cImNvcHlIYW5kbGVyKCRldmVudClcIiBjbGFzcz1cImlneC1ncmlkX190Ym9keVwiIHJvbGU9XCJyb3dncm91cFwiPlxuICAgIDxkaXYgY2xhc3M9XCJpZ3gtZ3JpZF9fdGJvZHktY29udGVudFwiICB0YWJpbmRleD1cIjBcIiAoZm9jdXMpPVwibmF2aWdhdGlvbi5mb2N1c1Rib2R5KCRldmVudClcIlxuICAgICAoa2V5ZG93bik9XCJuYXZpZ2F0aW9uLmhhbmRsZU5hdmlnYXRpb24oJGV2ZW50KVwiIChkcmFnU3RvcCk9XCJzZWxlY3Rpb25TZXJ2aWNlLmRyYWdNb2RlID0gJGV2ZW50XCJcbiAgICAgICAgKGRyYWdTY3JvbGwpPVwiZHJhZ1Njcm9sbCgkZXZlbnQpXCIgW2lneEdyaWREcmFnU2VsZWN0XT1cInNlbGVjdGlvblNlcnZpY2UuZHJhZ01vZGVcIiBbYXR0ci5hcmlhLWFjdGl2ZWRlc2NlbmRhbnRdPVwiYWN0aXZlRGVzY2VuZGFudFwiIFthdHRyLnJvbGVdPVwiZGF0YVZpZXcubGVuZ3RoID8gbnVsbCA6ICdyb3cnXCJcbiAgICAgICAgW3N0eWxlLmhlaWdodC5weF09J3RvdGFsSGVpZ2h0JyBbc3R5bGUud2lkdGgucHhdPSdjYWxjV2lkdGgnICN0Ym9keSAoc2Nyb2xsKT0ncHJldmVudENvbnRhaW5lclNjcm9sbCgkZXZlbnQpJz5cbiAgICAgICAgPHNwYW4gKm5nSWY9XCJtb3ZpbmcgJiYgY29sdW1uSW5EcmFnICYmIHBpbm5lZENvbHVtbnMubGVuZ3RoIDw9IDBcIlxuICAgICAgICAgICAgW2lneENvbHVtbk1vdmluZ0Ryb3BdPVwiaGVhZGVyQ29udGFpbmVyXCIgW2F0dHIuZHJvcHBhYmxlXT1cInRydWVcIiBpZD1cImxlZnRcIlxuICAgICAgICAgICAgY2xhc3M9XCJpZ3gtZ3JpZF9fc2Nyb2xsLW9uLWRyYWctbGVmdFwiPjwvc3Bhbj5cbiAgICAgICAgPHNwYW4gKm5nSWY9XCJtb3ZpbmcgJiYgY29sdW1uSW5EcmFnICYmIHBpbm5lZENvbHVtbnMubGVuZ3RoID4gMFwiXG4gICAgICAgICAgICBbaWd4Q29sdW1uTW92aW5nRHJvcF09XCJoZWFkZXJDb250YWluZXJcIiBbYXR0ci5kcm9wcGFibGVdPVwidHJ1ZVwiIGlkPVwibGVmdFwiXG4gICAgICAgICAgICBjbGFzcz1cImlneC1ncmlkX19zY3JvbGwtb24tZHJhZy1waW5uZWRcIiBbc3R5bGUubGVmdC5weF09XCJwaW5uZWRXaWR0aFwiPjwvc3Bhbj5cbiAgICAgICAgPG5nLXRlbXBsYXRlICNwaW5uZWRSZWNvcmRzVGVtcGxhdGU+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZGF0YVxuICAgICAgICAgICAgfCBncmlkVHJhbnNhY3Rpb246aWQ6cGlwZVRyaWdnZXJcbiAgICAgICAgICAgIHwgdmlzaWJsZUNvbHVtbnM6aGFzVmlzaWJsZUNvbHVtbnNcbiAgICAgICAgICAgIHwgZ3JpZEFkZFJvdzp0cnVlOnBpcGVUcmlnZ2VyXG4gICAgICAgICAgICB8IGdyaWRSb3dQaW5uaW5nOmlkOnRydWU6cGlwZVRyaWdnZXJcbiAgICAgICAgICAgIHwgZ3JpZEZpbHRlcmluZzpmaWx0ZXJpbmdFeHByZXNzaW9uc1RyZWU6ZmlsdGVyU3RyYXRlZ3k6YWR2YW5jZWRGaWx0ZXJpbmdFeHByZXNzaW9uc1RyZWU6aWQ6cGlwZVRyaWdnZXI6ZmlsdGVyaW5nUGlwZVRyaWdnZXI6dHJ1ZVxuICAgICAgICAgICAgfCBncmlkU29ydDpzb3J0aW5nRXhwcmVzc2lvbnM6W106c29ydFN0cmF0ZWd5OmlkOnBpcGVUcmlnZ2VyOnRydWUgYXMgcGlubmVkRGF0YVwiPlxuICAgICAgICAgICAgICAgIDxkaXYgI3BpbkNvbnRhaW5lciAqbmdJZj0ncGlubmVkRGF0YS5sZW5ndGggPiAwJyBjbGFzcz0naWd4LWdyaWRfX3RyLS1waW5uZWQnXG4gICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ2lneC1ncmlkX190ci0tcGlubmVkLWJvdHRvbSc6ICAhaXNSb3dQaW5uaW5nVG9Ub3AsICdpZ3gtZ3JpZF9fdHItLXBpbm5lZC10b3AnOiBpc1Jvd1Bpbm5pbmdUb1RvcCB9XCJcbiAgICAgICAgICAgICAgICAgICAgW3N0eWxlLndpZHRoLnB4XT0nY2FsY1dpZHRoJz5cbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgcm93RGF0YSBvZiBwaW5uZWREYXRhOyBsZXQgcm93SW5kZXggPSBpbmRleFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInBpbm5lZF9oaWVyYXJjaGljYWxfcmVjb3JkX3RlbXBsYXRlOyBjb250ZXh0OiBnZXRDb250ZXh0KHJvd0RhdGEsIHJvd0luZGV4LCB0cnVlKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJoYXNQaW5uZWRSZWNvcmRzICYmIGlzUm93UGlubmluZ1RvVG9wID8gcGlubmVkUmVjb3Jkc1RlbXBsYXRlIDogbnVsbFwiPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG5nLXRlbXBsYXRlIGlneEdyaWRGb3IgbGV0LXJvd0RhdGEgbGV0LXJvd0luZGV4PVwiaW5kZXhcIiBbaWd4R3JpZEZvck9mXT1cImRhdGFcbiAgICAgICAgfCBncmlkVHJhbnNhY3Rpb246aWQ6cGlwZVRyaWdnZXJcbiAgICAgICAgfCB2aXNpYmxlQ29sdW1uczpoYXNWaXNpYmxlQ29sdW1uc1xuICAgICAgICB8IGdyaWRGaWx0ZXJpbmc6ZmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlOmZpbHRlclN0cmF0ZWd5OmFkdmFuY2VkRmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlOmlkOnBpcGVUcmlnZ2VyOmZpbHRlcmluZ1BpcGVUcmlnZ2VyXG4gICAgICAgIHwgZ3JpZFNvcnQ6c29ydGluZ0V4cHJlc3Npb25zOltdOnNvcnRTdHJhdGVneTppZDpwaXBlVHJpZ2dlclxuICAgICAgICB8IGdyaWRIaWVyYXJjaGljYWxQYWdpbmc6cGFnaW5hdG9yPy5wYWdlOnBhZ2luYXRvcj8ucGVyUGFnZTppZDpwaXBlVHJpZ2dlclxuICAgICAgICB8IGdyaWRIaWVyYXJjaGljYWw6ZXhwYW5zaW9uU3RhdGVzOmlkOnByaW1hcnlLZXk6Y2hpbGRMYXlvdXRLZXlzOnBpcGVUcmlnZ2VyXG4gICAgICAgIHwgZ3JpZEFkZFJvdzpmYWxzZTpwaXBlVHJpZ2dlclxuICAgICAgICB8IGdyaWRSb3dQaW5uaW5nOmlkOmZhbHNlOnBpcGVUcmlnZ2VyXCJcbiAgICAgICAgICAgIFtpZ3hGb3JTY3JvbGxPcmllbnRhdGlvbl09XCIndmVydGljYWwnXCIgW2lneEZvclNjcm9sbENvbnRhaW5lcl09J3ZlcnRpY2FsU2Nyb2xsJ1xuICAgICAgICAgICAgW2lneEZvckNvbnRhaW5lclNpemVdPSdjYWxjSGVpZ2h0JyBbaWd4Rm9ySXRlbVNpemVdPVwicmVuZGVyZWRSb3dIZWlnaHRcIiBbaWd4Rm9yVHJhY2tCeV09J3RyYWNrQ2hhbmdlcydcbiAgICAgICAgICAgICN2ZXJ0aWNhbFNjcm9sbENvbnRhaW5lciAoY2h1bmtQcmVsb2FkKT1cImRhdGFMb2FkaW5nKCRldmVudClcIiAoZGF0YUNoYW5naW5nKT1cImRhdGFSZWJpbmRpbmcoJGV2ZW50KVwiIChkYXRhQ2hhbmdlZCk9XCJkYXRhUmVib3VuZCgkZXZlbnQpXCI+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgICAgICAgICBbaWd4VGVtcGxhdGVPdXRsZXRdPScoaXNIaWVyYXJjaGljYWxSZWNvcmQocm93RGF0YSkgPyBoaWVyYXJjaGljYWxfcmVjb3JkX3RlbXBsYXRlIDogKGlzQ2hpbGRHcmlkUmVjb3JkKHJvd0RhdGEpID8gY2hpbGRfcmVjb3JkX3RlbXBsYXRlIDogaGllcmFyY2hpY2FsX3JlY29yZF90ZW1wbGF0ZSkpJ1xuICAgICAgICAgICAgICAgIFtpZ3hUZW1wbGF0ZU91dGxldENvbnRleHRdPSdnZXRDb250ZXh0KHJvd0RhdGEsIHJvd0luZGV4LCBmYWxzZSknICh2aWV3Q3JlYXRlZCk9J3ZpZXdDcmVhdGVkSGFuZGxlcigkZXZlbnQpJ1xuICAgICAgICAgICAgICAgICh2aWV3TW92ZWQpPSd2aWV3TW92ZWRIYW5kbGVyKCRldmVudCknIChjYWNoZWRWaWV3TG9hZGVkKT0nY2FjaGVkVmlld0xvYWRlZCgkZXZlbnQpJz5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8IS0tIDxuZy1jb250YWluZXIgKmlneFRlbXBsYXRlT3V0bGV0PVwiKGlzSGllcmFyY2hpY2FsUmVjb3JkKHJvd0RhdGEpID8gaGllcmFyY2hpY2FsX3JlY29yZF90ZW1wbGF0ZSA6IChpc0NoaWxkR3JpZFJlY29yZChyb3dEYXRhKSAmJiBpc0V4cGFuZGVkKHJvd0RhdGEpID8gY2hpbGRfcmVjb3JkX3RlbXBsYXRlIDogaGllcmFyY2hpY2FsX3JlY29yZF90ZW1wbGF0ZSkpOyBjb250ZXh0OiBnZXRDb250ZXh0KHJvd0RhdGEpXCI+PC9uZy1jb250YWluZXI+IC0tPlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8bmctdGVtcGxhdGUgI2hpZXJhcmNoaWNhbF9yZWNvcmRfdGVtcGxhdGUgbGV0LXJvd0luZGV4PVwiaW5kZXhcIiBsZXQtZGlzYWJsZWRSb3c9XCJkaXNhYmxlZFwiIGxldC1yb3dEYXRhPlxuICAgICAgICAgICAgPGlneC1oaWVyYXJjaGljYWwtZ3JpZC1yb3cgW2dyaWRJRF09XCJpZFwiIFtpbmRleF09XCJyb3dJbmRleFwiIFtkaXNhYmxlZF09XCJkaXNhYmxlZFJvd1wiIFtkYXRhXT1cInJvd0RhdGFcIlxuICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInJvd0NsYXNzZXMgfCBpZ3hHcmlkUm93Q2xhc3Nlczpyb3c6cm93LmluRWRpdE1vZGU6cm93LnNlbGVjdGVkOnJvdy5kaXJ0eTpyb3cuZGVsZXRlZDpyb3cuZHJhZ2dpbmc6cm93SW5kZXg6aGFzQ29sdW1uTGF5b3V0czpmYWxzZTpyb3dEYXRhOnBpcGVUcmlnZ2VyXCJcbiAgICAgICAgICAgICAgICBbbmdTdHlsZV09XCJyb3dTdHlsZXMgfCBpZ3hHcmlkUm93U3R5bGVzOnJvd0RhdGE6cm93SW5kZXg6cGlwZVRyaWdnZXJcIiAjcm93PlxuICAgICAgICAgICAgPC9pZ3gtaGllcmFyY2hpY2FsLWdyaWQtcm93PlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuXG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjcGlubmVkX2hpZXJhcmNoaWNhbF9yZWNvcmRfdGVtcGxhdGUgbGV0LXJvd0luZGV4PVwiaW5kZXhcIiBsZXQtcm93RGF0YT5cbiAgICAgICAgICAgIDxpZ3gtaGllcmFyY2hpY2FsLWdyaWQtcm93IFtncmlkSURdPVwiaWRcIiBbaW5kZXhdPVwicm93SW5kZXhcIiBbZGF0YV09XCJyb3dEYXRhXCJcbiAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJyb3dDbGFzc2VzIHwgaWd4R3JpZFJvd0NsYXNzZXM6cm93OnJvdy5pbkVkaXRNb2RlOnJvdy5zZWxlY3RlZDpyb3cuZGlydHk6cm93LmRlbGV0ZWQ6cm93LmRyYWdnaW5nOnJvd0luZGV4Omhhc0NvbHVtbkxheW91dHM6ZmFsc2U6cm93RGF0YTpwaXBlVHJpZ2dlclwiXG4gICAgICAgICAgICAgICAgW25nU3R5bGVdPVwicm93U3R5bGVzIHwgaWd4R3JpZFJvd1N0eWxlczpyb3dEYXRhOnJvd0luZGV4OnBpcGVUcmlnZ2VyXCIgI3JvdyAjcGlubmVkUm93PlxuICAgICAgICAgICAgPC9pZ3gtaGllcmFyY2hpY2FsLWdyaWQtcm93PlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8bmctdGVtcGxhdGUgI2NoaWxkX3JlY29yZF90ZW1wbGF0ZSBsZXQtcm93SW5kZXg9XCJpbmRleFwiIGxldC1yb3dEYXRhPlxuICAgICAgICAgICAgPGRpdiBzdHlsZT1cIm92ZXJmbG93OiBhdXRvOyB3aWR0aDogMTAwJTtcIiBbYXR0ci5kYXRhLXJvd2luZGV4XT0ncm93SW5kZXgnIChzY3JvbGwpPSdvbkNvbnRhaW5lclNjcm9sbCgpJ1xuICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgICAgICAgICAnaWd4LWdyaWRfX3RyLWNvbnRhaW5lcic6IHRydWUsXG4gICAgICAgICAgICAgICAgJ2lneC1ncmlkX190ci0taGlnaGxpZ2h0ZWQnOmlzUm93SGlnaGxpZ2h0ZWQocm93RGF0YSlcbiAgICAgICAgICAgIH1cIj5cbiAgICAgICAgICAgICAgICA8aWd4LWNoaWxkLWdyaWQtcm93ICpuZ0Zvcj1cImxldCBsYXlvdXQgb2YgY2hpbGRMYXlvdXRMaXN0XCIgW3BhcmVudEdyaWRJRF09XCJpZFwiIFtpbmRleF09XCJyb3dJbmRleFwiXG4gICAgICAgICAgICAgICAgICAgIFtkYXRhXT1cInJvd0RhdGFcIiBbbGF5b3V0XT0nbGF5b3V0JyAjcm93PlxuICAgICAgICAgICAgICAgIDwvaWd4LWNoaWxkLWdyaWQtcm93PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJoYXNQaW5uZWRSZWNvcmRzICYmICFpc1Jvd1Bpbm5pbmdUb1RvcCA/IHBpbm5lZFJlY29yZHNUZW1wbGF0ZSA6IG51bGxcIj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ0ZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICA8c3BhbiAqbmdJZj1cIm1vdmluZyAmJiBjb2x1bW5JbkRyYWdcIiBbaWd4Q29sdW1uTW92aW5nRHJvcF09XCJoZWFkZXJDb250YWluZXJcIiBbYXR0ci5kcm9wcGFibGVdPVwidHJ1ZVwiXG4gICAgICAgICAgICBpZD1cInJpZ2h0XCIgY2xhc3M9XCJpZ3gtZ3JpZF9fc2Nyb2xsLW9uLWRyYWctcmlnaHRcIj48L3NwYW4+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJpZ3gtZ3JpZF9fcm93LWVkaXRpbmctb3V0bGV0XCIgaWd4T3ZlcmxheU91dGxldCAjaWd4Um93RWRpdGluZ092ZXJsYXlPdXRsZXQ+PC9kaXY+XG4gICAgICAgIDxpZ2MtdHJpYWwtd2F0ZXJtYXJrICpuZ0lmPVwiIXRoaXMucGFyZW50XCI+PC9pZ2MtdHJpYWwtd2F0ZXJtYXJrPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgaWd4VG9nZ2xlICNsb2FkaW5nT3ZlcmxheT5cbiAgICAgICAgPGlneC1jaXJjdWxhci1iYXIgW2luZGV0ZXJtaW5hdGVdPVwidHJ1ZVwiICpuZ0lmPSdzaG91bGRPdmVybGF5TG9hZGluZyc+XG4gICAgICAgIDwvaWd4LWNpcmN1bGFyLWJhcj5cbiAgICA8L2Rpdj5cbiAgICA8c3BhbiAqbmdJZj1cIm1vdmluZyAmJiBjb2x1bW5JbkRyYWdcIiBbaWd4Q29sdW1uTW92aW5nRHJvcF09XCJoZWFkZXJDb250YWluZXJcIiBbYXR0ci5kcm9wcGFibGVdPVwidHJ1ZVwiXG4gICAgICAgIGlkPVwicmlnaHRcIiBjbGFzcz1cImlneC1ncmlkX19zY3JvbGwtb24tZHJhZy1yaWdodFwiPjwvc3Bhbj5cbiAgICA8ZGl2IFtoaWRkZW5dPSchaGFzVmVydGljYWxTY3JvbGwoKScgY2xhc3M9XCJpZ3gtZ3JpZF9fdGJvZHktc2Nyb2xsYmFyXCIgW3N0eWxlLndpZHRoLnB4XT1cInNjcm9sbFNpemVcIiAocG9pbnRlcmRvd24pPVwiJGV2ZW50LnByZXZlbnREZWZhdWx0KClcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImlneC1ncmlkX190Ym9keS1zY3JvbGxiYXItc3RhcnRcIiBbc3R5bGUuaGVpZ2h0LnB4XT0nIGlzUm93UGlubmluZ1RvVG9wID8gcGlubmVkUm93SGVpZ2h0IDogMCc+PC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJpZ3gtZ3JpZF9fdGJvZHktc2Nyb2xsYmFyLW1haW5cIiBbc3R5bGUuaGVpZ2h0LnB4XT0nY2FsY0hlaWdodCc+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgaWd4R3JpZEZvciBbaWd4R3JpZEZvck9mXT0nW10nICN2ZXJ0aWNhbFNjcm9sbEhvbGRlcj48L25nLXRlbXBsYXRlPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImlneC1ncmlkX190Ym9keS1zY3JvbGxiYXItZW5kXCIgW3N0eWxlLmhlaWdodC5weF09JyFpc1Jvd1Bpbm5pbmdUb1RvcCA/IHBpbm5lZFJvd0hlaWdodCA6IDAnPjwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJpZ3gtZ3JpZF9fYWRkcm93LXNuYWNrYmFyXCI+XG4gICAgICAgIDxpZ3gtc25hY2tiYXIgI2FkZFJvd1NuYWNrYmFyIFtvdXRsZXRdPVwiaWd4Qm9keU92ZXJsYXlPdXRsZXRcIiBbYWN0aW9uVGV4dF09XCJyZXNvdXJjZVN0cmluZ3MuaWd4X2dyaWRfc25hY2tiYXJfYWRkcm93X2FjdGlvbnRleHRcIiBbZGlzcGxheVRpbWVdPSdzbmFja2JhckRpc3BsYXlUaW1lJz57e3Jlc291cmNlU3RyaW5ncy5pZ3hfZ3JpZF9zbmFja2Jhcl9hZGRyb3dfbGFiZWx9fTwvaWd4LXNuYWNrYmFyPlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiBpZ3hPdmVybGF5T3V0bGV0ICNpZ3hCb2R5T3ZlcmxheU91dGxldD1cIm92ZXJsYXktb3V0bGV0XCI+PC9kaXY+XG48L2Rpdj5cblxuPGRpdiBjbGFzcz1cImlneC1ncmlkX190Zm9vdFwiIHJvbGU9XCJyb3dncm91cFwiIFtzdHlsZS5oZWlnaHQucHhdPSdzdW1tYXJ5Um93SGVpZ2h0JyAjdGZvb3Q+XG4gICAgPGRpdiB0YWJpbmRleD1cIjBcIiAoZm9jdXMpPVwibmF2aWdhdGlvbi5mb2N1c0ZpcnN0Q2VsbChmYWxzZSlcIiBbYXR0ci5hcmlhLWFjdGl2ZWRlc2NlbmRhbnRdPVwiYWN0aXZlRGVzY2VuZGFudFwiXG4gICAgIChrZXlkb3duKT1cIm5hdmlnYXRpb24uc3VtbWFyeU5hdigkZXZlbnQpXCI+XG4gICAgICAgIDxpZ3gtZ3JpZC1zdW1tYXJ5LXJvdyBbc3R5bGUud2lkdGgucHhdPSdjYWxjV2lkdGgnIFtzdHlsZS5oZWlnaHQucHhdPSdzdW1tYXJ5Um93SGVpZ2h0J1xuICAgICAgICAgICAgKm5nSWY9XCJoYXNTdW1tYXJpemVkQ29sdW1ucyAmJiByb290U3VtbWFyaWVzRW5hYmxlZFwiIFtncmlkSURdPVwiaWRcIiByb2xlPVwicm93XCJcbiAgICAgICAgICAgIFtzdW1tYXJpZXNdPVwiaWQgfCBpZ3hHcmlkU3VtbWFyeURhdGFQaXBlOnN1bW1hcnlTZXJ2aWNlLnJldHJpZ2dlclJvb3RQaXBlXCIgW2luZGV4XT1cImRhdGFWaWV3Lmxlbmd0aFwiXG4gICAgICAgICAgICBjbGFzcz1cImlneC1ncmlkX19zdW1tYXJpZXNcIiAjc3VtbWFyeVJvdz5cbiAgICAgICAgPC9pZ3gtZ3JpZC1zdW1tYXJ5LXJvdz5cbiAgICAgICAgPGRpdiBjbGFzcz1cImlneC1ncmlkX190Zm9vdC10aHVtYlwiIFtoaWRkZW5dPSchaGFzVmVydGljYWxTY3JvbGwoKScgW3N0eWxlLmhlaWdodC5weF09J3N1bW1hcnlSb3dIZWlnaHQnXG4gICAgICAgICAgICBbc3R5bGUud2lkdGgucHhdPVwic2Nyb2xsU2l6ZVwiPjwvZGl2PlxuICAgIDwvZGl2PlxuPC9kaXY+XG5cbjxkaXYgY2xhc3M9XCJpZ3gtZ3JpZF9fc2Nyb2xsXCIgW3N0eWxlLmhlaWdodC5weF09XCJzY3JvbGxTaXplXCIgI3NjciBbaGlkZGVuXT1cImlzSG9yaXpvbnRhbFNjcm9sbEhpZGRlblwiICAocG9pbnRlcmRvd24pPVwiJGV2ZW50LnByZXZlbnREZWZhdWx0KClcIj5cbiAgICA8ZGl2IGNsYXNzPVwiaWd4LWdyaWRfX3Njcm9sbC1zdGFydFwiIFtzdHlsZS53aWR0aC5weF09J2lzUGlubmluZ1RvU3RhcnQgPyBwaW5uZWRXaWR0aCA6IGhlYWRlckZlYXR1cmVzV2lkdGgnIFtzdHlsZS5taW4td2lkdGgucHhdPSdpc1Bpbm5pbmdUb1N0YXJ0ID8gcGlubmVkV2lkdGggOiBoZWFkZXJGZWF0dXJlc1dpZHRoJz48L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwiaWd4LWdyaWRfX3Njcm9sbC1tYWluXCIgW3N0eWxlLndpZHRoLnB4XT0ndW5waW5uZWRXaWR0aCc+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSBpZ3hHcmlkRm9yIFtpZ3hHcmlkRm9yT2ZdPSdbXScgI3Njcm9sbENvbnRhaW5lcj5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwiaWd4LWdyaWRfX3Njcm9sbC1lbmRcIiBbc3R5bGUuZmxvYXRdPSdcInJpZ2h0XCInIFtzdHlsZS53aWR0aC5weF09J3Bpbm5lZFdpZHRoJyBbc3R5bGUubWluLXdpZHRoLnB4XT0ncGlubmVkV2lkdGgnIFtoaWRkZW5dPVwicGlubmVkV2lkdGggPT09IDAgfHwgaXNQaW5uaW5nVG9TdGFydFwiPjwvZGl2PlxuPC9kaXY+XG5cbjxkaXYgY2xhc3M9XCJpZ3gtZ3JpZF9fZm9vdGVyXCIgI2Zvb3Rlcj5cbiAgICA8bmctY29udGVudCBzZWxlY3Q9XCJpZ3gtZ3JpZC1mb290ZXJcIj48L25nLWNvbnRlbnQ+XG4gICAgPG5nLWNvbnRlbnQgKm5nSWY9XCJ0b3RhbFJlY29yZHMgfHwgcGFnaW5nTW9kZSA9PT0gMVwiICBzZWxlY3Q9XCJpZ3gtcGFnaW5hdG9yXCI+PC9uZy1jb250ZW50PlxuICAgIDxuZy1jb250YWluZXIgI3BhZ2luYXRvck91dGxldD48L25nLWNvbnRhaW5lcj5cbjwvZGl2PlxuXG48bmctdGVtcGxhdGUgI2VtcHR5RmlsdGVyZWRHcmlkPlxuICAgIDxzcGFuIGNsYXNzPVwiaWd4LWdyaWRfX3Rib2R5LW1lc3NhZ2VcIiByb2xlPVwiY2VsbFwiPlxuICAgICAgICA8c3Bhbj57e2VtcHR5RmlsdGVyZWRHcmlkTWVzc2FnZX19PC9zcGFuPlxuICAgICAgICA8c3BhbiAqbmdJZj0nc2hvd0FkZEJ1dHRvbic+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PSdhZGRSb3dFbXB0eVRlbXBsYXRlIHx8IGRlZmF1bHRBZGRSb3dFbXB0eVRlbXBsYXRlJz48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9zcGFuPlxuICAgIDwvc3Bhbj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjZGVmYXVsdEVtcHR5R3JpZD5cbiAgICA8c3BhbiBjbGFzcz1cImlneC1ncmlkX190Ym9keS1tZXNzYWdlXCIgcm9sZT1cImNlbGxcIj5cbiAgICAgICAgPHNwYW4+e3tlbXB0eUdyaWRNZXNzYWdlfX08L3NwYW4+XG4gICAgICAgIDxzcGFuICpuZ0lmPSdzaG93QWRkQnV0dG9uJz5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9J2FkZFJvd0VtcHR5VGVtcGxhdGUgfHwgZGVmYXVsdEFkZFJvd0VtcHR5VGVtcGxhdGUnPjwvbmctY29udGFpbmVyPlxuICAgICAgICA8L3NwYW4+XG4gICAgPC9zcGFuPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNkZWZhdWx0QWRkUm93RW1wdHlUZW1wbGF0ZT5cbiAgICA8YnV0dG9uIGlneEJ1dHRvbj1cInJhaXNlZFwiIGlneFJpcHBsZSAoY2xpY2spPVwidGhpcy5jcnVkU2VydmljZS5lbnRlckFkZFJvd01vZGUobnVsbCwgZmFsc2UsICRldmVudClcIj5cbiAgICAgICAge3tyZXNvdXJjZVN0cmluZ3MuaWd4X2dyaWRfYWRkX3Jvd19sYWJlbH19XG4gICAgPC9idXR0b24+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2RlZmF1bHRMb2FkaW5nR3JpZD5cbiAgICA8ZGl2IGNsYXNzPVwiaWd4LWdyaWRfX2xvYWRpbmdcIj5cbiAgICAgICAgPGlneC1jaXJjdWxhci1iYXIgW2luZGV0ZXJtaW5hdGVdPVwidHJ1ZVwiPlxuICAgICAgICA8L2lneC1jaXJjdWxhci1iYXI+XG4gICAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2RlZmF1bHRDb2xsYXBzZWRUZW1wbGF0ZT5cbiAgICA8aWd4LWljb24gcm9sZT1cImJ1dHRvblwiPnVuZm9sZF9tb3JlPC9pZ3gtaWNvbj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjZGVmYXVsdEV4cGFuZGVkVGVtcGxhdGU+XG4gICAgPGlneC1pY29uIHJvbGU9XCJidXR0b25cIiBbYWN0aXZlXT0naGFzRXhwYW5kZWRSZWNvcmRzKCkgJiYgaGFzRXhwYW5kYWJsZUNoaWxkcmVuJz51bmZvbGRfbGVzczwvaWd4LWljb24+XG48L25nLXRlbXBsYXRlPlxuXG48ZGl2ICpuZ0lmPVwicm93RWRpdGFibGVcIiBpZ3hUb2dnbGUgI3Jvd0VkaXRpbmdPdmVybGF5PlxuICAgIDxkaXYgW2NsYXNzTmFtZV09XCJiYW5uZXJDbGFzc1wiPlxuICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cInJlc29sdmVSb3dFZGl0Q29udGFpbmVyOyBjb250ZXh0OiB7IHJvd0NoYW5nZXNDb3VudDogcm93Q2hhbmdlc0NvdW50LCBlbmRFZGl0OiB0aGlzLmNydWRTZXJ2aWNlLmVuZEVkaXQuYmluZCh0aGlzKSB9XCI+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuPC9kaXY+XG48bmctdGVtcGxhdGUgI2RlZmF1bHRSb3dFZGl0VGV4dD5cbiAgICBZb3UgaGF2ZSB7eyByb3dDaGFuZ2VzQ291bnQgfX0gY2hhbmdlcyBpbiB0aGlzIHJvd1xuPC9uZy10ZW1wbGF0ZT5cbjxuZy10ZW1wbGF0ZSAjZGVmYXVsdFJvd0VkaXRBY3Rpb25zPlxuICAgIDxidXR0b24gaWd4QnV0dG9uIGlneFJvd0VkaXRUYWJTdG9wIChjbGljayk9XCJ0aGlzLmVuZFJvd0VkaXRUYWJTdG9wKGZhbHNlLCAkZXZlbnQpXCI+e3sgdGhpcy5yZXNvdXJjZVN0cmluZ3MuaWd4X2dyaWRfcm93X2VkaXRfYnRuX2NhbmNlbCB9fTwvYnV0dG9uPlxuICAgIDxidXR0b24gaWd4QnV0dG9uIGlneFJvd0VkaXRUYWJTdG9wIChjbGljayk9XCJ0aGlzLmVuZFJvd0VkaXRUYWJTdG9wKHRydWUsICRldmVudClcIj57eyB0aGlzLnJlc291cmNlU3RyaW5ncy5pZ3hfZ3JpZF9yb3dfZWRpdF9idG5fZG9uZSB9fTwvYnV0dG9uPlxuPC9uZy10ZW1wbGF0ZT5cbjxuZy10ZW1wbGF0ZSAjZGVmYXVsdFJvd0VkaXRUZW1wbGF0ZT5cbiAgICA8ZGl2IGNsYXNzPVwiaWd4LWJhbm5lcl9fbWVzc2FnZVwiPlxuICAgICAgICA8c3BhbiBjbGFzcz1cImlneC1iYW5uZXJfX3RleHRcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cInRoaXMuY3J1ZFNlcnZpY2Uucm93Py5nZXRDbGFzc05hbWUoKSA9PT0gJ0lneEFkZFJvdycgPyByb3dBZGRUZXh0IDogcmVzb2x2ZVJvd0VkaXRUZXh0IHx8IGRlZmF1bHRSb3dFZGl0VGV4dDtcbiAgICAgICAgICAgICAgICBjb250ZXh0OiB7ICRpbXBsaWNpdDogdGhpcy5jcnVkU2VydmljZS5yb3c/LmdldENsYXNzTmFtZSgpICE9PSAnSWd4QWRkUm93JyA/IHJvd0NoYW5nZXNDb3VudCA6IG51bGwgfVwiPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvc3Bhbj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwiaWd4LWJhbm5lcl9fYWN0aW9uc1wiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiaWd4LWJhbm5lcl9fcm93XCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJyZXNvbHZlUm93RWRpdEFjdGlvbnMgfHwgZGVmYXVsdFJvd0VkaXRBY3Rpb25zOyBjb250ZXh0OiB7ICRpbXBsaWNpdDogdGhpcy5lbmRFZGl0LmJpbmQodGhpcykgfVwiPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNkcmFnSW5kaWNhdG9ySWNvbkJhc2U+XG4gICAgPGlneC1pY29uPmRyYWdfaW5kaWNhdG9yPC9pZ3gtaWNvbj5cbjwvbmctdGVtcGxhdGU+XG5cbjxpZ3gtZ3JpZC1jb2x1bW4tcmVzaXplciAqbmdJZj1cImNvbFJlc2l6aW5nU2VydmljZS5zaG93UmVzaXplclwiPjwvaWd4LWdyaWQtY29sdW1uLXJlc2l6ZXI+XG48ZGl2IGNsYXNzPVwiaWd4LWdyaWRfX2xvYWRpbmctb3V0bGV0XCIgI2lneExvYWRpbmdPdmVybGF5T3V0bGV0IGlneE92ZXJsYXlPdXRsZXQ+PC9kaXY+XG48ZGl2IGNsYXNzPVwiaWd4LWdyaWRfX291dGxldFwiICNpZ3hGaWx0ZXJpbmdPdmVybGF5T3V0bGV0IGlneE92ZXJsYXlPdXRsZXQ+PC9kaXY+XG4iXX0=
1035
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGllcmFyY2hpY2FsLWdyaWQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaWduaXRldWktYW5ndWxhci9zcmMvbGliL2dyaWRzL2hpZXJhcmNoaWNhbC1ncmlkL2hpZXJhcmNoaWNhbC1ncmlkLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2lnbml0ZXVpLWFuZ3VsYXIvc3JjL2xpYi9ncmlkcy9oaWVyYXJjaGljYWwtZ3JpZC9jaGlsZC1ncmlkLXJvdy5jb21wb25lbnQuaHRtbCIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2lnbml0ZXVpLWFuZ3VsYXIvc3JjL2xpYi9ncmlkcy9oaWVyYXJjaGljYWwtZ3JpZC9oaWVyYXJjaGljYWwtZ3JpZC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBR0gsdUJBQXVCLEVBRXZCLFNBQVMsRUFFVCxZQUFZLEVBQ1osZUFBZSxFQUdmLFdBQVcsRUFDWCxNQUFNLEVBQ04sS0FBSyxFQUtMLFdBQVcsRUFDWCxTQUFTLEVBQ1QsWUFBWSxFQUNaLGdCQUFnQixFQUNuQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNoRixPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUMvRCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUUxRSxPQUFPLEVBQUUsb0NBQW9DLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUM5RixPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUMxRSxPQUFPLEVBQUUsZ0NBQWdDLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUN0RixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0MsT0FB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SXRELGFBQWE7c0JBRG5CLFNBQVM7dUJBQUMsZUFBZSxFQUFFLEVBQUUsSUFBSSxFQUFFLGdCQUFnQixFQUFFO2dCQUkvQyxlQUFlO3NCQURyQixTQUFTO3VCQUFDLGlCQUFpQixFQUFFLEVBQUUsSUFBSSxFQUFFLGdCQUFnQixFQUFFO2dCQU1qRCxlQUFlO3NCQURyQixZQUFZO3VCQUFDLDBCQUEwQixFQUFFLEVBQUUsSUFBSSxFQUFFLDBCQUEwQixFQUFFO2dCQU92RSxnQkFBZ0I7c0JBRHRCLFlBQVk7dUJBQUMsd0JBQXdCO2dCQUk1QiwwQkFBMEI7c0JBRG5DLFNBQVM7dUJBQUMsOEJBQThCLEVBQUUsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBSXBFLGFBQWE7c0JBRHRCLFNBQVM7dUJBQUMsdUJBQXVCLEVBQUUsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBb0Q1RCxFQUFFO3NCQUZaLFdBQVc7dUJBQUMsU0FBUzs7c0JBQ3JCLEtBQUs7Z0JBaUJLLElBQUk7c0JBRGQsS0FBSztnQkFxR0ssY0FBYztzQkFEeEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQWZ0ZXJDb250ZW50SW5pdCxcbiAgICBBZnRlclZpZXdJbml0LFxuICAgIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICAgIENoYW5nZURldGVjdG9yUmVmLFxuICAgIENvbXBvbmVudCxcbiAgICBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsXG4gICAgQ29udGVudENoaWxkLFxuICAgIENvbnRlbnRDaGlsZHJlbixcbiAgICBEb0NoZWNrLFxuICAgIEVsZW1lbnRSZWYsXG4gICAgSG9zdEJpbmRpbmcsXG4gICAgSW5qZWN0LFxuICAgIElucHV0LFxuICAgIE9uRGVzdHJveSxcbiAgICBPbkluaXQsXG4gICAgUXVlcnlMaXN0LFxuICAgIFNpbXBsZUNoYW5nZXMsXG4gICAgVGVtcGxhdGVSZWYsXG4gICAgVmlld0NoaWxkLFxuICAgIFZpZXdDaGlsZHJlbixcbiAgICBWaWV3Q29udGFpbmVyUmVmXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSWd4SGllcmFyY2hpY2FsR3JpZEFQSVNlcnZpY2UgfSBmcm9tICcuL2hpZXJhcmNoaWNhbC1ncmlkLWFwaS5zZXJ2aWNlJztcbmltcG9ydCB7IElneFJvd0lzbGFuZENvbXBvbmVudCB9IGZyb20gJy4vcm93LWlzbGFuZC5jb21wb25lbnQnO1xuaW1wb3J0IHsgSWd4RmlsdGVyaW5nU2VydmljZSB9IGZyb20gJy4uL2ZpbHRlcmluZy9ncmlkLWZpbHRlcmluZy5zZXJ2aWNlJztcbmltcG9ydCB7IElneENvbHVtbkNvbXBvbmVudCwgfSBmcm9tICcuLi9jb2x1bW5zL2NvbHVtbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgSWd4SGllcmFyY2hpY2FsR3JpZE5hdmlnYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi9oaWVyYXJjaGljYWwtZ3JpZC1uYXZpZ2F0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgSWd4R3JpZFN1bW1hcnlTZXJ2aWNlIH0gZnJvbSAnLi4vc3VtbWFyaWVzL2dyaWQtc3VtbWFyeS5zZXJ2aWNlJztcbmltcG9ydCB7IElneEhpZXJhcmNoaWNhbEdyaWRCYXNlRGlyZWN0aXZlIH0gZnJvbSAnLi9oaWVyYXJjaGljYWwtZ3JpZC1iYXNlLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBJZ3hUZW1wbGF0ZU91dGxldERpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZXMvdGVtcGxhdGUtb3V0bGV0L3RlbXBsYXRlX291dGxldC5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgSWd4R3JpZFNlbGVjdGlvblNlcnZpY2UgfSBmcm9tICcuLi9zZWxlY3Rpb24vc2VsZWN0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgSWd4Rm9yT2ZTeW5jU2VydmljZSwgSWd4Rm9yT2ZTY3JvbGxTeW5jU2VydmljZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZXMvZm9yLW9mL2Zvcl9vZi5zeW5jLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ2VsbFR5cGUsIEdyaWRUeXBlLCBJR1hfR1JJRF9CQVNFLCBJR1hfR1JJRF9TRVJWSUNFX0JBU0UsIFJvd1R5cGUgfSBmcm9tICcuLi9jb21tb24vZ3JpZC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgSWd4Um93SXNsYW5kQVBJU2VydmljZSB9IGZyb20gJy4vcm93LWlzbGFuZC1hcGkuc2VydmljZSc7XG5pbXBvcnQgeyBJZ3hHcmlkVG9vbGJhckRpcmVjdGl2ZSwgSWd4R3JpZFRvb2xiYXJUZW1wbGF0ZUNvbnRleHQgfSBmcm9tICcuLi90b29sYmFyL2NvbW1vbic7XG5pbXBvcnQgeyBJZ3hHcmlkQ1JVRFNlcnZpY2UgfSBmcm9tICcuLi9jb21tb24vY3J1ZC5zZXJ2aWNlJztcbmltcG9ydCB7IElneEhpZXJhcmNoaWNhbEdyaWRSb3cgfSBmcm9tICcuLi9ncmlkLXB1YmxpYy1yb3cnO1xuaW1wb3J0IHsgSWd4R3JpZENlbGwgfSBmcm9tICcuLi9ncmlkLXB1YmxpYy1jZWxsJztcbmltcG9ydCB7IElneFBhZ2luYXRvckNvbXBvbmVudCB9IGZyb20gJy4uLy4uL3BhZ2luYXRvci9wYWdpbmF0b3IuY29tcG9uZW50JztcbmltcG9ydCB7IElneEdyaWRDb21wb25lbnQgfSBmcm9tICcuLi9ncmlkL2dyaWQuY29tcG9uZW50JztcbmltcG9ydCB7IElneE92ZXJsYXlPdXRsZXREaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmVzL3RvZ2dsZS90b2dnbGUuZGlyZWN0aXZlJztcbmltcG9ydCB7IElneENvbHVtblJlc2l6aW5nU2VydmljZSB9IGZyb20gJy4uL3Jlc2l6aW5nL3Jlc2l6aW5nLnNlcnZpY2UnO1xuaW1wb3J0IHsgSWd4R3JpZEV4Y2VsU3R5bGVGaWx0ZXJpbmdDb21wb25lbnQgfSBmcm9tICcuLi9maWx0ZXJpbmcvZXhjZWwtc3R5bGUvZ3JpZC5leGNlbC1zdHlsZS1maWx0ZXJpbmcuY29tcG9uZW50JztcbmltcG9ydCB7IElneEdyaWRWYWxpZGF0aW9uU2VydmljZSB9IGZyb20gJy4uL2dyaWQvZ3JpZC12YWxpZGF0aW9uLnNlcnZpY2UnO1xuXG5sZXQgTkVYVF9JRCA9IDA7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSGllcmFyY2hpY2FsU3RhdGVSZWNvcmQge1xuICAgIHJvd0lEOiBhbnk7XG59XG5cbkBDb21wb25lbnQoe1xuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgIHNlbGVjdG9yOiAnaWd4LWNoaWxkLWdyaWQtcm93JyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vY2hpbGQtZ3JpZC1yb3cuY29tcG9uZW50Lmh0bWwnLFxufSlcbmV4cG9ydCBjbGFzcyBJZ3hDaGlsZEdyaWRSb3dDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBPbkluaXQge1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGxheW91dDogSWd4Um93SXNsYW5kQ29tcG9uZW50O1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgcGFyZW50SGFzU2Nyb2xsKCkge1xuICAgICAgICByZXR1cm4gIXRoaXMucGFyZW50R3JpZC52ZXJ0aWNhbFNjcm9sbENvbnRhaW5lci5kYy5pbnN0YW5jZS5ub3RWaXJ0dWFsO1xuICAgIH1cblxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHBhcmVudEdyaWRJRDogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogIFRoZSBkYXRhIHBhc3NlZCB0byB0aGUgcm93IGNvbXBvbmVudC5cbiAgICAgKlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiAvLyBnZXQgdGhlIHJvdyBkYXRhIGZvciB0aGUgZmlyc3Qgc2VsZWN0ZWQgcm93XG4gICAgICogbGV0IHNlbGVjdGVkUm93RGF0YSA9IHRoaXMuZ3JpZC5zZWxlY3RlZFJvd3NbMF0uZGF0YTtcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBkYXRhOiBhbnkgPSBbXTtcbiAgICAvKipcbiAgICAgKiBUaGUgaW5kZXggb2YgdGhlIHJvdy5cbiAgICAgKlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiAvLyBnZXQgdGhlIGluZGV4IG9mIHRoZSBzZWNvbmQgc2VsZWN0ZWQgcm93XG4gICAgICogbGV0IHNlbGVjdGVkUm93SW5kZXggPSB0aGlzLmdyaWQuc2VsZWN0ZWRSb3dzWzFdLmluZGV4O1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGluZGV4OiBudW1iZXI7XG5cbiAgICBAVmlld0NoaWxkKCdoZ3JpZCcsIHsgc3RhdGljOiB0cnVlIH0pXG4gICAgcHVibGljIGhHcmlkOiBJZ3hIaWVyYXJjaGljYWxHcmlkQ29tcG9uZW50O1xuXG4gICAgLyoqXG4gICAgICogR2V0IGEgcmVmZXJlbmNlIHRvIHRoZSBncmlkIHRoYXQgY29udGFpbnMgdGhlIHNlbGVjdGVkIHJvdy5cbiAgICAgKlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBoYW5kbGVSb3dTZWxlY3Rpb24oZXZlbnQpIHtcbiAgICAgKiAgLy8gdGhlIGdyaWQgb24gd2hpY2ggdGhlIHJvd1NlbGVjdGVkIGV2ZW50IHdhcyB0cmlnZ2VyZWRcbiAgICAgKiAgY29uc3QgZ3JpZCA9IGV2ZW50LnJvdy5ncmlkO1xuICAgICAqIH1cbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIGBgYGh0bWxcbiAgICAgKiAgPGlneC1ncmlkXG4gICAgICogICAgW2RhdGFdPVwiZGF0YVwiXG4gICAgICogICAgKHJvd1NlbGVjdGVkKT1cImhhbmRsZVJvd1NlbGVjdGlvbigkZXZlbnQpXCI+XG4gICAgICogIDwvaWd4LWdyaWQ+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgLy8gVE9ETzogUmVmYWN0b3JcbiAgICBwdWJsaWMgZ2V0IHBhcmVudEdyaWQoKTogSWd4SGllcmFyY2hpY2FsR3JpZENvbXBvbmVudCB7XG4gICAgICAgIHJldHVybiB0aGlzLmdyaWRBUEkuZ3JpZCBhcyBJZ3hIaWVyYXJjaGljYWxHcmlkQ29tcG9uZW50O1xuICAgIH1cblxuICAgIEBIb3N0QmluZGluZygnYXR0ci5hcmlhLWxldmVsJylcbiAgICBwdWJsaWMgZ2V0IGxldmVsKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5sYXlvdXQubGV2ZWw7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIG5hdGl2ZSBET00gZWxlbWVudCByZXByZXNlbnRpbmcgdGhlIHJvdy4gQ291bGQgYmUgbnVsbCBpbiBjZXJ0YWluIGVudmlyb25tZW50cy5cbiAgICAgKlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiAvLyBnZXQgdGhlIG5hdGl2ZUVsZW1lbnQgb2YgdGhlIHNlY29uZCBzZWxlY3RlZCByb3dcbiAgICAgKiBsZXQgc2VsZWN0ZWRSb3dOYXRpdmVFbGVtZW50ID0gdGhpcy5ncmlkLnNlbGVjdGVkUm93c1sxXS5uYXRpdmVFbGVtZW50O1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgbmF0aXZlRWxlbWVudCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgd2hldGhlciB0aGUgcm93IGlzIGV4cGFuZGVkLlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBjb25zdCBSb3dFeHBhbmRlZCA9IHRoaXMuZ3JpZDEucm93TGlzdC5maXJzdC5leHBhbmRlZDtcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBwdWJsaWMgZXhwYW5kZWQgPSBmYWxzZTtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBASW5qZWN0KElHWF9HUklEX1NFUlZJQ0VfQkFTRSkgcHVibGljIGdyaWRBUEk6IElneEhpZXJhcmNoaWNhbEdyaWRBUElTZXJ2aWNlLFxuICAgICAgICBwdWJsaWMgZWxlbWVudDogRWxlbWVudFJlZjxIVE1MRWxlbWVudD4sXG4gICAgICAgIHByaXZhdGUgcmVzb2x2ZXI6IENvbXBvbmVudEZhY3RvcnlSZXNvbHZlcixcbiAgICAgICAgcHVibGljIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYpIHsgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHB1YmxpYyBuZ09uSW5pdCgpIHtcbiAgICAgICAgdGhpcy5sYXlvdXQubGF5b3V0Q2hhbmdlLnN1YnNjcmliZSgoY2gpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX2hhbmRsZUxheW91dENoYW5nZXMoY2gpO1xuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgY2hhbmdlcyA9IHRoaXMubGF5b3V0LmluaXRpYWxDaGFuZ2VzO1xuICAgICAgICBjaGFuZ2VzLmZvckVhY2goY2hhbmdlID0+IHtcbiAgICAgICAgICAgIHRoaXMuX2hhbmRsZUxheW91dENoYW5nZXMoY2hhbmdlKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuaEdyaWQucGFyZW50ID0gdGhpcy5wYXJlbnRHcmlkO1xuICAgICAgICB0aGlzLmhHcmlkLnBhcmVudElzbGFuZCA9IHRoaXMubGF5b3V0O1xuICAgICAgICB0aGlzLmhHcmlkLmNoaWxkUm93ID0gdGhpcztcbiAgICAgICAgLy8gaGFuZGxlciBsb2dpYyB0aGF0IHJlLWVtaXRzIGhncmlkIGV2ZW50cyBvbiB0aGUgcm93IGlzbGFuZFxuICAgICAgICB0aGlzLnNldHVwRXZlbnRFbWl0dGVycygpO1xuICAgICAgICB0aGlzLmxheW91dC5ncmlkQ3JlYXRlZC5lbWl0KHtcbiAgICAgICAgICAgIG93bmVyOiB0aGlzLmxheW91dCxcbiAgICAgICAgICAgIHBhcmVudElEOiB0aGlzLmRhdGEucm93SUQsXG4gICAgICAgICAgICBncmlkOiB0aGlzLmhHcmlkXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwdWJsaWMgbmdBZnRlclZpZXdJbml0KCkge1xuICAgICAgICB0aGlzLmhHcmlkLmNoaWxkTGF5b3V0TGlzdCA9IHRoaXMubGF5b3V0LmNoaWxkcmVuO1xuICAgICAgICBjb25zdCBsYXlvdXRzID0gdGhpcy5oR3JpZC5jaGlsZExheW91dExpc3QudG9BcnJheSgpO1xuICAgICAgICBsYXlvdXRzLmZvckVhY2goKGwpID0+IHRoaXMuaEdyaWQuZ3JpZEFQSS5yZWdpc3RlckNoaWxkUm93SXNsYW5kKGwpKTtcbiAgICAgICAgdGhpcy5wYXJlbnRHcmlkLmdyaWRBUEkucmVnaXN0ZXJDaGlsZEdyaWQodGhpcy5kYXRhLnJvd0lELCB0aGlzLmxheW91dC5rZXksIHRoaXMuaEdyaWQpO1xuICAgICAgICB0aGlzLmxheW91dC5yb3dJc2xhbmRBUEkucmVnaXN0ZXJDaGlsZEdyaWQodGhpcy5kYXRhLnJvd0lELCB0aGlzLmhHcmlkKTtcblxuICAgICAgICB0aGlzLmxheW91dC5ncmlkSW5pdGlhbGl6ZWQuZW1pdCh7XG4gICAgICAgICAgICBvd25lcjogdGhpcy5sYXlvdXQsXG4gICAgICAgICAgICBwYXJlbnRJRDogdGhpcy5kYXRhLnJvd0lELFxuICAgICAgICAgICAgZ3JpZDogdGhpcy5oR3JpZFxuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLmhHcmlkLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXR1cEV2ZW50RW1pdHRlcnMoKSB7XG4gICAgICAgIGNvbnN0IGRlc3RydWN0b3IgPSB0YWtlVW50aWwodGhpcy5oR3JpZC5kZXN0cm95JCk7XG5cbiAgICAgICAgY29uc3QgZmFjdG9yeSA9IHRoaXMucmVzb2x2ZXIucmVzb2x2ZUNvbXBvbmVudEZhY3RvcnkoSWd4R3JpZENvbXBvbmVudCk7XG4gICAgICAgIC8vIGV4Y2x1ZGUgb3V0cHV0cyByZWxhdGVkIHRvIHR3by13YXkgYmluZGluZyBmdW5jdGlvbmFsaXR5XG4gICAgICAgIGNvbnN0IGlucHV0TmFtZXMgPSBmYWN0b3J5LmlucHV0cy5tYXAoaW5wdXQgPT4gaW5wdXQucHJvcE5hbWUpO1xuICAgICAgICBjb25zdCBvdXRwdXRzID0gZmFjdG9yeS5vdXRwdXRzLmZpbHRlcihvID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG1hdGNoaW5nSW5wdXRQcm9wTmFtZSA9IG8ucHJvcE5hbWUuc2xpY2UoMCwgby5wcm9wTmFtZS5pbmRleE9mKCdDaGFuZ2UnKSk7XG4gICAgICAgICAgICByZXR1cm4gaW5wdXROYW1lcy5pbmRleE9mKG1hdGNoaW5nSW5wdXRQcm9wTmFtZSkgPT09IC0xO1xuICAgICAgICB9KTtcblxuICAgICAgICAvLyBUT0RPOiBTa2lwIHRoZSBgcmVuZGVyZWRgIG91dHB1dC4gUmVuZGVyZWQgc2hvdWxkIGJlIGNhbGxlZCBvbmNlIHBlciBncmlkLlxuICAgICAgICBvdXRwdXRzLmZpbHRlcihvID0+IG8ucHJvcE5hbWUgIT09ICdyZW5kZXJlZCcpLmZvckVhY2gob3V0cHV0ID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLmhHcmlkW291dHB1dC5wcm9wTmFtZV0pIHtcbiAgICAgICAgICAgICAgICB0aGlzLmhHcmlkW291dHB1dC5wcm9wTmFtZV0ucGlwZShkZXN0cnVjdG9yKS5zdWJzY3JpYmUoKGFyZ3MpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFhcmdzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhcmdzID0ge307XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgYXJncy5vd25lciA9IHRoaXMuaEdyaWQ7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubGF5b3V0W291dHB1dC5wcm9wTmFtZV0uZW1pdChhcmdzKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG5cbiAgICBwcml2YXRlIF9oYW5kbGVMYXlvdXRDaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcbiAgICAgICAgZm9yIChjb25zdCBjaGFuZ2UgaW4gY2hhbmdlcykge1xuICAgICAgICAgICAgaWYgKGNoYW5nZXMuaGFzT3duUHJvcGVydHkoY2hhbmdlKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuaEdyaWRbY2hhbmdlXSA9IGNoYW5nZXNbY2hhbmdlXS5jdXJyZW50VmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG5cblxuQENvbXBvbmVudCh7XG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gICAgc2VsZWN0b3I6ICdpZ3gtaGllcmFyY2hpY2FsLWdyaWQnLFxuICAgIHRlbXBsYXRlVXJsOiAnaGllcmFyY2hpY2FsLWdyaWQuY29tcG9uZW50Lmh0bWwnLFxuICAgIHByb3ZpZGVyczogW1xuICAgICAgICBJZ3hHcmlkQ1JVRFNlcnZpY2UsXG4gICAgICAgIElneEdyaWRWYWxpZGF0aW9uU2VydmljZSxcbiAgICAgICAgSWd4R3JpZFNlbGVjdGlvblNlcnZpY2UsXG4gICAgICAgIHsgcHJvdmlkZTogSUdYX0dSSURfU0VSVklDRV9CQVNFLCB1c2VDbGFzczogSWd4SGllcmFyY2hpY2FsR3JpZEFQSVNlcnZpY2UgfSxcbiAgICAgICAgeyBwcm92aWRlOiBJR1hfR1JJRF9CQVNFLCB1c2VFeGlzdGluZzogSWd4SGllcmFyY2hpY2FsR3JpZENvbXBvbmVudCB9LFxuICAgICAgICBJZ3hHcmlkU3VtbWFyeVNlcnZpY2UsXG4gICAgICAgIElneEZpbHRlcmluZ1NlcnZpY2UsXG4gICAgICAgIElneEhpZXJhcmNoaWNhbEdyaWROYXZpZ2F0aW9uU2VydmljZSxcbiAgICAgICAgSWd4Q29sdW1uUmVzaXppbmdTZXJ2aWNlLFxuICAgICAgICBJZ3hGb3JPZlN5bmNTZXJ2aWNlLFxuICAgICAgICBJZ3hGb3JPZlNjcm9sbFN5bmNTZXJ2aWNlLFxuICAgICAgICBJZ3hSb3dJc2xhbmRBUElTZXJ2aWNlXG4gICAgXVxufSlcbmV4cG9ydCBjbGFzcyBJZ3hIaWVyYXJjaGljYWxHcmlkQ29tcG9uZW50IGV4dGVuZHMgSWd4SGllcmFyY2hpY2FsR3JpZEJhc2VEaXJlY3RpdmVcbiAgICBpbXBsZW1lbnRzIEdyaWRUeXBlLCBBZnRlclZpZXdJbml0LCBBZnRlckNvbnRlbnRJbml0LCBPbkluaXQsIE9uRGVzdHJveSwgRG9DaGVjayB7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIEBIb3N0QmluZGluZygnYXR0ci5yb2xlJylcbiAgICBwdWJsaWMgcm9sZSA9ICdncmlkJztcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBAQ29udGVudENoaWxkcmVuKElneFJvd0lzbGFuZENvbXBvbmVudCwgeyByZWFkOiBJZ3hSb3dJc2xhbmRDb21wb25lbnQsIGRlc2NlbmRhbnRzOiBmYWxzZSB9KVxuICAgIHB1YmxpYyBjaGlsZExheW91dExpc3Q6IFF1ZXJ5TGlzdDxJZ3hSb3dJc2xhbmRDb21wb25lbnQ+O1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIEBDb250ZW50Q2hpbGRyZW4oSWd4Um93SXNsYW5kQ29tcG9uZW50LCB7IHJlYWQ6IElneFJvd0lzbGFuZENvbXBvbmVudCwgZGVzY2VuZGFudHM6IHRydWUgfSlcbiAgICBwdWJsaWMgYWxsTGF5b3V0TGlzdDogUXVlcnlMaXN0PElneFJvd0lzbGFuZENvbXBvbmVudD47XG5cbiAgICBAQ29udGVudENoaWxkKElneEdyaWRUb29sYmFyRGlyZWN0aXZlLCB7IHJlYWQ6IFRlbXBsYXRlUmVmLCBzdGF0aWM6IHRydWUgfSlcbiAgICBwdWJsaWMgdG9vbGJhclRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxJZ3hHcmlkVG9vbGJhclRlbXBsYXRlQ29udGV4dD47XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBAQ29udGVudENoaWxkcmVuKElneFBhZ2luYXRvckNvbXBvbmVudCwgeyBkZXNjZW5kYW50czogdHJ1ZSB9KVxuICAgIHB1YmxpYyBwYWdpbmF0b3JMaXN0OiBRdWVyeUxpc3Q8SWd4UGFnaW5hdG9yQ29tcG9uZW50PjtcblxuICAgIEBWaWV3Q2hpbGQoJ3Rvb2xiYXJPdXRsZXQnLCB7IHJlYWQ6IFZpZXdDb250YWluZXJSZWYgfSlcbiAgICBwdWJsaWMgdG9vbGJhck91dGxldDogVmlld0NvbnRhaW5lclJlZjtcblxuICAgIEBWaWV3Q2hpbGQoJ3BhZ2luYXRvck91dGxldCcsIHsgcmVhZDogVmlld0NvbnRhaW5lclJlZiB9KVxuICAgIHB1YmxpYyBwYWdpbmF0b3JPdXRsZXQ6IFZpZXdDb250YWluZXJSZWY7XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIEBWaWV3Q2hpbGRyZW4oSWd4VGVtcGxhdGVPdXRsZXREaXJlY3RpdmUsIHsgcmVhZDogSWd4VGVtcGxhdGVPdXRsZXREaXJlY3RpdmUgfSlcbiAgICBwdWJsaWMgdGVtcGxhdGVPdXRsZXRzOiBRdWVyeUxpc3Q8YW55PjtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBAVmlld0NoaWxkcmVuKElneENoaWxkR3JpZFJvd0NvbXBvbmVudClcbiAgICBwdWJsaWMgaGllcmFyY2hpY2FsUm93czogUXVlcnlMaXN0PElneENoaWxkR3JpZFJvd0NvbXBvbmVudD47XG5cbiAgICBAVmlld0NoaWxkKCdoaWVyYXJjaGljYWxfcmVjb3JkX3RlbXBsYXRlJywgeyByZWFkOiBUZW1wbGF0ZVJlZiwgc3RhdGljOiB0cnVlIH0pXG4gICAgcHJvdGVjdGVkIGhpZXJhcmNoaWNhbFJlY29yZFRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gICAgQFZpZXdDaGlsZCgnY2hpbGRfcmVjb3JkX3RlbXBsYXRlJywgeyByZWFkOiBUZW1wbGF0ZVJlZiwgc3RhdGljOiB0cnVlIH0pXG4gICAgcHJvdGVjdGVkIGNoaWxkVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgICAvLyBAVmlld0NoaWxkKCdoZWFkZXJIaWVyYXJjaHlFeHBhbmRlcicsIHsgcmVhZDogRWxlbWVudFJlZiwgc3RhdGljOiB0cnVlIH0pXG4gICAgcHJvdGVjdGVkIGdldCBoZWFkZXJIaWVyYXJjaHlFeHBhbmRlcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudGhlYWRSb3c/LmhlYWRlckhpZXJhcmNoeUV4cGFuZGVyO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwdWJsaWMgY2hpbGRMYXlvdXRLZXlzID0gW107XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHVibGljIGhpZ2hsaWdodGVkUm93SUQgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHB1YmxpYyB1cGRhdGVPblJlbmRlciA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHB1YmxpYyBwYXJlbnQ6IElneEhpZXJhcmNoaWNhbEdyaWRDb21wb25lbnQgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHB1YmxpYyBjaGlsZFJvdzogSWd4Q2hpbGRHcmlkUm93Q29tcG9uZW50O1xuXG4gICAgcHJpdmF0ZSBfZGF0YTtcbiAgICBwcml2YXRlIF9maWx0ZXJlZERhdGEgPSBudWxsO1xuICAgIHByaXZhdGUgaF9pZCA9IGBpZ3gtaGllcmFyY2hpY2FsLWdyaWQtJHtORVhUX0lEKyt9YDtcbiAgICBwcml2YXRlIGNoaWxkR3JpZFRlbXBsYXRlczogTWFwPGFueSwgYW55PiA9IG5ldyBNYXAoKTtcbiAgICBwcml2YXRlIHNjcm9sbFRvcCA9IDA7XG4gICAgcHJpdmF0ZSBzY3JvbGxMZWZ0ID0gMDtcblxuICAgIC8qKlxuICAgICAqIEdldHMvU2V0cyB0aGUgdmFsdWUgb2YgdGhlIGBpZGAgYXR0cmlidXRlLlxuICAgICAqXG4gICAgICogQHJlbWFya3NcbiAgICAgKiBJZiBub3QgcHJvdmlkZWQgaXQgd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LWhpZXJhcmNoaWNhbC1ncmlkIFtpZF09XCInaWd4LWhncmlkLTEnXCIgW2RhdGFdPVwiRGF0YVwiIFthdXRvR2VuZXJhdGVdPVwidHJ1ZVwiPjwvaWd4LWhpZXJhcmNoaWNhbC1ncmlkPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBIb3N0QmluZGluZygnYXR0ci5pZCcpXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgZ2V0IGlkKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLmhfaWQ7XG4gICAgfVxuICAgIHB1YmxpYyBzZXQgaWQodmFsdWU6IHN0cmluZykge1xuICAgICAgICB0aGlzLmhfaWQgPSB2YWx1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBbiBASW5wdXQgcHJvcGVydHkgdGhhdCBsZXRzIHlvdSBmaWxsIHRoZSBgSWd4SGllcmFyY2hpY2FsR3JpZENvbXBvbmVudGAgd2l0aCBhbiBhcnJheSBvZiBkYXRhLlxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LWhpZXJhcmNoaWNhbC1ncmlkIFtkYXRhXT1cIkRhdGFcIiBbYXV0b0dlbmVyYXRlXT1cInRydWVcIj48L2lneC1oaWVyYXJjaGljYWwtZ3JpZD5cbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEBtZW1iZXJvZiBJZ3hIaWVyYXJjaGljYWxHcmlkQ29tcG9uZW50XG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgc2V0IGRhdGEodmFsdWU6IGFueVtdIHwgbnVsbCkge1xuICAgICAgICB0aGlzLl9kYXRhID0gdmFsdWUgfHwgW107XG4gICAgICAgIHRoaXMuc3VtbWFyeVNlcnZpY2UuY2xlYXJTdW1tYXJ5Q2FjaGUoKTtcbiAgICAgICAgaWYgKCF0aGlzLl9pbml0KSB7XG4gICAgICAgICAgICB0aGlzLnZhbGlkYXRpb24udXBkYXRlQWxsKHRoaXMuX2RhdGEpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnNob3VsZEdlbmVyYXRlKSB7XG4gICAgICAgICAgICB0aGlzLnNldHVwQ29sdW1ucygpO1xuICAgICAgICAgICAgdGhpcy5yZWZsb3coKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgaWYgKHRoaXMucGFyZW50ICYmICh0aGlzLmhlaWdodCA9PT0gbnVsbCB8fCB0aGlzLmhlaWdodC5pbmRleE9mKCclJykgIT09IC0xKSkge1xuICAgICAgICAgICAgLy8gSWYgdGhlIGhlaWdodCB3aWxsIGNoYW5nZSBiYXNlZCBvbiBob3cgbXVjaCBkYXRhIHRoZXJlIGlzLCByZWNhbGN1bGF0ZSBzaXplcyBpbiBpZ3hGb3JPZi5cbiAgICAgICAgICAgIHRoaXMubm90aWZ5Q2hhbmdlcyh0cnVlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgYW4gYXJyYXkgb2YgZGF0YSBzZXQgdG8gdGhlIGBJZ3hIaWVyYXJjaGljYWxHcmlkQ29tcG9uZW50YC5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogbGV0IGZpbHRlcmVkRGF0YSA9IHRoaXMuZ3JpZC5maWx0ZXJlZERhdGE7XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBAbWVtYmVyb2YgSWd4SGllcmFyY2hpY2FsR3JpZENvbXBvbmVudFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgZGF0YSgpOiBhbnlbXSB8IG51bGwge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGF0YTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgZ2V0IHBhZ2luYXRvcigpIHtcbiAgICAgICAgY29uc3QgaWQgPSB0aGlzLmlkO1xuICAgICAgICByZXR1cm4gKCF0aGlzLnBhcmVudElzbGFuZCAmJiB0aGlzLnBhZ2luYXRpb25Db21wb25lbnRzPy5maXJzdCkgfHwgdGhpcy5yb290R3JpZC5wYWdpbmF0b3JMaXN0Py5maW5kKChwZykgPT5cbiAgICAgICAgICAgIHBnLm5hdGl2ZUVsZW1lbnQub2Zmc2V0UGFyZW50Py5pZCA9PT0gaWQpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyBnZXQgZXhjZWxTdHlsZUZpbHRlcmluZ0NvbXBvbmVudCgpIDogSWd4R3JpZEV4Y2VsU3R5bGVGaWx0ZXJpbmdDb21wb25lbnQge1xuICAgICAgICByZXR1cm4gdGhpcy5wYXJlbnRJc2xhbmQgP1xuICAgICAgICAgICAgdGhpcy5wYXJlbnRJc2xhbmQuZXhjZWxTdHlsZUZpbHRlcmluZ0NvbXBvbmVudHMuZmlyc3QgOlxuICAgICAgICAgICAgc3VwZXIuZXhjZWxTdHlsZUZpbHRlcmluZ0NvbXBvbmVudDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIGFuIGFycmF5IG9mIG9iamVjdHMgY29udGFpbmluZyB0aGUgZmlsdGVyZWQgZGF0YSBpbiB0aGUgYElneEhpZXJhcmNoaWNhbEdyaWRDb21wb25lbnRgLlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiB0aGlzLmdyaWQuZmlsdGVyZWREYXRhID0gW3tcbiAgICAgKiAgICAgICBJRDogMSxcbiAgICAgKiAgICAgICBOYW1lOiBcIkFcIlxuICAgICAqIH1dO1xuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQG1lbWJlcm9mIElneEhpZXJhcmNoaWNhbEdyaWRDb21wb25lbnRcbiAgICAgKi9cbiAgICBwdWJsaWMgc2V0IGZpbHRlcmVkRGF0YSh2YWx1ZSkge1xuICAgICAgICB0aGlzLl9maWx0ZXJlZERhdGEgPSB2YWx1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGFuIGFycmF5IG9mIG9iamVjdHMgY29udGFpbmluZyB0aGUgZmlsdGVyZWQgZGF0YSBpbiB0aGUgYElneEhpZXJhcmNoaWNhbEdyaWRDb21wb25lbnRgLlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBsZXQgZmlsdGVyZWREYXRhID0gdGhpcy5ncmlkLmZpbHRlcmVkRGF0YTtcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEBtZW1iZXJvZiBJZ3hIaWVyYXJjaGljYWxHcmlkQ29tcG9uZW50XG4gICAgICovXG4gICAgcHVibGljIGdldCBmaWx0ZXJlZERhdGEoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9maWx0ZXJlZERhdGE7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cy9TZXRzIHRoZSB0b3RhbCBudW1iZXIgb2YgcmVjb3JkcyBpbiB0aGUgZGF0YSBzb3VyY2UuXG4gICAgICpcbiAgICAgKiBAcmVtYXJrc1xuICAgICAqIFRoaXMgcHJvcGVydHkgaXMgcmVxdWlyZWQgZm9yIHJlbW90ZSBncmlkIHZpcnR1YWxpemF0aW9uIHRvIGZ1bmN0aW9uIHdoZW4gaXQgaXMgYm91bmQgdG8gcmVtb3RlIGRhdGEuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogY29uc3QgaXRlbUNvdW50ID0gdGhpcy5ncmlkMS50b3RhbEl0ZW1Db3VudDtcbiAgICAgKiB0aGlzLmdyaWQxLnRvdGFsSXRlbUNvdW50ID0gNTU7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgcHVibGljIHNldCB0b3RhbEl0ZW1Db3VudChjb3VudCkge1xuICAgICAgICB0aGlzLnZlcnRpY2FsU2Nyb2xsQ29udGFpbmVyLnRvdGFsSXRlbUNvdW50ID0gY291bnQ7XG4gICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHRvdGFsSXRlbUNvdW50KCkge1xuICAgICAgICByZXR1cm4gdGhpcy52ZXJ0aWNhbFNjcm9sbENvbnRhaW5lci50b3RhbEl0ZW1Db3VudDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIGlmIGFsbCBpbW1lZGlhdGUgY2hpbGRyZW4gb2YgdGhlIGBJZ3hIaWVyYXJjaGljYWxHcmlkQ29tcG9uZW50YCBzaG91bGQgYmUgZXhwYW5kZWQvY29sbGFwc2VkLlxuICAgICAqIERlZnVsdCB2YWx1ZSBpcyBmYWxzZS5cbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1oaWVyYXJjaGljYWwtZ3JpZCBbaWRdPVwiJ2lneC1ncmlkLTEnXCIgW2RhdGFdPVwiRGF0YVwiIFthdXRvR2VuZXJhdGVdPVwidHJ1ZVwiIFtleHBhbmRDaGlsZHJlbl09XCJ0cnVlXCI+PC9pZ3gtaGllcmFyY2hpY2FsLWdyaWQ+XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBAbWVtYmVyb2YgSWd4SGllcmFyY2hpY2FsR3JpZENvbXBvbmVudFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHNldCBleHBhbmRDaGlsZHJlbih2YWx1ZTogYm9vbGVhbikge1xuICAgICAgICB0aGlzLl9kZWZhdWx0RXhwYW5kU3RhdGUgPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5leHBhbnNpb25TdGF0ZXMgPSBuZXcgTWFwPGFueSwgYm9vbGVhbj4oKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIGlmIGFsbCBpbW1lZGlhdGUgY2hpbGRyZW4gb2YgdGhlIGBJZ3hIaWVyYXJjaGljYWxHcmlkQ29tcG9uZW50YCBwcmV2aW91c2x5IGhhdmUgYmVlbiBzZXQgdG8gYmUgZXhwYW5kZWQvY29sbGFwc2VkLlxuICAgICAqIElmIHByZXZpb3VzbHkgc2V0IGFuZCBzb21lIHJvd3MgaGF2ZSBiZWVuIG1hbnVhbGx5IGV4cGFuZGVkL2NvbGxhcHNlZCBpdCB3aWxsIHN0aWxsIHJldHVybiB0aGUgbGFzdCBzZXQgdmFsdWUuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGNvbnN0IGV4cGFuZGVkID0gdGhpcy5ncmlkLmV4cGFuZENoaWxkcmVuO1xuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQG1lbWJlcm9mIElneEhpZXJhcmNoaWNhbEdyaWRDb21wb25lbnRcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IGV4cGFuZENoaWxkcmVuKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGVmYXVsdEV4cGFuZFN0YXRlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBkZXByZWNhdGVkIGluIHZlcnNpb24gMTIuMS4wLiBVc2UgYGdldENlbGxCeUNvbHVtbmAgb3IgYGdldENlbGxCeUtleWAgaW5zdGVhZFxuICAgICAqXG4gICAgICogUmV0dXJucyBhIGBDZWxsVHlwZWAgb2JqZWN0IHRoYXQgbWF0Y2hlcyB0aGUgY29uZGl0aW9ucy5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGNvbnN0IG15Q2VsbCA9IHRoaXMuZ3JpZDEuZ2V0Q2VsbEJ5Q29sdW1uVmlzaWJsZUluZGV4KDIsXCJVbml0UHJpY2VcIik7XG4gICAgICogYGBgXG4gICAgICogQHBhcmFtIHJvd0luZGV4XG4gICAgICogQHBhcmFtIGluZGV4XG4gICAgICovXG4gICAgcHVibGljIGdldENlbGxCeUNvbHVtblZpc2libGVJbmRleChyb3dJbmRleDogbnVtYmVyLCBpbmRleDogbnVtYmVyKTogQ2VsbFR5cGUge1xuICAgICAgICBjb25zdCByb3cgPSB0aGlzLmdldFJvd0J5SW5kZXgocm93SW5kZXgpO1xuICAgICAgICBjb25zdCBjb2x1bW4gPSB0aGlzLmNvbHVtbnMuZmluZCgoY29sKSA9PiBjb2wudmlzaWJsZUluZGV4ID09PSBpbmRleCk7XG4gICAgICAgIGlmIChyb3cgJiYgcm93IGluc3RhbmNlb2YgSWd4SGllcmFyY2hpY2FsR3JpZFJvdyAmJiBjb2x1bW4pIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgSWd4R3JpZENlbGwodGhpcywgcm93SW5kZXgsIGNvbHVtbi5maWVsZCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSB1bmlxdWUgaWRlbnRpZmllciBvZiB0aGUgcGFyZW50IHJvdy4gSXQgbWF5IGJlIGEgYHN0cmluZ2Agb3IgYG51bWJlcmAgaWYgYHByaW1hcnlLZXlgIG9mIHRoZVxuICAgICAqIHBhcmVudCBncmlkIGlzIHNldCBvciBhbiBvYmplY3QgcmVmZXJlbmNlIG9mIHRoZSBwYXJlbnQgcmVjb3JkIG90aGVyd2lzZS5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogY29uc3QgZm9yZWlnbktleSA9IHRoaXMuZ3JpZC5mb3JlaWduS2V5O1xuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQG1lbWJlcm9mIElneEhpZXJhcmNoaWNhbEdyaWRDb21wb25lbnRcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IGZvcmVpZ25LZXkoKSB7XG4gICAgICAgIGlmICghdGhpcy5wYXJlbnQpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLnBhcmVudC5ncmlkQVBJLmdldFBhcmVudFJvd0lkKHRoaXMpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IGhhc0V4cGFuZGFibGVDaGlsZHJlbigpIHtcbiAgICAgICAgcmV0dXJuICEhdGhpcy5jaGlsZExheW91dEtleXMubGVuZ3RoO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IHJlc29sdmVSb3dFZGl0Q29udGFpbmVyKCkge1xuICAgICAgICBpZiAodGhpcy5wYXJlbnRJc2xhbmQgJiYgdGhpcy5wYXJlbnRJc2xhbmQucm93RWRpdEN1c3RvbSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucGFyZW50SXNsYW5kLnJvd0VkaXRDb250YWluZXI7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMucm93RWRpdENvbnRhaW5lcjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHVibGljIGdldCByZXNvbHZlUm93RWRpdEFjdGlvbnMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnBhcmVudElzbGFuZCA/IHRoaXMucGFyZW50SXNsYW5kLnJvd0VkaXRBY3Rpb25zIDogdGhpcy5yb3dFZGl0QWN0aW9ucztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHVibGljIGdldCByZXNvbHZlUm93RWRpdFRleHQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnBhcmVudElzbGFuZCA/IHRoaXMucGFyZW50SXNsYW5kLnJvd0VkaXRUZXh0IDogdGhpcy5yb3dFZGl0VGV4dDtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHB1YmxpYyBoaWRlQWN0aW9uU3RyaXAoKSB7XG4gICAgICAgIGlmICghdGhpcy5wYXJlbnQpIHtcbiAgICAgICAgICAgIC8vIGhpZGUgY2hpbGQgbGF5b3V0IGFjdGlvbnMgc3RyaXBzIHdoZW5cbiAgICAgICAgICAgIC8vIG1vdmluZyBvdXRzaWRlIHJvb3QgZ3JpZC5cbiAgICAgICAgICAgIHN1cGVyLmhpZGVBY3Rpb25TdHJpcCgpO1xuICAgICAgICAgICAgdGhpcy5hbGxMYXlvdXRMaXN0LmZvckVhY2gocmkgPT4ge1xuICAgICAgICAgICAgICAgIHJpLmFjdGlvblN0cmlwPy5oaWRlKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IHBhcmVudFJvd091dGxldERpcmVjdGl2ZSgpIHtcbiAgICAgICAgLy8gVGFyZ2V0aW5nIHBhcmVudCBvdXRsZXQgaW4gb3JkZXIgdG8gcHJldmVudCBoaWRpbmcgd2hlbiBvdXRsZXRcbiAgICAgICAgLy8gaXMgcHJlc2VudCBhdCBhIGNoaWxkIGdyaWQgYW5kIGlzIGF0dGFjaGVkIHRvIGEgcm93LlxuICAgICAgICByZXR1cm4gdGhpcy5wYXJlbnQgPyB0aGlzLnBhcmVudC5yb3dPdXRsZXREaXJlY3RpdmUgOiB0aGlzLm91dGxldDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHVibGljIG5nT25Jbml0KCkge1xuICAgICAgICAvLyB0aGlzLmV4cGFuc2lvblN0YXRlc0NoYW5nZS5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKCh2YWx1ZTogTWFwPGFueSwgYm9vbGVhbj4pID0+IHtcbiAgICAgICAgLy8gICAgIGNvbnN0IHJlcyA9IEFycmF5LmZyb20odmFsdWUuZW50cmllcygpKS5maWx0ZXIoKHsxOiB2fSkgPT4gdiA9PT0gdHJ1ZSkubWFwKChba10pID0+IGspO1xuICAgICAgICAvLyB9KTtcbiAgICAgICAgdGhpcy5iYXRjaEVkaXRpbmcgPSAhIXRoaXMucm9vdEdyaWQuYmF0Y2hFZGl0aW5nO1xuICAgICAgICBpZiAodGhpcy5yb290R3JpZCAhPT0gdGhpcykge1xuICAgICAgICAgICAgdGhpcy5yb290R3JpZC5iYXRjaEVkaXRpbmdDaGFuZ2UucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgodmFsOiBib29sZWFuKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5iYXRjaEVkaXRpbmcgPSB2YWw7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBzdXBlci5uZ09uSW5pdCgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwdWJsaWMgbmdBZnRlclZpZXdJbml0KCkge1xuICAgICAgICBzdXBlci5uZ0FmdGVyVmlld0luaXQoKTtcbiAgICAgICAgdGhpcy56b25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMudmVydGljYWxTY3JvbGxDb250YWluZXIuZ2V0U2Nyb2xsKCkuYWRkRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgdGhpcy5oZ192ZXJ0aWNhbFNjcm9sbEhhbmRsZXIuYmluZCh0aGlzKSk7XG4gICAgICAgICAgICB0aGlzLmhlYWRlckNvbnRhaW5lci5nZXRTY3JvbGwoKS5hZGRFdmVudExpc3RlbmVyKCdzY3JvbGwnLCB0aGlzLmhnX2hvcml6b250YWxTY3JvbGxIYW5kbGVyLmJpbmQodGhpcykpO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy52ZXJ0aWNhbFNjcm9sbENvbnRhaW5lci5iZWZvcmVWaWV3RGVzdHJveWVkLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKHZpZXcpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHJvd0RhdGEgPSB2aWV3LmNvbnRleHQuJGltcGxpY2l0O1xuICAgICAgICAgICAgaWYgKHRoaXMuaXNDaGlsZEdyaWRSZWNvcmQocm93RGF0YSkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjYWNoZWREYXRhID0gdGhpcy5jaGlsZEdyaWRUZW1wbGF0ZXMuZ2V0KHJvd0RhdGEucm93SUQpO1xuICAgICAgICAgICAgICAgIGlmIChjYWNoZWREYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHRtbHBPdXRsZXQgPSBjYWNoZWREYXRhLm93bmVyO1xuICAgICAgICAgICAgICAgICAgICB0bWxwT3V0bGV0Ll92aWV3Q29udGFpbmVyUmVmLmRldGFjaCgwKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmICh0aGlzLnBhcmVudCkge1xuICAgICAgICAgICAgdGhpcy5fZGlzcGxheURlbnNpdHkgPSB0aGlzLnJvb3RHcmlkLmRpc3BsYXlEZW5zaXR5O1xuICAgICAgICAgICAgdGhpcy5zdW1tYXJ5U2VydmljZS5zdW1tYXJ5SGVpZ2h0ID0gMDtcbiAgICAgICAgICAgIHRoaXMucm9vdEdyaWQub25EZW5zaXR5Q2hhbmdlZC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9kaXNwbGF5RGVuc2l0eSA9IHRoaXMucm9vdEdyaWQuZGlzcGxheURlbnNpdHk7XG4gICAgICAgICAgICAgICAgdGhpcy5zdW1tYXJ5U2VydmljZS5zdW1tYXJ5SGVpZ2h0ID0gMDtcbiAgICAgICAgICAgICAgICB0aGlzLm5vdGlmeUNoYW5nZXModHJ1ZSk7XG4gICAgICAgICAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMuY2hpbGRMYXlvdXRLZXlzID0gdGhpcy5wYXJlbnRJc2xhbmQuY2hpbGRyZW4ubWFwKChpdGVtKSA9PiBpdGVtLmtleSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmFjdGlvblN0cmlwID0gdGhpcy5wYXJlbnRJc2xhbmQgPyB0aGlzLnBhcmVudElzbGFuZC5hY3Rpb25TdHJpcCA6IHRoaXMuYWN0aW9uU3RyaXA7XG5cbiAgICAgICAgdGhpcy5oZWFkU2VsZWN0b3JzVGVtcGxhdGVzID0gdGhpcy5wYXJlbnRJc2xhbmQgP1xuICAgICAgICAgICAgdGhpcy5wYXJlbnRJc2xhbmQuaGVhZFNlbGVjdG9yc1RlbXBsYXRlcyA6XG4gICAgICAgICAgICB0aGlzLmhlYWRTZWxlY3RvcnNUZW1wbGF0ZXM7XG5cbiAgICAgICAgdGhpcy5yb3dTZWxlY3RvcnNUZW1wbGF0ZXMgPSB0aGlzLnBhcmVudElzbGFuZCA/XG4gICAgICAgICAgICB0aGlzLnBhcmVudElzbGFuZC5yb3dTZWxlY3RvcnNUZW1wbGF0ZXMgOlxuICAgICAgICAgICAgdGhpcy5yb3dTZWxlY3RvcnNUZW1wbGF0ZXM7XG4gICAgICAgIHRoaXMuZHJhZ0luZGljYXRvckljb25UZW1wbGF0ZSA9IHRoaXMucGFyZW50SXNsYW5kID9cbiAgICAgICAgICAgIHRoaXMucGFyZW50SXNsYW5kLmRyYWdJbmRpY2F0b3JJY29uVGVtcGxhdGUgOlxuICAgICAgICAgICAgdGhpcy5kcmFnSW5kaWNhdG9ySWNvblRlbXBsYXRlO1xuICAgICAgICB0aGlzLnJvd0V4cGFuZGVkSW5kaWNhdG9yVGVtcGxhdGUgPSB0aGlzLnJvb3RHcmlkLnJvd0V4cGFuZGVkSW5kaWNhdG9yVGVtcGxhdGU7XG4gICAgICAgIHRoaXMucm93Q29sbGFwc2VkSW5kaWNhdG9yVGVtcGxhdGUgPSB0aGlzLnJvb3RHcmlkLnJvd0NvbGxhcHNlZEluZGljYXRvclRlbXBsYXRlO1xuICAgICAgICB0aGlzLmhlYWRlckNvbGxhcHNlSW5kaWNhdG9yVGVtcGxhdGUgPSB0aGlzLnJvb3RHcmlkLmhlYWRlckNvbGxhcHNlSW5kaWNhdG9yVGVtcGxhdGU7XG4gICAgICAgIHRoaXMuaGVhZGVyRXhwYW5kSW5kaWNhdG9yVGVtcGxhdGUgPSB0aGlzLnJvb3RHcmlkLmhlYWRlckV4cGFuZEluZGljYXRvclRlbXBsYXRlO1xuICAgICAgICB0aGlzLmV4Y2VsU3R5bGVIZWFkZXJJY29uVGVtcGxhdGUgPSB0aGlzLnJvb3RHcmlkLmV4Y2VsU3R5bGVIZWFkZXJJY29uVGVtcGxhdGU7XG4gICAgICAgIHRoaXMuc29ydEFzY2VuZGluZ0hlYWRlckljb25UZW1wbGF0ZSA9IHRoaXMucm9vdEdyaWQuc29ydEFzY2VuZGluZ0hlYWRlckljb25UZW1wbGF0ZTtcbiAgICAgICAgdGhpcy5zb3J0RGVzY2VuZGluZ0hlYWRlckljb25UZW1wbGF0ZSA9IHRoaXMucm9vdEdyaWQuc29ydERlc2NlbmRpbmdIZWFkZXJJY29uVGVtcGxhdGU7XG4gICAgICAgIHRoaXMuc29ydEhlYWRlckljb25UZW1wbGF0ZSA9IHRoaXMucm9vdEdyaWQuc29ydEhlYWRlckljb25UZW1wbGF0ZTtcbiAgICAgICAgdGhpcy5oYXNDaGlsZHJlbktleSA9IHRoaXMucGFyZW50SXNsYW5kID9cbiAgICAgICAgICAgIHRoaXMucGFyZW50SXNsYW5kLmhhc0NoaWxkcmVuS2V5IHx8IHRoaXMucm9vdEdyaWQuaGFzQ2hpbGRyZW5LZXkgOlxuICAgICAgICAgICAgdGhpcy5yb290R3JpZC5oYXNDaGlsZHJlbktleTtcbiAgICAgICAgdGhpcy5zaG93RXhwYW5kQWxsID0gdGhpcy5wYXJlbnRJc2xhbmQgP1xuICAgICAgICAgICAgdGhpcy5wYXJlbnRJc2xhbmQuc2hvd0V4cGFuZEFsbCA6IHRoaXMucm9vdEdyaWQuc2hvd0V4cGFuZEFsbDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IG91dGxldERpcmVjdGl2ZSgpOiBJZ3hPdmVybGF5T3V0bGV0RGlyZWN0aXZlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucm9vdEdyaWQub3V0bGV0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwdWJsaWMgbmdBZnRlckNvbnRlbnRJbml0KCkge1xuICAgICAgICB0aGlzLnVwZGF0ZUNvbHVtbkxpc3QoZmFsc2UpO1xuICAgICAgICB0aGlzLmNoaWxkTGF5b3V0S2V5cyA9IHRoaXMucGFyZW50ID9cbiAgICAgICAgICAgIHRoaXMucGFyZW50SXNsYW5kLmNoaWxkcmVuLm1hcCgoaXRlbSkgPT4gaXRlbS5rZXkpIDpcbiAgICAgICAgICAgIHRoaXMuY2hpbGRMYXlvdXRLZXlzID0gdGhpcy5jaGlsZExheW91dExpc3QubWFwKChpdGVtKSA9PiBpdGVtLmtleSk7XG4gICAgICAgIHRoaXMuY2hpbGRMYXlvdXRMaXN0Lm5vdGlmeU9uQ2hhbmdlcygpO1xuICAgICAgICB0aGlzLmNoaWxkTGF5b3V0TGlzdC5jaGFuZ2VzLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKCkgPT5cbiAgICAgICAgICAgIHRoaXMub25Sb3dJc2xhbmRDaGFuZ2UoKVxuICAgICAgICApO1xuICAgICAgICBzdXBlci5uZ0FmdGVyQ29udGVudEluaXQoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBgUm93VHlwZWAgYnkgaW5kZXguXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBjb25zdCBteVJvdyA9IHRoaXMuZ3JpZDEuZ2V0Um93QnlJbmRleCgxKTtcbiAgICAgKiBgYGBcbiAgICAgKiBAcGFyYW0gaW5kZXhcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0Um93QnlJbmRleChpbmRleDogbnVtYmVyKTogUm93VHlwZSB7XG4gICAgICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0gdGhpcy5kYXRhVmlldy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlUm93KGluZGV4KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBgUm93VHlwZWAgYnkga2V5LlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogY29uc3QgbXlSb3cgPSB0aGlzLmdyaWQxLmdldFJvd0J5S2V5KDEpO1xuICAgICAqIGBgYFxuICAgICAqIEBwYXJhbSBrZXlcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0Um93QnlLZXkoa2V5OiBhbnkpOiBSb3dUeXBlIHtcbiAgICAgICAgY29uc3QgZGF0YSA9IHRoaXMuZGF0YVZpZXc7XG4gICAgICAgIGNvbnN0IHJlYyA9IHRoaXMucHJpbWFyeUtleSA/XG4gICAgICAgICAgICBkYXRhLmZpbmQocmVjb3JkID0+IHJlY29yZFt0aGlzLnByaW1hcnlLZXldID09PSBrZXkpIDpcbiAgICAgICAgICAgIGRhdGEuZmluZChyZWNvcmQgPT4gcmVjb3JkID09PSBrZXkpO1xuICAgICAgICBjb25zdCBpbmRleCA9IGRhdGEuaW5kZXhPZihyZWMpO1xuICAgICAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID4gZGF0YS5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbmV3IElneEhpZXJhcmNoaWNhbEdyaWRSb3codGhpcyBhcyBhbnksIGluZGV4LCByZWMpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIGFsbFJvd3MoKTogUm93VHlwZVtdIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGF0YVZpZXcubWFwKChyZWMsIGluZGV4KSA9PiB0aGlzLmNyZWF0ZVJvdyhpbmRleCkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIGNvbGxlY3Rpb24gb2YgYElneEhpZXJhcmNoaWNhbEdyaWRSb3dgcyBmb3IgY3VycmVudCBwYWdlLlxuICAgICAqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgZGF0YVJvd3MoKTogUm93VHlwZVtdIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYWxsUm93cygpLmZpbHRlcihyb3cgPT4gcm93IGluc3RhbmNlb2YgSWd4SGllcmFyY2hpY2FsR3JpZFJvdyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhbiBhcnJheSBvZiB0aGUgc2VsZWN0ZWQgYElneEdyaWRDZWxsYHMuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBjb25zdCBzZWxlY3RlZENlbGxzID0gdGhpcy5ncmlkLnNlbGVjdGVkQ2VsbHM7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgcHVibGljIGdldCBzZWxlY3RlZENlbGxzKCk6IENlbGxUeXBlW10ge1xuICAgICAgICByZXR1cm4gdGhpcy5kYXRhUm93cygpLm1hcCgocm93KSA9PiByb3cuY2VsbHMuZmlsdGVyKChjZWxsKSA9PiBjZWxsLnNlbGVjdGVkKSlcbiAgICAgICAgICAgIC5yZWR1Y2UoKGEsIGIpID0+IGEuY29uY2F0KGIpLCBbXSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIGBDZWxsVHlwZWAgb2JqZWN0IHRoYXQgbWF0Y2hlcyB0aGUgY29uZGl0aW9ucy5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGNvbnN0IG15Q2VsbCA9IHRoaXMuZ3JpZDEuZ2V0Q2VsbEJ5Q29sdW1uKDIsIFwiVW5pdFByaWNlXCIpO1xuICAgICAqIGBgYFxuICAgICAqIEBwYXJhbSByb3dJbmRleFxuICAgICAqIEBwYXJhbSBjb2x1bW5GaWVsZFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRDZWxsQnlDb2x1bW4ocm93SW5kZXg6IG51bWJlciwgY29sdW1uRmllbGQ6IHN0cmluZyk6IENlbGxUeXBlIHtcbiAgICAgICAgY29uc3Qgcm93ID0gdGhpcy5nZXRSb3dCeUluZGV4KHJvd0luZGV4KTtcbiAgICAgICAgY29uc3QgY29sdW1uID0gdGhpcy5jb2x1bW5zLmZpbmQoKGNvbCkgPT4gY29sLmZpZWxkID09PSBjb2x1bW5GaWVsZCk7XG4gICAgICAgIGlmIChyb3cgJiYgcm93IGluc3RhbmNlb2YgSWd4SGllcmFyY2hpY2FsR3JpZFJvdyAmJiBjb2x1bW4pIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgSWd4R3JpZENlbGwodGhpcywgcm93SW5kZXgsIGNvbHVtbkZpZWxkKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgYSBgQ2VsbFR5cGVgIG9iamVjdCB0aGF0IG1hdGNoZXMgdGhlIGNvbmRpdGlvbnMuXG4gICAgICpcbiAgICAgKiBAcmVtYXJrc1xuICAgICAqIFJlcXVpcmVzIHRoYXQgdGhlIHByaW1hcnlLZXkgcHJvcGVydHkgaXMgc2V0LlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGdyaWQuZ2V0Q2VsbEJ5S2V5KDEsICdpbmRleCcpO1xuICAgICAqIGBgYFxuICAgICAqIEBwYXJhbSByb3dTZWxlY3RvciBtYXRjaCBhbnkgcm93SURcbiAgICAgKiBAcGFyYW0gY29sdW1uRmllbGRcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0Q2VsbEJ5S2V5KHJvd1NlbGVjdG9yOiBhbnksIGNvbHVtbkZpZWxkOiBzdHJpbmcpOiBDZWxsVHlwZSB7XG4gICAgICAgIGNvbnN0IHJvdyA9IHRoaXMuZ2V0Um93QnlLZXkocm93U2VsZWN0b3IpO1xuICAgICAgICBjb25zdCBjb2x1bW4gPSB0aGlzLmNvbHVtbnMuZmluZCgoY29sKSA9PiBjb2wuZmllbGQgPT09IGNvbHVtbkZpZWxkKTtcbiAgICAgICAgaWYgKHJvdyAmJiBjb2x1bW4pIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgSWd4R3JpZENlbGwodGhpcywgcm93LmluZGV4LCBjb2x1bW5GaWVsZCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgcGluUm93KHJvd0lEOiBhbnksIGluZGV4PzogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IHJvdyA9IHRoaXMuZ2V0Um93QnlLZXkocm93SUQpO1xuICAgICAgICByZXR1cm4gc3VwZXIucGluUm93KHJvd0lELCBpbmRleCwgcm93KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgdW5waW5Sb3cocm93SUQ6IGFueSk6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCByb3cgPSB0aGlzLmdldFJvd0J5S2V5KHJvd0lEKTtcbiAgICAgICAgcmV0dXJuIHN1cGVyLnVucGluUm93KHJvd0lELCByb3cpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIGRhdGFMb2FkaW5nKGV2ZW50KSB7XG4gICAgICAgIHRoaXMuZGF0YVByZUxvYWQuZW1pdChldmVudCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwdWJsaWMgZmVhdHVyZUNvbHVtbnNXaWR0aCgpIHtcbiAgICAgICAgcmV0dXJuIHN1cGVyLmZlYXR1cmVDb2x1bW5zV2lkdGgodGhpcy5oZWFkZXJIaWVyYXJjaHlFeHBhbmRlcik7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHB1YmxpYyBvblJvd0lzbGFuZENoYW5nZSgpIHtcbiAgICAgICAgaWYgKHRoaXMucGFyZW50KSB7XG4gICAgICAgICAgICB0aGlzLmNoaWxkTGF5b3V0S2V5cyA9IHRoaXMucGFyZW50SXNsYW5kLmNoaWxkcmVuLmZpbHRlcihpdGVtID0+ICEoaXRlbSBhcyBhbnkpLl9kZXN0cm95ZWQpLm1hcCgoaXRlbSkgPT4gaXRlbS5rZXkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5jaGlsZExheW91dEtleXMgPSB0aGlzLmNoaWxkTGF5b3V0TGlzdC5maWx0ZXIoaXRlbSA9PiAhKGl0ZW0gYXMgYW55KS5fZGVzdHJveWVkKS5tYXAoKGl0ZW0pID0+IGl0ZW0ua2V5KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoISh0aGlzLmNkciBhcyBhbnkpLmRlc3Ryb3llZCkge1xuICAgICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIG5nT25EZXN0cm95KCkge1xuICAgICAgICBpZiAoIXRoaXMucGFyZW50KSB7XG4gICAgICAgICAgICB0aGlzLmdyaWRBUEkuZ2V0Q2hpbGRHcmlkcyh0cnVlKS5mb3JFYWNoKChncmlkKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCFncmlkLmNoaWxkUm93LmNkci5kZXN0cm95ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgZ3JpZC5jaGlsZFJvdy5jZHIuZGVzdHJveSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnBhcmVudCAmJiB0aGlzLnNlbGVjdGlvblNlcnZpY2UuYWN0aXZlRWxlbWVudCkge1xuICAgICAgICAgICAgLy8gaW4gY2FzZSBzZWxlY3Rpb24gaXMgaW4gZGVzdHJveWVkIGNoaWxkIGdyaWQsIHNlbGVjdGlvbiBzaG91bGQgYmUgY2xlYXJlZC5cbiAgICAgICAgICAgIHRoaXMuX2NsZWFyU2VsZXRpb25IaWdobGlnaHRzKCk7XG4gICAgICAgIH1cbiAgICAgICAgc3VwZXIubmdPbkRlc3Ryb3koKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHVibGljIGlzUm93SGlnaGxpZ2h0ZWQocm93RGF0YSkge1xuICAgICAgICByZXR1cm4gdGhpcy5oaWdobGlnaHRlZFJvd0lEID09PSByb3dEYXRhLnJvd0lEO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwdWJsaWMgaXNIaWVyYXJjaGljYWxSZWNvcmQocmVjb3JkOiBhbnkpOiBib29sZWFuIHtcbiAgICAgICAgaWYgKHRoaXMuaXNHaG9zdFJlY29yZChyZWNvcmQpKSB7XG4gICAgICAgICAgICByZWNvcmQgPSByZWNvcmQucmVjb3JkUmVmO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmNoaWxkTGF5b3V0TGlzdC5sZW5ndGggIT09IDAgJiYgcmVjb3JkW3RoaXMuY2hpbGRMYXlvdXRMaXN0LmZpcnN0LmtleV07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHB1YmxpYyBpc0NoaWxkR3JpZFJlY29yZChyZWNvcmQ6IGFueSk6IGJvb2xlYW4ge1xuICAgICAgICAvLyBDYW4gYmUgbnVsbCB3aGVuIHRoZXJlIGlzIGRlZmluZWQgbGF5b3V0IGJ1dCBubyBjaGlsZCBkYXRhIHdhcyBmb3VuZFxuICAgICAgICByZXR1cm4gcmVjb3JkPy5jaGlsZEdyaWRzRGF0YSAhPT0gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwdWJsaWMgdHJhY2tDaGFuZ2VzKGluZGV4LCByZWMpIHtcbiAgICAgICAgaWYgKHJlYy5jaGlsZEdyaWRzRGF0YSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAvLyBpZiBpcyBjaGlsZCByZWNcbiAgICAgICAgICAgIHJldHVybiByZWMucm93SUQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlYztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHVibGljIGdldENvbnRleHQocm93RGF0YSwgcm93SW5kZXgsIHBpbm5lZCk6IGFueSB7XG4gICAgICAgIGlmICh0aGlzLmlzQ2hpbGRHcmlkUmVjb3JkKHJvd0RhdGEpKSB7XG4gICAgICAgICAgICBjb25zdCBjYWNoZWREYXRhID0gdGhpcy5jaGlsZEdyaWRUZW1wbGF0ZXMuZ2V0KHJvd0RhdGEucm93SUQpO1xuICAgICAgICAgICAgaWYgKGNhY2hlZERhdGEpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB2aWV3ID0gY2FjaGVkRGF0YS52aWV3O1xuICAgICAgICAgICAgICAgIGNvbnN0IHRtbHBPdXRsZXQgPSBjYWNoZWREYXRhLm93bmVyO1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICRpbXBsaWNpdDogcm93RGF0YSxcbiAgICAgICAgICAgICAgICAgICAgbW92ZVZpZXc6IHZpZXcsXG4gICAgICAgICAgICAgICAgICAgIG93bmVyOiB0bWxwT3V0bGV0LFxuICAgICAgICAgICAgICAgICAgICBpbmRleDogdGhpcy5kYXRhVmlldy5pbmRleE9mKHJvd0RhdGEpXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gY2hpbGQgcm93cyBjb250YWluIHVuaXF1ZSBncmlkcywgaGVuY2Ugc2hvdWxkIGhhdmUgdW5pcXVlIHRlbXBsYXRlc1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICRpbXBsaWNpdDogcm93RGF0YSxcbiAgICAgICAgICAgICAgICAgICAgdGVtcGxhdGVJRDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ2NoaWxkUm93JyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkOiByb3dEYXRhLnJvd0lEXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIGluZGV4OiB0aGlzLmRhdGFWaWV3LmluZGV4T2Yocm93RGF0YSlcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAkaW1wbGljaXQ6IHRoaXMuaXNHaG9zdFJlY29yZChyb3dEYXRhKSA/IHJvd0RhdGEucmVjb3JkUmVmIDogcm93RGF0YSxcbiAgICAgICAgICAgICAgICB0ZW1wbGF0ZUlEOiB7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6ICdkYXRhUm93JyxcbiAgICAgICAgICAgICAgICAgICAgaWQ6IG51bGxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGluZGV4OiB0aGlzLmdldERhdGFWaWV3SW5kZXgocm93SW5kZXgsIHBpbm5lZCksXG4gICAgICAgICAgICAgICAgZGlzYWJsZWQ6IHRoaXMuaXNHaG9zdFJlY29yZChyb3dEYXRhKVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IHJvb3RHcmlkKCk6IEdyaWRUeXBlIHtcbiAgICAgICAgbGV0IGN1cnJHcmlkID0gdGhpcyBhcyBJZ3hIaWVyYXJjaGljYWxHcmlkQ29tcG9uZW50O1xuICAgICAgICB3aGlsZSAoY3VyckdyaWQucGFyZW50KSB7XG4gICAgICAgICAgICBjdXJyR3JpZCA9IGN1cnJHcmlkLnBhcmVudDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY3VyckdyaWQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgaWNvblRlbXBsYXRlKCkge1xuICAgICAgICBjb25zdCBleHBhbmRlZCA9IHRoaXMuaGFzRXhwYW5kZWRSZWNvcmRzKCkgJiYgdGhpcy5oYXNFeHBhbmRhYmxlQ2hpbGRyZW47XG4gICAgICAgIGlmICghZXhwYW5kZWQgJiYgdGhpcy5zaG93RXhwYW5kQWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5oZWFkZXJDb2xsYXBzZUluZGljYXRvclRlbXBsYXRlIHx8IHRoaXMuZGVmYXVsdENvbGxhcHNlZFRlbXBsYXRlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaGVhZGVyRXhwYW5kSW5kaWNhdG9yVGVtcGxhdGUgfHwgdGhpcy5kZWZhdWx0RXhwYW5kZWRUZW1wbGF0ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0RHJhZ0dob3N0Q3VzdG9tVGVtcGxhdGUoKTogVGVtcGxhdGVSZWY8YW55PiB7XG4gICAgICAgIGlmICh0aGlzLnBhcmVudElzbGFuZCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucGFyZW50SXNsYW5kLmdldERyYWdHaG9zdEN1c3RvbVRlbXBsYXRlKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHN1cGVyLmdldERyYWdHaG9zdEN1c3RvbVRlbXBsYXRlKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEdldHMgdGhlIHZpc2libGUgY29udGVudCBoZWlnaHQgdGhhdCBpbmNsdWRlcyBoZWFkZXIgKyB0Ym9keSArIGZvb3Rlci5cbiAgICAgKiBGb3IgaGllcmFyY2hpY2FsIGNoaWxkIGdyaWQgaXQgbWF5IGJlIHNjcm9sbGVkIGFuZCBub3QgZnVsbHkgdmlzaWJsZS5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0VmlzaWJsZUNvbnRlbnRIZWlnaHQoKSB7XG4gICAgICAgIGxldCBoZWlnaHQgPSBzdXBlci5nZXRWaXNpYmxlQ29udGVudEhlaWdodCgpO1xuICAgICAgICBpZiAodGhpcy5wYXJlbnQpIHtcbiAgICAgICAgICAgIGNvbnN0IHJvb3RIZWlnaHQgPSB0aGlzLnJvb3RHcmlkLmdldFZpc2libGVDb250ZW50SGVpZ2h0KCk7XG4gICAgICAgICAgICBjb25zdCB0b3BEaWZmID0gdGhpcy5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcCAtIHRoaXMucm9vdEdyaWQubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3A7XG4gICAgICAgICAgICBoZWlnaHQgPSByb290SGVpZ2h0IC0gdG9wRGlmZiA+IGhlaWdodCA/IGhlaWdodCA6IHJvb3RIZWlnaHQgLSB0b3BEaWZmO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBoZWlnaHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHB1YmxpYyB0b2dnbGVBbGwoKSB7XG4gICAgICAgIGNvbnN0IGV4cGFuZGVkID0gdGhpcy5oYXNFeHBhbmRlZFJlY29yZHMoKSAmJiB0aGlzLmhhc0V4cGFuZGFibGVDaGlsZHJlbjtcbiAgICAgICAgaWYgKCFleHBhbmRlZCAmJiB0aGlzLnNob3dFeHBhbmRBbGwpIHtcbiAgICAgICAgICAgIHRoaXMuZXhwYW5kQWxsKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmNvbGxhcHNlQWxsKCk7XG4gICAgICAgIH1cbiAgICB9XG5cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgaGFzRXhwYW5kZWRSZWNvcmRzKCkge1xuICAgICAgICBpZiAodGhpcy5leHBhbmRDaGlsZHJlbikge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGhhc0V4cGFuZGVkRW50cnkgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5leHBhbnNpb25TdGF0ZXMuZm9yRWFjaCh2YWx1ZSA9PiB7XG4gICAgICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICAgICAgICBoYXNFeHBhbmRlZEVudHJ5ID0gdmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gaGFzRXhwYW5kZWRFbnRyeTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0RGVmYXVsdEV4cGFuZFN0YXRlKHJlY29yZDogYW55KSB7XG4gICAgICAgIGlmICh0aGlzLmhhc0NoaWxkcmVuS2V5ICYmICFyZWNvcmRbdGhpcy5oYXNDaGlsZHJlbktleV0pIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5leHBhbmRDaGlsZHJlbjtcblxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwdWJsaWMgaXNFeHBhbmRlZChyZWNvcmQ6IGFueSk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5ncmlkQVBJLmdldF9yb3dfZXhwYW5zaW9uX3N0YXRlKHJlY29yZCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHB1YmxpYyB2aWV3Q3JlYXRlZEhhbmRsZXIoYXJncykge1xuICAgICAgICBpZiAodGhpcy5pc0NoaWxkR3JpZFJlY29yZChhcmdzLmNvbnRleHQuJGltcGxpY2l0KSkge1xuICAgICAgICAgICAgY29uc3Qga2V5ID0gYXJncy5jb250ZXh0LiRpbXBsaWNpdC5yb3dJRDtcbiAgICAgICAgICAgIHRoaXMuY2hpbGRHcmlkVGVtcGxhdGVzLnNldChrZXksIGFyZ3MpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHB1YmxpYyB2aWV3TW92ZWRIYW5kbGVyKGFyZ3MpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNDaGlsZEdyaWRSZWNvcmQoYXJncy5jb250ZXh0LiRpbXBsaWNpdCkpIHtcbiAgICAgICAgICAgIC8vIHZpZXcgd2FzIG1vdmVkLCB1cGRhdGUgb3duZXIgaW4gY2FjaGVcbiAgICAgICAgICAgIGNvbnN0IGtleSA9IGFyZ3MuY29udGV4dC4kaW1wbGljaXQucm93SUQ7XG4gICAgICAgICAgICBjb25zdCBjYWNoZWREYXRhID0gdGhpcy5jaGlsZEdyaWRUZW1wbGF0ZXMuZ2V0KGtleSk7XG4gICAgICAgICAgICBjYWNoZWREYXRhLm93bmVyID0gYXJncy5vd25lcjtcblxuICAgICAgICAgICAgdGhpcy5jaGlsZExheW91dExpc3QuZm9yRWFjaCgobGF5b3V0KSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVsYXRlZEdyaWQgPSB0aGlzLmdyaWRBUEkuZ2V0Q2hpbGRHcmlkQnlJRChsYXlvdXQua2V5LCBhcmdzLmNvbnRleHQuJGltcGxpY2l0LnJvd0lEKTtcbiAgICAgICAgICAgICAgICBpZiAocmVsYXRlZEdyaWQgJiYgcmVsYXRlZEdyaWQudXBkYXRlT25SZW5kZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gRGV0ZWN0IGNoYW5nZXMgaWYgYGV4cGFuZENoaWxkcmVuYCBoYXMgY2hhbmdlZCB3aGVuIHRoZSBncmlkIHdhc24ndCB2aXNpYmxlLiBUaGlzIGlzIGZvciBwZXJmb3JtYW5jZSByZWFzb25zLlxuICAgICAgICAgICAgICAgICAgICByZWxhdGVkR3JpZC5ub3RpZnlDaGFuZ2VzKHRydWUpO1xuICAgICAgICAgICAgICAgICAgICByZWxhdGVkR3JpZC51cGRhdGVPblJlbmRlciA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIG9uQ29udGFpbmVyU2Nyb2xsKCkge1xuICAgICAgICB0aGlzLmhpZGVPdmVybGF5cygpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwdWJsaWMgY3JlYXRlUm93KGluZGV4OiBudW1iZXIsIGRhdGE/OiBhbnkpOiBSb3dUeXBlIHtcbiAgICAgICAgbGV0IHJvdzogUm93VHlwZTtcbiAgICAgICAgY29uc3QgZGF0YUluZGV4ID0gdGhpcy5fZ2V0RGF0YVZpZXdJbmRleChpbmRleCk7XG4gICAgICAgIGNvbnN0IHJlYzogYW55ID0gZGF0YSA/PyB0aGlzLmRhdGFWaWV3W2RhdGFJbmRleF07XG5cbiAgICAgICAgaWYgKCFyb3cgJiYgcmVjICYmICFyZWMuY2hpbGRHcmlkc0RhdGEpIHtcbiAgICAgICAgICAgIHJvdyA9IG5ldyBJZ3hIaWVyYXJjaGljYWxHcmlkUm93KHRoaXMgYXMgYW55LCBpbmRleCwgcmVjKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByb3c7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgcHVibGljIGdldENoaWxkR3JpZHMoaW5EZXBoPzogYm9vbGVhbikge1xuICAgICAgICByZXR1cm4gdGhpcy5ncmlkQVBJLmdldENoaWxkR3JpZHMoaW5EZXBoKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgZ2VuZXJhdGVEYXRhRmllbGRzKGRhdGE6IGFueVtdKTogc3RyaW5nW10ge1xuICAgICAgICByZXR1cm4gc3VwZXIuZ2VuZXJhdGVEYXRhRmllbGRzKGRhdGEpLmZpbHRlcigoZmllbGQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGxheW91dHNMaXN0ID0gdGhpcy5wYXJlbnRJc2xhbmQgPyB0aGlzLnBhcmVudElzbGFuZC5jaGlsZHJlbiA6IHRoaXMuY2hpbGRMYXlvdXRMaXN0O1xuICAgICAgICAgICAgY29uc3Qga2V5cyA9IGxheW91dHNMaXN0Lm1hcCgoaXRlbSkgPT4gaXRlbS5rZXkpO1xuICAgICAgICAgICAgcmV0dXJuIGtleXMuaW5kZXhPZihmaWVsZCkgPT09IC0xO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgcmVzaXplTm90aWZ5SGFuZGxlcigpIHtcbiAgICAgICAgLy8gZG8gbm90IHRyaWdnZXIgcmVmbG93IGlmIGVsZW1lbnQgaXMgZGV0YWNoZWQgb3IgaWYgaXQgaXMgY2hpbGQgZ3JpZC5cbiAgICAgICAgaWYgKHRoaXMuZG9jdW1lbnQuY29udGFpbnModGhpcy5uYXRpdmVFbGVtZW50KSAmJiAhdGhpcy5wYXJlbnQpIHtcbiAgICAgICAgICAgIHRoaXMubm90aWZ5Q2hhbmdlcyh0cnVlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgaW5pdENvbHVtbnMoY29sbGVjdGlvbjogSWd4Q29sdW1uQ29tcG9uZW50W10sIGNiOiAoYXJnczogYW55KSA9PiB2b2lkID0gbnVsbCkge1xuICAgICAgICBpZiAodGhpcy5oYXNDb2x1bW5MYXlvdXRzKSB7XG4gICAgICAgICAgICAvLyBpbnZhbGlkIGNvbmZpZ3VyYXRpb24gLSBoaWVyYXJjaGljYWwgZ3JpZCBzaG91bGQgbm90IGFsbG93IGNvbHVtbiBsYXlvdXRzXG4gICAgICAgICAgICAvLyByZW1vdmUgY29sdW1uIGxheW91dHNcbiAgICAgICAgICAgIGNvbnN0IG5vbkNvbHVtbkxheW91dENvbHVtbnMgPSB0aGlzLmNvbHVtbnMuZmlsdGVyKChjb2wpID0+ICFjb2wuY29sdW1uTGF5b3V0ICYmICFjb2wuY29sdW1uTGF5b3V0Q2hpbGQpO1xuICAgICAgICAgICAgdGhpcy51cGRhdGVDb2x1bW5zKG5vbkNvbHVtbkxheW91dENvbHVtbnMpO1xuICAgICAgICB9XG4gICAgICAgIHN1cGVyLmluaXRDb2x1bW5zKGNvbGxlY3Rpb24sIGNiKTtcbiAgICB9XG5cblxuICAgIHByb3RlY3RlZCBzZXR1cENvbHVtbnMoKSB7XG4gICAgICAgIGlmICh0aGlzLnBhcmVudElzbGFuZCAmJiB0aGlzLnBhcmVudElzbGFuZC5jaGlsZENvbHVtbnMubGVuZ3RoID4gMCAmJiAhdGhpcy5hdXRvR2VuZXJhdGUpIHtcbiAgICAgICAgICAgIHRoaXMuY3JlYXRlQ29sdW1uc0xpc3QodGhpcy5wYXJlbnRJc2xhbmQuY2hpbGRDb2x1bW5zLnRvQXJyYXkoKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzdXBlci5zZXR1cENvbHVtbnMoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByb3RlY3RlZCBnZXRDb2x1bW5MaXN0KCkge1xuICAgICAgICBjb25zdCBjaGlsZExheW91dHMgPSB0aGlzLnBhcmVudCA/IHRoaXMuY2hpbGRMYXlvdXRMaXN0IDogdGhpcy5hbGxMYXlvdXRMaXN0O1xuICAgICAgICBjb25zdCBuZXN0ZWRDb2x1bW5zID0gY2hpbGRMYXlvdXRzLm1hcCgobGF5b3V0KSA9PiBsYXlvdXQuY29sdW1uTGlzdC50b0FycmF5KCkpO1xuICAgICAgICBjb25zdCBjb2xzQXJyYXkgPSBbXS5jb25jYXQuYXBwbHkoW10sIG5lc3RlZENvbHVtbnMpO1xuICAgICAgICBpZiAoY29sc0FycmF5Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGNvbnN0IHRvcENvbHMgPSB0aGlzLmNvbHVtbkxpc3QuZmlsdGVyKChpdGVtKSA9PiBjb2xzQXJyYXkuaW5kZXhPZihpdGVtKSA9PT0gLTEpO1xuICAgICAgICAgICAgcmV0dXJuIHRvcENvbHM7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgIHJldHVybiB0aGlzLmNvbHVtbkxpc3QudG9BcnJheSgpXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgb25Db2x1bW5zQ2hhbmdlZChjaGFuZ2U6IFF1ZXJ5TGlzdDxJZ3hDb2x1bW5Db21wb25lbnQ+KSB7XG4gICAgICAgIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVDb2x1bW5MaXN0KCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBfc2hvdWxkQXV0b1NpemUocmVuZGVyZWRIZWlnaHQpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNQZXJjZW50SGVpZ2h0ICYmIHRoaXMucGFyZW50KSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc3VwZXIuX3Nob3VsZEF1dG9TaXplKHJlbmRlcmVkSGVpZ2h0KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHVwZGF0ZUNvbHVtbkxpc3QocmVjYWxjQ29sU2l6ZXMgPSB0cnVlKSB7XG4gICAgICAgIGNvbnN0IGNoaWxkTGF5b3V0cyA9IHRoaXMucGFyZW50ID8gdGhpcy5jaGlsZExheW91dExpc3QgOiB0aGlzLmFsbExheW91dExpc3Q7XG4gICAgICAgIGNvbnN0IG5lc3RlZENvbHVtbnMgPSBjaGlsZExheW91dHMubWFwKChsYXlvdXQpID0+IGxheW91dC5jb2x1bW5MaXN0LnRvQXJyYXkoKSk7XG4gICAgICAgIGNvbnN0IGNvbHNBcnJheSA9IFtdLmNvbmNhdC5hcHBseShbXSwgbmVzdGVkQ29sdW1ucyk7XG4gICAgICAgIGNvbnN0IGNvbExlbmd0aCA9IHRoaXMuY29sdW1uTGlzdC5sZW5ndGg7XG4gICAgICAgIGNvbnN0IHRvcENvbHMgPSB0aGlzLmNvbHVtbkxpc3QuZmlsdGVyKChpdGVtKSA9PiBjb2xzQXJyYXkuaW5kZXhPZihpdGVtKSA9PT0gLTEpO1xuICAgICAgICBpZiAodG9wQ29scy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUNvbHVtbnModG9wQ29scyk7XG4gICAgICAgICAgICBpZiAocmVjYWxjQ29sU2l6ZXMgJiYgdGhpcy5jb2x1bW5zLmxlbmd0aCAhPT0gY29sTGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jYWxjdWxhdGVHcmlkU2l6ZXMoZmFsc2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfY2xlYXJTZWxldGlvbkhpZ2hsaWdodHMoKSB7XG4gICAgICAgIFt0aGlzLnJvb3RHcmlkLCAuLi50aGlzLnJvb3RHcmlkLmdldENoaWxkR3JpZHModHJ1ZSldLmZvckVhY2goZ3JpZCA9PiB7XG4gICAgICAgICAgICBncmlkLnNlbGVjdGlvblNlcnZpY2UuY2xlYXIoKTtcbiAgICAgICAgICAgIGdyaWQuc2VsZWN0aW9uU2VydmljZS5hY3RpdmVFbGVtZW50ID0gbnVsbDtcbiAgICAgICAgICAgIGdyaWQubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKCdpZ3gtZ3JpZF9fdHItLWhpZ2hsaWdodGVkJyk7XG4gICAgICAgICAgICBncmlkLmhpZ2hsaWdodGVkUm93SUQgPSBudWxsO1xuICAgICAgICAgICAgZ3JpZC5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuXG4gICAgcHJpdmF0ZSBoZ192ZXJ0aWNhbFNjcm9sbEhhbmRsZXIoZXZlbnQpIHtcbiAgICAgICAgdGhpcy5zY3JvbGxUb3AgPSB0aGlzLnZlcnRpY2FsU2Nyb2xsQ29udGFpbmVyLnNjcm9sbFBvc2l0aW9uO1xuICAgIH1cbiAgICBwcml2YXRlIGhnX2hvcml6b250YWxTY3JvbGxIYW5kbGVyKGV2ZW50KSB7XG4gICAgICAgIHRoaXMuc2Nyb2xsTGVmdCA9IHRoaXMuaGVhZGVyQ29udGFpbmVyLnNjcm9sbFBvc2l0aW9uO1xuICAgIH1cbn1cblxuIiwiPGRpdiBjbGFzcz1cImlneC1ncmlkX19oaWVyYXJjaGljYWwtaW5kZW50XCIgW25nQ2xhc3NdPVwieydpZ3gtZ3JpZF9faGllcmFyY2hpY2FsLWluZGVudC0tc2Nyb2xsJzogcGFyZW50SGFzU2Nyb2xsfVwiPlxuICAgIDxpZ3gtaGllcmFyY2hpY2FsLWdyaWQgI2hncmlkIFtkYXRhXT0nZGF0YS5jaGlsZEdyaWRzRGF0YVtsYXlvdXQua2V5XSc+PC9pZ3gtaGllcmFyY2hpY2FsLWdyaWQ+XG48L2Rpdj5cbiIsIjxuZy1jb250ZW50IHNlbGVjdD1cImlneC1ncmlkLXRvb2xiYXJcIj48L25nLWNvbnRlbnQ+XG48bmctY29udGFpbmVyICN0b29sYmFyT3V0bGV0PjwvbmctY29udGFpbmVyPlxuXG48aWd4LWdyaWQtaGVhZGVyLXJvdyBjbGFzcz1cImlneC1ncmlkLXRoZWFkXCIgdGFiaW5kZXg9XCIwXCJcbiAgICBbZ3JpZF09XCJ0aGlzXCJcbiAgICBbaGFzTVJMXT1cImhhc0NvbHVtbkxheW91dHNcIlxuICAgIFthY3RpdmVEZXNjZW5kYW50XT1cImFjdGl2ZURlc2NlbmRhbnRcIlxuICAgIFt3aWR0aF09XCJjYWxjV2lkdGhcIlxuICAgIFtwaW5uZWRDb2x1bW5Db2xsZWN0aW9uXT1cInBpbm5lZENvbHVtbnNcIlxuICAgIFt1bnBpbm5lZENvbHVtbkNvbGxlY3Rpb25dPVwidW5waW5uZWRDb2x1bW5zXCJcbiAgICAoa2V5ZG93bi5tZXRhLmMpPVwiY29weUhhbmRsZXIoJGV2ZW50KVwiXG4gICAgKGtleWRvd24uY29udHJvbC5jKT1cImNvcHlIYW5kbGVyKCRldmVudClcIlxuICAgIChjb3B5KT1cImNvcHlIYW5kbGVyKCRldmVudClcIlxuICAgIChrZXlkb3duKT1cIm5hdmlnYXRpb24uaGVhZGVyTmF2aWdhdGlvbigkZXZlbnQpXCJcbiAgICAoZm9jdXMpPVwibmF2aWdhdGlvbi5mb2N1c0ZpcnN0Q2VsbCgpXCJcbj5cbjwvaWd4LWdyaWQtaGVhZGVyLXJvdz5cblxuPGRpdiBpZ3hHcmlkQm9keSAoa2V5ZG93bi5jb250cm9sLmMpPVwiY29weUhhbmRsZXIoJGV2ZW50KVwiIChjb3B5KT1cImNvcHlIYW5kbGVyKCRldmVudClcIiBjbGFzcz1cImlneC1ncmlkX190Ym9keVwiIHJvbGU9XCJyb3dncm91cFwiPlxuICAgIDxkaXYgY2xhc3M9XCJpZ3gtZ3JpZF9fdGJvZHktY29udGVudFwiICB0YWJpbmRleD1cIjBcIiAoZm9jdXMpPVwibmF2aWdhdGlvbi5mb2N1c1Rib2R5KCRldmVudClcIlxuICAgICAoa2V5ZG93bik9XCJuYXZpZ2F0aW9uLmhhbmRsZU5hdmlnYXRpb24oJGV2ZW50KVwiIChkcmFnU3RvcCk9XCJzZWxlY3Rpb25TZXJ2aWNlLmRyYWdNb2RlID0gJGV2ZW50XCJcbiAgICAgICAgKGRyYWdTY3JvbGwpPVwiZHJhZ1Njcm9sbCgkZXZlbnQpXCIgW2lneEdyaWREcmFnU2VsZWN0XT1cInNlbGVjdGlvblNlcnZpY2UuZHJhZ01vZGVcIiBbYXR0ci5hcmlhLWFjdGl2ZWRlc2NlbmRhbnRdPVwiYWN0aXZlRGVzY2VuZGFudFwiIFthdHRyLnJvbGVdPVwiZGF0YVZpZXcubGVuZ3RoID8gbnVsbCA6ICdyb3cnXCJcbiAgICAgICAgW3N0eWxlLmhlaWdodC5weF09J3RvdGFsSGVpZ2h0JyBbc3R5bGUud2lkdGgucHhdPSdjYWxjV2lkdGgnICN0Ym9keSAoc2Nyb2xsKT0ncHJldmVudENvbnRhaW5lclNjcm9sbCgkZXZlbnQpJz5cbiAgICAgICAgPHNwYW4gKm5nSWY9XCJtb3ZpbmcgJiYgY29sdW1uSW5EcmFnICYmIHBpbm5lZENvbHVtbnMubGVuZ3RoIDw9IDBcIlxuICAgICAgICAgICAgW2lneENvbHVtbk1vdmluZ0Ryb3BdPVwiaGVhZGVyQ29udGFpbmVyXCIgW2F0dHIuZHJvcHBhYmxlXT1cInRydWVcIiBpZD1cImxlZnRcIlxuICAgICAgICAgICAgY2xhc3M9XCJpZ3gtZ3JpZF9fc2Nyb2xsLW9uLWRyYWctbGVmdFwiPjwvc3Bhbj5cbiAgICAgICAgPHNwYW4gKm5nSWY9XCJtb3ZpbmcgJiYgY29sdW1uSW5EcmFnICYmIHBpbm5lZENvbHVtbnMubGVuZ3RoID4gMFwiXG4gICAgICAgICAgICBbaWd4Q29sdW1uTW92aW5nRHJvcF09XCJoZWFkZXJDb250YWluZXJcIiBbYXR0ci5kcm9wcGFibGVdPVwidHJ1ZVwiIGlkPVwibGVmdFwiXG4gICAgICAgICAgICBjbGFzcz1cImlneC1ncmlkX19zY3JvbGwtb24tZHJhZy1waW5uZWRcIiBbc3R5bGUubGVmdC5weF09XCJwaW5uZWRXaWR0aFwiPjwvc3Bhbj5cbiAgICAgICAgPG5nLXRlbXBsYXRlICNwaW5uZWRSZWNvcmRzVGVtcGxhdGU+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZGF0YVxuICAgICAgICAgICAgfCBncmlkVHJhbnNhY3Rpb246aWQ6cGlwZVRyaWdnZXJcbiAgICAgICAgICAgIHwgdmlzaWJsZUNvbHVtbnM6aGFzVmlzaWJsZUNvbHVtbnNcbiAgICAgICAgICAgIHwgZ3JpZEFkZFJvdzp0cnVlOnBpcGVUcmlnZ2VyXG4gICAgICAgICAgICB8IGdyaWRSb3dQaW5uaW5nOmlkOnRydWU6cGlwZVRyaWdnZXJcbiAgICAgICAgICAgIHwgZ3JpZEZpbHRlcmluZzpmaWx0ZXJpbmdFeHByZXNzaW9uc1RyZWU6ZmlsdGVyU3RyYXRlZ3k6YWR2YW5jZWRGaWx0ZXJpbmdFeHByZXNzaW9uc1RyZWU6aWQ6cGlwZVRyaWdnZXI6ZmlsdGVyaW5nUGlwZVRyaWdnZXI6dHJ1ZVxuICAgICAgICAgICAgfCBncmlkU29ydDpzb3J0aW5nRXhwcmVzc2lvbnM6W106c29ydFN0cmF0ZWd5OmlkOnBpcGVUcmlnZ2VyOnRydWUgYXMgcGlubmVkRGF0YVwiPlxuICAgICAgICAgICAgICAgIDxkaXYgI3BpbkNvbnRhaW5lciAqbmdJZj0ncGlubmVkRGF0YS5sZW5ndGggPiAwJyBjbGFzcz0naWd4LWdyaWRfX3RyLS1waW5uZWQnXG4gICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ2lneC1ncmlkX190ci0tcGlubmVkLWJvdHRvbSc6ICAhaXNSb3dQaW5uaW5nVG9Ub3AsICdpZ3gtZ3JpZF9fdHItLXBpbm5lZC10b3AnOiBpc1Jvd1Bpbm5pbmdUb1RvcCB9XCJcbiAgICAgICAgICAgICAgICAgICAgW3N0eWxlLndpZHRoLnB4XT0nY2FsY1dpZHRoJz5cbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgcm93RGF0YSBvZiBwaW5uZWREYXRhOyBsZXQgcm93SW5kZXggPSBpbmRleFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInBpbm5lZF9oaWVyYXJjaGljYWxfcmVjb3JkX3RlbXBsYXRlOyBjb250ZXh0OiBnZXRDb250ZXh0KHJvd0RhdGEsIHJvd0luZGV4LCB0cnVlKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJoYXNQaW5uZWRSZWNvcmRzICYmIGlzUm93UGlubmluZ1RvVG9wID8gcGlubmVkUmVjb3Jkc1RlbXBsYXRlIDogbnVsbFwiPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG5nLXRlbXBsYXRlIGlneEdyaWRGb3IgbGV0LXJvd0RhdGEgbGV0LXJvd0luZGV4PVwiaW5kZXhcIiBbaWd4R3JpZEZvck9mXT1cImRhdGFcbiAgICAgICAgfCBncmlkVHJhbnNhY3Rpb246aWQ6cGlwZVRyaWdnZXJcbiAgICAgICAgfCB2aXNpYmxlQ29sdW1uczpoYXNWaXNpYmxlQ29sdW1uc1xuICAgICAgICB8IGdyaWRGaWx0ZXJpbmc6ZmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlOmZpbHRlclN0cmF0ZWd5OmFkdmFuY2VkRmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlOmlkOnBpcGVUcmlnZ2VyOmZpbHRlcmluZ1BpcGVUcmlnZ2VyXG4gICAgICAgIHwgZ3JpZFNvcnQ6c29ydGluZ0V4cHJlc3Npb25zOltdOnNvcnRTdHJhdGVneTppZDpwaXBlVHJpZ2dlclxuICAgICAgICB8IGdyaWRIaWVyYXJjaGljYWxQYWdpbmc6cGFnaW5hdG9yPy5wYWdlOnBhZ2luYXRvcj8ucGVyUGFnZTppZDpwaXBlVHJpZ2dlclxuICAgICAgICB8IGdyaWRIaWVyYXJjaGljYWw6ZXhwYW5zaW9uU3RhdGVzOmlkOnByaW1hcnlLZXk6Y2hpbGRMYXlvdXRLZXlzOnBpcGVUcmlnZ2VyXG4gICAgICAgIHwgZ3JpZEFkZFJvdzpmYWxzZTpwaXBlVHJpZ2dlclxuICAgICAgICB8IGdyaWRSb3dQaW5uaW5nOmlkOmZhbHNlOnBpcGVUcmlnZ2VyXCJcbiAgICAgICAgICAgIFtpZ3hGb3JTY3JvbGxPcmllbnRhdGlvbl09XCIndmVydGljYWwnXCIgW2lneEZvclNjcm9sbENvbnRhaW5lcl09J3ZlcnRpY2FsU2Nyb2xsJ1xuICAgICAgICAgICAgW2lneEZvckNvbnRhaW5lclNpemVdPSdjYWxjSGVpZ2h0JyBbaWd4Rm9ySXRlbVNpemVdPVwicmVuZGVyZWRSb3dIZWlnaHRcIiBbaWd4Rm9yVHJhY2tCeV09J3RyYWNrQ2hhbmdlcydcbiAgICAgICAgICAgICN2ZXJ0aWNhbFNjcm9sbENvbnRhaW5lciAoY2h1bmtQcmVsb2FkKT1cImRhdGFMb2FkaW5nKCRldmVudClcIiAoZGF0YUNoYW5naW5nKT1cImRhdGFSZWJpbmRpbmcoJGV2ZW50KVwiIChkYXRhQ2hhbmdlZCk9XCJkYXRhUmVib3VuZCgkZXZlbnQpXCI+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgICAgICAgICBbaWd4VGVtcGxhdGVPdXRsZXRdPScoaXNIaWVyYXJjaGljYWxSZWNvcmQocm93RGF0YSkgPyBoaWVyYXJjaGljYWxfcmVjb3JkX3RlbXBsYXRlIDogKGlzQ2hpbGRHcmlkUmVjb3JkKHJvd0RhdGEpID8gY2hpbGRfcmVjb3JkX3RlbXBsYXRlIDogaGllcmFyY2hpY2FsX3JlY29yZF90ZW1wbGF0ZSkpJ1xuICAgICAgICAgICAgICAgIFtpZ3hUZW1wbGF0ZU91dGxldENvbnRleHRdPSdnZXRDb250ZXh0KHJvd0RhdGEsIHJvd0luZGV4LCBmYWxzZSknICh2aWV3Q3JlYXRlZCk9J3ZpZXdDcmVhdGVkSGFuZGxlcigkZXZlbnQpJ1xuICAgICAgICAgICAgICAgICh2aWV3TW92ZWQpPSd2aWV3TW92ZWRIYW5kbGVyKCRldmVudCknIChjYWNoZWRWaWV3TG9hZGVkKT0nY2FjaGVkVmlld0xvYWRlZCgkZXZlbnQpJz5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8IS0tIDxuZy1jb250YWluZXIgKmlneFRlbXBsYXRlT3V0bGV0PVwiKGlzSGllcmFyY2hpY2FsUmVjb3JkKHJvd0RhdGEpID8gaGllcmFyY2hpY2FsX3JlY29yZF90ZW1wbGF0ZSA6IChpc0NoaWxkR3JpZFJlY29yZChyb3dEYXRhKSAmJiBpc0V4cGFuZGVkKHJvd0RhdGEpID8gY2hpbGRfcmVjb3JkX3RlbXBsYXRlIDogaGllcmFyY2hpY2FsX3JlY29yZF90ZW1wbGF0ZSkpOyBjb250ZXh0OiBnZXRDb250ZXh0KHJvd0RhdGEpXCI+PC9uZy1jb250YWluZXI+IC0tPlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8bmctdGVtcGxhdGUgI2hpZXJhcmNoaWNhbF9yZWNvcmRfdGVtcGxhdGUgbGV0LXJvd0luZGV4PVwiaW5kZXhcIiBsZXQtZGlzYWJsZWRSb3c9XCJkaXNhYmxlZFwiIGxldC1yb3dEYXRhPlxuICAgICAgICAgICAgPGlneC1oaWVyYXJjaGljYWwtZ3JpZC1yb3cgW2dyaWRJRF09XCJpZFwiIFtpbmRleF09XCJyb3dJbmRleFwiIFtkaXNhYmxlZF09XCJkaXNhYmxlZFJvd1wiIFtkYXRhXT1cInJvd0RhdGFcIlxuICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInJvd0NsYXNzZXMgfCBpZ3hHcmlkUm93Q2xhc3Nlczpyb3c6cm93LmluRWRpdE1vZGU6cm93LnNlbGVjdGVkOnJvdy5kaXJ0eTpyb3cuZGVsZXRlZDpyb3cuZHJhZ2dpbmc6cm93SW5kZXg6aGFzQ29sdW1uTGF5b3V0czpmYWxzZTpyb3dEYXRhOnBpcGVUcmlnZ2VyXCJcbiAgICAgICAgICAgICAgICBbbmdTdHlsZV09XCJyb3dTdHlsZXMgfCBpZ3hHcmlkUm93U3R5bGVzOnJvd0RhdGE6cm93SW5kZXg6cGlwZVRyaWdnZXJcIiAjcm93PlxuICAgICAgICAgICAgPC9pZ3gtaGllcmFyY2hpY2FsLWdyaWQtcm93PlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuXG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjcGlubmVkX2hpZXJhcmNoaWNhbF9yZWNvcmRfdGVtcGxhdGUgbGV0LXJvd0luZGV4PVwiaW5kZXhcIiBsZXQtcm93RGF0YT5cbiAgICAgICAgICAgIDxpZ3gtaGllcmFyY2hpY2FsLWdyaWQtcm93IFtncmlkSURdPVwiaWRcIiBbaW5kZXhdPVwicm93SW5kZXhcIiBbZGF0YV09XCJyb3dEYXRhXCJcbiAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJyb3dDbGFzc2VzIHwgaWd4R3JpZFJvd0NsYXNzZXM6cm93OnJvdy5pbkVkaXRNb2RlOnJvdy5zZWxlY3RlZDpyb3cuZGlydHk6cm93LmRlbGV0ZWQ6cm93LmRyYWdnaW5nOnJvd0luZGV4Omhhc0NvbHVtbkxheW91dHM6ZmFsc2U6cm93RGF0YTpwaXBlVHJpZ2dlclwiXG4gICAgICAgICAgICAgICAgW25nU3R5bGVdPVwicm93U3R5bGVzIHwgaWd4R3JpZFJvd1N0eWxlczpyb3dEYXRhOnJvd0luZGV4OnBpcGVUcmlnZ2VyXCIgI3JvdyAjcGlubmVkUm93PlxuICAgICAgICAgICAgPC9pZ3gtaGllcmFyY2hpY2FsLWdyaWQtcm93PlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8bmctdGVtcGxhdGUgI2NoaWxkX3JlY29yZF90ZW1wbGF0ZSBsZXQtcm93SW5kZXg9XCJpbmRleFwiIGxldC1yb3dEYXRhPlxuICAgICAgICAgICAgPGRpdiBzdHlsZT1cIm92ZXJmbG93OiBhdXRvOyB3aWR0aDogMTAwJTtcIiBbYXR0ci5kYXRhLXJvd2luZGV4XT0ncm93SW5kZXgnIChzY3JvbGwpPSdvbkNvbnRhaW5lclNjcm9sbCgpJ1xuICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgICAgICAgICAnaWd4LWdyaWRfX3RyLWNvbnRhaW5lcic6IHRydWUsXG4gICAgICAgICAgICAgICAgJ2lneC1ncmlkX190ci0taGlnaGxpZ2h0ZWQnOmlzUm93SGlnaGxpZ2h0ZWQocm93RGF0YSlcbiAgICAgICAgICAgIH1cIj5cbiAgICAgICAgICAgICAgICA8aWd4LWNoaWxkLWdyaWQtcm93ICpuZ0Zvcj1cImxldCBsYXlvdXQgb2YgY2hpbGRMYXlvdXRMaXN0XCIgW3BhcmVudEdyaWRJRF09XCJpZFwiIFtpbmRleF09XCJyb3dJbmRleFwiXG4gICAgICAgICAgICAgICAgICAgIFtkYXRhXT1cInJvd0RhdGFcIiBbbGF5b3V0XT0nbGF5b3V0JyAjcm93PlxuICAgICAgICAgICAgICAgIDwvaWd4LWNoaWxkLWdyaWQtcm93PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJoYXNQaW5uZWRSZWNvcmRzICYmICFpc1Jvd1Bpbm5pbmdUb1RvcCA/IHBpbm5lZFJlY29yZHNUZW1wbGF0ZSA6IG51bGxcIj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ0ZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICA8c3BhbiAqbmdJZj1cIm1vdmluZyAmJiBjb2x1bW5JbkRyYWdcIiBbaWd4Q29sdW1uTW92aW5nRHJvcF09XCJoZWFkZXJDb250YWluZXJcIiBbYXR0ci5kcm9wcGFibGVdPVwidHJ1ZVwiXG4gICAgICAgICAgICBpZD1cInJpZ2h0XCIgY2xhc3M9XCJpZ3gtZ3JpZF9fc2Nyb2xsLW9uLWRyYWctcmlnaHRcIj48L3NwYW4+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJpZ3gtZ3JpZF9fcm93LWVkaXRpbmctb3V0bGV0XCIgaWd4T3ZlcmxheU91dGxldCAjaWd4Um93RWRpdGluZ092ZXJsYXlPdXRsZXQ+PC9kaXY+XG4gICAgICAgIDxpZ2MtdHJpYWwtd2F0ZXJtYXJrICpuZ0lmPVwiIXRoaXMucGFyZW50XCI+PC9pZ2MtdHJpYWwtd2F0ZXJtYXJrPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgaWd4VG9nZ2xlICNsb2FkaW5nT3ZlcmxheT5cbiAgICAgICAgPGlneC1jaXJjdWxhci1iYXIgW2luZGV0ZXJtaW5hdGVdPVwidHJ1ZVwiICpuZ0lmPSdzaG91bGRPdmVybGF5TG9hZGluZyc+XG4gICAgICAgIDwvaWd4LWNpcmN1bGFyLWJhcj5cbiAgICA8L2Rpdj5cbiAgICA8c3BhbiAqbmdJZj1cIm1vdmluZyAmJiBjb2x1bW5JbkRyYWdcIiBbaWd4Q29sdW1uTW92aW5nRHJvcF09XCJoZWFkZXJDb250YWluZXJcIiBbYXR0ci5kcm9wcGFibGVdPVwidHJ1ZVwiXG4gICAgICAgIGlkPVwicmlnaHRcIiBjbGFzcz1cImlneC1ncmlkX19zY3JvbGwtb24tZHJhZy1yaWdodFwiPjwvc3Bhbj5cbiAgICA8ZGl2IFtoaWRkZW5dPSchaGFzVmVydGljYWxTY3JvbGwoKScgY2xhc3M9XCJpZ3gtZ3JpZF9fdGJvZHktc2Nyb2xsYmFyXCIgW3N0eWxlLndpZHRoLnB4XT1cInNjcm9sbFNpemVcIiAocG9pbnRlcmRvd24pPVwiJGV2ZW50LnByZXZlbnREZWZhdWx0KClcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImlneC1ncmlkX190Ym9keS1zY3JvbGxiYXItc3RhcnRcIiBbc3R5bGUuaGVpZ2h0LnB4XT0nIGlzUm93UGlubmluZ1RvVG9wID8gcGlubmVkUm93SGVpZ2h0IDogMCc+PC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJpZ3gtZ3JpZF9fdGJvZHktc2Nyb2xsYmFyLW1haW5cIiBbc3R5bGUuaGVpZ2h0LnB4XT0nY2FsY0hlaWdodCc+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgaWd4R3JpZEZvciBbaWd4R3JpZEZvck9mXT0nW10nICN2ZXJ0aWNhbFNjcm9sbEhvbGRlcj48L25nLXRlbXBsYXRlPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImlneC1ncmlkX190Ym9keS1zY3JvbGxiYXItZW5kXCIgW3N0eWxlLmhlaWdodC5weF09JyFpc1Jvd1Bpbm5pbmdUb1RvcCA/IHBpbm5lZFJvd0hlaWdodCA6IDAnPjwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJpZ3gtZ3JpZF9fYWRkcm93LXNuYWNrYmFyXCI+XG4gICAgICAgIDxpZ3gtc25hY2tiYXIgI2FkZFJvd1NuYWNrYmFyIFtvdXRsZXRdPVwiaWd4Qm9keU92ZXJsYXlPdXRsZXRcIiBbYWN0aW9uVGV4dF09XCJyZXNvdXJjZVN0cmluZ3MuaWd4X2dyaWRfc25hY2tiYXJfYWRkcm93X2FjdGlvbnRleHRcIiBbZGlzcGxheVRpbWVdPSdzbmFja2JhckRpc3BsYXlUaW1lJz57e3Jlc291cmNlU3RyaW5ncy5pZ3hfZ3JpZF9zbmFja2Jhcl9hZGRyb3dfbGFiZWx9fTwvaWd4LXNuYWNrYmFyPlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiBpZ3hPdmVybGF5T3V0bGV0ICNpZ3hCb2R5T3ZlcmxheU91dGxldD1cIm92ZXJsYXktb3V0bGV0XCI+PC9kaXY+XG48L2Rpdj5cblxuPGRpdiBjbGFzcz1cImlneC1ncmlkX190Zm9vdFwiIHJvbGU9XCJyb3dncm91cFwiIFtzdHlsZS5oZWlnaHQucHhdPSdzdW1tYXJ5Um93SGVpZ2h0JyAjdGZvb3Q+XG4gICAgPGRpdiB0YWJpbmRleD1cIjBcIiAoZm9jdXMpPVwibmF2aWdhdGlvbi5mb2N1c0ZpcnN0Q2VsbChmYWxzZSlcIiBbYXR0ci5hcmlhLWFjdGl2ZWRlc2NlbmRhbnRdPVwiYWN0aXZlRGVzY2VuZGFudFwiXG4gICAgIChrZXlkb3duKT1cIm5hdmlnYXRpb24uc3VtbWFyeU5hdigkZXZlbnQpXCI+XG4gICAgICAgIDxpZ3gtZ3JpZC1zdW1tYXJ5LXJvdyBbc3R5bGUud2lkdGgucHhdPSdjYWxjV2lkdGgnIFtzdHlsZS5oZWlnaHQucHhdPSdzdW1tYXJ5Um93SGVpZ2h0J1xuICAgICAgICAgICAgKm5nSWY9XCJoYXNTdW1tYXJpemVkQ29sdW1ucyAmJiByb290U3VtbWFyaWVzRW5hYmxlZFwiIFtncmlkSURdPVwiaWRcIiByb2xlPVwicm93XCJcbiAgICAgICAgICAgIFtzdW1tYXJpZXNdPVwiaWQgfCBpZ3hHcmlkU3VtbWFyeURhdGFQaXBlOnN1bW1hcnlTZXJ2aWNlLnJldHJpZ2dlclJvb3RQaXBlXCIgW2luZGV4XT1cImRhdGFWaWV3Lmxlbmd0aFwiXG4gICAgICAgICAgICBjbGFzcz1cImlneC1ncmlkX19zdW1tYXJpZXNcIiAjc3VtbWFyeVJvdz5cbiAgICAgICAgPC9pZ3gtZ3JpZC1zdW1tYXJ5LXJvdz5cbiAgICAgICAgPGRpdiBjbGFzcz1cImlneC1ncmlkX190Zm9vdC10aHVtYlwiIFtoaWRkZW5dPSchaGFzVmVydGljYWxTY3JvbGwoKScgW3N0eWxlLmhlaWdodC5weF09J3N1bW1hcnlSb3dIZWlnaHQnXG4gICAgICAgICAgICBbc3R5bGUud2lkdGgucHhdPVwic2Nyb2xsU2l6ZVwiPjwvZGl2PlxuICAgIDwvZGl2PlxuPC9kaXY+XG5cbjxkaXYgY2xhc3M9XCJpZ3gtZ3JpZF9fc2Nyb2xsXCIgW3N0eWxlLmhlaWdodC5weF09XCJzY3JvbGxTaXplXCIgI3NjciBbaGlkZGVuXT1cImlzSG9yaXpvbnRhbFNjcm9sbEhpZGRlblwiICAocG9pbnRlcmRvd24pPVwiJGV2ZW50LnByZXZlbnREZWZhdWx0KClcIj5cbiAgICA8ZGl2IGNsYXNzPVwiaWd4LWdyaWRfX3Njcm9sbC1zdGFydFwiIFtzdHlsZS53aWR0aC5weF09J2lzUGlubmluZ1RvU3RhcnQgPyBwaW5uZWRXaWR0aCA6IGhlYWRlckZlYXR1cmVzV2lkdGgnIFtzdHlsZS5taW4td2lkdGgucHhdPSdpc1Bpbm5pbmdUb1N0YXJ0ID8gcGlubmVkV2lkdGggOiBoZWFkZXJGZWF0dXJlc1dpZHRoJz48L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwiaWd4LWdyaWRfX3Njcm9sbC1tYWluXCIgW3N0eWxlLndpZHRoLnB4XT0ndW5waW5uZWRXaWR0aCc+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSBpZ3hHcmlkRm9yIFtpZ3hHcmlkRm9yT2ZdPSdbXScgI3Njcm9sbENvbnRhaW5lcj5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwiaWd4LWdyaWRfX3Njcm9sbC1lbmRcIiBbc3R5bGUuZmxvYXRdPSdcInJpZ2h0XCInIFtzdHlsZS53aWR0aC5weF09J3Bpbm5lZFdpZHRoJyBbc3R5bGUubWluLXdpZHRoLnB4XT0ncGlubmVkV2lkdGgnIFtoaWRkZW5dPVwicGlubmVkV2lkdGggPT09IDAgfHwgaXNQaW5uaW5nVG9TdGFydFwiPjwvZGl2PlxuPC9kaXY+XG5cbjxkaXYgY2xhc3M9XCJpZ3gtZ3JpZF9fZm9vdGVyXCIgI2Zvb3Rlcj5cbiAgICA8bmctY29udGVudCBzZWxlY3Q9XCJpZ3gtZ3JpZC1mb290ZXJcIj48L25nLWNvbnRlbnQ+XG4gICAgPG5nLWNvbnRlbnQgKm5nSWY9XCJ0b3RhbFJlY29yZHMgfHwgcGFnaW5nTW9kZSA9PT0gMVwiICBzZWxlY3Q9XCJpZ3gtcGFnaW5hdG9yXCI+PC9uZy1jb250ZW50PlxuICAgIDxuZy1jb250YWluZXIgI3BhZ2luYXRvck91dGxldD48L25nLWNvbnRhaW5lcj5cbjwvZGl2PlxuXG48bmctdGVtcGxhdGUgI2VtcHR5RmlsdGVyZWRHcmlkPlxuICAgIDxzcGFuIGNsYXNzPVwiaWd4LWdyaWRfX3Rib2R5LW1lc3NhZ2VcIiByb2xlPVwiY2VsbFwiPlxuICAgICAgICA8c3Bhbj57e2VtcHR5RmlsdGVyZWRHcmlkTWVzc2FnZX19PC9zcGFuPlxuICAgICAgICA8c3BhbiAqbmdJZj0nc2hvd0FkZEJ1dHRvbic+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PSdhZGRSb3dFbXB0eVRlbXBsYXRlIHx8IGRlZmF1bHRBZGRSb3dFbXB0eVRlbXBsYXRlJz48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9zcGFuPlxuICAgIDwvc3Bhbj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjZGVmYXVsdEVtcHR5R3JpZD5cbiAgICA8c3BhbiBjbGFzcz1cImlneC1ncmlkX190Ym9keS1tZXNzYWdlXCIgcm9sZT1cImNlbGxcIj5cbiAgICAgICAgPHNwYW4+e3tlbXB0eUdyaWRNZXNzYWdlfX08L3NwYW4+XG4gICAgICAgIDxzcGFuICpuZ0lmPSdzaG93QWRkQnV0dG9uJz5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9J2FkZFJvd0VtcHR5VGVtcGxhdGUgfHwgZGVmYXVsdEFkZFJvd0VtcHR5VGVtcGxhdGUnPjwvbmctY29udGFpbmVyPlxuICAgICAgICA8L3NwYW4+XG4gICAgPC9zcGFuPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNkZWZhdWx0QWRkUm93RW1wdHlUZW1wbGF0ZT5cbiAgICA8YnV0dG9uIGlneEJ1dHRvbj1cInJhaXNlZFwiIGlneFJpcHBsZSAoY2xpY2spPVwidGhpcy5jcnVkU2VydmljZS5lbnRlckFkZFJvd01vZGUobnVsbCwgZmFsc2UsICRldmVudClcIj5cbiAgICAgICAge3tyZXNvdXJjZVN0cmluZ3MuaWd4X2dyaWRfYWRkX3Jvd19sYWJlbH19XG4gICAgPC9idXR0b24+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2RlZmF1bHRMb2FkaW5nR3JpZD5cbiAgICA8ZGl2IGNsYXNzPVwiaWd4LWdyaWRfX2xvYWRpbmdcIj5cbiAgICAgICAgPGlneC1jaXJjdWxhci1iYXIgW2luZGV0ZXJtaW5hdGVdPVwidHJ1ZVwiPlxuICAgICAgICA8L2lneC1jaXJjdWxhci1iYXI+XG4gICAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2RlZmF1bHRDb2xsYXBzZWRUZW1wbGF0ZT5cbiAgICA8aWd4LWljb24gcm9sZT1cImJ1dHRvblwiPnVuZm9sZF9tb3JlPC9pZ3gtaWNvbj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjZGVmYXVsdEV4cGFuZGVkVGVtcGxhdGU+XG4gICAgPGlneC1pY29uIHJvbGU9XCJidXR0b25cIiBbYWN0aXZlXT0naGFzRXhwYW5kZWRSZWNvcmRzKCkgJiYgaGFzRXhwYW5kYWJsZUNoaWxkcmVuJz51bmZvbGRfbGVzczwvaWd4LWljb24+XG48L25nLXRlbXBsYXRlPlxuXG48ZGl2ICpuZ0lmPVwicm93RWRpdGFibGVcIiBpZ3hUb2dnbGUgI3Jvd0VkaXRpbmdPdmVybGF5PlxuICAgIDxkaXYgW2NsYXNzTmFtZV09XCJiYW5uZXJDbGFzc1wiPlxuICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cInJlc29sdmVSb3dFZGl0Q29udGFpbmVyOyBjb250ZXh0OiB7IHJvd0NoYW5nZXNDb3VudDogcm93Q2hhbmdlc0NvdW50LCBlbmRFZGl0OiB0aGlzLmNydWRTZXJ2aWNlLmVuZEVkaXQuYmluZCh0aGlzKSB9XCI+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuPC9kaXY+XG48bmctdGVtcGxhdGUgI2RlZmF1bHRSb3dFZGl0VGV4dD5cbiAgICBZb3UgaGF2ZSB7eyByb3dDaGFuZ2VzQ291bnQgfX0gY2hhbmdlcyBpbiB0aGlzIHJvd1xuPC9uZy10ZW1wbGF0ZT5cbjxuZy10ZW1wbGF0ZSAjZGVmYXVsdFJvd0VkaXRBY3Rpb25zPlxuICAgIDxidXR0b24gaWd4QnV0dG9uIGlneFJvd0VkaXRUYWJTdG9wIChjbGljayk9XCJ0aGlzLmVuZFJvd0VkaXRUYWJTdG9wKGZhbHNlLCAkZXZlbnQpXCI+e3sgdGhpcy5yZXNvdXJjZVN0cmluZ3MuaWd4X2dyaWRfcm93X2VkaXRfYnRuX2NhbmNlbCB9fTwvYnV0dG9uPlxuICAgIDxidXR0b24gaWd4QnV0dG9uIGlneFJvd0VkaXRUYWJTdG9wIChjbGljayk9XCJ0aGlzLmVuZFJvd0VkaXRUYWJTdG9wKHRydWUsICRldmVudClcIj57eyB0aGlzLnJlc291cmNlU3RyaW5ncy5pZ3hfZ3JpZF9yb3dfZWRpdF9idG5fZG9uZSB9fTwvYnV0dG9uPlxuPC9uZy10ZW1wbGF0ZT5cbjxuZy10ZW1wbGF0ZSAjZGVmYXVsdFJvd0VkaXRUZW1wbGF0ZT5cbiAgICA8ZGl2IGNsYXNzPVwiaWd4LWJhbm5lcl9fbWVzc2FnZVwiPlxuICAgICAgICA8c3BhbiBjbGFzcz1cImlneC1iYW5uZXJfX3RleHRcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cInRoaXMuY3J1ZFNlcnZpY2Uucm93Py5nZXRDbGFzc05hbWUoKSA9PT0gJ0lneEFkZFJvdycgPyByb3dBZGRUZXh0IDogcmVzb2x2ZVJvd0VkaXRUZXh0IHx8IGRlZmF1bHRSb3dFZGl0VGV4dDtcbiAgICAgICAgICAgICAgICBjb250ZXh0OiB7ICRpbXBsaWNpdDogdGhpcy5jcnVkU2VydmljZS5yb3c/LmdldENsYXNzTmFtZSgpICE9PSAnSWd4QWRkUm93JyA/IHJvd0NoYW5nZXNDb3VudCA6IG51bGwgfVwiPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvc3Bhbj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwiaWd4LWJhbm5lcl9fYWN0aW9uc1wiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiaWd4LWJhbm5lcl9fcm93XCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJyZXNvbHZlUm93RWRpdEFjdGlvbnMgfHwgZGVmYXVsdFJvd0VkaXRBY3Rpb25zOyBjb250ZXh0OiB7ICRpbXBsaWNpdDogdGhpcy5lbmRFZGl0LmJpbmQodGhpcykgfVwiPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNkcmFnSW5kaWNhdG9ySWNvbkJhc2U+XG4gICAgPGlneC1pY29uPmRyYWdfaW5kaWNhdG9yPC9pZ3gtaWNvbj5cbjwvbmctdGVtcGxhdGU+XG5cbjxpZ3gtZ3JpZC1jb2x1bW4tcmVzaXplciAqbmdJZj1cImNvbFJlc2l6aW5nU2VydmljZS5zaG93UmVzaXplclwiPjwvaWd4LWdyaWQtY29sdW1uLXJlc2l6ZXI+XG48ZGl2IGNsYXNzPVwiaWd4LWdyaWRfX2xvYWRpbmctb3V0bGV0XCIgI2lneExvYWRpbmdPdmVybGF5T3V0bGV0IGlneE92ZXJsYXlPdXRsZXQ+PC9kaXY+XG48ZGl2IGNsYXNzPVwiaWd4LWdyaWRfX291dGxldFwiICNpZ3hGaWx0ZXJpbmdPdmVybGF5T3V0bGV0IGlneE92ZXJsYXlPdXRsZXQ+PC9kaXY+XG4iXX0=