footprintjs 8.2.0 → 8.3.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.
@@ -9,9 +9,18 @@
9
9
  export class NodeResolver {
10
10
  deps;
11
11
  nodeIdMap;
12
- constructor(deps, nodeIdMap) {
12
+ getEffectiveChildren;
13
+ constructor(deps, nodeIdMap,
14
+ /**
15
+ * Overlay-aware children accessor injected by the traverser. The DFS
16
+ * fallback resolves loop targets against the LIVE runtime shape — a node
17
+ * patched by a dynamic StageNode return carries its children in the
18
+ * traverser-local overlay, not on the shared built-chart node.
19
+ */
20
+ getEffectiveChildren) {
13
21
  this.deps = deps;
14
22
  this.nodeIdMap = nodeIdMap ?? new Map();
23
+ this.getEffectiveChildren = getEffectiveChildren;
15
24
  }
16
25
  /**
17
26
  * O(1) node lookup via pre-built ID map.
@@ -35,8 +44,9 @@ export class NodeResolver {
35
44
  _dfs(nodeId, node) {
36
45
  if (node.id === nodeId)
37
46
  return node;
38
- if (node.children) {
39
- for (const child of node.children) {
47
+ const children = this.getEffectiveChildren ? this.getEffectiveChildren(node) : node.children;
48
+ if (children) {
49
+ for (const child of children) {
40
50
  const found = this._dfs(nodeId, child);
41
51
  if (found)
42
52
  return found;
@@ -87,4 +97,4 @@ export class NodeResolver {
87
97
  };
88
98
  }
89
99
  }
90
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTm9kZVJlc29sdmVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9lbmdpbmUvaGFuZGxlcnMvTm9kZVJlc29sdmVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7O0dBT0c7QUFNSCxNQUFNLE9BQU8sWUFBWTtJQUdIO0lBRkgsU0FBUyxDQUF1QztJQUVqRSxZQUFvQixJQUErQixFQUFFLFNBQWdEO1FBQWpGLFNBQUksR0FBSixJQUFJLENBQTJCO1FBQ2pELElBQUksQ0FBQyxTQUFTLEdBQUcsU0FBUyxJQUFJLElBQUksR0FBRyxFQUFFLENBQUM7SUFDMUMsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxZQUFZLENBQUMsTUFBYyxFQUFFLFNBQW1DO1FBQzlELGtGQUFrRjtRQUNsRixJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDZixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUMxQyxJQUFJLE1BQU07Z0JBQUUsT0FBTyxNQUFNLENBQUM7UUFDNUIsQ0FBQztRQUVELCtFQUErRTtRQUMvRSxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLFNBQVMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3hELENBQUM7SUFFRDs7O09BR0c7SUFDSyxJQUFJLENBQUMsTUFBYyxFQUFFLElBQTZCO1FBQ3hELElBQUksSUFBSSxDQUFDLEVBQUUsS0FBSyxNQUFNO1lBQUUsT0FBTyxJQUFJLENBQUM7UUFFcEMsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDbEIsS0FBSyxNQUFNLEtBQUssSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7Z0JBQ2xDLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDO2dCQUN2QyxJQUFJLEtBQUs7b0JBQUUsT0FBTyxLQUFLLENBQUM7WUFDMUIsQ0FBQztRQUNILENBQUM7UUFFRCxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNkLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUMzQyxJQUFJLEtBQUs7Z0JBQUUsT0FBTyxLQUFLLENBQUM7UUFDMUIsQ0FBQztRQUVELE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILHVCQUF1QixDQUFDLElBQTZCO1FBQ25ELDBDQUEwQztRQUMxQyxJQUFJLElBQUksQ0FBQyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztZQUFFLE9BQU8sSUFBSSxDQUFDO1FBRXhFLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVE7WUFBRSxPQUFPLElBQUksQ0FBQztRQUVyQywyQ0FBMkM7UUFDM0MsTUFBTSxTQUFTLEdBQUcsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQWEsQ0FBQztRQUM1RixJQUFJLFVBQXlELENBQUM7UUFFOUQsS0FBSyxNQUFNLEdBQUcsSUFBSSxTQUFTLEVBQUUsQ0FBQztZQUM1QixJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQzVCLFVBQVUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDckMsTUFBTTtZQUNSLENBQUM7UUFDSCxDQUFDO1FBRUQsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ2hCLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FDbkIsNkNBQTZDLElBQUksQ0FBQyxJQUFJLGtCQUFrQixTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQ2hHLENBQUM7WUFDRixPQUFPLElBQUksQ0FBQztRQUNkLENBQUM7UUFFRCxrREFBa0Q7UUFDbEQsK0VBQStFO1FBQy9FLHVFQUF1RTtRQUN2RSxPQUFPO1lBQ0wsR0FBRyxVQUFVLENBQUMsSUFBSTtZQUNsQixhQUFhLEVBQUUsSUFBSSxDQUFDLGFBQWE7WUFDakMsU0FBUyxFQUFFLElBQUksQ0FBQyxTQUFTO1lBQ3pCLFdBQVcsRUFBRSxJQUFJLENBQUMsV0FBVztZQUM3QixFQUFFLEVBQUUsVUFBVSxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksSUFBSSxDQUFDLEVBQUU7WUFDakMsbUJBQW1CLEVBQUUsSUFBSSxDQUFDLG1CQUFtQixJQUFJLFVBQVUsQ0FBQyxJQUFJLENBQUMsbUJBQW1CO1NBQ3JGLENBQUM7SUFDSixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIE5vZGVSZXNvbHZlciDigJQgREZTIG5vZGUgbG9va3VwICsgc3ViZmxvdyByZWZlcmVuY2UgcmVzb2x1dGlvbi5cbiAqXG4gKiBSZXNwb25zaWJpbGl0aWVzOlxuICogLSBGaW5kIG5vZGVzIGJ5IElEIHZpYSByZWN1cnNpdmUgZGVwdGgtZmlyc3Qgc2VhcmNoIChmb3IgYmFjay1lZGdlL2xvb3Agc3VwcG9ydClcbiAqIC0gUmVzb2x2ZSBzdWJmbG93IHJlZmVyZW5jZSBub2RlcyB0byBhY3R1YWwgc3ViZmxvdyBzdHJ1Y3R1cmVzXG4gKiAtIEV2YWx1YXRlIGRlY2lkZXJzIHRvIGRldGVybWluZSBuZXh0IG5vZGUgaW4gYnJhbmNoaW5nIHNjZW5hcmlvc1xuICovXG5cbmltcG9ydCB0eXBlIHsgU3RhZ2VDb250ZXh0IH0gZnJvbSAnLi4vLi4vbWVtb3J5L1N0YWdlQ29udGV4dC5qcyc7XG5pbXBvcnQgdHlwZSB7IFN0YWdlTm9kZSB9IGZyb20gJy4uL2dyYXBoL1N0YWdlTm9kZS5qcyc7XG5pbXBvcnQgdHlwZSB7IEhhbmRsZXJEZXBzIH0gZnJvbSAnLi4vdHlwZXMuanMnO1xuXG5leHBvcnQgY2xhc3MgTm9kZVJlc29sdmVyPFRPdXQgPSBhbnksIFRTY29wZSA9IGFueT4ge1xuICBwcml2YXRlIHJlYWRvbmx5IG5vZGVJZE1hcDogTWFwPHN0cmluZywgU3RhZ2VOb2RlPFRPdXQsIFRTY29wZT4+O1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZGVwczogSGFuZGxlckRlcHM8VE91dCwgVFNjb3BlPiwgbm9kZUlkTWFwPzogTWFwPHN0cmluZywgU3RhZ2VOb2RlPFRPdXQsIFRTY29wZT4+KSB7XG4gICAgdGhpcy5ub2RlSWRNYXAgPSBub2RlSWRNYXAgPz8gbmV3IE1hcCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIE8oMSkgbm9kZSBsb29rdXAgdmlhIHByZS1idWlsdCBJRCBtYXAuXG4gICAqIEZhbGxzIGJhY2sgdG8gREZTIGZyb20gc3RhcnROb2RlIChmb3IgZHluYW1pYyBub2RlcyBhZGRlZCBhdCBydW50aW1lXG4gICAqIG9yIHN1YmZsb3ctbG9jYWwgbG9va3VwcyB0aGF0IHVzZSBhbiBleHBsaWNpdCBzdGFydE5vZGUpLlxuICAgKi9cbiAgZmluZE5vZGVCeUlkKG5vZGVJZDogc3RyaW5nLCBzdGFydE5vZGU/OiBTdGFnZU5vZGU8VE91dCwgVFNjb3BlPik6IFN0YWdlTm9kZTxUT3V0LCBUU2NvcGU+IHwgdW5kZWZpbmVkIHtcbiAgICAvLyBGYXN0IHBhdGg6IE8oMSkgbWFwIGxvb2t1cCAob25seSB2YWxpZCBmb3Igcm9vdC1sZXZlbCBncmFwaCwgbm90IHN1YmZsb3ctbG9jYWwpXG4gICAgaWYgKCFzdGFydE5vZGUpIHtcbiAgICAgIGNvbnN0IG1hcHBlZCA9IHRoaXMubm9kZUlkTWFwLmdldChub2RlSWQpO1xuICAgICAgaWYgKG1hcHBlZCkgcmV0dXJuIG1hcHBlZDtcbiAgICB9XG5cbiAgICAvLyBGYWxsYmFjazogREZTIGZyb20gc3RhcnROb2RlIChzdWJmbG93LWxvY2FsIG9yIGR5bmFtaWMgbm9kZXMgbm90IGluIHRoZSBtYXApXG4gICAgcmV0dXJuIHRoaXMuX2Rmcyhub2RlSWQsIHN0YXJ0Tm9kZSA/PyB0aGlzLmRlcHMucm9vdCk7XG4gIH1cblxuICAvKipcbiAgICogREZTIHNlYXJjaCBmb3IgYSBub2RlIGJ5IElELlxuICAgKiBVc2VkIGFzIGZhbGxiYWNrIHdoZW4gdGhlIG5vZGUgaXMgbm90IGluIHRoZSBwcmUtYnVpbHQgbWFwLlxuICAgKi9cbiAgcHJpdmF0ZSBfZGZzKG5vZGVJZDogc3RyaW5nLCBub2RlOiBTdGFnZU5vZGU8VE91dCwgVFNjb3BlPik6IFN0YWdlTm9kZTxUT3V0LCBUU2NvcGU+IHwgdW5kZWZpbmVkIHtcbiAgICBpZiAobm9kZS5pZCA9PT0gbm9kZUlkKSByZXR1cm4gbm9kZTtcblxuICAgIGlmIChub2RlLmNoaWxkcmVuKSB7XG4gICAgICBmb3IgKGNvbnN0IGNoaWxkIG9mIG5vZGUuY2hpbGRyZW4pIHtcbiAgICAgICAgY29uc3QgZm91bmQgPSB0aGlzLl9kZnMobm9kZUlkLCBjaGlsZCk7XG4gICAgICAgIGlmIChmb3VuZCkgcmV0dXJuIGZvdW5kO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChub2RlLm5leHQpIHtcbiAgICAgIGNvbnN0IGZvdW5kID0gdGhpcy5fZGZzKG5vZGVJZCwgbm9kZS5uZXh0KTtcbiAgICAgIGlmIChmb3VuZCkgcmV0dXJuIGZvdW5kO1xuICAgIH1cblxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICAvKipcbiAgICogUmVzb2x2ZSBhIHN1YmZsb3cgcmVmZXJlbmNlIG5vZGUgdG8gaXRzIGFjdHVhbCBzdHJ1Y3R1cmUuXG4gICAqXG4gICAqIFJlZmVyZW5jZSBub2RlcyBhcmUgbGlnaHR3ZWlnaHQgcGxhY2Vob2xkZXJzIChpc1N1YmZsb3dSb290IGJ1dCBubyBmbi9jaGlsZHJlbikuXG4gICAqIFRoZSBhY3R1YWwgc3RydWN0dXJlIGxpdmVzIGluIHRoZSBzdWJmbG93cyBkaWN0aW9uYXJ5LlxuICAgKi9cbiAgcmVzb2x2ZVN1YmZsb3dSZWZlcmVuY2Uobm9kZTogU3RhZ2VOb2RlPFRPdXQsIFRTY29wZT4pOiBTdGFnZU5vZGU8VE91dCwgVFNjb3BlPiB7XG4gICAgLy8gQWxyZWFkeSBoYXMgc3RydWN0dXJlIOKAlCBub3QgYSByZWZlcmVuY2VcbiAgICBpZiAobm9kZS5mbiB8fCAobm9kZS5jaGlsZHJlbiAmJiBub2RlLmNoaWxkcmVuLmxlbmd0aCA+IDApKSByZXR1cm4gbm9kZTtcblxuICAgIGlmICghdGhpcy5kZXBzLnN1YmZsb3dzKSByZXR1cm4gbm9kZTtcblxuICAgIC8vIFRyeSBtdWx0aXBsZSBrZXlzIGluIG9yZGVyIG9mIHByZWZlcmVuY2VcbiAgICBjb25zdCBrZXlzVG9UcnkgPSBbbm9kZS5zdWJmbG93SWQsIG5vZGUuc3ViZmxvd05hbWUsIG5vZGUubmFtZV0uZmlsdGVyKEJvb2xlYW4pIGFzIHN0cmluZ1tdO1xuICAgIGxldCBzdWJmbG93RGVmOiB7IHJvb3Q6IFN0YWdlTm9kZTxUT3V0LCBUU2NvcGU+IH0gfCB1bmRlZmluZWQ7XG5cbiAgICBmb3IgKGNvbnN0IGtleSBvZiBrZXlzVG9UcnkpIHtcbiAgICAgIGlmICh0aGlzLmRlcHMuc3ViZmxvd3Nba2V5XSkge1xuICAgICAgICBzdWJmbG93RGVmID0gdGhpcy5kZXBzLnN1YmZsb3dzW2tleV07XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghc3ViZmxvd0RlZikge1xuICAgICAgdGhpcy5kZXBzLmxvZ2dlci5pbmZvKFxuICAgICAgICBgU3ViZmxvdyBub3QgZm91bmQgaW4gZGljdGlvbmFyeSBmb3Igbm9kZSAnJHtub2RlLm5hbWV9JyAodHJpZWQga2V5czogJHtrZXlzVG9Ucnkuam9pbignLCAnKX0pYCxcbiAgICAgICk7XG4gICAgICByZXR1cm4gbm9kZTtcbiAgICB9XG5cbiAgICAvLyBNZXJnZSByZWZlcmVuY2UgbWV0YWRhdGEgd2l0aCBhY3R1YWwgc3RydWN0dXJlLlxuICAgIC8vIGlkIGNvbWVzIGZyb20gdGhlIGlubmVyIHJvb3QgKHRoZSBhY3R1YWwgc3RhZ2UgaWRlbnRpdHkgZm9yIHRyYWNlIG1hdGNoaW5nKSxcbiAgICAvLyBub3QgdGhlIG1vdW50IG5vZGUgKHdoaWNoIGlzIHRoZSBzdWJmbG93IGVudHJ5IHBvaW50IGluIHRoZSBwYXJlbnQpLlxuICAgIHJldHVybiB7XG4gICAgICAuLi5zdWJmbG93RGVmLnJvb3QsXG4gICAgICBpc1N1YmZsb3dSb290OiBub2RlLmlzU3ViZmxvd1Jvb3QsXG4gICAgICBzdWJmbG93SWQ6IG5vZGUuc3ViZmxvd0lkLFxuICAgICAgc3ViZmxvd05hbWU6IG5vZGUuc3ViZmxvd05hbWUsXG4gICAgICBpZDogc3ViZmxvd0RlZi5yb290LmlkIHx8IG5vZGUuaWQsXG4gICAgICBzdWJmbG93TW91bnRPcHRpb25zOiBub2RlLnN1YmZsb3dNb3VudE9wdGlvbnMgfHwgc3ViZmxvd0RlZi5yb290LnN1YmZsb3dNb3VudE9wdGlvbnMsXG4gICAgfTtcbiAgfVxufVxuIl19
100
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTm9kZVJlc29sdmVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9lbmdpbmUvaGFuZGxlcnMvTm9kZVJlc29sdmVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7O0dBT0c7QUFNSCxNQUFNLE9BQU8sWUFBWTtJQUtiO0lBSk8sU0FBUyxDQUF1QztJQUNoRCxvQkFBb0IsQ0FBNEU7SUFFakgsWUFDVSxJQUErQixFQUN2QyxTQUFnRDtJQUNoRDs7Ozs7T0FLRztJQUNILG9CQUErRjtRQVJ2RixTQUFJLEdBQUosSUFBSSxDQUEyQjtRQVV2QyxJQUFJLENBQUMsU0FBUyxHQUFHLFNBQVMsSUFBSSxJQUFJLEdBQUcsRUFBRSxDQUFDO1FBQ3hDLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxvQkFBb0IsQ0FBQztJQUNuRCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILFlBQVksQ0FBQyxNQUFjLEVBQUUsU0FBbUM7UUFDOUQsa0ZBQWtGO1FBQ2xGLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUNmLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQzFDLElBQUksTUFBTTtnQkFBRSxPQUFPLE1BQU0sQ0FBQztRQUM1QixDQUFDO1FBRUQsK0VBQStFO1FBQy9FLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsU0FBUyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDeEQsQ0FBQztJQUVEOzs7T0FHRztJQUNLLElBQUksQ0FBQyxNQUFjLEVBQUUsSUFBNkI7UUFDeEQsSUFBSSxJQUFJLENBQUMsRUFBRSxLQUFLLE1BQU07WUFBRSxPQUFPLElBQUksQ0FBQztRQUVwQyxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQztRQUM3RixJQUFJLFFBQVEsRUFBRSxDQUFDO1lBQ2IsS0FBSyxNQUFNLEtBQUssSUFBSSxRQUFRLEVBQUUsQ0FBQztnQkFDN0IsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUM7Z0JBQ3ZDLElBQUksS0FBSztvQkFBRSxPQUFPLEtBQUssQ0FBQztZQUMxQixDQUFDO1FBQ0gsQ0FBQztRQUVELElBQUksSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ2QsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzNDLElBQUksS0FBSztnQkFBRSxPQUFPLEtBQUssQ0FBQztRQUMxQixDQUFDO1FBRUQsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsdUJBQXVCLENBQUMsSUFBNkI7UUFDbkQsMENBQTBDO1FBQzFDLElBQUksSUFBSSxDQUFDLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO1lBQUUsT0FBTyxJQUFJLENBQUM7UUFFeEUsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUTtZQUFFLE9BQU8sSUFBSSxDQUFDO1FBRXJDLDJDQUEyQztRQUMzQyxNQUFNLFNBQVMsR0FBRyxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBYSxDQUFDO1FBQzVGLElBQUksVUFBeUQsQ0FBQztRQUU5RCxLQUFLLE1BQU0sR0FBRyxJQUFJLFNBQVMsRUFBRSxDQUFDO1lBQzVCLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztnQkFDNUIsVUFBVSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUNyQyxNQUFNO1lBQ1IsQ0FBQztRQUNILENBQUM7UUFFRCxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDaEIsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUNuQiw2Q0FBNkMsSUFBSSxDQUFDLElBQUksa0JBQWtCLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FDaEcsQ0FBQztZQUNGLE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQztRQUVELGtEQUFrRDtRQUNsRCwrRUFBK0U7UUFDL0UsdUVBQXVFO1FBQ3ZFLE9BQU87WUFDTCxHQUFHLFVBQVUsQ0FBQyxJQUFJO1lBQ2xCLGFBQWEsRUFBRSxJQUFJLENBQUMsYUFBYTtZQUNqQyxTQUFTLEVBQUUsSUFBSSxDQUFDLFNBQVM7WUFDekIsV0FBVyxFQUFFLElBQUksQ0FBQyxXQUFXO1lBQzdCLEVBQUUsRUFBRSxVQUFVLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxJQUFJLENBQUMsRUFBRTtZQUNqQyxtQkFBbUIsRUFBRSxJQUFJLENBQUMsbUJBQW1CLElBQUksVUFBVSxDQUFDLElBQUksQ0FBQyxtQkFBbUI7U0FDckYsQ0FBQztJQUNKLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogTm9kZVJlc29sdmVyIOKAlCBERlMgbm9kZSBsb29rdXAgKyBzdWJmbG93IHJlZmVyZW5jZSByZXNvbHV0aW9uLlxuICpcbiAqIFJlc3BvbnNpYmlsaXRpZXM6XG4gKiAtIEZpbmQgbm9kZXMgYnkgSUQgdmlhIHJlY3Vyc2l2ZSBkZXB0aC1maXJzdCBzZWFyY2ggKGZvciBiYWNrLWVkZ2UvbG9vcCBzdXBwb3J0KVxuICogLSBSZXNvbHZlIHN1YmZsb3cgcmVmZXJlbmNlIG5vZGVzIHRvIGFjdHVhbCBzdWJmbG93IHN0cnVjdHVyZXNcbiAqIC0gRXZhbHVhdGUgZGVjaWRlcnMgdG8gZGV0ZXJtaW5lIG5leHQgbm9kZSBpbiBicmFuY2hpbmcgc2NlbmFyaW9zXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBTdGFnZUNvbnRleHQgfSBmcm9tICcuLi8uLi9tZW1vcnkvU3RhZ2VDb250ZXh0LmpzJztcbmltcG9ydCB0eXBlIHsgU3RhZ2VOb2RlIH0gZnJvbSAnLi4vZ3JhcGgvU3RhZ2VOb2RlLmpzJztcbmltcG9ydCB0eXBlIHsgSGFuZGxlckRlcHMgfSBmcm9tICcuLi90eXBlcy5qcyc7XG5cbmV4cG9ydCBjbGFzcyBOb2RlUmVzb2x2ZXI8VE91dCA9IGFueSwgVFNjb3BlID0gYW55PiB7XG4gIHByaXZhdGUgcmVhZG9ubHkgbm9kZUlkTWFwOiBNYXA8c3RyaW5nLCBTdGFnZU5vZGU8VE91dCwgVFNjb3BlPj47XG4gIHByaXZhdGUgcmVhZG9ubHkgZ2V0RWZmZWN0aXZlQ2hpbGRyZW4/OiAobm9kZTogU3RhZ2VOb2RlPFRPdXQsIFRTY29wZT4pID0+IFN0YWdlTm9kZTxUT3V0LCBUU2NvcGU+W10gfCB1bmRlZmluZWQ7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBkZXBzOiBIYW5kbGVyRGVwczxUT3V0LCBUU2NvcGU+LFxuICAgIG5vZGVJZE1hcD86IE1hcDxzdHJpbmcsIFN0YWdlTm9kZTxUT3V0LCBUU2NvcGU+PixcbiAgICAvKipcbiAgICAgKiBPdmVybGF5LWF3YXJlIGNoaWxkcmVuIGFjY2Vzc29yIGluamVjdGVkIGJ5IHRoZSB0cmF2ZXJzZXIuIFRoZSBERlNcbiAgICAgKiBmYWxsYmFjayByZXNvbHZlcyBsb29wIHRhcmdldHMgYWdhaW5zdCB0aGUgTElWRSBydW50aW1lIHNoYXBlIOKAlCBhIG5vZGVcbiAgICAgKiBwYXRjaGVkIGJ5IGEgZHluYW1pYyBTdGFnZU5vZGUgcmV0dXJuIGNhcnJpZXMgaXRzIGNoaWxkcmVuIGluIHRoZVxuICAgICAqIHRyYXZlcnNlci1sb2NhbCBvdmVybGF5LCBub3Qgb24gdGhlIHNoYXJlZCBidWlsdC1jaGFydCBub2RlLlxuICAgICAqL1xuICAgIGdldEVmZmVjdGl2ZUNoaWxkcmVuPzogKG5vZGU6IFN0YWdlTm9kZTxUT3V0LCBUU2NvcGU+KSA9PiBTdGFnZU5vZGU8VE91dCwgVFNjb3BlPltdIHwgdW5kZWZpbmVkLFxuICApIHtcbiAgICB0aGlzLm5vZGVJZE1hcCA9IG5vZGVJZE1hcCA/PyBuZXcgTWFwKCk7XG4gICAgdGhpcy5nZXRFZmZlY3RpdmVDaGlsZHJlbiA9IGdldEVmZmVjdGl2ZUNoaWxkcmVuO1xuICB9XG5cbiAgLyoqXG4gICAqIE8oMSkgbm9kZSBsb29rdXAgdmlhIHByZS1idWlsdCBJRCBtYXAuXG4gICAqIEZhbGxzIGJhY2sgdG8gREZTIGZyb20gc3RhcnROb2RlIChmb3IgZHluYW1pYyBub2RlcyBhZGRlZCBhdCBydW50aW1lXG4gICAqIG9yIHN1YmZsb3ctbG9jYWwgbG9va3VwcyB0aGF0IHVzZSBhbiBleHBsaWNpdCBzdGFydE5vZGUpLlxuICAgKi9cbiAgZmluZE5vZGVCeUlkKG5vZGVJZDogc3RyaW5nLCBzdGFydE5vZGU/OiBTdGFnZU5vZGU8VE91dCwgVFNjb3BlPik6IFN0YWdlTm9kZTxUT3V0LCBUU2NvcGU+IHwgdW5kZWZpbmVkIHtcbiAgICAvLyBGYXN0IHBhdGg6IE8oMSkgbWFwIGxvb2t1cCAob25seSB2YWxpZCBmb3Igcm9vdC1sZXZlbCBncmFwaCwgbm90IHN1YmZsb3ctbG9jYWwpXG4gICAgaWYgKCFzdGFydE5vZGUpIHtcbiAgICAgIGNvbnN0IG1hcHBlZCA9IHRoaXMubm9kZUlkTWFwLmdldChub2RlSWQpO1xuICAgICAgaWYgKG1hcHBlZCkgcmV0dXJuIG1hcHBlZDtcbiAgICB9XG5cbiAgICAvLyBGYWxsYmFjazogREZTIGZyb20gc3RhcnROb2RlIChzdWJmbG93LWxvY2FsIG9yIGR5bmFtaWMgbm9kZXMgbm90IGluIHRoZSBtYXApXG4gICAgcmV0dXJuIHRoaXMuX2Rmcyhub2RlSWQsIHN0YXJ0Tm9kZSA/PyB0aGlzLmRlcHMucm9vdCk7XG4gIH1cblxuICAvKipcbiAgICogREZTIHNlYXJjaCBmb3IgYSBub2RlIGJ5IElELlxuICAgKiBVc2VkIGFzIGZhbGxiYWNrIHdoZW4gdGhlIG5vZGUgaXMgbm90IGluIHRoZSBwcmUtYnVpbHQgbWFwLlxuICAgKi9cbiAgcHJpdmF0ZSBfZGZzKG5vZGVJZDogc3RyaW5nLCBub2RlOiBTdGFnZU5vZGU8VE91dCwgVFNjb3BlPik6IFN0YWdlTm9kZTxUT3V0LCBUU2NvcGU+IHwgdW5kZWZpbmVkIHtcbiAgICBpZiAobm9kZS5pZCA9PT0gbm9kZUlkKSByZXR1cm4gbm9kZTtcblxuICAgIGNvbnN0IGNoaWxkcmVuID0gdGhpcy5nZXRFZmZlY3RpdmVDaGlsZHJlbiA/IHRoaXMuZ2V0RWZmZWN0aXZlQ2hpbGRyZW4obm9kZSkgOiBub2RlLmNoaWxkcmVuO1xuICAgIGlmIChjaGlsZHJlbikge1xuICAgICAgZm9yIChjb25zdCBjaGlsZCBvZiBjaGlsZHJlbikge1xuICAgICAgICBjb25zdCBmb3VuZCA9IHRoaXMuX2Rmcyhub2RlSWQsIGNoaWxkKTtcbiAgICAgICAgaWYgKGZvdW5kKSByZXR1cm4gZm91bmQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKG5vZGUubmV4dCkge1xuICAgICAgY29uc3QgZm91bmQgPSB0aGlzLl9kZnMobm9kZUlkLCBub2RlLm5leHQpO1xuICAgICAgaWYgKGZvdW5kKSByZXR1cm4gZm91bmQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNvbHZlIGEgc3ViZmxvdyByZWZlcmVuY2Ugbm9kZSB0byBpdHMgYWN0dWFsIHN0cnVjdHVyZS5cbiAgICpcbiAgICogUmVmZXJlbmNlIG5vZGVzIGFyZSBsaWdodHdlaWdodCBwbGFjZWhvbGRlcnMgKGlzU3ViZmxvd1Jvb3QgYnV0IG5vIGZuL2NoaWxkcmVuKS5cbiAgICogVGhlIGFjdHVhbCBzdHJ1Y3R1cmUgbGl2ZXMgaW4gdGhlIHN1YmZsb3dzIGRpY3Rpb25hcnkuXG4gICAqL1xuICByZXNvbHZlU3ViZmxvd1JlZmVyZW5jZShub2RlOiBTdGFnZU5vZGU8VE91dCwgVFNjb3BlPik6IFN0YWdlTm9kZTxUT3V0LCBUU2NvcGU+IHtcbiAgICAvLyBBbHJlYWR5IGhhcyBzdHJ1Y3R1cmUg4oCUIG5vdCBhIHJlZmVyZW5jZVxuICAgIGlmIChub2RlLmZuIHx8IChub2RlLmNoaWxkcmVuICYmIG5vZGUuY2hpbGRyZW4ubGVuZ3RoID4gMCkpIHJldHVybiBub2RlO1xuXG4gICAgaWYgKCF0aGlzLmRlcHMuc3ViZmxvd3MpIHJldHVybiBub2RlO1xuXG4gICAgLy8gVHJ5IG11bHRpcGxlIGtleXMgaW4gb3JkZXIgb2YgcHJlZmVyZW5jZVxuICAgIGNvbnN0IGtleXNUb1RyeSA9IFtub2RlLnN1YmZsb3dJZCwgbm9kZS5zdWJmbG93TmFtZSwgbm9kZS5uYW1lXS5maWx0ZXIoQm9vbGVhbikgYXMgc3RyaW5nW107XG4gICAgbGV0IHN1YmZsb3dEZWY6IHsgcm9vdDogU3RhZ2VOb2RlPFRPdXQsIFRTY29wZT4gfSB8IHVuZGVmaW5lZDtcblxuICAgIGZvciAoY29uc3Qga2V5IG9mIGtleXNUb1RyeSkge1xuICAgICAgaWYgKHRoaXMuZGVwcy5zdWJmbG93c1trZXldKSB7XG4gICAgICAgIHN1YmZsb3dEZWYgPSB0aGlzLmRlcHMuc3ViZmxvd3Nba2V5XTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCFzdWJmbG93RGVmKSB7XG4gICAgICB0aGlzLmRlcHMubG9nZ2VyLmluZm8oXG4gICAgICAgIGBTdWJmbG93IG5vdCBmb3VuZCBpbiBkaWN0aW9uYXJ5IGZvciBub2RlICcke25vZGUubmFtZX0nICh0cmllZCBrZXlzOiAke2tleXNUb1RyeS5qb2luKCcsICcpfSlgLFxuICAgICAgKTtcbiAgICAgIHJldHVybiBub2RlO1xuICAgIH1cblxuICAgIC8vIE1lcmdlIHJlZmVyZW5jZSBtZXRhZGF0YSB3aXRoIGFjdHVhbCBzdHJ1Y3R1cmUuXG4gICAgLy8gaWQgY29tZXMgZnJvbSB0aGUgaW5uZXIgcm9vdCAodGhlIGFjdHVhbCBzdGFnZSBpZGVudGl0eSBmb3IgdHJhY2UgbWF0Y2hpbmcpLFxuICAgIC8vIG5vdCB0aGUgbW91bnQgbm9kZSAod2hpY2ggaXMgdGhlIHN1YmZsb3cgZW50cnkgcG9pbnQgaW4gdGhlIHBhcmVudCkuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnN1YmZsb3dEZWYucm9vdCxcbiAgICAgIGlzU3ViZmxvd1Jvb3Q6IG5vZGUuaXNTdWJmbG93Um9vdCxcbiAgICAgIHN1YmZsb3dJZDogbm9kZS5zdWJmbG93SWQsXG4gICAgICBzdWJmbG93TmFtZTogbm9kZS5zdWJmbG93TmFtZSxcbiAgICAgIGlkOiBzdWJmbG93RGVmLnJvb3QuaWQgfHwgbm9kZS5pZCxcbiAgICAgIHN1YmZsb3dNb3VudE9wdGlvbnM6IG5vZGUuc3ViZmxvd01vdW50T3B0aW9ucyB8fCBzdWJmbG93RGVmLnJvb3Quc3ViZmxvd01vdW50T3B0aW9ucyxcbiAgICB9O1xuICB9XG59XG4iXX0=