occam-nominal 1.0.306 → 1.0.307

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.
@@ -43,11 +43,11 @@ const _default = (0, _elements.define)(class Proof extends _occamlanguages.Eleme
43
43
  }
44
44
  }
45
45
  }
46
- continuation(verifies);
46
+ return continuation(verifies);
47
47
  });
48
48
  }, context);
49
49
  }
50
50
  static name = "Proof";
51
51
  });
52
52
 
53
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9lbGVtZW50L3Byb29mLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBFbGVtZW50IH0gZnJvbSBcIm9jY2FtLWxhbmd1YWdlc1wiO1xuXG5pbXBvcnQgeyBkZWZpbmUgfSBmcm9tIFwiLi4vZWxlbWVudHNcIjtcbmltcG9ydCB7IGVuY2xvc2UgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2NvbnRleHRcIjtcblxuZXhwb3J0IGRlZmF1bHQgZGVmaW5lKGNsYXNzIFByb29mIGV4dGVuZHMgRWxlbWVudCB7XG4gIGNvbnN0cnVjdG9yKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgZGVyaXZhdGlvbikge1xuICAgIHN1cGVyKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCk7XG5cbiAgICB0aGlzLmRlcml2YXRpb24gPSBkZXJpdmF0aW9uO1xuICB9XG5cbiAgZ2V0RGVyaXZhdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5kZXJpdmF0aW9uO1xuICB9XG5cbiAgZ2V0UHJvb2ZOb2RlKCkge1xuICAgIGNvbnN0IG5vZGUgPSB0aGlzLmdldE5vZGUoKSxcbiAgICAgICAgICBwcm9vZk5vZGUgPSBub2RlOyAvLy9cblxuICAgIHJldHVybiBwcm9vZk5vZGU7XG4gIH1cblxuICBnZXRMYXN0U3RlcCgpIHsgcmV0dXJuIHRoaXMuZGVyaXZhdGlvbi5nZXRMYXN0U3RlcCgpOyB9XG5cbiAgZ2V0U3RhdGVtZW50KCkge1xuICAgIGNvbnN0IGxhc3RTdGVwID0gdGhpcy5nZXRMYXN0U3RlcCgpLFxuICAgICAgICAgIGxhc3RTdGVwU3RhdGVtZW50ID0gbGFzdFN0ZXAuZ2V0U3RhdGVtZW50KCksXG4gICAgICAgICAgc3RhdGVtZW50ID0gbGFzdFN0ZXBTdGF0ZW1lbnQ7IC8vL1xuXG4gICAgcmV0dXJuIHN0YXRlbWVudDtcbiAgfVxuXG4gIHZlcmlmeShzdGF0ZW1lbnQsIGNvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICAgIGVuY2xvc2UoKGNvbnRleHQpID0+IHtcbiAgICAgIHRoaXMuZGVyaXZhdGlvbi52ZXJpZnkoY29udGV4dCwgKGRlcml2YXRpb25WZXJpZmllcykgPT4ge1xuICAgICAgICBsZXQgdmVyaWZpZXMgPSBmYWxzZTtcblxuICAgICAgICBpZiAoZGVyaXZhdGlvblZlcmlmaWVzKSB7XG4gICAgICAgICAgY29uc3QgbGFzdFN0ZXAgPSBjb250ZXh0LmdldExhc3RTdGVwKCk7XG5cbiAgICAgICAgICBpZiAobGFzdFN0ZXAgIT09IG51bGwpIHtcbiAgICAgICAgICAgIGNvbnN0IHByb29mID0gdGhpcywgLy8vXG4gICAgICAgICAgICAgICAgICBwcm9vZlN0YXRlbWVudCA9IHByb29mLmdldFN0YXRlbWVudCgpLFxuICAgICAgICAgICAgICAgICAgcHJvb2ZTdGF0ZW1lbnRFcXVhbFRvU3RhdGVtZW50ID0gcHJvb2ZTdGF0ZW1lbnQuaXNFcXVhbFRvKHN0YXRlbWVudCk7XG5cbiAgICAgICAgICAgIGlmIChwcm9vZlN0YXRlbWVudEVxdWFsVG9TdGF0ZW1lbnQpIHtcbiAgICAgICAgICAgICAgdmVyaWZpZXMgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnRpbnVhdGlvbih2ZXJpZmllcyk7XG4gICAgICB9KTtcbiAgICB9LCBjb250ZXh0KTtcbiAgfVxuXG4gIHN0YXRpYyBuYW1lID0gXCJQcm9vZlwiO1xufSk7XG4iXSwibmFtZXMiOlsiZGVmaW5lIiwiUHJvb2YiLCJFbGVtZW50IiwiY29udGV4dCIsInN0cmluZyIsIm5vZGUiLCJicmVha1BvaW50IiwiZGVyaXZhdGlvbiIsImdldERlcml2YXRpb24iLCJnZXRQcm9vZk5vZGUiLCJnZXROb2RlIiwicHJvb2ZOb2RlIiwiZ2V0TGFzdFN0ZXAiLCJnZXRTdGF0ZW1lbnQiLCJsYXN0U3RlcCIsImxhc3RTdGVwU3RhdGVtZW50Iiwic3RhdGVtZW50IiwidmVyaWZ5IiwiY29udGludWF0aW9uIiwiZW5jbG9zZSIsImRlcml2YXRpb25WZXJpZmllcyIsInZlcmlmaWVzIiwicHJvb2YiLCJwcm9vZlN0YXRlbWVudCIsInByb29mU3RhdGVtZW50RXF1YWxUb1N0YXRlbWVudCIsImlzRXF1YWxUbyIsIm5hbWUiXSwibWFwcGluZ3MiOiJBQUFBOzs7OytCQU9BOzs7ZUFBQTs7O2dDQUx3QjswQkFFRDt5QkFDQztNQUV4QixXQUFlQSxJQUFBQSxnQkFBTSxFQUFDLE1BQU1DLGNBQWNDLHVCQUFPO0lBQy9DLFlBQVlDLE9BQU8sRUFBRUMsTUFBTSxFQUFFQyxJQUFJLEVBQUVDLFVBQVUsRUFBRUMsVUFBVSxDQUFFO1FBQ3pELEtBQUssQ0FBQ0osU0FBU0MsUUFBUUMsTUFBTUM7UUFFN0IsSUFBSSxDQUFDQyxVQUFVLEdBQUdBO0lBQ3BCO0lBRUFDLGdCQUFnQjtRQUNkLE9BQU8sSUFBSSxDQUFDRCxVQUFVO0lBQ3hCO0lBRUFFLGVBQWU7UUFDYixNQUFNSixPQUFPLElBQUksQ0FBQ0ssT0FBTyxJQUNuQkMsWUFBWU4sTUFBTSxHQUFHO1FBRTNCLE9BQU9NO0lBQ1Q7SUFFQUMsY0FBYztRQUFFLE9BQU8sSUFBSSxDQUFDTCxVQUFVLENBQUNLLFdBQVc7SUFBSTtJQUV0REMsZUFBZTtRQUNiLE1BQU1DLFdBQVcsSUFBSSxDQUFDRixXQUFXLElBQzNCRyxvQkFBb0JELFNBQVNELFlBQVksSUFDekNHLFlBQVlELG1CQUFtQixHQUFHO1FBRXhDLE9BQU9DO0lBQ1Q7SUFFQUMsT0FBT0QsU0FBUyxFQUFFYixPQUFPLEVBQUVlLFlBQVksRUFBRTtRQUN2Q0MsSUFBQUEsZ0JBQU8sRUFBQyxDQUFDaEI7WUFDUCxJQUFJLENBQUNJLFVBQVUsQ0FBQ1UsTUFBTSxDQUFDZCxTQUFTLENBQUNpQjtnQkFDL0IsSUFBSUMsV0FBVztnQkFFZixJQUFJRCxvQkFBb0I7b0JBQ3RCLE1BQU1OLFdBQVdYLFFBQVFTLFdBQVc7b0JBRXBDLElBQUlFLGFBQWEsTUFBTTt3QkFDckIsTUFBTVEsUUFBUSxJQUFJLEVBQ1pDLGlCQUFpQkQsTUFBTVQsWUFBWSxJQUNuQ1csaUNBQWlDRCxlQUFlRSxTQUFTLENBQUNUO3dCQUVoRSxJQUFJUSxnQ0FBZ0M7NEJBQ2xDSCxXQUFXO3dCQUNiO29CQUNGO2dCQUNGO2dCQUVBSCxhQUFhRztZQUNmO1FBQ0YsR0FBR2xCO0lBQ0w7SUFFQSxPQUFPdUIsT0FBTyxRQUFRO0FBQ3hCIn0=
53
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9lbGVtZW50L3Byb29mLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBFbGVtZW50IH0gZnJvbSBcIm9jY2FtLWxhbmd1YWdlc1wiO1xuXG5pbXBvcnQgeyBkZWZpbmUgfSBmcm9tIFwiLi4vZWxlbWVudHNcIjtcbmltcG9ydCB7IGVuY2xvc2UgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2NvbnRleHRcIjtcblxuZXhwb3J0IGRlZmF1bHQgZGVmaW5lKGNsYXNzIFByb29mIGV4dGVuZHMgRWxlbWVudCB7XG4gIGNvbnN0cnVjdG9yKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgZGVyaXZhdGlvbikge1xuICAgIHN1cGVyKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCk7XG5cbiAgICB0aGlzLmRlcml2YXRpb24gPSBkZXJpdmF0aW9uO1xuICB9XG5cbiAgZ2V0RGVyaXZhdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5kZXJpdmF0aW9uO1xuICB9XG5cbiAgZ2V0UHJvb2ZOb2RlKCkge1xuICAgIGNvbnN0IG5vZGUgPSB0aGlzLmdldE5vZGUoKSxcbiAgICAgICAgICBwcm9vZk5vZGUgPSBub2RlOyAvLy9cblxuICAgIHJldHVybiBwcm9vZk5vZGU7XG4gIH1cblxuICBnZXRMYXN0U3RlcCgpIHsgcmV0dXJuIHRoaXMuZGVyaXZhdGlvbi5nZXRMYXN0U3RlcCgpOyB9XG5cbiAgZ2V0U3RhdGVtZW50KCkge1xuICAgIGNvbnN0IGxhc3RTdGVwID0gdGhpcy5nZXRMYXN0U3RlcCgpLFxuICAgICAgICAgIGxhc3RTdGVwU3RhdGVtZW50ID0gbGFzdFN0ZXAuZ2V0U3RhdGVtZW50KCksXG4gICAgICAgICAgc3RhdGVtZW50ID0gbGFzdFN0ZXBTdGF0ZW1lbnQ7IC8vL1xuXG4gICAgcmV0dXJuIHN0YXRlbWVudDtcbiAgfVxuXG4gIHZlcmlmeShzdGF0ZW1lbnQsIGNvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICAgIGVuY2xvc2UoKGNvbnRleHQpID0+IHtcbiAgICAgIHRoaXMuZGVyaXZhdGlvbi52ZXJpZnkoY29udGV4dCwgKGRlcml2YXRpb25WZXJpZmllcykgPT4ge1xuICAgICAgICBsZXQgdmVyaWZpZXMgPSBmYWxzZTtcblxuICAgICAgICBpZiAoZGVyaXZhdGlvblZlcmlmaWVzKSB7XG4gICAgICAgICAgY29uc3QgbGFzdFN0ZXAgPSBjb250ZXh0LmdldExhc3RTdGVwKCk7XG5cbiAgICAgICAgICBpZiAobGFzdFN0ZXAgIT09IG51bGwpIHtcbiAgICAgICAgICAgIGNvbnN0IHByb29mID0gdGhpcywgLy8vXG4gICAgICAgICAgICAgICAgICBwcm9vZlN0YXRlbWVudCA9IHByb29mLmdldFN0YXRlbWVudCgpLFxuICAgICAgICAgICAgICAgICAgcHJvb2ZTdGF0ZW1lbnRFcXVhbFRvU3RhdGVtZW50ID0gcHJvb2ZTdGF0ZW1lbnQuaXNFcXVhbFRvKHN0YXRlbWVudCk7XG5cbiAgICAgICAgICAgIGlmIChwcm9vZlN0YXRlbWVudEVxdWFsVG9TdGF0ZW1lbnQpIHtcbiAgICAgICAgICAgICAgdmVyaWZpZXMgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBjb250aW51YXRpb24odmVyaWZpZXMpO1xuICAgICAgfSk7XG4gICAgfSwgY29udGV4dCk7XG4gIH1cblxuICBzdGF0aWMgbmFtZSA9IFwiUHJvb2ZcIjtcbn0pO1xuIl0sIm5hbWVzIjpbImRlZmluZSIsIlByb29mIiwiRWxlbWVudCIsImNvbnRleHQiLCJzdHJpbmciLCJub2RlIiwiYnJlYWtQb2ludCIsImRlcml2YXRpb24iLCJnZXREZXJpdmF0aW9uIiwiZ2V0UHJvb2ZOb2RlIiwiZ2V0Tm9kZSIsInByb29mTm9kZSIsImdldExhc3RTdGVwIiwiZ2V0U3RhdGVtZW50IiwibGFzdFN0ZXAiLCJsYXN0U3RlcFN0YXRlbWVudCIsInN0YXRlbWVudCIsInZlcmlmeSIsImNvbnRpbnVhdGlvbiIsImVuY2xvc2UiLCJkZXJpdmF0aW9uVmVyaWZpZXMiLCJ2ZXJpZmllcyIsInByb29mIiwicHJvb2ZTdGF0ZW1lbnQiLCJwcm9vZlN0YXRlbWVudEVxdWFsVG9TdGF0ZW1lbnQiLCJpc0VxdWFsVG8iLCJuYW1lIl0sIm1hcHBpbmdzIjoiQUFBQTs7OzsrQkFPQTs7O2VBQUE7OztnQ0FMd0I7MEJBRUQ7eUJBQ0M7TUFFeEIsV0FBZUEsSUFBQUEsZ0JBQU0sRUFBQyxNQUFNQyxjQUFjQyx1QkFBTztJQUMvQyxZQUFZQyxPQUFPLEVBQUVDLE1BQU0sRUFBRUMsSUFBSSxFQUFFQyxVQUFVLEVBQUVDLFVBQVUsQ0FBRTtRQUN6RCxLQUFLLENBQUNKLFNBQVNDLFFBQVFDLE1BQU1DO1FBRTdCLElBQUksQ0FBQ0MsVUFBVSxHQUFHQTtJQUNwQjtJQUVBQyxnQkFBZ0I7UUFDZCxPQUFPLElBQUksQ0FBQ0QsVUFBVTtJQUN4QjtJQUVBRSxlQUFlO1FBQ2IsTUFBTUosT0FBTyxJQUFJLENBQUNLLE9BQU8sSUFDbkJDLFlBQVlOLE1BQU0sR0FBRztRQUUzQixPQUFPTTtJQUNUO0lBRUFDLGNBQWM7UUFBRSxPQUFPLElBQUksQ0FBQ0wsVUFBVSxDQUFDSyxXQUFXO0lBQUk7SUFFdERDLGVBQWU7UUFDYixNQUFNQyxXQUFXLElBQUksQ0FBQ0YsV0FBVyxJQUMzQkcsb0JBQW9CRCxTQUFTRCxZQUFZLElBQ3pDRyxZQUFZRCxtQkFBbUIsR0FBRztRQUV4QyxPQUFPQztJQUNUO0lBRUFDLE9BQU9ELFNBQVMsRUFBRWIsT0FBTyxFQUFFZSxZQUFZLEVBQUU7UUFDdkNDLElBQUFBLGdCQUFPLEVBQUMsQ0FBQ2hCO1lBQ1AsSUFBSSxDQUFDSSxVQUFVLENBQUNVLE1BQU0sQ0FBQ2QsU0FBUyxDQUFDaUI7Z0JBQy9CLElBQUlDLFdBQVc7Z0JBRWYsSUFBSUQsb0JBQW9CO29CQUN0QixNQUFNTixXQUFXWCxRQUFRUyxXQUFXO29CQUVwQyxJQUFJRSxhQUFhLE1BQU07d0JBQ3JCLE1BQU1RLFFBQVEsSUFBSSxFQUNaQyxpQkFBaUJELE1BQU1ULFlBQVksSUFDbkNXLGlDQUFpQ0QsZUFBZUUsU0FBUyxDQUFDVDt3QkFFaEUsSUFBSVEsZ0NBQWdDOzRCQUNsQ0gsV0FBVzt3QkFDYjtvQkFDRjtnQkFDRjtnQkFFQSxPQUFPSCxhQUFhRztZQUN0QjtRQUNGLEdBQUdsQjtJQUNMO0lBRUEsT0FBT3VCLE9BQU8sUUFBUTtBQUN4QiJ9
@@ -64,7 +64,7 @@ const _default = (0, _elements.define)(class Rule extends _occamlanguages.Elemen
64
64
  context.addRule(rule);
65
65
  context.debug(`...verified the '${ruleString}' rule.`);
66
66
  }
67
- continuation(verifies);
67
+ return continuation(verifies);
68
68
  });
69
69
  }, context);
70
70
  });
@@ -75,14 +75,13 @@ const _default = (0, _elements.define)(class Rule extends _occamlanguages.Elemen
75
75
  if (labelVerifies) {
76
76
  context.debug(`...verified the '${ruleString}' rule's '${labelString}' label.`);
77
77
  }
78
- continuation(labelVerifies);
78
+ return continuation(labelVerifies);
79
79
  });
80
80
  }
81
81
  verifyProof(context, continuation) {
82
82
  if (this.proof === null) {
83
83
  const proofVerifies = true;
84
- continuation(proofVerifies);
85
- return;
84
+ return continuation(proofVerifies);
86
85
  }
87
86
  const ruleString = this.getString(); ///
88
87
  context.trace(`Verifying the '${ruleString}' rule's proof...`);
@@ -91,7 +90,7 @@ const _default = (0, _elements.define)(class Rule extends _occamlanguages.Elemen
91
90
  if (proofVerifies) {
92
91
  context.debug(`...verified the '${ruleString}' rule's proof.`);
93
92
  }
94
- continuation(proofVerifies);
93
+ return continuation(proofVerifies);
95
94
  });
96
95
  }
97
96
  verifyLabels(context, conntinuation) {
@@ -118,7 +117,7 @@ const _default = (0, _elements.define)(class Rule extends _occamlanguages.Elemen
118
117
  if (premiseVerifies) {
119
118
  context.debug(`...verified the '${ruleString}' rule's '${premiseString}' premise.`);
120
119
  }
121
- continuation(premiseVerifies);
120
+ return continuation(premiseVerifies);
122
121
  });
123
122
  }
124
123
  verifyPremises(context, continuation) {
@@ -130,7 +129,7 @@ const _default = (0, _elements.define)(class Rule extends _occamlanguages.Elemen
130
129
  if (premisesVerify) {
131
130
  context.debug(`...verified the '${ruleString}' rule's premises.`);
132
131
  }
133
- continuation(premisesVerify);
132
+ return continuation(premisesVerify);
134
133
  });
135
134
  }
136
135
  verifyConclusion(context, continuation) {
@@ -140,7 +139,7 @@ const _default = (0, _elements.define)(class Rule extends _occamlanguages.Elemen
140
139
  if (conclusionVerifies) {
141
140
  context.debug(`...verified the '${ruleString}' rule's '${conclusionString}' conclusion.`);
142
141
  }
143
- continuation(conclusionVerifies);
142
+ return continuation(conclusionVerifies);
144
143
  });
145
144
  }
146
145
  unifyStepWithConclusion = breakable(function(step, context, continuation) {
@@ -154,15 +153,14 @@ const _default = (0, _elements.define)(class Rule extends _occamlanguages.Elemen
154
153
  if (stepUnifiesWithConclusion) {
155
154
  context.debug(`...unified the '${stepString}' step with the '${ruleString}' rule's '${conclusionString}' conclusion.`);
156
155
  }
157
- continuation(stepUnifiesWithConclusion);
156
+ return continuation(stepUnifiesWithConclusion);
158
157
  });
159
158
  });
160
159
  unifyStepAndSubproofOrProofAssertions(step, subproofOrProofAssertions, context, continuation) {
161
160
  this.unifyStepWithConclusion(step, context, (statementUnifiesWithConclusion)=>{
162
161
  if (!statementUnifiesWithConclusion) {
163
162
  const stepAndSubproofOrProofAssertionsUnify = false;
164
- continuation(stepAndSubproofOrProofAssertionsUnify);
165
- return;
163
+ return continuation(stepAndSubproofOrProofAssertionsUnify);
166
164
  }
167
165
  this.unifySubproofOrProofAssertionsWithPremises(subproofOrProofAssertions, context, (subproofOrProofAssertionsUnifiesWithPremises)=>{
168
166
  let stepAndSubproofOrProofAssertionsUnify = false;
@@ -172,7 +170,7 @@ const _default = (0, _elements.define)(class Rule extends _occamlanguages.Elemen
172
170
  stepAndSubproofOrProofAssertionsUnify = true;
173
171
  }
174
172
  }
175
- continuation(stepAndSubproofOrProofAssertionsUnify);
173
+ return continuation(stepAndSubproofOrProofAssertionsUnify);
176
174
  });
177
175
  });
178
176
  }
@@ -182,8 +180,7 @@ const _default = (0, _elements.define)(class Rule extends _occamlanguages.Elemen
182
180
  }, (subproofOrProofAssertion)=>{
183
181
  if (subproofOrProofAssertion !== null) {
184
182
  const subproofOrProofAssertionsUnifiesWithPremise = true;
185
- continuation(subproofOrProofAssertionsUnifiesWithPremise);
186
- return;
183
+ return continuation(subproofOrProofAssertionsUnifiesWithPremise);
187
184
  }
188
185
  premise.unifyIndependently(context, continuation);
189
186
  });
@@ -216,4 +213,4 @@ const _default = (0, _elements.define)(class Rule extends _occamlanguages.Elemen
216
213
  }
217
214
  });
218
215
 
219
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9lbGVtZW50L3J1bGUuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IGFycmF5VXRpbGl0aWVzIH0gZnJvbSBcIm5lY2Vzc2FyeVwiO1xuaW1wb3J0IHsgRWxlbWVudCwgYnJlYWtQb2ludFV0aWxpdGllcywgY29udGludWF0aW9uVXRpbGl0aWVzIH0gZnJvbSBcIm9jY2FtLWxhbmd1YWdlc1wiO1xuXG5pbXBvcnQgeyBhbGwgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2NvbnRpbnVhdGlvblwiO1xuaW1wb3J0IHsgZGVmaW5lIH0gZnJvbSBcIi4uL2VsZW1lbnRzXCI7XG5pbXBvcnQgeyBlbmNsb3NlIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9jb250ZXh0XCI7XG5pbXBvcnQgeyBsYWJlbHNGcm9tSlNPTiwgcHJlbWlzZXNGcm9tSlNPTiwgY29uY2x1c2lvbkZyb21KU09OLCBsYWJlbHNUb0xhYmVsc0pTT04sIHByZW1pc2VzVG9QcmVtaXNlc0pTT04sIGNvbmNsdXNpb25Ub0NvbmNsdXNpb25KU09OIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9qc29uXCI7XG5cbmNvbnN0IHsgcmV2ZXJzZSB9ID0gYXJyYXlVdGlsaXRpZXMsXG4gICAgICB7IGV2ZXJ5LCBleHRyYWN0LCBmb3J3YXJkc0V2ZXJ5LCBiYWNrd2FyZHNFdmVyeSB9ID0gY29udGludWF0aW9uVXRpbGl0aWVzLFxuICAgICAgeyBicmVha2FibGUsIGJyZWFrUG9pbnRGcm9tSlNPTiwgYnJlYWtQb2ludFRvQnJlYWtQb2ludEpTT04gfSA9IGJyZWFrUG9pbnRVdGlsaXRpZXM7XG5cbmV4cG9ydCBkZWZhdWx0IGRlZmluZShjbGFzcyBSdWxlIGV4dGVuZHMgRWxlbWVudCB7XG4gIGNvbnN0cnVjdG9yKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgcHJvb2YsIGxhYmVscywgcHJlbWlzZXMsIGNvbmNsdXNpb24pIHtcbiAgICBzdXBlcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQpO1xuXG4gICAgdGhpcy5wcm9vZiA9IHByb29mO1xuICAgIHRoaXMubGFiZWxzID0gbGFiZWxzO1xuICAgIHRoaXMucHJlbWlzZXMgPSBwcmVtaXNlcztcbiAgICB0aGlzLmNvbmNsdXNpb24gPSBjb25jbHVzaW9uO1xuICB9XG5cbiAgZ2V0TGFiZWxzKCkge1xuICAgIHJldHVybiB0aGlzLmxhYmVscztcbiAgfVxuXG4gIGdldFByZW1pc2VzKCkge1xuICAgIHJldHVybiB0aGlzLnByZW1pc2VzO1xuICB9XG5cbiAgZ2V0UHJvb2YoKSB7XG4gICAgcmV0dXJuIHRoaXMucHJvb2Y7XG4gIH1cblxuICBnZXRDb25jbHVzaW9uKCkge1xuICAgIHJldHVybiB0aGlzLmNvbmNsdXNpb247XG4gIH1cblxuICBnZXRSdWxlTm9kZSgpIHtcbiAgICBjb25zdCBub2RlID0gdGhpcy5nZXROb2RlKCksXG4gICAgICAgICAgcnVsZU5vZGUgPSBub2RlOyAgLy8vXG5cbiAgICByZXR1cm4gcnVsZU5vZGU7XG4gIH1cblxuICBtYXRjaE1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSkge1xuICAgIGNvbnN0IG1ldGF2YXJpYWJsZU5vZGVNYXRjaGVzID0gdGhpcy5sYWJlbHMuc29tZSgobGFiZWwpID0+IHtcbiAgICAgIGNvbnN0IG1ldGF2YXJpYWJsZU5vZGVNYXRjaGVzID0gbGFiZWwubWF0Y2hNZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpO1xuXG4gICAgICBpZiAobWV0YXZhcmlhYmxlTm9kZU1hdGNoZXMpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gbWV0YXZhcmlhYmxlTm9kZU1hdGNoZXM7XG4gIH1cblxuICB2ZXJpZnkgPSBicmVha2FibGUoZnVuY3Rpb24gKGNvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICAgIGNvbnN0IHJ1bGVTdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFZlcmlmeWluZyB0aGUgJyR7cnVsZVN0cmluZ30nIHJ1bGUuLi5gKTtcblxuICAgIGVuY2xvc2UoKGNvbnRleHQpID0+IHtcbiAgICAgIGNvbnN0IHZlcmlmeVByb29mID0gdGhpcy52ZXJpZnlQcm9vZi5iaW5kKHRoaXMpLFxuICAgICAgICAgICAgdmVyaWZ5TGFiZWxzID0gdGhpcy52ZXJpZnlMYWJlbHMuYmluZCh0aGlzKSxcbiAgICAgICAgICAgIHZlcmlmeVByZW1pc2VzID0gdGhpcy52ZXJpZnlQcmVtaXNlcy5iaW5kKHRoaXMpLFxuICAgICAgICAgICAgdmVyaWZ5Q29uY2x1c2lvbiA9IHRoaXMudmVyaWZ5Q29uY2x1c2lvbi5iaW5kKHRoaXMpO1xuXG4gICAgICBhbGwoW1xuICAgICAgICB2ZXJpZnlMYWJlbHMsXG4gICAgICAgIHZlcmlmeVByZW1pc2VzLFxuICAgICAgICB2ZXJpZnlDb25jbHVzaW9uLFxuICAgICAgICB2ZXJpZnlQcm9vZlxuICAgICAgXSwgY29udGV4dCwgKHZlcmlmaWVzKSA9PiB7XG4gICAgICAgIGlmICh2ZXJpZmllcykge1xuICAgICAgICAgIGNvbnN0IHJ1bGUgPSB0aGlzOyAgLy8vXG5cbiAgICAgICAgICBjb250ZXh0LmFkZFJ1bGUocnVsZSk7XG5cbiAgICAgICAgICBjb250ZXh0LmRlYnVnKGAuLi52ZXJpZmllZCB0aGUgJyR7cnVsZVN0cmluZ30nIHJ1bGUuYCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb250aW51YXRpb24odmVyaWZpZXMpO1xuICAgICAgfSk7XG4gICAgfSwgY29udGV4dCk7XG4gIH0pO1xuXG4gIHZlcmlmeUxhYmVsKGxhYmVsLCBjb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgICBjb25zdCBydWxlU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKSwgIC8vL1xuICAgICAgICAgIGxhYmVsU3RyaW5nID0gbGFiZWwuZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBWZXJpZnlpbmcgdGhlICcke3J1bGVTdHJpbmd9JyBydWxlJ3MgJyR7bGFiZWxTdHJpbmd9JyBsYWJlbC4uLmApO1xuXG4gICAgbGFiZWwudmVyaWZ5KChsYWJlbFZlcmlmaWVzKSA9PiB7XG4gICAgICBpZiAobGFiZWxWZXJpZmllcykge1xuICAgICAgICBjb250ZXh0LmRlYnVnKGAuLi52ZXJpZmllZCB0aGUgJyR7cnVsZVN0cmluZ30nIHJ1bGUncyAnJHtsYWJlbFN0cmluZ30nIGxhYmVsLmApO1xuICAgICAgfVxuXG4gICAgICBjb250aW51YXRpb24obGFiZWxWZXJpZmllcyk7XG4gICAgfSk7XG4gIH1cblxuICB2ZXJpZnlQcm9vZihjb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgICBpZiAodGhpcy5wcm9vZiA9PT0gbnVsbCkge1xuICAgICAgY29uc3QgcHJvb2ZWZXJpZmllcyA9IHRydWU7XG5cbiAgICAgIGNvbnRpbnVhdGlvbihwcm9vZlZlcmlmaWVzKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHJ1bGVTdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWZXJpZnlpbmcgdGhlICcke3J1bGVTdHJpbmd9JyBydWxlJ3MgcHJvb2YuLi5gKTtcblxuICAgIGNvbnN0IHN0YXRlbWVudCA9IHRoaXMuY29uY2x1c2lvbi5nZXRTdGF0ZW1lbnQoKTtcblxuICAgIHRoaXMucHJvb2YudmVyaWZ5KHN0YXRlbWVudCwgY29udGV4dCwgKHByb29mVmVyaWZpZXMpID0+IHtcbiAgICAgIGlmIChwcm9vZlZlcmlmaWVzKSB7XG4gICAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZlcmlmaWVkIHRoZSAnJHtydWxlU3RyaW5nfScgcnVsZSdzIHByb29mLmApO1xuICAgICAgfVxuXG4gICAgICBjb250aW51YXRpb24ocHJvb2ZWZXJpZmllcyk7XG4gICAgfSk7XG4gIH1cblxuICB2ZXJpZnlMYWJlbHMoY29udGV4dCwgY29ubnRpbnVhdGlvbikge1xuICAgIGNvbnN0IHJ1bGVTdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWZXJpZnlpbmcgdGhlICcke3J1bGVTdHJpbmd9JyBydWxlJ3MgbGFiZWxzLi4uYCk7XG5cbiAgICBldmVyeSh0aGlzLmxhYmVscywgKGxhYmVsLCBjb250aW51YXRpb24pID0+IHtcbiAgICAgIHRoaXMudmVyaWZ5TGFiZWwobGFiZWwsIGNvbnRleHQsIGNvbnRpbnVhdGlvbik7XG4gICAgfSwgKGxhYmVsc1ZlcmlmeSkgPT4ge1xuICAgICAgaWYgKGxhYmVsc1ZlcmlmeSkge1xuICAgICAgICBjb250ZXh0LmRlYnVnKGAuLi52ZXJpZmllZCB0aGUgJyR7cnVsZVN0cmluZ30nIHJ1bGUncyBsYWJlbHMuYCk7XG4gICAgICB9XG5cbiAgICAgIGNvbm50aW51YXRpb24obGFiZWxzVmVyaWZ5KTtcbiAgICB9KTtcbiAgfVxuXG4gIHZlcmlmeVByZW1pc2UocHJlbWlzZSwgY29udGV4dCwgY29udGludWF0aW9uKSB7XG4gICAgY29uc3QgcnVsZVN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCksICAvLy9cbiAgICAgICAgICBwcmVtaXNlU3RyaW5nID0gcHJlbWlzZS5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYFZlcmlmeWluZyB0aGUgJyR7cnVsZVN0cmluZ30nIHJ1bGUncyAnJHtwcmVtaXNlU3RyaW5nfScgcHJlbWlzZS4uLmApO1xuXG4gICAgcHJlbWlzZS52ZXJpZnkoY29udGV4dCwgKHByZW1pc2VWZXJpZmllcykgPT4ge1xuICAgICAgaWYgKHByZW1pc2VWZXJpZmllcykge1xuICAgICAgICBjb25zdCBzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb24gPSBwcmVtaXNlOyAgLy8vL1xuXG4gICAgICAgIGNvbnRleHQuYXNzaWduQXNzaWdubWVudHMoKTtcblxuICAgICAgICBjb250ZXh0LmFkZFN1YnByb29mT3JQcm9vZkFzc2VydGlvbihzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb24pO1xuICAgICAgfVxuXG4gICAgICBpZiAocHJlbWlzZVZlcmlmaWVzKSB7XG4gICAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZlcmlmaWVkIHRoZSAnJHtydWxlU3RyaW5nfScgcnVsZSdzICcke3ByZW1pc2VTdHJpbmd9JyBwcmVtaXNlLmApO1xuICAgICAgfVxuXG4gICAgICBjb250aW51YXRpb24ocHJlbWlzZVZlcmlmaWVzKTtcbiAgICB9KTtcbiAgfVxuXG4gIHZlcmlmeVByZW1pc2VzKGNvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICAgIGNvbnN0IHJ1bGVTdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWZXJpZnlpbmcgdGhlICcke3J1bGVTdHJpbmd9JyBydWxlJ3MgcHJlbWlzZXMuLi5gKTtcblxuICAgIGZvcndhcmRzRXZlcnkodGhpcy5wcmVtaXNlcywgKHByZW1pc2UsIGNvbnRpbnVhdGlvbikgPT4ge1xuICAgICAgdGhpcy52ZXJpZnlQcmVtaXNlKHByZW1pc2UsIGNvbnRleHQsIGNvbnRpbnVhdGlvbik7XG4gICAgfSwgKHByZW1pc2VzVmVyaWZ5KSA9PiB7XG4gICAgICBpZiAocHJlbWlzZXNWZXJpZnkpIHtcbiAgICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmVyaWZpZWQgdGhlICcke3J1bGVTdHJpbmd9JyBydWxlJ3MgcHJlbWlzZXMuYCk7XG4gICAgICB9XG5cbiAgICAgIGNvbnRpbnVhdGlvbihwcmVtaXNlc1ZlcmlmeSk7XG4gICAgfSk7XG4gIH1cblxuICB2ZXJpZnlDb25jbHVzaW9uKGNvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICAgIGNvbnN0IHJ1bGVTdHJpbmcgPSB0aGlzLmdldFN0cmluZygpLCAgLy8vXG4gICAgICAgICAgY29uY2x1c2lvblN0cmluZyA9IHRoaXMuY29uY2x1c2lvbi5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYFZlcmlmeWluZyB0aGUgJyR7cnVsZVN0cmluZ30nIHJ1bGUncyAnJHtjb25jbHVzaW9uU3RyaW5nfScgY29uY2x1c2lvbi4uLmApO1xuXG4gICAgdGhpcy5jb25jbHVzaW9uLnZlcmlmeShjb250ZXh0LCAoY29uY2x1c2lvblZlcmlmaWVzKSA9PiB7XG4gICAgICBpZiAoY29uY2x1c2lvblZlcmlmaWVzKSB7XG4gICAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZlcmlmaWVkIHRoZSAnJHtydWxlU3RyaW5nfScgcnVsZSdzICcke2NvbmNsdXNpb25TdHJpbmd9JyBjb25jbHVzaW9uLmApO1xuICAgICAgfVxuXG4gICAgICBjb250aW51YXRpb24oY29uY2x1c2lvblZlcmlmaWVzKTtcbiAgICB9KTtcbiAgfVxuXG4gIHVuaWZ5U3RlcFdpdGhDb25jbHVzaW9uID0gYnJlYWthYmxlKGZ1bmN0aW9uIChzdGVwLCBjb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgICBjb25zdCBydWxlU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKSxcbiAgICAgICAgICBzdGVwU3RyaW5nID0gc3RlcC5nZXRTdHJpbmcoKSxcbiAgICAgICAgICBjb25jbHVzaW9uU3RyaW5nID0gdGhpcy5jb25jbHVzaW9uLmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgVW5pZnlpbmcgdGhlICcke3N0ZXBTdHJpbmd9JyBzdGVwIHdpdGggdGhlICcke3J1bGVTdHJpbmd9JyBydWxlJ3MgJyR7Y29uY2x1c2lvblN0cmluZ30nIGNvbmNsdXNpb24uLi5gKTtcblxuICAgIHRoaXMuY29uY2x1c2lvbi51bmlmeVN0ZXAoc3RlcCwgY29udGV4dCwgKHN0ZXBVbmlmaWVzKSA9PiB7XG4gICAgICBsZXQgc3RlcFVuaWZpZXNXaXRoQ29uY2x1c2lvbiA9IGZhbHNlO1xuXG4gICAgICBpZiAoc3RlcFVuaWZpZXMpIHtcbiAgICAgICAgc3RlcFVuaWZpZXNXaXRoQ29uY2x1c2lvbiA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChzdGVwVW5pZmllc1dpdGhDb25jbHVzaW9uKSB7XG4gICAgICAgIGNvbnRleHQuZGVidWcoYC4uLnVuaWZpZWQgdGhlICcke3N0ZXBTdHJpbmd9JyBzdGVwIHdpdGggdGhlICcke3J1bGVTdHJpbmd9JyBydWxlJ3MgJyR7Y29uY2x1c2lvblN0cmluZ30nIGNvbmNsdXNpb24uYCk7XG4gICAgICB9XG5cbiAgICAgIGNvbnRpbnVhdGlvbihzdGVwVW5pZmllc1dpdGhDb25jbHVzaW9uKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgdW5pZnlTdGVwQW5kU3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucyhzdGVwLCBzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zLCBjb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgICB0aGlzLnVuaWZ5U3RlcFdpdGhDb25jbHVzaW9uKHN0ZXAsIGNvbnRleHQsIChzdGF0ZW1lbnRVbmlmaWVzV2l0aENvbmNsdXNpb24pID0+IHtcbiAgICAgIGlmICghc3RhdGVtZW50VW5pZmllc1dpdGhDb25jbHVzaW9uKSB7XG4gICAgICAgIGNvbnN0IHN0ZXBBbmRTdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zVW5pZnkgPSBmYWxzZTtcblxuICAgICAgICBjb250aW51YXRpb24oc3RlcEFuZFN1YnByb29mT3JQcm9vZkFzc2VydGlvbnNVbmlmeSk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnVuaWZ5U3VicHJvb2ZPclByb29mQXNzZXJ0aW9uc1dpdGhQcmVtaXNlcyhzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zLCBjb250ZXh0LCAoc3VicHJvb2ZPclByb29mQXNzZXJ0aW9uc1VuaWZpZXNXaXRoUHJlbWlzZXMpID0+IHtcbiAgICAgICAgbGV0IHN0ZXBBbmRTdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zVW5pZnkgPSBmYWxzZTtcblxuICAgICAgICBpZiAoc3VicHJvb2ZPclByb29mQXNzZXJ0aW9uc1VuaWZpZXNXaXRoUHJlbWlzZXMpIHtcbiAgICAgICAgICBjb25zdCBkZXJpdmVkU3Vic3RpdHV0aW9uc1Jlc29sdmVkID0gY29udGV4dC5hcmVEZXJpdmVkU3Vic3RpdHV0aW9uc1Jlc29sdmVkKCk7XG5cbiAgICAgICAgICBpZiAoZGVyaXZlZFN1YnN0aXR1dGlvbnNSZXNvbHZlZCkge1xuICAgICAgICAgICAgc3RlcEFuZFN1YnByb29mT3JQcm9vZkFzc2VydGlvbnNVbmlmeSA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgY29udGludWF0aW9uKHN0ZXBBbmRTdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zVW5pZnkpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICB1bmlmeVN1YnByb29mT3JQcm9vZkFzc2VydGlvbnNXaXRoUHJlbWlzZShzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zLCBwcmVtaXNlLCBjb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgICBleHRyYWN0KHN1YnByb29mT3JQcm9vZkFzc2VydGlvbnMsIChzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb24sIGNvbnRpbnVhdGlvbikgPT4ge1xuICAgICAgcHJlbWlzZS51bmlmeVN1YnByb29mT3JQcm9vZkFzc2VydGlvbihzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb24sIGNvbnRleHQsIGNvbnRpbnVhdGlvbik7XG4gICAgfSwgKHN1YnByb29mT3JQcm9vZkFzc2VydGlvbikgPT4ge1xuICAgICAgaWYgKHN1YnByb29mT3JQcm9vZkFzc2VydGlvbiAhPT0gbnVsbCkge1xuICAgICAgICBjb25zdCBzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zVW5pZmllc1dpdGhQcmVtaXNlID0gdHJ1ZTtcblxuICAgICAgICBjb250aW51YXRpb24oc3VicHJvb2ZPclByb29mQXNzZXJ0aW9uc1VuaWZpZXNXaXRoUHJlbWlzZSk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBwcmVtaXNlLnVuaWZ5SW5kZXBlbmRlbnRseShjb250ZXh0LCBjb250aW51YXRpb24pO1xuICAgIH0pO1xuICB9XG5cbiAgdW5pZnlTdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zV2l0aFByZW1pc2VzKHN1YnByb29mT3JQcm9vZkFzc2VydGlvbnMsIGNvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICAgIHN1YnByb29mT3JQcm9vZkFzc2VydGlvbnMgPSByZXZlcnNlKHN1YnByb29mT3JQcm9vZkFzc2VydGlvbnMpOyAvLy9cblxuICAgIGJhY2t3YXJkc0V2ZXJ5KHRoaXMucHJlbWlzZXMsIChwcmVtaXNlLCBjb250aW51YXRpb24pID0+IHtcbiAgICAgIHRoaXMudW5pZnlTdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zV2l0aFByZW1pc2Uoc3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucywgcHJlbWlzZSwgY29udGV4dCwgY29udGludWF0aW9uKTtcbiAgICB9LCBjb250aW51YXRpb24pO1xuICB9XG5cbiAgdG9KU09OKCkge1xuICAgIGNvbnN0IGxhYmVsc0pTT04gPSBsYWJlbHNUb0xhYmVsc0pTT04odGhpcy5sYWJlbHMpLFxuICAgICAgICAgIHByZW1pc2VzSlNPTiA9IHByZW1pc2VzVG9QcmVtaXNlc0pTT04odGhpcy5wcmVtaXNlcyksXG4gICAgICAgICAgY29uY2x1c2lvbkpTT04gPSBjb25jbHVzaW9uVG9Db25jbHVzaW9uSlNPTih0aGlzLmNvbmNsdXNpb24pLFxuICAgICAgICAgIHN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7XG5cbiAgICBsZXQgYnJlYWtQb2ludDtcblxuICAgIGJyZWFrUG9pbnQgPSB0aGlzLmdldEJyZWFrUG9pbnQoKTtcblxuICAgIGNvbnN0IGJyZWFrUG9pbnRKU09OID0gYnJlYWtQb2ludFRvQnJlYWtQb2ludEpTT04oYnJlYWtQb2ludCk7XG5cbiAgICBicmVha1BvaW50ID0gYnJlYWtQb2ludEpTT047ICAvLy9cblxuICAgIGNvbnN0IGxhYmVscyA9IGxhYmVsc0pTT04sICAvLy9cbiAgICAgICAgICBwcmVtaXNlcyA9IHByZW1pc2VzSlNPTiwgIC8vL1xuICAgICAgICAgIGNvbmNsdXNpb24gPSBjb25jbHVzaW9uSlNPTiwgIC8vL1xuICAgICAgICAgIGpzb24gPSB7XG4gICAgICAgICAgICBzdHJpbmcsXG4gICAgICAgICAgICBicmVha1BvaW50LFxuICAgICAgICAgICAgbGFiZWxzLFxuICAgICAgICAgICAgcHJlbWlzZXMsXG4gICAgICAgICAgICBjb25jbHVzaW9uXG4gICAgICAgICAgfTtcblxuICAgIHJldHVybiBqc29uO1xuICB9XG5cbiAgc3RhdGljIG5hbWUgPSBcIlJ1bGVcIjtcblxuICBzdGF0aWMgZnJvbUpTT04oanNvbiwgY29udGV4dCkge1xuICAgIGNvbnN0IHsgc3RyaW5nIH0gPSBqc29uLFxuICAgICAgICAgIG5vZGUgPSBudWxsLFxuICAgICAgICAgIGJyZWFrUG9pbnQgPSBicmVha1BvaW50RnJvbUpTT04oanNvbiksXG4gICAgICAgICAgbGFiZWxzID0gbGFiZWxzRnJvbUpTT04oanNvbiwgY29udGV4dCksXG4gICAgICAgICAgcHJlbWlzZXMgPSBwcmVtaXNlc0Zyb21KU09OKGpzb24sIGNvbnRleHQpLFxuICAgICAgICAgIGNvbmNsdXNpb24gPSBjb25jbHVzaW9uRnJvbUpTT04oanNvbiwgY29udGV4dCksXG4gICAgICAgICAgcHJvb2YgPSBudWxsLFxuICAgICAgICAgIHJ1bGUgPSBuZXcgUnVsZShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHByb29mLCBsYWJlbHMsIHByZW1pc2VzLCBjb25jbHVzaW9uKTtcblxuICAgIHJldHVybiBydWxlO1xuICB9XG59KTtcbiJdLCJuYW1lcyI6WyJyZXZlcnNlIiwiYXJyYXlVdGlsaXRpZXMiLCJldmVyeSIsImV4dHJhY3QiLCJmb3J3YXJkc0V2ZXJ5IiwiYmFja3dhcmRzRXZlcnkiLCJjb250aW51YXRpb25VdGlsaXRpZXMiLCJicmVha2FibGUiLCJicmVha1BvaW50RnJvbUpTT04iLCJicmVha1BvaW50VG9CcmVha1BvaW50SlNPTiIsImJyZWFrUG9pbnRVdGlsaXRpZXMiLCJkZWZpbmUiLCJSdWxlIiwiRWxlbWVudCIsImNvbnRleHQiLCJzdHJpbmciLCJub2RlIiwiYnJlYWtQb2ludCIsInByb29mIiwibGFiZWxzIiwicHJlbWlzZXMiLCJjb25jbHVzaW9uIiwiZ2V0TGFiZWxzIiwiZ2V0UHJlbWlzZXMiLCJnZXRQcm9vZiIsImdldENvbmNsdXNpb24iLCJnZXRSdWxlTm9kZSIsImdldE5vZGUiLCJydWxlTm9kZSIsIm1hdGNoTWV0YXZhcmlhYmxlTm9kZSIsIm1ldGF2YXJpYWJsZU5vZGUiLCJtZXRhdmFyaWFibGVOb2RlTWF0Y2hlcyIsInNvbWUiLCJsYWJlbCIsInZlcmlmeSIsImNvbnRpbnVhdGlvbiIsInJ1bGVTdHJpbmciLCJnZXRTdHJpbmciLCJ0cmFjZSIsImVuY2xvc2UiLCJ2ZXJpZnlQcm9vZiIsImJpbmQiLCJ2ZXJpZnlMYWJlbHMiLCJ2ZXJpZnlQcmVtaXNlcyIsInZlcmlmeUNvbmNsdXNpb24iLCJhbGwiLCJ2ZXJpZmllcyIsInJ1bGUiLCJhZGRSdWxlIiwiZGVidWciLCJ2ZXJpZnlMYWJlbCIsImxhYmVsU3RyaW5nIiwibGFiZWxWZXJpZmllcyIsInByb29mVmVyaWZpZXMiLCJzdGF0ZW1lbnQiLCJnZXRTdGF0ZW1lbnQiLCJjb25udGludWF0aW9uIiwibGFiZWxzVmVyaWZ5IiwidmVyaWZ5UHJlbWlzZSIsInByZW1pc2UiLCJwcmVtaXNlU3RyaW5nIiwicHJlbWlzZVZlcmlmaWVzIiwic3VicHJvb2ZPclByb29mQXNzZXJ0aW9uIiwiYXNzaWduQXNzaWdubWVudHMiLCJhZGRTdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb24iLCJwcmVtaXNlc1ZlcmlmeSIsImNvbmNsdXNpb25TdHJpbmciLCJjb25jbHVzaW9uVmVyaWZpZXMiLCJ1bmlmeVN0ZXBXaXRoQ29uY2x1c2lvbiIsInN0ZXAiLCJzdGVwU3RyaW5nIiwidW5pZnlTdGVwIiwic3RlcFVuaWZpZXMiLCJzdGVwVW5pZmllc1dpdGhDb25jbHVzaW9uIiwidW5pZnlTdGVwQW5kU3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucyIsInN1YnByb29mT3JQcm9vZkFzc2VydGlvbnMiLCJzdGF0ZW1lbnRVbmlmaWVzV2l0aENvbmNsdXNpb24iLCJzdGVwQW5kU3VicHJvb2ZPclByb29mQXNzZXJ0aW9uc1VuaWZ5IiwidW5pZnlTdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zV2l0aFByZW1pc2VzIiwic3VicHJvb2ZPclByb29mQXNzZXJ0aW9uc1VuaWZpZXNXaXRoUHJlbWlzZXMiLCJkZXJpdmVkU3Vic3RpdHV0aW9uc1Jlc29sdmVkIiwiYXJlRGVyaXZlZFN1YnN0aXR1dGlvbnNSZXNvbHZlZCIsInVuaWZ5U3VicHJvb2ZPclByb29mQXNzZXJ0aW9uc1dpdGhQcmVtaXNlIiwidW5pZnlTdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb24iLCJzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zVW5pZmllc1dpdGhQcmVtaXNlIiwidW5pZnlJbmRlcGVuZGVudGx5IiwidG9KU09OIiwibGFiZWxzSlNPTiIsImxhYmVsc1RvTGFiZWxzSlNPTiIsInByZW1pc2VzSlNPTiIsInByZW1pc2VzVG9QcmVtaXNlc0pTT04iLCJjb25jbHVzaW9uSlNPTiIsImNvbmNsdXNpb25Ub0NvbmNsdXNpb25KU09OIiwiZ2V0QnJlYWtQb2ludCIsImJyZWFrUG9pbnRKU09OIiwianNvbiIsIm5hbWUiLCJmcm9tSlNPTiIsImxhYmVsc0Zyb21KU09OIiwicHJlbWlzZXNGcm9tSlNPTiIsImNvbmNsdXNpb25Gcm9tSlNPTiJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7K0JBY0E7OztlQUFBOzs7MkJBWitCO2dDQUNxQzs4QkFFaEQ7MEJBQ0c7eUJBQ0M7c0JBQ3FIO0FBRTdJLE1BQU0sRUFBRUEsT0FBTyxFQUFFLEdBQUdDLHlCQUFjLEVBQzVCLEVBQUVDLEtBQUssRUFBRUMsT0FBTyxFQUFFQyxhQUFhLEVBQUVDLGNBQWMsRUFBRSxHQUFHQyxxQ0FBcUIsRUFDekUsRUFBRUMsU0FBUyxFQUFFQyxrQkFBa0IsRUFBRUMsMEJBQTBCLEVBQUUsR0FBR0MsbUNBQW1CO01BRXpGLFdBQWVDLElBQUFBLGdCQUFNLEVBQUMsTUFBTUMsYUFBYUMsdUJBQU87SUFDOUMsWUFBWUMsT0FBTyxFQUFFQyxNQUFNLEVBQUVDLElBQUksRUFBRUMsVUFBVSxFQUFFQyxLQUFLLEVBQUVDLE1BQU0sRUFBRUMsUUFBUSxFQUFFQyxVQUFVLENBQUU7UUFDbEYsS0FBSyxDQUFDUCxTQUFTQyxRQUFRQyxNQUFNQztRQUU3QixJQUFJLENBQUNDLEtBQUssR0FBR0E7UUFDYixJQUFJLENBQUNDLE1BQU0sR0FBR0E7UUFDZCxJQUFJLENBQUNDLFFBQVEsR0FBR0E7UUFDaEIsSUFBSSxDQUFDQyxVQUFVLEdBQUdBO0lBQ3BCO0lBRUFDLFlBQVk7UUFDVixPQUFPLElBQUksQ0FBQ0gsTUFBTTtJQUNwQjtJQUVBSSxjQUFjO1FBQ1osT0FBTyxJQUFJLENBQUNILFFBQVE7SUFDdEI7SUFFQUksV0FBVztRQUNULE9BQU8sSUFBSSxDQUFDTixLQUFLO0lBQ25CO0lBRUFPLGdCQUFnQjtRQUNkLE9BQU8sSUFBSSxDQUFDSixVQUFVO0lBQ3hCO0lBRUFLLGNBQWM7UUFDWixNQUFNVixPQUFPLElBQUksQ0FBQ1csT0FBTyxJQUNuQkMsV0FBV1osTUFBTyxHQUFHO1FBRTNCLE9BQU9ZO0lBQ1Q7SUFFQUMsc0JBQXNCQyxnQkFBZ0IsRUFBRTtRQUN0QyxNQUFNQywwQkFBMEIsSUFBSSxDQUFDWixNQUFNLENBQUNhLElBQUksQ0FBQyxDQUFDQztZQUNoRCxNQUFNRiwwQkFBMEJFLE1BQU1KLHFCQUFxQixDQUFDQztZQUU1RCxJQUFJQyx5QkFBeUI7Z0JBQzNCLE9BQU87WUFDVDtRQUNGO1FBRUEsT0FBT0E7SUFDVDtJQUVBRyxTQUFTM0IsVUFBVSxTQUFVTyxPQUFPLEVBQUVxQixZQUFZO1FBQ2hELE1BQU1DLGFBQWEsSUFBSSxDQUFDQyxTQUFTLElBQUksR0FBRztRQUV4Q3ZCLFFBQVF3QixLQUFLLENBQUMsQ0FBQyxlQUFlLEVBQUVGLFdBQVcsU0FBUyxDQUFDO1FBRXJERyxJQUFBQSxnQkFBTyxFQUFDLENBQUN6QjtZQUNQLE1BQU0wQixjQUFjLElBQUksQ0FBQ0EsV0FBVyxDQUFDQyxJQUFJLENBQUMsSUFBSSxHQUN4Q0MsZUFBZSxJQUFJLENBQUNBLFlBQVksQ0FBQ0QsSUFBSSxDQUFDLElBQUksR0FDMUNFLGlCQUFpQixJQUFJLENBQUNBLGNBQWMsQ0FBQ0YsSUFBSSxDQUFDLElBQUksR0FDOUNHLG1CQUFtQixJQUFJLENBQUNBLGdCQUFnQixDQUFDSCxJQUFJLENBQUMsSUFBSTtZQUV4REksSUFBQUEsaUJBQUcsRUFBQztnQkFDRkg7Z0JBQ0FDO2dCQUNBQztnQkFDQUo7YUFDRCxFQUFFMUIsU0FBUyxDQUFDZ0M7Z0JBQ1gsSUFBSUEsVUFBVTtvQkFDWixNQUFNQyxPQUFPLElBQUksRUFBRyxHQUFHO29CQUV2QmpDLFFBQVFrQyxPQUFPLENBQUNEO29CQUVoQmpDLFFBQVFtQyxLQUFLLENBQUMsQ0FBQyxpQkFBaUIsRUFBRWIsV0FBVyxPQUFPLENBQUM7Z0JBQ3ZEO2dCQUVBRCxhQUFhVztZQUNmO1FBQ0YsR0FBR2hDO0lBQ0wsR0FBRztJQUVIb0MsWUFBWWpCLEtBQUssRUFBRW5CLE9BQU8sRUFBRXFCLFlBQVksRUFBRTtRQUN4QyxNQUFNQyxhQUFhLElBQUksQ0FBQ0MsU0FBUyxJQUMzQmMsY0FBY2xCLE1BQU1JLFNBQVM7UUFFbkN2QixRQUFRd0IsS0FBSyxDQUFDLENBQUMsZUFBZSxFQUFFRixXQUFXLFVBQVUsRUFBRWUsWUFBWSxVQUFVLENBQUM7UUFFOUVsQixNQUFNQyxNQUFNLENBQUMsQ0FBQ2tCO1lBQ1osSUFBSUEsZUFBZTtnQkFDakJ0QyxRQUFRbUMsS0FBSyxDQUFDLENBQUMsaUJBQWlCLEVBQUViLFdBQVcsVUFBVSxFQUFFZSxZQUFZLFFBQVEsQ0FBQztZQUNoRjtZQUVBaEIsYUFBYWlCO1FBQ2Y7SUFDRjtJQUVBWixZQUFZMUIsT0FBTyxFQUFFcUIsWUFBWSxFQUFFO1FBQ2pDLElBQUksSUFBSSxDQUFDakIsS0FBSyxLQUFLLE1BQU07WUFDdkIsTUFBTW1DLGdCQUFnQjtZQUV0QmxCLGFBQWFrQjtZQUViO1FBQ0Y7UUFFQSxNQUFNakIsYUFBYSxJQUFJLENBQUNDLFNBQVMsSUFBSyxHQUFHO1FBRXpDdkIsUUFBUXdCLEtBQUssQ0FBQyxDQUFDLGVBQWUsRUFBRUYsV0FBVyxpQkFBaUIsQ0FBQztRQUU3RCxNQUFNa0IsWUFBWSxJQUFJLENBQUNqQyxVQUFVLENBQUNrQyxZQUFZO1FBRTlDLElBQUksQ0FBQ3JDLEtBQUssQ0FBQ2dCLE1BQU0sQ0FBQ29CLFdBQVd4QyxTQUFTLENBQUN1QztZQUNyQyxJQUFJQSxlQUFlO2dCQUNqQnZDLFFBQVFtQyxLQUFLLENBQUMsQ0FBQyxpQkFBaUIsRUFBRWIsV0FBVyxlQUFlLENBQUM7WUFDL0Q7WUFFQUQsYUFBYWtCO1FBQ2Y7SUFDRjtJQUVBWCxhQUFhNUIsT0FBTyxFQUFFMEMsYUFBYSxFQUFFO1FBQ25DLE1BQU1wQixhQUFhLElBQUksQ0FBQ0MsU0FBUyxJQUFLLEdBQUc7UUFFekN2QixRQUFRd0IsS0FBSyxDQUFDLENBQUMsZUFBZSxFQUFFRixXQUFXLGtCQUFrQixDQUFDO1FBRTlEbEMsTUFBTSxJQUFJLENBQUNpQixNQUFNLEVBQUUsQ0FBQ2MsT0FBT0U7WUFDekIsSUFBSSxDQUFDZSxXQUFXLENBQUNqQixPQUFPbkIsU0FBU3FCO1FBQ25DLEdBQUcsQ0FBQ3NCO1lBQ0YsSUFBSUEsY0FBYztnQkFDaEIzQyxRQUFRbUMsS0FBSyxDQUFDLENBQUMsaUJBQWlCLEVBQUViLFdBQVcsZ0JBQWdCLENBQUM7WUFDaEU7WUFFQW9CLGNBQWNDO1FBQ2hCO0lBQ0Y7SUFFQUMsY0FBY0MsT0FBTyxFQUFFN0MsT0FBTyxFQUFFcUIsWUFBWSxFQUFFO1FBQzVDLE1BQU1DLGFBQWEsSUFBSSxDQUFDQyxTQUFTLElBQzNCdUIsZ0JBQWdCRCxRQUFRdEIsU0FBUztRQUV2Q3ZCLFFBQVF3QixLQUFLLENBQUMsQ0FBQyxlQUFlLEVBQUVGLFdBQVcsVUFBVSxFQUFFd0IsY0FBYyxZQUFZLENBQUM7UUFFbEZELFFBQVF6QixNQUFNLENBQUNwQixTQUFTLENBQUMrQztZQUN2QixJQUFJQSxpQkFBaUI7Z0JBQ25CLE1BQU1DLDJCQUEyQkgsU0FBVSxJQUFJO2dCQUUvQzdDLFFBQVFpRCxpQkFBaUI7Z0JBRXpCakQsUUFBUWtELDJCQUEyQixDQUFDRjtZQUN0QztZQUVBLElBQUlELGlCQUFpQjtnQkFDbkIvQyxRQUFRbUMsS0FBSyxDQUFDLENBQUMsaUJBQWlCLEVBQUViLFdBQVcsVUFBVSxFQUFFd0IsY0FBYyxVQUFVLENBQUM7WUFDcEY7WUFFQXpCLGFBQWEwQjtRQUNmO0lBQ0Y7SUFFQWxCLGVBQWU3QixPQUFPLEVBQUVxQixZQUFZLEVBQUU7UUFDcEMsTUFBTUMsYUFBYSxJQUFJLENBQUNDLFNBQVMsSUFBSyxHQUFHO1FBRXpDdkIsUUFBUXdCLEtBQUssQ0FBQyxDQUFDLGVBQWUsRUFBRUYsV0FBVyxvQkFBb0IsQ0FBQztRQUVoRWhDLGNBQWMsSUFBSSxDQUFDZ0IsUUFBUSxFQUFFLENBQUN1QyxTQUFTeEI7WUFDckMsSUFBSSxDQUFDdUIsYUFBYSxDQUFDQyxTQUFTN0MsU0FBU3FCO1FBQ3ZDLEdBQUcsQ0FBQzhCO1lBQ0YsSUFBSUEsZ0JBQWdCO2dCQUNsQm5ELFFBQVFtQyxLQUFLLENBQUMsQ0FBQyxpQkFBaUIsRUFBRWIsV0FBVyxrQkFBa0IsQ0FBQztZQUNsRTtZQUVBRCxhQUFhOEI7UUFDZjtJQUNGO0lBRUFyQixpQkFBaUI5QixPQUFPLEVBQUVxQixZQUFZLEVBQUU7UUFDdEMsTUFBTUMsYUFBYSxJQUFJLENBQUNDLFNBQVMsSUFDM0I2QixtQkFBbUIsSUFBSSxDQUFDN0MsVUFBVSxDQUFDZ0IsU0FBUztRQUVsRHZCLFFBQVF3QixLQUFLLENBQUMsQ0FBQyxlQUFlLEVBQUVGLFdBQVcsVUFBVSxFQUFFOEIsaUJBQWlCLGVBQWUsQ0FBQztRQUV4RixJQUFJLENBQUM3QyxVQUFVLENBQUNhLE1BQU0sQ0FBQ3BCLFNBQVMsQ0FBQ3FEO1lBQy9CLElBQUlBLG9CQUFvQjtnQkFDdEJyRCxRQUFRbUMsS0FBSyxDQUFDLENBQUMsaUJBQWlCLEVBQUViLFdBQVcsVUFBVSxFQUFFOEIsaUJBQWlCLGFBQWEsQ0FBQztZQUMxRjtZQUVBL0IsYUFBYWdDO1FBQ2Y7SUFDRjtJQUVBQywwQkFBMEI3RCxVQUFVLFNBQVU4RCxJQUFJLEVBQUV2RCxPQUFPLEVBQUVxQixZQUFZO1FBQ3ZFLE1BQU1DLGFBQWEsSUFBSSxDQUFDQyxTQUFTLElBQzNCaUMsYUFBYUQsS0FBS2hDLFNBQVMsSUFDM0I2QixtQkFBbUIsSUFBSSxDQUFDN0MsVUFBVSxDQUFDZ0IsU0FBUztRQUVsRHZCLFFBQVF3QixLQUFLLENBQUMsQ0FBQyxjQUFjLEVBQUVnQyxXQUFXLGlCQUFpQixFQUFFbEMsV0FBVyxVQUFVLEVBQUU4QixpQkFBaUIsZUFBZSxDQUFDO1FBRXJILElBQUksQ0FBQzdDLFVBQVUsQ0FBQ2tELFNBQVMsQ0FBQ0YsTUFBTXZELFNBQVMsQ0FBQzBEO1lBQ3hDLElBQUlDLDRCQUE0QjtZQUVoQyxJQUFJRCxhQUFhO2dCQUNmQyw0QkFBNEI7WUFDOUI7WUFFQSxJQUFJQSwyQkFBMkI7Z0JBQzdCM0QsUUFBUW1DLEtBQUssQ0FBQyxDQUFDLGdCQUFnQixFQUFFcUIsV0FBVyxpQkFBaUIsRUFBRWxDLFdBQVcsVUFBVSxFQUFFOEIsaUJBQWlCLGFBQWEsQ0FBQztZQUN2SDtZQUVBL0IsYUFBYXNDO1FBQ2Y7SUFDRixHQUFHO0lBRUhDLHNDQUFzQ0wsSUFBSSxFQUFFTSx5QkFBeUIsRUFBRTdELE9BQU8sRUFBRXFCLFlBQVksRUFBRTtRQUM1RixJQUFJLENBQUNpQyx1QkFBdUIsQ0FBQ0MsTUFBTXZELFNBQVMsQ0FBQzhEO1lBQzNDLElBQUksQ0FBQ0EsZ0NBQWdDO2dCQUNuQyxNQUFNQyx3Q0FBd0M7Z0JBRTlDMUMsYUFBYTBDO2dCQUViO1lBQ0Y7WUFFQSxJQUFJLENBQUNDLDBDQUEwQyxDQUFDSCwyQkFBMkI3RCxTQUFTLENBQUNpRTtnQkFDbkYsSUFBSUYsd0NBQXdDO2dCQUU1QyxJQUFJRSw4Q0FBOEM7b0JBQ2hELE1BQU1DLCtCQUErQmxFLFFBQVFtRSwrQkFBK0I7b0JBRTVFLElBQUlELDhCQUE4Qjt3QkFDaENILHdDQUF3QztvQkFDMUM7Z0JBQ0Y7Z0JBRUExQyxhQUFhMEM7WUFDZjtRQUNGO0lBQ0Y7SUFFQUssMENBQTBDUCx5QkFBeUIsRUFBRWhCLE9BQU8sRUFBRTdDLE9BQU8sRUFBRXFCLFlBQVksRUFBRTtRQUNuR2hDLFFBQVF3RSwyQkFBMkIsQ0FBQ2IsMEJBQTBCM0I7WUFDNUR3QixRQUFRd0IsNkJBQTZCLENBQUNyQiwwQkFBMEJoRCxTQUFTcUI7UUFDM0UsR0FBRyxDQUFDMkI7WUFDRixJQUFJQSw2QkFBNkIsTUFBTTtnQkFDckMsTUFBTXNCLDhDQUE4QztnQkFFcERqRCxhQUFhaUQ7Z0JBRWI7WUFDRjtZQUVBekIsUUFBUTBCLGtCQUFrQixDQUFDdkUsU0FBU3FCO1FBQ3RDO0lBQ0Y7SUFFQTJDLDJDQUEyQ0gseUJBQXlCLEVBQUU3RCxPQUFPLEVBQUVxQixZQUFZLEVBQUU7UUFDM0Z3Qyw0QkFBNEIzRSxRQUFRMkUsNEJBQTRCLEdBQUc7UUFFbkV0RSxlQUFlLElBQUksQ0FBQ2UsUUFBUSxFQUFFLENBQUN1QyxTQUFTeEI7WUFDdEMsSUFBSSxDQUFDK0MseUNBQXlDLENBQUNQLDJCQUEyQmhCLFNBQVM3QyxTQUFTcUI7UUFDOUYsR0FBR0E7SUFDTDtJQUVBbUQsU0FBUztRQUNQLE1BQU1DLGFBQWFDLElBQUFBLHdCQUFrQixFQUFDLElBQUksQ0FBQ3JFLE1BQU0sR0FDM0NzRSxlQUFlQyxJQUFBQSw0QkFBc0IsRUFBQyxJQUFJLENBQUN0RSxRQUFRLEdBQ25EdUUsaUJBQWlCQyxJQUFBQSxnQ0FBMEIsRUFBQyxJQUFJLENBQUN2RSxVQUFVLEdBQzNETixTQUFTLElBQUksQ0FBQ3NCLFNBQVM7UUFFN0IsSUFBSXBCO1FBRUpBLGFBQWEsSUFBSSxDQUFDNEUsYUFBYTtRQUUvQixNQUFNQyxpQkFBaUJyRiwyQkFBMkJRO1FBRWxEQSxhQUFhNkUsZ0JBQWlCLEdBQUc7UUFFakMsTUFBTTNFLFNBQVNvRSxZQUNUbkUsV0FBV3FFLGNBQ1hwRSxhQUFhc0UsZ0JBQ2JJLE9BQU87WUFDTGhGO1lBQ0FFO1lBQ0FFO1lBQ0FDO1lBQ0FDO1FBQ0Y7UUFFTixPQUFPMEU7SUFDVDtJQUVBLE9BQU9DLE9BQU8sT0FBTztJQUVyQixPQUFPQyxTQUFTRixJQUFJLEVBQUVqRixPQUFPLEVBQUU7UUFDN0IsTUFBTSxFQUFFQyxNQUFNLEVBQUUsR0FBR2dGLE1BQ2IvRSxPQUFPLE1BQ1BDLGFBQWFULG1CQUFtQnVGLE9BQ2hDNUUsU0FBUytFLElBQUFBLG9CQUFjLEVBQUNILE1BQU1qRixVQUM5Qk0sV0FBVytFLElBQUFBLHNCQUFnQixFQUFDSixNQUFNakYsVUFDbENPLGFBQWErRSxJQUFBQSx3QkFBa0IsRUFBQ0wsTUFBTWpGLFVBQ3RDSSxRQUFRLE1BQ1I2QixPQUFPLElBQUluQyxLQUFLRSxTQUFTQyxRQUFRQyxNQUFNQyxZQUFZQyxPQUFPQyxRQUFRQyxVQUFVQztRQUVsRixPQUFPMEI7SUFDVDtBQUNGIn0=
216
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9lbGVtZW50L3J1bGUuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IGFycmF5VXRpbGl0aWVzIH0gZnJvbSBcIm5lY2Vzc2FyeVwiO1xuaW1wb3J0IHsgRWxlbWVudCwgYnJlYWtQb2ludFV0aWxpdGllcywgY29udGludWF0aW9uVXRpbGl0aWVzIH0gZnJvbSBcIm9jY2FtLWxhbmd1YWdlc1wiO1xuXG5pbXBvcnQgeyBhbGwgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2NvbnRpbnVhdGlvblwiO1xuaW1wb3J0IHsgZGVmaW5lIH0gZnJvbSBcIi4uL2VsZW1lbnRzXCI7XG5pbXBvcnQgeyBlbmNsb3NlIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9jb250ZXh0XCI7XG5pbXBvcnQgeyBsYWJlbHNGcm9tSlNPTiwgcHJlbWlzZXNGcm9tSlNPTiwgY29uY2x1c2lvbkZyb21KU09OLCBsYWJlbHNUb0xhYmVsc0pTT04sIHByZW1pc2VzVG9QcmVtaXNlc0pTT04sIGNvbmNsdXNpb25Ub0NvbmNsdXNpb25KU09OIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9qc29uXCI7XG5cbmNvbnN0IHsgcmV2ZXJzZSB9ID0gYXJyYXlVdGlsaXRpZXMsXG4gICAgICB7IGV2ZXJ5LCBleHRyYWN0LCBmb3J3YXJkc0V2ZXJ5LCBiYWNrd2FyZHNFdmVyeSB9ID0gY29udGludWF0aW9uVXRpbGl0aWVzLFxuICAgICAgeyBicmVha2FibGUsIGJyZWFrUG9pbnRGcm9tSlNPTiwgYnJlYWtQb2ludFRvQnJlYWtQb2ludEpTT04gfSA9IGJyZWFrUG9pbnRVdGlsaXRpZXM7XG5cbmV4cG9ydCBkZWZhdWx0IGRlZmluZShjbGFzcyBSdWxlIGV4dGVuZHMgRWxlbWVudCB7XG4gIGNvbnN0cnVjdG9yKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgcHJvb2YsIGxhYmVscywgcHJlbWlzZXMsIGNvbmNsdXNpb24pIHtcbiAgICBzdXBlcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQpO1xuXG4gICAgdGhpcy5wcm9vZiA9IHByb29mO1xuICAgIHRoaXMubGFiZWxzID0gbGFiZWxzO1xuICAgIHRoaXMucHJlbWlzZXMgPSBwcmVtaXNlcztcbiAgICB0aGlzLmNvbmNsdXNpb24gPSBjb25jbHVzaW9uO1xuICB9XG5cbiAgZ2V0TGFiZWxzKCkge1xuICAgIHJldHVybiB0aGlzLmxhYmVscztcbiAgfVxuXG4gIGdldFByZW1pc2VzKCkge1xuICAgIHJldHVybiB0aGlzLnByZW1pc2VzO1xuICB9XG5cbiAgZ2V0UHJvb2YoKSB7XG4gICAgcmV0dXJuIHRoaXMucHJvb2Y7XG4gIH1cblxuICBnZXRDb25jbHVzaW9uKCkge1xuICAgIHJldHVybiB0aGlzLmNvbmNsdXNpb247XG4gIH1cblxuICBnZXRSdWxlTm9kZSgpIHtcbiAgICBjb25zdCBub2RlID0gdGhpcy5nZXROb2RlKCksXG4gICAgICAgICAgcnVsZU5vZGUgPSBub2RlOyAgLy8vXG5cbiAgICByZXR1cm4gcnVsZU5vZGU7XG4gIH1cblxuICBtYXRjaE1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSkge1xuICAgIGNvbnN0IG1ldGF2YXJpYWJsZU5vZGVNYXRjaGVzID0gdGhpcy5sYWJlbHMuc29tZSgobGFiZWwpID0+IHtcbiAgICAgIGNvbnN0IG1ldGF2YXJpYWJsZU5vZGVNYXRjaGVzID0gbGFiZWwubWF0Y2hNZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpO1xuXG4gICAgICBpZiAobWV0YXZhcmlhYmxlTm9kZU1hdGNoZXMpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gbWV0YXZhcmlhYmxlTm9kZU1hdGNoZXM7XG4gIH1cblxuICB2ZXJpZnkgPSBicmVha2FibGUoZnVuY3Rpb24gKGNvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICAgIGNvbnN0IHJ1bGVTdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFZlcmlmeWluZyB0aGUgJyR7cnVsZVN0cmluZ30nIHJ1bGUuLi5gKTtcblxuICAgIGVuY2xvc2UoKGNvbnRleHQpID0+IHtcbiAgICAgIGNvbnN0IHZlcmlmeVByb29mID0gdGhpcy52ZXJpZnlQcm9vZi5iaW5kKHRoaXMpLFxuICAgICAgICAgICAgdmVyaWZ5TGFiZWxzID0gdGhpcy52ZXJpZnlMYWJlbHMuYmluZCh0aGlzKSxcbiAgICAgICAgICAgIHZlcmlmeVByZW1pc2VzID0gdGhpcy52ZXJpZnlQcmVtaXNlcy5iaW5kKHRoaXMpLFxuICAgICAgICAgICAgdmVyaWZ5Q29uY2x1c2lvbiA9IHRoaXMudmVyaWZ5Q29uY2x1c2lvbi5iaW5kKHRoaXMpO1xuXG4gICAgICBhbGwoW1xuICAgICAgICB2ZXJpZnlMYWJlbHMsXG4gICAgICAgIHZlcmlmeVByZW1pc2VzLFxuICAgICAgICB2ZXJpZnlDb25jbHVzaW9uLFxuICAgICAgICB2ZXJpZnlQcm9vZlxuICAgICAgXSwgY29udGV4dCwgKHZlcmlmaWVzKSA9PiB7XG4gICAgICAgIGlmICh2ZXJpZmllcykge1xuICAgICAgICAgIGNvbnN0IHJ1bGUgPSB0aGlzOyAgLy8vXG5cbiAgICAgICAgICBjb250ZXh0LmFkZFJ1bGUocnVsZSk7XG5cbiAgICAgICAgICBjb250ZXh0LmRlYnVnKGAuLi52ZXJpZmllZCB0aGUgJyR7cnVsZVN0cmluZ30nIHJ1bGUuYCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gY29udGludWF0aW9uKHZlcmlmaWVzKTtcbiAgICAgIH0pO1xuICAgIH0sIGNvbnRleHQpO1xuICB9KTtcblxuICB2ZXJpZnlMYWJlbChsYWJlbCwgY29udGV4dCwgY29udGludWF0aW9uKSB7XG4gICAgY29uc3QgcnVsZVN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCksICAvLy9cbiAgICAgICAgICBsYWJlbFN0cmluZyA9IGxhYmVsLmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgVmVyaWZ5aW5nIHRoZSAnJHtydWxlU3RyaW5nfScgcnVsZSdzICcke2xhYmVsU3RyaW5nfScgbGFiZWwuLi5gKTtcblxuICAgIGxhYmVsLnZlcmlmeSgobGFiZWxWZXJpZmllcykgPT4ge1xuICAgICAgaWYgKGxhYmVsVmVyaWZpZXMpIHtcbiAgICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmVyaWZpZWQgdGhlICcke3J1bGVTdHJpbmd9JyBydWxlJ3MgJyR7bGFiZWxTdHJpbmd9JyBsYWJlbC5gKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihsYWJlbFZlcmlmaWVzKTtcbiAgICB9KTtcbiAgfVxuXG4gIHZlcmlmeVByb29mKGNvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICAgIGlmICh0aGlzLnByb29mID09PSBudWxsKSB7XG4gICAgICBjb25zdCBwcm9vZlZlcmlmaWVzID0gdHJ1ZTtcblxuICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihwcm9vZlZlcmlmaWVzKTtcbiAgICB9XG5cbiAgICBjb25zdCBydWxlU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgIC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVmVyaWZ5aW5nIHRoZSAnJHtydWxlU3RyaW5nfScgcnVsZSdzIHByb29mLi4uYCk7XG5cbiAgICBjb25zdCBzdGF0ZW1lbnQgPSB0aGlzLmNvbmNsdXNpb24uZ2V0U3RhdGVtZW50KCk7XG5cbiAgICB0aGlzLnByb29mLnZlcmlmeShzdGF0ZW1lbnQsIGNvbnRleHQsIChwcm9vZlZlcmlmaWVzKSA9PiB7XG4gICAgICBpZiAocHJvb2ZWZXJpZmllcykge1xuICAgICAgICBjb250ZXh0LmRlYnVnKGAuLi52ZXJpZmllZCB0aGUgJyR7cnVsZVN0cmluZ30nIHJ1bGUncyBwcm9vZi5gKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihwcm9vZlZlcmlmaWVzKTtcbiAgICB9KTtcbiAgfVxuXG4gIHZlcmlmeUxhYmVscyhjb250ZXh0LCBjb25udGludWF0aW9uKSB7XG4gICAgY29uc3QgcnVsZVN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7ICAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFZlcmlmeWluZyB0aGUgJyR7cnVsZVN0cmluZ30nIHJ1bGUncyBsYWJlbHMuLi5gKTtcblxuICAgIGV2ZXJ5KHRoaXMubGFiZWxzLCAobGFiZWwsIGNvbnRpbnVhdGlvbikgPT4ge1xuICAgICAgdGhpcy52ZXJpZnlMYWJlbChsYWJlbCwgY29udGV4dCwgY29udGludWF0aW9uKTtcbiAgICB9LCAobGFiZWxzVmVyaWZ5KSA9PiB7XG4gICAgICBpZiAobGFiZWxzVmVyaWZ5KSB7XG4gICAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZlcmlmaWVkIHRoZSAnJHtydWxlU3RyaW5nfScgcnVsZSdzIGxhYmVscy5gKTtcbiAgICAgIH1cblxuICAgICAgY29ubnRpbnVhdGlvbihsYWJlbHNWZXJpZnkpO1xuICAgIH0pO1xuICB9XG5cbiAgdmVyaWZ5UHJlbWlzZShwcmVtaXNlLCBjb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgICBjb25zdCBydWxlU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKSwgIC8vL1xuICAgICAgICAgIHByZW1pc2VTdHJpbmcgPSBwcmVtaXNlLmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgVmVyaWZ5aW5nIHRoZSAnJHtydWxlU3RyaW5nfScgcnVsZSdzICcke3ByZW1pc2VTdHJpbmd9JyBwcmVtaXNlLi4uYCk7XG5cbiAgICBwcmVtaXNlLnZlcmlmeShjb250ZXh0LCAocHJlbWlzZVZlcmlmaWVzKSA9PiB7XG4gICAgICBpZiAocHJlbWlzZVZlcmlmaWVzKSB7XG4gICAgICAgIGNvbnN0IHN1YnByb29mT3JQcm9vZkFzc2VydGlvbiA9IHByZW1pc2U7ICAvLy8vXG5cbiAgICAgICAgY29udGV4dC5hc3NpZ25Bc3NpZ25tZW50cygpO1xuXG4gICAgICAgIGNvbnRleHQuYWRkU3VicHJvb2ZPclByb29mQXNzZXJ0aW9uKHN1YnByb29mT3JQcm9vZkFzc2VydGlvbik7XG4gICAgICB9XG5cbiAgICAgIGlmIChwcmVtaXNlVmVyaWZpZXMpIHtcbiAgICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmVyaWZpZWQgdGhlICcke3J1bGVTdHJpbmd9JyBydWxlJ3MgJyR7cHJlbWlzZVN0cmluZ30nIHByZW1pc2UuYCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjb250aW51YXRpb24ocHJlbWlzZVZlcmlmaWVzKTtcbiAgICB9KTtcbiAgfVxuXG4gIHZlcmlmeVByZW1pc2VzKGNvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICAgIGNvbnN0IHJ1bGVTdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWZXJpZnlpbmcgdGhlICcke3J1bGVTdHJpbmd9JyBydWxlJ3MgcHJlbWlzZXMuLi5gKTtcblxuICAgIGZvcndhcmRzRXZlcnkodGhpcy5wcmVtaXNlcywgKHByZW1pc2UsIGNvbnRpbnVhdGlvbikgPT4ge1xuICAgICAgdGhpcy52ZXJpZnlQcmVtaXNlKHByZW1pc2UsIGNvbnRleHQsIGNvbnRpbnVhdGlvbik7XG4gICAgfSwgKHByZW1pc2VzVmVyaWZ5KSA9PiB7XG4gICAgICBpZiAocHJlbWlzZXNWZXJpZnkpIHtcbiAgICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmVyaWZpZWQgdGhlICcke3J1bGVTdHJpbmd9JyBydWxlJ3MgcHJlbWlzZXMuYCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjb250aW51YXRpb24ocHJlbWlzZXNWZXJpZnkpO1xuICAgIH0pO1xuICB9XG5cbiAgdmVyaWZ5Q29uY2x1c2lvbihjb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgICBjb25zdCBydWxlU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKSwgIC8vL1xuICAgICAgICAgIGNvbmNsdXNpb25TdHJpbmcgPSB0aGlzLmNvbmNsdXNpb24uZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBWZXJpZnlpbmcgdGhlICcke3J1bGVTdHJpbmd9JyBydWxlJ3MgJyR7Y29uY2x1c2lvblN0cmluZ30nIGNvbmNsdXNpb24uLi5gKTtcblxuICAgIHRoaXMuY29uY2x1c2lvbi52ZXJpZnkoY29udGV4dCwgKGNvbmNsdXNpb25WZXJpZmllcykgPT4ge1xuICAgICAgaWYgKGNvbmNsdXNpb25WZXJpZmllcykge1xuICAgICAgICBjb250ZXh0LmRlYnVnKGAuLi52ZXJpZmllZCB0aGUgJyR7cnVsZVN0cmluZ30nIHJ1bGUncyAnJHtjb25jbHVzaW9uU3RyaW5nfScgY29uY2x1c2lvbi5gKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihjb25jbHVzaW9uVmVyaWZpZXMpO1xuICAgIH0pO1xuICB9XG5cbiAgdW5pZnlTdGVwV2l0aENvbmNsdXNpb24gPSBicmVha2FibGUoZnVuY3Rpb24gKHN0ZXAsIGNvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICAgIGNvbnN0IHJ1bGVTdHJpbmcgPSB0aGlzLmdldFN0cmluZygpLFxuICAgICAgICAgIHN0ZXBTdHJpbmcgPSBzdGVwLmdldFN0cmluZygpLFxuICAgICAgICAgIGNvbmNsdXNpb25TdHJpbmcgPSB0aGlzLmNvbmNsdXNpb24uZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBVbmlmeWluZyB0aGUgJyR7c3RlcFN0cmluZ30nIHN0ZXAgd2l0aCB0aGUgJyR7cnVsZVN0cmluZ30nIHJ1bGUncyAnJHtjb25jbHVzaW9uU3RyaW5nfScgY29uY2x1c2lvbi4uLmApO1xuXG4gICAgdGhpcy5jb25jbHVzaW9uLnVuaWZ5U3RlcChzdGVwLCBjb250ZXh0LCAoc3RlcFVuaWZpZXMpID0+IHtcbiAgICAgIGxldCBzdGVwVW5pZmllc1dpdGhDb25jbHVzaW9uID0gZmFsc2U7XG5cbiAgICAgIGlmIChzdGVwVW5pZmllcykge1xuICAgICAgICBzdGVwVW5pZmllc1dpdGhDb25jbHVzaW9uID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKHN0ZXBVbmlmaWVzV2l0aENvbmNsdXNpb24pIHtcbiAgICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udW5pZmllZCB0aGUgJyR7c3RlcFN0cmluZ30nIHN0ZXAgd2l0aCB0aGUgJyR7cnVsZVN0cmluZ30nIHJ1bGUncyAnJHtjb25jbHVzaW9uU3RyaW5nfScgY29uY2x1c2lvbi5gKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihzdGVwVW5pZmllc1dpdGhDb25jbHVzaW9uKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgdW5pZnlTdGVwQW5kU3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucyhzdGVwLCBzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zLCBjb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgICB0aGlzLnVuaWZ5U3RlcFdpdGhDb25jbHVzaW9uKHN0ZXAsIGNvbnRleHQsIChzdGF0ZW1lbnRVbmlmaWVzV2l0aENvbmNsdXNpb24pID0+IHtcbiAgICAgIGlmICghc3RhdGVtZW50VW5pZmllc1dpdGhDb25jbHVzaW9uKSB7XG4gICAgICAgIGNvbnN0IHN0ZXBBbmRTdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zVW5pZnkgPSBmYWxzZTtcblxuICAgICAgICByZXR1cm4gY29udGludWF0aW9uKHN0ZXBBbmRTdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zVW5pZnkpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnVuaWZ5U3VicHJvb2ZPclByb29mQXNzZXJ0aW9uc1dpdGhQcmVtaXNlcyhzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zLCBjb250ZXh0LCAoc3VicHJvb2ZPclByb29mQXNzZXJ0aW9uc1VuaWZpZXNXaXRoUHJlbWlzZXMpID0+IHtcbiAgICAgICAgbGV0IHN0ZXBBbmRTdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zVW5pZnkgPSBmYWxzZTtcblxuICAgICAgICBpZiAoc3VicHJvb2ZPclByb29mQXNzZXJ0aW9uc1VuaWZpZXNXaXRoUHJlbWlzZXMpIHtcbiAgICAgICAgICBjb25zdCBkZXJpdmVkU3Vic3RpdHV0aW9uc1Jlc29sdmVkID0gY29udGV4dC5hcmVEZXJpdmVkU3Vic3RpdHV0aW9uc1Jlc29sdmVkKCk7XG5cbiAgICAgICAgICBpZiAoZGVyaXZlZFN1YnN0aXR1dGlvbnNSZXNvbHZlZCkge1xuICAgICAgICAgICAgc3RlcEFuZFN1YnByb29mT3JQcm9vZkFzc2VydGlvbnNVbmlmeSA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihzdGVwQW5kU3VicHJvb2ZPclByb29mQXNzZXJ0aW9uc1VuaWZ5KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgdW5pZnlTdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zV2l0aFByZW1pc2Uoc3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucywgcHJlbWlzZSwgY29udGV4dCwgY29udGludWF0aW9uKSB7XG4gICAgZXh0cmFjdChzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zLCAoc3VicHJvb2ZPclByb29mQXNzZXJ0aW9uLCBjb250aW51YXRpb24pID0+IHtcbiAgICAgIHByZW1pc2UudW5pZnlTdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb24oc3VicHJvb2ZPclByb29mQXNzZXJ0aW9uLCBjb250ZXh0LCBjb250aW51YXRpb24pO1xuICAgIH0sIChzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb24pID0+IHtcbiAgICAgIGlmIChzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb24gIT09IG51bGwpIHtcbiAgICAgICAgY29uc3Qgc3VicHJvb2ZPclByb29mQXNzZXJ0aW9uc1VuaWZpZXNXaXRoUHJlbWlzZSA9IHRydWU7XG5cbiAgICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zVW5pZmllc1dpdGhQcmVtaXNlKTtcbiAgICAgIH1cblxuICAgICAgcHJlbWlzZS51bmlmeUluZGVwZW5kZW50bHkoY29udGV4dCwgY29udGludWF0aW9uKTtcbiAgICB9KTtcbiAgfVxuXG4gIHVuaWZ5U3VicHJvb2ZPclByb29mQXNzZXJ0aW9uc1dpdGhQcmVtaXNlcyhzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zLCBjb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgICBzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zID0gcmV2ZXJzZShzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zKTsgLy8vXG5cbiAgICBiYWNrd2FyZHNFdmVyeSh0aGlzLnByZW1pc2VzLCAocHJlbWlzZSwgY29udGludWF0aW9uKSA9PiB7XG4gICAgICB0aGlzLnVuaWZ5U3VicHJvb2ZPclByb29mQXNzZXJ0aW9uc1dpdGhQcmVtaXNlKHN1YnByb29mT3JQcm9vZkFzc2VydGlvbnMsIHByZW1pc2UsIGNvbnRleHQsIGNvbnRpbnVhdGlvbik7XG4gICAgfSwgY29udGludWF0aW9uKTtcbiAgfVxuXG4gIHRvSlNPTigpIHtcbiAgICBjb25zdCBsYWJlbHNKU09OID0gbGFiZWxzVG9MYWJlbHNKU09OKHRoaXMubGFiZWxzKSxcbiAgICAgICAgICBwcmVtaXNlc0pTT04gPSBwcmVtaXNlc1RvUHJlbWlzZXNKU09OKHRoaXMucHJlbWlzZXMpLFxuICAgICAgICAgIGNvbmNsdXNpb25KU09OID0gY29uY2x1c2lvblRvQ29uY2x1c2lvbkpTT04odGhpcy5jb25jbHVzaW9uKSxcbiAgICAgICAgICBzdHJpbmcgPSB0aGlzLmdldFN0cmluZygpO1xuXG4gICAgbGV0IGJyZWFrUG9pbnQ7XG5cbiAgICBicmVha1BvaW50ID0gdGhpcy5nZXRCcmVha1BvaW50KCk7XG5cbiAgICBjb25zdCBicmVha1BvaW50SlNPTiA9IGJyZWFrUG9pbnRUb0JyZWFrUG9pbnRKU09OKGJyZWFrUG9pbnQpO1xuXG4gICAgYnJlYWtQb2ludCA9IGJyZWFrUG9pbnRKU09OOyAgLy8vXG5cbiAgICBjb25zdCBsYWJlbHMgPSBsYWJlbHNKU09OLCAgLy8vXG4gICAgICAgICAgcHJlbWlzZXMgPSBwcmVtaXNlc0pTT04sICAvLy9cbiAgICAgICAgICBjb25jbHVzaW9uID0gY29uY2x1c2lvbkpTT04sICAvLy9cbiAgICAgICAgICBqc29uID0ge1xuICAgICAgICAgICAgc3RyaW5nLFxuICAgICAgICAgICAgYnJlYWtQb2ludCxcbiAgICAgICAgICAgIGxhYmVscyxcbiAgICAgICAgICAgIHByZW1pc2VzLFxuICAgICAgICAgICAgY29uY2x1c2lvblxuICAgICAgICAgIH07XG5cbiAgICByZXR1cm4ganNvbjtcbiAgfVxuXG4gIHN0YXRpYyBuYW1lID0gXCJSdWxlXCI7XG5cbiAgc3RhdGljIGZyb21KU09OKGpzb24sIGNvbnRleHQpIHtcbiAgICBjb25zdCB7IHN0cmluZyB9ID0ganNvbixcbiAgICAgICAgICBub2RlID0gbnVsbCxcbiAgICAgICAgICBicmVha1BvaW50ID0gYnJlYWtQb2ludEZyb21KU09OKGpzb24pLFxuICAgICAgICAgIGxhYmVscyA9IGxhYmVsc0Zyb21KU09OKGpzb24sIGNvbnRleHQpLFxuICAgICAgICAgIHByZW1pc2VzID0gcHJlbWlzZXNGcm9tSlNPTihqc29uLCBjb250ZXh0KSxcbiAgICAgICAgICBjb25jbHVzaW9uID0gY29uY2x1c2lvbkZyb21KU09OKGpzb24sIGNvbnRleHQpLFxuICAgICAgICAgIHByb29mID0gbnVsbCxcbiAgICAgICAgICBydWxlID0gbmV3IFJ1bGUoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBwcm9vZiwgbGFiZWxzLCBwcmVtaXNlcywgY29uY2x1c2lvbik7XG5cbiAgICByZXR1cm4gcnVsZTtcbiAgfVxufSk7XG4iXSwibmFtZXMiOlsicmV2ZXJzZSIsImFycmF5VXRpbGl0aWVzIiwiZXZlcnkiLCJleHRyYWN0IiwiZm9yd2FyZHNFdmVyeSIsImJhY2t3YXJkc0V2ZXJ5IiwiY29udGludWF0aW9uVXRpbGl0aWVzIiwiYnJlYWthYmxlIiwiYnJlYWtQb2ludEZyb21KU09OIiwiYnJlYWtQb2ludFRvQnJlYWtQb2ludEpTT04iLCJicmVha1BvaW50VXRpbGl0aWVzIiwiZGVmaW5lIiwiUnVsZSIsIkVsZW1lbnQiLCJjb250ZXh0Iiwic3RyaW5nIiwibm9kZSIsImJyZWFrUG9pbnQiLCJwcm9vZiIsImxhYmVscyIsInByZW1pc2VzIiwiY29uY2x1c2lvbiIsImdldExhYmVscyIsImdldFByZW1pc2VzIiwiZ2V0UHJvb2YiLCJnZXRDb25jbHVzaW9uIiwiZ2V0UnVsZU5vZGUiLCJnZXROb2RlIiwicnVsZU5vZGUiLCJtYXRjaE1ldGF2YXJpYWJsZU5vZGUiLCJtZXRhdmFyaWFibGVOb2RlIiwibWV0YXZhcmlhYmxlTm9kZU1hdGNoZXMiLCJzb21lIiwibGFiZWwiLCJ2ZXJpZnkiLCJjb250aW51YXRpb24iLCJydWxlU3RyaW5nIiwiZ2V0U3RyaW5nIiwidHJhY2UiLCJlbmNsb3NlIiwidmVyaWZ5UHJvb2YiLCJiaW5kIiwidmVyaWZ5TGFiZWxzIiwidmVyaWZ5UHJlbWlzZXMiLCJ2ZXJpZnlDb25jbHVzaW9uIiwiYWxsIiwidmVyaWZpZXMiLCJydWxlIiwiYWRkUnVsZSIsImRlYnVnIiwidmVyaWZ5TGFiZWwiLCJsYWJlbFN0cmluZyIsImxhYmVsVmVyaWZpZXMiLCJwcm9vZlZlcmlmaWVzIiwic3RhdGVtZW50IiwiZ2V0U3RhdGVtZW50IiwiY29ubnRpbnVhdGlvbiIsImxhYmVsc1ZlcmlmeSIsInZlcmlmeVByZW1pc2UiLCJwcmVtaXNlIiwicHJlbWlzZVN0cmluZyIsInByZW1pc2VWZXJpZmllcyIsInN1YnByb29mT3JQcm9vZkFzc2VydGlvbiIsImFzc2lnbkFzc2lnbm1lbnRzIiwiYWRkU3VicHJvb2ZPclByb29mQXNzZXJ0aW9uIiwicHJlbWlzZXNWZXJpZnkiLCJjb25jbHVzaW9uU3RyaW5nIiwiY29uY2x1c2lvblZlcmlmaWVzIiwidW5pZnlTdGVwV2l0aENvbmNsdXNpb24iLCJzdGVwIiwic3RlcFN0cmluZyIsInVuaWZ5U3RlcCIsInN0ZXBVbmlmaWVzIiwic3RlcFVuaWZpZXNXaXRoQ29uY2x1c2lvbiIsInVuaWZ5U3RlcEFuZFN1YnByb29mT3JQcm9vZkFzc2VydGlvbnMiLCJzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zIiwic3RhdGVtZW50VW5pZmllc1dpdGhDb25jbHVzaW9uIiwic3RlcEFuZFN1YnByb29mT3JQcm9vZkFzc2VydGlvbnNVbmlmeSIsInVuaWZ5U3VicHJvb2ZPclByb29mQXNzZXJ0aW9uc1dpdGhQcmVtaXNlcyIsInN1YnByb29mT3JQcm9vZkFzc2VydGlvbnNVbmlmaWVzV2l0aFByZW1pc2VzIiwiZGVyaXZlZFN1YnN0aXR1dGlvbnNSZXNvbHZlZCIsImFyZURlcml2ZWRTdWJzdGl0dXRpb25zUmVzb2x2ZWQiLCJ1bmlmeVN1YnByb29mT3JQcm9vZkFzc2VydGlvbnNXaXRoUHJlbWlzZSIsInVuaWZ5U3VicHJvb2ZPclByb29mQXNzZXJ0aW9uIiwic3VicHJvb2ZPclByb29mQXNzZXJ0aW9uc1VuaWZpZXNXaXRoUHJlbWlzZSIsInVuaWZ5SW5kZXBlbmRlbnRseSIsInRvSlNPTiIsImxhYmVsc0pTT04iLCJsYWJlbHNUb0xhYmVsc0pTT04iLCJwcmVtaXNlc0pTT04iLCJwcmVtaXNlc1RvUHJlbWlzZXNKU09OIiwiY29uY2x1c2lvbkpTT04iLCJjb25jbHVzaW9uVG9Db25jbHVzaW9uSlNPTiIsImdldEJyZWFrUG9pbnQiLCJicmVha1BvaW50SlNPTiIsImpzb24iLCJuYW1lIiwiZnJvbUpTT04iLCJsYWJlbHNGcm9tSlNPTiIsInByZW1pc2VzRnJvbUpTT04iLCJjb25jbHVzaW9uRnJvbUpTT04iXSwibWFwcGluZ3MiOiJBQUFBOzs7OytCQWNBOzs7ZUFBQTs7OzJCQVorQjtnQ0FDcUM7OEJBRWhEOzBCQUNHO3lCQUNDO3NCQUNxSDtBQUU3SSxNQUFNLEVBQUVBLE9BQU8sRUFBRSxHQUFHQyx5QkFBYyxFQUM1QixFQUFFQyxLQUFLLEVBQUVDLE9BQU8sRUFBRUMsYUFBYSxFQUFFQyxjQUFjLEVBQUUsR0FBR0MscUNBQXFCLEVBQ3pFLEVBQUVDLFNBQVMsRUFBRUMsa0JBQWtCLEVBQUVDLDBCQUEwQixF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
@@ -126,8 +126,7 @@ const _default = (0, _elements.define)(class Term extends _occamlanguages.Elemen
126
126
  if (validTerm !== null) {
127
127
  const term = validTerm; ///
128
128
  context.debug(`...the '${termString}' term is already valid.`);
129
- continuation(term, context);
130
- return;
129
+ return continuation(term, context);
131
130
  }
132
131
  let term = this;
133
132
  (0, _continuation.exists)(_validation.validateTerms, term, context, (termValidates)=>{
@@ -137,7 +136,7 @@ const _default = (0, _elements.define)(class Term extends _occamlanguages.Elemen
137
136
  } else {
138
137
  term = null;
139
138
  }
140
- continuation(term, context);
139
+ return continuation(term, context);
141
140
  });
142
141
  }
143
142
  validateGivenType(type, strict, context) {
@@ -241,4 +240,4 @@ const _default = (0, _elements.define)(class Term extends _occamlanguages.Elemen
241
240
  }
242
241
  });
243
242
 
244
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9lbGVtZW50L3Rlcm0uanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IGFycmF5VXRpbGl0aWVzIH0gZnJvbSBcIm5lY2Vzc2FyeVwiO1xuaW1wb3J0IHsgRWxlbWVudCwgYnJlYWtQb2ludFV0aWxpdGllcyB9IGZyb20gXCJvY2NhbS1sYW5ndWFnZXNcIjtcblxuaW1wb3J0IHsgZGVmaW5lIH0gZnJvbSBcIi4uL2VsZW1lbnRzXCI7XG5pbXBvcnQgeyBleGlzdHMgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2NvbnRpbnVhdGlvblwiO1xuaW1wb3J0IHsgaW5zdGFudGlhdGUgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2NvbnRleHRcIjtcbmltcG9ydCB7IGluc3RhbnRpYXRlVGVybSB9IGZyb20gXCIuLi9wcm9jZXNzL2luc3RhbnRpYXRlXCI7XG5pbXBvcnQgeyB2YXJpYWJsZXNGcm9tVGVybSB9IGZyb20gXCIuLi91dGlsaXRpZXMvZXF1aXZhbGVuY2VcIjtcbmltcG9ydCB7IHVuaWZ5VGVybUludHJpbnNpY2FsbHkgfSBmcm9tIFwiLi4vcHJvY2Vzcy91bmlmeVwiO1xuaW1wb3J0IHsgdmFsaWRhdGVUZXJtcywgdW5pZnlUZXJtV2l0aFByb3BlcnRpZXMgfSBmcm9tIFwiLi4vcHJvY2Vzcy92YWxpZGF0aW9uXCI7XG5pbXBvcnQgeyB0eXBlRnJvbUpTT04sIHR5cGVUb1R5cGVKU09OLCBwcm92aXNpb25hbEZyb21KU09OLCBwcm92aXNpb25hbFRvUHJvdmlzaW9uYWxKU09OIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9qc29uXCI7XG5cbmNvbnN0IHsgZmlsdGVyIH0gPSBhcnJheVV0aWxpdGllcyxcbiAgICAgIHsgYnJlYWtQb2ludEZyb21KU09OLCBicmVha1BvaW50VG9CcmVha1BvaW50SlNPTiB9ID0gYnJlYWtQb2ludFV0aWxpdGllcztcblxuZXhwb3J0IGRlZmF1bHQgZGVmaW5lKGNsYXNzIFRlcm0gZXh0ZW5kcyBFbGVtZW50IHtcbiAgY29uc3RydWN0b3IoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCB0eXBlLCBwcm92aXNpb25hbCkge1xuICAgIHN1cGVyKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgcHJvdmlzaW9uYWwpO1xuXG4gICAgdGhpcy50eXBlID0gdHlwZTtcbiAgICB0aGlzLnByb3Zpc2lvbmFsID0gcHJvdmlzaW9uYWw7XG4gIH1cblxuICBnZXRUeXBlKCkge1xuICAgIHJldHVybiB0aGlzLnR5cGU7XG4gIH1cblxuICBpc1Byb3Zpc2lvbmFsKCkge1xuICAgIHJldHVybiB0aGlzLnByb3Zpc2lvbmFsO1xuICB9XG5cbiAgc2V0VHlwZSh0eXBlKSB7XG4gICAgdGhpcy50eXBlID0gdHlwZTtcbiAgfVxuXG4gIHNldFByb3Zpc2lvbmFsKHByb3Zpc2lvbmFsKSB7XG4gICAgdGhpcy5wcm92aXNpb25hbCA9IHByb3Zpc2lvbmFsO1xuICB9XG5cbiAgZ2V0VGVybU5vZGUoKSB7XG4gICAgY29uc3Qgbm9kZSA9IHRoaXMuZ2V0Tm9kZSgpLFxuICAgICAgICAgIHRlcm1Ob2RlID0gbm9kZTsgIC8vL1xuXG4gICAgcmV0dXJuIHRlcm1Ob2RlO1xuICB9XG5cbiAgZ2V0VmFyaWFibGVOb2RlKCkge1xuICAgIGNvbnN0IHRlcm1Ob2RlID0gdGhpcy5nZXRUZXJtTm9kZSgpLFxuICAgICAgICAgIHZhcmlhYmxlTm9kZSA9IHRlcm1Ob2RlLmdldFZhcmlhYmxlTm9kZSgpO1xuXG4gICAgcmV0dXJuIHZhcmlhYmxlTm9kZTtcbiAgfVxuXG4gIGdldFZhcmlhYmxlSWRlbnRpZmllcigpIHtcbiAgICBjb25zdCB0ZXJtTm9kZSA9IHRoaXMuZ2V0VGVybU5vZGUoKSxcbiAgICAgICAgICB2YXJpYWJsZUlkZW50aWZpZXIgPSB0ZXJtTm9kZS5nZXRWYXJpYWJsZUlkZW50aWZpZXIoKTtcblxuICAgIHJldHVybiB2YXJpYWJsZUlkZW50aWZpZXI7XG4gIH1cblxuICBpc0VzdGFibGlzaGVkKCkge1xuICAgIGNvbnN0IHByb3Zpc2lvbmFsID0gdGhpcy5pc1Byb3Zpc2lvbmFsKCksXG4gICAgICAgICAgZXN0YWJsaXNoZWQgPSAhcHJvdmlzaW9uYWw7XG5cbiAgICByZXR1cm4gZXN0YWJsaXNoZWQ7XG4gIH1cblxuICBpc0VxdWFsVG8odGVybSkge1xuICAgIGNvbnN0IHRlcm1Ob2RlID0gdGVybS5nZXROb2RlKCksXG4gICAgICAgICAgdGVybU5vZGVNYXRjaGVzID0gdGhpcy5tYXRjaFRlcm1Ob2RlKHRlcm1Ob2RlKSxcbiAgICAgICAgICBlcXVhbFRvID0gdGVybU5vZGVNYXRjaGVzOyAgLy8vXG5cbiAgICByZXR1cm4gZXF1YWxUbztcbiAgfVxuXG4gIGlzR3JvdW5kZWQoZGVmaW5lZFZhcmlhYmxlcywgY29udGV4dCkge1xuICAgIGNvbnN0IHRlcm0gID0gdGhpcywgLy8vXG4gICAgICAgICAgdmFyaWFibGVzID0gdmFyaWFibGVzRnJvbVRlcm0odGVybSwgY29udGV4dCk7XG5cbiAgICBmaWx0ZXIodmFyaWFibGVzLCAodmFyaWFibGUpID0+IHtcbiAgICAgIGNvbnN0IGRlZmluZWRWYXJpYWJsZXNJbmNsdWRlc1ZhcmlhYmxlID0gZGVmaW5lZFZhcmlhYmxlcy5pbmNsdWRlcyh2YXJpYWJsZSk7XG5cbiAgICAgIGlmICghZGVmaW5lZFZhcmlhYmxlc0luY2x1ZGVzVmFyaWFibGUpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBjb25zdCB1bmRlZmluZWRWYXJpYWJsZXMgPSB2YXJpYWJsZXMsIC8vL1xuICAgICAgICAgIHVuZGVmaW5lZFZhcmlhYmxlc0xlbmd0aCA9IHVuZGVmaW5lZFZhcmlhYmxlcy5sZW5ndGgsXG4gICAgICAgICAgZ3JvdW5kZWQgPSAodW5kZWZpbmVkVmFyaWFibGVzTGVuZ3RoIDw9IDEpO1xuXG4gICAgcmV0dXJuIGdyb3VuZGVkO1xuICB9XG5cbiAgaXNTaW5ndWxhcigpIHtcbiAgICBjb25zdCB0ZXJtTm9kZSA9IHRoaXMuZ2V0VGVybU5vZGUoKSxcbiAgICAgICAgICBzaW5ndWxhciA9IHRlcm1Ob2RlLmlzU2luZ3VsYXIoKTtcblxuICAgIHJldHVybiBzaW5ndWxhcjtcbiAgfVxuXG4gIGlzSW5pdGlhbGx5R3JvdW5kZWQoY29udGV4dCkge1xuICAgIGNvbnN0IHRlcm0gID0gdGhpcywgLy8vXG4gICAgICAgICAgdmFyaWFibGVzID0gdmFyaWFibGVzRnJvbVRlcm0odGVybSwgY29udGV4dCksXG4gICAgICAgICAgdmFyaWFibGVzTGVuZ3RoID0gdmFyaWFibGVzLmxlbmd0aCxcbiAgICAgICAgICBpbml0aWFsbHlHcm91bmRlZCA9ICh2YXJpYWJsZXNMZW5ndGggPT09IDApO1xuXG4gICAgcmV0dXJuIGluaXRpYWxseUdyb3VuZGVkO1xuICB9XG5cbiAgaXNJbXBsaWNpdGx5R3JvdW5kZWQoZGVmaW5lZFZhcmlhYmxlcywgY29udGV4dCkge1xuICAgIGNvbnN0IGdyb3VuZGVkID0gdGhpcy5pc0dyb3VuZGVkKGRlZmluZWRWYXJpYWJsZXMsIGNvbnRleHQpLFxuICAgICAgICAgIGltcGxpY2l0bHlHcm91bmRlZCA9IGdyb3VuZGVkOyAgLy8vXG5cbiAgICByZXR1cm4gaW1wbGljaXRseUdyb3VuZGVkO1xuICB9XG5cbiAgbWF0Y2hUZXJtTm9kZSh0ZXJtTm9kZSkge1xuICAgIGNvbnN0IG5vZGUgPSB0ZXJtTm9kZSwgLy8vXG4gICAgICAgICAgbm9kZU1hdGNoZXMgPSB0aGlzLm1hdGNoTm9kZShub2RlKSxcbiAgICAgICAgICB0ZXJtTm9kZU1hdGNoZXMgPSBub2RlTWF0Y2hlczsgLy8vXG5cbiAgICByZXR1cm4gdGVybU5vZGVNYXRjaGVzO1xuICB9XG5cbiAgbWF0Y2hWYXJpYWJsZU5vZGUodmFyaWFibGVOb2RlKSB7XG4gICAgbGV0IHZhcmlhYmxlTm9kZU1hdGNoZXMgPSBmYWxzZTtcblxuICAgIGNvbnN0IHNpbmd1bGFyID0gdGhpcy5pc1Npbmd1bGFyKCk7XG5cbiAgICBpZiAoc2luZ3VsYXIpIHtcbiAgICAgIGNvbnN0IHZhcmlhYmxlTm9kZUEgPSB2YXJpYWJsZU5vZGU7IC8vL1xuXG4gICAgICB2YXJpYWJsZU5vZGUgPSB0aGlzLmdldFZhcmlhYmxlTm9kZSgpO1xuXG4gICAgICBjb25zdCB2YXJpYWJsZU5vZGVCID0gdmFyaWFibGVOb2RlLCAvLy9cbiAgICAgICAgICAgIHZhcmlhYmxlTm9kZUFNYXRjaGVzVmFyaWFibGVOb2RlQiA9IHZhcmlhYmxlTm9kZUEubWF0Y2godmFyaWFibGVOb2RlQik7XG5cbiAgICAgIGlmICh2YXJpYWJsZU5vZGVBTWF0Y2hlc1ZhcmlhYmxlTm9kZUIpIHtcbiAgICAgICAgdmFyaWFibGVOb2RlTWF0Y2hlcyA9IHRydWU7IC8vL1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB2YXJpYWJsZU5vZGVNYXRjaGVzO1xuICB9XG5cbiAgY29tcGFyZVRlcm0odGVybSkge1xuICAgIGNvbnN0IHRlcm1Ob2RlID0gdGVybS5nZXROb2RlKCksXG4gICAgICAgICAgdGVybU5vZGVNYXRjaGVzID0gdGhpcy5tYXRjaE5vZGUodGVybU5vZGUpLFxuICAgICAgICAgIGNvbXBhcmVzVG8gPSB0ZXJtTm9kZU1hdGNoZXM7IC8vL1xuXG4gICAgcmV0dXJuIGNvbXBhcmVzVG87XG4gIH1cblxuICBjb21wYXJlUGFyYW1ldGVyKHBhcmFtZXRlcikge1xuICAgIGxldCBjb21wYXJlc1RvUGFyYW10ZXIgPSBmYWxzZTtcblxuICAgIGNvbnN0IHNpbmd1bGFyID0gdGhpcy5pc1Npbmd1bGFyKCk7XG5cbiAgICBpZiAoc2luZ3VsYXIpIHtcbiAgICAgIGNvbnN0IHBhcmFtZXRlcklkZW50aWZpZXIgPSBwYXJhbWV0ZXIuZ2V0SWRlbnRpZmllcigpO1xuXG4gICAgICBpZiAocGFyYW1ldGVySWRlbnRpZmllciAhPT0gbnVsbCkge1xuICAgICAgICBjb25zdCB2YXJpYWJsZUlkZW50aWZpZXIgPSB0aGlzLmdldFZhcmlhYmxlSWRlbnRpZmllcigpO1xuXG4gICAgICAgIGlmIChwYXJhbWV0ZXJJZGVudGlmaWVyID09PSB2YXJpYWJsZUlkZW50aWZpZXIpIHtcbiAgICAgICAgICBjb21wYXJlc1RvUGFyYW10ZXIgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbXBhcmVzVG9QYXJhbXRlcjtcbiAgfVxuXG4gIGZpbmRWYWxpZFRlcm0oY29udGV4dCkge1xuICAgIGNvbnN0IHRlcm1Ob2RlID0gdGhpcy5nZXRUZXJtTm9kZSgpLFxuICAgICAgICAgIHRlcm0gPSBjb250ZXh0LmZpbmRUZXJtQnlUZXJtTm9kZSh0ZXJtTm9kZSksXG4gICAgICAgICAgdmFsaWRUZXJtID0gdGVybTsgLy8vXG5cbiAgICByZXR1cm4gdmFsaWRUZXJtO1xuICB9XG5cbiAgdmFsaWRhdGUoY29udGV4dCwgY29udGludWF0aW9uKSB7XG4gICAgY29uc3QgdGVybVN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7ICAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke3Rlcm1TdHJpbmd9JyB0ZXJtLi4uYCk7XG5cbiAgICBjb25zdCB2YWxpZFRlcm0gPSB0aGlzLmZpbmRWYWxpZFRlcm0oY29udGV4dCk7XG5cbiAgICBpZiAodmFsaWRUZXJtICE9PSBudWxsKSB7XG4gICAgICBjb25zdCB0ZXJtID0gdmFsaWRUZXJtOyAvLy9cblxuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udGhlICcke3Rlcm1TdHJpbmd9JyB0ZXJtIGlzIGFscmVhZHkgdmFsaWQuYCk7XG5cbiAgICAgIGNvbnRpbnVhdGlvbih0ZXJtLCBjb250ZXh0KTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGxldCB0ZXJtID0gdGhpcztcblxuICAgIGV4aXN0cyh2YWxpZGF0ZVRlcm1zLCB0ZXJtLCBjb250ZXh0LCAodGVybVZhbGlkYXRlcykgPT4ge1xuICAgICAgaWYgKHRlcm1WYWxpZGF0ZXMpIHtcbiAgICAgICAgY29udGV4dC5hZGRUZXJtKHRlcm0pO1xuXG4gICAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlZCB0aGUgJyR7dGVybVN0cmluZ30nIHRlcm0uYCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0ZXJtID0gbnVsbDtcbiAgICAgIH1cblxuICAgICAgY29udGludWF0aW9uKHRlcm0sIGNvbnRleHQpO1xuICAgIH0pO1xuICB9XG5cbiAgdmFsaWRhdGVHaXZlblR5cGUodHlwZSwgc3RyaWN0LCBjb250ZXh0KSB7XG4gICAgaWYgKGNvbnRleHQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgY29udGV4dCA9IHN0cmljdDsgLy8vXG5cbiAgICAgIHN0cmljdCA9IHRydWU7XG4gICAgfVxuXG4gICAgbGV0IHRlcm07XG5cbiAgICBjb25zdCB0eXBlU3RyaW5nID0gdHlwZS5nZXRTdHJpbmcoKSxcbiAgICAgICAgICB0ZXJtU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgIC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7dGVybVN0cmluZ30nIHRlcm0gZ2l2ZW4gdGhlICcke3R5cGVTdHJpbmd9JyB0eXBlLi4uYCk7XG5cbiAgICBsZXQgdmFsaWRhdGVzR2l2ZW5UeXBlID0gZmFsc2U7XG5cbiAgICB0ZXJtID0gdGhpcy52YWxpZGF0ZShjb250ZXh0LCAodGVybSwgY29udGV4dCkgPT4ge1xuICAgICAgbGV0IHZhbGlkYXRlc0ZvcndhcmRzID0gZmFsc2U7XG5cbiAgICAgIGNvbnN0IHRlcm1UeXBlID0gdGVybS5nZXRUeXBlKCksXG4gICAgICAgICAgICB0ZXJtVHlwZUVxdWFsVG9PclN1YlR5cGVPZlR5cGUgPSB0ZXJtVHlwZS5pc0VxdWFsVG9PclN1YlR5cGVPZih0eXBlKTtcblxuICAgICAgaWYgKHRlcm1UeXBlRXF1YWxUb09yU3ViVHlwZU9mVHlwZSkge1xuICAgICAgICB2YWxpZGF0ZXNGb3J3YXJkcyA9IHRydWU7XG5cbiAgICAgICAgaWYgKHN0cmljdCkge1xuICAgICAgICAgIGNvbnN0IHR5cGVFc3RhYmxpc2hlZCA9IHR5cGUuaXNFc3RhYmxpc2hlZCgpLFxuICAgICAgICAgICAgICAgIHRlcm1Qcm92aXNpb25hbCA9IHRlcm0uaXNQcm92aXNpb25hbCgpO1xuXG4gICAgICAgICAgaWYgKHR5cGVFc3RhYmxpc2hlZCAmJiB0ZXJtUHJvdmlzaW9uYWwpIHtcbiAgICAgICAgICAgIHZhbGlkYXRlc0ZvcndhcmRzID0gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB2YWxpZGF0ZXNGb3J3YXJkcztcbiAgICB9KTtcblxuICAgIGlmICh0ZXJtICE9PSBudWxsKSB7XG4gICAgICB2YWxpZGF0ZXNHaXZlblR5cGUgPSB0cnVlO1xuICAgIH1cblxuICAgIGlmICh2YWxpZGF0ZXNHaXZlblR5cGUpIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlZCB0aGUgJyR7dGVybVN0cmluZ30nIHRlcm0gZ2l2ZW4gdGhlICcke3R5cGVTdHJpbmd9JyB0eXBlLmApO1xuICAgIH1cblxuICAgIHJldHVybiB0ZXJtO1xuICB9XG5cbiAgdmFsaWRhdGVBc1Byb3BlcnR5KGNvbnRleHQsIHZhbGlkYXRlRm9yd2FyZHMpIHtcbiAgICBsZXQgdGVybSA9IG51bGw7XG5cbiAgICBjb25zdCB0ZXJtU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgIC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7dGVybVN0cmluZ30nIHRlcm0gYXMgYSBwcm9wZXJ0eS4uLmApO1xuXG4gICAgbGV0IHZhbGlkYXRlc0FzUHJvcGVydHkgPSBmYWxzZTtcblxuICAgIGNvbnN0IHZhbGlkVGVybSA9IHRoaXMuZmluZFZhbGlkVGVybShjb250ZXh0KTtcblxuICAgIGlmICh2YWxpZFRlcm0gIT09IG51bGwpIHtcbiAgICAgIHRlcm0gPSB2YWxpZFRlcm07IC8vL1xuXG4gICAgICBjb25zdCB2YWxpZGF0ZXNGb3J3YXJkID0gdmFsaWRhdGVGb3J3YXJkcyh0ZXJtLCBjb250ZXh0KTtcblxuICAgICAgaWYgKHZhbGlkYXRlc0ZvcndhcmQpIHtcbiAgICAgICAgdmFsaWRhdGVzQXNQcm9wZXJ0eSA9IHRydWU7XG5cbiAgICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udGhlICcke3Rlcm1TdHJpbmd9JyB0ZXJtIGlzIGFscmVhZHkgdmFsaWQuYCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0ZXJtID0gbnVsbDtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGVybSA9IHRoaXM7ICAvLy9cblxuICAgICAgY29uc3QgdGVybVVuaWZpZXNXaXRoUHJvcGVydGllcyA9IHVuaWZ5VGVybVdpdGhQcm9wZXJ0aWVzKHRlcm0sIGNvbnRleHQsIHZhbGlkYXRlRm9yd2FyZHMpO1xuXG4gICAgICBpZiAodGVybVVuaWZpZXNXaXRoUHJvcGVydGllcykge1xuICAgICAgICB2YWxpZGF0ZXNBc1Byb3BlcnR5ID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRlcm0gPSBudWxsO1xuICAgICAgfVxuXG4gICAgICBpZiAodmFsaWRhdGVzQXNQcm9wZXJ0eSkge1xuICAgICAgICBjb250ZXh0LmFkZFRlcm0odGVybSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHZhbGlkYXRlc0FzUHJvcGVydHkpIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlZCB0aGUgJyR7dGVybVN0cmluZ30nIHRlcm0gYXMgYSBwcm9wZXJ0eS5gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGVybTtcbiAgfVxuXG4gIHVuaWZ5VGVybSh0ZXJtLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0KSB7XG4gICAgbGV0IHRlcm1VbmlmaWVzID0gZmFsc2U7XG5cbiAgICBjb25zdCBjb250ZXh0ID0gc3BlY2lmaWNDb250ZXh0LCAgLy8vXG4gICAgICAgICAgZ2VuZXJhbFRlcm0gPSB0aGlzLFxuICAgICAgICAgIHNwZWNpZmljVGVybSA9IHRlcm0sXG4gICAgICAgICAgZ2VuZXJhbFRlcm1TdHJpbmcgPSBnZW5lcmFsVGVybS5nZXRTdHJpbmcoKSxcbiAgICAgICAgICBzcGVjaWZpeFRlcm1TdHJpbmcgPSBzcGVjaWZpY1Rlcm0uZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBVbmlmeWluZyB0aGUgJyR7c3BlY2lmaXhUZXJtU3RyaW5nfScgdGVybSB3aXRoIHRoZSAnJHtnZW5lcmFsVGVybVN0cmluZ30nIHRlcm0uLi5gKTtcblxuICAgIGNvbnN0IHRlcm1VbmlmaWVzSW50cmluc2ljYWxseSA9IHVuaWZ5VGVybUludHJpbnNpY2FsbHkoZ2VuZXJhbFRlcm0sIHNwZWNpZmljVGVybSwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCk7XG5cbiAgICBpZiAodGVybVVuaWZpZXNJbnRyaW5zaWNhbGx5KSB7XG4gICAgICB0ZXJtVW5pZmllcyA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKHRlcm1VbmlmaWVzKSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi51bmlmaWVkIHRoZSAnJHtzcGVjaWZpeFRlcm1TdHJpbmd9JyB0ZXJtIHdpdGggdGhlICcke2dlbmVyYWxUZXJtU3RyaW5nfScgdGVybS5gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGVybVVuaWZpZXM7XG4gIH1cblxuICB0b0pTT04oKSB7XG4gICAgY29uc3QgdHlwZUpTT04gPSB0eXBlVG9UeXBlSlNPTih0aGlzLnR5cGUpLFxuICAgICAgICAgIHByb3Zpc2lvbmFsSlNPTiA9IHByb3Zpc2lvbmFsVG9Qcm92aXNpb25hbEpTT04odGhpcy5wcm92aXNpb25hbCksXG4gICAgICAgICAgc3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTtcblxuICAgIGxldCBicmVha1BvaW50O1xuXG4gICAgYnJlYWtQb2ludCA9IHRoaXMuZ2V0QnJlYWtQb2ludCgpO1xuXG4gICAgY29uc3QgYnJlYWtQb2ludEpTT04gPSBicmVha1BvaW50VG9CcmVha1BvaW50SlNPTihicmVha1BvaW50KTtcblxuICAgIGJyZWFrUG9pbnQgPSBicmVha1BvaW50SlNPTjsgIC8vL1xuXG4gICAgY29uc3QgdHlwZSA9IHR5cGVKU09OLCAgLy8vXG4gICAgICAgICAgcHJvdmlzaW9uYWwgPSBwcm92aXNpb25hbEpTT04sICAvLy9cbiAgICAgICAgICBqc29uID0ge1xuICAgICAgICAgICAgc3RyaW5nLFxuICAgICAgICAgICAgYnJlYWtQb2ludCxcbiAgICAgICAgICAgIHR5cGUsXG4gICAgICAgICAgICBwcm92aXNpb25hbFxuICAgICAgICAgIH07XG5cbiAgICByZXR1cm4ganNvbjtcbiAgfVxuXG4gIHN0YXRpYyBuYW1lID0gXCJUZXJtXCI7XG5cbiAgc3RhdGljIGZyb21KU09OKGpzb24sIGNvbnRleHQpIHtcbiAgICByZXR1cm4gaW5zdGFudGlhdGUoKGNvbnRleHQpID0+IHtcbiAgICAgIGNvbnN0IHsgc3RyaW5nIH0gPSBqc29uLFxuICAgICAgICAgICAgdGVybU5vZGUgPSBpbnN0YW50aWF0ZVRlcm0oc3RyaW5nLCBjb250ZXh0KSxcbiAgICAgICAgICAgIG5vZGUgPSB0ZXJtTm9kZSwgIC8vL1xuICAgICAgICAgICAgYnJlYWtQb2ludCA9IGJyZWFrUG9pbnRGcm9tSlNPTihqc29uKSxcbiAgICAgICAgICAgIHR5cGUgPSB0eXBlRnJvbUpTT04oanNvbiwgY29udGV4dCksXG4gICAgICAgICAgICBwcm92aXNpb25hbCA9IHByb3Zpc2lvbmFsRnJvbUpTT04oanNvbiwgY29udGV4dCk7XG5cbiAgICAgIGNvbnRleHQgPSBudWxsO1xuXG4gICAgICBjb25zdCB0ZXJtID0gbmV3IFRlcm0oY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCB0eXBlLCBwcm92aXNpb25hbCk7XG5cbiAgICAgIHJldHVybiB0ZXJtO1xuICAgIH0sIGNvbnRleHQpO1xuICB9XG59KTtcbiJdLCJuYW1lcyI6WyJmaWx0ZXIiLCJhcnJheVV0aWxpdGllcyIsImJyZWFrUG9pbnRGcm9tSlNPTiIsImJyZWFrUG9pbnRUb0JyZWFrUG9pbnRKU09OIiwiYnJlYWtQb2ludFV0aWxpdGllcyIsImRlZmluZSIsIlRlcm0iLCJFbGVtZW50IiwiY29udGV4dCIsInN0cmluZyIsIm5vZGUiLCJicmVha1BvaW50IiwidHlwZSIsInByb3Zpc2lvbmFsIiwiZ2V0VHlwZSIsImlzUHJvdmlzaW9uYWwiLCJzZXRUeXBlIiwic2V0UHJvdmlzaW9uYWwiLCJnZXRUZXJtTm9kZSIsImdldE5vZGUiLCJ0ZXJtTm9kZSIsImdldFZhcmlhYmxlTm9kZSIsInZhcmlhYmxlTm9kZSIsImdldFZhcmlhYmxlSWRlbnRpZmllciIsInZhcmlhYmxlSWRlbnRpZmllciIsImlzRXN0YWJsaXNoZWQiLCJlc3RhYmxpc2hlZCIsImlzRXF1YWxUbyIsInRlcm0iLCJ0ZXJtTm9kZU1hdGNoZXMiLCJtYXRjaFRlcm1Ob2RlIiwiZXF1YWxUbyIsImlzR3JvdW5kZWQiLCJkZWZpbmVkVmFyaWFibGVzIiwidmFyaWFibGVzIiwidmFyaWFibGVzRnJvbVRlcm0iLCJ2YXJpYWJsZSIsImRlZmluZWRWYXJpYWJsZXNJbmNsdWRlc1ZhcmlhYmxlIiwiaW5jbHVkZXMiLCJ1bmRlZmluZWRWYXJpYWJsZXMiLCJ1bmRlZmluZWRWYXJpYWJsZXNMZW5ndGgiLCJsZW5ndGgiLCJncm91bmRlZCIsImlzU2luZ3VsYXIiLCJzaW5ndWxhciIsImlzSW5pdGlhbGx5R3JvdW5kZWQiLCJ2YXJpYWJsZXNMZW5ndGgiLCJpbml0aWFsbHlHcm91bmRlZCIsImlzSW1wbGljaXRseUdyb3VuZGVkIiwiaW1wbGljaXRseUdyb3VuZGVkIiwibm9kZU1hdGNoZXMiLCJtYXRjaE5vZGUiLCJtYXRjaFZhcmlhYmxlTm9kZSIsInZhcmlhYmxlTm9kZU1hdGNoZXMiLCJ2YXJpYWJsZU5vZGVBIiwidmFyaWFibGVOb2RlQiIsInZhcmlhYmxlTm9kZUFNYXRjaGVzVmFyaWFibGVOb2RlQiIsIm1hdGNoIiwiY29tcGFyZVRlcm0iLCJjb21wYXJlc1RvIiwiY29tcGFyZVBhcmFtZXRlciIsInBhcmFtZXRlciIsImNvbXBhcmVzVG9QYXJhbXRlciIsInBhcmFtZXRlcklkZW50aWZpZXIiLCJnZXRJZGVudGlmaWVyIiwiZmluZFZhbGlkVGVybSIsImZpbmRUZXJtQnlUZXJtTm9kZSIsInZhbGlkVGVybSIsInZhbGlkYXRlIiwiY29udGludWF0aW9uIiwidGVybVN0cmluZyIsImdldFN0cmluZyIsInRyYWNlIiwiZGVidWciLCJleGlzdHMiLCJ2YWxpZGF0ZVRlcm1zIiwidGVybVZhbGlkYXRlcyIsImFkZFRlcm0iLCJ2YWxpZGF0ZUdpdmVuVHlwZSIsInN0cmljdCIsInVuZGVmaW5lZCIsInR5cGVTdHJpbmciLCJ2YWxpZGF0ZXNHaXZlblR5cGUiLCJ2YWxpZGF0ZXNGb3J3YXJkcyIsInRlcm1UeXBlIiwidGVybVR5cGVFcXVhbFRvT3JTdWJUeXBlT2ZUeXBlIiwiaXNFcXVhbFRvT3JTdWJUeXBlT2YiLCJ0eXBlRXN0YWJsaXNoZWQiLCJ0ZXJtUHJvdmlzaW9uYWwiLCJ2YWxpZGF0ZUFzUHJvcGVydHkiLCJ2YWxpZGF0ZUZvcndhcmRzIiwidmFsaWRhdGVzQXNQcm9wZXJ0eSIsInZhbGlkYXRlc0ZvcndhcmQiLCJ0ZXJtVW5pZmllc1dpdGhQcm9wZXJ0aWVzIiwidW5pZnlUZXJtV2l0aFByb3BlcnRpZXMiLCJ1bmlmeVRlcm0iLCJnZW5lcmFsQ29udGV4dCIsInNwZWNpZmljQ29udGV4dCIsInRlcm1VbmlmaWVzIiwiZ2VuZXJhbFRlcm0iLCJzcGVjaWZpY1Rlcm0iLCJnZW5lcmFsVGVybVN0cmluZyIsInNwZWNpZml4VGVybVN0cmluZyIsInRlcm1VbmlmaWVzSW50cmluc2ljYWxseSIsInVuaWZ5VGVybUludHJpbnNpY2FsbHkiLCJ0b0pTT04iLCJ0eXBlSlNPTiIsInR5cGVUb1R5cGVKU09OIiwicHJvdmlzaW9uYWxKU09OIiwicHJvdmlzaW9uYWxUb1Byb3Zpc2lvbmFsSlNPTiIsImdldEJyZWFrUG9pbnQiLCJicmVha1BvaW50SlNPTiIsImpzb24iLCJuYW1lIiwiZnJvbUpTT04iLCJpbnN0YW50aWF0ZSIsImluc3RhbnRpYXRlVGVybSIsInR5cGVGcm9tSlNPTiIsInByb3Zpc2lvbmFsRnJvbUpTT04iXSwibWFwcGluZ3MiOiJBQUFBOzs7OytCQWlCQTs7O2VBQUE7OzsyQkFmK0I7Z0NBQ2M7MEJBRXRCOzhCQUNBO3lCQUNLOzZCQUNJOzZCQUNFO3VCQUNLOzRCQUNnQjtzQkFDeUM7QUFFaEcsTUFBTSxFQUFFQSxNQUFNLEVBQUUsR0FBR0MseUJBQWMsRUFDM0IsRUFBRUMsa0JBQWtCLEVBQUVDLDBCQUEwQixFQUFFLEdBQUdDLG1DQUFtQjtNQUU5RSxXQUFlQyxJQUFBQSxnQkFBTSxFQUFDLE1BQU1DLGFBQWFDLHVCQUFPO0lBQzlDLFlBQVlDLE9BQU8sRUFBRUMsTUFBTSxFQUFFQyxJQUFJLEVBQUVDLFVBQVUsRUFBRUMsSUFBSSxFQUFFQyxXQUFXLENBQUU7UUFDaEUsS0FBSyxDQUFDTCxTQUFTQyxRQUFRQyxNQUFNQyxZQUFZRTtRQUV6QyxJQUFJLENBQUNELElBQUksR0FBR0E7UUFDWixJQUFJLENBQUNDLFdBQVcsR0FBR0E7SUFDckI7SUFFQUMsVUFBVTtRQUNSLE9BQU8sSUFBSSxDQUFDRixJQUFJO0lBQ2xCO0lBRUFHLGdCQUFnQjtRQUNkLE9BQU8sSUFBSSxDQUFDRixXQUFXO0lBQ3pCO0lBRUFHLFFBQVFKLElBQUksRUFBRTtRQUNaLElBQUksQ0FBQ0EsSUFBSSxHQUFHQTtJQUNkO0lBRUFLLGVBQWVKLFdBQVcsRUFBRTtRQUMxQixJQUFJLENBQUNBLFdBQVcsR0FBR0E7SUFDckI7SUFFQUssY0FBYztRQUNaLE1BQU1SLE9BQU8sSUFBSSxDQUFDUyxPQUFPLElBQ25CQyxXQUFXVixNQUFPLEdBQUc7UUFFM0IsT0FBT1U7SUFDVDtJQUVBQyxrQkFBa0I7UUFDaEIsTUFBTUQsV0FBVyxJQUFJLENBQUNGLFdBQVcsSUFDM0JJLGVBQWVGLFNBQVNDLGVBQWU7UUFFN0MsT0FBT0M7SUFDVDtJQUVBQyx3QkFBd0I7UUFDdEIsTUFBTUgsV0FBVyxJQUFJLENBQUNGLFdBQVcsSUFDM0JNLHFCQUFxQkosU0FBU0cscUJBQXFCO1FBRXpELE9BQU9DO0lBQ1Q7SUFFQUMsZ0JBQWdCO1FBQ2QsTUFBTVosY0FBYyxJQUFJLENBQUNFLGFBQWEsSUFDaENXLGNBQWMsQ0FBQ2I7UUFFckIsT0FBT2E7SUFDVDtJQUVBQyxVQUFVQyxJQUFJLEVBQUU7UUFDZCxNQUFNUixXQUFXUSxLQUFLVCxPQUFPLElBQ3ZCVSxrQkFBa0IsSUFBSSxDQUFDQyxhQUFhLENBQUNWLFdBQ3JDVyxVQUFVRixpQkFBa0IsR0FBRztRQUVyQyxPQUFPRTtJQUNUO0lBRUFDLFdBQVdDLGdCQUFnQixFQUFFekIsT0FBTyxFQUFFO1FBQ3BDLE1BQU1vQixPQUFRLElBQUksRUFDWk0sWUFBWUMsSUFBQUEsOEJBQWlCLEVBQUNQLE1BQU1wQjtRQUUxQ1IsT0FBT2tDLFdBQVcsQ0FBQ0U7WUFDakIsTUFBTUMsbUNBQW1DSixpQkFBaUJLLFFBQVEsQ0FBQ0Y7WUFFbkUsSUFBSSxDQUFDQyxrQ0FBa0M7Z0JBQ3JDLE9BQU87WUFDVDtRQUNGO1FBRUEsTUFBTUUscUJBQXFCTCxXQUNyQk0sMkJBQTJCRCxtQkFBbUJFLE1BQU0sRUFDcERDLFdBQVlGLDRCQUE0QjtRQUU5QyxPQUFPRTtJQUNUO0lBRUFDLGFBQWE7UUFDWCxNQUFNdkIsV0FBVyxJQUFJLENBQUNGLFdBQVcsSUFDM0IwQixXQUFXeEIsU0FBU3VCLFVBQVU7UUFFcEMsT0FBT0M7SUFDVDtJQUVBQyxvQkFBb0JyQyxPQUFPLEVBQUU7UUFDM0IsTUFBTW9CLE9BQVEsSUFBSSxFQUNaTSxZQUFZQyxJQUFBQSw4QkFBaUIsRUFBQ1AsTUFBTXBCLFVBQ3BDc0Msa0JBQWtCWixVQUFVTyxNQUFNLEVBQ2xDTSxvQkFBcUJELG9CQUFvQjtRQUUvQyxPQUFPQztJQUNUO0lBRUFDLHFCQUFxQmYsZ0JBQWdCLEVBQUV6QixPQUFPLEVBQUU7UUFDOUMsTUFBTWtDLFdBQVcsSUFBSSxDQUFDVixVQUFVLENBQUNDLGtCQUFrQnpCLFVBQzdDeUMscUJBQXFCUCxVQUFXLEdBQUc7UUFFekMsT0FBT087SUFDVDtJQUVBbkIsY0FBY1YsUUFBUSxFQUFFO1FBQ3RCLE1BQU1WLE9BQU9VLFVBQ1A4QixjQUFjLElBQUksQ0FBQ0MsU0FBUyxDQUFDekMsT0FDN0JtQixrQkFBa0JxQixhQUFhLEdBQUc7UUFFeEMsT0FBT3JCO0lBQ1Q7SUFFQXVCLGtCQUFrQjlCLFlBQVksRUFBRTtRQUM5QixJQUFJK0Isc0JBQXNCO1FBRTFCLE1BQU1ULFdBQVcsSUFBSSxDQUFDRCxVQUFVO1FBRWhDLElBQUlDLFVBQVU7WUFDWixNQUFNVSxnQkFBZ0JoQyxjQUFjLEdBQUc7WUFFdkNBLGVBQWUsSUFBSSxDQUFDRCxlQUFlO1lBRW5DLE1BQU1rQyxnQkFBZ0JqQyxjQUNoQmtDLG9DQUFvQ0YsY0FBY0csS0FBSyxDQUFDRjtZQUU5RCxJQUFJQyxtQ0FBbUM7Z0JBQ3JDSCxzQkFBc0IsTUFBTSxHQUFHO1lBQ2pDO1FBQ0Y7UUFFQSxPQUFPQTtJQUNUO0lBRUFLLFlBQVk5QixJQUFJLEVBQUU7UUFDaEIsTUFBTVIsV0FBV1EsS0FBS1QsT0FBTyxJQUN2QlUsa0JBQWtCLElBQUksQ0FBQ3NCLFNBQVMsQ0FBQy9CLFdBQ2pDdUMsYUFBYTlCLGlCQUFpQixHQUFHO1FBRXZDLE9BQU84QjtJQUNUO0lBRUFDLGlCQUFpQkMsU0FBUyxFQUFFO1FBQzFCLElBQUlDLHFCQUFxQjtRQUV6QixNQUFNbEIsV0FBVyxJQUFJLENBQUNELFVBQVU7UUFFaEMsSUFBSUMsVUFBVTtZQUNaLE1BQU1tQixzQkFBc0JGLFVBQVVHLGFBQWE7WUFFbkQsSUFBSUQsd0JBQXdCLE1BQU07Z0JBQ2hDLE1BQU12QyxxQkFBcUIsSUFBSSxDQUFDRCxxQkFBcUI7Z0JBRXJELElBQUl3Qyx3QkFBd0J2QyxvQkFBb0I7b0JBQzlDc0MscUJBQXFCO2dCQUN2QjtZQUNGO1FBQ0Y7UUFFQSxPQUFPQTtJQUNUO0lBRUFHLGNBQWN6RCxPQUFPLEVBQUU7UUFDckIsTUFBTVksV0FBVyxJQUFJLENBQUNGLFdBQVcsSUFDM0JVLE9BQU9wQixRQUFRMEQsa0JBQWtCLENBQUM5QyxXQUNsQytDLFlBQVl2QyxNQUFNLEdBQUc7UUFFM0IsT0FBT3VDO0lBQ1Q7SUFFQUMsU0FBUzVELE9BQU8sRUFBRTZELFlBQVksRUFBRTtRQUM5QixNQUFNQyxhQUFhLElBQUksQ0FBQ0MsU0FBUyxJQUFLLEdBQUc7UUFFekMvRCxRQUFRZ0UsS0FBSyxDQUFDLENBQUMsZ0JBQWdCLEVBQUVGLFdBQVcsU0FBUyxDQUFDO1FBRXRELE1BQU1ILFlBQVksSUFBSSxDQUFDRixhQUFhLENBQUN6RDtRQUVyQyxJQUFJMkQsY0FBYyxNQUFNO1lBQ3RCLE1BQU12QyxPQUFPdUMsV0FBVyxHQUFHO1lBRTNCM0QsUUFBUWlFLEtBQUssQ0FBQyxDQUFDLFFBQVEsRUFBRUgsV0FBVyx3QkFBd0IsQ0FBQztZQUU3REQsYUFBYXpDLE1BQU1wQjtZQUVuQjtRQUNGO1FBRUEsSUFBSW9CLE9BQU8sSUFBSTtRQUVmOEMsSUFBQUEsb0JBQU0sRUFBQ0MseUJBQWEsRUFBRS9DLE1BQU1wQixTQUFTLENBQUNvRTtZQUNwQyxJQUFJQSxlQUFlO2dCQUNqQnBFLFFBQVFxRSxPQUFPLENBQUNqRDtnQkFFaEJwQixRQUFRaUUsS0FBSyxDQUFDLENBQUMsa0JBQWtCLEVBQUVILFdBQVcsT0FBTyxDQUFDO1lBQ3hELE9BQU87Z0JBQ0wxQyxPQUFPO1lBQ1Q7WUFFQXlDLGFBQWF6QyxNQUFNcEI7UUFDckI7SUFDRjtJQUVBc0Usa0JBQWtCbEUsSUFBSSxFQUFFbUUsTUFBTSxFQUFFdkUsT0FBTyxFQUFFO1FBQ3ZDLElBQUlBLFlBQVl3RSxXQUFXO1lBQ3pCeEUsVUFBVXVFLFFBQVEsR0FBRztZQUVyQkEsU0FBUztRQUNYO1FBRUEsSUFBSW5EO1FBRUosTUFBTXFELGFBQWFyRSxLQUFLMkQsU0FBUyxJQUMzQkQsYUFBYSxJQUFJLENBQUNDLFNBQVMsSUFBSyxHQUFHO1FBRXpDL0QsUUFBUWdFLEtBQUssQ0FBQyxDQUFDLGdCQUFnQixFQUFFRixXQUFXLGtCQUFrQixFQUFFVyxXQUFXLFNBQVMsQ0FBQztRQUVyRixJQUFJQyxxQkFBcUI7UUFFekJ0RCxPQUFPLElBQUksQ0FBQ3dDLFFBQVEsQ0FBQzVELFNBQVMsQ0FBQ29CLE1BQU1wQjtZQUNuQyxJQUFJMkUsb0JBQW9CO1lBRXhCLE1BQU1DLFdBQVd4RCxLQUFLZCxPQUFPLElBQ3ZCdUUsaUNBQWlDRCxTQUFTRSxvQkFBb0IsQ0FBQzFFO1lBRXJFLElBQUl5RSxnQ0FBZ0M7Z0JBQ2xDRixvQkFBb0I7Z0JBRXBCLElBQUlKLFFBQVE7b0JBQ1YsTUFBTVEsa0JBQWtCM0UsS0FBS2EsYUFBYSxJQUNwQytELGtCQUFrQjVELEtBQUtiLGFBQWE7b0JBRTFDLElBQUl3RSxtQkFBbUJDLGlCQUFpQjt3QkFDdENMLG9CQUFvQjtvQkFDdEI7Z0JBQ0Y7WUFDRjtZQUVBLE9BQU9BO1FBQ1Q7UUFFQSxJQUFJdkQsU0FBUyxNQUFNO1lBQ2pCc0QscUJBQXFCO1FBQ3ZCO1FBRUEsSUFBSUEsb0JBQW9CO1lBQ3RCMUUsUUFBUWlFLEtBQUssQ0FBQyxDQUFDLGtCQUFrQixFQUFFSCxXQUFXLGtCQUFrQixFQUFFVyxXQUFXLE9BQU8sQ0FBQztRQUN2RjtRQUVBLE9BQU9yRDtJQUNUO0lBRUE2RCxtQkFBbUJqRixPQUFPLEVBQUVrRixnQkFBZ0IsRUFBRTtRQUM1QyxJQUFJOUQsT0FBTztRQUVYLE1BQU0wQyxhQUFhLElBQUksQ0FBQ0MsU0FBUyxJQUFLLEdBQUc7UUFFekMvRCxRQUFRZ0UsS0FBSyxDQUFDLENBQUMsZ0JBQWdCLEVBQUVGLFdBQVcsdUJBQXVCLENBQUM7UUFFcEUsSUFBSXFCLHNCQUFzQjtRQUUxQixNQUFNeEIsWUFBWSxJQUFJLENBQUNGLGFBQWEsQ0FBQ3pEO1FBRXJDLElBQUkyRCxjQUFjLE1BQU07WUFDdEJ2QyxPQUFPdUMsV0FBVyxHQUFHO1lBRXJCLE1BQU15QixtQkFBbUJGLGlCQUFpQjlELE1BQU1wQjtZQUVoRCxJQUFJb0Ysa0JBQWtCO2dCQUNwQkQsc0JBQXNCO2dCQUV0Qm5GLFFBQVFpRSxLQUFLLENBQUMsQ0FBQyxRQUFRLEVBQUVILFdBQVcsd0JBQXdCLENBQUM7WUFDL0QsT0FBTztnQkFDTDFDLE9BQU87WUFDVDtRQUNGLE9BQU87WUFDTEEsT0FBTyxJQUFJLEVBQUcsR0FBRztZQUVqQixNQUFNaUUsNEJBQTRCQyxJQUFBQSxtQ0FBdUIsRUFBQ2xFLE1BQU1wQixTQUFTa0Y7WUFFekUsSUFBSUcsMkJBQTJCO2dCQUM3QkYsc0JBQXNCO1lBQ3hCLE9BQU87Z0JBQ0wvRCxPQUFPO1lBQ1Q7WUFFQSxJQUFJK0QscUJBQXFCO2dCQUN2Qm5GLFFBQVFxRSxPQUFPLENBQUNqRDtZQUNsQjtRQUNGO1FBRUEsSUFBSStELHFCQUFxQjtZQUN2Qm5GLFFBQVFpRSxLQUFLLENBQUMsQ0FBQyxrQkFBa0IsRUFBRUgsV0FBVyxxQkFBcUIsQ0FBQztRQUN0RTtRQUVBLE9BQU8xQztJQUNUO0lBRUFtRSxVQUFVbkUsSUFBSSxFQUFFb0UsY0FBYyxFQUFFQyxlQUFlLEVBQUU7UUFDL0MsSUFBSUMsY0FBYztRQUVsQixNQUFNMUYsVUFBVXlGLGlCQUNWRSxjQUFjLElBQUksRUFDbEJDLGVBQWV4RSxNQUNmeUUsb0JBQW9CRixZQUFZNUIsU0FBUyxJQUN6QytCLHFCQUFxQkYsYUFBYTdCLFNBQVM7UUFFakQvRCxRQUFRZ0UsS0FBSyxDQUFDLENBQUMsY0FBYyxFQUFFOEIsbUJBQW1CLGlCQUFpQixFQUFFRCxrQkFBa0IsU0FBUyxDQUFDO1FBRWpHLE1BQU1FLDJCQUEyQkMsSUFBQUEsNkJBQXNCLEVBQUNMLGFBQWFDLGNBQWNKLGdCQUFnQkM7UUFFbkcsSUFBSU0sMEJBQTBCO1lBQzVCTCxjQUFjO1FBQ2hCO1FBRUEsSUFBSUEsYUFBYTtZQUNmMUYsUUFBUWlFLEtBQUssQ0FBQyxDQUFDLGdCQUFnQixFQUFFNkIsbUJBQW1CLGlCQUFpQixFQUFFRCxrQkFBa0IsT0FBTyxDQUFDO1FBQ25HO1FBRUEsT0FBT0g7SUFDVDtJQUVBTyxTQUFTO1FBQ1AsTUFBTUMsV0FBV0MsSUFBQUEsb0JBQWMsRUFBQyxJQUFJLENBQUMvRixJQUFJLEdBQ25DZ0csa0JBQWtCQyxJQUFBQSxrQ0FBNEIsRUFBQyxJQUFJLENBQUNoRyxXQUFXLEdBQy9ESixTQUFTLElBQUksQ0FBQzhELFNBQVM7UUFFN0IsSUFBSTVEO1FBRUpBLGFBQWEsSUFBSSxDQUFDbUcsYUFBYTtRQUUvQixNQUFNQyxpQkFBaUI1RywyQkFBMkJRO1FBRWxEQSxhQUFhb0csZ0JBQWlCLEdBQUc7UUFFakMsTUFBTW5HLE9BQU84RixVQUNQN0YsY0FBYytGLGlCQUNkSSxPQUFPO1lBQ0x2RztZQUNBRTtZQUNBQztZQUNBQztRQUNGO1FBRU4sT0FBT21HO0lBQ1Q7SUFFQSxPQUFPQyxPQUFPLE9BQU87SUFFckIsT0FBT0MsU0FBU0YsSUFBSSxFQUFFeEcsT0FBTyxFQUFFO1FBQzdCLE9BQU8yRyxJQUFBQSxvQkFBVyxFQUFDLENBQUMzRztZQUNsQixNQUFNLEVBQUVDLE1BQU0sRUFBRSxHQUFHdUcsTUFDYjVGLFdBQVdnRyxJQUFBQSw0QkFBZSxFQUFDM0csUUFBUUQsVUFDbkNFLE9BQU9VLFVBQ1BULGFBQWFULG1CQUFtQjhHLE9BQ2hDcEcsT0FBT3lHLElBQUFBLGtCQUFZLEVBQUNMLE1BQU14RyxVQUMxQkssY0FBY3lHLElBQUFBLHlCQUFtQixFQUFDTixNQUFNeEc7WUFFOUNBLFVBQVU7WUFFVixNQUFNb0IsT0FBTyxJQUFJdEIsS0FBS0UsU0FBU0MsUUFBUUMsTUFBTUMsWUFBWUMsTUFBTUM7WUFFL0QsT0FBT2U7UUFDVCxHQUFHcEI7SUFDTDtBQUNGIn0=
243
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9lbGVtZW50L3Rlcm0uanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IGFycmF5VXRpbGl0aWVzIH0gZnJvbSBcIm5lY2Vzc2FyeVwiO1xuaW1wb3J0IHsgRWxlbWVudCwgYnJlYWtQb2ludFV0aWxpdGllcyB9IGZyb20gXCJvY2NhbS1sYW5ndWFnZXNcIjtcblxuaW1wb3J0IHsgZGVmaW5lIH0gZnJvbSBcIi4uL2VsZW1lbnRzXCI7XG5pbXBvcnQgeyBleGlzdHMgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2NvbnRpbnVhdGlvblwiO1xuaW1wb3J0IHsgaW5zdGFudGlhdGUgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2NvbnRleHRcIjtcbmltcG9ydCB7IGluc3RhbnRpYXRlVGVybSB9IGZyb20gXCIuLi9wcm9jZXNzL2luc3RhbnRpYXRlXCI7XG5pbXBvcnQgeyB2YXJpYWJsZXNGcm9tVGVybSB9IGZyb20gXCIuLi91dGlsaXRpZXMvZXF1aXZhbGVuY2VcIjtcbmltcG9ydCB7IHVuaWZ5VGVybUludHJpbnNpY2FsbHkgfSBmcm9tIFwiLi4vcHJvY2Vzcy91bmlmeVwiO1xuaW1wb3J0IHsgdmFsaWRhdGVUZXJtcywgdW5pZnlUZXJtV2l0aFByb3BlcnRpZXMgfSBmcm9tIFwiLi4vcHJvY2Vzcy92YWxpZGF0aW9uXCI7XG5pbXBvcnQgeyB0eXBlRnJvbUpTT04sIHR5cGVUb1R5cGVKU09OLCBwcm92aXNpb25hbEZyb21KU09OLCBwcm92aXNpb25hbFRvUHJvdmlzaW9uYWxKU09OIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9qc29uXCI7XG5cbmNvbnN0IHsgZmlsdGVyIH0gPSBhcnJheVV0aWxpdGllcyxcbiAgICAgIHsgYnJlYWtQb2ludEZyb21KU09OLCBicmVha1BvaW50VG9CcmVha1BvaW50SlNPTiB9ID0gYnJlYWtQb2ludFV0aWxpdGllcztcblxuZXhwb3J0IGRlZmF1bHQgZGVmaW5lKGNsYXNzIFRlcm0gZXh0ZW5kcyBFbGVtZW50IHtcbiAgY29uc3RydWN0b3IoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCB0eXBlLCBwcm92aXNpb25hbCkge1xuICAgIHN1cGVyKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgcHJvdmlzaW9uYWwpO1xuXG4gICAgdGhpcy50eXBlID0gdHlwZTtcbiAgICB0aGlzLnByb3Zpc2lvbmFsID0gcHJvdmlzaW9uYWw7XG4gIH1cblxuICBnZXRUeXBlKCkge1xuICAgIHJldHVybiB0aGlzLnR5cGU7XG4gIH1cblxuICBpc1Byb3Zpc2lvbmFsKCkge1xuICAgIHJldHVybiB0aGlzLnByb3Zpc2lvbmFsO1xuICB9XG5cbiAgc2V0VHlwZSh0eXBlKSB7XG4gICAgdGhpcy50eXBlID0gdHlwZTtcbiAgfVxuXG4gIHNldFByb3Zpc2lvbmFsKHByb3Zpc2lvbmFsKSB7XG4gICAgdGhpcy5wcm92aXNpb25hbCA9IHByb3Zpc2lvbmFsO1xuICB9XG5cbiAgZ2V0VGVybU5vZGUoKSB7XG4gICAgY29uc3Qgbm9kZSA9IHRoaXMuZ2V0Tm9kZSgpLFxuICAgICAgICAgIHRlcm1Ob2RlID0gbm9kZTsgIC8vL1xuXG4gICAgcmV0dXJuIHRlcm1Ob2RlO1xuICB9XG5cbiAgZ2V0VmFyaWFibGVOb2RlKCkge1xuICAgIGNvbnN0IHRlcm1Ob2RlID0gdGhpcy5nZXRUZXJtTm9kZSgpLFxuICAgICAgICAgIHZhcmlhYmxlTm9kZSA9IHRlcm1Ob2RlLmdldFZhcmlhYmxlTm9kZSgpO1xuXG4gICAgcmV0dXJuIHZhcmlhYmxlTm9kZTtcbiAgfVxuXG4gIGdldFZhcmlhYmxlSWRlbnRpZmllcigpIHtcbiAgICBjb25zdCB0ZXJtTm9kZSA9IHRoaXMuZ2V0VGVybU5vZGUoKSxcbiAgICAgICAgICB2YXJpYWJsZUlkZW50aWZpZXIgPSB0ZXJtTm9kZS5nZXRWYXJpYWJsZUlkZW50aWZpZXIoKTtcblxuICAgIHJldHVybiB2YXJpYWJsZUlkZW50aWZpZXI7XG4gIH1cblxuICBpc0VzdGFibGlzaGVkKCkge1xuICAgIGNvbnN0IHByb3Zpc2lvbmFsID0gdGhpcy5pc1Byb3Zpc2lvbmFsKCksXG4gICAgICAgICAgZXN0YWJsaXNoZWQgPSAhcHJvdmlzaW9uYWw7XG5cbiAgICByZXR1cm4gZXN0YWJsaXNoZWQ7XG4gIH1cblxuICBpc0VxdWFsVG8odGVybSkge1xuICAgIGNvbnN0IHRlcm1Ob2RlID0gdGVybS5nZXROb2RlKCksXG4gICAgICAgICAgdGVybU5vZGVNYXRjaGVzID0gdGhpcy5tYXRjaFRlcm1Ob2RlKHRlcm1Ob2RlKSxcbiAgICAgICAgICBlcXVhbFRvID0gdGVybU5vZGVNYXRjaGVzOyAgLy8vXG5cbiAgICByZXR1cm4gZXF1YWxUbztcbiAgfVxuXG4gIGlzR3JvdW5kZWQoZGVmaW5lZFZhcmlhYmxlcywgY29udGV4dCkge1xuICAgIGNvbnN0IHRlcm0gID0gdGhpcywgLy8vXG4gICAgICAgICAgdmFyaWFibGVzID0gdmFyaWFibGVzRnJvbVRlcm0odGVybSwgY29udGV4dCk7XG5cbiAgICBmaWx0ZXIodmFyaWFibGVzLCAodmFyaWFibGUpID0+IHtcbiAgICAgIGNvbnN0IGRlZmluZWRWYXJpYWJsZXNJbmNsdWRlc1ZhcmlhYmxlID0gZGVmaW5lZFZhcmlhYmxlcy5pbmNsdWRlcyh2YXJpYWJsZSk7XG5cbiAgICAgIGlmICghZGVmaW5lZFZhcmlhYmxlc0luY2x1ZGVzVmFyaWFibGUpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBjb25zdCB1bmRlZmluZWRWYXJpYWJsZXMgPSB2YXJpYWJsZXMsIC8vL1xuICAgICAgICAgIHVuZGVmaW5lZFZhcmlhYmxlc0xlbmd0aCA9IHVuZGVmaW5lZFZhcmlhYmxlcy5sZW5ndGgsXG4gICAgICAgICAgZ3JvdW5kZWQgPSAodW5kZWZpbmVkVmFyaWFibGVzTGVuZ3RoIDw9IDEpO1xuXG4gICAgcmV0dXJuIGdyb3VuZGVkO1xuICB9XG5cbiAgaXNTaW5ndWxhcigpIHtcbiAgICBjb25zdCB0ZXJtTm9kZSA9IHRoaXMuZ2V0VGVybU5vZGUoKSxcbiAgICAgICAgICBzaW5ndWxhciA9IHRlcm1Ob2RlLmlzU2luZ3VsYXIoKTtcblxuICAgIHJldHVybiBzaW5ndWxhcjtcbiAgfVxuXG4gIGlzSW5pdGlhbGx5R3JvdW5kZWQoY29udGV4dCkge1xuICAgIGNvbnN0IHRlcm0gID0gdGhpcywgLy8vXG4gICAgICAgICAgdmFyaWFibGVzID0gdmFyaWFibGVzRnJvbVRlcm0odGVybSwgY29udGV4dCksXG4gICAgICAgICAgdmFyaWFibGVzTGVuZ3RoID0gdmFyaWFibGVzLmxlbmd0aCxcbiAgICAgICAgICBpbml0aWFsbHlHcm91bmRlZCA9ICh2YXJpYWJsZXNMZW5ndGggPT09IDApO1xuXG4gICAgcmV0dXJuIGluaXRpYWxseUdyb3VuZGVkO1xuICB9XG5cbiAgaXNJbXBsaWNpdGx5R3JvdW5kZWQoZGVmaW5lZFZhcmlhYmxlcywgY29udGV4dCkge1xuICAgIGNvbnN0IGdyb3VuZGVkID0gdGhpcy5pc0dyb3VuZGVkKGRlZmluZWRWYXJpYWJsZXMsIGNvbnRleHQpLFxuICAgICAgICAgIGltcGxpY2l0bHlHcm91bmRlZCA9IGdyb3VuZGVkOyAgLy8vXG5cbiAgICByZXR1cm4gaW1wbGljaXRseUdyb3VuZGVkO1xuICB9XG5cbiAgbWF0Y2hUZXJtTm9kZSh0ZXJtTm9kZSkge1xuICAgIGNvbnN0IG5vZGUgPSB0ZXJtTm9kZSwgLy8vXG4gICAgICAgICAgbm9kZU1hdGNoZXMgPSB0aGlzLm1hdGNoTm9kZShub2RlKSxcbiAgICAgICAgICB0ZXJtTm9kZU1hdGNoZXMgPSBub2RlTWF0Y2hlczsgLy8vXG5cbiAgICByZXR1cm4gdGVybU5vZGVNYXRjaGVzO1xuICB9XG5cbiAgbWF0Y2hWYXJpYWJsZU5vZGUodmFyaWFibGVOb2RlKSB7XG4gICAgbGV0IHZhcmlhYmxlTm9kZU1hdGNoZXMgPSBmYWxzZTtcblxuICAgIGNvbnN0IHNpbmd1bGFyID0gdGhpcy5pc1Npbmd1bGFyKCk7XG5cbiAgICBpZiAoc2luZ3VsYXIpIHtcbiAgICAgIGNvbnN0IHZhcmlhYmxlTm9kZUEgPSB2YXJpYWJsZU5vZGU7IC8vL1xuXG4gICAgICB2YXJpYWJsZU5vZGUgPSB0aGlzLmdldFZhcmlhYmxlTm9kZSgpO1xuXG4gICAgICBjb25zdCB2YXJpYWJsZU5vZGVCID0gdmFyaWFibGVOb2RlLCAvLy9cbiAgICAgICAgICAgIHZhcmlhYmxlTm9kZUFNYXRjaGVzVmFyaWFibGVOb2RlQiA9IHZhcmlhYmxlTm9kZUEubWF0Y2godmFyaWFibGVOb2RlQik7XG5cbiAgICAgIGlmICh2YXJpYWJsZU5vZGVBTWF0Y2hlc1ZhcmlhYmxlTm9kZUIpIHtcbiAgICAgICAgdmFyaWFibGVOb2RlTWF0Y2hlcyA9IHRydWU7IC8vL1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB2YXJpYWJsZU5vZGVNYXRjaGVzO1xuICB9XG5cbiAgY29tcGFyZVRlcm0odGVybSkge1xuICAgIGNvbnN0IHRlcm1Ob2RlID0gdGVybS5nZXROb2RlKCksXG4gICAgICAgICAgdGVybU5vZGVNYXRjaGVzID0gdGhpcy5tYXRjaE5vZGUodGVybU5vZGUpLFxuICAgICAgICAgIGNvbXBhcmVzVG8gPSB0ZXJtTm9kZU1hdGNoZXM7IC8vL1xuXG4gICAgcmV0dXJuIGNvbXBhcmVzVG87XG4gIH1cblxuICBjb21wYXJlUGFyYW1ldGVyKHBhcmFtZXRlcikge1xuICAgIGxldCBjb21wYXJlc1RvUGFyYW10ZXIgPSBmYWxzZTtcblxuICAgIGNvbnN0IHNpbmd1bGFyID0gdGhpcy5pc1Npbmd1bGFyKCk7XG5cbiAgICBpZiAoc2luZ3VsYXIpIHtcbiAgICAgIGNvbnN0IHBhcmFtZXRlcklkZW50aWZpZXIgPSBwYXJhbWV0ZXIuZ2V0SWRlbnRpZmllcigpO1xuXG4gICAgICBpZiAocGFyYW1ldGVySWRlbnRpZmllciAhPT0gbnVsbCkge1xuICAgICAgICBjb25zdCB2YXJpYWJsZUlkZW50aWZpZXIgPSB0aGlzLmdldFZhcmlhYmxlSWRlbnRpZmllcigpO1xuXG4gICAgICAgIGlmIChwYXJhbWV0ZXJJZGVudGlmaWVyID09PSB2YXJpYWJsZUlkZW50aWZpZXIpIHtcbiAgICAgICAgICBjb21wYXJlc1RvUGFyYW10ZXIgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbXBhcmVzVG9QYXJhbXRlcjtcbiAgfVxuXG4gIGZpbmRWYWxpZFRlcm0oY29udGV4dCkge1xuICAgIGNvbnN0IHRlcm1Ob2RlID0gdGhpcy5nZXRUZXJtTm9kZSgpLFxuICAgICAgICAgIHRlcm0gPSBjb250ZXh0LmZpbmRUZXJtQnlUZXJtTm9kZSh0ZXJtTm9kZSksXG4gICAgICAgICAgdmFsaWRUZXJtID0gdGVybTsgLy8vXG5cbiAgICByZXR1cm4gdmFsaWRUZXJtO1xuICB9XG5cbiAgdmFsaWRhdGUoY29udGV4dCwgY29udGludWF0aW9uKSB7XG4gICAgY29uc3QgdGVybVN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7ICAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke3Rlcm1TdHJpbmd9JyB0ZXJtLi4uYCk7XG5cbiAgICBjb25zdCB2YWxpZFRlcm0gPSB0aGlzLmZpbmRWYWxpZFRlcm0oY29udGV4dCk7XG5cbiAgICBpZiAodmFsaWRUZXJtICE9PSBudWxsKSB7XG4gICAgICBjb25zdCB0ZXJtID0gdmFsaWRUZXJtOyAvLy9cblxuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udGhlICcke3Rlcm1TdHJpbmd9JyB0ZXJtIGlzIGFscmVhZHkgdmFsaWQuYCk7XG5cbiAgICAgIHJldHVybiBjb250aW51YXRpb24odGVybSwgY29udGV4dCk7XG4gICAgfVxuXG4gICAgbGV0IHRlcm0gPSB0aGlzO1xuXG4gICAgZXhpc3RzKHZhbGlkYXRlVGVybXMsIHRlcm0sIGNvbnRleHQsICh0ZXJtVmFsaWRhdGVzKSA9PiB7XG4gICAgICBpZiAodGVybVZhbGlkYXRlcykge1xuICAgICAgICBjb250ZXh0LmFkZFRlcm0odGVybSk7XG5cbiAgICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmFsaWRhdGVkIHRoZSAnJHt0ZXJtU3RyaW5nfScgdGVybS5gKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRlcm0gPSBudWxsO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gY29udGludWF0aW9uKHRlcm0sIGNvbnRleHQpO1xuICAgIH0pO1xuICB9XG5cbiAgdmFsaWRhdGVHaXZlblR5cGUodHlwZSwgc3RyaWN0LCBjb250ZXh0KSB7XG4gICAgaWYgKGNvbnRleHQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgY29udGV4dCA9IHN0cmljdDsgLy8vXG5cbiAgICAgIHN0cmljdCA9IHRydWU7XG4gICAgfVxuXG4gICAgbGV0IHRlcm07XG5cbiAgICBjb25zdCB0eXBlU3RyaW5nID0gdHlwZS5nZXRTdHJpbmcoKSxcbiAgICAgICAgICB0ZXJtU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgIC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7dGVybVN0cmluZ30nIHRlcm0gZ2l2ZW4gdGhlICcke3R5cGVTdHJpbmd9JyB0eXBlLi4uYCk7XG5cbiAgICBsZXQgdmFsaWRhdGVzR2l2ZW5UeXBlID0gZmFsc2U7XG5cbiAgICB0ZXJtID0gdGhpcy52YWxpZGF0ZShjb250ZXh0LCAodGVybSwgY29udGV4dCkgPT4ge1xuICAgICAgbGV0IHZhbGlkYXRlc0ZvcndhcmRzID0gZmFsc2U7XG5cbiAgICAgIGNvbnN0IHRlcm1UeXBlID0gdGVybS5nZXRUeXBlKCksXG4gICAgICAgICAgICB0ZXJtVHlwZUVxdWFsVG9PclN1YlR5cGVPZlR5cGUgPSB0ZXJtVHlwZS5pc0VxdWFsVG9PclN1YlR5cGVPZih0eXBlKTtcblxuICAgICAgaWYgKHRlcm1UeXBlRXF1YWxUb09yU3ViVHlwZU9mVHlwZSkge1xuICAgICAgICB2YWxpZGF0ZXNGb3J3YXJkcyA9IHRydWU7XG5cbiAgICAgICAgaWYgKHN0cmljdCkge1xuICAgICAgICAgIGNvbnN0IHR5cGVFc3RhYmxpc2hlZCA9IHR5cGUuaXNFc3RhYmxpc2hlZCgpLFxuICAgICAgICAgICAgICAgIHRlcm1Qcm92aXNpb25hbCA9IHRlcm0uaXNQcm92aXNpb25hbCgpO1xuXG4gICAgICAgICAgaWYgKHR5cGVFc3RhYmxpc2hlZCAmJiB0ZXJtUHJvdmlzaW9uYWwpIHtcbiAgICAgICAgICAgIHZhbGlkYXRlc0ZvcndhcmRzID0gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB2YWxpZGF0ZXNGb3J3YXJkcztcbiAgICB9KTtcblxuICAgIGlmICh0ZXJtICE9PSBudWxsKSB7XG4gICAgICB2YWxpZGF0ZXNHaXZlblR5cGUgPSB0cnVlO1xuICAgIH1cblxuICAgIGlmICh2YWxpZGF0ZXNHaXZlblR5cGUpIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlZCB0aGUgJyR7dGVybVN0cmluZ30nIHRlcm0gZ2l2ZW4gdGhlICcke3R5cGVTdHJpbmd9JyB0eXBlLmApO1xuICAgIH1cblxuICAgIHJldHVybiB0ZXJtO1xuICB9XG5cbiAgdmFsaWRhdGVBc1Byb3BlcnR5KGNvbnRleHQsIHZhbGlkYXRlRm9yd2FyZHMpIHtcbiAgICBsZXQgdGVybSA9IG51bGw7XG5cbiAgICBjb25zdCB0ZXJtU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgIC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7dGVybVN0cmluZ30nIHRlcm0gYXMgYSBwcm9wZXJ0eS4uLmApO1xuXG4gICAgbGV0IHZhbGlkYXRlc0FzUHJvcGVydHkgPSBmYWxzZTtcblxuICAgIGNvbnN0IHZhbGlkVGVybSA9IHRoaXMuZmluZFZhbGlkVGVybShjb250ZXh0KTtcblxuICAgIGlmICh2YWxpZFRlcm0gIT09IG51bGwpIHtcbiAgICAgIHRlcm0gPSB2YWxpZFRlcm07IC8vL1xuXG4gICAgICBjb25zdCB2YWxpZGF0ZXNGb3J3YXJkID0gdmFsaWRhdGVGb3J3YXJkcyh0ZXJtLCBjb250ZXh0KTtcblxuICAgICAgaWYgKHZhbGlkYXRlc0ZvcndhcmQpIHtcbiAgICAgICAgdmFsaWRhdGVzQXNQcm9wZXJ0eSA9IHRydWU7XG5cbiAgICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udGhlICcke3Rlcm1TdHJpbmd9JyB0ZXJtIGlzIGFscmVhZHkgdmFsaWQuYCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0ZXJtID0gbnVsbDtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGVybSA9IHRoaXM7ICAvLy9cblxuICAgICAgY29uc3QgdGVybVVuaWZpZXNXaXRoUHJvcGVydGllcyA9IHVuaWZ5VGVybVdpdGhQcm9wZXJ0aWVzKHRlcm0sIGNvbnRleHQsIHZhbGlkYXRlRm9yd2FyZHMpO1xuXG4gICAgICBpZiAodGVybVVuaWZpZXNXaXRoUHJvcGVydGllcykge1xuICAgICAgICB2YWxpZGF0ZXNBc1Byb3BlcnR5ID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRlcm0gPSBudWxsO1xuICAgICAgfVxuXG4gICAgICBpZiAodmFsaWRhdGVzQXNQcm9wZXJ0eSkge1xuICAgICAgICBjb250ZXh0LmFkZFRlcm0odGVybSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHZhbGlkYXRlc0FzUHJvcGVydHkpIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlZCB0aGUgJyR7dGVybVN0cmluZ30nIHRlcm0gYXMgYSBwcm9wZXJ0eS5gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGVybTtcbiAgfVxuXG4gIHVuaWZ5VGVybSh0ZXJtLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0KSB7XG4gICAgbGV0IHRlcm1VbmlmaWVzID0gZmFsc2U7XG5cbiAgICBjb25zdCBjb250ZXh0ID0gc3BlY2lmaWNDb250ZXh0LCAgLy8vXG4gICAgICAgICAgZ2VuZXJhbFRlcm0gPSB0aGlzLFxuICAgICAgICAgIHNwZWNpZmljVGVybSA9IHRlcm0sXG4gICAgICAgICAgZ2VuZXJhbFRlcm1TdHJpbmcgPSBnZW5lcmFsVGVybS5nZXRTdHJpbmcoKSxcbiAgICAgICAgICBzcGVjaWZpeFRlcm1TdHJpbmcgPSBzcGVjaWZpY1Rlcm0uZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBVbmlmeWluZyB0aGUgJyR7c3BlY2lmaXhUZXJtU3RyaW5nfScgdGVybSB3aXRoIHRoZSAnJHtnZW5lcmFsVGVybVN0cmluZ30nIHRlcm0uLi5gKTtcblxuICAgIGNvbnN0IHRlcm1VbmlmaWVzSW50cmluc2ljYWxseSA9IHVuaWZ5VGVybUludHJpbnNpY2FsbHkoZ2VuZXJhbFRlcm0sIHNwZWNpZmljVGVybSwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCk7XG5cbiAgICBpZiAodGVybVVuaWZpZXNJbnRyaW5zaWNhbGx5KSB7XG4gICAgICB0ZXJtVW5pZmllcyA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKHRlcm1VbmlmaWVzKSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi51bmlmaWVkIHRoZSAnJHtzcGVjaWZpeFRlcm1TdHJpbmd9JyB0ZXJtIHdpdGggdGhlICcke2dlbmVyYWxUZXJtU3RyaW5nfScgdGVybS5gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGVybVVuaWZpZXM7XG4gIH1cblxuICB0b0pTT04oKSB7XG4gICAgY29uc3QgdHlwZUpTT04gPSB0eXBlVG9UeXBlSlNPTih0aGlzLnR5cGUpLFxuICAgICAgICAgIHByb3Zpc2lvbmFsSlNPTiA9IHByb3Zpc2lvbmFsVG9Qcm92aXNpb25hbEpTT04odGhpcy5wcm92aXNpb25hbCksXG4gICAgICAgICAgc3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTtcblxuICAgIGxldCBicmVha1BvaW50O1xuXG4gICAgYnJlYWtQb2ludCA9IHRoaXMuZ2V0QnJlYWtQb2ludCgpO1xuXG4gICAgY29uc3QgYnJlYWtQb2ludEpTT04gPSBicmVha1BvaW50VG9CcmVha1BvaW50SlNPTihicmVha1BvaW50KTtcblxuICAgIGJyZWFrUG9pbnQgPSBicmVha1BvaW50SlNPTjsgIC8vL1xuXG4gICAgY29uc3QgdHlwZSA9IHR5cGVKU09OLCAgLy8vXG4gICAgICAgICAgcHJvdmlzaW9uYWwgPSBwcm92aXNpb25hbEpTT04sICAvLy9cbiAgICAgICAgICBqc29uID0ge1xuICAgICAgICAgICAgc3RyaW5nLFxuICAgICAgICAgICAgYnJlYWtQb2ludCxcbiAgICAgICAgICAgIHR5cGUsXG4gICAgICAgICAgICBwcm92aXNpb25hbFxuICAgICAgICAgIH07XG5cbiAgICByZXR1cm4ganNvbjtcbiAgfVxuXG4gIHN0YXRpYyBuYW1lID0gXCJUZXJtXCI7XG5cbiAgc3RhdGljIGZyb21KU09OKGpzb24sIGNvbnRleHQpIHtcbiAgICByZXR1cm4gaW5zdGFudGlhdGUoKGNvbnRleHQpID0+IHtcbiAgICAgIGNvbnN0IHsgc3RyaW5nIH0gPSBqc29uLFxuICAgICAgICAgICAgdGVybU5vZGUgPSBpbnN0YW50aWF0ZVRlcm0oc3RyaW5nLCBjb250ZXh0KSxcbiAgICAgICAgICAgIG5vZGUgPSB0ZXJtTm9kZSwgIC8vL1xuICAgICAgICAgICAgYnJlYWtQb2ludCA9IGJyZWFrUG9pbnRGcm9tSlNPTihqc29uKSxcbiAgICAgICAgICAgIHR5cGUgPSB0eXBlRnJvbUpTT04oanNvbiwgY29udGV4dCksXG4gICAgICAgICAgICBwcm92aXNpb25hbCA9IHByb3Zpc2lvbmFsRnJvbUpTT04oanNvbiwgY29udGV4dCk7XG5cbiAgICAgIGNvbnRleHQgPSBudWxsO1xuXG4gICAgICBjb25zdCB0ZXJtID0gbmV3IFRlcm0oY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCB0eXBlLCBwcm92aXNpb25hbCk7XG5cbiAgICAgIHJldHVybiB0ZXJtO1xuICAgIH0sIGNvbnRleHQpO1xuICB9XG59KTtcbiJdLCJuYW1lcyI6WyJmaWx0ZXIiLCJhcnJheVV0aWxpdGllcyIsImJyZWFrUG9pbnRGcm9tSlNPTiIsImJyZWFrUG9pbnRUb0JyZWFrUG9pbnRKU09OIiwiYnJlYWtQb2ludFV0aWxpdGllcyIsImRlZmluZSIsIlRlcm0iLCJFbGVtZW50IiwiY29udGV4dCIsInN0cmluZyIsIm5vZGUiLCJicmVha1BvaW50IiwidHlwZSIsInByb3Zpc2lvbmFsIiwiZ2V0VHlwZSIsImlzUHJvdmlzaW9uYWwiLCJzZXRUeXBlIiwic2V0UHJvdmlzaW9uYWwiLCJnZXRUZXJtTm9kZSIsImdldE5vZGUiLCJ0ZXJtTm9kZSIsImdldFZhcmlhYmxlTm9kZSIsInZhcmlhYmxlTm9kZSIsImdldFZhcmlhYmxlSWRlbnRpZmllciIsInZhcmlhYmxlSWRlbnRpZmllciIsImlzRXN0YWJsaXNoZWQiLCJlc3RhYmxpc2hlZCIsImlzRXF1YWxUbyIsInRlcm0iLCJ0ZXJtTm9kZU1hdGNoZXMiLCJtYXRjaFRlcm1Ob2RlIiwiZXF1YWxUbyIsImlzR3JvdW5kZWQiLCJkZWZpbmVkVmFyaWFibGVzIiwidmFyaWFibGVzIiwidmFyaWFibGVzRnJvbVRlcm0iLCJ2YXJpYWJsZSIsImRlZmluZWRWYXJpYWJsZXNJbmNsdWRlc1ZhcmlhYmxlIiwiaW5jbHVkZXMiLCJ1bmRlZmluZWRWYXJpYWJsZXMiLCJ1bmRlZmluZWRWYXJpYWJsZXNMZW5ndGgiLCJsZW5ndGgiLCJncm91bmRlZCIsImlzU2luZ3VsYXIiLCJzaW5ndWxhciIsImlzSW5pdGlhbGx5R3JvdW5kZWQiLCJ2YXJpYWJsZXNMZW5ndGgiLCJpbml0aWFsbHlHcm91bmRlZCIsImlzSW1wbGljaXRseUdyb3VuZGVkIiwiaW1wbGljaXRseUdyb3VuZGVkIiwibm9kZU1hdGNoZXMiLCJtYXRjaE5vZGUiLCJtYXRjaFZhcmlhYmxlTm9kZSIsInZhcmlhYmxlTm9kZU1hdGNoZXMiLCJ2YXJpYWJsZU5vZGVBIiwidmFyaWFibGVOb2RlQiIsInZhcmlhYmxlTm9kZUFNYXRjaGVzVmFyaWFibGVOb2RlQiIsIm1hdGNoIiwiY29tcGFyZVRlcm0iLCJjb21wYXJlc1RvIiwiY29tcGFyZVBhcmFtZXRlciIsInBhcmFtZXRlciIsImNvbXBhcmVzVG9QYXJhbXRlciIsInBhcmFtZXRlcklkZW50aWZpZXIiLCJnZXRJZGVudGlmaWVyIiwiZmluZFZhbGlkVGVybSIsImZpbmRUZXJtQnlUZXJtTm9kZSIsInZhbGlkVGVybSIsInZhbGlkYXRlIiwiY29udGludWF0aW9uIiwidGVybVN0cmluZyIsImdldFN0cmluZyIsInRyYWNlIiwiZGVidWciLCJleGlzdHMiLCJ2YWxpZGF0ZVRlcm1zIiwidGVybVZhbGlkYXRlcyIsImFkZFRlcm0iLCJ2YWxpZGF0ZUdpdmVuVHlwZSIsInN0cmljdCIsInVuZGVmaW5lZCIsInR5cGVTdHJpbmciLCJ2YWxpZGF0ZXNHaXZlblR5cGUiLCJ2YWxpZGF0ZXNGb3J3YXJkcyIsInRlcm1UeXBlIiwidGVybVR5cGVFcXVhbFRvT3JTdWJUeXBlT2ZUeXBlIiwiaXNFcXVhbFRvT3JTdWJUeXBlT2YiLCJ0eXBlRXN0YWJsaXNoZWQiLCJ0ZXJtUHJvdmlzaW9uYWwiLCJ2YWxpZGF0ZUFzUHJvcGVydHkiLCJ2YWxpZGF0ZUZvcndhcmRzIiwidmFsaWRhdGVzQXNQcm9wZXJ0eSIsInZhbGlkYXRlc0ZvcndhcmQiLCJ0ZXJtVW5pZmllc1dpdGhQcm9wZXJ0aWVzIiwidW5pZnlUZXJtV2l0aFByb3BlcnRpZXMiLCJ1bmlmeVRlcm0iLCJnZW5lcmFsQ29udGV4dCIsInNwZWNpZmljQ29udGV4dCIsInRlcm1VbmlmaWVzIiwiZ2VuZXJhbFRlcm0iLCJzcGVjaWZpY1Rlcm0iLCJnZW5lcmFsVGVybVN0cmluZyIsInNwZWNpZml4VGVybVN0cmluZyIsInRlcm1VbmlmaWVzSW50cmluc2ljYWxseSIsInVuaWZ5VGVybUludHJpbnNpY2FsbHkiLCJ0b0pTT04iLCJ0eXBlSlNPTiIsInR5cGVUb1R5cGVKU09OIiwicHJvdmlzaW9uYWxKU09OIiwicHJvdmlzaW9uYWxUb1Byb3Zpc2lvbmFsSlNPTiIsImdldEJyZWFrUG9pbnQiLCJicmVha1BvaW50SlNPTiIsImpzb24iLCJuYW1lIiwiZnJvbUpTT04iLCJpbnN0YW50aWF0ZSIsImluc3RhbnRpYXRlVGVybSIsInR5cGVGcm9tSlNPTiIsInByb3Zpc2lvbmFsRnJvbUpTT04iXSwibWFwcGluZ3MiOiJBQUFBOzs7OytCQWlCQTs7O2VBQUE7OzsyQkFmK0I7Z0NBQ2M7MEJBRXRCOzhCQUNBO3lCQUNLOzZCQUNJOzZCQUNFO3VCQUNLOzRCQUNnQjtzQkFDeUM7QUFFaEcsTUFBTSxFQUFFQSxNQUFNLEVBQUUsR0FBR0MseUJBQWMsRUFDM0IsRUFBRUMsa0JBQWtCLEVBQUVDLDBCQUEwQixFQUFFLEdBQUdDLG1DQUFtQjtNQUU5RSxXQUFlQyxJQUFBQSxnQkFBTSxFQUFDLE1BQU1DLGFBQWFDLHVCQUFPO0lBQzlDLFlBQVlDLE9BQU8sRUFBRUMsTUFBTSxFQUFFQyxJQUFJLEVBQUVDLFVBQVUsRUFBRUMsSUFBSSxFQUFFQyxXQUFXLENBQUU7UUFDaEUsS0FBSyxDQUFDTCxTQUFTQyxRQUFRQyxNQUFNQyxZQUFZRTtRQUV6QyxJQUFJLENBQUNELElBQUksR0FBR0E7UUFDWixJQUFJLENBQUNDLFdBQVcsR0FBR0E7SUFDckI7SUFFQUMsVUFBVTtRQUNSLE9BQU8sSUFBSSxDQUFDRixJQUFJO0lBQ2xCO0lBRUFHLGdCQUFnQjtRQUNkLE9BQU8sSUFBSSxDQUFDRixXQUFXO0lBQ3pCO0lBRUFHLFFBQVFKLElBQUksRUFBRTtRQUNaLElBQUksQ0FBQ0EsSUFBSSxHQUFHQTtJQUNkO0lBRUFLLGVBQWVKLFdBQVcsRUFBRTtRQUMxQixJQUFJLENBQUNBLFdBQVcsR0FBR0E7SUFDckI7SUFFQUssY0FBYztRQUNaLE1BQU1SLE9BQU8sSUFBSSxDQUFDUyxPQUFPLElBQ25CQyxXQUFXVixNQUFPLEdBQUc7UUFFM0IsT0FBT1U7SUFDVDtJQUVBQyxrQkFBa0I7UUFDaEIsTUFBTUQsV0FBVyxJQUFJLENBQUNGLFdBQVcsSUFDM0JJLGVBQWVGLFNBQVNDLGVBQWU7UUFFN0MsT0FBT0M7SUFDVDtJQUVBQyx3QkFBd0I7UUFDdEIsTUFBTUgsV0FBVyxJQUFJLENBQUNGLFdBQVcsSUFD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