@tiba-spark/client-shared-lib 25.2.0-4 → 25.2.0-41
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/esm2022/libraries/guards/sub-module-guard.mjs +2 -2
- package/esm2022/libraries/modules/auth/session.state.mjs +4 -3
- package/esm2022/libraries/service-proxy/cloud-service-proxies.mjs +3 -1
- package/esm2022/libraries/service-proxy/identity-service-proxies.mjs +3 -1
- package/fesm2022/tiba-spark-client-shared-lib.mjs +8 -3
- package/fesm2022/tiba-spark-client-shared-lib.mjs.map +1 -1
- package/libraries/modules/auth/session.state.d.ts.map +1 -1
- package/libraries/service-proxy/cloud-service-proxies.d.ts +2 -0
- package/libraries/service-proxy/cloud-service-proxies.d.ts.map +1 -1
- package/libraries/service-proxy/identity-service-proxies.d.ts +2 -0
- package/libraries/service-proxy/identity-service-proxies.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -24,7 +24,7 @@ export class SubModuleGuard {
|
|
|
24
24
|
const user = this.store.selectSnapshot(SessionState.userInfo);
|
|
25
25
|
if (user) {
|
|
26
26
|
const subModules = user.permissionInfo.modules.find(m => route.data.module === m.module).subModule;
|
|
27
|
-
if (!subModules.includes(route.data.subModule)) {
|
|
27
|
+
if (!!subModules && !subModules.includes(route.data.subModule)) {
|
|
28
28
|
this.handleForbiddenAccess(state);
|
|
29
29
|
}
|
|
30
30
|
else {
|
|
@@ -57,4 +57,4 @@ __decorate([
|
|
|
57
57
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: SubModuleGuard, decorators: [{
|
|
58
58
|
type: Injectable
|
|
59
59
|
}], ctorParameters: function () { return [{ type: i1.Router }, { type: i2.Store }, { type: i3.SmartparkService }, { type: i4.Location }]; }, propDecorators: { setSubModule: [], setAppModule: [] } });
|
|
60
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
60
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3ViLW1vZHVsZS1ndWFyZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NsaWVudC1zaGFyZWQtbGliL3NyYy9saWJyYXJpZXMvZ3VhcmRzL3N1Yi1tb2R1bGUtZ3VhcmQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUNBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFM0MsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBSXpELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUM3RCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUN0RyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFHaEUsT0FBTyxFQUFFLDZCQUE2QixFQUFFLE1BQU0scUJBQXFCLENBQUM7Ozs7OztBQUdwRSxNQUFNLE9BQU8sY0FBYztJQUV6QixZQUNVLE1BQWMsRUFDZCxLQUFZLEVBQ1osZ0JBQWtDLEVBQ2xDLFFBQWtCO1FBSGxCLFdBQU0sR0FBTixNQUFNLENBQVE7UUFDZCxVQUFLLEdBQUwsS0FBSyxDQUFPO1FBQ1oscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQUNsQyxhQUFRLEdBQVIsUUFBUSxDQUFVO1FBa0NoQixpQkFBWSxHQUFHLENBQUMsU0FBb0IsRUFBRSxFQUFFLENBQUMsSUFBSSx1QkFBdUIsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNoRixpQkFBWSxHQUFHLENBQUMsU0FBb0IsRUFBRSxFQUFFLENBQUMsSUFBSSx1QkFBdUIsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQWpDNUYsQ0FBQztJQUVELFdBQVcsQ0FBQyxLQUE2QixFQUFFLEtBQTBCO1FBQ25FLElBQUksU0FBUyxHQUFHLEtBQUssQ0FBQztRQUN0QixNQUFNLElBQUksR0FBYSxJQUFJLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDeEUsSUFBSSxJQUFJLEVBQUU7WUFDUixNQUFNLFVBQVUsR0FBZ0IsSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLFNBQVMsQ0FBQztZQUNoSCxJQUFJLENBQUMsQ0FBQyxVQUFVLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUU7Z0JBQzlELElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxLQUFLLENBQUMsQ0FBQzthQUNuQztpQkFBTTtnQkFDTCxJQUFJLENBQUMsc0JBQXNCLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ25DLFNBQVMsR0FBRyxJQUFJLENBQUM7YUFDbEI7U0FDRjtRQUVELE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7SUFFTyxxQkFBcUIsQ0FBQyxLQUEwQjtRQUN0RCxNQUFNLFVBQVUsR0FBZSxJQUFJLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxZQUFZLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDbEYsNkJBQTZCLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLEtBQUssRUFBRSxVQUFVLENBQUMsQ0FBQztJQUMvRSxDQUFDO0lBRU8sc0JBQXNCLENBQUMsS0FBNkI7UUFDMUQsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3JDLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUV4QyxJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsb0JBQW9CLEtBQUssS0FBSyxFQUFFO1lBQzdDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQztTQUMzRztJQUNILENBQUM7K0dBdENVLGNBQWM7bUhBQWQsY0FBYzs7QUF3Q2I7SUFBWCxRQUFRLEVBQUU7b0RBQWlGO0FBQ2hGO0lBQVgsUUFBUSxFQUFFO29EQUFpRjs0RkF6Q2pGLGNBQWM7a0JBRDFCLFVBQVU7dUtBeUNHLFlBQVksTUFDWixZQUFZIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTG9jYXRpb24gfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGVTbmFwc2hvdCwgUm91dGVyLCBSb3V0ZXJTdGF0ZVNuYXBzaG90IH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IERpc3BhdGNoIH0gZnJvbSAnQG5neHMtbGFicy9kaXNwYXRjaC1kZWNvcmF0b3InO1xuaW1wb3J0IHsgU3RvcmUgfSBmcm9tICdAbmd4cy9zdG9yZSc7XG5pbXBvcnQgeyBUZW5hbnRJbmZvIH0gZnJvbSAnLi4vbW9kdWxlcy9hdXRoL21vZGVsL3RlbmFudC1pbmZvLmludGVyZmFjZSc7XG5pbXBvcnQgeyBVc2VySW5mbyB9IGZyb20gJy4uL21vZHVsZXMvYXV0aC9tb2RlbC91c2VyLWluZm8uaW50ZXJmYWNlJztcbmltcG9ydCB7IFNlc3Npb25TdGF0ZSB9IGZyb20gJy4uL21vZHVsZXMvYXV0aC9zZXNzaW9uLnN0YXRlJztcbmltcG9ydCB7IE1lbnVBcHBNb2R1bGVMb2FkQWN0aW9uLCBNZW51U3ViTW9kdWxlTG9hZEFjdGlvbiB9IGZyb20gJy4uL21vZHVsZXMvc2lkZW5hdi9zaWRlbmF2LmFjdGlvbnMnO1xuaW1wb3J0IHsgU2lkZW5hdlN0YXRlIH0gZnJvbSAnLi4vbW9kdWxlcy9zaWRlbmF2L3NpZGVuYXYuc3RhdGUnO1xuaW1wb3J0IHsgQXBwTW9kdWxlLCBTdWJNb2R1bGUgfSBmcm9tICcuLi9zZXJ2aWNlLXByb3h5L2Nsb3VkLXNlcnZpY2UtcHJveGllcyc7XG5pbXBvcnQgeyBTbWFydHBhcmtTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvc21hcnRwYXJrLnNlcnZpY2UnO1xuaW1wb3J0IHsgbmF2aWdhdGVUb0ZvcmJpZGRlbkFjY2Vzc1BhZ2UgfSBmcm9tICcuLi91dGlscy9yb3V0ZS51dGlsJztcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIFN1Yk1vZHVsZUd1YXJkIHtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLFxuICAgIHByaXZhdGUgc3RvcmU6IFN0b3JlLFxuICAgIHByaXZhdGUgc21hcnRwYXJrU2VydmljZTogU21hcnRwYXJrU2VydmljZSxcbiAgICBwcml2YXRlIGxvY2F0aW9uOiBMb2NhdGlvbixcbiAgKSB7XG4gIH1cblxuICBjYW5BY3RpdmF0ZShyb3V0ZTogQWN0aXZhdGVkUm91dGVTbmFwc2hvdCwgc3RhdGU6IFJvdXRlclN0YXRlU25hcHNob3QpOiBib29sZWFuIHtcbiAgICBsZXQgaXNBbGxvd2VkID0gZmFsc2U7XG4gICAgY29uc3QgdXNlcjogVXNlckluZm8gPSB0aGlzLnN0b3JlLnNlbGVjdFNuYXBzaG90KFNlc3Npb25TdGF0ZS51c2VySW5mbyk7XG4gICAgaWYgKHVzZXIpIHtcbiAgICAgIGNvbnN0IHN1Yk1vZHVsZXM6IFN1Yk1vZHVsZVtdID0gdXNlci5wZXJtaXNzaW9uSW5mby5tb2R1bGVzLmZpbmQobSA9PiByb3V0ZS5kYXRhLm1vZHVsZSA9PT0gbS5tb2R1bGUpLnN1Yk1vZHVsZTtcbiAgICAgIGlmICghIXN1Yk1vZHVsZXMgJiYgIXN1Yk1vZHVsZXMuaW5jbHVkZXMocm91dGUuZGF0YS5zdWJNb2R1bGUpKSB7XG4gICAgICAgIHRoaXMuaGFuZGxlRm9yYmlkZGVuQWNjZXNzKHN0YXRlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuaGFuZGxlU3ViTW9kdWxlTG9hZGluZyhyb3V0ZSk7XG4gICAgICAgIGlzQWxsb3dlZCA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGlzQWxsb3dlZDtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlRm9yYmlkZGVuQWNjZXNzKHN0YXRlOiBSb3V0ZXJTdGF0ZVNuYXBzaG90KTogdm9pZCB7XG4gICAgY29uc3QgdGVuYW50SW5mbzogVGVuYW50SW5mbyA9IHRoaXMuc3RvcmUuc2VsZWN0U25hcHNob3QoU2Vzc2lvblN0YXRlLnRlbmFudEluZm8pO1xuICAgIG5hdmlnYXRlVG9Gb3JiaWRkZW5BY2Nlc3NQYWdlKHRoaXMucm91dGVyLCB0aGlzLmxvY2F0aW9uLCBzdGF0ZSwgdGVuYW50SW5mbyk7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZVN1Yk1vZHVsZUxvYWRpbmcocm91dGU6IEFjdGl2YXRlZFJvdXRlU25hcHNob3QpOiB2b2lkIHtcbiAgICB0aGlzLnNldEFwcE1vZHVsZShyb3V0ZS5kYXRhLm1vZHVsZSk7XG4gICAgdGhpcy5zZXRTdWJNb2R1bGUocm91dGUuZGF0YS5zdWJNb2R1bGUpO1xuXG4gICAgaWYgKHJvdXRlLmRhdGEuZ2V0U21hcnRwYXJrQmFzaWNBbGwgIT09IGZhbHNlKSB7XG4gICAgICB0aGlzLnNtYXJ0cGFya1NlcnZpY2UuZ2V0U21hcnRwYXJrQmFzaWNBbGwodGhpcy5zdG9yZS5zZWxlY3RTbmFwc2hvdChTaWRlbmF2U3RhdGUuYXBwTW9kdWxlKSkuc3Vic2NyaWJlKCk7XG4gICAgfVxuICB9XG5cbiAgQERpc3BhdGNoKCkgc2V0U3ViTW9kdWxlID0gKHN1Yk1vZHVsZTogU3ViTW9kdWxlKSA9PiBuZXcgTWVudVN1Yk1vZHVsZUxvYWRBY3Rpb24oc3ViTW9kdWxlKTtcbiAgQERpc3BhdGNoKCkgc2V0QXBwTW9kdWxlID0gKGFwcE1vZHVsZTogQXBwTW9kdWxlKSA9PiBuZXcgTWVudUFwcE1vZHVsZUxvYWRBY3Rpb24oYXBwTW9kdWxlKTtcbn1cbiJdfQ==
|
|
@@ -272,12 +272,13 @@ let SessionState = SessionState_1 = class SessionState {
|
|
|
272
272
|
}
|
|
273
273
|
onTenantLoadAction(ctx, action) {
|
|
274
274
|
const tenantName = action.tenant?.tenantName.toLowerCase();
|
|
275
|
-
this.store.dispatch(new UpdateTenantInfoProps(action.tenant?.props));
|
|
276
275
|
const sparkSessions = this.getSparkSessions();
|
|
277
276
|
if (!sparkSessions[tenantName]) {
|
|
278
277
|
sparkSessions[tenantName] = { user: null, authToken: null, refresh: null, tenant: action.tenant };
|
|
279
278
|
}
|
|
280
|
-
|
|
279
|
+
else {
|
|
280
|
+
sparkSessions[tenantName].tenant = action.tenant;
|
|
281
|
+
}
|
|
281
282
|
this.setSparkSessions(ctx, sparkSessions);
|
|
282
283
|
}
|
|
283
284
|
onTenantClearAction(ctx, _) {
|
|
@@ -453,4 +454,4 @@ export { SessionState };
|
|
|
453
454
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: SessionState, decorators: [{
|
|
454
455
|
type: Injectable
|
|
455
456
|
}], ctorParameters: function () { return [{ type: i1.SessionStorageService }, { type: i2.LocalStorageService }, { type: i3.Store }, { type: i4.AppConfigService }, { type: i5.AuthService }, { type: i6.ConfigurationServiceProxy }, { type: i7.Router }, { type: i8.HttpCancelService }, { type: i9.TranslateService }, { type: i10.MsalService }, { type: i6.UsersServiceProxy }, { type: i11.OpenIdAuthService }, { type: i12.MessageBarService }, { type: i6.MobileServiceProxy }, { type: i13.MobileServiceProxyIdentity }]; }, propDecorators: { onLogin: [], onSetTenantUserAction: [], onUpdateAuthTokenAction: [], setSessionState: [], SetUserNameAction: [], AuditLogoutAction: [], AuditLogoutMobileAction: [], onMobileLogoutAction: [], onLogout: [], onTenantLoadAction: [], onTenantClearAction: [], onHealthActionAction: [], onUpdateUserSettings: [], onUpdateTenantInfoProps: [], onAuthenticate2FAforUser: [], onLoadSessionFromLocalStorageAction: [], onAppConfigurationAction: [], onLoadAppConfigurationMobileAction: [] } });
|
|
456
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Vzc2lvbi5zdGF0ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NsaWVudC1zaGFyZWQtbGliL3NyYy9saWJyYXJpZXMvbW9kdWxlcy9hdXRoL3Nlc3Npb24uc3RhdGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxhQUFhLEVBQVUsTUFBTSxpQkFBaUIsQ0FBQztBQUl4RCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDL0MsT0FBTyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUF1QixNQUFNLGFBQWEsQ0FBQztBQUMzRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx3REFBd0QsQ0FBQztBQUU1RixPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUMxRSxPQUFPLEVBQUUsV0FBVyxFQUFFLGlCQUFpQixFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNyRyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDL0QsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBRXBELE9BQU8sRUFBbUUsb0JBQW9CLEVBQUUsZ0JBQWdCLEVBQXFCLE1BQU0sMkNBQTJDLENBQUM7QUFPdkwsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFFbkUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDNUQsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sOEJB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QUU7c0NBSVY7QUFHYTtJQURiLFFBQVEsRUFBRTs0Q0FLVjtBQUdhO0lBRGIsUUFBUSxFQUFFOzBDQUlWO0FBR2E7SUFEYixRQUFRLEVBQUU7d0NBSVY7QUF6RlUsWUFBWTtJQUx4QixLQUFLLENBQW9CO1FBQ3hCLElBQUksRUFBRSxTQUFTO1FBQ2YsUUFBUSxFQUFFLG1CQUFtQjtLQUM5QixDQUFDO0dBRVcsWUFBWSxDQWtaeEI7U0FsWlksWUFBWTs0RkFBWixZQUFZO2tCQUR4QixVQUFVOytoQkE2RkYsT0FBTyxNQWFQLHFCQUFxQixNQTJCckIsdUJBQXVCLE1BTXZCLGVBQWUsTUFlZixpQkFBaUIsTUFRakIsaUJBQWlCLE1BWWpCLHVCQUF1QixNQVl2QixvQkFBb0IsTUE4Q3BCLFFBQVEsTUE2RFIsa0JBQWtCLE1BYWxCLG1CQUFtQixNQWdCbkIsb0JBQW9CLE1BU3BCLG9CQUFvQixNQU9wQix1QkFBdUIsTUFPdkIsd0JBQXdCLE1BU3hCLG1DQUFtQyxNQWlCbkMsd0JBQXdCLE1BWXhCLGtDQUFrQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE5hdmlnYXRpb25FbmQsIFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBNc2FsU2VydmljZSB9IGZyb20gJ0BhenVyZS9tc2FsLWFuZ3VsYXInO1xuaW1wb3J0IHsgQ2xlYXJDYWNoZVJlcXVlc3QgfSBmcm9tICdAYXp1cmUvbXNhbC1icm93c2VyJztcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7IE5hdmlnYXRlIH0gZnJvbSAnQG5neHMvcm91dGVyLXBsdWdpbic7XG5pbXBvcnQgeyBBY3Rpb24sIFNlbGVjdG9yLCBTdGF0ZSwgU3RhdGVDb250ZXh0LCBTdG9yZSB9IGZyb20gJ0BuZ3hzL3N0b3JlJztcbmltcG9ydCB7IGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBmaWx0ZXIsIGZpcnN0LCBvZiwgc3dpdGNoTWFwLCB0YXAgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IE1lc3NhZ2VCYXJQb3NpdGlvbiB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvbWVzc2FnZS1iYXIvbWVzc2FnZS1iYXItcG9zaXRpb24uZW51bSc7XG5pbXBvcnQgeyBNZXNzYWdlQmFyU2VydmljZSB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvbWVzc2FnZS1iYXIvbWVzc2FnZS1iYXIuc2VydmljZSc7XG5pbXBvcnQgeyBMT0NBTF9FTkdMSVNIX0xBTkdVQUdFIH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzL2dsb2JhbC1jb25zdGFudHMnO1xuaW1wb3J0IHsgRU5WSVJPTk1FTlQsIExPR0dFRF9URU5BTlRfS0VZLCBTRVNTSU9OLCBURU5BTlRfS0VZIH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzL2tleXMtY29uc3RhbnRzJztcbmltcG9ydCB7IFZFUlNJT05fVjEgfSBmcm9tICcuLi8uLi9jb25zdGFudHMvdmVyc2lvbi1jb25zdGFudHMnO1xuaW1wb3J0IHsgQXBwVHlwZSB9IGZyb20gJy4uLy4uL2VudW1zL2FwcC10eXBlLmVudW0nO1xuaW1wb3J0IHsgU3BhcmtTZXNzaW9uIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9zcGFyay1zZXNzaW9uLmludGVyZmFjZSc7XG5pbXBvcnQgeyBDb25maWd1cmF0aW9uU2VydmljZVByb3h5LCBNb2JpbGVTZXJ2aWNlUHJveHksIFNldHRpbmdzQ2F0ZWdvcnksIFNpbmdsZVNpZ25PblByb3ZpZGVyLCBTcGFya1NldHRpbmdzRHRvLCBVc2Vyc1NlcnZpY2VQcm94eSB9IGZyb20gJy4uLy4uL3NlcnZpY2UtcHJveHkvY2xvdWQtc2VydmljZS1wcm94aWVzJztcbmltcG9ydCB7IE1vYmlsZVNlcnZpY2VQcm94eUlkZW50aXR5IH0gZnJvbSAnLi4vLi4vc2VydmljZS1wcm94eS9pZGVudGl0eS1zZXJ2aWNlLXByb3hpZXMnO1xuaW1wb3J0IHsgQXBwQ29uZmlnU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2FwcC1jb25maWcuc2VydmljZSc7XG5pbXBvcnQgeyBIdHRwQ2FuY2VsU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2h0dHAtY2FuY2VsLnNlcnZpY2UnO1xuaW1wb3J0IHsgTG9jYWxTdG9yYWdlU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2xvY2FsLXN0b3JhZ2Uuc2VydmljZSc7XG5pbXBvcnQgeyBPcGVuSWRBdXRoU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL29wZW5pZC1hdXRoLnNlcnZpY2UnO1xuaW1wb3J0IHsgU2Vzc2lvblN0b3JhZ2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvc2Vzc2lvbi1zdG9yYWdlLnNlcnZpY2UnO1xuaW1wb3J0IHsgcGFyc2VBcGlFcnJvck1lc3NhZ2UgfSBmcm9tICcuLi8uLi91dGlscy9hcGktaGVscGVyLnV0aWwnO1xuaW1wb3J0IHsgU3RyaW5nTWFwIH0gZnJvbSAnLi4vLi4vdXRpbHMvbGFuZy51dGlsJztcbmltcG9ydCB7IGdldE5hdmlnYXRpb25Sb3V0ZSB9IGZyb20gJy4uLy4uL3V0aWxzL3JvdXRlLnV0aWwnO1xuaW1wb3J0IHsgVW5sb2FkUGFya2luZ0xvdEFjdGlvbiB9IGZyb20gJy4uL2ZhY2lsaXR5L2ZhY2lsaXR5LmFjdGlvbnMnO1xuaW1wb3J0IHsgQXV0aFNlcnZpY2UgfSBmcm9tICcuL2F1dGguc2VydmljZSc7XG5pbXBvcnQgeyBBcHBsaWNhdGlvbkluZm8gfSBmcm9tICcuL21vZGVsL2FwcGxpY2F0aW9uLWluZm8uaW50ZXJmYWNlJztcbmltcG9ydCB7IFRlbmFudEluZm8gfSBmcm9tICcuL21vZGVsL3RlbmFudC1pbmZvLmludGVyZmFjZSc7XG5pbXBvcnQge1xuICBBdWRpdExvZ291dEFjdGlvbiwgQXVkaXRMb2dvdXRNb2JpbGVBY3Rpb24sIEF1dGhlbnRpY2F0ZTJGQWZvclVzZXIsIEhlYWx0aEFjdGlvbiwgSW5pdFNlc3Npb25Gcm9tTG9jYWxTdG9yYWdlQWN0aW9uLCBMb2FkQXBwQ29uZmlndXJhdGlvbkFjdGlvbixcbiAgTG9hZEFwcENvbmZpZ3VyYXRpb25Nb2JpbGVBY3Rpb24sXG4gIExvZ2luUmVxdWVzdEFjdGlvbiwgTG9nb3V0QWN0aW9uLCBMb2dvdXRNb2JpbGVBY3Rpb24sIE1vYmlsZUxvZ291dEFjdGlvbiwgU2V0U3RhdGVBY3Rpb24sIFNldFRlbmFudFVzZXJBY3Rpb24sIFNldFVzZXJOYW1lQWN0aW9uLFxuICBUZW5hbnRDbGVhckFjdGlvbiwgVGVuYW50TG9hZEFjdGlvbiwgVXBkYXRlQXV0aFRva2VuQWN0aW9uLCBVcGRhdGVUZW5hbnRJbmZvUHJvcHMsIFVwZGF0ZVVzZXJTZXR0aW5nc0luU2Vzc2lvbkFjdGlvblxufSBmcm9tICcuL3Nlc3Npb24uYWN0aW9ucyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2Vzc2lvblN0YXRlTW9kZWwge1xuICBzcGFya1Nlc3Npb25zOiBTdHJpbmdNYXA8U3BhcmtTZXNzaW9uPjtcbiAgYXBwbGljYXRpb24/OiBBcHBsaWNhdGlvbkluZm87XG4gIHNlcnZlckVudmlyb25tZW50TW9kZT86IHN0cmluZztcbn1cblxuY29uc3QgZGVmYXVsdFNlc3Npb25TdGF0ZSA9IHtcbiAgc3BhcmtTZXNzaW9uczoge30sXG4gIGFwcGxpY2F0aW9uOiB7IHZlcnNpb246IG51bGwsIHJlbGVhc2VEYXRlOiBudWxsLCBmZWF0dXJlczoge30gfSxcbn1cblxuQFN0YXRlPFNlc3Npb25TdGF0ZU1vZGVsPih7XG4gIG5hbWU6ICdzZXNzaW9uJyxcbiAgZGVmYXVsdHM6IGRlZmF1bHRTZXNzaW9uU3RhdGUsXG59KVxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIFNlc3Npb25TdGF0ZSB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByb3RlY3RlZCBzZXNzaW9uU3RvcmFnZVNlcnZpY2U6IFNlc3Npb25TdG9yYWdlU2VydmljZSxcbiAgICBwcml2YXRlIGxvY2FsU3RvcmFnZVNlcnZpY2U6IExvY2FsU3RvcmFnZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBzdG9yZTogU3RvcmUsXG4gICAgcHJpdmF0ZSBhcHBDb25maWdTZXJ2aWNlOiBBcHBDb25maWdTZXJ2aWNlLFxuICAgIHByaXZhdGUgYXV0aFNlcnZpY2U6IEF1dGhTZXJ2aWNlLFxuICAgIHByaXZhdGUgY29uZmlndXJhdGlvblNlcnZpY2VQcm94eTogQ29uZmlndXJhdGlvblNlcnZpY2VQcm94eSxcbiAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLFxuICAgIHByaXZhdGUgaHR0cENhbmNlbFNlcnZpY2U6IEh0dHBDYW5jZWxTZXJ2aWNlLFxuICAgIHByaXZhdGUgdHJhbnNsYXRlU2VydmljZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICBwcml2YXRlIG1zYWxTZXJ2aWNlOiBNc2FsU2VydmljZSxcbiAgICBwcml2YXRlIHVzZXJzU2VydmljZVByb3h5OiBVc2Vyc1NlcnZpY2VQcm94eSxcbiAgICBwcml2YXRlIG9wZW5JZEF1dGhTZXJ2aWNlOiBPcGVuSWRBdXRoU2VydmljZSxcbiAgICBwcml2YXRlIG1lc3NhZ2VCYXJTZXJ2aWNlOiBNZXNzYWdlQmFyU2VydmljZSxcbiAgICBwcml2YXRlIG1vYmlsZVNlcnZpY2VQcm94eTogTW9iaWxlU2VydmljZVByb3h5LFxuICAgIHByaXZhdGUgbW9iaWxlU2VydmljZVByb3h5SWRlbnRpdHk6IE1vYmlsZVNlcnZpY2VQcm94eUlkZW50aXR5KSB7XG4gIH1cblxuICBAU2VsZWN0b3IoKVxuICBwdWJsaWMgc3RhdGljIGlzVXNlckF1dGhlbnRpY2F0ZWRXaXRoU1NPKHN0YXRlOiBTZXNzaW9uU3RhdGVNb2RlbCkge1xuICAgIGNvbnN0IHRlbmFudE5hbWUgPSBzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKFRFTkFOVF9LRVkpO1xuICAgIHJldHVybiBzdGF0ZS5zcGFya1Nlc3Npb25zW3RlbmFudE5hbWVdLnVzZXI/LnNzb0F1dGhlbnRpY2F0ZWQ7XG4gIH1cblxuICBAU2VsZWN0b3IoKVxuICBwdWJsaWMgc3RhdGljIGlzVXNlckF1dGhlbnRpY2F0ZWRXaXRoMkZBKHN0YXRlOiBTZXNzaW9uU3RhdGVNb2RlbCkge1xuICAgIGNvbnN0IHRlbmFudE5hbWUgPSBzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKFRFTkFOVF9LRVkpO1xuICAgIHJldHVybiBzdGF0ZS5zcGFya1Nlc3Npb25zW3RlbmFudE5hbWVdLnVzZXIuYXV0aGVudGljYXRlZDJGQTtcbiAgfVxuXG4gIEBTZWxlY3RvcigpXG4gIHB1YmxpYyBzdGF0aWMgc2VydmVyRW52aXJvbm1lbnRNb2RlKHN0YXRlOiBTZXNzaW9uU3RhdGVNb2RlbCkge1xuICAgIHJldHVybiBzdGF0ZS5zZXJ2ZXJFbnZpcm9ubWVudE1vZGU7XG4gIH1cblxuICBAU2VsZWN0b3IoKVxuICBwdWJsaWMgc3RhdGljIHVzZXJJbmZvKHN0YXRlOiBTZXNzaW9uU3RhdGVNb2RlbCkge1xuICAgIGNvbnN0IHRlbmFudE5hbWUgPSBzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKFRFTkFOVF9LRVkpO1xuICAgIHJldHVybiBzdGF0ZS5zcGFya1Nlc3Npb25zW3RlbmFudE5hbWVdLnVzZXI7XG4gIH1cblxuICBAU2VsZWN0b3IoKVxuICBwdWJsaWMgc3RhdGljIGxvZ2dlZFVzZXJJbmZvKHN0YXRlOiBTZXNzaW9uU3RhdGVNb2RlbCkge1xuICAgIGNvbnN0IHRlbmFudE5hbWUgPSBzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKExPR0dFRF9URU5BTlRfS0VZKTtcbiAgICByZXR1cm4gc3RhdGUuc3BhcmtTZXNzaW9uc1t0ZW5hbnROYW1lXS51c2VyO1xuICB9XG5cbiAgQFNlbGVjdG9yKClcbiAgcHVibGljIHN0YXRpYyB0ZW5hbnRJbmZvKHN0YXRlOiBTZXNzaW9uU3RhdGVNb2RlbCkge1xuICAgIGNvbnN0IHRlbmFudE5hbWUgPSBzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKFRFTkFOVF9LRVkpO1xuICAgIHJldHVybiBzdGF0ZS5zcGFya1Nlc3Npb25zW3RlbmFudE5hbWVdLnRlbmFudDtcbiAgfVxuXG4gIEBTZWxlY3RvcigpXG4gIHB1YmxpYyBzdGF0aWMgdGhpcmRQYXJ0eVRva2VuKHN0YXRlOiBTZXNzaW9uU3RhdGVNb2RlbCkge1xuICAgIGNvbnN0IHRlbmFudE5hbWUgPSBzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKFRFTkFOVF9LRVkpO1xuICAgIHJldHVybiBzdGF0ZS5zcGFya1Nlc3Npb25zW3RlbmFudE5hbWVdLnRoaXJkUGFydHlUb2tlbjtcbiAgfVxuXG4gIEBTZWxlY3RvcigpXG4gIHB1YmxpYyBzdGF0aWMgbG9nZ2VkVGVuYW50SW5mbyhzdGF0ZTogU2Vzc2lvblN0YXRlTW9kZWwpIHtcbiAgICBjb25zdCB0ZW5hbnROYW1lID0gc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbShMT0dHRURfVEVOQU5UX0tFWSk7XG4gICAgcmV0dXJuIHN0YXRlLnNwYXJrU2Vzc2lvbnNbdGVuYW50TmFtZV0udGVuYW50O1xuICB9XG5cbiAgQFNlbGVjdG9yKClcbiAgcHVibGljIHN0YXRpYyB1c2VyU2V0dGluZ3Moc3RhdGU6IFNlc3Npb25TdGF0ZU1vZGVsKTogU3BhcmtTZXR0aW5nc0R0b1tdIHtcbiAgICBjb25zdCB0ZW5hbnROYW1lID0gc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbShURU5BTlRfS0VZKTtcbiAgICByZXR1cm4gc3RhdGUuc3BhcmtTZXNzaW9uc1t0ZW5hbnROYW1lXS51c2VyLnNldHRpbmdzIGFzIFNwYXJrU2V0dGluZ3NEdG9bXTtcbiAgfVxuXG4gIEBTZWxlY3RvcigpXG4gIHB1YmxpYyBzdGF0aWMgbWFwcGVkVXNlclNldHRpbmdzKHN0YXRlOiBTZXNzaW9uU3RhdGVNb2RlbCkge1xuICAgIGNvbnN0IHRlbmFudE5hbWUgPSBzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKFRFTkFOVF9LRVkpO1xuICAgIHJldHVybiBzdGF0ZS5zcGFya1Nlc3Npb25zW3RlbmFudE5hbWVdLnVzZXIuc2V0dGluZ3MucmVkdWNlKChzZXR0aW5nc01hcCwgdXNlclNldHRpbmcpID0+XG4gICAgICBzZXR0aW5nc01hcC5zZXQodXNlclNldHRpbmcuY2F0ZWdvcnksIEpTT04ucGFyc2UodXNlclNldHRpbmcuc2V0dGluZ3NKc29uKSksIG5ldyBNYXA8U2V0dGluZ3NDYXRlZ29yeSwgYW55PigpKTtcbiAgfVxuXG4gIEBTZWxlY3RvcigpXG4gIHB1YmxpYyBzdGF0aWMgYXBwQ29uZmlndXJhdGlvbihzdGF0ZTogU2Vzc2lvblN0YXRlTW9kZWwpIHtcbiAgICBjb25zdCB0ZW5hbnROYW1lID0gc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbShMT0dHRURfVEVOQU5UX0tFWSk7XG4gICAgcmV0dXJuIHN0YXRlLnNwYXJrU2Vzc2lvbnNbdGVuYW50TmFtZV0uYXBwQ29uZmlndXJhdGlvbjtcbiAgfVxuXG4gIEBTZWxlY3RvcigpXG4gIHB1YmxpYyBzdGF0aWMga2VlcE1lTG9nZ2VkSW4oc3RhdGU6IFNlc3Npb25TdGF0ZU1vZGVsKTogYm9vbGVhbiB7XG4gICAgY29uc3QgdGVuYW50TmFtZSA9IHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oVEVOQU5UX0tFWSk7XG4gICAgcmV0dXJuIHN0YXRlLnNwYXJrU2Vzc2lvbnNbdGVuYW50TmFtZV0udXNlci5rZWVwTWVMb2dnZWRJbiA/PyBmYWxzZTtcbiAgfVxuXG4gIEBBY3Rpb24oTG9naW5SZXF1ZXN0QWN0aW9uKVxuICBwdWJsaWMgb25Mb2dpbihjdHg6IFN0YXRlQ29udGV4dDxTZXNzaW9uU3RhdGVNb2RlbD4sIGFjdGlvbjogTG9naW5SZXF1ZXN0QWN0aW9uKSB7XG4gICAgcmV0dXJuIHRoaXMuYXV0aFNlcnZpY2UubG9naW4oYWN0aW9uKS5waXBlKHRhcCh7XG4gICAgICBuZXh0OiBzcGFya1Nlc3Npb24gPT4ge1xuICAgICAgICB0aGlzLlNldFRlbmFudFVzZXJBY3Rpb24oY3R4LCBzcGFya1Nlc3Npb24pO1xuICAgICAgfSxcbiAgICAgIGVycm9yOiBlID0+IHtcbiAgICAgICAgY29uc3QgbWVzc2FnZSA9IHBhcnNlQXBpRXJyb3JNZXNzYWdlKGUpO1xuICAgICAgICB0aGlzLm1lc3NhZ2VCYXJTZXJ2aWNlLmVycm9yKHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KG1lc3NhZ2UpLCB7IHBvc2l0aW9uOiBNZXNzYWdlQmFyUG9zaXRpb24uU3RhdGljIH0pO1xuICAgICAgfVxuICAgIH0pKVxuICB9XG5cbiAgQEFjdGlvbihTZXRUZW5hbnRVc2VyQWN0aW9uKVxuICBwdWJsaWMgb25TZXRUZW5hbnRVc2VyQWN0aW9uKGN0eDogU3RhdGVDb250ZXh0PFNlc3Npb25TdGF0ZU1vZGVsPiwgeyBzcGFya1Nlc3Npb24gfTogU2V0VGVuYW50VXNlckFjdGlvbikge1xuICAgIHRoaXMuU2V0VGVuYW50VXNlckFjdGlvbihjdHgsIHNwYXJrU2Vzc2lvbik7XG4gIH1cblxuICBwcml2YXRlIFNldFRlbmFudFVzZXJBY3Rpb24oY3R4OiBTdGF0ZUNvbnRleHQ8U2Vzc2lvblN0YXRlTW9kZWw+LCBzcGFya1Nlc3Npb246IFNwYXJrU2Vzc2lvbikge1xuICAgIGNvbnN0IHNwYXJrU2Vzc2lvbnMgPSB0aGlzLmdldFNwYXJrU2Vzc2lvbnMoKTtcbiAgICBjb25zdCB7IHVzZXIsIGF1dGhUb2tlbiwgcmVmcmVzaCwgdGhpcmRQYXJ0eVRva2VuIH0gPSBzcGFya1Nlc3Npb247XG4gICAgdXNlci5zZXR0aW5ncyA9IHVzZXIuc2V0dGluZ3MubWFwKHMgPT4ge1xuICAgICAgcmV0dXJuIG5ldyBTcGFya1NldHRpbmdzRHRvKHtcbiAgICAgICAgY2F0ZWdvcnk6IHMuY2F0ZWdvcnksXG4gICAgICAgIHNldHRpbmdzSnNvbjogSlNPTi5wYXJzZShzLnNldHRpbmdzSnNvbilcbiAgICAgIH0pXG4gICAgfSk7XG5cbiAgICBpZiAoIXNwYXJrU2Vzc2lvbnNbdGhpcy5zZXNzaW9uU3RvcmFnZVNlcnZpY2UudGVuYW50XSkge1xuICAgICAgc3BhcmtTZXNzaW9uc1t0aGlzLnNlc3Npb25TdG9yYWdlU2VydmljZS50ZW5hbnRdID0geyB1c2VyLCBhdXRoVG9rZW4sIHJlZnJlc2gsIHRlbmFudDogbnVsbCwgdGhpcmRQYXJ0eVRva2VuIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIHNwYXJrU2Vzc2lvbnNbdGhpcy5zZXNzaW9uU3RvcmFnZVNlcnZpY2UudGVuYW50XS51c2VyID0gdXNlcjtcbiAgICAgIHNwYXJrU2Vzc2lvbnNbdGhpcy5zZXNzaW9uU3RvcmFnZVNlcnZpY2UudGVuYW50XS5hdXRoVG9rZW4gPSBhdXRoVG9rZW47XG4gICAgICBzcGFya1Nlc3Npb25zW3RoaXMuc2Vzc2lvblN0b3JhZ2VTZXJ2aWNlLnRlbmFudF0ucmVmcmVzaCA9IHJlZnJlc2g7XG4gICAgICBzcGFya1Nlc3Npb25zW3RoaXMuc2Vzc2lvblN0b3JhZ2VTZXJ2aWNlLnRlbmFudF0udGhpcmRQYXJ0eVRva2VuID0gdGhpcmRQYXJ0eVRva2VuO1xuICAgIH1cblxuICAgIHRoaXMuc2V0U3BhcmtTZXNzaW9ucyhjdHgsIHNwYXJrU2Vzc2lvbnMpO1xuICB9XG5cbiAgQEFjdGlvbihVcGRhdGVBdXRoVG9rZW5BY3Rpb24pXG4gIHB1YmxpYyBvblVwZGF0ZUF1dGhUb2tlbkFjdGlvbihjdHg6IFN0YXRlQ29udGV4dDxTZXNzaW9uU3RhdGVNb2RlbD4sIGFjdGlvbjogVXBkYXRlQXV0aFRva2VuQWN0aW9uKSB7XG4gICAgY29uc3Qgc3BhcmtTZXNzaW9ucyA9IHRoaXMuZ2V0U3BhcmtTZXNzaW9ucygpO1xuICAgIHNwYXJrU2Vzc2lvbnNbdGhpcy5zZXNzaW9uU3RvcmFnZVNlcnZpY2UudGVuYW50XS5hdXRoVG9rZW4gPSBhY3Rpb24uYXV0aFRva2VuO1xuICB9XG5cbiAgQEFjdGlvbihTZXRTdGF0ZUFjdGlvbilcbiAgcHVibGljIHNldFNlc3Npb25TdGF0ZShjdHg6IFN0YXRlQ29udGV4dDxTZXNzaW9uU3RhdGVNb2RlbD4sIGFjdGlvbjogU2V0U3RhdGVBY3Rpb24pIHtcbiAgICBjb25zdCBzcGFya1Nlc3Npb25zID0gdGhpcy5nZXRTcGFya1Nlc3Npb25zKCk7XG4gICAgc3BhcmtTZXNzaW9uc1t0aGlzLnNlc3Npb25TdG9yYWdlU2VydmljZS50ZW5hbnRdLmF1dGhUb2tlbiA9IGFjdGlvbi5hdXRoVG9rZW47XG4gICAgc3BhcmtTZXNzaW9uc1t0aGlzLnNlc3Npb25TdG9yYWdlU2VydmljZS50ZW5hbnRdLnJlZnJlc2ggPSBhY3Rpb24ucmVmcmVzaDtcblxuICAgIGNvbnN0IGFwcGxpY2F0aW9uOiBBcHBsaWNhdGlvbkluZm8gPSB7XG4gICAgICB2ZXJzaW9uOiB0aGlzLmFwcENvbmZpZ1NlcnZpY2UuZ2V0Q29uZmlnKCkucGFja2FnZUluZm8udmVyc2lvbixcbiAgICAgIHJlbGVhc2VEYXRlOiBudWxsLFxuICAgICAgZmVhdHVyZXM6IHt9LFxuICAgIH07XG4gICAgY3R4LnBhdGNoU3RhdGUoeyBhcHBsaWNhdGlvbiB9KTtcbiAgICB0aGlzLnNldFNwYXJrU2Vzc2lvbnMoY3R4LCBzcGFya1Nlc3Npb25zKTtcbiAgfVxuXG4gIEBBY3Rpb24oU2V0VXNlck5hbWVBY3Rpb24pXG4gIHB1YmxpYyBTZXRVc2VyTmFtZUFjdGlvbihjdHg6IFN0YXRlQ29udGV4dDxTZXNzaW9uU3RhdGVNb2RlbD4sIGFjdGlvbjogU2V0VXNlck5hbWVBY3Rpb24pIHtcbiAgICBjb25zdCB0ZW5hbnROYW1lID0gc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbShURU5BTlRfS0VZKTtcbiAgICBjb25zdCBzcGFya1Nlc3Npb25zID0gdGhpcy5nZXRTcGFya1Nlc3Npb25zKCk7XG4gICAgc3BhcmtTZXNzaW9uc1t0ZW5hbnROYW1lXS51c2VyLmRpc3BsYXlOYW1lID0gYWN0aW9uLnVzZXJOYW1lO1xuICAgIHRoaXMuc2V0U3BhcmtTZXNzaW9ucyhjdHgsIHNwYXJrU2Vzc2lvbnMpO1xuICB9XG5cbiAgQEFjdGlvbihBdWRpdExvZ291dEFjdGlvbilcbiAgcHVibGljIEF1ZGl0TG9nb3V0QWN0aW9uKGN0eDogU3RhdGVDb250ZXh0PFNlc3Npb25TdGF0ZU1vZGVsPiwgYWN0aW9uOiBBdWRpdExvZ291dEFjdGlvbikge1xuICAgIGNvbnN0IHNwYXJrU2Vzc2lvbnMgPSB0aGlzLmdldFNwYXJrU2Vzc2lvbnMoKTtcbiAgICBjb25zdCB0ZW5hbnROYW1lID0gc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbShURU5BTlRfS0VZKTtcbiAgICBjb25zdCB0ZW5hbnRJbmZvID0gY3R4LmdldFN0YXRlKCkuc3BhcmtTZXNzaW9uc1t0ZW5hbnROYW1lXS50ZW5hbnQ7XG4gICAgaWYgKHRoaXMuaXNUZW5hbnRVbmRlZmluZWQodGVuYW50SW5mbywgc3BhcmtTZXNzaW9uc1t0ZW5hbnROYW1lXSkpIHtcbiAgICAgIHJldHVybiBvZihudWxsKTsgLy8gSGFuZGxlIHRoZSBjYXNlIHdoZXJlIHRlbmFudCBvciBzcGFya1Nlc3Npb25zIGFyZSB1bmRlZmluZWRcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMudXNlcnNTZXJ2aWNlUHJveHkuYXVkaXRMb2dvdXQoKS5waXBlKFxuICAgICAgdGFwKCgpID0+IHsgfSkpO1xuICB9XG5cbiAgQEFjdGlvbihBdWRpdExvZ291dE1vYmlsZUFjdGlvbilcbiAgcHVibGljIEF1ZGl0TG9nb3V0TW9iaWxlQWN0aW9uKGN0eDogU3RhdGVDb250ZXh0PFNlc3Npb25TdGF0ZU1vZGVsPiwgYWN0aW9uOiBBdWRpdExvZ291dE1vYmlsZUFjdGlvbikge1xuICAgIGNvbnN0IHNwYXJrU2Vzc2lvbnMgPSB0aGlzLmdldFNwYXJrU2Vzc2lvbnMoKTtcbiAgICBjb25zdCB0ZW5hbnROYW1lID0gc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbShURU5BTlRfS0VZKTtcbiAgICBjb25zdCB0ZW5hbnRJbmZvID0gY3R4LmdldFN0YXRlKCkuc3BhcmtTZXNzaW9uc1t0ZW5hbnROYW1lXS50ZW5hbnQ7XG4gICAgaWYgKHRoaXMuaXNUZW5hbnRVbmRlZmluZWQodGVuYW50SW5mbywgc3BhcmtTZXNzaW9uc1t0ZW5hbnROYW1lXSkpIHtcbiAgICAgIHJldHVybiBvZihudWxsKTsgLy8gSGFuZGxlIHRoZSBjYXNlIHdoZXJlIHRlbmFudCBvciBzcGFya1Nlc3Npb25zIGFyZSB1bmRlZmluZWRcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMubW9iaWxlU2VydmljZVByb3h5Lm1vYmlsZUF1ZGl0TG9nb3V0KFZFUlNJT05fVjEpLnBpcGUoXG4gICAgICB0YXAoKCkgPT4geyB9KSk7XG4gIH1cblxuICBAQWN0aW9uKE1vYmlsZUxvZ291dEFjdGlvbilcbiAgcHVibGljIG9uTW9iaWxlTG9nb3V0QWN0aW9uKGN0eDogU3RhdGVDb250ZXh0PFNlc3Npb25TdGF0ZU1vZGVsPiwgeyBsb2dvdXRBdWRpdCB9OiBNb2JpbGVMb2dvdXRBY3Rpb24pIHtcbiAgICBjb25zdCBhcHBUeXBlID0gdGhpcy5hcHBDb25maWdTZXJ2aWNlLmdldENvbmZpZygpLmFwcFR5cGU7XG4gICAgdGhpcy5odHRwQ2FuY2VsU2VydmljZS5jYW5jZWxQZW5kaW5nUmVxdWVzdHMoKTtcblxuICAgIGlmIChhcHBUeXBlID09PSBBcHBUeXBlLk1vYmlsZSkge1xuICAgICAgY3R4LmRpc3BhdGNoKG5ldyBMb2dvdXRNb2JpbGVBY3Rpb24oKSlcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgcGF0aCA9IGdldE5hdmlnYXRpb25Sb3V0ZShTZXNzaW9uU3RhdGUudGVuYW50SW5mbyhjdHguZ2V0U3RhdGUoKSksIGFwcFR5cGUsIFsnYWNjb3VudCcsICdsb2dpbiddKTtcbiAgICAgIGN0eC5kaXNwYXRjaChuZXcgTmF2aWdhdGUocGF0aCkpO1xuICAgIH1cblxuICAgIGlmIChsb2dvdXRBdWRpdCkge1xuICAgICAgY3R4LmRpc3BhdGNoKG5ldyBBdWRpdExvZ291dE1vYmlsZUFjdGlvbigpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5yb3V0ZXIuZXZlbnRzLnBpcGUoIC8vIG9ic2VydmUgYWxsIHJvdXRlIGV2ZW50c1xuICAgICAgZmlsdGVyKGUgPT4gZSBpbnN0YW5jZW9mIE5hdmlnYXRpb25FbmQgJiYgZS51cmwuaW5jbHVkZXMoJy9hY2NvdW50L2xvZ2luJykpLCAvLyBmaWx0ZXIgb25seSBOYXZpZ2F0aW9uRW5kIGV2ZW50c1xuICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICAgIGZpcnN0KCksXG4gICAgICBzd2l0Y2hNYXAoKCkgPT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5hdXRoU2VydmljZS5sb2dvdXQoKS5waXBlKFxuICAgICAgICAgIHRhcCgoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBzcGFya1Nlc3Npb25zID0gdGhpcy5nZXRTcGFya1Nlc3Npb25zKCk7XG4gICAgICAgICAgICBjb25zdCB0ZW5hbnQgPSBzcGFya1Nlc3Npb25zW3RoaXMuc2Vzc2lvblN0b3JhZ2VTZXJ2aWNlLnRlbmFudF07XG4gICAgICAgICAgICBjb25zdCBzc29FbmFibGVkID0gdGVuYW50Py51c2VyPy5zc29BdXRoZW50aWNhdGVkO1xuICAgICAgICAgICAgdGhpcy50cmFuc2xhdGVTZXJ2aWNlLnVzZShMT0NBTF9FTkdMSVNIX0xBTkdVQUdFKTtcbiAgICAgICAgICAgIGN0eC5kaXNwYXRjaChuZXcgVGVuYW50Q2xlYXJBY3Rpb24oKSk7XG4gICAgICAgICAgICBjdHguZGlzcGF0Y2gobmV3IFVubG9hZFBhcmtpbmdMb3RBY3Rpb24oKSk7XG4gICAgICAgICAgICBpZiAoc3NvRW5hYmxlZCkge1xuICAgICAgICAgICAgICBjb25zdCB0ZW5hbnROYW1lID0gdGVuYW50Py50ZW5hbnQ/LnRlbmFudE5hbWU7XG4gICAgICAgICAgICAgIGNvbnN0IHByb3ZpZGVyID0gdGVuYW50Py50ZW5hbnQucHJvcHM/LnNzbz8ucHJvdmlkZXI7XG4gICAgICAgICAgICAgIGlmIChwcm92aWRlciA9PSBTaW5nbGVTaWduT25Qcm92aWRlci5NaWNyb3NvZnQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm1zYWxTZXJ2aWNlLmxvZ291dFJlZGlyZWN0KHtcbiAgICAgICAgICAgICAgICAgIHBvc3RMb2dvdXRSZWRpcmVjdFVyaTogYC8ke3RlbmFudE5hbWV9YFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGVsc2UgaWYgKHByb3ZpZGVyID09IFNpbmdsZVNpZ25PblByb3ZpZGVyLlBpbmdGZWRlcmF0ZSkge1xuICAgICAgICAgICAgICAgIHRoaXMub3BlbklkQXV0aFNlcnZpY2Uuc2lnbk91dCgpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIC8vdGhpcy5zaWxlbnRMb2dPdXRNc2woY3R4LCBhcHBUeXBlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSk7XG4gICAgICB9KSk7XG4gIH1cblxuICBAQWN0aW9uKExvZ291dEFjdGlvbilcbiAgcHVibGljIG9uTG9nb3V0KGN0eDogU3RhdGVDb250ZXh0PFNlc3Npb25TdGF0ZU1vZGVsPiwgeyBsb2dvdXRBdWRpdCB9OiBMb2dvdXRBY3Rpb24pIHtcbiAgICBjb25zdCBhcHBUeXBlID0gdGhpcy5hcHBDb25maWdTZXJ2aWNlLmdldENvbmZpZygpLmFwcFR5cGU7XG4gICAgdGhpcy5odHRwQ2FuY2VsU2VydmljZS5jYW5jZWxQZW5kaW5nUmVxdWVzdHMoKTtcblxuICAgIGlmIChhcHBUeXBlID09PSBBcHBUeXBlLk1vYmlsZSkge1xuICAgICAgY3R4LmRpc3BhdGNoKG5ldyBMb2dvdXRNb2JpbGVBY3Rpb24oKSlcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgcGF0aCA9IGdldE5hdmlnYXRpb25Sb3V0ZShTZXNzaW9uU3RhdGUudGVuYW50SW5mbyhjdHguZ2V0U3RhdGUoKSksIGFwcFR5cGUsIFsnYWNjb3VudCcsICdsb2dpbiddKTtcbiAgICAgIGN0eC5kaXNwYXRjaChuZXcgTmF2aWdhdGUocGF0aCkpO1xuICAgIH1cblxuICAgIGlmIChsb2dvdXRBdWRpdCkge1xuICAgICAgY3R4LmRpc3BhdGNoKG5ldyBBdWRpdExvZ291dEFjdGlvbigpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5yb3V0ZXIuZXZlbnRzLnBpcGUoIC8vIG9ic2VydmUgYWxsIHJvdXRlIGV2ZW50c1xuICAgICAgZmlsdGVyKGUgPT4gZSBpbnN0YW5jZW9mIE5hdmlnYXRpb25FbmQgJiYgZS51cmwuaW5jbHVkZXMoJy9hY2NvdW50L2xvZ2luJykpLCAvLyBmaWx0ZXIgb25seSBOYXZpZ2F0aW9uRW5kIGV2ZW50c1xuICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICAgIGZpcnN0KCksXG4gICAgICBzd2l0Y2hNYXAoKCkgPT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5hdXRoU2VydmljZS5sb2dvdXQoKS5waXBlKFxuICAgICAgICAgIHRhcCgoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBzcGFya1Nlc3Npb25zID0gdGhpcy5nZXRTcGFya1Nlc3Npb25zKCk7XG4gICAgICAgICAgICBjb25zdCB0ZW5hbnQgPSBzcGFya1Nlc3Npb25zW3RoaXMuc2Vzc2lvblN0b3JhZ2VTZXJ2aWNlLnRlbmFudF07XG4gICAgICAgICAgICBjb25zdCBzc29FbmFibGVkID0gdGVuYW50Py51c2VyPy5zc29BdXRoZW50aWNhdGVkO1xuICAgICAgICAgICAgdGhpcy50cmFuc2xhdGVTZXJ2aWNlLnVzZShMT0NBTF9FTkdMSVNIX0xBTkdVQUdFKTtcbiAgICAgICAgICAgIGN0eC5kaXNwYXRjaChuZXcgVGVuYW50Q2xlYXJBY3Rpb24oKSk7XG4gICAgICAgICAgICBjdHguZGlzcGF0Y2gobmV3IFVubG9hZFBhcmtpbmdMb3RBY3Rpb24oKSk7XG4gICAgICAgICAgICBpZiAoc3NvRW5hYmxlZCkge1xuICAgICAgICAgICAgICBjb25zdCB0ZW5hbnROYW1lID0gdGVuYW50Py50ZW5hbnQ/LnRlbmFudE5hbWU7XG4gICAgICAgICAgICAgIGNvbnN0IHByb3ZpZGVyID0gdGVuYW50Py50ZW5hbnQucHJvcHM/LnNzbz8ucHJvdmlkZXI7XG4gICAgICAgICAgICAgIGlmIChwcm92aWRlciA9PSBTaW5nbGVTaWduT25Qcm92aWRlci5NaWNyb3NvZnQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm1zYWxTZXJ2aWNlLmxvZ291dFJlZGlyZWN0KHtcbiAgICAgICAgICAgICAgICAgIHBvc3RMb2dvdXRSZWRpcmVjdFVyaTogYC8ke3RlbmFudE5hbWV9YFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGVsc2UgaWYgKHByb3ZpZGVyID09IFNpbmdsZVNpZ25PblByb3ZpZGVyLlBpbmdGZWRlcmF0ZSkge1xuICAgICAgICAgICAgICAgIHRoaXMub3BlbklkQXV0aFNlcnZpY2Uuc2lnbk91dCgpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIC8vdGhpcy5zaWxlbnRMb2dPdXRNc2woY3R4LCBhcHBUeXBlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSk7XG4gICAgICB9KSk7XG4gIH1cblxuICBwcml2YXRlIGlzVGVuYW50VW5kZWZpbmVkID0gKHRlbmFudDogVGVuYW50SW5mbywgc2Vzc2lvbjogU3BhcmtTZXNzaW9uKSA9PiAhdGVuYW50IHx8ICFzZXNzaW9uO1xuXG4gIHNpbGVudExvZ091dE1zbChjdHg6IFN0YXRlQ29udGV4dDxTZXNzaW9uU3RhdGVNb2RlbD4sIGFwcFR5cGU6IEFwcFR5cGUpIHtcbiAgICBjb25zdCBjbGVhckNhY2hlUmVxdWVzdDogQ2xlYXJDYWNoZVJlcXVlc3QgPSB7XG4gICAgICBhY2NvdW50OiB0aGlzLm1zYWxTZXJ2aWNlLmluc3RhbmNlLmdldEFsbEFjY291bnRzKClbMF0sXG4gICAgfTtcblxuICAgIHRoaXMubXNhbFNlcnZpY2UuaW5zdGFuY2UuY2xlYXJDYWNoZShjbGVhckNhY2hlUmVxdWVzdCk7XG4gICAgbG9jYWxTdG9yYWdlLmNsZWFyKCk7XG4gICAgc2Vzc2lvblN0b3JhZ2UuY2xlYXIoKTtcblxuICAgIGNvbnN0IHBhdGggPSBnZXROYXZpZ2F0aW9uUm91dGUoU2Vzc2lvblN0YXRlLnRlbmFudEluZm8oY3R4LmdldFN0YXRlKCkpLCBhcHBUeXBlLCBbJ2FjY291bnQnLCAnbG9naW4nXSk7XG4gICAgY3R4LmRpc3BhdGNoKG5ldyBOYXZpZ2F0ZShwYXRoKSk7XG4gIH1cblxuICBAQWN0aW9uKFRlbmFudExvYWRBY3Rpb24pXG4gIHB1YmxpYyBvblRlbmFudExvYWRBY3Rpb24oY3R4OiBTdGF0ZUNvbnRleHQ8U2Vzc2lvblN0YXRlTW9kZWw+LCBhY3Rpb246IFRlbmFudExvYWRBY3Rpb24pIHtcbiAgICBjb25zdCB0ZW5hbnROYW1lID0gYWN0aW9uLnRlbmFudD8udGVuYW50TmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2gobmV3IFVwZGF0ZVRlbmFudEluZm9Qcm9wcyhhY3Rpb24udGVuYW50Py5wcm9wcykpO1xuICAgIGNvbnN0IHNwYXJrU2Vzc2lvbnMgPSB0aGlzLmdldFNwYXJrU2Vzc2lvbnMoKTtcbiAgICBpZiAoIXNwYXJrU2Vzc2lvbnNbdGVuYW50TmFtZV0pIHtcbiAgICAgIHNwYXJrU2Vzc2lvbnNbdGVuYW50TmFtZV0gPSB7IHVzZXI6IG51bGwsIGF1dGhUb2tlbjogbnVsbCwgcmVmcmVzaDogbnVsbCwgdGVuYW50OiBhY3Rpb24udGVuYW50IH07XG4gICAgfVxuXG4gICAgc3BhcmtTZXNzaW9uc1t0ZW5hbnROYW1lXS50ZW5hbnQgPSBhY3Rpb24udGVuYW50O1xuICAgIHRoaXMuc2V0U3BhcmtTZXNzaW9ucyhjdHgsIHNwYXJrU2Vzc2lvbnMpO1xuICB9XG5cbiAgQEFjdGlvbihUZW5hbnRDbGVhckFjdGlvbilcbiAgcHVibGljIG9uVGVuYW50Q2xlYXJBY3Rpb24oY3R4OiBTdGF0ZUNvbnRleHQ8U2Vzc2lvblN0YXRlTW9kZWw+LCBfOiBUZW5hbnRDbGVhckFjdGlvbikge1xuICAgIGNvbnN0IHNwYXJrU2Vzc2lvbnMgPSB0aGlzLmdldFNwYXJrU2Vzc2lvbnMoKTtcbiAgICBjb25zdCBzcGFya1Nlc3Npb24gPSBzcGFya1Nlc3Npb25zW3RoaXMuc2Vzc2lvblN0b3JhZ2VTZXJ2aWNlLnRlbmFudF07XG4gICAgaWYgKHNwYXJrU2Vzc2lvbikge1xuICAgICAgc3BhcmtTZXNzaW9uLnVzZXIgPSBudWxsO1xuICAgICAgc3BhcmtTZXNzaW9uLnJlZnJlc2ggPSBudWxsO1xuICAgICAgc3BhcmtTZXNzaW9uLmF1dGhUb2tlbiA9IG51bGw7XG4gICAgICBpZiAoc3BhcmtTZXNzaW9uLmFwcENvbmZpZ3VyYXRpb24pIHtcbiAgICAgICAgc3BhcmtTZXNzaW9uLmFwcENvbmZpZ3VyYXRpb24uYW5hbHl0aWNzVG9rZW4gPSAnJztcbiAgICAgICAgc3BhcmtTZXNzaW9uLmFwcENvbmZpZ3VyYXRpb24uZmVlZGJhY2tUb2tlbiA9ICcnO1xuICAgICAgfVxuICAgICAgdGhpcy5zZXRTcGFya1Nlc3Npb25zKGN0eCwgc3BhcmtTZXNzaW9ucyk7XG4gICAgfVxuICB9XG5cbiAgQEFjdGlvbihIZWFsdGhBY3Rpb24pXG4gIHB1YmxpYyBvbkhlYWx0aEFjdGlvbkFjdGlvbihjdHg6IFN0YXRlQ29udGV4dDxTZXNzaW9uU3RhdGVNb2RlbD4pIHtcbiAgICBjb25zdCBlbnZpcm9ubWVudFZhcmlhYmxlJCA9IHRoaXMuY29uZmlndXJhdGlvblNlcnZpY2VQcm94eS5nZXRIZWFsdGgoKTtcbiAgICByZXR1cm4gZW52aXJvbm1lbnRWYXJpYWJsZSQucGlwZSh0YXAoZW52aXJvbm1lbnRWYXJpYWJsZSA9PiB7XG4gICAgICB0aGlzLnNlc3Npb25TdG9yYWdlU2VydmljZS5zZXRJdGVtKEVOVklST05NRU5ULCBKU09OLnN0cmluZ2lmeShlbnZpcm9ubWVudFZhcmlhYmxlLmRhdGEuZW52aXJvbm1lbnQpKTtcbiAgICAgIGN0eC5wYXRjaFN0YXRlKHsgc2VydmVyRW52aXJvbm1lbnRNb2RlOiBlbnZpcm9ubWVudFZhcmlhYmxlLmRhdGEuZW52aXJvbm1lbnQgfSk7XG4gICAgfSkpO1xuICB9XG5cbiAgQEFjdGlvbihVcGRhdGVVc2VyU2V0dGluZ3NJblNlc3Npb25BY3Rpb24pXG4gIHB1YmxpYyBvblVwZGF0ZVVzZXJTZXR0aW5ncyhjdHg6IFN0YXRlQ29udGV4dDxTZXNzaW9uU3RhdGVNb2RlbD4sIHsgdXNlclNldHRpbmdzIH0pIHtcbiAgICBjb25zdCBzcGFya1Nlc3Npb25zID0gdGhpcy5nZXRTcGFya1Nlc3Npb25zKCk7XG4gICAgc3BhcmtTZXNzaW9uc1t0aGlzLnNlc3Npb25TdG9yYWdlU2VydmljZS50ZW5hbnRdLnVzZXIuc2V0dGluZ3MgPSB1c2VyU2V0dGluZ3M7XG4gICAgdGhpcy5zZXRTcGFya1Nlc3Npb25zKGN0eCwgc3BhcmtTZXNzaW9ucyk7XG4gIH1cblxuICBAQWN0aW9uKFVwZGF0ZVRlbmFudEluZm9Qcm9wcylcbiAgcHVibGljIG9uVXBkYXRlVGVuYW50SW5mb1Byb3BzKGN0eDogU3RhdGVDb250ZXh0PFNlc3Npb25TdGF0ZU1vZGVsPiwgeyBwcm9wcyB9KSB7XG4gICAgY29uc3Qgc3BhcmtTZXNzaW9ucyA9IHRoaXMuZ2V0U3BhcmtTZXNzaW9ucygpO1xuICAgIHNwYXJrU2Vzc2lvbnNbdGhpcy5zZXNzaW9uU3RvcmFnZVNlcnZpY2UudGVuYW50XS50ZW5hbnQucHJvcHMgPSBwcm9wcztcbiAgICB0aGlzLnNldFNwYXJrU2Vzc2lvbnMoY3R4LCBzcGFya1Nlc3Npb25zKTtcbiAgfVxuXG4gIEBBY3Rpb24oQXV0aGVudGljYXRlMkZBZm9yVXNlcilcbiAgcHVibGljIG9uQXV0aGVudGljYXRlMkZBZm9yVXNlcihjdHg6IFN0YXRlQ29udGV4dDxTZXNzaW9uU3RhdGVNb2RlbD4sIHsgfSkge1xuICAgIGNvbnN0IHNwYXJrU2Vzc2lvbnMgPSB0aGlzLmdldFNwYXJrU2Vzc2lvbnMoKTtcbiAgICBpZiAoc3BhcmtTZXNzaW9uc1t0aGlzLnNlc3Npb25TdG9yYWdlU2VydmljZS50ZW5hbnRdPy51c2VyKSB7XG4gICAgICBzcGFya1Nlc3Npb25zW3RoaXMuc2Vzc2lvblN0b3JhZ2VTZXJ2aWNlLnRlbmFudF0udXNlci5hdXRoZW50aWNhdGVkMkZBID0gdHJ1ZTtcbiAgICAgIHRoaXMuc2V0U3BhcmtTZXNzaW9ucyhjdHgsIHNwYXJrU2Vzc2lvbnMpO1xuICAgIH1cbiAgfVxuXG4gIEBBY3Rpb24oSW5pdFNlc3Npb25Gcm9tTG9jYWxTdG9yYWdlQWN0aW9uKVxuICBwdWJsaWMgb25Mb2FkU2Vzc2lvbkZyb21Mb2NhbFN0b3JhZ2VBY3Rpb24oY3R4OiBTdGF0ZUNvbnRleHQ8U2Vzc2lvblN0YXRlTW9kZWw+LCBfOiBJbml0U2Vzc2lvbkZyb21Mb2NhbFN0b3JhZ2VBY3Rpb24pIHtcbiAgICBjb25zdCBkYXRhID0gdGhpcy5sb2NhbFN0b3JhZ2VTZXJ2aWNlLmdldEl0ZW0oU0VTU0lPTik7XG4gICAgY29uc3Qgc2Vzc2lvbjoge1xuICAgICAgYXBwbGljYXRpb246IEFwcGxpY2F0aW9uSW5mbyxcbiAgICAgIHNwYXJrU2Vzc2lvbnM6IFN0cmluZ01hcDxTcGFya1Nlc3Npb24+LFxuICAgIH0gPSBkYXRhID8gSlNPTi5wYXJzZShkYXRhKSA6IGRlZmF1bHRTZXNzaW9uU3RhdGU7XG4gICAgY3R4LnBhdGNoU3RhdGUoe1xuICAgICAgYXBwbGljYXRpb246IHNlc3Npb24uYXBwbGljYXRpb24sXG4gICAgICBzcGFya1Nlc3Npb25zOiBzZXNzaW9uLnNwYXJrU2Vzc2lvbnNcbiAgICB9KTtcbiAgICBpZiAodGhpcy5zZXNzaW9uU3RvcmFnZVNlcnZpY2UudGVuYW50KSB7XG4gICAgICBjb25zdCBzcGFya1Nlc3Npb24gPSBzZXNzaW9uLnNwYXJrU2Vzc2lvbnNbdGhpcy5zZXNzaW9uU3RvcmFnZVNlcnZpY2UudGVuYW50XTtcbiAgICAgIHRoaXMuc2Vzc2lvblN0b3JhZ2VTZXJ2aWNlLnNldEF1dGhTZXNzaW9uKHNwYXJrU2Vzc2lvbj8uYXV0aFRva2VuLCBzcGFya1Nlc3Npb24/LnJlZnJlc2gpO1xuICAgIH1cbiAgfVxuXG4gIEBBY3Rpb24oTG9hZEFwcENvbmZpZ3VyYXRpb25BY3Rpb24pXG4gIHB1YmxpYyBvbkFwcENvbmZpZ3VyYXRpb25BY3Rpb24oY3R4OiBTdGF0ZUNvbnRleHQ8U2Vzc2lvblN0YXRlTW9kZWw+KSB7XG4gICAgY29uc3QgYXBwQ29uZmlndXJhdGlvbiQgPSB0aGlzLmNvbmZpZ3VyYXRpb25TZXJ2aWNlUHJveHkuZ2V0QXBwQ29uZmlndXJhdGlvbigpO1xuICAgIHJldHVybiBhcHBDb25maWd1cmF0aW9uJC5waXBlKHRhcChhcHBDb25maWd1cmF0aW9uID0+IHtcbiAgICAgIGNvbnN0IHNwYXJrU2Vzc2lvbnMgPSB0aGlzLmdldFNwYXJrU2Vzc2lvbnMoKTtcbiAgICAgIGlmICh0aGlzLnNlc3Npb25TdG9yYWdlU2VydmljZS50ZW5hbnQpIHtcbiAgICAgICAgc3BhcmtTZXNzaW9uc1t0aGlzLnNlc3Npb25TdG9yYWdlU2VydmljZS50ZW5hbnRdLmFwcENvbmZpZ3VyYXRpb24gPSBhcHBDb25maWd1cmF0aW9uLmRhdGE7XG4gICAgICAgIHRoaXMuc2V0U3BhcmtTZXNzaW9ucyhjdHgsIHNwYXJrU2Vzc2lvbnMpO1xuICAgICAgfVxuICAgIH0pKTtcbiAgfVxuXG4gIEBBY3Rpb24oTG9hZEFwcENvbmZpZ3VyYXRpb25Nb2JpbGVBY3Rpb24pXG4gIHB1YmxpYyBvbkxvYWRBcHBDb25maWd1cmF0aW9uTW9iaWxlQWN0aW9uKGN0eDogU3RhdGVDb250ZXh0PFNlc3Npb25TdGF0ZU1vZGVsPikge1xuICAgIGNvbnN0IGFwcENvbmZpZ3VyYXRpb24kID0gdGhpcy5tb2JpbGVTZXJ2aWNlUHJveHlJZGVudGl0eS5nZXRBcHBDb25maWd1cmF0aW9uTW9iaWxlKFZFUlNJT05fVjEpO1xuICAgIHJldHVybiBhcHBDb25maWd1cmF0aW9uJC5waXBlKHRhcChhcHBDb25maWd1cmF0aW9uID0+IHtcbiAgICAgIGNvbnN0IHNwYXJrU2Vzc2lvbnMgPSB0aGlzLmdldFNwYXJrU2Vzc2lvbnMoKTtcbiAgICAgIGlmICh0aGlzLnNlc3Npb25TdG9yYWdlU2VydmljZS50ZW5hbnQpIHtcbiAgICAgICAgc3BhcmtTZXNzaW9uc1t0aGlzLnNlc3Npb25TdG9yYWdlU2VydmljZS50ZW5hbnRdLmFwcENvbmZpZ3VyYXRpb24gPSBhcHBDb25maWd1cmF0aW9uLmRhdGE7XG4gICAgICAgIHRoaXMuc2V0U3BhcmtTZXNzaW9ucyhjdHgsIHNwYXJrU2Vzc2lvbnMpO1xuICAgICAgfVxuICAgIH0pKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0U3BhcmtTZXNzaW9ucyA9ICgpOiBTdHJpbmdNYXA8U3BhcmtTZXNzaW9uPiA9PiBKU09OLnBhcnNlKHRoaXMubG9jYWxTdG9yYWdlU2VydmljZS5nZXRJdGVtKFNFU1NJT04pKT8uc3BhcmtTZXNzaW9ucyA/PyB7fTtcbiAgcHJpdmF0ZSBzZXRTcGFya1Nlc3Npb25zID0gKGN0eDogU3RhdGVDb250ZXh0PFNlc3Npb25TdGF0ZU1vZGVsPiwgc3BhcmtTZXNzaW9uczogU3RyaW5nTWFwPFNwYXJrU2Vzc2lvbj4pOiB2b2lkID0+IHtcbiAgICBjb25zdCBhcHBsaWNhdGlvbiA9IGN0eC5nZXRTdGF0ZSgpLmFwcGxpY2F0aW9uO1xuICAgIHRoaXMubG9jYWxTdG9yYWdlU2VydmljZS5zZXRJdGVtKFNFU1NJT04sIEpTT04uc3RyaW5naWZ5KHtcbiAgICAgIGFwcGxpY2F0aW9uLFxuICAgICAgc3BhcmtTZXNzaW9uczogc3BhcmtTZXNzaW9uc1xuICAgIH0pKTtcbiAgICBjdHgucGF0Y2hTdGF0ZSh7IHNwYXJrU2Vzc2lvbnMgfSk7XG4gIH1cbn1cbiJdfQ==
|
|
457
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Vzc2lvbi5zdGF0ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NsaWVudC1zaGFyZWQtbGliL3NyYy9saWJyYXJpZXMvbW9kdWxlcy9hdXRoL3Nlc3Npb24uc3RhdGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxhQUFhLEVBQVUsTUFBTSxpQkFBaUIsQ0FBQztBQUl4RCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDL0MsT0FBTyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUF1QixNQUFNLGFBQWEsQ0FBQztBQUMzRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx3REFBd0QsQ0FBQztBQUU1RixPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUMxRSxPQUFPLEVBQUUsV0FBVyxFQUFFLGlCQUFpQixFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNyRyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDL0QsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBRXBELE9BQU8sRUFBbUUsb0JBQW9CLEVBQUUsZ0JBQWdCLEVBQXFCLE1BQU0sMkNBQTJDLENBQUM7QUFPdkwsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFFbkUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDNUQsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sOEJB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QUlWO0FBekZVLFlBQVk7SUFMeEIsS0FBSyxDQUFvQjtRQUN4QixJQUFJLEVBQUUsU0FBUztRQUNmLFFBQVEsRUFBRSxtQkFBbUI7S0FDOUIsQ0FBQztHQUVXLFlBQVksQ0FrWnhCO1NBbFpZLFlBQVk7NEZBQVosWUFBWTtrQkFEeEIsVUFBVTsraEJBNkZGLE9BQU8sTUFhUCxxQkFBcUIsTUEyQnJCLHVCQUF1QixNQU12QixlQUFlLE1BZWYsaUJBQWlCLE1BUWpCLGlCQUFpQixNQVlqQix1QkFBdUIsTUFZdkIsb0JBQW9CLE1BOENwQixRQUFRLE1BNkRSLGtCQUFrQixNQWFsQixtQkFBbUIsTUFnQm5CLG9CQUFvQixNQVNwQixvQkFBb0IsTUFPcEIsdUJBQXVCLE1BT3ZCLHdCQUF3QixNQVN4QixtQ0FBbUMsTUFpQm5DLHdCQUF3QixNQVl4QixrQ0FBa0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBOYXZpZ2F0aW9uRW5kLCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgTXNhbFNlcnZpY2UgfSBmcm9tICdAYXp1cmUvbXNhbC1hbmd1bGFyJztcbmltcG9ydCB7IENsZWFyQ2FjaGVSZXF1ZXN0IH0gZnJvbSAnQGF6dXJlL21zYWwtYnJvd3Nlcic7XG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyBOYXZpZ2F0ZSB9IGZyb20gJ0BuZ3hzL3JvdXRlci1wbHVnaW4nO1xuaW1wb3J0IHsgQWN0aW9uLCBTZWxlY3RvciwgU3RhdGUsIFN0YXRlQ29udGV4dCwgU3RvcmUgfSBmcm9tICdAbmd4cy9zdG9yZSc7XG5pbXBvcnQgeyBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgZmlsdGVyLCBmaXJzdCwgb2YsIHN3aXRjaE1hcCwgdGFwIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBNZXNzYWdlQmFyUG9zaXRpb24gfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL21lc3NhZ2UtYmFyL21lc3NhZ2UtYmFyLXBvc2l0aW9uLmVudW0nO1xuaW1wb3J0IHsgTWVzc2FnZUJhclNlcnZpY2UgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL21lc3NhZ2UtYmFyL21lc3NhZ2UtYmFyLnNlcnZpY2UnO1xuaW1wb3J0IHsgTE9DQUxfRU5HTElTSF9MQU5HVUFHRSB9IGZyb20gJy4uLy4uL2NvbnN0YW50cy9nbG9iYWwtY29uc3RhbnRzJztcbmltcG9ydCB7IEVOVklST05NRU5ULCBMT0dHRURfVEVOQU5UX0tFWSwgU0VTU0lPTiwgVEVOQU5UX0tFWSB9IGZyb20gJy4uLy4uL2NvbnN0YW50cy9rZXlzLWNvbnN0YW50cyc7XG5pbXBvcnQgeyBWRVJTSU9OX1YxIH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzL3ZlcnNpb24tY29uc3RhbnRzJztcbmltcG9ydCB7IEFwcFR5cGUgfSBmcm9tICcuLi8uLi9lbnVtcy9hcHAtdHlwZS5lbnVtJztcbmltcG9ydCB7IFNwYXJrU2Vzc2lvbiB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvc3Bhcmstc2Vzc2lvbi5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgQ29uZmlndXJhdGlvblNlcnZpY2VQcm94eSwgTW9iaWxlU2VydmljZVByb3h5LCBTZXR0aW5nc0NhdGVnb3J5LCBTaW5nbGVTaWduT25Qcm92aWRlciwgU3BhcmtTZXR0aW5nc0R0bywgVXNlcnNTZXJ2aWNlUHJveHkgfSBmcm9tICcuLi8uLi9zZXJ2aWNlLXByb3h5L2Nsb3VkLXNlcnZpY2UtcHJveGllcyc7XG5pbXBvcnQgeyBNb2JpbGVTZXJ2aWNlUHJveHlJZGVudGl0eSB9IGZyb20gJy4uLy4uL3NlcnZpY2UtcHJveHkvaWRlbnRpdHktc2VydmljZS1wcm94aWVzJztcbmltcG9ydCB7IEFwcENvbmZpZ1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9hcHAtY29uZmlnLnNlcnZpY2UnO1xuaW1wb3J0IHsgSHR0cENhbmNlbFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9odHRwLWNhbmNlbC5zZXJ2aWNlJztcbmltcG9ydCB7IExvY2FsU3RvcmFnZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9sb2NhbC1zdG9yYWdlLnNlcnZpY2UnO1xuaW1wb3J0IHsgT3BlbklkQXV0aFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9vcGVuaWQtYXV0aC5zZXJ2aWNlJztcbmltcG9ydCB7IFNlc3Npb25TdG9yYWdlU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3Nlc3Npb24tc3RvcmFnZS5zZXJ2aWNlJztcbmltcG9ydCB7IHBhcnNlQXBpRXJyb3JNZXNzYWdlIH0gZnJvbSAnLi4vLi4vdXRpbHMvYXBpLWhlbHBlci51dGlsJztcbmltcG9ydCB7IFN0cmluZ01hcCB9IGZyb20gJy4uLy4uL3V0aWxzL2xhbmcudXRpbCc7XG5pbXBvcnQgeyBnZXROYXZpZ2F0aW9uUm91dGUgfSBmcm9tICcuLi8uLi91dGlscy9yb3V0ZS51dGlsJztcbmltcG9ydCB7IFVubG9hZFBhcmtpbmdMb3RBY3Rpb24gfSBmcm9tICcuLi9mYWNpbGl0eS9mYWNpbGl0eS5hY3Rpb25zJztcbmltcG9ydCB7IEF1dGhTZXJ2aWNlIH0gZnJvbSAnLi9hdXRoLnNlcnZpY2UnO1xuaW1wb3J0IHsgQXBwbGljYXRpb25JbmZvIH0gZnJvbSAnLi9tb2RlbC9hcHBsaWNhdGlvbi1pbmZvLmludGVyZmFjZSc7XG5pbXBvcnQgeyBUZW5hbnRJbmZvIH0gZnJvbSAnLi9tb2RlbC90ZW5hbnQtaW5mby5pbnRlcmZhY2UnO1xuaW1wb3J0IHtcbiAgQXVkaXRMb2dvdXRBY3Rpb24sIEF1ZGl0TG9nb3V0TW9iaWxlQWN0aW9uLCBBdXRoZW50aWNhdGUyRkFmb3JVc2VyLCBIZWFsdGhBY3Rpb24sIEluaXRTZXNzaW9uRnJvbUxvY2FsU3RvcmFnZUFjdGlvbiwgTG9hZEFwcENvbmZpZ3VyYXRpb25BY3Rpb24sXG4gIExvYWRBcHBDb25maWd1cmF0aW9uTW9iaWxlQWN0aW9uLFxuICBMb2dpblJlcXVlc3RBY3Rpb24sIExvZ291dEFjdGlvbiwgTG9nb3V0TW9iaWxlQWN0aW9uLCBNb2JpbGVMb2dvdXRBY3Rpb24sIFNldFN0YXRlQWN0aW9uLCBTZXRUZW5hbnRVc2VyQWN0aW9uLCBTZXRVc2VyTmFtZUFjdGlvbixcbiAgVGVuYW50Q2xlYXJBY3Rpb24sIFRlbmFudExvYWRBY3Rpb24sIFVwZGF0ZUF1dGhUb2tlbkFjdGlvbiwgVXBkYXRlVGVuYW50SW5mb1Byb3BzLCBVcGRhdGVVc2VyU2V0dGluZ3NJblNlc3Npb25BY3Rpb25cbn0gZnJvbSAnLi9zZXNzaW9uLmFjdGlvbnMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFNlc3Npb25TdGF0ZU1vZGVsIHtcbiAgc3BhcmtTZXNzaW9uczogU3RyaW5nTWFwPFNwYXJrU2Vzc2lvbj47XG4gIGFwcGxpY2F0aW9uPzogQXBwbGljYXRpb25JbmZvO1xuICBzZXJ2ZXJFbnZpcm9ubWVudE1vZGU/OiBzdHJpbmc7XG59XG5cbmNvbnN0IGRlZmF1bHRTZXNzaW9uU3RhdGUgPSB7XG4gIHNwYXJrU2Vzc2lvbnM6IHt9LFxuICBhcHBsaWNhdGlvbjogeyB2ZXJzaW9uOiBudWxsLCByZWxlYXNlRGF0ZTogbnVsbCwgZmVhdHVyZXM6IHt9IH0sXG59O1xuXG5AU3RhdGU8U2Vzc2lvblN0YXRlTW9kZWw+KHtcbiAgbmFtZTogJ3Nlc3Npb24nLFxuICBkZWZhdWx0czogZGVmYXVsdFNlc3Npb25TdGF0ZSxcbn0pXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgU2Vzc2lvblN0YXRlIHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHJvdGVjdGVkIHNlc3Npb25TdG9yYWdlU2VydmljZTogU2Vzc2lvblN0b3JhZ2VTZXJ2aWNlLFxuICAgIHByaXZhdGUgbG9jYWxTdG9yYWdlU2VydmljZTogTG9jYWxTdG9yYWdlU2VydmljZSxcbiAgICBwcml2YXRlIHN0b3JlOiBTdG9yZSxcbiAgICBwcml2YXRlIGFwcENvbmZpZ1NlcnZpY2U6IEFwcENvbmZpZ1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBhdXRoU2VydmljZTogQXV0aFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBjb25maWd1cmF0aW9uU2VydmljZVByb3h5OiBDb25maWd1cmF0aW9uU2VydmljZVByb3h5LFxuICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsXG4gICAgcHJpdmF0ZSBodHRwQ2FuY2VsU2VydmljZTogSHR0cENhbmNlbFNlcnZpY2UsXG4gICAgcHJpdmF0ZSB0cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgbXNhbFNlcnZpY2U6IE1zYWxTZXJ2aWNlLFxuICAgIHByaXZhdGUgdXNlcnNTZXJ2aWNlUHJveHk6IFVzZXJzU2VydmljZVByb3h5LFxuICAgIHByaXZhdGUgb3BlbklkQXV0aFNlcnZpY2U6IE9wZW5JZEF1dGhTZXJ2aWNlLFxuICAgIHByaXZhdGUgbWVzc2FnZUJhclNlcnZpY2U6IE1lc3NhZ2VCYXJTZXJ2aWNlLFxuICAgIHByaXZhdGUgbW9iaWxlU2VydmljZVByb3h5OiBNb2JpbGVTZXJ2aWNlUHJveHksXG4gICAgcHJpdmF0ZSBtb2JpbGVTZXJ2aWNlUHJveHlJZGVudGl0eTogTW9iaWxlU2VydmljZVByb3h5SWRlbnRpdHkpIHtcbiAgfVxuXG4gIEBTZWxlY3RvcigpXG4gIHB1YmxpYyBzdGF0aWMgaXNVc2VyQXV0aGVudGljYXRlZFdpdGhTU08oc3RhdGU6IFNlc3Npb25TdGF0ZU1vZGVsKSB7XG4gICAgY29uc3QgdGVuYW50TmFtZSA9IHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oVEVOQU5UX0tFWSk7XG4gICAgcmV0dXJuIHN0YXRlLnNwYXJrU2Vzc2lvbnNbdGVuYW50TmFtZV0udXNlcj8uc3NvQXV0aGVudGljYXRlZDtcbiAgfVxuXG4gIEBTZWxlY3RvcigpXG4gIHB1YmxpYyBzdGF0aWMgaXNVc2VyQXV0aGVudGljYXRlZFdpdGgyRkEoc3RhdGU6IFNlc3Npb25TdGF0ZU1vZGVsKSB7XG4gICAgY29uc3QgdGVuYW50TmFtZSA9IHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oVEVOQU5UX0tFWSk7XG4gICAgcmV0dXJuIHN0YXRlLnNwYXJrU2Vzc2lvbnNbdGVuYW50TmFtZV0udXNlci5hdXRoZW50aWNhdGVkMkZBO1xuICB9XG5cbiAgQFNlbGVjdG9yKClcbiAgcHVibGljIHN0YXRpYyBzZXJ2ZXJFbnZpcm9ubWVudE1vZGUoc3RhdGU6IFNlc3Npb25TdGF0ZU1vZGVsKSB7XG4gICAgcmV0dXJuIHN0YXRlLnNlcnZlckVudmlyb25tZW50TW9kZTtcbiAgfVxuXG4gIEBTZWxlY3RvcigpXG4gIHB1YmxpYyBzdGF0aWMgdXNlckluZm8oc3RhdGU6IFNlc3Npb25TdGF0ZU1vZGVsKSB7XG4gICAgY29uc3QgdGVuYW50TmFtZSA9IHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oVEVOQU5UX0tFWSk7XG4gICAgcmV0dXJuIHN0YXRlLnNwYXJrU2Vzc2lvbnNbdGVuYW50TmFtZV0udXNlcjtcbiAgfVxuXG4gIEBTZWxlY3RvcigpXG4gIHB1YmxpYyBzdGF0aWMgbG9nZ2VkVXNlckluZm8oc3RhdGU6IFNlc3Npb25TdGF0ZU1vZGVsKSB7XG4gICAgY29uc3QgdGVuYW50TmFtZSA9IHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oTE9HR0VEX1RFTkFOVF9LRVkpO1xuICAgIHJldHVybiBzdGF0ZS5zcGFya1Nlc3Npb25zW3RlbmFudE5hbWVdLnVzZXI7XG4gIH1cblxuICBAU2VsZWN0b3IoKVxuICBwdWJsaWMgc3RhdGljIHRlbmFudEluZm8oc3RhdGU6IFNlc3Npb25TdGF0ZU1vZGVsKSB7XG4gICAgY29uc3QgdGVuYW50TmFtZSA9IHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oVEVOQU5UX0tFWSk7XG4gICAgcmV0dXJuIHN0YXRlLnNwYXJrU2Vzc2lvbnNbdGVuYW50TmFtZV0udGVuYW50O1xuICB9XG5cbiAgQFNlbGVjdG9yKClcbiAgcHVibGljIHN0YXRpYyB0aGlyZFBhcnR5VG9rZW4oc3RhdGU6IFNlc3Npb25TdGF0ZU1vZGVsKSB7XG4gICAgY29uc3QgdGVuYW50TmFtZSA9IHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oVEVOQU5UX0tFWSk7XG4gICAgcmV0dXJuIHN0YXRlLnNwYXJrU2Vzc2lvbnNbdGVuYW50TmFtZV0udGhpcmRQYXJ0eVRva2VuO1xuICB9XG5cbiAgQFNlbGVjdG9yKClcbiAgcHVibGljIHN0YXRpYyBsb2dnZWRUZW5hbnRJbmZvKHN0YXRlOiBTZXNzaW9uU3RhdGVNb2RlbCkge1xuICAgIGNvbnN0IHRlbmFudE5hbWUgPSBzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKExPR0dFRF9URU5BTlRfS0VZKTtcbiAgICByZXR1cm4gc3RhdGUuc3BhcmtTZXNzaW9uc1t0ZW5hbnROYW1lXS50ZW5hbnQ7XG4gIH1cblxuICBAU2VsZWN0b3IoKVxuICBwdWJsaWMgc3RhdGljIHVzZXJTZXR0aW5ncyhzdGF0ZTogU2Vzc2lvblN0YXRlTW9kZWwpOiBTcGFya1NldHRpbmdzRHRvW10ge1xuICAgIGNvbnN0IHRlbmFudE5hbWUgPSBzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKFRFTkFOVF9LRVkpO1xuICAgIHJldHVybiBzdGF0ZS5zcGFya1Nlc3Npb25zW3RlbmFudE5hbWVdLnVzZXIuc2V0dGluZ3MgYXMgU3BhcmtTZXR0aW5nc0R0b1tdO1xuICB9XG5cbiAgQFNlbGVjdG9yKClcbiAgcHVibGljIHN0YXRpYyBtYXBwZWRVc2VyU2V0dGluZ3Moc3RhdGU6IFNlc3Npb25TdGF0ZU1vZGVsKSB7XG4gICAgY29uc3QgdGVuYW50TmFtZSA9IHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oVEVOQU5UX0tFWSk7XG4gICAgcmV0dXJuIHN0YXRlLnNwYXJrU2Vzc2lvbnNbdGVuYW50TmFtZV0udXNlci5zZXR0aW5ncy5yZWR1Y2UoKHNldHRpbmdzTWFwLCB1c2VyU2V0dGluZykgPT5cbiAgICAgIHNldHRpbmdzTWFwLnNldCh1c2VyU2V0dGluZy5jYXRlZ29yeSwgSlNPTi5wYXJzZSh1c2VyU2V0dGluZy5zZXR0aW5nc0pzb24pKSwgbmV3IE1hcDxTZXR0aW5nc0NhdGVnb3J5LCBhbnk+KCkpO1xuICB9XG5cbiAgQFNlbGVjdG9yKClcbiAgcHVibGljIHN0YXRpYyBhcHBDb25maWd1cmF0aW9uKHN0YXRlOiBTZXNzaW9uU3RhdGVNb2RlbCkge1xuICAgIGNvbnN0IHRlbmFudE5hbWUgPSBzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKExPR0dFRF9URU5BTlRfS0VZKTtcbiAgICByZXR1cm4gc3RhdGUuc3BhcmtTZXNzaW9uc1t0ZW5hbnROYW1lXS5hcHBDb25maWd1cmF0aW9uO1xuICB9XG5cbiAgQFNlbGVjdG9yKClcbiAgcHVibGljIHN0YXRpYyBrZWVwTWVMb2dnZWRJbihzdGF0ZTogU2Vzc2lvblN0YXRlTW9kZWwpOiBib29sZWFuIHtcbiAgICBjb25zdCB0ZW5hbnROYW1lID0gc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbShURU5BTlRfS0VZKTtcbiAgICByZXR1cm4gc3RhdGUuc3BhcmtTZXNzaW9uc1t0ZW5hbnROYW1lXS51c2VyLmtlZXBNZUxvZ2dlZEluID8/IGZhbHNlO1xuICB9XG5cbiAgQEFjdGlvbihMb2dpblJlcXVlc3RBY3Rpb24pXG4gIHB1YmxpYyBvbkxvZ2luKGN0eDogU3RhdGVDb250ZXh0PFNlc3Npb25TdGF0ZU1vZGVsPiwgYWN0aW9uOiBMb2dpblJlcXVlc3RBY3Rpb24pIHtcbiAgICByZXR1cm4gdGhpcy5hdXRoU2VydmljZS5sb2dpbihhY3Rpb24pLnBpcGUodGFwKHtcbiAgICAgIG5leHQ6IHNwYXJrU2Vzc2lvbiA9PiB7XG4gICAgICAgIHRoaXMuU2V0VGVuYW50VXNlckFjdGlvbihjdHgsIHNwYXJrU2Vzc2lvbik7XG4gICAgICB9LFxuICAgICAgZXJyb3I6IGUgPT4ge1xuICAgICAgICBjb25zdCBtZXNzYWdlID0gcGFyc2VBcGlFcnJvck1lc3NhZ2UoZSk7XG4gICAgICAgIHRoaXMubWVzc2FnZUJhclNlcnZpY2UuZXJyb3IodGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQobWVzc2FnZSksIHsgcG9zaXRpb246IE1lc3NhZ2VCYXJQb3NpdGlvbi5TdGF0aWMgfSk7XG4gICAgICB9XG4gICAgfSkpO1xuICB9XG5cbiAgQEFjdGlvbihTZXRUZW5hbnRVc2VyQWN0aW9uKVxuICBwdWJsaWMgb25TZXRUZW5hbnRVc2VyQWN0aW9uKGN0eDogU3RhdGVDb250ZXh0PFNlc3Npb25TdGF0ZU1vZGVsPiwgeyBzcGFya1Nlc3Npb24gfTogU2V0VGVuYW50VXNlckFjdGlvbikge1xuICAgIHRoaXMuU2V0VGVuYW50VXNlckFjdGlvbihjdHgsIHNwYXJrU2Vzc2lvbik7XG4gIH1cblxuICBwcml2YXRlIFNldFRlbmFudFVzZXJBY3Rpb24oY3R4OiBTdGF0ZUNvbnRleHQ8U2Vzc2lvblN0YXRlTW9kZWw+LCBzcGFya1Nlc3Npb246IFNwYXJrU2Vzc2lvbikge1xuICAgIGNvbnN0IHNwYXJrU2Vzc2lvbnMgPSB0aGlzLmdldFNwYXJrU2Vzc2lvbnMoKTtcbiAgICBjb25zdCB7IHVzZXIsIGF1dGhUb2tlbiwgcmVmcmVzaCwgdGhpcmRQYXJ0eVRva2VuIH0gPSBzcGFya1Nlc3Npb247XG4gICAgdXNlci5zZXR0aW5ncyA9IHVzZXIuc2V0dGluZ3MubWFwKHMgPT4ge1xuICAgICAgcmV0dXJuIG5ldyBTcGFya1NldHRpbmdzRHRvKHtcbiAgICAgICAgY2F0ZWdvcnk6IHMuY2F0ZWdvcnksXG4gICAgICAgIHNldHRpbmdzSnNvbjogSlNPTi5wYXJzZShzLnNldHRpbmdzSnNvbilcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgaWYgKCFzcGFya1Nlc3Npb25zW3RoaXMuc2Vzc2lvblN0b3JhZ2VTZXJ2aWNlLnRlbmFudF0pIHtcbiAgICAgIHNwYXJrU2Vzc2lvbnNbdGhpcy5zZXNzaW9uU3RvcmFnZVNlcnZpY2UudGVuYW50XSA9IHsgdXNlciwgYXV0aFRva2VuLCByZWZyZXNoLCB0ZW5hbnQ6IG51bGwsIHRoaXJkUGFydHlUb2tlbiB9O1xuICAgIH0gZWxzZSB7XG4gICAgICBzcGFya1Nlc3Npb25zW3RoaXMuc2Vzc2lvblN0b3JhZ2VTZXJ2aWNlLnRlbmFudF0udXNlciA9IHVzZXI7XG4gICAgICBzcGFya1Nlc3Npb25zW3RoaXMuc2Vzc2lvblN0b3JhZ2VTZXJ2aWNlLnRlbmFudF0uYXV0aFRva2VuID0gYXV0aFRva2VuO1xuICAgICAgc3BhcmtTZXNzaW9uc1t0aGlzLnNlc3Npb25TdG9yYWdlU2VydmljZS50ZW5hbnRdLnJlZnJlc2ggPSByZWZyZXNoO1xuICAgICAgc3BhcmtTZXNzaW9uc1t0aGlzLnNlc3Npb25TdG9yYWdlU2VydmljZS50ZW5hbnRdLnRoaXJkUGFydHlUb2tlbiA9IHRoaXJkUGFydHlUb2tlbjtcbiAgICB9XG5cbiAgICB0aGlzLnNldFNwYXJrU2Vzc2lvbnMoY3R4LCBzcGFya1Nlc3Npb25zKTtcbiAgfVxuXG4gIEBBY3Rpb24oVXBkYXRlQXV0aFRva2VuQWN0aW9uKVxuICBwdWJsaWMgb25VcGRhdGVBdXRoVG9rZW5BY3Rpb24oY3R4OiBTdGF0ZUNvbnRleHQ8U2Vzc2lvblN0YXRlTW9kZWw+LCBhY3Rpb246IFVwZGF0ZUF1dGhUb2tlbkFjdGlvbikge1xuICAgIGNvbnN0IHNwYXJrU2Vzc2lvbnMgPSB0aGlzLmdldFNwYXJrU2Vzc2lvbnMoKTtcbiAgICBzcGFya1Nlc3Npb25zW3RoaXMuc2Vzc2lvblN0b3JhZ2VTZXJ2aWNlLnRlbmFudF0uYXV0aFRva2VuID0gYWN0aW9uLmF1dGhUb2tlbjtcbiAgfVxuXG4gIEBBY3Rpb24oU2V0U3RhdGVBY3Rpb24pXG4gIHB1YmxpYyBzZXRTZXNzaW9uU3RhdGUoY3R4OiBTdGF0ZUNvbnRleHQ8U2Vzc2lvblN0YXRlTW9kZWw+LCBhY3Rpb246IFNldFN0YXRlQWN0aW9uKSB7XG4gICAgY29uc3Qgc3BhcmtTZXNzaW9ucyA9IHRoaXMuZ2V0U3BhcmtTZXNzaW9ucygpO1xuICAgIHNwYXJrU2Vzc2lvbnNbdGhpcy5zZXNzaW9uU3RvcmFnZVNlcnZpY2UudGVuYW50XS5hdXRoVG9rZW4gPSBhY3Rpb24uYXV0aFRva2VuO1xuICAgIHNwYXJrU2Vzc2lvbnNbdGhpcy5zZXNzaW9uU3RvcmFnZVNlcnZpY2UudGVuYW50XS5yZWZyZXNoID0gYWN0aW9uLnJlZnJlc2g7XG5cbiAgICBjb25zdCBhcHBsaWNhdGlvbjogQXBwbGljYXRpb25JbmZvID0ge1xuICAgICAgdmVyc2lvbjogdGhpcy5hcHBDb25maWdTZXJ2aWNlLmdldENvbmZpZygpLnBhY2thZ2VJbmZvLnZlcnNpb24sXG4gICAgICByZWxlYXNlRGF0ZTogbnVsbCxcbiAgICAgIGZlYXR1cmVzOiB7fSxcbiAgICB9O1xuICAgIGN0eC5wYXRjaFN0YXRlKHsgYXBwbGljYXRpb24gfSk7XG4gICAgdGhpcy5zZXRTcGFya1Nlc3Npb25zKGN0eCwgc3BhcmtTZXNzaW9ucyk7XG4gIH1cblxuICBAQWN0aW9uKFNldFVzZXJOYW1lQWN0aW9uKVxuICBwdWJsaWMgU2V0VXNlck5hbWVBY3Rpb24oY3R4OiBTdGF0ZUNvbnRleHQ8U2Vzc2lvblN0YXRlTW9kZWw+LCBhY3Rpb246IFNldFVzZXJOYW1lQWN0aW9uKSB7XG4gICAgY29uc3QgdGVuYW50TmFtZSA9IHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oVEVOQU5UX0tFWSk7XG4gICAgY29uc3Qgc3BhcmtTZXNzaW9ucyA9IHRoaXMuZ2V0U3BhcmtTZXNzaW9ucygpO1xuICAgIHNwYXJrU2Vzc2lvbnNbdGVuYW50TmFtZV0udXNlci5kaXNwbGF5TmFtZSA9IGFjdGlvbi51c2VyTmFtZTtcbiAgICB0aGlzLnNldFNwYXJrU2Vzc2lvbnMoY3R4LCBzcGFya1Nlc3Npb25zKTtcbiAgfVxuXG4gIEBBY3Rpb24oQXVkaXRMb2dvdXRBY3Rpb24pXG4gIHB1YmxpYyBBdWRpdExvZ291dEFjdGlvbihjdHg6IFN0YXRlQ29udGV4dDxTZXNzaW9uU3RhdGVNb2RlbD4sIGFjdGlvbjogQXVkaXRMb2dvdXRBY3Rpb24pIHtcbiAgICBjb25zdCBzcGFya1Nlc3Npb25zID0gdGhpcy5nZXRTcGFya1Nlc3Npb25zKCk7XG4gICAgY29uc3QgdGVuYW50TmFtZSA9IHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oVEVOQU5UX0tFWSk7XG4gICAgY29uc3QgdGVuYW50SW5mbyA9IGN0eC5nZXRTdGF0ZSgpLnNwYXJrU2Vzc2lvbnNbdGVuYW50TmFtZV0udGVuYW50O1xuICAgIGlmICh0aGlzLmlzVGVuYW50VW5kZWZpbmVkKHRlbmFudEluZm8sIHNwYXJrU2Vzc2lvbnNbdGVuYW50TmFtZV0pKSB7XG4gICAgICByZXR1cm4gb2YobnVsbCk7IC8vIEhhbmRsZSB0aGUgY2FzZSB3aGVyZSB0ZW5hbnQgb3Igc3BhcmtTZXNzaW9ucyBhcmUgdW5kZWZpbmVkXG4gICAgfVxuICAgIHJldHVybiB0aGlzLnVzZXJzU2VydmljZVByb3h5LmF1ZGl0TG9nb3V0KCkucGlwZShcbiAgICAgIHRhcCgoKSA9PiB7IH0pKTtcbiAgfVxuXG4gIEBBY3Rpb24oQXVkaXRMb2dvdXRNb2JpbGVBY3Rpb24pXG4gIHB1YmxpYyBBdWRpdExvZ291dE1vYmlsZUFjdGlvbihjdHg6IFN0YXRlQ29udGV4dDxTZXNzaW9uU3RhdGVNb2RlbD4sIGFjdGlvbjogQXVkaXRMb2dvdXRNb2JpbGVBY3Rpb24pIHtcbiAgICBjb25zdCBzcGFya1Nlc3Npb25zID0gdGhpcy5nZXRTcGFya1Nlc3Npb25zKCk7XG4gICAgY29uc3QgdGVuYW50TmFtZSA9IHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oVEVOQU5UX0tFWSk7XG4gICAgY29uc3QgdGVuYW50SW5mbyA9IGN0eC5nZXRTdGF0ZSgpLnNwYXJrU2Vzc2lvbnNbdGVuYW50TmFtZV0udGVuYW50O1xuICAgIGlmICh0aGlzLmlzVGVuYW50VW5kZWZpbmVkKHRlbmFudEluZm8sIHNwYXJrU2Vzc2lvbnNbdGVuYW50TmFtZV0pKSB7XG4gICAgICByZXR1cm4gb2YobnVsbCk7IC8vIEhhbmRsZSB0aGUgY2FzZSB3aGVyZSB0ZW5hbnQgb3Igc3BhcmtTZXNzaW9ucyBhcmUgdW5kZWZpbmVkXG4gICAgfVxuICAgIHJldHVybiB0aGlzLm1vYmlsZVNlcnZpY2VQcm94eS5tb2JpbGVBdWRpdExvZ291dChWRVJTSU9OX1YxKS5waXBlKFxuICAgICAgdGFwKCgpID0+IHsgfSkpO1xuICB9XG5cbiAgQEFjdGlvbihNb2JpbGVMb2dvdXRBY3Rpb24pXG4gIHB1YmxpYyBvbk1vYmlsZUxvZ291dEFjdGlvbihjdHg6IFN0YXRlQ29udGV4dDxTZXNzaW9uU3RhdGVNb2RlbD4sIHsgbG9nb3V0QXVkaXQgfTogTW9iaWxlTG9nb3V0QWN0aW9uKSB7XG4gICAgY29uc3QgYXBwVHlwZSA9IHRoaXMuYXBwQ29uZmlnU2VydmljZS5nZXRDb25maWcoKS5hcHBUeXBlO1xuICAgIHRoaXMuaHR0cENhbmNlbFNlcnZpY2UuY2FuY2VsUGVuZGluZ1JlcXVlc3RzKCk7XG5cbiAgICBpZiAoYXBwVHlwZSA9PT0gQXBwVHlwZS5Nb2JpbGUpIHtcbiAgICAgIGN0eC5kaXNwYXRjaChuZXcgTG9nb3V0TW9iaWxlQWN0aW9uKCkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBwYXRoID0gZ2V0TmF2aWdhdGlvblJvdXRlKFNlc3Npb25TdGF0ZS50ZW5hbnRJbmZvKGN0eC5nZXRTdGF0ZSgpKSwgYXBwVHlwZSwgWydhY2NvdW50JywgJ2xvZ2luJ10pO1xuICAgICAgY3R4LmRpc3BhdGNoKG5ldyBOYXZpZ2F0ZShwYXRoKSk7XG4gICAgfVxuXG4gICAgaWYgKGxvZ291dEF1ZGl0KSB7XG4gICAgICBjdHguZGlzcGF0Y2gobmV3IEF1ZGl0TG9nb3V0TW9iaWxlQWN0aW9uKCkpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnJvdXRlci5ldmVudHMucGlwZSggLy8gb2JzZXJ2ZSBhbGwgcm91dGUgZXZlbnRzXG4gICAgICBmaWx0ZXIoZSA9PiBlIGluc3RhbmNlb2YgTmF2aWdhdGlvbkVuZCAmJiBlLnVybC5pbmNsdWRlcygnL2FjY291bnQvbG9naW4nKSksIC8vIGZpbHRlciBvbmx5IE5hdmlnYXRpb25FbmQgZXZlbnRzXG4gICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgICAgZmlyc3QoKSxcbiAgICAgIHN3aXRjaE1hcCgoKSA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLmF1dGhTZXJ2aWNlLmxvZ291dCgpLnBpcGUoXG4gICAgICAgICAgdGFwKCgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHNwYXJrU2Vzc2lvbnMgPSB0aGlzLmdldFNwYXJrU2Vzc2lvbnMoKTtcbiAgICAgICAgICAgIGNvbnN0IHRlbmFudCA9IHNwYXJrU2Vzc2lvbnNbdGhpcy5zZXNzaW9uU3RvcmFnZVNlcnZpY2UudGVuYW50XTtcbiAgICAgICAgICAgIGNvbnN0IHNzb0VuYWJsZWQgPSB0ZW5hbnQ/LnVzZXI/LnNzb0F1dGhlbnRpY2F0ZWQ7XG4gICAgICAgICAgICB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UudXNlKExPQ0FMX0VOR0xJU0hfTEFOR1VBR0UpO1xuICAgICAgICAgICAgY3R4LmRpc3BhdGNoKG5ldyBUZW5hbnRDbGVhckFjdGlvbigpKTtcbiAgICAgICAgICAgIGN0eC5kaXNwYXRjaChuZXcgVW5sb2FkUGFya2luZ0xvdEFjdGlvbigpKTtcbiAgICAgICAgICAgIGlmIChzc29FbmFibGVkKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHRlbmFudE5hbWUgPSB0ZW5hbnQ/LnRlbmFudD8udGVuYW50TmFtZTtcbiAgICAgICAgICAgICAgY29uc3QgcHJvdmlkZXIgPSB0ZW5hbnQ/LnRlbmFudC5wcm9wcz8uc3NvPy5wcm92aWRlcjtcbiAgICAgICAgICAgICAgaWYgKHByb3ZpZGVyID09IFNpbmdsZVNpZ25PblByb3ZpZGVyLk1pY3Jvc29mdCkge1xuICAgICAgICAgICAgICAgIHRoaXMubXNhbFNlcnZpY2UubG9nb3V0UmVkaXJlY3Qoe1xuICAgICAgICAgICAgICAgICAgcG9zdExvZ291dFJlZGlyZWN0VXJpOiBgLyR7dGVuYW50TmFtZX1gXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgZWxzZSBpZiAocHJvdmlkZXIgPT0gU2luZ2xlU2lnbk9uUHJvdmlkZXIuUGluZ0ZlZGVyYXRlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5vcGVuSWRBdXRoU2VydmljZS5zaWduT3V0KCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgLy90aGlzLnNpbGVudExvZ091dE1zbChjdHgsIGFwcFR5cGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pKTtcbiAgICAgIH0pKTtcbiAgfVxuXG4gIEBBY3Rpb24oTG9nb3V0QWN0aW9uKVxuICBwdWJsaWMgb25Mb2dvdXQoY3R4OiBTdGF0ZUNvbnRleHQ8U2Vzc2lvblN0YXRlTW9kZWw+LCB7IGxvZ291dEF1ZGl0IH06IExvZ291dEFjdGlvbikge1xuICAgIGNvbnN0IGFwcFR5cGUgPSB0aGlzLmFwcENvbmZpZ1NlcnZpY2UuZ2V0Q29uZmlnKCkuYXBwVHlwZTtcbiAgICB0aGlzLmh0dHBDYW5jZWxTZXJ2aWNlLmNhbmNlbFBlbmRpbmdSZXF1ZXN0cygpO1xuXG4gICAgaWYgKGFwcFR5cGUgPT09IEFwcFR5cGUuTW9iaWxlKSB7XG4gICAgICBjdHguZGlzcGF0Y2gobmV3IExvZ291dE1vYmlsZUFjdGlvbigpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgcGF0aCA9IGdldE5hdmlnYXRpb25Sb3V0ZShTZXNzaW9uU3RhdGUudGVuYW50SW5mbyhjdHguZ2V0U3RhdGUoKSksIGFwcFR5cGUsIFsnYWNjb3VudCcsICdsb2dpbiddKTtcbiAgICAgIGN0eC5kaXNwYXRjaChuZXcgTmF2aWdhdGUocGF0aCkpO1xuICAgIH1cblxuICAgIGlmIChsb2dvdXRBdWRpdCkge1xuICAgICAgY3R4LmRpc3BhdGNoKG5ldyBBdWRpdExvZ291dEFjdGlvbigpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5yb3V0ZXIuZXZlbnRzLnBpcGUoIC8vIG9ic2VydmUgYWxsIHJvdXRlIGV2ZW50c1xuICAgICAgZmlsdGVyKGUgPT4gZSBpbnN0YW5jZW9mIE5hdmlnYXRpb25FbmQgJiYgZS51cmwuaW5jbHVkZXMoJy9hY2NvdW50L2xvZ2luJykpLCAvLyBmaWx0ZXIgb25seSBOYXZpZ2F0aW9uRW5kIGV2ZW50c1xuICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICAgIGZpcnN0KCksXG4gICAgICBzd2l0Y2hNYXAoKCkgPT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5hdXRoU2VydmljZS5sb2dvdXQoKS5waXBlKFxuICAgICAgICAgIHRhcCgoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBzcGFya1Nlc3Npb25zID0gdGhpcy5nZXRTcGFya1Nlc3Npb25zKCk7XG4gICAgICAgICAgICBjb25zdCB0ZW5hbnQgPSBzcGFya1Nlc3Npb25zW3RoaXMuc2Vzc2lvblN0b3JhZ2VTZXJ2aWNlLnRlbmFudF07XG4gICAgICAgICAgICBjb25zdCBzc29FbmFibGVkID0gdGVuYW50Py51c2VyPy5zc29BdXRoZW50aWNhdGVkO1xuICAgICAgICAgICAgdGhpcy50cmFuc2xhdGVTZXJ2aWNlLnVzZShMT0NBTF9FTkdMSVNIX0xBTkdVQUdFKTtcbiAgICAgICAgICAgIGN0eC5kaXNwYXRjaChuZXcgVGVuYW50Q2xlYXJBY3Rpb24oKSk7XG4gICAgICAgICAgICBjdHguZGlzcGF0Y2gobmV3IFVubG9hZFBhcmtpbmdMb3RBY3Rpb24oKSk7XG4gICAgICAgICAgICBpZiAoc3NvRW5hYmxlZCkge1xuICAgICAgICAgICAgICBjb25zdCB0ZW5hbnROYW1lID0gdGVuYW50Py50ZW5hbnQ/LnRlbmFudE5hbWU7XG4gICAgICAgICAgICAgIGNvbnN0IHByb3ZpZGVyID0gdGVuYW50Py50ZW5hbnQucHJvcHM/LnNzbz8ucHJvdmlkZXI7XG4gICAgICAgICAgICAgIGlmIChwcm92aWRlciA9PSBTaW5nbGVTaWduT25Qcm92aWRlci5NaWNyb3NvZnQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm1zYWxTZXJ2aWNlLmxvZ291dFJlZGlyZWN0KHtcbiAgICAgICAgICAgICAgICAgIHBvc3RMb2dvdXRSZWRpcmVjdFVyaTogYC8ke3RlbmFudE5hbWV9YFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGVsc2UgaWYgKHByb3ZpZGVyID09IFNpbmdsZVNpZ25PblByb3ZpZGVyLlBpbmdGZWRlcmF0ZSkge1xuICAgICAgICAgICAgICAgIHRoaXMub3BlbklkQXV0aFNlcnZpY2Uuc2lnbk91dCgpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIC8vdGhpcy5zaWxlbnRMb2dPdXRNc2woY3R4LCBhcHBUeXBlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSk7XG4gICAgICB9KSk7XG4gIH1cblxuICBwcml2YXRlIGlzVGVuYW50VW5kZWZpbmVkID0gKHRlbmFudDogVGVuYW50SW5mbywgc2Vzc2lvbjogU3BhcmtTZXNzaW9uKSA9PiAhdGVuYW50IHx8ICFzZXNzaW9uO1xuXG4gIHNpbGVudExvZ091dE1zbChjdHg6IFN0YXRlQ29udGV4dDxTZXNzaW9uU3RhdGVNb2RlbD4sIGFwcFR5cGU6IEFwcFR5cGUpIHtcbiAgICBjb25zdCBjbGVhckNhY2hlUmVxdWVzdDogQ2xlYXJDYWNoZVJlcXVlc3QgPSB7XG4gICAgICBhY2NvdW50OiB0aGlzLm1zYWxTZXJ2aWNlLmluc3RhbmNlLmdldEFsbEFjY291bnRzKClbMF0sXG4gICAgfTtcblxuICAgIHRoaXMubXNhbFNlcnZpY2UuaW5zdGFuY2UuY2xlYXJDYWNoZShjbGVhckNhY2hlUmVxdWVzdCk7XG4gICAgbG9jYWxTdG9yYWdlLmNsZWFyKCk7XG4gICAgc2Vzc2lvblN0b3JhZ2UuY2xlYXIoKTtcblxuICAgIGNvbnN0IHBhdGggPSBnZXROYXZpZ2F0aW9uUm91dGUoU2Vzc2lvblN0YXRlLnRlbmFudEluZm8oY3R4LmdldFN0YXRlKCkpLCBhcHBUeXBlLCBbJ2FjY291bnQnLCAnbG9naW4nXSk7XG4gICAgY3R4LmRpc3BhdGNoKG5ldyBOYXZpZ2F0ZShwYXRoKSk7XG4gIH1cblxuICBAQWN0aW9uKFRlbmFudExvYWRBY3Rpb24pXG4gIHB1YmxpYyBvblRlbmFudExvYWRBY3Rpb24oY3R4OiBTdGF0ZUNvbnRleHQ8U2Vzc2lvblN0YXRlTW9kZWw+LCBhY3Rpb246IFRlbmFudExvYWRBY3Rpb24pIHtcbiAgICBjb25zdCB0ZW5hbnROYW1lID0gYWN0aW9uLnRlbmFudD8udGVuYW50TmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgIGNvbnN0IHNwYXJrU2Vzc2lvbnMgPSB0aGlzLmdldFNwYXJrU2Vzc2lvbnMoKTtcbiAgICBpZiAoIXNwYXJrU2Vzc2lvbnNbdGVuYW50TmFtZV0pIHtcbiAgICAgIHNwYXJrU2Vzc2lvbnNbdGVuYW50TmFtZV0gPSB7IHVzZXI6IG51bGwsIGF1dGhUb2tlbjogbnVsbCwgcmVmcmVzaDogbnVsbCwgdGVuYW50OiBhY3Rpb24udGVuYW50IH07XG4gICAgfSBlbHNlIHtcbiAgICAgIHNwYXJrU2Vzc2lvbnNbdGVuYW50TmFtZV0udGVuYW50ID0gYWN0aW9uLnRlbmFudDtcbiAgICB9XG5cbiAgICB0aGlzLnNldFNwYXJrU2Vzc2lvbnMoY3R4LCBzcGFya1Nlc3Npb25zKTtcbiAgfVxuXG4gIEBBY3Rpb24oVGVuYW50Q2xlYXJBY3Rpb24pXG4gIHB1YmxpYyBvblRlbmFudENsZWFyQWN0aW9uKGN0eDogU3RhdGVDb250ZXh0PFNlc3Npb25TdGF0ZU1vZGVsPiwgXzogVGVuYW50Q2xlYXJBY3Rpb24pIHtcbiAgICBjb25zdCBzcGFya1Nlc3Npb25zID0gdGhpcy5nZXRTcGFya1Nlc3Npb25zKCk7XG4gICAgY29uc3Qgc3BhcmtTZXNzaW9uID0gc3BhcmtTZXNzaW9uc1t0aGlzLnNlc3Npb25TdG9yYWdlU2VydmljZS50ZW5hbnRdO1xuICAgIGlmIChzcGFya1Nlc3Npb24pIHtcbiAgICAgIHNwYXJrU2Vzc2lvbi51c2VyID0gbnVsbDtcbiAgICAgIHNwYXJrU2Vzc2lvbi5yZWZyZXNoID0gbnVsbDtcbiAgICAgIHNwYXJrU2Vzc2lvbi5hdXRoVG9rZW4gPSBudWxsO1xuICAgICAgaWYgKHNwYXJrU2Vzc2lvbi5hcHBDb25maWd1cmF0aW9uKSB7XG4gICAgICAgIHNwYXJrU2Vzc2lvbi5hcHBDb25maWd1cmF0aW9uLmFuYWx5dGljc1Rva2VuID0gJyc7XG4gICAgICAgIHNwYXJrU2Vzc2lvbi5hcHBDb25maWd1cmF0aW9uLmZlZWRiYWNrVG9rZW4gPSAnJztcbiAgICAgIH1cbiAgICAgIHRoaXMuc2V0U3BhcmtTZXNzaW9ucyhjdHgsIHNwYXJrU2Vzc2lvbnMpO1xuICAgIH1cbiAgfVxuXG4gIEBBY3Rpb24oSGVhbHRoQWN0aW9uKVxuICBwdWJsaWMgb25IZWFsdGhBY3Rpb25BY3Rpb24oY3R4OiBTdGF0ZUNvbnRleHQ8U2Vzc2lvblN0YXRlTW9kZWw+KSB7XG4gICAgY29uc3QgZW52aXJvbm1lbnRWYXJpYWJsZSQgPSB0aGlzLmNvbmZpZ3VyYXRpb25TZXJ2aWNlUHJveHkuZ2V0SGVhbHRoKCk7XG4gICAgcmV0dXJuIGVudmlyb25tZW50VmFyaWFibGUkLnBpcGUodGFwKGVudmlyb25tZW50VmFyaWFibGUgPT4ge1xuICAgICAgdGhpcy5zZXNzaW9uU3RvcmFnZVNlcnZpY2Uuc2V0SXRlbShFTlZJUk9OTUVOVCwgSlNPTi5zdHJpbmdpZnkoZW52aXJvbm1lbnRWYXJpYWJsZS5kYXRhLmVudmlyb25tZW50KSk7XG4gICAgICBjdHgucGF0Y2hTdGF0ZSh7IHNlcnZlckVudmlyb25tZW50TW9kZTogZW52aXJvbm1lbnRWYXJpYWJsZS5kYXRhLmVudmlyb25tZW50IH0pO1xuICAgIH0pKTtcbiAgfVxuXG4gIEBBY3Rpb24oVXBkYXRlVXNlclNldHRpbmdzSW5TZXNzaW9uQWN0aW9uKVxuICBwdWJsaWMgb25VcGRhdGVVc2VyU2V0dGluZ3MoY3R4OiBTdGF0ZUNvbnRleHQ8U2Vzc2lvblN0YXRlTW9kZWw+LCB7IHVzZXJTZXR0aW5ncyB9KSB7XG4gICAgY29uc3Qgc3BhcmtTZXNzaW9ucyA9IHRoaXMuZ2V0U3BhcmtTZXNzaW9ucygpO1xuICAgIHNwYXJrU2Vzc2lvbnNbdGhpcy5zZXNzaW9uU3RvcmFnZVNlcnZpY2UudGVuYW50XS51c2VyLnNldHRpbmdzID0gdXNlclNldHRpbmdzO1xuICAgIHRoaXMuc2V0U3BhcmtTZXNzaW9ucyhjdHgsIHNwYXJrU2Vzc2lvbnMpO1xuICB9XG5cbiAgQEFjdGlvbihVcGRhdGVUZW5hbnRJbmZvUHJvcHMpXG4gIHB1YmxpYyBvblVwZGF0ZVRlbmFudEluZm9Qcm9wcyhjdHg6IFN0YXRlQ29udGV4dDxTZXNzaW9uU3RhdGVNb2RlbD4sIHsgcHJvcHMgfSkge1xuICAgIGNvbnN0IHNwYXJrU2Vzc2lvbnMgPSB0aGlzLmdldFNwYXJrU2Vzc2lvbnMoKTtcbiAgICBzcGFya1Nlc3Npb25zW3RoaXMuc2Vzc2lvblN0b3JhZ2VTZXJ2aWNlLnRlbmFudF0udGVuYW50LnByb3BzID0gcHJvcHM7XG4gICAgdGhpcy5zZXRTcGFya1Nlc3Npb25zKGN0eCwgc3BhcmtTZXNzaW9ucyk7XG4gIH1cblxuICBAQWN0aW9uKEF1dGhlbnRpY2F0ZTJGQWZvclVzZXIpXG4gIHB1YmxpYyBvbkF1dGhlbnRpY2F0ZTJGQWZvclVzZXIoY3R4OiBTdGF0ZUNvbnRleHQ8U2Vzc2lvblN0YXRlTW9kZWw+LCB7IH0pIHtcbiAgICBjb25zdCBzcGFya1Nlc3Npb25zID0gdGhpcy5nZXRTcGFya1Nlc3Npb25zKCk7XG4gICAgaWYgKHNwYXJrU2Vzc2lvbnNbdGhpcy5zZXNzaW9uU3RvcmFnZVNlcnZpY2UudGVuYW50XT8udXNlcikge1xuICAgICAgc3BhcmtTZXNzaW9uc1t0aGlzLnNlc3Npb25TdG9yYWdlU2VydmljZS50ZW5hbnRdLnVzZXIuYXV0aGVudGljYXRlZDJGQSA9IHRydWU7XG4gICAgICB0aGlzLnNldFNwYXJrU2Vzc2lvbnMoY3R4LCBzcGFya1Nlc3Npb25zKTtcbiAgICB9XG4gIH1cblxuICBAQWN0aW9uKEluaXRTZXNzaW9uRnJvbUxvY2FsU3RvcmFnZUFjdGlvbilcbiAgcHVibGljIG9uTG9hZFNlc3Npb25Gcm9tTG9jYWxTdG9yYWdlQWN0aW9uKGN0eDogU3RhdGVDb250ZXh0PFNlc3Npb25TdGF0ZU1vZGVsPiwgXzogSW5pdFNlc3Npb25Gcm9tTG9jYWxTdG9yYWdlQWN0aW9uKSB7XG4gICAgY29uc3QgZGF0YSA9IHRoaXMubG9jYWxTdG9yYWdlU2VydmljZS5nZXRJdGVtKFNFU1NJT04pO1xuICAgIGNvbnN0IHNlc3Npb246IHtcbiAgICAgIGFwcGxpY2F0aW9uOiBBcHBsaWNhdGlvbkluZm8sXG4gICAgICBzcGFya1Nlc3Npb25zOiBTdHJpbmdNYXA8U3BhcmtTZXNzaW9uPixcbiAgICB9ID0gZGF0YSA/IEpTT04ucGFyc2UoZGF0YSkgOiBkZWZhdWx0U2Vzc2lvblN0YXRlO1xuICAgIGN0eC5wYXRjaFN0YXRlKHtcbiAgICAgIGFwcGxpY2F0aW9uOiBzZXNzaW9uLmFwcGxpY2F0aW9uLFxuICAgICAgc3BhcmtTZXNzaW9uczogc2Vzc2lvbi5zcGFya1Nlc3Npb25zXG4gICAgfSk7XG4gICAgaWYgKHRoaXMuc2Vzc2lvblN0b3JhZ2VTZXJ2aWNlLnRlbmFudCkge1xuICAgICAgY29uc3Qgc3BhcmtTZXNzaW9uID0gc2Vzc2lvbi5zcGFya1Nlc3Npb25zW3RoaXMuc2Vzc2lvblN0b3JhZ2VTZXJ2aWNlLnRlbmFudF07XG4gICAgICB0aGlzLnNlc3Npb25TdG9yYWdlU2VydmljZS5zZXRBdXRoU2Vzc2lvbihzcGFya1Nlc3Npb24/LmF1dGhUb2tlbiwgc3BhcmtTZXNzaW9uPy5yZWZyZXNoKTtcbiAgICB9XG4gIH1cblxuICBAQWN0aW9uKExvYWRBcHBDb25maWd1cmF0aW9uQWN0aW9uKVxuICBwdWJsaWMgb25BcHBDb25maWd1cmF0aW9uQWN0aW9uKGN0eDogU3RhdGVDb250ZXh0PFNlc3Npb25TdGF0ZU1vZGVsPikge1xuICAgIGNvbnN0IGFwcENvbmZpZ3VyYXRpb24kID0gdGhpcy5jb25maWd1cmF0aW9uU2VydmljZVByb3h5LmdldEFwcENvbmZpZ3VyYXRpb24oKTtcbiAgICByZXR1cm4gYXBwQ29uZmlndXJhdGlvbiQucGlwZSh0YXAoYXBwQ29uZmlndXJhdGlvbiA9PiB7XG4gICAgICBjb25zdCBzcGFya1Nlc3Npb25zID0gdGhpcy5nZXRTcGFya1Nlc3Npb25zKCk7XG4gICAgICBpZiAodGhpcy5zZXNzaW9uU3RvcmFnZVNlcnZpY2UudGVuYW50KSB7XG4gICAgICAgIHNwYXJrU2Vzc2lvbnNbdGhpcy5zZXNzaW9uU3RvcmFnZVNlcnZpY2UudGVuYW50XS5hcHBDb25maWd1cmF0aW9uID0gYXBwQ29uZmlndXJhdGlvbi5kYXRhO1xuICAgICAgICB0aGlzLnNldFNwYXJrU2Vzc2lvbnMoY3R4LCBzcGFya1Nlc3Npb25zKTtcbiAgICAgIH1cbiAgICB9KSk7XG4gIH1cblxuICBAQWN0aW9uKExvYWRBcHBDb25maWd1cmF0aW9uTW9iaWxlQWN0aW9uKVxuICBwdWJsaWMgb25Mb2FkQXBwQ29uZmlndXJhdGlvbk1vYmlsZUFjdGlvbihjdHg6IFN0YXRlQ29udGV4dDxTZXNzaW9uU3RhdGVNb2RlbD4pIHtcbiAgICBjb25zdCBhcHBDb25maWd1cmF0aW9uJCA9IHRoaXMubW9iaWxlU2VydmljZVByb3h5SWRlbnRpdHkuZ2V0QXBwQ29uZmlndXJhdGlvbk1vYmlsZShWRVJTSU9OX1YxKTtcbiAgICByZXR1cm4gYXBwQ29uZmlndXJhdGlvbiQucGlwZSh0YXAoYXBwQ29uZmlndXJhdGlvbiA9PiB7XG4gICAgICBjb25zdCBzcGFya1Nlc3Npb25zID0gdGhpcy5nZXRTcGFya1Nlc3Npb25zKCk7XG4gICAgICBpZiAodGhpcy5zZXNzaW9uU3RvcmFnZVNlcnZpY2UudGVuYW50KSB7XG4gICAgICAgIHNwYXJrU2Vzc2lvbnNbdGhpcy5zZXNzaW9uU3RvcmFnZVNlcnZpY2UudGVuYW50XS5hcHBDb25maWd1cmF0aW9uID0gYXBwQ29uZmlndXJhdGlvbi5kYXRhO1xuICAgICAgICB0aGlzLnNldFNwYXJrU2Vzc2lvbnMoY3R4LCBzcGFya1Nlc3Npb25zKTtcbiAgICAgIH1cbiAgICB9KSk7XG4gIH1cblxuICBwcml2YXRlIGdldFNwYXJrU2Vzc2lvbnMgPSAoKTogU3RyaW5nTWFwPFNwYXJrU2Vzc2lvbj4gPT4gSlNPTi5wYXJzZSh0aGlzLmxvY2FsU3RvcmFnZVNlcnZpY2UuZ2V0SXRlbShTRVNTSU9OKSk/LnNwYXJrU2Vzc2lvbnMgPz8ge307XG4gIHByaXZhdGUgc2V0U3BhcmtTZXNzaW9ucyA9IChjdHg6IFN0YXRlQ29udGV4dDxTZXNzaW9uU3RhdGVNb2RlbD4sIHNwYXJrU2Vzc2lvbnM6IFN0cmluZ01hcDxTcGFya1Nlc3Npb24+KTogdm9pZCA9PiB7XG4gICAgY29uc3QgYXBwbGljYXRpb24gPSBjdHguZ2V0U3RhdGUoKS5hcHBsaWNhdGlvbjtcbiAgICB0aGlzLmxvY2FsU3RvcmFnZVNlcnZpY2Uuc2V0SXRlbShTRVNTSU9OLCBKU09OLnN0cmluZ2lmeSh7XG4gICAgICBhcHBsaWNhdGlvbixcbiAgICAgIHNwYXJrU2Vzc2lvbnM6IHNwYXJrU2Vzc2lvbnNcbiAgICB9KSk7XG4gICAgY3R4LnBhdGNoU3RhdGUoeyBzcGFya1Nlc3Npb25zIH0pO1xuICB9O1xufVxuIl19
|