mobicloud-core 1.0.409 → 1.0.412
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/mobicloud-config.service.mjs +19 -15
- package/esm2020/lib/services/mobicloud-core.service.mjs +65 -2
- package/fesm2015/mobicloud-core.mjs +82 -15
- package/fesm2015/mobicloud-core.mjs.map +1 -1
- package/fesm2020/mobicloud-core.mjs +82 -15
- package/fesm2020/mobicloud-core.mjs.map +1 -1
- package/lib/services/mobicloud-config.service.d.ts +2 -0
- package/lib/services/mobicloud-core.service.d.ts +1 -0
- package/package.json +1 -1
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { Injectable, LOCALE_ID, Inject, EventEmitter } from '@angular/core';
|
|
2
2
|
import '@angular/localize/init';
|
|
3
3
|
import { BehaviorSubject } from "rxjs";
|
|
4
|
-
import { catchError
|
|
4
|
+
import { catchError } from 'rxjs/operators';
|
|
5
5
|
import { of } from 'rxjs';
|
|
6
6
|
import { registerLocaleData } from '@angular/common';
|
|
7
7
|
import localeDA from '@angular/common/locales/da';
|
|
@@ -24,6 +24,7 @@ export class MobicloudConfigService {
|
|
|
24
24
|
this._oidc_client_secret = '';
|
|
25
25
|
this._oidc_response_type = '';
|
|
26
26
|
this._oidc_scopes = '';
|
|
27
|
+
this._oidc_log = false;
|
|
27
28
|
this._log_httptrafic = 0;
|
|
28
29
|
this._themes_enabled = false;
|
|
29
30
|
this.localeIdSource = new BehaviorSubject("");
|
|
@@ -45,24 +46,24 @@ export class MobicloudConfigService {
|
|
|
45
46
|
}
|
|
46
47
|
checkIfConfigFileExists(config_file) {
|
|
47
48
|
const timestamp = new Date().getTime();
|
|
48
|
-
return this.http.head(`./assets/${config_file}?t=${timestamp}
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
})
|
|
52
|
-
.pipe(map(() => true), catchError(() => of(false)))
|
|
49
|
+
return this.http.head(`./assets/${config_file}?t=${timestamp}`)
|
|
50
|
+
.pipe(catchError(error => {
|
|
51
|
+
return of(false);
|
|
52
|
+
}))
|
|
53
53
|
.toPromise()
|
|
54
|
-
.then(
|
|
55
|
-
return
|
|
54
|
+
.then(response => {
|
|
55
|
+
return response !== false;
|
|
56
56
|
});
|
|
57
57
|
}
|
|
58
58
|
getConfigData(config_file) {
|
|
59
|
-
return this.checkIfConfigFileExists(
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
59
|
+
return this.checkIfConfigFileExists(`app.config.runtime.json`).then((exists) => {
|
|
60
|
+
var config_file_url = `./assets/${config_file}`;
|
|
61
|
+
if (exists) {
|
|
62
|
+
config_file_url = `./assets/app.config.runtime.json`;
|
|
63
|
+
}
|
|
64
|
+
console.log("Loading config:", config_file, config_file_url, exists);
|
|
64
65
|
const timestamp = new Date().getTime();
|
|
65
|
-
return this.http.get(`${
|
|
66
|
+
return this.http.get(`${config_file_url}?t=${timestamp}`)
|
|
66
67
|
.toPromise()
|
|
67
68
|
.then(configdata => {
|
|
68
69
|
Object.assign(this, configdata);
|
|
@@ -171,6 +172,9 @@ export class MobicloudConfigService {
|
|
|
171
172
|
get oidc_scopes() {
|
|
172
173
|
return this._oidc_scopes;
|
|
173
174
|
}
|
|
175
|
+
get oidc_log() {
|
|
176
|
+
return this._oidc_log;
|
|
177
|
+
}
|
|
174
178
|
get log_httptrafic() {
|
|
175
179
|
return this._log_httptrafic;
|
|
176
180
|
}
|
|
@@ -189,4 +193,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
|
|
|
189
193
|
type: Inject,
|
|
190
194
|
args: [LOCALE_ID]
|
|
191
195
|
}] }]; } });
|
|
192
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9iaWNsb3VkLWNvbmZpZy5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9zZXJ2aWNlcy9tb2JpY2xvdWQtY29uZmlnLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBWSxTQUFTLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN0RixPQUFPLHdCQUF3QixDQUFDO0FBQ2hDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFdkMsT0FBTyxFQUFFLFVBQVUsRUFBQyxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNoRCxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzFCLE9BQU8sRUFBRSxrQkFBa0IsRUFBRyxNQUFNLGlCQUFpQixDQUFDO0FBQ3RELE9BQU8sUUFBUSxNQUFNLDRCQUE0QixDQUFDOzs7QUFPbEQsTUFBTSxPQUFPLHNCQUFzQjtJQThCakMsWUFBb0IsSUFBZ0IsRUFBVSxRQUFrQixFQUE0QixRQUFnQjtRQUF4RixTQUFJLEdBQUosSUFBSSxDQUFZO1FBQVUsYUFBUSxHQUFSLFFBQVEsQ0FBVTtRQUE0QixhQUFRLEdBQVIsUUFBUSxDQUFRO1FBMUJyRyxpQkFBWSxHQUFXLEVBQUUsQ0FBQztRQUMxQixjQUFTLEdBQVcsRUFBRSxDQUFDO1FBQ3ZCLGVBQVUsR0FBVyxFQUFFLENBQUM7UUFDeEIsaUJBQVksR0FBVyxFQUFFLENBQUM7UUFDMUIseUJBQW9CLEdBQVcsRUFBRSxDQUFDO1FBQ2xDLGNBQVMsR0FBVyxFQUFFLENBQUM7UUFDdkIsaUJBQVksR0FBVyxFQUFFLENBQUM7UUFDMUIsb0JBQWUsR0FBVyxFQUFFLENBQUM7UUFDN0Isb0JBQWUsR0FBVyxFQUFFLENBQUM7UUFDN0Isd0JBQW1CLEdBQVcsRUFBRSxDQUFDO1FBQ2pDLHdCQUFtQixHQUFXLEVB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TUFBTTtpQkFDbkI7OzBCQStCb0UsTUFBTTsyQkFBQyxTQUFTIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgSW5qZWN0b3IsIExPQ0FMRV9JRCwgSW5qZWN0LCBFdmVudEVtaXR0ZXIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCAnQGFuZ3VsYXIvbG9jYWxpemUvaW5pdCc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QgfSBmcm9tIFwicnhqc1wiO1xuaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IGNhdGNoRXJyb3IsbWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgb2YgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHJlZ2lzdGVyTG9jYWxlRGF0YSAgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IGxvY2FsZURBIGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9sb2NhbGVzL2RhJztcbmltcG9ydCB7IExhbmd1YWdlSW5mbyB9IGZyb20gXCIuLi90eXBlcy9sYW5ndWFnZS1pbmZvXCI7XG5pbXBvcnQgeyBUaGVtZUluZm8gfSBmcm9tIFwiLi4vdHlwZXMvdGhlbWUtaW5mb1wiO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBNb2JpY2xvdWRDb25maWdTZXJ2aWNlIHtcblxuICBBcHBJbmplY3RvcjogSW5qZWN0b3I7XG5cbiAgcHVibGljIF9jb25maWdfbmFtZTogc3RyaW5nID0gJyc7XG4gIHB1YmxpYyBfYXBwX25hbWU6IHN0cmluZyA9ICcnO1xuICBwdWJsaWMgX2FwcF90aXRsZTogc3RyaW5nID0gJyc7XG4gIHB1YmxpYyBfZW52aXJvbm1lbnQ6IHN0cmluZyA9ICcnO1xuICBwdWJsaWMgX2RlZmF1bHRfYXBpX2Jhc2V1cmw6IHN0cmluZyA9ICcnOyAgXG4gIHB1YmxpYyBfaG9zdF91cmw6IHN0cmluZyA9ICcnO1xuICBwdWJsaWMgX2hvc3RfdXJsX2VuOiBzdHJpbmcgPSAnJztcbiAgcHVibGljIF9vaWRjX2F1dGhvcml0eTogc3RyaW5nID0gJyc7XG4gIHB1YmxpYyBfb2lkY19jbGllbnRfaWQ6IHN0cmluZyA9ICcnO1xuICBwdWJsaWMgX29pZGNfY2xpZW50X3NlY3JldDogc3RyaW5nID0gJyc7ICBcbiAgcHVibGljIF9vaWRjX3Jlc3BvbnNlX3R5cGU6IHN0cmluZyA9ICcnO1xuICBwdWJsaWMgX29pZGNfc2NvcGVzOiBzdHJpbmcgPSAnJztcbiAgcHVibGljIF9sb2dfaHR0cHRyYWZpYzogbnVtYmVyID0gMDtcbiAgcHVibGljIF90aGVtZXNfZW5hYmxlZDogYm9vbGVhbnx1bmRlZmluZWQgPSBmYWxzZTtcblxuICBwcml2YXRlIGxvY2FsZUlkU291cmNlID0gbmV3IEJlaGF2aW9yU3ViamVjdDxzdHJpbmc+KFwiXCIpO1xuICBsb2NhbGVJZE9ic2VydmFibGUgPSB0aGlzLmxvY2FsZUlkU291cmNlLmFzT2JzZXJ2YWJsZSgpO1xuICBwcml2YXRlIGxhbmd1YWdlTmFtZVNvdXJjZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nPihcIlwiKTtcbiAgbGFuZ3VhZ2VOYW1lT2JzZXJ2YWJsZSA9IHRoaXMubGFuZ3VhZ2VOYW1lU291cmNlLmFzT2JzZXJ2YWJsZSgpO1xuXG4gIHByaXZhdGUgdGhlbWVOYW1lOiBzdHJpbmcgPSAnJztcbiAgcHVibGljIHRoZW1lTmFtZVNvdXJjZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nPihcIlwiKTtcbiAgcHVibGljIHRoZW1lTmFtZU9ic2VydmFibGUgPSB0aGlzLnRoZW1lTmFtZVNvdXJjZS5hc09ic2VydmFibGUoKTtcblxuICBwdWJsaWMgVGhlbWVDaGFuZ2U6IEV2ZW50RW1pdHRlcjxzdHJpbmc+ID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50LCBwcml2YXRlIGluamVjdG9yOiBJbmplY3RvciwgQEluamVjdChMT0NBTEVfSUQpIHB1YmxpYyBsb2NhbGVJZDogc3RyaW5nKSB7XG4gICAgdGhpcy5BcHBJbmplY3RvciA9IGluamVjdG9yO1xuICAgIGNvbnNvbGUubG9nKFwiQXBwbGljYXRpb24gTGFuZ3VhZ2U6XCIsIHRoaXMuQ3VycmVudExhbmd1YWdlKTtcbiAgICAvLyBjb25zb2xlLmxvZyhcIkFwcGxpY2F0aW9uIGJhc2VIcmVmOlwiLCB0aGlzLmJhc2VIcmVmKTtcbiAgICBpZih0aGlzLmxvY2FsZUlkID09IFwiZGFcIikgICB7XG4gICAgICByZWdpc3RlckxvY2FsZURhdGEobG9jYWxlREEsICdkYScpOyAgICAgIFxuICAgIH1cbiAgICB0aGlzLmxvY2FsZUlkU291cmNlLm5leHQodGhpcy5sb2NhbGVJZCk7XG4gICAgdGhpcy5sYW5ndWFnZU5hbWVTb3VyY2UubmV4dCh0aGlzLmdldExhbmd1YWdlTmFtZSh0aGlzLmxvY2FsZUlkKSk7XG5cbiAgICAvLyB0aGlzLnRoZW1lTmFtZVNvdXJjZS5uZXh0KFwiZGVmYXVsdFwiKTtcbiAgICB0aGlzLnRoZW1lTmFtZU9ic2VydmFibGUuc3Vic2NyaWJlKHAgPT4gdGhpcy50aGVtZU5hbWUgPSBwKTtcbiAgfVxuXG4gIGNoZWNrSWZDb25maWdGaWxlRXhpc3RzKGNvbmZpZ19maWxlOiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCB0aW1lc3RhbXAgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcbiAgICBcbiAgICByZXR1cm4gdGhpcy5odHRwLmhlYWQoYC4vYXNzZXRzLyR7Y29uZmlnX2ZpbGV9P3Q9JHt0aW1lc3RhbXB9YCwge1xuICAgICAgb2JzZXJ2ZTogJ3Jlc3BvbnNlJyxcbiAgICAgIHJlcG9ydFByb2dyZXNzOiBmYWxzZVxuICAgIH0pXG4gICAgLnBpcGUoXG4gICAgICBtYXAoKCkgPT4gdHJ1ZSksXG4gICAgICBjYXRjaEVycm9yKCgpID0+IG9mKGZhbHNlKSlcbiAgICApXG4gICAgLnRvUHJvbWlzZSgpXG4gICAgLnRoZW4oKHJlc3VsdDogdW5rbm93bikgPT4ge1xuICAgICAgLy8gRXhwbGljaXRseSBjYXN0IHRoZSByZXN1bHQgdG8gYm9vbGVhblxuICAgICAgcmV0dXJuIHJlc3VsdCA9PT0gdHJ1ZTtcbiAgICB9KTtcbiAgfVxuXG4gIGdldENvbmZpZ0RhdGEoY29uZmlnX2ZpbGU6IHN0cmluZyk6IFByb21pc2U8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMuY2hlY2tJZkNvbmZpZ0ZpbGVFeGlzdHMoJ2FwcC5jb25maWcucnVudGltZS5qc29uJykudGhlbigoZXhpc3RzOiBib29sZWFuKSA9PiB7XG4gICAgICBjb25zdCBjb25maWdGaWxlVXJsID0gZXhpc3RzIFxuICAgICAgICA/ICcuL2Fzc2V0cy9hcHAuY29uZmlnLnJ1bnRpbWUuanNvbicgXG4gICAgICAgIDogYC4vYXNzZXRzLyR7Y29uZmlnX2ZpbGV9YDtcbiAgICAgIFxuICAgICAgY29uc29sZS5sb2coXCJMb2FkaW5nIGNvbmZpZzpcIiwgY29uZmlnX2ZpbGUsIGNvbmZpZ0ZpbGVVcmwsIGV4aXN0cyk7XG4gICAgICBjb25zdCB0aW1lc3RhbXAgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcbiAgICAgIFxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoYCR7Y29uZmlnRmlsZVVybH0/dD0ke3RpbWVzdGFtcH1gKVxuICAgICAgICAudG9Qcm9taXNlKClcbiAgICAgICAgLnRoZW4oY29uZmlnZGF0YSA9PiB7XG4gICAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBjb25maWdkYXRhKTtcbiAgICAgICAgICByZXR1cm4gY29uZmlnZGF0YTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICAvLyBjaGVja0lmQ29uZmlnRmlsZUV4aXN0cyhjb25maWdfZmlsZTogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XG4gIC8vICAgY29uc3QgdGltZXN0YW1wID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7XG4gIC8vICAgcmV0dXJuIHRoaXMuaHR0cC5oZWFkKGAuL2Fzc2V0cy8ke2NvbmZpZ19maWxlfT90PSR7dGltZXN0YW1wfWApXG4gIC8vICAgICAucGlwZShcbiAgLy8gICAgICAgY2F0Y2hFcnJvcihlcnJvciA9PiB7XG4gIC8vICAgICAgICAgcmV0dXJuIG9mKGZhbHNlKTsgLy8gRmlsZSBkb2Vzbid0IGV4aXN0IG9yIHRoZXJlIHdhcyBhbiBlcnJvclxuICAvLyAgICAgICB9KVxuICAvLyAgICAgKVxuICAvLyAgICAgLnRvUHJvbWlzZSgpXG4gIC8vICAgICAudGhlbihyZXNwb25zZSA9PiB7XG4gIC8vICAgICAgIHJldHVybiByZXNwb25zZSAhPT0gZmFsc2U7IC8vIElmIHJlc3BvbnNlIGlzIG5vdCBmYWxzZSwgZmlsZSBleGlzdHNcbiAgLy8gICAgIH0pO1xuICAvLyB9XG5cbiAgLy8gZ2V0Q29uZmlnRGF0YShjb25maWdfZmlsZTogc3RyaW5nKSA6UHJvbWlzZTxhbnk+ICB7ICAgIFxuICAvLyAgIHJldHVybiB0aGlzLmNoZWNrSWZDb25maWdGaWxlRXhpc3RzKGBhcHAuY29uZmlnLnJ1bnRpbWUuanNvbmApLnRoZW4oKGV4aXN0czpib29sZWFuKSA9PiBcbiAgLy8gICB7ICAgICAgXG4gIC8vICAgICB2YXIgY29uZmlnX2ZpbGVfdXJsID0gYC4vYXNzZXRzLyR7Y29uZmlnX2ZpbGV9YDtcbiAgLy8gICAgIGlmKGV4aXN0cyl7XG4gIC8vICAgICAgIGNvbmZpZ19maWxlX3VybCA9IGAuL2Fzc2V0cy9hcHAuY29uZmlnLnJ1bnRpbWUuanNvbmA7XG4gIC8vICAgICB9XG4gIC8vICAgICBjb25zb2xlLmxvZyhcIkxvYWRpbmcgY29uZmlnOlwiLCBjb25maWdfZmlsZSwgY29uZmlnX2ZpbGVfdXJsLCBleGlzdHMpO1xuICAvLyAgICAgY29uc3QgdGltZXN0YW1wID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7XG4gIC8vICAgICByZXR1cm4gdGhpcy5odHRwLmdldChgJHtjb25maWdfZmlsZV91cmx9P3Q9JHt0aW1lc3RhbXB9YClcbiAgLy8gICAgIC50b1Byb21pc2UoKVxuICAvLyAgICAgLnRoZW4oY29uZmlnZGF0YSA9PiB7XG4gIC8vICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywgY29uZmlnZGF0YSk7XG4gIC8vICAgICAgIHJldHVybiBjb25maWdkYXRhO1xuICAvLyAgICAgfSk7XG4gIC8vICAgfSlcbiAgLy8gfVxuXG5cblxuICBnZXRMYW5ndWFnZU5hbWUobG9jYWxlOiBzdHJpbmcpIDogc3RyaW5nIHtcbiAgICBpZihsb2NhbGUgPT0gXCJkYVwiKXtcbiAgICAgIHJldHVybiAkbG9jYWxpemVgOkBATGFuZ3VhZ2VOYW1lLWRhOkRhbmlzaGA7XG4gICAgfVxuICAgIGVsc2V7XG4gICAgICByZXR1cm4gJGxvY2FsaXplYDpAQExhbmd1YWdlTmFtZS1lbi1VUzpFbmdsaXNoYDtcbiAgICB9ICAgIFxuICB9XG5cbiAgZ2V0IEN1cnJlbnRMYW5ndWFnZSgpIDogc3RyaW5nIHtcbiAgICBpZih0aGlzLmxvY2FsZUlkID09IFwiZGFcIil7XG4gICAgICAgIHJldHVybiBcIkRLXCI7XG4gICAgfVxuICAgIGVsc2UgaWYodGhpcy5sb2NhbGVJZCA9PSBcImVuLVVTXCIpe1xuICAgICAgcmV0dXJuIFwiVVNcIjtcbiAgICB9ICAgIFxuICAgIGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMubG9jYWxlSWQ7XG4gICAgfVxuICB9XG4gIFxuICBnZXRTdXBwb3J0ZWRMYW5ndWFnZXMoKSA6IExhbmd1YWdlSW5mb1tdXG4gIHtcbiAgICBjb25zdCBsYW5ndWFnZXM6IExhbmd1YWdlSW5mb1tdID0gW3tMb2NhbGVJZDogJ2RhJywgTGFuZ3VhZ2VOYW1lOiB0aGlzLmdldExhbmd1YWdlTmFtZSgnZGEnKSwgRmxhZ0NvZGU6ICdESyd9LCB7TG9jYWxlSWQ6ICdlbi1VUycsIExhbmd1YWdlTmFtZTogdGhpcy5nZXRMYW5ndWFnZU5hbWUoJ2VuLVVTJyksIEZsYWdDb2RlOiAnR0InfV07XG4gICAgcmV0dXJuIGxhbmd1YWdlcztcbiAgfVxuXG4gIGdldFRoZW1lQ2FwdGlvbihsb2NhbGU6IHN0cmluZykgOiBzdHJpbmcge1xuICAgIGlmKGxvY2FsZSA9PSBcImRlZmF1bHRcIil7XG4gICAgICByZXR1cm4gJGxvY2FsaXplYDpAQFRoZW1lQ2FwdGlvbi1kZWZhdWx0OkRlZmF1bHRgO1xuICAgIH1cbiAgICBlbHNle1xuICAgICAgcmV0dXJuICRsb2NhbGl6ZWA6QEBUaGVtZUNhcHRpb24tRGFyazpEYXJrYDtcbiAgICB9ICAgIFxuICB9XG5cbiAgZ2V0U3VwcG9ydGVkVGhlbWVzKCkgOiBUaGVtZUluZm9bXVxuICB7XG4gICAgY29uc3QgdGhlbWVzOiBUaGVtZUluZm9bXSA9IFt7VGhlbWVOYW1lOiAnZGVmYXVsdCcsIFRoZW1lQ2FwdGlvbjogdGhpcy5nZXRUaGVtZUNhcHRpb24oJ2RlZmF1bHQnKSwgU3ZnOiAnbW9iaWNsb3VkX3RoZW1lX2RlZmF1bHQnfSwge1RoZW1lTmFtZTogJ2RhcmsnLCBUaGVtZUNhcHRpb246IHRoaXMuZ2V0VGhlbWVDYXB0aW9uKCdkYXJrJyksIFN2ZzogJ21vYmljbG91ZF90aGVtZV9kYXJrJ31dO1xuICAgIHJldHVybiB0aGVtZXM7XG4gIH1cblxuICBjaGFuZ2VUaGVtZShfdGhlbWVOYW1lOiBzdHJpbmcpe1xuICAgIGNvbnNvbGUubG9nKFwiQ2hhbmdpbmcgdGhlbWVcIik7XG4gICAgdGhpcy5UaGVtZUNoYW5nZS5lbWl0KF90aGVtZU5hbWUpOyAgICAgICAgXG4gIH1cblxuICBnZXRBcGlTaXRlVXJsKCkgOiBzdHJpbmd7XG4gICAgcmV0dXJuIGAke3RoaXMuX2RlZmF1bHRfYXBpX2Jhc2V1cmx9YDtcbiAgfVxuXG4gIGdldEFwaUJhc2VVcmwoKSA6IHN0cmluZ3tcbiAgICByZXR1cm4gYCR7dGhpcy5nZXRBcGlTaXRlVXJsKCl9YXBpL2A7XG4gIH1cblxuICBnZXRNb2JpTWFuYWdlbWVudERhdGFVcmwoKSA6IHN0cmluZ3tcbiAgICByZXR1cm4gYCR7dGhpcy5nZXRBcGlCYXNlVXJsKCl9bW9iaW1hbmFnZW1lbnQvYDtcbiAgfSBcblxuICBnZXRSZXBvc2l0b3J5VXJsKCkgOiBzdHJpbmd7XG4gICAgcmV0dXJuIGAke3RoaXMuZ2V0QXBpQmFzZVVybCgpfXJlcG9zaXRvcnkvYDtcbiAgfSBcblxuICBnZXQgY29uZmlnX25hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fY29uZmlnX25hbWU7XG4gIH1cbiAgXG4gIGdldCBhcHBfbmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9hcHBfbmFtZTtcbiAgfVxuXG4gIGdldCBhcHBfdGl0bGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fYXBwX3RpdGxlO1xuICB9XG5cbiAgZ2V0IGVudmlyb25tZW50KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX2Vudmlyb25tZW50O1xuICB9XG5cbiAgZ2V0IG9pZGNfYXV0aG9yaXR5KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX29pZGNfYXV0aG9yaXR5O1xuICB9XG5cbiAgZ2V0IG9pZGNfY2xpZW50X2lkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX29pZGNfY2xpZW50X2lkO1xuICB9XG5cbiAgZ2V0IG9pZGNfY2xpZW50X3NlY3JldCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9vaWRjX2NsaWVudF9zZWNyZXQ7XG4gIH1cblxuICBnZXQgaG9zdF91cmwoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5faG9zdF91cmw7XG4gIH1cblxuICBnZXQgaG9zdF91cmxfZW4oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5faG9zdF91cmxfZW47XG4gIH1cblxuICBnZXQgb2lkY19iYXNlX3VybCgpOiBzdHJpbmcge1xuICAgIGlmKHRoaXMubG9jYWxlSWQgPT0gXCJkYVwiKSAgIHtcbiAgICAgIHJldHVybiB0aGlzLmhvc3RfdXJsO1xuICAgIH1cbiAgICBlbHNle1xuICAgICAgcmV0dXJuIHRoaXMuaG9zdF91cmxfZW47XG4gICAgfSAgICBcbiAgfVxuXG4gIGdldCBvaWRjX3JlZGlyZWN0X3VyaSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBgJHt0aGlzLm9pZGNfYmFzZV91cmx9c2lnbmluLWNhbGxiYWNrYDtcbiAgfVxuXG4gIGdldCBvaWRjX3JlZGlyZWN0X3NpbGVudF91cmkoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYCR7dGhpcy5vaWRjX2Jhc2VfdXJsfXNpZ25pbi1zaWxlbnQtY2FsbGJhY2tgO1xuICB9XG5cbiAgZ2V0IG9pZGNfcG9zdF9sb2dvdXRfcmVkaXJlY3RfdXJpKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGAke3RoaXMub2lkY19iYXNlX3VybH1zaWdub3V0LWNhbGxiYWNrYDtcbiAgfVxuXG4gIGdldCBvaWRjX3Jlc3BvbnNlX3R5cGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fb2lkY19yZXNwb25zZV90eXBlO1xuICB9XG5cbiAgZ2V0IG9pZGNfc2NvcGVzKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX29pZGNfc2NvcGVzO1xuICB9XG5cbiAgZ2V0IGxvZ19odHRwdHJhZmljKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX2xvZ19odHRwdHJhZmljO1xuICB9XG5cbiAgZ2V0IHRoZW1lc19lbmFibGVkKCk6IGJvb2xlYW58dW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5fdGhlbWVzX2VuYWJsZWQ7XG4gIH1cbiAgIFxufVxuIl19
|
|
196
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9iaWNsb3VkLWNvbmZpZy5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9zZXJ2aWNlcy9tb2JpY2xvdWQtY29uZmlnLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBWSxTQUFTLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN0RixPQUFPLHdCQUF3QixDQUFDO0FBQ2hDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFdkMsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzVDLE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDMUIsT0FBTyxFQUFFLGtCQUFrQixFQUFHLE1BQU0saUJBQWlCLENBQUM7QUFDdEQsT0FBTyxRQUFRLE1BQU0sNEJBQTRCLENBQUM7OztBQU9sRCxNQUFNLE9BQU8sc0JBQXNCO0lBK0JqQyxZQUFvQixJQUFnQixFQUFVLFFBQWtCLEVBQTRCLFFBQWdCO1FBQXhGLFNBQUksR0FBSixJQUFJLENBQVk7UUFBVSxhQUFRLEdBQVIsUUFBUSxDQUFVO1FBQTRCLGFBQVEsR0FBUixRQUFRLENBQVE7UUEzQnJHLGlCQUFZLEdBQVcsRUFBRSxDQUFDO1FBQzFCLGNBQVMsR0FBVyxFQUFFLENBQUM7UUFDdkIsZUFBVSxHQUFXLEVBQUUsQ0FBQztRQUN4QixpQkFBWSxHQUFXLEVBQUUsQ0FBQztRQUMxQix5QkFBb0IsR0FBVyxFQUFFLENBQUM7UUFDbEMsY0FBUyxHQUFXLEVBQUUsQ0FBQztRQUN2QixpQkFBWSxHQUFXLEVBQUUsQ0FBQztRQUMxQixvQkFBZSxHQUFXLEVBQUUsQ0FBQztRQUM3QixvQkFBZSxHQUFXLEVBQUUsQ0FBQztRQUM3Qix3QkFBbUIsR0FBVyxFQUFFLENBQUM7UUFDakMsd0JBQW1CLEdBQVcsRUFBRSxDQUFDO1FB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QVUsRUFBRSxNQUFNO2lCQUNuQjs7MEJBZ0NvRSxNQUFNOzJCQUFDLFNBQVMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBJbmplY3RvciwgTE9DQUxFX0lELCBJbmplY3QsIEV2ZW50RW1pdHRlciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0ICdAYW5ndWxhci9sb2NhbGl6ZS9pbml0JztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCB9IGZyb20gXCJyeGpzXCI7XG5pbXBvcnQgeyBIdHRwQ2xpZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgY2F0Y2hFcnJvciB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IG9mIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyByZWdpc3RlckxvY2FsZURhdGEgIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCBsb2NhbGVEQSBmcm9tICdAYW5ndWxhci9jb21tb24vbG9jYWxlcy9kYSc7XG5pbXBvcnQgeyBMYW5ndWFnZUluZm8gfSBmcm9tIFwiLi4vdHlwZXMvbGFuZ3VhZ2UtaW5mb1wiO1xuaW1wb3J0IHsgVGhlbWVJbmZvIH0gZnJvbSBcIi4uL3R5cGVzL3RoZW1lLWluZm9cIjtcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgTW9iaWNsb3VkQ29uZmlnU2VydmljZSB7XG5cbiAgQXBwSW5qZWN0b3I6IEluamVjdG9yO1xuXG4gIHB1YmxpYyBfY29uZmlnX25hbWU6IHN0cmluZyA9ICcnO1xuICBwdWJsaWMgX2FwcF9uYW1lOiBzdHJpbmcgPSAnJztcbiAgcHVibGljIF9hcHBfdGl0bGU6IHN0cmluZyA9ICcnO1xuICBwdWJsaWMgX2Vudmlyb25tZW50OiBzdHJpbmcgPSAnJztcbiAgcHVibGljIF9kZWZhdWx0X2FwaV9iYXNldXJsOiBzdHJpbmcgPSAnJzsgIFxuICBwdWJsaWMgX2hvc3RfdXJsOiBzdHJpbmcgPSAnJztcbiAgcHVibGljIF9ob3N0X3VybF9lbjogc3RyaW5nID0gJyc7XG4gIHB1YmxpYyBfb2lkY19hdXRob3JpdHk6IHN0cmluZyA9ICcnO1xuICBwdWJsaWMgX29pZGNfY2xpZW50X2lkOiBzdHJpbmcgPSAnJztcbiAgcHVibGljIF9vaWRjX2NsaWVudF9zZWNyZXQ6IHN0cmluZyA9ICcnOyAgXG4gIHB1YmxpYyBfb2lkY19yZXNwb25zZV90eXBlOiBzdHJpbmcgPSAnJztcbiAgcHVibGljIF9vaWRjX3Njb3Blczogc3RyaW5nID0gJyc7XG4gIHB1YmxpYyBfb2lkY19sb2c6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHVibGljIF9sb2dfaHR0cHRyYWZpYzogbnVtYmVyID0gMDtcbiAgcHVibGljIF90aGVtZXNfZW5hYmxlZDogYm9vbGVhbnx1bmRlZmluZWQgPSBmYWxzZTtcblxuICBwcml2YXRlIGxvY2FsZUlkU291cmNlID0gbmV3IEJlaGF2aW9yU3ViamVjdDxzdHJpbmc+KFwiXCIpO1xuICBsb2NhbGVJZE9ic2VydmFibGUgPSB0aGlzLmxvY2FsZUlkU291cmNlLmFzT2JzZXJ2YWJsZSgpO1xuICBwcml2YXRlIGxhbmd1YWdlTmFtZVNvdXJjZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nPihcIlwiKTtcbiAgbGFuZ3VhZ2VOYW1lT2JzZXJ2YWJsZSA9IHRoaXMubGFuZ3VhZ2VOYW1lU291cmNlLmFzT2JzZXJ2YWJsZSgpO1xuXG4gIHByaXZhdGUgdGhlbWVOYW1lOiBzdHJpbmcgPSAnJztcbiAgcHVibGljIHRoZW1lTmFtZVNvdXJjZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nPihcIlwiKTtcbiAgcHVibGljIHRoZW1lTmFtZU9ic2VydmFibGUgPSB0aGlzLnRoZW1lTmFtZVNvdXJjZS5hc09ic2VydmFibGUoKTtcblxuICBwdWJsaWMgVGhlbWVDaGFuZ2U6IEV2ZW50RW1pdHRlcjxzdHJpbmc+ID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50LCBwcml2YXRlIGluamVjdG9yOiBJbmplY3RvciwgQEluamVjdChMT0NBTEVfSUQpIHB1YmxpYyBsb2NhbGVJZDogc3RyaW5nKSB7XG4gICAgdGhpcy5BcHBJbmplY3RvciA9IGluamVjdG9yO1xuICAgIGNvbnNvbGUubG9nKFwiQXBwbGljYXRpb24gTGFuZ3VhZ2U6XCIsIHRoaXMuQ3VycmVudExhbmd1YWdlKTtcbiAgICAvLyBjb25zb2xlLmxvZyhcIkFwcGxpY2F0aW9uIGJhc2VIcmVmOlwiLCB0aGlzLmJhc2VIcmVmKTtcbiAgICBpZih0aGlzLmxvY2FsZUlkID09IFwiZGFcIikgICB7XG4gICAgICByZWdpc3RlckxvY2FsZURhdGEobG9jYWxlREEsICdkYScpOyAgICAgIFxuICAgIH1cbiAgICB0aGlzLmxvY2FsZUlkU291cmNlLm5leHQodGhpcy5sb2NhbGVJZCk7XG4gICAgdGhpcy5sYW5ndWFnZU5hbWVTb3VyY2UubmV4dCh0aGlzLmdldExhbmd1YWdlTmFtZSh0aGlzLmxvY2FsZUlkKSk7XG5cbiAgICAvLyB0aGlzLnRoZW1lTmFtZVNvdXJjZS5uZXh0KFwiZGVmYXVsdFwiKTtcbiAgICB0aGlzLnRoZW1lTmFtZU9ic2VydmFibGUuc3Vic2NyaWJlKHAgPT4gdGhpcy50aGVtZU5hbWUgPSBwKTtcbiAgfVxuXG4gIGNoZWNrSWZDb25maWdGaWxlRXhpc3RzKGNvbmZpZ19maWxlOiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCB0aW1lc3RhbXAgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcbiAgICByZXR1cm4gdGhpcy5odHRwLmhlYWQoYC4vYXNzZXRzLyR7Y29uZmlnX2ZpbGV9P3Q9JHt0aW1lc3RhbXB9YClcbiAgICAgIC5waXBlKFxuICAgICAgICBjYXRjaEVycm9yKGVycm9yID0+IHtcbiAgICAgICAgICByZXR1cm4gb2YoZmFsc2UpOyAvLyBGaWxlIGRvZXNuJ3QgZXhpc3Qgb3IgdGhlcmUgd2FzIGFuIGVycm9yXG4gICAgICAgIH0pXG4gICAgICApXG4gICAgICAudG9Qcm9taXNlKClcbiAgICAgIC50aGVuKHJlc3BvbnNlID0+IHtcbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlICE9PSBmYWxzZTsgLy8gSWYgcmVzcG9uc2UgaXMgbm90IGZhbHNlLCBmaWxlIGV4aXN0c1xuICAgICAgfSk7XG4gIH1cblxuICBnZXRDb25maWdEYXRhKGNvbmZpZ19maWxlOiBzdHJpbmcpIDpQcm9taXNlPGFueT4gIHsgICAgXG4gICAgcmV0dXJuIHRoaXMuY2hlY2tJZkNvbmZpZ0ZpbGVFeGlzdHMoYGFwcC5jb25maWcucnVudGltZS5qc29uYCkudGhlbigoZXhpc3RzOmJvb2xlYW4pID0+IFxuICAgIHsgICAgICBcbiAgICAgIHZhciBjb25maWdfZmlsZV91cmwgPSBgLi9hc3NldHMvJHtjb25maWdfZmlsZX1gO1xuICAgICAgaWYoZXhpc3RzKXtcbiAgICAgICAgY29uZmlnX2ZpbGVfdXJsID0gYC4vYXNzZXRzL2FwcC5jb25maWcucnVudGltZS5qc29uYDtcbiAgICAgIH1cbiAgICAgIGNvbnNvbGUubG9nKFwiTG9hZGluZyBjb25maWc6XCIsIGNvbmZpZ19maWxlLCBjb25maWdfZmlsZV91cmwsIGV4aXN0cyk7XG4gICAgICBjb25zdCB0aW1lc3RhbXAgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcbiAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KGAke2NvbmZpZ19maWxlX3VybH0/dD0ke3RpbWVzdGFtcH1gKVxuICAgICAgLnRvUHJvbWlzZSgpXG4gICAgICAudGhlbihjb25maWdkYXRhID0+IHtcbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBjb25maWdkYXRhKTtcbiAgICAgICAgcmV0dXJuIGNvbmZpZ2RhdGE7XG4gICAgICB9KTtcbiAgICB9KVxuICB9XG5cblxuICAvLyBnZXRDb25maWdEYXRhKGNvbmZpZ19maWxlOiBzdHJpbmcpIDpQcm9taXNlPGFueT4gIHtcbiAgLy8gICB2YXIgY29uZmlnX2ZpbGVfdXJsID0gYC4vYXNzZXRzLyR7Y29uZmlnX2ZpbGV9YDtcbiAgLy8gICBjb25zb2xlLmxvZyhcIkxvYWRpbmcgY29uZmlnOlwiLCBjb25maWdfZmlsZSwgY29uZmlnX2ZpbGVfdXJsKTtcbiAgICBcbiAgLy8gICBjb25zdCBwcm9taXNlID0gdGhpcy5odHRwLmdldChjb25maWdfZmlsZV91cmwpXG4gIC8vICAgICAudG9Qcm9taXNlKClcbiAgLy8gICAgIC50aGVuKGNvbmZpZ2RhdGEgPT4ge1xuICAvLyAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGNvbmZpZ2RhdGEpO1xuICAvLyAgICAgICByZXR1cm4gY29uZmlnZGF0YTtcbiAgLy8gICAgIH0pO1xuXG4gIC8vICAgcmV0dXJuIHByb21pc2U7XG4gIC8vIH1cblxuICBnZXRMYW5ndWFnZU5hbWUobG9jYWxlOiBzdHJpbmcpIDogc3RyaW5nIHtcbiAgICBpZihsb2NhbGUgPT0gXCJkYVwiKXtcbiAgICAgIHJldHVybiAkbG9jYWxpemVgOkBATGFuZ3VhZ2VOYW1lLWRhOkRhbmlzaGA7XG4gICAgfVxuICAgIGVsc2V7XG4gICAgICByZXR1cm4gJGxvY2FsaXplYDpAQExhbmd1YWdlTmFtZS1lbi1VUzpFbmdsaXNoYDtcbiAgICB9ICAgIFxuICB9XG5cbiAgZ2V0IEN1cnJlbnRMYW5ndWFnZSgpIDogc3RyaW5nIHtcbiAgICBpZih0aGlzLmxvY2FsZUlkID09IFwiZGFcIil7XG4gICAgICAgIHJldHVybiBcIkRLXCI7XG4gICAgfVxuICAgIGVsc2UgaWYodGhpcy5sb2NhbGVJZCA9PSBcImVuLVVTXCIpe1xuICAgICAgcmV0dXJuIFwiVVNcIjtcbiAgICB9ICAgIFxuICAgIGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMubG9jYWxlSWQ7XG4gICAgfVxuICB9XG4gIFxuICBnZXRTdXBwb3J0ZWRMYW5ndWFnZXMoKSA6IExhbmd1YWdlSW5mb1tdXG4gIHtcbiAgICBjb25zdCBsYW5ndWFnZXM6IExhbmd1YWdlSW5mb1tdID0gW3tMb2NhbGVJZDogJ2RhJywgTGFuZ3VhZ2VOYW1lOiB0aGlzLmdldExhbmd1YWdlTmFtZSgnZGEnKSwgRmxhZ0NvZGU6ICdESyd9LCB7TG9jYWxlSWQ6ICdlbi1VUycsIExhbmd1YWdlTmFtZTogdGhpcy5nZXRMYW5ndWFnZU5hbWUoJ2VuLVVTJyksIEZsYWdDb2RlOiAnR0InfV07XG4gICAgcmV0dXJuIGxhbmd1YWdlcztcbiAgfVxuXG4gIGdldFRoZW1lQ2FwdGlvbihsb2NhbGU6IHN0cmluZykgOiBzdHJpbmcge1xuICAgIGlmKGxvY2FsZSA9PSBcImRlZmF1bHRcIil7XG4gICAgICByZXR1cm4gJGxvY2FsaXplYDpAQFRoZW1lQ2FwdGlvbi1kZWZhdWx0OkRlZmF1bHRgO1xuICAgIH1cbiAgICBlbHNle1xuICAgICAgcmV0dXJuICRsb2NhbGl6ZWA6QEBUaGVtZUNhcHRpb24tRGFyazpEYXJrYDtcbiAgICB9ICAgIFxuICB9XG5cbiAgZ2V0U3VwcG9ydGVkVGhlbWVzKCkgOiBUaGVtZUluZm9bXVxuICB7XG4gICAgY29uc3QgdGhlbWVzOiBUaGVtZUluZm9bXSA9IFt7VGhlbWVOYW1lOiAnZGVmYXVsdCcsIFRoZW1lQ2FwdGlvbjogdGhpcy5nZXRUaGVtZUNhcHRpb24oJ2RlZmF1bHQnKSwgU3ZnOiAnbW9iaWNsb3VkX3RoZW1lX2RlZmF1bHQnfSwge1RoZW1lTmFtZTogJ2RhcmsnLCBUaGVtZUNhcHRpb246IHRoaXMuZ2V0VGhlbWVDYXB0aW9uKCdkYXJrJyksIFN2ZzogJ21vYmljbG91ZF90aGVtZV9kYXJrJ31dO1xuICAgIHJldHVybiB0aGVtZXM7XG4gIH1cblxuICBjaGFuZ2VUaGVtZShfdGhlbWVOYW1lOiBzdHJpbmcpe1xuICAgIGNvbnNvbGUubG9nKFwiQ2hhbmdpbmcgdGhlbWVcIik7XG4gICAgdGhpcy5UaGVtZUNoYW5nZS5lbWl0KF90aGVtZU5hbWUpOyAgICAgICAgXG4gIH1cblxuICBnZXRBcGlTaXRlVXJsKCkgOiBzdHJpbmd7XG4gICAgcmV0dXJuIGAke3RoaXMuX2RlZmF1bHRfYXBpX2Jhc2V1cmx9YDtcbiAgfVxuXG4gIGdldEFwaUJhc2VVcmwoKSA6IHN0cmluZ3tcbiAgICByZXR1cm4gYCR7dGhpcy5nZXRBcGlTaXRlVXJsKCl9YXBpL2A7XG4gIH1cblxuICBnZXRNb2JpTWFuYWdlbWVudERhdGFVcmwoKSA6IHN0cmluZ3tcbiAgICByZXR1cm4gYCR7dGhpcy5nZXRBcGlCYXNlVXJsKCl9bW9iaW1hbmFnZW1lbnQvYDtcbiAgfSBcblxuICBnZXRSZXBvc2l0b3J5VXJsKCkgOiBzdHJpbmd7XG4gICAgcmV0dXJuIGAke3RoaXMuZ2V0QXBpQmFzZVVybCgpfXJlcG9zaXRvcnkvYDtcbiAgfSBcblxuICBnZXQgY29uZmlnX25hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fY29uZmlnX25hbWU7XG4gIH1cbiAgXG4gIGdldCBhcHBfbmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9hcHBfbmFtZTtcbiAgfVxuXG4gIGdldCBhcHBfdGl0bGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fYXBwX3RpdGxlO1xuICB9XG5cbiAgZ2V0IGVudmlyb25tZW50KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX2Vudmlyb25tZW50O1xuICB9XG5cbiAgZ2V0IG9pZGNfYXV0aG9yaXR5KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX29pZGNfYXV0aG9yaXR5O1xuICB9XG5cbiAgZ2V0IG9pZGNfY2xpZW50X2lkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX29pZGNfY2xpZW50X2lkO1xuICB9XG5cbiAgZ2V0IG9pZGNfY2xpZW50X3NlY3JldCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9vaWRjX2NsaWVudF9zZWNyZXQ7XG4gIH1cblxuICBnZXQgaG9zdF91cmwoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5faG9zdF91cmw7XG4gIH1cblxuICBnZXQgaG9zdF91cmxfZW4oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5faG9zdF91cmxfZW47XG4gIH1cblxuICBnZXQgb2lkY19iYXNlX3VybCgpOiBzdHJpbmcge1xuICAgIGlmKHRoaXMubG9jYWxlSWQgPT0gXCJkYVwiKSAgIHtcbiAgICAgIHJldHVybiB0aGlzLmhvc3RfdXJsO1xuICAgIH1cbiAgICBlbHNle1xuICAgICAgcmV0dXJuIHRoaXMuaG9zdF91cmxfZW47XG4gICAgfSAgICBcbiAgfVxuXG4gIGdldCBvaWRjX3JlZGlyZWN0X3VyaSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBgJHt0aGlzLm9pZGNfYmFzZV91cmx9c2lnbmluLWNhbGxiYWNrYDtcbiAgfVxuXG4gIGdldCBvaWRjX3JlZGlyZWN0X3NpbGVudF91cmkoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYCR7dGhpcy5vaWRjX2Jhc2VfdXJsfXNpZ25pbi1zaWxlbnQtY2FsbGJhY2tgO1xuICB9XG5cbiAgZ2V0IG9pZGNfcG9zdF9sb2dvdXRfcmVkaXJlY3RfdXJpKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGAke3RoaXMub2lkY19iYXNlX3VybH1zaWdub3V0LWNhbGxiYWNrYDtcbiAgfVxuXG4gIGdldCBvaWRjX3Jlc3BvbnNlX3R5cGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fb2lkY19yZXNwb25zZV90eXBlO1xuICB9XG5cbiAgZ2V0IG9pZGNfc2NvcGVzKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX29pZGNfc2NvcGVzO1xuICB9XG5cbiAgZ2V0IG9pZGNfbG9nKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9vaWRjX2xvZztcbiAgfVxuXG4gIGdldCBsb2dfaHR0cHRyYWZpYygpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9sb2dfaHR0cHRyYWZpYztcbiAgfVxuXG4gIGdldCB0aGVtZXNfZW5hYmxlZCgpOiBib29sZWFufHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX3RoZW1lc19lbmFibGVkO1xuICB9XG4gICBcbn1cbiJdfQ==
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Injectable, EventEmitter } from '@angular/core';
|
|
2
2
|
import { HttpParams } from '@angular/common/http';
|
|
3
|
-
import { UserManager } from 'oidc-client';
|
|
3
|
+
import { UserManager, Log } from 'oidc-client';
|
|
4
4
|
import { throwError } from 'rxjs';
|
|
5
5
|
import { catchError, map, timeout } from 'rxjs/operators';
|
|
6
6
|
import { BehaviorSubject } from "rxjs";
|
|
@@ -30,6 +30,10 @@ export class MobicloudCoreService {
|
|
|
30
30
|
this.countriesSource = new BehaviorSubject(undefined);
|
|
31
31
|
this.countriesObservable = this.countriesSource.asObservable();
|
|
32
32
|
this.UserChanged = new EventEmitter();
|
|
33
|
+
if (this.configService.oidc_log) {
|
|
34
|
+
Log.logger = console;
|
|
35
|
+
Log.level = Log.DEBUG;
|
|
36
|
+
}
|
|
33
37
|
this.manager = new UserManager({
|
|
34
38
|
authority: configService.oidc_authority,
|
|
35
39
|
client_id: configService.oidc_client_id,
|
|
@@ -42,6 +46,9 @@ export class MobicloudCoreService {
|
|
|
42
46
|
loadUserInfo: true,
|
|
43
47
|
silent_redirect_uri: configService.oidc_redirect_silent_uri
|
|
44
48
|
});
|
|
49
|
+
if (this.configService.oidc_log) {
|
|
50
|
+
this.enableOidcLogEvents();
|
|
51
|
+
}
|
|
45
52
|
this.manager.clearStaleState();
|
|
46
53
|
this.manager.getUser().then(user => {
|
|
47
54
|
this.user = user;
|
|
@@ -50,6 +57,9 @@ export class MobicloudCoreService {
|
|
|
50
57
|
this.mobiUserProfile = new MobiUserProfile(this.oidc_User);
|
|
51
58
|
}
|
|
52
59
|
onUserChanged() {
|
|
60
|
+
if (this.configService.oidc_log) {
|
|
61
|
+
console.log("onUserChanged", "MobicloudCoreService", this.user);
|
|
62
|
+
}
|
|
53
63
|
if (this.user) {
|
|
54
64
|
this.oidc_UserSource.next(this.user);
|
|
55
65
|
this.mobiUserProfileSource.next(this.mobiUserProfile);
|
|
@@ -181,17 +191,26 @@ export class MobicloudCoreService {
|
|
|
181
191
|
}
|
|
182
192
|
}
|
|
183
193
|
async signIn(redirectUrl) {
|
|
194
|
+
if (this.configService.oidc_log) {
|
|
195
|
+
console.log("signIn", "MobicloudCoreService", redirectUrl);
|
|
196
|
+
}
|
|
184
197
|
return await this.manager?.signinRedirect({ data: { redirectUrl: redirectUrl } }).catch((reason) => {
|
|
185
198
|
console.error("signIn failed:", reason, this.mobiUserProfile);
|
|
186
199
|
return throwError(reason);
|
|
187
200
|
});
|
|
188
201
|
}
|
|
189
202
|
async completeSignIn() {
|
|
203
|
+
if (this.configService.oidc_log) {
|
|
204
|
+
console.log("completeSignIn", "MobicloudCoreService");
|
|
205
|
+
}
|
|
190
206
|
this.user = await this.manager?.signinRedirectCallback();
|
|
191
207
|
this.onUserChanged();
|
|
192
208
|
return this.user;
|
|
193
209
|
}
|
|
194
210
|
async signInSilent() {
|
|
211
|
+
if (this.configService.oidc_log) {
|
|
212
|
+
console.log("signInSilent", "MobicloudCoreService");
|
|
213
|
+
}
|
|
195
214
|
return await this.manager?.signinSilent().then(user => {
|
|
196
215
|
this.onSignedInSilent(user);
|
|
197
216
|
}).catch((reason) => {
|
|
@@ -200,16 +219,28 @@ export class MobicloudCoreService {
|
|
|
200
219
|
});
|
|
201
220
|
}
|
|
202
221
|
onSignedInSilent(user) {
|
|
222
|
+
if (this.configService.oidc_log) {
|
|
223
|
+
console.log("onSignedInSilent", "MobicloudCoreService", user);
|
|
224
|
+
}
|
|
203
225
|
this.user = user;
|
|
204
226
|
this.onUserChanged();
|
|
205
227
|
}
|
|
206
228
|
async completeSilentSignIn() {
|
|
229
|
+
if (this.configService.oidc_log) {
|
|
230
|
+
console.log("completeSilentSignIn", "MobicloudCoreService");
|
|
231
|
+
}
|
|
207
232
|
return await this.manager?.signinSilentCallback();
|
|
208
233
|
}
|
|
209
234
|
async signout() {
|
|
235
|
+
if (this.configService.oidc_log) {
|
|
236
|
+
console.log("signout", "MobicloudCoreService");
|
|
237
|
+
}
|
|
210
238
|
return await this.manager?.signoutRedirect();
|
|
211
239
|
}
|
|
212
240
|
async completeSignout() {
|
|
241
|
+
if (this.configService.oidc_log) {
|
|
242
|
+
console.log("completeSignout", "MobicloudCoreService");
|
|
243
|
+
}
|
|
213
244
|
this.onUserChanged();
|
|
214
245
|
}
|
|
215
246
|
isAuthenticated() {
|
|
@@ -377,6 +408,38 @@ export class MobicloudCoreService {
|
|
|
377
408
|
evaluateForMasterOrganizationClearance(errorMessage);
|
|
378
409
|
return throwError(errorMessage);
|
|
379
410
|
}
|
|
411
|
+
enableOidcLogEvents() {
|
|
412
|
+
if (this.manager) {
|
|
413
|
+
this.manager.events.addUserLoaded((user) => {
|
|
414
|
+
console.log('User loaded:', user);
|
|
415
|
+
});
|
|
416
|
+
this.manager.events.addUserUnloaded(() => {
|
|
417
|
+
console.log('User unloaded');
|
|
418
|
+
});
|
|
419
|
+
this.manager.events.addAccessTokenExpiring(() => {
|
|
420
|
+
console.log('Access token expiring...');
|
|
421
|
+
});
|
|
422
|
+
this.manager.events.addAccessTokenExpired(() => {
|
|
423
|
+
console.log('Access token expired');
|
|
424
|
+
});
|
|
425
|
+
this.manager.events.addSilentRenewError((error) => {
|
|
426
|
+
console.error('Silent renew error:', error);
|
|
427
|
+
});
|
|
428
|
+
this.manager.events.addUserSignedOut(() => {
|
|
429
|
+
console.log('User signed out from identity server');
|
|
430
|
+
console.trace('User signed out stack trace');
|
|
431
|
+
});
|
|
432
|
+
this.manager.events.removeUserSignedOut(() => {
|
|
433
|
+
console.log('removeUserSignedOut called');
|
|
434
|
+
});
|
|
435
|
+
this.manager.events.addUserSessionChanged(() => {
|
|
436
|
+
console.log('addUserSessionChanged called');
|
|
437
|
+
});
|
|
438
|
+
this.manager.events.removeUserSessionChanged(() => {
|
|
439
|
+
console.log('removeUserSessionChanged called');
|
|
440
|
+
});
|
|
441
|
+
}
|
|
442
|
+
}
|
|
380
443
|
}
|
|
381
444
|
MobicloudCoreService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: MobicloudCoreService, deps: [{ token: i1.HttpClient }, { token: i2.MobicloudConfigService }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
382
445
|
MobicloudCoreService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: MobicloudCoreService, providedIn: 'root' });
|
|
@@ -396,4 +459,4 @@ export function evaluateForMasterOrganizationClearance(errorMessage) {
|
|
|
396
459
|
}
|
|
397
460
|
}
|
|
398
461
|
}
|
|
399
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9iaWNsb3VkLWNvcmUuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvc2VydmljZXMvbW9iaWNsb3VkLWNvcmUuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6RCxPQUFPLEVBQWMsVUFBVSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDOUQsT0FBTyxFQUFFLFdBQVcsRUFBUSxNQUFNLGFBQWEsQ0FBQztBQUNoRCxPQUFPLEVBQWMsVUFBVSxFQUFHLE1BQU0sTUFBTSxDQUFDO0FBQy9DLE9BQU8sRUFBRSxVQUFVLEVBQUUsR0FBRyxFQUFFLE9BQU8sRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzFELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFHdkMsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBRTdELE9BQU8sRUFBc0IsY0FBYyxFQUFFLE1BQU0sOEJBQThCLENBQUM7Ozs7QUFRbEYsTUFBTSxPQUFPLG9CQUFvQjtJQWtDL0IsWUFBc0IsVUFBc0IsRUFBUyxhQUFxQztRQUFwRSxlQUFVLEdBQVYsVUFBVSxDQUFZO1FBQVMsa0JBQWEsR0FBYixhQUFhLENBQXdCO1FBaENuRixnQkFBVyxHQUFXLEVBQUUsQ0FBQztRQUN6QixhQUFRLEdBQVcsRUFBRSxDQUFDO1FBQ3RCLGNBQVMsR0FBVyxFQUFFLENBQUM7UUFFdkIseUJBQW9CLEdBQVcsSUFBSSxDQUFDO1FBQ3BDLHFCQUFnQixHQUFXLEtBQUssQ0FBQztRQUNqQyxtQkFBYyxHQUFXLEtBQUssQ0FBQztRQUk5QixvQkFBZSxHQUFHLElBQUksZUFBZSxDQUFtQixTQUFTLENBQUMsQ0FBQztRQUMzRSxjQUFTLEdBQWdDLElBQUksQ0FBQyxlQUFlLENBQUMsWUFBWSxFQUFFLENBQUM7UUFJckUs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LENBQUM7O2lIQXplVSxvQkFBb0I7cUhBQXBCLG9CQUFvQixjQUZuQixNQUFNOzJGQUVQLG9CQUFvQjtrQkFIaEMsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkI7O0FBOGVELE1BQU0sVUFBVSxzQ0FBc0MsQ0FBQyxZQUFtQjtJQUN4RSxJQUFHLFlBQVksSUFBSSxZQUFZLENBQUMsUUFBUSxFQUFFLENBQUMsT0FBTyxDQUFDLGlDQUFpQyxDQUFDLElBQUksQ0FBQyxFQUFDO1FBQ3pGLE9BQU8sQ0FBQyxHQUFHLENBQUMsNkNBQTZDLENBQUMsQ0FBQztRQUMzRCxJQUFJLFdBQVcsR0FBRyxZQUFZLENBQUMsT0FBTyxDQUFDLHNCQUFzQixDQUFDLENBQUM7UUFDL0QsSUFBRyxXQUFXLEVBQUM7WUFDYixPQUFPLENBQUMsR0FBRyxDQUFDLGdDQUFnQyxFQUFFLFdBQVcsQ0FBQyxDQUFDO1lBQzNELFlBQVksQ0FBQyxVQUFVLENBQUMsc0JBQXNCLENBQUMsQ0FBQztTQUNqRDtLQUNGO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIEV2ZW50RW1pdHRlciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSHR0cENsaWVudCwgSHR0cFBhcmFtcyB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IFVzZXJNYW5hZ2VyLCBVc2VyIH0gZnJvbSAnb2lkYy1jbGllbnQnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgdGhyb3dFcnJvciAgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGNhdGNoRXJyb3IsIG1hcCwgdGltZW91dCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCB9IGZyb20gXCJyeGpzXCI7XG5cbmltcG9ydCB7IE1vYmljbG91ZENvbmZpZ1NlcnZpY2UgfSBmcm9tIFwiLi9tb2JpY2xvdWQtY29uZmlnLnNlcnZpY2VcIjtcbmltcG9ydCB7IE1vYmlVc2VyUHJvZmlsZSB9IGZyb20gXCIuLi90eXBlcy9tb2JpLXVzZXItcHJvZmlsZVwiO1xuLy8gaW1wb3J0IHsgT3JnYW5pemF0aW9uSW5mbyB9IGZyb20gXCIuLi90eXBlcy9vcmdhbml6YXRpb24taW5mb1wiO1xuaW1wb3J0IHsgQXBwbGljYXRpb25EZXRhaWxzLCBQcm9maWxlRGV0YWlscyB9IGZyb20gXCIuLi90eXBlcy9hcHBsaWNhdGlvbi1kZXRhaWxzXCI7XG5pbXBvcnQgeyBDb3VudHJ5IH0gZnJvbSBcIi4uL3R5cGVzL2NvdW50cnlcIjtcbmltcG9ydCB7IElPRGF0YVJlc3VsdCB9IGZyb20gXCIuLi90eXBlcy9vZGF0YS1yZXN1bHRcIjtcbmltcG9ydCB7IGdldFByb2ZpbGVJbWFnZVVybCB9IGZyb20gXCIuLi91dGlsc1wiO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBNb2JpY2xvdWRDb3JlU2VydmljZSB7XG5cbiAgcHVibGljIF9hcHBWZXJzaW9uOiBzdHJpbmcgPSAnJztcbiAgcHVibGljIF9hcHBOYW1lOiBzdHJpbmcgPSAnJztcbiAgcHVibGljIF9hcHBUaXRsZTogc3RyaW5nID0gJyc7XG5cbiAgcHVibGljIHJlcXVpcmVfT3JnYW5pemF0aW9uOmJvb2xlYW4gPSB0cnVlO1xuICBwdWJsaWMgcmVxdWlyZV9DdXN0b21lcjpib29sZWFuID0gZmFsc2U7XG4gIHB1YmxpYyByZXF1aXJlX1ZlbmRvcjpib29sZWFuID0gZmFsc2U7XG5cbiAgcHJpdmF0ZSBtYW5hZ2VyOiBVc2VyTWFuYWdlciB8IHVuZGVmaW5lZDtcblxuICBwcml2YXRlIG9pZGNfVXNlclNvdXJjZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8VXNlciB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgb2lkY19Vc2VyOk9ic2VydmFibGU8VXNlciB8IHVuZGVmaW5lZD4gPSB0aGlzLm9pZGNfVXNlclNvdXJjZS5hc09ic2VydmFibGUoKTsgIFxuICBwdWJsaWMgdXNlcjogVXNlciB8IHVuZGVmaW5lZCB8IG51bGw7XG5cbiAgbW9iaVVzZXJQcm9maWxlOiBNb2JpVXNlclByb2ZpbGUgfCB1bmRlZmluZWQ7XG4gIHByaXZhdGUgbW9iaVVzZXJQcm9maWxlU291cmNlID0gbmV3IEJlaGF2aW9yU3ViamVjdDxNb2JpVXNlclByb2ZpbGUgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG4gIG1vYmlVc2VyUHJvZmlsZU9ic2VydmFibGUgPSB0aGlzLm1vYmlVc2VyUHJvZmlsZVNvdXJjZS5hc09ic2VydmFibGUoKTtcblxuICBwcml2YXRlIGFwcGxpY2F0aW9uRGV0YWlsc1NvdXJjZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8QXBwbGljYXRpb25EZXRhaWxzIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuICBhcHBsaWNhdGlvbkRldGFpbHNPYnNlcnZhYmxlID0gdGhpcy5hcHBsaWNhdGlvbkRldGFpbHNTb3VyY2UuYXNPYnNlcnZhYmxlKCk7ICBcbiAgYXBwbGljYXRpb25EZXRhaWxzOiBBcHBsaWNhdGlvbkRldGFpbHN8IHVuZGVmaW5lZDtcblxuICBwcml2YXRlIHByb2ZpbGVEZXRhaWxzU291cmNlID0gbmV3IEJlaGF2aW9yU3ViamVjdDxQcm9maWxlRGV0YWlscyB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgcHJvZmlsZURldGFpbHNPYnNlcnZhYmxlID0gdGhpcy5wcm9maWxlRGV0YWlsc1NvdXJjZS5hc09ic2VydmFibGUoKTsgICAgXG4gIHByb2ZpbGVEZXRhaWxzOiBQcm9maWxlRGV0YWlsc3x1bmRlZmluZWQ7XG5cbiAgcHJpdmF0ZSBjb3VudHJpZXNTb3VyY2UgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PE1hcDxzdHJpbmd8dW5kZWZpbmVkLCBDb3VudHJ5PiB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgY291bnRyaWVzT2JzZXJ2YWJsZSA9IHRoaXMuY291bnRyaWVzU291cmNlLmFzT2JzZXJ2YWJsZSgpOyAgIFxuICBjb3VudHJpZXM6IE1hcDxzdHJpbmcgfCB1bmRlZmluZWQsIENvdW50cnk+fCB1bmRlZmluZWQ7ICBcblxuICBwdWJsaWMgVXNlckNoYW5nZWQ6IEV2ZW50RW1pdHRlcjx7dXNlcjogVXNlcnx1bmRlZmluZWR8bnVsbCwgcHJvZmlsZTogTW9iaVVzZXJQcm9maWxlfHVuZGVmaW5lZCwgcHJvZmlsZURldGFpbHM6UHJvZmlsZURldGFpbHN8dW5kZWZpbmVkfT4gPSBuZXcgRXZlbnRFbWl0dGVyPHt1c2VyOiBVc2VyfHVuZGVmaW5lZHxudWxsLCBwcm9maWxlOiBNb2JpVXNlclByb2ZpbGV8dW5kZWZpbmVkLCBwcm9maWxlRGV0YWlsczpQcm9maWxlRGV0YWlsc3x1bmRlZmluZWR9PigpO1xuXG4gIGNvbnN0cnVjdG9yKHByb3RlY3RlZCBodHRwQ2xpZW50OiBIdHRwQ2xpZW50LCBwdWJsaWMgY29uZmlnU2VydmljZTogTW9iaWNsb3VkQ29uZmlnU2VydmljZSkge1xuICAgIHRoaXMubWFuYWdlciA9IG5ldyBVc2VyTWFuYWdlcihcbiAgICAgIHtcbiAgICAgICAgYXV0aG9yaXR5OiBjb25maWdTZXJ2aWNlLm9pZGNfYXV0aG9yaXR5LFxuICAgICAgICBjbGllbnRfaWQ6IGNvbmZpZ1NlcnZpY2Uub2lkY19jbGllbnRfaWQsXG4gICAgICAgIGNsaWVudF9zZWNyZXQ6IGNvbmZpZ1NlcnZpY2Uub2lkY19jbGllbnRfc2VjcmV0LFxuICAgICAgICByZWRpcmVjdF91cmk6IGNvbmZpZ1NlcnZpY2Uub2lkY19yZWRpcmVjdF91cmksXG4gICAgICAgIHBvc3RfbG9nb3V0X3JlZGlyZWN0X3VyaTogY29uZmlnU2VydmljZS5vaWRjX3Bvc3RfbG9nb3V0X3JlZGlyZWN0X3VyaSxcbiAgICAgICAgcmVzcG9uc2VfdHlwZTogY29uZmlnU2VydmljZS5vaWRjX3Jlc3BvbnNlX3R5cGUsXG4gICAgICAgIHNjb3BlOiBjb25maWdTZXJ2aWNlLm9pZGNfc2NvcGVzLFxuICAgICAgICBmaWx0ZXJQcm90b2NvbENsYWltczogdHJ1ZSxcbiAgICAgICAgbG9hZFVzZXJJbmZvOiB0cnVlLFxuICAgICAgICBzaWxlbnRfcmVkaXJlY3RfdXJpOiBjb25maWdTZXJ2aWNlLm9pZGNfcmVkaXJlY3Rfc2lsZW50X3VyaVxuICAgICAgfVxuICAgICk7XG5cbiAgICB0aGlzLm1hbmFnZXIuY2xlYXJTdGFsZVN0YXRlKCk7XG4gICAgdGhpcy5tYW5hZ2VyLmdldFVzZXIoKS50aGVuKHVzZXIgPT4ge1xuICAgICAgdGhpcy51c2VyID0gdXNlcjtcbiAgICAgIHRoaXMub25Vc2VyQ2hhbmdlZCgpO1xuICAgIH0pO1xuICAgIFxuICAgIHRoaXMubW9iaVVzZXJQcm9maWxlID0gbmV3IE1vYmlVc2VyUHJvZmlsZSh0aGlzLm9pZGNfVXNlcik7XG4gIH1cblxuICBwcm90ZWN0ZWQgb25Vc2VyQ2hhbmdlZCgpIDogdm9pZFxuICB7XG4gICAgaWYgKHRoaXMudXNlcikge1xuICAgICAgdGhpcy5vaWRjX1VzZXJTb3VyY2UubmV4dCh0aGlzLnVzZXIpO1xuICAgICAgdGhpcy5tb2JpVXNlclByb2ZpbGVTb3VyY2UubmV4dCh0aGlzLm1vYmlVc2VyUHJvZmlsZSk7XG4gICAgICB0aGlzLmdldEFwcGxpY2F0aW9uRGV0YWlscygpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIHRoaXMub2lkY19Vc2VyU291cmNlLm5leHQodW5kZWZpbmVkKTsgXG4gICAgICB0aGlzLm1vYmlVc2VyUHJvZmlsZVNvdXJjZS5uZXh0KHVuZGVmaW5lZCk7XG4gICAgICB0aGlzLmFwcGxpY2F0aW9uRGV0YWlsc1NvdXJjZS5uZXh0KHVuZGVmaW5lZCk7XG4gICAgICAvLyB0aGlzLm9yZ2FuaXphdGlvbkluZm9Tb3VyY2UubmV4dChudWxsKTsgICAgICBcbiAgICB9XG4gICAgdGhpcy5mZXRjaFByb2ZpbGVEZXRhaWxzKCkudGhlbihyZXMgPT4gXG4gICAgICB7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKFwiZmV0Y2hQcm9maWxlRGV0YWlscyBjb21wbGV0ZVwiLCByZXMsIHRoaXMudXNlcik7XG4gICAgICAgIHRoaXMuVXNlckNoYW5nZWQuZW1pdCh7dXNlcjogdGhpcy51c2VyLCBwcm9maWxlOiB0aGlzLm1vYmlVc2VyUHJvZmlsZSwgcHJvZmlsZURldGFpbHM6IHRoaXMucHJvZmlsZURldGFpbHN9KTtcbiAgICAgIH0pLmNhdGNoKChlcnJvcjphbnkpID0+XG4gICAgICB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xuICAgICAgICB0aGlzLlVzZXJDaGFuZ2VkLmVtaXQoe3VzZXI6IHRoaXMudXNlciwgcHJvZmlsZTogdGhpcy5tb2JpVXNlclByb2ZpbGUsIHByb2ZpbGVEZXRhaWxzOiB0aGlzLnByb2ZpbGVEZXRhaWxzfSk7XG4gICAgICB9KTtcbiAgfVxuXG4gIGdldEFwcGxpY2F0aW9uRGV0YWlscygpIDogIFByb21pc2U8QXBwbGljYXRpb25EZXRhaWxzfHVuZGVmaW5lZD57XG4gICAgLy8gY29uc29sZS5sb2coXCJHZXR0aW5nIG9yZ2FuaXphdGlvbmluZm8gb24gdXNlciBjaGFuZ2VkIC4uLlwiKTtcbiAgICByZXR1cm4gdGhpcy5mZXRjaEFwcGxpY2F0aW9uRGV0YWlscygpLnRoZW4oYXBwZGV0YWlscyA9PiBcbiAgICAgIHtcbiAgICAgICAgLy8gY29uc29sZS5sb2coXCJmZXRjaEFwcGxpY2F0aW9uRGV0YWlscyBjb21wbGV0ZVwiLCBhcHBkZXRhaWxzKTtcbiAgICAgICAgdGhpcy5mZXRjaENvdW50cmllcygpLnRoZW4oY291bnRyaWVzID0+IFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKFwiZmV0Y2hDb3VudHJpZXMgY29tcGxldGVcIiwgY291bnRyaWVzKTtcbiAgICAgICAgICB9KTsgICAgICAgIFxuICAgICAgICByZXR1cm4gYXBwZGV0YWlscztcbiAgICAgIH0pO1xuICB9ICBcblxuICBmZXRjaEFwcGxpY2F0aW9uRGV0YWlscygpIDogIFByb21pc2U8QXBwbGljYXRpb25EZXRhaWxzfHVuZGVmaW5lZD57XG4gICAgaWYodGhpcy5pc0F1dGhlbnRpY2F0ZWQoKSl7XG4gICAgICB2YXIgbWFzdGVyb3JnX3ZhbGlkOmJvb2xlYW4gPSB0cnVlO1xuICAgICAgaWYodGhpcy5pc01hc3RlclVzZXJBdXRoZW50aWNhdGVkKCkpe1xuICAgICAgICBpZih0aGlzLmhhc01hc3Rlck9yZ2FuaXphdGlvbigpKXtcbiAgICAgICAgICBtYXN0ZXJvcmdfdmFsaWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGVsc2V7XG4gICAgICAgICAgbWFzdGVyb3JnX3ZhbGlkID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYobWFzdGVyb3JnX3ZhbGlkKXtcblxuICAgICAgICBjb25zdCBwYXJhbXMgPSBuZXcgSHR0cFBhcmFtcygpXG4gICAgICAgIC5zZXQoJ2tleScsIHRoaXMuY29uZmlnU2VydmljZS5hcHBfbmFtZSkgIC8vIEV2ZW4gd2l0aCBzcGVjaWFsIGNoYXJzIGxpa2UgXCJUcmVow7hqZSBEw7hyZSBQcm9kdWt0aW9uXCJcbiAgICAgICAgICAuc2V0KCdlbnYnLCB0aGlzLmNvbmZpZ1NlcnZpY2UuZW52aXJvbm1lbnQpO1xuXG4gICAgICAgIC8vIGNvbnN0IHVybCA9IGAke3RoaXMuY29uZmlnU2VydmljZS5nZXRBcGlCYXNlVXJsKCl9QXBwbGljYXRpb25EZXRhaWxzP2tleT0ke3RoaXMuY29uZmlnU2VydmljZS5hcHBfbmFtZX0mZW52PSR7dGhpcy5jb25maWdTZXJ2aWNlLmVudmlyb25tZW50fWA7XG4gICAgICAgIGNvbnN0IHVybCA9IGAke3RoaXMuY29uZmlnU2VydmljZS5nZXRBcGlCYXNlVXJsKCl9QXBwbGljYXRpb25EZXRhaWxzYDtcblxuICAgICAgICBjb25zdCBhcHBsaWNhdGlvbkRldGFpbF9PYnNlcnZhYmxlID0gIHRoaXMuaHR0cENsaWVudC5nZXQ8QXBwbGljYXRpb25EZXRhaWxzPih1cmwsIHsgcGFyYW1zIH0pXG4gICAgICAgIC5waXBlKHRpbWVvdXQoMTUwMDApLCBjYXRjaEVycm9yKHRoaXMuaGFuZGxlRXJyb3IpKS5waXBlKG1hcCgoYXBwRGV0YWlsczphbnkpID0+IFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYXBwbGljYXRpb25EZXRhaWxzID0gYXBwRGV0YWlsczsgICAgICAgIFxuICAgICAgICAgICAgaWYodGhpcy5hcHBsaWNhdGlvbkRldGFpbHMpeyAgICAgICAgICBcbiAgICAgICAgICAgICAgdGhpcy5hcHBsaWNhdGlvbkRldGFpbHNTb3VyY2UubmV4dCh0aGlzLmFwcGxpY2F0aW9uRGV0YWlscyk7XG4gICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKFwiQ3VycmVudCBBcHBsaWNhdGlvbkRldGFpbHNcIiwgdGhpcy5hcHBsaWNhdGlvbkRldGFpbHMpOyAgICAgICAgIFxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZXtcbiAgICAgICAgICAgICAgdGhpcy5hcHBsaWNhdGlvbkRldGFpbHNTb3VyY2UubmV4dCh1bmRlZmluZWQpO1xuICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhcIkFuIGVtcHR5IEFwcGxpY2F0aW9uRGV0YWlscyB3YXMgcmV0dXJuZWRcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gYXBwRGV0YWlscztcbiAgICAgICAgICB9LFxuICAgICAgICAgIChlcnI6IGFueSkgPT4gXG4gICAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihcImZldGNoQXBwbGljYXRpb25EZXRhaWxzIGVycm9yOlwiLCBlcnIpO1xuICAgICAgICAgICAgdGhpcy5hcHBsaWNhdGlvbkRldGFpbHMgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICB0aGlzLmFwcGxpY2F0aW9uRGV0YWlsc1NvdXJjZS5uZXh0KHVuZGVmaW5lZCk7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgIH0gICAgICBcbiAgICAgICAgKSk7XG4gICAgICAgIHJldHVybiBhcHBsaWNhdGlvbkRldGFpbF9PYnNlcnZhYmxlLnRvUHJvbWlzZSgpO1xuICAgICAgfVxuICAgICAgZWxzZXtcbiAgICAgICAgY29uc29sZS53YXJuKFwiQXBwbGljYXRpb25EZXRhaWxzIGlzIG51bGwsIE1hc3Rlck9yZ2FuaXphdGlvbiBpcyBub3Qgc2VsZWN0ZWRcIik7XG4gICAgICAgIHRoaXMuYXBwbGljYXRpb25EZXRhaWxzID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLmFwcGxpY2F0aW9uRGV0YWlsc1NvdXJjZS5uZXh0KHVuZGVmaW5lZCk7XG4gICAgICAgIG5ldyBQcm9taXNlKHJlc29sdmUgPT4geyAgcmVzb2x2ZSh1bmRlZmluZWQpOyB9KTtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4geyAgcmVzb2x2ZSh1bmRlZmluZWQpOyB9KTtcbiAgICAgIH1cbiAgICB9XG4gICAgZWxzZXtcbiAgICAgIGNvbnNvbGUud2FybihcIkFwcGxpY2F0aW9uRGV0YWlscyBpcyBudWxsLCB1c2VyIG5vdCBhdXRoZW50aWNhdGVkXCIpO1xuICAgICAgdGhpcy5hcHBsaWNhdGlvbkRldGFpbHMgPSB1bmRlZmluZWQ7XG4gICAgICB0aGlzLmFwcGxpY2F0aW9uRGV0YWlsc1NvdXJjZS5uZXh0KHVuZGVmaW5lZCk7XG4gICAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7ICByZXNvbHZlKHVuZGVmaW5lZCk7IH0pO1xuICAgIH1cbiAgfVxuXG4gIGZldGNoQ291bnRyaWVzKCkgOiBQcm9taXNlPE1hcDxzdHJpbmd8dW5kZWZpbmVkLENvdW50cnk+PntcbiAgICBjb25zdCBtb2JpbWFuYWdlbWVudFVybCA9IHRoaXMuY29uZmlnU2VydmljZS5nZXRNb2JpTWFuYWdlbWVudERhdGFVcmwoKTtcbiAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LmdldDxJT0RhdGFSZXN1bHQ8Q291bnRyeT4+KGAke21vYmltYW5hZ2VtZW50VXJsfUNvdW50cnk/JGZpbHRlcj1lbmFibGVkIGVxIHRydWUmJG9yZGVyYnk9TmFtZSYkc2VsZWN0PWNvZGUyLE5hbWUsTG9jYWxOYW1lLFRyYWRlQXJlYSxTaGlwcGluZ19SZXF1aXJlX1N0YXRlYClcbiAgICAucGlwZSh0aW1lb3V0KDE1MDAwKSwgY2F0Y2hFcnJvcih0aGlzLmhhbmRsZUVycm9yKSkucGlwZShtYXAocmVzdWx0ID0+IFxuICAgICAge1xuICAgICAgICB0aGlzLmNvdW50cmllcyA9IG5ldyBNYXA8c3RyaW5nIHwgdW5kZWZpbmVkLCBDb3VudHJ5PihyZXN1bHQ/LnZhbHVlLm1hcChpID0+IFtpLkNvZGUyLCBpXSkpO1xuICAgICAgICB0aGlzLmNvdW50cmllc1NvdXJjZS5uZXh0KHRoaXMuY291bnRyaWVzKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuY291bnRyaWVzO1xuICAgICAgfSxcbiAgICAgIChlcnI6IGFueSkgPT4gXG4gICAgICB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcbiAgICAgIH0gICAgICBcbiAgICApKS50b1Byb21pc2UoKTtcbiAgfVxuICBcblxuICBmZXRjaFByb2ZpbGVEZXRhaWxzKCkgOiAgUHJvbWlzZTxQcm9maWxlRGV0YWlsc3x1bmRlZmluZWQ+e1xuICAgIGlmKHRoaXMuaXNBdXRoZW50aWNhdGVkKCkgJiYgdGhpcy5tb2JpVXNlclByb2ZpbGU/LnVzZXJfaWQpeyAgICAgIFxuXG4gICAgICB2YXIgdXJsOnN0cmluZ3x1bmRlZmluZWQ7XG4gICAgICBpZih0aGlzLm1vYmlVc2VyUHJvZmlsZS5pc0VtcGxveWVlVXNlcil7XG4gICAgICAgIHVybCA9IGAke3RoaXMuY29uZmlnU2VydmljZS5nZXRNb2JpTWFuYWdlbWVudERhdGFVcmwoKX1lbXBsb3llZSgke3RoaXMubW9iaVVzZXJQcm9maWxlLnVzZXJfaWR9KT8kZXhwYW5kPUltYWdlKCRzZWxlY3Q9U3RvcmFnZUFjY291bnROYW1lLEJsb2JDb250YWluZXJOYW1lLEJsb2JOYW1lKWA7XG4gICAgICB9XG4gICAgICBlbHNlIGlmKHRoaXMubW9iaVVzZXJQcm9maWxlLmlzQ3VzdG9tZXJVc2VyKXtcbiAgICAgICAgdXJsID0gYCR7dGhpcy5jb25maWdTZXJ2aWNlLmdldE1vYmlNYW5hZ2VtZW50RGF0YVVybCgpfWN1c3RvbWVydXNlcigke3RoaXMubW9iaVVzZXJQcm9maWxlLnVzZXJfaWR9KT8kZXhwYW5kPUltYWdlKCRzZWxlY3Q9U3RvcmFnZUFjY291bnROYW1lLEJsb2JDb250YWluZXJOYW1lLEJsb2JOYW1lKWA7XG4gICAgICB9XG4gICAgICBlbHNlIGlmKHRoaXMubW9iaVVzZXJQcm9maWxlLmlzVmVuZG9yVXNlcil7XG4gICAgICAgIHVybCA9IGAke3RoaXMuY29uZmlnU2VydmljZS5nZXRNb2JpTWFuYWdlbWVudERhdGFVcmwoKX12ZW5kb3J1c2VyKCR7dGhpcy5tb2JpVXNlclByb2ZpbGUudXNlcl9pZH0pPyRleHBhbmQ9SW1hZ2UoJHNlbGVjdD1TdG9yYWdlQWNjb3VudE5hbWUsQmxvYkNvbnRhaW5lck5hbWUsQmxvYk5hbWUpYDtcbiAgICAgIH1cblxuICAgICAgLy8gY29uc29sZS5sb2coXCJmZXRjaFByb2ZpbGVEZXRhaWxzXCIsIHVybCwgdGhpcy5tb2JpVXNlclByb2ZpbGU/LnVzZXJfaWQpO1xuXG4gICAgICBpZih1cmwpe1xuICAgICAgICBjb25zdCBhcHBsaWNhdGlvbkRldGFpbF9PYnNlcnZhYmxlID0gIHRoaXMuaHR0cENsaWVudC5nZXQ8SU9EYXRhUmVzdWx0PGFueT4+KHVybClcbiAgICAgICAgLnBpcGUodGltZW91dCgxNTAwMCksIGNhdGNoRXJyb3IodGhpcy5oYW5kbGVFcnJvcikpLnBpcGUobWFwKHVzZXJfcmVzdWx0ID0+IFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHZhciBwcm9maWxlX2RldGFpbHM6UHJvZmlsZURldGFpbHN8dW5kZWZpbmVkO1xuICAgICAgICAgICAgaWYodXNlcl9yZXN1bHQudmFsdWUpe1xuICAgICAgICAgICAgICB0aGlzLnByb2ZpbGVEZXRhaWxzID0gT2JqZWN0LmFzc2lnbihuZXcgUHJvZmlsZURldGFpbHMoKSwge0lkOiB1c2VyX3Jlc3VsdC52YWx1ZVswXT8uSWQ/LnRvU3RyaW5nKCksIE5hbWU6IHVzZXJfcmVzdWx0LnZhbHVlWzBdPy5OYW1lLCBJbWFnZTogdXNlcl9yZXN1bHQudmFsdWVbMF0/LkltYWdlLCBVc2VyOiB1c2VyX3Jlc3VsdC52YWx1ZVswXX0pOyAgICAgICAgXG4gICAgICAgICAgICAgIGlmKHRoaXMucHJvZmlsZURldGFpbHMpeyAgICAgICAgICBcbiAgICAgICAgICAgICAgICB0aGlzLnByb2ZpbGVEZXRhaWxzU291cmNlLm5leHQodGhpcy5wcm9maWxlRGV0YWlscyk7XG4gICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coXCJDdXJyZW50IFByb2ZpbGVEZXRhaWxzXCIsIHRoaXMucHJvZmlsZURldGFpbHMsIGdldFByb2ZpbGVJbWFnZVVybCh0aGlzLnByb2ZpbGVEZXRhaWxzLkltYWdlPy5TdG9yYWdlQWNjb3VudE5hbWUsIHRoaXMucHJvZmlsZURldGFpbHMuSW1hZ2U/LkJsb2JDb250YWluZXJOYW1lLCB0aGlzLnByb2ZpbGVEZXRhaWxzLkltYWdlPy5CbG9iTmFtZSkpOyAgICAgICAgIFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGVsc2V7XG4gICAgICAgICAgICAgICAgdGhpcy5wcm9maWxlRGV0YWlsc1NvdXJjZS5uZXh0KHVuZGVmaW5lZCk7XG4gICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coXCJBbiBlbXB0eSBQcm9maWxlRGV0YWlscyB3YXMgcmV0dXJuZWRcIik7XG4gICAgICAgICAgICAgIH0gICAgICAgICAgICAgIFxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHByb2ZpbGVfZGV0YWlscztcbiAgICAgICAgICB9LFxuICAgICAgICAgIChlcnI6IGFueSkgPT4gXG4gICAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihcImZldGNoQXBwbGljYXRpb25EZXRhaWxzIGVycm9yOlwiLCBlcnIpO1xuICAgICAgICAgICAgdGhpcy5wcm9maWxlRGV0YWlscyA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIHRoaXMucHJvZmlsZURldGFpbHNTb3VyY2UubmV4dCh1bmRlZmluZWQpO1xuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICB9ICAgICAgXG4gICAgICAgICkpO1xuXG4gICAgICAgIHJldHVybiBhcHBsaWNhdGlvbkRldGFpbF9PYnNlcnZhYmxlLnRvUHJvbWlzZSgpO1xuICAgICAgfVxuICAgICAgZWxzZXtcbiAgICAgICAgLy8gY29uc29sZS5sb2coXCJBbiBlbXB0eSB1cmwgd2FzIHJldHVybmVkXCIsIHRoaXMubW9iaVVzZXJQcm9maWxlLmlzRW1wbG95ZWVVc2VyLCB0aGlzLm1vYmlVc2VyUHJvZmlsZS5pc0N1c3RvbWVyVXNlciwgdGhpcy5tb2JpVXNlclByb2ZpbGUuaXNWZW5kb3JVc2VyKTtcbiAgICAgICAgdGhpcy5wcm9maWxlRGV0YWlscyA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy5wcm9maWxlRGV0YWlsc1NvdXJjZS5uZXh0KHVuZGVmaW5lZCk7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHsgIHJlc29sdmUodW5kZWZpbmVkKTsgfSk7XG4gICAgICB9XG4gICAgfVxuICAgIGVsc2V7XG4gICAgICAvLyBjb25zb2xlLmxvZyhcIlVzZXIgbm90IGF1dGhcIiwgdGhpcy5tb2JpVXNlclByb2ZpbGUsIHRoaXMubW9iaVVzZXJQcm9maWxlPy51c2VyX2lkKTtcbiAgICAgIHRoaXMucHJvZmlsZURldGFpbHMgPSB1bmRlZmluZWQ7XG4gICAgICB0aGlzLnByb2ZpbGVEZXRhaWxzU291cmNlLm5leHQodW5kZWZpbmVkKTtcbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHsgIHJlc29sdmUodW5kZWZpbmVkKTsgfSk7XG4gICAgfVxuICB9XG5cbiAgLy8gLS0tIFNpZ25JbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICBwdWJsaWMgYXN5bmMgc2lnbkluKHJlZGlyZWN0VXJsOiBzdHJpbmcpOiBQcm9taXNlPGFueT4ge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLm1hbmFnZXI/LnNpZ25pblJlZGlyZWN0KHsgZGF0YTogeyByZWRpcmVjdFVybDogcmVkaXJlY3RVcmwgfSB9KS5jYXRjaCggKHJlYXNvbjogYW55KSA9PlxuICAgIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoXCJzaWduSW4gZmFpbGVkOlwiLCByZWFzb24sIHRoaXMubW9iaVVzZXJQcm9maWxlKTtcbiAgICAgIHJldHVybiB0aHJvd0Vycm9yKHJlYXNvbik7XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgY29tcGxldGVTaWduSW4oKTogUHJvbWlzZTxVc2VyfHVuZGVmaW5lZD4geyAgICBcbiAgICAvL3Rocm93IG5ldyBFcnJvcihcIlNpZ25pbiBlcnJvciBzdXBlcjogaW52YWxpZCByZWRpcmVjdCB1cmxcIik7IFxuICAgIHRoaXMudXNlciA9IGF3YWl0IHRoaXMubWFuYWdlcj8uc2lnbmluUmVkaXJlY3RDYWxsYmFjaygpO1xuICAgIHRoaXMub25Vc2VyQ2hhbmdlZCgpO1xuICAgIHJldHVybiB0aGlzLnVzZXI7XG4gIH1cblxuICAvLyAtLS0gU2lsZW50IFNpZ25JbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gIHB1YmxpYyBhc3luYyBzaWduSW5TaWxlbnQoKTogUHJvbWlzZTxhbnk+IHsgICAgXG4gICAgcmV0dXJuIGF3YWl0IHRoaXMubWFuYWdlcj8uc2lnbmluU2lsZW50KCkudGhlbih1c2VyID0+XG4gICAgICB7XG4gICAgICAgIHRoaXMub25TaWduZWRJblNpbGVudCh1c2VyKTtcbiAgICAgIH0pLmNhdGNoKCAocmVhc29uOiBhbnkpID0+XG4gICAgICB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXCJzaWduSW5TaWxlbnQgZmFpbGVkOlwiLCByZWFzb24sIHRoaXMubW9iaVVzZXJQcm9maWxlKTtcbiAgICAgICAgcmV0dXJuIHRocm93RXJyb3IocmVhc29uKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHVibGljIG9uU2lnbmVkSW5TaWxlbnQodXNlcjogVXNlcil7XG4gICAgdGhpcy51c2VyID0gdXNlcjtcbiAgICB0aGlzLm9uVXNlckNoYW5nZWQoKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBjb21wbGV0ZVNpbGVudFNpZ25JbigpICA6IFByb21pc2U8YW55PnsgICAgICAgXG4gICAgcmV0dXJuIGF3YWl0IHRoaXMubWFuYWdlcj8uc2lnbmluU2lsZW50Q2FsbGJhY2soKTtcbiAgfVxuXG4gIC8vIC0tLSBTaWduT3V0IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgcHVibGljIGFzeW5jIHNpZ25vdXQoKTogUHJvbWlzZTxhbnk+IHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5tYW5hZ2VyPy5zaWdub3V0UmVkaXJlY3QoKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBjb21wbGV0ZVNpZ25vdXQoKSB7XG4gICAgdGhpcy5vblVzZXJDaGFuZ2VkKCk7XG4gIH1cblxuICAvLyAtLS0gSGVscGVyIG1ldGhvZHMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICBwdWJsaWMgaXNBdXRoZW50aWNhdGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnVzZXIgIT0gbnVsbCAmJiAhdGhpcy51c2VyLmV4cGlyZWQ7XG4gIH1cblxuICBwdWJsaWMgaXNPcmdhbml6YXRpb25BdXRoZW50aWNhdGVkKCk6IGJvb2xlYW58dW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5pc0F1dGhlbnRpY2F0ZWQoKSAmJiB0aGlzLm1vYmlVc2VyUHJvZmlsZSAhPSBudWxsICYmICh0aGlzLm1vYmlVc2VyUHJvZmlsZS5pc09yZ2FuaXphdGlvblVzZXIgfHwgdGhpcy5tb2JpVXNlclByb2ZpbGUuaXNPcmdhbml6YXRpb25BZG1pbiB8fCB0aGlzLm1vYmlVc2VyUHJvZmlsZS5pc0VtcGxveWVlVXNlcik7XG4gIH1cblxuICBwdWJsaWMgaXNNYXN0ZXJPcmdhbml6YXRpb25BdXRoZW50aWNhdGVkKCk6IGJvb2xlYW58dW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5pc0F1dGhlbnRpY2F0ZWQoKSAmJiAodGhpcy5tb2JpVXNlclByb2ZpbGUgIT0gbnVsbCAmJiAodGhpcy5tb2JpVXNlclByb2ZpbGUuaXNPcmdhbml6YXRpb25Vc2VyIHx8IHRoaXMubW9iaVVzZXJQcm9maWxlLmlzT3JnYW5pemF0aW9uQWRtaW4gfHwgdGhpcy5tb2JpVXNlclByb2ZpbGUuaXNFbXBsb3llZVVzZXIpKSB8fCB0aGlzLmlzTWFzdGVyVXNlckF1dGhlbnRpY2F0ZWQoKTtcbiAgfVxuXG4gIHB1YmxpYyBpc09yZ2FuaXphdGlvblVzZXJBdXRoZW50aWNhdGVkKCk6IGJvb2xlYW58dW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5pc0F1dGhlbnRpY2F0ZWQoKSAmJiB0aGlzLm1vYmlVc2VyUHJvZmlsZSAhPSBudWxsICYmICh0aGlzLm1vYmlVc2VyUHJvZmlsZS5pc09yZ2FuaXphdGlvblVzZXIgfHwgdGhpcy5tb2JpVXNlclByb2ZpbGUuaXNPcmdhbml6YXRpb25BZG1pbik7XG4gIH1cblxuICBwdWJsaWMgaXNNYXN0ZXJPcmdhbml6YXRpb25Vc2VyQXV0aGVudGljYXRlZCgpOiBib29sZWFufHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuaXNBdXRoZW50aWNhdGVkKCkgJiYgKHRoaXMubW9iaVVzZXJQcm9maWxlICE9IG51bGwgJiYgKHRoaXMubW9iaVVzZXJQcm9maWxlLmlzT3JnYW5pemF0aW9uVXNlciB8fCB0aGlzLm1vYmlVc2VyUHJvZmlsZS5pc09yZ2FuaXphdGlvbkFkbWluKSkgfHwgdGhpcy5pc01hc3RlclVzZXJBdXRoZW50aWNhdGVkKCk7XG4gIH1cblxuICBwdWJsaWMgaXNNYXN0ZXJPcmdhbml6YXRpb25BZG1pbkF1dGhlbnRpY2F0ZWQoKTogYm9vbGVhbnx1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLmlzQXV0aGVudGljYXRlZCgpICYmICh0aGlzLm1vYmlVc2VyUHJvZmlsZSAhPSBudWxsICYmICh0aGlzLm1vYmlVc2VyUHJvZmlsZS5pc09yZ2FuaXphdGlvbkFkbWluKSkgfHwgdGhpcy5pc01hc3RlclVzZXJBdXRoZW50aWNhdGVkKCk7XG4gIH1cblxuICBwdWJsaWMgaXNFbXBsb3llZUF1dGhlbnRpY2F0ZWQoKTogYm9vbGVhbnx1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLmlzQXV0aGVudGljYXRlZCgpICYmIHRoaXMubW9iaVVzZXJQcm9maWxlICE9IG51bGwgJiYgKHRoaXMubW9iaVVzZXJQcm9maWxlLmlzT3JnYW5pemF0aW9uVXNlciB8fCB0aGlzLm1vYmlVc2VyUHJvZmlsZS5pc09yZ2FuaXphdGlvbkFkbWluIHx8IHRoaXMubW9iaVVzZXJQcm9maWxlLmlzRW1wbG95ZWVVc2VyKTtcbiAgfVxuXG4gIHB1YmxpYyBpc01hc3RlckVtcGxveWVlQXV0aGVudGljYXRlZCgpOiBib29sZWFufHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuaXNBdXRoZW50aWNhdGVkKCkgJiYgKHRoaXMubW9iaVVzZXJQcm9maWxlICE9IG51bGwgJiYgKHRoaXMubW9iaVVzZXJQcm9maWxlLmlzT3JnYW5pemF0aW9uVXNlciB8fCB0aGlzLm1vYmlVc2VyUHJvZmlsZS5pc09yZ2FuaXphdGlvbkFkbWluIHx8IHRoaXMubW9iaVVzZXJQcm9maWxlLmlzRW1wbG95ZWVVc2VyKSkgfHwgdGhpcy5pc01hc3RlclVzZXJBdXRoZW50aWNhdGVkKCk7XG4gIH0gIFxuXG4gIHB1YmxpYyBpc0N1c3RvbWVyVXNlckF1dGhlbnRpY2F0ZWQoKTogYm9vbGVhbnx1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLmlzQXV0aGVudGljYXRlZCgpICYmIHRoaXMubW9iaVVzZXJQcm9maWxlICE9IG51bGwgJiYgKHRoaXMubW9iaVVzZXJQcm9maWxlLmlzQ3VzdG9tZXJVc2VyKTtcbiAgfVxuXG4gIHB1YmxpYyBpc01hc3RlckN1c3RvbWVyVXNlckF1dGhlbnRpY2F0ZWQoKTogYm9vbGVhbnx1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLmlzQXV0aGVudGljYXRlZCgpICYmICh0aGlzLm1vYmlVc2VyUHJvZmlsZSAhPSBudWxsICYmICh0aGlzLm1vYmlVc2VyUHJvZmlsZS5pc0N1c3RvbWVyVXNlcikpIHx8IHRoaXMuaXNNYXN0ZXJVc2VyQXV0aGVudGljYXRlZCgpO1xuICB9XG5cbiAgcHVibGljIGlzVmVuZG9yVXNlckF1dGhlbnRpY2F0ZWQoKTogYm9vbGVhbnx1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLmlzQXV0aGVudGljYXRlZCgpICYmIHRoaXMubW9iaVVzZXJQcm9maWxlICE9IG51bGwgJiYgKHRoaXMubW9iaVVzZXJQcm9maWxlLmlzVmVuZG9yVXNlcik7XG4gIH1cblxuICBwdWJsaWMgaXNNYXN0ZXJWZW5kb3JVc2VyQXV0aGVudGljYXRlZCgpOiBib29sZWFufHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuaXNBdXRoZW50aWNhdGVkKCkgJiYgKHRoaXMubW9iaVVzZXJQcm9maWxlICE9IG51bGwgJiYgKHRoaXMubW9iaVVzZXJQcm9maWxlLmlzVmVuZG9yVXNlcikpIHx8IHRoaXMuaXNNYXN0ZXJVc2VyQXV0aGVudGljYXRlZCgpO1xuICB9ICBcblxuICBwdWJsaWMgaXNCMkJBdXRoZW50aWNhdGVkKCk6IGJvb2xlYW58dW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5pc0F1dGhlbnRpY2F0ZWQoKSAmJiAodGhpcy5pc09yZ2FuaXphdGlvbkF1dGhlbnRpY2F0ZWQoKSB8fCB0aGlzLmlzQ3VzdG9tZXJVc2VyQXV0aGVudGljYXRlZCgpfHwgdGhpcy5pc1ZlbmRvclVzZXJBdXRoZW50aWNhdGVkKCkpO1xuICB9XG5cbiAgcHVibGljIGlzTWFzdGVyQjJCQXV0aGVudGljYXRlZCgpOiBib29sZWFufHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuaXNBdXRoZW50aWNhdGVkKCkgJiYgKHRoaXMuaXNPcmdhbml6YXRpb25BdXRoZW50aWNhdGVkKCkgfHwgdGhpcy5pc0N1c3RvbWVyVXNlckF1dGhlbnRpY2F0ZWQoKXx8IHRoaXMuaXNWZW5kb3JVc2VyQXV0aGVudGljYXRlZCgpKSB8fCB0aGlzLmlzTWFzdGVyVXNlckF1dGhlbnRpY2F0ZWQoKTtcbiAgfVxuXG4gIHB1YmxpYyBpc01hc3RlclVzZXJBdXRoZW50aWNhdGVkKCk6IGJvb2xlYW58dW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5pc0F1dGhlbnRpY2F0ZWQoKSAmJiB0aGlzLm1vYmlVc2VyUHJvZmlsZSAhPSBudWxsICYmICh0aGlzLm1vYmlVc2VyUHJvZmlsZS5pc01hc3RlclVzZXIgfHwgdGhpcy5tb2JpVXNlclByb2ZpbGUuaXNNYXN0ZXJBZG1pbik7XG4gIH1cblxuICBwdWJsaWMgaXNNYXN0ZXJBZG1pbkF1dGhlbnRpY2F0ZWQoKTogYm9vbGVhbnx1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLmlzQXV0aGVudGljYXRlZCgpICYmIHRoaXMubW9iaVVzZXJQcm9maWxlICE9IG51bGwgJiYgKHRoaXMubW9iaVVzZXJQcm9maWxlLmlzTWFzdGVyQWRtaW4pO1xuICB9XG5cbiAgcHVibGljIGhhc01hc3Rlck9yZ2FuaXphdGlvbigpOiBib29sZWFuIHtcbiAgICB2YXIgc3RyTWFzdGVyT3JnYW5pemF0aW9uSWQgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShcIk1hc3Rlck9yZ2FuaXphdGlvbklkXCIpO1xuICAgIGlmKHN0ck1hc3Rlck9yZ2FuaXphdGlvbklkICYmIHN0ck1hc3Rlck9yZ2FuaXphdGlvbklkLmxlbmd0aCA+IDApe1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGVsc2V7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGdldE1hc3Rlck9yZ2FuaXphdGlvbigpOiBzdHJpbmd8bnVsbCB7XG4gICAgdmFyIHN0ck1hc3Rlck9yZ2FuaXphdGlvbklkID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJNYXN0ZXJPcmdhbml6YXRpb25JZFwiKTtcbiAgICByZXR1cm4gc3RyTWFzdGVyT3JnYW5pemF0aW9uSWQ7XG4gIH1cblxuICBwdWJsaWMgc2V0TWFzdGVyT3JnYW5pemF0aW9uKHN0ck1hc3Rlck9yZ2FuaXphdGlvbklkOiBzdHJpbmd8bnVsbCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmKHN0ck1hc3Rlck9yZ2FuaXphdGlvbklkKXtcbiAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKFwiTWFzdGVyT3JnYW5pemF0aW9uSWRcIiwgc3RyTWFzdGVyT3JnYW5pemF0aW9uSWQpO1xuICAgICAgcmV0dXJuIHRoaXMuZmV0Y2hBcHBsaWNhdGlvbkRldGFpbHMoKS50aGVuKGFwcGRldGFpbHMgPT4gXG4gICAgICAgIHtcbiAgICAgICAgICAvLyBjb25zb2xlLmxvZyhcInNldE1hc3Rlck9yZ2FuaXphdGlvbiBjb21wbGV0ZTpcIiwgYXBwZGV0YWlscyk7XG4gICAgICAgIH0pOyAgICAgIFxuICAgIH1cbiAgICBlbHNle1xuICAgICAgdGhpcy5yZW1vdmVNYXN0ZXJPcmdhbml6YXRpb24oKTtcbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHsgIHJlc29sdmUodW5kZWZpbmVkKTsgfSk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHJlbW92ZU1hc3Rlck9yZ2FuaXphdGlvbigpOiB2b2lkIHtcbiAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShcIk1hc3Rlck9yZ2FuaXphdGlvbklkXCIpO1xuICB9XG5cbiAgcHVibGljIGhhc01hc3RlckN1c3RvbWVyKCk6IGJvb2xlYW4ge1xuICAgIHZhciBzdHJNYXN0ZXJDdXN0b21lcklkID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJNYXN0ZXJDdXN0b21lcklkXCIpO1xuICAgIGlmKHN0ck1hc3RlckN1c3RvbWVySWQgJiYgc3RyTWFzdGVyQ3VzdG9tZXJJZC5sZW5ndGggPiAwKXtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBlbHNle1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBnZXRNYXN0ZXJDdXN0b21lcigpOiBzdHJpbmd8bnVsbCB7XG4gICAgdmFyIHN0ck1hc3RlckN1c3RvbWVySWQgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShcIk1hc3RlckN1c3RvbWVySWRcIik7XG4gICAgcmV0dXJuIHN0ck1hc3RlckN1c3RvbWVySWQ7XG4gIH1cblxuICBwdWJsaWMgc2V0TWFzdGVyQ3VzdG9tZXIoc3RyTWFzdGVyQ3VzdG9tZXJJZDogc3RyaW5nfG51bGwpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZihzdHJNYXN0ZXJDdXN0b21lcklkKXtcbiAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKFwiTWFzdGVyQ3VzdG9tZXJJZFwiLCBzdHJNYXN0ZXJDdXN0b21lcklkKTtcbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHsgIHJlc29sdmUodW5kZWZpbmVkKTsgfSk7ICAgICBcbiAgICB9XG4gICAgZWxzZXtcbiAgICAgIHRoaXMucmVtb3ZlTWFzdGVyQ3VzdG9tZXIoKTtcbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHsgIHJlc29sdmUodW5kZWZpbmVkKTsgfSk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHJlbW92ZU1hc3RlckN1c3RvbWVyKCk6IHZvaWQge1xuICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKFwiTWFzdGVyQ3VzdG9tZXJJZFwiKTtcbiAgfSAgXG5cbiAgcHVibGljIGhhc01hc3RlclZlbmRvcigpOiBib29sZWFuIHtcbiAgICB2YXIgc3RyTWFzdGVyVmVuZG9ySWQgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShcIk1hc3RlclZlbmRvcklkXCIpO1xuICAgIGlmKHN0ck1hc3RlclZlbmRvcklkICYmIHN0ck1hc3RlclZlbmRvcklkLmxlbmd0aCA+IDApe1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGVsc2V7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGdldE1hc3RlclZlbmRvcigpOiBzdHJpbmd8bnVsbCB7XG4gICAgdmFyIHN0ck1hc3RlclZlbmRvcklkID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJNYXN0ZXJWZW5kb3JJZFwiKTtcbiAgICByZXR1cm4gc3RyTWFzdGVyVmVuZG9ySWQ7XG4gIH1cblxuICBwdWJsaWMgc2V0TWFzdGVyVmVuZG9yKHN0ck1hc3RlclZlbmRvcklkOiBzdHJpbmd8bnVsbCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmKHN0ck1hc3RlclZlbmRvcklkKXtcbiAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKFwiTWFzdGVyVmVuZG9ySWRcIiwgc3RyTWFzdGVyVmVuZG9ySWQpO1xuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4geyAgcmVzb2x2ZSh1bmRlZmluZWQpOyB9KTsgICAgICBcbiAgICB9XG4gICAgZWxzZXtcbiAgICAgIHRoaXMucmVtb3ZlTWFzdGVyVmVuZG9yKCk7XG4gICAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7ICByZXNvbHZlKHVuZGVmaW5lZCk7IH0pO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyByZW1vdmVNYXN0ZXJWZW5kb3IoKTogdm9pZCB7XG4gICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oXCJNYXN0ZXJWZW5kb3JJZFwiKTtcbiAgfSAgXG5cbiAgcHVibGljIHJlZGlyZWN0VXJsKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMudXNlcj8uc3RhdGU/LnJlZGlyZWN0VXJsO1xuICB9XG5cbiAgcHVibGljIGdldCBhY2Nlc3NUb2tlbigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnVzZXI/LmFjY2Vzc190b2tlbiA/PyAnJztcbiAgfVxuXG4gIHB1YmxpYyBnZXQgYXV0aG9yaXphdGlvbkhlYWRlcigpOiBzdHJpbmd8dW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy51c2VyPy50b2tlbl90eXBlPy5jb25jYXQoXCIgXCIsIHRoaXMudXNlci5hY2Nlc3NfdG9rZW4pO1xuICB9XG5cbiAgcHVibGljIGdldCB0b2tlbkV4cGlyZXNBdCgpOiBEYXRlfHVuZGVmaW5lZCB7XG4gICAgaWYodGhpcy51c2VyKVxuICAgICAgcmV0dXJuIG5ldyBEYXRlKHRoaXMudXNlci5leHBpcmVzX2F0ICogMTAwMCk7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgdG9rZW5WYWxpZFVudGlsKCk6IERhdGV8dW5kZWZpbmVkIHtcbiAgICBpZih0aGlzLnVzZXIpXG4gICAgICByZXR1cm4gbmV3IERhdGUoKHRoaXMudXNlci5leHBpcmVzX2F0IC0xMjApICogMTAwMCk7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgaXNUb2tlbkV4cGlyZWQoKTogYm9vbGVhbiB7XG4gICAgaWYodGhpcy51c2VyKVxuICAgICAgcmV0dXJuIHRoaXMudXNlcj8uZXhwaXJlc19pbiA8PSAxMjA7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaGFuZGxlRXJyb3IoZXJyb3I6YW55KSB7XG4gICAgbGV0IGVycm9yTWVzc2FnZSA9ICcnO1xuICAgIGlmIChlcnJvciAmJiBlcnJvci5lcnJvciAmJiBlcnJvci5lcnJvci5lcnJvcil7XG4gICAgICAvL0dldCBKc29uIGVycm9yXG4gICAgICBlcnJvck1lc3NhZ2UgPSBlcnJvci5lcnJvci5lcnJvcjtcbiAgICB9XG4gICAgZWxzZSBpZihlcnJvciAmJiBlcnJvci5lcnJvciBpbnN0YW5jZW9mIEVycm9yRXZlbnQpIHtcbiAgICAgIC8vIEdldCBjbGllbnQtc2lkZSBlcnJvclxuICAgICAgICBlcnJvck1lc3NhZ2UgPSBlcnJvci5lcnJvci5tZXNzYWdlO1xuICAgIH0gXG4gICAgZWxzZSB7XG4gICAgICAvLyBHZXQgc2VydmVyLXNpZGUgZXJyb3JcbiAgICAgIGVycm9yTWVzc2FnZSA9IGBFcnJvciBDb2RlOiAke2Vycm9yLnN0YXR1c31cXG5NZXNzYWdlOiAke2Vycm9yLm1lc3NhZ2V9YDtcbiAgICB9XG4gICAgLy8gd2luZG93LmFsZXJ0KGVycm9yTWVzc2FnZSk7XG4gICAgZXZhbHVhdGVGb3JNYXN0ZXJPcmdhbml6YXRpb25DbGVhcmFuY2UoZXJyb3JNZXNzYWdlKTtcbiAgICByZXR1cm4gdGhyb3dFcnJvcihlcnJvck1lc3NhZ2UpO1xuICB9XG5cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGV2YWx1YXRlRm9yTWFzdGVyT3JnYW5pemF0aW9uQ2xlYXJhbmNlKGVycm9yTWVzc2FnZTpzdHJpbmcpIDogdm9pZHtcbiAgaWYoZXJyb3JNZXNzYWdlICYmIGVycm9yTWVzc2FnZS50b1N0cmluZygpLmluZGV4T2YoJ05vIFRlc3QgZGF0YWJhc2UgaGFzIGJlZW4gc2V0dXAnKSA+PSAwKXtcbiAgICBjb25zb2xlLmxvZyhcIkNoZWNrIGZvciBjbGVhcmFuY2Ugb2YgTWFzdGVyT3JnYW5pemF0aW9uSWRcIik7XG4gICAgbGV0IG1hc3Rlck9yZ0lkID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJNYXN0ZXJPcmdhbml6YXRpb25JZFwiKTtcbiAgICBpZihtYXN0ZXJPcmdJZCl7XG4gICAgICBjb25zb2xlLmxvZyhcIkNsZWFyaW5nIE1hc3Rlck9yZ2FuaXphdGlvbklkOlwiLCBtYXN0ZXJPcmdJZCk7XG4gICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShcIk1hc3Rlck9yZ2FuaXphdGlvbklkXCIpO1xuICAgIH1cbiAgfVxufVxuIl19
|
|
462
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9iaWNsb3VkLWNvcmUuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvc2VydmljZXMvbW9iaWNsb3VkLWNvcmUuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6RCxPQUFPLEVBQWMsVUFBVSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDOUQsT0FBTyxFQUFFLFdBQVcsRUFBUSxHQUFHLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDckQsT0FBTyxFQUFjLFVBQVUsRUFBRyxNQUFNLE1BQU0sQ0FBQztBQUMvQyxPQUFPLEVBQUUsVUFBVSxFQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMxRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBR3ZDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUU3RCxPQUFPLEVBQXNCLGNBQWMsRUFBRSxNQUFNLDhCQUE4QixDQUFDOzs7O0FBUWxGLE1BQU0sT0FBTyxvQkFBb0I7SUFrQy9CLFlBQXNCLFVBQXNCLEVBQVMsYUFBcUM7UUFBcEUsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQUFTLGtCQUFhLEdBQWIsYUFBYSxDQUF3QjtRQWhDbkYsZ0JBQVcsR0FBVyxFQUFFLENBQUM7UUFDekIsYUFBUSxHQUFXLEVBQUUsQ0FBQztRQUN0QixjQUFTLEdBQVcsRUFBRSxDQUFDO1FBRXZCLHlCQUFvQixHQUFXLElBQUksQ0FBQztRQUNwQyxxQkFBZ0IsR0FBVyxLQUFLLENBQUM7UUFDakMsbUJBQWMsR0FBVyxLQUFLLENBQUM7UUFJOUIsb0JBQWUsR0FBRyxJQUFJLGVBQWUsQ0FBbUIsU0FBUyxDQUFDLENBQUM7UUFDM0UsY0FBUyxHQUFnQyxJQUFJLENBQUMsZUFBZSxDQUFDLFlBQVksRUFBRSxD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QUMsVUFBVSxDQUFDLHNCQUFzQixDQUFDLENBQUM7U0FDakQ7S0FDRjtBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBFdmVudEVtaXR0ZXIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEh0dHBDbGllbnQsIEh0dHBQYXJhbXMgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBVc2VyTWFuYWdlciwgVXNlciwgTG9nIH0gZnJvbSAnb2lkYy1jbGllbnQnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgdGhyb3dFcnJvciAgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGNhdGNoRXJyb3IsIG1hcCwgdGltZW91dCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCB9IGZyb20gXCJyeGpzXCI7XG5cbmltcG9ydCB7IE1vYmljbG91ZENvbmZpZ1NlcnZpY2UgfSBmcm9tIFwiLi9tb2JpY2xvdWQtY29uZmlnLnNlcnZpY2VcIjtcbmltcG9ydCB7IE1vYmlVc2VyUHJvZmlsZSB9IGZyb20gXCIuLi90eXBlcy9tb2JpLXVzZXItcHJvZmlsZVwiO1xuLy8gaW1wb3J0IHsgT3JnYW5pemF0aW9uSW5mbyB9IGZyb20gXCIuLi90eXBlcy9vcmdhbml6YXRpb24taW5mb1wiO1xuaW1wb3J0IHsgQXBwbGljYXRpb25EZXRhaWxzLCBQcm9maWxlRGV0YWlscyB9IGZyb20gXCIuLi90eXBlcy9hcHBsaWNhdGlvbi1kZXRhaWxzXCI7XG5pbXBvcnQgeyBDb3VudHJ5IH0gZnJvbSBcIi4uL3R5cGVzL2NvdW50cnlcIjtcbmltcG9ydCB7IElPRGF0YVJlc3VsdCB9IGZyb20gXCIuLi90eXBlcy9vZGF0YS1yZXN1bHRcIjtcbmltcG9ydCB7IGdldFByb2ZpbGVJbWFnZVVybCB9IGZyb20gXCIuLi91dGlsc1wiO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBNb2JpY2xvdWRDb3JlU2VydmljZSB7XG5cbiAgcHVibGljIF9hcHBWZXJzaW9uOiBzdHJpbmcgPSAnJztcbiAgcHVibGljIF9hcHBOYW1lOiBzdHJpbmcgPSAnJztcbiAgcHVibGljIF9hcHBUaXRsZTogc3RyaW5nID0gJyc7XG5cbiAgcHVibGljIHJlcXVpcmVfT3JnYW5pemF0aW9uOmJvb2xlYW4gPSB0cnVlO1xuICBwdWJsaWMgcmVxdWlyZV9DdXN0b21lcjpib29sZWFuID0gZmFsc2U7XG4gIHB1YmxpYyByZXF1aXJlX1ZlbmRvcjpib29sZWFuID0gZmFsc2U7XG5cbiAgcHJpdmF0ZSBtYW5hZ2VyOiBVc2VyTWFuYWdlciB8IHVuZGVmaW5lZDtcblxuICBwcml2YXRlIG9pZGNfVXNlclNvdXJjZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8VXNlciB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgb2lkY19Vc2VyOk9ic2VydmFibGU8VXNlciB8IHVuZGVmaW5lZD4gPSB0aGlzLm9pZGNfVXNlclNvdXJjZS5hc09ic2VydmFibGUoKTsgIFxuICBwdWJsaWMgdXNlcjogVXNlciB8IHVuZGVmaW5lZCB8IG51bGw7XG5cbiAgbW9iaVVzZXJQcm9maWxlOiBNb2JpVXNlclByb2ZpbGUgfCB1bmRlZmluZWQ7XG4gIHByaXZhdGUgbW9iaVVzZXJQcm9maWxlU291cmNlID0gbmV3IEJlaGF2aW9yU3ViamVjdDxNb2JpVXNlclByb2ZpbGUgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG4gIG1vYmlVc2VyUHJvZmlsZU9ic2VydmFibGUgPSB0aGlzLm1vYmlVc2VyUHJvZmlsZVNvdXJjZS5hc09ic2VydmFibGUoKTtcblxuICBwcml2YXRlIGFwcGxpY2F0aW9uRGV0YWlsc1NvdXJjZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8QXBwbGljYXRpb25EZXRhaWxzIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuICBhcHBsaWNhdGlvbkRldGFpbHNPYnNlcnZhYmxlID0gdGhpcy5hcHBsaWNhdGlvbkRldGFpbHNTb3VyY2UuYXNPYnNlcnZhYmxlKCk7ICBcbiAgYXBwbGljYXRpb25EZXRhaWxzOiBBcHBsaWNhdGlvbkRldGFpbHN8IHVuZGVmaW5lZDtcblxuICBwcml2YXRlIHByb2ZpbGVEZXRhaWxzU291cmNlID0gbmV3IEJlaGF2aW9yU3ViamVjdDxQcm9maWxlRGV0YWlscyB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgcHJvZmlsZURldGFpbHNPYnNlcnZhYmxlID0gdGhpcy5wcm9maWxlRGV0YWlsc1NvdXJjZS5hc09ic2VydmFibGUoKTsgICAgXG4gIHByb2ZpbGVEZXRhaWxzOiBQcm9maWxlRGV0YWlsc3x1bmRlZmluZWQ7XG5cbiAgcHJpdmF0ZSBjb3VudHJpZXNTb3VyY2UgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PE1hcDxzdHJpbmd8dW5kZWZpbmVkLCBDb3VudHJ5PiB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgY291bnRyaWVzT2JzZXJ2YWJsZSA9IHRoaXMuY291bnRyaWVzU291cmNlLmFzT2JzZXJ2YWJsZSgpOyAgIFxuICBjb3VudHJpZXM6IE1hcDxzdHJpbmcgfCB1bmRlZmluZWQsIENvdW50cnk+fCB1bmRlZmluZWQ7ICBcblxuICBwdWJsaWMgVXNlckNoYW5nZWQ6IEV2ZW50RW1pdHRlcjx7dXNlcjogVXNlcnx1bmRlZmluZWR8bnVsbCwgcHJvZmlsZTogTW9iaVVzZXJQcm9maWxlfHVuZGVmaW5lZCwgcHJvZmlsZURldGFpbHM6UHJvZmlsZURldGFpbHN8dW5kZWZpbmVkfT4gPSBuZXcgRXZlbnRFbWl0dGVyPHt1c2VyOiBVc2VyfHVuZGVmaW5lZHxudWxsLCBwcm9maWxlOiBNb2JpVXNlclByb2ZpbGV8dW5kZWZpbmVkLCBwcm9maWxlRGV0YWlsczpQcm9maWxlRGV0YWlsc3x1bmRlZmluZWR9PigpO1xuXG4gIGNvbnN0cnVjdG9yKHByb3RlY3RlZCBodHRwQ2xpZW50OiBIdHRwQ2xpZW50LCBwdWJsaWMgY29uZmlnU2VydmljZTogTW9iaWNsb3VkQ29uZmlnU2VydmljZSkgeyAgXG4gICAgaWYodGhpcy5jb25maWdTZXJ2aWNlLm9pZGNfbG9nKXtcbiAgICAgIExvZy5sb2dnZXIgPSBjb25zb2xlO1xuICAgICAgTG9nLmxldmVsID0gTG9nLkRFQlVHOyAgXG4gICAgfVxuICAgIHRoaXMubWFuYWdlciA9IG5ldyBVc2VyTWFuYWdlcihcbiAgICAgIHtcbiAgICAgICAgYXV0aG9yaXR5OiBjb25maWdTZXJ2aWNlLm9pZGNfYXV0aG9yaXR5LFxuICAgICAgICBjbGllbnRfaWQ6IGNvbmZpZ1NlcnZpY2Uub2lkY19jbGllbnRfaWQsXG4gICAgICAgIGNsaWVudF9zZWNyZXQ6IGNvbmZpZ1NlcnZpY2Uub2lkY19jbGllbnRfc2VjcmV0LFxuICAgICAgICByZWRpcmVjdF91cmk6IGNvbmZpZ1NlcnZpY2Uub2lkY19yZWRpcmVjdF91cmksXG4gICAgICAgIHBvc3RfbG9nb3V0X3JlZGlyZWN0X3VyaTogY29uZmlnU2VydmljZS5vaWRjX3Bvc3RfbG9nb3V0X3JlZGlyZWN0X3VyaSxcbiAgICAgICAgcmVzcG9uc2VfdHlwZTogY29uZmlnU2VydmljZS5vaWRjX3Jlc3BvbnNlX3R5cGUsXG4gICAgICAgIHNjb3BlOiBjb25maWdTZXJ2aWNlLm9pZGNfc2NvcGVzLFxuICAgICAgICBmaWx0ZXJQcm90b2NvbENsYWltczogdHJ1ZSxcbiAgICAgICAgbG9hZFVzZXJJbmZvOiB0cnVlLFxuICAgICAgICBzaWxlbnRfcmVkaXJlY3RfdXJpOiBjb25maWdTZXJ2aWNlLm9pZGNfcmVkaXJlY3Rfc2lsZW50X3VyaVxuICAgICAgfVxuICAgICk7XG5cbiAgICBpZih0aGlzLmNvbmZpZ1NlcnZpY2Uub2lkY19sb2cpe1xuICAgICAgdGhpcy5lbmFibGVPaWRjTG9nRXZlbnRzKCk7ICBcbiAgICB9XG5cbiAgICB0aGlzLm1hbmFnZXIuY2xlYXJTdGFsZVN0YXRlKCk7XG5cbiAgICB0aGlzLm1hbmFnZXIuZ2V0VXNlcigpLnRoZW4odXNlciA9PiB7XG4gICAgICB0aGlzLnVzZXIgPSB1c2VyO1xuICAgICAgdGhpcy5vblVzZXJDaGFuZ2VkKCk7XG4gICAgfSk7XG4gICAgXG4gICAgdGhpcy5tb2JpVXNlclByb2ZpbGUgPSBuZXcgTW9iaVVzZXJQcm9maWxlKHRoaXMub2lkY19Vc2VyKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBvblVzZXJDaGFuZ2VkKCkgOiB2b2lkXG4gIHtcbiAgICBpZih0aGlzLmNvbmZpZ1NlcnZpY2Uub2lkY19sb2cpe1xuICAgICAgY29uc29sZS5sb2coXCJvblVzZXJDaGFuZ2VkXCIsIFwiTW9iaWNsb3VkQ29yZVNlcnZpY2VcIix0aGlzLnVzZXIpOyAgXG4gICAgfSAgXG4gICAgaWYgKHRoaXMudXNlcikge1xuICAgICAgdGhpcy5vaWRjX1VzZXJTb3VyY2UubmV4dCh0aGlzLnVzZXIpO1xuICAgICAgdGhpcy5tb2JpVXNlclByb2ZpbGVTb3VyY2UubmV4dCh0aGlzLm1vYmlVc2VyUHJvZmlsZSk7XG4gICAgICB0aGlzLmdldEFwcGxpY2F0aW9uRGV0YWlscygpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIHRoaXMub2lkY19Vc2VyU291cmNlLm5leHQodW5kZWZpbmVkKTsgXG4gICAgICB0aGlzLm1vYmlVc2VyUHJvZmlsZVNvdXJjZS5uZXh0KHVuZGVmaW5lZCk7XG4gICAgICB0aGlzLmFwcGxpY2F0aW9uRGV0YWlsc1NvdXJjZS5uZXh0KHVuZGVmaW5lZCk7XG4gICAgICAvLyB0aGlzLm9yZ2FuaXphdGlvbkluZm9Tb3VyY2UubmV4dChudWxsKTsgICAgICBcbiAgICB9XG4gICAgdGhpcy5mZXRjaFByb2ZpbGVEZXRhaWxzKCkudGhlbihyZXMgPT4gXG4gICAgICB7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKFwiZmV0Y2hQcm9maWxlRGV0YWlscyBjb21wbGV0ZVwiLCByZXMsIHRoaXMudXNlcik7XG4gICAgICAgIHRoaXMuVXNlckNoYW5nZWQuZW1pdCh7dXNlcjogdGhpcy51c2VyLCBwcm9maWxlOiB0aGlzLm1vYmlVc2VyUHJvZmlsZSwgcHJvZmlsZURldGFpbHM6IHRoaXMucHJvZmlsZURldGFpbHN9KTtcbiAgICAgIH0pLmNhdGNoKChlcnJvcjphbnkpID0+XG4gICAgICB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xuICAgICAgICB0aGlzLlVzZXJDaGFuZ2VkLmVtaXQoe3VzZXI6IHRoaXMudXNlciwgcHJvZmlsZTogdGhpcy5tb2JpVXNlclByb2ZpbGUsIHByb2ZpbGVEZXRhaWxzOiB0aGlzLnByb2ZpbGVEZXRhaWxzfSk7XG4gICAgICB9KTtcbiAgfVxuXG4gIGdldEFwcGxpY2F0aW9uRGV0YWlscygpIDogIFByb21pc2U8QXBwbGljYXRpb25EZXRhaWxzfHVuZGVmaW5lZD57XG4gICAgLy8gY29uc29sZS5sb2coXCJHZXR0aW5nIG9yZ2FuaXphdGlvbmluZm8gb24gdXNlciBjaGFuZ2VkIC4uLlwiKTtcbiAgICByZXR1cm4gdGhpcy5mZXRjaEFwcGxpY2F0aW9uRGV0YWlscygpLnRoZW4oYXBwZGV0YWlscyA9PiBcbiAgICAgIHtcbiAgICAgICAgLy8gY29uc29sZS5sb2coXCJmZXRjaEFwcGxpY2F0aW9uRGV0YWlscyBjb21wbGV0ZVwiLCBhcHBkZXRhaWxzKTtcbiAgICAgICAgdGhpcy5mZXRjaENvdW50cmllcygpLnRoZW4oY291bnRyaWVzID0+IFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKFwiZmV0Y2hDb3VudHJpZXMgY29tcGxldGVcIiwgY291bnRyaWVzKTtcbiAgICAgICAgICB9KTsgICAgICAgIFxuICAgICAgICByZXR1cm4gYXBwZGV0YWlscztcbiAgICAgIH0pO1xuICB9ICBcblxuICBmZXRjaEFwcGxpY2F0aW9uRGV0YWlscygpIDogIFByb21pc2U8QXBwbGljYXRpb25EZXRhaWxzfHVuZGVmaW5lZD57XG4gICAgaWYodGhpcy5pc0F1dGhlbnRpY2F0ZWQoKSl7XG4gICAgICB2YXIgbWFzdGVyb3JnX3ZhbGlkOmJvb2xlYW4gPSB0cnVlO1xuICAgICAgaWYodGhpcy5pc01hc3RlclVzZXJBdXRoZW50aWNhdGVkKCkpe1xuICAgICAgICBpZih0aGlzLmhhc01hc3Rlck9yZ2FuaXphdGlvbigpKXtcbiAgICAgICAgICBtYXN0ZXJvcmdfdmFsaWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGVsc2V7XG4gICAgICAgICAgbWFzdGVyb3JnX3ZhbGlkID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYobWFzdGVyb3JnX3ZhbGlkKXtcblxuICAgICAgICBjb25zdCBwYXJhbXMgPSBuZXcgSHR0cFBhcmFtcygpXG4gICAgICAgIC5zZXQoJ2tleScsIHRoaXMuY29uZmlnU2VydmljZS5hcHBfbmFtZSkgIC8vIEV2ZW4gd2l0aCBzcGVjaWFsIGNoYXJzIGxpa2UgXCJUcmVow7hqZSBEw7hyZSBQcm9kdWt0aW9uXCJcbiAgICAgICAgICAuc2V0KCdlbnYnLCB0aGlzLmNvbmZpZ1NlcnZpY2UuZW52aXJvbm1lbnQpO1xuXG4gICAgICAgIC8vIGNvbnN0IHVybCA9IGAke3RoaXMuY29uZmlnU2VydmljZS5nZXRBcGlCYXNlVXJsKCl9QXBwbGljYXRpb25EZXRhaWxzP2tleT0ke3RoaXMuY29uZmlnU2VydmljZS5hcHBfbmFtZX0mZW52PSR7dGhpcy5jb25maWdTZXJ2aWNlLmVudmlyb25tZW50fWA7XG4gICAgICAgIGNvbnN0IHVybCA9IGAke3RoaXMuY29uZmlnU2VydmljZS5nZXRBcGlCYXNlVXJsKCl9QXBwbGljYXRpb25EZXRhaWxzYDtcblxuICAgICAgICBjb25zdCBhcHBsaWNhdGlvbkRldGFpbF9PYnNlcnZhYmxlID0gIHRoaXMuaHR0cENsaWVudC5nZXQ8QXBwbGljYXRpb25EZXRhaWxzPih1cmwsIHsgcGFyYW1zIH0pXG4gICAgICAgIC5waXBlKHRpbWVvdXQoMTUwMDApLCBjYXRjaEVycm9yKHRoaXMuaGFuZGxlRXJyb3IpKS5waXBlKG1hcCgoYXBwRGV0YWlsczphbnkpID0+IFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYXBwbGljYXRpb25EZXRhaWxzID0gYXBwRGV0YWlsczsgICAgICAgIFxuICAgICAgICAgICAgaWYodGhpcy5hcHBsaWNhdGlvbkRldGFpbHMpeyAgICAgICAgICBcbiAgICAgICAgICAgICAgdGhpcy5hcHBsaWNhdGlvbkRldGFpbHNTb3VyY2UubmV4dCh0aGlzLmFwcGxpY2F0aW9uRGV0YWlscyk7XG4gICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKFwiQ3VycmVudCBBcHBsaWNhdGlvbkRldGFpbHNcIiwgdGhpcy5hcHBsaWNhdGlvbkRldGFpbHMpOyAgICAgICAgIFxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZXtcbiAgICAgICAgICAgICAgdGhpcy5hcHBsaWNhdGlvbkRldGFpbHNTb3VyY2UubmV4dCh1bmRlZmluZWQpO1xuICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhcIkFuIGVtcHR5IEFwcGxpY2F0aW9uRGV0YWlscyB3YXMgcmV0dXJuZWRcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gYXBwRGV0YWlscztcbiAgICAgICAgICB9LFxuICAgICAgICAgIChlcnI6IGFueSkgPT4gXG4gICAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihcImZldGNoQXBwbGljYXRpb25EZXRhaWxzIGVycm9yOlwiLCBlcnIpO1xuICAgICAgICAgICAgdGhpcy5hcHBsaWNhdGlvbkRldGFpbHMgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICB0aGlzLmFwcGxpY2F0aW9uRGV0YWlsc1NvdXJjZS5uZXh0KHVuZGVmaW5lZCk7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgIH0gICAgICBcbiAgICAgICAgKSk7XG4gICAgICAgIHJldHVybiBhcHBsaWNhdGlvbkRldGFpbF9PYnNlcnZhYmxlLnRvUHJvbWlzZSgpO1xuICAgICAgfVxuICAgICAgZWxzZXtcbiAgICAgICAgY29uc29sZS53YXJuKFwiQXBwbGljYXRpb25EZXRhaWxzIGlzIG51bGwsIE1hc3Rlck9yZ2FuaXphdGlvbiBpcyBub3Qgc2VsZWN0ZWRcIik7XG4gICAgICAgIHRoaXMuYXBwbGljYXRpb25EZXRhaWxzID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLmFwcGxpY2F0aW9uRGV0YWlsc1NvdXJjZS5uZXh0KHVuZGVmaW5lZCk7XG4gICAgICAgIG5ldyBQcm9taXNlKHJlc29sdmUgPT4geyAgcmVzb2x2ZSh1bmRlZmluZWQpOyB9KTtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4geyAgcmVzb2x2ZSh1bmRlZmluZWQpOyB9KTtcbiAgICAgIH1cbiAgICB9XG4gICAgZWxzZXtcbiAgICAgIGNvbnNvbGUud2FybihcIkFwcGxpY2F0aW9uRGV0YWlscyBpcyBudWxsLCB1c2VyIG5vdCBhdXRoZW50aWNhdGVkXCIpO1xuICAgICAgdGhpcy5hcHBsaWNhdGlvbkRldGFpbHMgPSB1bmRlZmluZWQ7XG4gICAgICB0aGlzLmFwcGxpY2F0aW9uRGV0YWlsc1NvdXJjZS5uZXh0KHVuZGVmaW5lZCk7XG4gICAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7ICByZXNvbHZlKHVuZGVmaW5lZCk7IH0pO1xuICAgIH1cbiAgfVxuXG4gIGZldGNoQ291bnRyaWVzKCkgOiBQcm9taXNlPE1hcDxzdHJpbmd8dW5kZWZpbmVkLENvdW50cnk+PntcbiAgICBjb25zdCBtb2JpbWFuYWdlbWVudFVybCA9IHRoaXMuY29uZmlnU2VydmljZS5nZXRNb2JpTWFuYWdlbWVudERhdGFVcmwoKTtcbiAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LmdldDxJT0RhdGFSZXN1bHQ8Q291bnRyeT4+KGAke21vYmltYW5hZ2VtZW50VXJsfUNvdW50cnk/JGZpbHRlcj1lbmFibGVkIGVxIHRydWUmJG9yZGVyYnk9TmFtZSYkc2VsZWN0PWNvZGUyLE5hbWUsTG9jYWxOYW1lLFRyYWRlQXJlYSxTaGlwcGluZ19SZXF1aXJlX1N0YXRlYClcbiAgICAucGlwZSh0aW1lb3V0KDE1MDAwKSwgY2F0Y2hFcnJvcih0aGlzLmhhbmRsZUVycm9yKSkucGlwZShtYXAocmVzdWx0ID0+IFxuICAgICAge1xuICAgICAgICB0aGlzLmNvdW50cmllcyA9IG5ldyBNYXA8c3RyaW5nIHwgdW5kZWZpbmVkLCBDb3VudHJ5PihyZXN1bHQ/LnZhbHVlLm1hcChpID0+IFtpLkNvZGUyLCBpXSkpO1xuICAgICAgICB0aGlzLmNvdW50cmllc1NvdXJjZS5uZXh0KHRoaXMuY291bnRyaWVzKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuY291bnRyaWVzO1xuICAgICAgfSxcbiAgICAgIChlcnI6IGFueSkgPT4gXG4gICAgICB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcbiAgICAgIH0gICAgICBcbiAgICApKS50b1Byb21pc2UoKTtcbiAgfVxuICBcblxuICBmZXRjaFByb2ZpbGVEZXRhaWxzKCkgOiAgUHJvbWlzZTxQcm9maWxlRGV0YWlsc3x1bmRlZmluZWQ+e1xuICAgIGlmKHRoaXMuaXNBdXRoZW50aWNhdGVkKCkgJiYgdGhpcy5tb2JpVXNlclByb2ZpbGU/LnVzZXJfaWQpeyAgICAgIFxuXG4gICAgICB2YXIgdXJsOnN0cmluZ3x1bmRlZmluZWQ7XG4gICAgICBpZih0aGlzLm1vYmlVc2VyUHJvZmlsZS5pc0VtcGxveWVlVXNlcil7XG4gICAgICAgIHVybCA9IGAke3RoaXMuY29uZmlnU2VydmljZS5nZXRNb2JpTWFuYWdlbWVudERhdGFVcmwoKX1lbXBsb3llZSgke3RoaXMubW9iaVVzZXJQcm9maWxlLnVzZXJfaWR9KT8kZXhwYW5kPUltYWdlKCRzZWxlY3Q9U3RvcmFnZUFjY291bnROYW1lLEJsb2JDb250YWluZXJOYW1lLEJsb2JOYW1lKWA7XG4gICAgICB9XG4gICAgICBlbHNlIGlmKHRoaXMubW9iaVVzZXJQcm9maWxlLmlzQ3VzdG9tZXJVc2VyKXtcbiAgICAgICAgdXJsID0gYCR7dGhpcy5jb25maWdTZXJ2aWNlLmdldE1vYmlNYW5hZ2VtZW50RGF0YVVybCgpfWN1c3RvbWVydXNlcigke3RoaXMubW9iaVVzZXJQcm9maWxlLnVzZXJfaWR9KT8kZXhwYW5kPUltYWdlKCRzZWxlY3Q9U3RvcmFnZUFjY291bnROYW1lLEJsb2JDb250YWluZXJOYW1lLEJsb2JOYW1lKWA7XG4gICAgICB9XG4gICAgICBlbHNlIGlmKHRoaXMubW9iaVVzZXJQcm9maWxlLmlzVmVuZG9yVXNlcil7XG4gICAgICAgIHVybCA9IGAke3RoaXMuY29uZmlnU2VydmljZS5nZXRNb2JpTWFuYWdlbWVudERhdGFVcmwoKX12ZW5kb3J1c2VyKCR7dGhpcy5tb2JpVXNlclByb2ZpbGUudXNlcl9pZH0pPyRleHBhbmQ9SW1hZ2UoJHNlbGVjdD1TdG9yYWdlQWNjb3VudE5hbWUsQmxvYkNvbnRhaW5lck5hbWUsQmxvYk5hbWUpYDtcbiAgICAgIH1cblxuICAgICAgLy8gY29uc29sZS5sb2coXCJmZXRjaFByb2ZpbGVEZXRhaWxzXCIsIHVybCwgdGhpcy5tb2JpVXNlclByb2ZpbGU/LnVzZXJfaWQpO1xuXG4gICAgICBpZih1cmwpe1xuICAgICAgICBjb25zdCBhcHBsaWNhdGlvbkRldGFpbF9PYnNlcnZhYmxlID0gIHRoaXMuaHR0cENsaWVudC5nZXQ8SU9EYXRhUmVzdWx0PGFueT4+KHVybClcbiAgICAgICAgLnBpcGUodGltZW91dCgxNTAwMCksIGNhdGNoRXJyb3IodGhpcy5oYW5kbGVFcnJvcikpLnBpcGUobWFwKHVzZXJfcmVzdWx0ID0+IFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHZhciBwcm9maWxlX2RldGFpbHM6UHJvZmlsZURldGFpbHN8dW5kZWZpbmVkO1xuICAgICAgICAgICAgaWYodXNlcl9yZXN1bHQudmFsdWUpe1xuICAgICAgICAgICAgICB0aGlzLnByb2ZpbGVEZXRhaWxzID0gT2JqZWN0LmFzc2lnbihuZXcgUHJvZmlsZURldGFpbHMoKSwge0lkOiB1c2VyX3Jlc3VsdC52YWx1ZVswXT8uSWQ/LnRvU3RyaW5nKCksIE5hbWU6IHVzZXJfcmVzdWx0LnZhbHVlWzBdPy5OYW1lLCBJbWFnZTogdXNlcl9yZXN1bHQudmFsdWVbMF0/LkltYWdlLCBVc2VyOiB1c2VyX3Jlc3VsdC52YWx1ZVswXX0pOyAgICAgICAgXG4gICAgICAgICAgICAgIGlmKHRoaXMucHJvZmlsZURldGFpbHMpeyAgICAgICAgICBcbiAgICAgICAgICAgICAgICB0aGlzLnByb2ZpbGVEZXRhaWxzU291cmNlLm5leHQodGhpcy5wcm9maWxlRGV0YWlscyk7XG4gICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coXCJDdXJyZW50IFByb2ZpbGVEZXRhaWxzXCIsIHRoaXMucHJvZmlsZURldGFpbHMsIGdldFByb2ZpbGVJbWFnZVVybCh0aGlzLnByb2ZpbGVEZXRhaWxzLkltYWdlPy5TdG9yYWdlQWNjb3VudE5hbWUsIHRoaXMucHJvZmlsZURldGFpbHMuSW1hZ2U/LkJsb2JDb250YWluZXJOYW1lLCB0aGlzLnByb2ZpbGVEZXRhaWxzLkltYWdlPy5CbG9iTmFtZSkpOyAgICAgICAgIFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGVsc2V7XG4gICAgICAgICAgICAgICAgdGhpcy5wcm9maWxlRGV0YWlsc1NvdXJjZS5uZXh0KHVuZGVmaW5lZCk7XG4gICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coXCJBbiBlbXB0eSBQcm9maWxlRGV0YWlscyB3YXMgcmV0dXJuZWRcIik7XG4gICAgICAgICAgICAgIH0gICAgICAgICAgICAgIFxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHByb2ZpbGVfZGV0YWlscztcbiAgICAgICAgICB9LFxuICAgICAgICAgIChlcnI6IGFueSkgPT4gXG4gICAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihcImZldGNoQXBwbGljYXRpb25EZXRhaWxzIGVycm9yOlwiLCBlcnIpO1xuICAgICAgICAgICAgdGhpcy5wcm9maWxlRGV0YWlscyA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIHRoaXMucHJvZmlsZURldGFpbHNTb3VyY2UubmV4dCh1bmRlZmluZWQpO1xuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICB9ICAgICAgXG4gICAgICAgICkpO1xuXG4gICAgICAgIHJldHVybiBhcHBsaWNhdGlvbkRldGFpbF9PYnNlcnZhYmxlLnRvUHJvbWlzZSgpO1xuICAgICAgfVxuICAgICAgZWxzZXtcbiAgICAgICAgLy8gY29uc29sZS5sb2coXCJBbiBlbXB0eSB1cmwgd2FzIHJldHVybmVkXCIsIHRoaXMubW9iaVVzZXJQcm9maWxlLmlzRW1wbG95ZWVVc2VyLCB0aGlzLm1vYmlVc2VyUHJvZmlsZS5pc0N1c3RvbWVyVXNlciwgdGhpcy5tb2JpVXNlclByb2ZpbGUuaXNWZW5kb3JVc2VyKTtcbiAgICAgICAgdGhpcy5wcm9maWxlRGV0YWlscyA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy5wcm9maWxlRGV0YWlsc1NvdXJjZS5uZXh0KHVuZGVmaW5lZCk7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHsgIHJlc29sdmUodW5kZWZpbmVkKTsgfSk7XG4gICAgICB9XG4gICAgfVxuICAgIGVsc2V7XG4gICAgICAvLyBjb25zb2xlLmxvZyhcIlVzZXIgbm90IGF1dGhcIiwgdGhpcy5tb2JpVXNlclByb2ZpbGUsIHRoaXMubW9iaVVzZXJQcm9maWxlPy51c2VyX2lkKTtcbiAgICAgIHRoaXMucHJvZmlsZURldGFpbHMgPSB1bmRlZmluZWQ7XG4gICAgICB0aGlzLnByb2ZpbGVEZXRhaWxzU291cmNlLm5leHQodW5kZWZpbmVkKTtcbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHsgIHJlc29sdmUodW5kZWZpbmVkKTsgfSk7XG4gICAgfVxuICB9XG5cbiAgLy8gLS0tIFNpZ25JbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICBwdWJsaWMgYXN5bmMgc2lnbkluKHJlZGlyZWN0VXJsOiBzdHJpbmcpOiBQcm9taXNlPGFueT4ge1xuICAgIGlmKHRoaXMuY29uZmlnU2VydmljZS5vaWRjX2xvZyl7XG4gICAgICBjb25zb2xlLmxvZyhcInNpZ25JblwiLCBcIk1vYmljbG91ZENvcmVTZXJ2aWNlXCIsIHJlZGlyZWN0VXJsKTsgIFxuICAgIH1cbiAgICByZXR1cm4gYXdhaXQgdGhpcy5tYW5hZ2VyPy5zaWduaW5SZWRpcmVjdCh7IGRhdGE6IHsgcmVkaXJlY3RVcmw6IHJlZGlyZWN0VXJsIH0gfSkuY2F0Y2goIChyZWFzb246IGFueSkgPT5cbiAgICB7XG4gICAgICBjb25zb2xlLmVycm9yKFwic2lnbkluIGZhaWxlZDpcIiwgcmVhc29uLCB0aGlzLm1vYmlVc2VyUHJvZmlsZSk7XG4gICAgICByZXR1cm4gdGhyb3dFcnJvcihyZWFzb24pO1xuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGNvbXBsZXRlU2lnbkluKCk6IFByb21pc2U8VXNlcnx1bmRlZmluZWQ+IHsgICAgXG4gICAgaWYodGhpcy5jb25maWdTZXJ2aWNlLm9pZGNfbG9nKXtcbiAgICAgIGNvbnNvbGUubG9nKFwiY29tcGxldGVTaWduSW5cIiwgXCJNb2JpY2xvdWRDb3JlU2VydmljZVwiKTsgIFxuICAgIH1cbiAgICB0aGlzLnVzZXIgPSBhd2FpdCB0aGlzLm1hbmFnZXI/LnNpZ25pblJlZGlyZWN0Q2FsbGJhY2soKTtcbiAgICB0aGlzLm9uVXNlckNoYW5nZWQoKTtcbiAgICByZXR1cm4gdGhpcy51c2VyO1xuICB9XG5cbiAgLy8gLS0tIFNpbGVudCBTaWduSW4gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICBwdWJsaWMgYXN5bmMgc2lnbkluU2lsZW50KCk6IFByb21pc2U8YW55PiB7ICBcbiAgICBpZih0aGlzLmNvbmZpZ1NlcnZpY2Uub2lkY19sb2cpe1xuICAgICAgY29uc29sZS5sb2coXCJzaWduSW5TaWxlbnRcIiwgXCJNb2JpY2xvdWRDb3JlU2VydmljZVwiKTsgIFxuICAgIH0gIFxuICAgIHJldHVybiBhd2FpdCB0aGlzLm1hbmFnZXI/LnNpZ25pblNpbGVudCgpLnRoZW4odXNlciA9PlxuICAgICAge1xuICAgICAgICB0aGlzLm9uU2lnbmVkSW5TaWxlbnQodXNlcik7XG4gICAgICB9KS5jYXRjaCggKHJlYXNvbjogYW55KSA9PlxuICAgICAge1xuICAgICAgICBjb25zb2xlLmVycm9yKFwic2lnbkluU2lsZW50IGZhaWxlZDpcIiwgcmVhc29uLCB0aGlzLm1vYmlVc2VyUHJvZmlsZSk7XG4gICAgICAgIHJldHVybiB0aHJvd0Vycm9yKHJlYXNvbik7XG4gICAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBvblNpZ25lZEluU2lsZW50KHVzZXI6IFVzZXIpe1xuICAgIGlmKHRoaXMuY29uZmlnU2VydmljZS5vaWRjX2xvZyl7XG4gICAgICBjb25zb2xlLmxvZyhcIm9uU2lnbmVkSW5TaWxlbnRcIiwgXCJNb2JpY2xvdWRDb3JlU2VydmljZVwiLCB1c2VyKTsgIFxuICAgIH0gIFxuICAgIHRoaXMudXNlciA9IHVzZXI7XG4gICAgdGhpcy5vblVzZXJDaGFuZ2VkKCk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgY29tcGxldGVTaWxlbnRTaWduSW4oKSAgOiBQcm9taXNlPGFueT57ICBcbiAgICBpZih0aGlzLmNvbmZpZ1NlcnZpY2Uub2lkY19sb2cpe1xuICAgICAgY29uc29sZS5sb2coXCJjb21wbGV0ZVNpbGVudFNpZ25JblwiLCBcIk1vYmljbG91ZENvcmVTZXJ2aWNlXCIpOyAgXG4gICAgfSAgICAgICBcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5tYW5hZ2VyPy5zaWduaW5TaWxlbnRDYWxsYmFjaygpO1xuICB9XG5cbiAgLy8gLS0tIFNpZ25PdXQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICBwdWJsaWMgYXN5bmMgc2lnbm91dCgpOiBQcm9taXNlPGFueT4ge1xuICAgIGlmKHRoaXMuY29uZmlnU2VydmljZS5vaWRjX2xvZyl7XG4gICAgICBjb25zb2xlLmxvZyhcInNpZ25vdXRcIiwgXCJNb2JpY2xvdWRDb3JlU2VydmljZVwiKTsgIFxuICAgIH0gICBcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5tYW5hZ2VyPy5zaWdub3V0UmVkaXJlY3QoKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBjb21wbGV0ZVNpZ25vdXQoKSB7XG4gICAgaWYodGhpcy5jb25maWdTZXJ2aWNlLm9pZGNfbG9nKXtcbiAgICAgIGNvbnNvbGUubG9nKFwiY29tcGxldGVTaWdub3V0XCIsIFwiTW9iaWNsb3VkQ29yZVNlcnZpY2VcIik7ICBcbiAgICB9ICAgXG4gICAgdGhpcy5vblVzZXJDaGFuZ2VkKCk7XG4gIH1cblxuICAvLyAtLS0gSGVscGVyIG1ldGhvZHMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICBwdWJsaWMgaXNBdXRoZW50aWNhdGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnVzZXIgIT0gbnVsbCAmJiAhdGhpcy51c2VyLmV4cGlyZWQ7XG4gIH1cblxuICBwdWJsaWMgaXNPcmdhbml6YXRpb25BdXRoZW50aWNhdGVkKCk6IGJvb2xlYW58dW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5pc0F1dGhlbnRpY2F0ZWQoKSAmJiB0aGlzLm1vYmlVc2VyUHJvZmlsZSAhPSBudWxsICYmICh0aGlzLm1vYmlVc2VyUHJvZmlsZS5pc09yZ2FuaXphdGlvblVzZXIgfHwgdGhpcy5tb2JpVXNlclByb2ZpbGUuaXNPcmdhbml6YXRpb25BZG1pbiB8fCB0aGlzLm1vYmlVc2VyUHJvZmlsZS5pc0VtcGxveWVlVXNlcik7XG4gIH1cblxuICBwdWJsaWMgaXNNYXN0ZXJPcmdhbml6YXRpb25BdXRoZW50aWNhdGVkKCk6IGJvb2xlYW58dW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5pc0F1dGhlbnRpY2F0ZWQoKSAmJiAodGhpcy5tb2JpVXNlclByb2ZpbGUgIT0gbnVsbCAmJiAodGhpcy5tb2JpVXNlclByb2ZpbGUuaXNPcmdhbml6YXRpb25Vc2VyIHx8IHRoaXMubW9iaVVzZXJQcm9maWxlLmlzT3JnYW5pemF0aW9uQWRtaW4gfHwgdGhpcy5tb2JpVXNlclByb2ZpbGUuaXNFbXBsb3llZVVzZXIpKSB8fCB0aGlzLmlzTWFzdGVyVXNlckF1dGhlbnRpY2F0ZWQoKTtcbiAgfVxuXG4gIHB1YmxpYyBpc09yZ2FuaXphdGlvblVzZXJBdXRoZW50aWNhdGVkKCk6IGJvb2xlYW58dW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5pc0F1dGhlbnRpY2F0ZWQoKSAmJiB0aGlzLm1vYmlVc2VyUHJvZmlsZSAhPSBudWxsICYmICh0aGlzLm1vYmlVc2VyUHJvZmlsZS5pc09yZ2FuaXphdGlvblVzZXIgfHwgdGhpcy5tb2JpVXNlclByb2ZpbGUuaXNPcmdhbml6YXRpb25BZG1pbik7XG4gIH1cblxuICBwdWJsaWMgaXNNYXN0ZXJPcmdhbml6YXRpb25Vc2VyQXV0aGVudGljYXRlZCgpOiBib29sZWFufHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuaXNBdXRoZW50aWNhdGVkKCkgJiYgKHRoaXMubW9iaVVzZXJQcm9maWxlICE9IG51bGwgJiYgKHRoaXMubW9iaVVzZXJQcm9maWxlLmlzT3JnYW5pemF0aW9uVXNlciB8fCB0aGlzLm1vYmlVc2VyUHJvZmlsZS5pc09yZ2FuaXphdGlvbkFkbWluKSkgfHwgdGhpcy5pc01hc3RlclVzZXJBdXRoZW50aWNhdGVkKCk7XG4gIH1cblxuICBwdWJsaWMgaXNNYXN0ZXJPcmdhbml6YXRpb25BZG1pbkF1dGhlbnRpY2F0ZWQoKTogYm9vbGVhbnx1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLmlzQXV0aGVudGljYXRlZCgpICYmICh0aGlzLm1vYmlVc2VyUHJvZmlsZSAhPSBudWxsICYmICh0aGlzLm1vYmlVc2VyUHJvZmlsZS5pc09yZ2FuaXphdGlvbkFkbWluKSkgfHwgdGhpcy5pc01hc3RlclVzZXJBdXRoZW50aWNhdGVkKCk7XG4gIH1cblxuICBwdWJsaWMgaXNFbXBsb3llZUF1dGhlbnRpY2F0ZWQoKTogYm9vbGVhbnx1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLmlzQXV0aGVudGljYXRlZCgpICYmIHRoaXMubW9iaVVzZXJQcm9maWxlICE9IG51bGwgJiYgKHRoaXMubW9iaVVzZXJQcm9maWxlLmlzT3JnYW5pemF0aW9uVXNlciB8fCB0aGlzLm1vYmlVc2VyUHJvZmlsZS5pc09yZ2FuaXphdGlvbkFkbWluIHx8IHRoaXMubW9iaVVzZXJQcm9maWxlLmlzRW1wbG95ZWVVc2VyKTtcbiAgfVxuXG4gIHB1YmxpYyBpc01hc3RlckVtcGxveWVlQXV0aGVudGljYXRlZCgpOiBib29sZWFufHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuaXNBdXRoZW50aWNhdGVkKCkgJiYgKHRoaXMubW9iaVVzZXJQcm9maWxlICE9IG51bGwgJiYgKHRoaXMubW9iaVVzZXJQcm9maWxlLmlzT3JnYW5pemF0aW9uVXNlciB8fCB0aGlzLm1vYmlVc2VyUHJvZmlsZS5pc09yZ2FuaXphdGlvbkFkbWluIHx8IHRoaXMubW9iaVVzZXJQcm9maWxlLmlzRW1wbG95ZWVVc2VyKSkgfHwgdGhpcy5pc01hc3RlclVzZXJBdXRoZW50aWNhdGVkKCk7XG4gIH0gIFxuXG4gIHB1YmxpYyBpc0N1c3RvbWVyVXNlckF1dGhlbnRpY2F0ZWQoKTogYm9vbGVhbnx1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLmlzQXV0aGVudGljYXRlZCgpICYmIHRoaXMubW9iaVVzZXJQcm9maWxlICE9IG51bGwgJiYgKHRoaXMubW9iaVVzZXJQcm9maWxlLmlzQ3VzdG9tZXJVc2VyKTtcbiAgfVxuXG4gIHB1YmxpYyBpc01hc3RlckN1c3RvbWVyVXNlckF1dGhlbnRpY2F0ZWQoKTogYm9vbGVhbnx1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLmlzQXV0aGVudGljYXRlZCgpICYmICh0aGlzLm1vYmlVc2VyUHJvZmlsZSAhPSBudWxsICYmICh0aGlzLm1vYmlVc2VyUHJvZmlsZS5pc0N1c3RvbWVyVXNlcikpIHx8IHRoaXMuaXNNYXN0ZXJVc2VyQXV0aGVudGljYXRlZCgpO1xuICB9XG5cbiAgcHVibGljIGlzVmVuZG9yVXNlckF1dGhlbnRpY2F0ZWQoKTogYm9vbGVhbnx1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLmlzQXV0aGVudGljYXRlZCgpICYmIHRoaXMubW9iaVVzZXJQcm9maWxlICE9IG51bGwgJiYgKHRoaXMubW9iaVVzZXJQcm9maWxlLmlzVmVuZG9yVXNlcik7XG4gIH1cblxuICBwdWJsaWMgaXNNYXN0ZXJWZW5kb3JVc2VyQXV0aGVudGljYXRlZCgpOiBib29sZWFufHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuaXNBdXRoZW50aWNhdGVkKCkgJiYgKHRoaXMubW9iaVVzZXJQcm9maWxlICE9IG51bGwgJiYgKHRoaXMubW9iaVVzZXJQcm9maWxlLmlzVmVuZG9yVXNlcikpIHx8IHRoaXMuaXNNYXN0ZXJVc2VyQXV0aGVudGljYXRlZCgpO1xuICB9ICBcblxuICBwdWJsaWMgaXNCMkJBdXRoZW50aWNhdGVkKCk6IGJvb2xlYW58dW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5pc0F1dGhlbnRpY2F0ZWQoKSAmJiAodGhpcy5pc09yZ2FuaXphdGlvbkF1dGhlbnRpY2F0ZWQoKSB8fCB0aGlzLmlzQ3VzdG9tZXJVc2VyQXV0aGVudGljYXRlZCgpfHwgdGhpcy5pc1ZlbmRvclVzZXJBdXRoZW50aWNhdGVkKCkpO1xuICB9XG5cbiAgcHVibGljIGlzTWFzdGVyQjJCQXV0aGVudGljYXRlZCgpOiBib29sZWFufHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuaXNBdXRoZW50aWNhdGVkKCkgJiYgKHRoaXMuaXNPcmdhbml6YXRpb25BdXRoZW50aWNhdGVkKCkgfHwgdGhpcy5pc0N1c3RvbWVyVXNlckF1dGhlbnRpY2F0ZWQoKXx8IHRoaXMuaXNWZW5kb3JVc2VyQXV0aGVudGljYXRlZCgpKSB8fCB0aGlzLmlzTWFzdGVyVXNlckF1dGhlbnRpY2F0ZWQoKTtcbiAgfVxuXG4gIHB1YmxpYyBpc01hc3RlclVzZXJBdXRoZW50aWNhdGVkKCk6IGJvb2xlYW58dW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5pc0F1dGhlbnRpY2F0ZWQoKSAmJiB0aGlzLm1vYmlVc2VyUHJvZmlsZSAhPSBudWxsICYmICh0aGlzLm1vYmlVc2VyUHJvZmlsZS5pc01hc3RlclVzZXIgfHwgdGhpcy5tb2JpVXNlclByb2ZpbGUuaXNNYXN0ZXJBZG1pbik7XG4gIH1cblxuICBwdWJsaWMgaXNNYXN0ZXJBZG1pbkF1dGhlbnRpY2F0ZWQoKTogYm9vbGVhbnx1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLmlzQXV0aGVudGljYXRlZCgpICYmIHRoaXMubW9iaVVzZXJQcm9maWxlICE9IG51bGwgJiYgKHRoaXMubW9iaVVzZXJQcm9maWxlLmlzTWFzdGVyQWRtaW4pO1xuICB9XG5cbiAgcHVibGljIGhhc01hc3Rlck9yZ2FuaXphdGlvbigpOiBib29sZWFuIHtcbiAgICB2YXIgc3RyTWFzdGVyT3JnYW5pemF0aW9uSWQgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShcIk1hc3Rlck9yZ2FuaXphdGlvbklkXCIpO1xuICAgIGlmKHN0ck1hc3Rlck9yZ2FuaXphdGlvbklkICYmIHN0ck1hc3Rlck9yZ2FuaXphdGlvbklkLmxlbmd0aCA+IDApe1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGVsc2V7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGdldE1hc3Rlck9yZ2FuaXphdGlvbigpOiBzdHJpbmd8bnVsbCB7XG4gICAgdmFyIHN0ck1hc3Rlck9yZ2FuaXphdGlvbklkID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJNYXN0ZXJPcmdhbml6YXRpb25JZFwiKTtcbiAgICByZXR1cm4gc3RyTWFzdGVyT3JnYW5pemF0aW9uSWQ7XG4gIH1cblxuICBwdWJsaWMgc2V0TWFzdGVyT3JnYW5pemF0aW9uKHN0ck1hc3Rlck9yZ2FuaXphdGlvbklkOiBzdHJpbmd8bnVsbCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmKHN0ck1hc3Rlck9yZ2FuaXphdGlvbklkKXtcbiAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKFwiTWFzdGVyT3JnYW5pemF0aW9uSWRcIiwgc3RyTWFzdGVyT3JnYW5pemF0aW9uSWQpO1xuICAgICAgcmV0dXJuIHRoaXMuZmV0Y2hBcHBsaWNhdGlvbkRldGFpbHMoKS50aGVuKGFwcGRldGFpbHMgPT4gXG4gICAgICAgIHtcbiAgICAgICAgICAvLyBjb25zb2xlLmxvZyhcInNldE1hc3Rlck9yZ2FuaXphdGlvbiBjb21wbGV0ZTpcIiwgYXBwZGV0YWlscyk7XG4gICAgICAgIH0pOyAgICAgIFxuICAgIH1cbiAgICBlbHNle1xuICAgICAgdGhpcy5yZW1vdmVNYXN0ZXJPcmdhbml6YXRpb24oKTtcbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHsgIHJlc29sdmUodW5kZWZpbmVkKTsgfSk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHJlbW92ZU1hc3Rlck9yZ2FuaXphdGlvbigpOiB2b2lkIHtcbiAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShcIk1hc3Rlck9yZ2FuaXphdGlvbklkXCIpO1xuICB9XG5cbiAgcHVibGljIGhhc01hc3RlckN1c3RvbWVyKCk6IGJvb2xlYW4ge1xuICAgIHZhciBzdHJNYXN0ZXJDdXN0b21lcklkID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJNYXN0ZXJDdXN0b21lcklkXCIpO1xuICAgIGlmKHN0ck1hc3RlckN1c3RvbWVySWQgJiYgc3RyTWFzdGVyQ3VzdG9tZXJJZC5sZW5ndGggPiAwKXtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBlbHNle1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBnZXRNYXN0ZXJDdXN0b21lcigpOiBzdHJpbmd8bnVsbCB7XG4gICAgdmFyIHN0ck1hc3RlckN1c3RvbWVySWQgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShcIk1hc3RlckN1c3RvbWVySWRcIik7XG4gICAgcmV0dXJuIHN0ck1hc3RlckN1c3RvbWVySWQ7XG4gIH1cblxuICBwdWJsaWMgc2V0TWFzdGVyQ3VzdG9tZXIoc3RyTWFzdGVyQ3VzdG9tZXJJZDogc3RyaW5nfG51bGwpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZihzdHJNYXN0ZXJDdXN0b21lcklkKXtcbiAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKFwiTWFzdGVyQ3VzdG9tZXJJZFwiLCBzdHJNYXN0ZXJDdXN0b21lcklkKTtcbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHsgIHJlc29sdmUodW5kZWZpbmVkKTsgfSk7ICAgICBcbiAgICB9XG4gICAgZWxzZXtcbiAgICAgIHRoaXMucmVtb3ZlTWFzdGVyQ3VzdG9tZXIoKTtcbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHsgIHJlc29sdmUodW5kZWZpbmVkKTsgfSk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHJlbW92ZU1hc3RlckN1c3RvbWVyKCk6IHZvaWQge1xuICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKFwiTWFzdGVyQ3VzdG9tZXJJZFwiKTtcbiAgfSAgXG5cbiAgcHVibGljIGhhc01hc3RlclZlbmRvcigpOiBib29sZWFuIHtcbiAgICB2YXIgc3RyTWFzdGVyVmVuZG9ySWQgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShcIk1hc3RlclZlbmRvcklkXCIpO1xuICAgIGlmKHN0ck1hc3RlclZlbmRvcklkICYmIHN0ck1hc3RlclZlbmRvcklkLmxlbmd0aCA+IDApe1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGVsc2V7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGdldE1hc3RlclZlbmRvcigpOiBzdHJpbmd8bnVsbCB7XG4gICAgdmFyIHN0ck1hc3RlclZlbmRvcklkID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJNYXN0ZXJWZW5kb3JJZFwiKTtcbiAgICByZXR1cm4gc3RyTWFzdGVyVmVuZG9ySWQ7XG4gIH1cblxuICBwdWJsaWMgc2V0TWFzdGVyVmVuZG9yKHN0ck1hc3RlclZlbmRvcklkOiBzdHJpbmd8bnVsbCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmKHN0ck1hc3RlclZlbmRvcklkKXtcbiAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKFwiTWFzdGVyVmVuZG9ySWRcIiwgc3RyTWFzdGVyVmVuZG9ySWQpO1xuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4geyAgcmVzb2x2ZSh1bmRlZmluZWQpOyB9KTsgICAgICBcbiAgICB9XG4gICAgZWxzZXtcbiAgICAgIHRoaXMucmVtb3ZlTWFzdGVyVmVuZG9yKCk7XG4gICAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7ICByZXNvbHZlKHVuZGVmaW5lZCk7IH0pO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyByZW1vdmVNYXN0ZXJWZW5kb3IoKTogdm9pZCB7XG4gICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oXCJNYXN0ZXJWZW5kb3JJZFwiKTtcbiAgfSAgXG5cbiAgcHVibGljIHJlZGlyZWN0VXJsKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMudXNlcj8uc3RhdGU/LnJlZGlyZWN0VXJsO1xuICB9XG5cbiAgcHVibGljIGdldCBhY2Nlc3NUb2tlbigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnVzZXI/LmFjY2Vzc190b2tlbiA/PyAnJztcbiAgfVxuXG4gIHB1YmxpYyBnZXQgYXV0aG9yaXphdGlvbkhlYWRlcigpOiBzdHJpbmd8dW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy51c2VyPy50b2tlbl90eXBlPy5jb25jYXQoXCIgXCIsIHRoaXMudXNlci5hY2Nlc3NfdG9rZW4pO1xuICB9XG5cbiAgcHVibGljIGdldCB0b2tlbkV4cGlyZXNBdCgpOiBEYXRlfHVuZGVmaW5lZCB7XG4gICAgaWYodGhpcy51c2VyKVxuICAgICAgcmV0dXJuIG5ldyBEYXRlKHRoaXMudXNlci5leHBpcmVzX2F0ICogMTAwMCk7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgdG9rZW5WYWxpZFVudGlsKCk6IERhdGV8dW5kZWZpbmVkIHtcbiAgICBpZih0aGlzLnVzZXIpXG4gICAgICByZXR1cm4gbmV3IERhdGUoKHRoaXMudXNlci5leHBpcmVzX2F0IC0xMjApICogMTAwMCk7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgaXNUb2tlbkV4cGlyZWQoKTogYm9vbGVhbiB7XG4gICAgaWYodGhpcy51c2VyKVxuICAgICAgcmV0dXJuIHRoaXMudXNlcj8uZXhwaXJlc19pbiA8PSAxMjA7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaGFuZGxlRXJyb3IoZXJyb3I6YW55KSB7XG4gICAgbGV0IGVycm9yTWVzc2FnZSA9ICcnO1xuICAgIGlmIChlcnJvciAmJiBlcnJvci5lcnJvciAmJiBlcnJvci5lcnJvci5lcnJvcil7XG4gICAgICAvL0dldCBKc29uIGVycm9yXG4gICAgICBlcnJvck1lc3NhZ2UgPSBlcnJvci5lcnJvci5lcnJvcjtcbiAgICB9XG4gICAgZWxzZSBpZihlcnJvciAmJiBlcnJvci5lcnJvciBpbnN0YW5jZW9mIEVycm9yRXZlbnQpIHtcbiAgICAgIC8vIEdldCBjbGllbnQtc2lkZSBlcnJvclxuICAgICAgICBlcnJvck1lc3NhZ2UgPSBlcnJvci5lcnJvci5tZXNzYWdlO1xuICAgIH0gXG4gICAgZWxzZSB7XG4gICAgICAvLyBHZXQgc2VydmVyLXNpZGUgZXJyb3JcbiAgICAgIGVycm9yTWVzc2FnZSA9IGBFcnJvciBDb2RlOiAke2Vycm9yLnN0YXR1c31cXG5NZXNzYWdlOiAke2Vycm9yLm1lc3NhZ2V9YDtcbiAgICB9XG4gICAgLy8gd2luZG93LmFsZXJ0KGVycm9yTWVzc2FnZSk7XG4gICAgZXZhbHVhdGVGb3JNYXN0ZXJPcmdhbml6YXRpb25DbGVhcmFuY2UoZXJyb3JNZXNzYWdlKTtcbiAgICByZXR1cm4gdGhyb3dFcnJvcihlcnJvck1lc3NhZ2UpO1xuICB9XG5cbiAgZW5hYmxlT2lkY0xvZ0V2ZW50cygpe1xuICAgICAgaWYodGhpcy5tYW5hZ2VyKXtcbiAgICAgICAgdGhpcy5tYW5hZ2VyLmV2ZW50cy5hZGRVc2VyTG9hZGVkKCh1c2VyKSA9PiB7XG4gICAgICAgICAgY29uc29sZS5sb2coJ1VzZXIgbG9hZGVkOicsIHVzZXIpO1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLm1hbmFnZXIuZXZlbnRzLmFkZFVzZXJVbmxvYWRlZCgoKSA9PiB7XG4gICAgICAgICAgY29uc29sZS5sb2coJ1VzZXIgdW5sb2FkZWQnKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5tYW5hZ2VyLmV2ZW50cy5hZGRBY2Nlc3NUb2tlbkV4cGlyaW5nKCgpID0+IHtcbiAgICAgICAgICBjb25zb2xlLmxvZygnQWNjZXNzIHRva2VuIGV4cGlyaW5nLi4uJyk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMubWFuYWdlci5ldmVudHMuYWRkQWNjZXNzVG9rZW5FeHBpcmVkKCgpID0+IHtcbiAgICAgICAgICBjb25zb2xlLmxvZygnQWNjZXNzIHRva2VuIGV4cGlyZWQnKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5tYW5hZ2VyLmV2ZW50cy5hZGRTaWxlbnRSZW5ld0Vycm9yKChlcnJvcikgPT4ge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1NpbGVudCByZW5ldyBlcnJvcjonLCBlcnJvcik7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMubWFuYWdlci5ldmVudHMuYWRkVXNlclNpZ25lZE91dCgoKSA9PiB7XG4gICAgICAgICAgY29uc29sZS5sb2coJ1VzZXIgc2lnbmVkIG91dCBmcm9tIGlkZW50aXR5IHNlcnZlcicpO1xuICAgICAgICAgIGNvbnNvbGUudHJhY2UoJ1VzZXIgc2lnbmVkIG91dCBzdGFjayB0cmFjZScpO1xuICAgICAgICAgIC8vIFRoaXMgaXMgcGFydGljdWxhcmx5IGltcG9ydGFudCB0byBjaGVjayAtIGlmIHRoaXMgaXMgZmlyaW5nLFxuICAgICAgICAgIC8vIGl0IGNvdWxkIHRyaWdnZXIgYXBwIHJlbG9hZHNcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5tYW5hZ2VyLmV2ZW50cy5yZW1vdmVVc2VyU2lnbmVkT3V0KCgpID0+IHtcbiAgICAgICAgICBjb25zb2xlLmxvZygncmVtb3ZlVXNlclNpZ25lZE91dCBjYWxsZWQnKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5tYW5hZ2VyLmV2ZW50cy5hZGRVc2VyU2Vzc2lvbkNoYW5nZWQoKCkgPT4ge1xuICAgICAgICAgIGNvbnNvbGUubG9nKCdhZGRVc2VyU2Vzc2lvbkNoYW5nZWQgY2FsbGVkJyk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMubWFuYWdlci5ldmVudHMucmVtb3ZlVXNlclNlc3Npb25DaGFuZ2VkKCgpID0+IHtcbiAgICAgICAgICBjb25zb2xlLmxvZygncmVtb3ZlVXNlclNlc3Npb25DaGFuZ2VkIGNhbGxlZCcpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgfVxuXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBldmFsdWF0ZUZvck1hc3Rlck9yZ2FuaXphdGlvbkNsZWFyYW5jZShlcnJvck1lc3NhZ2U6c3RyaW5nKSA6IHZvaWR7XG4gIGlmKGVycm9yTWVzc2FnZSAmJiBlcnJvck1lc3NhZ2UudG9TdHJpbmcoKS5pbmRleE9mKCdObyBUZXN0IGRhdGFiYXNlIGhhcyBiZWVuIHNldHVwJykgPj0gMCl7XG4gICAgY29uc29sZS5sb2coXCJDaGVjayBmb3IgY2xlYXJhbmNlIG9mIE1hc3Rlck9yZ2FuaXphdGlvbklkXCIpO1xuICAgIGxldCBtYXN0ZXJPcmdJZCA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKFwiTWFzdGVyT3JnYW5pemF0aW9uSWRcIik7XG4gICAgaWYobWFzdGVyT3JnSWQpe1xuICAgICAgY29uc29sZS5sb2coXCJDbGVhcmluZyBNYXN0ZXJPcmdhbml6YXRpb25JZDpcIiwgbWFzdGVyT3JnSWQpO1xuICAgICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oXCJNYXN0ZXJPcmdhbml6YXRpb25JZFwiKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
|