@blokjs/trigger-cron 1.0.0 → 1.2.0

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.
@@ -36,10 +36,9 @@ export class CronTrigger extends TriggerBase {
36
36
  */
37
37
  loadNodes() {
38
38
  this.nodeMap.nodes = new NodeMap();
39
- const nodeKeys = Object.keys(this.nodes);
40
- for (const key of nodeKeys) {
41
- this.nodeMap.nodes.addNode(key, this.nodes[key]);
42
- }
39
+ // Register each node under its own node.name (the canonical use: ref, ADR
40
+ // 0002) the Nodes.ts map keys are cosmetic; the collision guard catches dups.
41
+ this.nodeMap.nodes.addNodes(Object.values(this.nodes));
43
42
  }
44
43
  /**
45
44
  * Load workflows into the workflow map
@@ -403,4 +402,4 @@ export class CronTrigger extends TriggerBase {
403
402
  }
404
403
  }
405
404
  export default CronTrigger;
406
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ3JvblRyaWdnZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvQ3JvblRyaWdnZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7R0FVRztBQUdILE9BQU8sRUFFTixhQUFhLEVBQ2Isc0JBQXNCLEVBRXRCLE9BQU8sRUFDUCxXQUFXLEVBRVgsbUJBQW1CLEVBQ25CLGdCQUFnQixHQUNoQixNQUFNLGdCQUFnQixDQUFDO0FBRXhCLE9BQU8sRUFBYSxjQUFjLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQy9FLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0IsT0FBTyxFQUFFLEVBQUUsSUFBSSxJQUFJLEVBQUUsTUFBTSxNQUFNLENBQUM7QUE0RGxDOztHQUVHO0FBQ0gsTUFBTSxPQUFnQixXQUFZLFNBQVEsV0FBVztJQUMxQyxPQUFPLEdBQWtCLEVBQW1CLENBQUM7SUFDcEMsTUFBTSxHQUFHLEtBQUssQ0FBQyxTQUFTLENBQzFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsWUFBWSxJQUFJLHVCQUF1QixFQUNuRCxPQUFPLENBQUMsR0FBRyxDQUFDLGVBQWUsSUFBSSxPQUFPLENBQ3RDLENBQUM7SUFDaUIsTUFBTSxHQUFHLElBQUksYUFBYSxFQUFFLENBQUM7SUFDdEMsSUFBSSxHQUE4QixJQUFJLEdBQUcsRUFBRSxDQUFDO0lBQ3RELDBGQUEwRjtJQUNsRixlQUFlLEdBQWlDLElBQUksQ0FBQztJQU03RCx3RUFBd0U7SUFDeEUsMkVBQTJFO0lBQzNFLDRFQUE0RTtJQUM1RSw0RUFBNEU7SUFDNUUsZ0RBQWdEO0lBQ2hELHFGQUFxRjtJQUNyRixzRUFBc0U7SUFDdEUscUNBQXFDO0lBRXJDOztPQUVHO0lBQ0gsU0FBUztRQUNSLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxHQUFHLElBQUksT0FBTyxFQUFFLENBQUM7UUFDbkMsTUFBTSxRQUFRLEdBQUcs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QUksRUFBRSxjQUFjLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsQ0FBQyxDQUFDO29CQUV0RSx1QkFBdUI7b0JBQ3ZCLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFO3dCQUNqQixHQUFHLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxRQUFRO3dCQUN6QixNQUFNLEVBQUUsS0FBSzt3QkFDYixhQUFhLEVBQUUsSUFBSSxDQUFDLGFBQWEsRUFBRSxJQUFJLElBQUksU0FBUzt3QkFDcEQsTUFBTSxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUM7cUJBQ3RCLENBQUMsQ0FBQztvQkFFSCxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxtQkFBbUIsS0FBSyxLQUFLLFlBQVksRUFBRSxFQUFHLEtBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQztvQkFFdkYsT0FBTyxDQUFDLEVBQUUsR0FBRyxFQUFFLEVBQWEsRUFBRSxPQUFPLEVBQUUsRUFBaUIsRUFBRSxDQUFDLENBQUM7Z0JBQzdELENBQUM7d0JBQVMsQ0FBQztvQkFDVixZQUFZLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztvQkFDN0IsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO2dCQUNaLENBQUM7WUFDRixDQUFDLENBQUMsQ0FBQztRQUNKLENBQUMsQ0FBQyxDQUFDO0lBQ0osQ0FBQztDQUNEO0FBRUQsZUFBZSxXQUFXLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENyb25UcmlnZ2VyIC0gU2NoZWR1bGVkIHdvcmtmbG93IGV4ZWN1dGlvbiBiYXNlZCBvbiBjcm9uIGV4cHJlc3Npb25zXG4gKlxuICogRXh0ZW5kcyBUcmlnZ2VyQmFzZSB0byBzdXBwb3J0IHNjaGVkdWxlZCB0cmlnZ2VyczpcbiAqIC0gQ3JvbiBleHByZXNzaW9ucyAoZS5nLiwgXCIwICogKiAqICpcIiBmb3IgaG91cmx5KVxuICogLSBUaW1lem9uZS1hd2FyZSBzY2hlZHVsaW5nXG4gKiAtIE92ZXJsYXAgcHJldmVudGlvblxuICogLSBNYW51YWwgdHJpZ2dlciBzdXBwb3J0XG4gKlxuICogVXNlcyB0aGUgJ2Nyb24nIHBhY2thZ2UgZm9yIGNyb24gcGFyc2luZyBhbmQgc2NoZWR1bGluZy5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IENyb25UcmlnZ2VyT3B0cywgV29ya2Zsb3dWMkJ1aWxkZXIgfSBmcm9tIFwiQGJsb2tqcy9oZWxwZXJcIjtcbmltcG9ydCB7XG5cdHR5cGUgQmxva1NlcnZpY2UsXG5cdERlZmF1bHRMb2dnZXIsXG5cdERlZmVycmVkRGlzcGF0Y2hTaWduYWwsXG5cdHR5cGUgR2xvYmFsT3B0aW9ucyxcblx0Tm9kZU1hcCxcblx0VHJpZ2dlckJhc2UsXG5cdHR5cGUgVHJpZ2dlclJlc3BvbnNlLFxuXHRXYWl0RGlzcGF0Y2hSZXF1ZXN0LFxuXHRib290c3RyYXBUcmFjaW5nLFxufSBmcm9tIFwiQGJsb2tqcy9ydW5uZXJcIjtcbmltcG9ydCB0eXBlIHsgQ29udGV4dCwgTWV0cmljc1R5cGUsIFJlcXVlc3RDb250ZXh0IH0gZnJvbSBcIkBibG9ranMvc2hhcmVkXCI7XG5pbXBvcnQgeyB0eXBlIFNwYW4sIFNwYW5TdGF0dXNDb2RlLCBtZXRyaWNzLCB0cmFjZSB9IGZyb20gXCJAb3BlbnRlbGVtZXRyeS9hcGlcIjtcbmltcG9ydCB7IENyb25Kb2IgfSBmcm9tIFwiY3JvblwiO1xuaW1wb3J0IHsgdjQgYXMgdXVpZCB9IGZyb20gXCJ1dWlkXCI7XG5cbi8qKlxuICogU2NoZWR1bGVkIGpvYiBpbmZvcm1hdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNjaGVkdWxlZEpvYiB7XG5cdC8qKiBVbmlxdWUgam9iIElEICovXG5cdGlkOiBzdHJpbmc7XG5cdC8qKiBXb3JrZmxvdyBwYXRoICovXG5cdHdvcmtmbG93UGF0aDogc3RyaW5nO1xuXHQvKiogQ3JvbiBleHByZXNzaW9uICovXG5cdHNjaGVkdWxlOiBzdHJpbmc7XG5cdC8qKiBUaW1lem9uZSAqL1xuXHR0aW1lem9uZTogc3RyaW5nO1xuXHQvKiogQWxsb3cgb3ZlcmxhcHBpbmcgZXhlY3V0aW9ucyAqL1xuXHRvdmVybGFwOiBib29sZWFuO1xuXHQvKiogV2hldGhlciB0aGUgam9iIGlzIGN1cnJlbnRseSBydW5uaW5nICovXG5cdHJ1bm5pbmc6IGJvb2xlYW47XG5cdC8qKiBMYXN0IGV4ZWN1dGlvbiB0aW1lICovXG5cdGxhc3RSdW4/OiBEYXRlO1xuXHQvKiogTmV4dCBzY2hlZHVsZWQgdGltZSAqL1xuXHRuZXh0UnVuPzogRGF0ZTtcblx0LyoqIEludGVybmFsIENyb25Kb2IgaW5zdGFuY2UgKi9cblx0am9iOiBDcm9uSm9iO1xufVxuXG4vKipcbiAqIEV4ZWN1dGlvbiBjb250ZXh0IHBhc3NlZCB0byB0aGUgd29ya2Zsb3dcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDcm9uRXhlY3V0aW9uQ29udGV4dCB7XG5cdC8qKiBKb2IgSUQgKi9cblx0am9iSWQ6IHN0cmluZztcblx0LyoqIFNjaGVkdWxlZCB0aW1lICh3aGVuIGl0IHdhcyBzdXBwb3NlZCB0byBydW4pICovXG5cdHNjaGVkdWxlZFRpbWU6IERhdGU7XG5cdC8qKiBBY3R1YWwgZXhlY3V0aW9uIHRpbWUgKi9cblx0ZXhlY3V0aW9uVGltZTogRGF0ZTtcblx0LyoqIENyb24gZXhwcmVzc2lvbiAqL1xuXHRzY2hlZHVsZTogc3RyaW5nO1xuXHQvKiogVGltZXpvbmUgKi9cblx0dGltZXpvbmU6IHN0cmluZztcblx0LyoqIFdoZXRoZXIgdGhpcyBpcyBhIG1hbnVhbCB0cmlnZ2VyICovXG5cdG1hbnVhbDogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBXb3JrZmxvdyBtb2RlbCB3aXRoIGNyb24gdHJpZ2dlciBjb25maWd1cmF0aW9uXG4gKi9cbmludGVyZmFjZSBDcm9uV29ya2Zsb3dNb2RlbCB7XG5cdHBhdGg6IHN0cmluZztcblx0Y29uZmlnOiB7XG5cdFx0bmFtZTogc3RyaW5nO1xuXHRcdHZlcnNpb246IHN0cmluZztcblx0XHR0cmlnZ2VyPzoge1xuXHRcdFx0Y3Jvbj86IENyb25UcmlnZ2VyT3B0cztcblx0XHRcdFtrZXk6IHN0cmluZ106IHVua25vd247XG5cdFx0fTtcblx0XHRba2V5OiBzdHJpbmddOiB1bmtub3duO1xuXHR9O1xufVxuXG4vKipcbiAqIENyb25UcmlnZ2VyIC0gU2NoZWR1bGVkIHdvcmtmbG93IGV4ZWN1dGlvblxuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQ3JvblRyaWdnZXIgZXh0ZW5kcyBUcmlnZ2VyQmFzZSB7XG5cdHByb3RlY3RlZCBub2RlTWFwOiBHbG9iYWxPcHRpb25zID0ge30gYXMgR2xvYmFsT3B0aW9ucztcblx0cHJvdGVjdGVkIHJlYWRvbmx5IHRyYWNlciA9IHRyYWNlLmdldFRyYWNlcihcblx0XHRwcm9jZXNzLmVudi5QUk9KRUNUX05BTUUgfHwgXCJ0cmlnZ2VyLWNyb24td29ya2Zsb3dcIixcblx0XHRwcm9jZXNzLmVudi5QUk9KRUNUX1ZFUlNJT04gfHwgXCIwLjAuMVwiLFxuXHQpO1xuXHRwcm90ZWN0ZWQgcmVhZG9ubHkgbG9nZ2VyID0gbmV3IERlZmF1bHRMb2dnZXIoKTtcblx0cHJvdGVjdGVkIGpvYnM6IE1hcDxzdHJpbmcsIFNjaGVkdWxlZEpvYj4gPSBuZXcgTWFwKCk7XG5cdC8qKiBPQlMtMDIgVDQg4oCUIGdyYWNlZnVsIHNodXRkb3duIGZvciB0aGUgT1RlbCB0cmFjZXIgcHJvdmlkZXIsIGlmIHRyYWNpbmcgd2FzIGVuYWJsZWQuICovXG5cdHByaXZhdGUgdHJhY2luZ1NodXRkb3duOiAoKCkgPT4gUHJvbWlzZTx2b2lkPikgfCBudWxsID0gbnVsbDtcblxuXHQvLyBTdWJjbGFzc2VzIHByb3ZpZGUgdGhlc2Vcblx0cHJvdGVjdGVkIGFic3RyYWN0IG5vZGVzOiBSZWNvcmQ8c3RyaW5nLCBCbG9rU2VydmljZTx1bmtub3duPj47XG5cdHByb3RlY3RlZCBhYnN0cmFjdCB3b3JrZmxvd3M6IFJlY29yZDxzdHJpbmcsIFdvcmtmbG93VjJCdWlsZGVyPjtcblxuXHQvLyBDb25zdHJ1Y3RvciByZW1vdmVkIChtaXJyb3JzIFdvcmtlclRyaWdnZXIncyB2MC42LjMgZml4KSDigJQgcHJlLWZpeCBpdFxuXHQvLyBjYWxsZWQgYGxvYWROb2RlcygpYCArIGBsb2FkV29ya2Zsb3dzKClgLCBidXQgc3ViY2xhc3NlcyB1c2UgY2xhc3MtZmllbGRcblx0Ly8gYXNzaWdubWVudHMgZm9yIGBub2Rlc2AgLyBgd29ya2Zsb3dzYCAodGhlIGNhbm9uaWNhbCBUeXBlU2NyaXB0IHBhdHRlcm4pLlxuXHQvLyBUaG9zZSBmaWVsZHMgcnVuIEFGVEVSIHN1cGVyKCksIHNvIGFjY2Vzc2luZyBgdGhpcy5ub2Rlc2AgZnJvbSB0aGUgcGFyZW50XG5cdC8vIGNvbnN0cnVjdG9yIHJlYWQgYHVuZGVmaW5lZGAgYW5kIGNyYXNoZWQgd2l0aFxuXHQvLyBgVHlwZUVycm9yOiBDYW5ub3QgY29udmVydCB1bmRlZmluZWQgb3IgbnVsbCB0byBvYmplY3RgIChPYmplY3Qua2V5cyh0aGlzLm5vZGVzKSkuXG5cdC8vIFRoZSByZWdpc3RyeSBpbml0IG5vdyBoYXBwZW5zIGF0IHRoZSBzdGFydCBvZiBgbGlzdGVuKClgLCBhZnRlciB0aGVcblx0Ly8gc3ViY2xhc3MncyBmaWVsZHMgYXJlIGluaXRpYWxpemVkLlxuXG5cdC8qKlxuXHQgKiBMb2FkIG5vZGVzIGludG8gdGhlIG5vZGUgbWFwXG5cdCAqL1xuXHRsb2FkTm9kZXMoKTogdm9pZCB7XG5cdFx0dGhpcy5ub2RlTWFwLm5vZGVzID0gbmV3IE5vZGVNYXAoKTtcblx0XHRjb25zdCBub2RlS2V5cyA9IE9iamVjdC5rZXlzKHRoaXMubm9kZXMpO1xuXHRcdGZvciAoY29uc3Qga2V5IG9mIG5vZGVLZXlzKSB7XG5cdFx0XHR0aGlzLm5vZGVNYXAubm9kZXMuYWRkTm9kZShrZXksIHRoaXMubm9kZXNba2V5XSk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIExvYWQgd29ya2Zsb3dzIGludG8gdGhlIHdvcmtmbG93IG1hcFxuXHQgKi9cblx0bG9hZFdvcmtmbG93cygpOiB2b2lkIHtcblx0XHR0aGlzLm5vZGVNYXAud29ya2Zsb3dzID0gdGhpcy53b3JrZmxvd3M7XG5cdH1cblxuXHQvKipcblx0ICogQ29udmVydCBjcm9uIERhdGVUaW1lIHRvIERhdGVcblx0ICogVGhlIGNyb24gcGFja2FnZSB1c2VzIGx1eG9uIERhdGVUaW1lIHdoaWNoIGhhcyB0b0pTRGF0ZSgpXG5cdCAqL1xuXHRwcm90ZWN0ZWQgdG9EYXRlKGRhdGVUaW1lOiB1bmtub3duKTogRGF0ZSB7XG5cdFx0aWYgKGRhdGVUaW1lICYmIHR5cGVvZiBkYXRlVGltZSA9PT0gXCJvYmplY3RcIiAmJiBcInRvSlNEYXRlXCIgaW4gZGF0ZVRpbWUpIHtcblx0XHRcdHJldHVybiAoZGF0ZVRpbWUgYXMgeyB0b0pTRGF0ZTogKCkgPT4gRGF0ZSB9KS50b0pTRGF0ZSgpO1xuXHRcdH1cblx0XHRyZXR1cm4gZGF0ZVRpbWUgaW5zdGFuY2VvZiBEYXRlID8gZGF0ZVRpbWUgOiBuZXcgRGF0ZShkYXRlVGltZSBhcyBzdHJpbmcgfCBudW1iZXIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFN0YXJ0IHRoZSBjcm9uIHNjaGVkdWxlciAtIG1haW4gZW50cnkgcG9pbnRcblx0ICovXG5cdGFzeW5jIGxpc3RlbigpOiBQcm9taXNlPG51bWJlcj4ge1xuXHRcdGNvbnN0IHN0YXJ0VGltZSA9IHRoaXMuc3RhcnRDb3VudGVyKCk7XG5cblx0XHR0cnkge1xuXHRcdFx0Ly8gT0JTLTAyIFQ0IOKAlCBvcHQtaW4gZGlzdHJpYnV0ZWQgdHJhY2luZyBmb3Igc2NoZWR1bGVkIGV4ZWN1dGlvbnMuXG5cdFx0XHQvLyBXaGVuIE9URUxfRVhQT1JURVJfT1RMUF9FTkRQT0lOVCBpcyBzZXQsIGluc3RhbGwgYW4gT1RlbCBTREsgc28gdGhlXG5cdFx0XHQvLyBzcGFucyB0aGUgcnVubmVyIGNyZWF0ZXMgcGVyIGNyb24gcnVuL3N0ZXAgZXhwb3J0IHRvIGEgYmFja2VuZC5cblx0XHRcdC8vIE1pcnJvcnMgSHR0cFRyaWdnZXIncyBCMSB3aXJpbmc7IG5vLW9wIHdoZW4gdGhlIGVudiB2YXIgaXMgdW5zZXQuXG5cdFx0XHRhd2FpdCB0aGlzLm1heWJlQm9vdHN0cmFwVHJhY2luZygpO1xuXG5cdFx0XHQvLyBQb3B1bGF0ZSB0aGUgdHJpZ2dlcidzIG5vZGUgKyB3b3JrZmxvdyByZWdpc3RyaWVzIGZyb20gdGhlXG5cdFx0XHQvLyBzdWJjbGFzcydzIGBub2Rlc2AgLyBgd29ya2Zsb3dzYCBmaWVsZHMuIE1pcnJvcnMgV29ya2VyVHJpZ2dlcidzXG5cdFx0XHQvLyB2MC42LjMgZml4IOKAlCBwcmUtZml4IHRoZXNlIGNhbGxzIGxpdmVkIGluIHRoZSBjb25zdHJ1Y3RvciBhbmRcblx0XHRcdC8vIGNyYXNoZWQgYmVjYXVzZSBjbGFzcyBmaWVsZHMgaGF2ZW4ndCBydW4geWV0IGF0IHN1cGVyLWNvbnN0cnVjdG9yXG5cdFx0XHQvLyB0aW1lLiBNdXN0IHJ1biBiZWZvcmUgYHJlZ2lzdGVyV29ya2Zsb3dzRnJvbU5vZGVNYXBgLFxuXHRcdFx0Ly8gd2hpY2ggcmVhZHMgYHRoaXMubm9kZU1hcC53b3JrZmxvd3NgLlxuXHRcdFx0dGhpcy5sb2FkTm9kZXMoKTtcblx0XHRcdHRoaXMubG9hZFdvcmtmbG93cygpO1xuXG5cdFx0XHQvLyBGNSDCtyBpbnN0YWxsIGNyYXNoL29ycGhhbi9qYW5pdG9yL3NodXRkb3duIGhhbmRsZXJzIHNvIGFcblx0XHRcdC8vIGNyb24tb25seSBwcm9jZXNzIGdldHMgdGhlIHNhbWUgcnVuLXN0YXRlIGludGVncml0eSArIHN0b3JhZ2Vcblx0XHRcdC8vIGh5Z2llbmUgZ3VhcmFudGVlcyBhcyBIVFRQL1dvcmtlci4gRWFjaCBoYW5kbGVyIGlzIGlkZW1wb3RlbnRcblx0XHRcdC8vICsgaW5kaXZpZHVhbGx5IGtpbGwtc3dpdGNoZWQuXG5cdFx0XHR0aGlzLmluc3RhbGxPcGVyYXRpb25hbEhhbmRsZXJzKHRoaXMubG9nZ2VyKTtcblxuXHRcdFx0Ly8gRjYgwrcgZmVlZCB0aGUgV29ya2Zsb3dSZWdpc3RyeSBmcm9tIHRoZSBub2RlTWFwIHNvIGBzdWJ3b3JrZmxvdzpgXG5cdFx0XHQvLyBzdGVwcyArIHRyaWdnZXIvd29ya2Zsb3cvcHJvY2Vzcy1nbG9iYWwgbWlkZGxld2FyZSByZXNvbHZlIGluIGFcblx0XHRcdC8vIGNyb24tb25seSBkZXBsb3ltZW50IChubyBIVFRQIHRyaWdnZXIgdG8gcG9wdWxhdGUgdGhlIHJlZ2lzdHJ5KS5cblx0XHRcdHRoaXMucmVnaXN0ZXJXb3JrZmxvd3NGcm9tTm9kZU1hcCh0aGlzLmxvZ2dlcik7XG5cblx0XHRcdC8vIEYxNCDCtyBzZWVkIHRoZSBwcm9jZXNzLWdsb2JhbCBtaWRkbGV3YXJlIGNoYWluIGZyb21cblx0XHRcdC8vIGBCTE9LX0dMT0JBTF9NSURETEVXQVJFYCAoaWRlbXBvdGVudCDigJQgcHJvZ3JhbW1hdGljXG5cdFx0XHQvLyBzZXRHbG9iYWxNaWRkbGV3YXJlIHRha2VzIHByZWNlZGVuY2UpLlxuXHRcdFx0dGhpcy5zZWVkR2xvYmFsTWlkZGxld2FyZUZyb21FbnYodGhpcy5sb2dnZXIpO1xuXG5cdFx0XHQvLyBGaW5kIGFsbCB3b3JrZmxvd3Mgd2l0aCBjcm9uIHRyaWdnZXJzXG5cdFx0XHRjb25zdCBjcm9uV29ya2Zsb3dzID0gdGhpcy5nZXRDcm9uV29ya2Zsb3dzKCk7XG5cblx0XHRcdGlmIChjcm9uV29ya2Zsb3dzLmxlbmd0aCA9PT0gMCkge1xuXHRcdFx0XHR0aGlzLmxvZ2dlci5sb2coXCJObyB3b3JrZmxvd3Mgd2l0aCBjcm9uIHRyaWdnZXJzIGZvdW5kXCIpO1xuXHRcdFx0XHRyZXR1cm4gdGhpcy5lbmRDb3VudGVyKHN0YXJ0VGltZSk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIENyZWF0ZSBhbmQgc3RhcnQgY3JvbiBqb2JzIGZvciBlYWNoIHdvcmtmbG93XG5cdFx0XHRmb3IgKGNvbnN0IHdvcmtmbG93IG9mIGNyb25Xb3JrZmxvd3MpIHtcblx0XHRcdFx0Y29uc3QgY29uZmlnID0gd29ya2Zsb3cuY29uZmlnLnRyaWdnZXI/LmNyb24gYXMgQ3JvblRyaWdnZXJPcHRzO1xuXHRcdFx0XHRjb25zdCBqb2JJZCA9IGBjcm9uLSR7d29ya2Zsb3cucGF0aH0tJHt1dWlkKCkuc2xpY2UoMCwgOCl9YDtcblxuXHRcdFx0XHQvLyBgQ3JvblRyaWdnZXJPcHRzYCBpcyBgei5pbnB1dDzigKY+YCBzbyBgdGltZXpvbmVgIGlzIGBzdHJpbmcgfCB1bmRlZmluZWRgXG5cdFx0XHRcdC8vIGV2ZW4gdGhvdWdoIHRoZSBzY2hlbWEgZGVjbGFyZXMgYC5kZWZhdWx0KFwiVVRDXCIpYC4gQXBwbHkgdGhlXG5cdFx0XHRcdC8vIGRlZmF1bHQgb25jZSBoZXJlIHNvIHRoZSByZXN0IG9mIHRoaXMgbWV0aG9kIChhbmQgdGhlIGNyb24gbGliJ3Ncblx0XHRcdFx0Ly8gY29uc3RydWN0b3IpIHNlZXMgYSBndWFyYW50ZWVkIHN0cmluZy5cblx0XHRcdFx0Y29uc3QgdGltZXpvbmUgPSBjb25maWcudGltZXpvbmUgPz8gXCJVVENcIjtcblxuXHRcdFx0XHR0aGlzLmxvZ2dlci5sb2coYFNjaGVkdWxpbmcgd29ya2Zsb3c6ICR7d29ya2Zsb3cucGF0aH0gd2l0aCBzY2hlZHVsZTogJHtjb25maWcuc2NoZWR1bGV9ICgke3RpbWV6b25lfSlgKTtcblxuXHRcdFx0XHRjb25zdCBqb2IgPSBuZXcgQ3JvbkpvYihcblx0XHRcdFx0XHRjb25maWcuc2NoZWR1bGUsXG5cdFx0XHRcdFx0YXN5bmMgKCkgPT4ge1xuXHRcdFx0XHRcdFx0YXdhaXQgdGhpcy5leGVjdXRlV29ya2Zsb3coam9iSWQsIHdvcmtmbG93LCBjb25maWcsIGZhbHNlKTtcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdG51bGwsIC8vIG9uQ29tcGxldGVcblx0XHRcdFx0XHRmYWxzZSwgLy8gc3RhcnRcblx0XHRcdFx0XHR0aW1lem9uZSxcblx0XHRcdFx0KTtcblxuXHRcdFx0XHRjb25zdCBzY2hlZHVsZWRKb2I6IFNjaGVkdWxlZEpvYiA9IHtcblx0XHRcdFx0XHRpZDogam9iSWQsXG5cdFx0XHRcdFx0d29ya2Zsb3dQYXRoOiB3b3JrZmxvdy5wYXRoLFxuXHRcdFx0XHRcdHNjaGVkdWxlOiBjb25maWcuc2NoZWR1bGUsXG5cdFx0XHRcdFx0dGltZXpvbmUsXG5cdFx0XHRcdFx0b3ZlcmxhcDogY29uZmlnLm92ZXJsYXAgPz8gZmFsc2UsXG5cdFx0XHRcdFx0cnVubmluZzogZmFsc2UsXG5cdFx0XHRcdFx0bmV4dFJ1bjogdGhpcy50b0RhdGUoam9iLm5leHREYXRlKCkpLFxuXHRcdFx0XHRcdGpvYixcblx0XHRcdFx0fTtcblxuXHRcdFx0XHR0aGlzLmpvYnMuc2V0KGpvYklkLCBzY2hlZHVsZWRKb2IpO1xuXG5cdFx0XHRcdC8vIFN0YXJ0IHRoZSBqb2Jcblx0XHRcdFx0am9iLnN0YXJ0KCk7XG5cdFx0XHRcdHRoaXMubG9nZ2VyLmxvZyhgSm9iICR7am9iSWR9IHN0YXJ0ZWQuIE5leHQgcnVuOiAke3NjaGVkdWxlZEpvYi5uZXh0UnVufWApO1xuXHRcdFx0fVxuXG5cdFx0XHR0aGlzLmxvZ2dlci5sb2coYENyb24gdHJpZ2dlciBzdGFydGVkLiAke3RoaXMuam9icy5zaXplfSBqb2Iocykgc2NoZWR1bGVkYCk7XG5cblx0XHRcdC8vIEVuYWJsZSBITVIgaW4gZGV2ZWxvcG1lbnQgbW9kZVxuXHRcdFx0aWYgKHByb2Nlc3MuZW52LkJMT0tfSE1SID09PSBcInRydWVcIiB8fCBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJkZXZlbG9wbWVudFwiKSB7XG5cdFx0XHRcdGF3YWl0IHRoaXMuZW5hYmxlSG90UmVsb2FkKCk7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiB0aGlzLmVuZENvdW50ZXIoc3RhcnRUaW1lKTtcblx0XHR9IGNhdGNoIChlcnJvcikge1xuXHRcdFx0dGhpcy5sb2dnZXIuZXJyb3IoYEZhaWxlZCB0byBzdGFydCBjcm9uIHRyaWdnZXI6ICR7KGVycm9yIGFzIEVycm9yKS5tZXNzYWdlfWApO1xuXHRcdFx0dGhyb3cgZXJyb3I7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFN0b3AgYWxsIGNyb24gam9ic1xuXHQgKi9cblx0LyoqXG5cdCAqIE9CUy0wMiBUNCDigJQgaW5zdGFsbCB0aGUgT3BlblRlbGVtZXRyeSBTREsgYXQgYm9vdCB3aGVuIGFuIE9UTFAgZW5kcG9pbnQgaXNcblx0ICogY29uZmlndXJlZCwgc28gdGhlIHNwYW5zIHRoZSBydW5uZXIgYWxyZWFkeSBjcmVhdGVzIGZvciBzY2hlZHVsZWQgcnVuc1xuXHQgKiBleHBvcnQgdG8gYSBiYWNrZW5kIChUZW1wby9KYWVnZXIv4oCmKS4gTm8tb3Agd2hlbiBgT1RFTF9FWFBPUlRFUl9PVExQX0VORFBPSU5UYFxuXHQgKiBpcyB1bnNldCBvciBgQkxPS19UUkFDSU5HX0RJU0FCTEVEPTFgLiBTdG9yZXMgdGhlIHNodXRkb3duIHNvIGBzdG9wKClgIGZsdXNoZXMuXG5cdCAqL1xuXHRwcml2YXRlIGFzeW5jIG1heWJlQm9vdHN0cmFwVHJhY2luZygpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRpZiAocHJvY2Vzcy5lbnYuQkxPS19UUkFDSU5HX0RJU0FCTEVEID09PSBcIjFcIikgcmV0dXJuO1xuXHRcdGNvbnN0IGJhc2UgPSBwcm9jZXNzLmVudi5PVEVMX0VYUE9SVEVSX09UTFBfVFJBQ0VTX0VORFBPSU5UIHx8IHByb2Nlc3MuZW52Lk9URUxfRVhQT1JURVJfT1RMUF9FTkRQT0lOVDtcblx0XHRpZiAoIWJhc2UpIHJldHVybjtcblx0XHRjb25zdCBlbmRwb2ludCA9IHByb2Nlc3MuZW52Lk9URUxfRVhQT1JURVJfT1RMUF9UUkFDRVNfRU5EUE9JTlQgPyBiYXNlIDogYCR7YmFzZS5yZXBsYWNlKC9cXC8kLywgXCJcIil9L3YxL3RyYWNlc2A7XG5cdFx0dHJ5IHtcblx0XHRcdGNvbnN0IHJlc3VsdCA9IGF3YWl0IGJvb3RzdHJhcFRyYWNpbmcoe1xuXHRcdFx0XHRzZXJ2aWNlTmFtZTogcHJvY2Vzcy5lbnYuQVBQX05BTUUgfHwgcHJvY2Vzcy5lbnYuUFJPSkVDVF9OQU1FIHx8IFwiYmxvay1jcm9uXCIsXG5cdFx0XHRcdHNlcnZpY2VWZXJzaW9uOiBwcm9jZXNzLmVudi5QUk9KRUNUX1ZFUlNJT04sXG5cdFx0XHRcdGV4cG9ydGVyOiBcIm90bHBcIixcblx0XHRcdFx0ZW5kcG9pbnQsXG5cdFx0XHR9KTtcblx0XHRcdGlmIChyZXN1bHQpIHtcblx0XHRcdFx0dGhpcy50cmFjaW5nU2h1dGRvd24gPSByZXN1bHQuc2h1dGRvd247XG5cdFx0XHRcdHRoaXMubG9nZ2VyLmxvZyhgW2Jsb2tdW3RyYWNpbmddIE9UTFAgZGlzdHJpYnV0ZWQgdHJhY2luZyBlbmFibGVkIOKGkiAke2VuZHBvaW50fWApO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dGhpcy5sb2dnZXIuZXJyb3IoXG5cdFx0XHRcdFx0XCJbYmxva11bdHJhY2luZ10gT1RFTF9FWFBPUlRFUl9PVExQX0VORFBPSU5UIGlzIHNldCBidXQgdGhlIE9UZWwgdHJhY2UgU0RLIGlzbid0IGluc3RhbGxlZCDigJQgdHJhY2luZyBpcyBPRkYuXCIsXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0fSBjYXRjaCAoZXJyKSB7XG5cdFx0XHR0aGlzLmxvZ2dlci5lcnJvcihgW2Jsb2tdW3RyYWNpbmddIGZhaWxlZCB0byBpbml0aWFsaXplOiAkeyhlcnIgYXMgRXJyb3IpLm1lc3NhZ2V9YCk7XG5cdFx0fVxuXHR9XG5cblx0YXN5bmMgc3RvcCgpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHQvLyBPQlMtMDIgVDQg4oCUIGZsdXNoIHBlbmRpbmcgc3BhbnMgYmVmb3JlIHRoZSBwcm9jZXNzIGV4aXRzLlxuXHRcdGlmICh0aGlzLnRyYWNpbmdTaHV0ZG93bikge1xuXHRcdFx0YXdhaXQgdGhpcy50cmFjaW5nU2h1dGRvd24oKS5jYXRjaCgoZXJyKSA9PlxuXHRcdFx0XHR0aGlzLmxvZ2dlci5lcnJvcihgW2Jsb2tdW3RyYWNpbmddIHNodXRkb3duIGZhaWxlZDogJHsoZXJyIGFzIEVycm9yKS5tZXNzYWdlfWApLFxuXHRcdFx0KTtcblx0XHRcdHRoaXMudHJhY2luZ1NodXRkb3duID0gbnVsbDtcblx0XHR9XG5cdFx0Zm9yIChjb25zdCBbam9iSWQsIHNjaGVkdWxlZEpvYl0gb2YgdGhpcy5qb2JzKSB7XG5cdFx0XHRzY2hlZHVsZWRKb2Iuam9iLnN0b3AoKTtcblx0XHRcdHRoaXMubG9nZ2VyLmxvZyhgSm9iICR7am9iSWR9IHN0b3BwZWRgKTtcblx0XHR9XG5cdFx0dGhpcy5qb2JzLmNsZWFyKCk7XG5cdFx0dGhpcy5sb2dnZXIubG9nKFwiQ3JvbiB0cmlnZ2VyIHN0b3BwZWRcIik7XG5cdH1cblxuXHRwcm90ZWN0ZWQgb3ZlcnJpZGUgYXN5bmMgb25IbXJXb3JrZmxvd0NoYW5nZSgpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHR0aGlzLmxvZ2dlci5sb2coXCJbSE1SXSBDcm9uIHdvcmtmbG93IGNoYW5nZWQsIHJlbG9hZGluZy4uLlwiKTtcblx0XHRhd2FpdCB0aGlzLndhaXRGb3JJbkZsaWdodFJlcXVlc3RzKCk7XG5cdFx0YXdhaXQgdGhpcy5zdG9wKCk7XG5cdFx0dGhpcy5sb2FkV29ya2Zsb3dzKCk7XG5cdFx0YXdhaXQgdGhpcy5saXN0ZW4oKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBNYW51YWxseSB0cmlnZ2VyIGEgc3BlY2lmaWMgam9iXG5cdCAqL1xuXHRhc3luYyB0cmlnZ2VySm9iKGpvYklkOiBzdHJpbmcpOiBQcm9taXNlPFRyaWdnZXJSZXNwb25zZSB8IG51bGw+IHtcblx0XHRjb25zdCBzY2hlZHVsZWRKb2IgPSB0aGlzLmpvYnMuZ2V0KGpvYklkKTtcblx0XHRpZiAoIXNjaGVkdWxlZEpvYikge1xuXHRcdFx0dGhpcy5sb2dnZXIuZXJyb3IoYEpvYiBub3QgZm91bmQ6ICR7am9iSWR9YCk7XG5cdFx0XHRyZXR1cm4gbnVsbDtcblx0XHR9XG5cblx0XHQvLyBHZXQgdGhlIHdvcmtmbG93XG5cdFx0Y29uc3Qgd29ya2Zsb3cgPSB0aGlzLmdldFdvcmtmbG93QnlQYXRoKHNjaGVkdWxlZEpvYi53b3JrZmxvd1BhdGgpO1xuXHRcdGlmICghd29ya2Zsb3cpIHtcblx0XHRcdHRoaXMubG9nZ2VyLmVycm9yKGBXb3JrZmxvdyBub3QgZm91bmQ6ICR7c2NoZWR1bGVkSm9iLndvcmtmbG93UGF0aH1gKTtcblx0XHRcdHJldHVybiBudWxsO1xuXHRcdH1cblxuXHRcdGNvbnN0IGNvbmZpZyA9IHdvcmtmbG93LmNvbmZpZy50cmlnZ2VyPy5jcm9uIGFzIENyb25UcmlnZ2VyT3B0cztcblx0XHRyZXR1cm4gdGhpcy5leGVjdXRlV29ya2Zsb3coam9iSWQsIHdvcmtmbG93LCBjb25maWcsIHRydWUpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldCBhbGwgc2NoZWR1bGVkIGpvYnNcblx0ICovXG5cdGdldEpvYnMoKTogU2NoZWR1bGVkSm9iW10ge1xuXHRcdHJldHVybiBBcnJheS5mcm9tKHRoaXMuam9icy52YWx1ZXMoKSkubWFwKChqb2IpID0+ICh7XG5cdFx0XHQuLi5qb2IsXG5cdFx0XHRuZXh0UnVuOiB0aGlzLnRvRGF0ZShqb2Iuam9iLm5leHREYXRlKCkpLFxuXHRcdH0pKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXQgYWxsIHdvcmtmbG93cyB0aGF0IGhhdmUgY3JvbiB0cmlnZ2Vyc1xuXHQgKi9cblx0cHJvdGVjdGVkIGdldENyb25Xb3JrZmxvd3MoKTogQ3JvbldvcmtmbG93TW9kZWxbXSB7XG5cdFx0Y29uc3Qgd29ya2Zsb3dzOiBDcm9uV29ya2Zsb3dNb2RlbFtdID0gW107XG5cblx0XHRmb3IgKGNvbnN0IFtwYXRoLCB3b3JrZmxvd10gb2YgT2JqZWN0LmVudHJpZXModGhpcy5ub2RlTWFwLndvcmtmbG93cyB8fCB7fSkpIHtcblx0XHRcdGNvbnN0IHdvcmtmbG93Q29uZmlnID0gKHdvcmtmbG93IGFzIHVua25vd24gYXMgeyBfY29uZmlnOiBDcm9uV29ya2Zsb3dNb2RlbFtcImNvbmZpZ1wiXSB9KS5fY29uZmlnO1xuXG5cdFx0XHRpZiAod29ya2Zsb3dDb25maWc/LnRyaWdnZXIpIHtcblx0XHRcdFx0Y29uc3QgdHJpZ2dlclR5cGUgPSBPYmplY3Qua2V5cyh3b3JrZmxvd0NvbmZpZy50cmlnZ2VyKVswXTtcblxuXHRcdFx0XHRpZiAodHJpZ2dlclR5cGUgPT09IFwiY3JvblwiICYmIHdvcmtmbG93Q29uZmlnLnRyaWdnZXIuY3Jvbikge1xuXHRcdFx0XHRcdHdvcmtmbG93cy5wdXNoKHtcblx0XHRcdFx0XHRcdHBhdGgsXG5cdFx0XHRcdFx0XHRjb25maWc6IHdvcmtmbG93Q29uZmlnLFxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHdvcmtmbG93cztcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXQgd29ya2Zsb3cgYnkgcGF0aFxuXHQgKi9cblx0cHJvdGVjdGVkIGdldFdvcmtmbG93QnlQYXRoKHBhdGg6IHN0cmluZyk6IENyb25Xb3JrZmxvd01vZGVsIHwgbnVsbCB7XG5cdFx0Y29uc3Qgd29ya2Zsb3cgPSB0aGlzLm5vZGVNYXAud29ya2Zsb3dzPy5bcGF0aF07XG5cdFx0aWYgKCF3b3JrZmxvdykgcmV0dXJuIG51bGw7XG5cblx0XHRjb25zdCB3b3JrZmxvd0NvbmZpZyA9ICh3b3JrZmxvdyBhcyB1bmtub3duIGFzIHsgX2NvbmZpZzogQ3JvbldvcmtmbG93TW9kZWxbXCJjb25maWdcIl0gfSkuX2NvbmZpZztcblx0XHRyZXR1cm4ge1xuXHRcdFx0cGF0aCxcblx0XHRcdGNvbmZpZzogd29ya2Zsb3dDb25maWcsXG5cdFx0fTtcblx0fVxuXG5cdC8qKlxuXHQgKiBFeGVjdXRlIGEgd29ya2Zsb3dcblx0ICovXG5cdHByb3RlY3RlZCBhc3luYyBleGVjdXRlV29ya2Zsb3coXG5cdFx0am9iSWQ6IHN0cmluZyxcblx0XHR3b3JrZmxvdzogQ3JvbldvcmtmbG93TW9kZWwsXG5cdFx0Y29uZmlnOiBDcm9uVHJpZ2dlck9wdHMsXG5cdFx0bWFudWFsOiBib29sZWFuLFxuXHQpOiBQcm9taXNlPFRyaWdnZXJSZXNwb25zZT4ge1xuXHRcdGNvbnN0IHNjaGVkdWxlZEpvYiA9IHRoaXMuam9icy5nZXQoam9iSWQpO1xuXHRcdGlmICghc2NoZWR1bGVkSm9iKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoYEpvYiBub3QgZm91bmQ6ICR7am9iSWR9YCk7XG5cdFx0fVxuXG5cdFx0Ly8gQ2hlY2sgZm9yIG92ZXJsYXBcblx0XHRpZiAoc2NoZWR1bGVkSm9iLnJ1bm5pbmcgJiYgIXNjaGVkdWxlZEpvYi5vdmVybGFwKSB7XG5cdFx0XHR0aGlzLmxvZ2dlci5sb2coYFNraXBwaW5nICR7am9iSWR9OiBwcmV2aW91cyBleGVjdXRpb24gc3RpbGwgcnVubmluZyAob3ZlcmxhcCBkaXNhYmxlZClgKTtcblx0XHRcdHJldHVybiB7IGN0eDoge30gYXMgQ29udGV4dCwgbWV0cmljczoge30gYXMgTWV0cmljc1R5cGUgfTtcblx0XHR9XG5cblx0XHRjb25zdCBleGVjdXRpb25JZCA9IHV1aWQoKTtcblx0XHRjb25zdCBsYXN0RGF0ZSA9IHNjaGVkdWxlZEpvYi5qb2IubGFzdERhdGUoKTtcblx0XHRjb25zdCBzY2hlZHVsZWRUaW1lID0gbGFzdERhdGUgPyBuZXcgRGF0ZShsYXN0RGF0ZSBhcyB1bmtub3duIGFzIHN0cmluZyB8IG51bWJlcikgOiBuZXcgRGF0ZSgpO1xuXHRcdGNvbnN0IGV4ZWN1dGlvblRpbWUgPSBuZXcgRGF0ZSgpO1xuXG5cdFx0Ly8gQXBwbHkgdGhlIHNjaGVtYSBkZWZhdWx0IOKAlCBzZWUgZXhwbGFuYXRpb24gaW4gYGxpc3RlbigpYC5cblx0XHRjb25zdCB0aW1lem9uZSA9IGNvbmZpZy50aW1lem9uZSA/PyBcIlVUQ1wiO1xuXG5cdFx0Y29uc3QgZGVmYXVsdE1ldGVyID0gbWV0cmljcy5nZXRNZXRlcihcImRlZmF1bHRcIik7XG5cdFx0Y29uc3QgY3JvbkV4ZWN1dGlvbnMgPSBkZWZhdWx0TWV0ZXIuY3JlYXRlQ291bnRlcihcImNyb25fZXhlY3V0aW9uc1wiLCB7XG5cdFx0XHRkZXNjcmlwdGlvbjogXCJDcm9uIGpvYiBleGVjdXRpb25zXCIsXG5cdFx0fSk7XG5cdFx0Y29uc3QgY3JvbkVycm9ycyA9IGRlZmF1bHRNZXRlci5jcmVhdGVDb3VudGVyKFwiY3Jvbl9lcnJvcnNcIiwge1xuXHRcdFx0ZGVzY3JpcHRpb246IFwiQ3JvbiBqb2IgZXhlY3V0aW9uIGVycm9yc1wiLFxuXHRcdH0pO1xuXG5cdFx0cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG5cdFx0XHR0aGlzLnRyYWNlci5zdGFydEFjdGl2ZVNwYW4oYGNyb246JHt3b3JrZmxvdy5wYXRofWAsIGFzeW5jIChzcGFuOiBTcGFuKSA9PiB7XG5cdFx0XHRcdHNjaGVkdWxlZEpvYi5ydW5uaW5nID0gdHJ1ZTtcblxuXHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdGNvbnN0IHN0YXJ0ID0gcGVyZm9ybWFuY2Uubm93KCk7XG5cblx0XHRcdFx0XHQvLyBJbml0aWFsaXplIGNvbmZpZ3VyYXRpb24gZm9yIHRoaXMgd29ya2Zsb3dcblx0XHRcdFx0XHRhd2FpdCB0aGlzLmNvbmZpZ3VyYXRpb24uaW5pdCh3b3JrZmxvdy5wYXRoLCB0aGlzLm5vZGVNYXApO1xuXG5cdFx0XHRcdFx0Ly8gQ3JlYXRlIGNvbnRleHRcblx0XHRcdFx0XHRjb25zdCBjdHg6IENvbnRleHQgPSB0aGlzLmNyZWF0ZUNvbnRleHQodW5kZWZpbmVkLCB3b3JrZmxvdy5wYXRoLCBleGVjdXRpb25JZCk7XG5cblx0XHRcdFx0XHQvLyBDcmVhdGUgZXhlY3V0aW9uIGNvbnRleHRcblx0XHRcdFx0XHRjb25zdCBjcm9uQ29udGV4dDogQ3JvbkV4ZWN1dGlvbkNvbnRleHQgPSB7XG5cdFx0XHRcdFx0XHRqb2JJZCxcblx0XHRcdFx0XHRcdHNjaGVkdWxlZFRpbWUsXG5cdFx0XHRcdFx0XHRleGVjdXRpb25UaW1lLFxuXHRcdFx0XHRcdFx0c2NoZWR1bGU6IGNvbmZpZy5zY2hlZHVsZSxcblx0XHRcdFx0XHRcdHRpbWV6b25lLFxuXHRcdFx0XHRcdFx0bWFudWFsLFxuXHRcdFx0XHRcdH07XG5cblx0XHRcdFx0XHQvLyBQb3B1bGF0ZSByZXF1ZXN0IHdpdGggY3JvbiBjb250ZXh0XG5cdFx0XHRcdFx0Y3R4LnJlcXVlc3QgPSB7XG5cdFx0XHRcdFx0XHRib2R5OiBjcm9uQ29udGV4dCxcblx0XHRcdFx0XHRcdGhlYWRlcnM6IHtcblx0XHRcdFx0XHRcdFx0XCJ4LWNyb24tam9iLWlkXCI6IGpvYklkLFxuXHRcdFx0XHRcdFx0XHRcIngtY3Jvbi1zY2hlZHVsZVwiOiBjb25maWcuc2NoZWR1bGUsXG5cdFx0XHRcdFx0XHRcdFwieC1jcm9uLXRpbWV6b25lXCI6IGNvbmZpZy50aW1lem9uZSxcblx0XHRcdFx0XHRcdFx0XCJ4LWNyb24tbWFudWFsXCI6IFN0cmluZyhtYW51YWwpLFxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdHF1ZXJ5OiB7fSxcblx0XHRcdFx0XHRcdHBhcmFtczoge1xuXHRcdFx0XHRcdFx0XHRqb2JJZCxcblx0XHRcdFx0XHRcdFx0c2NoZWR1bGU6IGNvbmZpZy5zY2hlZHVsZSxcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0fSBhcyB1bmtub3duIGFzIFJlcXVlc3RDb250ZXh0O1xuXG5cdFx0XHRcdFx0Ly8gU3RvcmUgY3JvbiBjb250ZXh0IGluIHZhcnNcblx0XHRcdFx0XHRpZiAoIWN0eC52YXJzKSBjdHgudmFycyA9IHt9O1xuXHRcdFx0XHRcdGN0eC52YXJzLl9jcm9uX2NvbnRleHQgPSB7XG5cdFx0XHRcdFx0XHRqb2JJZCxcblx0XHRcdFx0XHRcdHNjaGVkdWxlZFRpbWU6IHNjaGVkdWxlZFRpbWUudG9JU09TdHJpbmcoKSxcblx0XHRcdFx0XHRcdGV4ZWN1dGlvblRpbWU6IGV4ZWN1dGlvblRpbWUudG9JU09TdHJpbmcoKSxcblx0XHRcdFx0XHRcdHNjaGVkdWxlOiBjb25maWcuc2NoZWR1bGUsXG5cdFx0XHRcdFx0XHR0aW1lem9uZTogY29uZmlnLnRpbWV6b25lLFxuXHRcdFx0XHRcdFx0bWFudWFsOiBTdHJpbmcobWFudWFsKSxcblx0XHRcdFx0XHR9O1xuXG5cdFx0XHRcdFx0Y3R4LmxvZ2dlci5sb2coYEV4ZWN1dGluZyBjcm9uIGpvYjogJHtqb2JJZH0gKCR7bWFudWFsID8gXCJtYW51YWxcIiA6IFwic2NoZWR1bGVkXCJ9KWApO1xuXG5cdFx0XHRcdFx0Ly8gdjAuNiDCtyBhcHBseSB0aGUgbWVyZ2VkIG1pZGRsZXdhcmUgY2hhaW4gKHByb2Nlc3MtZ2xvYmFsIOKGklxuXHRcdFx0XHRcdC8vIHdvcmtmbG93LWxldmVsIOKGkiB0cmlnZ2VyLWxldmVsKSBiZWZvcmUgdGhlIG1haW4gd29ya2Zsb3dcblx0XHRcdFx0XHQvLyBib2R5LiBMZXRzIGNyb24gd29ya2Zsb3dzIGNvbXBvc2UgYXV0aC1jaGVjayArIGF1ZGl0LWxvZ1xuXHRcdFx0XHRcdC8vIGNoYWlucyBleGFjdGx5IGxpa2UgSFRUUCB0cmlnZ2Vycy4gQSB0aHJvd2luZyBtaWRkbGV3YXJlXG5cdFx0XHRcdFx0Ly8gcHJvcGFnYXRlcyB0byB0aGUgb3V0ZXIgY2F0Y2ggYW5kIHN1cmZhY2VzIGFzIGEgY3JvbiBqb2Jcblx0XHRcdFx0XHQvLyBmYWlsdXJlLlxuXHRcdFx0XHRcdGF3YWl0IHRoaXMuYXBwbHlNaWRkbGV3YXJlQ2hhaW4oY3R4LCB0aGlzLm5vZGVNYXApO1xuXG5cdFx0XHRcdFx0Ly8gRXhlY3V0ZSB3b3JrZmxvd1xuXHRcdFx0XHRcdGNvbnN0IHJlc3BvbnNlOiBUcmlnZ2VyUmVzcG9uc2UgPSBhd2FpdCB0aGlzLnJ1bihjdHgpO1xuXHRcdFx0XHRcdGNvbnN0IGVuZCA9IHBlcmZvcm1hbmNlLm5vdygpO1xuXG5cdFx0XHRcdFx0Ly8gVXBkYXRlIGpvYiBzdGF0ZVxuXHRcdFx0XHRcdHNjaGVkdWxlZEpvYi5sYXN0UnVuID0gZXhlY3V0aW9uVGltZTtcblx0XHRcdFx0XHRzY2hlZHVsZWRKb2IubmV4dFJ1biA9IHRoaXMudG9EYXRlKHNjaGVkdWxlZEpvYi5qb2IubmV4dERhdGUoKSk7XG5cblx0XHRcdFx0XHQvLyBTZXQgc3BhbiBhdHRyaWJ1dGVzXG5cdFx0XHRcdFx0c3Bhbi5zZXRBdHRyaWJ1dGUoXCJzdWNjZXNzXCIsIHRydWUpO1xuXHRcdFx0XHRcdHNwYW4uc2V0QXR0cmlidXRlKFwiam9iX2lkXCIsIGpvYklkKTtcblx0XHRcdFx0XHRzcGFuLnNldEF0dHJpYnV0ZShcIndvcmtmbG93X3BhdGhcIiwgd29ya2Zsb3cucGF0aCk7XG5cdFx0XHRcdFx0c3Bhbi5zZXRBdHRyaWJ1dGUoXCJzY2hlZHVsZVwiLCBjb25maWcuc2NoZWR1bGUpO1xuXHRcdFx0XHRcdHNwYW4uc2V0QXR0cmlidXRlKFwidGltZXpvbmVcIiwgdGltZXpvbmUpO1xuXHRcdFx0XHRcdHNwYW4uc2V0QXR0cmlidXRlKFwibWFudWFsXCIsIG1hbnVhbCk7XG5cdFx0XHRcdFx0c3Bhbi5zZXRBdHRyaWJ1dGUoXCJlbGFwc2VkX21zXCIsIGVuZCAtIHN0YXJ0KTtcblx0XHRcdFx0XHRzcGFuLnNldFN0YXR1cyh7IGNvZGU6IFNwYW5TdGF0dXNDb2RlLk9LIH0pO1xuXG5cdFx0XHRcdFx0Ly8gUmVjb3JkIG1ldHJpY3Ncblx0XHRcdFx0XHRjcm9uRXhlY3V0aW9ucy5hZGQoMSwge1xuXHRcdFx0XHRcdFx0ZW52OiBwcm9jZXNzLmVudi5OT0RFX0VOVixcblx0XHRcdFx0XHRcdGpvYl9pZDogam9iSWQsXG5cdFx0XHRcdFx0XHR3b3JrZmxvd19uYW1lOiB0aGlzLmNvbmZpZ3VyYXRpb24ubmFtZSxcblx0XHRcdFx0XHRcdG1hbnVhbDogU3RyaW5nKG1hbnVhbCksXG5cdFx0XHRcdFx0XHRzdWNjZXNzOiBcInRydWVcIixcblx0XHRcdFx0XHR9KTtcblxuXHRcdFx0XHRcdGN0eC5sb2dnZXIubG9nKGBDcm9uIGpvYiBjb21wbGV0ZWQgaW4gJHsoZW5kIC0gc3RhcnQpLnRvRml4ZWQoMil9bXM6ICR7am9iSWR9YCk7XG5cblx0XHRcdFx0XHRyZXNvbHZlKHJlc3BvbnNlKTtcblx0XHRcdFx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRcdFx0XHQvLyBGNSDCtyBhIGNyb24gd29ya2Zsb3cgd2l0aCBhIGB3YWl0YCBzdGVwIChvciBhIHNjaGVkdWxpbmdcblx0XHRcdFx0XHQvLyBnYXRlKSB0aHJvd3MgRGVmZXJyZWREaXNwYXRjaFNpZ25hbCAvIFdhaXREaXNwYXRjaFJlcXVlc3Rcblx0XHRcdFx0XHQvLyB0byBkZWZlciB0aGUgcnVuIOKAlCB0aGF0J3MgYSBzdWNjZXNzZnVsIGRlZmVycmFsLCBOT1QgYVxuXHRcdFx0XHRcdC8vIGZhaWx1cmUuIFRyaWdnZXJCYXNlLnJ1biBhbHJlYWR5IG1hcmtlZCB0aGUgcnVuXG5cdFx0XHRcdFx0Ly8gZGVsYXllZC9xdWV1ZWQvZGVib3VuY2VkIGFuZCAoZm9yIEhUVFApIHBlcnNpc3RlZCB0aGVcblx0XHRcdFx0XHQvLyBkaXNwYXRjaC4gQ3JvbidzIGluLXByb2Nlc3Mgc2NoZWR1bGVyIG93bnMgdGhlIGV2ZW50dWFsXG5cdFx0XHRcdFx0Ly8gcmUtZmlyZSwgc28gd2UganVzdCByZWNvcmQgc3VjY2VzcyBhbmQgZG9uJ3QgYnVtcFxuXHRcdFx0XHRcdC8vIGBjcm9uX2Vycm9yc2AuXG5cdFx0XHRcdFx0aWYgKGVycm9yIGluc3RhbmNlb2YgRGVmZXJyZWREaXNwYXRjaFNpZ25hbCB8fCBlcnJvciBpbnN0YW5jZW9mIFdhaXREaXNwYXRjaFJlcXVlc3QpIHtcblx0XHRcdFx0XHRcdHNwYW4uc2V0QXR0cmlidXRlKFwic3VjY2Vzc1wiLCB0cnVlKTtcblx0XHRcdFx0XHRcdHNwYW4uc2V0QXR0cmlidXRlKFwiZGVmZXJyZWRcIiwgdHJ1ZSk7XG5cdFx0XHRcdFx0XHRzcGFuLnNldFN0YXR1cyh7IGNvZGU6IFNwYW5TdGF0dXNDb2RlLk9LIH0pO1xuXG5cdFx0XHRcdFx0XHRjcm9uRXhlY3V0aW9ucy5hZGQoMSwge1xuXHRcdFx0XHRcdFx0XHRlbnY6IHByb2Nlc3MuZW52Lk5PREVfRU5WLFxuXHRcdFx0XHRcdFx0XHRqb2JfaWQ6IGpvYklkLFxuXHRcdFx0XHRcdFx0XHR3b3JrZmxvd19uYW1lOiB0aGlzLmNvbmZpZ3VyYXRpb24ubmFtZSxcblx0XHRcdFx0XHRcdFx0bWFudWFsOiBTdHJpbmcobWFudWFsKSxcblx0XHRcdFx0XHRcdFx0c3VjY2VzczogXCJ0cnVlXCIsXG5cdFx0XHRcdFx0XHR9KTtcblxuXHRcdFx0XHRcdFx0dGhpcy5sb2dnZXIubG9nKGBDcm9uIGpvYiBkZWZlcnJlZCAke2pvYklkfTogJHsoZXJyb3IgYXMgRXJyb3IpLm1lc3NhZ2V9YCk7XG5cdFx0XHRcdFx0XHRyZXNvbHZlKHsgY3R4OiB7fSBhcyBDb250ZXh0LCBtZXRyaWNzOiB7fSBhcyBNZXRyaWNzVHlwZSB9KTtcblx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRjb25zdCBlcnJvck1lc3NhZ2UgPSAoZXJyb3IgYXMgRXJyb3IpLm1lc3NhZ2U7XG5cblx0XHRcdFx0XHQvLyBTZXQgc3BhbiBlcnJvclxuXHRcdFx0XHRcdHNwYW4uc2V0QXR0cmlidXRlKFwic3VjY2Vzc1wiLCBmYWxzZSk7XG5cdFx0XHRcdFx0c3Bhbi5yZWNvcmRFeGNlcHRpb24oZXJyb3IgYXMgRXJyb3IpO1xuXHRcdFx0XHRcdHNwYW4uc2V0U3RhdHVzKHsgY29kZTogU3BhblN0YXR1c0NvZGUuRVJST1IsIG1lc3NhZ2U6IGVycm9yTWVzc2FnZSB9KTtcblxuXHRcdFx0XHRcdC8vIFJlY29yZCBlcnJvciBtZXRyaWNzXG5cdFx0XHRcdFx0Y3JvbkVycm9ycy5hZGQoMSwge1xuXHRcdFx0XHRcdFx0ZW52OiBwcm9jZXNzLmVudi5OT0RFX0VOVixcblx0XHRcdFx0XHRcdGpvYl9pZDogam9iSWQsXG5cdFx0XHRcdFx0XHR3b3JrZmxvd19uYW1lOiB0aGlzLmNvbmZpZ3VyYXRpb24/Lm5hbWUgfHwgXCJ1bmtub3duXCIsXG5cdFx0XHRcdFx0XHRtYW51YWw6IFN0cmluZyhtYW51YWwpLFxuXHRcdFx0XHRcdH0pO1xuXG5cdFx0XHRcdFx0dGhpcy5sb2dnZXIuZXJyb3IoYENyb24gam9iIGZhaWxlZCAke2pvYklkfTogJHtlcnJvck1lc3NhZ2V9YCwgKGVycm9yIGFzIEVycm9yKS5zdGFjayk7XG5cblx0XHRcdFx0XHRyZXNvbHZlKHsgY3R4OiB7fSBhcyBDb250ZXh0LCBtZXRyaWNzOiB7fSBhcyBNZXRyaWNzVHlwZSB9KTtcblx0XHRcdFx0fSBmaW5hbGx5IHtcblx0XHRcdFx0XHRzY2hlZHVsZWRKb2IucnVubmluZyA9IGZhbHNlO1xuXHRcdFx0XHRcdHNwYW4uZW5kKCk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH0pO1xuXHR9XG59XG5cbmV4cG9ydCBkZWZhdWx0IENyb25UcmlnZ2VyO1xuIl19
405
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ3JvblRyaWdnZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvQ3JvblRyaWdnZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7R0FVRztBQUdILE9BQU8sRUFFTixhQUFhLEVBQ2Isc0JBQXNCLEVBRXRCLE9BQU8sRUFDUCxXQUFXLEVBRVgsbUJBQW1CLEVBQ25CLGdCQUFnQixHQUNoQixNQUFNLGdCQUFnQixDQUFDO0FBR3hCLE9BQU8sRUFBYSxjQUFjLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQy9FLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0IsT0FBTyxFQUFFLEVBQUUsSUFBSSxJQUFJLEVBQUUsTUFBTSxNQUFNLENBQUM7QUE0RGxDOztHQUVHO0FBQ0gsTUFBTSxPQUFnQixXQUFZLFNBQVEsV0FBVztJQUMxQyxPQUFPLEdBQWtCLEVBQW1CLENBQUM7SUFDcEMsTUFBTSxHQUFHLEtBQUssQ0FBQyxTQUFTLENBQzFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsWUFBWSxJQUFJLHVCQUF1QixFQUNuRCxPQUFPLENBQUMsR0FBRyxDQUFDLGVBQWUsSUFBSSxPQUFPLENBQ3RDLENBQUM7SUFDaUIsTUFBTSxHQUFHLElBQUksYUFBYSxFQUFFLENBQUM7SUFDdEMsSUFBSSxHQUE4QixJQUFJLEdBQUcsRUFBRSxDQUFDO0lBQ3RELDBGQUEwRjtJQUNsRixlQUFlLEdBQWlDLElBQUksQ0FBQztJQU03RCx3RUFBd0U7SUFDeEUsMkVBQTJFO0lBQzNFLDRFQUE0RTtJQUM1RSw0RUFBNEU7SUFDNUUsZ0RBQWdEO0lBQ2hELHFGQUFxRjtJQUNyRixzRUFBc0U7SUFDdEUscUNBQXFDO0lBRXJDOztPQUVHO0lBQ0gsU0FBUztRQUNSLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxHQUFHLElBQUksT0FBTyxFQUFFLENBQUM7UUFDbkMsMEVBQTBFO1FBQzFFLGdG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QUFHLENBQUMsQ0FBQyxFQUFFO3dCQUNqQixHQUFHLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxRQUFRO3dCQUN6QixNQUFNLEVBQUUsS0FBSzt3QkFDYixhQUFhLEVBQUUsSUFBSSxDQUFDLGFBQWEsRUFBRSxJQUFJLElBQUksU0FBUzt3QkFDcEQsTUFBTSxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUM7cUJBQ3RCLENBQUMsQ0FBQztvQkFFSCxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxtQkFBbUIsS0FBSyxLQUFLLFlBQVksRUFBRSxFQUFHLEtBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQztvQkFFdkYsT0FBTyxDQUFDLEVBQUUsR0FBRyxFQUFFLEVBQWEsRUFBRSxPQUFPLEVBQUUsRUFBaUIsRUFBRSxDQUFDLENBQUM7Z0JBQzdELENBQUM7d0JBQVMsQ0FBQztvQkFDVixZQUFZLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztvQkFDN0IsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO2dCQUNaLENBQUM7WUFDRixDQUFDLENBQUMsQ0FBQztRQUNKLENBQUMsQ0FBQyxDQUFDO0lBQ0osQ0FBQztDQUNEO0FBRUQsZUFBZSxXQUFXLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENyb25UcmlnZ2VyIC0gU2NoZWR1bGVkIHdvcmtmbG93IGV4ZWN1dGlvbiBiYXNlZCBvbiBjcm9uIGV4cHJlc3Npb25zXG4gKlxuICogRXh0ZW5kcyBUcmlnZ2VyQmFzZSB0byBzdXBwb3J0IHNjaGVkdWxlZCB0cmlnZ2VyczpcbiAqIC0gQ3JvbiBleHByZXNzaW9ucyAoZS5nLiwgXCIwICogKiAqICpcIiBmb3IgaG91cmx5KVxuICogLSBUaW1lem9uZS1hd2FyZSBzY2hlZHVsaW5nXG4gKiAtIE92ZXJsYXAgcHJldmVudGlvblxuICogLSBNYW51YWwgdHJpZ2dlciBzdXBwb3J0XG4gKlxuICogVXNlcyB0aGUgJ2Nyb24nIHBhY2thZ2UgZm9yIGNyb24gcGFyc2luZyBhbmQgc2NoZWR1bGluZy5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IENyb25UcmlnZ2VyT3B0cywgV29ya2Zsb3dWMkJ1aWxkZXIgfSBmcm9tIFwiQGJsb2tqcy9oZWxwZXJcIjtcbmltcG9ydCB7XG5cdHR5cGUgQmxva1NlcnZpY2UsXG5cdERlZmF1bHRMb2dnZXIsXG5cdERlZmVycmVkRGlzcGF0Y2hTaWduYWwsXG5cdHR5cGUgR2xvYmFsT3B0aW9ucyxcblx0Tm9kZU1hcCxcblx0VHJpZ2dlckJhc2UsXG5cdHR5cGUgVHJpZ2dlclJlc3BvbnNlLFxuXHRXYWl0RGlzcGF0Y2hSZXF1ZXN0LFxuXHRib290c3RyYXBUcmFjaW5nLFxufSBmcm9tIFwiQGJsb2tqcy9ydW5uZXJcIjtcbmltcG9ydCB0eXBlIHsgTm9kZUJhc2UgfSBmcm9tIFwiQGJsb2tqcy9zaGFyZWRcIjtcbmltcG9ydCB0eXBlIHsgQ29udGV4dCwgTWV0cmljc1R5cGUsIFJlcXVlc3RDb250ZXh0IH0gZnJvbSBcIkBibG9ranMvc2hhcmVkXCI7XG5pbXBvcnQgeyB0eXBlIFNwYW4sIFNwYW5TdGF0dXNDb2RlLCBtZXRyaWNzLCB0cmFjZSB9IGZyb20gXCJAb3BlbnRlbGVtZXRyeS9hcGlcIjtcbmltcG9ydCB7IENyb25Kb2IgfSBmcm9tIFwiY3JvblwiO1xuaW1wb3J0IHsgdjQgYXMgdXVpZCB9IGZyb20gXCJ1dWlkXCI7XG5cbi8qKlxuICogU2NoZWR1bGVkIGpvYiBpbmZvcm1hdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNjaGVkdWxlZEpvYiB7XG5cdC8qKiBVbmlxdWUgam9iIElEICovXG5cdGlkOiBzdHJpbmc7XG5cdC8qKiBXb3JrZmxvdyBwYXRoICovXG5cdHdvcmtmbG93UGF0aDogc3RyaW5nO1xuXHQvKiogQ3JvbiBleHByZXNzaW9uICovXG5cdHNjaGVkdWxlOiBzdHJpbmc7XG5cdC8qKiBUaW1lem9uZSAqL1xuXHR0aW1lem9uZTogc3RyaW5nO1xuXHQvKiogQWxsb3cgb3ZlcmxhcHBpbmcgZXhlY3V0aW9ucyAqL1xuXHRvdmVybGFwOiBib29sZWFuO1xuXHQvKiogV2hldGhlciB0aGUgam9iIGlzIGN1cnJlbnRseSBydW5uaW5nICovXG5cdHJ1bm5pbmc6IGJvb2xlYW47XG5cdC8qKiBMYXN0IGV4ZWN1dGlvbiB0aW1lICovXG5cdGxhc3RSdW4/OiBEYXRlO1xuXHQvKiogTmV4dCBzY2hlZHVsZWQgdGltZSAqL1xuXHRuZXh0UnVuPzogRGF0ZTtcblx0LyoqIEludGVybmFsIENyb25Kb2IgaW5zdGFuY2UgKi9cblx0am9iOiBDcm9uSm9iO1xufVxuXG4vKipcbiAqIEV4ZWN1dGlvbiBjb250ZXh0IHBhc3NlZCB0byB0aGUgd29ya2Zsb3dcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDcm9uRXhlY3V0aW9uQ29udGV4dCB7XG5cdC8qKiBKb2IgSUQgKi9cblx0am9iSWQ6IHN0cmluZztcblx0LyoqIFNjaGVkdWxlZCB0aW1lICh3aGVuIGl0IHdhcyBzdXBwb3NlZCB0byBydW4pICovXG5cdHNjaGVkdWxlZFRpbWU6IERhdGU7XG5cdC8qKiBBY3R1YWwgZXhlY3V0aW9uIHRpbWUgKi9cblx0ZXhlY3V0aW9uVGltZTogRGF0ZTtcblx0LyoqIENyb24gZXhwcmVzc2lvbiAqL1xuXHRzY2hlZHVsZTogc3RyaW5nO1xuXHQvKiogVGltZXpvbmUgKi9cblx0dGltZXpvbmU6IHN0cmluZztcblx0LyoqIFdoZXRoZXIgdGhpcyBpcyBhIG1hbnVhbCB0cmlnZ2VyICovXG5cdG1hbnVhbDogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBXb3JrZmxvdyBtb2RlbCB3aXRoIGNyb24gdHJpZ2dlciBjb25maWd1cmF0aW9uXG4gKi9cbmludGVyZmFjZSBDcm9uV29ya2Zsb3dNb2RlbCB7XG5cdHBhdGg6IHN0cmluZztcblx0Y29uZmlnOiB7XG5cdFx0bmFtZTogc3RyaW5nO1xuXHRcdHZlcnNpb246IHN0cmluZztcblx0XHR0cmlnZ2VyPzoge1xuXHRcdFx0Y3Jvbj86IENyb25UcmlnZ2VyT3B0cztcblx0XHRcdFtrZXk6IHN0cmluZ106IHVua25vd247XG5cdFx0fTtcblx0XHRba2V5OiBzdHJpbmddOiB1bmtub3duO1xuXHR9O1xufVxuXG4vKipcbiAqIENyb25UcmlnZ2VyIC0gU2NoZWR1bGVkIHdvcmtmbG93IGV4ZWN1dGlvblxuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQ3JvblRyaWdnZXIgZXh0ZW5kcyBUcmlnZ2VyQmFzZSB7XG5cdHByb3RlY3RlZCBub2RlTWFwOiBHbG9iYWxPcHRpb25zID0ge30gYXMgR2xvYmFsT3B0aW9ucztcblx0cHJvdGVjdGVkIHJlYWRvbmx5IHRyYWNlciA9IHRyYWNlLmdldFRyYWNlcihcblx0XHRwcm9jZXNzLmVudi5QUk9KRUNUX05BTUUgfHwgXCJ0cmlnZ2VyLWNyb24td29ya2Zsb3dcIixcblx0XHRwcm9jZXNzLmVudi5QUk9KRUNUX1ZFUlNJT04gfHwgXCIwLjAuMVwiLFxuXHQpO1xuXHRwcm90ZWN0ZWQgcmVhZG9ubHkgbG9nZ2VyID0gbmV3IERlZmF1bHRMb2dnZXIoKTtcblx0cHJvdGVjdGVkIGpvYnM6IE1hcDxzdHJpbmcsIFNjaGVkdWxlZEpvYj4gPSBuZXcgTWFwKCk7XG5cdC8qKiBPQlMtMDIgVDQg4oCUIGdyYWNlZnVsIHNodXRkb3duIGZvciB0aGUgT1RlbCB0cmFjZXIgcHJvdmlkZXIsIGlmIHRyYWNpbmcgd2FzIGVuYWJsZWQuICovXG5cdHByaXZhdGUgdHJhY2luZ1NodXRkb3duOiAoKCkgPT4gUHJvbWlzZTx2b2lkPikgfCBudWxsID0gbnVsbDtcblxuXHQvLyBTdWJjbGFzc2VzIHByb3ZpZGUgdGhlc2Vcblx0cHJvdGVjdGVkIGFic3RyYWN0IG5vZGVzOiBSZWNvcmQ8c3RyaW5nLCBCbG9rU2VydmljZTx1bmtub3duPj47XG5cdHByb3RlY3RlZCBhYnN0cmFjdCB3b3JrZmxvd3M6IFJlY29yZDxzdHJpbmcsIFdvcmtmbG93VjJCdWlsZGVyPjtcblxuXHQvLyBDb25zdHJ1Y3RvciByZW1vdmVkIChtaXJyb3JzIFdvcmtlclRyaWdnZXIncyB2MC42LjMgZml4KSDigJQgcHJlLWZpeCBpdFxuXHQvLyBjYWxsZWQgYGxvYWROb2RlcygpYCArIGBsb2FkV29ya2Zsb3dzKClgLCBidXQgc3ViY2xhc3NlcyB1c2UgY2xhc3MtZmllbGRcblx0Ly8gYXNzaWdubWVudHMgZm9yIGBub2Rlc2AgLyBgd29ya2Zsb3dzYCAodGhlIGNhbm9uaWNhbCBUeXBlU2NyaXB0IHBhdHRlcm4pLlxuXHQvLyBUaG9zZSBmaWVsZHMgcnVuIEFGVEVSIHN1cGVyKCksIHNvIGFjY2Vzc2luZyBgdGhpcy5ub2Rlc2AgZnJvbSB0aGUgcGFyZW50XG5cdC8vIGNvbnN0cnVjdG9yIHJlYWQgYHVuZGVmaW5lZGAgYW5kIGNyYXNoZWQgd2l0aFxuXHQvLyBgVHlwZUVycm9yOiBDYW5ub3QgY29udmVydCB1bmRlZmluZWQgb3IgbnVsbCB0byBvYmplY3RgIChPYmplY3Qua2V5cyh0aGlzLm5vZGVzKSkuXG5cdC8vIFRoZSByZWdpc3RyeSBpbml0IG5vdyBoYXBwZW5zIGF0IHRoZSBzdGFydCBvZiBgbGlzdGVuKClgLCBhZnRlciB0aGVcblx0Ly8gc3ViY2xhc3MncyBmaWVsZHMgYXJlIGluaXRpYWxpemVkLlxuXG5cdC8qKlxuXHQgKiBMb2FkIG5vZGVzIGludG8gdGhlIG5vZGUgbWFwXG5cdCAqL1xuXHRsb2FkTm9kZXMoKTogdm9pZCB7XG5cdFx0dGhpcy5ub2RlTWFwLm5vZGVzID0gbmV3IE5vZGVNYXAoKTtcblx0XHQvLyBSZWdpc3RlciBlYWNoIG5vZGUgdW5kZXIgaXRzIG93biBub2RlLm5hbWUgKHRoZSBjYW5vbmljYWwgdXNlOiByZWYsIEFEUlxuXHRcdC8vIDAwMDIpIOKAlCB0aGUgTm9kZXMudHMgbWFwIGtleXMgYXJlIGNvc21ldGljOyB0aGUgY29sbGlzaW9uIGd1YXJkIGNhdGNoZXMgZHVwcy5cblx0XHR0aGlzLm5vZGVNYXAubm9kZXMuYWRkTm9kZXMoT2JqZWN0LnZhbHVlcyh0aGlzLm5vZGVzKSBhcyB1bmtub3duIGFzIE5vZGVCYXNlW10pO1xuXHR9XG5cblx0LyoqXG5cdCAqIExvYWQgd29ya2Zsb3dzIGludG8gdGhlIHdvcmtmbG93IG1hcFxuXHQgKi9cblx0bG9hZFdvcmtmbG93cygpOiB2b2lkIHtcblx0XHR0aGlzLm5vZGVNYXAud29ya2Zsb3dzID0gdGhpcy53b3JrZmxvd3M7XG5cdH1cblxuXHQvKipcblx0ICogQ29udmVydCBjcm9uIERhdGVUaW1lIHRvIERhdGVcblx0ICogVGhlIGNyb24gcGFja2FnZSB1c2VzIGx1eG9uIERhdGVUaW1lIHdoaWNoIGhhcyB0b0pTRGF0ZSgpXG5cdCAqL1xuXHRwcm90ZWN0ZWQgdG9EYXRlKGRhdGVUaW1lOiB1bmtub3duKTogRGF0ZSB7XG5cdFx0aWYgKGRhdGVUaW1lICYmIHR5cGVvZiBkYXRlVGltZSA9PT0gXCJvYmplY3RcIiAmJiBcInRvSlNEYXRlXCIgaW4gZGF0ZVRpbWUpIHtcblx0XHRcdHJldHVybiAoZGF0ZVRpbWUgYXMgeyB0b0pTRGF0ZTogKCkgPT4gRGF0ZSB9KS50b0pTRGF0ZSgpO1xuXHRcdH1cblx0XHRyZXR1cm4gZGF0ZVRpbWUgaW5zdGFuY2VvZiBEYXRlID8gZGF0ZVRpbWUgOiBuZXcgRGF0ZShkYXRlVGltZSBhcyBzdHJpbmcgfCBudW1iZXIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFN0YXJ0IHRoZSBjcm9uIHNjaGVkdWxlciAtIG1haW4gZW50cnkgcG9pbnRcblx0ICovXG5cdGFzeW5jIGxpc3RlbigpOiBQcm9taXNlPG51bWJlcj4ge1xuXHRcdGNvbnN0IHN0YXJ0VGltZSA9IHRoaXMuc3RhcnRDb3VudGVyKCk7XG5cblx0XHR0cnkge1xuXHRcdFx0Ly8gT0JTLTAyIFQ0IOKAlCBvcHQtaW4gZGlzdHJpYnV0ZWQgdHJhY2luZyBmb3Igc2NoZWR1bGVkIGV4ZWN1dGlvbnMuXG5cdFx0XHQvLyBXaGVuIE9URUxfRVhQT1JURVJfT1RMUF9FTkRQT0lOVCBpcyBzZXQsIGluc3RhbGwgYW4gT1RlbCBTREsgc28gdGhlXG5cdFx0XHQvLyBzcGFucyB0aGUgcnVubmVyIGNyZWF0ZXMgcGVyIGNyb24gcnVuL3N0ZXAgZXhwb3J0IHRvIGEgYmFja2VuZC5cblx0XHRcdC8vIE1pcnJvcnMgSHR0cFRyaWdnZXIncyBCMSB3aXJpbmc7IG5vLW9wIHdoZW4gdGhlIGVudiB2YXIgaXMgdW5zZXQuXG5cdFx0XHRhd2FpdCB0aGlzLm1heWJlQm9vdHN0cmFwVHJhY2luZygpO1xuXG5cdFx0XHQvLyBQb3B1bGF0ZSB0aGUgdHJpZ2dlcidzIG5vZGUgKyB3b3JrZmxvdyByZWdpc3RyaWVzIGZyb20gdGhlXG5cdFx0XHQvLyBzdWJjbGFzcydzIGBub2Rlc2AgLyBgd29ya2Zsb3dzYCBmaWVsZHMuIE1pcnJvcnMgV29ya2VyVHJpZ2dlcidzXG5cdFx0XHQvLyB2MC42LjMgZml4IOKAlCBwcmUtZml4IHRoZXNlIGNhbGxzIGxpdmVkIGluIHRoZSBjb25zdHJ1Y3RvciBhbmRcblx0XHRcdC8vIGNyYXNoZWQgYmVjYXVzZSBjbGFzcyBmaWVsZHMgaGF2ZW4ndCBydW4geWV0IGF0IHN1cGVyLWNvbnN0cnVjdG9yXG5cdFx0XHQvLyB0aW1lLiBNdXN0IHJ1biBiZWZvcmUgYHJlZ2lzdGVyV29ya2Zsb3dzRnJvbU5vZGVNYXBgLFxuXHRcdFx0Ly8gd2hpY2ggcmVhZHMgYHRoaXMubm9kZU1hcC53b3JrZmxvd3NgLlxuXHRcdFx0dGhpcy5sb2FkTm9kZXMoKTtcblx0XHRcdHRoaXMubG9hZFdvcmtmbG93cygpO1xuXG5cdFx0XHQvLyBGNSDCtyBpbnN0YWxsIGNyYXNoL29ycGhhbi9qYW5pdG9yL3NodXRkb3duIGhhbmRsZXJzIHNvIGFcblx0XHRcdC8vIGNyb24tb25seSBwcm9jZXNzIGdldHMgdGhlIHNhbWUgcnVuLXN0YXRlIGludGVncml0eSArIHN0b3JhZ2Vcblx0XHRcdC8vIGh5Z2llbmUgZ3VhcmFudGVlcyBhcyBIVFRQL1dvcmtlci4gRWFjaCBoYW5kbGVyIGlzIGlkZW1wb3RlbnRcblx0XHRcdC8vICsgaW5kaXZpZHVhbGx5IGtpbGwtc3dpdGNoZWQuXG5cdFx0XHR0aGlzLmluc3RhbGxPcGVyYXRpb25hbEhhbmRsZXJzKHRoaXMubG9nZ2VyKTtcblxuXHRcdFx0Ly8gRjYgwrcgZmVlZCB0aGUgV29ya2Zsb3dSZWdpc3RyeSBmcm9tIHRoZSBub2RlTWFwIHNvIGBzdWJ3b3JrZmxvdzpgXG5cdFx0XHQvLyBzdGVwcyArIHRyaWdnZXIvd29ya2Zsb3cvcHJvY2Vzcy1nbG9iYWwgbWlkZGxld2FyZSByZXNvbHZlIGluIGFcblx0XHRcdC8vIGNyb24tb25seSBkZXBsb3ltZW50IChubyBIVFRQIHRyaWdnZXIgdG8gcG9wdWxhdGUgdGhlIHJlZ2lzdHJ5KS5cblx0XHRcdHRoaXMucmVnaXN0ZXJXb3JrZmxvd3NGcm9tTm9kZU1hcCh0aGlzLmxvZ2dlcik7XG5cblx0XHRcdC8vIEYxNCDCtyBzZWVkIHRoZSBwcm9jZXNzLWdsb2JhbCBtaWRkbGV3YXJlIGNoYWluIGZyb21cblx0XHRcdC8vIGBCTE9LX0dMT0JBTF9NSURETEVXQVJFYCAoaWRlbXBvdGVudCDigJQgcHJvZ3JhbW1hdGljXG5cdFx0XHQvLyBzZXRHbG9iYWxNaWRkbGV3YXJlIHRha2VzIHByZWNlZGVuY2UpLlxuXHRcdFx0dGhpcy5zZWVkR2xvYmFsTWlkZGxld2FyZUZyb21FbnYodGhpcy5sb2dnZXIpO1xuXG5cdFx0XHQvLyBGaW5kIGFsbCB3b3JrZmxvd3Mgd2l0aCBjcm9uIHRyaWdnZXJzXG5cdFx0XHRjb25zdCBjcm9uV29ya2Zsb3dzID0gdGhpcy5nZXRDcm9uV29ya2Zsb3dzKCk7XG5cblx0XHRcdGlmIChjcm9uV29ya2Zsb3dzLmxlbmd0aCA9PT0gMCkge1xuXHRcdFx0XHR0aGlzLmxvZ2dlci5sb2coXCJObyB3b3JrZmxvd3Mgd2l0aCBjcm9uIHRyaWdnZXJzIGZvdW5kXCIpO1xuXHRcdFx0XHRyZXR1cm4gdGhpcy5lbmRDb3VudGVyKHN0YXJ0VGltZSk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIENyZWF0ZSBhbmQgc3RhcnQgY3JvbiBqb2JzIGZvciBlYWNoIHdvcmtmbG93XG5cdFx0XHRmb3IgKGNvbnN0IHdvcmtmbG93IG9mIGNyb25Xb3JrZmxvd3MpIHtcblx0XHRcdFx0Y29uc3QgY29uZmlnID0gd29ya2Zsb3cuY29uZmlnLnRyaWdnZXI/LmNyb24gYXMgQ3JvblRyaWdnZXJPcHRzO1xuXHRcdFx0XHRjb25zdCBqb2JJZCA9IGBjcm9uLSR7d29ya2Zsb3cucGF0aH0tJHt1dWlkKCkuc2xpY2UoMCwgOCl9YDtcblxuXHRcdFx0XHQvLyBgQ3JvblRyaWdnZXJPcHRzYCBpcyBgei5pbnB1dDzigKY+YCBzbyBgdGltZXpvbmVgIGlzIGBzdHJpbmcgfCB1bmRlZmluZWRgXG5cdFx0XHRcdC8vIGV2ZW4gdGhvdWdoIHRoZSBzY2hlbWEgZGVjbGFyZXMgYC5kZWZhdWx0KFwiVVRDXCIpYC4gQXBwbHkgdGhlXG5cdFx0XHRcdC8vIGRlZmF1bHQgb25jZSBoZXJlIHNvIHRoZSByZXN0IG9mIHRoaXMgbWV0aG9kIChhbmQgdGhlIGNyb24gbGliJ3Ncblx0XHRcdFx0Ly8gY29uc3RydWN0b3IpIHNlZXMgYSBndWFyYW50ZWVkIHN0cmluZy5cblx0XHRcdFx0Y29uc3QgdGltZXpvbmUgPSBjb25maWcudGltZXpvbmUgPz8gXCJVVENcIjtcblxuXHRcdFx0XHR0aGlzLmxvZ2dlci5sb2coYFNjaGVkdWxpbmcgd29ya2Zsb3c6ICR7d29ya2Zsb3cucGF0aH0gd2l0aCBzY2hlZHVsZTogJHtjb25maWcuc2NoZWR1bGV9ICgke3RpbWV6b25lfSlgKTtcblxuXHRcdFx0XHRjb25zdCBqb2IgPSBuZXcgQ3JvbkpvYihcblx0XHRcdFx0XHRjb25maWcuc2NoZWR1bGUsXG5cdFx0XHRcdFx0YXN5bmMgKCkgPT4ge1xuXHRcdFx0XHRcdFx0YXdhaXQgdGhpcy5leGVjdXRlV29ya2Zsb3coam9iSWQsIHdvcmtmbG93LCBjb25maWcsIGZhbHNlKTtcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdG51bGwsIC8vIG9uQ29tcGxldGVcblx0XHRcdFx0XHRmYWxzZSwgLy8gc3RhcnRcblx0XHRcdFx0XHR0aW1lem9uZSxcblx0XHRcdFx0KTtcblxuXHRcdFx0XHRjb25zdCBzY2hlZHVsZWRKb2I6IFNjaGVkdWxlZEpvYiA9IHtcblx0XHRcdFx0XHRpZDogam9iSWQsXG5cdFx0XHRcdFx0d29ya2Zsb3dQYXRoOiB3b3JrZmxvdy5wYXRoLFxuXHRcdFx0XHRcdHNjaGVkdWxlOiBjb25maWcuc2NoZWR1bGUsXG5cdFx0XHRcdFx0dGltZXpvbmUsXG5cdFx0XHRcdFx0b3ZlcmxhcDogY29uZmlnLm92ZXJsYXAgPz8gZmFsc2UsXG5cdFx0XHRcdFx0cnVubmluZzogZmFsc2UsXG5cdFx0XHRcdFx0bmV4dFJ1bjogdGhpcy50b0RhdGUoam9iLm5leHREYXRlKCkpLFxuXHRcdFx0XHRcdGpvYixcblx0XHRcdFx0fTtcblxuXHRcdFx0XHR0aGlzLmpvYnMuc2V0KGpvYklkLCBzY2hlZHVsZWRKb2IpO1xuXG5cdFx0XHRcdC8vIFN0YXJ0IHRoZSBqb2Jcblx0XHRcdFx0am9iLnN0YXJ0KCk7XG5cdFx0XHRcdHRoaXMubG9nZ2VyLmxvZyhgSm9iICR7am9iSWR9IHN0YXJ0ZWQuIE5leHQgcnVuOiAke3NjaGVkdWxlZEpvYi5uZXh0UnVufWApO1xuXHRcdFx0fVxuXG5cdFx0XHR0aGlzLmxvZ2dlci5sb2coYENyb24gdHJpZ2dlciBzdGFydGVkLiAke3RoaXMuam9icy5zaXplfSBqb2Iocykgc2NoZWR1bGVkYCk7XG5cblx0XHRcdC8vIEVuYWJsZSBITVIgaW4gZGV2ZWxvcG1lbnQgbW9kZVxuXHRcdFx0aWYgKHByb2Nlc3MuZW52LkJMT0tfSE1SID09PSBcInRydWVcIiB8fCBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJkZXZlbG9wbWVudFwiKSB7XG5cdFx0XHRcdGF3YWl0IHRoaXMuZW5hYmxlSG90UmVsb2FkKCk7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiB0aGlzLmVuZENvdW50ZXIoc3RhcnRUaW1lKTtcblx0XHR9IGNhdGNoIChlcnJvcikge1xuXHRcdFx0dGhpcy5sb2dnZXIuZXJyb3IoYEZhaWxlZCB0byBzdGFydCBjcm9uIHRyaWdnZXI6ICR7KGVycm9yIGFzIEVycm9yKS5tZXNzYWdlfWApO1xuXHRcdFx0dGhyb3cgZXJyb3I7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFN0b3AgYWxsIGNyb24gam9ic1xuXHQgKi9cblx0LyoqXG5cdCAqIE9CUy0wMiBUNCDigJQgaW5zdGFsbCB0aGUgT3BlblRlbGVtZXRyeSBTREsgYXQgYm9vdCB3aGVuIGFuIE9UTFAgZW5kcG9pbnQgaXNcblx0ICogY29uZmlndXJlZCwgc28gdGhlIHNwYW5zIHRoZSBydW5uZXIgYWxyZWFkeSBjcmVhdGVzIGZvciBzY2hlZHVsZWQgcnVuc1xuXHQgKiBleHBvcnQgdG8gYSBiYWNrZW5kIChUZW1wby9KYWVnZXIv4oCmKS4gTm8tb3Agd2hlbiBgT1RFTF9FWFBPUlRFUl9PVExQX0VORFBPSU5UYFxuXHQgKiBpcyB1bnNldCBvciBgQkxPS19UUkFDSU5HX0RJU0FCTEVEPTFgLiBTdG9yZXMgdGhlIHNodXRkb3duIHNvIGBzdG9wKClgIGZsdXNoZXMuXG5cdCAqL1xuXHRwcml2YXRlIGFzeW5jIG1heWJlQm9vdHN0cmFwVHJhY2luZygpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRpZiAocHJvY2Vzcy5lbnYuQkxPS19UUkFDSU5HX0RJU0FCTEVEID09PSBcIjFcIikgcmV0dXJuO1xuXHRcdGNvbnN0IGJhc2UgPSBwcm9jZXNzLmVudi5PVEVMX0VYUE9SVEVSX09UTFBfVFJBQ0VTX0VORFBPSU5UIHx8IHByb2Nlc3MuZW52Lk9URUxfRVhQT1JURVJfT1RMUF9FTkRQT0lOVDtcblx0XHRpZiAoIWJhc2UpIHJldHVybjtcblx0XHRjb25zdCBlbmRwb2ludCA9IHByb2Nlc3MuZW52Lk9URUxfRVhQT1JURVJfT1RMUF9UUkFDRVNfRU5EUE9JTlQgPyBiYXNlIDogYCR7YmFzZS5yZXBsYWNlKC9cXC8kLywgXCJcIil9L3YxL3RyYWNlc2A7XG5cdFx0dHJ5IHtcblx0XHRcdGNvbnN0IHJlc3VsdCA9IGF3YWl0IGJvb3RzdHJhcFRyYWNpbmcoe1xuXHRcdFx0XHRzZXJ2aWNlTmFtZTogcHJvY2Vzcy5lbnYuQVBQX05BTUUgfHwgcHJvY2Vzcy5lbnYuUFJPSkVDVF9OQU1FIHx8IFwiYmxvay1jcm9uXCIsXG5cdFx0XHRcdHNlcnZpY2VWZXJzaW9uOiBwcm9jZXNzLmVudi5QUk9KRUNUX1ZFUlNJT04sXG5cdFx0XHRcdGV4cG9ydGVyOiBcIm90bHBcIixcblx0XHRcdFx0ZW5kcG9pbnQsXG5cdFx0XHR9KTtcblx0XHRcdGlmIChyZXN1bHQpIHtcblx0XHRcdFx0dGhpcy50cmFjaW5nU2h1dGRvd24gPSByZXN1bHQuc2h1dGRvd247XG5cdFx0XHRcdHRoaXMubG9nZ2VyLmxvZyhgW2Jsb2tdW3RyYWNpbmddIE9UTFAgZGlzdHJpYnV0ZWQgdHJhY2luZyBlbmFibGVkIOKGkiAke2VuZHBvaW50fWApO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dGhpcy5sb2dnZXIuZXJyb3IoXG5cdFx0XHRcdFx0XCJbYmxva11bdHJhY2luZ10gT1RFTF9FWFBPUlRFUl9PVExQX0VORFBPSU5UIGlzIHNldCBidXQgdGhlIE9UZWwgdHJhY2UgU0RLIGlzbid0IGluc3RhbGxlZCDigJQgdHJhY2luZyBpcyBPRkYuXCIsXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0fSBjYXRjaCAoZXJyKSB7XG5cdFx0XHR0aGlzLmxvZ2dlci5lcnJvcihgW2Jsb2tdW3RyYWNpbmddIGZhaWxlZCB0byBpbml0aWFsaXplOiAkeyhlcnIgYXMgRXJyb3IpLm1lc3NhZ2V9YCk7XG5cdFx0fVxuXHR9XG5cblx0YXN5bmMgc3RvcCgpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHQvLyBPQlMtMDIgVDQg4oCUIGZsdXNoIHBlbmRpbmcgc3BhbnMgYmVmb3JlIHRoZSBwcm9jZXNzIGV4aXRzLlxuXHRcdGlmICh0aGlzLnRyYWNpbmdTaHV0ZG93bikge1xuXHRcdFx0YXdhaXQgdGhpcy50cmFjaW5nU2h1dGRvd24oKS5jYXRjaCgoZXJyKSA9PlxuXHRcdFx0XHR0aGlzLmxvZ2dlci5lcnJvcihgW2Jsb2tdW3RyYWNpbmddIHNodXRkb3duIGZhaWxlZDogJHsoZXJyIGFzIEVycm9yKS5tZXNzYWdlfWApLFxuXHRcdFx0KTtcblx0XHRcdHRoaXMudHJhY2luZ1NodXRkb3duID0gbnVsbDtcblx0XHR9XG5cdFx0Zm9yIChjb25zdCBbam9iSWQsIHNjaGVkdWxlZEpvYl0gb2YgdGhpcy5qb2JzKSB7XG5cdFx0XHRzY2hlZHVsZWRKb2Iuam9iLnN0b3AoKTtcblx0XHRcdHRoaXMubG9nZ2VyLmxvZyhgSm9iICR7am9iSWR9IHN0b3BwZWRgKTtcblx0XHR9XG5cdFx0dGhpcy5qb2JzLmNsZWFyKCk7XG5cdFx0dGhpcy5sb2dnZXIubG9nKFwiQ3JvbiB0cmlnZ2VyIHN0b3BwZWRcIik7XG5cdH1cblxuXHRwcm90ZWN0ZWQgb3ZlcnJpZGUgYXN5bmMgb25IbXJXb3JrZmxvd0NoYW5nZSgpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHR0aGlzLmxvZ2dlci5sb2coXCJbSE1SXSBDcm9uIHdvcmtmbG93IGNoYW5nZWQsIHJlbG9hZGluZy4uLlwiKTtcblx0XHRhd2FpdCB0aGlzLndhaXRGb3JJbkZsaWdodFJlcXVlc3RzKCk7XG5cdFx0YXdhaXQgdGhpcy5zdG9wKCk7XG5cdFx0dGhpcy5sb2FkV29ya2Zsb3dzKCk7XG5cdFx0YXdhaXQgdGhpcy5saXN0ZW4oKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBNYW51YWxseSB0cmlnZ2VyIGEgc3BlY2lmaWMgam9iXG5cdCAqL1xuXHRhc3luYyB0cmlnZ2VySm9iKGpvYklkOiBzdHJpbmcpOiBQcm9taXNlPFRyaWdnZXJSZXNwb25zZSB8IG51bGw+IHtcblx0XHRjb25zdCBzY2hlZHVsZWRKb2IgPSB0aGlzLmpvYnMuZ2V0KGpvYklkKTtcblx0XHRpZiAoIXNjaGVkdWxlZEpvYikge1xuXHRcdFx0dGhpcy5sb2dnZXIuZXJyb3IoYEpvYiBub3QgZm91bmQ6ICR7am9iSWR9YCk7XG5cdFx0XHRyZXR1cm4gbnVsbDtcblx0XHR9XG5cblx0XHQvLyBHZXQgdGhlIHdvcmtmbG93XG5cdFx0Y29uc3Qgd29ya2Zsb3cgPSB0aGlzLmdldFdvcmtmbG93QnlQYXRoKHNjaGVkdWxlZEpvYi53b3JrZmxvd1BhdGgpO1xuXHRcdGlmICghd29ya2Zsb3cpIHtcblx0XHRcdHRoaXMubG9nZ2VyLmVycm9yKGBXb3JrZmxvdyBub3QgZm91bmQ6ICR7c2NoZWR1bGVkSm9iLndvcmtmbG93UGF0aH1gKTtcblx0XHRcdHJldHVybiBudWxsO1xuXHRcdH1cblxuXHRcdGNvbnN0IGNvbmZpZyA9IHdvcmtmbG93LmNvbmZpZy50cmlnZ2VyPy5jcm9uIGFzIENyb25UcmlnZ2VyT3B0cztcblx0XHRyZXR1cm4gdGhpcy5leGVjdXRlV29ya2Zsb3coam9iSWQsIHdvcmtmbG93LCBjb25maWcsIHRydWUpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldCBhbGwgc2NoZWR1bGVkIGpvYnNcblx0ICovXG5cdGdldEpvYnMoKTogU2NoZWR1bGVkSm9iW10ge1xuXHRcdHJldHVybiBBcnJheS5mcm9tKHRoaXMuam9icy52YWx1ZXMoKSkubWFwKChqb2IpID0+ICh7XG5cdFx0XHQuLi5qb2IsXG5cdFx0XHRuZXh0UnVuOiB0aGlzLnRvRGF0ZShqb2Iuam9iLm5leHREYXRlKCkpLFxuXHRcdH0pKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXQgYWxsIHdvcmtmbG93cyB0aGF0IGhhdmUgY3JvbiB0cmlnZ2Vyc1xuXHQgKi9cblx0cHJvdGVjdGVkIGdldENyb25Xb3JrZmxvd3MoKTogQ3JvbldvcmtmbG93TW9kZWxbXSB7XG5cdFx0Y29uc3Qgd29ya2Zsb3dzOiBDcm9uV29ya2Zsb3dNb2RlbFtdID0gW107XG5cblx0XHRmb3IgKGNvbnN0IFtwYXRoLCB3b3JrZmxvd10gb2YgT2JqZWN0LmVudHJpZXModGhpcy5ub2RlTWFwLndvcmtmbG93cyB8fCB7fSkpIHtcblx0XHRcdGNvbnN0IHdvcmtmbG93Q29uZmlnID0gKHdvcmtmbG93IGFzIHVua25vd24gYXMgeyBfY29uZmlnOiBDcm9uV29ya2Zsb3dNb2RlbFtcImNvbmZpZ1wiXSB9KS5fY29uZmlnO1xuXG5cdFx0XHRpZiAod29ya2Zsb3dDb25maWc/LnRyaWdnZXIpIHtcblx0XHRcdFx0Y29uc3QgdHJpZ2dlclR5cGUgPSBPYmplY3Qua2V5cyh3b3JrZmxvd0NvbmZpZy50cmlnZ2VyKVswXTtcblxuXHRcdFx0XHRpZiAodHJpZ2dlclR5cGUgPT09IFwiY3JvblwiICYmIHdvcmtmbG93Q29uZmlnLnRyaWdnZXIuY3Jvbikge1xuXHRcdFx0XHRcdHdvcmtmbG93cy5wdXNoKHtcblx0XHRcdFx0XHRcdHBhdGgsXG5cdFx0XHRcdFx0XHRjb25maWc6IHdvcmtmbG93Q29uZmlnLFxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHdvcmtmbG93cztcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXQgd29ya2Zsb3cgYnkgcGF0aFxuXHQgKi9cblx0cHJvdGVjdGVkIGdldFdvcmtmbG93QnlQYXRoKHBhdGg6IHN0cmluZyk6IENyb25Xb3JrZmxvd01vZGVsIHwgbnVsbCB7XG5cdFx0Y29uc3Qgd29ya2Zsb3cgPSB0aGlzLm5vZGVNYXAud29ya2Zsb3dzPy5bcGF0aF07XG5cdFx0aWYgKCF3b3JrZmxvdykgcmV0dXJuIG51bGw7XG5cblx0XHRjb25zdCB3b3JrZmxvd0NvbmZpZyA9ICh3b3JrZmxvdyBhcyB1bmtub3duIGFzIHsgX2NvbmZpZzogQ3JvbldvcmtmbG93TW9kZWxbXCJjb25maWdcIl0gfSkuX2NvbmZpZztcblx0XHRyZXR1cm4ge1xuXHRcdFx0cGF0aCxcblx0XHRcdGNvbmZpZzogd29ya2Zsb3dDb25maWcsXG5cdFx0fTtcblx0fVxuXG5cdC8qKlxuXHQgKiBFeGVjdXRlIGEgd29ya2Zsb3dcblx0ICovXG5cdHByb3RlY3RlZCBhc3luYyBleGVjdXRlV29ya2Zsb3coXG5cdFx0am9iSWQ6IHN0cmluZyxcblx0XHR3b3JrZmxvdzogQ3JvbldvcmtmbG93TW9kZWwsXG5cdFx0Y29uZmlnOiBDcm9uVHJpZ2dlck9wdHMsXG5cdFx0bWFudWFsOiBib29sZWFuLFxuXHQpOiBQcm9taXNlPFRyaWdnZXJSZXNwb25zZT4ge1xuXHRcdGNvbnN0IHNjaGVkdWxlZEpvYiA9IHRoaXMuam9icy5nZXQoam9iSWQpO1xuXHRcdGlmICghc2NoZWR1bGVkSm9iKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoYEpvYiBub3QgZm91bmQ6ICR7am9iSWR9YCk7XG5cdFx0fVxuXG5cdFx0Ly8gQ2hlY2sgZm9yIG92ZXJsYXBcblx0XHRpZiAoc2NoZWR1bGVkSm9iLnJ1bm5pbmcgJiYgIXNjaGVkdWxlZEpvYi5vdmVybGFwKSB7XG5cdFx0XHR0aGlzLmxvZ2dlci5sb2coYFNraXBwaW5nICR7am9iSWR9OiBwcmV2aW91cyBleGVjdXRpb24gc3RpbGwgcnVubmluZyAob3ZlcmxhcCBkaXNhYmxlZClgKTtcblx0XHRcdHJldHVybiB7IGN0eDoge30gYXMgQ29udGV4dCwgbWV0cmljczoge30gYXMgTWV0cmljc1R5cGUgfTtcblx0XHR9XG5cblx0XHRjb25zdCBleGVjdXRpb25JZCA9IHV1aWQoKTtcblx0XHRjb25zdCBsYXN0RGF0ZSA9IHNjaGVkdWxlZEpvYi5qb2IubGFzdERhdGUoKTtcblx0XHRjb25zdCBzY2hlZHVsZWRUaW1lID0gbGFzdERhdGUgPyBuZXcgRGF0ZShsYXN0RGF0ZSBhcyB1bmtub3duIGFzIHN0cmluZyB8IG51bWJlcikgOiBuZXcgRGF0ZSgpO1xuXHRcdGNvbnN0IGV4ZWN1dGlvblRpbWUgPSBuZXcgRGF0ZSgpO1xuXG5cdFx0Ly8gQXBwbHkgdGhlIHNjaGVtYSBkZWZhdWx0IOKAlCBzZWUgZXhwbGFuYXRpb24gaW4gYGxpc3RlbigpYC5cblx0XHRjb25zdCB0aW1lem9uZSA9IGNvbmZpZy50aW1lem9uZSA/PyBcIlVUQ1wiO1xuXG5cdFx0Y29uc3QgZGVmYXVsdE1ldGVyID0gbWV0cmljcy5nZXRNZXRlcihcImRlZmF1bHRcIik7XG5cdFx0Y29uc3QgY3JvbkV4ZWN1dGlvbnMgPSBkZWZhdWx0TWV0ZXIuY3JlYXRlQ291bnRlcihcImNyb25fZXhlY3V0aW9uc1wiLCB7XG5cdFx0XHRkZXNjcmlwdGlvbjogXCJDcm9uIGpvYiBleGVjdXRpb25zXCIsXG5cdFx0fSk7XG5cdFx0Y29uc3QgY3JvbkVycm9ycyA9IGRlZmF1bHRNZXRlci5jcmVhdGVDb3VudGVyKFwiY3Jvbl9lcnJvcnNcIiwge1xuXHRcdFx0ZGVzY3JpcHRpb246IFwiQ3JvbiBqb2IgZXhlY3V0aW9uIGVycm9yc1wiLFxuXHRcdH0pO1xuXG5cdFx0cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG5cdFx0XHR0aGlzLnRyYWNlci5zdGFydEFjdGl2ZVNwYW4oYGNyb246JHt3b3JrZmxvdy5wYXRofWAsIGFzeW5jIChzcGFuOiBTcGFuKSA9PiB7XG5cdFx0XHRcdHNjaGVkdWxlZEpvYi5ydW5uaW5nID0gdHJ1ZTtcblxuXHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdGNvbnN0IHN0YXJ0ID0gcGVyZm9ybWFuY2Uubm93KCk7XG5cblx0XHRcdFx0XHQvLyBJbml0aWFsaXplIGNvbmZpZ3VyYXRpb24gZm9yIHRoaXMgd29ya2Zsb3dcblx0XHRcdFx0XHRhd2FpdCB0aGlzLmNvbmZpZ3VyYXRpb24uaW5pdCh3b3JrZmxvdy5wYXRoLCB0aGlzLm5vZGVNYXApO1xuXG5cdFx0XHRcdFx0Ly8gQ3JlYXRlIGNvbnRleHRcblx0XHRcdFx0XHRjb25zdCBjdHg6IENvbnRleHQgPSB0aGlzLmNyZWF0ZUNvbnRleHQodW5kZWZpbmVkLCB3b3JrZmxvdy5wYXRoLCBleGVjdXRpb25JZCk7XG5cblx0XHRcdFx0XHQvLyBDcmVhdGUgZXhlY3V0aW9uIGNvbnRleHRcblx0XHRcdFx0XHRjb25zdCBjcm9uQ29udGV4dDogQ3JvbkV4ZWN1dGlvbkNvbnRleHQgPSB7XG5cdFx0XHRcdFx0XHRqb2JJZCxcblx0XHRcdFx0XHRcdHNjaGVkdWxlZFRpbWUsXG5cdFx0XHRcdFx0XHRleGVjdXRpb25UaW1lLFxuXHRcdFx0XHRcdFx0c2NoZWR1bGU6IGNvbmZpZy5zY2hlZHVsZSxcblx0XHRcdFx0XHRcdHRpbWV6b25lLFxuXHRcdFx0XHRcdFx0bWFudWFsLFxuXHRcdFx0XHRcdH07XG5cblx0XHRcdFx0XHQvLyBQb3B1bGF0ZSByZXF1ZXN0IHdpdGggY3JvbiBjb250ZXh0XG5cdFx0XHRcdFx0Y3R4LnJlcXVlc3QgPSB7XG5cdFx0XHRcdFx0XHRib2R5OiBjcm9uQ29udGV4dCxcblx0XHRcdFx0XHRcdGhlYWRlcnM6IHtcblx0XHRcdFx0XHRcdFx0XCJ4LWNyb24tam9iLWlkXCI6IGpvYklkLFxuXHRcdFx0XHRcdFx0XHRcIngtY3Jvbi1zY2hlZHVsZVwiOiBjb25maWcuc2NoZWR1bGUsXG5cdFx0XHRcdFx0XHRcdFwieC1jcm9uLXRpbWV6b25lXCI6IGNvbmZpZy50aW1lem9uZSxcblx0XHRcdFx0XHRcdFx0XCJ4LWNyb24tbWFudWFsXCI6IFN0cmluZyhtYW51YWwpLFxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdHF1ZXJ5OiB7fSxcblx0XHRcdFx0XHRcdHBhcmFtczoge1xuXHRcdFx0XHRcdFx0XHRqb2JJZCxcblx0XHRcdFx0XHRcdFx0c2NoZWR1bGU6IGNvbmZpZy5zY2hlZHVsZSxcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0fSBhcyB1bmtub3duIGFzIFJlcXVlc3RDb250ZXh0O1xuXG5cdFx0XHRcdFx0Ly8gU3RvcmUgY3JvbiBjb250ZXh0IGluIHZhcnNcblx0XHRcdFx0XHRpZiAoIWN0eC52YXJzKSBjdHgudmFycyA9IHt9O1xuXHRcdFx0XHRcdGN0eC52YXJzLl9jcm9uX2NvbnRleHQgPSB7XG5cdFx0XHRcdFx0XHRqb2JJZCxcblx0XHRcdFx0XHRcdHNjaGVkdWxlZFRpbWU6IHNjaGVkdWxlZFRpbWUudG9JU09TdHJpbmcoKSxcblx0XHRcdFx0XHRcdGV4ZWN1dGlvblRpbWU6IGV4ZWN1dGlvblRpbWUudG9JU09TdHJpbmcoKSxcblx0XHRcdFx0XHRcdHNjaGVkdWxlOiBjb25maWcuc2NoZWR1bGUsXG5cdFx0XHRcdFx0XHR0aW1lem9uZTogY29uZmlnLnRpbWV6b25lLFxuXHRcdFx0XHRcdFx0bWFudWFsOiBTdHJpbmcobWFudWFsKSxcblx0XHRcdFx0XHR9O1xuXG5cdFx0XHRcdFx0Y3R4LmxvZ2dlci5sb2coYEV4ZWN1dGluZyBjcm9uIGpvYjogJHtqb2JJZH0gKCR7bWFudWFsID8gXCJtYW51YWxcIiA6IFwic2NoZWR1bGVkXCJ9KWApO1xuXG5cdFx0XHRcdFx0Ly8gdjAuNiDCtyBhcHBseSB0aGUgbWVyZ2VkIG1pZGRsZXdhcmUgY2hhaW4gKHByb2Nlc3MtZ2xvYmFsIOKGklxuXHRcdFx0XHRcdC8vIHdvcmtmbG93LWxldmVsIOKGkiB0cmlnZ2VyLWxldmVsKSBiZWZvcmUgdGhlIG1haW4gd29ya2Zsb3dcblx0XHRcdFx0XHQvLyBib2R5LiBMZXRzIGNyb24gd29ya2Zsb3dzIGNvbXBvc2UgYXV0aC1jaGVjayArIGF1ZGl0LWxvZ1xuXHRcdFx0XHRcdC8vIGNoYWlucyBleGFjdGx5IGxpa2UgSFRUUCB0cmlnZ2Vycy4gQSB0aHJvd2luZyBtaWRkbGV3YXJlXG5cdFx0XHRcdFx0Ly8gcHJvcGFnYXRlcyB0byB0aGUgb3V0ZXIgY2F0Y2ggYW5kIHN1cmZhY2VzIGFzIGEgY3JvbiBqb2Jcblx0XHRcdFx0XHQvLyBmYWlsdXJlLlxuXHRcdFx0XHRcdGF3YWl0IHRoaXMuYXBwbHlNaWRkbGV3YXJlQ2hhaW4oY3R4LCB0aGlzLm5vZGVNYXApO1xuXG5cdFx0XHRcdFx0Ly8gRXhlY3V0ZSB3b3JrZmxvd1xuXHRcdFx0XHRcdGNvbnN0IHJlc3BvbnNlOiBUcmlnZ2VyUmVzcG9uc2UgPSBhd2FpdCB0aGlzLnJ1bihjdHgpO1xuXHRcdFx0XHRcdGNvbnN0IGVuZCA9IHBlcmZvcm1hbmNlLm5vdygpO1xuXG5cdFx0XHRcdFx0Ly8gVXBkYXRlIGpvYiBzdGF0ZVxuXHRcdFx0XHRcdHNjaGVkdWxlZEpvYi5sYXN0UnVuID0gZXhlY3V0aW9uVGltZTtcblx0XHRcdFx0XHRzY2hlZHVsZWRKb2IubmV4dFJ1biA9IHRoaXMudG9EYXRlKHNjaGVkdWxlZEpvYi5qb2IubmV4dERhdGUoKSk7XG5cblx0XHRcdFx0XHQvLyBTZXQgc3BhbiBhdHRyaWJ1dGVzXG5cdFx0XHRcdFx0c3Bhbi5zZXRBdHRyaWJ1dGUoXCJzdWNjZXNzXCIsIHRydWUpO1xuXHRcdFx0XHRcdHNwYW4uc2V0QXR0cmlidXRlKFwiam9iX2lkXCIsIGpvYklkKTtcblx0XHRcdFx0XHRzcGFuLnNldEF0dHJpYnV0ZShcIndvcmtmbG93X3BhdGhcIiwgd29ya2Zsb3cucGF0aCk7XG5cdFx0XHRcdFx0c3Bhbi5zZXRBdHRyaWJ1dGUoXCJzY2hlZHVsZVwiLCBjb25maWcuc2NoZWR1bGUpO1xuXHRcdFx0XHRcdHNwYW4uc2V0QXR0cmlidXRlKFwidGltZXpvbmVcIiwgdGltZXpvbmUpO1xuXHRcdFx0XHRcdHNwYW4uc2V0QXR0cmlidXRlKFwibWFudWFsXCIsIG1hbnVhbCk7XG5cdFx0XHRcdFx0c3Bhbi5zZXRBdHRyaWJ1dGUoXCJlbGFwc2VkX21zXCIsIGVuZCAtIHN0YXJ0KTtcblx0XHRcdFx0XHRzcGFuLnNldFN0YXR1cyh7IGNvZGU6IFNwYW5TdGF0dXNDb2RlLk9LIH0pO1xuXG5cdFx0XHRcdFx0Ly8gUmVjb3JkIG1ldHJpY3Ncblx0XHRcdFx0XHRjcm9uRXhlY3V0aW9ucy5hZGQoMSwge1xuXHRcdFx0XHRcdFx0ZW52OiBwcm9jZXNzLmVudi5OT0RFX0VOVixcblx0XHRcdFx0XHRcdGpvYl9pZDogam9iSWQsXG5cdFx0XHRcdFx0XHR3b3JrZmxvd19uYW1lOiB0aGlzLmNvbmZpZ3VyYXRpb24ubmFtZSxcblx0XHRcdFx0XHRcdG1hbnVhbDogU3RyaW5nKG1hbnVhbCksXG5cdFx0XHRcdFx0XHRzdWNjZXNzOiBcInRydWVcIixcblx0XHRcdFx0XHR9KTtcblxuXHRcdFx0XHRcdGN0eC5sb2dnZXIubG9nKGBDcm9uIGpvYiBjb21wbGV0ZWQgaW4gJHsoZW5kIC0gc3RhcnQpLnRvRml4ZWQoMil9bXM6ICR7am9iSWR9YCk7XG5cblx0XHRcdFx0XHRyZXNvbHZlKHJlc3BvbnNlKTtcblx0XHRcdFx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRcdFx0XHQvLyBGNSDCtyBhIGNyb24gd29ya2Zsb3cgd2l0aCBhIGB3YWl0YCBzdGVwIChvciBhIHNjaGVkdWxpbmdcblx0XHRcdFx0XHQvLyBnYXRlKSB0aHJvd3MgRGVmZXJyZWREaXNwYXRjaFNpZ25hbCAvIFdhaXREaXNwYXRjaFJlcXVlc3Rcblx0XHRcdFx0XHQvLyB0byBkZWZlciB0aGUgcnVuIOKAlCB0aGF0J3MgYSBzdWNjZXNzZnVsIGRlZmVycmFsLCBOT1QgYVxuXHRcdFx0XHRcdC8vIGZhaWx1cmUuIFRyaWdnZXJCYXNlLnJ1biBhbHJlYWR5IG1hcmtlZCB0aGUgcnVuXG5cdFx0XHRcdFx0Ly8gZGVsYXllZC9xdWV1ZWQvZGVib3VuY2VkIGFuZCAoZm9yIEhUVFApIHBlcnNpc3RlZCB0aGVcblx0XHRcdFx0XHQvLyBkaXNwYXRjaC4gQ3JvbidzIGluLXByb2Nlc3Mgc2NoZWR1bGVyIG93bnMgdGhlIGV2ZW50dWFsXG5cdFx0XHRcdFx0Ly8gcmUtZmlyZSwgc28gd2UganVzdCByZWNvcmQgc3VjY2VzcyBhbmQgZG9uJ3QgYnVtcFxuXHRcdFx0XHRcdC8vIGBjcm9uX2Vycm9yc2AuXG5cdFx0XHRcdFx0aWYgKGVycm9yIGluc3RhbmNlb2YgRGVmZXJyZWREaXNwYXRjaFNpZ25hbCB8fCBlcnJvciBpbnN0YW5jZW9mIFdhaXREaXNwYXRjaFJlcXVlc3QpIHtcblx0XHRcdFx0XHRcdHNwYW4uc2V0QXR0cmlidXRlKFwic3VjY2Vzc1wiLCB0cnVlKTtcblx0XHRcdFx0XHRcdHNwYW4uc2V0QXR0cmlidXRlKFwiZGVmZXJyZWRcIiwgdHJ1ZSk7XG5cdFx0XHRcdFx0XHRzcGFuLnNldFN0YXR1cyh7IGNvZGU6IFNwYW5TdGF0dXNDb2RlLk9LIH0pO1xuXG5cdFx0XHRcdFx0XHRjcm9uRXhlY3V0aW9ucy5hZGQoMSwge1xuXHRcdFx0XHRcdFx0XHRlbnY6IHByb2Nlc3MuZW52Lk5PREVfRU5WLFxuXHRcdFx0XHRcdFx0XHRqb2JfaWQ6IGpvYklkLFxuXHRcdFx0XHRcdFx0XHR3b3JrZmxvd19uYW1lOiB0aGlzLmNvbmZpZ3VyYXRpb24ubmFtZSxcblx0XHRcdFx0XHRcdFx0bWFudWFsOiBTdHJpbmcobWFudWFsKSxcblx0XHRcdFx0XHRcdFx0c3VjY2VzczogXCJ0cnVlXCIsXG5cdFx0XHRcdFx0XHR9KTtcblxuXHRcdFx0XHRcdFx0dGhpcy5sb2dnZXIubG9nKGBDcm9uIGpvYiBkZWZlcnJlZCAke2pvYklkfTogJHsoZXJyb3IgYXMgRXJyb3IpLm1lc3NhZ2V9YCk7XG5cdFx0XHRcdFx0XHRyZXNvbHZlKHsgY3R4OiB7fSBhcyBDb250ZXh0LCBtZXRyaWNzOiB7fSBhcyBNZXRyaWNzVHlwZSB9KTtcblx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRjb25zdCBlcnJvck1lc3NhZ2UgPSAoZXJyb3IgYXMgRXJyb3IpLm1lc3NhZ2U7XG5cblx0XHRcdFx0XHQvLyBTZXQgc3BhbiBlcnJvclxuXHRcdFx0XHRcdHNwYW4uc2V0QXR0cmlidXRlKFwic3VjY2Vzc1wiLCBmYWxzZSk7XG5cdFx0XHRcdFx0c3Bhbi5yZWNvcmRFeGNlcHRpb24oZXJyb3IgYXMgRXJyb3IpO1xuXHRcdFx0XHRcdHNwYW4uc2V0U3RhdHVzKHsgY29kZTogU3BhblN0YXR1c0NvZGUuRVJST1IsIG1lc3NhZ2U6IGVycm9yTWVzc2FnZSB9KTtcblxuXHRcdFx0XHRcdC8vIFJlY29yZCBlcnJvciBtZXRyaWNzXG5cdFx0XHRcdFx0Y3JvbkVycm9ycy5hZGQoMSwge1xuXHRcdFx0XHRcdFx0ZW52OiBwcm9jZXNzLmVudi5OT0RFX0VOVixcblx0XHRcdFx0XHRcdGpvYl9pZDogam9iSWQsXG5cdFx0XHRcdFx0XHR3b3JrZmxvd19uYW1lOiB0aGlzLmNvbmZpZ3VyYXRpb24/Lm5hbWUgfHwgXCJ1bmtub3duXCIsXG5cdFx0XHRcdFx0XHRtYW51YWw6IFN0cmluZyhtYW51YWwpLFxuXHRcdFx0XHRcdH0pO1xuXG5cdFx0XHRcdFx0dGhpcy5sb2dnZXIuZXJyb3IoYENyb24gam9iIGZhaWxlZCAke2pvYklkfTogJHtlcnJvck1lc3NhZ2V9YCwgKGVycm9yIGFzIEVycm9yKS5zdGFjayk7XG5cblx0XHRcdFx0XHRyZXNvbHZlKHsgY3R4OiB7fSBhcyBDb250ZXh0LCBtZXRyaWNzOiB7fSBhcyBNZXRyaWNzVHlwZSB9KTtcblx0XHRcdFx0fSBmaW5hbGx5IHtcblx0XHRcdFx0XHRzY2hlZHVsZWRKb2IucnVubmluZyA9IGZhbHNlO1xuXHRcdFx0XHRcdHNwYW4uZW5kKCk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH0pO1xuXHR9XG59XG5cbmV4cG9ydCBkZWZhdWx0IENyb25UcmlnZ2VyO1xuIl19
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@blokjs/trigger-cron",
3
- "version": "1.0.0",
3
+ "version": "1.2.0",
4
4
  "files": ["dist"],
5
5
  "description": "Cron/scheduled trigger for Blok workflows - supports cron expressions and interval-based scheduling",
6
6
  "type": "module",
@@ -15,9 +15,9 @@
15
15
  "author": "Deskree Technologies Inc.",
16
16
  "license": "Apache-2.0",
17
17
  "dependencies": {
18
- "@blokjs/helper": "^1.0.0",
19
- "@blokjs/runner": "^1.0.0",
20
- "@blokjs/shared": "^1.0.0",
18
+ "@blokjs/helper": "^1.2.0",
19
+ "@blokjs/runner": "^1.2.0",
20
+ "@blokjs/shared": "^1.2.0",
21
21
  "@opentelemetry/api": "^1.9.0",
22
22
  "cron": "^4.4.0",
23
23
  "uuid": "^11.1.0"