ax-common-ui-lib 1.0.1-beta.34-testing → 1.0.1-beta.34-testing2

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.
@@ -839,7 +839,7 @@ export class AppListComponent {
839
839
  const dialogRef = this.dialog.open(ConfirmationModalComponent, {
840
840
  width: '30%',
841
841
  data: {
842
- title: 'Are you sure?',
842
+ title: 'Delete App',
843
843
  message: 'Are you sure want to delete this app?',
844
844
  confirmButtonText: 'Delete',
845
845
  cancelButtonText: 'Cancel',
@@ -974,7 +974,7 @@ export class AppListComponent {
974
974
  const dialogRef = this.dialog.open(ConfirmationModalComponent, {
975
975
  width: '30%',
976
976
  data: {
977
- title: 'Are you sure?',
977
+ title: 'Disable QR',
978
978
  message: 'Are you sure you want to disable QR for this form?',
979
979
  confirmButtonText: 'Disable',
980
980
  cancelButtonText: 'Cancel',
@@ -1183,4 +1183,4 @@ AppListComponent.ɵprov = /*@__PURE__*/ i0.ɵɵdefineInjectable({ token: AppList
1183
1183
  }], updateListEvent: [{
1184
1184
  type: Output
1185
1185
  }] }); })();
1186
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLWxpc3QuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2F4LWNvbW1vbi11aS1saWIvc3JjL2xpYi9hcHAtbGlzdC9hcHAtbGlzdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9zcmMvYXgtY29tbW9uLXVpLWxpYi9zcmMvbGliL2FwcC1saXN0L2FwcC1saXN0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGlDQUFpQztBQUNqQyx1REFBdUQ7QUFDdkQsMEJBQTBCO0FBQzFCLHFFQUFxRTtBQUVyRSxPQUFPLEVBQUUsU0FBUyxFQUFVLGlCQUFpQixFQUFhLEtBQUssRUFBRSxNQUFNLEVBQWlCLFlBQVksRUFBRSxpQkFBaUIsRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0osT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDN0QsT0FBTyxFQUFFLE1BQU0sRUFBcUIsTUFBTSxpQkFBaUIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMzQyxPQUFPLEVBQUUsVUFBVSxFQUFPLFNBQVMsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDNUUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLGVBQWUsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBQzdGLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFHeEQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDekQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDOUQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3JE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ZUFBQztnQkFDVixVQUFVLEVBQUUsTUFBTTthQUNuQjs7Y0FDQSxTQUFTOzJCQUNFLGNBQWMsaUJBR1QsaUJBQWlCLENBQUMsSUFBSSxhQUMxQjtvQkFDVDt3QkFDRSxPQUFPLEVBQUUsaUJBQWlCO3dCQUMxQixRQUFRLEVBQUUsRUFBRSxpQkFBaUIsRUFBRSxpQ0FBaUMsRUFBRTtxQkFDbkU7aUJBQ0Y7K2tCQUdRLE9BQU87a0JBQWYsS0FBSztZQUNHLE9BQU87a0JBQWYsS0FBSztZQUNHLGdCQUFnQjtrQkFBeEIsS0FBSztZQUNHLG9CQUFvQjtrQkFBNUIsS0FBSztZQUNHLElBQUk7a0JBQVosS0FBSztZQUNHLFFBQVE7a0JBQWhCLEtBQUs7WUFDRyxnQkFBZ0I7a0JBQXhCLEtBQUs7WUFDRyxVQUFVO2tCQUFsQixLQUFLO1lBQ0csY0FBYztrQkFBdEIsS0FBSztZQUNHLGFBQWE7a0JBQXJCLEtBQUs7WUFDRyxVQUFVO2tCQUFsQixLQUFLO1lBQ0ksa0JBQWtCO2tCQUEzQixNQUFNO1lBQ0csWUFBWTtrQkFBckIsTUFBTTtZQUNHLGVBQWU7a0JBQXhCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBhcnJvdy1wYXJlbnMgKi9cbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9tZW1iZXItb3JkZXJpbmcgKi9cbi8qIGVzbGludC1kaXNhYmxlIHJhZGl4ICovXG4vKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvZXhwbGljaXQtZnVuY3Rpb24tcmV0dXJuLXR5cGUgKi9cblxuaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIFZpZXdFbmNhcHN1bGF0aW9uLCBPbkRlc3Ryb3ksIElucHV0LCBPdXRwdXQsIFNpbXBsZUNoYW5nZXMsIEV2ZW50RW1pdHRlciwgQ2hhbmdlRGV0ZWN0b3JSZWYsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE1BVF9TRUxFQ1RfQ09ORklHIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc2VsZWN0JztcbmltcG9ydCB7IFJvdXRlciAsICBOYXZpZ2F0aW9uRXh0cmFzfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgU3ViamVjdCwgdGhyb3dFcnJvciB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgY2F0Y2hFcnJvciwgbWFwLCBzd2l0Y2hNYXAsIHRha2VVbnRpbCwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgQXhvU25hY2tCYXJTZXJ2aWNlLCBBeG9TbmFja0JhclR5cGUgfSBmcm9tICcuLi9heG8tc25hY2stYmFyL2F4by1zbmFjay1iYXIuc2VydmljZSc7XG5pbXBvcnQgeyBBdXRoU2VydmljZSB9IGZyb20gJy4uL2NvcmUvYXV0aC9hdXRoLnNlcnZpY2UnO1xuaW1wb3J0IHsgVXNlclNlcnZpY2UgfSBmcm9tICcuLi9jb3JlL3VzZXIvdXNlci5zZXJ2aWNlJztcbmltcG9ydCB7IFVzZXIgfSBmcm9tICcuLi9jb3JlL3VzZXIvdXNlci50eXBlcyc7XG5pbXBvcnQgeyBBcHBMaXN0RHRvIH0gZnJvbSAnLi9hcHAtbGlzdC1kdG8nO1xuaW1wb3J0IHsgTXlBcHBMaXN0U2VydmljZSB9IGZyb20gJy4vbXktYXBwLWxpc3Quc2VydmljZSc7XG5pbXBvcnQgeyBPcmdhbml6YXRpb25MaXN0RHRvIH0gZnJvbSAnLi9vcmdhbml6YXRpb24tbGlzdC1kdG8nO1xuaW1wb3J0IHsgTWF0RGlhbG9nIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcbmltcG9ydCB7IEZsYXR0ZW5TZXJ2aWNlIH0gZnJvbSAnLi4vZmxhdHRlbi1tb2R1bGUvZmxhdHRlbi5zZXJ2aWNlJztcbmltcG9ydCB7IElGbGF0dGVuIH0gZnJvbSAnLi4vY29tbW9uLXV0aWxzL2lGbGF0dGVuJztcbmltcG9ydCB7IEh0dHBDbGllbnQsIEh0dHBIZWFkZXJzIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgQ29va2llU2VydmljZSB9IGZyb20gJ25neC1jb29raWUtc2VydmljZSc7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBFbmxpZ2h0ZW5MaWJNb2R1bGUgfSBmcm9tICcuLi9lbmxpZ2h0ZW4tbGliL2VubGlnaHRlbi1saWIubW9kdWxlJztcbmltcG9ydCB7IFFyZGlhbG9nQ29tcG9uZW50IH0gZnJvbSAnLi4vcXJkaWFsb2cvcXJkaWFsb2cuY29tcG9uZW50JztcbmltcG9ydCB7IExvZ2dpbmdTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvbG9nZ2luZy5zZXJ2aWNlJztcbmltcG9ydCB7IExvYWRpbmdEaWFsb2dDb21wb25lbnQgfSBmcm9tICcuLi9sb2FkaW5nLWRpYWxvZy9sb2FkaW5nLWRpYWxvZy5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcblxuaW1wb3J0IHsgTG9hZGluZ0FwcGluc3RhbGxDb21wb25lbnQgfSBmcm9tICcuLi9sb2FkaW5nLWFwcGluc3RhbGwvbG9hZGluZy1hcHBpbnN0YWxsLmNvbXBvbmVudCc7IFxuaW1wb3J0IHsgQ29tbW9uU2VydmljZSB9IGZyb20gJy4uL2NvbW1vbi5zZXJ2aWNlJztcbmltcG9ydCB7IFN1Y2Nlc3NEaWFsb2dDb21wb25lbnQgfSBmcm9tICcuLi9zdWNjZXNzLWRpYWxvZy9zdWNjZXNzLWRpYWxvZy5jb21wb25lbnQnOyBcbmltcG9ydCB7IHRha2UsICB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IGZvcmtKb2luLCBvZiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgbG9jYWxlIH0gZnJvbSAnbW9tZW50JztcbmltcG9ydCB7IEFwcENyZWF0ZURpYWxvZ0NvbXBvbmVudENvbXBvbmVudCB9IGZyb20gJy4uL2FwcC1jcmVhdGUtZGlhbG9nLWNvbXBvbmVudC9hcHAtY3JlYXRlLWRpYWxvZy1jb21wb25lbnQuY29tcG9uZW50JzsgXG5cbi8vaW1wb3J0IHsgQ29uc29sZSB9IGZyb20gJ2NvbnNvbGUnO1xuaW1wb3J0IHsgQ29tbW9uTGliQ29uZmlndXJhdGlvblNlcnZpY2UgfSBmcm9tICcuLi9jb21tb24tbGliLWNvbmZpZ3VyYXRpb24uc2VydmljZSc7XG5pbXBvcnQgeyBEYXRhVmlld0ZpbHRlcnNTZXJ2aWNlIH0gZnJvbSAnLi4vZGF0YS12aWV3LWxpYi9kYXRhLXZpZXctZmlsdGVycy9kYXRhLXZpZXctZmlsdGVycy5zZXJ2aWNlJztcbmltcG9ydCB7IENvbmZpcm1hdGlvbk1vZGFsQ29tcG9uZW50IH0gZnJvbSAnLi4vc2hhcmVkL2NvbWZpcm1hdGlvbi1tb2RhbC9jb25maXJtYXRpb24tbW9kYWwuY29tcG9uZW50JztcbmltcG9ydCB7IFN1YnNjcmliZWRQbGFuTmFtZSB9IGZyb20gJy4uL3N1YnNjcmliZWRQbGFuTmFtZS5zZXJ2aWNlJztcbmltcG9ydCB7IFN0cmlwZVNlcnZpY2UgfSBmcm9tICcuLi9zdHJpcGUuc2VydmljZSc7XG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2xpYi1hcHAtbGlzdCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9hcHAtbGlzdC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2FwcC1saXN0LmNvbXBvbmVudC5zY3NzJ10sXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gIHByb3ZpZGVyczogW1xuICAgIHtcbiAgICAgIHByb3ZpZGU6IE1BVF9TRUxFQ1RfQ09ORklHLFxuICAgICAgdXNlVmFsdWU6IHsgb3ZlcmxheVBhbmVsQ2xhc3M6ICdvcmdhbml6YXRpb24tbGlzdC1vdmVybGF5LXBhbmVsJyB9LFxuICAgIH0sXG4gIF0sXG59KVxuZXhwb3J0IGNsYXNzIEFwcExpc3RDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gIEBJbnB1dCgpIGFwcExpc3Q6IEFycmF5PEFwcExpc3REdG8+O1xuICBASW5wdXQoKSBiYXNlVXJsOiBzdHJpbmc7XG4gIEBJbnB1dCgpIG9yZ2FuaXphdGlvbkxpc3Q6IEFycmF5PE9yZ2FuaXphdGlvbkxpc3REdG8+ID0gW107XG4gIEBJbnB1dCgpIHNlbGVjdGVkT3JnYW5pemF0aW9uOiBPcmdhbml6YXRpb25MaXN0RHRvO1xuICBASW5wdXQoKSB1c2VyOiBVc2VyO1xuICBASW5wdXQoKSBsaXN0VHlwZTogc3RyaW5nO1xuICBASW5wdXQoKSBzaG93Q3JlYXRlQnV0dG9uOmJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgc2hvd1FSSWNvbjpib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIHNob3dEb3RzT3B0aW9uOmJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgc2hvd0N1c3RvbWl6ZTpib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIHNob3dBZGRCdG46Ym9vbGVhbiA9IGZhbHNlO1xuICBAT3V0cHV0KCkgc3dpdGNoQWNjb3VudEV2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoKSBvcGVuQXBwRXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpIHVwZGF0ZUxpc3RFdmVudCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICAvLyB1c2VyOiBVc2VyO1xuICBpc0FwcENoYW5nZWRBZnRlclB1Ymxpc2g6IGJvb2xlYW4gPSBmYWxzZTtcbiAgdXNlck5hbWU6IHN0cmluZztcbiAgYXBwVmVyc2lvbklkOiBudW1iZXI7XG4gIHVzZXJFbWFpbDogc3RyaW5nO1xuICBmdWxsVmVyc2lvbjogc3RyaW5nO1xuICBmdWxsVmVyc2lvbnM6IHN0cmluZ1tdID0gW107XG4gIHVzZXJJbWFnZTogc3RyaW5nO1xuICB2ZXJzaW9uOiBzdHJpbmcgPSAnJztcbiAgbWlub3JWZXJzaW9uOiBzdHJpbmcgPSAnJztcbiAgYXBwSWQ6IHN0cmluZyA9Jyc7XG4gIGJ1aWxkZXJVcmw6IHN0cmluZztcbiAgb3BlblBvcHVwTWVudTogbnVtYmVyO1xuICBncmFkaWVudHMgPSBbXG4gICAgJ3JhZGlhbC1ncmFkaWVudChjaXJjbGUgYXQgODAlIDIwJSwgI0RCNkQ4MSwgI0JGNDU4MSknLFxuICAgICdyYWRpYWwtZ3JhZGllbnQoY2lyY2xlIGF0IDgwJSAyMCUsICM0NDkxRDksICM0NTU5QkYpJyxcbiAgICAncmFkaWFsLWdyYWRpZW50KGNpcmNsZSBhdCA4MCUgMjAlLCAjRTdBNzc5LCAjQUE1NTI1KScsXG4gICAgJ3JhZGlhbC1ncmFkaWVudChjaXJjbGUgYXQgODAlIDIwJSwgIzQ0RDk1MywgIzBEOTIxMiknXG4gIF07XG4gIGN1cnJlbnRVcmwgPSBkb2N1bWVudC5VUkw7XG4gIGJhc2VVc3JsID0gZG9jdW1lbnQuYmFzZVVSSTtcbiAgcmVnZXggPSAvXFwvYXBwc1xcLyhcXGQrKVxcLyhcXHcrKS87XG4gIG1hdGNoID0gdGhpcy5jdXJyZW50VXJsLm1hdGNoKHRoaXMucmVnZXgpO1xuXG4gIGRhdGEgPSB7fTtcblxuICAvKlxuICAgICAqIFN1YmplY3Qgb2JqZWN0IHdoaWNoIGhlbHBzIHVuc3Vic2NyaWJlIGFsbCB0aGUgc3Vic2NyaWJlZCBvYmplY3RzIGluIHRoZSBjb21wb25lbnRcbiAgICAgKi9cbiAgcHJpdmF0ZSBfdW5zdWJzY3JpYmVBbGw6IFN1YmplY3Q8YW55PiA9IG5ldyBTdWJqZWN0PGFueT4oKTtcbiAgb3JnYW5pemF0b25JZDogbnVtYmVyO1xuICB1c2VyUGVybWlzc2lvbnM6IHN0cmluZ1tdID0gW107IC8vIFZhcmlhYmxlIHRvIGhvbGQgdXNlciBwZXJtaXNzaW9uc1xuICBwZXJtaXNzaW9uczogYW55O1xuICBoYXNPcmdVc2VyQWNjZXNzOiBib29sZWFuO1xuICBjdXJyZW50QXBwVmVyc2lvbklkOiBzdHJpbmc7XG4gIHNob3dXZWJQb3J0YWxBY2Nlc3NPdmVybGF5OiBib29sZWFuID0gZmFsc2U7IC8vIEZsYWcgdG8gY29udHJvbCBvdmVybGF5IGRpc3BsYXlcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIF9hdXRoU2VydmljZTogQXV0aFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBfY2hhbmdlRGV0ZWN0b3JSZWY6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIHByaXZhdGUgX3VzZXJTZXJ2aWNlOiBVc2VyU2VydmljZSxcbiAgICBwcml2YXRlIGNvbW1vbkxpYkNvbmZpZzogQ29tbW9uTGliQ29uZmlndXJhdGlvblNlcnZpY2UsXG4gICAgcHJpdmF0ZSBfbXBBcHBMaXN0U2VydmljZTogTXlBcHBMaXN0U2VydmljZSxcbiAgICBwcml2YXRlIF9yb3V0ZXI6IFJvdXRlcixcbiAgICBwcml2YXRlIF9heG9TbmFja0JhcjogQXhvU25hY2tCYXJTZXJ2aWNlLFxuICAgIHByaXZhdGUgZGlhbG9nOiBNYXREaWFsb2csXG4gICAgcHJpdmF0ZSBfZmxhdHRlblNlcnZpY2U6IEZsYXR0ZW5TZXJ2aWNlLFxuICAgIHByaXZhdGUgaHR0cDogSHR0cENsaWVudCwgLy8gSW5qZWN0IEh0dHBDbGllbnRcbiAgICBwcml2YXRlIF9odHRwQ2xpZW50OiBIdHRwQ2xpZW50LFxuICAgIHByaXZhdGUgY29va2llU2VydmljZTogQ29va2llU2VydmljZSxcbiAgICBwcml2YXRlIHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcbiAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLFxuICAgIHByaXZhdGUgX2xvZ2dpbmdTZXJ2aWNlIDogTG9nZ2luZ1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBfY29tbW9uU2VydmljZTpDb21tb25TZXJ2aWNlLFxuICAgIHByaXZhdGUgX2RhdGFWaWV3RmlsdGVyc1NlcnZpY2U6IERhdGFWaWV3RmlsdGVyc1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBfc3Vic2NyaWJlZFBsYW5OYW1lOiBTdWJzY3JpYmVkUGxhbk5hbWUsXG4gICAgcHJpdmF0ZSBzdHJpcGVTZXJ2aWNlOiBTdHJpcGVTZXJ2aWNlLFxuXG4gICAgXG4gICkgeyB9XG4gIC8qKlxuICAgKiBHZXR0ZXIgZm9yIGN1cnJlbnQgeWVhclxuICAgKi9cbiAgZ2V0IGN1cnJlbnRZZWFyKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIG5ldyBEYXRlKCkuZ2V0RnVsbFllYXIoKTtcbiAgfVxuXG4gIHNldE9wZW5Qb3B1cE1lbnUoYXBwSWQpIHtcbiAgICB0aGlzLm9wZW5Qb3B1cE1lbnUgPSBhcHBJZDtcbiAgICBjb25zdCBvdmVybGF5ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLmNkay1vdmVybGF5LWNvbnRhaW5lcicpO1xuICAgIG92ZXJsYXkuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiB7XG4gICAgICB0aGlzLm9wZW5Qb3B1cE1lbnUgPSB1bmRlZmluZWQ7XG4gICAgfSk7XG4gIH1cblxuICBvcGVuUVJDb2RlRGlhbG9nKCk6IHZvaWQge1xuXG4gICAgY29uc3QgcXJEaWFsb2dSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKFFyZGlhbG9nQ29tcG9uZW50LCB7XG4gICAgICB3aWR0aDogJzI1MHB4JywgLy8gQWRqdXN0IHdpZHRoIGFzIG5lZWRlZFxuICAgIH0pO1xuICB9XG5cbiAgbmF2aWdhdGV0b09yZ2FuaWF0aW9uKCk6IHZvaWQge1xuICAgIGNvbnN0IHVybE1hcDogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSA9IHtcbiAgICAgICdsb2NhbGhvc3Q6NDIwMCc6ICdodHRwczovL2xvY2FsaG9zdDo0MjAwLycsXG4gICAgICAnbG9jYWxob3N0OjQyMDEnOiAnaHR0cHM6Ly9sb2NhbGhvc3Q6NDIwMC8nLFxuICAgICAgJ2FuZHJvbWVkYS1idWlsZGVyLXFhLmF4b25hdG9yLmNvbSc6ICdodHRwczovL2FuZHJvbWVkYS1idWlsZGVyLXFhLmF4b25hdG9yLmNvbS8nLFxuICAgICAgJ2FuZHJvbWVkYS1jb250YWluZXItcWEuYXhvbmF0b3IuY29tJzogJ2h0dHBzOi8vYW5kcm9tZWRhLWJ1aWxkZXItcWEuYXhvbmF0b3IuY29tLycsXG4gICAgICAnYnVpbGRlci5heG9uYXRvci5jb20nOiAnaHR0cHM6Ly9idWlsZGVyLmF4b25hdG9yLmNvbS8nLFxuICAgICAgJ3dlYi5heG9uYXRvci5jb20nOiAnaHR0cHM6Ly9idWlsZGVyLmF4b25hdG9yLmNvbS8nXG4gICAgfTtcbiAgICBjb25zdCB1cmw6IHN0cmluZyA9IHVybE1hcFt3aW5kb3cubG9jYXRpb24uaG9zdF0gfHwgJyc7XG4gICAgaWYgKHRoaXMubWF0Y2gpIHtcbiAgICAgIGNvbnN0IHVzZXJMaXN0VXJsID0gYGFwcHMvJHt0aGlzLm1hdGNoWzFdfS91c2Vyc2A7IC8vIGR5bmFtaWMgcGFydCBiYXNlZCBvbiBtYXRjaFxuICAgICAgd2luZG93Lm9wZW4odXJsICsgdXNlckxpc3RVcmwsICdfc2VsZicpOyAvLyBvcGVuIGR5bmFtaWMgVVJMXG4gICAgfSBlbHNlIHtcbiAgICAgIHdpbmRvdy5vcGVuKHVybCArICdvcmdhbml6YXRpb24nLCAnX3NlbGYnKTsgLy8gZmFsbGJhY2sgdG8gb3JnYW5pemF0aW9uIHJvdXRlXG4gICAgfVxuICB9ICBcblxuICBuYXZpZ2F0ZXRvT3JnYW5pYXRpb25TZXR0aW5ncygpOiB2b2lkIHtcbiAgICB0aGlzLl9yb3V0ZXIubmF2aWdhdGVCeVVybCgnb3JnYW5pemF0aW9uLXNldHRpbmdzJyk7XG4gIH1cbiAgXG5cblxuXG4gIC8vIGRlbGV0ZUFwcChhcHBJZDogc3RyaW5nLCB2ZXJzaW9uOiBzdHJpbmcpOiB2b2lkIHtcbiAgLy8gICB0aGlzLl9tcEFwcExpc3RTZXJ2aWNlLmRlbGV0ZUFwcChhcHBJZCwgdmVyc2lvbilcbiAgLy8gICAgIC5waXBlKFxuICAvLyAgICAgICB0YWtlVW50aWwodGhpcy5fdW5zdWJzY3JpYmVBbGwpLFxuICAvLyAgICAgICBjYXRjaEVycm9yKChlcnJvcikgPT4ge1xuICAvLyAgICAgICAgIGNvbnNvbGUubG9nKCdFcnJvciBvY2N1cnJlZCB3aGlsZSBkZWxldGluZyBhcHA6JywgZXJyb3IpO1xuICAvLyAgICAgICAgIC8vIHRoaXMuX3NuYWNrYmFyU2V2aWNlLm9wZW5TbmFja0JhcignRXJyb3Igb2NjdXJyZWQgd2hpbGUgZGVsZXRpbmcgYXBwLicsIEF4b1NuYWNrQmFyVHlwZS5lcnJvcik7XG4gIC8vICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXJyb3IpO1xuICAvLyAgICAgICB9KVxuICAvLyAgICAgKVxuICAvLyAgICAgLnN1YnNjcmliZShcbiAgLy8gICAgICAgLy8gcmVzcG9uc2UgPT4gdGhpcy5oYW5kbGVEZWxldGVTdWNjZXNzKHJlc3BvbnNlKSxcbiAgLy8gICAgICAgLy8gZXJyb3IgPT4gdGhpcy5oYW5kbGVEZWxldGVFcnJvcihlcnJvcilcbiAgLy8gICAgICk7XG4gIC8vIH1cblxuICAvLyBBc3N1bWluZyBfZGVsZXRlU2VydmljZSBoYXMgYSBkZWxldGVBcHAgbWV0aG9kIHRoYXQgaGFuZGxlcyBhcHAgZGVsZXRpb25cbiAgLy8gQWxzbywgYXNzdW1pbmcgaGFuZGxlRGVsZXRlU3VjY2VzcyBhbmQgaGFuZGxlRGVsZXRlRXJyb3IgYXJlIG1ldGhvZHMgdG8gaGFuZGxlIHN1Y2Nlc3MgYW5kIGVycm9yIHNjZW5hcmlvc1xuXG4gIHBhZFplcm8odmFsdWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgdmFyIHBhZGRpbmc9Jyc7XG4gICAgbGV0IGxlbmd0aD12YWx1ZS50b1N0cmluZygpLmxlbmd0aDtcbiAgICBpZihsZW5ndGg9PTEpXG4gICAge1xuICAgICAgcGFkZGluZz0nMDAnK3ZhbHVlXG4gICAgfVxuICAgIGVsc2UgaWYobGVuZ3RoPT0yKVxuICAgIHtcbiAgICAgIHBhZGRpbmc9JzAnK3ZhbHVlXG4gICAgfVxuICAgIGVsc2UgaWYobGVuZ3RoPT0zKVxuICAgIHtcbiAgICAgIHBhZGRpbmc9dmFsdWVcbiAgICB9XG4gICAgcmV0dXJuIHBhZGRpbmc7XG4gIH1cblxuICBwdWJsaWMgaGFzQXBwQnVpbGRlclBlcm1pc3Npb246IGJvb2xlYW4gPSBmYWxzZTtcblxuICBnZXRVc2VyRGV0YWlscygpOiB2b2lkIHtcbiAgICB0aGlzLl9jb21tb25TZXJ2aWNlLmdldFVzZXJEZXRhaWwoKVxuICAgICAgLnBpcGUoXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLl91bnN1YnNjcmliZUFsbCksXG4gICAgICAgIGNhdGNoRXJyb3IoKGVycm9yKSA9PiB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgZmV0Y2hpbmcgdXNlciBkZXRhaWxzOicsIGVycm9yKTtcbiAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihlcnJvcik7XG4gICAgICAgIH0pLFxuICAgICAgICB0YXAoKHVzZXJSZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgICAgY29uc3QgdXNlclBlcm1pc3Npb25zID0gdXNlclJlc3BvbnNlPy51ZD8ucGVybWlzc2lvbnMgfHwgW107XG4gICAgICAgICAgLy8gQ2hlY2sgaWYgXCJBUFBfQlVJTERFUlwiIHBlcm1pc3Npb24gZXhpc3RzXG4gICAgICAgICAgdGhpcy5oYXNBcHBCdWlsZGVyUGVybWlzc2lvbiA9IHVzZXJQZXJtaXNzaW9ucy5pbmNsdWRlcyhcIkFQUF9CVUlMREVSXCIpICYmIHVzZXJQZXJtaXNzaW9ucy5pbmNsdWRlcyhcIkFDQ0VTU19XRUJfUE9SVEFMXCIpO1xuICAgICAgICB9KVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgocmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgICBjb25zdCBzdWJzY3JpcHRpb25PcHRpb25zID0ge1xuICAgICAgICAgIGFjY291bnRJZDogcmVzcG9uc2UudWQubGFzdHVzZWRfYWNjb3VudFxuICAgICAgICB9O1xuICAgICAgICBcbiAgICAgICAgdGhpcy5zdHJpcGVTZXJ2aWNlLmdldFN1YnNjcmlwdGlvbihzdWJzY3JpcHRpb25PcHRpb25zKS5zdWJzY3JpYmUoXG4gICAgICAgICAgKHN1YnNjcmlwdGlvblJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZygnU3Vic2NyaXB0aW9uIGRldGFpbHM6Jywgc3Vic2NyaXB0aW9uUmVzcG9uc2UpO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICBpZiAoc3Vic2NyaXB0aW9uUmVzcG9uc2UgJiYgc3Vic2NyaXB0aW9uUmVzcG9uc2UubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICBjb25zdCBzdWJzY3JpcHRpb25JbmZvID0gc3Vic2NyaXB0aW9uUmVzcG9uc2VbMF07XG4gICAgICAgICAgICAgIGNvbnN0IHByb2R1Y3RPcHRpb25zID0ge1xuICAgICAgICAgICAgICAgIFByb2R1Y3RJZDogc3Vic2NyaXB0aW9uSW5mby5pdGVtc1swXS5wcm9kdWN0SWRcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgIHRoaXMuc3RyaXBlU2VydmljZS5nZXRQcm9kdWN0RGV0YWlscyhwcm9kdWN0T3B0aW9ucykuc3Vic2NyaWJlKFxuICAgICAgICAgICAgICAgIChwcm9kdWN0UmVzcG9uc2UpID0+IHtcbiAgICAgICAgICAgICAgICAgIHRoaXMuX3N1YnNjcmliZWRQbGFuTmFtZS5zdWJzY3JpYmVkUGxhbk5hbWUgPSBwcm9kdWN0UmVzcG9uc2UubmFtZTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIChlcnJvcikgPT4ge1xuICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgZmV0Y2hpbmcgcHJvZHVjdCBkZXRhaWxzOicsIGVycm9yKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICAoZXJyb3IpID0+IHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGZldGNoaW5nIHN1YnNjcmlwdGlvbiBkZXRhaWxzOicsIGVycm9yKTtcbiAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgICB9KTtcbiAgfVxuICBcblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmdldFVzZXJQZXJtaXNzaW9ucygpO1xuICAgXG4gICAgLy8gdGhpcy5jdXJyZW50QXBwVmVyc2lvbklkID0gd2luZG93LmxvY2F0aW9uLmhyZWYuc3BsaXQoXCIvXCIpWzRdO1xuICAgIC8vIHRoaXMuX25hdmlnYXRpb24udXBkYXRlQ2xhc3NpY05hdmlnYXRpb25Sb3V0ZXModGhpcy5jdXJyZW50QXBwVmVyc2lvbklkLnRvU3RyaW5nKCkpO1xuXG4gICAgLy8gRmV0Y2ggdXNlciBkZXRhaWxzXG4gICAgXG4gICAgXG4gICAgaWYgKHRoaXMudXNlcikge1xuICAgICAgdGhpcy51c2VyRW1haWwgPSB0aGlzLnVzZXIuZW1haWw7XG4gICAgICB0aGlzLnVzZXJOYW1lID0gdGhpcy51c2VyWydmbmFtZSddICsgJyAnICsgdGhpcy51c2VyWydsbmFtZSddO1xuICAgICAgdGhpcy51c2VySW1hZ2UgPSB0aGlzLnVzZXJbJ3VpbWcnXTtcbiAgICB9XG5cbiAgICB0aGlzLmdldFVzZXJEZXRhaWxzKCk7XG4gICAgXG4gIC8vQVhFLUk2Mzc2XG4gIC8vSXNzdWUgOiBQYXJhbWV0ZXJpemVkIHVybCB3YXMgbm90IG1haW50YWluIChhcHAgaW5zdGFsbGF0aW9uKSwgYXV0aG9yaXphdGlvbiBjYWxsIHNvbWVob3cgbG9zZXMgdGhlIHBhcmFtZXRlcnNcbiAgLy91cmwgc3RvcmFnZSBpcyBtYWludGFpbmVkIGJ5IHRoZSBuYW1lIFwiYXBwbmFtZVwiXG4gIC8vSXQgaXMgc2V0IGluIGF1dGgucmVzb2x2ZXIgYW5kIHJlbW92ZWQgaGVyZVxuICAvL2lmIGFwcG5hbWUgZXhpc3QgaW4gc2Vzc2lvbiB1c2VkIHRoZSBzdG9yZWQgbmFtZSwgaWYgbm90IHVzZWQgdGhlIHZhbHVlIGZyb20gdGhlIHVybFxuICAvL1xudmFyIGFwcE5hbWVjaGVjaz1sb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnYXBwbmFtZScpO1xuLy9jb25zb2xlLmxvZyhcIiExMTNcIik7XG4vLyBpZihhcHBOYW1lY2hlY2shPT1udWxsKVxuLy8ge1xuLy8gICBpZihhcHBOYW1lY2hlY2s9PVwiL2FwcHNcIilcbi8vICAge1xuLy8gICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKFwiYXBwbmFtZVwiKTtcbi8vICAgfVxuLy8gfVxuLy8gYXBwTmFtZWNoZWNrPWxvY2FsU3RvcmFnZS5nZXRJdGVtKCdhcHBuYW1lJyk7XG4vL2NvbnNvbGUubG9nKFwiITExM1wiKTtcbi8vY29uc29sZS5sb2coYXBwTmFtZWNoZWNrKVxuICAvL1xudmFyIGFwcE5hbWVjaGVjaz1sb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnYXBwbmFtZScpO1xudmFyIGFwcFB1Ymxpc2hTdGF0dXM9bG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3B1Ymxpc2hzdGF0dXMnKTtcbi8vY29uc29sZS5sb2coXCIhMTEzXCIpO1xuLy8gaWYoYXBwTmFtZWNoZWNrIT09bnVsbClcbi8vIHtcbi8vICAgaWYoYXBwTmFtZWNoZWNrPT1cIi9hcHBzXCIpXG4vLyAgIHtcbi8vICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShcImFwcG5hbWVcIik7XG4vLyAgIH1cbi8vIH1cbi8vIGFwcE5hbWVjaGVjaz1sb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnYXBwbmFtZScpO1xuLy9jb25zb2xlLmxvZyhcIiExMTNcIik7XG4vL2NvbnNvbGUubG9nKGFwcE5hbWVjaGVjaylcbiAgbGV0IGFwcG5hbWU6c3RyaW5nO1xuICBsZXQgY2F0ZWdvcnk6c3RyaW5nO1xuXG4vLyBjb25zdCB1cmxQYXJhbXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKHdpbmRvdy5sb2NhdGlvbi5zZWFyY2gpO1xuLy8gY29uc3QgYXBwTmFtZUNoZWNrID0gdXJsUGFyYW1zLmdldCgnYXBwbmFtZScpO1xuLy8gY29uc29sZS5sb2coYXBwTmFtZUNoZWNrKVxuLy8gY29uc3QgY2F0ZWdvcnkgPSB1cmxQYXJhbXMuZ2V0KCdjYXRlZ29yeScpO1xuLy8gY29uc29sZS5sb2coY2F0ZWdvcnkpaVxuXG5cbmxldCBJbnN0YWxsQXBwTmFtZTpzdHJpbmc7XG5JbnN0YWxsQXBwTmFtZT1sb2NhbFN0b3JhZ2UuZ2V0SXRlbShcIkluc3RhbGxlZEFwcE5hbWVcIik7XG5pZihJbnN0YWxsQXBwTmFtZSE9bnVsbCl7XG5jb25zdCBjYXBpdGFsaXplZEFwcE5hbWU6IHN0cmluZyA9IHRoaXMuY2FwaXRhbGl6ZVdvcmRzKEluc3RhbGxBcHBOYW1lLnJlcGxhY2UoLy0vZywgJyAnKSk7XG50aGlzLmNoZWNrQW5kUHVibGlzaEFwcChjYXBpdGFsaXplZEFwcE5hbWUpO1xubG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oXCJJbnN0YWxsZWRBcHBOYW1lXCIpO1xufVxuaWYgKGFwcE5hbWVjaGVjayAhPT0gbnVsbCkge1xuICAvL1xuICBjb25zdCB1cmxQYXJhbXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKGFwcE5hbWVjaGVjay5zcGxpdCgnPycpWzFdKTtcbiAgY29uc3QgYXBwTmFtZVRlbXAgPSB1cmxQYXJhbXMuZ2V0KCdhcHBuYW1lJyk7XG4gIGNvbnN0IGNhdGVnb3J5VGVtcCA9IHVybFBhcmFtcy5nZXQoJ2NhdGVnb3J5Jyk7XG4gIC8vY29uc3QgYXBwTmFtZVRlbXAgPSBhcHBOYW1lY2hlY2suc3BsaXQoJz0nKVsxXS5zcGxpdCgnJicpWzBdOyAvLyBFeHRyYWN0aW5nIGFwcG5hbWUgdmFsdWUgZnJvbSBVUkwgcGFyYW1ldGVyXG4gIC8vbG9jYWxTdG9yYWdlLnNldEl0ZW0oXCJJbnN0YWxsZWRBcHBOYW1lXCIsYXBwTmFtZVRlbXApXG4vLyBFeHRyYWN0aW5nIGNhdGVnb3J5IHZhbHVlIGZyb20gVVJMIHBhcmFtZXRlclxuIC8vIGNvbnN0IGNhdGVnb3J5VGVtcCA9IGFwcE5hbWVjaGVjay5zcGxpdCgnY2F0ZWdvcnk9JylbMV07XG4gIC8vXG4gIGlmIChhcHBOYW1lVGVtcCkge1xuICAgIHRoaXMuaW5zdGFsbEFwcChhcHBOYW1lVGVtcCwgY2F0ZWdvcnlUZW1wKS50aGVuKCgpID0+IHtcbiAgICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKFwiYXBwbmFtZVwiKTtcbiAgICB9KS5jYXRjaChlcnJvciA9PiB7XG4gICAgICAvLyBIYW5kbGUgZXJyb3IgaWYgaW5zdGFsbEFwcCBmYWlsc1xuICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgaW5zdGFsbGluZyBhcHA6JywgZXJyb3IpO1xuICAgICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oXCJhcHBuYW1lXCIpO1xuICAgIH0pO1xuICB9XG5cbi8vIGxldCBhcHBOYW1lOiBzdHJpbmc7IFxuLy8gaWYoYXBwTmFtZWNoZWNrIT09bnVsbCl7XG4vLyAgIGFwcE5hbWU9YXBwTmFtZWNoZWNrLnNwbGl0KCc9JylbMV0uc3BsaXQoJyUyRicpWzBdO1xuLy8gICBpZiAoYXBwTmFtZSkge1xuLy8gICAgIHRoaXMuaW5zdGFsbEFwcChhcHBOYW1lLCkudGhlbigoKSA9PiB7XG4vLyAgICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShcImFwcG5hbWVcIik7XG4gICAgICBcbi8vICAgICB9KVxuLy8gICAgIC5jYXRjaChlcnJvciA9PiB7XG4vLyAgICAgICAvLyBIYW5kbGUgZXJyb3IgaWYgaW5zdGFsbEFwcCBmYWlsc1xuLy8gICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgaW5zdGFsbGluZyBhcHA6JywgZXJyb3IpO1xuLy8gICAgIH0pO1xuLy8gICB9XG4gIFxuICBcbiAgfVxuICBlbHNle1xuICAgIC8vIFZhcmlhYmxlIHRvIHN0b3JlIGFwcG5hbWVcblxuICAgIFxuICAgIHRoaXMucm91dGUucXVlcnlQYXJhbXMucGlwZShcbiAgICAgIHRha2VVbnRpbCh0aGlzLl91bnN1YnNjcmliZUFsbClcbiAgICApLnN1YnNjcmliZShwYXJhbXMgPT4ge1xuICAgICAgYXBwbmFtZSA9IHBhcmFtc1snYXBwbmFtZSddO1xuICAgICAgLy9sb2NhbFN0b3JhZ2Uuc2V0SXRlbShcIkluc3RhbGxlZEFwcE5hbWVcIixhcHBuYW1lKTtcbiAgICAgIGNvbnNvbGUubG9nKGFwcG5hbWUpXG4gICAgICBjYXRlZ29yeSA9IHBhcmFtc1snY2F0ZWdvcnknXTtcbiAgICAgIGNvbnNvbGUubG9nKGNhdGVnb3J5KVxuICAgIFxuICAgICAgaWYgKGFwcG5hbWUpIHtcbiAgICAgICAgLy8gU3BsaXQgdGhlIGFwcG5hbWUgYXQgdGhlIGZpcnN0IG9jY3VycmVuY2Ugb2YgJy8nXG4gICAgICAgIGNvbnN0IGFwcE5hbWVQYXJ0cyA9IGFwcG5hbWUuc3BsaXQoJy8nLCAxKTtcbiAgICAgICAgY29uc3QgYXBwTmFtZSA9IGFwcE5hbWVQYXJ0c1swXTsgLy8gU3RvcmUgYXBwbmFtZVxuICAgICAgICAvL2NvbnN0IGNhdGVnb3J5ID0gY2F0ZWdvcnk7IC8vIFN0b3JlIGNhdGVnb3J5XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKFwiYXBwTmFtZT1cIithcHBOYW1lKTtcbiAgICAgICAgLy8gY29uc29sZS5sb2coXCJjYXRlZ29yeT1cIitjYXRlZ29yeSk7XG4gICAgICAgIFxuICAgICAgICAvLyBOYXZpZ2F0ZSB0byB0aGUgc2FtZSByb3V0ZSB3aXRob3V0IGFueSBxdWVyeSBwYXJhbWV0ZXJzXG4gICAgICAgIGNvbnN0IG5hdmlnYXRpb25FeHRyYXM6IE5hdmlnYXRpb25FeHRyYXMgPSB7XG4gICAgICAgICAgcmVwbGFjZVVybDogdHJ1ZSxcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW10sIG5hdmlnYXRpb25FeHRyYXMpO1xuICAgICAgICBcblxuICAgICAgICBpZiAoYXBwbmFtZSkge1xuICAgICAgICAgIGNvbnNvbGUubG9nKGFwcG5hbWUpO1xuICAgICAgICAgIGNvbnNvbGUubG9nKGNhdGVnb3J5KTtcbiAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShcInB1Ymxpc2hzdGF0dXNcIixcIkZhbHNlXCIpXG4gICAgICAgICAgdGhpcy5pbnN0YWxsQXBwKGFwcG5hbWUsY2F0ZWdvcnkpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgLy8gSGFuZGxlIHN1Y2Nlc3NmdWwgaW5zdGFsbGF0aW9uXG4gICAgICAgICAgICBjb25zb2xlLmxvZygnQXBwIGluc3RhbGxlZCBNZXRob2QgY2FsbGVkOicsIGFwcG5hbWUsIGNhdGVnb3J5KTtcbiAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKFwiYXBwbmFtZVwiKTtcbiAgICAgICAgICB9KVxuICAgICAgICAgIC5jYXRjaChlcnJvciA9PiB7XG4gICAgICAgICAgICAvLyBIYW5kbGUgZXJyb3IgaWYgaW5zdGFsbEFwcCBmYWlsc1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgaW5zdGFsbGluZyBhcHA6JywgZXJyb3IpO1xuICAgICAgICAgICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oXCJhcHBuYW1lXCIpO1xuICAgICAgICAgIH0pO1xuICAgICAgICBcbiAgICAgICAgfVxuICAgICAgLy8gfSBlbHNlIHtcbiAgICAgIC8vICAgY29uc29sZS5lcnJvcignYXBwbmFtZSBvciBjYXRlZ29yeSBxdWVyeSBwYXJhbWV0ZXIgaXMgbWlzc2luZycpO1xuICAgICAgfX0pO1xuXG4gICAgfVxuICAgIFxuICAgIC8vIG9uY2Ugd2UgZml4IGlkZW50aXR5IHNlcnZlciBBUEksIHRoaXMgY29kZSB3aWxsIGJlIG5lZWRlZCBhZ2FpblxuICAgIC8vIFN1YnNjcmliZSB0byB1c2VyIGNoYW5nZXNcbiAgICAvLyB0aGlzLl91c2VyU2VydmljZS51c2VyJFxuICAgIC8vIC5waXBlKHRha2VVbnRpbCh0aGlzLl91bnN1YnNjcmliZUFsbCkpXG4gICAgLy8gLnN1YnNjcmliZSgodXNlcjogYW55KSA9PiB7XG4gICAgLy8gICAgIHRoaXMudXNlciA9IHVzZXI7XG4gICAgLy8gICAgIHRoaXMudXNlckVtYWlsID0gdXNlci5lbWFpbDtcbiAgICAvLyAgICAgdGhpcy51c2VyTmFtZSA9IHVzZXIuRmlyc3ROYW1lICsgJyAnKyB1c2VyLkxhc3ROYW1lIDtcbiAgICAvLyAgICAgdGhpcy51c2VySW1hZ2UgPSB1c2VyLnBpY3R1cmU7XG4gICAgLy8gICAgIC8vIE1hcmsgZm9yIGNoZWNrXG4gICAgLy8gICAgIHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgIC8vIH0pO1xuXG5cblxuXG4gICAgY29uc3QgdXJsID0gc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSgndXJsJyk7XG4gICAgaWYgKHVybCkge1xuICAgICAgd2luZG93LmxvY2F0aW9uLmhyZWYgPSB1cmw7XG4gICAgICAvLyBSZW1vdmUgc2F2ZWQgZGF0YSBmcm9tIHNlc3Npb25TdG9yYWdlXG4gICAgICBzZXNzaW9uU3RvcmFnZS5yZW1vdmVJdGVtKCd1cmwnKTtcblxuICAgICAgLy8gUmVtb3ZlIGFsbCBzYXZlZCBkYXRhIGZyb20gc2Vzc2lvblN0b3JhZ2VcbiAgICAgIHNlc3Npb25TdG9yYWdlLmNsZWFyKCk7XG4gICAgfVxuXG4gIH1cblxuICBcblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgaWYgKGNoYW5nZXMuYXBwTGlzdCAmJiBjaGFuZ2VzLmFwcExpc3QuY3VycmVudFZhbHVlKSB7XG4gICAgICB0aGlzLmFzc2lnbkdyYWRpZW50cygpO1xuICAgIH1cbiAgfVxuXG4gIGFzc2lnbkdyYWRpZW50cygpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5hcHBMaXN0ICYmIHRoaXMuYXBwTGlzdC5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLmFwcExpc3QuZm9yRWFjaCgoYXBwLCBpbmRleCkgPT4ge1xuICAgICAgICBhcHAuZ3JhZGllbnQgPSB0aGlzLmdyYWRpZW50c1tpbmRleCAlIHRoaXMuZ3JhZGllbnRzLmxlbmd0aF07XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2FsbCBhcHBzIEFwcCBWZXJzaW9uIElkIHJvdXRlXG4gICAqXG4gICAqIEBwYXJhbSBhcHBWZXJzaW9uSWRcbiAgICovXG4gIG9wZW5BcHAoYXBwVmVyc2lvbklkOiBudW1iZXIpOiB2b2lkIHtcbiAgICBcbiAgICBjb25zdCBjdXJyZW50VXJsID0gd2luZG93LmxvY2F0aW9uLm9yaWdpbjsgLy8gR2V0IHRoZSBjdXJyZW50IFVSTFxuICAgIC8vIFVwZGF0ZWQgVVJMIGNoZWNrIGxvZ2ljXG4gICAgaWYgKGN1cnJlbnRVcmwuaW5jbHVkZXMoJ2xvY2FsaG9zdDo0MjAwJykgfHwgY3VycmVudFVybC5pbmNsdWRlcygnYnVpbGRlci5heG9uYXRvci5jb20nKSB8fCBjdXJyZW50VXJsLmluY2x1ZGVzKCdhbmRyb21lZGEtYnVpbGRlci1xYS5heG9uYXRvci5jb20nKSkge1xuICAgICAgXG4gICAgICAvLyBFbnN1cmUgdGhhdCB0aGUgdXNlciBpcyBkZWZpbmVkIGFuZCBoYXMgYSBVc2VySURcbiAgICAgIGlmICghdGhpcy51c2VyKSB7XG4gICAgICAgICAgdGhpcy5fYXhvU25hY2tCYXIub3BlblNuYWNrQmFyKCdVc2VyIG5vdCBmb3VuZCBvciBub3QgbG9nZ2VkIGluJywgQXhvU25hY2tCYXJUeXBlLmVycm9yKTtcbiAgICAgICAgICByZXR1cm47IC8vIEV4aXQgdGhlIG1ldGhvZCBpZiB1c2VyIGlzIG5vdCBhdmFpbGFibGVcbiAgICAgIH1cblxuICAgICAgLy8gQ2hlY2sgZm9yIHJlcXVpcmVkIHBlcm1pc3Npb25zXG4gICAgICBjb25zdCBoYXNSZXF1aXJlZFBlcm1pc3Npb24gPSB0aGlzLnBlcm1pc3Npb25zLmluY2x1ZGVzKCdBUFBfQlVJTERFUicpIHx8IHRoaXMucGVybWlzc2lvbnMuaW5jbHVkZXMoJ0FQUF9JQU0nKTtcbiAgICAgIGlmICghaGFzUmVxdWlyZWRQZXJtaXNzaW9uKSB7XG4gICAgICAgICAgdGhpcy5fYXhvU25hY2tCYXIub3BlblNuYWNrQmFyKCdZb3UgbmVlZCBlaXRoZXIgQVBQX0JVSUxERVIgb3IgQVBQX0lBTSBwZXJtaXNzaW9ucyB0byBwZXJmb3JtIHRoaXMgYWN0aW9uLicsIEF4b1NuYWNrQmFyVHlwZS5lcnJvcik7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIERpcmVjdGx5IG9wZW4gdGhlIGFwcCByZWdhcmRsZXNzIG9mIFVSTCBpZiB0aGUgY29uZGl0aW9ucyBhcmUgbm90IG1ldFxuICAgIHRoaXMub3BlbkFwcEV2ZW50LmVtaXQoYXBwVmVyc2lvbklkKTtcbiAgfVxuXG5cblxuICBuYXZpZ2F0ZVRvSG9tZShhcHBWZXJzaW9uSWQ6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMuX3JvdXRlci5uYXZpZ2F0ZUJ5VXJsKGBhcHBzLyR7YXBwVmVyc2lvbklkfS9ob21lYCk7XG4gIH1cblxuICAvKipcbiAgICogZnVuY3Rpb24gdXNlIHRvIFN3aXRjaCB0aGUgb3JnYW5pemF0aW9uXG4gICAqL1xuICBzd2l0Y2hBY2NvdW50KG9yZ2FuaXphdGlvbklkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLnN3aXRjaEFjY291bnRFdmVudC5lbWl0KG9yZ2FuaXphdGlvbklkKTtcbiAgICB0aGlzLmdldFVzZXJQZXJtaXNzaW9ucygpO1xuICAgIHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTaWduIG91dFxuICAgKi9cbiAgc2lnbk91dCgpOiB2b2lkIHtcbiAgICB0aGlzLl9sb2dnaW5nU2VydmljZS50cmFja0V2ZW50KCd1c2VyIGxvZ2dlZCBvdXQnLHtzdGVwIDogJ0J5ZSBCeWUgJyt0aGlzLnVzZXJOYW1lfSk7XG4gICAgdGhpcy5fYXV0aFNlcnZpY2Uuc2lnbk91dCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEJpbGxpbmdcbiAgICovXG4gIG5hdmlnYXRlVG9CaWxsaW5nKCk6IHZvaWQge1xuICAgIHRoaXMuX3JvdXRlci5uYXZpZ2F0ZUJ5VXJsKCdwYXltZW50aW5mby9wcmljaW5nJylcbiAgICBcbiAgfVxuXG5cblxuICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8gQ3JlYXRlIEFwcHAvLy8vLy8vLy8vLy8vLy8vLy8vXG4gIC8qKlxuICAgKnRvIGNyZWF0ZSBuZXcgYXBwXG4gICAqL1xuICAgb3BlbkNyZWF0ZUFwcERpYWxvZygpOiB2b2lkIHtcbiAgICBjb25zdCBkaWFsb2dSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKEFwcENyZWF0ZURpYWxvZ0NvbXBvbmVudENvbXBvbmVudCwge1xuICAgICAgd2lkdGg6ICc2MDBweCcsXG4gICAgICBoZWlnaHQ6ICdhdXRvJyxcbiAgICAgIHBhbmVsQ2xhc3M6ICdjdXN0b20tZGlhbG9nLWNvbnRhaW5lcicsXG4gICAgICBiYWNrZHJvcENsYXNzOiAnY3VzdG9tLWRpYWxvZy1iYWNrZHJvcCdcbiAgICB9KTtcblxuICAgIGRpYWxvZ1JlZi5hZnRlckNsb3NlZCgpLnN1YnNjcmliZShyZXN1bHQgPT4ge1xuICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICBjb25zdCB7IG5hbWUsIGRlc2NyaXB0aW9uIH0gPSByZXN1bHQ7XG5cbiAgICAgICAgdGhpcy5fYXhvU25hY2tCYXIub3BlblNuYWNrQmFyKCdDcmVhdGluZyBBcHAuLi4nLCBBeG9TbmFja0JhclR5cGUuaW5mbyk7XG4gICAgICAgIHRoaXMuY3JlYXRlQXBwKG5hbWUsIGRlc2NyaXB0aW9uKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGNyZWF0ZUFwcChuYW1lOiBzdHJpbmcsIGRlc2NyaXB0aW9uOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBmb3JtRGF0YUZvclNlcnZpY2UgPSBuZXcgRm9ybURhdGEoKTtcbiAgICBmb3JtRGF0YUZvclNlcnZpY2UuYXBwZW5kKCduYW1lJywgbmFtZSk7XG4gICAgZm9ybURhdGFGb3JTZXJ2aWNlLmFwcGVuZCgnZGVzY3JpcHRpb24nLCBkZXNjcmlwdGlvbik7XG5cbiAgICB0aGlzLl9tcEFwcExpc3RTZXJ2aWNlLmFkZEFwcEJhc2ljSW5mbyhmb3JtRGF0YUZvclNlcnZpY2UpLnRvUHJvbWlzZSgpXG4gICAgICAudGhlbihyZXNwb25zZSA9PiB7XG4gICAgICAgIGlmIChyZXNwb25zZT8uYWRkQXBwQmFzaWNJbmZvPy5zdGF0dXMgPT09ICdzdWNjZXNzJyAmJiByZXNwb25zZS5hZGRBcHBCYXNpY0luZm8uYXBwPy5hcHB2ZXJzaW9uX2lkKSB7XG4gICAgICAgICAgLy90aGlzLl9uYXZpZ2F0aW9uLnVwZGF0ZUNsYXNzaWNOYXZpZ2F0aW9uUm91dGVzKHJlc3BvbnNlLmFkZEFwcEJhc2ljSW5mby5hcHAuYXBwdmVyc2lvbl9pZCk7XG4gICAgICAgICAgLy90aGlzLl9yb3V0ZXIubmF2aWdhdGUoWydhcHBzJywgcmVzcG9uc2UuYWRkQXBwQmFzaWNJbmZvLmFwcC5hcHB2ZXJzaW9uX2lkXSk7XG4gICAgICAgICAgXG4gICAgICAgICAgdGhpcy5fYXhvU25hY2tCYXIub3BlblNuYWNrQmFyKCdBcHAgY3JlYXRlZC4nLCBBeG9TbmFja0JhclR5cGUuc3VjY2Vzcyk7XG4gICAgICAgICAgdGhpcy5vcGVuQXBwKHJlc3BvbnNlLmFkZEFwcEJhc2ljSW5mby5hcHAuYXBwdmVyc2lvbl9pZClcbiAgICAgICAgfSBlbHNlIGlmIChyZXNwb25zZT8uYWRkQXBwQmFzaWNJbmZvPy5hcHAgPT09ICdhbHJlYWR5X2V4aXN0cycpIHtcbiAgICAgICAgICB0aGlzLl9heG9TbmFja0Jhci5vcGVuU25hY2tCYXIoJ0FwcCBhbHJlYWR5IGV4aXN0cycsIEF4b1NuYWNrQmFyVHlwZS53YXJuaW5nKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLl9heG9TbmFja0Jhci5vcGVuU25hY2tCYXIoJ09vcHMhIFNvbWV0aGluZyB3ZW50IHdyb25nJywgQXhvU25hY2tCYXJUeXBlLmVycm9yKTtcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICAgIC5jYXRjaChlcnJvciA9PiB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGNyZWF0aW5nIGFwcDonLCBlcnJvcik7XG4gICAgICAgIHZhciBlcnJvck1lc3NhZ2UgPSAnT29wcyEgU29tZXRoaW5nIHdlbnQgd3JvbmcnXG4gICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgIGlmIChlcnJvciA9PT0gJ0FYX0VSUl82NycpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGVycm9yTWVzc2FnZSA9ICdPb3BzISBDYW5cXCd0IHJlYWNoIG91ciBzZXJ2ZXJzIPCfk6EuIFBsZWFzZSB3YWl0LCB3ZVxcJ2xsIG5vdGlmeSB5b3Ugc29vbi4nO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICAgIHRoaXMuX2F4b1NuYWNrQmFyLm9wZW5TbmFja0JhcihlcnJvck1lc3NhZ2UsIEF4b1NuYWNrQmFyVHlwZS5lcnJvcik7XG4gICAgICB9KTtcbiAgfVxuLy9UcnlpbmcgdG8gaW1wbGVtZW50IHVybCBhcyB3ZWxsIGFzIGJ1dHRvbiBmdW5jdGlvbmFsaXR5IGZvciBpbnN0YWxsaW5nIGFwcFxuLy8gYXN5bmMgaW5zdGFsbEFwcCh1c2VySW5wdXQ/OiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgXG4vLyAgIGlmICghdXNlcklucHV0KSB7XG4vLyAgICAgdXNlcklucHV0ID0gcHJvbXB0KCdFbnRlciB0aGUgc3RyaW5nIHRvIHNlbmQgdG8gdGhlIEFQSTonKTtcbi8vICAgICBpZiAoIXVzZXJJbnB1dCkge1xuLy8gICAgICAgLy8gSWYgdXNlciBjYW5jZWxzIG9yIHByb3ZpZGVzIG5vIGlucHV0LCBkbyBub3RoaW5nXG4vLyAgICAgICByZXR1cm47XG4vLyAgICAgfVxuLy8gICB9XG5cbi8vICAgdGhpcy5fYXhvU25hY2tCYXIub3BlblNuYWNrQmFyKCdJbnN0YWxsaW5nIEFwcC4uLicsIEF4b1NuYWNrQmFyVHlwZS5pbmZvKTtcbiAgXG4gXG5jaGVja0FuZFB1Ymxpc2hBcHAoaW5zdGFsbGVkQXBwOiBzdHJpbmcpIHtcbiAgLy9cbiAgY29uc3QgYXBwTmFtZWNoZWNrID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2FwcG5hbWUnKTsgLy8gUmVwbGFjZSB3aXRoIHlvdXIgbG9naWMgdG8gZ2V0IGFwcE5hbWVjaGVja1xuICBjb25zdCBhcHBQdWJsaXNoU3RhdHVzID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3B1Ymxpc2hzdGF0dXMnKTsgLy8gUmVwbGFjZSB3aXRoIHlvdXIgbG9naWMgdG8gZ2V0IGFwcFB1Ymxpc2hTdGF0dXNcbiAgY29uc3QgYXBwSW5zdGFsbFN0YXR1cz1sb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnaW5zdGFsbHN0YXR1cycpXG5cbiAgIGlmIChhcHBOYW1lY2hlY2sgPT0gbnVsbCAmJiBhcHBQdWJsaXNoU3RhdHVzID09IFwiRmFsc2VcIiAmJiBhcHBJbnN0YWxsU3RhdHVzPT1cIlRydWVcIikge1xuICAgIGNvbnN0IGFwcElkID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3B1Ymxpc2hBcHBJZERhdGEnKTtcbiAgICBjb25zdCBhcHBWZXJzaW9uID0gXCIxLjAwXCI7XG4gICAgY29uc3QgcHVibGlzaFN0YXR1cyA9IFwiUFwiO1xuICAgIGlmIChhcHBJZCkge1xuICAgICAgdGhpcy5fY29tbW9uU2VydmljZS5wdWJsaXNoYXBwKGFwcElkLCBhcHBWZXJzaW9uLCBwdWJsaXNoU3RhdHVzKS5zdWJzY3JpYmUoXG4gICAgICAgIHJlc3BvbnNlID0+IHtcbiAgICAgICAgICAvLyBIYW5kbGUgdGhlIHJlc3BvbnNlIGlmIG5lZWRlZFxuICAgICAgICAgIGNvbnNvbGUubG9nKCdQdWJsaXNoIHJlc3BvbnNlOicsIHJlc3BvbnNlKTtcbiAgICAgICAgICAvLyBjb25zdCBhcHBOYW1lID0gaW5zdGFsbGVkQXBwIHx8ICdZb3VyIEFwcCc7XG4gICAgICAgICAgLy8gY29uc3QgYXBwVmVyc2lvbiA9ICcxLjAwMCc7XG4gICAgICAgICAgLy8gY29uc3Qgc3VjY2Vzc01lc3NhZ2UgPSBgQXBwOiAke2FwcE5hbWV9IHZlcnNpb24gJHthcHBWZXJzaW9ufSBpcyBwdWJsaXNoZWQgc3VjY2Vzc2Z1bGx5LmA7XG4gICAgICAgICAvLyB0aGlzLm9wZW5TdWNjZXNzRGlhbG9nKCd2ZXJzaW9uIHB1Ymxpc2hlZCBzdWNjZXNzZnVsbHkhJyk7XG4gICAgICAgICBjb25zdCBhcHBOYW1lID0gaW5zdGFsbGVkQXBwO1xuICAgICAgICAgY29uc3QgYXBwVmVyc2lvbiA9ICcxLjAwMCc7XG4gICAgICAgICBjb25zdCBib3hoZWFkaW5nPWBJbnN0YWxsZWRgXG4gICAgICAgICBjb25zdCBzdWNjZXNzTWVzc2FnZSA9IGBBcHA6ICR7YXBwTmFtZX0gdmVyc2lvbiAke2FwcFZlcnNpb259IGlzIGluc3RhbGxlZCBzdWNjZXNzZnVsbHkuIGA7XG4gICAgICAgICBjb25zdCBzdWNjZXNzRGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3BlbihTdWNjZXNzRGlhbG9nQ29tcG9uZW50LCB7XG4gICAgICAgICAgIHdpZHRoOiAnNTAwcHgnLFxuICAgICAgICAgICBkYXRhOiB7IG1lc3NhZ2U6IHN1Y2Nlc3NNZXNzYWdlICwgaGVhZGluZzpib3hoZWFkaW5nfSxcbiAgICAgICAgICAgZGlzYWJsZUNsb3NlOiB0cnVlXG4gICAgICAgICB9KTtcbiAgICAgICAgICAvLyBSZW1vdmUgbG9jYWwgc3RvcmFnZSBpdGVtc1xuICAgICAgICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKCdwdWJsaXNoQXBwSWREYXRhJyk7XG4gICAgICAgICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oJ3B1Ymxpc2hzdGF0dXMnKTtcbiAgICAgICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSgnaW5zdGFsbHN0YXR1cycpO1xuICAgICAgICB9LFxuICAgICAgICBlcnJvciA9PiB7XG4gICAgICAgICAgLy8gSGFuZGxlIGVycm9yIGlmIG5lZWRlZFxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIHB1Ymxpc2hpbmcgYXBwOicsIGVycm9yKTtcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICB9XG4gIH1cbn1cbmZldGNoQXBwRGV0YWlscyhmbGF0dGVuOiBhbnkpIHtcbiAgaWYgKGZsYXR0ZW4gJiYgZmxhdHRlbi5hcHBWZXJzaW9uSWQpIHtcbiAgICB0aGlzLl9tcEFwcExpc3RTZXJ2aWNlLmZldGNoQXBwRGV0YWlscyhmbGF0dGVuLmFwcFZlcnNpb25JZCwgdGhpcy5jb21tb25MaWJDb25maWcuYXhvbmF0b3JYMVVybCkuc3Vic2NyaWJlKFxuICAgICAgKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgY29uc3QgaXNBcHBDaGFuZ2VkQWZ0ZXJQdWJsaXNoID0gcmVzcG9uc2U/LmRhdGE/LmRldGFpbHM/LmlzX2FwcF9jaGFuZ2VkX2VkaXRlZF9hZnRlcl9wdWJsaXNoIHx8IGZhbHNlO1xuICAgICAgICB0aGlzLmlzQXBwQ2hhbmdlZEFmdGVyUHVibGlzaCA9IGlzQXBwQ2hhbmdlZEFmdGVyUHVibGlzaDtcblxuICAgICAgICB0aGlzLmlzQXBwQ2hhbmdlZEFmdGVyUHVibGlzaCA9IHRydWU7XG4gICAgICAgIGNvbnNvbGUubG9nKFwiRGV0YWlscyBGb3VuZFwiKVxuICAgICAgICAvLyBUcmlnZ2VyIGNoYW5nZSBkZXRlY3Rpb24gdG8gdXBkYXRlIHRoZSB2aWV3XG4gICAgICAgIC8vIHRoaXMuZGV0ZWN0Q2hhbmdlcygpOyAvLyA8LS0tIENhbGwgZGV0ZWN0Q2hhbmdlcygpIGhlcmVcblxuICAgICAgfSxcbiAgICAgIChlcnJvcikgPT4ge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBmZXRjaGluZyBhcHAgZGV0YWlsczonLCBlcnJvcik7XG4gICAgICB9XG4gICAgKTtcbiAgfSBlbHNlIHtcbiAgICBjb25zb2xlLmVycm9yKCdhcHBWZXJzaW9uSWQgaXMgbWlzc2luZyBvciBpbnZhbGlkIGluIHRoZSBmbGF0dGVuIG9iamVjdDonLCBmbGF0dGVuKTtcbiAgfVxufVxuXG5cbmFzeW5jICBpbnN0YWxsQXBwKHVzZXJJbnB1dDogc3RyaW5nLCBjYXRlZ29yeTogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gIC8vXG4gIFxuICB0aGlzLl9heG9TbmFja0Jhci5vcGVuU25hY2tCYXIoICdJbnN0YWxsaW5nIEFwcC4uLicsIEF4b1NuYWNrQmFyVHlwZS5pbmZvKTtcbiAgY29uc3QgbG9hZGluZ0RpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nLm9wZW4oTG9hZGluZ0FwcGluc3RhbGxDb21wb25lbnQsIHtcbiAgICB3aWR0aDogJzYwMHB4JyxcbiAgICBkYXRhOiB7IGxvYWRpbmdNZXNzYWdlOiAnSW5zdGFsbGluZyBhcHAsIHBsZWFzZSB3YWl0Li4uJyB9LFxuICAgIGRpc2FibGVDbG9zZTogdHJ1ZVxuICB9KTtcbiAgLy9jb25zdCBsb2FkaW5nRGlhbG9nUmVmID0gdGhpcy5vcGVuTG9hZGluZ0RpYWxvZ1dpdGhNZXNzYWdlKCdQbGVhc2Ugd2FpdC4gSW5zdGFsbGluZyBpbiBwcm9ncmVzcy4uLicpO1xuICBcbiAgICBjb25zdCBkYXRhID0ge1xuICAgICAgcmVxdWVzdFN0cmluZzogdXNlcklucHV0LFxuICAgICAgc2Vjb25kU3RyaW5nOiBjYXRlZ29yeVxuICAgIH07IFxuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5odHRwLnBvc3Q8c3RyaW5nPignSW5zdGFsbEFwcCcsIGRhdGEsIHtcbiAgICAgIGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycyh7XG4gICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicgLy8gU2V0IGNvbnRlbnQgdHlwZSB0byBhcHBsaWNhdGlvbi9qc29uXG4gICAgICB9KSxcbiAgICAgIHdpdGhDcmVkZW50aWFsczogdHJ1ZVxuICAgIH0pLnRvUHJvbWlzZSgpO1xuXG4gICAgLy9jb25zb2xlLmxvZygnUmVzcG9uc2UgZnJvbSBzZXJ2ZXI6JywgcmVzcG9uc2UpOyBcbiAgICBcbiAgICAvL2NvbnN0IHJlc3BvbnNlT2JqZWN0ID0gSlNPTi5wYXJzZShyZXNwb25zZSk7XG4gICAgXG4gICAgXG4gIC8vICAgaWYgKHJlc3BvbnNlKSB7XG5cbiAgLy8gICAgIGlmKHJlc3BvbnNlT2JqZWN0LnN0YXR1cz09XCJzdWNjZXNzXCIpe1xuICAvLyAgICAgdGhpcy5fYXhvU25hY2tCYXIub3BlblNuYWNrQmFyKCdBcHAgaW5zdGFsbGVkIHN1Y2Nlc3NmdWxseScsIEF4b1NuYWNrQmFyVHlwZS5zdWNjZXNzKTtcbiAgLy8gICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAvLyAgICAgICB3aW5kb3cubG9jYXRpb24ucmVsb2FkKCk7XG4gIC8vICAgICB9LCAxNTAwMCk7XG4gIC8vICAgfSBlbHNlIGlmKHJlc3BvbnNlT2JqZWN0LnN0YXR1cz09J2ZhaWx1cmUnKSB7XG4gIC8vICAgICB0aGlzLl9heG9TbmFja0Jhci5vcGVuU25hY2tCYXIoJ0Zvcm0gTm90IEZvdW5kIGluIHRoaXMgYXBwJywgQXhvU25hY2tCYXJUeXBlLmVycm9yKTtcbiAgLy8gICB9XG4gIC8vICAgICBlbHNlIHtcbiAgLy8gICAgIHRoaXMuX2F4b1NuYWNrQmFyLm9wZW5TbmFja0JhcignT29wcyEgU29tZXRoaW5nIHdlbnQgd3Jvbmcgd2hpbGUgaW5zdGFsbGluZyB0aGUgYXBwLicsIEF4b1NuYWNrQmFyVHlwZS5lcnJvcik7XG4gICAgICBcbiAgLy8gICAgIGNvbnNvbGUuZXJyb3IoQXhvU25hY2tCYXJUeXBlLmVycm9yKTtcbiAgLy8gICB9fVxuICAvLyB9IGNhdGNoIChlcnJvcikge1xuICAvLyAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGluc3RhbGxpbmcgYXBwOicsIGVycm9yKTtcbiAgLy8gICB0aGlzLl9heG9TbmFja0Jhci5vcGVuU25hY2tCYXIoJ09vcHMhIFNvbWV0aGluZyB3ZW50IHdyb25nIHdoaWxlIGluc3RhbGxpbmcgdGhlIGFwcC4nLCBBeG9TbmFja0JhclR5cGUuZXJyb3IpO1xuICAvLyAgIC8vdGhpcy5fbG9nZ2luZ1NlcnZpY2UudHJhY2tFdmVudCgnRXJyb3Igb2NjdXJyZWQgd2hpbGUgaW5zdGFsbGluZyBhcHAnLCBlcnJvcik7XG4gIC8vIH1cblxuICAgIFxuICAgICAgLy9jb25zdCByZXNwb25zZU9iamVjdCA9IEpTT04ucGFyc2UocmVzcG9uc2UpO1xuICAgICAgLy9jb25zb2xlLmxvZyhyZXNwb25zZU9iamVjdCk7XG4gICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShcIkluc3RhbGxlZEFwcE5hbWVcIix1c2VySW5wdXQpXG4gICAgICBjb25zdCByZXNwb25zZU9iamVjdCA9IHR5cGVvZiByZXNwb25zZSA9PT0gJ3N0cmluZycgPyBKU09OLnBhcnNlKHJlc3BvbnNlKSA6IHJlc3BvbnNlO1xuICAgICAgXG4gICAgICBpZiAocmVzcG9uc2UpIHtcbiAgICAgICAgLy9pZiAocmVzcG9uc2VPYmplY3QpIHtcbiAgICAgICAgIGlmIChyZXNwb25zZU9iamVjdC5zdGF0dXMgPT09IFwic3VjY2Vzc1wiKSB7ICAgICAgICAgIFxuICAgICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKFwiaW5zdGFsbHN0YXR1c1wiLFwiVHJ1ZVwiKVxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgIFxuICAgICAgICAgICAgICB0aGlzLl9heG9TbmFja0Jhci5vcGVuU25hY2tCYXIoJ0FwcCBpbnN0YWxsZWQgc3VjY2Vzc2Z1bGx5JywgQXhvU25hY2tCYXJUeXBlLnN1Y2Nlc3MpO1xuICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24ucmVsb2FkKCk7XG4gICAgICAgICAgICAgIGxvYWRpbmdEaWFsb2dSZWYuY2xvc2UoKTtcbiAgICAgICAgICAgIH0sIDIwMDAwKTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICBcbiAgICAgICAgICAvLyB9IGVsc2UgaWYgKHJlc3BvbnNlT2JqZWN0LnN0YXR1cyA9PT0gJ2ZhaWx1cmUnKSB7XG4gICAgICAgICAgLy8gICB0aGlzLl9heG9TbmFja0Jhci5vcGVuU25hY2tCYXIoJ0Zvcm0gTm90IEZvdW5kIGluIHRoaXMgYXBwJywgQXhvU25hY2tCYXJUeXBlLmVycm9yKTtcbiAgICAgICAgfWVsc2Uge1xuICAgICAgICAgIHRoaXMuX2F4b1NuYWNrQmFyLm9wZW5TbmFja0JhcignRm9ybSBjYW5ub3QgYmUgZm91bmQgZm9yIHRoaXMgYXBwJywgQXhvU25hY2tCYXJUeXBlLmVycm9yKTtcbiAgICAgICAgICBsb2FkaW5nRGlhbG9nUmVmLmNsb3NlKCk7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihBeG9TbmFja0JhclR5cGUuZXJyb3IpO1xuICAgICAgICB9fVxuICAgICAgICBlbHNle1xuICAgICAgICAgIHRoaXMuX2F4b1NuYWNrQmFyLm9wZW5TbmFja0JhcignT29wcyFTb21ldGhpbmcgd2VudCB3cm9uZyB3aGlsZSBjcmVhdGluZyB0aGUgYXBwJywgQXhvU25hY2tCYXJUeXBlLmVycm9yKTtcbiAgICAgICAgICBsb2FkaW5nRGlhbG9nUmVmLmNsb3NlKCk7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihBeG9TbmFja0JhclR5cGUuZXJyb3IpO1xuICAgICAgICB9XG4gICAgfSAgIFxuXG5cbiAgICBvcGVuRGVsZXRlQXBwRGlhbG9nKGFwcFZlcnNpb25JZDpudW1iZXIpe1xuICAgICAgY29uc3QgZGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3BlbihDb25maXJtYXRpb25Nb2RhbENvbXBvbmVudCwge1xuICAgICAgICB3aWR0aDogJzMwJScsXG4gICAgICBkYXRhOiB7XG4gICAgICAgIHRpdGxlOiAnQXJlIHlvdSBzdXJlPycsXG4gICAgICAgIG1lc3NhZ2U6ICdBcmUgeW91IHN1cmUgd2FudCB0byBkZWxldGUgdGhpcyBhcHA/JyxcbiAgICAgICAgY29uZmlybUJ1dHRvblRleHQ6ICdEZWxldGUnLFxuICAgICAgICBjYW5jZWxCdXR0b25UZXh0OiAnQ2FuY2VsJyxcbiAgICAgICAgY29uZmlybUJ1dHRvblR5cGU6ICdkZWxldGUnXG4gICAgICB9LFxuICAgICAgcGFuZWxDbGFzczogJ2NvbmZpcm0tbW9kYWwtY29udGFpbmVyJ1xuICAgICAgfSk7XG5cbiAgICAgIGRpYWxvZ1JlZi5hZnRlckNsb3NlZCgpLnN1YnNjcmliZShyZXN1bHQgPT4ge1xuICAgICAgICBpZiAocmVzdWx0KSB7XG4gICAgICAgICAgdGhpcy5kZWxldGVBcHAoYXBwVmVyc2lvbklkKTsgLy8gUHJvY2VlZCB3aXRoIGRlbGV0aW9uXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGRlbGV0ZUFwcChhcHBWZXJzaW9uSWQ6bnVtYmVyKTogdm9pZCB7XG4gICAgICB0aGlzLl9mbGF0dGVuU2VydmljZS5nZXRGbGF0dGVuRGF0YShhcHBWZXJzaW9uSWQpXG4gICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLl91bnN1YnNjcmliZUFsbCksXG4gICAgICAgICAgICAgIHN3aXRjaE1hcCgoZmxhdHRlbikgPT4ge1xuICAgICAgICAgICAgICAgICAgaWYgKGZsYXR0ZW4gJiYgZmxhdHRlbi5hcHBJZCAhPT0gdW5kZWZpbmVkICYmIGZsYXR0ZW4udmVyc2lvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgY29uc3QgYXBwSWQgPSBmbGF0dGVuLmFwcElkLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICAgICAgICAgICAgY29uc3QgYXBwVmVyc2lvbiA9IGZsYXR0ZW4udmVyc2lvbi50b1N0cmluZygpO1xuICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEFwcFY9YXBwVmVyc2lvbklkO1xuICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiQXBwIHZlcnNpb24gSWQ6XCIrYXBwVmVyc2lvbklkKTtcblxuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0YT17XG4gICAgICAgICAgICAgICAgICAgICAgICBcIkFwcCBJZFwiIDogZmxhdHRlbi5hcHBJZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiQXBwIE5hbWVcIiA6IGZsYXR0ZW4uYXBwTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiQXBwIHZlcnNpb25cIiA6IGZsYXR0ZW4udmVyc2lvblxuICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdGZXRjaGVkIGFwcCBkZXRhaWxzIGZyb20gZmxhdHRlbjonLCB7IGFwcElkLCBhcHBWZXJzaW9uIH0pO1xuICBcbiAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fbXBBcHBMaXN0U2VydmljZS5kZWxldGVBcHAoYXBwSWQsIGFwcFZlcnNpb24udG9TdHJpbmcoKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXRjaEVycm9yKChlcnJvcikgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdFcnJvciBvY2N1cnJlZCB3aGlsZSBkZWxldGluZyBhcHA6JywgZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEhhbmRsZSB0aGUgZXJyb3IsIGUuZy4sIGRpc3BsYXkgYSBtZXNzYWdlIG9yIHBlcmZvcm0gYWRkaXRpb25hbCBhY3Rpb25zXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ0Vycm9yOiBmbGF0dGVuIG9iamVjdCBvciBpdHMgcHJvcGVydGllcyBhcmUgdW5kZWZpbmVkLicpO1xuICAgICAgICAgICAgICAgICAgICAgIC8vIEhhbmRsZSB0aGUgY2FzZSB3aGVyZSBmbGF0dGVuIG9yIGl0cyBwcm9wZXJ0aWVzIGFyZSB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcignRmxhdHRlbiBvYmplY3Qgb3IgaXRzIHByb3BlcnRpZXMgYXJlIHVuZGVmaW5lZCcpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgIClcbiAgICAgICAgICAuc3Vic2NyaWJlKFxuICAgICAgICAgICAgICAocmVzcG9uc2UpID0+IHtcbiAgICAgICAgICAgICAgICAgIC8vIEhhbmRsZSB0aGUgc3VjY2VzcyByZXNwb25zZSBoZXJlIGlmIG5lZWRlZFxuICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ0RlbGV0ZSBhcHAgc3VjY2VzczonLCByZXNwb25zZSk7XG4gICAgICAgICAgICAgICAgIC8vIFJlbW92ZSB0aGUgZGVsZXRlZCBhcHAgZnJvbSB0aGUgYXBwTGlzdFxuICAgICAgICAgICAgICAgICB0aGlzLmFwcExpc3QgPSB0aGlzLmFwcExpc3QuZmlsdGVyKGFwcCA9PiBhcHAuYXBwVmVyc2lvbklkICE9PSBhcHBWZXJzaW9uSWQpO1xuICAgICAgICAgICAgICAgICB0aGlzLl9heG9TbmFja0Jhci5vcGVuU25hY2tCYXIoJ0FwcCBkZWxldGVkIHN1Y2Nlc3NmdWxseScsIEF4b1NuYWNrQmFyVHlwZS5zdWNjZXNzKTtcbiAgICAgICAgICAgICAgICAgdGhpcy5fbG9nZ2luZ1NlcnZpY2UudHJhY2tFdmVudCgnQXBwIGRlbGV0ZWQnLCB0aGlzLmRhdGEpO1xuICAgICAgICAgICAgICAgICAgLy8gTWFudWFsbHkgdHJpZ2dlciBjaGFuZ2UgZGV0ZWN0aW9uIHRvIHVwZGF0ZSB0aGUgdmlld1xuICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpOyAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAoZXJyb3IpID0+IHtcbiAgICAgICAgICAgICAgICAgIC8vIEhhbmRsZSB0aGUgZXJyb3IgaGVyZSBpZiBuZWVkZWRcbiAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0RlbGV0ZSBhcHAgZXJyb3I6JywgZXJyb3IpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgKTtcbiAgfVxuICAgIFxuICBcblxucHJpdmF0ZSBvcGVuTG9hZGluZ0RpYWxvZ1dpdGhNZXNzYWdlKG1lc3NhZ2U6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICBcbiAgY29uc3QgZGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3BlbihMb2FkaW5nQXBwaW5zdGFsbENvbXBvbmVudCwge1xuICAgIHdpZHRoOiAnNTAwcHgnLFxuICAgIFxuICAgIHBhbmVsQ2xhc3M6ICdhcHAtbG9hZGluZy1kaWFsb2cnLFxuICAgIGRhdGE6IHsgbWVzc2FnZSwgdHlwZTogJ1lvdXIgYXBwIGlzIGJlaW5nIFB1Ymxpc2hlZC4uLicgfSxcbiAgfSk7XG5cbiAgcmV0dXJuIG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlKSA9PiB7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBkaWFsb2dSZWYuY2xvc2UoKTtcbiAgICAgIC8vdGhpcy5vcGVuU3VjY2Vzc0RpYWxvZygndmVyc2lvbiBwdWJsaXNoZWQgc3VjY2Vzc2Z1bGx5IScpO1xuICAgICAgcmVzb2x2ZSgpOyAvLyBSZXNvbHZlIHRoZSBwcm9taXNlIGFmdGVyIGNsb3NpbmcgdGhlIGRpYWxvZ1xuICAgIH0sIDEzODAwKTsgLy8gMTMuNiBzZWNvbmRzIGluIG1pbGxpc2Vjb25kc1xuICB9KTtcbn1cblxucHJpdmF0ZSBvcGVuU3VjY2Vzc0RpYWxvZyhtZXNzYWdlOiBzdHJpbmcpOiB2b2lkIHtcbiAgLy9cbiAgdGhpcy5fZmxhdHRlblNlcnZpY2UuZmxhdHRlbiQucGlwZShcbiAgICB0YWtlKDEpLFxuICAgIHN3aXRjaE1hcCgoZmxhdHRlbikgPT4ge1xuICAgICAgaWYgKCFmbGF0dGVuIHx8ICFmbGF0dGVuLmFwcFZlcnNpb25JZCkge1xuICAgICAgICByZXR1cm4gdGhyb3dFcnJvcignRmxhdHRlbiBvYmplY3Qgb3IgaXRzIHByb3BlcnRpZXMgYXJlIHVuZGVmaW5lZCcpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGZvcmtKb2luKHtcbiAgICAgICAgZmxhdHRlbjogb2YoZmxhdHRlbiksXG4gICAgICAgIGFwcERldGFpbHM6IHRoaXMuX21wQXBwTGlzdFNlcnZpY2UuZmV0Y2hBcHBEZXRhaWxzKGZsYXR0ZW4uYXBwVmVyc2lvbklkLCB0aGlzLmNvbW1vbkxpYkNvbmZpZy5heG9uYXRvclgxVXJsKS5waXBlKFxuICAgICAgICAgIGNhdGNoRXJyb3IoKGVycm9yKSA9PiB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBmZXRjaGluZyBhcHAgZGV0YWlsczonLCBlcnJvcik7XG4gICAgICAgICAgICByZXR1cm4gb2YobnVsbCk7XG4gICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgICAgfSk7XG4gICAgfSlcbiAgKS5zdWJzY3JpYmUoKHsgZmxhdHRlbiwgYXBwRGV0YWlscyB9KSA9PiB7XG4gICAgY29uc29sZS5sb2coJ2ZldGNoQXBwRGV0YWlscyBmdW5jdGlvbiBjYWxsZWQgNCcpO1xuICAgIHRoaXMuaXNBcHBDaGFuZ2VkQWZ0ZXJQdWJsaXNoID0gYXBwRGV0YWlscz8uZGF0YT8uZGV0YWlscz8uaXNfYXBwX2NoYW5nZWRfZWRpdGVkX2FmdGVyX3B1Ymxpc2ggfHwgZmFsc2U7IC8vIFNldCBpc0FwcENoYW5nZWRBZnRlclB1Ymxpc2ggYmFzZWQgb24gdGhlIEFQSSByZXNwb25zZVxuICAgIC8vIEZldGNoIHRoZSBtaW5vciB2ZXJzaW9uIGZyb20gZ2V0VmVyc2lvbkxpc3RcbiAgICB0aGlzLl9jb21tb25TZXJ2aWNlLmdldFZlcnNpb25MaXN0KGZsYXR0ZW4uYXBwSWQsIGZsYXR0ZW4udmVyc2lvbikuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcbiAgICAgIGxldCBhcHBNaW5vclZlcnNpb24gPSAnVW5rbm93bic7IC8vIERlZmF1bHQgdmFsdWUgaWYgbWlub3IgdmVyc2lvbiBpcyBub3QgZm91bmRcbiAgICAgIGlmIChyZXN1bHQgJiYgcmVzdWx0LnYgJiYgcmVzdWx0LnYudmVyc2lvbnNsaXN0ICYmIHJlc3VsdC52LnZlcnNpb25zbGlzdC5sZW5ndGggPiAwKSB7XG4gICAgICAgIGFwcE1pbm9yVmVyc2lvbiA9IHJlc3VsdC52LnZlcnNpb25zbGlzdFswXS5hcHBtaW5vcnZlcnNpb247XG4gICAgICB9XG4gICAgICBjb25zdCBhcHBOYW1lID0gZmxhdHRlbj8uYXBwTmFtZSB8fCAnWW91ciBBcHAnO1xuICAgICAgICBjb25zdCBhcHBWZXJzaW9uID0gZmxhdHRlbj8udmVyc2lvbiB8fCAndmVyc2lvbic7XG4gICAgICAgIGNvbnN0IHN1Y2Nlc3NNZXNzYWdlID0gYEFwcDogJHthcHBOYW1lfSB2ZXJzaW9uICR7YXBwTWlub3JWZXJzaW9ufSBpcyBJbnN0YWxsZWQgc3VjY2Vzc2Z1bGx5LmA7XG4gICAgICAgIGNvbnN0IGFwcGhlYWRpbmcgPWBJbnN0YWxsZWRgXG4gICAgICAgIGNvbnN0IHN1Y2Nlc3NEaWFsb2dSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKFN1Y2Nlc3NEaWFsb2dDb21wb25lbnQsIHtcbiAgICAgICAgICB3aWR0aDogJzUwMHB4JyxcbiAgICAgICAgICBkYXRhOiB7IG1lc3NhZ2U6IHN1Y2Nlc3NNZXNzYWdlfVxuICAgICAgICB9KTtcbiAgICB9KTtcbiAgfSk7XG59XG5cbmNhcGl0YWxpemVXb3JkcyhzdHI6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBzdHJcbiAgICAuc3BsaXQoJyAnKVxuICAgIC5tYXAod29yZCA9PiB3b3JkLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgd29yZC5zbGljZSgxKSlcbiAgICAuam9pbignICcpO1xufVxuXG5cbiAgLyoqXG4gICAqIE9uIGRlc3Ryb3lcbiAgICovXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIC8vIFVuc3Vic2NyaWJlIGZyb20gYWxsIHN1YnNjcmlwdGlvbnNcbiAgICB0aGlzLl91bnN1YnNjcmliZUFsbC5uZXh0KCk7XG4gICAgdGhpcy5fdW5zdWJzY3JpYmVBbGwuY29tcGxldGUoKTtcbiAgfVxuXG4gIGRpc2FibGVRUihhcHBWZXJzaW9uSWQ6IGFueSAsIGluZGV4OiBudW1iZXIpe1xuICAgIGxldCBkYXRhID0ge1xuICAgICAgYXBwVmVyc2lvbklkIDogYXBwVmVyc2lvbklkXG4gICAgfTtcbiAgXG4gICAgdGhpcy5fZGF0YVZpZXdGaWx0ZXJzU2VydmljZS5kaXNhYmxlUVIoZGF0YSlcbiAgICAgIC5zdWJzY3JpYmUoXG4gICAgICAgIChyZXNwb25zZSkgPT4ge1xuICAgICAgICAgIHRoaXMuX2F4b1NuYWNrQmFyLm9wZW5TbmFja0JhcignUVIgY29kZSBkaXNhYmxlZCBzdWNjZXNzZnVsbHknLCBBeG9TbmFja0JhclR5cGUuc3VjY2Vzcyk7XG4gICAgICAgICAgdGhpcy5fbG9nZ2luZ1NlcnZpY2UudHJhY2tFdmVudCgnUVIgRGlzYWJsZWQnLHtyZXNwb25zZX0pO1xuICAgICAgICAgIHRoaXMuYXBwTGlzdFtpbmRleF0ucXJfc3RhdHVzID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB9LFxuICAgICAgICAoZXJyb3IpID0+IHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvcjonLCBlcnJvcik7XG4gICAgICAgICAgLy8gSGFuZGxlIHRoZSBlcnJvclxuICAgICAgICB9XG4gICAgICApOyAgXG4gIH1cblxuICBkaXNhYmxlUVJEaWFsb2coYXBwVmVyc2lvbklkOiBhbnksIGluZGV4OiBudW1iZXIpe1xuICAgIGNvbnN0IGRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nLm9wZW4oQ29uZmlybWF0aW9uTW9kYWxDb21wb25lbnQsIHtcbiAgICAgIHdpZHRoOiAnMzAlJyxcbiAgICAgIGRhdGE6IHtcbiAgICAgICAgdGl0bGU6ICdBcmUgeW91IHN1cmU/JyxcbiAgICAgICAgbWVzc2FnZTogJ0FyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBkaXNhYmxlIFFSIGZvciB0aGlzIGZvcm0/JyxcbiAgICAgICAgY29uZmlybUJ1dHRvblRleHQ6ICdEaXNhYmxlJyxcbiAgICAgICAgY2FuY2VsQnV0dG9uVGV4dDogJ0NhbmNlbCcsXG4gICAgICAgIGNvbmZpcm1CdXR0b25UeXBlOiAnZGVsZXRlJ1xuICAgICAgfSxcbiAgICAgIHBhbmVsQ2xhc3M6ICdjb25maXJtLW1vZGFsLWNvbnRhaW5lcidcbiAgICB9KTtcbiAgICBkaWFsb2dSZWYuYWZ0ZXJDbG9zZWQoKS5zdWJzY3JpYmUocmVzdWx0ID0+IHtcbiAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgdGhpcy5kaXNhYmxlUVIoYXBwVmVyc2lvbklkLCBpbmRleCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBnZXRVc2VyUGVybWlzc2lvbnMoKSB7XG4gICAgdGhpcy5fY29tbW9uU2VydmljZS5nZXRVc2VyRGV0YWlsKCkuc3Vic2NyaWJlKFxuICAgICAgKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PT0gJ3N1Y2Nlc3MnICYmIHJlc3BvbnNlLnVkKSB7XG4gICAgICAgICAgdGhpcy5wZXJtaXNzaW9ucyA9IHJlc3BvbnNlLnVkLnBlcm1pc3Npb25zOyAvLyBFeHRyYWN0IHBlcm1pc3Npb25zXG4gICAgICAgICAgdGhpcy5oYXNPcmdVc2VyQWNjZXNzID0gdGhpcy5wZXJtaXNzaW9ucy5pbmNsdWRlcygnT1JHX0lBTScpOyAvLyBDaGVjayBpZiAnT1JHX0lBTScgaXMgaW4gdGhlIHBlcm1pc3Npb25zIGFycmF5XG4gICAgICAgICAgXG4gICAgICAgICAgLy8gU2hvdyBvdmVybGF5IG9ubHkgaWYgJ0FDQ0VTU19XRUJfUE9SVEFMJyBwZXJtaXNzaW9uIGlzIG5vdCBwcmVzZW50XG4gICAgICAgICAgdGhpcy5zaG93V2ViUG9ydGFsQWNjZXNzT3ZlcmxheSA9ICF0aGlzLnBlcm1pc3Npb25zLmluY2x1ZGVzKCdBQ0NFU1NfV0VCX1BPUlRBTCcpO1xuXG4gICAgICAgICAgY29uc29sZS5sb2coJ1VzZXIgUGVybWlzc2lvbnM6JywgdGhpcy5wZXJtaXNzaW9ucyk7XG4gICAgICAgICAgY29uc29sZS5sb2coJ0lzIEJ1aWxkZXIgQWNjZXNzOicsIHRoaXMuaGFzT3JnVXNlckFjY2Vzcyk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICAoZXJyb3IpID0+IHtcbiAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgZmV0Y2hpbmcgdXNlciBkZXRhaWxzOicsIGVycm9yKTtcbiAgICAgIH1cbiAgICApO1xuICB9XG4gIGlzUmVzdHJpY3RlZFVybCgpOiBib29sZWFuIHtcbiAgICBjb25zdCByZXN0cmljdGVkVXJscyA9IFtcbiAgICAgICdodHRwczovL2FuZHJvbWVkYS1jb250YWluZXItcWEuYXhvbmF0b3IuY29tL2FwcHMnLFxuICAgICAgJ2h0dHBzOi8vbG9jYWxob3N0OjQyMDEvYXBwcycsXG4gICAgICAnaHR0cHM6Ly93ZWIuYXhvbmF0b3IuY29tJ1xuICAgIF07XG4gICAgcmV0dXJuIHJlc3RyaWN0ZWRVcmxzLmluY2x1ZGVzKHdpbmRvdy5sb2NhdGlvbi5ocmVmKTtcbiAgfVxufVxuXG4iLCI8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbCBmbGV4LWF1dG8gaC1mdWxsLWFwcExpc3QgbXktYXBwLWxpc3Qgb3ZlcmZsb3ctaGlkZGVuIHBhZ2UtYmFja2dyb3VuZCBheG8tZm9udFwiPlxuICAgIDwhLS0gSGVhZGVyIC0tPlxuICAgIDxkaXYgY2xhc3M9XCJzdGlja3kgdG9wLTAgYmctd2hpdGVcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImFwcC1saXN0LW1haW4taGVhZGVyIHJlbGF0aXZlIGZsZXggZmxleC0wIGgtMTIgei00OSBib3gtYm9yZGVyIHB4LTZcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtYXV0byBpdGVtcy1jZW50ZXIgbWluLXctMFwiPiA8aW1nIGNsYXNzPVwidy0zNiBoLTdcIiBzcmM9XCJhc3NldHMvaW1hZ2VzL2xvZ28vYXhvLWxvZ28uc3ZnXCIgYWx0PVwiTG9nbyBpbWFnZVwiPiA8c3BhbiBjbGFzcz1cImJldGFcIj5CZXRhPC9zcGFuPiA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtYXV0byBqdXN0aWZ5LWVuZCBpdGVtcy1jZW50ZXIgbWluLXctMCBnYXAtM1wiPlxuICAgICAgICAgICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uIGNsYXNzPVwibXQtMS41XCI+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBzdmdJY29uPVwiYXhvX3NlYXJjaFwiPjwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gY2xhc3M9XCJtdC0xLjVcIj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXIgYXhvX25vdGlmaWN0aW9uLTJcIiBtYXRUb29sdGlwPVwiTm90aWZpY2F0aW9uXCIgc3ZnSWNvbj1cImF4b19ub3RpZmljdGlvbi0yXCI+PC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8IS0tIG9uY2Ugd2UgZml4IGlkZW50aXR5IHNlcnZlciBBUEksIHRoaXMgY29kZSB3aWxsIGJlIG5lZWRlZCBhZ2FpblxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XCIgbWF0LWljb24tYnV0dG9uIFttYXRNZW51VHJpZ2dlckZvcl09XCJ1c2VyUHJvZmlsZTA5TWVudVwiPlxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwidXNlckltYWdlOyBlbHNlIGlzRW1wdHlJbWFnZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBbc3JjXT1cImJhc2VVcmwgKyAnaW1hZ2VzLycrIHVzZXJJbWFnZVwiIG9uRXJyb3IgPVwidGhpcy5zcmM9J2Fzc2V0cy9pY29ucy9vcmdhbml6YXRpb24ucG5nJ1wiIGNsYXNzPVwiaW5saW5lIG9iamVjdC1jb3ZlciB3LTcgaC03IG1yLTIgb3JnYW5pemF0aW9uSWNvblwiIGFsdD1cImF2dGFyXCI+XG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2lzRW1wdHlJbWFnZT5cblxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gIGNsYXNzPVwiZW1wdHktYXBwLWljb25cIj57eyAodXNlclsnRmlyc3ROYW1lJ10pLmNoYXJBdCgwKSArIFwiXCIgKyAgKHVzZXJbJ0xhc3ROYW1lJ10pLmNoYXJBdCgwKSB8IHVwcGVyY2FzZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8bWF0LW1lbnUgI3VzZXJQcm9maWxlMDlNZW51PVwibWF0TWVudVwiPlxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1tZW51LWl0ZW0gY2xhc3M9XCJoLWZ1bGxcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJ1c2VySW1hZ2U7IGVsc2UgaXNFbXB0eVByb2ZpbGVJbWFnZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgY2xhc3M9XCJvcmdhbml6YXRpb25JY29uXCIgW3NyY109XCJiYXNlVXJsICsgJ2ltYWdlcy8nKyB1c2VySW1hZ2VcIiBhbHQ9XCJcIiBvbkVycm9yID1cInRoaXMuc3JjPSdhc3NldHMvaWNvbnMvb3JnYW5pemF0aW9uLnBuZydcIi8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjaXNFbXB0eVByb2ZpbGVJbWFnZT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAgY2xhc3M9XCJ1c2VyRW1wdHlJY29uXCI+e3sgKHVzZXJbJ0ZpcnN0TmFtZSddKS5jaGFyQXQoMCkgKyBcIlwiICsgICh1c2VyWydMYXN0TmFtZSddKS5jaGFyQXQoMCkgfCB1cHBlcmNhc2UgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlubGluZS1ncmlkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ1c2VyLW5hbWUtdGl0bGUgXCI+e3sgdXNlckVtYWlsIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidXNlci1lbWFpbGlkIFwiPnt7IHVzZXJOYW1lIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1tZW51LWl0ZW0gY2xhc3M9XCJvcmdhbml6YXRpb24tc2VjdGlvblwiIChjbGljayk9XCJzaWduT3V0KClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibG9nb3V0LXRpdGxlXCI+TG9nb3V0PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8L21hdC1tZW51PiAtLT5cblxuICAgICAgICAgICAgICAgIDxidXR0b24gKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcIiBtYXQtaWNvbi1idXR0b24gW21hdE1lbnVUcmlnZ2VyRm9yXT1cInVzZXJQcm9maWxlMDlNZW51XCI+XG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJ1c2VySW1hZ2U7IGVsc2UgaXNFbXB0eUltYWdlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aW1nIFtzcmNdPVwiYmFzZVVybCArIHVzZXJJbWFnZVwiIG9uRXJyb3IgPVwidGhpcy5zcmM9J2Fzc2V0cy9pY29ucy9vcmdhbml6YXRpb24uc3ZnJ1wiIGNsYXNzPVwib3JnYW5pemF0aW9uSWNvblwiIGFsdD1cImF2dGFyXCI+XG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2lzRW1wdHlJbWFnZT5cblxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gIGNsYXNzPVwidXBwZXJjYXNlIGZvbnQtbWVkaXVtIGN1cnNvci1wb2ludGVyIHRleHQtc20gaC04IHctOCBmbGV4IGp1c3RpZnktY2VudGVyIGl0ZW1zLWNlbnRlciBtbC0yIGJnLWdyYXktMzAwIHJvdW5kZWQtZnVsbFwiPnt7ICh1c2VyWydmbmFtZSddKS5jaGFyQXQoMCkgKyBcIlwiICsgICh1c2VyWydsbmFtZSddKS5jaGFyQXQoMCkgfCB1cHBlcmNhc2UgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgPG1hdC1tZW51ICN1c2VyUHJvZmlsZTA5TWVudT1cIm1hdE1lbnVcIiBiYWNrZHJvcENsYXNzPVwiYXBwLWxpc3QtbWF0LW1lbnUtcGFuZWwtY2xhc3NcIj5cbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBtYXQtbWVudS1pdGVtIGNsYXNzPVwiaC1mdWxsIHVzZXItaW5mb1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInVzZXJJbWFnZTsgZWxzZSBpc0VtcHR5UHJvZmlsZUltYWdlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBjbGFzcz1cIm9yZ2FuaXphdGlvbkljb25wcm9maWxlXCIgW3NyY109XCJiYXNlVXJsICsgdXNlckltYWdlXCIgYWx0PVwiXCIgb25FcnJvciA9XCJ0aGlzLnNyYz0nYXNzZXRzL2ljb25zL29yZ2FuaXphdGlvbi5zdmcnXCIvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2lzRW1wdHlQcm9maWxlSW1hZ2U+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gIGNsYXNzPVwidXNlckVtcHR5SWNvblwiPnt7ICh1c2VyWydmbmFtZSddKS5jaGFyQXQoMCkgKyBcIlwiICsgICh1c2VyWydsbmFtZSddKS5jaGFyQXQoMCkgfCB1cHBlcmNhc2UgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlubGluZS1ncmlkIHB5LTNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInVzZXItZW1haWxpZFwiPnt7IHVzZXJFbWFpbCB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInVzZXItbmFtZS10aXRsZVwiPnt7IHVzZXJOYW1lIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWRpdmlkZXIgY2xhc3M9XCJteS0wXCI+PC9tYXQtZGl2aWRlcj5cbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBtYXQtbWVudS1pdGVtIGNsYXNzPVwidXNlci1sb2dvdXQtYnRuIG9yZ2FuaXphdGlvbi1idG5cIiAoY2xpY2spPVwibmF2aWdhdGV0b09yZ2FuaWF0aW9uKClcIiAqbmdJZj1cImhhc09yZ1VzZXJBY2Nlc3NcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gPG1hdC1pY29uIFtzdmdJY29uXT1cIidoZXJvaWNvbnNfb3V0bGluZTp1c2VyLWdyb3VwJ1wiPjwvbWF0LWljb24+IC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJsb2dvdXQtbGFiZWxcIj5Pcmdhbml6YXRpb24gVXNlcnM8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBtYXQtbWVudS1pdGVtIGNsYXNzPVwidXNlci1sb2dvdXQtYnRuIG9yZ2FuaXphdGlvbi1idG5cIiAoY2xpY2spPVwibmF2aWdhdGV0b09yZ2FuaWF0aW9uU2V0dGluZ3MoKVwiICpuZ0lmPVwiaGFzT3JnVXNlckFjY2Vzc1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSA8bWF0LWljb24gW3N2Z0ljb25dPVwiJ2hlcm9pY29uc19vdXRsaW5lOnVzZXItZ3JvdXAnXCI+PC9tYXQtaWNvbj4gLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImxvZ291dC1sYWJlbFwiPk9yZ2FuaXphdGlvbiBTZXR0aW5nczwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1tZW51LWl0ZW0gY2xhc3M9XCJ1c2VyLWxvZ291dC1idG4gYmlsbGluZy1idG5cIiAoY2xpY2spPVwibmF2aWdhdGVUb0JpbGxpbmcoKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSA8bWF0LWljb24gW3N2Z0ljb25dPVwiJ2hlcm9pY29uc19vdXRsaW5lOmNyZWRpdC1jYXJkJ1wiPjwvbWF0LWljb24+IC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJsb2dvdXQtbGFiZWxcIj5CaWxsaW5nPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWRpdmlkZXIgY2xhc3M9XCJteS0wXCI+PC9tYXQtZGl2aWRlcj5cbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBtYXQtbWVudS1pdGVtIGNsYXNzPVwidXNlci1sb2dvdXQtYnRuXCIgKGNsaWNrKT1cInNpZ25PdXQoKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSA8bWF0LWljb24gW3N2Z0ljb25dPVwiJ2hlcm9pY29uc19vdXRsaW5lOmxvZ291dCdcIj48L21hdC1pY29uPiAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibG9nb3V0LWxhYmxlXCI+TG9nb3V0PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cblxuICAgICAgICAgICAgICAgIDwvbWF0LW1lbnU+XG5cblxuXG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDwhLS0gSGVhZGVyIC0tPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiYXBwLWxpc3QtbWFpbi1zdWJoZWFkZXJcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhcHAtbGlzdC1oZWFkZXIgcmVsYXRpdmUgZmxleCBmbGV4LTAgaXRlbXMtY2VudGVyIHotNDkgYm94LWJvcmRlciBweC00IHNtOnB4LTZcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWF1dG8gaXRlbXMtY2VudGVyIG1pbi13LTAgZ2FwLTNcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIGhvdmVyOmJnLWdyYXktMTAwIHAtMiByb3VuZGVkLWxnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT1cInN0YW5kYXJkXCIgY2xhc3M9XCJzbTp3LWZ1bGwgZmxleCBpdGVtcy1jZW50ZXIgb3JnYW5pemF0aW9uLW1hdC1zZWxlY3RcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LXNlbGVjdCBbKG5nTW9kZWwpXT1cInNlbGVjdGVkT3JnYW5pemF0aW9uXCIgcGxhY2Vob2xkZXI9XCJzZWxlY3QgT3JnYW5pemF0aW9uXCIgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LXNlbGVjdC10cmlnZ2VyIGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXJcIiAqbmdJZj1cInNlbGVjdGVkT3JnYW5pemF0aW9uXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIGNsYXNzPVwib3JnYW5pemF0aW9uSWNvblwiIGFsdD1cIlwiIFtzcmNdPVwiKHNlbGVjdGVkT3JnYW5pemF0aW9uLmljb24uaW5kZXhPZignaHR0cHM6Ly8nKSAhPT0gLTEpID8gc2VsZWN0ZWRPcmdhbml6YXRpb24uaWNvbiA6IGJhc2VVcmwgKyBzZWxlY3RlZE9yZ2FuaXphdGlvbi5pY29uXCIgb25FcnJvciA9XCJ0aGlzLnNyYz0nYXNzZXRzL2ljb25zL29yZ2FuaXphdGlvbi5zdmcnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm9yZy1uYW1lXCIgW21hdFRvb2x0aXBdPVwic2VsZWN0ZWRPcmdhbml6YXRpb24ubmFtZVwiPiB7eyBzZWxlY3RlZE9yZ2FuaXphdGlvbi5uYW1lIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBDdXN0b20gYXJyb3cgaWNvbiAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gPG1hdC1pY29uIGNsYXNzPVwiZHJvcGRvd24tYXJyb3dcIiBzdmdJY29uPVwiZHJvcGRvd24tYXJyb3dcIj48L21hdC1pY29uPiAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0LXRyaWdnZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzd2l0Y2ggZmxleCBwLTIgZ2FwLTIgcGwtNCBpdGVtcy1jZW50ZXIgY3Vyc29yLXBvaW50ZXIgXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gc3ZnSWNvbj1cImF4b19zd2l0Y2hcIiBjbGFzcz1cInN3aXRjaC1pY29uIGgtOCB3LThcIj48L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzd2l0Y2gtc3BhblwiPlN3aXRjaCBPcmdhbml6YXRpb248L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAgY2xhc3M9XCJvcmdhbml6YXRpb25MaXN0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBvcmdhbml6YXRpb24gb2Ygb3JnYW5pemF0aW9uTGlzdDsgbGV0IG9yZ2FuaXphdGlvbkluZGV4ID0gaW5kZXhcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cIm9yZ2FuaXphdGlvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwic3dpdGNoQWNjb3VudChvcmdhbml6YXRpb24uaWQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzZWxlY3RlZF09XCJzZWxlY3RlZE9yZ2FuaXphdGlvbi5pZCA9PT0gb3JnYW5pemF0aW9uLmlkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJvcmctaWNvbi1zcGFuXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBjbGFzcz1cIm9yZ2FuaXphdGlvbkljb25cIiBhbHQ9XCJcIiBbc3JjXT1cIihvcmdhbml6YXRpb24uaWNvbi5pbmRleE9mKCdodHRwczovLycpICE9PSAtMSkgPyBvcmdhbml6YXRpb24uaWNvbiA6IGJhc2VVcmwgKyBvcmdhbml6YXRpb24uaWNvblwiIG9uRXJyb3IgPVwidGhpcy5zcmM9J2Fzc2V0cy9pY29ucy9vcmdhbml6YXRpb24uc3ZnJ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic206dGV4dC1sZyB0ZXh0LXhzIGZvbnQtbWVkaXVtIG9yZy1uYW1lXCI+IHt7IG9yZ2FuaXphdGlvbi5uYW1lfX08L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNtOnRleHQtbGcgdGV4dC14cyBmb250LW1lZGl1bSBtYWluLXRpdGxlXCI+TXkgQXBwczwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwiaGFzQXBwQnVpbGRlclBlcm1pc3Npb24gJiYgIWlzUmVzdHJpY3RlZFVybCgpXCIgY2xhc3M9XCJwcmltYXJ5LWJ0biBheG8tZm9udCB3LTI4XCIgKGNsaWNrKT1cIm9wZW5DcmVhdGVBcHBEaWFsb2coKVwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPkNyZWF0ZSBBcHA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPCEtLSBBcHAgTGlzdCB3aXRoIE92ZXJsYXkgLS0+XG4gICAgPGRpdiBjbGFzcz1cInJlbGF0aXZlIGZsZXgtYXV0byBhcHAtbGlzdCBoLWZ1bGwtYXBwTGlzdCBweC00IHB5LTUgc206cHktOCBvdmVyZmxvdy1hdXRvXCI+XG4gICAgICAgIDwhLS0gT3ZlcmxheSBmb3Igd2ViIHBvcnRhbCBhY2Nlc3MgLS0+XG4gICAgICAgIDxkaXYgKm5nSWY9XCJzaG93V2ViUG9ydGFsQWNjZXNzT3ZlcmxheVwiIGNsYXNzPVwicGVybWlzc2lvbi1vdmVybGF5XCI+XG4gICAgICAgICAgICBZb3UgZG9uJ3QgaGF2ZSBwZXJtaXNzaW9uIHRvIGFjY2VzcyBXZWIgUG9ydGFsLlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiYXBwTGlzdC5sZW5ndGg7IGVsc2Ugbm90RW1wdHlBcHBMaXN0XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXBwLWdyaWQgaXRlbXMtc3RhcnQgY2FyZC1ib2R5IHctZnVsbFwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLW91dGVyLWRpdlwiICpuZ0Zvcj1cImxldCBhcHBEZXRhaWwgb2YgYXBwTGlzdDsgbGV0IGkgPSBpbmRleFwiPlxuICAgICAgICAgICAgICAgICAgICA8ZnVzZS1jYXJkIGNsYXNzPVwiZnVzZS1jYXJkLWFwcCBmbGV4IGZsZXgtY29sIGdhcC0yIGZpbHRlci1saXN0XCIgW25nU3R5bGVdPVwieydiYWNrZ3JvdW5kJzogYXBwRGV0YWlsLmdyYWRpZW50fVwiIChjbGljayk9XCJvcGVuQXBwKGFwcERldGFpbC5hcHBWZXJzaW9uSWQpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiYXBwRGV0YWlsLnFyX3N0YXR1cyA9PT0gdHJ1ZSAmJiBzaG93UVJJY29uXCIgKGNsaWNrKT1cImRpc2FibGVRUkRpYWxvZyhhcHBEZXRhaWwuYXBwVmVyc2lvbklkLCBpKTsgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1wiIGNsYXNzPVwiZmxleCBqdXN0aWZ5LWNlbnRlciBpdGVtcy1jZW50ZXIgYm9yZGVyLTAgcm91bmRlZC1mdWxsIHFyLWljb24gYmctd2hpdGUgYWJzb2x1dGUgdG9wLTQgcmlnaHQtNFwiICBbbmdDbGFzc109XCJ7J2FwcEhvdmVyJzogb3BlblBvcHVwTWVudSA9PT0gYXBwRGV0YWlsLmFwcFZlcnNpb25JZH1cIiBzdHlsZT1cInBhZGRpbmc6IC4zcmVtO1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgbWF0VG9vbHRpcD1cIkRpc2FibGUgUVJcIiAgc3JjPVwiYXNzZXRzL2ljb25zL2F4by9zY3VscHRvci9heG9fcXJjb2RlX25ldy5zdmdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWx0PVwiXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiaC0zIHctMyBvYmplY3QtY292ZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBjYXJkIGp1c3RpZnktYmV0d2VlblwiIHN0eWxlPVwibWFyZ2luLWxlZnQ6IC0yMHB4O1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkb3RzLXZlcnRpY2FsLWFwcFwiICpuZ0lmPVwic2hvd0RvdHNPcHRpb25cIiAgW25nQ2xhc3NdPVwieydhcHBIb3Zlcic6IG9wZW5Qb3B1cE1lbnUgPT09IGFwcERldGFpbC5hcHBWZXJzaW9uSWR9XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtzZXRPcGVuUG9wdXBNZW51KGFwcERldGFpbC5hcHBWZXJzaW9uSWQpXCIgbWF0LWljb24tYnV0dG9uIFtkaXNhYmxlUmlwcGxlXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbWF0TWVudVRyaWdnZXJGb3JdPVwiY29udGV4dE1lbnVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIFtzdmdJY29uXT1cIidoZXJvaWNvbnNfc29saWQ6ZG90cy12ZXJ0aWNhbCdcIiBzdHlsZT1cImNvbG9yOiAjRkZGRkZGO1wiPjwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1tZW51ICNjb250ZXh0TWVudT1cIm1hdE1lbnVcIiBjbGFzcz1cImN1c3RvbWl6ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD1cInJlcG9ydC1tZW51XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBtYXQtbWVudS1pdGVtIChjbGljayk9XCJvcGVuUVJDb2RlRGlhbG9nKClcIiAgY2xhc3M9XCJweS0wIHBsLTQgcHItNlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz1cImFzc2V0cy9pY29ucy9vcHRpb25zLW1vYmlsZS5zdmdcIiBhbHQ9XCJcIiBjbGFzcz1cImgtNiB3LTYgaW5saW5lLWJsb2NrIG1yLTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+VXNlIE9uIE1vYmlsZTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD1cInJlcG9ydC1tZW51XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBtYXQtbWVudS1pdGVtIChjbGljayk9XCJvcGVuRGVsZXRlQXBwRGlhbG9nKGFwcERldGFpbC5hcHBWZXJzaW9uSWQpXCIgIGNsYXNzPVwicHktMCBwbC00IHByLTZcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9XCJhc3NldHMvaWNvbnMvb3B0aW9ucy1kZWxldGUuc3ZnXCIgYWx0PVwiXCIgY2xhc3M9XCJoLTYgdy02IGlubGluZS1ibG9jayBtci0yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPkRlbGV0ZTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1tZW51PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1pbm5lci1kaXZcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgZGFzaGJvYXJkLWljb25cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBbc3JjXT1cImJhc2VVcmwgKyBhcHBEZXRhaWwuaWNvblwiIG9uRXJyb3IgPVwidGhpcy5zcmM9J2h0dHBzOi8vc3RhdGljLmF4b25hdG9yLmNvbS9zdGF0aWMvZGVmYXVsdF9pY29ucy9hcHAucG5nJ1wiIGFsdD1cIkxvZ28gaW1hZ2VcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtY29udGVudFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhcHAtaW5mb1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYmxvY2sgYXBwLXRpdGxlLXdyYXBwZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhcHBfdGl0bGUgZm9udC1tZWRpdW0gbGVhZGluZy10aWdodCBheG8tZm9udFwiIFttYXRUb29sdGlwXT1cImFwcERldGFpbC5uYW1lXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3thcHBEZXRhaWwubmFtZX19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhcHBfdmVyc2lvbiB3LWZ1bGwgbGVhZGluZy10aWdodCB0ZXh0LXhzXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2IHt7YXBwRGV0YWlsLnZlcnNpb24uc3BsaXQoJy4nKVswXX19Lnt7cGFkWmVybyhhcHBEZXRhaWwubWlub3JWZXJzaW9uKX19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjdXN0LW9wZW4gZmxleCBqdXN0aWZ5LWVuZCB3LWZ1bGxcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1yb3cgaXRlbXMtY2VudGVyIGp1c3RpZnktZW5kIHNwYWNlLXgtMlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgKm5nSWY9XCJzaG93Q3VzdG9taXplXCIgcm91dGVyTGluaz1cIlwiIGNsYXNzPVwiY3VzdG9taXplIHRleHQtbGVmdCBsZWFkaW5nLXRpZ2h0IHRleHQteHNcIj5DdXN0b21pemU8L2E+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwib3Blbi1idXR0b25cIj5PcGVuPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZnVzZS1jYXJkPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICBcbiAgICA8L2Rpdj5cbiAgICA8bmctdGVtcGxhdGUgI25vdEVtcHR5QXBwTGlzdD5cbiAgICAgICAgPCEtLSBpZiBhcHAgbGlzdCBpcyBlbXB0eSAtLT5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2wgZmxleC1hdXRvIG1pbi13LTAgcmVsYXRpdmUgaXRlbXMtY2VudGVyXCIgI25vdEVtcHR5QXBwTGlzdD5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb250YWluZXIgZmxleCBmbGV4LWNvbCBteS1hdXRvIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBuby1hcHAtY3JlYXRlZFwiPlxuICAgICAgICAgICAgICAgIDxoMj5ObyBhcHAgY3JlYXRlZCB5ZXQhPC9oMj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICA8L25nLXRlbXBsYXRlPlxuICAgIDxhcHAtY29tbW9uLWZvb3RlciBbc2hvd0FkZEJ0bl09XCJzaG93QWRkQnRuXCIgW3Nob3dVcGdyYWRlQnRuXT1cInRydWVcIj48L2FwcC1jb21tb24tZm9vdGVyPlxuICAgIDwhLS0gPGRpdiBjbGFzcz1cImZpeGVkIGJvdHRvbS0wIGZsZXggZmxleC0wIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LXN0YXJ0IHctZnVsbCBoLTE0IHB4LTQgbWQ6cHgtNiB6LTQ5IGJnLXdoaXRlIGFwcC1saXN0LWZvb3RlclwiPlxuICAgICAgICA8c3BhbiBjbGFzcz1cImZvbnQtbWVkaXVtIHRleHQtc2Vjb25kYXJ5XCI+QXhvbmF0b3IgJmNvcHk7IHt7Y3VycmVudFllYXJ9fTwvc3Bhbj5cbiAgICA8L2Rpdj4gLS0+XG48L2Rpdj5cbiJdfQ==
1186
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLWxpc3QuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2F4LWNvbW1vbi11aS1saWIvc3JjL2xpYi9hcHAtbGlzdC9hcHAtbGlzdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9zcmMvYXgtY29tbW9uLXVpLWxpYi9zcmMvbGliL2FwcC1saXN0L2FwcC1saXN0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGlDQUFpQztBQUNqQyx1REFBdUQ7QUFDdkQsMEJBQTBCO0FBQzFCLHFFQUFxRTtBQUVyRSxPQUFPLEVBQUUsU0FBUyxFQUFVLGlCQUFpQixFQUFhLEtBQUssRUFBRSxNQUFNLEVBQWlCLFlBQVksRUFBRSxpQkFBaUIsRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0osT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDN0QsT0FBTyxFQUFFLE1BQU0sRUFBcUIsTUFBTSxpQkFBaUIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMzQyxPQUFPLEVBQUUsVUFBVSxFQUFPLFNBQVMsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDNUUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLGVBQWUsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBQzdGLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFHeEQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDekQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDOUQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUVuRSxPQUFPLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQy9ELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNuRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFakQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDbkUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBSTdELE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLG9EQUFvRCxDQUFDO0FBQ2hHLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNsRCxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQUNwRixPQUFPLEVBQUUsSUFBSSxHQUFJLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEMsT0FBTyxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFcEMsT0FBTyxFQUFFLGlDQUFpQyxFQUFFLE1BQU0sc0VBQXNFLENBQUM7QUFFekgsb0NBQW9DO0FBQ3BDLE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQ3BGLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDhEQUE4RCxDQUFDO0FBQ3RHLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLDJEQUEyRCxDQUFDO0FBQ3ZHLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ25FLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0lDRDlCLDZCQUFtRDtJQUMvQywwQkFBMEg7SUFDOUgsMEJBQWU7OztJQUROLGVBQTJCO0lBQTNCLHlFQUEyQjs7O0lBSWhDLGdDQUFtSTtJQUFBLFlBQTZFOztJQUFBLGlCQUFPOzs7SUFBcEYsZUFBNkU7SUFBN0UsZ0hBQTZFOzs7SUFLaE4sNkJBQTBEO0lBQ3RELDBCQUE2SDtJQUNqSSwwQkFBZTs7O0lBRDBCLGVBQTJCO0lBQTNCLHlFQUEyQjs7O0lBR2hFLGdDQUE2QjtJQUFBLFlBQTZFOztJQUFBLGlCQUFPOzs7SUFBcEYsZUFBNkU7SUFBN0UsZ0hBQTZFOzs7O0lBUWxILGtDQUEwSDtJQUEzRCxtS0FBUywrQkFBdUIsSUFBQztJQUU1RixnQ0FBMkI7SUFBQSxrQ0FBa0I7SUFBQSxpQkFBTztJQUN0RCxpQkFBUzs7OztJQUNULGtDQUFrSTtJQUFuRSxtS0FBUyx1Q0FBK0IsSUFBQztJQUV0RyxnQ0FBMkI7SUFBQSxxQ0FBcUI7SUFBQSxpQkFBTztJQUN6RCxpQkFBUzs7O0lBd0JDLDhDQUEyRTtJQUN2RSw0QkFBTTtJQUNGLDBCQUEwTjtJQUM5TixpQkFBTztJQUNQLGdDQUFnRTtJQUFDLFlBQStCO0lBQUEsaUJBQU87SUFHM0csaUJBQXFCOzs7SUFMd0IsZUFBZ0k7SUFBaEksMExBQWdJO0lBRWxKLGVBQXdDO0lBQXhDLDZEQUF3QztJQUFFLGVBQStCO0lBQS9CLGdFQUErQjs7OztJQVFwRyxzQ0FLSztJQUZELCtPQUFTLDBDQUE4QixJQUFDO0lBR3hDLCtCQUEyQjtJQUN2QiwwQkFBa007SUFDdE0saUJBQU07SUFDTiwrQkFBcUQ7SUFBQyxZQUFzQjtJQUFBLGlCQUFNO0lBQ3RGLGlCQUFhOzs7O0lBUlQsd0NBQXNCLHFFQUFBO0lBS21CLGVBQXdHO0lBQXhHLDBKQUF3RztJQUUzRixlQUFzQjtJQUF0QixxREFBc0I7Ozs7SUFRNUYsa0NBQWdJO0lBQWhDLG1LQUFTLDZCQUFxQixJQUFDO0lBQzdILDRCQUFNO0lBQUEsMEJBQVU7SUFBQSxpQkFBTztJQUN6QixpQkFBUzs7O0lBV3JCLCtCQUFtRTtJQUMvRCxpRUFDSjtJQUFBLGlCQUFNOzs7OztJQU1VLCtCQUEyVTtJQUFuUiw0UkFBUywwREFBMEMsU0FBRSx3QkFBd0IsSUFBRTtJQUNuSSwwQkFFa0M7SUFDckMsaUJBQU07Ozs7SUFKeU8sMEdBQWtFOzs7O0lBTTlTLCtCQUEwSDtJQUN0SCxrQ0FDa0M7SUFEMUIseU9BQVMsd0JBQXdCLFNBQUMsb0RBQXdDLElBQUM7SUFFbkYsK0JBQXlGO0lBQzdGLGlCQUFTO0lBQ1Qsd0NBQW1EO0lBQzNDLCtCQUFzQjtJQUNsQixrQ0FBMkU7SUFBckQsc0xBQVMsMEJBQWtCLElBQUM7SUFDOUMsMEJBQW9GO0lBQ3BGLDRCQUFNO0lBQUEsNkJBQWE7SUFBQSxpQkFBTztJQUM5QixpQkFBUztJQUNiLGlCQUFNO0lBQ04sZ0NBQXNCO0lBQ2xCLG1DQUFvRztJQUE5RSwyT0FBUyx1REFBMkMsSUFBQztJQUN2RSwyQkFBb0Y7SUFDcEYsNkJBQU07SUFBQSx1QkFBTTtJQUFBLGlCQUFPO0lBQ3ZCLGlCQUFTO0lBQ2IsaUJBQU07SUFDVixpQkFBVztJQUNmLGlCQUFNOzs7OztJQW5CaUQsMEdBQWtFO0lBQ2pCLGVBQXNCO0lBQXRCLG9DQUFzQiwyQkFBQTtJQUVoSCxlQUEyQztJQUEzQyx5REFBMkM7OztJQW9DakQsNkJBQXlGO0lBQUEseUJBQVM7SUFBQSxpQkFBSTs7Ozs7SUEvQzFILCtCQUE2RTtJQUN6RSxxQ0FBMEo7SUFBMUMsb1BBQVMsMkNBQStCLElBQUM7SUFDckosd0ZBSU87SUFDUCwrQkFBZ0Y7SUFDNUUseUZBbUJNO0lBQ1YsaUJBQU07SUFDTiwrQkFBNEI7SUFDeEIsK0JBQTZEO0lBQ3pELDBCQUFzSTtJQUMxSSxpQkFBTTtJQUNWLGlCQUFNO0lBQ04sK0JBQTBCO0lBQ3RCLCtCQUFzQjtJQUNsQixnQ0FBcUM7SUFDakMsZ0NBQXdGO0lBQ3BGLGFBQ0o7SUFBQSxpQkFBTTtJQUNWLGlCQUFNO0lBQ04sZ0NBQXNEO0lBQ2xELGFBQ0o7SUFBQSxpQkFBTTtJQUNWLGlCQUFNO0lBQ04sZ0NBQStDO0lBQzNDLGdDQUE4RDtJQUMxRCxzRkFBc0c7SUFDdEcsbUNBQTRCO0lBQUEscUJBQUk7SUFBQSxpQkFBUztJQUM3QyxpQkFBTTtJQUNWLGlCQUFNO0lBQ1YsaUJBQU07SUFDVixpQkFBWTtJQUNoQixpQkFBTTs7OztJQXBEK0QsZUFBOEM7SUFBOUMsNEVBQThDO0lBQ3JHLGVBQWdEO0lBQWhELDZFQUFnRDtJQU1sQixlQUFvQjtJQUFwQiw2Q0FBb0I7SUF1QjNDLGVBQWdDO0lBQWhDLDRFQUFnQztJQU15QixlQUE2QjtJQUE3QiwrQ0FBNkI7SUFDbkYsZUFDSjtJQURJLG1EQUNKO0lBR0EsZUFDSjtJQURJLHdIQUNKO0lBSVEsZUFBbUI7SUFBbkIsNENBQW1COzs7SUFqRG5ELDZCQUEyRDtJQUN2RCwrQkFBbUQ7SUFDL0Msb0ZBcURNO0lBQ1YsaUJBQU07SUFDViwwQkFBZTs7O0lBdkQyQyxlQUFZO0lBQVoseUNBQVk7OztJQTREdEUsbUNBQW9GO0lBQ2hGLCtCQUF3RjtJQUNwRiwwQkFBSTtJQUFBLG1DQUFtQjtJQUFBLGlCQUFLO0lBQ2hDLGlCQUFNO0lBQ1YsaUJBQU07O0FEcEpkLE1BQU0sT0FBTyxnQkFBZ0I7SUFvRDNCLFlBQW9CLFlBQXlCLEVBQ25DLGtCQUFxQyxFQUNyQyxZQUF5QixFQUN6QixlQUE4QyxFQUM5QyxpQkFBbUMsRUFDbkMsT0FBZSxFQUNmLFlBQWdDLEVBQ2hDLE1BQWlCLEVBQ2pCLGVBQStCLEVBQy9CLElBQWdCLEVBQUUsb0JBQW9CO0lBQ3RDLFdBQXVCLEVBQ3ZCLGFBQTRCLEVBQzVCLEtBQXFCLEVBQ3JCLE1BQWMsRUFDZCxlQUFnQyxFQUNoQyxjQUE0QixFQUM1Qix1QkFBK0MsRUFDL0MsbUJBQXVDLEVBQ3ZDLGFBQTRCO1FBbEJsQixpQkFBWSxHQUFaLFlBQVksQ0FBYTtRQUNuQyx1QkFBa0IsR0FBbEIsa0JBQWtCLENBQW1CO1FBQ3JDLGlCQUFZLEdBQVosWUFBWSxDQUFhO1FBQ3pCLG9CQUFlLEdBQWYsZUFBZSxDQUErQjtRQUM5QyxzQkFBaUIsR0FBakIsaUJBQWlCLENBQWtCO1FBQ25DLFlBQU8sR0FBUCxPQUFPLENBQVE7UUFDZixpQkFBWSxHQUFaLFlBQVksQ0FBb0I7UUFDaEMsV0FBTSxHQUFOLE1BQU0sQ0FBVztRQUNqQixvQkFBZSxHQUFmLGVBQWUsQ0FBZ0I7UUFDL0IsU0FBSSxHQUFKLElBQUksQ0FBWTtRQUNoQixnQkFBVyxHQUFYLFdBQVcsQ0FBWTtRQUN2QixrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQUM1QixVQUFLLEdBQUwsS0FBSyxDQUFnQjtRQUNyQixXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQ2Qsb0JBQWUsR0FBZixlQUFlLENBQWlCO1FBQ2hDLG1CQUFjLEdBQWQsY0FBYyxDQUFjO1FBQzVCLDRCQUF1QixHQUF2Qix1QkFBdUIsQ0FBd0I7UUFDL0Msd0JBQW1CLEdBQW5CLG1CQUFtQixDQUFvQjtRQUN2QyxrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQW5FN0IscUJBQWdCLEdBQStCLEVBQUUsQ0FBQztRQUlsRCxxQkFBZ0IsR0FBVyxLQUFLLENBQUM7UUFDakMsZUFBVSxHQUFXLEtBQUssQ0FBQztRQUMzQixtQkFBYyxHQUFXLEtBQUssQ0FBQztRQUMvQixrQkFBYSxHQUFXLEtBQUssQ0FBQztRQUM5QixlQUFVLEdBQVcsS0FBSyxDQUFDO1FBQzFCLHVCQUFrQixHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7UUFDN0MsaUJBQVksR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFDO1FBQ3ZDLG9CQUFlLEdBQUcsSUFBSSxZQUFZLEVBQU8sQ0FBQztRQUNwRCxjQUFjO1FBQ2QsNkJBQXdCLEdBQVksS0FBSyxDQUFDO1FBSzFDLGlCQUFZLEdBQWEsRUFBRSxDQUFDO1FBRTVCLFlBQU8sR0FBVyxFQUFFLENBQUM7UUFDckIsaUJBQVksR0FBVyxFQUFFLENBQUM7UUFDMUIsVUFBSyxHQUFVLEVBQUUsQ0FBQztRQUdsQixjQUFTLEdBQUc7WUFDVixzREFBc0Q7WUFDdEQsc0RBQXNEO1lBQ3RELHNEQUFzRDtZQUN0RCxzREFBc0Q7U0FDdkQsQ0FBQztRQUNGLGVBQVUsR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDO1FBQzFCLGFBQVEsR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDO1FBQzVCLFVBQUssR0FBRyxzQkFBc0IsQ0FBQztRQUMvQixVQUFLLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRTFDLFNBQUksR0FBRyxFQUFFLENBQUM7UUFFVjs7YUFFSztRQUNHLG9CQUFlLEdBQWlCLElBQUksT0FBTyxFQUFPLENBQUM7UUFFM0Qsb0JBQWUsR0FBYSxFQUFFLENBQUMsQ0FBQyxvQ0FBb0M7UUFJcEUsK0JBQTBCLEdBQVksS0FBSyxDQUFDLENBQUMsa0NBQWtDO1FBNEd4RSw0QkFBdUIsR0FBWSxLQUFLLENBQUM7SUFyRjVDLENBQUM7SUFDTDs7T0FFRztJQUNILElBQUksV0FBVztRQUNiLE9BQU8sSUFBSSxJQUFJLEVBQUUsQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUNsQyxDQUFDO0lBRUQsZ0JBQWdCLENBQUMsS0FBSztRQUNwQixJQUFJLENBQUMsYUFBYSxHQUFHLEtBQUssQ0FBQztRQUMzQixNQUFNLE9BQU8sR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLHdCQUF3QixDQUFDLENBQUM7UUFDakUsT0FBTyxDQUFDLGdCQUFnQixDQUFDLE9BQU8sRUFBRSxHQUFHLEVBQUU7WUFDckMsSUFBSSxDQUFDLGFBQWEsR0FBRyxTQUFTLENBQUM7UUFDakMsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsZ0JBQWdCO1FBRWQsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEVBQUU7WUFDdEQsS0FBSyxFQUFFLE9BQU8sRUFBRSx5QkFBeUI7U0FDMUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELHFCQUFxQjtRQUNuQixNQUFNLE1BQU0sR0FBOEI7WUFDeEMsZ0JBQWdCLEVBQUUseUJBQXlCO1lBQzNDLGdCQUFnQixFQUFFLHlCQUF5QjtZQUMzQyxtQ0FBbUMsRUFBRSw0Q0FBNEM7WUFDakYscUNBQXFDLEVBQUUsNENBQTRDO1lBQ25GLHNCQUFzQixFQUFFLCtCQUErQjtZQUN2RCxrQkFBa0IsRUFBRSwrQkFBK0I7U0FDcEQsQ0FBQztRQUNGLE1BQU0sR0FBRyxHQUFXLE1BQU0sQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUN2RCxJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUU7WUFDZCxNQUFNLFdBQVcsR0FBRyxRQUFRLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLDhCQUE4QjtZQUNqRixNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxXQUFXLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxtQkFBbUI7U0FDN0Q7YUFBTTtZQUNMLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLGNBQWMsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLGlDQUFpQztTQUM5RTtJQUNILENBQUM7SUFFRCw2QkFBNkI7UUFDM0IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsdUJBQXVCLENBQUMsQ0FBQztJQUN0RCxDQUFDO0lBS0Qsb0RBQW9EO0lBQ3BELHFEQUFxRDtJQUNyRCxhQUFhO0lBQ2IseUNBQXlDO0lBQ3pDLGdDQUFnQztJQUNoQyxvRUFBb0U7SUFDcEUsNkdBQTZHO0lBQzdHLG9DQUFvQztJQUNwQyxXQUFXO0lBQ1gsUUFBUTtJQUNSLGtCQUFrQjtJQUNsQiwyREFBMkQ7SUFDM0Qsa0RBQWtEO0lBQ2xELFNBQVM7SUFDVCxJQUFJO0lBRUosMkVBQTJFO0lBQzNFLDZHQUE2RztJQUU3RyxPQUFPLENBQUMsS0FBYTtRQUNuQixJQUFJLE9BQU8sR0FBQyxFQUFFLENBQUM7UUFDZixJQUFJLE1BQU0sR0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUMsTUFBTSxDQUFDO1FBQ25DLElBQUcsTUFBTSxJQUFFLENBQUMsRUFDWjtZQUNFLE9BQU8sR0FBQyxJQUFJLEdBQUMsS0FBSyxDQUFBO1NBQ25CO2FBQ0ksSUFBRyxNQUFNLElBQUUsQ0FBQyxFQUNqQjtZQUNFLE9BQU8sR0FBQyxHQUFHLEdBQUMsS0FBSyxDQUFBO1NBQ2xCO2FBQ0ksSUFBRyxNQUFNLElBQUUsQ0FBQyxFQUNqQjtZQUNFLE9BQU8sR0FBQyxLQUFLLENBQUE7U0FDZDtRQUNELE9BQU8sT0FBTyxDQUFDO0lBQ2pCLENBQUM7SUFJRCxjQUFjO1FBQ1osSUFBSSxDQUFDLGNBQWMsQ0FBQyxhQUFhLEVBQUU7YUFDaEMsSUFBSSxDQUNILFNBQVMsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLEVBQy9CLFVBQVUsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO1lBQ25CLE9BQU8sQ0FBQyxLQUFLLENBQUMsOEJBQThCLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDckQsT0FBTyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDM0IsQ0FBQyxDQUFDLEVBQ0YsR0FBRyxDQUFDLENBQUMsWUFBaUIsRUFBRSxFQUFFO1lBQ3hCLE1BQU0sZUFBZSxHQUFHLFlBQVksRUFBRSxFQUFFLEVBQUUsV0FBVyxJQUFJLEVBQUUsQ0FBQztZQUM1RCwyQ0FBMkM7WUFDM0MsSUFBSSxDQUFDLHVCQUF1QixHQUFHLGVBQWUsQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLElBQUksZUFBZSxDQUFDLFFBQVEsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1FBQzFILENBQUMsQ0FBQyxDQUNIO2FBQ0EsU0FBUyxDQUFDLENBQUMsUUFBYSxFQUFFLEVBQUU7WUFDM0IsTUFBTSxtQkFBbUIsR0FBRztnQkFDMUIsU0FBUyxFQUFFLFFBQVEsQ0FBQyxFQUFFLENBQUMsZ0JBQWdCO2FBQ3hDLENBQUM7WUFFRixJQUFJLENBQUMsYUFBYSxDQUFDLGVBQWUsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLFNBQVMsQ0FDL0QsQ0FBQyxvQkFBb0IsRUFBRSxFQUFFO2dCQUN2QixPQUFPLENBQUMsR0FBRyxDQUFDLHVCQUF1QixFQUFFLG9CQUFvQixDQUFDLENBQUM7Z0JBRTNELElBQUksb0JBQW9CLElBQUksb0JBQW9CLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtvQkFDM0QsTUFBTSxnQkFBZ0IsR0FBRyxvQkFBb0IsQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDakQsTUFBTSxjQUFjLEdBQUc7d0JBQ3JCLFNBQVMsRUFBRSxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUztxQkFDL0MsQ0FBQztvQkFFRixJQUFJLENBQUMsYUFBYSxDQUFDLGlCQUFpQixDQUFDLGNBQWMsQ0FBQyxDQUFDLFNBQVMsQ0FDNUQsQ0FBQyxlQUFlLEVBQUUsRUFBRTt3QkFDbEIsSUFBSSxDQUFDLG1CQUFtQixDQUFDLGtCQUFrQixHQUFHLGVBQWUsQ0FBQyxJQUFJLENBQUM7b0JBQ3JFLENBQUMsRUFDRCxDQUFDLEtBQUssRUFBRSxFQUFFO3dCQUNSLE9BQU8sQ0FBQyxLQUFLLENBQUMsaUNBQWlDLEVBQUUsS0FBSyxDQUFDLENBQUM7b0JBQzFELENBQUMsQ0FDRixDQUFDO2lCQUNIO1lBQ0gsQ0FBQyxFQUNELENBQUMsS0FBSyxFQUFFLEVBQUU7Z0JBQ1IsT0FBTyxDQUFDLEtBQUssQ0FBQyxzQ0FBc0MsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUMvRCxDQUFDLENBQ0YsQ0FBQztRQUNKLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUdELFFBQVE7UUFDTixJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztRQUUxQixpRUFBaUU7UUFDakUsdUZBQXVGO1FBRXZGLHFCQUFxQjtRQUdyQixJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUU7WUFDYixJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDO1lBQ2pDLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUM5RCxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7U0FDcEM7UUFFRCxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7UUFFeEIsV0FBVztRQUNYLGdIQUFnSDtRQUNoSCxpREFBaUQ7UUFDakQsNkNBQTZDO1FBQzdDLHNGQUFzRjtRQUN0RixFQUFFO1FBQ0osSUFBSSxZQUFZLEdBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNqRCxzQkFBc0I7UUFDdEIsMEJBQTBCO1FBQzFCLElBQUk7UUFDSiw4QkFBOEI7UUFDOUIsTUFBTTtRQUNOLDBDQUEwQztRQUMxQyxNQUFNO1FBQ04sSUFBSTtRQUNKLGdEQUFnRDtRQUNoRCxzQkFBc0I7UUFDdEIsMkJBQTJCO1FBQ3pCLEVBQUU7UUFDSixJQUFJLFlBQVksR0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ2pELElBQUksZ0JBQWdCLEdBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUMzRCxzQkFBc0I7UUFDdEIsMEJBQTBCO1FBQzFCLElBQUk7UUFDSiw4QkFBOEI7UUFDOUIsTUFBTTtRQUNOLDBDQUEwQztRQUMxQyxNQUFNO1FBQ04sSUFBSTtRQUNKLGdEQUFnRDtRQUNoRCxzQkFBc0I7UUFDdEIsMkJBQTJCO1FBQ3pCLElBQUksT0FBYyxDQUFDO1FBQ25CLElBQUksUUFBZSxDQUFDO1FBRXRCLGlFQUFpRTtRQUNqRSxpREFBaUQ7UUFDakQsNEJBQTRCO1FBQzVCLDhDQUE4QztRQUM5Qyx5QkFBeUI7UUFHekIsSUFBSSxjQUFxQixDQUFDO1FBQzFCLGNBQWMsR0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLGtCQUFrQixDQUFDLENBQUM7UUFDeEQsSUFBRyxjQUFjLElBQUUsSUFBSSxFQUFDO1lBQ3hCLE1BQU0sa0JBQWtCLEdBQVcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQzNGLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1lBQzVDLFlBQVksQ0FBQyxVQUFVLENBQUMsa0JBQWtCLENBQUMsQ0FBQztTQUMzQztRQUNELElBQUksWUFBWSxLQUFLLElBQUksRUFBRTtZQUN6QixFQUFFO1lBQ0YsTUFBTSxTQUFTLEdBQUcsSUFBSSxlQUFlLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2xFLE1BQU0sV0FBVyxHQUFHLFNBQVMsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDN0MsTUFBTSxZQUFZLEdBQUcsU0FBUyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUMvQyw4R0FBOEc7WUFDOUcsc0RBQXNEO1lBQ3hELCtDQUErQztZQUM5QywyREFBMkQ7WUFDMUQsRUFBRTtZQUNGLElBQUksV0FBVyxFQUFFO2dCQUNmLElBQUksQ0FBQyxVQUFVLENBQUMsV0FBVyxFQUFFLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUU7b0JBQ25ELFlBQVksQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLENBQUM7Z0JBQ3JDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsRUFBRTtvQkFDZixtQ0FBbUM7b0JBQ25DLE9BQU8sQ0FBQyxLQUFLLENBQUMsdUJBQXVCLEVBQUUsS0FBSyxDQUFDLENBQUM7b0JBQzlDLFlBQVksQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLENBQUM7Z0JBQ3JDLENBQUMsQ0FBQyxDQUFDO2FBQ0o7WUFFSCx3QkFBd0I7WUFDeEIsMkJBQTJCO1lBQzNCLHdEQUF3RDtZQUN4RCxtQkFBbUI7WUFDbkIsNkNBQTZDO1lBQzdDLDRDQUE0QztZQUU1QyxTQUFTO1lBQ1Qsd0JBQXdCO1lBQ3hCLDRDQUE0QztZQUM1Qyx1REFBdUQ7WUFDdkQsVUFBVTtZQUNWLE1BQU07U0FHSDthQUNHO1lBQ0YsNEJBQTRCO1lBRzVCLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLElBQUksQ0FDekIsU0FBUyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FDaEMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEVBQUU7Z0JBQ25CLE9BQU8sR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7Z0JBQzVCLG1EQUFtRDtnQkFDbkQsT0FBTyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQTtnQkFDcEIsUUFBUSxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztnQkFDOUIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQTtnQkFFckIsSUFBSSxPQUFPLEVBQUU7b0JBQ1gsbURBQW1EO29CQUNuRCxNQUFNLFlBQVksR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQztvQkFDM0MsTUFBTSxPQUFPLEdBQUcsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsZ0JBQWdCO29CQUNqRCw4Q0FBOEM7b0JBQzlDLG1DQUFtQztvQkFDbkMscUNBQXFDO29CQUVyQywwREFBMEQ7b0JBQzFELE1BQU0sZ0JBQWdCLEdBQXFCO3dCQUN6QyxVQUFVLEVBQUUsSUFBSTtxQkFDakIsQ0FBQztvQkFDRixJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxFQUFFLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztvQkFHM0MsSUFBSSxPQUFPLEVBQUU7d0JBQ1gsT0FBTyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQzt3QkFDckIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQzt3QkFDdEIsWUFBWSxDQUFDLE9BQU8sQ0FBQyxlQUFlLEVBQUMsT0FBTyxDQUFDLENBQUE7d0JBQzdDLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxFQUFDLFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUU7NEJBQzFDLGlDQUFpQzs0QkFDakMsT0FBTyxDQUFDLEdBQUcsQ0FBQyw4QkFBOEIsRUFBRSxPQUFPLEVBQUUsUUFBUSxDQUFDLENBQUM7NEJBQy9ELFlBQVksQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLENBQUM7d0JBQ3JDLENBQUMsQ0FBQzs2QkFDRCxLQUFLLENBQUMsS0FBSyxDQUFDLEVBQUU7NEJBQ2IsbUNBQW1DOzRCQUNuQyxPQUFPLENBQUMsS0FBSyxDQUFDLHVCQUF1QixFQUFFLEtBQUssQ0FBQyxDQUFDOzRCQUM5QyxZQUFZLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxDQUFDO3dCQUNyQyxDQUFDLENBQUMsQ0FBQztxQkFFSjtvQkFDSCxXQUFXO29CQUNYLHFFQUFxRTtpQkFDcEU7WUFBQSxDQUFDLENBQUMsQ0FBQztTQUVMO1FBRUQsa0VBQWtFO1FBQ2xFLDRCQUE0QjtRQUM1QiwwQkFBMEI7UUFDMUIseUNBQXlDO1FBQ3pDLDhCQUE4QjtRQUM5Qix3QkFBd0I7UUFDeEIsbUNBQW1DO1FBQ25DLDREQUE0RDtRQUM1RCxxQ0FBcUM7UUFDckMsd0JBQXdCO1FBQ3hCLDhDQUE4QztRQUM5QyxNQUFNO1FBS04sTUFBTSxHQUFHLEdBQUcsY0FBYyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMxQyxJQUFJLEdBQUcsRUFBRTtZQUNQLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQztZQUMzQix3Q0FBd0M7WUFDeEMsY0FBYyxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUVqQyw0Q0FBNEM7WUFDNUMsY0FBYyxDQUFDLEtBQUssRUFBRSxDQUFDO1NBQ3hCO0lBRUgsQ0FBQztJQUlELFdBQVcsQ0FBQyxPQUFzQjtRQUNoQyxJQUFJLE9BQU8sQ0FBQyxPQUFPLElBQUksT0FBTyxDQUFDLE9BQU8sQ0FBQyxZQUFZLEVBQUU7WUFDbkQsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1NBQ3hCO0lBQ0gsQ0FBQztJQUVELGVBQWU7UUFDYixJQUFJLElBQUksQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQzNDLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxFQUFFO2dCQUNsQyxHQUFHLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDL0QsQ0FBQyxDQUFDLENBQUM7U0FDSjtJQUNILENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsT0FBTyxDQUFDLFlBQW9CO1FBRTFCLE1BQU0sVUFBVSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsc0JBQXNCO1FBQ2pFLDBCQUEwQjtRQUMxQixJQUFJLFVBQVUsQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxVQUFVLENBQUMsUUFBUSxDQUFDLHNCQUFzQixDQUFDLElBQUksVUFBVSxDQUFDLFFBQVEsQ0FBQyxtQ0FBbUMsQ0FBQyxFQUFFO1lBRXBKLG1EQUFtRDtZQUNuRCxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRTtnQkFDWixJQUFJLENBQUMsWUFBWSxDQUFDLFlBQVksQ0FBQyxpQ0FBaUMsRUFBRSxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ3pGLE9BQU8sQ0FBQywyQ0FBMkM7YUFDdEQ7WUFFRCxpQ0FBaUM7WUFDakMsTUFBTSxxQkFBcUIsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUMvRyxJQUFJLENBQUMscUJBQXFCLEVBQUU7Z0JBQ3hCLElBQUksQ0FBQyxZQUFZLENBQUMsWUFBWSxDQUFDLDRFQUE0RSxFQUFFLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDcEksT0FBTzthQUNWO1NBQ0Y7UUFFRCx3RUFBd0U7UUFDeEUsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDdkMsQ0FBQztJQUlELGNBQWMsQ0FBQyxZQUFvQjtRQUNqQyxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxRQUFRLFlBQVksT0FBTyxDQUFDLENBQUM7SUFDMUQsQ0FBQztJQUVEOztPQUVHO0lBQ0gsYUFBYSxDQUFDLGNBQXNCO1FBQ2xDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDN0MsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7UUFDMUIsSUFBSSxDQUFDLGtCQUFrQixDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQzFDLENBQUM7SUFFRDs7T0FFRztJQUNILE9BQU87UUFDTCxJQUFJLENBQUMsZUFBZSxDQUFDLFVBQVUsQ0FBQyxpQkFBaUIsRUFBQyxFQUFDLElBQUksRUFBRyxVQUFVLEdBQUMsSUFBSSxDQUFDLFFBQVEsRUFBQyxDQUFDLENBQUM7UUFDckYsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUM5QixDQUFDO0lBRUQ7O09BRUc7SUFDSCxpQkFBaUI7UUFDZixJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFBO0lBRW5ELENBQUM7SUFJRCxvREFBb0Q7SUFDcEQ7O09BRUc7SUFDRixtQkFBbUI7UUFDbEIsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsaUNBQWlDLEVBQUU7WUFDcEUsS0FBSyxFQUFFLE9BQU87WUFDZCxNQUFNLEVBQUUsTUFBTTtZQUNkLFVBQVUsRUFBRSx5QkFBeUI7WUFDckMsYUFBYSxFQUFFLHdCQUF3QjtTQUN4QyxDQUFDLENBQUM7UUFFSCxTQUFTLENBQUMsV0FBVyxFQUFFLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxFQUFFO1lBQ3pDLElBQUksTUFBTSxFQUFFO2dCQUNWLE1BQU0sRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLEdBQUcsTUFBTSxDQUFDO2dCQUVyQyxJQUFJLENBQUMsWUFBWSxDQUFDLFlBQVksQ0FBQyxpQkFBaUIsRUFBRSxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ3hFLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLFdBQVcsQ0FBQyxDQUFDO2FBQ25DO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsU0FBUyxDQUFDLElBQVksRUFBRSxXQUFtQjtRQUN6QyxNQUFNLGtCQUFrQixHQUFHLElBQUksUUFBUSxFQUFFLENBQUM7UUFDMUMsa0JBQWtCLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztRQUN4QyxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsYUFBYSxFQUFFLFdBQVcsQ0FBQyxDQUFDO1FBRXRELElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxlQUFlLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxTQUFTLEVBQUU7YUFDbkUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFO1lBQ2YsSUFBSSxRQUFRLEVBQUUsZUFBZSxFQUFFLE1BQU0sS0FBSyxTQUFTLElBQUksUUFBUSxDQUFDLGVBQWUsQ0FBQyxHQUFHLEVBQUUsYUFBYSxFQUFFO2dCQUNsRyw2RkFBNkY7Z0JBQzdGLDhFQUE4RTtnQkFFOUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxZQUFZLENBQUMsY0FBYyxFQUFFLGVBQWUsQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFDeEUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsQ0FBQTthQUN6RDtpQkFBTSxJQUFJLFFBQVEsRUFBRSxlQUFlLEVBQUUsR0FBRyxLQUFLLGdCQUFnQixFQUFFO2dCQUM5RCxJQUFJLENBQUMsWUFBWSxDQUFDLFlBQVksQ0FBQyxvQkFBb0IsRUFBRSxlQUFlLENBQUMsT0FBTyxDQUFDLENBQUM7YUFDL0U7aUJBQU07Z0JBQ0wsSUFBSSxDQUFDLFlBQVksQ0FBQyxZQUFZLENBQUMsNEJBQTRCLEVBQUUsZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFDO2FBQ3JGO1FBQ0gsQ0FBQyxDQUFDO2FBQ0QsS0FBSyxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ2IsT0FBTyxDQUFDLEtBQUssQ0FBQyxxQkFBcUIsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUM1QyxJQUFJLFlBQVksR0FBRyw0QkFBNEIsQ0FBQTtZQUNqRCxJQUFJLEtBQUssRUFBRTtnQkFDUixJQUFJLEtBQUssS0FBSyxXQUFXLEVBQzFCO29CQUNJLFlBQVksR0FBRyx5RUFBeUUsQ0FBQztpQkFDNUY7YUFDRjtZQUNDLElBQUksQ0FBQyxZQUFZLENBQUMsWUFBWSxDQUFDLFlBQVksRUFBRSxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDdEUsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBQ0gsNEVBQTRFO0lBQzVFLHdEQUF3RDtJQUV4RCxzQkFBc0I7SUFDdEIsa0VBQWtFO0lBQ2xFLHdCQUF3QjtJQUN4Qiw0REFBNEQ7SUFDNUQsZ0JBQWdCO0lBQ2hCLFFBQVE7SUFDUixNQUFNO0lBRU4sK0VBQStFO0lBRy9FLGtCQUFrQixDQUFDLFlBQW9CO1FBQ3JDLEVBQUU7UUFDRixNQUFNLFlBQVksR0FBRyxZQUFZLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsOENBQThDO1FBQ3BHLE1BQU0sZ0JBQWdCLEdBQUcsWUFBWSxDQUFDLE9BQU8sQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLGtEQUFrRDtRQUNsSCxNQUFNLGdCQUFnQixHQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDLENBQUE7UUFFM0QsSUFBSSxZQUFZLElBQUksSUFBSSxJQUFJLGdCQUFnQixJQUFJLE9BQU8sSUFBSSxnQkFBZ0IsSUFBRSxNQUFNLEVBQUU7WUFDcEYsTUFBTSxLQUFLLEdBQUcsWUFBWSxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1lBQ3ZELE1BQU0sVUFBVSxHQUFHLE1BQU0sQ0FBQztZQUMxQixNQUFNLGFBQWEsR0FBRyxHQUFHLENBQUM7WUFDMUIsSUFBSSxLQUFLLEVBQUU7Z0JBQ1QsSUFBSSxDQUFDLGNBQWMsQ0FBQyxVQUFVLENBQUMsS0FBSyxFQUFFLFVBQVUsRUFBRSxhQUFhLENBQUMsQ0FBQyxTQUFTLENBQ3hFLFFBQVEsQ0FBQyxFQUFFO29CQUNULGdDQUFnQztvQkFDaEMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxtQkFBbUIsRUFBRSxRQUFRLENBQUMsQ0FBQztvQkFDM0MsOENBQThDO29CQUM5Qyw4QkFBOEI7b0JBQzlCLDZGQUE2RjtvQkFDOUYsNkRBQTZEO29CQUM3RCxNQUFNLE9BQU8sR0FBRyxZQUFZLENBQUM7b0JBQzdCLE1BQU0sVUFBVSxHQUFHLE9BQU8sQ0FBQztvQkFDM0IsTUFBTSxVQUFVLEdBQUMsV0FBVyxDQUFBO29CQUM1QixNQUFNLGNBQWMsR0FBRyxRQUFRLE9BQU8sWUFBWSxVQUFVLDhCQUE4QixDQUFDO29CQUMzRixNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLHNCQUFzQixFQUFFO3dCQUNoRSxLQUFLLEVBQUUsT0FBTzt3QkFDZCxJQUFJLEVBQUUsRUFBRSxPQUFPLEVBQUUsY0FBYyxFQUFHLE9BQU8sRUFBQyxVQUFVLEVBQUM7d0JBQ3JELFlBQVksRUFBRSxJQUFJO3FCQUNuQixDQUFDLENBQUM7b0JBQ0YsNkJBQTZCO29CQUM3QixZQUFZLENBQUMsVUFBVSxDQUFDLGtCQUFrQixDQUFDLENBQUM7b0JBQzVDLFlBQVksQ0FBQyxVQUFVLENBQUMsZUFBZSxDQUFDLENBQUM7b0JBQ3pDLFlBQVksQ0FBQyxVQUFVLENBQUMsZUFBZSxDQUFDLENBQUM7Z0JBQzNDLENBQUMsRUFDRCxLQUFLLENBQUMsRUFBRTtvQkFDTix5QkFBeUI7b0JBQ3pCLE9BQU8sQ0FBQyxLQUFLLENBQUMsdUJBQXVCLEVBQUUsS0FBSyxDQUFDLENBQUM7Z0JBQ2hELENBQUMsQ0FDRixDQUFDO2FBQ0g7U0FDRjtJQUNILENBQUM7SUFDRCxlQUFlLENBQUMsT0FBWTtRQUMxQixJQUFJLE9BQU8sSUFBSSxPQUFPLENBQUMsWUFBWSxFQUFFO1lBQ25DLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsZUFBZSxDQUFDLGFBQWEsQ0FBQyxDQUFDLFNBQVMsQ0FDeEcsQ0FBQyxRQUFhLEVBQUUsRUFBRTtnQkFDaEIsTUFBTSx3QkFBd0IsR0FBRyxRQUFRLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxtQ0FBbUMsSUFBSSxLQUFLLENBQUM7Z0JBQ3ZHLElBQUksQ0FBQyx3QkFBd0IsR0FBRyx3QkFBd0IsQ0FBQztnQkFFekQsSUFBSSxDQUFDLHdCQUF3QixHQUFHLElBQUksQ0FBQztnQkFDckMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQUMsQ0FBQTtnQkFDNUIsOENBQThDO2dCQUM5QywwREFBMEQ7WUFFNUQsQ0FBQyxFQUNELENBQUMsS0FBSyxFQUFFLEVBQUU7Z0JBQ1IsT0FBTyxDQUFDLEtBQUssQ0FBQyw2QkFBNkIsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUN0RCxDQUFDLENBQ0YsQ0FBQztTQUNIO2FBQU07WUFDTCxPQUFPLENBQUMsS0FBSyxDQUFDLDJEQUEyRCxFQUFFLE9BQU8sQ0FBQyxDQUFDO1NBQ3JGO0lBQ0gsQ0FBQztJQUdELEtBQUssQ0FBRSxVQUFVLENBQUMsU0FBaUIsRUFBRSxRQUFnQjtRQUNuRCxFQUFFO1FBRUYsSUFBSSxDQUFDLFlBQVksQ0FBQyxZQUFZLENBQUUsbUJBQW1CLEVBQUUsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzNFLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsMEJBQTBCLEVBQUU7WUFDcEUsS0FBSyxFQUFFLE9BQU87WUFDZCxJQUFJLEVBQUUsRUFBRSxjQUFjLEVBQUUsZ0NBQWdDLEVBQUU7WUFDMUQsWUFBWSxFQUFFLElBQUk7U0FDbkIsQ0FBQyxDQUFDO1FBQ0gsdUdBQXVHO1FBRXJHLE1BQU0sSUFBSSxHQUFHO1lBQ1gsYUFBYSxFQUFFLFNBQVM7WUFDeEIsWUFBWSxFQUFFLFFBQVE7U0FDdkIsQ0FBQztRQUNGLE1BQU0sUUFBUSxHQUFHLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQVMsWUFBWSxFQUFFLElBQUksRUFBRTtZQUNoRSxPQUFPLEVBQUUsSUFBSSxXQUFXLENBQUM7Z0JBQ3ZCLGNBQWMsRUFBRSxrQkFBa0IsQ0FBQyx1Q0FBdUM7YUFDM0UsQ0FBQztZQUNGLGVBQWUsRUFBRSxJQUFJO1NBQ3RCLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUVmLGtEQUFrRDtRQUVsRCw4Q0FBOEM7UUFHaEQsb0JBQW9CO1FBRXBCLDRDQUE0QztRQUM1Qyw2RkFBNkY7UUFDN0YseUJBQXlCO1FBQ3pCLGtDQUFrQztRQUNsQyxpQkFBaUI7UUFDakIsa0RBQWtEO1FBQ2xELDJGQUEyRjtRQUMzRixNQUFNO1FBQ04sYUFBYTtRQUNiLHFIQUFxSDtRQUVySCw0Q0FBNEM7UUFDNUMsT0FBTztRQUNQLG9CQUFvQjtRQUNwQixtREFBbUQ7UUFDbkQsbUhBQW1IO1FBQ25ILHFGQUFxRjtRQUNyRixJQUFJO1FBR0EsOENBQThDO1FBQzlDLDhCQUE4QjtRQUM5QixZQUFZLENBQUMsT0FBTyxDQUFDLGtCQUFrQixFQUFDLFNBQVMsQ0FBQyxDQUFBO1FBQ2xELE1BQU0sY0FBYyxHQUFHLE9BQU8sUUFBUSxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDO1FBRXRGLElBQUksUUFBUSxFQUFFO1lBQ1osdUJBQXVCO1lBQ3RCLElBQUksY0FBYyxDQUFDLE1BQU0sS0FBSyxTQUFTLEVBQUU7Z0JBQ3hDLFlBQVksQ0FBQyxPQUFPLENBQUMsZUFBZSxFQUFDLE1BQU0sQ0FBQyxDQUFBO2dCQUMxQyxVQUFVLENBQUMsR0FBRyxFQUFFO29CQUVkLElBQUksQ0FBQyxZQUFZLENBQUMsWUFBWSxDQUFDLDRCQUE0QixFQUFFLGVBQWUsQ0FBQyxPQUFPLENBQUMsQ0FBQztvQkFDdEYsTUFBTSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQztvQkFDekIsZ0JBQWdCLENBQUMsS0FBSyxFQUFFLENBQUM7Z0JBQzNCLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztnQkFHWixvREFBb0Q7Z0JBQ3BELHlGQUF5RjthQUMxRjtpQkFBSztnQkFDSixJQUFJLENBQUMsWUFBWSxDQUFDLFlBQVksQ0FBQyxtQ0FBbUMsRUFBRSxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQzNGLGdCQUFnQixDQUFDLEtBQUssRUFBRSxDQUFDO2dCQUN6QixPQUFPLENBQUMsS0FBSyxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQzthQUN0QztTQUFDO2FBQ0U7WUFDRixJQUFJLENBQUMsWUFBWSxDQUFDLFlBQVksQ0FBQyxrREFBa0QsRUFBRSxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDMUcsZ0JBQWdCLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDekIsT0FBTyxDQUFDLEtBQUssQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDdEM7SUFDTCxDQUFDO0lBR0QsbUJBQW1CLENBQUMsWUFBbUI7UUFDckMsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsMEJBQTBCLEVBQUU7WUFDN0QsS0FBSyxFQUFFLEtBQUs7WUFDZCxJQUFJLEVBQUU7Z0JBQ0osS0FBSyxFQUFFLFlBQVk7Z0JBQ25CLE9BQU8sRUFBRSx1Q0FBdUM7Z0JBQ2hELGlCQUFpQixFQUFFLFFBQVE7Z0JBQzNCLGdCQUFnQixFQUFFLFFBQVE7Z0JBQzFCLGlCQUFpQixFQUFFLFFBQVE7YUFDNUI7WUFDRCxVQUFVLEVBQUUseUJBQXlCO1NBQ3BDLENBQUMsQ0FBQztRQUVILFNBQVMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEVBQUU7WUFDekMsSUFBSSxNQUFNLEVBQUU7Z0JBQ1YsSUFBSSxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLHdCQUF3QjthQUN2RDtRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELFNBQVMsQ0FBQyxZQUFtQjtRQUMzQixJQUFJLENBQUMsZUFBZSxDQUFDLGNBQWMsQ0FBQyxZQUFZLENBQUM7YUFDNUMsSUFBSSxDQUNELFNBQVMsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLEVBQy9CLFNBQVMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFO1lBQ2xCLElBQUksT0FBTyxJQUFJLE9BQU8sQ0FBQyxLQUFLLEtBQUssU0FBUyxJQUFJLE9BQU8sQ0FBQyxPQUFPLEtBQUssU0FBUyxFQUFFO2dCQUN6RSxNQUFNLEtBQUssR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO2dCQUN2QyxNQUFNLFVBQVUsR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxDQUFDO2dCQUM5QyxNQUFNLElBQUksR0FBQyxZQUFZLENBQUM7Z0JBQ3hCLE9BQU8sQ0FBQyxHQUFHLENBQUMsaUJBQWlCLEdBQUMsWUFBWSxDQUFDLENBQUM7Z0JBRTVDLElBQUksQ0FBQyxJQUFJLEdBQUM7b0JBQ1IsUUFBUSxFQUFHLE9BQU8sQ0FBQyxLQUFLO29CQUN4QixVQUFVLEVBQUcsT0FBTyxDQUFDLE9BQU87b0JBQzVCLGFBQWEsRUFBRyxPQUFPLENBQUMsT0FBTztpQkFDaEMsQ0FBQTtnQkFFRCxPQUFPLENBQUMsR0FBRyxDQUFDLG1DQUFtQyxFQUFFLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxDQUFDLENBQUM7Z0JBRXhFLE9BQU8sSUFBSSxDQUFDLGlCQUFpQixDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsVUFBVSxDQUFDLFFBQVEsRUFBRSxDQUFDO3FCQUNoRSxJQUFJLENBQ0QsVUFBVSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7b0JBQ2pCLE9BQU8sQ0FBQyxHQUFHLENBQUMsb0NBQW9DLEVBQUUsS0FBSyxDQUFDLENBQUM7b0JBQ3pELDBFQUEwRTtvQkFDMUUsT0FBTyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQzdCLENBQUMsQ0FBQyxDQUNMLENBQUM7YUFDVDtpQkFBTTtnQkFDSCxPQUFPLENBQUMsR0FBRyxDQUFDLHdEQUF3RCxDQUFDLENBQUM7Z0JBQ3RFLGdFQUFnRTtnQkFDaEUsT0FBTyxVQUFVLENBQUMsZ0RBQWdELENBQUMsQ0FBQzthQUN2RTtRQUNMLENBQUMsQ0FBQyxDQUNMO2FBQ0EsU0FBUyxDQUNOLENBQUMsUUFBUSxFQUFFLEVBQUU7WUFDVCw2Q0FBNkM7WUFDN0MsT0FBTyxDQUFDLEdBQUcsQ0FBQyxxQkFBcUIsRUFBRSxRQUFRLENBQUMsQ0FBQztZQUM5QywwQ0FBMEM7WUFDMUMsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxZQUFZLEtBQUssWUFBWSxDQUFDLENBQUM7WUFDN0UsSUFBSSxDQUFDLFlBQVksQ0FBQyxZQUFZLENBQUMsMEJBQTBCLEVBQUUsZUFBZSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ3BGLElBQUksQ0FBQyxlQUFlLENBQUMsVUFBVSxDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDekQsdURBQXVEO1lBQ3ZELElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUNwQyxDQUFDLEVBQ1QsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUNOLGtDQUFrQztZQUNsQyxPQUFPLENBQUMsS0FBSyxDQUFDLG1CQUFtQixFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQzlDLENBQUMsQ0FDSixDQUFDO0lBQ1YsQ0FBQztJQUlLLDRCQUE0QixDQUFDLE9BQWU7UUFFbEQsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsMEJBQTBCLEVBQUU7WUFDN0QsS0FBSyxFQUFFLE9BQU87WUFFZCxVQUFVLEVBQUUsb0JBQW9CO1lBQ2hDLElBQUksRUFBRSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsZ0NBQWdDLEVBQUU7U0FDMUQsQ0FBQyxDQUFDO1FBRUgsT0FBTyxJQUFJLE9BQU8sQ0FBTyxDQUFDLE9BQU8sRUFBRSxFQUFFO1lBQ25DLFVBQVUsQ0FBQyxHQUFHLEVBQUU7Z0JBQ2QsU0FBUyxDQUFDLEtBQUssRUFBRSxDQUFDO2dCQUNsQiw0REFBNEQ7Z0JBQzVELE9BQU8sRUFBRSxDQUFDLENBQUMsK0NBQStDO1lBQzVELENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLCtCQUErQjtRQUM1QyxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTyxpQkFBaUIsQ0FBQyxPQUFlO1FBQ3ZDLEVBQUU7UUFDRixJQUFJLENBQUMsZUFBZSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQ2hDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFDUCxTQUFTLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRTtZQUNwQixJQUFJLENBQUMsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksRUFBRTtnQkFDckMsT0FBTyxVQUFVLENBQUMsZ0RBQWdELENBQUMsQ0FBQzthQUNyRTtZQUNELE9BQU8sUUFBUSxDQUFDO2dCQUNkLE9BQU8sRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDO2dCQUNwQixVQUFVLEVBQUUsSUFBSSxDQUFDLGlCQUFpQixDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxlQUFlLENBQUMsYUFBYSxDQUFDLENBQUMsSUFBSSxDQUMvRyxVQUFVLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtvQkFDbkIsT0FBTyxDQUFDLEtBQUssQ0FBQyw2QkFBNkIsRUFBRSxLQUFLLENBQUMsQ0FBQztvQkFDcEQsT0FBTyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ2xCLENBQUMsQ0FBQyxDQUNIO2FBQ0YsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQ0gsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsRUFBRSxFQUFFO1lBQ3RDLE9BQU8sQ0FBQyxHQUFHLENBQUMsbUNBQW1DLENBQUMsQ0FBQztZQUNqRCxJQUFJLENBQUMsd0JBQXdCLEdBQUcsVUFBVSxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsbUNBQW1DLElBQUksS0FBSyxDQUFDLENBQUMseURBQXlEO1lBQ2xLLDhDQUE4QztZQUM5QyxJQUFJLENBQUMsY0FBYyxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRTtnQkFDdEYsSUFBSSxlQUFlLEdBQUcsU0FBUyxDQUFDLENBQUMsOENBQThDO2dCQUMvRSxJQUFJLE1BQU0sSUFBSSxNQUFNLENBQUMsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUMsWUFBWSxJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7b0JBQ25GLGVBQWUsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUM7aUJBQzVEO2dCQUNELE1BQU0sT0FBTyxHQUFHLE9BQU8sRUFBRSxPQUFPLElBQUksVUFBVSxDQUFDO2dCQUM3QyxNQUFNLFVBQVUsR0FBRyxPQUFPLEVBQUUsT0FBTyxJQUFJLFNBQVMsQ0FBQztnQkFDakQsTUFBTSxjQUFjLEdBQUcsUUFBUSxPQUFPLFlBQVksZUFBZSw2QkFBNkIsQ0FBQztnQkFDL0YsTUFBTSxVQUFVLEdBQUUsV0FBVyxDQUFBO2dCQUM3QixNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLHNCQUFzQixFQUFFO29CQUNoRSxLQUFLLEVBQUUsT0FBTztvQkFDZCxJQUFJLEVBQUUsRUFBRSxPQUFPLEVBQUUsY0FBYyxFQUFDO2lCQUNqQyxDQUFDLENBQUM7WUFDUCxDQUFDLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELGVBQWUsQ0FBQyxHQUFXO1FBQ3pCLE9BQU8sR0FBRzthQUNQLEtBQUssQ0FBQyxHQUFHLENBQUM7YUFDVixHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDekQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2YsQ0FBQztJQUdDOztPQUVHO0lBQ0gsV0FBVztRQUNULHFDQUFxQztRQUNyQyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQzVCLElBQUksQ0FBQyxlQUFlLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDbEMsQ0FBQztJQUVELFNBQVMsQ0FBQyxZQUFpQixFQUFHLEtBQWE7UUFDekMsSUFBSSxJQUFJLEdBQUc7WUFDVCxZQUFZLEVBQUcsWUFBWTtTQUM1QixDQUFDO1FBRUYsSUFBSSxDQUFDLHVCQUF1QixDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUM7YUFDekMsU0FBUyxDQUNSLENBQUMsUUFBUSxFQUFFLEVBQUU7WUFDWCxJQUFJLENBQUMsWUFBWSxDQUFDLFlBQVksQ0FBQywrQkFBK0IsRUFBRSxlQUFlLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDekYsSUFBSSxDQUFDLGVBQWUsQ0FBQyxVQUFVLENBQUMsYUFBYSxFQUFDLEVBQUMsUUFBUSxFQUFDLENBQUMsQ0FBQztZQUMxRCxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7WUFDdEMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQzFDLENBQUMsRUFDRCxDQUFDLEtBQUssRUFBRSxFQUFFO1lBQ1IsT0FBTyxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDL0IsbUJBQW1CO1FBQ3JCLENBQUMsQ0FDRixDQUFDO0lBQ04sQ0FBQztJQUVELGVBQWUsQ0FBQyxZQUFpQixFQUFFLEtBQWE7UUFDOUMsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsMEJBQTBCLEVBQUU7WUFDN0QsS0FBSyxFQUFFLEtBQUs7WUFDWixJQUFJLEVBQUU7Z0JBQ0osS0FBSyxFQUFFLFlBQVk7Z0JBQ25CLE9BQU8sRUFBRSxvREFBb0Q7Z0JBQzdELGlCQUFpQixFQUFFLFNBQVM7Z0JBQzVCLGdCQUFnQixFQUFFLFFBQVE7Z0JBQzFCLGlCQUFpQixFQUFFLFFBQVE7YUFDNUI7WUFDRCxVQUFVLEVBQUUseUJBQXlCO1NBQ3RDLENBQUMsQ0FBQztRQUNILFNBQVMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEVBQUU7WUFDekMsSUFBSSxNQUFNLEVBQUU7Z0JBQ1YsSUFBSSxDQUFDLFNBQVMsQ0FBQyxZQUFZLEVBQUUsS0FBSyxDQUFDLENBQUM7YUFDckM7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxrQkFBa0I7UUFDaEIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxhQUFhLEVBQUUsQ0FBQyxTQUFTLENBQzNDLENBQUMsUUFBYSxFQUFFLEVBQUU7WUFDaEIsSUFBSSxRQUFRLENBQUMsTUFBTSxLQUFLLFNBQVMsSUFBSSxRQUFRLENBQUMsRUFBRSxFQUFFO2dCQUNoRCxJQUFJLENBQUMsV0FBVyxHQUFHLFFBQVEsQ0FBQyxFQUFFLENBQUMsV0FBVyxDQUFDLENBQUMsc0JBQXNCO2dCQUNsRSxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxpREFBaUQ7Z0JBRS9HLHFFQUFxRTtnQkFDckUsSUFBSSxDQUFDLDBCQUEwQixHQUFHLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsbUJBQW1CLENBQUMsQ0FBQztnQkFFbEYsT0FBTyxDQUFDLEdBQUcsQ0FBQyxtQkFBbUIsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7Z0JBQ25ELE9BQU8sQ0FBQyxHQUFHLENBQUMsb0JBQW9CLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7YUFDMUQ7UUFDSCxDQUFDLEVBQ0QsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUNSLE9BQU8sQ0FBQyxLQUFLLENBQUMsOEJBQThCLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDdkQsQ0FBQyxDQUNGLENBQUM7SUFDSixDQUFDO0lBQ0QsZUFBZTtRQUNiLE1BQU0sY0FBYyxHQUFHO1lBQ3JCLGtEQUFrRDtZQUNsRCw2QkFBNkI7WUFDN0IsMEJBQTBCO1NBQzNCLENBQUM7UUFDRixPQUFPLGNBQWMsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN2RCxDQUFDOztnRkExM0JVLGdCQUFnQjttRUFBaEIsZ0JBQWdCLG1nQkFQaEI7WUFDVDtnQkFDRSxPQUFPLEVBQUUsaUJBQWlCO2dCQUMxQixRQUFRLEVBQUUsRUFBRSxpQkFBaUIsRUFBRSxpQ0FBaUMsRUFBRTthQUNuRTtTQUNGO1FDeERILDhCQUF5RztRQUVyRyw4QkFBbUM7UUFDL0IsOEJBQWlGO1FBQzdFLDhCQUFpRDtRQUFDLHlCQUE2RTtRQUFDLCtCQUFtQjtRQUFBLG9CQUFJO1FBQUEsaUJBQU87UUFBQyxpQkFBTTtRQUNySyw4QkFBbUU7UUFDL0QsaUNBQXVDO1FBQ25DLDhCQUEwQztRQUM5QyxpQkFBUztRQUNULGtDQUF1QztRQUNuQywrQkFBb0g7UUFDeEgsaUJBQVM7UUE2QlQsbUNBQW9HO1FBQTVGLG9HQUFTLHdCQUF3QixJQUFFO1FBQ3ZDLHNGQUVlO1FBQ2YscUhBR2M7UUFDbEIsaUJBQVM7UUFDVCx5Q0FBcUY7UUFDakYsbUNBQStDO1FBQzNDLHNGQUVlO1FBQ2YscUhBRWM7UUFDZCxnQ0FBOEI7UUFDMUIsaUNBQTJCO1FBQUEsYUFBZTtRQUFBLGlCQUFPO1FBQ2pELGlDQUE4QjtRQUFBLGFBQWM7UUFBQSxpQkFBTztRQUN2RCxpQkFBTTtRQUNWLGlCQUFTO1FBQ1QsbUNBQXdDO1FBQ3hDLDBFQUdXO1FBQ1QsMEVBR1M7UUFDVCxtQ0FBd0Y7UUFBOUIsOEZBQVMsdUJBQW1CLElBQUM7UUFFckYsaUNBQTJCO1FBQUEsd0JBQU87UUFBQSxpQkFBTztRQUMzQyxpQkFBUztRQUNYLG1DQUF3QztRQUN4QyxtQ0FBa0U7UUFBcEIsOEZBQVMsYUFBUyxJQUFDO1FBRTdELGlDQUEyQjtRQUFBLHVCQUFNO1FBQUEsaUJBQU87UUFDNUMsaUJBQVM7UUFFYixpQkFBVztRQUlmLGlCQUFNO1FBQ1YsaUJBQU07UUFFTixnQ0FBcUM7UUFDakMsZ0NBQTRGO1FBQ3hGLGdDQUF1RDtRQUNuRCxnQ0FBZ0U7UUFDNUQsMkNBQWtHO1FBQzlGLHVDQUEyRztRQUEvRiw2SkFBa0M7UUFDMUMsa0dBT3FCO1FBQ3JCLGdDQUFxRTtRQUNqRSxnQ0FBc0U7UUFDdEUsaUNBQTBCO1FBQUEsb0NBQW1CO1FBQUEsaUJBQU87UUFDeEQsaUJBQU07UUFDTixrRkFVYTtRQUNqQixpQkFBYTtRQUNqQixpQkFBaUI7UUFDckIsaUJBQU07UUFDTixpQ0FBd0Q7UUFBQSx3QkFBTztRQUFBLGlCQUFPO1FBQzFFLGlCQUFNO1FBQ04sNEJBQUs7UUFDRCwwRUFFUztRQUNYLGlCQUFNO1FBRVosaUJBQU07UUFFVixpQkFBTTtRQUNWLGlCQUFNO1FBR04sZ0NBQXdGO1FBRXBGLG9FQUVNO1FBRU4sc0ZBeURlO1FBRW5CLGlCQUFNO1FBQ04scUhBT2M7UUFDZCx5Q0FBeUY7UUFJN0YsaUJBQU07Ozs7OztRQTVLc0UsZ0JBQXVDO1FBQXZDLHVDQUF1QztRQUNoRixlQUFpQjtRQUFqQixvQ0FBaUIsaUJBQUE7UUFVYixlQUFpQjtRQUFqQixvQ0FBaUIsaUJBQUE7UUFPRCxlQUFlO1FBQWYsbUNBQWU7UUFDWixlQUFjO1FBQWQsa0NBQWM7UUFJOEMsZUFBc0I7UUFBdEIsMkNBQXNCO1FBSVosZUFBc0I7UUFBdEIsMkNBQXNCO1FBMEI5RyxnQkFBa0M7UUFBbEMsa0RBQWtDO1FBQ0ssZUFBMEI7UUFBMUIsK0NBQTBCO1FBYTVDLGVBQXFCO1FBQXJCLDhDQUFxQjtRQWdCckQsZUFBbUQ7UUFBbkQsNEVBQW1EO1FBYWxFLGVBQWdDO1FBQWhDLHFEQUFnQztRQUl2QixlQUFzQjtRQUF0Qix5Q0FBc0Isa0JBQUE7UUFvRXRCLGVBQXlCO1FBQXpCLDJDQUF5Qix3QkFBQTs7c0VEdEpuQyxnQkFBZ0IsV0FBaEIsZ0JBQWdCLG1CQWRmLE1BQU07dUZBY1AsZ0JBQWdCO2NBZjVCLFVBQVU7ZUFBQztnQkFDVixVQUFVLEVBQUUsTUFBTTthQUNuQjs7Y0FDQSxTQUFTOzJCQUNFLGNBQWMsaUJBR1QsaUJBQWlCLENBQUMsSUFBSSxhQUMxQjtvQkFDVDt3QkFDRSxPQUFPLEVBQUUsaUJBQWlCO3dCQUMxQixRQUFRLEVBQUUsRUFBRSxpQkFBaUIsRUFBRSxpQ0FBaUMsRUFBRTtxQkFDbkU7aUJBQ0Y7K2tCQUdRLE9BQU87a0JBQWYsS0FBSztZQUNHLE9BQU87a0JBQWYsS0FBSztZQUNHLGdCQUFnQjtrQkFBeEIsS0FBSztZQUNHLG9CQUFvQjtrQkFBNUIsS0FBSztZQUNHLElBQUk7a0JBQVosS0FBSztZQUNHLFFBQVE7a0JBQWhCLEtBQUs7WUFDRyxnQkFBZ0I7a0JBQXhCLEtBQUs7WUFDRyxVQUFVO2tCQUFsQixLQUFLO1lBQ0csY0FBYztrQkFBdEIsS0FBSztZQUNHLGFBQWE7a0JBQXJCLEtBQUs7WUFDRyxVQUFVO2tCQUFsQixLQUFLO1lBQ0ksa0JBQWtCO2tCQUEzQixNQUFNO1lBQ0csWUFBWTtrQkFBckIsTUFBTTtZQUNHLGVBQWU7a0JBQXhCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBhcnJvdy1wYXJlbnMgKi9cbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9tZW1iZXItb3JkZXJpbmcgKi9cbi8qIGVzbGludC1kaXNhYmxlIHJhZGl4ICovXG4vKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvZXhwbGljaXQtZnVuY3Rpb24tcmV0dXJuLXR5cGUgKi9cblxuaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIFZpZXdFbmNhcHN1bGF0aW9uLCBPbkRlc3Ryb3ksIElucHV0LCBPdXRwdXQsIFNpbXBsZUNoYW5nZXMsIEV2ZW50RW1pdHRlciwgQ2hhbmdlRGV0ZWN0b3JSZWYsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE1BVF9TRUxFQ1RfQ09ORklHIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc2VsZWN0JztcbmltcG9ydCB7IFJvdXRlciAsICBOYXZpZ2F0aW9uRXh0cmFzfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgU3ViamVjdCwgdGhyb3dFcnJvciB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgY2F0Y2hFcnJvciwgbWFwLCBzd2l0Y2hNYXAsIHRha2VVbnRpbCwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgQXhvU25hY2tCYXJTZXJ2aWNlLCBBeG9TbmFja0JhclR5cGUgfSBmcm9tICcuLi9heG8tc25hY2stYmFyL2F4by1zbmFjay1iYXIuc2VydmljZSc7XG5pbXBvcnQgeyBBdXRoU2VydmljZSB9IGZyb20gJy4uL2NvcmUvYXV0aC9hdXRoLnNlcnZpY2UnO1xuaW1wb3J0IHsgVXNlclNlcnZpY2UgfSBmcm9tICcuLi9jb3JlL3VzZXIvdXNlci5zZXJ2aWNlJztcbmltcG9ydCB7IFVzZXIgfSBmcm9tICcuLi9jb3JlL3VzZXIvdXNlci50eXBlcyc7XG5pbXBvcnQgeyBBcHBMaXN0RHRvIH0gZnJvbSAnLi9hcHAtbGlzdC1kdG8nO1xuaW1wb3J0IHsgTXlBcHBMaXN0U2VydmljZSB9IGZyb20gJy4vbXktYXBwLWxpc3Quc2VydmljZSc7XG5pbXBvcnQgeyBPcmdhbml6YXRpb25MaXN0RHRvIH0gZnJvbSAnLi9vcmdhbml6YXRpb24tbGlzdC1kdG8nO1xuaW1wb3J0IHsgTWF0RGlhbG9nIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcbmltcG9ydCB7IEZsYXR0ZW5TZXJ2aWNlIH0gZnJvbSAnLi4vZmxhdHRlbi1tb2R1bGUvZmxhdHRlbi5zZXJ2aWNlJztcbmltcG9ydCB7IElGbGF0dGVuIH0gZnJvbSAnLi4vY29tbW9uLXV0aWxzL2lGbGF0dGVuJztcbmltcG9ydCB7IEh0dHBDbGllbnQsIEh0dHBIZWFkZXJzIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgQ29va2llU2VydmljZSB9IGZyb20gJ25neC1jb29raWUtc2VydmljZSc7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBFbmxpZ2h0ZW5MaWJNb2R1bGUgfSBmcm9tICcuLi9lbmxpZ2h0ZW4tbGliL2VubGlnaHRlbi1saWIubW9kdWxlJztcbmltcG9ydCB7IFFyZGlhbG9nQ29tcG9uZW50IH0gZnJvbSAnLi4vcXJkaWFsb2cvcXJkaWFsb2cuY29tcG9uZW50JztcbmltcG9ydCB7IExvZ2dpbmdTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvbG9nZ2luZy5zZXJ2aWNlJztcbmltcG9ydCB7IExvYWRpbmdEaWFsb2dDb21wb25lbnQgfSBmcm9tICcuLi9sb2FkaW5nLWRpYWxvZy9sb2FkaW5nLWRpYWxvZy5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcblxuaW1wb3J0IHsgTG9hZGluZ0FwcGluc3RhbGxDb21wb25lbnQgfSBmcm9tICcuLi9sb2FkaW5nLWFwcGluc3RhbGwvbG9hZGluZy1hcHBpbnN0YWxsLmNvbXBvbmVudCc7IFxuaW1wb3J0IHsgQ29tbW9uU2VydmljZSB9IGZyb20gJy4uL2NvbW1vbi5zZXJ2aWNlJztcbmltcG9ydCB7IFN1Y2Nlc3NEaWFsb2dDb21wb25lbnQgfSBmcm9tICcuLi9zdWNjZXNzLWRpYWxvZy9zdWNjZXNzLWRpYWxvZy5jb21wb25lbnQnOyBcbmltcG9ydCB7IHRha2UsICB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IGZvcmtKb2luLCBvZiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgbG9jYWxlIH0gZnJvbSAnbW9tZW50JztcbmltcG9ydCB7IEFwcENyZWF0ZURpYWxvZ0NvbXBvbmVudENvbXBvbmVudCB9IGZyb20gJy4uL2FwcC1jcmVhdGUtZGlhbG9nLWNvbXBvbmVudC9hcHAtY3JlYXRlLWRpYWxvZy1jb21wb25lbnQuY29tcG9uZW50JzsgXG5cbi8vaW1wb3J0IHsgQ29uc29sZSB9IGZyb20gJ2NvbnNvbGUnO1xuaW1wb3J0IHsgQ29tbW9uTGliQ29uZmlndXJhdGlvblNlcnZpY2UgfSBmcm9tICcuLi9jb21tb24tbGliLWNvbmZpZ3VyYXRpb24uc2VydmljZSc7XG5pbXBvcnQgeyBEYXRhVmlld0ZpbHRlcnNTZXJ2aWNlIH0gZnJvbSAnLi4vZGF0YS12aWV3LWxpYi9kYXRhLXZpZXctZmlsdGVycy9kYXRhLXZpZXctZmlsdGVycy5zZXJ2aWNlJztcbmltcG9ydCB7IENvbmZpcm1hdGlvbk1vZGFsQ29tcG9uZW50IH0gZnJvbSAnLi4vc2hhcmVkL2NvbWZpcm1hdGlvbi1tb2RhbC9jb25maXJtYXRpb24tbW9kYWwuY29tcG9uZW50JztcbmltcG9ydCB7IFN1YnNjcmliZWRQbGFuTmFtZSB9IGZyb20gJy4uL3N1YnNjcmliZWRQbGFuTmFtZS5zZXJ2aWNlJztcbmltcG9ydCB7IFN0cmlwZVNlcnZpY2UgfSBmcm9tICcuLi9zdHJpcGUuc2VydmljZSc7XG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2xpYi1hcHAtbGlzdCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9hcHAtbGlzdC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2FwcC1saXN0LmNvbXBvbmVudC5zY3NzJ10sXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gIHByb3ZpZGVyczogW1xuICAgIHtcbiAgICAgIHByb3ZpZGU6IE1BVF9TRUxFQ1RfQ09ORklHLFxuICAgICAgdXNlVmFsdWU6IHsgb3ZlcmxheVBhbmVsQ2xhc3M6ICdvcmdhbml6YXRpb24tbGlzdC1vdmVybGF5LXBhbmVsJyB9LFxuICAgIH0sXG4gIF0sXG59KVxuZXhwb3J0IGNsYXNzIEFwcExpc3RDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gIEBJbnB1dCgpIGFwcExpc3Q6IEFycmF5PEFwcExpc3REdG8+O1xuICBASW5wdXQoKSBiYXNlVXJsOiBzdHJpbmc7XG4gIEBJbnB1dCgpIG9yZ2FuaXphdGlvbkxpc3Q6IEFycmF5PE9yZ2FuaXphdGlvbkxpc3REdG8+ID0gW107XG4gIEBJbnB1dCgpIHNlbGVjdGVkT3JnYW5pemF0aW9uOiBPcmdhbml6YXRpb25MaXN0RHRvO1xuICBASW5wdXQoKSB1c2VyOiBVc2VyO1xuICBASW5wdXQoKSBsaXN0VHlwZTogc3RyaW5nO1xuICBASW5wdXQoKSBzaG93Q3JlYXRlQnV0dG9uOmJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgc2hvd1FSSWNvbjpib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIHNob3dEb3RzT3B0aW9uOmJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgc2hvd0N1c3RvbWl6ZTpib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIHNob3dBZGRCdG46Ym9vbGVhbiA9IGZhbHNlO1xuICBAT3V0cHV0KCkgc3dpdGNoQWNjb3VudEV2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoKSBvcGVuQXBwRXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpIHVwZGF0ZUxpc3RFdmVudCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICAvLyB1c2VyOiBVc2VyO1xuICBpc0FwcENoYW5nZWRBZnRlclB1Ymxpc2g6IGJvb2xlYW4gPSBmYWxzZTtcbiAgdXNlck5hbWU6IHN0cmluZztcbiAgYXBwVmVyc2lvbklkOiBudW1iZXI7XG4gIHVzZXJFbWFpbDogc3RyaW5nO1xuICBmdWxsVmVyc2lvbjogc3RyaW5nO1xuICBmdWxsVmVyc2lvbnM6IHN0cmluZ1tdID0gW107XG4gIHVzZXJJbWFnZTogc3RyaW5nO1xuICB2ZXJzaW9uOiBzdHJpbmcgPSAnJztcbiAgbWlub3JWZXJzaW9uOiBzdHJpbmcgPSAnJztcbiAgYXBwSWQ6IHN0cmluZyA9Jyc7XG4gIGJ1aWxkZXJVcmw6IHN0cmluZztcbiAgb3BlblBvcHVwTWVudTogbnVtYmVyO1xuICBncmFkaWVudHMgPSBbXG4gICAgJ3JhZGlhbC1ncmFkaWVudChjaXJjbGUgYXQgODAlIDIwJSwgI0RCNkQ4MSwgI0JGNDU4MSknLFxuICAgICdyYWRpYWwtZ3JhZGllbnQoY2lyY2xlIGF0IDgwJSAyMCUsICM0NDkxRDksICM0NTU5QkYpJyxcbiAgICAncmFkaWFsLWdyYWRpZW50KGNpcmNsZSBhdCA4MCUgMjAlLCAjRTdBNzc5LCAjQUE1NTI1KScsXG4gICAgJ3JhZGlhbC1ncmFkaWVudChjaXJjbGUgYXQgODAlIDIwJSwgIzQ0RDk1MywgIzBEOTIxMiknXG4gIF07XG4gIGN1cnJlbnRVcmwgPSBkb2N1bWVudC5VUkw7XG4gIGJhc2VVc3JsID0gZG9jdW1lbnQuYmFzZVVSSTtcbiAgcmVnZXggPSAvXFwvYXBwc1xcLyhcXGQrKVxcLyhcXHcrKS87XG4gIG1hdGNoID0gdGhpcy5jdXJyZW50VXJsLm1hdGNoKHRoaXMucmVnZXgpO1xuXG4gIGRhdGEgPSB7fTtcblxuICAvKlxuICAgICAqIFN1YmplY3Qgb2JqZWN0IHdoaWNoIGhlbHBzIHVuc3Vic2NyaWJlIGFsbCB0aGUgc3Vic2NyaWJlZCBvYmplY3RzIGluIHRoZSBjb21wb25lbnRcbiAgICAgKi9cbiAgcHJpdmF0ZSBfdW5zdWJzY3JpYmVBbGw6IFN1YmplY3Q8YW55PiA9IG5ldyBTdWJqZWN0PGFueT4oKTtcbiAgb3JnYW5pemF0b25JZDogbnVtYmVyO1xuICB1c2VyUGVybWlzc2lvbnM6IHN0cmluZ1tdID0gW107IC8vIFZhcmlhYmxlIHRvIGhvbGQgdXNlciBwZXJtaXNzaW9uc1xuICBwZXJtaXNzaW9uczogYW55O1xuICBoYXNPcmdVc2VyQWNjZXNzOiBib29sZWFuO1xuICBjdXJyZW50QXBwVmVyc2lvbklkOiBzdHJpbmc7XG4gIHNob3dXZWJQb3J0YWxBY2Nlc3NPdmVybGF5OiBib29sZWFuID0gZmFsc2U7IC8vIEZsYWcgdG8gY29udHJvbCBvdmVybGF5IGRpc3BsYXlcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIF9hdXRoU2VydmljZTogQXV0aFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBfY2hhbmdlRGV0ZWN0b3JSZWY6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIHByaXZhdGUgX3VzZXJTZXJ2aWNlOiBVc2VyU2VydmljZSxcbiAgICBwcml2YXRlIGNvbW1vbkxpYkNvbmZpZzogQ29tbW9uTGliQ29uZmlndXJhdGlvblNlcnZpY2UsXG4gICAgcHJpdmF0ZSBfbXBBcHBMaXN0U2VydmljZTogTXlBcHBMaXN0U2VydmljZSxcbiAgICBwcml2YXRlIF9yb3V0ZXI6IFJvdXRlcixcbiAgICBwcml2YXRlIF9heG9TbmFja0JhcjogQXhvU25hY2tCYXJTZXJ2aWNlLFxuICAgIHByaXZhdGUgZGlhbG9nOiBNYXREaWFsb2csXG4gICAgcHJpdmF0ZSBfZmxhdHRlblNlcnZpY2U6IEZsYXR0ZW5TZXJ2aWNlLFxuICAgIHByaXZhdGUgaHR0cDogSHR0cENsaWVudCwgLy8gSW5qZWN0IEh0dHBDbGllbnRcbiAgICBwcml2YXRlIF9odHRwQ2xpZW50OiBIdHRwQ2xpZW50LFxuICAgIHByaXZhdGUgY29va2llU2VydmljZTogQ29va2llU2VydmljZSxcbiAgICBwcml2YXRlIHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcbiAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLFxuICAgIHByaXZhdGUgX2xvZ2dpbmdTZXJ2aWNlIDogTG9nZ2luZ1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBfY29tbW9uU2VydmljZTpDb21tb25TZXJ2aWNlLFxuICAgIHByaXZhdGUgX2RhdGFWaWV3RmlsdGVyc1NlcnZpY2U6IERhdGFWaWV3RmlsdGVyc1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBfc3Vic2NyaWJlZFBsYW5OYW1lOiBTdWJzY3JpYmVkUGxhbk5hbWUsXG4gICAgcHJpdmF0ZSBzdHJpcGVTZXJ2aWNlOiBTdHJpcGVTZXJ2aWNlLFxuXG4gICAgXG4gICkgeyB9XG4gIC8qKlxuICAgKiBHZXR0ZXIgZm9yIGN1cnJlbnQgeWVhclxuICAgKi9cbiAgZ2V0IGN1cnJlbnRZZWFyKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIG5ldyBEYXRlKCkuZ2V0RnVsbFllYXIoKTtcbiAgfVxuXG4gIHNldE9wZW5Qb3B1cE1lbnUoYXBwSWQpIHtcbiAgICB0aGlzLm9wZW5Qb3B1cE1lbnUgPSBhcHBJZDtcbiAgICBjb25zdCBvdmVybGF5ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLmNkay1vdmVybGF5LWNvbnRhaW5lcicpO1xuICAgIG92ZXJsYXkuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiB7XG4gICAgICB0aGlzLm9wZW5Qb3B1cE1lbnUgPSB1bmRlZmluZWQ7XG4gICAgfSk7XG4gIH1cblxuICBvcGVuUVJDb2RlRGlhbG9nKCk6IHZvaWQge1xuXG4gICAgY29uc3QgcXJEaWFsb2dSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKFFyZGlhbG9nQ29tcG9uZW50LCB7XG4gICAgICB3aWR0aDogJzI1MHB4JywgLy8gQWRqdXN0IHdpZHRoIGFzIG5lZWRlZFxuICAgIH0pO1xuICB9XG5cbiAgbmF2aWdhdGV0b09yZ2FuaWF0aW9uKCk6IHZvaWQge1xuICAgIGNvbnN0IHVybE1hcDogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSA9IHtcbiAgICAgICdsb2NhbGhvc3Q6NDIwMCc6ICdodHRwczovL2xvY2FsaG9zdDo0MjAwLycsXG4gICAgICAnbG9jYWxob3N0OjQyMDEnOiAnaHR0cHM6Ly9sb2NhbGhvc3Q6NDIwMC8nLFxuICAgICAgJ2FuZHJvbWVkYS1idWlsZGVyLXFhLmF4b25hdG9yLmNvbSc6ICdodHRwczovL2FuZHJvbWVkYS1idWlsZGVyLXFhLmF4b25hdG9yLmNvbS8nLFxuICAgICAgJ2FuZHJvbWVkYS1jb250YWluZXItcWEuYXhvbmF0b3IuY29tJzogJ2h0dHBzOi8vYW5kcm9tZWRhLWJ1aWxkZXItcWEuYXhvbmF0b3IuY29tLycsXG4gICAgICAnYnVpbGRlci5heG9uYXRvci5jb20nOiAnaHR0cHM6Ly9idWlsZGVyLmF4b25hdG9yLmNvbS8nLFxuICAgICAgJ3dlYi5heG9uYXRvci5jb20nOiAnaHR0cHM6Ly9idWlsZGVyLmF4b25hdG9yLmNvbS8nXG4gICAgfTtcbiAgICBjb25zdCB1cmw6IHN0cmluZyA9IHVybE1hcFt3aW5kb3cubG9jYXRpb24uaG9zdF0gfHwgJyc7XG4gICAgaWYgKHRoaXMubWF0Y2gpIHtcbiAgICAgIGNvbnN0IHVzZXJMaXN0VXJsID0gYGFwcHMvJHt0aGlzLm1hdGNoWzFdfS91c2Vyc2A7IC8vIGR5bmFtaWMgcGFydCBiYXNlZCBvbiBtYXRjaFxuICAgICAgd2luZG93Lm9wZW4odXJsICsgdXNlckxpc3RVcmwsICdfc2VsZicpOyAvLyBvcGVuIGR5bmFtaWMgVVJMXG4gICAgfSBlbHNlIHtcbiAgICAgIHdpbmRvdy5vcGVuKHVybCArICdvcmdhbml6YXRpb24nLCAnX3NlbGYnKTsgLy8gZmFsbGJhY2sgdG8gb3JnYW5pemF0aW9uIHJvdXRlXG4gICAgfVxuICB9ICBcblxuICBuYXZpZ2F0ZXRvT3JnYW5pYXRpb25TZXR0aW5ncygpOiB2b2lkIHtcbiAgICB0aGlzLl9yb3V0ZXIubmF2aWdhdGVCeVVybCgnb3JnYW5pemF0aW9uLXNldHRpbmdzJyk7XG4gIH1cbiAgXG5cblxuXG4gIC8vIGRlbGV0ZUFwcChhcHBJZDogc3RyaW5nLCB2ZXJzaW9uOiBzdHJpbmcpOiB2b2lkIHtcbiAgLy8gICB0aGlzLl9tcEFwcExpc3RTZXJ2aWNlLmRlbGV0ZUFwcChhcHBJZCwgdmVyc2lvbilcbiAgLy8gICAgIC5waXBlKFxuICAvLyAgICAgICB0YWtlVW50aWwodGhpcy5fdW5zdWJzY3JpYmVBbGwpLFxuICAvLyAgICAgICBjYXRjaEVycm9yKChlcnJvcikgPT4ge1xuICAvLyAgICAgICAgIGNvbnNvbGUubG9nKCdFcnJvciBvY2N1cnJlZCB3aGlsZSBkZWxldGluZyBhcHA6JywgZXJyb3IpO1xuICAvLyAgICAgICAgIC8vIHRoaXMuX3NuYWNrYmFyU2V2aWNlLm9wZW5TbmFja0JhcignRXJyb3Igb2NjdXJyZWQgd2hpbGUgZGVsZXRpbmcgYXBwLicsIEF4b1NuYWNrQmFyVHlwZS5lcnJvcik7XG4gIC8vICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXJyb3IpO1xuICAvLyAgICAgICB9KVxuICAvLyAgICAgKVxuICAvLyAgICAgLnN1YnNjcmliZShcbiAgLy8gICAgICAgLy8gcmVzcG9uc2UgPT4gdGhpcy5oYW5kbGVEZWxldGVTdWNjZXNzKHJlc3BvbnNlKSxcbiAgLy8gICAgICAgLy8gZXJyb3IgPT4gdGhpcy5oYW5kbGVEZWxldGVFcnJvcihlcnJvcilcbiAgLy8gICAgICk7XG4gIC8vIH1cblxuICAvLyBBc3N1bWluZyBfZGVsZXRlU2VydmljZSBoYXMgYSBkZWxldGVBcHAgbWV0aG9kIHRoYXQgaGFuZGxlcyBhcHAgZGVsZXRpb25cbiAgLy8gQWxzbywgYXNzdW1pbmcgaGFuZGxlRGVsZXRlU3VjY2VzcyBhbmQgaGFuZGxlRGVsZXRlRXJyb3IgYXJlIG1ldGhvZHMgdG8gaGFuZGxlIHN1Y2Nlc3MgYW5kIGVycm9yIHNjZW5hcmlvc1xuXG4gIHBhZFplcm8odmFsdWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgdmFyIHBhZGRpbmc9Jyc7XG4gICAgbGV0IGxlbmd0aD12YWx1ZS50b1N0cmluZygpLmxlbmd0aDtcbiAgICBpZihsZW5ndGg9PTEpXG4gICAge1xuICAgICAgcGFkZGluZz0nMDAnK3ZhbHVlXG4gICAgfVxuICAgIGVsc2UgaWYobGVuZ3RoPT0yKVxuICAgIHtcbiAgICAgIHBhZGRpbmc9JzAnK3ZhbHVlXG4gICAgfVxuICAgIGVsc2UgaWYobGVuZ3RoPT0zKVxuICAgIHtcbiAgICAgIHBhZGRpbmc9dmFsdWVcbiAgICB9XG4gICAgcmV0dXJuIHBhZGRpbmc7XG4gIH1cblxuICBwdWJsaWMgaGFzQXBwQnVpbGRlclBlcm1pc3Npb246IGJvb2xlYW4gPSBmYWxzZTtcblxuICBnZXRVc2VyRGV0YWlscygpOiB2b2lkIHtcbiAgICB0aGlzLl9jb21tb25TZXJ2aWNlLmdldFVzZXJEZXRhaWwoKVxuICAgICAgLnBpcGUoXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLl91bnN1YnNjcmliZUFsbCksXG4gICAgICAgIGNhdGNoRXJyb3IoKGVycm9yKSA9PiB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgZmV0Y2hpbmcgdXNlciBkZXRhaWxzOicsIGVycm9yKTtcbiAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihlcnJvcik7XG4gICAgICAgIH0pLFxuICAgICAgICB0YXAoKHVzZXJSZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgICAgY29uc3QgdXNlclBlcm1pc3Npb25zID0gdXNlclJlc3BvbnNlPy51ZD8ucGVybWlzc2lvbnMgfHwgW107XG4gICAgICAgICAgLy8gQ2hlY2sgaWYgXCJBUFBfQlVJTERFUlwiIHBlcm1pc3Npb24gZXhpc3RzXG4gICAgICAgICAgdGhpcy5oYXNBcHBCdWlsZGVyUGVybWlzc2lvbiA9IHVzZXJQZXJtaXNzaW9ucy5pbmNsdWRlcyhcIkFQUF9CVUlMREVSXCIpICYmIHVzZXJQZXJtaXNzaW9ucy5pbmNsdWRlcyhcIkFDQ0VTU19XRUJfUE9SVEFMXCIpO1xuICAgICAgICB9KVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgocmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgICBjb25zdCBzdWJzY3JpcHRpb25PcHRpb25zID0ge1xuICAgICAgICAgIGFjY291bnRJZDogcmVzcG9uc2UudWQubGFzdHVzZWRfYWNjb3VudFxuICAgICAgICB9O1xuICAgICAgICBcbiAgICAgICAgdGhpcy5zdHJpcGVTZXJ2aWNlLmdldFN1YnNjcmlwdGlvbihzdWJzY3JpcHRpb25PcHRpb25zKS5zdWJzY3JpYmUoXG4gICAgICAgICAgKHN1YnNjcmlwdGlvblJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZygnU3Vic2NyaXB0aW9uIGRldGFpbHM6Jywgc3Vic2NyaXB0aW9uUmVzcG9uc2UpO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICBpZiAoc3Vic2NyaXB0aW9uUmVzcG9uc2UgJiYgc3Vic2NyaXB0aW9uUmVzcG9uc2UubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICBjb25zdCBzdWJzY3JpcHRpb25JbmZvID0gc3Vic2NyaXB0aW9uUmVzcG9uc2VbMF07XG4gICAgICAgICAgICAgIGNvbnN0IHByb2R1Y3RPcHRpb25zID0ge1xuICAgICAgICAgICAgICAgIFByb2R1Y3RJZDogc3Vic2NyaXB0aW9uSW5mby5pdGVtc1swXS5wcm9kdWN0SWRcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgIHRoaXMuc3RyaXBlU2VydmljZS5nZXRQcm9kdWN0RGV0YWlscyhwcm9kdWN0T3B0aW9ucykuc3Vic2NyaWJlKFxuICAgICAgICAgICAgICAgIChwcm9kdWN0UmVzcG9uc2UpID0+IHtcbiAgICAgICAgICAgICAgICAgIHRoaXMuX3N1YnNjcmliZWRQbGFuTmFtZS5zdWJzY3JpYmVkUGxhbk5hbWUgPSBwcm9kdWN0UmVzcG9uc2UubmFtZTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIChlcnJvcikgPT4ge1xuICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgZmV0Y2hpbmcgcHJvZHVjdCBkZXRhaWxzOicsIGVycm9yKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICAoZXJyb3IpID0+IHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGZldGNoaW5nIHN1YnNjcmlwdGlvbiBkZXRhaWxzOicsIGVycm9yKTtcbiAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgICB9KTtcbiAgfVxuICBcblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmdldFVzZXJQZXJtaXNzaW9ucygpO1xuICAgXG4gICAgLy8gdGhpcy5jdXJyZW50QXBwVmVyc2lvbklkID0gd2luZG93LmxvY2F0aW9uLmhyZWYuc3BsaXQoXCIvXCIpWzRdO1xuICAgIC8vIHRoaXMuX25hdmlnYXRpb24udXBkYXRlQ2xhc3NpY05hdmlnYXRpb25Sb3V0ZXModGhpcy5jdXJyZW50QXBwVmVyc2lvbklkLnRvU3RyaW5nKCkpO1xuXG4gICAgLy8gRmV0Y2ggdXNlciBkZXRhaWxzXG4gICAgXG4gICAgXG4gICAgaWYgKHRoaXMudXNlcikge1xuICAgICAgdGhpcy51c2VyRW1haWwgPSB0aGlzLnVzZXIuZW1haWw7XG4gICAgICB0aGlzLnVzZXJOYW1lID0gdGhpcy51c2VyWydmbmFtZSddICsgJyAnICsgdGhpcy51c2VyWydsbmFtZSddO1xuICAgICAgdGhpcy51c2VySW1hZ2UgPSB0aGlzLnVzZXJbJ3VpbWcnXTtcbiAgICB9XG5cbiAgICB0aGlzLmdldFVzZXJEZXRhaWxzKCk7XG4gICAgXG4gIC8vQVhFLUk2Mzc2XG4gIC8vSXNzdWUgOiBQYXJhbWV0ZXJpemVkIHVybCB3YXMgbm90IG1haW50YWluIChhcHAgaW5zdGFsbGF0aW9uKSwgYXV0aG9yaXphdGlvbiBjYWxsIHNvbWVob3cgbG9zZXMgdGhlIHBhcmFtZXRlcnNcbiAgLy91cmwgc3RvcmFnZSBpcyBtYWludGFpbmVkIGJ5IHRoZSBuYW1lIFwiYXBwbmFtZVwiXG4gIC8vSXQgaXMgc2V0IGluIGF1dGgucmVzb2x2ZXIgYW5kIHJlbW92ZWQgaGVyZVxuICAvL2lmIGFwcG5hbWUgZXhpc3QgaW4gc2Vzc2lvbiB1c2VkIHRoZSBzdG9yZWQgbmFtZSwgaWYgbm90IHVzZWQgdGhlIHZhbHVlIGZyb20gdGhlIHVybFxuICAvL1xudmFyIGFwcE5hbWVjaGVjaz1sb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnYXBwbmFtZScpO1xuLy9jb25zb2xlLmxvZyhcIiExMTNcIik7XG4vLyBpZihhcHBOYW1lY2hlY2shPT1udWxsKVxuLy8ge1xuLy8gICBpZihhcHBOYW1lY2hlY2s9PVwiL2FwcHNcIilcbi8vICAge1xuLy8gICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKFwiYXBwbmFtZVwiKTtcbi8vICAgfVxuLy8gfVxuLy8gYXBwTmFtZWNoZWNrPWxvY2FsU3RvcmFnZS5nZXRJdGVtKCdhcHBuYW1lJyk7XG4vL2NvbnNvbGUubG9nKFwiITExM1wiKTtcbi8vY29uc29sZS5sb2coYXBwTmFtZWNoZWNrKVxuICAvL1xudmFyIGFwcE5hbWVjaGVjaz1sb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnYXBwbmFtZScpO1xudmFyIGFwcFB1Ymxpc2hTdGF0dXM9bG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3B1Ymxpc2hzdGF0dXMnKTtcbi8vY29uc29sZS5sb2coXCIhMTEzXCIpO1xuLy8gaWYoYXBwTmFtZWNoZWNrIT09bnVsbClcbi8vIHtcbi8vICAgaWYoYXBwTmFtZWNoZWNrPT1cIi9hcHBzXCIpXG4vLyAgIHtcbi8vICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShcImFwcG5hbWVcIik7XG4vLyAgIH1cbi8vIH1cbi8vIGFwcE5hbWVjaGVjaz1sb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnYXBwbmFtZScpO1xuLy9jb25zb2xlLmxvZyhcIiExMTNcIik7XG4vL2NvbnNvbGUubG9nKGFwcE5hbWVjaGVjaylcbiAgbGV0IGFwcG5hbWU6c3RyaW5nO1xuICBsZXQgY2F0ZWdvcnk6c3RyaW5nO1xuXG4vLyBjb25zdCB1cmxQYXJhbXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKHdpbmRvdy5sb2NhdGlvbi5zZWFyY2gpO1xuLy8gY29uc3QgYXBwTmFtZUNoZWNrID0gdXJsUGFyYW1zLmdldCgnYXBwbmFtZScpO1xuLy8gY29uc29sZS5sb2coYXBwTmFtZUNoZWNrKVxuLy8gY29uc3QgY2F0ZWdvcnkgPSB1cmxQYXJhbXMuZ2V0KCdjYXRlZ29yeScpO1xuLy8gY29uc29sZS5sb2coY2F0ZWdvcnkpaVxuXG5cbmxldCBJbnN0YWxsQXBwTmFtZTpzdHJpbmc7XG5JbnN0YWxsQXBwTmFtZT1sb2NhbFN0b3JhZ2UuZ2V0SXRlbShcIkluc3RhbGxlZEFwcE5hbWVcIik7XG5pZihJbnN0YWxsQXBwTmFtZSE9bnVsbCl7XG5jb25zdCBjYXBpdGFsaXplZEFwcE5hbWU6IHN0cmluZyA9IHRoaXMuY2FwaXRhbGl6ZVdvcmRzKEluc3RhbGxBcHBOYW1lLnJlcGxhY2UoLy0vZywgJyAnKSk7XG50aGlzLmNoZWNrQW5kUHVibGlzaEFwcChjYXBpdGFsaXplZEFwcE5hbWUpO1xubG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oXCJJbnN0YWxsZWRBcHBOYW1lXCIpO1xufVxuaWYgKGFwcE5hbWVjaGVjayAhPT0gbnVsbCkge1xuICAvL1xuICBjb25zdCB1cmxQYXJhbXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKGFwcE5hbWVjaGVjay5zcGxpdCgnPycpWzFdKTtcbiAgY29uc3QgYXBwTmFtZVRlbXAgPSB1cmxQYXJhbXMuZ2V0KCdhcHBuYW1lJyk7XG4gIGNvbnN0IGNhdGVnb3J5VGVtcCA9IHVybFBhcmFtcy5nZXQoJ2NhdGVnb3J5Jyk7XG4gIC8vY29uc3QgYXBwTmFtZVRlbXAgPSBhcHBOYW1lY2hlY2suc3BsaXQoJz0nKVsxXS5zcGxpdCgnJicpWzBdOyAvLyBFeHRyYWN0aW5nIGFwcG5hbWUgdmFsdWUgZnJvbSBVUkwgcGFyYW1ldGVyXG4gIC8vbG9jYWxTdG9yYWdlLnNldEl0ZW0oXCJJbnN0YWxsZWRBcHBOYW1lXCIsYXBwTmFtZVRlbXApXG4vLyBFeHRyYWN0aW5nIGNhdGVnb3J5IHZhbHVlIGZyb20gVVJMIHBhcmFtZXRlclxuIC8vIGNvbnN0IGNhdGVnb3J5VGVtcCA9IGFwcE5hbWVjaGVjay5zcGxpdCgnY2F0ZWdvcnk9JylbMV07XG4gIC8vXG4gIGlmIChhcHBOYW1lVGVtcCkge1xuICAgIHRoaXMuaW5zdGFsbEFwcChhcHBOYW1lVGVtcCwgY2F0ZWdvcnlUZW1wKS50aGVuKCgpID0+IHtcbiAgICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKFwiYXBwbmFtZVwiKTtcbiAgICB9KS5jYXRjaChlcnJvciA9PiB7XG4gICAgICAvLyBIYW5kbGUgZXJyb3IgaWYgaW5zdGFsbEFwcCBmYWlsc1xuICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgaW5zdGFsbGluZyBhcHA6JywgZXJyb3IpO1xuICAgICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oXCJhcHBuYW1lXCIpO1xuICAgIH0pO1xuICB9XG5cbi8vIGxldCBhcHBOYW1lOiBzdHJpbmc7IFxuLy8gaWYoYXBwTmFtZWNoZWNrIT09bnVsbCl7XG4vLyAgIGFwcE5hbWU9YXBwTmFtZWNoZWNrLnNwbGl0KCc9JylbMV0uc3BsaXQoJyUyRicpWzBdO1xuLy8gICBpZiAoYXBwTmFtZSkge1xuLy8gICAgIHRoaXMuaW5zdGFsbEFwcChhcHBOYW1lLCkudGhlbigoKSA9PiB7XG4vLyAgICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShcImFwcG5hbWVcIik7XG4gICAgICBcbi8vICAgICB9KVxuLy8gICAgIC5jYXRjaChlcnJvciA9PiB7XG4vLyAgICAgICAvLyBIYW5kbGUgZXJyb3IgaWYgaW5zdGFsbEFwcCBmYWlsc1xuLy8gICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgaW5zdGFsbGluZyBhcHA6JywgZXJyb3IpO1xuLy8gICAgIH0pO1xuLy8gICB9XG4gIFxuICBcbiAgfVxuICBlbHNle1xuICAgIC8vIFZhcmlhYmxlIHRvIHN0b3JlIGFwcG5hbWVcblxuICAgIFxuICAgIHRoaXMucm91dGUucXVlcnlQYXJhbXMucGlwZShcbiAgICAgIHRha2VVbnRpbCh0aGlzLl91bnN1YnNjcmliZUFsbClcbiAgICApLnN1YnNjcmliZShwYXJhbXMgPT4ge1xuICAgICAgYXBwbmFtZSA9IHBhcmFtc1snYXBwbmFtZSddO1xuICAgICAgLy9sb2NhbFN0b3JhZ2Uuc2V0SXRlbShcIkluc3RhbGxlZEFwcE5hbWVcIixhcHBuYW1lKTtcbiAgICAgIGNvbnNvbGUubG9nKGFwcG5hbWUpXG4gICAgICBjYXRlZ29yeSA9IHBhcmFtc1snY2F0ZWdvcnknXTtcbiAgICAgIGNvbnNvbGUubG9nKGNhdGVnb3J5KVxuICAgIFxuICAgICAgaWYgKGFwcG5hbWUpIHtcbiAgICAgICAgLy8gU3BsaXQgdGhlIGFwcG5hbWUgYXQgdGhlIGZpcnN0IG9jY3VycmVuY2Ugb2YgJy8nXG4gICAgICAgIGNvbnN0IGFwcE5hbWVQYXJ0cyA9IGFwcG5hbWUuc3BsaXQoJy8nLCAxKTtcbiAgICAgICAgY29uc3QgYXBwTmFtZSA9IGFwcE5hbWVQYXJ0c1swXTsgLy8gU3RvcmUgYXBwbmFtZVxuICAgICAgICAvL2NvbnN0IGNhdGVnb3J5ID0gY2F0ZWdvcnk7IC8vIFN0b3JlIGNhdGVnb3J5XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKFwiYXBwTmFtZT1cIithcHBOYW1lKTtcbiAgICAgICAgLy8gY29uc29sZS5sb2coXCJjYXRlZ29yeT1cIitjYXRlZ29yeSk7XG4gICAgICAgIFxuICAgICAgICAvLyBOYXZpZ2F0ZSB0byB0aGUgc2FtZSByb3V0ZSB3aXRob3V0IGFueSBxdWVyeSBwYXJhbWV0ZXJzXG4gICAgICAgIGNvbnN0IG5hdmlnYXRpb25FeHRyYXM6IE5hdmlnYXRpb25FeHRyYXMgPSB7XG4gICAgICAgICAgcmVwbGFjZVVybDogdHJ1ZSxcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW10sIG5hdmlnYXRpb25FeHRyYXMpO1xuICAgICAgICBcblxuICAgICAgICBpZiAoYXBwbmFtZSkge1xuICAgICAgICAgIGNvbnNvbGUubG9nKGFwcG5hbWUpO1xuICAgICAgICAgIGNvbnNvbGUubG9nKGNhdGVnb3J5KTtcbiAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShcInB1Ymxpc2hzdGF0dXNcIixcIkZhbHNlXCIpXG4gICAgICAgICAgdGhpcy5pbnN0YWxsQXBwKGFwcG5hbWUsY2F0ZWdvcnkpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgLy8gSGFuZGxlIHN1Y2Nlc3NmdWwgaW5zdGFsbGF0aW9uXG4gICAgICAgICAgICBjb25zb2xlLmxvZygnQXBwIGluc3RhbGxlZCBNZXRob2QgY2FsbGVkOicsIGFwcG5hbWUsIGNhdGVnb3J5KTtcbiAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKFwiYXBwbmFtZVwiKTtcbiAgICAgICAgICB9KVxuICAgICAgICAgIC5jYXRjaChlcnJvciA9PiB7XG4gICAgICAgICAgICAvLyBIYW5kbGUgZXJyb3IgaWYgaW5zdGFsbEFwcCBmYWlsc1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgaW5zdGFsbGluZyBhcHA6JywgZXJyb3IpO1xuICAgICAgICAgICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oXCJhcHBuYW1lXCIpO1xuICAgICAgICAgIH0pO1xuICAgICAgICBcbiAgICAgICAgfVxuICAgICAgLy8gfSBlbHNlIHtcbiAgICAgIC8vICAgY29uc29sZS5lcnJvcignYXBwbmFtZSBvciBjYXRlZ29yeSBxdWVyeSBwYXJhbWV0ZXIgaXMgbWlzc2luZycpO1xuICAgICAgfX0pO1xuXG4gICAgfVxuICAgIFxuICAgIC8vIG9uY2Ugd2UgZml4IGlkZW50aXR5IHNlcnZlciBBUEksIHRoaXMgY29kZSB3aWxsIGJlIG5lZWRlZCBhZ2FpblxuICAgIC8vIFN1YnNjcmliZSB0byB1c2VyIGNoYW5nZXNcbiAgICAvLyB0aGlzLl91c2VyU2VydmljZS51c2VyJFxuICAgIC8vIC5waXBlKHRha2VVbnRpbCh0aGlzLl91bnN1YnNjcmliZUFsbCkpXG4gICAgLy8gLnN1YnNjcmliZSgodXNlcjogYW55KSA9PiB7XG4gICAgLy8gICAgIHRoaXMudXNlciA9IHVzZXI7XG4gICAgLy8gICAgIHRoaXMudXNlckVtYWlsID0gdXNlci5lbWFpbDtcbiAgICAvLyAgICAgdGhpcy51c2VyTmFtZSA9IHVzZXIuRmlyc3ROYW1lICsgJyAnKyB1c2VyLkxhc3ROYW1lIDtcbiAgICAvLyAgICAgdGhpcy51c2VySW1hZ2UgPSB1c2VyLnBpY3R1cmU7XG4gICAgLy8gICAgIC8vIE1hcmsgZm9yIGNoZWNrXG4gICAgLy8gICAgIHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgIC8vIH0pO1xuXG5cblxuXG4gICAgY29uc3QgdXJsID0gc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSgndXJsJyk7XG4gICAgaWYgKHVybCkge1xuICAgICAgd2luZG93LmxvY2F0aW9uLmhyZWYgPSB1cmw7XG4gICAgICAvLyBSZW1vdmUgc2F2ZWQgZGF0YSBmcm9tIHNlc3Npb25TdG9yYWdlXG4gICAgICBzZXNzaW9uU3RvcmFnZS5yZW1vdmVJdGVtKCd1cmwnKTtcblxuICAgICAgLy8gUmVtb3ZlIGFsbCBzYXZlZCBkYXRhIGZyb20gc2Vzc2lvblN0b3JhZ2VcbiAgICAgIHNlc3Npb25TdG9yYWdlLmNsZWFyKCk7XG4gICAgfVxuXG4gIH1cblxuICBcblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgaWYgKGNoYW5nZXMuYXBwTGlzdCAmJiBjaGFuZ2VzLmFwcExpc3QuY3VycmVudFZhbHVlKSB7XG4gICAgICB0aGlzLmFzc2lnbkdyYWRpZW50cygpO1xuICAgIH1cbiAgfVxuXG4gIGFzc2lnbkdyYWRpZW50cygpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5hcHBMaXN0ICYmIHRoaXMuYXBwTGlzdC5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLmFwcExpc3QuZm9yRWFjaCgoYXBwLCBpbmRleCkgPT4ge1xuICAgICAgICBhcHAuZ3JhZGllbnQgPSB0aGlzLmdyYWRpZW50c1tpbmRleCAlIHRoaXMuZ3JhZGllbnRzLmxlbmd0aF07XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2FsbCBhcHBzIEFwcCBWZXJzaW9uIElkIHJvdXRlXG4gICAqXG4gICAqIEBwYXJhbSBhcHBWZXJzaW9uSWRcbiAgICovXG4gIG9wZW5BcHAoYXBwVmVyc2lvbklkOiBudW1iZXIpOiB2b2lkIHtcbiAgICBcbiAgICBjb25zdCBjdXJyZW50VXJsID0gd2luZG93LmxvY2F0aW9uLm9yaWdpbjsgLy8gR2V0IHRoZSBjdXJyZW50IFVSTFxuICAgIC8vIFVwZGF0ZWQgVVJMIGNoZWNrIGxvZ2ljXG4gICAgaWYgKGN1cnJlbnRVcmwuaW5jbHVkZXMoJ2xvY2FsaG9zdDo0MjAwJykgfHwgY3VycmVudFVybC5pbmNsdWRlcygnYnVpbGRlci5heG9uYXRvci5jb20nKSB8fCBjdXJyZW50VXJsLmluY2x1ZGVzKCdhbmRyb21lZGEtYnVpbGRlci1xYS5heG9uYXRvci5jb20nKSkge1xuICAgICAgXG4gICAgICAvLyBFbnN1cmUgdGhhdCB0aGUgdXNlciBpcyBkZWZpbmVkIGFuZCBoYXMgYSBVc2VySURcbiAgICAgIGlmICghdGhpcy51c2VyKSB7XG4gICAgICAgICAgdGhpcy5fYXhvU25hY2tCYXIub3BlblNuYWNrQmFyKCdVc2VyIG5vdCBmb3VuZCBvciBub3QgbG9nZ2VkIGluJywgQXhvU25hY2tCYXJUeXBlLmVycm9yKTtcbiAgICAgICAgICByZXR1cm47IC8vIEV4aXQgdGhlIG1ldGhvZCBpZiB1c2VyIGlzIG5vdCBhdmFpbGFibGVcbiAgICAgIH1cblxuICAgICAgLy8gQ2hlY2sgZm9yIHJlcXVpcmVkIHBlcm1pc3Npb25zXG4gICAgICBjb25zdCBoYXNSZXF1aXJlZFBlcm1pc3Npb24gPSB0aGlzLnBlcm1pc3Npb25zLmluY2x1ZGVzKCdBUFBfQlVJTERFUicpIHx8IHRoaXMucGVybWlzc2lvbnMuaW5jbHVkZXMoJ0FQUF9JQU0nKTtcbiAgICAgIGlmICghaGFzUmVxdWlyZWRQZXJtaXNzaW9uKSB7XG4gICAgICAgICAgdGhpcy5fYXhvU25hY2tCYXIub3BlblNuYWNrQmFyKCdZb3UgbmVlZCBlaXRoZXIgQVBQX0JVSUxERVIgb3IgQVBQX0lBTSBwZXJtaXNzaW9ucyB0byBwZXJmb3JtIHRoaXMgYWN0aW9uLicsIEF4b1NuYWNrQmFyVHlwZS5lcnJvcik7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIERpcmVjdGx5IG9wZW4gdGhlIGFwcCByZWdhcmRsZXNzIG9mIFVSTCBpZiB0aGUgY29uZGl0aW9ucyBhcmUgbm90IG1ldFxuICAgIHRoaXMub3BlbkFwcEV2ZW50LmVtaXQoYXBwVmVyc2lvbklkKTtcbiAgfVxuXG5cblxuICBuYXZpZ2F0ZVRvSG9tZShhcHBWZXJzaW9uSWQ6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMuX3JvdXRlci5uYXZpZ2F0ZUJ5VXJsKGBhcHBzLyR7YXBwVmVyc2lvbklkfS9ob21lYCk7XG4gIH1cblxuICAvKipcbiAgICogZnVuY3Rpb24gdXNlIHRvIFN3aXRjaCB0aGUgb3JnYW5pemF0aW9uXG4gICAqL1xuICBzd2l0Y2hBY2NvdW50KG9yZ2FuaXphdGlvbklkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLnN3aXRjaEFjY291bnRFdmVudC5lbWl0KG9yZ2FuaXphdGlvbklkKTtcbiAgICB0aGlzLmdldFVzZXJQZXJtaXNzaW9ucygpO1xuICAgIHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTaWduIG91dFxuICAgKi9cbiAgc2lnbk91dCgpOiB2b2lkIHtcbiAgICB0aGlzLl9sb2dnaW5nU2VydmljZS50cmFja0V2ZW50KCd1c2VyIGxvZ2dlZCBvdXQnLHtzdGVwIDogJ0J5ZSBCeWUgJyt0aGlzLnVzZXJOYW1lfSk7XG4gICAgdGhpcy5fYXV0aFNlcnZpY2Uuc2lnbk91dCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEJpbGxpbmdcbiAgICovXG4gIG5hdmlnYXRlVG9CaWxsaW5nKCk6IHZvaWQge1xuICAgIHRoaXMuX3JvdXRlci5uYXZpZ2F0ZUJ5VXJsKCdwYXltZW50aW5mby9wcmljaW5nJylcbiAgICBcbiAgfVxuXG5cblxuICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8gQ3JlYXRlIEFwcHAvLy8vLy8vLy8vLy8vLy8vLy8vXG4gIC8qKlxuICAgKnRvIGNyZWF0ZSBuZXcgYXBwXG4gICAqL1xuICAgb3BlbkNyZWF0ZUFwcERpYWxvZygpOiB2b2lkIHtcbiAgICBjb25zdCBkaWFsb2dSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKEFwcENyZWF0ZURpYWxvZ0NvbXBvbmVudENvbXBvbmVudCwge1xuICAgICAgd2lkdGg6ICc2MDBweCcsXG4gICAgICBoZWlnaHQ6ICdhdXRvJyxcbiAgICAgIHBhbmVsQ2xhc3M6ICdjdXN0b20tZGlhbG9nLWNvbnRhaW5lcicsXG4gICAgICBiYWNrZHJvcENsYXNzOiAnY3VzdG9tLWRpYWxvZy1iYWNrZHJvcCdcbiAgICB9KTtcblxuICAgIGRpYWxvZ1JlZi5hZnRlckNsb3NlZCgpLnN1YnNjcmliZShyZXN1bHQgPT4ge1xuICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICBjb25zdCB7IG5hbWUsIGRlc2NyaXB0aW9uIH0gPSByZXN1bHQ7XG5cbiAgICAgICAgdGhpcy5fYXhvU25hY2tCYXIub3BlblNuYWNrQmFyKCdDcmVhdGluZyBBcHAuLi4nLCBBeG9TbmFja0JhclR5cGUuaW5mbyk7XG4gICAgICAgIHRoaXMuY3JlYXRlQXBwKG5hbWUsIGRlc2NyaXB0aW9uKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGNyZWF0ZUFwcChuYW1lOiBzdHJpbmcsIGRlc2NyaXB0aW9uOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBmb3JtRGF0YUZvclNlcnZpY2UgPSBuZXcgRm9ybURhdGEoKTtcbiAgICBmb3JtRGF0YUZvclNlcnZpY2UuYXBwZW5kKCduYW1lJywgbmFtZSk7XG4gICAgZm9ybURhdGFGb3JTZXJ2aWNlLmFwcGVuZCgnZGVzY3JpcHRpb24nLCBkZXNjcmlwdGlvbik7XG5cbiAgICB0aGlzLl9tcEFwcExpc3RTZXJ2aWNlLmFkZEFwcEJhc2ljSW5mbyhmb3JtRGF0YUZvclNlcnZpY2UpLnRvUHJvbWlzZSgpXG4gICAgICAudGhlbihyZXNwb25zZSA9PiB7XG4gICAgICAgIGlmIChyZXNwb25zZT8uYWRkQXBwQmFzaWNJbmZvPy5zdGF0dXMgPT09ICdzdWNjZXNzJyAmJiByZXNwb25zZS5hZGRBcHBCYXNpY0luZm8uYXBwPy5hcHB2ZXJzaW9uX2lkKSB7XG4gICAgICAgICAgLy90aGlzLl9uYXZpZ2F0aW9uLnVwZGF0ZUNsYXNzaWNOYXZpZ2F0aW9uUm91dGVzKHJlc3BvbnNlLmFkZEFwcEJhc2ljSW5mby5hcHAuYXBwdmVyc2lvbl9pZCk7XG4gICAgICAgICAgLy90aGlzLl9yb3V0ZXIubmF2aWdhdGUoWydhcHBzJywgcmVzcG9uc2UuYWRkQXBwQmFzaWNJbmZvLmFwcC5hcHB2ZXJzaW9uX2lkXSk7XG4gICAgICAgICAgXG4gICAgICAgICAgdGhpcy5fYXhvU25hY2tCYXIub3BlblNuYWNrQmFyKCdBcHAgY3JlYXRlZC4nLCBBeG9TbmFja0JhclR5cGUuc3VjY2Vzcyk7XG4gICAgICAgICAgdGhpcy5vcGVuQXBwKHJlc3BvbnNlLmFkZEFwcEJhc2ljSW5mby5hcHAuYXBwdmVyc2lvbl9pZClcbiAgICAgICAgfSBlbHNlIGlmIChyZXNwb25zZT8uYWRkQXBwQmFzaWNJbmZvPy5hcHAgPT09ICdhbHJlYWR5X2V4aXN0cycpIHtcbiAgICAgICAgICB0aGlzLl9heG9TbmFja0Jhci5vcGVuU25hY2tCYXIoJ0FwcCBhbHJlYWR5IGV4aXN0cycsIEF4b1NuYWNrQmFyVHlwZS53YXJuaW5nKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLl9heG9TbmFja0Jhci5vcGVuU25hY2tCYXIoJ09vcHMhIFNvbWV0aGluZyB3ZW50IHdyb25nJywgQXhvU25hY2tCYXJUeXBlLmVycm9yKTtcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICAgIC5jYXRjaChlcnJvciA9PiB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGNyZWF0aW5nIGFwcDonLCBlcnJvcik7XG4gICAgICAgIHZhciBlcnJvck1lc3NhZ2UgPSAnT29wcyEgU29tZXRoaW5nIHdlbnQgd3JvbmcnXG4gICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgIGlmIChlcnJvciA9PT0gJ0FYX0VSUl82NycpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGVycm9yTWVzc2FnZSA9ICdPb3BzISBDYW5cXCd0IHJlYWNoIG91ciBzZXJ2ZXJzIPCfk6EuIFBsZWFzZSB3YWl0LCB3ZVxcJ2xsIG5vdGlmeSB5b3Ugc29vbi4nO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICAgIHRoaXMuX2F4b1NuYWNrQmFyLm9wZW5TbmFja0JhcihlcnJvck1lc3NhZ2UsIEF4b1NuYWNrQmFyVHlwZS5lcnJvcik7XG4gICAgICB9KTtcbiAgfVxuLy9UcnlpbmcgdG8gaW1wbGVtZW50IHVybCBhcyB3ZWxsIGFzIGJ1dHRvbiBmdW5jdGlvbmFsaXR5IGZvciBpbnN0YWxsaW5nIGFwcFxuLy8gYXN5bmMgaW5zdGFsbEFwcCh1c2VySW5wdXQ/OiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgXG4vLyAgIGlmICghdXNlcklucHV0KSB7XG4vLyAgICAgdXNlcklucHV0ID0gcHJvbXB0KCdFbnRlciB0aGUgc3RyaW5nIHRvIHNlbmQgdG8gdGhlIEFQSTonKTtcbi8vICAgICBpZiAoIXVzZXJJbnB1dCkge1xuLy8gICAgICAgLy8gSWYgdXNlciBjYW5jZWxzIG9yIHByb3ZpZGVzIG5vIGlucHV0LCBkbyBub3RoaW5nXG4vLyAgICAgICByZXR1cm47XG4vLyAgICAgfVxuLy8gICB9XG5cbi8vICAgdGhpcy5fYXhvU25hY2tCYXIub3BlblNuYWNrQmFyKCdJbnN0YWxsaW5nIEFwcC4uLicsIEF4b1NuYWNrQmFyVHlwZS5pbmZvKTtcbiAgXG4gXG5jaGVja0FuZFB1Ymxpc2hBcHAoaW5zdGFsbGVkQXBwOiBzdHJpbmcpIHtcbiAgLy9cbiAgY29uc3QgYXBwTmFtZWNoZWNrID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2FwcG5hbWUnKTsgLy8gUmVwbGFjZSB3aXRoIHlvdXIgbG9naWMgdG8gZ2V0IGFwcE5hbWVjaGVja1xuICBjb25zdCBhcHBQdWJsaXNoU3RhdHVzID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3B1Ymxpc2hzdGF0dXMnKTsgLy8gUmVwbGFjZSB3aXRoIHlvdXIgbG9naWMgdG8gZ2V0IGFwcFB1Ymxpc2hTdGF0dXNcbiAgY29uc3QgYXBwSW5zdGFsbFN0YXR1cz1sb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnaW5zdGFsbHN0YXR1cycpXG5cbiAgIGlmIChhcHBOYW1lY2hlY2sgPT0gbnVsbCAmJiBhcHBQdWJsaXNoU3RhdHVzID09IFwiRmFsc2VcIiAmJiBhcHBJbnN0YWxsU3RhdHVzPT1cIlRydWVcIikge1xuICAgIGNvbnN0IGFwcElkID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3B1Ymxpc2hBcHBJZERhdGEnKTtcbiAgICBjb25zdCBhcHBWZXJzaW9uID0gXCIxLjAwXCI7XG4gICAgY29uc3QgcHVibGlzaFN0YXR1cyA9IFwiUFwiO1xuICAgIGlmIChhcHBJZCkge1xuICAgICAgdGhpcy5fY29tbW9uU2VydmljZS5wdWJsaXNoYXBwKGFwcElkLCBhcHBWZXJzaW9uLCBwdWJsaXNoU3RhdHVzKS5zdWJzY3JpYmUoXG4gICAgICAgIHJlc3BvbnNlID0+IHtcbiAgICAgICAgICAvLyBIYW5kbGUgdGhlIHJlc3BvbnNlIGlmIG5lZWRlZFxuICAgICAgICAgIGNvbnNvbGUubG9nKCdQdWJsaXNoIHJlc3BvbnNlOicsIHJlc3BvbnNlKTtcbiAgICAgICAgICAvLyBjb25zdCBhcHBOYW1lID0gaW5zdGFsbGVkQXBwIHx8ICdZb3VyIEFwcCc7XG4gICAgICAgICAgLy8gY29uc3QgYXBwVmVyc2lvbiA9ICcxLjAwMCc7XG4gICAgICAgICAgLy8gY29uc3Qgc3VjY2Vzc01lc3NhZ2UgPSBgQXBwOiAke2FwcE5hbWV9IHZlcnNpb24gJHthcHBWZXJzaW9ufSBpcyBwdWJsaXNoZWQgc3VjY2Vzc2Z1bGx5LmA7XG4gICAgICAgICAvLyB0aGlzLm9wZW5TdWNjZXNzRGlhbG9nKCd2ZXJzaW9uIHB1Ymxpc2hlZCBzdWNjZXNzZnVsbHkhJyk7XG4gICAgICAgICBjb25zdCBhcHBOYW1lID0gaW5zdGFsbGVkQXBwO1xuICAgICAgICAgY29uc3QgYXBwVmVyc2lvbiA9ICcxLjAwMCc7XG4gICAgICAgICBjb25zdCBib3hoZWFkaW5nPWBJbnN0YWxsZWRgXG4gICAgICAgICBjb25zdCBzdWNjZXNzTWVzc2FnZSA9IGBBcHA6ICR7YXBwTmFtZX0gdmVyc2lvbiAke2FwcFZlcnNpb259IGlzIGluc3RhbGxlZCBzdWNjZXNzZnVsbHkuIGA7XG4gICAgICAgICBjb25zdCBzdWNjZXNzRGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3BlbihTdWNjZXNzRGlhbG9nQ29tcG9uZW50LCB7XG4gICAgICAgICAgIHdpZHRoOiAnNTAwcHgnLFxuICAgICAgICAgICBkYXRhOiB7IG1lc3NhZ2U6IHN1Y2Nlc3NNZXNzYWdlICwgaGVhZGluZzpib3hoZWFkaW5nfSxcbiAgICAgICAgICAgZGlzYWJsZUNsb3NlOiB0cnVlXG4gICAgICAgICB9KTtcbiAgICAgICAgICAvLyBSZW1vdmUgbG9jYWwgc3RvcmFnZSBpdGVtc1xuICAgICAgICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKCdwdWJsaXNoQXBwSWREYXRhJyk7XG4gICAgICAgICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oJ3B1Ymxpc2hzdGF0dXMnKTtcbiAgICAgICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSgnaW5zdGFsbHN0YXR1cycpO1xuICAgICAgICB9LFxuICAgICAgICBlcnJvciA9PiB7XG4gICAgICAgICAgLy8gSGFuZGxlIGVycm9yIGlmIG5lZWRlZFxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIHB1Ymxpc2hpbmcgYXBwOicsIGVycm9yKTtcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICB9XG4gIH1cbn1cbmZldGNoQXBwRGV0YWlscyhmbGF0dGVuOiBhbnkpIHtcbiAgaWYgKGZsYXR0ZW4gJiYgZmxhdHRlbi5hcHBWZXJzaW9uSWQpIHtcbiAgICB0aGlzLl9tcEFwcExpc3RTZXJ2aWNlLmZldGNoQXBwRGV0YWlscyhmbGF0dGVuLmFwcFZlcnNpb25JZCwgdGhpcy5jb21tb25MaWJDb25maWcuYXhvbmF0b3JYMVVybCkuc3Vic2NyaWJlKFxuICAgICAgKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgY29uc3QgaXNBcHBDaGFuZ2VkQWZ0ZXJQdWJsaXNoID0gcmVzcG9uc2U/LmRhdGE/LmRldGFpbHM/LmlzX2FwcF9jaGFuZ2VkX2VkaXRlZF9hZnRlcl9wdWJsaXNoIHx8IGZhbHNlO1xuICAgICAgICB0aGlzLmlzQXBwQ2hhbmdlZEFmdGVyUHVibGlzaCA9IGlzQXBwQ2hhbmdlZEFmdGVyUHVibGlzaDtcblxuICAgICAgICB0aGlzLmlzQXBwQ2hhbmdlZEFmdGVyUHVibGlzaCA9IHRydWU7XG4gICAgICAgIGNvbnNvbGUubG9nKFwiRGV0YWlscyBGb3VuZFwiKVxuICAgICAgICAvLyBUcmlnZ2VyIGNoYW5nZSBkZXRlY3Rpb24gdG8gdXBkYXRlIHRoZSB2aWV3XG4gICAgICAgIC8vIHRoaXMuZGV0ZWN0Q2hhbmdlcygpOyAvLyA8LS0tIENhbGwgZGV0ZWN0Q2hhbmdlcygpIGhlcmVcblxuICAgICAgfSxcbiAgICAgIChlcnJvcikgPT4ge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBmZXRjaGluZyBhcHAgZGV0YWlsczonLCBlcnJvcik7XG4gICAgICB9XG4gICAgKTtcbiAgfSBlbHNlIHtcbiAgICBjb25zb2xlLmVycm9yKCdhcHBWZXJzaW9uSWQgaXMgbWlzc2luZyBvciBpbnZhbGlkIGluIHRoZSBmbGF0dGVuIG9iamVjdDonLCBmbGF0dGVuKTtcbiAgfVxufVxuXG5cbmFzeW5jICBpbnN0YWxsQXBwKHVzZXJJbnB1dDogc3RyaW5nLCBjYXRlZ29yeTogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gIC8vXG4gIFxuICB0aGlzLl9heG9TbmFja0Jhci5vcGVuU25hY2tCYXIoICdJbnN0YWxsaW5nIEFwcC4uLicsIEF4b1NuYWNrQmFyVHlwZS5pbmZvKTtcbiAgY29uc3QgbG9hZGluZ0RpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nLm9wZW4oTG9hZGluZ0FwcGluc3RhbGxDb21wb25lbnQsIHtcbiAgICB3aWR0aDogJzYwMHB4JyxcbiAgICBkYXRhOiB7IGxvYWRpbmdNZXNzYWdlOiAnSW5zdGFsbGluZyBhcHAsIHBsZWFzZSB3YWl0Li4uJyB9LFxuICAgIGRpc2FibGVDbG9zZTogdHJ1ZVxuICB9KTtcbiAgLy9jb25zdCBsb2FkaW5nRGlhbG9nUmVmID0gdGhpcy5vcGVuTG9hZGluZ0RpYWxvZ1dpdGhNZXNzYWdlKCdQbGVhc2Ugd2FpdC4gSW5zdGFsbGluZyBpbiBwcm9ncmVzcy4uLicpO1xuICBcbiAgICBjb25zdCBkYXRhID0ge1xuICAgICAgcmVxdWVzdFN0cmluZzogdXNlcklucHV0LFxuICAgICAgc2Vjb25kU3RyaW5nOiBjYXRlZ29yeVxuICAgIH07IFxuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5odHRwLnBvc3Q8c3RyaW5nPignSW5zdGFsbEFwcCcsIGRhdGEsIHtcbiAgICAgIGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycyh7XG4gICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicgLy8gU2V0IGNvbnRlbnQgdHlwZSB0byBhcHBsaWNhdGlvbi9qc29uXG4gICAgICB9KSxcbiAgICAgIHdpdGhDcmVkZW50aWFsczogdHJ1ZVxuICAgIH0pLnRvUHJvbWlzZSgpO1xuXG4gICAgLy9jb25zb2xlLmxvZygnUmVzcG9uc2UgZnJvbSBzZXJ2ZXI6JywgcmVzcG9uc2UpOyBcbiAgICBcbiAgICAvL2NvbnN0IHJlc3BvbnNlT2JqZWN0ID0gSlNPTi5wYXJzZShyZXNwb25zZSk7XG4gICAgXG4gICAgXG4gIC8vICAgaWYgKHJlc3BvbnNlKSB7XG5cbiAgLy8gICAgIGlmKHJlc3BvbnNlT2JqZWN0LnN0YXR1cz09XCJzdWNjZXNzXCIpe1xuICAvLyAgICAgdGhpcy5fYXhvU25hY2tCYXIub3BlblNuYWNrQmFyKCdBcHAgaW5zdGFsbGVkIHN1Y2Nlc3NmdWxseScsIEF4b1NuYWNrQmFyVHlwZS5zdWNjZXNzKTtcbiAgLy8gICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAvLyAgICAgICB3aW5kb3cubG9jYXRpb24ucmVsb2FkKCk7XG4gIC8vICAgICB9LCAxNTAwMCk7XG4gIC8vICAgfSBlbHNlIGlmKHJlc3BvbnNlT2JqZWN0LnN0YXR1cz09J2ZhaWx1cmUnKSB7XG4gIC8vICAgICB0aGlzLl9heG9TbmFja0Jhci5vcGVuU25hY2tCYXIoJ0Zvcm0gTm90IEZvdW5kIGluIHRoaXMgYXBwJywgQXhvU25hY2tCYXJUeXBlLmVycm9yKTtcbiAgLy8gICB9XG4gIC8vICAgICBlbHNlIHtcbiAgLy8gICAgIHRoaXMuX2F4b1NuYWNrQmFyLm9wZW5TbmFja0JhcignT29wcyEgU29tZXRoaW5nIHdlbnQgd3Jvbmcgd2hpbGUgaW5zdGFsbGluZyB0aGUgYXBwLicsIEF4b1NuYWNrQmFyVHlwZS5lcnJvcik7XG4gICAgICBcbiAgLy8gICAgIGNvbnNvbGUuZXJyb3IoQXhvU25hY2tCYXJUeXBlLmVycm9yKTtcbiAgLy8gICB9fVxuICAvLyB9IGNhdGNoIChlcnJvcikge1xuICAvLyAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGluc3RhbGxpbmcgYXBwOicsIGVycm9yKTtcbiAgLy8gICB0aGlzLl9heG9TbmFja0Jhci5vcGVuU25hY2tCYXIoJ09vcHMhIFNvbWV0aGluZyB3ZW50IHdyb25nIHdoaWxlIGluc3RhbGxpbmcgdGhlIGFwcC4nLCBBeG9TbmFja0JhclR5cGUuZXJyb3IpO1xuICAvLyAgIC8vdGhpcy5fbG9nZ2luZ1NlcnZpY2UudHJhY2tFdmVudCgnRXJyb3Igb2NjdXJyZWQgd2hpbGUgaW5zdGFsbGluZyBhcHAnLCBlcnJvcik7XG4gIC8vIH1cblxuICAgIFxuICAgICAgLy9jb25zdCByZXNwb25zZU9iamVjdCA9IEpTT04ucGFyc2UocmVzcG9uc2UpO1xuICAgICAgLy9jb25zb2xlLmxvZyhyZXNwb25zZU9iamVjdCk7XG4gICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShcIkluc3RhbGxlZEFwcE5hbWVcIix1c2VySW5wdXQpXG4gICAgICBjb25zdCByZXNwb25zZU9iamVjdCA9IHR5cGVvZiByZXNwb25zZSA9PT0gJ3N0cmluZycgPyBKU09OLnBhcnNlKHJlc3BvbnNlKSA6IHJlc3BvbnNlO1xuICAgICAgXG4gICAgICBpZiAocmVzcG9uc2UpIHtcbiAgICAgICAgLy9pZiAocmVzcG9uc2VPYmplY3QpIHtcbiAgICAgICAgIGlmIChyZXNwb25zZU9iamVjdC5zdGF0dXMgPT09IFwic3VjY2Vzc1wiKSB7ICAgICAgICAgIFxuICAgICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKFwiaW5zdGFsbHN0YXR1c1wiLFwiVHJ1ZVwiKVxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgIFxuICAgICAgICAgICAgICB0aGlzLl9heG9TbmFja0Jhci5vcGVuU25hY2tCYXIoJ0FwcCBpbnN0YWxsZWQgc3VjY2Vzc2Z1bGx5JywgQXhvU25hY2tCYXJUeXBlLnN1Y2Nlc3MpO1xuICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24ucmVsb2FkKCk7XG4gICAgICAgICAgICAgIGxvYWRpbmdEaWFsb2dSZWYuY2xvc2UoKTtcbiAgICAgICAgICAgIH0sIDIwMDAwKTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICBcbiAgICAgICAgICAvLyB9IGVsc2UgaWYgKHJlc3BvbnNlT2JqZWN0LnN0YXR1cyA9PT0gJ2ZhaWx1cmUnKSB7XG4gICAgICAgICAgLy8gICB0aGlzLl9heG9TbmFja0Jhci5vcGVuU25hY2tCYXIoJ0Zvcm0gTm90IEZvdW5kIGluIHRoaXMgYXBwJywgQXhvU25hY2tCYXJUeXBlLmVycm9yKTtcbiAgICAgICAgfWVsc2Uge1xuICAgICAgICAgIHRoaXMuX2F4b1NuYWNrQmFyLm9wZW5TbmFja0JhcignRm9ybSBjYW5ub3QgYmUgZm91bmQgZm9yIHRoaXMgYXBwJywgQXhvU25hY2tCYXJUeXBlLmVycm9yKTtcbiAgICAgICAgICBsb2FkaW5nRGlhbG9nUmVmLmNsb3NlKCk7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihBeG9TbmFja0JhclR5cGUuZXJyb3IpO1xuICAgICAgICB9fVxuICAgICAgICBlbHNle1xuICAgICAgICAgIHRoaXMuX2F4b1NuYWNrQmFyLm9wZW5TbmFja0JhcignT29wcyFTb21ldGhpbmcgd2VudCB3cm9uZyB3aGlsZSBjcmVhdGluZyB0aGUgYXBwJywgQXhvU25hY2tCYXJUeXBlLmVycm9yKTtcbiAgICAgICAgICBsb2FkaW5nRGlhbG9nUmVmLmNsb3NlKCk7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihBeG9TbmFja0JhclR5cGUuZXJyb3IpO1xuICAgICAgICB9XG4gICAgfSAgIFxuXG5cbiAgICBvcGVuRGVsZXRlQXBwRGlhbG9nKGFwcFZlcnNpb25JZDpudW1iZXIpe1xuICAgICAgY29uc3QgZGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3BlbihDb25maXJtYXRpb25Nb2RhbENvbXBvbmVudCwge1xuICAgICAgICB3aWR0aDogJzMwJScsXG4gICAgICBkYXRhOiB7XG4gICAgICAgIHRpdGxlOiAnRGVsZXRlIEFwcCcsXG4gICAgICAgIG1lc3NhZ2U6ICdBcmUgeW91IHN1cmUgd2FudCB0byBkZWxldGUgdGhpcyBhcHA/JyxcbiAgICAgICAgY29uZmlybUJ1dHRvblRleHQ6ICdEZWxldGUnLFxuICAgICAgICBjYW5jZWxCdXR0b25UZXh0OiAnQ2FuY2VsJyxcbiAgICAgICAgY29uZmlybUJ1dHRvblR5cGU6ICdkZWxldGUnXG4gICAgICB9LFxuICAgICAgcGFuZWxDbGFzczogJ2NvbmZpcm0tbW9kYWwtY29udGFpbmVyJ1xuICAgICAgfSk7XG5cbiAgICAgIGRpYWxvZ1JlZi5hZnRlckNsb3NlZCgpLnN1YnNjcmliZShyZXN1bHQgPT4ge1xuICAgICAgICBpZiAocmVzdWx0KSB7XG4gICAgICAgICAgdGhpcy5kZWxldGVBcHAoYXBwVmVyc2lvbklkKTsgLy8gUHJvY2VlZCB3aXRoIGRlbGV0aW9uXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGRlbGV0ZUFwcChhcHBWZXJzaW9uSWQ6bnVtYmVyKTogdm9pZCB7XG4gICAgICB0aGlzLl9mbGF0dGVuU2VydmljZS5nZXRGbGF0dGVuRGF0YShhcHBWZXJzaW9uSWQpXG4gICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLl91bnN1YnNjcmliZUFsbCksXG4gICAgICAgICAgICAgIHN3aXRjaE1hcCgoZmxhdHRlbikgPT4ge1xuICAgICAgICAgICAgICAgICAgaWYgKGZsYXR0ZW4gJiYgZmxhdHRlbi5hcHBJZCAhPT0gdW5kZWZpbmVkICYmIGZsYXR0ZW4udmVyc2lvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgY29uc3QgYXBwSWQgPSBmbGF0dGVuLmFwcElkLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICAgICAgICAgICAgY29uc3QgYXBwVmVyc2lvbiA9IGZsYXR0ZW4udmVyc2lvbi50b1N0cmluZygpO1xuICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEFwcFY9YXBwVmVyc2lvbklkO1xuICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiQXBwIHZlcnNpb24gSWQ6XCIrYXBwVmVyc2lvbklkKTtcblxuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0YT17XG4gICAgICAgICAgICAgICAgICAgICAgICBcIkFwcCBJZFwiIDogZmxhdHRlbi5hcHBJZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiQXBwIE5hbWVcIiA6IGZsYXR0ZW4uYXBwTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiQXBwIHZlcnNpb25cIiA6IGZsYXR0ZW4udmVyc2lvblxuICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdGZXRjaGVkIGFwcCBkZXRhaWxzIGZyb20gZmxhdHRlbjonLCB7IGFwcElkLCBhcHBWZXJzaW9uIH0pO1xuICBcbiAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fbXBBcHBMaXN0U2VydmljZS5kZWxldGVBcHAoYXBwSWQsIGFwcFZlcnNpb24udG9TdHJpbmcoKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXRjaEVycm9yKChlcnJvcikgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdFcnJvciBvY2N1cnJlZCB3aGlsZSBkZWxldGluZyBhcHA6JywgZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEhhbmRsZSB0aGUgZXJyb3IsIGUuZy4sIGRpc3BsYXkgYSBtZXNzYWdlIG9yIHBlcmZvcm0gYWRkaXRpb25hbCBhY3Rpb25zXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ0Vycm9yOiBmbGF0dGVuIG9iamVjdCBvciBpdHMgcHJvcGVydGllcyBhcmUgdW5kZWZpbmVkLicpO1xuICAgICAgICAgICAgICAgICAgICAgIC8vIEhhbmRsZSB0aGUgY2FzZSB3aGVyZSBmbGF0dGVuIG9yIGl0cyBwcm9wZXJ0aWVzIGFyZSB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcignRmxhdHRlbiBvYmplY3Qgb3IgaXRzIHByb3BlcnRpZXMgYXJlIHVuZGVmaW5lZCcpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgIClcbiAgICAgICAgICAuc3Vic2NyaWJlKFxuICAgICAgICAgICAgICAocmVzcG9uc2UpID0+IHtcbiAgICAgICAgICAgICAgICAgIC8vIEhhbmRsZSB0aGUgc3VjY2VzcyByZXNwb25zZSBoZXJlIGlmIG5lZWRlZFxuICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ0RlbGV0ZSBhcHAgc3VjY2VzczonLCByZXNwb25zZSk7XG4gICAgICAgICAgICAgICAgIC8vIFJlbW92ZSB0aGUgZGVsZXRlZCBhcHAgZnJvbSB0aGUgYXBwTGlzdFxuICAgICAgICAgICAgICAgICB0aGlzLmFwcExpc3QgPSB0aGlzLmFwcExpc3QuZmlsdGVyKGFwcCA9PiBhcHAuYXBwVmVyc2lvbklkICE9PSBhcHBWZXJzaW9uSWQpO1xuICAgICAgICAgICAgICAgICB0aGlzLl9heG9TbmFja0Jhci5vcGVuU25hY2tCYXIoJ0FwcCBkZWxldGVkIHN1Y2Nlc3NmdWxseScsIEF4b1NuYWNrQmFyVHlwZS5zdWNjZXNzKTtcbiAgICAgICAgICAgICAgICAgdGhpcy5fbG9nZ2luZ1NlcnZpY2UudHJhY2tFdmVudCgnQXBwIGRlbGV0ZWQnLCB0aGlzLmRhdGEpO1xuICAgICAgICAgICAgICAgICAgLy8gTWFudWFsbHkgdHJpZ2dlciBjaGFuZ2UgZGV0ZWN0aW9uIHRvIHVwZGF0ZSB0aGUgdmlld1xuICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpOyAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAoZXJyb3IpID0+IHtcbiAgICAgICAgICAgICAgICAgIC8vIEhhbmRsZSB0aGUgZXJyb3IgaGVyZSBpZiBuZWVkZWRcbiAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0RlbGV0ZSBhcHAgZXJyb3I6JywgZXJyb3IpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgKTtcbiAgfVxuICAgIFxuICBcblxucHJpdmF0ZSBvcGVuTG9hZGluZ0RpYWxvZ1dpdGhNZXNzYWdlKG1lc3NhZ2U6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICBcbiAgY29uc3QgZGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3BlbihMb2FkaW5nQXBwaW5zdGFsbENvbXBvbmVudCwge1xuICAgIHdpZHRoOiAnNTAwcHgnLFxuICAgIFxuICAgIHBhbmVsQ2xhc3M6ICdhcHAtbG9hZGluZy1kaWFsb2cnLFxuICAgIGRhdGE6IHsgbWVzc2FnZSwgdHlwZTogJ1lvdXIgYXBwIGlzIGJlaW5nIFB1Ymxpc2hlZC4uLicgfSxcbiAgfSk7XG5cbiAgcmV0dXJuIG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlKSA9PiB7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBkaWFsb2dSZWYuY2xvc2UoKTtcbiAgICAgIC8vdGhpcy5vcGVuU3VjY2Vzc0RpYWxvZygndmVyc2lvbiBwdWJsaXNoZWQgc3VjY2Vzc2Z1bGx5IScpO1xuICAgICAgcmVzb2x2ZSgpOyAvLyBSZXNvbHZlIHRoZSBwcm9taXNlIGFmdGVyIGNsb3NpbmcgdGhlIGRpYWxvZ1xuICAgIH0sIDEzODAwKTsgLy8gMTMuNiBzZWNvbmRzIGluIG1pbGxpc2Vjb25kc1xuICB9KTtcbn1cblxucHJpdmF0ZSBvcGVuU3VjY2Vzc0RpYWxvZyhtZXNzYWdlOiBzdHJpbmcpOiB2b2lkIHtcbiAgLy9cbiAgdGhpcy5fZmxhdHRlblNlcnZpY2UuZmxhdHRlbiQucGlwZShcbiAgICB0YWtlKDEpLFxuICAgIHN3aXRjaE1hcCgoZmxhdHRlbikgPT4ge1xuICAgICAgaWYgKCFmbGF0dGVuIHx8ICFmbGF0dGVuLmFwcFZlcnNpb25JZCkge1xuICAgICAgICByZXR1cm4gdGhyb3dFcnJvcignRmxhdHRlbiBvYmplY3Qgb3IgaXRzIHByb3BlcnRpZXMgYXJlIHVuZGVmaW5lZCcpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGZvcmtKb2luKHtcbiAgICAgICAgZmxhdHRlbjogb2YoZmxhdHRlbiksXG4gICAgICAgIGFwcERldGFpbHM6IHRoaXMuX21wQXBwTGlzdFNlcnZpY2UuZmV0Y2hBcHBEZXRhaWxzKGZsYXR0ZW4uYXBwVmVyc2lvbklkLCB0aGlzLmNvbW1vbkxpYkNvbmZpZy5heG9uYXRvclgxVXJsKS5waXBlKFxuICAgICAgICAgIGNhdGNoRXJyb3IoKGVycm9yKSA9PiB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBmZXRjaGluZyBhcHAgZGV0YWlsczonLCBlcnJvcik7XG4gICAgICAgICAgICByZXR1cm4gb2YobnVsbCk7XG4gICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgICAgfSk7XG4gICAgfSlcbiAgKS5zdWJzY3JpYmUoKHsgZmxhdHRlbiwgYXBwRGV0YWlscyB9KSA9PiB7XG4gICAgY29uc29sZS5sb2coJ2ZldGNoQXBwRGV0YWlscyBmdW5jdGlvbiBjYWxsZWQgNCcpO1xuICAgIHRoaXMuaXNBcHBDaGFuZ2VkQWZ0ZXJQdWJsaXNoID0gYXBwRGV0YWlscz8uZGF0YT8uZGV0YWlscz8uaXNfYXBwX2NoYW5nZWRfZWRpdGVkX2FmdGVyX3B1Ymxpc2ggfHwgZmFsc2U7IC8vIFNldCBpc0FwcENoYW5nZWRBZnRlclB1Ymxpc2ggYmFzZWQgb24gdGhlIEFQSSByZXNwb25zZVxuICAgIC8vIEZldGNoIHRoZSBtaW5vciB2ZXJzaW9uIGZyb20gZ2V0VmVyc2lvbkxpc3RcbiAgICB0aGlzLl9jb21tb25TZXJ2aWNlLmdldFZlcnNpb25MaXN0KGZsYXR0ZW4uYXBwSWQsIGZsYXR0ZW4udmVyc2lvbikuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcbiAgICAgIGxldCBhcHBNaW5vclZlcnNpb24gPSAnVW5rbm93bic7IC8vIERlZmF1bHQgdmFsdWUgaWYgbWlub3IgdmVyc2lvbiBpcyBub3QgZm91bmRcbiAgICAgIGlmIChyZXN1bHQgJiYgcmVzdWx0LnYgJiYgcmVzdWx0LnYudmVyc2lvbnNsaXN0ICYmIHJlc3VsdC52LnZlcnNpb25zbGlzdC5sZW5ndGggPiAwKSB7XG4gICAgICAgIGFwcE1pbm9yVmVyc2lvbiA9IHJlc3VsdC52LnZlcnNpb25zbGlzdFswXS5hcHBtaW5vcnZlcnNpb247XG4gICAgICB9XG4gICAgICBjb25zdCBhcHBOYW1lID0gZmxhdHRlbj8uYXBwTmFtZSB8fCAnWW91ciBBcHAnO1xuICAgICAgICBjb25zdCBhcHBWZXJzaW9uID0gZmxhdHRlbj8udmVyc2lvbiB8fCAndmVyc2lvbic7XG4gICAgICAgIGNvbnN0IHN1Y2Nlc3NNZXNzYWdlID0gYEFwcDogJHthcHBOYW1lfSB2ZXJzaW9uICR7YXBwTWlub3JWZXJzaW9ufSBpcyBJbnN0YWxsZWQgc3VjY2Vzc2Z1bGx5LmA7XG4gICAgICAgIGNvbnN0IGFwcGhlYWRpbmcgPWBJbnN0YWxsZWRgXG4gICAgICAgIGNvbnN0IHN1Y2Nlc3NEaWFsb2dSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKFN1Y2Nlc3NEaWFsb2dDb21wb25lbnQsIHtcbiAgICAgICAgICB3aWR0aDogJzUwMHB4JyxcbiAgICAgICAgICBkYXRhOiB7IG1lc3NhZ2U6IHN1Y2Nlc3NNZXNzYWdlfVxuICAgICAgICB9KTtcbiAgICB9KTtcbiAgfSk7XG59XG5cbmNhcGl0YWxpemVXb3JkcyhzdHI6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBzdHJcbiAgICAuc3BsaXQoJyAnKVxuICAgIC5tYXAod29yZCA9PiB3b3JkLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgd29yZC5zbGljZSgxKSlcbiAgICAuam9pbignICcpO1xufVxuXG5cbiAgLyoqXG4gICAqIE9uIGRlc3Ryb3lcbiAgICovXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIC8vIFVuc3Vic2NyaWJlIGZyb20gYWxsIHN1YnNjcmlwdGlvbnNcbiAgICB0aGlzLl91bnN1YnNjcmliZUFsbC5uZXh0KCk7XG4gICAgdGhpcy5fdW5zdWJzY3JpYmVBbGwuY29tcGxldGUoKTtcbiAgfVxuXG4gIGRpc2FibGVRUihhcHBWZXJzaW9uSWQ6IGFueSAsIGluZGV4OiBudW1iZXIpe1xuICAgIGxldCBkYXRhID0ge1xuICAgICAgYXBwVmVyc2lvbklkIDogYXBwVmVyc2lvbklkXG4gICAgfTtcbiAgXG4gICAgdGhpcy5fZGF0YVZpZXdGaWx0ZXJzU2VydmljZS5kaXNhYmxlUVIoZGF0YSlcbiAgICAgIC5zdWJzY3JpYmUoXG4gICAgICAgIChyZXNwb25zZSkgPT4ge1xuICAgICAgICAgIHRoaXMuX2F4b1NuYWNrQmFyLm9wZW5TbmFja0JhcignUVIgY29kZSBkaXNhYmxlZCBzdWNjZXNzZnVsbHknLCBBeG9TbmFja0JhclR5cGUuc3VjY2Vzcyk7XG4gICAgICAgICAgdGhpcy5fbG9nZ2luZ1NlcnZpY2UudHJhY2tFdmVudCgnUVIgRGlzYWJsZWQnLHtyZXNwb25zZX0pO1xuICAgICAgICAgIHRoaXMuYXBwTGlzdFtpbmRleF0ucXJfc3RhdHVzID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB9LFxuICAgICAgICAoZXJyb3IpID0+IHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvcjonLCBlcnJvcik7XG4gICAgICAgICAgLy8gSGFuZGxlIHRoZSBlcnJvclxuICAgICAgICB9XG4gICAgICApOyAgXG4gIH1cblxuICBkaXNhYmxlUVJEaWFsb2coYXBwVmVyc2lvbklkOiBhbnksIGluZGV4OiBudW1iZXIpe1xuICAgIGNvbnN0IGRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nLm9wZW4oQ29uZmlybWF0aW9uTW9kYWxDb21wb25lbnQsIHtcbiAgICAgIHdpZHRoOiAnMzAlJyxcbiAgICAgIGRhdGE6IHtcbiAgICAgICAgdGl0bGU6ICdEaXNhYmxlIFFSJyxcbiAgICAgICAgbWVzc2FnZTogJ0FyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBkaXNhYmxlIFFSIGZvciB0aGlzIGZvcm0/JyxcbiAgICAgICAgY29uZmlybUJ1dHRvblRleHQ6ICdEaXNhYmxlJyxcbiAgICAgICAgY2FuY2VsQnV0dG9uVGV4dDogJ0NhbmNlbCcsXG4gICAgICAgIGNvbmZpcm1CdXR0b25UeXBlOiAnZGVsZXRlJ1xuICAgICAgfSxcbiAgICAgIHBhbmVsQ2xhc3M6ICdjb25maXJtLW1vZGFsLWNvbnRhaW5lcidcbiAgICB9KTtcbiAgICBkaWFsb2dSZWYuYWZ0ZXJDbG9zZWQoKS5zdWJzY3JpYmUocmVzdWx0ID0+IHtcbiAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgdGhpcy5kaXNhYmxlUVIoYXBwVmVyc2lvbklkLCBpbmRleCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBnZXRVc2VyUGVybWlzc2lvbnMoKSB7XG4gICAgdGhpcy5fY29tbW9uU2VydmljZS5nZXRVc2VyRGV0YWlsKCkuc3Vic2NyaWJlKFxuICAgICAgKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PT0gJ3N1Y2Nlc3MnICYmIHJlc3BvbnNlLnVkKSB7XG4gICAgICAgICAgdGhpcy5wZXJtaXNzaW9ucyA9IHJlc3BvbnNlLnVkLnBlcm1pc3Npb25zOyAvLyBFeHRyYWN0IHBlcm1pc3Npb25zXG4gICAgICAgICAgdGhpcy5oYXNPcmdVc2VyQWNjZXNzID0gdGhpcy5wZXJtaXNzaW9ucy5pbmNsdWRlcygnT1JHX0lBTScpOyAvLyBDaGVjayBpZiAnT1JHX0lBTScgaXMgaW4gdGhlIHBlcm1pc3Npb25zIGFycmF5XG4gICAgICAgICAgXG4gICAgICAgICAgLy8gU2hvdyBvdmVybGF5IG9ubHkgaWYgJ0FDQ0VTU19XRUJfUE9SVEFMJyBwZXJtaXNzaW9uIGlzIG5vdCBwcmVzZW50XG4gICAgICAgICAgdGhpcy5zaG93V2ViUG9ydGFsQWNjZXNzT3ZlcmxheSA9ICF0aGlzLnBlcm1pc3Npb25zLmluY2x1ZGVzKCdBQ0NFU1NfV0VCX1BPUlRBTCcpO1xuXG4gICAgICAgICAgY29uc29sZS5sb2coJ1VzZXIgUGVybWlzc2lvbnM6JywgdGhpcy5wZXJtaXNzaW9ucyk7XG4gICAgICAgICAgY29uc29sZS5sb2coJ0lzIEJ1aWxkZXIgQWNjZXNzOicsIHRoaXMuaGFzT3JnVXNlckFjY2Vzcyk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICAoZXJyb3IpID0+IHtcbiAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgZmV0Y2hpbmcgdXNlciBkZXRhaWxzOicsIGVycm9yKTtcbiAgICAgIH1cbiAgICApO1xuICB9XG4gIGlzUmVzdHJpY3RlZFVybCgpOiBib29sZWFuIHtcbiAgICBjb25zdCByZXN0cmljdGVkVXJscyA9IFtcbiAgICAgICdodHRwczovL2FuZHJvbWVkYS1jb250YWluZXItcWEuYXhvbmF0b3IuY29tL2FwcHMnLFxuICAgICAgJ2h0dHBzOi8vbG9jYWxob3N0OjQyMDEvYXBwcycsXG4gICAgICAnaHR0cHM6Ly93ZWIuYXhvbmF0b3IuY29tJ1xuICAgIF07XG4gICAgcmV0dXJuIHJlc3RyaWN0ZWRVcmxzLmluY2x1ZGVzKHdpbmRvdy5sb2NhdGlvbi5ocmVmKTtcbiAgfVxufVxuXG4iLCI8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbCBmbGV4LWF1dG8gaC1mdWxsLWFwcExpc3QgbXktYXBwLWxpc3Qgb3ZlcmZsb3ctaGlkZGVuIHBhZ2UtYmFja2dyb3VuZCBheG8tZm9udFwiPlxuICAgIDwhLS0gSGVhZGVyIC0tPlxuICAgIDxkaXYgY2xhc3M9XCJzdGlja3kgdG9wLTAgYmctd2hpdGVcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImFwcC1saXN0LW1haW4taGVhZGVyIHJlbGF0aXZlIGZsZXggZmxleC0wIGgtMTIgei00OSBib3gtYm9yZGVyIHB4LTZcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtYXV0byBpdGVtcy1jZW50ZXIgbWluLXctMFwiPiA8aW1nIGNsYXNzPVwidy0zNiBoLTdcIiBzcmM9XCJhc3NldHMvaW1hZ2VzL2xvZ28vYXhvLWxvZ28uc3ZnXCIgYWx0PVwiTG9nbyBpbWFnZVwiPiA8c3BhbiBjbGFzcz1cImJldGFcIj5CZXRhPC9zcGFuPiA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtYXV0byBqdXN0aWZ5LWVuZCBpdGVtcy1jZW50ZXIgbWluLXctMCBnYXAtM1wiPlxuICAgICAgICAgICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uIGNsYXNzPVwibXQtMS41XCI+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBzdmdJY29uPVwiYXhvX3NlYXJjaFwiPjwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gY2xhc3M9XCJtdC0xLjVcIj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXIgYXhvX25vdGlmaWN0aW9uLTJcIiBtYXRUb29sdGlwPVwiTm90aWZpY2F0aW9uXCIgc3ZnSWNvbj1cImF4b19ub3RpZmljdGlvbi0yXCI+PC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8IS0tIG9uY2Ugd2UgZml4IGlkZW50aXR5IHNlcnZlciBBUEksIHRoaXMgY29kZSB3aWxsIGJlIG5lZWRlZCBhZ2FpblxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XCIgbWF0LWljb24tYnV0dG9uIFttYXRNZW51VHJpZ2dlckZvcl09XCJ1c2VyUHJvZmlsZTA5TWVudVwiPlxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwidXNlckltYWdlOyBlbHNlIGlzRW1wdHlJbWFnZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBbc3JjXT1cImJhc2VVcmwgKyAnaW1hZ2VzLycrIHVzZXJJbWFnZVwiIG9uRXJyb3IgPVwidGhpcy5zcmM9J2Fzc2V0cy9pY29ucy9vcmdhbml6YXRpb24ucG5nJ1wiIGNsYXNzPVwiaW5saW5lIG9iamVjdC1jb3ZlciB3LTcgaC03IG1yLTIgb3JnYW5pemF0aW9uSWNvblwiIGFsdD1cImF2dGFyXCI+XG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2lzRW1wdHlJbWFnZT5cblxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gIGNsYXNzPVwiZW1wdHktYXBwLWljb25cIj57eyAodXNlclsnRmlyc3ROYW1lJ10pLmNoYXJBdCgwKSArIFwiXCIgKyAgKHVzZXJbJ0xhc3ROYW1lJ10pLmNoYXJBdCgwKSB8IHVwcGVyY2FzZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8bWF0LW1lbnUgI3VzZXJQcm9maWxlMDlNZW51PVwibWF0TWVudVwiPlxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1tZW51LWl0ZW0gY2xhc3M9XCJoLWZ1bGxcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJ1c2VySW1hZ2U7IGVsc2UgaXNFbXB0eVByb2ZpbGVJbWFnZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgY2xhc3M9XCJvcmdhbml6YXRpb25JY29uXCIgW3NyY109XCJiYXNlVXJsICsgJ2ltYWdlcy8nKyB1c2VySW1hZ2VcIiBhbHQ9XCJcIiBvbkVycm9yID1cInRoaXMuc3JjPSdhc3NldHMvaWNvbnMvb3JnYW5pemF0aW9uLnBuZydcIi8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjaXNFbXB0eVByb2ZpbGVJbWFnZT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAgY2xhc3M9XCJ1c2VyRW1wdHlJY29uXCI+e3sgKHVzZXJbJ0ZpcnN0TmFtZSddKS5jaGFyQXQoMCkgKyBcIlwiICsgICh1c2VyWydMYXN0TmFtZSddKS5jaGFyQXQoMCkgfCB1cHBlcmNhc2UgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlubGluZS1ncmlkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ1c2VyLW5hbWUtdGl0bGUgXCI+e3sgdXNlckVtYWlsIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidXNlci1lbWFpbGlkIFwiPnt7IHVzZXJOYW1lIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1tZW51LWl0ZW0gY2xhc3M9XCJvcmdhbml6YXRpb24tc2VjdGlvblwiIChjbGljayk9XCJzaWduT3V0KClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibG9nb3V0LXRpdGxlXCI+TG9nb3V0PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8L21hdC1tZW51PiAtLT5cblxuICAgICAgICAgICAgICAgIDxidXR0b24gKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcIiBtYXQtaWNvbi1idXR0b24gW21hdE1lbnVUcmlnZ2VyRm9yXT1cInVzZXJQcm9maWxlMDlNZW51XCI+XG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJ1c2VySW1hZ2U7IGVsc2UgaXNFbXB0eUltYWdlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aW1nIFtzcmNdPVwiYmFzZVVybCArIHVzZXJJbWFnZVwiIG9uRXJyb3IgPVwidGhpcy5zcmM9J2Fzc2V0cy9pY29ucy9vcmdhbml6YXRpb24uc3ZnJ1wiIGNsYXNzPVwib3JnYW5pemF0aW9uSWNvblwiIGFsdD1cImF2dGFyXCI+XG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2lzRW1wdHlJbWFnZT5cblxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gIGNsYXNzPVwidXBwZXJjYXNlIGZvbnQtbWVkaXVtIGN1cnNvci1wb2ludGVyIHRleHQtc20gaC04IHctOCBmbGV4IGp1c3RpZnktY2VudGVyIGl0ZW1zLWNlbnRlciBtbC0yIGJnLWdyYXktMzAwIHJvdW5kZWQtZnVsbFwiPnt7ICh1c2VyWydmbmFtZSddKS5jaGFyQXQoMCkgKyBcIlwiICsgICh1c2VyWydsbmFtZSddKS5jaGFyQXQoMCkgfCB1cHBlcmNhc2UgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgPG1hdC1tZW51ICN1c2VyUHJvZmlsZTA5TWVudT1cIm1hdE1lbnVcIiBiYWNrZHJvcENsYXNzPVwiYXBwLWxpc3QtbWF0LW1lbnUtcGFuZWwtY2xhc3NcIj5cbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBtYXQtbWVudS1pdGVtIGNsYXNzPVwiaC1mdWxsIHVzZXItaW5mb1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInVzZXJJbWFnZTsgZWxzZSBpc0VtcHR5UHJvZmlsZUltYWdlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBjbGFzcz1cIm9yZ2FuaXphdGlvbkljb25wcm9maWxlXCIgW3NyY109XCJiYXNlVXJsICsgdXNlckltYWdlXCIgYWx0PVwiXCIgb25FcnJvciA9XCJ0aGlzLnNyYz0nYXNzZXRzL2ljb25zL29yZ2FuaXphdGlvbi5zdmcnXCIvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2lzRW1wdHlQcm9maWxlSW1hZ2U+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gIGNsYXNzPVwidXNlckVtcHR5SWNvblwiPnt7ICh1c2VyWydmbmFtZSddKS5jaGFyQXQoMCkgKyBcIlwiICsgICh1c2VyWydsbmFtZSddKS5jaGFyQXQoMCkgfCB1cHBlcmNhc2UgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlubGluZS1ncmlkIHB5LTNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInVzZXItZW1haWxpZFwiPnt7IHVzZXJFbWFpbCB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInVzZXItbmFtZS10aXRsZVwiPnt7IHVzZXJOYW1lIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWRpdmlkZXIgY2xhc3M9XCJteS0wXCI+PC9tYXQtZGl2aWRlcj5cbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBtYXQtbWVudS1pdGVtIGNsYXNzPVwidXNlci1sb2dvdXQtYnRuIG9yZ2FuaXphdGlvbi1idG5cIiAoY2xpY2spPVwibmF2aWdhdGV0b09yZ2FuaWF0aW9uKClcIiAqbmdJZj1cImhhc09yZ1VzZXJBY2Nlc3NcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gPG1hdC1pY29uIFtzdmdJY29uXT1cIidoZXJvaWNvbnNfb3V0bGluZTp1c2VyLWdyb3VwJ1wiPjwvbWF0LWljb24+IC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJsb2dvdXQtbGFiZWxcIj5Pcmdhbml6YXRpb24gVXNlcnM8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBtYXQtbWVudS1pdGVtIGNsYXNzPVwidXNlci1sb2dvdXQtYnRuIG9yZ2FuaXphdGlvbi1idG5cIiAoY2xpY2spPVwibmF2aWdhdGV0b09yZ2FuaWF0aW9uU2V0dGluZ3MoKVwiICpuZ0lmPVwiaGFzT3JnVXNlckFjY2Vzc1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSA8bWF0LWljb24gW3N2Z0ljb25dPVwiJ2hlcm9pY29uc19vdXRsaW5lOnVzZXItZ3JvdXAnXCI+PC9tYXQtaWNvbj4gLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImxvZ291dC1sYWJlbFwiPk9yZ2FuaXphdGlvbiBTZXR0aW5nczwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1tZW51LWl0ZW0gY2xhc3M9XCJ1c2VyLWxvZ291dC1idG4gYmlsbGluZy1idG5cIiAoY2xpY2spPVwibmF2aWdhdGVUb0JpbGxpbmcoKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSA8bWF0LWljb24gW3N2Z0ljb25dPVwiJ2hlcm9pY29uc19vdXRsaW5lOmNyZWRpdC1jYXJkJ1wiPjwvbWF0LWljb24+IC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJsb2dvdXQtbGFiZWxcIj5CaWxsaW5nPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWRpdmlkZXIgY2xhc3M9XCJteS0wXCI+PC9tYXQtZGl2aWRlcj5cbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBtYXQtbWVudS1pdGVtIGNsYXNzPVwidXNlci1sb2dvdXQtYnRuXCIgKGNsaWNrKT1cInNpZ25PdXQoKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSA8bWF0LWljb24gW3N2Z0ljb25dPVwiJ2hlcm9pY29uc19vdXRsaW5lOmxvZ291dCdcIj48L21hdC1pY29uPiAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibG9nb3V0LWxhYmxlXCI+TG9nb3V0PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cblxuICAgICAgICAgICAgICAgIDwvbWF0LW1lbnU+XG5cblxuXG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDwhLS0gSGVhZGVyIC0tPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiYXBwLWxpc3QtbWFpbi1zdWJoZWFkZXJcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhcHAtbGlzdC1oZWFkZXIgcmVsYXRpdmUgZmxleCBmbGV4LTAgaXRlbXMtY2VudGVyIHotNDkgYm94LWJvcmRlciBweC00IHNtOnB4LTZcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWF1dG8gaXRlbXMtY2VudGVyIG1pbi13LTAgZ2FwLTNcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIGhvdmVyOmJnLWdyYXktMTAwIHAtMiByb3VuZGVkLWxnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT1cInN0YW5kYXJkXCIgY2xhc3M9XCJzbTp3LWZ1bGwgZmxleCBpdGVtcy1jZW50ZXIgb3JnYW5pemF0aW9uLW1hdC1zZWxlY3RcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LXNlbGVjdCBbKG5nTW9kZWwpXT1cInNlbGVjdGVkT3JnYW5pemF0aW9uXCIgcGxhY2Vob2xkZXI9XCJzZWxlY3QgT3JnYW5pemF0aW9uXCIgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LXNlbGVjdC10cmlnZ2VyIGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXJcIiAqbmdJZj1cInNlbGVjdGVkT3JnYW5pemF0aW9uXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIGNsYXNzPVwib3JnYW5pemF0aW9uSWNvblwiIGFsdD1cIlwiIFtzcmNdPVwiKHNlbGVjdGVkT3JnYW5pemF0aW9uLmljb24uaW5kZXhPZignaHR0cHM6Ly8nKSAhPT0gLTEpID8gc2VsZWN0ZWRPcmdhbml6YXRpb24uaWNvbiA6IGJhc2VVcmwgKyBzZWxlY3RlZE9yZ2FuaXphdGlvbi5pY29uXCIgb25FcnJvciA9XCJ0aGlzLnNyYz0nYXNzZXRzL2ljb25zL29yZ2FuaXphdGlvbi5zdmcnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm9yZy1uYW1lXCIgW21hdFRvb2x0aXBdPVwic2VsZWN0ZWRPcmdhbml6YXRpb24ubmFtZVwiPiB7eyBzZWxlY3RlZE9yZ2FuaXphdGlvbi5uYW1lIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBDdXN0b20gYXJyb3cgaWNvbiAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gPG1hdC1pY29uIGNsYXNzPVwiZHJvcGRvd24tYXJyb3dcIiBzdmdJY29uPVwiZHJvcGRvd24tYXJyb3dcIj48L21hdC1pY29uPiAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0LXRyaWdnZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzd2l0Y2ggZmxleCBwLTIgZ2FwLTIgcGwtNCBpdGVtcy1jZW50ZXIgY3Vyc29yLXBvaW50ZXIgXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gc3ZnSWNvbj1cImF4b19zd2l0Y2hcIiBjbGFzcz1cInN3aXRjaC1pY29uIGgtOCB3LThcIj48L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzd2l0Y2gtc3BhblwiPlN3aXRjaCBPcmdhbml6YXRpb248L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAgY2xhc3M9XCJvcmdhbml6YXRpb25MaXN0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBvcmdhbml6YXRpb24gb2Ygb3JnYW5pemF0aW9uTGlzdDsgbGV0IG9yZ2FuaXphdGlvbkluZGV4ID0gaW5kZXhcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cIm9yZ2FuaXphdGlvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwic3dpdGNoQWNjb3VudChvcmdhbml6YXRpb24uaWQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzZWxlY3RlZF09XCJzZWxlY3RlZE9yZ2FuaXphdGlvbi5pZCA9PT0gb3JnYW5pemF0aW9uLmlkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJvcmctaWNvbi1zcGFuXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBjbGFzcz1cIm9yZ2FuaXphdGlvbkljb25cIiBhbHQ9XCJcIiBbc3JjXT1cIihvcmdhbml6YXRpb24uaWNvbi5pbmRleE9mKCdodHRwczovLycpICE9PSAtMSkgPyBvcmdhbml6YXRpb24uaWNvbiA6IGJhc2VVcmwgKyBvcmdhbml6YXRpb24uaWNvblwiIG9uRXJyb3IgPVwidGhpcy5zcmM9J2Fzc2V0cy9pY29ucy9vcmdhbml6YXRpb24uc3ZnJ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic206dGV4dC1sZyB0ZXh0LXhzIGZvbnQtbWVkaXVtIG9yZy1uYW1lXCI+IHt7IG9yZ2FuaXphdGlvbi5uYW1lfX08L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNtOnRleHQtbGcgdGV4dC14cyBmb250LW1lZGl1bSBtYWluLXRpdGxlXCI+TXkgQXBwczwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwiaGFzQXBwQnVpbGRlclBlcm1pc3Npb24gJiYgIWlzUmVzdHJpY3RlZFVybCgpXCIgY2xhc3M9XCJwcmltYXJ5LWJ0biBheG8tZm9udCB3LTI4XCIgKGNsaWNrKT1cIm9wZW5DcmVhdGVBcHBEaWFsb2coKVwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPkNyZWF0ZSBBcHA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPCEtLSBBcHAgTGlzdCB3aXRoIE92ZXJsYXkgLS0+XG4gICAgPGRpdiBjbGFzcz1cInJlbGF0aXZlIGZsZXgtYXV0byBhcHAtbGlzdCBoLWZ1bGwtYXBwTGlzdCBweC00IHB5LTUgc206cHktOCBvdmVyZmxvdy1hdXRvXCI+XG4gICAgICAgIDwhLS0gT3ZlcmxheSBmb3Igd2ViIHBvcnRhbCBhY2Nlc3MgLS0+XG4gICAgICAgIDxkaXYgKm5nSWY9XCJzaG93V2ViUG9ydGFsQWNjZXNzT3ZlcmxheVwiIGNsYXNzPVwicGVybWlzc2lvbi1vdmVybGF5XCI+XG4gICAgICAgICAgICBZb3UgZG9uJ3QgaGF2ZSBwZXJtaXNzaW9uIHRvIGFjY2VzcyBXZWIgUG9ydGFsLlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiYXBwTGlzdC5sZW5ndGg7IGVsc2Ugbm90RW1wdHlBcHBMaXN0XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXBwLWdyaWQgaXRlbXMtc3RhcnQgY2FyZC1ib2R5IHctZnVsbFwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLW91dGVyLWRpdlwiICpuZ0Zvcj1cImxldCBhcHBEZXRhaWwgb2YgYXBwTGlzdDsgbGV0IGkgPSBpbmRleFwiPlxuICAgICAgICAgICAgICAgICAgICA8ZnVzZS1jYXJkIGNsYXNzPVwiZnVzZS1jYXJkLWFwcCBmbGV4IGZsZXgtY29sIGdhcC0yIGZpbHRlci1saXN0XCIgW25nU3R5bGVdPVwieydiYWNrZ3JvdW5kJzogYXBwRGV0YWlsLmdyYWRpZW50fVwiIChjbGljayk9XCJvcGVuQXBwKGFwcERldGFpbC5hcHBWZXJzaW9uSWQpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiYXBwRGV0YWlsLnFyX3N0YXR1cyA9PT0gdHJ1ZSAmJiBzaG93UVJJY29uXCIgKGNsaWNrKT1cImRpc2FibGVRUkRpYWxvZyhhcHBEZXRhaWwuYXBwVmVyc2lvbklkLCBpKTsgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1wiIGNsYXNzPVwiZmxleCBqdXN0aWZ5LWNlbnRlciBpdGVtcy1jZW50ZXIgYm9yZGVyLTAgcm91bmRlZC1mdWxsIHFyLWljb24gYmctd2hpdGUgYWJzb2x1dGUgdG9wLTQgcmlnaHQtNFwiICBbbmdDbGFzc109XCJ7J2FwcEhvdmVyJzogb3BlblBvcHVwTWVudSA9PT0gYXBwRGV0YWlsLmFwcFZlcnNpb25JZH1cIiBzdHlsZT1cInBhZGRpbmc6IC4zcmVtO1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgbWF0VG9vbHRpcD1cIkRpc2FibGUgUVJcIiAgc3JjPVwiYXNzZXRzL2ljb25zL2F4by9zY3VscHRvci9heG9fcXJjb2RlX25ldy5zdmdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWx0PVwiXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiaC0zIHctMyBvYmplY3QtY292ZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBjYXJkIGp1c3RpZnktYmV0d2VlblwiIHN0eWxlPVwibWFyZ2luLWxlZnQ6IC0yMHB4O1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkb3RzLXZlcnRpY2FsLWFwcFwiICpuZ0lmPVwic2hvd0RvdHNPcHRpb25cIiAgW25nQ2xhc3NdPVwieydhcHBIb3Zlcic6IG9wZW5Qb3B1cE1lbnUgPT09IGFwcERldGFpbC5hcHBWZXJzaW9uSWR9XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtzZXRPcGVuUG9wdXBNZW51KGFwcERldGFpbC5hcHBWZXJzaW9uSWQpXCIgbWF0LWljb24tYnV0dG9uIFtkaXNhYmxlUmlwcGxlXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbWF0TWVudVRyaWdnZXJGb3JdPVwiY29udGV4dE1lbnVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIFtzdmdJY29uXT1cIidoZXJvaWNvbnNfc29saWQ6ZG90cy12ZXJ0aWNhbCdcIiBzdHlsZT1cImNvbG9yOiAjRkZGRkZGO1wiPjwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1tZW51ICNjb250ZXh0TWVudT1cIm1hdE1lbnVcIiBjbGFzcz1cImN1c3RvbWl6ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD1cInJlcG9ydC1tZW51XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBtYXQtbWVudS1pdGVtIChjbGljayk9XCJvcGVuUVJDb2RlRGlhbG9nKClcIiAgY2xhc3M9XCJweS0wIHBsLTQgcHItNlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz1cImFzc2V0cy9pY29ucy9vcHRpb25zLW1vYmlsZS5zdmdcIiBhbHQ9XCJcIiBjbGFzcz1cImgtNiB3LTYgaW5saW5lLWJsb2NrIG1yLTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+VXNlIE9uIE1vYmlsZTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD1cInJlcG9ydC1tZW51XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBtYXQtbWVudS1pdGVtIChjbGljayk9XCJvcGVuRGVsZXRlQXBwRGlhbG9nKGFwcERldGFpbC5hcHBWZXJzaW9uSWQpXCIgIGNsYXNzPVwicHktMCBwbC00IHByLTZcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9XCJhc3NldHMvaWNvbnMvb3B0aW9ucy1kZWxldGUuc3ZnXCIgYWx0PVwiXCIgY2xhc3M9XCJoLTYgdy02IGlubGluZS1ibG9jayBtci0yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPkRlbGV0ZTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1tZW51PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1pbm5lci1kaXZcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgZGFzaGJvYXJkLWljb25cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBbc3JjXT1cImJhc2VVcmwgKyBhcHBEZXRhaWwuaWNvblwiIG9uRXJyb3IgPVwidGhpcy5zcmM9J2h0dHBzOi8vc3RhdGljLmF4b25hdG9yLmNvbS9zdGF0aWMvZGVmYXVsdF9pY29ucy9hcHAucG5nJ1wiIGFsdD1cIkxvZ28gaW1hZ2VcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtY29udGVudFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhcHAtaW5mb1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYmxvY2sgYXBwLXRpdGxlLXdyYXBwZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhcHBfdGl0bGUgZm9udC1tZWRpdW0gbGVhZGluZy10aWdodCBheG8tZm9udFwiIFttYXRUb29sdGlwXT1cImFwcERldGFpbC5uYW1lXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3thcHBEZXRhaWwubmFtZX19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhcHBfdmVyc2lvbiB3LWZ1bGwgbGVhZGluZy10aWdodCB0ZXh0LXhzXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2IHt7YXBwRGV0YWlsLnZlcnNpb24uc3BsaXQoJy4nKVswXX19Lnt7cGFkWmVybyhhcHBEZXRhaWwubWlub3JWZXJzaW9uKX19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjdXN0LW9wZW4gZmxleCBqdXN0aWZ5LWVuZCB3LWZ1bGxcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1yb3cgaXRlbXMtY2VudGVyIGp1c3RpZnktZW5kIHNwYWNlLXgtMlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgKm5nSWY9XCJzaG93Q3VzdG9taXplXCIgcm91dGVyTGluaz1cIlwiIGNsYXNzPVwiY3VzdG9taXplIHRleHQtbGVmdCBsZWFkaW5nLXRpZ2h0IHRleHQteHNcIj5DdXN0b21pemU8L2E+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwib3Blbi1idXR0b25cIj5PcGVuPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZnVzZS1jYXJkPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICBcbiAgICA8L2Rpdj5cbiAgICA8bmctdGVtcGxhdGUgI25vdEVtcHR5QXBwTGlzdD5cbiAgICAgICAgPCEtLSBpZiBhcHAgbGlzdCBpcyBlbXB0eSAtLT5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2wgZmxleC1hdXRvIG1pbi13LTAgcmVsYXRpdmUgaXRlbXMtY2VudGVyXCIgI25vdEVtcHR5QXBwTGlzdD5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb250YWluZXIgZmxleCBmbGV4LWNvbCBteS1hdXRvIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBuby1hcHAtY3JlYXRlZFwiPlxuICAgICAgICAgICAgICAgIDxoMj5ObyBhcHAgY3JlYXRlZCB5ZXQhPC9oMj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICA8L25nLXRlbXBsYXRlPlxuICAgIDxhcHAtY29tbW9uLWZvb3RlciBbc2hvd0FkZEJ0bl09XCJzaG93QWRkQnRuXCIgW3Nob3dVcGdyYWRlQnRuXT1cInRydWVcIj48L2FwcC1jb21tb24tZm9vdGVyPlxuICAgIDwhLS0gPGRpdiBjbGFzcz1cImZpeGVkIGJvdHRvbS0wIGZsZXggZmxleC0wIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LXN0YXJ0IHctZnVsbCBoLTE0IHB4LTQgbWQ6cHgtNiB6LTQ5IGJnLXdoaXRlIGFwcC1saXN0LWZvb3RlclwiPlxuICAgICAgICA8c3BhbiBjbGFzcz1cImZvbnQtbWVkaXVtIHRleHQtc2Vjb25kYXJ5XCI+QXhvbmF0b3IgJmNvcHk7IHt7Y3VycmVudFllYXJ9fTwvc3Bhbj5cbiAgICA8L2Rpdj4gLS0+XG48L2Rpdj5cbiJdfQ==