@propmix/profet-common-header 3.2.2-beta → 3.3.0

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/README.md CHANGED
@@ -65,6 +65,10 @@ Use an initializer function to configure parameters
65
65
  signOutUrl: Amplify.getConfig().Auth.Cognito.loginWith.oauth.redirectSignOut[0]
66
66
  // signOutUrl - using this option to specify the logout path.
67
67
  // Usually take this from the Amplify config
68
+
69
+ enableLastUrlRedirection: true
70
+ // enableLastUrlRedirection - using this option to enable the last url redirection.
71
+ // Default value is false
68
72
  };
69
73
 
70
74
  return headerConfig;
@@ -1,2 +1,2 @@
1
1
  export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbW9uLWhlYWRlci5pbnRlcmZhY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21tb24taGVhZGVyL3NyYy9saWIvY29tbW9uLWhlYWRlci5pbnRlcmZhY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFBST0ZFVF9BUFBTIH0gZnJvbSBcIi4vdXRpbHMvYXBwcy5lbnVtXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXBwTWVudSB7XG4gICAgYXBwVHlwZTogUFJPRkVUX0FQUFM7XG4gICAgbWVudU5hbWU6IHN0cmluZztcbiAgICBpY29uPzogc3RyaW5nO1xuICAgIHBhdGg6IHN0cmluZztcbiAgICBncm91cEJ5Pzogc3RyaW5nO1xufVxuXG5leHBvcnQgdHlwZSBBcHBsaWNhdGlvbkNvbmZpZyA9IHtcbiAgICBba2V5IGluIFBST0ZFVF9BUFBTXToge1xuICAgICAgICBhcHBOYW1lOiBzdHJpbmc7XG4gICAgICAgIGFwcExvZ29Vcmk6IHN0cmluZztcbiAgICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSGVhZGVyQ29uZmlnIHtcbiAgICBhcGlVcmw6IHN0cmluZztcbiAgICBwb3J0YWxGcm9udGVuZFVybD86IHN0cmluZztcbiAgICBzaWduT3V0VXJsOiBzdHJpbmc7XG4gICAgYXBwVHlwZTogUFJPRkVUX0FQUFM7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29tcGFueSB7XG4gICAgaWQ6IG51bWJlcjtcbiAgICBjb21wYW55S2V5OiBzdHJpbmc7XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIGxvZ28/OiBzdHJpbmc7XG4gICAgaXNBY3RpdmU6IGJvb2xlYW47XG4gICAgYmFzZVVybHM6IHtcbiAgICAgICAgcHJvZmV0X3BvcnRhbD86IHN0cmluZyxcbiAgICAgICAgYXBwcmFpc2FsX21hbmFnZW1lbnQ/OiBzdHJpbmcsXG4gICAgICAgIGFwcHJhaXNhbF9yZXZpZXc/OiBzdHJpbmcsXG4gICAgICAgIGFwcHJhaXNhbF92YWx1YXRpb24/OiBzdHJpbmdcbiAgICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2Vzc2lvbk91dEluZm8ge1xuICAgIHNlc3Npb25PdXRUaW1lSW5NaW5zPzogbnVtYmVyO1xufSJdfQ==
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbW9uLWhlYWRlci5pbnRlcmZhY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21tb24taGVhZGVyL3NyYy9saWIvY29tbW9uLWhlYWRlci5pbnRlcmZhY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFBST0ZFVF9BUFBTIH0gZnJvbSBcIi4vdXRpbHMvYXBwcy5lbnVtXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXBwTWVudSB7XG4gICAgYXBwVHlwZTogUFJPRkVUX0FQUFM7XG4gICAgbWVudU5hbWU6IHN0cmluZztcbiAgICBpY29uPzogc3RyaW5nO1xuICAgIHBhdGg6IHN0cmluZztcbiAgICBncm91cEJ5Pzogc3RyaW5nO1xufVxuXG5leHBvcnQgdHlwZSBBcHBsaWNhdGlvbkNvbmZpZyA9IHtcbiAgICBba2V5IGluIFBST0ZFVF9BUFBTXToge1xuICAgICAgICBhcHBOYW1lOiBzdHJpbmc7XG4gICAgICAgIGFwcExvZ29Vcmk6IHN0cmluZztcbiAgICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSGVhZGVyQ29uZmlnIHtcbiAgICBhcGlVcmw6IHN0cmluZztcbiAgICBwb3J0YWxGcm9udGVuZFVybD86IHN0cmluZztcbiAgICBzaWduT3V0VXJsOiBzdHJpbmc7XG4gICAgYXBwVHlwZTogUFJPRkVUX0FQUFM7XG4gICAgZW5hYmxlTGFzdFVybFJlZGlyZWN0aW9uPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDb21wYW55IHtcbiAgICBpZDogbnVtYmVyO1xuICAgIGNvbXBhbnlLZXk6IHN0cmluZztcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgbG9nbz86IHN0cmluZztcbiAgICBpc0FjdGl2ZTogYm9vbGVhbjtcbiAgICBiYXNlVXJsczoge1xuICAgICAgICBwcm9mZXRfcG9ydGFsPzogc3RyaW5nLFxuICAgICAgICBhcHByYWlzYWxfbWFuYWdlbWVudD86IHN0cmluZyxcbiAgICAgICAgYXBwcmFpc2FsX3Jldmlldz86IHN0cmluZyxcbiAgICAgICAgYXBwcmFpc2FsX3ZhbHVhdGlvbj86IHN0cmluZ1xuICAgIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBTZXNzaW9uT3V0SW5mbyB7XG4gICAgc2Vzc2lvbk91dFRpbWVJbk1pbnM/OiBudW1iZXI7XG59Il19
@@ -10,6 +10,8 @@ import * as i0 from "@angular/core";
10
10
  export class CommonHeaderService {
11
11
  constructor(config) {
12
12
  this.config = config;
13
+ this.SESSION_EXPIRED_KEY = 'session_expired';
14
+ this.LAST_ACTIVE_SESSION_KEY = 'lastActiveSessionTime';
13
15
  this.baseUrl = '';
14
16
  this.isSessionExpiryDialogOpen = false;
15
17
  this._apiGatewayService = inject(ApiGatewayService);
@@ -103,6 +105,63 @@ export class CommonHeaderService {
103
105
  let url = `${this.baseUrl + EndPoints.API_URLS.updateLastAccessedApplication}`;
104
106
  return this._apiGatewayService.doPost(url, reqBody);
105
107
  }
108
+ /**
109
+ * Helper to get the root domain (e.g. .profet.ai) to share cookies across subdomains/ports.
110
+ * If on localhost or an IP, it falls back to the hostname.
111
+ */
112
+ getRootDomain() {
113
+ const hostname = window.location.hostname;
114
+ const parts = hostname.split('.');
115
+ if (parts.length > 2 && !/^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/.test(hostname)) {
116
+ // If we have 4+ parts (e.g. app1.local.profet.ai), we want to include the environment (local.profet.ai)
117
+ // to avoid sharing cookies with app1.dev.profet.ai or app1.profet.ai.
118
+ if (parts.length > 3) {
119
+ return '.' + parts.slice(-3).join('.');
120
+ }
121
+ // For standard 3 parts (app1.profet.ai), share on .profet.ai
122
+ return '.' + parts.slice(-2).join('.');
123
+ }
124
+ return hostname;
125
+ }
126
+ /**
127
+ * Generates a unique cookie name based on the environment root domain.
128
+ * e.g. 'lastActive' on .qa.profet.ai -> 'lastActive_qa_profet_ai'
129
+ * @param name Base cookie name
130
+ */
131
+ getSuffixedCookieName(name) {
132
+ const rootDomain = this.getRootDomain();
133
+ // Replace dots with underscores to create a clean suffix
134
+ const suffix = rootDomain.replace(/\./g, '_');
135
+ return `${name}${suffix}`;
136
+ }
137
+ setCookie(name, value, days) {
138
+ const uniqueName = this.getSuffixedCookieName(name);
139
+ let expires = "";
140
+ if (days) {
141
+ const date = new Date();
142
+ date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000));
143
+ expires = "; expires=" + date.toUTCString();
144
+ }
145
+ // Important: set domain to allow sharing across subdomains
146
+ const domain = "; domain=" + this.getRootDomain();
147
+ document.cookie = uniqueName + "=" + (value || "") + expires + domain + "; path=/";
148
+ }
149
+ getCookie(name) {
150
+ const uniqueName = this.getSuffixedCookieName(name);
151
+ const nameEQ = uniqueName + "=";
152
+ const ca = document.cookie.split(';');
153
+ for (let i = 0; i < ca.length; i++) {
154
+ let c = ca[i];
155
+ while (c.charAt(0) == ' ')
156
+ c = c.substring(1, c.length);
157
+ if (c.indexOf(nameEQ) == 0)
158
+ return c.substring(nameEQ.length, c.length);
159
+ }
160
+ return null;
161
+ }
162
+ deleteCookie(name) {
163
+ this.setCookie(name, '', -1);
164
+ }
106
165
  }
107
166
  CommonHeaderService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: CommonHeaderService, deps: [{ token: 'headerConfig' }], target: i0.ɵɵFactoryTarget.Injectable });
108
167
  CommonHeaderService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: CommonHeaderService, providedIn: 'root' });
@@ -115,4 +174,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
115
174
  type: Inject,
116
175
  args: ['headerConfig']
117
176
  }] }]; } });
118
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbW9uLWhlYWRlci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvY29tbW9uLWhlYWRlci9zcmMvbGliL2NvbW1vbi1oZWFkZXIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0QsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxNQUFNLEVBQUUsYUFBYSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzdDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRTFELE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLHFEQUFxRCxDQUFDO0FBQ2pHLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQzs7QUFLOUMsTUFBTSxPQUFPLG1CQUFtQjtJQWE5QixZQUE0QyxNQUFvQjtRQUFwQixXQUFNLEdBQU4sTUFBTSxDQUFjO1FBWnhELFlBQU8sR0FBVyxFQUFFLENBQUM7UUFFN0IsOEJBQXlCLEdBQUcsS0FBSyxDQUFDO1FBQzFCLHVCQUFrQixHQUFHLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBQ2hELFlBQU8sR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7UUFFM0IscUJBQWdCLEdBQUcsSUFBSSxhQUFhLENBQW1CLENBQUMsQ0FBQyxDQUFDO1FBQzNELG9CQUFlLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFlBQVksRUFBRSxDQUFDO1FBRXRELHVCQUFrQixHQUFHLElBQUksYUFBYSxDQUFtQixDQUFDLENBQUMsQ0FBQztR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T0FBTyxHQUFHLENBQUM7UUFDYixDQUFDLEVBQUUsRUFBRSxDQUFDLENBQ1AsQ0FBQztJQUNKLENBQUM7SUFDRCxXQUFXO1FBQ1QsSUFBSSxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsT0FBTyxHQUFHLFNBQVMsQ0FBQyxRQUFRLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDNUQsT0FBTyxJQUFJLENBQUMsa0JBQWtCLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FDNUMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFO1lBQ2xCLElBQUksR0FBRyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUU7Z0JBQ3RCLEdBQUcsR0FBRyxHQUFHLEVBQUUsSUFBSSxFQUFFLE9BQU8sQ0FBQzthQUMxQjtZQUNELE9BQU8sR0FBRyxDQUFDO1FBQ2IsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUNQLENBQUM7SUFDSixDQUFDO0lBRUQsNkJBQTZCLENBQUMsT0FBWTtRQUN4QyxJQUFJLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxPQUFPLEdBQUcsU0FBUyxDQUFDLFFBQVEsQ0FBQyw2QkFBNkIsRUFBRSxDQUFDO1FBQy9FLE9BQU8sSUFBSSxDQUFDLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDdEQsQ0FBQzs7aUhBbEhVLG1CQUFtQixrQkFhVixjQUFjO3FIQWJ2QixtQkFBbUIsY0FGbEIsTUFBTTs0RkFFUCxtQkFBbUI7a0JBSC9CLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25COzswQkFjYyxNQUFNOzJCQUFDLGNBQWMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3QsIGluamVjdCwgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTWF0RGlhbG9nIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcbmltcG9ydCB7IHJlZHVjZSwgUmVwbGF5U3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgQVBQX0RPTUFJTiB9IGZyb20gJy4uL3B1YmxpYy1hcGknO1xuaW1wb3J0IHsgRW5kUG9pbnRzIH0gZnJvbSAnLi9hcGktZW5kcG9pbnRzLmRlZic7XG5pbXBvcnQgeyBBcGlHYXRld2F5U2VydmljZSB9IGZyb20gJy4vYXBpLWdhdGV3YXkuc2VydmljZSc7XG5pbXBvcnQgeyBBcHBNZW51LCBDb21wYW55LCBIZWFkZXJDb25maWcsIFNlc3Npb25PdXRJbmZvIH0gZnJvbSAnLi9jb21tb24taGVhZGVyLmludGVyZmFjZSc7XG5pbXBvcnQgeyBTZXNzaW9uRXhwaXJ5SW5mb0NvbXBvbmVudCB9IGZyb20gJy4vc2Vzc2lvbi1leHBpcnktaW5mby9zZXNzaW9uLWV4cGlyeS1pbmZvLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBVdGlsaXRpZXMgfSBmcm9tICcuL3V0aWxzL1V0aWxpdGllcyc7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIENvbW1vbkhlYWRlclNlcnZpY2Uge1xuICBwcml2YXRlIGJhc2VVcmw6IHN0cmluZyA9ICcnO1xuICBoZWFkZXJDb25maWc6IEhlYWRlckNvbmZpZztcbiAgaXNTZXNzaW9uRXhwaXJ5RGlhbG9nT3BlbiA9IGZhbHNlO1xuICBwcml2YXRlIF9hcGlHYXRld2F5U2VydmljZSA9IGluamVjdChBcGlHYXRld2F5U2VydmljZSk7XG4gIHB1YmxpYyBfZGlhbG9nID0gaW5qZWN0KE1hdERpYWxvZyk7XG5cbiAgcHJpdmF0ZSBtZW51U3RhdGVTdWJqZWN0ID0gbmV3IFJlcGxheVN1YmplY3Q8QXBwTWVudVtdIHwgbnVsbD4oMSk7XG4gIHB1YmxpYyBhY3RpdmVNZW51TGlzdCQgPSB0aGlzLm1lbnVTdGF0ZVN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG5cbiAgcHJpdmF0ZSBjb21wYW55TGlzdFN1YmplY3QgPSBuZXcgUmVwbGF5U3ViamVjdDxDb21wYW55W10gfCBudWxsPigxKTtcbiAgcHVibGljIGNvbXBhbnlMaXN0JCA9IHRoaXMuY29tcGFueUxpc3RTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuXG4gIGNvbnN0cnVjdG9yKEBJbmplY3QoJ2hlYWRlckNvbmZpZycpIHByaXZhdGUgY29uZmlnOiBIZWFkZXJDb25maWcpIHtcbiAgICB0aGlzLmhlYWRlckNvbmZpZyA9IGNvbmZpZztcbiAgICB0aGlzLmJhc2VVcmwgPSBjb25maWcuYXBpVXJsO1xuICB9XG5cbiAgc2V0TWVudVN0YXRlKGRhdGE6IEFwcE1lbnVbXSk6IHZvaWQge1xuICAgIHRoaXMubWVudVN0YXRlU3ViamVjdC5uZXh0KGRhdGEpO1xuICB9XG4gIHNldENvbXBhbnlMaXN0KGRhdGE6IENvbXBhbnlbXSk6IHZvaWQge1xuICAgIHRoaXMuY29tcGFueUxpc3RTdWJqZWN0Lm5leHQoZGF0YSk7XG4gIH1cblxuICBvYnRhaW5EYXRhQnlVcmwodXJsOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5fYXBpR2F0ZXdheVNlcnZpY2UuZG9HZXQodXJsKTtcbiAgfVxuXG4gIG9wZW5TZXNzaW9uRXhwaXJlSW5mbyhzZXNzaW9uaW5mbz86IFNlc3Npb25PdXRJbmZvKSB7XG4gICAgbGV0IGluZm86IFNlc3Npb25PdXRJbmZvID0ge307XG4gICAgaWYgKHNlc3Npb25pbmZvKSB7XG4gICAgICBpbmZvID0gc2Vzc2lvbmluZm87XG4gICAgfVxuICAgIHRoaXMuaXNTZXNzaW9uRXhwaXJ5RGlhbG9nT3BlbiA9IHRydWU7XG4gICAgdGhpcy5fZGlhbG9nLm9wZW4oU2Vzc2lvbkV4cGlyeUluZm9Db21wb25lbnQsIHsgZGF0YTogc2Vzc2lvbmluZm8gfSk7XG4gIH1cblxuICBnZXREb21haW5JbmZvKCkge1xuICAgIGxldCBkb20gPSBkb2N1bWVudC5sb2NhdGlvbi5ob3N0LnNwbGl0KCcuJyk7XG4gICAgbGV0IGRvbWFpbkluZm8gPSBBUFBfRE9NQUlOLmZpbmQoeCA9PiB4LmRvbWFpbiA9PT0gZG9tWzBdKTtcbiAgICBpZiAoZG9tYWluSW5mbykge1xuICAgICAgcmV0dXJuIGRvbWFpbkluZm87XG4gICAgfVxuXG4gICAgLy8gQ2hlY2sgaWYgdGhlIHNlY29uZCBwYXJ0IG9mIHRoZSBkb21haW4gZXhpc3RzIGJlZm9yZSB1c2luZyBpdFxuICAgIGRvbWFpbkluZm8gPSBkb21bMV0gPyBBUFBfRE9NQUlOLmZpbmQoeCA9PiB4LmRvbWFpbiA9PT0gZG9tWzFdKSA6IHVuZGVmaW5lZDtcbiAgICByZXR1cm4gZG9tYWluSW5mbyB8fCB1bmRlZmluZWQ7XG4gIH1cblxuICBnZXRBcHBzKCkge1xuICAgIGxldCB1cmwgPSBgJHt0aGlzLmJhc2VVcmwgKyBFbmRQb2ludHMuQVBJX1VSTFMuZ2V0QXBwc0FwaX1gO1xuICAgIHJldHVybiB0aGlzLl9hcGlHYXRld2F5U2VydmljZS5kb0dldCh1cmwpO1xuICB9XG4gIGdldENvbXBhbnlBcHBsaWNhdGlvbnMoKSB7XG4gICAgbGV0IHVybCA9IGAke3RoaXMuYmFzZVVybCArIEVuZFBvaW50cy5BUElfVVJMUy5nZXRDb21wYW55QXBwbGljYXRpb25zfWA7XG4gICAgcmV0dXJuIHRoaXMuX2FwaUdhdGV3YXlTZXJ2aWNlLmRvR2V0KHVybCk7XG4gIH1cblxuICAvLyBUT0RPIC0tIG5lZWQgdG8gcmVtb3ZlXG4gIGdldFVzZXJDb21wYW5pZXMoKSB7XG4gICAgbGV0IHVybCA9IGAke3RoaXMuYmFzZVVybCArIEVuZFBvaW50cy5BUElfVVJMUy5nZXRVc2VyQ29tcGFuaWVzfWA7XG4gICAgcmV0dXJuIHRoaXMuX2FwaUdhdGV3YXlTZXJ2aWNlLmRvR2V0KHVybCk7XG4gIH1cbiAgdXBkYXRlVXNlckNvbXBhbnkocmVxQm9keTogYW55KSB7XG4gICAgbGV0IHVybCA9IGAke3RoaXMuYmFzZVVybCArIEVuZFBvaW50cy5BUElfVVJMUy51cGRhdGVVc2VyQ29tcGFueX1gO1xuICAgIHJldHVybiB0aGlzLl9hcGlHYXRld2F5U2VydmljZS5kb1Bvc3QodXJsLCByZXFCb2R5KTtcbiAgfVxuXG4gIGZldGNoQ29tcGFueVByb2ZpbGUocmVxQm9keTogYW55KSB7XG4gICAgbGV0IGNvbmZpZzogYW55ID0ge1xuICAgICAgaXNVbmF1dGhvcml6ZWQ6IHRydWVcbiAgICB9XG4gICAgbGV0IHVybCA9IGAke3RoaXMuYmFzZVVybCArIEVuZFBvaW50cy5BUElfVVJMUy5mZXRjaENvbXBhbnlQcm9maWxlICsgJz8nICsgVXRpbGl0aWVzLmNvbnZlcnRPYmplY3RUb1F1ZXJ5U3RyaW5nKHJlcUJvZHkpfWA7XG4gICAgcmV0dXJuIHRoaXMuX2FwaUdhdGV3YXlTZXJ2aWNlLmRvR2V0KHVybCwgY29uZmlnKS5waXBlKFxuICAgICAgcmVkdWNlKChhY2MsIHJlcykgPT4ge1xuICAgICAgICBpZiAocmVzPy5kYXRhKSB7XG4gICAgICAgICAgYWNjID0gcmVzLmRhdGE7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgIH0sIHt9KVxuICAgICk7XG4gIH1cbiAgZ2V0VXNlckRldGFpbHMoKSB7XG4gICAgbGV0IHVybCA9IGAke3RoaXMuYmFzZVVybCArIEVuZFBvaW50cy5BUElfVVJMUy5nZXRVc2VyRGV0YWlsc31gO1xuICAgIHJldHVybiB0aGlzLl9hcGlHYXRld2F5U2VydmljZS5kb0dldCh1cmwpO1xuICB9XG5cbiAgZ2V0Q29tcGFueUxpc3QoKSB7XG4gICAgbGV0IHVybCA9IGAke3RoaXMuYmFzZVVybCArIEVuZFBvaW50cy5BUElfVVJMUy5nZXRDb21wYW55TGlzdH1gO1xuICAgIHJldHVybiB0aGlzLl9hcGlHYXRld2F5U2VydmljZS5kb0dldCh1cmwpLnBpcGUoXG4gICAgICByZWR1Y2UoKGFjYywgcmVzKSA9PiB7XG4gICAgICAgIGlmIChyZXM/LmRhdGE/LmNvbXBhbmllcykge1xuICAgICAgICAgIGFjYyA9IHJlcz8uZGF0YT8uY29tcGFuaWVzO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhY2M7XG4gICAgICB9LCB7fSlcbiAgICApO1xuICB9XG4gIGdldE1lbnVMaXN0KCkge1xuICAgIGxldCB1cmwgPSBgJHt0aGlzLmJhc2VVcmwgKyBFbmRQb2ludHMuQVBJX1VSTFMuZ2V0QXBwTWVudX1gO1xuICAgIHJldHVybiB0aGlzLl9hcGlHYXRld2F5U2VydmljZS5kb0dldCh1cmwpLnBpcGUoXG4gICAgICByZWR1Y2UoKGFjYywgcmVzKSA9PiB7XG4gICAgICAgIGlmIChyZXM/LmRhdGE/LkFwcE1lbnUpIHtcbiAgICAgICAgICBhY2MgPSByZXM/LmRhdGE/LkFwcE1lbnU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgIH0sIHt9KVxuICAgICk7XG4gIH1cblxuICB1cGRhdGVMYXN0QWNjZXNzZWRBcHBsaWNhdGlvbihyZXFCb2R5OiBhbnkpIHtcbiAgICBsZXQgdXJsID0gYCR7dGhpcy5iYXNlVXJsICsgRW5kUG9pbnRzLkFQSV9VUkxTLnVwZGF0ZUxhc3RBY2Nlc3NlZEFwcGxpY2F0aW9ufWA7XG4gICAgcmV0dXJuIHRoaXMuX2FwaUdhdGV3YXlTZXJ2aWNlLmRvUG9zdCh1cmwsIHJlcUJvZHkpO1xuICB9XG59XG4iXX0=
177
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbW9uLWhlYWRlci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvY29tbW9uLWhlYWRlci9zcmMvbGliL2NvbW1vbi1oZWFkZXIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0QsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxNQUFNLEVBQUUsYUFBYSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzdDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRTFELE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLHFEQUFxRCxDQUFDO0FBQ2pHLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQzs7QUFLOUMsTUFBTSxPQUFPLG1CQUFtQjtJQWdCOUIsWUFBNEMsTUFBb0I7UUFBcEIsV0FBTSxHQUFOLE1BQU0sQ0FBYztRQWZoRCx3QkFBbUIsR0FBRyxpQkFBaUIsQ0FBQztRQUN4Qyw0QkFBdUIsR0FBRyx1QkFBdUIsQ0FBQztRQUUxRCxZQUFPLEdBQVcsRUFBRSxDQUFDO1FBRTdCLDhCQUF5QixHQUFHLEtBQUssQ0FBQztRQUMxQix1QkFBa0IsR0FBRyxNQUFNLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUNoRCxZQUFPLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBRTNCLHFCQUFnQixHQUFHLElBQUksYUFBYSxDQUFtQixDQUFDLENBQUMsQ0FBQztRQUMzRCxvQkFBZSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxZQUFZ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O21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQjs7MEJBaUJjLE1BQU07MkJBQUMsY0FBYyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdCwgaW5qZWN0LCBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBNYXREaWFsb2cgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xuaW1wb3J0IHsgcmVkdWNlLCBSZXBsYXlTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBBUFBfRE9NQUlOIH0gZnJvbSAnLi4vcHVibGljLWFwaSc7XG5pbXBvcnQgeyBFbmRQb2ludHMgfSBmcm9tICcuL2FwaS1lbmRwb2ludHMuZGVmJztcbmltcG9ydCB7IEFwaUdhdGV3YXlTZXJ2aWNlIH0gZnJvbSAnLi9hcGktZ2F0ZXdheS5zZXJ2aWNlJztcbmltcG9ydCB7IEFwcE1lbnUsIENvbXBhbnksIEhlYWRlckNvbmZpZywgU2Vzc2lvbk91dEluZm8gfSBmcm9tICcuL2NvbW1vbi1oZWFkZXIuaW50ZXJmYWNlJztcbmltcG9ydCB7IFNlc3Npb25FeHBpcnlJbmZvQ29tcG9uZW50IH0gZnJvbSAnLi9zZXNzaW9uLWV4cGlyeS1pbmZvL3Nlc3Npb24tZXhwaXJ5LWluZm8uY29tcG9uZW50JztcbmltcG9ydCB7IFV0aWxpdGllcyB9IGZyb20gJy4vdXRpbHMvVXRpbGl0aWVzJztcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgQ29tbW9uSGVhZGVyU2VydmljZSB7XG4gIHB1YmxpYyByZWFkb25seSBTRVNTSU9OX0VYUElSRURfS0VZID0gJ3Nlc3Npb25fZXhwaXJlZCc7XG4gIHB1YmxpYyByZWFkb25seSBMQVNUX0FDVElWRV9TRVNTSU9OX0tFWSA9ICdsYXN0QWN0aXZlU2Vzc2lvblRpbWUnO1xuXG4gIHByaXZhdGUgYmFzZVVybDogc3RyaW5nID0gJyc7XG4gIGhlYWRlckNvbmZpZzogSGVhZGVyQ29uZmlnO1xuICBpc1Nlc3Npb25FeHBpcnlEaWFsb2dPcGVuID0gZmFsc2U7XG4gIHByaXZhdGUgX2FwaUdhdGV3YXlTZXJ2aWNlID0gaW5qZWN0KEFwaUdhdGV3YXlTZXJ2aWNlKTtcbiAgcHVibGljIF9kaWFsb2cgPSBpbmplY3QoTWF0RGlhbG9nKTtcblxuICBwcml2YXRlIG1lbnVTdGF0ZVN1YmplY3QgPSBuZXcgUmVwbGF5U3ViamVjdDxBcHBNZW51W10gfCBudWxsPigxKTtcbiAgcHVibGljIGFjdGl2ZU1lbnVMaXN0JCA9IHRoaXMubWVudVN0YXRlU3ViamVjdC5hc09ic2VydmFibGUoKTtcblxuICBwcml2YXRlIGNvbXBhbnlMaXN0U3ViamVjdCA9IG5ldyBSZXBsYXlTdWJqZWN0PENvbXBhbnlbXSB8IG51bGw+KDEpO1xuICBwdWJsaWMgY29tcGFueUxpc3QkID0gdGhpcy5jb21wYW55TGlzdFN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG5cbiAgY29uc3RydWN0b3IoQEluamVjdCgnaGVhZGVyQ29uZmlnJykgcHJpdmF0ZSBjb25maWc6IEhlYWRlckNvbmZpZykge1xuICAgIHRoaXMuaGVhZGVyQ29uZmlnID0gY29uZmlnO1xuICAgIHRoaXMuYmFzZVVybCA9IGNvbmZpZy5hcGlVcmw7XG4gIH1cblxuICBzZXRNZW51U3RhdGUoZGF0YTogQXBwTWVudVtdKTogdm9pZCB7XG4gICAgdGhpcy5tZW51U3RhdGVTdWJqZWN0Lm5leHQoZGF0YSk7XG4gIH1cbiAgc2V0Q29tcGFueUxpc3QoZGF0YTogQ29tcGFueVtdKTogdm9pZCB7XG4gICAgdGhpcy5jb21wYW55TGlzdFN1YmplY3QubmV4dChkYXRhKTtcbiAgfVxuXG4gIG9idGFpbkRhdGFCeVVybCh1cmw6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLl9hcGlHYXRld2F5U2VydmljZS5kb0dldCh1cmwpO1xuICB9XG5cbiAgb3BlblNlc3Npb25FeHBpcmVJbmZvKHNlc3Npb25pbmZvPzogU2Vzc2lvbk91dEluZm8pIHtcbiAgICBsZXQgaW5mbzogU2Vzc2lvbk91dEluZm8gPSB7fTtcbiAgICBpZiAoc2Vzc2lvbmluZm8pIHtcbiAgICAgIGluZm8gPSBzZXNzaW9uaW5mbztcbiAgICB9XG4gICAgdGhpcy5pc1Nlc3Npb25FeHBpcnlEaWFsb2dPcGVuID0gdHJ1ZTtcbiAgICB0aGlzLl9kaWFsb2cub3BlbihTZXNzaW9uRXhwaXJ5SW5mb0NvbXBvbmVudCwgeyBkYXRhOiBzZXNzaW9uaW5mbyB9KTtcbiAgfVxuXG4gIGdldERvbWFpbkluZm8oKSB7XG4gICAgbGV0IGRvbSA9IGRvY3VtZW50LmxvY2F0aW9uLmhvc3Quc3BsaXQoJy4nKTtcbiAgICBsZXQgZG9tYWluSW5mbyA9IEFQUF9ET01BSU4uZmluZCh4ID0+IHguZG9tYWluID09PSBkb21bMF0pO1xuICAgIGlmIChkb21haW5JbmZvKSB7XG4gICAgICByZXR1cm4gZG9tYWluSW5mbztcbiAgICB9XG5cbiAgICAvLyBDaGVjayBpZiB0aGUgc2Vjb25kIHBhcnQgb2YgdGhlIGRvbWFpbiBleGlzdHMgYmVmb3JlIHVzaW5nIGl0XG4gICAgZG9tYWluSW5mbyA9IGRvbVsxXSA/IEFQUF9ET01BSU4uZmluZCh4ID0+IHguZG9tYWluID09PSBkb21bMV0pIDogdW5kZWZpbmVkO1xuICAgIHJldHVybiBkb21haW5JbmZvIHx8IHVuZGVmaW5lZDtcbiAgfVxuXG4gIGdldEFwcHMoKSB7XG4gICAgbGV0IHVybCA9IGAke3RoaXMuYmFzZVVybCArIEVuZFBvaW50cy5BUElfVVJMUy5nZXRBcHBzQXBpfWA7XG4gICAgcmV0dXJuIHRoaXMuX2FwaUdhdGV3YXlTZXJ2aWNlLmRvR2V0KHVybCk7XG4gIH1cbiAgZ2V0Q29tcGFueUFwcGxpY2F0aW9ucygpIHtcbiAgICBsZXQgdXJsID0gYCR7dGhpcy5iYXNlVXJsICsgRW5kUG9pbnRzLkFQSV9VUkxTLmdldENvbXBhbnlBcHBsaWNhdGlvbnN9YDtcbiAgICByZXR1cm4gdGhpcy5fYXBpR2F0ZXdheVNlcnZpY2UuZG9HZXQodXJsKTtcbiAgfVxuXG4gIC8vIFRPRE8gLS0gbmVlZCB0byByZW1vdmVcbiAgZ2V0VXNlckNvbXBhbmllcygpIHtcbiAgICBsZXQgdXJsID0gYCR7dGhpcy5iYXNlVXJsICsgRW5kUG9pbnRzLkFQSV9VUkxTLmdldFVzZXJDb21wYW5pZXN9YDtcbiAgICByZXR1cm4gdGhpcy5fYXBpR2F0ZXdheVNlcnZpY2UuZG9HZXQodXJsKTtcbiAgfVxuICB1cGRhdGVVc2VyQ29tcGFueShyZXFCb2R5OiBhbnkpIHtcbiAgICBsZXQgdXJsID0gYCR7dGhpcy5iYXNlVXJsICsgRW5kUG9pbnRzLkFQSV9VUkxTLnVwZGF0ZVVzZXJDb21wYW55fWA7XG4gICAgcmV0dXJuIHRoaXMuX2FwaUdhdGV3YXlTZXJ2aWNlLmRvUG9zdCh1cmwsIHJlcUJvZHkpO1xuICB9XG5cbiAgZmV0Y2hDb21wYW55UHJvZmlsZShyZXFCb2R5OiBhbnkpIHtcbiAgICBsZXQgY29uZmlnOiBhbnkgPSB7XG4gICAgICBpc1VuYXV0aG9yaXplZDogdHJ1ZVxuICAgIH1cbiAgICBsZXQgdXJsID0gYCR7dGhpcy5iYXNlVXJsICsgRW5kUG9pbnRzLkFQSV9VUkxTLmZldGNoQ29tcGFueVByb2ZpbGUgKyAnPycgKyBVdGlsaXRpZXMuY29udmVydE9iamVjdFRvUXVlcnlTdHJpbmcocmVxQm9keSl9YDtcbiAgICByZXR1cm4gdGhpcy5fYXBpR2F0ZXdheVNlcnZpY2UuZG9HZXQodXJsLCBjb25maWcpLnBpcGUoXG4gICAgICByZWR1Y2UoKGFjYywgcmVzKSA9PiB7XG4gICAgICAgIGlmIChyZXM/LmRhdGEpIHtcbiAgICAgICAgICBhY2MgPSByZXMuZGF0YTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgfSwge30pXG4gICAgKTtcbiAgfVxuICBnZXRVc2VyRGV0YWlscygpIHtcbiAgICBsZXQgdXJsID0gYCR7dGhpcy5iYXNlVXJsICsgRW5kUG9pbnRzLkFQSV9VUkxTLmdldFVzZXJEZXRhaWxzfWA7XG4gICAgcmV0dXJuIHRoaXMuX2FwaUdhdGV3YXlTZXJ2aWNlLmRvR2V0KHVybCk7XG4gIH1cblxuICBnZXRDb21wYW55TGlzdCgpIHtcbiAgICBsZXQgdXJsID0gYCR7dGhpcy5iYXNlVXJsICsgRW5kUG9pbnRzLkFQSV9VUkxTLmdldENvbXBhbnlMaXN0fWA7XG4gICAgcmV0dXJuIHRoaXMuX2FwaUdhdGV3YXlTZXJ2aWNlLmRvR2V0KHVybCkucGlwZShcbiAgICAgIHJlZHVjZSgoYWNjLCByZXMpID0+IHtcbiAgICAgICAgaWYgKHJlcz8uZGF0YT8uY29tcGFuaWVzKSB7XG4gICAgICAgICAgYWNjID0gcmVzPy5kYXRhPy5jb21wYW5pZXM7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgIH0sIHt9KVxuICAgICk7XG4gIH1cbiAgZ2V0TWVudUxpc3QoKSB7XG4gICAgbGV0IHVybCA9IGAke3RoaXMuYmFzZVVybCArIEVuZFBvaW50cy5BUElfVVJMUy5nZXRBcHBNZW51fWA7XG4gICAgcmV0dXJuIHRoaXMuX2FwaUdhdGV3YXlTZXJ2aWNlLmRvR2V0KHVybCkucGlwZShcbiAgICAgIHJlZHVjZSgoYWNjLCByZXMpID0+IHtcbiAgICAgICAgaWYgKHJlcz8uZGF0YT8uQXBwTWVudSkge1xuICAgICAgICAgIGFjYyA9IHJlcz8uZGF0YT8uQXBwTWVudTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgfSwge30pXG4gICAgKTtcbiAgfVxuXG4gIHVwZGF0ZUxhc3RBY2Nlc3NlZEFwcGxpY2F0aW9uKHJlcUJvZHk6IGFueSkge1xuICAgIGxldCB1cmwgPSBgJHt0aGlzLmJhc2VVcmwgKyBFbmRQb2ludHMuQVBJX1VSTFMudXBkYXRlTGFzdEFjY2Vzc2VkQXBwbGljYXRpb259YDtcbiAgICByZXR1cm4gdGhpcy5fYXBpR2F0ZXdheVNlcnZpY2UuZG9Qb3N0KHVybCwgcmVxQm9keSk7XG4gIH1cblxuICAvKipcbiAgICogSGVscGVyIHRvIGdldCB0aGUgcm9vdCBkb21haW4gKGUuZy4gLnByb2ZldC5haSkgdG8gc2hhcmUgY29va2llcyBhY3Jvc3Mgc3ViZG9tYWlucy9wb3J0cy5cbiAgICogSWYgb24gbG9jYWxob3N0IG9yIGFuIElQLCBpdCBmYWxscyBiYWNrIHRvIHRoZSBob3N0bmFtZS5cbiAgICovXG4gIHB1YmxpYyBnZXRSb290RG9tYWluKCk6IHN0cmluZyB7XG4gICAgY29uc3QgaG9zdG5hbWUgPSB3aW5kb3cubG9jYXRpb24uaG9zdG5hbWU7XG4gICAgY29uc3QgcGFydHMgPSBob3N0bmFtZS5zcGxpdCgnLicpO1xuXG4gICAgaWYgKHBhcnRzLmxlbmd0aCA+IDIgJiYgIS9eXFxkezEsM31cXC5cXGR7MSwzfVxcLlxcZHsxLDN9XFwuXFxkezEsM30kLy50ZXN0KGhvc3RuYW1lKSkge1xuICAgICAgLy8gSWYgd2UgaGF2ZSA0KyBwYXJ0cyAoZS5nLiBhcHAxLmxvY2FsLnByb2ZldC5haSksIHdlIHdhbnQgdG8gaW5jbHVkZSB0aGUgZW52aXJvbm1lbnQgKGxvY2FsLnByb2ZldC5haSlcbiAgICAgIC8vIHRvIGF2b2lkIHNoYXJpbmcgY29va2llcyB3aXRoIGFwcDEuZGV2LnByb2ZldC5haSBvciBhcHAxLnByb2ZldC5haS5cbiAgICAgIGlmIChwYXJ0cy5sZW5ndGggPiAzKSB7XG4gICAgICAgIHJldHVybiAnLicgKyBwYXJ0cy5zbGljZSgtMykuam9pbignLicpO1xuICAgICAgfVxuICAgICAgLy8gRm9yIHN0YW5kYXJkIDMgcGFydHMgKGFwcDEucHJvZmV0LmFpKSwgc2hhcmUgb24gLnByb2ZldC5haVxuICAgICAgcmV0dXJuICcuJyArIHBhcnRzLnNsaWNlKC0yKS5qb2luKCcuJyk7XG4gICAgfVxuICAgIHJldHVybiBob3N0bmFtZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZW5lcmF0ZXMgYSB1bmlxdWUgY29va2llIG5hbWUgYmFzZWQgb24gdGhlIGVudmlyb25tZW50IHJvb3QgZG9tYWluLlxuICAgKiBlLmcuICdsYXN0QWN0aXZlJyBvbiAucWEucHJvZmV0LmFpIC0+ICdsYXN0QWN0aXZlX3FhX3Byb2ZldF9haSdcbiAgICogQHBhcmFtIG5hbWUgQmFzZSBjb29raWUgbmFtZVxuICAgKi9cbiAgcHVibGljIGdldFN1ZmZpeGVkQ29va2llTmFtZShuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGNvbnN0IHJvb3REb21haW4gPSB0aGlzLmdldFJvb3REb21haW4oKTtcbiAgICAvLyBSZXBsYWNlIGRvdHMgd2l0aCB1bmRlcnNjb3JlcyB0byBjcmVhdGUgYSBjbGVhbiBzdWZmaXhcbiAgICBjb25zdCBzdWZmaXggPSByb290RG9tYWluLnJlcGxhY2UoL1xcLi9nLCAnXycpO1xuICAgIHJldHVybiBgJHtuYW1lfSR7c3VmZml4fWA7XG4gIH1cblxuICBwdWJsaWMgc2V0Q29va2llKG5hbWU6IHN0cmluZywgdmFsdWU6IHN0cmluZywgZGF5czogbnVtYmVyKSB7XG4gICAgY29uc3QgdW5pcXVlTmFtZSA9IHRoaXMuZ2V0U3VmZml4ZWRDb29raWVOYW1lKG5hbWUpO1xuICAgIGxldCBleHBpcmVzID0gXCJcIjtcbiAgICBpZiAoZGF5cykge1xuICAgICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKCk7XG4gICAgICBkYXRlLnNldFRpbWUoZGF0ZS5nZXRUaW1lKCkgKyAoZGF5cyAqIDI0ICogNjAgKiA2MCAqIDEwMDApKTtcbiAgICAgIGV4cGlyZXMgPSBcIjsgZXhwaXJlcz1cIiArIGRhdGUudG9VVENTdHJpbmcoKTtcbiAgICB9XG4gICAgLy8gSW1wb3J0YW50OiBzZXQgZG9tYWluIHRvIGFsbG93IHNoYXJpbmcgYWNyb3NzIHN1YmRvbWFpbnNcbiAgICBjb25zdCBkb21haW4gPSBcIjsgZG9tYWluPVwiICsgdGhpcy5nZXRSb290RG9tYWluKCk7XG4gICAgZG9jdW1lbnQuY29va2llID0gdW5pcXVlTmFtZSArIFwiPVwiICsgKHZhbHVlIHx8IFwiXCIpICsgZXhwaXJlcyArIGRvbWFpbiArIFwiOyBwYXRoPS9cIjtcbiAgfVxuXG4gIHB1YmxpYyBnZXRDb29raWUobmFtZTogc3RyaW5nKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgY29uc3QgdW5pcXVlTmFtZSA9IHRoaXMuZ2V0U3VmZml4ZWRDb29raWVOYW1lKG5hbWUpO1xuICAgIGNvbnN0IG5hbWVFUSA9IHVuaXF1ZU5hbWUgKyBcIj1cIjtcbiAgICBjb25zdCBjYSA9IGRvY3VtZW50LmNvb2tpZS5zcGxpdCgnOycpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY2EubGVuZ3RoOyBpKyspIHtcbiAgICAgIGxldCBjID0gY2FbaV07XG4gICAgICB3aGlsZSAoYy5jaGFyQXQoMCkgPT0gJyAnKSBjID0gYy5zdWJzdHJpbmcoMSwgYy5sZW5ndGgpO1xuICAgICAgaWYgKGMuaW5kZXhPZihuYW1lRVEpID09IDApIHJldHVybiBjLnN1YnN0cmluZyhuYW1lRVEubGVuZ3RoLCBjLmxlbmd0aCk7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcHVibGljIGRlbGV0ZUNvb2tpZShuYW1lOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldENvb2tpZShuYW1lLCAnJywgLTEpO1xuICB9XG59XG4iXX0=