@sunbird-cb/tree-hierarchy 0.0.1-cbrelease-4.8.29 → 0.0.2-cbrelease-4.8.29

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.
@@ -52,7 +52,7 @@ export class FrameworkService {
52
52
  }));
53
53
  }), tap(async (response) => {
54
54
  this.resetAll();
55
- this.formateData(response, _childOrgData);
55
+ this.formateData(response, _orgData, _childOrgData);
56
56
  this.completeResponse = response.result.framework;
57
57
  }), catchError((err) => {
58
58
  this.resetAll();
@@ -182,10 +182,10 @@ export class FrameworkService {
182
182
  }) || [];
183
183
  return filteredData;
184
184
  }
185
- formateData(response, _childOrgData) {
185
+ formateData(response, _orgData, _childOrgData) {
186
186
  this.frameworkId = response.result.framework.code;
187
187
  let categories = response.result.framework.categories;
188
- if (_childOrgData?.rootOrgId) {
188
+ if (_childOrgData?.id !== _orgData?.id) {
189
189
  categories = this.getOrgFromChildOnwards(categories || [], _childOrgData || '');
190
190
  }
191
191
  response.result.framework.categories = categories;
@@ -201,7 +201,7 @@ export class FrameworkService {
201
201
  translations: a.translations,
202
202
  category: a.category,
203
203
  associations: a.associations,
204
- config: this.getConfig(a.code),
204
+ config: this.getConfig(a.code, _childOrgData),
205
205
  children: (a.terms || []).map((c) => {
206
206
  const associations = c.associations || [];
207
207
  const tempCount = this.getUserCount(c);
@@ -255,7 +255,7 @@ export class FrameworkService {
255
255
  setConfig(config) {
256
256
  this.rootConfig = config;
257
257
  }
258
- getConfig(code) {
258
+ getConfig(code, _childOrgData) {
259
259
  let categoryConfig;
260
260
  if (this.rootConfig && this.rootConfig[0]) {
261
261
  this.rootConfig.forEach((config) => {
@@ -265,7 +265,8 @@ export class FrameworkService {
265
265
  });
266
266
  }
267
267
  if (!categoryConfig) {
268
- return this.rootConfig.config[0];
268
+ const config = this.rootConfig.config[0];
269
+ return config;
269
270
  }
270
271
  return categoryConfig;
271
272
  }
@@ -522,4 +523,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
522
523
  providedIn: 'root'
523
524
  }]
524
525
  }], ctorParameters: function () { return [{ type: i1.HttpClient }, { type: i2.LocalConnectionService }]; } });
525
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnJhbWV3b3JrLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJyYXJ5L3N1bmJpcmQtY2IvdHJlZS1oaWVyYXJjaHkvc3JjL2xpYi9zZXJ2aWNlcy9mcmFtZXdvcmsuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxlQUFlLEVBQWMsRUFBRSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3ZELE9BQU8sRUFBRSxVQUFVLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNqRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFHOUMsT0FBTyxFQUFFLEVBQUUsSUFBSSxNQUFNLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFJcEMsT0FBTyxDQUFDLE1BQU0sUUFBUSxDQUFDOzs7O0FBSXZCLE1BQU0sWUFBWSxHQUFHO0lBQ25CLGFBQWEsRUFBRSxnQ0FBZ0M7SUFDL0MsWUFBWSxFQUFFLGtEQUFrRDtJQUNoRSxZQUFZLEVBQUUsNENBQTRDO0lBQzFELGtCQUFrQixFQUFFLDRDQUE0QztJQUNoRSxpQkFBaUIsRUFBRSx3Q0FBd0M7SUFDM0QsV0FBVyxFQUFFLDJDQUEyQztJQUN4RCxlQUFlLEVBQUUsZ0RBQWdEO0lBQ2pFLFlBQVksRUFBRSxnQ0FBZ0M7Q0FDL0MsQ0FBQTtBQVdELE1BQU0sT0FBTyxnQkFBZ0I7SUFxQjNCLFlBQ1UsSUFBZ0IsRUFDakIsV0FBbUM7UUFEbEMsU0FBSSxHQUFKLElBQUksQ0FBWTtRQUNqQixnQkFBVyxHQUFYLFdBQVcsQ0FBd0I7UUF0QjVDLG1CQUFjLEdBQWtELElBQUksZUFBZSxDQUErQixFQUFFLENBQUMsQ0FBQztRQUN0SCxrQkFBYSxHQUE2QixJQUFJLGVBQWUsQ0FBVSxLQUFLLENBQUMsQ0FBQztRQUM5RSxxQkFBZ0IsR0FDZCxJQUFJLGVBQWUsQ0FBdUUsSUFBSSxDQUFDLENBQUM7UUFDbEcsZ0JBQVcsR0FBeUIsSUFBSSxlQUFlLENBQU0sSUFBSSxDQUFDLENBQUM7UUFDbkUsMEJBQXFCLEdBQXlCLElBQUksZUFBZSxDQUFNLElBQUksQ0FBQyxDQUFDO1FBQzdFLFNBQUksR0FBRyxJQUFJLEdBQUcsRUFBbUMsQ0FBQztRQUNsRCxrQkFBYSxHQUFHLElBQUksR0FBRyxFQUFlLENBQUM7UUFDdkMsK0JBQTBCLEdBQXlDLElBQUksZUFBZSxDQUFzQixJQUFJLENBQUMsQ0FBQztRQUtsSCxnQkFBVyxHQUFHLGlCQUFpQixDQUFDO1FBRWhDLG1CQUFjLEdBQUcsSUFBSSxlQUFlLENBQU0sSUFBSSxDQUFDLENBQUM7SUFTN0MsQ0FBQztJQUVKLGdCQUFnQixDQUFDLFFBQWEsRUFBRSxhQUFrQjtRQUNoRCxZQUFZLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ2pDLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxjQUFjLEtBQUssUUFBUSxFQUFFO1lBQ2hELElBQUksR0FBRyxHQUFHLElBQUksSUFBSSxDQUFDLFdBQVcscUJBQXFCLENBQUE7WUFDbkQsSUFBSSxRQUFRLEVBQUU7Z0JBQ1osR0FBRyxHQUFHLEdBQUcsR0FBRyxRQUFRLENBQUMsdUJBQXVCLENBQUM7YUFDOUM7aUJBQU07Z0JBQ0wsR0FBRyxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQzthQUM1QztZQUNELE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEVBQUUsRUFBRSxFQUFFLGVBQWUsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FDNUQsU0FBUyxDQUFDLENBQUMsaUJBQXNCLEVBQUUsRUFBRTtnQkFDbkMsTUFBTSx5QkFBeUIsR0FBRyxpQkFBaUIsQ0FBQztnQkFDcEQsT0FBTyxJQUFJLENBQUMsbUJBQW1CLENBQUMsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUM1QyxTQUFTLENBQUMsQ0FBQyxXQUFnQixFQUFFLEVBQUU7b0JBQzdCLElBQUksQ0FBQyxjQUFjLEdBQUcsV0FBVyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsT0FBTyxJQUFJLEVBQUUsQ0FBQztvQkFDbkUsT0FBTyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUMsSUFBSSxDQUM5QixHQUFHLENBQUMsR0FBRyxFQUFFO3dCQUNQLE9BQU8seUJBQXlCLENBQUE7b0JBQ2xDLENBQUMsQ0FBQyxDQUNILENBQUM7Z0JBQ0osQ0FBQyxDQUFDLENBQ0gsQ0FBQztZQUNKLENBQUMsQ0FBQyxFQUNGLEdBQUcsQ0FBQyxLQUFLLEVBQUUsUUFBYSxFQUFFLEVBQUU7Z0JBQzFCLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztnQkFDaEIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLEVBQUUsYUFBYSxDQUFDLENBQUM7Z0JBQzFDLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQztZQUNwRCxDQUFDLENBQUMsRUFDRixVQUFVLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtnQkFDakIsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO2dCQUNoQixJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO2dCQUNsQixJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztnQkFDN0IsTUFBTSw0QkFBNEIsR0FBRyxHQUFHLENBQUM7WUFDM0MsQ0FBQyxDQUFDLENBQ0gsQ0FBQztTQUNIO2FBQU07WUFDTCxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDaEIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUM1QixPQUFPLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQztTQUN0QjtJQUNILENBQUM7SUFFRCxTQUFTLENBQUMsV0FBbUIsRUFBRSxVQUFrQixFQUFFLFdBQWdCO1FBQ2pFLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsV0FBVyx1Q0FBdUMsV0FBVyxhQUFhLFVBQVUsRUFBRSxFQUFFLFdBQVcsQ0FBQyxDQUFDLElBQUksQ0FDdEksR0FBRyxDQUFDLENBQUMsR0FBUSxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUNuQyxDQUFDO0lBRUQsVUFBVSxDQUFDLFdBQW1CLEVBQUUsVUFBa0IsRUFBRSxXQUFnQjtRQUNsRSxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLFdBQVcsdUNBQXVDLFdBQVcsYUFBYSxVQUFVLEVBQUUsRUFBRSxXQUFXLENBQUMsQ0FBQztJQUN0SSxDQUFDO0lBRUQsa0JBQWtCLENBQUMsUUFBZ0IsRUFBRSxXQUFnQjtRQUNuRCxJQUFJLFlBQW9CLENBQUM7UUFDekIsSUFBSSxRQUFRLEtBQUssT0FBTyxFQUFFO1lBQ3hCLFlBQVksR0FBRyxpQkFBaUIsQ0FBQztTQUNsQzthQUFNO1lBQ0wsWUFBWSxHQUFHLG9CQUFvQixDQUFDO1NBQ3JDO1FBRUQsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxXQUFXLElBQUksWUFBWSxjQUFjLEVBQUUsV0FBVyxDQUFDO2FBQ25GLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDNUMsQ0FBQztJQUVELFVBQVUsQ0FBQyxXQUFtQixFQUFFLFVBQWtCLEVBQUUsZ0JBQXdCO1FBQzFFLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxJQUFJLENBQUMsV0FBVyw2QkFBNkIsZ0JBQWdCLGNBQWMsV0FBVyxhQUFhLFVBQVUsRUFBRSxDQUFDLENBQUM7SUFDL0ksQ0FBQztJQUVELGtCQUFrQixDQUFDLFdBQW1CLEVBQUUsVUFBa0IsRUFBRSxXQUFnQjtRQUMxRSxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLFdBQVcsdUNBQXVDLFdBQVcsYUFBYSxVQUFVLEVBQUUsRUFBRSxXQUFXLENBQUMsQ0FBQztJQUN0SSxDQUFDO0lBRUQsVUFBVSxDQUFDLFdBQW1CLEVBQUUsVUFBa0IsRUFBRSxnQkFBd0IsRUFBRSxXQUFnQjtRQUM1RixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksSUFBSSxDQUFDLFdBQVcsNkJBQTZCLGdCQUFnQixjQUFjLFdBQVcsYUFBYSxVQUFVLEVBQUUsRUFBRSxXQUFXLENBQUMsQ0FBQztJQUMzSixDQUFDO0lBRUQsZ0JBQWdCO1FBQ2QsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxXQUFXLHlCQUF5QixJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQzNHLENBQUM7SUFFRCxPQUFPO1FBQ0wsT0FBTyxNQUFNLEVBQUUsQ0FBQztJQUNsQixDQUFDO0lBRUQsaUJBQWlCLENBQUMsR0FBUTtRQUN4QixJQUFJLENBQUMsV0FBVyxHQUFHLEdBQUcsQ0FBQztJQUN6QixDQUFDO0lBRUQsYUFBYTtRQUNYLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQztJQUMxQixDQUFDO0lBRUQsY0FBYztRQUNaLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQztJQUMxQixDQUFDO0lBRUQsZUFBZSxDQUFDLGVBQXVCO1FBQ3JDLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQXdCLEVBQUUsRUFBRTtZQUNwRixPQUFPLENBQUMsQ0FBQyxJQUFJLEtBQUssZUFBZSxDQUFDO1FBQ3BDLENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxjQUFjLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxNQUFNLENBQUM7UUFDM0QsT0FBTyxDQUFDLFlBQVksR0FBRyxDQUFDLENBQUMsR0FBRyxjQUFjLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxFQUFFLENBQUMsWUFBWSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDdkcsQ0FBQztJQUVELG1CQUFtQixDQUFDLGVBQXVCO1FBQ3pDLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQXdCLEVBQUUsRUFBRTtZQUNwRixPQUFPLENBQUMsQ0FBQyxJQUFJLEtBQUssZUFBZSxDQUFDO1FBQ3BDLENBQUMsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxDQUFDLFlBQVksR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxFQUFFLENBQUMsWUFBWSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDM0YsQ0FBQztJQUVELGFBQWEsQ0FBQyxlQUF1QjtRQUNuQyxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsZUFBZSxDQUFDLElBQUksSUFBSSxDQUFDO1FBQ2pFLE9BQU8sTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztJQUM3RCxDQUFDO0lBRUQsVUFBVSxDQUFDLEtBQWtDO1FBQzNDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDcEMsQ0FBQztJQUVELFFBQVE7UUFDTixJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUM3QixJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2pDLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDM0IsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUNwQixDQUFDO0lBRUQsWUFBWSxDQUFDLE9BQWU7UUFDMUIsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQXdCLEVBQUUsRUFBRTtZQUNwRyxPQUFPLENBQUMsQ0FBQyxJQUFJLEtBQUssT0FBTyxDQUFDO1FBQzVCLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDakQsQ0FBQztJQUVELG1CQUFtQixDQUFDLEtBQVksRUFBRSxJQUFTO1FBRXpDLElBQUksR0FBRyxHQUFVLEVBQUUsQ0FBQztRQUVwQixLQUFLLElBQUksS0FBSyxJQUFJLEtBQUssRUFBRTtZQUN2QixJQUFJLEtBQUssQ0FBQyxLQUFLLENBQUMsS0FBSyxJQUFJLEVBQUU7Z0JBRXpCLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7YUFDeEI7U0FDRjtRQUVELE9BQU8sR0FBRyxDQUFDO0lBQ2IsQ0FBQztJQUVELElBQUksT0FBTyxDQUFDLEdBQVE7UUFDbEIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDM0IsSUFBSSxRQUFRLEdBQUcsSUFBSSxDQUFDLE9BQU8sSUFBSSxFQUFFLENBQUM7UUFDbEMsUUFBUSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNuQixZQUFZLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7SUFDMUQsQ0FBQztJQUVELElBQUksT0FBTztRQUNULE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNqRSxDQUFDO0lBRUQsMkJBQTJCLENBQUMsR0FBUTtRQUNsQyxJQUFJLEdBQUcsRUFBRTtZQUNQLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDdEM7SUFDSCxDQUFDO0lBRUQscUJBQXFCLENBQUMsVUFBa0I7UUFDdEMsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDM0MsT0FBTyxDQUFDLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQyxNQUFNLENBQUMsUUFBUSxLQUFLLFVBQVUsQ0FBQztRQUN0RCxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7UUFFVCxPQUFPLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDMUIsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDO1FBQ2hCLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELHVCQUF1QixDQUFDLFVBQWtCO1FBQ3hDLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQzNDLE9BQU8sQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsS0FBSyxVQUFVLENBQUM7UUFDbEQsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO1FBRVQsT0FBTyxZQUFZLENBQUM7SUFDdEIsQ0FBQztJQUVELHFCQUFxQixDQUFDLFFBQWdCO1FBQ3BDLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQzNDLE9BQU8sQ0FBQyxDQUFDLFFBQVEsS0FBSyxRQUFRLENBQUM7UUFDakMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO1FBRVQsT0FBTyxZQUFZLENBQUM7SUFDdEIsQ0FBQztJQUVELFdBQVcsQ0FBQyxRQUFhLEVBQUUsYUFBbUI7UUFDNUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUM7UUFDbEQsSUFBSSxVQUFVLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDO1FBQ3RELElBQUksYUFBYSxFQUFFLFNBQVMsRUFBRTtZQUM1QixVQUFVLEdBQUcsSUFBSSxDQUFDLHNCQUFzQixDQUFDLFVBQVUsSUFBSSxFQUFFLEVBQUUsYUFBYSxJQUFJLEVBQUUsQ0FBQyxDQUFBO1NBQ2hGO1FBQ0QsUUFBUSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQztRQUNsRCxDQUFDLFVBQVUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQU0sRUFBRSxJQUFZLEVBQUUsRUFBRTtZQUM1QyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFO2dCQUNwQixJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUk7Z0JBQ1osVUFBVSxFQUFFLENBQUMsQ0FBQyxVQUFVO2dCQUN4QixLQUFLLEVBQUUsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDO2dCQUNqQixJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUk7Z0JBQ1osUUFBUSxFQUFFLENBQUMsQ0FBQyxRQUFRO2dCQUNwQixNQUFNLEVBQUUsQ0FBQyxDQUFDLE1BQWlDO2dCQUMzQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLFdBQVc7Z0JBQzFCLFlBQVksRUFBRSxDQUFDLENBQUMsWUFBWTtnQkFDNUIsUUFBUSxFQUFFLENBQUMsQ0FBQyxRQUFRO2dCQUNwQixZQUFZLEVBQUUsQ0FBQyxDQUFDLFlBQVk7Z0JBQzVCLE1BQU0sRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7Z0JBQzlCLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBTSxFQUFFLEVBQUU7b0JBQ3ZDLE1BQU0sWUFBWSxHQUFHLENBQUMsQ0FBQyxZQUFZLElBQUksRUFBRSxDQUFDO29CQUMxQyxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFBO29CQUN0QyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFBO29CQUMxQyxJQUFJLFlBQVksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO3dCQUMzQixNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxFQUFFLFFBQVEsRUFBRSxZQUFZLEVBQUUsQ0FBQyxDQUFDO3FCQUM5QztvQkFDRCxPQUFPLENBQUMsQ0FBQztnQkFDWCxDQUFDLENBQUM7YUFDSCxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztRQUVILE1BQU0sYUFBYSxHQUE0QixFQUFFLENBQUM7UUFDbEQsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDcEIsYUFBYSxDQUFDLElBQUksQ0FBQztnQkFDakIsSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJO2dCQUNaLFVBQVUsRUFBRSxDQUFDLENBQUMsVUFBVTtnQkFDeEIsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLO2dCQUNkLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSTtnQkFDWixNQUFNLEVBQUUsQ0FBQyxDQUFDLE1BQWlDO2dCQUMzQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLFdBQVc7Z0JBQzFCLFlBQVksRUFBRSxDQUFDLENBQUMsWUFBWTthQUNKLENBQUMsQ0FBQztRQUM5QixDQUFDLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQzFDLENBQUM7SUFFRCxzQkFBc0IsQ0FBQyxXQUFnQixFQUFFLGFBQWtCO1FBQ3pELE1BQU0sbUJBQW1CLEdBQWEsRUFBRSxDQUFBO1FBQ3hDLElBQUksY0FBYyxHQUFRLENBQUMsQ0FBQyxDQUFDO1FBQzdCLElBQUksV0FBVyxFQUFFLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDM0IsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQU8sRUFBRSxFQUFFO2dCQUM5QixJQUFJLEdBQUcsRUFBRSxLQUFLLEVBQUUsTUFBTSxHQUFHLENBQUMsRUFBRTtvQkFDMUIsTUFBTSxTQUFTLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFTLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLEtBQUssYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDO29CQUNyRixJQUFJLENBQUMsU0FBUyxJQUFJLGNBQWMsS0FBSyxDQUFDLENBQUMsRUFBRTt3QkFDdkMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQTtxQkFDcEM7eUJBQU0sSUFBRyxjQUFjLEtBQUssQ0FBQyxDQUFDLEVBQUU7d0JBQy9CLGNBQWMsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDO3dCQUMzQixHQUFHLENBQUMsS0FBSyxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBUyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxLQUFLLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQztxQkFDbEY7aUJBQ0Y7WUFDSCxDQUFDLENBQUMsQ0FBQTtTQUNIO1FBQ0QsT0FBTyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUMsUUFBYSxFQUFFLEVBQUUsQ0FBQyxDQUFDLG1CQUFtQixDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUM5RixDQUFDO0lBRUQsYUFBYTtRQUNYLE1BQU0sSUFBSSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLHNCQUFzQixDQUFDLGFBQWEsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQzlFLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDbkIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO1NBQ25DO0lBQ0gsQ0FBQztJQUVELFNBQVMsQ0FBQyxNQUFXO1FBQ25CLElBQUksQ0FBQyxVQUFVLEdBQUcsTUFBTSxDQUFDO0lBQzNCLENBQUM7SUFFRCxTQUFTLENBQUMsSUFBWTtRQUNwQixJQUFJLGNBQW1CLENBQUM7UUFDeEIsSUFBSSxJQUFJLENBQUMsVUFBVSxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDekMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFXLEVBQUUsRUFBRTtnQkFDdEMsSUFBSSxJQUFJLENBQUMsV0FBVyxJQUFJLE1BQU0sQ0FBQyxXQUFXLEVBQUU7b0JBQzFDLGNBQWMsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQVEsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsQ0FBQztpQkFDekU7WUFDSCxDQUFDLENBQUMsQ0FBQztTQUNKO1FBQ0QsSUFBSSxDQUFDLGNBQWMsRUFBRTtZQUNuQixPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFBO1NBQ2pDO1FBQ0QsT0FBTyxjQUFjLENBQUM7SUFDeEIsQ0FBQztJQUVELG1CQUFtQjtRQUNqQixNQUFNLGFBQWEsR0FBVSxFQUFFLENBQUM7UUFDaEMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDcEIsSUFBSSxDQUFDLENBQUMsUUFBUSxJQUFJLENBQUMsQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFO2dCQUNuQyxDQUFDLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRTtvQkFDckIsSUFBSSxDQUFDLENBQUMsUUFBUSxFQUFFO3dCQUNkLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7cUJBQ3ZCO2dCQUNILENBQUMsQ0FBQyxDQUFDO2FBQ0o7UUFDSCxDQUFDLENBQUMsQ0FBQztRQUNILE9BQU8sYUFBYSxDQUFDO0lBQ3ZCLENBQUM7SUFFRCx3QkFBd0IsQ0FBQyxJQUFZO1FBQ25DLElBQUksaUJBQWlCLEdBQVUsRUFBRSxDQUFDO1FBQ2xDLElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxFQUFFO1lBQzlCLElBQUksRUFBRSxDQUFDLFFBQVEsS0FBSyxJQUFJLEVBQUU7Z0JBQ3hCLGlCQUFpQixDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQzthQUM1QjtRQUNILENBQUMsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxpQkFBaUIsQ0FBQztJQUMzQixDQUFDO0lBRUQsZ0JBQWdCLENBQUMsV0FBZ0IsRUFBRSxRQUFnQjtRQUNqRCxJQUFJLFlBQW9CLENBQUM7UUFDekIsSUFBSSxRQUFRLEtBQUssT0FBTyxFQUFFO1lBQ3hCLFlBQVksR0FBRyxpQkFBaUIsQ0FBQztTQUNsQzthQUFNO1lBQ0wsWUFBWSxHQUFHLG9CQUFvQixDQUFDO1NBQ3JDO1FBRUQsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxXQUFXLElBQUksWUFBWSxTQUFTLEVBQUUsV0FBVyxDQUFDO2FBQzlFLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbkQsQ0FBQztJQUVELGVBQWUsQ0FBQyxJQUFTLEVBQUUsTUFBVyxFQUFFLGlCQUF3QixFQUFFLFVBQWtCO1FBQ2xGLElBQUksSUFBSSxJQUFJLElBQUksQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUU7WUFDakQsSUFBSSxVQUFVLEtBQUssUUFBUSxFQUFFO2dCQUMzQixJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQVksRUFBRSxFQUFFO29CQUNyQyxJQUFJLE9BQU8sQ0FBQyxVQUFVLEtBQUssTUFBTSxDQUFDLFVBQVUsRUFBRTt3QkFDNUMsTUFBTSxlQUFlLEdBQVEsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsWUFBWSxFQUFFLGlCQUFpQixFQUFFLENBQUMsQ0FBSyxFQUFFLENBQU0sRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFVBQVUsS0FBSyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUM7d0JBQ3pJLE1BQU0sWUFBWSxHQUFRLENBQUMsQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxpQkFBaUIsRUFBRSxDQUFDLENBQUssRUFBRSxDQUFNLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxVQUFVLEtBQUssQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDO3dCQUNsSSxPQUFPLENBQUMsY0FBYyxDQUFDLEdBQUcsZUFBZSxDQUFDO3dCQUMxQyxPQUFPLENBQUMsVUFBVSxDQUFDLEdBQUcsWUFBWSxDQUFDO3FCQUNwQztvQkFDRCxJQUFJLE9BQU8sQ0FBQyxRQUFRLEVBQUU7d0JBQ3BCLElBQUksQ0FBQyxlQUFlLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxpQkFBaUIsRUFBRSxVQUFVLENBQUMsQ0FBQztxQkFDdEU7Z0JBQ0gsQ0FBQyxDQUFDLENBQUM7YUFDSjtpQkFBTTtnQkFDTCxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQVksRUFBRSxFQUFFO29CQUNyQyxJQUFJLE9BQU8sQ0FBQyxVQUFVLEtBQUssTUFBTSxDQUFDLFVBQVUsRUFBRTt3QkFDNUMsSUFBSSxjQUFjLEdBQVUsRUFBRSxDQUFDO3dCQUMvQixJQUFJLE9BQU8sSUFBSSxPQUFPLENBQUMsUUFBUSxJQUFJLE9BQU8sQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFOzRCQUMxRCxjQUFjLEdBQUksQ0FBQyxDQUFDLFlBQVksQ0FBQyxpQkFBaUIsRUFBRSxPQUFPLENBQUMsUUFBUSxFQUFFLFlBQVksQ0FBQyxDQUFDO3lCQUNyRjs2QkFBTTs0QkFDTCxjQUFjLEdBQUcsaUJBQWlCLENBQUM7eUJBQ3BDO3dCQUNELE9BQU8sQ0FBQyxjQUFjLENBQUMsR0FBRyxPQUFPLElBQUksT0FBTyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxZQUFZLEVBQUUsR0FBRyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDO3dCQUMxSCxPQUFPLENBQUMsVUFBVSxDQUFDLEdBQUcsT0FBTyxJQUFJLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxPQUFPLENBQUMsUUFBUSxFQUFFLEdBQUcsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQztxQkFDL0c7b0JBQ0QsSUFBSSxPQUFPLENBQUMsUUFBUSxFQUFFO3dCQUNwQixJQUFJLENBQUMsZUFBZSxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsaUJBQWlCLEVBQUUsVUFBVSxDQUFDLENBQUM7cUJBQ3RFO2dCQUNILENBQUMsQ0FBQyxDQUFDO2FBQ0o7U0FDRjtJQUNILENBQUM7SUFFRCxtQkFBbUIsQ0FBQyxVQUFrQixFQUFFLFVBQWUsRUFBRSxpQkFBd0IsRUFBRSxVQUFtQjtRQUNwRyxJQUFJLFFBQVEsR0FBUSxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUM5QyxJQUFJLFVBQVUsS0FBSyxRQUFRLEVBQUU7WUFDM0IsTUFBTSxlQUFlLEdBQVEsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsWUFBWSxFQUFFLGlCQUFpQixFQUFFLENBQUMsQ0FBSyxFQUFFLENBQU0sRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFVBQVUsS0FBSyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDMUksTUFBTSxZQUFZLEdBQVEsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLGlCQUFpQixFQUFFLENBQUMsQ0FBSyxFQUFFLENBQU0sRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFVBQVUsS0FBSyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDbkksUUFBUSxDQUFDLGNBQWMsQ0FBQyxHQUFHLGVBQWUsQ0FBQztZQUMzQyxRQUFRLENBQUMsVUFBVSxDQUFDLEdBQUcsWUFBWSxDQUFDO1lBRXBDLElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUMsWUFBaUIsRUFBRSxFQUFFO2dCQUMvQyxJQUFJLFFBQVEsR0FBUSxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLENBQUM7Z0JBQ3pELElBQUksUUFBUSxJQUFJLFFBQVEsQ0FBQyxRQUFRLElBQUksUUFBUSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUU7b0JBQzdELElBQUksQ0FBQyxlQUFlLENBQUMsUUFBUSxFQUFFLFVBQVUsRUFBRSxpQkFBaUIsRUFBRSxVQUFVLENBQUMsQ0FBQztpQkFDM0U7WUFDSCxDQUFDLENBQUMsQ0FBQztTQUNKO2FBQU07WUFDTCxJQUFJLGNBQWMsR0FBVSxFQUFFLENBQUM7WUFDL0IsSUFBSSxRQUFRLElBQUksUUFBUSxDQUFDLFFBQVEsSUFBSSxRQUFRLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRTtnQkFDN0QsY0FBYyxHQUFHLENBQUMsQ0FBQyxZQUFZLENBQUMsaUJBQWlCLEVBQUUsUUFBUSxDQUFDLFFBQVEsRUFBRSxZQUFZLENBQUMsQ0FBQzthQUNyRjtpQkFBTTtnQkFDTCxjQUFjLEdBQUcsaUJBQWlCLENBQUM7YUFDcEM7WUFDRCxRQUFRLENBQUMsY0FBYyxDQUFDLEdBQUcsUUFBUSxJQUFJLFFBQVEsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxRQUFRLENBQUMsWUFBWSxFQUFFLEdBQUcsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQztZQUM5SCxRQUFRLENBQUMsVUFBVSxDQUFDLEdBQUcsUUFBUSxJQUFJLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxRQUFRLENBQUMsUUFBUSxFQUFFLEdBQUcsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQztZQUVsSCxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDLFlBQWlCLEVBQUUsRUFBRTtnQkFDL0MsSUFBSSxRQUFRLEdBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUN6RCxJQUFJLFFBQVEsSUFBSSxRQUFRLENBQUMsUUFBUSxJQUFJLFFBQVEsQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFO29CQUM3RCxJQUFJLENBQUMsZUFBZSxDQUFDLFFBQVEsRUFBRSxVQUFVLEVBQUUsaUJBQWlCLEVBQUUsVUFBVSxJQUFJLEVBQUUsQ0FBQyxDQUFDO2lCQUNqRjtZQUNILENBQUMsQ0FBQyxDQUFDO1NBQ0o7SUFDSCxDQUFDO0lBRUQsZ0JBQWdCLENBQUMsV0FBbUI7UUFDbEMsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLGNBQWMsS0FBSyxRQUFRLEVBQUU7WUFDaEQsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxXQUFXLHNCQUFzQixXQUFXLEVBQUUsRUFBRSxFQUFFLGVBQWUsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FDM0csR0FBRyxDQUFDLENBQUMsUUFBYSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxrQkFBa0IsQ0FBQyxDQUFDLENBQzVELENBQUM7U0FDSDthQUFNO1lBQ0wsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7U0FDZjtJQUNILENBQUM7SUFFRCxzQ0FBc0MsQ0FBQyxJQUFZLEVBQUUsV0FBbUI7UUFDdEUsSUFBSSxjQUFtQixDQUFDO1FBQ3hCLElBQUksSUFBSSxDQUFDLFVBQVUsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQ3pDLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBVyxFQUFFLEVBQUU7Z0JBQ3RDLElBQUksV0FBVyxJQUFJLE1BQU0sQ0FBQyxXQUFXLEVBQUU7b0JBQ3JDLGNBQWMsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQVEsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsQ0FBQztpQkFDekU7WUFDSCxDQUFDLENBQUMsQ0FBQztTQUNKO1FBQ0QsT0FBTyxjQUFjLENBQUM7SUFDeEIsQ0FBQztJQUVELHNCQUFzQixDQUFDLFdBQW1CO1FBQ3hDLElBQUksY0FBbUIsQ0FBQztRQUN4QixJQUFJLElBQUksQ0FBQyxVQUFVLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUN6QyxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQVcsRUFBRSxFQUFFO2dCQUN0QyxJQUFJLFdBQVcsSUFBSSxNQUFNLENBQUMsV0FBVyxFQUFFO29CQUNyQyxjQUFjLEdBQUcsTUFBTSxDQUFDO2lCQUN6QjtZQUNILENBQUMsQ0FBQyxDQUFDO1NBQ0o7UUFDRCxPQUFPLGNBQWMsQ0FBQztJQUN4QixDQUFDO0lBRUQsMEJBQTBCLENBQUMsV0FBbUIsRUFBRSxVQUFlO1FBQzdELElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUMsWUFBaUIsRUFBRSxFQUFFO1lBQy9DLElBQUksUUFBUSxHQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUN6RCxJQUFJLFFBQVEsSUFBSSxRQUFRLENBQUMsUUFBUSxJQUFJLFFBQVEsQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFO2dCQUM3RCxJQUFJLENBQUMsbUJBQW1CLENBQUMsUUFBUSxFQUFFLFVBQVUsQ0FBQyxDQUFDO2FBQ2hEO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsbUJBQW1CLENBQUMsSUFBUyxFQUFFLE1BQVc7UUFDeEMsSUFBSSxJQUFJLElBQUksSUFBSSxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRTtZQUNqRCxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQVksRUFBRSxFQUFFO2dCQUNyQyxJQUFJLE9BQU8sQ0FBQyxVQUFVLEtBQUssTUFBTSxDQUFDLFVBQVUsRUFBRTtvQkFDNUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQztvQkFDL0MsT0FBTyxDQUFDLHNCQUFzQixDQUFDLEdBQUcsTUFBTSxDQUFDLHNCQUFzQixDQUFDLENBQUM7aUJBQ2xFO2dCQUNELElBQUksT0FBTyxDQUFDLFFBQVEsRUFBRTtvQkFDcEIsSUFBSSxDQUFDLG1CQUFtQixDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQztpQkFDM0M7WUFDSCxDQUFDLENBQUMsQ0FBQztTQUNKO0lBQ0gsQ0FBQztJQUVPLG1CQUFtQixDQUFDLFFBQWM7UUFDeEMsTUFBTSxXQUFXLEdBQUc7WUFDaEIsT0FBTyxFQUFFO2dCQUNQLE9BQU8sRUFBRTtvQkFDUCxNQUFNLEVBQUUsQ0FBQztvQkFDVCxtQkFBbUIsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7d0JBQy9CLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUU7b0JBQ3pCLGlCQUFpQixFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQzt3QkFDN0IsUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRTtpQkFDM0I7Z0JBQ0QsT0FBTyxFQUFFO29CQUNQLFdBQVcsRUFBRSxNQUFNO2lCQUNwQjtnQkFDRCxLQUFLLEVBQUUsSUFBSTtnQkFDWCxNQUFNLEVBQUUsQ0FBQztnQkFDVCxNQUFNLEVBQUU7b0JBQ04sWUFBWTtvQkFDWixTQUFTO29CQUNULGFBQWE7b0JBQ2IsZUFBZTtvQkFDZixtQkFBbUI7b0JBQ25CLHFCQUFxQjtvQkFDckIscUJBQXFCO29CQUNyQixjQUFjO2lCQUNmO2FBQ0Y7U0FDRixDQUFBO1FBQ0gsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLFlBQVksQ0FBQyxhQUFhLEVBQUUsRUFBRSxXQUFXLENBQUMsQ0FBQyxJQUFJLENBQ3RFLFVBQVUsQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUNqQixPQUFPLENBQUMsS0FBSyxDQUFDLDBCQUEwQixFQUFFLEtBQUssQ0FBQyxDQUFDO1lBRWpELE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2hCLENBQUMsQ0FBQyxDQUNILENBQUM7SUFDSixDQUFDO0lBRU8sYUFBYSxDQUFDLFFBQWM7UUFDbEMsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFRLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNyRSxNQUFNLFdBQVcsR0FBRztZQUNsQixPQUFPLEVBQUU7Z0JBQ1AsT0FBTyxFQUFFO29CQUNMLFNBQVMsRUFBRSxNQUFNO2lCQUNwQjtnQkFDRCxNQUFNLEVBQUU7b0JBQ0osWUFBWTtvQkFDWixXQUFXO2lCQUNaO2dCQUNILEtBQUssRUFBRSxDQUFDO2dCQUNSLE1BQU0sRUFBRTtvQkFDSixXQUFXO2lCQUNkO2dCQUNELE9BQU8sRUFBRTtvQkFDTCxhQUFhLEVBQUUsTUFBTTtpQkFDeEI7YUFDRjtTQUNGLENBQUE7UUFDRCxNQUFNLFdBQVcsR0FBb0MsRUFBRSxDQUFDO1FBQ3hELElBQUksSUFBSSxDQUFDLGNBQWMsSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDekQsSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFRLEVBQUUsRUFBRTtnQkFDdkMsSUFBSSxHQUFHLENBQUMsVUFBVSxFQUFFO29CQUNsQixXQUFXLENBQUMsSUFBSSxDQUFDO3dCQUNmLEVBQUUsRUFBRSxHQUFHLENBQUMsVUFBVTt3QkFDbEIsS0FBSyxFQUFFLENBQUM7cUJBQ1QsQ0FBQyxDQUFDO2lCQUNKO1lBQ0gsQ0FBQyxDQUFDLENBQUE7U0FDSDtRQUNELE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxZQUFZLENBQUMsWUFBWSxFQUFFLEVBQUUsV0FBVyxDQUFDLENBQUMsSUFBSSxDQUNyRSxHQUFHLENBQUMsQ0FBQyxHQUFRLEVBQUUsRUFBRTtZQUNmLElBQUksR0FBRyxJQUFJLEdBQUcsQ0FBQyxNQUFNLElBQUksR0FBRyxDQUFDLE1BQU0sQ0FBQyxRQUFRLElBQUksR0FBRyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFDO2dCQUMxRSxNQUFNLFdBQVcsR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxNQUFNLElBQUksRUFBRSxDQUFDO2dCQUNuRCxJQUFJLFdBQVcsSUFBSSxXQUFXLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtvQkFDekMsTUFBTSxRQUFRLEdBQUcsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQVUsRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLElBQUksS0FBSyxXQUFXLENBQUMsQ0FBQztvQkFDOUUsSUFBSSxRQUFRLElBQUksUUFBUSxDQUFDLE1BQU0sRUFBRTt3QkFDL0IsUUFBUSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFVLEVBQUUsRUFBRTs0QkFDckMsTUFBTSxRQUFRLEdBQUcsV0FBVyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEtBQUssS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDOzRCQUNyRSxJQUFJLFFBQVEsS0FBSyxDQUFDLENBQUMsRUFBRTtnQ0FDbkIsV0FBVyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQzs2QkFDaEQ7d0JBQ0gsQ0FBQyxDQUFDLENBQUM7cUJBQ0o7aUJBQ0Y7YUFDRjtZQUNELElBQUksQ0FBQyxhQUFhLEdBQUcsV0FBVyxDQUFDO1FBQ25DLENBQUMsQ0FBQyxFQUNGLFVBQVUsQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUNqQixPQUFPLENBQUMsS0FBSyxDQUFDLGlDQUFpQyxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQ3hELE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2hCLENBQUMsQ0FBQyxDQUNILENBQUM7SUFDSixDQUFDO0lBRUQsWUFBWSxDQUFDLElBQVM7UUFDcEIsSUFBSSxJQUFJLElBQUksSUFBSSxDQUFDLG9CQUFvQixJQUFJLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxLQUFLLEVBQUU7WUFDeEUsSUFBSSxJQUFJLENBQUMsYUFBYSxJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtnQkFDdkQsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFRLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssSUFBSSxDQUFDLG9CQUFvQixDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQztnQkFDakgsT0FBTyxTQUFTLElBQUksQ0FBQyxDQUFDO2FBQ3ZCO1NBQ0Y7UUFDRCxPQUFPLENBQUMsQ0FBQTtJQUNWLENBQUM7K0dBeGpCVSxnQkFBZ0I7bUhBQWhCLGdCQUFnQixjQUZmLE1BQU07OzRGQUVQLGdCQUFnQjtrQkFINUIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIE9ic2VydmFibGUsIG9mIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBjYXRjaEVycm9yLCBtYXAsIHN3aXRjaE1hcCwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgRlJBTUVXT1JLIH0gZnJvbSAnLi4vY29uc3RhbnRzL2RhdGEnO1xuaW1wb3J0IHsgTlNGcmFtZXdvcmsgfSBmcm9tICcuLi9tb2RlbHMvZnJhbWV3b3JrLm1vZGVsJztcbmltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyB2NCBhcyB1dWlkdjQgfSBmcm9tICd1dWlkJztcbmltcG9ydCB7IElDb25uZWN0aW9uIH0gZnJvbSAnLi4vbW9kZWxzL2Nvbm5lY3Rpb24ubW9kZWwnO1xuaW1wb3J0IHsgTG9jYWxDb25uZWN0aW9uU2VydmljZSB9IGZyb20gJy4vbG9jYWwtY29ubmVjdGlvbi5zZXJ2aWNlJztcbi8qIHRzbGludDpkaXNhYmxlICovXG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuLy8gaW1wb3J0IHsgVHJlZUhpZXJhcmNoeVNlcnZpY2UgfSBmcm9tICcuLi90cmVlLWhpZXJhcmNoeS5zZXJ2aWNlJztcbi8qIHRzbGludDplbmFibGUgKi9cblxuY29uc3QgQVBJX0VORFBPSU5UID0ge1xuICBPUkdfVjFfU0VBUkNIOiAnL2FwaXMvcHJveGllcy92OC9vcmcvdjEvc2VhcmNoJyxcbiAgQ1JFQVRFX1RFUk1TOiBgL2FwaXMvcHJveGllcy92OC9hY3Rpb24vZnJhbWV3b3JrL3YzL3Rlcm0vY3JlYXRlYCxcbiAgVVBEQVRFX1RFUk1TOiBgL2FwaXMvcHJveGllcy92OC9mcmFtZXdvcmsvdjEvdGVybS91cGRhdGUvYCxcbiAgVVBEQVRFX0FTU09DSUFUSU9OOiBgL2FwaXMvcHJveGllcy92OC9mcmFtZXdvcmsvdjEvdGVybS91cGRhdGUvYCxcbiAgUFVCTElTSF9GUkFNRVdPUks6IGAvYXBpcy9wcm94aWVzL3Y4L2ZyYW1ld29yay92MS9wdWJsaXNoL2AsXG4gIFJFVElSRV9UUkVNOiBgL2FwaXMvcHJveGllcy92OC9mcmFtZXdvcmsvdjEvdGVybS9yZXRpcmVgLFxuICBVUERBVEVfQ0FURUdPUlk6IGAvYXBpcy9wcm94aWVzL3Y4L2ZyYW1ld29yay92MS9jYXRlZ29yeS91cGRhdGUvYCxcbiAgVVNFUlNfU0VBUkNIOiBgYXBpcy9wcm94aWVzL3Y4L3VzZXIvdjEvc2VhcmNoYFxufVxuXG5pbnRlcmZhY2UgTm90aWZpZXJUeXBlIHtcbiAgdHlwZTogJ3NlbGVjdCcgfCAnaW5zZXJ0JyB8ICd1cGRhdGUnIHwgJ2RlbGV0ZSc7XG4gIGFjdGlvbjogc3RyaW5nO1xuICBkYXRhOiBhbnk7XG59XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIEZyYW1ld29ya1NlcnZpY2Uge1xuICBjYXRlZ29yaWVzSGFzaDogQmVoYXZpb3JTdWJqZWN0PE5TRnJhbWV3b3JrLklDYXRlZ29yeVtdIHwgW10+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxOU0ZyYW1ld29yay5JQ2F0ZWdvcnlbXSB8IFtdPihbXSk7XG4gIGlzRGF0YVVwZGF0ZWQ6IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICBjdXJyZW50U2VsZWN0aW9uOiBCZWhhdmlvclN1YmplY3Q8eyB0eXBlOiBzdHJpbmcsIGRhdGE6IGFueSwgY2FyZFJlZj86IGFueSwgaXNVcGRhdGU/OmJvb2xlYW4gfSB8IG51bGw+ID0gXG4gICAgbmV3IEJlaGF2aW9yU3ViamVjdDx7IHR5cGU6IHN0cmluZywgZGF0YTogYW55LCBjYXJkUmVmPzogYW55LCBpc1VwZGF0ZT86Ym9vbGVhbiB9IHwgbnVsbD4obnVsbCk7XG4gIHRlcm1TdWJqZWN0OiBCZWhhdmlvclN1YmplY3Q8YW55PiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8YW55PihudWxsKTtcbiAgYWZ0ZXJBZGRPckVkaXRTdWJqZWN0OiBCZWhhdmlvclN1YmplY3Q8YW55PiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8YW55PihudWxsKTtcbiAgbGlzdCA9IG5ldyBNYXA8c3RyaW5nLCBOU0ZyYW1ld29yay5JQ29sdW1uVmlldz4oKTtcbiAgc2VsZWN0aW9uTGlzdCA9IG5ldyBNYXA8c3RyaW5nLCBhbnk+KCk7XG4gIGluc2VydFVwZGF0ZURlbGV0ZU5vdGlmaWVyOiBCZWhhdmlvclN1YmplY3Q8Tm90aWZpZXJUeXBlIHwgbnVsbD4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PE5vdGlmaWVyVHlwZSB8IG51bGw+KG51bGwpO1xuICBlbnZpcm9ubWVudDogYW55O1xuICBsaWJDb25maWchOiBJQ29ubmVjdGlvbjtcbiAgZnJhbWV3b3JrSWQhOiBzdHJpbmc7XG4gIHJvb3RDb25maWc6IGFueTtcbiAgcHJveGllc1BhdGggPSAnYXBpcy9wcm94aWVzL3Y4JztcbiAgY2FyZENsa0RhdGE6IGFueTtcbiAgQ3VycmVudENhcmRDbGsgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGFueT4obnVsbCk7XG4gIGNvbXBsZXRlUmVzcG9uc2U6IGFueTtcbiAgYWRkaXRpb25hbERhdGE6IGFueTsgLy8gQWRkIGEgcHJvcGVydHkgdG8gc3RvcmUgYWRkaXRpb25hbCBkYXRhXG4gIHVzZXJDb3VudERhdGE6IGFueTsgLy8gQWRkIGEgcHJvcGVydHkgdG8gc3RvcmUgdXNlciBjb3VudCBkYXRhXG4gIFxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGh0dHA6IEh0dHBDbGllbnQsXG4gICAgcHVibGljIGxvY2FsQ29uZmlnOiBMb2NhbENvbm5lY3Rpb25TZXJ2aWNlLFxuICAgIC8vIHByaXZhdGUgdHJlZUhpZXJhcmNoeVN2YzogVHJlZUhpZXJhcmNoeVNlcnZpY2VcbiAgKSB7fVxuXG4gIGdldEZyYW1ld29ya0luZm8oX29yZ0RhdGE/OmFueSwgX2NoaWxkT3JnRGF0YT86YW55KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSgndGVybXMnKTtcbiAgICBpZiAodGhpcy5sb2NhbENvbmZpZy5jb25uZWN0aW9uVHlwZSA9PT0gJ29ubGluZScpIHtcbiAgICAgIGxldCB1cmwgPSBgLyR7dGhpcy5wcm94aWVzUGF0aH0vZnJhbWV3b3JrL3YxL3JlYWQvYFxuICAgICAgaWYgKF9vcmdEYXRhKSB7XG4gICAgICAgIHVybCA9IHVybCArIF9vcmdEYXRhLm9yZ0hpZXJhcmNoeUZyYW1ld29ya0lkO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdXJsID0gdXJsICsgdGhpcy5lbnZpcm9ubWVudC5mcmFtZXdvcmtOYW1lO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoYCR7dXJsfWAsIHsgd2l0aENyZWRlbnRpYWxzOiB0cnVlIH0pLnBpcGUoXG4gICAgICAgIHN3aXRjaE1hcCgoZnJhbWV3b3JrUmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgICAgIGNvbnN0IG9yaWdpbmFsRnJhbWV3b3JrUmVzcG9uc2UgPSBmcmFtZXdvcmtSZXNwb25zZTtcbiAgICAgICAgICByZXR1cm4gdGhpcy5nZXRTZWxlY3RlZFN0YXRlT3JnKF9vcmdEYXRhKS5waXBlKFxuICAgICAgICAgICAgc3dpdGNoTWFwKChvcmdMaXN0RGF0YTogYW55KSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMuYWRkaXRpb25hbERhdGEgPSBvcmdMaXN0RGF0YT8ucmVzdWx0Py5yZXNwb25zZT8uY29udGVudCB8fCBbXTtcbiAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0VXNlclBlck9yZygpLnBpcGUoXG4gICAgICAgICAgICAgICAgbWFwKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBvcmlnaW5hbEZyYW1ld29ya1Jlc3BvbnNlXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgKTtcbiAgICAgICAgfSksXG4gICAgICAgIHRhcChhc3luYyAocmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgICAgIHRoaXMucmVzZXRBbGwoKTtcbiAgICAgICAgICB0aGlzLmZvcm1hdGVEYXRhKHJlc3BvbnNlLCBfY2hpbGRPcmdEYXRhKTtcbiAgICAgICAgICB0aGlzLmNvbXBsZXRlUmVzcG9uc2UgPSByZXNwb25zZS5yZXN1bHQuZnJhbWV3b3JrO1xuICAgICAgICB9KSxcbiAgICAgICAgY2F0Y2hFcnJvcigoZXJyKSA9PiB7XG4gICAgICAgICAgdGhpcy5yZXNldEFsbCgpO1xuICAgICAgICAgIHRoaXMubGlzdC5jbGVhcigpO1xuICAgICAgICAgIHRoaXMuY2F0ZWdvcmllc0hhc2gubmV4dChbXSk7XG4gICAgICAgICAgdGhyb3cgJ0Vycm9yIGluIHNvdXJjZS4gRGV0YWlsczogJyArIGVycjtcbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucmVzZXRBbGwoKTtcbiAgICAgIHRoaXMuZm9ybWF0ZURhdGEoRlJBTUVXT1JLKTtcbiAgICAgIHJldHVybiBvZihGUkFNRVdPUkspO1xuICAgIH1cbiAgfVxuXG4gIHJlYWRUZXJtcyhmcmFtZXdvcmtJZDogc3RyaW5nLCBjYXRlZ29yeUlkOiBzdHJpbmcsIHJlcXVlc3RCb2R5OiBhbnkpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdChgLyR7dGhpcy5wcm94aWVzUGF0aH0vZnJhbWV3b3JrL3YxL3Rlcm0vc2VhcmNoP2ZyYW1ld29yaz0ke2ZyYW1ld29ya0lkfSZjYXRlZ29yeT0ke2NhdGVnb3J5SWR9YCwgcmVxdWVzdEJvZHkpLnBpcGUoXG4gICAgICBtYXAoKHJlczogYW55KSA9PiByZXMucmVzdWx0KSk7XG4gIH1cblxuICBjcmVhdGVUZXJtKGZyYW1ld29ya0lkOiBzdHJpbmcsIGNhdGVnb3J5SWQ6IHN0cmluZywgcmVxdWVzdEJvZHk6IGFueSk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KGAvJHt0aGlzLnByb3hpZXNQYXRofS9mcmFtZXdvcmsvdjEvdGVybS9jcmVhdGU/ZnJhbWV3b3JrPSR7ZnJhbWV3b3JrSWR9JmNhdGVnb3J5PSR7Y2F0ZWdvcnlJZH1gLCByZXF1ZXN0Qm9keSk7XG4gIH1cbiBcbiAgY3JlYXRlVGVybXNXcmFwcGVyKGNhdGVnb3J5OiBzdHJpbmcsIHJlcXVlc3RCb2R5OiBhbnkpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGxldCBjYXRlZ29yeUl0ZW06IHN0cmluZztcbiAgICBpZiAoY2F0ZWdvcnkgPT09ICd0aGVtZScpIHtcbiAgICAgIGNhdGVnb3J5SXRlbSA9ICdjb21wZXRlbmN5VGhlbWUnO1xuICAgIH0gZWxzZSB7XG4gICAgICBjYXRlZ29yeUl0ZW0gPSAnY29tcGV0ZW5jeVN1YlRoZW1lJztcbiAgICB9XG4gICBcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QoYC8ke3RoaXMucHJveGllc1BhdGh9LyR7Y2F0ZWdvcnlJdGVtfS9jcmVhdGUvdGVybWAsIHJlcXVlc3RCb2R5KVxuICAgICAgLnBpcGUobWFwKHJlcyA9PiBfLmdldChyZXMsICdyZXN1bHQnKSkpO1xuICB9XG5cbiAgcmV0aXJlVGVybShmcmFtZXdvcmtJZDogc3RyaW5nLCBjYXRlZ29yeUlkOiBzdHJpbmcsIGNhdGVnb3J5VGVybUNvZGU6IHN0cmluZyk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5kZWxldGUoYC8ke3RoaXMucHJveGllc1BhdGh9L2ZyYW1ld29yay92MS90ZXJtL3JldGlyZS8ke2NhdGVnb3J5VGVybUNvZGV9P2ZyYW1ld29yaz0ke2ZyYW1ld29ya0lkfSZjYXRlZ29yeT0ke2NhdGVnb3J5SWR9YCk7XG4gIH1cblxuICByZXRpcmVNdWx0aXBsZVRlcm0oZnJhbWV3b3JrSWQ6IHN0cmluZywgY2F0ZWdvcnlJZDogc3RyaW5nLCByZXF1ZXN0Qm9keTogYW55KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QoYC8ke3RoaXMucHJveGllc1BhdGh9L2ZyYW1ld29yay92MS90ZXJtL3JldGlyZT9mcmFtZXdvcms9JHtmcmFtZXdvcmtJZH0mY2F0ZWdvcnk9JHtjYXRlZ29yeUlkfWAsIHJlcXVlc3RCb2R5KTtcbiAgfVxuXG4gIHVwZGF0ZVRlcm0oZnJhbWV3b3JrSWQ6IHN0cmluZywgY2F0ZWdvcnlJZDogc3RyaW5nLCBjYXRlZ29yeVRlcm1Db2RlOiBzdHJpbmcsIHJlcXVlc3RCb2R5OiBhbnkpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIHJldHVybiB0aGlzLmh0dHAucGF0Y2goYC8ke3RoaXMucHJveGllc1BhdGh9L2ZyYW1ld29yay92MS90ZXJtL3VwZGF0ZS8ke2NhdGVnb3J5VGVybUNvZGV9P2ZyYW1ld29yaz0ke2ZyYW1ld29ya0lkfSZjYXRlZ29yeT0ke2NhdGVnb3J5SWR9YCwgcmVxdWVzdEJvZHkpO1xuICB9XG5cbiAgcHVibGlzaEZyYW1ld29yaygpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdChgLyR7dGhpcy5wcm94aWVzUGF0aH0vZnJhbWV3b3JrL3YxL3B1Ymxpc2gvJHt0aGlzLmVudmlyb25tZW50LmZyYW1ld29ya05hbWV9YCwge30pO1xuICB9XG5cbiAgZ2V0VXVpZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB1dWlkdjQoKTtcbiAgfVxuXG4gIHVwZGF0ZUVudmlyb25tZW50KGVudjogYW55KTogdm9pZCB7XG4gICAgdGhpcy5lbnZpcm9ubWVudCA9IGVudjtcbiAgfVxuXG4gIGdldEVudmlyb21lbnQoKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5lbnZpcm9ubWVudDtcbiAgfVxuXG4gIGdldEZyYW1ld29ya0lkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZnJhbWV3b3JrSWQ7XG4gIH1cblxuICBnZXROZXh0Q2F0ZWdvcnkoY3VycmVudENhdGVnb3J5OiBzdHJpbmcpOiBOU0ZyYW1ld29yay5JQ2F0ZWdvcnkgfCBudWxsIHtcbiAgICBjb25zdCBjdXJyZW50SW5kZXggPSB0aGlzLmNhdGVnb3JpZXNIYXNoLnZhbHVlLmZpbmRJbmRleCgoYTogTlNGcmFtZXdvcmsuSUNhdGVnb3J5KSA9PiB7XG4gICAgICByZXR1cm4gYS5jb2RlID09PSBjdXJyZW50Q2F0ZWdvcnk7XG4gICAgfSk7XG4gICAgbGV0IGNhdGVnb3J5TGVuZ3RoID0gdGhpcy5jYXRlZ29yaWVzSGFzaC5nZXRWYWx1ZSgpLmxlbmd0aDtcbiAgICByZXR1cm4gKGN1cnJlbnRJbmRleCArIDEpIDwgY2F0ZWdvcnlMZW5ndGggPyB0aGlzLmNhdGVnb3JpZXNIYXNoLmdldFZhbHVlKClbY3VycmVudEluZGV4ICsgMV0gOiBudWxsO1xuICB9XG5cbiAgZ2V0UHJldmlvdXNDYXRlZ29yeShjdXJyZW50Q2F0ZWdvcnk6IHN0cmluZyk6IE5TRnJhbWV3b3JrLklDYXRlZ29yeSB8IG51bGwge1xuICAgIGNvbnN0IGN1cnJlbnRJbmRleCA9IHRoaXMuY2F0ZWdvcmllc0hhc2gudmFsdWUuZmluZEluZGV4KChhOiBOU0ZyYW1ld29yay5JQ2F0ZWdvcnkpID0+IHtcbiAgICAgIHJldHVybiBhLmNvZGUgPT09IGN1cnJlbnRDYXRlZ29yeTtcbiAgICB9KTtcbiAgICByZXR1cm4gKGN1cnJlbnRJbmRleCAtIDEpID49IDAgPyB0aGlzLmNhdGVnb3JpZXNIYXNoLmdldFZhbHVlKClbY3VycmVudEluZGV4IC0gMV0gOiBudWxsO1xuICB9XG5cbiAgZ2V0UGFyZW50VGVybShjdXJyZW50Q2F0ZWdvcnk6IHN0cmluZyk6IGFueSB7XG4gICAgY29uc3QgcGFyZW50ID0gdGhpcy5nZXRQcmV2aW91c0NhdGVnb3J5KGN1cnJlbnRDYXRlZ29yeSkgfHwgbnVsbDtcbiAgICByZXR1cm4gcGFyZW50ID8gdGhpcy5zZWxlY3Rpb25MaXN0LmdldChwYXJlbnQuY29kZSkgOiBudWxsO1xuICB9XG5cbiAgY2hpbGRDbGljayhldmVudDogeyB0eXBlOiBzdHJpbmcsIGRhdGE6IGFueSB9KTogdm9pZCB7XG4gICAgdGhpcy5jdXJyZW50U2VsZWN0aW9uLm5leHQoZXZlbnQpO1xuICB9XG5cbiAgcmVzZXRBbGwoKTogdm9pZCB7XG4gICAgdGhpcy5jYXRlZ29yaWVzSGFzaC5uZXh0KFtdKTtcbiAgICB0aGlzLmN1cnJlbnRTZWxlY3Rpb24ubmV4dChudWxsKTtcbiAgICB0aGlzLnNlbGVjdGlvbkxpc3QuY2xlYXIoKTtcbiAgICB0aGlzLmxpc3QuY2xlYXIoKTtcbiAgfVxuXG4gIGlzTGFzdENvbHVtbihjb2xDb2RlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5jYXRlZ29yaWVzSGFzaC52YWx1ZSAmJiAodGhpcy5jYXRlZ29yaWVzSGFzaC52YWx1ZS5maW5kSW5kZXgoKGE6IE5TRnJhbWV3b3JrLklDYXRlZ29yeSkgPT4ge1xuICAgICAgcmV0dXJuIGEuY29kZSA9PT0gY29sQ29kZTtcbiAgICB9KSkgPT09ICh0aGlzLmNhdGVnb3JpZXNIYXNoLnZhbHVlLmxlbmd0aCAtIDEpO1xuICB9XG5cbiAgcmVtb3ZlSXRlbUZyb21BcnJheShhcnJheTogYW55W10sIGl0ZW06IGFueSk6IGFueVtdIHtcbiAgICAvKiBhc3NpZ24gYSBlbXB0eSBhcnJheSAqL1xuICAgIHZhciB0bXA6IGFueVtdID0gW107XG4gICAgLyogbG9vcCBvdmVyIGFsbCBhcnJheSBpdGVtcyAqL1xuICAgIGZvciAodmFyIGluZGV4IGluIGFycmF5KSB7XG4gICAgICBpZiAoYXJyYXlbaW5kZXhdICE9PSBpdGVtKSB7XG4gICAgICAgIC8qIHB1c2ggdG8gdGVtcG9yYXJ5IGFycmF5IGlmIG5vdCBsaWtlIGl0ZW0gKi9cbiAgICAgICAgdG1wLnB1c2goYXJyYXlbaW5kZXhdKTtcbiAgICAgIH1cbiAgICB9XG4gICAgLyogcmV0dXJuIHRoZSB0ZW1wb3JhcnkgYXJyYXkgKi9cbiAgICByZXR1cm4gdG1wO1xuICB9XG5cbiAgc2V0IHNldFRlcm0ocmVzOiBhbnkpIHtcbiAgICB0aGlzLnRlcm1TdWJqZWN0Lm5leHQocmVzKTtcbiAgICBsZXQgb2xkVGVybXMgPSB0aGlzLmdldFRlcm0gfHwgW107XG4gICAgb2xkVGVybXMucHVzaChyZXMpO1xuICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCd0ZXJtcycsIEpTT04uc3RyaW5naWZ5KG9sZFRlcm1zKSk7XG4gIH1cblxuICBnZXQgZ2V0VGVybSgpOiBhbnlbXSB7XG4gICAgcmV0dXJuIEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3Rlcm1zJykgfHwgJ1tdJykgfHwgW107XG4gIH1cblxuICB1cGRhdGVBZnRlckFkZE9yRWRpdFN1YmplY3QocmVzOiBhbnkpOiB2b2lkIHtcbiAgICBpZiAocmVzKSB7XG4gICAgICB0aGlzLmFmdGVyQWRkT3JFZGl0U3ViamVjdC5uZXh0KHJlcyk7XG4gICAgfSBcbiAgfVxuXG4gIGdldExvY2FsVGVybXNCeVBhcmVudChwYXJlbnRDb2RlOiBzdHJpbmcpOiBhbnlbXSB7XG4gICAgY29uc3QgZmlsdGVyZWREYXRhID0gdGhpcy5nZXRUZXJtLmZpbHRlcih4ID0+IHtcbiAgICAgIHJldHVybiB4LnBhcmVudCAmJiB4LnBhcmVudC5jYXRlZ29yeSA9PT0gcGFyZW50Q29kZTtcbiAgICB9KSB8fCBbXTtcblxuICAgIHJldHVybiBmaWx0ZXJlZERhdGEubWFwKHggPT4ge1xuICAgICAgcmV0dXJuIHgudGVybTtcbiAgICB9KTtcbiAgfVxuXG4gIGdldExvY2FsVGVybXNCeUNhdGVnb3J5KHBhcmVudENvZGU6IHN0cmluZyk6IGFueVtdIHtcbiAgICBjb25zdCBmaWx0ZXJlZERhdGEgPSB0aGlzLmdldFRlcm0uZmlsdGVyKHggPT4ge1xuICAgICAgcmV0dXJuIHgudGVybSAmJiB4LnRlcm0uY2F0ZWdvcnkgPT09IHBhcmVudENvZGU7XG4gICAgfSkgfHwgW107XG5cbiAgICByZXR1cm4gZmlsdGVyZWREYXRhO1xuICB9XG5cbiAgZ2V0TG9jYWxUZXJtc0NhdGVnb3J5KGNhdGVnb3J5OiBzdHJpbmcpOiBhbnlbXSB7XG4gICAgY29uc3QgZmlsdGVyZWREYXRhID0gdGhpcy5nZXRUZXJtLmZpbHRlcih4ID0+IHtcbiAgICAgIHJldHVybiB4LmNhdGVnb3J5ID09PSBjYXRlZ29yeTtcbiAgICB9KSB8fCBbXTtcblxuICAgIHJldHVybiBmaWx0ZXJlZERhdGE7XG4gIH1cblxuICBmb3JtYXRlRGF0YShyZXNwb25zZTogYW55LCBfY2hpbGRPcmdEYXRhPzogYW55KTogdm9pZCB7XG4gICAgdGhpcy5mcmFtZXdvcmtJZCA9IHJlc3BvbnNlLnJlc3VsdC5mcmFtZXdvcmsuY29kZTsgXG4gICAgbGV0IGNhdGVnb3JpZXMgPSByZXNwb25zZS5yZXN1bHQuZnJhbWV3b3JrLmNhdGVnb3JpZXM7XG4gICAgaWYgKF9jaGlsZE9yZ0RhdGE/LnJvb3RPcmdJZCkge1xuICAgICAgY2F0ZWdvcmllcyA9IHRoaXMuZ2V0T3JnRnJvbUNoaWxkT253YXJkcyhjYXRlZ29yaWVzIHx8IFtdLCBfY2hpbGRPcmdEYXRhIHx8ICcnKVxuICAgIH1cbiAgICByZXNwb25zZS5yZXN1bHQuZnJhbWV3b3JrLmNhdGVnb3JpZXMgPSBjYXRlZ29yaWVzO1xuICAgIChjYXRlZ29yaWVzKS5mb3JFYWNoKChhOiBhbnksIF9pZHg6IG51bWJlcikgPT4ge1xuICAgICAgdGhpcy5saXN0LnNldChhLmNvZGUsIHtcbiAgICAgICAgY29kZTogYS5jb2RlLFxuICAgICAgICBpZGVudGlmaWVyOiBhLmlkZW50aWZpZXIsXG4gICAgICAgIGluZGV4OiAoX2lkeCArIDEpLFxuICAgICAgICBuYW1lOiBhLm5hbWUsXG4gICAgICAgIHNlbGVjdGVkOiBhLnNlbGVjdGVkLFxuICAgICAgICBzdGF0dXM6IGEuc3RhdHVzIGFzIE5TRnJhbWV3b3JrLlROb2RlU3RhdHVzLFxuICAgICAgICBkZXNjcmlwdGlvbjogYS5kZXNjcmlwdGlvbixcbiAgICAgICAgdHJhbnNsYXRpb25zOiBhLnRyYW5zbGF0aW9ucyxcbiAgICAgICAgY2F0ZWdvcnk6IGEuY2F0ZWdvcnksXG4gICAgICAgIGFzc29jaWF0aW9uczogYS5hc3NvY2lhdGlvbnMsXG4gICAgICAgIGNvbmZpZzogdGhpcy5nZXRDb25maWcoYS5jb2RlKSxcbiAgICAgICAgY2hpbGRyZW46IChhLnRlcm1zIHx8IFtdKS5tYXAoKGM6IGFueSkgPT4ge1xuICAgICAgICAgIGNvbnN0IGFzc29jaWF0aW9ucyA9IGMuYXNzb2NpYXRpb25zIHx8IFtdO1xuICAgICAgICAgIGNvbnN0IHRlbXBDb3VudCA9IHRoaXMuZ2V0VXNlckNvdW50KGMpXG4gICAgICAgICAgT2JqZWN0LmFzc2lnbihjLCB7IHVzZXJDb3VudDogdGVtcENvdW50IH0pXG4gICAgICAgICAgaWYgKGFzc29jaWF0aW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBPYmplY3QuYXNzaWduKGMsIHsgY2hpbGRyZW46IGFzc29jaWF0aW9ucyB9KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGM7XG4gICAgICAgIH0pXG4gICAgICB9KTtcbiAgICB9KTtcbiAgICBcbiAgICBjb25zdCBhbGxDYXRlZ29yaWVzOiBOU0ZyYW1ld29yay5JQ2F0ZWdvcnlbXSA9IFtdO1xuICAgIHRoaXMubGlzdC5mb3JFYWNoKGEgPT4ge1xuICAgICAgYWxsQ2F0ZWdvcmllcy5wdXNoKHtcbiAgICAgICAgY29kZTogYS5jb2RlLFxuICAgICAgICBpZGVudGlmaWVyOiBhLmlkZW50aWZpZXIsXG4gICAgICAgIGluZGV4OiBhLmluZGV4LFxuICAgICAgICBuYW1lOiBhLm5hbWUsXG4gICAgICAgIHN0YXR1czogYS5zdGF0dXMgYXMgTlNGcmFtZXdvcmsuVE5vZGVTdGF0dXMsXG4gICAgICAgIGRlc2NyaXB0aW9uOiBhLmRlc2NyaXB0aW9uLFxuICAgICAgICB0cmFuc2xhdGlvbnM6IGEudHJhbnNsYXRpb25zLFxuICAgICAgfSBhcyBOU0ZyYW1ld29yay5JQ2F0ZWdvcnkpO1xuICAgIH0pO1xuICAgIHRoaXMuY2F0ZWdvcmllc0hhc2gubmV4dChhbGxDYXRlZ29yaWVzKTtcbiAgfVxuXG4gIGdldE9yZ0Zyb21DaGlsZE9ud2FyZHMoX2NhdGVnb3JpZXM6IGFueSwgX2NoaWxkT3JnRGF0YTogYW55KSB7XG4gICAgY29uc3QgY29sSW5kZXhUb0JlUmVtb3ZlZDogbnVtYmVyW10gPSBbXVxuICAgIGxldCB0ZXJtRm91bmRJbmRleDogYW55ID0gLTE7XG4gICAgaWYgKF9jYXRlZ29yaWVzPy5sZW5ndGggPiAwKSB7XG4gICAgICBfY2F0ZWdvcmllcy5mb3JFYWNoKChlbGU6YW55KSA9PiB7XG4gICAgICAgIGlmIChlbGU/LnRlcm1zPy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgY29uc3QgdGVybUZvdW5kID0gZWxlLnRlcm1zLmZpbmQoKHRlcm06IGFueSkgPT4gdGVybS5uYW1lID09PSBfY2hpbGRPcmdEYXRhLmNoYW5uZWwpO1xuICAgICAgICAgIGlmICghdGVybUZvdW5kICYmIHRlcm1Gb3VuZEluZGV4ID09PSAtMSkge1xuICAgICAgICAgICAgY29sSW5kZXhUb0JlUmVtb3ZlZC5wdXNoKGVsZS5pbmRleClcbiAgICAgICAgICB9IGVsc2UgaWYodGVybUZvdW5kSW5kZXggPT09IC0xKSB7XG4gICAgICAgICAgICB0ZXJtRm91bmRJbmRleCA9IGVsZS5pbmRleDtcbiAgICAgICAgICAgIGVsZS50ZXJtcyA9IGVsZS50ZXJtcy5maWx0ZXIoKHRlcm06IGFueSkgPT4gdGVybS5uYW1lID09PSBfY2hpbGRPcmdEYXRhLmNoYW5uZWwpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9XG4gICAgcmV0dXJuIF9jYXRlZ29yaWVzLmZpbHRlcigoY2F0ZWdvcnk6IGFueSkgPT4gIWNvbEluZGV4VG9CZVJlbW92ZWQuaW5jbHVkZXMoY2F0ZWdvcnkuaW5kZXgpKTtcbiAgfVxuXG4gIHJlbW92ZU9sZExpbmUoKTogdm9pZCB7XG4gICAgY29uc3QgZWxlcyA9IEFycmF5LmZyb20oZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnbGVhZGVyLWxpbmUnKSB8fCBbXSk7XG4gICAgaWYgKGVsZXMubGVuZ3RoID4gMCkge1xuICAgICAgZWxlcy5mb3JFYWNoKGVsZSA9PiBlbGUucmVtb3ZlKCkpO1xuICAgIH1cbiAgfVxuXG4gIHNldENvbmZpZyhjb25maWc6IGFueSk6IHZvaWQge1xuICAgIHRoaXMucm9vdENvbmZpZyA9IGNvbmZpZztcbiAgfVxuXG4gIGdldENvbmZpZyhjb2RlOiBzdHJpbmcpOiBhbnkge1xuICAgIGxldCBjYXRlZ29yeUNvbmZpZzogYW55O1xuICAgIGlmICh0aGlzLnJvb3RDb25maWcgJiYgdGhpcy5yb290Q29uZmlnWzBdKSB7XG4gICAgICB0aGlzLnJvb3RDb25maWcuZm9yRWFjaCgoY29uZmlnOiBhbnkpID0+IHtcbiAgICAgICAgaWYgKHRoaXMuZnJhbWV3b3JrSWQgPT0gY29uZmlnLmZyYW1ld29ya0lkKSB7XG4gICAgICAgICAgY2F0ZWdvcnlDb25maWcgPSBjb25maWcuY29uZmlnLmZpbmQoKG9iajogYW55KSA9PiBvYmouY2F0ZWdvcnkgPT0gY29kZSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgICBpZiAoIWNhdGVnb3J5Q29uZmlnKSB7XG4gICAgICByZXR1cm4gdGhpcy5yb290Q29uZmlnLmNvbmZpZ1swXVxuICAgIH1cbiAgICByZXR1cm4gY2F0ZWdvcnlDb25maWc7XG4gIH1cblxuICBnZXRBbGxTZWxlY3RlZFRlcm1zKCk6IGFueVtdIHtcbiAgICBjb25zdCBzZWxlY3RlZFRlcm1zOiBhbnlbXSA9IFtdO1xuICAgIHRoaXMubGlzdC5mb3JFYWNoKGwgPT4ge1xuICAgICAgaWYgKGwuY2hpbGRyZW4gJiYgbC5jaGlsZHJlbi5sZW5ndGgpIHtcbiAgICAgICAgbC5jaGlsZHJlbi5mb3JFYWNoKGMgPT4ge1xuICAgICAgICAgIGlmIChjLnNlbGVjdGVkKSB7XG4gICAgICAgICAgICBzZWxlY3RlZFRlcm1zLnB1c2goYyk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gc2VsZWN0ZWRUZXJtcztcbiAgfVxuXG4gIGdldFByZXZpb3VzU2VsZWN0ZWRUZXJtcyhjb2RlOiBzdHJpbmcpOiBhbnlbXSB7XG4gICAgbGV0IHByZXZTZWxlY3RlZFRlcm1zOiBhbnlbXSA9IFtdO1xuICAgIHRoaXMuc2VsZWN0aW9uTGlzdC5mb3JFYWNoKHNsID0+IHtcbiAgICAgIGlmIChzbC5jYXRlZ29yeSAhPT0gY29kZSkge1xuICAgICAgICBwcmV2U2VsZWN0ZWRUZXJtcy5wdXNoKHNsKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gcHJldlNlbGVjdGVkVGVybXM7XG4gIH1cblxuICBnZXRLY21TZWFyY2hMaXN0KHJlcXVlc3RCb2R5OiBhbnksIGNhdGVnb3J5OiBzdHJpbmcpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGxldCBjYXRlZ29yeUl0ZW06IHN0cmluZztcbiAgICBpZiAoY2F0ZWdvcnkgPT09ICd0aGVtZScpIHtcbiAgICAgIGNhdGVnb3J5SXRlbSA9ICdjb21wZXRlbmN5VGhlbWUnO1xuICAgIH0gZWxzZSB7XG4gICAgICBjYXRlZ29yeUl0ZW0gPSAnY29tcGV0ZW5jeVN1YlRoZW1lJztcbiAgICB9XG4gICAgXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KGAvJHt0aGlzLnByb3hpZXNQYXRofS8ke2NhdGVnb3J5SXRlbX0vc2VhcmNoYCwgcmVxdWVzdEJvZHkpXG4gICAgICAucGlwZShtYXAocmVzID0+IF8uZ2V0KHJlcywgJ3Jlc3VsdC5yZXN1bHQnKSkpO1xuICB9XG5cbiAgdXBkYXRlTG9jYWxMaXN0KGl0ZW06IGFueSwgcGFyZW50OiBhbnksIHNlbGVjdGVkVGVybUFycmF5OiBhbnlbXSwgdXBkYXRlVHlwZTogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKGl0ZW0gJiYgaXRlbS5jaGlsZHJlbiAmJiBpdGVtLmNoaWxkcmVuLmxlbmd0aCkge1xuICAgICAgaWYgKHVwZGF0ZVR5cGUgPT09ICdkZWxldGUnKSB7XG4gICAgICAgIGl0ZW0uY2hpbGRyZW4uZm9yRWFjaCgoaXRtRGF0YTogYW55KSA9PiB7XG4gICAgICAgICAgaWYgKGl0bURhdGEuaWRlbnRpZmllciA9PT0gcGFyZW50LmlkZW50aWZpZXIpIHtcbiAgICAgICAgICAgIGNvbnN0IGFzc29jaWF0aW9uTGlzdDogYW55ID0gXy5kaWZmZXJlbmNlV2l0aChpdG1EYXRhLmFzc29jaWF0aW9ucywgc2VsZWN0ZWRUZXJtQXJyYXksIChhOmFueSwgYjogYW55KSA9PiBhLmlkZW50aWZpZXIgPT09IGIuaWRlbnRpZmllcik7XG4gICAgICAgICAgICBjb25zdCBjaGlsZHJlbkxpc3Q6IGFueSA9IF8uZGlmZmVyZW5jZVdpdGgoaXRtRGF0YS5jaGlsZHJlbiwgc2VsZWN0ZWRUZXJtQXJyYXksIChhOmFueSwgYjogYW55KSA9PiBhLmlkZW50aWZpZXIgPT09IGIuaWRlbnRpZmllcik7XG4gICAgICAgICAgICBpdG1EYXRhWydhc3NvY2lhdGlvbnMnXSA9IGFzc29jaWF0aW9uTGlzdDtcbiAgICAgICAgICAgIGl0bURhdGFbJ2NoaWxkcmVuJ10gPSBjaGlsZHJlbkxpc3Q7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChpdG1EYXRhLmNoaWxkcmVuKSB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUxvY2FsTGlzdChpdG1EYXRhLCBwYXJlbnQsIHNlbGVjdGVkVGVybUFycmF5LCB1cGRhdGVUeXBlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaXRlbS5jaGlsZHJlbi5mb3JFYWNoKChpdG1EYXRhOiBhbnkpID0+IHtcbiAgICAgICAgICBpZiAoaXRtRGF0YS5pZGVudGlmaWVyID09PSBwYXJlbnQuaWRlbnRpZmllcikge1xuICAgICAgICAgICAgbGV0IGRpZmZlcmVuY2VEYXRhOiBhbnlbXSA9IFtdO1xuICAgICAgICAgICAgaWYgKGl0bURhdGEgJiYgaXRtRGF0YS5jaGlsZHJlbiAmJiBpdG1EYXRhLmNoaWxkcmVuLmxlbmd0aCkge1xuICAgICAgICAgICAgICBkaWZmZXJlbmNlRGF0YSAgPSBfLmRpZmZlcmVuY2VCeShzZWxlY3RlZFRlcm1BcnJheSwgaXRtRGF0YS5jaGlsZHJlbiwgJ2lkZW50aWZpZXInKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGRpZmZlcmVuY2VEYXRhID0gc2VsZWN0ZWRUZXJtQXJyYXk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpdG1EYXRhWydhc3NvY2lhdGlvbnMnXSA9IGl0bURhdGEgJiYgaXRtRGF0YS5hc3NvY2lhdGlvbnMgPyBbLi4uaXRtRGF0YS5hc3NvY2lhdGlvbnMsIC4uLmRpZmZlcmVuY2VEYXRhXSA6IGRpZmZlcmVuY2VEYXRhO1xuICAgICAgICAgICAgaXRtRGF0YVsnY2hpbGRyZW4nXSA9IGl0bURhdGEgJiYgaXRtRGF0YS5jaGlsZHJlbiA/IFsuLi5pdG1EYXRhLmNoaWxkcmVuLCAuLi5kaWZmZXJlbmNlRGF0YV0gOiBkaWZmZXJlbmNlRGF0YTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGl0bURhdGEuY2hpbGRyZW4pIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlTG9jYWxMaXN0KGl0bURhdGEsIHBhcmVudCwgc2VsZWN0ZWRUZXJtQXJyYXksIHVwZGF0ZVR5cGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgdXBkYXRlRnJhbWV3b3JrTGlzdChjb2x1bW5Db2RlOiBzdHJpbmcsIHBhcmVudERhdGE6IGFueSwgc2VsZWN0ZWRUZXJtQXJyYXk6IGFueVtdLCB1cGRhdGVUeXBlPzogc3RyaW5nKTogdm9pZCB7XG4gICAgbGV0IGxpc3REYXRhOiBhbnkgPSB0aGlzLmxpc3QuZ2V0KGNvbHVtbkNvZGUpO1xuICAgIGlmICh1cGRhdGVUeXBlID09PSAnZGVsZXRlJykge1xuICAgICAgY29uc3QgYXNzb2NpYXRpb25MaXN0OiBhbnkgPSBfLmRpZmZlcmVuY2VXaXRoKGxpc3REYXRhLmFzc29jaWF0aW9ucywgc2VsZWN0ZWRUZXJtQXJyYXksIChhOmFueSwgYjogYW55KSA9PiBhLmlkZW50aWZpZXIgPT09IGIuaWRlbnRpZmllcik7XG4gICAgICBjb25zdCBjaGlsZHJlbkxpc3Q6IGFueSA9IF8uZGlmZmVyZW5jZVdpdGgobGlzdERhdGEuY2hpbGRyZW4sIHNlbGVjdGVkVGVybUFycmF5LCAoYTphbnksIGI6IGFueSkgPT4gYS5pZGVudGlmaWVyID09PSBiLmlkZW50aWZpZXIpO1xuICAgICAgbGlzdERhdGFbJ2Fzc29jaWF0aW9ucyddID0gYXNzb2NpYXRpb25MaXN0O1xuICAgICAgbGlzdERhdGFbJ2NoaWxkcmVuJ10gPSBjaGlsZHJlbkxpc3Q7XG5cbiAgICAgIHRoaXMuc2VsZWN0aW9uTGlzdC5mb3JFYWNoKChzZWxlY3RlZERhdGE6IGFueSkgPT4ge1xuICAgICAgICBsZXQgbGlzdERhdGE6IGFueSA9IHRoaXMubGlzdC5nZXQoc2VsZWN0ZWREYXRhLmNhdGVnb3J5KTtcbiAgICAgICAgaWYgKGxpc3REYXRhICYmIGxpc3REYXRhLmNoaWxkcmVuICYmIGxpc3REYXRhLmNoaWxkcmVuLmxlbmd0aCkge1xuICAgICAgICAgIHRoaXMudXBkYXRlTG9jYWxMaXN0KGxpc3REYXRhLCBwYXJlbnREYXRhLCBzZWxlY3RlZFRlcm1BcnJheSwgdXBkYXRlVHlwZSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBsZXQgZGlmZmVyZW5jZURhdGE6IGFueVtdID0gW107XG4gICAgICBpZiAobGlzdERhdGEgJiYgbGlzdERhdGEuY2hpbGRyZW4gJiYgbGlzdERhdGEuY2hpbGRyZW4ubGVuZ3RoKSB7XG4gICAgICAgIGRpZmZlcmVuY2VEYXRhID0gXy5kaWZmZXJlbmNlQnkoc2VsZWN0ZWRUZXJtQXJyYXksIGxpc3REYXRhLmNoaWxkcmVuLCAnaWRlbnRpZmllcicpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZGlmZmVyZW5jZURhdGEgPSBzZWxlY3RlZFRlcm1BcnJheTtcbiAgICAgIH1cbiAgICAgIGxpc3REYXRhWydhc3NvY2lhdGlvbnMnXSA9IGxpc3REYXRhICYmIGxpc3REYXRhLmFzc29jaWF0aW9ucyA/IFsuLi5saXN0RGF0YS5hc3NvY2lhdGlvbnMsIC4uLmRpZmZlcmVuY2VEYXRhXSA6IGRpZmZlcmVuY2VEYXRhO1xuICAgICAgbGlzdERhdGFbJ2NoaWxkcmVuJ10gPSBsaXN0RGF0YSAmJiBsaXN0RGF0YS5jaGlsZHJlbiA/IFsuLi5saXN0RGF0YS5jaGlsZHJlbiwgLi4uZGlmZmVyZW5jZURhdGFdIDogZGlmZmVyZW5jZURhdGE7XG5cbiAgICAgIHRoaXMuc2VsZWN0aW9uTGlzdC5mb3JFYWNoKChzZWxlY3RlZERhdGE6IGFueSkgPT4ge1xuICAgICAgICBsZXQgbGlzdERhdGE6IGFueSA9IHRoaXMubGlzdC5nZXQoc2VsZWN0ZWREYXRhLmNhdGVnb3J5KTtcbiAgICAgICAgaWYgKGxpc3REYXRhICYmIGxpc3REYXRhLmNoaWxkcmVuICYmIGxpc3REYXRhLmNoaWxkcmVuLmxlbmd0aCkge1xuICAgICAgICAgIHRoaXMudXBkYXRlTG9jYWxMaXN0KGxpc3REYXRhLCBwYXJlbnREYXRhLCBzZWxlY3RlZFRlcm1BcnJheSwgdXBkYXRlVHlwZSB8fCAnJyk7XG4gICAgICAgIH1cbiAgICAgIH0pOyBcbiAgICB9XG4gIH1cblxuICBnZXRGcmFtZXdvcmtSZWFkKGZyYW1lV29ya0lkOiBzdHJpbmcpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGlmICh0aGlzLmxvY2FsQ29uZmlnLmNvbm5lY3Rpb25UeXBlID09PSAnb25saW5lJykge1xuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoYC8ke3RoaXMucHJveGllc1BhdGh9L2ZyYW1ld29yay92MS9yZWFkLyR7ZnJhbWVXb3JrSWR9YCwgeyB3aXRoQ3JlZGVudGlhbHM6IHRydWUgfSkucGlwZShcbiAgICAgICAgbWFwKChyZXNwb25zZTogYW55KSA9PiBfLmdldChyZXNwb25zZSwgJ3Jlc3VsdC5mcmFtZXdvcmsnKSlcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBvZih7fSk7XG4gICAgfVxuICB9XG5cbiAgZ2V0Q29uZmlnT2ZDYXRlZ29yeUNvbmZpZ0J5RnJhbWVXb3JrSWQoY29kZTogc3RyaW5nLCBmcmFtZXdvcmtJZDogc3RyaW5nKTogYW55IHtcbiAgICBsZXQgY2F0ZWdvcnlDb25maWc6IGFueTtcbiAgICBpZiAodGhpcy5yb290Q29uZmlnICYmIHRoaXMucm9vdENvbmZpZ1swXSkge1xuICAgICAgdGhpcy5yb290Q29uZmlnLmZvckVhY2goKGNvbmZpZzogYW55KSA9PiB7XG4gICAgICAgIGlmIChmcmFtZXdvcmtJZCA9PSBjb25maWcuZnJhbWV3b3JrSWQpIHtcbiAgICAgICAgICBjYXRlZ29yeUNvbmZpZyA9IGNvbmZpZy5jb25maWcuZmluZCgob2JqOiBhbnkpID0+IG9iai5jYXRlZ29yeSA9PSBjb2RlKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBjYXRlZ29yeUNvbmZpZztcbiAgfVxuXG4gIGdldENvbmZpZ0J5RnJhbWVXb3JrSWQoZnJhbWV3b3JrSWQ6IHN0cmluZyk6IGFueSB7XG4gICAgbGV0IGNhdGVnb3J5Q29uZmlnOiBhbnk7XG4gICAgaWYgKHRoaXMucm9vdENvbmZpZyAmJiB0aGlzLnJvb3RDb25maWdbMF0pIHtcbiAgICAgIHRoaXMucm9vdENvbmZpZy5mb3JFYWNoKChjb25maWc6IGFueSkgPT4ge1xuICAgICAgICBpZiAoZnJhbWV3b3JrSWQgPT0gY29uZmlnLmZyYW1ld29ya0lkKSB7XG4gICAgICAgICAgY2F0ZWdvcnlDb25maWcgPSBjb25maWc7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gY2F0ZWdvcnlDb25maWc7XG4gIH1cblxuICB1cGRhdGVGdWxsVGVybURhdGFMb2NhbE1hcChfY29sdW1uQ29kZTogc3RyaW5nLCBwYXJlbnREYXRhOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLnNlbGVjdGlvbkxpc3QuZm9yRWFjaCgoc2VsZWN0ZWREYXRhOiBhbnkpID0+IHtcbiAgICAgIGxldCBsaXN0RGF0YTogYW55ID0gdGhpcy5saXN0LmdldChzZWxlY3RlZERhdGEuY2F0ZWdvcnkpO1xuICAgICAgaWYgKGxpc3REYXRhICYmIGxpc3REYXRhLmNoaWxkcmVuICYmIGxpc3REYXRhLmNoaWxkcmVuLmxlbmd0aCkge1xuICAgICAgICB0aGlzLnVwZGF0ZUxvY2FsTGlzdFRlcm0obGlzdERhdGEsIHBhcmVudERhdGEpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgdXBkYXRlTG9jYWxMaXN0VGVybShpdGVtOiBhbnksIHBhcmVudDogYW55KTogdm9pZCB7XG4gICAgaWYgKGl0ZW0gJiYgaXRlbS5jaGlsZHJlbiAmJiBpdGVtLmNoaWxkcmVuLmxlbmd0aCkge1xuICAgICAgaXRlbS5jaGlsZHJlbi5mb3JFYWNoKChpdG1EYXRhOiBhbnkpID0+IHtcbiAgICAgICAgaWYgKGl0bURhdGEuaWRlbnRpZmllciA9PT0gcGFyZW50LmlkZW50aWZpZXIpIHtcbiAgICAgICAgICBpdG1EYXRhWydkZXNjcmlwdGlvbiddID0gcGFyZW50WydkZXNjcmlwdGlvbiddO1xuICAgICAgICAgIGl0bURhdGFbJ2FkZGl0aW9uYWxQcm9wZXJ0aWVzJ10gPSBwYXJlbnRbJ2FkZGl0aW9uYWxQcm9wZXJ0aWVzJ107XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGl0bURhdGEuY2hpbGRyZW4pIHtcbiAgICAgICAgICB0aGlzLnVwZGF0ZUxvY2FsTGlzdFRlcm0oaXRtRGF0YSwgcGFyZW50KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRTZWxlY3RlZFN0YXRlT3JnKF9vcmdEYXRhPzogYW55KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBjb25zdCByZXF1ZXN0Qm9keSA9IHtcbiAgICAgICAgcmVxdWVzdDoge1xuICAgICAgICAgIGZpbHRlcnM6IHtcbiAgICAgICAgICAgIHN0YXR1czogMSxcbiAgICAgICAgICAgIG1pbmlzdHJ5T3JTdGF0ZVR5cGU6IChfb3JnRGF0YSkgP1xuICAgICAgICAgICAgICBfb3JnRGF0YS5zYk9yZ1R5cGUgOiAnJyxcbiAgICAgICAgICAgIG1pbmlzdHJ5T3JTdGF0ZUlkOiAoX29yZ0RhdGEpID8gXG4gICAgICAgICAgICAgIF9vcmdEYXRhLmlkZW50aWZpZXIgOiAnJ1xuICAgICAgICAgIH0sXG4gICAgICAgICAgc29ydF9ieToge1xuICAgICAgICAgICAgY3JlYXRlZERhdGU6IFwiZGVzY1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBsaW1pdDogOTk5OSxcbiAgICAgICAgICBvZmZzZXQ6IDAsXG4gICAgICAgICAgZmllbGRzOiBbXG4gICAgICAgICAgICAnaWRlbnRpZmllcicsXG4gICAgICAgICAgICAnb3JnTmFtZScsXG4gICAgICAgICAgICAnZGVzY3JpcHRpb24nLFxuICAgICAgICAgICAgJ3BhcmVudE9yZ05hbWUnLFxuICAgICAgICAgICAgJ21pbmlzdHJ5T3JTdGF0ZUlkJyxcbiAgICAgICAgICAgICdtaW5pc3RyeU9yU3RhdGVUeXBlJyxcbiAgICAgICAgICAgICdtaW5pc3RyeU9yU3RhdGVOYW1lJywgXG4gICAgICAgICAgICAnc2JPcmdTdWJUeXBlJ1xuICAgICAgICAgIF1cbiAgICAgICAgfVxuICAgICAgfSAgICBcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QoYCR7QVBJX0VORFBPSU5ULk9SR19WMV9TRUFSQ0h9YCwgcmVxdWVzdEJvZHkpLnBpcGUoXG4gICAgICBjYXRjaEVycm9yKGVycm9yID0+IHtcbiAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgZmV0Y2hpbmcgT3JnIGRhdGE6JywgZXJyb3IpO1xuICAgICAgICAvLyBSZXR1cm4gZW1wdHkgZGF0YSB0byBjb250aW51ZSB0aGUgY2hhaW4gZXZlbiBpZiB0aGlzIEFQSSBmYWlsc1xuICAgICAgICByZXR1cm4gb2Yoe30pO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRVc2VyUGVyT3JnKF9vcmdEYXRhPzogYW55KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBjb25zdCBvcmdJZHMgPSB0aGlzLmFkZGl0aW9uYWxEYXRhLm1hcCgob3JnOiBhbnkpID0+IG9yZy5pZGVudGlmaWVyKTtcbiAgICBjb25zdCByZXF1ZXN0Qm9keSA9IHtcbiAgICAgIHJlcXVlc3Q6IHtcbiAgICAgICAgZmlsdGVyczoge1xuICAgICAgICAgICAgcm9vdE9yZ0lkOiBvcmdJZHNcbiAgICAgICAgfSxcbiAgICAgICAgZmllbGRzOiBbXG4gICAgICAgICAgICAnaWRlbnRpZmllcicsXG4gICAgICAgICAgICAncm9vdE9yZ0lkJ1xuICAgICAgICAgIF0sXG4gICAgICAgIGxpbWl0OiAxLFxuICAgICAgICBmYWNldHM6IFtcbiAgICAgICAgICAgIFwicm9vdE9yZ0lkXCJcbiAgICAgICAgXSxcbiAgICAgICAgc29ydF9ieToge1xuICAgICAgICAgICAgXCJjcmVhdGVkRGF0ZVwiOiBcImRlc2NcIlxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IG9yZ0lkQ291bnRzOiB7IGlkOiBzdHJpbmcsIGNvdW50OiBudW1iZXIgfVtdID0gW107XG4gICAgaWYgKHRoaXMuYWRkaXRpb25hbERhdGEgJiYgdGhpcy5hZGRpdGlvbmFsRGF0YS5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLmFkZGl0aW9uYWxEYXRhLmZvckVhY2goKG9yZzogYW55KSA9PiB7XG4gICAgICAgIGlmIChvcmcuaWRlbnRpZmllcikge1xuICAgICAgICAgIG9yZ0lkQ291bnRzLnB1c2goe1xuICAgICAgICAgICAgaWQ6IG9yZy5pZGVudGlmaWVyLFxuICAgICAgICAgICAgY291bnQ6IDAgXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfVxuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdChgJHtBUElfRU5EUE9JTlQuVVNFUlNfU0VBUkNIfWAsIHJlcXVlc3RCb2R5KS5waXBlKFxuICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xuICAgICAgICBpZiAocmVzICYmIHJlcy5yZXN1bHQgJiYgcmVzLnJlc3VsdC5yZXNwb25zZSAmJiByZXMucmVzdWx0LnJlc3BvbnNlLmNvdW50KXtcbiAgICAgICAgY29uc3QgZmFjZXRzVmFsdWUgPSByZXMucmVzdWx0LnJlc3BvbnNlLmZhY2V0cyB8fCBbXTsgIFxuICAgICAgICAgIGlmIChmYWNldHNWYWx1ZSAmJiBmYWNldHNWYWx1ZS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBjb25zdCBvcmdGYWNldCA9IGZhY2V0c1ZhbHVlLmZpbmQoKGZhY2V0OiBhbnkpID0+IGZhY2V0Lm5hbWUgPT09ICdyb290T3JnSWQnKTtcbiAgICAgICAgICAgIGlmIChvcmdGYWNldCAmJiBvcmdGYWNldC52YWx1ZXMpIHtcbiAgICAgICAgICAgICAgb3JnRmFjZXQudmFsdWVzLmZvckVhY2goKHZhbHVlOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBvcmdJbmRleCA9IG9yZ0lkQ291bnRzLmZpbmRJbmRleChvcmcgPT4gb3JnLmlkID09PSB2YWx1ZS5uYW1lKTtcbiAgICAgICAgICAgICAgICBpZiAob3JnSW5kZXggIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICBvcmdJZENvdW50c1tvcmdJbmRleF0uY291bnQgPSB2YWx1ZS5jb3VudCB8fCAwO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMudXNlckNvdW50RGF0YSA9IG9yZ0lkQ291bnRzO1xuICAgICAgfSksXG4gICAgICBjYXRjaEVycm9yKGVycm9yID0+IHtcbiAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgZmV0Y2hpbmcgdXNlciBjb3VudCBkYXRhOicsIGVycm9yKTtcbiAgICAgICAgcmV0dXJuIG9mKHt9KTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIGdldFVzZXJDb3VudCh0ZXJtOiBhbnkpOiBudW1iZXIge1xuICAgIGlmICh0ZXJtICYmIHRlcm0uYWRkaXRpb25hbFByb3BlcnRpZXMgJiYgdGVybS5hZGRpdGlvbmFsUHJvcGVydGllcy5vcmdJZCkge1xuICAgICAgaWYgKHRoaXMudXNlckNvdW50RGF0YSAmJiB0aGlzLnVzZXJDb3VudERhdGEubGVuZ3RoID4gMCkge1xuICAgICAgICBjb25zdCB1c2VyQ291bnQgPSB0aGlzLnVzZXJDb3VudERhdGEuZmlsdGVyKCh1c2VyOmFueSkgPT4gdXNlci5pZCA9PT0gdGVybS5hZGRpdGlvbmFsUHJvcGVydGllcy5vcmdJZClbMF0/LmNvdW50O1xuICAgICAgICByZXR1cm4gdXNlckNvdW50IHx8IDA7XG4gICAgICB9XG4gICAgfSBcbiAgICByZXR1cm4gMFxuICB9XG59Il19
526
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnJhbWV3b3JrLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJyYXJ5L3N1bmJpcmQtY2IvdHJlZS1oaWVyYXJjaHkvc3JjL2xpYi9zZXJ2aWNlcy9mcmFtZXdvcmsuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxlQUFlLEVBQWMsRUFBRSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3ZELE9BQU8sRUFBRSxVQUFVLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNqRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFHOUMsT0FBTyxFQUFFLEVBQUUsSUFBSSxNQUFNLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFJcEMsT0FBTyxDQUFDLE1BQU0sUUFBUSxDQUFDOzs7O0FBSXZCLE1BQU0sWUFBWSxHQUFHO0lBQ25CLGFBQWEsRUFBRSxnQ0FBZ0M7SUFDL0MsWUFBWSxFQUFFLGtEQUFrRDtJQUNoRSxZQUFZLEVBQUUsNENBQTRDO0lBQzFELGtCQUFrQixFQUFFLDRDQUE0QztJQUNoRSxpQkFBaUIsRUFBRSx3Q0FBd0M7SUFDM0QsV0FBVyxFQUFFLDJDQUEyQztJQUN4RCxlQUFlLEVBQUUsZ0RBQWdEO0lBQ2pFLFlBQVksRUFBRSxnQ0FBZ0M7Q0FDL0MsQ0FBQTtBQVdELE1BQU0sT0FBTyxnQkFBZ0I7SUFxQjNCLFlBQ1UsSUFBZ0IsRUFDakIsV0FBbUM7UUFEbEMsU0FBSSxHQUFKLElBQUksQ0FBWTtRQUNqQixnQkFBVyxHQUFYLFdBQVcsQ0FBd0I7UUF0QjVDLG1CQUFjLEdBQWtELElBQUksZUFBZSxDQUErQixFQUFFLENBQUMsQ0FBQztRQUN0SCxrQkFBYSxHQUE2QixJQUFJLGVBQWUsQ0FBVSxLQUFLLENBQUMsQ0FB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Q2hEO3dCQUNILENBQUMsQ0FBQyxDQUFDO3FCQUNKO2lCQUNGO2FBQ0Y7WUFDRCxJQUFJLENBQUMsYUFBYSxHQUFHLFdBQVcsQ0FBQztRQUNuQyxDQUFDLENBQUMsRUFDRixVQUFVLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDakIsT0FBTyxDQUFDLEtBQUssQ0FBQyxpQ0FBaUMsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUN4RCxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNoQixDQUFDLENBQUMsQ0FDSCxDQUFDO0lBQ0osQ0FBQztJQUVELFlBQVksQ0FBQyxJQUFTO1FBQ3BCLElBQUksSUFBSSxJQUFJLElBQUksQ0FBQyxvQkFBb0IsSUFBSSxJQUFJLENBQUMsb0JBQW9CLENBQUMsS0FBSyxFQUFFO1lBQ3hFLElBQUksSUFBSSxDQUFDLGFBQWEsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7Z0JBQ3ZELE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBUSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxLQUFLLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUM7Z0JBQ2pILE9BQU8sU0FBUyxJQUFJLENBQUMsQ0FBQzthQUN2QjtTQUNGO1FBQ0QsT0FBTyxDQUFDLENBQUE7SUFDVixDQUFDOytHQXpqQlUsZ0JBQWdCO21IQUFoQixnQkFBZ0IsY0FGZixNQUFNOzs0RkFFUCxnQkFBZ0I7a0JBSDVCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBPYnNlcnZhYmxlLCBvZiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgY2F0Y2hFcnJvciwgbWFwLCBzd2l0Y2hNYXAsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IEZSQU1FV09SSyB9IGZyb20gJy4uL2NvbnN0YW50cy9kYXRhJztcbmltcG9ydCB7IE5TRnJhbWV3b3JrIH0gZnJvbSAnLi4vbW9kZWxzL2ZyYW1ld29yay5tb2RlbCc7XG5pbXBvcnQgeyBIdHRwQ2xpZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgdjQgYXMgdXVpZHY0IH0gZnJvbSAndXVpZCc7XG5pbXBvcnQgeyBJQ29ubmVjdGlvbiB9IGZyb20gJy4uL21vZGVscy9jb25uZWN0aW9uLm1vZGVsJztcbmltcG9ydCB7IExvY2FsQ29ubmVjdGlvblNlcnZpY2UgfSBmcm9tICcuL2xvY2FsLWNvbm5lY3Rpb24uc2VydmljZSc7XG4vKiB0c2xpbnQ6ZGlzYWJsZSAqL1xuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbi8vIGltcG9ydCB7IFRyZWVIaWVyYXJjaHlTZXJ2aWNlIH0gZnJvbSAnLi4vdHJlZS1oaWVyYXJjaHkuc2VydmljZSc7XG4vKiB0c2xpbnQ6ZW5hYmxlICovXG5cbmNvbnN0IEFQSV9FTkRQT0lOVCA9IHtcbiAgT1JHX1YxX1NFQVJDSDogJy9hcGlzL3Byb3hpZXMvdjgvb3JnL3YxL3NlYXJjaCcsXG4gIENSRUFURV9URVJNUzogYC9hcGlzL3Byb3hpZXMvdjgvYWN0aW9uL2ZyYW1ld29yay92My90ZXJtL2NyZWF0ZWAsXG4gIFVQREFURV9URVJNUzogYC9hcGlzL3Byb3hpZXMvdjgvZnJhbWV3b3JrL3YxL3Rlcm0vdXBkYXRlL2AsXG4gIFVQREFURV9BU1NPQ0lBVElPTjogYC9hcGlzL3Byb3hpZXMvdjgvZnJhbWV3b3JrL3YxL3Rlcm0vdXBkYXRlL2AsXG4gIFBVQkxJU0hfRlJBTUVXT1JLOiBgL2FwaXMvcHJveGllcy92OC9mcmFtZXdvcmsvdjEvcHVibGlzaC9gLFxuICBSRVRJUkVfVFJFTTogYC9hcGlzL3Byb3hpZXMvdjgvZnJhbWV3b3JrL3YxL3Rlcm0vcmV0aXJlYCxcbiAgVVBEQVRFX0NBVEVHT1JZOiBgL2FwaXMvcHJveGllcy92OC9mcmFtZXdvcmsvdjEvY2F0ZWdvcnkvdXBkYXRlL2AsXG4gIFVTRVJTX1NFQVJDSDogYGFwaXMvcHJveGllcy92OC91c2VyL3YxL3NlYXJjaGBcbn1cblxuaW50ZXJmYWNlIE5vdGlmaWVyVHlwZSB7XG4gIHR5cGU6ICdzZWxlY3QnIHwgJ2luc2VydCcgfCAndXBkYXRlJyB8ICdkZWxldGUnO1xuICBhY3Rpb246IHN0cmluZztcbiAgZGF0YTogYW55O1xufVxuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBGcmFtZXdvcmtTZXJ2aWNlIHtcbiAgY2F0ZWdvcmllc0hhc2g6IEJlaGF2aW9yU3ViamVjdDxOU0ZyYW1ld29yay5JQ2F0ZWdvcnlbXSB8IFtdPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8TlNGcmFtZXdvcmsuSUNhdGVnb3J5W10gfCBbXT4oW10pO1xuICBpc0RhdGFVcGRhdGVkOiBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgY3VycmVudFNlbGVjdGlvbjogQmVoYXZpb3JTdWJqZWN0PHsgdHlwZTogc3RyaW5nLCBkYXRhOiBhbnksIGNhcmRSZWY/OiBhbnksIGlzVXBkYXRlPzpib29sZWFuIH0gfCBudWxsPiA9IFxuICAgIG5ldyBCZWhhdmlvclN1YmplY3Q8eyB0eXBlOiBzdHJpbmcsIGRhdGE6IGFueSwgY2FyZFJlZj86IGFueSwgaXNVcGRhdGU/OmJvb2xlYW4gfSB8IG51bGw+KG51bGwpO1xuICB0ZXJtU3ViamVjdDogQmVoYXZpb3JTdWJqZWN0PGFueT4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGFueT4obnVsbCk7XG4gIGFmdGVyQWRkT3JFZGl0U3ViamVjdDogQmVoYXZpb3JTdWJqZWN0PGFueT4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGFueT4obnVsbCk7XG4gIGxpc3QgPSBuZXcgTWFwPHN0cmluZywgTlNGcmFtZXdvcmsuSUNvbHVtblZpZXc+KCk7XG4gIHNlbGVjdGlvbkxpc3QgPSBuZXcgTWFwPHN0cmluZywgYW55PigpO1xuICBpbnNlcnRVcGRhdGVEZWxldGVOb3RpZmllcjogQmVoYXZpb3JTdWJqZWN0PE5vdGlmaWVyVHlwZSB8IG51bGw+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxOb3RpZmllclR5cGUgfCBudWxsPihudWxsKTtcbiAgZW52aXJvbm1lbnQ6IGFueTtcbiAgbGliQ29uZmlnITogSUNvbm5lY3Rpb247XG4gIGZyYW1ld29ya0lkITogc3RyaW5nO1xuICByb290Q29uZmlnOiBhbnk7XG4gIHByb3hpZXNQYXRoID0gJ2FwaXMvcHJveGllcy92OCc7XG4gIGNhcmRDbGtEYXRhOiBhbnk7XG4gIEN1cnJlbnRDYXJkQ2xrID0gbmV3IEJlaGF2aW9yU3ViamVjdDxhbnk+KG51bGwpO1xuICBjb21wbGV0ZVJlc3BvbnNlOiBhbnk7XG4gIGFkZGl0aW9uYWxEYXRhOiBhbnk7IC8vIEFkZCBhIHByb3BlcnR5IHRvIHN0b3JlIGFkZGl0aW9uYWwgZGF0YVxuICB1c2VyQ291bnREYXRhOiBhbnk7IC8vIEFkZCBhIHByb3BlcnR5IHRvIHN0b3JlIHVzZXIgY291bnQgZGF0YVxuICBcbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50LFxuICAgIHB1YmxpYyBsb2NhbENvbmZpZzogTG9jYWxDb25uZWN0aW9uU2VydmljZSxcbiAgICAvLyBwcml2YXRlIHRyZWVIaWVyYXJjaHlTdmM6IFRyZWVIaWVyYXJjaHlTZXJ2aWNlXG4gICkge31cblxuICBnZXRGcmFtZXdvcmtJbmZvKF9vcmdEYXRhPzphbnksIF9jaGlsZE9yZ0RhdGE/OmFueSk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oJ3Rlcm1zJyk7XG4gICAgaWYgKHRoaXMubG9jYWxDb25maWcuY29ubmVjdGlvblR5cGUgPT09ICdvbmxpbmUnKSB7XG4gICAgICBsZXQgdXJsID0gYC8ke3RoaXMucHJveGllc1BhdGh9L2ZyYW1ld29yay92MS9yZWFkL2BcbiAgICAgIGlmIChfb3JnRGF0YSkge1xuICAgICAgICB1cmwgPSB1cmwgKyBfb3JnRGF0YS5vcmdIaWVyYXJjaHlGcmFtZXdvcmtJZDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHVybCA9IHVybCArIHRoaXMuZW52aXJvbm1lbnQuZnJhbWV3b3JrTmFtZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KGAke3VybH1gLCB7IHdpdGhDcmVkZW50aWFsczogdHJ1ZSB9KS5waXBlKFxuICAgICAgICBzd2l0Y2hNYXAoKGZyYW1ld29ya1Jlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgICBjb25zdCBvcmlnaW5hbEZyYW1ld29ya1Jlc3BvbnNlID0gZnJhbWV3b3JrUmVzcG9uc2U7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0U2VsZWN0ZWRTdGF0ZU9yZyhfb3JnRGF0YSkucGlwZShcbiAgICAgICAgICAgIHN3aXRjaE1hcCgob3JnTGlzdERhdGE6IGFueSkgPT4ge1xuICAgICAgICAgICAgICB0aGlzLmFkZGl0aW9uYWxEYXRhID0gb3JnTGlzdERhdGE/LnJlc3VsdD8ucmVzcG9uc2U/LmNvbnRlbnQgfHwgW107XG4gICAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFVzZXJQZXJPcmcoKS5waXBlKFxuICAgICAgICAgICAgICAgIG1hcCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gb3JpZ2luYWxGcmFtZXdvcmtSZXNwb25zZVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICk7XG4gICAgICAgIH0pLFxuICAgICAgICB0YXAoYXN5bmMgKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgICB0aGlzLnJlc2V0QWxsKCk7XG4gICAgICAgICAgdGhpcy5mb3JtYXRlRGF0YShyZXNwb25zZSwgX29yZ0RhdGEsIF9jaGlsZE9yZ0RhdGEpO1xuICAgICAgICAgIHRoaXMuY29tcGxldGVSZXNwb25zZSA9IHJlc3BvbnNlLnJlc3VsdC5mcmFtZXdvcms7XG4gICAgICAgIH0pLFxuICAgICAgICBjYXRjaEVycm9yKChlcnIpID0+IHtcbiAgICAgICAgICB0aGlzLnJlc2V0QWxsKCk7XG4gICAgICAgICAgdGhpcy5saXN0LmNsZWFyKCk7XG4gICAgICAgICAgdGhpcy5jYXRlZ29yaWVzSGFzaC5uZXh0KFtdKTtcbiAgICAgICAgICB0aHJvdyAnRXJyb3IgaW4gc291cmNlLiBEZXRhaWxzOiAnICsgZXJyO1xuICAgICAgICB9KVxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5yZXNldEFsbCgpO1xuICAgICAgdGhpcy5mb3JtYXRlRGF0YShGUkFNRVdPUkspO1xuICAgICAgcmV0dXJuIG9mKEZSQU1FV09SSyk7XG4gICAgfVxuICB9XG5cbiAgcmVhZFRlcm1zKGZyYW1ld29ya0lkOiBzdHJpbmcsIGNhdGVnb3J5SWQ6IHN0cmluZywgcmVxdWVzdEJvZHk6IGFueSk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KGAvJHt0aGlzLnByb3hpZXNQYXRofS9mcmFtZXdvcmsvdjEvdGVybS9zZWFyY2g/ZnJhbWV3b3JrPSR7ZnJhbWV3b3JrSWR9JmNhdGVnb3J5PSR7Y2F0ZWdvcnlJZH1gLCByZXF1ZXN0Qm9keSkucGlwZShcbiAgICAgIG1hcCgocmVzOiBhbnkpID0+IHJlcy5yZXN1bHQpKTtcbiAgfVxuXG4gIGNyZWF0ZVRlcm0oZnJhbWV3b3JrSWQ6IHN0cmluZywgY2F0ZWdvcnlJZDogc3RyaW5nLCByZXF1ZXN0Qm9keTogYW55KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QoYC8ke3RoaXMucHJveGllc1BhdGh9L2ZyYW1ld29yay92MS90ZXJtL2NyZWF0ZT9mcmFtZXdvcms9JHtmcmFtZXdvcmtJZH0mY2F0ZWdvcnk9JHtjYXRlZ29yeUlkfWAsIHJlcXVlc3RCb2R5KTtcbiAgfVxuIFxuICBjcmVhdGVUZXJtc1dyYXBwZXIoY2F0ZWdvcnk6IHN0cmluZywgcmVxdWVzdEJvZHk6IGFueSk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgbGV0IGNhdGVnb3J5SXRlbTogc3RyaW5nO1xuICAgIGlmIChjYXRlZ29yeSA9PT0gJ3RoZW1lJykge1xuICAgICAgY2F0ZWdvcnlJdGVtID0gJ2NvbXBldGVuY3lUaGVtZSc7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNhdGVnb3J5SXRlbSA9ICdjb21wZXRlbmN5U3ViVGhlbWUnO1xuICAgIH1cbiAgIFxuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdChgLyR7dGhpcy5wcm94aWVzUGF0aH0vJHtjYXRlZ29yeUl0ZW19L2NyZWF0ZS90ZXJtYCwgcmVxdWVzdEJvZHkpXG4gICAgICAucGlwZShtYXAocmVzID0+IF8uZ2V0KHJlcywgJ3Jlc3VsdCcpKSk7XG4gIH1cblxuICByZXRpcmVUZXJtKGZyYW1ld29ya0lkOiBzdHJpbmcsIGNhdGVnb3J5SWQ6IHN0cmluZywgY2F0ZWdvcnlUZXJtQ29kZTogc3RyaW5nKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwLmRlbGV0ZShgLyR7dGhpcy5wcm94aWVzUGF0aH0vZnJhbWV3b3JrL3YxL3Rlcm0vcmV0aXJlLyR7Y2F0ZWdvcnlUZXJtQ29kZX0/ZnJhbWV3b3JrPSR7ZnJhbWV3b3JrSWR9JmNhdGVnb3J5PSR7Y2F0ZWdvcnlJZH1gKTtcbiAgfVxuXG4gIHJldGlyZU11bHRpcGxlVGVybShmcmFtZXdvcmtJZDogc3RyaW5nLCBjYXRlZ29yeUlkOiBzdHJpbmcsIHJlcXVlc3RCb2R5OiBhbnkpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdChgLyR7dGhpcy5wcm94aWVzUGF0aH0vZnJhbWV3b3JrL3YxL3Rlcm0vcmV0aXJlP2ZyYW1ld29yaz0ke2ZyYW1ld29ya0lkfSZjYXRlZ29yeT0ke2NhdGVnb3J5SWR9YCwgcmVxdWVzdEJvZHkpO1xuICB9XG5cbiAgdXBkYXRlVGVybShmcmFtZXdvcmtJZDogc3RyaW5nLCBjYXRlZ29yeUlkOiBzdHJpbmcsIGNhdGVnb3J5VGVybUNvZGU6IHN0cmluZywgcmVxdWVzdEJvZHk6IGFueSk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wYXRjaChgLyR7dGhpcy5wcm94aWVzUGF0aH0vZnJhbWV3b3JrL3YxL3Rlcm0vdXBkYXRlLyR7Y2F0ZWdvcnlUZXJtQ29kZX0/ZnJhbWV3b3JrPSR7ZnJhbWV3b3JrSWR9JmNhdGVnb3J5PSR7Y2F0ZWdvcnlJZH1gLCByZXF1ZXN0Qm9keSk7XG4gIH1cblxuICBwdWJsaXNoRnJhbWV3b3JrKCk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KGAvJHt0aGlzLnByb3hpZXNQYXRofS9mcmFtZXdvcmsvdjEvcHVibGlzaC8ke3RoaXMuZW52aXJvbm1lbnQuZnJhbWV3b3JrTmFtZX1gLCB7fSk7XG4gIH1cblxuICBnZXRVdWlkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHV1aWR2NCgpO1xuICB9XG5cbiAgdXBkYXRlRW52aXJvbm1lbnQoZW52OiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLmVudmlyb25tZW50ID0gZW52O1xuICB9XG5cbiAgZ2V0RW52aXJvbWVudCgpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLmVudmlyb25tZW50O1xuICB9XG5cbiAgZ2V0RnJhbWV3b3JrSWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5mcmFtZXdvcmtJZDtcbiAgfVxuXG4gIGdldE5leHRDYXRlZ29yeShjdXJyZW50Q2F0ZWdvcnk6IHN0cmluZyk6IE5TRnJhbWV3b3JrLklDYXRlZ29yeSB8IG51bGwge1xuICAgIGNvbnN0IGN1cnJlbnRJbmRleCA9IHRoaXMuY2F0ZWdvcmllc0hhc2gudmFsdWUuZmluZEluZGV4KChhOiBOU0ZyYW1ld29yay5JQ2F0ZWdvcnkpID0+IHtcbiAgICAgIHJldHVybiBhLmNvZGUgPT09IGN1cnJlbnRDYXRlZ29yeTtcbiAgICB9KTtcbiAgICBsZXQgY2F0ZWdvcnlMZW5ndGggPSB0aGlzLmNhdGVnb3JpZXNIYXNoLmdldFZhbHVlKCkubGVuZ3RoO1xuICAgIHJldHVybiAoY3VycmVudEluZGV4ICsgMSkgPCBjYXRlZ29yeUxlbmd0aCA/IHRoaXMuY2F0ZWdvcmllc0hhc2guZ2V0VmFsdWUoKVtjdXJyZW50SW5kZXggKyAxXSA6IG51bGw7XG4gIH1cblxuICBnZXRQcmV2aW91c0NhdGVnb3J5KGN1cnJlbnRDYXRlZ29yeTogc3RyaW5nKTogTlNGcmFtZXdvcmsuSUNhdGVnb3J5IHwgbnVsbCB7XG4gICAgY29uc3QgY3VycmVudEluZGV4ID0gdGhpcy5jYXRlZ29yaWVzSGFzaC52YWx1ZS5maW5kSW5kZXgoKGE6IE5TRnJhbWV3b3JrLklDYXRlZ29yeSkgPT4ge1xuICAgICAgcmV0dXJuIGEuY29kZSA9PT0gY3VycmVudENhdGVnb3J5O1xuICAgIH0pO1xuICAgIHJldHVybiAoY3VycmVudEluZGV4IC0gMSkgPj0gMCA/IHRoaXMuY2F0ZWdvcmllc0hhc2guZ2V0VmFsdWUoKVtjdXJyZW50SW5kZXggLSAxXSA6IG51bGw7XG4gIH1cblxuICBnZXRQYXJlbnRUZXJtKGN1cnJlbnRDYXRlZ29yeTogc3RyaW5nKTogYW55IHtcbiAgICBjb25zdCBwYXJlbnQgPSB0aGlzLmdldFByZXZpb3VzQ2F0ZWdvcnkoY3VycmVudENhdGVnb3J5KSB8fCBudWxsO1xuICAgIHJldHVybiBwYXJlbnQgPyB0aGlzLnNlbGVjdGlvbkxpc3QuZ2V0KHBhcmVudC5jb2RlKSA6IG51bGw7XG4gIH1cblxuICBjaGlsZENsaWNrKGV2ZW50OiB7IHR5cGU6IHN0cmluZywgZGF0YTogYW55IH0pOiB2b2lkIHtcbiAgICB0aGlzLmN1cnJlbnRTZWxlY3Rpb24ubmV4dChldmVudCk7XG4gIH1cblxuICByZXNldEFsbCgpOiB2b2lkIHtcbiAgICB0aGlzLmNhdGVnb3JpZXNIYXNoLm5leHQoW10pO1xuICAgIHRoaXMuY3VycmVudFNlbGVjdGlvbi5uZXh0KG51bGwpO1xuICAgIHRoaXMuc2VsZWN0aW9uTGlzdC5jbGVhcigpO1xuICAgIHRoaXMubGlzdC5jbGVhcigpO1xuICB9XG5cbiAgaXNMYXN0Q29sdW1uKGNvbENvZGU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmNhdGVnb3JpZXNIYXNoLnZhbHVlICYmICh0aGlzLmNhdGVnb3JpZXNIYXNoLnZhbHVlLmZpbmRJbmRleCgoYTogTlNGcmFtZXdvcmsuSUNhdGVnb3J5KSA9PiB7XG4gICAgICByZXR1cm4gYS5jb2RlID09PSBjb2xDb2RlO1xuICAgIH0pKSA9PT0gKHRoaXMuY2F0ZWdvcmllc0hhc2gudmFsdWUubGVuZ3RoIC0gMSk7XG4gIH1cblxuICByZW1vdmVJdGVtRnJvbUFycmF5KGFycmF5OiBhbnlbXSwgaXRlbTogYW55KTogYW55W10ge1xuICAgIC8qIGFzc2lnbiBhIGVtcHR5IGFycmF5ICovXG4gICAgdmFyIHRtcDogYW55W10gPSBbXTtcbiAgICAvKiBsb29wIG92ZXIgYWxsIGFycmF5IGl0ZW1zICovXG4gICAgZm9yICh2YXIgaW5kZXggaW4gYXJyYXkpIHtcbiAgICAgIGlmIChhcnJheVtpbmRleF0gIT09IGl0ZW0pIHtcbiAgICAgICAgLyogcHVzaCB0byB0ZW1wb3JhcnkgYXJyYXkgaWYgbm90IGxpa2UgaXRlbSAqL1xuICAgICAgICB0bXAucHVzaChhcnJheVtpbmRleF0pO1xuICAgICAgfVxuICAgIH1cbiAgICAvKiByZXR1cm4gdGhlIHRlbXBvcmFyeSBhcnJheSAqL1xuICAgIHJldHVybiB0bXA7XG4gIH1cblxuICBzZXQgc2V0VGVybShyZXM6IGFueSkge1xuICAgIHRoaXMudGVybVN1YmplY3QubmV4dChyZXMpO1xuICAgIGxldCBvbGRUZXJtcyA9IHRoaXMuZ2V0VGVybSB8fCBbXTtcbiAgICBvbGRUZXJtcy5wdXNoKHJlcyk7XG4gICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ3Rlcm1zJywgSlNPTi5zdHJpbmdpZnkob2xkVGVybXMpKTtcbiAgfVxuXG4gIGdldCBnZXRUZXJtKCk6IGFueVtdIHtcbiAgICByZXR1cm4gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgndGVybXMnKSB8fCAnW10nKSB8fCBbXTtcbiAgfVxuXG4gIHVwZGF0ZUFmdGVyQWRkT3JFZGl0U3ViamVjdChyZXM6IGFueSk6IHZvaWQge1xuICAgIGlmIChyZXMpIHtcbiAgICAgIHRoaXMuYWZ0ZXJBZGRPckVkaXRTdWJqZWN0Lm5leHQocmVzKTtcbiAgICB9IFxuICB9XG5cbiAgZ2V0TG9jYWxUZXJtc0J5UGFyZW50KHBhcmVudENvZGU6IHN0cmluZyk6IGFueVtdIHtcbiAgICBjb25zdCBmaWx0ZXJlZERhdGEgPSB0aGlzLmdldFRlcm0uZmlsdGVyKHggPT4ge1xuICAgICAgcmV0dXJuIHgucGFyZW50ICYmIHgucGFyZW50LmNhdGVnb3J5ID09PSBwYXJlbnRDb2RlO1xuICAgIH0pIHx8IFtdO1xuXG4gICAgcmV0dXJuIGZpbHRlcmVkRGF0YS5tYXAoeCA9PiB7XG4gICAgICByZXR1cm4geC50ZXJtO1xuICAgIH0pO1xuICB9XG5cbiAgZ2V0TG9jYWxUZXJtc0J5Q2F0ZWdvcnkocGFyZW50Q29kZTogc3RyaW5nKTogYW55W10ge1xuICAgIGNvbnN0IGZpbHRlcmVkRGF0YSA9IHRoaXMuZ2V0VGVybS5maWx0ZXIoeCA9PiB7XG4gICAgICByZXR1cm4geC50ZXJtICYmIHgudGVybS5jYXRlZ29yeSA9PT0gcGFyZW50Q29kZTtcbiAgICB9KSB8fCBbXTtcblxuICAgIHJldHVybiBmaWx0ZXJlZERhdGE7XG4gIH1cblxuICBnZXRMb2NhbFRlcm1zQ2F0ZWdvcnkoY2F0ZWdvcnk6IHN0cmluZyk6IGFueVtdIHtcbiAgICBjb25zdCBmaWx0ZXJlZERhdGEgPSB0aGlzLmdldFRlcm0uZmlsdGVyKHggPT4ge1xuICAgICAgcmV0dXJuIHguY2F0ZWdvcnkgPT09IGNhdGVnb3J5O1xuICAgIH0pIHx8IFtdO1xuXG4gICAgcmV0dXJuIGZpbHRlcmVkRGF0YTtcbiAgfVxuXG4gIGZvcm1hdGVEYXRhKHJlc3BvbnNlOiBhbnksIF9vcmdEYXRhPzogYW55LCBfY2hpbGRPcmdEYXRhPzogYW55KTogdm9pZCB7XG4gICAgdGhpcy5mcmFtZXdvcmtJZCA9IHJlc3BvbnNlLnJlc3VsdC5mcmFtZXdvcmsuY29kZTsgXG4gICAgbGV0IGNhdGVnb3JpZXMgPSByZXNwb25zZS5yZXN1bHQuZnJhbWV3b3JrLmNhdGVnb3JpZXM7XG4gICAgaWYgKF9jaGlsZE9yZ0RhdGE/LmlkICE9PSBfb3JnRGF0YT8uaWQpIHtcbiAgICAgIGNhdGVnb3JpZXMgPSB0aGlzLmdldE9yZ0Zyb21DaGlsZE9ud2FyZHMoY2F0ZWdvcmllcyB8fCBbXSwgX2NoaWxkT3JnRGF0YSB8fCAnJylcbiAgICB9XG4gICAgcmVzcG9uc2UucmVzdWx0LmZyYW1ld29yay5jYXRlZ29yaWVzID0gY2F0ZWdvcmllcztcbiAgICAoY2F0ZWdvcmllcykuZm9yRWFjaCgoYTogYW55LCBfaWR4OiBudW1iZXIpID0+IHtcbiAgICAgIHRoaXMubGlzdC5zZXQoYS5jb2RlLCB7XG4gICAgICAgIGNvZGU6IGEuY29kZSxcbiAgICAgICAgaWRlbnRpZmllcjogYS5pZGVudGlmaWVyLFxuICAgICAgICBpbmRleDogKF9pZHggKyAxKSxcbiAgICAgICAgbmFtZTogYS5uYW1lLFxuICAgICAgICBzZWxlY3RlZDogYS5zZWxlY3RlZCxcbiAgICAgICAgc3RhdHVzOiBhLnN0YXR1cyBhcyBOU0ZyYW1ld29yay5UTm9kZVN0YXR1cyxcbiAgICAgICAgZGVzY3JpcHRpb246IGEuZGVzY3JpcHRpb24sXG4gICAgICAgIHRyYW5zbGF0aW9uczogYS50cmFuc2xhdGlvbnMsXG4gICAgICAgIGNhdGVnb3J5OiBhLmNhdGVnb3J5LFxuICAgICAgICBhc3NvY2lhdGlvbnM6IGEuYXNzb2NpYXRpb25zLFxuICAgICAgICBjb25maWc6IHRoaXMuZ2V0Q29uZmlnKGEuY29kZSxfY2hpbGRPcmdEYXRhKSxcbiAgICAgICAgY2hpbGRyZW46IChhLnRlcm1zIHx8IFtdKS5tYXAoKGM6IGFueSkgPT4ge1xuICAgICAgICAgIGNvbnN0IGFzc29jaWF0aW9ucyA9IGMuYXNzb2NpYXRpb25zIHx8IFtdO1xuICAgICAgICAgIGNvbnN0IHRlbXBDb3VudCA9IHRoaXMuZ2V0VXNlckNvdW50KGMpXG4gICAgICAgICAgT2JqZWN0LmFzc2lnbihjLCB7IHVzZXJDb3VudDogdGVtcENvdW50IH0pXG4gICAgICAgICAgaWYgKGFzc29jaWF0aW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBPYmplY3QuYXNzaWduKGMsIHsgY2hpbGRyZW46IGFzc29jaWF0aW9ucyB9KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGM7XG4gICAgICAgIH0pXG4gICAgICB9KVxuICAgIH0pXG4gICAgXG4gICAgY29uc3QgYWxsQ2F0ZWdvcmllczogTlNGcmFtZXdvcmsuSUNhdGVnb3J5W10gPSBbXTtcbiAgICB0aGlzLmxpc3QuZm9yRWFjaChhID0+IHtcbiAgICAgIGFsbENhdGVnb3JpZXMucHVzaCh7XG4gICAgICAgIGNvZGU6IGEuY29kZSxcbiAgICAgICAgaWRlbnRpZmllcjogYS5pZGVudGlmaWVyLFxuICAgICAgICBpbmRleDogYS5pbmRleCxcbiAgICAgICAgbmFtZTogYS5uYW1lLFxuICAgICAgICBzdGF0dXM6IGEuc3RhdHVzIGFzIE5TRnJhbWV3b3JrLlROb2RlU3RhdHVzLFxuICAgICAgICBkZXNjcmlwdGlvbjogYS5kZXNjcmlwdGlvbixcbiAgICAgICAgdHJhbnNsYXRpb25zOiBhLnRyYW5zbGF0aW9ucyxcbiAgICAgIH0gYXMgTlNGcmFtZXdvcmsuSUNhdGVnb3J5KTtcbiAgICB9KTtcbiAgICB0aGlzLmNhdGVnb3JpZXNIYXNoLm5leHQoYWxsQ2F0ZWdvcmllcyk7XG4gIH1cblxuICBnZXRPcmdGcm9tQ2hpbGRPbndhcmRzKF9jYXRlZ29yaWVzOiBhbnksIF9jaGlsZE9yZ0RhdGE6IGFueSkge1xuICAgIGNvbnN0IGNvbEluZGV4VG9CZVJlbW92ZWQ6IG51bWJlcltdID0gW11cbiAgICBsZXQgdGVybUZvdW5kSW5kZXg6IGFueSA9IC0xO1xuICAgIGlmIChfY2F0ZWdvcmllcz8ubGVuZ3RoID4gMCkge1xuICAgICAgX2NhdGVnb3JpZXMuZm9yRWFjaCgoZWxlOmFueSkgPT4ge1xuICAgICAgICBpZiAoZWxlPy50ZXJtcz8ubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGNvbnN0IHRlcm1Gb3VuZCA9IGVsZS50ZXJtcy5maW5kKCh0ZXJtOiBhbnkpID0+IHRlcm0ubmFtZSA9PT0gX2NoaWxkT3JnRGF0YS5jaGFubmVsKTtcbiAgICAgICAgICBpZiAoIXRlcm1Gb3VuZCAmJiB0ZXJtRm91bmRJbmRleCA9PT0gLTEpIHtcbiAgICAgICAgICAgIGNvbEluZGV4VG9CZVJlbW92ZWQucHVzaChlbGUuaW5kZXgpXG4gICAgICAgICAgfSBlbHNlIGlmKHRlcm1Gb3VuZEluZGV4ID09PSAtMSkge1xuICAgICAgICAgICAgdGVybUZvdW5kSW5kZXggPSBlbGUuaW5kZXg7XG4gICAgICAgICAgICBlbGUudGVybXMgPSBlbGUudGVybXMuZmlsdGVyKCh0ZXJtOiBhbnkpID0+IHRlcm0ubmFtZSA9PT0gX2NoaWxkT3JnRGF0YS5jaGFubmVsKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfVxuICAgIHJldHVybiBfY2F0ZWdvcmllcy5maWx0ZXIoKGNhdGVnb3J5OiBhbnkpID0+ICFjb2xJbmRleFRvQmVSZW1vdmVkLmluY2x1ZGVzKGNhdGVnb3J5LmluZGV4KSk7XG4gIH1cblxuICByZW1vdmVPbGRMaW5lKCk6IHZvaWQge1xuICAgIGNvbnN0IGVsZXMgPSBBcnJheS5mcm9tKGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2xlYWRlci1saW5lJykgfHwgW10pO1xuICAgIGlmIChlbGVzLmxlbmd0aCA+IDApIHtcbiAgICAgIGVsZXMuZm9yRWFjaChlbGUgPT4gZWxlLnJlbW92ZSgpKTtcbiAgICB9XG4gIH1cblxuICBzZXRDb25maWcoY29uZmlnOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLnJvb3RDb25maWcgPSBjb25maWc7XG4gIH1cblxuICBnZXRDb25maWcoY29kZTogc3RyaW5nLF9jaGlsZE9yZ0RhdGE/OiBhbnkpOiBhbnkge1xuICAgIGxldCBjYXRlZ29yeUNvbmZpZzogYW55O1xuICAgIGlmICh0aGlzLnJvb3RDb25maWcgJiYgdGhpcy5yb290Q29uZmlnWzBdKSB7XG4gICAgICB0aGlzLnJvb3RDb25maWcuZm9yRWFjaCgoY29uZmlnOiBhbnkpID0+IHtcbiAgICAgICAgaWYgKHRoaXMuZnJhbWV3b3JrSWQgPT0gY29uZmlnLmZyYW1ld29ya0lkKSB7XG4gICAgICAgICAgY2F0ZWdvcnlDb25maWcgPSBjb25maWcuY29uZmlnLmZpbmQoKG9iajogYW55KSA9PiBvYmouY2F0ZWdvcnkgPT0gY29kZSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgICBpZiAoIWNhdGVnb3J5Q29uZmlnKSB7XG4gICAgICBjb25zdCBjb25maWcgPSB0aGlzLnJvb3RDb25maWcuY29uZmlnWzBdXG4gICAgICByZXR1cm4gY29uZmlnXG4gICAgfVxuICAgIHJldHVybiBjYXRlZ29yeUNvbmZpZztcbiAgfVxuXG4gIGdldEFsbFNlbGVjdGVkVGVybXMoKTogYW55W10ge1xuICAgIGNvbnN0IHNlbGVjdGVkVGVybXM6IGFueVtdID0gW107XG4gICAgdGhpcy5saXN0LmZvckVhY2gobCA9PiB7XG4gICAgICBpZiAobC5jaGlsZHJlbiAmJiBsLmNoaWxkcmVuLmxlbmd0aCkge1xuICAgICAgICBsLmNoaWxkcmVuLmZvckVhY2goYyA9PiB7XG4gICAgICAgICAgaWYgKGMuc2VsZWN0ZWQpIHtcbiAgICAgICAgICAgIHNlbGVjdGVkVGVybXMucHVzaChjKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBzZWxlY3RlZFRlcm1zO1xuICB9XG5cbiAgZ2V0UHJldmlvdXNTZWxlY3RlZFRlcm1zKGNvZGU6IHN0cmluZyk6IGFueVtdIHtcbiAgICBsZXQgcHJldlNlbGVjdGVkVGVybXM6IGFueVtdID0gW107XG4gICAgdGhpcy5zZWxlY3Rpb25MaXN0LmZvckVhY2goc2wgPT4ge1xuICAgICAgaWYgKHNsLmNhdGVnb3J5ICE9PSBjb2RlKSB7XG4gICAgICAgIHByZXZTZWxlY3RlZFRlcm1zLnB1c2goc2wpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBwcmV2U2VsZWN0ZWRUZXJtcztcbiAgfVxuXG4gIGdldEtjbVNlYXJjaExpc3QocmVxdWVzdEJvZHk6IGFueSwgY2F0ZWdvcnk6IHN0cmluZyk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgbGV0IGNhdGVnb3J5SXRlbTogc3RyaW5nO1xuICAgIGlmIChjYXRlZ29yeSA9PT0gJ3RoZW1lJykge1xuICAgICAgY2F0ZWdvcnlJdGVtID0gJ2NvbXBldGVuY3lUaGVtZSc7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNhdGVnb3J5SXRlbSA9ICdjb21wZXRlbmN5U3ViVGhlbWUnO1xuICAgIH1cbiAgICBcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QoYC8ke3RoaXMucHJveGllc1BhdGh9LyR7Y2F0ZWdvcnlJdGVtfS9zZWFyY2hgLCByZXF1ZXN0Qm9keSlcbiAgICAgIC5waXBlKG1hcChyZXMgPT4gXy5nZXQocmVzLCAncmVzdWx0LnJlc3VsdCcpKSk7XG4gIH1cblxuICB1cGRhdGVMb2NhbExpc3QoaXRlbTogYW55LCBwYXJlbnQ6IGFueSwgc2VsZWN0ZWRUZXJtQXJyYXk6IGFueVtdLCB1cGRhdGVUeXBlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAoaXRlbSAmJiBpdGVtLmNoaWxkcmVuICYmIGl0ZW0uY2hpbGRyZW4ubGVuZ3RoKSB7XG4gICAgICBpZiAodXBkYXRlVHlwZSA9PT0gJ2RlbGV0ZScpIHtcbiAgICAgICAgaXRlbS5jaGlsZHJlbi5mb3JFYWNoKChpdG1EYXRhOiBhbnkpID0+IHtcbiAgICAgICAgICBpZiAoaXRtRGF0YS5pZGVudGlmaWVyID09PSBwYXJlbnQuaWRlbnRpZmllcikge1xuICAgICAgICAgICAgY29uc3QgYXNzb2NpYXRpb25MaXN0OiBhbnkgPSBfLmRpZmZlcmVuY2VXaXRoKGl0bURhdGEuYXNzb2NpYXRpb25zLCBzZWxlY3RlZFRlcm1BcnJheSwgKGE6YW55LCBiOiBhbnkpID0+IGEuaWRlbnRpZmllciA9PT0gYi5pZGVudGlmaWVyKTtcbiAgICAgICAgICAgIGNvbnN0IGNoaWxkcmVuTGlzdDogYW55ID0gXy5kaWZmZXJlbmNlV2l0aChpdG1EYXRhLmNoaWxkcmVuLCBzZWxlY3RlZFRlcm1BcnJheSwgKGE6YW55LCBiOiBhbnkpID0+IGEuaWRlbnRpZmllciA9PT0gYi5pZGVudGlmaWVyKTtcbiAgICAgICAgICAgIGl0bURhdGFbJ2Fzc29jaWF0aW9ucyddID0gYXNzb2NpYXRpb25MaXN0O1xuICAgICAgICAgICAgaXRtRGF0YVsnY2hpbGRyZW4nXSA9IGNoaWxkcmVuTGlzdDtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGl0bURhdGEuY2hpbGRyZW4pIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlTG9jYWxMaXN0KGl0bURhdGEsIHBhcmVudCwgc2VsZWN0ZWRUZXJtQXJyYXksIHVwZGF0ZVR5cGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpdGVtLmNoaWxkcmVuLmZvckVhY2goKGl0bURhdGE6IGFueSkgPT4ge1xuICAgICAgICAgIGlmIChpdG1EYXRhLmlkZW50aWZpZXIgPT09IHBhcmVudC5pZGVudGlmaWVyKSB7XG4gICAgICAgICAgICBsZXQgZGlmZmVyZW5jZURhdGE6IGFueVtdID0gW107XG4gICAgICAgICAgICBpZiAoaXRtRGF0YSAmJiBpdG1EYXRhLmNoaWxkcmVuICYmIGl0bURhdGEuY2hpbGRyZW4ubGVuZ3RoKSB7XG4gICAgICAgICAgICAgIGRpZmZlcmVuY2VEYXRhICA9IF8uZGlmZmVyZW5jZUJ5KHNlbGVjdGVkVGVybUFycmF5LCBpdG1EYXRhLmNoaWxkcmVuLCAnaWRlbnRpZmllcicpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgZGlmZmVyZW5jZURhdGEgPSBzZWxlY3RlZFRlcm1BcnJheTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGl0bURhdGFbJ2Fzc29jaWF0aW9ucyddID0gaXRtRGF0YSAmJiBpdG1EYXRhLmFzc29jaWF0aW9ucyA/IFsuLi5pdG1EYXRhLmFzc29jaWF0aW9ucywgLi4uZGlmZmVyZW5jZURhdGFdIDogZGlmZmVyZW5jZURhdGE7XG4gICAgICAgICAgICBpdG1EYXRhWydjaGlsZHJlbiddID0gaXRtRGF0YSAmJiBpdG1EYXRhLmNoaWxkcmVuID8gWy4uLml0bURhdGEuY2hpbGRyZW4sIC4uLmRpZmZlcmVuY2VEYXRhXSA6IGRpZmZlcmVuY2VEYXRhO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoaXRtRGF0YS5jaGlsZHJlbikge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVMb2NhbExpc3QoaXRtRGF0YSwgcGFyZW50LCBzZWxlY3RlZFRlcm1BcnJheSwgdXBkYXRlVHlwZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB1cGRhdGVGcmFtZXdvcmtMaXN0KGNvbHVtbkNvZGU6IHN0cmluZywgcGFyZW50RGF0YTogYW55LCBzZWxlY3RlZFRlcm1BcnJheTogYW55W10sIHVwZGF0ZVR5cGU/OiBzdHJpbmcpOiB2b2lkIHtcbiAgICBsZXQgbGlzdERhdGE6IGFueSA9IHRoaXMubGlzdC5nZXQoY29sdW1uQ29kZSk7XG4gICAgaWYgKHVwZGF0ZVR5cGUgPT09ICdkZWxldGUnKSB7XG4gICAgICBjb25zdCBhc3NvY2lhdGlvbkxpc3Q6IGFueSA9IF8uZGlmZmVyZW5jZVdpdGgobGlzdERhdGEuYXNzb2NpYXRpb25zLCBzZWxlY3RlZFRlcm1BcnJheSwgKGE6YW55LCBiOiBhbnkpID0+IGEuaWRlbnRpZmllciA9PT0gYi5pZGVudGlmaWVyKTtcbiAgICAgIGNvbnN0IGNoaWxkcmVuTGlzdDogYW55ID0gXy5kaWZmZXJlbmNlV2l0aChsaXN0RGF0YS5jaGlsZHJlbiwgc2VsZWN0ZWRUZXJtQXJyYXksIChhOmFueSwgYjogYW55KSA9PiBhLmlkZW50aWZpZXIgPT09IGIuaWRlbnRpZmllcik7XG4gICAgICBsaXN0RGF0YVsnYXNzb2NpYXRpb25zJ10gPSBhc3NvY2lhdGlvbkxpc3Q7XG4gICAgICBsaXN0RGF0YVsnY2hpbGRyZW4nXSA9IGNoaWxkcmVuTGlzdDtcblxuICAgICAgdGhpcy5zZWxlY3Rpb25MaXN0LmZvckVhY2goKHNlbGVjdGVkRGF0YTogYW55KSA9PiB7XG4gICAgICAgIGxldCBsaXN0RGF0YTogYW55ID0gdGhpcy5saXN0LmdldChzZWxlY3RlZERhdGEuY2F0ZWdvcnkpO1xuICAgICAgICBpZiAobGlzdERhdGEgJiYgbGlzdERhdGEuY2hpbGRyZW4gJiYgbGlzdERhdGEuY2hpbGRyZW4ubGVuZ3RoKSB7XG4gICAgICAgICAgdGhpcy51cGRhdGVMb2NhbExpc3QobGlzdERhdGEsIHBhcmVudERhdGEsIHNlbGVjdGVkVGVybUFycmF5LCB1cGRhdGVUeXBlKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxldCBkaWZmZXJlbmNlRGF0YTogYW55W10gPSBbXTtcbiAgICAgIGlmIChsaXN0RGF0YSAmJiBsaXN0RGF0YS5jaGlsZHJlbiAmJiBsaXN0RGF0YS5jaGlsZHJlbi5sZW5ndGgpIHtcbiAgICAgICAgZGlmZmVyZW5jZURhdGEgPSBfLmRpZmZlcmVuY2VCeShzZWxlY3RlZFRlcm1BcnJheSwgbGlzdERhdGEuY2hpbGRyZW4sICdpZGVudGlmaWVyJyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkaWZmZXJlbmNlRGF0YSA9IHNlbGVjdGVkVGVybUFycmF5O1xuICAgICAgfVxuICAgICAgbGlzdERhdGFbJ2Fzc29jaWF0aW9ucyddID0gbGlzdERhdGEgJiYgbGlzdERhdGEuYXNzb2NpYXRpb25zID8gWy4uLmxpc3REYXRhLmFzc29jaWF0aW9ucywgLi4uZGlmZmVyZW5jZURhdGFdIDogZGlmZmVyZW5jZURhdGE7XG4gICAgICBsaXN0RGF0YVsnY2hpbGRyZW4nXSA9IGxpc3REYXRhICYmIGxpc3REYXRhLmNoaWxkcmVuID8gWy4uLmxpc3REYXRhLmNoaWxkcmVuLCAuLi5kaWZmZXJlbmNlRGF0YV0gOiBkaWZmZXJlbmNlRGF0YTtcblxuICAgICAgdGhpcy5zZWxlY3Rpb25MaXN0LmZvckVhY2goKHNlbGVjdGVkRGF0YTogYW55KSA9PiB7XG4gICAgICAgIGxldCBsaXN0RGF0YTogYW55ID0gdGhpcy5saXN0LmdldChzZWxlY3RlZERhdGEuY2F0ZWdvcnkpO1xuICAgICAgICBpZiAobGlzdERhdGEgJiYgbGlzdERhdGEuY2hpbGRyZW4gJiYgbGlzdERhdGEuY2hpbGRyZW4ubGVuZ3RoKSB7XG4gICAgICAgICAgdGhpcy51cGRhdGVMb2NhbExpc3QobGlzdERhdGEsIHBhcmVudERhdGEsIHNlbGVjdGVkVGVybUFycmF5LCB1cGRhdGVUeXBlIHx8ICcnKTtcbiAgICAgICAgfVxuICAgICAgfSk7IFxuICAgIH1cbiAgfVxuXG4gIGdldEZyYW1ld29ya1JlYWQoZnJhbWVXb3JrSWQ6IHN0cmluZyk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgaWYgKHRoaXMubG9jYWxDb25maWcuY29ubmVjdGlvblR5cGUgPT09ICdvbmxpbmUnKSB7XG4gICAgICByZXR1cm4gdGhpcy5odHRwLmdldChgLyR7dGhpcy5wcm94aWVzUGF0aH0vZnJhbWV3b3JrL3YxL3JlYWQvJHtmcmFtZVdvcmtJZH1gLCB7IHdpdGhDcmVkZW50aWFsczogdHJ1ZSB9KS5waXBlKFxuICAgICAgICBtYXAoKHJlc3BvbnNlOiBhbnkpID0+IF8uZ2V0KHJlc3BvbnNlLCAncmVzdWx0LmZyYW1ld29yaycpKVxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG9mKHt9KTtcbiAgICB9XG4gIH1cblxuICBnZXRDb25maWdPZkNhdGVnb3J5Q29uZmlnQnlGcmFtZVdvcmtJZChjb2RlOiBzdHJpbmcsIGZyYW1ld29ya0lkOiBzdHJpbmcpOiBhbnkge1xuICAgIGxldCBjYXRlZ29yeUNvbmZpZzogYW55O1xuICAgIGlmICh0aGlzLnJvb3RDb25maWcgJiYgdGhpcy5yb290Q29uZmlnWzBdKSB7XG4gICAgICB0aGlzLnJvb3RDb25maWcuZm9yRWFjaCgoY29uZmlnOiBhbnkpID0+IHtcbiAgICAgICAgaWYgKGZyYW1ld29ya0lkID09IGNvbmZpZy5mcmFtZXdvcmtJZCkge1xuICAgICAgICAgIGNhdGVnb3J5Q29uZmlnID0gY29uZmlnLmNvbmZpZy5maW5kKChvYmo6IGFueSkgPT4gb2JqLmNhdGVnb3J5ID09IGNvZGUpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGNhdGVnb3J5Q29uZmlnO1xuICB9XG5cbiAgZ2V0Q29uZmlnQnlGcmFtZVdvcmtJZChmcmFtZXdvcmtJZDogc3RyaW5nKTogYW55IHtcbiAgICBsZXQgY2F0ZWdvcnlDb25maWc6IGFueTtcbiAgICBpZiAodGhpcy5yb290Q29uZmlnICYmIHRoaXMucm9vdENvbmZpZ1swXSkge1xuICAgICAgdGhpcy5yb290Q29uZmlnLmZvckVhY2goKGNvbmZpZzogYW55KSA9PiB7XG4gICAgICAgIGlmIChmcmFtZXdvcmtJZCA9PSBjb25maWcuZnJhbWV3b3JrSWQpIHtcbiAgICAgICAgICBjYXRlZ29yeUNvbmZpZyA9IGNvbmZpZztcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBjYXRlZ29yeUNvbmZpZztcbiAgfVxuXG4gIHVwZGF0ZUZ1bGxUZXJtRGF0YUxvY2FsTWFwKF9jb2x1bW5Db2RlOiBzdHJpbmcsIHBhcmVudERhdGE6IGFueSk6IHZvaWQge1xuICAgIHRoaXMuc2VsZWN0aW9uTGlzdC5mb3JFYWNoKChzZWxlY3RlZERhdGE6IGFueSkgPT4ge1xuICAgICAgbGV0IGxpc3REYXRhOiBhbnkgPSB0aGlzLmxpc3QuZ2V0KHNlbGVjdGVkRGF0YS5jYXRlZ29yeSk7XG4gICAgICBpZiAobGlzdERhdGEgJiYgbGlzdERhdGEuY2hpbGRyZW4gJiYgbGlzdERhdGEuY2hpbGRyZW4ubGVuZ3RoKSB7XG4gICAgICAgIHRoaXMudXBkYXRlTG9jYWxMaXN0VGVybShsaXN0RGF0YSwgcGFyZW50RGF0YSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICB1cGRhdGVMb2NhbExpc3RUZXJtKGl0ZW06IGFueSwgcGFyZW50OiBhbnkpOiB2b2lkIHtcbiAgICBpZiAoaXRlbSAmJiBpdGVtLmNoaWxkcmVuICYmIGl0ZW0uY2hpbGRyZW4ubGVuZ3RoKSB7XG4gICAgICBpdGVtLmNoaWxkcmVuLmZvckVhY2goKGl0bURhdGE6IGFueSkgPT4ge1xuICAgICAgICBpZiAoaXRtRGF0YS5pZGVudGlmaWVyID09PSBwYXJlbnQuaWRlbnRpZmllcikge1xuICAgICAgICAgIGl0bURhdGFbJ2Rlc2NyaXB0aW9uJ10gPSBwYXJlbnRbJ2Rlc2NyaXB0aW9uJ107XG4gICAgICAgICAgaXRtRGF0YVsnYWRkaXRpb25hbFByb3BlcnRpZXMnXSA9IHBhcmVudFsnYWRkaXRpb25hbFByb3BlcnRpZXMnXTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXRtRGF0YS5jaGlsZHJlbikge1xuICAgICAgICAgIHRoaXMudXBkYXRlTG9jYWxMaXN0VGVybShpdG1EYXRhLCBwYXJlbnQpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGdldFNlbGVjdGVkU3RhdGVPcmcoX29yZ0RhdGE/OiBhbnkpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGNvbnN0IHJlcXVlc3RCb2R5ID0ge1xuICAgICAgICByZXF1ZXN0OiB7XG4gICAgICAgICAgZmlsdGVyczoge1xuICAgICAgICAgICAgc3RhdHVzOiAxLFxuICAgICAgICAgICAgbWluaXN0cnlPclN0YXRlVHlwZTogKF9vcmdEYXRhKSA/XG4gICAgICAgICAgICAgIF9vcmdEYXRhLnNiT3JnVHlwZSA6ICcnLFxuICAgICAgICAgICAgbWluaXN0cnlPclN0YXRlSWQ6IChfb3JnRGF0YSkgPyBcbiAgICAgICAgICAgICAgX29yZ0RhdGEuaWRlbnRpZmllciA6ICcnXG4gICAgICAgICAgfSxcbiAgICAgICAgICBzb3J0X2J5OiB7XG4gICAgICAgICAgICBjcmVhdGVkRGF0ZTogXCJkZXNjXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIGxpbWl0OiA5OTk5LFxuICAgICAgICAgIG9mZnNldDogMCxcbiAgICAgICAgICBmaWVsZHM6IFtcbiAgICAgICAgICAgICdpZGVudGlmaWVyJyxcbiAgICAgICAgICAgICdvcmdOYW1lJyxcbiAgICAgICAgICAgICdkZXNjcmlwdGlvbicsXG4gICAgICAgICAgICAncGFyZW50T3JnTmFtZScsXG4gICAgICAgICAgICAnbWluaXN0cnlPclN0YXRlSWQnLFxuICAgICAgICAgICAgJ21pbmlzdHJ5T3JTdGF0ZVR5cGUnLFxuICAgICAgICAgICAgJ21pbmlzdHJ5T3JTdGF0ZU5hbWUnLCBcbiAgICAgICAgICAgICdzYk9yZ1N1YlR5cGUnXG4gICAgICAgICAgXVxuICAgICAgICB9XG4gICAgICB9ICAgIFxuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdChgJHtBUElfRU5EUE9JTlQuT1JHX1YxX1NFQVJDSH1gLCByZXF1ZXN0Qm9keSkucGlwZShcbiAgICAgIGNhdGNoRXJyb3IoZXJyb3IgPT4ge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBmZXRjaGluZyBPcmcgZGF0YTonLCBlcnJvcik7XG4gICAgICAgIC8vIFJldHVybiBlbXB0eSBkYXRhIHRvIGNvbnRpbnVlIHRoZSBjaGFpbiBldmVuIGlmIHRoaXMgQVBJIGZhaWxzXG4gICAgICAgIHJldHVybiBvZih7fSk7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGdldFVzZXJQZXJPcmcoX29yZ0RhdGE/OiBhbnkpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGNvbnN0IG9yZ0lkcyA9IHRoaXMuYWRkaXRpb25hbERhdGEubWFwKChvcmc6IGFueSkgPT4gb3JnLmlkZW50aWZpZXIpO1xuICAgIGNvbnN0IHJlcXVlc3RCb2R5ID0ge1xuICAgICAgcmVxdWVzdDoge1xuICAgICAgICBmaWx0ZXJzOiB7XG4gICAgICAgICAgICByb290T3JnSWQ6IG9yZ0lkc1xuICAgICAgICB9LFxuICAgICAgICBmaWVsZHM6IFtcbiAgICAgICAgICAgICdpZGVudGlmaWVyJyxcbiAgICAgICAgICAgICdyb290T3JnSWQnXG4gICAgICAgICAgXSxcbiAgICAgICAgbGltaXQ6IDEsXG4gICAgICAgIGZhY2V0czogW1xuICAgICAgICAgICAgXCJyb290T3JnSWRcIlxuICAgICAgICBdLFxuICAgICAgICBzb3J0X2J5OiB7XG4gICAgICAgICAgICBcImNyZWF0ZWREYXRlXCI6IFwiZGVzY1wiXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3Qgb3JnSWRDb3VudHM6IHsgaWQ6IHN0cmluZywgY291bnQ6IG51bWJlciB9W10gPSBbXTtcbiAgICBpZiAodGhpcy5hZGRpdGlvbmFsRGF0YSAmJiB0aGlzLmFkZGl0aW9uYWxEYXRhLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMuYWRkaXRpb25hbERhdGEuZm9yRWFjaCgob3JnOiBhbnkpID0+IHtcbiAgICAgICAgaWYgKG9yZy5pZGVudGlmaWVyKSB7XG4gICAgICAgICAgb3JnSWRDb3VudHMucHVzaCh7XG4gICAgICAgICAgICBpZDogb3JnLmlkZW50aWZpZXIsXG4gICAgICAgICAgICBjb3VudDogMCBcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KGAke0FQSV9FTkRQT0lOVC5VU0VSU19TRUFSQ0h9YCwgcmVxdWVzdEJvZHkpLnBpcGUoXG4gICAgICBtYXAoKHJlczogYW55KSA9PiB7XG4gICAgICAgIGlmIChyZXMgJiYgcmVzLnJlc3VsdCAmJiByZXMucmVzdWx0LnJlc3BvbnNlICYmIHJlcy5yZXN1bHQucmVzcG9uc2UuY291bnQpe1xuICAgICAgICBjb25zdCBmYWNldHNWYWx1ZSA9IHJlcy5yZXN1bHQucmVzcG9uc2UuZmFjZXRzIHx8IFtdOyAgXG4gICAgICAgICAgaWYgKGZhY2V0c1ZhbHVlICYmIGZhY2V0c1ZhbHVlLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGNvbnN0IG9yZ0ZhY2V0ID0gZmFjZXRzVmFsdWUuZmluZCgoZmFjZXQ6IGFueSkgPT4gZmFjZXQubmFtZSA9PT0gJ3Jvb3RPcmdJZCcpO1xuICAgICAgICAgICAgaWYgKG9yZ0ZhY2V0ICYmIG9yZ0ZhY2V0LnZhbHVlcykge1xuICAgICAgICAgICAgICBvcmdGYWNldC52YWx1ZXMuZm9yRWFjaCgodmFsdWU6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IG9yZ0luZGV4ID0gb3JnSWRDb3VudHMuZmluZEluZGV4KG9yZyA9PiBvcmcuaWQgPT09IHZhbHVlLm5hbWUpO1xuICAgICAgICAgICAgICAgIGlmIChvcmdJbmRleCAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgIG9yZ0lkQ291bnRzW29yZ0luZGV4XS5jb3VudCA9IHZhbHVlLmNvdW50IHx8IDA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy51c2VyQ291bnREYXRhID0gb3JnSWRDb3VudHM7XG4gICAgICB9KSxcbiAgICAgIGNhdGNoRXJyb3IoZXJyb3IgPT4ge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBmZXRjaGluZyB1c2VyIGNvdW50IGRhdGE6JywgZXJyb3IpO1xuICAgICAgICByZXR1cm4gb2Yoe30pO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgZ2V0VXNlckNvdW50KHRlcm06IGFueSk6IG51bWJlciB7XG4gICAgaWYgKHRlcm0gJiYgdGVybS5hZGRpdGlvbmFsUHJvcGVydGllcyAmJiB0ZXJtLmFkZGl0aW9uYWxQcm9wZXJ0aWVzLm9yZ0lkKSB7XG4gICAgICBpZiAodGhpcy51c2VyQ291bnREYXRhICYmIHRoaXMudXNlckNvdW50RGF0YS5sZW5ndGggPiAwKSB7XG4gICAgICAgIGNvbnN0IHVzZXJDb3VudCA9IHRoaXMudXNlckNvdW50RGF0YS5maWx0ZXIoKHVzZXI6YW55KSA9PiB1c2VyLmlkID09PSB0ZXJtLmFkZGl0aW9uYWxQcm9wZXJ0aWVzLm9yZ0lkKVswXT8uY291bnQ7XG4gICAgICAgIHJldHVybiB1c2VyQ291bnQgfHwgMDtcbiAgICAgIH1cbiAgICB9IFxuICAgIHJldHVybiAwXG4gIH1cbn0iXX0=