@annalib/anna-core 25.2.7 → 25.2.8

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.
@@ -205,9 +205,9 @@ export class AnnaFilterService {
205
205
  "ActualRate",
206
206
  "Impressions",
207
207
  "AURKeyLY",
208
- "InvFillLY",
208
+ "SellOutPercentLY",
209
209
  "AURKeyTY",
210
- "InvFillTY",
210
+ "SellOutPercentTY",
211
211
  ];
212
212
  const calendarArr = [
213
213
  "period",
@@ -1337,4 +1337,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
1337
1337
  providedIn: "root",
1338
1338
  }]
1339
1339
  }], ctorParameters: function () { return [{ type: i1.AnnaDateTimeFormatService }, { type: i2.AnnaSortService }]; } });
1340
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5uYS1maWx0ZXIuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FubmEtY29yZS9zcmMvbGliL2FubmEtY29yZS1zaGFyZWQtbGliL3NlcnZpY2VzL2FubmEtZmlsdGVyLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsNEJBQTRCO0FBQzVCLE9BQU8sRUFBYyxVQUFVLEVBQWEsTUFBTSxlQUFlLENBQUM7QUFFbEUsT0FBTyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBQzFCLE9BQU8saUJBQWlCLE1BQU0sZ0NBQWdDLENBQUM7QUFDL0QsT0FBTyxTQUFTLE1BQU0sd0JBQXdCLENBQUM7QUFDL0MsT0FBTyxNQUFNLE1BQU0scUJBQXFCLENBQUM7QUFDekMsZ0NBQWdDO0FBQ2hDLE9BQU8sRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFFNUUsT0FBTyxFQUFZLFlBQVksRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ25FLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUM1RCxpQ0FBaUM7QUFDakMsT0FBTyxFQUFFLHlCQUF5QixFQUFlLE1BQU0saUNBQWlDLENBQUM7QUFDekYsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFCQUFxQixDQUFDOzs7O0FBS3RELE1BQU0sT0FBTyxpQkFBaUI7YUFzQ1osZUFBVSxHQUFHLEVBQUUsQUFBTCxDQUFNO0lBSzlCLFlBQ1kscUJBQWdELEVBQ2hELGVBQWdDO1FBRGhDLDBCQUFxQixHQUFyQixxQkFBcUIsQ0FBMkI7UUFDaEQsb0JBQWUsR0FBZixlQUFlLENBQWlCO1FBNUM1QyxlQUFVLEdBQUcsSUFBSSxHQUFHLEVBQUUsQ0FBQztRQUN2Qix1QkFBa0IsR0FBRyxJQUFJLEdBQUcsRUFBRSxD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VSxHQUFHLEdBQUcsSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDO3FCQUN0RTtpQkFDSjtxQkFBTTtvQkFDSCxNQUFNLElBQUksR0FBRywwQkFBMEIsR0FBRyx5QkFBeUIsQ0FBQztvQkFDcEUsSUFBSSxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTt3QkFDM0MsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxVQUFVLEdBQUcsR0FBRyxJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUM7cUJBQ3RFO29CQUVELElBQUksZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7d0JBQzNDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsVUFBVSxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUM7cUJBQy9EO2lCQUNKO2FBQ0o7UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7K0dBamhEUSxpQkFBaUI7bUhBQWpCLGlCQUFpQixjQUZkLE1BQU07OzRGQUVULGlCQUFpQjtrQkFIN0IsVUFBVTttQkFBQztvQkFDUixVQUFVLEVBQUUsTUFBTTtpQkFDckIiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBBbmd1bGFyIGltcG9ydCBzdGF0ZW1lbnRzXHJcbmltcG9ydCB7IEVsZW1lbnRSZWYsIEluamVjdGFibGUsIFF1ZXJ5TGlzdCB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7IE9wdGlvbnMgfSBmcm9tIFwiQGFuZ3VsYXItc2xpZGVyL25neC1zbGlkZXJcIjtcclxuaW1wb3J0IGRheWpzIGZyb20gXCJkYXlqc1wiO1xyXG5pbXBvcnQgQ3VzdG9tUGFyc2VGb3JtYXQgZnJvbSBcImRheWpzL3BsdWdpbi9jdXN0b21QYXJzZUZvcm1hdFwiO1xyXG5pbXBvcnQgaXNCZXR3ZWVuIGZyb20gXCJkYXlqcy9wbHVnaW4vaXNCZXR3ZWVuXCI7XHJcbmltcG9ydCBtaW5NYXggZnJvbSBcImRheWpzL3BsdWdpbi9taW5NYXhcIjtcclxuLy8gVGhpcmQgcGFydHkgaW1wb3J0IHN0YXRlbWVudHNcclxuaW1wb3J0IHsgY2xvbmVEZWVwLCBpc0VxdWFsLCBtYXAsIG1heCwgbWluLCBzb3J0QnksIHVuaXEgfSBmcm9tIFwibG9kYXNoLWVzXCI7XHJcblxyXG5pbXBvcnQgeyBTb3J0VHlwZSwgU29ydFR5cGVFbnVtIH0gZnJvbSBcIi4uL21vZGVscy9hbm5hLXNvcnQubW9kZWxcIjtcclxuaW1wb3J0IHsgVG9vbHRpcE1vZGVsIH0gZnJvbSBcIi4uL21vZGVscy9hbm5hLXRvb2x0aXAubW9kZWxcIjtcclxuLy8gVXNlciBkZWZpbmVkIGltcG9ydCBzdGF0ZW1lbnRzXHJcbmltcG9ydCB7IEFubmFEYXRlVGltZUZvcm1hdFNlcnZpY2UsIE5nYkRhdGVUeXBlIH0gZnJvbSBcIi4vYW5uYS1kYXRlLXRpbWUtZm9ybWF0LnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgQW5uYVNvcnRTZXJ2aWNlIH0gZnJvbSBcIi4vYW5uYS1zb3J0LnNlcnZpY2VcIjtcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICAgIHByb3ZpZGVkSW46IFwicm9vdFwiLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgQW5uYUZpbHRlclNlcnZpY2Uge1xyXG4gICAgdG9vbHRpcE1hcCA9IG5ldyBNYXAoKTtcclxuICAgIHRvb2x0aXBTZWxlY3RlZE1hcCA9IG5ldyBNYXAoKTtcclxuICAgIGluaXRpYWxWYWx1ZU1hcDogTWFwPHN0cmluZywgYW55PjtcclxuICAgIHRyYW5zbGF0ZUZ1bmM6IHN0cmluZztcclxuICAgIHNlbGVjdGVkUmFkaW86IHN0cmluZztcclxuICAgIHN1YlJhZGlvQnV0dG9uOiBzdHJpbmc7XHJcblxyXG4gICAgY2FsZW5kYXJTZXQ6IFNldDxzdHJpbmc+O1xyXG4gICAgc2xpZGVyU2V0OiBTZXQ8c3RyaW5nPjtcclxuICAgIHRpbWVTZXQ6IFNldDxzdHJpbmc+O1xyXG5cclxuICAgIGluY2x1ZGVNdWx0aVRpbWU6IGJvb2xlYW47XHJcbiAgICBpbmNsdWRlWmVyb1RpbWU6IGJvb2xlYW47XHJcbiAgICBpbmNsdWRlVGltZVJhbmdlOiBib29sZWFuO1xyXG5cclxuICAgIGFwcGxpZWRGaWx0ZXJzQXJyYXk6IHN0cmluZ1tdID0gW107XHJcbiAgICBmbGlnaHREYXRlUmFuZ2U6IHsgbWluU2VsZWN0ZWREYXRlOiBhbnk7IG1heFNlbGVjdGVkRGF0ZTogYW55IH07XHJcbiAgICBzbGlkZXJEYXRhOiB7IG1pbjogYW55OyBtYXg6IGFueSB9O1xyXG4gICAgbmd4U2xpZGVyT2JqOiBPcHRpb25zO1xyXG4gICAgc2xpZGVyQ3VycmVuY3lTZXQgPSBuZXcgU2V0KFtcclxuICAgICAgICBcImJvb2tlZFwiLFxyXG4gICAgICAgIFwiY3BwXCIsXHJcbiAgICAgICAgXCJjcG1cIixcclxuICAgICAgICBcInJjdlByZWVtcHRcIixcclxuICAgICAgICBcIm9zUHJlZW1wdFwiLFxyXG4gICAgICAgIFwicG9zdGVkQWR1XCIsXHJcbiAgICAgICAgXCJzY2hlZHVsZWRBZHVcIixcclxuICAgICAgICBcImF1ZGllbmNlRGVmaWNpdFwiLFxyXG4gICAgICAgIFwiUmF0ZVwiLFxyXG4gICAgICAgIFwidXNlckFEVXNcIixcclxuICAgICAgICBcImJ1eWVyQ2hhbmdlc1wiLFxyXG4gICAgICAgIFwidXNlckNoYW5nZXNcIixcclxuICAgICAgICBcInVzZXJNR1wiLFxyXG4gICAgICAgIFwidWRWYWx1ZVwiLFxyXG4gICAgICAgIFwib2RWYWx1ZVwiLFxyXG4gICAgXSk7XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyBidWZmZXJTaXplID0gMjA7XHJcbiAgICBpc0ZpbHRlclNvcnRBY3RpdmU6IGFueSA9IHt9O1xyXG4gICAgcmVzZXRGaWx0ZXJTb3J0QWN0aXZlU3RhdHVzOiBib29sZWFuID0gdHJ1ZTtcclxuICAgIG51bGxUb0JlRm9ybWF0ZWRJbnRvU3RyaW5nID0gXCItXCI7XHJcblxyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgcHJpdmF0ZSBkYXRlVGltZUZvcm1hdFNlcnZpY2U6IEFubmFEYXRlVGltZUZvcm1hdFNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBhbm5hU29ydFNlcnZpY2U6IEFubmFTb3J0U2VydmljZSxcclxuICAgICkge1xyXG4gICAgICAgIGRheWpzLmV4dGVuZChtaW5NYXgpO1xyXG4gICAgICAgIGRheWpzLmV4dGVuZChpc0JldHdlZW4pO1xyXG4gICAgICAgIGRheWpzLmV4dGVuZChDdXN0b21QYXJzZUZvcm1hdCk7XHJcbiAgICAgICAgY29uc3Qgc2xpZGVyQXJyID0gW1xyXG4gICAgICAgICAgICBcInJjdlByZWVtcHRcIixcclxuICAgICAgICAgICAgXCJvc1ByZWVtcHRcIixcclxuICAgICAgICAgICAgXCJyY3ZVbmRlckRseVwiLFxyXG4gICAgICAgICAgICBcInBvc3RlZEF1ZFBlcmNlbnRcIixcclxuICAgICAgICAgICAgXCJib29rZWRcIixcclxuICAgICAgICAgICAgXCJzcG90c1wiLFxyXG4gICAgICAgICAgICBcImdycFwiLFxyXG4gICAgICAgICAgICBcImF2ZXJhZ2VSYXRlVGhpc1llYXJcIixcclxuICAgICAgICAgICAgXCJhdmVyYWdlUmF0ZUxhc3RZZWFyXCIsXHJcbiAgICAgICAgICAgIFwiYXZlcmFnZUNQUFwiLFxyXG4gICAgICAgICAgICBcImF2ZXJhZ2VDUE1cIixcclxuICAgICAgICAgICAgXCJJTVBTRGlmZlwiLFxyXG4gICAgICAgICAgICBcIlJUR0RpZmZcIixcclxuICAgICAgICAgICAgXCJjcHBcIixcclxuICAgICAgICAgICAgXCJpbXBzXCIsXHJcbiAgICAgICAgICAgIFwiY3BtXCIsXHJcbiAgICAgICAgICAgIFwib3NVbmRlckRseVwiLFxyXG4gICAgICAgICAgICBcInRvdGFsV2Vla3NcIixcclxuICAgICAgICAgICAgXCJXZWVrTnVtYmVyXCIsXHJcbiAgICAgICAgICAgIFwiUmF0ZVwiLFxyXG4gICAgICAgICAgICBcIk9yZGVyZWRSYXRpbmdzT3JJbXByZXNzaW9uc1wiLFxyXG4gICAgICAgICAgICBcIlBvc3RlZFJhdGluZ3NPckltcHJlc3Npb25zXCIsXHJcbiAgICAgICAgICAgIFwicG9zdGVkQXVkUGVyY2VudFwiLFxyXG4gICAgICAgICAgICBcInBvc3RlZEFkdVwiLFxyXG4gICAgICAgICAgICBcInNjaGVkdWxlZEFkdVwiLFxyXG4gICAgICAgICAgICBcImF1ZGllbmNlRGVmaWNpdFwiLFxyXG4gICAgICAgICAgICBcIm9mZmVyZWRNR3NcIixcclxuICAgICAgICAgICAgXCJvdXRzdGFuZGluZ1BFXCIsXHJcbiAgICAgICAgICAgIFwib2ZmZXJlZEFEVXNcIixcclxuICAgICAgICAgICAgXCJ1ZERlZmljaXRWYWx1ZVwiLFxyXG4gICAgICAgICAgICBcImJvb2tlZFZhbHVlXCIsXHJcbiAgICAgICAgICAgIFwiYm9va2VkU3BvdHNcIixcclxuICAgICAgICAgICAgXCJ1c2VyQ2hhbmdlc1wiLFxyXG4gICAgICAgICAgICBcIlVER3JwXCIsXHJcbiAgICAgICAgICAgIFwiVURJbXBzXCIsXHJcbiAgICAgICAgICAgIFwiT0RHcnBcIixcclxuICAgICAgICAgICAgXCJPREltcHNcIixcclxuICAgICAgICAgICAgXCJ1ZEltcHNQZXJjZW50XCIsXHJcbiAgICAgICAgICAgIFwidWRHcnBQZXJjZW50XCIsXHJcbiAgICAgICAgICAgIFwib2RJbXBzUGVyY2VudFwiLFxyXG4gICAgICAgICAgICBcIm9kR3JwUGVyY2VudFwiLFxyXG4gICAgICAgICAgICBcInVzZXJBRFVzXCIsXHJcbiAgICAgICAgICAgIFwiYnV5ZXJDaGFuZ2VzXCIsXHJcbiAgICAgICAgICAgIFwidXNlckNoYW5nZXNcIixcclxuICAgICAgICAgICAgXCJ1c2VyTUdcIixcclxuICAgICAgICAgICAgXCJXZWVrbHlBVVJcIixcclxuICAgICAgICAgICAgXCJXZWVrbHlBVVJhdGluZ09ySW1wcmVzc2lvbnNcIixcclxuICAgICAgICAgICAgXCJNR3NWYWx1ZVwiLFxyXG4gICAgICAgICAgICBcIkFEVXNWYWx1ZVwiLFxyXG4gICAgICAgICAgICBcIlVzZXJDcmVkaXRlZFZhbHVlXCIsXHJcbiAgICAgICAgICAgIFwiVXNlclVucmVzb2x2ZWRWYWx1ZVwiLFxyXG4gICAgICAgICAgICBcIkJ1eWVyQWRkZWRWYWx1ZVwiLFxyXG4gICAgICAgICAgICBcIkJ1eWVyRGVsZXRlZFZhbHVlXCIsXHJcbiAgICAgICAgICAgIFwiQnV5ZXJDaGFuZ2VzVmFsdWVcIixcclxuICAgICAgICAgICAgXCJVc2VyQ2hhbmdlc1ZhbHVlXCIsXHJcbiAgICAgICAgICAgIFwiQm9va2VkR1JQT3JJTVBTXCIsXHJcbiAgICAgICAgICAgIFwiQm9va2VkQ1BQT3JDUE1cIixcclxuICAgICAgICAgICAgXCJCb29rZWRWYWx1ZVwiLFxyXG4gICAgICAgICAgICBcIkJvb2tlZFNwb3RzXCIsXHJcbiAgICAgICAgICAgIFwiQm9va2VkUmF0ZVwiLFxyXG4gICAgICAgICAgICBcImF2ZXJhZ2VSYXRlXCIsXHJcbiAgICAgICAgICAgIFwicHJvamVjdGVkSU1QU1wiLFxyXG4gICAgICAgICAgICBcInByb2plY3RlZFJUR1wiLFxyXG4gICAgICAgICAgICBcImRlc2lyZWRDUE1cIixcclxuICAgICAgICAgICAgXCJkZXNpcmVkQ1BQXCIsXHJcbiAgICAgICAgICAgIFwiaW52ZW50b3J5RmlsbFBlcmNlbnRhZ2VTYW1lV2Vla1wiLFxyXG4gICAgICAgICAgICBcImludmVudG9yeUZpbGxQZXJjZW50YWdlRmluYWxcIixcclxuICAgICAgICAgICAgXCJpbnZlbnRvcnlGaWxsUGVyY2VudGFnZVRpbGxEYXRlXCIsXHJcbiAgICAgICAgICAgIFwiZG9sbGFyUmF0ZUltcGFjdFwiLFxyXG4gICAgICAgICAgICBcImRvbGxhcklNUFNJbXBhY3RcIixcclxuICAgICAgICAgICAgXCJJTVBTSW1wYWN0XCIsXHJcbiAgICAgICAgICAgIFwiZG9sbGFyUlRHSW1wYWN0XCIsXHJcbiAgICAgICAgICAgIFwiUlRHSW1wYWN0XCIsXHJcbiAgICAgICAgICAgIFwiQm9va2VkUlRHXCIsXHJcbiAgICAgICAgICAgIFwiQm9va2VkSU1QU1wiLFxyXG4gICAgICAgICAgICBcIkFVUlRHXCIsXHJcbiAgICAgICAgICAgIFwiQVVSVEdcIixcclxuICAgICAgICAgICAgXCJQb3N0ZWRSYXRpbmdcIixcclxuICAgICAgICAgICAgXCJQb3N0ZWRJbXByZXNzaW9uc1wiLFxyXG4gICAgICAgICAgICBcIk5vcm1hbGl6ZWRPcmRlcmVkUmF0aW5nXCIsXHJcbiAgICAgICAgICAgIFwiTm9ybWFsaXplZE9yZGVyZWRJbXByZXNzaW9uc1wiLFxyXG4gICAgICAgICAgICBcIk5vcm1hbGl6ZWRQb3N0ZWRSYXRpbmdcIixcclxuICAgICAgICAgICAgXCJOb3JtYWxpemVkUG9zdGVkSW1wcmVzc2lvbnNcIixcclxuICAgICAgICAgICAgXCJCb29rZWRHUlBcIixcclxuICAgICAgICAgICAgXCJCb29rZWRJTVBTUmV2VGFiXCIsXHJcbiAgICAgICAgICAgIFwiQm9va2VkQ1BQXCIsXHJcbiAgICAgICAgICAgIFwiQm9va2VkQ1BNXCIsXHJcbiAgICAgICAgICAgIFwiQVVJTVBTXCIsXHJcbiAgICAgICAgICAgIFwiYm9va2VkQW1vdW50VmFsdWVcIixcclxuICAgICAgICAgICAgXCJlcXVpdmFsaXplZEJvb2tlZEFtb3VudFZhbHVlXCIsXHJcbiAgICAgICAgICAgIFwiSU1QU1wiLFxyXG4gICAgICAgICAgICBcInVkVmFsdWVcIixcclxuICAgICAgICAgICAgXCJvZFZhbHVlXCIsXHJcbiAgICAgICAgICAgIFwiVmlvbGF0ZWRCb29rZWRWYWx1ZVwiLFxyXG4gICAgICAgICAgICBcIlZpb2xhdGVkQm9va2VkRVVSVmFsdWVcIixcclxuICAgICAgICAgICAgXCJWaW9sYXRpbmdCb29rZWRFVVJWYWx1ZVwiLFxyXG4gICAgICAgICAgICBcIlZpb2xhdGluZ0Jvb2tlZFZhbHVlXCIsXHJcbiAgICAgICAgICAgIFwiUmViYXRlXCIsXHJcbiAgICAgICAgICAgIFwiV2Vla2x5QVVSXCIsXHJcbiAgICAgICAgICAgIFwiT3RoZXJBdmFpbGFibGVTcG90c1RhYmxlV2Vla2x5QVVSXCIsXHJcbiAgICAgICAgICAgIFwicGFyZW50Um93QW5uYUVzdGltYXRlc1J0Z1wiLFxyXG4gICAgICAgICAgICBcInBhcmVudFJvd1Bvc3RlZFJ0Z1wiLFxyXG4gICAgICAgICAgICBcInBhcmVudFJvd1JvbGxpbmdBdmVyYWdlUnRnXCIsXHJcbiAgICAgICAgICAgIFwicGFyZW50Um93U3RhdGlvbkVzdGltYXRlc1J0Z1wiLFxyXG4gICAgICAgICAgICBcInBhcmVudFJvd0FubmFFc3RpbWF0ZXNJbXBzXCIsXHJcbiAgICAgICAgICAgIFwicGFyZW50Um93UG9zdGVkSW1wc1wiLFxyXG4gICAgICAgICAgICBcInBhcmVudFJvd1JvbGxpbmdBdmVyYWdlSW1wc1wiLFxyXG4gICAgICAgICAgICBcInBhcmVudFJvd1N0YXRpb25Fc3RpbWF0ZXNJbXBzXCIsXHJcbiAgICAgICAgICAgIFwicGFyZW50Um93QW5uYUVzdGltYXRlc1NoYXJlXCIsXHJcbiAgICAgICAgICAgIFwicGFyZW50Um93UG9zdGVkU2hhcmVcIixcclxuICAgICAgICAgICAgXCJwYXJlbnRSb3dSb2xsaW5nQXZlcmFnZVNoYXJlXCIsXHJcbiAgICAgICAgICAgIFwicGFyZW50Um93QW5uYUVzdGltYXRlc1B1dFBlclwiLFxyXG4gICAgICAgICAgICBcInBhcmVudFJvd1Bvc3RlZFB1dFBlclwiLFxyXG4gICAgICAgICAgICBcInBhcmVudFJvd1JvbGxpbmdBdmVyYWdlUHV0UGVyXCIsXHJcbiAgICAgICAgICAgIFwicGFyZW50Um93QW5uYUVzdGltYXRlc1B1dFwiLFxyXG4gICAgICAgICAgICBcInBhcmVudFJvd1Bvc3RlZFB1dFwiLFxyXG4gICAgICAgICAgICBcInBhcmVudFJvd1JvbGxpbmdBdmVyYWdlUHV0XCIsXHJcbiAgICAgICAgICAgIFwiUHJvamVjdGVkSW1wcmVzc2lvbnNcIixcclxuICAgICAgICAgICAgXCJQcm9qZWN0ZWRSdGdcIixcclxuICAgICAgICAgICAgXCJwcm9qZWN0ZWRDUE1cIixcclxuICAgICAgICAgICAgXCJwcm9qZWN0ZWRDUFBcIixcclxuICAgICAgICAgICAgXCJib29rZWRFcUNwbVZhbHVlXCIsXHJcbiAgICAgICAgICAgIFwiYm9va2VkRXFDcHBWYWx1ZVwiLFxyXG4gICAgICAgICAgICBcIlJhdGluZ1wiLFxyXG4gICAgICAgICAgICBcIkFjdHVhbFJhdGVcIixcclxuICAgICAgICAgICAgXCJJbXByZXNzaW9uc1wiLFxyXG4gICAgICAgICAgICBcIkFVUktleUxZXCIsXHJcbiAgICAgICAgICAgIFwiSW52RmlsbExZXCIsXHJcbiAgICAgICAgICAgIFwiQVVSS2V5VFlcIixcclxuICAgICAgICAgICAgXCJJbnZGaWxsVFlcIixcclxuICAgICAgICBdO1xyXG4gICAgICAgIGNvbnN0IGNhbGVuZGFyQXJyID0gW1xyXG4gICAgICAgICAgICBcInBlcmlvZFwiLFxyXG4gICAgICAgICAgICBcIkFpckRhdGVcIixcclxuICAgICAgICAgICAgXCJmbGlnaHRTdGFydERhdGVcIixcclxuICAgICAgICAgICAgXCJmbGlnaHRFbmREYXRlXCIsXHJcbiAgICAgICAgICAgIFwiZGF0ZVwiLFxyXG4gICAgICAgICAgICBcInN0YXJ0RGF0ZVwiLFxyXG4gICAgICAgICAgICBcImVuZERhdGVcIixcclxuICAgICAgICAgICAgXCJyZXZpc2lvblN0YXJ0RGF0ZVwiLFxyXG4gICAgICAgICAgICBcIkdlbmVyYXRlZE9uXCIsXHJcbiAgICAgICAgICAgIFwiV2Vla1wiLFxyXG4gICAgICAgICAgICBcInRpbWVvdXREYXRlXCIsXHJcbiAgICAgICAgICAgIFwiVmlvbGF0aW5nU3BvdERhdGVcIixcclxuICAgICAgICAgICAgXCJWaW9sYXRlZFNwb3REYXRlXCIsXHJcbiAgICAgICAgICAgIFwiQWN0dWFsV2Vla1N0YXJ0RGF0ZVwiLFxyXG4gICAgICAgIF07XHJcbiAgICAgICAgY29uc3QgdGltZUFyciA9IFtcclxuICAgICAgICAgICAgXCJTdGFydFRpbWVGb3JGaWx0ZXJcIixcclxuICAgICAgICAgICAgXCJFbmRUaW1lRm9yRmlsdGVyXCIsXHJcbiAgICAgICAgICAgIFwidGltZVwiLFxyXG4gICAgICAgICAgICBcInN0YXJ0VGltZUZvckZpbHRlclwiLFxyXG4gICAgICAgICAgICBcImVuZFRpbWVGb3JGaWx0ZXJcIixcclxuICAgICAgICAgICAgXCJzdGFydF90aW1lX2Zvcl9maWx0ZXJcIixcclxuICAgICAgICAgICAgXCJlbmRfdGltZV9mb3JfZmlsdGVyXCIsXHJcbiAgICAgICAgICAgIFwic3RhcnRFbmRUaW1lTXVsdGlcIixcclxuICAgICAgICAgICAgXCJzdGFydEVuZFRpbWVcIixcclxuICAgICAgICAgICAgXCJ0aW1lb3V0VGltZVwiLFxyXG4gICAgICAgICAgICBcIk90aGVyQXZhaWxhYmxlU3BvdHNUYWJsZVN0YXJ0VGltZVwiLFxyXG4gICAgICAgICAgICBcIk90aGVyQXZhaWxhYmxlU3BvdHNUYWJsZUVuZFRpbWVcIixcclxuICAgICAgICAgICAgXCJTdGFydFRpbWVcIixcclxuICAgICAgICAgICAgXCJFbmRUaW1lXCIsXHJcbiAgICAgICAgXTtcclxuICAgICAgICB0aGlzLnNsaWRlclNldCA9IG5ldyBTZXQoc2xpZGVyQXJyKTtcclxuICAgICAgICB0aGlzLmNhbGVuZGFyU2V0ID0gbmV3IFNldChjYWxlbmRhckFycik7XHJcbiAgICAgICAgdGhpcy50aW1lU2V0ID0gbmV3IFNldCh0aW1lQXJyKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm5NYXhBbmRNaW5WYWx1ZShkYXRhOiBhbnlbXSwga2V5OiBzdHJpbmcsIGlzTWluOiBib29sZWFuKSB7XHJcbiAgICAgICAgY29uc3QgZmlsdGVyZWREYXRhID0gZGF0YS5maWx0ZXIoKG9iaikgPT4gIVtcIlwiLCBcIi1cIiwgbnVsbF0uaW5jbHVkZXMob2JqW2tleV0pKTtcclxuICAgICAgICBjb25zdCB2YWx1ZXMgPSBmaWx0ZXJlZERhdGEubWFwKCh4KSA9PiB4W2tleV0pO1xyXG4gICAgICAgIGNvbnN0IHZhbHVlVG9SZXR1cm4gPSBpc01pbiA/IG1pbih2YWx1ZXMpIDogbWF4KHZhbHVlcyk7XHJcbiAgICAgICAgcmV0dXJuIHZhbHVlVG9SZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuTWluQW5kTWF4RGF0ZShkYXRhOiBhbnlbXSwga2V5OiBzdHJpbmcpIHtcclxuICAgICAgICBjb25zdCBmaWx0ZXJlZERhdGEgPSBkYXRhLmZpbHRlcigob2JqKSA9PiAhW1wiXCIsIFwiLVwiLCBudWxsXS5pbmNsdWRlcyhvYmpba2V5XSkpO1xyXG4gICAgICAgIGNvbnN0IERhdGVBcnIgPSBmaWx0ZXJlZERhdGEubWFwKChvYmopID0+IGRheWpzKG9ialtrZXldKSk7XHJcbiAgICAgICAgY29uc3QgbWluRGF0ZSA9IGRheWpzLm1pbihEYXRlQXJyKTtcclxuICAgICAgICBjb25zdCBtYXhEYXRlID0gZGF5anMubWF4KERhdGVBcnIpO1xyXG5cclxuICAgICAgICByZXR1cm4gW21pbkRhdGUsIG1heERhdGVdO1xyXG4gICAgfVxyXG5cclxuICAgIGlzVG9vbHRpcEFjdGl2ZShoZWFkZXI6IHN0cmluZ1tdLCBzb3J0TWFwOiBNYXA8c3RyaW5nLCBTb3J0VHlwZT4pOiBib29sZWFuIHtcclxuICAgICAgICBjb25zdCBzZXQ6IFNldDxzdHJpbmc+ID0gbmV3IFNldCh0aGlzLmFwcGxpZWRGaWx0ZXJzQXJyYXkpO1xyXG4gICAgICAgIGNvbnN0IGlzU29ydE1hcEZvckhlYWRlcjBBY3RpdmUgPSBzb3J0TWFwLmhhcyhoZWFkZXJbMF0pICYmIHNvcnRNYXAuZ2V0KGhlYWRlclswXSkgIT09IFNvcnRUeXBlRW51bS5ERUZBVUxUO1xyXG4gICAgICAgIGNvbnN0IGlzU29ydE1hcEZvckhlYWRlcjFBY3RpdmUgPSBzb3J0TWFwLmhhcyhoZWFkZXJbMV0pICYmIHNvcnRNYXAuZ2V0KGhlYWRlclsxXSkgIT09IFNvcnRUeXBlRW51bS5ERUZBVUxUO1xyXG5cclxuICAgICAgICBpZiAoaGVhZGVyLmxlbmd0aCA9PT0gMSkge1xyXG4gICAgICAgICAgICByZXR1cm4gKHNvcnRNYXAuc2l6ZSA+IDAgJiYgaXNTb3J0TWFwRm9ySGVhZGVyMEFjdGl2ZSkgfHwgc2V0LmhhcyhoZWFkZXJbMF0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgKHNvcnRNYXAuc2l6ZSA+IDAgJiYgc29ydE1hcC5oYXMoaGVhZGVyWzBdKSAmJiBpc1NvcnRNYXBGb3JIZWFkZXIwQWN0aXZlKSB8fFxyXG4gICAgICAgICAgICAoc29ydE1hcC5zaXplID4gMCAmJiBzb3J0TWFwLmhhcyhoZWFkZXJbMV0pICYmIGlzU29ydE1hcEZvckhlYWRlcjFBY3RpdmUpIHx8XHJcbiAgICAgICAgICAgIHNldC5oYXMoaGVhZGVyWzBdKSB8fFxyXG4gICAgICAgICAgICBzZXQuaGFzKGhlYWRlclsxXSlcclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGNsZWFyQ29sdW1uRmlsdGVyKCkge1xyXG4gICAgICAgIGlmICh0aGlzLnRvb2x0aXBTZWxlY3RlZE1hcC5oYXModGhpcy5zZWxlY3RlZFJhZGlvKSkge1xyXG4gICAgICAgICAgICB0aGlzLnRvb2x0aXBTZWxlY3RlZE1hcC5kZWxldGUodGhpcy5zZWxlY3RlZFJhZGlvKTtcclxuICAgICAgICAgICAgY29uc3QgYXBwbGllZEZpbHRlclNldDogU2V0PHN0cmluZz4gPSBuZXcgU2V0KHRoaXMuYXBwbGllZEZpbHRlcnNBcnJheSk7XHJcbiAgICAgICAgICAgIGFwcGxpZWRGaWx0ZXJTZXQuZGVsZXRlKHRoaXMuc2VsZWN0ZWRSYWRpbyk7XHJcbiAgICAgICAgICAgIHRoaXMuYXBwbGllZEZpbHRlcnNBcnJheSA9IFsuLi5hcHBsaWVkRmlsdGVyU2V0XTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmFubmFTb3J0U2VydmljZS5jb2x1bW5Tb3J0U3RhdGUuaGFzKHRoaXMuc2VsZWN0ZWRSYWRpbykpIHtcclxuICAgICAgICAgICAgdGhpcy5hbm5hU29ydFNlcnZpY2UuY29sdW1uU29ydFN0YXRlLmRlbGV0ZSh0aGlzLnNlbGVjdGVkUmFkaW8pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBzZXRPcHRpb25WYWx1ZXMobWluVmFsdWU6IG51bWJlciwgbWF4VmFsdWU6IG51bWJlcikge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIGZsb29yOiBtaW5WYWx1ZSxcclxuICAgICAgICAgICAgY2VpbDogbWF4VmFsdWUsXHJcbiAgICAgICAgICAgIGRpc2FibGVkOiB0cnVlLFxyXG4gICAgICAgICAgICB0cmFuc2xhdGU6IHRoaXMubm9ybWFsVHJhbnNsYXRlRnVuY3Rpb24sXHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICBwZXJjZW50VHJhbnNsYXRlRnVuY3Rpb24gPSAoZGF0YTogbnVtYmVyKTogc3RyaW5nID0+IHtcclxuICAgICAgICBpZiAoTWF0aC5hYnMoZGF0YSkgPj0gMTAwMCkge1xyXG4gICAgICAgICAgICBjb25zdCBpc05lZ1ZhbCA9IGRhdGEgPCAwO1xyXG4gICAgICAgICAgICBjb25zdCB2YWwgPSBgJHsoTWF0aC5hYnMoZGF0YSkgLyAxMDAwKS50b0ZpeGVkKDEpfWslYDtcclxuICAgICAgICAgICAgcmV0dXJuIGlzTmVnVmFsID8gYC0ke3ZhbH1gIDogdmFsO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBpc05lZ1ZhbCA9IGRhdGEgPCAwO1xyXG4gICAgICAgIGNvbnN0IGlzV2hvbGVOdW0gPSBwYXJzZUludChkYXRhLnRvU3RyaW5nKCksIDEwKSA9PT0gZGF0YTtcclxuICAgICAgICBjb25zdCB2YWwgPSBpc1dob2xlTnVtID8gTWF0aC5hYnMoZGF0YSkudG9TdHJpbmcoKSA6IE1hdGguYWJzKGRhdGEpLnRvRml4ZWQoMSk7XHJcbiAgICAgICAgcmV0dXJuIGlzTmVnVmFsID8gYC0ke3ZhbH0lYCA6IGAke3ZhbH0lYDtcclxuICAgIH07XHJcblxyXG4gICAgY3VycmVuY3lUcmFuc2xhdGVGdW5jdGlvbiA9IChkYXRhOiBudW1iZXIpOiBzdHJpbmcgPT4ge1xyXG4gICAgICAgIGlmIChNYXRoLmFicyhkYXRhKSA+PSAxMDAwKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGlzTmVnVmFsID0gZGF0YSA8IDA7XHJcbiAgICAgICAgICAgIGNvbnN0IHZhbCA9IGAkJHsoTWF0aC5hYnMoZGF0YSkgLyAxMDAwKS50b0ZpeGVkKDEpfWtgO1xyXG4gICAgICAgICAgICByZXR1cm4gaXNOZWdWYWwgPyBgLSR7dmFsfWAgOiB2YWw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGlzTmVnVmFsID0gZGF0YSA8IDA7XHJcbiAgICAgICAgY29uc3QgaXNXaG9sZU51bSA9IHBhcnNlSW50KGRhdGEudG9TdHJpbmcoKSwgMTApID09PSBkYXRhO1xyXG4gICAgICAgIGNvbnN0IHZhbCA9IGlzV2hvbGVOdW0gPyBNYXRoLmFicyhkYXRhKS50b1N0cmluZygpIDogTWF0aC5hYnMoZGF0YSkudG9GaXhlZCgxKTtcclxuICAgICAgICByZXR1cm4gaXNOZWdWYWwgPyBgLSQke3ZhbH1gIDogYCQke3ZhbH1gO1xyXG4gICAgfTtcclxuXHJcbiAgICBub3JtYWxUcmFuc2xhdGVGdW5jdGlvbiA9IChkYXRhOiBudW1iZXIpOiBzdHJpbmcgPT4ge1xyXG4gICAgICAgIGlmIChkYXRhID49IDEwMDApIHtcclxuICAgICAgICAgICAgY29uc3QgdmFsID0gYCR7KGRhdGEgLyAxMDAwKS50b0ZpeGVkKDEpfWtgO1xyXG4gICAgICAgICAgICByZXR1cm4gdmFsO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoZGF0YSAhPT0gTWF0aC5mbG9vcihkYXRhKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gZGF0YS50b0ZpeGVkKDEpLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBkYXRhLnRvU3RyaW5nKCk7XHJcbiAgICB9O1xyXG5cclxuICAgIGZpbmRVbmlxdWVEYXRlc1dpdGhEYXRhKGRhdGE6IGFueVtdKSB7XHJcbiAgICAgICAgY29uc3QgdW5pcXVlRGF0ZXMgPSB1bmlxKGRhdGEubWFwKCh1KSA9PiB1LmRhdGUpKTtcclxuICAgICAgICBjb25zdCB1bmlxdWVEYXRlc0luTmdiRGF0ZUZvcm1hdDogTmdiRGF0ZVR5cGVbXSA9IFtdO1xyXG4gICAgICAgIHVuaXF1ZURhdGVzLmZvckVhY2goKGRhdGU6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICB1bmlxdWVEYXRlc0luTmdiRGF0ZUZvcm1hdC5wdXNoKFxyXG4gICAgICAgICAgICAgICAgdGhpcy5kYXRlVGltZUZvcm1hdFNlcnZpY2UuY29udmVydFRvTmdiRGF0ZVN0YW5kYXJkRm9ybWF0KGRheWpzKGRhdGUsIFwiTU0vREQvWVlcIikuZm9ybWF0KFwiTU0vREQvWVlZWVwiKSksXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIHVuaXF1ZURhdGVzSW5OZ2JEYXRlRm9ybWF0O1xyXG4gICAgfVxyXG5cclxuICAgIHJlT3JkZXJBcHBsaWVkRmlsdGVyc0FycmF5KGlzSGllcmFyY2hpYWxVc2VyRmlsdGVyZWQ6IGJvb2xlYW4sIGRhdGU/OiBhbnkpIHtcclxuICAgICAgICBsZXQgaXNGaWx0ZXJlZCA9IHRydWU7XHJcbiAgICAgICAgaXNGaWx0ZXJlZCA9IHRoaXMuY2hlY2tJZkRhdGFJc0ZpbHRlcmVkKGlzRmlsdGVyZWQsIGlzSGllcmFyY2hpYWxVc2VyRmlsdGVyZWQsIGRhdGUpO1xyXG4gICAgICAgIHRoaXMucmVtb3ZlT3JDaGFuZ2VMYXRlc3RGaWx0ZXJJbmRleChpc0ZpbHRlcmVkKTtcclxuICAgIH1cclxuXHJcbiAgICBjaGVja0lmRGF0YUlzRmlsdGVyZWQoaXNGaWx0ZXJlZDogYm9vbGVhbiwgaXNIaWVyYXJjaGlhbFVzZXJGaWx0ZXJlZDogYm9vbGVhbiwgZGF0ZT86IGFueSkge1xyXG4gICAgICAgIGxldCBpc0RhdGFGaWx0ZXJlZCA9IGlzRmlsdGVyZWQ7XHJcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRSYWRpbyA9PT0gXCJ1c2VyXCIgJiYgIXRoaXMudG9vbHRpcE1hcC5oYXMoXCJ1c2VyXCIpKSB7XHJcbiAgICAgICAgICAgIGlzRGF0YUZpbHRlcmVkID0gY2xvbmVEZWVwKGlzSGllcmFyY2hpYWxVc2VyRmlsdGVyZWQpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoXHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRSYWRpbyA9PT0gXCJTdGFydFRpbWVGb3JGaWx0ZXJcIiB8fFxyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkUmFkaW8gPT09IFwiRW5kVGltZUZvckZpbHRlclwiIHx8XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRSYWRpbyA9PT0gXCJzdGFydFRpbWVGb3JGaWx0ZXJcIiB8fFxyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkUmFkaW8gPT09IFwiZW5kVGltZUZvckZpbHRlclwiIHx8XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRSYWRpbyA9PT0gXCJ0aW1lXCIgfHxcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFJhZGlvID09PSBcInRpbWVvdXRUaW1lXCIgfHxcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFJhZGlvID09PSBcIk90aGVyQXZhaWxhYmxlU3BvdHNUYWJsZVN0YXJ0VGltZVwiIHx8XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRSYWRpbyA9PT0gXCJPdGhlckF2YWlsYWJsZVNwb3RzVGFibGVFbmRUaW1lXCIgfHxcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFJhZGlvID09PSBcInN0YXJ0X3RpbWVfZm9yX2ZpbHRlclwiIHx8XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRSYWRpbyA9PT0gXCJlbmRfdGltZV9mb3JfZmlsdGVyXCIgfHxcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFJhZGlvID09PSBcInN0YXJ0RW5kVGltZU11bHRpXCJcclxuICAgICAgICApIHtcclxuICAgICAgICAgICAgaXNEYXRhRmlsdGVyZWQgPVxyXG4gICAgICAgICAgICAgICAgIWlzRXF1YWwoXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pbml0aWFsVmFsdWVNYXAuZ2V0KHRoaXMuc2VsZWN0ZWRSYWRpbyksXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50b29sdGlwU2VsZWN0ZWRNYXAuZ2V0KHRoaXMuc2VsZWN0ZWRSYWRpbyksXHJcbiAgICAgICAgICAgICAgICApIHx8XHJcbiAgICAgICAgICAgICAgICAhdGhpcy5pbmNsdWRlWmVyb1RpbWUgfHxcclxuICAgICAgICAgICAgICAgICF0aGlzLmluY2x1ZGVNdWx0aVRpbWU7XHJcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLnNlbGVjdGVkUmFkaW8gPT09IFwic3RhcnRFbmRUaW1lXCIgfHwgdGhpcy5zZWxlY3RlZFJhZGlvID09PSBcIlRpbWVCYW5kXCIpIHtcclxuICAgICAgICAgICAgaXNEYXRhRmlsdGVyZWQgPVxyXG4gICAgICAgICAgICAgICAgIWlzRXF1YWwoXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pbml0aWFsVmFsdWVNYXAuZ2V0KHRoaXMuc2VsZWN0ZWRSYWRpbyksXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50b29sdGlwU2VsZWN0ZWRNYXAuZ2V0KHRoaXMuc2VsZWN0ZWRSYWRpbyksXHJcbiAgICAgICAgICAgICAgICApIHx8XHJcbiAgICAgICAgICAgICAgICAhdGhpcy5pbmNsdWRlWmVyb1RpbWUgfHxcclxuICAgICAgICAgICAgICAgICF0aGlzLmluY2x1ZGVNdWx0aVRpbWU7XHJcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLnNsaWRlclNldC5oYXModGhpcy5zZWxlY3RlZFJhZGlvKSkge1xyXG4gICAgICAgICAgICBpc0RhdGFGaWx0ZXJlZCA9XHJcbiAgICAgICAgICAgICAgICAhaXNFcXVhbChcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmluaXRpYWxWYWx1ZU1hcC5nZXQodGhpcy5zZWxlY3RlZFJhZGlvKSxcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnRvb2x0aXBTZWxlY3RlZE1hcC5nZXQodGhpcy5zZWxlY3RlZFJhZGlvKSxcclxuICAgICAgICAgICAgICAgICkgJiYgIWlzRXF1YWwodGhpcy50b29sdGlwU2VsZWN0ZWRNYXAuZ2V0KHRoaXMuc2VsZWN0ZWRSYWRpbyksIHRoaXMuc2xpZGVyRGF0YSk7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGVkUmFkaW8gPT09IFwicG9zdGVkQWR1XCIgJiYgdGhpcy5zdWJSYWRpb0J1dHRvbiA9PT0gXCJub3RSZXF1aXJlZFwiKSB7XHJcbiAgICAgICAgICAgICAgICBpc0RhdGFGaWx0ZXJlZCA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKCFpc0RhdGFGaWx0ZXJlZCAmJiB0aGlzLnRvb2x0aXBTZWxlY3RlZE1hcC5oYXModGhpcy5zZWxlY3RlZFJhZGlvKSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy50b29sdGlwU2VsZWN0ZWRNYXAuZGVsZXRlKHRoaXMuc2VsZWN0ZWRSYWRpbyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2UgaWYgKFxyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkUmFkaW8gPT09IFwic3RhcnREYXRlXCIgfHxcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFJhZGlvID09PSBcImVuZERhdGVcIiB8fFxyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkUmFkaW8gPT09IFwicGVyaW9kXCIgfHxcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFJhZGlvID09PSBcIkFpckRhdGVcIiB8fFxyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkUmFkaW8gPT09IFwidGltZW91dERhdGVcIiB8fFxyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkUmFkaW8gPT09IFwiZmxpZ2h0U3RhcnREYXRlXCIgfHxcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFJhZGlvID09PSBcImZsaWdodEVuZERhdGVcIiB8fFxyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkUmFkaW8gPT09IFwiZGF0ZVwiIHx8XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRSYWRpbyA9PT0gXCJyZXZpc2lvblN0YXJ0RGF0ZVwiIHx8XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRSYWRpbyA9PT0gXCJHZW5lcmF0ZWRPblwiIHx8XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRSYWRpbyA9PT0gXCJXZWVrXCIgfHxcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFJhZGlvID09PSBcIkFjdHVhbFdlZWtTdGFydERhdGVcIlxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgICBpc0RhdGFGaWx0ZXJlZCA9XHJcbiAgICAgICAgICAgICAgICAhaXNFcXVhbChcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmluaXRpYWxWYWx1ZU1hcC5nZXQodGhpcy5zZWxlY3RlZFJhZGlvKSxcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnRvb2x0aXBTZWxlY3RlZE1hcC5nZXQodGhpcy5zZWxlY3RlZFJhZGlvKSxcclxuICAgICAgICAgICAgICAgICkgJiYgIWlzRXF1YWwodGhpcy50b29sdGlwU2VsZWN0ZWRNYXAuZ2V0KHRoaXMuc2VsZWN0ZWRSYWRpbyksIHRoaXMuZmxpZ2h0RGF0ZVJhbmdlKTtcclxuICAgICAgICAgICAgaWYgKCFpc0RhdGFGaWx0ZXJlZCAmJiB0aGlzLnRvb2x0aXBTZWxlY3RlZE1hcC5oYXModGhpcy5zZWxlY3RlZFJhZGlvKSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy50b29sdGlwU2VsZWN0ZWRNYXAuZGVsZXRlKHRoaXMuc2VsZWN0ZWRSYWRpbyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBjb25zdCB0b3RhbE9wdGlvbnNDb3VudCA9IHRoaXMudG9vbHRpcE1hcC5nZXQodGhpcy5zZWxlY3RlZFJhZGlvKS5maWx0ZXIoKHg6IGFueSkgPT4gIXguaXNIaWRkZW4pLmxlbmd0aDtcclxuICAgICAgICAgICAgY29uc3Qgc2VsZWN0ZWRPcHRpb25zQ291bnQgPSB0aGlzLnRvb2x0aXBNYXBcclxuICAgICAgICAgICAgICAgIC5nZXQodGhpcy5zZWxlY3RlZFJhZGlvKVxyXG4gICAgICAgICAgICAgICAgLmZpbHRlcigoeDogYW55KSA9PiAheC5pc0hpZGRlbiAmJiB4LmlzU2VsZWN0ZWQpLmxlbmd0aDtcclxuICAgICAgICAgICAgaXNEYXRhRmlsdGVyZWQgPSBzZWxlY3RlZE9wdGlvbnNDb3VudCA+IDAgJiYgc2VsZWN0ZWRPcHRpb25zQ291bnQgIT09IHRvdGFsT3B0aW9uc0NvdW50O1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gaXNEYXRhRmlsdGVyZWQ7XHJcbiAgICB9XHJcblxyXG4gICAgcmVtb3ZlT3JDaGFuZ2VMYXRlc3RGaWx0ZXJJbmRleChpc0ZpbHRlcmVkOiBib29sZWFuKSB7XHJcbiAgICAgICAgY29uc3Qgc2V0ID0gbmV3IFNldCh0aGlzLmFwcGxpZWRGaWx0ZXJzQXJyYXkpO1xyXG5cclxuICAgICAgICBpZiAoaXNGaWx0ZXJlZCAmJiAhc2V0Lmhhcyh0aGlzLnNlbGVjdGVkUmFkaW8pKSB7XHJcbiAgICAgICAgICAgIHNldC5hZGQodGhpcy5zZWxlY3RlZFJhZGlvKTtcclxuICAgICAgICB9IGVsc2UgaWYgKGlzRmlsdGVyZWQgJiYgc2V0Lmhhcyh0aGlzLnNlbGVjdGVkUmFkaW8pKSB7XHJcbiAgICAgICAgICAgIHNldC5kZWxldGUodGhpcy5zZWxlY3RlZFJhZGlvKTtcclxuICAgICAgICAgICAgc2V0LmFkZCh0aGlzLnNlbGVjdGVkUmFkaW8pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHNldC5kZWxldGUodGhpcy5zZWxlY3RlZFJhZGlvKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5hcHBsaWVkRmlsdGVyc0FycmF5ID0gWy4uLnNldF07XHJcbiAgICB9XHJcblxyXG4gICAgY2hlY2tJZlNvcnRpbmdJc0FwcGxpZWRUaGVuU29ydFRoZURhdGEob3JpZ2luYWxEYXRhOiBhbnlbXSkge1xyXG4gICAgICAgIGxldCBzb3J0ZWREYXRhID0gb3JpZ2luYWxEYXRhO1xyXG4gICAgICAgIGlmICghdGhpcy5hbm5hU29ydFNlcnZpY2U/LmNvbHVtblNvcnRTdGF0ZSkgcmV0dXJuIHNvcnRlZERhdGE7XHJcbiAgICAgICAgdGhpcy5hbm5hU29ydFNlcnZpY2UuY29sdW1uU29ydFN0YXRlLmZvckVhY2goKHZhbHVlLCBrZXkpID0+IHtcclxuICAgICAgICAgICAgaWYgKHZhbHVlID09PSBcIkFTQ1wiKSB7XHJcbiAgICAgICAgICAgICAgICBzb3J0ZWREYXRhID0gY2xvbmVEZWVwKFxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYW5uYVNvcnRTZXJ2aWNlLnNvcnREYXRhRm9yQ29tcG9uZW50T3RoZXJUaGFuTHVyQW5kQ3NyUGFnZSh0cnVlLCBvcmlnaW5hbERhdGEsIGtleSksXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHZhbHVlID09PSBcIkRFU0NcIikge1xyXG4gICAgICAgICAgICAgICAgc29ydGVkRGF0YSA9IGNsb25lRGVlcChcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmFubmFTb3J0U2VydmljZS5zb3J0RGF0YUZvckNvbXBvbmVudE90aGVyVGhhbkx1ckFuZENzclBhZ2UoZmFsc2UsIG9yaWdpbmFsRGF0YSwga2V5KSxcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHNvcnRlZERhdGE7XHJcbiAgICB9XHJcblxyXG4gICAgZmlsdGVyRGF0YShvcmlnaW5hbERhdGE6IGFueVtdLCBrZXlUb1NraXA6IHN0cmluZywgaXNMdXJDc3JQYWdlOiBib29sZWFuID0gZmFsc2UpIHtcclxuICAgICAgICBsZXQgZmlsdGVyZWREYXRhID0gWy4uLm9yaWdpbmFsRGF0YV07XHJcbiAgICAgICAgaWYgKCFpc0x1ckNzclBhZ2UpIHtcclxuICAgICAgICAgICAgZmlsdGVyZWREYXRhID0gdGhpcy5jaGVja0lmU29ydGluZ0lzQXBwbGllZFRoZW5Tb3J0VGhlRGF0YShvcmlnaW5hbERhdGEpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnRvb2x0aXBTZWxlY3RlZE1hcC5mb3JFYWNoKCh2YWx1ZSwga2V5KSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChrZXkgIT09IGtleVRvU2tpcCAmJiBvcmlnaW5hbERhdGEubGVuZ3RoID4gMCAmJiBPYmplY3Qua2V5cyhvcmlnaW5hbERhdGFbMF0pLmluY2x1ZGVzKGtleSkpIHtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLnNsaWRlclNldC5oYXMoa2V5KSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGZpbHRlcmVkRGF0YSA9IGZpbHRlcmVkRGF0YS5maWx0ZXIoKG9iaikgPT4gb2JqW2tleV0gPj0gdmFsdWUubWluICYmIG9ialtrZXldIDw9IHZhbHVlLm1heCk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKFxyXG4gICAgICAgICAgICAgICAgICAgIGtleSA9PT0gXCJzdGFydERhdGVcIiB8fFxyXG4gICAgICAgICAgICAgICAgICAgIGtleSA9PT0gXCJlbmREYXRlXCIgfHxcclxuICAgICAgICAgICAgICAgICAgICBrZXkgPT09IFwiU3RhcnREYXRlXCIgfHxcclxuICAgICAgICAgICAgICAgICAgICBrZXkgPT09IFwiRW5kRGF0ZVwiIHx8XHJcbiAgICAgICAgICAgICAgICAgICAga2V5ID09PSBcIkFpckRhdGVcIiB8fFxyXG4gICAgICAgICAgICAgICAgICAgIGtleSA9PT0gXCJ0aW1lb3V0RGF0ZVwiIHx8XHJcbiAgICAgICAgICAgICAgICAgICAga2V5ID09PSBcImZsaWdodFN0YXJ0RGF0ZVwiIHx8XHJcbiAgICAgICAgICAgICAgICAgICAga2V5ID09PSBcImZsaWdodEVuZERhdGVcIiB8fFxyXG4gICAgICAgICAgICAgICAgICAgIGtleSA9PT0gXCJkYXRlXCIgfHxcclxuICAgICAgICAgICAgICAgICAgICBrZXkgPT09IFwiRGF0ZVwiIHx8XHJcbiAgICAgICAgICAgICAgICAgICAga2V5ID09PSBcInJldmlzaW9uU3RhcnREYXRlXCIgfHxcclxuICAgICAgICAgICAgICAgICAgICBrZXkgPT09IFwiR2VuZXJhdGVkT25cIiB8fFxyXG4gICAgICAgICAgICAgICAgICAgIGtleSA9PT0gXCJXZWVrXCIgfHxcclxuICAgICAgICAgICAgICAgICAgICBrZXkgPT09IFwiQWN0dWFsV2Vla1N0YXJ0RGF0ZVwiIHx8XHJcbiAgICAgICAgICAgICAgICAgICAga2V5ID09PSBcIlZpb2xhdGVkU3BvdERhdGVcIiB8fFxyXG4gICAgICAgICAgICAgICAgICAgIGtleSA9PT0gXCJWaW9sYXRpbmdTcG90RGF0ZVwiXHJcbiAgICAgICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgICAgICBmaWx0ZXJlZERhdGEgPSBmaWx0ZXJlZERhdGEuZmlsdGVyKChvYmopID0+IHRoaXMuaXNPYmplY3RJblRoZVJhbmdlKG9iaiwgdmFsdWUsIGtleSkpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChrZXkgPT09IFwicGVyaW9kXCIpIHtcclxuICAgICAgICAgICAgICAgICAgICBmaWx0ZXJlZERhdGEgPSBmaWx0ZXJlZERhdGEuZmlsdGVyKChvYmopID0+IHRoaXMuZ2V0RGF0YUluVGhlRGF0ZVJhbmdlKG9iaiwgdmFsdWUsIGtleSkpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChcclxuICAgICAgICAgICAgICAgICAgICBrZXkgPT09IFwiU3RhcnRUaW1lRm9yRmlsdGVyXCIgfHxcclxuICAgICAgICAgICAgICAgICAgICBrZXkgPT09IFwiRW5kVGltZUZvckZpbHRlclwiIHx8XHJcbiAgICAgICAgICAgICAgICAgICAga2V5ID09PSBcInRpbWVvdXRUaW1lXCIgfHxcclxuICAgICAgICAgICAgICAgICAgICBrZXkgPT09IFwic3RhcnRUaW1lRm9yRmlsdGVyXCIgfHxcclxuICAgICAgICAgICAgICAgICAgICBrZXkgPT09IFwiZW5kVGltZUZvckZpbHRlclwiIHx8XHJcbiAgICAgICAgICAgICAgICAgICAga2V5ID09PSBcIlN0YXJ0VGltZVwiIHx8XHJcbiAgICAgICAgICAgICAgICAgICAga2V5ID09PSBcIkVuZFRpbWVcIiB8fFxyXG4gICAgICAgICAgICAgICAgICAgIGtleSA9PT0gXCJzdGFydF90aW1lX2Zvcl9maWx0ZXJcIiB8fFxyXG4gICAgICAgICAgICAgICAgICAgIGtleSA9PT0gXCJlbmRfdGltZV9mb3JfZmlsdGVyXCIgfHxcclxuICAgICAgICAgICAgICAgICAgICBrZXkgPT09IFwidGltZVwiXHJcbiAgICAgICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgICAgICBmaWx0ZXJlZERhdGEgPSBmaWx0ZXJlZERhdGEuZmlsdGVyKChvYmopID0+IHRoaXMucmV0dXJuRGF0YUZvckZyb21BbmRUb1RpbWVSYW5nZShvYmosIHZhbHVlLCBrZXkpKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoa2V5ID09PSBcInN0YXJ0RW5kVGltZU11bHRpXCIgfHwga2V5ID09PSBcInN0YXJ0RW5kVGltZVwiIHx8IGtleSA9PT0gXCJUaW1lQmFuZFwiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZmlsdGVyZWREYXRhID0gZmlsdGVyZWREYXRhLmZpbHRlcigob2JqKSA9PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJldHVybkRhdGFGb3JTdGFydEFuZEVuZFRpbWVSYW5nZShvYmosIHZhbHVlLCBrZXkpLFxyXG4gICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHZhbHVlLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICBmaWx0ZXJlZERhdGEgPSBmaWx0ZXJlZERhdGEuZmlsdGVyKCh1KSA9PiB2YWx1ZS5pbmNsdWRlcyh1W2tleV0pKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiBmaWx0ZXJlZERhdGE7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuT3JkZXJzSW5UaGVSYW5nZShvcmRlcjogYW55LCByYW5nZTogYW55LCBrZXk6IGFueSkge1xyXG4gICAgICAgIGNvbnN0IGlzRGF0ZUJldHdlZW5UaGVTZWxlY3RlZFJhbmdlID0gZGF5anMob3JkZXJba2V5XSkuaXNCZXR3ZWVuKHJhbmdlLm1pblNlbGVjdGVkRGF0ZSwgcmFuZ2UubWF4U2VsZWN0ZWREYXRlKTtcclxuICAgICAgICBjb25zdCBpc0RhdGVTYW1lQXNUaGVNaW5TZWxlY3RlZERhdGUgPSBkYXlqcyhvcmRlcltrZXldKS5pc1NhbWUocmFuZ2UubWluU2VsZWN0ZWREYXRlKTtcclxuICAgICAgICBjb25zdCBpc0RhdGVTYW1lQXNUaGVNYXhTZWxlY3RlZERhdGUgPSBkYXlqcyhvcmRlcltrZXldKS5pc1NhbWUocmFuZ2UubWF4U2VsZWN0ZWREYXRlKTtcclxuICAgICAgICByZXR1cm4gaXNEYXRlQmV0d2VlblRoZVNlbGVjdGVkUmFuZ2UgfHwgaXNEYXRlU2FtZUFzVGhlTWluU2VsZWN0ZWREYXRlIHx8IGlzRGF0ZVNhbWVBc1RoZU1heFNlbGVjdGVkRGF0ZTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm5EYXRhRm9yVGltZVJhbmdlKG9iajogYW55LCBzZWxlY3RlZERhdGE6IGFueSkge1xyXG4gICAgICAgIGNvbnN0IGZvcm1hdCA9IFwiSEg6bW06c3NcIjtcclxuICAgICAgICBjb25zdCBzZWxlY3RlZFN0YXJ0RGF0ZSA9IGRheWpzKHNlbGVjdGVkRGF0YS5zdGFydFRpbWUsIGZvcm1hdCk7XHJcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRFbmREYXRlID0gZGF5anMoc2VsZWN0ZWREYXRhLmVuZFRpbWUsIGZvcm1hdCk7XHJcbiAgICAgICAgY29uc3Qgc3RhcnRUaW1lID0gZGF5anMob2JqLnN0YXJ0VGltZSwgZm9ybWF0KTtcclxuICAgICAgICBjb25zdCBlbmRUaW1lID0gZGF5anMob2JqLmVuZFRpbWUsIGZvcm1hdCk7XHJcblxyXG4gICAgICAgIGNvbnN0IGlzU3RhcnRUaW1lU2FtZUFzU2VsZWN0ZWRTdGFydFRpbWUgPSBzdGFydFRpbWUuaXNTYW1lKHNlbGVjdGVkU3RhcnREYXRlKTtcclxuICAgICAgICBjb25zdCBpc1N0YXJ0VGltZUJldHdlZW5TZWxlY3RlZFN0YXJ0QW5kRW5kVGltZSA9IHN0YXJ0VGltZS5pc0JldHdlZW4oc2VsZWN0ZWRTdGFydERhdGUsIHNlbGVjdGVkRW5kRGF0ZSk7XHJcbiAgICAgICAgY29uc3QgaXNFbmRUaW1lU2FtZUFzU2VsZWN0ZWRFbmRUaW1lID0gZW5kVGltZS5pc1NhbWUoc2VsZWN0ZWRFbmREYXRlKTtcclxuICAgICAgICBjb25zdCBpc0VuZFRpbWVCZXR3ZWVuU2VsZWN0ZWRTdGFydEFuZEVuZFRpbWUgPSBlbmRUaW1lLmlzQmV0d2VlbihzZWxlY3RlZFN0YXJ0RGF0ZSwgc2VsZWN0ZWRFbmREYXRlKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgKGlzU3RhcnRUaW1lQmV0d2VlblNlbGVjdGVkU3RhcnRBbmRFbmRUaW1lICYmIGlzRW5kVGltZUJldHdlZW5TZWxlY3RlZFN0YXJ0QW5kRW5kVGltZSkgfHxcclxuICAgICAgICAgICAgKGlzU3RhcnRUaW1lU2FtZUFzU2VsZWN0ZWRTdGFydFRpbWUgJiYgaXNFbmRUaW1lU2FtZUFzU2VsZWN0ZWRFbmRUaW1lKSB8fFxyXG4gICAgICAgICAgICAoaXNTdGFydFRpbWVTYW1lQXNTZWxlY3RlZFN0YXJ0VGltZSAmJiBpc0VuZFRpbWVCZXR3ZWVuU2VsZWN0ZWRTdGFydEFuZEVuZFRpbWUpIHx8XHJcbiAgICAgICAgICAgIChpc1N0YXJ0VGltZUJldHdlZW5TZWxlY3RlZFN0YXJ0QW5kRW5kVGltZSAmJiBpc0VuZFRpbWVTYW1lQXNTZWxlY3RlZEVuZFRpbWUpXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm5EYXRhRm9yRnJvbUFuZFRvVGltZVJhbmdlKG9iajogYW55LCBzZWxlY3RlZERhdGE6IGFueSwga2V5OiBhbnkpIHtcclxuICAgICAgICBjb25zdCBmb3JtYXQgPSBcIk1NL0REL1lZWVkgSEg6bW06c3NcIjtcclxuICAgICAgICBjb25zdCBzZWxlY3RlZEZyb21UaW1lID0gZGF5anMoYDAxLzAxLzIwMDEgJHtzZWxlY3RlZERhdGEuZnJvbVRpbWV9YCwgZm9ybWF0KTtcclxuICAgICAgICBjb25zdCBzZWxlY3RlZFRvVGltZSA9IGRheWpzKGAwMS8wMS8yMDAxICR7c2VsZWN0ZWREYXRhLnRvVGltZX1gLCBmb3JtYXQpO1xyXG4gICAgICAgIGNvbnN0IG9ialRpbWUgPSBvYmpba2V5XTtcclxuXHJcbiAgICAgICAgaWYgKFtcIlwiLCBcIi1cIiwgbnVsbF0uaW5jbHVkZXMob2JqVGltZSkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoc2VsZWN0ZWREYXRhLmluY2x1ZGVNdWx0aSAmJiBvYmpba2V5XSA9PT0gXCI8bXVsdGk+XCIpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghc2VsZWN0ZWREYXRhLmluY2x1ZGVNdWx0aSAmJiBvYmpba2V5XSA9PT0gXCI8bXVsdGk+XCIpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoc2VsZWN0ZWREYXRhLmluY2x1ZGVaZXJvICYmIG9ialtrZXldID09PSBcIjBcIikge1xyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFzZWxlY3RlZERhdGEuaW5jbHVkZVplcm8gJiYgb2JqW2tleV0gPT09IFwiMFwiKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFzZWxlY3RlZERhdGEuaW5jbHVkZVRpbWVSYW5nZSkge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBkYXlqc1RpbWUgPSBkYXlqcyhgMDEvMDEvMjAwMSAke29ialRpbWV9YCwgZm9ybWF0KTtcclxuXHJcbiAgICAgICAgY29uc3QgaXNPYmpUaW1lU2FtZUFzU2VsZWN0ZWRGcm9tVGltZSA9IGRheWpzVGltZS5pc1NhbWUoc2VsZWN0ZWRGcm9tVGltZSk7XHJcbiAgICAgICAgY29uc3QgaXNPYmpUaW1lU2FtZUFzU2VsZWN0ZWRUb1RpbWUgPSBkYXlqc1RpbWUuaXNTYW1lKHNlbGVjdGVkVG9UaW1lKTtcclxuICAgICAgICBjb25zdCBpc09ialRpbWVCZXR3ZWVuU2VsZWN0ZWRGcm9tVGltZUFuZFRvVGltZSA9IGRheWpzVGltZS5pc0JldHdlZW4oc2VsZWN0ZWRGcm9tVGltZSwgc2VsZWN0ZWRUb1RpbWUpO1xyXG5cclxuICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICBpc09ialRpbWVTYW1lQXNTZWxlY3RlZEZyb21UaW1lIHx8XHJcbiAgICAgICAgICAgIGlzT2JqVGltZVNhbWVBc1NlbGVjdGVkVG9UaW1lIHx8XHJcbiAgICAgICAgICAgIGlzT2JqVGltZUJldHdlZW5TZWxlY3RlZEZyb21UaW1lQW5kVG9UaW1lXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm5EYXRhRm9yU3RhcnRBbmRFbmRUaW1lUmFuZ2Uob2JqOiBhbnksIHNlbGVjdGVkRGF0YTogYW55LCBrZXk6IHN0cmluZykge1xyXG4gICAgICAgIGNvbnN0IGZvcm1hdCA9IFwiTU0vREQvWVlZWSBISDptbTpzc1wiO1xyXG4gICAgICAgIGNvbnN0IHNlbGVjdGVkRnJvbVRpbWUgPSBkYXlqcyhgMDEvMDEvMjAwMSAke3NlbGVjdGVkRGF0YS5mcm9tVGltZX1gLCBmb3JtYXQpO1xyXG4gICAgICAgIGNvbnN0IHNlbGVjdGVkVG9UaW1lID0gZGF5anMoYDAxLzAxLzIwMDEgJHtzZWxlY3RlZERhdGEudG9UaW1lfWAsIGZvcm1hdCk7XHJcblxyXG4gICAgICAgIGlmIChzZWxlY3RlZERhdGEuaW5jbHVkZU11bHRpICYmIG9ialtrZXldWzBdID09PSBcIjxtdWx0aT5cIikge1xyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghc2VsZWN0ZWREYXRhLmluY2x1ZGVNdWx0aSAmJiBvYmpba2V5XVswXSA9PT0gXCI8bXVsdGk+XCIpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHNlbGVjdGVkRGF0YS5pbmNsdWRlWmVybyAmJiBvYmpba2V5XVswXSA9PT0gXCIwXCIpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIXNlbGVjdGVkRGF0YS5pbmNsdWRlWmVybyAmJiBvYmpba2V5XVswXSA9PT0gXCIwXCIpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCFzZWxlY3RlZERhdGEuaW5jbHVkZVRpbWVSYW5nZSkge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBzdGFydFRpbWUgPSBkYXlqcyhgMDEvMDEvMjAwMSAke29ialtrZXldWzFdfWAsIGZvcm1hdCk7XHJcbiAgICAgICAgY29uc3QgZW5kVGltZSA9IGRheWpzKGAwMS8wMS8yMDAxICR7b2JqW2tleV1bMl19YCwgZm9ybWF0KTtcclxuXHJcbiAgICAgICAgY29uc3QgaXNTdGFydFRpbWVTYW1lQXNTZWxlY3RlZFN0YXJ0VGltZSA9IHN0YXJ0VGltZS5pc1NhbWUoc2VsZWN0ZWRGcm9tVGltZSk7XHJcbiAgICAgICAgY29uc3QgaXNTdGFydFRpbWVCZXR3ZWVuU2VsZWN0ZWRTdGFydEFuZEVuZFRpbWUgPSBzdGFydFRpbWUuaXNCZXR3ZWVuKHNlbGVjdGVkRnJvbVRpbWUsIHNlbGVjdGVkVG9UaW1lKTtcclxuICAgICAgICBjb25zdCBpc0VuZFRpbWVTYW1lQXNTZWxlY3RlZEVuZFRpbWUgPSBlbmRUaW1lLmlzU2FtZShzZWxlY3RlZFRvVGltZSk7XHJcbiAgICAgICAgY29uc3QgaXNFbmRUaW1lQmV0d2VlblNlbGVjdGVkU3RhcnRBbmRFbmRUaW1lID0gZW5kVGltZS5pc0JldHdlZW4oc2VsZWN0ZWRGcm9tVGltZSwgc2VsZWN0ZWRUb1RpbWUpO1xyXG5cclxuICAgICAgICAvLyBwcmV2aW91cyBjb25kaXRpb24gdG8gYXBwbHkgdGltYmFuZCBmaWx0dGVyXHJcbiAgICAgICAgLy8gcmV0dXJuIChcclxuICAgICAgICAvLyAgICAgKGlzU3RhcnRUaW1lQmV0d2VlblNlbGVjdGVkU3RhcnRBbmRFbmRUaW1lICYmIGlzRW5kVGltZUJldHdlZW5TZWxlY3RlZFN0YXJ0QW5kRW5kVGltZSkgfHxcclxuICAgICAgICAvLyAgICAgKGlzU3RhcnRUaW1lU2FtZUFzU2VsZWN0ZWRTdGFydFRpbWUgJiYgaXNFbmRUaW1lU2FtZUFzU2VsZWN0ZWRFbmRUaW1lKSB8fFxyXG4gICAgICAgIC8vICAgICAoaXNTdGFydFRpbWVTYW1lQXNTZWxlY3RlZFN0YXJ0VGltZSAmJiBpc0VuZFRpbWVCZXR3ZWVuU2VsZWN0ZWRTdGFydEFuZEVuZFRpbWUpIHx8XHJcbiAgICAgICAgLy8gICAgIChpc1N0YXJ0VGltZUJldHdlZW5TZWxlY3RlZFN0YXJ0QW5kRW5kVGltZSAmJiBpc0VuZFRpbWVTYW1lQXNTZWxlY3RlZEVuZFRpbWUpXHJcbiAgICAgICAgLy8gKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgaXNTdGFydFRpbWVTYW1lQXNTZWxlY3RlZFN0YXJ0VGltZSB8fFxyXG4gICAgICAgICAgICBpc1N0YXJ0VGltZUJldHdlZW5TZWxlY3RlZFN0YXJ0QW5kRW5kVGltZSB8fFxyXG4gICAgICAgICAgICBpc0VuZFRpbWVTYW1lQXNTZWxlY3RlZEVuZFRpbWUgfHxcclxuICAgICAgICAgICAgaXNFbmRUaW1lQmV0d2VlblNlbGVjdGVkU3RhcnRBbmRFbmRUaW1lXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXREYXRhSW5UaGVEYXRlUmFuZ2Uob2JqOiBhbnksIHZhbHVlOiBhbnksIGtleTogYW55KSB7XHJcbiAgICAgICAgbGV0IHBhcnNpbmdGb3JtYXQ6IHN0cmluZztcclxuICAgICAgICBpZiAoa2V5ID09PSBcInBlcmlvZFwiKSB7XHJcbiAgICAgICAgICAgIHBhcnNpbmdGb3JtYXQgPSBcIllZWVktTU0tRERcIjtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGRheWpzU3RhcnREYXRlID0gZGF5anMob2JqLnN0YXJ0RGF0ZSk7XHJcbiAgICAgICAgICAgIGNvbnN0IGRheWpzRW5kRGF0ZSA9IGRheWpzKG9iai5lbmREYXRlKTtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IHN0YXJ0RGF0ZUlzQmV0d2VlblNlbERhdGUgPSBkYXlqc1N0YXJ0RGF0ZS5pc0JldHdlZW4odmFsdWUuZnJvbURhdGUsIHZhbHVlLnRvRGF0ZSk7XHJcbiAgICAgICAgICAgIGNvbnN0IGVuZERhdGVJc0JldHdlZW5TZWxEYXRlID0gZGF5anNFbmREYXRlLmlzQmV0d2Vlbih2YWx1ZS5mcm9tRGF0ZSwgdmFsdWUudG9EYXRlKTtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IHN0YXJ0RGF0ZUlzU2FtZUFzU2VsU3RhcnREYXRlID0gdmFsdWUuZnJvbURhdGUuaXNTYW1lKGRheWpzU3RhcnREYXRlKTtcclxuICAgICAgICAgICAgY29uc3QgZW5kRGF0ZUlzU2FtZUFzU2VsRW5kRGF0ZSA9IHZhbHVlLnRvRGF0ZS5pc1NhbWUoZGF5anNFbmREYXRlKTtcclxuXHJcbiAgICAgICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgICAgICAoc3RhcnREYXRlSXNCZXR3ZWVuU2VsRGF0ZSB8fCBzdGFydERhdGVJc1NhbWVBc1NlbFN0YXJ0RGF0ZSkgJiZcclxuICAgICAgICAgICAgICAgIChlbmREYXRlSXNCZXR3ZWVuU2VsRGF0ZSB8fCBlbmREYXRlSXNTYW1lQXNTZWxFbmREYXRlKVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoXHJcbiAgICAgICAgICAgIGtleSA9PT0gXCJBaXJEYXRlXCIgfHxcclxuICAgICAgICAgICAga2V5ID09PSBcImZsaWdodFN0YXJ0RGF0ZVwiIHx8XHJcbiAgICAgICAgICAgIGtleSA9PT0gXCJmbGlnaHRFbmREYXRlXCIgfHxcclxuICAgICAgICAgICAga2V5ID09PSBcIldlZWtcIiB8fFxyXG4gICAgICAgICAgICBrZXkgPT09IFwiQWN0dWFsV2Vla1N0YXJ0RGF0ZVwiIHx8XHJcbiAgICAgICAgICAgIGtleSA9PT0gXCJ0aW1lb3V0RGF0ZVwiXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIHBhcnNpbmdGb3JtYXQgPSBcIk1NL0REL1lZWVlcIjtcclxuICAgICAgICAgICAgY29uc3QgZGF0ZUlzQmV0d2VlblNlbERhdGUgPSBkYXlqcyhvYmpba2V5XSwgcGFyc2luZ0Zvcm1hdCkuaXNCZXR3ZWVuKFxyXG4gICAgICAgICAgICAgICAgdmFsdWUubWluU2VsZWN0ZWREYXRlLFxyXG4gICAgICAgICAgICAgICAgdmFsdWUubWF4U2VsZWN0ZWREYXRlLFxyXG4gICAgICAgICAgICApO1xyXG5cclxuICAgICAgICAgICAgY29uc3QgZGF0ZUlzU2FtZUFzU2VsU3RhcnREYXRlID0gZGF5anMob2JqW2tleV0sIHBhcnNpbmdGb3JtYXQpLmlzU2FtZSh2YWx1ZS5taW5TZWxlY3RlZERhdGUpO1xyXG4gICAgICAgICAgICBjb25zdCBkYXRlSXNTYW1lQXNTZWxFbmREYXRlID0gZGF5anMob2JqW2tleV0sIHBhcnNpbmdGb3JtYXQpLmlzU2FtZSh2YWx1ZS5tYXhTZWxlY3RlZERhdGUpO1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuIGRhdGVJc0JldHdlZW5TZWxEYXRlIHx8IGRhdGVJc1NhbWVBc1NlbFN0YXJ0RGF0ZSB8fCBkYXRlSXNTYW1lQXNTZWxFbmREYXRlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBpbml0aWFsaXplVGltZUZpbHRlckRhdGEoY2xvbmVkRGF0YTogYW55W10sIGtleSA9IFwic3RhcnRFbmRUaW1lXCIpIHtcclxuICAgICAgICBjb25zdCBzdGFydFRpbWVBcnIgPSBtYXAoY2xvbmVkRGF0YSwgXCJzdGFydFRpbWVcIik7XHJcbiAgICAgICAgY29uc3QgZW5kVGltZUFyciA9IG1hcChjbG9uZWREYXRhLCBcImVuZFRpbWVcIik7XHJcblxyXG4gICAgICAgIHN0YXJ0VGltZUFyci5zb3J0KChhOiBhbnksIGI6IGFueSkgPT4gdGhpcy5kYXRlVGltZUZvcm1hdFNlcnZpY2Uuc29ydEJ5VGltZUFzY2VuZGluZyhhLCBiKSk7XHJcblxyXG4gICAgICAgIGVuZFRpbWVBcnIuc29ydCgoYTogYW55LCBiOiBhbnkpID0+IHRoaXMuZGF0ZVRpbWVGb3JtYXRTZXJ2aWNlLnNvcnRCeVRpbWVEZXNjZW5kaW5nKGEsIGIpKTtcclxuXHJcbiAgICAgICAgY29uc3QgaW5pdGlhbFN0YXJ0RW5kVGltZSA9IHtcclxuICAgICAgICAgICAgc3RhcnRUaW1lOiBzdGFydFRpbWVBcnJbMF0sXHJcbiAgICAgICAgICAgIGVuZFRpbWU6IGVuZFRpbWVBcnJbMF0sXHJcbiAgICAgICAgfTtcclxuICAgICAgICB0aGlzLmluaXRpYWxWYWx1ZU1hcC5zZXQoa2V5LCBpbml0aWFsU3RhcnRFbmRUaW1lKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm5Db2x1bW5GaWx0ZXJTdGF0dXMoZGF0YTogYW55W10sIGhlYWRlck5hbWU6IHN0cmluZyB8IG51bWJlcikge1xyXG4gICAgICAgIGlmIChoZWFkZXJOYW1lID09PSBcInN0YXJ0RW5kVGltZVwiKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHRpbWUgPSBkYXRhLm1hcCgodSkgPT4gdVtoZWFkZXJOYW1lXVswXSk7XHJcbiAgICAgICAgICAgIGNvbnN0IHVuaXFUaW1lID0gdW5pcSh0aW1lKTtcclxuICAgICAgICAgICAgcmV0dXJuIHVuaXFUaW1lLmxlbmd0aCA9PT0gMDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiAhKHVuaXEoZGF0YS5tYXAoKHUpID0+IHVbaGVhZGVyTmFtZV0pKS5sZW5ndGggPiAxKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRGaWx0ZXJPcHRpb25zRGF0YShkYXRhOiBhbnlbXSwgY2xvbmVkRGF0YTogYW55W10sIGtleT86IHN0cmluZykge1xyXG4gICAgICAgIGNvbnN0IGFwcGxpZWRGaWx0ZXJTZXQgPSBuZXcgU2V0KHRoaXMuYXBwbGllZEZpbHRlcnNBcnJheSk7XHJcbiAgICAgICAgY29uc3Qga2V5VG9DaGVjayA9IGtleSB8fCB0aGlzLnNlbGVjdGVkUmFkaW87XHJcbiAgICAgICAgaWYgKGFwcGxpZWRGaWx0ZXJTZXQuaGFzKGtleVRvQ2hlY2spKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmZpbHRlckRhdGEoY2xvbmVkRGF0YSwga2V5VG9DaGVjayk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBkYXRhO1xyXG4gICAgfVxyXG5cclxuICAgIHJlT3JkZXJBcHBsaWVkRmlsdGVyc1N0YXRlKGNsb25lZERhdGE6IGFueVtdLCB2YWx1ZTogYW55KSB7XHJcbiAgICAgICAgbGV0IGlzRmlsdGVyZWQgPSB0cnVlO1xyXG4gICAgICAgIGlzRmlsdGVyZWQgPSB0aGlzLmNoZWNrSWZGaWx0ZXJJc0FwcGxpZWQoY2xvbmVkRGF0YSwgdmFsdWUpO1xyXG4gICAgICAgIHRoaXMucmVtb3ZlT3JDaGFuZ2VMYXRlc3RGaWx0ZXJJbmRleChpc0ZpbHRlcmVkKTtcclxuICAgICAgICByZXR1cm4gaXNGaWx0ZXJlZDtcclxuICAgIH1cclxuXHJcbiAgICBjaGVja0lmRmlsdGVySXNBcHBsaWVkKGNsb25lZERhdGE6IGFueVtdLCB2YWx1ZTogYW55KSB7XHJcbiAgICAgICAgY29uc3QgaW5pdGlhbFZhbHVlT2ZDb2x1bW4gPSBzb3J0QnkoY2xvbmVkRGF0YS5tYXAoKGl0ZW0pID0+IGl0ZW1bdGhpcy5zZWxlY3RlZFJhZGlvXSkpO1xyXG4gICAgICAgIGNvbnN0IGN1cnJlbnRWYWx1ZU9mQ29sdW1uID0gc29ydEJ5KFxyXG4gICAgICAgICAgICB0aGlzLmFwcGx5RmlsdGVyKGNsb25lZERhdGEsIHZhbHVlKS5tYXAoKGl0ZW0pID0+IGl0ZW1bdGhpcy5zZWxlY3RlZFJhZGlvXSksXHJcbiAgICAgICAgKTtcclxuICAgICAgICByZXR1cm4gIWlzRXF1YWwoaW5pdGlhbFZhbHVlT2ZDb2x1bW4sIGN1cnJlbnRWYWx1ZU9mQ29sdW1uKTtcclxuICAgIH1cclxuXHJcbiAgICBhcHBseUZpbHRlcihkYXRhOiBhbnlbXSwgdmFsdWU6IGFueSkge1xyXG4gICAgICAgIGxldCBmaWx0ZXJlZERhdGEgPSBkYXRhO1xyXG4gICAgICAgIGNvbnN0IGtleSA9IHRoaXMuc2VsZWN0ZWRSYWRpbztcclxuICAgICAgICBpZiAodGhpcy5zbGlkZXJTZXQuaGFzKGtleSkpIHtcclxuICAgICAgICAgICAgZmlsdGVyZWREYXRhID0gZmlsdGVyZWREYXRhLmZpbHRlcigob2JqKSA9PiBvYmpba2V5XSA+PSB2YWx1ZS5taW4gJiYgb2JqW2tleV0gPD0gdmFsdWUubWF4KTtcclxuICAgICAgICB9IGVsc2UgaWYgKFxyXG4gICAgICAgICAgICBrZXkgPT09IFwic3RhcnREYXRlXCIgfHxcclxuICAgICAgICAgICAga2V5ID09PSBcImVuZERhdGVcIiB8fFxyXG4gICAgICAgICAgICBrZXkgPT09IFwiU3RhcnREYXRlXCIgfHxcclxuICAgICAgICAgICAga2V5ID09PSBcIkVuZERhdGVcIiB8fFxyXG4gICAgICAgICAgICBrZXkgPT09IFwiQWlyRGF0ZVwiIHx8XHJcbiAgICAgICAgICAgIGtleSA9PT0gXCJ0aW1lb3V0RGF0ZVwiIHx8XHJcbiAgICAgICAgICAgIGtleSA9PT0gXCJmbGlnaHRTdGFydERhdGVcIiB8fFxyXG4gICAgICAgICAgICBrZXkgPT09IFwiZmxpZ2h0RW5kRGF0ZVwiIHx8XHJcbiAgICAgICAgICAgIGtleSA9PT0gXCJkYXRlXCIgfHxcclxuICAgICAgICAgICAga2V5ID09PSBcIkRhdGVcIiB8fFxyXG4gICAgICAgICAgICBrZXkgPT09IFwicmV2aXNpb25TdGFydERhdGVcIiB8fFxyXG4gICAgICAgICAgICBrZXkgPT09IFwiR2VuZXJhdGVkT25cIiB8fFxyXG4gICAgICAgICAgICBrZXkgPT09IFwiV2Vla1wiIHx8XHJcbiAgICAgICAgICAgIGtleSA9PT0gXCJBY3R1YWxXZWVrU3RhcnREYXRlXCIgfHxcclxuICAgICAgICAgICAga2V5ID09PSBcIlZpb2xhdGVkU3BvdERhdGVcIiB8fFxyXG4gICAgICAgICAgICBrZXkgPT09IFwiVmlvbGF0aW5nU3BvdERhdGVcIlxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgICBmaWx0ZXJlZERhdGEgPSBmaWx0ZXJlZERhdGEuZmlsdGVyKChvYmopID0+IHRoaXMuaXNPYmplY3RJblRoZVJhbmdlKG9iaiwgdmFsdWUsIGtleSkpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoa2V5ID09PSBcInBlcmlvZFwiKSB7XHJcbiAgICAgICAgICAgIGZpbHRlcmVkRGF0YSA9IGZpbHRlcmVkRGF0YS5maWx0ZXIoKG9iaikgPT4gdGhpcy5nZXREYXRhSW5UaGVEYXRlUmFuZ2Uob2JqLCB2YWx1ZSwga2V5KSk7XHJcbiAgICAgICAgfSBlbHNlIGlmIChcclxuICAgICAgICAgICAga2V5ID09PSBcIlN0YXJ0VGltZUZvckZpbHRlclwiIHx8XHJcbiAgICAgICAgICAgIGtleSA9PT0gXCJFbmRUaW1lRm9yRmlsdGVyXCIgfHxcclxuICAgICAgICAgICAga2V5ID09PSBcInRpbWVvdXRUaW1lXCIgfHxcclxuICAgICAgICAgICAga2V5ID09PSBcInN0YXJ0VGltZUZvckZpbHRlclwiIHx8XHJcbiAgICAgICAgICAgIGtleSA9PT0gXCJlbmRUaW1lRm9yRmlsdGVyXCIgfHxcclxuICAgICAgICAgICAga2V5ID09PSBcInN0YXJ0X3RpbWVfZm9yX2ZpbHRlclwiIHx8XHJcbiAgICAgICAgICAgIGtleSA9PT0gXCJlbmRfdGltZV9mb3JfZmlsdGVyXCIgfHxcclxuICAgICAgICAgICAga2V5ID09PSBcInRpbWVcIiB8fFxyXG4gICAgICAgICAgICBrZXkgPT09IFwiU3RhcnRUaW1lXCIgfHxcclxuICAgICAgICAgICAga2V5ID09PSBcIkVuZFRpbWVcIiB8fFxyXG4gICAgICAgICAgICBrZXkgPT09IFwiT3RoZXJBdmFpbGFibGVTcG90c1RhYmxlU3RhcnRUaW1lXCIgfHxcclxuICAgICAgICAgICAga2V5ID09PSBcIk90aGVyQXZhaWxhYmxlU3BvdHNUYWJsZUVuZFRpbWVcIlxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgICBmaWx0ZXJlZERhdGEgPSBmaWx0ZXJlZERhdGEuZmlsdGVyKChvYmopID0+IHRoaXMucmV0dXJuRGF0YUZvckZyb21BbmRUb1RpbWVSYW5nZShvYmosIHZhbHVlLCBrZXkpKTtcclxuICAgICAgICB9IGVsc2UgaWYgKGtleSA9PT0gXCJzdGFydEVuZFRpbWVNdWx0aVwiIHx8IGtleSA9PT0gXCJzdGFydEVuZFRpbWVcIiB8fCBrZXkgPT09IFwiVGltZUJhbmRcIikge1xyXG4gICAgICAgICAgICBmaWx0ZXJlZERhdGEgPSBmaWx0ZXJlZERhdGEuZmlsdGVyKChvYmopID0+IHRoaXMucmV0dXJuRGF0YUZvclN0YXJ0QW5kRW5kVGltZVJhbmdlKG9iaiwgdmFsdWUsIGtleSkpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAodmFsdWUubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICBmaWx0ZXJlZERhdGEgPSBmaWx0ZXJlZERhdGEuZmlsdGVyKCh1KSA9PiB2YWx1ZS5pbmNsdWRlcyh1W2tleV0pKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGZpbHRlcmVkRGF0YTtcclxuICAgIH1cclxuXHJcbiAgICBpc09iamVjdEluVGhlUmFuZ2Uob2JqOiBhbnksIHZhbHVlOiBhbnksIGtleTogc3RyaW5nKSB7XHJcbiAgICAgICAgY29uc3Qgb2JqVmFsID0gb2JqW2tleV07XHJcbiAgICAgICAgY29uc3QgZGF5anNEYXRlID0gZGF5anMob2JqVmFsKTtcclxuICAgICAgICBpZiAodHlwZW9mIHZhbHVlLmZyb21EYXRlID09PSBcInN0cmluZ1wiICYmIHR5cGVvZiB2YWx1ZS50b0RhdGUgPT09IFwic3RyaW5nXCIpIHtcclxuICAgICAgICAgICAgdmFsdWUuZnJvbURhdGUgPSBkYXlqcyhcclxuICAgICAgICAgICAgICAgIHRoaXMuZGF0ZVRpbWVGb3JtYXRTZXJ2aWNlLmNvbnZlcnROZ2JEYXRlVG9Nb21lbnQoXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRlVGltZUZvcm1hdFNlcnZpY2UuY29udmVydFRvTmdiRGF0ZSh2YWx1ZS5mcm9tRGF0ZSwgXCJERC9NTS9ZWVlZXCIpLFxyXG4gICAgICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgdmFsdWUudG9EYXRlID0gZGF5anMoXHJcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGVUaW1lRm9ybWF0U2VydmljZS5jb252ZXJ0TmdiRGF0ZVRvTW9tZW50KFxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0ZVRpbWVGb3JtYXRTZXJ2aWNlLmNvbnZlcnRUb05nYkRhdGUodmFsdWUudG9EYXRlLCBcIkREL01NL1lZWVlcIiksXHJcbiAgICAgICAgICAgICAgICApLFxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBpc0RhdGVTYW1lQXNTdGFydE9mVGhlUmFuZ2UgPSB2YWx1ZS5mcm9tRGF0ZS5pc1NhbWUob2JqVmFsKTtcclxuICAgICAgICBjb25zdCBpc0RhdGVTYW1lQXNFbmRPZlRoZVJhbmdlID0gdmFsdWUudG9EYXRlLmlzU2FtZShvYmpWYWwpO1xyXG4gICAgICAgIGNvbnN0IGlzRGF0ZUJldHdlZW5UaGVTdGFydEFuZEVuZE9mUmFuZ2UgPSBkYXlqc0RhdGUuaXNCZXR3ZWVuKHZhbHVlLmZyb21EYXRlLCB2YWx1ZS50b0RhdGUpO1xyXG4gICAgICAgIHJldHVybiBpc0RhdGVTYW1lQXNTdGFydE9mVGhlUmFuZ2UgfHwgaXNEYXRlU2FtZUFzRW5kT2ZUaGVSYW5nZSB8fCBpc0RhdGVCZXR3ZWVuVGhlU3RhcnRBbmRFbmRPZlJhbmdlO1xyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZVN0YXRlT2ZUaGVDdXJyZW50RmlsdGVyVGFiKHNvcnRNYXA6IE1hcDxzdHJpbmcsIFNvcnRUeXBlPikge1xyXG4gICAgICAgIGNvbnN0IGFjdGl2ZUtleSA9IHRoaXMuc2VsZWN0ZWRSYWRpbztcclxuICAgICAgICBsZXQga2V5QXJyOiBzdHJpbmdbXSA9IFtdO1xyXG4gICAgICAgIE9iamVjdC5rZXlzKHRoaXMuaXNGaWx0ZXJTb3J0QWN0aXZlKS5mb3JFYWNoKChrZXkpID0+IHtcclxuICAgICAgICAgICAgaWYgKGtleS5pbmNsdWRlcyhhY3RpdmVLZXkpKSB7XHJcbiAgICAgICAgICAgICAgICBrZXlBcnIgPSBrZXkuc3BsaXQoXCIsXCIpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pc0ZpbHRlclNvcnRBY3RpdmVba2V5XSA9IHRoaXMuaXNUb29sdGlwQWN0aXZlKGtleUFyciwgc29ydE1hcCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGVTdGF0ZU9mQWxsVGhlS2V5cyhzb3J0TWFwOiBNYXA8c3RyaW5nLCBTb3J0VHlwZT4pIHtcclxuICAgICAgICBPYmplY3Qua2V5cyh0aGlzLmlzRmlsdGVyU29ydEFjdGl2ZSkuZm9yRWFjaCgoa2V5KSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGtleUFyciA9IGtleS5zcGxpdChcIixcIik7XHJcbiAgICAgICAgICAgIHRoaXMuaXNGaWx0ZXJTb3J0QWN0aXZlW2tleV0gPSB0aGlzLmlzVG9vbHRpcEFjdGl2ZShrZXlBcnIsIHNvcnRNYXApO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGluY3JlbWVudEhvdXIodmFsdWU6IGFueSkge1xyXG4gICAgICAgIGlmICh2YWx1ZSA9PT0gXCJcIikge1xyXG4gICAgICAgICAgICByZXR1cm4gMTtcclxuICAgICAgICB9IGVsc2UgaWYgKHBhcnNlSW50KHZhbHVlLCAxMCkgPCAxMikge1xyXG4gICAgICAgICAgICByZXR1cm4gcGFyc2VJbnQodmFsdWUsIDEwKSArIDE7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gMTtcclxuICAgIH1cclxuXHJcbiAgICBkZWNyZW1lbnRIb3VyKHZhbHVlOiBhbnkpIHtcclxuICAgICAgICBpZiAodmFsdWUgPT09IFwiXCIpIHtcclxuICAgICAgICAgICAgcmV0dXJuIDEyO1xyXG4gICAgICAgIH0gZWxzZSBpZiAocGFyc2VJbnQodmFsdWUsIDEwKSA+IDEpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHBhcnNlSW50KHZhbHVlLCAxMCkgLSAxO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gMTI7XHJcbiAgICB9XHJcblxyXG4gICAgaW5jcmVtZW50TWludXRlKHZhbHVlOiBhbnkpIHtcclxuICAgICAgICAvLyBpbmNyZW1lbnQgdG8gbmVhcmVzdCBwcm9wZXIgaW50ZXJ2YWwoMTUsMzAsNDUpXHJcbiAgICAgICAgY29uc3QgbWludXRlID0gcGFyc2VJbnQodmFsdWUsIDEwKTtcclxuICAgICAgICBpZiAobWludXRlIDw9IDE0KSB7XHJcbiAgICAgICAgICAgIHJldHVybiBcIjE1XCI7XHJcbiAgICAgICAgfSBlbHNlIGlmIChtaW51dGUgPj0gMTUgJiYgbWludXRlIDw9IDI5KSB7XHJcbiAgICAgICAgICAgIHJldHVybiBcIjMwXCI7XHJcbiAgICAgICAgfSBlbHNlIGlmIChtaW51dGUgPj0gMzAgJiYgbWludXRlIDw9IDQ0KSB7XHJcbiAgICAgICAgICAgIHJldHVybiBcIjQ1XCI7XHJcbiAgICAgICAgfSBlbHNlIGlmIChtaW51dGUgPj0gNDUpIHtcclxuICAgICAgICAgICAgcmV0dXJuIFwiMDBcIjtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xyXG4gICAgfVxyXG5cclxuICAgIGRlY3JlbWVudE1pbnV0ZSh2YWx1ZTogYW55KSB7XHJcbiAgICAgICAgY29uc3QgbWludXRlID0gcGFyc2VJbnQodmFsdWUsIDEwKTtcclxuICAgICAgICBpZiAobWludXRlID4gMCAmJiBtaW51dGUgPD0gMTUpIHtcclxuICAgICAgICAgICAgcmV0dXJuIFwiMDBcIjtcclxuICAgICAgICB9IGVsc2UgaWYgKG1pbnV0ZSA+PSAxNiAmJiBtaW51dGUgPD0gMzApIHtcclxuICAgICAgICAgICAgcmV0dXJuIFwiMTVcIjtcclxuICAgICAgICB9IGVsc2UgaWYgKG1pbnV0ZSA+PSAzMSAmJiBtaW51dGUgPD0gNDUpIHtcclxuICAgICAgICAgICAgcmV0dXJuIFwiMzBcIjtcclxuICAgICAgICB9IGVsc2UgaWYgKG1pbnV0ZSA+IDQ1IHx8IG1pbnV0ZSA9PT0gMCkge1xyXG4gICAgICAgICAgICByZXR1cm4gXCI0NVwiO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdmFsdWU7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PUNoZWNrYm94IG1ldGhvZD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0vL1xyXG5cclxuICAgIGRpc2FibGVBY3RpdmVGaWx0ZXJDbGVhckJ1dHRvbigpIHtcclxuICAgICAgICBjb25zdCBzZWxlY3RlZEZpbHRlclNldCA9IG5ldyBTZXQodGhpcy5hcHBsaWVkRmlsdGVyc0FycmF5KTtcclxuXHJcbiAgICAgICAgY29uc3QgY3VycmVudENvbHVtblNvcnRGaWx0ZXIgPSB0aGlzLmdldENvbHVtblNvcnRTdGF0ZUZvclNlbGVjdGVkUmFkaW8oKTtcclxuICAgICAgICBjb25zdCBpc1NvcnRQcmVzZW50ID1cclxuICAgICAgICAgICAgdGhpcy5hbm5hU29ydFNlcnZpY2UuY29sdW1uU29ydFN0YXRlICYmXHJcbiAgICAgICAgICAgIHRoaXMuYW5uYVNvcnRTZXJ2aWNlLmNvbHVtblNvcnRTdGF0ZS5zaXplID4gMCAmJlxyXG4gICAgICAgICAgICBjdXJyZW50Q29sdW1uU29ydEZpbHRlciAhPT0gU29ydFR5cGVFbnVtLkRFRkFVTFQ7XHJcblxyXG4gICAgICAgIHJldHVybiAhKHNlbGVjdGVkRmlsdGVyU2V0Lmhhcyh0aGlzLnNlbGVjdGVkUmFkaW8pIHx8IGlzU29ydFByZXNlbnQpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldENvbHVtblNvcnRTdGF0ZUZvclNlbGVjdGVkUmFkaW8oKTogc3RyaW5nIHtcclxuICAgICAgICBsZXQgY3VycmVudENvbHVtblNvcnRGaWx0ZXIgPVxyXG4gICAgICAgICAgICB0aGlzLmFubmFTb3J0U2VydmljZS5jb2x1bW5Tb3J0U3RhdGUgJiZcclxuICAgICAgICAgICAgdGhpcy5hbm5hU29ydFNlcnZpY2UuY29sdW1uU29ydFN0YXRlLmhhcyh0aGlzLnNlbGVjdGVkUmFkaW8pICYmXHJcbiAgICAgICAgICAgIHRoaXMuYW5uYVNvcnRTZXJ2aWNlLmNvbHVtblNvcnRTdGF0ZS5nZXQodGhpcy5zZWxlY3RlZFJhZGlvKTtcclxuICAgICAgICBjdXJyZW50Q29sdW1uU29ydEZpbHRlciA9IGN1cnJlbnRDb2x1bW5Tb3J0RmlsdGVyIHx8IFNvcnRUeXBlRW51bS5ERUZBVUxUO1xyXG4gICAgICAgIHJldHVybiBjdXJyZW50Q29sdW1uU29ydEZpbHRlcjtcclxuICAgIH1cclxuXHJcbiAgICBjcmVhdGVMaXN0Rm9yQ2hlY2tib3hGaWx0ZXIoaGVhZGVyOiBzdHJpbmcsIG9wdGlvbkRhdGE6IGFueVtdKSB7XHJcbiAgICAgICAgY29uc3QgdG9vbHRpcE9wdGlvbnMgPSB0aGlzLmdldFRvb2x0aXBNb2RlbEZyb21PcHRpb25EYXRhKG9wdGlvbkRhdGEsIGhlYWRlcik7XHJcblxyXG4gICAgICAgIHRoaXMuc2VsZWN0VW5zZWxlY3RMaXN0Q2hlY2tib3godG9vbHRpcE9wdGlvbnMsIGhlYWRlcik7XHJcbiAgICAgICAgdGhpcy5mb3JtYXROdWxsT3B0aW9uVG9TcGVjaWZpZWRTdHJpbmcodG9vbHRpcE9wdGlvbnMsIHRoaXMubnVsbFRvQmVGb3JtYXRlZEludG9TdHJpbmcpO1xyXG5cclxuICAgICAgICByZXR1cm4gdG9vbHRpcE9wdGlvbnM7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0VG9vbHRpcE1vZGVsRnJvbU9wdGlvbkRhdGEob3B0aW9uRGF0YTogYW55W10sIGhlYWRlcjogc3RyaW5nKSB7XHJcbiAgICAgICAgY29uc3QgdW5pcU9wdGlvbkRhdGEgPSB1bmlxKG9wdGlvbkRhdGEubWFwKChpdGVtKSA9PiBpdGVtW2hlYWRlcl0pKTtcclxuICAgICAgICByZXR1cm4gdW5pcU9wdGlvbkRhdGEubWFwKChpdGVtLCBpbmRleCkgPT4gbmV3IFRvb2x0aXBNb2RlbChpdGVtLCBpbmRleCArIDEpKTtcclxuICAgIH1cclxuXHJcbiAgICBzZWxlY3RVbnNlbGVjdExpc3RDaGVja2JveCh0b29sdGlwT3B0aW9uczogVG9vbHRpcE1vZGVsW10sIGhlYWRlcjogc3RyaW5nKSB7XHJcbiAgICAgICAgaWYgKHRoaXMudG9vbHRpcFNlbGVjdGVkTWFwLmhhcyhoZWFkZXIpKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHNlbGVjdGVkVmFsdWVTZXQgPSBuZXcgU2V0KHRoaXMudG9vbHRpcFNlbGVjdGVkTWFwLmdldChoZWFkZXIpKTtcclxuICAgICAgICAgICAgdG9vbHRpcE9wdGlvbnMuZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaXRlbS5pc1NlbGVjdGVkID0gc2VsZWN0ZWRWYWx1ZVNldC5oYXMoaXRlbS52YWx1ZSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRvb2x0aXBPcHRpb25zLmZvckVhY2goKGl0ZW0pID0+IHtcclxuICAgICAgICAgICAgICAgIGl0ZW0uaXNTZWxlY3RlZCA9IHRydWU7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBmb3JtYXROdWxsT3B0aW9uVG9TcGVjaWZpZWRTdHJpbmcodG9vbHRpcE9wdGlvbnM6IFRvb2x0aXBNb2RlbFtdLCBmb3JtYXR0ZWRTdHJpbmc6IHN0cmluZykge1xyXG4gICAgICAgIGNvbnN0IGluZGV4ID0gdG9vbHRpcE9wdGlvbnMuZmluZEluZGV4KChpdGVtKSA9PiBpdGVtLnZhbHVlID09IG51bGwpO1xyXG5cclxuICAgICAgICBpZiAoaW5kZXggIT09IC0xKSB7XHJcbiAgICAgICAgICAgIHRvb2x0aXBPcHRpb25zW2luZGV4XS5sYWJlbCA9IGZvcm1hdHRlZFN0cmluZztcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0Q2xvbmVkVG9vbHRpcEFuZFRvb2x0aXBPcHRpb24odG9vbHRpcE9wdGlvbnM6IFRvb2x0aXBNb2RlbFtdLCBzb3J0QnlTdHJpbmc6IHN0cmluZykge1xyXG4gICAgICAgIGNvbnN0IFtzZWxlY3RlZEl0ZW1zLCB1bnNlbGVjdGVkSXRlbXNdID0gdGhpcy5nZXRTZWxlY3RlZEFuZFVuc2VsZWN0ZWRJdGVtcyh0b29sdGlwT3B0aW9ucyk7XHJcbiAgICAgICAgY29uc3Qgc29ydGVkU2VsZWN0ZWRJdGVtcyA9IHNvcnRCeShzZWxlY3RlZEl0ZW1zLCBzb3J0QnlTdHJpbmcpO1xyXG4gICAgICAgIGNvbnN0IHNvcnRlZFVuc2VsZWN0ZWRJdGVtcyA9IHNvcnRCeSh1bnNlbGVjdGVkSXRlbXMsIHNvcnRCeVN0cmluZyk7XHJcblxyXG4gICAgICAgIGNvbnN0IGNsb25lZFRvb2x0aXBPcHRpb25zID0gWy4uLnNvcnRlZFNlbGVjdGVkSXRlbXMsIC4uLnNvcnRlZFVuc2VsZWN0ZWRJdGVtc107XHJcbiAgICAgICAgY29uc3QgdXBkYXRlZFRvb2x0aXBPcHRpb25zID0gY2xvbmVEZWVwKGNsb25lZFRvb2x0aXBPcHRpb25zKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIFtjbG9uZWRUb29sdGlwT3B0aW9ucywgdXBkYXRlZFRvb2x0aXBPcHRpb25zLCBzZWxlY3RlZEl0ZW1zLCB1bnNlbGVjdGVkSXRlbXNdO1xyXG4gICAgfVxyXG5cclxuICAgIGdldEhlaWdodE9mQ2hlY2tib3hUb29sdGlwRmlsdGVyKGRhdGFMZW5ndGg6IG51bWJlciwgbWFyZ2luOiBudW1iZXIpIHtcclxuICAgICAgICByZXR1cm4gZGF0YUxlbmd0aCA+IDYgPyAyMDAgOiAyNi4wMyAqIGRhdGFMZW5ndGggKyBtYXJnaW4gKiBkYXRhTGVuZ3RoICsgbWFyZ2luO1xyXG4gICAgfVxyXG5cclxuICAgIHVuQ2hlY2tBbGxDaGVja2JveCh0b29sdGlwT3B0aW9uczogVG9vbHRpcE1vZGVsW10sIGNsb25lZFRvb2x0aXBPcHRpb25zOiBUb29sdGlwTW9kZWxbXSkge1xyXG4gICAgICAgIHRvb2x0aXBPcHRpb25zLmZvckVhY2goKGl0ZW0pID0+IHtcclxuICAgICAgICAgICAgaXRlbS5pc1NlbGVjdGVkID0gZmFsc2U7XHJcbiAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gY2xvbmVkVG9vbHRpcE9wdGlvbnMuZmluZEluZGV4KChvcHQpID0+IG9wdC5pZCA9PT0gaXRlbS5pZCk7XHJcbiAgICAgICAgICAgIGNsb25lZFRvb2x0aXBPcHRpb25zW2luZGV4XS5pc1NlbGVjdGVkID0gZmFsc2U7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgc2VsZWN0QWxsQ2hlY2tib3godG9vbHRpcE9wdGlvbnM6IFRvb2x0aXBNb2RlbFtdLCBjbG9uZWRUb29sdGlwT3B0aW9uczogVG9vbHRpcE1vZGVsW10pIHtcclxuICAgICAgICB0b29sdGlwT3B0aW9ucy5mb3JFYWNoKChpdGVtKSA9PiB7XHJcbiAgICAgICAgICAgIGl0ZW0uaXNTZWxlY3RlZCA9IHRydWU7XHJcbiAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gY2xvbmVkVG9vbHRpcE9wdGlvbnMuZmluZEluZGV4KChvcHQpID0+IG9wdC5pZCA9PT0gaXRlbS5pZCk7XHJcbiAgICAgICAgICAgIGNsb25lZFRvb2x0aXBPcHRpb25zW2luZGV4XS5pc1NlbGVjdGVkID0gdHJ1ZTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBzZWxlY3RVbnNlbGVjdENoZWNrYm94KGRhdGE6IFRvb2x0aXBNb2RlbCwgY2xvbmVkVG9vbHRpcE9wdGlvbnM6IFRvb2x0aXBNb2RlbFtdKSB7XHJcbiAgICAgICAgZGF0YS5pc1NlbGVjdGVkID0gIWRhdGEuaXNTZWxlY3RlZDtcclxuICAgICAgICBjb25zdCBpbmRleCA9IGNsb25lZFRvb2x0aXBPcHRpb25zLmZpbmRJbmRleCgoaXRlbSkgPT4gaXRlbS5pZCA9PT0gZGF0YS5pZCk7XHJcbiAgICAgICAgY2xvbmVkVG9vbHRpcE9wdGlvbnNbaW5kZXhdLmlzU2VsZWN0ZWQgPSBkYXRhLmlzU2VsZWN0ZWQ7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0U2VsZWN0ZWRBbmRVbnNlbGVjdGVkSXRlbXModG9vbHRpcE9wdGlvbnM6IFRvb2x0aXBNb2RlbFtdKSB7XHJcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRJdGVtcyA9IHRvb2x0aXBPcHRpb25zLmZpbHRlcigoaXRlbSkgPT4gaXRlbS5pc1NlbGVjdGVkKTtcclxuICAgICAgICBjb25zdCB1bnNlbGVjdGVkSXRlbXMgPSB0b29sdGlwT3B0aW9ucy5maWx0ZXIoKGl0ZW0pID0+ICFpdGVtLmlzU2VsZWN0ZWQpO1xyXG5cclxuICAgICAgICByZXR1cm4gW3NlbGVjdGVkSXRlbXMsIHVuc2VsZWN0ZWRJdGVtc107XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0Q2hlY2tib3hQcmV2aW91c1NlbGVjdGVkVmFsdWUoY2xvbmVkVGFibGVEYXRhOiBhbnlbXSkge1xyXG4gICAgICAgIGxldCBwcmV2aW91c1NlbGVjdGVkVmFsdWUgPSBbXTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMudG9vbHRpcFNlbGVjdGVkTWFwLmhhcyh0aGlzLnNlbGVjdGVkUmFkaW8pKSB7XHJcbiAgICAgICAgICAgIHByZXZpb3VzU2VsZWN0ZWRWYWx1ZSA9IHRoaXMudG9vbHRpcFNlbGVjdGVkTWFwLmdldCh0aGlzLnNlbGVjdGVkUmFkaW8pO1xyXG5cclxuICAgICAgICAgICAgaWYgKCF0aGlzLmluaXRpYWxWYWx1ZU1hcC5oYXModGhpcy5zZWxlY3RlZFJhZGlvKSkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgaW5pdGlhbFZhbHVlID0gc29ydEJ5KHVuaXEoY2xvbmVkVGFibGVEYXRhLm1hcCgoaXRlbSkgPT4gaXRlbVt0aGlzLnNlbGVjdGVkUmFkaW9dKSkpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pbml0aWFsVmFsdWVNYXAuc2V0KHRoaXMuc2VsZWN0ZWRSYWRpbywgaW5pdGlhbFZhbHVlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5pbml0aWFsVmFsdWVNYXAuaGFzKHRoaXMuc2VsZWN0ZWRSYWRpbykpIHtcclxuICAgICAgICAgICAgcHJldmlvdXNTZWxlY3RlZFZhbHVlID0gdGhpcy5pbml0aWFsVmFsdWVNYXAuZ2V0KHRoaXMuc2VsZWN0ZWRSYWRpbyk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcHJldmlvdXNTZWxlY3RlZFZhbHVlID0gc29ydEJ5KHVuaXEoY2xvbmVkVGFibGVEYXRhLm1hcCgoaXRlbSkgPT4gaXRlbVt0aGlzLnNlbGVjdGVkUmFkaW9dKSkpO1xyXG4gICAgICAgICAgICB0aGlzLmluaXRpYWxWYWx1ZU1hcC5zZXQodGhpcy5zZWxlY3RlZFJhZGlvLCBwcmV2aW91c1NlbGVjdGVkVmFsdWUpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHByZXZpb3VzU2VsZWN0ZWRWYWx1ZTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRDaGVja2JveEN1cnJlbnRTZWxlY3RlZFZhbHVlKHNlYXJjaGVkU3RyaW5nOiBzdHJpbmcsIHRvb2x0aXBPcHRpb25zOiBUb29sdGlwTW9kZWxbXSkge1xyXG4gICAgICAgIGxldCBjdXJyZW50U2VsZWN0ZWRWYWx1ZSA9IFtdO1xyXG5cclxuICAgICAgICBpZiAodG9vbHRpcE9wdGlvbnMpIHtcclxuICAgICAgICAgICAgY3VycmVudFNlbGVjdGVkVmFsdWUgPSBzb3J0QnkodG9vbHRpcE9wdGlvbnMuZmlsdGVyKChpdGVtKSA9PiBpdGVtLmlzU2VsZWN0ZWQpLm1hcCgoaXRlbSkgPT4gaXRlbS52YWx1ZSkpO1xyXG5cclxuICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgIXNlYXJjaGVkU3RyaW5nICYmXHJcbiAgICAgICAgICAgICAgICBjdXJyZW50U2VsZWN0ZWRWYWx1ZS5sZW5ndGggPT09IHRvb2x0aXBPcHRpb25zLmxlbmd0aCAmJlxyXG4gICAgICAgICAgICAgICAgdGhpcy5pbml0aWFsVmFsdWVNYXAuaGFzKHRoaXMuc2VsZWN0ZWRSYWRpbylcclxuICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICBjdXJyZW50U2VsZWN0ZWRWYWx1ZSA9IHRoaXMuaW5pdGlhbFZhbHVlTWFwLmdldCh0aGlzLnNlbGVjdGVkUmFkaW8pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBibGFua0luZGV4ID0gY3VycmVudFNlbGVjdGVkVmFsdWUuZmluZEluZGV4KChpdGVtOiBzdHJpbmcpID0+IGl0ZW0gPT0gbnVsbCk7XHJcbiAgICAgICAgaWYgKGJsYW5rSW5kZXggIT09IC0xKSB7XHJcbiAgICAgICAgICAgIGN1cnJlbnRTZWxlY3RlZFZhbHVlID0gc29ydEJ5KGN1cnJlbnRTZWxlY3RlZFZhbHVlKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBjdXJyZW50U2VsZWN0ZWRWYWx1ZTtcclxuICAgIH1cclxuXHJcbiAgICBjaGVja0lmU29ydGluZ0NoYW5nZWQodGVtcFNvcnRPcmRlcjogU29ydFR5cGUpIHtcclxuICAgICAgICBjb25zdCBjdXJyZW50Q29sdW1uU29ydEZpbHRlciA9IHRoaXMuZ2V0Q29sdW1uU29ydFN0YXRlRm9yU2VsZWN0ZWRSYWRpbygpO1xyXG5cclxuICAgICAgICBjb25zdCBpc1NvcnRDaGFuZ2VkID0gdGVtcFNvcnRPcmRlciAhPSBudWxsICYmIHRlbXBTb3J0T3JkZXIgIT09IGN1cnJlbnRDb2x1bW5Tb3J0RmlsdGVyO1xyXG4gICAgICAgIHJldHVybiBpc1NvcnRDaGFuZ2VkO1xyXG4gICAgfVxyXG5cclxuICAgIGdldEZpbHRlcmVkT3B0aW9uQXNCb2xkU3RyaW5nKHN0cjogc3RyaW5nLCBjbG9uZWRUb29sdGlwT3B0aW9uczogVG9vbHRpcE1vZGVsW10pIHtcclxuICAgICAgICBjb25zdCB0b29sdGlwT3B0aW9ucyA9IGNsb25lRGVlcChcclxuICAgICAgICAgICAgY2xvbmVkVG9vbHRpcE9wdGlvbnMuZmlsdGVyKChpdGVtKSA9PiBpdGVtLmxhYmVsLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhzdHIudG9Mb3dlckNhc2UoKSkpLFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgdG9vbHRpcE9wdGlvbnMuZm9yRWFjaCgoZWxlbWVudCkgPT4ge1xyXG4gICAgICAgICAgICBlbGVtZW50LmxhYmVsID0gdGhpcy5ib2xkU3RyaW5nKGVsZW1lbnQubGFiZWwsIHN0cik7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHJldHVybiB0b29sdGlwT3B0aW9ucztcclxuICAgIH1cclxuXHJcbiAgICBib2xkU3RyaW5nKHN0cjogc3RyaW5nLCBmaW5kOiBzdHJpbmcpIHtcclxuICAgICAgICBsZXQgdXBkYXRlZFN0cmluZyA9IHN0cjtcclxuICAgICAgICBjb25zdCBpbmRleGVzID0gdGhpcy5nZXRJbmRpY2VzT2YoZmluZCwgdXBkYXRlZFN0cmluZywgZmFsc2UpO1xyXG5cclxuICAgICAgICBpbmRleGVzLmZvckVhY2goKGl0ZW0sIGluZGV4KSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IHN0YXJ0SW5kZXggPSBpdGVtICsgaW5kZXggKiA3OyAvLyBNdWx0aXBseWluZyBieSA3IGFzIHRoZXJlIGFyZSA3Y2hhcjogPGI+PC9iPlxyXG4gICAgICAgICAgICBjb25zdCBlbmRJbmRleCA9IHN0YXJ0SW5kZXggKyBmaW5kLmxlbmd0aDtcclxuICAgICAgICAgICAgY29uc3Qgc3RyVG9CZVJlcGxhY2VkID0gdXBkYXRlZFN0cmluZy5zdWJzdHJpbmcoc3RhcnRJbmRleCwgZW5kSW5kZXgpO1xyXG4gICAgICAgICAgICB1cGRhdGVkU3RyaW5nID0gdXBkYXRlZFN0cmluZy5yZXBsYWNlKHN0clRvQmVSZXBsYWNlZCwgYDxiPiR7c3RyVG9CZVJlcGxhY2VkfTwvYj5gKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gdXBkYXRlZFN0cmluZztcclxuICAgIH1cclxuXHJcbiAgICBnZXRJbmRpY2VzT2Yoc2VhcmNoU3RyOiBzdHJpbmcsIHN0cjogc3RyaW5nLCBjYXNlU2Vuc2l0aXZlOiBib29sZWFuKSB7XHJcbiAgICAgICAgY29uc3Qgc2VhcmNoU3RyTGVuID0gc2VhcmNoU3RyLmxlbmd0aDtcclxuICAgICAgICBpZiAoc2VhcmNoU3RyTGVuID09PSAwKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBbXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgbGV0IHN0YXJ0SW5kZXggPSAwO1xyXG4gICAgICAgIGxldCBpbmRleDtcclxuICAgICAgICBjb25zdCBpbmRpY2VzID0gW107XHJcbiAgICAgICAgbGV0IHVwZGF0ZWRTdHIgPSBzdHI7XHJcbiAgICAgICAgbGV0IHVwZGF0ZWRTZWFyY2hTdHIgPSBzZWFyY2hTdHI7XHJcbiAgICAgICAgaWYgKCFjYXNlU2Vuc2l0aXZlKSB7XHJcbiAgICAgICAgICAgIHVwZGF0ZWRTdHIgPSBzdHIudG9Mb3dlckNhc2UoKTtcclxuICAgICAgICAgICAgdXBkYXRlZFNlYXJjaFN0ciA9IHNlYXJjaFN0ci50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaW5kZXggPSB1cGRhdGVkU3RyLmluZGV4T2YodXBkYXRlZFNlYXJjaFN0ciwgc3RhcnRJbmRleCk7XHJcbiAgICAgICAgd2hpbGUgKGluZGV4ID4gLTEpIHtcclxuICAgICAgICAgICAgaW5kaWNlcy5wdXNoKGluZGV4KTtcclxuICAgICAgICAgICAgc3RhcnRJbmRleCA9IGluZGV4ICsgc2VhcmNoU3RyTGVuO1xyXG4gICAgICAgICAgICBpbmRleCA9IHVwZGF0ZWRTdHIuaW5kZXhPZih1cGRhdGVkU2VhcmNoU3RyLCBzdGFydEluZGV4KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGluZGljZXM7XHJcbiAgICB9XHJcblxyXG4gICAgZGlzYWJsZUFsbEJ0bnNXaGVuVGhlcmVBcmVOb0ZpbHRlcmVkUmVzdWx0cygpOiBbbnVtYmVyLCBib29sZWFuLCBib29sZWFuLCBib29sZWFuXSB7XHJcbiAgICAgICAgLy8gW3NlbGVjdGVkQ2hlY2tib3hPcHRpb25zQ291bnQsIGRpc2FibGVDaGVja2JveEFwcGx5LCBkaXNhYmxlQ2xlYXJBbGwsIGRpc2FibGVTZWxlY3RBbGxdO1xyXG4gICAgICAgIHJldHVybiBbMCwgdHJ1ZSwgdHJ1ZSwgdHJ1ZV07XHJcbiAgICB9XHJcblxyXG4gICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PUNhbGVuZGFyIGZpbHRlcj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ly9cclxuICAgIGNyZWF0ZVJhbmdlRm9yVGhlRGF0ZUZpbHRlcihvcHRpb25EYXRhOiBhbnlbXSkge1xyXG4gICAgICAgIGxldCBtaW5NYXhEYXRlO1xyXG4gICAgICAgIC8vIFdoZW4geW91IHdhbnQgdG8gdXNlIHN0YXJ0RGF0ZSBhbmQgZW5kRGF0ZSBjb21iaW5lZCBhcyBzaW5nbGUgY29sdW1uIHRoZW4gdXNlIFBlcmlvZC5cclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRSYWRpbyA9PT0gXCJwZXJpb2RcIiB8fFxyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkUmFkaW8gPT09IFwiYnV5ZXJGbGlnaHREYXRlc1wiIHx8XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRSYWRpbyA9PT0gXCJ0cmFmZmljRmxpZ2h0RGF0ZXNcIlxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgICBtaW5NYXhEYXRlID0gdGhpcy5jcmVhdGVTdGFydEVuZERhdGVSYW5nZShvcHRpb25EYXRhKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBtaW5NYXhEYXRlID0gdGhpcy5yZXR1cm5NaW5BbmRNYXhEYXRlKG9wdGlvbkRhdGEsIHRoaXMuc2VsZWN0ZWRSYWRpbyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gbWluTWF4RGF0ZTtcclxuICAgIH1cclxuXHJcbiAgICBjcmVhdGVTdGFydEVuZERhdGVSYW5nZShvcHRpb25EYXRhOiBhbnlbXSkge1xyXG4gICAgICAgIGNvbnN0IG1pblN0YXJ0RGF0ZSA9IHRoaXMucmV0dXJuTWluQW5kTWF4RGF0ZShvcHRpb25EYXRhLCBcInN0YXJ0RGF0ZVwiKTtcclxuICAgICAgICBjb25zdCBtYXhFbmREYXRlID0gdGhpcy5yZXR1cm5NaW5BbmRNYXhEYXRlKG9wdGlvbkRhdGEsIFwiZW5kRGF0ZVwiKTtcclxuICAgICAgICByZXR1cm4gW21pblN0YXJ0RGF0ZVswXSwgbWF4RW5kRGF0ZVsxXV07XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0TWluQW5kTWF4RGF0ZVJhbmdlRm9yQ2FsZW5kYXIobWluTWF4RGF0ZTogYW55W10sIHBhcnNpbmdGb3JtYXQ6IHN0cmluZykge1xyXG4gICAgICAgIGNvbnN0IGNhbGVuZGFyTWluRW5hYmxlZERhdGUgPSB0aGlzLmRhdGVUaW1lRm9ybWF0U2VydmljZS5jb252ZXJ0VG9OZ2JEYXRlKG1pbk1heERhdGVbMF0sIHBhcnNpbmdGb3JtYXQpO1xyXG4gICAgICAgIGNvbnN0IGNhbGVuZGFyTWF4RW5hYmxlZERhdGUgPSB0aGlzLmRhdGVUaW1lRm9ybWF0U2VydmljZS5jb252ZXJ0VG9OZ2JEYXRlKG1pbk1heERhdGVbMV0sIHBhcnNpbmdGb3JtYXQpO1xyXG4gICAgICAgIHJldHVybiBbY2FsZW5kYXJNaW5FbmFibGVkRGF0ZSwgY2FsZW5kYXJNYXhFbmFibGVkRGF0ZV07XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0U2VsZWN0ZWREYXRlRm9yQ2FsZW5kYXIobWluTWF4RGF0ZTogYW55W10sIHBhcnNpbmdGb3JtYXQ6IHN0cmluZywgbWluRGF0ZTogTmdiRGF0ZVR5cGUsIG1heERhdGU6IE5nYkRhdGVUeXBlKSB7XHJcbiAgICAgICAgbGV0IHNlbGVjdGVkTWluRGF0ZTtcclxuICAgICAgICBsZXQgc2VsZWN0ZWRNYXhEYXRlO1xyXG5cclxuICAgICAgICBpZiAodGhpcy50b29sdGlwU2VsZWN0ZWRNYXAuaGFzKHRoaXMuc2VsZWN0ZWRSYWRpbykpIHtcclxuICAgICAgICAgICAgY29uc3Qgc2VsZWN0ZWREYXRlT2JqID0gdGhpcy50b29sdGlwU2VsZWN0ZWRNYXAuZ2V0KHRoaXMuc2VsZWN0ZWRSYWRpbyk7XHJcblxyXG4gICAgICAgICAgICBpZiAoc2VsZWN0ZWREYXRlT2JqLmZyb21EYXRlLmlzQWZ0ZXIobWluTWF4RGF0ZVswXSkpIHtcclxuICAgICAgICAgICAgICAgIHNlbGVjdGVkTWluRGF0ZSA9IHRoaXMuZGF0ZVRpbWVGb3JtYXRTZXJ2aWNlLmNvbnZlcnRUb05nYkRhdGUoc2VsZWN0ZWREYXRlT2JqLmZyb21EYXRlLCBwYXJzaW5nRm9ybWF0KTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHNlbGVjdGVkTWluRGF0ZSA9IHRoaXMuZGF0ZVRpbWVGb3JtYXRTZXJ2aWNlLmNvbnZlcnRUb05nYkRhdGUobWluTWF4RGF0ZVswXSwgcGFyc2luZ0Zvcm1hdCk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChzZWxlY3RlZERhdGVPYmoudG9EYXRlLmlzQWZ0ZXIobWluTWF4RGF0ZVsxXSkpIHtcclxuICAgICAgICAgICAgICAgIHNlbGVjdGVkTWF4RGF0ZSA9IHRoaXMuZGF0ZVRpbWVGb3JtYXRTZXJ2aWNlLmNvbnZlcnRUb05nYkRhdGUobWluTWF4RGF0ZVsxXSwgcGFyc2luZ0Zvcm1hdCk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBzZWxlY3RlZE1heERhdGUgPSB0aGlzLmRhdGVUaW1lRm9ybWF0U2VydmljZS5jb252ZXJ0VG9OZ2JEYXRlKHNlbGVjdGVkRGF0ZU9iai50b0RhdGUsIHBhcnNpbmdGb3JtYXQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgc2VsZWN0ZWRNaW5EYXRlID0gY2xvbmVEZWVwKG1pbkRhdGUpO1xyXG4gICAgICAgICAgICBzZWxlY3RlZE1heERhdGUgPSBjbG9uZURlZXAobWF4RGF0ZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gW3NlbGVjdGVkTWluRGF0ZSwgc2VsZWN0ZWRNYXhEYXRlXTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRQcmV2aW91c1NlbGVjdGVkRGF0ZXNGb3JDYWxlbmRhcihvcHRpb25EYXRhOiBhbnlbXSkge1xyXG4gICAgICAgIGxldCBwcmV2aW91c1NlbGVjdGVkRGF0ZTogeyBmcm9tRGF0ZTogYW55OyB0b0RhdGU6IGFueSB9ID0geyBmcm9tRGF0ZTogbnVsbCwgdG9EYXRlOiBudWxsIH07XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnRvb2x0aXBTZWxlY3RlZE1hcC5oYXModGhpcy5zZWxlY3RlZFJhZGlvKSkge1xyXG4gICAgICAgICAgICBwcmV2aW91c1NlbGVjdGVkRGF0ZSA9IHRoaXMudG9vbHRpcFNlbGVjdGVkTWFwLmdldCh0aGlzLnNlbGVjdGVkUmFkaW8pO1xyXG5cclxuICAgICAgICAgICAgaWYgKCF0aGlzLmluaXRpYWxWYWx1ZU1hcC5oYXModGhpcy5zZWxlY3RlZFJhZGlvKSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRJbml0aWFsVmFsdWVNYXBGb3JEYXRlRmlsdGVyKG9wdGlvbkRhdGEpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmluaXRpYWxWYWx1ZU1hcC5oYXModGhpcy5zZWxlY3RlZFJhZGlvKSkge1xyXG4gICAgICAgICAgICBwcmV2aW91c1NlbGVjdGVkRGF0ZSA9IHRoaXMuaW5pdGlhbFZhbHVlTWFwLmdldCh0aGlzLnNlbGVjdGVkUmFkaW8pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0SW5pdGlhbFZhbHVlTWFwRm9yRGF0ZUZpbHRlcihvcHRpb25EYXRhKTtcclxuICAgICAgICAgICAgcHJldmlvdXNTZWxlY3RlZERhdGUgPSB0aGlzLmluaXRpYWxWYWx1ZU1hcC5nZXQodGhpcy5zZWxlY3RlZFJhZGlvKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBwcmV2aW91c1NlbGVjdGVkRGF0ZTtcclxuICAgIH1cclxuXHJcbiAgICBzZXRJbml0aWFsVmFsdWVNYXBGb3JEYXRlRmlsdGVyKG9wdGlvbkRhdGE6IGFueVtdKSB7XHJcbiAgICAgICAgY29uc3QgbWluTWF4RGF0ZSA9IHRoaXMuY3JlYXRlUmFuZ2VGb3JUaGVEYXRlRmlsdGVyKG9wdGlvbkRhdGEpO1xyXG5cclxuICAgICAgICBjb25zdCBzZWxlY3RlZERhdGUgPSB7IGZyb21EYXRlOiBtaW5NYXhEYXRlWzBdLCB0b0RhdGU6IG1pbk1heERhdGVbMV0gfTtcclxuICAgICAgICB0aGlzLmluaXRpYWxWYWx1ZU1hcC5zZXQodGhpcy5zZWxlY3RlZFJhZGlvLCBzZWxlY3RlZERhdGUpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldEN1cnJlbnRTZWxlY3RlZERhdGVzRm9yQ2FsZW5kYXIoY3VycmVudFNlbGVjdGVkRGF0ZTogYW55LCBtaW5EYXRlOiBOZ2JEYXRlVHlwZSwgbWF4RGF0ZTogTmdiRGF0ZVR5cGUpIHtcclxuICAgICAgICBsZXQgY3VycmVudFNlbGVjdGVkRGF0ZVRvQmVVcGRhdGVkID0gY3VycmVudFNlbGVjdGVkRGF0ZTtcclxuICAgICAgICBjb25zdCBmcm9tRGF0ZSA9IHtcclxuICAgICAgICAgICAgeWVhcjogY3VycmVudFNlbGVjdGVkRGF0ZVRvQmVVcGRhdGVkLmZyb21EYXRlLnllYXIsXHJcbiAgICAgICAgICAgIG1vbnRoOiBjdXJyZW50U2VsZWN0ZWREYXRlVG9CZVVwZGF0ZWQuZnJvbURhdGUubW9udGgsXHJcbiAgICAgICAgICAgIGRheTogY3VycmVudFNlbGVjdGVkRGF0ZVRvQmVVcGRhdGVkLmZyb21EYXRlLmRheSxcclxuICAgICAgICB9O1xyXG4gICAgICAgIGNvbnN0IHRvRGF0ZSA9IHtcclxuICAgICAgICAgICAgeWVhcjogY3VycmVudFNlbGVjdGVkRGF0ZVRvQmVVcGRhdGVkLnRvRGF0ZS55ZWFyLFxyXG4gICAgICAgICAgICBtb250aDogY3VycmVudFNlbGVjdGVkRGF0ZVRvQmVVcGRhdGVkLnRvRGF0ZS5tb250aCxcclxuICAgICAgICAgICAgZGF5OiBjdXJyZW50U2VsZWN0ZWREYXRlVG9CZVVwZGF0ZWQudG9EYXRlLmRheSxcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICBpZiAoaXNFcXVhbChtaW5EYXRlLCBmcm9tRGF0ZSkgJiYgaXNFcXVhbChtYXhEYXRlLCB0b0RhdGUpICYmIHRoaXMuaW5pdGlhbFZhbHVlTWFwLmhhcyh0aGlzLnNlbGVjdGVkUmFkaW8pKSB7XHJcbiAgICAgICAgICAgIGN1cnJlbnRTZWxlY3RlZERhdGVUb0JlVXBkYXRlZCA9IHRoaXMuaW5pdGlhbFZhbHVlTWFwLmdldCh0aGlzLnNlbGVjdGVkUmFkaW8pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGN1cnJlbnRTZWxlY3RlZERhdGVUb0JlVXBkYXRlZC5mcm9tRGF0ZSA9IGRheWpzKFxyXG4gICAgICAgICAgICAgICAgdGhpcy5kYXRlVGltZUZvcm1hdFNlcnZpY2UuY29udmVydE5nYkRhdGVUb01vbWVudChjdXJyZW50U2VsZWN0ZWREYXRlVG9CZVVwZGF0ZWQuZnJvbURhdGUpLFxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICBjdXJyZW50U2VsZWN0ZWREYXRlVG9CZVVwZGF0ZWQudG9EYXRlID0gZGF5anMoXHJcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGVUaW1lRm9ybWF0U2VydmljZS5jb252ZXJ0TmdiRGF0ZVRvTW9tZW50KGN1cnJlbnRTZWxlY3RlZERhdGVUb0JlVXBkYXRlZC50b0RhdGUpLFxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGN1cnJlbnRTZWxlY3RlZERhdGVUb0JlVXBkYXRlZDtcclxuICAgIH1cclxuXHJcbiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1TTElERVI9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PS8vXHJcblxyXG4gICAgZ2V0U2xpZGVyVHJhbnNsYXRlRnVuY1ZhbChoZWFkZXI6IHN0cmluZywgY3VycmVuY3lTZXQ6IFNldDxzdHJpbmc+KSB7XHJcbiAgICAgICAgbGV0IHRyYW5zbGF0ZUZ1bmM7XHJcblxyXG4gICAgICAgIGlmIChjdXJyZW5jeVNldC5oYXMoaGVhZGVyKSkge1xyXG4gICAgICAgICAgICB0cmFuc2xhdGVGdW5jID0gXCJjdXJyZW5jeVwiO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoaGVhZGVyID09PSBcInBvc3RlZEF1ZFBlcmNlbnRcIiB8fCBoZWFkZXIgPT09IFwicGFyZW50Um93U2hhcmVzXCIgfHwgaGVhZGVyID09PSBcInBhcmVudFJvd1B1dFBlcmNlbnRcIikge1xyXG4gICAgICAgICAgICB0cmFuc2xhdGVGdW5jID0gXCJwZXJjZW50XCI7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdHJhbnNsYXRlRnVuYyA9IFwibm9ybWFsXCI7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdHJhbnNsYXRlRnVuYztcclxuICAgIH1cclxuXHJcbiAgICBnZXRTbGlkZXJPcHRpb25zKG9wdGlvbnNEYXRhOiBhbnlbXSwgdHJhbnNsYXRlRnVuYzogc3RyaW5nLCBoZWFkZXI6IHN0cmluZykge1xyXG4gICAgICAgIGNvbnN0IG1pblZhbHVlID0gdGhpcy5yZXR1cm5NYXhBbmRNaW5WYWx1ZShvcHRpb25zRGF0YSwgaGVhZGVyLCB0cnVlKTtcclxuICAgICAgICBjb25zdCBtYXhWYWx1ZSA9IHRoaXMucmV0dXJuTWF4QW5kTWluVmFsdWUob3B0aW9uc0RhdGEsIGhlYWRlciwgZmFsc2UpO1xyXG5cclxuICAgICAgICBjb25zdCBvYmogPSB0aGlzLnNldE9wdGlvblZhbHVlcyhtaW5WYWx1ZSwgbWF4VmFsdWUpO1xyXG5cclxuICAgICAgICBpZiAodHJhbnNsYXRlRnVuYyA9PT0gXCJub3JtYWxcIikge1xyXG4gICAgICAgICAgICBvYmoudHJhbnNsYXRlID0gdGhpcy5ub3JtYWxUcmFuc2xhdGVGdW5jdGlvbjtcclxuICAgICAgICB9IGVsc2UgaWYgKHRyYW5zbGF0ZUZ1bmMgPT09IFwicGVyY2VudFwiKSB7XHJcbiAgICAgICAgICAgIG9iai50cmFuc2xhdGUgPSB0aGlzLnBlcmNlbnRUcmFuc2xhdGVGdW5jdGlvbjtcclxuICAgICAgICB9IGVsc2UgaWYgKHRyYW5zbGF0ZUZ1bmMgPT09IFwiY3VycmVuY3lcIikge1xyXG4gICAgICAgICAgICBvYmoudHJhbnNsYXRlID0gdGhpcy5jdXJyZW5jeVRyYW5zbGF0ZUZ1bmN0aW9uO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIG9iajtcclxuICAgIH1cclxuXHJcbiAgICBzZXRTZWxlY3RlZFJhbmdlRm9yU2xpZGVyKGhlYWRlcjogc3RyaW5nLCBvcHRpb25zOiBPcHRpb25zKSB7XHJcbiAgICAgICAgbGV0IHNsaWRlck1pblZhbHVlO1xyXG4gICAgICAgIGxldCBzbGlkZXJNYXhWYWx1ZTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMudG9vbHRpcFNlbGVjdGVkTWFwLmhhcyhoZWFkZXIpKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHNlbGVjdGVkT2JqID0gdGhpcy50b29sdGlwU2VsZWN0ZWRNYXAuZ2V0KGhlYWRlcik7XHJcbiAgICAgICAgICAgIHNsaWRlck1pblZhbHVlID0gc2VsZWN0ZWRPYmoubWluIDwgb3B0aW9ucy5mbG9vciA/IG9wdGlvbnMuZmxvb3IgOiBzZWxlY3RlZE9iai5taW47XHJcbiAgICAgICAgICAgIHNsaWRlck1heFZhbHVlID0gc2VsZWN0ZWRPYmoubWF4IDwgb3B0aW9ucy5jZWlsID8gc2VsZWN0ZWRPYmoubWF4IDogb3B0aW9ucy5jZWlsO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHNsaWRlck1pblZhbHVlID0gb3B0aW9ucy5mbG9vcjtcclxuICAgICAgICAgICAgc2xpZGVyTWF4VmFsdWUgPSBvcHRpb25zLmNlaWw7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gW3NsaWRlck1pblZhbHVlLCBzbGlkZXJNYXhWYWx1ZV07XHJcbiAgICB9XHJcblxyXG4gICAgaXNWYWx1ZUluUmFuZ2Uob3B0aW9uczogT3B0aW9ucywgdmFsOiBudW1iZXIpIHtcclxuICAgICAgICByZXR1cm4gb3B0aW9ucy5mbG9vciA8PSB2YWwgJiYgdmFsIDw9IG9wdGlvbnMuY2VpbDtcclxuICAgIH1cclxuXHJcbiAgICBnZXRQcmV2aW91c1NlbGVjdGVkVmFsdWVGb3JTbGlkZXIoY2xvbmVkRGF0YTogYW55W10pIHtcclxuICAgICAgICBsZXQgcHJldmlvdXNTbGlkZXJEYXRhOiB7IG1pbjogYW55OyBtYXg6IGFueSB9ID0geyBtaW46IFwiXCIsIG1heDogXCJcIiB9O1xyXG5cclxuICAgICAgICBpZiAodGhpcy50b29sdGlwU2VsZWN0ZWRNYXAuaGFzKHRoaXMuc2VsZWN0ZWRSYWRpbykpIHtcclxuICAgICAgICAgICAgcHJldmlvdXNTbGlkZXJEYXRhID0gdGhpcy50b29sdGlwU2VsZWN0ZWRNYXAuZ2V0KHRoaXMuc2VsZWN0ZWRSYWRpbyk7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5pbml0aWFsVmFsdWVNYXAuaGFzKHRoaXMuc2VsZWN0ZWRSYWRpbykpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0SW5pdGlhbFZhbHVlTWFwRm9yU2xpZGVyRmlsdGVyKGNsb25lZERhdGEpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmluaXRpYWxWYWx1ZU1hcC5oYXModGhpcy5zZWxlY3RlZFJhZGlvKSkge1xyXG4gICAgICAgICAgICBwcmV2aW91c1NsaWRlckRhdGEgPSB0aGlzLmluaXRpYWxWYWx1ZU1hcC5nZXQodGhpcy5zZWxlY3RlZFJhZGlvKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnNldEluaXRpYWxWYWx1ZU1hcEZvclNsaWRlckZpbHRlcihjbG9uZWREYXRhKTtcclxuICAgICAgICAgICAgcHJldmlvdXNTbGlkZXJEYXRhID0gdGhpcy5pbml0aWFsVmFsdWVNYXAuZ2V0KHRoaXMuc2VsZWN0ZWRSYWRpbyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gcHJldmlvdXNTbGlkZXJEYXRhO1xyXG4gICAgfVxyXG5cclxuICAgIHNldEluaXRpYWxWYWx1ZU1hcEZvclNsaWRlckZpbHRlcihjbG9uZWREYXRhOiBhbnlbXSkge1xyXG4gICAgICAgIGNvbnN0IG1pblZhbHVlID0gdGhpcy5yZXR1cm5NYXhBbmRNaW5WYWx1ZShjbG9uZWREYXRhLCB0aGlzLnNlbGVjdGVkUmFkaW8sIHRydWUpO1xyXG4gICAgICAgIGNvbnN0IG1heFZhbHVlID0gdGhpcy5yZXR1cm5NYXhBbmRNaW5WYWx1ZShjbG9uZWREYXRhLCB0aGlzLnNlbGVjdGVkUmFkaW8sIGZhbHNlKTtcclxuICAgICAgICBjb25zdCBzbGlkZXJEYXRhID0geyBtaW46IG1pblZhbHVlLCBtYXg6IG1heFZhbHVlIH07XHJcbiAgICAgICAgdGhpcy5pbml0aWFsVmFsdWVNYXAuc2V0KHRoaXMuc2VsZWN0ZWRSYWRpbywgc2xpZGVyRGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0Q3VycmVudFNlbGVjdGVkVmFsdWVGb3JTbGlkZXIobWluRW50ZXJlZFZhbDogbnVtYmVyLCBtYXhFbnRlcmVkVmFsOiBudW1iZXIsIG9wdGlvbnM6IE9wdGlvbnMpIHtcclxuICAgICAgICBsZXQgY3VycmVudFNsaWRlckRhdGE6IHsgbWluOiBhbnk7IG1heDogYW55IH0gPSB7IG1pbjogbnVsbCwgbWF4OiBudWxsIH07XHJcbiAgICAgICAgY3VycmVudFNsaWRlckRhdGEubWF4ID0gbWF4RW50ZXJlZFZhbDtcclxuICAgICAgICBjdXJyZW50U2xpZGVyRGF0YS5taW4gPSBtaW5FbnRlcmVkVmFsO1xyXG5cclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgIGN1cnJlbnRTbGlkZXJEYXRhLm1pbiA9PT0gb3B0aW9ucy5mbG9vciAmJlxyXG4gICAgICAgICAgICBjdXJyZW50U2xpZGVyRGF0YS5tYXggPT09IG9wdGlvbnMuY2VpbCAmJlxyXG4gICAgICAgICAgICB0aGlzLmluaXRpYWxWYWx1ZU1hcC5oYXModGhpcy5zZWxlY3RlZFJhZGlvKVxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgICBjdXJyZW50U2xpZGVyRGF0YSA9IHRoaXMuaW5pdGlhbFZhbHVlTWFwLmdldCh0aGlzLnNlbGVjdGVkUmFkaW8pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGN1cnJlbnRTbGlkZXJEYXRhO1xyXG4gICAgfVxyXG5cclxuICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1USU1FPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ly9cclxuICAgIGdldFNlbGVjdGVkVGltZVJhbmdlKGhlYWRlcjogc3RyaW5nLCBjbG9uZWREYXRhOiBhbnlbXSkge1xyXG4gICAgICAgIGxldCBzZWxlY3RlZEZyb21UaW1lOiBhbnlbXTtcclxuICAgICAgICBsZXQgc2VsZWN0ZWRUb1RpbWU6IGFueVtdO1xyXG5cclxuICAgICAgICBpZiAodGhpcy50b29sdGlwU2VsZWN0ZWRNYXAuaGFzKGhlYWRlcikpIHtcclxuICAgICAgICAgICAgc2VsZWN0ZWRGcm9tVGltZSA9IHRoaXMudG9vbHRpcFNlbGVjdGVkTWFwLmdldChoZWFkZXIpLmZyb21UaW1lO1xyXG4gICAgICAgICAgICBzZWxlY3RlZFRvVGltZSA9IHRoaXMudG9vbHRpcFNlbGVjdGVkTWFwLmdldChoZWFkZXIpLnRvVGltZTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnNldEluaXRpYWxWYWx1ZU1hcEZvclRpbWVGaWx0ZXIoY2xvbmVkRGF0YSwgaGVhZGVyKTtcclxuICAgICAgICAgICAgc2VsZWN0ZWRGcm9tVGltZSA9IHRoaXMuaW5pdGlhbFZhbHVlTWFwLmdldChoZWFkZXIpLmZyb21UaW1lO1xyXG4gICAgICAgICAgICBzZWxlY3RlZFRvVGltZSA9IHRoaXMuaW5pdGlhbFZhbHVlTWFwLmdldChoZWFkZXIpLnRvVGltZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChzZWxlY3RlZEZyb21UaW1lICE9PSB1bmRlZmluZWQgfHwgc2VsZWN0ZWRUb1RpbWUgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICBzZWxlY3RlZEZyb21UaW1lID0gQW5uYURhdGVUaW1lRm9ybWF0U2VydmljZS5mb3JtYXRUb1R3ZWx2ZUhycyhzZWxlY3RlZEZyb21UaW1lLCB0cnVlKTtcclxuICAgICAgICAgICAgc2VsZWN0ZWRUb1RpbWUgPSBBbm5hRGF0ZVRpbWVGb3JtYXRTZXJ2aWNlLmZvcm1hdFRvVHdlbHZlSHJzKHNlbGVjdGVkVG9UaW1lLCB0cnVlKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBzZWxlY3RlZEZyb21UaW1lID0gW1wiLVwiLCBcIi1cIiwgXCItXCJdO1xyXG4gICAgICAgICAgICBzZWxlY3RlZFRvVGltZSA9IFtcIi1cIiwgXCItXCIsIFwiLVwiXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBbc2VsZWN0ZWRGcm9tVGltZSwgc2VsZWN0ZWRUb1RpbWVdO1xyXG4gICAgfVxyXG5cclxuICAgIHNldEluaXRpYWxWYWx1ZU1hcEZvclRpbWVGaWx0ZXIoY2xvbmVkRGF0YTogYW55W10sIGtleTogc3RyaW5nKSB7XHJcbiAgICAgICAgaWYgKGtleSA9PT0gXCJzdGFydEVuZFRpbWVcIiB8fCBrZXkgPT09IFwiVGltZUJhbmRcIikge1xyXG4gICAgICAgICAgICB0aGlzLnNldEluaXRpYWxWYWx1ZUZvclN0YXJ0QW5kRW5kVGltZVJhbmdlKGNsb25lZERhdGEsIGtleSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5zZXRJbml0aWFsVmFsdWVGb3JTdGFydE9yRW5kVGltZVJhbmdlKGNsb25lZERhdGEsIGtleSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIHVzZSBmb3IgZmlsdGVyIHdoZXJlIHdlIGhhdmUgc3RhcnQgYW5kIGVuZCB0aW1lIHJhbmdlIGluIG9uZSBmaWx0ZXJcclxuICAgIC8vIHN0YXJ0RW5kVGltZTogW1wiNiAtIDdBXCIsIFwiMDY6IDAwIDogMDBcIiAsIFwiMDc6MDA6MDBcIl1cclxuICAgIHNldEluaXRpYWxWYWx1ZUZvclN0YXJ0QW5kRW5kVGltZVJhbmdlKGNsb25lZERhdGE6IGFueVtdLCBrZXk6IHN0cmluZykge1xyXG4gICAgICAgIGNvbnN0IGluY2x1ZGVNdWx0aSA9IGNsb25lZERhdGEuZmluZEluZGV4KChvYmopID0+IG9ialtrZXldWzBdID09PSBcIjxtdWx0aT5cIikgIT09IC0xO1xyXG4gICAgICAgIGNvbnN0IGluY2x1ZGVaZXJvID0gY2xvbmVkRGF0YS5maW5kSW5kZXgoKG9iaikgPT4gb2JqW2tleV1bMF0gPT09IFwiMFwiKSAhPT0gLTE7XHJcbiAgICAgICAgY29uc3QgaW5jbHVkZVRpbWVSYW5nZSA9IGNsb25lZERhdGEuZmluZEluZGV4KChvYmopID0+IG9ialtrZXldWzBdICE9PSBcIjBcIiAmJiBvYmpba2V5XVswXSAhPT0gXCI8bXVsdGk+XCIpICE9PSAtMTtcclxuXHJcbiAgICAgICAgY29uc3QgZmlsdGVyZWRTdGFydFRpbWUgPSBjbG9uZWREYXRhLmZpbHRlcigob2JqKSA9PiAhW1wiXCIsIFwiLVwiLCBudWxsLCBcIjBcIiwgXCI8bXVsdGk+XCJdLmluY2x1ZGVzKG9iai5zdGFydFRpbWUpKTtcclxuICAgICAgICBjb25zdCBmaWx0ZXJlZEVuZFRpbWUgPSBjbG9uZWREYXRhLmZpbHRlcigob2JqKSA9PiAhW1wiXCIsIFwiLVwiLCBudWxsLCBcIjBcIiwgXCI8bXVsdGk+XCJdLmluY2x1ZGVzKG9iai5lbmRUaW1lKSk7XHJcblxyXG4gICAgICAgIGNvbnN0IHN0YXJ0VGltZUFyciA9IG1hcChmaWx0ZXJlZFN0YXJ0VGltZSwgXCJzdGFydFRpbWVcIik7XHJcbiAgICAgICAgY29uc3QgZW5kVGltZUFyciA9IG1hcChmaWx0ZXJlZEVuZFRpbWUsIFwiZW5kVGltZVwiKTtcclxuXHJcbiAgICAgICAgc3RhcnRUaW1lQXJyLnNvcnQoKGEsIGIpID0+IHRoaXMuZGF0ZVRpbWVGb3JtYXRTZXJ2aWNlLnNvcnRCeVRpbWVBc2NlbmRpbmcoYSwgYikpO1xyXG5cclxuICAgICAgICBlbmRUaW1lQXJyLnNvcnQoKGEsIGIpID0+IHRoaXMuZGF0ZVRpbWVGb3JtYXRTZXJ2aWNlLnNvcnRCeVRpbWVEZXNjZW5kaW5nKGEsIGIpKTtcclxuXHJcbiAgICAgICAgY29uc3Qgb2JqID0ge1xyXG4gICAgICAgICAgICBmcm9tVGltZTogc3RhcnRUaW1lQXJyWzBdLFxyXG4gICAgICAgICAgICB0b1RpbWU6IGVuZFRpbWVBcnJbMF0sXHJcbiAgICAgICAgICAgIGluY2x1ZGVNdWx0aSxcclxuICAgICAgICAgICAgaW5jbHVkZVplcm8sXHJcbiAgICAgICAgICAgIGluY2x1ZGVUaW1lUmFuZ2UsXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgdGhpcy5pbml0aWFsVmFsdWVNYXAuc2V0KGtleSwgb2JqKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyB1c2UgZm9yIHRoZSBmaWx0ZXJzIHdoZXJlIHdlIGhhdmUgZGlmZmVyZW50IGZpbHRlciBmb3Igc3RhcnQgYW5kIGVuZCB0aW1lXHJcbiAgICAvLyBzdGFydFRpbWU6IFwiMDY6MDA6MDBcIlxyXG4gICAgc2V0SW5pdGlhbFZhbHVlRm9yU3RhcnRPckVuZFRpbWVSYW5nZShjbG9uZWREYXRhOiBhbnlbXSwga2V5OiBzdHJpbmcpIHtcclxuICAgICAgICBjb25zdCBpbmNsdWRlTXVsdGkgPSBjbG9uZWREYXRhLmZpbmRJbmRleCgob2JqKSA9PiBvYmpba2V5XSA9PT0gXCI8bXVsdGk+XCIpICE9PSAtMTtcclxuICAgICAgICBjb25zdCBpbmNsdWRlWmVybyA9IGNsb25lZERhdGEuZmluZEluZGV4KChvYmopID0+IG9ialtrZXldID09PSBcIjBcIikgIT09IC0xO1xyXG4gICAgICAgIGNvbnN0IGluY2x1ZGVUaW1lUmFuZ2UgPSBjbG9uZWREYXRhLmZpbmRJbmRleCgob2JqKSA9PiBvYmpba2V5XSAhPT0gXCIwXCIgJiYgb2JqW2tleV0gIT09IFwiPG11bHRpPlwiKSAhPT0gLTE7XHJcblxyXG4gICAgICAgIGNvbnN0IGRhdGEgPSBjbG9uZWREYXRhLmZpbHRlcigob2JqKSA9PiAhW1wiXCIsIFwiLVwiLCBudWxsLCBcIjBcIiwgXCI8bXVsdGk+XCJdLmluY2x1ZGVzKG9ialtrZXldKSk7XHJcblxyXG4gICAgICAgIGNvbnN0IHRpbWVBcnIgPSBtYXAoZGF0YSwga2V5KTtcclxuICAgICAgICB0aW1lQXJyLnNvcnQoKGEsIGIpID0+IHRoaXMuZGF0ZVRpbWVGb3JtYXRTZXJ2aWNlLnNvcnRCeVRpbWVBc2NlbmRpbmcoYSwgYikpO1xyXG5cclxuICAgICAgICBjb25zdCBvYmogPSB7XHJcbiAgICAgICAgICAgIGZyb21UaW1lOiB0aW1lQXJyWzBdLFxyXG4gICAgICAgICAgICB0b1RpbWU6IHRpbWVBcnJbdGltZUFyci5sZW5ndGggLSAxXSxcclxuICAgICAgICAgICAgaW5jbHVkZU11bHRpLFxyXG4gICAgICAgICAgICBpbmNsdWRlWmVybyxcclxuICAgICAgICAgICAgaW5jbHVkZVRpbWVSYW5nZSxcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICB0aGlzLmluaXRpYWxWYWx1ZU1hcC5zZXQoa2V5LCBvYmopO1xyXG4gICAgfVxyXG5cclxuICAgIHNlbGVjdFVuc2VsZWN0VGltZUZpbHRlckNoZWNrYm94KGtleTogc3RyaW5nLCBvcHRpb25zRGF0YTogYW55W10pIHtcclxuICAgICAgICBsZXQgc2hvd011bHRpVGltZUNoZWNrYm94ID0gZmFsc2U7XHJcbiAgICAgICAgbGV0IHNob3daZXJvVGltZUNoZWNrYm94ID0gZmFsc2U7XHJcbiAgICAgICAgbGV0IHNob3dFbnRlclRpbWVDaGVja2JveCA9IGZhbHNlO1xyXG4gICAgICAgIGxldCBtdWx0aVRpbWVDaGVja2JveENoZWNrZWQgPSBmYWxzZTtcclxuICAgICAgICBsZXQgemVyb1RpbWVDaGVja2JveENoZWNrZWQgPSBmYWxzZTtcclxuICAgICAgICBsZXQgZW50ZXJUaW1lQ2hlY2tib3hDaGVja2VkID0gZmFsc2U7XHJcblxyXG4gICAgICAgIGxldCBzZWxlY3RlZFRpbWVPYmo7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnRvb2x0aXBTZWxlY3RlZE1hcC5oYXMoa2V5KSkge1xyXG4gICAgICAgICAgICBzZWxlY3RlZFRpbWVPYmogPSB0aGlzLnRvb2x0aXBTZWxlY3RlZE1hcC5nZXQoa2V5KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBzZWxlY3RlZFRpbWVPYmogPSB0aGlzLmluaXRpYWxWYWx1ZU1hcC5nZXQoa2V5KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCB0aW1lQXJyOiBzdHJpbmdbXTtcclxuICAgICAgICBpZiAoa2V5ID09PSBcInN0YXJ0RW5kVGltZVwiIHx8IGtleSA9PT0gXCJUaW1lQmFuZFwiKSB7XHJcbiAgICAgICAgICAgIHRpbWVBcnIgPSBvcHRpb25zRGF0YS5tYXAoKGl0ZW0pID0+IGl0ZW1ba2V5XVswXSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGltZUFyciA9IG9wdGlvbnNEYXRhLm1hcCgoaXRlbSkgPT4gaXRlbVtrZXldKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aW1lQXJyLmZpbmRJbmRleCgodmFsKSA9PiB2YWwgPT09IFwiMFwiKSAhPT0gLTEpIHtcclxuICAgICAgICAgICAgc2hvd1plcm9UaW1lQ2hlY2tib3ggPSB0cnVlO1xyXG4gICAgICAgICAgICB6ZXJvVGltZUNoZWNrYm94Q2hlY2tlZCA9IHNlbGVjdGVkVGltZU9iai5pbmNsdWRlWmVybztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aW1lQXJyLmZpbmRJbmRleCgodmFsKSA9PiB2YWwgPT09IFwiPG11bHRpPlwiKSAhPT0gLTEpIHtcclxuICAgICAgICAgICAgc2hvd011bHRpVGltZUNoZWNrYm94ID0gdHJ1ZTtcclxuICAgICAgICAgICAgbXVsdGlUaW1lQ2hlY2tib3hDaGVja2VkID0gc2VsZWN0ZWRUaW1lT2JqLmluY2x1ZGVNdWx0aTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChzaG93WmVyb1RpbWVDaGVja2JveCB8fCBzaG93TXVsdGlUaW1lQ2hlY2tib3gpIHtcclxuICAgICAgICAgICAgc2hvd0VudGVyVGltZUNoZWNrYm94ID0gdHJ1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aW1lQXJyLmZpbmRJbmRleCgodmFsKSA9PiB2YWwgIT09IFwiPG11bHRpPlwiICYmIHZhbCAhPT0gXCIwXCIpICE9PSAtMSkge1xyXG4gICAgICAgICAgICBlbnRlclRpbWVDaGVja2JveENoZWNrZWQgPSBzZWxlY3RlZFRpbWVPYmo/LmluY2x1ZGVUaW1lUmFuZ2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBzaG93TXVsdGlUaW1lQ2hlY2tib3gsXHJcbiAgICAgICAgICAgIHNob3daZXJvVGltZUNoZWNrYm94LFxyXG4gICAgICAgICAgICBzaG93RW50ZXJUaW1lQ2hlY2tib3gsXHJcbiAgICAgICAgICAgIG11bHRpVGltZUNoZWNrYm94Q2hlY2tlZCxcclxuICAgICAgICAgICAgemVyb1RpbWVDaGVja2JveENoZWNrZWQsXHJcbiAgICAgICAgICAgIGVudGVyVGltZUNoZWNrYm94Q2hlY2tlZCxcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIGNoZWNrSWZTdGFydFRpbWVJc0FmdGVyRW5kVGltZShzdGFydFRpbWU6IHN0cmluZ1tdLCBlbmRUaW1lOiBzdHJpbmdbXSkge1xyXG4gICAgICAgIGNvbnN0IHRpbWVGb3JtYXQgPSBcIkhIOm1tOnNzXCI7XHJcblxyXG4gICAgICAgIGNvbnN0IHN0YXJ0VGltZTI0SHJGb3JtYXRBcnIgPSB0aGlzLmRhdGVUaW1lRm9ybWF0U2VydmljZS5jb252ZXJ0VG90d2VudHlGb3VySHJzRm9ybWF0KFxyXG4gICAgICAgICAgICBgJHtzdGFydFRpbWVbMF19OiR7c3RhcnRUaW1lWzFdfSAke3N0YXJ0VGltZVsyXX1gLFxyXG4gICAgICAgICAgICB0cnVlLFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgY29uc3Qgc3RhcnRUaW1lMjRIckZvcm1hdCA9IGAke3N0YXJ0VGltZTI0SHJGb3JtYXRBcnJbMF19OiR7c3RhcnRUaW1lMjRIckZvcm1hdEFyclsxXX06MDBgO1xyXG4gICAgICAgIGNvbnN0IGVuZFRpbWUyNEhyRm9ybWF0QXJyID0gdGhpcy5kYXRlVGltZUZvcm1hdFNlcnZpY2UuY29udmVydFRvdHdlbnR5Rm91ckhyc0Zvcm1hdChcclxuICAgICAgICAgICAgYCR7ZW5kVGltZVswXX06JHtlbmRUaW1lWzFdfSAke2VuZFRpbWVbMl19YCxcclxuICAgICAgICAgICAgdHJ1ZSxcclxuICAgICAgICApO1xyXG4gICAgICAgIGNvbnN0IGVuZFRpbWUyNEhyRm9ybWF0ID0gYCR7ZW5kVGltZTI0SHJGb3JtYXRBcnJbMF19OiR7ZW5kVGltZTI0SHJGb3JtYXRBcnJbMV19OjAwYDtcclxuICAgICAgICByZXR1cm4gZGF5anMoc3RhcnRUaW1lMjRIckZvcm1hdCwgdGltZUZvcm1hdCkuaXNBZnRlcihkYXlqcyhlbmRUaW1lMjRIckZvcm1hdCwgdGltZUZvcm1hdCkpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldFByZXZpb3VzU2VsZWN0ZWRUaW1lRmlsdGVyKCkge1xyXG4gICAgICAgIGxldCBwcmV2aW91c1NlbGVjdGVkVGltZUZpbHRlcjtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMudG9vbHRpcFNlbGVjdGVkTWFwLmhhcyh0aGlzLnNlbGVjdGVkUmFkaW8pKSB7XHJcbiAgICAgICAgICAgIHByZXZpb3VzU2VsZWN0ZWRUaW1lRmlsdGVyID0gdGhpcy50b29sdGlwU2VsZWN0ZWRNYXAuZ2V0KHRoaXMuc2VsZWN0ZWRSYWRpbyk7XHJcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmluaXRpYWxWYWx1ZU1hcC5oYXModGhpcy5zZWxlY3RlZFJhZGlvKSkge1xyXG4gICAgICAgICAgICBwcmV2aW91c1NlbGVjdGVkVGltZUZpbHRlciA9IHRoaXMuaW5pdGlhbFZhbHVlTWFwLmdldCh0aGlzLnNlbGVjdGVkUmFkaW8pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHByZXZpb3VzU2VsZWN0ZWRUaW1lRmlsdGVyO1xyXG4gICAgfVxyXG5cclxuICAgIGdldEN1cnJlbnRTZWxlY3RlZFRpbWVGaWx0ZXIoXHJcbiAgICAgICAgc3RhcnRUaW1lOiBzdHJpbmdbXSxcclxuICAgICAgICBlbmRUaW1lOiBzdHJpbmdbXSxcclxuICAgICAgICBpbmNsdWRlTXVsdGk6IGJvb2xlYW4sXHJcbiAgICAgICAgaW5jbHVkZVplcm86IGJvb2xlYW4sXHJcbiAgICAgICAgaW5jbHVkZVRpbWVSYW5nZTogYm9vbGVhbixcclxuICAgICkge1xyXG4gICAgICAgIGNvbnN0IGZyb21UaW1lMjRIckZvcm1hdEFyciA9IHRoaXMuZGF0ZVRpbWVGb3JtYXRTZXJ2aWNlLmNvbnZlcnRUb3R3ZW50eUZvdXJIcnNGb3JtYXQoXHJcbiAgICAgICAgICAgIGAke3N0YXJ0VGltZVswXX06JHtzdGFydFRpbWVbMV19ICR7c3RhcnRUaW1lWzJdfWAsXHJcbiAgICAgICAgICAgIHRydWUsXHJcbiAgICAgICAgKTtcclxuICAgICAgICBjb25zdCBmcm9tVGltZTI0SHJGb3JtYXQgPSBgJHtmcm9tVGltZTI0SHJGb3JtYXRBcnJbMF19OiR7ZnJvbVRpbWUyNEhyRm9ybWF0QXJyWzFdfTowMGA7XHJcblxyXG4gICAgICAgIGNvbnN0IHRvVGltZTI0SHJGb3JtYXRBcnIgPSB0aGlzLmRhdGVUaW1lRm9ybWF0U2VydmljZS5jb252ZXJ0VG90d2VudHlGb3VySHJzRm9ybWF0KFxyXG4gICAgICAgICAgICBgJHtlbmRUaW1lWzBdfToke2VuZFRpbWVbMV19ICR7ZW5kVGltZVsyXX1gLFxyXG4gICAgICAgICAgICB0cnVlLFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgY29uc3QgdG9UaW1lMjRIckZvcm1hdCA9IGAke3RvVGltZTI0SHJGb3JtYXRBcnJbMF19OiR7dG9UaW1lMjRIckZvcm1hdEFyclsxXX06MDBgO1xyXG5cclxuICAgICAgICBjb25zdCBjdXJyZW50U2VsZWN0ZWRUaW1lRmlsdGVyID0ge1xyXG4gICAgICAgICAgICBmcm9tVGltZTogZnJvbVRpbWUyNEhyRm9ybWF0LFxyXG4gICAgICAgICAgICB0b1RpbWU6IHRvVGltZTI0SHJGb3JtYXQsXHJcbiAgICAgICAgICAgIGluY2x1ZGVNdWx0aSxcclxuICAgICAgICAgICAgaW5jbHVkZVplcm8sXHJcbiAgICAgICAgICAgIGluY2x1ZGVUaW1lUmFuZ2UsXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgcmV0dXJuIGN1cnJlbnRTZWxlY3RlZFRpbWVGaWx0ZXI7XHJcbiAgICB9XHJcblxyXG4gICAgaW5jcmVtZW50SG91cklucHV0KGFycjogYW55W10pIHtcclxuICAgICAgICBpZiAoYXJyWzBdID09PSBcIlwiKSB7XHJcbiAgICAgICAgICAgIGFyclswXSA9IDE7XHJcbiAgICAgICAgfSBlbHNlIGlmIChwYXJzZUludChhcnJbMF0sIDEwKSA8IDEyKSB7XHJcbiAgICAgICAgICAgIGFyclswXSA9IHBhcnNlSW50KGFyclswXSwgMTApICsgMTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBhcnJbMF0gPSAxO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBkZWNyZW1lbnRIb3VySW5wdXQoYXJyOiBhbnlbXSkge1xyXG4gICAgICAgIGlmIChhcnJbMF0gPT09IFwiXCIpIHtcclxuICAgICAgICAgICAgYXJyWzBdID0gMTI7XHJcbiAgICAgICAgfSBlbHNlIGlmIChwYXJzZUludChhcnJbMF0sIDEwKSA+IDEpIHtcclxuICAgICAgICAgICAgYXJyWzBdID0gcGFyc2VJbnQoYXJyWzBdLCAxMCkgLSAxO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGFyclswXSA9IDEyO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpbmNyZW1lbnRNaW51dGVJbnB1dChhcnI6IGFueVtdKSB7XHJcbiAgICAgICAgLy8gaW5jcmVtZW50IHRvIG5lYXJlc3QgcHJvcGVyIGludGVydmFsKDE1LDMwLDQ1KVxyXG4gICAgICAgIGNvbnN0IG1pbnV0ZSA9IHBhcnNlSW50KGFyclsxXSwgMTApO1xyXG4gICAgICAgIGlmIChtaW51dGUgPD0gMTQpIHtcclxuICAgICAgICAgICAgYXJyWzFdID0gXCIxNVwiO1xyXG4gICAgICAgIH0gZWxzZSBpZiAobWludXRlID49IDE1ICYmIG1pbnV0ZSA8PSAyOSkge1xyXG4gICAgICAgICAgICBhcnJbMV0gPSBcIjMwXCI7XHJcbiAgICAgICAgfSBlbHNlIGlmIChtaW51dGUgPj0gMzAgJiYgbWludXRlIDw9IDQ0KSB7XHJcbiAgICAgICAgICAgIGFyclsxXSA9IFwiNDVcIjtcclxuICAgICAgICB9IGVsc2UgaWYgKG1pbnV0ZSA+PSA0NSkge1xyXG4gICAgICAgICAgICBhcnJbMV0gPSBcIjAwXCI7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGRlY3JlbWVudE1pbnV0ZUlucHV0KGFycjogYW55KSB7XHJcbiAgICAgICAgY29uc3QgbWludXRlID0gcGFyc2VJbnQoYXJyWzFdLCAxMCk7XHJcbiAgICAgICAgaWYgKG1pbnV0ZSA+IDAgJiYgbWludXRlIDw9IDE1KSB7XHJcbiAgICAgICAgICAgIGFyclsxXSA9IFwiMDBcIjtcclxuICAgICAgICB9IGVsc2UgaWYgKG1pbnV0ZSA+PSAxNiAmJiBtaW51dGUgPD0gMzApIHtcclxuICAgICAgICAgICAgYXJyWzFdID0gXCIxNVwiO1xyXG4gICAgICAgIH0gZWxzZSBpZiAobWludXRlID49IDMxICYmIG1pbnV0ZSA8PSA0NSkge1xyXG4gICAgICAgICAgICBhcnJbMV0gPSBcIjMwXCI7XHJcbiAgICAgICAgfSBlbHNlIGlmIChtaW51dGUgPiA0NSB8fCBtaW51dGUgPT09IDApIHtcclxuICAgICAgICAgICAgYXJyWzFdID0gXCI0NVwiO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpbmNyZW1lbnRPckRlY3JlbWVudEhvdXIoaW5jcmVtZW50OiBib29sZWFuLCB0aW1lOiBzdHJpbmdbXSkge1xyXG4gICAgICAgIGlmIChpbmNyZW1lbnQpIHtcclxuICAgICAgICAgICAgdGhpcy5pbmNyZW1lbnRIb3VySW5wdXQodGltZSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5kZWNyZW1lbnRIb3VySW5wdXQodGltZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGluY3JlbWVudE9yRGVjcmVtZW50TWluKGluY3JlbWVudDogYm9vbGVhbiwgdGltZTogc3RyaW5nW10pIHtcclxuICAgICAgICBpZiAoaW5jcmVtZW50KSB7XHJcbiAgICAgICAgICAgIHRoaXMuaW5jcmVtZW50TWludXRlSW5wdXQodGltZSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5kZWNyZW1lbnRNaW51dGVJbnB1dCh0aW1lKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaXNIb3VyVmFsdWVJbnZhbGlkKGhyOiBzdHJpbmcpIHtcclxuICAgICAgICByZXR1cm4gaHIubGVuZ3RoID09PSAwIHx8ICEraHIgfHwgcGFyc2VJbnQoaHIsIDEwKSA8IDEgfHwgcGFyc2VJbnQoaHIsIDEwKSA+IDEyIHx8IGhyLmluY2x1ZGVzKFwiLlwiKTtcclxuICAgIH1cclxuXHJcbiAgICBpc01pbnV0ZVZhbHVlSW52YWxpZChtaW51dGU6IHN0cmluZykge1xyXG4gICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgIG1pbnV0ZS5sZW5ndGggIT09IDIgfHxcclxuICAgICAgICAgICAgKCErbWludXRlICYmIG1pbnV0ZSAhPT0gXCIwMFwiKSB8fFxyXG4gICAgICAgICAgICBwYXJzZUludChtaW51dGUsIDEwKSA8IDAgfHxcclxuICAgICAgICAgICAgcGFyc2VJbnQobWludXRlLCAxMCkgPiA1OSB8fFxyXG4gICAgICAgICAgICBtaW51dGUuaW5jbHVkZXMoXCIuXCIpXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09U09SVD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PS8vXHJcbiAgICB1cGRhdGVTb3J0TWFwKHRlbXBTb3J0T3JkZXI6IFNvcnRUeXBlLCB0YWJsZURhdGE6IGFueVtdLCBpc0x1ckFuZENzckNvbXBvbmVudDogYm9vbGVhbikge1xyXG4gICAgICAgIHRoaXMuYW5uYVNvcnRTZXJ2aWNlLmNvbHVtblNvcnRTdGF0ZSA9IG5ldyBNYXAoKTtcclxuICAgICAgICB0aGlzLmFubmFTb3J0U2VydmljZS5jb2x1bW5Tb3J0U3RhdGUuc2V0KHRoaXMuc2VsZWN0ZWRSYWRpbywgdGVtcFNvcnRPcmRlcik7XHJcbiAgICAgICAgY29uc3Qgc29ydGVkVGFibGVEYXRhID0gdGhpcy5hbm5hU29ydFNlcnZpY2UuYXBwbHlTb3J0aW5nKFxyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkUmFkaW8sXHJcbiAgICAgICAgICAgIHRlbXBTb3J0T3JkZXIsXHJcbiAgICAgICAgICAgIHRhYmxlRGF0YSxcclxuICAgICAgICAgICAgaXNMdXJBbmRDc3JDb21wb25lbnQsXHJcbiAgICAgICAgKTtcclxuICAgICAgICByZXR1cm4gc29ydGVkVGFibGVEYXRhO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIEZpbHRlciBpY29uIGFsaWdubWVudCB0byBiaWdnZXIgZWxlbWVudCBpbiB1cHBhciBhbmQgbG93ZXIgaGVhZGVyXHJcbiAgICBzZXRNYXJnaW5MZWZ0Rm9yRmlsdGVySWNvbih0aEVsZW1lbnRzOiBRdWVyeUxpc3Q8RWxlbWVudFJlZj4pIHtcclxuICAgICAgICBjb25zdCBlbGVtZW50QXJyID0gdGhFbGVtZW50cy50b0FycmF5KCk7XHJcbiAgICAgICAgZWxlbWVudEFyci5mb3JFYWNoKChpdGVtKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGNoaWxkRGl2RWxlbWVudHMgPSBpdGVtLm5hdGl2ZUVsZW1lbnQuY2hpbGRyZW47XHJcblxyXG4gICAgICAgICAgICBpZiAoY2hpbGREaXZFbGVtZW50cy5sZW5ndGggPT09IDIpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGZpcnN0UGFyYWdyYXBoT2Zmc2V0V2lkdGg6IG51bWJlciA9IGNoaWxkRGl2RWxlbWVudHNbMF0/LmNoaWxkcmVuWzBdPy5vZmZzZXRXaWR0aFxyXG4gICAgICAgICAgICAgICAgICAgID8gY2hpbGREaXZFbGVtZW50c1swXT8uY2hpbGRyZW5bMF0/Lm9mZnNldFdpZHRoXHJcbiAgICAgICAgICAgICAgICAgICAgOiAwO1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgc2Vjb25kUGFyYWdyYXBoT2Zmc2V0V2lkdGg6IG51bWJlciA9IGNoaWxkRGl2RWxlbWVudHNbMV0uY2hpbGRyZW5bMF0/Lm9mZnNldFdpZHRoXHJcbiAgICAgICAgICAgICAgICAgICAgPyBjaGlsZERpdkVsZW1lbnRzWzFdLmNoaWxkcmVuWzBdPy5vZmZzZXRXaWR0aFxyXG4gICAgICAgICAgICAgICAgICAgIDogMDtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoZmlyc3RQYXJhZ3JhcGhPZmZzZXRXaWR0aCA+IHNlY29uZFBhcmFncmFwaE9mZnNldFdpZHRoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZGlmZiA9IGZpcnN0UGFyYWdyYXBoT2Zmc2V0V2lkdGggLSBzZWNvbmRQYXJhZ3JhcGhPZmZzZXRXaWR0aDtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoY2hpbGREaXZFbGVtZW50c1swXS5jaGlsZHJlbi5sZW5ndGggPT09IDIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGREaXZFbGVtZW50c1swXS5jaGlsZHJlblsxXS5zdHlsZS5tYXJnaW5MZWZ0ID0gYCR7NH1weGA7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAoY2hpbGREaXZFbGVtZW50c1sxXS5jaGlsZHJlbi5sZW5ndGggPT09IDIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGREaXZFbGVtZW50c1sxXS5jaGlsZHJlblsxXS5zdHlsZS5tYXJnaW5MZWZ0ID0gYCR7ZGlmZiArIDR9cHhgO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZGlmZiA9IHNlY29uZFBhcmFncmFwaE9mZnNldFdpZHRoIC0gZmlyc3RQYXJhZ3JhcGhPZmZzZXRXaWR0aDtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoY2hpbGREaXZFbGVtZW50c1swXS5jaGlsZHJlbi5sZW5ndGggPT09IDIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGREaXZFbGVtZW50c1swXS5jaGlsZHJlblsxXS5zdHlsZS5tYXJnaW5MZWZ0ID0gYCR7ZGlmZiArIDR9cHhgO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNoaWxkRGl2RWxlbWVudHNbMV0uY2hpbGRyZW4ubGVuZ3RoID09PSAyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkRGl2RWxlbWVudHNbMV0uY2hpbGRyZW5bMV0uc3R5bGUubWFyZ2luTGVmdCA9IGAkezR9cHhgO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG59XHJcbiJdfQ==
1340
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5uYS1maWx0ZXIuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FubmEtY29yZS9zcmMvbGliL2FubmEtY29yZS1zaGFyZWQtbGliL3NlcnZpY2VzL2FubmEtZmlsdGVyLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsNEJBQTRCO0FBQzVCLE9BQU8sRUFBYyxVQUFVLEVBQWEsTUFBTSxlQUFlLENBQUM7QUFFbEUsT0FBTyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBQzFCLE9BQU8saUJBQWlCLE1BQU0sZ0NBQWdDLENBQUM7QUFDL0QsT0FBTyxTQUFTLE1BQU0sd0JBQXdCLENBQUM7QUFDL0MsT0FBTyxNQUFNLE1BQU0scUJBQXFCLENBQUM7QUFDekMsZ0NBQWdDO0FBQ2hDLE9BQU8sRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFFNUUsT0FBTyxFQUFZLFlBQVksRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ25FLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUM1RCxpQ0FBaUM7QUFDakMsT0FBTyxFQUFFLHlCQUF5QixFQUFlLE1BQU0saUNBQWlDLENBQUM7QUFDekYsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFCQUFxQixDQUFDOzs7O0FBS3RELE1BQU0sT0FBTyxpQkFBaUI7YUFzQ1osZUFBVSxHQUFHLEVBQUUsQUFBTCxDQUFNO0lBSzlCLFlBQ1kscUJBQWdELEVBQ2hELGVBQWdDO1FBRGhDLDBCQUFxQixHQUFyQixxQkFBcUIsQ0FBMkI7UUFDaEQsb0JBQWUsR0FBZixlQUFlLENBQWlCO1FBNUM1QyxlQUFVLEdBQUcsSUFBSSxHQUFHLEVBQUUsQ0FBQztRQUN2Qix1QkFBa0IsR0FBRyxJQUFJLEdBQUcsRUFBRSxD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QUMsVUFBVSxHQUFHLEdBQUcsSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDO3FCQUN0RTtpQkFDSjtxQkFBTTtvQkFDSCxNQUFNLElBQUksR0FBRywwQkFBMEIsR0FBRyx5QkFBeUIsQ0FBQztvQkFDcEUsSUFBSSxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTt3QkFDM0MsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxVQUFVLEdBQUcsR0FBRyxJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUM7cUJBQ3RFO29CQUVELElBQUksZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7d0JBQzNDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsVUFBVSxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUM7cUJBQy9EO2lCQUNKO2FBQ0o7UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7K0dBamhEUSxpQkFBaUI7bUhBQWpCLGlCQUFpQixjQUZkLE1BQU07OzRGQUVULGlCQUFpQjtrQkFIN0IsVUFBVTttQkFBQztvQkFDUixVQUFVLEVBQUUsTUFBTTtpQkFDckIiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBBbmd1bGFyIGltcG9ydCBzdGF0ZW1lbnRzXHJcbmltcG9ydCB7IEVsZW1lbnRSZWYsIEluamVjdGFibGUsIFF1ZXJ5TGlzdCB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7IE9wdGlvbnMgfSBmcm9tIFwiQGFuZ3VsYXItc2xpZGVyL25neC1zbGlkZXJcIjtcclxuaW1wb3J0IGRheWpzIGZyb20gXCJkYXlqc1wiO1xyXG5pbXBvcnQgQ3VzdG9tUGFyc2VGb3JtYXQgZnJvbSBcImRheWpzL3BsdWdpbi9jdXN0b21QYXJzZUZvcm1hdFwiO1xyXG5pbXBvcnQgaXNCZXR3ZWVuIGZyb20gXCJkYXlqcy9wbHVnaW4vaXNCZXR3ZWVuXCI7XHJcbmltcG9ydCBtaW5NYXggZnJvbSBcImRheWpzL3BsdWdpbi9taW5NYXhcIjtcclxuLy8gVGhpcmQgcGFydHkgaW1wb3J0IHN0YXRlbWVudHNcclxuaW1wb3J0IHsgY2xvbmVEZWVwLCBpc0VxdWFsLCBtYXAsIG1heCwgbWluLCBzb3J0QnksIHVuaXEgfSBmcm9tIFwibG9kYXNoLWVzXCI7XHJcblxyXG5pbXBvcnQgeyBTb3J0VHlwZSwgU29ydFR5cGVFbnVtIH0gZnJvbSBcIi4uL21vZGVscy9hbm5hLXNvcnQubW9kZWxcIjtcclxuaW1wb3J0IHsgVG9vbHRpcE1vZGVsIH0gZnJvbSBcIi4uL21vZGVscy9hbm5hLXRvb2x0aXAubW9kZWxcIjtcclxuLy8gVXNlciBkZWZpbmVkIGltcG9ydCBzdGF0ZW1lbnRzXHJcbmltcG9ydCB7IEFubmFEYXRlVGltZUZvcm1hdFNlcnZpY2UsIE5nYkRhdGVUeXBlIH0gZnJvbSBcIi4vYW5uYS1kYXRlLXRpbWUtZm9ybWF0LnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgQW5uYVNvcnRTZXJ2aWNlIH0gZnJvbSBcIi4vYW5uYS1zb3J0LnNlcnZpY2VcIjtcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICAgIHByb3ZpZGVkSW46IFwicm9vdFwiLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgQW5uYUZpbHRlclNlcnZpY2Uge1xyXG4gICAgdG9vbHRpcE1hcCA9IG5ldyBNYXAoKTtcclxuICAgIHRvb2x0aXBTZWxlY3RlZE1hcCA9IG5ldyBNYXAoKTtcclxuICAgIGluaXRpYWxWYWx1ZU1hcDogTWFwPHN0cmluZywgYW55PjtcclxuICAgIHRyYW5zbGF0ZUZ1bmM6IHN0cmluZztcclxuICAgIHNlbGVjdGVkUmFkaW86IHN0cmluZztcclxuICAgIHN1YlJhZGlvQnV0dG9uOiBzdHJpbmc7XHJcblxyXG4gICAgY2FsZW5kYXJTZXQ6IFNldDxzdHJpbmc+O1xyXG4gICAgc2xpZGVyU2V0OiBTZXQ8c3RyaW5nPjtcclxuICAgIHRpbWVTZXQ6IFNldDxzdHJpbmc+O1xyXG5cclxuICAgIGluY2x1ZGVNdWx0aVRpbWU6IGJvb2xlYW47XHJcbiAgICBpbmNsdWRlWmVyb1RpbWU6IGJvb2xlYW47XHJcbiAgICBpbmNsdWRlVGltZVJhbmdlOiBib29sZWFuO1xyXG5cclxuICAgIGFwcGxpZWRGaWx0ZXJzQXJyYXk6IHN0cmluZ1tdID0gW107XHJcbiAgICBmbGlnaHREYXRlUmFuZ2U6IHsgbWluU2VsZWN0ZWREYXRlOiBhbnk7IG1heFNlbGVjdGVkRGF0ZTogYW55IH07XHJcbiAgICBzbGlkZXJEYXRhOiB7IG1pbjogYW55OyBtYXg6IGFueSB9O1xyXG4gICAgbmd4U2xpZGVyT2JqOiBPcHRpb25zO1xyXG4gICAgc2xpZGVyQ3VycmVuY3lTZXQgPSBuZXcgU2V0KFtcclxuICAgICAgICBcImJvb2tlZFwiLFxyXG4gICAgICAgIFwiY3BwXCIsXHJcbiAgICAgICAgXCJjcG1cIixcclxuICAgICAgICBcInJjdlByZWVtcHRcIixcclxuICAgICAgICBcIm9zUHJlZW1wdFwiLFxyXG4gICAgICAgIFwicG9zdGVkQWR1XCIsXHJcbiAgICAgICAgXCJzY2hlZHVsZWRBZHVcIixcclxuICAgICAgICBcImF1ZGllbmNlRGVmaWNpdFwiLFxyXG4gICAgICAgIFwiUmF0ZVwiLFxyXG4gICAgICAgIFwidXNlckFEVXNcIixcclxuICAgICAgICBcImJ1eWVyQ2hhbmdlc1wiLFxyXG4gICAgICAgIFwidXNlckNoYW5nZXNcIixcclxuICAgICAgICBcInVzZXJNR1wiLFxyXG4gICAgICAgIFwidWRWYWx1ZVwiLFxyXG4gICAgICAgIFwib2RWYWx1ZVwiLFxyXG4gICAgXSk7XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyBidWZmZXJTaXplID0gMjA7XHJcbiAgICBpc0ZpbHRlclNvcnRBY3RpdmU6IGFueSA9IHt9O1xyXG4gICAgcmVzZXRGaWx0ZXJTb3J0QWN0aXZlU3RhdHVzOiBib29sZWFuID0gdHJ1ZTtcclxuICAgIG51bGxUb0JlRm9ybWF0ZWRJbnRvU3RyaW5nID0gXCItXCI7XHJcblxyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgcHJpdmF0ZSBkYXRlVGltZUZvcm1hdFNlcnZpY2U6IEFubmFEYXRlVGltZUZvcm1hdFNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBhbm5hU29ydFNlcnZpY2U6IEFubmFTb3J0U2VydmljZSxcclxuICAgICkge1xyXG4gICAgICAgIGRheWpzLmV4dGVuZChtaW5NYXgpO1xyXG4gICAgICAgIGRheWpzLmV4dGVuZChpc0JldHdlZW4pO1xyXG4gICAgICAgIGRheWpzLmV4dGVuZChDdXN0b21QYXJzZUZvcm1hdCk7XHJcbiAgICAgICAgY29uc3Qgc2xpZGVyQXJyID0gW1xyXG4gICAgICAgICAgICBcInJjdlByZWVtcHRcIixcclxuICAgICAgICAgICAgXCJvc1ByZWVtcHRcIixcclxuICAgICAgICAgICAgXCJyY3ZVbmRlckRseVwiLFxyXG4gICAgICAgICAgICBcInBvc3RlZEF1ZFBlcmNlbnRcIixcclxuICAgICAgICAgICAgXCJib29rZWRcIixcclxuICAgICAgICAgICAgXCJzcG90c1wiLFxyXG4gICAgICAgICAgICBcImdycFwiLFxyXG4gICAgICAgICAgICBcImF2ZXJhZ2VSYXRlVGhpc1llYXJcIixcclxuICAgICAgICAgICAgXCJhdmVyYWdlUmF0ZUxhc3RZZWFyXCIsXHJcbiAgICAgICAgICAgIFwiYXZlcmFnZUNQUFwiLFxyXG4gICAgICAgICAgICBcImF2ZXJhZ2VDUE1cIixcclxuICAgICAgICAgICAgXCJJTVBTRGlmZlwiLFxyXG4gICAgICAgICAgICBcIlJUR0RpZmZcIixcclxuICAgICAgICAgICAgXCJjcHBcIixcclxuICAgICAgICAgICAgXCJpbXBzXCIsXHJcbiAgICAgICAgICAgIFwiY3BtXCIsXHJcbiAgICAgICAgICAgIFwib3NVbmRlckRseVwiLFxyXG4gICAgICAgICAgICBcInRvdGFsV2Vla3NcIixcclxuICAgICAgICAgICAgXCJXZWVrTnVtYmVyXCIsXHJcbiAgICAgICAgICAgIFwiUmF0ZVwiLFxyXG4gICAgICAgICAgICBcIk9yZGVyZWRSYXRpbmdzT3JJbXByZXNzaW9uc1wiLFxyXG4gICAgICAgICAgICBcIlBvc3RlZFJhdGluZ3NPckltcHJlc3Npb25zXCIsXHJcbiAgICAgICAgICAgIFwicG9zdGVkQXVkUGVyY2VudFwiLFxyXG4gICAgICAgICAgICBcInBvc3RlZEFkdVwiLFxyXG4gICAgICAgICAgICBcInNjaGVkdWxlZEFkdVwiLFxyXG4gICAgICAgICAgICBcImF1ZGllbmNlRGVmaWNpdFwiLFxyXG4gICAgICAgICAgICBcIm9mZmVyZWRNR3NcIixcclxuICAgICAgICAgICAgXCJvdXRzdGFuZGluZ1BFXCIsXHJcbiAgICAgICAgICAgIFwib2ZmZXJlZEFEVXNcIixcclxuICAgICAgICAgICAgXCJ1ZERlZmljaXRWYWx1ZVwiLFxyXG4gICAgICAgICAgICBcImJvb2tlZFZhbHVlXCIsXHJcbiAgICAgICAgICAgIFwiYm9va2VkU3BvdHNcIixcclxuICAgICAgICAgICAgXCJ1c2VyQ2hhbmdlc1wiLFxyXG4gICAgICAgICAgICBcIlVER3JwXCIsXHJcbiAgICAgICAgICAgIFwiVURJbXBzXCIsXHJcbiAgICAgICAgICAgIFwiT0RHcnBcIixcclxuICAgICAgICAgICAgXCJPREltcHNcIixcclxuICAgICAgICAgICAgXCJ1ZEltcHNQZXJjZW50XCIsXHJcbiAgICAgICAgICAgIFwidWRHcnBQZXJjZW50XCIsXHJcbiAgICAgICAgICAgIFwib2RJbXBzUGVyY2VudFwiLFxyXG4gICAgICAgICAgICBcIm9kR3JwUGVyY2VudFwiLFxyXG4gICAgICAgICAgICBcInVzZXJBRFVzXCIsXHJcbiAgICAgICAgICAgIFwiYnV5ZXJDaGFuZ2VzXCIsXHJcbiAgICAgICAgICAgIFwidXNlckNoYW5nZXNcIixcclxuICAgICAgICAgICAgXCJ1c2VyTUdcIixcclxuICAgICAgICAgICAgXCJXZWVrbHlBVVJcIixcclxuICAgICAgICAgICAgXCJXZWVrbHlBVVJhdGluZ09ySW1wcmVzc2lvbnNcIixcclxuICAgICAgICAgICAgXCJNR3NWYWx1ZVwiLFxyXG4gICAgICAgICAgICBcIkFEVXNWYWx1ZVwiLFxyXG4gICAgICAgICAgICBcIlVzZXJDcmVkaXRlZFZhbHVlXCIsXHJcbiAgICAgICAgICAgIFwiVXNlclVucmVzb2x2ZWRWYWx1ZVwiLFxyXG4gICAgICAgICAgICBcIkJ1eWVyQWRkZWRWYWx1ZVwiLFxyXG4gICAgICAgICAgICBcIkJ1eWVyRGVsZXRlZFZhbHVlXCIsXHJcbiAgICAgICAgICAgIFwiQnV5ZXJDaGFuZ2VzVmFsdWVcIixcclxuICAgICAgICAgICAgXCJVc2VyQ2hhbmdlc1ZhbHVlXCIsXHJcbiAgICAgICAgICAgIFwiQm9va2VkR1JQT3JJTVBTXCIsXHJcbiAgICAgICAgICAgIFwiQm9va2VkQ1BQT3JDUE1cIixcclxuICAgICAgICAgICAgXCJCb29rZWRWYWx1ZVwiLFxyXG4gICAgICAgICAgICBcIkJvb2tlZFNwb3RzXCIsXHJcbiAgICAgICAgICAgIFwiQm9va2VkUmF0ZVwiLFxyXG4gICAgICAgICAgICBcImF2ZXJhZ2VSYXRlXCIsXHJcbiAgICAgICAgICAgIFwicHJvamVjdGVkSU1QU1wiLFxyXG4gICAgICAgICAgICBcInByb2plY3RlZFJUR1wiLFxyXG4gICAgICAgICAgICBcImRlc2lyZWRDUE1cIixcclxuICAgICAgICAgICAgXCJkZXNpcmVkQ1BQXCIsXHJcbiAgICAgICAgICAgIFwiaW52ZW50b3J5RmlsbFBlcmNlbnRhZ2VTYW1lV2Vla1wiLFxyXG4gICAgICAgICAgICBcImludmVudG9yeUZpbGxQZXJjZW50YWdlRmluYWxcIixcclxuICAgICAgICAgICAgXCJpbnZlbnRvcnlGaWxsUGVyY2VudGFnZVRpbGxEYXRlXCIsXHJcbiAgICAgICAgICAgIFwiZG9sbGFyUmF0ZUltcGFjdFwiLFxyXG4gICAgICAgICAgICBcImRvbGxhcklNUFNJbXBhY3RcIixcclxuICAgICAgICAgICAgXCJJTVBTSW1wYWN0XCIsXHJcbiAgICAgICAgICAgIFwiZG9sbGFyUlRHSW1wYWN0XCIsXHJcbiAgICAgICAgICAgIFwiUlRHSW1wYWN0XCIsXHJcbiAgICAgICAgICAgIFwiQm9va2VkUlRHXCIsXHJcbiAgICAgICAgICAgIFwiQm9va2VkSU1QU1wiLFxyXG4gICAgICAgICAgICBcIkFVUlRHXCIsXHJcbiAgICAgICAgICAgIFwiQVVSVEdcIixcclxuICAgICAgICAgICAgXCJQb3N0ZWRSYXRpbmdcIixcclxuICAgICAgICAgICAgXCJQb3N0ZWRJbXByZXNzaW9uc1wiLFxyXG4gICAgICAgICAgICBcIk5vcm1hbGl6ZWRPcmRlcmVkUmF0aW5nXCIsXHJcbiAgICAgICAgICAgIFwiTm9ybWFsaXplZE9yZGVyZWRJbXByZXNzaW9uc1wiLFxyXG4gICAgICAgICAgICBcIk5vcm1hbGl6ZWRQb3N0ZWRSYXRpbmdcIixcclxuICAgICAgICAgICAgXCJOb3JtYWxpemVkUG9zdGVkSW1wcmVzc2lvbnNcIixcclxuICAgICAgICAgICAgXCJCb29rZWRHUlBcIixcclxuICAgICAgICAgICAgXCJCb29rZWRJTVBTUmV2VGFiXCIsXHJcbiAgICAgICAgICAgIFwiQm9va2VkQ1BQXCIsXHJcbiAgICAgICAgICAgIFwiQm9va2VkQ1BNXCIsXHJcbiAgICAgICAgICAgIFwiQVVJTVBTXCIsXHJcbiAgICAgICAgICAgIFwiYm9va2VkQW1vdW50VmFsdWVcIixcclxuICAgICAgICAgICAgXCJlcXVpdmFsaXplZEJvb2tlZEFtb3VudFZhbHVlXCIsXHJcbiAgICAgICAgICAgIFwiSU1QU1wiLFxyXG4gICAgICAgICAgICBcInVkVmFsdWVcIixcclxuICAgICAgICAgICAgXCJvZFZhbHVlXCIsXHJcbiAgICAgICAgICAgIFwiVmlvbGF0ZWRCb29rZWRWYWx1ZVwiLFxyXG4gICAgICAgICAgICBcIlZpb2xhdGVkQm9va2VkRVVSVmFsdWVcIixcclxuICAgICAgICAgICAgXCJWaW9sYXRpbmdCb29rZWRFVVJWYWx1ZVwiLFxyXG4gICAgICAgICAgICBcIlZpb2xhdGluZ0Jvb2tlZFZhbHVlXCIsXHJcbiAgICAgICAgICAgIFwiUmViYXRlXCIsXHJcbiAgICAgICAgICAgIFwiV2Vla2x5QVVSXCIsXHJcbiAgICAgICAgICAgIFwiT3RoZXJBdmFpbGFibGVTcG90c1RhYmxlV2Vla2x5QVVSXCIsXHJcbiAgICAgICAgICAgIFwicGFyZW50Um93QW5uYUVzdGltYXRlc1J0Z1wiLFxyXG4gICAgICAgICAgICBcInBhcmVudFJvd1Bvc3RlZFJ0Z1wiLFxyXG4gICAgICAgICAgICBcInBhcmVudFJvd1JvbGxpbmdBdmVyYWdlUnRnXCIsXHJcbiAgICAgICAgICAgIFwicGFyZW50Um93U3RhdGlvbkVzdGltYXRlc1J0Z1wiLFxyXG4gICAgICAgICAgICBcInBhcmVudFJvd0FubmFFc3RpbWF0ZXNJbXBzXCIsXHJcbiAgICAgICAgICAgIFwicGFyZW50Um93UG9zdGVkSW1wc1wiLFxyXG4gICAgICAgICAgICBcInBhcmVudFJvd1JvbGxpbmdBdmVyYWdlSW1wc1wiLFxyXG4gICAgICAgICAgICBcInBhcmVudFJvd1N0YXRpb25Fc3RpbWF0ZXNJbXBzXCIsXHJcbiAgICAgICAgICAgIFwicGFyZW50Um93QW5uYUVzdGltYXRlc1NoYXJlXCIsXHJcbiAgICAgICAgICAgIFwicGFyZW50Um93UG9zdGVkU2hhcmVcIixcclxuICAgICAgICAgICAgXCJwYXJlbnRSb3dSb2xsaW5nQXZlcmFnZVNoYXJlXCIsXHJcbiAgICAgICAgICAgIFwicGFyZW50Um93QW5uYUVzdGltYXRlc1B1dFBlclwiLFxyXG4gICAgICAgICAgICBcInBhcmVudFJvd1Bvc3RlZFB1dFBlclwiLFxyXG4gICAgICAgICAgICBcInBhcmVudFJvd1JvbGxpbmdBdmVyYWdlUHV0UGVyXCIsXHJcbiAgICAgICAgICAgIFwicGFyZW50Um93QW5uYUVzdGltYXRlc1B1dFwiLFxyXG4gICAgICAgICAgICBcInBhcmVudFJvd1Bvc3RlZFB1dFwiLFxyXG4gICAgICAgICAgICBcInBhcmVudFJvd1JvbGxpbmdBdmVyYWdlUHV0XCIsXHJcbiAgICAgICAgICAgIFwiUHJvamVjdGVkSW1wcmVzc2lvbnNcIixcclxuICAgICAgICAgICAgXCJQcm9qZWN0ZWRSdGdcIixcclxuICAgICAgICAgICAgXCJwcm9qZWN0ZWRDUE1cIixcclxuICAgICAgICAgICAgXCJwcm9qZWN0ZWRDUFBcIixcclxuICAgICAgICAgICAgXCJib29rZWRFcUNwbVZhbHVlXCIsXHJcbiAgICAgICAgICAgIFwiYm9va2VkRXFDcHBWYWx1ZVwiLFxyXG4gICAgICAgICAgICBcIlJhdGluZ1wiLFxyXG4gICAgICAgICAgICBcIkFjdHVhbFJhdGVcIixcclxuICAgICAgICAgICAgXCJJbXByZXNzaW9uc1wiLFxyXG4gICAgICAgICAgICBcIkFVUktleUxZXCIsXHJcbiAgICAgICAgICAgIFwiU2VsbE91dFBlcmNlbnRMWVwiLFxyXG4gICAgICAgICAgICBcIkFVUktleVRZXCIsXHJcbiAgICAgICAgICAgIFwiU2VsbE91dFBlcmNlbnRUWVwiLFxyXG4gICAgICAgIF07XHJcbiAgICAgICAgY29uc3QgY2FsZW5kYXJBcnIgPSBbXHJcbiAgICAgICAgICAgIFwicGVyaW9kXCIsXHJcbiAgICAgICAgICAgIFwiQWlyRGF0ZVwiLFxyXG4gICAgICAgICAgICBcImZsaWdodFN0YXJ0RGF0ZVwiLFxyXG4gICAgICAgICAgICBcImZsaWdodEVuZERhdGVcIixcclxuICAgICAgICAgICAgXCJkYXRlXCIsXHJcbiAgICAgICAgICAgIFwic3RhcnREYXRlXCIsXHJcbiAgICAgICAgICAgIFwiZW5kRGF0ZVwiLFxyXG4gICAgICAgICAgICBcInJldmlzaW9uU3RhcnREYXRlXCIsXHJcbiAgICAgICAgICAgIFwiR2VuZXJhdGVkT25cIixcclxuICAgICAgICAgICAgXCJXZWVrXCIsXHJcbiAgICAgICAgICAgIFwidGltZW91dERhdGVcIixcclxuICAgICAgICAgICAgXCJWaW9sYXRpbmdTcG90RGF0ZVwiLFxyXG4gICAgICAgICAgICBcIlZpb2xhdGVkU3BvdERhdGVcIixcclxuICAgICAgICAgICAgXCJBY3R1YWxXZWVrU3RhcnREYXRlXCIsXHJcbiAgICAgICAgXTtcclxuICAgICAgICBjb25zdCB0aW1lQXJyID0gW1xyXG4gICAgICAgICAgICBcIlN0YXJ0VGltZUZvckZpbHRlclwiLFxyXG4gICAgICAgICAgICBcIkVuZFRpbWVGb3JGaWx0ZXJcIixcclxuICAgICAgICAgICAgXCJ0aW1lXCIsXHJcbiAgICAgICAgICAgIFwic3RhcnRUaW1lRm9yRmlsdGVyXCIsXHJcbiAgICAgICAgICAgIFwiZW5kVGltZUZvckZpbHRlclwiLFxyXG4gICAgICAgICAgICBcInN0YXJ0X3RpbWVfZm9yX2ZpbHRlclwiLFxyXG4gICAgICAgICAgICBcImVuZF90aW1lX2Zvcl9maWx0ZXJcIixcclxuICAgICAgICAgICAgXCJzdGFydEVuZFRpbWVNdWx0aVwiLFxyXG4gICAgICAgICAgICBcInN0YXJ0RW5kVGltZVwiLFxyXG4gICAgICAgICAgICBcInRpbWVvdXRUaW1lXCIsXHJcbiAgICAgICAgICAgIFwiT3RoZXJBdmFpbGFibGVTcG90c1RhYmxlU3RhcnRUaW1lXCIsXHJcbiAgICAgICAgICAgIFwiT3RoZXJBdmFpbGFibGVTcG90c1RhYmxlRW5kVGltZVwiLFxyXG4gICAgICAgICAgICBcIlN0YXJ0VGltZVwiLFxyXG4gICAgICAgICAgICBcIkVuZFRpbWVcIixcclxuICAgICAgICBdO1xyXG4gICAgICAgIHRoaXMuc2xpZGVyU2V0ID0gbmV3IFNldChzbGlkZXJBcnIpO1xyXG4gICAgICAgIHRoaXMuY2FsZW5kYXJTZXQgPSBuZXcgU2V0KGNhbGVuZGFyQXJyKTtcclxuICAgICAgICB0aGlzLnRpbWVTZXQgPSBuZXcgU2V0KHRpbWVBcnIpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybk1heEFuZE1pblZhbHVlKGRhdGE6IGFueVtdLCBrZXk6IHN0cmluZywgaXNNaW46IGJvb2xlYW4pIHtcclxuICAgICAgICBjb25zdCBmaWx0ZXJlZERhdGEgPSBkYXRhLmZpbHRlcigob2JqKSA9PiAhW1wiXCIsIFwiLVwiLCBudWxsXS5pbmNsdWRlcyhvYmpba2V5XSkpO1xyXG4gICAgICAgIGNvbnN0IHZhbHVlcyA9IGZpbHRlcmVkRGF0YS5tYXAoKHgpID0+IHhba2V5XSk7XHJcbiAgICAgICAgY29uc3QgdmFsdWVUb1JldHVybiA9IGlzTWluID8gbWluKHZhbHVlcykgOiBtYXgodmFsdWVzKTtcclxuICAgICAgICByZXR1cm4gdmFsdWVUb1JldHVybjtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm5NaW5BbmRNYXhEYXRlKGRhdGE6IGFueVtdLCBrZXk6IHN0cmluZykge1xyXG4gICAgICAgIGNvbnN0IGZpbHRlcmVkRGF0YSA9IGRhdGEuZmlsdGVyKChvYmopID0+ICFbXCJcIiwgXCItXCIsIG51bGxdLmluY2x1ZGVzKG9ialtrZXldKSk7XHJcbiAgICAgICAgY29uc3QgRGF0ZUFyciA9IGZpbHRlcmVkRGF0YS5tYXAoKG9iaikgPT4gZGF5anMob2JqW2tleV0pKTtcclxuICAgICAgICBjb25zdCBtaW5EYXRlID0gZGF5anMubWluKERhdGVBcnIpO1xyXG4gICAgICAgIGNvbnN0IG1heERhdGUgPSBkYXlqcy5tYXgoRGF0ZUFycik7XHJcblxyXG4gICAgICAgIHJldHVybiBbbWluRGF0ZSwgbWF4RGF0ZV07XHJcbiAgICB9XHJcblxyXG4gICAgaXNUb29sdGlwQWN0aXZlKGhlYWRlcjogc3RyaW5nW10sIHNvcnRNYXA6IE1hcDxzdHJpbmcsIFNvcnRUeXBlPik6IGJvb2xlYW4ge1xyXG4gICAgICAgIGNvbnN0IHNldDogU2V0PHN0cmluZz4gPSBuZXcgU2V0KHRoaXMuYXBwbGllZEZpbHRlcnNBcnJheSk7XHJcbiAgICAgICAgY29uc3QgaXNTb3J0TWFwRm9ySGVhZGVyMEFjdGl2ZSA9IHNvcnRNYXAuaGFzKGhlYWRlclswXSkgJiYgc29ydE1hcC5nZXQoaGVhZGVyWzBdKSAhPT0gU29ydFR5cGVFbnVtLkRFRkFVTFQ7XHJcbiAgICAgICAgY29uc3QgaXNTb3J0TWFwRm9ySGVhZGVyMUFjdGl2ZSA9IHNvcnRNYXAuaGFzKGhlYWRlclsxXSkgJiYgc29ydE1hcC5nZXQoaGVhZGVyWzFdKSAhPT0gU29ydFR5cGVFbnVtLkRFRkFVTFQ7XHJcblxyXG4gICAgICAgIGlmIChoZWFkZXIubGVuZ3RoID09PSAxKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAoc29ydE1hcC5zaXplID4gMCAmJiBpc1NvcnRNYXBGb3JIZWFkZXIwQWN0aXZlKSB8fCBzZXQuaGFzKGhlYWRlclswXSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICAoc29ydE1hcC5zaXplID4gMCAmJiBzb3J0TWFwLmhhcyhoZWFkZXJbMF0pICYmIGlzU29ydE1hcEZvckhlYWRlcjBBY3RpdmUpIHx8XHJcbiAgICAgICAgICAgIChzb3J0TWFwLnNpemUgPiAwICYmIHNvcnRNYXAuaGFzKGhlYWRlclsxXSkgJiYgaXNTb3J0TWFwRm9ySGVhZGVyMUFjdGl2ZSkgfHxcclxuICAgICAgICAgICAgc2V0LmhhcyhoZWFkZXJbMF0pIHx8XHJcbiAgICAgICAgICAgIHNldC5oYXMoaGVhZGVyWzFdKVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgY2xlYXJDb2x1bW5GaWx0ZXIoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMudG9vbHRpcFNlbGVjdGVkTWFwLmhhcyh0aGlzLnNlbGVjdGVkUmFkaW8pKSB7XHJcbiAgICAgICAgICAgIHRoaXMudG9vbHRpcFNlbGVjdGVkTWFwLmRlbGV0ZSh0aGlzLnNlbGVjdGVkUmFkaW8pO1xyXG4gICAgICAgICAgICBjb25zdCBhcHBsaWVkRmlsdGVyU2V0OiBTZXQ8c3RyaW5nPiA9IG5ldyBTZXQodGhpcy5hcHBsaWVkRmlsdGVyc0FycmF5KTtcclxuICAgICAgICAgICAgYXBwbGllZEZpbHRlclNldC5kZWxldGUodGhpcy5zZWxlY3RlZFJhZGlvKTtcclxuICAgICAgICAgICAgdGhpcy5hcHBsaWVkRmlsdGVyc0FycmF5ID0gWy4uLmFwcGxpZWRGaWx0ZXJTZXRdO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuYW5uYVNvcnRTZXJ2aWNlLmNvbHVtblNvcnRTdGF0ZS5oYXModGhpcy5zZWxlY3RlZFJhZGlvKSkge1xyXG4gICAgICAgICAgICB0aGlzLmFubmFTb3J0U2VydmljZS5jb2x1bW5Tb3J0U3RhdGUuZGVsZXRlKHRoaXMuc2VsZWN0ZWRSYWRpbyk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHNldE9wdGlvblZhbHVlcyhtaW5WYWx1ZTogbnVtYmVyLCBtYXhWYWx1ZTogbnVtYmVyKSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgZmxvb3I6IG1pblZhbHVlLFxyXG4gICAgICAgICAgICBjZWlsOiBtYXhWYWx1ZSxcclxuICAgICAgICAgICAgZGlzYWJsZWQ6IHRydWUsXHJcbiAgICAgICAgICAgIHRyYW5zbGF0ZTogdGhpcy5ub3JtYWxUcmFuc2xhdGVGdW5jdGlvbixcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIHBlcmNlbnRUcmFuc2xhdGVGdW5jdGlvbiA9IChkYXRhOiBudW1iZXIpOiBzdHJpbmcgPT4ge1xyXG4gICAgICAgIGlmIChNYXRoLmFicyhkYXRhKSA+PSAxMDAwKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGlzTmVnVmFsID0gZGF0YSA8IDA7XHJcbiAgICAgICAgICAgIGNvbnN0IHZhbCA9IGAkeyhNYXRoLmFicyhkYXRhKSAvIDEwMDApLnRvRml4ZWQoMSl9ayVgO1xyXG4gICAgICAgICAgICByZXR1cm4gaXNOZWdWYWwgPyBgLSR7dmFsfWAgOiB2YWw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGlzTmVnVmFsID0gZGF0YSA8IDA7XHJcbiAgICAgICAgY29uc3QgaXNXaG9sZU51bSA9IHBhcnNlSW50KGRhdGEudG9TdHJpbmcoKSwgMTApID09PSBkYXRhO1xyXG4gICAgICAgIGNvbnN0IHZhbCA9IGlzV2hvbGVOdW0gPyBNYXRoLmFicyhkYXRhKS50b1N0cmluZygpIDogTWF0aC5hYnMoZGF0YSkudG9GaXhlZCgxKTtcclxuICAgICAgICByZXR1cm4gaXNOZWdWYWwgPyBgLSR7dmFsfSVgIDogYCR7dmFsfSVgO1xyXG4gICAgfTtcclxuXHJcbiAgICBjdXJyZW5jeVRyYW5zbGF0ZUZ1bmN0aW9uID0gKGRhdGE6IG51bWJlcik6IHN0cmluZyA9PiB7XHJcbiAgICAgICAgaWYgKE1hdGguYWJzKGRhdGEpID49IDEwMDApIHtcclxuICAgICAgICAgICAgY29uc3QgaXNOZWdWYWwgPSBkYXRhIDwgMDtcclxuICAgICAgICAgICAgY29uc3QgdmFsID0gYCQkeyhNYXRoLmFicyhkYXRhKSAvIDEwMDApLnRvRml4ZWQoMSl9a2A7XHJcbiAgICAgICAgICAgIHJldHVybiBpc05lZ1ZhbCA/IGAtJHt2YWx9YCA6IHZhbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgaXNOZWdWYWwgPSBkYXRhIDwgMDtcclxuICAgICAgICBjb25zdCBpc1dob2xlTnVtID0gcGFyc2VJbnQoZGF0YS50b1N0cmluZygpLCAxMCkgPT09IGRhdGE7XHJcbiAgICAgICAgY29uc3QgdmFsID0gaXNXaG9sZU51bSA/IE1hdGguYWJzKGRhdGEpLnRvU3RyaW5nKCkgOiBNYXRoLmFicyhkYXRhKS50b0ZpeGVkKDEpO1xyXG4gICAgICAgIHJldHVybiBpc05lZ1ZhbCA/IGAtJCR7dmFsfWAgOiBgJCR7dmFsfWA7XHJcbiAgICB9O1xyXG5cclxuICAgIG5vcm1hbFRyYW5zbGF0ZUZ1bmN0aW9uID0gKGRhdGE6IG51bWJlcik6IHN0cmluZyA9PiB7XHJcbiAgICAgICAgaWYgKGRhdGEgPj0gMTAwMCkge1xyXG4gICAgICAgICAgICBjb25zdCB2YWwgPSBgJHsoZGF0YSAvIDEwMDApLnRvRml4ZWQoMSl9a2A7XHJcbiAgICAgICAgICAgIHJldHVybiB2YWw7XHJcbiAgICAgICAgfSBlbHNlIGlmIChkYXRhICE9PSBNYXRoLmZsb29yKGRhdGEpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBkYXRhLnRvRml4ZWQoMSkudG9TdHJpbmcoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGRhdGEudG9TdHJpbmcoKTtcclxuICAgIH07XHJcblxyXG4gICAgZmluZFVuaXF1ZURhdGVzV2l0aERhdGEoZGF0YTogYW55W10pIHtcclxuICAgICAgICBjb25zdCB1bmlxdWVEYXRlcyA9IHVuaXEoZGF0YS5tYXAoKHUpID0+IHUuZGF0ZSkpO1xyXG4gICAgICAgIGNvbnN0IHVuaXF1ZURhdGVzSW5OZ2JEYXRlRm9ybWF0OiBOZ2JEYXRlVHlwZVtdID0gW107XHJcbiAgICAgICAgdW5pcXVlRGF0ZXMuZm9yRWFjaCgoZGF0ZTogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIHVuaXF1ZURhdGVzSW5OZ2JEYXRlRm9ybWF0LnB1c2goXHJcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGVUaW1lRm9ybWF0U2VydmljZS5jb252ZXJ0VG9OZ2JEYXRlU3RhbmRhcmRGb3JtYXQoZGF5anMoZGF0ZSwgXCJNTS9ERC9ZWVwiKS5mb3JtYXQoXCJNTS9ERC9ZWVlZXCIpKSxcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gdW5pcXVlRGF0ZXNJbk5nYkRhdGVGb3JtYXQ7XHJcbiAgICB9XHJcblxyXG4gICAgcmVPcmRlckFwcGxpZWRGaWx0ZXJzQXJyYXkoaXNIaWVyYXJjaGlhbFVzZXJGaWx0ZXJlZDogYm9vbGVhbiwgZGF0ZT86IGFueSkge1xyXG4gICAgICAgIGxldCBpc0ZpbHRlcmVkID0gdHJ1ZTtcclxuICAgICAgICBpc0ZpbHRlcmVkID0gdGhpcy5jaGVja0lmRGF0YUlzRmlsdGVyZWQoaXNGaWx0ZXJlZCwgaXNIaWVyYXJjaGlhbFVzZXJGaWx0ZXJlZCwgZGF0ZSk7XHJcbiAgICAgICAgdGhpcy5yZW1vdmVPckNoYW5nZUxhdGVzdEZpbHRlckluZGV4KGlzRmlsdGVyZWQpO1xyXG4gICAgfVxyXG5cclxuICAgIGNoZWNrSWZEYXRhSXNGaWx0ZXJlZChpc0ZpbHRlcmVkOiBib29sZWFuLCBpc0hpZXJhcmNoaWFsVXNlckZpbHRlcmVkOiBib29sZWFuLCBkYXRlPzogYW55KSB7XHJcbiAgICAgICAgbGV0IGlzRGF0YUZpbHRlcmVkID0gaXNGaWx0ZXJlZDtcclxuICAgICAgICBpZiAodGhpcy5zZWxlY3RlZFJhZGlvID09PSBcInVzZXJcIiAmJiAhdGhpcy50b29sdGlwTWFwLmhhcyhcInVzZXJcIikpIHtcclxuICAgICAgICAgICAgaXNEYXRhRmlsdGVyZWQgPSBjbG9uZURlZXAoaXNIaWVyYXJjaGlhbFVzZXJGaWx0ZXJlZCk7XHJcbiAgICAgICAgfSBlbHNlIGlmIChcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFJhZGlvID09PSBcIlN0YXJ0VGltZUZvckZpbHRlclwiIHx8XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRSYWRpbyA9PT0gXCJFbmRUaW1lRm9yRmlsdGVyXCIgfHxcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFJhZGlvID09PSBcInN0YXJ0VGltZUZvckZpbHRlclwiIHx8XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRSYWRpbyA9PT0gXCJlbmRUaW1lRm9yRmlsdGVyXCIgfHxcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFJhZGlvID09PSBcInRpbWVcIiB8fFxyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkUmFkaW8gPT09IFwidGltZW91dFRpbWVcIiB8fFxyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkUmFkaW8gPT09IFwiT3RoZXJBdmFpbGFibGVTcG90c1RhYmxlU3RhcnRUaW1lXCIgfHxcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFJhZGlvID09PSBcIk90aGVyQXZhaWxhYmxlU3BvdHNUYWJsZUVuZFRpbWVcIiB8fFxyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkUmFkaW8gPT09IFwic3RhcnRfdGltZV9mb3JfZmlsdGVyXCIgfHxcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFJhZGlvID09PSBcImVuZF90aW1lX2Zvcl9maWx0ZXJcIiB8fFxyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkUmFkaW8gPT09IFwic3RhcnRFbmRUaW1lTXVsdGlcIlxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgICBpc0RhdGFGaWx0ZXJlZCA9XHJcbiAgICAgICAgICAgICAgICAhaXNFcXVhbChcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmluaXRpYWxWYWx1ZU1hcC5nZXQodGhpcy5zZWxlY3RlZFJhZGlvKSxcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnRvb2x0aXBTZWxlY3RlZE1hcC5nZXQodGhpcy5zZWxlY3RlZFJhZGlvKSxcclxuICAgICAgICAgICAgICAgICkgfHxcclxuICAgICAgICAgICAgICAgICF0aGlzLmluY2x1ZGVaZXJvVGltZSB8fFxyXG4gICAgICAgICAgICAgICAgIXRoaXMuaW5jbHVkZU11bHRpVGltZTtcclxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuc2VsZWN0ZWRSYWRpbyA9PT0gXCJzdGFydEVuZFRpbWVcIiB8fCB0aGlzLnNlbGVjdGVkUmFkaW8gPT09IFwiVGltZUJhbmRcIikge1xyXG4gICAgICAgICAgICBpc0RhdGFGaWx0ZXJlZCA9XHJcbiAgICAgICAgICAgICAgICAhaXNFcXVhbChcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmluaXRpYWxWYWx1ZU1hcC5nZXQodGhpcy5zZWxlY3RlZFJhZGlvKSxcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnRvb2x0aXBTZWxlY3RlZE1hcC5nZXQodGhpcy5zZWxlY3RlZFJhZGlvKSxcclxuICAgICAgICAgICAgICAgICkgfHxcclxuICAgICAgICAgICAgICAgICF0aGlzLmluY2x1ZGVaZXJvVGltZSB8fFxyXG4gICAgICAgICAgICAgICAgIXRoaXMuaW5jbHVkZU11bHRpVGltZTtcclxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuc2xpZGVyU2V0Lmhhcyh0aGlzLnNlbGVjdGVkUmFkaW8pKSB7XHJcbiAgICAgICAgICAgIGlzRGF0YUZpbHRlcmVkID1cclxuICAgICAgICAgICAgICAgICFpc0VxdWFsKFxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaW5pdGlhbFZhbHVlTWFwLmdldCh0aGlzLnNlbGVjdGVkUmFkaW8pLFxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudG9vbHRpcFNlbGVjdGVkTWFwLmdldCh0aGlzLnNlbGVjdGVkUmFkaW8pLFxyXG4gICAgICAgICAgICAgICAgKSAmJiAhaXNFcXVhbCh0aGlzLnRvb2x0aXBTZWxlY3RlZE1hcC5nZXQodGhpcy5zZWxlY3RlZFJhZGlvKSwgdGhpcy5zbGlkZXJEYXRhKTtcclxuICAgICAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRSYWRpbyA9PT0gXCJwb3N0ZWRBZHVcIiAmJiB0aGlzLnN1YlJhZGlvQnV0dG9uID09PSBcIm5vdFJlcXVpcmVkXCIpIHtcclxuICAgICAgICAgICAgICAgIGlzRGF0YUZpbHRlcmVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoIWlzRGF0YUZpbHRlcmVkICYmIHRoaXMudG9vbHRpcFNlbGVjdGVkTWFwLmhhcyh0aGlzLnNlbGVjdGVkUmFkaW8pKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnRvb2x0aXBTZWxlY3RlZE1hcC5kZWxldGUodGhpcy5zZWxlY3RlZFJhZGlvKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSBpZiAoXHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRSYWRpbyA9PT0gXCJzdGFydERhdGVcIiB8fFxyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkUmFkaW8gPT09IFwiZW5kRGF0ZVwiIHx8XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRSYWRpbyA9PT0gXCJwZXJpb2RcIiB8fFxyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkUmFkaW8gPT09IFwiQWlyRGF0ZVwiIHx8XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRSYWRpbyA9PT0gXCJ0aW1lb3V0RGF0ZVwiIHx8XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRSYWRpbyA9PT0gXCJmbGlnaHRTdGFydERhdGVcIiB8fFxyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkUmFkaW8gPT09IFwiZmxpZ2h0RW5kRGF0ZVwiIHx8XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRSYWRpbyA9PT0gXCJkYXRlXCIgfHxcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFJhZGlvID09PSBcInJldmlzaW9uU3RhcnREYXRlXCIgfHxcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFJhZGlvID09PSBcIkdlbmVyYXRlZE9uXCIgfHxcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFJhZGlvID09PSBcIldlZWtcIiB8fFxyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkUmFkaW8gPT09IFwiQWN0dWFsV2Vla1N0YXJ0RGF0ZVwiXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIGlzRGF0YUZpbHRlcmVkID1cclxuICAgICAgICAgICAgICAgICFpc0VxdWFsKFxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaW5pdGlhbFZhbHVlTWFwLmdldCh0aGlzLnNlbGVjdGVkUmFkaW8pLFxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudG9vbHRpcFNlbGVjdGVkTWFwLmdldCh0aGlzLnNlbGVjdGVkUmFkaW8pLFxyXG4gICAgICAgICAgICAgICAgKSAmJiAhaXNFcXVhbCh0aGlzLnRvb2x0aXBTZWxlY3RlZE1hcC5nZXQodGhpcy5zZWxlY3RlZFJhZGlvKSwgdGhpcy5mbGlnaHREYXRlUmFuZ2UpO1xyXG4gICAgICAgICAgICBpZiAoIWlzRGF0YUZpbHRlcmVkICYmIHRoaXMudG9vbHRpcFNlbGVjdGVkTWFwLmhhcyh0aGlzLnNlbGVjdGVkUmFkaW8pKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnRvb2x0aXBTZWxlY3RlZE1hcC5kZWxldGUodGhpcy5zZWxlY3RlZFJhZGlvKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHRvdGFsT3B0aW9uc0NvdW50ID0gdGhpcy50b29sdGlwTWFwLmdldCh0aGlzLnNlbGVjdGVkUmFkaW8pLmZpbHRlcigoeDogYW55KSA9PiAheC5pc0hpZGRlbikubGVuZ3RoO1xyXG4gICAgICAgICAgICBjb25zdCBzZWxlY3RlZE9wdGlvbnNDb3VudCA9IHRoaXMudG9vbHRpcE1hcFxyXG4gICAgICAgICAgICAgICAgLmdldCh0aGlzLnNlbGVjdGVkUmFkaW8pXHJcbiAgICAgICAgICAgICAgICAuZmlsdGVyKCh4OiBhbnkpID0+ICF4LmlzSGlkZGVuICYmIHguaXNTZWxlY3RlZCkubGVuZ3RoO1xyXG4gICAgICAgICAgICBpc0RhdGFGaWx0ZXJlZCA9IHNlbGVjdGVkT3B0aW9uc0NvdW50ID4gMCAmJiBzZWxlY3RlZE9wdGlvbnNDb3VudCAhPT0gdG90YWxPcHRpb25zQ291bnQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBpc0RhdGFGaWx0ZXJlZDtcclxuICAgIH1cclxuXHJcbiAgICByZW1vdmVPckNoYW5nZUxhdGVzdEZpbHRlckluZGV4KGlzRmlsdGVyZWQ6IGJvb2xlYW4pIHtcclxuICAgICAgICBjb25zdCBzZXQgPSBuZXcgU2V0KHRoaXMuYXBwbGllZEZpbHRlcnNBcnJheSk7XHJcblxyXG4gICAgICAgIGlmIChpc0ZpbHRlcmVkICYmICFzZXQuaGFzKHRoaXMuc2VsZWN0ZWRSYWRpbykpIHtcclxuICAgICAgICAgICAgc2V0LmFkZCh0aGlzLnNlbGVjdGVkUmFkaW8pO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoaXNGaWx0ZXJlZCAmJiBzZXQuaGFzKHRoaXMuc2VsZWN0ZWRSYWRpbykpIHtcclxuICAgICAgICAgICAgc2V0LmRlbGV0ZSh0aGlzLnNlbGVjdGVkUmFkaW8pO1xyXG4gICAgICAgICAgICBzZXQuYWRkKHRoaXMuc2VsZWN0ZWRSYWRpbyk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgc2V0LmRlbGV0ZSh0aGlzLnNlbGVjdGVkUmFkaW8pO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmFwcGxpZWRGaWx0ZXJzQXJyYXkgPSBbLi4uc2V0XTtcclxuICAgIH1cclxuXHJcbiAgICBjaGVja0lmU29ydGluZ0lzQXBwbGllZFRoZW5Tb3J0VGhlRGF0YShvcmlnaW5hbERhdGE6IGFueVtdKSB7XHJcbiAgICAgICAgbGV0IHNvcnRlZERhdGEgPSBvcmlnaW5hbERhdGE7XHJcbiAgICAgICAgaWYgKCF0aGlzLmFubmFTb3J0U2VydmljZT8uY29sdW1uU29ydFN0YXRlKSByZXR1cm4gc29ydGVkRGF0YTtcclxuICAgICAgICB0aGlzLmFubmFTb3J0U2VydmljZS5jb2x1bW5Tb3J0U3RhdGUuZm9yRWFjaCgodmFsdWUsIGtleSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAodmFsdWUgPT09IFwiQVNDXCIpIHtcclxuICAgICAgICAgICAgICAgIHNvcnRlZERhdGEgPSBjbG9uZURlZXAoXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hbm5hU29ydFNlcnZpY2Uuc29ydERhdGFGb3JDb21wb25lbnRPdGhlclRoYW5MdXJBbmRDc3JQYWdlKHRydWUsIG9yaWdpbmFsRGF0YSwga2V5KSxcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodmFsdWUgPT09IFwiREVTQ1wiKSB7XHJcbiAgICAgICAgICAgICAgICBzb3J0ZWREYXRhID0gY2xvbmVEZWVwKFxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYW5uYVNvcnRTZXJ2aWNlLnNvcnREYXRhRm9yQ29tcG9uZW50T3RoZXJUaGFuTHVyQW5kQ3NyUGFnZShmYWxzZSwgb3JpZ2luYWxEYXRhLCBrZXkpLFxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICByZXR1cm4gc29ydGVkRGF0YTtcclxuICAgIH1cclxuXHJcbiAgICBmaWx0ZXJEYXRhKG9yaWdpbmFsRGF0YTogYW55W10sIGtleVRvU2tpcDogc3RyaW5nLCBpc0x1ckNzclBhZ2U6IGJvb2xlYW4gPSBmYWxzZSkge1xyXG4gICAgICAgIGxldCBmaWx0ZXJlZERhdGEgPSBbLi4ub3JpZ2luYWxEYXRhXTtcclxuICAgICAgICBpZiAoIWlzTHVyQ3NyUGFnZSkge1xyXG4gICAgICAgICAgICBmaWx0ZXJlZERhdGEgPSB0aGlzLmNoZWNrSWZTb3J0aW5nSXNBcHBsaWVkVGhlblNvcnRUaGVEYXRhKG9yaWdpbmFsRGF0YSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMudG9vbHRpcFNlbGVjdGVkTWFwLmZvckVhY2goKHZhbHVlLCBrZXkpID0+IHtcclxuICAgICAgICAgICAgaWYgKGtleSAhPT0ga2V5VG9Ta2lwICYmIG9yaWdpbmFsRGF0YS5sZW5ndGggPiAwICYmIE9iamVjdC5rZXlzKG9yaWdpbmFsRGF0YVswXSkuaW5jbHVkZXMoa2V5KSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuc2xpZGVyU2V0LmhhcyhrZXkpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZmlsdGVyZWREYXRhID0gZmlsdGVyZWREYXRhLmZpbHRlcigob2JqKSA9PiBvYmpba2V5XSA+PSB2YWx1ZS5taW4gJiYgb2JqW2tleV0gPD0gdmFsdWUubWF4KTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoXHJcbiAgICAgICAgICAgICAgICAgICAga2V5ID09PSBcInN0YXJ0RGF0ZVwiIHx8XHJcbiAgICAgICAgICAgICAgICAgICAga2V5ID09PSBcImVuZERhdGVcIiB8fFxyXG4gICAgICAgICAgICAgICAgICAgIGtleSA9PT0gXCJTdGFydERhdGVcIiB8fFxyXG4gICAgICAgICAgICAgICAgICAgIGtleSA9PT0gXCJFbmREYXRlXCIgfHxcclxuICAgICAgICAgICAgICAgICAgICBrZXkgPT09IFwiQWlyRGF0ZVwiIHx8XHJcbiAgICAgICAgICAgICAgICAgICAga2V5ID09PSBcInRpbWVvdXREYXRlXCIgfHxcclxuICAgICAgICAgICAgICAgICAgICBrZXkgPT09IFwiZmxpZ2h0U3RhcnREYXRlXCIgfHxcclxuICAgICAgICAgICAgICAgICAgICBrZXkgPT09IFwiZmxpZ2h0RW5kRGF0ZVwiIHx8XHJcbiAgICAgICAgICAgICAgICAgICAga2V5ID09PSBcImRhdGVcIiB8fFxyXG4gICAgICAgICAgICAgICAgICAgIGtleSA9PT0gXCJEYXRlXCIgfHxcclxuICAgICAgICAgICAgICAgICAgICBrZXkgPT09IFwicmV2aXNpb25TdGFydERhdGVcIiB8fFxyXG4gICAgICAgICAgICAgICAgICAgIGtleSA9PT0gXCJHZW5lcmF0ZWRPblwiIHx8XHJcbiAgICAgICAgICAgICAgICAgICAga2V5ID09PSBcIldlZWtcIiB8fFxyXG4gICAgICAgICAgICAgICAgICAgIGtleSA9PT0gXCJBY3R1YWxXZWVrU3RhcnREYXRlXCIgfHxcclxuICAgICAgICAgICAgICAgICAgICBrZXkgPT09IFwiVmlvbGF0ZWRTcG90RGF0ZVwiIHx8XHJcbiAgICAgICAgICAgICAgICAgICAga2V5ID09PSBcIlZpb2xhdGluZ1Nwb3REYXRlXCJcclxuICAgICAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgICAgIGZpbHRlcmVkRGF0YSA9IGZpbHRlcmVkRGF0YS5maWx0ZXIoKG9iaikgPT4gdGhpcy5pc09iamVjdEluVGhlUmFuZ2Uob2JqLCB2YWx1ZSwga2V5KSk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGtleSA9PT0gXCJwZXJpb2RcIikge1xyXG4gICAgICAgICAgICAgICAgICAgIGZpbHRlcmVkRGF0YSA9IGZpbHRlcmVkRGF0YS5maWx0ZXIoKG9iaikgPT4gdGhpcy5nZXREYXRhSW5UaGVEYXRlUmFuZ2Uob2JqLCB2YWx1ZSwga2V5KSk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKFxyXG4gICAgICAgICAgICAgICAgICAgIGtleSA9PT0gXCJTdGFydFRpbWVGb3JGaWx0ZXJcIiB8fFxyXG4gICAgICAgICAgICAgICAgICAgIGtleSA9PT0gXCJFbmRUaW1lRm9yRmlsdGVyXCIgfHxcclxuICAgICAgICAgICAgICAgICAgICBrZXkgPT09IFwidGltZW91dFRpbWVcIiB8fFxyXG4gICAgICAgICAgICAgICAgICAgIGtleSA9PT0gXCJzdGFydFRpbWVGb3JGaWx0ZXJcIiB8fFxyXG4gICAgICAgICAgICAgICAgICAgIGtleSA9PT0gXCJlbmRUaW1lRm9yRmlsdGVyXCIgfHxcclxuICAgICAgICAgICAgICAgICAgICBrZXkgPT09IFwiU3RhcnRUaW1lXCIgfHxcclxuICAgICAgICAgICAgICAgICAgICBrZXkgPT09IFwiRW5kVGltZVwiIHx8XHJcbiAgICAgICAgICAgICAgICAgICAga2V5ID09PSBcInN0YXJ0X3RpbWVfZm9yX2ZpbHRlclwiIHx8XHJcbiAgICAgICAgICAgICAgICAgICAga2V5ID09PSBcImVuZF90aW1lX2Zvcl9maWx0ZXJcIiB8fFxyXG4gICAgICAgICAgICAgICAgICAgIGtleSA9PT0gXCJ0aW1lXCJcclxuICAgICAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgICAgIGZpbHRlcmVkRGF0YSA9IGZpbHRlcmVkRGF0YS5maWx0ZXIoKG9iaikgPT4gdGhpcy5yZXR1cm5EYXRhRm9yRnJvbUFuZFRvVGltZVJhbmdlKG9iaiwgdmFsdWUsIGtleSkpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChrZXkgPT09IFwic3RhcnRFbmRUaW1lTXVsdGlcIiB8fCBrZXkgPT09IFwic3RhcnRFbmRUaW1lXCIgfHwga2V5ID09PSBcIlRpbWVCYW5kXCIpIHtcclxuICAgICAgICAgICAgICAgICAgICBmaWx0ZXJlZERhdGEgPSBmaWx0ZXJlZERhdGEuZmlsdGVyKChvYmopID0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmV0dXJuRGF0YUZvclN0YXJ0QW5kRW5kVGltZVJhbmdlKG9iaiwgdmFsdWUsIGtleSksXHJcbiAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodmFsdWUubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGZpbHRlcmVkRGF0YSA9IGZpbHRlcmVkRGF0YS5maWx0ZXIoKHUpID0+IHZhbHVlLmluY2x1ZGVzKHVba2V5XSkpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIGZpbHRlcmVkRGF0YTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm5PcmRlcnNJblRoZVJhbmdlKG9yZGVyOiBhbnksIHJhbmdlOiBhbnksIGtleTogYW55KSB7XHJcbiAgICAgICAgY29uc3QgaXNEYXRlQmV0d2VlblRoZVNlbGVjdGVkUmFuZ2UgPSBkYXlqcyhvcmRlcltrZXldKS5pc0JldHdlZW4ocmFuZ2UubWluU2VsZWN0ZWREYXRlLCByYW5nZS5tYXhTZWxlY3RlZERhdGUpO1xyXG4gICAgICAgIGNvbnN0IGlzRGF0ZVNhbWVBc1RoZU1pblNlbGVjdGVkRGF0ZSA9IGRheWpzKG9yZGVyW2tleV0pLmlzU2FtZShyYW5nZS5taW5TZWxlY3RlZERhdGUpO1xyXG4gICAgICAgIGNvbnN0IGlzRGF0ZVNhbWVBc1RoZU1heFNlbGVjdGVkRGF0ZSA9IGRheWpzKG9yZGVyW2tleV0pLmlzU2FtZShyYW5nZS5tYXhTZWxlY3RlZERhdGUpO1xyXG4gICAgICAgIHJldHVybiBpc0RhdGVCZXR3ZWVuVGhlU2VsZWN0ZWRSYW5nZSB8fCBpc0RhdGVTYW1lQXNUaGVNaW5TZWxlY3RlZERhdGUgfHwgaXNEYXRlU2FtZUFzVGhlTWF4U2VsZWN0ZWREYXRlO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybkRhdGFGb3JUaW1lUmFuZ2Uob2JqOiBhbnksIHNlbGVjdGVkRGF0YTogYW55KSB7XHJcbiAgICAgICAgY29uc3QgZm9ybWF0ID0gXCJISDptbTpzc1wiO1xyXG4gICAgICAgIGNvbnN0IHNlbGVjdGVkU3RhcnREYXRlID0gZGF5anMoc2VsZWN0ZWREYXRhLnN0YXJ0VGltZSwgZm9ybWF0KTtcclxuICAgICAgICBjb25zdCBzZWxlY3RlZEVuZERhdGUgPSBkYXlqcyhzZWxlY3RlZERhdGEuZW5kVGltZSwgZm9ybWF0KTtcclxuICAgICAgICBjb25zdCBzdGFydFRpbWUgPSBkYXlqcyhvYmouc3RhcnRUaW1lLCBmb3JtYXQpO1xyXG4gICAgICAgIGNvbnN0IGVuZFRpbWUgPSBkYXlqcyhvYmouZW5kVGltZSwgZm9ybWF0KTtcclxuXHJcbiAgICAgICAgY29uc3QgaXNTdGFydFRpbWVTYW1lQXNTZWxlY3RlZFN0YXJ0VGltZSA9IHN0YXJ0VGltZS5pc1NhbWUoc2VsZWN0ZWRTdGFydERhdGUpO1xyXG4gICAgICAgIGNvbnN0IGlzU3RhcnRUaW1lQmV0d2VlblNlbGVjdGVkU3RhcnRBbmRFbmRUaW1lID0gc3RhcnRUaW1lLmlzQmV0d2VlbihzZWxlY3RlZFN0YXJ0RGF0ZSwgc2VsZWN0ZWRFbmREYXRlKTtcclxuICAgICAgICBjb25zdCBpc0VuZFRpbWVTYW1lQXNTZWxlY3RlZEVuZFRpbWUgPSBlbmRUaW1lLmlzU2FtZShzZWxlY3RlZEVuZERhdGUpO1xyXG4gICAgICAgIGNvbnN0IGlzRW5kVGltZUJldHdlZW5TZWxlY3RlZFN0YXJ0QW5kRW5kVGltZSA9IGVuZFRpbWUuaXNCZXR3ZWVuKHNlbGVjdGVkU3RhcnREYXRlLCBzZWxlY3RlZEVuZERhdGUpO1xyXG5cclxuICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICAoaXNTdGFydFRpbWVCZXR3ZWVuU2VsZWN0ZWRTdGFydEFuZEVuZFRpbWUgJiYgaXNFbmRUaW1lQmV0d2VlblNlbGVjdGVkU3RhcnRBbmRFbmRUaW1lKSB8fFxyXG4gICAgICAgICAgICAoaXNTdGFydFRpbWVTYW1lQXNTZWxlY3RlZFN0YXJ0VGltZSAmJiBpc0VuZFRpbWVTYW1lQXNTZWxlY3RlZEVuZFRpbWUpIHx8XHJcbiAgICAgICAgICAgIChpc1N0YXJ0VGltZVNhbWVBc1NlbGVjdGVkU3RhcnRUaW1lICYmIGlzRW5kVGltZUJldHdlZW5TZWxlY3RlZFN0YXJ0QW5kRW5kVGltZSkgfHxcclxuICAgICAgICAgICAgKGlzU3RhcnRUaW1lQmV0d2VlblNlbGVjdGVkU3RhcnRBbmRFbmRUaW1lICYmIGlzRW5kVGltZVNhbWVBc1NlbGVjdGVkRW5kVGltZSlcclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybkRhdGFGb3JGcm9tQW5kVG9UaW1lUmFuZ2Uob2JqOiBhbnksIHNlbGVjdGVkRGF0YTogYW55LCBrZXk6IGFueSkge1xyXG4gICAgICAgIGNvbnN0IGZvcm1hdCA9IFwiTU0vREQvWVlZWSBISDptbTpzc1wiO1xyXG4gICAgICAgIGNvbnN0IHNlbGVjdGVkRnJvbVRpbWUgPSBkYXlqcyhgMDEvMDEvMjAwMSAke3NlbGVjdGVkRGF0YS5mcm9tVGltZX1gLCBmb3JtYXQpO1xyXG4gICAgICAgIGNvbnN0IHNlbGVjdGVkVG9UaW1lID0gZGF5anMoYDAxLzAxLzIwMDEgJHtzZWxlY3RlZERhdGEudG9UaW1lfWAsIGZvcm1hdCk7XHJcbiAgICAgICAgY29uc3Qgb2JqVGltZSA9IG9ialtrZXldO1xyXG5cclxuICAgICAgICBpZiAoW1wiXCIsIFwiLVwiLCBudWxsXS5pbmNsdWRlcyhvYmpUaW1lKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChzZWxlY3RlZERhdGEuaW5jbHVkZU11bHRpICYmIG9ialtrZXldID09PSBcIjxtdWx0aT5cIikge1xyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFzZWxlY3RlZERhdGEuaW5jbHVkZU11bHRpICYmIG9ialtrZXldID09PSBcIjxtdWx0aT5cIikge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChzZWxlY3RlZERhdGEuaW5jbHVkZVplcm8gJiYgb2JqW2tleV0gPT09IFwiMFwiKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIXNlbGVjdGVkRGF0YS5pbmNsdWRlWmVybyAmJiBvYmpba2V5XSA9PT0gXCIwXCIpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIXNlbGVjdGVkRGF0YS5pbmNsdWRlVGltZVJhbmdlKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IGRheWpzVGltZSA9IGRheWpzKGAwMS8wMS8yMDAxICR7b2JqVGltZX1gLCBmb3JtYXQpO1xyXG5cclxuICAgICAgICBjb25zdCBpc09ialRpbWVTYW1lQXNTZWxlY3RlZEZyb21UaW1lID0gZGF5anNUaW1lLmlzU2FtZShzZWxlY3RlZEZyb21UaW1lKTtcclxuICAgICAgICBjb25zdCBpc09ialRpbWVTYW1lQXNTZWxlY3RlZFRvVGltZSA9IGRheWpzVGltZS5pc1NhbWUoc2VsZWN0ZWRUb1RpbWUpO1xyXG4gICAgICAgIGNvbnN0IGlzT2JqVGltZUJldHdlZW5TZWxlY3RlZEZyb21UaW1lQW5kVG9UaW1lID0gZGF5anNUaW1lLmlzQmV0d2VlbihzZWxlY3RlZEZyb21UaW1lLCBzZWxlY3RlZFRvVGltZSk7XHJcblxyXG4gICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgIGlzT2JqVGltZVNhbWVBc1NlbGVjdGVkRnJvbVRpbWUgfHxcclxuICAgICAgICAgICAgaXNPYmpUaW1lU2FtZUFzU2VsZWN0ZWRUb1RpbWUgfHxcclxuICAgICAgICAgICAgaXNPYmpUaW1lQmV0d2VlblNlbGVjdGVkRnJvbVRpbWVBbmRUb1RpbWVcclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybkRhdGFGb3JTdGFydEFuZEVuZFRpbWVSYW5nZShvYmo6IGFueSwgc2VsZWN0ZWREYXRhOiBhbnksIGtleTogc3RyaW5nKSB7XHJcbiAgICAgICAgY29uc3QgZm9ybWF0ID0gXCJNTS9ERC9ZWVlZIEhIOm1tOnNzXCI7XHJcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRGcm9tVGltZSA9IGRheWpzKGAwMS8wMS8yMDAxICR7c2VsZWN0ZWREYXRhLmZyb21UaW1lfWAsIGZvcm1hdCk7XHJcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRUb1RpbWUgPSBkYXlqcyhgMDEvMDEvMjAwMSAke3NlbGVjdGVkRGF0YS50b1RpbWV9YCwgZm9ybWF0KTtcclxuXHJcbiAgICAgICAgaWYgKHNlbGVjdGVkRGF0YS5pbmNsdWRlTXVsdGkgJiYgb2JqW2tleV1bMF0gPT09IFwiPG11bHRpPlwiKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCFzZWxlY3RlZERhdGEuaW5jbHVkZU11bHRpICYmIG9ialtrZXldWzBdID09PSBcIjxtdWx0aT5cIikge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoc2VsZWN0ZWREYXRhLmluY2x1ZGVaZXJvICYmIG9ialtrZXldWzBdID09PSBcIjBcIikge1xyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghc2VsZWN0ZWREYXRhLmluY2x1ZGVaZXJvICYmIG9ialtrZXldWzBdID09PSBcIjBcIikge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIXNlbGVjdGVkRGF0YS5pbmNsdWRlVGltZVJhbmdlKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IHN0YXJ0VGltZSA9IGRheWpzKGAwMS8wMS8yMDAxICR7b2JqW2tleV1bMV19YCwgZm9ybWF0KTtcclxuICAgICAgICBjb25zdCBlbmRUaW1lID0gZGF5anMoYDAxLzAxLzIwMDEgJHtvYmpba2V5XVsyXX1gLCBmb3JtYXQpO1xyXG5cclxuICAgICAgICBjb25zdCBpc1N0YXJ0VGltZVNhbWVBc1NlbGVjdGVkU3RhcnRUaW1lID0gc3RhcnRUaW1lLmlzU2FtZShzZWxlY3RlZEZyb21UaW1lKTtcclxuICAgICAgICBjb25zdCBpc1N0YXJ0VGltZUJldHdlZW5TZWxlY3RlZFN0YXJ0QW5kRW5kVGltZSA9IHN0YXJ0VGltZS5pc0JldHdlZW4oc2VsZWN0ZWRGcm9tVGltZSwgc2VsZWN0ZWRUb1RpbWUpO1xyXG4gICAgICAgIGNvbnN0IGlzRW5kVGltZVNhbWVBc1NlbGVjdGVkRW5kVGltZSA9IGVuZFRpbWUuaXNTYW1lKHNlbGVjdGVkVG9UaW1lKTtcclxuICAgICAgICBjb25zdCBpc0VuZFRpbWVCZXR3ZWVuU2VsZWN0ZWRTdGFydEFuZEVuZFRpbWUgPSBlbmRUaW1lLmlzQmV0d2VlbihzZWxlY3RlZEZyb21UaW1lLCBzZWxlY3RlZFRvVGltZSk7XHJcblxyXG4gICAgICAgIC8vIHByZXZpb3VzIGNvbmRpdGlvbiB0byBhcHBseSB0aW1iYW5kIGZpbHR0ZXJcclxuICAgICAgICAvLyByZXR1cm4gKFxyXG4gICAgICAgIC8vICAgICAoaXNTdGFydFRpbWVCZXR3ZWVuU2VsZWN0ZWRTdGFydEFuZEVuZFRpbWUgJiYgaXNFbmRUaW1lQmV0d2VlblNlbGVjdGVkU3RhcnRBbmRFbmRUaW1lKSB8fFxyXG4gICAgICAgIC8vICAgICAoaXNTdGFydFRpbWVTYW1lQXNTZWxlY3RlZFN0YXJ0VGltZSAmJiBpc0VuZFRpbWVTYW1lQXNTZWxlY3RlZEVuZFRpbWUpIHx8XHJcbiAgICAgICAgLy8gICAgIChpc1N0YXJ0VGltZVNhbWVBc1NlbGVjdGVkU3RhcnRUaW1lICYmIGlzRW5kVGltZUJldHdlZW5TZWxlY3RlZFN0YXJ0QW5kRW5kVGltZSkgfHxcclxuICAgICAgICAvLyAgICAgKGlzU3RhcnRUaW1lQmV0d2VlblNlbGVjdGVkU3RhcnRBbmRFbmRUaW1lICYmIGlzRW5kVGltZVNhbWVBc1NlbGVjdGVkRW5kVGltZSlcclxuICAgICAgICAvLyApO1xyXG5cclxuICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICBpc1N0YXJ0VGltZVNhbWVBc1NlbGVjdGVkU3RhcnRUaW1lIHx8XHJcbiAgICAgICAgICAgIGlzU3RhcnRUaW1lQmV0d2VlblNlbGVjdGVkU3RhcnRBbmRFbmRUaW1lIHx8XHJcbiAgICAgICAgICAgIGlzRW5kVGltZVNhbWVBc1NlbGVjdGVkRW5kVGltZSB8fFxyXG4gICAgICAgICAgICBpc0VuZFRpbWVCZXR3ZWVuU2VsZWN0ZWRTdGFydEFuZEVuZFRpbWVcclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGdldERhdGFJblRoZURhdGVSYW5nZShvYmo6IGFueSwgdmFsdWU6IGFueSwga2V5OiBhbnkpIHtcclxuICAgICAgICBsZXQgcGFyc2luZ0Zvcm1hdDogc3RyaW5nO1xyXG4gICAgICAgIGlmIChrZXkgPT09IFwicGVyaW9kXCIpIHtcclxuICAgICAgICAgICAgcGFyc2luZ0Zvcm1hdCA9IFwiWVlZWS1NTS1ERFwiO1xyXG5cclxuICAgICAgICAgICAgY29uc3QgZGF5anNTdGFydERhdGUgPSBkYXlqcyhvYmouc3RhcnREYXRlKTtcclxuICAgICAgICAgICAgY29uc3QgZGF5anNFbmREYXRlID0gZGF5anMob2JqLmVuZERhdGUpO1xyXG5cclxuICAgICAgICAgICAgY29uc3Qgc3RhcnREYXRlSXNCZXR3ZWVuU2VsRGF0ZSA9IGRheWpzU3RhcnREYXRlLmlzQmV0d2Vlbih2YWx1ZS5mcm9tRGF0ZSwgdmFsdWUudG9EYXRlKTtcclxuICAgICAgICAgICAgY29uc3QgZW5kRGF0ZUlzQmV0d2VlblNlbERhdGUgPSBkYXlqc0VuZERhdGUuaXNCZXR3ZWVuKHZhbHVlLmZyb21EYXRlLCB2YWx1ZS50b0RhdGUpO1xyXG5cclxuICAgICAgICAgICAgY29uc3Qgc3RhcnREYXRlSXNTYW1lQXNTZWxTdGFydERhdGUgPSB2YWx1ZS5mcm9tRGF0ZS5pc1NhbWUoZGF5anNTdGFydERhdGUpO1xyXG4gICAgICAgICAgICBjb25zdCBlbmREYXRlSXNTYW1lQXNTZWxFbmREYXRlID0gdmFsdWUudG9EYXRlLmlzU2FtZShkYXlqc0VuZERhdGUpO1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgICAgIChzdGFydERhdGVJc0JldHdlZW5TZWxEYXRlIHx8IHN0YXJ0RGF0ZUlzU2FtZUFzU2VsU3RhcnREYXRlKSAmJlxyXG4gICAgICAgICAgICAgICAgKGVuZERhdGVJc0JldHdlZW5TZWxEYXRlIHx8IGVuZERhdGVJc1NhbWVBc1NlbEVuZERhdGUpXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgfSBlbHNlIGlmIChcclxuICAgICAgICAgICAga2V5ID09PSBcIkFpckRhdGVcIiB8fFxyXG4gICAgICAgICAgICBrZXkgPT09IFwiZmxpZ2h0U3RhcnREYXRlXCIgfHxcclxuICAgICAgICAgICAga2V5ID09PSBcImZsaWdodEVuZERhdGVcIiB8fFxyXG4gICAgICAgICAgICBrZXkgPT09IFwiV2Vla1wiIHx8XHJcbiAgICAgICAgICAgIGtleSA9PT0gXCJBY3R1YWxXZWVrU3RhcnREYXRlXCIgfHxcclxuICAgICAgICAgICAga2V5ID09PSBcInRpbWVvdXREYXRlXCJcclxuICAgICAgICApIHtcclxuICAgICAgICAgICAgcGFyc2luZ0Zvcm1hdCA9IFwiTU0vREQvWVlZWVwiO1xyXG4gICAgICAgICAgICBjb25zdCBkYXRlSXNCZXR3ZWVuU2VsRGF0ZSA9IGRheWpzKG9ialtrZXldLCBwYXJzaW5nRm9ybWF0KS5pc0JldHdlZW4oXHJcbiAgICAgICAgICAgICAgICB2YWx1ZS5taW5TZWxlY3RlZERhdGUsXHJcbiAgICAgICAgICAgICAgICB2YWx1ZS5tYXhTZWxlY3RlZERhdGUsXHJcbiAgICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgICBjb25zdCBkYXRlSXNTYW1lQXNTZWxTdGFydERhdGUgPSBkYXlqcyhvYmpba2V5XSwgcGFyc2luZ0Zvcm1hdCkuaXNTYW1lKHZhbHVlLm1pblNlbGVjdGVkRGF0ZSk7XHJcbiAgICAgICAgICAgIGNvbnN0IGRhdGVJc1NhbWVBc1NlbEVuZERhdGUgPSBkYXlqcyhvYmpba2V5XSwgcGFyc2luZ0Zvcm1hdCkuaXNTYW1lKHZhbHVlLm1heFNlbGVjdGVkRGF0ZSk7XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gZGF0ZUlzQmV0d2VlblNlbERhdGUgfHwgZGF0ZUlzU2FtZUFzU2VsU3RhcnREYXRlIHx8IGRhdGVJc1NhbWVBc1NlbEVuZERhdGU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGluaXRpYWxpemVUaW1lRmlsdGVyRGF0YShjbG9uZWREYXRhOiBhbnlbXSwga2V5ID0gXCJzdGFydEVuZFRpbWVcIikge1xyXG4gICAgICAgIGNvbnN0IHN0YXJ0VGltZUFyciA9IG1hcChjbG9uZWREYXRhLCBcInN0YXJ0VGltZVwiKTtcclxuICAgICAgICBjb25zdCBlbmRUaW1lQXJyID0gbWFwKGNsb25lZERhdGEsIFwiZW5kVGltZVwiKTtcclxuXHJcbiAgICAgICAgc3RhcnRUaW1lQXJyLnNvcnQoKGE6IGFueSwgYjogYW55KSA9PiB0aGlzLmRhdGVUaW1lRm9ybWF0U2VydmljZS5zb3J0QnlUaW1lQXNjZW5kaW5nKGEsIGIpKTtcclxuXHJcbiAgICAgICAgZW5kVGltZUFyci5zb3J0KChhOiBhbnksIGI6IGFueSkgPT4gdGhpcy5kYXRlVGltZUZvcm1hdFNlcnZpY2Uuc29ydEJ5VGltZURlc2NlbmRpbmcoYSwgYikpO1xyXG5cclxuICAgICAgICBjb25zdCBpbml0aWFsU3RhcnRFbmRUaW1lID0ge1xyXG4gICAgICAgICAgICBzdGFydFRpbWU6IHN0YXJ0VGltZUFyclswXSxcclxuICAgICAgICAgICAgZW5kVGltZTogZW5kVGltZUFyclswXSxcclxuICAgICAgICB9O1xyXG4gICAgICAgIHRoaXMuaW5pdGlhbFZhbHVlTWFwLnNldChrZXksIGluaXRpYWxTdGFydEVuZFRpbWUpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybkNvbHVtbkZpbHRlclN0YXR1cyhkYXRhOiBhbnlbXSwgaGVhZGVyTmFtZTogc3RyaW5nIHwgbnVtYmVyKSB7XHJcbiAgICAgICAgaWYgKGhlYWRlck5hbWUgPT09IFwic3RhcnRFbmRUaW1lXCIpIHtcclxuICAgICAgICAgICAgY29uc3QgdGltZSA9IGRhdGEubWFwKCh1KSA9PiB1W2hlYWRlck5hbWVdWzBdKTtcclxuICAgICAgICAgICAgY29uc3QgdW5pcVRpbWUgPSB1bmlxKHRpbWUpO1xyXG4gICAgICAgICAgICByZXR1cm4gdW5pcVRpbWUubGVuZ3RoID09PSAwO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuICEodW5pcShkYXRhLm1hcCgodSkgPT4gdVtoZWFkZXJOYW1lXSkpLmxlbmd0aCA+IDEpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldEZpbHRlck9wdGlvbnNEYXRhKGRhdGE6IGFueVtdLCBjbG9uZWREYXRhOiBhbnlbXSwga2V5Pzogc3RyaW5nKSB7XHJcbiAgICAgICAgY29uc3QgYXBwbGllZEZpbHRlclNldCA9IG5ldyBTZXQodGhpcy5hcHBsaWVkRmlsdGVyc0FycmF5KTtcclxuICAgICAgICBjb25zdCBrZXlUb0NoZWNrID0ga2V5IHx8IHRoaXMuc2VsZWN0ZWRSYWRpbztcclxuICAgICAgICBpZiAoYXBwbGllZEZpbHRlclNldC5oYXMoa2V5VG9DaGVjaykpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZmlsdGVyRGF0YShjbG9uZWREYXRhLCBrZXlUb0NoZWNrKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGRhdGE7XHJcbiAgICB9XHJcblxyXG4gICAgcmVPcmRlckFwcGxpZWRGaWx0ZXJzU3RhdGUoY2xvbmVkRGF0YTogYW55W10sIHZhbHVlOiBhbnkpIHtcclxuICAgICAgICBsZXQgaXNGaWx0ZXJlZCA9IHRydWU7XHJcbiAgICAgICAgaXNGaWx0ZXJlZCA9IHRoaXMuY2hlY2tJZkZpbHRlcklzQXBwbGllZChjbG9uZWREYXRhLCB2YWx1ZSk7XHJcbiAgICAgICAgdGhpcy5yZW1vdmVPckNoYW5nZUxhdGVzdEZpbHRlckluZGV4KGlzRmlsdGVyZWQpO1xyXG4gICAgICAgIHJldHVybiBpc0ZpbHRlcmVkO1xyXG4gICAgfVxyXG5cclxuICAgIGNoZWNrSWZGaWx0ZXJJc0FwcGxpZWQoY2xvbmVkRGF0YTogYW55W10sIHZhbHVlOiBhbnkpIHtcclxuICAgICAgICBjb25zdCBpbml0aWFsVmFsdWVPZkNvbHVtbiA9IHNvcnRCeShjbG9uZWREYXRhLm1hcCgoaXRlbSkgPT4gaXRlbVt0aGlzLnNlbGVjdGVkUmFkaW9dKSk7XHJcbiAgICAgICAgY29uc3QgY3VycmVudFZhbHVlT2ZDb2x1bW4gPSBzb3J0QnkoXHJcbiAgICAgICAgICAgIHRoaXMuYXBwbHlGaWx0ZXIoY2xvbmVkRGF0YSwgdmFsdWUpLm1hcCgoaXRlbSkgPT4gaXRlbVt0aGlzLnNlbGVjdGVkUmFkaW9dKSxcclxuICAgICAgICApO1xyXG4gICAgICAgIHJldHVybiAhaXNFcXVhbChpbml0aWFsVmFsdWVPZkNvbHVtbiwgY3VycmVudFZhbHVlT2ZDb2x1bW4pO1xyXG4gICAgfVxyXG5cclxuICAgIGFwcGx5RmlsdGVyKGRhdGE6IGFueVtdLCB2YWx1ZTogYW55KSB7XHJcbiAgICAgICAgbGV0IGZpbHRlcmVkRGF0YSA9IGRhdGE7XHJcbiAgICAgICAgY29uc3Qga2V5ID0gdGhpcy5zZWxlY3RlZFJhZGlvO1xyXG4gICAgICAgIGlmICh0aGlzLnNsaWRlclNldC5oYXMoa2V5KSkge1xyXG4gICAgICAgICAgICBmaWx0ZXJlZERhdGEgPSBmaWx0ZXJlZERhdGEuZmlsdGVyKChvYmopID0+IG9ialtrZXldID49IHZhbHVlLm1pbiAmJiBvYmpba2V5XSA8PSB2YWx1ZS5tYXgpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoXHJcbiAgICAgICAgICAgIGtleSA9PT0gXCJzdGFydERhdGVcIiB8fFxyXG4gICAgICAgICAgICBrZXkgPT09IFwiZW5kRGF0ZVwiIHx8XHJcbiAgICAgICAgICAgIGtleSA9PT0gXCJTdGFydERhdGVcIiB8fFxyXG4gICAgICAgICAgICBrZXkgPT09IFwiRW5kRGF0ZVwiIHx8XHJcbiAgICAgICAgICAgIGtleSA9PT0gXCJBaXJEYXRlXCIgfHxcclxuICAgICAgICAgICAga2V5ID09PSBcInRpbWVvdXREYXRlXCIgfHxcclxuICAgICAgICAgICAga2V5ID09PSBcImZsaWdodFN0YXJ0RGF0ZVwiIHx8XHJcbiAgICAgICAgICAgIGtleSA9PT0gXCJmbGlnaHRFbmREYXRlXCIgfHxcclxuICAgICAgICAgICAga2V5ID09PSBcImRhdGVcIiB8fFxyXG4gICAgICAgICAgICBrZXkgPT09IFwiRGF0ZVwiIHx8XHJcbiAgICAgICAgICAgIGtleSA9PT0gXCJyZXZpc2lvblN0YXJ0RGF0ZVwiIHx8XHJcbiAgICAgICAgICAgIGtleSA9PT0gXCJHZW5lcmF0ZWRPblwiIHx8XHJcbiAgICAgICAgICAgIGtleSA9PT0gXCJXZWVrXCIgfHxcclxuICAgICAgICAgICAga2V5ID09PSBcIkFjdHVhbFdlZWtTdGFydERhdGVcIiB8fFxyXG4gICAgICAgICAgICBrZXkgPT09IFwiVmlvbGF0ZWRTcG90RGF0ZVwiIHx8XHJcbiAgICAgICAgICAgIGtleSA9PT0gXCJWaW9sYXRpbmdTcG90RGF0ZVwiXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIGZpbHRlcmVkRGF0YSA9IGZpbHRlcmVkRGF0YS5maWx0ZXIoKG9iaikgPT4gdGhpcy5pc09iamVjdEluVGhlUmFuZ2Uob2JqLCB2YWx1ZSwga2V5KSk7XHJcbiAgICAgICAgfSBlbHNlIGlmIChrZXkgPT09IFwicGVyaW9kXCIpIHtcclxuICAgICAgICAgICAgZmlsdGVyZWREYXRhID0gZmlsdGVyZWREYXRhLmZpbHRlcigob2JqKSA9PiB0aGlzLmdldERhdGFJblRoZURhdGVSYW5nZShvYmosIHZhbHVlLCBrZXkpKTtcclxuICAgICAgICB9IGVsc2UgaWYgKFxyXG4gICAgICAgICAgICBrZXkgPT09IFwiU3RhcnRUaW1lRm9yRmlsdGVyXCIgfHxcclxuICAgICAgICAgICAga2V5ID09PSBcIkVuZFRpbWVGb3JGaWx0ZXJcIiB8fFxyXG4gICAgICAgICAgICBrZXkgPT09IFwidGltZW91dFRpbWVcIiB8fFxyXG4gICAgICAgICAgICBrZXkgPT09IFwic3RhcnRUaW1lRm9yRmlsdGVyXCIgfHxcclxuICAgICAgICAgICAga2V5ID09PSBcImVuZFRpbWVGb3JGaWx0ZXJcIiB8fFxyXG4gICAgICAgICAgICBrZXkgPT09IFwic3RhcnRfdGltZV9mb3JfZmlsdGVyXCIgfHxcclxuICAgICAgICAgICAga2V5ID09PSBcImVuZF90aW1lX2Zvcl9maWx0ZXJcIiB8fFxyXG4gICAgICAgICAgICBrZXkgPT09IFwidGltZVwiIHx8XHJcbiAgICAgICAgICAgIGtleSA9PT0gXCJTdGFydFRpbWVcIiB8fFxyXG4gICAgICAgICAgICBrZXkgPT09IFwiRW5kVGltZVwiIHx8XHJcbiAgICAgICAgICAgIGtleSA9PT0gXCJPdGhlckF2YWlsYWJsZVNwb3RzVGFibGVTdGFydFRpbWVcIiB8fFxyXG4gICAgICAgICAgICBrZXkgPT09IFwiT3RoZXJBdmFpbGFibGVTcG90c1RhYmxlRW5kVGltZVwiXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIGZpbHRlcmVkRGF0YSA9IGZpbHRlcmVkRGF0YS5maWx0ZXIoKG9iaikgPT4gdGhpcy5yZXR1cm5EYXRhRm9yRnJvbUFuZFRvVGltZVJhbmdlKG9iaiwgdmFsdWUsIGtleSkpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoa2V5ID09PSBcInN0YXJ0RW5kVGltZU11bHRpXCIgfHwga2V5ID09PSBcInN0YXJ0RW5kVGltZVwiIHx8IGtleSA9PT0gXCJUaW1lQmFuZFwiKSB7XHJcbiAgICAgICAgICAgIGZpbHRlcmVkRGF0YSA9IGZpbHRlcmVkRGF0YS5maWx0ZXIoKG9iaikgPT4gdGhpcy5yZXR1cm5EYXRhRm9yU3RhcnRBbmRFbmRUaW1lUmFuZ2Uob2JqLCB2YWx1ZSwga2V5KSk7XHJcbiAgICAgICAgfSBlbHNlIGlmICh2YWx1ZS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIGZpbHRlcmVkRGF0YSA9IGZpbHRlcmVkRGF0YS5maWx0ZXIoKHUpID0+IHZhbHVlLmluY2x1ZGVzKHVba2V5XSkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZmlsdGVyZWREYXRhO1xyXG4gICAgfVxyXG5cclxuICAgIGlzT2JqZWN0SW5UaGVSYW5nZShvYmo6IGFueSwgdmFsdWU6IGFueSwga2V5OiBzdHJpbmcpIHtcclxuICAgICAgICBjb25zdCBvYmpWYWwgPSBvYmpba2V5XTtcclxuICAgICAgICBjb25zdCBkYXlqc0RhdGUgPSBkYXlqcyhvYmpWYWwpO1xyXG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUuZnJvbURhdGUgPT09IFwic3RyaW5nXCIgJiYgdHlwZW9mIHZhbHVlLnRvRGF0ZSA9PT0gXCJzdHJpbmdcIikge1xyXG4gICAgICAgICAgICB2YWx1ZS5mcm9tRGF0ZSA9IGRheWpzKFxyXG4gICAgICAgICAgICAgICAgdGhpcy5kYXRlVGltZUZvcm1hdFNlcnZpY2UuY29udmVydE5nYkRhdGVUb01vbWVudChcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGVUaW1lRm9ybWF0U2VydmljZS5jb252ZXJ0VG9OZ2JEYXRlKHZhbHVlLmZyb21EYXRlLCBcIkREL01NL1lZWVlcIiksXHJcbiAgICAgICAgICAgICAgICApLFxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB2YWx1ZS50b0RhdGUgPSBkYXlqcyhcclxuICAgICAgICAgICAgICAgIHRoaXMuZGF0ZVRpbWVGb3JtYXRTZXJ2aWNlLmNvbnZlcnROZ2JEYXRlVG9Nb21lbnQoXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRlVGltZUZvcm1hdFNlcnZpY2UuY29udmVydFRvTmdiRGF0ZSh2YWx1ZS50b0RhdGUsIFwiREQvTU0vWVlZWVwiKSxcclxuICAgICAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGlzRGF0ZVNhbWVBc1N0YXJ0T2ZUaGVSYW5nZSA9IHZhbHVlLmZyb21EYXRlLmlzU2FtZShvYmpWYWwpO1xyXG4gICAgICAgIGNvbnN0IGlzRGF0ZVNhbWVBc0VuZE9mVGhlUmFuZ2UgPSB2YWx1ZS50b0RhdGUuaXNTYW1lKG9ialZhbCk7XHJcbiAgICAgICAgY29uc3QgaXNEYXRlQmV0d2VlblRoZVN0YXJ0QW5kRW5kT2ZSYW5nZSA9IGRheWpzRGF0ZS5pc0JldHdlZW4odmFsdWUuZnJvbURhdGUsIHZhbHVlLnRvRGF0ZSk7XHJcbiAgICAgICAgcmV0dXJuIGlzRGF0ZVNhbWVBc1N0YXJ0T2ZUaGVSYW5nZSB8fCBpc0RhdGVTYW1lQXNFbmRPZlRoZVJhbmdlIHx8IGlzRGF0ZUJldHdlZW5UaGVTdGFydEFuZEVuZE9mUmFuZ2U7XHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlU3RhdGVPZlRoZUN1cnJlbnRGaWx0ZXJUYWIoc29ydE1hcDogTWFwPHN0cmluZywgU29ydFR5cGU+KSB7XHJcbiAgICAgICAgY29uc3QgYWN0aXZlS2V5ID0gdGhpcy5zZWxlY3RlZFJhZGlvO1xyXG4gICAgICAgIGxldCBrZXlBcnI6IHN0cmluZ1tdID0gW107XHJcbiAgICAgICAgT2JqZWN0LmtleXModGhpcy5pc0ZpbHRlclNvcnRBY3RpdmUpLmZvckVhY2goKGtleSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoa2V5LmluY2x1ZGVzKGFjdGl2ZUtleSkpIHtcclxuICAgICAgICAgICAgICAgIGtleUFyciA9IGtleS5zcGxpdChcIixcIik7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzRmlsdGVyU29ydEFjdGl2ZVtrZXldID0gdGhpcy5pc1Rvb2x0aXBBY3RpdmUoa2V5QXJyLCBzb3J0TWFwKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZVN0YXRlT2ZBbGxUaGVLZXlzKHNvcnRNYXA6IE1hcDxzdHJpbmcsIFNvcnRUeXBlPikge1xyXG4gICAgICAgIE9iamVjdC5rZXlzKHRoaXMuaXNGaWx0ZXJTb3J0QWN0aXZlKS5mb3JFYWNoKChrZXkpID0+IHtcclxuICAgICAgICAgICAgY29uc3Qga2V5QXJyID0ga2V5LnNwbGl0KFwiLFwiKTtcclxuICAgICAgICAgICAgdGhpcy5pc0ZpbHRlclNvcnRBY3RpdmVba2V5XSA9IHRoaXMuaXNUb29sdGlwQWN0aXZlKGtleUFyciwgc29ydE1hcCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgaW5jcmVtZW50SG91cih2YWx1ZTogYW55KSB7XHJcbiAgICAgICAgaWYgKHZhbHVlID09PSBcIlwiKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAxO1xyXG4gICAgICAgIH0gZWxzZSBpZiAocGFyc2VJbnQodmFsdWUsIDEwKSA8IDEyKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBwYXJzZUludCh2YWx1ZSwgMTApICsgMTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiAxO1xyXG4gICAgfVxyXG5cclxuICAgIGRlY3JlbWVudEhvdXIodmFsdWU6IGFueSkge1xyXG4gICAgICAgIGlmICh2YWx1ZSA9PT0gXCJcIikge1xyXG4gICAgICAgICAgICByZXR1cm4gMTI7XHJcbiAgICAgICAgfSBlbHNlIGlmIChwYXJzZUludCh2YWx1ZSwgMTApID4gMSkge1xyXG4gICAgICAgICAgICByZXR1cm4gcGFyc2VJbnQodmFsdWUsIDEwKSAtIDE7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiAxMjtcclxuICAgIH1cclxuXHJcbiAgICBpbmNyZW1lbnRNaW51dGUodmFsdWU6IGFueSkge1xyXG4gICAgICAgIC8vIGluY3JlbWVudCB0byBuZWFyZXN0IHByb3BlciBpbnRlcnZhbCgxNSwzMCw0NSlcclxuICAgICAgICBjb25zdCBtaW51dGUgPSBwYXJzZUludCh2YWx1ZSwgMTApO1xyXG4gICAgICAgIGlmIChtaW51dGUgPD0gMTQpIHtcclxuICAgICAgICAgICAgcmV0dXJuIFwiMTVcIjtcclxuICAgICAgICB9IGVsc2UgaWYgKG1pbnV0ZSA+PSAxNSAmJiBtaW51dGUgPD0gMjkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIFwiMzBcIjtcclxuICAgICAgICB9IGVsc2UgaWYgKG1pbnV0ZSA+PSAzMCAmJiBtaW51dGUgPD0gNDQpIHtcclxuICAgICAgICAgICAgcmV0dXJuIFwiNDVcIjtcclxuICAgICAgICB9IGVsc2UgaWYgKG1pbnV0ZSA+PSA0NSkge1xyXG4gICAgICAgICAgICByZXR1cm4gXCIwMFwiO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdmFsdWU7XHJcbiAgICB9XHJcblxyXG4gICAgZGVjcmVtZW50TWludXRlKHZhbHVlOiBhbnkpIHtcclxuICAgICAgICBjb25zdCBtaW51dGUgPSBwYXJzZUludCh2YWx1ZSwgMTApO1xyXG4gICAgICAgIGlmIChtaW51dGUgPiAwICYmIG1pbnV0ZSA8PSAxNSkge1xyXG4gICAgICAgICAgICByZXR1cm4gXCIwMFwiO1xyXG4gICAgICAgIH0gZWxzZSBpZiAobWludXRlID49IDE2ICYmIG1pbnV0ZSA8PSAzMCkge1xyXG4gICAgICAgICAgICByZXR1cm4gXCIxNVwiO1xyXG4gICAgICAgIH0gZWxzZSBpZiAobWludXRlID49IDMxICYmIG1pbnV0ZSA8PSA0NSkge1xyXG4gICAgICAgICAgICByZXR1cm4gXCIzMFwiO1xyXG4gICAgICAgIH0gZWxzZSBpZiAobWludXRlID4gNDUgfHwgbWludXRlID09PSAwKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBcIjQ1XCI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB2YWx1ZTtcclxuICAgIH1cclxuXHJcbiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Q2hlY2tib3ggbWV0aG9kPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PS8vXHJcblxyXG4gICAgZGlzYWJsZUFjdGl2ZUZpbHRlckNsZWFyQnV0dG9uKCkge1xyXG4gICAgICAgIGNvbnN0IHNlbGVjdGVkRmlsdGVyU2V0ID0gbmV3IFNldCh0aGlzLmFwcGxpZWRGaWx0ZXJzQXJyYXkpO1xyXG5cclxuICAgICAgICBjb25zdCBjdXJyZW50Q29sdW1uU29ydEZpbHRlciA9IHRoaXMuZ2V0Q29sdW1uU29ydFN0YXRlRm9yU2VsZWN0ZWRSYWRpbygpO1xyXG4gICAgICAgIGNvbnN0IGlzU29ydFByZXNlbnQgPVxyXG4gICAgICAgICAgICB0aGlzLmFubmFTb3J0U2VydmljZS5jb2x1bW5Tb3J0U3RhdGUgJiZcclxuICAgICAgICAgICAgdGhpcy5hbm5hU29ydFNlcnZpY2UuY29sdW1uU29ydFN0YXRlLnNpemUgPiAwICYmXHJcbiAgICAgICAgICAgIGN1cnJlbnRDb2x1bW5Tb3J0RmlsdGVyICE9PSBTb3J0VHlwZUVudW0uREVGQVVMVDtcclxuXHJcbiAgICAgICAgcmV0dXJuICEoc2VsZWN0ZWRGaWx0ZXJTZXQuaGFzKHRoaXMuc2VsZWN0ZWRSYWRpbykgfHwgaXNTb3J0UHJlc2VudCk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0Q29sdW1uU29ydFN0YXRlRm9yU2VsZWN0ZWRSYWRpbygpOiBzdHJpbmcge1xyXG4gICAgICAgIGxldCBjdXJyZW50Q29sdW1uU29ydEZpbHRlciA9XHJcbiAgICAgICAgICAgIHRoaXMuYW5uYVNvcnRTZXJ2aWNlLmNvbHVtblNvcnRTdGF0ZSAmJlxyXG4gICAgICAgICAgICB0aGlzLmFubmFTb3J0U2VydmljZS5jb2x1bW5Tb3J0U3RhdGUuaGFzKHRoaXMuc2VsZWN0ZWRSYWRpbykgJiZcclxuICAgICAgICAgICAgdGhpcy5hbm5hU29ydFNlcnZpY2UuY29sdW1uU29ydFN0YXRlLmdldCh0aGlzLnNlbGVjdGVkUmFkaW8pO1xyXG4gICAgICAgIGN1cnJlbnRDb2x1bW5Tb3J0RmlsdGVyID0gY3VycmVudENvbHVtblNvcnRGaWx0ZXIgfHwgU29ydFR5cGVFbnVtLkRFRkFVTFQ7XHJcbiAgICAgICAgcmV0dXJuIGN1cnJlbnRDb2x1bW5Tb3J0RmlsdGVyO1xyXG4gICAgfVxyXG5cclxuICAgIGNyZWF0ZUxpc3RGb3JDaGVja2JveEZpbHRlcihoZWFkZXI6IHN0cmluZywgb3B0aW9uRGF0YTogYW55W10pIHtcclxuICAgICAgICBjb25zdCB0b29sdGlwT3B0aW9ucyA9IHRoaXMuZ2V0VG9vbHRpcE1vZGVsRnJvbU9wdGlvbkRhdGEob3B0aW9uRGF0YSwgaGVhZGVyKTtcclxuXHJcbiAgICAgICAgdGhpcy5zZWxlY3RVbnNlbGVjdExpc3RDaGVja2JveCh0b29sdGlwT3B0aW9ucywgaGVhZGVyKTtcclxuICAgICAgICB0aGlzLmZvcm1hdE51bGxPcHRpb25Ub1NwZWNpZmllZFN0cmluZyh0b29sdGlwT3B0aW9ucywgdGhpcy5udWxsVG9CZUZvcm1hdGVkSW50b1N0cmluZyk7XHJcblxyXG4gICAgICAgIHJldHVybiB0b29sdGlwT3B0aW9ucztcclxuICAgIH1cclxuXHJcbiAgICBnZXRUb29sdGlwTW9kZWxGcm9tT3B0aW9uRGF0YShvcHRpb25EYXRhOiBhbnlbXSwgaGVhZGVyOiBzdHJpbmcpIHtcclxuICAgICAgICBjb25zdCB1bmlxT3B0aW9uRGF0YSA9IHVuaXEob3B0aW9uRGF0YS5tYXAoKGl0ZW0pID0+IGl0ZW1baGVhZGVyXSkpO1xyXG4gICAgICAgIHJldHVybiB1bmlxT3B0aW9uRGF0YS5tYXAoKGl0ZW0sIGluZGV4KSA9PiBuZXcgVG9vbHRpcE1vZGVsKGl0ZW0sIGluZGV4ICsgMSkpO1xyXG4gICAgfVxyXG5cclxuICAgIHNlbGVjdFVuc2VsZWN0TGlzdENoZWNrYm94KHRvb2x0aXBPcHRpb25zOiBUb29sdGlwTW9kZWxbXSwgaGVhZGVyOiBzdHJpbmcpIHtcclxuICAgICAgICBpZiAodGhpcy50b29sdGlwU2VsZWN0ZWRNYXAuaGFzKGhlYWRlcikpIHtcclxuICAgICAgICAgICAgY29uc3Qgc2VsZWN0ZWRWYWx1ZVNldCA9IG5ldyBTZXQodGhpcy50b29sdGlwU2VsZWN0ZWRNYXAuZ2V0KGhlYWRlcikpO1xyXG4gICAgICAgICAgICB0b29sdGlwT3B0aW9ucy5mb3JFYWNoKChpdGVtKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpdGVtLmlzU2VsZWN0ZWQgPSBzZWxlY3RlZFZhbHVlU2V0LmhhcyhpdGVtLnZhbHVlKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdG9vbHRpcE9wdGlvbnMuZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaXRlbS5pc1NlbGVjdGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGZvcm1hdE51bGxPcHRpb25Ub1NwZWNpZmllZFN0cmluZyh0b29sdGlwT3B0aW9uczogVG9vbHRpcE1vZGVsW10sIGZvcm1hdHRlZFN0cmluZzogc3RyaW5nKSB7XHJcbiAgICAgICAgY29uc3QgaW5kZXggPSB0b29sdGlwT3B0aW9ucy5maW5kSW5kZXgoKGl0ZW0pID0+IGl0ZW0udmFsdWUgPT0gbnVsbCk7XHJcblxyXG4gICAgICAgIGlmIChpbmRleCAhPT0gLTEpIHtcclxuICAgICAgICAgICAgdG9vbHRpcE9wdGlvbnNbaW5kZXhdLmxhYmVsID0gZm9ybWF0dGVkU3RyaW5nO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBnZXRDbG9uZWRUb29sdGlwQW5kVG9vbHRpcE9wdGlvbih0b29sdGlwT3B0aW9uczogVG9vbHRpcE1vZGVsW10sIHNvcnRCeVN0cmluZzogc3RyaW5nKSB7XHJcbiAgICAgICAgY29uc3QgW3NlbGVjdGVkSXRlbXMsIHVuc2VsZWN0ZWRJdGVtc10gPSB0aGlzLmdldFNlbGVjdGVkQW5kVW5zZWxlY3RlZEl0ZW1zKHRvb2x0aXBPcHRpb25zKTtcclxuICAgICAgICBjb25zdCBzb3J0ZWRTZWxlY3RlZEl0ZW1zID0gc29ydEJ5KHNlbGVjdGVkSXRlbXMsIHNvcnRCeVN0cmluZyk7XHJcbiAgICAgICAgY29uc3Qgc29ydGVkVW5zZWxlY3RlZEl0ZW1zID0gc29ydEJ5KHVuc2VsZWN0ZWRJdGVtcywgc29ydEJ5U3RyaW5nKTtcclxuXHJcbiAgICAgICAgY29uc3QgY2xvbmVkVG9vbHRpcE9wdGlvbnMgPSBbLi4uc29ydGVkU2VsZWN0ZWRJdGVtcywgLi4uc29ydGVkVW5zZWxlY3RlZEl0ZW1zXTtcclxuICAgICAgICBjb25zdCB1cGRhdGVkVG9vbHRpcE9wdGlvbnMgPSBjbG9uZURlZXAoY2xvbmVkVG9vbHRpcE9wdGlvbnMpO1xyXG5cclxuICAgICAgICByZXR1cm4gW2Nsb25lZFRvb2x0aXBPcHRpb25zLCB1cGRhdGVkVG9vbHRpcE9wdGlvbnMsIHNlbGVjdGVkSXRlbXMsIHVuc2VsZWN0ZWRJdGVtc107XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0SGVpZ2h0T2ZDaGVja2JveFRvb2x0aXBGaWx0ZXIoZGF0YUxlbmd0aDogbnVtYmVyLCBtYXJnaW46IG51bWJlcikge1xyXG4gICAgICAgIHJldHVybiBkYXRhTGVuZ3RoID4gNiA/IDIwMCA6IDI2LjAzICogZGF0YUxlbmd0aCArIG1hcmdpbiAqIGRhdGFMZW5ndGggKyBtYXJnaW47XHJcbiAgICB9XHJcblxyXG4gICAgdW5DaGVja0FsbENoZWNrYm94KHRvb2x0aXBPcHRpb25zOiBUb29sdGlwTW9kZWxbXSwgY2xvbmVkVG9vbHRpcE9wdGlvbnM6IFRvb2x0aXBNb2RlbFtdKSB7XHJcbiAgICAgICAgdG9vbHRpcE9wdGlvbnMuZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG4gICAgICAgICAgICBpdGVtLmlzU2VsZWN0ZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgY29uc3QgaW5kZXggPSBjbG9uZWRUb29sdGlwT3B0aW9ucy5maW5kSW5kZXgoKG9wdCkgPT4gb3B0LmlkID09PSBpdGVtLmlkKTtcclxuICAgICAgICAgICAgY2xvbmVkVG9vbHRpcE9wdGlvbnNbaW5kZXhdLmlzU2VsZWN0ZWQgPSBmYWxzZTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBzZWxlY3RBbGxDaGVja2JveCh0b29sdGlwT3B0aW9uczogVG9vbHRpcE1vZGVsW10sIGNsb25lZFRvb2x0aXBPcHRpb25zOiBUb29sdGlwTW9kZWxbXSkge1xyXG4gICAgICAgIHRvb2x0aXBPcHRpb25zLmZvckVhY2goKGl0ZW0pID0+IHtcclxuICAgICAgICAgICAgaXRlbS5pc1NlbGVjdGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgY29uc3QgaW5kZXggPSBjbG9uZWRUb29sdGlwT3B0aW9ucy5maW5kSW5kZXgoKG9wdCkgPT4gb3B0LmlkID09PSBpdGVtLmlkKTtcclxuICAgICAgICAgICAgY2xvbmVkVG9vbHRpcE9wdGlvbnNbaW5kZXhdLmlzU2VsZWN0ZWQgPSB0cnVlO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHNlbGVjdFVuc2VsZWN0Q2hlY2tib3goZGF0YTogVG9vbHRpcE1vZGVsLCBjbG9uZWRUb29sdGlwT3B0aW9uczogVG9vbHRpcE1vZGVsW10pIHtcclxuICAgICAgICBkYXRhLmlzU2VsZWN0ZWQgPSAhZGF0YS5pc1NlbGVjdGVkO1xyXG4gICAgICAgIGNvbnN0IGluZGV4ID0gY2xvbmVkVG9vbHRpcE9wdGlvbnMuZmluZEluZGV4KChpdGVtKSA9PiBpdGVtLmlkID09PSBkYXRhLmlkKTtcclxuICAgICAgICBjbG9uZWRUb29sdGlwT3B0aW9uc1tpbmRleF0uaXNTZWxlY3RlZCA9IGRhdGEuaXNTZWxlY3RlZDtcclxuICAgIH1cclxuXHJcbiAgICBnZXRTZWxlY3RlZEFuZFVuc2VsZWN0ZWRJdGVtcyh0b29sdGlwT3B0aW9uczogVG9vbHRpcE1vZGVsW10pIHtcclxuICAgICAgICBjb25zdCBzZWxlY3RlZEl0ZW1zID0gdG9vbHRpcE9wdGlvbnMuZmlsdGVyKChpdGVtKSA9PiBpdGVtLmlzU2VsZWN0ZWQpO1xyXG4gICAgICAgIGNvbnN0IHVuc2VsZWN0ZWRJdGVtcyA9IHRvb2x0aXBPcHRpb25zLmZpbHRlcigoaXRlbSkgPT4gIWl0ZW0uaXNTZWxlY3RlZCk7XHJcblxyXG4gICAgICAgIHJldHVybiBbc2VsZWN0ZWRJdGVtcywgdW5zZWxlY3RlZEl0ZW1zXTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRDaGVja2JveFByZXZpb3VzU2VsZWN0ZWRWYWx1ZShjbG9uZWRUYWJsZURhdGE6IGFueVtdKSB7XHJcbiAgICAgICAgbGV0IHByZXZpb3VzU2VsZWN0ZWRWYWx1ZSA9IFtdO1xyXG5cclxuICAgICAgICBpZiAodGhpcy50b29sdGlwU2VsZWN0ZWRNYXAuaGFzKHRoaXMuc2VsZWN0ZWRSYWRpbykpIHtcclxuICAgICAgICAgICAgcHJldmlvdXNTZWxlY3RlZFZhbHVlID0gdGhpcy50b29sdGlwU2VsZWN0ZWRNYXAuZ2V0KHRoaXMuc2VsZWN0ZWRSYWRpbyk7XHJcblxyXG4gICAgICAgICAgICBpZiAoIXRoaXMuaW5pdGlhbFZhbHVlTWFwLmhhcyh0aGlzLnNlbGVjdGVkUmFkaW8pKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBpbml0aWFsVmFsdWUgPSBzb3J0QnkodW5pcShjbG9uZWRUYWJsZURhdGEubWFwKChpdGVtKSA9PiBpdGVtW3RoaXMuc2VsZWN0ZWRSYWRpb10pKSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmluaXRpYWxWYWx1ZU1hcC5zZXQodGhpcy5zZWxlY3RlZFJhZGlvLCBpbml0aWFsVmFsdWUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmluaXRpYWxWYWx1ZU1hcC5oYXModGhpcy5zZWxlY3RlZFJhZGlvKSkge1xyXG4gICAgICAgICAgICBwcmV2aW91c1NlbGVjdGVkVmFsdWUgPSB0aGlzLmluaXRpYWxWYWx1ZU1hcC5nZXQodGhpcy5zZWxlY3RlZFJhZGlvKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBwcmV2aW91c1NlbGVjdGVkVmFsdWUgPSBzb3J0QnkodW5pcShjbG9uZWRUYWJsZURhdGEubWFwKChpdGVtKSA9PiBpdGVtW3RoaXMuc2VsZWN0ZWRSYWRpb10pKSk7XHJcbiAgICAgICAgICAgIHRoaXMuaW5pdGlhbFZhbHVlTWFwLnNldCh0aGlzLnNlbGVjdGVkUmFkaW8sIHByZXZpb3VzU2VsZWN0ZWRWYWx1ZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gcHJldmlvdXNTZWxlY3RlZFZhbHVlO1xyXG4gICAgfVxyXG5cclxuICAgIGdldENoZWNrYm94Q3VycmVudFNlbGVjdGVkVmFsdWUoc2VhcmNoZWRTdHJpbmc6IHN0cmluZywgdG9vbHRpcE9wdGlvbnM6IFRvb2x0aXBNb2RlbFtdKSB7XHJcbiAgICAgICAgbGV0IGN1cnJlbnRTZWxlY3RlZFZhbHVlID0gW107XHJcblxyXG4gICAgICAgIGlmICh0b29sdGlwT3B0aW9ucykge1xyXG4gICAgICAgICAgICBjdXJyZW50U2VsZWN0ZWRWYWx1ZSA9IHNvcnRCeSh0b29sdGlwT3B0aW9ucy5maWx0ZXIoKGl0ZW0pID0+IGl0ZW0uaXNTZWxlY3RlZCkubWFwKChpdGVtKSA9PiBpdGVtLnZhbHVlKSk7XHJcblxyXG4gICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgICAhc2VhcmNoZWRTdHJpbmcgJiZcclxuICAgICAgICAgICAgICAgIGN1cnJlbnRTZWxlY3RlZFZhbHVlLmxlbmd0aCA9PT0gdG9vbHRpcE9wdGlvbnMubGVuZ3RoICYmXHJcbiAgICAgICAgICAgICAgICB0aGlzLmluaXRpYWxWYWx1ZU1hcC5oYXModGhpcy5zZWxlY3RlZFJhZGlvKVxyXG4gICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgIGN1cnJlbnRTZWxlY3RlZFZhbHVlID0gdGhpcy5pbml0aWFsVmFsdWVNYXAuZ2V0KHRoaXMuc2VsZWN0ZWRSYWRpbyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IGJsYW5rSW5kZXggPSBjdXJyZW50U2VsZWN0ZWRWYWx1ZS5maW5kSW5kZXgoKGl0ZW06IHN0cmluZykgPT4gaXRlbSA9PSBudWxsKTtcclxuICAgICAgICBpZiAoYmxhbmtJbmRleCAhPT0gLTEpIHtcclxuICAgICAgICAgICAgY3VycmVudFNlbGVjdGVkVmFsdWUgPSBzb3J0QnkoY3VycmVudFNlbGVjdGVkVmFsdWUpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGN1cnJlbnRTZWxlY3RlZFZhbHVlO1xyXG4gICAgfVxyXG5cclxuICAgIGNoZWNrSWZTb3J0aW5nQ2hhbmdlZCh0ZW1wU29ydE9yZGVyOiBTb3J0VHlwZSkge1xyXG4gICAgICAgIGNvbnN0IGN1cnJlbnRDb2x1bW5Tb3J0RmlsdGVyID0gdGhpcy5nZXRDb2x1bW5Tb3J0U3RhdGVGb3JTZWxlY3RlZFJhZGlvKCk7XHJcblxyXG4gICAgICAgIGNvbnN0IGlzU29ydENoYW5nZWQgPSB0ZW1wU29ydE9yZGVyICE9IG51bGwgJiYgdGVtcFNvcnRPcmRlciAhPT0gY3VycmVudENvbHVtblNvcnRGaWx0ZXI7XHJcbiAgICAgICAgcmV0dXJuIGlzU29ydENoYW5nZWQ7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0RmlsdGVyZWRPcHRpb25Bc0JvbGRTdHJpbmcoc3RyOiBzdHJpbmcsIGNsb25lZFRvb2x0aXBPcHRpb25zOiBUb29sdGlwTW9kZWxbXSkge1xyXG4gICAgICAgIGNvbnN0IHRvb2x0aXBPcHRpb25zID0gY2xvbmVEZWVwKFxyXG4gICAgICAgICAgICBjbG9uZWRUb29sdGlwT3B0aW9ucy5maWx0ZXIoKGl0ZW0pID0+IGl0ZW0ubGFiZWwudG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHN0ci50b0xvd2VyQ2FzZSgpKSksXHJcbiAgICAgICAgKTtcclxuICAgICAgICB0b29sdGlwT3B0aW9ucy5mb3JFYWNoKChlbGVtZW50KSA9PiB7XHJcbiAgICAgICAgICAgIGVsZW1lbnQubGFiZWwgPSB0aGlzLmJvbGRTdHJpbmcoZWxlbWVudC5sYWJlbCwgc3RyKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRvb2x0aXBPcHRpb25zO1xyXG4gICAgfVxyXG5cclxuICAgIGJvbGRTdHJpbmcoc3RyOiBzdHJpbmcsIGZpbmQ6IHN0cmluZykge1xyXG4gICAgICAgIGxldCB1cGRhdGVkU3RyaW5nID0gc3RyO1xyXG4gICAgICAgIGNvbnN0IGluZGV4ZXMgPSB0aGlzLmdldEluZGljZXNPZihmaW5kLCB1cGRhdGVkU3RyaW5nLCBmYWxzZSk7XHJcblxyXG4gICAgICAgIGluZGV4ZXMuZm9yRWFjaCgoaXRlbSwgaW5kZXgpID0+IHtcclxuICAgICAgICAgICAgY29uc3Qgc3RhcnRJbmRleCA9IGl0ZW0gKyBpbmRleCAqIDc7IC8vIE11bHRpcGx5aW5nIGJ5IDcgYXMgdGhlcmUgYXJlIDdjaGFyOiA8Yj48L2I+XHJcbiAgICAgICAgICAgIGNvbnN0IGVuZEluZGV4ID0gc3RhcnRJbmRleCArIGZpbmQubGVuZ3RoO1xyXG4gICAgICAgICAgICBjb25zdCBzdHJUb0JlUmVwbGFjZWQgPSB1cGRhdGVkU3RyaW5nLnN1YnN0cmluZyhzdGFydEluZGV4LCBlbmRJbmRleCk7XHJcbiAgICAgICAgICAgIHVwZGF0ZWRTdHJpbmcgPSB1cGRhdGVkU3RyaW5nLnJlcGxhY2Uoc3RyVG9CZVJlcGxhY2VkLCBgPGI+JHtzdHJUb0JlUmVwbGFjZWR9PC9iPmApO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiB1cGRhdGVkU3RyaW5nO1xyXG4gICAgfVxyXG5cclxuICAgIGdldEluZGljZXNPZihzZWFyY2hTdHI6IHN0cmluZywgc3RyOiBzdHJpbmcsIGNhc2VTZW5zaXRpdmU6IGJvb2xlYW4pIHtcclxuICAgICAgICBjb25zdCBzZWFyY2hTdHJMZW4gPSBzZWFyY2hTdHIubGVuZ3RoO1xyXG4gICAgICAgIGlmIChzZWFyY2hTdHJMZW4gPT09IDApIHtcclxuICAgICAgICAgICAgcmV0dXJuIFtdO1xyXG4gICAgICAgIH1cclxuICAgICAgICBsZXQgc3RhcnRJbmRleCA9IDA7XHJcbiAgICAgICAgbGV0IGluZGV4O1xyXG4gICAgICAgIGNvbnN0IGluZGljZXMgPSBbXTtcclxuICAgICAgICBsZXQgdXBkYXRlZFN0ciA9IHN0cjtcclxuICAgICAgICBsZXQgdXBkYXRlZFNlYXJjaFN0ciA9IHNlYXJjaFN0cjtcclxuICAgICAgICBpZiAoIWNhc2VTZW5zaXRpdmUpIHtcclxuICAgICAgICAgICAgdXBkYXRlZFN0ciA9IHN0ci50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICAgICAgICB1cGRhdGVkU2VhcmNoU3RyID0gc2VhcmNoU3RyLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpbmRleCA9IHVwZGF0ZWRTdHIuaW5kZXhPZih1cGRhdGVkU2VhcmNoU3RyLCBzdGFydEluZGV4KTtcclxuICAgICAgICB3aGlsZSAoaW5kZXggPiAtMSkge1xyXG4gICAgICAgICAgICBpbmRpY2VzLnB1c2goaW5kZXgpO1xyXG4gICAgICAgICAgICBzdGFydEluZGV4ID0gaW5kZXggKyBzZWFyY2hTdHJMZW47XHJcbiAgICAgICAgICAgIGluZGV4ID0gdXBkYXRlZFN0ci5pbmRleE9mKHVwZGF0ZWRTZWFyY2hTdHIsIHN0YXJ0SW5kZXgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gaW5kaWNlcztcclxuICAgIH1cclxuXHJcbiAgICBkaXNhYmxlQWxsQnRuc1doZW5UaGVyZUFyZU5vRmlsdGVyZWRSZXN1bHRzKCk6IFtudW1iZXIsIGJvb2xlYW4sIGJvb2xlYW4sIGJvb2xlYW5dIHtcclxuICAgICAgICAvLyBbc2VsZWN0ZWRDaGVja2JveE9wdGlvbnNDb3VudCwgZGlzYWJsZUNoZWNrYm94QXBwbHksIGRpc2FibGVDbGVhckFsbCwgZGlzYWJsZVNlbGVjdEFsbF07XHJcbiAgICAgICAgcmV0dXJuIFswLCB0cnVlLCB0cnVlLCB0cnVlXTtcclxuICAgIH1cclxuXHJcbiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Q2FsZW5kYXIgZmlsdGVyPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0vL1xyXG4gICAgY3JlYXRlUmFuZ2VGb3JUaGVEYXRlRmlsdGVyKG9wdGlvbkRhdGE6IGFueVtdKSB7XHJcbiAgICAgICAgbGV0IG1pbk1heERhdGU7XHJcbiAgICAgICAgLy8gV2hlbiB5b3Ugd2FudCB0byB1c2Ugc3RhcnREYXRlIGFuZCBlbmREYXRlIGNvbWJpbmVkIGFzIHNpbmdsZSBjb2x1bW4gdGhlbiB1c2UgUGVyaW9kLlxyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFJhZGlvID09PSBcInBlcmlvZFwiIHx8XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRSYWRpbyA9PT0gXCJidXllckZsaWdodERhdGVzXCIgfHxcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFJhZGlvID09PSBcInRyYWZmaWNGbGlnaHREYXRlc1wiXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIG1pbk1heERhdGUgPSB0aGlzLmNyZWF0ZVN0YXJ0RW5kRGF0ZVJhbmdlKG9wdGlvbkRhdGEpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIG1pbk1heERhdGUgPSB0aGlzLnJldHVybk1pbkFuZE1heERhdGUob3B0aW9uRGF0YSwgdGhpcy5zZWxlY3RlZFJhZGlvKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBtaW5NYXhEYXRlO1xyXG4gICAgfVxyXG5cclxuICAgIGNyZWF0ZVN0YXJ0RW5kRGF0ZVJhbmdlKG9wdGlvbkRhdGE6IGFueVtdKSB7XHJcbiAgICAgICAgY29uc3QgbWluU3RhcnREYXRlID0gdGhpcy5yZXR1cm5NaW5BbmRNYXhEYXRlKG9wdGlvbkRhdGEsIFwic3RhcnREYXRlXCIpO1xyXG4gICAgICAgIGNvbnN0IG1heEVuZERhdGUgPSB0aGlzLnJldHVybk1pbkFuZE1heERhdGUob3B0aW9uRGF0YSwgXCJlbmREYXRlXCIpO1xyXG4gICAgICAgIHJldHVybiBbbWluU3RhcnREYXRlWzBdLCBtYXhFbmREYXRlWzFdXTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRNaW5BbmRNYXhEYXRlUmFuZ2VGb3JDYWxlbmRhcihtaW5NYXhEYXRlOiBhbnlbXSwgcGFyc2luZ0Zvcm1hdDogc3RyaW5nKSB7XHJcbiAgICAgICAgY29uc3QgY2FsZW5kYXJNaW5FbmFibGVkRGF0ZSA9IHRoaXMuZGF0ZVRpbWVGb3JtYXRTZXJ2aWNlLmNvbnZlcnRUb05nYkRhdGUobWluTWF4RGF0ZVswXSwgcGFyc2luZ0Zvcm1hdCk7XHJcbiAgICAgICAgY29uc3QgY2FsZW5kYXJNYXhFbmFibGVkRGF0ZSA9IHRoaXMuZGF0ZVRpbWVGb3JtYXRTZXJ2aWNlLmNvbnZlcnRUb05nYkRhdGUobWluTWF4RGF0ZVsxXSwgcGFyc2luZ0Zvcm1hdCk7XHJcbiAgICAgICAgcmV0dXJuIFtjYWxlbmRhck1pbkVuYWJsZWREYXRlLCBjYWxlbmRhck1heEVuYWJsZWREYXRlXTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRTZWxlY3RlZERhdGVGb3JDYWxlbmRhcihtaW5NYXhEYXRlOiBhbnlbXSwgcGFyc2luZ0Zvcm1hdDogc3RyaW5nLCBtaW5EYXRlOiBOZ2JEYXRlVHlwZSwgbWF4RGF0ZTogTmdiRGF0ZVR5cGUpIHtcclxuICAgICAgICBsZXQgc2VsZWN0ZWRNaW5EYXRlO1xyXG4gICAgICAgIGxldCBzZWxlY3RlZE1heERhdGU7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnRvb2x0aXBTZWxlY3RlZE1hcC5oYXModGhpcy5zZWxlY3RlZFJhZGlvKSkge1xyXG4gICAgICAgICAgICBjb25zdCBzZWxlY3RlZERhdGVPYmogPSB0aGlzLnRvb2x0aXBTZWxlY3RlZE1hcC5nZXQodGhpcy5zZWxlY3RlZFJhZGlvKTtcclxuXHJcbiAgICAgICAgICAgIGlmIChzZWxlY3RlZERhdGVPYmouZnJvbURhdGUuaXNBZnRlcihtaW5NYXhEYXRlWzBdKSkge1xyXG4gICAgICAgICAgICAgICAgc2VsZWN0ZWRNaW5EYXRlID0gdGhpcy5kYXRlVGltZUZvcm1hdFNlcnZpY2UuY29udmVydFRvTmdiRGF0ZShzZWxlY3RlZERhdGVPYmouZnJvbURhdGUsIHBhcnNpbmdGb3JtYXQpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgc2VsZWN0ZWRNaW5EYXRlID0gdGhpcy5kYXRlVGltZUZvcm1hdFNlcnZpY2UuY29udmVydFRvTmdiRGF0ZShtaW5NYXhEYXRlWzBdLCBwYXJzaW5nRm9ybWF0KTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKHNlbGVjdGVkRGF0ZU9iai50b0RhdGUuaXNBZnRlcihtaW5NYXhEYXRlWzFdKSkge1xyXG4gICAgICAgICAgICAgICAgc2VsZWN0ZWRNYXhEYXRlID0gdGhpcy5kYXRlVGltZUZvcm1hdFNlcnZpY2UuY29udmVydFRvTmdiRGF0ZShtaW5NYXhEYXRlWzFdLCBwYXJzaW5nRm9ybWF0KTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHNlbGVjdGVkTWF4RGF0ZSA9IHRoaXMuZGF0ZVRpbWVGb3JtYXRTZXJ2aWNlLmNvbnZlcnRUb05nYkRhdGUoc2VsZWN0ZWREYXRlT2JqLnRvRGF0ZSwgcGFyc2luZ0Zvcm1hdCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBzZWxlY3RlZE1pbkRhdGUgPSBjbG9uZURlZXAobWluRGF0ZSk7XHJcbiAgICAgICAgICAgIHNlbGVjdGVkTWF4RGF0ZSA9IGNsb25lRGVlcChtYXhEYXRlKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBbc2VsZWN0ZWRNaW5EYXRlLCBzZWxlY3RlZE1heERhdGVdO1xyXG4gICAgfVxyXG5cclxuICAgIGdldFByZXZpb3VzU2VsZWN0ZWREYXRlc0ZvckNhbGVuZGFyKG9wdGlvbkRhdGE6IGFueVtdKSB7XHJcbiAgICAgICAgbGV0IHByZXZpb3VzU2VsZWN0ZWREYXRlOiB7IGZyb21EYXRlOiBhbnk7IHRvRGF0ZTogYW55IH0gPSB7IGZyb21EYXRlOiBudWxsLCB0b0RhdGU6IG51bGwgfTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMudG9vbHRpcFNlbGVjdGVkTWFwLmhhcyh0aGlzLnNlbGVjdGVkUmFkaW8pKSB7XHJcbiAgICAgICAgICAgIHByZXZpb3VzU2VsZWN0ZWREYXRlID0gdGhpcy50b29sdGlwU2VsZWN0ZWRNYXAuZ2V0KHRoaXMuc2VsZWN0ZWRSYWRpbyk7XHJcblxyXG4gICAgICAgICAgICBpZiAoIXRoaXMuaW5pdGlhbFZhbHVlTWFwLmhhcyh0aGlzLnNlbGVjdGVkUmFkaW8pKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldEluaXRpYWxWYWx1ZU1hcEZvckRhdGVGaWx0ZXIob3B0aW9uRGF0YSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuaW5pdGlhbFZhbHVlTWFwLmhhcyh0aGlzLnNlbGVjdGVkUmFkaW8pKSB7XHJcbiAgICAgICAgICAgIHByZXZpb3VzU2VsZWN0ZWREYXRlID0gdGhpcy5pbml0aWFsVmFsdWVNYXAuZ2V0KHRoaXMuc2VsZWN0ZWRSYWRpbyk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5zZXRJbml0aWFsVmFsdWVNYXBGb3JEYXRlRmlsdGVyKG9wdGlvbkRhdGEpO1xyXG4gICAgICAgICAgICBwcmV2aW91c1NlbGVjdGVkRGF0ZSA9IHRoaXMuaW5pdGlhbFZhbHVlTWFwLmdldCh0aGlzLnNlbGVjdGVkUmFkaW8pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHByZXZpb3VzU2VsZWN0ZWREYXRlO1xyXG4gICAgfVxyXG5cclxuICAgIHNldEluaXRpYWxWYWx1ZU1hcEZvckRhdGVGaWx0ZXIob3B0aW9uRGF0YTogYW55W10pIHtcclxuICAgICAgICBjb25zdCBtaW5NYXhEYXRlID0gdGhpcy5jcmVhdGVSYW5nZUZvclRoZURhdGVGaWx0ZXIob3B0aW9uRGF0YSk7XHJcblxyXG4gICAgICAgIGNvbnN0IHNlbGVjdGVkRGF0ZSA9IHsgZnJvbURhdGU6IG1pbk1heERhdGVbMF0sIHRvRGF0ZTogbWluTWF4RGF0ZVsxXSB9O1xyXG4gICAgICAgIHRoaXMuaW5pdGlhbFZhbHVlTWFwLnNldCh0aGlzLnNlbGVjdGVkUmFkaW8sIHNlbGVjdGVkRGF0ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0Q3VycmVudFNlbGVjdGVkRGF0ZXNGb3JDYWxlbmRhcihjdXJyZW50U2VsZWN0ZWREYXRlOiBhbnksIG1pbkRhdGU6IE5nYkRhdGVUeXBlLCBtYXhEYXRlOiBOZ2JEYXRlVHlwZSkge1xyXG4gICAgICAgIGxldCBjdXJyZW50U2VsZWN0ZWREYXRlVG9CZVVwZGF0ZWQgPSBjdXJyZW50U2VsZWN0ZWREYXRlO1xyXG4gICAgICAgIGNvbnN0IGZyb21EYXRlID0ge1xyXG4gICAgICAgICAgICB5ZWFyOiBjdXJyZW50U2VsZWN0ZWREYXRlVG9CZVVwZGF0ZWQuZnJvbURhdGUueWVhcixcclxuICAgICAgICAgICAgbW9udGg6IGN1cnJlbnRTZWxlY3RlZERhdGVUb0JlVXBkYXRlZC5mcm9tRGF0ZS5tb250aCxcclxuICAgICAgICAgICAgZGF5OiBjdXJyZW50U2VsZWN0ZWREYXRlVG9CZVVwZGF0ZWQuZnJvbURhdGUuZGF5LFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgY29uc3QgdG9EYXRlID0ge1xyXG4gICAgICAgICAgICB5ZWFyOiBjdXJyZW50U2VsZWN0ZWREYXRlVG9CZVVwZGF0ZWQudG9EYXRlLnllYXIsXHJcbiAgICAgICAgICAgIG1vbnRoOiBjdXJyZW50U2VsZWN0ZWREYXRlVG9CZVVwZGF0ZWQudG9EYXRlLm1vbnRoLFxyXG4gICAgICAgICAgICBkYXk6IGN1cnJlbnRTZWxlY3RlZERhdGVUb0JlVXBkYXRlZC50b0RhdGUuZGF5LFxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIGlmIChpc0VxdWFsKG1pbkRhdGUsIGZyb21EYXRlKSAmJiBpc0VxdWFsKG1heERhdGUsIHRvRGF0ZSkgJiYgdGhpcy5pbml0aWFsVmFsdWVNYXAuaGFzKHRoaXMuc2VsZWN0ZWRSYWRpbykpIHtcclxuICAgICAgICAgICAgY3VycmVudFNlbGVjdGVkRGF0ZVRvQmVVcGRhdGVkID0gdGhpcy5pbml0aWFsVmFsdWVNYXAuZ2V0KHRoaXMuc2VsZWN0ZWRSYWRpbyk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgY3VycmVudFNlbGVjdGVkRGF0ZVRvQmVVcGRhdGVkLmZyb21EYXRlID0gZGF5anMoXHJcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGVUaW1lRm9ybWF0U2VydmljZS5jb252ZXJ0TmdiRGF0ZVRvTW9tZW50KGN1cnJlbnRTZWxlY3RlZERhdGVUb0JlVXBkYXRlZC5mcm9tRGF0ZSksXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIGN1cnJlbnRTZWxlY3RlZERhdGVUb0JlVXBkYXRlZC50b0RhdGUgPSBkYXlqcyhcclxuICAgICAgICAgICAgICAgIHRoaXMuZGF0ZVRpbWVGb3JtYXRTZXJ2aWNlLmNvbnZlcnROZ2JEYXRlVG9Nb21lbnQoY3VycmVudFNlbGVjdGVkRGF0ZVRvQmVVcGRhdGVkLnRvRGF0ZSksXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gY3VycmVudFNlbGVjdGVkRGF0ZVRvQmVVcGRhdGVkO1xyXG4gICAgfVxyXG5cclxuICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVNMSURFUj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ly9cclxuXHJcbiAgICBnZXRTbGlkZXJUcmFuc2xhdGVGdW5jVmFsKGhlYWRlcjogc3RyaW5nLCBjdXJyZW5jeVNldDogU2V0PHN0cmluZz4pIHtcclxuICAgICAgICBsZXQgdHJhbnNsYXRlRnVuYztcclxuXHJcbiAgICAgICAgaWYgKGN1cnJlbmN5U2V0LmhhcyhoZWFkZXIpKSB7XHJcbiAgICAgICAgICAgIHRyYW5zbGF0ZUZ1bmMgPSBcImN1cnJlbmN5XCI7XHJcbiAgICAgICAgfSBlbHNlIGlmIChoZWFkZXIgPT09IFwicG9zdGVkQXVkUGVyY2VudFwiIHx8IGhlYWRlciA9PT0gXCJwYXJlbnRSb3dTaGFyZXNcIiB8fCBoZWFkZXIgPT09IFwicGFyZW50Um93UHV0UGVyY2VudFwiKSB7XHJcbiAgICAgICAgICAgIHRyYW5zbGF0ZUZ1bmMgPSBcInBlcmNlbnRcIjtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0cmFuc2xhdGVGdW5jID0gXCJub3JtYWxcIjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0cmFuc2xhdGVGdW5jO1xyXG4gICAgfVxyXG5cclxuICAgIGdldFNsaWRlck9wdGlvbnMob3B0aW9uc0RhdGE6IGFueVtdLCB0cmFuc2xhdGVGdW5jOiBzdHJpbmcsIGhlYWRlcjogc3RyaW5nKSB7XHJcbiAgICAgICAgY29uc3QgbWluVmFsdWUgPSB0aGlzLnJldHVybk1heEFuZE1pblZhbHVlKG9wdGlvbnNEYXRhLCBoZWFkZXIsIHRydWUpO1xyXG4gICAgICAgIGNvbnN0IG1heFZhbHVlID0gdGhpcy5yZXR1cm5NYXhBbmRNaW5WYWx1ZShvcHRpb25zRGF0YSwgaGVhZGVyLCBmYWxzZSk7XHJcblxyXG4gICAgICAgIGNvbnN0IG9iaiA9IHRoaXMuc2V0T3B0aW9uVmFsdWVzKG1pblZhbHVlLCBtYXhWYWx1ZSk7XHJcblxyXG4gICAgICAgIGlmICh0cmFuc2xhdGVGdW5jID09PSBcIm5vcm1hbFwiKSB7XHJcbiAgICAgICAgICAgIG9iai50cmFuc2xhdGUgPSB0aGlzLm5vcm1hbFRyYW5zbGF0ZUZ1bmN0aW9uO1xyXG4gICAgICAgIH0gZWxzZSBpZiAodHJhbnNsYXRlRnVuYyA9PT0gXCJwZXJjZW50XCIpIHtcclxuICAgICAgICAgICAgb2JqLnRyYW5zbGF0ZSA9IHRoaXMucGVyY2VudFRyYW5zbGF0ZUZ1bmN0aW9uO1xyXG4gICAgICAgIH0gZWxzZSBpZiAodHJhbnNsYXRlRnVuYyA9PT0gXCJjdXJyZW5jeVwiKSB7XHJcbiAgICAgICAgICAgIG9iai50cmFuc2xhdGUgPSB0aGlzLmN1cnJlbmN5VHJhbnNsYXRlRnVuY3Rpb247XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gb2JqO1xyXG4gICAgfVxyXG5cclxuICAgIHNldFNlbGVjdGVkUmFuZ2VGb3JTbGlkZXIoaGVhZGVyOiBzdHJpbmcsIG9wdGlvbnM6IE9wdGlvbnMpIHtcclxuICAgICAgICBsZXQgc2xpZGVyTWluVmFsdWU7XHJcbiAgICAgICAgbGV0IHNsaWRlck1heFZhbHVlO1xyXG5cclxuICAgICAgICBpZiAodGhpcy50b29sdGlwU2VsZWN0ZWRNYXAuaGFzKGhlYWRlcikpIHtcclxuICAgICAgICAgICAgY29uc3Qgc2VsZWN0ZWRPYmogPSB0aGlzLnRvb2x0aXBTZWxlY3RlZE1hcC5nZXQoaGVhZGVyKTtcclxuICAgICAgICAgICAgc2xpZGVyTWluVmFsdWUgPSBzZWxlY3RlZE9iai5taW4gPCBvcHRpb25zLmZsb29yID8gb3B0aW9ucy5mbG9vciA6IHNlbGVjdGVkT2JqLm1pbjtcclxuICAgICAgICAgICAgc2xpZGVyTWF4VmFsdWUgPSBzZWxlY3RlZE9iai5tYXggPCBvcHRpb25zLmNlaWwgPyBzZWxlY3RlZE9iai5tYXggOiBvcHRpb25zLmNlaWw7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgc2xpZGVyTWluVmFsdWUgPSBvcHRpb25zLmZsb29yO1xyXG4gICAgICAgICAgICBzbGlkZXJNYXhWYWx1ZSA9IG9wdGlvbnMuY2VpbDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBbc2xpZGVyTWluVmFsdWUsIHNsaWRlck1heFZhbHVlXTtcclxuICAgIH1cclxuXHJcbiAgICBpc1ZhbHVlSW5SYW5nZShvcHRpb25zOiBPcHRpb25zLCB2YWw6IG51bWJlcikge1xyXG4gICAgICAgIHJldHVybiBvcHRpb25zLmZsb29yIDw9IHZhbCAmJiB2YWwgPD0gb3B0aW9ucy5jZWlsO1xyXG4gICAgfVxyXG5cclxuICAgIGdldFByZXZpb3VzU2VsZWN0ZWRWYWx1ZUZvclNsaWRlcihjbG9uZWREYXRhOiBhbnlbXSkge1xyXG4gICAgICAgIGxldCBwcmV2aW91c1NsaWRlckRhdGE6IHsgbWluOiBhbnk7IG1heDogYW55IH0gPSB7IG1pbjogXCJcIiwgbWF4OiBcIlwiIH07XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnRvb2x0aXBTZWxlY3RlZE1hcC5oYXModGhpcy5zZWxlY3RlZFJhZGlvKSkge1xyXG4gICAgICAgICAgICBwcmV2aW91c1NsaWRlckRhdGEgPSB0aGlzLnRvb2x0aXBTZWxlY3RlZE1hcC5nZXQodGhpcy5zZWxlY3RlZFJhZGlvKTtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLmluaXRpYWxWYWx1ZU1hcC5oYXModGhpcy5zZWxlY3RlZFJhZGlvKSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRJbml0aWFsVmFsdWVNYXBGb3JTbGlkZXJGaWx0ZXIoY2xvbmVkRGF0YSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuaW5pdGlhbFZhbHVlTWFwLmhhcyh0aGlzLnNlbGVjdGVkUmFkaW8pKSB7XHJcbiAgICAgICAgICAgIHByZXZpb3VzU2xpZGVyRGF0YSA9IHRoaXMuaW5pdGlhbFZhbHVlTWFwLmdldCh0aGlzLnNlbGVjdGVkUmFkaW8pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0SW5pdGlhbFZhbHVlTWFwRm9yU2xpZGVyRmlsdGVyKGNsb25lZERhdGEpO1xyXG4gICAgICAgICAgICBwcmV2aW91c1NsaWRlckRhdGEgPSB0aGlzLmluaXRpYWxWYWx1ZU1hcC5nZXQodGhpcy5zZWxlY3RlZFJhZGlvKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBwcmV2aW91c1NsaWRlckRhdGE7XHJcbiAgICB9XHJcblxyXG4gICAgc2V0SW5pdGlhbFZhbHVlTWFwRm9yU2xpZGVyRmlsdGVyKGNsb25lZERhdGE6IGFueVtdKSB7XHJcbiAgICAgICAgY29uc3QgbWluVmFsdWUgPSB0aGlzLnJldHVybk1heEFuZE1pblZhbHVlKGNsb25lZERhdGEsIHRoaXMuc2VsZWN0ZWRSYWRpbywgdHJ1ZSk7XHJcbiAgICAgICAgY29uc3QgbWF4VmFsdWUgPSB0aGlzLnJldHVybk1heEFuZE1pblZhbHVlKGNsb25lZERhdGEsIHRoaXMuc2VsZWN0ZWRSYWRpbywgZmFsc2UpO1xyXG4gICAgICAgIGNvbnN0IHNsaWRlckRhdGEgPSB7IG1pbjogbWluVmFsdWUsIG1heDogbWF4VmFsdWUgfTtcclxuICAgICAgICB0aGlzLmluaXRpYWxWYWx1ZU1hcC5zZXQodGhpcy5zZWxlY3RlZFJhZGlvLCBzbGlkZXJEYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRDdXJyZW50U2VsZWN0ZWRWYWx1ZUZvclNsaWRlcihtaW5FbnRlcmVkVmFsOiBudW1iZXIsIG1heEVudGVyZWRWYWw6IG51bWJlciwgb3B0aW9uczogT3B0aW9ucykge1xyXG4gICAgICAgIGxldCBjdXJyZW50U2xpZGVyRGF0YTogeyBtaW46IGFueTsgbWF4OiBhbnkgfSA9IHsgbWluOiBudWxsLCBtYXg6IG51bGwgfTtcclxuICAgICAgICBjdXJyZW50U2xpZGVyRGF0YS5tYXggPSBtYXhFbnRlcmVkVmFsO1xyXG4gICAgICAgIGN1cnJlbnRTbGlkZXJEYXRhLm1pbiA9IG1pbkVudGVyZWRWYWw7XHJcblxyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgICAgY3VycmVudFNsaWRlckRhdGEubWluID09PSBvcHRpb25zLmZsb29yICYmXHJcbiAgICAgICAgICAgIGN1cnJlbnRTbGlkZXJEYXRhLm1heCA9PT0gb3B0aW9ucy5jZWlsICYmXHJcbiAgICAgICAgICAgIHRoaXMuaW5pdGlhbFZhbHVlTWFwLmhhcyh0aGlzLnNlbGVjdGVkUmFkaW8pXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIGN1cnJlbnRTbGlkZXJEYXRhID0gdGhpcy5pbml0aWFsVmFsdWVNYXAuZ2V0KHRoaXMuc2VsZWN0ZWRSYWRpbyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gY3VycmVudFNsaWRlckRhdGE7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVRJTUU9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0vL1xyXG4gICAgZ2V0U2VsZWN0ZWRUaW1lUmFuZ2UoaGVhZGVyOiBzdHJpbmcsIGNsb25lZERhdGE6IGFueVtdKSB7XHJcbiAgICAgICAgbGV0IHNlbGVjdGVkRnJvbVRpbWU6IGFueVtdO1xyXG4gICAgICAgIGxldCBzZWxlY3RlZFRvVGltZTogYW55W107XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnRvb2x0aXBTZWxlY3RlZE1hcC5oYXMoaGVhZGVyKSkge1xyXG4gICAgICAgICAgICBzZWxlY3RlZEZyb21UaW1lID0gdGhpcy50b29sdGlwU2VsZWN0ZWRNYXAuZ2V0KGhlYWRlcikuZnJvbVRpbWU7XHJcbiAgICAgICAgICAgIHNlbGVjdGVkVG9UaW1lID0gdGhpcy50b29sdGlwU2VsZWN0ZWRNYXAuZ2V0KGhlYWRlcikudG9UaW1lO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0SW5pdGlhbFZhbHVlTWFwRm9yVGltZUZpbHRlcihjbG9uZWREYXRhLCBoZWFkZXIpO1xyXG4gICAgICAgICAgICBzZWxlY3RlZEZyb21UaW1lID0gdGhpcy5pbml0aWFsVmFsdWVNYXAuZ2V0KGhlYWRlcikuZnJvbVRpbWU7XHJcbiAgICAgICAgICAgIHNlbGVjdGVkVG9UaW1lID0gdGhpcy5pbml0aWFsVmFsdWVNYXAuZ2V0KGhlYWRlcikudG9UaW1lO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHNlbGVjdGVkRnJvbVRpbWUgIT09IHVuZGVmaW5lZCB8fCBzZWxlY3RlZFRvVGltZSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIHNlbGVjdGVkRnJvbVRpbWUgPSBBbm5hRGF0ZVRpbWVGb3JtYXRTZXJ2aWNlLmZvcm1hdFRvVHdlbHZlSHJzKHNlbGVjdGVkRnJvbVRpbWUsIHRydWUpO1xyXG4gICAgICAgICAgICBzZWxlY3RlZFRvVGltZSA9IEFubmFEYXRlVGltZUZvcm1hdFNlcnZpY2UuZm9ybWF0VG9Ud2VsdmVIcnMoc2VsZWN0ZWRUb1RpbWUsIHRydWUpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHNlbGVjdGVkRnJvbVRpbWUgPSBbXCItXCIsIFwiLVwiLCBcIi1cIl07XHJcbiAgICAgICAgICAgIHNlbGVjdGVkVG9UaW1lID0gW1wiLVwiLCBcIi1cIiwgXCItXCJdO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIFtzZWxlY3RlZEZyb21UaW1lLCBzZWxlY3RlZFRvVGltZV07XHJcbiAgICB9XHJcblxyXG4gICAgc2V0SW5pdGlhbFZhbHVlTWFwRm9yVGltZUZpbHRlcihjbG9uZWREYXRhOiBhbnlbXSwga2V5OiBzdHJpbmcpIHtcclxuICAgICAgICBpZiAoa2V5ID09PSBcInN0YXJ0RW5kVGltZVwiIHx8IGtleSA9PT0gXCJUaW1lQmFuZFwiKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0SW5pdGlhbFZhbHVlRm9yU3RhcnRBbmRFbmRUaW1lUmFuZ2UoY2xvbmVkRGF0YSwga2V5KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnNldEluaXRpYWxWYWx1ZUZvclN0YXJ0T3JFbmRUaW1lUmFuZ2UoY2xvbmVkRGF0YSwga2V5KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gdXNlIGZvciBmaWx0ZXIgd2hlcmUgd2UgaGF2ZSBzdGFydCBhbmQgZW5kIHRpbWUgcmFuZ2UgaW4gb25lIGZpbHRlclxyXG4gICAgLy8gc3RhcnRFbmRUaW1lOiBbXCI2IC0gN0FcIiwgXCIwNjogMDAgOiAwMFwiICwgXCIwNzowMDowMFwiXVxyXG4gICAgc2V0SW5pdGlhbFZhbHVlRm9yU3RhcnRBbmRFbmRUaW1lUmFuZ2UoY2xvbmVkRGF0YTogYW55W10sIGtleTogc3RyaW5nKSB7XHJcbiAgICAgICAgY29uc3QgaW5jbHVkZU11bHRpID0gY2xvbmVkRGF0YS5maW5kSW5kZXgoKG9iaikgPT4gb2JqW2tleV1bMF0gPT09IFwiPG11bHRpPlwiKSAhPT0gLTE7XHJcbiAgICAgICAgY29uc3QgaW5jbHVkZVplcm8gPSBjbG9uZWREYXRhLmZpbmRJbmRleCgob2JqKSA9PiBvYmpba2V5XVswXSA9PT0gXCIwXCIpICE9PSAtMTtcclxuICAgICAgICBjb25zdCBpbmNsdWRlVGltZVJhbmdlID0gY2xvbmVkRGF0YS5maW5kSW5kZXgoKG9iaikgPT4gb2JqW2tleV1bMF0gIT09IFwiMFwiICYmIG9ialtrZXldWzBdICE9PSBcIjxtdWx0aT5cIikgIT09IC0xO1xyXG5cclxuICAgICAgICBjb25zdCBmaWx0ZXJlZFN0YXJ0VGltZSA9IGNsb25lZERhdGEuZmlsdGVyKChvYmopID0+ICFbXCJcIiwgXCItXCIsIG51bGwsIFwiMFwiLCBcIjxtdWx0aT5cIl0uaW5jbHVkZXMob2JqLnN0YXJ0VGltZSkpO1xyXG4gICAgICAgIGNvbnN0IGZpbHRlcmVkRW5kVGltZSA9IGNsb25lZERhdGEuZmlsdGVyKChvYmopID0+ICFbXCJcIiwgXCItXCIsIG51bGwsIFwiMFwiLCBcIjxtdWx0aT5cIl0uaW5jbHVkZXMob2JqLmVuZFRpbWUpKTtcclxuXHJcbiAgICAgICAgY29uc3Qgc3RhcnRUaW1lQXJyID0gbWFwKGZpbHRlcmVkU3RhcnRUaW1lLCBcInN0YXJ0VGltZVwiKTtcclxuICAgICAgICBjb25zdCBlbmRUaW1lQXJyID0gbWFwKGZpbHRlcmVkRW5kVGltZSwgXCJlbmRUaW1lXCIpO1xyXG5cclxuICAgICAgICBzdGFydFRpbWVBcnIuc29ydCgoYSwgYikgPT4gdGhpcy5kYXRlVGltZUZvcm1hdFNlcnZpY2Uuc29ydEJ5VGltZUFzY2VuZGluZyhhLCBiKSk7XHJcblxyXG4gICAgICAgIGVuZFRpbWVBcnIuc29ydCgoYSwgYikgPT4gdGhpcy5kYXRlVGltZUZvcm1hdFNlcnZpY2Uuc29ydEJ5VGltZURlc2NlbmRpbmcoYSwgYikpO1xyXG5cclxuICAgICAgICBjb25zdCBvYmogPSB7XHJcbiAgICAgICAgICAgIGZyb21UaW1lOiBzdGFydFRpbWVBcnJbMF0sXHJcbiAgICAgICAgICAgIHRvVGltZTogZW5kVGltZUFyclswXSxcclxuICAgICAgICAgICAgaW5jbHVkZU11bHRpLFxyXG4gICAgICAgICAgICBpbmNsdWRlWmVybyxcclxuICAgICAgICAgICAgaW5jbHVkZVRpbWVSYW5nZSxcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICB0aGlzLmluaXRpYWxWYWx1ZU1hcC5zZXQoa2V5LCBvYmopO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIHVzZSBmb3IgdGhlIGZpbHRlcnMgd2hlcmUgd2UgaGF2ZSBkaWZmZXJlbnQgZmlsdGVyIGZvciBzdGFydCBhbmQgZW5kIHRpbWVcclxuICAgIC8vIHN0YXJ0VGltZTogXCIwNjowMDowMFwiXHJcbiAgICBzZXRJbml0aWFsVmFsdWVGb3JTdGFydE9yRW5kVGltZVJhbmdlKGNsb25lZERhdGE6IGFueVtdLCBrZXk6IHN0cmluZykge1xyXG4gICAgICAgIGNvbnN0IGluY2x1ZGVNdWx0aSA9IGNsb25lZERhdGEuZmluZEluZGV4KChvYmopID0+IG9ialtrZXldID09PSBcIjxtdWx0aT5cIikgIT09IC0xO1xyXG4gICAgICAgIGNvbnN0IGluY2x1ZGVaZXJvID0gY2xvbmVkRGF0YS5maW5kSW5kZXgoKG9iaikgPT4gb2JqW2tleV0gPT09IFwiMFwiKSAhPT0gLTE7XHJcbiAgICAgICAgY29uc3QgaW5jbHVkZVRpbWVSYW5nZSA9IGNsb25lZERhdGEuZmluZEluZGV4KChvYmopID0+IG9ialtrZXldICE9PSBcIjBcIiAmJiBvYmpba2V5XSAhPT0gXCI8bXVsdGk+XCIpICE9PSAtMTtcclxuXHJcbiAgICAgICAgY29uc3QgZGF0YSA9IGNsb25lZERhdGEuZmlsdGVyKChvYmopID0+ICFbXCJcIiwgXCItXCIsIG51bGwsIFwiMFwiLCBcIjxtdWx0aT5cIl0uaW5jbHVkZXMob2JqW2tleV0pKTtcclxuXHJcbiAgICAgICAgY29uc3QgdGltZUFyciA9IG1hcChkYXRhLCBrZXkpO1xyXG4gICAgICAgIHRpbWVBcnIuc29ydCgoYSwgYikgPT4gdGhpcy5kYXRlVGltZUZvcm1hdFNlcnZpY2Uuc29ydEJ5VGltZUFzY2VuZGluZyhhLCBiKSk7XHJcblxyXG4gICAgICAgIGNvbnN0IG9iaiA9IHtcclxuICAgICAgICAgICAgZnJvbVRpbWU6IHRpbWVBcnJbMF0sXHJcbiAgICAgICAgICAgIHRvVGltZTogdGltZUFyclt0aW1lQXJyLmxlbmd0aCAtIDFdLFxyXG4gICAgICAgICAgICBpbmNsdWRlTXVsdGksXHJcbiAgICAgICAgICAgIGluY2x1ZGVaZXJvLFxyXG4gICAgICAgICAgICBpbmNsdWRlVGltZVJhbmdlLFxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHRoaXMuaW5pdGlhbFZhbHVlTWFwLnNldChrZXksIG9iaik7XHJcbiAgICB9XHJcblxyXG4gICAgc2VsZWN0VW5zZWxlY3RUaW1lRmlsdGVyQ2hlY2tib3goa2V5OiBzdHJpbmcsIG9wdGlvbnNEYXRhOiBhbnlbXSkge1xyXG4gICAgICAgIGxldCBzaG93TXVsdGlUaW1lQ2hlY2tib3ggPSBmYWxzZTtcclxuICAgICAgICBsZXQgc2hvd1plcm9UaW1lQ2hlY2tib3ggPSBmYWxzZTtcclxuICAgICAgICBsZXQgc2hvd0VudGVyVGltZUNoZWNrYm94ID0gZmFsc2U7XHJcbiAgICAgICAgbGV0IG11bHRpVGltZUNoZWNrYm94Q2hlY2tlZCA9IGZhbHNlO1xyXG4gICAgICAgIGxldCB6ZXJvVGltZUNoZWNrYm94Q2hlY2tlZCA9IGZhbHNlO1xyXG4gICAgICAgIGxldCBlbnRlclRpbWVDaGVja2JveENoZWNrZWQgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgbGV0IHNlbGVjdGVkVGltZU9iajtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMudG9vbHRpcFNlbGVjdGVkTWFwLmhhcyhrZXkpKSB7XHJcbiAgICAgICAgICAgIHNlbGVjdGVkVGltZU9iaiA9IHRoaXMudG9vbHRpcFNlbGVjdGVkTWFwLmdldChrZXkpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHNlbGVjdGVkVGltZU9iaiA9IHRoaXMuaW5pdGlhbFZhbHVlTWFwLmdldChrZXkpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IHRpbWVBcnI6IHN0cmluZ1tdO1xyXG4gICAgICAgIGlmIChrZXkgPT09IFwic3RhcnRFbmRUaW1lXCIgfHwga2V5ID09PSBcIlRpbWVCYW5kXCIpIHtcclxuICAgICAgICAgICAgdGltZUFyciA9IG9wdGlvbnNEYXRhLm1hcCgoaXRlbSkgPT4gaXRlbVtrZXldWzBdKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aW1lQXJyID0gb3B0aW9uc0RhdGEubWFwKChpdGVtKSA9PiBpdGVtW2tleV0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRpbWVBcnIuZmluZEluZGV4KCh2YWwpID0+IHZhbCA9PT0gXCIwXCIpICE9PSAtMSkge1xyXG4gICAgICAgICAgICBzaG93WmVyb1RpbWVDaGVja2JveCA9IHRydWU7XHJcbiAgICAgICAgICAgIHplcm9UaW1lQ2hlY2tib3hDaGVja2VkID0gc2VsZWN0ZWRUaW1lT2JqLmluY2x1ZGVaZXJvO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRpbWVBcnIuZmluZEluZGV4KCh2YWwpID0+IHZhbCA9PT0gXCI8bXVsdGk+XCIpICE9PSAtMSkge1xyXG4gICAgICAgICAgICBzaG93TXVsdGlUaW1lQ2hlY2tib3ggPSB0cnVlO1xyXG4gICAgICAgICAgICBtdWx0aVRpbWVDaGVja2JveENoZWNrZWQgPSBzZWxlY3RlZFRpbWVPYmouaW5jbHVkZU11bHRpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHNob3daZXJvVGltZUNoZWNrYm94IHx8IHNob3dNdWx0aVRpbWVDaGVja2JveCkge1xyXG4gICAgICAgICAgICBzaG93RW50ZXJUaW1lQ2hlY2tib3ggPSB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRpbWVBcnIuZmluZEluZGV4KCh2YWwpID0+IHZhbCAhPT0gXCI8bXVsdGk+XCIgJiYgdmFsICE9PSBcIjBcIikgIT09IC0xKSB7XHJcbiAgICAgICAgICAgIGVudGVyVGltZUNoZWNrYm94Q2hlY2tlZCA9IHNlbGVjdGVkVGltZU9iaj8uaW5jbHVkZVRpbWVSYW5nZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIHNob3dNdWx0aVRpbWVDaGVja2JveCxcclxuICAgICAgICAgICAgc2hvd1plcm9UaW1lQ2hlY2tib3gsXHJcbiAgICAgICAgICAgIHNob3dFbnRlclRpbWVDaGVja2JveCxcclxuICAgICAgICAgICAgbXVsdGlUaW1lQ2hlY2tib3hDaGVja2VkLFxyXG4gICAgICAgICAgICB6ZXJvVGltZUNoZWNrYm94Q2hlY2tlZCxcclxuICAgICAgICAgICAgZW50ZXJUaW1lQ2hlY2tib3hDaGVja2VkLFxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgY2hlY2tJZlN0YXJ0VGltZUlzQWZ0ZXJFbmRUaW1lKHN0YXJ0VGltZTogc3RyaW5nW10sIGVuZFRpbWU6IHN0cmluZ1tdKSB7XHJcbiAgICAgICAgY29uc3QgdGltZUZvcm1hdCA9IFwiSEg6bW06c3NcIjtcclxuXHJcbiAgICAgICAgY29uc3Qgc3RhcnRUaW1lMjRIckZvcm1hdEFyciA9IHRoaXMuZGF0ZVRpbWVGb3JtYXRTZXJ2aWNlLmNvbnZlcnRUb3R3ZW50eUZvdXJIcnNGb3JtYXQoXHJcbiAgICAgICAgICAgIGAke3N0YXJ0VGltZVswXX06JHtzdGFydFRpbWVbMV19ICR7c3RhcnRUaW1lWzJdfWAsXHJcbiAgICAgICAgICAgIHRydWUsXHJcbiAgICAgICAgKTtcclxuICAgICAgICBjb25zdCBzdGFydFRpbWUyNEhyRm9ybWF0ID0gYCR7c3RhcnRUaW1lMjRIckZvcm1hdEFyclswXX06JHtzdGFydFRpbWUyNEhyRm9ybWF0QXJyWzFdfTowMGA7XHJcbiAgICAgICAgY29uc3QgZW5kVGltZTI0SHJGb3JtYXRBcnIgPSB0aGlzLmRhdGVUaW1lRm9ybWF0U2VydmljZS5jb252ZXJ0VG90d2VudHlGb3VySHJzRm9ybWF0KFxyXG4gICAgICAgICAgICBgJHtlbmRUaW1lWzBdfToke2VuZFRpbWVbMV19ICR7ZW5kVGltZVsyXX1gLFxyXG4gICAgICAgICAgICB0cnVlLFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgY29uc3QgZW5kVGltZTI0SHJGb3JtYXQgPSBgJHtlbmRUaW1lMjRIckZvcm1hdEFyclswXX06JHtlbmRUaW1lMjRIckZvcm1hdEFyclsxXX06MDBgO1xyXG4gICAgICAgIHJldHVybiBkYXlqcyhzdGFydFRpbWUyNEhyRm9ybWF0LCB0aW1lRm9ybWF0KS5pc0FmdGVyKGRheWpzKGVuZFRpbWUyNEhyRm9ybWF0LCB0aW1lRm9ybWF0KSk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0UHJldmlvdXNTZWxlY3RlZFRpbWVGaWx0ZXIoKSB7XHJcbiAgICAgICAgbGV0IHByZXZpb3VzU2VsZWN0ZWRUaW1lRmlsdGVyO1xyXG5cclxuICAgICAgICBpZiAodGhpcy50b29sdGlwU2VsZWN0ZWRNYXAuaGFzKHRoaXMuc2VsZWN0ZWRSYWRpbykpIHtcclxuICAgICAgICAgICAgcHJldmlvdXNTZWxlY3RlZFRpbWVGaWx0ZXIgPSB0aGlzLnRvb2x0aXBTZWxlY3RlZE1hcC5nZXQodGhpcy5zZWxlY3RlZFJhZGlvKTtcclxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuaW5pdGlhbFZhbHVlTWFwLmhhcyh0aGlzLnNlbGVjdGVkUmFkaW8pKSB7XHJcbiAgICAgICAgICAgIHByZXZpb3VzU2VsZWN0ZWRUaW1lRmlsdGVyID0gdGhpcy5pbml0aWFsVmFsdWVNYXAuZ2V0KHRoaXMuc2VsZWN0ZWRSYWRpbyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gcHJldmlvdXNTZWxlY3RlZFRpbWVGaWx0ZXI7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0Q3VycmVudFNlbGVjdGVkVGltZUZpbHRlcihcclxuICAgICAgICBzdGFydFRpbWU6IHN0cmluZ1tdLFxyXG4gICAgICAgIGVuZFRpbWU6IHN0cmluZ1tdLFxyXG4gICAgICAgIGluY2x1ZGVNdWx0aTogYm9vbGVhbixcclxuICAgICAgICBpbmNsdWRlWmVybzogYm9vbGVhbixcclxuICAgICAgICBpbmNsdWRlVGltZVJhbmdlOiBib29sZWFuLFxyXG4gICAgKSB7XHJcbiAgICAgICAgY29uc3QgZnJvbVRpbWUyNEhyRm9ybWF0QXJyID0gdGhpcy5kYXRlVGltZUZvcm1hdFNlcnZpY2UuY29udmVydFRvdHdlbnR5Rm91ckhyc0Zvcm1hdChcclxuICAgICAgICAgICAgYCR7c3RhcnRUaW1lWzBdfToke3N0YXJ0VGltZVsxXX0gJHtzdGFydFRpbWVbMl19YCxcclxuICAgICAgICAgICAgdHJ1ZSxcclxuICAgICAgICApO1xyXG4gICAgICAgIGNvbnN0IGZyb21UaW1lMjRIckZvcm1hdCA9IGAke2Zyb21UaW1lMjRIckZvcm1hdEFyclswXX06JHtmcm9tVGltZTI0SHJGb3JtYXRBcnJbMV19OjAwYDtcclxuXHJcbiAgICAgICAgY29uc3QgdG9UaW1lMjRIckZvcm1hdEFyciA9IHRoaXMuZGF0ZVRpbWVGb3JtYXRTZXJ2aWNlLmNvbnZlcnRUb3R3ZW50eUZvdXJIcnNGb3JtYXQoXHJcbiAgICAgICAgICAgIGAke2VuZFRpbWVbMF19OiR7ZW5kVGltZVsxXX0gJHtlbmRUaW1lWzJdfWAsXHJcbiAgICAgICAgICAgIHRydWUsXHJcbiAgICAgICAgKTtcclxuICAgICAgICBjb25zdCB0b1RpbWUyNEhyRm9ybWF0ID0gYCR7dG9UaW1lMjRIckZvcm1hdEFyclswXX06JHt0b1RpbWUyNEhyRm9ybWF0QXJyWzFdfTowMGA7XHJcblxyXG4gICAgICAgIGNvbnN0IGN1cnJlbnRTZWxlY3RlZFRpbWVGaWx0ZXIgPSB7XHJcbiAgICAgICAgICAgIGZyb21UaW1lOiBmcm9tVGltZTI0SHJGb3JtYXQsXHJcbiAgICAgICAgICAgIHRvVGltZTogdG9UaW1lMjRIckZvcm1hdCxcclxuICAgICAgICAgICAgaW5jbHVkZU11bHRpLFxyXG4gICAgICAgICAgICBpbmNsdWRlWmVybyxcclxuICAgICAgICAgICAgaW5jbHVkZVRpbWVSYW5nZSxcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICByZXR1cm4gY3VycmVudFNlbGVjdGVkVGltZUZpbHRlcjtcclxuICAgIH1cclxuXHJcbiAgICBpbmNyZW1lbnRIb3VySW5wdXQoYXJyOiBhbnlbXSkge1xyXG4gICAgICAgIGlmIChhcnJbMF0gPT09IFwiXCIpIHtcclxuICAgICAgICAgICAgYXJyWzBdID0gMTtcclxuICAgICAgICB9IGVsc2UgaWYgKHBhcnNlSW50KGFyclswXSwgMTApIDwgMTIpIHtcclxuICAgICAgICAgICAgYXJyWzBdID0gcGFyc2VJbnQoYXJyWzBdLCAxMCkgKyAxO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGFyclswXSA9IDE7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGRlY3JlbWVudEhvdXJJbnB1dChhcnI6IGFueVtdKSB7XHJcbiAgICAgICAgaWYgKGFyclswXSA9PT0gXCJcIikge1xyXG4gICAgICAgICAgICBhcnJbMF0gPSAxMjtcclxuICAgICAgICB9IGVsc2UgaWYgKHBhcnNlSW50KGFyclswXSwgMTApID4gMSkge1xyXG4gICAgICAgICAgICBhcnJbMF0gPSBwYXJzZUludChhcnJbMF0sIDEwKSAtIDE7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgYXJyWzBdID0gMTI7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGluY3JlbWVudE1pbnV0ZUlucHV0KGFycjogYW55W10pIHtcclxuICAgICAgICAvLyBpbmNyZW1lbnQgdG8gbmVhcmVzdCBwcm9wZXIgaW50ZXJ2YWwoMTUsMzAsNDUpXHJcbiAgICAgICAgY29uc3QgbWludXRlID0gcGFyc2VJbnQoYXJyWzFdLCAxMCk7XHJcbiAgICAgICAgaWYgKG1pbnV0ZSA8PSAxNCkge1xyXG4gICAgICAgICAgICBhcnJbMV0gPSBcIjE1XCI7XHJcbiAgICAgICAgfSBlbHNlIGlmIChtaW51dGUgPj0gMTUgJiYgbWludXRlIDw9IDI5KSB7XHJcbiAgICAgICAgICAgIGFyclsxXSA9IFwiMzBcIjtcclxuICAgICAgICB9IGVsc2UgaWYgKG1pbnV0ZSA+PSAzMCAmJiBtaW51dGUgPD0gNDQpIHtcclxuICAgICAgICAgICAgYXJyWzFdID0gXCI0NVwiO1xyXG4gICAgICAgIH0gZWxzZSBpZiAobWludXRlID49IDQ1KSB7XHJcbiAgICAgICAgICAgIGFyclsxXSA9IFwiMDBcIjtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZGVjcmVtZW50TWludXRlSW5wdXQoYXJyOiBhbnkpIHtcclxuICAgICAgICBjb25zdCBtaW51dGUgPSBwYXJzZUludChhcnJbMV0sIDEwKTtcclxuICAgICAgICBpZiAobWludXRlID4gMCAmJiBtaW51dGUgPD0gMTUpIHtcclxuICAgICAgICAgICAgYXJyWzFdID0gXCIwMFwiO1xyXG4gICAgICAgIH0gZWxzZSBpZiAobWludXRlID49IDE2ICYmIG1pbnV0ZSA8PSAzMCkge1xyXG4gICAgICAgICAgICBhcnJbMV0gPSBcIjE1XCI7XHJcbiAgICAgICAgfSBlbHNlIGlmIChtaW51dGUgPj0gMzEgJiYgbWludXRlIDw9IDQ1KSB7XHJcbiAgICAgICAgICAgIGFyclsxXSA9IFwiMzBcIjtcclxuICAgICAgICB9IGVsc2UgaWYgKG1pbnV0ZSA+IDQ1IHx8IG1pbnV0ZSA9PT0gMCkge1xyXG4gICAgICAgICAgICBhcnJbMV0gPSBcIjQ1XCI7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGluY3JlbWVudE9yRGVjcmVtZW50SG91cihpbmNyZW1lbnQ6IGJvb2xlYW4sIHRpbWU6IHN0cmluZ1tdKSB7XHJcbiAgICAgICAgaWYgKGluY3JlbWVudCkge1xyXG4gICAgICAgICAgICB0aGlzLmluY3JlbWVudEhvdXJJbnB1dCh0aW1lKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmRlY3JlbWVudEhvdXJJbnB1dCh0aW1lKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaW5jcmVtZW50T3JEZWNyZW1lbnRNaW4oaW5jcmVtZW50OiBib29sZWFuLCB0aW1lOiBzdHJpbmdbXSkge1xyXG4gICAgICAgIGlmIChpbmNyZW1lbnQpIHtcclxuICAgICAgICAgICAgdGhpcy5pbmNyZW1lbnRNaW51dGVJbnB1dCh0aW1lKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmRlY3JlbWVudE1pbnV0ZUlucHV0KHRpbWUpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpc0hvdXJWYWx1ZUludmFsaWQoaHI6IHN0cmluZykge1xyXG4gICAgICAgIHJldHVybiBoci5sZW5ndGggPT09IDAgfHwgIStociB8fCBwYXJzZUludChociwgMTApIDwgMSB8fCBwYXJzZUludChociwgMTApID4gMTIgfHwgaHIuaW5jbHVkZXMoXCIuXCIpO1xyXG4gICAgfVxyXG5cclxuICAgIGlzTWludXRlVmFsdWVJbnZhbGlkKG1pbnV0ZTogc3RyaW5nKSB7XHJcbiAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgbWludXRlLmxlbmd0aCAhPT0gMiB8fFxyXG4gICAgICAgICAgICAoISttaW51dGUgJiYgbWludXRlICE9PSBcIjAwXCIpIHx8XHJcbiAgICAgICAgICAgIHBhcnNlSW50KG1pbnV0ZSwgMTApIDwgMCB8fFxyXG4gICAgICAgICAgICBwYXJzZUludChtaW51dGUsIDEwKSA+IDU5IHx8XHJcbiAgICAgICAgICAgIG1pbnV0ZS5pbmNsdWRlcyhcIi5cIilcclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1TT1JUPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ly9cclxuICAgIHVwZGF0ZVNvcnRNYXAodGVtcFNvcnRPcmRlcjogU29ydFR5cGUsIHRhYmxlRGF0YTogYW55W10sIGlzTHVyQW5kQ3NyQ29tcG9uZW50OiBib29sZWFuKSB7XHJcbiAgICAgICAgdGhpcy5hbm5hU29ydFNlcnZpY2UuY29sdW1uU29ydFN0YXRlID0gbmV3IE1hcCgpO1xyXG4gICAgICAgIHRoaXMuYW5uYVNvcnRTZXJ2aWNlLmNvbHVtblNvcnRTdGF0ZS5zZXQodGhpcy5zZWxlY3RlZFJhZGlvLCB0ZW1wU29ydE9yZGVyKTtcclxuICAgICAgICBjb25zdCBzb3J0ZWRUYWJsZURhdGEgPSB0aGlzLmFubmFTb3J0U2VydmljZS5hcHBseVNvcnRpbmcoXHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRSYWRpbyxcclxuICAgICAgICAgICAgdGVtcFNvcnRPcmRlcixcclxuICAgICAgICAgICAgdGFibGVEYXRhLFxyXG4gICAgICAgICAgICBpc0x1ckFuZENzckNvbXBvbmVudCxcclxuICAgICAgICApO1xyXG4gICAgICAgIHJldHVybiBzb3J0ZWRUYWJsZURhdGE7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gRmlsdGVyIGljb24gYWxpZ25tZW50IHRvIGJpZ2dlciBlbGVtZW50IGluIHVwcGFyIGFuZCBsb3dlciBoZWFkZXJcclxuICAgIHNldE1hcmdpbkxlZnRGb3JGaWx0ZXJJY29uKHRoRWxlbWVudHM6IFF1ZXJ5TGlzdDxFbGVtZW50UmVmPikge1xyXG4gICAgICAgIGNvbnN0IGVsZW1lbnRBcnIgPSB0aEVsZW1lbnRzLnRvQXJyYXkoKTtcclxuICAgICAgICBlbGVtZW50QXJyLmZvckVhY2goKGl0ZW0pID0+IHtcclxuICAgICAgICAgICAgY29uc3QgY2hpbGREaXZFbGVtZW50cyA9IGl0ZW0ubmF0aXZlRWxlbWVudC5jaGlsZHJlbjtcclxuXHJcbiAgICAgICAgICAgIGlmIChjaGlsZERpdkVsZW1lbnRzLmxlbmd0aCA9PT0gMikge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZmlyc3RQYXJhZ3JhcGhPZmZzZXRXaWR0aDogbnVtYmVyID0gY2hpbGREaXZFbGVtZW50c1swXT8uY2hpbGRyZW5bMF0/Lm9mZnNldFdpZHRoXHJcbiAgICAgICAgICAgICAgICAgICAgPyBjaGlsZERpdkVsZW1lbnRzWzBdPy5jaGlsZHJlblswXT8ub2Zmc2V0V2lkdGhcclxuICAgICAgICAgICAgICAgICAgICA6IDA7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBzZWNvbmRQYXJhZ3JhcGhPZmZzZXRXaWR0aDogbnVtYmVyID0gY2hpbGREaXZFbGVtZW50c1sxXS5jaGlsZHJlblswXT8ub2Zmc2V0V2lkdGhcclxuICAgICAgICAgICAgICAgICAgICA/IGNoaWxkRGl2RWxlbWVudHNbMV0uY2hpbGRyZW5bMF0/Lm9mZnNldFdpZHRoXHJcbiAgICAgICAgICAgICAgICAgICAgOiAwO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChmaXJzdFBhcmFncmFwaE9mZnNldFdpZHRoID4gc2Vjb25kUGFyYWdyYXBoT2Zmc2V0V2lkdGgpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBkaWZmID0gZmlyc3RQYXJhZ3JhcGhPZmZzZXRXaWR0aCAtIHNlY29uZFBhcmFncmFwaE9mZnNldFdpZHRoO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChjaGlsZERpdkVsZW1lbnRzWzBdLmNoaWxkcmVuLmxlbmd0aCA9PT0gMikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjaGlsZERpdkVsZW1lbnRzWzBdLmNoaWxkcmVuWzFdLnN0eWxlLm1hcmdpbkxlZnQgPSBgJHs0fXB4YDtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChjaGlsZERpdkVsZW1lbnRzWzFdLmNoaWxkcmVuLmxlbmd0aCA9PT0gMikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjaGlsZERpdkVsZW1lbnRzWzFdLmNoaWxkcmVuWzFdLnN0eWxlLm1hcmdpbkxlZnQgPSBgJHtkaWZmICsgNH1weGA7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBkaWZmID0gc2Vjb25kUGFyYWdyYXBoT2Zmc2V0V2lkdGggLSBmaXJzdFBhcmFncmFwaE9mZnNldFdpZHRoO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChjaGlsZERpdkVsZW1lbnRzWzBdLmNoaWxkcmVuLmxlbmd0aCA9PT0gMikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjaGlsZERpdkVsZW1lbnRzWzBdLmNoaWxkcmVuWzFdLnN0eWxlLm1hcmdpbkxlZnQgPSBgJHtkaWZmICsgNH1weGA7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAoY2hpbGREaXZFbGVtZW50c1sxXS5jaGlsZHJlbi5sZW5ndGggPT09IDIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGREaXZFbGVtZW50c1sxXS5jaGlsZHJlblsxXS5zdHlsZS5tYXJnaW5MZWZ0ID0gYCR7NH1weGA7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbn1cclxuIl19