@ncfour-us/stats 0.0.1 → 0.0.3

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.
@@ -153,6 +153,12 @@ export declare class SampleSet {
153
153
  * @returns number - Calculated standard deviation of the SampleSet
154
154
  */
155
155
  getStddev(): number;
156
+ /**
157
+ * Get the calculated distribution buckets for the SampleSet.
158
+ *
159
+ * @returns distribution - Array of SampleBuckets representing the distribution of the SampleSet
160
+ */
161
+ getDistribution(): SampleBucket[];
156
162
  /**
157
163
  * Get the type of values in the SampleSet
158
164
  *
@@ -291,6 +291,17 @@ export class SampleSet {
291
291
  }
292
292
  return this.stddev;
293
293
  }
294
+ /**
295
+ * Get the calculated distribution buckets for the SampleSet.
296
+ *
297
+ * @returns distribution - Array of SampleBuckets representing the distribution of the SampleSet
298
+ */
299
+ getDistribution() {
300
+ if (this.recalculate) {
301
+ this.recalculateStats();
302
+ }
303
+ return this.distribution;
304
+ }
294
305
  /**
295
306
  * Get the type of values in the SampleSet
296
307
  *
@@ -426,4 +437,4 @@ export class SampleSet {
426
437
  this.logger?.trace(`SampleSet.calcFromSortedValues: mode: ${this.mode}`);
427
438
  }
428
439
  }
429
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2FtcGxlLXNldC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb21wb25lbnRzL3NhbXBsZS1zZXQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsOEJBQThCO0FBSTlCOzs7R0FHRztBQUNILE1BQU0sT0FBTyxZQUFZO0lBQ2hCLEdBQUcsQ0FBUztJQUNaLEdBQUcsQ0FBUztJQUNaLFFBQVEsQ0FBUztJQUNqQixLQUFLLENBQVM7SUFFckIsWUFBWSxHQUFXLEVBQUUsR0FBVyxFQUFFLEtBQWE7UUFDakQsSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7UUFDZixJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztRQUNmLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFDLENBQUMsQ0FBQztRQUNqRCxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztJQUNyQixDQUFDO0NBQ0Y7QUFrQ0EsQ0FBQztBQUVGOzs7Ozs7OztHQVFHO0FBQ0gsTUFBTSxPQUFPLFNBQVM7SUFDcEIsZUFBZTtJQUNMLE1BQU0sQ0FBVztJQUUzQixjQUFjO0lBQ04sYUFBYSxDQUFVO0lBQ3ZCLE1BQU0sQ0FBVztJQUNqQixVQUFVLENBQVc7SUFFN0IsbUJBQW1CO0lBQ1gsV0FBVyxDQUFVLENBQUMsK0NBQStDO0lBQ3JFLElBQUksQ0FBUztJQUNiLE1BQU0sQ0FBUztJQUNmLElBQUksQ0FBUztJQUNiLFFBQVEsQ0FBUztJQUNqQixNQUFNLENBQVM7SUFDZixHQUFHLENBQVM7SUFDWixHQUFHLENBQVM7SUFDWixZQUFZLENBQVM7SUFDckIsWUFBWSxDQUFTO0lBQ3JCLFlBQVksQ0FBaUI7SUFFckM7Ozs7T0FJRztJQUNILFlBQVksT0FBeUI7UUFDbkMsZUFBZTtRQUNmLElBQUksQ0FBQyxNQUFNLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQztRQUU3Qix3QkFBd0I7UUFDeEIsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7UUFDeEIsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUM7UUFDZCxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztRQUNoQixJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQztRQUNkLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDO1FBQ2xCLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO1FBQ2hCLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDO1FBQ2IsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUM7UUFDYixJQUFJLENBQUMsWUFBWSxHQUFHLENBQUMsQ0FBQztRQUN0QixJQUFJLENBQUMsWUFBWSxHQUFHLENBQUMsQ0FBQztRQUN0QixJQUFJLENBQUMsWUFBWSxHQUFHLEVBQUUsQ0FBQztRQUV2QixvQkFBb0I7UUFDcEIsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUM7UUFDMUIsSUFBSSxDQUFDLE1BQU0sR0FBSSxFQUFlLENBQUM7UUFDL0IsSUFBSSxDQUFDLFVBQVUsR0FBSSxFQUFlLENBQUM7UUFDbkMsSUFBSSxPQUFPLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDMUIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDeEMsQ0FBQztRQUVELElBQUksQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLHNDQUFzQyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7SUFFakYsQ0FBQztJQUVEOzs7O09BSUc7SUFDSSxTQUFTO1FBQ2QsSUFBSSxPQUF5QixDQUFDO1FBQzlCLElBQUksSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQ3ZCLE9BQU8sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDOUMsQ0FBQzthQUFNLENBQUM7WUFDTixPQUFPLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUMvRCxDQUFDO1FBRUQsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQztJQUVEOzs7O09BSUc7SUFDSSxRQUFRLENBQUMsS0FBYTtRQUMzQixJQUFJLE1BQXNCLENBQUM7UUFFM0IsSUFBSSxLQUFLLEdBQUcsQ0FBQyxJQUFJLEtBQUssSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQzdDLE9BQU8sU0FBUyxDQUFDO1FBQ25CLENBQUM7UUFFRCxJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUN2QixNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM5QixDQUFDO2FBQU0sQ0FBQztZQUNOLE1BQU0sR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUMvQyxDQUFDO1FBRUQsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztJQUVEOztPQUVHO0lBQ0ksU0FBUyxDQUFDLE1BQXdCO1FBQ3ZDLElBQUksQ0FBQyxNQUFNLEdBQUcsRUFBYyxDQUFDO1FBQzdCLElBQUksQ0FBQyxVQUFVLEdBQUcsRUFBYyxDQUFDO1FBRWpDLElBQUksQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLHNDQUFzQyxPQUFPLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7UUFFN0UsSUFBSSxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxPQUFPLE1BQU0sQ0FBQyxDQUFDLENBQUMsS0FBSyxRQUFRLEVBQUUsQ0FBQztZQUN2RCxJQUFJLENBQUMsYUFBYSxHQUFHLEtBQUssQ0FBQztRQUM3QixDQUFDO2FBQU0sQ0FBQztZQUNOLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDO1FBQzVCLENBQUM7UUFFRCxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRXZCLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO0lBQzFCLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ksU0FBUyxDQUFDLE1BQXdCO1FBQ3ZDLElBQUssSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQztZQUN2QixDQUFFLE9BQU8sTUFBTSxDQUFDLENBQUMsQ0FBQyxLQUFLLFFBQVEsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFFO1lBQ3ZELENBQUUsT0FBTyxNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBRSxFQUFHLENBQUM7WUFDOUQsdURBQXVEO1lBQ3ZELElBQUksQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLHNFQUFzRSxJQUFJLENBQUMsYUFBYSxrQkFBa0IsT0FBTyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ2pKLE9BQU87UUFDVCxDQUFDO1FBRUQsSUFBSSxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxPQUFPLE1BQU0sQ0FBQyxDQUFDLENBQUMsS0FBSyxRQUFRLEVBQUUsQ0FBQztZQUN2RCxJQUFJLENBQUMsYUFBYSxHQUFHLEtBQUssQ0FBQztZQUUxQixNQUFtQixDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO2dCQUNyQyxNQUFNLGlCQUFpQixHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxRQUFRLEtBQUssS0FBSyxDQUFDLENBQUM7Z0JBQ3RGLElBQUksaUJBQWlCLElBQUksQ0FBQyxFQUFFLENBQUM7b0JBQzNCLDJCQUEyQjtvQkFDM0IsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQztnQkFDdEMsQ0FBQztxQkFBTSxDQUFDO29CQUNOLG9CQUFvQjtvQkFDcEIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7b0JBQzVCLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxHQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUM3QyxDQUFDO1lBQ0gsQ0FBQyxDQUFDLENBQUM7WUFFSCxJQUFJLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyw4Q0FBOEMsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUM7UUFDdEYsQ0FBQzthQUFNLENBQUM7WUFDTixnQkFBZ0I7WUFDaEIsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUM7WUFDMUIsSUFBSSxDQUFDLE1BQU0sR0FBSSxNQUFtQixDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFhLENBQUM7UUFDdkUsQ0FBQztRQUVELElBQUksQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLHdDQUF3QyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7UUFFakYsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7SUFDMUIsQ0FBQztJQUVEOzs7O09BSUc7SUFDSSxRQUFRLENBQUMsS0FBcUI7UUFDbkMsSUFBSyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDO1lBQ3ZCLENBQUUsT0FBTyxLQUFLLEtBQUssUUFBUSxJQUFJLElBQUksQ0FBQyxhQUFhLENBQUU7WUFDbkQsQ0FBRSxPQUFPLEtBQUssS0FBSyxRQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFFLEVBQUcsQ0FBQztZQUMxRCx1REFBdUQ7WUFDdkQsSUFBSSxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsb0VBQW9FLElBQUksQ0FBQyxhQUFhLGtCQUFrQixPQUFPLEtBQUssRUFBRSxDQUFDLENBQUM7WUFDM0ksT0FBTztRQUNULENBQUM7UUFFRCxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsRUFBRSxDQUFDO1lBQzlCLE1BQU0saUJBQWlCLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLFFBQVEsS0FBSyxLQUFLLENBQUMsQ0FBQztZQUN0RixJQUFJLGlCQUFpQixHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUMxQiwyQkFBMkI7Z0JBQzNCLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUM7WUFDdEMsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLG9CQUFvQjtnQkFDcEIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQzVCLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxHQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzdDLENBQUM7UUFDSCxDQUFDO2FBQU0sQ0FBQztZQUNOLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzFCLENBQUM7UUFFRCxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztJQUMxQixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSSxPQUFPO1FBQ1osSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDckIsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7UUFDMUIsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDckUsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0ksU0FBUztRQUNkLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ3JCLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1FBQzFCLENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3pFLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNJLE9BQU87UUFDWixJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUNyQixJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUMxQixDQUFDO1FBQ0QsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNyRSxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSSxNQUFNO1FBQ1gsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDckIsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7UUFDMUIsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDbkUsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0ksTUFBTTtRQUNYLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ3JCLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1FBQzFCLENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ25FLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNJLFdBQVc7UUFDaEIsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDckIsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7UUFDMUIsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQztJQUN2QixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNJLGNBQWM7UUFDbkIsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDckIsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7UUFDMUIsQ0FBQztRQUNELE9BQU87WUFDTCxDQUFDLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDO1lBQzVELEVBQUUsRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUM7WUFDL0UsRUFBRSxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQztZQUNuRSxFQUFFLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDO1lBQy9FLEdBQUcsRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUM7U0FDL0QsQ0FBQztJQUNKLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSSxTQUFTO1FBQ2QsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDckIsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7UUFDMUIsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQztJQUNyQixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNJLFNBQVM7UUFDZCxPQUFPLElBQUksQ0FBQyxhQUFhLENBQUM7SUFDNUIsQ0FBQztJQUVEOzs7O09BSUc7SUFDSSxhQUFhO1FBQ2xCLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUM7SUFDNUIsQ0FBQztJQUVPLGdCQUFnQjtRQUV0QixJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDaEIsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ3BCLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1FBRTVCLElBQUksQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDO0lBQzNCLENBQUM7SUFFTyxRQUFRO1FBQ2QsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDLEdBQUcsR0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUM7UUFDbEYsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNyRSxDQUFDO0lBRUQsaURBQWlEO0lBQ2pELDJFQUEyRTtJQUNuRSxZQUFZO1FBQ2xCLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxHQUFHLEdBQUMsQ0FBQyxDQUFDLEtBQUssR0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUMsQ0FBQyxLQUFLLEdBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUM7UUFDdEgsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUN6QyxDQUFDO0lBRUQsNENBQTRDO0lBQ3BDLG9CQUFvQjtRQUMxQixrQkFBa0I7UUFDbEIsSUFBSSxZQUFzQixDQUFDO1FBRTNCLElBQUssSUFBSSxDQUFDLGFBQWEsRUFBRyxDQUFDO1lBQ3pCLDJDQUEyQztZQUMzQyxZQUFZLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FDNUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO2dCQUNMLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ0osQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO29CQUNMLENBQUMsQ0FBQyxDQUFDO29CQUNILENBQUMsQ0FDTixDQUFDO1lBRUYsSUFBSSxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsaURBQWlELFlBQVksRUFBRSxDQUFDLENBQUM7UUFDdEYsQ0FBQzthQUFNLENBQUM7WUFDTiwwQ0FBMEM7WUFDMUMsWUFBWSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQzVDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUN2QyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNKLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQ3hDLENBQUMsQ0FBQyxDQUFDO29CQUNILENBQUMsQ0FBRSxDQUNSLENBQUM7WUFFRixJQUFJLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxpREFBaUQsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUM3SCxDQUFDO1FBR0QsaUJBQWlCO1FBQ2pCLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sR0FBQyxDQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsQ0FBQztRQUMzRCxJQUFJLENBQUMsTUFBTSxHQUFHLFlBQVksQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUMxQyxJQUFJLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxrREFBa0QsYUFBYSxFQUFFLENBQUMsQ0FBQztRQUV0Riw2QkFBNkI7UUFDN0IsSUFBSSxDQUFDLEdBQUcsR0FBRyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDM0IsSUFBSSxDQUFDLEdBQUcsR0FBRyxZQUFZLENBQUMsWUFBWSxDQUFDLE1BQU0sR0FBQyxDQUFDLENBQUMsQ0FBQztRQUUvQywrQ0FBK0M7UUFDL0MsSUFBSSxlQUFlLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFDLENBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzNELElBQUksQ0FBQyxZQUFZLEdBQUcsWUFBWSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQ2xELGVBQWUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEdBQUMsQ0FBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMzRCxJQUFJLENBQUMsWUFBWSxHQUFHLFlBQVksQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUVsRCwwQ0FBMEM7UUFDMUMsSUFBSSxDQUFDLFlBQVksR0FBRyxFQUFFLENBQUM7UUFDdkIsSUFBSyxJQUFJLENBQUMsYUFBYSxFQUFHLENBQUM7WUFDekIsNkVBQTZFO1lBQzdFLCtDQUErQztZQUUvQywrRUFBK0U7WUFDL0UsTUFBTSxVQUFVLEdBQVcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEdBQUMsQ0FBQyxDQUFDLENBQUM7WUFDdkUsTUFBTSxVQUFVLEdBQVcsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBQyxVQUFVLENBQUM7WUFFMUQsSUFBSSxVQUFVLEdBQVcsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3pDLElBQUksVUFBVSxHQUFXLFVBQVUsR0FBRyxVQUFVLENBQUM7WUFDakQsSUFBSSxVQUFVLEtBQUssSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO2dCQUM1QixnRkFBZ0Y7Z0JBQ2hGLG9EQUFvRDtnQkFDcEQsVUFBVSxJQUFJLEtBQUssQ0FBQztZQUN0QixDQUFDO1lBQ0QsSUFBSSxLQUFLLEdBQVcsQ0FBQyxDQUFDO1lBRXRCLEtBQUssSUFBSSxDQUFDLEdBQUMsQ0FBQyxFQUFFLENBQUMsR0FBQyxZQUFZLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7Z0JBQ3pDLElBQUksWUFBWSxDQUFDLENBQUMsQ0FBQyxJQUFJLFVBQVUsSUFBSSxZQUFZLENBQUMsQ0FBQyxDQUFDLEdBQUcsVUFBVSxFQUFFLENBQUM7b0JBQ2xFLEtBQUssRUFBRSxDQUFDO2dCQUNWLENBQUM7cUJBQU0sQ0FBQztvQkFDTixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLFlBQVksQ0FBQyxVQUFVLEVBQUUsVUFBVSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7b0JBQ3hFLFVBQVUsSUFBSSxVQUFVLENBQUM7b0JBQ3pCLFVBQVUsR0FBRyxVQUFVLEdBQUMsVUFBVSxDQUFDO29CQUNuQyxJQUFJLFVBQVUsS0FBSyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7d0JBQzVCLGdGQUFnRjt3QkFDaEYsb0RBQW9EO3dCQUNwRCxVQUFVLElBQUksS0FBSyxDQUFDO29CQUN0QixDQUFDO29CQUNELEtBQUssR0FBRyxDQUFDLENBQUM7Z0JBQ1osQ0FBQztZQUVILENBQUM7WUFDRCxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLFlBQVksQ0FBQyxVQUFVLEVBQUUsVUFBVSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7WUFFeEUsa0RBQWtEO1lBQ2xELElBQUksQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLDZEQUE2RCxVQUFVLDBCQUEwQixJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7UUFDbEosQ0FBQzthQUFNLENBQUM7WUFDTixxRkFBcUY7WUFDckYsc0NBQXNDO1lBRXRDLElBQUksWUFBWSxHQUFXLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUMzQyxJQUFJLEtBQUssR0FBVyxDQUFDLENBQUM7WUFFdEIsS0FBSyxJQUFJLENBQUMsR0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFDLFlBQVksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztnQkFDekMsSUFBSSxZQUFZLENBQUMsQ0FBQyxDQUFDLEtBQUssWUFBWSxFQUFFLENBQUM7b0JBQ3JDLEtBQUssRUFBRSxDQUFDO2dCQUNWLENBQUM7cUJBQU0sQ0FBQztvQkFDTixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLFlBQVksQ0FBQyxZQUFZLEVBQUUsWUFBWSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7b0JBQzVFLFlBQVksR0FBRyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQy9CLEtBQUssR0FBRyxDQUFDLENBQUM7Z0JBQ1osQ0FBQztZQUVILENBQUM7WUFDRCxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLFlBQVksQ0FBQyxZQUFZLEVBQUUsWUFBWSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7WUFFNUUseURBQXlEO1lBQ3pELElBQUksQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLG1FQUFtRSxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sMEJBQTBCLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztZQUNsSyxJQUFJLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQywrQ0FBK0MsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUM7UUFDdkYsQ0FBQztRQUVELElBQUksQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLDRDQUE0QyxJQUFJLENBQUMsYUFBYSwyQkFBMkIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7UUFFMUoscUJBQXFCO1FBQ3JCLE1BQU0sMEJBQTBCLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQ3pELENBQUMsV0FBVyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxXQUFXLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUN6RyxDQUFDLENBQ0YsQ0FBQztRQUNGLElBQUssSUFBSSxDQUFDLGFBQWEsRUFBRyxDQUFDO1lBQ3pCLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQywwQkFBMEIsQ0FBQyxDQUFDLEdBQUc7Z0JBQzNELENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQywwQkFBMEIsQ0FBQyxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLDBCQUEwQixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUMsQ0FBQyxDQUFDO1FBQzlHLENBQUM7YUFBTSxDQUFDO1lBQ04sSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLDBCQUEwQixDQUFDLENBQUMsR0FBRyxDQUFDO1FBQ2hFLENBQUM7UUFFRCxJQUFJLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyx5Q0FBeUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7SUFFM0UsQ0FBQztDQUVGIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IChjKSAyMDI2IFRpbSBIYWhuXG5cbmltcG9ydCB7IElMb2dnZXIgfSBmcm9tICdAbmNmb3VyLXVzL2xvZ2dpbmcnO1xuXG4vKipcbiAqIFNhbXBsZUJ1Y2tldCBpcyB1c2VkIHRvIHJlcHJlc2VudCB0aGUgY2FsY3VsYXRlZFxuICogZGlzdHJpYnV0aW9uIGZvciB0aGUgU2FtcGxlU2V0LlxuICovXG5leHBvcnQgY2xhc3MgU2FtcGxlQnVja2V0IHtcbiAgcHVibGljIG1pbjogbnVtYmVyO1xuICBwdWJsaWMgbWF4OiBudW1iZXI7XG4gIHB1YmxpYyBtaWRQb2ludDogbnVtYmVyO1xuICBwdWJsaWMgY291bnQ6IG51bWJlcjtcblxuICBjb25zdHJ1Y3RvcihtaW46IG51bWJlciwgbWF4OiBudW1iZXIsIGNvdW50OiBudW1iZXIpIHtcbiAgICB0aGlzLm1pbiA9IG1pbjtcbiAgICB0aGlzLm1heCA9IG1heDtcbiAgICB0aGlzLm1pZFBvaW50ID0gdGhpcy5taW4gKyAodGhpcy5tYXgtdGhpcy5taW4pLzI7XG4gICAgdGhpcy5jb3VudCA9IGNvdW50O1xuICB9XG59XG5cbi8qKlxuICogVGhlIHR5cGUgb2YgdmFsdWVzIHN0b3JlZCBpbiB0aGUgU2FtcGxlU2V0XG4gKi9cbmV4cG9ydCB0eXBlIFNhbXBsZVNldFZhbHVlID0gbnVtYmVyIHwgc3RyaW5nO1xuXG4vKipcbiAqIFNhbXBsZVNldFBlcmNlbnRpbGVzIHJlcHJlc2VudHMgdGhlIGNhbGN1bGF0ZWQgcGVyY2VudGlsZXNcbiAqIGZvciB0aGUgdmFsdWVzIGluIHRoZSBTYW1wbGVTZXQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2FtcGxlU2V0UGVyY2VudGlsZXMge1xuICAwOiBTYW1wbGVTZXRWYWx1ZTtcbiAgMjU6IFNhbXBsZVNldFZhbHVlO1xuICA1MDogU2FtcGxlU2V0VmFsdWU7XG4gIDc1OiBTYW1wbGVTZXRWYWx1ZTtcbiAgMTAwOiBTYW1wbGVTZXRWYWx1ZTtcbn1cblxuLyoqXG4gKiBUaGUgb3B0aW9ucyBmb3IgaW5zdGFudGlhdGluZyB0aGUgU2FtcGxlU2V0LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNhbXBsZVNldE9wdGlvbnMge1xuXG4gIC8qKlxuICAgKiBvcHRpb25hbCBpbml0aWFsIHNldCBvZiB2YWx1ZXMgdG8gcHV0IGludG8gdGhlIFNhbXBsZVNldFxuICAgKi9cbiAgaW5pdGlhbFZhbHVlcz86IFNhbXBsZVNldFZhbHVlW107XG5cbiAgLy8gZGVwZW5kZW5jaWVzXG4gIC8qKlxuICAgKiBvcHRpb25hbCBsb2dnZXIgdG8gdXNlLlxuICAgKi9cbiAgbG9nZ2VyPzogSUxvZ2dlcjtcbn07XG5cbi8qKlxuICogQmFzZSBjbGFzcyB0byByZXByZXNlbnQgc2FtcGxlcyBvZiBhIHJhbmRvbSB2YXJpYWJsZVxuICogaW4gdGhlIHN0YXRzIHBhY2thZ2UuXG4gKlxuICogT3RoZXIgY2FsY3VsYXRlZCBkaXN0cmlidXRpb25zIGFyZSBiYXNlZCBvbiB0aGlzIGJhc2VcbiAqIGNsYXNzLiAgSG93ZXZlciwgaW5zdGFuY2VzIG9mIHRoZSBiYXNlIGNsYXNzIGNhbiBiZVxuICogY3JlYXRlZCBhcyB3ZWxsLCBpZiBhIHNldCBvZiByYW5kb20gdmFsdWVzIGV4aXN0cyB0b1xuICogaW5pdGlhbGl6ZSB0aGUgU2FtcGxlU2V0LlxuICovXG5leHBvcnQgY2xhc3MgU2FtcGxlU2V0IHtcbiAgLy8gZGVwZW5kZW5jaWVzXG4gIHByb3RlY3RlZCBsb2dnZXI/OiBJTG9nZ2VyO1xuXG4gIC8vIHNhbXBsZSBkYXRhXG4gIHByaXZhdGUgdmFsdWVzTnVtZXJpYzogYm9vbGVhbjtcbiAgcHJpdmF0ZSB2YWx1ZXM6IG51bWJlcltdO1xuICBwcml2YXRlIGRpY3Rpb25hcnk6IHN0cmluZ1tdO1xuXG4gIC8vIGNhbGN1bGF0ZWQgaXRlbXNcbiAgcHJpdmF0ZSByZWNhbGN1bGF0ZTogYm9vbGVhbjsgLy8gc2V0cyB3aGV0aGVyIG9yIG5vdCByZS1jYWxjdWxhdGlvbiBpcyBuZWVkZWRcbiAgcHJpdmF0ZSBtZWFuOiBudW1iZXI7XG4gIHByaXZhdGUgbWVkaWFuOiBudW1iZXI7XG4gIHByaXZhdGUgbW9kZTogbnVtYmVyO1xuICBwcml2YXRlIHZhcmlhbmNlOiBudW1iZXI7XG4gIHByaXZhdGUgc3RkZGV2OiBudW1iZXI7XG4gIHByaXZhdGUgbWF4OiBudW1iZXI7XG4gIHByaXZhdGUgbWluOiBudW1iZXI7XG4gIHByaXZhdGUgcGVyY2VudGlsZTI1OiBudW1iZXI7XG4gIHByaXZhdGUgcGVyY2VudGlsZTc1OiBudW1iZXI7XG4gIHByaXZhdGUgZGlzdHJpYnV0aW9uOiBTYW1wbGVCdWNrZXRbXTtcblxuICAvKipcbiAgICogQ3JlYXRlIGEgbmV3IFNhbXBsZVNldCBpbnN0YW5jZS5cbiAgICpcbiAgICogQHBhcmFtIG9wdGlvbnMgU2VlIHtAbGluayBTYW1wbGVTZXRPcHRpb25zfVxuICAgKi9cbiAgY29uc3RydWN0b3Iob3B0aW9uczogU2FtcGxlU2V0T3B0aW9ucykge1xuICAgIC8vIGRlcGVuZGVuY2llc1xuICAgIHRoaXMubG9nZ2VyID0gb3B0aW9ucy5sb2dnZXI7XG5cbiAgICAvLyBpbnRpYWxpemUgaW5mb3JtYXRpb25cbiAgICB0aGlzLnJlY2FsY3VsYXRlID0gdHJ1ZTtcbiAgICB0aGlzLm1lYW4gPSAwO1xuICAgIHRoaXMubWVkaWFuID0gMDtcbiAgICB0aGlzLm1vZGUgPSAwO1xuICAgIHRoaXMudmFyaWFuY2UgPSAwO1xuICAgIHRoaXMuc3RkZGV2ID0gMDtcbiAgICB0aGlzLm1pbiA9IDA7XG4gICAgdGhpcy5tYXggPSAwO1xuICAgIHRoaXMucGVyY2VudGlsZTI1ID0gMDtcbiAgICB0aGlzLnBlcmNlbnRpbGU3NSA9IDA7XG4gICAgdGhpcy5kaXN0cmlidXRpb24gPSBbXTtcblxuICAgIC8vIGluaXRpYWxpemUgdmFsdWVzXG4gICAgdGhpcy52YWx1ZXNOdW1lcmljID0gdHJ1ZTtcbiAgICB0aGlzLnZhbHVlcyA9IChbXSBhcyBudW1iZXJbXSk7XG4gICAgdGhpcy5kaWN0aW9uYXJ5ID0gKFtdIGFzIHN0cmluZ1tdKTtcbiAgICBpZiAob3B0aW9ucy5pbml0aWFsVmFsdWVzKSB7XG4gICAgICB0aGlzLnNldFZhbHVlcyhvcHRpb25zLmluaXRpYWxWYWx1ZXMpO1xuICAgIH1cblxuICAgIHRoaXMubG9nZ2VyPy50cmFjZShgU2FtcGxlU2V0LmNvbnN0cnVjdG9yOiBudW1TYW1wbGVzOiAke3RoaXMudmFsdWVzLmxlbmd0aH1gKTtcblxuICB9XG5cbiAgLyoqXG4gICAqIGdldCB0aGUgYXJyYXkgb2YgdmFsdWVzIGhlbGQgaW4gdGhlIFNhbXBsZVNldC5cbiAgICpcbiAgICogQHJldHVybnMgU2FtcGxlU2V0VmFsdWVbXSAtIGFycmF5IG9mIFNhbXBsZVNldFZhbHVlXG4gICAqL1xuICBwdWJsaWMgZ2V0VmFsdWVzKCk6IFNhbXBsZVNldFZhbHVlW10ge1xuICAgIGxldCByZXRWYWxzOiBTYW1wbGVTZXRWYWx1ZVtdO1xuICAgIGlmICh0aGlzLnZhbHVlc051bWVyaWMpIHtcbiAgICAgIHJldFZhbHMgPSB0aGlzLnZhbHVlcy5tYXAoKHZhbHVlKSA9PiB2YWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldFZhbHMgPSB0aGlzLnZhbHVlcy5tYXAoKHZhbHVlKSA9PiB0aGlzLmRpY3Rpb25hcnlbdmFsdWVdKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmV0VmFscztcbiAgfVxuXG4gIC8qKlxuICAgKiBnZXQgYSBzcGVjaWZpYyB2YWx1ZSwgYnkgaW5kZXgsIGhlbGQgaW4gdGhlIFNhbXBsZVNldC5cbiAgICpcbiAgICogQHJldHVybnMgU2FtcGxlU2V0VmFsdWVcbiAgICovXG4gIHB1YmxpYyBnZXRWYWx1ZShpbmRleDogbnVtYmVyKTogU2FtcGxlU2V0VmFsdWUgfCB1bmRlZmluZWQge1xuICAgIGxldCByZXRWYWw6IFNhbXBsZVNldFZhbHVlO1xuXG4gICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSB0aGlzLnZhbHVlcy5sZW5ndGgpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMudmFsdWVzTnVtZXJpYykge1xuICAgICAgcmV0VmFsID0gdGhpcy52YWx1ZXNbaW5kZXhdO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXRWYWwgPSB0aGlzLmRpY3Rpb25hcnlbdGhpcy52YWx1ZXNbaW5kZXhdXTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmV0VmFsO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlcGxhY2UgdGhlIHNldCBvZiB2YWx1ZXMgaGVsZCBpbiB0aGUgU2FtcGxlU2V0XG4gICAqL1xuICBwdWJsaWMgc2V0VmFsdWVzKHZhbHVlczogU2FtcGxlU2V0VmFsdWVbXSk6IHZvaWQge1xuICAgIHRoaXMudmFsdWVzID0gW10gYXMgbnVtYmVyW107XG4gICAgdGhpcy5kaWN0aW9uYXJ5ID0gW10gYXMgc3RyaW5nW107XG5cbiAgICB0aGlzLmxvZ2dlcj8udHJhY2UoYFNhbXBsZVNldC5zZXRWYWx1ZXM6IHR5cGVvZiB2YWx1ZTogJHt0eXBlb2YgdmFsdWVzWzBdfWApO1xuXG4gICAgaWYgKHZhbHVlcy5sZW5ndGggPiAwICYmIHR5cGVvZiB2YWx1ZXNbMF0gPT09ICdzdHJpbmcnKSB7XG4gICAgICB0aGlzLnZhbHVlc051bWVyaWMgPSBmYWxzZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy52YWx1ZXNOdW1lcmljID0gdHJ1ZTtcbiAgICB9XG5cbiAgICB0aGlzLmFkZFZhbHVlcyh2YWx1ZXMpO1xuXG4gICAgdGhpcy5yZWNhbGN1bGF0ZSA9IHRydWU7XG4gIH1cblxuICAvKipcbiAgICogQWRkIHZhbHVlcyB0byB0aGUgU2FtcGxlU2V0XG4gICAqXG4gICAqIEBwYXJhbSB2YWx1ZXMgdmFsdWVzIHRvIGFkZCB0byB0aGUgU2FtcGxlU2V0XG4gICAqL1xuICBwdWJsaWMgYWRkVmFsdWVzKHZhbHVlczogU2FtcGxlU2V0VmFsdWVbXSApOiB2b2lkIHtcbiAgICBpZiAoIHRoaXMudmFsdWVzLmxlbmd0aCA+IDAgJiZcbiAgICAgICAgKCB0eXBlb2YgdmFsdWVzWzBdID09PSAnc3RyaW5nJyAmJiB0aGlzLnZhbHVlc051bWVyaWMgKSB8fFxuICAgICAgICAoIHR5cGVvZiB2YWx1ZXNbMF0gPT09ICdudW1iZXInICYmICF0aGlzLnZhbHVlc051bWVyaWMgKSApIHtcbiAgICAgIC8vIHR5cGUgbWlzbWF0Y2ggb24gdmFsdWVzIGJlaW5nIGFkZGVkIC0gcXVpZXRseSBJR05PUkVcbiAgICAgIHRoaXMubG9nZ2VyPy5lcnJvcihgU2FtcGxlU2V0LmFkZFZhbHVlczogdHlwZSBtaXNtYXRjaCBvbiB2YWx1ZXMgYWRkZWQsIHZhbHVlc051bWVyaWM6ICR7dGhpcy52YWx1ZXNOdW1lcmljfSwgdmFsdWVzIHR5cGU6ICR7dHlwZW9mIHZhbHVlc1swXX1gKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodmFsdWVzLmxlbmd0aCA+IDAgJiYgdHlwZW9mIHZhbHVlc1swXSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHRoaXMudmFsdWVzTnVtZXJpYyA9IGZhbHNlO1xuXG4gICAgICAodmFsdWVzIGFzIHN0cmluZ1tdKS5mb3JFYWNoKCh2YWx1ZSkgPT4ge1xuICAgICAgICBjb25zdCBleGlzdGluZ0l0ZW1JbmRleCA9IHRoaXMuZGljdGlvbmFyeS5maW5kSW5kZXgoKGRpY3RJdGVtKSA9PiBkaWN0SXRlbSA9PT0gdmFsdWUpO1xuICAgICAgICBpZiAoZXhpc3RpbmdJdGVtSW5kZXggPj0gMCkge1xuICAgICAgICAgIC8vIGl0ZW0gZm91bmQgaW4gZGljdGlvbmFyeVxuICAgICAgICAgIHRoaXMudmFsdWVzLnB1c2goZXhpc3RpbmdJdGVtSW5kZXgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIGFkZCB0byBkaWN0aW9uYXJ5XG4gICAgICAgICAgdGhpcy5kaWN0aW9uYXJ5LnB1c2godmFsdWUpO1xuICAgICAgICAgIHRoaXMudmFsdWVzLnB1c2godGhpcy5kaWN0aW9uYXJ5Lmxlbmd0aC0xKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIHRoaXMubG9nZ2VyPy50cmFjZShgU2FtcGxlU2V0LmFkZFZhbHVlczogcmVzdWx0aW5nIGRpY3Rpb25hcnk6ICR7dGhpcy5kaWN0aW9uYXJ5fWApO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBudW1iZXIgdmFsdWVzXG4gICAgICB0aGlzLnZhbHVlc051bWVyaWMgPSB0cnVlO1xuICAgICAgdGhpcy52YWx1ZXMgPSAodmFsdWVzIGFzIG51bWJlcltdKS5tYXAoKHZhbHVlKSA9PiB2YWx1ZSkgYXMgbnVtYmVyW107XG4gICAgfVxuXG4gICAgdGhpcy5sb2dnZXI/LnRyYWNlKGBTYW1wbGVTZXQuYWRkVmFsdWVzOiBuZXcgbnVtU2FtcGxlczogJHt0aGlzLnZhbHVlcy5sZW5ndGh9YCk7XG5cbiAgICB0aGlzLnJlY2FsY3VsYXRlID0gdHJ1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgYSBzaW5nbGUgdmFsdWUgdG8gdGhlIFNhbXBsZVNldFxuICAgKlxuICAgKiBAcGFyYW0gdmFsdWUgdmFsdWUgdG8gYWRkIHRvIHRoZSBTYW1wbGVTZXRcbiAgICovXG4gIHB1YmxpYyBhZGRWYWx1ZSh2YWx1ZTogU2FtcGxlU2V0VmFsdWUpIHtcbiAgICBpZiAoIHRoaXMudmFsdWVzLmxlbmd0aCA+IDAgJiZcbiAgICAgICAgKCB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnICYmIHRoaXMudmFsdWVzTnVtZXJpYyApIHx8XG4gICAgICAgICggdHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJyAmJiAhdGhpcy52YWx1ZXNOdW1lcmljICkgKSB7XG4gICAgICAvLyB0eXBlIG1pc21hdGNoIG9uIHZhbHVlcyBiZWluZyBhZGRlZCAtIHF1aWV0bHkgSUdOT1JFXG4gICAgICB0aGlzLmxvZ2dlcj8uZXJyb3IoYFNhbXBsZVNldC5hZGRWYWx1ZTogdHlwZSBtaXNtYXRjaCBvbiB2YWx1ZSBhZGRlZCwgdmFsdWVzTnVtZXJpYzogJHt0aGlzLnZhbHVlc051bWVyaWN9LCB2YWx1ZXMgdHlwZTogJHt0eXBlb2YgdmFsdWV9YCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGNvbnN0IGV4aXN0aW5nSXRlbUluZGV4ID0gdGhpcy5kaWN0aW9uYXJ5LmZpbmRJbmRleCgoZGljdEl0ZW0pID0+IGRpY3RJdGVtID09PSB2YWx1ZSk7XG4gICAgICBpZiAoZXhpc3RpbmdJdGVtSW5kZXggPiAwKSB7XG4gICAgICAgIC8vIGl0ZW0gZm91bmQgaW4gZGljdGlvbmFyeVxuICAgICAgICB0aGlzLnZhbHVlcy5wdXNoKGV4aXN0aW5nSXRlbUluZGV4KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIGFkZCB0byBkaWN0aW9uYXJ5XG4gICAgICAgIHRoaXMuZGljdGlvbmFyeS5wdXNoKHZhbHVlKTtcbiAgICAgICAgdGhpcy52YWx1ZXMucHVzaCh0aGlzLmRpY3Rpb25hcnkubGVuZ3RoLTEpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnZhbHVlcy5wdXNoKHZhbHVlKTtcbiAgICB9XG5cbiAgICB0aGlzLnJlY2FsY3VsYXRlID0gdHJ1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIG1lYW4gdmFsdWUgb2YgdGhlIFNhbXBsZVNldC4gIEZvciBzdHJpbmdcbiAgICogdmFsdWVzLCB0aGlzIGlzIG9yZGVyZWQgYnkgc3RyaW5nIHNvcnRpbmcgcnVsZXMuXG4gICAqXG4gICAqIEByZXR1cm5zIFNhbXBsZVNldFZhbHVlIC0gbWVhbiB2YWx1ZSBvZiB0aGUgU2FtcGxlU2V0XG4gICAqL1xuICBwdWJsaWMgZ2V0TWVhbigpOiBTYW1wbGVTZXRWYWx1ZSB7XG4gICAgaWYgKHRoaXMucmVjYWxjdWxhdGUpIHtcbiAgICAgIHRoaXMucmVjYWxjdWxhdGVTdGF0cygpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy52YWx1ZXNOdW1lcmljID8gdGhpcy5tZWFuIDogdGhpcy5kaWN0aW9uYXJ5W3RoaXMubWVhbl07XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBtZWRpYW4gdmFsdWUgb2YgdGhlIFNhbXBsZVNldC4gIEZvciBzdHJpbmdcbiAgICogdmFsdWVzLCB0aGlzIGlzIG9yZGVyZWQgYnkgc3RyaW5nIHNvcnRpbmcgcnVsZXMuXG4gICAqXG4gICAqIEByZXR1cm5zIFNhbXBsZVNldFZhbHVlIC0gbWVkaWFuIHZhbHVlIG9mIHRoZSBTYW1wbGVTZXRcbiAgICovXG4gIHB1YmxpYyBnZXRNZWRpYW4oKTogU2FtcGxlU2V0VmFsdWUge1xuICAgIGlmICh0aGlzLnJlY2FsY3VsYXRlKSB7XG4gICAgICB0aGlzLnJlY2FsY3VsYXRlU3RhdHMoKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMudmFsdWVzTnVtZXJpYyA/IHRoaXMubWVkaWFuIDogdGhpcy5kaWN0aW9uYXJ5W3RoaXMubWVkaWFuXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIG1vZGUgdmFsdWUgb2YgdGhlIFNhbXBsZVNldC4gIEZvciBzdHJpbmdcbiAgICogdmFsdWVzLCB0aGlzIGlzIG9yZGVyZWQgYnkgc3RyaW5nIHNvcnRpbmcgcnVsZXMuXG4gICAqXG4gICAqIEByZXR1cm5zIFNhbXBsZVNldFZhbHVlIC0gbW9kZSB2YWx1ZSBvZiB0aGUgU2FtcGxlU2V0XG4gICAqL1xuICBwdWJsaWMgZ2V0TW9kZSgpOiBTYW1wbGVTZXRWYWx1ZSB7XG4gICAgaWYgKHRoaXMucmVjYWxjdWxhdGUpIHtcbiAgICAgIHRoaXMucmVjYWxjdWxhdGVTdGF0cygpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy52YWx1ZXNOdW1lcmljID8gdGhpcy5tb2RlIDogdGhpcy5kaWN0aW9uYXJ5W3RoaXMubW9kZV07XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBtaW5pbXVtIHZhbHVlIG9mIHRoZSBTYW1wbGVTZXQuICBGb3Igc3RyaW5nXG4gICAqIHZhbHVlcywgdGhpcyBpcyBvcmRlcmVkIGJ5IHN0cmluZyBzb3J0aW5nIHJ1bGVzLlxuICAgKlxuICAgKiBAcmV0dXJucyBTYW1wbGVTZXRWYWx1ZSAtIG1pbmltdW0gdmFsdWUgb2YgdGhlIFNhbXBsZVNldFxuICAgKi9cbiAgcHVibGljIGdldE1pbigpOiBTYW1wbGVTZXRWYWx1ZSB7XG4gICAgaWYgKHRoaXMucmVjYWxjdWxhdGUpIHtcbiAgICAgIHRoaXMucmVjYWxjdWxhdGVTdGF0cygpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy52YWx1ZXNOdW1lcmljID8gdGhpcy5taW4gOiB0aGlzLmRpY3Rpb25hcnlbdGhpcy5taW5dO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgbWF4aW11bSB2YWx1ZSBvZiB0aGUgU2FtcGxlU2V0LiAgRm9yIHN0cmluZ1xuICAgKiB2YWx1ZXMsIHRoaXMgaXMgb3JkZXJlZCBieSBzdHJpbmcgc29ydGluZyBydWxlcy5cbiAgICpcbiAgICogQHJldHVybnMgU2FtcGxlU2V0VmFsdWUgLSBtYXhpbXVtIHZhbHVlIG9mIHRoZSBTYW1wbGVTZXRcbiAgICovXG4gIHB1YmxpYyBnZXRNYXgoKTogU2FtcGxlU2V0VmFsdWUge1xuICAgIGlmICh0aGlzLnJlY2FsY3VsYXRlKSB7XG4gICAgICB0aGlzLnJlY2FsY3VsYXRlU3RhdHMoKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMudmFsdWVzTnVtZXJpYyA/IHRoaXMubWF4IDogdGhpcy5kaWN0aW9uYXJ5W3RoaXMubWF4XTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIHZhcmlhbmNlIHZhbHVlIG9mIHRoZSBTYW1wbGVTZXQuICBGb3Igc3RyaW5nXG4gICAqIHZhbHVlcywgdGhpcyBpcyB0aGUgdmFyaWFuY2UgYWNyb3NzIHRoZSBzaXplIG9mIHRoZSBTYW1wbGVTZXQgWzAsc2FtcGxlU2V0LmdldE51bVNhbXBsZXMoKS0xXS5cbiAgICpcbiAgICogQHJldHVybnMgbnVtYmVyIC0gQ2FsY3VsYXRlZCB2YXJpYW5jZSBvZiB0aGUgU2FtcGxlU2V0XG4gICAqL1xuICBwdWJsaWMgZ2V0VmFyaWFuY2UoKTogbnVtYmVyIHtcbiAgICBpZiAodGhpcy5yZWNhbGN1bGF0ZSkge1xuICAgICAgdGhpcy5yZWNhbGN1bGF0ZVN0YXRzKCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnZhcmlhbmNlO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgcGVyY2VudGlsZXMgdmFsdWVzIGZvciB0aGUgU2FtcGxlU2V0LlxuICAgKlxuICAgKiBAcmV0dXJucyBzYW1wbGVTZXRQZXJjZW50aWxlcyAtIHRoZSAwLCAyNSwgNTAsIDc1LCBhbmQgMTAwdGggcGVyY2VudGlhbCB2YWx1ZXMgZm9yIHRoZSBTYW1wbGVTZXQuXG4gICAqL1xuICBwdWJsaWMgZ2V0UGVyY2VudGlsZXMoKTogU2FtcGxlU2V0UGVyY2VudGlsZXMge1xuICAgIGlmICh0aGlzLnJlY2FsY3VsYXRlKSB7XG4gICAgICB0aGlzLnJlY2FsY3VsYXRlU3RhdHMoKTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIDA6IHRoaXMudmFsdWVzTnVtZXJpYyA/IHRoaXMubWluIDogdGhpcy5kaWN0aW9uYXJ5W3RoaXMubWluXSxcbiAgICAgIDI1OiB0aGlzLnZhbHVlc051bWVyaWMgPyB0aGlzLnBlcmNlbnRpbGUyNSA6IHRoaXMuZGljdGlvbmFyeVt0aGlzLnBlcmNlbnRpbGUyNV0sXG4gICAgICA1MDogdGhpcy52YWx1ZXNOdW1lcmljID8gdGhpcy5tZWRpYW4gOiB0aGlzLmRpY3Rpb25hcnlbdGhpcy5tZWRpYW5dLFxuICAgICAgNzU6IHRoaXMudmFsdWVzTnVtZXJpYyA/IHRoaXMucGVyY2VudGlsZTc1IDogdGhpcy5kaWN0aW9uYXJ5W3RoaXMucGVyY2VudGlsZTc1XSxcbiAgICAgIDEwMDogdGhpcy52YWx1ZXNOdW1lcmljID8gdGhpcy5tYXggOiB0aGlzLmRpY3Rpb25hcnlbdGhpcy5tYXhdLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBzdGFuZGFyZCBkZXZpYXRpb24gdmFsdWUgb2YgdGhlIFNhbXBsZVNldC4gIEZvciBzdHJpbmdcbiAgICogdmFsdWVzLCB0aGlzIGlzIHRoZSBzdGFuZGFyZCBkZXZpYXRpb24gYWNyb3NzIHRoZSBzaXplIG9mIHRoZVxuICAgKiBTYW1wbGVTZXQgWzAsc2FtcGxlU2V0LmdldE51bVNhbXBsZXMoKS0xXS5cbiAgICpcbiAgICogQHJldHVybnMgbnVtYmVyIC0gQ2FsY3VsYXRlZCBzdGFuZGFyZCBkZXZpYXRpb24gb2YgdGhlIFNhbXBsZVNldFxuICAgKi9cbiAgcHVibGljIGdldFN0ZGRldigpOiBudW1iZXIge1xuICAgIGlmICh0aGlzLnJlY2FsY3VsYXRlKSB7XG4gICAgICB0aGlzLnJlY2FsY3VsYXRlU3RhdHMoKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuc3RkZGV2O1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgdHlwZSBvZiB2YWx1ZXMgaW4gdGhlIFNhbXBsZVNldFxuICAgKlxuICAgKiBAcmV0dXJucyB0cnVlIGlmIG51bWVyaWMgdmFsdWVzLCBmYWxzZSBpZiBzdHJpbmcgdmFsdWVzXG4gICAqL1xuICBwdWJsaWMgaXNOdW1lcmljKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnZhbHVlc051bWVyaWM7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBudW1iZXIgb2YgdmFsdWVzIGluIHRoZSBTYW1wbGVTZXRcbiAgICpcbiAgICogQHJldHVybnMgbnVtYmVyIG9mIHNhbXBsZXMgaW4gdGhlIFNhbXBsZVNldFxuICAgKi9cbiAgcHVibGljIGdldE51bVNhbXBsZXMoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy52YWx1ZXMubGVuZ3RoO1xuICB9XG5cbiAgcHJpdmF0ZSByZWNhbGN1bGF0ZVN0YXRzKCkge1xuXG4gICAgdGhpcy5jYWxjTWVhbigpO1xuICAgIHRoaXMuY2FsY1ZhcmlhbmNlKCk7XG4gICAgdGhpcy5jYWxjRnJvbVNvcnRlZFZhbHVlcygpO1xuXG4gICAgdGhpcy5yZWNhbGN1bGF0ZSA9IGZhbHNlO1xuICB9XG5cbiAgcHJpdmF0ZSBjYWxjTWVhbigpIHtcbiAgICB0aGlzLm1lYW4gPSB0aGlzLnZhbHVlcy5yZWR1Y2UoKHN1bSwgdmFsdWUpID0+IHN1bSt2YWx1ZSwgMCkgLyB0aGlzLnZhbHVlcy5sZW5ndGg7XG4gICAgdGhpcy5tZWFuID0gdGhpcy52YWx1ZXNOdW1lcmljID8gdGhpcy5tZWFuIDogTWF0aC5yb3VuZCh0aGlzLm1lYW4pO1xuICB9XG5cbiAgLy8gQ2FsY3VsYXRlcyB0aGUgdmFyaWFuY2UgYW5kIHN0YW5kYXJkIGRldmlhdGlvblxuICAvLyBOT1RFIC0gdGhpcyBmdW5jdGlvbiBBU1NVTUVTIHRoYXQgdGhlIG1lYW4gaGFzIGFscmVhZHkgYmVlbiByZWNhbGN1bGF0ZWRcbiAgcHJpdmF0ZSBjYWxjVmFyaWFuY2UoKSB7XG4gICAgdGhpcy52YXJpYW5jZSA9IHRoaXMudmFsdWVzLnJlZHVjZSgoc3VtLCB2YWx1ZSkgPT4gc3VtKygodmFsdWUtdGhpcy5tZWFuKSoodmFsdWUtdGhpcy5tZWFuKSksIDApIC8gdGhpcy52YWx1ZXMubGVuZ3RoO1xuICAgIHRoaXMuc3RkZGV2ID0gTWF0aC5zcXJ0KHRoaXMudmFyaWFuY2UpO1xuICB9XG5cbiAgLy8gQ2FsY3VsYXRlcyBtZWRpYW4sIG1vZGUsIGFuZCBkaXN0cmlidXRpb25cbiAgcHJpdmF0ZSBjYWxjRnJvbVNvcnRlZFZhbHVlcygpIHtcbiAgICAvLyBzb3J0IHRoZSB2YWx1ZXNcbiAgICBsZXQgc29ydGVkVmFsdWVzOiBudW1iZXJbXTtcblxuICAgIGlmICggdGhpcy52YWx1ZXNOdW1lcmljICkge1xuICAgICAgLy8gdGhlIGRlZmF1bHQgc29ydCBmdW5jdGlvbiBpcyBhcHByb3ByaWF0ZVxuICAgICAgc29ydGVkVmFsdWVzID0gdGhpcy52YWx1ZXMudG9Tb3J0ZWQoIChhLCBiKSA9PlxuICAgICAgICBhIDwgYiA/XG4gICAgICAgICAgLTEgOlxuICAgICAgICAgIGEgPiBiID9cbiAgICAgICAgICAgIDEgOlxuICAgICAgICAgICAgMCxcbiAgICAgICk7XG5cbiAgICAgIHRoaXMubG9nZ2VyPy50cmFjZShgU2FtcGxlU2V0LmNhbGNGcm9tU29ydGVkVmFsdWVzOiBzb3J0ZWRWYWx1ZXM6ICR7c29ydGVkVmFsdWVzfWApO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBuZWVkIHRvIHNvcnQgYmFzZWQgb24gZGljdGlvbmFyeSBsb29rdXBcbiAgICAgIHNvcnRlZFZhbHVlcyA9IHRoaXMudmFsdWVzLnRvU29ydGVkKCAoYSwgYikgPT5cbiAgICAgICAgdGhpcy5kaWN0aW9uYXJ5W2FdIDwgdGhpcy5kaWN0aW9uYXJ5W2JdID9cbiAgICAgICAgICAtMSA6XG4gICAgICAgICAgKHRoaXMuZGljdGlvbmFyeVthXSA+IHRoaXMuZGljdGlvbmFyeVtiXSA/XG4gICAgICAgICAgICAxIDpcbiAgICAgICAgICAgIDAgKSxcbiAgICAgICk7XG5cbiAgICAgIHRoaXMubG9nZ2VyPy50cmFjZShgU2FtcGxlU2V0LmNhbGNGcm9tU29ydGVkVmFsdWVzOiBzb3J0ZWRWYWx1ZXM6ICR7c29ydGVkVmFsdWVzLm1hcCgodmFsdWUpID0+IHRoaXMuZGljdGlvbmFyeVt2YWx1ZV0pfWApO1xuICAgIH1cblxuXG4gICAgLy8gZ2V0IHRoZSBtZWRpYW5cbiAgICBjb25zdCBtaWRQb2ludEluZGV4ID0gTWF0aC50cnVuYygodGhpcy52YWx1ZXMubGVuZ3RoLTEpLzIpO1xuICAgIHRoaXMubWVkaWFuID0gc29ydGVkVmFsdWVzW21pZFBvaW50SW5kZXhdO1xuICAgIHRoaXMubG9nZ2VyPy50cmFjZShgU2FtcGxlU2V0LmNhbGNGcm9tU29ydGVkVmFsdWVzOiBtaWRQb2ludEluZGV4OiAke21pZFBvaW50SW5kZXh9YCk7XG5cbiAgICAvLyBnZXQgdGhlIG1pbiBhbmQgbWF4IHZhbHVlc1xuICAgIHRoaXMubWluID0gc29ydGVkVmFsdWVzWzBdO1xuICAgIHRoaXMubWF4ID0gc29ydGVkVmFsdWVzW3NvcnRlZFZhbHVlcy5sZW5ndGgtMV07XG5cbiAgICAvLyBnZXQgdGhlIHBlcmNlbnRpbGUyNSBhbmQgcGVyY2VudGlsZTUwIHZhbHVlc1xuICAgIGxldCBwZXJjZW50aWxlSW5kZXggPSBNYXRoLnRydW5jKCh0aGlzLnZhbHVlcy5sZW5ndGgtMSkvNCk7XG4gICAgdGhpcy5wZXJjZW50aWxlMjUgPSBzb3J0ZWRWYWx1ZXNbcGVyY2VudGlsZUluZGV4XTtcbiAgICBwZXJjZW50aWxlSW5kZXggPSBNYXRoLnRydW5jKCh0aGlzLnZhbHVlcy5sZW5ndGgtMSkqKDMvNCkpO1xuICAgIHRoaXMucGVyY2VudGlsZTc1ID0gc29ydGVkVmFsdWVzW3BlcmNlbnRpbGVJbmRleF07XG5cbiAgICAvLyBjcmVhdGUgdGhlIGRpc3RyaWJ1dGlvbiBoaXN0b2dyYW0vdGFibGVcbiAgICB0aGlzLmRpc3RyaWJ1dGlvbiA9IFtdO1xuICAgIGlmICggdGhpcy52YWx1ZXNOdW1lcmljICkge1xuICAgICAgLy8gaW4gdGhpcyBjYXNlLCBjcmVhdGUgYnVja2V0cyBvZiBlcXVhbCBzaXplIHdoaWNoIHNwYW4gdGhlIHJhbmdlIFttaW4sIG1heClcbiAgICAgIC8vIGFuZCBjb3VudCB0aGUgbnVtYmVyIG9mIHZhbHVlcyBpbiBlYWNoIHJhbmdlXG5cbiAgICAgIC8vIFVzZSB0aGUgc3FydChudW1TYW1wbGVzKSBydWxlIG9mIHRodW1iIGZvciBjYWxjdWxhdGluZyB0aGUgbnVtYmVyIG9mIGJ1Y2tldHNcbiAgICAgIGNvbnN0IG51bUJ1Y2tldHM6IG51bWJlciA9IE1hdGgudHJ1bmMoTWF0aC5zcXJ0KHRoaXMudmFsdWVzLmxlbmd0aCkrMSk7XG4gICAgICBjb25zdCBidWNrZXRTaXplOiBudW1iZXIgPSAodGhpcy5tYXgtdGhpcy5taW4pL251bUJ1Y2tldHM7XG5cbiAgICAgIGxldCBjdXJyZW50TWluOiBudW1iZXIgPSBzb3J0ZWRWYWx1ZXNbMF07XG4gICAgICBsZXQgY3VycmVudE1heDogbnVtYmVyID0gY3VycmVudE1pbiArIGJ1Y2tldFNpemU7XG4gICAgICBpZiAoY3VycmVudE1heCA9PT0gdGhpcy5tYXgpIHtcbiAgICAgICAgLy8gVkVSWSB1bmxpa2VseSAtIGJ1dCBqdXN0IGluIGNhc2UsIGFkZCBhIHZlcnkgc21hbGwgYW1vdW50IHNvIGFzIG5vdCB0byBoYXZlIGFcbiAgICAgICAgLy8gYnVja2V0IG9mIG9uZSB3aXRoIG9ubHkgdGhlIG1heCB2YWx1ZSBhdCB0aGUgZW5kLlxuICAgICAgICBjdXJyZW50TWF4ICs9IDFlLTEwO1xuICAgICAgfVxuICAgICAgbGV0IGNvdW50OiBudW1iZXIgPSAwO1xuXG4gICAgICBmb3IgKGxldCBpPTA7IGk8c29ydGVkVmFsdWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmIChzb3J0ZWRWYWx1ZXNbaV0gPj0gY3VycmVudE1pbiAmJiBzb3J0ZWRWYWx1ZXNbaV0gPCBjdXJyZW50TWF4KSB7XG4gICAgICAgICAgY291bnQrKztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmRpc3RyaWJ1dGlvbi5wdXNoKG5ldyBTYW1wbGVCdWNrZXQoY3VycmVudE1pbiwgY3VycmVudE1heCwgY291bnQpKTtcbiAgICAgICAgICBjdXJyZW50TWluICs9IGJ1Y2tldFNpemU7XG4gICAgICAgICAgY3VycmVudE1heCA9IGN1cnJlbnRNaW4rYnVja2V0U2l6ZTtcbiAgICAgICAgICBpZiAoY3VycmVudE1heCA9PT0gdGhpcy5tYXgpIHtcbiAgICAgICAgICAgIC8vIFZFUlkgdW5saWtlbHkgLSBidXQganVzdCBpbiBjYXNlLCBhZGQgYSB2ZXJ5IHNtYWxsIGFtb3VudCBzbyBhcyBub3QgdG8gaGF2ZSBhXG4gICAgICAgICAgICAvLyBidWNrZXQgb2Ygb25lIHdpdGggb25seSB0aGUgbWF4IHZhbHVlIGF0IHRoZSBlbmQuXG4gICAgICAgICAgICBjdXJyZW50TWF4ICs9IDFlLTEwO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb3VudCA9IDE7XG4gICAgICAgIH1cblxuICAgICAgfVxuICAgICAgdGhpcy5kaXN0cmlidXRpb24ucHVzaChuZXcgU2FtcGxlQnVja2V0KGN1cnJlbnRNaW4sIGN1cnJlbnRNYXgsIGNvdW50KSk7XG5cbiAgICAgIC8vIG51bUJ1Y2tldHMgYW5kIGRpc3RyaWJ1dGlvbi5sZW5ndGggc2hvdWxkIG1hdGNoXG4gICAgICB0aGlzLmxvZ2dlcj8udHJhY2UoYFNhbXBsZVNldC5jYWxjRnJvbVNvcnRlZFZhbHVlczogbnVtZXJpYyBkYXRhLCBudW1CdWNrZXRzOiAke251bUJ1Y2tldHN9LCBkaXN0cmlidXRpb24ubGVuZ3RoOiAke3RoaXMuZGlzdHJpYnV0aW9uLmxlbmd0aH1gKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gaW4gdGhpcyBjYXNlLCB0aGUgbnVtYmVyIG9mIGJ1Y2tldHMgbWF0Y2hlcyB0aGUgbnVtYmVyIG9mIHN0cmluZ3MgaW4gdGhlIFNhbXBsZVNldFxuICAgICAgLy8gd2hpY2ggaXMgdGhlIHNpemUgb2YgdGhlIGRpY3Rpb25hcnlcblxuICAgICAgbGV0IGN1cnJlbnRWYWx1ZTogbnVtYmVyID0gc29ydGVkVmFsdWVzWzBdO1xuICAgICAgbGV0IGNvdW50OiBudW1iZXIgPSAwO1xuXG4gICAgICBmb3IgKGxldCBpPTA7IGk8c29ydGVkVmFsdWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmIChzb3J0ZWRWYWx1ZXNbaV0gPT09IGN1cnJlbnRWYWx1ZSkge1xuICAgICAgICAgIGNvdW50Kys7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5kaXN0cmlidXRpb24ucHVzaChuZXcgU2FtcGxlQnVja2V0KGN1cnJlbnRWYWx1ZSwgY3VycmVudFZhbHVlLCBjb3VudCkpO1xuICAgICAgICAgIGN1cnJlbnRWYWx1ZSA9IHNvcnRlZFZhbHVlc1tpXTtcbiAgICAgICAgICBjb3VudCA9IDE7XG4gICAgICAgIH1cblxuICAgICAgfVxuICAgICAgdGhpcy5kaXN0cmlidXRpb24ucHVzaChuZXcgU2FtcGxlQnVja2V0KGN1cnJlbnRWYWx1ZSwgY3VycmVudFZhbHVlLCBjb3VudCkpO1xuXG4gICAgICAvLyBkaWN0aW9uYXJ5Lmxlbmd0aCBhbmQgZGlzdHJpYnV0aW9uLmxlbmd0aCBzaG91bGQgbWF0Y2hcbiAgICAgIHRoaXMubG9nZ2VyPy50cmFjZShgU2FtcGxlU2V0LmNhbGNGcm9tU29ydGVkVmFsdWVzOiBzdHJpbmcgZGF0YSwgZGljdGlvbmFyeS5sZW5ndGg6ICR7dGhpcy5kaWN0aW9uYXJ5Lmxlbmd0aH0sIGRpc3RyaWJ1dGlvbi5sZW5ndGg6ICR7dGhpcy5kaXN0cmlidXRpb24ubGVuZ3RofWApO1xuICAgICAgdGhpcy5sb2dnZXI/LnRyYWNlKGBTYW1wbGVTZXQuY2FsY0Zyb21Tb3J0ZWRWYWx1ZXM6IGRpY3Rpb25hcnk6ICR7dGhpcy5kaWN0aW9uYXJ5fWApO1xuICAgIH1cblxuICAgIHRoaXMubG9nZ2VyPy50cmFjZShgU2FtcGxlU2V0LmNhbGNGcm9tU29ydGVkVmFsdWVzOiBudW1lcmljOiAke3RoaXMudmFsdWVzTnVtZXJpY30sIGRpc3RyaWJ1dGlvbiBkZXRhaWxzOiAke0pTT04uc3RyaW5naWZ5KHRoaXMuZGlzdHJpYnV0aW9uLCBudWxsLCAyKX1gKTtcblxuICAgIC8vIGNhbGN1bGF0ZSB0aGUgbW9kZVxuICAgIGNvbnN0IG1heERpc3RyaWJ1dGlvbkJ1Y2tldEluZGV4ID0gdGhpcy5kaXN0cmlidXRpb24ucmVkdWNlKFxuICAgICAgKGN1ck1heEluZGV4LCBidWNrZXQsIGluZGV4KSA9PiBidWNrZXQuY291bnQgPiB0aGlzLmRpc3RyaWJ1dGlvbltjdXJNYXhJbmRleF0uY291bnQgPyBpbmRleCA6IGN1ck1heEluZGV4LFxuICAgICAgMCxcbiAgICApO1xuICAgIGlmICggdGhpcy52YWx1ZXNOdW1lcmljICkge1xuICAgICAgdGhpcy5tb2RlID0gdGhpcy5kaXN0cmlidXRpb25bbWF4RGlzdHJpYnV0aW9uQnVja2V0SW5kZXhdLm1pbiArXG4gICAgICAgICh0aGlzLmRpc3RyaWJ1dGlvblttYXhEaXN0cmlidXRpb25CdWNrZXRJbmRleF0ubWF4IC0gdGhpcy5kaXN0cmlidXRpb25bbWF4RGlzdHJpYnV0aW9uQnVja2V0SW5kZXhdLm1pbikvMjtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5tb2RlID0gdGhpcy5kaXN0cmlidXRpb25bbWF4RGlzdHJpYnV0aW9uQnVja2V0SW5kZXhdLm1pbjtcbiAgICB9XG5cbiAgICB0aGlzLmxvZ2dlcj8udHJhY2UoYFNhbXBsZVNldC5jYWxjRnJvbVNvcnRlZFZhbHVlczogbW9kZTogJHt0aGlzLm1vZGV9YCk7XG5cbiAgfVxuXG59XG4iXX0=
440
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2FtcGxlLXNldC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb21wb25lbnRzL3NhbXBsZS1zZXQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsOEJBQThCO0FBSTlCOzs7R0FHRztBQUNILE1BQU0sT0FBTyxZQUFZO0lBQ2hCLEdBQUcsQ0FBUztJQUNaLEdBQUcsQ0FBUztJQUNaLFFBQVEsQ0FBUztJQUNqQixLQUFLLENBQVM7SUFFckIsWUFBWSxHQUFXLEVBQUUsR0FBVyxFQUFFLEtBQWE7UUFDakQsSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7UUFDZixJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztRQUNmLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFDLENBQUMsQ0FBQztRQUNqRCxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztJQUNyQixDQUFDO0NBQ0Y7QUFrQ0EsQ0FBQztBQUVGOzs7Ozs7OztHQVFHO0FBQ0gsTUFBTSxPQUFPLFNBQVM7SUFDcEIsZUFBZTtJQUNMLE1BQU0sQ0FBVztJQUUzQixjQUFjO0lBQ04sYUFBYSxDQUFVO0lBQ3ZCLE1BQU0sQ0FBVztJQUNqQixVQUFVLENBQVc7SUFFN0IsbUJBQW1CO0lBQ1gsV0FBVyxDQUFVLENBQUMsK0NBQStDO0lBQ3JFLElBQUksQ0FBUztJQUNiLE1BQU0sQ0FBUztJQUNmLElBQUksQ0FBUztJQUNiLFFBQVEsQ0FBUztJQUNqQixNQUFNLENBQVM7SUFDZixHQUFHLENBQVM7SUFDWixHQUFHLENBQVM7SUFDWixZQUFZLENBQVM7SUFDckIsWUFBWSxDQUFTO0lBQ3JCLFlBQVksQ0FBaUI7SUFFckM7Ozs7T0FJRztJQUNILFlBQVksT0FBeUI7UUFDbkMsZUFBZTtRQUNmLElBQUksQ0FBQyxNQUFNLEdBQUcsT0FBTyxDQUFDLE1B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R0FBRyxDQUFDO1FBQ2hFLENBQUM7UUFFRCxJQUFJLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyx5Q0FBeUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7SUFFM0UsQ0FBQztDQUVGIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IChjKSAyMDI2IFRpbSBIYWhuXG5cbmltcG9ydCB7IElMb2dnZXIgfSBmcm9tICdAbmNmb3VyLXVzL2xvZ2dpbmcnO1xuXG4vKipcbiAqIFNhbXBsZUJ1Y2tldCBpcyB1c2VkIHRvIHJlcHJlc2VudCB0aGUgY2FsY3VsYXRlZFxuICogZGlzdHJpYnV0aW9uIGZvciB0aGUgU2FtcGxlU2V0LlxuICovXG5leHBvcnQgY2xhc3MgU2FtcGxlQnVja2V0IHtcbiAgcHVibGljIG1pbjogbnVtYmVyO1xuICBwdWJsaWMgbWF4OiBudW1iZXI7XG4gIHB1YmxpYyBtaWRQb2ludDogbnVtYmVyO1xuICBwdWJsaWMgY291bnQ6IG51bWJlcjtcblxuICBjb25zdHJ1Y3RvcihtaW46IG51bWJlciwgbWF4OiBudW1iZXIsIGNvdW50OiBudW1iZXIpIHtcbiAgICB0aGlzLm1pbiA9IG1pbjtcbiAgICB0aGlzLm1heCA9IG1heDtcbiAgICB0aGlzLm1pZFBvaW50ID0gdGhpcy5taW4gKyAodGhpcy5tYXgtdGhpcy5taW4pLzI7XG4gICAgdGhpcy5jb3VudCA9IGNvdW50O1xuICB9XG59XG5cbi8qKlxuICogVGhlIHR5cGUgb2YgdmFsdWVzIHN0b3JlZCBpbiB0aGUgU2FtcGxlU2V0XG4gKi9cbmV4cG9ydCB0eXBlIFNhbXBsZVNldFZhbHVlID0gbnVtYmVyIHwgc3RyaW5nO1xuXG4vKipcbiAqIFNhbXBsZVNldFBlcmNlbnRpbGVzIHJlcHJlc2VudHMgdGhlIGNhbGN1bGF0ZWQgcGVyY2VudGlsZXNcbiAqIGZvciB0aGUgdmFsdWVzIGluIHRoZSBTYW1wbGVTZXQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2FtcGxlU2V0UGVyY2VudGlsZXMge1xuICAwOiBTYW1wbGVTZXRWYWx1ZTtcbiAgMjU6IFNhbXBsZVNldFZhbHVlO1xuICA1MDogU2FtcGxlU2V0VmFsdWU7XG4gIDc1OiBTYW1wbGVTZXRWYWx1ZTtcbiAgMTAwOiBTYW1wbGVTZXRWYWx1ZTtcbn1cblxuLyoqXG4gKiBUaGUgb3B0aW9ucyBmb3IgaW5zdGFudGlhdGluZyB0aGUgU2FtcGxlU2V0LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNhbXBsZVNldE9wdGlvbnMge1xuXG4gIC8qKlxuICAgKiBvcHRpb25hbCBpbml0aWFsIHNldCBvZiB2YWx1ZXMgdG8gcHV0IGludG8gdGhlIFNhbXBsZVNldFxuICAgKi9cbiAgaW5pdGlhbFZhbHVlcz86IFNhbXBsZVNldFZhbHVlW107XG5cbiAgLy8gZGVwZW5kZW5jaWVzXG4gIC8qKlxuICAgKiBvcHRpb25hbCBsb2dnZXIgdG8gdXNlLlxuICAgKi9cbiAgbG9nZ2VyPzogSUxvZ2dlcjtcbn07XG5cbi8qKlxuICogQmFzZSBjbGFzcyB0byByZXByZXNlbnQgc2FtcGxlcyBvZiBhIHJhbmRvbSB2YXJpYWJsZVxuICogaW4gdGhlIHN0YXRzIHBhY2thZ2UuXG4gKlxuICogT3RoZXIgY2FsY3VsYXRlZCBkaXN0cmlidXRpb25zIGFyZSBiYXNlZCBvbiB0aGlzIGJhc2VcbiAqIGNsYXNzLiAgSG93ZXZlciwgaW5zdGFuY2VzIG9mIHRoZSBiYXNlIGNsYXNzIGNhbiBiZVxuICogY3JlYXRlZCBhcyB3ZWxsLCBpZiBhIHNldCBvZiByYW5kb20gdmFsdWVzIGV4aXN0cyB0b1xuICogaW5pdGlhbGl6ZSB0aGUgU2FtcGxlU2V0LlxuICovXG5leHBvcnQgY2xhc3MgU2FtcGxlU2V0IHtcbiAgLy8gZGVwZW5kZW5jaWVzXG4gIHByb3RlY3RlZCBsb2dnZXI/OiBJTG9nZ2VyO1xuXG4gIC8vIHNhbXBsZSBkYXRhXG4gIHByaXZhdGUgdmFsdWVzTnVtZXJpYzogYm9vbGVhbjtcbiAgcHJpdmF0ZSB2YWx1ZXM6IG51bWJlcltdO1xuICBwcml2YXRlIGRpY3Rpb25hcnk6IHN0cmluZ1tdO1xuXG4gIC8vIGNhbGN1bGF0ZWQgaXRlbXNcbiAgcHJpdmF0ZSByZWNhbGN1bGF0ZTogYm9vbGVhbjsgLy8gc2V0cyB3aGV0aGVyIG9yIG5vdCByZS1jYWxjdWxhdGlvbiBpcyBuZWVkZWRcbiAgcHJpdmF0ZSBtZWFuOiBudW1iZXI7XG4gIHByaXZhdGUgbWVkaWFuOiBudW1iZXI7XG4gIHByaXZhdGUgbW9kZTogbnVtYmVyO1xuICBwcml2YXRlIHZhcmlhbmNlOiBudW1iZXI7XG4gIHByaXZhdGUgc3RkZGV2OiBudW1iZXI7XG4gIHByaXZhdGUgbWF4OiBudW1iZXI7XG4gIHByaXZhdGUgbWluOiBudW1iZXI7XG4gIHByaXZhdGUgcGVyY2VudGlsZTI1OiBudW1iZXI7XG4gIHByaXZhdGUgcGVyY2VudGlsZTc1OiBudW1iZXI7XG4gIHByaXZhdGUgZGlzdHJpYnV0aW9uOiBTYW1wbGVCdWNrZXRbXTtcblxuICAvKipcbiAgICogQ3JlYXRlIGEgbmV3IFNhbXBsZVNldCBpbnN0YW5jZS5cbiAgICpcbiAgICogQHBhcmFtIG9wdGlvbnMgU2VlIHtAbGluayBTYW1wbGVTZXRPcHRpb25zfVxuICAgKi9cbiAgY29uc3RydWN0b3Iob3B0aW9uczogU2FtcGxlU2V0T3B0aW9ucykge1xuICAgIC8vIGRlcGVuZGVuY2llc1xuICAgIHRoaXMubG9nZ2VyID0gb3B0aW9ucy5sb2dnZXI7XG5cbiAgICAvLyBpbnRpYWxpemUgaW5mb3JtYXRpb25cbiAgICB0aGlzLnJlY2FsY3VsYXRlID0gdHJ1ZTtcbiAgICB0aGlzLm1lYW4gPSAwO1xuICAgIHRoaXMubWVkaWFuID0gMDtcbiAgICB0aGlzLm1vZGUgPSAwO1xuICAgIHRoaXMudmFyaWFuY2UgPSAwO1xuICAgIHRoaXMuc3RkZGV2ID0gMDtcbiAgICB0aGlzLm1pbiA9IDA7XG4gICAgdGhpcy5tYXggPSAwO1xuICAgIHRoaXMucGVyY2VudGlsZTI1ID0gMDtcbiAgICB0aGlzLnBlcmNlbnRpbGU3NSA9IDA7XG4gICAgdGhpcy5kaXN0cmlidXRpb24gPSBbXTtcblxuICAgIC8vIGluaXRpYWxpemUgdmFsdWVzXG4gICAgdGhpcy52YWx1ZXNOdW1lcmljID0gdHJ1ZTtcbiAgICB0aGlzLnZhbHVlcyA9IChbXSBhcyBudW1iZXJbXSk7XG4gICAgdGhpcy5kaWN0aW9uYXJ5ID0gKFtdIGFzIHN0cmluZ1tdKTtcbiAgICBpZiAob3B0aW9ucy5pbml0aWFsVmFsdWVzKSB7XG4gICAgICB0aGlzLnNldFZhbHVlcyhvcHRpb25zLmluaXRpYWxWYWx1ZXMpO1xuICAgIH1cblxuICAgIHRoaXMubG9nZ2VyPy50cmFjZShgU2FtcGxlU2V0LmNvbnN0cnVjdG9yOiBudW1TYW1wbGVzOiAke3RoaXMudmFsdWVzLmxlbmd0aH1gKTtcblxuICB9XG5cbiAgLyoqXG4gICAqIGdldCB0aGUgYXJyYXkgb2YgdmFsdWVzIGhlbGQgaW4gdGhlIFNhbXBsZVNldC5cbiAgICpcbiAgICogQHJldHVybnMgU2FtcGxlU2V0VmFsdWVbXSAtIGFycmF5IG9mIFNhbXBsZVNldFZhbHVlXG4gICAqL1xuICBwdWJsaWMgZ2V0VmFsdWVzKCk6IFNhbXBsZVNldFZhbHVlW10ge1xuICAgIGxldCByZXRWYWxzOiBTYW1wbGVTZXRWYWx1ZVtdO1xuICAgIGlmICh0aGlzLnZhbHVlc051bWVyaWMpIHtcbiAgICAgIHJldFZhbHMgPSB0aGlzLnZhbHVlcy5tYXAoKHZhbHVlKSA9PiB2YWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldFZhbHMgPSB0aGlzLnZhbHVlcy5tYXAoKHZhbHVlKSA9PiB0aGlzLmRpY3Rpb25hcnlbdmFsdWVdKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmV0VmFscztcbiAgfVxuXG4gIC8qKlxuICAgKiBnZXQgYSBzcGVjaWZpYyB2YWx1ZSwgYnkgaW5kZXgsIGhlbGQgaW4gdGhlIFNhbXBsZVNldC5cbiAgICpcbiAgICogQHJldHVybnMgU2FtcGxlU2V0VmFsdWVcbiAgICovXG4gIHB1YmxpYyBnZXRWYWx1ZShpbmRleDogbnVtYmVyKTogU2FtcGxlU2V0VmFsdWUgfCB1bmRlZmluZWQge1xuICAgIGxldCByZXRWYWw6IFNhbXBsZVNldFZhbHVlO1xuXG4gICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSB0aGlzLnZhbHVlcy5sZW5ndGgpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMudmFsdWVzTnVtZXJpYykge1xuICAgICAgcmV0VmFsID0gdGhpcy52YWx1ZXNbaW5kZXhdO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXRWYWwgPSB0aGlzLmRpY3Rpb25hcnlbdGhpcy52YWx1ZXNbaW5kZXhdXTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmV0VmFsO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlcGxhY2UgdGhlIHNldCBvZiB2YWx1ZXMgaGVsZCBpbiB0aGUgU2FtcGxlU2V0XG4gICAqL1xuICBwdWJsaWMgc2V0VmFsdWVzKHZhbHVlczogU2FtcGxlU2V0VmFsdWVbXSk6IHZvaWQge1xuICAgIHRoaXMudmFsdWVzID0gW10gYXMgbnVtYmVyW107XG4gICAgdGhpcy5kaWN0aW9uYXJ5ID0gW10gYXMgc3RyaW5nW107XG5cbiAgICB0aGlzLmxvZ2dlcj8udHJhY2UoYFNhbXBsZVNldC5zZXRWYWx1ZXM6IHR5cGVvZiB2YWx1ZTogJHt0eXBlb2YgdmFsdWVzWzBdfWApO1xuXG4gICAgaWYgKHZhbHVlcy5sZW5ndGggPiAwICYmIHR5cGVvZiB2YWx1ZXNbMF0gPT09ICdzdHJpbmcnKSB7XG4gICAgICB0aGlzLnZhbHVlc051bWVyaWMgPSBmYWxzZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy52YWx1ZXNOdW1lcmljID0gdHJ1ZTtcbiAgICB9XG5cbiAgICB0aGlzLmFkZFZhbHVlcyh2YWx1ZXMpO1xuXG4gICAgdGhpcy5yZWNhbGN1bGF0ZSA9IHRydWU7XG4gIH1cblxuICAvKipcbiAgICogQWRkIHZhbHVlcyB0byB0aGUgU2FtcGxlU2V0XG4gICAqXG4gICAqIEBwYXJhbSB2YWx1ZXMgdmFsdWVzIHRvIGFkZCB0byB0aGUgU2FtcGxlU2V0XG4gICAqL1xuICBwdWJsaWMgYWRkVmFsdWVzKHZhbHVlczogU2FtcGxlU2V0VmFsdWVbXSApOiB2b2lkIHtcbiAgICBpZiAoIHRoaXMudmFsdWVzLmxlbmd0aCA+IDAgJiZcbiAgICAgICAgKCB0eXBlb2YgdmFsdWVzWzBdID09PSAnc3RyaW5nJyAmJiB0aGlzLnZhbHVlc051bWVyaWMgKSB8fFxuICAgICAgICAoIHR5cGVvZiB2YWx1ZXNbMF0gPT09ICdudW1iZXInICYmICF0aGlzLnZhbHVlc051bWVyaWMgKSApIHtcbiAgICAgIC8vIHR5cGUgbWlzbWF0Y2ggb24gdmFsdWVzIGJlaW5nIGFkZGVkIC0gcXVpZXRseSBJR05PUkVcbiAgICAgIHRoaXMubG9nZ2VyPy5lcnJvcihgU2FtcGxlU2V0LmFkZFZhbHVlczogdHlwZSBtaXNtYXRjaCBvbiB2YWx1ZXMgYWRkZWQsIHZhbHVlc051bWVyaWM6ICR7dGhpcy52YWx1ZXNOdW1lcmljfSwgdmFsdWVzIHR5cGU6ICR7dHlwZW9mIHZhbHVlc1swXX1gKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodmFsdWVzLmxlbmd0aCA+IDAgJiYgdHlwZW9mIHZhbHVlc1swXSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHRoaXMudmFsdWVzTnVtZXJpYyA9IGZhbHNlO1xuXG4gICAgICAodmFsdWVzIGFzIHN0cmluZ1tdKS5mb3JFYWNoKCh2YWx1ZSkgPT4ge1xuICAgICAgICBjb25zdCBleGlzdGluZ0l0ZW1JbmRleCA9IHRoaXMuZGljdGlvbmFyeS5maW5kSW5kZXgoKGRpY3RJdGVtKSA9PiBkaWN0SXRlbSA9PT0gdmFsdWUpO1xuICAgICAgICBpZiAoZXhpc3RpbmdJdGVtSW5kZXggPj0gMCkge1xuICAgICAgICAgIC8vIGl0ZW0gZm91bmQgaW4gZGljdGlvbmFyeVxuICAgICAgICAgIHRoaXMudmFsdWVzLnB1c2goZXhpc3RpbmdJdGVtSW5kZXgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIGFkZCB0byBkaWN0aW9uYXJ5XG4gICAgICAgICAgdGhpcy5kaWN0aW9uYXJ5LnB1c2godmFsdWUpO1xuICAgICAgICAgIHRoaXMudmFsdWVzLnB1c2godGhpcy5kaWN0aW9uYXJ5Lmxlbmd0aC0xKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIHRoaXMubG9nZ2VyPy50cmFjZShgU2FtcGxlU2V0LmFkZFZhbHVlczogcmVzdWx0aW5nIGRpY3Rpb25hcnk6ICR7dGhpcy5kaWN0aW9uYXJ5fWApO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBudW1iZXIgdmFsdWVzXG4gICAgICB0aGlzLnZhbHVlc051bWVyaWMgPSB0cnVlO1xuICAgICAgdGhpcy52YWx1ZXMgPSAodmFsdWVzIGFzIG51bWJlcltdKS5tYXAoKHZhbHVlKSA9PiB2YWx1ZSkgYXMgbnVtYmVyW107XG4gICAgfVxuXG4gICAgdGhpcy5sb2dnZXI/LnRyYWNlKGBTYW1wbGVTZXQuYWRkVmFsdWVzOiBuZXcgbnVtU2FtcGxlczogJHt0aGlzLnZhbHVlcy5sZW5ndGh9YCk7XG5cbiAgICB0aGlzLnJlY2FsY3VsYXRlID0gdHJ1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgYSBzaW5nbGUgdmFsdWUgdG8gdGhlIFNhbXBsZVNldFxuICAgKlxuICAgKiBAcGFyYW0gdmFsdWUgdmFsdWUgdG8gYWRkIHRvIHRoZSBTYW1wbGVTZXRcbiAgICovXG4gIHB1YmxpYyBhZGRWYWx1ZSh2YWx1ZTogU2FtcGxlU2V0VmFsdWUpIHtcbiAgICBpZiAoIHRoaXMudmFsdWVzLmxlbmd0aCA+IDAgJiZcbiAgICAgICAgKCB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnICYmIHRoaXMudmFsdWVzTnVtZXJpYyApIHx8XG4gICAgICAgICggdHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJyAmJiAhdGhpcy52YWx1ZXNOdW1lcmljICkgKSB7XG4gICAgICAvLyB0eXBlIG1pc21hdGNoIG9uIHZhbHVlcyBiZWluZyBhZGRlZCAtIHF1aWV0bHkgSUdOT1JFXG4gICAgICB0aGlzLmxvZ2dlcj8uZXJyb3IoYFNhbXBsZVNldC5hZGRWYWx1ZTogdHlwZSBtaXNtYXRjaCBvbiB2YWx1ZSBhZGRlZCwgdmFsdWVzTnVtZXJpYzogJHt0aGlzLnZhbHVlc051bWVyaWN9LCB2YWx1ZXMgdHlwZTogJHt0eXBlb2YgdmFsdWV9YCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGNvbnN0IGV4aXN0aW5nSXRlbUluZGV4ID0gdGhpcy5kaWN0aW9uYXJ5LmZpbmRJbmRleCgoZGljdEl0ZW0pID0+IGRpY3RJdGVtID09PSB2YWx1ZSk7XG4gICAgICBpZiAoZXhpc3RpbmdJdGVtSW5kZXggPiAwKSB7XG4gICAgICAgIC8vIGl0ZW0gZm91bmQgaW4gZGljdGlvbmFyeVxuICAgICAgICB0aGlzLnZhbHVlcy5wdXNoKGV4aXN0aW5nSXRlbUluZGV4KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIGFkZCB0byBkaWN0aW9uYXJ5XG4gICAgICAgIHRoaXMuZGljdGlvbmFyeS5wdXNoKHZhbHVlKTtcbiAgICAgICAgdGhpcy52YWx1ZXMucHVzaCh0aGlzLmRpY3Rpb25hcnkubGVuZ3RoLTEpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnZhbHVlcy5wdXNoKHZhbHVlKTtcbiAgICB9XG5cbiAgICB0aGlzLnJlY2FsY3VsYXRlID0gdHJ1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIG1lYW4gdmFsdWUgb2YgdGhlIFNhbXBsZVNldC4gIEZvciBzdHJpbmdcbiAgICogdmFsdWVzLCB0aGlzIGlzIG9yZGVyZWQgYnkgc3RyaW5nIHNvcnRpbmcgcnVsZXMuXG4gICAqXG4gICAqIEByZXR1cm5zIFNhbXBsZVNldFZhbHVlIC0gbWVhbiB2YWx1ZSBvZiB0aGUgU2FtcGxlU2V0XG4gICAqL1xuICBwdWJsaWMgZ2V0TWVhbigpOiBTYW1wbGVTZXRWYWx1ZSB7XG4gICAgaWYgKHRoaXMucmVjYWxjdWxhdGUpIHtcbiAgICAgIHRoaXMucmVjYWxjdWxhdGVTdGF0cygpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy52YWx1ZXNOdW1lcmljID8gdGhpcy5tZWFuIDogdGhpcy5kaWN0aW9uYXJ5W3RoaXMubWVhbl07XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBtZWRpYW4gdmFsdWUgb2YgdGhlIFNhbXBsZVNldC4gIEZvciBzdHJpbmdcbiAgICogdmFsdWVzLCB0aGlzIGlzIG9yZGVyZWQgYnkgc3RyaW5nIHNvcnRpbmcgcnVsZXMuXG4gICAqXG4gICAqIEByZXR1cm5zIFNhbXBsZVNldFZhbHVlIC0gbWVkaWFuIHZhbHVlIG9mIHRoZSBTYW1wbGVTZXRcbiAgICovXG4gIHB1YmxpYyBnZXRNZWRpYW4oKTogU2FtcGxlU2V0VmFsdWUge1xuICAgIGlmICh0aGlzLnJlY2FsY3VsYXRlKSB7XG4gICAgICB0aGlzLnJlY2FsY3VsYXRlU3RhdHMoKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMudmFsdWVzTnVtZXJpYyA/IHRoaXMubWVkaWFuIDogdGhpcy5kaWN0aW9uYXJ5W3RoaXMubWVkaWFuXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIG1vZGUgdmFsdWUgb2YgdGhlIFNhbXBsZVNldC4gIEZvciBzdHJpbmdcbiAgICogdmFsdWVzLCB0aGlzIGlzIG9yZGVyZWQgYnkgc3RyaW5nIHNvcnRpbmcgcnVsZXMuXG4gICAqXG4gICAqIEByZXR1cm5zIFNhbXBsZVNldFZhbHVlIC0gbW9kZSB2YWx1ZSBvZiB0aGUgU2FtcGxlU2V0XG4gICAqL1xuICBwdWJsaWMgZ2V0TW9kZSgpOiBTYW1wbGVTZXRWYWx1ZSB7XG4gICAgaWYgKHRoaXMucmVjYWxjdWxhdGUpIHtcbiAgICAgIHRoaXMucmVjYWxjdWxhdGVTdGF0cygpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy52YWx1ZXNOdW1lcmljID8gdGhpcy5tb2RlIDogdGhpcy5kaWN0aW9uYXJ5W3RoaXMubW9kZV07XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBtaW5pbXVtIHZhbHVlIG9mIHRoZSBTYW1wbGVTZXQuICBGb3Igc3RyaW5nXG4gICAqIHZhbHVlcywgdGhpcyBpcyBvcmRlcmVkIGJ5IHN0cmluZyBzb3J0aW5nIHJ1bGVzLlxuICAgKlxuICAgKiBAcmV0dXJucyBTYW1wbGVTZXRWYWx1ZSAtIG1pbmltdW0gdmFsdWUgb2YgdGhlIFNhbXBsZVNldFxuICAgKi9cbiAgcHVibGljIGdldE1pbigpOiBTYW1wbGVTZXRWYWx1ZSB7XG4gICAgaWYgKHRoaXMucmVjYWxjdWxhdGUpIHtcbiAgICAgIHRoaXMucmVjYWxjdWxhdGVTdGF0cygpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy52YWx1ZXNOdW1lcmljID8gdGhpcy5taW4gOiB0aGlzLmRpY3Rpb25hcnlbdGhpcy5taW5dO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgbWF4aW11bSB2YWx1ZSBvZiB0aGUgU2FtcGxlU2V0LiAgRm9yIHN0cmluZ1xuICAgKiB2YWx1ZXMsIHRoaXMgaXMgb3JkZXJlZCBieSBzdHJpbmcgc29ydGluZyBydWxlcy5cbiAgICpcbiAgICogQHJldHVybnMgU2FtcGxlU2V0VmFsdWUgLSBtYXhpbXVtIHZhbHVlIG9mIHRoZSBTYW1wbGVTZXRcbiAgICovXG4gIHB1YmxpYyBnZXRNYXgoKTogU2FtcGxlU2V0VmFsdWUge1xuICAgIGlmICh0aGlzLnJlY2FsY3VsYXRlKSB7XG4gICAgICB0aGlzLnJlY2FsY3VsYXRlU3RhdHMoKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMudmFsdWVzTnVtZXJpYyA/IHRoaXMubWF4IDogdGhpcy5kaWN0aW9uYXJ5W3RoaXMubWF4XTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIHZhcmlhbmNlIHZhbHVlIG9mIHRoZSBTYW1wbGVTZXQuICBGb3Igc3RyaW5nXG4gICAqIHZhbHVlcywgdGhpcyBpcyB0aGUgdmFyaWFuY2UgYWNyb3NzIHRoZSBzaXplIG9mIHRoZSBTYW1wbGVTZXQgWzAsc2FtcGxlU2V0LmdldE51bVNhbXBsZXMoKS0xXS5cbiAgICpcbiAgICogQHJldHVybnMgbnVtYmVyIC0gQ2FsY3VsYXRlZCB2YXJpYW5jZSBvZiB0aGUgU2FtcGxlU2V0XG4gICAqL1xuICBwdWJsaWMgZ2V0VmFyaWFuY2UoKTogbnVtYmVyIHtcbiAgICBpZiAodGhpcy5yZWNhbGN1bGF0ZSkge1xuICAgICAgdGhpcy5yZWNhbGN1bGF0ZVN0YXRzKCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnZhcmlhbmNlO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgcGVyY2VudGlsZXMgdmFsdWVzIGZvciB0aGUgU2FtcGxlU2V0LlxuICAgKlxuICAgKiBAcmV0dXJucyBzYW1wbGVTZXRQZXJjZW50aWxlcyAtIHRoZSAwLCAyNSwgNTAsIDc1LCBhbmQgMTAwdGggcGVyY2VudGlhbCB2YWx1ZXMgZm9yIHRoZSBTYW1wbGVTZXQuXG4gICAqL1xuICBwdWJsaWMgZ2V0UGVyY2VudGlsZXMoKTogU2FtcGxlU2V0UGVyY2VudGlsZXMge1xuICAgIGlmICh0aGlzLnJlY2FsY3VsYXRlKSB7XG4gICAgICB0aGlzLnJlY2FsY3VsYXRlU3RhdHMoKTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIDA6IHRoaXMudmFsdWVzTnVtZXJpYyA/IHRoaXMubWluIDogdGhpcy5kaWN0aW9uYXJ5W3RoaXMubWluXSxcbiAgICAgIDI1OiB0aGlzLnZhbHVlc051bWVyaWMgPyB0aGlzLnBlcmNlbnRpbGUyNSA6IHRoaXMuZGljdGlvbmFyeVt0aGlzLnBlcmNlbnRpbGUyNV0sXG4gICAgICA1MDogdGhpcy52YWx1ZXNOdW1lcmljID8gdGhpcy5tZWRpYW4gOiB0aGlzLmRpY3Rpb25hcnlbdGhpcy5tZWRpYW5dLFxuICAgICAgNzU6IHRoaXMudmFsdWVzTnVtZXJpYyA/IHRoaXMucGVyY2VudGlsZTc1IDogdGhpcy5kaWN0aW9uYXJ5W3RoaXMucGVyY2VudGlsZTc1XSxcbiAgICAgIDEwMDogdGhpcy52YWx1ZXNOdW1lcmljID8gdGhpcy5tYXggOiB0aGlzLmRpY3Rpb25hcnlbdGhpcy5tYXhdLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBzdGFuZGFyZCBkZXZpYXRpb24gdmFsdWUgb2YgdGhlIFNhbXBsZVNldC4gIEZvciBzdHJpbmdcbiAgICogdmFsdWVzLCB0aGlzIGlzIHRoZSBzdGFuZGFyZCBkZXZpYXRpb24gYWNyb3NzIHRoZSBzaXplIG9mIHRoZVxuICAgKiBTYW1wbGVTZXQgWzAsc2FtcGxlU2V0LmdldE51bVNhbXBsZXMoKS0xXS5cbiAgICpcbiAgICogQHJldHVybnMgbnVtYmVyIC0gQ2FsY3VsYXRlZCBzdGFuZGFyZCBkZXZpYXRpb24gb2YgdGhlIFNhbXBsZVNldFxuICAgKi9cbiAgcHVibGljIGdldFN0ZGRldigpOiBudW1iZXIge1xuICAgIGlmICh0aGlzLnJlY2FsY3VsYXRlKSB7XG4gICAgICB0aGlzLnJlY2FsY3VsYXRlU3RhdHMoKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuc3RkZGV2O1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgY2FsY3VsYXRlZCBkaXN0cmlidXRpb24gYnVja2V0cyBmb3IgdGhlIFNhbXBsZVNldC5cbiAgICpcbiAgICogQHJldHVybnMgZGlzdHJpYnV0aW9uIC0gQXJyYXkgb2YgU2FtcGxlQnVja2V0cyByZXByZXNlbnRpbmcgdGhlIGRpc3RyaWJ1dGlvbiBvZiB0aGUgU2FtcGxlU2V0XG4gICAqL1xuICBwdWJsaWMgZ2V0RGlzdHJpYnV0aW9uKCk6IFNhbXBsZUJ1Y2tldFtdIHtcbiAgICBpZiAodGhpcy5yZWNhbGN1bGF0ZSkge1xuICAgICAgdGhpcy5yZWNhbGN1bGF0ZVN0YXRzKCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmRpc3RyaWJ1dGlvbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIHR5cGUgb2YgdmFsdWVzIGluIHRoZSBTYW1wbGVTZXRcbiAgICpcbiAgICogQHJldHVybnMgdHJ1ZSBpZiBudW1lcmljIHZhbHVlcywgZmFsc2UgaWYgc3RyaW5nIHZhbHVlc1xuICAgKi9cbiAgcHVibGljIGlzTnVtZXJpYygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy52YWx1ZXNOdW1lcmljO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgbnVtYmVyIG9mIHZhbHVlcyBpbiB0aGUgU2FtcGxlU2V0XG4gICAqXG4gICAqIEByZXR1cm5zIG51bWJlciBvZiBzYW1wbGVzIGluIHRoZSBTYW1wbGVTZXRcbiAgICovXG4gIHB1YmxpYyBnZXROdW1TYW1wbGVzKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMudmFsdWVzLmxlbmd0aDtcbiAgfVxuXG4gIHByaXZhdGUgcmVjYWxjdWxhdGVTdGF0cygpIHtcblxuICAgIHRoaXMuY2FsY01lYW4oKTtcbiAgICB0aGlzLmNhbGNWYXJpYW5jZSgpO1xuICAgIHRoaXMuY2FsY0Zyb21Tb3J0ZWRWYWx1ZXMoKTtcblxuICAgIHRoaXMucmVjYWxjdWxhdGUgPSBmYWxzZTtcbiAgfVxuXG4gIHByaXZhdGUgY2FsY01lYW4oKSB7XG4gICAgdGhpcy5tZWFuID0gdGhpcy52YWx1ZXMucmVkdWNlKChzdW0sIHZhbHVlKSA9PiBzdW0rdmFsdWUsIDApIC8gdGhpcy52YWx1ZXMubGVuZ3RoO1xuICAgIHRoaXMubWVhbiA9IHRoaXMudmFsdWVzTnVtZXJpYyA/IHRoaXMubWVhbiA6IE1hdGgucm91bmQodGhpcy5tZWFuKTtcbiAgfVxuXG4gIC8vIENhbGN1bGF0ZXMgdGhlIHZhcmlhbmNlIGFuZCBzdGFuZGFyZCBkZXZpYXRpb25cbiAgLy8gTk9URSAtIHRoaXMgZnVuY3Rpb24gQVNTVU1FUyB0aGF0IHRoZSBtZWFuIGhhcyBhbHJlYWR5IGJlZW4gcmVjYWxjdWxhdGVkXG4gIHByaXZhdGUgY2FsY1ZhcmlhbmNlKCkge1xuICAgIHRoaXMudmFyaWFuY2UgPSB0aGlzLnZhbHVlcy5yZWR1Y2UoKHN1bSwgdmFsdWUpID0+IHN1bSsoKHZhbHVlLXRoaXMubWVhbikqKHZhbHVlLXRoaXMubWVhbikpLCAwKSAvIHRoaXMudmFsdWVzLmxlbmd0aDtcbiAgICB0aGlzLnN0ZGRldiA9IE1hdGguc3FydCh0aGlzLnZhcmlhbmNlKTtcbiAgfVxuXG4gIC8vIENhbGN1bGF0ZXMgbWVkaWFuLCBtb2RlLCBhbmQgZGlzdHJpYnV0aW9uXG4gIHByaXZhdGUgY2FsY0Zyb21Tb3J0ZWRWYWx1ZXMoKSB7XG4gICAgLy8gc29ydCB0aGUgdmFsdWVzXG4gICAgbGV0IHNvcnRlZFZhbHVlczogbnVtYmVyW107XG5cbiAgICBpZiAoIHRoaXMudmFsdWVzTnVtZXJpYyApIHtcbiAgICAgIC8vIHRoZSBkZWZhdWx0IHNvcnQgZnVuY3Rpb24gaXMgYXBwcm9wcmlhdGVcbiAgICAgIHNvcnRlZFZhbHVlcyA9IHRoaXMudmFsdWVzLnRvU29ydGVkKCAoYSwgYikgPT5cbiAgICAgICAgYSA8IGIgP1xuICAgICAgICAgIC0xIDpcbiAgICAgICAgICBhID4gYiA/XG4gICAgICAgICAgICAxIDpcbiAgICAgICAgICAgIDAsXG4gICAgICApO1xuXG4gICAgICB0aGlzLmxvZ2dlcj8udHJhY2UoYFNhbXBsZVNldC5jYWxjRnJvbVNvcnRlZFZhbHVlczogc29ydGVkVmFsdWVzOiAke3NvcnRlZFZhbHVlc31gKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gbmVlZCB0byBzb3J0IGJhc2VkIG9uIGRpY3Rpb25hcnkgbG9va3VwXG4gICAgICBzb3J0ZWRWYWx1ZXMgPSB0aGlzLnZhbHVlcy50b1NvcnRlZCggKGEsIGIpID0+XG4gICAgICAgIHRoaXMuZGljdGlvbmFyeVthXSA8IHRoaXMuZGljdGlvbmFyeVtiXSA/XG4gICAgICAgICAgLTEgOlxuICAgICAgICAgICh0aGlzLmRpY3Rpb25hcnlbYV0gPiB0aGlzLmRpY3Rpb25hcnlbYl0gP1xuICAgICAgICAgICAgMSA6XG4gICAgICAgICAgICAwICksXG4gICAgICApO1xuXG4gICAgICB0aGlzLmxvZ2dlcj8udHJhY2UoYFNhbXBsZVNldC5jYWxjRnJvbVNvcnRlZFZhbHVlczogc29ydGVkVmFsdWVzOiAke3NvcnRlZFZhbHVlcy5tYXAoKHZhbHVlKSA9PiB0aGlzLmRpY3Rpb25hcnlbdmFsdWVdKX1gKTtcbiAgICB9XG5cblxuICAgIC8vIGdldCB0aGUgbWVkaWFuXG4gICAgY29uc3QgbWlkUG9pbnRJbmRleCA9IE1hdGgudHJ1bmMoKHRoaXMudmFsdWVzLmxlbmd0aC0xKS8yKTtcbiAgICB0aGlzLm1lZGlhbiA9IHNvcnRlZFZhbHVlc1ttaWRQb2ludEluZGV4XTtcbiAgICB0aGlzLmxvZ2dlcj8udHJhY2UoYFNhbXBsZVNldC5jYWxjRnJvbVNvcnRlZFZhbHVlczogbWlkUG9pbnRJbmRleDogJHttaWRQb2ludEluZGV4fWApO1xuXG4gICAgLy8gZ2V0IHRoZSBtaW4gYW5kIG1heCB2YWx1ZXNcbiAgICB0aGlzLm1pbiA9IHNvcnRlZFZhbHVlc1swXTtcbiAgICB0aGlzLm1heCA9IHNvcnRlZFZhbHVlc1tzb3J0ZWRWYWx1ZXMubGVuZ3RoLTFdO1xuXG4gICAgLy8gZ2V0IHRoZSBwZXJjZW50aWxlMjUgYW5kIHBlcmNlbnRpbGU1MCB2YWx1ZXNcbiAgICBsZXQgcGVyY2VudGlsZUluZGV4ID0gTWF0aC50cnVuYygodGhpcy52YWx1ZXMubGVuZ3RoLTEpLzQpO1xuICAgIHRoaXMucGVyY2VudGlsZTI1ID0gc29ydGVkVmFsdWVzW3BlcmNlbnRpbGVJbmRleF07XG4gICAgcGVyY2VudGlsZUluZGV4ID0gTWF0aC50cnVuYygodGhpcy52YWx1ZXMubGVuZ3RoLTEpKigzLzQpKTtcbiAgICB0aGlzLnBlcmNlbnRpbGU3NSA9IHNvcnRlZFZhbHVlc1twZXJjZW50aWxlSW5kZXhdO1xuXG4gICAgLy8gY3JlYXRlIHRoZSBkaXN0cmlidXRpb24gaGlzdG9ncmFtL3RhYmxlXG4gICAgdGhpcy5kaXN0cmlidXRpb24gPSBbXTtcbiAgICBpZiAoIHRoaXMudmFsdWVzTnVtZXJpYyApIHtcbiAgICAgIC8vIGluIHRoaXMgY2FzZSwgY3JlYXRlIGJ1Y2tldHMgb2YgZXF1YWwgc2l6ZSB3aGljaCBzcGFuIHRoZSByYW5nZSBbbWluLCBtYXgpXG4gICAgICAvLyBhbmQgY291bnQgdGhlIG51bWJlciBvZiB2YWx1ZXMgaW4gZWFjaCByYW5nZVxuXG4gICAgICAvLyBVc2UgdGhlIHNxcnQobnVtU2FtcGxlcykgcnVsZSBvZiB0aHVtYiBmb3IgY2FsY3VsYXRpbmcgdGhlIG51bWJlciBvZiBidWNrZXRzXG4gICAgICBjb25zdCBudW1CdWNrZXRzOiBudW1iZXIgPSBNYXRoLnRydW5jKE1hdGguc3FydCh0aGlzLnZhbHVlcy5sZW5ndGgpKzEpO1xuICAgICAgY29uc3QgYnVja2V0U2l6ZTogbnVtYmVyID0gKHRoaXMubWF4LXRoaXMubWluKS9udW1CdWNrZXRzO1xuXG4gICAgICBsZXQgY3VycmVudE1pbjogbnVtYmVyID0gc29ydGVkVmFsdWVzWzBdO1xuICAgICAgbGV0IGN1cnJlbnRNYXg6IG51bWJlciA9IGN1cnJlbnRNaW4gKyBidWNrZXRTaXplO1xuICAgICAgaWYgKGN1cnJlbnRNYXggPT09IHRoaXMubWF4KSB7XG4gICAgICAgIC8vIFZFUlkgdW5saWtlbHkgLSBidXQganVzdCBpbiBjYXNlLCBhZGQgYSB2ZXJ5IHNtYWxsIGFtb3VudCBzbyBhcyBub3QgdG8gaGF2ZSBhXG4gICAgICAgIC8vIGJ1Y2tldCBvZiBvbmUgd2l0aCBvbmx5IHRoZSBtYXggdmFsdWUgYXQgdGhlIGVuZC5cbiAgICAgICAgY3VycmVudE1heCArPSAxZS0xMDtcbiAgICAgIH1cbiAgICAgIGxldCBjb3VudDogbnVtYmVyID0gMDtcblxuICAgICAgZm9yIChsZXQgaT0wOyBpPHNvcnRlZFZhbHVlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAoc29ydGVkVmFsdWVzW2ldID49IGN1cnJlbnRNaW4gJiYgc29ydGVkVmFsdWVzW2ldIDwgY3VycmVudE1heCkge1xuICAgICAgICAgIGNvdW50Kys7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5kaXN0cmlidXRpb24ucHVzaChuZXcgU2FtcGxlQnVja2V0KGN1cnJlbnRNaW4sIGN1cnJlbnRNYXgsIGNvdW50KSk7XG4gICAgICAgICAgY3VycmVudE1pbiArPSBidWNrZXRTaXplO1xuICAgICAgICAgIGN1cnJlbnRNYXggPSBjdXJyZW50TWluK2J1Y2tldFNpemU7XG4gICAgICAgICAgaWYgKGN1cnJlbnRNYXggPT09IHRoaXMubWF4KSB7XG4gICAgICAgICAgICAvLyBWRVJZIHVubGlrZWx5IC0gYnV0IGp1c3QgaW4gY2FzZSwgYWRkIGEgdmVyeSBzbWFsbCBhbW91bnQgc28gYXMgbm90IHRvIGhhdmUgYVxuICAgICAgICAgICAgLy8gYnVja2V0IG9mIG9uZSB3aXRoIG9ubHkgdGhlIG1heCB2YWx1ZSBhdCB0aGUgZW5kLlxuICAgICAgICAgICAgY3VycmVudE1heCArPSAxZS0xMDtcbiAgICAgICAgICB9XG4gICAgICAgICAgY291bnQgPSAxO1xuICAgICAgICB9XG5cbiAgICAgIH1cbiAgICAgIHRoaXMuZGlzdHJpYnV0aW9uLnB1c2gobmV3IFNhbXBsZUJ1Y2tldChjdXJyZW50TWluLCBjdXJyZW50TWF4LCBjb3VudCkpO1xuXG4gICAgICAvLyBudW1CdWNrZXRzIGFuZCBkaXN0cmlidXRpb24ubGVuZ3RoIHNob3VsZCBtYXRjaFxuICAgICAgdGhpcy5sb2dnZXI/LnRyYWNlKGBTYW1wbGVTZXQuY2FsY0Zyb21Tb3J0ZWRWYWx1ZXM6IG51bWVyaWMgZGF0YSwgbnVtQnVja2V0czogJHtudW1CdWNrZXRzfSwgZGlzdHJpYnV0aW9uLmxlbmd0aDogJHt0aGlzLmRpc3RyaWJ1dGlvbi5sZW5ndGh9YCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGluIHRoaXMgY2FzZSwgdGhlIG51bWJlciBvZiBidWNrZXRzIG1hdGNoZXMgdGhlIG51bWJlciBvZiBzdHJpbmdzIGluIHRoZSBTYW1wbGVTZXRcbiAgICAgIC8vIHdoaWNoIGlzIHRoZSBzaXplIG9mIHRoZSBkaWN0aW9uYXJ5XG5cbiAgICAgIGxldCBjdXJyZW50VmFsdWU6IG51bWJlciA9IHNvcnRlZFZhbHVlc1swXTtcbiAgICAgIGxldCBjb3VudDogbnVtYmVyID0gMDtcblxuICAgICAgZm9yIChsZXQgaT0wOyBpPHNvcnRlZFZhbHVlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAoc29ydGVkVmFsdWVzW2ldID09PSBjdXJyZW50VmFsdWUpIHtcbiAgICAgICAgICBjb3VudCsrO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuZGlzdHJpYnV0aW9uLnB1c2gobmV3IFNhbXBsZUJ1Y2tldChjdXJyZW50VmFsdWUsIGN1cnJlbnRWYWx1ZSwgY291bnQpKTtcbiAgICAgICAgICBjdXJyZW50VmFsdWUgPSBzb3J0ZWRWYWx1ZXNbaV07XG4gICAgICAgICAgY291bnQgPSAxO1xuICAgICAgICB9XG5cbiAgICAgIH1cbiAgICAgIHRoaXMuZGlzdHJpYnV0aW9uLnB1c2gobmV3IFNhbXBsZUJ1Y2tldChjdXJyZW50VmFsdWUsIGN1cnJlbnRWYWx1ZSwgY291bnQpKTtcblxuICAgICAgLy8gZGljdGlvbmFyeS5sZW5ndGggYW5kIGRpc3RyaWJ1dGlvbi5sZW5ndGggc2hvdWxkIG1hdGNoXG4gICAgICB0aGlzLmxvZ2dlcj8udHJhY2UoYFNhbXBsZVNldC5jYWxjRnJvbVNvcnRlZFZhbHVlczogc3RyaW5nIGRhdGEsIGRpY3Rpb25hcnkubGVuZ3RoOiAke3RoaXMuZGljdGlvbmFyeS5sZW5ndGh9LCBkaXN0cmlidXRpb24ubGVuZ3RoOiAke3RoaXMuZGlzdHJpYnV0aW9uLmxlbmd0aH1gKTtcbiAgICAgIHRoaXMubG9nZ2VyPy50cmFjZShgU2FtcGxlU2V0LmNhbGNGcm9tU29ydGVkVmFsdWVzOiBkaWN0aW9uYXJ5OiAke3RoaXMuZGljdGlvbmFyeX1gKTtcbiAgICB9XG5cbiAgICB0aGlzLmxvZ2dlcj8udHJhY2UoYFNhbXBsZVNldC5jYWxjRnJvbVNvcnRlZFZhbHVlczogbnVtZXJpYzogJHt0aGlzLnZhbHVlc051bWVyaWN9LCBkaXN0cmlidXRpb24gZGV0YWlsczogJHtKU09OLnN0cmluZ2lmeSh0aGlzLmRpc3RyaWJ1dGlvbiwgbnVsbCwgMil9YCk7XG5cbiAgICAvLyBjYWxjdWxhdGUgdGhlIG1vZGVcbiAgICBjb25zdCBtYXhEaXN0cmlidXRpb25CdWNrZXRJbmRleCA9IHRoaXMuZGlzdHJpYnV0aW9uLnJlZHVjZShcbiAgICAgIChjdXJNYXhJbmRleCwgYnVja2V0LCBpbmRleCkgPT4gYnVja2V0LmNvdW50ID4gdGhpcy5kaXN0cmlidXRpb25bY3VyTWF4SW5kZXhdLmNvdW50ID8gaW5kZXggOiBjdXJNYXhJbmRleCxcbiAgICAgIDAsXG4gICAgKTtcbiAgICBpZiAoIHRoaXMudmFsdWVzTnVtZXJpYyApIHtcbiAgICAgIHRoaXMubW9kZSA9IHRoaXMuZGlzdHJpYnV0aW9uW21heERpc3RyaWJ1dGlvbkJ1Y2tldEluZGV4XS5taW4gK1xuICAgICAgICAodGhpcy5kaXN0cmlidXRpb25bbWF4RGlzdHJpYnV0aW9uQnVja2V0SW5kZXhdLm1heCAtIHRoaXMuZGlzdHJpYnV0aW9uW21heERpc3RyaWJ1dGlvbkJ1Y2tldEluZGV4XS5taW4pLzI7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubW9kZSA9IHRoaXMuZGlzdHJpYnV0aW9uW21heERpc3RyaWJ1dGlvbkJ1Y2tldEluZGV4XS5taW47XG4gICAgfVxuXG4gICAgdGhpcy5sb2dnZXI/LnRyYWNlKGBTYW1wbGVTZXQuY2FsY0Zyb21Tb3J0ZWRWYWx1ZXM6IG1vZGU6ICR7dGhpcy5tb2RlfWApO1xuXG4gIH1cblxufVxuIl19
package/package.json CHANGED
@@ -54,7 +54,7 @@
54
54
  },
55
55
  "main": "lib/index.js",
56
56
  "license": "MIT",
57
- "version": "0.0.1",
57
+ "version": "0.0.3",
58
58
  "jest": {
59
59
  "coverageProvider": "v8",
60
60
  "testMatch": [