raain-app 1.0.6 → 1.0.7

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.
@@ -18,6 +18,7 @@ export class CompareManager {
18
18
  }
19
19
  static async BuildCompare(frameSet, targetsOrdered, rainComputationQualities, withCompareDuplicate) {
20
20
  let compareSpeedMatrix, compareTrustedIndicator;
21
+ let compareNames = [];
21
22
  let compares = [];
22
23
  const currentTarget = targetsOrdered.filter(t => t.date === '' + frameSet.date.getTime())[0];
23
24
  const currentPos = targetsOrdered.indexOf(currentTarget);
@@ -25,7 +26,7 @@ export class CompareManager {
25
26
  const nextTarget = currentPos >= 0 && currentPos < targetsOrdered.length - 1 ? targetsOrdered[currentPos + 1] : null;
26
27
  const currentQuality = rainComputationQualities[currentTarget?.date];
27
28
  if (!currentQuality) {
28
- return { currentQuality, compareSpeedMatrix, compareTrustedIndicator, compares };
29
+ return { currentQuality, compareSpeedMatrix, compareTrustedIndicator, compareNames, compares };
29
30
  }
30
31
  const previousQuality = previousTarget &&
31
32
  CompareManager.CompareDate(previousTarget.date, currentTarget.date, -5) ?
@@ -37,6 +38,9 @@ export class CompareManager {
37
38
  compareSpeedMatrix = qualitySpeedMatrixContainer.renderMergedMatrix({ normalize: true });
38
39
  compareTrustedIndicator = qualitySpeedMatrixContainer.getTrustedIndicators()[0];
39
40
  const comparesToMap = SpeedMatrixContainer.BuildCompares(currentQuality, previousQuality, nextQuality, !withCompareDuplicate);
41
+ compareNames = qualitySpeedMatrixContainer.getMatrices()
42
+ .map(m => m.name)
43
+ .sort((a, b) => parseInt(a, 10) - parseInt(b, 10));
40
44
  compares = comparesToMap.map(c => {
41
45
  return {
42
46
  name: c.name,
@@ -46,7 +50,7 @@ export class CompareManager {
46
50
  remarks: c.remarks
47
51
  };
48
52
  });
49
- return { currentQuality, compareSpeedMatrix, compareTrustedIndicator, compares };
53
+ return { currentQuality, compareSpeedMatrix, compareTrustedIndicator, compareNames, compares };
50
54
  }
51
55
  cleanAll() {
52
56
  this.gaugesInCompare = [];
@@ -64,7 +68,7 @@ export class CompareManager {
64
68
  return { date: '' + t.date.getTime(), rainComputationId: t.rainComputationId, rainComputationQualityId: t.rainComputationQualityId };
65
69
  });
66
70
  await this.fetchRainComputationQualities(targetsOrdered);
67
- const { currentQuality, compareSpeedMatrix, compareTrustedIndicator, compares } = await CompareManager.BuildCompare(frameSet, targetsOrdered, this.rainComputationQualities, withCompareDuplicate);
71
+ const { currentQuality, compareSpeedMatrix, compareTrustedIndicator, compareNames, compares } = await CompareManager.BuildCompare(frameSet, targetsOrdered, this.rainComputationQualities, withCompareDuplicate);
68
72
  if (!currentQuality) {
69
73
  this.cleanCompareQuality('no current quality ' + Object.keys(this.rainComputationQualities));
70
74
  }
@@ -75,6 +79,7 @@ export class CompareManager {
75
79
  this.compareVersion = currentQuality.getVersion();
76
80
  this.compareSpeedMatrix = compareSpeedMatrix;
77
81
  this.compareTrustedIndicator = compareTrustedIndicator;
82
+ this.compareNames = compareNames;
78
83
  this.compares = compares;
79
84
  }
80
85
  this.onChanges();
@@ -230,4 +235,4 @@ export class CompareManager {
230
235
  this.selectGaugeInCompare();
231
236
  }
232
237
  }
233
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29tcGFyZU1hbmFnZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXBwL3NoYXJlZC90b29scy9Db21wYXJlTWFuYWdlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sVUFBVSxDQUFDO0FBQ25DLE9BQU8sRUFBZ0Usb0JBQW9CLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFDaEgsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLFdBQVcsQ0FBQztBQVlqQyxNQUFNLE9BQU8sY0FBYztJQXlCekIsWUFDWSxRQUFrQixFQUNsQixjQUE4QixFQUNqQyxZQUF3QixHQUFHLEVBQUU7SUFDcEMsQ0FBQztRQUhTLGFBQVEsR0FBUixRQUFRLENBQVU7UUFDbEIsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQ2pDLGNBQVMsR0FBVCxTQUFTLENBQ2Y7UUFFRCxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDbEIsQ0FBQztJQUVTLE1BQU0sQ0FBQyxXQUFXLENBQUMsS0FBYSxFQUFFLEtBQWEsRUFBRSxPQUFlO1FBRXhFLE1BQU0sV0FBVyxHQUFTLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUN4RCxNQUFNLFNBQVMsR0FBRyxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDaEQsU0FBUyxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsVUFBVSxFQUFFLEdBQUcsT0FBTyxDQUFDLENBQUM7UUFDdkQsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLFdBQVcsQ0FBQyxPQUFPLEVBQUUsR0FBRyxTQUFTLENBQUMsT0FBTyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQ3JGLE9BQU8sSUFBSSxLQUFLLENBQUMs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QUM7SUFDOUIsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtNYXBMYXRMbmd9IGZyb20gJ3JhYWluLXVpJztcbmltcG9ydCB7UG9zaXRpb25WYWx1ZSwgUXVhbGl0eVBvaW50LCBSYWluQ29tcHV0YXRpb25RdWFsaXR5LCBSYWluTm9kZSwgU3BlZWRNYXRyaXhDb250YWluZXJ9IGZyb20gJ3JhYWluLW1vZGVsJztcbmltcG9ydCB7WFlUeXBlfSBmcm9tICcuLi94eXR5cGUnO1xuaW1wb3J0IHtQcm9maWxlU2VydmljZX0gZnJvbSAnLi4vcHJvZmlsZS5zZXJ2aWNlJztcbmltcG9ydCB7RnJhbWVTZXR9IGZyb20gJy4vRnJhbWVTZXQnO1xuXG5leHBvcnQgaW50ZXJmYWNlIElDb21wYXJlIHtcbiAgbmFtZTogc3RyaW5nO1xuICBjb21wYXJlUG9pbnRzOiBYWVR5cGVbXTtcbiAgY29tcGFyZVBvaW50c01heDogWFlUeXBlO1xuICBjb21wYXJlUG9pbnRzSGlzdG9yeTogUXVhbGl0eVBvaW50W107XG4gIHJlbWFya3M6IHN0cmluZztcbn1cblxuZXhwb3J0IGNsYXNzIENvbXBhcmVNYW5hZ2VyIHtcblxuICAvLyBwdWJsaWMgY29tcHV0ZWQkOiBPYnNlcnZhYmxlPGJvb2xlYW4+O1xuXG4gIHB1YmxpYyBnYXVnZXNJbkNvbXBhcmU6IE1hcExhdExuZ1tdO1xuICBwdWJsaWMgc2VsZWN0ZWRHYXVnZXM6IE1hcExhdExuZ1tdO1xuICBwdWJsaWMgc2VsZWN0ZWRQaXhlbHM6IE1hcExhdExuZ1tdO1xuICBwdWJsaWMgcGl4ZWxzU29sdXRpb25zOiBNYXBMYXRMbmdbXVtdO1xuXG4gIHB1YmxpYyBjb21wYXJlTmFtZXM6IHN0cmluZ1tdO1xuICBwdWJsaWMgY29tcGFyZXM6IElDb21wYXJlW107XG4gIHB1YmxpYyBjb21wYXJlU3BlZWRNYXRyaXg6IFBvc2l0aW9uVmFsdWVbXTtcbiAgcHVibGljIGNvbXBhcmVWZXJzaW9uOiBzdHJpbmc7XG4gIHB1YmxpYyBjb21wYXJlVHJ1c3RlZEluZGljYXRvcjogbnVtYmVyO1xuICBwdWJsaWMgY3VycmVudFF1YWxpdHlEb25lRGF0ZTogRGF0ZTtcbiAgcHVibGljIGN1cnJlbnRRdWFsaXR5TGF1bmNoZWRCeTogc3RyaW5nO1xuICBwdWJsaWMgY3VycmVudFF1YWxpdHlUaW1lU3BlbnRJbk1zOiBudW1iZXI7XG4gIHB1YmxpYyBnbG9iYWxDb21wYXJlUG9pbnRzOiBYWVR5cGVbXTtcbiAgcHVibGljIGdsb2JhbENvbXBhcmVQb2ludHNNYXg6IFhZVHlwZTtcblxuICBwcm90ZWN0ZWQgc2VsZWN0ZWRHYXVnZTogUXVhbGl0eVBvaW50O1xuICBwcm90ZWN0ZWQgc2VsZWN0ZWRHYXVnZUluUG9pbnRzOiBRdWFsaXR5UG9pbnQ7XG4gIHByb3RlY3RlZCBzZWxlY3RlZEdhdWdlSW5Qb2ludHNEZXRhaWw6IHN0cmluZztcbiAgcHJvdGVjdGVkIHJhaW5Db21wdXRhdGlvblF1YWxpdGllczogYW55O1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByb3RlY3RlZCByYWluTm9kZTogUmFpbk5vZGUsXG4gICAgcHJvdGVjdGVkIHByb2ZpbGVTZXJ2aWNlOiBQcm9maWxlU2VydmljZSxcbiAgICBwdWJsaWMgb25DaGFuZ2VzOiAoKSA9PiB2b2lkID0gKCkgPT4ge1xuICAgIH1cbiAgKSB7XG4gICAgdGhpcy5jbGVhbkFsbCgpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHN0YXRpYyBDb21wYXJlRGF0ZShkYXRlMTogc3RyaW5nLCBkYXRlMjogc3RyaW5nLCBtaW51dGVzOiBudW1iZXIpOiBib29sZWFuIHtcblxuICAgIGNvbnN0IGRhdGUxQXNEYXRlOiBEYXRlID0gbmV3IERhdGUocGFyc2VJbnQoZGF0ZTEsIDEwKSk7XG4gICAgY29uc3QgZGF0ZTJEaWZmID0gbmV3IERhdGUocGFyc2VJbnQoZGF0ZTIsIDEwKSk7XG4gICAgZGF0ZTJEaWZmLnNldE1pbnV0ZXMoZGF0ZTJEaWZmLmdldE1pbnV0ZXMoKSArIG1pbnV0ZXMpO1xuICAgIGNvbnN0IGRpZmYgPSBNYXRoLnJvdW5kKChkYXRlMUFzRGF0ZS5nZXRUaW1lKCkgLSBkYXRlMkRpZmYuZ2V0VGltZSgpKSAvICg2MCAqIDEwMDApKTtcbiAgICByZXR1cm4gZGlmZiA9PT0gMDtcbiAgfVxuXG4gIHByb3RlY3RlZCBzdGF0aWMgYXN5bmMgQnVpbGRDb21wYXJlKGZyYW1lU2V0OiB7IGRhdGU6IERhdGUgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0c09yZGVyZWQ6IHsgZGF0ZTogc3RyaW5nOyByYWluQ29tcHV0YXRpb25JZDogc3RyaW5nOyByYWluQ29tcHV0YXRpb25RdWFsaXR5SWQ6IHN0cmluZyB9W10sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhaW5Db21wdXRhdGlvblF1YWxpdGllczogYW55LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aXRoQ29tcGFyZUR1cGxpY2F0ZTogYm9vbGVhbikge1xuXG4gICAgbGV0IGNvbXBhcmVTcGVlZE1hdHJpeCwgY29tcGFyZVRydXN0ZWRJbmRpY2F0b3I7XG4gICAgbGV0IGNvbXBhcmVzOiBJQ29tcGFyZVtdID0gW107XG4gICAgY29uc3QgY3VycmVudFRhcmdldCA9IHRhcmdldHNPcmRlcmVkLmZpbHRlcih0ID0+IHQuZGF0ZSA9PT0gJycgKyBmcmFtZVNldC5kYXRlLmdldFRpbWUoKSlbMF07XG4gICAgY29uc3QgY3VycmVudFBvcyA9IHRhcmdldHNPcmRlcmVkLmluZGV4T2YoY3VycmVudFRhcmdldCk7XG4gICAgY29uc3QgcHJldmlvdXNUYXJnZXQgPSBjdXJyZW50UG9zID49IDAgPyB0YXJnZXRzT3JkZXJlZFtjdXJyZW50UG9zIC0gMV0gOiBudWxsO1xuICAgIGNvbnN0IG5leHRUYXJnZXQgPSBjdXJyZW50UG9zID49IDAgJiYgY3VycmVudFBvcyA8IHRhcmdldHNPcmRlcmVkLmxlbmd0aCAtIDEgPyB0YXJnZXRzT3JkZXJlZFtjdXJyZW50UG9zICsgMV0gOiBudWxsO1xuXG5cbiAgICBjb25zdCBjdXJyZW50UXVhbGl0eTogUmFpbkNvbXB1dGF0aW9uUXVhbGl0eSA9IHJhaW5Db21wdXRhdGlvblF1YWxpdGllc1tjdXJyZW50VGFyZ2V0Py5kYXRlXTtcbiAgICBpZiAoIWN1cnJlbnRRdWFsaXR5KSB7XG4gICAgICByZXR1cm4ge2N1cnJlbnRRdWFsaXR5LCBjb21wYXJlU3BlZWRNYXRyaXgsIGNvbXBhcmVUcnVzdGVkSW5kaWNhdG9yLCBjb21wYXJlc307XG4gICAgfVxuXG4gICAgY29uc3QgcHJldmlvdXNRdWFsaXR5OiBSYWluQ29tcHV0YXRpb25RdWFsaXR5ID0gcHJldmlvdXNUYXJnZXQgJiZcbiAgICBDb21wYXJlTWFuYWdlci5Db21wYXJlRGF0ZShwcmV2aW91c1RhcmdldC5kYXRlLCBjdXJyZW50VGFyZ2V0LmRhdGUsIC01KSA/XG4gICAgICByYWluQ29tcHV0YXRpb25RdWFsaXRpZXNbcHJldmlvdXNUYXJnZXQuZGF0ZV0gOiBudWxsO1xuICAgIGNvbnN0IG5leHRRdWFsaXR5OiBSYWluQ29tcHV0YXRpb25RdWFsaXR5ID0gbmV4dFRhcmdldFxuICAgICYmIENvbXBhcmVNYW5hZ2VyLkNvbXBhcmVEYXRlKG5leHRUYXJnZXQuZGF0ZSwgY3VycmVudFRhcmdldC5kYXRlLCArNSkgP1xuICAgICAgcmFpbkNvbXB1dGF0aW9uUXVhbGl0aWVzW25leHRUYXJnZXQuZGF0ZV0gOiBudWxsO1xuXG4gICAgY29uc3QgcXVhbGl0eVNwZWVkTWF0cml4Q29udGFpbmVyID0gY3VycmVudFF1YWxpdHkucXVhbGl0eVNwZWVkTWF0cml4Q29udGFpbmVyO1xuICAgIGNvbXBhcmVTcGVlZE1hdHJpeCA9IHF1YWxpdHlTcGVlZE1hdHJpeENvbnRhaW5lci5yZW5kZXJNZXJnZWRNYXRyaXgoe25vcm1hbGl6ZTogdHJ1ZX0pO1xuICAgIGNvbXBhcmVUcnVzdGVkSW5kaWNhdG9yID0gcXVhbGl0eVNwZWVkTWF0cml4Q29udGFpbmVyLmdldFRydXN0ZWRJbmRpY2F0b3JzKClbMF07XG5cbiAgICBjb25zdCBjb21wYXJlc1RvTWFwID0gU3BlZWRNYXRyaXhDb250YWluZXIuQnVpbGRDb21wYXJlcyhjdXJyZW50UXVhbGl0eSwgcHJldmlvdXNRdWFsaXR5LCBuZXh0UXVhbGl0eSwgIXdpdGhDb21wYXJlRHVwbGljYXRlKTtcbiAgICBjb21wYXJlcyA9IGNvbXBhcmVzVG9NYXAubWFwKGMgPT4ge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbmFtZTogYy5uYW1lLFxuICAgICAgICBjb21wYXJlUG9pbnRzOiBjLnF1YWxpdHlQb2ludHMubWFwKHAgPT4gbmV3IFhZVHlwZShwLmdldEdhdWdlVmFsdWUoKSwgcC5nZXRSYWluVmFsdWUoKSwgMiwgcC5nYXVnZUxhYmVsLCBwLmdhdWdlSWQpKSxcbiAgICAgICAgY29tcGFyZVBvaW50c01heDogbmV3IFhZVHlwZShjLm1heFZhbHVlICsgMjAsIGMubWF4VmFsdWUgKyAyMCksXG4gICAgICAgIGNvbXBhcmVQb2ludHNIaXN0b3J5OiBjLnF1YWxpdHlQb2ludHNMZWdhY3ksXG4gICAgICAgIHJlbWFya3M6IGMucmVtYXJrc1xuICAgICAgfTtcbiAgICB9KTtcbiAgICByZXR1cm4ge2N1cnJlbnRRdWFsaXR5LCBjb21wYXJlU3BlZWRNYXRyaXgsIGNvbXBhcmVUcnVzdGVkSW5kaWNhdG9yLCBjb21wYXJlc307XG4gIH1cblxuICBwdWJsaWMgY2xlYW5BbGwoKSB7XG4gICAgdGhpcy5nYXVnZXNJbkNvbXBhcmUgPSBbXTtcbiAgICB0aGlzLnNlbGVjdGVkR2F1Z2VzID0gW107XG4gICAgdGhpcy5zZWxlY3RlZFBpeGVscyA9IFtdO1xuICAgIHRoaXMucGl4ZWxzU29sdXRpb25zID0gW107XG5cbiAgICB0aGlzLnNlbGVjdGVkR2F1Z2UgPSBudWxsO1xuICAgIHRoaXMuc2VsZWN0ZWRHYXVnZUluUG9pbnRzID0gbnVsbDtcbiAgICB0aGlzLmNsZWFuQ29tcGFyZVF1YWxpdHkoJ25vIGNvbXBhcmUnKTtcbiAgfVxuXG4gIGFzeW5jIHJlZnJlc2hDb21wYXJlUXVhbGl0eShmcmFtZVNldDogRnJhbWVTZXQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRzOiB7IGRhdGU6IERhdGU7IHJhaW5Db21wdXRhdGlvbklkOiBzdHJpbmc7IHJhaW5Db21wdXRhdGlvblF1YWxpdHlJZDogc3RyaW5nIH1bXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpdGhDb21wYXJlRHVwbGljYXRlOiBib29sZWFuKSB7XG5cbiAgICBjb25zdCB0YXJnZXRzT3JkZXJlZCA9IHRhcmdldHNcbiAgICAgIC5zb3J0KChhLCBiKSA9PiBhLmRhdGUuZ2V0VGltZSgpIC0gYi5kYXRlLmdldFRpbWUoKSlcbiAgICAgIC5tYXAodCA9PiB7XG4gICAgICAgIHJldHVybiB7ZGF0ZTogJycgKyB0LmRhdGUuZ2V0VGltZSgpLCByYWluQ29tcHV0YXRpb25JZDogdC5yYWluQ29tcHV0YXRpb25JZCwgcmFpbkNvbXB1dGF0aW9uUXVhbGl0eUlkOiB0LnJhaW5Db21wdXRhdGlvblF1YWxpdHlJZH07XG4gICAgICB9KTtcblxuICAgIGF3YWl0IHRoaXMuZmV0Y2hSYWluQ29tcHV0YXRpb25RdWFsaXRpZXModGFyZ2V0c09yZGVyZWQpO1xuXG4gICAgY29uc3Qge2N1cnJlbnRRdWFsaXR5LCBjb21wYXJlU3BlZWRNYXRyaXgsIGNvbXBhcmVUcnVzdGVkSW5kaWNhdG9yLCBjb21wYXJlc30gPVxuICAgICAgYXdhaXQgQ29tcGFyZU1hbmFnZXIuQnVpbGRDb21wYXJlKGZyYW1lU2V0LCB0YXJnZXRzT3JkZXJlZCwgdGhpcy5yYWluQ29tcHV0YXRpb25RdWFsaXRpZXMsIHdpdGhDb21wYXJlRHVwbGljYXRlKTtcblxuICAgIGlmICghY3VycmVudFF1YWxpdHkpIHtcbiAgICAgIHRoaXMuY2xlYW5Db21wYXJlUXVhbGl0eSgnbm8gY3VycmVudCBxdWFsaXR5ICcgKyBPYmplY3Qua2V5cyh0aGlzLnJhaW5Db21wdXRhdGlvblF1YWxpdGllcykpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmN1cnJlbnRRdWFsaXR5RG9uZURhdGUgPSBjdXJyZW50UXVhbGl0eS5pc0RvbmVEYXRlO1xuICAgICAgdGhpcy5jdXJyZW50UXVhbGl0eVRpbWVTcGVudEluTXMgPSBjdXJyZW50UXVhbGl0eS50aW1lU3BlbnRJbk1zO1xuICAgICAgdGhpcy5jdXJyZW50UXVhbGl0eUxhdW5jaGVkQnkgPSBjdXJyZW50UXVhbGl0eS5sYXVuY2hlZEJ5O1xuICAgICAgdGhpcy5jb21wYXJlVmVyc2lvbiA9IGN1cnJlbnRRdWFsaXR5LmdldFZlcnNpb24oKTtcbiAgICAgIHRoaXMuY29tcGFyZVNwZWVkTWF0cml4ID0gY29tcGFyZVNwZWVkTWF0cml4O1xuICAgICAgdGhpcy5jb21wYXJlVHJ1c3RlZEluZGljYXRvciA9IGNvbXBhcmVUcnVzdGVkSW5kaWNhdG9yO1xuICAgICAgdGhpcy5jb21wYXJlcyA9IGNvbXBhcmVzO1xuICAgIH1cblxuICAgIHRoaXMub25DaGFuZ2VzKCk7XG4gIH1cblxuICBhc3luYyByZWZyZXNoR2xvYmFsQ29tcGFyZVF1YWxpdHkodGFyZ2V0czogeyBkYXRlOiBEYXRlOyByYWluQ29tcHV0YXRpb25JZDogc3RyaW5nOyByYWluQ29tcHV0YXRpb25RdWFsaXR5SWQ6IHN0cmluZyB9W10sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aXRoQ29tcGFyZUR1cGxpY2F0ZTogYm9vbGVhbikge1xuXG4gICAgY29uc3QgdGFyZ2V0c09yZGVyZWQgPSB0YXJnZXRzXG4gICAgICAuc29ydCgoYSwgYikgPT4gYS5kYXRlLmdldFRpbWUoKSAtIGIuZGF0ZS5nZXRUaW1lKCkpXG4gICAgICAubWFwKHQgPT4ge1xuICAgICAgICByZXR1cm4ge2RhdGU6ICcnICsgdC5kYXRlLmdldFRpbWUoKSwgcmFpbkNvbXB1dGF0aW9uSWQ6IHQucmFpbkNvbXB1dGF0aW9uSWQsIHJhaW5Db21wdXRhdGlvblF1YWxpdHlJZDogdC5yYWluQ29tcHV0YXRpb25RdWFsaXR5SWR9O1xuICAgICAgfSk7XG5cbiAgICBhd2FpdCB0aGlzLmZldGNoUmFpbkNvbXB1dGF0aW9uUXVhbGl0aWVzKHRhcmdldHNPcmRlcmVkKTtcblxuICAgIGxldCBnbG9iYWxDb21wYXJlUG9pbnRzOiBYWVR5cGVbXSA9IFtdO1xuICAgIGZvciAoY29uc3QgZnJhbWVTZXQgb2YgdGFyZ2V0cykge1xuICAgICAgY29uc3Qge2N1cnJlbnRRdWFsaXR5LCBjb21wYXJlU3BlZWRNYXRyaXgsIGNvbXBhcmVUcnVzdGVkSW5kaWNhdG9yLCBjb21wYXJlc30gPVxuICAgICAgICBhd2FpdCBDb21wYXJlTWFuYWdlci5CdWlsZENvbXBhcmUoZnJhbWVTZXQsIHRhcmdldHNPcmRlcmVkLCB0aGlzLnJhaW5Db21wdXRhdGlvblF1YWxpdGllcywgd2l0aENvbXBhcmVEdXBsaWNhdGUpO1xuICAgICAgZm9yIChjb25zdCBjb21wYXJlIG9mIGNvbXBhcmVzID8gY29tcGFyZXMgOiBbXSkge1xuICAgICAgICBnbG9iYWxDb21wYXJlUG9pbnRzID0gZ2xvYmFsQ29tcGFyZVBvaW50cy5jb25jYXQoY29tcGFyZS5jb21wYXJlUG9pbnRzKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBsZXQgbWF4WCA9IDAsIG1heFkgPSAwO1xuICAgIGNvbnN0IGdsb2JhbENvbXBhcmVQb2ludHNHcm91cGVkID0gW107XG4gICAgY29uc3QgcG9pbnRzR3JvdXBlZEJ5SWQgPSBnbG9iYWxDb21wYXJlUG9pbnRzLnJlZHVjZSgocmVzLCB2YWx1ZSkgPT4ge1xuICAgICAgaWYgKCFyZXNbdmFsdWUuaWRdKSB7XG4gICAgICAgIHJlc1t2YWx1ZS5pZF0gPSB2YWx1ZTtcbiAgICAgICAgZ2xvYmFsQ29tcGFyZVBvaW50c0dyb3VwZWQucHVzaChyZXNbdmFsdWUuaWRdKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc1t2YWx1ZS5pZF0ueCArPSB2YWx1ZS54O1xuICAgICAgICByZXNbdmFsdWUuaWRdLnkgKz0gdmFsdWUueTtcbiAgICAgIH1cbiAgICAgIG1heFggPSBNYXRoLm1heChtYXhYLCByZXNbdmFsdWUuaWRdLngpO1xuICAgICAgbWF4WSA9IE1hdGgubWF4KG1heFksIHJlc1t2YWx1ZS5pZF0ueSk7XG4gICAgICByZXR1cm4gcmVzO1xuICAgIH0sIHt9KTtcbiAgICB0aGlzLmdsb2JhbENvbXBhcmVQb2ludHMgPSBnbG9iYWxDb21wYXJlUG9pbnRzR3JvdXBlZDtcbiAgICB0aGlzLmdsb2JhbENvbXBhcmVQb2ludHNNYXggPSBuZXcgWFlUeXBlKG1heFgsIG1heFkpO1xuICB9XG5cbiAgYXN5bmMgc2V0R2F1Z2VzKCkge1xuICAgIC8vIGNvbnNvbGUubG9nKCdzZXRHYXVnZXMnKTtcblxuICAgIGNvbnN0IHF1YWxpdHlQb2ludHM6IFF1YWxpdHlQb2ludFtdID0gW107XG4gICAgZm9yIChjb25zdCBjb21wYXJlIG9mIHRoaXMuY29tcGFyZXMpIHtcbiAgICAgIGZvciAoY29uc3QgcXVhbGl0eVBvaW50IG9mIGNvbXBhcmUuY29tcGFyZVBvaW50c0hpc3RvcnkpIHtcbiAgICAgICAgY29uc3QgYWxyZWFkeUFkZGVkID0gcXVhbGl0eVBvaW50cy5maWx0ZXIocCA9PiBwPy5nYXVnZUlkID09PSBxdWFsaXR5UG9pbnQuZ2F1Z2VJZCk7XG4gICAgICAgIGlmIChhbHJlYWR5QWRkZWQubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgcXVhbGl0eVBvaW50cy5wdXNoKHF1YWxpdHlQb2ludCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmdhdWdlc0luQ29tcGFyZSA9IHF1YWxpdHlQb2ludHMubWFwKHAgPT4ge1xuICAgICAgcmV0dXJuIG5ldyBNYXBMYXRMbmcocC5nYXVnZUNhcnRlc2lhblZhbHVlLmxhdCwgcC5nYXVnZUNhcnRlc2lhblZhbHVlLmxuZywgMCxcbiAgICAgICAgcC5nYXVnZUlkLCBwLmdhdWdlTGFiZWwgKyAnPicgKyBwLmdldEdhdWdlVmFsdWUoKSxcbiAgICAgICAgcC5nZXRHYXVnZVZhbHVlKCkpO1xuICAgIH0pO1xuXG4gICAgdGhpcy5yZXNldFNlbGVjdGVkR2F1Z2VzKCk7XG4gIH1cblxuICBhc3luYyBzZWxlY3RHYXVnZShnYXVnZUlkOiBzdHJpbmcsIGNvbXBhcmVJbmRleDogbnVtYmVyKSB7XG4gICAgLy8gY29uc29sZS5sb2coJ3NlbGVjdEdhdWdlJywgZ2F1Z2VJZCwgY29tcGFyZUluZGV4KTtcblxuICAgIGlmIChnYXVnZUlkKSB7XG4gICAgICBjb25zdCB4eXMgPSB0aGlzLmdldEN1cnJlbnRRdWFsaXR5UG9pbnRzKGNvbXBhcmVJbmRleCkuZmlsdGVyKHAgPT4gcC5nYXVnZUlkID09PSBnYXVnZUlkKTtcbiAgICAgIHRoaXMuc2VsZWN0ZWRHYXVnZSA9IHh5cy5sZW5ndGggPT09IDEgPyB4eXNbMF0gOiBudWxsO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNlbGVjdGVkR2F1Z2UgPSBudWxsO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5zZWxlY3RlZEdhdWdlKSB7XG4gICAgICByZXR1cm4gdGhpcy5yZXNldFNlbGVjdGVkR2F1Z2VzKCk7XG4gICAgfVxuXG4gICAgY29uc3Qgc2VsZWN0ZWRHYXVnZUluUG9pbnRzID0gdGhpcy5nZXRDdXJyZW50UXVhbGl0eVBvaW50cyhjb21wYXJlSW5kZXgpLmZpbHRlcihwID0+IHAuZ2F1Z2VJZCA9PT0gdGhpcy5zZWxlY3RlZEdhdWdlLmdhdWdlSWQpO1xuICAgIGxldCBwaXhlbHNTb2x1dGlvbnM6IE1hcExhdExuZ1tdW10gPSBbXTtcblxuICAgIGlmIChzZWxlY3RlZEdhdWdlSW5Qb2ludHMubGVuZ3RoID09PSAxKSB7XG4gICAgICBjb25zdCByZW1hcmtzID0gSlNPTi5wYXJzZShzZWxlY3RlZEdhdWdlSW5Qb2ludHNbMF0ucmVtYXJrKVxuICAgICAgICAuc29ydCgoYSwgYikgPT4gYS5jcml0ZXJpYUF0dGVtcHRlZFRvQmVNaW5pbXVtIC0gYi5jcml0ZXJpYUF0dGVtcHRlZFRvQmVNaW5pbXVtKTtcbiAgICAgIGNvbnNvbGUubG9nKHJlbWFya3MpO1xuICAgICAgcGl4ZWxzU29sdXRpb25zID0gcmVtYXJrc1xuICAgICAgICAubWFwKHJlbWFyayA9PiByZW1hcmsuc29sdXRpb25Gb3JHYXVnZS5waXhlbHNcbiAgICAgICAgICAubWFwKHAgPT4gbmV3IE1hcExhdExuZyhwLnkgKyAwLjAwNSwgcC54ICsgMC4wMSwgMCwgJycgKyAhcmVtYXJrLm5vdFBvc3NpYmxlLCAnJyArICFyZW1hcmsubm90UG9zc2libGUsIDEpKSk7XG5cbiAgICAgIGNvbnN0IHRpbWVEZWx0YUluTWludXRlcyA9IHNlbGVjdGVkR2F1Z2VJblBvaW50c1swXS5nZXRUaW1lRGVsdGFJbk1pbnV0ZXMoKTtcbiAgICAgIHRoaXMuc2VsZWN0ZWRHYXVnZUluUG9pbnRzRGV0YWlsID0gJycgKyBzZWxlY3RlZEdhdWdlSW5Qb2ludHNbMF0uZ2F1Z2VMYWJlbCArICcgPiAnXG4gICAgICAgICsgTWF0aC5yb3VuZChzZWxlY3RlZEdhdWdlSW5Qb2ludHNbMF0uZ2V0R2F1Z2VWYWx1ZSgpICogMTAwKSAvIDEwMCArICcgLyAnXG4gICAgICAgICsgTWF0aC5yb3VuZChzZWxlY3RlZEdhdWdlSW5Qb2ludHNbMF0uZ2V0UmFpblZhbHVlKCkgKiAxMDApIC8gMTAwXG4gICAgICAgICsgJyBkVD0nICsgdGltZURlbHRhSW5NaW51dGVzO1xuXG4gICAgICB0aGlzLnNlbGVjdGVkR2F1Z2VJblBvaW50cyA9IHNlbGVjdGVkR2F1Z2VJblBvaW50c1swXTtcblxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNlbGVjdGVkR2F1Z2VJblBvaW50cyA9IG51bGw7XG4gICAgICB0aGlzLnNlbGVjdGVkR2F1Z2VzID0gW107XG4gICAgICB0aGlzLnNlbGVjdGVkUGl4ZWxzID0gW107XG4gICAgICB0aGlzLnBpeGVsc1NvbHV0aW9ucyA9IFtdO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuc2VsZWN0ZWRHYXVnZXMgPSBbXG4gICAgICBuZXcgTWFwTGF0TG5nKHRoaXMuc2VsZWN0ZWRHYXVnZUluUG9pbnRzLmdhdWdlQ2FydGVzaWFuVmFsdWUubGF0LCB0aGlzLnNlbGVjdGVkR2F1Z2VJblBvaW50cy5nYXVnZUNhcnRlc2lhblZhbHVlLmxuZywgdW5kZWZpbmVkLFxuICAgICAgICB0aGlzLnNlbGVjdGVkR2F1Z2VJblBvaW50cy5nYXVnZUlkLFxuICAgICAgICB0aGlzLnNlbGVjdGVkR2F1Z2VJblBvaW50cy5nYXVnZUxhYmVsICsgJz4nICsgdGhpcy5zZWxlY3RlZEdhdWdlSW5Qb2ludHMuZ2F1Z2VDYXJ0ZXNpYW5WYWx1ZS52YWx1ZSxcbiAgICAgICAgdGhpcy5zZWxlY3RlZEdhdWdlSW5Qb2ludHMuZ2F1Z2VDYXJ0ZXNpYW5WYWx1ZS52YWx1ZSksXG4gICAgXTtcblxuICAgIHRoaXMuc2VsZWN0R2F1Z2VJbkNvbXBhcmUoKTtcblxuICAgIGNvbnN0IHBpeGVsczogTWFwTGF0TG5nW10gPSBbXTtcbiAgICBmb3IgKGNvbnN0IHJhaW5DYXJ0ZXNpYW5WYWx1ZSBvZiB0aGlzLnNlbGVjdGVkR2F1Z2VJblBvaW50cy5yYWluQ2FydGVzaWFuVmFsdWVzKSB7XG4gICAgICBwaXhlbHMucHVzaChuZXcgTWFwTGF0TG5nKHJhaW5DYXJ0ZXNpYW5WYWx1ZS5sYXQgKyAwLjAwNSwgcmFpbkNhcnRlc2lhblZhbHVlLmxuZyArIDAuMDEpKTtcbiAgICB9XG4gICAgdGhpcy5zZWxlY3RlZFBpeGVscyA9IHBpeGVscztcblxuICAgIHRoaXMucGl4ZWxzU29sdXRpb25zID0gcGl4ZWxzU29sdXRpb25zO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldEN1cnJlbnRRdWFsaXR5UG9pbnRzKGNvbXBhcmVJbmRleDogbnVtYmVyKSB7XG4gICAgaWYgKGNvbXBhcmVJbmRleCA8IDAgfHwgdGhpcy5jb21wYXJlTmFtZXMubGVuZ3RoIDwgY29tcGFyZUluZGV4KSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuY29tcGFyZXNbY29tcGFyZUluZGV4XS5jb21wYXJlUG9pbnRzSGlzdG9yeTtcbiAgfVxuXG4gIHByb3RlY3RlZCBjbGVhbkNvbXBhcmVRdWFsaXR5KGRldGFpbHM/OiBzdHJpbmcpIHtcbiAgICB0aGlzLmNvbXBhcmVWZXJzaW9uID0gZGV0YWlscztcbiAgICB0aGlzLmNvbXBhcmVOYW1lcyA9IFtdO1xuICAgIHRoaXMuY29tcGFyZXMgPSBbXTtcbiAgICB0aGlzLmNvbXBhcmVTcGVlZE1hdHJpeCA9IFtdO1xuICAgIHRoaXMuY29tcGFyZVRydXN0ZWRJbmRpY2F0b3IgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5yYWluQ29tcHV0YXRpb25RdWFsaXRpZXMgPSB7fTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBmZXRjaFJhaW5Db21wdXRhdGlvblF1YWxpdGllcyh0YXJnZXRzT3JkZXJlZDoge1xuICAgIGRhdGU6IHN0cmluZztcbiAgICByYWluQ29tcHV0YXRpb25JZDogc3RyaW5nO1xuICAgIHJhaW5Db21wdXRhdGlvblF1YWxpdHlJZDogc3RyaW5nXG4gIH1bXSkge1xuXG4gICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXModGhpcy5yYWluQ29tcHV0YXRpb25RdWFsaXRpZXMpKSB7XG4gICAgICBjb25zdCBmb3VuZCA9IHRhcmdldHNPcmRlcmVkLmZpbHRlcih0ID0+IHQuZGF0ZSA9PT0ga2V5KTtcbiAgICAgIGlmIChmb3VuZC5sZW5ndGggPCAwKSB7XG4gICAgICAgIGRlbGV0ZSB0aGlzLnJhaW5Db21wdXRhdGlvblF1YWxpdGllc1trZXldO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZvciAoY29uc3QgdGFyZ2V0IG9mIHRhcmdldHNPcmRlcmVkKSB7XG4gICAgICBpZiAoIXRoaXMucmFpbkNvbXB1dGF0aW9uUXVhbGl0aWVzW3RhcmdldC5kYXRlXSAmJiB0YXJnZXQucmFpbkNvbXB1dGF0aW9uUXVhbGl0eUlkKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgdGhpcy5yYWluQ29tcHV0YXRpb25RdWFsaXRpZXNbdGFyZ2V0LmRhdGVdID0gYXdhaXQgdGhpcy5wcm9maWxlU2VydmljZVxuICAgICAgICAgICAgLmdldFJhaW5Db21wYXJlQnlJZCh0aGlzLnJhaW5Ob2RlLmdldElkKCksIHRhcmdldC5yYWluQ29tcHV0YXRpb25JZCwgdGFyZ2V0LnJhaW5Db21wdXRhdGlvblF1YWxpdHlJZCk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBzZWxlY3RHYXVnZUluQ29tcGFyZSgpIHtcbiAgICBmb3IgKGNvbnN0IGNvbXBhcmUgb2YgdGhpcy5jb21wYXJlcykge1xuICAgICAgY29uc3QgY29tcGFyZVBvaW50cyA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoY29tcGFyZS5jb21wYXJlUG9pbnRzKSk7XG4gICAgICBjb21wYXJlUG9pbnRzLmZvckVhY2gocCA9PiB7XG4gICAgICAgIGlmIChwLmlkID09PSB0aGlzLnNlbGVjdGVkR2F1Z2VJblBvaW50cz8uZ2F1Z2VJZCkge1xuICAgICAgICAgIHAuciA9IDEwO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHAuciA9IDM7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgY29tcGFyZS5jb21wYXJlUG9pbnRzID0gY29tcGFyZVBvaW50cztcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgcmVzZXRTZWxlY3RlZEdhdWdlcygpIHtcbiAgICAvLyBjb25zb2xlLmxvZygncmVzZXRTZWxlY3RlZEdhdWdlcyByZXNldCcpO1xuICAgIHRoaXMuc2VsZWN0ZWRHYXVnZSA9IG51bGw7XG4gICAgdGhpcy5zZWxlY3RlZEdhdWdlSW5Qb2ludHMgPSBudWxsO1xuICAgIHRoaXMuc2VsZWN0ZWRHYXVnZXMgPSBbXTtcbiAgICB0aGlzLnNlbGVjdGVkUGl4ZWxzID0gW107XG4gICAgdGhpcy5waXhlbHNTb2x1dGlvbnMgPSBbXTtcbiAgICB0aGlzLnNlbGVjdEdhdWdlSW5Db21wYXJlKCk7XG4gIH1cbn1cbiJdfQ==
238
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29tcGFyZU1hbmFnZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXBwL3NoYXJlZC90b29scy9Db21wYXJlTWFuYWdlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sVUFBVSxDQUFDO0FBQ25DLE9BQU8sRUFBZ0Usb0JBQW9CLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFDaEgsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLFdBQVcsQ0FBQztBQVlqQyxNQUFNLE9BQU8sY0FBYztJQXlCekIsWUFDWSxRQUFrQixFQUNsQixjQUE4QixFQUNqQyxZQUF3QixHQUFHLEVBQUU7SUFDcEMsQ0FBQztRQUhTLGFBQVEsR0FBUixRQUFRLENBQVU7UUFDbEIsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQ2pDLGNBQVMsR0FBVCxTQUFTLENBQ2Y7UUFFRCxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDbEIsQ0FBQztJQUVTLE1BQU0sQ0FBQyxXQUFXLENBQUMsS0FBYSxFQUFFLEtBQWEsRUFBRSxPQUFlO1FBRXhFLE1BQU0sV0FBVyxHQUFTLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUN4RCxNQUFNLFNBQVMsR0FBRyxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDaEQsU0FBUyxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsVUFBVSxFQUFFLEdBQUcsT0FBTyxDQUFDLENBQUM7UUFDdkQsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLFdBQVcsQ0FBQyxPQUFPLEVBQUUsR0FBRyxTQUFTLENBQUMsT0FBTyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQ3JGLE9BQU8sSUFBSSxLQUFLLENBQUMs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QUM7aUJBQ1Q7WUFDSCxDQUFDLENBQUMsQ0FBQztZQUNILE9BQU8sQ0FBQyxhQUFhLEdBQUcsYUFBYSxDQUFDO1NBQ3ZDO0lBQ0gsQ0FBQztJQUVTLG1CQUFtQjtRQUMzQiw0Q0FBNEM7UUFDNUMsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUM7UUFDMUIsSUFBSSxDQUFDLHFCQUFxQixHQUFHLElBQUksQ0FBQztRQUNsQyxJQUFJLENBQUMsY0FBYyxHQUFHLEVBQUUsQ0FBQztRQUN6QixJQUFJLENBQUMsY0FBYyxHQUFHLEVBQUUsQ0FBQztRQUN6QixJQUFJLENBQUMsZUFBZSxHQUFHLEVBQUUsQ0FBQztRQUMxQixJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztJQUM5QixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge01hcExhdExuZ30gZnJvbSAncmFhaW4tdWknO1xuaW1wb3J0IHtQb3NpdGlvblZhbHVlLCBRdWFsaXR5UG9pbnQsIFJhaW5Db21wdXRhdGlvblF1YWxpdHksIFJhaW5Ob2RlLCBTcGVlZE1hdHJpeENvbnRhaW5lcn0gZnJvbSAncmFhaW4tbW9kZWwnO1xuaW1wb3J0IHtYWVR5cGV9IGZyb20gJy4uL3h5dHlwZSc7XG5pbXBvcnQge1Byb2ZpbGVTZXJ2aWNlfSBmcm9tICcuLi9wcm9maWxlLnNlcnZpY2UnO1xuaW1wb3J0IHtGcmFtZVNldH0gZnJvbSAnLi9GcmFtZVNldCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUNvbXBhcmUge1xuICBuYW1lOiBzdHJpbmc7XG4gIGNvbXBhcmVQb2ludHM6IFhZVHlwZVtdO1xuICBjb21wYXJlUG9pbnRzTWF4OiBYWVR5cGU7XG4gIGNvbXBhcmVQb2ludHNIaXN0b3J5OiBRdWFsaXR5UG9pbnRbXTtcbiAgcmVtYXJrczogc3RyaW5nO1xufVxuXG5leHBvcnQgY2xhc3MgQ29tcGFyZU1hbmFnZXIge1xuXG4gIC8vIHB1YmxpYyBjb21wdXRlZCQ6IE9ic2VydmFibGU8Ym9vbGVhbj47XG5cbiAgcHVibGljIGdhdWdlc0luQ29tcGFyZTogTWFwTGF0TG5nW107XG4gIHB1YmxpYyBzZWxlY3RlZEdhdWdlczogTWFwTGF0TG5nW107XG4gIHB1YmxpYyBzZWxlY3RlZFBpeGVsczogTWFwTGF0TG5nW107XG4gIHB1YmxpYyBwaXhlbHNTb2x1dGlvbnM6IE1hcExhdExuZ1tdW107XG5cbiAgcHVibGljIGNvbXBhcmVOYW1lczogc3RyaW5nW107XG4gIHB1YmxpYyBjb21wYXJlczogSUNvbXBhcmVbXTtcbiAgcHVibGljIGNvbXBhcmVTcGVlZE1hdHJpeDogUG9zaXRpb25WYWx1ZVtdO1xuICBwdWJsaWMgY29tcGFyZVZlcnNpb246IHN0cmluZztcbiAgcHVibGljIGNvbXBhcmVUcnVzdGVkSW5kaWNhdG9yOiBudW1iZXI7XG4gIHB1YmxpYyBjdXJyZW50UXVhbGl0eURvbmVEYXRlOiBEYXRlO1xuICBwdWJsaWMgY3VycmVudFF1YWxpdHlMYXVuY2hlZEJ5OiBzdHJpbmc7XG4gIHB1YmxpYyBjdXJyZW50UXVhbGl0eVRpbWVTcGVudEluTXM6IG51bWJlcjtcbiAgcHVibGljIGdsb2JhbENvbXBhcmVQb2ludHM6IFhZVHlwZVtdO1xuICBwdWJsaWMgZ2xvYmFsQ29tcGFyZVBvaW50c01heDogWFlUeXBlO1xuXG4gIHByb3RlY3RlZCBzZWxlY3RlZEdhdWdlOiBRdWFsaXR5UG9pbnQ7XG4gIHByb3RlY3RlZCBzZWxlY3RlZEdhdWdlSW5Qb2ludHM6IFF1YWxpdHlQb2ludDtcbiAgcHJvdGVjdGVkIHNlbGVjdGVkR2F1Z2VJblBvaW50c0RldGFpbDogc3RyaW5nO1xuICBwcm90ZWN0ZWQgcmFpbkNvbXB1dGF0aW9uUXVhbGl0aWVzOiBhbnk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJvdGVjdGVkIHJhaW5Ob2RlOiBSYWluTm9kZSxcbiAgICBwcm90ZWN0ZWQgcHJvZmlsZVNlcnZpY2U6IFByb2ZpbGVTZXJ2aWNlLFxuICAgIHB1YmxpYyBvbkNoYW5nZXM6ICgpID0+IHZvaWQgPSAoKSA9PiB7XG4gICAgfVxuICApIHtcbiAgICB0aGlzLmNsZWFuQWxsKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgc3RhdGljIENvbXBhcmVEYXRlKGRhdGUxOiBzdHJpbmcsIGRhdGUyOiBzdHJpbmcsIG1pbnV0ZXM6IG51bWJlcik6IGJvb2xlYW4ge1xuXG4gICAgY29uc3QgZGF0ZTFBc0RhdGU6IERhdGUgPSBuZXcgRGF0ZShwYXJzZUludChkYXRlMSwgMTApKTtcbiAgICBjb25zdCBkYXRlMkRpZmYgPSBuZXcgRGF0ZShwYXJzZUludChkYXRlMiwgMTApKTtcbiAgICBkYXRlMkRpZmYuc2V0TWludXRlcyhkYXRlMkRpZmYuZ2V0TWludXRlcygpICsgbWludXRlcyk7XG4gICAgY29uc3QgZGlmZiA9IE1hdGgucm91bmQoKGRhdGUxQXNEYXRlLmdldFRpbWUoKSAtIGRhdGUyRGlmZi5nZXRUaW1lKCkpIC8gKDYwICogMTAwMCkpO1xuICAgIHJldHVybiBkaWZmID09PSAwO1xuICB9XG5cbiAgcHJvdGVjdGVkIHN0YXRpYyBhc3luYyBCdWlsZENvbXBhcmUoZnJhbWVTZXQ6IHsgZGF0ZTogRGF0ZSB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRzT3JkZXJlZDogeyBkYXRlOiBzdHJpbmc7IHJhaW5Db21wdXRhdGlvbklkOiBzdHJpbmc7IHJhaW5Db21wdXRhdGlvblF1YWxpdHlJZDogc3RyaW5nIH1bXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFpbkNvbXB1dGF0aW9uUXVhbGl0aWVzOiBhbnksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpdGhDb21wYXJlRHVwbGljYXRlOiBib29sZWFuKSB7XG5cbiAgICBsZXQgY29tcGFyZVNwZWVkTWF0cml4LCBjb21wYXJlVHJ1c3RlZEluZGljYXRvcjtcbiAgICBsZXQgY29tcGFyZU5hbWVzOiBzdHJpbmdbXSA9IFtdO1xuICAgIGxldCBjb21wYXJlczogSUNvbXBhcmVbXSA9IFtdO1xuICAgIGNvbnN0IGN1cnJlbnRUYXJnZXQgPSB0YXJnZXRzT3JkZXJlZC5maWx0ZXIodCA9PiB0LmRhdGUgPT09ICcnICsgZnJhbWVTZXQuZGF0ZS5nZXRUaW1lKCkpWzBdO1xuICAgIGNvbnN0IGN1cnJlbnRQb3MgPSB0YXJnZXRzT3JkZXJlZC5pbmRleE9mKGN1cnJlbnRUYXJnZXQpO1xuICAgIGNvbnN0IHByZXZpb3VzVGFyZ2V0ID0gY3VycmVudFBvcyA+PSAwID8gdGFyZ2V0c09yZGVyZWRbY3VycmVudFBvcyAtIDFdIDogbnVsbDtcbiAgICBjb25zdCBuZXh0VGFyZ2V0ID0gY3VycmVudFBvcyA+PSAwICYmIGN1cnJlbnRQb3MgPCB0YXJnZXRzT3JkZXJlZC5sZW5ndGggLSAxID8gdGFyZ2V0c09yZGVyZWRbY3VycmVudFBvcyArIDFdIDogbnVsbDtcblxuXG4gICAgY29uc3QgY3VycmVudFF1YWxpdHk6IFJhaW5Db21wdXRhdGlvblF1YWxpdHkgPSByYWluQ29tcHV0YXRpb25RdWFsaXRpZXNbY3VycmVudFRhcmdldD8uZGF0ZV07XG4gICAgaWYgKCFjdXJyZW50UXVhbGl0eSkge1xuICAgICAgcmV0dXJuIHtjdXJyZW50UXVhbGl0eSwgY29tcGFyZVNwZWVkTWF0cml4LCBjb21wYXJlVHJ1c3RlZEluZGljYXRvciwgY29tcGFyZU5hbWVzLCBjb21wYXJlc307XG4gICAgfVxuXG4gICAgY29uc3QgcHJldmlvdXNRdWFsaXR5OiBSYWluQ29tcHV0YXRpb25RdWFsaXR5ID0gcHJldmlvdXNUYXJnZXQgJiZcbiAgICBDb21wYXJlTWFuYWdlci5Db21wYXJlRGF0ZShwcmV2aW91c1RhcmdldC5kYXRlLCBjdXJyZW50VGFyZ2V0LmRhdGUsIC01KSA/XG4gICAgICByYWluQ29tcHV0YXRpb25RdWFsaXRpZXNbcHJldmlvdXNUYXJnZXQuZGF0ZV0gOiBudWxsO1xuICAgIGNvbnN0IG5leHRRdWFsaXR5OiBSYWluQ29tcHV0YXRpb25RdWFsaXR5ID0gbmV4dFRhcmdldFxuICAgICYmIENvbXBhcmVNYW5hZ2VyLkNvbXBhcmVEYXRlKG5leHRUYXJnZXQuZGF0ZSwgY3VycmVudFRhcmdldC5kYXRlLCArNSkgP1xuICAgICAgcmFpbkNvbXB1dGF0aW9uUXVhbGl0aWVzW25leHRUYXJnZXQuZGF0ZV0gOiBudWxsO1xuXG4gICAgY29uc3QgcXVhbGl0eVNwZWVkTWF0cml4Q29udGFpbmVyID0gY3VycmVudFF1YWxpdHkucXVhbGl0eVNwZWVkTWF0cml4Q29udGFpbmVyO1xuICAgIGNvbXBhcmVTcGVlZE1hdHJpeCA9IHF1YWxpdHlTcGVlZE1hdHJpeENvbnRhaW5lci5yZW5kZXJNZXJnZWRNYXRyaXgoe25vcm1hbGl6ZTogdHJ1ZX0pO1xuICAgIGNvbXBhcmVUcnVzdGVkSW5kaWNhdG9yID0gcXVhbGl0eVNwZWVkTWF0cml4Q29udGFpbmVyLmdldFRydXN0ZWRJbmRpY2F0b3JzKClbMF07XG5cbiAgICBjb25zdCBjb21wYXJlc1RvTWFwID0gU3BlZWRNYXRyaXhDb250YWluZXIuQnVpbGRDb21wYXJlcyhjdXJyZW50UXVhbGl0eSwgcHJldmlvdXNRdWFsaXR5LCBuZXh0UXVhbGl0eSwgIXdpdGhDb21wYXJlRHVwbGljYXRlKTtcblxuICAgIGNvbXBhcmVOYW1lcyA9IHF1YWxpdHlTcGVlZE1hdHJpeENvbnRhaW5lci5nZXRNYXRyaWNlcygpXG4gICAgICAubWFwKG0gPT4gbS5uYW1lKVxuICAgICAgLnNvcnQoKGEsIGIpID0+IHBhcnNlSW50KGEsIDEwKSAtIHBhcnNlSW50KGIsIDEwKSk7XG4gICAgY29tcGFyZXMgPSBjb21wYXJlc1RvTWFwLm1hcChjID0+IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG5hbWU6IGMubmFtZSxcbiAgICAgICAgY29tcGFyZVBvaW50czogYy5xdWFsaXR5UG9pbnRzLm1hcChwID0+IG5ldyBYWVR5cGUocC5nZXRHYXVnZVZhbHVlKCksIHAuZ2V0UmFpblZhbHVlKCksIDIsIHAuZ2F1Z2VMYWJlbCwgcC5nYXVnZUlkKSksXG4gICAgICAgIGNvbXBhcmVQb2ludHNNYXg6IG5ldyBYWVR5cGUoYy5tYXhWYWx1ZSArIDIwLCBjLm1heFZhbHVlICsgMjApLFxuICAgICAgICBjb21wYXJlUG9pbnRzSGlzdG9yeTogYy5xdWFsaXR5UG9pbnRzTGVnYWN5LFxuICAgICAgICByZW1hcmtzOiBjLnJlbWFya3NcbiAgICAgIH07XG4gICAgfSk7XG4gICAgcmV0dXJuIHtjdXJyZW50UXVhbGl0eSwgY29tcGFyZVNwZWVkTWF0cml4LCBjb21wYXJlVHJ1c3RlZEluZGljYXRvciwgY29tcGFyZU5hbWVzLCBjb21wYXJlc307XG4gIH1cblxuICBwdWJsaWMgY2xlYW5BbGwoKSB7XG4gICAgdGhpcy5nYXVnZXNJbkNvbXBhcmUgPSBbXTtcbiAgICB0aGlzLnNlbGVjdGVkR2F1Z2VzID0gW107XG4gICAgdGhpcy5zZWxlY3RlZFBpeGVscyA9IFtdO1xuICAgIHRoaXMucGl4ZWxzU29sdXRpb25zID0gW107XG5cbiAgICB0aGlzLnNlbGVjdGVkR2F1Z2UgPSBudWxsO1xuICAgIHRoaXMuc2VsZWN0ZWRHYXVnZUluUG9pbnRzID0gbnVsbDtcbiAgICB0aGlzLmNsZWFuQ29tcGFyZVF1YWxpdHkoJ25vIGNvbXBhcmUnKTtcbiAgfVxuXG4gIGFzeW5jIHJlZnJlc2hDb21wYXJlUXVhbGl0eShmcmFtZVNldDogRnJhbWVTZXQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRzOiB7IGRhdGU6IERhdGU7IHJhaW5Db21wdXRhdGlvbklkOiBzdHJpbmc7IHJhaW5Db21wdXRhdGlvblF1YWxpdHlJZDogc3RyaW5nIH1bXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpdGhDb21wYXJlRHVwbGljYXRlOiBib29sZWFuKSB7XG5cbiAgICBjb25zdCB0YXJnZXRzT3JkZXJlZCA9IHRhcmdldHNcbiAgICAgIC5zb3J0KChhLCBiKSA9PiBhLmRhdGUuZ2V0VGltZSgpIC0gYi5kYXRlLmdldFRpbWUoKSlcbiAgICAgIC5tYXAodCA9PiB7XG4gICAgICAgIHJldHVybiB7ZGF0ZTogJycgKyB0LmRhdGUuZ2V0VGltZSgpLCByYWluQ29tcHV0YXRpb25JZDogdC5yYWluQ29tcHV0YXRpb25JZCwgcmFpbkNvbXB1dGF0aW9uUXVhbGl0eUlkOiB0LnJhaW5Db21wdXRhdGlvblF1YWxpdHlJZH07XG4gICAgICB9KTtcblxuICAgIGF3YWl0IHRoaXMuZmV0Y2hSYWluQ29tcHV0YXRpb25RdWFsaXRpZXModGFyZ2V0c09yZGVyZWQpO1xuXG4gICAgY29uc3Qge2N1cnJlbnRRdWFsaXR5LCBjb21wYXJlU3BlZWRNYXRyaXgsIGNvbXBhcmVUcnVzdGVkSW5kaWNhdG9yLCBjb21wYXJlTmFtZXMsIGNvbXBhcmVzfSA9XG4gICAgICBhd2FpdCBDb21wYXJlTWFuYWdlci5CdWlsZENvbXBhcmUoZnJhbWVTZXQsIHRhcmdldHNPcmRlcmVkLCB0aGlzLnJhaW5Db21wdXRhdGlvblF1YWxpdGllcywgd2l0aENvbXBhcmVEdXBsaWNhdGUpO1xuXG4gICAgaWYgKCFjdXJyZW50UXVhbGl0eSkge1xuICAgICAgdGhpcy5jbGVhbkNvbXBhcmVRdWFsaXR5KCdubyBjdXJyZW50IHF1YWxpdHkgJyArIE9iamVjdC5rZXlzKHRoaXMucmFpbkNvbXB1dGF0aW9uUXVhbGl0aWVzKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY3VycmVudFF1YWxpdHlEb25lRGF0ZSA9IGN1cnJlbnRRdWFsaXR5LmlzRG9uZURhdGU7XG4gICAgICB0aGlzLmN1cnJlbnRRdWFsaXR5VGltZVNwZW50SW5NcyA9IGN1cnJlbnRRdWFsaXR5LnRpbWVTcGVudEluTXM7XG4gICAgICB0aGlzLmN1cnJlbnRRdWFsaXR5TGF1bmNoZWRCeSA9IGN1cnJlbnRRdWFsaXR5LmxhdW5jaGVkQnk7XG4gICAgICB0aGlzLmNvbXBhcmVWZXJzaW9uID0gY3VycmVudFF1YWxpdHkuZ2V0VmVyc2lvbigpO1xuICAgICAgdGhpcy5jb21wYXJlU3BlZWRNYXRyaXggPSBjb21wYXJlU3BlZWRNYXRyaXg7XG4gICAgICB0aGlzLmNvbXBhcmVUcnVzdGVkSW5kaWNhdG9yID0gY29tcGFyZVRydXN0ZWRJbmRpY2F0b3I7XG4gICAgICB0aGlzLmNvbXBhcmVOYW1lcyA9IGNvbXBhcmVOYW1lcztcbiAgICAgIHRoaXMuY29tcGFyZXMgPSBjb21wYXJlcztcbiAgICB9XG5cbiAgICB0aGlzLm9uQ2hhbmdlcygpO1xuICB9XG5cbiAgYXN5bmMgcmVmcmVzaEdsb2JhbENvbXBhcmVRdWFsaXR5KHRhcmdldHM6IHsgZGF0ZTogRGF0ZTsgcmFpbkNvbXB1dGF0aW9uSWQ6IHN0cmluZzsgcmFpbkNvbXB1dGF0aW9uUXVhbGl0eUlkOiBzdHJpbmcgfVtdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2l0aENvbXBhcmVEdXBsaWNhdGU6IGJvb2xlYW4pIHtcblxuICAgIGNvbnN0IHRhcmdldHNPcmRlcmVkID0gdGFyZ2V0c1xuICAgICAgLnNvcnQoKGEsIGIpID0+IGEuZGF0ZS5nZXRUaW1lKCkgLSBiLmRhdGUuZ2V0VGltZSgpKVxuICAgICAgLm1hcCh0ID0+IHtcbiAgICAgICAgcmV0dXJuIHtkYXRlOiAnJyArIHQuZGF0ZS5nZXRUaW1lKCksIHJhaW5Db21wdXRhdGlvbklkOiB0LnJhaW5Db21wdXRhdGlvbklkLCByYWluQ29tcHV0YXRpb25RdWFsaXR5SWQ6IHQucmFpbkNvbXB1dGF0aW9uUXVhbGl0eUlkfTtcbiAgICAgIH0pO1xuXG4gICAgYXdhaXQgdGhpcy5mZXRjaFJhaW5Db21wdXRhdGlvblF1YWxpdGllcyh0YXJnZXRzT3JkZXJlZCk7XG5cbiAgICBsZXQgZ2xvYmFsQ29tcGFyZVBvaW50czogWFlUeXBlW10gPSBbXTtcbiAgICBmb3IgKGNvbnN0IGZyYW1lU2V0IG9mIHRhcmdldHMpIHtcbiAgICAgIGNvbnN0IHtjdXJyZW50UXVhbGl0eSwgY29tcGFyZVNwZWVkTWF0cml4LCBjb21wYXJlVHJ1c3RlZEluZGljYXRvciwgY29tcGFyZXN9ID1cbiAgICAgICAgYXdhaXQgQ29tcGFyZU1hbmFnZXIuQnVpbGRDb21wYXJlKGZyYW1lU2V0LCB0YXJnZXRzT3JkZXJlZCwgdGhpcy5yYWluQ29tcHV0YXRpb25RdWFsaXRpZXMsIHdpdGhDb21wYXJlRHVwbGljYXRlKTtcbiAgICAgIGZvciAoY29uc3QgY29tcGFyZSBvZiBjb21wYXJlcyA/IGNvbXBhcmVzIDogW10pIHtcbiAgICAgICAgZ2xvYmFsQ29tcGFyZVBvaW50cyA9IGdsb2JhbENvbXBhcmVQb2ludHMuY29uY2F0KGNvbXBhcmUuY29tcGFyZVBvaW50cyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgbGV0IG1heFggPSAwLCBtYXhZID0gMDtcbiAgICBjb25zdCBnbG9iYWxDb21wYXJlUG9pbnRzR3JvdXBlZCA9IFtdO1xuICAgIGNvbnN0IHBvaW50c0dyb3VwZWRCeUlkID0gZ2xvYmFsQ29tcGFyZVBvaW50cy5yZWR1Y2UoKHJlcywgdmFsdWUpID0+IHtcbiAgICAgIGlmICghcmVzW3ZhbHVlLmlkXSkge1xuICAgICAgICByZXNbdmFsdWUuaWRdID0gdmFsdWU7XG4gICAgICAgIGdsb2JhbENvbXBhcmVQb2ludHNHcm91cGVkLnB1c2gocmVzW3ZhbHVlLmlkXSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXNbdmFsdWUuaWRdLnggKz0gdmFsdWUueDtcbiAgICAgICAgcmVzW3ZhbHVlLmlkXS55ICs9IHZhbHVlLnk7XG4gICAgICB9XG4gICAgICBtYXhYID0gTWF0aC5tYXgobWF4WCwgcmVzW3ZhbHVlLmlkXS54KTtcbiAgICAgIG1heFkgPSBNYXRoLm1heChtYXhZLCByZXNbdmFsdWUuaWRdLnkpO1xuICAgICAgcmV0dXJuIHJlcztcbiAgICB9LCB7fSk7XG4gICAgdGhpcy5nbG9iYWxDb21wYXJlUG9pbnRzID0gZ2xvYmFsQ29tcGFyZVBvaW50c0dyb3VwZWQ7XG4gICAgdGhpcy5nbG9iYWxDb21wYXJlUG9pbnRzTWF4ID0gbmV3IFhZVHlwZShtYXhYLCBtYXhZKTtcbiAgfVxuXG4gIGFzeW5jIHNldEdhdWdlcygpIHtcbiAgICAvLyBjb25zb2xlLmxvZygnc2V0R2F1Z2VzJyk7XG5cbiAgICBjb25zdCBxdWFsaXR5UG9pbnRzOiBRdWFsaXR5UG9pbnRbXSA9IFtdO1xuICAgIGZvciAoY29uc3QgY29tcGFyZSBvZiB0aGlzLmNvbXBhcmVzKSB7XG4gICAgICBmb3IgKGNvbnN0IHF1YWxpdHlQb2ludCBvZiBjb21wYXJlLmNvbXBhcmVQb2ludHNIaXN0b3J5KSB7XG4gICAgICAgIGNvbnN0IGFscmVhZHlBZGRlZCA9IHF1YWxpdHlQb2ludHMuZmlsdGVyKHAgPT4gcD8uZ2F1Z2VJZCA9PT0gcXVhbGl0eVBvaW50LmdhdWdlSWQpO1xuICAgICAgICBpZiAoYWxyZWFkeUFkZGVkLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIHF1YWxpdHlQb2ludHMucHVzaChxdWFsaXR5UG9pbnQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5nYXVnZXNJbkNvbXBhcmUgPSBxdWFsaXR5UG9pbnRzLm1hcChwID0+IHtcbiAgICAgIHJldHVybiBuZXcgTWFwTGF0TG5nKHAuZ2F1Z2VDYXJ0ZXNpYW5WYWx1ZS5sYXQsIHAuZ2F1Z2VDYXJ0ZXNpYW5WYWx1ZS5sbmcsIDAsXG4gICAgICAgIHAuZ2F1Z2VJZCwgcC5nYXVnZUxhYmVsICsgJz4nICsgcC5nZXRHYXVnZVZhbHVlKCksXG4gICAgICAgIHAuZ2V0R2F1Z2VWYWx1ZSgpKTtcbiAgICB9KTtcblxuICAgIHRoaXMucmVzZXRTZWxlY3RlZEdhdWdlcygpO1xuICB9XG5cbiAgYXN5bmMgc2VsZWN0R2F1Z2UoZ2F1Z2VJZDogc3RyaW5nLCBjb21wYXJlSW5kZXg6IG51bWJlcikge1xuICAgIC8vIGNvbnNvbGUubG9nKCdzZWxlY3RHYXVnZScsIGdhdWdlSWQsIGNvbXBhcmVJbmRleCk7XG5cbiAgICBpZiAoZ2F1Z2VJZCkge1xuICAgICAgY29uc3QgeHlzID0gdGhpcy5nZXRDdXJyZW50UXVhbGl0eVBvaW50cyhjb21wYXJlSW5kZXgpLmZpbHRlcihwID0+IHAuZ2F1Z2VJZCA9PT0gZ2F1Z2VJZCk7XG4gICAgICB0aGlzLnNlbGVjdGVkR2F1Z2UgPSB4eXMubGVuZ3RoID09PSAxID8geHlzWzBdIDogbnVsbDtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zZWxlY3RlZEdhdWdlID0gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuc2VsZWN0ZWRHYXVnZSkge1xuICAgICAgcmV0dXJuIHRoaXMucmVzZXRTZWxlY3RlZEdhdWdlcygpO1xuICAgIH1cblxuICAgIGNvbnN0IHNlbGVjdGVkR2F1Z2VJblBvaW50cyA9IHRoaXMuZ2V0Q3VycmVudFF1YWxpdHlQb2ludHMoY29tcGFyZUluZGV4KS5maWx0ZXIocCA9PiBwLmdhdWdlSWQgPT09IHRoaXMuc2VsZWN0ZWRHYXVnZS5nYXVnZUlkKTtcbiAgICBsZXQgcGl4ZWxzU29sdXRpb25zOiBNYXBMYXRMbmdbXVtdID0gW107XG5cbiAgICBpZiAoc2VsZWN0ZWRHYXVnZUluUG9pbnRzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgY29uc3QgcmVtYXJrcyA9IEpTT04ucGFyc2Uoc2VsZWN0ZWRHYXVnZUluUG9pbnRzWzBdLnJlbWFyaylcbiAgICAgICAgLnNvcnQoKGEsIGIpID0+IGEuY3JpdGVyaWFBdHRlbXB0ZWRUb0JlTWluaW11bSAtIGIuY3JpdGVyaWFBdHRlbXB0ZWRUb0JlTWluaW11bSk7XG4gICAgICBjb25zb2xlLmxvZyhyZW1hcmtzKTtcbiAgICAgIHBpeGVsc1NvbHV0aW9ucyA9IHJlbWFya3NcbiAgICAgICAgLm1hcChyZW1hcmsgPT4gcmVtYXJrLnNvbHV0aW9uRm9yR2F1Z2UucGl4ZWxzXG4gICAgICAgICAgLm1hcChwID0+IG5ldyBNYXBMYXRMbmcocC55ICsgMC4wMDUsIHAueCArIDAuMDEsIDAsICcnICsgIXJlbWFyay5ub3RQb3NzaWJsZSwgJycgKyAhcmVtYXJrLm5vdFBvc3NpYmxlLCAxKSkpO1xuXG4gICAgICBjb25zdCB0aW1lRGVsdGFJbk1pbnV0ZXMgPSBzZWxlY3RlZEdhdWdlSW5Qb2ludHNbMF0uZ2V0VGltZURlbHRhSW5NaW51dGVzKCk7XG4gICAgICB0aGlzLnNlbGVjdGVkR2F1Z2VJblBvaW50c0RldGFpbCA9ICcnICsgc2VsZWN0ZWRHYXVnZUluUG9pbnRzWzBdLmdhdWdlTGFiZWwgKyAnID4gJ1xuICAgICAgICArIE1hdGgucm91bmQoc2VsZWN0ZWRHYXVnZUluUG9pbnRzWzBdLmdldEdhdWdlVmFsdWUoKSAqIDEwMCkgLyAxMDAgKyAnIC8gJ1xuICAgICAgICArIE1hdGgucm91bmQoc2VsZWN0ZWRHYXVnZUluUG9pbnRzWzBdLmdldFJhaW5WYWx1ZSgpICogMTAwKSAvIDEwMFxuICAgICAgICArICcgZFQ9JyArIHRpbWVEZWx0YUluTWludXRlcztcblxuICAgICAgdGhpcy5zZWxlY3RlZEdhdWdlSW5Qb2ludHMgPSBzZWxlY3RlZEdhdWdlSW5Qb2ludHNbMF07XG5cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zZWxlY3RlZEdhdWdlSW5Qb2ludHMgPSBudWxsO1xuICAgICAgdGhpcy5zZWxlY3RlZEdhdWdlcyA9IFtdO1xuICAgICAgdGhpcy5zZWxlY3RlZFBpeGVscyA9IFtdO1xuICAgICAgdGhpcy5waXhlbHNTb2x1dGlvbnMgPSBbXTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnNlbGVjdGVkR2F1Z2VzID0gW1xuICAgICAgbmV3IE1hcExhdExuZyh0aGlzLnNlbGVjdGVkR2F1Z2VJblBvaW50cy5nYXVnZUNhcnRlc2lhblZhbHVlLmxhdCwgdGhpcy5zZWxlY3RlZEdhdWdlSW5Qb2ludHMuZ2F1Z2VDYXJ0ZXNpYW5WYWx1ZS5sbmcsIHVuZGVmaW5lZCxcbiAgICAgICAgdGhpcy5zZWxlY3RlZEdhdWdlSW5Qb2ludHMuZ2F1Z2VJZCxcbiAgICAgICAgdGhpcy5zZWxlY3RlZEdhdWdlSW5Qb2ludHMuZ2F1Z2VMYWJlbCArICc+JyArIHRoaXMuc2VsZWN0ZWRHYXVnZUluUG9pbnRzLmdhdWdlQ2FydGVzaWFuVmFsdWUudmFsdWUsXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRHYXVnZUluUG9pbnRzLmdhdWdlQ2FydGVzaWFuVmFsdWUudmFsdWUpLFxuICAgIF07XG5cbiAgICB0aGlzLnNlbGVjdEdhdWdlSW5Db21wYXJlKCk7XG5cbiAgICBjb25zdCBwaXhlbHM6IE1hcExhdExuZ1tdID0gW107XG4gICAgZm9yIChjb25zdCByYWluQ2FydGVzaWFuVmFsdWUgb2YgdGhpcy5zZWxlY3RlZEdhdWdlSW5Qb2ludHMucmFpbkNhcnRlc2lhblZhbHVlcykge1xuICAgICAgcGl4ZWxzLnB1c2gobmV3IE1hcExhdExuZyhyYWluQ2FydGVzaWFuVmFsdWUubGF0ICsgMC4wMDUsIHJhaW5DYXJ0ZXNpYW5WYWx1ZS5sbmcgKyAwLjAxKSk7XG4gICAgfVxuICAgIHRoaXMuc2VsZWN0ZWRQaXhlbHMgPSBwaXhlbHM7XG5cbiAgICB0aGlzLnBpeGVsc1NvbHV0aW9ucyA9IHBpeGVsc1NvbHV0aW9ucztcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRDdXJyZW50UXVhbGl0eVBvaW50cyhjb21wYXJlSW5kZXg6IG51bWJlcikge1xuICAgIGlmIChjb21wYXJlSW5kZXggPCAwIHx8IHRoaXMuY29tcGFyZU5hbWVzLmxlbmd0aCA8IGNvbXBhcmVJbmRleCkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmNvbXBhcmVzW2NvbXBhcmVJbmRleF0uY29tcGFyZVBvaW50c0hpc3Rvcnk7XG4gIH1cblxuICBwcm90ZWN0ZWQgY2xlYW5Db21wYXJlUXVhbGl0eShkZXRhaWxzPzogc3RyaW5nKSB7XG4gICAgdGhpcy5jb21wYXJlVmVyc2lvbiA9IGRldGFpbHM7XG4gICAgdGhpcy5jb21wYXJlTmFtZXMgPSBbXTtcbiAgICB0aGlzLmNvbXBhcmVzID0gW107XG4gICAgdGhpcy5jb21wYXJlU3BlZWRNYXRyaXggPSBbXTtcbiAgICB0aGlzLmNvbXBhcmVUcnVzdGVkSW5kaWNhdG9yID0gdW5kZWZpbmVkO1xuICAgIHRoaXMucmFpbkNvbXB1dGF0aW9uUXVhbGl0aWVzID0ge307XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgZmV0Y2hSYWluQ29tcHV0YXRpb25RdWFsaXRpZXModGFyZ2V0c09yZGVyZWQ6IHtcbiAgICBkYXRlOiBzdHJpbmc7XG4gICAgcmFpbkNvbXB1dGF0aW9uSWQ6IHN0cmluZztcbiAgICByYWluQ29tcHV0YXRpb25RdWFsaXR5SWQ6IHN0cmluZ1xuICB9W10pIHtcblxuICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKHRoaXMucmFpbkNvbXB1dGF0aW9uUXVhbGl0aWVzKSkge1xuICAgICAgY29uc3QgZm91bmQgPSB0YXJnZXRzT3JkZXJlZC5maWx0ZXIodCA9PiB0LmRhdGUgPT09IGtleSk7XG4gICAgICBpZiAoZm91bmQubGVuZ3RoIDwgMCkge1xuICAgICAgICBkZWxldGUgdGhpcy5yYWluQ29tcHV0YXRpb25RdWFsaXRpZXNba2V5XTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IHRhcmdldCBvZiB0YXJnZXRzT3JkZXJlZCkge1xuICAgICAgaWYgKCF0aGlzLnJhaW5Db21wdXRhdGlvblF1YWxpdGllc1t0YXJnZXQuZGF0ZV0gJiYgdGFyZ2V0LnJhaW5Db21wdXRhdGlvblF1YWxpdHlJZCkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHRoaXMucmFpbkNvbXB1dGF0aW9uUXVhbGl0aWVzW3RhcmdldC5kYXRlXSA9IGF3YWl0IHRoaXMucHJvZmlsZVNlcnZpY2VcbiAgICAgICAgICAgIC5nZXRSYWluQ29tcGFyZUJ5SWQodGhpcy5yYWluTm9kZS5nZXRJZCgpLCB0YXJnZXQucmFpbkNvbXB1dGF0aW9uSWQsIHRhcmdldC5yYWluQ29tcHV0YXRpb25RdWFsaXR5SWQpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgc2VsZWN0R2F1Z2VJbkNvbXBhcmUoKSB7XG4gICAgZm9yIChjb25zdCBjb21wYXJlIG9mIHRoaXMuY29tcGFyZXMpIHtcbiAgICAgIGNvbnN0IGNvbXBhcmVQb2ludHMgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGNvbXBhcmUuY29tcGFyZVBvaW50cykpO1xuICAgICAgY29tcGFyZVBvaW50cy5mb3JFYWNoKHAgPT4ge1xuICAgICAgICBpZiAocC5pZCA9PT0gdGhpcy5zZWxlY3RlZEdhdWdlSW5Qb2ludHM/LmdhdWdlSWQpIHtcbiAgICAgICAgICBwLnIgPSAxMDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwLnIgPSAzO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGNvbXBhcmUuY29tcGFyZVBvaW50cyA9IGNvbXBhcmVQb2ludHM7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIHJlc2V0U2VsZWN0ZWRHYXVnZXMoKSB7XG4gICAgLy8gY29uc29sZS5sb2coJ3Jlc2V0U2VsZWN0ZWRHYXVnZXMgcmVzZXQnKTtcbiAgICB0aGlzLnNlbGVjdGVkR2F1Z2UgPSBudWxsO1xuICAgIHRoaXMuc2VsZWN0ZWRHYXVnZUluUG9pbnRzID0gbnVsbDtcbiAgICB0aGlzLnNlbGVjdGVkR2F1Z2VzID0gW107XG4gICAgdGhpcy5zZWxlY3RlZFBpeGVscyA9IFtdO1xuICAgIHRoaXMucGl4ZWxzU29sdXRpb25zID0gW107XG4gICAgdGhpcy5zZWxlY3RHYXVnZUluQ29tcGFyZSgpO1xuICB9XG59XG4iXX0=
@@ -756,6 +756,7 @@ class CompareManager {
756
756
  static BuildCompare(frameSet, targetsOrdered, rainComputationQualities, withCompareDuplicate) {
757
757
  return __awaiter(this, void 0, void 0, function* () {
758
758
  let compareSpeedMatrix, compareTrustedIndicator;
759
+ let compareNames = [];
759
760
  let compares = [];
760
761
  const currentTarget = targetsOrdered.filter(t => t.date === '' + frameSet.date.getTime())[0];
761
762
  const currentPos = targetsOrdered.indexOf(currentTarget);
@@ -763,7 +764,7 @@ class CompareManager {
763
764
  const nextTarget = currentPos >= 0 && currentPos < targetsOrdered.length - 1 ? targetsOrdered[currentPos + 1] : null;
764
765
  const currentQuality = rainComputationQualities[currentTarget === null || currentTarget === void 0 ? void 0 : currentTarget.date];
765
766
  if (!currentQuality) {
766
- return { currentQuality, compareSpeedMatrix, compareTrustedIndicator, compares };
767
+ return { currentQuality, compareSpeedMatrix, compareTrustedIndicator, compareNames, compares };
767
768
  }
768
769
  const previousQuality = previousTarget &&
769
770
  CompareManager.CompareDate(previousTarget.date, currentTarget.date, -5) ?
@@ -775,6 +776,9 @@ class CompareManager {
775
776
  compareSpeedMatrix = qualitySpeedMatrixContainer.renderMergedMatrix({ normalize: true });
776
777
  compareTrustedIndicator = qualitySpeedMatrixContainer.getTrustedIndicators()[0];
777
778
  const comparesToMap = SpeedMatrixContainer.BuildCompares(currentQuality, previousQuality, nextQuality, !withCompareDuplicate);
779
+ compareNames = qualitySpeedMatrixContainer.getMatrices()
780
+ .map(m => m.name)
781
+ .sort((a, b) => parseInt(a, 10) - parseInt(b, 10));
778
782
  compares = comparesToMap.map(c => {
779
783
  return {
780
784
  name: c.name,
@@ -784,7 +788,7 @@ class CompareManager {
784
788
  remarks: c.remarks
785
789
  };
786
790
  });
787
- return { currentQuality, compareSpeedMatrix, compareTrustedIndicator, compares };
791
+ return { currentQuality, compareSpeedMatrix, compareTrustedIndicator, compareNames, compares };
788
792
  });
789
793
  }
790
794
  cleanAll() {
@@ -804,7 +808,7 @@ class CompareManager {
804
808
  return { date: '' + t.date.getTime(), rainComputationId: t.rainComputationId, rainComputationQualityId: t.rainComputationQualityId };
805
809
  });
806
810
  yield this.fetchRainComputationQualities(targetsOrdered);
807
- const { currentQuality, compareSpeedMatrix, compareTrustedIndicator, compares } = yield CompareManager.BuildCompare(frameSet, targetsOrdered, this.rainComputationQualities, withCompareDuplicate);
811
+ const { currentQuality, compareSpeedMatrix, compareTrustedIndicator, compareNames, compares } = yield CompareManager.BuildCompare(frameSet, targetsOrdered, this.rainComputationQualities, withCompareDuplicate);
808
812
  if (!currentQuality) {
809
813
  this.cleanCompareQuality('no current quality ' + Object.keys(this.rainComputationQualities));
810
814
  }
@@ -815,6 +819,7 @@ class CompareManager {
815
819
  this.compareVersion = currentQuality.getVersion();
816
820
  this.compareSpeedMatrix = compareSpeedMatrix;
817
821
  this.compareTrustedIndicator = compareTrustedIndicator;
822
+ this.compareNames = compareNames;
818
823
  this.compares = compares;
819
824
  }
820
825
  this.onChanges();