@alfresco/aca-content 4.4.0-8059740083 → 4.4.0-8093250779
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.
- package/esm2020/lib/services/content-management.service.mjs +4 -3
- package/fesm2015/alfresco-aca-content.mjs +2 -1
- package/fesm2015/alfresco-aca-content.mjs.map +1 -1
- package/fesm2020/alfresco-aca-content.mjs +2 -1
- package/fesm2020/alfresco-aca-content.mjs.map +1 -1
- package/lib/services/content-management.service.d.ts +2 -2
- package/package.json +1 -1
|
@@ -23,8 +23,8 @@
|
|
|
23
23
|
*/
|
|
24
24
|
import { AppHookService, ContentApiService, NodePermissionService } from '@alfresco/aca-shared';
|
|
25
25
|
import { getAppSelection, getSharedUrl, NavigateRouteAction, NavigateToParentFolder, ReloadDocumentListAction, SetSelectedNodesAction, ShowLoaderAction, SnackbarErrorAction, SnackbarInfoAction, SnackbarUserAction, SnackbarWarningAction, UndoDeleteNodesAction, UnlockWriteAction, ViewNodeVersionAction } from '@alfresco/aca-shared/store';
|
|
26
|
-
import { ConfirmDialogComponent, FolderDialogComponent, LibraryDialogComponent,
|
|
27
|
-
import {
|
|
26
|
+
import { ConfirmDialogComponent, FolderDialogComponent, LibraryDialogComponent, NewVersionUploaderDataAction, NewVersionUploaderService, NodeAspectService, NodesApiService, ShareDialogComponent } from '@alfresco/adf-content-services';
|
|
27
|
+
import { NotificationService, TranslationService } from '@alfresco/adf-core';
|
|
28
28
|
import { Injectable } from '@angular/core';
|
|
29
29
|
import { MatDialog } from '@angular/material/dialog';
|
|
30
30
|
import { Store } from '@ngrx/store';
|
|
@@ -226,6 +226,7 @@ export class ContentManagementService {
|
|
|
226
226
|
this.contentApi.deleteSite(id).subscribe(() => {
|
|
227
227
|
this.appHookService.libraryDeleted.next(id);
|
|
228
228
|
this.store.dispatch(new SnackbarInfoAction('APP.MESSAGES.INFO.LIBRARY_DELETED'));
|
|
229
|
+
this.store.dispatch(new NavigateRouteAction(['/libraries']));
|
|
229
230
|
}, () => {
|
|
230
231
|
this.store.dispatch(new SnackbarErrorAction('APP.MESSAGES.ERRORS.DELETE_LIBRARY_FAILED'));
|
|
231
232
|
});
|
|
@@ -867,4 +868,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.3", ngImpor
|
|
|
867
868
|
providedIn: 'root'
|
|
868
869
|
}]
|
|
869
870
|
}], ctorParameters: function () { return [{ type: i1.NodesApiService }, { type: i2.Store }, { type: i3.ContentApiService }, { type: i3.NodePermissionService }, { type: i4.MatDialog }, { type: i5.NodeActionsService }, { type: i6.TranslationService }, { type: i6.NotificationService }, { type: i1.NodeAspectService }, { type: i3.AppHookService }, { type: i1.NewVersionUploaderService }, { type: i7.Router }]; } });
|
|
870
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGVudC1tYW5hZ2VtZW50LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hY2EtY29udGVudC9zcmMvbGliL3NlcnZpY2VzL2NvbnRlbnQtbWFuYWdlbWVudC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBc0JHO0FBRUgsT0FBTyxFQUFFLGNBQWMsRUFBRSxpQkFBaUIsRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2hHLE9BQU8sRUFJTCxlQUFlLEVBQ2YsWUFBWSxFQUNaLG1CQUFtQixFQUNuQixzQkFBc0IsRUFFdEIsd0JBQXdCLEVBQ3hCLHNCQUFzQixFQUN0QixnQkFBZ0IsRUFFaEIsbUJBQW1CLEVBQ25CLGtCQUFrQixFQUNsQixrQkFBa0IsRUFDbEIscUJBQXFCLEVBQ3JCLHFCQUFxQixFQUNyQixpQkFBaUIsRUFDakIscUJBQXFCLEVBQ3RCLE1BQU0sNEJBQTRCLENBQUM7QUFDcEMsT0FBTyxFQUNMLHNCQUFzQixFQUN0QixxQkFBcUIsRUFDckIsc0JBQXNCLEVBQ3RCLG9CQUFvQixFQUNwQixpQkFBaUIsRUFDakIseUJBQXlCLEVBR3pCLDRCQUE0QixFQUM1QixlQUFlLEVBQ2hCLE1BQU0sZ0NBQWdDLENBQUM7QUFDeEMsT0FBTyxFQUFFLGtCQUFrQixFQUFFLG1CQUFtQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFFN0UsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsU0FBUyxFQUFtQixNQUFNLDBCQUEwQixDQUFDO0FBQ3RFLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDcEMsT0FBTyxFQUFFLFFBQVEsRUFBYyxFQUFFLEVBQUUsR0FBRyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3JELE9BQU8sRUFBRSxVQUFVLEVB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QUFFLHFCQUFxQixFQUFFLGFBQWEsQ0FBQyxFQUFFO1lBQ2hHLE9BQU8sRUFBRSxTQUFTO1lBQ2xCLE1BQU0sRUFBRSxRQUFRO1lBQ2hCLFNBQVMsRUFBRSxrQkFBa0I7U0FDOUIsQ0FBQyxDQUFDO1FBRUgsZ0NBQWdDO1FBQ2hDLElBQUksQ0FBQyxtQkFBbUI7YUFDckIsc0JBQXNCLENBQ3JCLFFBQVEsQ0FBQyxjQUFjLENBQUMsR0FBRywyQkFBMkIsR0FBRyxRQUFRLENBQUMscUJBQXFCLENBQUMsR0FBRyxtQkFBbUIsR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLEVBQ3hJLElBQUksRUFDSjtZQUNFLFVBQVUsRUFBRSxlQUFlO1NBQzVCLENBQ0Y7YUFDQSxRQUFRLEVBQUU7YUFDVixTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxZQUFZLEVBQUUsZUFBZSxDQUFDLENBQUMsQ0FBQztJQUN4RSxDQUFDO0lBRU8sZUFBZSxDQUFDLHNCQUE4QjtRQUNwRCxJQUFJLHNCQUFzQixFQUFFO1lBQzFCLFFBQVEsQ0FBQyxhQUFhLENBQWMsc0JBQXNCLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQztTQUN0RTtJQUNILENBQUM7O3FIQS8rQlUsd0JBQXdCO3lIQUF4Qix3QkFBd0IsY0FGdkIsTUFBTTsyRkFFUCx3QkFBd0I7a0JBSHBDLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiLyohXG4gKiBDb3B5cmlnaHQgwqkgMjAwNS0yMDIzIEh5bGFuZCBTb2Z0d2FyZSwgSW5jLiBhbmQgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogQWxmcmVzY28gRXhhbXBsZSBDb250ZW50IEFwcGxpY2F0aW9uXG4gKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEFsZnJlc2NvIEV4YW1wbGUgQ29udGVudCBBcHBsaWNhdGlvbi5cbiAqIElmIHRoZSBzb2Z0d2FyZSB3YXMgcHVyY2hhc2VkIHVuZGVyIGEgcGFpZCBBbGZyZXNjbyBsaWNlbnNlLCB0aGUgdGVybXMgb2ZcbiAqIHRoZSBwYWlkIGxpY2Vuc2UgYWdyZWVtZW50IHdpbGwgcHJldmFpbC4gT3RoZXJ3aXNlLCB0aGUgc29mdHdhcmUgaXNcbiAqIHByb3ZpZGVkIHVuZGVyIHRoZSBmb2xsb3dpbmcgb3BlbiBzb3VyY2UgbGljZW5zZSB0ZXJtczpcbiAqXG4gKiBUaGUgQWxmcmVzY28gRXhhbXBsZSBDb250ZW50IEFwcGxpY2F0aW9uIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcbiAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxuICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3JcbiAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG4gKlxuICogVGhlIEFsZnJlc2NvIEV4YW1wbGUgQ29udGVudCBBcHBsaWNhdGlvbiBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2ZcbiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZVxuICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG4gKlxuICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4gKiBmcm9tIEh5bGFuZCBTb2Z0d2FyZS4gSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LlxuICovXG5cbmltcG9ydCB7IEFwcEhvb2tTZXJ2aWNlLCBDb250ZW50QXBpU2VydmljZSwgTm9kZVBlcm1pc3Npb25TZXJ2aWNlIH0gZnJvbSAnQGFsZnJlc2NvL2FjYS1zaGFyZWQnO1xuaW1wb3J0IHtcbiAgQXBwU3RvcmUsXG4gIERlbGV0ZWROb2RlSW5mbyxcbiAgRGVsZXRlU3RhdHVzLFxuICBnZXRBcHBTZWxlY3Rpb24sXG4gIGdldFNoYXJlZFVybCxcbiAgTmF2aWdhdGVSb3V0ZUFjdGlvbixcbiAgTmF2aWdhdGVUb1BhcmVudEZvbGRlcixcbiAgTm9kZUluZm8sXG4gIFJlbG9hZERvY3VtZW50TGlzdEFjdGlvbixcbiAgU2V0U2VsZWN0ZWROb2Rlc0FjdGlvbixcbiAgU2hvd0xvYWRlckFjdGlvbixcbiAgU25hY2tiYXJBY3Rpb24sXG4gIFNuYWNrYmFyRXJyb3JBY3Rpb24sXG4gIFNuYWNrYmFySW5mb0FjdGlvbixcbiAgU25hY2tiYXJVc2VyQWN0aW9uLFxuICBTbmFja2Jhcldhcm5pbmdBY3Rpb24sXG4gIFVuZG9EZWxldGVOb2Rlc0FjdGlvbixcbiAgVW5sb2NrV3JpdGVBY3Rpb24sXG4gIFZpZXdOb2RlVmVyc2lvbkFjdGlvblxufSBmcm9tICdAYWxmcmVzY28vYWNhLXNoYXJlZC9zdG9yZSc7XG5pbXBvcnQge1xuICBDb25maXJtRGlhbG9nQ29tcG9uZW50LFxuICBGb2xkZXJEaWFsb2dDb21wb25lbnQsXG4gIExpYnJhcnlEaWFsb2dDb21wb25lbnQsXG4gIFNoYXJlRGlhbG9nQ29tcG9uZW50LFxuICBOb2RlQXNwZWN0U2VydmljZSxcbiAgTmV3VmVyc2lvblVwbG9hZGVyU2VydmljZSxcbiAgTmV3VmVyc2lvblVwbG9hZGVyRGlhbG9nRGF0YSxcbiAgTmV3VmVyc2lvblVwbG9hZGVyRGF0YSxcbiAgTmV3VmVyc2lvblVwbG9hZGVyRGF0YUFjdGlvbixcbiAgTm9kZXNBcGlTZXJ2aWNlXG59IGZyb20gJ0BhbGZyZXNjby9hZGYtY29udGVudC1zZXJ2aWNlcyc7XG5pbXBvcnQgeyBUcmFuc2xhdGlvblNlcnZpY2UsIE5vdGlmaWNhdGlvblNlcnZpY2UgfSBmcm9tICdAYWxmcmVzY28vYWRmLWNvcmUnO1xuaW1wb3J0IHsgRGVsZXRlZE5vZGVzUGFnaW5nLCBOb2RlLCBOb2RlRW50cnksIFBhdGhJbmZvLCBTaXRlQm9keUNyZWF0ZSwgU2l0ZUVudHJ5IH0gZnJvbSAnQGFsZnJlc2NvL2pzLWFwaSc7XG5pbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBNYXREaWFsb2csIE1hdERpYWxvZ0NvbmZpZyB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XG5pbXBvcnQgeyBTdG9yZSB9IGZyb20gJ0BuZ3J4L3N0b3JlJztcbmltcG9ydCB7IGZvcmtKb2luLCBPYnNlcnZhYmxlLCBvZiwgemlwIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBjYXRjaEVycm9yLCBtYXAsIG1lcmdlTWFwLCB0YWtlLCB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBOb2RlQWN0aW9uc1NlcnZpY2UgfSBmcm9tICcuL25vZGUtYWN0aW9ucy5zZXJ2aWNlJztcbmltcG9ydCB7IFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5cbmludGVyZmFjZSBSZXN0b3JlZE5vZGUge1xuICBzdGF0dXM6IG51bWJlcjtcbiAgZW50cnk6IE5vZGU7XG4gIHN0YXR1c0NvZGU/OiBudW1iZXI7XG59XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIENvbnRlbnRNYW5hZ2VtZW50U2VydmljZSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgY3JlYXRlTWVudUJ1dHRvblNlbGVjdG9yID0gJ2FwcC10b29sYmFyLW1lbnUgYnV0dG9uW2lkPVwiYXBwLnRvb2xiYXIuY3JlYXRlXCJdJztcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIG5vZGVzQXBpU2VydmljZTogTm9kZXNBcGlTZXJ2aWNlLFxuICAgIHByaXZhdGUgc3RvcmU6IFN0b3JlPEFwcFN0b3JlPixcbiAgICBwcml2YXRlIGNvbnRlbnRBcGk6IENvbnRlbnRBcGlTZXJ2aWNlLFxuICAgIHByaXZhdGUgcGVybWlzc2lvbjogTm9kZVBlcm1pc3Npb25TZXJ2aWNlLFxuICAgIHByaXZhdGUgZGlhbG9nUmVmOiBNYXREaWFsb2csXG4gICAgcHJpdmF0ZSBub2RlQWN0aW9uc1NlcnZpY2U6IE5vZGVBY3Rpb25zU2VydmljZSxcbiAgICBwcml2YXRlIHRyYW5zbGF0aW9uOiBUcmFuc2xhdGlvblNlcnZpY2UsXG4gICAgcHJpdmF0ZSBub3RpZmljYXRpb25TZXJ2aWNlOiBOb3RpZmljYXRpb25TZXJ2aWNlLFxuICAgIHByaXZhdGUgbm9kZUFzcGVjdFNlcnZpY2U6IE5vZGVBc3BlY3RTZXJ2aWNlLFxuICAgIHByaXZhdGUgYXBwSG9va1NlcnZpY2U6IEFwcEhvb2tTZXJ2aWNlLFxuICAgIHByaXZhdGUgbmV3VmVyc2lvblVwbG9hZGVyU2VydmljZTogTmV3VmVyc2lvblVwbG9hZGVyU2VydmljZSxcbiAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyXG4gICkge31cblxuICBhZGRGYXZvcml0ZShub2RlczogQXJyYXk8Tm9kZUVudHJ5Pikge1xuICAgIGlmIChub2RlcyAmJiBub2Rlcy5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLmNvbnRlbnRBcGkuYWRkRmF2b3JpdGUobm9kZXMpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIGNvbnN0IGZhdm9yaXRlTm9kZXMgPSBub2Rlcy5tYXAoKG5vZGUpID0+IHtcbiAgICAgICAgICBjb25zdCBuZXdOb2RlID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShub2RlKSk7XG4gICAgICAgICAgbmV3Tm9kZS5lbnRyeS5pc0Zhdm9yaXRlID0gdHJ1ZTtcbiAgICAgICAgICByZXR1cm4gbmV3Tm9kZTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChuZXcgU2V0U2VsZWN0ZWROb2Rlc0FjdGlvbihmYXZvcml0ZU5vZGVzKSk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICByZW1vdmVGYXZvcml0ZShub2RlczogQXJyYXk8Tm9kZUVudHJ5Pikge1xuICAgIGlmIChub2RlcyAmJiBub2Rlcy5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLmNvbnRlbnRBcGkucmVtb3ZlRmF2b3JpdGUobm9kZXMpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIGNvbnN0IGZhdm9yaXRlTm9kZXMgPSBub2Rlcy5tYXAoKG5vZGUpID0+IHtcbiAgICAgICAgICBjb25zdCBuZXdOb2RlID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShub2RlKSk7XG4gICAgICAgICAgbmV3Tm9kZS5lbnRyeS5pc0Zhdm9yaXRlID0gZmFsc2U7XG4gICAgICAgICAgcmV0dXJuIG5ld05vZGU7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2gobmV3IFNldFNlbGVjdGVkTm9kZXNBY3Rpb24oZmF2b3JpdGVOb2RlcykpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgbWFuYWdlVmVyc2lvbnMobm9kZTogYW55LCBmb2N1c2VkRWxlbWVudE9uQ2xvc2VTZWxlY3Rvcj86IHN0cmluZykge1xuICAgIGlmIChub2RlPy5lbnRyeSkge1xuICAgICAgLy8gc2hhcmVkIGFuZCBmYXZvcml0ZVxuICAgICAgY29uc3QgaWQgPSBub2RlLmVudHJ5Lm5vZGVJZCB8fCAobm9kZSBhcyBhbnkpLmVudHJ5Lmd1aWQ7XG5cbiAgICAgIGlmIChpZCkge1xuICAgICAgICB0aGlzLmNvbnRlbnRBcGkuZ2V0Tm9kZUluZm8oaWQpLnN1YnNjcmliZSgoZW50cnkpID0+IHtcbiAgICAgICAgICB0aGlzLm9wZW5WZXJzaW9uTWFuYWdlckRpYWxvZyhlbnRyeSwgZm9jdXNlZEVsZW1lbnRPbkNsb3NlU2VsZWN0b3IpO1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMub3BlblZlcnNpb25NYW5hZ2VyRGlhbG9nKG5vZGUuZW50cnksIGZvY3VzZWRFbGVtZW50T25DbG9zZVNlbGVjdG9yKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBtYW5hZ2VBc3BlY3RzKG5vZGU6IGFueSwgZm9jdXNlZEVsZW1lbnRPbkNsb3NlU2VsZWN0b3I/OiBzdHJpbmcpIHtcbiAgICBpZiAobm9kZT8uZW50cnkpIHtcbiAgICAgIC8vIHNoYXJlZCBhbmQgZmF2b3JpdGVcbiAgICAgIGNvbnN0IGlkID0gbm9kZS5lbnRyeS5ub2RlSWQgfHwgKG5vZGUgYXMgYW55KS5lbnRyeS5ndWlkO1xuXG4gICAgICBpZiAoaWQpIHtcbiAgICAgICAgdGhpcy5jb250ZW50QXBpLmdldE5vZGVJbmZvKGlkKS5zdWJzY3JpYmUoKGVudHJ5KSA9PiB7XG4gICAgICAgICAgdGhpcy5vcGVuQXNwZWN0TGlzdERpYWxvZyhlbnRyeSwgZm9jdXNlZEVsZW1lbnRPbkNsb3NlU2VsZWN0b3IpO1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMub3BlbkFzcGVjdExpc3REaWFsb2cobm9kZS5lbnRyeSwgZm9jdXNlZEVsZW1lbnRPbkNsb3NlU2VsZWN0b3IpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHZlcnNpb25VcGRhdGVEaWFsb2cobm9kZSwgZmlsZSkge1xuICAgIHRoaXMuY29udGVudEFwaS5nZXROb2RlVmVyc2lvbnMobm9kZS5pZCkuc3Vic2NyaWJlKCh7IGxpc3QgfSkgPT4ge1xuICAgICAgY29uc3QgbmV3VmVyc2lvblVwbG9hZGVyRGlhbG9nRGF0YTogTmV3VmVyc2lvblVwbG9hZGVyRGlhbG9nRGF0YSA9IHtcbiAgICAgICAgbm9kZSxcbiAgICAgICAgZmlsZSxcbiAgICAgICAgY3VycmVudFZlcnNpb246IGxpc3QuZW50cmllc1swXS5lbnRyeSxcbiAgICAgICAgdGl0bGU6ICdWRVJTSU9OLkRJQUxPRy5USVRMRSdcbiAgICAgIH07XG4gICAgICBjb25zdCBkaWFsb2dDb25maWc6IE1hdERpYWxvZ0NvbmZpZyA9IHsgd2lkdGg6ICc2MDBweCcgfTtcbiAgICAgIHRoaXMubmV3VmVyc2lvblVwbG9hZGVyU2VydmljZS5vcGVuVXBsb2FkTmV3VmVyc2lvbkRpYWxvZyhuZXdWZXJzaW9uVXBsb2FkZXJEaWFsb2dEYXRhLCBkaWFsb2dDb25maWcpLnN1YnNjcmliZShcbiAgICAgICAgKGRhdGE6IE5ld1ZlcnNpb25VcGxvYWRlckRhdGEpID0+IHtcbiAgICAgICAgICBpZiAoZGF0YS5hY3Rpb24gPT09IE5ld1ZlcnNpb25VcGxvYWRlckRhdGFBY3Rpb24udXBsb2FkKSB7XG4gICAgICAgICAgICBpZiAoZGF0YS5uZXdWZXJzaW9uLnZhbHVlLmVudHJ5LnByb3BlcnRpZXNbJ2NtOmxvY2tUeXBlJ10gPT09ICdXUklURV9MT0NLJykge1xuICAgICAgICAgICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKG5ldyBVbmxvY2tXcml0ZUFjdGlvbihkYXRhLm5ld1ZlcnNpb24udmFsdWUpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIChlcnJvcikgPT4gdGhpcy5zdG9yZS5kaXNwYXRjaChuZXcgU25hY2tiYXJFcnJvckFjdGlvbihlcnJvcikpXG4gICAgICApO1xuICAgIH0pO1xuICB9XG5cbiAgc2hhcmVOb2RlKG5vZGU6IGFueSwgZm9jdXNlZEVsZW1lbnRPbkNsb3NlU2VsZWN0b3I/OiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAobm9kZT8uZW50cnkpIHtcbiAgICAgIC8vIHNoYXJlZCBhbmQgZmF2b3JpdGVcbiAgICAgIGNvbnN0IGlkID0gbm9kZS5lbnRyeS5ub2RlSWQgfHwgKG5vZGUgYXMgYW55KS5lbnRyeS5ndWlkO1xuXG4gICAgICBpZiAoaWQpIHtcbiAgICAgICAgdGhpcy5jb250ZW50QXBpLmdldE5vZGVJbmZvKGlkKS5zdWJzY3JpYmUoKGVudHJ5KSA9PiB7XG4gICAgICAgICAgdGhpcy5vcGVuU2hhcmVMaW5rRGlhbG9nKHsgZW50cnkgfSwgZm9jdXNlZEVsZW1lbnRPbkNsb3NlU2VsZWN0b3IpO1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMub3BlblNoYXJlTGlua0RpYWxvZyhub2RlLCBmb2N1c2VkRWxlbWVudE9uQ2xvc2VTZWxlY3Rvcik7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgb3BlblNoYXJlTGlua0RpYWxvZyhub2RlLCBmb2N1c2VkRWxlbWVudE9uQ2xvc2VTZWxlY3Rvcj86IHN0cmluZykge1xuICAgIHRoaXMuc3RvcmVcbiAgICAgIC5zZWxlY3QoZ2V0U2hhcmVkVXJsKVxuICAgICAgLnBpcGUodGFrZSgxKSlcbiAgICAgIC5zdWJzY3JpYmUoKGJhc2VTaGFyZVVybCkgPT4ge1xuICAgICAgICB0aGlzLmRpYWxvZ1JlZlxuICAgICAgICAgIC5vcGVuKFNoYXJlRGlhbG9nQ29tcG9uZW50LCB7XG4gICAgICAgICAgICByZXN0b3JlRm9jdXM6IHRydWUsXG4gICAgICAgICAgICB3aWR0aDogJzYwMHB4JyxcbiAgICAgICAgICAgIHBhbmVsQ2xhc3M6ICdhZGYtc2hhcmUtbGluay1kaWFsb2cnLFxuICAgICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgICBub2RlLFxuICAgICAgICAgICAgICBiYXNlU2hhcmVVcmxcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KVxuICAgICAgICAgIC5hZnRlckNsb3NlZCgpXG4gICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKG5ldyBTZXRTZWxlY3RlZE5vZGVzQWN0aW9uKFtub2RlXSkpO1xuICAgICAgICAgICAgdGhpcy5hcHBIb29rU2VydmljZS5saW5rc1Vuc2hhcmVkLm5leHQoKTtcbiAgICAgICAgICAgIHRoaXMuZm9jdXNBZnRlckNsb3NlKGZvY3VzZWRFbGVtZW50T25DbG9zZVNlbGVjdG9yKTtcbiAgICAgICAgICB9KTtcbiAgICAgIH0pO1xuICB9XG5cbiAgY3JlYXRlRm9sZGVyKHBhcmVudE5vZGVJZDogc3RyaW5nKSB7XG4gICAgY29uc3QgZGlhbG9nSW5zdGFuY2UgPSB0aGlzLmRpYWxvZ1JlZi5vcGVuKEZvbGRlckRpYWxvZ0NvbXBvbmVudCwge1xuICAgICAgZGF0YToge1xuICAgICAgICBwYXJlbnROb2RlSWQsXG4gICAgICAgIGNyZWF0ZVRpdGxlOiB1bmRlZmluZWQsXG4gICAgICAgIG5vZGVUeXBlOiAnY206Zm9sZGVyJ1xuICAgICAgfSxcbiAgICAgIHdpZHRoOiAnNDAwcHgnLFxuICAgICAgcm9sZTogJ2RpYWxvZydcbiAgICB9KTtcblxuICAgIGRpYWxvZ0luc3RhbmNlLmNvbXBvbmVudEluc3RhbmNlLmVycm9yLnN1YnNjcmliZSgobWVzc2FnZTogc3RyaW5nKSA9PiB7XG4gICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKG5ldyBTbmFja2JhckVycm9yQWN0aW9uKG1lc3NhZ2UpKTtcbiAgICB9KTtcblxuICAgIGRpYWxvZ0luc3RhbmNlLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKChub2RlKSA9PiB7XG4gICAgICBpZiAobm9kZSkge1xuICAgICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKG5ldyBSZWxvYWREb2N1bWVudExpc3RBY3Rpb24oKSk7XG4gICAgICB9XG4gICAgICB0aGlzLmZvY3VzQWZ0ZXJDbG9zZSh0aGlzLmNyZWF0ZU1lbnVCdXR0b25TZWxlY3Rvcik7XG4gICAgfSk7XG4gIH1cblxuICBlZGl0Rm9sZGVyKGZvbGRlcjogTm9kZUVudHJ5LCBmb2N1c2VkRWxlbWVudE9uQ2xvc2VTZWxlY3Rvcj86IHN0cmluZykge1xuICAgIGlmICghZm9sZGVyKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgZGlhbG9nID0gdGhpcy5kaWFsb2dSZWYub3BlbihGb2xkZXJEaWFsb2dDb21wb25lbnQsIHtcbiAgICAgIGRhdGE6IHtcbiAgICAgICAgZm9sZGVyOiBmb2xkZXIuZW50cnlcbiAgICAgIH0sXG4gICAgICB3aWR0aDogJzQwMHB4J1xuICAgIH0pO1xuXG4gICAgZGlhbG9nLmNvbXBvbmVudEluc3RhbmNlLmVycm9yLnN1YnNjcmliZSgobWVzc2FnZTogc3RyaW5nKSA9PiB7XG4gICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKG5ldyBTbmFja2JhckVycm9yQWN0aW9uKG1lc3NhZ2UpKTtcbiAgICB9KTtcblxuICAgIGRpYWxvZy5hZnRlckNsb3NlZCgpLnN1YnNjcmliZSgobm9kZSkgPT4ge1xuICAgICAgaWYgKG5vZGUpIHtcbiAgICAgICAgdGhpcy5ub2Rlc0FwaVNlcnZpY2Uubm9kZVVwZGF0ZWQubmV4dChub2RlKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuZm9jdXNBZnRlckNsb3NlKGZvY3VzZWRFbGVtZW50T25DbG9zZVNlbGVjdG9yKTtcbiAgICB9KTtcbiAgfVxuXG4gIGNyZWF0ZUxpYnJhcnkoKTogT2JzZXJ2YWJsZTxzdHJpbmc+IHtcbiAgICBjb25zdCBkaWFsb2dJbnN0YW5jZSA9IHRoaXMuZGlhbG9nUmVmLm9wZW4oTGlicmFyeURpYWxvZ0NvbXBvbmVudCwge1xuICAgICAgd2lkdGg6ICc0MDBweCdcbiAgICB9KTtcblxuICAgIGRpYWxvZ0luc3RhbmNlLmNvbXBvbmVudEluc3RhbmNlLmVycm9yLnN1YnNjcmliZSgobWVzc2FnZTogc3RyaW5nKSA9PiB7XG4gICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKG5ldyBTbmFja2JhckVycm9yQWN0aW9uKG1lc3NhZ2UpKTtcbiAgICB9KTtcblxuICAgIHJldHVybiBkaWFsb2dJbnN0YW5jZS5hZnRlckNsb3NlZCgpLnBpcGUoXG4gICAgICB0YXAoKG5vZGUpID0+IHtcbiAgICAgICAgaWYgKG5vZGUpIHtcbiAgICAgICAgICB0aGlzLmFwcEhvb2tTZXJ2aWNlLmxpYnJhcnlDcmVhdGVkLm5leHQobm9kZSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5mb2N1c0FmdGVyQ2xvc2UodGhpcy5jcmVhdGVNZW51QnV0dG9uU2VsZWN0b3IpO1xuICAgICAgfSksXG4gICAgICBtYXAoKG5vZGU6IFNpdGVFbnRyeSkgPT4ge1xuICAgICAgICBpZiAobm9kZT8uZW50cnk/Lmd1aWQpIHtcbiAgICAgICAgICByZXR1cm4gbm9kZS5lbnRyeS5ndWlkO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgZGVsZXRlTGlicmFyeShpZDogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5jb250ZW50QXBpLmRlbGV0ZVNpdGUoaWQpLnN1YnNjcmliZShcbiAgICAgICgpID0+IHtcbiAgICAgICAgdGhpcy5hcHBIb29rU2VydmljZS5saWJyYXJ5RGVsZXRlZC5uZXh0KGlkKTtcbiAgICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChuZXcgU25hY2tiYXJJbmZvQWN0aW9uKCdBUFAuTUVTU0FHRVMuSU5GTy5MSUJSQVJZX0RFTEVURUQnKSk7XG4gICAgICB9LFxuICAgICAgKCkgPT4ge1xuICAgICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKG5ldyBTbmFja2JhckVycm9yQWN0aW9uKCdBUFAuTUVTU0FHRVMuRVJST1JTLkRFTEVURV9MSUJSQVJZX0ZBSUxFRCcpKTtcbiAgICAgIH1cbiAgICApO1xuICB9XG5cbiAgbGVhdmVMaWJyYXJ5KHNpdGVJZDogc3RyaW5nLCBmb2N1c2VkRWxlbWVudE9uQ2xvc2VTZWxlY3Rvcj86IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IGRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nUmVmLm9wZW4oQ29uZmlybURpYWxvZ0NvbXBvbmVudCwge1xuICAgICAgZGF0YToge1xuICAgICAgICB0aXRsZTogJ0FQUC5ESUFMT0dTLkNPTkZJUk1fTEVBVkUuVElUTEUnLFxuICAgICAgICBtZXNzYWdlOiAnQVBQLkRJQUxPR1MuQ09ORklSTV9MRUFWRS5NRVNTQUdFJyxcbiAgICAgICAgeWVzTGFiZWw6ICdBUFAuRElBTE9HUy5DT05GSVJNX0xFQVZFLllFU19MQUJFTCcsXG4gICAgICAgIG5vTGFiZWw6ICdBUFAuRElBTE9HUy5DT05GSVJNX0xFQVZFLk5PX0xBQkVMJ1xuICAgICAgfSxcbiAgICAgIG1pbldpZHRoOiAnMjUwcHgnXG4gICAgfSk7XG5cbiAgICBkaWFsb2dSZWYuYWZ0ZXJDbG9zZWQoKS5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xuICAgICAgaWYgKHJlc3VsdCA9PT0gdHJ1ZSkge1xuICAgICAgICB0aGlzLmNvbnRlbnRBcGkubGVhdmVTaXRlKHNpdGVJZCkuc3Vic2NyaWJlKFxuICAgICAgICAgICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuYXBwSG9va1NlcnZpY2UubGlicmFyeUxlZnQubmV4dChzaXRlSWQpO1xuICAgICAgICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChuZXcgU25hY2tiYXJJbmZvQWN0aW9uKCdBUFAuTUVTU0FHRVMuSU5GTy5MRUZUX0xJQlJBUlknKSk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKG5ldyBTbmFja2JhckVycm9yQWN0aW9uKCdBUFAuTUVTU0FHRVMuRVJST1JTLkxFQVZFX0xJQlJBUllfRkFJTEVEJykpO1xuICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuZm9jdXNBZnRlckNsb3NlKGZvY3VzZWRFbGVtZW50T25DbG9zZVNlbGVjdG9yKTtcbiAgICB9KTtcbiAgfVxuXG4gIHVwZGF0ZUxpYnJhcnkoc2l0ZUlkOiBzdHJpbmcsIHNpdGVCb2R5OiBTaXRlQm9keUNyZWF0ZSkge1xuICAgIHRoaXMuY29udGVudEFwaS51cGRhdGVMaWJyYXJ5KHNpdGVJZCwgc2l0ZUJvZHkpLnN1YnNjcmliZShcbiAgICAgIChzaXRlRW50cnk6IFNpdGVFbnRyeSkgPT4ge1xuICAgICAgICB0aGlzLmFwcEhvb2tTZXJ2aWNlLmxpYnJhcnlVcGRhdGVkLm5leHQoc2l0ZUVudHJ5KTtcbiAgICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChuZXcgU25hY2tiYXJJbmZvQWN0aW9uKCdMSUJSQVJZLlNVQ0NFU1MuTElCUkFSWV9VUERBVEVEJykpO1xuICAgICAgfSxcbiAgICAgICgpID0+IHtcbiAgICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChuZXcgU25hY2tiYXJFcnJvckFjdGlvbignTElCUkFSWS5FUlJPUlMuTElCUkFSWV9VUERBVEVfRVJST1InKSk7XG4gICAgICB9XG4gICAgKTtcbiAgfVxuXG4gIGFzeW5jIHVuc2hhcmVOb2RlcyhsaW5rczogQXJyYXk8Tm9kZUVudHJ5Pikge1xuICAgIGNvbnN0IHByb21pc2VzID0gbGlua3MubWFwKChsaW5rKSA9PiB0aGlzLmNvbnRlbnRBcGkuZGVsZXRlU2hhcmVkTGluayhsaW5rLmVudHJ5LmlkKS50b1Byb21pc2UoKSk7XG4gICAgYXdhaXQgUHJvbWlzZS5hbGwocHJvbWlzZXMpO1xuICAgIHRoaXMuYXBwSG9va1NlcnZpY2UubGlua3NVbnNoYXJlZC5uZXh0KCk7XG4gIH1cblxuICBjYW5VcGRhdGVOb2RlKG5vZGU6IE5vZGVFbnRyeSB8IE5vZGUpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5wZXJtaXNzaW9uLmNoZWNrKG5vZGUsIFsndXBkYXRlJ10pO1xuICB9XG5cbiAgY2FuVXBsb2FkQ29udGVudChmb2xkZXJOb2RlOiBOb2RlRW50cnkgfCBOb2RlKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMucGVybWlzc2lvbi5jaGVjayhmb2xkZXJOb2RlLCBbJ2NyZWF0ZSddKTtcbiAgfVxuXG4gIHB1cmdlRGVsZXRlZE5vZGVzKG5vZGVzOiBOb2RlRW50cnlbXSkge1xuICAgIGlmICghbm9kZXMgfHwgbm9kZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgZGlhbG9nUmVmID0gdGhpcy5kaWFsb2dSZWYub3BlbihDb25maXJtRGlhbG9nQ29tcG9uZW50LCB7XG4gICAgICBkYXRhOiB7XG4gICAgICAgIHRpdGxlOiAnQVBQLkRJQUxPR1MuQ09ORklSTV9QVVJHRS5USVRMRScsXG4gICAgICAgIG1lc3NhZ2U6ICdBUFAuRElBTE9HUy5DT05GSVJNX1BVUkdFLk1FU1NBR0UnLFxuICAgICAgICB5ZXNMYWJlbDogJ0FQUC5ESUFMT0dTLkNPTkZJUk1fUFVSR0UuWUVTX0xBQkVMJyxcbiAgICAgICAgbm9MYWJlbDogJ0FQUC5ESUFMT0dTLkNPTkZJUk1fUFVSR0UuTk9fTEFCRUwnXG4gICAgICB9LFxuICAgICAgbWluV2lkdGg6ICcyNTBweCdcbiAgICB9KTtcblxuICAgIGRpYWxvZ1JlZi5hZnRlckNsb3NlZCgpLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XG4gICAgICBpZiAocmVzdWx0ID09PSB0cnVlKSB7XG4gICAgICAgIGNvbnN0IG5vZGVzVG9EZWxldGU6IE5vZGVJbmZvW10gPSBub2Rlcy5tYXAoKG5vZGUpID0+IHtcbiAgICAgICAgICBjb25zdCB7IG5hbWUgfSA9IG5vZGUuZW50cnk7XG4gICAgICAgICAgY29uc3QgaWQgPSAobm9kZSBhcyBhbnkpLmVudHJ5Lm5vZGVJZCB8fCBub2RlLmVudHJ5LmlkO1xuXG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGlkLFxuICAgICAgICAgICAgbmFtZVxuICAgICAgICAgIH07XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnB1cmdlTm9kZXMobm9kZXNUb0RlbGV0ZSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICByZXN0b3JlRGVsZXRlZE5vZGVzKHNlbGVjdGlvbjogTm9kZUVudHJ5W10gPSBbXSkge1xuICAgIGlmICghc2VsZWN0aW9uLmxlbmd0aCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IG5vZGVzV2l0aFBhdGggPSBzZWxlY3Rpb24uZmlsdGVyKChub2RlKSA9PiBub2RlLmVudHJ5LnBhdGgpO1xuXG4gICAgaWYgKHNlbGVjdGlvbi5sZW5ndGggJiYgIW5vZGVzV2l0aFBhdGgubGVuZ3RoKSB7XG4gICAgICBjb25zdCBmYWlsZWRTdGF0dXMgPSB0aGlzLnByb2Nlc3NTdGF0dXMoW10pO1xuICAgICAgZmFpbGVkU3RhdHVzLmZhaWwucHVzaCguLi5zZWxlY3Rpb24pO1xuICAgICAgdGhpcy5zaG93UmVzdG9yZU5vdGlmaWNhdGlvbihmYWlsZWRTdGF0dXMpO1xuICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChuZXcgUmVsb2FkRG9jdW1lbnRMaXN0QWN0aW9uKCkpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGxldCBzdGF0dXM6IERlbGV0ZVN0YXR1cztcblxuICAgIGZvcmtKb2luKG5vZGVzV2l0aFBhdGgubWFwKChub2RlKSA9PiB0aGlzLnJlc3RvcmVOb2RlKG5vZGUpKSlcbiAgICAgIC5waXBlKFxuICAgICAgICB0YXAoKHJlc3RvcmVkTm9kZXMpID0+IHtcbiAgICAgICAgICBzdGF0dXMgPSB0aGlzLnByb2Nlc3NTdGF0dXMocmVzdG9yZWROb2Rlcyk7XG4gICAgICAgIH0pLFxuICAgICAgICBtZXJnZU1hcCgoKSA9PiB0aGlzLmNvbnRlbnRBcGkuZ2V0RGVsZXRlZE5vZGVzKCkpXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKChub2RlczogRGVsZXRlZE5vZGVzUGFnaW5nKSA9PiB7XG4gICAgICAgIGNvbnN0IHNlbGVjdGVkTm9kZXMgPSB0aGlzLmRpZmYoc3RhdHVzLmZhaWwsIHNlbGVjdGlvbiwgZmFsc2UpO1xuICAgICAgICBjb25zdCByZW1haW5pbmdOb2RlcyA9IHRoaXMuZGlmZihzZWxlY3RlZE5vZGVzLCBub2Rlcy5saXN0LmVudHJpZXMpO1xuXG4gICAgICAgIGlmICghcmVtYWluaW5nTm9kZXMubGVuZ3RoKSB7XG4gICAgICAgICAgdGhpcy5zaG93UmVzdG9yZU5vdGlmaWNhdGlvbihzdGF0dXMpO1xuICAgICAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2gobmV3IFJlbG9hZERvY3VtZW50TGlzdEFjdGlvbigpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnJlc3RvcmVEZWxldGVkTm9kZXMocmVtYWluaW5nTm9kZXMpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgfVxuXG4gIGNvcHlOb2Rlcyhub2RlczogQXJyYXk8Tm9kZUVudHJ5PiwgZm9jdXNlZEVsZW1lbnRPbkNsb3NlU2VsZWN0b3I/OiBzdHJpbmcpIHtcbiAgICB6aXAodGhpcy5ub2RlQWN0aW9uc1NlcnZpY2UuY29weU5vZGVzKG5vZGVzLCB1bmRlZmluZWQsIGZvY3VzZWRFbGVtZW50T25DbG9zZVNlbGVjdG9yKSwgdGhpcy5ub2RlQWN0aW9uc1NlcnZpY2UuY29udGVudENvcGllZCkuc3Vic2NyaWJlKFxuICAgICAgKHJlc3VsdCkgPT4ge1xuICAgICAgICBjb25zdCBbb3BlcmF0aW9uUmVzdWx0LCBuZXdJdGVtc10gPSByZXN1bHQ7XG4gICAgICAgIHRoaXMuc2hvd0NvcHlNZXNzYWdlKG9wZXJhdGlvblJlc3VsdCwgbm9kZXMsIG5ld0l0ZW1zKTtcbiAgICAgIH0sXG4gICAgICAoZXJyb3IpID0+IHtcbiAgICAgICAgdGhpcy5zaG93Q29weU1lc3NhZ2UoZXJyb3IsIG5vZGVzKTtcbiAgICAgIH1cbiAgICApO1xuICB9XG5cbiAgbW92ZU5vZGVzKG5vZGVzOiBBcnJheTxOb2RlRW50cnk+LCBmb2N1c2VkRWxlbWVudE9uQ2xvc2VTZWxlY3Rvcj86IHN0cmluZykge1xuICAgIGNvbnN0IHBlcm1pc3Npb25Gb3JNb3ZlID0gJyEnO1xuXG4gICAgemlwKHRoaXMubm9kZUFjdGlvbnNTZXJ2aWNlLm1vdmVOb2Rlcyhub2RlcywgcGVybWlzc2lvbkZvck1vdmUsIGZvY3VzZWRFbGVtZW50T25DbG9zZVNlbGVjdG9yKSwgdGhpcy5ub2RlQWN0aW9uc1NlcnZpY2UuY29udGVudE1vdmVkKS5zdWJzY3JpYmUoXG4gICAgICAocmVzdWx0KSA9PiB7XG4gICAgICAgIGNvbnN0IFtvcGVyYXRpb25SZXN1bHQsIG1vdmVSZXNwb25zZV0gPSByZXN1bHQ7XG4gICAgICAgIHRoaXMuc2hvd01vdmVNZXNzYWdlKG5vZGVzLCBvcGVyYXRpb25SZXN1bHQsIG1vdmVSZXNwb25zZSk7XG5cbiAgICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChuZXcgUmVsb2FkRG9jdW1lbnRMaXN0QWN0aW9uKCkpO1xuICAgICAgfSxcbiAgICAgIChlcnJvcikgPT4ge1xuICAgICAgICB0aGlzLnNob3dNb3ZlTWVzc2FnZShub2RlcywgZXJyb3IpO1xuICAgICAgfVxuICAgICk7XG4gIH1cblxuICBnZXRFcnJvck1lc3NhZ2UoZXJyb3JPYmplY3Q6IHsgbWVzc2FnZTogYW55IH0pOiBzdHJpbmcge1xuICAgIGxldCBpMThuTWVzc2FnZVN0cmluZyA9ICdBUFAuTUVTU0FHRVMuRVJST1JTLkdFTkVSSUMnO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgZXJyb3I6IHsgc3RhdHVzQ29kZSB9XG4gICAgICB9ID0gSlNPTi5wYXJzZShlcnJvck9iamVjdC5tZXNzYWdlKTtcblxuICAgICAgaWYgKHN0YXR1c0NvZGUgPT09IDQwOSkge1xuICAgICAgICBpMThuTWVzc2FnZVN0cmluZyA9ICdBUFAuTUVTU0FHRVMuRVJST1JTLk5PREVfTU9WRSc7XG4gICAgICB9IGVsc2UgaWYgKHN0YXR1c0NvZGUgPT09IDQwMykge1xuICAgICAgICBpMThuTWVzc2FnZVN0cmluZyA9ICdBUFAuTUVTU0FHRVMuRVJST1JTLlBFUk1JU1NJT04nO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgLyogRG8gbm90aGluZywga2VlcCB0aGUgb3JpZ2luYWwgbWVzc2FnZSAqL1xuICAgIH1cblxuICAgIHJldHVybiBpMThuTWVzc2FnZVN0cmluZztcbiAgfVxuXG4gIGdldE5vZGVJbmZvKCk6IE9ic2VydmFibGU8Tm9kZT4ge1xuICAgIHJldHVybiB0aGlzLnN0b3JlLnNlbGVjdChnZXRBcHBTZWxlY3Rpb24pLnBpcGUoXG4gICAgICB0YWtlKDEpLFxuICAgICAgbWVyZ2VNYXAoKHsgZmlsZSB9KSA9PiB7XG4gICAgICAgIGNvbnN0IGlkID0gKGZpbGUgYXMgYW55KS5lbnRyeS5ub2RlSWQgfHwgKGZpbGUgYXMgYW55KS5lbnRyeS5ndWlkO1xuICAgICAgICBpZiAoIWlkKSB7XG4gICAgICAgICAgcmV0dXJuIG9mKGZpbGUuZW50cnkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiB0aGlzLmNvbnRlbnRBcGkuZ2V0Tm9kZUluZm8oaWQpO1xuICAgICAgICB9XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICB1bmxvY2tOb2RlKG5vZGU6IE5vZGVFbnRyeSk6IFByb21pc2U8dm9pZCB8IE5vZGVFbnRyeT4ge1xuICAgIHJldHVybiB0aGlzLmNvbnRlbnRBcGkudW5sb2NrTm9kZShub2RlLmVudHJ5LmlkKS5jYXRjaCgoKSA9PiB7XG4gICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKFxuICAgICAgICBuZXcgU25hY2tiYXJFcnJvckFjdGlvbignQVBQLk1FU1NBR0VTLkVSUk9SUy5VTkxPQ0tfTk9ERScsIHtcbiAgICAgICAgICBmaWxlTmFtZTogbm9kZS5lbnRyeS5uYW1lXG4gICAgICAgIH0pXG4gICAgICApO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBzaG93Q29weU1lc3NhZ2UoaW5mbzogYW55LCBub2RlczogQXJyYXk8Tm9kZUVudHJ5PiwgbmV3SXRlbXM/OiBBcnJheTxOb2RlRW50cnk+KSB7XG4gICAgY29uc3QgbnVtYmVyT2ZDb3BpZWRJdGVtcyA9IG5ld0l0ZW1zID8gbmV3SXRlbXMubGVuZ3RoIDogMDtcbiAgICBjb25zdCBmYWlsZWRJdGVtcyA9IG5vZGVzLmxlbmd0aCAtIG51bWJlck9mQ29waWVkSXRlbXM7XG5cbiAgICBsZXQgaTE4bk1lc3NhZ2VTdHJpbmcgPSAnQVBQLk1FU1NBR0VTLkVSUk9SUy5HRU5FUklDJztcblxuICAgIGlmICh0eXBlb2YgaW5mbyA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGlmIChpbmZvLnRvTG93ZXJDYXNlKCkuaW5kZXhPZignc3VjY2VzJykgIT09IC0xKSB7XG4gICAgICAgIGxldCBpMThNZXNzYWdlU3VmZml4O1xuXG4gICAgICAgIGlmIChmYWlsZWRJdGVtcykge1xuICAgICAgICAgIGlmIChudW1iZXJPZkNvcGllZEl0ZW1zKSB7XG4gICAgICAgICAgICBpMThNZXNzYWdlU3VmZml4ID0gbnVtYmVyT2ZDb3BpZWRJdGVtcyA9PT0gMSA/ICdQQVJUSUFMX1NJTkdVTEFSJyA6ICdQQVJUSUFMX1BMVVJBTCc7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGkxOE1lc3NhZ2VTdWZmaXggPSBmYWlsZWRJdGVtcyA9PT0gMSA/ICdGQUlMX1NJTkdVTEFSJyA6ICdGQUlMX1BMVVJBTCc7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGkxOE1lc3NhZ2VTdWZmaXggPSBudW1iZXJPZkNvcGllZEl0ZW1zID09PSAxID8gJ1NJTkdVTEFSJyA6ICdQTFVSQUwnO1xuICAgICAgICB9XG5cbiAgICAgICAgaTE4bk1lc3NhZ2VTdHJpbmcgPSBgQVBQLk1FU1NBR0VTLklORk8uTk9ERV9DT1BZLiR7aTE4TWVzc2FnZVN1ZmZpeH1gO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCB7XG4gICAgICAgICAgZXJyb3I6IHsgc3RhdHVzQ29kZSB9XG4gICAgICAgIH0gPSBKU09OLnBhcnNlKGluZm8ubWVzc2FnZSk7XG5cbiAgICAgICAgaWYgKHN0YXR1c0NvZGUgPT09IDQwMykge1xuICAgICAgICAgIGkxOG5NZXNzYWdlU3RyaW5nID0gJ0FQUC5NRVNTQUdFUy5FUlJPUlMuUEVSTUlTU0lPTic7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2gge31cbiAgICB9XG5cbiAgICBjb25zdCB1bmRvID0gbnVtYmVyT2ZDb3BpZWRJdGVtcyA+IDAgPyB0aGlzLnRyYW5zbGF0aW9uLmluc3RhbnQoJ0FQUC5BQ1RJT05TLlVORE8nKSA6ICcnO1xuXG4gICAgY29uc3QgbWVzc2FnZSA9IHRoaXMudHJhbnNsYXRpb24uaW5zdGFudChpMThuTWVzc2FnZVN0cmluZywge1xuICAgICAgc3VjY2VzczogbnVtYmVyT2ZDb3BpZWRJdGVtcyxcbiAgICAgIGZhaWxlZDogZmFpbGVkSXRlbXNcbiAgICB9KTtcblxuICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZVxuICAgICAgLm9wZW5TbmFja01lc3NhZ2VBY3Rpb24obWVzc2FnZSwgdW5kbywge1xuICAgICAgICBwYW5lbENsYXNzOiAnaW5mby1zbmFja2JhcidcbiAgICAgIH0pXG4gICAgICAub25BY3Rpb24oKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB0aGlzLnVuZG9Db3B5Tm9kZXMobmV3SXRlbXMpKTtcbiAgfVxuXG4gIHByaXZhdGUgdW5kb0NvcHlOb2Rlcyhub2RlczogTm9kZUVudHJ5W10pIHtcbiAgICBjb25zdCBiYXRjaCA9IHRoaXMubm9kZUFjdGlvbnNTZXJ2aWNlXG4gICAgICAuZmxhdHRlbihub2RlcylcbiAgICAgIC5maWx0ZXIoKGl0ZW0pID0+IGl0ZW0uZW50cnkpXG4gICAgICAubWFwKChpdGVtKSA9PiB0aGlzLmNvbnRlbnRBcGkuZGVsZXRlTm9kZShpdGVtLmVudHJ5LmlkLCB7IHBlcm1hbmVudDogdHJ1ZSB9KSk7XG5cbiAgICBmb3JrSm9pbiguLi5iYXRjaCkuc3Vic2NyaWJlKFxuICAgICAgKCkgPT4ge1xuICAgICAgICB0aGlzLmFwcEhvb2tTZXJ2aWNlLm5vZGVzRGVsZXRlZC5uZXh0KG51bGwpO1xuICAgICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKG5ldyBSZWxvYWREb2N1bWVudExpc3RBY3Rpb24oKSk7XG4gICAgICB9LFxuICAgICAgKGVycm9yKSA9PiB7XG4gICAgICAgIGxldCBpMThuTWVzc2FnZVN0cmluZyA9ICdBUFAuTUVTU0FHRVMuRVJST1JTLkdFTkVSSUMnO1xuXG4gICAgICAgIGxldCBlcnJvckpzb24gPSBudWxsO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGVycm9ySnNvbiA9IEpTT04ucGFyc2UoZXJyb3IubWVzc2FnZSk7XG4gICAgICAgIH0gY2F0Y2gge31cblxuICAgICAgICBpZiAoZXJyb3JKc29uPy5lcnJvcj8uc3RhdHVzQ29kZSA9PT0gNDAzKSB7XG4gICAgICAgICAgaTE4bk1lc3NhZ2VTdHJpbmcgPSAnQVBQLk1FU1NBR0VTLkVSUk9SUy5QRVJNSVNTSU9OJztcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2gobmV3IFNuYWNrYmFyRXJyb3JBY3Rpb24oaTE4bk1lc3NhZ2VTdHJpbmcpKTtcbiAgICAgIH1cbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBvcGVuVmVyc2lvbk1hbmFnZXJEaWFsb2cobm9kZTogYW55LCBmb2N1c2VkRWxlbWVudE9uQ2xvc2VTZWxlY3Rvcj86IHN0cmluZykge1xuICAgIC8vIHdvcmthcm91bmQgU2hhcmVkXG4gICAgaWYgKG5vZGUuaXNGaWxlIHx8IG5vZGUubm9kZUlkKSB7XG4gICAgICBjb25zdCBuZXdWZXJzaW9uVXBsb2FkZXJEaWFsb2dEYXRhOiBOZXdWZXJzaW9uVXBsb2FkZXJEaWFsb2dEYXRhID0ge1xuICAgICAgICBub2RlLFxuICAgICAgICBzaG93VmVyc2lvbnNPbmx5OiB0cnVlLFxuICAgICAgICB0aXRsZTogJ1ZFUlNJT04uRElBTE9HLlRJVExFJ1xuICAgICAgfTtcbiAgICAgIHRoaXMubmV3VmVyc2lvblVwbG9hZGVyU2VydmljZVxuICAgICAgICAub3BlblVwbG9hZE5ld1ZlcnNpb25EaWFsb2cobmV3VmVyc2lvblVwbG9hZGVyRGlhbG9nRGF0YSwgeyB3aWR0aDogJzYzMHB4Jywgcm9sZTogJ2RpYWxvZycgfSwgZm9jdXNlZEVsZW1lbnRPbkNsb3NlU2VsZWN0b3IpXG4gICAgICAgIC5zdWJzY3JpYmUoe1xuICAgICAgICAgIG5leHQ6IChuZXdWZXJzaW9uVXBsb2FkZXJEYXRhOiBOZXdWZXJzaW9uVXBsb2FkZXJEYXRhKSA9PiB7XG4gICAgICAgICAgICBzd2l0Y2ggKG5ld1ZlcnNpb25VcGxvYWRlckRhdGEuYWN0aW9uKSB7XG4gICAgICAgICAgICAgIGNhc2UgTmV3VmVyc2lvblVwbG9hZGVyRGF0YUFjdGlvbi5yZWZyZXNoOlxuICAgICAgICAgICAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2gobmV3IFJlbG9hZERvY3VtZW50TGlzdEFjdGlvbigpKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgY2FzZSBOZXdWZXJzaW9uVXBsb2FkZXJEYXRhQWN0aW9uLnZpZXc6XG4gICAgICAgICAgICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChcbiAgICAgICAgICAgICAgICAgIG5ldyBWaWV3Tm9kZVZlcnNpb25BY3Rpb24obm9kZS5pZCwgbmV3VmVyc2lvblVwbG9hZGVyRGF0YS52ZXJzaW9uSWQsIHtcbiAgICAgICAgICAgICAgICAgICAgbG9jYXRpb246IHRoaXMucm91dGVyLnVybFxuICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2gobmV3IFNuYWNrYmFyRXJyb3JBY3Rpb24oJ0FQUC5NRVNTQUdFUy5FUlJPUlMuUEVSTUlTU0lPTicpKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIG9wZW5Bc3BlY3RMaXN0RGlhbG9nKG5vZGU6IGFueSwgZm9jdXNlZEVsZW1lbnRPbkNsb3NlU2VsZWN0b3I/OiBzdHJpbmcpIHtcbiAgICAvLyB3b3JrYXJvdW5kIFNoYXJlZFxuICAgIGlmIChub2RlLmlzRmlsZSB8fCBub2RlLmlkKSB7XG4gICAgICB0aGlzLm5vZGVBc3BlY3RTZXJ2aWNlLnVwZGF0ZU5vZGVBc3BlY3RzKG5vZGUuaWQsIGZvY3VzZWRFbGVtZW50T25DbG9zZVNlbGVjdG9yKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChuZXcgU25hY2tiYXJFcnJvckFjdGlvbignQVBQLk1FU1NBR0VTLkVSUk9SUy5QRVJNSVNTSU9OJykpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgdW5kb01vdmVOb2Rlcyhtb3ZlUmVzcG9uc2UsIHNlbGVjdGlvblBhcmVudElkOiBzdHJpbmcpIHtcbiAgICBjb25zdCBtb3ZlZE5vZGVzID0gbW92ZVJlc3BvbnNlPy5bJ3N1Y2NlZWRlZCddID8/IFtdO1xuICAgIGNvbnN0IHBhcnRpYWxseU1vdmVkTm9kZXMgPSBtb3ZlUmVzcG9uc2U/LlsncGFydGlhbGx5U3VjY2VlZGVkJ10gPz8gW107XG5cbiAgICBjb25zdCByZXN0b3JlRGVsZXRlZE5vZGVzQmF0Y2ggPSB0aGlzLm5vZGVBY3Rpb25zU2VydmljZS5tb3ZlRGVsZXRlZEVudHJpZXMubWFwKChmb2xkZXJFbnRyeSkgPT5cbiAgICAgIHRoaXMuY29udGVudEFwaS5yZXN0b3JlTm9kZShmb2xkZXJFbnRyeS5ub2RlSWQgfHwgZm9sZGVyRW50cnkuaWQpLnBpcGUobWFwKChub2RlKSA9PiBub2RlLmVudHJ5KSlcbiAgICApO1xuXG4gICAgemlwKC4uLnJlc3RvcmVEZWxldGVkTm9kZXNCYXRjaCwgb2YobnVsbCkpXG4gICAgICAucGlwZShcbiAgICAgICAgbWVyZ2VNYXAoKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IG5vZGVzVG9CZU1vdmVkQmFjayA9IFsuLi5wYXJ0aWFsbHlNb3ZlZE5vZGVzLCAuLi5tb3ZlZE5vZGVzXTtcblxuICAgICAgICAgIGNvbnN0IHJldmVydE1vdmVCYXRjaCA9IHRoaXMubm9kZUFjdGlvbnNTZXJ2aWNlXG4gICAgICAgICAgICAuZmxhdHRlbihub2Rlc1RvQmVNb3ZlZEJhY2spXG4gICAgICAgICAgICAuZmlsdGVyKChub2RlKSA9PiBub2RlLmVudHJ5IHx8IG5vZGUuaXRlbU1vdmVkPy5lbnRyeSlcbiAgICAgICAgICAgIC5tYXAoKG5vZGUpID0+IHtcbiAgICAgICAgICAgICAgaWYgKG5vZGUuaXRlbU1vdmVkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubm9kZUFjdGlvbnNTZXJ2aWNlLm1vdmVOb2RlQWN0aW9uKG5vZGUuaXRlbU1vdmVkLmVudHJ5LCBub2RlLmluaXRpYWxQYXJlbnRJZCk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubm9kZUFjdGlvbnNTZXJ2aWNlLm1vdmVOb2RlQWN0aW9uKG5vZGUuZW50cnksIHNlbGVjdGlvblBhcmVudElkKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICByZXR1cm4gemlwKC4uLnJldmVydE1vdmVCYXRjaCwgb2YobnVsbCkpO1xuICAgICAgICB9KVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZShcbiAgICAgICAgKCkgPT4ge1xuICAgICAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2gobmV3IFJlbG9hZERvY3VtZW50TGlzdEFjdGlvbigpKTtcbiAgICAgICAgfSxcbiAgICAgICAgKGVycm9yKSA9PiB7XG4gICAgICAgICAgbGV0IG1lc3NhZ2UgPSAnQVBQLk1FU1NBR0VTLkVSUk9SUy5HRU5FUklDJztcblxuICAgICAgICAgIGxldCBlcnJvckpzb24gPSBudWxsO1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBlcnJvckpzb24gPSBKU09OLnBhcnNlKGVycm9yLm1lc3NhZ2UpO1xuICAgICAgICAgIH0gY2F0Y2gge31cblxuICAgICAgICAgIGlmIChlcnJvckpzb24/LmVycm9yPy5zdGF0dXNDb2RlID09PSA0MDMpIHtcbiAgICAgICAgICAgIG1lc3NhZ2UgPSAnQVBQLk1FU1NBR0VTLkVSUk9SUy5QRVJNSVNTSU9OJztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKG5ldyBTbmFja2JhckVycm9yQWN0aW9uKG1lc3NhZ2UpKTtcbiAgICAgICAgfVxuICAgICAgKTtcbiAgfVxuXG4gIGRlbGV0ZU5vZGVzKGl0ZW1zOiBOb2RlRW50cnlbXSk6IHZvaWQge1xuICAgIGNvbnN0IGJhdGNoOiBPYnNlcnZhYmxlPERlbGV0ZWROb2RlSW5mbz5bXSA9IFtdO1xuXG4gICAgaXRlbXMuZm9yRWFjaCgobm9kZSkgPT4ge1xuICAgICAgYmF0Y2gucHVzaCh0aGlzLmRlbGV0ZU5vZGUobm9kZSkpO1xuICAgIH0pO1xuXG4gICAgZm9ya0pvaW4oLi4uYmF0Y2gpLnN1YnNjcmliZSgoZGF0YTogRGVsZXRlZE5vZGVJbmZvW10pID0+IHtcbiAgICAgIGNvbnN0IHN0YXR1cyA9IHRoaXMucHJvY2Vzc1N0YXR1cyhkYXRhKTtcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSB0aGlzLmdldERlbGV0ZU1lc3NhZ2Uoc3RhdHVzKTtcblxuICAgICAgaWYgKG1lc3NhZ2UgJiYgc3RhdHVzLnNvbWVTdWNjZWVkZWQpIHtcbiAgICAgICAgbWVzc2FnZS51c2VyQWN0aW9uID0gbmV3IFNuYWNrYmFyVXNlckFjdGlvbignQVBQLkFDVElPTlMuVU5ETycsIG5ldyBVbmRvRGVsZXRlTm9kZXNBY3Rpb24oWy4uLnN0YXR1cy5zdWNjZXNzXSkpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKG1lc3NhZ2UpO1xuXG4gICAgICBpZiAoc3RhdHVzLnNvbWVTdWNjZWVkZWQpIHtcbiAgICAgICAgdGhpcy5hcHBIb29rU2VydmljZS5ub2Rlc0RlbGV0ZWQubmV4dCgpO1xuICAgICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKG5ldyBSZWxvYWREb2N1bWVudExpc3RBY3Rpb24oKSk7XG4gICAgICB9XG4gICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKG5ldyBTaG93TG9hZGVyQWN0aW9uKGZhbHNlKSk7XG4gICAgfSk7XG4gIH1cblxuICB1bmRvRGVsZXRlTm9kZXMoaXRlbXM6IERlbGV0ZWROb2RlSW5mb1tdKTogdm9pZCB7XG4gICAgY29uc3QgYmF0Y2g6IE9ic2VydmFibGU8RGVsZXRlZE5vZGVJbmZvPltdID0gW107XG5cbiAgICBpdGVtcy5mb3JFYWNoKChpdGVtKSA9PiB7XG4gICAgICBiYXRjaC5wdXNoKHRoaXMudW5kb0RlbGV0ZU5vZGUoaXRlbSkpO1xuICAgIH0pO1xuXG4gICAgZm9ya0pvaW4oLi4uYmF0Y2gpLnN1YnNjcmliZSgoZGF0YSkgPT4ge1xuICAgICAgY29uc3QgcHJvY2Vzc2VkRGF0YSA9IHRoaXMucHJvY2Vzc1N0YXR1cyhkYXRhKTtcblxuICAgICAgaWYgKHByb2Nlc3NlZERhdGEuZmFpbC5sZW5ndGgpIHtcbiAgICAgICAgY29uc3QgbWVzc2FnZSA9IHRoaXMuZ2V0VW5kb0RlbGV0ZU1lc3NhZ2UocHJvY2Vzc2VkRGF0YSk7XG4gICAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2gobWVzc2FnZSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChwcm9jZXNzZWREYXRhLnNvbWVTdWNjZWVkZWQpIHtcbiAgICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChuZXcgUmVsb2FkRG9jdW1lbnRMaXN0QWN0aW9uKCkpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSB1bmRvRGVsZXRlTm9kZShpdGVtOiBEZWxldGVkTm9kZUluZm8pOiBPYnNlcnZhYmxlPERlbGV0ZWROb2RlSW5mbz4ge1xuICAgIGNvbnN0IHsgaWQsIG5hbWUgfSA9IGl0ZW07XG5cbiAgICByZXR1cm4gdGhpcy5jb250ZW50QXBpLnJlc3RvcmVOb2RlKGlkKS5waXBlKFxuICAgICAgbWFwKCgpID0+ICh7XG4gICAgICAgIGlkLFxuICAgICAgICBuYW1lLFxuICAgICAgICBzdGF0dXM6IDFcbiAgICAgIH0pKSxcbiAgICAgIGNhdGNoRXJyb3IoKCkgPT5cbiAgICAgICAgb2Yoe1xuICAgICAgICAgIGlkLFxuICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgc3RhdHVzOiAwXG4gICAgICAgIH0pXG4gICAgICApXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0VW5kb0RlbGV0ZU1lc3NhZ2Uoc3RhdHVzOiBEZWxldGVTdGF0dXMpOiBTbmFja2JhckFjdGlvbiB7XG4gICAgaWYgKHN0YXR1cy5zb21lRmFpbGVkICYmICFzdGF0dXMub25lRmFpbGVkKSB7XG4gICAgICByZXR1cm4gbmV3IFNuYWNrYmFyRXJyb3JBY3Rpb24oJ0FQUC5NRVNTQUdFUy5FUlJPUlMuTk9ERV9SRVNUT1JFX1BMVVJBTCcsIHsgbnVtYmVyOiBzdGF0dXMuZmFpbC5sZW5ndGggfSk7XG4gICAgfVxuXG4gICAgaWYgKHN0YXR1cy5vbmVGYWlsZWQpIHtcbiAgICAgIHJldHVybiBuZXcgU25hY2tiYXJFcnJvckFjdGlvbignQVBQLk1FU1NBR0VTLkVSUk9SUy5OT0RFX1JFU1RPUkUnLCB7XG4gICAgICAgIG5hbWU6IHN0YXR1cy5mYWlsWzBdLm5hbWVcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcHJpdmF0ZSByZXN0b3JlTm9kZShub2RlOiBOb2RlRW50cnkpOiBPYnNlcnZhYmxlPFJlc3RvcmVkTm9kZT4ge1xuICAgIGNvbnN0IHsgZW50cnkgfSA9IG5vZGU7XG5cbiAgICByZXR1cm4gdGhpcy5jb250ZW50QXBpLnJlc3RvcmVOb2RlKGVudHJ5LmlkKS5waXBlKFxuICAgICAgbWFwKCgpID0+ICh7XG4gICAgICAgIHN0YXR1czogMSxcbiAgICAgICAgZW50cnlcbiAgICAgIH0pKSxcbiAgICAgIGNhdGNoRXJyb3IoKGVycm9yKSA9PiB7XG4gICAgICAgIGNvbnN0IHsgc3RhdHVzQ29kZSB9ID0gSlNPTi5wYXJzZShlcnJvci5tZXNzYWdlKS5lcnJvcjtcblxuICAgICAgICByZXR1cm4gb2Yoe1xuICAgICAgICAgIHN0YXR1czogMCxcbiAgICAgICAgICBzdGF0dXNDb2RlLFxuICAgICAgICAgIGVudHJ5XG4gICAgICAgIH0pO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBwdXJnZU5vZGVzKHNlbGVjdGlvbjogTm9kZUluZm9bXSA9IFtdKSB7XG4gICAgaWYgKCFzZWxlY3Rpb24ubGVuZ3RoKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgYmF0Y2ggPSBzZWxlY3Rpb24ubWFwKChub2RlKSA9PiB0aGlzLnB1cmdlRGVsZXRlZE5vZGUobm9kZSkpO1xuXG4gICAgZm9ya0pvaW4oYmF0Y2gpLnN1YnNjcmliZSgocHVyZ2VkTm9kZXMpID0+IHtcbiAgICAgIGNvbnN0IHN0YXR1cyA9IHRoaXMucHJvY2Vzc1N0YXR1cyhwdXJnZWROb2Rlcyk7XG5cbiAgICAgIGlmIChzdGF0dXMuc3VjY2Vzcy5sZW5ndGgpIHtcbiAgICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChuZXcgUmVsb2FkRG9jdW1lbnRMaXN0QWN0aW9uKCkpO1xuICAgICAgfVxuICAgICAgY29uc3QgbWVzc2FnZSA9IHRoaXMuZ2V0UHVyZ2VNZXNzYWdlKHN0YXR1cyk7XG4gICAgICBpZiAobWVzc2FnZSkge1xuICAgICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKG1lc3NhZ2UpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBwdXJnZURlbGV0ZWROb2RlKG5vZGU6IE5vZGVJbmZvKTogT2JzZXJ2YWJsZTxEZWxldGVkTm9kZUluZm8+IHtcbiAgICBjb25zdCB7IGlkLCBuYW1lIH0gPSBub2RlO1xuXG4gICAgcmV0dXJuIHRoaXMuY29udGVudEFwaS5wdXJnZURlbGV0ZWROb2RlKGlkKS5waXBlKFxuICAgICAgbWFwKCgpID0+ICh7XG4gICAgICAgIHN0YXR1czogMSxcbiAgICAgICAgaWQsXG4gICAgICAgIG5hbWVcbiAgICAgIH0pKSxcbiAgICAgIGNhdGNoRXJyb3IoKCkgPT5cbiAgICAgICAgb2Yoe1xuICAgICAgICAgIHN0YXR1czogMCxcbiAgICAgICAgICBpZCxcbiAgICAgICAgICBuYW1lXG4gICAgICAgIH0pXG4gICAgICApXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgcHJvY2Vzc1N0YXR1cyhkYXRhOiBBcnJheTx7IHN0YXR1czogbnVtYmVyIH0+ID0gW10pOiBEZWxldGVTdGF0dXMge1xuICAgIGNvbnN0IHN0YXR1cyA9IHtcbiAgICAgIGZhaWw6IFtdLFxuICAgICAgc3VjY2VzczogW10sXG4gICAgICBnZXQgc29tZUZhaWxlZCgpIHtcbiAgICAgICAgcmV0dXJuICEhdGhpcy5mYWlsLmxlbmd0aDtcbiAgICAgIH0sXG4gICAgICBnZXQgc29tZVN1Y2NlZWRlZCgpIHtcbiAgICAgICAgcmV0dXJuICEhdGhpcy5zdWNjZXNzLmxlbmd0aDtcbiAgICAgIH0sXG4gICAgICBnZXQgb25lRmFpbGVkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5mYWlsLmxlbmd0aCA9PT0gMTtcbiAgICAgIH0sXG4gICAgICBnZXQgb25lU3VjY2VlZGVkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zdWNjZXNzLmxlbmd0aCA9PT0gMTtcbiAgICAgIH0sXG4gICAgICBnZXQgYWxsU3VjY2VlZGVkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zb21lU3VjY2VlZGVkICYmICF0aGlzLnNvbWVGYWlsZWQ7XG4gICAgICB9LFxuICAgICAgZ2V0IGFsbEZhaWxlZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc29tZUZhaWxlZCAmJiAhdGhpcy5zb21lU3VjY2VlZGVkO1xuICAgICAgfSxcbiAgICAgIHJlc2V0KCkge1xuICAgICAgICB0aGlzLmZhaWwgPSBbXTtcbiAgICAgICAgdGhpcy5zdWNjZXNzID0gW107XG4gICAgICB9XG4gICAgfTtcblxuICAgIHJldHVybiBkYXRhLnJlZHVjZSgoYWNjLCBub2RlKSA9PiB7XG4gICAgICBpZiAobm9kZS5zdGF0dXMpIHtcbiAgICAgICAgYWNjLnN1Y2Nlc3MucHVzaChub2RlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGFjYy5mYWlsLnB1c2gobm9kZSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBhY2M7XG4gICAgfSwgc3RhdHVzKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0UHVyZ2VNZXNzYWdlKHN0YXR1czogRGVsZXRlU3RhdHVzKTogU25hY2tiYXJBY3Rpb24ge1xuICAgIGlmIChzdGF0dXMub25lU3VjY2VlZGVkICYmIHN0YXR1cy5zb21lRmFpbGVkICYmICFzdGF0dXMub25lRmFpbGVkKSB7XG4gICAgICByZXR1cm4gbmV3IFNuYWNrYmFyV2FybmluZ0FjdGlvbignQVBQLk1FU1NBR0VTLklORk8uVFJBU0guTk9ERVNfUFVSR0UuUEFSVElBTF9TSU5HVUxBUicsIHtcbiAgICAgICAgbmFtZTogc3RhdHVzLnN1Y2Nlc3NbMF0ubmFtZSxcbiAgICAgICAgZmFpbGVkOiBzdGF0dXMuZmFpbC5sZW5ndGhcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmIChzdGF0dXMuc29tZVN1Y2NlZWRlZCAmJiAhc3RhdHVzLm9uZVN1Y2NlZWRlZCAmJiBzdGF0dXMuc29tZUZhaWxlZCkge1xuICAgICAgcmV0dXJuIG5ldyBTbmFja2Jhcldhcm5pbmdBY3Rpb24oJ0FQUC5NRVNTQUdFUy5JTkZPLlRSQVNILk5PREVTX1BVUkdFLlBBUlRJQUxfUExVUkFMJywge1xuICAgICAgICBudW1iZXI6IHN0YXR1cy5zdWNjZXNzLmxlbmd0aCxcbiAgICAgICAgZmFpbGVkOiBzdGF0dXMuZmFpbC5sZW5ndGhcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmIChzdGF0dXMub25lU3VjY2VlZGVkKSB7XG4gICAgICByZXR1cm4gbmV3IFNuYWNrYmFySW5mb0FjdGlvbignQVBQLk1FU1NBR0VTLklORk8uVFJBU0guTk9ERVNfUFVSR0UuU0lOR1VMQVInLCB7IG5hbWU6IHN0YXR1cy5zdWNjZXNzWzBdLm5hbWUgfSk7XG4gICAgfVxuXG4gICAgaWYgKHN0YXR1cy5vbmVGYWlsZWQpIHtcbiAgICAgIHJldHVybiBuZXcgU25hY2tiYXJFcnJvckFjdGlvbignQVBQLk1FU1NBR0VTLkVSUk9SUy5UUkFTSC5OT0RFU19QVVJHRS5TSU5HVUxBUicsIHsgbmFtZTogc3RhdHVzLmZhaWxbMF0ubmFtZSB9KTtcbiAgICB9XG5cbiAgICBpZiAoc3RhdHVzLmFsbFN1Y2NlZWRlZCkge1xuICAgICAgcmV0dXJuIG5ldyBTbmFja2JhckluZm9BY3Rpb24oJ0FQUC5NRVNTQUdFUy5JTkZPLlRSQVNILk5PREVTX1BVUkdFLlBMVVJBTCcsIHsgbnVtYmVyOiBzdGF0dXMuc3VjY2Vzcy5sZW5ndGggfSk7XG4gICAgfVxuXG4gICAgaWYgKHN0YXR1cy5hbGxGYWlsZWQpIHtcbiAgICAgIHJldHVybiBuZXcgU25hY2tiYXJFcnJvckFjdGlvbignQVBQLk1FU1NBR0VTLkVSUk9SUy5UUkFTSC5OT0RFU19QVVJHRS5QTFVSQUwnLCB7IG51bWJlcjogc3RhdHVzLmZhaWwubGVuZ3RoIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcHJpdmF0ZSBzaG93UmVzdG9yZU5vdGlmaWNhdGlvbihzdGF0dXM6IERlbGV0ZVN0YXR1cyk6IHZvaWQge1xuICAgIGNvbnN0IG1lc3NhZ2UgPSB0aGlzLmdldFJlc3RvcmVNZXNzYWdlKHN0YXR1cyk7XG5cbiAgICBpZiAobWVzc2FnZSkge1xuICAgICAgaWYgKHN0YXR1cy5vbmVTdWNjZWVkZWQgJiYgIXN0YXR1cy5zb21lRmFpbGVkKSB7XG4gICAgICAgIGNvbnN0IGlzU2l0ZSA9IHRoaXMuaXNTaXRlKHN0YXR1cy5zdWNjZXNzWzBdLmVudHJ5KTtcbiAgICAgICAgY29uc3QgcGF0aDogUGF0aEluZm8gPSBzdGF0dXMuc3VjY2Vzc1swXS5lbnRyeS5wYXRoO1xuICAgICAgICBjb25zdCBwYXJlbnQgPSBwYXRoLmVsZW1lbnRzW3BhdGguZWxlbWVudHMubGVuZ3RoIC0gMV07XG4gICAgICAgIGNvbnN0IHJvdXRlID0gaXNTaXRlID8gWycvbGlicmFyaWVzJywgcGFyZW50LmlkXSA6IFsnL3BlcnNvbmFsLWZpbGVzJywgcGFyZW50LmlkXTtcblxuICAgICAgICBsZXQgbmF2aWdhdGU7XG5cbiAgICAgICAgaWYgKHRoaXMuaXNMaWJyYXJ5Q29udGVudChwYXRoKSkge1xuICAgICAgICAgIG5hdmlnYXRlID0gbmV3IE5hdmlnYXRlVG9QYXJlbnRGb2xkZXIoc3RhdHVzLnN1Y2Nlc3NbMF0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG5hdmlnYXRlID0gbmV3IE5hdmlnYXRlUm91dGVBY3Rpb24ocm91dGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgbWVzc2FnZS51c2VyQWN0aW9uID0gbmV3IFNuYWNrYmFyVXNlckFjdGlvbignQVBQLkFDVElPTlMuVklFVycsIG5hdmlnYXRlKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChtZXNzYWdlKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGlzU2l0ZShlbnRyeTogTm9kZSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBlbnRyeS5ub2RlVHlwZSA9PT0gJ3N0OnNpdGUnO1xuICB9XG5cbiAgcHJpdmF0ZSBpc0xpYnJhcnlDb250ZW50KHBhdGg6IFBhdGhJbmZvKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHBhdGggJiYgcGF0aC5lbGVtZW50cy5sZW5ndGggPj0gMiAmJiBwYXRoLmVsZW1lbnRzWzFdLm5hbWUgPT09ICdTaXRlcyc7XG4gIH1cblxuICBwcml2YXRlIGdldFJlc3RvcmVNZXNzYWdlKHN0YXR1czogRGVsZXRlU3RhdHVzKTogU25hY2tiYXJBY3Rpb24ge1xuICAgIGlmIChzdGF0dXMuc29tZUZhaWxlZCAmJiAhc3RhdHVzLm9uZUZhaWxlZCkge1xuICAgICAgcmV0dXJuIG5ldyBTbmFja2JhckVycm9yQWN0aW9uKCdBUFAuTUVTU0FHRVMuRVJST1JTLlRSQVNILk5PREVTX1JFU1RPUkUuUEFSVElBTF9QTFVSQUwnLCB7XG4gICAgICAgIG51bWJlcjogc3RhdHVzLmZhaWwubGVuZ3RoXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAoc3RhdHVzLm9uZUZhaWxlZCAmJiBzdGF0dXMuZmFpbFswXS5zdGF0dXNDb2RlKSB7XG4gICAgICBpZiAoc3RhdHVzLmZhaWxbMF0uc3RhdHVzQ29kZSA9PT0gNDA5KSB7XG4gICAgICAgIHJldHVybiBuZXcgU25hY2tiYXJFcnJvckFjdGlvbignQVBQLk1FU1NBR0VTLkVSUk9SUy5UUkFTSC5OT0RFU19SRVNUT1JFLk5PREVfRVhJU1RTJywge1xuICAgICAgICAgIG5hbWU6IHN0YXR1cy5mYWlsWzBdLmVudHJ5Lm5hbWVcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gbmV3IFNuYWNrYmFyRXJyb3JBY3Rpb24oJ0FQUC5NRVNTQUdFUy5FUlJPUlMuVFJBU0guTk9ERVNfUkVTVE9SRS5HRU5FUklDJywge1xuICAgICAgICAgIG5hbWU6IHN0YXR1cy5mYWlsWzBdLmVudHJ5Lm5hbWVcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHN0YXR1cy5vbmVGYWlsZWQgJiYgIXN0YXR1cy5mYWlsWzBdLnN0YXR1c0NvZGUpIHtcbiAgICAgIHJldHVybiBuZXcgU25hY2tiYXJFcnJvckFjdGlvbignQVBQLk1FU1NBR0VTLkVSUk9SUy5UUkFTSC5OT0RFU19SRVNUT1JFLkxPQ0FUSU9OX01JU1NJTkcnLCB7XG4gICAgICAgIG5hbWU6IHN0YXR1cy5mYWlsWzBdLmVudHJ5Lm5hbWVcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmIChzdGF0dXMuYWxsU3VjY2VlZGVkICYmICFzdGF0dXMub25lU3VjY2VlZGVkKSB7XG4gICAgICByZXR1cm4gbmV3IFNuYWNrYmFySW5mb0FjdGlvbignQVBQLk1FU1NBR0VTLklORk8uVFJBU0guTk9ERVNfUkVTVE9SRS5QTFVSQUwnKTtcbiAgICB9XG5cbiAgICBpZiAoc3RhdHVzLmFsbFN1Y2NlZWRlZCAmJiBzdGF0dXMub25lU3VjY2VlZGVkKSB7XG4gICAgICByZXR1cm4gbmV3IFNuYWNrYmFySW5mb0FjdGlvbignQVBQLk1FU1NBR0VTLklORk8uVFJBU0guTk9ERVNfUkVTVE9SRS5TSU5HVUxBUicsIHtcbiAgICAgICAgbmFtZTogc3RhdHVzLnN1Y2Nlc3NbMF0uZW50cnkubmFtZVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBwcml2YXRlIGRpZmYoc2VsZWN0aW9uOiBhbnlbXSwgbGlzdDogYW55W10sIGZyb21MaXN0ID0gdHJ1ZSk6IGFueSB7XG4gICAgY29uc3QgaWRzID0gc2VsZWN0aW9uLm1hcCgoaXRlbSkgPT4gaXRlbS5lbnRyeS5pZCk7XG5cbiAgICByZXR1cm4gbGlzdC5maWx0ZXIoKGl0ZW0pID0+IHtcbiAgICAgIGlmIChmcm9tTGlzdCkge1xuICAgICAgICByZXR1cm4gaWRzLmluY2x1ZGVzKGl0ZW0uZW50cnkuaWQpID8gaXRlbSA6IG51bGw7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gIWlkcy5pbmNsdWRlcyhpdGVtLmVudHJ5LmlkKSA/IGl0ZW0gOiBudWxsO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBkZWxldGVOb2RlKG5vZGU6IGFueSk6IE9ic2VydmFibGU8RGVsZXRlZE5vZGVJbmZvPiB7XG4gICAgY29uc3QgeyBuYW1lIH0gPSBub2RlLmVudHJ5O1xuICAgIGNvbnN0IGlkID0gbm9kZS5lbnRyeS5ub2RlSWQgfHwgbm9kZS5lbnRyeS5pZDtcblxuICAgIHJldHVybiB0aGlzLmNvbnRlbnRBcGkuZGVsZXRlTm9kZShpZCkucGlwZShcbiAgICAgIG1hcCgoKSA9PiAoe1xuICAgICAgICBpZCxcbiAgICAgICAgbmFtZSxcbiAgICAgICAgc3RhdHVzOiAxXG4gICAgICB9KSksXG4gICAgICBjYXRjaEVycm9yKCgpID0+XG4gICAgICAgIG9mKHtcbiAgICAgICAgICBpZCxcbiAgICAgICAgICBuYW1lLFxuICAgICAgICAgIHN0YXR1czogMFxuICAgICAgICB9KVxuICAgICAgKVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGdldERlbGV0ZU1lc3NhZ2Uoc3RhdHVzOiBEZWxldGVTdGF0dXMpOiBTbmFja2JhckFjdGlvbiB7XG4gICAgaWYgKHN0YXR1cy5hbGxGYWlsZWQgJiYgIXN0YXR1cy5vbmVGYWlsZWQpIHtcbiAgICAgIHJldHVybiBuZXcgU25hY2tiYXJFcnJvckFjdGlvbignQVBQLk1FU1NBR0VTLkVSUk9SUy5OT0RFX0RFTEVUSU9OX1BMVVJBTCcsIHsgbnVtYmVyOiBzdGF0dXMuZmFpbC5sZW5ndGggfSk7XG4gICAgfVxuXG4gICAgaWYgKHN0YXR1cy5hbGxTdWNjZWVkZWQgJiYgIXN0YXR1cy5vbmVTdWNjZWVkZWQpIHtcbiAgICAgIHJldHVybiBuZXcgU25hY2tiYXJJbmZvQWN0aW9uKCdBUFAuTUVTU0FHRVMuSU5GTy5OT0RFX0RFTEVUSU9OLlBMVVJBTCcsIHtcbiAgICAgICAgbnVtYmVyOiBzdGF0dXMuc3VjY2Vzcy5sZW5ndGhcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmIChzdGF0dXMuc29tZUZhaWxlZCAmJiBzdGF0dXMuc29tZVN1Y2NlZWRlZCAmJiAhc3RhdHVzLm9uZVN1Y2NlZWRlZCkge1xuICAgICAgcmV0dXJuIG5ldyBTbmFja2Jhcldhcm5pbmdBY3Rpb24oJ0FQUC5NRVNTQUdFUy5JTkZPLk5PREVfREVMRVRJT04uUEFSVElBTF9QTFVSQUwnLCB7XG4gICAgICAgIHN1Y2Nlc3M6IHN0YXR1cy5zdWNjZXNzLmxlbmd0aCxcbiAgICAgICAgZmFpbGVkOiBzdGF0dXMuZmFpbC5sZW5ndGhcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmIChzdGF0dXMuc29tZUZhaWxlZCAmJiBzdGF0dXMub25lU3VjY2VlZGVkKSB7XG4gICAgICByZXR1cm4gbmV3IFNuYWNrYmFyV2FybmluZ0FjdGlvbignQVBQLk1FU1NBR0VTLklORk8uTk9ERV9ERUxFVElPTi5QQVJUSUFMX1NJTkdVTEFSJywge1xuICAgICAgICBzdWNjZXNzOiBzdGF0dXMuc3VjY2Vzcy5sZW5ndGgsXG4gICAgICAgIGZhaWxlZDogc3RhdHVzLmZhaWwubGVuZ3RoXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAoc3RhdHVzLm9uZUZhaWxlZCAmJiAhc3RhdHVzLnNvbWVTdWNjZWVkZWQpIHtcbiAgICAgIHJldHVybiBuZXcgU25hY2tiYXJFcnJvckFjdGlvbignQVBQLk1FU1NBR0VTLkVSUk9SUy5OT0RFX0RFTEVUSU9OJywge1xuICAgICAgICBuYW1lOiBzdGF0dXMuZmFpbFswXS5uYW1lXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAoc3RhdHVzLm9uZVN1Y2NlZWRlZCAmJiAhc3RhdHVzLnNvbWVGYWlsZWQpIHtcbiAgICAgIHJldHVybiBuZXcgU25hY2tiYXJJbmZvQWN0aW9uKCdBUFAuTUVTU0FHRVMuSU5GTy5OT0RFX0RFTEVUSU9OLlNJTkdVTEFSJywgeyBuYW1lOiBzdGF0dXMuc3VjY2Vzc1swXS5uYW1lIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcHJpdmF0ZSBzaG93TW92ZU1lc3NhZ2Uobm9kZXM6IEFycmF5PE5vZGVFbnRyeT4sIGluZm86IGFueSwgbW92ZVJlc3BvbnNlPzogYW55KSB7XG4gICAgY29uc3Qgc3VjY2VlZGVkID0gbW92ZVJlc3BvbnNlPy5bJ3N1Y2NlZWRlZCddLmxlbmd0aCA/PyAwO1xuICAgIGNvbnN0IHBhcnRpYWxseVN1Y2NlZWRlZCA9IG1vdmVSZXNwb25zZT8uWydwYXJ0aWFsbHlTdWNjZWVkZWQnXS5sZW5ndGggPz8gMDtcbiAgICBjb25zdCBmYWlsdXJlcyA9IG1vdmVSZXNwb25zZT8uWydmYWlsZWQnXS5sZW5ndGggPz8gMDtcblxuICAgIGxldCBzdWNjZXNzTWVzc2FnZSA9ICcnO1xuICAgIGxldCBwYXJ0aWFsU3VjY2Vzc01lc3NhZ2UgPSAnJztcbiAgICBsZXQgZmFpbGVkTWVzc2FnZSA9ICcnO1xuICAgIGxldCBlcnJvck1lc3NhZ2UgPSAnJztcblxuICAgIGlmICh0eXBlb2YgaW5mbyA9PT0gJ3N0cmluZycpIHtcbiAgICAgIC8vIGluIGNhc2Ugb2Ygc3VjY2Vzc1xuICAgICAgaWYgKGluZm8udG9Mb3dlckNhc2UoKS5pbmRleE9mKCdzdWNjZXMnKSAhPT0gLTEpIHtcbiAgICAgICAgY29uc3QgaTE4bk1lc3NhZ2VTdHJpbmcgPSAnQVBQLk1FU1NBR0VTLklORk8uTk9ERV9NT1ZFLic7XG4gICAgICAgIGxldCBpMThNZXNzYWdlU3VmZml4ID0gJyc7XG5cbiAgICAgICAgaWYgKHN1Y2NlZWRlZCkge1xuICAgICAgICAgIGkxOE1lc3NhZ2VTdWZmaXggPSBzdWNjZWVkZWQgPT09IDEgPyAnU0lOR1VMQVInIDogJ1BMVVJBTCc7XG4gICAgICAgICAgc3VjY2Vzc01lc3NhZ2UgPSBgJHtpMThuTWVzc2FnZVN0cmluZ30ke2kxOE1lc3NhZ2VTdWZmaXh9YDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwYXJ0aWFsbHlTdWNjZWVkZWQpIHtcbiAgICAgICAgICBpMThNZXNzYWdlU3VmZml4ID0gcGFydGlhbGx5U3VjY2VlZGVkID09PSAxID8gJ1BBUlRJQUwuU0lOR1VMQVInIDogJ1BBUlRJQUwuUExVUkFMJztcbiAgICAgICAgICBwYXJ0aWFsU3VjY2Vzc01lc3NhZ2UgPSBgJHtpMThuTWVzc2FnZVN0cmluZ30ke2kxOE1lc3NhZ2VTdWZmaXh9YDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChmYWlsdXJlcykge1xuICAgICAgICAgIC8vIGlmIG1vdmluZyBmYWlsZWQgZm9yIEFMTCBub2RlcywgZW1pdCBlcnJvclxuICAgICAgICAgIGlmIChmYWlsdXJlcyA9PT0gbm9kZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICBjb25zdCBlcnJvcnMgPSB0aGlzLm5vZGVBY3Rpb25zU2VydmljZS5mbGF0dGVuKG1vdmVSZXNwb25zZVsnZmFpbGVkJ10pO1xuICAgICAgICAgICAgZXJyb3JNZXNzYWdlID0gdGhpcy5nZXRFcnJvck1lc3NhZ2UoZXJyb3JzWzBdKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaTE4TWVzc2FnZVN1ZmZpeCA9ICdQQVJUSUFMLkZBSUwnO1xuICAgICAgICAgICAgZmFpbGVkTWVzc2FnZSA9IGAke2kxOG5NZXNzYWdlU3RyaW5nfSR7aTE4TWVzc2FnZVN1ZmZpeH1gO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZXJyb3JNZXNzYWdlID0gJ0FQUC5NRVNTQUdFUy5FUlJPUlMuR0VORVJJQyc7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGVycm9yTWVzc2FnZSA9IHRoaXMuZ2V0RXJyb3JNZXNzYWdlKGluZm8pO1xuICAgIH1cblxuICAgIGNvbnN0IHVuZG8gPSBzdWNjZWVkZWQgKyBwYXJ0aWFsbHlTdWNjZWVkZWQgPiAwID8gdGhpcy50cmFuc2xhdGlvbi5pbnN0YW50KCdBUFAuQUNUSU9OUy5VTkRPJykgOiAnJztcbiAgICBmYWlsZWRNZXNzYWdlID0gZXJyb3JNZXNzYWdlID8gZXJyb3JNZXNzYWdlIDogZmFpbGVkTWVzc2FnZTtcblxuICAgIGNvbnN0IGJlZm9yZVBhcnRpYWxTdWNjZXNzTWVzc2FnZSA9IHN1Y2Nlc3NNZXNzYWdlICYmIHBhcnRpYWxTdWNjZXNzTWVzc2FnZSA/ICcgJyA6ICcnO1xuICAgIGNvbnN0IGJlZm9yZUZhaWxlZE1lc3NhZ2UgPSAoc3VjY2Vzc01lc3NhZ2UgfHwgcGFydGlhbFN1Y2Nlc3NNZXNzYWdlKSAmJiBmYWlsZWRNZXNzYWdlID8gJyAnIDogJyc7XG5cbiAgICBjb25zdCBpbml0aWFsUGFyZW50SWQgPSB0aGlzLm5vZGVBY3Rpb25zU2VydmljZS5nZXRFbnRyeVBhcmVudElkKG5vZGVzWzBdLmVudHJ5KTtcblxuICAgIGNvbnN0IG1lc3NhZ2VzID0gdGhpcy50cmFuc2xhdGlvbi5pbnN0YW50KFtzdWNjZXNzTWVzc2FnZSwgcGFydGlhbFN1Y2Nlc3NNZXNzYWdlLCBmYWlsZWRNZXNzYWdlXSwge1xuICAgICAgc3VjY2Vzczogc3VjY2VlZGVkLFxuICAgICAgZmFpbGVkOiBmYWlsdXJlcyxcbiAgICAgIHBhcnRpYWxseTogcGFydGlhbGx5U3VjY2VlZGVkXG4gICAgfSk7XG5cbiAgICAvLyBUT0RPOiByZXZpZXcgaW4gdGVybXMgb2YgaTE4blxuICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZVxuICAgICAgLm9wZW5TbmFja01lc3NhZ2VBY3Rpb24oXG4gICAgICAgIG1lc3NhZ2VzW3N1Y2Nlc3NNZXNzYWdlXSArIGJlZm9yZVBhcnRpYWxTdWNjZXNzTWVzc2FnZSArIG1lc3NhZ2VzW3BhcnRpYWxTdWNjZXNzTWVzc2FnZV0gKyBiZWZvcmVGYWlsZWRNZXNzYWdlICsgbWVzc2FnZXNbZmFpbGVkTWVzc2FnZV0sXG4gICAgICAgIHVuZG8sXG4gICAgICAgIHtcbiAgICAgICAgICBwYW5lbENsYXNzOiAnaW5mby1zbmFja2JhcidcbiAgICAgICAgfVxuICAgICAgKVxuICAgICAgLm9uQWN0aW9uKClcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4gdGhpcy51bmRvTW92ZU5vZGVzKG1vdmVSZXNwb25zZSwgaW5pdGlhbFBhcmVudElkKSk7XG4gIH1cblxuICBwcml2YXRlIGZvY3VzQWZ0ZXJDbG9zZShmb2N1c2VkRWxlbWVudFNlbGVjdG9yOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAoZm9jdXNlZEVsZW1lbnRTZWxlY3Rvcikge1xuICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcjxIVE1MRWxlbWVudD4oZm9jdXNlZEVsZW1lbnRTZWxlY3Rvcik/LmZvY3VzKCk7XG4gICAgfVxuICB9XG59XG4iXX0=
|
|
871
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGVudC1tYW5hZ2VtZW50LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hY2EtY29udGVudC9zcmMvbGliL3NlcnZpY2VzL2NvbnRlbnQtbWFuYWdlbWVudC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBc0JHO0FBRUgsT0FBTyxFQUFFLGNBQWMsRUFBRSxpQkFBaUIsRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2hHLE9BQU8sRUFJTCxlQUFlLEVBQ2YsWUFBWSxFQUNaLG1CQUFtQixFQUNuQixzQkFBc0IsRUFFdEIsd0JBQXdCLEVBQ3hCLHNCQUFzQixFQUN0QixnQkFBZ0IsRUFFaEIsbUJBQW1CLEVBQ25CLGtCQUFrQixFQUNsQixrQkFBa0IsRUFDbEIscUJBQXFCLEVBQ3JCLHFCQUFxQixFQUNyQixpQkFBaUIsRUFDakIscUJBQXFCLEVBQ3RCLE1BQU0sNEJBQTRCLENBQUM7QUFDcEMsT0FBTyxFQUNMLHNCQUFzQixFQUN0QixxQkFBcUIsRUFDckIsc0JBQXNCLEVBRXRCLDRCQUE0QixFQUU1Qix5QkFBeUIsRUFDekIsaUJBQWlCLEVBQ2pCLGVBQWUsRUFDZixvQkFBb0IsRUFDckIsTUFBTSxnQ0FBZ0MsQ0FBQztBQUN4QyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUU3RSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxTQUFTLEVBQW1CLE1BQU0sMEJBQTBCLENBQUM7QUFDdEUsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUNwQyxPQUFPLEVBQUUsUUFBUSxFQUFjLEVBQUUsRUFBRSxHQUFHLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDckQsT0FBTyxFQUFFLFVBQVUsRUFB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Q0FBQyxLQUFLLENBQUMsQ0FBQztRQUVqRixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDLGNBQWMsRUFBRSxxQkFBcUIsRUFBRSxhQUFhLENBQUMsRUFBRTtZQUNoRyxPQUFPLEVBQUUsU0FBUztZQUNsQixNQUFNLEVBQUUsUUFBUTtZQUNoQixTQUFTLEVBQUUsa0JBQWtCO1NBQzlCLENBQUMsQ0FBQztRQUVILGdDQUFnQztRQUNoQyxJQUFJLENBQUMsbUJBQW1CO2FBQ3JCLHNCQUFzQixDQUNyQixRQUFRLENBQUMsY0FBYyxDQUFDLEdBQUcsMkJBQTJCLEdBQUcsUUFBUSxDQUFDLHFCQUFxQixDQUFDLEdBQUcsbUJBQW1CLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxFQUN4SSxJQUFJLEVBQ0o7WUFDRSxVQUFVLEVBQUUsZUFBZTtTQUM1QixDQUNGO2FBQ0EsUUFBUSxFQUFFO2FBQ1YsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsWUFBWSxFQUFFLGVBQWUsQ0FBQyxDQUFDLENBQUM7SUFDeEUsQ0FBQztJQUVPLGVBQWUsQ0FBQyxzQkFBOEI7UUFDcEQsSUFBSSxzQkFBc0IsRUFBRTtZQUMxQixRQUFRLENBQUMsYUFBYSxDQUFjLHNCQUFzQixDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUM7U0FDdEU7SUFDSCxDQUFDOztxSEFoL0JVLHdCQUF3Qjt5SEFBeEIsd0JBQXdCLGNBRnZCLE1BQU07MkZBRVAsd0JBQXdCO2tCQUhwQyxVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbIi8qIVxuICogQ29weXJpZ2h0IMKpIDIwMDUtMjAyMyBIeWxhbmQgU29mdHdhcmUsIEluYy4gYW5kIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIEFsZnJlc2NvIEV4YW1wbGUgQ29udGVudCBBcHBsaWNhdGlvblxuICpcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBBbGZyZXNjbyBFeGFtcGxlIENvbnRlbnQgQXBwbGljYXRpb24uXG4gKiBJZiB0aGUgc29mdHdhcmUgd2FzIHB1cmNoYXNlZCB1bmRlciBhIHBhaWQgQWxmcmVzY28gbGljZW5zZSwgdGhlIHRlcm1zIG9mXG4gKiB0aGUgcGFpZCBsaWNlbnNlIGFncmVlbWVudCB3aWxsIHByZXZhaWwuIE90aGVyd2lzZSwgdGhlIHNvZnR3YXJlIGlzXG4gKiBwcm92aWRlZCB1bmRlciB0aGUgZm9sbG93aW5nIG9wZW4gc291cmNlIGxpY2Vuc2UgdGVybXM6XG4gKlxuICogVGhlIEFsZnJlc2NvIEV4YW1wbGUgQ29udGVudCBBcHBsaWNhdGlvbiBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XG4gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbiAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yXG4gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuICpcbiAqIFRoZSBBbGZyZXNjbyBFeGFtcGxlIENvbnRlbnQgQXBwbGljYXRpb24gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcbiAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mXG4gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGVcbiAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuICpcbiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuICogZnJvbSBIeWxhbmQgU29mdHdhcmUuIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi5cbiAqL1xuXG5pbXBvcnQgeyBBcHBIb29rU2VydmljZSwgQ29udGVudEFwaVNlcnZpY2UsIE5vZGVQZXJtaXNzaW9uU2VydmljZSB9IGZyb20gJ0BhbGZyZXNjby9hY2Etc2hhcmVkJztcbmltcG9ydCB7XG4gIEFwcFN0b3JlLFxuICBEZWxldGVkTm9kZUluZm8sXG4gIERlbGV0ZVN0YXR1cyxcbiAgZ2V0QXBwU2VsZWN0aW9uLFxuICBnZXRTaGFyZWRVcmwsXG4gIE5hdmlnYXRlUm91dGVBY3Rpb24sXG4gIE5hdmlnYXRlVG9QYXJlbnRGb2xkZXIsXG4gIE5vZGVJbmZvLFxuICBSZWxvYWREb2N1bWVudExpc3RBY3Rpb24sXG4gIFNldFNlbGVjdGVkTm9kZXNBY3Rpb24sXG4gIFNob3dMb2FkZXJBY3Rpb24sXG4gIFNuYWNrYmFyQWN0aW9uLFxuICBTbmFja2JhckVycm9yQWN0aW9uLFxuICBTbmFja2JhckluZm9BY3Rpb24sXG4gIFNuYWNrYmFyVXNlckFjdGlvbixcbiAgU25hY2tiYXJXYXJuaW5nQWN0aW9uLFxuICBVbmRvRGVsZXRlTm9kZXNBY3Rpb24sXG4gIFVubG9ja1dyaXRlQWN0aW9uLFxuICBWaWV3Tm9kZVZlcnNpb25BY3Rpb25cbn0gZnJvbSAnQGFsZnJlc2NvL2FjYS1zaGFyZWQvc3RvcmUnO1xuaW1wb3J0IHtcbiAgQ29uZmlybURpYWxvZ0NvbXBvbmVudCxcbiAgRm9sZGVyRGlhbG9nQ29tcG9uZW50LFxuICBMaWJyYXJ5RGlhbG9nQ29tcG9uZW50LFxuICBOZXdWZXJzaW9uVXBsb2FkZXJEYXRhLFxuICBOZXdWZXJzaW9uVXBsb2FkZXJEYXRhQWN0aW9uLFxuICBOZXdWZXJzaW9uVXBsb2FkZXJEaWFsb2dEYXRhLFxuICBOZXdWZXJzaW9uVXBsb2FkZXJTZXJ2aWNlLFxuICBOb2RlQXNwZWN0U2VydmljZSxcbiAgTm9kZXNBcGlTZXJ2aWNlLFxuICBTaGFyZURpYWxvZ0NvbXBvbmVudFxufSBmcm9tICdAYWxmcmVzY28vYWRmLWNvbnRlbnQtc2VydmljZXMnO1xuaW1wb3J0IHsgTm90aWZpY2F0aW9uU2VydmljZSwgVHJhbnNsYXRpb25TZXJ2aWNlIH0gZnJvbSAnQGFsZnJlc2NvL2FkZi1jb3JlJztcbmltcG9ydCB7IERlbGV0ZWROb2Rlc1BhZ2luZywgTm9kZSwgTm9kZUVudHJ5LCBQYXRoSW5mbywgU2l0ZUJvZHlDcmVhdGUsIFNpdGVFbnRyeSB9IGZyb20gJ0BhbGZyZXNjby9qcy1hcGknO1xuaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTWF0RGlhbG9nLCBNYXREaWFsb2dDb25maWcgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xuaW1wb3J0IHsgU3RvcmUgfSBmcm9tICdAbmdyeC9zdG9yZSc7XG5pbXBvcnQgeyBmb3JrSm9pbiwgT2JzZXJ2YWJsZSwgb2YsIHppcCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgY2F0Y2hFcnJvciwgbWFwLCBtZXJnZU1hcCwgdGFrZSwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgTm9kZUFjdGlvbnNTZXJ2aWNlIH0gZnJvbSAnLi9ub2RlLWFjdGlvbnMuc2VydmljZSc7XG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuXG5pbnRlcmZhY2UgUmVzdG9yZWROb2RlIHtcbiAgc3RhdHVzOiBudW1iZXI7XG4gIGVudHJ5OiBOb2RlO1xuICBzdGF0dXNDb2RlPzogbnVtYmVyO1xufVxuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBDb250ZW50TWFuYWdlbWVudFNlcnZpY2Uge1xuICBwcml2YXRlIHJlYWRvbmx5IGNyZWF0ZU1lbnVCdXR0b25TZWxlY3RvciA9ICdhcHAtdG9vbGJhci1tZW51IGJ1dHRvbltpZD1cImFwcC50b29sYmFyLmNyZWF0ZVwiXSc7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBub2Rlc0FwaVNlcnZpY2U6IE5vZGVzQXBpU2VydmljZSxcbiAgICBwcml2YXRlIHN0b3JlOiBTdG9yZTxBcHBTdG9yZT4sXG4gICAgcHJpdmF0ZSBjb250ZW50QXBpOiBDb250ZW50QXBpU2VydmljZSxcbiAgICBwcml2YXRlIHBlcm1pc3Npb246IE5vZGVQZXJtaXNzaW9uU2VydmljZSxcbiAgICBwcml2YXRlIGRpYWxvZ1JlZjogTWF0RGlhbG9nLFxuICAgIHByaXZhdGUgbm9kZUFjdGlvbnNTZXJ2aWNlOiBOb2RlQWN0aW9uc1NlcnZpY2UsXG4gICAgcHJpdmF0ZSB0cmFuc2xhdGlvbjogVHJhbnNsYXRpb25TZXJ2aWNlLFxuICAgIHByaXZhdGUgbm90aWZpY2F0aW9uU2VydmljZTogTm90aWZpY2F0aW9uU2VydmljZSxcbiAgICBwcml2YXRlIG5vZGVBc3BlY3RTZXJ2aWNlOiBOb2RlQXNwZWN0U2VydmljZSxcbiAgICBwcml2YXRlIGFwcEhvb2tTZXJ2aWNlOiBBcHBIb29rU2VydmljZSxcbiAgICBwcml2YXRlIG5ld1ZlcnNpb25VcGxvYWRlclNlcnZpY2U6IE5ld1ZlcnNpb25VcGxvYWRlclNlcnZpY2UsXG4gICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlclxuICApIHt9XG5cbiAgYWRkRmF2b3JpdGUobm9kZXM6IEFycmF5PE5vZGVFbnRyeT4pIHtcbiAgICBpZiAobm9kZXMgJiYgbm9kZXMubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5jb250ZW50QXBpLmFkZEZhdm9yaXRlKG5vZGVzKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICBjb25zdCBmYXZvcml0ZU5vZGVzID0gbm9kZXMubWFwKChub2RlKSA9PiB7XG4gICAgICAgICAgY29uc3QgbmV3Tm9kZSA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkobm9kZSkpO1xuICAgICAgICAgIG5ld05vZGUuZW50cnkuaXNGYXZvcml0ZSA9IHRydWU7XG4gICAgICAgICAgcmV0dXJuIG5ld05vZGU7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2gobmV3IFNldFNlbGVjdGVkTm9kZXNBY3Rpb24oZmF2b3JpdGVOb2RlcykpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcmVtb3ZlRmF2b3JpdGUobm9kZXM6IEFycmF5PE5vZGVFbnRyeT4pIHtcbiAgICBpZiAobm9kZXMgJiYgbm9kZXMubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5jb250ZW50QXBpLnJlbW92ZUZhdm9yaXRlKG5vZGVzKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICBjb25zdCBmYXZvcml0ZU5vZGVzID0gbm9kZXMubWFwKChub2RlKSA9PiB7XG4gICAgICAgICAgY29uc3QgbmV3Tm9kZSA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkobm9kZSkpO1xuICAgICAgICAgIG5ld05vZGUuZW50cnkuaXNGYXZvcml0ZSA9IGZhbHNlO1xuICAgICAgICAgIHJldHVybiBuZXdOb2RlO1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKG5ldyBTZXRTZWxlY3RlZE5vZGVzQWN0aW9uKGZhdm9yaXRlTm9kZXMpKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIG1hbmFnZVZlcnNpb25zKG5vZGU6IGFueSwgZm9jdXNlZEVsZW1lbnRPbkNsb3NlU2VsZWN0b3I/OiBzdHJpbmcpIHtcbiAgICBpZiAobm9kZT8uZW50cnkpIHtcbiAgICAgIC8vIHNoYXJlZCBhbmQgZmF2b3JpdGVcbiAgICAgIGNvbnN0IGlkID0gbm9kZS5lbnRyeS5ub2RlSWQgfHwgKG5vZGUgYXMgYW55KS5lbnRyeS5ndWlkO1xuXG4gICAgICBpZiAoaWQpIHtcbiAgICAgICAgdGhpcy5jb250ZW50QXBpLmdldE5vZGVJbmZvKGlkKS5zdWJzY3JpYmUoKGVudHJ5KSA9PiB7XG4gICAgICAgICAgdGhpcy5vcGVuVmVyc2lvbk1hbmFnZXJEaWFsb2coZW50cnksIGZvY3VzZWRFbGVtZW50T25DbG9zZVNlbGVjdG9yKTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLm9wZW5WZXJzaW9uTWFuYWdlckRpYWxvZyhub2RlLmVudHJ5LCBmb2N1c2VkRWxlbWVudE9uQ2xvc2VTZWxlY3Rvcik7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgbWFuYWdlQXNwZWN0cyhub2RlOiBhbnksIGZvY3VzZWRFbGVtZW50T25DbG9zZVNlbGVjdG9yPzogc3RyaW5nKSB7XG4gICAgaWYgKG5vZGU/LmVudHJ5KSB7XG4gICAgICAvLyBzaGFyZWQgYW5kIGZhdm9yaXRlXG4gICAgICBjb25zdCBpZCA9IG5vZGUuZW50cnkubm9kZUlkIHx8IChub2RlIGFzIGFueSkuZW50cnkuZ3VpZDtcblxuICAgICAgaWYgKGlkKSB7XG4gICAgICAgIHRoaXMuY29udGVudEFwaS5nZXROb2RlSW5mbyhpZCkuc3Vic2NyaWJlKChlbnRyeSkgPT4ge1xuICAgICAgICAgIHRoaXMub3BlbkFzcGVjdExpc3REaWFsb2coZW50cnksIGZvY3VzZWRFbGVtZW50T25DbG9zZVNlbGVjdG9yKTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLm9wZW5Bc3BlY3RMaXN0RGlhbG9nKG5vZGUuZW50cnksIGZvY3VzZWRFbGVtZW50T25DbG9zZVNlbGVjdG9yKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB2ZXJzaW9uVXBkYXRlRGlhbG9nKG5vZGUsIGZpbGUpIHtcbiAgICB0aGlzLmNvbnRlbnRBcGkuZ2V0Tm9kZVZlcnNpb25zKG5vZGUuaWQpLnN1YnNjcmliZSgoeyBsaXN0IH0pID0+IHtcbiAgICAgIGNvbnN0IG5ld1ZlcnNpb25VcGxvYWRlckRpYWxvZ0RhdGE6IE5ld1ZlcnNpb25VcGxvYWRlckRpYWxvZ0RhdGEgPSB7XG4gICAgICAgIG5vZGUsXG4gICAgICAgIGZpbGUsXG4gICAgICAgIGN1cnJlbnRWZXJzaW9uOiBsaXN0LmVudHJpZXNbMF0uZW50cnksXG4gICAgICAgIHRpdGxlOiAnVkVSU0lPTi5ESUFMT0cuVElUTEUnXG4gICAgICB9O1xuICAgICAgY29uc3QgZGlhbG9nQ29uZmlnOiBNYXREaWFsb2dDb25maWcgPSB7IHdpZHRoOiAnNjAwcHgnIH07XG4gICAgICB0aGlzLm5ld1ZlcnNpb25VcGxvYWRlclNlcnZpY2Uub3BlblVwbG9hZE5ld1ZlcnNpb25EaWFsb2cobmV3VmVyc2lvblVwbG9hZGVyRGlhbG9nRGF0YSwgZGlhbG9nQ29uZmlnKS5zdWJzY3JpYmUoXG4gICAgICAgIChkYXRhOiBOZXdWZXJzaW9uVXBsb2FkZXJEYXRhKSA9PiB7XG4gICAgICAgICAgaWYgKGRhdGEuYWN0aW9uID09PSBOZXdWZXJzaW9uVXBsb2FkZXJEYXRhQWN0aW9uLnVwbG9hZCkge1xuICAgICAgICAgICAgaWYgKGRhdGEubmV3VmVyc2lvbi52YWx1ZS5lbnRyeS5wcm9wZXJ0aWVzWydjbTpsb2NrVHlwZSddID09PSAnV1JJVEVfTE9DSycpIHtcbiAgICAgICAgICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChuZXcgVW5sb2NrV3JpdGVBY3Rpb24oZGF0YS5uZXdWZXJzaW9uLnZhbHVlKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICAoZXJyb3IpID0+IHRoaXMuc3RvcmUuZGlzcGF0Y2gobmV3IFNuYWNrYmFyRXJyb3JBY3Rpb24oZXJyb3IpKVxuICAgICAgKTtcbiAgICB9KTtcbiAgfVxuXG4gIHNoYXJlTm9kZShub2RlOiBhbnksIGZvY3VzZWRFbGVtZW50T25DbG9zZVNlbGVjdG9yPzogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKG5vZGU/LmVudHJ5KSB7XG4gICAgICAvLyBzaGFyZWQgYW5kIGZhdm9yaXRlXG4gICAgICBjb25zdCBpZCA9IG5vZGUuZW50cnkubm9kZUlkIHx8IChub2RlIGFzIGFueSkuZW50cnkuZ3VpZDtcblxuICAgICAgaWYgKGlkKSB7XG4gICAgICAgIHRoaXMuY29udGVudEFwaS5nZXROb2RlSW5mbyhpZCkuc3Vic2NyaWJlKChlbnRyeSkgPT4ge1xuICAgICAgICAgIHRoaXMub3BlblNoYXJlTGlua0RpYWxvZyh7IGVudHJ5IH0sIGZvY3VzZWRFbGVtZW50T25DbG9zZVNlbGVjdG9yKTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLm9wZW5TaGFyZUxpbmtEaWFsb2cobm9kZSwgZm9jdXNlZEVsZW1lbnRPbkNsb3NlU2VsZWN0b3IpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIG9wZW5TaGFyZUxpbmtEaWFsb2cobm9kZSwgZm9jdXNlZEVsZW1lbnRPbkNsb3NlU2VsZWN0b3I/OiBzdHJpbmcpIHtcbiAgICB0aGlzLnN0b3JlXG4gICAgICAuc2VsZWN0KGdldFNoYXJlZFVybClcbiAgICAgIC5waXBlKHRha2UoMSkpXG4gICAgICAuc3Vic2NyaWJlKChiYXNlU2hhcmVVcmwpID0+IHtcbiAgICAgICAgdGhpcy5kaWFsb2dSZWZcbiAgICAgICAgICAub3BlbihTaGFyZURpYWxvZ0NvbXBvbmVudCwge1xuICAgICAgICAgICAgcmVzdG9yZUZvY3VzOiB0cnVlLFxuICAgICAgICAgICAgd2lkdGg6ICc2MDBweCcsXG4gICAgICAgICAgICBwYW5lbENsYXNzOiAnYWRmLXNoYXJlLWxpbmstZGlhbG9nJyxcbiAgICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgICAgbm9kZSxcbiAgICAgICAgICAgICAgYmFzZVNoYXJlVXJsXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSlcbiAgICAgICAgICAuYWZ0ZXJDbG9zZWQoKVxuICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChuZXcgU2V0U2VsZWN0ZWROb2Rlc0FjdGlvbihbbm9kZV0pKTtcbiAgICAgICAgICAgIHRoaXMuYXBwSG9va1NlcnZpY2UubGlua3NVbnNoYXJlZC5uZXh0KCk7XG4gICAgICAgICAgICB0aGlzLmZvY3VzQWZ0ZXJDbG9zZShmb2N1c2VkRWxlbWVudE9uQ2xvc2VTZWxlY3Rvcik7XG4gICAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgfVxuXG4gIGNyZWF0ZUZvbGRlcihwYXJlbnROb2RlSWQ6IHN0cmluZykge1xuICAgIGNvbnN0IGRpYWxvZ0luc3RhbmNlID0gdGhpcy5kaWFsb2dSZWYub3BlbihGb2xkZXJEaWFsb2dDb21wb25lbnQsIHtcbiAgICAgIGRhdGE6IHtcbiAgICAgICAgcGFyZW50Tm9kZUlkLFxuICAgICAgICBjcmVhdGVUaXRsZTogdW5kZWZpbmVkLFxuICAgICAgICBub2RlVHlwZTogJ2NtOmZvbGRlcidcbiAgICAgIH0sXG4gICAgICB3aWR0aDogJzQwMHB4JyxcbiAgICAgIHJvbGU6ICdkaWFsb2cnXG4gICAgfSk7XG5cbiAgICBkaWFsb2dJbnN0YW5jZS5jb21wb25lbnRJbnN0YW5jZS5lcnJvci5zdWJzY3JpYmUoKG1lc3NhZ2U6IHN0cmluZykgPT4ge1xuICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChuZXcgU25hY2tiYXJFcnJvckFjdGlvbihtZXNzYWdlKSk7XG4gICAgfSk7XG5cbiAgICBkaWFsb2dJbnN0YW5jZS5hZnRlckNsb3NlZCgpLnN1YnNjcmliZSgobm9kZSkgPT4ge1xuICAgICAgaWYgKG5vZGUpIHtcbiAgICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChuZXcgUmVsb2FkRG9jdW1lbnRMaXN0QWN0aW9uKCkpO1xuICAgICAgfVxuICAgICAgdGhpcy5mb2N1c0FmdGVyQ2xvc2UodGhpcy5jcmVhdGVNZW51QnV0dG9uU2VsZWN0b3IpO1xuICAgIH0pO1xuICB9XG5cbiAgZWRpdEZvbGRlcihmb2xkZXI6IE5vZGVFbnRyeSwgZm9jdXNlZEVsZW1lbnRPbkNsb3NlU2VsZWN0b3I/OiBzdHJpbmcpIHtcbiAgICBpZiAoIWZvbGRlcikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGRpYWxvZyA9IHRoaXMuZGlhbG9nUmVmLm9wZW4oRm9sZGVyRGlhbG9nQ29tcG9uZW50LCB7XG4gICAgICBkYXRhOiB7XG4gICAgICAgIGZvbGRlcjogZm9sZGVyLmVudHJ5XG4gICAgICB9LFxuICAgICAgd2lkdGg6ICc0MDBweCdcbiAgICB9KTtcblxuICAgIGRpYWxvZy5jb21wb25lbnRJbnN0YW5jZS5lcnJvci5zdWJzY3JpYmUoKG1lc3NhZ2U6IHN0cmluZykgPT4ge1xuICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChuZXcgU25hY2tiYXJFcnJvckFjdGlvbihtZXNzYWdlKSk7XG4gICAgfSk7XG5cbiAgICBkaWFsb2cuYWZ0ZXJDbG9zZWQoKS5zdWJzY3JpYmUoKG5vZGUpID0+IHtcbiAgICAgIGlmIChub2RlKSB7XG4gICAgICAgIHRoaXMubm9kZXNBcGlTZXJ2aWNlLm5vZGVVcGRhdGVkLm5leHQobm9kZSk7XG4gICAgICB9XG4gICAgICB0aGlzLmZvY3VzQWZ0ZXJDbG9zZShmb2N1c2VkRWxlbWVudE9uQ2xvc2VTZWxlY3Rvcik7XG4gICAgfSk7XG4gIH1cblxuICBjcmVhdGVMaWJyYXJ5KCk6IE9ic2VydmFibGU8c3RyaW5nPiB7XG4gICAgY29uc3QgZGlhbG9nSW5zdGFuY2UgPSB0aGlzLmRpYWxvZ1JlZi5vcGVuKExpYnJhcnlEaWFsb2dDb21wb25lbnQsIHtcbiAgICAgIHdpZHRoOiAnNDAwcHgnXG4gICAgfSk7XG5cbiAgICBkaWFsb2dJbnN0YW5jZS5jb21wb25lbnRJbnN0YW5jZS5lcnJvci5zdWJzY3JpYmUoKG1lc3NhZ2U6IHN0cmluZykgPT4ge1xuICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChuZXcgU25hY2tiYXJFcnJvckFjdGlvbihtZXNzYWdlKSk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gZGlhbG9nSW5zdGFuY2UuYWZ0ZXJDbG9zZWQoKS5waXBlKFxuICAgICAgdGFwKChub2RlKSA9PiB7XG4gICAgICAgIGlmIChub2RlKSB7XG4gICAgICAgICAgdGhpcy5hcHBIb29rU2VydmljZS5saWJyYXJ5Q3JlYXRlZC5uZXh0KG5vZGUpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZm9jdXNBZnRlckNsb3NlKHRoaXMuY3JlYXRlTWVudUJ1dHRvblNlbGVjdG9yKTtcbiAgICAgIH0pLFxuICAgICAgbWFwKChub2RlOiBTaXRlRW50cnkpID0+IHtcbiAgICAgICAgaWYgKG5vZGU/LmVudHJ5Py5ndWlkKSB7XG4gICAgICAgICAgcmV0dXJuIG5vZGUuZW50cnkuZ3VpZDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIGRlbGV0ZUxpYnJhcnkoaWQ6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuY29udGVudEFwaS5kZWxldGVTaXRlKGlkKS5zdWJzY3JpYmUoXG4gICAgICAoKSA9PiB7XG4gICAgICAgIHRoaXMuYXBwSG9va1NlcnZpY2UubGlicmFyeURlbGV0ZWQubmV4dChpZCk7XG4gICAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2gobmV3IFNuYWNrYmFySW5mb0FjdGlvbignQVBQLk1FU1NBR0VTLklORk8uTElCUkFSWV9ERUxFVEVEJykpO1xuICAgICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKG5ldyBOYXZpZ2F0ZVJvdXRlQWN0aW9uKFsnL2xpYnJhcmllcyddKSk7XG4gICAgICB9LFxuICAgICAgKCkgPT4ge1xuICAgICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKG5ldyBTbmFja2JhckVycm9yQWN0aW9uKCdBUFAuTUVTU0FHRVMuRVJST1JTLkRFTEVURV9MSUJSQVJZX0ZBSUxFRCcpKTtcbiAgICAgIH1cbiAgICApO1xuICB9XG5cbiAgbGVhdmVMaWJyYXJ5KHNpdGVJZDogc3RyaW5nLCBmb2N1c2VkRWxlbWVudE9uQ2xvc2VTZWxlY3Rvcj86IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IGRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nUmVmLm9wZW4oQ29uZmlybURpYWxvZ0NvbXBvbmVudCwge1xuICAgICAgZGF0YToge1xuICAgICAgICB0aXRsZTogJ0FQUC5ESUFMT0dTLkNPTkZJUk1fTEVBVkUuVElUTEUnLFxuICAgICAgICBtZXNzYWdlOiAnQVBQLkRJQUxPR1MuQ09ORklSTV9MRUFWRS5NRVNTQUdFJyxcbiAgICAgICAgeWVzTGFiZWw6ICdBUFAuRElBTE9HUy5DT05GSVJNX0xFQVZFLllFU19MQUJFTCcsXG4gICAgICAgIG5vTGFiZWw6ICdBUFAuRElBTE9HUy5DT05GSVJNX0xFQVZFLk5PX0xBQkVMJ1xuICAgICAgfSxcbiAgICAgIG1pbldpZHRoOiAnMjUwcHgnXG4gICAgfSk7XG5cbiAgICBkaWFsb2dSZWYuYWZ0ZXJDbG9zZWQoKS5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xuICAgICAgaWYgKHJlc3VsdCA9PT0gdHJ1ZSkge1xuICAgICAgICB0aGlzLmNvbnRlbnRBcGkubGVhdmVTaXRlKHNpdGVJZCkuc3Vic2NyaWJlKFxuICAgICAgICAgICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuYXBwSG9va1NlcnZpY2UubGlicmFyeUxlZnQubmV4dChzaXRlSWQpO1xuICAgICAgICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChuZXcgU25hY2tiYXJJbmZvQWN0aW9uKCdBUFAuTUVTU0FHRVMuSU5GTy5MRUZUX0xJQlJBUlknKSk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKG5ldyBTbmFja2JhckVycm9yQWN0aW9uKCdBUFAuTUVTU0FHRVMuRVJST1JTLkxFQVZFX0xJQlJBUllfRkFJTEVEJykpO1xuICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuZm9jdXNBZnRlckNsb3NlKGZvY3VzZWRFbGVtZW50T25DbG9zZVNlbGVjdG9yKTtcbiAgICB9KTtcbiAgfVxuXG4gIHVwZGF0ZUxpYnJhcnkoc2l0ZUlkOiBzdHJpbmcsIHNpdGVCb2R5OiBTaXRlQm9keUNyZWF0ZSkge1xuICAgIHRoaXMuY29udGVudEFwaS51cGRhdGVMaWJyYXJ5KHNpdGVJZCwgc2l0ZUJvZHkpLnN1YnNjcmliZShcbiAgICAgIChzaXRlRW50cnk6IFNpdGVFbnRyeSkgPT4ge1xuICAgICAgICB0aGlzLmFwcEhvb2tTZXJ2aWNlLmxpYnJhcnlVcGRhdGVkLm5leHQoc2l0ZUVudHJ5KTtcbiAgICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChuZXcgU25hY2tiYXJJbmZvQWN0aW9uKCdMSUJSQVJZLlNVQ0NFU1MuTElCUkFSWV9VUERBVEVEJykpO1xuICAgICAgfSxcbiAgICAgICgpID0+IHtcbiAgICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChuZXcgU25hY2tiYXJFcnJvckFjdGlvbignTElCUkFSWS5FUlJPUlMuTElCUkFSWV9VUERBVEVfRVJST1InKSk7XG4gICAgICB9XG4gICAgKTtcbiAgfVxuXG4gIGFzeW5jIHVuc2hhcmVOb2RlcyhsaW5rczogQXJyYXk8Tm9kZUVudHJ5Pikge1xuICAgIGNvbnN0IHByb21pc2VzID0gbGlua3MubWFwKChsaW5rKSA9PiB0aGlzLmNvbnRlbnRBcGkuZGVsZXRlU2hhcmVkTGluayhsaW5rLmVudHJ5LmlkKS50b1Byb21pc2UoKSk7XG4gICAgYXdhaXQgUHJvbWlzZS5hbGwocHJvbWlzZXMpO1xuICAgIHRoaXMuYXBwSG9va1NlcnZpY2UubGlua3NVbnNoYXJlZC5uZXh0KCk7XG4gIH1cblxuICBjYW5VcGRhdGVOb2RlKG5vZGU6IE5vZGVFbnRyeSB8IE5vZGUpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5wZXJtaXNzaW9uLmNoZWNrKG5vZGUsIFsndXBkYXRlJ10pO1xuICB9XG5cbiAgY2FuVXBsb2FkQ29udGVudChmb2xkZXJOb2RlOiBOb2RlRW50cnkgfCBOb2RlKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMucGVybWlzc2lvbi5jaGVjayhmb2xkZXJOb2RlLCBbJ2NyZWF0ZSddKTtcbiAgfVxuXG4gIHB1cmdlRGVsZXRlZE5vZGVzKG5vZGVzOiBOb2RlRW50cnlbXSkge1xuICAgIGlmICghbm9kZXMgfHwgbm9kZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgZGlhbG9nUmVmID0gdGhpcy5kaWFsb2dSZWYub3BlbihDb25maXJtRGlhbG9nQ29tcG9uZW50LCB7XG4gICAgICBkYXRhOiB7XG4gICAgICAgIHRpdGxlOiAnQVBQLkRJQUxPR1MuQ09ORklSTV9QVVJHRS5USVRMRScsXG4gICAgICAgIG1lc3NhZ2U6ICdBUFAuRElBTE9HUy5DT05GSVJNX1BVUkdFLk1FU1NBR0UnLFxuICAgICAgICB5ZXNMYWJlbDogJ0FQUC5ESUFMT0dTLkNPTkZJUk1fUFVSR0UuWUVTX0xBQkVMJyxcbiAgICAgICAgbm9MYWJlbDogJ0FQUC5ESUFMT0dTLkNPTkZJUk1fUFVSR0UuTk9fTEFCRUwnXG4gICAgICB9LFxuICAgICAgbWluV2lkdGg6ICcyNTBweCdcbiAgICB9KTtcblxuICAgIGRpYWxvZ1JlZi5hZnRlckNsb3NlZCgpLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XG4gICAgICBpZiAocmVzdWx0ID09PSB0cnVlKSB7XG4gICAgICAgIGNvbnN0IG5vZGVzVG9EZWxldGU6IE5vZGVJbmZvW10gPSBub2Rlcy5tYXAoKG5vZGUpID0+IHtcbiAgICAgICAgICBjb25zdCB7IG5hbWUgfSA9IG5vZGUuZW50cnk7XG4gICAgICAgICAgY29uc3QgaWQgPSAobm9kZSBhcyBhbnkpLmVudHJ5Lm5vZGVJZCB8fCBub2RlLmVudHJ5LmlkO1xuXG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGlkLFxuICAgICAgICAgICAgbmFtZVxuICAgICAgICAgIH07XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnB1cmdlTm9kZXMobm9kZXNUb0RlbGV0ZSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICByZXN0b3JlRGVsZXRlZE5vZGVzKHNlbGVjdGlvbjogTm9kZUVudHJ5W10gPSBbXSkge1xuICAgIGlmICghc2VsZWN0aW9uLmxlbmd0aCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IG5vZGVzV2l0aFBhdGggPSBzZWxlY3Rpb24uZmlsdGVyKChub2RlKSA9PiBub2RlLmVudHJ5LnBhdGgpO1xuXG4gICAgaWYgKHNlbGVjdGlvbi5sZW5ndGggJiYgIW5vZGVzV2l0aFBhdGgubGVuZ3RoKSB7XG4gICAgICBjb25zdCBmYWlsZWRTdGF0dXMgPSB0aGlzLnByb2Nlc3NTdGF0dXMoW10pO1xuICAgICAgZmFpbGVkU3RhdHVzLmZhaWwucHVzaCguLi5zZWxlY3Rpb24pO1xuICAgICAgdGhpcy5zaG93UmVzdG9yZU5vdGlmaWNhdGlvbihmYWlsZWRTdGF0dXMpO1xuICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChuZXcgUmVsb2FkRG9jdW1lbnRMaXN0QWN0aW9uKCkpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGxldCBzdGF0dXM6IERlbGV0ZVN0YXR1cztcblxuICAgIGZvcmtKb2luKG5vZGVzV2l0aFBhdGgubWFwKChub2RlKSA9PiB0aGlzLnJlc3RvcmVOb2RlKG5vZGUpKSlcbiAgICAgIC5waXBlKFxuICAgICAgICB0YXAoKHJlc3RvcmVkTm9kZXMpID0+IHtcbiAgICAgICAgICBzdGF0dXMgPSB0aGlzLnByb2Nlc3NTdGF0dXMocmVzdG9yZWROb2Rlcyk7XG4gICAgICAgIH0pLFxuICAgICAgICBtZXJnZU1hcCgoKSA9PiB0aGlzLmNvbnRlbnRBcGkuZ2V0RGVsZXRlZE5vZGVzKCkpXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKChub2RlczogRGVsZXRlZE5vZGVzUGFnaW5nKSA9PiB7XG4gICAgICAgIGNvbnN0IHNlbGVjdGVkTm9kZXMgPSB0aGlzLmRpZmYoc3RhdHVzLmZhaWwsIHNlbGVjdGlvbiwgZmFsc2UpO1xuICAgICAgICBjb25zdCByZW1haW5pbmdOb2RlcyA9IHRoaXMuZGlmZihzZWxlY3RlZE5vZGVzLCBub2Rlcy5saXN0LmVudHJpZXMpO1xuXG4gICAgICAgIGlmICghcmVtYWluaW5nTm9kZXMubGVuZ3RoKSB7XG4gICAgICAgICAgdGhpcy5zaG93UmVzdG9yZU5vdGlmaWNhdGlvbihzdGF0dXMpO1xuICAgICAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2gobmV3IFJlbG9hZERvY3VtZW50TGlzdEFjdGlvbigpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnJlc3RvcmVEZWxldGVkTm9kZXMocmVtYWluaW5nTm9kZXMpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgfVxuXG4gIGNvcHlOb2Rlcyhub2RlczogQXJyYXk8Tm9kZUVudHJ5PiwgZm9jdXNlZEVsZW1lbnRPbkNsb3NlU2VsZWN0b3I/OiBzdHJpbmcpIHtcbiAgICB6aXAodGhpcy5ub2RlQWN0aW9uc1NlcnZpY2UuY29weU5vZGVzKG5vZGVzLCB1bmRlZmluZWQsIGZvY3VzZWRFbGVtZW50T25DbG9zZVNlbGVjdG9yKSwgdGhpcy5ub2RlQWN0aW9uc1NlcnZpY2UuY29udGVudENvcGllZCkuc3Vic2NyaWJlKFxuICAgICAgKHJlc3VsdCkgPT4ge1xuICAgICAgICBjb25zdCBbb3BlcmF0aW9uUmVzdWx0LCBuZXdJdGVtc10gPSByZXN1bHQ7XG4gICAgICAgIHRoaXMuc2hvd0NvcHlNZXNzYWdlKG9wZXJhdGlvblJlc3VsdCwgbm9kZXMsIG5ld0l0ZW1zKTtcbiAgICAgIH0sXG4gICAgICAoZXJyb3IpID0+IHtcbiAgICAgICAgdGhpcy5zaG93Q29weU1lc3NhZ2UoZXJyb3IsIG5vZGVzKTtcbiAgICAgIH1cbiAgICApO1xuICB9XG5cbiAgbW92ZU5vZGVzKG5vZGVzOiBBcnJheTxOb2RlRW50cnk+LCBmb2N1c2VkRWxlbWVudE9uQ2xvc2VTZWxlY3Rvcj86IHN0cmluZykge1xuICAgIGNvbnN0IHBlcm1pc3Npb25Gb3JNb3ZlID0gJyEnO1xuXG4gICAgemlwKHRoaXMubm9kZUFjdGlvbnNTZXJ2aWNlLm1vdmVOb2Rlcyhub2RlcywgcGVybWlzc2lvbkZvck1vdmUsIGZvY3VzZWRFbGVtZW50T25DbG9zZVNlbGVjdG9yKSwgdGhpcy5ub2RlQWN0aW9uc1NlcnZpY2UuY29udGVudE1vdmVkKS5zdWJzY3JpYmUoXG4gICAgICAocmVzdWx0KSA9PiB7XG4gICAgICAgIGNvbnN0IFtvcGVyYXRpb25SZXN1bHQsIG1vdmVSZXNwb25zZV0gPSByZXN1bHQ7XG4gICAgICAgIHRoaXMuc2hvd01vdmVNZXNzYWdlKG5vZGVzLCBvcGVyYXRpb25SZXN1bHQsIG1vdmVSZXNwb25zZSk7XG5cbiAgICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChuZXcgUmVsb2FkRG9jdW1lbnRMaXN0QWN0aW9uKCkpO1xuICAgICAgfSxcbiAgICAgIChlcnJvcikgPT4ge1xuICAgICAgICB0aGlzLnNob3dNb3ZlTWVzc2FnZShub2RlcywgZXJyb3IpO1xuICAgICAgfVxuICAgICk7XG4gIH1cblxuICBnZXRFcnJvck1lc3NhZ2UoZXJyb3JPYmplY3Q6IHsgbWVzc2FnZTogYW55IH0pOiBzdHJpbmcge1xuICAgIGxldCBpMThuTWVzc2FnZVN0cmluZyA9ICdBUFAuTUVTU0FHRVMuRVJST1JTLkdFTkVSSUMnO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgZXJyb3I6IHsgc3RhdHVzQ29kZSB9XG4gICAgICB9ID0gSlNPTi5wYXJzZShlcnJvck9iamVjdC5tZXNzYWdlKTtcblxuICAgICAgaWYgKHN0YXR1c0NvZGUgPT09IDQwOSkge1xuICAgICAgICBpMThuTWVzc2FnZVN0cmluZyA9ICdBUFAuTUVTU0FHRVMuRVJST1JTLk5PREVfTU9WRSc7XG4gICAgICB9IGVsc2UgaWYgKHN0YXR1c0NvZGUgPT09IDQwMykge1xuICAgICAgICBpMThuTWVzc2FnZVN0cmluZyA9ICdBUFAuTUVTU0FHRVMuRVJST1JTLlBFUk1JU1NJT04nO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgLyogRG8gbm90aGluZywga2VlcCB0aGUgb3JpZ2luYWwgbWVzc2FnZSAqL1xuICAgIH1cblxuICAgIHJldHVybiBpMThuTWVzc2FnZVN0cmluZztcbiAgfVxuXG4gIGdldE5vZGVJbmZvKCk6IE9ic2VydmFibGU8Tm9kZT4ge1xuICAgIHJldHVybiB0aGlzLnN0b3JlLnNlbGVjdChnZXRBcHBTZWxlY3Rpb24pLnBpcGUoXG4gICAgICB0YWtlKDEpLFxuICAgICAgbWVyZ2VNYXAoKHsgZmlsZSB9KSA9PiB7XG4gICAgICAgIGNvbnN0IGlkID0gKGZpbGUgYXMgYW55KS5lbnRyeS5ub2RlSWQgfHwgKGZpbGUgYXMgYW55KS5lbnRyeS5ndWlkO1xuICAgICAgICBpZiAoIWlkKSB7XG4gICAgICAgICAgcmV0dXJuIG9mKGZpbGUuZW50cnkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiB0aGlzLmNvbnRlbnRBcGkuZ2V0Tm9kZUluZm8oaWQpO1xuICAgICAgICB9XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICB1bmxvY2tOb2RlKG5vZGU6IE5vZGVFbnRyeSk6IFByb21pc2U8dm9pZCB8IE5vZGVFbnRyeT4ge1xuICAgIHJldHVybiB0aGlzLmNvbnRlbnRBcGkudW5sb2NrTm9kZShub2RlLmVudHJ5LmlkKS5jYXRjaCgoKSA9PiB7XG4gICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKFxuICAgICAgICBuZXcgU25hY2tiYXJFcnJvckFjdGlvbignQVBQLk1FU1NBR0VTLkVSUk9SUy5VTkxPQ0tfTk9ERScsIHtcbiAgICAgICAgICBmaWxlTmFtZTogbm9kZS5lbnRyeS5uYW1lXG4gICAgICAgIH0pXG4gICAgICApO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBzaG93Q29weU1lc3NhZ2UoaW5mbzogYW55LCBub2RlczogQXJyYXk8Tm9kZUVudHJ5PiwgbmV3SXRlbXM/OiBBcnJheTxOb2RlRW50cnk+KSB7XG4gICAgY29uc3QgbnVtYmVyT2ZDb3BpZWRJdGVtcyA9IG5ld0l0ZW1zID8gbmV3SXRlbXMubGVuZ3RoIDogMDtcbiAgICBjb25zdCBmYWlsZWRJdGVtcyA9IG5vZGVzLmxlbmd0aCAtIG51bWJlck9mQ29waWVkSXRlbXM7XG5cbiAgICBsZXQgaTE4bk1lc3NhZ2VTdHJpbmcgPSAnQVBQLk1FU1NBR0VTLkVSUk9SUy5HRU5FUklDJztcblxuICAgIGlmICh0eXBlb2YgaW5mbyA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGlmIChpbmZvLnRvTG93ZXJDYXNlKCkuaW5kZXhPZignc3VjY2VzJykgIT09IC0xKSB7XG4gICAgICAgIGxldCBpMThNZXNzYWdlU3VmZml4O1xuXG4gICAgICAgIGlmIChmYWlsZWRJdGVtcykge1xuICAgICAgICAgIGlmIChudW1iZXJPZkNvcGllZEl0ZW1zKSB7XG4gICAgICAgICAgICBpMThNZXNzYWdlU3VmZml4ID0gbnVtYmVyT2ZDb3BpZWRJdGVtcyA9PT0gMSA/ICdQQVJUSUFMX1NJTkdVTEFSJyA6ICdQQVJUSUFMX1BMVVJBTCc7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGkxOE1lc3NhZ2VTdWZmaXggPSBmYWlsZWRJdGVtcyA9PT0gMSA/ICdGQUlMX1NJTkdVTEFSJyA6ICdGQUlMX1BMVVJBTCc7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGkxOE1lc3NhZ2VTdWZmaXggPSBudW1iZXJPZkNvcGllZEl0ZW1zID09PSAxID8gJ1NJTkdVTEFSJyA6ICdQTFVSQUwnO1xuICAgICAgICB9XG5cbiAgICAgICAgaTE4bk1lc3NhZ2VTdHJpbmcgPSBgQVBQLk1FU1NBR0VTLklORk8uTk9ERV9DT1BZLiR7aTE4TWVzc2FnZVN1ZmZpeH1gO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCB7XG4gICAgICAgICAgZXJyb3I6IHsgc3RhdHVzQ29kZSB9XG4gICAgICAgIH0gPSBKU09OLnBhcnNlKGluZm8ubWVzc2FnZSk7XG5cbiAgICAgICAgaWYgKHN0YXR1c0NvZGUgPT09IDQwMykge1xuICAgICAgICAgIGkxOG5NZXNzYWdlU3RyaW5nID0gJ0FQUC5NRVNTQUdFUy5FUlJPUlMuUEVSTUlTU0lPTic7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2gge31cbiAgICB9XG5cbiAgICBjb25zdCB1bmRvID0gbnVtYmVyT2ZDb3BpZWRJdGVtcyA+IDAgPyB0aGlzLnRyYW5zbGF0aW9uLmluc3RhbnQoJ0FQUC5BQ1RJT05TLlVORE8nKSA6ICcnO1xuXG4gICAgY29uc3QgbWVzc2FnZSA9IHRoaXMudHJhbnNsYXRpb24uaW5zdGFudChpMThuTWVzc2FnZVN0cmluZywge1xuICAgICAgc3VjY2VzczogbnVtYmVyT2ZDb3BpZWRJdGVtcyxcbiAgICAgIGZhaWxlZDogZmFpbGVkSXRlbXNcbiAgICB9KTtcblxuICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZVxuICAgICAgLm9wZW5TbmFja01lc3NhZ2VBY3Rpb24obWVzc2FnZSwgdW5kbywge1xuICAgICAgICBwYW5lbENsYXNzOiAnaW5mby1zbmFja2JhcidcbiAgICAgIH0pXG4gICAgICAub25BY3Rpb24oKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB0aGlzLnVuZG9Db3B5Tm9kZXMobmV3SXRlbXMpKTtcbiAgfVxuXG4gIHByaXZhdGUgdW5kb0NvcHlOb2Rlcyhub2RlczogTm9kZUVudHJ5W10pIHtcbiAgICBjb25zdCBiYXRjaCA9IHRoaXMubm9kZUFjdGlvbnNTZXJ2aWNlXG4gICAgICAuZmxhdHRlbihub2RlcylcbiAgICAgIC5maWx0ZXIoKGl0ZW0pID0+IGl0ZW0uZW50cnkpXG4gICAgICAubWFwKChpdGVtKSA9PiB0aGlzLmNvbnRlbnRBcGkuZGVsZXRlTm9kZShpdGVtLmVudHJ5LmlkLCB7IHBlcm1hbmVudDogdHJ1ZSB9KSk7XG5cbiAgICBmb3JrSm9pbiguLi5iYXRjaCkuc3Vic2NyaWJlKFxuICAgICAgKCkgPT4ge1xuICAgICAgICB0aGlzLmFwcEhvb2tTZXJ2aWNlLm5vZGVzRGVsZXRlZC5uZXh0KG51bGwpO1xuICAgICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKG5ldyBSZWxvYWREb2N1bWVudExpc3RBY3Rpb24oKSk7XG4gICAgICB9LFxuICAgICAgKGVycm9yKSA9PiB7XG4gICAgICAgIGxldCBpMThuTWVzc2FnZVN0cmluZyA9ICdBUFAuTUVTU0FHRVMuRVJST1JTLkdFTkVSSUMnO1xuXG4gICAgICAgIGxldCBlcnJvckpzb24gPSBudWxsO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGVycm9ySnNvbiA9IEpTT04ucGFyc2UoZXJyb3IubWVzc2FnZSk7XG4gICAgICAgIH0gY2F0Y2gge31cblxuICAgICAgICBpZiAoZXJyb3JKc29uPy5lcnJvcj8uc3RhdHVzQ29kZSA9PT0gNDAzKSB7XG4gICAgICAgICAgaTE4bk1lc3NhZ2VTdHJpbmcgPSAnQVBQLk1FU1NBR0VTLkVSUk9SUy5QRVJNSVNTSU9OJztcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2gobmV3IFNuYWNrYmFyRXJyb3JBY3Rpb24oaTE4bk1lc3NhZ2VTdHJpbmcpKTtcbiAgICAgIH1cbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBvcGVuVmVyc2lvbk1hbmFnZXJEaWFsb2cobm9kZTogYW55LCBmb2N1c2VkRWxlbWVudE9uQ2xvc2VTZWxlY3Rvcj86IHN0cmluZykge1xuICAgIC8vIHdvcmthcm91bmQgU2hhcmVkXG4gICAgaWYgKG5vZGUuaXNGaWxlIHx8IG5vZGUubm9kZUlkKSB7XG4gICAgICBjb25zdCBuZXdWZXJzaW9uVXBsb2FkZXJEaWFsb2dEYXRhOiBOZXdWZXJzaW9uVXBsb2FkZXJEaWFsb2dEYXRhID0ge1xuICAgICAgICBub2RlLFxuICAgICAgICBzaG93VmVyc2lvbnNPbmx5OiB0cnVlLFxuICAgICAgICB0aXRsZTogJ1ZFUlNJT04uRElBTE9HLlRJVExFJ1xuICAgICAgfTtcbiAgICAgIHRoaXMubmV3VmVyc2lvblVwbG9hZGVyU2VydmljZVxuICAgICAgICAub3BlblVwbG9hZE5ld1ZlcnNpb25EaWFsb2cobmV3VmVyc2lvblVwbG9hZGVyRGlhbG9nRGF0YSwgeyB3aWR0aDogJzYzMHB4Jywgcm9sZTogJ2RpYWxvZycgfSwgZm9jdXNlZEVsZW1lbnRPbkNsb3NlU2VsZWN0b3IpXG4gICAgICAgIC5zdWJzY3JpYmUoe1xuICAgICAgICAgIG5leHQ6IChuZXdWZXJzaW9uVXBsb2FkZXJEYXRhOiBOZXdWZXJzaW9uVXBsb2FkZXJEYXRhKSA9PiB7XG4gICAgICAgICAgICBzd2l0Y2ggKG5ld1ZlcnNpb25VcGxvYWRlckRhdGEuYWN0aW9uKSB7XG4gICAgICAgICAgICAgIGNhc2UgTmV3VmVyc2lvblVwbG9hZGVyRGF0YUFjdGlvbi5yZWZyZXNoOlxuICAgICAgICAgICAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2gobmV3IFJlbG9hZERvY3VtZW50TGlzdEFjdGlvbigpKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgY2FzZSBOZXdWZXJzaW9uVXBsb2FkZXJEYXRhQWN0aW9uLnZpZXc6XG4gICAgICAgICAgICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChcbiAgICAgICAgICAgICAgICAgIG5ldyBWaWV3Tm9kZVZlcnNpb25BY3Rpb24obm9kZS5pZCwgbmV3VmVyc2lvblVwbG9hZGVyRGF0YS52ZXJzaW9uSWQsIHtcbiAgICAgICAgICAgICAgICAgICAgbG9jYXRpb246IHRoaXMucm91dGVyLnVybFxuICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2gobmV3IFNuYWNrYmFyRXJyb3JBY3Rpb24oJ0FQUC5NRVNTQUdFUy5FUlJPUlMuUEVSTUlTU0lPTicpKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIG9wZW5Bc3BlY3RMaXN0RGlhbG9nKG5vZGU6IGFueSwgZm9jdXNlZEVsZW1lbnRPbkNsb3NlU2VsZWN0b3I/OiBzdHJpbmcpIHtcbiAgICAvLyB3b3JrYXJvdW5kIFNoYXJlZFxuICAgIGlmIChub2RlLmlzRmlsZSB8fCBub2RlLmlkKSB7XG4gICAgICB0aGlzLm5vZGVBc3BlY3RTZXJ2aWNlLnVwZGF0ZU5vZGVBc3BlY3RzKG5vZGUuaWQsIGZvY3VzZWRFbGVtZW50T25DbG9zZVNlbGVjdG9yKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChuZXcgU25hY2tiYXJFcnJvckFjdGlvbignQVBQLk1FU1NBR0VTLkVSUk9SUy5QRVJNSVNTSU9OJykpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgdW5kb01vdmVOb2Rlcyhtb3ZlUmVzcG9uc2UsIHNlbGVjdGlvblBhcmVudElkOiBzdHJpbmcpIHtcbiAgICBjb25zdCBtb3ZlZE5vZGVzID0gbW92ZVJlc3BvbnNlPy5bJ3N1Y2NlZWRlZCddID8/IFtdO1xuICAgIGNvbnN0IHBhcnRpYWxseU1vdmVkTm9kZXMgPSBtb3ZlUmVzcG9uc2U/LlsncGFydGlhbGx5U3VjY2VlZGVkJ10gPz8gW107XG5cbiAgICBjb25zdCByZXN0b3JlRGVsZXRlZE5vZGVzQmF0Y2ggPSB0aGlzLm5vZGVBY3Rpb25zU2VydmljZS5tb3ZlRGVsZXRlZEVudHJpZXMubWFwKChmb2xkZXJFbnRyeSkgPT5cbiAgICAgIHRoaXMuY29udGVudEFwaS5yZXN0b3JlTm9kZShmb2xkZXJFbnRyeS5ub2RlSWQgfHwgZm9sZGVyRW50cnkuaWQpLnBpcGUobWFwKChub2RlKSA9PiBub2RlLmVudHJ5KSlcbiAgICApO1xuXG4gICAgemlwKC4uLnJlc3RvcmVEZWxldGVkTm9kZXNCYXRjaCwgb2YobnVsbCkpXG4gICAgICAucGlwZShcbiAgICAgICAgbWVyZ2VNYXAoKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IG5vZGVzVG9CZU1vdmVkQmFjayA9IFsuLi5wYXJ0aWFsbHlNb3ZlZE5vZGVzLCAuLi5tb3ZlZE5vZGVzXTtcblxuICAgICAgICAgIGNvbnN0IHJldmVydE1vdmVCYXRjaCA9IHRoaXMubm9kZUFjdGlvbnNTZXJ2aWNlXG4gICAgICAgICAgICAuZmxhdHRlbihub2Rlc1RvQmVNb3ZlZEJhY2spXG4gICAgICAgICAgICAuZmlsdGVyKChub2RlKSA9PiBub2RlLmVudHJ5IHx8IG5vZGUuaXRlbU1vdmVkPy5lbnRyeSlcbiAgICAgICAgICAgIC5tYXAoKG5vZGUpID0+IHtcbiAgICAgICAgICAgICAgaWYgKG5vZGUuaXRlbU1vdmVkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubm9kZUFjdGlvbnNTZXJ2aWNlLm1vdmVOb2RlQWN0aW9uKG5vZGUuaXRlbU1vdmVkLmVudHJ5LCBub2RlLmluaXRpYWxQYXJlbnRJZCk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubm9kZUFjdGlvbnNTZXJ2aWNlLm1vdmVOb2RlQWN0aW9uKG5vZGUuZW50cnksIHNlbGVjdGlvblBhcmVudElkKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICByZXR1cm4gemlwKC4uLnJldmVydE1vdmVCYXRjaCwgb2YobnVsbCkpO1xuICAgICAgICB9KVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZShcbiAgICAgICAgKCkgPT4ge1xuICAgICAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2gobmV3IFJlbG9hZERvY3VtZW50TGlzdEFjdGlvbigpKTtcbiAgICAgICAgfSxcbiAgICAgICAgKGVycm9yKSA9PiB7XG4gICAgICAgICAgbGV0IG1lc3NhZ2UgPSAnQVBQLk1FU1NBR0VTLkVSUk9SUy5HRU5FUklDJztcblxuICAgICAgICAgIGxldCBlcnJvckpzb24gPSBudWxsO1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBlcnJvckpzb24gPSBKU09OLnBhcnNlKGVycm9yLm1lc3NhZ2UpO1xuICAgICAgICAgIH0gY2F0Y2gge31cblxuICAgICAgICAgIGlmIChlcnJvckpzb24/LmVycm9yPy5zdGF0dXNDb2RlID09PSA0MDMpIHtcbiAgICAgICAgICAgIG1lc3NhZ2UgPSAnQVBQLk1FU1NBR0VTLkVSUk9SUy5QRVJNSVNTSU9OJztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKG5ldyBTbmFja2JhckVycm9yQWN0aW9uKG1lc3NhZ2UpKTtcbiAgICAgICAgfVxuICAgICAgKTtcbiAgfVxuXG4gIGRlbGV0ZU5vZGVzKGl0ZW1zOiBOb2RlRW50cnlbXSk6IHZvaWQge1xuICAgIGNvbnN0IGJhdGNoOiBPYnNlcnZhYmxlPERlbGV0ZWROb2RlSW5mbz5bXSA9IFtdO1xuXG4gICAgaXRlbXMuZm9yRWFjaCgobm9kZSkgPT4ge1xuICAgICAgYmF0Y2gucHVzaCh0aGlzLmRlbGV0ZU5vZGUobm9kZSkpO1xuICAgIH0pO1xuXG4gICAgZm9ya0pvaW4oLi4uYmF0Y2gpLnN1YnNjcmliZSgoZGF0YTogRGVsZXRlZE5vZGVJbmZvW10pID0+IHtcbiAgICAgIGNvbnN0IHN0YXR1cyA9IHRoaXMucHJvY2Vzc1N0YXR1cyhkYXRhKTtcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSB0aGlzLmdldERlbGV0ZU1lc3NhZ2Uoc3RhdHVzKTtcblxuICAgICAgaWYgKG1lc3NhZ2UgJiYgc3RhdHVzLnNvbWVTdWNjZWVkZWQpIHtcbiAgICAgICAgbWVzc2FnZS51c2VyQWN0aW9uID0gbmV3IFNuYWNrYmFyVXNlckFjdGlvbignQVBQLkFDVElPTlMuVU5ETycsIG5ldyBVbmRvRGVsZXRlTm9kZXNBY3Rpb24oWy4uLnN0YXR1cy5zdWNjZXNzXSkpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKG1lc3NhZ2UpO1xuXG4gICAgICBpZiAoc3RhdHVzLnNvbWVTdWNjZWVkZWQpIHtcbiAgICAgICAgdGhpcy5hcHBIb29rU2VydmljZS5ub2Rlc0RlbGV0ZWQubmV4dCgpO1xuICAgICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKG5ldyBSZWxvYWREb2N1bWVudExpc3RBY3Rpb24oKSk7XG4gICAgICB9XG4gICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKG5ldyBTaG93TG9hZGVyQWN0aW9uKGZhbHNlKSk7XG4gICAgfSk7XG4gIH1cblxuICB1bmRvRGVsZXRlTm9kZXMoaXRlbXM6IERlbGV0ZWROb2RlSW5mb1tdKTogdm9pZCB7XG4gICAgY29uc3QgYmF0Y2g6IE9ic2VydmFibGU8RGVsZXRlZE5vZGVJbmZvPltdID0gW107XG5cbiAgICBpdGVtcy5mb3JFYWNoKChpdGVtKSA9PiB7XG4gICAgICBiYXRjaC5wdXNoKHRoaXMudW5kb0RlbGV0ZU5vZGUoaXRlbSkpO1xuICAgIH0pO1xuXG4gICAgZm9ya0pvaW4oLi4uYmF0Y2gpLnN1YnNjcmliZSgoZGF0YSkgPT4ge1xuICAgICAgY29uc3QgcHJvY2Vzc2VkRGF0YSA9IHRoaXMucHJvY2Vzc1N0YXR1cyhkYXRhKTtcblxuICAgICAgaWYgKHByb2Nlc3NlZERhdGEuZmFpbC5sZW5ndGgpIHtcbiAgICAgICAgY29uc3QgbWVzc2FnZSA9IHRoaXMuZ2V0VW5kb0RlbGV0ZU1lc3NhZ2UocHJvY2Vzc2VkRGF0YSk7XG4gICAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2gobWVzc2FnZSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChwcm9jZXNzZWREYXRhLnNvbWVTdWNjZWVkZWQpIHtcbiAgICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChuZXcgUmVsb2FkRG9jdW1lbnRMaXN0QWN0aW9uKCkpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSB1bmRvRGVsZXRlTm9kZShpdGVtOiBEZWxldGVkTm9kZUluZm8pOiBPYnNlcnZhYmxlPERlbGV0ZWROb2RlSW5mbz4ge1xuICAgIGNvbnN0IHsgaWQsIG5hbWUgfSA9IGl0ZW07XG5cbiAgICByZXR1cm4gdGhpcy5jb250ZW50QXBpLnJlc3RvcmVOb2RlKGlkKS5waXBlKFxuICAgICAgbWFwKCgpID0+ICh7XG4gICAgICAgIGlkLFxuICAgICAgICBuYW1lLFxuICAgICAgICBzdGF0dXM6IDFcbiAgICAgIH0pKSxcbiAgICAgIGNhdGNoRXJyb3IoKCkgPT5cbiAgICAgICAgb2Yoe1xuICAgICAgICAgIGlkLFxuICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgc3RhdHVzOiAwXG4gICAgICAgIH0pXG4gICAgICApXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0VW5kb0RlbGV0ZU1lc3NhZ2Uoc3RhdHVzOiBEZWxldGVTdGF0dXMpOiBTbmFja2JhckFjdGlvbiB7XG4gICAgaWYgKHN0YXR1cy5zb21lRmFpbGVkICYmICFzdGF0dXMub25lRmFpbGVkKSB7XG4gICAgICByZXR1cm4gbmV3IFNuYWNrYmFyRXJyb3JBY3Rpb24oJ0FQUC5NRVNTQUdFUy5FUlJPUlMuTk9ERV9SRVNUT1JFX1BMVVJBTCcsIHsgbnVtYmVyOiBzdGF0dXMuZmFpbC5sZW5ndGggfSk7XG4gICAgfVxuXG4gICAgaWYgKHN0YXR1cy5vbmVGYWlsZWQpIHtcbiAgICAgIHJldHVybiBuZXcgU25hY2tiYXJFcnJvckFjdGlvbignQVBQLk1FU1NBR0VTLkVSUk9SUy5OT0RFX1JFU1RPUkUnLCB7XG4gICAgICAgIG5hbWU6IHN0YXR1cy5mYWlsWzBdLm5hbWVcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcHJpdmF0ZSByZXN0b3JlTm9kZShub2RlOiBOb2RlRW50cnkpOiBPYnNlcnZhYmxlPFJlc3RvcmVkTm9kZT4ge1xuICAgIGNvbnN0IHsgZW50cnkgfSA9IG5vZGU7XG5cbiAgICByZXR1cm4gdGhpcy5jb250ZW50QXBpLnJlc3RvcmVOb2RlKGVudHJ5LmlkKS5waXBlKFxuICAgICAgbWFwKCgpID0+ICh7XG4gICAgICAgIHN0YXR1czogMSxcbiAgICAgICAgZW50cnlcbiAgICAgIH0pKSxcbiAgICAgIGNhdGNoRXJyb3IoKGVycm9yKSA9PiB7XG4gICAgICAgIGNvbnN0IHsgc3RhdHVzQ29kZSB9ID0gSlNPTi5wYXJzZShlcnJvci5tZXNzYWdlKS5lcnJvcjtcblxuICAgICAgICByZXR1cm4gb2Yoe1xuICAgICAgICAgIHN0YXR1czogMCxcbiAgICAgICAgICBzdGF0dXNDb2RlLFxuICAgICAgICAgIGVudHJ5XG4gICAgICAgIH0pO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBwdXJnZU5vZGVzKHNlbGVjdGlvbjogTm9kZUluZm9bXSA9IFtdKSB7XG4gICAgaWYgKCFzZWxlY3Rpb24ubGVuZ3RoKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgYmF0Y2ggPSBzZWxlY3Rpb24ubWFwKChub2RlKSA9PiB0aGlzLnB1cmdlRGVsZXRlZE5vZGUobm9kZSkpO1xuXG4gICAgZm9ya0pvaW4oYmF0Y2gpLnN1YnNjcmliZSgocHVyZ2VkTm9kZXMpID0+IHtcbiAgICAgIGNvbnN0IHN0YXR1cyA9IHRoaXMucHJvY2Vzc1N0YXR1cyhwdXJnZWROb2Rlcyk7XG5cbiAgICAgIGlmIChzdGF0dXMuc3VjY2Vzcy5sZW5ndGgpIHtcbiAgICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChuZXcgUmVsb2FkRG9jdW1lbnRMaXN0QWN0aW9uKCkpO1xuICAgICAgfVxuICAgICAgY29uc3QgbWVzc2FnZSA9IHRoaXMuZ2V0UHVyZ2VNZXNzYWdlKHN0YXR1cyk7XG4gICAgICBpZiAobWVzc2FnZSkge1xuICAgICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKG1lc3NhZ2UpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBwdXJnZURlbGV0ZWROb2RlKG5vZGU6IE5vZGVJbmZvKTogT2JzZXJ2YWJsZTxEZWxldGVkTm9kZUluZm8+IHtcbiAgICBjb25zdCB7IGlkLCBuYW1lIH0gPSBub2RlO1xuXG4gICAgcmV0dXJuIHRoaXMuY29udGVudEFwaS5wdXJnZURlbGV0ZWROb2RlKGlkKS5waXBlKFxuICAgICAgbWFwKCgpID0+ICh7XG4gICAgICAgIHN0YXR1czogMSxcbiAgICAgICAgaWQsXG4gICAgICAgIG5hbWVcbiAgICAgIH0pKSxcbiAgICAgIGNhdGNoRXJyb3IoKCkgPT5cbiAgICAgICAgb2Yoe1xuICAgICAgICAgIHN0YXR1czogMCxcbiAgICAgICAgICBpZCxcbiAgICAgICAgICBuYW1lXG4gICAgICAgIH0pXG4gICAgICApXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgcHJvY2Vzc1N0YXR1cyhkYXRhOiBBcnJheTx7IHN0YXR1czogbnVtYmVyIH0+ID0gW10pOiBEZWxldGVTdGF0dXMge1xuICAgIGNvbnN0IHN0YXR1cyA9IHtcbiAgICAgIGZhaWw6IFtdLFxuICAgICAgc3VjY2VzczogW10sXG4gICAgICBnZXQgc29tZUZhaWxlZCgpIHtcbiAgICAgICAgcmV0dXJuICEhdGhpcy5mYWlsLmxlbmd0aDtcbiAgICAgIH0sXG4gICAgICBnZXQgc29tZVN1Y2NlZWRlZCgpIHtcbiAgICAgICAgcmV0dXJuICEhdGhpcy5zdWNjZXNzLmxlbmd0aDtcbiAgICAgIH0sXG4gICAgICBnZXQgb25lRmFpbGVkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5mYWlsLmxlbmd0aCA9PT0gMTtcbiAgICAgIH0sXG4gICAgICBnZXQgb25lU3VjY2VlZGVkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zdWNjZXNzLmxlbmd0aCA9PT0gMTtcbiAgICAgIH0sXG4gICAgICBnZXQgYWxsU3VjY2VlZGVkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zb21lU3VjY2VlZGVkICYmICF0aGlzLnNvbWVGYWlsZWQ7XG4gICAgICB9LFxuICAgICAgZ2V0IGFsbEZhaWxlZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc29tZUZhaWxlZCAmJiAhdGhpcy5zb21lU3VjY2VlZGVkO1xuICAgICAgfSxcbiAgICAgIHJlc2V0KCkge1xuICAgICAgICB0aGlzLmZhaWwgPSBbXTtcbiAgICAgICAgdGhpcy5zdWNjZXNzID0gW107XG4gICAgICB9XG4gICAgfTtcblxuICAgIHJldHVybiBkYXRhLnJlZHVjZSgoYWNjLCBub2RlKSA9PiB7XG4gICAgICBpZiAobm9kZS5zdGF0dXMpIHtcbiAgICAgICAgYWNjLnN1Y2Nlc3MucHVzaChub2RlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGFjYy5mYWlsLnB1c2gobm9kZSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBhY2M7XG4gICAgfSwgc3RhdHVzKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0UHVyZ2VNZXNzYWdlKHN0YXR1czogRGVsZXRlU3RhdHVzKTogU25hY2tiYXJBY3Rpb24ge1xuICAgIGlmIChzdGF0dXMub25lU3VjY2VlZGVkICYmIHN0YXR1cy5zb21lRmFpbGVkICYmICFzdGF0dXMub25lRmFpbGVkKSB7XG4gICAgICByZXR1cm4gbmV3IFNuYWNrYmFyV2FybmluZ0FjdGlvbignQVBQLk1FU1NBR0VTLklORk8uVFJBU0guTk9ERVNfUFVSR0UuUEFSVElBTF9TSU5HVUxBUicsIHtcbiAgICAgICAgbmFtZTogc3RhdHVzLnN1Y2Nlc3NbMF0ubmFtZSxcbiAgICAgICAgZmFpbGVkOiBzdGF0dXMuZmFpbC5sZW5ndGhcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmIChzdGF0dXMuc29tZVN1Y2NlZWRlZCAmJiAhc3RhdHVzLm9uZVN1Y2NlZWRlZCAmJiBzdGF0dXMuc29tZUZhaWxlZCkge1xuICAgICAgcmV0dXJuIG5ldyBTbmFja2Jhcldhcm5pbmdBY3Rpb24oJ0FQUC5NRVNTQUdFUy5JTkZPLlRSQVNILk5PREVTX1BVUkdFLlBBUlRJQUxfUExVUkFMJywge1xuICAgICAgICBudW1iZXI6IHN0YXR1cy5zdWNjZXNzLmxlbmd0aCxcbiAgICAgICAgZmFpbGVkOiBzdGF0dXMuZmFpbC5sZW5ndGhcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmIChzdGF0dXMub25lU3VjY2VlZGVkKSB7XG4gICAgICByZXR1cm4gbmV3IFNuYWNrYmFySW5mb0FjdGlvbignQVBQLk1FU1NBR0VTLklORk8uVFJBU0guTk9ERVNfUFVSR0UuU0lOR1VMQVInLCB7IG5hbWU6IHN0YXR1cy5zdWNjZXNzWzBdLm5hbWUgfSk7XG4gICAgfVxuXG4gICAgaWYgKHN0YXR1cy5vbmVGYWlsZWQpIHtcbiAgICAgIHJldHVybiBuZXcgU25hY2tiYXJFcnJvckFjdGlvbignQVBQLk1FU1NBR0VTLkVSUk9SUy5UUkFTSC5OT0RFU19QVVJHRS5TSU5HVUxBUicsIHsgbmFtZTogc3RhdHVzLmZhaWxbMF0ubmFtZSB9KTtcbiAgICB9XG5cbiAgICBpZiAoc3RhdHVzLmFsbFN1Y2NlZWRlZCkge1xuICAgICAgcmV0dXJuIG5ldyBTbmFja2JhckluZm9BY3Rpb24oJ0FQUC5NRVNTQUdFUy5JTkZPLlRSQVNILk5PREVTX1BVUkdFLlBMVVJBTCcsIHsgbnVtYmVyOiBzdGF0dXMuc3VjY2Vzcy5sZW5ndGggfSk7XG4gICAgfVxuXG4gICAgaWYgKHN0YXR1cy5hbGxGYWlsZWQpIHtcbiAgICAgIHJldHVybiBuZXcgU25hY2tiYXJFcnJvckFjdGlvbignQVBQLk1FU1NBR0VTLkVSUk9SUy5UUkFTSC5OT0RFU19QVVJHRS5QTFVSQUwnLCB7IG51bWJlcjogc3RhdHVzLmZhaWwubGVuZ3RoIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcHJpdmF0ZSBzaG93UmVzdG9yZU5vdGlmaWNhdGlvbihzdGF0dXM6IERlbGV0ZVN0YXR1cyk6IHZvaWQge1xuICAgIGNvbnN0IG1lc3NhZ2UgPSB0aGlzLmdldFJlc3RvcmVNZXNzYWdlKHN0YXR1cyk7XG5cbiAgICBpZiAobWVzc2FnZSkge1xuICAgICAgaWYgKHN0YXR1cy5vbmVTdWNjZWVkZWQgJiYgIXN0YXR1cy5zb21lRmFpbGVkKSB7XG4gICAgICAgIGNvbnN0IGlzU2l0ZSA9IHRoaXMuaXNTaXRlKHN0YXR1cy5zdWNjZXNzWzBdLmVudHJ5KTtcbiAgICAgICAgY29uc3QgcGF0aDogUGF0aEluZm8gPSBzdGF0dXMuc3VjY2Vzc1swXS5lbnRyeS5wYXRoO1xuICAgICAgICBjb25zdCBwYXJlbnQgPSBwYXRoLmVsZW1lbnRzW3BhdGguZWxlbWVudHMubGVuZ3RoIC0gMV07XG4gICAgICAgIGNvbnN0IHJvdXRlID0gaXNTaXRlID8gWycvbGlicmFyaWVzJywgcGFyZW50LmlkXSA6IFsnL3BlcnNvbmFsLWZpbGVzJywgcGFyZW50LmlkXTtcblxuICAgICAgICBsZXQgbmF2aWdhdGU7XG5cbiAgICAgICAgaWYgKHRoaXMuaXNMaWJyYXJ5Q29udGVudChwYXRoKSkge1xuICAgICAgICAgIG5hdmlnYXRlID0gbmV3IE5hdmlnYXRlVG9QYXJlbnRGb2xkZXIoc3RhdHVzLnN1Y2Nlc3NbMF0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG5hdmlnYXRlID0gbmV3IE5hdmlnYXRlUm91dGVBY3Rpb24ocm91dGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgbWVzc2FnZS51c2VyQWN0aW9uID0gbmV3IFNuYWNrYmFyVXNlckFjdGlvbignQVBQLkFDVElPTlMuVklFVycsIG5hdmlnYXRlKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChtZXNzYWdlKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGlzU2l0ZShlbnRyeTogTm9kZSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBlbnRyeS5ub2RlVHlwZSA9PT0gJ3N0OnNpdGUnO1xuICB9XG5cbiAgcHJpdmF0ZSBpc0xpYnJhcnlDb250ZW50KHBhdGg6IFBhdGhJbmZvKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHBhdGggJiYgcGF0aC5lbGVtZW50cy5sZW5ndGggPj0gMiAmJiBwYXRoLmVsZW1lbnRzWzFdLm5hbWUgPT09ICdTaXRlcyc7XG4gIH1cblxuICBwcml2YXRlIGdldFJlc3RvcmVNZXNzYWdlKHN0YXR1czogRGVsZXRlU3RhdHVzKTogU25hY2tiYXJBY3Rpb24ge1xuICAgIGlmIChzdGF0dXMuc29tZUZhaWxlZCAmJiAhc3RhdHVzLm9uZUZhaWxlZCkge1xuICAgICAgcmV0dXJuIG5ldyBTbmFja2JhckVycm9yQWN0aW9uKCdBUFAuTUVTU0FHRVMuRVJST1JTLlRSQVNILk5PREVTX1JFU1RPUkUuUEFSVElBTF9QTFVSQUwnLCB7XG4gICAgICAgIG51bWJlcjogc3RhdHVzLmZhaWwubGVuZ3RoXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAoc3RhdHVzLm9uZUZhaWxlZCAmJiBzdGF0dXMuZmFpbFswXS5zdGF0dXNDb2RlKSB7XG4gICAgICBpZiAoc3RhdHVzLmZhaWxbMF0uc3RhdHVzQ29kZSA9PT0gNDA5KSB7XG4gICAgICAgIHJldHVybiBuZXcgU25hY2tiYXJFcnJvckFjdGlvbignQVBQLk1FU1NBR0VTLkVSUk9SUy5UUkFTSC5OT0RFU19SRVNUT1JFLk5PREVfRVhJU1RTJywge1xuICAgICAgICAgIG5hbWU6IHN0YXR1cy5mYWlsWzBdLmVudHJ5Lm5hbWVcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gbmV3IFNuYWNrYmFyRXJyb3JBY3Rpb24oJ0FQUC5NRVNTQUdFUy5FUlJPUlMuVFJBU0guTk9ERVNfUkVTVE9SRS5HRU5FUklDJywge1xuICAgICAgICAgIG5hbWU6IHN0YXR1cy5mYWlsWzBdLmVudHJ5Lm5hbWVcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHN0YXR1cy5vbmVGYWlsZWQgJiYgIXN0YXR1cy5mYWlsWzBdLnN0YXR1c0NvZGUpIHtcbiAgICAgIHJldHVybiBuZXcgU25hY2tiYXJFcnJvckFjdGlvbignQVBQLk1FU1NBR0VTLkVSUk9SUy5UUkFTSC5OT0RFU19SRVNUT1JFLkxPQ0FUSU9OX01JU1NJTkcnLCB7XG4gICAgICAgIG5hbWU6IHN0YXR1cy5mYWlsWzBdLmVudHJ5Lm5hbWVcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmIChzdGF0dXMuYWxsU3VjY2VlZGVkICYmICFzdGF0dXMub25lU3VjY2VlZGVkKSB7XG4gICAgICByZXR1cm4gbmV3IFNuYWNrYmFySW5mb0FjdGlvbignQVBQLk1FU1NBR0VTLklORk8uVFJBU0guTk9ERVNfUkVTVE9SRS5QTFVSQUwnKTtcbiAgICB9XG5cbiAgICBpZiAoc3RhdHVzLmFsbFN1Y2NlZWRlZCAmJiBzdGF0dXMub25lU3VjY2VlZGVkKSB7XG4gICAgICByZXR1cm4gbmV3IFNuYWNrYmFySW5mb0FjdGlvbignQVBQLk1FU1NBR0VTLklORk8uVFJBU0guTk9ERVNfUkVTVE9SRS5TSU5HVUxBUicsIHtcbiAgICAgICAgbmFtZTogc3RhdHVzLnN1Y2Nlc3NbMF0uZW50cnkubmFtZVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBwcml2YXRlIGRpZmYoc2VsZWN0aW9uOiBhbnlbXSwgbGlzdDogYW55W10sIGZyb21MaXN0ID0gdHJ1ZSk6IGFueSB7XG4gICAgY29uc3QgaWRzID0gc2VsZWN0aW9uLm1hcCgoaXRlbSkgPT4gaXRlbS5lbnRyeS5pZCk7XG5cbiAgICByZXR1cm4gbGlzdC5maWx0ZXIoKGl0ZW0pID0+IHtcbiAgICAgIGlmIChmcm9tTGlzdCkge1xuICAgICAgICByZXR1cm4gaWRzLmluY2x1ZGVzKGl0ZW0uZW50cnkuaWQpID8gaXRlbSA6IG51bGw7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gIWlkcy5pbmNsdWRlcyhpdGVtLmVudHJ5LmlkKSA/IGl0ZW0gOiBudWxsO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBkZWxldGVOb2RlKG5vZGU6IGFueSk6IE9ic2VydmFibGU8RGVsZXRlZE5vZGVJbmZvPiB7XG4gICAgY29uc3QgeyBuYW1lIH0gPSBub2RlLmVudHJ5O1xuICAgIGNvbnN0IGlkID0gbm9kZS5lbnRyeS5ub2RlSWQgfHwgbm9kZS5lbnRyeS5pZDtcblxuICAgIHJldHVybiB0aGlzLmNvbnRlbnRBcGkuZGVsZXRlTm9kZShpZCkucGlwZShcbiAgICAgIG1hcCgoKSA9PiAoe1xuICAgICAgICBpZCxcbiAgICAgICAgbmFtZSxcbiAgICAgICAgc3RhdHVzOiAxXG4gICAgICB9KSksXG4gICAgICBjYXRjaEVycm9yKCgpID0+XG4gICAgICAgIG9mKHtcbiAgICAgICAgICBpZCxcbiAgICAgICAgICBuYW1lLFxuICAgICAgICAgIHN0YXR1czogMFxuICAgICAgICB9KVxuICAgICAgKVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGdldERlbGV0ZU1lc3NhZ2Uoc3RhdHVzOiBEZWxldGVTdGF0dXMpOiBTbmFja2JhckFjdGlvbiB7XG4gICAgaWYgKHN0YXR1cy5hbGxGYWlsZWQgJiYgIXN0YXR1cy5vbmVGYWlsZWQpIHtcbiAgICAgIHJldHVybiBuZXcgU25hY2tiYXJFcnJvckFjdGlvbignQVBQLk1FU1NBR0VTLkVSUk9SUy5OT0RFX0RFTEVUSU9OX1BMVVJBTCcsIHsgbnVtYmVyOiBzdGF0dXMuZmFpbC5sZW5ndGggfSk7XG4gICAgfVxuXG4gICAgaWYgKHN0YXR1cy5hbGxTdWNjZWVkZWQgJiYgIXN0YXR1cy5vbmVTdWNjZWVkZWQpIHtcbiAgICAgIHJldHVybiBuZXcgU25hY2tiYXJJbmZvQWN0aW9uKCdBUFAuTUVTU0FHRVMuSU5GTy5OT0RFX0RFTEVUSU9OLlBMVVJBTCcsIHtcbiAgICAgICAgbnVtYmVyOiBzdGF0dXMuc3VjY2Vzcy5sZW5ndGhcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmIChzdGF0dXMuc29tZUZhaWxlZCAmJiBzdGF0dXMuc29tZVN1Y2NlZWRlZCAmJiAhc3RhdHVzLm9uZVN1Y2NlZWRlZCkge1xuICAgICAgcmV0dXJuIG5ldyBTbmFja2Jhcldhcm5pbmdBY3Rpb24oJ0FQUC5NRVNTQUdFUy5JTkZPLk5PREVfREVMRVRJT04uUEFSVElBTF9QTFVSQUwnLCB7XG4gICAgICAgIHN1Y2Nlc3M6IHN0YXR1cy5zdWNjZXNzLmxlbmd0aCxcbiAgICAgICAgZmFpbGVkOiBzdGF0dXMuZmFpbC5sZW5ndGhcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmIChzdGF0dXMuc29tZUZhaWxlZCAmJiBzdGF0dXMub25lU3VjY2VlZGVkKSB7XG4gICAgICByZXR1cm4gbmV3IFNuYWNrYmFyV2FybmluZ0FjdGlvbignQVBQLk1FU1NBR0VTLklORk8uTk9ERV9ERUxFVElPTi5QQVJUSUFMX1NJTkdVTEFSJywge1xuICAgICAgICBzdWNjZXNzOiBzdGF0dXMuc3VjY2Vzcy5sZW5ndGgsXG4gICAgICAgIGZhaWxlZDogc3RhdHVzLmZhaWwubGVuZ3RoXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAoc3RhdHVzLm9uZUZhaWxlZCAmJiAhc3RhdHVzLnNvbWVTdWNjZWVkZWQpIHtcbiAgICAgIHJldHVybiBuZXcgU25hY2tiYXJFcnJvckFjdGlvbignQVBQLk1FU1NBR0VTLkVSUk9SUy5OT0RFX0RFTEVUSU9OJywge1xuICAgICAgICBuYW1lOiBzdGF0dXMuZmFpbFswXS5uYW1lXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAoc3RhdHVzLm9uZVN1Y2NlZWRlZCAmJiAhc3RhdHVzLnNvbWVGYWlsZWQpIHtcbiAgICAgIHJldHVybiBuZXcgU25hY2tiYXJJbmZvQWN0aW9uKCdBUFAuTUVTU0FHRVMuSU5GTy5OT0RFX0RFTEVUSU9OLlNJTkdVTEFSJywgeyBuYW1lOiBzdGF0dXMuc3VjY2Vzc1swXS5uYW1lIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcHJpdmF0ZSBzaG93TW92ZU1lc3NhZ2Uobm9kZXM6IEFycmF5PE5vZGVFbnRyeT4sIGluZm86IGFueSwgbW92ZVJlc3BvbnNlPzogYW55KSB7XG4gICAgY29uc3Qgc3VjY2VlZGVkID0gbW92ZVJlc3BvbnNlPy5bJ3N1Y2NlZWRlZCddLmxlbmd0aCA/PyAwO1xuICAgIGNvbnN0IHBhcnRpYWxseVN1Y2NlZWRlZCA9IG1vdmVSZXNwb25zZT8uWydwYXJ0aWFsbHlTdWNjZWVkZWQnXS5sZW5ndGggPz8gMDtcbiAgICBjb25zdCBmYWlsdXJlcyA9IG1vdmVSZXNwb25zZT8uWydmYWlsZWQnXS5sZW5ndGggPz8gMDtcblxuICAgIGxldCBzdWNjZXNzTWVzc2FnZSA9ICcnO1xuICAgIGxldCBwYXJ0aWFsU3VjY2Vzc01lc3NhZ2UgPSAnJztcbiAgICBsZXQgZmFpbGVkTWVzc2FnZSA9ICcnO1xuICAgIGxldCBlcnJvck1lc3NhZ2UgPSAnJztcblxuICAgIGlmICh0eXBlb2YgaW5mbyA9PT0gJ3N0cmluZycpIHtcbiAgICAgIC8vIGluIGNhc2Ugb2Ygc3VjY2Vzc1xuICAgICAgaWYgKGluZm8udG9Mb3dlckNhc2UoKS5pbmRleE9mKCdzdWNjZXMnKSAhPT0gLTEpIHtcbiAgICAgICAgY29uc3QgaTE4bk1lc3NhZ2VTdHJpbmcgPSAnQVBQLk1FU1NBR0VTLklORk8uTk9ERV9NT1ZFLic7XG4gICAgICAgIGxldCBpMThNZXNzYWdlU3VmZml4ID0gJyc7XG5cbiAgICAgICAgaWYgKHN1Y2NlZWRlZCkge1xuICAgICAgICAgIGkxOE1lc3NhZ2VTdWZmaXggPSBzdWNjZWVkZWQgPT09IDEgPyAnU0lOR1VMQVInIDogJ1BMVVJBTCc7XG4gICAgICAgICAgc3VjY2Vzc01lc3NhZ2UgPSBgJHtpMThuTWVzc2FnZVN0cmluZ30ke2kxOE1lc3NhZ2VTdWZmaXh9YDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwYXJ0aWFsbHlTdWNjZWVkZWQpIHtcbiAgICAgICAgICBpMThNZXNzYWdlU3VmZml4ID0gcGFydGlhbGx5U3VjY2VlZGVkID09PSAxID8gJ1BBUlRJQUwuU0lOR1VMQVInIDogJ1BBUlRJQUwuUExVUkFMJztcbiAgICAgICAgICBwYXJ0aWFsU3VjY2Vzc01lc3NhZ2UgPSBgJHtpMThuTWVzc2FnZVN0cmluZ30ke2kxOE1lc3NhZ2VTdWZmaXh9YDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChmYWlsdXJlcykge1xuICAgICAgICAgIC8vIGlmIG1vdmluZyBmYWlsZWQgZm9yIEFMTCBub2RlcywgZW1pdCBlcnJvclxuICAgICAgICAgIGlmIChmYWlsdXJlcyA9PT0gbm9kZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICBjb25zdCBlcnJvcnMgPSB0aGlzLm5vZGVBY3Rpb25zU2VydmljZS5mbGF0dGVuKG1vdmVSZXNwb25zZVsnZmFpbGVkJ10pO1xuICAgICAgICAgICAgZXJyb3JNZXNzYWdlID0gdGhpcy5nZXRFcnJvck1lc3NhZ2UoZXJyb3JzWzBdKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaTE4TWVzc2FnZVN1ZmZpeCA9ICdQQVJUSUFMLkZBSUwnO1xuICAgICAgICAgICAgZmFpbGVkTWVzc2FnZSA9IGAke2kxOG5NZXNzYWdlU3RyaW5nfSR7aTE4TWVzc2FnZVN1ZmZpeH1gO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZXJyb3JNZXNzYWdlID0gJ0FQUC5NRVNTQUdFUy5FUlJPUlMuR0VORVJJQyc7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGVycm9yTWVzc2FnZSA9IHRoaXMuZ2V0RXJyb3JNZXNzYWdlKGluZm8pO1xuICAgIH1cblxuICAgIGNvbnN0IHVuZG8gPSBzdWNjZWVkZWQgKyBwYXJ0aWFsbHlTdWNjZWVkZWQgPiAwID8gdGhpcy50cmFuc2xhdGlvbi5pbnN0YW50KCdBUFAuQUNUSU9OUy5VTkRPJykgOiAnJztcbiAgICBmYWlsZWRNZXNzYWdlID0gZXJyb3JNZXNzYWdlID8gZXJyb3JNZXNzYWdlIDogZmFpbGVkTWVzc2FnZTtcblxuICAgIGNvbnN0IGJlZm9yZVBhcnRpYWxTdWNjZXNzTWVzc2FnZSA9IHN1Y2Nlc3NNZXNzYWdlICYmIHBhcnRpYWxTdWNjZXNzTWVzc2FnZSA/ICcgJyA6ICcnO1xuICAgIGNvbnN0IGJlZm9yZUZhaWxlZE1lc3NhZ2UgPSAoc3VjY2Vzc01lc3NhZ2UgfHwgcGFydGlhbFN1Y2Nlc3NNZXNzYWdlKSAmJiBmYWlsZWRNZXNzYWdlID8gJyAnIDogJyc7XG5cbiAgICBjb25zdCBpbml0aWFsUGFyZW50SWQgPSB0aGlzLm5vZGVBY3Rpb25zU2VydmljZS5nZXRFbnRyeVBhcmVudElkKG5vZGVzWzBdLmVudHJ5KTtcblxuICAgIGNvbnN0IG1lc3NhZ2VzID0gdGhpcy50cmFuc2xhdGlvbi5pbnN0YW50KFtzdWNjZXNzTWVzc2FnZSwgcGFydGlhbFN1Y2Nlc3NNZXNzYWdlLCBmYWlsZWRNZXNzYWdlXSwge1xuICAgICAgc3VjY2Vzczogc3VjY2VlZGVkLFxuICAgICAgZmFpbGVkOiBmYWlsdXJlcyxcbiAgICAgIHBhcnRpYWxseTogcGFydGlhbGx5U3VjY2VlZGVkXG4gICAgfSk7XG5cbiAgICAvLyBUT0RPOiByZXZpZXcgaW4gdGVybXMgb2YgaTE4blxuICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZVxuICAgICAgLm9wZW5TbmFja01lc3NhZ2VBY3Rpb24oXG4gICAgICAgIG1lc3NhZ2VzW3N1Y2Nlc3NNZXNzYWdlXSArIGJlZm9yZVBhcnRpYWxTdWNjZXNzTWVzc2FnZSArIG1lc3NhZ2VzW3BhcnRpYWxTdWNjZXNzTWVzc2FnZV0gKyBiZWZvcmVGYWlsZWRNZXNzYWdlICsgbWVzc2FnZXNbZmFpbGVkTWVzc2FnZV0sXG4gICAgICAgIHVuZG8sXG4gICAgICAgIHtcbiAgICAgICAgICBwYW5lbENsYXNzOiAnaW5mby1zbmFja2JhcidcbiAgICAgICAgfVxuICAgICAgKVxuICAgICAgLm9uQWN0aW9uKClcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4gdGhpcy51bmRvTW92ZU5vZGVzKG1vdmVSZXNwb25zZSwgaW5pdGlhbFBhcmVudElkKSk7XG4gIH1cblxuICBwcml2YXRlIGZvY3VzQWZ0ZXJDbG9zZShmb2N1c2VkRWxlbWVudFNlbGVjdG9yOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAoZm9jdXNlZEVsZW1lbnRTZWxlY3Rvcikge1xuICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcjxIVE1MRWxlbWVudD4oZm9jdXNlZEVsZW1lbnRTZWxlY3Rvcik/LmZvY3VzKCk7XG4gICAgfVxuICB9XG59XG4iXX0=
|
|
@@ -11,7 +11,7 @@ import * as i3 from '@alfresco/aca-shared';
|
|
|
11
11
|
import { PageComponent, GenericErrorComponent, ContextActionsDirective, InfoDrawerComponent, PaginationDirective, PageLayoutComponent, ToolbarComponent, AppExtensionService, isLocked, ToolbarMenuItemComponent, ContentApiService, LockedByComponent, ExtensionsDataLoaderGuard, AppSharedRuleGuard, OpenInAppComponent, DocumentBasePageService } from '@alfresco/aca-shared';
|
|
12
12
|
import * as rules from '@alfresco/aca-shared/rules';
|
|
13
13
|
import { __awaiter } from 'tslib';
|
|
14
|
-
import { SetSelectedNodesAction, showLoaderSelector, isAdmin, SetCurrentFolderAction, UploadFileVersionAction, NavigateLibraryAction, AppActionTypes, NodeActionTypes, getRepositoryStatus, getAppSelection, getCurrentVersion, UnlockWriteAction, SnackbarErrorAction, getSharedUrl, ReloadDocumentListAction, SnackbarInfoAction, ViewNodeVersionAction, SnackbarUserAction, UndoDeleteNodesAction, ShowLoaderAction, SnackbarWarningAction, NavigateToParentFolder,
|
|
14
|
+
import { SetSelectedNodesAction, showLoaderSelector, isAdmin, SetCurrentFolderAction, UploadFileVersionAction, NavigateLibraryAction, AppActionTypes, NodeActionTypes, getRepositoryStatus, getAppSelection, getCurrentVersion, UnlockWriteAction, SnackbarErrorAction, getSharedUrl, ReloadDocumentListAction, SnackbarInfoAction, NavigateRouteAction, ViewNodeVersionAction, SnackbarUserAction, UndoDeleteNodesAction, ShowLoaderAction, SnackbarWarningAction, NavigateToParentFolder, getCurrentFolder, SetInfoDrawerStateAction, NavigateUrlAction, ViewerActionTypes, SearchActionTypes, SearchOptionIds, LibraryActionTypes, UploadActionTypes, CreateFromTemplate, TemplateActionTypes, CreateFromTemplateSuccess, ContextMenuActionTypes, SharedStoreModule, infoDrawerMetadataAspect, SnackbarActionTypes, UpdateLibraryAction, isInfoDrawerOpened, ToggleInfoDrawerAction, getUserProfile, EditOfflineAction, DownloadNodesAction, ViewNodeAction, getAppName, getLogoPath, getSideNavState, ShareNodeAction, SearchByTermAction, NavigateToFolder, showFacetFilter, infoDrawerPreview, ShowInfoDrawerPreviewAction, SetInfoDrawerPreviewStateAction, NavigateToPreviousPage, getFileUploadingDialog } from '@alfresco/aca-shared/store';
|
|
15
15
|
import { filter, takeUntil, catchError, mergeMap, map, debounceTime, take, tap, first, switchMap, distinctUntilChanged, delay } from 'rxjs/operators';
|
|
16
16
|
import * as i5$1 from '@alfresco/adf-extensions';
|
|
17
17
|
import { ExtensionsModule } from '@alfresco/adf-extensions';
|
|
@@ -1990,6 +1990,7 @@ class ContentManagementService {
|
|
|
1990
1990
|
this.contentApi.deleteSite(id).subscribe(() => {
|
|
1991
1991
|
this.appHookService.libraryDeleted.next(id);
|
|
1992
1992
|
this.store.dispatch(new SnackbarInfoAction('APP.MESSAGES.INFO.LIBRARY_DELETED'));
|
|
1993
|
+
this.store.dispatch(new NavigateRouteAction(['/libraries']));
|
|
1993
1994
|
}, () => {
|
|
1994
1995
|
this.store.dispatch(new SnackbarErrorAction('APP.MESSAGES.ERRORS.DELETE_LIBRARY_FAILED'));
|
|
1995
1996
|
});
|