raain-app 1.5.16 → 1.5.17

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/CHANGELOG.md CHANGED
@@ -7,17 +7,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
- ### Added
11
-
12
- - New features that will be in the upcoming release
13
-
14
- ### Changed
15
-
16
- - Changes in existing functionality
17
-
18
- ### Fixed
19
-
20
- - Bug fixes
10
+ ## [1.5.16] - 2025-05-27
21
11
 
22
12
  ### Dependencies
23
13
 
@@ -341,7 +341,7 @@ export class ProfileService {
341
341
  defaultKeyUrl: this.defaultUrlForAPI + '/rains/',
342
342
  });
343
343
  const counts = resp.data.counts.result;
344
- const radarMeasures = [], gaugeMeasures = [], computationsByTeam = [], computationsByR2R = [], computationsUnderProcessing = [], gaugeIntensity = [], qualities = [], qualitiesInProgress = [];
344
+ const percentImages = [], percentRainy = [], percentQ = [];
345
345
  counts.forEach(c => {
346
346
  const dateToShow = new Date(options.periodBegin);
347
347
  if (c.year)
@@ -355,24 +355,54 @@ export class ProfileService {
355
355
  if (c.minute)
356
356
  dateToShow.setUTCMinutes(c.minute);
357
357
  const label = dateToShow.toISOString();
358
- radarMeasures.push(new XYType(c.percentImages ?? 0, NaN, NaN, label));
359
- gaugeMeasures.push(new XYType(c.percentRainy ?? 0, NaN, NaN, label));
360
- computationsByTeam.push(new XYType(0, NaN, NaN, label));
361
- computationsByR2R.push(new XYType(0, NaN, NaN, label));
362
- computationsUnderProcessing.push(new XYType(0, NaN, NaN, label));
363
- gaugeIntensity.push(new XYType(0, NaN, NaN, label));
364
- qualities.push(new XYType(c.percentQ ?? 0, NaN, NaN, label));
365
- qualitiesInProgress.push(new XYType(0, NaN, NaN, label));
358
+ percentImages.push(new XYType(c.percentImages ?? 0, NaN, NaN, label));
359
+ percentRainy.push(new XYType(c.percentRainy ?? 0, NaN, NaN, label));
360
+ percentQ.push(new XYType(c.percentQ ?? 0, NaN, NaN, label));
366
361
  });
367
362
  return {
368
- radarMeasures,
369
- gaugeMeasures,
370
- computationsByTeam,
371
- computationsByR2R,
372
- computationsUnderProcessing,
373
- gaugeIntensity,
374
- qualities,
375
- qualitiesInProgress,
363
+ percentImages,
364
+ percentRainy,
365
+ percentQ,
366
+ queueRunning: resp.data.queueRunning
367
+ };
368
+ }
369
+ catch (e) {
370
+ await this.checkError(e);
371
+ }
372
+ return null;
373
+ }
374
+ async getCountsHour(rainId, options) {
375
+ try {
376
+ const args = `?range=hour&begin=${options.periodBegin.toISOString()}`;
377
+ const resp = await this.fidjService.sendOnEndpoint({
378
+ key: 'rains',
379
+ relativePath: rainId + '/counts' + args,
380
+ verb: 'GET',
381
+ defaultKeyUrl: this.defaultUrlForAPI + '/rains/',
382
+ });
383
+ const counts = resp.data.counts.result;
384
+ const percentImages = [], rainySum = [], rainyCount = [];
385
+ counts.forEach(c => {
386
+ const dateToShow = new Date(options.periodBegin);
387
+ if (c.year)
388
+ dateToShow.setUTCFullYear(c.year);
389
+ if (c.month)
390
+ dateToShow.setUTCMonth(c.month - 1);
391
+ if (c.day)
392
+ dateToShow.setUTCDate(c.day);
393
+ if (c.hour)
394
+ dateToShow.setUTCHours(c.hour);
395
+ if (c.minute)
396
+ dateToShow.setUTCMinutes(c.minute);
397
+ const label = dateToShow.toISOString();
398
+ percentImages.push(new XYType(c.percentImages ?? 0, NaN, NaN, label));
399
+ rainyCount.push(new XYType(c.rainyCount ?? 0, NaN, NaN, label));
400
+ rainySum.push(new XYType(c.rainySum ?? 0, NaN, NaN, label));
401
+ });
402
+ return {
403
+ percentImages,
404
+ rainyCount,
405
+ rainySum,
376
406
  queueRunning: resp.data.queueRunning
377
407
  };
378
408
  }
@@ -531,4 +561,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
531
561
  providedIn: 'root'
532
562
  }]
533
563
  }], ctorParameters: function () { return [{ type: i1.Storage }, { type: i2.FidjService }, { type: i3.HttpClient }, { type: i4.Router }]; } });
534
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZmlsZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2FwcC9zaGFyZWQvcHJvZmlsZS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFFekMsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUNyQyxPQUFPLEVBQ0wsU0FBUyxFQUNULFlBQVksRUFDWixTQUFTLEVBQ1QsU0FBUyxFQUNULGVBQWUsRUFDZixrQkFBa0IsRUFDbEIsc0JBQXNCLEVBQ3RCLFFBQVEsRUFDUixvQkFBb0IsRUFDcEIsUUFBUSxFQUNULE1BQU0sYUFBYSxDQUFDO0FBSXJCLE9BQU8sRUFBQyxXQUFXLEVBQWtCLE1BQU0sc0JBQXNCLENBQUM7QUFDbEUsT0FBTyxFQUE4QixlQUFlLEVBQUMsTUFBTSxjQUFjLENBQUM7QUFDMUUsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLFVBQVUsQ0FBQztBQUNoQyxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sU0FBUyxDQUFDOzs7Ozs7QUFNeEMsTUFBTSxPQUFPLGNBQWM7SUFXekIsWUFBc0IsT0FBZ0IsRUFDaEIsV0FBd0IsRUFDeEIsVUFBc0IsRUFDeEIsTUFBYztRQUhaLFlBQU8sR0FBUCxPQUFPLENBQVM7UUFDaEIsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFDeEIsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQUN4QixXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQ2hDLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLElBQUksSUFBSSxDQUFDO1FBQy9DLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLElBQUksSUFBSSxDQUFDO1FBQ3JELElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxl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LEVBQUUsQ0FBQztRQUN6QyxLQUFLLE1BQU0sWUFBWSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFO1lBQ2xELGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxZQUFZLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQztTQUNwRDtRQUNELE9BQU8sYUFBYSxDQUFDO0lBQ3ZCLENBQUM7SUFFRCxrQkFBa0I7SUFFUixRQUFRLENBQUMsS0FBb0I7UUFDckMsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7SUFDckIsQ0FBQzs7NEdBaGxCVSxjQUFjO2dIQUFkLGNBQWMsY0FGYixNQUFNOzRGQUVQLGNBQWM7a0JBSDFCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtJbmplY3RhYmxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7SHR0cENsaWVudH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHtCZWhhdmlvclN1YmplY3R9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtcbiAgRXZlbnROb2RlLFxuICBHYXVnZU1lYXN1cmUsXG4gIEdhdWdlTm9kZSxcbiAgUmFkYXJOb2RlLFxuICBSYWluQ29tcHV0YXRpb24sXG4gIFJhaW5Db21wdXRhdGlvbk1hcCxcbiAgUmFpbkNvbXB1dGF0aW9uUXVhbGl0eSxcbiAgUmFpbk5vZGUsXG4gIFNwZWVkTWF0cml4Q29udGFpbmVyLFxuICBUZWFtTm9kZVxufSBmcm9tICdyYWFpbi1tb2RlbCc7XG5cbmltcG9ydCB7U3RvcmFnZX0gZnJvbSAnLi9zdG9yYWdlLnNlcnZpY2UnO1xuXG5pbXBvcnQge0ZpZGpTdG9yYWdlLCBGaWRqU3RvcmFnZU5vZGV9IGZyb20gJy4vZmlkai1zdG9yYWdlLm1vZGVsJztcbmltcG9ydCB7RXJyb3JJbnRlcmZhY2UsIEZpZGpTZXJ2aWNlLCBMb2dnZXJMZXZlbEVudW19IGZyb20gJ2ZpZGotYW5ndWxhcic7XG5pbXBvcnQge1hZVHlwZX0gZnJvbSAnLi94eXR5cGUnO1xuaW1wb3J0IHtHYXVnZU5vZGVGaWx0ZXJ9IGZyb20gJy4vdG9vbHMnO1xuaW1wb3J0IHtSb3V0ZXJ9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIFByb2ZpbGVTZXJ2aWNlIHtcbiAgcHVibGljIHJlYWR5Rm9yU3luYzogQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+O1xuICBwdWJsaWMgYXNUZWFtSWQ6IHN0cmluZztcblxuICBwcm90ZWN0ZWQgZW1haWw6IHN0cmluZztcbiAgcHJvdGVjdGVkIGlzRGVtbzogYm9vbGVhbjtcbiAgcHJvdGVjdGVkIHJvbGVzOiBBcnJheTxzdHJpbmc+O1xuICBwcm90ZWN0ZWQgbm9kZURhdGE6IEZpZGpTdG9yYWdlTm9kZTtcbiAgcHJvdGVjdGVkIGZpZGpTdG9yYWdlOiBGaWRqU3RvcmFnZTtcbiAgcHJvdGVjdGVkIGhhdmVUcnlUb1JlY29ubmVjdDogYm9vbGVhbjtcblxuICBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgc3RvcmFnZTogU3RvcmFnZSxcbiAgICAgICAgICAgICAgcHJvdGVjdGVkIGZpZGpTZXJ2aWNlOiBGaWRqU2VydmljZSxcbiAgICAgICAgICAgICAgcHJvdGVjdGVkIGh0dHBDbGllbnQ6IEh0dHBDbGllbnQsXG4gICAgICAgICAgICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsKSB7XG4gICAgdGhpcy5lbWFpbCA9IHRoaXMuc3RvcmFnZS5nZXQoJ2VtYWlsJykgfHwgbnVsbDtcbiAgICB0aGlzLmFzVGVhbUlkID0gdGhpcy5zdG9yYWdlLmdldCgnYXNUZWFtSWQnKSB8fCBudWxsO1xuICAgIHRoaXMucmVhZHlGb3JTeW5jID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gICAgdGhpcy5yb2xlcyA9IFtdO1xuICAgIHRoaXMuZmlkalN0b3JhZ2UgPSBuZXcgRmlkalN0b3JhZ2Uoc3RvcmFnZSk7XG4gICAgdGhpcy5pc0RlbW9Nb2RlID0gZmFsc2U7XG4gIH1cblxuICBnZXQgaXNEZW1vTW9kZSgpIHtcbiAgICByZXR1cm4gdGhpcy5pc0RlbW87XG4gIH1cblxuICBzZXQgaXNEZW1vTW9kZShtb2RlKSB7XG4gICAgdGhpcy5pc0RlbW8gPSBtb2RlID8gbW9kZSA6IHRydWU7XG4gICAgdGhpcy5maWRqU3RvcmFnZS5zZXREZW1vTW9kZSh0aGlzLmlzRGVtbyk7XG4gIH1cblxuICBnZXQgZGVmYXVsdFVybEZvckFQSSgpIHtcbiAgICByZXR1cm4gdGhpcy5zdG9yYWdlLmdldCgnVXJsRm9yQVBJJyk7XG4gIH1cblxuICBzZXQgZGVmYXVsdFVybEZvckFQSSh1cmw6IHN0cmluZykge1xuICAgIHRoaXMuc3RvcmFnZS5zZXQoJ1VybEZvckFQSScsIHVybCk7XG4gIH1cblxuICBhc3luYyByZWZyZXNoUHJvZmlsZSgpOiBQcm9taXNlPEZpZGpTdG9yYWdlTm9kZT4ge1xuICAgIHRyeSB7XG4gICAgICB0aGlzLm5vZGVEYXRhID0gYXdhaXQgdGhpcy5maWRqU3RvcmFnZS5nZXRSZWZyZXNoZWROb2RlQ29weSh0aGlzLmZpZGpTZXJ2aWNlKTtcbiAgICAgIHRoaXMuc2V0Um9sZXMoYXdhaXQgdGhpcy5maWRqU2VydmljZS5nZXRSb2xlcygpKTtcbiAgICAgIHJldHVybiB0aGlzLm5vZGVEYXRhO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGF3YWl0IHRoaXMuY2hlY2tFcnJvcihlKTtcbiAgICB9XG4gIH1cblxuICBnZXRFbWFpbCgpIHtcbiAgICBsZXQgZW1haWwgPSB0aGlzLmVtYWlsO1xuICAgIGVtYWlsID0gZW1haWwgfHwgdGhpcy5zdG9yYWdlLmdldCgnZW1haWwnKTtcbiAgICByZXR1cm4gZW1haWw7XG4gIH1cblxuICBzZXRFbWFpbChlbWFpbDogc3RyaW5nKSB7XG4gICAgdGhpcy5lbWFpbCA9IGVtYWlsO1xuICAgIHRoaXMuc3RvcmFnZS5zZXQoJ2VtYWlsJywgdGhpcy5lbWFpbCk7XG4gIH1cblxuICBhc3luYyBsb2dvdXQoZmlkaktleTogc3RyaW5nLCBmaWRqUHJvZDogYm9vbGVhbikge1xuXG4gICAgdGhpcy5zdG9yYWdlLnJlbW92ZSgnZW1haWwnKTtcbiAgICBhd2FpdCB0aGlzLmZpZGpTZXJ2aWNlLmxvZ291dCh0cnVlKTtcblxuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLmZpZGpTZXJ2aWNlLmluaXQoZmlkaktleSxcbiAgICAgICAge1xuICAgICAgICAgIGxvZ0xldmVsOiBMb2dnZXJMZXZlbEVudW0uV0FSTiwgLy8gZmlkalByb2QgPyBMb2dnZXJMZXZlbEVudW0uV0FSTiA6IExvZ2dlckxldmVsRW51bS5JTkZPLFxuICAgICAgICAgIGNyeXB0bzogZmFsc2UsXG4gICAgICAgICAgcHJvZDogZmlkalByb2QsXG4gICAgICAgICAgdXNlREI6IGZhbHNlLFxuICAgICAgICB9KTtcbiAgICAgIHRoaXMucmVhZHlGb3JTeW5jLm5leHQodHJ1ZSk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdpbml0RmlkaiBjYXRjaCBwYjogJywgZXJyKTtcbiAgICB9XG5cbiAgfVxuXG4gIGFzeW5jIGNoZWNrRXJyb3IoZXJyb3I6IEVycm9ySW50ZXJmYWNlKSB7XG4gICAgaWYgKGVycm9yLmNvZGUgPT09IDQwMSkge1xuICAgICAgY29uc29sZS53YXJuKCdQYiBvbiBhdXRoJyk7XG4gICAgICBpZiAodGhpcy5yb3V0ZXIudXJsLmluZGV4T2YoJ2xvZ2luJykgPCAwKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgYXdhaXQgdGhpcy5maWRqU2VydmljZS5sb2dvdXQoKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmdvdG9Mb3V0KCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZ290b0xvdXQoKSB7XG4gICAgaWYgKHRoaXMucm91dGVyLnVybC5pbmRleE9mKCdsb2dpbicpID4gLTEpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgYXdhaXQgdGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCgnL2xvZ291dCcsIHtza2lwTG9jYXRpb25DaGFuZ2U6IHRydWV9KTtcbiAgfVxuXG4gIGFzeW5jIGdvdG9Mb2dpbigpIHtcbiAgICBpZiAodGhpcy5yb3V0ZXIudXJsLmluZGV4T2YoJ2xvZ2luJykgPiAtMSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAvLyBhd2FpdCB0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKCcvJywge3NraXBMb2NhdGlvbkNoYW5nZTogdHJ1ZX0pO1xuICAgIGF3YWl0IHRoaXMucm91dGVyLm5hdmlnYXRlKFsnL2xvZ2luJ10pO1xuICB9XG5cbiAgaXNMb2dnZWRJbigpIHtcbiAgICByZXR1cm4gdGhpcy5maWRqU2VydmljZS5pc0xvZ2dlZEluKCk7XG4gIH1cblxuICBhc3luYyBzdG9yZUFsbCgpIHtcbiAgICByZXR1cm4gdGhpcy5maWRqU3RvcmFnZS5zdG9yZURhdGEodGhpcy5maWRqU2VydmljZSwgdGhpcy5ub2RlRGF0YSk7XG4gIH1cblxuICBpc0FkbWluKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnJvbGVzLmluZGV4T2YoJ2FkbWluJykgPiAtMTtcbiAgfVxuXG4gIC8vID09PSBOb3RpZmljYXRpb25zID09PVxuXG4gIGFzeW5jIGNyZWF0ZU5vdGlmaWNhdGlvbihyYWluSWQ6IHN0cmluZywgbWVzc2FnZTogc3RyaW5nKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3AgPSBhd2FpdCB0aGlzLmZpZGpTZXJ2aWNlLnNlbmRPbkVuZHBvaW50KHtcbiAgICAgICAga2V5OiAnbm90aWZpY2F0aW9ucycsXG4gICAgICAgIHZlcmI6ICdQT1NUJyxcbiAgICAgICAgZGVmYXVsdEtleVVybDogdGhpcy5kZWZhdWx0VXJsRm9yQVBJICsgJy9ub3RpZmljYXRpb25zJyxcbiAgICAgICAgZGF0YToge1xuICAgICAgICAgIHJhaW46IHJhaW5JZCxcbiAgICAgICAgICBtZXNzYWdlLFxuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgICByZXR1cm4gbmV3IEV2ZW50Tm9kZShyZXNwLmRhdGEpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGF3YWl0IHRoaXMuY2hlY2tFcnJvcihlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGFzeW5jIGdldE5vdGlmaWNhdGlvbnMocmFpbklkOiBzdHJpbmcpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgYXJncyA9ICc/cmFpbj0nICsgcmFpbklkO1xuICAgICAgY29uc3QgcmVzcCA9IGF3YWl0IHRoaXMuZmlkalNlcnZpY2Uuc2VuZE9uRW5kcG9pbnQoe1xuICAgICAgICBrZXk6ICdub3RpZmljYXRpb25zJyxcbiAgICAgICAgdmVyYjogJ0dFVCcsXG4gICAgICAgIHJlbGF0aXZlUGF0aDogYXJncyxcbiAgICAgICAgZGVmYXVsdEtleVVybDogdGhpcy5kZWZhdWx0VXJsRm9yQVBJICsgJy9ub3RpZmljYXRpb25zJyxcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gcmVzcC5kYXRhLm5vdGlmaWNhdGlvbnMubWFwKG4gPT4gbmV3IEV2ZW50Tm9kZShuKSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgYXdhaXQgdGhpcy5jaGVja0Vycm9yKGUpO1xuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgYXN5bmMgZ2V0QWxsTm90aWZpY2F0aW9ucygpOiBQcm9taXNlPEV2ZW50Tm9kZVtdPiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3AgPSBhd2FpdCB0aGlzLmZpZGpTZXJ2aWNlLnNlbmRPbkVuZHBvaW50KHtcbiAgICAgICAga2V5OiAnbm90aWZpY2F0aW9ucycsXG4gICAgICAgIHZlcmI6ICdHRVQnLFxuICAgICAgICBkZWZhdWx0S2V5VXJsOiB0aGlzLmRlZmF1bHRVcmxGb3JBUEkgKyAnL25vdGlmaWNhdGlvbnMnLFxuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiByZXNwLmRhdGEubm90aWZpY2F0aW9ucy5tYXAobiA9PiBuZXcgRXZlbnROb2RlKG4pKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBhd2FpdCB0aGlzLmNoZWNrRXJyb3IoZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgLy8gPT09IFRlYW1zID09PVxuXG4gIGFzeW5jIGdldFRlYW1zKCk6IFByb21pc2U8QXJyYXk8VGVhbU5vZGU+PiB7XG4gICAgY29uc3QgdGVhbXMgPSBbXTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzcCA9IGF3YWl0IHRoaXMuZmlkalNlcnZpY2Uuc2VuZE9uRW5kcG9pbnQoe1xuICAgICAgICBrZXk6ICd0ZWFtc19hbGwnLFxuICAgICAgICB2ZXJiOiAnR0VUJyxcbiAgICAgICAgZGVmYXVsdEtleVVybDogdGhpcy5kZWZhdWx0VXJsRm9yQVBJICsgJy90ZWFtc19hbGwnXG4gICAgICB9KTtcbiAgICAgIGZvciAoY29uc3QgdGVhbSBvZiByZXNwLmRhdGEudGVhbXMpIHtcbiAgICAgICAgdGVhbXMucHVzaChuZXcgVGVhbU5vZGUodGVhbSkpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGF3YWl0IHRoaXMuY2hlY2tFcnJvcihlKTtcbiAgICB9XG4gICAgcmV0dXJuIHRlYW1zO1xuICB9XG5cbiAgYXN5bmMgZ2V0VGVhbSh0ZWFtSWQ6IHN0cmluZyk6IFByb21pc2U8VGVhbU5vZGU+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzcCA9IGF3YWl0IHRoaXMuZmlkalNlcnZpY2Uuc2VuZE9uRW5kcG9pbnQoe1xuICAgICAgICBrZXk6ICd0ZWFtcycsXG4gICAgICAgIHZlcmI6ICdHRVQnLFxuICAgICAgICByZWxhdGl2ZVBhdGg6IHRlYW1JZCxcbiAgICAgICAgZGVmYXVsdEtleVVybDogdGhpcy5kZWZhdWx0VXJsRm9yQVBJICsgJy90ZWFtcydcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIG5ldyBUZWFtTm9kZShyZXNwLmRhdGEpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGF3YWl0IHRoaXMuY2hlY2tFcnJvcihlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8vID09PSBSYWRhcnMgPT09XG5cbiAgYXN5bmMgZ2V0UmFkYXJzKHRlYW1JZDogc3RyaW5nKTogUHJvbWlzZTxBcnJheTxSYWRhck5vZGU+PiB7XG4gICAgY29uc3QgcmFkYXJzID0gW107XG4gICAgY29uc3QgdXJsID0gdGhpcy5kZWZhdWx0VXJsRm9yQVBJICsgJy9yYWRhcnMnICsgKHRlYW1JZCA/ICc/dGVhbUlkPScgKyB0ZWFtSWQgOiAnJyk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3AgPSBhd2FpdCB0aGlzLmZpZGpTZXJ2aWNlLnNlbmRPbkVuZHBvaW50KHtcbiAgICAgICAga2V5OiAncmFkYXJzJyxcbiAgICAgICAgdmVyYjogJ0dFVCcsXG4gICAgICAgIGRlZmF1bHRLZXlVcmw6IHVybCxcbiAgICAgIH0pO1xuICAgICAgZm9yIChjb25zdCByIG9mIHJlc3AuZGF0YS5yYWRhcnMpIHtcbiAgICAgICAgY29uc3QgcmFkYXIgPSBuZXcgUmFkYXJOb2RlKHIpO1xuICAgICAgICByYWRhcnMucHVzaChyYWRhcik7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgYXdhaXQgdGhpcy5jaGVja0Vycm9yKGUpO1xuICAgIH1cbiAgICByZXR1cm4gcmFkYXJzO1xuICB9XG5cbiAgYXN5bmMgZ2V0UmFkYXIoaWQ6IHN0cmluZyk6IFByb21pc2U8UmFkYXJOb2RlPiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3AgPSBhd2FpdCB0aGlzLmZpZGpTZXJ2aWNlLnNlbmRPbkVuZHBvaW50KHtcbiAgICAgICAga2V5OiAncmFkYXJzJyxcbiAgICAgICAgdmVyYjogJ0dFVCcsXG4gICAgICAgIHJlbGF0aXZlUGF0aDogaWQsXG4gICAgICAgIGRlZmF1bHRLZXlVcmw6IHRoaXMuZGVmYXVsdFVybEZvckFQSSArICcvcmFkYXJzJ1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gbmV3IFJhZGFyTm9kZShyZXNwLmRhdGEpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGF3YWl0IHRoaXMuY2hlY2tFcnJvcihlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGFzeW5jIHB1dFJhZGFyKHJhZGFyTm9kZTogUmFkYXJOb2RlKTogUHJvbWlzZTxSYWRhck5vZGU+IHtcbiAgICBjb25zdCBkYXRhID0ge1xuICAgICAgbmFtZTogcmFkYXJOb2RlLm5hbWUsXG4gICAgfTtcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXNwID0gYXdhaXQgdGhpcy5maWRqU2VydmljZS5zZW5kT25FbmRwb2ludCh7XG4gICAgICAgIGtleTogJ3JhZGFycycsXG4gICAgICAgIHJlbGF0aXZlUGF0aDogcmFkYXJOb2RlLmlkLFxuICAgICAgICB2ZXJiOiAnUFVUJyxcbiAgICAgICAgZGF0YSxcbiAgICAgICAgZGVmYXVsdEtleVVybDogdGhpcy5kZWZhdWx0VXJsRm9yQVBJICsgJy9yYWRhcnMvJ1xuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiBuZXcgUmFkYXJOb2RlKHJlc3AuZGF0YSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgYXdhaXQgdGhpcy5jaGVja0Vycm9yKGUpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGdldExvbmVseVJhZGFycyhyYWluczogUmFpbk5vZGVbXSk6IFByb21pc2U8UmFkYXJOb2RlW10+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzcCA9IGF3YWl0IHRoaXMuZmlkalNlcnZpY2Uuc2VuZE9uRW5kcG9pbnQoe1xuICAgICAgICBrZXk6ICdyYWRhcnMnLFxuICAgICAgICB2ZXJiOiAnR0VUJyxcbiAgICAgICAgZGVmYXVsdEtleVVybDogdGhpcy5kZWZhdWx0VXJsRm9yQVBJICsgJy9yYWRhcnMnXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGxvbmVseVJhZGFyczogUmFkYXJOb2RlW10gPSBbXTtcbiAgICAgIGNvbnN0IHJhZGFycyA9IHJlc3AuZGF0YS5yYWRhcnM7XG4gICAgICByYWRhcnMuZm9yRWFjaChyYWRhciA9PiB7XG4gICAgICAgIGxldCBmb3VuZCA9IGZhbHNlO1xuICAgICAgICByYWlucy5mb3JFYWNoKHJhaW4gPT4ge1xuICAgICAgICAgIGNvbnN0IHJkSWQgPSByYWluLmdldExpbmsoJ3JhZGFyJykuZ2V0SWQoKTtcbiAgICAgICAgICBpZiAocmRJZCA9PT0gcmFkYXIuaWQpIHtcbiAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoIWZvdW5kKSB7XG4gICAgICAgICAgbG9uZWx5UmFkYXJzLnB1c2gocmFkYXIpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBsb25lbHlSYWRhcnM7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgYXdhaXQgdGhpcy5jaGVja0Vycm9yKGUpO1xuICAgIH1cbiAgICByZXR1cm4gW107XG4gIH1cblxuICBhc3luYyBnZXRSYWluVGltZWZyYW1lKHJhaW5JZDogc3RyaW5nLCBiZWdpbjogRGF0ZSwgZW5kOiBEYXRlLCBmb3JjZWQgPSBmYWxzZSk6IFByb21pc2U8UmFpbk5vZGU+IHtcbiAgICB0cnkge1xuICAgICAgbGV0IHF1ZXJ5UGF0aCA9ICcnICsgcmFpbklkICsgJz9mb3JtYXQ9dGltZWZyYW1lJztcbiAgICAgIGlmIChiZWdpbikge1xuICAgICAgICBxdWVyeVBhdGggKz0gJyZiZWdpbj0nICsgYmVnaW4udG9JU09TdHJpbmcoKTtcbiAgICAgIH1cbiAgICAgIGlmIChlbmQpIHtcbiAgICAgICAgcXVlcnlQYXRoICs9ICcmZW5kPScgKyBlbmQudG9JU09TdHJpbmcoKTtcbiAgICAgIH1cbiAgICAgIGlmIChmb3JjZWQpIHtcbiAgICAgICAgcXVlcnlQYXRoICs9ICcmZm9yY2VkPXRydWUnO1xuICAgICAgfVxuICAgICAgY29uc3QgcmVzcCA9IGF3YWl0IHRoaXMuZmlkalNlcnZpY2Uuc2VuZE9uRW5kcG9pbnQoe1xuICAgICAgICBrZXk6ICdyYWlucycsXG4gICAgICAgIHZlcmI6ICdHRVQnLFxuICAgICAgICByZWxhdGl2ZVBhdGg6IHF1ZXJ5UGF0aCxcbiAgICAgICAgZGVmYXVsdEtleVVybDogdGhpcy5kZWZhdWx0VXJsRm9yQVBJICsgJy9yYWlucydcbiAgICAgIH0pO1xuICAgICAgY29uc3QgcmFpbk5vZGUgPSBuZXcgUmFpbk5vZGUocmVzcC5kYXRhLnRpbWVmcmFtZSk7XG4gICAgICByYWluTm9kZS5uYW1lICs9ICcucmFkYXIudGltZWZyYW1lJztcbiAgICAgIHJldHVybiByYWluTm9kZTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBhd2FpdCB0aGlzLmNoZWNrRXJyb3IoZSk7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgLy8gPT09IFJhaW5zID09PVxuXG4gIGFzeW5jIGdldFJhaW5zKHRlYW1JZDogc3RyaW5nKTogUHJvbWlzZTxBcnJheTxSYWluTm9kZT4+IHtcbiAgICBjb25zdCByYWlucyA9IFtdO1xuICAgIGNvbnN0IHVybCA9IHRoaXMuZGVmYXVsdFVybEZvckFQSSArICcvcmFpbnMnICsgKHRlYW1JZCA/ICc/dGVhbUlkPScgKyB0ZWFtSWQgOiAnJyk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3AgPSBhd2FpdCB0aGlzLmZpZGpTZXJ2aWNlLnNlbmRPbkVuZHBvaW50KHtcbiAgICAgICAga2V5OiAncmFpbnMnLFxuICAgICAgICB2ZXJiOiAnR0VUJyxcbiAgICAgICAgZGVmYXVsdEtleVVybDogdXJsLFxuICAgICAgfSk7XG4gICAgICBmb3IgKGNvbnN0IHJhaW4gb2YgcmVzcC5kYXRhLnJhaW5zKSB7XG4gICAgICAgIHJhaW5zLnB1c2gobmV3IFJhaW5Ob2RlKHJhaW4pKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBhd2FpdCB0aGlzLmNoZWNrRXJyb3IoZSk7XG4gICAgfVxuICAgIHJldHVybiByYWlucztcbiAgfVxuXG4gIGFzeW5jIGdldFJhaW4oaWQ6IHN0cmluZyk6IFByb21pc2U8UmFpbk5vZGU+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzcCA9IGF3YWl0IHRoaXMuZmlkalNlcnZpY2Uuc2VuZE9uRW5kcG9pbnQoe1xuICAgICAgICBrZXk6ICdyYWlucycsXG4gICAgICAgIHJlbGF0aXZlUGF0aDogaWQsXG4gICAgICAgIHZlcmI6ICdHRVQnLFxuICAgICAgICBkZWZhdWx0S2V5VXJsOiB0aGlzLmRlZmF1bHRVcmxGb3JBUEkgKyAnL3JhaW5zLydcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIG5ldyBSYWluTm9kZShyZXNwLmRhdGEpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGF3YWl0IHRoaXMuY2hlY2tFcnJvcihlKTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICAvLyA9PT0gQ291bnRcblxuICBhc3luYyBnZXRDb3VudHMocmFpbklkOiBzdHJpbmcsIG9wdGlvbnM6IHtcbiAgICByYW5nZTogJ2hvdXInIHwgJ2RheScgfCAnbW9udGgnIHwgJ3llYXInLFxuICAgIHBlcmlvZEJlZ2luOiBEYXRlXG4gIH0pOiBQcm9taXNlPHtcbiAgICByYWRhck1lYXN1cmVzOiBYWVR5cGVbXSxcbiAgICBnYXVnZU1lYXN1cmVzOiBYWVR5cGVbXSxcbiAgICBjb21wdXRhdGlvbnNCeVRlYW06IFhZVHlwZVtdLFxuICAgIGNvbXB1dGF0aW9uc0J5UjJSOiBYWVR5cGVbXSxcbiAgICBjb21wdXRhdGlvbnNVbmRlclByb2Nlc3Npbmc6IFhZVHlwZVtdLFxuICAgIGdhdWdlSW50ZW5zaXR5OiBYWVR5cGVbXSxcbiAgICBxdWFsaXRpZXM6IFhZVHlwZVtdLFxuICAgIHF1YWxpdGllc0luUHJvZ3Jlc3M6IFhZVHlwZVtdLFxuICAgIHF1ZXVlUnVubmluZzogbnVtYmVyLFxuICB9PiB7XG4gICAgdHJ5IHtcblxuICAgICAgY29uc3QgYXJncyA9IGA/cmFuZ2U9JHtvcHRpb25zLnJhbmdlfSZiZWdpbj0ke29wdGlvbnMucGVyaW9kQmVnaW4udG9JU09TdHJpbmcoKX1gO1xuXG4gICAgICBjb25zdCByZXNwID0gYXdhaXQgdGhpcy5maWRqU2VydmljZS5zZW5kT25FbmRwb2ludCh7XG4gICAgICAgIGtleTogJ3JhaW5zJyxcbiAgICAgICAgcmVsYXRpdmVQYXRoOiByYWluSWQgKyAnL2NvdW50cycgKyBhcmdzLFxuICAgICAgICB2ZXJiOiAnR0VUJyxcbiAgICAgICAgZGVmYXVsdEtleVVybDogdGhpcy5kZWZhdWx0VXJsRm9yQVBJICsgJy9yYWlucy8nLFxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IGNvdW50cyA9IHJlc3AuZGF0YS5jb3VudHMucmVzdWx0O1xuICAgICAgY29uc3QgcmFkYXJNZWFzdXJlczogWFlUeXBlW10gPSBbXSxcbiAgICAgICAgZ2F1Z2VNZWFzdXJlczogWFlUeXBlW10gPSBbXSxcbiAgICAgICAgY29tcHV0YXRpb25zQnlUZWFtOiBYWVR5cGVbXSA9IFtdLFxuICAgICAgICBjb21wdXRhdGlvbnNCeVIyUjogWFlUeXBlW10gPSBbXSxcbiAgICAgICAgY29tcHV0YXRpb25zVW5kZXJQcm9jZXNzaW5nOiBYWVR5cGVbXSA9IFtdLFxuICAgICAgICBnYXVnZUludGVuc2l0eTogWFlUeXBlW10gPSBbXSxcbiAgICAgICAgcXVhbGl0aWVzOiBYWVR5cGVbXSA9IFtdLFxuICAgICAgICBxdWFsaXRpZXNJblByb2dyZXNzOiBYWVR5cGVbXSA9IFtdO1xuXG4gICAgICBjb3VudHMuZm9yRWFjaChjID0+IHtcbiAgICAgICAgY29uc3QgZGF0ZVRvU2hvdyA9IG5ldyBEYXRlKG9wdGlvbnMucGVyaW9kQmVnaW4pO1xuICAgICAgICBpZiAoYy55ZWFyKSBkYXRlVG9TaG93LnNldFVUQ0Z1bGxZZWFyKGMueWVhcik7XG4gICAgICAgIGlmIChjLm1vbnRoKSBkYXRlVG9TaG93LnNldFVUQ01vbnRoKGMubW9udGggLSAxKTtcbiAgICAgICAgaWYgKGMuZGF5KSBkYXRlVG9TaG93LnNldFVUQ0RhdGUoYy5kYXkpO1xuICAgICAgICBpZiAoYy5ob3VyKSBkYXRlVG9TaG93LnNldFVUQ0hvdXJzKGMuaG91cik7XG4gICAgICAgIGlmIChjLm1pbnV0ZSkgZGF0ZVRvU2hvdy5zZXRVVENNaW51dGVzKGMubWludXRlKTtcblxuICAgICAgICBjb25zdCBsYWJlbCA9IGRhdGVUb1Nob3cudG9JU09TdHJpbmcoKTtcbiAgICAgICAgcmFkYXJNZWFzdXJlcy5wdXNoKG5ldyBYWVR5cGUoYy5wZXJjZW50SW1hZ2VzID8/IDAsIE5hTiwgTmFOLCBsYWJlbCkpO1xuICAgICAgICBnYXVnZU1lYXN1cmVzLnB1c2gobmV3IFhZVHlwZShjLnBlcmNlbnRSYWlueSA/PyAwLCBOYU4sIE5hTiwgbGFiZWwpKTtcbiAgICAgICAgY29tcHV0YXRpb25zQnlUZWFtLnB1c2gobmV3IFhZVHlwZSgwLCBOYU4sIE5hTiwgbGFiZWwpKTtcbiAgICAgICAgY29tcHV0YXRpb25zQnlSMlIucHVzaChuZXcgWFlUeXBlKDAsIE5hTiwgTmFOLCBsYWJlbCkpO1xuICAgICAgICBjb21wdXRhdGlvbnNVbmRlclByb2Nlc3NpbmcucHVzaChuZXcgWFlUeXBlKDAsIE5hTiwgTmFOLCBsYWJlbCkpO1xuICAgICAgICBnYXVnZUludGVuc2l0eS5wdXNoKG5ldyBYWVR5cGUoMCwgTmFOLCBOYU4sIGxhYmVsKSk7XG4gICAgICAgIHF1YWxpdGllcy5wdXNoKG5ldyBYWVR5cGUoYy5wZXJjZW50USA/PyAwLCBOYU4sIE5hTiwgbGFiZWwpKTtcbiAgICAgICAgcXVhbGl0aWVzSW5Qcm9ncmVzcy5wdXNoKG5ldyBYWVR5cGUoMCwgTmFOLCBOYU4sIGxhYmVsKSk7XG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgcmFkYXJNZWFzdXJlcyxcbiAgICAgICAgZ2F1Z2VNZWFzdXJlcyxcbiAgICAgICAgY29tcHV0YXRpb25zQnlUZWFtLFxuICAgICAgICBjb21wdXRhdGlvbnNCeVIyUixcbiAgICAgICAgY29tcHV0YXRpb25zVW5kZXJQcm9jZXNzaW5nLFxuICAgICAgICBnYXVnZUludGVuc2l0eSxcbiAgICAgICAgcXVhbGl0aWVzLFxuICAgICAgICBxdWFsaXRpZXNJblByb2dyZXNzLFxuICAgICAgICBxdWV1ZVJ1bm5pbmc6IHJlc3AuZGF0YS5xdWV1ZVJ1bm5pbmdcbiAgICAgIH07XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgYXdhaXQgdGhpcy5jaGVja0Vycm9yKGUpO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8vID09PSBDb21wdXRpbmcgPT09XG5cbiAgYXN5bmMgbGF1bmNoUmFpbkNvbXB1dGF0aW9uKHJhaW5JZDogc3RyaW5nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0ZTogRGF0ZSk6IFByb21pc2U8UmFpbkNvbXB1dGF0aW9uW10+IHtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuZmlkalNlcnZpY2Uuc2VuZE9uRW5kcG9pbnQoe1xuICAgICAgdmVyYjogJ1BPU1QnLFxuICAgICAga2V5OiAncmFpbnMnLFxuICAgICAgcmVsYXRpdmVQYXRoOiAnJyArIHJhaW5JZCArICcvY29tcHV0YXRpb25zJyxcbiAgICAgIGRhdGE6IHtcbiAgICAgICAgZGF0ZTogZGF0ZS50b0lTT1N0cmluZygpLFxuICAgICAgfSxcbiAgICAgIGRlZmF1bHRLZXlVcmw6IHRoaXMuZGVmYXVsdFVybEZvckFQSSArICcvcmFpbnMnXG4gICAgfSk7XG5cbiAgICByZXR1cm4gcmVzcG9uc2UuZGF0YS5jb21wdXRhdGlvbnM/Lm1hcChjID0+IG5ldyBSYWluQ29tcHV0YXRpb24oYykpO1xuICB9XG5cbiAgYXN5bmMgZ2V0UmFpbkNvbXB1dGF0aW9uQ2FydGVzaWFuTWFwQnlJZChyYWluSWQ6IHN0cmluZywgcmFpbkNvbXB1dGF0aW9uSWQ6IHN0cmluZyk6IFByb21pc2U8UmFpbkNvbXB1dGF0aW9uTWFwPiB7XG4gICAgY29uc3QgcXVlcnlQYXRoID0gJycgKyByYWluSWQgKyAnL2NvbXB1dGF0aW9ucy8nICsgcmFpbkNvbXB1dGF0aW9uSWQgKyAnP2Zvcm1hdD1jYXJ0ZXNpYW4tbWFwJztcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuZmlkalNlcnZpY2Uuc2VuZE9uRW5kcG9pbnQoe1xuICAgICAga2V5OiAncmFpbnMnLFxuICAgICAgdmVyYjogJ0dFVCcsXG4gICAgICByZWxhdGl2ZVBhdGg6IHF1ZXJ5UGF0aCxcbiAgICAgIGRlZmF1bHRLZXlVcmw6IHRoaXMuZGVmYXVsdFVybEZvckFQSSArICcvcmFpbnMnXG4gICAgfSk7XG4gICAgaWYgKCFyZXNwb25zZS5kYXRhWydjYXJ0ZXNpYW4tbWFwJ10pIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IHJhaW5Db21wdXRhdGlvbk1hcCA9IG5ldyBSYWluQ29tcHV0YXRpb25NYXAocmVzcG9uc2UuZGF0YVsnY2FydGVzaWFuLW1hcCddKTtcbiAgICByYWluQ29tcHV0YXRpb25NYXAubmFtZSA9IHJhaW5JZCArICcucmFpbi5jYXJ0ZXNpYW4tbWFwJztcbiAgICByZXR1cm4gcmFpbkNvbXB1dGF0aW9uTWFwO1xuICB9XG5cbiAgYXN5bmMgZ2V0UmFpbkNvbXB1dGF0aW9uQ3VtdWxhdGl2ZU1hcEJ5SWQocmFpbklkOiBzdHJpbmcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhaW5Db21wdXRhdGlvbklkOiBzdHJpbmcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1bXVsYXRpdmVIb3VyczogbnVtYmVyKTogUHJvbWlzZTxSYWluQ29tcHV0YXRpb25NYXA+IHtcbiAgICBjb25zdCBxdWVyeVBhdGggPSAnJyArIHJhaW5JZCArICcvY29tcHV0YXRpb25zLycgKyByYWluQ29tcHV0YXRpb25JZCArICcvY3VtdWxhdGl2ZS8nICsgY3VtdWxhdGl2ZUhvdXJzO1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5maWRqU2VydmljZS5zZW5kT25FbmRwb2ludCh7XG4gICAgICBrZXk6ICdyYWlucycsXG4gICAgICB2ZXJiOiAnR0VUJyxcbiAgICAgIHJlbGF0aXZlUGF0aDogcXVlcnlQYXRoLFxuICAgICAgZGVmYXVsdEtleVVybDogdGhpcy5kZWZhdWx0VXJsRm9yQVBJICsgJy9yYWlucydcbiAgICB9KTtcbiAgICBpZiAoIXJlc3BvbnNlLmRhdGFbJ2N1bXVsYXRpdmUnXSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY29uc3QgcmFpbkNvbXB1dGF0aW9uTWFwID0gbmV3IFJhaW5Db21wdXRhdGlvbk1hcChyZXNwb25zZS5kYXRhWydjdW11bGF0aXZlJ10pO1xuICAgIHJhaW5Db21wdXRhdGlvbk1hcC5uYW1lID0gcmFpbklkICsgJy5yYWluLmN1bXVsYXRpdmUnO1xuICAgIHJldHVybiByYWluQ29tcHV0YXRpb25NYXA7XG4gIH1cblxuICBhc3luYyBnZXRSYWluQ29tcGFyZXMocmFpbklkOiBzdHJpbmcsIHJhaW5Db21wdXRhdGlvbklkOiBzdHJpbmcpOiBQcm9taXNlPHsgaWQ6IHN0cmluZywgdmVyc2lvbjogc3RyaW5nIH1bXT4ge1xuICAgIGNvbnN0IHF1ZXJ5UGF0aCA9ICcnICsgcmFpbklkICsgJy9jb21wdXRhdGlvbnMvJyArIHJhaW5Db21wdXRhdGlvbklkO1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5maWRqU2VydmljZS5zZW5kT25FbmRwb2ludCh7XG4gICAgICBrZXk6ICdyYWlucycsXG4gICAgICB2ZXJiOiAnR0VUJyxcbiAgICAgIHJlbGF0aXZlUGF0aDogcXVlcnlQYXRoLFxuICAgICAgZGVmYXVsdEtleVVybDogdGhpcy5kZWZhdWx0VXJsRm9yQVBJICsgJy9yYWlucycsXG4gICAgICAvLyB0aW1lb3V0OiAyMDAwMDAsXG4gICAgfSk7XG5cbiAgICBjb25zdCByYWluQ29tcHV0YXRpb24gPSBuZXcgUmFpbkNvbXB1dGF0aW9uKHJlc3BvbnNlLmRhdGEpO1xuICAgIGNvbnN0IGxpbmtzID0gcmFpbkNvbXB1dGF0aW9uLmdldExpbmtzKCk7XG4gICAgY29uc3QgcmFpbkNvbXB1dGF0aW9uUXVhbGl0aWVzID0gW107XG4gICAgZm9yIChjb25zdCBsaW5rIG9mIGxpbmtzKSB7XG4gICAgICBpZiAobGluay5yZWwgPT09ICdyYWluLWNvbXB1dGF0aW9uLXF1YWxpdHknKSB7XG4gICAgICAgIGNvbnN0IGlkID0gbGluay5nZXRJZCgpO1xuICAgICAgICBjb25zdCB2ZXJzaW9uID0gbGluay5ocmVmLnN1YnN0cmluZyhsaW5rLmhyZWYuaW5kZXhPZigndmVyc2lvbi8nKSArIDgsIGxpbmsuaHJlZi5pbmRleE9mKCcvJyArIGlkKSk7XG4gICAgICAgIHJhaW5Db21wdXRhdGlvblF1YWxpdGllcy5wdXNoKHtpZCwgdmVyc2lvbn0pO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmFpbkNvbXB1dGF0aW9uUXVhbGl0aWVzO1xuICB9XG5cbiAgYXN5bmMgZ2V0UmFpbkNvbXBhcmVCeUlkKHJhaW5JZDogc3RyaW5nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFpbkNvbXB1dGF0aW9uSWQ6IHN0cmluZyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhaW5Db21wdXRhdGlvblF1YWxpdHlJZDogc3RyaW5nKTogUHJvbWlzZTxSYWluQ29tcHV0YXRpb25RdWFsaXR5PiB7XG4gICAgY29uc3QgcXVlcnlQYXRoID0gJycgKyByYWluSWQgKyAnL2NvbXB1dGF0aW9ucy8nICsgcmFpbkNvbXB1dGF0aW9uSWQgKyAnL2NvbXBhcmVzLycgKyByYWluQ29tcHV0YXRpb25RdWFsaXR5SWQ7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmZpZGpTZXJ2aWNlLnNlbmRPbkVuZHBvaW50KHtcbiAgICAgIGtleTogJ3JhaW5zJyxcbiAgICAgIHZlcmI6ICdHRVQnLFxuICAgICAgcmVsYXRpdmVQYXRoOiBxdWVyeVBhdGgsXG4gICAgICBkZWZhdWx0S2V5VXJsOiB0aGlzLmRlZmF1bHRVcmxGb3JBUEkgKyAnL3JhaW5zJyxcbiAgICB9KTtcblxuICAgIGNvbnN0IHJhaW5Db21wdXRhdGlvblF1YWxpdHkgPSBuZXcgUmFpbkNvbXB1dGF0aW9uUXVhbGl0eShyZXNwb25zZS5kYXRhKTtcbiAgICByYWluQ29tcHV0YXRpb25RdWFsaXR5LnF1YWxpdHlTcGVlZE1hdHJpeENvbnRhaW5lciA9IFNwZWVkTWF0cml4Q29udGFpbmVyXG4gICAgICAuQ3JlYXRlRnJvbUpzb24ocmFpbkNvbXB1dGF0aW9uUXVhbGl0eS5xdWFsaXR5U3BlZWRNYXRyaXhDb250YWluZXIpO1xuICAgIHJldHVybiByYWluQ29tcHV0YXRpb25RdWFsaXR5O1xuICB9XG5cbiAgLy8gPT09IEdhdWdlcyA9PT1cblxuICBhc3luYyBnZXRHYXVnZShnYXVnZUlkOiBzdHJpbmcpOiBQcm9taXNlPEdhdWdlTm9kZT4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXNwID0gYXdhaXQgdGhpcy5maWRqU2VydmljZS5zZW5kT25FbmRwb2ludCh7XG4gICAgICAgIGtleTogJ2dhdWdlcycsXG4gICAgICAgIHZlcmI6ICdHRVQnLFxuICAgICAgICByZWxhdGl2ZVBhdGg6IGdhdWdlSWQsXG4gICAgICAgIGRlZmF1bHRLZXlVcmw6IHRoaXMuZGVmYXVsdFVybEZvckFQSSArICcvZ2F1Z2VzJ1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gbmV3IEdhdWdlTm9kZShyZXNwLmRhdGEpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGF3YWl0IHRoaXMuY2hlY2tFcnJvcihlKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBnZXRHYXVnZXMocmFpbklkPzogc3RyaW5nKTogUHJvbWlzZTxBcnJheTxHYXVnZU5vZGVGaWx0ZXI+PiB7XG4gICAgbGV0IHF1ZXJ5UGF0aCA9ICcnO1xuICAgIGlmICh0aGlzLmFzVGVhbUlkKSB7XG4gICAgICBxdWVyeVBhdGggKz0gJz90ZWFtSWQ9JyArIHRoaXMuYXNUZWFtSWQ7XG4gICAgfVxuICAgIGlmIChyYWluSWQpIHtcbiAgICAgIGlmIChxdWVyeVBhdGgpIHtcbiAgICAgICAgcXVlcnlQYXRoICs9ICcmJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHF1ZXJ5UGF0aCArPSAnPyc7XG4gICAgICB9XG4gICAgICBxdWVyeVBhdGggKz0gJ3JhaW5JZD0nICsgcmFpbklkO1xuICAgIH1cblxuICAgIGNvbnN0IGdhdWdlcyA9IFtdO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXNwID0gYXdhaXQgdGhpcy5maWRqU2VydmljZS5zZW5kT25FbmRwb2ludCh7XG4gICAgICAgIGtleTogJ2dhdWdlcycsXG4gICAgICAgIHZlcmI6ICdHRVQnLFxuICAgICAgICByZWxhdGl2ZVBhdGg6IHF1ZXJ5UGF0aCxcbiAgICAgICAgZGVmYXVsdEtleVVybDogdGhpcy5kZWZhdWx0VXJsRm9yQVBJICsgJy9nYXVnZXMnXG4gICAgICB9KTtcblxuICAgICAgZm9yIChjb25zdCBnYXVnZSBvZiByZXNwLmRhdGEuZ2F1Z2VzKSB7XG4gICAgICAgIGdhdWdlcy5wdXNoKG5ldyBHYXVnZU5vZGVGaWx0ZXIoZ2F1Z2UpKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBhd2FpdCB0aGlzLmNoZWNrRXJyb3IoZSk7XG4gICAgfVxuICAgIHJldHVybiBnYXVnZXM7XG4gIH1cblxuICBhc3luYyBnZXRHYXVnZU1lYXN1cmVzKGdhdWdlSWQ6IHN0cmluZywgYmVnaW46IERhdGUsIGVuZDogRGF0ZSk6IFByb21pc2U8R2F1Z2VNZWFzdXJlW10+IHtcbiAgICBjb25zdCBxdWVyeVBhdGggPSAnJyArIGdhdWdlSWQgKyAnL21lYXN1cmVzP2JlZ2luPScgKyBiZWdpbi50b0lTT1N0cmluZygpICsgJyZlbmQ9JyArIGVuZC50b0lTT1N0cmluZygpO1xuICAgIGNvbnN0IHJlc3AgPSBhd2FpdCB0aGlzLmZpZGpTZXJ2aWNlLnNlbmRPbkVuZHBvaW50KHtcbiAgICAgIGtleTogJ2dhdWdlcycsXG4gICAgICB2ZXJiOiAnR0VUJyxcbiAgICAgIHJlbGF0aXZlUGF0aDogcXVlcnlQYXRoLFxuICAgICAgZGVmYXVsdEtleVVybDogdGhpcy5kZWZhdWx0VXJsRm9yQVBJICsgJy9nYXVnZXMnXG4gICAgfSk7XG5cbiAgICBjb25zdCBnYXVnZU1lYXN1cmVzOiBHYXVnZU1lYXN1cmVbXSA9IFtdO1xuICAgIGZvciAoY29uc3QgZ2F1Z2VNZWFzdXJlIG9mIHJlc3AuZGF0YS5nYXVnZU1lYXN1cmVzKSB7XG4gICAgICBnYXVnZU1lYXN1cmVzLnB1c2gobmV3IEdhdWdlTWVhc3VyZShnYXVnZU1lYXN1cmUpKTtcbiAgICB9XG4gICAgcmV0dXJuIGdhdWdlTWVhc3VyZXM7XG4gIH1cblxuICAvLyA9PT0gUHJpdmF0ZSA9PT1cblxuICBwcm90ZWN0ZWQgc2V0Um9sZXMocm9sZXM6IEFycmF5PHN0cmluZz4pOiB2b2lkIHtcbiAgICB0aGlzLnJvbGVzID0gcm9sZXM7XG4gIH1cblxufVxuIl19
564
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZmlsZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2FwcC9zaGFyZWQvcHJvZmlsZS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFFekMsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUNyQyxPQUFPLEVBQ0wsU0FBUyxFQUNULFlBQVksRUFDWixTQUFTLEVBQ1QsU0FBUyxFQUNULGVBQWUsRUFDZixrQkFBa0IsRUFDbEIsc0JBQXNCLEVBQ3RCLFFBQVEsRUFDUixvQkFBb0IsRUFDcEIsUUFBUSxFQUNULE1BQU0sYUFBYSxDQUFDO0FBSXJCLE9BQU8sRUFBQyxXQUFXLEVBQWtCLE1BQU0sc0JBQXNCLENBQUM7QUFDbEUsT0FBTyxFQUE4QixlQUFlLEVBQUMsTUFBTSxjQUFjLENBQUM7QUFDMUUsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLFVBQVUsQ0FBQztBQUNoQyxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sU0FBUyxDQUFDOzs7Ozs7QUFNeEMsTUFBTSxPQUFPLGNBQWM7SUFXekIsWUFBc0IsT0FBZ0IsRUFDaEIsV0FBd0IsRUFDeEIsVUFBc0IsRUFDeEIsTUFBYztRQUhaLFlBQU8sR0FBUCxPQUFPLENBQVM7UUFDaEIsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFDeEIsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQUN4QixXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQ2hDLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLElBQUksSUFBSSxDQUFDO1FBQy9DLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLElBQUksSUFBSSxDQUFDO1FBQ3JELElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxl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TSxhQUFhLEdBQW1CLEVBQUUsQ0FBQztRQUN6QyxLQUFLLE1BQU0sWUFBWSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFO1lBQ2xELGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxZQUFZLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQztTQUNwRDtRQUNELE9BQU8sYUFBYSxDQUFDO0lBQ3ZCLENBQUM7SUFFRCxrQkFBa0I7SUFFUixRQUFRLENBQUMsS0FBb0I7UUFDckMsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7SUFDckIsQ0FBQzs7NEdBNW1CVSxjQUFjO2dIQUFkLGNBQWMsY0FGYixNQUFNOzRGQUVQLGNBQWM7a0JBSDFCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtJbmplY3RhYmxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7SHR0cENsaWVudH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHtCZWhhdmlvclN1YmplY3R9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtcbiAgRXZlbnROb2RlLFxuICBHYXVnZU1lYXN1cmUsXG4gIEdhdWdlTm9kZSxcbiAgUmFkYXJOb2RlLFxuICBSYWluQ29tcHV0YXRpb24sXG4gIFJhaW5Db21wdXRhdGlvbk1hcCxcbiAgUmFpbkNvbXB1dGF0aW9uUXVhbGl0eSxcbiAgUmFpbk5vZGUsXG4gIFNwZWVkTWF0cml4Q29udGFpbmVyLFxuICBUZWFtTm9kZVxufSBmcm9tICdyYWFpbi1tb2RlbCc7XG5cbmltcG9ydCB7U3RvcmFnZX0gZnJvbSAnLi9zdG9yYWdlLnNlcnZpY2UnO1xuXG5pbXBvcnQge0ZpZGpTdG9yYWdlLCBGaWRqU3RvcmFnZU5vZGV9IGZyb20gJy4vZmlkai1zdG9yYWdlLm1vZGVsJztcbmltcG9ydCB7RXJyb3JJbnRlcmZhY2UsIEZpZGpTZXJ2aWNlLCBMb2dnZXJMZXZlbEVudW19IGZyb20gJ2ZpZGotYW5ndWxhcic7XG5pbXBvcnQge1hZVHlwZX0gZnJvbSAnLi94eXR5cGUnO1xuaW1wb3J0IHtHYXVnZU5vZGVGaWx0ZXJ9IGZyb20gJy4vdG9vbHMnO1xuaW1wb3J0IHtSb3V0ZXJ9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIFByb2ZpbGVTZXJ2aWNlIHtcbiAgcHVibGljIHJlYWR5Rm9yU3luYzogQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+O1xuICBwdWJsaWMgYXNUZWFtSWQ6IHN0cmluZztcblxuICBwcm90ZWN0ZWQgZW1haWw6IHN0cmluZztcbiAgcHJvdGVjdGVkIGlzRGVtbzogYm9vbGVhbjtcbiAgcHJvdGVjdGVkIHJvbGVzOiBBcnJheTxzdHJpbmc+O1xuICBwcm90ZWN0ZWQgbm9kZURhdGE6IEZpZGpTdG9yYWdlTm9kZTtcbiAgcHJvdGVjdGVkIGZpZGpTdG9yYWdlOiBGaWRqU3RvcmFnZTtcbiAgcHJvdGVjdGVkIGhhdmVUcnlUb1JlY29ubmVjdDogYm9vbGVhbjtcblxuICBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgc3RvcmFnZTogU3RvcmFnZSxcbiAgICAgICAgICAgICAgcHJvdGVjdGVkIGZpZGpTZXJ2aWNlOiBGaWRqU2VydmljZSxcbiAgICAgICAgICAgICAgcHJvdGVjdGVkIGh0dHBDbGllbnQ6IEh0dHBDbGllbnQsXG4gICAgICAgICAgICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsKSB7XG4gICAgdGhpcy5lbWFpbCA9IHRoaXMuc3RvcmFnZS5nZXQoJ2VtYWlsJykgfHwgbnVsbDtcbiAgICB0aGlzLmFzVGVhbUlkID0gdGhpcy5zdG9yYWdlLmdldCgnYXNUZWFtSWQnKSB8fCBudWxsO1xuICAgIHRoaXMucmVhZHlGb3JTeW5jID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gICAgdGhpcy5yb2xlcyA9IFtdO1xuICAgIHRoaXMuZmlkalN0b3JhZ2UgPSBuZXcgRmlkalN0b3JhZ2Uoc3RvcmFnZSk7XG4gICAgdGhpcy5pc0RlbW9Nb2RlID0gZmFsc2U7XG4gIH1cblxuICBnZXQgaXNEZW1vTW9kZSgpIHtcbiAgICByZXR1cm4gdGhpcy5pc0RlbW87XG4gIH1cblxuICBzZXQgaXNEZW1vTW9kZShtb2RlKSB7XG4gICAgdGhpcy5pc0RlbW8gPSBtb2RlID8gbW9kZSA6IHRydWU7XG4gICAgdGhpcy5maWRqU3RvcmFnZS5zZXREZW1vTW9kZSh0aGlzLmlzRGVtbyk7XG4gIH1cblxuICBnZXQgZGVmYXVsdFVybEZvckFQSSgpIHtcbiAgICByZXR1cm4gdGhpcy5zdG9yYWdlLmdldCgnVXJsRm9yQVBJJyk7XG4gIH1cblxuICBzZXQgZGVmYXVsdFVybEZvckFQSSh1cmw6IHN0cmluZykge1xuICAgIHRoaXMuc3RvcmFnZS5zZXQoJ1VybEZvckFQSScsIHVybCk7XG4gIH1cblxuICBhc3luYyByZWZyZXNoUHJvZmlsZSgpOiBQcm9taXNlPEZpZGpTdG9yYWdlTm9kZT4ge1xuICAgIHRyeSB7XG4gICAgICB0aGlzLm5vZGVEYXRhID0gYXdhaXQgdGhpcy5maWRqU3RvcmFnZS5nZXRSZWZyZXNoZWROb2RlQ29weSh0aGlzLmZpZGpTZXJ2aWNlKTtcbiAgICAgIHRoaXMuc2V0Um9sZXMoYXdhaXQgdGhpcy5maWRqU2VydmljZS5nZXRSb2xlcygpKTtcbiAgICAgIHJldHVybiB0aGlzLm5vZGVEYXRhO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGF3YWl0IHRoaXMuY2hlY2tFcnJvcihlKTtcbiAgICB9XG4gIH1cblxuICBnZXRFbWFpbCgpIHtcbiAgICBsZXQgZW1haWwgPSB0aGlzLmVtYWlsO1xuICAgIGVtYWlsID0gZW1haWwgfHwgdGhpcy5zdG9yYWdlLmdldCgnZW1haWwnKTtcbiAgICByZXR1cm4gZW1haWw7XG4gIH1cblxuICBzZXRFbWFpbChlbWFpbDogc3RyaW5nKSB7XG4gICAgdGhpcy5lbWFpbCA9IGVtYWlsO1xuICAgIHRoaXMuc3RvcmFnZS5zZXQoJ2VtYWlsJywgdGhpcy5lbWFpbCk7XG4gIH1cblxuICBhc3luYyBsb2dvdXQoZmlkaktleTogc3RyaW5nLCBmaWRqUHJvZDogYm9vbGVhbikge1xuXG4gICAgdGhpcy5zdG9yYWdlLnJlbW92ZSgnZW1haWwnKTtcbiAgICBhd2FpdCB0aGlzLmZpZGpTZXJ2aWNlLmxvZ291dCh0cnVlKTtcblxuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLmZpZGpTZXJ2aWNlLmluaXQoZmlkaktleSxcbiAgICAgICAge1xuICAgICAgICAgIGxvZ0xldmVsOiBMb2dnZXJMZXZlbEVudW0uV0FSTiwgLy8gZmlkalByb2QgPyBMb2dnZXJMZXZlbEVudW0uV0FSTiA6IExvZ2dlckxldmVsRW51bS5JTkZPLFxuICAgICAgICAgIGNyeXB0bzogZmFsc2UsXG4gICAgICAgICAgcHJvZDogZmlkalByb2QsXG4gICAgICAgICAgdXNlREI6IGZhbHNlLFxuICAgICAgICB9KTtcbiAgICAgIHRoaXMucmVhZHlGb3JTeW5jLm5leHQodHJ1ZSk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdpbml0RmlkaiBjYXRjaCBwYjogJywgZXJyKTtcbiAgICB9XG5cbiAgfVxuXG4gIGFzeW5jIGNoZWNrRXJyb3IoZXJyb3I6IEVycm9ySW50ZXJmYWNlKSB7XG4gICAgaWYgKGVycm9yLmNvZGUgPT09IDQwMSkge1xuICAgICAgY29uc29sZS53YXJuKCdQYiBvbiBhdXRoJyk7XG4gICAgICBpZiAodGhpcy5yb3V0ZXIudXJsLmluZGV4T2YoJ2xvZ2luJykgPCAwKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgYXdhaXQgdGhpcy5maWRqU2VydmljZS5sb2dvdXQoKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmdvdG9Mb3V0KCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZ290b0xvdXQoKSB7XG4gICAgaWYgKHRoaXMucm91dGVyLnVybC5pbmRleE9mKCdsb2dpbicpID4gLTEpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgYXdhaXQgdGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCgnL2xvZ291dCcsIHtza2lwTG9jYXRpb25DaGFuZ2U6IHRydWV9KTtcbiAgfVxuXG4gIGFzeW5jIGdvdG9Mb2dpbigpIHtcbiAgICBpZiAodGhpcy5yb3V0ZXIudXJsLmluZGV4T2YoJ2xvZ2luJykgPiAtMSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAvLyBhd2FpdCB0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKCcvJywge3NraXBMb2NhdGlvbkNoYW5nZTogdHJ1ZX0pO1xuICAgIGF3YWl0IHRoaXMucm91dGVyLm5hdmlnYXRlKFsnL2xvZ2luJ10pO1xuICB9XG5cbiAgaXNMb2dnZWRJbigpIHtcbiAgICByZXR1cm4gdGhpcy5maWRqU2VydmljZS5pc0xvZ2dlZEluKCk7XG4gIH1cblxuICBhc3luYyBzdG9yZUFsbCgpIHtcbiAgICByZXR1cm4gdGhpcy5maWRqU3RvcmFnZS5zdG9yZURhdGEodGhpcy5maWRqU2VydmljZSwgdGhpcy5ub2RlRGF0YSk7XG4gIH1cblxuICBpc0FkbWluKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnJvbGVzLmluZGV4T2YoJ2FkbWluJykgPiAtMTtcbiAgfVxuXG4gIC8vID09PSBOb3RpZmljYXRpb25zID09PVxuXG4gIGFzeW5jIGNyZWF0ZU5vdGlmaWNhdGlvbihyYWluSWQ6IHN0cmluZywgbWVzc2FnZTogc3RyaW5nKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3AgPSBhd2FpdCB0aGlzLmZpZGpTZXJ2aWNlLnNlbmRPbkVuZHBvaW50KHtcbiAgICAgICAga2V5OiAnbm90aWZpY2F0aW9ucycsXG4gICAgICAgIHZlcmI6ICdQT1NUJyxcbiAgICAgICAgZGVmYXVsdEtleVVybDogdGhpcy5kZWZhdWx0VXJsRm9yQVBJICsgJy9ub3RpZmljYXRpb25zJyxcbiAgICAgICAgZGF0YToge1xuICAgICAgICAgIHJhaW46IHJhaW5JZCxcbiAgICAgICAgICBtZXNzYWdlLFxuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgICByZXR1cm4gbmV3IEV2ZW50Tm9kZShyZXNwLmRhdGEpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGF3YWl0IHRoaXMuY2hlY2tFcnJvcihlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGFzeW5jIGdldE5vdGlmaWNhdGlvbnMocmFpbklkOiBzdHJpbmcpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgYXJncyA9ICc/cmFpbj0nICsgcmFpbklkO1xuICAgICAgY29uc3QgcmVzcCA9IGF3YWl0IHRoaXMuZmlkalNlcnZpY2Uuc2VuZE9uRW5kcG9pbnQoe1xuICAgICAgICBrZXk6ICdub3RpZmljYXRpb25zJyxcbiAgICAgICAgdmVyYjogJ0dFVCcsXG4gICAgICAgIHJlbGF0aXZlUGF0aDogYXJncyxcbiAgICAgICAgZGVmYXVsdEtleVVybDogdGhpcy5kZWZhdWx0VXJsRm9yQVBJICsgJy9ub3RpZmljYXRpb25zJyxcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gcmVzcC5kYXRhLm5vdGlmaWNhdGlvbnMubWFwKG4gPT4gbmV3IEV2ZW50Tm9kZShuKSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgYXdhaXQgdGhpcy5jaGVja0Vycm9yKGUpO1xuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgYXN5bmMgZ2V0QWxsTm90aWZpY2F0aW9ucygpOiBQcm9taXNlPEV2ZW50Tm9kZVtdPiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3AgPSBhd2FpdCB0aGlzLmZpZGpTZXJ2aWNlLnNlbmRPbkVuZHBvaW50KHtcbiAgICAgICAga2V5OiAnbm90aWZpY2F0aW9ucycsXG4gICAgICAgIHZlcmI6ICdHRVQnLFxuICAgICAgICBkZWZhdWx0S2V5VXJsOiB0aGlzLmRlZmF1bHRVcmxGb3JBUEkgKyAnL25vdGlmaWNhdGlvbnMnLFxuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiByZXNwLmRhdGEubm90aWZpY2F0aW9ucy5tYXAobiA9PiBuZXcgRXZlbnROb2RlKG4pKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBhd2FpdCB0aGlzLmNoZWNrRXJyb3IoZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgLy8gPT09IFRlYW1zID09PVxuXG4gIGFzeW5jIGdldFRlYW1zKCk6IFByb21pc2U8QXJyYXk8VGVhbU5vZGU+PiB7XG4gICAgY29uc3QgdGVhbXMgPSBbXTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzcCA9IGF3YWl0IHRoaXMuZmlkalNlcnZpY2Uuc2VuZE9uRW5kcG9pbnQoe1xuICAgICAgICBrZXk6ICd0ZWFtc19hbGwnLFxuICAgICAgICB2ZXJiOiAnR0VUJyxcbiAgICAgICAgZGVmYXVsdEtleVVybDogdGhpcy5kZWZhdWx0VXJsRm9yQVBJICsgJy90ZWFtc19hbGwnXG4gICAgICB9KTtcbiAgICAgIGZvciAoY29uc3QgdGVhbSBvZiByZXNwLmRhdGEudGVhbXMpIHtcbiAgICAgICAgdGVhbXMucHVzaChuZXcgVGVhbU5vZGUodGVhbSkpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGF3YWl0IHRoaXMuY2hlY2tFcnJvcihlKTtcbiAgICB9XG4gICAgcmV0dXJuIHRlYW1zO1xuICB9XG5cbiAgYXN5bmMgZ2V0VGVhbSh0ZWFtSWQ6IHN0cmluZyk6IFByb21pc2U8VGVhbU5vZGU+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzcCA9IGF3YWl0IHRoaXMuZmlkalNlcnZpY2Uuc2VuZE9uRW5kcG9pbnQoe1xuICAgICAgICBrZXk6ICd0ZWFtcycsXG4gICAgICAgIHZlcmI6ICdHRVQnLFxuICAgICAgICByZWxhdGl2ZVBhdGg6IHRlYW1JZCxcbiAgICAgICAgZGVmYXVsdEtleVVybDogdGhpcy5kZWZhdWx0VXJsRm9yQVBJICsgJy90ZWFtcydcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIG5ldyBUZWFtTm9kZShyZXNwLmRhdGEpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGF3YWl0IHRoaXMuY2hlY2tFcnJvcihlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8vID09PSBSYWRhcnMgPT09XG5cbiAgYXN5bmMgZ2V0UmFkYXJzKHRlYW1JZDogc3RyaW5nKTogUHJvbWlzZTxBcnJheTxSYWRhck5vZGU+PiB7XG4gICAgY29uc3QgcmFkYXJzID0gW107XG4gICAgY29uc3QgdXJsID0gdGhpcy5kZWZhdWx0VXJsRm9yQVBJICsgJy9yYWRhcnMnICsgKHRlYW1JZCA/ICc/dGVhbUlkPScgKyB0ZWFtSWQgOiAnJyk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3AgPSBhd2FpdCB0aGlzLmZpZGpTZXJ2aWNlLnNlbmRPbkVuZHBvaW50KHtcbiAgICAgICAga2V5OiAncmFkYXJzJyxcbiAgICAgICAgdmVyYjogJ0dFVCcsXG4gICAgICAgIGRlZmF1bHRLZXlVcmw6IHVybCxcbiAgICAgIH0pO1xuICAgICAgZm9yIChjb25zdCByIG9mIHJlc3AuZGF0YS5yYWRhcnMpIHtcbiAgICAgICAgY29uc3QgcmFkYXIgPSBuZXcgUmFkYXJOb2RlKHIpO1xuICAgICAgICByYWRhcnMucHVzaChyYWRhcik7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgYXdhaXQgdGhpcy5jaGVja0Vycm9yKGUpO1xuICAgIH1cbiAgICByZXR1cm4gcmFkYXJzO1xuICB9XG5cbiAgYXN5bmMgZ2V0UmFkYXIoaWQ6IHN0cmluZyk6IFByb21pc2U8UmFkYXJOb2RlPiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3AgPSBhd2FpdCB0aGlzLmZpZGpTZXJ2aWNlLnNlbmRPbkVuZHBvaW50KHtcbiAgICAgICAga2V5OiAncmFkYXJzJyxcbiAgICAgICAgdmVyYjogJ0dFVCcsXG4gICAgICAgIHJlbGF0aXZlUGF0aDogaWQsXG4gICAgICAgIGRlZmF1bHRLZXlVcmw6IHRoaXMuZGVmYXVsdFVybEZvckFQSSArICcvcmFkYXJzJ1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gbmV3IFJhZGFyTm9kZShyZXNwLmRhdGEpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGF3YWl0IHRoaXMuY2hlY2tFcnJvcihlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGFzeW5jIHB1dFJhZGFyKHJhZGFyTm9kZTogUmFkYXJOb2RlKTogUHJvbWlzZTxSYWRhck5vZGU+IHtcbiAgICBjb25zdCBkYXRhID0ge1xuICAgICAgbmFtZTogcmFkYXJOb2RlLm5hbWUsXG4gICAgfTtcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXNwID0gYXdhaXQgdGhpcy5maWRqU2VydmljZS5zZW5kT25FbmRwb2ludCh7XG4gICAgICAgIGtleTogJ3JhZGFycycsXG4gICAgICAgIHJlbGF0aXZlUGF0aDogcmFkYXJOb2RlLmlkLFxuICAgICAgICB2ZXJiOiAnUFVUJyxcbiAgICAgICAgZGF0YSxcbiAgICAgICAgZGVmYXVsdEtleVVybDogdGhpcy5kZWZhdWx0VXJsRm9yQVBJICsgJy9yYWRhcnMvJ1xuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiBuZXcgUmFkYXJOb2RlKHJlc3AuZGF0YSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgYXdhaXQgdGhpcy5jaGVja0Vycm9yKGUpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGdldExvbmVseVJhZGFycyhyYWluczogUmFpbk5vZGVbXSk6IFByb21pc2U8UmFkYXJOb2RlW10+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzcCA9IGF3YWl0IHRoaXMuZmlkalNlcnZpY2Uuc2VuZE9uRW5kcG9pbnQoe1xuICAgICAgICBrZXk6ICdyYWRhcnMnLFxuICAgICAgICB2ZXJiOiAnR0VUJyxcbiAgICAgICAgZGVmYXVsdEtleVVybDogdGhpcy5kZWZhdWx0VXJsRm9yQVBJICsgJy9yYWRhcnMnXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGxvbmVseVJhZGFyczogUmFkYXJOb2RlW10gPSBbXTtcbiAgICAgIGNvbnN0IHJhZGFycyA9IHJlc3AuZGF0YS5yYWRhcnM7XG4gICAgICByYWRhcnMuZm9yRWFjaChyYWRhciA9PiB7XG4gICAgICAgIGxldCBmb3VuZCA9IGZhbHNlO1xuICAgICAgICByYWlucy5mb3JFYWNoKHJhaW4gPT4ge1xuICAgICAgICAgIGNvbnN0IHJkSWQgPSByYWluLmdldExpbmsoJ3JhZGFyJykuZ2V0SWQoKTtcbiAgICAgICAgICBpZiAocmRJZCA9PT0gcmFkYXIuaWQpIHtcbiAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoIWZvdW5kKSB7XG4gICAgICAgICAgbG9uZWx5UmFkYXJzLnB1c2gocmFkYXIpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBsb25lbHlSYWRhcnM7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgYXdhaXQgdGhpcy5jaGVja0Vycm9yKGUpO1xuICAgIH1cbiAgICByZXR1cm4gW107XG4gIH1cblxuICBhc3luYyBnZXRSYWluVGltZWZyYW1lKHJhaW5JZDogc3RyaW5nLCBiZWdpbjogRGF0ZSwgZW5kOiBEYXRlLCBmb3JjZWQgPSBmYWxzZSk6IFByb21pc2U8UmFpbk5vZGU+IHtcbiAgICB0cnkge1xuICAgICAgbGV0IHF1ZXJ5UGF0aCA9ICcnICsgcmFpbklkICsgJz9mb3JtYXQ9dGltZWZyYW1lJztcbiAgICAgIGlmIChiZWdpbikge1xuICAgICAgICBxdWVyeVBhdGggKz0gJyZiZWdpbj0nICsgYmVnaW4udG9JU09TdHJpbmcoKTtcbiAgICAgIH1cbiAgICAgIGlmIChlbmQpIHtcbiAgICAgICAgcXVlcnlQYXRoICs9ICcmZW5kPScgKyBlbmQudG9JU09TdHJpbmcoKTtcbiAgICAgIH1cbiAgICAgIGlmIChmb3JjZWQpIHtcbiAgICAgICAgcXVlcnlQYXRoICs9ICcmZm9yY2VkPXRydWUnO1xuICAgICAgfVxuICAgICAgY29uc3QgcmVzcCA9IGF3YWl0IHRoaXMuZmlkalNlcnZpY2Uuc2VuZE9uRW5kcG9pbnQoe1xuICAgICAgICBrZXk6ICdyYWlucycsXG4gICAgICAgIHZlcmI6ICdHRVQnLFxuICAgICAgICByZWxhdGl2ZVBhdGg6IHF1ZXJ5UGF0aCxcbiAgICAgICAgZGVmYXVsdEtleVVybDogdGhpcy5kZWZhdWx0VXJsRm9yQVBJICsgJy9yYWlucydcbiAgICAgIH0pO1xuICAgICAgY29uc3QgcmFpbk5vZGUgPSBuZXcgUmFpbk5vZGUocmVzcC5kYXRhLnRpbWVmcmFtZSk7XG4gICAgICByYWluTm9kZS5uYW1lICs9ICcucmFkYXIudGltZWZyYW1lJztcbiAgICAgIHJldHVybiByYWluTm9kZTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBhd2FpdCB0aGlzLmNoZWNrRXJyb3IoZSk7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgLy8gPT09IFJhaW5zID09PVxuXG4gIGFzeW5jIGdldFJhaW5zKHRlYW1JZDogc3RyaW5nKTogUHJvbWlzZTxBcnJheTxSYWluTm9kZT4+IHtcbiAgICBjb25zdCByYWlucyA9IFtdO1xuICAgIGNvbnN0IHVybCA9IHRoaXMuZGVmYXVsdFVybEZvckFQSSArICcvcmFpbnMnICsgKHRlYW1JZCA/ICc/dGVhbUlkPScgKyB0ZWFtSWQgOiAnJyk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3AgPSBhd2FpdCB0aGlzLmZpZGpTZXJ2aWNlLnNlbmRPbkVuZHBvaW50KHtcbiAgICAgICAga2V5OiAncmFpbnMnLFxuICAgICAgICB2ZXJiOiAnR0VUJyxcbiAgICAgICAgZGVmYXVsdEtleVVybDogdXJsLFxuICAgICAgfSk7XG4gICAgICBmb3IgKGNvbnN0IHJhaW4gb2YgcmVzcC5kYXRhLnJhaW5zKSB7XG4gICAgICAgIHJhaW5zLnB1c2gobmV3IFJhaW5Ob2RlKHJhaW4pKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBhd2FpdCB0aGlzLmNoZWNrRXJyb3IoZSk7XG4gICAgfVxuICAgIHJldHVybiByYWlucztcbiAgfVxuXG4gIGFzeW5jIGdldFJhaW4oaWQ6IHN0cmluZyk6IFByb21pc2U8UmFpbk5vZGU+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzcCA9IGF3YWl0IHRoaXMuZmlkalNlcnZpY2Uuc2VuZE9uRW5kcG9pbnQoe1xuICAgICAgICBrZXk6ICdyYWlucycsXG4gICAgICAgIHJlbGF0aXZlUGF0aDogaWQsXG4gICAgICAgIHZlcmI6ICdHRVQnLFxuICAgICAgICBkZWZhdWx0S2V5VXJsOiB0aGlzLmRlZmF1bHRVcmxGb3JBUEkgKyAnL3JhaW5zLydcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIG5ldyBSYWluTm9kZShyZXNwLmRhdGEpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGF3YWl0IHRoaXMuY2hlY2tFcnJvcihlKTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICAvLyA9PT0gQ291bnRcblxuICBhc3luYyBnZXRDb3VudHMocmFpbklkOiBzdHJpbmcsIG9wdGlvbnM6IHtcbiAgICByYW5nZTogJ2hvdXInIHwgJ2RheScgfCAnbW9udGgnIHwgJ3llYXInLFxuICAgIHBlcmlvZEJlZ2luOiBEYXRlXG4gIH0pOiBQcm9taXNlPHtcbiAgICBwZXJjZW50SW1hZ2VzOiBYWVR5cGVbXSxcbiAgICBwZXJjZW50UmFpbnk6IFhZVHlwZVtdLFxuICAgIHBlcmNlbnRROiBYWVR5cGVbXSxcbiAgICBxdWV1ZVJ1bm5pbmc6IG51bWJlcixcbiAgfT4ge1xuICAgIHRyeSB7XG5cbiAgICAgIGNvbnN0IGFyZ3MgPSBgP3JhbmdlPSR7b3B0aW9ucy5yYW5nZX0mYmVnaW49JHtvcHRpb25zLnBlcmlvZEJlZ2luLnRvSVNPU3RyaW5nKCl9YDtcblxuICAgICAgY29uc3QgcmVzcCA9IGF3YWl0IHRoaXMuZmlkalNlcnZpY2Uuc2VuZE9uRW5kcG9pbnQoe1xuICAgICAgICBrZXk6ICdyYWlucycsXG4gICAgICAgIHJlbGF0aXZlUGF0aDogcmFpbklkICsgJy9jb3VudHMnICsgYXJncyxcbiAgICAgICAgdmVyYjogJ0dFVCcsXG4gICAgICAgIGRlZmF1bHRLZXlVcmw6IHRoaXMuZGVmYXVsdFVybEZvckFQSSArICcvcmFpbnMvJyxcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCBjb3VudHMgPSByZXNwLmRhdGEuY291bnRzLnJlc3VsdDtcbiAgICAgIGNvbnN0IHBlcmNlbnRJbWFnZXM6IFhZVHlwZVtdID0gW10sXG4gICAgICAgIHBlcmNlbnRSYWlueTogWFlUeXBlW10gPSBbXSxcbiAgICAgICAgcGVyY2VudFE6IFhZVHlwZVtdID0gW107XG5cbiAgICAgIGNvdW50cy5mb3JFYWNoKGMgPT4ge1xuICAgICAgICBjb25zdCBkYXRlVG9TaG93ID0gbmV3IERhdGUob3B0aW9ucy5wZXJpb2RCZWdpbik7XG4gICAgICAgIGlmIChjLnllYXIpIGRhdGVUb1Nob3cuc2V0VVRDRnVsbFllYXIoYy55ZWFyKTtcbiAgICAgICAgaWYgKGMubW9udGgpIGRhdGVUb1Nob3cuc2V0VVRDTW9udGgoYy5tb250aCAtIDEpO1xuICAgICAgICBpZiAoYy5kYXkpIGRhdGVUb1Nob3cuc2V0VVRDRGF0ZShjLmRheSk7XG4gICAgICAgIGlmIChjLmhvdXIpIGRhdGVUb1Nob3cuc2V0VVRDSG91cnMoYy5ob3VyKTtcbiAgICAgICAgaWYgKGMubWludXRlKSBkYXRlVG9TaG93LnNldFVUQ01pbnV0ZXMoYy5taW51dGUpO1xuXG4gICAgICAgIGNvbnN0IGxhYmVsID0gZGF0ZVRvU2hvdy50b0lTT1N0cmluZygpO1xuICAgICAgICBwZXJjZW50SW1hZ2VzLnB1c2gobmV3IFhZVHlwZShjLnBlcmNlbnRJbWFnZXMgPz8gMCwgTmFOLCBOYU4sIGxhYmVsKSk7XG4gICAgICAgIHBlcmNlbnRSYWlueS5wdXNoKG5ldyBYWVR5cGUoYy5wZXJjZW50UmFpbnkgPz8gMCwgTmFOLCBOYU4sIGxhYmVsKSk7XG4gICAgICAgIHBlcmNlbnRRLnB1c2gobmV3IFhZVHlwZShjLnBlcmNlbnRRID8/IDAsIE5hTiwgTmFOLCBsYWJlbCkpO1xuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIHBlcmNlbnRJbWFnZXMsXG4gICAgICAgIHBlcmNlbnRSYWlueSxcbiAgICAgICAgcGVyY2VudFEsXG4gICAgICAgIHF1ZXVlUnVubmluZzogcmVzcC5kYXRhLnF1ZXVlUnVubmluZ1xuICAgICAgfTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBhd2FpdCB0aGlzLmNoZWNrRXJyb3IoZSk7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgYXN5bmMgZ2V0Q291bnRzSG91cihyYWluSWQ6IHN0cmluZywgb3B0aW9uczogeyBwZXJpb2RCZWdpbjogRGF0ZSB9KTogUHJvbWlzZTx7XG4gICAgcGVyY2VudEltYWdlczogWFlUeXBlW10sXG4gICAgcmFpbnlDb3VudDogWFlUeXBlW10sXG4gICAgcmFpbnlTdW06IFhZVHlwZVtdLFxuICAgIHF1ZXVlUnVubmluZzogbnVtYmVyLFxuICB9PiB7XG4gICAgdHJ5IHtcblxuICAgICAgY29uc3QgYXJncyA9IGA/cmFuZ2U9aG91ciZiZWdpbj0ke29wdGlvbnMucGVyaW9kQmVnaW4udG9JU09TdHJpbmcoKX1gO1xuXG4gICAgICBjb25zdCByZXNwID0gYXdhaXQgdGhpcy5maWRqU2VydmljZS5zZW5kT25FbmRwb2ludCh7XG4gICAgICAgIGtleTogJ3JhaW5zJyxcbiAgICAgICAgcmVsYXRpdmVQYXRoOiByYWluSWQgKyAnL2NvdW50cycgKyBhcmdzLFxuICAgICAgICB2ZXJiOiAnR0VUJyxcbiAgICAgICAgZGVmYXVsdEtleVVybDogdGhpcy5kZWZhdWx0VXJsRm9yQVBJICsgJy9yYWlucy8nLFxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IGNvdW50cyA9IHJlc3AuZGF0YS5jb3VudHMucmVzdWx0O1xuICAgICAgY29uc3QgcGVyY2VudEltYWdlczogWFlUeXBlW10gPSBbXSxcbiAgICAgICAgcmFpbnlTdW06IFhZVHlwZVtdID0gW10sXG4gICAgICAgIHJhaW55Q291bnQ6IFhZVHlwZVtdID0gW107XG5cbiAgICAgIGNvdW50cy5mb3JFYWNoKGMgPT4ge1xuICAgICAgICBjb25zdCBkYXRlVG9TaG93ID0gbmV3IERhdGUob3B0aW9ucy5wZXJpb2RCZWdpbik7XG4gICAgICAgIGlmIChjLnllYXIpIGRhdGVUb1Nob3cuc2V0VVRDRnVsbFllYXIoYy55ZWFyKTtcbiAgICAgICAgaWYgKGMubW9udGgpIGRhdGVUb1Nob3cuc2V0VVRDTW9udGgoYy5tb250aCAtIDEpO1xuICAgICAgICBpZiAoYy5kYXkpIGRhdGVUb1Nob3cuc2V0VVRDRGF0ZShjLmRheSk7XG4gICAgICAgIGlmIChjLmhvdXIpIGRhdGVUb1Nob3cuc2V0VVRDSG91cnMoYy5ob3VyKTtcbiAgICAgICAgaWYgKGMubWludXRlKSBkYXRlVG9TaG93LnNldFVUQ01pbnV0ZXMoYy5taW51dGUpO1xuXG4gICAgICAgIGNvbnN0IGxhYmVsID0gZGF0ZVRvU2hvdy50b0lTT1N0cmluZygpO1xuICAgICAgICBwZXJjZW50SW1hZ2VzLnB1c2gobmV3IFhZVHlwZShjLnBlcmNlbnRJbWFnZXMgPz8gMCwgTmFOLCBOYU4sIGxhYmVsKSk7XG4gICAgICAgIHJhaW55Q291bnQucHVzaChuZXcgWFlUeXBlKGMucmFpbnlDb3VudCA/PyAwLCBOYU4sIE5hTiwgbGFiZWwpKTtcbiAgICAgICAgcmFpbnlTdW0ucHVzaChuZXcgWFlUeXBlKGMucmFpbnlTdW0gPz8gMCwgTmFOLCBOYU4sIGxhYmVsKSk7XG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgcGVyY2VudEltYWdlcyxcbiAgICAgICAgcmFpbnlDb3VudCxcbiAgICAgICAgcmFpbnlTdW0sXG4gICAgICAgIHF1ZXVlUnVubmluZzogcmVzcC5kYXRhLnF1ZXVlUnVubmluZ1xuICAgICAgfTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBhd2FpdCB0aGlzLmNoZWNrRXJyb3IoZSk7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgLy8gPT09IENvbXB1dGluZyA9PT1cblxuICBhc3luYyBsYXVuY2hSYWluQ29tcHV0YXRpb24ocmFpbklkOiBzdHJpbmcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRlOiBEYXRlKTogUHJvbWlzZTxSYWluQ29tcHV0YXRpb25bXT4ge1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5maWRqU2VydmljZS5zZW5kT25FbmRwb2ludCh7XG4gICAgICB2ZXJiOiAnUE9TVCcsXG4gICAgICBrZXk6ICdyYWlucycsXG4gICAgICByZWxhdGl2ZVBhdGg6ICcnICsgcmFpbklkICsgJy9jb21wdXRhdGlvbnMnLFxuICAgICAgZGF0YToge1xuICAgICAgICBkYXRlOiBkYXRlLnRvSVNPU3RyaW5nKCksXG4gICAgICB9LFxuICAgICAgZGVmYXVsdEtleVVybDogdGhpcy5kZWZhdWx0VXJsRm9yQVBJICsgJy9yYWlucydcbiAgICB9KTtcblxuICAgIHJldHVybiByZXNwb25zZS5kYXRhLmNvbXB1dGF0aW9ucz8ubWFwKGMgPT4gbmV3IFJhaW5Db21wdXRhdGlvbihjKSk7XG4gIH1cblxuICBhc3luYyBnZXRSYWluQ29tcHV0YXRpb25DYXJ0ZXNpYW5NYXBCeUlkKHJhaW5JZDogc3RyaW5nLCByYWluQ29tcHV0YXRpb25JZDogc3RyaW5nKTogUHJvbWlzZTxSYWluQ29tcHV0YXRpb25NYXA+IHtcbiAgICBjb25zdCBxdWVyeVBhdGggPSAnJyArIHJhaW5JZCArICcvY29tcHV0YXRpb25zLycgKyByYWluQ29tcHV0YXRpb25JZCArICc/Zm9ybWF0PWNhcnRlc2lhbi1tYXAnO1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5maWRqU2VydmljZS5zZW5kT25FbmRwb2ludCh7XG4gICAgICBrZXk6ICdyYWlucycsXG4gICAgICB2ZXJiOiAnR0VUJyxcbiAgICAgIHJlbGF0aXZlUGF0aDogcXVlcnlQYXRoLFxuICAgICAgZGVmYXVsdEtleVVybDogdGhpcy5kZWZhdWx0VXJsRm9yQVBJICsgJy9yYWlucydcbiAgICB9KTtcbiAgICBpZiAoIXJlc3BvbnNlLmRhdGFbJ2NhcnRlc2lhbi1tYXAnXSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY29uc3QgcmFpbkNvbXB1dGF0aW9uTWFwID0gbmV3IFJhaW5Db21wdXRhdGlvbk1hcChyZXNwb25zZS5kYXRhWydjYXJ0ZXNpYW4tbWFwJ10pO1xuICAgIHJhaW5Db21wdXRhdGlvbk1hcC5uYW1lID0gcmFpbklkICsgJy5yYWluLmNhcnRlc2lhbi1tYXAnO1xuICAgIHJldHVybiByYWluQ29tcHV0YXRpb25NYXA7XG4gIH1cblxuICBhc3luYyBnZXRSYWluQ29tcHV0YXRpb25DdW11bGF0aXZlTWFwQnlJZChyYWluSWQ6IHN0cmluZyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFpbkNvbXB1dGF0aW9uSWQ6IHN0cmluZyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VtdWxhdGl2ZUhvdXJzOiBudW1iZXIpOiBQcm9taXNlPFJhaW5Db21wdXRhdGlvbk1hcD4ge1xuICAgIGNvbnN0IHF1ZXJ5UGF0aCA9ICcnICsgcmFpbklkICsgJy9jb21wdXRhdGlvbnMvJyArIHJhaW5Db21wdXRhdGlvbklkICsgJy9jdW11bGF0aXZlLycgKyBjdW11bGF0aXZlSG91cnM7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmZpZGpTZXJ2aWNlLnNlbmRPbkVuZHBvaW50KHtcbiAgICAgIGtleTogJ3JhaW5zJyxcbiAgICAgIHZlcmI6ICdHRVQnLFxuICAgICAgcmVsYXRpdmVQYXRoOiBxdWVyeVBhdGgsXG4gICAgICBkZWZhdWx0S2V5VXJsOiB0aGlzLmRlZmF1bHRVcmxGb3JBUEkgKyAnL3JhaW5zJ1xuICAgIH0pO1xuICAgIGlmICghcmVzcG9uc2UuZGF0YVsnY3VtdWxhdGl2ZSddKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCByYWluQ29tcHV0YXRpb25NYXAgPSBuZXcgUmFpbkNvbXB1dGF0aW9uTWFwKHJlc3BvbnNlLmRhdGFbJ2N1bXVsYXRpdmUnXSk7XG4gICAgcmFpbkNvbXB1dGF0aW9uTWFwLm5hbWUgPSByYWluSWQgKyAnLnJhaW4uY3VtdWxhdGl2ZSc7XG4gICAgcmV0dXJuIHJhaW5Db21wdXRhdGlvbk1hcDtcbiAgfVxuXG4gIGFzeW5jIGdldFJhaW5Db21wYXJlcyhyYWluSWQ6IHN0cmluZywgcmFpbkNvbXB1dGF0aW9uSWQ6IHN0cmluZyk6IFByb21pc2U8eyBpZDogc3RyaW5nLCB2ZXJzaW9uOiBzdHJpbmcgfVtdPiB7XG4gICAgY29uc3QgcXVlcnlQYXRoID0gJycgKyByYWluSWQgKyAnL2NvbXB1dGF0aW9ucy8nICsgcmFpbkNvbXB1dGF0aW9uSWQ7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmZpZGpTZXJ2aWNlLnNlbmRPbkVuZHBvaW50KHtcbiAgICAgIGtleTogJ3JhaW5zJyxcbiAgICAgIHZlcmI6ICdHRVQnLFxuICAgICAgcmVsYXRpdmVQYXRoOiBxdWVyeVBhdGgsXG4gICAgICBkZWZhdWx0S2V5VXJsOiB0aGlzLmRlZmF1bHRVcmxGb3JBUEkgKyAnL3JhaW5zJyxcbiAgICAgIC8vIHRpbWVvdXQ6IDIwMDAwMCxcbiAgICB9KTtcblxuICAgIGNvbnN0IHJhaW5Db21wdXRhdGlvbiA9IG5ldyBSYWluQ29tcHV0YXRpb24ocmVzcG9uc2UuZGF0YSk7XG4gICAgY29uc3QgbGlua3MgPSByYWluQ29tcHV0YXRpb24uZ2V0TGlua3MoKTtcbiAgICBjb25zdCByYWluQ29tcHV0YXRpb25RdWFsaXRpZXMgPSBbXTtcbiAgICBmb3IgKGNvbnN0IGxpbmsgb2YgbGlua3MpIHtcbiAgICAgIGlmIChsaW5rLnJlbCA9PT0gJ3JhaW4tY29tcHV0YXRpb24tcXVhbGl0eScpIHtcbiAgICAgICAgY29uc3QgaWQgPSBsaW5rLmdldElkKCk7XG4gICAgICAgIGNvbnN0IHZlcnNpb24gPSBsaW5rLmhyZWYuc3Vic3RyaW5nKGxpbmsuaHJlZi5pbmRleE9mKCd2ZXJzaW9uLycpICsgOCwgbGluay5ocmVmLmluZGV4T2YoJy8nICsgaWQpKTtcbiAgICAgICAgcmFpbkNvbXB1dGF0aW9uUXVhbGl0aWVzLnB1c2goe2lkLCB2ZXJzaW9ufSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByYWluQ29tcHV0YXRpb25RdWFsaXRpZXM7XG4gIH1cblxuICBhc3luYyBnZXRSYWluQ29tcGFyZUJ5SWQocmFpbklkOiBzdHJpbmcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICByYWluQ29tcHV0YXRpb25JZDogc3RyaW5nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFpbkNvbXB1dGF0aW9uUXVhbGl0eUlkOiBzdHJpbmcpOiBQcm9taXNlPFJhaW5Db21wdXRhdGlvblF1YWxpdHk+IHtcbiAgICBjb25zdCBxdWVyeVBhdGggPSAnJyArIHJhaW5JZCArICcvY29tcHV0YXRpb25zLycgKyByYWluQ29tcHV0YXRpb25JZCArICcvY29tcGFyZXMvJyArIHJhaW5Db21wdXRhdGlvblF1YWxpdHlJZDtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuZmlkalNlcnZpY2Uuc2VuZE9uRW5kcG9pbnQoe1xuICAgICAga2V5OiAncmFpbnMnLFxuICAgICAgdmVyYjogJ0dFVCcsXG4gICAgICByZWxhdGl2ZVBhdGg6IHF1ZXJ5UGF0aCxcbiAgICAgIGRlZmF1bHRLZXlVcmw6IHRoaXMuZGVmYXVsdFVybEZvckFQSSArICcvcmFpbnMnLFxuICAgIH0pO1xuXG4gICAgY29uc3QgcmFpbkNvbXB1dGF0aW9uUXVhbGl0eSA9IG5ldyBSYWluQ29tcHV0YXRpb25RdWFsaXR5KHJlc3BvbnNlLmRhdGEpO1xuICAgIHJhaW5Db21wdXRhdGlvblF1YWxpdHkucXVhbGl0eVNwZWVkTWF0cml4Q29udGFpbmVyID0gU3BlZWRNYXRyaXhDb250YWluZXJcbiAgICAgIC5DcmVhdGVGcm9tSnNvbihyYWluQ29tcHV0YXRpb25RdWFsaXR5LnF1YWxpdHlTcGVlZE1hdHJpeENvbnRhaW5lcik7XG4gICAgcmV0dXJuIHJhaW5Db21wdXRhdGlvblF1YWxpdHk7XG4gIH1cblxuICAvLyA9PT0gR2F1Z2VzID09PVxuXG4gIGFzeW5jIGdldEdhdWdlKGdhdWdlSWQ6IHN0cmluZyk6IFByb21pc2U8R2F1Z2VOb2RlPiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3AgPSBhd2FpdCB0aGlzLmZpZGpTZXJ2aWNlLnNlbmRPbkVuZHBvaW50KHtcbiAgICAgICAga2V5OiAnZ2F1Z2VzJyxcbiAgICAgICAgdmVyYjogJ0dFVCcsXG4gICAgICAgIHJlbGF0aXZlUGF0aDogZ2F1Z2VJZCxcbiAgICAgICAgZGVmYXVsdEtleVVybDogdGhpcy5kZWZhdWx0VXJsRm9yQVBJICsgJy9nYXVnZXMnXG4gICAgICB9KTtcbiAgICAgIHJldHVybiBuZXcgR2F1Z2VOb2RlKHJlc3AuZGF0YSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgYXdhaXQgdGhpcy5jaGVja0Vycm9yKGUpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGdldEdhdWdlcyhyYWluSWQ/OiBzdHJpbmcpOiBQcm9taXNlPEFycmF5PEdhdWdlTm9kZUZpbHRlcj4+IHtcbiAgICBsZXQgcXVlcnlQYXRoID0gJyc7XG4gICAgaWYgKHRoaXMuYXNUZWFtSWQpIHtcbiAgICAgIHF1ZXJ5UGF0aCArPSAnP3RlYW1JZD0nICsgdGhpcy5hc1RlYW1JZDtcbiAgICB9XG4gICAgaWYgKHJhaW5JZCkge1xuICAgICAgaWYgKHF1ZXJ5UGF0aCkge1xuICAgICAgICBxdWVyeVBhdGggKz0gJyYnO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcXVlcnlQYXRoICs9ICc/JztcbiAgICAgIH1cbiAgICAgIHF1ZXJ5UGF0aCArPSAncmFpbklkPScgKyByYWluSWQ7XG4gICAgfVxuXG4gICAgY29uc3QgZ2F1Z2VzID0gW107XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3AgPSBhd2FpdCB0aGlzLmZpZGpTZXJ2aWNlLnNlbmRPbkVuZHBvaW50KHtcbiAgICAgICAga2V5OiAnZ2F1Z2VzJyxcbiAgICAgICAgdmVyYjogJ0dFVCcsXG4gICAgICAgIHJlbGF0aXZlUGF0aDogcXVlcnlQYXRoLFxuICAgICAgICBkZWZhdWx0S2V5VXJsOiB0aGlzLmRlZmF1bHRVcmxGb3JBUEkgKyAnL2dhdWdlcydcbiAgICAgIH0pO1xuXG4gICAgICBmb3IgKGNvbnN0IGdhdWdlIG9mIHJlc3AuZGF0YS5nYXVnZXMpIHtcbiAgICAgICAgZ2F1Z2VzLnB1c2gobmV3IEdhdWdlTm9kZUZpbHRlcihnYXVnZSkpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGF3YWl0IHRoaXMuY2hlY2tFcnJvcihlKTtcbiAgICB9XG4gICAgcmV0dXJuIGdhdWdlcztcbiAgfVxuXG4gIGFzeW5jIGdldEdhdWdlTWVhc3VyZXMoZ2F1Z2VJZDogc3RyaW5nLCBiZWdpbjogRGF0ZSwgZW5kOiBEYXRlKTogUHJvbWlzZTxHYXVnZU1lYXN1cmVbXT4ge1xuICAgIGNvbnN0IHF1ZXJ5UGF0aCA9ICcnICsgZ2F1Z2VJZCArICcvbWVhc3VyZXM/YmVnaW49JyArIGJlZ2luLnRvSVNPU3RyaW5nKCkgKyAnJmVuZD0nICsgZW5kLnRvSVNPU3RyaW5nKCk7XG4gICAgY29uc3QgcmVzcCA9IGF3YWl0IHRoaXMuZmlkalNlcnZpY2Uuc2VuZE9uRW5kcG9pbnQoe1xuICAgICAga2V5OiAnZ2F1Z2VzJyxcbiAgICAgIHZlcmI6ICdHRVQnLFxuICAgICAgcmVsYXRpdmVQYXRoOiBxdWVyeVBhdGgsXG4gICAgICBkZWZhdWx0S2V5VXJsOiB0aGlzLmRlZmF1bHRVcmxGb3JBUEkgKyAnL2dhdWdlcydcbiAgICB9KTtcblxuICAgIGNvbnN0IGdhdWdlTWVhc3VyZXM6IEdhdWdlTWVhc3VyZVtdID0gW107XG4gICAgZm9yIChjb25zdCBnYXVnZU1lYXN1cmUgb2YgcmVzcC5kYXRhLmdhdWdlTWVhc3VyZXMpIHtcbiAgICAgIGdhdWdlTWVhc3VyZXMucHVzaChuZXcgR2F1Z2VNZWFzdXJlKGdhdWdlTWVhc3VyZSkpO1xuICAgIH1cbiAgICByZXR1cm4gZ2F1Z2VNZWFzdXJlcztcbiAgfVxuXG4gIC8vID09PSBQcml2YXRlID09PVxuXG4gIHByb3RlY3RlZCBzZXRSb2xlcyhyb2xlczogQXJyYXk8c3RyaW5nPik6IHZvaWQge1xuICAgIHRoaXMucm9sZXMgPSByb2xlcztcbiAgfVxuXG59XG4iXX0=
@@ -1,4 +1,4 @@
1
- import { Component, HostListener, Input, ViewChild } from '@angular/core';
1
+ import { Component, EventEmitter, HostListener, Input, Output, ViewChild } from '@angular/core';
2
2
  import { DateRange, DynamicDateStatusElementInput, ElementsFactory } from 'raain-ui';
3
3
  import * as i0 from "@angular/core";
4
4
  import * as i1 from "@angular/common";
@@ -6,6 +6,7 @@ import * as i2 from "@ionic/angular";
6
6
  export class RaainDateDynamicComponent {
7
7
  constructor(ngZone) {
8
8
  this.ngZone = ngZone;
9
+ this.changedDate = new EventEmitter();
9
10
  this.focusDate = new Date();
10
11
  this.focusRange = DateRange.CENTURY;
11
12
  this.onSizeChanged = () => {
@@ -39,11 +40,12 @@ export class RaainDateDynamicComponent {
39
40
  // If style is a valid chart type, return it, otherwise default to 'line'
40
41
  return validChartTypes.includes(style) ? style : 'line';
41
42
  }
42
- create() {
43
+ async create() {
43
44
  if (this.created) {
44
45
  return;
45
46
  }
46
47
  this.created = true;
48
+ const monthSampleData = await this.fetchData(new Date(), DateRange.MONTH);
47
49
  const factory = new ElementsFactory();
48
50
  try {
49
51
  this.dynamicDateStatusElement = factory.createDynamicDateStatus(this.canvasElement.nativeElement, new DynamicDateStatusElementInput(async (focusDate, focusRange) => {
@@ -52,6 +54,11 @@ export class RaainDateDynamicComponent {
52
54
  ...item,
53
55
  style: this.mapStyleToChartType(item.style)
54
56
  }));
57
+ }, {
58
+ dataLength: monthSampleData.length,
59
+ onLastClick: (date) => {
60
+ this.changedDate.emit(date);
61
+ }
55
62
  }));
56
63
  }
57
64
  catch (e) {
@@ -64,7 +71,7 @@ export class RaainDateDynamicComponent {
64
71
  }
65
72
  async change(changes) {
66
73
  await this.delete();
67
- this.create();
74
+ await this.create();
68
75
  }
69
76
  updateMapSize() {
70
77
  const mapDivWidth = this.canvasElement.nativeElement.parentNode?.parentNode['clientWidth'];
@@ -82,7 +89,7 @@ export class RaainDateDynamicComponent {
82
89
  }
83
90
  }
84
91
  RaainDateDynamicComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: RaainDateDynamicComponent, deps: [{ token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Component });
85
- RaainDateDynamicComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: RaainDateDynamicComponent, selector: "raain-date-dynamic", inputs: { points: "points", focusDate: "focusDate", focusRange: "focusRange", withoutAll: "withoutAll", currentHeight: "currentHeight", fetchData: "fetchData" }, host: { listeners: { "window:resize": "onResize($event)" } }, viewQueries: [{ propertyName: "canvasElement", first: true, predicate: ["canvasElement"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<ion-grid>\n <ion-row>\n <ion-col id=\"col-container\" size-sm=\"12\">\n <div [style.height.px]=\"currentHeight\" id=\"canvas-container\">\n <canvas #canvasElement></canvas>\n </div>\n </ion-col>\n </ion-row>\n\n <ion-row>\n <ion-col class=\"ion-text-right\" offset-sm=\"4\" size-sm=\"1\">\n <ion-button (click)=\"focusPrevious()\" color=\"medium\" fill=\"clear\">\n <ion-icon name=\"chevron-back-outline\"></ion-icon>\n </ion-button>\n </ion-col>\n <ion-col class=\"ion-text-center\" size-sm=\"2\">\n <ion-button (click)=\"focusReset()\" *ngIf=\"!withoutAll\" color=\"medium\" fill=\"clear\">\n all dates\n </ion-button>\n </ion-col>\n <ion-col class=\"ion-text-left\" size-sm=\"1\">\n <ion-button (click)=\"focusNext()\" color=\"medium\" fill=\"clear\">\n <ion-icon name=\"chevron-forward-outline\"></ion-icon>\n </ion-button>\n </ion-col>\n </ion-row>\n</ion-grid>\n", styles: ["#canvas-container{position:relative}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "form", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { kind: "component", type: i2.IonCol, selector: "ion-col", inputs: ["offset", "offsetLg", "offsetMd", "offsetSm", "offsetXl", "offsetXs", "pull", "pullLg", "pullMd", "pullSm", "pullXl", "pullXs", "push", "pushLg", "pushMd", "pushSm", "pushXl", "pushXs", "size", "sizeLg", "sizeMd", "sizeSm", "sizeXl", "sizeXs"] }, { kind: "component", type: i2.IonGrid, selector: "ion-grid", inputs: ["fixed"] }, { kind: "component", type: i2.IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: i2.IonRow, selector: "ion-row" }] });
92
+ RaainDateDynamicComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: RaainDateDynamicComponent, selector: "raain-date-dynamic", inputs: { points: "points", focusDate: "focusDate", focusRange: "focusRange", withoutAll: "withoutAll", currentHeight: "currentHeight", fetchData: "fetchData" }, outputs: { changedDate: "changedDate" }, host: { listeners: { "window:resize": "onResize($event)" } }, viewQueries: [{ propertyName: "canvasElement", first: true, predicate: ["canvasElement"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<ion-grid>\n <ion-row>\n <ion-col id=\"col-container\" size-sm=\"12\">\n <div [style.height.px]=\"currentHeight\" id=\"canvas-container\">\n <canvas #canvasElement></canvas>\n </div>\n </ion-col>\n </ion-row>\n\n <ion-row>\n <ion-col class=\"ion-text-right\" offset-sm=\"4\" size-sm=\"1\">\n <ion-button (click)=\"focusPrevious()\" color=\"medium\" fill=\"clear\">\n <ion-icon name=\"chevron-back-outline\"></ion-icon>\n </ion-button>\n </ion-col>\n <ion-col class=\"ion-text-center\" size-sm=\"2\">\n <ion-button (click)=\"focusReset()\" *ngIf=\"!withoutAll\" color=\"medium\" fill=\"clear\">\n all dates\n </ion-button>\n </ion-col>\n <ion-col class=\"ion-text-left\" size-sm=\"1\">\n <ion-button (click)=\"focusNext()\" color=\"medium\" fill=\"clear\">\n <ion-icon name=\"chevron-forward-outline\"></ion-icon>\n </ion-button>\n </ion-col>\n </ion-row>\n</ion-grid>\n", styles: ["#canvas-container{position:relative}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "form", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { kind: "component", type: i2.IonCol, selector: "ion-col", inputs: ["offset", "offsetLg", "offsetMd", "offsetSm", "offsetXl", "offsetXs", "pull", "pullLg", "pullMd", "pullSm", "pullXl", "pullXs", "push", "pushLg", "pushMd", "pushSm", "pushXl", "pushXs", "size", "sizeLg", "sizeMd", "sizeSm", "sizeXl", "sizeXs"] }, { kind: "component", type: i2.IonGrid, selector: "ion-grid", inputs: ["fixed"] }, { kind: "component", type: i2.IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: i2.IonRow, selector: "ion-row" }] });
86
93
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: RaainDateDynamicComponent, decorators: [{
87
94
  type: Component,
88
95
  args: [{ selector: 'raain-date-dynamic', template: "<ion-grid>\n <ion-row>\n <ion-col id=\"col-container\" size-sm=\"12\">\n <div [style.height.px]=\"currentHeight\" id=\"canvas-container\">\n <canvas #canvasElement></canvas>\n </div>\n </ion-col>\n </ion-row>\n\n <ion-row>\n <ion-col class=\"ion-text-right\" offset-sm=\"4\" size-sm=\"1\">\n <ion-button (click)=\"focusPrevious()\" color=\"medium\" fill=\"clear\">\n <ion-icon name=\"chevron-back-outline\"></ion-icon>\n </ion-button>\n </ion-col>\n <ion-col class=\"ion-text-center\" size-sm=\"2\">\n <ion-button (click)=\"focusReset()\" *ngIf=\"!withoutAll\" color=\"medium\" fill=\"clear\">\n all dates\n </ion-button>\n </ion-col>\n <ion-col class=\"ion-text-left\" size-sm=\"1\">\n <ion-button (click)=\"focusNext()\" color=\"medium\" fill=\"clear\">\n <ion-icon name=\"chevron-forward-outline\"></ion-icon>\n </ion-button>\n </ion-col>\n </ion-row>\n</ion-grid>\n", styles: ["#canvas-container{position:relative}\n"] }]
@@ -98,6 +105,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
98
105
  type: Input
99
106
  }], fetchData: [{
100
107
  type: Input
108
+ }], changedDate: [{
109
+ type: Output
101
110
  }], canvasElement: [{
102
111
  type: ViewChild,
103
112
  args: ['canvasElement']
@@ -105,4 +114,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
105
114
  type: HostListener,
106
115
  args: ['window:resize', ['$event']]
107
116
  }] } });
108
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmFhaW4tZGF0ZS1keW5hbWljLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hcHAvc2hhcmVkL3JhYWluLWRhdGUtZHluYW1pYy9yYWFpbi1kYXRlLWR5bmFtaWMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vc3JjL2FwcC9zaGFyZWQvcmFhaW4tZGF0ZS1keW5hbWljL3JhYWluLWRhdGUtZHluYW1pYy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUwsU0FBUyxFQUVULFlBQVksRUFDWixLQUFLLEVBS0wsU0FBUyxFQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBQyxTQUFTLEVBQTRCLDZCQUE2QixFQUFFLGVBQWUsRUFBQyxNQUFNLFVBQVUsQ0FBQzs7OztBQU83RyxNQUFNLE9BQU8seUJBQXlCO0lBNEJwQyxZQUFvQixNQUFjO1FBQWQsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUNoQyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksSUFBSSxFQUFFLENBQUE7UUFDM0IsSUFBSSxDQUFDLFVBQVUsR0FBRyxTQUFTLENBQUMsT0FBTyxDQUFDO1FBQ3BDLElBQUksQ0FBQyxhQUFhLEdBQUcsR0FBRyxFQUFFO1FBQzFCLENBQUMsQ0FBQztJQUNKLENBQUM7SUFFTSxrQkFBa0I7UUFDdkIsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO0lBQ2hCLENBQUM7SUFFTSxXQUFXLENBQUMsT0FBc0I7UUFDdkMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUN2QixDQUFDO0lBRU0sV0FBVztRQUNoQixJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7SUFDaEIsQ0FBQztJQUVELGFBQWE7UUFDWCxJQUFJLENBQUMsd0JBQXdCLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDaEQsQ0FBQztJQUVELFVBQVU7UUFDUixJQUFJLENBQUMsd0JBQXdCLENBQUMsVUFB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LENBQUMsYUFBYSxFQUFFLENBQUM7UUFDdkIsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDOzt1SEF0SFUseUJBQXlCOzJHQUF6Qix5QkFBeUIsK1pDbkJ0Qyx1OEJBMkJBOzRGRFJhLHlCQUF5QjtrQkFMckMsU0FBUzsrQkFDRSxvQkFBb0I7NkZBT3ZCLE1BQU07c0JBRFosS0FBSztnQkFRQyxTQUFTO3NCQURmLEtBQUs7Z0JBR0MsVUFBVTtzQkFEaEIsS0FBSztnQkFHQyxVQUFVO3NCQURoQixLQUFLO2dCQUdDLGFBQWE7c0JBRG5CLEtBQUs7Z0JBSUMsU0FBUztzQkFEZixLQUFLO2dCQUtJLGFBQWE7c0JBRHRCLFNBQVM7dUJBQUMsZUFBZTtnQkFzQ2xCLFFBQVE7c0JBRGYsWUFBWTt1QkFBQyxlQUFlLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBZnRlclZpZXdDaGVja2VkLFxuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIEhvc3RMaXN0ZW5lcixcbiAgSW5wdXQsXG4gIE5nWm9uZSxcbiAgT25DaGFuZ2VzLFxuICBPbkRlc3Ryb3ksXG4gIFNpbXBsZUNoYW5nZXMsXG4gIFZpZXdDaGlsZFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7RGF0ZVJhbmdlLCBEeW5hbWljRGF0ZVN0YXR1c0VsZW1lbnQsIER5bmFtaWNEYXRlU3RhdHVzRWxlbWVudElucHV0LCBFbGVtZW50c0ZhY3Rvcnl9IGZyb20gJ3JhYWluLXVpJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAncmFhaW4tZGF0ZS1keW5hbWljJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3JhYWluLWRhdGUtZHluYW1pYy5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3JhYWluLWRhdGUtZHluYW1pYy5jb21wb25lbnQuc2NzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBSYWFpbkRhdGVEeW5hbWljQ29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3Q2hlY2tlZCwgT25EZXN0cm95LCBPbkNoYW5nZXMge1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBwb2ludHM6IHtcbiAgICBsYWJlbDogc3RyaW5nLFxuICAgIHN0eWxlOiBzdHJpbmcsXG4gICAgdmFsdWVzOiB7IGRhdGU6IERhdGUsIHZhbHVlOiBudW1iZXIgfVtdLFxuICB9W107XG5cbiAgQElucHV0KClcbiAgcHVibGljIGZvY3VzRGF0ZTogRGF0ZTtcbiAgQElucHV0KClcbiAgcHVibGljIGZvY3VzUmFuZ2U6IERhdGVSYW5nZTtcbiAgQElucHV0KClcbiAgcHVibGljIHdpdGhvdXRBbGw6IGJvb2xlYW47XG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBjdXJyZW50SGVpZ2h0OiBudW1iZXI7XG4gIHB1YmxpYyBjdXJyZW50V2lkdGg6IG51bWJlcjtcbiAgQElucHV0KClcbiAgcHVibGljIGZldGNoRGF0YTogKGZvY3VzRGF0ZTogRGF0ZSwgZm9jdXNSYW5nZTogRGF0ZVJhbmdlKSA9PlxuICAgIFByb21pc2U8eyBsYWJlbDogc3RyaW5nLCBzdHlsZTogc3RyaW5nLCB2YWx1ZXM6IHsgZGF0ZTogRGF0ZSwgdmFsdWU6IG51bWJlciB9W10gfVtdPjtcblxuICBAVmlld0NoaWxkKCdjYW52YXNFbGVtZW50JylcbiAgcHJvdGVjdGVkIGNhbnZhc0VsZW1lbnQ6IEVsZW1lbnRSZWY7XG4gIHByaXZhdGUgZHluYW1pY0RhdGVTdGF0dXNFbGVtZW50OiBEeW5hbWljRGF0ZVN0YXR1c0VsZW1lbnQ7XG4gIHByaXZhdGUgb25TaXplQ2hhbmdlZDtcbiAgcHJpdmF0ZSBjcmVhdGVkOiBib29sZWFuO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgbmdab25lOiBOZ1pvbmUpIHtcbiAgICB0aGlzLmZvY3VzRGF0ZSA9IG5ldyBEYXRlKClcbiAgICB0aGlzLmZvY3VzUmFuZ2UgPSBEYXRlUmFuZ2UuQ0VOVFVSWTtcbiAgICB0aGlzLm9uU2l6ZUNoYW5nZWQgPSAoKSA9PiB7XG4gICAgfTtcbiAgfVxuXG4gIHB1YmxpYyBuZ0FmdGVyVmlld0NoZWNrZWQoKTogdm9pZCB7XG4gICAgdGhpcy5jcmVhdGUoKTtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgdGhpcy5jaGFuZ2UoY2hhbmdlcyk7XG4gIH1cblxuICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5kZWxldGUoKTtcbiAgfVxuXG4gIGZvY3VzUHJldmlvdXMoKSB7XG4gICAgdGhpcy5keW5hbWljRGF0ZVN0YXR1c0VsZW1lbnQuZm9jdXNQcmV2aW91cygpO1xuICB9XG5cbiAgZm9jdXNSZXNldCgpIHtcbiAgICB0aGlzLmR5bmFtaWNEYXRlU3RhdHVzRWxlbWVudC5mb2N1c1Jlc2V0KCk7XG4gIH1cblxuICBmb2N1c05leHQoKSB7XG4gICAgdGhpcy5keW5hbWljRGF0ZVN0YXR1c0VsZW1lbnQuZm9jdXNOZXh0KCk7XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCd3aW5kb3c6cmVzaXplJywgWyckZXZlbnQnXSlcbiAgcHJpdmF0ZSBvblJlc2l6ZShldmVudDogYW55KTogdm9pZCB7XG4gICAgdGhpcy51cGRhdGVNYXBTaXplKCk7XG4gIH1cblxuICAvLyBNYXAgc3R5bGUgdG8gYSB2YWxpZCBDaGFydC5qcyBjaGFydCB0eXBlXG4gIHByaXZhdGUgbWFwU3R5bGVUb0NoYXJ0VHlwZShzdHlsZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAvLyBMaXN0IG9mIHZhbGlkIENoYXJ0LmpzIGNoYXJ0IHR5cGVzXG4gICAgY29uc3QgdmFsaWRDaGFydFR5cGVzID0gWydsaW5lJywgJ2JhcicsICdyYWRhcicsICdkb3VnaG51dCcsICdwaWUnLCAncG9sYXJBcmVhJywgJ2J1YmJsZScsICdzY2F0dGVyJ107XG5cbiAgICAvLyBJZiBzdHlsZSBpcyBhIHZhbGlkIGNoYXJ0IHR5cGUsIHJldHVybiBpdCwgb3RoZXJ3aXNlIGRlZmF1bHQgdG8gJ2xpbmUnXG4gICAgcmV0dXJuIHZhbGlkQ2hhcnRUeXBlcy5pbmNsdWRlcyhzdHlsZSkgPyBzdHlsZSA6ICdsaW5lJztcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlKCkge1xuICAgIGlmICh0aGlzLmNyZWF0ZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5jcmVhdGVkID0gdHJ1ZTtcblxuICAgIGNvbnN0IGZhY3RvcnkgPSBuZXcgRWxlbWVudHNGYWN0b3J5KCk7XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMuZHluYW1pY0RhdGVTdGF0dXNFbGVtZW50ID0gZmFjdG9yeS5jcmVhdGVEeW5hbWljRGF0ZVN0YXR1cyh0aGlzLmNhbnZhc0VsZW1lbnQubmF0aXZlRWxlbWVudCxcbiAgICAgICAgbmV3IER5bmFtaWNEYXRlU3RhdHVzRWxlbWVudElucHV0KGFzeW5jIChmb2N1c0RhdGUsIGZvY3VzUmFuZ2UpID0+IHtcbiAgICAgICAgICBjb25zdCBkYXRhID0gYXdhaXQgdGhpcy5mZXRjaERhdGEoZm9jdXNEYXRlLCBmb2N1c1JhbmdlKTtcbiAgICAgICAgICByZXR1cm4gZGF0YS5tYXAoaXRlbSA9PiAoe1xuICAgICAgICAgICAgLi4uaXRlbSxcbiAgICAgICAgICAgIHN0eWxlOiB0aGlzLm1hcFN0eWxlVG9DaGFydFR5cGUoaXRlbS5zdHlsZSlcbiAgICAgICAgICB9KSk7XG4gICAgICAgIH0pKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ2R5bmFtaWMgZm9jdXMgY3JlYXRpb24gaXNzdWUnLCBlKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGRlbGV0ZSgpIHtcbiAgICB0aGlzLmR5bmFtaWNEYXRlU3RhdHVzRWxlbWVudD8uY2hhcnQ/LmRlc3Ryb3koKTtcbiAgICB0aGlzLmNyZWF0ZWQgPSBmYWxzZTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgY2hhbmdlKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcbiAgICBhd2FpdCB0aGlzLmRlbGV0ZSgpO1xuICAgIHRoaXMuY3JlYXRlKCk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZU1hcFNpemUoKTogdm9pZCB7XG4gICAgY29uc3QgbWFwRGl2V2lkdGggPSB0aGlzLmNhbnZhc0VsZW1lbnQubmF0aXZlRWxlbWVudC5wYXJlbnROb2RlPy5wYXJlbnROb2RlWydjbGllbnRXaWR0aCddO1xuICAgIGNvbnN0IHBhZGRpbmcgPSAyMDtcbiAgICBsZXQgY3VycmVudFdpZHRoID0gbWFwRGl2V2lkdGggfHxcbiAgICAgICh3aW5kb3cuaW5uZXJXaWR0aCB8fCBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGggfHwgZG9jdW1lbnQuYm9keS5jbGllbnRXaWR0aCk7XG4gICAgY29uc3QgY3VycmVudEhlaWdodCA9IHRoaXMuY3VycmVudEhlaWdodCB8fFxuICAgICAgKHdpbmRvdy5pbm5lckhlaWdodCB8fCBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0IHx8IGRvY3VtZW50LmJvZHkuY2xpZW50SGVpZ2h0KTtcbiAgICBjdXJyZW50V2lkdGggLT0gcGFkZGluZztcbiAgICB0aGlzLmN1cnJlbnRXaWR0aCA9IGN1cnJlbnRXaWR0aDtcbiAgICB0aGlzLmN1cnJlbnRIZWlnaHQgPSBjdXJyZW50SGVpZ2h0O1xuXG4gICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHtcbiAgICAgIHRoaXMub25TaXplQ2hhbmdlZCgpO1xuICAgIH0pO1xuICB9XG59XG4iLCI8aW9uLWdyaWQ+XG4gIDxpb24tcm93PlxuICAgIDxpb24tY29sIGlkPVwiY29sLWNvbnRhaW5lclwiIHNpemUtc209XCIxMlwiPlxuICAgICAgPGRpdiBbc3R5bGUuaGVpZ2h0LnB4XT1cImN1cnJlbnRIZWlnaHRcIiBpZD1cImNhbnZhcy1jb250YWluZXJcIj5cbiAgICAgICAgPGNhbnZhcyAjY2FudmFzRWxlbWVudD48L2NhbnZhcz5cbiAgICAgIDwvZGl2PlxuICAgIDwvaW9uLWNvbD5cbiAgPC9pb24tcm93PlxuXG4gIDxpb24tcm93PlxuICAgIDxpb24tY29sIGNsYXNzPVwiaW9uLXRleHQtcmlnaHRcIiBvZmZzZXQtc209XCI0XCIgc2l6ZS1zbT1cIjFcIj5cbiAgICAgIDxpb24tYnV0dG9uIChjbGljayk9XCJmb2N1c1ByZXZpb3VzKClcIiBjb2xvcj1cIm1lZGl1bVwiIGZpbGw9XCJjbGVhclwiPlxuICAgICAgICA8aW9uLWljb24gbmFtZT1cImNoZXZyb24tYmFjay1vdXRsaW5lXCI+PC9pb24taWNvbj5cbiAgICAgIDwvaW9uLWJ1dHRvbj5cbiAgICA8L2lvbi1jb2w+XG4gICAgPGlvbi1jb2wgY2xhc3M9XCJpb24tdGV4dC1jZW50ZXJcIiBzaXplLXNtPVwiMlwiPlxuICAgICAgPGlvbi1idXR0b24gKGNsaWNrKT1cImZvY3VzUmVzZXQoKVwiICpuZ0lmPVwiIXdpdGhvdXRBbGxcIiBjb2xvcj1cIm1lZGl1bVwiIGZpbGw9XCJjbGVhclwiPlxuICAgICAgICBhbGwgZGF0ZXNcbiAgICAgIDwvaW9uLWJ1dHRvbj5cbiAgICA8L2lvbi1jb2w+XG4gICAgPGlvbi1jb2wgY2xhc3M9XCJpb24tdGV4dC1sZWZ0XCIgc2l6ZS1zbT1cIjFcIj5cbiAgICAgIDxpb24tYnV0dG9uIChjbGljayk9XCJmb2N1c05leHQoKVwiIGNvbG9yPVwibWVkaXVtXCIgZmlsbD1cImNsZWFyXCI+XG4gICAgICAgIDxpb24taWNvbiBuYW1lPVwiY2hldnJvbi1mb3J3YXJkLW91dGxpbmVcIj48L2lvbi1pY29uPlxuICAgICAgPC9pb24tYnV0dG9uPlxuICAgIDwvaW9uLWNvbD5cbiAgPC9pb24tcm93PlxuPC9pb24tZ3JpZD5cbiJdfQ==
117
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmFhaW4tZGF0ZS1keW5hbWljLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hcHAvc2hhcmVkL3JhYWluLWRhdGUtZHluYW1pYy9yYWFpbi1kYXRlLWR5bmFtaWMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vc3JjL2FwcC9zaGFyZWQvcmFhaW4tZGF0ZS1keW5hbWljL3JhYWluLWRhdGUtZHluYW1pYy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUwsU0FBUyxFQUVULFlBQVksRUFDWixZQUFZLEVBQ1osS0FBSyxFQUlMLE1BQU0sRUFFTixTQUFTLEVBQ1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFDLFNBQVMsRUFBNEIsNkJBQTZCLEVBQUUsZUFBZSxFQUFDLE1BQU0sVUFBVSxDQUFDOzs7O0FBTzdHLE1BQU0sT0FBTyx5QkFBeUI7SUErQnBDLFlBQW9CLE1BQWM7UUFBZCxXQUFNLEdBQU4sTUFBTSxDQUFRO1FBUjNCLGdCQUFXLEdBQUcsSUFBSSxZQUFZLEVBQVEsQ0FBQztRQVM1QyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksSUFBSSxFQUFFLENBQUE7UUFDM0IsSUFBSSxDQUFDLFVBQVUsR0FBRyxTQUFTLENBQUMsT0FBTyxDQUFDO1FBQ3BDLElBQUksQ0FBQyxhQUFhLEdBQUcsR0FBRyxFQUFFO1FBQzFCLENBQUMsQ0FBQztJQUNKLENBQUM7SUFFTSxrQkFBa0I7UUFDdkIsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO0lBQ2hCLENBQUM7SUFFTSxXQUFXLENBQUMsT0FBc0I7UUFDdkMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUN2QixDQUFDO0lBRU0sV0FBVztRQUNoQixJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7SUFDaEIsQ0FBQztJQUVELGFBQWE7UUFDWCxJQUFJLENBQUMsd0JBQXdCLENBQUMsYUFBYSxFQUFF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Q0FBQyxXQUFXLENBQUMsQ0FBQztRQUMzRixNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsYUFBYTtZQUN0QyxDQUFDLE1BQU0sQ0FBQyxXQUFXLElBQUksUUFBUSxDQUFDLGVBQWUsQ0FBQyxZQUFZLElBQUksUUFBUSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUM5RixZQUFZLElBQUksT0FBTyxDQUFDO1FBQ3hCLElBQUksQ0FBQyxZQUFZLEdBQUcsWUFBWSxDQUFDO1FBQ2pDLElBQUksQ0FBQyxhQUFhLEdBQUcsYUFBYSxDQUFDO1FBRW5DLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRTtZQUNuQixJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDdkIsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDOzt1SEFqSVUseUJBQXlCOzJHQUF6Qix5QkFBeUIsd2NDckJ0Qyx1OEJBMkJBOzRGRE5hLHlCQUF5QjtrQkFMckMsU0FBUzsrQkFDRSxvQkFBb0I7NkZBT3ZCLE1BQU07c0JBRFosS0FBSztnQkFRQyxTQUFTO3NCQURmLEtBQUs7Z0JBR0MsVUFBVTtzQkFEaEIsS0FBSztnQkFHQyxVQUFVO3NCQURoQixLQUFLO2dCQUdDLGFBQWE7c0JBRG5CLEtBQUs7Z0JBSUMsU0FBUztzQkFEZixLQUFLO2dCQUtDLFdBQVc7c0JBRGpCLE1BQU07Z0JBSUcsYUFBYTtzQkFEdEIsU0FBUzt1QkFBQyxlQUFlO2dCQXNDbEIsUUFBUTtzQkFEZixZQUFZO3VCQUFDLGVBQWUsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEFmdGVyVmlld0NoZWNrZWQsXG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBIb3N0TGlzdGVuZXIsXG4gIElucHV0LFxuICBOZ1pvbmUsXG4gIE9uQ2hhbmdlcyxcbiAgT25EZXN0cm95LFxuICBPdXRwdXQsXG4gIFNpbXBsZUNoYW5nZXMsXG4gIFZpZXdDaGlsZFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7RGF0ZVJhbmdlLCBEeW5hbWljRGF0ZVN0YXR1c0VsZW1lbnQsIER5bmFtaWNEYXRlU3RhdHVzRWxlbWVudElucHV0LCBFbGVtZW50c0ZhY3Rvcnl9IGZyb20gJ3JhYWluLXVpJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAncmFhaW4tZGF0ZS1keW5hbWljJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3JhYWluLWRhdGUtZHluYW1pYy5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3JhYWluLWRhdGUtZHluYW1pYy5jb21wb25lbnQuc2NzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBSYWFpbkRhdGVEeW5hbWljQ29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3Q2hlY2tlZCwgT25EZXN0cm95LCBPbkNoYW5nZXMge1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBwb2ludHM6IHtcbiAgICBsYWJlbDogc3RyaW5nLFxuICAgIHN0eWxlOiBzdHJpbmcsXG4gICAgdmFsdWVzOiB7IGRhdGU6IERhdGUsIHZhbHVlOiBudW1iZXIgfVtdLFxuICB9W107XG5cbiAgQElucHV0KClcbiAgcHVibGljIGZvY3VzRGF0ZTogRGF0ZTtcbiAgQElucHV0KClcbiAgcHVibGljIGZvY3VzUmFuZ2U6IERhdGVSYW5nZTtcbiAgQElucHV0KClcbiAgcHVibGljIHdpdGhvdXRBbGw6IGJvb2xlYW47XG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBjdXJyZW50SGVpZ2h0OiBudW1iZXI7XG4gIHB1YmxpYyBjdXJyZW50V2lkdGg6IG51bWJlcjtcbiAgQElucHV0KClcbiAgcHVibGljIGZldGNoRGF0YTogKGZvY3VzRGF0ZTogRGF0ZSwgZm9jdXNSYW5nZTogRGF0ZVJhbmdlKSA9PlxuICAgIFByb21pc2U8eyBsYWJlbDogc3RyaW5nLCBzdHlsZTogc3RyaW5nLCB2YWx1ZXM6IHsgZGF0ZTogRGF0ZSwgdmFsdWU6IG51bWJlciB9W10gfVtdPjtcblxuICBAT3V0cHV0KClcbiAgcHVibGljIGNoYW5nZWREYXRlID0gbmV3IEV2ZW50RW1pdHRlcjxEYXRlPigpO1xuXG4gIEBWaWV3Q2hpbGQoJ2NhbnZhc0VsZW1lbnQnKVxuICBwcm90ZWN0ZWQgY2FudmFzRWxlbWVudDogRWxlbWVudFJlZjtcbiAgcHJpdmF0ZSBkeW5hbWljRGF0ZVN0YXR1c0VsZW1lbnQ6IER5bmFtaWNEYXRlU3RhdHVzRWxlbWVudDtcbiAgcHJpdmF0ZSBvblNpemVDaGFuZ2VkO1xuICBwcml2YXRlIGNyZWF0ZWQ6IGJvb2xlYW47XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBuZ1pvbmU6IE5nWm9uZSkge1xuICAgIHRoaXMuZm9jdXNEYXRlID0gbmV3IERhdGUoKVxuICAgIHRoaXMuZm9jdXNSYW5nZSA9IERhdGVSYW5nZS5DRU5UVVJZO1xuICAgIHRoaXMub25TaXplQ2hhbmdlZCA9ICgpID0+IHtcbiAgICB9O1xuICB9XG5cbiAgcHVibGljIG5nQWZ0ZXJWaWV3Q2hlY2tlZCgpOiB2b2lkIHtcbiAgICB0aGlzLmNyZWF0ZSgpO1xuICB9XG5cbiAgcHVibGljIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICB0aGlzLmNoYW5nZShjaGFuZ2VzKTtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLmRlbGV0ZSgpO1xuICB9XG5cbiAgZm9jdXNQcmV2aW91cygpIHtcbiAgICB0aGlzLmR5bmFtaWNEYXRlU3RhdHVzRWxlbWVudC5mb2N1c1ByZXZpb3VzKCk7XG4gIH1cblxuICBmb2N1c1Jlc2V0KCkge1xuICAgIHRoaXMuZHluYW1pY0RhdGVTdGF0dXNFbGVtZW50LmZvY3VzUmVzZXQoKTtcbiAgfVxuXG4gIGZvY3VzTmV4dCgpIHtcbiAgICB0aGlzLmR5bmFtaWNEYXRlU3RhdHVzRWxlbWVudC5mb2N1c05leHQoKTtcbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ3dpbmRvdzpyZXNpemUnLCBbJyRldmVudCddKVxuICBwcml2YXRlIG9uUmVzaXplKGV2ZW50OiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLnVwZGF0ZU1hcFNpemUoKTtcbiAgfVxuXG4gIC8vIE1hcCBzdHlsZSB0byBhIHZhbGlkIENoYXJ0LmpzIGNoYXJ0IHR5cGVcbiAgcHJpdmF0ZSBtYXBTdHlsZVRvQ2hhcnRUeXBlKHN0eWxlOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIC8vIExpc3Qgb2YgdmFsaWQgQ2hhcnQuanMgY2hhcnQgdHlwZXNcbiAgICBjb25zdCB2YWxpZENoYXJ0VHlwZXMgPSBbJ2xpbmUnLCAnYmFyJywgJ3JhZGFyJywgJ2RvdWdobnV0JywgJ3BpZScsICdwb2xhckFyZWEnLCAnYnViYmxlJywgJ3NjYXR0ZXInXTtcblxuICAgIC8vIElmIHN0eWxlIGlzIGEgdmFsaWQgY2hhcnQgdHlwZSwgcmV0dXJuIGl0LCBvdGhlcndpc2UgZGVmYXVsdCB0byAnbGluZSdcbiAgICByZXR1cm4gdmFsaWRDaGFydFR5cGVzLmluY2x1ZGVzKHN0eWxlKSA/IHN0eWxlIDogJ2xpbmUnO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBjcmVhdGUoKSB7XG4gICAgaWYgKHRoaXMuY3JlYXRlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmNyZWF0ZWQgPSB0cnVlO1xuXG5cbiAgICBjb25zdCBtb250aFNhbXBsZURhdGEgPSBhd2FpdCB0aGlzLmZldGNoRGF0YShuZXcgRGF0ZSgpLCBEYXRlUmFuZ2UuTU9OVEgpO1xuXG4gICAgY29uc3QgZmFjdG9yeSA9IG5ldyBFbGVtZW50c0ZhY3RvcnkoKTtcbiAgICB0cnkge1xuICAgICAgdGhpcy5keW5hbWljRGF0ZVN0YXR1c0VsZW1lbnQgPSBmYWN0b3J5LmNyZWF0ZUR5bmFtaWNEYXRlU3RhdHVzKHRoaXMuY2FudmFzRWxlbWVudC5uYXRpdmVFbGVtZW50LFxuICAgICAgICBuZXcgRHluYW1pY0RhdGVTdGF0dXNFbGVtZW50SW5wdXQoYXN5bmMgKGZvY3VzRGF0ZSwgZm9jdXNSYW5nZSkgPT4ge1xuICAgICAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCB0aGlzLmZldGNoRGF0YShmb2N1c0RhdGUsIGZvY3VzUmFuZ2UpO1xuICAgICAgICAgIHJldHVybiBkYXRhLm1hcChpdGVtID0+ICh7XG4gICAgICAgICAgICAuLi5pdGVtLFxuICAgICAgICAgICAgc3R5bGU6IHRoaXMubWFwU3R5bGVUb0NoYXJ0VHlwZShpdGVtLnN0eWxlKVxuICAgICAgICAgIH0pKTtcbiAgICAgICAgfSwge1xuICAgICAgICAgIGRhdGFMZW5ndGg6IG1vbnRoU2FtcGxlRGF0YS5sZW5ndGgsXG4gICAgICAgICAgb25MYXN0Q2xpY2s6IChkYXRlOiBEYXRlKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmNoYW5nZWREYXRlLmVtaXQoZGF0ZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgY29uc29sZS53YXJuKCdkeW5hbWljIGZvY3VzIGNyZWF0aW9uIGlzc3VlJywgZSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBkZWxldGUoKSB7XG4gICAgdGhpcy5keW5hbWljRGF0ZVN0YXR1c0VsZW1lbnQ/LmNoYXJ0Py5kZXN0cm95KCk7XG4gICAgdGhpcy5jcmVhdGVkID0gZmFsc2U7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGNoYW5nZShjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XG4gICAgYXdhaXQgdGhpcy5kZWxldGUoKTtcbiAgICBhd2FpdCB0aGlzLmNyZWF0ZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVNYXBTaXplKCk6IHZvaWQge1xuICAgIGNvbnN0IG1hcERpdldpZHRoID0gdGhpcy5jYW52YXNFbGVtZW50Lm5hdGl2ZUVsZW1lbnQucGFyZW50Tm9kZT8ucGFyZW50Tm9kZVsnY2xpZW50V2lkdGgnXTtcbiAgICBjb25zdCBwYWRkaW5nID0gMjA7XG4gICAgbGV0IGN1cnJlbnRXaWR0aCA9IG1hcERpdldpZHRoIHx8XG4gICAgICAod2luZG93LmlubmVyV2lkdGggfHwgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRoIHx8IGRvY3VtZW50LmJvZHkuY2xpZW50V2lkdGgpO1xuICAgIGNvbnN0IGN1cnJlbnRIZWlnaHQgPSB0aGlzLmN1cnJlbnRIZWlnaHQgfHxcbiAgICAgICh3aW5kb3cuaW5uZXJIZWlnaHQgfHwgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodCB8fCBkb2N1bWVudC5ib2R5LmNsaWVudEhlaWdodCk7XG4gICAgY3VycmVudFdpZHRoIC09IHBhZGRpbmc7XG4gICAgdGhpcy5jdXJyZW50V2lkdGggPSBjdXJyZW50V2lkdGg7XG4gICAgdGhpcy5jdXJyZW50SGVpZ2h0ID0gY3VycmVudEhlaWdodDtcblxuICAgIHRoaXMubmdab25lLnJ1bigoKSA9PiB7XG4gICAgICB0aGlzLm9uU2l6ZUNoYW5nZWQoKTtcbiAgICB9KTtcbiAgfVxufVxuIiwiPGlvbi1ncmlkPlxuICA8aW9uLXJvdz5cbiAgICA8aW9uLWNvbCBpZD1cImNvbC1jb250YWluZXJcIiBzaXplLXNtPVwiMTJcIj5cbiAgICAgIDxkaXYgW3N0eWxlLmhlaWdodC5weF09XCJjdXJyZW50SGVpZ2h0XCIgaWQ9XCJjYW52YXMtY29udGFpbmVyXCI+XG4gICAgICAgIDxjYW52YXMgI2NhbnZhc0VsZW1lbnQ+PC9jYW52YXM+XG4gICAgICA8L2Rpdj5cbiAgICA8L2lvbi1jb2w+XG4gIDwvaW9uLXJvdz5cblxuICA8aW9uLXJvdz5cbiAgICA8aW9uLWNvbCBjbGFzcz1cImlvbi10ZXh0LXJpZ2h0XCIgb2Zmc2V0LXNtPVwiNFwiIHNpemUtc209XCIxXCI+XG4gICAgICA8aW9uLWJ1dHRvbiAoY2xpY2spPVwiZm9jdXNQcmV2aW91cygpXCIgY29sb3I9XCJtZWRpdW1cIiBmaWxsPVwiY2xlYXJcIj5cbiAgICAgICAgPGlvbi1pY29uIG5hbWU9XCJjaGV2cm9uLWJhY2stb3V0bGluZVwiPjwvaW9uLWljb24+XG4gICAgICA8L2lvbi1idXR0b24+XG4gICAgPC9pb24tY29sPlxuICAgIDxpb24tY29sIGNsYXNzPVwiaW9uLXRleHQtY2VudGVyXCIgc2l6ZS1zbT1cIjJcIj5cbiAgICAgIDxpb24tYnV0dG9uIChjbGljayk9XCJmb2N1c1Jlc2V0KClcIiAqbmdJZj1cIiF3aXRob3V0QWxsXCIgY29sb3I9XCJtZWRpdW1cIiBmaWxsPVwiY2xlYXJcIj5cbiAgICAgICAgYWxsIGRhdGVzXG4gICAgICA8L2lvbi1idXR0b24+XG4gICAgPC9pb24tY29sPlxuICAgIDxpb24tY29sIGNsYXNzPVwiaW9uLXRleHQtbGVmdFwiIHNpemUtc209XCIxXCI+XG4gICAgICA8aW9uLWJ1dHRvbiAoY2xpY2spPVwiZm9jdXNOZXh0KClcIiBjb2xvcj1cIm1lZGl1bVwiIGZpbGw9XCJjbGVhclwiPlxuICAgICAgICA8aW9uLWljb24gbmFtZT1cImNoZXZyb24tZm9yd2FyZC1vdXRsaW5lXCI+PC9pb24taWNvbj5cbiAgICAgIDwvaW9uLWJ1dHRvbj5cbiAgICA8L2lvbi1jb2w+XG4gIDwvaW9uLXJvdz5cbjwvaW9uLWdyaWQ+XG4iXX0=
@@ -74,7 +74,7 @@ export class RefreshManager {
74
74
  async setPeriod(begin, end) {
75
75
  this.begin = begin;
76
76
  this.end = end;
77
- return this.refreshCounts();
77
+ await this.refreshCounts();
78
78
  }
79
79
  async refresh(launchQualityAfter, dataInternal) {
80
80
  if (!this.begin || !this.end) {
@@ -117,16 +117,10 @@ export class RefreshManager {
117
117
  this.removeDuplicate = b;
118
118
  }
119
119
  async refreshCounts() {
120
- const counts = await this.profileService.getCounts(this.rainNode.id, {
120
+ this.countsPeriod = await this.profileService.getCounts(this.rainNode.id, {
121
121
  range: 'day',
122
122
  periodBegin: this.begin
123
123
  });
124
- this.countsPeriod = {
125
- radarMeasures: 10 * Math.round(counts.radarMeasures.reduce((partialSum, a) => partialSum + a.x, 0)) / 10,
126
- gaugeMeasures: 10 * Math.round(counts.gaugeMeasures.reduce((partialSum, a) => partialSum + a.x, 0)) / 10,
127
- computationsByTeam: counts.computationsByTeam.reduce((partialSum, a) => partialSum + a.x, 0),
128
- queueRunning: counts.queueRunning,
129
- };
130
124
  return this.countsPeriod;
131
125
  }
132
126
  getRainComputationQualityTarget(frameset) {
@@ -232,4 +226,4 @@ export class RefreshManager {
232
226
  await this.compareManager.setGauges();
233
227
  }
234
228
  }
235
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUmVmcmVzaE1hbmFnZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXBwL3NoYXJlZC90b29scy9SZWZyZXNoTWFuYWdlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUMsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFDL0MsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBRXpDLE9BQU8sRUFBcUIsbUJBQW1CLEVBQUMsTUFBTSxVQUFVLENBQUM7QUFLakUsTUFBTSxPQUFPLGNBQWM7SUFpQnpCLFlBQ1ksUUFBa0IsRUFDbEIsWUFBMEIsRUFDMUIsY0FBOEIsRUFDOUIsY0FBOEIsRUFDOUIsbUJBQWlGLEVBQ2pGLGFBQXdELEVBQ3hELFdBQXdFO1FBTnhFLGFBQVEsR0FBUixRQUFRLENBQVU7UUFDbEIsaUJBQVksR0FBWixZQUFZLENBQWM7UUFDMUIsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQzlCLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQUM5Qix3QkFBbUIsR0FBbkIsbUJBQW1CLENBQThEO1FBQ2pGLGtCQUFhLEdBQWIsYUFBYSxDQUEyQztRQUN4RCxnQkFBVyxHQUFYLFdBQVcsQ0FBNkQ7UUFFbEYsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksT0FBTyxFQUFPLENBQUM7UUFDNUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ2xCLENBQUM7SUFFTSxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQVU7UUFDNUIsT0FBTyxJQUFJLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUN6RCxDQUFDO0lBRUQsUUFBUTtRQUVOLElBQUksQ0FBQyxZQUFZLEdBQUcsRUFBRSxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxFQUFFLENBQUM7UUFD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aUJBQWlCLENBQUMsQ0FBQzthQUM5RTtpQkFBTTtnQkFDTCxvQkFBb0IsR0FBRyxNQUFNLElBQUksQ0FBQyxjQUFjO3FCQUM3QyxtQ0FBbUMsQ0FBQyxRQUFRLENBQUMsRUFBRSxFQUFFLE1BQU0sQ0FBQyxpQkFBaUIsRUFBRSxNQUFNLENBQUMsZUFBZSxDQUFDLENBQUM7YUFDdkc7WUFFRCxJQUFJLG9CQUFvQixFQUFFO2dCQUN4Qiw2QkFBNkIsQ0FBQyx5QkFBeUIsQ0FBQyxvQkFBb0IsRUFBRSxLQUFLLENBQUMsQ0FBQztnQkFFckYsSUFBSSxDQUFDLHNCQUFzQixHQUFHLG9CQUFvQixDQUFDLElBQUksQ0FBQztnQkFDeEQsSUFBSSxDQUFDLDBCQUEwQixHQUFHLG9CQUFvQixDQUFDLFVBQVUsQ0FBQztnQkFDbEUsSUFBSSxDQUFDLDRCQUE0QixHQUFHLG9CQUFvQixDQUFDLFVBQVUsQ0FBQztnQkFDcEUsSUFBSSxDQUFDLCtCQUErQixHQUFHLG9CQUFvQixDQUFDLGFBQWEsQ0FBQzthQUMzRTtTQUNGO1FBQUMsT0FBTyxDQUFDLEVBQUU7WUFDVixPQUFPLENBQUMsSUFBSSxDQUFDLDhCQUE4QixFQUFFLE1BQU0sQ0FBQyxpQkFBaUIsRUFBRSxDQUFDLENBQUMsQ0FBQztTQUMzRTtRQUVELE9BQU8sNkJBQTZCLENBQUM7SUFDdkMsQ0FBQztJQUVTLEtBQUssQ0FBQyxxQkFBcUIsQ0FBQyxRQUFrQjtRQUN0RCxNQUFNLElBQUksQ0FBQyxjQUFjLENBQUMscUJBQXFCLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDMUQsTUFBTSxJQUFJLENBQUMsY0FBYyxDQUFDLFNBQVMsRUFBRSxDQUFDO0lBQ3hDLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7RnJhbWVTZXR9IGZyb20gJy4vRnJhbWVTZXQnO1xuaW1wb3J0IHtTdWJqZWN0LCB0YWtlVW50aWwsIHRpbWVyfSBmcm9tICdyeGpzJztcbmltcG9ydCB7c3dpdGNoTWFwfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQge1JhaW5Ob2RlfSBmcm9tICdyYWFpbi1tb2RlbCc7XG5pbXBvcnQge1RpbWVmcmFtZUNvbnRhaW5lciwgVGltZWZyYW1lQ29udGFpbmVyc30gZnJvbSAncmFhaW4tdWknO1xuaW1wb3J0IHtSYWRhclNlcnZpY2V9IGZyb20gJy4uL3JhZGFyLnNlcnZpY2UnO1xuaW1wb3J0IHtQcm9maWxlU2VydmljZX0gZnJvbSAnLi4vcHJvZmlsZS5zZXJ2aWNlJztcbmltcG9ydCB7Q29tcGFyZU1hbmFnZXJ9IGZyb20gJy4vQ29tcGFyZU1hbmFnZXInO1xuXG5leHBvcnQgY2xhc3MgUmVmcmVzaE1hbmFnZXIge1xuXG4gIHB1YmxpYyByYWluQ29tcHV0YXRpb25NYXBEYXRlOiBEYXRlO1xuICBwdWJsaWMgcmFpbkNvbXB1dGF0aW9uTWFwRG9uZURhdGU6IERhdGU7XG4gIHB1YmxpYyByYWluQ29tcHV0YXRpb25NYXBMYXVuY2hlZEJ5OiBzdHJpbmc7XG4gIHB1YmxpYyByYWluQ29tcHV0YXRpb25NYXBUaW1lU3BlbnRJbk1zOiBudW1iZXI7XG5cbiAgcHJvdGVjdGVkIGNsb3NlUmVmcmVzaFRpbWVyOiBTdWJqZWN0PGFueT47XG4gIHByb3RlY3RlZCBjb3VudHNQZXJpb2Q6IGFueTtcbiAgcHJvdGVjdGVkIHRpbWVmcmFtZXNGcm9tUmFkYXJzOiBGcmFtZVNldFtdO1xuICBwcm90ZWN0ZWQgdGltZWZyYW1lc0Zyb21SYWRhcnNFeHRlbmRlZDogRnJhbWVTZXRbXTtcbiAgcHJvdGVjdGVkIHRpbWVmcmFtZURhdGVzOiBEYXRlW107XG4gIHByb3RlY3RlZCBiZWdpbjogRGF0ZTtcbiAgcHJvdGVjdGVkIGVuZDogRGF0ZTtcbiAgcHJvdGVjdGVkIHJlbW92ZUR1cGxpY2F0ZTogYm9vbGVhbjtcbiAgcHJvdGVjdGVkIGRhdGFJbnRlcm5hbDogYm9vbGVhbjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcm90ZWN0ZWQgcmFpbk5vZGU6IFJhaW5Ob2RlLFxuICAgIHByb3RlY3RlZCByYWRhclNlcnZpY2U6IFJhZGFyU2VydmljZSxcbiAgICBwcm90ZWN0ZWQgcHJvZmlsZVNlcnZpY2U6IFByb2ZpbGVTZXJ2aWNlLFxuICAgIHByb3RlY3RlZCBjb21wYXJlTWFuYWdlcjogQ29tcGFyZU1hbmFnZXIsXG4gICAgcHJvdGVjdGVkIG9uUmVmcmVzaEluUHJvZ3Jlc3M6IChjb3VudFBlcmlvZHM6IGFueSwgdGltZWZyYW1lRGF0ZXM6IERhdGVbXSkgPT4gUHJvbWlzZTx2b2lkPixcbiAgICBwcm90ZWN0ZWQgb25SZWZyZXNoRG9uZTogKHRpbWVmcmFtZURhdGVzOiBEYXRlW10pID0+IFByb21pc2U8dm9pZD4sXG4gICAgcHJvdGVjdGVkIG9uRmV0Y2hEb25lOiAodGltZWZyYW1lQ29udGFpbmVyczogVGltZWZyYW1lQ29udGFpbmVycykgPT4gUHJvbWlzZTx2b2lkPixcbiAgKSB7XG4gICAgdGhpcy5jbG9zZVJlZnJlc2hUaW1lciA9IG5ldyBTdWJqZWN0PGFueT4oKTtcbiAgICB0aGlzLmNsZWFuQWxsKCk7XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIERlbGF5KG1zOiBudW1iZXIpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIG1zKSk7XG4gIH1cblxuICBjbGVhbkFsbCgpIHtcblxuICAgIHRoaXMuY291bnRzUGVyaW9kID0ge307XG4gICAgdGhpcy50aW1lZnJhbWVzRnJvbVJhZGFycyA9IFtdO1xuICAgIHRoaXMudGltZWZyYW1lc0Zyb21SYWRhcnNFeHRlbmRlZCA9IFtdO1xuICAgIHRoaXMudGltZWZyYW1lRGF0ZXMgPSBbXTtcbiAgICB0aGlzLnJlbW92ZUR1cGxpY2F0ZSA9IHRydWU7XG4gICAgdGhpcy5jbG9zZVJlZnJlc2hUaW1lcj8ubmV4dChudWxsKTtcbiAgfVxuXG4gIGFzeW5jIGZldGNoKGRhdGVTaG93bjogRGF0ZSwgd2l0aEdhdWdlc01lYXN1cmVzOiBib29sZWFuLCBjdW11bGF0aXZlSG91cnMgPSAwKTogUHJvbWlzZTxGcmFtZVNldD4ge1xuICAgIC8vIHNldCB0aGUgdGFyZ2V0XG4gICAgY29uc3QgY3VycmVudHMgPSB0aGlzLnRpbWVmcmFtZXNGcm9tUmFkYXJzRXh0ZW5kZWQuZmlsdGVyKHQgPT4gdC5kYXRlLmdldFRpbWUoKSA9PT0gZGF0ZVNob3duLmdldFRpbWUoKSk7XG4gICAgaWYgKGN1cnJlbnRzLmxlbmd0aCAhPT0gMSkge1xuICAgICAgLy8gY29uc29sZS5sb2coJ25vIGNvcnJlY3QgZGF0ZVNob3duJywgZGF0ZVNob3duLCB0aGlzLnRpbWVmcmFtZXNGcm9tUmFkYXJzRXh0ZW5kZWQpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIGJ1aWxkIFtjdXJyZW50LCBwcmV2aW91cywgbmV4dF0gdGFyZ2V0c1xuICAgIGNvbnN0IGN1cnJlbnQ6IEZyYW1lU2V0ID0gY3VycmVudHNbMF07XG4gICAgY29uc3QgcG9zaXRpb24gPSB0aGlzLnRpbWVmcmFtZXNGcm9tUmFkYXJzRXh0ZW5kZWQuaW5kZXhPZihjdXJyZW50KTtcbiAgICBsZXQgcHJldmlvdXM6IEZyYW1lU2V0ID0gbnVsbCwgbmV4dDogRnJhbWVTZXQgPSBudWxsO1xuICAgIGNvbnN0IHBvc2l0aW9uTmFtZXM6IHN0cmluZ1tdID0gWycnICsgY3VycmVudC5kYXRlLmdldFRpbWUoKV07XG4gICAgY29uc3QgZnJhbWVTZXRzID0ge307XG4gICAgZnJhbWVTZXRzWycnICsgY3VycmVudC5kYXRlLmdldFRpbWUoKV0gPSBjdXJyZW50O1xuICAgIGlmIChwb3NpdGlvbiA+IDApIHtcbiAgICAgIHByZXZpb3VzID0gdGhpcy50aW1lZnJhbWVzRnJvbVJhZGFyc0V4dGVuZGVkW3Bvc2l0aW9uIC0gMV07XG4gICAgICBwb3NpdGlvbk5hbWVzLnB1c2goJycgKyBwcmV2aW91cy5kYXRlLmdldFRpbWUoKSk7XG4gICAgICBmcmFtZVNldHNbJycgKyBwcmV2aW91cy5kYXRlLmdldFRpbWUoKV0gPSBwcmV2aW91cztcbiAgICB9XG4gICAgaWYgKHBvc2l0aW9uIDwgdGhpcy50aW1lZnJhbWVzRnJvbVJhZGFyc0V4dGVuZGVkLmxlbmd0aCkge1xuICAgICAgbmV4dCA9IHRoaXMudGltZWZyYW1lc0Zyb21SYWRhcnNFeHRlbmRlZFtwb3NpdGlvbiArIDFdO1xuICAgICAgaWYgKG5leHQ/LmRhdGUpIHtcbiAgICAgICAgcG9zaXRpb25OYW1lcy5wdXNoKCcnICsgbmV4dC5kYXRlLmdldFRpbWUoKSk7XG4gICAgICAgIGZyYW1lU2V0c1snJyArIG5leHQuZGF0ZS5nZXRUaW1lKCldID0gbmV4dDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBhbGlnbiBNYXAgd2l0aCB0YXJnZXRzXG4gICAgY29uc3QgdGFyZ2V0czoge1xuICAgICAgZGF0ZTogRGF0ZSxcbiAgICAgIHJhaW5Db21wdXRhdGlvbklkOiBzdHJpbmcsXG4gICAgICByYWluQ29tcHV0YXRpb25RdWFsaXR5SWQ6IHN0cmluZyxcbiAgICAgIGN1bXVsYXRpdmVIb3VyczogbnVtYmVyLFxuICAgIH1bXSA9IFtdO1xuICAgIGZvciAoY29uc3QgcG9zaXRpb25OYW1lIG9mIHBvc2l0aW9uTmFtZXMpIHtcbiAgICAgIGlmIChmcmFtZVNldHNbcG9zaXRpb25OYW1lXSkge1xuICAgICAgICBjb25zdCB0YXJnZXQgPSBmcmFtZVNldHNbcG9zaXRpb25OYW1lXTtcbiAgICAgICAgdGFyZ2V0LnJhaW5Db21wdXRhdGlvblF1YWxpdHlJZCA9IHRoaXMuZ2V0UmFpbkNvbXB1dGF0aW9uUXVhbGl0eVRhcmdldCh0YXJnZXQpO1xuICAgICAgICB0YXJnZXQud2l0aEdhdWdlID0gd2l0aEdhdWdlc01lYXN1cmVzO1xuICAgICAgICB0YXJnZXQuY3VtdWxhdGl2ZUhvdXJzID0gY3VtdWxhdGl2ZUhvdXJzO1xuICAgICAgICB0YXJnZXRzLnB1c2godGFyZ2V0KTtcblxuICAgICAgICBjb25zdCB0aW1lZnJhbWVDb250YWluZXJzID0gYXdhaXQgdGhpcy5yZWZyZXNoTWFwVGltZWZyYW1lQ29udGFpbmVycyh0YXJnZXQpO1xuXG4gICAgICAgIGlmIChwb3NpdGlvbk5hbWUgPT09ICgnJyArIGN1cnJlbnQuZGF0ZS5nZXRUaW1lKCkpKSB7XG4gICAgICAgICAgdGhpcy5vbkZldGNoRG9uZSh0aW1lZnJhbWVDb250YWluZXJzKS50aGVuKGlnbm9yZWQgPT4ge1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gYWxpZ24gQ29tcGFyZSB3aXRoIGN1cnJlbnQgZGF0ZVxuICAgIHRoaXMucmVmcmVzaENvbXBhcmVRdWFsaXR5KGN1cnJlbnQpLnRoZW4oKGlnbm9yZWQpID0+IHtcbiAgICB9KTtcblxuICAgIHJldHVybiBjdXJyZW50O1xuICB9XG5cbiAgYXN5bmMgc2V0UGVyaW9kKGJlZ2luOiBEYXRlLCBlbmQ6IERhdGUpIHtcbiAgICB0aGlzLmJlZ2luID0gYmVnaW47XG4gICAgdGhpcy5lbmQgPSBlbmQ7XG5cbiAgICByZXR1cm4gdGhpcy5yZWZyZXNoQ291bnRzKCk7XG4gIH1cblxuICBhc3luYyByZWZyZXNoKGxhdW5jaFF1YWxpdHlBZnRlcjogYm9vbGVhbiwgZGF0YUludGVybmFsOiBib29sZWFuKSB7XG5cbiAgICBpZiAoIXRoaXMuYmVnaW4gfHwgIXRoaXMuZW5kKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ25lZWQgYSBwZXJpb2QnKTtcbiAgICB9XG5cbiAgICB0aGlzLmRhdGFJbnRlcm5hbCA9IGRhdGFJbnRlcm5hbDtcbiAgICB0aGlzLmNvbXBhcmVNYW5hZ2VyLmNsZWFuQWxsKCk7XG4gICAgbGV0IHJlZnJlc2hJblByb2dyZXNzID0gZmFsc2U7XG4gICAgbGV0IHJlZnJlc2hEb25lID0gZmFsc2U7XG5cbiAgICB0aW1lcigxMDAwLCAxNTAwMClcbiAgICAgIC5waXBlKFxuICAgICAgICBzd2l0Y2hNYXAoYXN5bmMgKCkgPT4ge1xuICAgICAgICAgIGlmIChyZWZyZXNoSW5Qcm9ncmVzcykge1xuICAgICAgICAgICAgcmV0dXJuIHJlZnJlc2hEb25lO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJlZnJlc2hJblByb2dyZXNzID0gdHJ1ZTtcbiAgICAgICAgICB0aGlzLm9uUmVmcmVzaEluUHJvZ3Jlc3MoYXdhaXQgdGhpcy5yZWZyZXNoQ291bnRzKCksIHRoaXMudGltZWZyYW1lRGF0ZXMpLnRoZW4oaWdub3JlZCA9PiB7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmVmcmVzaERvbmUgPSBhd2FpdCB0aGlzLnJlZnJlc2hQZXJpb2RJbnNpZGVQb2xsaW5nKCk7XG4gICAgICAgICAgaWYgKCFyZWZyZXNoRG9uZSkge1xuICAgICAgICAgICAgcmVmcmVzaEluUHJvZ3Jlc3MgPSBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHJlZnJlc2hEb25lO1xuICAgICAgICB9KSxcbiAgICAgICAgdGFrZVVudGlsKHRoaXMuY2xvc2VSZWZyZXNoVGltZXIpLFxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSh7XG4gICAgICAgIG5leHQ6IGFzeW5jIChyZWZyZXNoRmluaXNoZWQ6IGJvb2xlYW4pID0+IHtcbiAgICAgICAgICBpZiAocmVmcmVzaEZpbmlzaGVkKSB7XG4gICAgICAgICAgICB0aGlzLmNsb3NlUmVmcmVzaFRpbWVyLm5leHQobnVsbCk7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLm9uUmVmcmVzaERvbmUodGhpcy50aW1lZnJhbWVEYXRlcyk7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBlcnJvcjogKGVycm9yOiBhbnkpID0+IHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdlcnJvciBpbiByZWZyZXNoJywgZXJyb3IpO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICB9XG5cbiAgYXN5bmMgc2VsZWN0R2F1Z2UoZ2F1Z2VJZDogc3RyaW5nLCBjb21wYXJlSW5kZXg6IG51bWJlcikge1xuICAgIHJldHVybiB0aGlzLmNvbXBhcmVNYW5hZ2VyLnNlbGVjdEdhdWdlKGdhdWdlSWQsIGNvbXBhcmVJbmRleCk7XG4gIH1cblxuICBzZXRSZW1vdmVEdXBsaWNhdGUoYjogYm9vbGVhbikge1xuICAgIHRoaXMucmVtb3ZlRHVwbGljYXRlID0gYjtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyByZWZyZXNoQ291bnRzKCkge1xuICAgIGNvbnN0IGNvdW50cyA9IGF3YWl0IHRoaXMucHJvZmlsZVNlcnZpY2UuZ2V0Q291bnRzKHRoaXMucmFpbk5vZGUuaWQsIHtcbiAgICAgIHJhbmdlOiAnZGF5JyxcbiAgICAgIHBlcmlvZEJlZ2luOiB0aGlzLmJlZ2luXG4gICAgfSk7XG4gICAgdGhpcy5jb3VudHNQZXJpb2QgPSB7XG4gICAgICByYWRhck1lYXN1cmVzOiAxMCAqIE1hdGgucm91bmQoY291bnRzLnJhZGFyTWVhc3VyZXMucmVkdWNlKChwYXJ0aWFsU3VtLCBhKSA9PiBwYXJ0aWFsU3VtICsgYS54LCAwKSkgLyAxMCxcbiAgICAgIGdhdWdlTWVhc3VyZXM6IDEwICogTWF0aC5yb3VuZChjb3VudHMuZ2F1Z2VNZWFzdXJlcy5yZWR1Y2UoKHBhcnRpYWxTdW0sIGEpID0+IHBhcnRpYWxTdW0gKyBhLngsIDApKSAvIDEwLFxuICAgICAgY29tcHV0YXRpb25zQnlUZWFtOiBjb3VudHMuY29tcHV0YXRpb25zQnlUZWFtLnJlZHVjZSgocGFydGlhbFN1bSwgYSkgPT4gcGFydGlhbFN1bSArIGEueCwgMCksXG4gICAgICBxdWV1ZVJ1bm5pbmc6IGNvdW50cy5xdWV1ZVJ1bm5pbmcsXG4gICAgfTtcbiAgICByZXR1cm4gdGhpcy5jb3VudHNQZXJpb2Q7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0UmFpbkNvbXB1dGF0aW9uUXVhbGl0eVRhcmdldChmcmFtZXNldDogRnJhbWVTZXQpOiBzdHJpbmcge1xuICAgIGlmIChmcmFtZXNldC5yYWluQ29tcHV0YXRpb25RdWFsaXRpZXMubGVuZ3RoIDw9IDApIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHJldHVybiBmcmFtZXNldC5yYWluQ29tcHV0YXRpb25RdWFsaXRpZXNbMF0uaWQ7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgcmVmcmVzaFBlcmlvZEluc2lkZVBvbGxpbmcoKTogUHJvbWlzZTxib29sZWFuPiB7XG5cbiAgICBsZXQgZG9uZSA9IGZhbHNlO1xuICAgIHRyeSB7XG4gICAgICBkb25lID0gdGhpcy5yZWZyZXNoQ2hlY2tJZkRvbmUoKTtcblxuICAgICAgLy8gYmVoaW5kIHJlZnJlc2hcbiAgICAgIGF3YWl0IHRoaXMucmVmcmVzaFRpbWVmcmFtZXNGcm9tUmFkYXJzKGRvbmUpO1xuICAgICAgdGhpcy5yZWZyZXNoR2xvYmFsQ29tcGFyZVJlcG9ydChkb25lKS50aGVuKGlnbm9yZWQgPT4ge1xuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiBkb25lO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGNvbnNvbGUud2FybihlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZG9uZTtcbiAgfVxuXG4gIHByb3RlY3RlZCByZWZyZXNoQ2hlY2tJZkRvbmUoKTogYm9vbGVhbiB7XG4gICAgLy8gY29uc29sZS5sb2coJ3JlZnJlc2hQZXJpb2RJbnNpZGVQb2xsaW5nJywgdGhpcy5jb3VudHNQZXJpb2QuY29tcHV0YXRpb25zQnlUZWFtLCB0aGlzLmNvdW50c1BlcmlvZC5yYWRhck1lYXN1cmVzKVxuICAgIC8vIHJldHVybiB0aGlzLmNvdW50c1BlcmlvZC5jb21wdXRhdGlvbnNCeVRlYW0gPT09IHRoaXMuY291bnRzUGVyaW9kLnJhZGFyTWVhc3VyZXM7XG4gICAgcmV0dXJuIHRoaXMuY291bnRzUGVyaW9kLnF1ZXVlUnVubmluZyA9PT0gMDtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyByZWZyZXNoVGltZWZyYW1lc0Zyb21SYWRhcnMoZG9uZTogYm9vbGVhbikge1xuXG4gICAgaWYgKCFkb25lKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGJlZ2luRXh0ZW5kZWQgPSBuZXcgRGF0ZSh0aGlzLmJlZ2luKTtcbiAgICAgIGNvbnN0IGVuZEV4dGVuZGVkID0gbmV3IERhdGUodGhpcy5lbmQpO1xuICAgICAgYmVnaW5FeHRlbmRlZC5zZXRNaW51dGVzKGJlZ2luRXh0ZW5kZWQuZ2V0TWludXRlcygpIC0gNyk7XG4gICAgICBlbmRFeHRlbmRlZC5zZXRNaW51dGVzKGVuZEV4dGVuZGVkLmdldE1pbnV0ZXMoKSArIDcpO1xuICAgICAgdGhpcy5yYWluTm9kZSA9IGF3YWl0IHRoaXMucHJvZmlsZVNlcnZpY2UuZ2V0UmFpblRpbWVmcmFtZSh0aGlzLnJhaW5Ob2RlLmlkLCBiZWdpbkV4dGVuZGVkLCBlbmRFeHRlbmRlZCwgdGhpcy5kYXRhSW50ZXJuYWwpO1xuXG4gICAgICB0aGlzLnRpbWVmcmFtZXNGcm9tUmFkYXJzRXh0ZW5kZWQgPSBhd2FpdCB0aGlzLnJhZGFyU2VydmljZS5nZXRUaW1lbGluZSh0aGlzLnJhaW5Ob2RlKTtcbiAgICAgIHRoaXMudGltZWZyYW1lc0Zyb21SYWRhcnMgPSB0aGlzLnRpbWVmcmFtZXNGcm9tUmFkYXJzRXh0ZW5kZWRcbiAgICAgICAgLmZpbHRlcigoZnJhbWVTZXQpID0+IHRoaXMuYmVnaW4uZ2V0VGltZSgpIDw9IGZyYW1lU2V0LmRhdGUuZ2V0VGltZSgpICYmIGZyYW1lU2V0LmRhdGUuZ2V0VGltZSgpIDw9IHRoaXMuZW5kLmdldFRpbWUoKSlcbiAgICAgICAgLnNvcnQoKGEsIGIpID0+IGEuZGF0ZS5nZXRUaW1lKCkgLSBiLmRhdGUuZ2V0VGltZSgpKTtcblxuICAgICAgY29uc29sZS5sb2coJ3RpbWVmcmFtZXNGcm9tUmFkYXJzRXh0ZW5kZWQ6JywgdGhpcy50aW1lZnJhbWVzRnJvbVJhZGFyc0V4dGVuZGVkKTtcblxuICAgICAgdGhpcy50aW1lZnJhbWVEYXRlcyA9IHRoaXMudGltZWZyYW1lc0Zyb21SYWRhcnMubWFwKGZyYW1lU2V0ID0+IGZyYW1lU2V0LmRhdGUpO1xuICAgICAgcmV0dXJuIHRoaXMudGltZWZyYW1lc0Zyb21SYWRhcnM7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgY29uc29sZS5lcnJvcigncmVmcmVzaFRpbWVmcmFtZXNGcm9tUmFkYXJzJywgZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIHJlZnJlc2hHbG9iYWxDb21wYXJlUmVwb3J0KGRvbmU6IGJvb2xlYW4pIHtcbiAgICBpZiAoIWRvbmUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgdGFyZ2V0cyA9IFtdO1xuICAgICAgZm9yIChjb25zdCBmcmFtZVNldCBvZiB0aGlzLnRpbWVmcmFtZXNGcm9tUmFkYXJzRXh0ZW5kZWQpIHtcbiAgICAgICAgY29uc3QgdGFyZ2V0ID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShmcmFtZVNldCkpO1xuICAgICAgICB0YXJnZXQuZGF0ZSA9IG5ldyBEYXRlKHRhcmdldC5kYXRlKTtcbiAgICAgICAgdGFyZ2V0LnJhaW5Db21wdXRhdGlvblF1YWxpdHlJZCA9IHRoaXMuZ2V0UmFpbkNvbXB1dGF0aW9uUXVhbGl0eVRhcmdldChmcmFtZVNldCk7XG4gICAgICAgIHRhcmdldHMucHVzaCh0YXJnZXQpO1xuICAgICAgfVxuICAgICAgYXdhaXQgdGhpcy5jb21wYXJlTWFuYWdlci5yZWZyZXNoR2xvYmFsQ29tcGFyZVF1YWxpdHkodGFyZ2V0cywgIXRoaXMucmVtb3ZlRHVwbGljYXRlKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdyZWZyZXNoR2xvYmFsQ29tcGFyZVJlcG9ydCcsIGUpO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyByZWZyZXNoTWFwVGltZWZyYW1lQ29udGFpbmVycyh0YXJnZXQ6IHtcbiAgICBkYXRlOiBEYXRlLFxuICAgIHJhaW5Db21wdXRhdGlvbklkOiBzdHJpbmcsXG4gICAgd2l0aEdhdWdlOiBib29sZWFuLFxuICAgIGN1bXVsYXRpdmVIb3VyczogbnVtYmVyXG4gIH0pIHtcbiAgICBpZiAoIXRhcmdldCB8fCAhdGFyZ2V0LnJhaW5Db21wdXRhdGlvbklkKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ1BiIHdpdGggcmVmcmVzaE1hcFRpbWVmcmFtZUNvbnRhaW5lcnMgaW5zaWdodHMnKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCByYWluTm9kZSA9IHRoaXMucmFpbk5vZGU7XG4gICAgY29uc3QgY29udGFpbmVyczogVGltZWZyYW1lQ29udGFpbmVyW10gPSBbXTtcbiAgICBjb25zdCBuZXdDcmVhdGVkVGltZWZyYW1lQ29udGFpbmVycyA9IG5ldyBUaW1lZnJhbWVDb250YWluZXJzKGNvbnRhaW5lcnMpO1xuICAgIHRyeSB7XG4gICAgICBsZXQgcmFpbk5vZGVDYXJ0ZXNpYW5NYXA7XG5cbiAgICAgIGlmICghdGFyZ2V0LmN1bXVsYXRpdmVIb3Vycykge1xuICAgICAgICByYWluTm9kZUNhcnRlc2lhbk1hcCA9IGF3YWl0IHRoaXMucHJvZmlsZVNlcnZpY2VcbiAgICAgICAgICAuZ2V0UmFpbkNvbXB1dGF0aW9uQ2FydGVzaWFuTWFwQnlJZChyYWluTm9kZS5pZCwgdGFyZ2V0LnJhaW5Db21wdXRhdGlvbklkKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJhaW5Ob2RlQ2FydGVzaWFuTWFwID0gYXdhaXQgdGhpcy5wcm9maWxlU2VydmljZVxuICAgICAgICAgIC5nZXRSYWluQ29tcHV0YXRpb25DdW11bGF0aXZlTWFwQnlJZChyYWluTm9kZS5pZCwgdGFyZ2V0LnJhaW5Db21wdXRhdGlvbklkLCB0YXJnZXQuY3VtdWxhdGl2ZUhvdXJzKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHJhaW5Ob2RlQ2FydGVzaWFuTWFwKSB7XG4gICAgICAgIG5ld0NyZWF0ZWRUaW1lZnJhbWVDb250YWluZXJzLmFkZEZyb21SYWluQ29tcHV0YXRpb25NYXAocmFpbk5vZGVDYXJ0ZXNpYW5NYXAsIGZhbHNlKTtcblxuICAgICAgICB0aGlzLnJhaW5Db21wdXRhdGlvbk1hcERhdGUgPSByYWluTm9kZUNhcnRlc2lhbk1hcC5kYXRlO1xuICAgICAgICB0aGlzLnJhaW5Db21wdXRhdGlvbk1hcERvbmVEYXRlID0gcmFpbk5vZGVDYXJ0ZXNpYW5NYXAuaXNEb25lRGF0ZTtcbiAgICAgICAgdGhpcy5yYWluQ29tcHV0YXRpb25NYXBMYXVuY2hlZEJ5ID0gcmFpbk5vZGVDYXJ0ZXNpYW5NYXAubGF1bmNoZWRCeTtcbiAgICAgICAgdGhpcy5yYWluQ29tcHV0YXRpb25NYXBUaW1lU3BlbnRJbk1zID0gcmFpbk5vZGVDYXJ0ZXNpYW5NYXAudGltZVNwZW50SW5NcztcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ1BiIHdpdGggY29tcHV0YXRpb25zIGZvciBpZDonLCB0YXJnZXQucmFpbkNvbXB1dGF0aW9uSWQsIGUpO1xuICAgIH1cblxuICAgIHJldHVybiBuZXdDcmVhdGVkVGltZWZyYW1lQ29udGFpbmVycztcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyByZWZyZXNoQ29tcGFyZVF1YWxpdHkoZnJhbWVTZXQ6IEZyYW1lU2V0KSB7XG4gICAgYXdhaXQgdGhpcy5jb21wYXJlTWFuYWdlci5yZWZyZXNoQ29tcGFyZVF1YWxpdHkoZnJhbWVTZXQpO1xuICAgIGF3YWl0IHRoaXMuY29tcGFyZU1hbmFnZXIuc2V0R2F1Z2VzKCk7XG4gIH1cbn1cbiJdfQ==
229
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUmVmcmVzaE1hbmFnZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXBwL3NoYXJlZC90b29scy9SZWZyZXNoTWFuYWdlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUMsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFDL0MsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBRXpDLE9BQU8sRUFBcUIsbUJBQW1CLEVBQUMsTUFBTSxVQUFVLENBQUM7QUFNakUsTUFBTSxPQUFPLGNBQWM7SUFvQnpCLFlBQ1ksUUFBa0IsRUFDbEIsWUFBMEIsRUFDMUIsY0FBOEIsRUFDOUIsY0FBOEIsRUFDOUIsbUJBR2lDLEVBQ2pDLGFBQXdELEVBQ3hELFdBQXdFO1FBVHhFLGFBQVEsR0FBUixRQUFRLENBQVU7UUFDbEIsaUJBQVksR0FBWixZQUFZLENBQWM7UUFDMUIsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQzlCLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQUM5Qix3QkFBbUIsR0FBbkIsbUJBQW1CLENBR2M7UUFDakMsa0JBQWEsR0FBYixhQUFhLENBQTJDO1FBQ3hELGdCQUFXLEdBQVgsV0FBVyxDQUE2RDtRQUVsRixJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxPQUFPLEVBQU8sQ0FBQztRQUM1QyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDbEIsQ0FBQztJQUVNLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBVTtRQUM1QixPQUFPLElBQUksT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3pELENBQUM7SUFFRCxRQUFRO1FBRU4sSUFBSSxDQUFDLFlBQVksR0FBRyxFQUFFLENBQUM7UUFDdkIsSUFBSSxDQUFDLG9CQUFvQixHQUFHLEVBQUUsQ0FBQztRQUMvQixJQUFJLENBQUMsNEJBQTRCLEdBQUcsRUFBRSxDQUFDO1FBQ3ZDLElBQUksQ0FBQyxjQUFjLEdBQUcsRUFBRSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDO1FBQzVCLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDckMsQ0FBQztJQUVELEtBQUssQ0FBQyxLQUFLLENBQUMsU0FBZSxFQUFFLGtCQUEyQixFQUFFLGVBQWUsR0FBRyxDQUFDO1FBQzNFLGlCQUFpQjtRQUNqQixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsNEJBQTRCLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsS0FBSyxTQUFTLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztRQUN6RyxJQUFJLFFBQVEsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1lBQ3pCLHFGQUFxRjtZQUNyRixPQUFPO1NBQ1I7UUFFRCwwQ0FBMEM7UUFDMUMsTUFBTSxPQUFPLEdBQWEsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3RDLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyw0QkFBNEIsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDcEUsSUFBSSxRQUFRLEdBQWEsSUFBSSxFQUFFLElBQUksR0FBYSxJQUFJLENBQUM7UUFDckQsTUFBTSxhQUFhLEdBQWEsQ0FBQyxFQUFFLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO1FBQzlELE1BQU0sU0FBUyxHQUFHLEVBQUUsQ0FBQztRQUNyQixTQUFTLENBQUMsRUFBRSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsR0FBRyxPQUFPLENBQUM7UUFDakQsSUFBSSxRQUFRLEdBQUcsQ0FBQyxFQUFFO1lBQ2hCLFFBQVEsR0FBRyxJQUFJLENBQUMsNEJBQTRCLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQzNELGFBQWEsQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztZQUNqRCxTQUFTLENBQUMsRUFBRSxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsR0FBRyxRQUFRLENBQUM7U0FDcEQ7UUFDRCxJQUFJLFFBQVEsR0FBRyxJQUFJLENBQUMsNEJBQTRCLENBQUMsTUFBTSxFQUFFO1lBQ3ZELElBQUksR0FBRyxJQUFJLENBQUMsNEJBQTRCLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQ3ZELElBQUksSUFBSSxFQUFFLElBQUksRUFBRTtnQkFDZCxhQUFhLENBQUMsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7Z0JBQzdDLFNBQVMsQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQzthQUM1QztTQUNGO1FBRUQseUJBQXlCO1FBQ3pCLE1BQU0sT0FBTyxHQUtQLEVBQUUsQ0FBQztRQUNULEtBQUssTUFBTSxZQUFZLElBQUksYUFBYSxFQUFFO1lBQ3hDLElBQUksU0FBUyxDQUFDLFlBQVksQ0FBQyxFQUFFO2dCQUMzQixNQUFNLE1BQU0sR0FBRyxTQUFTLENBQUMsWUFBWSxDQUFDLENBQUM7Z0JBQ3ZDLE1BQU0sQ0FBQyx3QkFBd0IsR0FBRyxJQUFJLENBQUMsK0JBQStCLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQy9FLE1BQU0sQ0FBQyxTQUFTLEdBQUcsa0JBQWtCLENBQUM7Z0JBQ3RDLE1BQU0sQ0FBQyxlQUFlLEdBQUcsZUFBZSxDQUFDO2dCQUN6QyxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO2dCQUVyQixNQUFNLG1CQUFtQixHQUFHLE1BQU0sSUFBSSxDQUFDLDZCQUE2QixDQUFDLE1BQU0sQ0FBQyxDQUFDO2dCQUU3RSxJQUFJLFlBQVksS0FBSyxDQUFDLEVBQUUsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLEVBQUU7b0JBQ2xELElBQUksQ0FBQyxXQUFXLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUU7b0JBQ3JELENBQUMsQ0FBQyxDQUFDO2lCQUNKO2FBQ0Y7U0FDRjtRQUVELGtDQUFrQztRQUNsQyxJQUFJLENBQUMscUJBQXFCLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUU7UUFDckQsQ0FBQyxDQUFDLENBQUM7UUFFSCxPQUFPLE9BQU8sQ0FBQztJQUNqQixDQUFDO0lBRUQsS0FBSyxDQUFDLFNBQVMsQ0FBQyxLQUFXLEVBQUUsR0FBUztRQUNwQyxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztRQUNuQixJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztRQUVmLE1BQU0sSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQzdCLENBQUM7SUFFRCxLQUFLLENBQUMsT0FBTyxDQUFDLGtCQUEyQixFQUFFLFlBQXFCO1FBRTlELElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRTtZQUM1QixNQUFNLElBQUksS0FBSyxDQUFDLGVBQWUsQ0FBQyxDQUFDO1NBQ2xDO1FBRUQsSUFBSSxDQUFDLFlBQVksR0FBRyxZQUFZLENBQUM7UUFDakMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUMvQixJQUFJLGlCQUFpQixHQUFHLEtBQUssQ0FBQztRQUM5QixJQUFJLFdBQVcsR0FBRyxLQUFLLENBQUM7UUFFeEIsS0FBSyxDQUFDLElBQUksRUFBRSxLQUFLLENBQUM7YUFDZixJQUFJLENBQ0gsU0FBUyxDQUFDLEtBQUssSUFBSSxFQUFFO1lBQ25CLElBQUksaUJBQWlCLEVBQUU7Z0JBQ3JCLE9BQU8sV0FBVyxDQUFDO2FBQ3BCO1lBRUQsaUJBQWlCLEdBQUcsSUFBSSxDQUFDO1lBQ3pCLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxNQUFNLElBQUksQ0FBQyxhQUFhLEVBQUUsRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQ3pGLENBQUMsQ0FBQyxDQUFDO1lBQ0gsV0FBVyxHQUFHLE1BQU0sSUFBSSxDQUFDLDBCQUEwQixFQUFFLENBQUM7WUFDdEQsSUFBSSxDQUFDLFdBQVcsRUFBRTtnQkFDaEIsaUJBQWlCLEdBQUcsS0FBSyxDQUFDO2FBQzNCO1lBQ0QsT0FBTyxXQUFXLENBQUM7UUFDckIsQ0FBQyxDQUFDLEVBQ0YsU0FBUyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUNsQzthQUNBLFNBQVMsQ0FBQztZQUNULElBQUksRUFBRSxLQUFLLEVBQUUsZUFBd0IsRUFBRSxFQUFFO2dCQUN2QyxJQUFJLGVBQWUsRUFBRTtvQkFDbkIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztvQkFDbEMsTUFBTSxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztpQkFDL0M7WUFDSCxDQUFDO1lBQ0QsS0FBSyxFQUFFLENBQUMsS0FBVSxFQUFFLEVBQUU7Z0JBQ3BCLE9BQU8sQ0FBQyxLQUFLLENBQUMsa0JBQWtCLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDM0MsQ0FBQztTQUNGLENBQUMsQ0FBQztJQUVQLENBQUM7SUFFRCxLQUFLLENBQUMsV0FBVyxDQUFDLE9BQWUsRUFBRSxZQUFvQjtRQUNyRCxPQUFPLElBQUksQ0FBQyxjQUFjLENBQUMsV0FBVyxDQUFDLE9BQU8sRUFBRSxZQUFZLENBQUMsQ0FBQztJQUNoRSxDQUFDO0lBRUQsa0JBQWtCLENBQUMsQ0FBVTtRQUMzQixJQUFJLENBQUMsZUFBZSxHQUFHLENBQUMsQ0FBQztJQUMzQixDQUFDO0lBRVMsS0FBSyxDQUFDLGFBQWE7UUFDM0IsSUFBSSxDQUFDLFlBQVksR0FBRyxNQUFNLElBQUksQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxFQUFFO1lBQ3hFLEtBQUssRUFBRSxLQUFLO1lBQ1osV0FBVyxFQUFFLElBQUksQ0FBQyxLQUFLO1NBQ3hCLENBQUMsQ0FBQztRQUNILE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQztJQUMzQixDQUFDO0lBRVMsK0JBQStCLENBQUMsUUFBa0I7UUFDMUQsSUFBSSxRQUFRLENBQUMsd0JBQXdCLENBQUMsTUFBTSxJQUFJLENBQUMsRUFBRTtZQUNqRCxPQUFPLFNBQVMsQ0FBQztTQUNsQjtRQUNELE9BQU8sUUFBUSxDQUFDLHdCQUF3QixDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztJQUNqRCxDQUFDO0lBRVMsS0FBSyxDQUFDLDBCQUEwQjtRQUV4QyxJQUFJLElBQUksR0FBRyxLQUFLLENBQUM7UUFDakIsSUFBSTtZQUNGLElBQUksR0FBRyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztZQUVqQyxpQkFBaUI7WUFDakIsTUFBTSxJQUFJLENBQUMsMkJBQTJCLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDN0MsSUFBSSxDQUFDLDBCQUEwQixDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRTtZQUNyRCxDQUFDLENBQUMsQ0FBQztZQUVILE9BQU8sSUFBSSxDQUFDO1NBQ2I7UUFBQyxPQUFPLENBQUMsRUFBRTtZQUNWLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDakI7UUFFRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFUyxrQkFBa0I7UUFDMUIsbUhBQW1IO1FBQ25ILG1GQUFtRjtRQUNuRixPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsWUFBWSxLQUFLLENBQUMsQ0FBQztJQUM5QyxDQUFDO0lBRVMsS0FBSyxDQUFDLDJCQUEyQixDQUFDLElBQWE7UUFFdkQsSUFBSSxDQUFDLElBQUksRUFBRTtZQUNULE9BQU8sRUFBRSxDQUFDO1NBQ1g7UUFFRCxJQUFJO1lBQ0YsTUFBTSxhQUFhLEdBQUcsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzNDLE1BQU0sV0FBVyxHQUFHLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUN2QyxhQUFhLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxVQUFVLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztZQUN6RCxXQUFXLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxVQUFVLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztZQUNyRCxJQUFJLENBQUMsUUFBUSxHQUFHLE1BQU0sSUFBSSxDQUFDLGNBQWMsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsRUFBRSxhQUFhLEVBQUUsV0FBVyxFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUU1SCxJQUFJLENBQUMsNEJBQTRCLEdBQUcsTUFBTSxJQUFJLENBQUMsWUFBWSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDdkYsSUFBSSxDQUFDLG9CQUFvQixHQUFHLElBQUksQ0FBQyw0QkFBNEI7aUJBQzFELE1BQU0sQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsSUFBSSxRQUFRLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsQ0FBQztpQkFDdEgsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7WUFFdkQsT0FBTyxDQUFDLEdBQUcsQ0FBQywrQkFBK0IsRUFBRSxJQUFJLENBQUMsNEJBQTRCLENBQUMsQ0FBQztZQUVoRixJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDL0UsT0FBTyxJQUFJLENBQUMsb0JBQW9CLENBQUM7U0FDbEM7UUFBQyxPQUFPLENBQUMsRUFBRTtZQUNWLE9BQU8sQ0FBQyxLQUFLLENBQUMsNkJBQTZCLEVBQUUsQ0FBQyxDQUFDLENBQUM7U0FDakQ7UUFFRCxPQUFPLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFUyxLQUFLLENBQUMsMEJBQTBCLENBQUMsSUFBYTtRQUN0RCxJQUFJLENBQUMsSUFBSSxFQUFFO1lBQ1QsT0FBTztTQUNSO1FBRUQsSUFBSTtZQUNGLE1BQU0sT0FBTyxHQUFHLEVBQUUsQ0FBQztZQUNuQixLQUFLLE1BQU0sUUFBUSxJQUFJLElBQUksQ0FBQyw0QkFBNEIsRUFBRTtnQkFDeEQsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7Z0JBQ3BELE1BQU0sQ0FBQyxJQUFJLEdBQUcsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUNwQyxNQUFNLENBQUMsd0JBQXdCLEdBQUcsSUFBSSxDQUFDLCtCQUErQixDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUNqRixPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO2FBQ3RCO1lBQ0QsTUFBTSxJQUFJLENBQUMsY0FBYyxDQUFDLDJCQUEyQixDQUFDLE9BQU8sRUFBRSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztTQUN2RjtRQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQ1YsT0FBTyxDQUFDLEtBQUssQ0FBQyw0QkFBNEIsRUFBRSxDQUFDLENBQUMsQ0FBQztTQUNoRDtJQUNILENBQUM7SUFFUyxLQUFLLENBQUMsNkJBQTZCLENBQUMsTUFLN0M7UUFDQyxJQUFJLENBQUMsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLGlCQUFpQixFQUFFO1lBQ3hDLE9BQU8sQ0FBQyxJQUFJLENBQUMsZ0RBQWdELENBQUMsQ0FBQztZQUMvRCxPQUFPO1NBQ1I7UUFFRCxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO1FBQy9CLE1BQU0sVUFBVSxHQUF5QixFQUFFLENBQUM7UUFDNUMsTUFBTSw2QkFBNkIsR0FBRyxJQUFJLG1CQUFtQixDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQzFFLElBQUk7WUFDRixJQUFJLG9CQUFvQixDQUFDO1lBRXpCLElBQUksQ0FBQyxNQUFNLENBQUMsZUFBZSxFQUFFO2dCQUMzQixvQkFBb0IsR0FBRyxNQUFNLElBQUksQ0FBQyxjQUFjO3FCQUM3QyxrQ0FBa0MsQ0FBQyxRQUFRLENBQUMsRUFBRSxFQUFFLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO2FBQzlFO2lCQUFNO2dCQUNMLG9CQUFvQixHQUFHLE1BQU0sSUFBSSxDQUFDLGNBQWM7cUJBQzdDLG1DQUFtQyxDQUFDLFFBQVEsQ0FBQyxFQUFFLEVBQUUsTUFBTSxDQUFDLGlCQUFpQixFQUFFLE1BQU0sQ0FBQyxlQUFlLENBQUMsQ0FBQzthQUN2RztZQUVELElBQUksb0JBQW9CLEVBQUU7Z0JBQ3hCLDZCQUE2QixDQUFDLHlCQUF5QixDQUFDLG9CQUFvQixFQUFFLEtBQUssQ0FBQyxDQUFDO2dCQUVyRixJQUFJLENBQUMsc0JBQXNCLEdBQUcsb0JBQW9CLENBQUMsSUFBSSxDQUFDO2dCQUN4RCxJQUFJLENBQUMsMEJBQTBCLEdBQUcsb0JBQW9CLENBQUMsVUFBVSxDQUFDO2dCQUNsRSxJQUFJLENBQUMsNEJBQTRCLEdBQUcsb0JBQW9CLENBQUMsVUFBVSxDQUFDO2dCQUNwRSxJQUFJLENBQUMsK0JBQStCLEdBQUcsb0JBQW9CLENBQUMsYUFBYSxDQUFDO2FBQzNFO1NBQ0Y7UUFBQyxPQUFPLENBQUMsRUFBRTtZQUNWLE9BQU8sQ0FBQyxJQUFJLENBQUMsOEJBQThCLEVBQUUsTUFBTSxDQUFDLGlCQUFpQixFQUFFLENBQUMsQ0FBQyxDQUFDO1NBQzNFO1FBRUQsT0FBTyw2QkFBNkIsQ0FBQztJQUN2QyxDQUFDO0lBRVMsS0FBSyxDQUFDLHFCQUFxQixDQUFDLFFBQWtCO1FBQ3RELE1BQU0sSUFBSSxDQUFDLGNBQWMsQ0FBQyxxQkFBcUIsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUMxRCxNQUFNLElBQUksQ0FBQyxjQUFjLENBQUMsU0FBUyxFQUFFLENBQUM7SUFDeEMsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtGcmFtZVNldH0gZnJvbSAnLi9GcmFtZVNldCc7XG5pbXBvcnQge1N1YmplY3QsIHRha2VVbnRpbCwgdGltZXJ9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtzd2l0Y2hNYXB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7UmFpbk5vZGV9IGZyb20gJ3JhYWluLW1vZGVsJztcbmltcG9ydCB7VGltZWZyYW1lQ29udGFpbmVyLCBUaW1lZnJhbWVDb250YWluZXJzfSBmcm9tICdyYWFpbi11aSc7XG5pbXBvcnQge1JhZGFyU2VydmljZX0gZnJvbSAnLi4vcmFkYXIuc2VydmljZSc7XG5pbXBvcnQge1Byb2ZpbGVTZXJ2aWNlfSBmcm9tICcuLi9wcm9maWxlLnNlcnZpY2UnO1xuaW1wb3J0IHtDb21wYXJlTWFuYWdlcn0gZnJvbSAnLi9Db21wYXJlTWFuYWdlcic7XG5pbXBvcnQge1hZVHlwZX0gZnJvbSAnLi4veHl0eXBlJztcblxuZXhwb3J0IGNsYXNzIFJlZnJlc2hNYW5hZ2VyIHtcblxuICBwdWJsaWMgcmFpbkNvbXB1dGF0aW9uTWFwRGF0ZTogRGF0ZTtcbiAgcHVibGljIHJhaW5Db21wdXRhdGlvbk1hcERvbmVEYXRlOiBEYXRlO1xuICBwdWJsaWMgcmFpbkNvbXB1dGF0aW9uTWFwTGF1bmNoZWRCeTogc3RyaW5nO1xuICBwdWJsaWMgcmFpbkNvbXB1dGF0aW9uTWFwVGltZVNwZW50SW5NczogbnVtYmVyO1xuXG4gIHByb3RlY3RlZCBjbG9zZVJlZnJlc2hUaW1lcjogU3ViamVjdDxhbnk+O1xuICBwcm90ZWN0ZWQgY291bnRzUGVyaW9kOiB7XG4gICAgcGVyY2VudEltYWdlcz86IFhZVHlwZVtdLFxuICAgIHF1ZXVlUnVubmluZz86IG51bWJlcixcbiAgfTtcbiAgcHJvdGVjdGVkIHRpbWVmcmFtZXNGcm9tUmFkYXJzOiBGcmFtZVNldFtdO1xuICBwcm90ZWN0ZWQgdGltZWZyYW1lc0Zyb21SYWRhcnNFeHRlbmRlZDogRnJhbWVTZXRbXTtcbiAgcHJvdGVjdGVkIHRpbWVmcmFtZURhdGVzOiBEYXRlW107XG4gIHByb3RlY3RlZCBiZWdpbjogRGF0ZTtcbiAgcHJvdGVjdGVkIGVuZDogRGF0ZTtcbiAgcHJvdGVjdGVkIHJlbW92ZUR1cGxpY2F0ZTogYm9vbGVhbjtcbiAgcHJvdGVjdGVkIGRhdGFJbnRlcm5hbDogYm9vbGVhbjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcm90ZWN0ZWQgcmFpbk5vZGU6IFJhaW5Ob2RlLFxuICAgIHByb3RlY3RlZCByYWRhclNlcnZpY2U6IFJhZGFyU2VydmljZSxcbiAgICBwcm90ZWN0ZWQgcHJvZmlsZVNlcnZpY2U6IFByb2ZpbGVTZXJ2aWNlLFxuICAgIHByb3RlY3RlZCBjb21wYXJlTWFuYWdlcjogQ29tcGFyZU1hbmFnZXIsXG4gICAgcHJvdGVjdGVkIG9uUmVmcmVzaEluUHJvZ3Jlc3M6IChjb3VudFBlcmlvZHM6IHtcbiAgICAgIHBlcmNlbnRJbWFnZXM/OiBYWVR5cGVbXSxcbiAgICAgIHF1ZXVlUnVubmluZz86IG51bWJlcixcbiAgICB9LCB0aW1lZnJhbWVEYXRlczogRGF0ZVtdKSA9PiBQcm9taXNlPHZvaWQ+LFxuICAgIHByb3RlY3RlZCBvblJlZnJlc2hEb25lOiAodGltZWZyYW1lRGF0ZXM6IERhdGVbXSkgPT4gUHJvbWlzZTx2b2lkPixcbiAgICBwcm90ZWN0ZWQgb25GZXRjaERvbmU6ICh0aW1lZnJhbWVDb250YWluZXJzOiBUaW1lZnJhbWVDb250YWluZXJzKSA9PiBQcm9taXNlPHZvaWQ+LFxuICApIHtcbiAgICB0aGlzLmNsb3NlUmVmcmVzaFRpbWVyID0gbmV3IFN1YmplY3Q8YW55PigpO1xuICAgIHRoaXMuY2xlYW5BbGwoKTtcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgRGVsYXkobXM6IG51bWJlcikge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgbXMpKTtcbiAgfVxuXG4gIGNsZWFuQWxsKCkge1xuXG4gICAgdGhpcy5jb3VudHNQZXJpb2QgPSB7fTtcbiAgICB0aGlzLnRpbWVmcmFtZXNGcm9tUmFkYXJzID0gW107XG4gICAgdGhpcy50aW1lZnJhbWVzRnJvbVJhZGFyc0V4dGVuZGVkID0gW107XG4gICAgdGhpcy50aW1lZnJhbWVEYXRlcyA9IFtdO1xuICAgIHRoaXMucmVtb3ZlRHVwbGljYXRlID0gdHJ1ZTtcbiAgICB0aGlzLmNsb3NlUmVmcmVzaFRpbWVyPy5uZXh0KG51bGwpO1xuICB9XG5cbiAgYXN5bmMgZmV0Y2goZGF0ZVNob3duOiBEYXRlLCB3aXRoR2F1Z2VzTWVhc3VyZXM6IGJvb2xlYW4sIGN1bXVsYXRpdmVIb3VycyA9IDApOiBQcm9taXNlPEZyYW1lU2V0PiB7XG4gICAgLy8gc2V0IHRoZSB0YXJnZXRcbiAgICBjb25zdCBjdXJyZW50cyA9IHRoaXMudGltZWZyYW1lc0Zyb21SYWRhcnNFeHRlbmRlZC5maWx0ZXIodCA9PiB0LmRhdGUuZ2V0VGltZSgpID09PSBkYXRlU2hvd24uZ2V0VGltZSgpKTtcbiAgICBpZiAoY3VycmVudHMubGVuZ3RoICE9PSAxKSB7XG4gICAgICAvLyBjb25zb2xlLmxvZygnbm8gY29ycmVjdCBkYXRlU2hvd24nLCBkYXRlU2hvd24sIHRoaXMudGltZWZyYW1lc0Zyb21SYWRhcnNFeHRlbmRlZCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gYnVpbGQgW2N1cnJlbnQsIHByZXZpb3VzLCBuZXh0XSB0YXJnZXRzXG4gICAgY29uc3QgY3VycmVudDogRnJhbWVTZXQgPSBjdXJyZW50c1swXTtcbiAgICBjb25zdCBwb3NpdGlvbiA9IHRoaXMudGltZWZyYW1lc0Zyb21SYWRhcnNFeHRlbmRlZC5pbmRleE9mKGN1cnJlbnQpO1xuICAgIGxldCBwcmV2aW91czogRnJhbWVTZXQgPSBudWxsLCBuZXh0OiBGcmFtZVNldCA9IG51bGw7XG4gICAgY29uc3QgcG9zaXRpb25OYW1lczogc3RyaW5nW10gPSBbJycgKyBjdXJyZW50LmRhdGUuZ2V0VGltZSgpXTtcbiAgICBjb25zdCBmcmFtZVNldHMgPSB7fTtcbiAgICBmcmFtZVNldHNbJycgKyBjdXJyZW50LmRhdGUuZ2V0VGltZSgpXSA9IGN1cnJlbnQ7XG4gICAgaWYgKHBvc2l0aW9uID4gMCkge1xuICAgICAgcHJldmlvdXMgPSB0aGlzLnRpbWVmcmFtZXNGcm9tUmFkYXJzRXh0ZW5kZWRbcG9zaXRpb24gLSAxXTtcbiAgICAgIHBvc2l0aW9uTmFtZXMucHVzaCgnJyArIHByZXZpb3VzLmRhdGUuZ2V0VGltZSgpKTtcbiAgICAgIGZyYW1lU2V0c1snJyArIHByZXZpb3VzLmRhdGUuZ2V0VGltZSgpXSA9IHByZXZpb3VzO1xuICAgIH1cbiAgICBpZiAocG9zaXRpb24gPCB0aGlzLnRpbWVmcmFtZXNGcm9tUmFkYXJzRXh0ZW5kZWQubGVuZ3RoKSB7XG4gICAgICBuZXh0ID0gdGhpcy50aW1lZnJhbWVzRnJvbVJhZGFyc0V4dGVuZGVkW3Bvc2l0aW9uICsgMV07XG4gICAgICBpZiAobmV4dD8uZGF0ZSkge1xuICAgICAgICBwb3NpdGlvbk5hbWVzLnB1c2goJycgKyBuZXh0LmRhdGUuZ2V0VGltZSgpKTtcbiAgICAgICAgZnJhbWVTZXRzWycnICsgbmV4dC5kYXRlLmdldFRpbWUoKV0gPSBuZXh0O1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIGFsaWduIE1hcCB3aXRoIHRhcmdldHNcbiAgICBjb25zdCB0YXJnZXRzOiB7XG4gICAgICBkYXRlOiBEYXRlLFxuICAgICAgcmFpbkNvbXB1dGF0aW9uSWQ6IHN0cmluZyxcbiAgICAgIHJhaW5Db21wdXRhdGlvblF1YWxpdHlJZDogc3RyaW5nLFxuICAgICAgY3VtdWxhdGl2ZUhvdXJzOiBudW1iZXIsXG4gICAgfVtdID0gW107XG4gICAgZm9yIChjb25zdCBwb3NpdGlvbk5hbWUgb2YgcG9zaXRpb25OYW1lcykge1xuICAgICAgaWYgKGZyYW1lU2V0c1twb3NpdGlvbk5hbWVdKSB7XG4gICAgICAgIGNvbnN0IHRhcmdldCA9IGZyYW1lU2V0c1twb3NpdGlvbk5hbWVdO1xuICAgICAgICB0YXJnZXQucmFpbkNvbXB1dGF0aW9uUXVhbGl0eUlkID0gdGhpcy5nZXRSYWluQ29tcHV0YXRpb25RdWFsaXR5VGFyZ2V0KHRhcmdldCk7XG4gICAgICAgIHRhcmdldC53aXRoR2F1Z2UgPSB3aXRoR2F1Z2VzTWVhc3VyZXM7XG4gICAgICAgIHRhcmdldC5jdW11bGF0aXZlSG91cnMgPSBjdW11bGF0aXZlSG91cnM7XG4gICAgICAgIHRhcmdldHMucHVzaCh0YXJnZXQpO1xuXG4gICAgICAgIGNvbnN0IHRpbWVmcmFtZUNvbnRhaW5lcnMgPSBhd2FpdCB0aGlzLnJlZnJlc2hNYXBUaW1lZnJhbWVDb250YWluZXJzKHRhcmdldCk7XG5cbiAgICAgICAgaWYgKHBvc2l0aW9uTmFtZSA9PT0gKCcnICsgY3VycmVudC5kYXRlLmdldFRpbWUoKSkpIHtcbiAgICAgICAgICB0aGlzLm9uRmV0Y2hEb25lKHRpbWVmcmFtZUNvbnRhaW5lcnMpLnRoZW4oaWdub3JlZCA9PiB7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBhbGlnbiBDb21wYXJlIHdpdGggY3VycmVudCBkYXRlXG4gICAgdGhpcy5yZWZyZXNoQ29tcGFyZVF1YWxpdHkoY3VycmVudCkudGhlbigoaWdub3JlZCkgPT4ge1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIGN1cnJlbnQ7XG4gIH1cblxuICBhc3luYyBzZXRQZXJpb2QoYmVnaW46IERhdGUsIGVuZDogRGF0ZSkge1xuICAgIHRoaXMuYmVnaW4gPSBiZWdpbjtcbiAgICB0aGlzLmVuZCA9IGVuZDtcblxuICAgIGF3YWl0IHRoaXMucmVmcmVzaENvdW50cygpO1xuICB9XG5cbiAgYXN5bmMgcmVmcmVzaChsYXVuY2hRdWFsaXR5QWZ0ZXI6IGJvb2xlYW4sIGRhdGFJbnRlcm5hbDogYm9vbGVhbikge1xuXG4gICAgaWYgKCF0aGlzLmJlZ2luIHx8ICF0aGlzLmVuZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCduZWVkIGEgcGVyaW9kJyk7XG4gICAgfVxuXG4gICAgdGhpcy5kYXRhSW50ZXJuYWwgPSBkYXRhSW50ZXJuYWw7XG4gICAgdGhpcy5jb21wYXJlTWFuYWdlci5jbGVhbkFsbCgpO1xuICAgIGxldCByZWZyZXNoSW5Qcm9ncmVzcyA9IGZhbHNlO1xuICAgIGxldCByZWZyZXNoRG9uZSA9IGZhbHNlO1xuXG4gICAgdGltZXIoMTAwMCwgMTUwMDApXG4gICAgICAucGlwZShcbiAgICAgICAgc3dpdGNoTWFwKGFzeW5jICgpID0+IHtcbiAgICAgICAgICBpZiAocmVmcmVzaEluUHJvZ3Jlc3MpIHtcbiAgICAgICAgICAgIHJldHVybiByZWZyZXNoRG9uZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZWZyZXNoSW5Qcm9ncmVzcyA9IHRydWU7XG4gICAgICAgICAgdGhpcy5vblJlZnJlc2hJblByb2dyZXNzKGF3YWl0IHRoaXMucmVmcmVzaENvdW50cygpLCB0aGlzLnRpbWVmcmFtZURhdGVzKS50aGVuKGlnbm9yZWQgPT4ge1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJlZnJlc2hEb25lID0gYXdhaXQgdGhpcy5yZWZyZXNoUGVyaW9kSW5zaWRlUG9sbGluZygpO1xuICAgICAgICAgIGlmICghcmVmcmVzaERvbmUpIHtcbiAgICAgICAgICAgIHJlZnJlc2hJblByb2dyZXNzID0gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiByZWZyZXNoRG9uZTtcbiAgICAgICAgfSksXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLmNsb3NlUmVmcmVzaFRpbWVyKSxcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoe1xuICAgICAgICBuZXh0OiBhc3luYyAocmVmcmVzaEZpbmlzaGVkOiBib29sZWFuKSA9PiB7XG4gICAgICAgICAgaWYgKHJlZnJlc2hGaW5pc2hlZCkge1xuICAgICAgICAgICAgdGhpcy5jbG9zZVJlZnJlc2hUaW1lci5uZXh0KG51bGwpO1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5vblJlZnJlc2hEb25lKHRoaXMudGltZWZyYW1lRGF0ZXMpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3I6IChlcnJvcjogYW55KSA9PiB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcignZXJyb3IgaW4gcmVmcmVzaCcsIGVycm9yKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgfVxuXG4gIGFzeW5jIHNlbGVjdEdhdWdlKGdhdWdlSWQ6IHN0cmluZywgY29tcGFyZUluZGV4OiBudW1iZXIpIHtcbiAgICByZXR1cm4gdGhpcy5jb21wYXJlTWFuYWdlci5zZWxlY3RHYXVnZShnYXVnZUlkLCBjb21wYXJlSW5kZXgpO1xuICB9XG5cbiAgc2V0UmVtb3ZlRHVwbGljYXRlKGI6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnJlbW92ZUR1cGxpY2F0ZSA9IGI7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgcmVmcmVzaENvdW50cygpIHtcbiAgICB0aGlzLmNvdW50c1BlcmlvZCA9IGF3YWl0IHRoaXMucHJvZmlsZVNlcnZpY2UuZ2V0Q291bnRzKHRoaXMucmFpbk5vZGUuaWQsIHtcbiAgICAgIHJhbmdlOiAnZGF5JyxcbiAgICAgIHBlcmlvZEJlZ2luOiB0aGlzLmJlZ2luXG4gICAgfSk7XG4gICAgcmV0dXJuIHRoaXMuY291bnRzUGVyaW9kO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldFJhaW5Db21wdXRhdGlvblF1YWxpdHlUYXJnZXQoZnJhbWVzZXQ6IEZyYW1lU2V0KTogc3RyaW5nIHtcbiAgICBpZiAoZnJhbWVzZXQucmFpbkNvbXB1dGF0aW9uUXVhbGl0aWVzLmxlbmd0aCA8PSAwKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICByZXR1cm4gZnJhbWVzZXQucmFpbkNvbXB1dGF0aW9uUXVhbGl0aWVzWzBdLmlkO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIHJlZnJlc2hQZXJpb2RJbnNpZGVQb2xsaW5nKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuXG4gICAgbGV0IGRvbmUgPSBmYWxzZTtcbiAgICB0cnkge1xuICAgICAgZG9uZSA9IHRoaXMucmVmcmVzaENoZWNrSWZEb25lKCk7XG5cbiAgICAgIC8vIGJlaGluZCByZWZyZXNoXG4gICAgICBhd2FpdCB0aGlzLnJlZnJlc2hUaW1lZnJhbWVzRnJvbVJhZGFycyhkb25lKTtcbiAgICAgIHRoaXMucmVmcmVzaEdsb2JhbENvbXBhcmVSZXBvcnQoZG9uZSkudGhlbihpZ25vcmVkID0+IHtcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gZG9uZTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBjb25zb2xlLndhcm4oZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGRvbmU7XG4gIH1cblxuICBwcm90ZWN0ZWQgcmVmcmVzaENoZWNrSWZEb25lKCk6IGJvb2xlYW4ge1xuICAgIC8vIGNvbnNvbGUubG9nKCdyZWZyZXNoUGVyaW9kSW5zaWRlUG9sbGluZycsIHRoaXMuY291bnRzUGVyaW9kLmNvbXB1dGF0aW9uc0J5VGVhbSwgdGhpcy5jb3VudHNQZXJpb2QucmFkYXJNZWFzdXJlcylcbiAgICAvLyByZXR1cm4gdGhpcy5jb3VudHNQZXJpb2QuY29tcHV0YXRpb25zQnlUZWFtID09PSB0aGlzLmNvdW50c1BlcmlvZC5yYWRhck1lYXN1cmVzO1xuICAgIHJldHVybiB0aGlzLmNvdW50c1BlcmlvZC5xdWV1ZVJ1bm5pbmcgPT09IDA7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgcmVmcmVzaFRpbWVmcmFtZXNGcm9tUmFkYXJzKGRvbmU6IGJvb2xlYW4pIHtcblxuICAgIGlmICghZG9uZSkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBjb25zdCBiZWdpbkV4dGVuZGVkID0gbmV3IERhdGUodGhpcy5iZWdpbik7XG4gICAgICBjb25zdCBlbmRFeHRlbmRlZCA9IG5ldyBEYXRlKHRoaXMuZW5kKTtcbiAgICAgIGJlZ2luRXh0ZW5kZWQuc2V0TWludXRlcyhiZWdpbkV4dGVuZGVkLmdldE1pbnV0ZXMoKSAtIDcpO1xuICAgICAgZW5kRXh0ZW5kZWQuc2V0TWludXRlcyhlbmRFeHRlbmRlZC5nZXRNaW51dGVzKCkgKyA3KTtcbiAgICAgIHRoaXMucmFpbk5vZGUgPSBhd2FpdCB0aGlzLnByb2ZpbGVTZXJ2aWNlLmdldFJhaW5UaW1lZnJhbWUodGhpcy5yYWluTm9kZS5pZCwgYmVnaW5FeHRlbmRlZCwgZW5kRXh0ZW5kZWQsIHRoaXMuZGF0YUludGVybmFsKTtcblxuICAgICAgdGhpcy50aW1lZnJhbWVzRnJvbVJhZGFyc0V4dGVuZGVkID0gYXdhaXQgdGhpcy5yYWRhclNlcnZpY2UuZ2V0VGltZWxpbmUodGhpcy5yYWluTm9kZSk7XG4gICAgICB0aGlzLnRpbWVmcmFtZXNGcm9tUmFkYXJzID0gdGhpcy50aW1lZnJhbWVzRnJvbVJhZGFyc0V4dGVuZGVkXG4gICAgICAgIC5maWx0ZXIoKGZyYW1lU2V0KSA9PiB0aGlzLmJlZ2luLmdldFRpbWUoKSA8PSBmcmFtZVNldC5kYXRlLmdldFRpbWUoKSAmJiBmcmFtZVNldC5kYXRlLmdldFRpbWUoKSA8PSB0aGlzLmVuZC5nZXRUaW1lKCkpXG4gICAgICAgIC5zb3J0KChhLCBiKSA9PiBhLmRhdGUuZ2V0VGltZSgpIC0gYi5kYXRlLmdldFRpbWUoKSk7XG5cbiAgICAgIGNvbnNvbGUubG9nKCd0aW1lZnJhbWVzRnJvbVJhZGFyc0V4dGVuZGVkOicsIHRoaXMudGltZWZyYW1lc0Zyb21SYWRhcnNFeHRlbmRlZCk7XG5cbiAgICAgIHRoaXMudGltZWZyYW1lRGF0ZXMgPSB0aGlzLnRpbWVmcmFtZXNGcm9tUmFkYXJzLm1hcChmcmFtZVNldCA9PiBmcmFtZVNldC5kYXRlKTtcbiAgICAgIHJldHVybiB0aGlzLnRpbWVmcmFtZXNGcm9tUmFkYXJzO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ3JlZnJlc2hUaW1lZnJhbWVzRnJvbVJhZGFycycsIGUpO1xuICAgIH1cblxuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyByZWZyZXNoR2xvYmFsQ29tcGFyZVJlcG9ydChkb25lOiBib29sZWFuKSB7XG4gICAgaWYgKCFkb25lKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHRhcmdldHMgPSBbXTtcbiAgICAgIGZvciAoY29uc3QgZnJhbWVTZXQgb2YgdGhpcy50aW1lZnJhbWVzRnJvbVJhZGFyc0V4dGVuZGVkKSB7XG4gICAgICAgIGNvbnN0IHRhcmdldCA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoZnJhbWVTZXQpKTtcbiAgICAgICAgdGFyZ2V0LmRhdGUgPSBuZXcgRGF0ZSh0YXJnZXQuZGF0ZSk7XG4gICAgICAgIHRhcmdldC5yYWluQ29tcHV0YXRpb25RdWFsaXR5SWQgPSB0aGlzLmdldFJhaW5Db21wdXRhdGlvblF1YWxpdHlUYXJnZXQoZnJhbWVTZXQpO1xuICAgICAgICB0YXJnZXRzLnB1c2godGFyZ2V0KTtcbiAgICAgIH1cbiAgICAgIGF3YWl0IHRoaXMuY29tcGFyZU1hbmFnZXIucmVmcmVzaEdsb2JhbENvbXBhcmVRdWFsaXR5KHRhcmdldHMsICF0aGlzLnJlbW92ZUR1cGxpY2F0ZSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgY29uc29sZS5lcnJvcigncmVmcmVzaEdsb2JhbENvbXBhcmVSZXBvcnQnLCBlKTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgcmVmcmVzaE1hcFRpbWVmcmFtZUNvbnRhaW5lcnModGFyZ2V0OiB7XG4gICAgZGF0ZTogRGF0ZSxcbiAgICByYWluQ29tcHV0YXRpb25JZDogc3RyaW5nLFxuICAgIHdpdGhHYXVnZTogYm9vbGVhbixcbiAgICBjdW11bGF0aXZlSG91cnM6IG51bWJlclxuICB9KSB7XG4gICAgaWYgKCF0YXJnZXQgfHwgIXRhcmdldC5yYWluQ29tcHV0YXRpb25JZCkge1xuICAgICAgY29uc29sZS53YXJuKCdQYiB3aXRoIHJlZnJlc2hNYXBUaW1lZnJhbWVDb250YWluZXJzIGluc2lnaHRzJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgcmFpbk5vZGUgPSB0aGlzLnJhaW5Ob2RlO1xuICAgIGNvbnN0IGNvbnRhaW5lcnM6IFRpbWVmcmFtZUNvbnRhaW5lcltdID0gW107XG4gICAgY29uc3QgbmV3Q3JlYXRlZFRpbWVmcmFtZUNvbnRhaW5lcnMgPSBuZXcgVGltZWZyYW1lQ29udGFpbmVycyhjb250YWluZXJzKTtcbiAgICB0cnkge1xuICAgICAgbGV0IHJhaW5Ob2RlQ2FydGVzaWFuTWFwO1xuXG4gICAgICBpZiAoIXRhcmdldC5jdW11bGF0aXZlSG91cnMpIHtcbiAgICAgICAgcmFpbk5vZGVDYXJ0ZXNpYW5NYXAgPSBhd2FpdCB0aGlzLnByb2ZpbGVTZXJ2aWNlXG4gICAgICAgICAgLmdldFJhaW5Db21wdXRhdGlvbkNhcnRlc2lhbk1hcEJ5SWQocmFpbk5vZGUuaWQsIHRhcmdldC5yYWluQ29tcHV0YXRpb25JZCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByYWluTm9kZUNhcnRlc2lhbk1hcCA9IGF3YWl0IHRoaXMucHJvZmlsZVNlcnZpY2VcbiAgICAgICAgICAuZ2V0UmFpbkNvbXB1dGF0aW9uQ3VtdWxhdGl2ZU1hcEJ5SWQocmFpbk5vZGUuaWQsIHRhcmdldC5yYWluQ29tcHV0YXRpb25JZCwgdGFyZ2V0LmN1bXVsYXRpdmVIb3Vycyk7XG4gICAgICB9XG5cbiAgICAgIGlmIChyYWluTm9kZUNhcnRlc2lhbk1hcCkge1xuICAgICAgICBuZXdDcmVhdGVkVGltZWZyYW1lQ29udGFpbmVycy5hZGRGcm9tUmFpbkNvbXB1dGF0aW9uTWFwKHJhaW5Ob2RlQ2FydGVzaWFuTWFwLCBmYWxzZSk7XG5cbiAgICAgICAgdGhpcy5yYWluQ29tcHV0YXRpb25NYXBEYXRlID0gcmFpbk5vZGVDYXJ0ZXNpYW5NYXAuZGF0ZTtcbiAgICAgICAgdGhpcy5yYWluQ29tcHV0YXRpb25NYXBEb25lRGF0ZSA9IHJhaW5Ob2RlQ2FydGVzaWFuTWFwLmlzRG9uZURhdGU7XG4gICAgICAgIHRoaXMucmFpbkNvbXB1dGF0aW9uTWFwTGF1bmNoZWRCeSA9IHJhaW5Ob2RlQ2FydGVzaWFuTWFwLmxhdW5jaGVkQnk7XG4gICAgICAgIHRoaXMucmFpbkNvbXB1dGF0aW9uTWFwVGltZVNwZW50SW5NcyA9IHJhaW5Ob2RlQ2FydGVzaWFuTWFwLnRpbWVTcGVudEluTXM7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgY29uc29sZS53YXJuKCdQYiB3aXRoIGNvbXB1dGF0aW9ucyBmb3IgaWQ6JywgdGFyZ2V0LnJhaW5Db21wdXRhdGlvbklkLCBlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3Q3JlYXRlZFRpbWVmcmFtZUNvbnRhaW5lcnM7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgcmVmcmVzaENvbXBhcmVRdWFsaXR5KGZyYW1lU2V0OiBGcmFtZVNldCkge1xuICAgIGF3YWl0IHRoaXMuY29tcGFyZU1hbmFnZXIucmVmcmVzaENvbXBhcmVRdWFsaXR5KGZyYW1lU2V0KTtcbiAgICBhd2FpdCB0aGlzLmNvbXBhcmVNYW5hZ2VyLnNldEdhdWdlcygpO1xuICB9XG59XG4iXX0=