verben-workflow-ui 0.5.72 → 0.5.74

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.
@@ -352,6 +352,43 @@ export class WorkflowDesignerState {
352
352
  const sourceNodeType = sourceNodeInfo.node.type;
353
353
  return this.connectionRules[sourceNodeType] || [];
354
354
  }
355
+ /**
356
+ * Deletes a swimlane. Only succeeds when the lane has no nodes — stages must
357
+ * be moved to another lane first. Returns false when the lane still has nodes
358
+ * or the index is out of range.
359
+ *
360
+ * Keeps everything aligned after removal:
361
+ * - Re-sequences `order` on the remaining lanes (immutable reassignment so
362
+ * Angular's @for blocks re-render).
363
+ * - Decrements the swimlane indices stored on connections whose endpoints
364
+ * live below the removed lane, since those lanes shift up by one.
365
+ *
366
+ * The lane's original record is left in `swimlaneRecord`, so a previously
367
+ * loaded lane is emitted with `ObjectState.Removed` by
368
+ * `transformToWorkflowModel`; a never-saved lane simply disappears.
369
+ */
370
+ deleteSwimlane(index) {
371
+ if (index < 0 || index >= this.swimlanes.length) {
372
+ return false;
373
+ }
374
+ if (this.swimlanes[index].nodes?.length) {
375
+ console.warn('Cannot delete a swimlane that still has stages; move them out first.');
376
+ return false;
377
+ }
378
+ this.swimlanes = this.swimlanes
379
+ .filter((_, i) => i !== index)
380
+ .map((lane, i) => ({ ...lane, order: i }));
381
+ this.connections = this.connections.map((conn) => ({
382
+ ...conn,
383
+ sourceSwimlaneIndex: conn.sourceSwimlaneIndex > index
384
+ ? conn.sourceSwimlaneIndex - 1
385
+ : conn.sourceSwimlaneIndex,
386
+ targetSwimlaneIndex: conn.targetSwimlaneIndex > index
387
+ ? conn.targetSwimlaneIndex - 1
388
+ : conn.targetSwimlaneIndex,
389
+ }));
390
+ return true;
391
+ }
355
392
  updateSwimlane(index, name, tags) {
356
393
  console.log('State: Updating swimlane at index', index, 'with name', name, 'and tags', tags);
357
394
  if (index >= 0 && index < this.swimlanes.length) {
@@ -719,4 +756,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
719
756
  providedIn: 'root',
720
757
  }]
721
758
  }] });
722
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ya2Zsb3ctZGVzaWduZXIuc3RhdGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92ZXJiZW4td29ya2Zsb3ctdWkvc3JjL2xpYi9jb21wb25lbnRzL3dvcmtmbG93LWRlc2lnbmVyL3dvcmtmbG93LWRlc2lnbmVyLnN0YXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLFdBQVcsRUFBRSxjQUFjLEVBQUUsTUFBTSxFQUFpQixrQkFBa0IsRUFBMkMsTUFBTSxtQ0FBbUMsQ0FBQzs7QUFZcEssTUFBTSxPQUFPLHFCQUFxQjtJQUNoQyxTQUFTLEdBQW1CLEVBQUUsQ0FBQztJQUMvQixXQUFXLEdBQWtCLElBQUksQ0FBQyxDQUFDLHVDQUF1QztJQUMxRSxXQUFXLEdBQWlCLEVBQUUsQ0FBQztJQUMvQixzQkFBc0IsR0FPbEIsRUFBRSxDQUFDO0lBQ1AsY0FBYyxHQUFrQixJQUFJLENBQUM7SUFDckMsZ0JBQWdCLEdBQWtCLElBQUksQ0FBQztJQUN2QyxVQUFVLEdBQWtCLElBQUksQ0FBQztJQUVqQyxRQUFRLEdBQW9CLElBQUksQ0FBQztJQUNqQyxjQUFjLEdBQTZCLEVBQUUsQ0FBQztJQUM5QyxXQUFXLEdBQWtDLEVBQUUsQ0FBQztJQUNoRCxZQUFZLEdBQW1DLEVBQUUsQ0FBQztJQUVsRCxhQUFhLENBQUMsRUFBVTtRQUN0QixJQUFJLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQztJQUN2QixDQUFDO0lBRU0sZ0JBQWdCLEdBQXdCLElBQUksR0FBRyxFQUFFLENBQUM7SUFFeEMsZUFBZSxHQUE2QjtRQUMzRCxLQUFLLEVBQUUsQ0FBQyxPQUFPLEVBQUUsVUFBVSxFQUFFLFNBQVMsQ0FBQztRQUN2QyxRQUFRLEVBQUUsQ0FBQyxPQUFPLENBQUMsRUFBRSx1Q0FBdUM7UUFDNUQsMkNBQTJDO1FB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eUVBQXlFO1FBQ3pFLElBQUksQ0FBQyxTQUFTLEdBQUc7WUFDZixHQUFHLElBQUksQ0FBQyxTQUFTO1lBQ2pCLElBQUksRUFBRSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1lBQ2xDLFFBQVEsRUFBRSxVQUFVLENBQUMsRUFBRSxJQUFJLEVBQUU7U0FDOUIsQ0FBQztRQUVGLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELGdFQUFnRTtJQUN2RCxjQUFjLEdBQUcsR0FBRyxDQUFDO3dHQTUzQm5CLHFCQUFxQjs0R0FBckIscUJBQXFCLGNBRnBCLE1BQU07OzRGQUVQLHFCQUFxQjtrQkFIakMsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBPYmplY3RTdGF0ZSwgU3RhZ2VBY3RvclJ1bGUsIFN0YXR1cywgU3dpbUxhbmUsIFRhZywgVGFza0Fzc2lnbm1lbnRUeXBlLCBXb3JrZmxvdywgV29ya2Zsb3dBY3Rpb24sIFdvcmtmbG93U3RhZ2UgfSBmcm9tICd2ZXJiZW4td29ya2Zsb3ctdWkvc3JjL2xpYi9tb2RlbHMnO1xuaW1wb3J0IHtcbiAgQ29ubmVjdGlvbixcbiAgQ29ubmVjdGlvblBvaW50LFxuICBOb2RlLFxuICBTd2ltbGFuZUl0ZW0sXG4gIFRvb2xUeXBlLFxufSBmcm9tICcuL3dvcmtmbG93LWRlc2lnbmVyLnR5cGVzJztcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIFdvcmtmbG93RGVzaWduZXJTdGF0ZSB7XG4gIHN3aW1sYW5lczogU3dpbWxhbmVJdGVtW10gPSBbXTtcbiAgc3RhcnROb2RlSWQ6IHN0cmluZyB8IG51bGwgPSBudWxsOyAvLyBUcmFjayB0aGUgSUQgb2YgdGhlIGZpcnN0L3N0YXJ0IG5vZGVcbiAgY29ubmVjdGlvbnM6IENvbm5lY3Rpb25bXSA9IFtdO1xuICBkcmFnZ2luZ0Nvbm5lY3Rpb25EYXRhOiB7XG4gICAgc291cmNlUG9pbnQ/OiBDb25uZWN0aW9uUG9pbnQ7XG4gICAgc291cmNlU3dpbWxhbmVJbmRleD86IG51bWJlcjtcbiAgICBzdGFydFg/OiBudW1iZXI7XG4gICAgc3RhcnRZPzogbnVtYmVyO1xuICAgIGN1cnJlbnRYPzogbnVtYmVyO1xuICAgIGN1cnJlbnRZPzogbnVtYmVyO1xuICB9ID0ge307XG4gIHdvcmtmbG93Rm9ybUlkOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcbiAgd29ya2Zsb3dGb3JtTmFtZTogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gIHdvcmtmbG93SWQ6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuXG4gIHdvcmtmbG93OiBXb3JrZmxvdyB8IG51bGwgPSBudWxsO1xuICBzd2ltbGFuZVJlY29yZDogUmVjb3JkPHN0cmluZywgU3dpbUxhbmU+ID0ge307XG4gIHN0YWdlUmVjb3JkOiBSZWNvcmQ8c3RyaW5nLCBXb3JrZmxvd1N0YWdlPiA9IHt9O1xuICBhY3Rpb25SZWNvcmQ6IFJlY29yZDxzdHJpbmcsIFdvcmtmbG93QWN0aW9uPiA9IHt9O1xuXG4gIHNldFdvcmtmbG93SWQoaWQ6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMud29ya2Zsb3dJZCA9IGlkO1xuICB9XG5cbiAgcHVibGljIGxhbmVJZFRvSW5kZXhNYXA6IE1hcDxzdHJpbmcsIG51bWJlcj4gPSBuZXcgTWFwKCk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBjb25uZWN0aW9uUnVsZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZ1tdPiA9IHtcbiAgICBzdGFnZTogWydzdGFnZScsICdkZWNpc2lvbicsICdzdWJmbG93J10sXG4gICAgZGVjaXNpb246IFsnc3RhZ2UnXSwgLy8gRGVjaXNpb25zIGNhbiBvbmx5IGNvbm5lY3QgdG8gU3RhZ2VzXG4gICAgLy8gJ2FjdGlvbic6IFsnc3RhZ2UnLCAnZm9ybScsICdkZWNpc2lvbiddLFxuICAgIGZvcm06IFtdLFxuICAgIHN1YmZsb3c6IFsnc3RhZ2UnLCAnZGVjaXNpb24nXSxcbiAgfTtcblxuICBzZXRXb3JrZmxvd0Zvcm0oZm9ybUlkOiBzdHJpbmcgfCBudWxsLCBmb3JtTmFtZTogc3RyaW5nIHwgbnVsbCk6IHZvaWQge1xuICAgIHRoaXMud29ya2Zsb3dGb3JtSWQgPSBmb3JtSWQ7XG4gICAgdGhpcy53b3JrZmxvd0Zvcm1OYW1lID0gZm9ybU5hbWU7XG4gICAgY29uc29sZS5sb2codGhpcy53b3JrZmxvd0Zvcm1JZCwgdGhpcy53b3JrZmxvd0Zvcm1OYW1lKTtcbiAgfVxuXG4gIGFkZFN3aW1sYW5lKG5hbWU6IHN0cmluZywgdGFnczogVGFnW10pIHtcbiAgICAvLyBHZW5lcmF0ZSBhIHVuaXF1ZSBrZXkgZm9yIHRoaXMgc3dpbWxhbmVcbiAgICBjb25zdCBzd2ltbGFuZUtleSA9IGBsYW5lLSR7RGF0ZS5ub3coKX0tJHtNYXRoLmZsb29yKFxuICAgICAgTWF0aC5yYW5kb20oKSAqIDEwMDBcbiAgICApfWA7XG5cbiAgICB0aGlzLnN3aW1sYW5lcyA9IHRoaXMuc3dpbWxhbmVzLmNvbmNhdChbXG4gICAgICB7XG4gICAgICAgIG9yZGVyOiB0aGlzLnN3aW1sYW5lcy5sZW5ndGgsXG4gICAgICAgIGxhYmVsOiBuYW1lLFxuICAgICAgICB0YWdzLFxuICAgICAgICBub2RlczogW10sXG4gICAgICAgIGlkOiBzd2ltbGFuZUtleSwgLy8gU3RvcmUgdGhlIGdlbmVyYXRlZCBrZXkgYXMgaWQgZm9yIGZyb250ZW5kIHJlZmVyZW5jZVxuICAgICAgfSxcbiAgICBdKTtcbiAgfVxuXG4gIHJlZ2lzdGVyTGFuZU1hcHBpbmcobGFuZUlkOiBzdHJpbmcsIHN3aW1sYW5lSW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMubGFuZUlkVG9JbmRleE1hcC5zZXQobGFuZUlkLCBzd2ltbGFuZUluZGV4KTtcbiAgfVxuXG4gIC8vIEFkZCB0aGlzIG1ldGhvZCB0byBnZW5lcmF0ZSBjb25uZWN0aW9uIHBvaW50cyBmb3IgYSBub2RlXG4gIGdlbmVyYXRlQ29ubmVjdGlvblBvaW50cyhub2RlOiBOb2RlKTogQ29ubmVjdGlvblBvaW50W10ge1xuICAgIGNvbnN0IHBvaW50czogQ29ubmVjdGlvblBvaW50W10gPSBbXTtcbiAgICBjb25zdCBzcGFjaW5nID0gNTA7IC8vIFNwYWNlIGJldHdlZW4gY29ubmVjdGlvbiBwb2ludHNcblxuICAgIGlmIChub2RlLnR5cGUgPT09ICdzdGFnZScpIHtcbiAgICAgIC8vIFJlY3Rhbmd1bGFyIHNoYXBlcyAtIGFkZCBwb2ludHMgYXJvdW5kIHRoZSByZWN0YW5nbGVcblxuICAgICAgLy8gVG9wIGVkZ2UgcG9pbnRzXG4gICAgICBmb3IgKGxldCB4ID0gc3BhY2luZzsgeCA8IG5vZGUud2lkdGg7IHggKz0gc3BhY2luZykge1xuICAgICAgICBwb2ludHMucHVzaCh7XG4gICAgICAgICAgaWQ6IGAke25vZGUuaWR9LXRvcC0ke3h9YCxcbiAgICAgICAgICBub2RlSWQ6IG5vZGUuaWQsXG4gICAgICAgICAgeDogeCxcbiAgICAgICAgICB5OiAwLFxuICAgICAgICAgIHR5cGU6ICd0b3AnLFxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgLy8gUmlnaHQgZWRnZSBwb2ludHNcbiAgICAgIGZvciAobGV0IHkgPSBzcGFjaW5nOyB5IDwgbm9kZS5oZWlnaHQ7IHkgKz0gc3BhY2luZykge1xuICAgICAgICBwb2ludHMucHVzaCh7XG4gICAgICAgICAgaWQ6IGAke25vZGUuaWR9LXJpZ2h0LSR7eX1gLFxuICAgICAgICAgIG5vZGVJZDogbm9kZS5pZCxcbiAgICAgICAgICB4OiBub2RlLndpZHRoLFxuICAgICAgICAgIHk6IHksXG4gICAgICAgICAgdHlwZTogJ3JpZ2h0JyxcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIC8vIEJvdHRvbSBlZGdlIHBvaW50c1xuICAgICAgZm9yIChsZXQgeCA9IHNwYWNpbmc7IHggPCBub2RlLndpZHRoOyB4ICs9IHNwYWNpbmcpIHtcbiAgICAgICAgcG9pbnRzLnB1c2goe1xuICAgICAgICAgIGlkOiBgJHtub2RlLmlkfS1ib3R0b20tJHt4fWAsXG4gICAgICAgICAgbm9kZUlkOiBub2RlLmlkLFxuICAgICAgICAgIHg6IHgsXG4gICAgICAgICAgeTogbm9kZS5oZWlnaHQsXG4gICAgICAgICAgdHlwZTogJ2JvdHRvbScsXG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICAvLyBMZWZ0IGVkZ2UgcG9pbnRzXG4gICAgICBmb3IgKGxldCB5ID0gc3BhY2luZzsgeSA8IG5vZGUuaGVpZ2h0OyB5ICs9IHNwYWNpbmcpIHtcbiAgICAgICAgcG9pbnRzLnB1c2goe1xuICAgICAgICAgIGlkOiBgJHtub2RlLmlkfS1sZWZ0LSR7eX1gLFxuICAgICAgICAgIG5vZGVJZDogbm9kZS5pZCxcbiAgICAgICAgICB4OiAwLFxuICAgICAgICAgIHk6IHksXG4gICAgICAgICAgdHlwZTogJ2xlZnQnLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKG5vZGUudHlwZSA9PT0gJ2RlY2lzaW9uJykge1xuICAgICAgLy8gRGlhbW9uZCBzaGFwZSAtIGFkZCBwb2ludHMgYXQgdGhlIGZvdXIgY29ybmVyc1xuICAgICAgcG9pbnRzLnB1c2goe1xuICAgICAgICBpZDogYCR7bm9kZS5pZH0tdG9wLTBgLFxuICAgICAgICBub2RlSWQ6IG5vZGUuaWQsXG4gICAgICAgIHg6IG5vZGUud2lkdGggLyAyLFxuICAgICAgICB5OiAwLFxuICAgICAgICB0eXBlOiAndG9wJyxcbiAgICAgIH0pO1xuXG4gICAgICBwb2ludHMucHVzaCh7XG4gICAgICAgIGlkOiBgJHtub2RlLmlkfS1yaWdodC0wYCxcbiAgICAgICAgbm9kZUlkOiBub2RlLmlkLFxuICAgICAgICB4OiBub2RlLndpZHRoLFxuICAgICAgICB5OiBub2RlLmhlaWdodCAvIDIsXG4gICAgICAgIHR5cGU6ICdyaWdodCcsXG4gICAgICB9KTtcblxuICAgICAgcG9pbnRzLnB1c2goe1xuICAgICAgICBpZDogYCR7bm9kZS5pZH0tYm90dG9tLTBgLFxuICAgICAgICBub2RlSWQ6IG5vZGUuaWQsXG4gICAgICAgIHg6IG5vZGUud2lkdGggLyAyLFxuICAgICAgICB5OiBub2RlLmhlaWdodCxcbiAgICAgICAgdHlwZTogJ2JvdHRvbScsXG4gICAgICB9KTtcblxuICAgICAgcG9pbnRzLnB1c2goe1xuICAgICAgICBpZDogYCR7bm9kZS5pZH0tbGVmdC0wYCxcbiAgICAgICAgbm9kZUlkOiBub2RlLmlkLFxuICAgICAgICB4OiAwLFxuICAgICAgICB5OiBub2RlLmhlaWdodCAvIDIsXG4gICAgICAgIHR5cGU6ICdsZWZ0JyxcbiAgICAgIH0pO1xuICAgIH0gZWxzZSBpZiAobm9kZS50eXBlID09PSAnZm9ybScpIHtcbiAgICAgIC8vIEZvcm0gb25seSBoYXMgaW5wdXQgY29ubmVjdGlvbiBwb2ludHMsIG5vIG91dHB1dCBwb2ludHNcblxuICAgICAgLy8gTGVmdCBlZGdlIHBvaW50cyAoZm9yIGlucHV0IGNvbm5lY3Rpb25zKVxuICAgICAgZm9yIChsZXQgeSA9IHNwYWNpbmc7IHkgPCBub2RlLmhlaWdodDsgeSArPSBzcGFjaW5nKSB7XG4gICAgICAgIHBvaW50cy5wdXNoKHtcbiAgICAgICAgICBpZDogYCR7bm9kZS5pZH0tbGVmdC0ke3l9YCxcbiAgICAgICAgICBub2RlSWQ6IG5vZGUuaWQsXG4gICAgICAgICAgeDogMCxcbiAgICAgICAgICB5OiB5LFxuICAgICAgICAgIHR5cGU6ICdsZWZ0JyxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChub2RlLnR5cGUgPT09ICdzdWJmbG93Jykge1xuICAgICAgLy8gSGV4YWdvbiBzaGFwZSAtIGFkZCBwb2ludHMgYXQgdGhlIHNpeCBjb3JuZXJzXG4gICAgICBwb2ludHMucHVzaCh7XG4gICAgICAgIGlkOiBgJHtub2RlLmlkfS10b3AtMGAsXG4gICAgICAgIG5vZGVJZDogbm9kZS5pZCxcbiAgICAgICAgeDogbm9kZS53aWR0aCAvIDIsXG4gICAgICAgIHk6IDAsXG4gICAgICAgIHR5cGU6ICd0b3AnLFxuICAgICAgfSk7XG5cbiAgICAgIHBvaW50cy5wdXNoKHtcbiAgICAgICAgaWQ6IGAke25vZGUuaWR9LXJpZ2h0LXRvcGAsXG4gICAgICAgIG5vZGVJZDogbm9kZS5pZCxcbiAgICAgICAgeDogbm9kZS53aWR0aCxcbiAgICAgICAgeTogbm9kZS5oZWlnaHQgLyA0LFxuICAgICAgICB0eXBlOiAncmlnaHQnLFxuICAgICAgfSk7XG5cbiAgICAgIHBvaW50cy5wdXNoKHtcbiAgICAgICAgaWQ6IGAke25vZGUuaWR9LXJpZ2h0LWJvdHRvbWAsXG4gICAgICAgIG5vZGVJZDogbm9kZS5pZCxcbiAgICAgICAgeDogbm9kZS53aWR0aCxcbiAgICAgICAgeTogKG5vZGUuaGVpZ2h0ICogMykgLyA0LFxuICAgICAgICB0eXBlOiAncmlnaHQnLFxuICAgICAgfSk7XG5cbiAgICAgIHBvaW50cy5wdXNoKHtcbiAgICAgICAgaWQ6IGAke25vZGUuaWR9LWJvdHRvbS0wYCxcbiAgICAgICAgbm9kZUlkOiBub2RlLmlkLFxuICAgICAgICB4OiBub2RlLndpZHRoIC8gMixcbiAgICAgICAgeTogbm9kZS5oZWlnaHQsXG4gICAgICAgIHR5cGU6ICdib3R0b20nLFxuICAgICAgfSk7XG5cbiAgICAgIHBvaW50cy5wdXNoKHtcbiAgICAgICAgaWQ6IGAke25vZGUuaWR9LWxlZnQtYm90dG9tYCxcbiAgICAgICAgbm9kZUlkOiBub2RlLmlkLFxuICAgICAgICB4OiAwLFxuICAgICAgICB5OiAobm9kZS5oZWlnaHQgKiAzKSAvIDQsXG4gICAgICAgIHR5cGU6ICdsZWZ0JyxcbiAgICAgIH0pO1xuXG4gICAgICBwb2ludHMucHVzaCh7XG4gICAgICAgIGlkOiBgJHtub2RlLmlkfS1sZWZ0LXRvcGAsXG4gICAgICAgIG5vZGVJZDogbm9kZS5pZCxcbiAgICAgICAgeDogMCxcbiAgICAgICAgeTogbm9kZS5oZWlnaHQgLyA0LFxuICAgICAgICB0eXBlOiAnbGVmdCcsXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcG9pbnRzO1xuICB9XG5cbiAgYWRkTm9kZShcbiAgICBzd2ltbGFuZUluZGV4OiBudW1iZXIsXG4gICAgdHlwZTogVG9vbFR5cGUsXG4gICAgeDogbnVtYmVyLFxuICAgIHk6IG51bWJlcixcbiAgICBzdGFnZURhdGE/OiBQYXJ0aWFsPFdvcmtmbG93U3RhZ2U+LFxuICAgIHdvcmtmbG93RGF0YT86IHsgaWQ6IHN0cmluZzsgbmFtZTogc3RyaW5nIH0sXG4gICAgdXNlRXhpc3RpbmdJZDogYm9vbGVhbiA9IGZhbHNlXG4gICkge1xuICAgIGlmIChcbiAgICAgICF0aGlzLnN3aW1sYW5lc1tzd2ltbGFuZUluZGV4XSB8fFxuICAgICAgIXR5cGUgfHxcbiAgICAgICh0eXBlICE9PSAnc3RhZ2UnICYmXG4gICAgICAgIHR5cGUgIT09ICdkZWNpc2lvbicgJiZcbiAgICAgICAgdHlwZSAhPT0gJ2Zvcm0nICYmXG4gICAgICAgIHR5cGUgIT09ICdzdWJmbG93JylcbiAgICApIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIC8vIEFkanVzdCBwb3NpdGlvbiByZWxhdGl2ZSB0byBzd2ltbGFuZVxuICAgIGNvbnN0IGFkanVzdGVkWSA9IHkgLSBzd2ltbGFuZUluZGV4ICogMjYzOyAvLyBTdWJ0cmFjdGluZyBoZWFkZXIgaGVpZ2h0XG5cbiAgICAvLyBHZW5lcmF0ZSBhIHVuaXF1ZSBJRCBvciB1c2UgZXhpc3RpbmdcbiAgICBjb25zdCBpZCA9XG4gICAgICB1c2VFeGlzdGluZ0lkICYmIHN0YWdlRGF0YT8uQ29kZVxuICAgICAgICA/IHN0YWdlRGF0YS5Db2RlXG4gICAgICAgIDogYCR7dHlwZX0tJHtEYXRlLm5vdygpfS0ke01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIDEwMDApfWA7XG5cbiAgICAvLyBDcmVhdGUgbm9kZSB3aXRoIGRpbWVuc2lvbnMgYmFzZWQgb24gdHlwZVxuICAgIGNvbnN0IG5vZGU6IE5vZGUgPSB7XG4gICAgICBpZCxcbiAgICAgIHR5cGUsXG4gICAgICB4LFxuICAgICAgeTogYWRqdXN0ZWRZLFxuICAgICAgd2lkdGg6IHR5cGUgPT09ICdzdWJmbG93JyA/IDE1MCA6IDE2OSwgLy8gV2lkdGggZnJvbSBTVkdcbiAgICAgIGhlaWdodDogMTAwLCAvLyBIZWlnaHQgZnJvbSBTVkdcbiAgICAgIGlzU3RhcnROb2RlOiBmYWxzZSwgLy8gRGVmYXVsdCB0byBmYWxzZVxuICAgICAgc3RhZ2VEYXRhOiBzdGFnZURhdGEgfHwge30sIC8vIFN0b3JlIHN0YWdlIGRhdGFcbiAgICAgIHdvcmtmbG93RGF0YTogd29ya2Zsb3dEYXRhIHx8IG51bGwsXG4gICAgfTtcblxuICAgIC8vIElmIHRoaXMgaXMgdGhlIGZpcnN0IG5vZGUgaW4gdGhlIGVudGlyZSB3b3JrZmxvdywgbWFyayBpdCBhcyB0aGUgc3RhcnQgbm9kZVxuICAgIGlmICh0aGlzLmdldE5vZGVDb3VudCgpID09PSAwKSB7XG4gICAgICBub2RlLmlzU3RhcnROb2RlID0gdHJ1ZTtcbiAgICAgIHRoaXMuc3RhcnROb2RlSWQgPSBpZDtcbiAgICB9XG5cbiAgICAvLyBHZW5lcmF0ZSBjb25uZWN0aW9uIHBvaW50cyBmb3IgdGhlIG5vZGVcbiAgICBub2RlLmNvbm5lY3Rpb25Qb2ludHMgPSB0aGlzLmdlbmVyYXRlQ29ubmVjdGlvblBvaW50cyhub2RlKTtcblxuICAgIC8vIEFkZCBub2RlIHRvIHRoZSBzd2ltbGFuZVxuICAgIGlmICghdGhpcy5zd2ltbGFuZXNbc3dpbWxhbmVJbmRleF0ubm9kZXMpIHtcbiAgICAgIHRoaXMuc3dpbWxhbmVzW3N3aW1sYW5lSW5kZXhdLm5vZGVzID0gW107XG4gICAgfVxuICAgIHRoaXMuc3dpbWxhbmVzW3N3aW1sYW5lSW5kZXhdLm5vZGVzLnB1c2gobm9kZSk7XG5cbiAgICByZXR1cm4gbm9kZTtcbiAgfVxuXG4gIC8vIEhlbHBlciB0byBnZXQgdG90YWwgbm9kZSBjb3VudCBhY3Jvc3MgYWxsIHN3aW1sYW5lc1xuICBnZXROb2RlQ291bnQoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5zd2ltbGFuZXMucmVkdWNlKFxuICAgICAgKGNvdW50LCBzd2ltbGFuZSkgPT4gY291bnQgKyAoc3dpbWxhbmUubm9kZXM/Lmxlbmd0aCB8fCAwKSxcbiAgICAgIDBcbiAgICApO1xuICB9XG5cbiAgLy8gRmluZCBhIG5vZGUgYnkgSUQgKHVzZWZ1bCBmb3IgbGF0ZXIgb3BlcmF0aW9ucylcbiAgZmluZE5vZGVCeUlkKGlkOiBzdHJpbmcpOiB7IG5vZGU6IE5vZGU7IHN3aW1sYW5lSW5kZXg6IG51bWJlciB9IHwgbnVsbCB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnN3aW1sYW5lcy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3Qgc3dpbWxhbmUgPSB0aGlzLnN3aW1sYW5lc1tpXTtcbiAgICAgIGNvbnN0IG5vZGUgPSBzd2ltbGFuZS5ub2Rlcz8uZmluZCgobikgPT4gbi5pZCA9PT0gaWQpO1xuICAgICAgaWYgKG5vZGUpIHtcbiAgICAgICAgcmV0dXJuIHsgbm9kZSwgc3dpbWxhbmVJbmRleDogaSB9O1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8vIEZpbmQgYSBub2RlIGJ5IElEICh1c2VmdWwgZm9yIGxhdGVyIG9wZXJhdGlvbnMpXG4gIGZpbmRBY3Rpb25CeUlkKGNvbm5lY3Rpb25JZDogc3RyaW5nKTogQ29ubmVjdGlvbiB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLmNvbm5lY3Rpb25zLmZpbmQoKHsgaWQgfSkgPT4gaWQgPT09IGNvbm5lY3Rpb25JZCkgPz8gbnVsbDtcbiAgfVxuXG4gIHN0YXJ0Q29ubmVjdGlvbkRyYWcoXG4gICAgcG9pbnQ6IENvbm5lY3Rpb25Qb2ludCxcbiAgICBzd2ltbGFuZUluZGV4OiBudW1iZXIsXG4gICAgZ2xvYmFsWDogbnVtYmVyLFxuICAgIGdsb2JhbFk6IG51bWJlclxuICApIHtcbiAgICB0aGlzLmRyYWdnaW5nQ29ubmVjdGlvbkRhdGEgPSB7XG4gICAgICBzb3VyY2VQb2ludDogcG9pbnQsXG4gICAgICBzb3VyY2VTd2ltbGFuZUluZGV4OiBzd2ltbGFuZUluZGV4LFxuICAgICAgc3RhcnRYOiBnbG9iYWxYLFxuICAgICAgc3RhcnRZOiBnbG9iYWxZLFxuICAgICAgY3VycmVudFg6IGdsb2JhbFgsXG4gICAgICBjdXJyZW50WTogZ2xvYmFsWSxcbiAgICB9O1xuICB9XG5cbiAgdXBkYXRlQ29ubmVjdGlvbkRyYWcoY3VycmVudFg6IG51bWJlciwgY3VycmVudFk6IG51bWJlcikge1xuICAgIGlmICh0aGlzLmRyYWdnaW5nQ29ubmVjdGlvbkRhdGEuc291cmNlUG9pbnQpIHtcbiAgICAgIHRoaXMuZHJhZ2dpbmdDb25uZWN0aW9uRGF0YS5jdXJyZW50WCA9IGN1cnJlbnRYO1xuICAgICAgdGhpcy5kcmFnZ2luZ0Nvbm5lY3Rpb25EYXRhLmN1cnJlbnRZID0gY3VycmVudFk7XG4gICAgfVxuICB9XG5cbiAgZW5kQ29ubmVjdGlvbkRyYWcoKSB7XG4gICAgY29uc29sZS5sb2coJ0VuZGluZyBjb25uZWN0aW9uIGRyYWcsIGNsZWFyaW5nIGRhdGEnKTtcbiAgICAvLyBDbGVhciBkcmFnZ2luZyBkYXRhXG4gICAgdGhpcy5kcmFnZ2luZ0Nvbm5lY3Rpb25EYXRhID0ge307XG4gIH1cblxuICBpc0Nvbm5lY3Rpb25EcmFnZ2luZygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISF0aGlzLmRyYWdnaW5nQ29ubmVjdGlvbkRhdGEuc291cmNlUG9pbnQ7XG4gIH1cblxuICBnZXRDb25uZWN0aW9uUGF0aERhdGEoKToge1xuICAgIHN0YXJ0WDogbnVtYmVyO1xuICAgIHN0YXJ0WTogbnVtYmVyO1xuICAgIGVuZFg6IG51bWJlcjtcbiAgICBlbmRZOiBudW1iZXI7XG4gICAgc291cmNlU3dpbWxhbmVJbmRleDogbnVtYmVyO1xuICB9IHwgbnVsbCB7XG4gICAgaWYgKCF0aGlzLmRyYWdnaW5nQ29ubmVjdGlvbkRhdGEuc291cmNlUG9pbnQpIHJldHVybiBudWxsO1xuXG4gICAgY29uc3QgeyBzb3VyY2VQb2ludCwgc291cmNlU3dpbWxhbmVJbmRleCwgY3VycmVudFgsIGN1cnJlbnRZIH0gPVxuICAgICAgdGhpcy5kcmFnZ2luZ0Nvbm5lY3Rpb25EYXRhO1xuICAgIGNvbnN0IG5vZGUgPSB0aGlzLmZpbmROb2RlQnlJZChzb3VyY2VQb2ludC5ub2RlSWQpPy5ub2RlO1xuXG4gICAgaWYgKCFub2RlIHx8IHNvdXJjZVN3aW1sYW5lSW5kZXggPT09IHVuZGVmaW5lZCkgcmV0dXJuIG51bGw7XG5cbiAgICAvLyBDYWxjdWxhdGUgc3RhcnQgcG9pbnQgaW4gZ2xvYmFsIGNvb3JkaW5hdGVzXG4gICAgY29uc3Qgc3RhcnRYID0gbm9kZS54ICsgc291cmNlUG9pbnQueDtcbiAgICBjb25zdCBzdGFydFkgPSBub2RlLnkgKyBzb3VyY2VQb2ludC55ICsgc291cmNlU3dpbWxhbmVJbmRleCAqIDI2MzsgLy8gQWRkIHN3aW1sYW5lIG9mZnNldFxuXG4gICAgcmV0dXJuIHtcbiAgICAgIHN0YXJ0WCxcbiAgICAgIHN0YXJ0WSxcbiAgICAgIGVuZFg6IGN1cnJlbnRYID8/IHN0YXJ0WCxcbiAgICAgIGVuZFk6IGN1cnJlbnRZID8/IHN0YXJ0WSxcbiAgICAgIHNvdXJjZVN3aW1sYW5lSW5kZXgsXG4gICAgfTtcbiAgfVxuXG4gIGNyZWF0ZUNvbm5lY3Rpb24oXG4gICAgdGFyZ2V0Tm9kZUlkOiBzdHJpbmcsXG4gICAgdGFyZ2V0UG9pbnRJZDogc3RyaW5nLFxuICAgIHRhcmdldFN3aW1sYW5lSW5kZXg6IG51bWJlclxuICApOiBDb25uZWN0aW9uIHwgbnVsbCB7XG4gICAgY29uc3QgeyBzb3VyY2VQb2ludCwgc291cmNlU3dpbWxhbmVJbmRleCB9ID0gdGhpcy5kcmFnZ2luZ0Nvbm5lY3Rpb25EYXRhO1xuXG4gICAgaWYgKCFzb3VyY2VQb2ludCB8fCBzb3VyY2VTd2ltbGFuZUluZGV4ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ01pc3Npbmcgc291cmNlIGRhdGEgZm9yIGNvbm5lY3Rpb24nKTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IGNvbm5lY3Rpb246IENvbm5lY3Rpb24gPSB7XG4gICAgICBpZDogYGNvbm4tJHtEYXRlLm5vdygpfS0ke01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIDEwMDApfWAsXG4gICAgICBzb3VyY2VOb2RlSWQ6IHNvdXJjZVBvaW50Lm5vZGVJZCxcbiAgICAgIHRhcmdldE5vZGVJZDogdGFyZ2V0Tm9kZUlkLFxuICAgICAgc291cmNlUG9pbnRJZDogc291cmNlUG9pbnQuaWQsXG4gICAgICB0YXJnZXRQb2ludElkOiB0YXJnZXRQb2ludElkLFxuICAgICAgc291cmNlU3dpbWxhbmVJbmRleDogc291cmNlU3dpbWxhbmVJbmRleCxcbiAgICAgIHRhcmdldFN3aW1sYW5lSW5kZXg6IHRhcmdldFN3aW1sYW5lSW5kZXgsXG4gICAgICBsYWJlbDogJycsXG4gICAgICBhY3Rpb246IG51bGwsXG4gICAgfTtcblxuICAgIHRoaXMuY29ubmVjdGlvbnMucHVzaChjb25uZWN0aW9uKTtcbiAgICBjb25zb2xlLmxvZygnQ3JlYXRlZCBjb25uZWN0aW9uOicsIGNvbm5lY3Rpb24pO1xuICAgIGNvbnNvbGUubG9nKFxuICAgICAgJ0Nvbm5lY3Rpb25zIGFycmF5IG5vdyBoYXMnLFxuICAgICAgdGhpcy5jb25uZWN0aW9ucy5sZW5ndGgsXG4gICAgICAnY29ubmVjdGlvbnMnXG4gICAgKTtcbiAgICByZXR1cm4gY29ubmVjdGlvbjtcbiAgfVxuXG4gIC8vIEFkZCBhIG1ldGhvZCB0byBnZXQgY29ubmVjdGlvbiBkYXRhIGZvciByZW5kZXJpbmdcbiAgZ2V0Q29ubmVjdGlvbkRhdGEoY29ubmVjdGlvbjogQ29ubmVjdGlvbik6IHtcbiAgICBzdGFydFg6IG51bWJlcjtcbiAgICBzdGFydFk6IG51bWJlcjtcbiAgICBlbmRYOiBudW1iZXI7XG4gICAgZW5kWTogbnVtYmVyO1xuICAgIHNvdXJjZVN3aW1sYW5lSW5kZXg6IG51bWJlcjtcbiAgICB0YXJnZXRTd2ltbGFuZUluZGV4OiBudW1iZXI7XG4gIH0gfCBudWxsIHtcbiAgICBjb25zdCBzb3VyY2VOb2RlSW5mbyA9IHRoaXMuZmluZE5vZGVCeUlkKGNvbm5lY3Rpb24uc291cmNlTm9kZUlkKTtcbiAgICBjb25zdCB0YXJnZXROb2RlSW5mbyA9IHRoaXMuZmluZE5vZGVCeUlkKGNvbm5lY3Rpb24udGFyZ2V0Tm9kZUlkKTtcblxuICAgIGlmICghc291cmNlTm9kZUluZm8gfHwgIXRhcmdldE5vZGVJbmZvKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCBzb3VyY2VOb2RlID0gc291cmNlTm9kZUluZm8ubm9kZTtcbiAgICBjb25zdCB0YXJnZXROb2RlID0gdGFyZ2V0Tm9kZUluZm8ubm9kZTtcblxuICAgIC8vIEZpbmQgY29ubmVjdGlvbiBwb2ludHNcbiAgICBjb25zdCBzb3VyY2VQb2ludCA9IHNvdXJjZU5vZGUuY29ubmVjdGlvblBvaW50cz8uZmluZChcbiAgICAgIChwKSA9PiBwLmlkID09PSBjb25uZWN0aW9uLnNvdXJjZVBvaW50SWRcbiAgICApO1xuICAgIGNvbnN0IHRhcmdldFBvaW50ID0gdGFyZ2V0Tm9kZS5jb25uZWN0aW9uUG9pbnRzPy5maW5kKFxuICAgICAgKHApID0+IHAuaWQgPT09IGNvbm5lY3Rpb24udGFyZ2V0UG9pbnRJZFxuICAgICk7XG5cbiAgICBpZiAoIXNvdXJjZVBvaW50IHx8ICF0YXJnZXRQb2ludCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgLy8gQ2FsY3VsYXRlIGdsb2JhbCBjb29yZGluYXRlc1xuICAgIGNvbnN0IHN0YXJ0WCA9IHNvdXJjZU5vZGUueCArIHNvdXJjZVBvaW50Lng7XG4gICAgY29uc3Qgc3RhcnRZID1cbiAgICAgIHNvdXJjZU5vZGUueSArIHNvdXJjZVBvaW50LnkgKyBjb25uZWN0aW9uLnNvdXJjZVN3aW1sYW5lSW5kZXggKiAyNjM7XG5cbiAgICBjb25zdCBlbmRYID0gdGFyZ2V0Tm9kZS54ICsgdGFyZ2V0UG9pbnQueDtcbiAgICBjb25zdCBlbmRZID1cbiAgICAgIHRhcmdldE5vZGUueSArIHRhcmdldFBvaW50LnkgKyBjb25uZWN0aW9uLnRhcmdldFN3aW1sYW5lSW5kZXggKiAyNjM7XG5cbiAgICByZXR1cm4ge1xuICAgICAgc3RhcnRYLFxuICAgICAgc3RhcnRZLFxuICAgICAgZW5kWCxcbiAgICAgIGVuZFksXG4gICAgICBzb3VyY2VTd2ltbGFuZUluZGV4OiBjb25uZWN0aW9uLnNvdXJjZVN3aW1sYW5lSW5kZXgsXG4gICAgICB0YXJnZXRTd2ltbGFuZUluZGV4OiBjb25uZWN0aW9uLnRhcmdldFN3aW1sYW5lSW5kZXgsXG4gICAgfTtcbiAgfVxuXG4gIC8vIEFkZCBhIG1ldGhvZCB0byBjaGVjayBpZiBhIGNvbm5lY3Rpb24gaXMgYWxsb3dlZCBiYXNlZCBvbiBub2RlIHR5cGVzXG4gIGNhbkNvbm5lY3Qoc291cmNlTm9kZVR5cGU6IHN0cmluZywgdGFyZ2V0Tm9kZVR5cGU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLmNvbm5lY3Rpb25SdWxlc1tzb3VyY2VOb2RlVHlwZV0/LmluY2x1ZGVzKHRhcmdldE5vZGVUeXBlKSB8fCBmYWxzZVxuICAgICk7XG4gIH1cblxuICAvLyBBZGQgYSBtZXRob2QgdG8gZ2V0IGFsbG93ZWQgbm9kZSB0eXBlcyBmb3IgdGhlIGN1cnJlbnQgZHJhZ2dpbmcgY29ubmVjdGlvblxuICBnZXRBbGxvd2VkVGFyZ2V0Tm9kZVR5cGVzKCk6IHN0cmluZ1tdIHtcbiAgICBpZiAoIXRoaXMuZHJhZ2dpbmdDb25uZWN0aW9uRGF0YS5zb3VyY2VQb2ludCkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIGNvbnN0IHNvdXJjZU5vZGVJbmZvID0gdGhpcy5maW5kTm9kZUJ5SWQoXG4gICAgICB0aGlzLmRyYWdnaW5nQ29ubmVjdGlvbkRhdGEuc291cmNlUG9pbnQubm9kZUlkXG4gICAgKTtcbiAgICBpZiAoIXNvdXJjZU5vZGVJbmZvKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgY29uc3Qgc291cmNlTm9kZVR5cGUgPSBzb3VyY2VOb2RlSW5mby5ub2RlLnR5cGU7XG5cbiAgICByZXR1cm4gdGhpcy5jb25uZWN0aW9uUnVsZXNbc291cmNlTm9kZVR5cGVdIHx8IFtdO1xuICB9XG5cbiAgdXBkYXRlU3dpbWxhbmUoaW5kZXg6IG51bWJlciwgbmFtZTogc3RyaW5nLCB0YWdzOiBUYWdbXSkge1xuICAgIGNvbnNvbGUubG9nKFxuICAgICAgJ1N0YXRlOiBVcGRhdGluZyBzd2ltbGFuZSBhdCBpbmRleCcsXG4gICAgICBpbmRleCxcbiAgICAgICd3aXRoIG5hbWUnLFxuICAgICAgbmFtZSxcbiAgICAgICdhbmQgdGFncycsXG4gICAgICB0YWdzXG4gICAgKTtcblxuICAgIGlmIChpbmRleCA+PSAwICYmIGluZGV4IDwgdGhpcy5zd2ltbGFuZXMubGVuZ3RoKSB7XG4gICAgICB0aGlzLnN3aW1sYW5lc1tpbmRleF0gPSB7XG4gICAgICAgIC4uLnRoaXMuc3dpbWxhbmVzW2luZGV4XSxcbiAgICAgICAgbGFiZWw6IG5hbWUsXG4gICAgICAgIHRhZ3M6IHRhZ3MsXG4gICAgICB9O1xuICAgICAgY29uc29sZS5sb2coJ1N3aW1sYW5lIHVwZGF0ZWQ6JywgdGhpcy5zd2ltbGFuZXNbaW5kZXhdKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc29sZS5lcnJvcignSW52YWxpZCBzd2ltbGFuZSBpbmRleDonLCBpbmRleCk7XG4gICAgfVxuICB9XG5cbiAgdHJhbnNmb3JtVG9Xb3JrZmxvd01vZGVsKCk6IFdvcmtmbG93IHtcbiAgICAvLyBVc2Ugc3RvcmVkIHdvcmtmbG93IGlmIGF2YWlsYWJsZSwgb3RoZXJ3aXNlIGNyZWF0ZSBhIG5ldyBvbmVcbiAgICBjb25zdCB3b3JrZmxvdzogV29ya2Zsb3cgPSB0aGlzLndvcmtmbG93XG4gICAgICA/IHsgLi4udGhpcy53b3JrZmxvdywgRGF0YVN0YXRlOiBPYmplY3RTdGF0ZS5DaGFuZ2VkIH1cbiAgICAgIDoge1xuICAgICAgICAvLyBCYXNlTW9kZWwgcHJvcGVydGllc1xuICAgICAgICBJZDogJycsXG4gICAgICAgIENvZGU6ICcnLFxuICAgICAgICBUZW5hbnRJZDogJycsXG4gICAgICAgIGlkOiAnJyxcbiAgICAgICAgU2VydmljZU5hbWU6ICcnLFxuICAgICAgICBDcmVhdGVkQXQ6IG5ldyBEYXRlKCksXG4gICAgICAgIFVwZGF0ZWRBdDogbmV3IERhdGUoKSxcbiAgICAgICAgRGF0YVN0YXRlOiB0aGlzLndhc0xvYWRlZEZyb21BcGkodGhpcy53b3JrZmxvd0lkIHx8ICcnKVxuICAgICAgICAgID8gT2JqZWN0U3RhdGUuQ2hhbmdlZFxuICAgICAgICAgIDogT2JqZWN0U3RhdGUuTmV3LFxuXG4gICAgICAgIC8vIFdvcmtmbG93IHNwZWNpZmljIHByb3BlcnRpZXNcbiAgICAgICAgTmFtZTogJ05ldyBXb3JrZmxvdycsXG4gICAgICAgIERlc2NyaXB0aW9uOiAnJyxcbiAgICAgICAgU3RhZ2VFbnRyeVJ1bGU6ICcnLFxuICAgICAgICBGb3JtOiB0aGlzLndvcmtmbG93Rm9ybUlkIHx8IHVuZGVmaW5lZCxcbiAgICAgICAgQXNzaWdubWVudFR5cGU6IFRhc2tBc3NpZ25tZW50VHlwZS5BdXRvUm91dGUsXG4gICAgICAgIE9wZXJhdGlvbjogJycsXG4gICAgICAgIFN0YXR1czogU3RhdHVzLkFjdGl2ZSxcbiAgICAgICAgQWN0aW9uczogW10sXG4gICAgICAgIExhbmVzOiBbXSxcbiAgICAgICAgU3RhZ2VzOiBbXSxcbiAgICAgIH07XG5cbiAgICAvLyBVcGRhdGUgd29ya2Zsb3cgZm9ybSBpZiBjaGFuZ2VkXG4gICAgaWYgKHRoaXMud29ya2Zsb3dGb3JtSWQgIT09IHRoaXMud29ya2Zsb3c/LkZvcm0pIHtcbiAgICAgIHdvcmtmbG93LkZvcm0gPSB0aGlzLndvcmtmbG93Rm9ybUlkIHx8IHdvcmtmbG93LkZvcm07XG4gICAgfVxuXG4gICAgLy8gVHJhbnNmb3JtIHN3aW1sYW5lcyB0byBTd2ltTGFuZVtdXG4gICAgd29ya2Zsb3cuTGFuZXMgPSB0aGlzLnN3aW1sYW5lcy5tYXAoKHN3aW1sYW5lKSA9PiB7XG4gICAgICAvLyBDaGVjayBpZiB0aGlzIGlzIGFuIGV4aXN0aW5nIHN3aW1sYW5lXG4gICAgICBpZiAoc3dpbWxhbmUuaWQgJiYgdGhpcy5zd2ltbGFuZVJlY29yZFtzd2ltbGFuZS5pZF0pIHtcbiAgICAgICAgLy8gVXBkYXRlIGV4aXN0aW5nIGxhbmUgd2l0aCBjaGFuZ2VkIHZhbHVlc1xuICAgICAgICBjb25zdCBleGlzdGluZ0xhbmUgPSB0aGlzLnN3aW1sYW5lUmVjb3JkW3N3aW1sYW5lLmlkXTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAuLi5leGlzdGluZ0xhbmUsXG4gICAgICAgICAgTmFtZTogc3dpbWxhbmUubGFiZWwsXG4gICAgICAgICAgVGFnczogc3dpbWxhbmUudGFncyxcbiAgICAgICAgICBQb3NpdGlvbjogc3dpbWxhbmUub3JkZXIsXG4gICAgICAgICAgQ29vcmRpbmF0ZXM6IHsgWDogMCwgWTogc3dpbWxhbmUub3JkZXIgKiAyNjMgfSxcbiAgICAgICAgICBEYXRhU3RhdGU6IE9iamVjdFN0YXRlLkNoYW5nZWQsXG4gICAgICAgICAgVXBkYXRlZEF0OiBuZXcgRGF0ZSgpLFxuICAgICAgICB9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gR2VuZXJhdGUgYSBuZXcgSUQgZm9yIG5ldyBzd2ltbGFuZXMgaWYgbm90IGFscmVhZHkgc2V0XG4gICAgICAgIGNvbnN0IGxhbmVJZCA9XG4gICAgICAgICAgc3dpbWxhbmUuaWQgfHxcbiAgICAgICAgICBgbGFuZS0ke0RhdGUubm93KCl9LSR7TWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogMTAwMCl9YDtcblxuICAgICAgICAvLyBDcmVhdGUgbmV3IGxhbmVcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBDb2RlOiAnJyxcbiAgICAgICAgICBJZDogJycsXG4gICAgICAgICAgVGVuYW50SWQ6ICcnLFxuICAgICAgICAgIC8vIGlkOiBsYW5lSWQsXG4gICAgICAgICAgaWQ6ICcnLFxuICAgICAgICAgIFNlcnZpY2VOYW1lOiAnJyxcbiAgICAgICAgICBDcmVhdGVkQXQ6IG5ldyBEYXRlKCksXG4gICAgICAgICAgVXBkYXRlZEF0OiBuZXcgRGF0ZSgpLFxuICAgICAgICAgIERhdGFTdGF0ZTogT2JqZWN0U3RhdGUuTmV3LFxuICAgICAgICAgIFdvcmtmbG93OiB3b3JrZmxvdy5Db2RlLFxuICAgICAgICAgIE5hbWU6IHN3aW1sYW5lLmxhYmVsLFxuICAgICAgICAgIFRhZ3M6IHN3aW1sYW5lLnRhZ3MgfHwgW10sXG4gICAgICAgICAgUG9zaXRpb246IHN3aW1sYW5lLm9yZGVyLFxuICAgICAgICAgIENvb3JkaW5hdGVzOiB7IFg6IDAsIFk6IHN3aW1sYW5lLm9yZGVyICogMjYzIH0sXG4gICAgICAgICAgU2l6ZTogeyBXaWR0aDogMzAwMCwgSGVpZ2h0OiAyNjMgfSxcbiAgICAgICAgICBLZXk6IHN3aW1sYW5lLmlkLFxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgLy8gVHJhbnNmb3JtIG5vZGVzIHRvIFdvcmtmbG93U3RhZ2VbXVxuICAgIGNvbnN0IHN0YWdlczogV29ya2Zsb3dTdGFnZVtdID0gW107XG5cbiAgICB0aGlzLnN3aW1sYW5lcy5mb3JFYWNoKChzd2ltbGFuZSwgc3dpbWxhbmVJbmRleCkgPT4ge1xuICAgICAgc3dpbWxhbmUubm9kZXM/LmZvckVhY2goKG5vZGUpID0+IHtcbiAgICAgICAgaWYgKG5vZGUudHlwZSA9PT0gJ3N0YWdlJyB8fCBub2RlLnR5cGUgPT09ICdzdWJmbG93Jykge1xuICAgICAgICAgIGNvbnNvbGUubG9nKG5vZGUpO1xuICAgICAgICAgIC8vIENoZWNrIGlmIHRoaXMgaXMgYW4gZXhpc3Rpbmcgc3RhZ2VcbiAgICAgICAgICBpZiAodGhpcy5zdGFnZVJlY29yZFtub2RlLmlkXSkge1xuICAgICAgICAgICAgLy8gVXBkYXRlIGV4aXN0aW5nIHN0YWdlIHdpdGggY2hhbmdlZCB2YWx1ZXNcbiAgICAgICAgICAgIGNvbnN0IGV4aXN0aW5nU3RhZ2UgPSB0aGlzLnN0YWdlUmVjb3JkW25vZGUuaWRdO1xuXG4gICAgICAgICAgICAvLyBDcmVhdGUgYSBuZXcgb2JqZWN0IHdpdGggdXBkYXRlZCBwcm9wZXJ0aWVzXG4gICAgICAgICAgICBjb25zdCB1cGRhdGVkU3RhZ2U6IFdvcmtmbG93U3RhZ2UgPSB7XG4gICAgICAgICAgICAgIC4uLmV4aXN0aW5nU3RhZ2UsXG4gICAgICAgICAgICAgIERhdGFTdGF0ZTogT2JqZWN0U3RhdGUuQ2hhbmdlZCxcbiAgICAgICAgICAgICAgVXBkYXRlZEF0OiBuZXcgRGF0ZSgpLFxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgLy8gVXBkYXRlIHByb3BlcnRpZXMgdGhhdCBtYXkgaGF2ZSBjaGFuZ2VkXG4gICAgICAgICAgICBpZiAobm9kZS5zdGFnZURhdGE/Lk5hbWUgIT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgdXBkYXRlZFN0YWdlLk5hbWUgPVxuICAgICAgICAgICAgICAgIG5vZGUud29ya2Zsb3dEYXRhPy5uYW1lID8/IG5vZGUuc3RhZ2VEYXRhLk5hbWU7XG4gICAgICAgICAgICBpZiAobm9kZS5zdGFnZURhdGE/LkRlc2NyaXB0aW9uICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgIHVwZGF0ZWRTdGFnZS5EZXNjcmlwdGlvbiA9IG5vZGUuc3RhZ2VEYXRhLkRlc2NyaXB0aW9uO1xuICAgICAgICAgICAgaWYgKG5vZGUuc3RhZ2VEYXRhPy5EdXJhdGlvbiAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICB1cGRhdGVkU3RhZ2UuRHVyYXRpb24gPSBub2RlLnN0YWdlRGF0YS5EdXJhdGlvbjtcbiAgICAgICAgICAgIGlmIChub2RlLnN0YWdlRGF0YT8uUGFzc09uUnVsZSAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICB1cGRhdGVkU3RhZ2UuUGFzc09uUnVsZSA9IG5vZGUuc3RhZ2VEYXRhLlBhc3NPblJ1bGU7XG4gICAgICAgICAgICBpZiAobm9kZS5zdGFnZURhdGE/LkFjdG9yUnVsZSAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICB1cGRhdGVkU3RhZ2UuQWN0b3JSdWxlID0gbm9kZS5zdGFnZURhdGEuQWN0b3JSdWxlO1xuICAgICAgICAgICAgaWYgKG5vZGUuc3RhZ2VEYXRhPy5Bc3NpZ25tZW50VHlwZSAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICB1cGRhdGVkU3RhZ2UuQXNzaWdubWVudFR5cGUgPSBub2RlLnN0YWdlRGF0YS5Bc3NpZ25tZW50VHlwZTtcbiAgICAgICAgICAgIGlmIChub2RlLnN0YWdlRGF0YT8uTWluTm9PZkFjdG9yICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgIHVwZGF0ZWRTdGFnZS5NaW5Ob09mQWN0b3IgPSBub2RlLnN0YWdlRGF0YS5NaW5Ob09mQWN0b3I7XG4gICAgICAgICAgICBpZiAobm9kZS5zdGFnZURhdGE/LklzUGFyYWxsZWwgIT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgdXBkYXRlZFN0YWdlLklzUGFyYWxsZWwgPSBub2RlLnN0YWdlRGF0YS5Jc1BhcmFsbGVsO1xuICAgICAgICAgICAgaWYgKG5vZGUuc3RhZ2VEYXRhPy5UYWdzKSB1cGRhdGVkU3RhZ2UuVGFncyA9IG5vZGUuc3RhZ2VEYXRhLlRhZ3M7XG5cbiAgICAgICAgICAgIC8vIEFsd2F5cyB1cGRhdGUgdGhlc2UgcHJvcGVydGllc1xuICAgICAgICAgICAgdXBkYXRlZFN0YWdlLklzRW50cnlQb2ludCA9IG5vZGUuaXNTdGFydE5vZGU7XG4gICAgICAgICAgICB1cGRhdGVkU3RhZ2UuSXNFeGl0UG9pbnQgPSBub2RlLnN0YWdlRGF0YT8uSXNFeGl0UG9pbnQgfHwgZmFsc2U7XG4gICAgICAgICAgICB1cGRhdGVkU3RhZ2UuRm9ybSA9IG5vZGUuc3RhZ2VEYXRhPy5mb3JtSWQgfHwgJyc7XG4gICAgICAgICAgICB1cGRhdGVkU3RhZ2UuQ29vcmRpbmF0ZXMgPSB7IFg6IG5vZGUueCwgWTogbm9kZS55IH07XG4gICAgICAgICAgICB1cGRhdGVkU3RhZ2UuU3dpbUxhbmUgPSB0aGlzLnN3aW1sYW5lc1tzd2ltbGFuZUluZGV4XS5pZCB8fCAnJztcblxuICAgICAgICAgICAgLy8gY29uc29sZS5sb2coXCJOT0RFX1RZUEVcIiwgbm9kZS50eXBlKTtcblxuICAgICAgICAgICAgLy8gSGFuZGxlIHN1YmZsb3cgc3RhZ2VcbiAgICAgICAgICAgIGlmIChub2RlLnR5cGUgPT09ICdzdWJmbG93Jykge1xuICAgICAgICAgICAgICB1cGRhdGVkU3RhZ2UuSXNTdWJQcm9jZXNzID0gdHJ1ZTtcbiAgICAgICAgICAgICAgdXBkYXRlZFN0YWdlLlN1YldvcmtGbG93ID0gbm9kZS53b3JrZmxvd0RhdGE/LmlkIHx8ICcnO1xuICAgICAgICAgICAgICB1cGRhdGVkU3RhZ2UuTmFtZSA9IG5vZGUud29ya2Zsb3dEYXRhPy5uYW1lIHx8ICcnO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBBZGQgdG8gc3RhZ2VzXG4gICAgICAgICAgICBzdGFnZXMucHVzaCh1cGRhdGVkU3RhZ2UpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBDcmVhdGUgYSBuZXcgc3RhZ2VcbiAgICAgICAgICAgIHN0YWdlcy5wdXNoKHtcbiAgICAgICAgICAgICAgSWQ6ICcnLFxuICAgICAgICAgICAgICBDb2RlOiAnJyxcbiAgICAgICAgICAgICAgVGVuYW50SWQ6ICcnLFxuICAgICAgICAgICAgICAvLyBpZDogbm9kZS5pZCxcbiAgICAgICAgICAgICAgaWQ6ICcnLFxuICAgICAgICAgICAgICBTZXJ2aWNlTmFtZTogJycsXG4gICAgICAgICAgICAgIENyZWF0ZWRBdDogbmV3IERhdGUoKSxcbiAgICAgICAgICAgICAgVXBkYXRlZEF0OiBuZXcgRGF0ZSgpLFxuICAgICAgICAgICAgICBEYXRhU3RhdGU6IE9iamVjdFN0YXRlLk5ldyxcbiAgICAgICAgICAgICAgV29ya2Zsb3c6IHdvcmtmbG93LkNvZGUsXG4gICAgICAgICAgICAgIE5hbWU6XG4gICAgICAgICAgICAgICAgKG5vZGUudHlwZSA9PT0gJ3N1YmZsb3cnXG4gICAgICAgICAgICAgICAgICA/IG5vZGUud29ya2Zsb3dEYXRhPy5uYW1lXG4gICAgICAgICAgICAgICAgICA6IG5vZGUuc3RhZ2VEYXRhPy5OYW1lKSA/PyAnJyxcbiAgICAgICAgICAgICAgRGVzY3JpcHRpb246IG5vZGUuc3RhZ2VEYXRhPy5EZXNjcmlwdGlvbiB8fCAnJyxcbiAgICAgICAgICAgICAgRHVyYXRpb246IG5vZGUuc3RhZ2VEYXRhPy5EdXJhdGlvbiB8fCAwLFxuICAgICAgICAgICAgICBQYXNzT25SdWxlOiBub2RlLnN0YWdlRGF0YT8uUGFzc09uUnVsZSB8fCAnJyxcbiAgICAgICAgICAgICAgQWN0b3JSdWxlOiBub2RlLnN0YWdlRGF0YT8uQWN0b3JSdWxlIHx8IFN0YWdlQWN0b3JSdWxlLk5vbmUsXG4gICAgICAgICAgICAgIE1pbk5vT2ZBY3Rvcjogbm9kZS5zdGFnZURhdGE/Lk1pbk5vT2ZBY3RvciB8fCAwLFxuICAgICAgICAgICAgICBJc1BhcmFsbGVsOiBub2RlLnN0YWdlRGF0YT8uSXNQYXJhbGxlbCB8fCBmYWxzZSxcbiAgICAgICAgICAgICAgSXNFbnRyeVBvaW50OiBub2RlLmlzU3RhcnROb2RlLFxuICAgICAgICAgICAgICBJc0V4aXRQb2ludDogbm9kZS5zdGFnZURhdGE/LklzRXhpdFBvaW50IHx8IGZhbHNlLCAvLyBXaWxsIGJlIHVwZGF0ZWQgYmVsb3dcbiAgICAgICAgICAgICAgVGFnczogbm9kZS5zdGFnZURhdGE/LlRhZ3MgfHwgW10sXG4gICAgICAgICAgICAgIEZvcm06IG5vZGUuc3RhZ2VEYXRhPy5mb3JtSWQgPz8gJycsXG4gICAgICAgICAgICAgIEFsbG93TXVsdGlTdWJQcm9jZXNzOiBmYWxzZSxcbiAgICAgICAgICAgICAgQXNzaWdubWVudFR5cGU6XG4gICAgICAgICAgICAgICAgbm9kZS5zdGFnZURhdGE/LkFzc2lnbm1lbnRUeXBlIHx8XG4gICAgICAgICAgICAgICAgdGhpcy53b3JrZmxvdz8uQXNzaWdubWVudFR5cGUgfHxcbiAgICAgICAgICAgICAgICBUYXNrQXNzaWdubWVudFR5cGUuQXV0b1JvdXRlLFxuICAgICAgICAgICAgICBTdWJXb3JrRmxvdzogbm9kZS53b3JrZmxvd0RhdGE/LmlkIHx8ICcnLFxuICAgICAgICAgICAgICBTd2ltTGFuZTogdGhpcy5zd2ltbGFuZXNbc3dpbWxhbmVJbmRleF0uaWQgfHwgJycsXG4gICAgICAgICAgICAgIENvb3JkaW5hdGVzOiB7IFg6IG5vZGUueCwgWTogbm9kZS55IH0sXG4gICAgICAgICAgICAgIElzU3ViUHJvY2Vzczogbm9kZS50eXBlID09PSAnc3ViZmxvdycsXG4gICAgICAgICAgICAgIEtleTogbm9kZS5zdGFnZURhdGE/LktleSB8fCBub2RlLmlkLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIC8vIC8vIERldGVybWluZSB3aGljaCBzdGFnZXMgYXJlIGV4aXQgcG9pbnRzIChubyBvdXRnb2luZyBjb25uZWN0aW9ucylcbiAgICAvLyBzdGFnZXMuZm9yRWFjaCgoc3RhZ2UpID0+IHtcbiAgICAvLyAgIGNvbnN0IGhhc091dGdvaW5nQ29ubmVjdGlvbnMgPSB0aGlzLmNvbm5lY3Rpb25zLnNvbWUoXG4gICAgLy8gICAgIChjb25uKSA9PlxuICAgIC8vICAgICAgIGNvbm4uc291cmNlTm9kZUlkID09PSBzdGFnZS5Db2RlIHx8IGNvbm4uc291cmNlTm9kZUlkID09PSBzdGFnZS5pZFxuICAgIC8vICAgKTtcbiAgICAvLyAgIGlmICghaGFzT3V0Z29pbmdDb25uZWN0aW9ucykge1xuICAgIC8vICAgICBzdGFnZS5Jc0V4aXRQb2ludCA9IHRydWU7XG4gICAgLy8gICB9XG4gICAgLy8gfSk7XG5cbiAgICAvLyBUcmFuc2Zvcm0gY29ubmVjdGlvbnMgdG8gV29ya2Zsb3dBY3Rpb25bXVxuICAgIGNvbnN0IGFjdGlvbnM6IFdvcmtmbG93QWN0aW9uW10gPSBbXTtcblxuICAgIHRoaXMuY29ubmVjdGlvbnMuZm9yRWFjaCgoY29ubikgPT4ge1xuICAgICAgY29uc3Qgc291cmNlTm9kZSA9IHRoaXMuZmluZE5vZGVCeUlkKGNvbm4uc291cmNlTm9kZUlkKT8ubm9kZTtcbiAgICAgIGNvbnN0IHRhcmdldE5vZGUgPSB0aGlzLmZpbmROb2RlQnlJZChjb25uLnRhcmdldE5vZGVJZCk/Lm5vZGU7XG5cbiAgICAgIC8vIENoZWNrIGlmIHRoaXMgaXMgYW4gZXhpc3RpbmcgYWN0aW9uXG4gICAgICBpZiAodGhpcy5hY3Rpb25SZWNvcmRbY29ubi5pZF0pIHtcbiAgICAgICAgLy8gVXBkYXRlIGV4aXN0aW5nIGFjdGlvbiB3aXRoIGNoYW5nZWQgdmFsdWVzXG4gICAgICAgIGNvbnN0IGV4aXN0aW5nQWN0aW9uID0gdGhpcy5hY3Rpb25SZWNvcmRbY29ubi5pZF07XG5cbiAgICAgICAgLy8gQ3JlYXRlIHVwZGF0ZWQgYWN0aW9uIHdpdGggY2hhbmdlZCBwcm9wZXJ0aWVzXG4gICAgICAgIGNvbnN0IHVwZGF0ZWRBY3Rpb246IFdvcmtmbG93QWN0aW9uID0ge1xuICAgICAgICAgIC4uLmV4aXN0aW5nQWN0aW9uLFxuICAgICAgICAgIERhdGFTdGF0ZTogT2JqZWN0U3RhdGUuQ2hhbmdlZCxcbiAgICAgICAgICBVcGRhdGVkQXQ6IG5ldyBEYXRlKCksXG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gVXBkYXRlIHByb3BlcnRpZXMgdGhhdCBtYXkgaGF2ZSBjaGFuZ2VkXG4gICAgICAgIHVwZGF0ZWRBY3Rpb24uTmFtZSA9XG4gICAgICAgICAgY29ubi5sYWJlbCA/P1xuICAgICAgICAgIGBBY3Rpb24gZnJvbSAke3NvdXJjZU5vZGU/LnN0YWdlRGF0YT8uTmFtZSB8fCAnVW5rbm93bid9IHRvICR7dGFyZ2V0Tm9kZT8uc3RhZ2VEYXRhPy5OYW1lIHx8ICdVbmtub3duJ1xuICAgICAgICAgIH1gO1xuICAgICAgICB1cGRhdGVkQWN0aW9uLk9wZXJhdGlvbkFjdGlvbiA9IGNvbm4uYWN0aW9uO1xuICAgICAgICB1cGRhdGVkQWN0aW9uLklzUGFyYWxsZWwgPSB0YXJnZXROb2RlPy5zdGFnZURhdGE/LklzUGFyYWxsZWwgfHwgZmFsc2U7XG4gICAgICAgIHVwZGF0ZWRBY3Rpb24uUGFzc09uUnVsZSA9IGNvbm4uY29uZGl0aW9uIHx8ICcnO1xuICAgICAgICB1cGRhdGVkQWN0aW9uLlRhcmdldFN0YXR1cyA9IGNvbm4udGFyZ2V0U3RhdHVzIHx8IHVuZGVmaW5lZDtcbiAgICAgICAgLy8gdXBkYXRlZEFjdGlvbi5Tb3VyY2VQb2ludFR5cGUgPSB0aGlzLmdldENvbm5lY3Rpb25Qb2ludFR5cGUoY29ubi5zb3VyY2VQb2ludElkKTtcbiAgICAgICAgLy8gdXBkYXRlZEFjdGlvbi5UYXJnZXRQb2ludFR5cGUgPSB0aGlzLmdldENvbm5lY3Rpb25Qb2ludFR5cGUoY29ubi50YXJnZXRQb2ludElkKTtcblxuICAgICAgICBhY3Rpb25zLnB1c2godXBkYXRlZEFjdGlvbik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBDcmVhdGUgYSBuZXcgYWN0aW9uXG4gICAgICAgIGFjdGlvbnMucHVzaCh7XG4gICAgICAgICAgSWQ6ICcnLFxuICAgICAgICAgIENvZGU6ICcnLFxuICAgICAgICAgIFRlbmFudElkOiAnJyxcbiAgICAgICAgICAvLyBpZDogY29ubi5pZCxcbiAgICAgICAgICBpZDogJycsXG4gICAgICAgICAgU2VydmljZU5hbWU6ICcnLFxuICAgICAgICAgIENyZWF0ZWRBdDogbmV3IERhdGUoKSxcbiAgICAgICAgICBVcGRhdGVkQXQ6IG5ldyBEYXRlKCksXG4gICAgICAgICAgRGF0YVN0YXRlOiBPYmplY3RTdGF0ZS5OZXcsXG4gICAgICAgICAgV29ya2Zsb3c6IHdvcmtmbG93LkNvZGUsXG4gICAgICAgICAgTmFtZTpcbiAgICAgICAgICAgIGNvbm4ubGFiZWwgPz9cbiAgICAgICAgICAgIGBBY3Rpb24gZnJvbSAke3NvdXJjZU5vZGU/LnN0YWdlRGF0YT8uTmFtZSB8fCAnVW5rbm93bid9IHRvICR7dGFyZ2V0Tm9kZT8uc3RhZ2VEYXRhPy5OYW1lIHx8ICdVbmtub3duJ1xuICAgICAgICAgICAgfWAsXG4gICAgICAgICAgT3BlcmF0aW9uQWN0aW9uOiBjb25uLmFjdGlvbixcbiAgICAgICAgICBUYXJnZXRTdGF0dXM6IGNvbm4udGFyZ2V0U3RhdHVzLFxuICAgICAgICAgIEZyb21TdGFnZTogY29ubi5zb3VyY2VOb2RlSWQsXG4gICAgICAgICAgVG9TdGFnZTogY29ubi50YXJnZXROb2RlSWQsXG4gICAgICAgICAgSXNQYXJhbGxlbDogc291cmNlTm9kZT8uc3RhZ2VEYXRhPy5Jc1BhcmFsbGVsIHx8IGZhbHNlLFxuICAgICAgICAgIFBhc3NPblJ1bGU6IGNvbm4uY29uZGl0aW9uIHx8ICcnLFxuICAgICAgICAgIFNvdXJjZVBvaW50VHlwZTogdGhpcy5nZXRDb25uZWN0aW9uUG9pbnRUeXBlKGNvbm4uc291cmNlUG9pbnRJZCksXG4gICAgICAgICAgVGFyZ2V0UG9pbnRUeXBlOiB0aGlzLmdldENvbm5lY3Rpb25Qb2ludFR5cGUoY29ubi50YXJnZXRQb2ludElkKSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyBBZGQgZGVsZXRlZCBvYmplY3RzIHdpdGggUmVtb3ZlZCBzdGF0ZVxuICAgIE9iamVjdC5rZXlzKHRoaXMuc3RhZ2VSZWNvcmQpLmZvckVhY2goKHN0YWdlSWQpID0+IHtcbiAgICAgIGNvbnN0IGV4aXN0cyA9IHN0YWdlcy5zb21lKFxuICAgICAgICAoc3RhZ2UpID0+IHN0YWdlLkNvZGUgPT09IHN0YWdlSWQgfHwgc3RhZ2UuaWQgPT09IHN0YWdlSWRcbiAgICAgICk7XG5cbiAgICAgIGlmICghZXhpc3RzKSB7XG4gICAgICAgIGNvbnN0IHN0YWdlID0gdGhpcy5zdGFnZVJlY29yZFtzdGFnZUlkXTtcbiAgICAgICAgc3RhZ2VzLnB1c2goe1xuICAgICAgICAgIC4uLnN0YWdlLFxuICAgICAgICAgIERhdGFTdGF0ZTogT2JqZWN0U3RhdGUuUmVtb3ZlZCxcbiAgICAgICAgICBVcGRhdGVkQXQ6IG5ldyBEYXRlKCksXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgT2JqZWN0LmtleXModGhpcy5hY3Rpb25SZWNvcmQpLmZvckVhY2goKGFjdGlvbklkKSA9PiB7XG4gICAgICBjb25zdCBleGlzdHMgPSBhY3Rpb25zLnNvbWUoXG4gICAgICAgIChhY3Rpb24pID0+IGFjdGlvbi5Db2RlID09PSBhY3Rpb25JZCB8fCBhY3Rpb24uaWQgPT09IGFjdGlvbklkXG4gICAgICApO1xuXG4gICAgICBpZiAoIWV4aXN0cykge1xuICAgICAgICBjb25zdCBhY3Rpb24gPSB0aGlzLmFjdGlvblJlY29yZFthY3Rpb25JZF07XG4gICAgICAgIGFjdGlvbnMucHVzaCh7XG4gICAgICAgICAgLi4uYWN0aW9uLFxuICAgICAgICAgIERhdGFTdGF0ZTogT2JqZWN0U3RhdGUuUmVtb3ZlZCxcbiAgICAgICAgICBVcGRhdGVkQXQ6IG5ldyBEYXRlKCksXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgLy8gSGFuZGxlIGRlbGV0ZWQgc3dpbWxhbmVzXG4gICAgT2JqZWN0LmtleXModGhpcy5zd2ltbGFuZVJlY29yZCkuZm9yRWFjaCgobGFuZUlkKSA9PiB7XG4gICAgICBjb25zdCBleGlzdHMgPSB3b3JrZmxvdy5MYW5lcy5zb21lKFxuICAgICAgICAobGFuZSkgPT4gbGFuZS5Db2RlID09PSBsYW5lSWQgfHwgbGFuZS5pZCA9PT0gbGFuZUlkXG4gICAgICApO1xuXG4gICAgICBpZiAoIWV4aXN0cykge1xuICAgICAgICBjb25zdCBsYW5lID0gdGhpcy5zd2ltbGFuZVJlY29yZFtsYW5lSWRdO1xuICAgICAgICB3b3JrZmxvdy5MYW5lcy5wdXNoKHtcbiAgICAgICAgICAuLi5sYW5lLFxuICAgICAgICAgIERhdGFTdGF0ZTogT2JqZWN0U3RhdGUuUmVtb3ZlZCxcbiAgICAgICAgICBVcGRhdGVkQXQ6IG5ldyBEYXRlKCksXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgd29ya2Zsb3cuU3RhZ2VzID0gc3RhZ2VzO1xuICAgIHdvcmtmbG93LkFjdGlvbnMgPSBhY3Rpb25zO1xuXG4gICAgcmV0dXJuIHdvcmtmbG93O1xuICB9XG5cbiAgZ2V0Q29ubmVjdGlvblBvaW50VHlwZShcbiAgICBwb2ludElkOiBzdHJpbmdcbiAgKTogJ3RvcCcgfCAncmlnaHQnIHwgJ2JvdHRvbScgfCAnbGVmdCcgfCB1bmRlZmluZWQge1xuICAgIC8vIEV4dHJhY3QgdGhlIHR5cGUgZnJvbSB0aGUgY29ubmVjdGlvbiBwb2ludCBJRCBmb3JtYXRcbiAgICAvLyB3aGljaCBpcyB1c3VhbGx5IHNvbWV0aGluZyBsaWtlIFwibm9kZS1pZC10b3AtNTBcIlxuICAgIGNvbnN0IHBhcnRzID0gcG9pbnRJZC5zcGxpdCgnLScpO1xuICAgIGNvbnN0IHR5cGVJbmRleCA9IHBhcnRzLmZpbmRJbmRleChcbiAgICAgIChwYXJ0KSA9PlxuICAgICAgICBwYXJ0ID09PSAndG9wJyB8fFxuICAgICAgICBwYXJ0ID09PSAncmlnaHQnIHx8XG4gICAgICAgIHBhcnQgPT09ICdib3R0b20nIHx8XG4gICAgICAgIHBhcnQgPT09ICdsZWZ0J1xuICAgICk7XG5cbiAgICBpZiAodHlwZUluZGV4ID49IDApIHtcbiAgICAgIHJldHVybiBwYXJ0c1t0eXBlSW5kZXhdIGFzICd0b3AnIHwgJ3JpZ2h0JyB8ICdib3R0b20nIHwgJ2xlZnQnO1xuICAgIH1cblxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICAvLyBBZGQgYSBuZXcgcHJvcGVydHkgdG8gdHJhY2sgbG9hZGVkIG9iamVjdHNcbiAgbG9hZGVkT2JqZWN0SWRzOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9ID0ge307IC8vIEZvcm1hdDogeyBpZDogY29kZSB9XG5cbiAgLy8gQWRkIGEgbWV0aG9kIHRvIHJlZ2lzdGVyIGxvYWRlZCBvYmplY3RzXG4gIHJlZ2lzdGVyTG9hZGVkT2JqZWN0KGlkOiBzdHJpbmcsIGNvZGU6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMubG9hZGVkT2JqZWN0SWRzW2lkXSA9IGNvZGU7XG4gIH1cblxuICAvLyBNZXRob2QgdG8gY2hlY2sgaWYgYW4gb2JqZWN0IHdhcyBsb2FkZWQgZnJvbSBBUElcbiAgd2FzTG9hZGVkRnJvbUFwaShpZDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGlkIGluIHRoaXMubG9hZGVkT2JqZWN0SWRzO1xuICB9XG5cbiAgLy8gTWV0aG9kIHRvIGdldCB0aGUgY29kZSBmb3IgYSBsb2FkZWQgb2JqZWN0XG4gIGdldENvZGVGb3JPYmplY3QoaWQ6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMubG9hZGVkT2JqZWN0SWRzW2lkXSB8fCAnJztcbiAgfVxuXG4gIC8qKlxuICAgKiBNb3ZlcyBhIG5vZGUgZnJvbSBvbmUgc3dpbWxhbmUgdG8gYW5vdGhlciBhbmQgdXBkYXRlcyBhbGwgcmVsYXRlZCBzdGF0ZTpcbiAgICogLSBOb2RlIHBvc2l0aW9uIChzd2ltbGFuZS1yZWxhdGl2ZSB4L3kpXG4gICAqIC0gU3dpbWxhbmUgYXJyYXlzIChyZW1vdmVzIGZyb20gb2xkLCBhZGRzIHRvIG5ldylcbiAgICogLSBDb25uZWN0aW9uIHN3aW1sYW5lIGluZGljZXMgZm9yIHRoaXMgbm9kZVxuICAgKiAtIE5vZGUncyBzdGFnZURhdGEuVGFncyBhbmQgU3dpbUxhbmUgdG8gbWF0Y2ggdGhlIGRlc3RpbmF0aW9uIHN3aW1sYW5lXG4gICAqL1xuICBtb3ZlTm9kZVRvU3dpbWxhbmUoXG4gICAgbm9kZUlkOiBzdHJpbmcsXG4gICAgZnJvbVN3aW1sYW5lSW5kZXg6IG51bWJlcixcbiAgICB0b1N3aW1sYW5lSW5kZXg6IG51bWJlcixcbiAgICBuZXdYOiBudW1iZXIsXG4gICAgYWJzb2x1dGVZOiBudW1iZXIgICAgICAgIC8vIGFic29sdXRlIFNWRyBZIG9mIHRoZSBub2RlIGF0IGRyb3AgdGltZVxuICApOiBOb2RlIHwgbnVsbCB7XG4gICAgY29uc3QgZnJvbVN3aW1sYW5lID0gdGhpcy5zd2ltbGFuZXNbZnJvbVN3aW1sYW5lSW5kZXhdO1xuICAgIGlmICghZnJvbVN3aW1sYW5lPy5ub2RlcykgcmV0dXJuIG51bGw7XG5cbiAgICBjb25zdCBub2RlSW5kZXggPSBmcm9tU3dpbWxhbmUubm9kZXMuZmluZEluZGV4KChuKSA9PiBuLmlkID09PSBub2RlSWQpO1xuICAgIGlmIChub2RlSW5kZXggPT09IC0xKSByZXR1cm4gbnVsbDtcblxuICAgIC8vIFB1bGwgdGhlIG5vZGUgb3V0IOKAkyBrZWVwIGEgbG9jYWwgcmVmZXJlbmNlXG4gICAgY29uc3Qgbm9kZSA9IGZyb21Td2ltbGFuZS5ub2Rlc1tub2RlSW5kZXhdO1xuXG4gICAgLy8g4pSA4pSAIEZpeCB0aGUgWSBjb29yZGluYXRlIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuICAgIC8vIFRlbXBsYXRlIGZvcm11bGE6IGFic29sdXRlU1ZHWSA9IG5vZGUueSArIHN3aW1sYW5lLm9yZGVyICogMjYzXG4gICAgLy8gQ29ubmVjdGlvbiBmb3JtdWxhOiBhYnNvbHV0ZVkgPSBub2RlLnkgKyBzd2ltbGFuZUluZGV4ICogMjYzICsgcG9pbnQueVxuICAgIC8vIEJvdGggZXhwZWN0IG5vZGUueSB0byBiZSBzd2ltbGFuZS1yZWxhdGl2ZTpcbiAgICAvLyAgIG5vZGUueSA9IGFic29sdXRlU1ZHWSAtIHN3aW1sYW5lLm9yZGVyICogMjYzXG4gICAgbm9kZS54ID0gbmV3WDtcbiAgICBub2RlLnkgPSBhYnNvbHV0ZVkgLSB0b1N3aW1sYW5lSW5kZXggKiB0aGlzLnN3aW1sYW5lSGVpZ2h0O1xuXG4gICAgLy8g4pSA4pSAIE1vdmUgYmV0d2VlbiBzd2ltbGFuZSBhcnJheXMgKGltbXV0YWJsZSByZWFzc2lnbm1lbnQpIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuICAgIC8vIFVzaW5nIGZpbHRlcitzcHJlYWQgaW5zdGVhZCBvZiBzcGxpY2UvcHVzaCBzbyBBbmd1bGFyJ3MgQGZvciBibG9ja1xuICAgIC8vIGRldGVjdHMgdGhlIGFycmF5IGNoYW5nZSBvbiBib3RoIG9sZCBhbmQgbmV3IHN3aW1sYW5lLlxuICAgIGZyb21Td2ltbGFuZS5ub2RlcyA9IGZyb21Td2ltbGFuZS5ub2Rlcy5maWx0ZXIoKG4pID0+IG4uaWQgIT09IG5vZGVJZCk7XG5cbiAgICBjb25zdCB0b1N3aW1sYW5lID0gdGhpcy5zd2ltbGFuZXNbdG9Td2ltbGFuZUluZGV4XTtcbiAgICB0b1N3aW1sYW5lLm5vZGVzID0gWy4uLih0b1N3aW1sYW5lLm5vZGVzIHx8IFtdKSwgbm9kZV07XG5cbiAgICAvLyDilIDilIAgVXBkYXRlIGNvbm5lY3Rpb24gc3dpbWxhbmUgaW5kaWNlcyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbiAgICB0aGlzLmNvbm5lY3Rpb25zID0gdGhpcy5jb25uZWN0aW9ucy5tYXAoKGNvbm4pID0+IHtcbiAgICAgIGlmIChjb25uLnNvdXJjZU5vZGVJZCAhPT0gbm9kZUlkICYmIGNvbm4udGFyZ2V0Tm9kZUlkICE9PSBub2RlSWQpIHJldHVybiBjb25uO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uY29ubixcbiAgICAgICAgLi4uKGNvbm4uc291cmNlTm9kZUlkID09PSBub2RlSWQgPyB7IHNvdXJjZVN3aW1sYW5lSW5kZXg6IHRvU3dpbWxhbmVJbmRleCB9IDoge30pLFxuICAgICAgICAuLi4oY29ubi50YXJnZXROb2RlSWQgPT09IG5vZGVJZCA/IHsgdGFyZ2V0U3dpbWxhbmVJbmRleDogdG9Td2ltbGFuZUluZGV4IH0gOiB7fSksXG4gICAgICB9O1xuICAgIH0pO1xuXG4gICAgLy8g4pSA4pSAIFN5bmMgbm9kZSBtZXRhZGF0YSB0byB0aGUgZGVzdGluYXRpb24gc3dpbWxhbmUg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4gICAgbm9kZS5zdGFnZURhdGEgPSB7XG4gICAgICAuLi5ub2RlLnN0YWdlRGF0YSxcbiAgICAgIFRhZ3M6IFsuLi4odG9Td2ltbGFuZS50YWdzIHx8IFtdKV0sXG4gICAgICBTd2ltTGFuZTogdG9Td2ltbGFuZS5pZCB8fCAnJyxcbiAgICB9O1xuXG4gICAgcmV0dXJuIG5vZGU7XG4gIH1cblxuICAvKiogU3dpbWxhbmUgaGVpZ2h0IGNvbnN0YW50IHVzZWQgZm9yIGNvb3JkaW5hdGUgY29udmVyc2lvbnMuICovXG4gIHJlYWRvbmx5IHN3aW1sYW5lSGVpZ2h0ID0gMjYzO1xufVxuIl19
759
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ya2Zsb3ctZGVzaWduZXIuc3RhdGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92ZXJiZW4td29ya2Zsb3ctdWkvc3JjL2xpYi9jb21wb25lbnRzL3dvcmtmbG93LWRlc2lnbmVyL3dvcmtmbG93LWRlc2lnbmVyLnN0YXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLFdBQVcsRUFBRSxjQUFjLEVBQUUsTUFBTSxFQUFpQixrQkFBa0IsRUFBMkMsTUFBTSxtQ0FBbUMsQ0FBQzs7QUFZcEssTUFBTSxPQUFPLHFCQUFxQjtJQUNoQyxTQUFTLEdBQW1CLEVBQUUsQ0FBQztJQUMvQixXQUFXLEdBQWtCLElBQUksQ0FBQyxDQUFDLHVDQUF1QztJQUMxRSxXQUFXLEdBQWlCLEVBQUUsQ0FBQztJQUMvQixzQkFBc0IsR0FPbEIsRUFBRSxDQUFDO0lBQ1AsY0FBYyxHQUFrQixJQUFJLENBQUM7SUFDckMsZ0JBQWdCLEdBQWtCLElBQUksQ0FBQztJQUN2QyxVQUFVLEdBQWtCLElBQUksQ0FBQztJQUVqQyxRQUFRLEdBQW9CLElBQUksQ0FBQztJQUNqQyxjQUFjLEdBQTZCLEVBQUUsQ0FBQztJQUM5QyxXQUFXLEdBQWtDLEVBQUUsQ0FBQztJQUNoRCxZQUFZLEdBQW1DLEVBQUUsQ0FBQztJQUVsRCxhQUFhLENBQUMsRUFBVTtRQUN0QixJQUFJLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQztJQUN2QixDQUFDO0lBRU0sZ0JBQWdCLEdBQXdCLElBQUksR0FBRyxFQUFFLENBQUM7SUFFeEMsZUFBZSxHQUE2QjtRQUMzRCxLQUFLLEVBQUUsQ0FBQyxPQUFPLEVBQUUsVUFBVSxFQUFFLFNBQVMsQ0FBQztRQUN2QyxRQUFRLEVBQUUsQ0FBQyxPQUFPLENBQUMsRUFBRSx1Q0FBdUM7UUFDNUQsMkNBQTJDO1FB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LENBQUMsQ0FBQztRQUVILHlFQUF5RTtRQUN6RSxJQUFJLENBQUMsU0FBUyxHQUFHO1lBQ2YsR0FBRyxJQUFJLENBQUMsU0FBUztZQUNqQixJQUFJLEVBQUUsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLElBQUksSUFBSSxFQUFFLENBQUMsQ0FBQztZQUNsQyxRQUFRLEVBQUUsVUFBVSxDQUFDLEVBQUUsSUFBSSxFQUFFO1NBQzlCLENBQUM7UUFFRixPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCxnRUFBZ0U7SUFDdkQsY0FBYyxHQUFHLEdBQUcsQ0FBQzt3R0ExNkJuQixxQkFBcUI7NEdBQXJCLHFCQUFxQixjQUZwQixNQUFNOzs0RkFFUCxxQkFBcUI7a0JBSGpDLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgT2JqZWN0U3RhdGUsIFN0YWdlQWN0b3JSdWxlLCBTdGF0dXMsIFN3aW1MYW5lLCBUYWcsIFRhc2tBc3NpZ25tZW50VHlwZSwgV29ya2Zsb3csIFdvcmtmbG93QWN0aW9uLCBXb3JrZmxvd1N0YWdlIH0gZnJvbSAndmVyYmVuLXdvcmtmbG93LXVpL3NyYy9saWIvbW9kZWxzJztcbmltcG9ydCB7XG4gIENvbm5lY3Rpb24sXG4gIENvbm5lY3Rpb25Qb2ludCxcbiAgTm9kZSxcbiAgU3dpbWxhbmVJdGVtLFxuICBUb29sVHlwZSxcbn0gZnJvbSAnLi93b3JrZmxvdy1kZXNpZ25lci50eXBlcyc7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBXb3JrZmxvd0Rlc2lnbmVyU3RhdGUge1xuICBzd2ltbGFuZXM6IFN3aW1sYW5lSXRlbVtdID0gW107XG4gIHN0YXJ0Tm9kZUlkOiBzdHJpbmcgfCBudWxsID0gbnVsbDsgLy8gVHJhY2sgdGhlIElEIG9mIHRoZSBmaXJzdC9zdGFydCBub2RlXG4gIGNvbm5lY3Rpb25zOiBDb25uZWN0aW9uW10gPSBbXTtcbiAgZHJhZ2dpbmdDb25uZWN0aW9uRGF0YToge1xuICAgIHNvdXJjZVBvaW50PzogQ29ubmVjdGlvblBvaW50O1xuICAgIHNvdXJjZVN3aW1sYW5lSW5kZXg/OiBudW1iZXI7XG4gICAgc3RhcnRYPzogbnVtYmVyO1xuICAgIHN0YXJ0WT86IG51bWJlcjtcbiAgICBjdXJyZW50WD86IG51bWJlcjtcbiAgICBjdXJyZW50WT86IG51bWJlcjtcbiAgfSA9IHt9O1xuICB3b3JrZmxvd0Zvcm1JZDogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gIHdvcmtmbG93Rm9ybU5hbWU6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICB3b3JrZmxvd0lkOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcblxuICB3b3JrZmxvdzogV29ya2Zsb3cgfCBudWxsID0gbnVsbDtcbiAgc3dpbWxhbmVSZWNvcmQ6IFJlY29yZDxzdHJpbmcsIFN3aW1MYW5lPiA9IHt9O1xuICBzdGFnZVJlY29yZDogUmVjb3JkPHN0cmluZywgV29ya2Zsb3dTdGFnZT4gPSB7fTtcbiAgYWN0aW9uUmVjb3JkOiBSZWNvcmQ8c3RyaW5nLCBXb3JrZmxvd0FjdGlvbj4gPSB7fTtcblxuICBzZXRXb3JrZmxvd0lkKGlkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLndvcmtmbG93SWQgPSBpZDtcbiAgfVxuXG4gIHB1YmxpYyBsYW5lSWRUb0luZGV4TWFwOiBNYXA8c3RyaW5nLCBudW1iZXI+ID0gbmV3IE1hcCgpO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgY29ubmVjdGlvblJ1bGVzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmdbXT4gPSB7XG4gICAgc3RhZ2U6IFsnc3RhZ2UnLCAnZGVjaXNpb24nLCAnc3ViZmxvdyddLFxuICAgIGRlY2lzaW9uOiBbJ3N0YWdlJ10sIC8vIERlY2lzaW9ucyBjYW4gb25seSBjb25uZWN0IHRvIFN0YWdlc1xuICAgIC8vICdhY3Rpb24nOiBbJ3N0YWdlJywgJ2Zvcm0nLCAnZGVjaXNpb24nXSxcbiAgICBmb3JtOiBbXSxcbiAgICBzdWJmbG93OiBbJ3N0YWdlJywgJ2RlY2lzaW9uJ10sXG4gIH07XG5cbiAgc2V0V29ya2Zsb3dGb3JtKGZvcm1JZDogc3RyaW5nIHwgbnVsbCwgZm9ybU5hbWU6IHN0cmluZyB8IG51bGwpOiB2b2lkIHtcbiAgICB0aGlzLndvcmtmbG93Rm9ybUlkID0gZm9ybUlkO1xuICAgIHRoaXMud29ya2Zsb3dGb3JtTmFtZSA9IGZvcm1OYW1lO1xuICAgIGNvbnNvbGUubG9nKHRoaXMud29ya2Zsb3dGb3JtSWQsIHRoaXMud29ya2Zsb3dGb3JtTmFtZSk7XG4gIH1cblxuICBhZGRTd2ltbGFuZShuYW1lOiBzdHJpbmcsIHRhZ3M6IFRhZ1tdKSB7XG4gICAgLy8gR2VuZXJhdGUgYSB1bmlxdWUga2V5IGZvciB0aGlzIHN3aW1sYW5lXG4gICAgY29uc3Qgc3dpbWxhbmVLZXkgPSBgbGFuZS0ke0RhdGUubm93KCl9LSR7TWF0aC5mbG9vcihcbiAgICAgIE1hdGgucmFuZG9tKCkgKiAxMDAwXG4gICAgKX1gO1xuXG4gICAgdGhpcy5zd2ltbGFuZXMgPSB0aGlzLnN3aW1sYW5lcy5jb25jYXQoW1xuICAgICAge1xuICAgICAgICBvcmRlcjogdGhpcy5zd2ltbGFuZXMubGVuZ3RoLFxuICAgICAgICBsYWJlbDogbmFtZSxcbiAgICAgICAgdGFncyxcbiAgICAgICAgbm9kZXM6IFtdLFxuICAgICAgICBpZDogc3dpbWxhbmVLZXksIC8vIFN0b3JlIHRoZSBnZW5lcmF0ZWQga2V5IGFzIGlkIGZvciBmcm9udGVuZCByZWZlcmVuY2VcbiAgICAgIH0sXG4gICAgXSk7XG4gIH1cblxuICByZWdpc3RlckxhbmVNYXBwaW5nKGxhbmVJZDogc3RyaW5nLCBzd2ltbGFuZUluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLmxhbmVJZFRvSW5kZXhNYXAuc2V0KGxhbmVJZCwgc3dpbWxhbmVJbmRleCk7XG4gIH1cblxuICAvLyBBZGQgdGhpcyBtZXRob2QgdG8gZ2VuZXJhdGUgY29ubmVjdGlvbiBwb2ludHMgZm9yIGEgbm9kZVxuICBnZW5lcmF0ZUNvbm5lY3Rpb25Qb2ludHMobm9kZTogTm9kZSk6IENvbm5lY3Rpb25Qb2ludFtdIHtcbiAgICBjb25zdCBwb2ludHM6IENvbm5lY3Rpb25Qb2ludFtdID0gW107XG4gICAgY29uc3Qgc3BhY2luZyA9IDUwOyAvLyBTcGFjZSBiZXR3ZWVuIGNvbm5lY3Rpb24gcG9pbnRzXG5cbiAgICBpZiAobm9kZS50eXBlID09PSAnc3RhZ2UnKSB7XG4gICAgICAvLyBSZWN0YW5ndWxhciBzaGFwZXMgLSBhZGQgcG9pbnRzIGFyb3VuZCB0aGUgcmVjdGFuZ2xlXG5cbiAgICAgIC8vIFRvcCBlZGdlIHBvaW50c1xuICAgICAgZm9yIChsZXQgeCA9IHNwYWNpbmc7IHggPCBub2RlLndpZHRoOyB4ICs9IHNwYWNpbmcpIHtcbiAgICAgICAgcG9pbnRzLnB1c2goe1xuICAgICAgICAgIGlkOiBgJHtub2RlLmlkfS10b3AtJHt4fWAsXG4gICAgICAgICAgbm9kZUlkOiBub2RlLmlkLFxuICAgICAgICAgIHg6IHgsXG4gICAgICAgICAgeTogMCxcbiAgICAgICAgICB0eXBlOiAndG9wJyxcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIC8vIFJpZ2h0IGVkZ2UgcG9pbnRzXG4gICAgICBmb3IgKGxldCB5ID0gc3BhY2luZzsgeSA8IG5vZGUuaGVpZ2h0OyB5ICs9IHNwYWNpbmcpIHtcbiAgICAgICAgcG9pbnRzLnB1c2goe1xuICAgICAgICAgIGlkOiBgJHtub2RlLmlkfS1yaWdodC0ke3l9YCxcbiAgICAgICAgICBub2RlSWQ6IG5vZGUuaWQsXG4gICAgICAgICAgeDogbm9kZS53aWR0aCxcbiAgICAgICAgICB5OiB5LFxuICAgICAgICAgIHR5cGU6ICdyaWdodCcsXG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICAvLyBCb3R0b20gZWRnZSBwb2ludHNcbiAgICAgIGZvciAobGV0IHggPSBzcGFjaW5nOyB4IDwgbm9kZS53aWR0aDsgeCArPSBzcGFjaW5nKSB7XG4gICAgICAgIHBvaW50cy5wdXNoKHtcbiAgICAgICAgICBpZDogYCR7bm9kZS5pZH0tYm90dG9tLSR7eH1gLFxuICAgICAgICAgIG5vZGVJZDogbm9kZS5pZCxcbiAgICAgICAgICB4OiB4LFxuICAgICAgICAgIHk6IG5vZGUuaGVpZ2h0LFxuICAgICAgICAgIHR5cGU6ICdib3R0b20nLFxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgLy8gTGVmdCBlZGdlIHBvaW50c1xuICAgICAgZm9yIChsZXQgeSA9IHNwYWNpbmc7IHkgPCBub2RlLmhlaWdodDsgeSArPSBzcGFjaW5nKSB7XG4gICAgICAgIHBvaW50cy5wdXNoKHtcbiAgICAgICAgICBpZDogYCR7bm9kZS5pZH0tbGVmdC0ke3l9YCxcbiAgICAgICAgICBub2RlSWQ6IG5vZGUuaWQsXG4gICAgICAgICAgeDogMCxcbiAgICAgICAgICB5OiB5LFxuICAgICAgICAgIHR5cGU6ICdsZWZ0JyxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChub2RlLnR5cGUgPT09ICdkZWNpc2lvbicpIHtcbiAgICAgIC8vIERpYW1vbmQgc2hhcGUgLSBhZGQgcG9pbnRzIGF0IHRoZSBmb3VyIGNvcm5lcnNcbiAgICAgIHBvaW50cy5wdXNoKHtcbiAgICAgICAgaWQ6IGAke25vZGUuaWR9LXRvcC0wYCxcbiAgICAgICAgbm9kZUlkOiBub2RlLmlkLFxuICAgICAgICB4OiBub2RlLndpZHRoIC8gMixcbiAgICAgICAgeTogMCxcbiAgICAgICAgdHlwZTogJ3RvcCcsXG4gICAgICB9KTtcblxuICAgICAgcG9pbnRzLnB1c2goe1xuICAgICAgICBpZDogYCR7bm9kZS5pZH0tcmlnaHQtMGAsXG4gICAgICAgIG5vZGVJZDogbm9kZS5pZCxcbiAgICAgICAgeDogbm9kZS53aWR0aCxcbiAgICAgICAgeTogbm9kZS5oZWlnaHQgLyAyLFxuICAgICAgICB0eXBlOiAncmlnaHQnLFxuICAgICAgfSk7XG5cbiAgICAgIHBvaW50cy5wdXNoKHtcbiAgICAgICAgaWQ6IGAke25vZGUuaWR9LWJvdHRvbS0wYCxcbiAgICAgICAgbm9kZUlkOiBub2RlLmlkLFxuICAgICAgICB4OiBub2RlLndpZHRoIC8gMixcbiAgICAgICAgeTogbm9kZS5oZWlnaHQsXG4gICAgICAgIHR5cGU6ICdib3R0b20nLFxuICAgICAgfSk7XG5cbiAgICAgIHBvaW50cy5wdXNoKHtcbiAgICAgICAgaWQ6IGAke25vZGUuaWR9LWxlZnQtMGAsXG4gICAgICAgIG5vZGVJZDogbm9kZS5pZCxcbiAgICAgICAgeDogMCxcbiAgICAgICAgeTogbm9kZS5oZWlnaHQgLyAyLFxuICAgICAgICB0eXBlOiAnbGVmdCcsXG4gICAgICB9KTtcbiAgICB9IGVsc2UgaWYgKG5vZGUudHlwZSA9PT0gJ2Zvcm0nKSB7XG4gICAgICAvLyBGb3JtIG9ubHkgaGFzIGlucHV0IGNvbm5lY3Rpb24gcG9pbnRzLCBubyBvdXRwdXQgcG9pbnRzXG5cbiAgICAgIC8vIExlZnQgZWRnZSBwb2ludHMgKGZvciBpbnB1dCBjb25uZWN0aW9ucylcbiAgICAgIGZvciAobGV0IHkgPSBzcGFjaW5nOyB5IDwgbm9kZS5oZWlnaHQ7IHkgKz0gc3BhY2luZykge1xuICAgICAgICBwb2ludHMucHVzaCh7XG4gICAgICAgICAgaWQ6IGAke25vZGUuaWR9LWxlZnQtJHt5fWAsXG4gICAgICAgICAgbm9kZUlkOiBub2RlLmlkLFxuICAgICAgICAgIHg6IDAsXG4gICAgICAgICAgeTogeSxcbiAgICAgICAgICB0eXBlOiAnbGVmdCcsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAobm9kZS50eXBlID09PSAnc3ViZmxvdycpIHtcbiAgICAgIC8vIEhleGFnb24gc2hhcGUgLSBhZGQgcG9pbnRzIGF0IHRoZSBzaXggY29ybmVyc1xuICAgICAgcG9pbnRzLnB1c2goe1xuICAgICAgICBpZDogYCR7bm9kZS5pZH0tdG9wLTBgLFxuICAgICAgICBub2RlSWQ6IG5vZGUuaWQsXG4gICAgICAgIHg6IG5vZGUud2lkdGggLyAyLFxuICAgICAgICB5OiAwLFxuICAgICAgICB0eXBlOiAndG9wJyxcbiAgICAgIH0pO1xuXG4gICAgICBwb2ludHMucHVzaCh7XG4gICAgICAgIGlkOiBgJHtub2RlLmlkfS1yaWdodC10b3BgLFxuICAgICAgICBub2RlSWQ6IG5vZGUuaWQsXG4gICAgICAgIHg6IG5vZGUud2lkdGgsXG4gICAgICAgIHk6IG5vZGUuaGVpZ2h0IC8gNCxcbiAgICAgICAgdHlwZTogJ3JpZ2h0JyxcbiAgICAgIH0pO1xuXG4gICAgICBwb2ludHMucHVzaCh7XG4gICAgICAgIGlkOiBgJHtub2RlLmlkfS1yaWdodC1ib3R0b21gLFxuICAgICAgICBub2RlSWQ6IG5vZGUuaWQsXG4gICAgICAgIHg6IG5vZGUud2lkdGgsXG4gICAgICAgIHk6IChub2RlLmhlaWdodCAqIDMpIC8gNCxcbiAgICAgICAgdHlwZTogJ3JpZ2h0JyxcbiAgICAgIH0pO1xuXG4gICAgICBwb2ludHMucHVzaCh7XG4gICAgICAgIGlkOiBgJHtub2RlLmlkfS1ib3R0b20tMGAsXG4gICAgICAgIG5vZGVJZDogbm9kZS5pZCxcbiAgICAgICAgeDogbm9kZS53aWR0aCAvIDIsXG4gICAgICAgIHk6IG5vZGUuaGVpZ2h0LFxuICAgICAgICB0eXBlOiAnYm90dG9tJyxcbiAgICAgIH0pO1xuXG4gICAgICBwb2ludHMucHVzaCh7XG4gICAgICAgIGlkOiBgJHtub2RlLmlkfS1sZWZ0LWJvdHRvbWAsXG4gICAgICAgIG5vZGVJZDogbm9kZS5pZCxcbiAgICAgICAgeDogMCxcbiAgICAgICAgeTogKG5vZGUuaGVpZ2h0ICogMykgLyA0LFxuICAgICAgICB0eXBlOiAnbGVmdCcsXG4gICAgICB9KTtcblxuICAgICAgcG9pbnRzLnB1c2goe1xuICAgICAgICBpZDogYCR7bm9kZS5pZH0tbGVmdC10b3BgLFxuICAgICAgICBub2RlSWQ6IG5vZGUuaWQsXG4gICAgICAgIHg6IDAsXG4gICAgICAgIHk6IG5vZGUuaGVpZ2h0IC8gNCxcbiAgICAgICAgdHlwZTogJ2xlZnQnLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBvaW50cztcbiAgfVxuXG4gIGFkZE5vZGUoXG4gICAgc3dpbWxhbmVJbmRleDogbnVtYmVyLFxuICAgIHR5cGU6IFRvb2xUeXBlLFxuICAgIHg6IG51bWJlcixcbiAgICB5OiBudW1iZXIsXG4gICAgc3RhZ2VEYXRhPzogUGFydGlhbDxXb3JrZmxvd1N0YWdlPixcbiAgICB3b3JrZmxvd0RhdGE/OiB7IGlkOiBzdHJpbmc7IG5hbWU6IHN0cmluZyB9LFxuICAgIHVzZUV4aXN0aW5nSWQ6IGJvb2xlYW4gPSBmYWxzZVxuICApIHtcbiAgICBpZiAoXG4gICAgICAhdGhpcy5zd2ltbGFuZXNbc3dpbWxhbmVJbmRleF0gfHxcbiAgICAgICF0eXBlIHx8XG4gICAgICAodHlwZSAhPT0gJ3N0YWdlJyAmJlxuICAgICAgICB0eXBlICE9PSAnZGVjaXNpb24nICYmXG4gICAgICAgIHR5cGUgIT09ICdmb3JtJyAmJlxuICAgICAgICB0eXBlICE9PSAnc3ViZmxvdycpXG4gICAgKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICAvLyBBZGp1c3QgcG9zaXRpb24gcmVsYXRpdmUgdG8gc3dpbWxhbmVcbiAgICBjb25zdCBhZGp1c3RlZFkgPSB5IC0gc3dpbWxhbmVJbmRleCAqIDI2MzsgLy8gU3VidHJhY3RpbmcgaGVhZGVyIGhlaWdodFxuXG4gICAgLy8gR2VuZXJhdGUgYSB1bmlxdWUgSUQgb3IgdXNlIGV4aXN0aW5nXG4gICAgY29uc3QgaWQgPVxuICAgICAgdXNlRXhpc3RpbmdJZCAmJiBzdGFnZURhdGE/LkNvZGVcbiAgICAgICAgPyBzdGFnZURhdGEuQ29kZVxuICAgICAgICA6IGAke3R5cGV9LSR7RGF0ZS5ub3coKX0tJHtNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAxMDAwKX1gO1xuXG4gICAgLy8gQ3JlYXRlIG5vZGUgd2l0aCBkaW1lbnNpb25zIGJhc2VkIG9uIHR5cGVcbiAgICBjb25zdCBub2RlOiBOb2RlID0ge1xuICAgICAgaWQsXG4gICAgICB0eXBlLFxuICAgICAgeCxcbiAgICAgIHk6IGFkanVzdGVkWSxcbiAgICAgIHdpZHRoOiB0eXBlID09PSAnc3ViZmxvdycgPyAxNTAgOiAxNjksIC8vIFdpZHRoIGZyb20gU1ZHXG4gICAgICBoZWlnaHQ6IDEwMCwgLy8gSGVpZ2h0IGZyb20gU1ZHXG4gICAgICBpc1N0YXJ0Tm9kZTogZmFsc2UsIC8vIERlZmF1bHQgdG8gZmFsc2VcbiAgICAgIHN0YWdlRGF0YTogc3RhZ2VEYXRhIHx8IHt9LCAvLyBTdG9yZSBzdGFnZSBkYXRhXG4gICAgICB3b3JrZmxvd0RhdGE6IHdvcmtmbG93RGF0YSB8fCBudWxsLFxuICAgIH07XG5cbiAgICAvLyBJZiB0aGlzIGlzIHRoZSBmaXJzdCBub2RlIGluIHRoZSBlbnRpcmUgd29ya2Zsb3csIG1hcmsgaXQgYXMgdGhlIHN0YXJ0IG5vZGVcbiAgICBpZiAodGhpcy5nZXROb2RlQ291bnQoKSA9PT0gMCkge1xuICAgICAgbm9kZS5pc1N0YXJ0Tm9kZSA9IHRydWU7XG4gICAgICB0aGlzLnN0YXJ0Tm9kZUlkID0gaWQ7XG4gICAgfVxuXG4gICAgLy8gR2VuZXJhdGUgY29ubmVjdGlvbiBwb2ludHMgZm9yIHRoZSBub2RlXG4gICAgbm9kZS5jb25uZWN0aW9uUG9pbnRzID0gdGhpcy5nZW5lcmF0ZUNvbm5lY3Rpb25Qb2ludHMobm9kZSk7XG5cbiAgICAvLyBBZGQgbm9kZSB0byB0aGUgc3dpbWxhbmVcbiAgICBpZiAoIXRoaXMuc3dpbWxhbmVzW3N3aW1sYW5lSW5kZXhdLm5vZGVzKSB7XG4gICAgICB0aGlzLnN3aW1sYW5lc1tzd2ltbGFuZUluZGV4XS5ub2RlcyA9IFtdO1xuICAgIH1cbiAgICB0aGlzLnN3aW1sYW5lc1tzd2ltbGFuZUluZGV4XS5ub2Rlcy5wdXNoKG5vZGUpO1xuXG4gICAgcmV0dXJuIG5vZGU7XG4gIH1cblxuICAvLyBIZWxwZXIgdG8gZ2V0IHRvdGFsIG5vZGUgY291bnQgYWNyb3NzIGFsbCBzd2ltbGFuZXNcbiAgZ2V0Tm9kZUNvdW50KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuc3dpbWxhbmVzLnJlZHVjZShcbiAgICAgIChjb3VudCwgc3dpbWxhbmUpID0+IGNvdW50ICsgKHN3aW1sYW5lLm5vZGVzPy5sZW5ndGggfHwgMCksXG4gICAgICAwXG4gICAgKTtcbiAgfVxuXG4gIC8vIEZpbmQgYSBub2RlIGJ5IElEICh1c2VmdWwgZm9yIGxhdGVyIG9wZXJhdGlvbnMpXG4gIGZpbmROb2RlQnlJZChpZDogc3RyaW5nKTogeyBub2RlOiBOb2RlOyBzd2ltbGFuZUluZGV4OiBudW1iZXIgfSB8IG51bGwge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5zd2ltbGFuZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IHN3aW1sYW5lID0gdGhpcy5zd2ltbGFuZXNbaV07XG4gICAgICBjb25zdCBub2RlID0gc3dpbWxhbmUubm9kZXM/LmZpbmQoKG4pID0+IG4uaWQgPT09IGlkKTtcbiAgICAgIGlmIChub2RlKSB7XG4gICAgICAgIHJldHVybiB7IG5vZGUsIHN3aW1sYW5lSW5kZXg6IGkgfTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICAvLyBGaW5kIGEgbm9kZSBieSBJRCAodXNlZnVsIGZvciBsYXRlciBvcGVyYXRpb25zKVxuICBmaW5kQWN0aW9uQnlJZChjb25uZWN0aW9uSWQ6IHN0cmluZyk6IENvbm5lY3Rpb24gfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5jb25uZWN0aW9ucy5maW5kKCh7IGlkIH0pID0+IGlkID09PSBjb25uZWN0aW9uSWQpID8/IG51bGw7XG4gIH1cblxuICBzdGFydENvbm5lY3Rpb25EcmFnKFxuICAgIHBvaW50OiBDb25uZWN0aW9uUG9pbnQsXG4gICAgc3dpbWxhbmVJbmRleDogbnVtYmVyLFxuICAgIGdsb2JhbFg6IG51bWJlcixcbiAgICBnbG9iYWxZOiBudW1iZXJcbiAgKSB7XG4gICAgdGhpcy5kcmFnZ2luZ0Nvbm5lY3Rpb25EYXRhID0ge1xuICAgICAgc291cmNlUG9pbnQ6IHBvaW50LFxuICAgICAgc291cmNlU3dpbWxhbmVJbmRleDogc3dpbWxhbmVJbmRleCxcbiAgICAgIHN0YXJ0WDogZ2xvYmFsWCxcbiAgICAgIHN0YXJ0WTogZ2xvYmFsWSxcbiAgICAgIGN1cnJlbnRYOiBnbG9iYWxYLFxuICAgICAgY3VycmVudFk6IGdsb2JhbFksXG4gICAgfTtcbiAgfVxuXG4gIHVwZGF0ZUNvbm5lY3Rpb25EcmFnKGN1cnJlbnRYOiBudW1iZXIsIGN1cnJlbnRZOiBudW1iZXIpIHtcbiAgICBpZiAodGhpcy5kcmFnZ2luZ0Nvbm5lY3Rpb25EYXRhLnNvdXJjZVBvaW50KSB7XG4gICAgICB0aGlzLmRyYWdnaW5nQ29ubmVjdGlvbkRhdGEuY3VycmVudFggPSBjdXJyZW50WDtcbiAgICAgIHRoaXMuZHJhZ2dpbmdDb25uZWN0aW9uRGF0YS5jdXJyZW50WSA9IGN1cnJlbnRZO1xuICAgIH1cbiAgfVxuXG4gIGVuZENvbm5lY3Rpb25EcmFnKCkge1xuICAgIGNvbnNvbGUubG9nKCdFbmRpbmcgY29ubmVjdGlvbiBkcmFnLCBjbGVhcmluZyBkYXRhJyk7XG4gICAgLy8gQ2xlYXIgZHJhZ2dpbmcgZGF0YVxuICAgIHRoaXMuZHJhZ2dpbmdDb25uZWN0aW9uRGF0YSA9IHt9O1xuICB9XG5cbiAgaXNDb25uZWN0aW9uRHJhZ2dpbmcoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhdGhpcy5kcmFnZ2luZ0Nvbm5lY3Rpb25EYXRhLnNvdXJjZVBvaW50O1xuICB9XG5cbiAgZ2V0Q29ubmVjdGlvblBhdGhEYXRhKCk6IHtcbiAgICBzdGFydFg6IG51bWJlcjtcbiAgICBzdGFydFk6IG51bWJlcjtcbiAgICBlbmRYOiBudW1iZXI7XG4gICAgZW5kWTogbnVtYmVyO1xuICAgIHNvdXJjZVN3aW1sYW5lSW5kZXg6IG51bWJlcjtcbiAgfSB8IG51bGwge1xuICAgIGlmICghdGhpcy5kcmFnZ2luZ0Nvbm5lY3Rpb25EYXRhLnNvdXJjZVBvaW50KSByZXR1cm4gbnVsbDtcblxuICAgIGNvbnN0IHsgc291cmNlUG9pbnQsIHNvdXJjZVN3aW1sYW5lSW5kZXgsIGN1cnJlbnRYLCBjdXJyZW50WSB9ID1cbiAgICAgIHRoaXMuZHJhZ2dpbmdDb25uZWN0aW9uRGF0YTtcbiAgICBjb25zdCBub2RlID0gdGhpcy5maW5kTm9kZUJ5SWQoc291cmNlUG9pbnQubm9kZUlkKT8ubm9kZTtcblxuICAgIGlmICghbm9kZSB8fCBzb3VyY2VTd2ltbGFuZUluZGV4ID09PSB1bmRlZmluZWQpIHJldHVybiBudWxsO1xuXG4gICAgLy8gQ2FsY3VsYXRlIHN0YXJ0IHBvaW50IGluIGdsb2JhbCBjb29yZGluYXRlc1xuICAgIGNvbnN0IHN0YXJ0WCA9IG5vZGUueCArIHNvdXJjZVBvaW50Lng7XG4gICAgY29uc3Qgc3RhcnRZID0gbm9kZS55ICsgc291cmNlUG9pbnQueSArIHNvdXJjZVN3aW1sYW5lSW5kZXggKiAyNjM7IC8vIEFkZCBzd2ltbGFuZSBvZmZzZXRcblxuICAgIHJldHVybiB7XG4gICAgICBzdGFydFgsXG4gICAgICBzdGFydFksXG4gICAgICBlbmRYOiBjdXJyZW50WCA/PyBzdGFydFgsXG4gICAgICBlbmRZOiBjdXJyZW50WSA/PyBzdGFydFksXG4gICAgICBzb3VyY2VTd2ltbGFuZUluZGV4LFxuICAgIH07XG4gIH1cblxuICBjcmVhdGVDb25uZWN0aW9uKFxuICAgIHRhcmdldE5vZGVJZDogc3RyaW5nLFxuICAgIHRhcmdldFBvaW50SWQ6IHN0cmluZyxcbiAgICB0YXJnZXRTd2ltbGFuZUluZGV4OiBudW1iZXJcbiAgKTogQ29ubmVjdGlvbiB8IG51bGwge1xuICAgIGNvbnN0IHsgc291cmNlUG9pbnQsIHNvdXJjZVN3aW1sYW5lSW5kZXggfSA9IHRoaXMuZHJhZ2dpbmdDb25uZWN0aW9uRGF0YTtcblxuICAgIGlmICghc291cmNlUG9pbnQgfHwgc291cmNlU3dpbWxhbmVJbmRleCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdNaXNzaW5nIHNvdXJjZSBkYXRhIGZvciBjb25uZWN0aW9uJyk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCBjb25uZWN0aW9uOiBDb25uZWN0aW9uID0ge1xuICAgICAgaWQ6IGBjb25uLSR7RGF0ZS5ub3coKX0tJHtNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAxMDAwKX1gLFxuICAgICAgc291cmNlTm9kZUlkOiBzb3VyY2VQb2ludC5ub2RlSWQsXG4gICAgICB0YXJnZXROb2RlSWQ6IHRhcmdldE5vZGVJZCxcbiAgICAgIHNvdXJjZVBvaW50SWQ6IHNvdXJjZVBvaW50LmlkLFxuICAgICAgdGFyZ2V0UG9pbnRJZDogdGFyZ2V0UG9pbnRJZCxcbiAgICAgIHNvdXJjZVN3aW1sYW5lSW5kZXg6IHNvdXJjZVN3aW1sYW5lSW5kZXgsXG4gICAgICB0YXJnZXRTd2ltbGFuZUluZGV4OiB0YXJnZXRTd2ltbGFuZUluZGV4LFxuICAgICAgbGFiZWw6ICcnLFxuICAgICAgYWN0aW9uOiBudWxsLFxuICAgIH07XG5cbiAgICB0aGlzLmNvbm5lY3Rpb25zLnB1c2goY29ubmVjdGlvbik7XG4gICAgY29uc29sZS5sb2coJ0NyZWF0ZWQgY29ubmVjdGlvbjonLCBjb25uZWN0aW9uKTtcbiAgICBjb25zb2xlLmxvZyhcbiAgICAgICdDb25uZWN0aW9ucyBhcnJheSBub3cgaGFzJyxcbiAgICAgIHRoaXMuY29ubmVjdGlvbnMubGVuZ3RoLFxuICAgICAgJ2Nvbm5lY3Rpb25zJ1xuICAgICk7XG4gICAgcmV0dXJuIGNvbm5lY3Rpb247XG4gIH1cblxuICAvLyBBZGQgYSBtZXRob2QgdG8gZ2V0IGNvbm5lY3Rpb24gZGF0YSBmb3IgcmVuZGVyaW5nXG4gIGdldENvbm5lY3Rpb25EYXRhKGNvbm5lY3Rpb246IENvbm5lY3Rpb24pOiB7XG4gICAgc3RhcnRYOiBudW1iZXI7XG4gICAgc3RhcnRZOiBudW1iZXI7XG4gICAgZW5kWDogbnVtYmVyO1xuICAgIGVuZFk6IG51bWJlcjtcbiAgICBzb3VyY2VTd2ltbGFuZUluZGV4OiBudW1iZXI7XG4gICAgdGFyZ2V0U3dpbWxhbmVJbmRleDogbnVtYmVyO1xuICB9IHwgbnVsbCB7XG4gICAgY29uc3Qgc291cmNlTm9kZUluZm8gPSB0aGlzLmZpbmROb2RlQnlJZChjb25uZWN0aW9uLnNvdXJjZU5vZGVJZCk7XG4gICAgY29uc3QgdGFyZ2V0Tm9kZUluZm8gPSB0aGlzLmZpbmROb2RlQnlJZChjb25uZWN0aW9uLnRhcmdldE5vZGVJZCk7XG5cbiAgICBpZiAoIXNvdXJjZU5vZGVJbmZvIHx8ICF0YXJnZXROb2RlSW5mbykge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY29uc3Qgc291cmNlTm9kZSA9IHNvdXJjZU5vZGVJbmZvLm5vZGU7XG4gICAgY29uc3QgdGFyZ2V0Tm9kZSA9IHRhcmdldE5vZGVJbmZvLm5vZGU7XG5cbiAgICAvLyBGaW5kIGNvbm5lY3Rpb24gcG9pbnRzXG4gICAgY29uc3Qgc291cmNlUG9pbnQgPSBzb3VyY2VOb2RlLmNvbm5lY3Rpb25Qb2ludHM/LmZpbmQoXG4gICAgICAocCkgPT4gcC5pZCA9PT0gY29ubmVjdGlvbi5zb3VyY2VQb2ludElkXG4gICAgKTtcbiAgICBjb25zdCB0YXJnZXRQb2ludCA9IHRhcmdldE5vZGUuY29ubmVjdGlvblBvaW50cz8uZmluZChcbiAgICAgIChwKSA9PiBwLmlkID09PSBjb25uZWN0aW9uLnRhcmdldFBvaW50SWRcbiAgICApO1xuXG4gICAgaWYgKCFzb3VyY2VQb2ludCB8fCAhdGFyZ2V0UG9pbnQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIC8vIENhbGN1bGF0ZSBnbG9iYWwgY29vcmRpbmF0ZXNcbiAgICBjb25zdCBzdGFydFggPSBzb3VyY2VOb2RlLnggKyBzb3VyY2VQb2ludC54O1xuICAgIGNvbnN0IHN0YXJ0WSA9XG4gICAgICBzb3VyY2VOb2RlLnkgKyBzb3VyY2VQb2ludC55ICsgY29ubmVjdGlvbi5zb3VyY2VTd2ltbGFuZUluZGV4ICogMjYzO1xuXG4gICAgY29uc3QgZW5kWCA9IHRhcmdldE5vZGUueCArIHRhcmdldFBvaW50Lng7XG4gICAgY29uc3QgZW5kWSA9XG4gICAgICB0YXJnZXROb2RlLnkgKyB0YXJnZXRQb2ludC55ICsgY29ubmVjdGlvbi50YXJnZXRTd2ltbGFuZUluZGV4ICogMjYzO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHN0YXJ0WCxcbiAgICAgIHN0YXJ0WSxcbiAgICAgIGVuZFgsXG4gICAgICBlbmRZLFxuICAgICAgc291cmNlU3dpbWxhbmVJbmRleDogY29ubmVjdGlvbi5zb3VyY2VTd2ltbGFuZUluZGV4LFxuICAgICAgdGFyZ2V0U3dpbWxhbmVJbmRleDogY29ubmVjdGlvbi50YXJnZXRTd2ltbGFuZUluZGV4LFxuICAgIH07XG4gIH1cblxuICAvLyBBZGQgYSBtZXRob2QgdG8gY2hlY2sgaWYgYSBjb25uZWN0aW9uIGlzIGFsbG93ZWQgYmFzZWQgb24gbm9kZSB0eXBlc1xuICBjYW5Db25uZWN0KHNvdXJjZU5vZGVUeXBlOiBzdHJpbmcsIHRhcmdldE5vZGVUeXBlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5jb25uZWN0aW9uUnVsZXNbc291cmNlTm9kZVR5cGVdPy5pbmNsdWRlcyh0YXJnZXROb2RlVHlwZSkgfHwgZmFsc2VcbiAgICApO1xuICB9XG5cbiAgLy8gQWRkIGEgbWV0aG9kIHRvIGdldCBhbGxvd2VkIG5vZGUgdHlwZXMgZm9yIHRoZSBjdXJyZW50IGRyYWdnaW5nIGNvbm5lY3Rpb25cbiAgZ2V0QWxsb3dlZFRhcmdldE5vZGVUeXBlcygpOiBzdHJpbmdbXSB7XG4gICAgaWYgKCF0aGlzLmRyYWdnaW5nQ29ubmVjdGlvbkRhdGEuc291cmNlUG9pbnQpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICBjb25zdCBzb3VyY2VOb2RlSW5mbyA9IHRoaXMuZmluZE5vZGVCeUlkKFxuICAgICAgdGhpcy5kcmFnZ2luZ0Nvbm5lY3Rpb25EYXRhLnNvdXJjZVBvaW50Lm5vZGVJZFxuICAgICk7XG4gICAgaWYgKCFzb3VyY2VOb2RlSW5mbykge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIGNvbnN0IHNvdXJjZU5vZGVUeXBlID0gc291cmNlTm9kZUluZm8ubm9kZS50eXBlO1xuXG4gICAgcmV0dXJuIHRoaXMuY29ubmVjdGlvblJ1bGVzW3NvdXJjZU5vZGVUeXBlXSB8fCBbXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWxldGVzIGEgc3dpbWxhbmUuIE9ubHkgc3VjY2VlZHMgd2hlbiB0aGUgbGFuZSBoYXMgbm8gbm9kZXMg4oCUIHN0YWdlcyBtdXN0XG4gICAqIGJlIG1vdmVkIHRvIGFub3RoZXIgbGFuZSBmaXJzdC4gUmV0dXJucyBmYWxzZSB3aGVuIHRoZSBsYW5lIHN0aWxsIGhhcyBub2Rlc1xuICAgKiBvciB0aGUgaW5kZXggaXMgb3V0IG9mIHJhbmdlLlxuICAgKlxuICAgKiBLZWVwcyBldmVyeXRoaW5nIGFsaWduZWQgYWZ0ZXIgcmVtb3ZhbDpcbiAgICogLSBSZS1zZXF1ZW5jZXMgYG9yZGVyYCBvbiB0aGUgcmVtYWluaW5nIGxhbmVzIChpbW11dGFibGUgcmVhc3NpZ25tZW50IHNvXG4gICAqICAgQW5ndWxhcidzIEBmb3IgYmxvY2tzIHJlLXJlbmRlcikuXG4gICAqIC0gRGVjcmVtZW50cyB0aGUgc3dpbWxhbmUgaW5kaWNlcyBzdG9yZWQgb24gY29ubmVjdGlvbnMgd2hvc2UgZW5kcG9pbnRzXG4gICAqICAgbGl2ZSBiZWxvdyB0aGUgcmVtb3ZlZCBsYW5lLCBzaW5jZSB0aG9zZSBsYW5lcyBzaGlmdCB1cCBieSBvbmUuXG4gICAqXG4gICAqIFRoZSBsYW5lJ3Mgb3JpZ2luYWwgcmVjb3JkIGlzIGxlZnQgaW4gYHN3aW1sYW5lUmVjb3JkYCwgc28gYSBwcmV2aW91c2x5XG4gICAqIGxvYWRlZCBsYW5lIGlzIGVtaXR0ZWQgd2l0aCBgT2JqZWN0U3RhdGUuUmVtb3ZlZGAgYnlcbiAgICogYHRyYW5zZm9ybVRvV29ya2Zsb3dNb2RlbGA7IGEgbmV2ZXItc2F2ZWQgbGFuZSBzaW1wbHkgZGlzYXBwZWFycy5cbiAgICovXG4gIGRlbGV0ZVN3aW1sYW5lKGluZGV4OiBudW1iZXIpOiBib29sZWFuIHtcbiAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IHRoaXMuc3dpbWxhbmVzLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnN3aW1sYW5lc1tpbmRleF0ubm9kZXM/Lmxlbmd0aCkge1xuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAnQ2Fubm90IGRlbGV0ZSBhIHN3aW1sYW5lIHRoYXQgc3RpbGwgaGFzIHN0YWdlczsgbW92ZSB0aGVtIG91dCBmaXJzdC4nXG4gICAgICApO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHRoaXMuc3dpbWxhbmVzID0gdGhpcy5zd2ltbGFuZXNcbiAgICAgIC5maWx0ZXIoKF8sIGkpID0+IGkgIT09IGluZGV4KVxuICAgICAgLm1hcCgobGFuZSwgaSkgPT4gKHsgLi4ubGFuZSwgb3JkZXI6IGkgfSkpO1xuXG4gICAgdGhpcy5jb25uZWN0aW9ucyA9IHRoaXMuY29ubmVjdGlvbnMubWFwKChjb25uKSA9PiAoe1xuICAgICAgLi4uY29ubixcbiAgICAgIHNvdXJjZVN3aW1sYW5lSW5kZXg6XG4gICAgICAgIGNvbm4uc291cmNlU3dpbWxhbmVJbmRleCA+IGluZGV4XG4gICAgICAgICAgPyBjb25uLnNvdXJjZVN3aW1sYW5lSW5kZXggLSAxXG4gICAgICAgICAgOiBjb25uLnNvdXJjZVN3aW1sYW5lSW5kZXgsXG4gICAgICB0YXJnZXRTd2ltbGFuZUluZGV4OlxuICAgICAgICBjb25uLnRhcmdldFN3aW1sYW5lSW5kZXggPiBpbmRleFxuICAgICAgICAgID8gY29ubi50YXJnZXRTd2ltbGFuZUluZGV4IC0gMVxuICAgICAgICAgIDogY29ubi50YXJnZXRTd2ltbGFuZUluZGV4LFxuICAgIH0pKTtcblxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgdXBkYXRlU3dpbWxhbmUoaW5kZXg6IG51bWJlciwgbmFtZTogc3RyaW5nLCB0YWdzOiBUYWdbXSkge1xuICAgIGNvbnNvbGUubG9nKFxuICAgICAgJ1N0YXRlOiBVcGRhdGluZyBzd2ltbGFuZSBhdCBpbmRleCcsXG4gICAgICBpbmRleCxcbiAgICAgICd3aXRoIG5hbWUnLFxuICAgICAgbmFtZSxcbiAgICAgICdhbmQgdGFncycsXG4gICAgICB0YWdzXG4gICAgKTtcblxuICAgIGlmIChpbmRleCA+PSAwICYmIGluZGV4IDwgdGhpcy5zd2ltbGFuZXMubGVuZ3RoKSB7XG4gICAgICB0aGlzLnN3aW1sYW5lc1tpbmRleF0gPSB7XG4gICAgICAgIC4uLnRoaXMuc3dpbWxhbmVzW2luZGV4XSxcbiAgICAgICAgbGFiZWw6IG5hbWUsXG4gICAgICAgIHRhZ3M6IHRhZ3MsXG4gICAgICB9O1xuICAgICAgY29uc29sZS5sb2coJ1N3aW1sYW5lIHVwZGF0ZWQ6JywgdGhpcy5zd2ltbGFuZXNbaW5kZXhdKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc29sZS5lcnJvcignSW52YWxpZCBzd2ltbGFuZSBpbmRleDonLCBpbmRleCk7XG4gICAgfVxuICB9XG5cbiAgdHJhbnNmb3JtVG9Xb3JrZmxvd01vZGVsKCk6IFdvcmtmbG93IHtcbiAgICAvLyBVc2Ugc3RvcmVkIHdvcmtmbG93IGlmIGF2YWlsYWJsZSwgb3RoZXJ3aXNlIGNyZWF0ZSBhIG5ldyBvbmVcbiAgICBjb25zdCB3b3JrZmxvdzogV29ya2Zsb3cgPSB0aGlzLndvcmtmbG93XG4gICAgICA/IHsgLi4udGhpcy53b3JrZmxvdywgRGF0YVN0YXRlOiBPYmplY3RTdGF0ZS5DaGFuZ2VkIH1cbiAgICAgIDoge1xuICAgICAgICAvLyBCYXNlTW9kZWwgcHJvcGVydGllc1xuICAgICAgICBJZDogJycsXG4gICAgICAgIENvZGU6ICcnLFxuICAgICAgICBUZW5hbnRJZDogJycsXG4gICAgICAgIGlkOiAnJyxcbiAgICAgICAgU2VydmljZU5hbWU6ICcnLFxuICAgICAgICBDcmVhdGVkQXQ6IG5ldyBEYXRlKCksXG4gICAgICAgIFVwZGF0ZWRBdDogbmV3IERhdGUoKSxcbiAgICAgICAgRGF0YVN0YXRlOiB0aGlzLndhc0xvYWRlZEZyb21BcGkodGhpcy53b3JrZmxvd0lkIHx8ICcnKVxuICAgICAgICAgID8gT2JqZWN0U3RhdGUuQ2hhbmdlZFxuICAgICAgICAgIDogT2JqZWN0U3RhdGUuTmV3LFxuXG4gICAgICAgIC8vIFdvcmtmbG93IHNwZWNpZmljIHByb3BlcnRpZXNcbiAgICAgICAgTmFtZTogJ05ldyBXb3JrZmxvdycsXG4gICAgICAgIERlc2NyaXB0aW9uOiAnJyxcbiAgICAgICAgU3RhZ2VFbnRyeVJ1bGU6ICcnLFxuICAgICAgICBGb3JtOiB0aGlzLndvcmtmbG93Rm9ybUlkIHx8IHVuZGVmaW5lZCxcbiAgICAgICAgQXNzaWdubWVudFR5cGU6IFRhc2tBc3NpZ25tZW50VHlwZS5BdXRvUm91dGUsXG4gICAgICAgIE9wZXJhdGlvbjogJycsXG4gICAgICAgIFN0YXR1czogU3RhdHVzLkFjdGl2ZSxcbiAgICAgICAgQWN0aW9uczogW10sXG4gICAgICAgIExhbmVzOiBbXSxcbiAgICAgICAgU3RhZ2VzOiBbXSxcbiAgICAgIH07XG5cbiAgICAvLyBVcGRhdGUgd29ya2Zsb3cgZm9ybSBpZiBjaGFuZ2VkXG4gICAgaWYgKHRoaXMud29ya2Zsb3dGb3JtSWQgIT09IHRoaXMud29ya2Zsb3c/LkZvcm0pIHtcbiAgICAgIHdvcmtmbG93LkZvcm0gPSB0aGlzLndvcmtmbG93Rm9ybUlkIHx8IHdvcmtmbG93LkZvcm07XG4gICAgfVxuXG4gICAgLy8gVHJhbnNmb3JtIHN3aW1sYW5lcyB0byBTd2ltTGFuZVtdXG4gICAgd29ya2Zsb3cuTGFuZXMgPSB0aGlzLnN3aW1sYW5lcy5tYXAoKHN3aW1sYW5lKSA9PiB7XG4gICAgICAvLyBDaGVjayBpZiB0aGlzIGlzIGFuIGV4aXN0aW5nIHN3aW1sYW5lXG4gICAgICBpZiAoc3dpbWxhbmUuaWQgJiYgdGhpcy5zd2ltbGFuZVJlY29yZFtzd2ltbGFuZS5pZF0pIHtcbiAgICAgICAgLy8gVXBkYXRlIGV4aXN0aW5nIGxhbmUgd2l0aCBjaGFuZ2VkIHZhbHVlc1xuICAgICAgICBjb25zdCBleGlzdGluZ0xhbmUgPSB0aGlzLnN3aW1sYW5lUmVjb3JkW3N3aW1sYW5lLmlkXTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAuLi5leGlzdGluZ0xhbmUsXG4gICAgICAgICAgTmFtZTogc3dpbWxhbmUubGFiZWwsXG4gICAgICAgICAgVGFnczogc3dpbWxhbmUudGFncyxcbiAgICAgICAgICBQb3NpdGlvbjogc3dpbWxhbmUub3JkZXIsXG4gICAgICAgICAgQ29vcmRpbmF0ZXM6IHsgWDogMCwgWTogc3dpbWxhbmUub3JkZXIgKiAyNjMgfSxcbiAgICAgICAgICBEYXRhU3RhdGU6IE9iamVjdFN0YXRlLkNoYW5nZWQsXG4gICAgICAgICAgVXBkYXRlZEF0OiBuZXcgRGF0ZSgpLFxuICAgICAgICB9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gR2VuZXJhdGUgYSBuZXcgSUQgZm9yIG5ldyBzd2ltbGFuZXMgaWYgbm90IGFscmVhZHkgc2V0XG4gICAgICAgIGNvbnN0IGxhbmVJZCA9XG4gICAgICAgICAgc3dpbWxhbmUuaWQgfHxcbiAgICAgICAgICBgbGFuZS0ke0RhdGUubm93KCl9LSR7TWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogMTAwMCl9YDtcblxuICAgICAgICAvLyBDcmVhdGUgbmV3IGxhbmVcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBDb2RlOiAnJyxcbiAgICAgICAgICBJZDogJycsXG4gICAgICAgICAgVGVuYW50SWQ6ICcnLFxuICAgICAgICAgIC8vIGlkOiBsYW5lSWQsXG4gICAgICAgICAgaWQ6ICcnLFxuICAgICAgICAgIFNlcnZpY2VOYW1lOiAnJyxcbiAgICAgICAgICBDcmVhdGVkQXQ6IG5ldyBEYXRlKCksXG4gICAgICAgICAgVXBkYXRlZEF0OiBuZXcgRGF0ZSgpLFxuICAgICAgICAgIERhdGFTdGF0ZTogT2JqZWN0U3RhdGUuTmV3LFxuICAgICAgICAgIFdvcmtmbG93OiB3b3JrZmxvdy5Db2RlLFxuICAgICAgICAgIE5hbWU6IHN3aW1sYW5lLmxhYmVsLFxuICAgICAgICAgIFRhZ3M6IHN3aW1sYW5lLnRhZ3MgfHwgW10sXG4gICAgICAgICAgUG9zaXRpb246IHN3aW1sYW5lLm9yZGVyLFxuICAgICAgICAgIENvb3JkaW5hdGVzOiB7IFg6IDAsIFk6IHN3aW1sYW5lLm9yZGVyICogMjYzIH0sXG4gICAgICAgICAgU2l6ZTogeyBXaWR0aDogMzAwMCwgSGVpZ2h0OiAyNjMgfSxcbiAgICAgICAgICBLZXk6IHN3aW1sYW5lLmlkLFxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgLy8gVHJhbnNmb3JtIG5vZGVzIHRvIFdvcmtmbG93U3RhZ2VbXVxuICAgIGNvbnN0IHN0YWdlczogV29ya2Zsb3dTdGFnZVtdID0gW107XG5cbiAgICB0aGlzLnN3aW1sYW5lcy5mb3JFYWNoKChzd2ltbGFuZSwgc3dpbWxhbmVJbmRleCkgPT4ge1xuICAgICAgc3dpbWxhbmUubm9kZXM/LmZvckVhY2goKG5vZGUpID0+IHtcbiAgICAgICAgaWYgKG5vZGUudHlwZSA9PT0gJ3N0YWdlJyB8fCBub2RlLnR5cGUgPT09ICdzdWJmbG93Jykge1xuICAgICAgICAgIGNvbnNvbGUubG9nKG5vZGUpO1xuICAgICAgICAgIC8vIENoZWNrIGlmIHRoaXMgaXMgYW4gZXhpc3Rpbmcgc3RhZ2VcbiAgICAgICAgICBpZiAodGhpcy5zdGFnZVJlY29yZFtub2RlLmlkXSkge1xuICAgICAgICAgICAgLy8gVXBkYXRlIGV4aXN0aW5nIHN0YWdlIHdpdGggY2hhbmdlZCB2YWx1ZXNcbiAgICAgICAgICAgIGNvbnN0IGV4aXN0aW5nU3RhZ2UgPSB0aGlzLnN0YWdlUmVjb3JkW25vZGUuaWRdO1xuXG4gICAgICAgICAgICAvLyBDcmVhdGUgYSBuZXcgb2JqZWN0IHdpdGggdXBkYXRlZCBwcm9wZXJ0aWVzXG4gICAgICAgICAgICBjb25zdCB1cGRhdGVkU3RhZ2U6IFdvcmtmbG93U3RhZ2UgPSB7XG4gICAgICAgICAgICAgIC4uLmV4aXN0aW5nU3RhZ2UsXG4gICAgICAgICAgICAgIERhdGFTdGF0ZTogT2JqZWN0U3RhdGUuQ2hhbmdlZCxcbiAgICAgICAgICAgICAgVXBkYXRlZEF0OiBuZXcgRGF0ZSgpLFxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgLy8gVXBkYXRlIHByb3BlcnRpZXMgdGhhdCBtYXkgaGF2ZSBjaGFuZ2VkXG4gICAgICAgICAgICBpZiAobm9kZS5zdGFnZURhdGE/Lk5hbWUgIT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgdXBkYXRlZFN0YWdlLk5hbWUgPVxuICAgICAgICAgICAgICAgIG5vZGUud29ya2Zsb3dEYXRhPy5uYW1lID8/IG5vZGUuc3RhZ2VEYXRhLk5hbWU7XG4gICAgICAgICAgICBpZiAobm9kZS5zdGFnZURhdGE/LkRlc2NyaXB0aW9uICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgIHVwZGF0ZWRTdGFnZS5EZXNjcmlwdGlvbiA9IG5vZGUuc3RhZ2VEYXRhLkRlc2NyaXB0aW9uO1xuICAgICAgICAgICAgaWYgKG5vZGUuc3RhZ2VEYXRhPy5EdXJhdGlvbiAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICB1cGRhdGVkU3RhZ2UuRHVyYXRpb24gPSBub2RlLnN0YWdlRGF0YS5EdXJhdGlvbjtcbiAgICAgICAgICAgIGlmIChub2RlLnN0YWdlRGF0YT8uUGFzc09uUnVsZSAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICB1cGRhdGVkU3RhZ2UuUGFzc09uUnVsZSA9IG5vZGUuc3RhZ2VEYXRhLlBhc3NPblJ1bGU7XG4gICAgICAgICAgICBpZiAobm9kZS5zdGFnZURhdGE/LkFjdG9yUnVsZSAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICB1cGRhdGVkU3RhZ2UuQWN0b3JSdWxlID0gbm9kZS5zdGFnZURhdGEuQWN0b3JSdWxlO1xuICAgICAgICAgICAgaWYgKG5vZGUuc3RhZ2VEYXRhPy5Bc3NpZ25tZW50VHlwZSAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICB1cGRhdGVkU3RhZ2UuQXNzaWdubWVudFR5cGUgPSBub2RlLnN0YWdlRGF0YS5Bc3NpZ25tZW50VHlwZTtcbiAgICAgICAgICAgIGlmIChub2RlLnN0YWdlRGF0YT8uTWluTm9PZkFjdG9yICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgIHVwZGF0ZWRTdGFnZS5NaW5Ob09mQWN0b3IgPSBub2RlLnN0YWdlRGF0YS5NaW5Ob09mQWN0b3I7XG4gICAgICAgICAgICBpZiAobm9kZS5zdGFnZURhdGE/LklzUGFyYWxsZWwgIT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgdXBkYXRlZFN0YWdlLklzUGFyYWxsZWwgPSBub2RlLnN0YWdlRGF0YS5Jc1BhcmFsbGVsO1xuICAgICAgICAgICAgaWYgKG5vZGUuc3RhZ2VEYXRhPy5UYWdzKSB1cGRhdGVkU3RhZ2UuVGFncyA9IG5vZGUuc3RhZ2VEYXRhLlRhZ3M7XG5cbiAgICAgICAgICAgIC8vIEFsd2F5cyB1cGRhdGUgdGhlc2UgcHJvcGVydGllc1xuICAgICAgICAgICAgdXBkYXRlZFN0YWdlLklzRW50cnlQb2ludCA9IG5vZGUuaXNTdGFydE5vZGU7XG4gICAgICAgICAgICB1cGRhdGVkU3RhZ2UuSXNFeGl0UG9pbnQgPSBub2RlLnN0YWdlRGF0YT8uSXNFeGl0UG9pbnQgfHwgZmFsc2U7XG4gICAgICAgICAgICB1cGRhdGVkU3RhZ2UuRm9ybSA9IG5vZGUuc3RhZ2VEYXRhPy5mb3JtSWQgfHwgJyc7XG4gICAgICAgICAgICB1cGRhdGVkU3RhZ2UuQ29vcmRpbmF0ZXMgPSB7IFg6IG5vZGUueCwgWTogbm9kZS55IH07XG4gICAgICAgICAgICB1cGRhdGVkU3RhZ2UuU3dpbUxhbmUgPSB0aGlzLnN3aW1sYW5lc1tzd2ltbGFuZUluZGV4XS5pZCB8fCAnJztcblxuICAgICAgICAgICAgLy8gY29uc29sZS5sb2coXCJOT0RFX1RZUEVcIiwgbm9kZS50eXBlKTtcblxuICAgICAgICAgICAgLy8gSGFuZGxlIHN1YmZsb3cgc3RhZ2VcbiAgICAgICAgICAgIGlmIChub2RlLnR5cGUgPT09ICdzdWJmbG93Jykge1xuICAgICAgICAgICAgICB1cGRhdGVkU3RhZ2UuSXNTdWJQcm9jZXNzID0gdHJ1ZTtcbiAgICAgICAgICAgICAgdXBkYXRlZFN0YWdlLlN1YldvcmtGbG93ID0gbm9kZS53b3JrZmxvd0RhdGE/LmlkIHx8ICcnO1xuICAgICAgICAgICAgICB1cGRhdGVkU3RhZ2UuTmFtZSA9IG5vZGUud29ya2Zsb3dEYXRhPy5uYW1lIHx8ICcnO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBBZGQgdG8gc3RhZ2VzXG4gICAgICAgICAgICBzdGFnZXMucHVzaCh1cGRhdGVkU3RhZ2UpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBDcmVhdGUgYSBuZXcgc3RhZ2VcbiAgICAgICAgICAgIHN0YWdlcy5wdXNoKHtcbiAgICAgICAgICAgICAgSWQ6ICcnLFxuICAgICAgICAgICAgICBDb2RlOiAnJyxcbiAgICAgICAgICAgICAgVGVuYW50SWQ6ICcnLFxuICAgICAgICAgICAgICAvLyBpZDogbm9kZS5pZCxcbiAgICAgICAgICAgICAgaWQ6ICcnLFxuICAgICAgICAgICAgICBTZXJ2aWNlTmFtZTogJycsXG4gICAgICAgICAgICAgIENyZWF0ZWRBdDogbmV3IERhdGUoKSxcbiAgICAgICAgICAgICAgVXBkYXRlZEF0OiBuZXcgRGF0ZSgpLFxuICAgICAgICAgICAgICBEYXRhU3RhdGU6IE9iamVjdFN0YXRlLk5ldyxcbiAgICAgICAgICAgICAgV29ya2Zsb3c6IHdvcmtmbG93LkNvZGUsXG4gICAgICAgICAgICAgIE5hbWU6XG4gICAgICAgICAgICAgICAgKG5vZGUudHlwZSA9PT0gJ3N1YmZsb3cnXG4gICAgICAgICAgICAgICAgICA/IG5vZGUud29ya2Zsb3dEYXRhPy5uYW1lXG4gICAgICAgICAgICAgICAgICA6IG5vZGUuc3RhZ2VEYXRhPy5OYW1lKSA/PyAnJyxcbiAgICAgICAgICAgICAgRGVzY3JpcHRpb246IG5vZGUuc3RhZ2VEYXRhPy5EZXNjcmlwdGlvbiB8fCAnJyxcbiAgICAgICAgICAgICAgRHVyYXRpb246IG5vZGUuc3RhZ2VEYXRhPy5EdXJhdGlvbiB8fCAwLFxuICAgICAgICAgICAgICBQYXNzT25SdWxlOiBub2RlLnN0YWdlRGF0YT8uUGFzc09uUnVsZSB8fCAnJyxcbiAgICAgICAgICAgICAgQWN0b3JSdWxlOiBub2RlLnN0YWdlRGF0YT8uQWN0b3JSdWxlIHx8IFN0YWdlQWN0b3JSdWxlLk5vbmUsXG4gICAgICAgICAgICAgIE1pbk5vT2ZBY3Rvcjogbm9kZS5zdGFnZURhdGE/Lk1pbk5vT2ZBY3RvciB8fCAwLFxuICAgICAgICAgICAgICBJc1BhcmFsbGVsOiBub2RlLnN0YWdlRGF0YT8uSXNQYXJhbGxlbCB8fCBmYWxzZSxcbiAgICAgICAgICAgICAgSXNFbnRyeVBvaW50OiBub2RlLmlzU3RhcnROb2RlLFxuICAgICAgICAgICAgICBJc0V4aXRQb2ludDogbm9kZS5zdGFnZURhdGE/LklzRXhpdFBvaW50IHx8IGZhbHNlLCAvLyBXaWxsIGJlIHVwZGF0ZWQgYmVsb3dcbiAgICAgICAgICAgICAgVGFnczogbm9kZS5zdGFnZURhdGE/LlRhZ3MgfHwgW10sXG4gICAgICAgICAgICAgIEZvcm06IG5vZGUuc3RhZ2VEYXRhPy5mb3JtSWQgPz8gJycsXG4gICAgICAgICAgICAgIEFsbG93TXVsdGlTdWJQcm9jZXNzOiBmYWxzZSxcbiAgICAgICAgICAgICAgQXNzaWdubWVudFR5cGU6XG4gICAgICAgICAgICAgICAgbm9kZS5zdGFnZURhdGE/LkFzc2lnbm1lbnRUeXBlIHx8XG4gICAgICAgICAgICAgICAgdGhpcy53b3JrZmxvdz8uQXNzaWdubWVudFR5cGUgfHxcbiAgICAgICAgICAgICAgICBUYXNrQXNzaWdubWVudFR5cGUuQXV0b1JvdXRlLFxuICAgICAgICAgICAgICBTdWJXb3JrRmxvdzogbm9kZS53b3JrZmxvd0RhdGE/LmlkIHx8ICcnLFxuICAgICAgICAgICAgICBTd2ltTGFuZTogdGhpcy5zd2ltbGFuZXNbc3dpbWxhbmVJbmRleF0uaWQgfHwgJycsXG4gICAgICAgICAgICAgIENvb3JkaW5hdGVzOiB7IFg6IG5vZGUueCwgWTogbm9kZS55IH0sXG4gICAgICAgICAgICAgIElzU3ViUHJvY2Vzczogbm9kZS50eXBlID09PSAnc3ViZmxvdycsXG4gICAgICAgICAgICAgIEtleTogbm9kZS5zdGFnZURhdGE/LktleSB8fCBub2RlLmlkLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIC8vIC8vIERldGVybWluZSB3aGljaCBzdGFnZXMgYXJlIGV4aXQgcG9pbnRzIChubyBvdXRnb2luZyBjb25uZWN0aW9ucylcbiAgICAvLyBzdGFnZXMuZm9yRWFjaCgoc3RhZ2UpID0+IHtcbiAgICAvLyAgIGNvbnN0IGhhc091dGdvaW5nQ29ubmVjdGlvbnMgPSB0aGlzLmNvbm5lY3Rpb25zLnNvbWUoXG4gICAgLy8gICAgIChjb25uKSA9PlxuICAgIC8vICAgICAgIGNvbm4uc291cmNlTm9kZUlkID09PSBzdGFnZS5Db2RlIHx8IGNvbm4uc291cmNlTm9kZUlkID09PSBzdGFnZS5pZFxuICAgIC8vICAgKTtcbiAgICAvLyAgIGlmICghaGFzT3V0Z29pbmdDb25uZWN0aW9ucykge1xuICAgIC8vICAgICBzdGFnZS5Jc0V4aXRQb2ludCA9IHRydWU7XG4gICAgLy8gICB9XG4gICAgLy8gfSk7XG5cbiAgICAvLyBUcmFuc2Zvcm0gY29ubmVjdGlvbnMgdG8gV29ya2Zsb3dBY3Rpb25bXVxuICAgIGNvbnN0IGFjdGlvbnM6IFdvcmtmbG93QWN0aW9uW10gPSBbXTtcblxuICAgIHRoaXMuY29ubmVjdGlvbnMuZm9yRWFjaCgoY29ubikgPT4ge1xuICAgICAgY29uc3Qgc291cmNlTm9kZSA9IHRoaXMuZmluZE5vZGVCeUlkKGNvbm4uc291cmNlTm9kZUlkKT8ubm9kZTtcbiAgICAgIGNvbnN0IHRhcmdldE5vZGUgPSB0aGlzLmZpbmROb2RlQnlJZChjb25uLnRhcmdldE5vZGVJZCk/Lm5vZGU7XG5cbiAgICAgIC8vIENoZWNrIGlmIHRoaXMgaXMgYW4gZXhpc3RpbmcgYWN0aW9uXG4gICAgICBpZiAodGhpcy5hY3Rpb25SZWNvcmRbY29ubi5pZF0pIHtcbiAgICAgICAgLy8gVXBkYXRlIGV4aXN0aW5nIGFjdGlvbiB3aXRoIGNoYW5nZWQgdmFsdWVzXG4gICAgICAgIGNvbnN0IGV4aXN0aW5nQWN0aW9uID0gdGhpcy5hY3Rpb25SZWNvcmRbY29ubi5pZF07XG5cbiAgICAgICAgLy8gQ3JlYXRlIHVwZGF0ZWQgYWN0aW9uIHdpdGggY2hhbmdlZCBwcm9wZXJ0aWVzXG4gICAgICAgIGNvbnN0IHVwZGF0ZWRBY3Rpb246IFdvcmtmbG93QWN0aW9uID0ge1xuICAgICAgICAgIC4uLmV4aXN0aW5nQWN0aW9uLFxuICAgICAgICAgIERhdGFTdGF0ZTogT2JqZWN0U3RhdGUuQ2hhbmdlZCxcbiAgICAgICAgICBVcGRhdGVkQXQ6IG5ldyBEYXRlKCksXG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gVXBkYXRlIHByb3BlcnRpZXMgdGhhdCBtYXkgaGF2ZSBjaGFuZ2VkXG4gICAgICAgIHVwZGF0ZWRBY3Rpb24uTmFtZSA9XG4gICAgICAgICAgY29ubi5sYWJlbCA/P1xuICAgICAgICAgIGBBY3Rpb24gZnJvbSAke3NvdXJjZU5vZGU/LnN0YWdlRGF0YT8uTmFtZSB8fCAnVW5rbm93bid9IHRvICR7dGFyZ2V0Tm9kZT8uc3RhZ2VEYXRhPy5OYW1lIHx8ICdVbmtub3duJ1xuICAgICAgICAgIH1gO1xuICAgICAgICB1cGRhdGVkQWN0aW9uLk9wZXJhdGlvbkFjdGlvbiA9IGNvbm4uYWN0aW9uO1xuICAgICAgICB1cGRhdGVkQWN0aW9uLklzUGFyYWxsZWwgPSB0YXJnZXROb2RlPy5zdGFnZURhdGE/LklzUGFyYWxsZWwgfHwgZmFsc2U7XG4gICAgICAgIHVwZGF0ZWRBY3Rpb24uUGFzc09uUnVsZSA9IGNvbm4uY29uZGl0aW9uIHx8ICcnO1xuICAgICAgICB1cGRhdGVkQWN0aW9uLlRhcmdldFN0YXR1cyA9IGNvbm4udGFyZ2V0U3RhdHVzIHx8IHVuZGVmaW5lZDtcbiAgICAgICAgLy8gdXBkYXRlZEFjdGlvbi5Tb3VyY2VQb2ludFR5cGUgPSB0aGlzLmdldENvbm5lY3Rpb25Qb2ludFR5cGUoY29ubi5zb3VyY2VQb2ludElkKTtcbiAgICAgICAgLy8gdXBkYXRlZEFjdGlvbi5UYXJnZXRQb2ludFR5cGUgPSB0aGlzLmdldENvbm5lY3Rpb25Qb2ludFR5cGUoY29ubi50YXJnZXRQb2ludElkKTtcblxuICAgICAgICBhY3Rpb25zLnB1c2godXBkYXRlZEFjdGlvbik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBDcmVhdGUgYSBuZXcgYWN0aW9uXG4gICAgICAgIGFjdGlvbnMucHVzaCh7XG4gICAgICAgICAgSWQ6ICcnLFxuICAgICAgICAgIENvZGU6ICcnLFxuICAgICAgICAgIFRlbmFudElkOiAnJyxcbiAgICAgICAgICAvLyBpZDogY29ubi5pZCxcbiAgICAgICAgICBpZDogJycsXG4gICAgICAgICAgU2VydmljZU5hbWU6ICcnLFxuICAgICAgICAgIENyZWF0ZWRBdDogbmV3IERhdGUoKSxcbiAgICAgICAgICBVcGRhdGVkQXQ6IG5ldyBEYXRlKCksXG4gICAgICAgICAgRGF0YVN0YXRlOiBPYmplY3RTdGF0ZS5OZXcsXG4gICAgICAgICAgV29ya2Zsb3c6IHdvcmtmbG93LkNvZGUsXG4gICAgICAgICAgTmFtZTpcbiAgICAgICAgICAgIGNvbm4ubGFiZWwgPz9cbiAgICAgICAgICAgIGBBY3Rpb24gZnJvbSAke3NvdXJjZU5vZGU/LnN0YWdlRGF0YT8uTmFtZSB8fCAnVW5rbm93bid9IHRvICR7dGFyZ2V0Tm9kZT8uc3RhZ2VEYXRhPy5OYW1lIHx8ICdVbmtub3duJ1xuICAgICAgICAgICAgfWAsXG4gICAgICAgICAgT3BlcmF0aW9uQWN0aW9uOiBjb25uLmFjdGlvbixcbiAgICAgICAgICBUYXJnZXRTdGF0dXM6IGNvbm4udGFyZ2V0U3RhdHVzLFxuICAgICAgICAgIEZyb21TdGFnZTogY29ubi5zb3VyY2VOb2RlSWQsXG4gICAgICAgICAgVG9TdGFnZTogY29ubi50YXJnZXROb2RlSWQsXG4gICAgICAgICAgSXNQYXJhbGxlbDogc291cmNlTm9kZT8uc3RhZ2VEYXRhPy5Jc1BhcmFsbGVsIHx8IGZhbHNlLFxuICAgICAgICAgIFBhc3NPblJ1bGU6IGNvbm4uY29uZGl0aW9uIHx8ICcnLFxuICAgICAgICAgIFNvdXJjZVBvaW50VHlwZTogdGhpcy5nZXRDb25uZWN0aW9uUG9pbnRUeXBlKGNvbm4uc291cmNlUG9pbnRJZCksXG4gICAgICAgICAgVGFyZ2V0UG9pbnRUeXBlOiB0aGlzLmdldENvbm5lY3Rpb25Qb2ludFR5cGUoY29ubi50YXJnZXRQb2ludElkKSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyBBZGQgZGVsZXRlZCBvYmplY3RzIHdpdGggUmVtb3ZlZCBzdGF0ZVxuICAgIE9iamVjdC5rZXlzKHRoaXMuc3RhZ2VSZWNvcmQpLmZvckVhY2goKHN0YWdlSWQpID0+IHtcbiAgICAgIGNvbnN0IGV4aXN0cyA9IHN0YWdlcy5zb21lKFxuICAgICAgICAoc3RhZ2UpID0+IHN0YWdlLkNvZGUgPT09IHN0YWdlSWQgfHwgc3RhZ2UuaWQgPT09IHN0YWdlSWRcbiAgICAgICk7XG5cbiAgICAgIGlmICghZXhpc3RzKSB7XG4gICAgICAgIGNvbnN0IHN0YWdlID0gdGhpcy5zdGFnZVJlY29yZFtzdGFnZUlkXTtcbiAgICAgICAgc3RhZ2VzLnB1c2goe1xuICAgICAgICAgIC4uLnN0YWdlLFxuICAgICAgICAgIERhdGFTdGF0ZTogT2JqZWN0U3RhdGUuUmVtb3ZlZCxcbiAgICAgICAgICBVcGRhdGVkQXQ6IG5ldyBEYXRlKCksXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgT2JqZWN0LmtleXModGhpcy5hY3Rpb25SZWNvcmQpLmZvckVhY2goKGFjdGlvbklkKSA9PiB7XG4gICAgICBjb25zdCBleGlzdHMgPSBhY3Rpb25zLnNvbWUoXG4gICAgICAgIChhY3Rpb24pID0+IGFjdGlvbi5Db2RlID09PSBhY3Rpb25JZCB8fCBhY3Rpb24uaWQgPT09IGFjdGlvbklkXG4gICAgICApO1xuXG4gICAgICBpZiAoIWV4aXN0cykge1xuICAgICAgICBjb25zdCBhY3Rpb24gPSB0aGlzLmFjdGlvblJlY29yZFthY3Rpb25JZF07XG4gICAgICAgIGFjdGlvbnMucHVzaCh7XG4gICAgICAgICAgLi4uYWN0aW9uLFxuICAgICAgICAgIERhdGFTdGF0ZTogT2JqZWN0U3RhdGUuUmVtb3ZlZCxcbiAgICAgICAgICBVcGRhdGVkQXQ6IG5ldyBEYXRlKCksXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgLy8gSGFuZGxlIGRlbGV0ZWQgc3dpbWxhbmVzXG4gICAgT2JqZWN0LmtleXModGhpcy5zd2ltbGFuZVJlY29yZCkuZm9yRWFjaCgobGFuZUlkKSA9PiB7XG4gICAgICBjb25zdCBleGlzdHMgPSB3b3JrZmxvdy5MYW5lcy5zb21lKFxuICAgICAgICAobGFuZSkgPT4gbGFuZS5Db2RlID09PSBsYW5lSWQgfHwgbGFuZS5pZCA9PT0gbGFuZUlkXG4gICAgICApO1xuXG4gICAgICBpZiAoIWV4aXN0cykge1xuICAgICAgICBjb25zdCBsYW5lID0gdGhpcy5zd2ltbGFuZVJlY29yZFtsYW5lSWRdO1xuICAgICAgICB3b3JrZmxvdy5MYW5lcy5wdXNoKHtcbiAgICAgICAgICAuLi5sYW5lLFxuICAgICAgICAgIERhdGFTdGF0ZTogT2JqZWN0U3RhdGUuUmVtb3ZlZCxcbiAgICAgICAgICBVcGRhdGVkQXQ6IG5ldyBEYXRlKCksXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgd29ya2Zsb3cuU3RhZ2VzID0gc3RhZ2VzO1xuICAgIHdvcmtmbG93LkFjdGlvbnMgPSBhY3Rpb25zO1xuXG4gICAgcmV0dXJuIHdvcmtmbG93O1xuICB9XG5cbiAgZ2V0Q29ubmVjdGlvblBvaW50VHlwZShcbiAgICBwb2ludElkOiBzdHJpbmdcbiAgKTogJ3RvcCcgfCAncmlnaHQnIHwgJ2JvdHRvbScgfCAnbGVmdCcgfCB1bmRlZmluZWQge1xuICAgIC8vIEV4dHJhY3QgdGhlIHR5cGUgZnJvbSB0aGUgY29ubmVjdGlvbiBwb2ludCBJRCBmb3JtYXRcbiAgICAvLyB3aGljaCBpcyB1c3VhbGx5IHNvbWV0aGluZyBsaWtlIFwibm9kZS1pZC10b3AtNTBcIlxuICAgIGNvbnN0IHBhcnRzID0gcG9pbnRJZC5zcGxpdCgnLScpO1xuICAgIGNvbnN0IHR5cGVJbmRleCA9IHBhcnRzLmZpbmRJbmRleChcbiAgICAgIChwYXJ0KSA9PlxuICAgICAgICBwYXJ0ID09PSAndG9wJyB8fFxuICAgICAgICBwYXJ0ID09PSAncmlnaHQnIHx8XG4gICAgICAgIHBhcnQgPT09ICdib3R0b20nIHx8XG4gICAgICAgIHBhcnQgPT09ICdsZWZ0J1xuICAgICk7XG5cbiAgICBpZiAodHlwZUluZGV4ID49IDApIHtcbiAgICAgIHJldHVybiBwYXJ0c1t0eXBlSW5kZXhdIGFzICd0b3AnIHwgJ3JpZ2h0JyB8ICdib3R0b20nIHwgJ2xlZnQnO1xuICAgIH1cblxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICAvLyBBZGQgYSBuZXcgcHJvcGVydHkgdG8gdHJhY2sgbG9hZGVkIG9iamVjdHNcbiAgbG9hZGVkT2JqZWN0SWRzOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9ID0ge307IC8vIEZvcm1hdDogeyBpZDogY29kZSB9XG5cbiAgLy8gQWRkIGEgbWV0aG9kIHRvIHJlZ2lzdGVyIGxvYWRlZCBvYmplY3RzXG4gIHJlZ2lzdGVyTG9hZGVkT2JqZWN0KGlkOiBzdHJpbmcsIGNvZGU6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMubG9hZGVkT2JqZWN0SWRzW2lkXSA9IGNvZGU7XG4gIH1cblxuICAvLyBNZXRob2QgdG8gY2hlY2sgaWYgYW4gb2JqZWN0IHdhcyBsb2FkZWQgZnJvbSBBUElcbiAgd2FzTG9hZGVkRnJvbUFwaShpZDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGlkIGluIHRoaXMubG9hZGVkT2JqZWN0SWRzO1xuICB9XG5cbiAgLy8gTWV0aG9kIHRvIGdldCB0aGUgY29kZSBmb3IgYSBsb2FkZWQgb2JqZWN0XG4gIGdldENvZGVGb3JPYmplY3QoaWQ6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMubG9hZGVkT2JqZWN0SWRzW2lkXSB8fCAnJztcbiAgfVxuXG4gIC8qKlxuICAgKiBNb3ZlcyBhIG5vZGUgZnJvbSBvbmUgc3dpbWxhbmUgdG8gYW5vdGhlciBhbmQgdXBkYXRlcyBhbGwgcmVsYXRlZCBzdGF0ZTpcbiAgICogLSBOb2RlIHBvc2l0aW9uIChzd2ltbGFuZS1yZWxhdGl2ZSB4L3kpXG4gICAqIC0gU3dpbWxhbmUgYXJyYXlzIChyZW1vdmVzIGZyb20gb2xkLCBhZGRzIHRvIG5ldylcbiAgICogLSBDb25uZWN0aW9uIHN3aW1sYW5lIGluZGljZXMgZm9yIHRoaXMgbm9kZVxuICAgKiAtIE5vZGUncyBzdGFnZURhdGEuVGFncyBhbmQgU3dpbUxhbmUgdG8gbWF0Y2ggdGhlIGRlc3RpbmF0aW9uIHN3aW1sYW5lXG4gICAqL1xuICBtb3ZlTm9kZVRvU3dpbWxhbmUoXG4gICAgbm9kZUlkOiBzdHJpbmcsXG4gICAgZnJvbVN3aW1sYW5lSW5kZXg6IG51bWJlcixcbiAgICB0b1N3aW1sYW5lSW5kZXg6IG51bWJlcixcbiAgICBuZXdYOiBudW1iZXIsXG4gICAgYWJzb2x1dGVZOiBudW1iZXIgICAgICAgIC8vIGFic29sdXRlIFNWRyBZIG9mIHRoZSBub2RlIGF0IGRyb3AgdGltZVxuICApOiBOb2RlIHwgbnVsbCB7XG4gICAgY29uc3QgZnJvbVN3aW1sYW5lID0gdGhpcy5zd2ltbGFuZXNbZnJvbVN3aW1sYW5lSW5kZXhdO1xuICAgIGlmICghZnJvbVN3aW1sYW5lPy5ub2RlcykgcmV0dXJuIG51bGw7XG5cbiAgICBjb25zdCBub2RlSW5kZXggPSBmcm9tU3dpbWxhbmUubm9kZXMuZmluZEluZGV4KChuKSA9PiBuLmlkID09PSBub2RlSWQpO1xuICAgIGlmIChub2RlSW5kZXggPT09IC0xKSByZXR1cm4gbnVsbDtcblxuICAgIC8vIFB1bGwgdGhlIG5vZGUgb3V0IOKAkyBrZWVwIGEgbG9jYWwgcmVmZXJlbmNlXG4gICAgY29uc3Qgbm9kZSA9IGZyb21Td2ltbGFuZS5ub2Rlc1tub2RlSW5kZXhdO1xuXG4gICAgLy8g4pSA4pSAIEZpeCB0aGUgWSBjb29yZGluYXRlIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuICAgIC8vIFRlbXBsYXRlIGZvcm11bGE6IGFic29sdXRlU1ZHWSA9IG5vZGUueSArIHN3aW1sYW5lLm9yZGVyICogMjYzXG4gICAgLy8gQ29ubmVjdGlvbiBmb3JtdWxhOiBhYnNvbHV0ZVkgPSBub2RlLnkgKyBzd2ltbGFuZUluZGV4ICogMjYzICsgcG9pbnQueVxuICAgIC8vIEJvdGggZXhwZWN0IG5vZGUueSB0byBiZSBzd2ltbGFuZS1yZWxhdGl2ZTpcbiAgICAvLyAgIG5vZGUueSA9IGFic29sdXRlU1ZHWSAtIHN3aW1sYW5lLm9yZGVyICogMjYzXG4gICAgbm9kZS54ID0gbmV3WDtcbiAgICBub2RlLnkgPSBhYnNvbHV0ZVkgLSB0b1N3aW1sYW5lSW5kZXggKiB0aGlzLnN3aW1sYW5lSGVpZ2h0O1xuXG4gICAgLy8g4pSA4pSAIE1vdmUgYmV0d2VlbiBzd2ltbGFuZSBhcnJheXMgKGltbXV0YWJsZSByZWFzc2lnbm1lbnQpIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuICAgIC8vIFVzaW5nIGZpbHRlcitzcHJlYWQgaW5zdGVhZCBvZiBzcGxpY2UvcHVzaCBzbyBBbmd1bGFyJ3MgQGZvciBibG9ja1xuICAgIC8vIGRldGVjdHMgdGhlIGFycmF5IGNoYW5nZSBvbiBib3RoIG9sZCBhbmQgbmV3IHN3aW1sYW5lLlxuICAgIGZyb21Td2ltbGFuZS5ub2RlcyA9IGZyb21Td2ltbGFuZS5ub2Rlcy5maWx0ZXIoKG4pID0+IG4uaWQgIT09IG5vZGVJZCk7XG5cbiAgICBjb25zdCB0b1N3aW1sYW5lID0gdGhpcy5zd2ltbGFuZXNbdG9Td2ltbGFuZUluZGV4XTtcbiAgICB0b1N3aW1sYW5lLm5vZGVzID0gWy4uLih0b1N3aW1sYW5lLm5vZGVzIHx8IFtdKSwgbm9kZV07XG5cbiAgICAvLyDilIDilIAgVXBkYXRlIGNvbm5lY3Rpb24gc3dpbWxhbmUgaW5kaWNlcyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbiAgICB0aGlzLmNvbm5lY3Rpb25zID0gdGhpcy5jb25uZWN0aW9ucy5tYXAoKGNvbm4pID0+IHtcbiAgICAgIGlmIChjb25uLnNvdXJjZU5vZGVJZCAhPT0gbm9kZUlkICYmIGNvbm4udGFyZ2V0Tm9kZUlkICE9PSBub2RlSWQpIHJldHVybiBjb25uO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uY29ubixcbiAgICAgICAgLi4uKGNvbm4uc291cmNlTm9kZUlkID09PSBub2RlSWQgPyB7IHNvdXJjZVN3aW1sYW5lSW5kZXg6IHRvU3dpbWxhbmVJbmRleCB9IDoge30pLFxuICAgICAgICAuLi4oY29ubi50YXJnZXROb2RlSWQgPT09IG5vZGVJZCA/IHsgdGFyZ2V0U3dpbWxhbmVJbmRleDogdG9Td2ltbGFuZUluZGV4IH0gOiB7fSksXG4gICAgICB9O1xuICAgIH0pO1xuXG4gICAgLy8g4pSA4pSAIFN5bmMgbm9kZSBtZXRhZGF0YSB0byB0aGUgZGVzdGluYXRpb24gc3dpbWxhbmUg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4gICAgbm9kZS5zdGFnZURhdGEgPSB7XG4gICAgICAuLi5ub2RlLnN0YWdlRGF0YSxcbiAgICAgIFRhZ3M6IFsuLi4odG9Td2ltbGFuZS50YWdzIHx8IFtdKV0sXG4gICAgICBTd2ltTGFuZTogdG9Td2ltbGFuZS5pZCB8fCAnJyxcbiAgICB9O1xuXG4gICAgcmV0dXJuIG5vZGU7XG4gIH1cblxuICAvKiogU3dpbWxhbmUgaGVpZ2h0IGNvbnN0YW50IHVzZWQgZm9yIGNvb3JkaW5hdGUgY29udmVyc2lvbnMuICovXG4gIHJlYWRvbmx5IHN3aW1sYW5lSGVpZ2h0ID0gMjYzO1xufVxuIl19
@@ -469,10 +469,17 @@ class FlowableStatusComponent extends BaseDataViewComponent {
469
469
  }
470
470
  }
471
471
  async onSave(data) {
472
- const payload = {
472
+ const merged = {
473
473
  ...this.currentData?.data,
474
474
  ...data,
475
- DataState: this.currentData?.data?.DataState === ObjectState.New ? ObjectState.New : ObjectState.Changed,
475
+ };
476
+ // A record is new only when it has no Code yet (the backend always assigns
477
+ // Code on persisted records). Don't trust the loaded DataState here: records
478
+ // returned from the backend come through unchanged and report DataState
479
+ // 'New', which would force an insert (and thus duplicate) on every edit.
480
+ const payload = {
481
+ ...merged,
482
+ DataState: merged.Code ? ObjectState.Changed : ObjectState.New,
476
483
  };
477
484
  await this.facade.addRequest(payload);
478
485
  }