@datagrok-libraries/statistics 1.2.5 → 1.2.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.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,31 @@
1
1
  # statistics changelog
2
2
 
3
+ ## 1.2.7 (2023-09-11)
4
+
5
+ ### Features
6
+
7
+ * [#2103](https://github.com/datagrok-ai/public/issues/2103): Property panel changes:
8
+ * Added tags on the dataframe level
9
+ * Added proper tooltips on properties
10
+ * [#2101](https://github.com/datagrok-ai/public/issues/2101): Added errorModel property
11
+
12
+ ### Bug Fixes
13
+
14
+ * [#2101](https://github.com/datagrok-ai/public/issues/2101): Improved curves properties and rendering:
15
+ * Added check for logarithm in the changeBounds method
16
+ * Fixed confidence intervals for logarithmic modes
17
+
18
+ ## 1.2.6 (2023-09-01)
19
+
20
+ ### Features
21
+
22
+ * [#2103](https://github.com/datagrok-ai/public/issues/2103): Stored the chart options in the dataframe tags
23
+ * T-Test now throws an error if sample size is less than or equal to 1.
24
+
25
+ ### Bug Fixes
26
+
27
+ * [#2101](https://github.com/datagrok-ai/public/issues/2101): Added checks for axes values
28
+
3
29
  ## 1.2.5 (2023-08-25)
4
30
 
5
31
  ### Features
package/package.json CHANGED
@@ -4,7 +4,7 @@
4
4
  "access": "public"
5
5
  },
6
6
  "friendlyName": "statistics",
7
- "version": "1.2.5",
7
+ "version": "1.2.7",
8
8
  "description": "",
9
9
  "dependencies": {
10
10
  "datagrok-api": "^1.16.0",
@@ -8,9 +8,9 @@ import * as jStat from 'jstat';
8
8
  */
9
9
  export function getConfidence(x, confidenceLevel = 0.05, parametric = true) {
10
10
  if (x.length <= 1)
11
- throw "vector is too short";
11
+ throw new Error('StatisticsError: Vector is too short');
12
12
  if (confidenceLevel >= 1 || confidenceLevel <= 0)
13
- throw "incorrect confidence level";
13
+ throw new Error('StatisticsError: Incorrect confidence level');
14
14
  if (parametric) {
15
15
  const average = jStat.mean(x);
16
16
  //true flag is obligatory for sample variance
@@ -20,7 +20,7 @@ export function getConfidence(x, confidenceLevel = 0.05, parametric = true) {
20
20
  const res = {
21
21
  central: average,
22
22
  top: average + interval,
23
- bottom: average - interval
23
+ bottom: average - interval,
24
24
  };
25
25
  return res;
26
26
  }
@@ -28,9 +28,9 @@ export function getConfidence(x, confidenceLevel = 0.05, parametric = true) {
28
28
  const res = {
29
29
  central: jStat.median(x),
30
30
  top: jStat.percentile(x, 1 - confidenceLevel / 2),
31
- bottom: jStat.percentile(x, confidenceLevel / 2)
31
+ bottom: jStat.percentile(x, confidenceLevel / 2),
32
32
  };
33
33
  return res;
34
34
  }
35
35
  }
36
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlkZW5jZS1pbnRlcnZhbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJjb25maWRlbmNlLWludGVydmFscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxzQkFBc0I7QUFDdEIsT0FBTyxLQUFLLEtBQUssTUFBTSxPQUFPLENBQUM7QUFRL0I7Ozs7O0dBS0c7QUFDSCxNQUFNLFVBQVUsYUFBYSxDQUFDLENBQVcsRUFBRSxrQkFBMEIsSUFBSSxFQUFFLGFBQXNCLElBQUk7SUFFbkcsSUFBSSxDQUFDLENBQUMsTUFBTSxJQUFJLENBQUM7UUFDZixNQUFNLHFCQUFxQixDQUFDO0lBRTlCLElBQUksZUFBZSxJQUFHLENBQUMsSUFBSSxlQUFlLElBQUcsQ0FBQztRQUM1QyxNQUFNLDRCQUE0QixDQUFDO0lBRXJDLElBQUksVUFBVSxFQUFFO1FBQ2QsTUFBTSxPQUFPLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM5Qiw2Q0FBNkM7UUFDN0MsTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDbkMsb0RBQW9EO1FBQ3BELE1BQU0sUUFBUSxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxlQUFlLEdBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLEdBQUMsS0FBSyxHQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRW5HLE1BQU0sR0FBRyxHQUFjO1lBQ3JCLE9BQU8sRUFBRSxPQUFPO1lBQ2hCLEdBQUcsRUFBRSxPQUFPLEdBQUcsUUFBUTtZQUN2QixNQUFNLEVBQUUsT0FBTyxHQUFHLFFBQVE7U0FDM0IsQ0FBQztRQUVGLE9BQU8sR0FBRyxDQUFDO0tBQ1o7U0FBTTtRQUNMLE1BQU0sR0FBRyxHQUFjO1lBQ3JCLE9BQU8sRUFBRSxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztZQUN4QixHQUFHLEVBQUUsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLGVBQWUsR0FBQyxDQUFDLENBQUM7WUFDL0MsTUFBTSxFQUFFLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQyxFQUFFLGVBQWUsR0FBQyxDQUFDLENBQUM7U0FDL0MsQ0FBQztRQUVGLE9BQU8sR0FBRyxDQUFDO0tBQ1o7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy9AdHMtaWdub3JlOiBubyB0eXBlc1xuaW1wb3J0ICogYXMgalN0YXQgZnJvbSAnanN0YXQnO1xuXG5leHBvcnQgdHlwZSBDb25maWRlbmNlID0ge1xuICBjZW50cmFsOiBudW1iZXIsXG4gIHRvcDogbnVtYmVyLFxuICBib3R0b206IG51bWJlclxufVxuXG4vKipcbiAqIEBwYXJhbSB7bnVtYmVyW119IHggb2JzZXJ2YXRpb25zIHZlY3Rvci5cbiAqIEBwYXJhbSB7bnVtYmVyfSBjb25maWRlbmNlTGV2ZWwgMC4wNSBtZWFucyB0aGF0IDk1JSBvZiBvYnNlcnZhdGlvbnMgZW50ZXIgdGhlIGludGVydmFsLlxuICogQHBhcmFtIHtib29sZWFufSBwYXJhbWV0cmljIHN5bW1ldHJpYyBwYXJhbWV0cmljIGludGVydmFsIGlmIHRydWUsIHNhbXBsZSBxdWludGlsZXMgaWYgZmFsc2UuXG4gKiBAcmV0dXJuIHtDb25maWRlbmNlfSBPYmplY3QgY29udGFpbmluZyBjZW50cmFsIHRlbmRlbmN5IGVzdGltYXRlIGFuZCB0b3AgYW5kIGJvdHRvbSBvZiBodCBpbnRlcnZhbC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldENvbmZpZGVuY2UoeDogbnVtYmVyW10sIGNvbmZpZGVuY2VMZXZlbDogbnVtYmVyID0gMC4wNSwgcGFyYW1ldHJpYzogYm9vbGVhbiA9IHRydWUpOlxuICBDb25maWRlbmNlIHtcbiAgaWYgKHgubGVuZ3RoIDw9IDEpIFxuICAgIHRocm93IFwidmVjdG9yIGlzIHRvbyBzaG9ydFwiO1xuXG4gIGlmIChjb25maWRlbmNlTGV2ZWwgPj0xIHx8IGNvbmZpZGVuY2VMZXZlbCA8PTApXG4gICAgdGhyb3cgXCJpbmNvcnJlY3QgY29uZmlkZW5jZSBsZXZlbFwiO1xuXG4gIGlmIChwYXJhbWV0cmljKSB7XG4gICAgY29uc3QgYXZlcmFnZSA9IGpTdGF0Lm1lYW4oeCk7XG4gICAgLy90cnVlIGZsYWcgaXMgb2JsaWdhdG9yeSBmb3Igc2FtcGxlIHZhcmlhbmNlXG4gICAgY29uc3Qgc2lnbWEgPSBqU3RhdC5zdGRldih4LCB0cnVlKTtcbiAgICAvL2RlZ3JlZXMgb2YgZnJlZWRvbSBhcyBuLTEgZm9yIHN0dWRlbnQgZGlzdHJpYnV0aW9uXG4gICAgY29uc3QgaW50ZXJ2YWwgPSBqU3RhdC5zdHVkZW50dC5pbnYoMSAtIGNvbmZpZGVuY2VMZXZlbC8yLCB4Lmxlbmd0aCAtIDEpKnNpZ21hL01hdGguc3FydCh4Lmxlbmd0aCk7XG5cbiAgICBjb25zdCByZXM6Q29uZmlkZW5jZSA9IHtcbiAgICAgIGNlbnRyYWw6IGF2ZXJhZ2UsXG4gICAgICB0b3A6IGF2ZXJhZ2UgKyBpbnRlcnZhbCxcbiAgICAgIGJvdHRvbTogYXZlcmFnZSAtIGludGVydmFsXG4gICAgfTsgIFxuXG4gICAgcmV0dXJuIHJlcztcbiAgfSBlbHNlIHtcbiAgICBjb25zdCByZXM6Q29uZmlkZW5jZSA9IHtcbiAgICAgIGNlbnRyYWw6IGpTdGF0Lm1lZGlhbih4KSxcbiAgICAgIHRvcDogalN0YXQucGVyY2VudGlsZSh4LCAxIC0gY29uZmlkZW5jZUxldmVsLzIpLFxuICAgICAgYm90dG9tOiBqU3RhdC5wZXJjZW50aWxlKHgsIGNvbmZpZGVuY2VMZXZlbC8yKVxuICAgIH07ICBcblxuICAgIHJldHVybiByZXM7XG4gIH1cbn1cbiJdfQ==
36
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlkZW5jZS1pbnRlcnZhbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJjb25maWRlbmNlLWludGVydmFscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxzQkFBc0I7QUFDdEIsT0FBTyxLQUFLLEtBQUssTUFBTSxPQUFPLENBQUM7QUFRL0I7Ozs7O0dBS0c7QUFDSCxNQUFNLFVBQVUsYUFBYSxDQUFDLENBQVcsRUFBRSxrQkFBMEIsSUFBSSxFQUFFLGFBQXNCLElBQUk7SUFFbkcsSUFBSSxDQUFDLENBQUMsTUFBTSxJQUFJLENBQUM7UUFDZixNQUFNLElBQUksS0FBSyxDQUFDLHNDQUFzQyxDQUFDLENBQUM7SUFFMUQsSUFBSSxlQUFlLElBQUcsQ0FBQyxJQUFJLGVBQWUsSUFBRyxDQUFDO1FBQzVDLE1BQU0sSUFBSSxLQUFLLENBQUMsNkNBQTZDLENBQUMsQ0FBQztJQUVqRSxJQUFJLFVBQVUsRUFBRTtRQUNkLE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDOUIsNkNBQTZDO1FBQzdDLE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ25DLG9EQUFvRDtRQUNwRCxNQUFNLFFBQVEsR0FBRyxLQUFLLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsZUFBZSxHQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxHQUFDLEtBQUssR0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUVuRyxNQUFNLEdBQUcsR0FBYztZQUNyQixPQUFPLEVBQUUsT0FBTztZQUNoQixHQUFHLEVBQUUsT0FBTyxHQUFHLFFBQVE7WUFDdkIsTUFBTSxFQUFFLE9BQU8sR0FBRyxRQUFRO1NBQzNCLENBQUM7UUFFRixPQUFPLEdBQUcsQ0FBQztLQUNaO1NBQU07UUFDTCxNQUFNLEdBQUcsR0FBYztZQUNyQixPQUFPLEVBQUUsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7WUFDeEIsR0FBRyxFQUFFLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxlQUFlLEdBQUMsQ0FBQyxDQUFDO1lBQy9DLE1BQU0sRUFBRSxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUMsRUFBRSxlQUFlLEdBQUMsQ0FBQyxDQUFDO1NBQy9DLENBQUM7UUFFRixPQUFPLEdBQUcsQ0FBQztLQUNaO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vQHRzLWlnbm9yZTogbm8gdHlwZXNcbmltcG9ydCAqIGFzIGpTdGF0IGZyb20gJ2pzdGF0JztcblxuZXhwb3J0IHR5cGUgQ29uZmlkZW5jZSA9IHtcbiAgY2VudHJhbDogbnVtYmVyLFxuICB0b3A6IG51bWJlcixcbiAgYm90dG9tOiBudW1iZXJcbn1cblxuLyoqXG4gKiBAcGFyYW0ge251bWJlcltdfSB4IG9ic2VydmF0aW9ucyB2ZWN0b3IuXG4gKiBAcGFyYW0ge251bWJlcn0gY29uZmlkZW5jZUxldmVsIDAuMDUgbWVhbnMgdGhhdCA5NSUgb2Ygb2JzZXJ2YXRpb25zIGVudGVyIHRoZSBpbnRlcnZhbC5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gcGFyYW1ldHJpYyBzeW1tZXRyaWMgcGFyYW1ldHJpYyBpbnRlcnZhbCBpZiB0cnVlLCBzYW1wbGUgcXVpbnRpbGVzIGlmIGZhbHNlLlxuICogQHJldHVybiB7Q29uZmlkZW5jZX0gT2JqZWN0IGNvbnRhaW5pbmcgY2VudHJhbCB0ZW5kZW5jeSBlc3RpbWF0ZSBhbmQgdG9wIGFuZCBib3R0b20gb2YgaHQgaW50ZXJ2YWwuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRDb25maWRlbmNlKHg6IG51bWJlcltdLCBjb25maWRlbmNlTGV2ZWw6IG51bWJlciA9IDAuMDUsIHBhcmFtZXRyaWM6IGJvb2xlYW4gPSB0cnVlKTpcbiAgQ29uZmlkZW5jZSB7XG4gIGlmICh4Lmxlbmd0aCA8PSAxKVxuICAgIHRocm93IG5ldyBFcnJvcignU3RhdGlzdGljc0Vycm9yOiBWZWN0b3IgaXMgdG9vIHNob3J0Jyk7XG5cbiAgaWYgKGNvbmZpZGVuY2VMZXZlbCA+PTEgfHwgY29uZmlkZW5jZUxldmVsIDw9MClcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1N0YXRpc3RpY3NFcnJvcjogSW5jb3JyZWN0IGNvbmZpZGVuY2UgbGV2ZWwnKTtcblxuICBpZiAocGFyYW1ldHJpYykge1xuICAgIGNvbnN0IGF2ZXJhZ2UgPSBqU3RhdC5tZWFuKHgpO1xuICAgIC8vdHJ1ZSBmbGFnIGlzIG9ibGlnYXRvcnkgZm9yIHNhbXBsZSB2YXJpYW5jZVxuICAgIGNvbnN0IHNpZ21hID0galN0YXQuc3RkZXYoeCwgdHJ1ZSk7XG4gICAgLy9kZWdyZWVzIG9mIGZyZWVkb20gYXMgbi0xIGZvciBzdHVkZW50IGRpc3RyaWJ1dGlvblxuICAgIGNvbnN0IGludGVydmFsID0galN0YXQuc3R1ZGVudHQuaW52KDEgLSBjb25maWRlbmNlTGV2ZWwvMiwgeC5sZW5ndGggLSAxKSpzaWdtYS9NYXRoLnNxcnQoeC5sZW5ndGgpO1xuXG4gICAgY29uc3QgcmVzOkNvbmZpZGVuY2UgPSB7XG4gICAgICBjZW50cmFsOiBhdmVyYWdlLFxuICAgICAgdG9wOiBhdmVyYWdlICsgaW50ZXJ2YWwsXG4gICAgICBib3R0b206IGF2ZXJhZ2UgLSBpbnRlcnZhbCxcbiAgICB9O1xuXG4gICAgcmV0dXJuIHJlcztcbiAgfSBlbHNlIHtcbiAgICBjb25zdCByZXM6Q29uZmlkZW5jZSA9IHtcbiAgICAgIGNlbnRyYWw6IGpTdGF0Lm1lZGlhbih4KSxcbiAgICAgIHRvcDogalN0YXQucGVyY2VudGlsZSh4LCAxIC0gY29uZmlkZW5jZUxldmVsLzIpLFxuICAgICAgYm90dG9tOiBqU3RhdC5wZXJjZW50aWxlKHgsIGNvbmZpZGVuY2VMZXZlbC8yKSxcbiAgICB9O1xuXG4gICAgcmV0dXJuIHJlcztcbiAgfVxufVxuIl19
@@ -1 +1 @@
1
- {"version":3,"file":"correlation-coefficient.d.ts","sourceRoot":"","sources":["correlation-coefficient.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,OAAO,EAAC,MAAM,iDAAiD,CAAC;AAuDxE;;;;;;;;;;;GAWG;AACH,wBAAgB,WAAW,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,GAAG,OAAO,CAiC7D"}
1
+ {"version":3,"file":"correlation-coefficient.d.ts","sourceRoot":"","sources":["correlation-coefficient.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,OAAO,EAAC,MAAM,iDAAiD,CAAC;AAuDxE;;;;;;;;;;;GAWG;AACH,wBAAgB,WAAW,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,GAAG,OAAO,CA+B7D"}
@@ -73,20 +73,16 @@ export function kendallsTau(x, y) {
73
73
  // neither array has a tie
74
74
  n1 = n1 + 1;
75
75
  n2 = n2 + 1;
76
- if (aa > 0) {
76
+ if (aa > 0)
77
77
  iss = iss + 1;
78
- }
79
- else {
78
+ else
80
79
  iss = iss - 1;
81
- }
82
80
  }
83
81
  else {
84
- if (a1) {
82
+ if (a1)
85
83
  n1 = n1 + 1;
86
- }
87
- if (a2) {
84
+ if (a2)
88
85
  n2 = n2 + 1;
89
- }
90
86
  }
91
87
  }
92
88
  }
@@ -96,4 +92,4 @@ export function kendallsTau(x, y) {
96
92
  const prob = erfc(Math.abs(z) / 1.4142136);
97
93
  return { test: tau, z: z, prob: prob };
98
94
  }
99
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29ycmVsYXRpb24tY29lZmZpY2llbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJjb3JyZWxhdGlvbi1jb2VmZmljaWVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFHQTs7Ozs7O0dBTUc7QUFDSCxTQUFTLEdBQUcsQ0FBQyxDQUFTO0lBQ3BCLE1BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQyxrQkFBa0IsRUFBRSxxQkFBcUIsRUFBRSxxQkFBcUI7UUFDNUUsQ0FBQyxvQkFBb0IsRUFBRSxDQUFDLG1CQUFtQixFQUFFLG1CQUFtQjtRQUNoRSxrQkFBa0IsRUFBRSxDQUFDLGtCQUFrQixFQUFFLENBQUMsaUJBQWlCO1FBQzNELGlCQUFpQixFQUFFLGVBQWUsRUFBRSxDQUFDLGVBQWU7UUFDcEQsY0FBYyxFQUFFLGNBQWMsRUFBRSxDQUFDLGNBQWM7UUFDL0MsQ0FBQyxjQUFjLEVBQUUsYUFBYSxFQUFFLFlBQVk7UUFDNUMsQ0FBQyxZQUFZLEVBQUUsV0FBVyxFQUFFLFdBQVc7UUFDdkMsQ0FBQyxXQUFXLEVBQUUsUUFBUSxFQUFFLFNBQVM7UUFDakMsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxPQUFPLEVBQUUsUUFBUTtRQUM5QixDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ1osSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7SUFDdkIsSUFBSSxLQUFLLEdBQUcsS0FBSyxDQUFDO0lBQ2xCLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNWLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQztJQUNYLElBQUksQ0FBQyxHQUFXLENBQUMsQ0FBQztJQUFDLElBQUksRUFBRSxHQUFXLENBQUMsQ0FBQztJQUFDLElBQUksR0FBRyxHQUFXLENBQUMsQ0FBQztJQUFDLElBQUksR0FBRyxHQUFXLENBQUMsQ0FBQztJQUVoRixJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUU7UUFDVCxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFD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LElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNoQyxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUMsQ0FBQztJQUMzQyxPQUFPLEVBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUMsQ0FBQztBQUN2QyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gaW1wb3J0IHtPcHRpb25zfSBmcm9tICcuLi8uLi91dGlscy9zcmMvdHlwZS1kZWNsYXJhdGlvbnMnO1xuaW1wb3J0IHtPcHRpb25zfSBmcm9tICdAZGF0YWdyb2stbGlicmFyaWVzL3V0aWxzL3NyYy90eXBlLWRlY2xhcmF0aW9ucyc7XG5cbi8qKlxuICogUmV0dXJucyB0aGUgZXJyb3IgZnVuY3Rpb24gZXJmKHgpLlxuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSB4IEFuIGFyZ3VtZW50LlxuICogQHJldHVybiB7bnVtYmVyfSBUaGUgcmVzdWx0LlxuICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2pzdGF0L2pzdGF0L2Jsb2IvNjVjZTA5NmE5OWY3NTNkNmEyMjQ4MmU1ZTc0YWNjYmZjMWMzMzc2Ny9kaXN0L2pzdGF0LmpzI0wxNTYyXG4gKi9cbmZ1bmN0aW9uIGVyZih4OiBudW1iZXIpOiBudW1iZXIge1xuICBjb25zdCBjb2YgPSBbLTEuMzAyNjUzNzE5NzgxNzA5NCwgNi40MTk2OTc5MjM1NjQ5MDI2ZS0xLCAxLjk0NzY0NzMyMDQxODU4MzZlLTIsXG4gICAgLTkuNTYxNTE0Nzg2ODA4NjMxZS0zLCAtOS40NjU5NTM0NDQ4MjAzNmUtNCwgMy42NjgzOTQ5Nzg1Mjc2MWUtNCxcbiAgICA0LjI1MjMzMjQ4MDY5MDdlLTUsIC0yLjAyNzg1NzgxMTI1MzRlLTUsIC0xLjYyNDI5MDAwNDY0N2UtNixcbiAgICAxLjMwMzY1NTgzNTU4MGUtNiwgMS41NjI2NDQxNzIyZS04LCAtOC41MjM4MDk1OTE1ZS04LFxuICAgIDYuNTI5MDU0NDM5ZS05LCA1LjA1OTM0MzQ5NWUtOSwgLTkuOTEzNjQxNTZlLTEwLFxuICAgIC0yLjI3MzY1MTIyZS0xMCwgOS42NDY3OTExZS0xMSwgMi4zOTQwMzhlLTEyLFxuICAgIC02Ljg4NjAyN2UtMTIsIDguOTQ0ODdlLTEzLCAzLjEzMDkyZS0xMyxcbiAgICAtMS4xMjcwOGUtMTMsIDMuODFlLTE2LCA3LjEwNmUtMTUsXG4gICAgLTEuNTIzZS0xNSwgLTkuNGUtMTcsIDEuMjFlLTE2LFxuICAgIC0yLjhlLTE3XTtcbiAgbGV0IGogPSBjb2YubGVuZ3RoIC0gMTtcbiAgbGV0IGlzbmVnID0gZmFsc2U7XG4gIGxldCBkID0gMDtcbiAgbGV0IGRkID0gMDtcbiAgbGV0IHQ6IG51bWJlciA9IDA7IGxldCB0eTogbnVtYmVyID0gMDsgbGV0IHRtcDogbnVtYmVyID0gMDsgbGV0IHJlczogbnVtYmVyID0gMDtcblxuICBpZiAoeCA8IDApIHtcbiAgICB4ID0gLXg7XG4gICAgaXNuZWcgPSB0cnVlO1xuICB9XG5cbiAgdCA9IDIgLyAoMiArIHgpO1xuICB0eSA9IDQgKiB0IC0gMjtcblxuICBmb3IgKDsgaiA+IDA7IGotLSkge1xuICAgIHRtcCA9IGQ7XG4gICAgZCA9IHR5ICogZCAtIGRkICsgY29mW2pdO1xuICAgIGRkID0gdG1wO1xuICB9XG5cbiAgcmVzID0gdCAqIE1hdGguZXhwKC14ICogeCArIDAuNSAqIChjb2ZbMF0gKyB0eSAqIGQpIC0gZGQpO1xuICByZXR1cm4gaXNuZWcgPyByZXMgLSAxIDogMSAtIHJlcztcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBjb21wbG1lbnRhcnkgZXJyb3IgZnVuY3Rpb24gZXJmYyh4KVxuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSB4IEFuIGFyZ3VtZW50LlxuICogQHJldHVybiB7bnVtYmVyfSBUaGUgcmVzdWx0LlxuICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2pzdGF0L2pzdGF0L2Jsb2IvNjVjZTA5NmE5OWY3NTNkNmEyMjQ4MmU1ZTc0YWNjYmZjMWMzMzc2Ny9kaXN0L2pzdGF0LmpzI0wxNTk5XG4gKi9cbmZ1bmN0aW9uIGVyZmMoeDogbnVtYmVyKTogbnVtYmVyIHtcbiAgcmV0dXJuIDEgLSBlcmYoeCk7XG59XG5cbi8qKlxuICogQ2FsY3VsYXRlcyBLZW5kYWxsJ3MgdGF1LCBhIGNvcnJlbGF0aW9uIG1lYXN1cmUgZm9yIG9yZGluYWwgZGF0YSwgYW5kIGFuIGFzc29jaWF0ZWQgcC12YWx1ZS5cbiAqIFJldHVybnM6IEtlbmRhbGwncyB0YXUsIHR3by10YWlsZWQgcC12YWx1ZS5cbiAqIERlcml2ZWQgZnJvbSBvbGRlciBTY2lQeTogaHR0cDovL3dlYi5taXQuZWR1LzYuODYzL3NwcmluZzIwMTEvcGFja2FnZXMvc2NpcHlfc3JjL3NjaXB5L3N0YXRzL3N0YXRzLnB5XG4gKlxuICogQGV4cG9ydFxuICogQHBhcmFtIHtudW1iZXJbXX0geCBUaGUgZmlyc3QgYXJyYXkuXG4gKiBAcGFyYW0ge251bWJlcltdfSB5IFRoZSBzZWNvbmQgYXJyYXkuXG4gKiBAcmV0dXJuIHtPcHRpb25zfSBUaGUgcmVzdWx0LlxuICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL3BkZmVybmhvdXQvbmFycmFmaXJtYS9ibG9iL1xuICogYzljMTIyZDU3N2E0Yjg4NjhjZTYwM2JhZGFiYmI3ZDEwZjQ1NzQwYy93ZWJhcHAvc291cmNlL3N0YXRpc3RpY3Mva2VuZGFsbHNUYXUudHMjTDhcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGtlbmRhbGxzVGF1KHg6IG51bWJlcltdLCB5OiBudW1iZXJbXSk6IE9wdGlvbnMge1xuICBsZXQgbjEgPSAwO1xuICBsZXQgbjIgPSAwO1xuICBsZXQgaXNzID0gMDtcbiAgZm9yIChsZXQgaiA9IDA7IGogPCB4Lmxlbmd0aCAtIDE7IGorKykge1xuICAgIGZvciAobGV0IGsgPSBqICsgMTsgayA8IHkubGVuZ3RoOyBrKyspIHtcbiAgICAgIGNvbnN0IGExID0geFtqXSAtIHhba107XG4gICAgICBjb25zdCBhMiA9IHlbal0gLSB5W2tdO1xuICAgICAgY29uc3QgYWEgPSBhMSAqIGEyO1xuICAgICAgaWYgKGFhKSB7XG4gICAgICAgIC8vIG5laXRoZXIgYXJyYXkgaGFzIGEgdGllXG4gICAgICAgIG4xID0gbjEgKyAxO1xuICAgICAgICBuMiA9IG4yICsgMTtcbiAgICAgICAgaWYgKGFhID4gMCkge1xuICAgICAgICAgIGlzcyA9IGlzcyArIDE7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaXNzID0gaXNzIC0gMTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKGExKSB7XG4gICAgICAgICAgbjEgPSBuMSArIDE7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGEyKSB7XG4gICAgICAgICAgbjIgPSBuMiArIDE7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgY29uc3QgdGF1ID0gaXNzIC8gTWF0aC5zcXJ0KG4xICogbjIpO1xuICBjb25zdCBzdmFyID0gKDQuMCAqIHgubGVuZ3RoICsgMTAuMCkgLyAoOS4wICogeC5sZW5ndGggKiAoeC5sZW5ndGggLSAxKSk7XG4gIGNvbnN0IHogPSB0YXUgLyBNYXRoLnNxcnQoc3Zhcik7XG4gIGNvbnN0IHByb2IgPSBlcmZjKE1hdGguYWJzKHopIC8gMS40MTQyMTM2KTtcbiAgcmV0dXJuIHt0ZXN0OiB0YXUsIHo6IHosIHByb2I6IHByb2J9O1xufVxuIl19
95
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29ycmVsYXRpb24tY29lZmZpY2llbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJjb3JyZWxhdGlvbi1jb2VmZmljaWVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFHQTs7Ozs7O0dBTUc7QUFDSCxTQUFTLEdBQUcsQ0FBQyxDQUFTO0lBQ3BCLE1BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQyxrQkFBa0IsRUFBRSxxQkFBcUIsRUFBRSxxQkFBcUI7UUFDNUUsQ0FBQyxvQkFBb0IsRUFBRSxDQUFDLG1CQUFtQixFQUFFLG1CQUFtQjtRQUNoRSxrQkFBa0IsRUFBRSxDQUFDLGtCQUFrQixFQUFFLENBQUMsaUJBQWlCO1FBQzNELGlCQUFpQixFQUFFLGVBQWUsRUFBRSxDQUFDLGVBQWU7UUFDcEQsY0FBYyxFQUFFLGNBQWMsRUFBRSxDQUFDLGNBQWM7UUFDL0MsQ0FBQyxjQUFjLEVBQUUsYUFBYSxFQUFFLFlBQVk7UUFDNUMsQ0FBQyxZQUFZLEVBQUUsV0FBVyxFQUFFLFdBQVc7UUFDdkMsQ0FBQyxXQUFXLEVBQUUsUUFBUSxFQUFFLFNBQVM7UUFDakMsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxPQUFPLEVBQUUsUUFBUTtRQUM5QixDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ1osSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7SUFDdkIsSUFBSSxLQUFLLEdBQUcsS0FBSyxDQUFDO0lBQ2xCLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNWLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQztJQUNYLElBQUksQ0FBQyxHQUFXLENBQUMsQ0FBQztJQUFDLElBQUksRUFBRSxHQUFXLENBQUMsQ0FBQztJQUFDLElBQUksR0FBRyxHQUFXLENBQUMsQ0FBQztJQUFDLElBQUksR0FBRyxHQUFXLENBQUMsQ0FBQztJQUVoRixJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUU7UUFDVCxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFD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QUFHLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxDQUFDO0lBQzNDLE9BQU8sRUFBQyxJQUFJLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBQyxDQUFDO0FBQ3ZDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBpbXBvcnQge09wdGlvbnN9IGZyb20gJy4uLy4uL3V0aWxzL3NyYy90eXBlLWRlY2xhcmF0aW9ucyc7XG5pbXBvcnQge09wdGlvbnN9IGZyb20gJ0BkYXRhZ3Jvay1saWJyYXJpZXMvdXRpbHMvc3JjL3R5cGUtZGVjbGFyYXRpb25zJztcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBlcnJvciBmdW5jdGlvbiBlcmYoeCkuXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IHggQW4gYXJndW1lbnQuXG4gKiBAcmV0dXJuIHtudW1iZXJ9IFRoZSByZXN1bHQuXG4gKiBAbGluayBodHRwczovL2dpdGh1Yi5jb20vanN0YXQvanN0YXQvYmxvYi82NWNlMDk2YTk5Zjc1M2Q2YTIyNDgyZTVlNzRhY2NiZmMxYzMzNzY3L2Rpc3QvanN0YXQuanMjTDE1NjJcbiAqL1xuZnVuY3Rpb24gZXJmKHg6IG51bWJlcik6IG51bWJlciB7XG4gIGNvbnN0IGNvZiA9IFstMS4zMDI2NTM3MTk3ODE3MDk0LCA2LjQxOTY5NzkyMzU2NDkwMjZlLTEsIDEuOTQ3NjQ3MzIwNDE4NTgzNmUtMixcbiAgICAtOS41NjE1MTQ3ODY4MDg2MzFlLTMsIC05LjQ2NTk1MzQ0NDgyMDM2ZS00LCAzLjY2ODM5NDk3ODUyNzYxZS00LFxuICAgIDQuMjUyMzMyNDgwNjkwN2UtNSwgLTIuMDI3ODU3ODExMjUzNGUtNSwgLTEuNjI0MjkwMDA0NjQ3ZS02LFxuICAgIDEuMzAzNjU1ODM1NTgwZS02LCAxLjU2MjY0NDE3MjJlLTgsIC04LjUyMzgwOTU5MTVlLTgsXG4gICAgNi41MjkwNTQ0MzllLTksIDUuMDU5MzQzNDk1ZS05LCAtOS45MTM2NDE1NmUtMTAsXG4gICAgLTIuMjczNjUxMjJlLTEwLCA5LjY0Njc5MTFlLTExLCAyLjM5NDAzOGUtMTIsXG4gICAgLTYuODg2MDI3ZS0xMiwgOC45NDQ4N2UtMTMsIDMuMTMwOTJlLTEzLFxuICAgIC0xLjEyNzA4ZS0xMywgMy44MWUtMTYsIDcuMTA2ZS0xNSxcbiAgICAtMS41MjNlLTE1LCAtOS40ZS0xNywgMS4yMWUtMTYsXG4gICAgLTIuOGUtMTddO1xuICBsZXQgaiA9IGNvZi5sZW5ndGggLSAxO1xuICBsZXQgaXNuZWcgPSBmYWxzZTtcbiAgbGV0IGQgPSAwO1xuICBsZXQgZGQgPSAwO1xuICBsZXQgdDogbnVtYmVyID0gMDsgbGV0IHR5OiBudW1iZXIgPSAwOyBsZXQgdG1wOiBudW1iZXIgPSAwOyBsZXQgcmVzOiBudW1iZXIgPSAwO1xuXG4gIGlmICh4IDwgMCkge1xuICAgIHggPSAteDtcbiAgICBpc25lZyA9IHRydWU7XG4gIH1cblxuICB0ID0gMiAvICgyICsgeCk7XG4gIHR5ID0gNCAqIHQgLSAyO1xuXG4gIGZvciAoOyBqID4gMDsgai0tKSB7XG4gICAgdG1wID0gZDtcbiAgICBkID0gdHkgKiBkIC0gZGQgKyBjb2Zbal07XG4gICAgZGQgPSB0bXA7XG4gIH1cblxuICByZXMgPSB0ICogTWF0aC5leHAoLXggKiB4ICsgMC41ICogKGNvZlswXSArIHR5ICogZCkgLSBkZCk7XG4gIHJldHVybiBpc25lZyA/IHJlcyAtIDEgOiAxIC0gcmVzO1xufVxuXG4vKipcbiAqIFJldHVybnMgdGhlIGNvbXBsbWVudGFyeSBlcnJvciBmdW5jdGlvbiBlcmZjKHgpXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IHggQW4gYXJndW1lbnQuXG4gKiBAcmV0dXJuIHtudW1iZXJ9IFRoZSByZXN1bHQuXG4gKiBAbGluayBodHRwczovL2dpdGh1Yi5jb20vanN0YXQvanN0YXQvYmxvYi82NWNlMDk2YTk5Zjc1M2Q2YTIyNDgyZTVlNzRhY2NiZmMxYzMzNzY3L2Rpc3QvanN0YXQuanMjTDE1OTlcbiAqL1xuZnVuY3Rpb24gZXJmYyh4OiBudW1iZXIpOiBudW1iZXIge1xuICByZXR1cm4gMSAtIGVyZih4KTtcbn1cblxuLyoqXG4gKiBDYWxjdWxhdGVzIEtlbmRhbGwncyB0YXUsIGEgY29ycmVsYXRpb24gbWVhc3VyZSBmb3Igb3JkaW5hbCBkYXRhLCBhbmQgYW4gYXNzb2NpYXRlZCBwLXZhbHVlLlxuICogUmV0dXJuczogS2VuZGFsbCdzIHRhdSwgdHdvLXRhaWxlZCBwLXZhbHVlLlxuICogRGVyaXZlZCBmcm9tIG9sZGVyIFNjaVB5OiBodHRwOi8vd2ViLm1pdC5lZHUvNi44NjMvc3ByaW5nMjAxMS9wYWNrYWdlcy9zY2lweV9zcmMvc2NpcHkvc3RhdHMvc3RhdHMucHlcbiAqXG4gKiBAZXhwb3J0XG4gKiBAcGFyYW0ge251bWJlcltdfSB4IFRoZSBmaXJzdCBhcnJheS5cbiAqIEBwYXJhbSB7bnVtYmVyW119IHkgVGhlIHNlY29uZCBhcnJheS5cbiAqIEByZXR1cm4ge09wdGlvbnN9IFRoZSByZXN1bHQuXG4gKiBAbGluayBodHRwczovL2dpdGh1Yi5jb20vcGRmZXJuaG91dC9uYXJyYWZpcm1hL2Jsb2IvXG4gKiBjOWMxMjJkNTc3YTRiODg2OGNlNjAzYmFkYWJiYjdkMTBmNDU3NDBjL3dlYmFwcC9zb3VyY2Uvc3RhdGlzdGljcy9rZW5kYWxsc1RhdS50cyNMOFxuICovXG5leHBvcnQgZnVuY3Rpb24ga2VuZGFsbHNUYXUoeDogbnVtYmVyW10sIHk6IG51bWJlcltdKTogT3B0aW9ucyB7XG4gIGxldCBuMSA9IDA7XG4gIGxldCBuMiA9IDA7XG4gIGxldCBpc3MgPSAwO1xuICBmb3IgKGxldCBqID0gMDsgaiA8IHgubGVuZ3RoIC0gMTsgaisrKSB7XG4gICAgZm9yIChsZXQgayA9IGogKyAxOyBrIDwgeS5sZW5ndGg7IGsrKykge1xuICAgICAgY29uc3QgYTEgPSB4W2pdIC0geFtrXTtcbiAgICAgIGNvbnN0IGEyID0geVtqXSAtIHlba107XG4gICAgICBjb25zdCBhYSA9IGExICogYTI7XG4gICAgICBpZiAoYWEpIHtcbiAgICAgICAgLy8gbmVpdGhlciBhcnJheSBoYXMgYSB0aWVcbiAgICAgICAgbjEgPSBuMSArIDE7XG4gICAgICAgIG4yID0gbjIgKyAxO1xuICAgICAgICBpZiAoYWEgPiAwKVxuICAgICAgICAgIGlzcyA9IGlzcyArIDE7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICBpc3MgPSBpc3MgLSAxO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKGExKVxuICAgICAgICAgIG4xID0gbjEgKyAxO1xuXG4gICAgICAgIGlmIChhMilcbiAgICAgICAgICBuMiA9IG4yICsgMTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgY29uc3QgdGF1ID0gaXNzIC8gTWF0aC5zcXJ0KG4xICogbjIpO1xuICBjb25zdCBzdmFyID0gKDQuMCAqIHgubGVuZ3RoICsgMTAuMCkgLyAoOS4wICogeC5sZW5ndGggKiAoeC5sZW5ndGggLSAxKSk7XG4gIGNvbnN0IHogPSB0YXUgLyBNYXRoLnNxcnQoc3Zhcik7XG4gIGNvbnN0IHByb2IgPSBlcmZjKE1hdGguYWJzKHopIC8gMS40MTQyMTM2KTtcbiAgcmV0dXJuIHt0ZXN0OiB0YXUsIHo6IHosIHByb2I6IHByb2J9O1xufVxuIl19
@@ -1,8 +1,8 @@
1
1
  import { Property } from 'datagrok-api/src/entities';
2
- export declare enum FitErrorModel {
3
- Constant = 0,
4
- Proportional = 1
5
- }
2
+ export declare const FitErrorModel: {
3
+ CONSTANT: string;
4
+ PROPORTIONAL: string;
5
+ };
6
6
  export declare type FitParamBounds = {
7
7
  min?: number;
8
8
  max?: number;
@@ -70,6 +70,7 @@ export declare const CURVE_CONFIDENCE_INTERVAL_BOUNDS: {
70
70
  export declare const DROPLINES: string[];
71
71
  export declare type FitMarkerType = 'asterisk' | 'circle' | 'cross border' | 'diamond' | 'square' | 'star' | 'triangle bottom' | 'triangle left' | 'triangle right' | 'triangle top';
72
72
  export declare type FitLineStyle = 'solid' | 'dotted' | 'dashed' | 'dashdotted';
73
+ export declare type FitErrorModelType = 'constant' | 'proportional';
73
74
  /** A point in the fit series. Only x and y are required. Can override some fields defined in IFitSeriesOptions. */
74
75
  export interface IFitPoint {
75
76
  x: number;
@@ -131,6 +132,7 @@ export interface IFitSeriesOptions {
131
132
  showFitLine?: boolean;
132
133
  showPoints?: string;
133
134
  showCurveConfidenceInterval?: boolean;
135
+ errorModel?: FitErrorModelType;
134
136
  clickToToggle?: boolean;
135
137
  labels?: {
136
138
  [key: string]: string | number | boolean;
@@ -182,7 +184,7 @@ export declare const fitFunctions: {
182
184
  [index: string]: FitFunction;
183
185
  };
184
186
  export interface IFitOptions {
185
- errorModel: FitErrorModel;
187
+ errorModel: FitErrorModelType;
186
188
  confidenceLevel: number;
187
189
  statistics: boolean;
188
190
  }
@@ -190,12 +192,12 @@ export declare function getOrCreateFitFunction(seriesFitFunc: string | IFitFunct
190
192
  export declare function fitData(data: {
191
193
  x: number[];
192
194
  y: number[];
193
- }, fitFunction: FitFunction, errorModel: FitErrorModel, parameterBounds?: FitParamBounds[]): FitCurve;
195
+ }, fitFunction: FitFunction, errorModel: FitErrorModelType, parameterBounds?: FitParamBounds[]): FitCurve;
194
196
  export declare function getFittedCurve(curveFunction: (params: number[], x: number) => number, paramValues: number[]): (x: number) => number;
195
197
  export declare function getCurveConfidenceIntervals(data: {
196
198
  x: number[];
197
199
  y: number[];
198
- }, paramValues: number[], curveFunction: (params: number[], x: number) => number, confidenceLevel: number | undefined, errorModel: FitErrorModel): FitConfidenceIntervals;
200
+ }, paramValues: number[], curveFunction: (params: number[], x: number) => number, confidenceLevel: number | undefined, errorModel: FitErrorModelType): FitConfidenceIntervals;
199
201
  export declare function getStatistics(data: {
200
202
  x: number[];
201
203
  y: number[];
@@ -1 +1 @@
1
- {"version":3,"file":"fit-curve.d.ts","sourceRoot":"","sources":["fit-curve.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"fit-curve.d.ts","sourceRoot":"","sources":["fit-curve.ts"],"names":[],"mappings":"AAGA,OAAO,EAAC,QAAQ,EAAC,MAAM,2BAA2B,CAAC;AAsBnD,eAAO,MAAM,aAAa;;;CAGzB,CAAC;AAEF,oBAAY,cAAc,GAAG;IAC3B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;CACd,CAAC;AAEF;+EAC+E;AAC/E,MAAM,WAAW,uBAAuB;IACtC,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,oBAAoB,EAAE,MAAM,CAAC;IAC7B,cAAc,EAAE,MAAM,EAAE,CAAC;CAC1B;AAED,oBAAY,QAAQ,GAAG;IACrB,WAAW,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,CAAC;IACnC,UAAU,EAAE,MAAM,EAAE,CAAC;CACtB,CAAC;AAEF,oBAAY,sBAAsB,GAAG;IACnC,aAAa,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,CAAC;IACrC,gBAAgB,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,CAAC;CACzC,CAAC;AAEF,oBAAY,aAAa,GAAG;IAC1B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,oBAAY,oBAAoB,GAAG;IACjC,QAAQ,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,CAAC;IAChC,WAAW,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,CAAC;IACnC,cAAc,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,CAAC;CACvC,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;EAoBE;AAEF,eAAO,MAAM,YAAY,QAAQ,CAAC;AAClC,eAAO,MAAM,aAAa,QAAQ,CAAC;AACnC,eAAO,MAAM,OAAO,SAAS,CAAC;AAE9B,eAAO,MAAM,gCAAgC,yBAAyB,CAAC;AACvE,eAAO,MAAM,8BAA8B,0BAA0B,CAAC;AAEtE,eAAO,MAAM,gCAAgC;;;CAG5C,CAAC;AAEF,eAAO,MAAM,SAAS,UAAW,CAAC;AAElC,oBAAY,aAAa,GAAG,UAAU,GAAG,QAAQ,GAAG,cAAc,GAAG,SAAS,GAAG,QAAQ,GAAG,MAAM,GAAG,iBAAiB,GACpH,eAAe,GAAG,gBAAgB,GAAG,cAAc,CAAC;AAEtD,oBAAY,YAAY,GAAG,OAAO,GAAG,QAAQ,GAAG,QAAQ,GAAG,YAAY,CAAC;AAExE,oBAAY,iBAAiB,GAAG,UAAU,GAAG,cAAc,CAAC;AAE5D,mHAAmH;AACnH,MAAM,WAAW,SAAS;IACxB,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,aAAa,CAAC;IACvB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;CAGhB;AAED;mFACmF;AACnF,MAAM,WAAW,UAAW,SAAQ,iBAAiB;IACnD,MAAM,EAAE,SAAS,EAAE,CAAC;CACrB;AAED,uDAAuD;AACvD,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;CACd;AAED,mHAAmH;AACnH,MAAM,WAAW,gBAAgB;IAC/B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,IAAI,CAAC,EAAE,OAAO,CAAC;IAEf,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,YAAY,CAAC,EAAE,qBAAqB,EAAE,CAAC;CACxC;AAED,8BAA8B;AAC9B,MAAM,WAAW,aAAa;IAC5B,YAAY,CAAC,EAAE,gBAAgB,CAAC;IAChC,aAAa,CAAC,EAAE,iBAAiB,CAAC;IAClC,MAAM,CAAC,EAAE,UAAU,EAAE,CAAC;CACvB;AAED,4DAA4D;AAC5D,qBAAa,YAAa,YAAW,aAAa;IAChD,YAAY,EAAE,gBAAgB,CAAM;IACpC,aAAa,EAAE,iBAAiB,CAAM;IACtC,MAAM,EAAE,UAAU,EAAE,CAAM;CAC3B;AAED,oHAAoH;AACpH,MAAM,WAAW,iBAAiB;IAChC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,GAAG,uBAAuB,CAAC;IAC/C,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,eAAe,CAAC,EAAE,cAAc,EAAE,CAAC;IACnC,UAAU,CAAC,EAAE,aAAa,CAAC;IAC3B,SAAS,CAAC,EAAE,YAAY,CAAC;IACzB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,2BAA2B,CAAC,EAAE,OAAO,CAAC;IACtC,UAAU,CAAC,EAAE,iBAAiB,CAAC;IAC/B,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,MAAM,CAAC,EAAE;QAAC,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAA;KAAC,CAAC;IACpD,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;CACtB;AAID,gHAAgH;AAChH,eAAO,MAAM,oBAAoB,EAAE,QAAQ,EAQ1C,CAAC;AAEF,mHAAmH;AACnH,eAAO,MAAM,sBAAsB,EAAE,QAAQ,EAe5C,CAAC;AAEF,oHAAoH;AACpH,eAAO,MAAM,mBAAmB,EAAE,QAAQ,EAyBzC,CAAC;AAEF,eAAO,MAAM,oBAAoB,YAAY,CAAC;AAC9C,eAAO,MAAM,mBAAmB,WAAW,CAAC;AAE5C,eAAO,MAAM,kBAAkB,aAAa,CAAC;AAC7C,eAAO,MAAM,aAAa,QAAQ,CAAC;AAInC,kCAAkC;AAClC,8BAAsB,WAAW;IAC/B,QAAQ,KAAK,IAAI,IAAI,MAAM,CAAC;IAC5B,QAAQ,KAAK,cAAc,IAAI,MAAM,EAAE,CAAC;IACxC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM;IAC/C,QAAQ,CAAC,oBAAoB,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE;CAClE;AAED,gDAAgD;AAChD,qBAAa,cAAe,SAAQ,WAAW;IAC7C,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,IAAI,cAAc,IAAI,MAAM,EAAE,CAE7B;IAED,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM;IAItC,oBAAoB,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE;CAGzD;AAED,iDAAiD;AACjD,qBAAa,eAAgB,SAAQ,WAAW;IAC9C,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,IAAI,cAAc,IAAI,MAAM,EAAE,CAE7B;IAED,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM;IAItC,oBAAoB,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE;CAkBzD;AAED,8CAA8C;AAC9C,qBAAa,UAAW,SAAQ,WAAW;IACzC,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,eAAe,CAAW;gBAEtB,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,MAAM,KAAK,MAAM,EACtE,iBAAiB,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,KAAK,MAAM,EAAE,EAAE,cAAc,EAAE,MAAM,EAAE;IAUrF,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,IAAI,cAAc,IAAI,MAAM,EAAE,CAE7B;IAED,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM;IAItC,oBAAoB,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE;CAGzD;AAGD,eAAO,MAAM,YAAY,EAAE;IAAC,CAAC,KAAK,EAAE,MAAM,GAAG,WAAW,CAAA;CAGvD,CAAC;AAEF,MAAM,WAAW,WAAW;IAC1B,UAAU,EAAE,iBAAiB,CAAC;IAC9B,eAAe,EAAE,MAAM,CAAC;IACxB,UAAU,EAAE,OAAO,CAAC;CACrB;AAoCD,wBAAgB,sBAAsB,CAAC,aAAa,EAAE,MAAM,GAAG,uBAAuB,GAAG,WAAW,CAkBnG;AAED,wBAAgB,OAAO,CAAC,IAAI,EAAE;IAAC,CAAC,EAAE,MAAM,EAAE,CAAC;IAAC,CAAC,EAAE,MAAM,EAAE,CAAA;CAAC,EAAE,WAAW,EAAE,WAAW,EAAE,UAAU,EAAE,iBAAiB,EAC/G,eAAe,CAAC,EAAE,cAAc,EAAE,GAAG,QAAQ,CAuC9C;AAED,wBAAgB,cAAc,CAAC,aAAa,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,MAAM,KAAK,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,GAC3G,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,CAIrB;AAED,wBAAgB,2BAA2B,CAAC,IAAI,EAAE;IAAC,CAAC,EAAE,MAAM,EAAE,CAAC;IAAC,CAAC,EAAE,MAAM,EAAE,CAAA;CAAC,EAAE,WAAW,EAAE,MAAM,EAAE,EACjG,aAAa,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,MAAM,KAAK,MAAM,EAAE,eAAe,oBAAe,EAAE,UAAU,EAAE,iBAAiB,GACrH,sBAAsB,CA0BvB;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE;IAAC,CAAC,EAAE,MAAM,EAAE,CAAC;IAAC,CAAC,EAAE,MAAM,EAAE,CAAA;CAAC,EAAE,WAAW,EAAE,MAAM,EAAE,EACnF,aAAa,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,MAAM,KAAK,MAAM,EAAE,UAAU,GAAE,OAAc,GAAG,aAAa,CAYnG;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE;IAAC,CAAC,EAAE,MAAM,EAAE,CAAC;IAAC,CAAC,EAAE,MAAM,EAAE,CAAA;CAAC,EAAE,WAAW,EAAE,MAAM,EAAE,EAC1F,eAAe,GAAE,MAAa,EAAE,UAAU,GAAE,OAAc,GAAG,oBAAoB,GAAG,IAAI,CAuCzF;AAED,wBAAgB,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAM3D;AAED,wBAAgB,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,EAAE,IAAI,EAAE;IAAC,CAAC,EAAE,MAAM,EAAE,CAAC;IAAC,CAAC,EAAE,MAAM,EAAE,CAAA;CAAC,GAAG,MAAM,CAWnG;AAED,wBAAgB,WAAW,CAAC,WAAW,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,EAAE,IAAI,EAAE;IAAC,CAAC,EAAE,MAAM,EAAE,CAAC;IAAC,CAAC,EAAE,MAAM,EAAE,CAAA;CAAC,GAAG,MAAM,CAYxG"}
@@ -6,11 +6,10 @@ import { TYPE } from 'datagrok-api/src/const';
6
6
  import { limitedMemoryBFGS } from '../../lbfgs/lbfgs';
7
7
  //@ts-ignore: no types
8
8
  import * as jStat from 'jstat';
9
- export var FitErrorModel;
10
- (function (FitErrorModel) {
11
- FitErrorModel[FitErrorModel["Constant"] = 0] = "Constant";
12
- FitErrorModel[FitErrorModel["Proportional"] = 1] = "Proportional";
13
- })(FitErrorModel || (FitErrorModel = {}));
9
+ export const FitErrorModel = {
10
+ CONSTANT: 'constant',
11
+ PROPORTIONAL: 'proportional',
12
+ };
14
13
  /**
15
14
  * Datagrok curve fitting
16
15
  *
@@ -68,13 +67,13 @@ export const fitChartDataProperties = [
68
67
  Property.js('minY', TYPE.FLOAT, { description: 'Minimum value of the Y axis', nullable: true }),
69
68
  Property.js('maxX', TYPE.FLOAT, { description: 'Maximum value of the X axis', nullable: true }),
70
69
  Property.js('maxY', TYPE.FLOAT, { description: 'Maximum value of the Y axis', nullable: true }),
71
- Property.js('title', TYPE.STRING, { description: 'Plot title. If not specified, doesn\'t renders', nullable: true }),
70
+ Property.js('title', TYPE.STRING, { nullable: true }),
72
71
  Property.js('xAxisName', TYPE.STRING, { description: 'Label to show on the X axis. If not specified, corresponding data column name is used', nullable: true }),
73
72
  Property.js('yAxisName', TYPE.STRING, { description: 'Label to show on the Y axis. If not specified, corresponding data column name is used', nullable: true }),
74
- Property.js('logX', TYPE.BOOL, { defaultValue: false }),
75
- Property.js('logY', TYPE.BOOL, { defaultValue: false }),
76
- Property.js('showStatistics', TYPE.STRING_LIST, { choices: statisticsProperties.map((frp) => frp.name),
77
- inputType: 'MultiChoice' }),
73
+ Property.js('logX', TYPE.BOOL, { description: 'Whether the X axis should be logarithmic', defaultValue: false }),
74
+ Property.js('logY', TYPE.BOOL, { description: 'Whether the Y axis should be logarithmic', defaultValue: false }),
75
+ Property.js('showStatistics', TYPE.STRING_LIST, { description: 'Whether specific statistics should be rendered',
76
+ choices: statisticsProperties.map((frp) => frp.name), inputType: 'MultiChoice' }),
78
77
  ];
79
78
  /** Properties that describe {@link IFitSeriesOptions}. Useful for editing, initialization, transformations, etc. */
80
79
  export const fitSeriesProperties = [
@@ -82,17 +81,20 @@ export const fitSeriesProperties = [
82
81
  Property.js('fitFunction', TYPE.STRING, { category: 'Fitting', choices: ['sigmoid', 'linear'], defaultValue: 'sigmoid' }),
83
82
  Property.js('pointColor', TYPE.STRING, { category: 'Rendering', nullable: true, inputType: 'Color' }),
84
83
  Property.js('fitLineColor', TYPE.STRING, { category: 'Rendering', nullable: true, inputType: 'Color' }),
84
+ Property.js('errorModel', TYPE.STRING, { category: 'Fitting', defaultValue: 'constant',
85
+ choices: ['constant', 'proportional'], nullable: false }),
85
86
  Property.js('clickToToggle', TYPE.BOOL, { category: 'Fitting', description: 'If true, clicking on the point toggles its outlier status and causes curve refitting', nullable: true, defaultValue: false }),
86
- Property.js('showFitLine', TYPE.BOOL, { category: 'Fitting', description: 'Whether the fit line should be rendered', defaultValue: true }),
87
+ Property.js('showFitLine', TYPE.BOOL, { category: 'Fitting', defaultValue: true }),
87
88
  Property.js('showPoints', TYPE.STRING, { category: 'Fitting', description: 'Whether points/candlesticks/none should be rendered',
88
89
  defaultValue: 'points', choices: ['points', 'candlesticks', 'both'] }),
89
90
  Property.js('showCurveConfidenceInterval', TYPE.BOOL, { category: 'Fitting', description: 'Whether confidence intervals should be rendered', defaultValue: false }),
90
- Property.js('markerType', TYPE.STRING, { category: 'Rendering', description: 'Marker type used when rendering',
91
- defaultValue: 'circle', choices: ['asterisk', 'circle', 'cross border', 'diamond', 'square', 'star',
91
+ Property.js('markerType', TYPE.STRING, { category: 'Rendering', defaultValue: 'circle',
92
+ choices: ['asterisk', 'circle', 'cross border', 'diamond', 'square', 'star',
92
93
  'triangle bottom', 'triangle left', 'triangle right', 'triangle top'], nullable: false }),
93
- Property.js('lineStyle', TYPE.STRING, { category: 'Rendering', description: 'Line style used when rendering',
94
- defaultValue: 'solid', choices: ['solid', 'dotted', 'dashed', 'dashdotted'], nullable: false }),
95
- Property.js('droplines', TYPE.STRING_LIST, { choices: DROPLINES, inputType: 'MultiChoice' }),
94
+ Property.js('lineStyle', TYPE.STRING, { category: 'Rendering', defaultValue: 'solid',
95
+ choices: ['solid', 'dotted', 'dashed', 'dashdotted'], nullable: false }),
96
+ Property.js('droplines', TYPE.STRING_LIST, { description: 'Whether specific droplines should be rendered',
97
+ choices: DROPLINES, inputType: 'MultiChoice' }),
96
98
  ];
97
99
  export const FIT_FUNCTION_SIGMOID = 'sigmoid';
98
100
  export const FIT_FUNCTION_LINEAR = 'linear';
@@ -176,10 +178,10 @@ export const fitFunctions = {
176
178
  function createObjectiveFunction(errorModel) {
177
179
  let of;
178
180
  switch (errorModel) {
179
- case FitErrorModel.Constant:
181
+ case FitErrorModel.CONSTANT:
180
182
  of = objectiveNormalConstant;
181
183
  break;
182
- case FitErrorModel.Proportional:
184
+ case FitErrorModel.PROPORTIONAL:
183
185
  of = objectiveNormalProportional;
184
186
  break;
185
187
  default:
@@ -257,20 +259,20 @@ export function getFittedCurve(curveFunction, paramValues) {
257
259
  }
258
260
  export function getCurveConfidenceIntervals(data, paramValues, curveFunction, confidenceLevel = 0.05, errorModel) {
259
261
  const of = createObjectiveFunction(errorModel);
260
- const error = errorModel === FitErrorModel.Proportional ?
262
+ const error = errorModel === FitErrorModel.PROPORTIONAL ?
261
263
  of(curveFunction, data, paramValues).mult :
262
264
  of(curveFunction, data, paramValues).const;
263
265
  const quantile = jStat.normal.inv(1 - confidenceLevel / 2, 0, 1);
264
266
  const top = (x) => {
265
267
  const value = curveFunction(paramValues, x);
266
- if (errorModel === FitErrorModel.Constant)
268
+ if (errorModel === FitErrorModel.CONSTANT)
267
269
  return value + quantile * error;
268
270
  else
269
271
  return value + quantile * Math.abs(value) * error;
270
272
  };
271
273
  const bottom = (x) => {
272
274
  const value = curveFunction(paramValues, x);
273
- if (errorModel === FitErrorModel.Constant)
275
+ if (errorModel === FitErrorModel.CONSTANT)
274
276
  return value - quantile * error;
275
277
  else
276
278
  return value - quantile * Math.abs(value) * error;
@@ -421,4 +423,4 @@ function objectiveNormalProportional(targetFunc, data, params) {
421
423
  likelihood += residuesSquares[i] / sigmaSq + Math.log(2 * pi * sigmaSq);
422
424
  return { value: -likelihood, const: sigma, mult: 0 };
423
425
  }
424
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZml0LWN1cnZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiZml0LWN1cnZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLDRCQUE0QjtBQUM1QixvQ0FBb0M7QUFDcEMsT0FBTyxLQUFLLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN0QyxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0sMkJBQTJCLENBQUM7QUFDbkQsT0FBTyxFQUFDLElBQUksRUFBQyxNQUFNLHdCQUF3QixDQUFDO0FBRTVDLE9BQU8sRUFBQyxpQkFBaUIsRUFBQyxNQUFNLG1CQUFtQixDQUFDO0FBQ3BELHNCQUFzQjtBQUN0QixPQUFPLEtBQUssS0FBSyxNQUFNLE9BQU8sQ0FBQztBQWlCL0IsTUFBTSxDQUFOLElBQVksYUFHWDtBQUhELFdBQVksYUFBYTtJQUN2Qix5REFBUSxDQUFBO0lBQ1IsaUVBQVksQ0FBQTtBQUNkLENBQUMsRUFIVyxhQUFhLEtBQWIsYUFBYSxRQUd4QjtBQTBDRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7RUFvQkU7QUFFRixNQUFNLENBQUMsTUFBTSxZQUFZLEdBQUcsS0FBSyxDQUFDO0FBQ2xDLE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBRyxLQUFLLENBQUM7QUFDbkMsTUFBTSxDQUFDLE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQztBQUU5QixNQUFNLENBQUMsTUFBTSxnQ0FBZ0MsR0FBRyxzQkFBc0IsQ0FBQztBQUN2RSxNQUFNLENBQUMsTUFBTSw4QkFBOEIsR0FBRyx1QkFBdUIsQ0FBQztBQUV0RSxNQUFNLENBQUMsTUFBTSxnQ0FBZ0MsR0FBRztJQUM5QyxHQUFHLEVBQUUsS0FBSztJQUNWLE1BQU0sRUFBRSxRQUFRO0NBQ2pCLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxTQUFTLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQTBEbEMsNERBQTREO0FBQzVELE1BQU0sT0FBTyxZQUFZO0lBQXpCO1FBQ0UsaUJBQVksR0FBcUIsRUFBRSxDQUFD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TUFBTSxFQUFFLENBQUMsRUFBRTtRQUM3QyxVQUFVLElBQUksZUFBZSxDQUFDLENBQUMsQ0FBQyxHQUFHLE9BQU8sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsT0FBTyxDQUFDLENBQUM7SUFFMUUsT0FBTyxFQUFDLEtBQUssRUFBRSxDQUFDLFVBQVUsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDLEVBQUMsQ0FBQztBQUNyRCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbm8tbXVsdGktc3BhY2VzICovXG5pbXBvcnQgKiBhcyBERyBmcm9tICdkYXRhZ3Jvay1hcGkvZGcnO1xuaW1wb3J0IHtQcm9wZXJ0eX0gZnJvbSAnZGF0YWdyb2stYXBpL3NyYy9lbnRpdGllcyc7XG5pbXBvcnQge1RZUEV9IGZyb20gJ2RhdGFncm9rLWFwaS9zcmMvY29uc3QnO1xuXG5pbXBvcnQge2xpbWl0ZWRNZW1vcnlCRkdTfSBmcm9tICcuLi8uLi9sYmZncy9sYmZncyc7XG4vL0B0cy1pZ25vcmU6IG5vIHR5cGVzXG5pbXBvcnQgKiBhcyBqU3RhdCBmcm9tICdqc3RhdCc7XG5cblxudHlwZSBPcHRpbWl6YWJsZSA9IHtcbiAgZ2V0VmFsdWU6IChwYXJhbWV0ZXJzOiBudW1iZXJbXSkgPT4gbnVtYmVyLFxuICBnZXRHcmFkaWVudDogKHBhcmFtZXRlcnM6IG51bWJlcltdLCBncmFkaWVudDogbnVtYmVyW10pID0+IG51bWJlcltdLFxufVxuXG50eXBlIExpa2VsaWhvb2QgPSB7XG4gIHZhbHVlOiBudW1iZXIsXG4gIGNvbnN0OiBudW1iZXIsXG4gIG11bHQ6IG51bWJlclxufTtcblxudHlwZSBPYmplY3RpdmVGdW5jdGlvbiA9ICh0YXJnZXRGdW5jOiAocGFyYW1zOiBudW1iZXJbXSwgeDogbnVtYmVyKSA9PiBudW1iZXIsXG4gIGRhdGE6IHt4OiBudW1iZXJbXSwgeTogbnVtYmVyW119LCBwYXJhbXM6IG51bWJlcltdKSA9PiBMaWtlbGlob29kO1xuXG5leHBvcnQgZW51bSBGaXRFcnJvck1vZGVsIHtcbiAgQ29uc3RhbnQsXG4gIFByb3BvcnRpb25hbFxufVxuXG5leHBvcnQgdHlwZSBGaXRQYXJhbUJvdW5kcyA9IHtcbiAgbWluPzogbnVtYmVyO1xuICBtYXg/OiBudW1iZXI7XG59O1xuXG4vKiogRml0IGZ1bmN0aW9uIGRlc2NyaXB0aW9uLiBBcHBsaWVzIHRvIGN1c3RvbSB1c2VyIGZpdCBmdW5jdGlvbnMuXG4gKiBSZXF1aXJlcyBKUyBhcnJvdyBmdW5jdGlvbnMgZm9yIHRoZSBmaXQgZnVuY3Rpb25zIGFuZCBpbml0aWFsIHBhcmFtZXRlcnMuICovXG5leHBvcnQgaW50ZXJmYWNlIElGaXRGdW5jdGlvbkRlc2NyaXB0aW9uIHtcbiAgbmFtZTogc3RyaW5nO1xuICBmdW5jdGlvbjogc3RyaW5nO1xuICBnZXRJbml0aWFsUGFyYW1ldGVyczogc3RyaW5nO1xuICBwYXJhbWV0ZXJOYW1lczogc3RyaW5nW107XG59XG5cbmV4cG9ydCB0eXBlIEZpdEN1cnZlID0ge1xuICBmaXR0ZWRDdXJ2ZTogKHg6IG51bWJlcikgPT4gbnVtYmVyO1xuICBwYXJhbWV0ZXJzOiBudW1iZXJbXTtcbn07XG5cbmV4cG9ydCB0eXBlIEZpdENvbmZpZGVuY2VJbnRlcnZhbHMgPSB7XG4gIGNvbmZpZGVuY2VUb3A6ICh4OiBudW1iZXIpID0+IG51bWJlcjtcbiAgY29uZmlkZW5jZUJvdHRvbTogKHg6IG51bWJlcikgPT4gbnVtYmVyO1xufTtcblxuZXhwb3J0IHR5cGUgRml0U3RhdGlzdGljcyA9IHtcbiAgclNxdWFyZWQ/OiBudW1iZXIsXG4gIGF1Yz86IG51bWJlcixcbiAgaW50ZXJjZXB0WDogbnVtYmVyLCAvLyBwYXJhbWV0ZXJzWzJdXG4gIGludGVyY2VwdFk6IG51bWJlciwgLy8gZml0dGVkQ3VydmVbcGFyYW1ldGVyc1syXV1cbiAgc2xvcGU6IG51bWJlciwgLy8gcGFyYW1ldGVyc1sxXVxuICB0b3A6IG51bWJlciwgLy8gcGFyYW1ldGVyc1swXVxuICBib3R0b206IG51bWJlciwgLy8gcGFyYW1ldGVyc1szXVxufTtcblxuZXhwb3J0IHR5cGUgRml0SW52ZXJ0ZWRGdW5jdGlvbnMgPSB7XG4gIGludmVydGVkOiAoeTogbnVtYmVyKSA9PiBudW1iZXIsXG4gIGludmVydGVkVG9wOiAoeTogbnVtYmVyKSA9PiBudW1iZXIsXG4gIGludmVydGVkQm90dG9tOiAoeTogbnVtYmVyKSA9PiBudW1iZXIsXG59O1xuXG4vKipcbiAqICBEYXRhZ3JvayBjdXJ2ZSBmaXR0aW5nXG4gKlxuICogLSBGaXR0aW5nOiBjb21wdXRpbmcgcGFyYW1ldGVycyBvZiB0aGUgc3BlY2lmaWVkIGZ1bmN0aW9uIHRvIGJlc3QgZml0IHRoZSBkYXRhXG4gKiAgIC0gVXNlcyBCRkdTIG9wdGltaXphdGlvbiBhbGdvcml0aG0gKG11bHRpLXRocmVhZGluZyBmb3IgcGVyZm9ybWFuY2UpLlxuICogICAgIEZvciBkb3NlLXJlc3BvbnNlIGN1cnZlcywgd2UgYXJlIHR5cGljYWxseSBmaXR0aW5nIHRoZSBzaWdtb2lkIGZ1bmN0aW9uXG4gKiAgIC0gQWJpbGl0eSB0byBkeW5hbWljYWxseSByZWdpc3RlciBjdXN0b20gZml0dGluZyBmdW5jdGlvbnNcbiAqICAgICAtIEF1dG9tYXRpYyBmaXQgZnVuY3Rpb24gZGV0ZXJtaW5hdGlvblxuICogICAgIC0gQ2FjaGluZyBvZiBjdXN0b20gZml0dGluZyBmdW5jdGlvbnNcbiAqICAgLSBBYmlsaXR5IHRvIGdldCBmaXR0aW5nIHBlcmZvcm1hbmNlIGNoYXJhY3RlcmlzdGljcyAoci1zcXVhcmVkLCBjbGFzc2lmaWNhdGlvbiwgZXRjKVxuICogLSBEZWVwIGludGVncmF0aW9uIHdpdGggdGhlIERhdGFncm9rIGdyaWRcbiAqICAgLSBFaXRoZXIgZml0dGluZyBvbiB0aGUgZmx5LCBvciB1c2luZyB0aGUgc3VwcGxpZWQgZnVuY3Rpb24gKyBwYXJhbWV0ZXJzXG4gKiAgIC0gTXVsdGlwbGUgc2VyaWVzIGluIG9uZSBjZWxsXG4gKiAgIC0gQ2FuZGxlc3RpY2tzLCBjb25maWRlbmNlIGludGVydmFscywgYW5kIGRyb3BsaW5lcyBkcmF3aW5nXG4gKiAgIC0gQWJpbGl0eSB0byBkZWZpbmUgY2hhcnQsIG1hcmtlciwgb3IgZml0dGluZyBvcHRpb25zIChzdWNoIGFzIGZpdCBmdW5jdGlvbiBvciBtYXJrZXIgY29sb3IpXG4gKiAgICAgb24gdGhlIGNvbHVtbiBsZXZlbCwgd2l0aCB0aGUgYWJpbGl0eSB0byBvdmVycmlkZSBpdCBvbiBhIGdyaWQgY2VsbCBvciBwb2ludCBsZXZlbFxuICogICAtIENsaWNraW5nIGEgcG9pbnQgaW4gYSBjaGFydCB3aXRoaW4gYSBncmlkIG1ha2VzIGl0IGFuIG91dGxpZXIgLT4gY3VydmUgaXMgcmUtZml0dGVkIG9uIHRoZSBmbHlcbiAqICAgLSBBYmlsaXR5IHRvIHNwZWNpZnkgYSBjaGFydCBhcyBcInJlZmVyZW5jZVwiIHNvIHRoYXQgaXQgaXMgc2hvd24gb24gZXZlcnkgb3RoZXIgY2hhcnQgZm9yIGNvbXBhcmlzb25cbiAqIC0gQWJpbGl0eSB0byBvdmVybGF5IGN1cnZlcyBmcm9tIG11bHRpcGxlIGdyaWQgY2VsbHMgKHNwZWNpYWwgdmlld2VyKVxuICogLSBXb3JrIHdpdGggc2VyaWVzIHN0b3JlZCBpbiBtdWx0aXBsZSBmb3JtYXRzIChiaW5hcnkgZm9yIHBlcmZvcm1hbmNlLCBqc29uIGZvciBmbGV4aWJpbGl0eSwgZXRjKVxuKi9cblxuZXhwb3J0IGNvbnN0IEZJVF9TRU1fVFlQRSA9ICdmaXQnO1xuZXhwb3J0IGNvbnN0IEZJVF9DRUxMX1RZUEUgPSAnZml0JztcbmV4cG9ydCBjb25zdCBUQUdfRklUID0gJy5maXQnO1xuXG5leHBvcnQgY29uc3QgQ09ORklERU5DRV9JTlRFUlZBTF9TVFJPS0VfQ09MT1IgPSAncmdiYSgyNTUsMTkxLDYzLDAuNCknO1xuZXhwb3J0IGNvbnN0IENPTkZJREVOQ0VfSU5URVJWQUxfRklMTF9DT0xPUiA9ICdyZ2JhKDI1NSwyMzgsMjA0LDAuMyknO1xuXG5leHBvcnQgY29uc3QgQ1VSVkVfQ09ORklERU5DRV9JTlRFUlZBTF9CT1VORFMgPSB7XG4gIFRPUDogJ3RvcCcsXG4gIEJPVFRPTTogJ2JvdHRvbScsXG59O1xuXG5leHBvcnQgY29uc3QgRFJPUExJTkVTID0gWydJQzUwJ107XG5cbmV4cG9ydCB0eXBlIEZpdE1hcmtlclR5cGUgPSAnYXN0ZXJpc2snIHwgJ2NpcmNsZScgfCAnY3Jvc3MgYm9yZGVyJyB8ICdkaWFtb25kJyB8ICdzcXVhcmUnIHwgJ3N0YXInIHwgJ3RyaWFuZ2xlIGJvdHRvbScgfFxuICAndHJpYW5nbGUgbGVmdCcgfCAndHJpYW5nbGUgcmlnaHQnIHwgJ3RyaWFuZ2xlIHRvcCc7XG5cbmV4cG9ydCB0eXBlIEZpdExpbmVTdHlsZSA9ICdzb2xpZCcgfCAnZG90dGVkJyB8ICdkYXNoZWQnIHwgJ2Rhc2hkb3R0ZWQnO1xuXG4vKiogQSBwb2ludCBpbiB0aGUgZml0IHNlcmllcy4gT25seSB4IGFuZCB5IGFyZSByZXF1aXJlZC4gQ2FuIG92ZXJyaWRlIHNvbWUgZmllbGRzIGRlZmluZWQgaW4gSUZpdFNlcmllc09wdGlvbnMuICovXG5leHBvcnQgaW50ZXJmYWNlIElGaXRQb2ludCB7XG4gIHg6IG51bWJlcjtcbiAgeTogbnVtYmVyO1xuICBvdXRsaWVyPzogYm9vbGVhbjsgICAgICAgLy8gaWYgdHJ1ZSwgcmVuZGVycyBhcyAneCcgYW5kIGdldHMgaWdub3JlZCBmb3IgY3VydmUgZml0dGluZ1xuICBjb2xvcj86IHN0cmluZzsgICAgICAgICAgLy8gb3ZlcnJpZGVzIHRoZSBtYXJrZXIgY29sb3IgZGVmaW5lZCBpbiBJRml0U2VyaWVzT3B0aW9uc1xuICBtYXJrZXI/OiBGaXRNYXJrZXJUeXBlOyAgLy8gb3ZlcnJpZGVzIHRoZSBtYXJrZXIgdHlwZSBkZWZpbmVkIGluIElGaXRTZXJpZXNPcHRpb25zXG4gIHNpemU/OiBudW1iZXI7ICAgICAgICAgICAvLyBvdmVycmlkZXMgdGhlIGRlZmF1bHQgbWFya2VyIHNpemVcbiAgc3RkZXY/OiBudW1iZXI7ICAgICAgICAgIC8vIHdoZW4gZGVmaW5lZCwgcmVuZGVycyBhbiBlcnJvciBiYXIgY2FuZGxlc3RpY2tcbiAgLy8gbWluWT86IG51bWJlcjsgICAgICAgICAgIC8vIHdoZW4gZGVmaW5lZCwgdGhlIG1hcmtlciByZW5kZXJzIGFzIGEgY2FuZGxlc3RpY2sgd2l0aCB3aGlza2VycyBbbWluWSwgbWF4WV1cbiAgLy8gbWF4WT86IG51bWJlcjsgICAgICAgICAgIC8vIHdoZW4gZGVmaW5lZCwgdGhlIG1hcmtlciByZW5kZXJzIGFzIGEgY2FuZGxlc3RpY2sgd2l0aCB3aGlza2VycyBbbWluWSwgbWF4WV1cbn1cblxuLyoqIEEgc2VyaWVzIGNvbnNpc3RzIG9mIHBvaW50cywgaGFzIGEgbmFtZSwgYW5kIG9wdGlvbnMuXG4gKiBJZiBkZWZpbmVkLCBzZXJpZXNPcHRpb25zIGFyZSBtZXJnZWQgd2l0aCB7QGxpbmsgSUZpdENoYXJ0RGF0YS5zZXJpZXNPcHRpb25zfSAqL1xuZXhwb3J0IGludGVyZmFjZSBJRml0U2VyaWVzIGV4dGVuZHMgSUZpdFNlcmllc09wdGlvbnMge1xuICBwb2ludHM6IElGaXRQb2ludFtdO1xufVxuXG4vKiogQ2hhcnQgbGFiZWxzIG9wdGlvbnMuIENvbnRyb2xzIHRoZSBjaGFydCBsYWJlbHMuICovXG5leHBvcnQgaW50ZXJmYWNlIElGaXRDaGFydExhYmVsT3B0aW9ucyB7XG4gIHZpc2libGU6IGJvb2xlYW47ICAgICAgICAgLy8gaWYgdHJ1ZSwgcmVuZGVycyB0aGUgbGFiZWwgb24gdGhlIHBsb3RcbiAgY29sb3I6IHN0cmluZzsgICAgICAgICAgICAvLyBkZWZpbmVzIHRoZSBsYWJlbCBjb2xvclxuICBuYW1lOiBzdHJpbmc7ICAgICAgICAgICAgIC8vIGRlZmluZXMgdGhlIGxhYmVsIG5hbWVcbn1cblxuLyoqIENoYXJ0IG9wdGlvbnMuIEZvciBmaXR0ZWQgY3VydmVzLCB0aGlzIG9iamVjdCBpcyBzdG9yZWQgaW4gdGhlIGdyaWQgY29sdW1uIHRhZ3MgYW5kIGlzIHVzZWQgYnkgdGhlIHJlbmRlcmVyLiAqL1xuZXhwb3J0IGludGVyZmFjZSBJRml0Q2hhcnRPcHRpb25zIHtcbiAgbWluWD86IG51bWJlcjtcbiAgbWluWT86IG51bWJlcjtcbiAgbWF4WD86IG51bWJlcjtcbiAgbWF4WT86IG51bWJlcjtcblxuICB0aXRsZT86IHN0cmluZzsgICAgICAgICAgICAvLyBkZWZpbmVzIHRoZSBwbG90IHRpdGxlLiBJZiB0aGUgcGxvdCBzaXplIGlzIGVub3VnaCwgd2lsbCByZW5kZXIgaXQuXG4gIHhBeGlzTmFtZT86IHN0cmluZzsgICAgICAgIC8vIGRlZmluZXMgdGhlIHggYXhpcyBuYW1lLiBJZiB0aGUgcGxvdCBzaXplIGlzIGVub3VnaCwgd2lsbCByZW5kZXIgaXQuXG4gIHlBeGlzTmFtZT86IHN0cmluZzsgICAgICAgIC8vIGRlZmluZXMgdGhlIFkgYXhpcyBuYW1lLiBJZiB0aGUgcGxvdCBzaXplIGlzIGVub3VnaCwgd2lsbCByZW5kZXIgaXQuXG5cbiAgbG9nWD86IGJvb2xlYW47ICAgICAgICAgICAgLy8gZGVmaW5lcyB3aGV0aGVyIHRoZSB4IGRhdGEgc2hvdWxkIGJlIGxvZ2FyaXRobWljIG9yIG5vdFxuICBsb2dZPzogYm9vbGVhbjsgICAgICAgICAgICAvLyBkZWZpbmVzIHdoZXRoZXIgdGhlIHkgZGF0YSBzaG91bGQgYmUgbG9nYXJpdGhtaWMgb3Igbm90XG5cbiAgc2hvd1N0YXRpc3RpY3M/OiBzdHJpbmdbXTsgLy8gZGVmaW5lcyB0aGUgc3RhdGlzdGljcyB0aGF0IHdvdWxkIGJlIHNob3duIG9uIHRoZSBwbG90XG4gIGxhYmVsT3B0aW9ucz86IElGaXRDaGFydExhYmVsT3B0aW9uc1tdOyAvLyBjb250cm9scyB0aGUgcGxvdCBsYWJlbHNcbn1cblxuLyoqIERhdGEgZm9yIHRoZSBmaXQgY2hhcnQuICovXG5leHBvcnQgaW50ZXJmYWNlIElGaXRDaGFydERhdGEge1xuICBjaGFydE9wdGlvbnM/OiBJRml0Q2hhcnRPcHRpb25zO1xuICBzZXJpZXNPcHRpb25zPzogSUZpdFNlcmllc09wdGlvbnM7ICAvLyBEZWZhdWx0IHNlcmllcyBvcHRpb25zLiBJbmRpdmlkdWFsIHNlcmllcyBjYW4gb3ZlcnJpZGUgaXQuXG4gIHNlcmllcz86IElGaXRTZXJpZXNbXTtcbn1cblxuLyoqIENsYXNzIHRoYXQgaW1wbGVtZW50cyB7QGxpbmsgSUZpdENoYXJ0RGF0YX0gaW50ZXJmYWNlICovXG5leHBvcnQgY2xhc3MgRml0Q2hhcnREYXRhIGltcGxlbWVudHMgSUZpdENoYXJ0RGF0YSB7XG4gIGNoYXJ0T3B0aW9uczogSUZpdENoYXJ0T3B0aW9ucyA9IHt9O1xuICBzZXJpZXNPcHRpb25zOiBJRml0U2VyaWVzT3B0aW9ucyA9IHt9OyAgLy8gRGVmYXVsdCBzZXJpZXMgb3B0aW9ucy4gSW5kaXZpZHVhbCBzZXJpZXMgY2FuIG92ZXJyaWRlIGl0LlxuICBzZXJpZXM6IElGaXRTZXJpZXNbXSA9IFtdO1xufVxuXG4vKiogU2VyaWVzIG9wdGlvbnMgY2FuIGJlIGVpdGhlciBhcHBsaWVkIGdsb2JhbGx5IG9uIGEgY29sdW1uIGxldmVsLCBvciBwYXJ0aWFsbHkgb3ZlcnJpZGRlbiBpbiBwYXJ0aWN1bGFyIHNlcmllcyAqL1xuZXhwb3J0IGludGVyZmFjZSBJRml0U2VyaWVzT3B0aW9ucyB7XG4gIG5hbWU/OiBzdHJpbmc7ICAgICAgICAgICAgICAgICAgICAgICAgLy8gY29udHJvbHMgdGhlIHNlcmllcyBuYW1lXG4gIGZpdEZ1bmN0aW9uPzogc3RyaW5nIHwgSUZpdEZ1bmN0aW9uRGVzY3JpcHRpb247IC8vIGNvbnRyb2xzIHRoZSBzZXJpZXMgZml0IGZ1bmN0aW9uXG4gIHBhcmFtZXRlcnM/OiBudW1iZXJbXTsgICAgICAgICAgICAgICAgLy8gY29udHJvbHMgdGhlIHNlcmllcyBwYXJhbWV0ZXJzLCBhdXRvLWZpdHRpbmcgd2hlbiBub3QgZGVmaW5lZFxuICBwYXJhbWV0ZXJCb3VuZHM/OiBGaXRQYXJhbUJvdW5kc1tdOyAgIC8vIGRlZmluZXMgdGhlIGFjY2VwdGFibGUgcmFuZ2Ugb2YgZWFjaCBwYXJhbWV0ZXIsIHdoaWNoIGlzIHRha2VuIGludG8gYWNjb3VudCBkdXJpbmcgdGhlIGZpdHRpbmcuIFNlZSBhbHNvIGBwYXJhbWV0ZXJzYC5cbiAgbWFya2VyVHlwZT86IEZpdE1hcmtlclR5cGU7ICAgICAgICAgICAvLyBkZWZpbmVzIHRoZSBzZXJpZXMgbWFya2VyIHR5cGVcbiAgbGluZVN0eWxlPzogRml0TGluZVN0eWxlOyAgICAgICAgICAgICAvLyBkZWZpbmVzIHRoZSBzZXJpZXMgbGluZSBzdHlsZVxuICBwb2ludENvbG9yPzogc3RyaW5nOyAgICAgICAgICAgICAgICAgIC8vIG92ZXJyaWRlcyB0aGUgc3RhbmRhcmRpemVkIHNlcmllcyBwb2ludCBjb2xvclxuICBmaXRMaW5lQ29sb3I/OiBzdHJpbmc7ICAgICAgICAgICAgICAgIC8vIG92ZXJyaWRlcyB0aGUgc3RhbmRhcmRpemVkIHNlcmllcyBmaXQgbGluZSBjb2xvclxuICBjb25maWRlbmNlSW50ZXJ2YWxDb2xvcj86IHN0cmluZzsgICAgIC8vIG92ZXJyaWRlcyB0aGUgc3RhbmRhcmRpemVkIHNlcmllcyBjb25maWRlbmNlIGludGVydmFsIGNvbG9yXG4gIHNob3dGaXRMaW5lPzogYm9vbGVhbjsgICAgICAgICAgICAgICAgLy8gZGVmaW5lcyB3aGV0aGVyIHRvIHNob3cgdGhlIGZpdCBsaW5lIG9yIG5vdFxuICBzaG93UG9pbnRzPzogc3RyaW5nOyAgICAgICAgICAgICAgICAgIC8vIGRlZmluZXMgdGhlIGRhdGEgZGlzcGxheSBtb2RlXG4gIHNob3dDdXJ2ZUNvbmZpZGVuY2VJbnRlcnZhbD86IGJvb2xlYW47ICAgIC8vIGRlZmluZXMgd2hldGhlciB0byBzaG93IHRoZSBjb25maWRlbmNlIGludGVydmFscyBvciBub3RcbiAgY2xpY2tUb1RvZ2dsZT86IGJvb2xlYW47ICAgIC8vIGlmIHRydWUsIGNsaWNraW5nIG9uIHRoZSBwb2ludCB0b2dnbGVzIGl0cyBvdXRsaWVyIHN0YXR1cyBhbmQgY2F1c2VzIGN1cnZlIHJlZml0dGluZ1xuICBsYWJlbHM/OiB7W2tleTogc3RyaW5nXTogc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbn07IC8vIGNvbnRyb2xsZWQgYnkgSUZpdENoYXJ0RGF0YSBsYWJlbE9wdGlvbnMsIHNob3dzIGxhYmVsc1xuICBkcm9wbGluZXM/OiBzdHJpbmdbXTsgICAgICAgICAgICAgICAgIC8vIGRlZmluZXMgdGhlIGRyb3BsaW5lcyB0aGF0IHdvdWxkIGJlIHNob3duIG9uIHRoZSBwbG90IChJQzUwKVxufVxuLy8gVE9ETzogc2hvdyBsYWJlbHMgaW4gcHJvcGVydHkgcGFuZWwgaWYgcHJlc2VudCwgY29sb3IgYnkgZGVmYXVsdCBmcm9tIHNlcmllc1xuXG5cbi8qKiBQcm9wZXJ0aWVzIHRoYXQgZGVzY3JpYmUge0BsaW5rIEZpdFN0YXRpc3RpY3N9LiBVc2VmdWwgZm9yIGVkaXRpbmcsIGluaXRpYWxpemF0aW9uLCB0cmFuc2Zvcm1hdGlvbnMsIGV0Yy4gKi9cbmV4cG9ydCBjb25zdCBzdGF0aXN0aWNzUHJvcGVydGllczogUHJvcGVydHlbXSA9IFtcbiAgUHJvcGVydHkuanMoJ3JTcXVhcmVkJywgVFlQRS5GTE9BVCwge3VzZXJFZGl0YWJsZTogZmFsc2V9KSxcbiAgUHJvcGVydHkuanMoJ2F1YycsIFRZUEUuRkxPQVQsIHt1c2VyRWRpdGFibGU6IGZhbHNlfSksXG4gIFByb3BlcnR5LmpzKCdpbnRlcmNlcHRZJywgVFlQRS5GTE9BVCwge3VzZXJFZGl0YWJsZTogZmFsc2V9KSxcbiAgUHJvcGVydHkuanMoJ2ludGVyY2VwdFgnLCBUWVBFLkZMT0FULCB7dXNlckVkaXRhYmxlOiBmYWxzZX0pLFxuICBQcm9wZXJ0eS5qcygnc2xvcGUnLCBUWVBFLkZMT0FULCB7dXNlckVkaXRhYmxlOiBmYWxzZX0pLFxuICBQcm9wZXJ0eS5qcygndG9wJywgVFlQRS5GTE9BVCwge3VzZXJFZGl0YWJsZTogZmFsc2V9KSxcbiAgUHJvcGVydHkuanMoJ2JvdHRvbScsIFRZUEUuRkxPQVQsIHt1c2VyRWRpdGFibGU6IGZhbHNlfSksXG5dO1xuXG4vKiogUHJvcGVydGllcyB0aGF0IGRlc2NyaWJlIHtAbGluayBJRml0Q2hhcnRPcHRpb25zfS4gVXNlZnVsIGZvciBlZGl0aW5nLCBpbml0aWFsaXphdGlvbiwgdHJhbnNmb3JtYXRpb25zLCBldGMuICovXG5leHBvcnQgY29uc3QgZml0Q2hhcnREYXRhUHJvcGVydGllczogUHJvcGVydHlbXSA9IFtcbiAgLy8gU3R5bGUgYW5kIHpvb21cbiAgUHJvcGVydHkuanMoJ21pblgnLCBUWVBFLkZMT0FULCB7ZGVzY3JpcHRpb246ICdNaW5pbXVtIHZhbHVlIG9mIHRoZSBYIGF4aXMnLCBudWxsYWJsZTogdHJ1ZX0pLFxuICBQcm9wZXJ0eS5qcygnbWluWScsIFRZUEUuRkxPQVQsIHtkZXNjcmlwdGlvbjogJ01pbmltdW0gdmFsdWUgb2YgdGhlIFkgYXhpcycsIG51bGxhYmxlOiB0cnVlfSksXG4gIFByb3BlcnR5LmpzKCdtYXhYJywgVFlQRS5GTE9BVCwge2Rlc2NyaXB0aW9uOiAnTWF4aW11bSB2YWx1ZSBvZiB0aGUgWCBheGlzJywgbnVsbGFibGU6IHRydWV9KSxcbiAgUHJvcGVydHkuanMoJ21heFknLCBUWVBFLkZMT0FULCB7ZGVzY3JpcHRpb246ICdNYXhpbXVtIHZhbHVlIG9mIHRoZSBZIGF4aXMnLCBudWxsYWJsZTogdHJ1ZX0pLFxuICBQcm9wZXJ0eS5qcygndGl0bGUnLCBUWVBFLlNUUklORywge2Rlc2NyaXB0aW9uOiAnUGxvdCB0aXRsZS4gSWYgbm90IHNwZWNpZmllZCwgZG9lc25cXCd0IHJlbmRlcnMnLCBudWxsYWJsZTogdHJ1ZX0pLFxuICBQcm9wZXJ0eS5qcygneEF4aXNOYW1lJywgVFlQRS5TVFJJTkcsIHtkZXNjcmlwdGlvbjpcbiAgICAnTGFiZWwgdG8gc2hvdyBvbiB0aGUgWCBheGlzLiBJZiBub3Qgc3BlY2lmaWVkLCBjb3JyZXNwb25kaW5nIGRhdGEgY29sdW1uIG5hbWUgaXMgdXNlZCcsIG51bGxhYmxlOiB0cnVlfSksXG4gIFByb3BlcnR5LmpzKCd5QXhpc05hbWUnLCBUWVBFLlNUUklORywge2Rlc2NyaXB0aW9uOlxuICAgICdMYWJlbCB0byBzaG93IG9uIHRoZSBZIGF4aXMuIElmIG5vdCBzcGVjaWZpZWQsIGNvcnJlc3BvbmRpbmcgZGF0YSBjb2x1bW4gbmFtZSBpcyB1c2VkJywgbnVsbGFibGU6IHRydWV9KSxcbiAgUHJvcGVydHkuanMoJ2xvZ1gnLCBUWVBFLkJPT0wsIHtkZWZhdWx0VmFsdWU6IGZhbHNlfSksXG4gIFByb3BlcnR5LmpzKCdsb2dZJywgVFlQRS5CT09MLCB7ZGVmYXVsdFZhbHVlOiBmYWxzZX0pLFxuICBQcm9wZXJ0eS5qcygnc2hvd1N0YXRpc3RpY3MnLCBUWVBFLlNUUklOR19MSVNULCB7Y2hvaWNlczogc3RhdGlzdGljc1Byb3BlcnRpZXMubWFwKChmcnApID0+IGZycC5uYW1lKSxcbiAgICBpbnB1dFR5cGU6ICdNdWx0aUNob2ljZSd9KSxcbl07XG5cbi8qKiBQcm9wZXJ0aWVzIHRoYXQgZGVzY3JpYmUge0BsaW5rIElGaXRTZXJpZXNPcHRpb25zfS4gVXNlZnVsIGZvciBlZGl0aW5nLCBpbml0aWFsaXphdGlvbiwgdHJhbnNmb3JtYXRpb25zLCBldGMuICovXG5leHBvcnQgY29uc3QgZml0U2VyaWVzUHJvcGVydGllczogUHJvcGVydHlbXSA9IFtcbiAgUHJvcGVydHkuanMoJ25hbWUnLCBUWVBFLlNUUklORyksXG4gIFByb3BlcnR5LmpzKCdmaXRGdW5jdGlvbicsIFRZUEUuU1RSSU5HLFxuICAgIHtjYXRlZ29yeTogJ0ZpdHRpbmcnLCBjaG9pY2VzOiBbJ3NpZ21vaWQnLCAnbGluZWFyJ10sIGRlZmF1bHRWYWx1ZTogJ3NpZ21vaWQnfSksXG4gIFByb3BlcnR5LmpzKCdwb2ludENvbG9yJywgVFlQRS5TVFJJTkcsXG4gICAge2NhdGVnb3J5OiAnUmVuZGVyaW5nJywgbnVsbGFibGU6IHRydWUsIGlucHV0VHlwZTogJ0NvbG9yJ30pLFxuICBQcm9wZXJ0eS5qcygnZml0TGluZUNvbG9yJywgVFlQRS5TVFJJTkcsXG4gICAge2NhdGVnb3J5OiAnUmVuZGVyaW5nJywgbnVsbGFibGU6IHRydWUsIGlucHV0VHlwZTogJ0NvbG9yJ30pLFxuICBQcm9wZXJ0eS5qcygnY2xpY2tUb1RvZ2dsZScsIFRZUEUuQk9PTCwge2NhdGVnb3J5OiAnRml0dGluZycsIGRlc2NyaXB0aW9uOlxuICAgICdJZiB0cnVlLCBjbGlja2luZyBvbiB0aGUgcG9pbnQgdG9nZ2xlcyBpdHMgb3V0bGllciBzdGF0dXMgYW5kIGNhdXNlcyBjdXJ2ZSByZWZpdHRpbmcnLCBudWxsYWJsZTogdHJ1ZSwgZGVmYXVsdFZhbHVlOiBmYWxzZX0pLFxuICBQcm9wZXJ0eS5qcygnc2hvd0ZpdExpbmUnLCBUWVBFLkJPT0wsXG4gICAge2NhdGVnb3J5OiAnRml0dGluZycsIGRlc2NyaXB0aW9uOiAnV2hldGhlciB0aGUgZml0IGxpbmUgc2hvdWxkIGJlIHJlbmRlcmVkJywgZGVmYXVsdFZhbHVlOiB0cnVlfSksXG4gIFByb3BlcnR5LmpzKCdzaG93UG9pbnRzJywgVFlQRS5TVFJJTkcsXG4gICAge2NhdGVnb3J5OiAnRml0dGluZycsIGRlc2NyaXB0aW9uOiAnV2hldGhlciBwb2ludHMvY2FuZGxlc3RpY2tzL25vbmUgc2hvdWxkIGJlIHJlbmRlcmVkJyxcbiAgICAgIGRlZmF1bHRWYWx1ZTogJ3BvaW50cycsIGNob2ljZXM6IFsncG9pbnRzJywgJ2NhbmRsZXN0aWNrcycsICdib3RoJ119KSxcbiAgUHJvcGVydHkuanMoJ3Nob3dDdXJ2ZUNvbmZpZGVuY2VJbnRlcnZhbCcsIFRZUEUuQk9PTCxcbiAgICB7Y2F0ZWdvcnk6ICdGaXR0aW5nJywgZGVzY3JpcHRpb246ICdXaGV0aGVyIGNvbmZpZGVuY2UgaW50ZXJ2YWxzIHNob3VsZCBiZSByZW5kZXJlZCcsIGRlZmF1bHRWYWx1ZTogZmFsc2V9KSxcbiAgUHJvcGVydHkuanMoJ21hcmtlclR5cGUnLCBUWVBFLlNUUklORywge2NhdGVnb3J5OiAnUmVuZGVyaW5nJywgZGVzY3JpcHRpb246ICdNYXJrZXIgdHlwZSB1c2VkIHdoZW4gcmVuZGVyaW5nJyxcbiAgICBkZWZhdWx0VmFsdWU6ICdjaXJjbGUnLCBjaG9pY2VzOiBbJ2FzdGVyaXNrJywgJ2NpcmNsZScsICdjcm9zcyBib3JkZXInLCAnZGlhbW9uZCcsICdzcXVhcmUnLCAnc3RhcicsXG4gICAgICAndHJpYW5nbGUgYm90dG9tJywgJ3RyaWFuZ2xlIGxlZnQnLCAndHJpYW5nbGUgcmlnaHQnLCAndHJpYW5nbGUgdG9wJ10sIG51bGxhYmxlOiBmYWxzZX0pLFxuICBQcm9wZXJ0eS5qcygnbGluZVN0eWxlJywgVFlQRS5TVFJJTkcsIHtjYXRlZ29yeTogJ1JlbmRlcmluZycsIGRlc2NyaXB0aW9uOiAnTGluZSBzdHlsZSB1c2VkIHdoZW4gcmVuZGVyaW5nJyxcbiAgICBkZWZhdWx0VmFsdWU6ICdzb2xpZCcsIGNob2ljZXM6IFsnc29saWQnLCAnZG90dGVkJywgJ2Rhc2hlZCcsICdkYXNoZG90dGVkJ10sIG51bGxhYmxlOiBmYWxzZX0pLFxuICBQcm9wZXJ0eS5qcygnZHJvcGxpbmVzJywgVFlQRS5TVFJJTkdfTElTVCwge2Nob2ljZXM6IERST1BMSU5FUywgaW5wdXRUeXBlOiAnTXVsdGlDaG9pY2UnfSksXG5dO1xuXG5leHBvcnQgY29uc3QgRklUX0ZVTkNUSU9OX1NJR01PSUQgPSAnc2lnbW9pZCc7XG5leHBvcnQgY29uc3QgRklUX0ZVTkNUSU9OX0xJTkVBUiA9ICdsaW5lYXInO1xuXG5leHBvcnQgY29uc3QgRklUX1NUQVRTX1JTUVVBUkVEID0gJ3JTcXVhcmVkJztcbmV4cG9ydCBjb25zdCBGSVRfU1RBVFNfQVVDID0gJ2F1Yyc7XG5cblxuLy8gVE9ETz86IGFkZCBtZXRob2QgdG8gcmV0dXJuIHBhcmFtZXRlcnMgLSBnZXQgcGFyYW1ldGVycyBmcm9tIGZpdCBmdW5jdGlvblxuLyoqIENsYXNzIGZvciB0aGUgZml0IGZ1bmN0aW9ucyAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEZpdEZ1bmN0aW9uIHtcbiAgYWJzdHJhY3QgZ2V0IG5hbWUoKTogc3RyaW5nO1xuICBhYnN0cmFjdCBnZXQgcGFyYW1ldGVyTmFtZXMoKTogc3RyaW5nW107XG4gIGFic3RyYWN0IHkocGFyYW1zOiBudW1iZXJbXSwgeDogbnVtYmVyKTogbnVtYmVyO1xuICBhYnN0cmFjdCBnZXRJbml0aWFsUGFyYW1ldGVycyh4OiBudW1iZXJbXSwgeTogbnVtYmVyW10pOiBudW1iZXJbXTtcbn1cblxuLyoqIENsYXNzIHRoYXQgaW1wbGVtZW50cyB0aGUgbGluZWFyIGZ1bmN0aW9uICovXG5leHBvcnQgY2xhc3MgTGluZWFyRnVuY3Rpb24gZXh0ZW5kcyBGaXRGdW5jdGlvbiB7XG4gIGdldCBuYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIEZJVF9GVU5DVElPTl9MSU5FQVI7XG4gIH1cblxuICBnZXQgcGFyYW1ldGVyTmFtZXMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBbJ1Nsb3BlJywgJ0ludGVyY2VwdCddO1xuICB9XG5cbiAgeShwYXJhbXM6IG51bWJlcltdLCB4OiBudW1iZXIpOiBudW1iZXIge1xuICAgIHRocm93IG5ldyBFcnJvcignTm90IGltcGxlbWVudGVkJyk7XG4gIH1cblxuICBnZXRJbml0aWFsUGFyYW1ldGVycyh4OiBudW1iZXJbXSwgeTogbnVtYmVyW10pOiBudW1iZXJbXSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdOb3QgaW1wbGVtZW50ZWQnKTtcbiAgfVxufVxuXG4vKiogQ2xhc3MgdGhhdCBpbXBsZW1lbnRzIHRoZSBzaWdtb2lkIGZ1bmN0aW9uICovXG5leHBvcnQgY2xhc3MgU2lnbW9pZEZ1bmN0aW9uIGV4dGVuZHMgRml0RnVuY3Rpb24ge1xuICBnZXQgbmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBGSVRfRlVOQ1RJT05fU0lHTU9JRDtcbiAgfVxuXG4gIGdldCBwYXJhbWV0ZXJOYW1lcygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIFsnVG9wJywgJ0JvdHRvbScsICdTbG9wZScsICdJQzUwJ107XG4gIH1cblxuICB5KHBhcmFtczogbnVtYmVyW10sIHg6IG51bWJlcik6IG51bWJlciB7XG4gICAgcmV0dXJuIHNpZ21vaWQocGFyYW1zLCB4KTtcbiAgfVxuXG4gIGdldEluaXRpYWxQYXJhbWV0ZXJzKHg6IG51bWJlcltdLCB5OiBudW1iZXJbXSk6IG51bWJlcltdIHtcbiAgICBjb25zdCBkYXRhQm91bmRzID0gREcuUmVjdC5mcm9tWFlBcnJheXMoeCwgeSk7XG4gICAgY29uc3QgbWVkWSA9IChkYXRhQm91bmRzLmJvdHRvbSAtIGRhdGFCb3VuZHMudG9wKSAvIDIgKyBkYXRhQm91bmRzLnRvcDtcbiAgICBsZXQgbWF4WUludGVydmFsID0gZGF0YUJvdW5kcy5ib3R0b20gLSBkYXRhQm91bmRzLnRvcDtcbiAgICBsZXQgbmVhcmVzdFhJbmRleCA9IDA7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB4Lmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBjdXJyZW50SW50ZXJ2YWwgPSBNYXRoLmFicyh5W2ldIC0gbWVkWSk7XG4gICAgICBpZiAoY3VycmVudEludGVydmFsIDwgbWF4WUludGVydmFsKSB7XG4gICAgICAgIG1heFlJbnRlcnZhbCA9IGN1cnJlbnRJbnRlcnZhbDtcbiAgICAgICAgbmVhcmVzdFhJbmRleCA9IGk7XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IHhBdE1lZFkgPSB4W25lYXJlc3RYSW5kZXhdO1xuICAgIGNvbnN0IHNsb3BlID0geVswXSA+IHlbeS5sZW5ndGggLSAxXSA/IDEgOiAtMTtcblxuICAgIC8vIHBhcmFtcyBhcmU6IFttYXgsIHRhbiwgSUM1MCwgbWluXVxuICAgIHJldHVybiBbZGF0YUJvdW5kcy5ib3R0b20sIHNsb3BlLCB4QXRNZWRZLCBkYXRhQm91bmRzLnRvcF07XG4gIH1cbn1cblxuLyoqIENsYXNzIHRoYXQgaW1wbGVtZW50cyB1c2VyIEpTIGZ1bmN0aW9ucyAqL1xuZXhwb3J0IGNsYXNzIEpzRnVuY3Rpb24gZXh0ZW5kcyBGaXRGdW5jdGlvbiB7XG4gIHByaXZhdGUgX25hbWU6IHN0cmluZztcbiAgcHJpdmF0ZSBfcGFyYW1ldGVyTmFtZXM6IHN0cmluZ1tdO1xuXG4gIGNvbnN0cnVjdG9yKG5hbWU6IHN0cmluZywgeUZ1bmM6IChwYXJhbXM6IG51bWJlcltdLCB4OiBudW1iZXIpID0+IG51bWJlcixcbiAgICBnZXRJbml0UGFyYW1zRnVuYzogKHg6IG51bWJlcltdLCB5OiBudW1iZXJbXSkgPT4gbnVtYmVyW10sIHBhcmFtZXRlck5hbWVzOiBzdHJpbmdbXSkge1xuICAgIHN1cGVyKCk7XG5cbiAgICB0aGlzLl9uYW1lID0gbmFtZTtcbiAgICB0aGlzLl9wYXJhbWV0ZXJOYW1lcyA9IHBhcmFtZXRlck5hbWVzO1xuXG4gICAgdGhpcy55ID0geUZ1bmM7XG4gICAgdGhpcy5nZXRJbml0aWFsUGFyYW1ldGVycyA9IGdldEluaXRQYXJhbXNGdW5jO1xuICB9XG5cbiAgZ2V0IG5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fbmFtZTtcbiAgfVxuXG4gIGdldCBwYXJhbWV0ZXJOYW1lcygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIHRoaXMuX3BhcmFtZXRlck5hbWVzO1xuICB9XG5cbiAgeShwYXJhbXM6IG51bWJlcltdLCB4OiBudW1iZXIpOiBudW1iZXIge1xuICAgIHRocm93IG5ldyBFcnJvcignTm90IGltcGxlbWVudGVkJyk7XG4gIH1cblxuICBnZXRJbml0aWFsUGFyYW1ldGVycyh4OiBudW1iZXJbXSwgeTogbnVtYmVyW10pOiBudW1iZXJbXSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdOb3QgaW1wbGVtZW50ZWQnKTtcbiAgfVxufVxuXG4vLyBPYmplY3Qgd2l0aCBmaXQgZnVuY3Rpb25zXG5leHBvcnQgY29uc3QgZml0RnVuY3Rpb25zOiB7W2luZGV4OiBzdHJpbmddOiBGaXRGdW5jdGlvbn0gPSB7XG4gICdsaW5lYXInOiBuZXcgTGluZWFyRnVuY3Rpb24oKSxcbiAgJ3NpZ21vaWQnOiBuZXcgU2lnbW9pZEZ1bmN0aW9uKCksXG59O1xuXG5leHBvcnQgaW50ZXJmYWNlIElGaXRPcHRpb25zIHtcbiAgZXJyb3JNb2RlbDogRml0RXJyb3JNb2RlbDtcbiAgY29uZmlkZW5jZUxldmVsOiBudW1iZXI7XG4gIHN0YXRpc3RpY3M6IGJvb2xlYW47XG59XG5cblxuZnVuY3Rpb24gY3JlYXRlT2JqZWN0aXZlRnVuY3Rpb24oZXJyb3JNb2RlbDogRml0RXJyb3JNb2RlbCk6IE9iamVjdGl2ZUZ1bmN0aW9uIHtcbiAgbGV0IG9mOiBPYmplY3RpdmVGdW5jdGlvbjtcblxuICBzd2l0Y2ggKGVycm9yTW9kZWwpIHtcbiAgY2FzZSBGaXRFcnJvck1vZGVsLkNvbnN0YW50OlxuICAgIG9mID0gb2JqZWN0aXZlTm9ybWFsQ29uc3RhbnQ7XG4gICAgYnJlYWs7XG4gIGNhc2UgRml0RXJyb3JNb2RlbC5Qcm9wb3J0aW9uYWw6XG4gICAgb2YgPSBvYmplY3RpdmVOb3JtYWxQcm9wb3J0aW9uYWw7XG4gICAgYnJlYWs7XG4gIGRlZmF1bHQ6XG4gICAgb2YgPSBvYmplY3RpdmVOb3JtYWxDb25zdGFudDtcbiAgICBicmVhaztcbiAgfVxuXG4gIHJldHVybiBvZjtcbn1cblxuZnVuY3Rpb24gY3JlYXRlT3B0aW1pemFibGUoZGF0YToge3g6IG51bWJlcltdLCB5OiBudW1iZXJbXX0sIGN1cnZlRnVuY3Rpb246IChwYXJhbXM6IG51bWJlcltdLCB4OiBudW1iZXIpID0+IG51bWJlcixcbiAgb2Y6IE9iamVjdGl2ZUZ1bmN0aW9uLCBmaXhlZDogbnVtYmVyW10pOiBPcHRpbWl6YWJsZSB7XG4gIHJldHVybiB7XG4gICAgZ2V0VmFsdWU6IChwYXJhbWV0ZXJzOiBudW1iZXJbXSkgPT4ge1xuICAgICAgcmV0dXJuIG9mKGN1cnZlRnVuY3Rpb24sIGRhdGEsIHBhcmFtZXRlcnMpLnZhbHVlO1xuICAgIH0sXG4gICAgZ2V0R3JhZGllbnQ6IChwYXJhbWV0ZXJzOiBudW1iZXJbXSwgZ3JhZGllbnQ6IG51bWJlcltdKSA9PiB7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBhcmFtZXRlcnMubGVuZ3RoOyBpKyspXG4gICAgICAgIGdyYWRpZW50W2ldID0gZml4ZWQuaW5jbHVkZXMoaSkgPyAwIDogZ2V0T2JqZWN0aXZlRGVyaXZhdGl2ZShvZiwgY3VydmVGdW5jdGlvbiwgZGF0YSwgcGFyYW1ldGVycywgaSk7XG5cbiAgICAgIHJldHVybiBncmFkaWVudDtcbiAgICB9LFxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0T3JDcmVhdGVGaXRGdW5jdGlvbihzZXJpZXNGaXRGdW5jOiBzdHJpbmcgfCBJRml0RnVuY3Rpb25EZXNjcmlwdGlvbik6IEZpdEZ1bmN0aW9uIHtcbiAgaWYgKHR5cGVvZiBzZXJpZXNGaXRGdW5jID09PSAnc3RyaW5nJylcbiAgICByZXR1cm4gZml0RnVuY3Rpb25zW3Nlcmllc0ZpdEZ1bmNdO1xuICBlbHNlIGlmICghZml0RnVuY3Rpb25zW3Nlcmllc0ZpdEZ1bmMubmFtZV0pIHtcbiAgICBjb25zdCBuYW1lID0gc2VyaWVzRml0RnVuYy5uYW1lO1xuICAgIGNvbnN0IHBhcmFtTmFtZXMgPSBzZXJpZXNGaXRGdW5jLnBhcmFtZXRlck5hbWVzO1xuICAgIGNvbnN0IGZpdEZ1bmN0aW9uUGFydHMgPSBzZXJpZXNGaXRGdW5jLmZ1bmN0aW9uLnNwbGl0KCc9PicpLm1hcCgoZWxlbSkgPT4gZWxlbS50cmltKCkpO1xuICAgIGNvbnN0IGdldEluaXRQYXJhbXNQYXJ0cyA9IHNlcmllc0ZpdEZ1bmMuZ2V0SW5pdGlhbFBhcmFtZXRlcnMuc3BsaXQoJz0+JykubWFwKChlbGVtKSA9PiBlbGVtLnRyaW0oKSk7XG4gICAgY29uc3QgZml0RnVuY3Rpb24gPSBuZXcgRnVuY3Rpb24oZml0RnVuY3Rpb25QYXJ0c1swXS5zbGljZSgxLCBmaXRGdW5jdGlvblBhcnRzWzBdLmxlbmd0aCAtIDEpLFxuICAgICAgYCR7Zml0RnVuY3Rpb25QYXJ0c1sxXS5pbmNsdWRlcygnOycpID8gJycgOiAncmV0dXJuICd9JHtmaXRGdW5jdGlvblBhcnRzWzFdfWApO1xuICAgIGNvbnN0IGdldEluaXRQYXJhbXNGdW5jID0gbmV3IEZ1bmN0aW9uKGdldEluaXRQYXJhbXNQYXJ0c1swXS5zbGljZSgxLCBnZXRJbml0UGFyYW1zUGFydHNbMF0ubGVuZ3RoIC0gMSksXG4gICAgICBgcmV0dXJuICR7Z2V0SW5pdFBhcmFtc1BhcnRzWzFdfWApO1xuICAgIGNvbnN0IGZpdEZ1bmMgPSBuZXcgSnNGdW5jdGlvbihuYW1lLCAoZml0RnVuY3Rpb24gYXMgKHBhcmFtczogbnVtYmVyW10sIHg6IG51bWJlcikgPT4gbnVtYmVyKSxcbiAgICAgIChnZXRJbml0UGFyYW1zRnVuYyBhcyAoeDogbnVtYmVyW10sIHk6IG51bWJlcltdKSA9PiBudW1iZXJbXSksIHBhcmFtTmFtZXMpO1xuICAgIGZpdEZ1bmN0aW9uc1tuYW1lXSA9IGZpdEZ1bmM7XG4gIH1cblxuICByZXR1cm4gZml0RnVuY3Rpb25zW3Nlcmllc0ZpdEZ1bmMubmFtZV07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmaXREYXRhKGRhdGE6IHt4OiBudW1iZXJbXSwgeTogbnVtYmVyW119LCBmaXRGdW5jdGlvbjogRml0RnVuY3Rpb24sIGVycm9yTW9kZWw6IEZpdEVycm9yTW9kZWwsXG4gIHBhcmFtZXRlckJvdW5kcz86IEZpdFBhcmFtQm91bmRzW10pOiBGaXRDdXJ2ZSB7XG4gIGNvbnN0IGN1cnZlRnVuY3Rpb24gPSBmaXRGdW5jdGlvbi55O1xuICBjb25zdCBwYXJhbVZhbHVlcyA9IGZpdEZ1bmN0aW9uLmdldEluaXRpYWxQYXJhbWV0ZXJzKGRhdGEueCwgZGF0YS55KTtcblxuICBjb25zdCBvZiA9IGNyZWF0ZU9iamVjdGl2ZUZ1bmN0aW9uKGVycm9yTW9kZWwpO1xuICBjb25zdCBmaXhlZDogbnVtYmVyW10gPSBbXTtcbiAgbGV0IG92ZXJMaW1pdHMgPSB0cnVlO1xuXG4gIHdoaWxlIChvdmVyTGltaXRzKSB7XG4gICAgY29uc3Qgb3B0aW1pemFibGUgPSBjcmVhdGVPcHRpbWl6YWJsZShkYXRhLCBjdXJ2ZUZ1bmN0aW9uLCBvZiwgZml4ZWQpO1xuICAgIGxpbWl0ZWRNZW1vcnlCRkdTKG9wdGltaXphYmxlLCBwYXJhbVZhbHVlcyk7XG4gICAgbGltaXRlZE1lbW9yeUJGR1Mob3B0aW1pemFibGUsIHBhcmFtVmFsdWVzKTtcblxuICAgIG92ZXJMaW1pdHMgPSBmYWxzZTtcbiAgICBpZiAoIXBhcmFtZXRlckJvdW5kcylcbiAgICAgIGJyZWFrO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwYXJhbWV0ZXJCb3VuZHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChwYXJhbWV0ZXJCb3VuZHNbaV0/Lm1heCAhPT0gdW5kZWZpbmVkICYmIHBhcmFtVmFsdWVzW2ldID4gcGFyYW1ldGVyQm91bmRzW2ldLm1heCEpIHtcbiAgICAgICAgb3ZlckxpbWl0cyA9IHRydWU7XG4gICAgICAgIGZpeGVkLnB1c2goaSk7XG4gICAgICAgIHBhcmFtVmFsdWVzW2ldID0gcGFyYW1ldGVyQm91bmRzW2ldLm1heCE7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgaWYgKHBhcmFtZXRlckJvdW5kc1tpXT8ubWluICE9PSB1bmRlZmluZWQgJiYgcGFyYW1WYWx1ZXNbaV0gPCBwYXJhbWV0ZXJCb3VuZHNbaV0ubWluISkge1xuICAgICAgICBvdmVyTGltaXRzID0gdHJ1ZTtcbiAgICAgICAgZml4ZWQucHVzaChpKTtcbiAgICAgICAgcGFyYW1WYWx1ZXNbaV0gPSBwYXJhbWV0ZXJCb3VuZHNbaV0ubWluITtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY29uc3QgZml0dGVkQ3VydmUgPSBnZXRGaXR0ZWRDdXJ2ZShjdXJ2ZUZ1bmN0aW9uLCBwYXJhbVZhbHVlcyk7XG5cbiAgcmV0dXJuIHtcbiAgICBmaXR0ZWRDdXJ2ZTogZml0dGVkQ3VydmUsXG4gICAgcGFyYW1ldGVyczogcGFyYW1WYWx1ZXMsXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRGaXR0ZWRDdXJ2ZShjdXJ2ZUZ1bmN0aW9uOiAocGFyYW1zOiBudW1iZXJbXSwgeDogbnVtYmVyKSA9PiBudW1iZXIsIHBhcmFtVmFsdWVzOiBudW1iZXJbXSk6XG4gKHg6IG51bWJlcikgPT4gbnVtYmVyIHtcbiAgcmV0dXJuICh4OiBudW1iZXIpID0+IHtcbiAgICByZXR1cm4gY3VydmVGdW5jdGlvbihwYXJhbVZhbHVlcywgeCk7XG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRDdXJ2ZUNvbmZpZGVuY2VJbnRlcnZhbHMoZGF0YToge3g6IG51bWJlcltdLCB5OiBudW1iZXJbXX0sIHBhcmFtVmFsdWVzOiBudW1iZXJbXSxcbiAgY3VydmVGdW5jdGlvbjogKHBhcmFtczogbnVtYmVyW10sIHg6IG51bWJlcikgPT4gbnVtYmVyLCBjb25maWRlbmNlTGV2ZWw6IG51bWJlciA9IDAuMDUsIGVycm9yTW9kZWw6IEZpdEVycm9yTW9kZWwpOlxuICBGaXRDb25maWRlbmNlSW50ZXJ2YWxzIHtcbiAgY29uc3Qgb2YgPSBjcmVhdGVPYmplY3RpdmVGdW5jdGlvbihlcnJvck1vZGVsKTtcblxuICBjb25zdCBlcnJvciA9IGVycm9yTW9kZWwgPT09IEZpdEVycm9yTW9kZWwuUHJvcG9ydGlvbmFsID9cbiAgICBvZihjdXJ2ZUZ1bmN0aW9uLCBkYXRhLCBwYXJhbVZhbHVlcykubXVsdCA6XG4gICAgb2YoY3VydmVGdW5jdGlvbiwgZGF0YSwgcGFyYW1WYWx1ZXMpLmNvbnN0O1xuXG4gIGNvbnN0IHF1YW50aWxlID0galN0YXQubm9ybWFsLmludigxIC0gY29uZmlkZW5jZUxldmVsLzIsIDAsIDEpO1xuXG4gIGNvbnN0IHRvcCA9ICh4OiBudW1iZXIpID0+IHtcbiAgICBjb25zdCB2YWx1ZSA9IGN1cnZlRnVuY3Rpb24ocGFyYW1WYWx1ZXMsIHgpO1xuICAgIGlmIChlcnJvck1vZGVsID09PSBGaXRFcnJvck1vZGVsLkNvbnN0YW50KVxuICAgICAgcmV0dXJuIHZhbHVlICsgcXVhbnRpbGUgKiBlcnJvcjtcbiAgICBlbHNlXG4gICAgICByZXR1cm4gdmFsdWUgKyBxdWFudGlsZSAqIE1hdGguYWJzKHZhbHVlKSAqIGVycm9yO1xuICB9O1xuXG4gIGNvbnN0IGJvdHRvbSA9ICh4OiBudW1iZXIpID0+IHtcbiAgICBjb25zdCB2YWx1ZSA9IGN1cnZlRnVuY3Rpb24ocGFyYW1WYWx1ZXMsIHgpO1xuICAgIGlmIChlcnJvck1vZGVsID09PSBGaXRFcnJvck1vZGVsLkNvbnN0YW50KVxuICAgICAgcmV0dXJuIHZhbHVlIC0gcXVhbnRpbGUgKiBlcnJvcjtcbiAgICBlbHNlXG4gICAgICByZXR1cm4gdmFsdWUgLSBxdWFudGlsZSAqIE1hdGguYWJzKHZhbHVlKSAqIGVycm9yO1xuICB9O1xuXG4gIHJldHVybiB7Y29uZmlkZW5jZVRvcDogdG9wLCBjb25maWRlbmNlQm90dG9tOiBib3R0b219O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0U3RhdGlzdGljcyhkYXRhOiB7eDogbnVtYmVyW10sIHk6IG51bWJlcltdfSwgcGFyYW1WYWx1ZXM6IG51bWJlcltdLFxuICBjdXJ2ZUZ1bmN0aW9uOiAocGFyYW1zOiBudW1iZXJbXSwgeDogbnVtYmVyKSA9PiBudW1iZXIsIHN0YXRpc3RpY3M6IGJvb2xlYW4gPSB0cnVlKTogRml0U3RhdGlzdGljcyB7XG4gIGNvbnN0IGZpdHRlZEN1cnZlID0gZ2V0Rml0dGVkQ3VydmUoY3VydmVGdW5jdGlvbiwgcGFyYW1WYWx1ZXMpO1xuXG4gIHJldHVybiB7XG4gICAgclNxdWFyZWQ6IHN0YXRpc3RpY3MgPyBnZXREZXRDb2VmZihmaXR0ZWRDdXJ2ZSwgZGF0YSkgOiB1bmRlZmluZWQsXG4gICAgYXVjOiBzdGF0aXN0aWNzID8gZ2V0QXVjKGZpdHRlZEN1cnZlLCBkYXRhKSA6IHVuZGVmaW5lZCxcbiAgICBpbnRlcmNlcHRYOiBwYXJhbVZhbHVlc1syXSxcbiAgICBpbnRlcmNlcHRZOiBmaXR0ZWRDdXJ2ZShwYXJhbVZhbHVlc1syXSksXG4gICAgc2xvcGU6IHBhcmFtVmFsdWVzWzFdLFxuICAgIHRvcDogcGFyYW1WYWx1ZXNbMF0sXG4gICAgYm90dG9tOiBwYXJhbVZhbHVlc1szXSxcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEludmVydGVkRnVuY3Rpb25zKGRhdGE6IHt4OiBudW1iZXJbXSwgeTogbnVtYmVyW119LCBwYXJhbVZhbHVlczogbnVtYmVyW10sXG4gIGNvbmZpZGVuY2VMZXZlbDogbnVtYmVyID0gMC4wNSwgc3RhdGlzdGljczogYm9vbGVhbiA9IHRydWUpOiBGaXRJbnZlcnRlZEZ1bmN0aW9ucyB8IG51bGwge1xuICBjb25zdCBzdHVkZW50USA9IGpTdGF0LnN0dWRlbnR0LmludigxIC0gY29uZmlkZW5jZUxldmVsIC8gMiwgZGF0YS54Lmxlbmd0aCAtIHBhcmFtVmFsdWVzLmxlbmd0aCk7XG5cbiAgbGV0IGludjogKHk6IG51bWJlcikgPT4gbnVtYmVyID0gKHk6IG51bWJlcikgPT4ge1xuICAgIHJldHVybiAwO1xuICB9O1xuICBsZXQgaW52VG9wOiAoeTogbnVtYmVyKSA9PiBudW1iZXIgPSAoeTogbnVtYmVyKSA9PiB7XG4gICAgcmV0dXJuIDA7XG4gIH07XG4gIGxldCBpbnZCb3R0b206ICh5OiBudW1iZXIpID0+IG51bWJlciA9ICh5OiBudW1iZXIpID0+IHtcbiAgICByZXR1cm4gMDtcbiAgfTtcblxuICBpZiAoc3RhdGlzdGljcykge1xuICAgIGludiA9ICh5OiBudW1iZXIpID0+IHtcbiAgICAgIC8vc2hvdWxkIGNoZWNrIGlmIG1vcmUgdGhhbiBib3R0b20gYW5kIGxlc3MgdGhhbiB0b3BcbiAgICAgIHJldHVybiBwYXJhbVZhbHVlc1syXSAvIE1hdGgucG93KChwYXJhbVZhbHVlc1swXSAtIHkpIC8gKHkgLSBwYXJhbVZhbHVlc1szXSksIDEgLyBwYXJhbVZhbHVlc1sxXSk7XG4gICAgfTtcblxuICAgIGNvbnN0IGVycm9yID0gZ2V0SW52RXJyb3IoaW52LCBkYXRhKTtcblxuICAgIGludlRvcCA9ICh5OiBudW1iZXIpID0+IHtcbiAgICAgIGNvbnN0IHZhbHVlID0gaW52KHkpO1xuICAgICAgcmV0dXJuIHZhbHVlICsgc3R1ZGVudFEgKiBlcnJvciAvIE1hdGguc3FydChkYXRhLnkubGVuZ3RoKTtcbiAgICB9O1xuXG4gICAgaW52Qm90dG9tID0gKHk6IG51bWJlcikgPT4ge1xuICAgICAgY29uc3QgdmFsdWUgPSBpbnYoeSk7XG4gICAgICByZXR1cm4gdmFsdWUgLSBzdHVkZW50USAqIGVycm9yIC8gTWF0aC5zcXJ0KGRhdGEueS5sZW5ndGgpO1xuICAgIH07XG5cbiAgICByZXR1cm4ge1xuICAgICAgaW52ZXJ0ZWQ6IGludixcbiAgICAgIGludmVydGVkVG9wOiBpbnZUb3AsXG4gICAgICBpbnZlcnRlZEJvdHRvbTogaW52Qm90dG9tLFxuICAgIH07XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNpZ21vaWQocGFyYW1zOiBudW1iZXJbXSwgeDogbnVtYmVyKTogbnVtYmVyIHtcbiAgY29uc3QgQSA9IHBhcmFtc1swXTtcbiAgY29uc3QgQiA9IHBhcmFtc1sxXTtcbiAgY29uc3QgQyA9IHBhcmFtc1syXTtcbiAgY29uc3QgRCA9IHBhcmFtc1szXTtcbiAgcmV0dXJuIChEICsgKEEgLSBEKSAvICgxICsgTWF0aC5wb3coMTAsICh4IC0gQykgKiBCKSkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0QXVjKGZpdHRlZEN1cnZlOiAoeDogbnVtYmVyKSA9PiBudW1iZXIsIGRhdGE6IHt4OiBudW1iZXJbXSwgeTogbnVtYmVyW119KTogbnVtYmVyIHtcbiAgbGV0IGF1YyA9IDA7XG5cbiAgY29uc3QgbWluID0gTWF0aC5taW4oLi4uZGF0YS54KTtcbiAgY29uc3QgbWF4ID0gTWF0aC5tYXgoLi4uZGF0YS54KTtcbiAgY29uc3QgaW50ZWdyYXRpb25TdGVwID0gKG1heCAtIG1pbikgLyAxMDAwO1xuXG4gIGZvciAobGV0IHggPSBtaW47IHggPCBtYXg7IHgrPSBpbnRlZ3JhdGlvblN0ZXApXG4gICAgYXVjICs9IGludGVncmF0aW9uU3RlcCAqIGZpdHRlZEN1cnZlKHgpO1xuXG4gIHJldHVybiBhdWM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXREZXRDb2VmZihmaXR0ZWRDdXJ2ZTogKHg6IG51bWJlcikgPT4gbnVtYmVyLCBkYXRhOiB7eDogbnVtYmVyW10sIHk6IG51bWJlcltdfSk6IG51bWJlciB7XG4gIGxldCBzc1JlcyA9IDA7XG4gIGxldCBzc1RvdCA9IDA7XG5cbiAgY29uc3QgeU1lYW4gPSBqU3RhdC5tZWFuKGRhdGEueSk7XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBkYXRhLngubGVuZ3RoOyBpKyspIHtcbiAgICBzc1JlcyArPSBNYXRoLnBvdyhkYXRhLnlbaV0gLSBmaXR0ZWRDdXJ2ZShkYXRhLnhbaV0pLCAyKTtcbiAgICBzc1RvdCArPSBNYXRoLnBvdyhkYXRhLnlbaV0gLSB5TWVhbiwgMik7XG4gIH1cblxuICByZXR1cm4gMSAtIHNzUmVzIC8gc3NUb3Q7XG59XG5cbmZ1bmN0aW9uIGdldEludkVycm9yKHRhcmdldEZ1bmM6ICh5OiBudW1iZXIpID0+IG51bWJlciwgZGF0YToge3k6IG51bWJlcltdLCB4OiBudW1iZXJbXX0pOiBudW1iZXIge1xuICBsZXQgc2lnbWEgPSAwO1xuICBsZXQgc2lnbWFTcSA9IDA7XG5cbiAgY29uc3QgcmVzaWR1ZXNTcXVhcmVzID0gbmV3IEZsb2F0MzJBcnJheShkYXRhLnkubGVuZ3RoKTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBkYXRhLnkubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCBvYnMgPSBkYXRhLnhbaV07XG4gICAgY29uc3QgcHJlZCA9IHRhcmdldEZ1bmMoZGF0YS55W2ldKTtcbiAgICByZXNpZHVlc1NxdWFyZXNbaV0gPSBNYXRoLnBvdyhvYnMgLSBwcmVkLCAyKTtcbiAgfVxuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgcmVzaWR1ZXNTcXVhcmVzLmxlbmd0aDsgaSsrKVxuICAgIHNpZ21hU3EgKz0gcmVzaWR1ZXNTcXVhcmVzW2ldO1xuXG4gIHNpZ21hU3EgLz0gcmVzaWR1ZXNTcXVhcmVzLmxlbmd0aDtcbiAgc2lnbWEgPSBNYXRoLnNxcnQoc2lnbWFTcSk7XG5cbiAgcmV0dXJuIHNpZ21hO1xufVxuXG5mdW5jdGlvbiBnZXRPYmplY3RpdmVEZXJpdmF0aXZlKG9mOiBPYmplY3RpdmVGdW5jdGlvbiwgY3VydmVGdW5jdGlvbjogKHBhcmFtczogbnVtYmVyW10sIHg6IG51bWJlcikgPT4gbnVtYmVyLFxuICBkYXRhOiB7eDogbnVtYmVyW10sIHk6IG51bWJlcltdfSwgcGFyYW1zOiBudW1iZXJbXSwgc2VsZWN0ZWRQYXJhbTogbnVtYmVyKTogbnVtYmVyIHtcbiAgY29uc3Qgc3RlcCA9IChwYXJhbXNbc2VsZWN0ZWRQYXJhbV0gKiAwLjAwMDEpID09PSAwID8gMC4wMDEgOiAocGFyYW1zW3NlbGVjdGVkUGFyYW1dICogMC4wMDAxKTtcbiAgY29uc3QgcGFyYW1zVG9wOiBudW1iZXJbXSA9IFtdO1xuICBjb25zdCBwYXJhbXNCb3R0b206IG51bWJlcltdID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgcGFyYW1zLmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKGkgPT09IHNlbGVjdGVkUGFyYW0pIHtcbiAgICAgIHBhcmFtc1RvcC5wdXNoKHBhcmFtc1tpXSArIHN0ZXApO1xuICAgICAgcGFyYW1zQm90dG9tLnB1c2gocGFyYW1zW2ldIC0gc3RlcCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHBhcmFtc1RvcC5wdXNoKHBhcmFtc1tpXSk7XG4gICAgICBwYXJhbXNCb3R0b20ucHVzaChwYXJhbXNbaV0pO1xuICAgIH1cbiAgfVxuICBjb25zdCBkcnZUb3AgPSBvZihjdXJ2ZUZ1bmN0aW9uLCBkYXRhLCBwYXJhbXNUb3ApLnZhbHVlO1xuICBjb25zdCBkcnZCb3R0b20gPSBvZihjdXJ2ZUZ1bmN0aW9uLCBkYXRhLCBwYXJhbXNCb3R0b20pLnZhbHVlO1xuXG4gIHJldHVybiAoZHJ2VG9wIC0gZHJ2Qm90dG9tKSAvICgyICogc3RlcCk7XG59XG5cbmZ1bmN0aW9uIG9iamVjdGl2ZU5vcm1hbENvbnN0YW50KHRhcmdldEZ1bmM6IChwYXJhbXM6IG51bWJlcltdLCB4OiBudW1iZXIpID0+IG51bWJlcixcbiAgZGF0YToge3k6IG51bWJlcltdLCB4OiBudW1iZXJbXX0sIHBhcmFtczogbnVtYmVyW10pOiBMaWtlbGlob29kIHtcbiAgLy9hc3N1cmUgb2JzZXJ2ZWQgYW5kIGFyZ3Mgc2FtZSBsZW5ndGhcbiAgY29uc3QgcGkgPSBNYXRoLlBJO1xuICBsZXQgc2lnbWEgPSAwO1xuICBsZXQgc2lnbWFTcSA9IDA7XG4gIGxldCBsaWtlbGlob29kID0gMDtcblxuICBjb25zdCByZXNpZHVlc1NxdWFyZXMgPSBuZXcgRmxvYXQzMkFycmF5KGRhdGEueC5sZW5ndGgpO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGRhdGEueC5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IG9icyA9IGRhdGEueVtpXTtcbiAgICBjb25zdCBwcmVkID0gdGFyZ2V0RnVuYyhwYXJhbXMsIGRhdGEueFtpXSk7XG4gICAgcmVzaWR1ZXNTcXVhcmVzW2ldID0gTWF0aC5wb3cob2JzIC0gcHJlZCwgMik7XG4gIH1cblxuICBmb3IgKGxldCBpID0gMDsgaSA8IHJlc2lkdWVzU3F1YXJlcy5sZW5ndGg7IGkrKylcbiAgICBzaWdtYVNxICs9IHJlc2lkdWVzU3F1YXJlc1tpXTtcblxuICBzaWdtYVNxIC89IHJlc2lkdWVzU3F1YXJlcy5sZW5ndGg7XG4gIHNpZ21hID0gTWF0aC5zcXJ0KHNpZ21hU3EpO1xuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgcmVzaWR1ZXNTcXVhcmVzLmxlbmd0aDsgaSsrKVxuICAgIGxpa2VsaWhvb2QgKz0gcmVzaWR1ZXNTcXVhcmVzW2ldIC8gc2lnbWFTcSArIE1hdGgubG9nKDIgKiBwaSAqIHNpZ21hU3EpO1xuXG4gIHJldHVybiB7dmFsdWU6IC1saWtlbGlob29kLCBjb25zdDogc2lnbWEsIG11bHQ6IDB9O1xufVxuXG5mdW5jdGlvbiBvYmplY3RpdmVOb3JtYWxQcm9wb3J0aW9uYWwodGFyZ2V0RnVuYzogKHBhcmFtczogbnVtYmVyW10sIHg6IG51bWJlcikgPT4gbnVtYmVyLFxuICBkYXRhOiB7eTogbnVtYmVyW10sIHg6IG51bWJlcltdfSwgcGFyYW1zOiBudW1iZXJbXSk6IExpa2VsaWhvb2Qge1xuICAvL2Fzc3VyZSBvYnNlcnZlZCBhbmQgYXJncyBzYW1lIGxlbmd0aFxuICBjb25zdCBwaSA9IE1hdGguUEk7XG4gIGxldCBzaWdtYSA9IDA7XG4gIGxldCBzaWdtYVNxID0gMDtcbiAgbGV0IGxpa2VsaWhvb2QgPSAwO1xuXG4gIGNvbnN0IHJlc2lkdWVzU3F1YXJlcyA9IG5ldyBGbG9hdDMyQXJyYXkoZGF0YS54Lmxlbmd0aCk7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgZGF0YS54Lmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3Qgb2JzID0gZGF0YS55W2ldO1xuICAgIGNvbnN0IHByZWQgPSB0YXJnZXRGdW5jKHBhcmFtcywgZGF0YS54W2ldKTtcbiAgICByZXNpZHVlc1NxdWFyZXNbaV0gPSBNYXRoLnBvdyhvYnMgLSBwcmVkLCAyKTtcbiAgfVxuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgcmVzaWR1ZXNTcXVhcmVzLmxlbmd0aDsgaSsrKVxuICAgIHNpZ21hU3EgKz0gcmVzaWR1ZXNTcXVhcmVzW2ldO1xuXG4gIHNpZ21hU3EgLz0gcmVzaWR1ZXNTcXVhcmVzLmxlbmd0aDtcbiAgc2lnbWEgPSBNYXRoLnNxcnQoc2lnbWFTcSk7XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCByZXNpZHVlc1NxdWFyZXMubGVuZ3RoOyBpKyspXG4gICAgbGlrZWxpaG9vZCArPSByZXNpZHVlc1NxdWFyZXNbaV0gLyBzaWdtYVNxICsgTWF0aC5sb2coMiAqIHBpICogc2lnbWFTcSk7XG5cbiAgcmV0dXJuIHt2YWx1ZTogLWxpa2VsaWhvb2QsIGNvbnN0OiBzaWdtYSwgbXVsdDogMH07XG59XG4iXX0=
426
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZml0LWN1cnZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiZml0LWN1cnZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLDRCQUE0QjtBQUM1QixvQ0FBb0M7QUFDcEMsT0FBTyxLQUFLLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN0QyxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0sMkJBQTJCLENBQUM7QUFDbkQsT0FBTyxFQUFDLElBQUksRUFBQyxNQUFNLHdCQUF3QixDQUFDO0FBRTVDLE9BQU8sRUFBQyxpQkFBaUIsRUFBQyxNQUFNLG1CQUFtQixDQUFDO0FBQ3BELHNCQUFzQjtBQUN0QixPQUFPLEtBQUssS0FBSyxNQUFNLE9BQU8sQ0FBQztBQWlCL0IsTUFBTSxDQUFDLE1BQU0sYUFBYSxHQUFHO0lBQzNCLFFBQVEsRUFBRSxVQUFVO0lBQ3BCLFlBQVksRUFBRSxjQUFjO0NBQzdCLENBQUM7QUEwQ0Y7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0VBb0JFO0FBRUYsTUFBTSxDQUFDLE1BQU0sWUFBWSxHQUFHLEtBQUssQ0FBQztBQUNsQyxNQUFNLENBQUMsTUFBTSxhQUFhLEdBQUcsS0FBSyxDQUFDO0FBQ25DLE1BQU0sQ0FBQyxNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUM7QUFFOUIsTUFBTSxDQUFDLE1BQU0sZ0NBQWdDLEdBQUcsc0JBQXNCLENBQUM7QUFDdkUsTUFBTSxDQUFDLE1BQU0sOEJBQThCLEdBQUcsdUJBQXVCLENBQUM7QUFFdEUsTUFBTSxDQUFDLE1BQU0sZ0NBQWdDLEdBQUc7SUFDOUMsR0FBRyxFQUFFLEtBQUs7SUFDVixNQUFNLEVBQUUsUUFBUTtDQUNqQixDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sU0FBUyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7QUE0RGxDLDREQUE0RDtBQUM1RCxNQUFNLE9BQU8sWUFBWTtJQUF6QjtRQUNFLGlCQUFZLEdBQXFCLEVBQUUsQ0FBQztRQUNwQyxrQkFBYSxHQUFzQixFQUFFLENB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RWhDLE9BQU8sSUFBSSxlQUFlLENBQUMsTUFBTSxDQUFDO0lBQ2xDLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBRTNCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxlQUFlLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRTtRQUM3QyxVQUFVLElBQUksZUFBZSxDQUFDLENBQUMsQ0FBQyxHQUFHLE9BQU8sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsT0FBTyxDQUFDLENBQUM7SUFFMUUsT0FBTyxFQUFDLEtBQUssRUFBRSxDQUFDLFVBQVUsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDLEVBQUMsQ0FBQztBQUNyRCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbm8tbXVsdGktc3BhY2VzICovXG5pbXBvcnQgKiBhcyBERyBmcm9tICdkYXRhZ3Jvay1hcGkvZGcnO1xuaW1wb3J0IHtQcm9wZXJ0eX0gZnJvbSAnZGF0YWdyb2stYXBpL3NyYy9lbnRpdGllcyc7XG5pbXBvcnQge1RZUEV9IGZyb20gJ2RhdGFncm9rLWFwaS9zcmMvY29uc3QnO1xuXG5pbXBvcnQge2xpbWl0ZWRNZW1vcnlCRkdTfSBmcm9tICcuLi8uLi9sYmZncy9sYmZncyc7XG4vL0B0cy1pZ25vcmU6IG5vIHR5cGVzXG5pbXBvcnQgKiBhcyBqU3RhdCBmcm9tICdqc3RhdCc7XG5cblxudHlwZSBPcHRpbWl6YWJsZSA9IHtcbiAgZ2V0VmFsdWU6IChwYXJhbWV0ZXJzOiBudW1iZXJbXSkgPT4gbnVtYmVyLFxuICBnZXRHcmFkaWVudDogKHBhcmFtZXRlcnM6IG51bWJlcltdLCBncmFkaWVudDogbnVtYmVyW10pID0+IG51bWJlcltdLFxufVxuXG50eXBlIExpa2VsaWhvb2QgPSB7XG4gIHZhbHVlOiBudW1iZXIsXG4gIGNvbnN0OiBudW1iZXIsXG4gIG11bHQ6IG51bWJlclxufTtcblxudHlwZSBPYmplY3RpdmVGdW5jdGlvbiA9ICh0YXJnZXRGdW5jOiAocGFyYW1zOiBudW1iZXJbXSwgeDogbnVtYmVyKSA9PiBudW1iZXIsXG4gIGRhdGE6IHt4OiBudW1iZXJbXSwgeTogbnVtYmVyW119LCBwYXJhbXM6IG51bWJlcltdKSA9PiBMaWtlbGlob29kO1xuXG5leHBvcnQgY29uc3QgRml0RXJyb3JNb2RlbCA9IHtcbiAgQ09OU1RBTlQ6ICdjb25zdGFudCcsXG4gIFBST1BPUlRJT05BTDogJ3Byb3BvcnRpb25hbCcsXG59O1xuXG5leHBvcnQgdHlwZSBGaXRQYXJhbUJvdW5kcyA9IHtcbiAgbWluPzogbnVtYmVyO1xuICBtYXg/OiBudW1iZXI7XG59O1xuXG4vKiogRml0IGZ1bmN0aW9uIGRlc2NyaXB0aW9uLiBBcHBsaWVzIHRvIGN1c3RvbSB1c2VyIGZpdCBmdW5jdGlvbnMuXG4gKiBSZXF1aXJlcyBKUyBhcnJvdyBmdW5jdGlvbnMgZm9yIHRoZSBmaXQgZnVuY3Rpb25zIGFuZCBpbml0aWFsIHBhcmFtZXRlcnMuICovXG5leHBvcnQgaW50ZXJmYWNlIElGaXRGdW5jdGlvbkRlc2NyaXB0aW9uIHtcbiAgbmFtZTogc3RyaW5nO1xuICBmdW5jdGlvbjogc3RyaW5nO1xuICBnZXRJbml0aWFsUGFyYW1ldGVyczogc3RyaW5nO1xuICBwYXJhbWV0ZXJOYW1lczogc3RyaW5nW107XG59XG5cbmV4cG9ydCB0eXBlIEZpdEN1cnZlID0ge1xuICBmaXR0ZWRDdXJ2ZTogKHg6IG51bWJlcikgPT4gbnVtYmVyO1xuICBwYXJhbWV0ZXJzOiBudW1iZXJbXTtcbn07XG5cbmV4cG9ydCB0eXBlIEZpdENvbmZpZGVuY2VJbnRlcnZhbHMgPSB7XG4gIGNvbmZpZGVuY2VUb3A6ICh4OiBudW1iZXIpID0+IG51bWJlcjtcbiAgY29uZmlkZW5jZUJvdHRvbTogKHg6IG51bWJlcikgPT4gbnVtYmVyO1xufTtcblxuZXhwb3J0IHR5cGUgRml0U3RhdGlzdGljcyA9IHtcbiAgclNxdWFyZWQ/OiBudW1iZXIsXG4gIGF1Yz86IG51bWJlcixcbiAgaW50ZXJjZXB0WDogbnVtYmVyLCAvLyBwYXJhbWV0ZXJzWzJdXG4gIGludGVyY2VwdFk6IG51bWJlciwgLy8gZml0dGVkQ3VydmVbcGFyYW1ldGVyc1syXV1cbiAgc2xvcGU6IG51bWJlciwgLy8gcGFyYW1ldGVyc1sxXVxuICB0b3A6IG51bWJlciwgLy8gcGFyYW1ldGVyc1swXVxuICBib3R0b206IG51bWJlciwgLy8gcGFyYW1ldGVyc1szXVxufTtcblxuZXhwb3J0IHR5cGUgRml0SW52ZXJ0ZWRGdW5jdGlvbnMgPSB7XG4gIGludmVydGVkOiAoeTogbnVtYmVyKSA9PiBudW1iZXIsXG4gIGludmVydGVkVG9wOiAoeTogbnVtYmVyKSA9PiBudW1iZXIsXG4gIGludmVydGVkQm90dG9tOiAoeTogbnVtYmVyKSA9PiBudW1iZXIsXG59O1xuXG4vKipcbiAqICBEYXRhZ3JvayBjdXJ2ZSBmaXR0aW5nXG4gKlxuICogLSBGaXR0aW5nOiBjb21wdXRpbmcgcGFyYW1ldGVycyBvZiB0aGUgc3BlY2lmaWVkIGZ1bmN0aW9uIHRvIGJlc3QgZml0IHRoZSBkYXRhXG4gKiAgIC0gVXNlcyBCRkdTIG9wdGltaXphdGlvbiBhbGdvcml0aG0gKG11bHRpLXRocmVhZGluZyBmb3IgcGVyZm9ybWFuY2UpLlxuICogICAgIEZvciBkb3NlLXJlc3BvbnNlIGN1cnZlcywgd2UgYXJlIHR5cGljYWxseSBmaXR0aW5nIHRoZSBzaWdtb2lkIGZ1bmN0aW9uXG4gKiAgIC0gQWJpbGl0eSB0byBkeW5hbWljYWxseSByZWdpc3RlciBjdXN0b20gZml0dGluZyBmdW5jdGlvbnNcbiAqICAgICAtIEF1dG9tYXRpYyBmaXQgZnVuY3Rpb24gZGV0ZXJtaW5hdGlvblxuICogICAgIC0gQ2FjaGluZyBvZiBjdXN0b20gZml0dGluZyBmdW5jdGlvbnNcbiAqICAgLSBBYmlsaXR5IHRvIGdldCBmaXR0aW5nIHBlcmZvcm1hbmNlIGNoYXJhY3RlcmlzdGljcyAoci1zcXVhcmVkLCBjbGFzc2lmaWNhdGlvbiwgZXRjKVxuICogLSBEZWVwIGludGVncmF0aW9uIHdpdGggdGhlIERhdGFncm9rIGdyaWRcbiAqICAgLSBFaXRoZXIgZml0dGluZyBvbiB0aGUgZmx5LCBvciB1c2luZyB0aGUgc3VwcGxpZWQgZnVuY3Rpb24gKyBwYXJhbWV0ZXJzXG4gKiAgIC0gTXVsdGlwbGUgc2VyaWVzIGluIG9uZSBjZWxsXG4gKiAgIC0gQ2FuZGxlc3RpY2tzLCBjb25maWRlbmNlIGludGVydmFscywgYW5kIGRyb3BsaW5lcyBkcmF3aW5nXG4gKiAgIC0gQWJpbGl0eSB0byBkZWZpbmUgY2hhcnQsIG1hcmtlciwgb3IgZml0dGluZyBvcHRpb25zIChzdWNoIGFzIGZpdCBmdW5jdGlvbiBvciBtYXJrZXIgY29sb3IpXG4gKiAgICAgb24gdGhlIGNvbHVtbiBsZXZlbCwgd2l0aCB0aGUgYWJpbGl0eSB0byBvdmVycmlkZSBpdCBvbiBhIGdyaWQgY2VsbCBvciBwb2ludCBsZXZlbFxuICogICAtIENsaWNraW5nIGEgcG9pbnQgaW4gYSBjaGFydCB3aXRoaW4gYSBncmlkIG1ha2VzIGl0IGFuIG91dGxpZXIgLT4gY3VydmUgaXMgcmUtZml0dGVkIG9uIHRoZSBmbHlcbiAqICAgLSBBYmlsaXR5IHRvIHNwZWNpZnkgYSBjaGFydCBhcyBcInJlZmVyZW5jZVwiIHNvIHRoYXQgaXQgaXMgc2hvd24gb24gZXZlcnkgb3RoZXIgY2hhcnQgZm9yIGNvbXBhcmlzb25cbiAqIC0gQWJpbGl0eSB0byBvdmVybGF5IGN1cnZlcyBmcm9tIG11bHRpcGxlIGdyaWQgY2VsbHMgKHNwZWNpYWwgdmlld2VyKVxuICogLSBXb3JrIHdpdGggc2VyaWVzIHN0b3JlZCBpbiBtdWx0aXBsZSBmb3JtYXRzIChiaW5hcnkgZm9yIHBlcmZvcm1hbmNlLCBqc29uIGZvciBmbGV4aWJpbGl0eSwgZXRjKVxuKi9cblxuZXhwb3J0IGNvbnN0IEZJVF9TRU1fVFlQRSA9ICdmaXQnO1xuZXhwb3J0IGNvbnN0IEZJVF9DRUxMX1RZUEUgPSAnZml0JztcbmV4cG9ydCBjb25zdCBUQUdfRklUID0gJy5maXQnO1xuXG5leHBvcnQgY29uc3QgQ09ORklERU5DRV9JTlRFUlZBTF9TVFJPS0VfQ09MT1IgPSAncmdiYSgyNTUsMTkxLDYzLDAuNCknO1xuZXhwb3J0IGNvbnN0IENPTkZJREVOQ0VfSU5URVJWQUxfRklMTF9DT0xPUiA9ICdyZ2JhKDI1NSwyMzgsMjA0LDAuMyknO1xuXG5leHBvcnQgY29uc3QgQ1VSVkVfQ09ORklERU5DRV9JTlRFUlZBTF9CT1VORFMgPSB7XG4gIFRPUDogJ3RvcCcsXG4gIEJPVFRPTTogJ2JvdHRvbScsXG59O1xuXG5leHBvcnQgY29uc3QgRFJPUExJTkVTID0gWydJQzUwJ107XG5cbmV4cG9ydCB0eXBlIEZpdE1hcmtlclR5cGUgPSAnYXN0ZXJpc2snIHwgJ2NpcmNsZScgfCAnY3Jvc3MgYm9yZGVyJyB8ICdkaWFtb25kJyB8ICdzcXVhcmUnIHwgJ3N0YXInIHwgJ3RyaWFuZ2xlIGJvdHRvbScgfFxuICAndHJpYW5nbGUgbGVmdCcgfCAndHJpYW5nbGUgcmlnaHQnIHwgJ3RyaWFuZ2xlIHRvcCc7XG5cbmV4cG9ydCB0eXBlIEZpdExpbmVTdHlsZSA9ICdzb2xpZCcgfCAnZG90dGVkJyB8ICdkYXNoZWQnIHwgJ2Rhc2hkb3R0ZWQnO1xuXG5leHBvcnQgdHlwZSBGaXRFcnJvck1vZGVsVHlwZSA9ICdjb25zdGFudCcgfCAncHJvcG9ydGlvbmFsJztcblxuLyoqIEEgcG9pbnQgaW4gdGhlIGZpdCBzZXJpZXMuIE9ubHkgeCBhbmQgeSBhcmUgcmVxdWlyZWQuIENhbiBvdmVycmlkZSBzb21lIGZpZWxkcyBkZWZpbmVkIGluIElGaXRTZXJpZXNPcHRpb25zLiAqL1xuZXhwb3J0IGludGVyZmFjZSBJRml0UG9pbnQge1xuICB4OiBudW1iZXI7XG4gIHk6IG51bWJlcjtcbiAgb3V0bGllcj86IGJvb2xlYW47ICAgICAgIC8vIGlmIHRydWUsIHJlbmRlcnMgYXMgJ3gnIGFuZCBnZXRzIGlnbm9yZWQgZm9yIGN1cnZlIGZpdHRpbmdcbiAgY29sb3I/OiBzdHJpbmc7ICAgICAgICAgIC8vIG92ZXJyaWRlcyB0aGUgbWFya2VyIGNvbG9yIGRlZmluZWQgaW4gSUZpdFNlcmllc09wdGlvbnNcbiAgbWFya2VyPzogRml0TWFya2VyVHlwZTsgIC8vIG92ZXJyaWRlcyB0aGUgbWFya2VyIHR5cGUgZGVmaW5lZCBpbiBJRml0U2VyaWVzT3B0aW9uc1xuICBzaXplPzogbnVtYmVyOyAgICAgICAgICAgLy8gb3ZlcnJpZGVzIHRoZSBkZWZhdWx0IG1hcmtlciBzaXplXG4gIHN0ZGV2PzogbnVtYmVyOyAgICAgICAgICAvLyB3aGVuIGRlZmluZWQsIHJlbmRlcnMgYW4gZXJyb3IgYmFyIGNhbmRsZXN0aWNrXG4gIC8vIG1pblk/OiBudW1iZXI7ICAgICAgICAgICAvLyB3aGVuIGRlZmluZWQsIHRoZSBtYXJrZXIgcmVuZGVycyBhcyBhIGNhbmRsZXN0aWNrIHdpdGggd2hpc2tlcnMgW21pblksIG1heFldXG4gIC8vIG1heFk/OiBudW1iZXI7ICAgICAgICAgICAvLyB3aGVuIGRlZmluZWQsIHRoZSBtYXJrZXIgcmVuZGVycyBhcyBhIGNhbmRsZXN0aWNrIHdpdGggd2hpc2tlcnMgW21pblksIG1heFldXG59XG5cbi8qKiBBIHNlcmllcyBjb25zaXN0cyBvZiBwb2ludHMsIGhhcyBhIG5hbWUsIGFuZCBvcHRpb25zLlxuICogSWYgZGVmaW5lZCwgc2VyaWVzT3B0aW9ucyBhcmUgbWVyZ2VkIHdpdGgge0BsaW5rIElGaXRDaGFydERhdGEuc2VyaWVzT3B0aW9uc30gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSUZpdFNlcmllcyBleHRlbmRzIElGaXRTZXJpZXNPcHRpb25zIHtcbiAgcG9pbnRzOiBJRml0UG9pbnRbXTtcbn1cblxuLyoqIENoYXJ0IGxhYmVscyBvcHRpb25zLiBDb250cm9scyB0aGUgY2hhcnQgbGFiZWxzLiAqL1xuZXhwb3J0IGludGVyZmFjZSBJRml0Q2hhcnRMYWJlbE9wdGlvbnMge1xuICB2aXNpYmxlOiBib29sZWFuOyAgICAgICAgIC8vIGlmIHRydWUsIHJlbmRlcnMgdGhlIGxhYmVsIG9uIHRoZSBwbG90XG4gIGNvbG9yOiBzdHJpbmc7ICAgICAgICAgICAgLy8gZGVmaW5lcyB0aGUgbGFiZWwgY29sb3JcbiAgbmFtZTogc3RyaW5nOyAgICAgICAgICAgICAvLyBkZWZpbmVzIHRoZSBsYWJlbCBuYW1lXG59XG5cbi8qKiBDaGFydCBvcHRpb25zLiBGb3IgZml0dGVkIGN1cnZlcywgdGhpcyBvYmplY3QgaXMgc3RvcmVkIGluIHRoZSBncmlkIGNvbHVtbiB0YWdzIGFuZCBpcyB1c2VkIGJ5IHRoZSByZW5kZXJlci4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSUZpdENoYXJ0T3B0aW9ucyB7XG4gIG1pblg/OiBudW1iZXI7XG4gIG1pblk/OiBudW1iZXI7XG4gIG1heFg/OiBudW1iZXI7XG4gIG1heFk/OiBudW1iZXI7XG5cbiAgdGl0bGU/OiBzdHJpbmc7ICAgICAgICAgICAgLy8gZGVmaW5lcyB0aGUgcGxvdCB0aXRsZS4gSWYgdGhlIHBsb3Qgc2l6ZSBpcyBlbm91Z2gsIHdpbGwgcmVuZGVyIGl0LlxuICB4QXhpc05hbWU/OiBzdHJpbmc7ICAgICAgICAvLyBkZWZpbmVzIHRoZSB4IGF4aXMgbmFtZS4gSWYgdGhlIHBsb3Qgc2l6ZSBpcyBlbm91Z2gsIHdpbGwgcmVuZGVyIGl0LlxuICB5QXhpc05hbWU/OiBzdHJpbmc7ICAgICAgICAvLyBkZWZpbmVzIHRoZSBZIGF4aXMgbmFtZS4gSWYgdGhlIHBsb3Qgc2l6ZSBpcyBlbm91Z2gsIHdpbGwgcmVuZGVyIGl0LlxuXG4gIGxvZ1g/OiBib29sZWFuOyAgICAgICAgICAgIC8vIGRlZmluZXMgd2hldGhlciB0aGUgeCBkYXRhIHNob3VsZCBiZSBsb2dhcml0aG1pYyBvciBub3RcbiAgbG9nWT86IGJvb2xlYW47ICAgICAgICAgICAgLy8gZGVmaW5lcyB3aGV0aGVyIHRoZSB5IGRhdGEgc2hvdWxkIGJlIGxvZ2FyaXRobWljIG9yIG5vdFxuXG4gIHNob3dTdGF0aXN0aWNzPzogc3RyaW5nW107IC8vIGRlZmluZXMgdGhlIHN0YXRpc3RpY3MgdGhhdCB3b3VsZCBiZSBzaG93biBvbiB0aGUgcGxvdFxuICBsYWJlbE9wdGlvbnM/OiBJRml0Q2hhcnRMYWJlbE9wdGlvbnNbXTsgLy8gY29udHJvbHMgdGhlIHBsb3QgbGFiZWxzXG59XG5cbi8qKiBEYXRhIGZvciB0aGUgZml0IGNoYXJ0LiAqL1xuZXhwb3J0IGludGVyZmFjZSBJRml0Q2hhcnREYXRhIHtcbiAgY2hhcnRPcHRpb25zPzogSUZpdENoYXJ0T3B0aW9ucztcbiAgc2VyaWVzT3B0aW9ucz86IElGaXRTZXJpZXNPcHRpb25zOyAgLy8gRGVmYXVsdCBzZXJpZXMgb3B0aW9ucy4gSW5kaXZpZHVhbCBzZXJpZXMgY2FuIG92ZXJyaWRlIGl0LlxuICBzZXJpZXM/OiBJRml0U2VyaWVzW107XG59XG5cbi8qKiBDbGFzcyB0aGF0IGltcGxlbWVudHMge0BsaW5rIElGaXRDaGFydERhdGF9IGludGVyZmFjZSAqL1xuZXhwb3J0IGNsYXNzIEZpdENoYXJ0RGF0YSBpbXBsZW1lbnRzIElGaXRDaGFydERhdGEge1xuICBjaGFydE9wdGlvbnM6IElGaXRDaGFydE9wdGlvbnMgPSB7fTtcbiAgc2VyaWVzT3B0aW9uczogSUZpdFNlcmllc09wdGlvbnMgPSB7fTsgIC8vIERlZmF1bHQgc2VyaWVzIG9wdGlvbnMuIEluZGl2aWR1YWwgc2VyaWVzIGNhbiBvdmVycmlkZSBpdC5cbiAgc2VyaWVzOiBJRml0U2VyaWVzW10gPSBbXTtcbn1cblxuLyoqIFNlcmllcyBvcHRpb25zIGNhbiBiZSBlaXRoZXIgYXBwbGllZCBnbG9iYWxseSBvbiBhIGNvbHVtbiBsZXZlbCwgb3IgcGFydGlhbGx5IG92ZXJyaWRkZW4gaW4gcGFydGljdWxhciBzZXJpZXMgKi9cbmV4cG9ydCBpbnRlcmZhY2UgSUZpdFNlcmllc09wdGlvbnMge1xuICBuYW1lPzogc3RyaW5nOyAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvbnRyb2xzIHRoZSBzZXJpZXMgbmFtZVxuICBmaXRGdW5jdGlvbj86IHN0cmluZyB8IElGaXRGdW5jdGlvbkRlc2NyaXB0aW9uOyAvLyBjb250cm9scyB0aGUgc2VyaWVzIGZpdCBmdW5jdGlvblxuICBwYXJhbWV0ZXJzPzogbnVtYmVyW107ICAgICAgICAgICAgICAgIC8vIGNvbnRyb2xzIHRoZSBzZXJpZXMgcGFyYW1ldGVycywgYXV0by1maXR0aW5nIHdoZW4gbm90IGRlZmluZWRcbiAgcGFyYW1ldGVyQm91bmRzPzogRml0UGFyYW1Cb3VuZHNbXTsgICAvLyBkZWZpbmVzIHRoZSBhY2NlcHRhYmxlIHJhbmdlIG9mIGVhY2ggcGFyYW1ldGVyLCB3aGljaCBpcyB0YWtlbiBpbnRvIGFjY291bnQgZHVyaW5nIHRoZSBmaXR0aW5nLiBTZWUgYWxzbyBgcGFyYW1ldGVyc2AuXG4gIG1hcmtlclR5cGU/OiBGaXRNYXJrZXJUeXBlOyAgICAgICAgICAgLy8gZGVmaW5lcyB0aGUgc2VyaWVzIG1hcmtlciB0eXBlXG4gIGxpbmVTdHlsZT86IEZpdExpbmVTdHlsZTsgICAgICAgICAgICAgLy8gZGVmaW5lcyB0aGUgc2VyaWVzIGxpbmUgc3R5bGVcbiAgcG9pbnRDb2xvcj86IHN0cmluZzsgICAgICAgICAgICAgICAgICAvLyBvdmVycmlkZXMgdGhlIHN0YW5kYXJkaXplZCBzZXJpZXMgcG9pbnQgY29sb3JcbiAgZml0TGluZUNvbG9yPzogc3RyaW5nOyAgICAgICAgICAgICAgICAvLyBvdmVycmlkZXMgdGhlIHN0YW5kYXJkaXplZCBzZXJpZXMgZml0IGxpbmUgY29sb3JcbiAgY29uZmlkZW5jZUludGVydmFsQ29sb3I/OiBzdHJpbmc7ICAgICAvLyBvdmVycmlkZXMgdGhlIHN0YW5kYXJkaXplZCBzZXJpZXMgY29uZmlkZW5jZSBpbnRlcnZhbCBjb2xvclxuICBzaG93Rml0TGluZT86IGJvb2xlYW47ICAgICAgICAgICAgICAgIC8vIGRlZmluZXMgd2hldGhlciB0byBzaG93IHRoZSBmaXQgbGluZSBvciBub3RcbiAgc2hvd1BvaW50cz86IHN0cmluZzsgICAgICAgICAgICAgICAgICAvLyBkZWZpbmVzIHRoZSBkYXRhIGRpc3BsYXkgbW9kZVxuICBzaG93Q3VydmVDb25maWRlbmNlSW50ZXJ2YWw/OiBib29sZWFuOyAgICAvLyBkZWZpbmVzIHdoZXRoZXIgdG8gc2hvdyB0aGUgY29uZmlkZW5jZSBpbnRlcnZhbHMgb3Igbm90XG4gIGVycm9yTW9kZWw/OiBGaXRFcnJvck1vZGVsVHlwZTtcbiAgY2xpY2tUb1RvZ2dsZT86IGJvb2xlYW47ICAgIC8vIGlmIHRydWUsIGNsaWNraW5nIG9uIHRoZSBwb2ludCB0b2dnbGVzIGl0cyBvdXRsaWVyIHN0YXR1cyBhbmQgY2F1c2VzIGN1cnZlIHJlZml0dGluZ1xuICBsYWJlbHM/OiB7W2tleTogc3RyaW5nXTogc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbn07IC8vIGNvbnRyb2xsZWQgYnkgSUZpdENoYXJ0RGF0YSBsYWJlbE9wdGlvbnMsIHNob3dzIGxhYmVsc1xuICBkcm9wbGluZXM/OiBzdHJpbmdbXTsgICAgICAgICAgICAgICAgIC8vIGRlZmluZXMgdGhlIGRyb3BsaW5lcyB0aGF0IHdvdWxkIGJlIHNob3duIG9uIHRoZSBwbG90IChJQzUwKVxufVxuLy8gVE9ETzogc2hvdyBsYWJlbHMgaW4gcHJvcGVydHkgcGFuZWwgaWYgcHJlc2VudCwgY29sb3IgYnkgZGVmYXVsdCBmcm9tIHNlcmllc1xuXG5cbi8qKiBQcm9wZXJ0aWVzIHRoYXQgZGVzY3JpYmUge0BsaW5rIEZpdFN0YXRpc3RpY3N9LiBVc2VmdWwgZm9yIGVkaXRpbmcsIGluaXRpYWxpemF0aW9uLCB0cmFuc2Zvcm1hdGlvbnMsIGV0Yy4gKi9cbmV4cG9ydCBjb25zdCBzdGF0aXN0aWNzUHJvcGVydGllczogUHJvcGVydHlbXSA9IFtcbiAgUHJvcGVydHkuanMoJ3JTcXVhcmVkJywgVFlQRS5GTE9BVCwge3VzZXJFZGl0YWJsZTogZmFsc2V9KSxcbiAgUHJvcGVydHkuanMoJ2F1YycsIFRZUEUuRkxPQVQsIHt1c2VyRWRpdGFibGU6IGZhbHNlfSksXG4gIFByb3BlcnR5LmpzKCdpbnRlcmNlcHRZJywgVFlQRS5GTE9BVCwge3VzZXJFZGl0YWJsZTogZmFsc2V9KSxcbiAgUHJvcGVydHkuanMoJ2ludGVyY2VwdFgnLCBUWVBFLkZMT0FULCB7dXNlckVkaXRhYmxlOiBmYWxzZX0pLFxuICBQcm9wZXJ0eS5qcygnc2xvcGUnLCBUWVBFLkZMT0FULCB7dXNlckVkaXRhYmxlOiBmYWxzZX0pLFxuICBQcm9wZXJ0eS5qcygndG9wJywgVFlQRS5GTE9BVCwge3VzZXJFZGl0YWJsZTogZmFsc2V9KSxcbiAgUHJvcGVydHkuanMoJ2JvdHRvbScsIFRZUEUuRkxPQVQsIHt1c2VyRWRpdGFibGU6IGZhbHNlfSksXG5dO1xuXG4vKiogUHJvcGVydGllcyB0aGF0IGRlc2NyaWJlIHtAbGluayBJRml0Q2hhcnRPcHRpb25zfS4gVXNlZnVsIGZvciBlZGl0aW5nLCBpbml0aWFsaXphdGlvbiwgdHJhbnNmb3JtYXRpb25zLCBldGMuICovXG5leHBvcnQgY29uc3QgZml0Q2hhcnREYXRhUHJvcGVydGllczogUHJvcGVydHlbXSA9IFtcbiAgLy8gU3R5bGUgYW5kIHpvb21cbiAgUHJvcGVydHkuanMoJ21pblgnLCBUWVBFLkZMT0FULCB7ZGVzY3JpcHRpb246ICdNaW5pbXVtIHZhbHVlIG9mIHRoZSBYIGF4aXMnLCBudWxsYWJsZTogdHJ1ZX0pLFxuICBQcm9wZXJ0eS5qcygnbWluWScsIFRZUEUuRkxPQVQsIHtkZXNjcmlwdGlvbjogJ01pbmltdW0gdmFsdWUgb2YgdGhlIFkgYXhpcycsIG51bGxhYmxlOiB0cnVlfSksXG4gIFByb3BlcnR5LmpzKCdtYXhYJywgVFlQRS5GTE9BVCwge2Rlc2NyaXB0aW9uOiAnTWF4aW11bSB2YWx1ZSBvZiB0aGUgWCBheGlzJywgbnVsbGFibGU6IHRydWV9KSxcbiAgUHJvcGVydHkuanMoJ21heFknLCBUWVBFLkZMT0FULCB7ZGVzY3JpcHRpb246ICdNYXhpbXVtIHZhbHVlIG9mIHRoZSBZIGF4aXMnLCBudWxsYWJsZTogdHJ1ZX0pLFxuICBQcm9wZXJ0eS5qcygndGl0bGUnLCBUWVBFLlNUUklORywge251bGxhYmxlOiB0cnVlfSksXG4gIFByb3BlcnR5LmpzKCd4QXhpc05hbWUnLCBUWVBFLlNUUklORywge2Rlc2NyaXB0aW9uOlxuICAgICdMYWJlbCB0byBzaG93IG9uIHRoZSBYIGF4aXMuIElmIG5vdCBzcGVjaWZpZWQsIGNvcnJlc3BvbmRpbmcgZGF0YSBjb2x1bW4gbmFtZSBpcyB1c2VkJywgbnVsbGFibGU6IHRydWV9KSxcbiAgUHJvcGVydHkuanMoJ3lBeGlzTmFtZScsIFRZUEUuU1RSSU5HLCB7ZGVzY3JpcHRpb246XG4gICAgJ0xhYmVsIHRvIHNob3cgb24gdGhlIFkgYXhpcy4gSWYgbm90IHNwZWNpZmllZCwgY29ycmVzcG9uZGluZyBkYXRhIGNvbHVtbiBuYW1lIGlzIHVzZWQnLCBudWxsYWJsZTogdHJ1ZX0pLFxuICBQcm9wZXJ0eS5qcygnbG9nWCcsIFRZUEUuQk9PTCwge2Rlc2NyaXB0aW9uOiAnV2hldGhlciB0aGUgWCBheGlzIHNob3VsZCBiZSBsb2dhcml0aG1pYycsIGRlZmF1bHRWYWx1ZTogZmFsc2V9KSxcbiAgUHJvcGVydHkuanMoJ2xvZ1knLCBUWVBFLkJPT0wsIHtkZXNjcmlwdGlvbjogJ1doZXRoZXIgdGhlIFkgYXhpcyBzaG91bGQgYmUgbG9nYXJpdGhtaWMnLCBkZWZhdWx0VmFsdWU6IGZhbHNlfSksXG4gIFByb3BlcnR5LmpzKCdzaG93U3RhdGlzdGljcycsIFRZUEUuU1RSSU5HX0xJU1QsIHtkZXNjcmlwdGlvbjogJ1doZXRoZXIgc3BlY2lmaWMgc3RhdGlzdGljcyBzaG91bGQgYmUgcmVuZGVyZWQnLFxuICAgIGNob2ljZXM6IHN0YXRpc3RpY3NQcm9wZXJ0aWVzLm1hcCgoZnJwKSA9PiBmcnAubmFtZSksIGlucHV0VHlwZTogJ011bHRpQ2hvaWNlJ30pLFxuXTtcblxuLyoqIFByb3BlcnRpZXMgdGhhdCBkZXNjcmliZSB7QGxpbmsgSUZpdFNlcmllc09wdGlvbnN9LiBVc2VmdWwgZm9yIGVkaXRpbmcsIGluaXRpYWxpemF0aW9uLCB0cmFuc2Zvcm1hdGlvbnMsIGV0Yy4gKi9cbmV4cG9ydCBjb25zdCBmaXRTZXJpZXNQcm9wZXJ0aWVzOiBQcm9wZXJ0eVtdID0gW1xuICBQcm9wZXJ0eS5qcygnbmFtZScsIFRZUEUuU1RSSU5HKSxcbiAgUHJvcGVydHkuanMoJ2ZpdEZ1bmN0aW9uJywgVFlQRS5TVFJJTkcsXG4gICAge2NhdGVnb3J5OiAnRml0dGluZycsIGNob2ljZXM6IFsnc2lnbW9pZCcsICdsaW5lYXInXSwgZGVmYXVsdFZhbHVlOiAnc2lnbW9pZCd9KSxcbiAgUHJvcGVydHkuanMoJ3BvaW50Q29sb3InLCBUWVBFLlNUUklORyxcbiAgICB7Y2F0ZWdvcnk6ICdSZW5kZXJpbmcnLCBudWxsYWJsZTogdHJ1ZSwgaW5wdXRUeXBlOiAnQ29sb3InfSksXG4gIFByb3BlcnR5LmpzKCdmaXRMaW5lQ29sb3InLCBUWVBFLlNUUklORyxcbiAgICB7Y2F0ZWdvcnk6ICdSZW5kZXJpbmcnLCBudWxsYWJsZTogdHJ1ZSwgaW5wdXRUeXBlOiAnQ29sb3InfSksXG4gIFByb3BlcnR5LmpzKCdlcnJvck1vZGVsJywgVFlQRS5TVFJJTkcsIHtjYXRlZ29yeTogJ0ZpdHRpbmcnLCBkZWZhdWx0VmFsdWU6ICdjb25zdGFudCcsXG4gICAgY2hvaWNlczogWydjb25zdGFudCcsICdwcm9wb3J0aW9uYWwnXSwgbnVsbGFibGU6IGZhbHNlfSksXG4gIFByb3BlcnR5LmpzKCdjbGlja1RvVG9nZ2xlJywgVFlQRS5CT09MLCB7Y2F0ZWdvcnk6ICdGaXR0aW5nJywgZGVzY3JpcHRpb246XG4gICAgJ0lmIHRydWUsIGNsaWNraW5nIG9uIHRoZSBwb2ludCB0b2dnbGVzIGl0cyBvdXRsaWVyIHN0YXR1cyBhbmQgY2F1c2VzIGN1cnZlIHJlZml0dGluZycsIG51bGxhYmxlOiB0cnVlLCBkZWZhdWx0VmFsdWU6IGZhbHNlfSksXG4gIFByb3BlcnR5LmpzKCdzaG93Rml0TGluZScsIFRZUEUuQk9PTCwge2NhdGVnb3J5OiAnRml0dGluZycsIGRlZmF1bHRWYWx1ZTogdHJ1ZX0pLFxuICBQcm9wZXJ0eS5qcygnc2hvd1BvaW50cycsIFRZUEUuU1RSSU5HLFxuICAgIHtjYXRlZ29yeTogJ0ZpdHRpbmcnLCBkZXNjcmlwdGlvbjogJ1doZXRoZXIgcG9pbnRzL2NhbmRsZXN0aWNrcy9ub25lIHNob3VsZCBiZSByZW5kZXJlZCcsXG4gICAgICBkZWZhdWx0VmFsdWU6ICdwb2ludHMnLCBjaG9pY2VzOiBbJ3BvaW50cycsICdjYW5kbGVzdGlja3MnLCAnYm90aCddfSksXG4gIFByb3BlcnR5LmpzKCdzaG93Q3VydmVDb25maWRlbmNlSW50ZXJ2YWwnLCBUWVBFLkJPT0wsXG4gICAge2NhdGVnb3J5OiAnRml0dGluZycsIGRlc2NyaXB0aW9uOiAnV2hldGhlciBjb25maWRlbmNlIGludGVydmFscyBzaG91bGQgYmUgcmVuZGVyZWQnLCBkZWZhdWx0VmFsdWU6IGZhbHNlfSksXG4gIFByb3BlcnR5LmpzKCdtYXJrZXJUeXBlJywgVFlQRS5TVFJJTkcsIHtjYXRlZ29yeTogJ1JlbmRlcmluZycsIGRlZmF1bHRWYWx1ZTogJ2NpcmNsZScsXG4gICAgY2hvaWNlczogWydhc3RlcmlzaycsICdjaXJjbGUnLCAnY3Jvc3MgYm9yZGVyJywgJ2RpYW1vbmQnLCAnc3F1YXJlJywgJ3N0YXInLFxuICAgICAgJ3RyaWFuZ2xlIGJvdHRvbScsICd0cmlhbmdsZSBsZWZ0JywgJ3RyaWFuZ2xlIHJpZ2h0JywgJ3RyaWFuZ2xlIHRvcCddLCBudWxsYWJsZTogZmFsc2V9KSxcbiAgUHJvcGVydHkuanMoJ2xpbmVTdHlsZScsIFRZUEUuU1RSSU5HLCB7Y2F0ZWdvcnk6ICdSZW5kZXJpbmcnLCBkZWZhdWx0VmFsdWU6ICdzb2xpZCcsXG4gICAgY2hvaWNlczogWydzb2xpZCcsICdkb3R0ZWQnLCAnZGFzaGVkJywgJ2Rhc2hkb3R0ZWQnXSwgbnVsbGFibGU6IGZhbHNlfSksXG4gIFByb3BlcnR5LmpzKCdkcm9wbGluZXMnLCBUWVBFLlNUUklOR19MSVNULCB7ZGVzY3JpcHRpb246ICdXaGV0aGVyIHNwZWNpZmljIGRyb3BsaW5lcyBzaG91bGQgYmUgcmVuZGVyZWQnLFxuICAgIGNob2ljZXM6IERST1BMSU5FUywgaW5wdXRUeXBlOiAnTXVsdGlDaG9pY2UnfSksXG5dO1xuXG5leHBvcnQgY29uc3QgRklUX0ZVTkNUSU9OX1NJR01PSUQgPSAnc2lnbW9pZCc7XG5leHBvcnQgY29uc3QgRklUX0ZVTkNUSU9OX0xJTkVBUiA9ICdsaW5lYXInO1xuXG5leHBvcnQgY29uc3QgRklUX1NUQVRTX1JTUVVBUkVEID0gJ3JTcXVhcmVkJztcbmV4cG9ydCBjb25zdCBGSVRfU1RBVFNfQVVDID0gJ2F1Yyc7XG5cblxuLy8gVE9ETz86IGFkZCBtZXRob2QgdG8gcmV0dXJuIHBhcmFtZXRlcnMgLSBnZXQgcGFyYW1ldGVycyBmcm9tIGZpdCBmdW5jdGlvblxuLyoqIENsYXNzIGZvciB0aGUgZml0IGZ1bmN0aW9ucyAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEZpdEZ1bmN0aW9uIHtcbiAgYWJzdHJhY3QgZ2V0IG5hbWUoKTogc3RyaW5nO1xuICBhYnN0cmFjdCBnZXQgcGFyYW1ldGVyTmFtZXMoKTogc3RyaW5nW107XG4gIGFic3RyYWN0IHkocGFyYW1zOiBudW1iZXJbXSwgeDogbnVtYmVyKTogbnVtYmVyO1xuICBhYnN0cmFjdCBnZXRJbml0aWFsUGFyYW1ldGVycyh4OiBudW1iZXJbXSwgeTogbnVtYmVyW10pOiBudW1iZXJbXTtcbn1cblxuLyoqIENsYXNzIHRoYXQgaW1wbGVtZW50cyB0aGUgbGluZWFyIGZ1bmN0aW9uICovXG5leHBvcnQgY2xhc3MgTGluZWFyRnVuY3Rpb24gZXh0ZW5kcyBGaXRGdW5jdGlvbiB7XG4gIGdldCBuYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIEZJVF9GVU5DVElPTl9MSU5FQVI7XG4gIH1cblxuICBnZXQgcGFyYW1ldGVyTmFtZXMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBbJ1Nsb3BlJywgJ0ludGVyY2VwdCddO1xuICB9XG5cbiAgeShwYXJhbXM6IG51bWJlcltdLCB4OiBudW1iZXIpOiBudW1iZXIge1xuICAgIHRocm93IG5ldyBFcnJvcignTm90IGltcGxlbWVudGVkJyk7XG4gIH1cblxuICBnZXRJbml0aWFsUGFyYW1ldGVycyh4OiBudW1iZXJbXSwgeTogbnVtYmVyW10pOiBudW1iZXJbXSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdOb3QgaW1wbGVtZW50ZWQnKTtcbiAgfVxufVxuXG4vKiogQ2xhc3MgdGhhdCBpbXBsZW1lbnRzIHRoZSBzaWdtb2lkIGZ1bmN0aW9uICovXG5leHBvcnQgY2xhc3MgU2lnbW9pZEZ1bmN0aW9uIGV4dGVuZHMgRml0RnVuY3Rpb24ge1xuICBnZXQgbmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBGSVRfRlVOQ1RJT05fU0lHTU9JRDtcbiAgfVxuXG4gIGdldCBwYXJhbWV0ZXJOYW1lcygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIFsnVG9wJywgJ0JvdHRvbScsICdTbG9wZScsICdJQzUwJ107XG4gIH1cblxuICB5KHBhcmFtczogbnVtYmVyW10sIHg6IG51bWJlcik6IG51bWJlciB7XG4gICAgcmV0dXJuIHNpZ21vaWQocGFyYW1zLCB4KTtcbiAgfVxuXG4gIGdldEluaXRpYWxQYXJhbWV0ZXJzKHg6IG51bWJlcltdLCB5OiBudW1iZXJbXSk6IG51bWJlcltdIHtcbiAgICBjb25zdCBkYXRhQm91bmRzID0gREcuUmVjdC5mcm9tWFlBcnJheXMoeCwgeSk7XG4gICAgY29uc3QgbWVkWSA9IChkYXRhQm91bmRzLmJvdHRvbSAtIGRhdGFCb3VuZHMudG9wKSAvIDIgKyBkYXRhQm91bmRzLnRvcDtcbiAgICBsZXQgbWF4WUludGVydmFsID0gZGF0YUJvdW5kcy5ib3R0b20gLSBkYXRhQm91bmRzLnRvcDtcbiAgICBsZXQgbmVhcmVzdFhJbmRleCA9IDA7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB4Lmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBjdXJyZW50SW50ZXJ2YWwgPSBNYXRoLmFicyh5W2ldIC0gbWVkWSk7XG4gICAgICBpZiAoY3VycmVudEludGVydmFsIDwgbWF4WUludGVydmFsKSB7XG4gICAgICAgIG1heFlJbnRlcnZhbCA9IGN1cnJlbnRJbnRlcnZhbDtcbiAgICAgICAgbmVhcmVzdFhJbmRleCA9IGk7XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IHhBdE1lZFkgPSB4W25lYXJlc3RYSW5kZXhdO1xuICAgIGNvbnN0IHNsb3BlID0geVswXSA+IHlbeS5sZW5ndGggLSAxXSA/IDEgOiAtMTtcblxuICAgIC8vIHBhcmFtcyBhcmU6IFttYXgsIHRhbiwgSUM1MCwgbWluXVxuICAgIHJldHVybiBbZGF0YUJvdW5kcy5ib3R0b20sIHNsb3BlLCB4QXRNZWRZLCBkYXRhQm91bmRzLnRvcF07XG4gIH1cbn1cblxuLyoqIENsYXNzIHRoYXQgaW1wbGVtZW50cyB1c2VyIEpTIGZ1bmN0aW9ucyAqL1xuZXhwb3J0IGNsYXNzIEpzRnVuY3Rpb24gZXh0ZW5kcyBGaXRGdW5jdGlvbiB7XG4gIHByaXZhdGUgX25hbWU6IHN0cmluZztcbiAgcHJpdmF0ZSBfcGFyYW1ldGVyTmFtZXM6IHN0cmluZ1tdO1xuXG4gIGNvbnN0cnVjdG9yKG5hbWU6IHN0cmluZywgeUZ1bmM6IChwYXJhbXM6IG51bWJlcltdLCB4OiBudW1iZXIpID0+IG51bWJlcixcbiAgICBnZXRJbml0UGFyYW1zRnVuYzogKHg6IG51bWJlcltdLCB5OiBudW1iZXJbXSkgPT4gbnVtYmVyW10sIHBhcmFtZXRlck5hbWVzOiBzdHJpbmdbXSkge1xuICAgIHN1cGVyKCk7XG5cbiAgICB0aGlzLl9uYW1lID0gbmFtZTtcbiAgICB0aGlzLl9wYXJhbWV0ZXJOYW1lcyA9IHBhcmFtZXRlck5hbWVzO1xuXG4gICAgdGhpcy55ID0geUZ1bmM7XG4gICAgdGhpcy5nZXRJbml0aWFsUGFyYW1ldGVycyA9IGdldEluaXRQYXJhbXNGdW5jO1xuICB9XG5cbiAgZ2V0IG5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fbmFtZTtcbiAgfVxuXG4gIGdldCBwYXJhbWV0ZXJOYW1lcygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIHRoaXMuX3BhcmFtZXRlck5hbWVzO1xuICB9XG5cbiAgeShwYXJhbXM6IG51bWJlcltdLCB4OiBudW1iZXIpOiBudW1iZXIge1xuICAgIHRocm93IG5ldyBFcnJvcignTm90IGltcGxlbWVudGVkJyk7XG4gIH1cblxuICBnZXRJbml0aWFsUGFyYW1ldGVycyh4OiBudW1iZXJbXSwgeTogbnVtYmVyW10pOiBudW1iZXJbXSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdOb3QgaW1wbGVtZW50ZWQnKTtcbiAgfVxufVxuXG4vLyBPYmplY3Qgd2l0aCBmaXQgZnVuY3Rpb25zXG5leHBvcnQgY29uc3QgZml0RnVuY3Rpb25zOiB7W2luZGV4OiBzdHJpbmddOiBGaXRGdW5jdGlvbn0gPSB7XG4gICdsaW5lYXInOiBuZXcgTGluZWFyRnVuY3Rpb24oKSxcbiAgJ3NpZ21vaWQnOiBuZXcgU2lnbW9pZEZ1bmN0aW9uKCksXG59O1xuXG5leHBvcnQgaW50ZXJmYWNlIElGaXRPcHRpb25zIHtcbiAgZXJyb3JNb2RlbDogRml0RXJyb3JNb2RlbFR5cGU7XG4gIGNvbmZpZGVuY2VMZXZlbDogbnVtYmVyO1xuICBzdGF0aXN0aWNzOiBib29sZWFuO1xufVxuXG5cbmZ1bmN0aW9uIGNyZWF0ZU9iamVjdGl2ZUZ1bmN0aW9uKGVycm9yTW9kZWw6IEZpdEVycm9yTW9kZWxUeXBlKTogT2JqZWN0aXZlRnVuY3Rpb24ge1xuICBsZXQgb2Y6IE9iamVjdGl2ZUZ1bmN0aW9uO1xuXG4gIHN3aXRjaCAoZXJyb3JNb2RlbCkge1xuICBjYXNlIEZpdEVycm9yTW9kZWwuQ09OU1RBTlQ6XG4gICAgb2YgPSBvYmplY3RpdmVOb3JtYWxDb25zdGFudDtcbiAgICBicmVhaztcbiAgY2FzZSBGaXRFcnJvck1vZGVsLlBST1BPUlRJT05BTDpcbiAgICBvZiA9IG9iamVjdGl2ZU5vcm1hbFByb3BvcnRpb25hbDtcbiAgICBicmVhaztcbiAgZGVmYXVsdDpcbiAgICBvZiA9IG9iamVjdGl2ZU5vcm1hbENvbnN0YW50O1xuICAgIGJyZWFrO1xuICB9XG5cbiAgcmV0dXJuIG9mO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVPcHRpbWl6YWJsZShkYXRhOiB7eDogbnVtYmVyW10sIHk6IG51bWJlcltdfSwgY3VydmVGdW5jdGlvbjogKHBhcmFtczogbnVtYmVyW10sIHg6IG51bWJlcikgPT4gbnVtYmVyLFxuICBvZjogT2JqZWN0aXZlRnVuY3Rpb24sIGZpeGVkOiBudW1iZXJbXSk6IE9wdGltaXphYmxlIHtcbiAgcmV0dXJuIHtcbiAgICBnZXRWYWx1ZTogKHBhcmFtZXRlcnM6IG51bWJlcltdKSA9PiB7XG4gICAgICByZXR1cm4gb2YoY3VydmVGdW5jdGlvbiwgZGF0YSwgcGFyYW1ldGVycykudmFsdWU7XG4gICAgfSxcbiAgICBnZXRHcmFkaWVudDogKHBhcmFtZXRlcnM6IG51bWJlcltdLCBncmFkaWVudDogbnVtYmVyW10pID0+IHtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGFyYW1ldGVycy5sZW5ndGg7IGkrKylcbiAgICAgICAgZ3JhZGllbnRbaV0gPSBmaXhlZC5pbmNsdWRlcyhpKSA/IDAgOiBnZXRPYmplY3RpdmVEZXJpdmF0aXZlKG9mLCBjdXJ2ZUZ1bmN0aW9uLCBkYXRhLCBwYXJhbWV0ZXJzLCBpKTtcblxuICAgICAgcmV0dXJuIGdyYWRpZW50O1xuICAgIH0sXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRPckNyZWF0ZUZpdEZ1bmN0aW9uKHNlcmllc0ZpdEZ1bmM6IHN0cmluZyB8IElGaXRGdW5jdGlvbkRlc2NyaXB0aW9uKTogRml0RnVuY3Rpb24ge1xuICBpZiAodHlwZW9mIHNlcmllc0ZpdEZ1bmMgPT09ICdzdHJpbmcnKVxuICAgIHJldHVybiBmaXRGdW5jdGlvbnNbc2VyaWVzRml0RnVuY107XG4gIGVsc2UgaWYgKCFmaXRGdW5jdGlvbnNbc2VyaWVzRml0RnVuYy5uYW1lXSkge1xuICAgIGNvbnN0IG5hbWUgPSBzZXJpZXNGaXRGdW5jLm5hbWU7XG4gICAgY29uc3QgcGFyYW1OYW1lcyA9IHNlcmllc0ZpdEZ1bmMucGFyYW1ldGVyTmFtZXM7XG4gICAgY29uc3QgZml0RnVuY3Rpb25QYXJ0cyA9IHNlcmllc0ZpdEZ1bmMuZnVuY3Rpb24uc3BsaXQoJz0+JykubWFwKChlbGVtKSA9PiBlbGVtLnRyaW0oKSk7XG4gICAgY29uc3QgZ2V0SW5pdFBhcmFtc1BhcnRzID0gc2VyaWVzRml0RnVuYy5nZXRJbml0aWFsUGFyYW1ldGVycy5zcGxpdCgnPT4nKS5tYXAoKGVsZW0pID0+IGVsZW0udHJpbSgpKTtcbiAgICBjb25zdCBmaXRGdW5jdGlvbiA9IG5ldyBGdW5jdGlvbihmaXRGdW5jdGlvblBhcnRzWzBdLnNsaWNlKDEsIGZpdEZ1bmN0aW9uUGFydHNbMF0ubGVuZ3RoIC0gMSksXG4gICAgICBgJHtmaXRGdW5jdGlvblBhcnRzWzFdLmluY2x1ZGVzKCc7JykgPyAnJyA6ICdyZXR1cm4gJ30ke2ZpdEZ1bmN0aW9uUGFydHNbMV19YCk7XG4gICAgY29uc3QgZ2V0SW5pdFBhcmFtc0Z1bmMgPSBuZXcgRnVuY3Rpb24oZ2V0SW5pdFBhcmFtc1BhcnRzWzBdLnNsaWNlKDEsIGdldEluaXRQYXJhbXNQYXJ0c1swXS5sZW5ndGggLSAxKSxcbiAgICAgIGByZXR1cm4gJHtnZXRJbml0UGFyYW1zUGFydHNbMV19YCk7XG4gICAgY29uc3QgZml0RnVuYyA9IG5ldyBKc0Z1bmN0aW9uKG5hbWUsIChmaXRGdW5jdGlvbiBhcyAocGFyYW1zOiBudW1iZXJbXSwgeDogbnVtYmVyKSA9PiBudW1iZXIpLFxuICAgICAgKGdldEluaXRQYXJhbXNGdW5jIGFzICh4OiBudW1iZXJbXSwgeTogbnVtYmVyW10pID0+IG51bWJlcltdKSwgcGFyYW1OYW1lcyk7XG4gICAgZml0RnVuY3Rpb25zW25hbWVdID0gZml0RnVuYztcbiAgfVxuXG4gIHJldHVybiBmaXRGdW5jdGlvbnNbc2VyaWVzRml0RnVuYy5uYW1lXTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZpdERhdGEoZGF0YToge3g6IG51bWJlcltdLCB5OiBudW1iZXJbXX0sIGZpdEZ1bmN0aW9uOiBGaXRGdW5jdGlvbiwgZXJyb3JNb2RlbDogRml0RXJyb3JNb2RlbFR5cGUsXG4gIHBhcmFtZXRlckJvdW5kcz86IEZpdFBhcmFtQm91bmRzW10pOiBGaXRDdXJ2ZSB7XG4gIGNvbnN0IGN1cnZlRnVuY3Rpb24gPSBmaXRGdW5jdGlvbi55O1xuICBjb25zdCBwYXJhbVZhbHVlcyA9IGZpdEZ1bmN0aW9uLmdldEluaXRpYWxQYXJhbWV0ZXJzKGRhdGEueCwgZGF0YS55KTtcblxuICBjb25zdCBvZiA9IGNyZWF0ZU9iamVjdGl2ZUZ1bmN0aW9uKGVycm9yTW9kZWwpO1xuICBjb25zdCBmaXhlZDogbnVtYmVyW10gPSBbXTtcbiAgbGV0IG92ZXJMaW1pdHMgPSB0cnVlO1xuXG4gIHdoaWxlIChvdmVyTGltaXRzKSB7XG4gICAgY29uc3Qgb3B0aW1pemFibGUgPSBjcmVhdGVPcHRpbWl6YWJsZShkYXRhLCBjdXJ2ZUZ1bmN0aW9uLCBvZiwgZml4ZWQpO1xuICAgIGxpbWl0ZWRNZW1vcnlCRkdTKG9wdGltaXphYmxlLCBwYXJhbVZhbHVlcyk7XG4gICAgbGltaXRlZE1lbW9yeUJGR1Mob3B0aW1pemFibGUsIHBhcmFtVmFsdWVzKTtcblxuICAgIG92ZXJMaW1pdHMgPSBmYWxzZTtcbiAgICBpZiAoIXBhcmFtZXRlckJvdW5kcylcbiAgICAgIGJyZWFrO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwYXJhbWV0ZXJCb3VuZHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChwYXJhbWV0ZXJCb3VuZHNbaV0/Lm1heCAhPT0gdW5kZWZpbmVkICYmIHBhcmFtVmFsdWVzW2ldID4gcGFyYW1ldGVyQm91bmRzW2ldLm1heCEpIHtcbiAgICAgICAgb3ZlckxpbWl0cyA9IHRydWU7XG4gICAgICAgIGZpeGVkLnB1c2goaSk7XG4gICAgICAgIHBhcmFtVmFsdWVzW2ldID0gcGFyYW1ldGVyQm91bmRzW2ldLm1heCE7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgaWYgKHBhcmFtZXRlckJvdW5kc1tpXT8ubWluICE9PSB1bmRlZmluZWQgJiYgcGFyYW1WYWx1ZXNbaV0gPCBwYXJhbWV0ZXJCb3VuZHNbaV0ubWluISkge1xuICAgICAgICBvdmVyTGltaXRzID0gdHJ1ZTtcbiAgICAgICAgZml4ZWQucHVzaChpKTtcbiAgICAgICAgcGFyYW1WYWx1ZXNbaV0gPSBwYXJhbWV0ZXJCb3VuZHNbaV0ubWluITtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY29uc3QgZml0dGVkQ3VydmUgPSBnZXRGaXR0ZWRDdXJ2ZShjdXJ2ZUZ1bmN0aW9uLCBwYXJhbVZhbHVlcyk7XG5cbiAgcmV0dXJuIHtcbiAgICBmaXR0ZWRDdXJ2ZTogZml0dGVkQ3VydmUsXG4gICAgcGFyYW1ldGVyczogcGFyYW1WYWx1ZXMsXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRGaXR0ZWRDdXJ2ZShjdXJ2ZUZ1bmN0aW9uOiAocGFyYW1zOiBudW1iZXJbXSwgeDogbnVtYmVyKSA9PiBudW1iZXIsIHBhcmFtVmFsdWVzOiBudW1iZXJbXSk6XG4gKHg6IG51bWJlcikgPT4gbnVtYmVyIHtcbiAgcmV0dXJuICh4OiBudW1iZXIpID0+IHtcbiAgICByZXR1cm4gY3VydmVGdW5jdGlvbihwYXJhbVZhbHVlcywgeCk7XG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRDdXJ2ZUNvbmZpZGVuY2VJbnRlcnZhbHMoZGF0YToge3g6IG51bWJlcltdLCB5OiBudW1iZXJbXX0sIHBhcmFtVmFsdWVzOiBudW1iZXJbXSxcbiAgY3VydmVGdW5jdGlvbjogKHBhcmFtczogbnVtYmVyW10sIHg6IG51bWJlcikgPT4gbnVtYmVyLCBjb25maWRlbmNlTGV2ZWw6IG51bWJlciA9IDAuMDUsIGVycm9yTW9kZWw6IEZpdEVycm9yTW9kZWxUeXBlKTpcbiAgRml0Q29uZmlkZW5jZUludGVydmFscyB7XG4gIGNvbnN0IG9mID0gY3JlYXRlT2JqZWN0aXZlRnVuY3Rpb24oZXJyb3JNb2RlbCk7XG5cbiAgY29uc3QgZXJyb3IgPSBlcnJvck1vZGVsID09PSBGaXRFcnJvck1vZGVsLlBST1BPUlRJT05BTCA/XG4gICAgb2YoY3VydmVGdW5jdGlvbiwgZGF0YSwgcGFyYW1WYWx1ZXMpLm11bHQgOlxuICAgIG9mKGN1cnZlRnVuY3Rpb24sIGRhdGEsIHBhcmFtVmFsdWVzKS5jb25zdDtcblxuICBjb25zdCBxdWFudGlsZSA9IGpTdGF0Lm5vcm1hbC5pbnYoMSAtIGNvbmZpZGVuY2VMZXZlbC8yLCAwLCAxKTtcblxuICBjb25zdCB0b3AgPSAoeDogbnVtYmVyKSA9PiB7XG4gICAgY29uc3QgdmFsdWUgPSBjdXJ2ZUZ1bmN0aW9uKHBhcmFtVmFsdWVzLCB4KTtcbiAgICBpZiAoZXJyb3JNb2RlbCA9PT0gRml0RXJyb3JNb2RlbC5DT05TVEFOVClcbiAgICAgIHJldHVybiB2YWx1ZSArIHF1YW50aWxlICogZXJyb3I7XG4gICAgZWxzZVxuICAgICAgcmV0dXJuIHZhbHVlICsgcXVhbnRpbGUgKiBNYXRoLmFicyh2YWx1ZSkgKiBlcnJvcjtcbiAgfTtcblxuICBjb25zdCBib3R0b20gPSAoeDogbnVtYmVyKSA9PiB7XG4gICAgY29uc3QgdmFsdWUgPSBjdXJ2ZUZ1bmN0aW9uKHBhcmFtVmFsdWVzLCB4KTtcbiAgICBpZiAoZXJyb3JNb2RlbCA9PT0gRml0RXJyb3JNb2RlbC5DT05TVEFOVClcbiAgICAgIHJldHVybiB2YWx1ZSAtIHF1YW50aWxlICogZXJyb3I7XG4gICAgZWxzZVxuICAgICAgcmV0dXJuIHZhbHVlIC0gcXVhbnRpbGUgKiBNYXRoLmFicyh2YWx1ZSkgKiBlcnJvcjtcbiAgfTtcblxuICByZXR1cm4ge2NvbmZpZGVuY2VUb3A6IHRvcCwgY29uZmlkZW5jZUJvdHRvbTogYm90dG9tfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFN0YXRpc3RpY3MoZGF0YToge3g6IG51bWJlcltdLCB5OiBudW1iZXJbXX0sIHBhcmFtVmFsdWVzOiBudW1iZXJbXSxcbiAgY3VydmVGdW5jdGlvbjogKHBhcmFtczogbnVtYmVyW10sIHg6IG51bWJlcikgPT4gbnVtYmVyLCBzdGF0aXN0aWNzOiBib29sZWFuID0gdHJ1ZSk6IEZpdFN0YXRpc3RpY3Mge1xuICBjb25zdCBmaXR0ZWRDdXJ2ZSA9IGdldEZpdHRlZEN1cnZlKGN1cnZlRnVuY3Rpb24sIHBhcmFtVmFsdWVzKTtcblxuICByZXR1cm4ge1xuICAgIHJTcXVhcmVkOiBzdGF0aXN0aWNzID8gZ2V0RGV0Q29lZmYoZml0dGVkQ3VydmUsIGRhdGEpIDogdW5kZWZpbmVkLFxuICAgIGF1Yzogc3RhdGlzdGljcyA/IGdldEF1YyhmaXR0ZWRDdXJ2ZSwgZGF0YSkgOiB1bmRlZmluZWQsXG4gICAgaW50ZXJjZXB0WDogcGFyYW1WYWx1ZXNbMl0sXG4gICAgaW50ZXJjZXB0WTogZml0dGVkQ3VydmUocGFyYW1WYWx1ZXNbMl0pLFxuICAgIHNsb3BlOiBwYXJhbVZhbHVlc1sxXSxcbiAgICB0b3A6IHBhcmFtVmFsdWVzWzBdLFxuICAgIGJvdHRvbTogcGFyYW1WYWx1ZXNbM10sXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRJbnZlcnRlZEZ1bmN0aW9ucyhkYXRhOiB7eDogbnVtYmVyW10sIHk6IG51bWJlcltdfSwgcGFyYW1WYWx1ZXM6IG51bWJlcltdLFxuICBjb25maWRlbmNlTGV2ZWw6IG51bWJlciA9IDAuMDUsIHN0YXRpc3RpY3M6IGJvb2xlYW4gPSB0cnVlKTogRml0SW52ZXJ0ZWRGdW5jdGlvbnMgfCBudWxsIHtcbiAgY29uc3Qgc3R1ZGVudFEgPSBqU3RhdC5zdHVkZW50dC5pbnYoMSAtIGNvbmZpZGVuY2VMZXZlbCAvIDIsIGRhdGEueC5sZW5ndGggLSBwYXJhbVZhbHVlcy5sZW5ndGgpO1xuXG4gIGxldCBpbnY6ICh5OiBudW1iZXIpID0+IG51bWJlciA9ICh5OiBudW1iZXIpID0+IHtcbiAgICByZXR1cm4gMDtcbiAgfTtcbiAgbGV0IGludlRvcDogKHk6IG51bWJlcikgPT4gbnVtYmVyID0gKHk6IG51bWJlcikgPT4ge1xuICAgIHJldHVybiAwO1xuICB9O1xuICBsZXQgaW52Qm90dG9tOiAoeTogbnVtYmVyKSA9PiBudW1iZXIgPSAoeTogbnVtYmVyKSA9PiB7XG4gICAgcmV0dXJuIDA7XG4gIH07XG5cbiAgaWYgKHN0YXRpc3RpY3MpIHtcbiAgICBpbnYgPSAoeTogbnVtYmVyKSA9PiB7XG4gICAgICAvL3Nob3VsZCBjaGVjayBpZiBtb3JlIHRoYW4gYm90dG9tIGFuZCBsZXNzIHRoYW4gdG9wXG4gICAgICByZXR1cm4gcGFyYW1WYWx1ZXNbMl0gLyBNYXRoLnBvdygocGFyYW1WYWx1ZXNbMF0gLSB5KSAvICh5IC0gcGFyYW1WYWx1ZXNbM10pLCAxIC8gcGFyYW1WYWx1ZXNbMV0pO1xuICAgIH07XG5cbiAgICBjb25zdCBlcnJvciA9IGdldEludkVycm9yKGludiwgZGF0YSk7XG5cbiAgICBpbnZUb3AgPSAoeTogbnVtYmVyKSA9PiB7XG4gICAgICBjb25zdCB2YWx1ZSA9IGludih5KTtcbiAgICAgIHJldHVybiB2YWx1ZSArIHN0dWRlbnRRICogZXJyb3IgLyBNYXRoLnNxcnQoZGF0YS55Lmxlbmd0aCk7XG4gICAgfTtcblxuICAgIGludkJvdHRvbSA9ICh5OiBudW1iZXIpID0+IHtcbiAgICAgIGNvbnN0IHZhbHVlID0gaW52KHkpO1xuICAgICAgcmV0dXJuIHZhbHVlIC0gc3R1ZGVudFEgKiBlcnJvciAvIE1hdGguc3FydChkYXRhLnkubGVuZ3RoKTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGludmVydGVkOiBpbnYsXG4gICAgICBpbnZlcnRlZFRvcDogaW52VG9wLFxuICAgICAgaW52ZXJ0ZWRCb3R0b206IGludkJvdHRvbSxcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzaWdtb2lkKHBhcmFtczogbnVtYmVyW10sIHg6IG51bWJlcik6IG51bWJlciB7XG4gIGNvbnN0IEEgPSBwYXJhbXNbMF07XG4gIGNvbnN0IEIgPSBwYXJhbXNbMV07XG4gIGNvbnN0IEMgPSBwYXJhbXNbMl07XG4gIGNvbnN0IEQgPSBwYXJhbXNbM107XG4gIHJldHVybiAoRCArIChBIC0gRCkgLyAoMSArIE1hdGgucG93KDEwLCAoeCAtIEMpICogQikpKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEF1YyhmaXR0ZWRDdXJ2ZTogKHg6IG51bWJlcikgPT4gbnVtYmVyLCBkYXRhOiB7eDogbnVtYmVyW10sIHk6IG51bWJlcltdfSk6IG51bWJlciB7XG4gIGxldCBhdWMgPSAwO1xuXG4gIGNvbnN0IG1pbiA9IE1hdGgubWluKC4uLmRhdGEueCk7XG4gIGNvbnN0IG1heCA9IE1hdGgubWF4KC4uLmRhdGEueCk7XG4gIGNvbnN0IGludGVncmF0aW9uU3RlcCA9IChtYXggLSBtaW4pIC8gMTAwMDtcblxuICBmb3IgKGxldCB4ID0gbWluOyB4IDwgbWF4OyB4Kz0gaW50ZWdyYXRpb25TdGVwKVxuICAgIGF1YyArPSBpbnRlZ3JhdGlvblN0ZXAgKiBmaXR0ZWRDdXJ2ZSh4KTtcblxuICByZXR1cm4gYXVjO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGV0Q29lZmYoZml0dGVkQ3VydmU6ICh4OiBudW1iZXIpID0+IG51bWJlciwgZGF0YToge3g6IG51bWJlcltdLCB5OiBudW1iZXJbXX0pOiBudW1iZXIge1xuICBsZXQgc3NSZXMgPSAwO1xuICBsZXQgc3NUb3QgPSAwO1xuXG4gIGNvbnN0IHlNZWFuID0galN0YXQubWVhbihkYXRhLnkpO1xuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgZGF0YS54Lmxlbmd0aDsgaSsrKSB7XG4gICAgc3NSZXMgKz0gTWF0aC5wb3coZGF0YS55W2ldIC0gZml0dGVkQ3VydmUoZGF0YS54W2ldKSwgMik7XG4gICAgc3NUb3QgKz0gTWF0aC5wb3coZGF0YS55W2ldIC0geU1lYW4sIDIpO1xuICB9XG5cbiAgcmV0dXJuIDEgLSBzc1JlcyAvIHNzVG90O1xufVxuXG5mdW5jdGlvbiBnZXRJbnZFcnJvcih0YXJnZXRGdW5jOiAoeTogbnVtYmVyKSA9PiBudW1iZXIsIGRhdGE6IHt5OiBudW1iZXJbXSwgeDogbnVtYmVyW119KTogbnVtYmVyIHtcbiAgbGV0IHNpZ21hID0gMDtcbiAgbGV0IHNpZ21hU3EgPSAwO1xuXG4gIGNvbnN0IHJlc2lkdWVzU3F1YXJlcyA9IG5ldyBGbG9hdDMyQXJyYXkoZGF0YS55Lmxlbmd0aCk7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgZGF0YS55Lmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3Qgb2JzID0gZGF0YS54W2ldO1xuICAgIGNvbnN0IHByZWQgPSB0YXJnZXRGdW5jKGRhdGEueVtpXSk7XG4gICAgcmVzaWR1ZXNTcXVhcmVzW2ldID0gTWF0aC5wb3cob2JzIC0gcHJlZCwgMik7XG4gIH1cblxuICBmb3IgKGxldCBpID0gMDsgaSA8IHJlc2lkdWVzU3F1YXJlcy5sZW5ndGg7IGkrKylcbiAgICBzaWdtYVNxICs9IHJlc2lkdWVzU3F1YXJlc1tpXTtcblxuICBzaWdtYVNxIC89IHJlc2lkdWVzU3F1YXJlcy5sZW5ndGg7XG4gIHNpZ21hID0gTWF0aC5zcXJ0KHNpZ21hU3EpO1xuXG4gIHJldHVybiBzaWdtYTtcbn1cblxuZnVuY3Rpb24gZ2V0T2JqZWN0aXZlRGVyaXZhdGl2ZShvZjogT2JqZWN0aXZlRnVuY3Rpb24sIGN1cnZlRnVuY3Rpb246IChwYXJhbXM6IG51bWJlcltdLCB4OiBudW1iZXIpID0+IG51bWJlcixcbiAgZGF0YToge3g6IG51bWJlcltdLCB5OiBudW1iZXJbXX0sIHBhcmFtczogbnVtYmVyW10sIHNlbGVjdGVkUGFyYW06IG51bWJlcik6IG51bWJlciB7XG4gIGNvbnN0IHN0ZXAgPSAocGFyYW1zW3NlbGVjdGVkUGFyYW1dICogMC4wMDAxKSA9PT0gMCA/IDAuMDAxIDogKHBhcmFtc1tzZWxlY3RlZFBhcmFtXSAqIDAuMDAwMSk7XG4gIGNvbnN0IHBhcmFtc1RvcDogbnVtYmVyW10gPSBbXTtcbiAgY29uc3QgcGFyYW1zQm90dG9tOiBudW1iZXJbXSA9IFtdO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IHBhcmFtcy5sZW5ndGg7IGkrKykge1xuICAgIGlmIChpID09PSBzZWxlY3RlZFBhcmFtKSB7XG4gICAgICBwYXJhbXNUb3AucHVzaChwYXJhbXNbaV0gKyBzdGVwKTtcbiAgICAgIHBhcmFtc0JvdHRvbS5wdXNoKHBhcmFtc1tpXSAtIHN0ZXApO1xuICAgIH0gZWxzZSB7XG4gICAgICBwYXJhbXNUb3AucHVzaChwYXJhbXNbaV0pO1xuICAgICAgcGFyYW1zQm90dG9tLnB1c2gocGFyYW1zW2ldKTtcbiAgICB9XG4gIH1cbiAgY29uc3QgZHJ2VG9wID0gb2YoY3VydmVGdW5jdGlvbiwgZGF0YSwgcGFyYW1zVG9wKS52YWx1ZTtcbiAgY29uc3QgZHJ2Qm90dG9tID0gb2YoY3VydmVGdW5jdGlvbiwgZGF0YSwgcGFyYW1zQm90dG9tKS52YWx1ZTtcblxuICByZXR1cm4gKGRydlRvcCAtIGRydkJvdHRvbSkgLyAoMiAqIHN0ZXApO1xufVxuXG5mdW5jdGlvbiBvYmplY3RpdmVOb3JtYWxDb25zdGFudCh0YXJnZXRGdW5jOiAocGFyYW1zOiBudW1iZXJbXSwgeDogbnVtYmVyKSA9PiBudW1iZXIsXG4gIGRhdGE6IHt5OiBudW1iZXJbXSwgeDogbnVtYmVyW119LCBwYXJhbXM6IG51bWJlcltdKTogTGlrZWxpaG9vZCB7XG4gIC8vYXNzdXJlIG9ic2VydmVkIGFuZCBhcmdzIHNhbWUgbGVuZ3RoXG4gIGNvbnN0IHBpID0gTWF0aC5QSTtcbiAgbGV0IHNpZ21hID0gMDtcbiAgbGV0IHNpZ21hU3EgPSAwO1xuICBsZXQgbGlrZWxpaG9vZCA9IDA7XG5cbiAgY29uc3QgcmVzaWR1ZXNTcXVhcmVzID0gbmV3IEZsb2F0MzJBcnJheShkYXRhLngubGVuZ3RoKTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBkYXRhLngubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCBvYnMgPSBkYXRhLnlbaV07XG4gICAgY29uc3QgcHJlZCA9IHRhcmdldEZ1bmMocGFyYW1zLCBkYXRhLnhbaV0pO1xuICAgIHJlc2lkdWVzU3F1YXJlc1tpXSA9IE1hdGgucG93KG9icyAtIHByZWQsIDIpO1xuICB9XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCByZXNpZHVlc1NxdWFyZXMubGVuZ3RoOyBpKyspXG4gICAgc2lnbWFTcSArPSByZXNpZHVlc1NxdWFyZXNbaV07XG5cbiAgc2lnbWFTcSAvPSByZXNpZHVlc1NxdWFyZXMubGVuZ3RoO1xuICBzaWdtYSA9IE1hdGguc3FydChzaWdtYVNxKTtcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IHJlc2lkdWVzU3F1YXJlcy5sZW5ndGg7IGkrKylcbiAgICBsaWtlbGlob29kICs9IHJlc2lkdWVzU3F1YXJlc1tpXSAvIHNpZ21hU3EgKyBNYXRoLmxvZygyICogcGkgKiBzaWdtYVNxKTtcblxuICByZXR1cm4ge3ZhbHVlOiAtbGlrZWxpaG9vZCwgY29uc3Q6IHNpZ21hLCBtdWx0OiAwfTtcbn1cblxuZnVuY3Rpb24gb2JqZWN0aXZlTm9ybWFsUHJvcG9ydGlvbmFsKHRhcmdldEZ1bmM6IChwYXJhbXM6IG51bWJlcltdLCB4OiBudW1iZXIpID0+IG51bWJlcixcbiAgZGF0YToge3k6IG51bWJlcltdLCB4OiBudW1iZXJbXX0sIHBhcmFtczogbnVtYmVyW10pOiBMaWtlbGlob29kIHtcbiAgLy9hc3N1cmUgb2JzZXJ2ZWQgYW5kIGFyZ3Mgc2FtZSBsZW5ndGhcbiAgY29uc3QgcGkgPSBNYXRoLlBJO1xuICBsZXQgc2lnbWEgPSAwO1xuICBsZXQgc2lnbWFTcSA9IDA7XG4gIGxldCBsaWtlbGlob29kID0gMDtcblxuICBjb25zdCByZXNpZHVlc1NxdWFyZXMgPSBuZXcgRmxvYXQzMkFycmF5KGRhdGEueC5sZW5ndGgpO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGRhdGEueC5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IG9icyA9IGRhdGEueVtpXTtcbiAgICBjb25zdCBwcmVkID0gdGFyZ2V0RnVuYyhwYXJhbXMsIGRhdGEueFtpXSk7XG4gICAgcmVzaWR1ZXNTcXVhcmVzW2ldID0gTWF0aC5wb3cob2JzIC0gcHJlZCwgMik7XG4gIH1cblxuICBmb3IgKGxldCBpID0gMDsgaSA8IHJlc2lkdWVzU3F1YXJlcy5sZW5ndGg7IGkrKylcbiAgICBzaWdtYVNxICs9IHJlc2lkdWVzU3F1YXJlc1tpXTtcblxuICBzaWdtYVNxIC89IHJlc2lkdWVzU3F1YXJlcy5sZW5ndGg7XG4gIHNpZ21hID0gTWF0aC5zcXJ0KHNpZ21hU3EpO1xuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgcmVzaWR1ZXNTcXVhcmVzLmxlbmd0aDsgaSsrKVxuICAgIGxpa2VsaWhvb2QgKz0gcmVzaWR1ZXNTcXVhcmVzW2ldIC8gc2lnbWFTcSArIE1hdGgubG9nKDIgKiBwaSAqIHNpZ21hU3EpO1xuXG4gIHJldHVybiB7dmFsdWU6IC1saWtlbGlob29kLCBjb25zdDogc2lnbWEsIG11bHQ6IDB9O1xufVxuIl19
@@ -6,8 +6,10 @@ export declare type LogOptions = {
6
6
  };
7
7
  /** Creates default {@link IFitChartData} object */
8
8
  export declare function createDefaultChartData(): IFitChartData;
9
+ /** Returns existing, or creates new dataframe default chart options. */
10
+ export declare function getDataFrameChartOptions(df: DG.DataFrame): IFitChartData;
9
11
  /** Returns existing, or creates new column default chart options. */
10
- export declare function getColumnChartOptions(gridColumn: DG.GridColumn): IFitChartData;
12
+ export declare function getColumnChartOptions(column: DG.Column): IFitChartData;
11
13
  /** Returns points arrays from {@link IFitPoint} array */
12
14
  export declare function getPointsArrays(points: IFitPoint[]): {
13
15
  xs: number[];
@@ -22,7 +24,7 @@ export declare function getCurve(series: IFitSeries, fitFunc: FitFunction): (x:
22
24
  /** Fits the series data according to the series fitting settings */
23
25
  export declare function fitSeries(series: IFitSeries, fitFunc: FitFunction, logOptions?: LogOptions): FitCurve;
24
26
  /** Returns series confidence interval functions */
25
- export declare function getSeriesConfidenceInterval(series: IFitSeries, fitFunc: FitFunction, userParamsFlag: boolean): FitConfidenceIntervals;
27
+ export declare function getSeriesConfidenceInterval(series: IFitSeries, fitFunc: FitFunction, userParamsFlag: boolean, logOptions?: LogOptions): FitConfidenceIntervals;
26
28
  /** Returns series statistics */
27
29
  export declare function getSeriesStatistics(series: IFitSeries, fitFunc: FitFunction): FitStatistics;
28
30
  //# sourceMappingURL=fit-data.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"fit-data.d.ts","sourceRoot":"","sources":["fit-data.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAEtC,OAAO,EAKL,WAAW,EAEX,aAAa,EACb,sBAAsB,EACtB,QAAQ,EAER,SAAS,EACT,aAAa,EACb,UAAU,EAMX,MAAM,aAAa,CAAC;AAErB,oBAAY,UAAU,GAAG;IACvB,IAAI,EAAE,OAAO,GAAG,SAAS,CAAC;IAC1B,IAAI,EAAE,OAAO,GAAG,SAAS,CAAA;CAC1B,CAAC;AAcF,mDAAmD;AACnD,wBAAgB,sBAAsB,IAAI,aAAa,CAKtD;AAED,qEAAqE;AACrE,wBAAgB,qBAAqB,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,GAAG,aAAa,CAE9E;AAED,yDAAyD;AACzD,wBAAgB,eAAe,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG;IAAC,EAAE,EAAE,MAAM,EAAE,CAAC;IAAC,EAAE,EAAE,MAAM,EAAE,CAAA;CAAC,CAQjF;AA4DD,4DAA4D;AAC5D,wBAAgB,cAAc,CAAC,SAAS,EAAE,aAAa,GAAG,EAAE,CAAC,IAAI,CAahE;AAED,kCAAkC;AAClC,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,UAAU,GAAG,WAAW,CAEpE;AAED,kGAAkG;AAClG,wBAAgB,QAAQ,CAAC,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,WAAW,GAAG,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,CAExF;AAED,oEAAoE;AACpE,wBAAgB,SAAS,CAAC,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,WAAW,EAAE,UAAU,CAAC,EAAE,UAAU,GAAG,QAAQ,CAMrG;AAED,mDAAmD;AACnD,wBAAgB,2BAA2B,CAAC,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,WAAW,EAClF,cAAc,EAAE,OAAO,GAAG,sBAAsB,CAOjD;AAED,gCAAgC;AAChC,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,WAAW,GAAG,aAAa,CAM3F"}
1
+ {"version":3,"file":"fit-data.d.ts","sourceRoot":"","sources":["fit-data.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAEtC,OAAO,EAKL,WAAW,EAEX,aAAa,EACb,sBAAsB,EACtB,QAAQ,EAER,SAAS,EACT,aAAa,EACb,UAAU,EAOX,MAAM,aAAa,CAAC;AAErB,oBAAY,UAAU,GAAG;IACvB,IAAI,EAAE,OAAO,GAAG,SAAS,CAAC;IAC1B,IAAI,EAAE,OAAO,GAAG,SAAS,CAAA;CAC1B,CAAC;AAcF,mDAAmD;AACnD,wBAAgB,sBAAsB,IAAI,aAAa,CAKtD;AAED,wEAAwE;AACxE,wBAAgB,wBAAwB,CAAC,EAAE,EAAE,EAAE,CAAC,SAAS,GAAG,aAAa,CAExE;AAED,qEAAqE;AACrE,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,GAAG,aAAa,CAEtE;AAED,yDAAyD;AACzD,wBAAgB,eAAe,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG;IAAC,EAAE,EAAE,MAAM,EAAE,CAAC;IAAC,EAAE,EAAE,MAAM,EAAE,CAAA;CAAC,CAQjF;AAgED,4DAA4D;AAC5D,wBAAgB,cAAc,CAAC,SAAS,EAAE,aAAa,GAAG,EAAE,CAAC,IAAI,CAahE;AAED,kCAAkC;AAClC,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,UAAU,GAAG,WAAW,CAEpE;AAED,kGAAkG;AAClG,wBAAgB,QAAQ,CAAC,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,WAAW,GAAG,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,CAExF;AAED,oEAAoE;AACpE,wBAAgB,SAAS,CAAC,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,WAAW,EAAE,UAAU,CAAC,EAAE,UAAU,GAAG,QAAQ,CAOrG;AAED,mDAAmD;AACnD,wBAAgB,2BAA2B,CAAC,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,WAAW,EAClF,cAAc,EAAE,OAAO,EAAE,UAAU,CAAC,EAAE,UAAU,GAAG,sBAAsB,CAS1E;AAED,gCAAgC;AAChC,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,WAAW,GAAG,aAAa,CAM3F"}
@@ -18,11 +18,17 @@ export function createDefaultChartData() {
18
18
  seriesOptions: createFromProperties(fitSeriesProperties),
19
19
  };
20
20
  }
21
+ /** Returns existing, or creates new dataframe default chart options. */
22
+ export function getDataFrameChartOptions(df) {
23
+ var _a;
24
+ var _b;
25
+ return JSON.parse((_a = (_b = df.tags)[TAG_FIT]) !== null && _a !== void 0 ? _a : (_b[TAG_FIT] = JSON.stringify(createDefaultChartData())));
26
+ }
21
27
  /** Returns existing, or creates new column default chart options. */
22
- export function getColumnChartOptions(gridColumn) {
28
+ export function getColumnChartOptions(column) {
23
29
  var _a;
24
30
  var _b;
25
- return (_a = (_b = gridColumn.temp)[TAG_FIT]) !== null && _a !== void 0 ? _a : (_b[TAG_FIT] = createDefaultChartData());
31
+ return JSON.parse((_a = (_b = column.tags)[TAG_FIT]) !== null && _a !== void 0 ? _a : (_b[TAG_FIT] = JSON.stringify(createDefaultChartData())));
26
32
  }
27
33
  /** Returns points arrays from {@link IFitPoint} array */
28
34
  export function getPointsArrays(points) {
@@ -71,17 +77,21 @@ function changeBounds(bounds, chartOptions) {
71
77
  let y = bounds.y;
72
78
  let width = bounds.width;
73
79
  let height = bounds.height;
74
- if (chartOptions.minX !== undefined && chartOptions.minX > 0) {
80
+ if (chartOptions.minX !== undefined && chartOptions.minX !== null &&
81
+ ((!chartOptions.logX) || (chartOptions.logX && chartOptions.minX > 0))) {
75
82
  width += x - chartOptions.minX;
76
83
  x = chartOptions.minX;
77
84
  }
78
- if (chartOptions.maxX !== undefined && chartOptions.maxX > 0)
85
+ if (chartOptions.maxX !== undefined && chartOptions.maxX !== null &&
86
+ ((!chartOptions.logX) || (chartOptions.logX && chartOptions.maxX > 0)))
79
87
  width += chartOptions.maxX - (x + width);
80
- if (chartOptions.minY !== undefined) {
88
+ if (chartOptions.minY !== undefined && chartOptions.minY !== null &&
89
+ ((!chartOptions.logY) || (chartOptions.logY && chartOptions.minY > 0))) {
81
90
  height += y - chartOptions.minY;
82
91
  y = chartOptions.minY;
83
92
  }
84
- if (chartOptions.maxY !== undefined)
93
+ if (chartOptions.maxY !== undefined && chartOptions.maxY !== null &&
94
+ ((!chartOptions.logY) || (chartOptions.logY && chartOptions.maxY > 0)))
85
95
  height += chartOptions.maxY - (y + height);
86
96
  return new DG.Rect(x, y, width, height);
87
97
  }
@@ -111,20 +121,23 @@ export function getCurve(series, fitFunc) {
111
121
  }
112
122
  /** Fits the series data according to the series fitting settings */
113
123
  export function fitSeries(series, fitFunc, logOptions) {
124
+ var _a;
114
125
  const data = { x: series.points.filter((p) => !p.outlier).map((p) => (logOptions === null || logOptions === void 0 ? void 0 : logOptions.logX) ? Math.log10(p.x) : p.x),
115
126
  y: series.points.filter((p) => !p.outlier).map((p) => (logOptions === null || logOptions === void 0 ? void 0 : logOptions.logY) ? Math.log10(p.y) : p.y) };
116
127
  if (series.parameterBounds && (logOptions === null || logOptions === void 0 ? void 0 : logOptions.logX))
117
128
  series.parameterBounds[2] = logIC50ParameterBounds(series.parameterBounds[2]);
118
- return fitData(getMedianPoints(data), fitFunc, FitErrorModel.Constant, series.parameterBounds);
129
+ return fitData(getMedianPoints(data), fitFunc, (_a = series.errorModel) !== null && _a !== void 0 ? _a : FitErrorModel.CONSTANT, series.parameterBounds);
119
130
  }
120
131
  /** Returns series confidence interval functions */
121
- export function getSeriesConfidenceInterval(series, fitFunc, userParamsFlag) {
122
- const data = userParamsFlag ? { x: series.points.map((p) => p.x), y: series.points.map((p) => p.y) } :
123
- { x: series.points.filter((p) => !p.outlier).map((p) => p.x),
124
- y: series.points.filter((p) => !p.outlier).map((p) => p.y) };
132
+ export function getSeriesConfidenceInterval(series, fitFunc, userParamsFlag, logOptions) {
133
+ var _a;
134
+ const data = userParamsFlag ? { x: series.points.map((p) => (logOptions === null || logOptions === void 0 ? void 0 : logOptions.logX) ? Math.log10(p.x) : p.x),
135
+ y: series.points.map((p) => (logOptions === null || logOptions === void 0 ? void 0 : logOptions.logY) ? Math.log10(p.y) : p.y) } :
136
+ { x: series.points.filter((p) => !p.outlier).map((p) => (logOptions === null || logOptions === void 0 ? void 0 : logOptions.logX) ? Math.log10(p.x) : p.x),
137
+ y: series.points.filter((p) => !p.outlier).map((p) => (logOptions === null || logOptions === void 0 ? void 0 : logOptions.logY) ? Math.log10(p.y) : p.y) };
125
138
  if (!series.parameters)
126
139
  series.parameters = fitSeries(series, fitFunc).parameters;
127
- return getCurveConfidenceIntervals(data, series.parameters, fitFunc.y, 0.05, FitErrorModel.Constant);
140
+ return getCurveConfidenceIntervals(data, series.parameters, fitFunc.y, 0.05, (_a = series.errorModel) !== null && _a !== void 0 ? _a : FitErrorModel.CONSTANT);
128
141
  }
129
142
  /** Returns series statistics */
130
143
  export function getSeriesStatistics(series, fitFunc) {
@@ -134,4 +147,4 @@ export function getSeriesStatistics(series, fitFunc) {
134
147
  series.parameters = fitSeries(series, fitFunc).parameters;
135
148
  return getStatistics(data, series.parameters, fitFunc.y, true);
136
149
  }
137
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZml0LWRhdGEuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJmaXQtZGF0YS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxnQ0FBZ0M7QUFDaEMsT0FBTyxLQUFLLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUV0QyxPQUFPLEVBQ0wsYUFBYSxFQUNiLE9BQU8sRUFDUCwyQkFBMkIsRUFDM0IsYUFBYSxFQUViLGNBQWMsRUFJZCxzQkFBc0IsRUFJdEIsbUJBQW1CLEVBQ25CLHNCQUFzQixFQUN0QixPQUFPLEdBR1IsTUFBTSxhQUFhLENBQUM7QUFRckIsaUZBQWlGO0FBQ2pGLFNBQVMsb0JBQW9CLENBQUMsVUFBeUI7SUFDckQsTUFBTSxDQUFDLEdBQVEsRUFBRSxDQUFDO0lBQ2xCLEtBQUssTUFBTSxDQUFDLElBQUksVUFBVSxFQUFFO1FBQzFCLElBQUksQ0FBQyxDQUFDLFlBQVksS0FBSyxJQUFJO1lBQ3pCLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFlBQVksQ0FBQztLQUM5QjtJQUNELE9BQU8sQ0FBQyxDQUFDO0FBQ1gsQ0FBQztBQUVELHFIQUFxSDtBQUNySCxtREFBbUQ7QUFDbkQsTUFBTSxVQUFVLHNCQUFzQjtJQUNwQyxPQUFPO1FBQ0wsWUFBWSxFQUFFLG9CQUFvQixDQUFDLHNCQUFzQixDQUFDO1FBQzFELGFBQWEsRUFBRSxvQkFBb0IsQ0FBQyxtQkFBbUIsQ0FBQztLQUN6RCxDQUFDO0FBQ0osQ0FBQztBQUVELHFFQUFxRTtBQUNyRSxNQUFNLFVBQVUscUJBQXFCLENBQUMsVUFBeUI7OztJQUM3RCxtQkFBTyxVQUFVLENBQUMsSUFBSSxFQUFDLE9BQU8sd0NBQVAsT0FBTyxJQUFNLHNCQUFzQixFQUFFLEVBQUM7QUFDL0QsQ0FBQztBQUVELHlEQUF5RDtBQUN6RCxNQUFNLFVBQVUsZUFBZSxDQUFDLE1BQW1CO0lBQ2pELE1BQU0sRUFBRSxHQUFhLEVBQUUsQ0FBQztJQUN4QixNQUFNLEVB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Q0FBQztBQUNqRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgdmFsaWQtanNkb2MgKi9cbmltcG9ydCAqIGFzIERHIGZyb20gJ2RhdGFncm9rLWFwaS9kZyc7XG5cbmltcG9ydCB7XG4gIEZpdEVycm9yTW9kZWwsXG4gIGZpdERhdGEsXG4gIGdldEN1cnZlQ29uZmlkZW5jZUludGVydmFscyxcbiAgZ2V0U3RhdGlzdGljcyxcbiAgRml0RnVuY3Rpb24sXG4gIGdldEZpdHRlZEN1cnZlLFxuICBGaXRTdGF0aXN0aWNzLFxuICBGaXRDb25maWRlbmNlSW50ZXJ2YWxzLFxuICBGaXRDdXJ2ZSxcbiAgZ2V0T3JDcmVhdGVGaXRGdW5jdGlvbixcbiAgSUZpdFBvaW50LFxuICBJRml0Q2hhcnREYXRhLFxuICBJRml0U2VyaWVzLFxuICBmaXRTZXJpZXNQcm9wZXJ0aWVzLFxuICBmaXRDaGFydERhdGFQcm9wZXJ0aWVzLFxuICBUQUdfRklULFxuICBGaXRQYXJhbUJvdW5kcyxcbiAgSUZpdENoYXJ0T3B0aW9ucyxcbn0gZnJvbSAnLi9maXQtY3VydmUnO1xuXG5leHBvcnQgdHlwZSBMb2dPcHRpb25zID0ge1xuICBsb2dYOiBib29sZWFuIHwgdW5kZWZpbmVkLFxuICBsb2dZOiBib29sZWFuIHwgdW5kZWZpbmVkXG59O1xuXG5cbi8qKiBDcmVhdGVzIG5ldyBvYmplY3Qgd2l0aCB0aGUgZGVmYXVsdCB2YWx1ZXMgc3BlY2lmaWVkIGluIHtAbGluayBwcm9wZXJ0aWVzfSAqL1xuZnVuY3Rpb24gY3JlYXRlRnJvbVByb3BlcnRpZXMocHJvcGVydGllczogREcuUHJvcGVydHlbXSk6IGFueSB7XG4gIGNvbnN0IG86IGFueSA9IHt9O1xuICBmb3IgKGNvbnN0IHAgb2YgcHJvcGVydGllcykge1xuICAgIGlmIChwLmRlZmF1bHRWYWx1ZSAhPT0gbnVsbClcbiAgICAgIG9bcC5uYW1lXSA9IHAuZGVmYXVsdFZhbHVlO1xuICB9XG4gIHJldHVybiBvO1xufVxuXG4vLyBUT0RPOiBzZXQgY29sdW1uIHdpdGggZml0IHJlYWRvbmx5IHZhbHVlIChpbiBkZXRlY3RvcnMpIC0gdHJ5IHRvIG9ubHkgc2hvdyBjaGFydCAtIHJlbW92ZSBlZGl0YWJsZSBvciBwcmV2ZW50IGl0Pz9cbi8qKiBDcmVhdGVzIGRlZmF1bHQge0BsaW5rIElGaXRDaGFydERhdGF9IG9iamVjdCAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZURlZmF1bHRDaGFydERhdGEoKTogSUZpdENoYXJ0RGF0YSB7XG4gIHJldHVybiB7XG4gICAgY2hhcnRPcHRpb25zOiBjcmVhdGVGcm9tUHJvcGVydGllcyhmaXRDaGFydERhdGFQcm9wZXJ0aWVzKSxcbiAgICBzZXJpZXNPcHRpb25zOiBjcmVhdGVGcm9tUHJvcGVydGllcyhmaXRTZXJpZXNQcm9wZXJ0aWVzKSxcbiAgfTtcbn1cblxuLyoqIFJldHVybnMgZXhpc3RpbmcsIG9yIGNyZWF0ZXMgbmV3IGNvbHVtbiBkZWZhdWx0IGNoYXJ0IG9wdGlvbnMuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q29sdW1uQ2hhcnRPcHRpb25zKGdyaWRDb2x1bW46IERHLkdyaWRDb2x1bW4pOiBJRml0Q2hhcnREYXRhIHtcbiAgcmV0dXJuIGdyaWRDb2x1bW4udGVtcFtUQUdfRklUXSA/Pz0gY3JlYXRlRGVmYXVsdENoYXJ0RGF0YSgpO1xufVxuXG4vKiogUmV0dXJucyBwb2ludHMgYXJyYXlzIGZyb20ge0BsaW5rIElGaXRQb2ludH0gYXJyYXkgKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRQb2ludHNBcnJheXMocG9pbnRzOiBJRml0UG9pbnRbXSk6IHt4czogbnVtYmVyW10sIHlzOiBudW1iZXJbXX0ge1xuICBjb25zdCB4czogbnVtYmVyW10gPSBbXTtcbiAgY29uc3QgeXM6IG51bWJlcltdID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgcG9pbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgeHNbaV0gPSBwb2ludHNbaV0ueDtcbiAgICB5c1tpXSA9IHBvaW50c1tpXS55O1xuICB9XG4gIHJldHVybiB7eHM6IHhzLCB5czogeXN9O1xufVxuXG4vKiogUmV0dXJucyBtZWRpYW4gcG9pbnRzIGZyb20gd2l0aGluIG11bHRpcGxlIHBvaW50cyB3aXRoIHRoZSBzYW1lIHguICovXG5mdW5jdGlvbiBnZXRNZWRpYW5Qb2ludHMoZGF0YToge3g6IG51bWJlcltdLCB5OiBudW1iZXJbXX0pOiB7eDogbnVtYmVyW10sIHk6IG51bWJlcltdfSB7XG4gIGNvbnN0IG1lZGlhblBvaW50czoge3g6IG51bWJlcltdLCB5OiBudW1iZXJbXX0gPSB7eDogW10sIHk6IFtdfTtcbiAgY29uc3QgY3VycmVudFBvaW50czoge3g6IG51bWJlcltdLCB5OiBudW1iZXJbXX0gPSB7eDogW2RhdGEueFswXV0sIHk6IFtkYXRhLnlbMF1dfTtcbiAgZm9yIChsZXQgaSA9IDE7IGkgPCBkYXRhLngubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoZGF0YS54W2ldID09PSBjdXJyZW50UG9pbnRzLnhbMF0pIHtcbiAgICAgIGN1cnJlbnRQb2ludHMueFtjdXJyZW50UG9pbnRzLngubGVuZ3RoXSA9IGRhdGEueFtpXTtcbiAgICAgIGN1cnJlbnRQb2ludHMueVtjdXJyZW50UG9pbnRzLnkubGVuZ3RoXSA9IGRhdGEueVtpXTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBjb25zdCBtaWQgPSBNYXRoLmZsb29yKGN1cnJlbnRQb2ludHMueS5sZW5ndGggLyAyKTtcbiAgICBjb25zdCBzb3J0ZWRQb2ludHMgPSBjdXJyZW50UG9pbnRzLnkuc29ydCgoYSwgYikgPT4gYSAtIGIpO1xuICAgIGNvbnN0IG1lZGlhbiA9IHNvcnRlZFBvaW50cy5sZW5ndGggJSAyID09PSAwID8gKHNvcnRlZFBvaW50c1ttaWQgLSAxXSArIHNvcnRlZFBvaW50c1ttaWRdKSAvIDIgOiBzb3J0ZWRQb2ludHNbbWlkXTtcblxuICAgIG1lZGlhblBvaW50cy54W21lZGlhblBvaW50cy54Lmxlbmd0aF0gPSBjdXJyZW50UG9pbnRzLnhbMF07XG4gICAgbWVkaWFuUG9pbnRzLnlbbWVkaWFuUG9pbnRzLnkubGVuZ3RoXSA9IG1lZGlhbjtcbiAgICBjdXJyZW50UG9pbnRzLnggPSBbZGF0YS54W2ldXTtcbiAgICBjdXJyZW50UG9pbnRzLnkgPSBbZGF0YS55W2ldXTtcbiAgfVxuXG4gIHJldHVybiBtZWRpYW5Qb2ludHM7XG59XG5cbi8qKiBSZXR1cm5zIGxvZ2FyaXRobWljIElDNTAgcGFyYW1ldGVyIGJvdW5kcy4gKi9cbmZ1bmN0aW9uIGxvZ0lDNTBQYXJhbWV0ZXJCb3VuZHMoaWM1MEJvdW5kczogRml0UGFyYW1Cb3VuZHMpOiBGaXRQYXJhbUJvdW5kcyB7XG4gIGlmIChpYzUwQm91bmRzKSB7XG4gICAgaWYgKGljNTBCb3VuZHMubWF4ICE9PSB1bmRlZmluZWQpXG4gICAgICBpYzUwQm91bmRzLm1heCA9IE1hdGgubG9nMTAoaWM1MEJvdW5kcy5tYXgpO1xuICAgIGlmIChpYzUwQm91bmRzLm1pbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpYzUwQm91bmRzLm1pbiA9IGljNTBCb3VuZHMubWluID09PSAwID9cbiAgICAgICAgLU51bWJlci5NQVhfVkFMVUUgOiBNYXRoLmxvZzEwKGljNTBCb3VuZHMubWluKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGljNTBCb3VuZHM7XG59XG5cbmZ1bmN0aW9uIGNoYW5nZUJvdW5kcyhib3VuZHM6IERHLlJlY3QsIGNoYXJ0T3B0aW9uczogSUZpdENoYXJ0T3B0aW9ucyk6IERHLlJlY3Qge1xuICBsZXQgeCA9IGJvdW5kcy54O1xuICBsZXQgeSA9IGJvdW5kcy55O1xuICBsZXQgd2lkdGggPSBib3VuZHMud2lkdGg7XG4gIGxldCBoZWlnaHQgPSBib3VuZHMuaGVpZ2h0O1xuXG4gIGlmIChjaGFydE9wdGlvbnMubWluWCAhPT0gdW5kZWZpbmVkICYmIGNoYXJ0T3B0aW9ucy5taW5YID4gMCkge1xuICAgIHdpZHRoICs9IHggLSBjaGFydE9wdGlvbnMubWluWDtcbiAgICB4ID0gY2hhcnRPcHRpb25zLm1pblg7XG4gIH1cbiAgaWYgKGNoYXJ0T3B0aW9ucy5tYXhYICE9PSB1bmRlZmluZWQgJiYgY2hhcnRPcHRpb25zLm1heFggPiAwKVxuICAgIHdpZHRoICs9IGNoYXJ0T3B0aW9ucy5tYXhYIC0gKHggKyB3aWR0aCk7XG4gIGlmIChjaGFydE9wdGlvbnMubWluWSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgaGVpZ2h0ICs9IHkgLSBjaGFydE9wdGlvbnMubWluWTtcbiAgICB5ID0gY2hhcnRPcHRpb25zLm1pblk7XG4gIH1cbiAgaWYgKGNoYXJ0T3B0aW9ucy5tYXhZICE9PSB1bmRlZmluZWQpXG4gICAgaGVpZ2h0ICs9IGNoYXJ0T3B0aW9ucy5tYXhZIC0gKHkgKyBoZWlnaHQpO1xuXG4gIHJldHVybiBuZXcgREcuUmVjdCh4LCB5LCB3aWR0aCwgaGVpZ2h0KTtcbn1cblxuLyoqIFJldHVybnMgdGhlIGJvdW5kcyBvZiBhbiB7QGxpbmsgSUZpdENoYXJ0RGF0YX0gb2JqZWN0ICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q2hhcnRCb3VuZHMoY2hhcnREYXRhOiBJRml0Q2hhcnREYXRhKTogREcuUmVjdCB7XG4gIGNvbnN0IG8gPSBjaGFydERhdGEuY2hhcnRPcHRpb25zO1xuICBpZiAoIWNoYXJ0RGF0YS5zZXJpZXM/Lmxlbmd0aCB8fCBjaGFydERhdGEuc2VyaWVzLmxlbmd0aCA9PT0gMClcbiAgICByZXR1cm4gbmV3IERHLlJlY3QoMCwgMCwgMSwgMSk7XG4gIGVsc2Uge1xuICAgIGNvbnN0IHt4cywgeXN9ID0gZ2V0UG9pbnRzQXJyYXlzKGNoYXJ0RGF0YS5zZXJpZXNbMF0ucG9pbnRzKTtcbiAgICBsZXQgYm91bmRzID0gREcuUmVjdC5mcm9tWFlBcnJheXMoeHMsIHlzKTtcbiAgICBmb3IgKGxldCBpID0gMTsgaSA8IGNoYXJ0RGF0YS5zZXJpZXMhLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCB7eHMsIHlzfSA9IGdldFBvaW50c0FycmF5cyhjaGFydERhdGEuc2VyaWVzW2ldLnBvaW50cyk7XG4gICAgICBib3VuZHMgPSBib3VuZHMudW5pb24oREcuUmVjdC5mcm9tWFlBcnJheXMoeHMsIHlzKSk7XG4gICAgfVxuICAgIHJldHVybiBvID8gY2hhbmdlQm91bmRzKGJvdW5kcywgbyEpOiBib3VuZHM7XG4gIH1cbn1cblxuLyoqIFJldHVybnMgc2VyaWVzIGZpdCBmdW5jdGlvbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFNlcmllc0ZpdEZ1bmN0aW9uKHNlcmllczogSUZpdFNlcmllcyk6IEZpdEZ1bmN0aW9uIHtcbiAgcmV0dXJuIGdldE9yQ3JlYXRlRml0RnVuY3Rpb24oc2VyaWVzLmZpdEZ1bmN0aW9uISk7XG59XG5cbi8qKiBSZXR1cm5zIGEgY3VydmUgZnVuY3Rpb24sIGVpdGhlciB1c2luZyB0aGUgcHJlLWNvbXB1dGVkIHBhcmFtZXRlcnMgb3IgYnkgZml0dGluZyBvbi10aGUtZmx5ICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q3VydmUoc2VyaWVzOiBJRml0U2VyaWVzLCBmaXRGdW5jOiBGaXRGdW5jdGlvbik6ICh4OiBudW1iZXIpID0+IG51bWJlciB7XG4gIHJldHVybiBnZXRGaXR0ZWRDdXJ2ZShmaXRGdW5jLnksIHNlcmllcy5wYXJhbWV0ZXJzISk7XG59XG5cbi8qKiBGaXRzIHRoZSBzZXJpZXMgZGF0YSBhY2NvcmRpbmcgdG8gdGhlIHNlcmllcyBmaXR0aW5nIHNldHRpbmdzICovXG5leHBvcnQgZnVuY3Rpb24gZml0U2VyaWVzKHNlcmllczogSUZpdFNlcmllcywgZml0RnVuYzogRml0RnVuY3Rpb24sIGxvZ09wdGlvbnM/OiBMb2dPcHRpb25zKTogRml0Q3VydmUge1xuICBjb25zdCBkYXRhID0ge3g6IHNlcmllcy5wb2ludHMuZmlsdGVyKChwKSA9PiAhcC5vdXRsaWVyKS5tYXAoKHApID0+IGxvZ09wdGlvbnM/LmxvZ1ggPyBNYXRoLmxvZzEwKHAueCkgOiBwLngpLFxuICAgIHk6IHNlcmllcy5wb2ludHMuZmlsdGVyKChwKSA9PiAhcC5vdXRsaWVyKS5tYXAoKHApID0+IGxvZ09wdGlvbnM/LmxvZ1kgPyBNYXRoLmxvZzEwKHAueSkgOiBwLnkpfTtcbiAgaWYgKHNlcmllcy5wYXJhbWV0ZXJCb3VuZHMgJiYgbG9nT3B0aW9ucz8ubG9nWClcbiAgICBzZXJpZXMucGFyYW1ldGVyQm91bmRzWzJdID0gbG9nSUM1MFBhcmFtZXRlckJvdW5kcyhzZXJpZXMucGFyYW1ldGVyQm91bmRzWzJdKTtcbiAgcmV0dXJuIGZpdERhdGEoZ2V0TWVkaWFuUG9pbnRzKGRhdGEpLCBmaXRGdW5jLCBGaXRFcnJvck1vZGVsLkNvbnN0YW50LCBzZXJpZXMucGFyYW1ldGVyQm91bmRzKTtcbn1cblxuLyoqIFJldHVybnMgc2VyaWVzIGNvbmZpZGVuY2UgaW50ZXJ2YWwgZnVuY3Rpb25zICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0U2VyaWVzQ29uZmlkZW5jZUludGVydmFsKHNlcmllczogSUZpdFNlcmllcywgZml0RnVuYzogRml0RnVuY3Rpb24sXG4gIHVzZXJQYXJhbXNGbGFnOiBib29sZWFuKTogRml0Q29uZmlkZW5jZUludGVydmFscyB7XG4gIGNvbnN0IGRhdGEgPSB1c2VyUGFyYW1zRmxhZyA/IHt4OiBzZXJpZXMucG9pbnRzLm1hcCgocCkgPT4gcC54KSwgeTogc2VyaWVzLnBvaW50cy5tYXAoKHApID0+IHAueSl9IDpcbiAgICB7eDogc2VyaWVzLnBvaW50cy5maWx0ZXIoKHApID0+ICFwLm91dGxpZXIpLm1hcCgocCkgPT4gcC54KSxcbiAgICAgIHk6IHNlcmllcy5wb2ludHMuZmlsdGVyKChwKSA9PiAhcC5vdXRsaWVyKS5tYXAoKHApID0+IHAueSl9O1xuICBpZiAoIXNlcmllcy5wYXJhbWV0ZXJzKVxuICAgIHNlcmllcy5wYXJhbWV0ZXJzID0gZml0U2VyaWVzKHNlcmllcywgZml0RnVuYykucGFyYW1ldGVycztcbiAgcmV0dXJuIGdldEN1cnZlQ29uZmlkZW5jZUludGVydmFscyhkYXRhLCBzZXJpZXMucGFyYW1ldGVycywgZml0RnVuYy55LCAwLjA1LCBGaXRFcnJvck1vZGVsLkNvbnN0YW50KTtcbn1cblxuLyoqIFJldHVybnMgc2VyaWVzIHN0YXRpc3RpY3MgKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRTZXJpZXNTdGF0aXN0aWNzKHNlcmllczogSUZpdFNlcmllcywgZml0RnVuYzogRml0RnVuY3Rpb24pOiBGaXRTdGF0aXN0aWNzIHtcbiAgY29uc3QgZGF0YSA9IHt4OiBzZXJpZXMucG9pbnRzLmZpbHRlcigocCkgPT4gIXAub3V0bGllcikubWFwKChwKSA9PiBwLngpLFxuICAgIHk6IHNlcmllcy5wb2ludHMuZmlsdGVyKChwKSA9PiAhcC5vdXRsaWVyKS5tYXAoKHApID0+IHAueSl9O1xuICBpZiAoIXNlcmllcy5wYXJhbWV0ZXJzKVxuICAgIHNlcmllcy5wYXJhbWV0ZXJzID0gZml0U2VyaWVzKHNlcmllcywgZml0RnVuYykucGFyYW1ldGVycztcbiAgcmV0dXJuIGdldFN0YXRpc3RpY3MoZGF0YSwgc2VyaWVzLnBhcmFtZXRlcnMsIGZpdEZ1bmMueSwgdHJ1ZSk7XG59XG4iXX0=
150
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZml0LWRhdGEuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJmaXQtZGF0YS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxnQ0FBZ0M7QUFDaEMsT0FBTyxLQUFLLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUV0QyxPQUFPLEVBQ0wsYUFBYSxFQUNiLE9BQU8sRUFDUCwyQkFBMkIsRUFDM0IsYUFBYSxFQUViLGNBQWMsRUFJZCxzQkFBc0IsRUFJdEIsbUJBQW1CLEVBQ25CLHNCQUFzQixFQUN0QixPQUFPLEdBSVIsTUFBTSxhQUFhLENBQUM7QUFRckIsaUZBQWlGO0FBQ2pGLFNBQVMsb0JBQW9CLENBQUMsVUFBeUI7SUFDckQsTUFBTSxDQUFDLEdBQVEsRUFBRSxDQUFDO0lBQ2xCLEtBQUssTUFBTSxDQUFDLElBQUksVUFBVSxFQUFFO1FBQzFCLElBQUksQ0FBQyxDQUFDLFlBQVksS0FBSyxJQUFJO1lBQ3pCLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFlBQVksQ0FBQztLQUM5QjtJQUNELE9BQU8sQ0FBQyxDQUFDO0FBQ1gsQ0FBQztBQUVELHFIQUFxSDtBQUNySCxtREFBbUQ7QUFDbkQsTUFBTSxVQUFVLHNCQUFzQjtJQUNwQyxPQUFPO1FBQ0wsWUFBWSxFQUFFLG9CQUFvQixDQUFDLHNCQUFzQixDQUFDO1FBQzFELGFBQWEsRUFBRSxvQkFBb0IsQ0FBQyxtQkFBbUIsQ0FBQztLQUN6RCxDQUFDO0FBQ0osQ0FBQztBQUVELHdFQUF3RTtBQUN4RSxNQUFNLFVBQVUsd0JBQXdCLENBQUMsRUFBZ0I7OztJQUN2RCxPQUFPLElBQUksQ0FBQyxLQUFLLGFBQUMsRUFBRSxDQUFDLElBQUksRUFBQyxPQUFPLHdDQUFQLE9BQU8sSUFBTSxJQUFJLENBQUMsU0FBUyxDQUFDLHNCQUFzQixFQUFFLENBQUMsRUFBQyxDQUFDO0FBQ25GLENBQUM7QUFFRCxxRUFBcUU7QUFDckUsTUFBTSxVQUFVLHFCQUFxQixDQUFDLE1BQWlCOzs7SUFDckQsT0FBTyxJQUFJLENBQUMsS0FBSyxhQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUMsT0FBTyx3Q0FBUCxPQUFPLElBQU0sSUFBSSxDQUFDLFNBQVMsQ0FBQyxzQkFBc0IsRUFBRSxDQUFDLEVBQUMsQ0FBQztBQUN2RixDQUFDO0FBRUQseURBQXlEO0FBQ3pELE1BQU0sVUFBVSxlQUFlLENBQUMsTUFBbUI7SUFDakQsTUFBTSxFQUFFLEdBQWEsRUFBRSxDQUFDO0lBQ3hCLE1BQU0sRUFBRSxHQUFhLEVBQUUsQ0FBQztJQUN4QixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtRQUN0QyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNwQixFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztLQUNyQjtJQUNELE9BQU8sRUFBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUMsQ0FBQztBQUMxQixDQUFDO0FBRUQseUVBQXlFO0FBQ3pFLFNBQVMsZUFBZSxDQUFDLElBQWdDO0lBQ3ZELE1BQU0sWUFBWSxHQUErQixFQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBQyxDQUFDO0lBQ2hFLE1BQU0sYUFBYSxHQUErQixFQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQztJQUNuRixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7UUFDdEMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDcEMsYUFBYSxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDcEQsYUFBYSxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDcEQsU0FBUztTQUNWO1FBQ0QsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztRQUNuRCxNQUFNLFlBQVksR0FBRyxhQUFhLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUMzRCxNQUFNLE1BQU0sR0FBRyxZQUFZLENBQUMsTUFBTSxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUVuSCxZQUFZLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMzRCxZQUFZLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDO1FBQy9DLGFBQWEsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDOUIsYUFBYSxD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QyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDO0lBQzlELElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVTtRQUNwQixNQUFNLENBQUMsVUFBVSxHQUFHLFNBQVMsQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUMsVUFBVSxDQUFDO0lBQzVELE9BQU8sYUFBYSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsVUFBVSxFQUFFLE9BQU8sQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDakUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIHZhbGlkLWpzZG9jICovXG5pbXBvcnQgKiBhcyBERyBmcm9tICdkYXRhZ3Jvay1hcGkvZGcnO1xuXG5pbXBvcnQge1xuICBGaXRFcnJvck1vZGVsLFxuICBmaXREYXRhLFxuICBnZXRDdXJ2ZUNvbmZpZGVuY2VJbnRlcnZhbHMsXG4gIGdldFN0YXRpc3RpY3MsXG4gIEZpdEZ1bmN0aW9uLFxuICBnZXRGaXR0ZWRDdXJ2ZSxcbiAgRml0U3RhdGlzdGljcyxcbiAgRml0Q29uZmlkZW5jZUludGVydmFscyxcbiAgRml0Q3VydmUsXG4gIGdldE9yQ3JlYXRlRml0RnVuY3Rpb24sXG4gIElGaXRQb2ludCxcbiAgSUZpdENoYXJ0RGF0YSxcbiAgSUZpdFNlcmllcyxcbiAgZml0U2VyaWVzUHJvcGVydGllcyxcbiAgZml0Q2hhcnREYXRhUHJvcGVydGllcyxcbiAgVEFHX0ZJVCxcbiAgRml0UGFyYW1Cb3VuZHMsXG4gIElGaXRDaGFydE9wdGlvbnMsXG4gIEZpdEVycm9yTW9kZWxUeXBlLFxufSBmcm9tICcuL2ZpdC1jdXJ2ZSc7XG5cbmV4cG9ydCB0eXBlIExvZ09wdGlvbnMgPSB7XG4gIGxvZ1g6IGJvb2xlYW4gfCB1bmRlZmluZWQsXG4gIGxvZ1k6IGJvb2xlYW4gfCB1bmRlZmluZWRcbn07XG5cblxuLyoqIENyZWF0ZXMgbmV3IG9iamVjdCB3aXRoIHRoZSBkZWZhdWx0IHZhbHVlcyBzcGVjaWZpZWQgaW4ge0BsaW5rIHByb3BlcnRpZXN9ICovXG5mdW5jdGlvbiBjcmVhdGVGcm9tUHJvcGVydGllcyhwcm9wZXJ0aWVzOiBERy5Qcm9wZXJ0eVtdKTogYW55IHtcbiAgY29uc3QgbzogYW55ID0ge307XG4gIGZvciAoY29uc3QgcCBvZiBwcm9wZXJ0aWVzKSB7XG4gICAgaWYgKHAuZGVmYXVsdFZhbHVlICE9PSBudWxsKVxuICAgICAgb1twLm5hbWVdID0gcC5kZWZhdWx0VmFsdWU7XG4gIH1cbiAgcmV0dXJuIG87XG59XG5cbi8vIFRPRE86IHNldCBjb2x1bW4gd2l0aCBmaXQgcmVhZG9ubHkgdmFsdWUgKGluIGRldGVjdG9ycykgLSB0cnkgdG8gb25seSBzaG93IGNoYXJ0IC0gcmVtb3ZlIGVkaXRhYmxlIG9yIHByZXZlbnQgaXQ/P1xuLyoqIENyZWF0ZXMgZGVmYXVsdCB7QGxpbmsgSUZpdENoYXJ0RGF0YX0gb2JqZWN0ICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlRGVmYXVsdENoYXJ0RGF0YSgpOiBJRml0Q2hhcnREYXRhIHtcbiAgcmV0dXJuIHtcbiAgICBjaGFydE9wdGlvbnM6IGNyZWF0ZUZyb21Qcm9wZXJ0aWVzKGZpdENoYXJ0RGF0YVByb3BlcnRpZXMpLFxuICAgIHNlcmllc09wdGlvbnM6IGNyZWF0ZUZyb21Qcm9wZXJ0aWVzKGZpdFNlcmllc1Byb3BlcnRpZXMpLFxuICB9O1xufVxuXG4vKiogUmV0dXJucyBleGlzdGluZywgb3IgY3JlYXRlcyBuZXcgZGF0YWZyYW1lIGRlZmF1bHQgY2hhcnQgb3B0aW9ucy4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXREYXRhRnJhbWVDaGFydE9wdGlvbnMoZGY6IERHLkRhdGFGcmFtZSk6IElGaXRDaGFydERhdGEge1xuICByZXR1cm4gSlNPTi5wYXJzZShkZi50YWdzW1RBR19GSVRdID8/PSBKU09OLnN0cmluZ2lmeShjcmVhdGVEZWZhdWx0Q2hhcnREYXRhKCkpKTtcbn1cblxuLyoqIFJldHVybnMgZXhpc3RpbmcsIG9yIGNyZWF0ZXMgbmV3IGNvbHVtbiBkZWZhdWx0IGNoYXJ0IG9wdGlvbnMuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q29sdW1uQ2hhcnRPcHRpb25zKGNvbHVtbjogREcuQ29sdW1uKTogSUZpdENoYXJ0RGF0YSB7XG4gIHJldHVybiBKU09OLnBhcnNlKGNvbHVtbi50YWdzW1RBR19GSVRdID8/PSBKU09OLnN0cmluZ2lmeShjcmVhdGVEZWZhdWx0Q2hhcnREYXRhKCkpKTtcbn1cblxuLyoqIFJldHVybnMgcG9pbnRzIGFycmF5cyBmcm9tIHtAbGluayBJRml0UG9pbnR9IGFycmF5ICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0UG9pbnRzQXJyYXlzKHBvaW50czogSUZpdFBvaW50W10pOiB7eHM6IG51bWJlcltdLCB5czogbnVtYmVyW119IHtcbiAgY29uc3QgeHM6IG51bWJlcltdID0gW107XG4gIGNvbnN0IHlzOiBudW1iZXJbXSA9IFtdO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IHBvaW50cy5sZW5ndGg7IGkrKykge1xuICAgIHhzW2ldID0gcG9pbnRzW2ldLng7XG4gICAgeXNbaV0gPSBwb2ludHNbaV0ueTtcbiAgfVxuICByZXR1cm4ge3hzOiB4cywgeXM6IHlzfTtcbn1cblxuLyoqIFJldHVybnMgbWVkaWFuIHBvaW50cyBmcm9tIHdpdGhpbiBtdWx0aXBsZSBwb2ludHMgd2l0aCB0aGUgc2FtZSB4LiAqL1xuZnVuY3Rpb24gZ2V0TWVkaWFuUG9pbnRzKGRhdGE6IHt4OiBudW1iZXJbXSwgeTogbnVtYmVyW119KToge3g6IG51bWJlcltdLCB5OiBudW1iZXJbXX0ge1xuICBjb25zdCBtZWRpYW5Qb2ludHM6IHt4OiBudW1iZXJbXSwgeTogbnVtYmVyW119ID0ge3g6IFtdLCB5OiBbXX07XG4gIGNvbnN0IGN1cnJlbnRQb2ludHM6IHt4OiBudW1iZXJbXSwgeTogbnVtYmVyW119ID0ge3g6IFtkYXRhLnhbMF1dLCB5OiBbZGF0YS55WzBdXX07XG4gIGZvciAobGV0IGkgPSAxOyBpIDwgZGF0YS54Lmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKGRhdGEueFtpXSA9PT0gY3VycmVudFBvaW50cy54WzBdKSB7XG4gICAgICBjdXJyZW50UG9pbnRzLnhbY3VycmVudFBvaW50cy54Lmxlbmd0aF0gPSBkYXRhLnhbaV07XG4gICAgICBjdXJyZW50UG9pbnRzLnlbY3VycmVudFBvaW50cy55Lmxlbmd0aF0gPSBkYXRhLnlbaV07XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgY29uc3QgbWlkID0gTWF0aC5mbG9vcihjdXJyZW50UG9pbnRzLnkubGVuZ3RoIC8gMik7XG4gICAgY29uc3Qgc29ydGVkUG9pbnRzID0gY3VycmVudFBvaW50cy55LnNvcnQoKGEsIGIpID0+IGEgLSBiKTtcbiAgICBjb25zdCBtZWRpYW4gPSBzb3J0ZWRQb2ludHMubGVuZ3RoICUgMiA9PT0gMCA/IChzb3J0ZWRQb2ludHNbbWlkIC0gMV0gKyBzb3J0ZWRQb2ludHNbbWlkXSkgLyAyIDogc29ydGVkUG9pbnRzW21pZF07XG5cbiAgICBtZWRpYW5Qb2ludHMueFttZWRpYW5Qb2ludHMueC5sZW5ndGhdID0gY3VycmVudFBvaW50cy54WzBdO1xuICAgIG1lZGlhblBvaW50cy55W21lZGlhblBvaW50cy55Lmxlbmd0aF0gPSBtZWRpYW47XG4gICAgY3VycmVudFBvaW50cy54ID0gW2RhdGEueFtpXV07XG4gICAgY3VycmVudFBvaW50cy55ID0gW2RhdGEueVtpXV07XG4gIH1cblxuICByZXR1cm4gbWVkaWFuUG9pbnRzO1xufVxuXG4vKiogUmV0dXJucyBsb2dhcml0aG1pYyBJQzUwIHBhcmFtZXRlciBib3VuZHMuICovXG5mdW5jdGlvbiBsb2dJQzUwUGFyYW1ldGVyQm91bmRzKGljNTBCb3VuZHM6IEZpdFBhcmFtQm91bmRzKTogRml0UGFyYW1Cb3VuZHMge1xuICBpZiAoaWM1MEJvdW5kcykge1xuICAgIGlmIChpYzUwQm91bmRzLm1heCAhPT0gdW5kZWZpbmVkKVxuICAgICAgaWM1MEJvdW5kcy5tYXggPSBNYXRoLmxvZzEwKGljNTBCb3VuZHMubWF4KTtcbiAgICBpZiAoaWM1MEJvdW5kcy5taW4gIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWM1MEJvdW5kcy5taW4gPSBpYzUwQm91bmRzLm1pbiA9PT0gMCA/XG4gICAgICAgIC1OdW1iZXIuTUFYX1ZBTFVFIDogTWF0aC5sb2cxMChpYzUwQm91bmRzLm1pbik7XG4gICAgfVxuICB9XG4gIHJldHVybiBpYzUwQm91bmRzO1xufVxuXG5mdW5jdGlvbiBjaGFuZ2VCb3VuZHMoYm91bmRzOiBERy5SZWN0LCBjaGFydE9wdGlvbnM6IElGaXRDaGFydE9wdGlvbnMpOiBERy5SZWN0IHtcbiAgbGV0IHggPSBib3VuZHMueDtcbiAgbGV0IHkgPSBib3VuZHMueTtcbiAgbGV0IHdpZHRoID0gYm91bmRzLndpZHRoO1xuICBsZXQgaGVpZ2h0ID0gYm91bmRzLmhlaWdodDtcblxuICBpZiAoY2hhcnRPcHRpb25zLm1pblggIT09IHVuZGVmaW5lZCAmJiBjaGFydE9wdGlvbnMubWluWCAhPT0gbnVsbCAmJlxuICAgICgoIWNoYXJ0T3B0aW9ucy5sb2dYKSB8fCAoY2hhcnRPcHRpb25zLmxvZ1ggJiYgY2hhcnRPcHRpb25zLm1pblggPiAwKSkpIHtcbiAgICB3aWR0aCArPSB4IC0gY2hhcnRPcHRpb25zLm1pblg7XG4gICAgeCA9IGNoYXJ0T3B0aW9ucy5taW5YO1xuICB9XG4gIGlmIChjaGFydE9wdGlvbnMubWF4WCAhPT0gdW5kZWZpbmVkICYmIGNoYXJ0T3B0aW9ucy5tYXhYICE9PSBudWxsICYmXG4gICAgKCghY2hhcnRPcHRpb25zLmxvZ1gpIHx8IChjaGFydE9wdGlvbnMubG9nWCAmJiBjaGFydE9wdGlvbnMubWF4WCA+IDApKSlcbiAgICB3aWR0aCArPSBjaGFydE9wdGlvbnMubWF4WCAtICh4ICsgd2lkdGgpO1xuICBpZiAoY2hhcnRPcHRpb25zLm1pblkgIT09IHVuZGVmaW5lZCAmJiBjaGFydE9wdGlvbnMubWluWSAhPT0gbnVsbCAmJlxuICAgICgoIWNoYXJ0T3B0aW9ucy5sb2dZKSB8fCAoY2hhcnRPcHRpb25zLmxvZ1kgJiYgY2hhcnRPcHRpb25zLm1pblkgPiAwKSkpIHtcbiAgICBoZWlnaHQgKz0geSAtIGNoYXJ0T3B0aW9ucy5taW5ZO1xuICAgIHkgPSBjaGFydE9wdGlvbnMubWluWTtcbiAgfVxuICBpZiAoY2hhcnRPcHRpb25zLm1heFkgIT09IHVuZGVmaW5lZCAmJiBjaGFydE9wdGlvbnMubWF4WSAhPT0gbnVsbCAmJlxuICAgICgoIWNoYXJ0T3B0aW9ucy5sb2dZKSB8fCAoY2hhcnRPcHRpb25zLmxvZ1kgJiYgY2hhcnRPcHRpb25zLm1heFkgPiAwKSkpXG4gICAgaGVpZ2h0ICs9IGNoYXJ0T3B0aW9ucy5tYXhZIC0gKHkgKyBoZWlnaHQpO1xuXG4gIHJldHVybiBuZXcgREcuUmVjdCh4LCB5LCB3aWR0aCwgaGVpZ2h0KTtcbn1cblxuLyoqIFJldHVybnMgdGhlIGJvdW5kcyBvZiBhbiB7QGxpbmsgSUZpdENoYXJ0RGF0YX0gb2JqZWN0ICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q2hhcnRCb3VuZHMoY2hhcnREYXRhOiBJRml0Q2hhcnREYXRhKTogREcuUmVjdCB7XG4gIGNvbnN0IG8gPSBjaGFydERhdGEuY2hhcnRPcHRpb25zO1xuICBpZiAoIWNoYXJ0RGF0YS5zZXJpZXM/Lmxlbmd0aCB8fCBjaGFydERhdGEuc2VyaWVzLmxlbmd0aCA9PT0gMClcbiAgICByZXR1cm4gbmV3IERHLlJlY3QoMCwgMCwgMSwgMSk7XG4gIGVsc2Uge1xuICAgIGNvbnN0IHt4cywgeXN9ID0gZ2V0UG9pbnRzQXJyYXlzKGNoYXJ0RGF0YS5zZXJpZXNbMF0ucG9pbnRzKTtcbiAgICBsZXQgYm91bmRzID0gREcuUmVjdC5mcm9tWFlBcnJheXMoeHMsIHlzKTtcbiAgICBmb3IgKGxldCBpID0gMTsgaSA8IGNoYXJ0RGF0YS5zZXJpZXMhLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCB7eHMsIHlzfSA9IGdldFBvaW50c0FycmF5cyhjaGFydERhdGEuc2VyaWVzW2ldLnBvaW50cyk7XG4gICAgICBib3VuZHMgPSBib3VuZHMudW5pb24oREcuUmVjdC5mcm9tWFlBcnJheXMoeHMsIHlzKSk7XG4gICAgfVxuICAgIHJldHVybiBvID8gY2hhbmdlQm91bmRzKGJvdW5kcywgbyEpOiBib3VuZHM7XG4gIH1cbn1cblxuLyoqIFJldHVybnMgc2VyaWVzIGZpdCBmdW5jdGlvbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFNlcmllc0ZpdEZ1bmN0aW9uKHNlcmllczogSUZpdFNlcmllcyk6IEZpdEZ1bmN0aW9uIHtcbiAgcmV0dXJuIGdldE9yQ3JlYXRlRml0RnVuY3Rpb24oc2VyaWVzLmZpdEZ1bmN0aW9uISk7XG59XG5cbi8qKiBSZXR1cm5zIGEgY3VydmUgZnVuY3Rpb24sIGVpdGhlciB1c2luZyB0aGUgcHJlLWNvbXB1dGVkIHBhcmFtZXRlcnMgb3IgYnkgZml0dGluZyBvbi10aGUtZmx5ICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q3VydmUoc2VyaWVzOiBJRml0U2VyaWVzLCBmaXRGdW5jOiBGaXRGdW5jdGlvbik6ICh4OiBudW1iZXIpID0+IG51bWJlciB7XG4gIHJldHVybiBnZXRGaXR0ZWRDdXJ2ZShmaXRGdW5jLnksIHNlcmllcy5wYXJhbWV0ZXJzISk7XG59XG5cbi8qKiBGaXRzIHRoZSBzZXJpZXMgZGF0YSBhY2NvcmRpbmcgdG8gdGhlIHNlcmllcyBmaXR0aW5nIHNldHRpbmdzICovXG5leHBvcnQgZnVuY3Rpb24gZml0U2VyaWVzKHNlcmllczogSUZpdFNlcmllcywgZml0RnVuYzogRml0RnVuY3Rpb24sIGxvZ09wdGlvbnM/OiBMb2dPcHRpb25zKTogRml0Q3VydmUge1xuICBjb25zdCBkYXRhID0ge3g6IHNlcmllcy5wb2ludHMuZmlsdGVyKChwKSA9PiAhcC5vdXRsaWVyKS5tYXAoKHApID0+IGxvZ09wdGlvbnM/LmxvZ1ggPyBNYXRoLmxvZzEwKHAueCkgOiBwLngpLFxuICAgIHk6IHNlcmllcy5wb2ludHMuZmlsdGVyKChwKSA9PiAhcC5vdXRsaWVyKS5tYXAoKHApID0+IGxvZ09wdGlvbnM/LmxvZ1kgPyBNYXRoLmxvZzEwKHAueSkgOiBwLnkpfTtcbiAgaWYgKHNlcmllcy5wYXJhbWV0ZXJCb3VuZHMgJiYgbG9nT3B0aW9ucz8ubG9nWClcbiAgICBzZXJpZXMucGFyYW1ldGVyQm91bmRzWzJdID0gbG9nSUM1MFBhcmFtZXRlckJvdW5kcyhzZXJpZXMucGFyYW1ldGVyQm91bmRzWzJdKTtcbiAgcmV0dXJuIGZpdERhdGEoZ2V0TWVkaWFuUG9pbnRzKGRhdGEpLCBmaXRGdW5jLCBzZXJpZXMuZXJyb3JNb2RlbCA/PyBGaXRFcnJvck1vZGVsLkNPTlNUQU5UIGFzIEZpdEVycm9yTW9kZWxUeXBlLFxuICAgIHNlcmllcy5wYXJhbWV0ZXJCb3VuZHMpO1xufVxuXG4vKiogUmV0dXJucyBzZXJpZXMgY29uZmlkZW5jZSBpbnRlcnZhbCBmdW5jdGlvbnMgKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRTZXJpZXNDb25maWRlbmNlSW50ZXJ2YWwoc2VyaWVzOiBJRml0U2VyaWVzLCBmaXRGdW5jOiBGaXRGdW5jdGlvbixcbiAgdXNlclBhcmFtc0ZsYWc6IGJvb2xlYW4sIGxvZ09wdGlvbnM/OiBMb2dPcHRpb25zKTogRml0Q29uZmlkZW5jZUludGVydmFscyB7XG4gIGNvbnN0IGRhdGEgPSB1c2VyUGFyYW1zRmxhZyA/IHt4OiBzZXJpZXMucG9pbnRzLm1hcCgocCkgPT4gbG9nT3B0aW9ucz8ubG9nWCA/IE1hdGgubG9nMTAocC54KSA6IHAueCksXG4gICAgeTogc2VyaWVzLnBvaW50cy5tYXAoKHApID0+IGxvZ09wdGlvbnM/LmxvZ1kgPyBNYXRoLmxvZzEwKHAueSkgOiBwLnkpfSA6XG4gICAge3g6IHNlcmllcy5wb2ludHMuZmlsdGVyKChwKSA9PiAhcC5vdXRsaWVyKS5tYXAoKHApID0+IGxvZ09wdGlvbnM/LmxvZ1ggPyBNYXRoLmxvZzEwKHAueCkgOiBwLngpLFxuICAgICAgeTogc2VyaWVzLnBvaW50cy5maWx0ZXIoKHApID0+ICFwLm91dGxpZXIpLm1hcCgocCkgPT4gbG9nT3B0aW9ucz8ubG9nWSA/IE1hdGgubG9nMTAocC55KSA6IHAueSl9O1xuICBpZiAoIXNlcmllcy5wYXJhbWV0ZXJzKVxuICAgIHNlcmllcy5wYXJhbWV0ZXJzID0gZml0U2VyaWVzKHNlcmllcywgZml0RnVuYykucGFyYW1ldGVycztcbiAgcmV0dXJuIGdldEN1cnZlQ29uZmlkZW5jZUludGVydmFscyhkYXRhLCBzZXJpZXMucGFyYW1ldGVycywgZml0RnVuYy55LCAwLjA1LFxuICAgIHNlcmllcy5lcnJvck1vZGVsID8/IEZpdEVycm9yTW9kZWwuQ09OU1RBTlQgYXMgRml0RXJyb3JNb2RlbFR5cGUpO1xufVxuXG4vKiogUmV0dXJucyBzZXJpZXMgc3RhdGlzdGljcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFNlcmllc1N0YXRpc3RpY3Moc2VyaWVzOiBJRml0U2VyaWVzLCBmaXRGdW5jOiBGaXRGdW5jdGlvbik6IEZpdFN0YXRpc3RpY3Mge1xuICBjb25zdCBkYXRhID0ge3g6IHNlcmllcy5wb2ludHMuZmlsdGVyKChwKSA9PiAhcC5vdXRsaWVyKS5tYXAoKHApID0+IHAueCksXG4gICAgeTogc2VyaWVzLnBvaW50cy5maWx0ZXIoKHApID0+ICFwLm91dGxpZXIpLm1hcCgocCkgPT4gcC55KX07XG4gIGlmICghc2VyaWVzLnBhcmFtZXRlcnMpXG4gICAgc2VyaWVzLnBhcmFtZXRlcnMgPSBmaXRTZXJpZXMoc2VyaWVzLCBmaXRGdW5jKS5wYXJhbWV0ZXJzO1xuICByZXR1cm4gZ2V0U3RhdGlzdGljcyhkYXRhLCBzZXJpZXMucGFyYW1ldGVycywgZml0RnVuYy55LCB0cnVlKTtcbn1cbiJdfQ==
@@ -1 +1 @@
1
- {"version":3,"file":"multiple-tests.d.ts","sourceRoot":"","sources":["multiple-tests.ts"],"names":[],"mappings":"AAoIA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,wBAAgB,aAAa,CAC3B,KAAK,EAAE,YAAY,EACnB,KAAK,GAAE,MAAa,EACpB,MAAM,GAAE,MAAW,EACnB,QAAQ,GAAE,OAAe,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,YAAY,CAAC,CAyD3D"}
1
+ {"version":3,"file":"multiple-tests.d.ts","sourceRoot":"","sources":["multiple-tests.ts"],"names":[],"mappings":"AAoIA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,wBAAgB,aAAa,CAC3B,KAAK,EAAE,YAAY,EACnB,KAAK,GAAE,MAAa,EACpB,MAAM,GAAE,MAAW,EACnB,QAAQ,GAAE,OAAe,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,YAAY,CAAC,CAmD3D"}
@@ -38,9 +38,8 @@ function _take(order, values) {
38
38
  */
39
39
  function _give(values, order) {
40
40
  const v = Float32Array.from(values);
41
- for (let i = 0; i < order.length; ++i) {
41
+ for (let i = 0; i < order.length; ++i)
42
42
  v[order[i]] = values[i];
43
- }
44
43
  return v;
45
44
  }
46
45
  /**
@@ -52,9 +51,8 @@ function _give(values, order) {
52
51
  */
53
52
  function _giveb(values, order) {
54
53
  const v = Array.from(values);
55
- for (let i = 0; i < order.length; ++i) {
54
+ for (let i = 0; i < order.length; ++i)
56
55
  v[order[i]] = values[i];
57
- }
58
56
  return v;
59
57
  }
60
58
  /**
@@ -75,9 +73,8 @@ function _ecdf(x) {
75
73
  */
76
74
  function _cm(n) {
77
75
  let sum = 0;
78
- for (let i = 0; i < n; ++i) {
76
+ for (let i = 0; i < n; ++i)
79
77
  sum += 1 / (i + 1);
80
- }
81
78
  return sum;
82
79
  }
83
80
  /**
@@ -111,9 +108,8 @@ function _vfactor(values, scale, op = '*') {
111
108
  function _minimumAccumulate(values) {
112
109
  const nItems = values.length;
113
110
  const r = Float32Array.from(values);
114
- for (let i = 0; i < nItems; ++i) {
111
+ for (let i = 0; i < nItems; ++i)
115
112
  r[i] = values.slice(0, i + 1).reduce((a, b, _, __) => (_operations['min'](a, b)));
116
- }
117
113
  return r;
118
114
  }
119
115
  /**
@@ -163,34 +159,27 @@ export function fdrcorrection(pvals, alpha = 0.05, method = 'n', isSorted = fals
163
159
  pvalsSorted = pvals; // alias
164
160
  }
165
161
  let ecdffactor = _ecdf(pvalsSorted);
166
- if (['i', 'indep', 'p', 'poscorr'].includes(method)) {
167
- ;
168
- }
169
- else if (['n', 'negcorr'].includes(method)) {
162
+ if (['n', 'negcorr'].includes(method)) {
170
163
  cm = _cm(nItems);
171
164
  ecdffactor = _factor(ecdffactor, cm, '/');
172
165
  }
173
- else {
166
+ else if (!['i', 'indep', 'p', 'poscorr'].includes(method))
174
167
  throw new Error('only indep and negcorr implemented');
175
- }
176
168
  const reject = new Array(nItems).fill(false);
177
169
  let rejectmax = -1;
178
170
  for (let i = 0; i < nItems; ++i) {
179
- if (pvalsSorted[i] <= ecdffactor[i] * alpha) {
171
+ if (pvalsSorted[i] <= ecdffactor[i] * alpha)
180
172
  rejectmax = i;
181
- }
182
173
  }
183
174
  if (rejectmax >= 0) {
184
- for (let i = 0; i < rejectmax; ++i) {
175
+ for (let i = 0; i < rejectmax; ++i)
185
176
  reject[i] = true;
186
- }
187
177
  }
188
178
  let pvalsCorrected = _vfactor(pvalsSorted, ecdffactor, '/');
189
179
  pvalsCorrected = _minimumAccumulate(pvalsCorrected.reverse()).reverse();
190
180
  for (let i = 0; i < nItems; ++i) {
191
- if (pvalsCorrected[i] > 1) {
181
+ if (pvalsCorrected[i] > 1)
192
182
  pvalsCorrected[i] = 1;
193
- }
194
183
  }
195
184
  if (!isSorted) {
196
185
  const pvalsCorrected_ = _give(pvalsCorrected, pvalsSortind);
@@ -199,4 +188,4 @@ export function fdrcorrection(pvals, alpha = 0.05, method = 'n', isSorted = fals
199
188
  }
200
189
  return [reject, pvalsCorrected];
201
190
  }
202
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXVsdGlwbGUtdGVzdHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJtdWx0aXBsZS10ZXN0cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sMkNBQTJDLENBQUM7QUFFckUseURBQXlEO0FBQ3pELE1BQU0sV0FBVyxHQUErQjtJQUM5QyxHQUFHLEVBQUUsQ0FBQyxDQUFTLEVBQUUsQ0FBUyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDdEMsR0FBRyxFQUFFLENBQUMsQ0FBUyxFQUFFLENBQVMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3RDLEdBQUcsRUFBRSxDQUFDLENBQVMsRUFBRSxDQUFTLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUN0QyxHQUFHLEVBQUUsQ0FBQyxDQUFTLEVBQUUsQ0FBUyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDdEMsS0FBSyxFQUFFLENBQUMsQ0FBUyxFQUFFLENBQVMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNoRCxLQUFLLEVBQUUsQ0FBQyxDQUFTLEVBQUUsQ0FBUyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQ2pELENBQUM7QUFFRjs7Ozs7R0FLRztBQUNILFNBQVMsUUFBUSxDQUFDLE1BQW9CO0lBQ3BDLE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDakMsT0FBTyxVQUFVLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FB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USxDQUFDLFdBQVcsRUFBRSxVQUFVLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDNUQsY0FBYyxHQUFHLGtCQUFrQixDQUFDLGNBQWMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBRXhFLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLEVBQUUsRUFBRSxDQUFDLEVBQUU7UUFDL0IsSUFBSSxjQUFjLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQ3pCLGNBQWMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDdkI7S0FDRjtJQUVELElBQUksQ0FBQyxRQUFRLEVBQUU7UUFDYixNQUFNLGVBQWUsR0FBRyxLQUFLLENBQUMsY0FBYyxFQUFFLFlBQVksQ0FBQyxDQUFDO1FBQzVELE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxNQUFNLEVBQUUsWUFBWSxDQUFDLENBQUM7UUFDN0MsT0FBTyxDQUFDLE9BQU8sRUFBRSxlQUFlLENBQUMsQ0FBQztLQUNuQztJQUNELE9BQU8sQ0FBQyxNQUFNLEVBQUUsY0FBYyxDQUFDLENBQUM7QUFDbEMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7QXJyYXlVdGlsc30gZnJvbSAnQGRhdGFncm9rLWxpYnJhcmllcy91dGlscy9zcmMvYXJyYXktdXRpbHMnO1xuXG4vKiogQHR5cGUgeyp9IEEgZGljdGlvbmFyeSBvZiBiYXNpYyBiaW5hcnkgb3BlcmF0aW9ucy4gKi9cbmNvbnN0IF9vcGVyYXRpb25zOiB7W25hbWU6IHN0cmluZ106IEZ1bmN0aW9ufSA9IHtcbiAgJysnOiAoYTogbnVtYmVyLCBiOiBudW1iZXIpID0+IChhICsgYiksXG4gICctJzogKGE6IG51bWJlciwgYjogbnVtYmVyKSA9PiAoYSAtIGIpLFxuICAnKic6IChhOiBudW1iZXIsIGI6IG51bWJlcikgPT4gKGEgKiBiKSxcbiAgJy8nOiAoYTogbnVtYmVyLCBiOiBudW1iZXIpID0+IChhIC8gYiksXG4gICdtaW4nOiAoYTogbnVtYmVyLCBiOiBudW1iZXIpID0+IChhIDwgYiA/IGEgOiBiKSxcbiAgJ21heCc6IChhOiBudW1iZXIsIGI6IG51bWJlcikgPT4gKGEgPiBiID8gYSA6IGIpLFxufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBpbmRpY2VzIHRoYXQgd291bGQgc29ydCBhbiBhcnJheS5cbiAqXG4gKiBAcGFyYW0ge0Zsb2F0MzJBcnJheX0gdmFsdWVzIEFycmF5IHRvIHNvcnQuXG4gKiBAcmV0dXJuIHtJbnQzMkFycmF5fSBBcnJheSBvZiBpbmRpY2VzIHRoYXQgc29ydCB2YWx1ZXMgYWxvbmcgdGhlIGZpcnN0IGF4aXMuXG4gKi9cbmZ1bmN0aW9uIF9hcmdzb3J0KHZhbHVlczogRmxvYXQzMkFycmF5KTogSW50MzJBcnJheSB7XG4gIGNvbnN0IGFycmF5ID0gQXJyYXkuZnJvbSh2YWx1ZXMpO1xuICByZXR1cm4gSW50MzJBcnJheS5mcm9tKEFycmF5VXRpbHMuYXJnU29ydChhcnJheSkpO1xufVxuXG4vKipcbiAqIFRha2UgZWxlbWVudHMgZnJvbSBhbiBhcnJheS5cbiAqXG4gKiBAcGFyYW0ge0ludDMyQXJyYXl9IG9yZGVyIFRoZSBpbmRpY2VzIG9mIHRoZSB2YWx1ZXMgdG8gZXh0cmFjdC5cbiAqIEBwYXJhbSB7RmxvYXQzMkFycmF5fSB2YWx1ZXMgVGhlIHNvdXJjZSBhcnJheS5cbiAqIEByZXR1cm4ge0Zsb2F0MzJBcnJheX0gVGhlIHJldHVybmVkIGFycmF5IGhhcyB0aGUgc2FtZSB0eXBlIGFzIHZhbHVlcy5cbiAqL1xuZnVuY3Rpb24gX3Rha2Uob3JkZXI6IEludDMyQXJyYXksIHZhbHVlczogRmxvYXQzMkFycmF5KTogRmxvYXQzMkFycmF5IHtcbiAgLy8gVE9ETzogSW1wbGVtZW50IGEgZ2VuZXJhbCBmdW5jdGlvbiBmb3IgVHlwZWRBcnJheS5cbiAgcmV0dXJuIEZsb2F0MzJBcnJheS5mcm9tKHZhbHVlcykubWFwKChfLCBpKSA9PiB2YWx1ZXNbb3JkZXJbaV1dKTtcbn1cblxuLyoqXG4gKiBBc3NpZ24gZWxlbWVudHMgb2YgYW4gYXJyYXkgZm9sbG93aW5nIHRoZSBvcmRlciBnaXZlbiAoZmxvYXRpbmctcG9pbnQgdmVyc2lvbikuXG4gKlxuICogQHBhcmFtIHtGbG9hdDMyQXJyYXl9IHZhbHVlcyBUaGUgc291cmNlIGFycmF5LlxuICogQHBhcmFtIHtJbnQzMkFycmF5fSBvcmRlciBUaGUgb3JkZXIgZ2l2ZW4uXG4gKiBAcmV0dXJuIHtGbG9hdDMyQXJyYXl9IFRoZSByZXR1cm5lZCBhcnJheSBoYXMgdGhlIHNhbWUgdHlwZSBhcyB2YWx1ZXMuXG4gKi9cbmZ1bmN0aW9uIF9naXZlKHZhbHVlczogRmxvYXQzMkFycmF5LCBvcmRlcjogSW50MzJBcnJheSk6IEZsb2F0MzJBcnJheSB7XG4gIGNvbnN0IHYgPSBGbG9hdDMyQXJyYXkuZnJvbSh2YWx1ZXMpO1xuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgb3JkZXIubGVuZ3RoOyArK2kpIHtcbiAgICB2W29yZGVyW2ldXSA9IHZhbHVlc1tpXTtcbiAgfVxuICByZXR1cm4gdjtcbn1cblxuLyoqXG4gKiBBc3NpZ24gZWxlbWVudHMgb2YgYW4gYXJyYXkgZm9sbG93aW5nIHRoZSBvcmRlciBnaXZlbiAoYm9vbGVhbiB2ZXJzaW9uKS5cbiAqXG4gKiBAcGFyYW0ge0FycmF5PGJvb2xlYW4+fSB2YWx1ZXMgVGhlIHNvdXJjZSBhcnJheS5cbiAqIEBwYXJhbSB7SW50MzJBcnJheX0gb3JkZXIgVGhlIG9yZGVyIGdpdmVuLlxuICogQHJldHVybiB7QXJyYXk8Ym9vbGVhbj59IFRoZSByZXR1cm5lZCBhcnJheSBoYXMgdGhlIHNhbWUgdHlwZSBhcyB2YWx1ZXMuXG4gKi9cbmZ1bmN0aW9uIF9naXZlYih2YWx1ZXM6IEFycmF5PGJvb2xlYW4+LCBvcmRlcjogSW50MzJBcnJheSk6IEFycmF5PGJvb2xlYW4+IHtcbiAgY29uc3QgdiA9IEFycmF5LmZyb20odmFsdWVzKTtcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IG9yZGVyLmxlbmd0aDsgKytpKSB7XG4gICAgdltvcmRlcltpXV0gPSB2YWx1ZXNbaV07XG4gIH1cbiAgcmV0dXJuIHY7XG59XG5cbi8qKlxuICogTm8gZnJpbGxzIGVtcGlyaWNhbCBjZGYgdXNlZCBpbiBmZHJjb3JyZWN0aW9uLlxuICpcbiAqIEBwYXJhbSB7RmxvYXQzMkFycmF5fSB4IFRoZSBzb3VyY2UgYXJyYXkgdG8gdGFrZSBhIGRpbWVuc2lvbiBmcm9tLlxuICogQHJldHVybiB7RmxvYXQzMkFycmF5fSBFbXBpcmljYWwgY2RmLlxuICovXG5mdW5jdGlvbiBfZWNkZih4OiBGbG9hdDMyQXJyYXkpOiBGbG9hdDMyQXJyYXkge1xuICBjb25zdCBub2JzID0geC5sZW5ndGg7XG4gIHJldHVybiBGbG9hdDMyQXJyYXkuZnJvbSh4KS5tYXAoKF8sIGkpID0+IChpKzEpL25vYnMpO1xufVxuXG4vKipcbiAqIGNtID0gbnAuc3VtKDEuL25wLmFyYW5nZSgxLCBsZW4ocHZhbHNfc29ydGVkKSsxKSlcbiAqXG4gKiBAcGFyYW0ge251bWJlcn0gbiBUaGUgbnVtYmVyIGdpdmVuLlxuICogQHJldHVybiB7bnVtYmVyfSBjbSB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gX2NtKG46IG51bWJlcik6IG51bWJlciB7XG4gIGxldCBzdW0gPSAwO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IG47ICsraSkge1xuICAgIHN1bSArPSAxIC8gKGkrMSk7XG4gIH1cbiAgcmV0dXJuIHN1bTtcbn1cblxuLyoqXG4gKiBCYXNpYyBvcGVyYXRpb24gdW5kZXIgYSB2ZWN0b3IgYW5kIGEgc2NhbGFyLlxuICpcbiAqIEBwYXJhbSB7RmxvYXQzMkFycmF5fSB2YWx1ZXMgVGhlIHNvdXJjZSB2ZWN0b3IuXG4gKiBAcGFyYW0ge251bWJlcn0gc2NhbGUgVGhlIHNjYWxhci5cbiAqIEBwYXJhbSB7c3RyaW5nfSBbb3A9JyonXSBUaGUgb3BlcmF0aW9uIHRvIHBlcmZvcm0uXG4gKiBAcmV0dXJuIHtGbG9hdDMyQXJyYXl9IE5ldyB2ZWN0b3IgYXMgYSByZXN1bHQgb2YgdGhlIG9wZXJhdGlvbi5cbiAqL1xuZnVuY3Rpb24gX2ZhY3Rvcih2YWx1ZXM6IEZsb2F0MzJBcnJheSwgc2NhbGU6IG51bWJlciwgb3AgPSAnKicpOiBGbG9hdDMyQXJyYXkge1xuICByZXR1cm4gRmxvYXQzMkFycmF5LmZyb20odmFsdWVzKS5tYXAoKHYsIF8pID0+IF9vcGVyYXRpb25zW29wXSh2LCBzY2FsZSkpO1xufVxuXG4vKipcbiAqIEJhc2ljIG9wZXJhdGlvbiB1bmRlciB0d28gdmVjdG9ycy5cbiAqXG4gKiBAcGFyYW0ge0Zsb2F0MzJBcnJheX0gdmFsdWVzIFRoZSBmaXJzdCB2ZWN0b3IuXG4gKiBAcGFyYW0ge0Zsb2F0MzJBcnJheX0gc2NhbGUgVGhlIHNlY29uZCB2ZWN0b3IuXG4gKiBAcGFyYW0ge3N0cmluZ30gW29wPScqJ10gVGhlIG9wZXJhdGlvbiB0byBwZXJmb3JtLlxuICogQHJldHVybiB7RmxvYXQzMkFycmF5fSBOZXcgdmVjdG9yIGFzIGEgcmVzdWx0IG9mIHRoZSBvcGVyYXRpb24uXG4gKi9cbmZ1bmN0aW9uIF92ZmFjdG9yKHZhbHVlczogRmxvYXQzMkFycmF5LCBzY2FsZTogRmxvYXQzMkFycmF5LCBvcCA9ICcqJyk6IEZsb2F0MzJBcnJheSB7XG4gIHJldHVybiBGbG9hdDMyQXJyYXkuZnJvbSh2YWx1ZXMpLm1hcCgodiwgaSkgPT4gX29wZXJhdGlvbnNbb3BdKHYsIHNjYWxlW2ldKSk7XG59XG5cbi8qKlxuICogQWNjdW11bGF0ZSB0aGUgcmVzdWx0IG9mIGFwcGx5aW5nIHRoZSBtaW4gb3BlcmF0b3IgdG8gYWxsIGVsZW1lbnRzLlxuICpcbiAqIEBwYXJhbSB7RmxvYXQzMkFycmF5fSB2YWx1ZXMgVGhlIGFycmF5IHRvIGFjdCBvbi5cbiAqIEByZXR1cm4ge0Zsb2F0MzJBcnJheX0gVGhlIGFjY3VtdWxhdGVkIHZhbHVlcy5cbiAqL1xuZnVuY3Rpb24gX21pbmltdW1BY2N1bXVsYXRlKHZhbHVlczogRmxvYXQzMkFycmF5KTogRmxvYXQzMkFycmF5IHtcbiAgY29uc3Qgbkl0ZW1zID0gdmFsdWVzLmxlbmd0aDtcbiAgY29uc3QgciA9IEZsb2F0MzJBcnJheS5mcm9tKHZhbHVlcyk7XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBuSXRlbXM7ICsraSkge1xuICAgIHJbaV0gPSB2YWx1ZXMuc2xpY2UoMCwgaSsxKS5yZWR1Y2UoKGEsIGIsIF8sIF9fKSA9PiAoX29wZXJhdGlvbnNbJ21pbiddKGEsIGIpKSk7XG4gIH1cbiAgcmV0dXJuIHI7XG59XG5cbi8qKlxuICogcHZhbHVlIGNvcnJlY3Rpb24gZm9yIGZhbHNlIGRpc2NvdmVyeSByYXRlXG4gKlxuICogQGV4cG9ydFxuICogQHBhcmFtIHtGbG9hdDMyQXJyYXl9IHB2YWxzIFNldCBvZiBwLXZhbHVlcyBvZiB0aGUgaW5kaXZpZHVhbCB0ZXN0cy5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbYWxwaGE9MC4wNV0gRmFtaWx5LXdpc2UgZXJyb3IgcmF0ZS4gRGVmYXVsdHMgdG8gMC4wNS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBbbWV0aG9kPSduJ10geydpJywgJ2luZGVwJywgJ3AnLCAncG9zY29ycicsICduJywgJ25lZ2NvcnInfSwgb3B0aW9uYWxcbiAqIFdoaWNoIG1ldGhvZCB0byB1c2UgZm9yIEZEUiBjb3JyZWN0aW9uLlxuICogYGB7J2knLCAnaW5kZXAnLCAncCcsICdwb3Njb3JyJ31gYCBhbGwgcmVmZXIgdG8gYGBmZHJfYmhgYFxuICogKEJlbmphbWluaS9Ib2NoYmVyZyBmb3IgaW5kZXBlbmRlbnQgb3IgcG9zaXRpdmVseVxuICogY29ycmVsYXRlZCB0ZXN0cykuIGBgeyduJywgJ25lZ2NvcnInfWBgIGJvdGggcmVmZXIgdG8gYGBmZHJfYnlgYFxuICogKEJlbmphbWluaS9ZZWt1dGllbGkgZm9yIGdlbmVyYWwgb3IgbmVnYXRpdmVseSBjb3JyZWxhdGVkIHRlc3RzKS5cbiAqIERlZmF1bHRzIHRvICduJy5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2lzU29ydGVkPWZhbHNlXSBJZiBGYWxzZSAoZGVmYXVsdCksIHRoZSBwX3ZhbHVlcyB3aWxsIGJlIHNvcnRlZCwgYnV0IHRoZSBjb3JyZWN0ZWRcbiAqIHB2YWx1ZXMgYXJlIGluIHRoZSBvcmlnaW5hbCBvcmRlci4gSWYgVHJ1ZSwgdGhlbiBpdCBhc3N1bWVkIHRoYXQgdGhlXG4gKiBwdmFsdWVzIGFyZSBhbHJlYWR5IHNvcnRlZCBpbiBhc2NlbmRpbmcgb3JkZXIuXG4gKiBAcmV0dXJuIHtbQXJyYXk8Ym9vbGVhbj4sIEZsb2F0MzJBcnJheV19IHJlamVjdGVkIDogbmRhcnJheSwgYm9vbFxuICogVHJ1ZSBpZiBhIGh5cG90aGVzaXMgaXMgcmVqZWN0ZWQsIEZhbHNlIGlmIG5vdFxuICogcHZhbHVlLWNvcnJlY3RlZCA6IG5kYXJyYXlcbiAqIHB2YWx1ZXMgYWRqdXN0ZWQgZm9yIG11bHRpcGxlIGh5cG90aGVzaXMgdGVzdGluZyB0byBsaW1pdCBGRFJcbiAqIEBzZWVcbiAqIElmIHRoZXJlIGlzIHByaW9yIGluZm9ybWF0aW9uIG9uIHRoZSBmcmFjdGlvbiBvZiB0cnVlIGh5cG90aGVzaXMsIHRoZW4gYWxwaGFcbiAqIHNob3VsZCBiZSBzZXQgdG8gYGBhbHBoYSAqIG0vbV8wYGAgd2hlcmUgbSBpcyB0aGUgbnVtYmVyIG9mIHRlc3RzLFxuICogZ2l2ZW4gYnkgdGhlIHAtdmFsdWVzLCBhbmQgbV8wIGlzIGFuIGVzdGltYXRlIG9mIHRoZSB0cnVlIGh5cG90aGVzaXMuXG4gKiAoc2VlIEJlbmphbWluaSwgS3JpZWdlciBhbmQgWWVrdXRlbGkpXG4gKlxuICogVGhlIHR3by1zdGVwIG1ldGhvZCBvZiBCZW5qYW1pbmksIEtyaWVnZXIgYW5kIFlla3V0aWVsIHRoYXQgZXN0aW1hdGVzIHRoZSBudW1iZXJcbiAqIG9mIGZhbHNlIGh5cG90aGVzZXMgd2lsbCBiZSBhdmFpbGFibGUgKHNvb24pLlxuICpcbiAqIEJvdGggbWV0aG9kcyBleHBvc2VkIHZpYSB0aGlzIGZ1bmN0aW9uIChCZW5qYW1pbmkvSG9jaGJlcmcsIEJlbmphbWluaS9ZZWt1dGllbGkpXG4gKiBhcmUgYWxzbyBhdmFpbGFibGUgaW4gdGhlIGZ1bmN0aW9uIGBgbXVsdGlwbGV0ZXN0c2BgLCBhcyBgYG1ldGhvZD1cImZkcl9iaFwiYGAgYW5kXG4gKiBgYG1ldGhvZD1cImZkcl9ieVwiYGAsIHJlc3BlY3RpdmVseS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZkcmNvcnJlY3Rpb24oXG4gIHB2YWxzOiBGbG9hdDMyQXJyYXksXG4gIGFscGhhOiBudW1iZXIgPSAwLjA1LFxuICBtZXRob2Q6IHN0cmluZyA9J24nLFxuICBpc1NvcnRlZDogYm9vbGVhbiA9IGZhbHNlKTogW0FycmF5PGJvb2xlYW4+LCBGbG9hdDMyQXJyYXldXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgYnJhY2Utc3R5bGVcbntcbiAgY29uc3Qgbkl0ZW1zID0gcHZhbHMubGVuZ3RoO1xuICBsZXQgcHZhbHNTb3J0ZWQ6IEZsb2F0MzJBcnJheTtcbiAgbGV0IHB2YWxzU29ydGluZDogSW50MzJBcnJheTtcbiAgbGV0IGNtID0gMDtcblxuICBpZiAoIWlzU29ydGVkKSB7XG4gICAgcHZhbHNTb3J0aW5kID0gX2FyZ3NvcnQocHZhbHMpO1xuICAgIHB2YWxzU29ydGVkID0gX3Rha2UocHZhbHNTb3J0aW5kLCBwdmFscyk7XG4gIH0gZWxzZSB7XG4gICAgcHZhbHNTb3J0aW5kID0gbmV3IEludDMyQXJyYXkobkl0ZW1zKS5maWxsKDApLm1hcCgoXywgaSkgPT4gKGkpKTtcbiAgICBwdmFsc1NvcnRlZCA9IHB2YWxzOyAvLyBhbGlhc1xuICB9XG5cbiAgbGV0IGVjZGZmYWN0b3IgPSBfZWNkZihwdmFsc1NvcnRlZCk7XG5cbiAgaWYgKFsnaScsICdpbmRlcCcsICdwJywgJ3Bvc2NvcnInXS5pbmNsdWRlcyhtZXRob2QpKSB7XG4gICAgO1xuICB9IGVsc2UgaWYgKFsnbicsICduZWdjb3JyJ10uaW5jbHVkZXMobWV0aG9kKSkge1xuICAgIGNtID0gX2NtKG5JdGVtcyk7XG4gICAgZWNkZmZhY3RvciA9IF9mYWN0b3IoZWNkZmZhY3RvciwgY20sICcvJyk7XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdvbmx5IGluZGVwIGFuZCBuZWdjb3JyIGltcGxlbWVudGVkJyk7XG4gIH1cblxuICBjb25zdCByZWplY3Q6IGJvb2xlYW5bXSA9IG5ldyBBcnJheShuSXRlbXMpLmZpbGwoZmFsc2UpO1xuICBsZXQgcmVqZWN0bWF4ID0gLTE7XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBuSXRlbXM7ICsraSkge1xuICAgIGlmIChwdmFsc1NvcnRlZFtpXSA8PSBlY2RmZmFjdG9yW2ldKmFscGhhKSB7XG4gICAgICByZWplY3RtYXggPSBpO1xuICAgIH1cbiAgfVxuXG4gIGlmIChyZWplY3RtYXggPj0gMCkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcmVqZWN0bWF4OyArK2kpIHtcbiAgICAgIHJlamVjdFtpXSA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgbGV0IHB2YWxzQ29ycmVjdGVkID0gX3ZmYWN0b3IocHZhbHNTb3J0ZWQsIGVjZGZmYWN0b3IsICcvJyk7XG4gIHB2YWxzQ29ycmVjdGVkID0gX21pbmltdW1BY2N1bXVsYXRlKHB2YWxzQ29ycmVjdGVkLnJldmVyc2UoKSkucmV2ZXJzZSgpO1xuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbkl0ZW1zOyArK2kpIHtcbiAgICBpZiAocHZhbHNDb3JyZWN0ZWRbaV0gPiAxKSB7XG4gICAgICBwdmFsc0NvcnJlY3RlZFtpXSA9IDE7XG4gICAgfVxuICB9XG5cbiAgaWYgKCFpc1NvcnRlZCkge1xuICAgIGNvbnN0IHB2YWxzQ29ycmVjdGVkXyA9IF9naXZlKHB2YWxzQ29ycmVjdGVkLCBwdmFsc1NvcnRpbmQpO1xuICAgIGNvbnN0IHJlamVjdF8gPSBfZ2l2ZWIocmVqZWN0LCBwdmFsc1NvcnRpbmQpO1xuICAgIHJldHVybiBbcmVqZWN0XywgcHZhbHNDb3JyZWN0ZWRfXTtcbiAgfVxuICByZXR1cm4gW3JlamVjdCwgcHZhbHNDb3JyZWN0ZWRdO1xufVxuIl19
191
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXVsdGlwbGUtdGVzdHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJtdWx0aXBsZS10ZXN0cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sMkNBQTJDLENBQUM7QUFFckUseURBQXlEO0FBQ3pELE1BQU0sV0FBVyxHQUErQjtJQUM5QyxHQUFHLEVBQUUsQ0FBQyxDQUFTLEVBQUUsQ0FBUyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDdEMsR0FBRyxFQUFFLENBQUMsQ0FBUyxFQUFFLENBQVMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3RDLEdBQUcsRUFBRSxDQUFDLENBQVMsRUFBRSxDQUFTLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUN0QyxHQUFHLEVBQUUsQ0FBQyxDQUFTLEVBQUUsQ0FBUyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDdEMsS0FBSyxFQUFFLENBQUMsQ0FBUyxFQUFFLENBQVMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNoRCxLQUFLLEVBQUUsQ0FBQyxDQUFTLEVBQUUsQ0FBUyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQ2pELENBQUM7QUFFRjs7Ozs7R0FLRztBQUNILFNBQVMsUUFBUSxDQUFDLE1BQW9CO0lBQ3BDLE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDakMsT0FBTyxVQUFVLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FB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LEVBQUUsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBRXhFLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLEVBQUUsRUFBRSxDQUFDLEVBQUU7UUFDL0IsSUFBSSxjQUFjLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQztZQUN2QixjQUFjLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0tBQ3pCO0lBRUQsSUFBSSxDQUFDLFFBQVEsRUFBRTtRQUNiLE1BQU0sZUFBZSxHQUFHLEtBQUssQ0FBQyxjQUFjLEVBQUUsWUFBWSxDQUFDLENBQUM7UUFDNUQsTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDLE1BQU0sRUFBRSxZQUFZLENBQUMsQ0FBQztRQUM3QyxPQUFPLENBQUMsT0FBTyxFQUFFLGVBQWUsQ0FBQyxDQUFDO0tBQ25DO0lBQ0QsT0FBTyxDQUFDLE1BQU0sRUFBRSxjQUFjLENBQUMsQ0FBQztBQUNsQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtBcnJheVV0aWxzfSBmcm9tICdAZGF0YWdyb2stbGlicmFyaWVzL3V0aWxzL3NyYy9hcnJheS11dGlscyc7XG5cbi8qKiBAdHlwZSB7Kn0gQSBkaWN0aW9uYXJ5IG9mIGJhc2ljIGJpbmFyeSBvcGVyYXRpb25zLiAqL1xuY29uc3QgX29wZXJhdGlvbnM6IHtbbmFtZTogc3RyaW5nXTogRnVuY3Rpb259ID0ge1xuICAnKyc6IChhOiBudW1iZXIsIGI6IG51bWJlcikgPT4gKGEgKyBiKSxcbiAgJy0nOiAoYTogbnVtYmVyLCBiOiBudW1iZXIpID0+IChhIC0gYiksXG4gICcqJzogKGE6IG51bWJlciwgYjogbnVtYmVyKSA9PiAoYSAqIGIpLFxuICAnLyc6IChhOiBudW1iZXIsIGI6IG51bWJlcikgPT4gKGEgLyBiKSxcbiAgJ21pbic6IChhOiBudW1iZXIsIGI6IG51bWJlcikgPT4gKGEgPCBiID8gYSA6IGIpLFxuICAnbWF4JzogKGE6IG51bWJlciwgYjogbnVtYmVyKSA9PiAoYSA+IGIgPyBhIDogYiksXG59O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIGluZGljZXMgdGhhdCB3b3VsZCBzb3J0IGFuIGFycmF5LlxuICpcbiAqIEBwYXJhbSB7RmxvYXQzMkFycmF5fSB2YWx1ZXMgQXJyYXkgdG8gc29ydC5cbiAqIEByZXR1cm4ge0ludDMyQXJyYXl9IEFycmF5IG9mIGluZGljZXMgdGhhdCBzb3J0IHZhbHVlcyBhbG9uZyB0aGUgZmlyc3QgYXhpcy5cbiAqL1xuZnVuY3Rpb24gX2FyZ3NvcnQodmFsdWVzOiBGbG9hdDMyQXJyYXkpOiBJbnQzMkFycmF5IHtcbiAgY29uc3QgYXJyYXkgPSBBcnJheS5mcm9tKHZhbHVlcyk7XG4gIHJldHVybiBJbnQzMkFycmF5LmZyb20oQXJyYXlVdGlscy5hcmdTb3J0KGFycmF5KSk7XG59XG5cbi8qKlxuICogVGFrZSBlbGVtZW50cyBmcm9tIGFuIGFycmF5LlxuICpcbiAqIEBwYXJhbSB7SW50MzJBcnJheX0gb3JkZXIgVGhlIGluZGljZXMgb2YgdGhlIHZhbHVlcyB0byBleHRyYWN0LlxuICogQHBhcmFtIHtGbG9hdDMyQXJyYXl9IHZhbHVlcyBUaGUgc291cmNlIGFycmF5LlxuICogQHJldHVybiB7RmxvYXQzMkFycmF5fSBUaGUgcmV0dXJuZWQgYXJyYXkgaGFzIHRoZSBzYW1lIHR5cGUgYXMgdmFsdWVzLlxuICovXG5mdW5jdGlvbiBfdGFrZShvcmRlcjogSW50MzJBcnJheSwgdmFsdWVzOiBGbG9hdDMyQXJyYXkpOiBGbG9hdDMyQXJyYXkge1xuICAvLyBUT0RPOiBJbXBsZW1lbnQgYSBnZW5lcmFsIGZ1bmN0aW9uIGZvciBUeXBlZEFycmF5LlxuICByZXR1cm4gRmxvYXQzMkFycmF5LmZyb20odmFsdWVzKS5tYXAoKF8sIGkpID0+IHZhbHVlc1tvcmRlcltpXV0pO1xufVxuXG4vKipcbiAqIEFzc2lnbiBlbGVtZW50cyBvZiBhbiBhcnJheSBmb2xsb3dpbmcgdGhlIG9yZGVyIGdpdmVuIChmbG9hdGluZy1wb2ludCB2ZXJzaW9uKS5cbiAqXG4gKiBAcGFyYW0ge0Zsb2F0MzJBcnJheX0gdmFsdWVzIFRoZSBzb3VyY2UgYXJyYXkuXG4gKiBAcGFyYW0ge0ludDMyQXJyYXl9IG9yZGVyIFRoZSBvcmRlciBnaXZlbi5cbiAqIEByZXR1cm4ge0Zsb2F0MzJBcnJheX0gVGhlIHJldHVybmVkIGFycmF5IGhhcyB0aGUgc2FtZSB0eXBlIGFzIHZhbHVlcy5cbiAqL1xuZnVuY3Rpb24gX2dpdmUodmFsdWVzOiBGbG9hdDMyQXJyYXksIG9yZGVyOiBJbnQzMkFycmF5KTogRmxvYXQzMkFycmF5IHtcbiAgY29uc3QgdiA9IEZsb2F0MzJBcnJheS5mcm9tKHZhbHVlcyk7XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBvcmRlci5sZW5ndGg7ICsraSlcbiAgICB2W29yZGVyW2ldXSA9IHZhbHVlc1tpXTtcblxuICByZXR1cm4gdjtcbn1cblxuLyoqXG4gKiBBc3NpZ24gZWxlbWVudHMgb2YgYW4gYXJyYXkgZm9sbG93aW5nIHRoZSBvcmRlciBnaXZlbiAoYm9vbGVhbiB2ZXJzaW9uKS5cbiAqXG4gKiBAcGFyYW0ge0FycmF5PGJvb2xlYW4+fSB2YWx1ZXMgVGhlIHNvdXJjZSBhcnJheS5cbiAqIEBwYXJhbSB7SW50MzJBcnJheX0gb3JkZXIgVGhlIG9yZGVyIGdpdmVuLlxuICogQHJldHVybiB7QXJyYXk8Ym9vbGVhbj59IFRoZSByZXR1cm5lZCBhcnJheSBoYXMgdGhlIHNhbWUgdHlwZSBhcyB2YWx1ZXMuXG4gKi9cbmZ1bmN0aW9uIF9naXZlYih2YWx1ZXM6IEFycmF5PGJvb2xlYW4+LCBvcmRlcjogSW50MzJBcnJheSk6IEFycmF5PGJvb2xlYW4+IHtcbiAgY29uc3QgdiA9IEFycmF5LmZyb20odmFsdWVzKTtcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IG9yZGVyLmxlbmd0aDsgKytpKVxuICAgIHZbb3JkZXJbaV1dID0gdmFsdWVzW2ldO1xuXG4gIHJldHVybiB2O1xufVxuXG4vKipcbiAqIE5vIGZyaWxscyBlbXBpcmljYWwgY2RmIHVzZWQgaW4gZmRyY29ycmVjdGlvbi5cbiAqXG4gKiBAcGFyYW0ge0Zsb2F0MzJBcnJheX0geCBUaGUgc291cmNlIGFycmF5IHRvIHRha2UgYSBkaW1lbnNpb24gZnJvbS5cbiAqIEByZXR1cm4ge0Zsb2F0MzJBcnJheX0gRW1waXJpY2FsIGNkZi5cbiAqL1xuZnVuY3Rpb24gX2VjZGYoeDogRmxvYXQzMkFycmF5KTogRmxvYXQzMkFycmF5IHtcbiAgY29uc3Qgbm9icyA9IHgubGVuZ3RoO1xuICByZXR1cm4gRmxvYXQzMkFycmF5LmZyb20oeCkubWFwKChfLCBpKSA9PiAoaSsxKS9ub2JzKTtcbn1cblxuLyoqXG4gKiBjbSA9IG5wLnN1bSgxLi9ucC5hcmFuZ2UoMSwgbGVuKHB2YWxzX3NvcnRlZCkrMSkpXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IG4gVGhlIG51bWJlciBnaXZlbi5cbiAqIEByZXR1cm4ge251bWJlcn0gY20gdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIF9jbShuOiBudW1iZXIpOiBudW1iZXIge1xuICBsZXQgc3VtID0gMDtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBuOyArK2kpXG4gICAgc3VtICs9IDEgLyAoaSsxKTtcblxuICByZXR1cm4gc3VtO1xufVxuXG4vKipcbiAqIEJhc2ljIG9wZXJhdGlvbiB1bmRlciBhIHZlY3RvciBhbmQgYSBzY2FsYXIuXG4gKlxuICogQHBhcmFtIHtGbG9hdDMyQXJyYXl9IHZhbHVlcyBUaGUgc291cmNlIHZlY3Rvci5cbiAqIEBwYXJhbSB7bnVtYmVyfSBzY2FsZSBUaGUgc2NhbGFyLlxuICogQHBhcmFtIHtzdHJpbmd9IFtvcD0nKiddIFRoZSBvcGVyYXRpb24gdG8gcGVyZm9ybS5cbiAqIEByZXR1cm4ge0Zsb2F0MzJBcnJheX0gTmV3IHZlY3RvciBhcyBhIHJlc3VsdCBvZiB0aGUgb3BlcmF0aW9uLlxuICovXG5mdW5jdGlvbiBfZmFjdG9yKHZhbHVlczogRmxvYXQzMkFycmF5LCBzY2FsZTogbnVtYmVyLCBvcCA9ICcqJyk6IEZsb2F0MzJBcnJheSB7XG4gIHJldHVybiBGbG9hdDMyQXJyYXkuZnJvbSh2YWx1ZXMpLm1hcCgodiwgXykgPT4gX29wZXJhdGlvbnNbb3BdKHYsIHNjYWxlKSk7XG59XG5cbi8qKlxuICogQmFzaWMgb3BlcmF0aW9uIHVuZGVyIHR3byB2ZWN0b3JzLlxuICpcbiAqIEBwYXJhbSB7RmxvYXQzMkFycmF5fSB2YWx1ZXMgVGhlIGZpcnN0IHZlY3Rvci5cbiAqIEBwYXJhbSB7RmxvYXQzMkFycmF5fSBzY2FsZSBUaGUgc2Vjb25kIHZlY3Rvci5cbiAqIEBwYXJhbSB7c3RyaW5nfSBbb3A9JyonXSBUaGUgb3BlcmF0aW9uIHRvIHBlcmZvcm0uXG4gKiBAcmV0dXJuIHtGbG9hdDMyQXJyYXl9IE5ldyB2ZWN0b3IgYXMgYSByZXN1bHQgb2YgdGhlIG9wZXJhdGlvbi5cbiAqL1xuZnVuY3Rpb24gX3ZmYWN0b3IodmFsdWVzOiBGbG9hdDMyQXJyYXksIHNjYWxlOiBGbG9hdDMyQXJyYXksIG9wID0gJyonKTogRmxvYXQzMkFycmF5IHtcbiAgcmV0dXJuIEZsb2F0MzJBcnJheS5mcm9tKHZhbHVlcykubWFwKCh2LCBpKSA9PiBfb3BlcmF0aW9uc1tvcF0odiwgc2NhbGVbaV0pKTtcbn1cblxuLyoqXG4gKiBBY2N1bXVsYXRlIHRoZSByZXN1bHQgb2YgYXBwbHlpbmcgdGhlIG1pbiBvcGVyYXRvciB0byBhbGwgZWxlbWVudHMuXG4gKlxuICogQHBhcmFtIHtGbG9hdDMyQXJyYXl9IHZhbHVlcyBUaGUgYXJyYXkgdG8gYWN0IG9uLlxuICogQHJldHVybiB7RmxvYXQzMkFycmF5fSBUaGUgYWNjdW11bGF0ZWQgdmFsdWVzLlxuICovXG5mdW5jdGlvbiBfbWluaW11bUFjY3VtdWxhdGUodmFsdWVzOiBGbG9hdDMyQXJyYXkpOiBGbG9hdDMyQXJyYXkge1xuICBjb25zdCBuSXRlbXMgPSB2YWx1ZXMubGVuZ3RoO1xuICBjb25zdCByID0gRmxvYXQzMkFycmF5LmZyb20odmFsdWVzKTtcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IG5JdGVtczsgKytpKVxuICAgIHJbaV0gPSB2YWx1ZXMuc2xpY2UoMCwgaSsxKS5yZWR1Y2UoKGEsIGIsIF8sIF9fKSA9PiAoX29wZXJhdGlvbnNbJ21pbiddKGEsIGIpKSk7XG5cbiAgcmV0dXJuIHI7XG59XG5cbi8qKlxuICogcHZhbHVlIGNvcnJlY3Rpb24gZm9yIGZhbHNlIGRpc2NvdmVyeSByYXRlXG4gKlxuICogQGV4cG9ydFxuICogQHBhcmFtIHtGbG9hdDMyQXJyYXl9IHB2YWxzIFNldCBvZiBwLXZhbHVlcyBvZiB0aGUgaW5kaXZpZHVhbCB0ZXN0cy5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbYWxwaGE9MC4wNV0gRmFtaWx5LXdpc2UgZXJyb3IgcmF0ZS4gRGVmYXVsdHMgdG8gMC4wNS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBbbWV0aG9kPSduJ10geydpJywgJ2luZGVwJywgJ3AnLCAncG9zY29ycicsICduJywgJ25lZ2NvcnInfSwgb3B0aW9uYWxcbiAqIFdoaWNoIG1ldGhvZCB0byB1c2UgZm9yIEZEUiBjb3JyZWN0aW9uLlxuICogYGB7J2knLCAnaW5kZXAnLCAncCcsICdwb3Njb3JyJ31gYCBhbGwgcmVmZXIgdG8gYGBmZHJfYmhgYFxuICogKEJlbmphbWluaS9Ib2NoYmVyZyBmb3IgaW5kZXBlbmRlbnQgb3IgcG9zaXRpdmVseVxuICogY29ycmVsYXRlZCB0ZXN0cykuIGBgeyduJywgJ25lZ2NvcnInfWBgIGJvdGggcmVmZXIgdG8gYGBmZHJfYnlgYFxuICogKEJlbmphbWluaS9ZZWt1dGllbGkgZm9yIGdlbmVyYWwgb3IgbmVnYXRpdmVseSBjb3JyZWxhdGVkIHRlc3RzKS5cbiAqIERlZmF1bHRzIHRvICduJy5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2lzU29ydGVkPWZhbHNlXSBJZiBGYWxzZSAoZGVmYXVsdCksIHRoZSBwX3ZhbHVlcyB3aWxsIGJlIHNvcnRlZCwgYnV0IHRoZSBjb3JyZWN0ZWRcbiAqIHB2YWx1ZXMgYXJlIGluIHRoZSBvcmlnaW5hbCBvcmRlci4gSWYgVHJ1ZSwgdGhlbiBpdCBhc3N1bWVkIHRoYXQgdGhlXG4gKiBwdmFsdWVzIGFyZSBhbHJlYWR5IHNvcnRlZCBpbiBhc2NlbmRpbmcgb3JkZXIuXG4gKiBAcmV0dXJuIHtbQXJyYXk8Ym9vbGVhbj4sIEZsb2F0MzJBcnJheV19IHJlamVjdGVkIDogbmRhcnJheSwgYm9vbFxuICogVHJ1ZSBpZiBhIGh5cG90aGVzaXMgaXMgcmVqZWN0ZWQsIEZhbHNlIGlmIG5vdFxuICogcHZhbHVlLWNvcnJlY3RlZCA6IG5kYXJyYXlcbiAqIHB2YWx1ZXMgYWRqdXN0ZWQgZm9yIG11bHRpcGxlIGh5cG90aGVzaXMgdGVzdGluZyB0byBsaW1pdCBGRFJcbiAqIEBzZWVcbiAqIElmIHRoZXJlIGlzIHByaW9yIGluZm9ybWF0aW9uIG9uIHRoZSBmcmFjdGlvbiBvZiB0cnVlIGh5cG90aGVzaXMsIHRoZW4gYWxwaGFcbiAqIHNob3VsZCBiZSBzZXQgdG8gYGBhbHBoYSAqIG0vbV8wYGAgd2hlcmUgbSBpcyB0aGUgbnVtYmVyIG9mIHRlc3RzLFxuICogZ2l2ZW4gYnkgdGhlIHAtdmFsdWVzLCBhbmQgbV8wIGlzIGFuIGVzdGltYXRlIG9mIHRoZSB0cnVlIGh5cG90aGVzaXMuXG4gKiAoc2VlIEJlbmphbWluaSwgS3JpZWdlciBhbmQgWWVrdXRlbGkpXG4gKlxuICogVGhlIHR3by1zdGVwIG1ldGhvZCBvZiBCZW5qYW1pbmksIEtyaWVnZXIgYW5kIFlla3V0aWVsIHRoYXQgZXN0aW1hdGVzIHRoZSBudW1iZXJcbiAqIG9mIGZhbHNlIGh5cG90aGVzZXMgd2lsbCBiZSBhdmFpbGFibGUgKHNvb24pLlxuICpcbiAqIEJvdGggbWV0aG9kcyBleHBvc2VkIHZpYSB0aGlzIGZ1bmN0aW9uIChCZW5qYW1pbmkvSG9jaGJlcmcsIEJlbmphbWluaS9ZZWt1dGllbGkpXG4gKiBhcmUgYWxzbyBhdmFpbGFibGUgaW4gdGhlIGZ1bmN0aW9uIGBgbXVsdGlwbGV0ZXN0c2BgLCBhcyBgYG1ldGhvZD1cImZkcl9iaFwiYGAgYW5kXG4gKiBgYG1ldGhvZD1cImZkcl9ieVwiYGAsIHJlc3BlY3RpdmVseS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZkcmNvcnJlY3Rpb24oXG4gIHB2YWxzOiBGbG9hdDMyQXJyYXksXG4gIGFscGhhOiBudW1iZXIgPSAwLjA1LFxuICBtZXRob2Q6IHN0cmluZyA9J24nLFxuICBpc1NvcnRlZDogYm9vbGVhbiA9IGZhbHNlKTogW0FycmF5PGJvb2xlYW4+LCBGbG9hdDMyQXJyYXldXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgYnJhY2Utc3R5bGVcbntcbiAgY29uc3Qgbkl0ZW1zID0gcHZhbHMubGVuZ3RoO1xuICBsZXQgcHZhbHNTb3J0ZWQ6IEZsb2F0MzJBcnJheTtcbiAgbGV0IHB2YWxzU29ydGluZDogSW50MzJBcnJheTtcbiAgbGV0IGNtID0gMDtcblxuICBpZiAoIWlzU29ydGVkKSB7XG4gICAgcHZhbHNTb3J0aW5kID0gX2FyZ3NvcnQocHZhbHMpO1xuICAgIHB2YWxzU29ydGVkID0gX3Rha2UocHZhbHNTb3J0aW5kLCBwdmFscyk7XG4gIH0gZWxzZSB7XG4gICAgcHZhbHNTb3J0aW5kID0gbmV3IEludDMyQXJyYXkobkl0ZW1zKS5maWxsKDApLm1hcCgoXywgaSkgPT4gKGkpKTtcbiAgICBwdmFsc1NvcnRlZCA9IHB2YWxzOyAvLyBhbGlhc1xuICB9XG5cbiAgbGV0IGVjZGZmYWN0b3IgPSBfZWNkZihwdmFsc1NvcnRlZCk7XG5cbiAgaWYgKFsnbicsICduZWdjb3JyJ10uaW5jbHVkZXMobWV0aG9kKSkge1xuICAgIGNtID0gX2NtKG5JdGVtcyk7XG4gICAgZWNkZmZhY3RvciA9IF9mYWN0b3IoZWNkZmZhY3RvciwgY20sICcvJyk7XG4gIH0gZWxzZSBpZiAoIVsnaScsICdpbmRlcCcsICdwJywgJ3Bvc2NvcnInXS5pbmNsdWRlcyhtZXRob2QpKVxuICAgIHRocm93IG5ldyBFcnJvcignb25seSBpbmRlcCBhbmQgbmVnY29yciBpbXBsZW1lbnRlZCcpO1xuXG4gIGNvbnN0IHJlamVjdDogYm9vbGVhbltdID0gbmV3IEFycmF5KG5JdGVtcykuZmlsbChmYWxzZSk7XG4gIGxldCByZWplY3RtYXggPSAtMTtcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IG5JdGVtczsgKytpKSB7XG4gICAgaWYgKHB2YWxzU29ydGVkW2ldIDw9IGVjZGZmYWN0b3JbaV0qYWxwaGEpXG4gICAgICByZWplY3RtYXggPSBpO1xuICB9XG5cbiAgaWYgKHJlamVjdG1heCA+PSAwKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCByZWplY3RtYXg7ICsraSlcbiAgICAgIHJlamVjdFtpXSA9IHRydWU7XG4gIH1cblxuICBsZXQgcHZhbHNDb3JyZWN0ZWQgPSBfdmZhY3RvcihwdmFsc1NvcnRlZCwgZWNkZmZhY3RvciwgJy8nKTtcbiAgcHZhbHNDb3JyZWN0ZWQgPSBfbWluaW11bUFjY3VtdWxhdGUocHZhbHNDb3JyZWN0ZWQucmV2ZXJzZSgpKS5yZXZlcnNlKCk7XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBuSXRlbXM7ICsraSkge1xuICAgIGlmIChwdmFsc0NvcnJlY3RlZFtpXSA+IDEpXG4gICAgICBwdmFsc0NvcnJlY3RlZFtpXSA9IDE7XG4gIH1cblxuICBpZiAoIWlzU29ydGVkKSB7XG4gICAgY29uc3QgcHZhbHNDb3JyZWN0ZWRfID0gX2dpdmUocHZhbHNDb3JyZWN0ZWQsIHB2YWxzU29ydGluZCk7XG4gICAgY29uc3QgcmVqZWN0XyA9IF9naXZlYihyZWplY3QsIHB2YWxzU29ydGluZCk7XG4gICAgcmV0dXJuIFtyZWplY3RfLCBwdmFsc0NvcnJlY3RlZF9dO1xuICB9XG4gIHJldHVybiBbcmVqZWN0LCBwdmFsc0NvcnJlY3RlZF07XG59XG4iXX0=
package/src/tests.d.ts CHANGED
@@ -6,7 +6,7 @@ declare type testStats = {
6
6
  'p-value less': number;
7
7
  };
8
8
  declare type Population = number[] | Float32Array | Int32Array;
9
- export declare function tTest(arr1: Population, arr2: Population, devKnown?: boolean, devEqual?: boolean): testStats;
9
+ export declare function tTest(sample1: Population, sample2: Population, devKnown?: boolean, devEqual?: boolean): testStats;
10
10
  export declare function uTest(x: number[], y: number[], continuity?: boolean): testStats;
11
11
  export {};
12
12
  //# sourceMappingURL=tests.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"tests.d.ts","sourceRoot":"","sources":["tests.ts"],"names":[],"mappings":"AAGA,aAAK,SAAS,GAAG;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;CACxB,CAAC;AAEF,aAAK,UAAU,GAAG,MAAM,EAAE,GAAG,YAAY,GAAG,UAAU,CAAC;AAEvD,wBAAgB,KAAK,CAAC,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,UAAM,EAAE,QAAQ,UAAM,GAAG,SAAS,CA8CnG;AAED,wBAAgB,KAAK,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,UAAU,UAAK,GAAG,SAAS,CA+B1E"}
1
+ {"version":3,"file":"tests.d.ts","sourceRoot":"","sources":["tests.ts"],"names":[],"mappings":"AAGA,aAAK,SAAS,GAAG;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;CACxB,CAAC;AAEF,aAAK,UAAU,GAAG,MAAM,EAAE,GAAG,YAAY,GAAG,UAAU,CAAC;AAEvD,wBAAgB,KAAK,CAAC,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,UAAU,EAAE,QAAQ,UAAM,EAAE,QAAQ,UAAM,GAAG,SAAS,CA6CzG;AAED,wBAAgB,KAAK,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,UAAU,UAAK,GAAG,SAAS,CA+B1E"}
package/src/tests.js CHANGED
@@ -1,48 +1,46 @@
1
1
  //@ts-ignore: no types
2
2
  import * as jStat from 'jstat';
3
- export function tTest(arr1, arr2, devKnown = false, devEqual = false) {
4
- const m1 = jStat.mean(arr1);
5
- const m2 = jStat.mean(arr2);
6
- const v1 = jStat.variance(arr1);
7
- const v2 = jStat.variance(arr2);
8
- const n1 = arr1.length;
9
- const n2 = arr2.length;
10
- let wv1;
11
- let wv2;
12
- let wv;
13
- let Z;
14
- let K;
3
+ export function tTest(sample1, sample2, devKnown = false, devEqual = false) {
4
+ if (sample1.length <= 1 || sample2.length <= 1)
5
+ throw new Error(`StatisticsError: Wrong sample size; expected at least 2, got ${Math.min(sample1.length, sample2.length)})`);
6
+ const mean1 = jStat.mean(sample1);
7
+ const mean2 = jStat.mean(sample2);
8
+ const variance1 = jStat.variance(sample1);
9
+ const variance2 = jStat.variance(sample2);
10
+ const length1 = sample1.length;
11
+ const length2 = sample2.length;
15
12
  let pMore;
16
13
  let pLess;
17
14
  let pTot;
18
15
  if (!devKnown) {
19
16
  if (!devEqual) {
20
- wv1 = v1 / n1;
21
- wv2 = v2 / n2;
22
- Z = (m1 - m2) / Math.sqrt(wv1 + wv2);
23
- K = Math.pow((wv1 + wv2), 2) / (wv1 * wv1 / (n1 - 1) + wv2 * wv2 / (n2 - 1));
24
- pLess = jStat.studentt.cdf(Z, K);
17
+ const sampleVariance1 = variance1 / length1;
18
+ const sampleVariance2 = variance2 / length2;
19
+ const criticalValue = (mean1 - mean2) / Math.sqrt(sampleVariance1 + sampleVariance2);
20
+ const dof = Math.pow((sampleVariance1 + sampleVariance2), 2) /
21
+ (Math.pow(sampleVariance1, 2) / (length1 - 1) + Math.pow(sampleVariance2, 2) / (length2 - 1));
22
+ pLess = jStat.studentt.cdf(criticalValue, dof);
25
23
  pMore = 1 - pLess;
26
24
  pTot = 2 * (pLess < pMore ? pLess : pMore);
27
25
  }
28
26
  else {
29
- K = n1 + n2 - 2;
30
- wv = (v1 * (n1 - 1) + v2 * (n2 - 1)) / K;
31
- Z = Math.sqrt(n1 * n2 / (n1 + n2)) * (m1 - m2) / wv;
32
- pMore = 1 - jStat.studentt.cdf(Z, K);
33
- pLess = jStat.studentt.cdf(Z, K);
27
+ const dof = length1 + length2 - 2;
28
+ const totalVariance = (variance1 * (length1 - 1) + variance2 * (length2 - 1)) / dof;
29
+ const criticalValue = Math.sqrt(length1 * length2 / (length1 + length2)) * (mean1 - mean2) / totalVariance;
30
+ pMore = 1 - jStat.studentt.cdf(criticalValue, dof);
31
+ pLess = jStat.studentt.cdf(criticalValue, dof);
34
32
  pTot = 2 * (pLess < pMore ? pLess : pMore);
35
33
  }
36
34
  }
37
35
  else {
38
- wv1 = v1 / n1;
39
- wv2 = v2 / n2;
40
- Z = (m1 - m2) / Math.sqrt(wv1 + wv2);
41
- pLess = jStat.normal.pdf(Z, 0, 1);
36
+ const sampleVariance1 = variance1 / length1;
37
+ const sampleVariance2 = variance2 / length2;
38
+ const criticalValue = (mean1 - mean2) / Math.sqrt(sampleVariance1 + sampleVariance2);
39
+ pLess = jStat.normal.pdf(criticalValue, 0, 1);
42
40
  pMore = 1 - pLess;
43
41
  pTot = 2 * (pLess < pMore ? pLess : pMore);
44
42
  }
45
- return { 'p-value': pTot, 'Mean difference': m1 - m2, 'p-value more': pMore, 'p-value less': pLess };
43
+ return { 'p-value': pTot, 'Mean difference': mean1 - mean2, 'p-value more': pMore, 'p-value less': pLess };
46
44
  }
47
45
  export function uTest(x, y, continuity = true) {
48
46
  const xy = x.concat(y);
@@ -60,9 +58,8 @@ export function uTest(x, y, continuity = true) {
60
58
  const tieTerm = _tieTerm(ranks);
61
59
  const s = Math.sqrt(n1 * n2 / 12 * ((n + 1) - tieTerm / (n * (n - 1))));
62
60
  let numerator = U - mu;
63
- if (continuity) {
61
+ if (continuity)
64
62
  numerator -= 0.5;
65
- }
66
63
  const z = numerator / s;
67
64
  const p = 2 * (1 - jStat.normal.cdf(z, 0, 1));
68
65
  return { 'p-value': p, 'Median difference': med1 - med2, 'p-value more': p, 'p-value less': p };
@@ -74,4 +71,4 @@ function _tieTerm(ranks) {
74
71
  });
75
72
  return jStat.sum(Object.values(ties));
76
73
  }
77
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJ0ZXN0cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxzQkFBc0I7QUFDdEIsT0FBTyxLQUFLLEtBQUssTUFBTSxPQUFPLENBQUM7QUFZL0IsTUFBTSxVQUFVLEtBQUssQ0FBQyxJQUFnQixFQUFFLElBQWdCLEVBQUUsUUFBUSxHQUFDLEtBQUssRUFBRSxRQUFRLEdBQUMsS0FBSztJQUN0RixNQUFNLEVBQUUsR0FBVyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3BDLE1BQU0sRUFBRSxHQUFXLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDcEMsTUFBTSxFQUFFLEdBQVcsS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN4QyxNQUFNLEVBQUUsR0FBVyxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3hDLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7SUFDdkIsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztJQUV2QixJQUFJLEdBQUcsQ0FBQztJQUNSLElBQUksR0FBRyxDQUFDO0lBQ1IsSUFBSSxFQUFFLENBQUM7SUFDUCxJQUFJLENBQUMsQ0FBQztJQUNOLElBQUksQ0FBQyxDQUFDO0lBQ04sSUFBSSxLQUFLLENBQUM7SUFDVixJQUFJLEtBQUssQ0FBQztJQUNWLElBQUksSUFBSSxDQUFDO0lBRVQsSUFBSSxDQUFDLFFBQVEsRUFBRTtRQUNiLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDYixHQUFHLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztZQUNkLEdBQUcsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO1lBQ2QsQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO1lBQ3JDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFFN0UsS0FBSyxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUNqQyxLQUFLLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQztZQUNsQixJQUFJLEdBQUcsQ0FBQyxHQUFHLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUM1QzthQUFNO1lBQ0wsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1lBQ2hCLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDekMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUVwRCxLQUFLLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUNyQyxLQUFLLEdBQUcsS0FBSyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQ2pDLElBQUksR0FBRyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQzVDO0tBQ0Y7U0FBTTtRQUNMLEdBQUcsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO1FBQ2QsR0FBRyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7UUFDZCxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7UUFFckMsS0FBSyxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDbEMsS0FBSyxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUM7UUFDbEIsSUFBSSxHQUFHLENBQUMsR0FBRyxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7S0FDNUM7SUFDRCxPQUFPLEVBQUMsU0FBUyxFQUFFLElBQUksRUFBRSxpQkFBaUIsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLGNBQWMsRUFBRSxLQUFLLEVBQUUsY0FBYyxFQUFFLEtBQUssRUFBQyxDQUFDO0FBQ3JHLENBQUM7QUFFRCxNQUFNLFVBQVUsS0FBSyxDQUFDLENBQVcsRUFBRSxDQUFXLEVBQUUsVUFBVSxHQUFDLElBQUk7SUFDN0QsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN2QixNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDO0lBQ3BCLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUM7SUFDcEIsTUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM3QixNQUFNLElBQUksR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBRTdCLE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7SUFFN0IsTUFBTSxFQUFFLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3pDLE1BQU0sRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2xDLE1BQU0sRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0lBQ3hCLE1BQU0sQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0lBRTVCLE1BQU0sRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ3ZCLE1BQU0sQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7SUFFbEIsTUFBTSxPQUFPLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2hDLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxPQUFPLEdBQUcsQ0FBQyxDQUFDLEdBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFFdkUsSUFBSSxTQUFTLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztJQUV2QixJQUFJLFVBQVUsRUFBRTtRQUNkLFNBQVMsSUFBSSxHQUFHLENBQUM7S0FDbEI7SUFFRCxNQUFNLENBQUMsR0FBRyxTQUFTLEdBQUcsQ0FBQyxDQUFDO0lBRXhCLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFFOUMsT0FBTyxFQUFDLFNBQVMsRUFBRSxDQUFDLEVBQUUsbUJBQW1CLEVBQUUsSUFBSSxHQUFHLElBQUksRUFBRSxjQUFjLEVBQUUsQ0FBQyxFQUFFLGNBQWMsRUFBRSxDQUFDLEVBQUMsQ0FBQztBQUNoRyxDQUFDO0FBRUQsU0FBUyxRQUFRLENBQUMsS0FBZTtJQUMvQixNQUFNLElBQUksR0FBNEIsRUFBRSxDQUFDO0lBRXpDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtRQUNwQixJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ25DLENBQUMsQ0FBQyxDQUFDO0lBRUgsT0FBTyxLQUFLLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUN4QyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy9AdHMtaWdub3JlOiBubyB0eXBlc1xuaW1wb3J0ICogYXMgalN0YXQgZnJvbSAnanN0YXQnO1xuXG50eXBlIHRlc3RTdGF0cyA9IHtcbiAgJ3AtdmFsdWUnOiBudW1iZXIsXG4gICdNZWFuIGRpZmZlcmVuY2UnPzogbnVtYmVyLFxuICAnTWVkaWFuIGRpZmZlcmVuY2UnPzogbnVtYmVyLFxuICAncC12YWx1ZSBtb3JlJzogbnVtYmVyLFxuICAncC12YWx1ZSBsZXNzJzogbnVtYmVyLFxufTtcblxudHlwZSBQb3B1bGF0aW9uID0gbnVtYmVyW10gfCBGbG9hdDMyQXJyYXkgfCBJbnQzMkFycmF5O1xuXG5leHBvcnQgZnVuY3Rpb24gdFRlc3QoYXJyMTogUG9wdWxhdGlvbiwgYXJyMjogUG9wdWxhdGlvbiwgZGV2S25vd249ZmFsc2UsIGRldkVxdWFsPWZhbHNlKTogdGVzdFN0YXRzIHtcbiAgY29uc3QgbTE6IG51bWJlciA9IGpTdGF0Lm1lYW4oYXJyMSk7XG4gIGNvbnN0IG0yOiBudW1iZXIgPSBqU3RhdC5tZWFuKGFycjIpO1xuICBjb25zdCB2MTogbnVtYmVyID0galN0YXQudmFyaWFuY2UoYXJyMSk7XG4gIGNvbnN0IHYyOiBudW1iZXIgPSBqU3RhdC52YXJpYW5jZShhcnIyKTtcbiAgY29uc3QgbjEgPSBhcnIxLmxlbmd0aDtcbiAgY29uc3QgbjIgPSBhcnIyLmxlbmd0aDtcblxuICBsZXQgd3YxO1xuICBsZXQgd3YyO1xuICBsZXQgd3Y7XG4gIGxldCBaO1xuICBsZXQgSztcbiAgbGV0IHBNb3JlO1xuICBsZXQgcExlc3M7XG4gIGxldCBwVG90O1xuXG4gIGlmICghZGV2S25vd24pIHtcbiAgICBpZiAoIWRldkVxdWFsKSB7XG4gICAgICB3djEgPSB2MSAvIG4xO1xuICAgICAgd3YyID0gdjIgLyBuMjtcbiAgICAgIFogPSAobTEgLSBtMikgLyBNYXRoLnNxcnQod3YxICsgd3YyKTtcbiAgICAgIEsgPSBNYXRoLnBvdygod3YxICsgd3YyKSwgMikgLyAod3YxICogd3YxIC8gKG4xIC0gMSkgKyB3djIgKiB3djIgLyAobjIgLSAxKSk7XG5cbiAgICAgIHBMZXNzID0galN0YXQuc3R1ZGVudHQuY2RmKFosIEspO1xuICAgICAgcE1vcmUgPSAxIC0gcExlc3M7XG4gICAgICBwVG90ID0gMiAqIChwTGVzcyA8IHBNb3JlID8gcExlc3MgOiBwTW9yZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIEsgPSBuMSArIG4yIC0gMjtcbiAgICAgIHd2ID0gKHYxICogKG4xIC0gMSkgKyB2MiAqIChuMiAtIDEpKSAvIEs7XG4gICAgICBaID0gTWF0aC5zcXJ0KG4xICogbjIgLyAobjEgKyBuMikpICogKG0xIC0gbTIpIC8gd3Y7XG5cbiAgICAgIHBNb3JlID0gMSAtIGpTdGF0LnN0dWRlbnR0LmNkZihaLCBLKTtcbiAgICAgIHBMZXNzID0galN0YXQuc3R1ZGVudHQuY2RmKFosIEspO1xuICAgICAgcFRvdCA9IDIgKiAocExlc3MgPCBwTW9yZSA/IHBMZXNzIDogcE1vcmUpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB3djEgPSB2MSAvIG4xO1xuICAgIHd2MiA9IHYyIC8gbjI7XG4gICAgWiA9IChtMSAtIG0yKSAvIE1hdGguc3FydCh3djEgKyB3djIpO1xuXG4gICAgcExlc3MgPSBqU3RhdC5ub3JtYWwucGRmKFosIDAsIDEpO1xuICAgIHBNb3JlID0gMSAtIHBMZXNzO1xuICAgIHBUb3QgPSAyICogKHBMZXNzIDwgcE1vcmUgPyBwTGVzcyA6IHBNb3JlKTtcbiAgfVxuICByZXR1cm4geydwLXZhbHVlJzogcFRvdCwgJ01lYW4gZGlmZmVyZW5jZSc6IG0xIC0gbTIsICdwLXZhbHVlIG1vcmUnOiBwTW9yZSwgJ3AtdmFsdWUgbGVzcyc6IHBMZXNzfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVUZXN0KHg6IG51bWJlcltdLCB5OiBudW1iZXJbXSwgY29udGludWl0eT10cnVlKTogdGVzdFN0YXRzIHtcbiAgY29uc3QgeHkgPSB4LmNvbmNhdCh5KTtcbiAgY29uc3QgbjEgPSB4Lmxlbmd0aDtcbiAgY29uc3QgbjIgPSB5Lmxlbmd0aDtcbiAgY29uc3QgbWVkMSA9IGpTdGF0Lm1lZGlhbih4KTtcbiAgY29uc3QgbWVkMiA9IGpTdGF0Lm1lZGlhbih5KTtcblxuICBjb25zdCByYW5rcyA9IGpTdGF0LnJhbmsoeHkpO1xuXG4gIGNvbnN0IFIxID0galN0YXQuc3VtKHJhbmtzLnNsaWNlKDAsIG4xKSk7XG4gIGNvbnN0IFUxID0gUjEgLSBuMSAqIChuMSArIDEpIC8gMjtcbiAgY29uc3QgVTIgPSBuMSAqIG4yIC0gVTE7XG4gIGNvbnN0IFUgPSBVMSA+IFUyID8gVTEgOiBVMjtcblxuICBjb25zdCBtdSA9IG4xICogbjIgLyAyO1xuICBjb25zdCBuID0gbjEgKyBuMjtcblxuICBjb25zdCB0aWVUZXJtID0gX3RpZVRlcm0ocmFua3MpO1xuICBjb25zdCBzID0gTWF0aC5zcXJ0KG4xICogbjIgLyAxMiAqICgobiArIDEpIC0gdGllVGVybSAvIChuKiAobiAtIDEpKSkpO1xuXG4gIGxldCBudW1lcmF0b3IgPSBVIC0gbXU7XG5cbiAgaWYgKGNvbnRpbnVpdHkpIHtcbiAgICBudW1lcmF0b3IgLT0gMC41O1xuICB9XG5cbiAgY29uc3QgeiA9IG51bWVyYXRvciAvIHM7XG5cbiAgY29uc3QgcCA9IDIgKiAoMSAtIGpTdGF0Lm5vcm1hbC5jZGYoeiwgMCwgMSkpO1xuXG4gIHJldHVybiB7J3AtdmFsdWUnOiBwLCAnTWVkaWFuIGRpZmZlcmVuY2UnOiBtZWQxIC0gbWVkMiwgJ3AtdmFsdWUgbW9yZSc6IHAsICdwLXZhbHVlIGxlc3MnOiBwfTtcbn1cblxuZnVuY3Rpb24gX3RpZVRlcm0ocmFua3M6IG51bWJlcltdKTogbnVtYmVyIHtcbiAgY29uc3QgdGllczoge1trZXk6IG51bWJlcl06IG51bWJlcn0gPSB7fTtcblxuICByYW5rcy5mb3JFYWNoKChudW0pID0+IHtcbiAgICB0aWVzW251bV0gPSAodGllc1tudW1dIHx8IDApICsgMTtcbiAgfSk7XG5cbiAgcmV0dXJuIGpTdGF0LnN1bShPYmplY3QudmFsdWVzKHRpZXMpKTtcbn1cbiJdfQ==
74
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJ0ZXN0cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxzQkFBc0I7QUFDdEIsT0FBTyxLQUFLLEtBQUssTUFBTSxPQUFPLENBQUM7QUFZL0IsTUFBTSxVQUFVLEtBQUssQ0FBQyxPQUFtQixFQUFFLE9BQW1CLEVBQUUsUUFBUSxHQUFDLEtBQUssRUFBRSxRQUFRLEdBQUMsS0FBSztJQUM1RixJQUFJLE9BQU8sQ0FBQyxNQUFNLElBQUksQ0FBQyxJQUFJLE9BQU8sQ0FBQyxNQUFNLElBQUksQ0FBQztRQUM1QyxNQUFNLElBQUksS0FBSyxDQUFDLGdFQUFnRSxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUUvSCxNQUFNLEtBQUssR0FBVyxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQzFDLE1BQU0sS0FBSyxHQUFXLEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDMUMsTUFBTSxTQUFTLEdBQVcsS0FBSyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNsRCxNQUFNLFNBQVMsR0FBVyxLQUFLLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ2xELE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUM7SUFDL0IsTUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQztJQUUvQixJQUFJLEtBQUssQ0FBQztJQUNWLElBQUksS0FBSyxDQUFDO0lBQ1YsSUFBSSxJQUFJLENBQUM7SUFFVCxJQUFJLENBQUMsUUFBUSxFQUFFO1FBQ2IsSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUNiLE1BQU0sZUFBZSxHQUFHLFNBQVMsR0FBRyxPQUFPLENBQUM7WUFDNUMsTUFBTSxlQUFlLEdBQUcsU0FBUyxHQUFHLE9BQU8sQ0FBQztZQUM1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O0lBQ3BCLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUM7SUFDcEIsTUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM3QixNQUFNLElBQUksR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBRTdCLE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7SUFFN0IsTUFBTSxFQUFFLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3pDLE1BQU0sRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2xDLE1BQU0sRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0lBQ3hCLE1BQU0sQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0lBRTVCLE1BQU0sRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ3ZCLE1BQU0sQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7SUFFbEIsTUFBTSxPQUFPLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2hDLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxPQUFPLEdBQUcsQ0FBQyxDQUFDLEdBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFFdkUsSUFBSSxTQUFTLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztJQUV2QixJQUFJLFVBQVU7UUFDWixTQUFTLElBQUksR0FBRyxDQUFDO0lBR25CLE1BQU0sQ0FBQyxHQUFHLFNBQVMsR0FBRyxDQUFDLENBQUM7SUFFeEIsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUU5QyxPQUFPLEVBQUMsU0FBUyxFQUFFLENBQUMsRUFBRSxtQkFBbUIsRUFBRSxJQUFJLEdBQUcsSUFBSSxFQUFFLGNBQWMsRUFBRSxDQUFDLEVBQUUsY0FBYyxFQUFFLENBQUMsRUFBQyxDQUFDO0FBQ2hHLENBQUM7QUFFRCxTQUFTLFFBQVEsQ0FBQyxLQUFlO0lBQy9CLE1BQU0sSUFBSSxHQUE0QixFQUFFLENBQUM7SUFFekMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO1FBQ3BCLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDbkMsQ0FBQyxDQUFDLENBQUM7SUFFSCxPQUFPLEtBQUssQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3hDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvL0B0cy1pZ25vcmU6IG5vIHR5cGVzXG5pbXBvcnQgKiBhcyBqU3RhdCBmcm9tICdqc3RhdCc7XG5cbnR5cGUgdGVzdFN0YXRzID0ge1xuICAncC12YWx1ZSc6IG51bWJlcixcbiAgJ01lYW4gZGlmZmVyZW5jZSc/OiBudW1iZXIsXG4gICdNZWRpYW4gZGlmZmVyZW5jZSc/OiBudW1iZXIsXG4gICdwLXZhbHVlIG1vcmUnOiBudW1iZXIsXG4gICdwLXZhbHVlIGxlc3MnOiBudW1iZXIsXG59O1xuXG50eXBlIFBvcHVsYXRpb24gPSBudW1iZXJbXSB8IEZsb2F0MzJBcnJheSB8IEludDMyQXJyYXk7XG5cbmV4cG9ydCBmdW5jdGlvbiB0VGVzdChzYW1wbGUxOiBQb3B1bGF0aW9uLCBzYW1wbGUyOiBQb3B1bGF0aW9uLCBkZXZLbm93bj1mYWxzZSwgZGV2RXF1YWw9ZmFsc2UpOiB0ZXN0U3RhdHMge1xuICBpZiAoc2FtcGxlMS5sZW5ndGggPD0gMSB8fCBzYW1wbGUyLmxlbmd0aCA8PSAxKVxuICAgIHRocm93IG5ldyBFcnJvcihgU3RhdGlzdGljc0Vycm9yOiBXcm9uZyBzYW1wbGUgc2l6ZTsgZXhwZWN0ZWQgYXQgbGVhc3QgMiwgZ290ICR7TWF0aC5taW4oc2FtcGxlMS5sZW5ndGgsIHNhbXBsZTIubGVuZ3RoKX0pYCk7XG5cbiAgY29uc3QgbWVhbjE6IG51bWJlciA9IGpTdGF0Lm1lYW4oc2FtcGxlMSk7XG4gIGNvbnN0IG1lYW4yOiBudW1iZXIgPSBqU3RhdC5tZWFuKHNhbXBsZTIpO1xuICBjb25zdCB2YXJpYW5jZTE6IG51bWJlciA9IGpTdGF0LnZhcmlhbmNlKHNhbXBsZTEpO1xuICBjb25zdCB2YXJpYW5jZTI6IG51bWJlciA9IGpTdGF0LnZhcmlhbmNlKHNhbXBsZTIpO1xuICBjb25zdCBsZW5ndGgxID0gc2FtcGxlMS5sZW5ndGg7XG4gIGNvbnN0IGxlbmd0aDIgPSBzYW1wbGUyLmxlbmd0aDtcblxuICBsZXQgcE1vcmU7XG4gIGxldCBwTGVzcztcbiAgbGV0IHBUb3Q7XG5cbiAgaWYgKCFkZXZLbm93bikge1xuICAgIGlmICghZGV2RXF1YWwpIHtcbiAgICAgIGNvbnN0IHNhbXBsZVZhcmlhbmNlMSA9IHZhcmlhbmNlMSAvIGxlbmd0aDE7XG4gICAgICBjb25zdCBzYW1wbGVWYXJpYW5jZTIgPSB2YXJpYW5jZTIgLyBsZW5ndGgyO1xuICAgICAgY29uc3QgY3JpdGljYWxWYWx1ZSA9IChtZWFuMSAtIG1lYW4yKSAvIE1hdGguc3FydChzYW1wbGVWYXJpYW5jZTEgKyBzYW1wbGVWYXJpYW5jZTIpO1xuICAgICAgY29uc3QgZG9mID0gTWF0aC5wb3coKHNhbXBsZVZhcmlhbmNlMSArIHNhbXBsZVZhcmlhbmNlMiksIDIpIC9cbiAgICAgICAgKE1hdGgucG93KHNhbXBsZVZhcmlhbmNlMSwgMikgLyAobGVuZ3RoMSAtIDEpICsgTWF0aC5wb3coc2FtcGxlVmFyaWFuY2UyLCAyKSAvIChsZW5ndGgyIC0gMSkpO1xuXG4gICAgICBwTGVzcyA9IGpTdGF0LnN0dWRlbnR0LmNkZihjcml0aWNhbFZhbHVlLCBkb2YpO1xuICAgICAgcE1vcmUgPSAxIC0gcExlc3M7XG4gICAgICBwVG90ID0gMiAqIChwTGVzcyA8IHBNb3JlID8gcExlc3MgOiBwTW9yZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGRvZiA9IGxlbmd0aDEgKyBsZW5ndGgyIC0gMjtcbiAgICAgIGNvbnN0IHRvdGFsVmFyaWFuY2UgPSAodmFyaWFuY2UxICogKGxlbmd0aDEgLSAxKSArIHZhcmlhbmNlMiAqIChsZW5ndGgyIC0gMSkpIC8gZG9mO1xuICAgICAgY29uc3QgY3JpdGljYWxWYWx1ZSA9IE1hdGguc3FydChsZW5ndGgxICogbGVuZ3RoMiAvIChsZW5ndGgxICsgbGVuZ3RoMikpICogKG1lYW4xIC0gbWVhbjIpIC8gdG90YWxWYXJpYW5jZTtcblxuICAgICAgcE1vcmUgPSAxIC0galN0YXQuc3R1ZGVudHQuY2RmKGNyaXRpY2FsVmFsdWUsIGRvZik7XG4gICAgICBwTGVzcyA9IGpTdGF0LnN0dWRlbnR0LmNkZihjcml0aWNhbFZhbHVlLCBkb2YpO1xuICAgICAgcFRvdCA9IDIgKiAocExlc3MgPCBwTW9yZSA/IHBMZXNzIDogcE1vcmUpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBjb25zdCBzYW1wbGVWYXJpYW5jZTEgPSB2YXJpYW5jZTEgLyBsZW5ndGgxO1xuICAgIGNvbnN0IHNhbXBsZVZhcmlhbmNlMiA9IHZhcmlhbmNlMiAvIGxlbmd0aDI7XG4gICAgY29uc3QgY3JpdGljYWxWYWx1ZSA9IChtZWFuMSAtIG1lYW4yKSAvIE1hdGguc3FydChzYW1wbGVWYXJpYW5jZTEgKyBzYW1wbGVWYXJpYW5jZTIpO1xuXG4gICAgcExlc3MgPSBqU3RhdC5ub3JtYWwucGRmKGNyaXRpY2FsVmFsdWUsIDAsIDEpO1xuICAgIHBNb3JlID0gMSAtIHBMZXNzO1xuICAgIHBUb3QgPSAyICogKHBMZXNzIDwgcE1vcmUgPyBwTGVzcyA6IHBNb3JlKTtcbiAgfVxuICByZXR1cm4geydwLXZhbHVlJzogcFRvdCwgJ01lYW4gZGlmZmVyZW5jZSc6IG1lYW4xIC0gbWVhbjIsICdwLXZhbHVlIG1vcmUnOiBwTW9yZSwgJ3AtdmFsdWUgbGVzcyc6IHBMZXNzfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVUZXN0KHg6IG51bWJlcltdLCB5OiBudW1iZXJbXSwgY29udGludWl0eT10cnVlKTogdGVzdFN0YXRzIHtcbiAgY29uc3QgeHkgPSB4LmNvbmNhdCh5KTtcbiAgY29uc3QgbjEgPSB4Lmxlbmd0aDtcbiAgY29uc3QgbjIgPSB5Lmxlbmd0aDtcbiAgY29uc3QgbWVkMSA9IGpTdGF0Lm1lZGlhbih4KTtcbiAgY29uc3QgbWVkMiA9IGpTdGF0Lm1lZGlhbih5KTtcblxuICBjb25zdCByYW5rcyA9IGpTdGF0LnJhbmsoeHkpO1xuXG4gIGNvbnN0IFIxID0galN0YXQuc3VtKHJhbmtzLnNsaWNlKDAsIG4xKSk7XG4gIGNvbnN0IFUxID0gUjEgLSBuMSAqIChuMSArIDEpIC8gMjtcbiAgY29uc3QgVTIgPSBuMSAqIG4yIC0gVTE7XG4gIGNvbnN0IFUgPSBVMSA+IFUyID8gVTEgOiBVMjtcblxuICBjb25zdCBtdSA9IG4xICogbjIgLyAyO1xuICBjb25zdCBuID0gbjEgKyBuMjtcblxuICBjb25zdCB0aWVUZXJtID0gX3RpZVRlcm0ocmFua3MpO1xuICBjb25zdCBzID0gTWF0aC5zcXJ0KG4xICogbjIgLyAxMiAqICgobiArIDEpIC0gdGllVGVybSAvIChuKiAobiAtIDEpKSkpO1xuXG4gIGxldCBudW1lcmF0b3IgPSBVIC0gbXU7XG5cbiAgaWYgKGNvbnRpbnVpdHkpXG4gICAgbnVtZXJhdG9yIC09IDAuNTtcblxuXG4gIGNvbnN0IHogPSBudW1lcmF0b3IgLyBzO1xuXG4gIGNvbnN0IHAgPSAyICogKDEgLSBqU3RhdC5ub3JtYWwuY2RmKHosIDAsIDEpKTtcblxuICByZXR1cm4geydwLXZhbHVlJzogcCwgJ01lZGlhbiBkaWZmZXJlbmNlJzogbWVkMSAtIG1lZDIsICdwLXZhbHVlIG1vcmUnOiBwLCAncC12YWx1ZSBsZXNzJzogcH07XG59XG5cbmZ1bmN0aW9uIF90aWVUZXJtKHJhbmtzOiBudW1iZXJbXSk6IG51bWJlciB7XG4gIGNvbnN0IHRpZXM6IHtba2V5OiBudW1iZXJdOiBudW1iZXJ9ID0ge307XG5cbiAgcmFua3MuZm9yRWFjaCgobnVtKSA9PiB7XG4gICAgdGllc1tudW1dID0gKHRpZXNbbnVtXSB8fCAwKSArIDE7XG4gIH0pO1xuXG4gIHJldHVybiBqU3RhdC5zdW0oT2JqZWN0LnZhbHVlcyh0aWVzKSk7XG59XG4iXX0=