occam-nominal 1.0.389 → 1.0.391

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.
@@ -45,17 +45,6 @@ const _default = (0, _elements.define)(class Equality extends _occamlanguages.El
45
45
  const rightTermNode = this.rightTerm.getNode();
46
46
  return rightTermNode;
47
47
  }
48
- getType() {
49
- let type;
50
- const leftTermType = this.leftTerm.getType(), rightTermType = this.rightTerm.getType(), leftTermTypeEqualToOrSubTypeOfRightTermType = leftTermType.isEqualToOrSubTypeOf(rightTermType), rightTermTypeEqualToOrSubTypeOfLeftTermType = rightTermType.isEqualToOrSubTypeOf(leftTermType);
51
- if (leftTermTypeEqualToOrSubTypeOfRightTermType) {
52
- type = leftTermType; ///
53
- }
54
- if (rightTermTypeEqualToOrSubTypeOfLeftTermType) {
55
- type = rightTermType; ///
56
- }
57
- return type;
58
- }
59
48
  getTerms() {
60
49
  const terms = [
61
50
  this.leftTerm,
@@ -125,8 +114,8 @@ const _default = (0, _elements.define)(class Equality extends _occamlanguages.El
125
114
  const leftTermValidates = this.leftTerm.validate(context, (leftTerm, context)=>{
126
115
  const rightTermValidtes = this.rightTerm.validate(context, (rightTerm, context)=>{
127
116
  let validates = false;
128
- const leftTermType = leftTerm.getType(), rightTermType = rightTerm.getType(), leftTermTypeEqualToSubTypeOrSuperTypeOfRightTermType = leftTermType.isEqualToSubTypeOrSuperTypeOf(rightTermType);
129
- if (leftTermTypeEqualToSubTypeOrSuperTypeOfRightTermType) {
117
+ const leftTermType = leftTerm.getType(), rightTermType = rightTerm.getType(), leftTermTypeJoinedToRightTermType = leftTermType.isJoinedTo(rightTermType);
118
+ if (leftTermTypeJoinedToRightTermType) {
130
119
  this.leftTerm = leftTerm;
131
120
  this.rightTerm = rightTerm;
132
121
  validates = continuation(context);
@@ -221,4 +210,4 @@ function rightTermFromEqualityNode(equalityNode, context) {
221
210
  return rightTerm;
222
211
  }
223
212
 
224
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9lbGVtZW50L2VxdWFsaXR5LmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBFbGVtZW50LCBicmVha1BvaW50VXRpbGl0aWVzIH0gZnJvbSBcIm9jY2FtLWxhbmd1YWdlc1wiO1xuXG5pbXBvcnQgeyBkZWZpbmUgfSBmcm9tIFwiLi4vZWxlbWVudHNcIjtcbmltcG9ydCB7IGVxdWF0ZVRlcm1zIH0gZnJvbSBcIi4uL3Byb2Nlc3MvZXF1YXRlXCI7XG5pbXBvcnQgeyBpbnN0YW50aWF0ZSB9IGZyb20gXCIuLi91dGlsaXRpZXMvY29udGV4dFwiO1xuaW1wb3J0IHsgYWxsLCBleGlzdHMgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2NvbnRpbnVhdGlvblwiO1xuaW1wb3J0IHsgaW5zdGFudGlhdGVFcXVhbGl0eSB9IGZyb20gXCIuLi9wcm9jZXNzL2luc3RhbnRpYXRlXCI7XG5pbXBvcnQgeyBlcXVhbGl0eUZyb21TdGF0ZW1lbnROb2RlIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9lbGVtZW50XCI7XG5pbXBvcnQgeyBlcXVhbGl0eUFzc2lnbm1lbnRGcm9tRXF1YWxpdHksIGxlZnRWYXJpYWJsZUFzc2lnbm1lbnRGcm9tRXF1YWxpdHksIHJpZ2h0VmFyaWFibGVBc3NpZ25tZW50RnJvbUVxdWFsaXR5IH0gZnJvbSBcIi4uL3Byb2Nlc3MvYXNzaWduXCI7XG5cbmNvbnN0IHsgYnJlYWtQb2ludEZyb21KU09OLCBicmVha1BvaW50VG9CcmVha1BvaW50SlNPTiB9ID0gYnJlYWtQb2ludFV0aWxpdGllcztcblxuZXhwb3J0IGRlZmF1bHQgZGVmaW5lKGNsYXNzIEVxdWFsaXR5IGV4dGVuZHMgRWxlbWVudCB7XG4gIGNvbnN0cnVjdG9yKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgbmVnYXRlZCwgbGVmdFRlcm0sIHJpZ2h0VGVybSkge1xuICAgIHN1cGVyKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCk7XG5cbiAgICB0aGlzLm5lZ2F0ZWQgPSBuZWdhdGVkO1xuICAgIHRoaXMubGVmdFRlcm0gPSBsZWZ0VGVybTtcbiAgICB0aGlzLnJpZ2h0VGVybSA9IHJpZ2h0VGVybTtcbiAgfVxuXG4gIGlzTmVnYXRlZCgpIHtcbiAgICByZXR1cm4gdGhpcy5uZWdhdGVkO1xuICB9XG5cbiAgZ2V0TGVmdFRlcm0oKSB7XG4gICAgcmV0dXJuIHRoaXMubGVmdFRlcm07XG4gIH1cblxuICBnZXRSaWdodFRlcm0oKSB7XG4gICAgcmV0dXJuIHRoaXMucmlnaHRUZXJtO1xuICB9XG5cbiAgZ2V0RXF1YWxpdHlOb2RlKCkge1xuICAgIGNvbnN0IG5vZGUgPSB0aGlzLmdldE5vZGUoKSxcbiAgICAgICAgICBlcXVhbGl0eU5kZSA9IG5vZGU7IC8vL1xuXG4gICAgcmV0dXJuIGVxdWFsaXR5TmRlO1xuICB9XG5cbiAgZ2V0TGVmdFRlcm1Ob2RlKCkge1xuICAgIGNvbnN0IGxlZnRUZXJtTm9kZSA9IHRoaXMubGVmdFRlcm0uZ2V0Tm9kZSgpO1xuXG4gICAgcmV0dXJuIGxlZnRUZXJtTm9kZTtcbiAgfVxuXG4gIGdldFJpZ2h0VGVybU5vZGUoKSB7XG4gICAgY29uc3QgcmlnaHRUZXJtTm9kZSA9IHRoaXMucmlnaHRUZXJtLmdldE5vZGUoKTtcblxuICAgIHJldHVybiByaWdodFRlcm1Ob2RlO1xuICB9XG5cbiAgZ2V0VHlwZSgpIHtcbiAgICBsZXQgdHlwZTtcblxuICAgIGNvbnN0IGxlZnRUZXJtVHlwZSA9IHRoaXMubGVmdFRlcm0uZ2V0VHlwZSgpLFxuICAgICAgICAgIHJpZ2h0VGVybVR5cGUgPSB0aGlzLnJpZ2h0VGVybS5nZXRUeXBlKCksXG4gICAgICAgICAgbGVmdFRlcm1UeXBlRXF1YWxUb09yU3ViVHlwZU9mUmlnaHRUZXJtVHlwZSA9IGxlZnRUZXJtVHlwZS5pc0VxdWFsVG9PclN1YlR5cGVPZihyaWdodFRlcm1UeXBlKSxcbiAgICAgICAgICByaWdodFRlcm1UeXBlRXF1YWxUb09yU3ViVHlwZU9mTGVmdFRlcm1UeXBlID0gcmlnaHRUZXJtVHlwZS5pc0VxdWFsVG9PclN1YlR5cGVPZihsZWZ0VGVybVR5cGUpO1xuXG4gICAgaWYgKGxlZnRUZXJtVHlwZUVxdWFsVG9PclN1YlR5cGVPZlJpZ2h0VGVybVR5cGUpIHtcbiAgICAgIHR5cGUgPSBsZWZ0VGVybVR5cGU7ICAvLy9cbiAgICB9XG5cbiAgICBpZiAocmlnaHRUZXJtVHlwZUVxdWFsVG9PclN1YlR5cGVPZkxlZnRUZXJtVHlwZSkge1xuICAgICAgdHlwZSA9IHJpZ2h0VGVybVR5cGU7IC8vL1xuICAgIH1cblxuICAgIHJldHVybiB0eXBlO1xuICB9XG5cbiAgZ2V0VGVybXMoKSB7XG4gICAgY29uc3QgdGVybXMgPSBbXG4gICAgICB0aGlzLmxlZnRUZXJtLFxuICAgICAgdGhpcy5yaWdodFRlcm1cbiAgICBdO1xuXG4gICAgcmV0dXJuIHRlcm1zO1xuICB9XG5cbiAgbWF0Y2hFcXVhbGl0eU5vZGUoZXF1YWxpdHlOb2RlKSB7XG4gICAgY29uc3Qgbm9kZSA9IGVxdWFsaXR5Tm9kZSwgLy8vXG4gICAgICAgICAgbm9kZU1hdGNoZXMgPSB0aGlzLm1hdGNoTm9kZShub2RlKSxcbiAgICAgICAgICBlcXVhbGl0eU5vZGVNYXRjaGVzID0gbm9kZU1hdGNoZXM7IC8vL1xuXG4gICAgcmV0dXJuIGVxdWFsaXR5Tm9kZU1hdGNoZXM7XG4gIH1cblxuICBpc0VxdWFsVG8oZXF1YWxpdHkpIHtcbiAgICBjb25zdCBlcXVhbGl0eU5vZGUgPSBlcXVhbGl0eS5nZXROb2RlKCksXG4gICAgICAgICAgZXF1YWxpdHlOb2RlTWF0Y2hlcyA9IHRoaXMubWF0Y2hFcXVhbGl0eU5vZGUoZXF1YWxpdHlOb2RlKSxcbiAgICAgICAgICBlcXVhbFRvID0gZXF1YWxpdHlOb2RlTWF0Y2hlczsgIC8vL1xuXG4gICAgcmV0dXJuIGVxdWFsVG87XG4gIH1cblxuICBpc1JlZmxleGl2ZSgpIHtcbiAgICBsZXQgcmVmbGV4aXZlID0gZmFsc2U7XG5cbiAgICBpZiAoIXRoaXMubmVnYXRlZCkge1xuICAgICAgY29uc3QgbGVmdFRlcm1FcXVhbFRvUmlnaHRUZXJtID0gdGhpcy5sZWZ0VGVybS5pc0VxdWFsVG8odGhpcy5yaWdodFRlcm0pO1xuXG4gICAgICBpZiAobGVmdFRlcm1FcXVhbFRvUmlnaHRUZXJtKSB7XG4gICAgICAgIHJlZmxleGl2ZSA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlZmxleGl2ZTtcbiAgfVxuXG4gIGZpbmRFcXVhbGl0eShjb250ZXh0KSB7XG4gICAgY29uc3QgZXF1YWxpdHlOb2RlID0gdGhpcy5nZXRFcXVhbGl0eU5vZGUoKSxcbiAgICAgICAgICBlcXVhbGl0eSA9IGNvbnRleHQuZmluZEVxdWFsaXR5QnlFcXVhbGl0eU5vZGUoZXF1YWxpdHlOb2RlKTtcblxuICAgIHJldHVybiBlcXVhbGl0eTtcbiAgfVxuXG4gIHZhbGlkYXRlKGNvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICAgIGxldCB2YWxpZGF0ZXM7XG5cbiAgICBjb25zdCBlcXVhbGl0eVN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7ICAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke2VxdWFsaXR5U3RyaW5nfScgZXF1YWxpdHkuLi5gKTtcblxuICAgIGxldCBlcXVhbGl0eTtcblxuICAgIGVxdWFsaXR5ID0gdGhpcy5maW5kRXF1YWxpdHkoY29udGV4dCk7XG5cbiAgICBpZiAoZXF1YWxpdHkgIT09IG51bGwpIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYFRoZSAnJHtlcXVhbGl0eVN0cmluZ30nIGVxdWFsaXR5IGlzIGFscmVhZHkgcHJlc2VudC5gKTtcblxuICAgICAgdmFsaWRhdGVzID0gY29udGludWF0aW9uKGVxdWFsaXR5LCBjb250ZXh0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgZXF1YWxpdHkgPSB0aGlzO1xuXG4gICAgICBjb25zdCB2YWxpZGF0ZVRlcm1zID0gdGhpcy52YWxpZGF0ZVRlcm1zLmJpbmQodGhpcyk7XG5cbiAgICAgIHZhbGlkYXRlcyA9IGFsbChbXG4gICAgICAgIHZhbGlkYXRlVGVybXNcbiAgICAgIF0sIGNvbnRleHQsIChjb250ZXh0KSA9PiB7XG4gICAgICAgIGxldCB2YWxpZGF0ZXM7XG5cbiAgICAgICAgY29uc3QgdmFsaWRhdGVXaGVuU3RhdGVkID0gdGhpcy52YWxpZGF0ZVdoZW5TdGF0ZWQuYmluZCh0aGlzKSxcbiAgICAgICAgICAgICAgdmFsaWRhdGVXaGVuRGVyaXZlZCA9IHRoaXMudmFsaWRhdGVXaGVuRGVyaXZlZC5iaW5kKHRoaXMpO1xuXG4gICAgICAgIHZhbGlkYXRlcyA9IGV4aXN0cyhbXG4gICAgICAgICAgdmFsaWRhdGVXaGVuU3RhdGVkLFxuICAgICAgICAgIHZhbGlkYXRlV2hlbkRlcml2ZWRcbiAgICAgICAgXSwgY29udGV4dCwgKGNvbnRleHQpID0+IHtcbiAgICAgICAgICB0aGlzLmFzc2lnbihjb250ZXh0KTtcblxuICAgICAgICAgIGNvbnRleHQuYWRkRXF1YWxpdHkoZXF1YWxpdHkpO1xuXG4gICAgICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihlcXVhbGl0eSwgY29udGV4dCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiB2YWxpZGF0ZXM7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAodmFsaWRhdGVzKSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke2VxdWFsaXR5U3RyaW5nfScgZXF1YWxpdHkuYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbGlkYXRlcztcbiAgfVxuXG4gIHZhbGlkYXRlVGVybXMoY29udGV4dCwgY29udGludWF0aW9uKSB7XG4gICAgbGV0IHRlcm1zVmFsaWRhdGUgPSBmYWxzZTtcblxuICAgIGNvbnN0IGVxdWFsaXR5U3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0aW5nIHRoZSAnJHtlcXVhbGl0eVN0cmluZ30nIGVxdWFsaXR5J3MgdGVybXMuLi5gKTtcblxuICAgIGNvbnN0IGxlZnRUZXJtVmFsaWRhdGVzID0gdGhpcy5sZWZ0VGVybS52YWxpZGF0ZShjb250ZXh0LCAobGVmdFRlcm0sIGNvbnRleHQpID0+IHtcbiAgICAgIGNvbnN0IHJpZ2h0VGVybVZhbGlkdGVzID0gdGhpcy5yaWdodFRlcm0udmFsaWRhdGUoY29udGV4dCwgKHJpZ2h0VGVybSwgY29udGV4dCkgPT4ge1xuICAgICAgICBsZXQgdmFsaWRhdGVzID0gZmFsc2U7XG5cbiAgICAgICAgY29uc3QgbGVmdFRlcm1UeXBlID0gbGVmdFRlcm0uZ2V0VHlwZSgpLFxuICAgICAgICAgICAgICByaWdodFRlcm1UeXBlID0gcmlnaHRUZXJtLmdldFR5cGUoKSxcbiAgICAgICAgICAgICAgbGVmdFRlcm1UeXBlRXF1YWxUb1N1YlR5cGVPclN1cGVyVHlwZU9mUmlnaHRUZXJtVHlwZSA9IGxlZnRUZXJtVHlwZS5pc0VxdWFsVG9TdWJUeXBlT3JTdXBlclR5cGVPZihyaWdodFRlcm1UeXBlKTtcblxuICAgICAgICBpZiAobGVmdFRlcm1UeXBlRXF1YWxUb1N1YlR5cGVPclN1cGVyVHlwZU9mUmlnaHRUZXJtVHlwZSkge1xuICAgICAgICAgIHRoaXMubGVmdFRlcm0gPSBsZWZ0VGVybTtcblxuICAgICAgICAgIHRoaXMucmlnaHRUZXJtID0gcmlnaHRUZXJtO1xuXG4gICAgICAgICAgdmFsaWRhdGVzID0gY29udGludWF0aW9uKGNvbnRleHQpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHZhbGlkYXRlcztcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gcmlnaHRUZXJtVmFsaWR0ZXM7XG4gICAgfSk7XG5cbiAgICBpZiAobGVmdFRlcm1WYWxpZGF0ZXMpIHtcbiAgICAgIHRlcm1zVmFsaWRhdGUgPSB0cnVlO1xuICAgIH1cblxuICAgIGlmICh0ZXJtc1ZhbGlkYXRlKSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke2VxdWFsaXR5U3RyaW5nfScgZXF1YWxpdHkncyB0ZXJtcy5gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGVybXNWYWxpZGF0ZTtcbiAgfVxuXG4gIHZhbGlkYXRlV2hlblN0YXRlZChjb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgICBsZXQgdmFsaWRhdGVzV2hlblN0YXRlZCA9IGZhbHNlO1xuXG4gICAgY29uc3Qgc3RhdGVkID0gY29udGV4dC5pc1N0YXRlZCgpO1xuXG4gICAgaWYgKHN0YXRlZCkge1xuICAgICAgY29uc3QgZXF1YWxpdHlTdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAvLy9cblxuICAgICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7ZXF1YWxpdHlTdHJpbmd9JyBzdGF0ZWQgZXF1YWxpdHkuLi5gKTtcblxuICAgICAgdmFsaWRhdGVzV2hlblN0YXRlZCA9IGNvbnRpbnVhdGlvbihjb250ZXh0KTtcblxuICAgICAgaWYgKHZhbGlkYXRlc1doZW5TdGF0ZWQpIHtcbiAgICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmFsaWRhdGVkIHRoZSAnJHtlcXVhbGl0eVN0cmluZ30nIHN0YXRlZCBlcXVhbGl0eS5gKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdmFsaWRhdGVzV2hlblN0YXRlZDtcbiAgfVxuXG4gIHZhbGlkYXRlV2hlbkRlcml2ZWQoY29udGV4dCwgY29udGludWF0aW9uKSB7XG4gICAgbGV0IHZhbGlkYXRlc1doZW5EZXJpdmVkID0gZmFsc2U7XG5cbiAgICBjb25zdCBzdGF0ZWQgPSBjb250ZXh0LmlzU3RhdGVkKCk7XG5cbiAgICBpZiAoIXN0YXRlZCkge1xuICAgICAgY29uc3QgZXF1YWxpdHlTdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAvLy9cblxuICAgICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7ZXF1YWxpdHlTdHJpbmd9JyBkZXJpdmVkIGVxdWFsaXR5Li4uYCk7XG5cbiAgICAgIGNvbnN0IHRlcm1zRXF1YXRlID0gZXF1YXRlVGVybXModGhpcy5sZWZ0VGVybSwgdGhpcy5yaWdodFRlcm0sIGNvbnRleHQpO1xuXG4gICAgICBpZiAoKHRoaXMubmVnYXRlZCAmJiAhdGVybXNFcXVhdGUpIHx8ICghdGhpcy5uZWdhdGVkICYmIHRlcm1zRXF1YXRlKSkge1xuICAgICAgICB2YWxpZGF0ZXNXaGVuRGVyaXZlZCA9IGNvbnRpbnVhdGlvbihjb250ZXh0KTtcbiAgICAgIH1cblxuICAgICAgaWYgKHZhbGlkYXRlc1doZW5EZXJpdmVkKSB7XG4gICAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlZCB0aGUgJyR7ZXF1YWxpdHlTdHJpbmd9JyBkZXJpdmVkIGVxdWFsaXR5LmApO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB2YWxpZGF0ZXNXaGVuRGVyaXZlZDtcbiAgfVxuXG4gIGFzc2lnbihjb250ZXh0KSB7XG4gICAgY29uc3QgZXF1YWxpdHkgPSB0aGlzLCAgLy8vXG4gICAgICAgICAgbmVnYXRlZCA9IHRoaXMuaXNOZWdhdGVkKCksXG4gICAgICAgICAgcmVmbGV4aXZlID0gdGhpcy5pc1JlZmxleGl2ZSgpO1xuXG4gICAgaWYgKG5lZ2F0ZWQgfHwgcmVmbGV4aXZlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgZXF1YWxpdHlBc3NpZ25tZW50ID0gZXF1YWxpdHlBc3NpZ25tZW50RnJvbUVxdWFsaXR5KGVxdWFsaXR5LCBjb250ZXh0KSxcbiAgICAgICAgICBsZWZ0VmFyaWFibGVBc3NpZ25tZW50ID0gbGVmdFZhcmlhYmxlQXNzaWdubWVudEZyb21FcXVhbGl0eShlcXVhbGl0eSwgY29udGV4dCksXG4gICAgICAgICAgcmlnaHRWYXJpYWJsZUFzc2lnbm1lbnQgPSByaWdodFZhcmlhYmxlQXNzaWdubWVudEZyb21FcXVhbGl0eShlcXVhbGl0eSwgY29udGV4dCk7XG5cbiAgICBjb250ZXh0LmFkZEFzc2lnbm1lbnQoZXF1YWxpdHlBc3NpZ25tZW50KTtcblxuICAgIGNvbnRleHQuYWRkQXNzaWdubWVudChsZWZ0VmFyaWFibGVBc3NpZ25tZW50KTtcblxuICAgIGNvbnRleHQuYWRkQXNzaWdubWVudChyaWdodFZhcmlhYmxlQXNzaWdubWVudCk7XG4gIH1cblxuICB0b0pTT04oKSB7XG4gICAgY29uc3Qgc3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTtcblxuICAgIGxldCBicmVha1BvaW50O1xuXG4gICAgYnJlYWtQb2ludCA9IHRoaXMuZ2V0QnJlYWtQb2ludCgpO1xuXG4gICAgY29uc3QgYnJlYWtQb2ludEpTT04gPSBicmVha1BvaW50VG9CcmVha1BvaW50SlNPTihicmVha1BvaW50KTtcblxuICAgIGJyZWFrUG9pbnQgPSBicmVha1BvaW50SlNPTjsgIC8vL1xuXG4gICAgY29uc3QganNvbiA9IHtcbiAgICAgIHN0cmluZyxcbiAgICAgIGJyZWFrUG9pbnRcbiAgICB9O1xuXG4gICAgcmV0dXJuIGpzb247XG4gIH1cblxuICBzdGF0aWMgbmFtZSA9IFwiRXF1YWxpdHlcIjtcblxuICBzdGF0aWMgZnJvbUpTT04oanNvbiwgY29udGV4dCkge1xuICAgIHJldHVybiBpbnN0YW50aWF0ZSgoY29udGV4dCkgPT4ge1xuICAgICAgY29uc3QgeyBzdHJpbmcgfSA9IGpzb24sXG4gICAgICAgICAgICBlcXVhbGl0eU5vZGUgPSBpbnN0YW50aWF0ZUVxdWFsaXR5KHN0cmluZywgY29udGV4dCksXG4gICAgICAgICAgICBub2RlID0gZXF1YWxpdHlOb2RlLCAgLy8vXG4gICAgICAgICAgICBicmVha1BvaW50ID0gYnJlYWtQb2ludEZyb21KU09OKGpzb24pLFxuICAgICAgICAgICAgbmVnYXRlZCA9IG5lZ2F0ZWRGcm9tRXF1YWxpdHlOb2RlKGVxdWFsaXR5Tm9kZSwgY29udGV4dCksXG4gICAgICAgICAgICBsZWZ0VGVybSA9IGxlZnRUZXJtRnJvbUVxdWFsaXR5Tm9kZShlcXVhbGl0eU5vZGUsIGNvbnRleHQpLFxuICAgICAgICAgICAgcmlnaHRUZXJtID0gcmlnaHRUZXJtRnJvbUVxdWFsaXR5Tm9kZShlcXVhbGl0eU5vZGUsIGNvbnRleHQpO1xuXG4gICAgICBjb250ZXh0ID0gbnVsbDtcblxuICAgICAgY29uc3QgZXF1YWxpdHkgPSBuZXcgRXF1YWxpdHkoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBuZWdhdGVkLCBsZWZ0VGVybSwgcmlnaHRUZXJtKTtcblxuICAgICAgcmV0dXJuIGVxdWFsaXR5O1xuICAgIH0sIGNvbnRleHQpO1xuICB9XG5cbiAgc3RhdGljIGZyb21TdGF0ZW1lbnQoc3RhdGVtZW50LCBjb250ZXh0KSB7XG4gICAgY29uc3Qgc3RhdGVtZW50Tm9kZSA9IHN0YXRlbWVudC5nZXROb2RlKCksXG4gICAgICAgICAgZXF1YWxpdHkgPSBlcXVhbGl0eUZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIGVxdWFsaXR5O1xuICB9XG59KTtcblxuZnVuY3Rpb24gbmVnYXRlZEZyb21FcXVhbGl0eU5vZGUoZXF1YWxpdHlOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IG5lZ2F0ZWQgPSBlcXVhbGl0eU5vZGUuaXNOZWdhdGVkKCk7XG5cbiAgcmV0dXJuIG5lZ2F0ZWQ7XG59XG5cbmZ1bmN0aW9uIGxlZnRUZXJtRnJvbUVxdWFsaXR5Tm9kZShlcXVhbGl0eU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgbGVmdFRlcm1Ob2RlID0gZXF1YWxpdHlOb2RlLmdldExlZnRUZXJtTm9kZSgpLFxuICAgICAgICBsZWZ0VGVybSA9IGNvbnRleHQuZmluZFRlcm1CeVRlcm1Ob2RlKGxlZnRUZXJtTm9kZSk7XG5cbiAgcmV0dXJuIGxlZnRUZXJtO1xufVxuXG5mdW5jdGlvbiByaWdodFRlcm1Gcm9tRXF1YWxpdHlOb2RlKGVxdWFsaXR5Tm9kZSwgY29udGV4dCkge1xuICBjb25zdCByaWdodFRlcm1Ob2RlID0gZXF1YWxpdHlOb2RlLmdldExlZnRUZXJtTm9kZSgpLFxuICAgICAgICByaWdodFRlcm0gPSBjb250ZXh0LmZpbmRUZXJtQnlUZXJtTm9kZShyaWdodFRlcm1Ob2RlKTtcblxuICByZXR1cm4gcmlnaHRUZXJtO1xufVxuIl0sIm5hbWVzIjpbImJyZWFrUG9pbnRGcm9tSlNPTiIsImJyZWFrUG9pbnRUb0JyZWFrUG9pbnRKU09OIiwiYnJlYWtQb2ludFV0aWxpdGllcyIsImRlZmluZSIsIkVxdWFsaXR5IiwiRWxlbWVudCIsImNvbnRleHQiLCJzdHJpbmciLCJub2RlIiwiYnJlYWtQb2ludCIsIm5lZ2F0ZWQiLCJsZWZ0VGVybSIsInJpZ2h0VGVybSIsImlzTmVnYXRlZCIsImdldExlZnRUZXJtIiwiZ2V0UmlnaHRUZXJtIiwiZ2V0RXF1YWxpdHlOb2RlIiwiZ2V0Tm9kZSIsImVxdWFsaXR5TmRlIiwiZ2V0TGVmdFRlcm1Ob2RlIiwibGVmdFRlcm1Ob2RlIiwiZ2V0UmlnaHRUZXJtTm9kZSIsInJpZ2h0VGVybU5vZGUiLCJnZXRUeXBlIiwidHlwZSIsImxlZnRUZXJtVHlwZSIsInJpZ2h0VGVybVR5cGUiLCJsZWZ0VGVybVR5cGVFcXVhbFRvT3JTdWJUeXBlT2ZSaWdodFRlcm1UeXBlIiwiaXNFcXVhbFRvT3JTdWJUeXBlT2YiLCJyaWdodFRlcm1UeXBlRXF1YWxUb09yU3ViVHlwZU9mTGVmdFRlcm1UeXBlIiwiZ2V0VGVybXMiLCJ0ZXJtcyIsIm1hdGNoRXF1YWxpdHlOb2RlIiwiZXF1YWxpdHlOb2RlIiwibm9kZU1hdGNoZXMiLCJtYXRjaE5vZGUiLCJlcXVhbGl0eU5vZGVNYXRjaGVzIiwiaXNFcXVhbFRvIiwiZXF1YWxpdHkiLCJlcXVhbFRvIiwiaXNSZWZsZXhpdmUiLCJyZWZsZXhpdmUiLCJsZWZ0VGVybUVxdWFsVG9SaWdodFRlcm0iLCJmaW5kRXF1YWxpdHkiLCJmaW5kRXF1YWxpdHlCeUVxdWFsaXR5Tm9kZSIsInZhbGlkYXRlIiwiY29udGludWF0aW9uIiwidmFsaWRhdGVzIiwiZXF1YWxpdHlTdHJpbmciLCJnZXRTdHJpbmciLCJ0cmFjZSIsImRlYnVnIiwidmFsaWRhdGVUZXJtcyIsImJpbmQiLCJhbGwiLCJ2YWxpZGF0ZVdoZW5TdGF0ZWQiLCJ2YWxpZGF0ZVdoZW5EZXJpdmVkIiwiZXhpc3RzIiwiYXNzaWduIiwiYWRkRXF1YWxpdHkiLCJ0ZXJtc1ZhbGlkYXRlIiwibGVmdFRlcm1WYWxpZGF0ZXMiLCJyaWdodFRlcm1WYWxpZHRlcyIsImxlZnRUZXJtVHlwZUVxdWFsVG9TdWJUeXBlT3JTdXBlclR5cGVPZlJpZ2h0VGVybVR5cGUiLCJpc0VxdWFsVG9TdWJUeXBlT3JTdXBlclR5cGVPZiIsInZhbGlkYXRlc1doZW5TdGF0ZWQiLCJzdGF0ZWQiLCJpc1N0YXRlZCIsInZhbGlkYXRlc1doZW5EZXJpdmVkIiwidGVybXNFcXVhdGUiLCJlcXVhdGVUZXJtcyIsImVxdWFsaXR5QXNzaWdubWVudCIsImVxdWFsaXR5QXNzaWdubWVudEZyb21FcXVhbGl0eSIsImxlZnRWYXJpYWJsZUFzc2lnbm1lbnQiLCJsZWZ0VmFyaWFibGVBc3NpZ25tZW50RnJvbUVxdWFsaXR5IiwicmlnaHRWYXJpYWJsZUFzc2lnbm1lbnQiLCJyaWdodFZhcmlhYmxlQXNzaWdubWVudEZyb21FcXVhbGl0eSIsImFkZEFzc2lnbm1lbnQiLCJ0b0pTT04iLCJnZXRCcmVha1BvaW50IiwiYnJlYWtQb2ludEpTT04iLCJqc29uIiwibmFtZSIsImZyb21KU09OIiwiaW5zdGFudGlhdGUiLCJpbnN0YW50aWF0ZUVxdWFsaXR5IiwibmVnYXRlZEZyb21FcXVhbGl0eU5vZGUiLCJsZWZ0VGVybUZyb21FcXVhbGl0eU5vZGUiLCJyaWdodFRlcm1Gcm9tRXF1YWxpdHlOb2RlIiwiZnJvbVN0YXRlbWVudCIsInN0YXRlbWVudCIsInN0YXRlbWVudE5vZGUiLCJlcXVhbGl0eUZyb21TdGF0ZW1lbnROb2RlIiwiZmluZFRlcm1CeVRlcm1Ob2RlIl0sIm1hcHBpbmdzIjoiQUFBQTs7OzsrQkFjQTs7O2VBQUE7OztnQ0FaNkM7MEJBRXRCO3dCQUNLO3lCQUNBOzhCQUNBOzZCQUNRO3lCQUNNO3dCQUM4RTtBQUV4SCxN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
213
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9lbGVtZW50L2VxdWFsaXR5LmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBFbGVtZW50LCBicmVha1BvaW50VXRpbGl0aWVzIH0gZnJvbSBcIm9jY2FtLWxhbmd1YWdlc1wiO1xuXG5pbXBvcnQgeyBkZWZpbmUgfSBmcm9tIFwiLi4vZWxlbWVudHNcIjtcbmltcG9ydCB7IGVxdWF0ZVRlcm1zIH0gZnJvbSBcIi4uL3Byb2Nlc3MvZXF1YXRlXCI7XG5pbXBvcnQgeyBpbnN0YW50aWF0ZSB9IGZyb20gXCIuLi91dGlsaXRpZXMvY29udGV4dFwiO1xuaW1wb3J0IHsgYWxsLCBleGlzdHMgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2NvbnRpbnVhdGlvblwiO1xuaW1wb3J0IHsgaW5zdGFudGlhdGVFcXVhbGl0eSB9IGZyb20gXCIuLi9wcm9jZXNzL2luc3RhbnRpYXRlXCI7XG5pbXBvcnQgeyBlcXVhbGl0eUZyb21TdGF0ZW1lbnROb2RlIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9lbGVtZW50XCI7XG5pbXBvcnQgeyBlcXVhbGl0eUFzc2lnbm1lbnRGcm9tRXF1YWxpdHksIGxlZnRWYXJpYWJsZUFzc2lnbm1lbnRGcm9tRXF1YWxpdHksIHJpZ2h0VmFyaWFibGVBc3NpZ25tZW50RnJvbUVxdWFsaXR5IH0gZnJvbSBcIi4uL3Byb2Nlc3MvYXNzaWduXCI7XG5cbmNvbnN0IHsgYnJlYWtQb2ludEZyb21KU09OLCBicmVha1BvaW50VG9CcmVha1BvaW50SlNPTiB9ID0gYnJlYWtQb2ludFV0aWxpdGllcztcblxuZXhwb3J0IGRlZmF1bHQgZGVmaW5lKGNsYXNzIEVxdWFsaXR5IGV4dGVuZHMgRWxlbWVudCB7XG4gIGNvbnN0cnVjdG9yKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgbmVnYXRlZCwgbGVmdFRlcm0sIHJpZ2h0VGVybSkge1xuICAgIHN1cGVyKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCk7XG5cbiAgICB0aGlzLm5lZ2F0ZWQgPSBuZWdhdGVkO1xuICAgIHRoaXMubGVmdFRlcm0gPSBsZWZ0VGVybTtcbiAgICB0aGlzLnJpZ2h0VGVybSA9IHJpZ2h0VGVybTtcbiAgfVxuXG4gIGlzTmVnYXRlZCgpIHtcbiAgICByZXR1cm4gdGhpcy5uZWdhdGVkO1xuICB9XG5cbiAgZ2V0TGVmdFRlcm0oKSB7XG4gICAgcmV0dXJuIHRoaXMubGVmdFRlcm07XG4gIH1cblxuICBnZXRSaWdodFRlcm0oKSB7XG4gICAgcmV0dXJuIHRoaXMucmlnaHRUZXJtO1xuICB9XG5cbiAgZ2V0RXF1YWxpdHlOb2RlKCkge1xuICAgIGNvbnN0IG5vZGUgPSB0aGlzLmdldE5vZGUoKSxcbiAgICAgICAgICBlcXVhbGl0eU5kZSA9IG5vZGU7IC8vL1xuXG4gICAgcmV0dXJuIGVxdWFsaXR5TmRlO1xuICB9XG5cbiAgZ2V0TGVmdFRlcm1Ob2RlKCkge1xuICAgIGNvbnN0IGxlZnRUZXJtTm9kZSA9IHRoaXMubGVmdFRlcm0uZ2V0Tm9kZSgpO1xuXG4gICAgcmV0dXJuIGxlZnRUZXJtTm9kZTtcbiAgfVxuXG4gIGdldFJpZ2h0VGVybU5vZGUoKSB7XG4gICAgY29uc3QgcmlnaHRUZXJtTm9kZSA9IHRoaXMucmlnaHRUZXJtLmdldE5vZGUoKTtcblxuICAgIHJldHVybiByaWdodFRlcm1Ob2RlO1xuICB9XG5cbiAgZ2V0VGVybXMoKSB7XG4gICAgY29uc3QgdGVybXMgPSBbXG4gICAgICB0aGlzLmxlZnRUZXJtLFxuICAgICAgdGhpcy5yaWdodFRlcm1cbiAgICBdO1xuXG4gICAgcmV0dXJuIHRlcm1zO1xuICB9XG5cbiAgbWF0Y2hFcXVhbGl0eU5vZGUoZXF1YWxpdHlOb2RlKSB7XG4gICAgY29uc3Qgbm9kZSA9IGVxdWFsaXR5Tm9kZSwgLy8vXG4gICAgICAgICAgbm9kZU1hdGNoZXMgPSB0aGlzLm1hdGNoTm9kZShub2RlKSxcbiAgICAgICAgICBlcXVhbGl0eU5vZGVNYXRjaGVzID0gbm9kZU1hdGNoZXM7IC8vL1xuXG4gICAgcmV0dXJuIGVxdWFsaXR5Tm9kZU1hdGNoZXM7XG4gIH1cblxuICBpc0VxdWFsVG8oZXF1YWxpdHkpIHtcbiAgICBjb25zdCBlcXVhbGl0eU5vZGUgPSBlcXVhbGl0eS5nZXROb2RlKCksXG4gICAgICAgICAgZXF1YWxpdHlOb2RlTWF0Y2hlcyA9IHRoaXMubWF0Y2hFcXVhbGl0eU5vZGUoZXF1YWxpdHlOb2RlKSxcbiAgICAgICAgICBlcXVhbFRvID0gZXF1YWxpdHlOb2RlTWF0Y2hlczsgIC8vL1xuXG4gICAgcmV0dXJuIGVxdWFsVG87XG4gIH1cblxuICBpc1JlZmxleGl2ZSgpIHtcbiAgICBsZXQgcmVmbGV4aXZlID0gZmFsc2U7XG5cbiAgICBpZiAoIXRoaXMubmVnYXRlZCkge1xuICAgICAgY29uc3QgbGVmdFRlcm1FcXVhbFRvUmlnaHRUZXJtID0gdGhpcy5sZWZ0VGVybS5pc0VxdWFsVG8odGhpcy5yaWdodFRlcm0pO1xuXG4gICAgICBpZiAobGVmdFRlcm1FcXVhbFRvUmlnaHRUZXJtKSB7XG4gICAgICAgIHJlZmxleGl2ZSA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlZmxleGl2ZTtcbiAgfVxuXG4gIGZpbmRFcXVhbGl0eShjb250ZXh0KSB7XG4gICAgY29uc3QgZXF1YWxpdHlOb2RlID0gdGhpcy5nZXRFcXVhbGl0eU5vZGUoKSxcbiAgICAgICAgICBlcXVhbGl0eSA9IGNvbnRleHQuZmluZEVxdWFsaXR5QnlFcXVhbGl0eU5vZGUoZXF1YWxpdHlOb2RlKTtcblxuICAgIHJldHVybiBlcXVhbGl0eTtcbiAgfVxuXG4gIHZhbGlkYXRlKGNvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICAgIGxldCB2YWxpZGF0ZXM7XG5cbiAgICBjb25zdCBlcXVhbGl0eVN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7ICAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke2VxdWFsaXR5U3RyaW5nfScgZXF1YWxpdHkuLi5gKTtcblxuICAgIGxldCBlcXVhbGl0eTtcblxuICAgIGVxdWFsaXR5ID0gdGhpcy5maW5kRXF1YWxpdHkoY29udGV4dCk7XG5cbiAgICBpZiAoZXF1YWxpdHkgIT09IG51bGwpIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYFRoZSAnJHtlcXVhbGl0eVN0cmluZ30nIGVxdWFsaXR5IGlzIGFscmVhZHkgcHJlc2VudC5gKTtcblxuICAgICAgdmFsaWRhdGVzID0gY29udGludWF0aW9uKGVxdWFsaXR5LCBjb250ZXh0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgZXF1YWxpdHkgPSB0aGlzO1xuXG4gICAgICBjb25zdCB2YWxpZGF0ZVRlcm1zID0gdGhpcy52YWxpZGF0ZVRlcm1zLmJpbmQodGhpcyk7XG5cbiAgICAgIHZhbGlkYXRlcyA9IGFsbChbXG4gICAgICAgIHZhbGlkYXRlVGVybXNcbiAgICAgIF0sIGNvbnRleHQsIChjb250ZXh0KSA9PiB7XG4gICAgICAgIGxldCB2YWxpZGF0ZXM7XG5cbiAgICAgICAgY29uc3QgdmFsaWRhdGVXaGVuU3RhdGVkID0gdGhpcy52YWxpZGF0ZVdoZW5TdGF0ZWQuYmluZCh0aGlzKSxcbiAgICAgICAgICAgICAgdmFsaWRhdGVXaGVuRGVyaXZlZCA9IHRoaXMudmFsaWRhdGVXaGVuRGVyaXZlZC5iaW5kKHRoaXMpO1xuXG4gICAgICAgIHZhbGlkYXRlcyA9IGV4aXN0cyhbXG4gICAgICAgICAgdmFsaWRhdGVXaGVuU3RhdGVkLFxuICAgICAgICAgIHZhbGlkYXRlV2hlbkRlcml2ZWRcbiAgICAgICAgXSwgY29udGV4dCwgKGNvbnRleHQpID0+IHtcbiAgICAgICAgICB0aGlzLmFzc2lnbihjb250ZXh0KTtcblxuICAgICAgICAgIGNvbnRleHQuYWRkRXF1YWxpdHkoZXF1YWxpdHkpO1xuXG4gICAgICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihlcXVhbGl0eSwgY29udGV4dCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiB2YWxpZGF0ZXM7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAodmFsaWRhdGVzKSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke2VxdWFsaXR5U3RyaW5nfScgZXF1YWxpdHkuYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbGlkYXRlcztcbiAgfVxuXG4gIHZhbGlkYXRlVGVybXMoY29udGV4dCwgY29udGludWF0aW9uKSB7XG4gICAgbGV0IHRlcm1zVmFsaWRhdGUgPSBmYWxzZTtcblxuICAgIGNvbnN0IGVxdWFsaXR5U3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0aW5nIHRoZSAnJHtlcXVhbGl0eVN0cmluZ30nIGVxdWFsaXR5J3MgdGVybXMuLi5gKTtcblxuICAgIGNvbnN0IGxlZnRUZXJtVmFsaWRhdGVzID0gdGhpcy5sZWZ0VGVybS52YWxpZGF0ZShjb250ZXh0LCAobGVmdFRlcm0sIGNvbnRleHQpID0+IHtcbiAgICAgIGNvbnN0IHJpZ2h0VGVybVZhbGlkdGVzID0gdGhpcy5yaWdodFRlcm0udmFsaWRhdGUoY29udGV4dCwgKHJpZ2h0VGVybSwgY29udGV4dCkgPT4ge1xuICAgICAgICBsZXQgdmFsaWRhdGVzID0gZmFsc2U7XG5cbiAgICAgICAgY29uc3QgbGVmdFRlcm1UeXBlID0gbGVmdFRlcm0uZ2V0VHlwZSgpLFxuICAgICAgICAgICAgICByaWdodFRlcm1UeXBlID0gcmlnaHRUZXJtLmdldFR5cGUoKSxcbiAgICAgICAgICAgICAgbGVmdFRlcm1UeXBlSm9pbmVkVG9SaWdodFRlcm1UeXBlID0gbGVmdFRlcm1UeXBlLmlzSm9pbmVkVG8ocmlnaHRUZXJtVHlwZSk7XG5cbiAgICAgICAgaWYgKGxlZnRUZXJtVHlwZUpvaW5lZFRvUmlnaHRUZXJtVHlwZSkge1xuICAgICAgICAgIHRoaXMubGVmdFRlcm0gPSBsZWZ0VGVybTtcblxuICAgICAgICAgIHRoaXMucmlnaHRUZXJtID0gcmlnaHRUZXJtO1xuXG4gICAgICAgICAgdmFsaWRhdGVzID0gY29udGludWF0aW9uKGNvbnRleHQpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHZhbGlkYXRlcztcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gcmlnaHRUZXJtVmFsaWR0ZXM7XG4gICAgfSk7XG5cbiAgICBpZiAobGVmdFRlcm1WYWxpZGF0ZXMpIHtcbiAgICAgIHRlcm1zVmFsaWRhdGUgPSB0cnVlO1xuICAgIH1cblxuICAgIGlmICh0ZXJtc1ZhbGlkYXRlKSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke2VxdWFsaXR5U3RyaW5nfScgZXF1YWxpdHkncyB0ZXJtcy5gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGVybXNWYWxpZGF0ZTtcbiAgfVxuXG4gIHZhbGlkYXRlV2hlblN0YXRlZChjb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgICBsZXQgdmFsaWRhdGVzV2hlblN0YXRlZCA9IGZhbHNlO1xuXG4gICAgY29uc3Qgc3RhdGVkID0gY29udGV4dC5pc1N0YXRlZCgpO1xuXG4gICAgaWYgKHN0YXRlZCkge1xuICAgICAgY29uc3QgZXF1YWxpdHlTdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAvLy9cblxuICAgICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7ZXF1YWxpdHlTdHJpbmd9JyBzdGF0ZWQgZXF1YWxpdHkuLi5gKTtcblxuICAgICAgdmFsaWRhdGVzV2hlblN0YXRlZCA9IGNvbnRpbnVhdGlvbihjb250ZXh0KTtcblxuICAgICAgaWYgKHZhbGlkYXRlc1doZW5TdGF0ZWQpIHtcbiAgICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmFsaWRhdGVkIHRoZSAnJHtlcXVhbGl0eVN0cmluZ30nIHN0YXRlZCBlcXVhbGl0eS5gKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdmFsaWRhdGVzV2hlblN0YXRlZDtcbiAgfVxuXG4gIHZhbGlkYXRlV2hlbkRlcml2ZWQoY29udGV4dCwgY29udGludWF0aW9uKSB7XG4gICAgbGV0IHZhbGlkYXRlc1doZW5EZXJpdmVkID0gZmFsc2U7XG5cbiAgICBjb25zdCBzdGF0ZWQgPSBjb250ZXh0LmlzU3RhdGVkKCk7XG5cbiAgICBpZiAoIXN0YXRlZCkge1xuICAgICAgY29uc3QgZXF1YWxpdHlTdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAvLy9cblxuICAgICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7ZXF1YWxpdHlTdHJpbmd9JyBkZXJpdmVkIGVxdWFsaXR5Li4uYCk7XG5cbiAgICAgIGNvbnN0IHRlcm1zRXF1YXRlID0gZXF1YXRlVGVybXModGhpcy5sZWZ0VGVybSwgdGhpcy5yaWdodFRlcm0sIGNvbnRleHQpO1xuXG4gICAgICBpZiAoKHRoaXMubmVnYXRlZCAmJiAhdGVybXNFcXVhdGUpIHx8ICghdGhpcy5uZWdhdGVkICYmIHRlcm1zRXF1YXRlKSkge1xuICAgICAgICB2YWxpZGF0ZXNXaGVuRGVyaXZlZCA9IGNvbnRpbnVhdGlvbihjb250ZXh0KTtcbiAgICAgIH1cblxuICAgICAgaWYgKHZhbGlkYXRlc1doZW5EZXJpdmVkKSB7XG4gICAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlZCB0aGUgJyR7ZXF1YWxpdHlTdHJpbmd9JyBkZXJpdmVkIGVxdWFsaXR5LmApO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB2YWxpZGF0ZXNXaGVuRGVyaXZlZDtcbiAgfVxuXG4gIGFzc2lnbihjb250ZXh0KSB7XG4gICAgY29uc3QgZXF1YWxpdHkgPSB0aGlzLCAgLy8vXG4gICAgICAgICAgbmVnYXRlZCA9IHRoaXMuaXNOZWdhdGVkKCksXG4gICAgICAgICAgcmVmbGV4aXZlID0gdGhpcy5pc1JlZmxleGl2ZSgpO1xuXG4gICAgaWYgKG5lZ2F0ZWQgfHwgcmVmbGV4aXZlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgZXF1YWxpdHlBc3NpZ25tZW50ID0gZXF1YWxpdHlBc3NpZ25tZW50RnJvbUVxdWFsaXR5KGVxdWFsaXR5LCBjb250ZXh0KSxcbiAgICAgICAgICBsZWZ0VmFyaWFibGVBc3NpZ25tZW50ID0gbGVmdFZhcmlhYmxlQXNzaWdubWVudEZyb21FcXVhbGl0eShlcXVhbGl0eSwgY29udGV4dCksXG4gICAgICAgICAgcmlnaHRWYXJpYWJsZUFzc2lnbm1lbnQgPSByaWdodFZhcmlhYmxlQXNzaWdubWVudEZyb21FcXVhbGl0eShlcXVhbGl0eSwgY29udGV4dCk7XG5cbiAgICBjb250ZXh0LmFkZEFzc2lnbm1lbnQoZXF1YWxpdHlBc3NpZ25tZW50KTtcblxuICAgIGNvbnRleHQuYWRkQXNzaWdubWVudChsZWZ0VmFyaWFibGVBc3NpZ25tZW50KTtcblxuICAgIGNvbnRleHQuYWRkQXNzaWdubWVudChyaWdodFZhcmlhYmxlQXNzaWdubWVudCk7XG4gIH1cblxuICB0b0pTT04oKSB7XG4gICAgY29uc3Qgc3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTtcblxuICAgIGxldCBicmVha1BvaW50O1xuXG4gICAgYnJlYWtQb2ludCA9IHRoaXMuZ2V0QnJlYWtQb2ludCgpO1xuXG4gICAgY29uc3QgYnJlYWtQb2ludEpTT04gPSBicmVha1BvaW50VG9CcmVha1BvaW50SlNPTihicmVha1BvaW50KTtcblxuICAgIGJyZWFrUG9pbnQgPSBicmVha1BvaW50SlNPTjsgIC8vL1xuXG4gICAgY29uc3QganNvbiA9IHtcbiAgICAgIHN0cmluZyxcbiAgICAgIGJyZWFrUG9pbnRcbiAgICB9O1xuXG4gICAgcmV0dXJuIGpzb247XG4gIH1cblxuICBzdGF0aWMgbmFtZSA9IFwiRXF1YWxpdHlcIjtcblxuICBzdGF0aWMgZnJvbUpTT04oanNvbiwgY29udGV4dCkge1xuICAgIHJldHVybiBpbnN0YW50aWF0ZSgoY29udGV4dCkgPT4ge1xuICAgICAgY29uc3QgeyBzdHJpbmcgfSA9IGpzb24sXG4gICAgICAgICAgICBlcXVhbGl0eU5vZGUgPSBpbnN0YW50aWF0ZUVxdWFsaXR5KHN0cmluZywgY29udGV4dCksXG4gICAgICAgICAgICBub2RlID0gZXF1YWxpdHlOb2RlLCAgLy8vXG4gICAgICAgICAgICBicmVha1BvaW50ID0gYnJlYWtQb2ludEZyb21KU09OKGpzb24pLFxuICAgICAgICAgICAgbmVnYXRlZCA9IG5lZ2F0ZWRGcm9tRXF1YWxpdHlOb2RlKGVxdWFsaXR5Tm9kZSwgY29udGV4dCksXG4gICAgICAgICAgICBsZWZ0VGVybSA9IGxlZnRUZXJtRnJvbUVxdWFsaXR5Tm9kZShlcXVhbGl0eU5vZGUsIGNvbnRleHQpLFxuICAgICAgICAgICAgcmlnaHRUZXJtID0gcmlnaHRUZXJtRnJvbUVxdWFsaXR5Tm9kZShlcXVhbGl0eU5vZGUsIGNvbnRleHQpO1xuXG4gICAgICBjb250ZXh0ID0gbnVsbDtcblxuICAgICAgY29uc3QgZXF1YWxpdHkgPSBuZXcgRXF1YWxpdHkoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBuZWdhdGVkLCBsZWZ0VGVybSwgcmlnaHRUZXJtKTtcblxuICAgICAgcmV0dXJuIGVxdWFsaXR5O1xuICAgIH0sIGNvbnRleHQpO1xuICB9XG5cbiAgc3RhdGljIGZyb21TdGF0ZW1lbnQoc3RhdGVtZW50LCBjb250ZXh0KSB7XG4gICAgY29uc3Qgc3RhdGVtZW50Tm9kZSA9IHN0YXRlbWVudC5nZXROb2RlKCksXG4gICAgICAgICAgZXF1YWxpdHkgPSBlcXVhbGl0eUZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIGVxdWFsaXR5O1xuICB9XG59KTtcblxuZnVuY3Rpb24gbmVnYXRlZEZyb21FcXVhbGl0eU5vZGUoZXF1YWxpdHlOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IG5lZ2F0ZWQgPSBlcXVhbGl0eU5vZGUuaXNOZWdhdGVkKCk7XG5cbiAgcmV0dXJuIG5lZ2F0ZWQ7XG59XG5cbmZ1bmN0aW9uIGxlZnRUZXJtRnJvbUVxdWFsaXR5Tm9kZShlcXVhbGl0eU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgbGVmdFRlcm1Ob2RlID0gZXF1YWxpdHlOb2RlLmdldExlZnRUZXJtTm9kZSgpLFxuICAgICAgICBsZWZ0VGVybSA9IGNvbnRleHQuZmluZFRlcm1CeVRlcm1Ob2RlKGxlZnRUZXJtTm9kZSk7XG5cbiAgcmV0dXJuIGxlZnRUZXJtO1xufVxuXG5mdW5jdGlvbiByaWdodFRlcm1Gcm9tRXF1YWxpdHlOb2RlKGVxdWFsaXR5Tm9kZSwgY29udGV4dCkge1xuICBjb25zdCByaWdodFRlcm1Ob2RlID0gZXF1YWxpdHlOb2RlLmdldExlZnRUZXJtTm9kZSgpLFxuICAgICAgICByaWdodFRlcm0gPSBjb250ZXh0LmZpbmRUZXJtQnlUZXJtTm9kZShyaWdodFRlcm1Ob2RlKTtcblxuICByZXR1cm4gcmlnaHRUZXJtO1xufVxuIl0sIm5hbWVzIjpbImJyZWFrUG9pbnRGcm9tSlNPTiIsImJyZWFrUG9pbnRUb0JyZWFrUG9pbnRKU09OIiwiYnJlYWtQb2ludFV0aWxpdGllcyIsImRlZmluZSIsIkVxdWFsaXR5IiwiRWxlbWVudCIsImNvbnRleHQiLCJzdHJpbmciLCJub2RlIiwiYnJlYWtQb2ludCIsIm5lZ2F0ZWQiLCJsZWZ0VGVybSIsInJpZ2h0VGVybSIsImlzTmVnYXRlZCIsImdldExlZnRUZXJtIiwiZ2V0UmlnaHRUZXJtIiwiZ2V0RXF1YWxpdHlOb2RlIiwiZ2V0Tm9kZSIsImVxdWFsaXR5TmRlIiwiZ2V0TGVmdFRlcm1Ob2RlIiwibGVmdFRlcm1Ob2RlIiwiZ2V0UmlnaHRUZXJtTm9kZSIsInJpZ2h0VGVybU5vZGUiLCJnZXRUZXJtcyIsInRlcm1zIiwibWF0Y2hFcXVhbGl0eU5vZGUiLCJlcXVhbGl0eU5vZGUiLCJub2RlTWF0Y2hlcyIsIm1hdGNoTm9kZSIsImVxdWFsaXR5Tm9kZU1hdGNoZXMiLCJpc0VxdWFsVG8iLCJlcXVhbGl0eSIsImVxdWFsVG8iLCJpc1JlZmxleGl2ZSIsInJlZmxleGl2ZSIsImxlZnRUZXJtRXF1YWxUb1JpZ2h0VGVybSIsImZpbmRFcXVhbGl0eSIsImZpbmRFcXVhbGl0eUJ5RXF1YWxpdHlOb2RlIiwidmFsaWRhdGUiLCJjb250aW51YXRpb24iLCJ2YWxpZGF0ZXMiLCJlcXVhbGl0eVN0cmluZyIsImdldFN0cmluZyIsInRyYWNlIiwiZGVidWciLCJ2YWxpZGF0ZVRlcm1zIiwiYmluZCIsImFsbCIsInZhbGlkYXRlV2hlblN0YXRlZCIsInZhbGlkYXRlV2hlbkRlcml2ZWQiLCJleGlzdHMiLCJhc3NpZ24iLCJhZGRFcXVhbGl0eSIsInRlcm1zVmFsaWRhdGUiLCJsZWZ0VGVybVZhbGlkYXRlcyIsInJpZ2h0VGVybVZhbGlkdGVzIiwibGVmdFRlcm1UeXBlIiwiZ2V0VHlwZSIsInJpZ2h0VGVybVR5cGUiLCJsZWZ0VGVybVR5cGVKb2luZWRUb1JpZ2h0VGVybVR5cGUiLCJpc0pvaW5lZFRvIiwidmFsaWRhdGVzV2hlblN0YXRlZCIsInN0YXRlZCIsImlzU3RhdGVkIiwidmFsaWRhdGVzV2hlbkRlcml2ZWQiLCJ0ZXJtc0VxdWF0ZSIsImVxdWF0ZVRlcm1zIiwiZXF1YWxpdHlBc3NpZ25tZW50IiwiZXF1YWxpdHlBc3NpZ25tZW50RnJvbUVxdWFsaXR5IiwibGVmdFZhcmlhYmxlQXNzaWdubWVudCIsImxlZnRWYXJpYWJsZUFzc2lnbm1lbnRGcm9tRXF1YWxpdHkiLCJyaWdodFZhcmlhYmxlQXNzaWdubWVudCIsInJpZ2h0VmFyaWFibGVBc3NpZ25tZW50RnJvbUVxdWFsaXR5IiwiYWRkQXNzaWdubWVudCIsInRvSlNPTiIsImdldEJyZWFrUG9pbnQiLCJicmVha1BvaW50SlNPTiIsImpzb24iLCJuYW1lIiwiZnJvbUpTT04iLCJpbnN0YW50aWF0ZSIsImluc3RhbnRpYXRlRXF1YWxpdHkiLCJuZWdhdGVkRnJvbUVxdWFsaXR5Tm9kZSIsImxlZnRUZXJtRnJvbUVxdWFsaXR5Tm9kZSIsInJpZ2h0VGVybUZyb21FcXVhbGl0eU5vZGUiLCJmcm9tU3RhdGVtZW50Iiwic3RhdGVtZW50Iiwic3RhdGVtZW50Tm9kZSIsImVxdWFsaXR5RnJvbVN0YXRlbWVudE5vZGUiLCJmaW5k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
@@ -18,23 +18,13 @@ const _string = require("../utilities/string");
18
18
  const _element = require("../utilities/element");
19
19
  const { compress } = _necessary.arrayUtilities;
20
20
  const _default = (0, _elements.define)(class Equivalence extends _occamlanguages.Element {
21
- constructor(context, string, node, breakPoint, type, terms){
21
+ constructor(context, string, node, breakPoint, terms){
22
22
  super(context, string, node, breakPoint);
23
- this.type = type;
24
23
  this.terms = terms;
25
24
  }
26
- getType() {
27
- return this.type;
28
- }
29
25
  getTerms() {
30
26
  return this.terms;
31
27
  }
32
- setType(type) {
33
- this.type = type;
34
- }
35
- setTerms(terms) {
36
- this.terms = terms;
37
- }
38
28
  getEquivalenceNode() {
39
29
  const node = this.getNode(), equivalenceNode = node; ///
40
30
  return equivalenceNode;
@@ -144,53 +134,33 @@ const _default = (0, _elements.define)(class Equivalence extends _occamlanguages
144
134
  ...terms
145
135
  ];
146
136
  compress(combinedTerms, (combinedTermA, combinedTermB)=>{
147
- const combinedTermEqualToToCombinedTermB = combinedTermA.isEqualTo(combinedTermB);
148
- if (!combinedTermEqualToToCombinedTermB) {
137
+ const combinedTermEqualToCombinedTermB = combinedTermA.isEqualTo(combinedTermB);
138
+ if (!combinedTermEqualToCombinedTermB) {
149
139
  return true;
150
140
  }
151
141
  });
152
142
  return combinedTerms;
153
143
  }
154
144
  mergedWith(equivalence, context) {
155
- let type;
156
- type = equivalence.getType();
157
- const types = [
158
- this.type,
159
- type
160
- ], terms = equivalence.getTerms(), combinedType = combinedTypeFromTypes(types), combinedTerms = this.combineTerms(terms);
161
- type = combinedType; ///
162
145
  (0, _context.instantiate)((context)=>{
163
- const terms = combinedTerms, equivalenceString = (0, _string.equivalenceStringFromTerms)(terms), string = equivalenceString, equivalenceNode = (0, _instantiate.instantiateEquivalence)(string, context);
146
+ let terms;
147
+ terms = equivalence.getTerms();
148
+ const combinedTerms = this.combineTerms(terms);
149
+ terms = combinedTerms; ///
150
+ const equivalenceString = (0, _string.equivalenceStringFromTerms)(terms), string = equivalenceString, equivalenceNode = (0, _instantiate.instantiateEquivalence)(string, context);
164
151
  equivalence = (0, _element.equivalenceFromEquivalenceNode)(equivalenceNode, context);
165
152
  }, context);
166
- equivalence.setType(type);
167
153
  return equivalence;
168
154
  }
169
155
  static name = "Equivalence";
170
156
  static fromEquality(equality, context) {
171
157
  let equivalence;
172
- const type = equality.getType();
173
158
  (0, _context.instantiate)((context)=>{
174
159
  const terms = equality.getTerms(), equivalenceString = (0, _string.equivalenceStringFromTerms)(terms), string = equivalenceString, equivalenceNode = (0, _instantiate.instantiateEquivalence)(string, context);
175
160
  equivalence = (0, _element.equivalenceFromEquivalenceNode)(equivalenceNode, context);
176
161
  }, context);
177
- equivalence.setType(type);
178
162
  return equivalence;
179
163
  }
180
164
  });
181
- function combinedTypeFromTypes(types) {
182
- const combinedType = types.reduce((combinedType, type)=>{
183
- if (combinedType === null) {
184
- combinedType = type; ///
185
- } else {
186
- const typeSubTypeOfCombinedType = type.isSubTypeOf(combinedType);
187
- if (typeSubTypeOfCombinedType) {
188
- combinedType = type; ///
189
- }
190
- }
191
- return combinedType;
192
- }, null);
193
- return combinedType;
194
- }
195
165
 
196
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9lbGVtZW50L2VxdWl2YWxlbmNlLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBFbGVtZW50IH0gZnJvbSBcIm9jY2FtLWxhbmd1YWdlc1wiO1xuaW1wb3J0IHsgYXJyYXlVdGlsaXRpZXMgfSBmcm9tIFwibmVjZXNzYXJ5XCI7XG5cbmltcG9ydCB7IGRlZmluZSB9IGZyb20gXCIuLi9lbGVtZW50c1wiO1xuaW1wb3J0IHsgaW5zdGFudGlhdGUgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2NvbnRleHRcIjtcbmltcG9ydCB7IGluc3RhbnRpYXRlRXF1aXZhbGVuY2UgfSBmcm9tIFwiLi4vcHJvY2Vzcy9pbnN0YW50aWF0ZVwiO1xuaW1wb3J0IHsgc3RyaXBCcmFja2V0c0Zyb21UZXJtTm9kZSB9IGZyb20gXCIuLi91dGlsaXRpZXMvYnJhY2tldHNcIjtcbmltcG9ydCB7IGVxdWl2YWxlbmNlU3RyaW5nRnJvbVRlcm1zIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9zdHJpbmdcIjtcbmltcG9ydCB7IGVxdWl2YWxlbmNlRnJvbUVxdWl2YWxlbmNlTm9kZSB9IGZyb20gXCIuLi91dGlsaXRpZXMvZWxlbWVudFwiO1xuXG5jb25zdCB7IGNvbXByZXNzIH0gPSBhcnJheVV0aWxpdGllcztcblxuZXhwb3J0IGRlZmF1bHQgZGVmaW5lKGNsYXNzIEVxdWl2YWxlbmNlIGV4dGVuZHMgRWxlbWVudCB7XG4gIGNvbnN0cnVjdG9yKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgdHlwZSwgdGVybXMpIHtcbiAgICBzdXBlcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQpO1xuXG4gICAgdGhpcy50eXBlID0gdHlwZTtcbiAgICB0aGlzLnRlcm1zID0gdGVybXM7XG4gIH1cblxuICBnZXRUeXBlKCkge1xuICAgIHJldHVybiB0aGlzLnR5cGU7XG4gIH1cblxuICBnZXRUZXJtcygpIHtcbiAgICByZXR1cm4gdGhpcy50ZXJtcztcbiAgfVxuXG4gIHNldFR5cGUodHlwZSkge1xuICAgIHRoaXMudHlwZSA9IHR5cGU7XG4gIH1cblxuICBzZXRUZXJtcyh0ZXJtcykge1xuICAgIHRoaXMudGVybXMgPSB0ZXJtcztcbiAgfVxuXG4gIGdldEVxdWl2YWxlbmNlTm9kZSgpIHtcbiAgICBjb25zdCBub2RlID0gdGhpcy5nZXROb2RlKCksXG4gICAgICAgICAgZXF1aXZhbGVuY2VOb2RlID0gbm9kZTsgLy8vXG5cbiAgICByZXR1cm4gZXF1aXZhbGVuY2VOb2RlO1xuICB9XG5cbiAgZ2V0R3JvdW5kZWRUZXJtcyhkZWZpbmVkVmFyaWFibGVzLCBncm91bmRlZFRlcm1zLCBjb250ZXh0KSB7XG4gICAgdGhpcy50ZXJtcy5mb3JFYWNoKCh0ZXJtKSA9PiB7XG4gICAgICBjb25zdCB0ZXJtR3JvdW5kZWQgPSB0ZXJtLmlzR3JvdW5kZWQoZGVmaW5lZFZhcmlhYmxlcywgY29udGV4dCk7XG5cbiAgICAgIGlmICh0ZXJtR3JvdW5kZWQpIHtcbiAgICAgICAgY29uc3QgdGVybU1hdGNoZXNHcm91bmRlZFRlcm0gPSBncm91bmRlZFRlcm1zLnNvbWUoKGdyb3VuZGVkVGVybSkgPT4ge1xuICAgICAgICAgIGNvbnN0IGdyb3VuZGVkVGVybU5vZGUgPSBncm91bmRlZFRlcm0uZ2V0Tm9kZSgpLFxuICAgICAgICAgICAgICAgIGdyb3VuZGVkVGVybU5vZGVNYXRjaGVzID0gdGVybS5tYXRjaFRlcm1Ob2RlKGdyb3VuZGVkVGVybU5vZGUpO1xuXG4gICAgICAgICAgaWYgKGdyb3VuZGVkVGVybU5vZGVNYXRjaGVzKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG5cbiAgICAgICAgaWYgKCF0ZXJtTWF0Y2hlc0dyb3VuZGVkVGVybSkge1xuICAgICAgICAgIGNvbnN0IGdyb3VuZGVkVGVybSA9IHRlcm07XG5cbiAgICAgICAgICBncm91bmRlZFRlcm1zLnB1c2goZ3JvdW5kZWRUZXJtKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgZ2V0SW5pdGlhbGx5R3JvdW5kZWRUZXJtcyhjb250ZXh0KSB7XG4gICAgY29uc3QgaW5pdGlhbGx5R3JvdW5kZWRUZXJtcyA9IHRoaXMudGVybXMucmVkdWNlKChpbml0aWFsbHlHcm91bmRlZFRlcm1zLCB0ZXJtKSA9PiB7XG4gICAgICBjb25zdCB0ZXJtSW5pdGlhbGx5R3JvdW5kZWQgPSB0ZXJtLmlzSW5pdGlhbGx5R3JvdW5kZWQoY29udGV4dCk7XG5cbiAgICAgIGlmICh0ZXJtSW5pdGlhbGx5R3JvdW5kZWQpIHtcbiAgICAgICAgY29uc3QgaW5pdGlhbGx5R3JvdW5kZWRUZXJtID0gdGVybTsgLy8vXG5cbiAgICAgICAgaW5pdGlhbGx5R3JvdW5kZWRUZXJtcy5wdXNoKGluaXRpYWxseUdyb3VuZGVkVGVybSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBpbml0aWFsbHlHcm91bmRlZFRlcm1zO1xuICAgIH0sIFtdKTtcblxuICAgIHJldHVybiBpbml0aWFsbHlHcm91bmRlZFRlcm1zO1xuICB9XG5cbiAgZ2V0SW1wbGljaXRseUdyb3VuZGVkVGVybXMoZGVmaW5lZFZhcmlhYmxlcywgY29udGV4dCkge1xuICAgIGNvbnN0IGltcGxpY2l0bHlHcm91bmRlZFRlcm1zID0gdGhpcy50ZXJtcy5yZWR1Y2UoKGltcGxpY2l0bHlHcm91bmRlZFRlcm1zLCB0ZXJtKSA9PiB7XG4gICAgICBjb25zdCB0ZXJtSW1wbGljaXRseUdyb3VuZGVkID0gdGVybS5pc0ltcGxpY2l0bHlHcm91bmRlZChkZWZpbmVkVmFyaWFibGVzLCBjb250ZXh0KTtcblxuICAgICAgaWYgKHRlcm1JbXBsaWNpdGx5R3JvdW5kZWQpIHtcbiAgICAgICAgY29uc3QgaW1wbGljaXRseUdyb3VuZGVkVGVybSA9IHRlcm07IC8vL1xuXG4gICAgICAgIGltcGxpY2l0bHlHcm91bmRlZFRlcm1zLnB1c2goaW1wbGljaXRseUdyb3VuZGVkVGVybSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBpbXBsaWNpdGx5R3JvdW5kZWRUZXJtcztcbiAgICB9LCBbXSk7XG5cbiAgICByZXR1cm4gaW1wbGljaXRseUdyb3VuZGVkVGVybXM7XG4gIH1cblxuICBpc0Rpc2pvaW50RnJvbShlcXVpdmFsZW5jZSkge1xuICAgIGNvbnN0IGRpc2pvaW50RnJvbSA9IGVxdWl2YWxlbmNlLmV2ZXJ5VGVybSgodGVybSkgPT4ge1xuICAgICAgY29uc3QgY29tcGFyZXNUb1Rlcm0gPSB0aGlzLmNvbXBhcmVUZXJtKHRlcm0pO1xuXG4gICAgICBpZiAoIWNvbXBhcmVzVG9UZXJtKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGRpc2pvaW50RnJvbTtcbiAgfVxuXG4gIGlzSW5pdGlhbGx5R3JvdW5kZWQoY29udGV4dCkge1xuICAgIGNvbnN0IGluaXRpYWxseUdyb3VuZGVkVGVybXMgPSB0aGlzLmdldEluaXRpYWxseUdyb3VuZGVkVGVybXMoY29udGV4dCksXG4gICAgICAgICAgaW5pdGlhbGx5R3JvdW5kZWRUZXJtc0xlbmd0aCA9IGluaXRpYWxseUdyb3VuZGVkVGVybXMubGVuZ3RoLFxuICAgICAgICAgIGluaXRpYWxseUdyb3VuZGVkID0gKGluaXRpYWxseUdyb3VuZGVkVGVybXNMZW5ndGggPiAwKTtcblxuICAgIHJldHVybiBpbml0aWFsbHlHcm91bmRlZDtcbiAgfVxuXG4gIGlzSW1wbGljaXRseUdyb3VuZGVkKGRlZmluZWRWYXJpYWJsZXMsIGNvbnRleHQpIHtcbiAgICBjb25zdCBpbXBsaWNpdGx5R3JvdW5kZWRUZXJtcyA9IHRoaXMuZ2V0SW1wbGljaXRseUdyb3VuZGVkVGVybXMoZGVmaW5lZFZhcmlhYmxlcywgY29udGV4dCksXG4gICAgICAgICAgaW1wbGljaXRseUdyb3VuZGVkVGVybXNMZW5ndGggPSBpbXBsaWNpdGx5R3JvdW5kZWRUZXJtcy5sZW5ndGgsXG4gICAgICAgICAgaW1wbGljaXRseUdyb3VuZGVkID0gKGltcGxpY2l0bHlHcm91bmRlZFRlcm1zTGVuZ3RoID4gMCk7XG5cbiAgICByZXR1cm4gaW1wbGljaXRseUdyb3VuZGVkO1xuICB9XG5cbiAgbWF0Y2hUZXJtTm9kZSh0ZXJtTm9kZSkge1xuICAgIHRlcm1Ob2RlID0gc3RyaXBCcmFja2V0c0Zyb21UZXJtTm9kZSh0ZXJtTm9kZSk7IC8vL1xuXG4gICAgY29uc3QgdGVybU5vZGVNYXRjaGVzID0gdGhpcy5zb21lVGVybSgodGVybSkgPT4ge1xuICAgICAgY29uc3QgdGVybU5vZGVNYXRjaGVzID0gdGVybS5tYXRjaFRlcm1Ob2RlKHRlcm1Ob2RlKTtcblxuICAgICAgaWYgKHRlcm1Ob2RlTWF0Y2hlcykge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiB0ZXJtTm9kZU1hdGNoZXM7XG4gIH1cblxuICBtYXRjaFRlcm1Ob2Rlcyh0ZXJtTm9kZXMpIHtcbiAgICBjb25zdCB0ZXJtTm9kZXNNYXRjaCA9IHRlcm1Ob2Rlcy5ldmVyeSgodGVybU5vZGUpID0+IHtcbiAgICAgIGNvbnN0IHRlcm1Ob2RlTWF0Y2hlcyA9IHRoaXMubWF0Y2hUZXJtTm9kZSh0ZXJtTm9kZSk7XG5cbiAgICAgIGlmICh0ZXJtTm9kZU1hdGNoZXMpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gdGVybU5vZGVzTWF0Y2g7XG4gIH1cblxuICBzb21lVGVybShjYWxsYmFjaykgeyByZXR1cm4gdGhpcy50ZXJtcy5zb21lKGNhbGxiYWNrKTsgfVxuXG4gIGV2ZXJ5VGVybShjYWxsYmFjaykgeyByZXR1cm4gdGhpcy50ZXJtcy5ldmVyeShjYWxsYmFjayk7IH1cblxuICBjb21wYXJlVGVybSh0ZXJtKSB7XG4gICAgY29uc3QgdGVybUEgPSB0ZXJtLCAvLy9cbiAgICAgICAgICBjb21wYXJlc1RvVGVybSA9IHRoaXMuc29tZVRlcm0oKHRlcm0pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHRlcm1CID0gdGVybSwgLy8vXG4gICAgICAgICAgICAgICAgICB0ZXJtQUVxdWFsVG9UZXJtQiA9IHRlcm1BLmlzRXF1YWxUbyh0ZXJtQik7XG5cbiAgICAgICAgICAgIGlmICh0ZXJtQUVxdWFsVG9UZXJtQikge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcblxuICAgIHJldHVybiBjb21wYXJlc1RvVGVybTtcbiAgfVxuXG4gIHNvbWVPdGhlclRlcm0odGVybSwgY2FsbGJhY2spIHtcbiAgICBjb25zdCB0ZXJtQSA9IHRlcm0sIC8vL1xuICAgICAgICAgIHRlcm1zID0gdGhpcy50ZXJtcy5maWx0ZXIoKHRlcm0pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHRlcm1CID0gdGVybSwgLy8vXG4gICAgICAgICAgICAgICAgICB0ZXJtQUVxdWFsVG9UZXJtQiA9IHRlcm1BLmlzRXF1YWxUbyh0ZXJtQik7XG5cbiAgICAgICAgICAgIGlmICghdGVybUFFcXVhbFRvVGVybUIpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSksXG4gICAgICAgICAgcmVzdWx0ID0gdGVybXMuc29tZShjYWxsYmFjayk7XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgY29tYmluZVRlcm1zKHRlcm1zKSB7XG4gICAgY29uc3QgY29tYmluZWRUZXJtcyA9IFtcbiAgICAgIC4uLnRoaXMudGVybXMsXG4gICAgICAuLi50ZXJtc1xuICAgIF07XG5cbiAgICBjb21wcmVzcyhjb21iaW5lZFRlcm1zLCAoY29tYmluZWRUZXJtQSwgY29tYmluZWRUZXJtQikgPT4ge1xuICAgICAgY29uc3QgY29tYmluZWRUZXJtRXF1YWxUb1RvQ29tYmluZWRUZXJtQiA9IGNvbWJpbmVkVGVybUEuaXNFcXVhbFRvKGNvbWJpbmVkVGVybUIpO1xuXG4gICAgICBpZiAoIWNvbWJpbmVkVGVybUVxdWFsVG9Ub0NvbWJpbmVkVGVybUIpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gY29tYmluZWRUZXJtcztcbiAgfVxuXG4gIG1lcmdlZFdpdGgoZXF1aXZhbGVuY2UsIGNvbnRleHQpIHtcbiAgICBsZXQgdHlwZTtcblxuICAgIHR5cGUgPSBlcXVpdmFsZW5jZS5nZXRUeXBlKCk7XG5cbiAgICBjb25zdCB0eXBlcyA9IFtcbiAgICAgICAgICAgIHRoaXMudHlwZSxcbiAgICAgICAgICAgIHR5cGVcbiAgICAgICAgICBdLFxuICAgICAgICAgIHRlcm1zID0gZXF1aXZhbGVuY2UuZ2V0VGVybXMoKSxcbiAgICAgICAgICBjb21iaW5lZFR5cGUgPSBjb21iaW5lZFR5cGVGcm9tVHlwZXModHlwZXMpLFxuICAgICAgICAgIGNvbWJpbmVkVGVybXMgPSB0aGlzLmNvbWJpbmVUZXJtcyh0ZXJtcyk7XG5cbiAgICB0eXBlID0gY29tYmluZWRUeXBlOyAgLy8vXG5cbiAgICBpbnN0YW50aWF0ZSgoY29udGV4dCkgPT4ge1xuICAgICAgY29uc3QgdGVybXMgPSBjb21iaW5lZFRlcm1zLCAgLy8vXG4gICAgICAgICAgICBlcXVpdmFsZW5jZVN0cmluZyA9IGVxdWl2YWxlbmNlU3RyaW5nRnJvbVRlcm1zKHRlcm1zKSxcbiAgICAgICAgICAgIHN0cmluZyA9IGVxdWl2YWxlbmNlU3RyaW5nLCAgLy8vXG4gICAgICAgICAgICBlcXVpdmFsZW5jZU5vZGUgPSBpbnN0YW50aWF0ZUVxdWl2YWxlbmNlKHN0cmluZywgY29udGV4dCk7XG5cbiAgICAgIGVxdWl2YWxlbmNlID0gZXF1aXZhbGVuY2VGcm9tRXF1aXZhbGVuY2VOb2RlKGVxdWl2YWxlbmNlTm9kZSwgY29udGV4dCk7XG4gICAgfSwgY29udGV4dCk7XG5cbiAgICBlcXVpdmFsZW5jZS5zZXRUeXBlKHR5cGUpO1xuXG4gICAgcmV0dXJuIGVxdWl2YWxlbmNlO1xuICB9XG5cbiAgc3RhdGljIG5hbWUgPSBcIkVxdWl2YWxlbmNlXCI7XG5cbiAgc3RhdGljIGZyb21FcXVhbGl0eShlcXVhbGl0eSwgY29udGV4dCkge1xuICAgIGxldCBlcXVpdmFsZW5jZTtcblxuICAgIGNvbnN0IHR5cGUgPSBlcXVhbGl0eS5nZXRUeXBlKCk7XG5cbiAgICBpbnN0YW50aWF0ZSgoY29udGV4dCkgPT4ge1xuICAgICAgY29uc3QgdGVybXMgPSBlcXVhbGl0eS5nZXRUZXJtcygpLFxuICAgICAgICAgICAgZXF1aXZhbGVuY2VTdHJpbmcgPSBlcXVpdmFsZW5jZVN0cmluZ0Zyb21UZXJtcyh0ZXJtcyksXG4gICAgICAgICAgICBzdHJpbmcgPSBlcXVpdmFsZW5jZVN0cmluZywgIC8vL1xuICAgICAgICAgICAgZXF1aXZhbGVuY2VOb2RlID0gaW5zdGFudGlhdGVFcXVpdmFsZW5jZShzdHJpbmcsIGNvbnRleHQpO1xuXG4gICAgICBlcXVpdmFsZW5jZSA9IGVxdWl2YWxlbmNlRnJvbUVxdWl2YWxlbmNlTm9kZShlcXVpdmFsZW5jZU5vZGUsIGNvbnRleHQpO1xuICAgIH0sIGNvbnRleHQpO1xuXG4gICAgZXF1aXZhbGVuY2Uuc2V0VHlwZSh0eXBlKTtcblxuICAgIHJldHVybiBlcXVpdmFsZW5jZTtcbiAgfVxufSk7XG5cbmZ1bmN0aW9uIGNvbWJpbmVkVHlwZUZyb21UeXBlcyh0eXBlcykge1xuICBjb25zdCBjb21iaW5lZFR5cGUgPSB0eXBlcy5yZWR1Y2UoKGNvbWJpbmVkVHlwZSwgdHlwZSkgPT4ge1xuICAgIGlmIChjb21iaW5lZFR5cGUgPT09IG51bGwpIHtcbiAgICAgIGNvbWJpbmVkVHlwZSA9IHR5cGU7ICAvLy9cbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgdHlwZVN1YlR5cGVPZkNvbWJpbmVkVHlwZSA9IHR5cGUuaXNTdWJUeXBlT2YoY29tYmluZWRUeXBlKTtcblxuICAgICAgaWYgKHR5cGVTdWJUeXBlT2ZDb21iaW5lZFR5cGUpIHtcbiAgICAgICAgY29tYmluZWRUeXBlID0gdHlwZTsgIC8vL1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBjb21iaW5lZFR5cGU7XG4gIH0sIG51bGwpO1xuXG4gIHJldHVybiBjb21iaW5lZFR5cGU7XG59XG4iXSwibmFtZXMiOlsiY29tcHJlc3MiLCJhcnJheVV0aWxpdGllcyIsImRlZmluZSIsIkVxdWl2YWxlbmNlIiwiRWxlbWVudCIsImNvbnRleHQiLCJzdHJpbmciLCJub2RlIiwiYnJlYWtQb2ludCIsInR5cGUiLCJ0ZXJtcyIsImdldFR5cGUiLCJnZXRUZXJtcyIsInNldFR5cGUiLCJzZXRUZXJtcyIsImdldEVxdWl2YWxlbmNlTm9kZSIsImdldE5vZGUiLCJlcXVpdmFsZW5jZU5vZGUiLCJnZXRHcm91bmRlZFRlcm1zIiwiZGVmaW5lZFZhcmlhYmxlcyIsImdyb3VuZGVkVGVybXMiLCJmb3JFYWNoIiwidGVybSIsInRlcm1Hcm91bmRlZCIsImlzR3JvdW5kZWQiLCJ0ZXJtTWF0Y2hlc0dyb3VuZGVkVGVybSIsInNvbWUiLCJncm91bmRlZFRlcm0iLCJncm91bmRlZFRlcm1Ob2RlIiwiZ3JvdW5kZWRUZXJtTm9kZU1hdGNoZXMiLCJtYXRjaFRlcm1Ob2RlIiwicHVzaCIsImdldEluaXRpYWxseUdyb3VuZGVkVGVybXMiLCJpbml0aWFsbHlHcm91bmRlZFRlcm1zIiwicmVkdWNlIiwidGVybUluaXRpYWxseUdyb3VuZGVkIiwiaXNJbml0aWFsbHlHcm91bmRlZCIsImluaXRpYWxseUdyb3VuZGVkVGVybSIsImdldEltcGxpY2l0bHlHcm91bmRlZFRlcm1zIiwiaW1wbGljaXRseUdyb3VuZGVkVGVybXMiLCJ0ZXJtSW1wbGljaXRseUdyb3VuZGVkIiwiaXNJbXBsaWNpdGx5R3JvdW5kZWQiLCJpbXBsaWNpdGx5R3JvdW5kZWRUZXJtIiwiaXNEaXNqb2ludEZyb20iLCJlcXVpdmFsZW5jZSIsImRpc2pvaW50RnJvbSIsImV2ZXJ5VGVybSIsImNvbXBhcmVzVG9UZXJtIiwiY29tcGFyZVRlcm0iLCJpbml0aWFsbHlHcm91bmRlZFRlcm1zTGVuZ3RoIiwibGVuZ3RoIiwiaW5pdGlhbGx5R3JvdW5kZWQiLCJpbXBsaWNpdGx5R3JvdW5kZWRUZXJtc0xlbmd0aCIsImltcGxpY2l0bHlHcm91bmRlZCIsInRlcm1Ob2RlIiwic3RyaXBCcmFja2V0c0Zyb21UZXJtTm9kZSIsInRlcm1Ob2RlTWF0Y2hlcyIsInNvbWVUZXJtIiwibWF0Y2hUZXJtTm9kZXMiLCJ0ZXJtTm9kZXMiLCJ0ZXJtTm9kZXNNYXRjaCIsImV2ZXJ5IiwiY2FsbGJhY2siLCJ0ZXJtQSIsInRlcm1CIiwidGVybUFFcXVhbFRvVGVybUIiLCJpc0VxdWFsVG8iLCJzb21lT3RoZXJUZXJtIiwiZmlsdGVyIiwicmVzdWx0IiwiY29tYmluZVRlcm1zIiwiY29tYmluZWRUZXJtcyIsImNvbWJpbmVkVGVybUEiLCJjb21iaW5lZFRlcm1CIiwiY29tYmluZWRUZXJtRXF1YWxUb1RvQ29tYmluZWRUZXJtQiIsIm1lcmdlZFdpdGgiLCJ0eXBlcyIsImNvbWJpbmVkVHlwZSIsImNvbWJpbmVkVHlwZUZyb21UeXBlcyIsImluc3RhbnRpYXRlIiwiZXF1aXZhbGVuY2VTdHJpbmciLCJlcXVpdmFsZW5jZVN0cmluZ0Zyb21UZXJtcyIsImluc3RhbnRpYXRlRXF1aXZhbGVuY2UiLCJlcXVpdmFsZW5jZUZyb21FcXVpdmFsZW5jZU5vZGUiLCJuYW1lIiwiZnJvbUVxdWFsaXR5IiwiZXF1YWxpdHkiLCJ0eXBlU3ViVHlwZU9mQ29tYmluZWRUeXBlIiwiaXNTdWJUeXBlT2YiXSwibWFwcGluZ3MiOiJBQUFBOzs7OytCQWNBOzs7ZUFBQTs7O2dDQVp3QjsyQkFDTzswQkFFUjt5QkFDSzs2QkFDVzswQkFDRzt3QkFDQzt5QkFDSTtBQUUvQyxNQUFNLEVBQUVBLFFBQVEsRUFBRSxHQUFHQyx5QkFBYztNQUVuQyxXQUFlQyxJQUFBQSxnQkFBTSxFQUFDLE1BQU1DLG9CQUFvQkMsdUJBQU87SUFDckQsWUFBWUMsT0FBTyxFQUFFQyxNQUFNLEVBQUVDLElBQUksRUFBRUMsVUFBVSxFQUFFQyxJQUFJLEVBQUVDLEtBQUssQ0FB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
166
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9lbGVtZW50L2VxdWl2YWxlbmNlLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBFbGVtZW50IH0gZnJvbSBcIm9jY2FtLWxhbmd1YWdlc1wiO1xuaW1wb3J0IHsgYXJyYXlVdGlsaXRpZXMgfSBmcm9tIFwibmVjZXNzYXJ5XCI7XG5cbmltcG9ydCB7IGRlZmluZSB9IGZyb20gXCIuLi9lbGVtZW50c1wiO1xuaW1wb3J0IHsgaW5zdGFudGlhdGUgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2NvbnRleHRcIjtcbmltcG9ydCB7IGluc3RhbnRpYXRlRXF1aXZhbGVuY2UgfSBmcm9tIFwiLi4vcHJvY2Vzcy9pbnN0YW50aWF0ZVwiO1xuaW1wb3J0IHsgc3RyaXBCcmFja2V0c0Zyb21UZXJtTm9kZSB9IGZyb20gXCIuLi91dGlsaXRpZXMvYnJhY2tldHNcIjtcbmltcG9ydCB7IGVxdWl2YWxlbmNlU3RyaW5nRnJvbVRlcm1zIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9zdHJpbmdcIjtcbmltcG9ydCB7IGVxdWl2YWxlbmNlRnJvbUVxdWl2YWxlbmNlTm9kZSB9IGZyb20gXCIuLi91dGlsaXRpZXMvZWxlbWVudFwiO1xuXG5jb25zdCB7IGNvbXByZXNzIH0gPSBhcnJheVV0aWxpdGllcztcblxuZXhwb3J0IGRlZmF1bHQgZGVmaW5lKGNsYXNzIEVxdWl2YWxlbmNlIGV4dGVuZHMgRWxlbWVudCB7XG4gIGNvbnN0cnVjdG9yKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgdGVybXMpIHtcbiAgICBzdXBlcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQpO1xuXG4gICAgdGhpcy50ZXJtcyA9IHRlcm1zO1xuICB9XG5cbiAgZ2V0VGVybXMoKSB7XG4gICAgcmV0dXJuIHRoaXMudGVybXM7XG4gIH1cblxuICBnZXRFcXVpdmFsZW5jZU5vZGUoKSB7XG4gICAgY29uc3Qgbm9kZSA9IHRoaXMuZ2V0Tm9kZSgpLFxuICAgICAgICAgIGVxdWl2YWxlbmNlTm9kZSA9IG5vZGU7IC8vL1xuXG4gICAgcmV0dXJuIGVxdWl2YWxlbmNlTm9kZTtcbiAgfVxuXG4gIGdldEdyb3VuZGVkVGVybXMoZGVmaW5lZFZhcmlhYmxlcywgZ3JvdW5kZWRUZXJtcywgY29udGV4dCkge1xuICAgIHRoaXMudGVybXMuZm9yRWFjaCgodGVybSkgPT4ge1xuICAgICAgY29uc3QgdGVybUdyb3VuZGVkID0gdGVybS5pc0dyb3VuZGVkKGRlZmluZWRWYXJpYWJsZXMsIGNvbnRleHQpO1xuXG4gICAgICBpZiAodGVybUdyb3VuZGVkKSB7XG4gICAgICAgIGNvbnN0IHRlcm1NYXRjaGVzR3JvdW5kZWRUZXJtID0gZ3JvdW5kZWRUZXJtcy5zb21lKChncm91bmRlZFRlcm0pID0+IHtcbiAgICAgICAgICBjb25zdCBncm91bmRlZFRlcm1Ob2RlID0gZ3JvdW5kZWRUZXJtLmdldE5vZGUoKSxcbiAgICAgICAgICAgICAgICBncm91bmRlZFRlcm1Ob2RlTWF0Y2hlcyA9IHRlcm0ubWF0Y2hUZXJtTm9kZShncm91bmRlZFRlcm1Ob2RlKTtcblxuICAgICAgICAgIGlmIChncm91bmRlZFRlcm1Ob2RlTWF0Y2hlcykge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9KVxuXG4gICAgICAgIGlmICghdGVybU1hdGNoZXNHcm91bmRlZFRlcm0pIHtcbiAgICAgICAgICBjb25zdCBncm91bmRlZFRlcm0gPSB0ZXJtO1xuXG4gICAgICAgICAgZ3JvdW5kZWRUZXJtcy5wdXNoKGdyb3VuZGVkVGVybSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGdldEluaXRpYWxseUdyb3VuZGVkVGVybXMoY29udGV4dCkge1xuICAgIGNvbnN0IGluaXRpYWxseUdyb3VuZGVkVGVybXMgPSB0aGlzLnRlcm1zLnJlZHVjZSgoaW5pdGlhbGx5R3JvdW5kZWRUZXJtcywgdGVybSkgPT4ge1xuICAgICAgY29uc3QgdGVybUluaXRpYWxseUdyb3VuZGVkID0gdGVybS5pc0luaXRpYWxseUdyb3VuZGVkKGNvbnRleHQpO1xuXG4gICAgICBpZiAodGVybUluaXRpYWxseUdyb3VuZGVkKSB7XG4gICAgICAgIGNvbnN0IGluaXRpYWxseUdyb3VuZGVkVGVybSA9IHRlcm07IC8vL1xuXG4gICAgICAgIGluaXRpYWxseUdyb3VuZGVkVGVybXMucHVzaChpbml0aWFsbHlHcm91bmRlZFRlcm0pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gaW5pdGlhbGx5R3JvdW5kZWRUZXJtcztcbiAgICB9LCBbXSk7XG5cbiAgICByZXR1cm4gaW5pdGlhbGx5R3JvdW5kZWRUZXJtcztcbiAgfVxuXG4gIGdldEltcGxpY2l0bHlHcm91bmRlZFRlcm1zKGRlZmluZWRWYXJpYWJsZXMsIGNvbnRleHQpIHtcbiAgICBjb25zdCBpbXBsaWNpdGx5R3JvdW5kZWRUZXJtcyA9IHRoaXMudGVybXMucmVkdWNlKChpbXBsaWNpdGx5R3JvdW5kZWRUZXJtcywgdGVybSkgPT4ge1xuICAgICAgY29uc3QgdGVybUltcGxpY2l0bHlHcm91bmRlZCA9IHRlcm0uaXNJbXBsaWNpdGx5R3JvdW5kZWQoZGVmaW5lZFZhcmlhYmxlcywgY29udGV4dCk7XG5cbiAgICAgIGlmICh0ZXJtSW1wbGljaXRseUdyb3VuZGVkKSB7XG4gICAgICAgIGNvbnN0IGltcGxpY2l0bHlHcm91bmRlZFRlcm0gPSB0ZXJtOyAvLy9cblxuICAgICAgICBpbXBsaWNpdGx5R3JvdW5kZWRUZXJtcy5wdXNoKGltcGxpY2l0bHlHcm91bmRlZFRlcm0pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gaW1wbGljaXRseUdyb3VuZGVkVGVybXM7XG4gICAgfSwgW10pO1xuXG4gICAgcmV0dXJuIGltcGxpY2l0bHlHcm91bmRlZFRlcm1zO1xuICB9XG5cbiAgaXNEaXNqb2ludEZyb20oZXF1aXZhbGVuY2UpIHtcbiAgICBjb25zdCBkaXNqb2ludEZyb20gPSBlcXVpdmFsZW5jZS5ldmVyeVRlcm0oKHRlcm0pID0+IHtcbiAgICAgIGNvbnN0IGNvbXBhcmVzVG9UZXJtID0gdGhpcy5jb21wYXJlVGVybSh0ZXJtKTtcblxuICAgICAgaWYgKCFjb21wYXJlc1RvVGVybSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBkaXNqb2ludEZyb207XG4gIH1cblxuICBpc0luaXRpYWxseUdyb3VuZGVkKGNvbnRleHQpIHtcbiAgICBjb25zdCBpbml0aWFsbHlHcm91bmRlZFRlcm1zID0gdGhpcy5nZXRJbml0aWFsbHlHcm91bmRlZFRlcm1zKGNvbnRleHQpLFxuICAgICAgICAgIGluaXRpYWxseUdyb3VuZGVkVGVybXNMZW5ndGggPSBpbml0aWFsbHlHcm91bmRlZFRlcm1zLmxlbmd0aCxcbiAgICAgICAgICBpbml0aWFsbHlHcm91bmRlZCA9IChpbml0aWFsbHlHcm91bmRlZFRlcm1zTGVuZ3RoID4gMCk7XG5cbiAgICByZXR1cm4gaW5pdGlhbGx5R3JvdW5kZWQ7XG4gIH1cblxuICBpc0ltcGxpY2l0bHlHcm91bmRlZChkZWZpbmVkVmFyaWFibGVzLCBjb250ZXh0KSB7XG4gICAgY29uc3QgaW1wbGljaXRseUdyb3VuZGVkVGVybXMgPSB0aGlzLmdldEltcGxpY2l0bHlHcm91bmRlZFRlcm1zKGRlZmluZWRWYXJpYWJsZXMsIGNvbnRleHQpLFxuICAgICAgICAgIGltcGxpY2l0bHlHcm91bmRlZFRlcm1zTGVuZ3RoID0gaW1wbGljaXRseUdyb3VuZGVkVGVybXMubGVuZ3RoLFxuICAgICAgICAgIGltcGxpY2l0bHlHcm91bmRlZCA9IChpbXBsaWNpdGx5R3JvdW5kZWRUZXJtc0xlbmd0aCA+IDApO1xuXG4gICAgcmV0dXJuIGltcGxpY2l0bHlHcm91bmRlZDtcbiAgfVxuXG4gIG1hdGNoVGVybU5vZGUodGVybU5vZGUpIHtcbiAgICB0ZXJtTm9kZSA9IHN0cmlwQnJhY2tldHNGcm9tVGVybU5vZGUodGVybU5vZGUpOyAvLy9cblxuICAgIGNvbnN0IHRlcm1Ob2RlTWF0Y2hlcyA9IHRoaXMuc29tZVRlcm0oKHRlcm0pID0+IHtcbiAgICAgIGNvbnN0IHRlcm1Ob2RlTWF0Y2hlcyA9IHRlcm0ubWF0Y2hUZXJtTm9kZSh0ZXJtTm9kZSk7XG5cbiAgICAgIGlmICh0ZXJtTm9kZU1hdGNoZXMpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gdGVybU5vZGVNYXRjaGVzO1xuICB9XG5cbiAgbWF0Y2hUZXJtTm9kZXModGVybU5vZGVzKSB7XG4gICAgY29uc3QgdGVybU5vZGVzTWF0Y2ggPSB0ZXJtTm9kZXMuZXZlcnkoKHRlcm1Ob2RlKSA9PiB7XG4gICAgICBjb25zdCB0ZXJtTm9kZU1hdGNoZXMgPSB0aGlzLm1hdGNoVGVybU5vZGUodGVybU5vZGUpO1xuXG4gICAgICBpZiAodGVybU5vZGVNYXRjaGVzKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHRlcm1Ob2Rlc01hdGNoO1xuICB9XG5cbiAgc29tZVRlcm0oY2FsbGJhY2spIHsgcmV0dXJuIHRoaXMudGVybXMuc29tZShjYWxsYmFjayk7IH1cblxuICBldmVyeVRlcm0oY2FsbGJhY2spIHsgcmV0dXJuIHRoaXMudGVybXMuZXZlcnkoY2FsbGJhY2spOyB9XG5cbiAgY29tcGFyZVRlcm0odGVybSkge1xuICAgIGNvbnN0IHRlcm1BID0gdGVybSwgLy8vXG4gICAgICAgICAgY29tcGFyZXNUb1Rlcm0gPSB0aGlzLnNvbWVUZXJtKCh0ZXJtKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB0ZXJtQiA9IHRlcm0sIC8vL1xuICAgICAgICAgICAgICAgICAgdGVybUFFcXVhbFRvVGVybUIgPSB0ZXJtQS5pc0VxdWFsVG8odGVybUIpO1xuXG4gICAgICAgICAgICBpZiAodGVybUFFcXVhbFRvVGVybUIpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG5cbiAgICByZXR1cm4gY29tcGFyZXNUb1Rlcm07XG4gIH1cblxuICBzb21lT3RoZXJUZXJtKHRlcm0sIGNhbGxiYWNrKSB7XG4gICAgY29uc3QgdGVybUEgPSB0ZXJtLCAvLy9cbiAgICAgICAgICB0ZXJtcyA9IHRoaXMudGVybXMuZmlsdGVyKCh0ZXJtKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB0ZXJtQiA9IHRlcm0sIC8vL1xuICAgICAgICAgICAgICAgICAgdGVybUFFcXVhbFRvVGVybUIgPSB0ZXJtQS5pc0VxdWFsVG8odGVybUIpO1xuXG4gICAgICAgICAgICBpZiAoIXRlcm1BRXF1YWxUb1Rlcm1CKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pLFxuICAgICAgICAgIHJlc3VsdCA9IHRlcm1zLnNvbWUoY2FsbGJhY2spO1xuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIGNvbWJpbmVUZXJtcyh0ZXJtcykge1xuICAgIGNvbnN0IGNvbWJpbmVkVGVybXMgPSBbXG4gICAgICAuLi50aGlzLnRlcm1zLFxuICAgICAgLi4udGVybXNcbiAgICBdO1xuXG4gICAgY29tcHJlc3MoY29tYmluZWRUZXJtcywgKGNvbWJpbmVkVGVybUEsIGNvbWJpbmVkVGVybUIpID0+IHtcbiAgICAgIGNvbnN0IGNvbWJpbmVkVGVybUVxdWFsVG9Db21iaW5lZFRlcm1CID0gY29tYmluZWRUZXJtQS5pc0VxdWFsVG8oY29tYmluZWRUZXJtQik7XG5cbiAgICAgIGlmICghY29tYmluZWRUZXJtRXF1YWxUb0NvbWJpbmVkVGVybUIpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gY29tYmluZWRUZXJtcztcbiAgfVxuXG4gIG1lcmdlZFdpdGgoZXF1aXZhbGVuY2UsIGNvbnRleHQpIHtcbiAgICBpbnN0YW50aWF0ZSgoY29udGV4dCkgPT4ge1xuICAgICAgbGV0IHRlcm1zO1xuXG4gICAgICB0ZXJtcyA9IGVxdWl2YWxlbmNlLmdldFRlcm1zKCk7XG5cbiAgICAgIGNvbnN0IGNvbWJpbmVkVGVybXMgPSB0aGlzLmNvbWJpbmVUZXJtcyh0ZXJtcyk7XG5cbiAgICAgIHRlcm1zID0gY29tYmluZWRUZXJtczsgIC8vL1xuXG4gICAgICBjb25zdCBlcXVpdmFsZW5jZVN0cmluZyA9IGVxdWl2YWxlbmNlU3RyaW5nRnJvbVRlcm1zKHRlcm1zKSxcbiAgICAgICAgICAgIHN0cmluZyA9IGVxdWl2YWxlbmNlU3RyaW5nLCAgLy8vXG4gICAgICAgICAgICBlcXVpdmFsZW5jZU5vZGUgPSBpbnN0YW50aWF0ZUVxdWl2YWxlbmNlKHN0cmluZywgY29udGV4dCk7XG5cbiAgICAgIGVxdWl2YWxlbmNlID0gZXF1aXZhbGVuY2VGcm9tRXF1aXZhbGVuY2VOb2RlKGVxdWl2YWxlbmNlTm9kZSwgY29udGV4dCk7XG4gICAgfSwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gZXF1aXZhbGVuY2U7XG4gIH1cblxuICBzdGF0aWMgbmFtZSA9IFwiRXF1aXZhbGVuY2VcIjtcblxuICBzdGF0aWMgZnJvbUVxdWFsaXR5KGVxdWFsaXR5LCBjb250ZXh0KSB7XG4gICAgbGV0IGVxdWl2YWxlbmNlO1xuXG4gICAgaW5zdGFudGlhdGUoKGNvbnRleHQpID0+IHtcbiAgICAgIGNvbnN0IHRlcm1zID0gZXF1YWxpdHkuZ2V0VGVybXMoKSxcbiAgICAgICAgICAgIGVxdWl2YWxlbmNlU3RyaW5nID0gZXF1aXZhbGVuY2VTdHJpbmdGcm9tVGVybXModGVybXMpLFxuICAgICAgICAgICAgc3RyaW5nID0gZXF1aXZhbGVuY2VTdHJpbmcsICAvLy9cbiAgICAgICAgICAgIGVxdWl2YWxlbmNlTm9kZSA9IGluc3RhbnRpYXRlRXF1aXZhbGVuY2Uoc3RyaW5nLCBjb250ZXh0KTtcblxuICAgICAgZXF1aXZhbGVuY2UgPSBlcXVpdmFsZW5jZUZyb21FcXVpdmFsZW5jZU5vZGUoZXF1aXZhbGVuY2VOb2RlLCBjb250ZXh0KTtcbiAgICB9LCBjb250ZXh0KTtcblxuICAgIHJldHVybiBlcXVpdmFsZW5jZTtcbiAgfVxufSk7XG4iXSwibmFtZXMiOlsiY29tcHJlc3MiLCJhcnJheVV0aWxpdGllcyIsImRlZmluZSIsIkVxdWl2YWxlbmNlIiwiRWxlbWVudCIsImNvbnRleHQiLCJzdHJpbmciLCJub2RlIiwiYnJlYWtQb2ludCIsInRlcm1zIiwiZ2V0VGVybXMiLCJnZXRFcXVpdmFsZW5jZU5vZGUiLCJnZXROb2RlIiwiZXF1aXZhbGVuY2VOb2RlIiwiZ2V0R3JvdW5kZWRUZXJtcyIsImRlZmluZWRWYXJpYWJsZXMiLCJncm91bmRlZFRlcm1zIiwiZm9yRWFjaCIsInRlcm0iLCJ0ZXJtR3JvdW5kZWQiLCJpc0dyb3VuZGVkIiwidGVybU1hdGNoZXNHcm91bmRlZFRlcm0iLCJzb21lIiwiZ3JvdW5kZWRUZXJtIiwiZ3JvdW5kZWRUZXJtTm9kZSIsImdyb3VuZGVkVGVybU5vZGVNYXRjaGVzIiwibWF0Y2hUZXJtTm9kZSIsInB1c2giLCJnZXRJbml0aWFsbHlHcm91bmRlZFRlcm1zIiwiaW5pdGlhbGx5R3JvdW5kZWRUZXJtcyIsInJlZHVjZSIsInRlcm1Jbml0aWFsbHlHcm91bmRlZCIsImlzSW5pdGlhbGx5R3JvdW5kZWQiLCJpbml0aWFsbHlHcm91bmRlZFRlcm0iLCJnZXRJbXBsaWNpdGx5R3JvdW5kZWRUZXJtcyIsImltcGxpY2l0bHlHcm91bmRlZFRlcm1zIiwidGVybUltcGxpY2l0bHlHcm91bmRlZCIsImlzSW1wbGljaXRseUdyb3VuZGVkIiwiaW1wbGljaXRseUdyb3VuZGVkVGVybSIsImlzRGlzam9pbnRGcm9tIiwiZXF1aXZhbGVuY2UiLCJkaXNqb2ludEZyb20iLCJldmVyeVRlcm0iLCJjb21wYXJlc1RvVGVybSIsImNvbXBhcmVUZXJtIiwiaW5pdGlhbGx5R3JvdW5kZWRUZXJtc0xlbmd0aCIsImxlbmd0aCIsImluaXRpYWxseUdyb3VuZGVkIiwiaW1wbGljaXRseUdyb3VuZGVkVGVybXNMZW5ndGgiLCJpbXBsaWNpdGx5R3JvdW5kZWQiLCJ0ZXJtTm9kZSIsInN0cmlwQnJhY2tldHNGcm9tVGVybU5vZGUiLCJ0ZXJtTm9kZU1hdGNoZXMiLCJzb21lVGVybSIsIm1hdGNoVGVybU5vZGVzIiwidGVybU5vZGVzIiwidGVybU5vZGVzTWF0Y2giLCJldmVyeSIsImNhbGxiYWNrIiwidGVybUEiLCJ0ZXJtQiIsInRlcm1BRXF1YWxUb1Rlcm1CIiwiaXNFcXVhbFRvIiwic29tZU90aGVyVGVybSIsImZpbHRlciIsInJlc3VsdCIsImNvbWJpbmVUZXJtcyIsImNvbWJpbmVkVGVybXMiLCJjb21iaW5lZFRlcm1BIiwiY29tYmluZWRUZXJtQiIsImNvbWJpbmVkVGVybUVxdWFsVG9Db21iaW5lZFRlcm1CIiwibWVyZ2VkV2l0aCIsImluc3RhbnRpYXRlIiwiZXF1aXZhbGVuY2VTdHJpbmciLCJlcXVpdmFsZW5jZVN0cmluZ0Zyb21UZXJtcyIsImluc3RhbnRpYXRlRXF1aXZhbGVuY2UiLCJlcXVpdmFsZW5jZUZyb21FcXVpdmFsZW5jZU5vZGUiLCJuYW1lIiwiZnJvbUVxdWFsaXR5IiwiZXF1YWxpdHkiXSwibWFwcGluZ3MiOiJBQUFBOzs7OytCQWNBOzs7ZUFBQTs7O2dDQVp3QjsyQkFDTzswQkFFUjt5QkFDSzs2QkFDVzswQkFDRzt3QkFDQzt5QkFDSTtBQUUvQyxNQUFNLEVBQUVBLFFBQVEsRUFBRSxHQUFHQyx5QkFBYztNQUVuQyxXQUFlQyxJQUFBQSxnQkFBTSxFQUFDLE1BQU1DLG9CQUFvQkMsdUJBQU87SUFDckQsWUFBWUMsT0FBTyxFQUFFQyxNQUFNLEVBQUVDLElBQUksRUFBRUMsVUFBVSxFQUFFQyxLQUFLLENBQUU7UUFDcEQsS0FBSyxDQUFDSixTQUFTQyxRQUFRQyxNQUFNQztRQUU3QixJQUFJLENBQUNDLEtBQUssR0FBR0E7SUFDZjtJQUVBQyxXQUFXO1FBQ1QsT0FBTyxJQUFJLENBQUNELEtBQUs7SUFDbkI7SUFFQUUscUJBQXFCO1FBQ25CLE1BQU1KLE9BQU8sSUFBSSxDQUFDSyxP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
@@ -16,7 +16,8 @@ const _instantiate = require("../process/instantiate");
16
16
  const _element = require("../utilities/element");
17
17
  const _type = require("../utilities/type");
18
18
  const _json = require("../utilities/json");
19
- const { push, first } = _necessary.arrayUtilities, { breakPointFromJSON, breakPointToBreakPointJSON } = _occamlanguages.breakPointUtilities;
19
+ const _constants = require("../constants");
20
+ const { push, first, intersection } = _necessary.arrayUtilities, { breakPointFromJSON, breakPointToBreakPointJSON } = _occamlanguages.breakPointUtilities;
20
21
  const _default = (0, _elements.define)(class Type extends _occamlanguages.Element {
21
22
  constructor(context, string, node, breakPoint, name, prefixName, superTypes, properties, provisional){
22
23
  super(context, string, node, breakPoint);
@@ -76,10 +77,30 @@ const _default = (0, _elements.define)(class Type extends _occamlanguages.Elemen
76
77
  setProvisional(provisional) {
77
78
  this.provisional = provisional;
78
79
  }
80
+ isBaseType() {
81
+ let baseType = false;
82
+ if (this.name === _constants.BASE_TYPE_SYMBOL) {
83
+ baseType = true;
84
+ }
85
+ return baseType;
86
+ }
79
87
  isEstablished(includeSuperTypes = true) {
80
88
  const provisional = this.isProvisional(includeSuperTypes), established = !provisional;
81
89
  return established;
82
90
  }
91
+ retrieveAncestorTypes(ancestorTypes = []) {
92
+ const baseType = this.isBaseType();
93
+ if (!baseType) {
94
+ const ancestorType = this, ancestorTypesIncludeAncestorType = ancestorTypes.includes(ancestorType);
95
+ if (!ancestorTypesIncludeAncestorType) {
96
+ ancestorTypes.push(ancestorType);
97
+ this.superTypes.forEach((superType)=>{
98
+ superType.retrieveAncestorTypes(ancestorTypes);
99
+ });
100
+ }
101
+ }
102
+ return ancestorTypes;
103
+ }
83
104
  isCotype() {
84
105
  const properties = this.getProperties(), propertiesLength = properties.length, cotype = propertiesLength > 0;
85
106
  return cotype;
@@ -122,6 +143,19 @@ const _default = (0, _elements.define)(class Type extends _occamlanguages.Elemen
122
143
  }
123
144
  return refined;
124
145
  }
146
+ isJoinedTo(type) {
147
+ let joinedTo = false;
148
+ const ancestorTypes = this.retrieveAncestorTypes(), typeAncestorTypes = type.retrieveAncestorTypes(), intersectingAncestorTypes = intersection(ancestorTypes, typeAncestorTypes, (ancestorType, typeAncestorType)=>{
149
+ const ancestorTypeEqualToATypencestorType = ancestorType.isEqualTo(typeAncestorType);
150
+ if (ancestorTypeEqualToATypencestorType) {
151
+ return true;
152
+ }
153
+ }), intersectingAncestorTypesLength = intersectingAncestorTypes.length;
154
+ if (intersectingAncestorTypesLength > 0) {
155
+ joinedTo = true;
156
+ }
157
+ return joinedTo;
158
+ }
125
159
  isEqualTo(type) {
126
160
  const equalTo = this === type;
127
161
  return equalTo;
@@ -237,4 +271,4 @@ const _default = (0, _elements.define)(class Type extends _occamlanguages.Elemen
237
271
  }
238
272
  });
239
273
 
240
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9lbGVtZW50L3R5cGUuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IGFycmF5VXRpbGl0aWVzIH0gZnJvbSBcIm5lY2Vzc2FyeVwiO1xuaW1wb3J0IHsgRWxlbWVudCwgYnJlYWtQb2ludFV0aWxpdGllcyB9IGZyb20gXCJvY2NhbS1sYW5ndWFnZXNcIjtcblxuaW1wb3J0IHsgZGVmaW5lIH0gZnJvbSBcIi4uL2VsZW1lbnRzXCI7XG5pbXBvcnQgeyBpbnN0YW50aWF0ZSB9IGZyb20gXCIuLi91dGlsaXRpZXMvY29udGV4dFwiO1xuaW1wb3J0IHsgaW5zdGFudGlhdGVUeXBlIH0gZnJvbSBcIi4uL3Byb2Nlc3MvaW5zdGFudGlhdGVcIjtcbmltcG9ydCB7IG5hbWVGcm9tVHlwZU5vZGUgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2VsZW1lbnRcIjtcbmltcG9ydCB7IGJhc2VUeXBlRnJvbU5vdGhpbmcgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL3R5cGVcIjtcbmltcG9ydCB7IHByb3BlcnRpZXNGcm9tSlNPTixcbiAgICAgICAgIHByZWZpeE5hbWVGcm9tSlNPTixcbiAgICAgICAgIHN1cGVyVHlwZXNGcm9tSlNPTixcbiAgICAgICAgIHByb3Zpc2lvbmFsRnJvbUpTT04sXG4gICAgICAgICBwcmVmaXhuYW1lVG9QcmV2aXhOYW1lSlNPTixcbiAgICAgICAgIHN1cGVyVHlwZXNUb1N1cGVyVHlwZXNKU09OLFxuICAgICAgICAgcHJvcGVydGllc1RvUHJvcGVydGllc0pTT04sXG4gICAgICAgICBwcm92aXNpb25hbFRvUHJvdmlzaW9uYWxKU09OIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9qc29uXCI7XG5cbmNvbnN0IHsgcHVzaCwgZmlyc3QgfSA9IGFycmF5VXRpbGl0aWVzLFxuICAgICAgeyBicmVha1BvaW50RnJvbUpTT04sIGJyZWFrUG9pbnRUb0JyZWFrUG9pbnRKU09OIH0gPSBicmVha1BvaW50VXRpbGl0aWVzO1xuXG5leHBvcnQgZGVmYXVsdCBkZWZpbmUoY2xhc3MgVHlwZSBleHRlbmRzIEVsZW1lbnQge1xuICBjb25zdHJ1Y3Rvcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIG5hbWUsIHByZWZpeE5hbWUsIHN1cGVyVHlwZXMsIHByb3BlcnRpZXMsIHByb3Zpc2lvbmFsKSB7XG4gICAgc3VwZXIoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50KTtcblxuICAgIHRoaXMubmFtZSA9IG5hbWU7XG4gICAgdGhpcy5wcmVmaXhOYW1lID0gcHJlZml4TmFtZTtcbiAgICB0aGlzLnN1cGVyVHlwZXMgPSBzdXBlclR5cGVzO1xuICAgIHRoaXMucHJvcGVydGllcyA9IHByb3BlcnRpZXM7XG4gICAgdGhpcy5wcm92aXNpb25hbCA9IHByb3Zpc2lvbmFsO1xuICB9XG5cbiAgZ2V0TmFtZSgpIHtcbiAgICByZXR1cm4gdGhpcy5uYW1lO1xuICB9XG5cbiAgZ2V0UHJlZml4TmFtZSgpIHtcbiAgICByZXR1cm4gdGhpcy5wcmVmaXhOYW1lO1xuICB9XG5cbiAgZ2V0U3VwZXJUeXBlcygpIHtcbiAgICByZXR1cm4gdGhpcy5zdXBlclR5cGVzO1xuICB9XG5cbiAgZ2V0VHlwZU5vZGUoKSB7XG4gICAgY29uc3Qgbm9kZSA9IHRoaXMuZ2V0Tm9kZSgpLFxuICAgICAgICAgIHR5cGVOb2RlID0gbm9kZTsgIC8vL1xuXG4gICAgcmV0dXJuIHR5cGVOb2RlO1xuICB9XG5cbiAgZ2V0UHJvcGVydGllcyhwcm9wZXJ0aWVzID0gW10pIHtcbiAgICBwdXNoKHByb3BlcnRpZXMsIHRoaXMucHJvcGVydGllcyk7XG5cbiAgICB0aGlzLnN1cGVyVHlwZXMuZm9yRWFjaCgoc3VwZXJUeXBlKSA9PiB7XG4gICAgICBjb25zdCBzdXBlclR5cGVQcm9wZXJ0aWVzID0gc3VwZXJUeXBlLmdldFByb3BlcnRpZXMoKTtcblxuICAgICAgcHVzaChwcm9wZXJ0aWVzLCBzdXBlclR5cGVQcm9wZXJ0aWVzKTtcbiAgICB9KTtcblxuICAgIHJldHVybiBwcm9wZXJ0aWVzO1xuICB9XG5cbiAgaXNQcm92aXNpb25hbChpbmNsdWRlU3VwZXJUeXBlcyA9IHRydWUpIHtcbiAgICBsZXQgcHJvdmlzaW9uYWwgPSB0aGlzLnByb3Zpc2lvbmFsO1xuXG4gICAgaWYgKGluY2x1ZGVTdXBlclR5cGVzKSB7XG4gICAgICBpZiAoIXByb3Zpc2lvbmFsKSB7XG4gICAgICAgIHByb3Zpc2lvbmFsID0gdGhpcy5zdXBlclR5cGVzLnNvbWUoKHN1cGVyVHlwZSkgPT4ge1xuICAgICAgICAgIGNvbnN0IHN1cGVyVHlwZVByb3Zpc2lvbmFsID0gc3VwZXJUeXBlLmlzUHJvdmlzaW9uYWwoKTtcblxuICAgICAgICAgIGlmIChzdXBlclR5cGVQcm92aXNpb25hbCkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcHJvdmlzaW9uYWw7XG4gIH1cblxuICBzZXROYW1lKG5hbWUpIHtcbiAgICB0aGlzLm5hbWUgPSBuYW1lO1xuICB9XG5cbiAgc2V0UHJlZml4TmFtZShwcmVmaXhOYW1lKSB7XG4gICAgdGhpcy5wcmVmaXhOYW1lID0gcHJlZml4TmFtZTtcbiAgfVxuXG4gIHNldFN1cGVyVHlwZXMoc3VwZXJUeXBlcykge1xuICAgIHRoaXMuc3VwZXJUeXBlcyA9IHN1cGVyVHlwZXM7XG4gIH1cblxuICBzZXRQcm9wZXJ0aWVzKHByb3BlcnRpZXMpIHtcbiAgICB0aGlzLnByb3BlcnRpZXMgPSBwcm9wZXJ0aWVzO1xuICB9XG5cbiAgc2V0UHJvdmlzaW9uYWwocHJvdmlzaW9uYWwpIHtcbiAgICB0aGlzLnByb3Zpc2lvbmFsID0gcHJvdmlzaW9uYWw7XG4gIH1cblxuICBpc0VzdGFibGlzaGVkKGluY2x1ZGVTdXBlclR5cGVzID0gdHJ1ZSkge1xuICAgIGNvbnN0IHByb3Zpc2lvbmFsID0gdGhpcy5pc1Byb3Zpc2lvbmFsKGluY2x1ZGVTdXBlclR5cGVzKSxcbiAgICAgICAgICBlc3RhYmxpc2hlZCA9ICFwcm92aXNpb25hbDtcblxuICAgIHJldHVybiBlc3RhYmxpc2hlZDtcbiAgfVxuXG4gIGlzQ290eXBlKCkge1xuICAgIGNvbnN0IHByb3BlcnRpZXMgPSB0aGlzLmdldFByb3BlcnRpZXMoKSxcbiAgICAgICAgICBwcm9wZXJ0aWVzTGVuZ3RoID0gcHJvcGVydGllcy5sZW5ndGgsXG4gICAgICAgICAgY290eXBlID0gKHByb3BlcnRpZXNMZW5ndGggPiAwKTtcblxuICAgIHJldHVybiBjb3R5cGU7XG4gIH1cblxuICBpc1ByZWZpeGVkKCkge1xuICAgIGNvbnN0IHByZWZpeGVkID0gKHRoaXMucHJlZml4TmFtZSAhPT0gbnVsbCk7XG5cbiAgICByZXR1cm4gcHJlZml4ZWQ7XG4gIH1cblxuICBnZXRQcmVmaXhlZE5hbWUoKSB7XG4gICAgbGV0IHByZWZpeGVkTmFtZSA9IG51bGw7XG5cbiAgICBjb25zdCBwcmVmaXhlZCA9IHRoaXMuaXNQcmVmaXhlZCgpO1xuXG4gICAgaWYgKHByZWZpeGVkKSB7XG4gICAgICBwcmVmaXhlZE5hbWUgPSBgJHt0aGlzLnByZWZpeE5hbWV9JHt0aGlzLm5hbWV9YDtcbiAgICB9XG5cbiAgICByZXR1cm4gcHJlZml4ZWROYW1lO1xuICB9XG5cbiAgZ2V0Tm9taW5hbFR5cGVOYW1lKCkge1xuICAgIGNvbnN0IHByZWZpeGVkID0gdGhpcy5pc1ByZWZpeGVkKCksXG4gICAgICAgICAgbm9taW5hbFR5cGVOYW1lID0gcHJlZml4ZWQgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgJHt0aGlzLnByZWZpeE5hbWV9JHt0aGlzLm5hbWV9YCA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubmFtZTtcblxuICAgIHJldHVybiBub21pbmFsVHlwZU5hbWU7XG4gIH1cblxuICBpc0Jhc2ljKCkge1xuICAgIGxldCBiYXNpYyA9IGZhbHNlO1xuXG4gICAgY29uc3Qgc3VwZXJUeXBlc0xlbmd0aCA9IHRoaXMuc3VwZXJUeXBlcy5sZW5ndGg7XG5cbiAgICBpZiAoc3VwZXJUeXBlc0xlbmd0aCA9PT0gMSkge1xuICAgICAgY29uc3QgZmlyc3RTdXBlclR5cGUgPSBmaXJzdCh0aGlzLnN1cGVyVHlwZXMpLFxuICAgICAgICAgICAgc3VwZXJUeXBlID0gZmlyc3RTdXBlclR5cGUsIC8vL1xuICAgICAgICAgICAgYmFzZVR5cGUgPSBiYXNlVHlwZUZyb21Ob3RoaW5nKCk7XG5cbiAgICAgIGlmIChzdXBlclR5cGUgPT09IGJhc2VUeXBlKSB7XG4gICAgICAgIGJhc2ljID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gYmFzaWM7XG4gIH1cblxuICBpc1JlZmluZWQoKSB7XG4gICAgbGV0IHJlZmluZWQgPSBmYWxzZTtcblxuICAgIGNvbnN0IHN1cGVyVHlwZXNMZW5ndGggPSB0aGlzLnN1cGVyVHlwZXMubGVuZ3RoO1xuXG4gICAgaWYgKHN1cGVyVHlwZXNMZW5ndGggPT09IDEpIHtcbiAgICAgIGNvbnN0IGZpcnN0U3VwZXJUeXBlID0gZmlyc3QodGhpcy5zdXBlclR5cGVzKSxcbiAgICAgICAgICAgIHN1cGVyVHlwZSA9IGZpcnN0U3VwZXJUeXBlLCAvLy9cbiAgICAgICAgICAgIHN1cGVyVHlwZU5hbWUgPSBzdXBlclR5cGUuZ2V0TmFtZSgpO1xuXG4gICAgICBpZiAoc3VwZXJUeXBlTmFtZSA9PT0gdGhpcy5uYW1lKSB7XG4gICAgICAgIHJlZmluZWQgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiByZWZpbmVkO1xuICB9XG5cbiAgaXNFcXVhbFRvKHR5cGUpIHtcbiAgICBjb25zdCBlcXVhbFRvID0gKHRoaXMgPT09IHR5cGUpO1xuXG4gICAgcmV0dXJuIGVxdWFsVG87XG4gIH1cblxuICBpc1N1YlR5cGVPZih0eXBlKSB7XG4gICAgbGV0IHN1YlR5cGVPZjtcblxuICAgIGNvbnN0IGJhc2VUeXBlID0gYmFzZVR5cGVGcm9tTm90aGluZygpO1xuXG4gICAgaWYgKHRoaXMgPT09IGJhc2VUeXBlKSB7XG4gICAgICBzdWJUeXBlT2YgPSBmYWxzZTtcbiAgICB9IGVsc2Uge1xuICAgICAgc3ViVHlwZU9mID0gdGhpcy5zdXBlclR5cGVzLnNvbWUoKHN1cGVyVHlwZSkgPT4geyAvLy9cbiAgICAgICAgaWYgKHN1cGVyVHlwZSA9PT0gdHlwZSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgc3VwZXJUeXBlU3ViVHlwZU9mVHlwZSA9IHN1cGVyVHlwZS5pc1N1YlR5cGVPZih0eXBlKTtcblxuICAgICAgICBpZiAoc3VwZXJUeXBlU3ViVHlwZU9mVHlwZSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9KVxuICAgIH1cblxuICAgIHJldHVybiBzdWJUeXBlT2Y7XG4gIH1cblxuICBpc1N1cGVyVHlwZU9mKHR5cGUpIHtcbiAgICBjb25zdCBzdWJUeXBlT2YgPSB0eXBlLmlzU3ViVHlwZU9mKHRoaXMpLFxuICAgICAgICAgIHN1cGVyVHlwZU9mID0gc3ViVHlwZU9mOyAgLy8vXG5cbiAgICByZXR1cm4gc3VwZXJUeXBlT2Y7XG4gIH1cblxuICBpc0VxdWFsVG9PclN1YlR5cGVPZih0eXBlKSB7XG4gICAgY29uc3QgZXF1YWxUbyA9IHRoaXMuaXNFcXVhbFRvKHR5cGUpLFxuICAgICAgICAgIHN1YlR5cGVPZiA9IHRoaXMuaXNTdWJUeXBlT2YodHlwZSksXG4gICAgICAgICAgZXF1YWxUb09yU3ViVHlwZU9mID0gKGVxdWFsVG8gfHwgc3ViVHlwZU9mKTtcblxuICAgIHJldHVybiBlcXVhbFRvT3JTdWJUeXBlT2Y7XG4gIH1cblxuICBpc0VxdWFsVG9PclN1cGVyVHlwZU9mKHR5cGUpIHtcbiAgICBjb25zdCBlcXVhbFRvID0gdGhpcy5pc0VxdWFsVG8odHlwZSksXG4gICAgICAgICAgc3VwZXJUeXBlT2YgPSB0aGlzLmlzU3VwZXJUeXBlT2YodHlwZSksXG4gICAgICAgICAgZXF1YWxUb09yU3VwZXJUeXBlT2YgPSAoZXF1YWxUbyB8fCBzdXBlclR5cGVPZik7XG5cbiAgICByZXR1cm4gZXF1YWxUb09yU3VwZXJUeXBlT2Y7XG4gIH1cblxuICBpc0VxdWFsVG9TdWJUeXBlT3JTdXBlclR5cGVPZih0eXBlKSB7XG4gICAgY29uc3QgZXF1YWxUbyA9IHRoaXMuaXNFcXVhbFRvKHR5cGUpLFxuICAgICAgICAgIHN1YlR5cGVPZiA9IHRoaXMuaXNTdWJUeXBlT2YodHlwZSksXG4gICAgICAgICAgc3VwZXJUeXBlT2YgPSB0aGlzLmlzU3VwZXJUeXBlT2YodHlwZSksXG4gICAgICAgICAgZXF1YWxUb1N1YlR5cGVPclN1cGVyVHlwZU9mID0gKGVxdWFsVG8gfHwgc3ViVHlwZU9mIHx8IHN1cGVyVHlwZU9mKTtcblxuICAgIHJldHVybiBlcXVhbFRvU3ViVHlwZU9yU3VwZXJUeXBlT2Y7XG4gIH1cblxuICBjb21wYXJlVHlwZU5hbWUodHlwZU5hbWUpIHtcbiAgICBjb25zdCBuYW1lVHlwZU5hbWUgPSAodGhpcy5uYW1lID09PSB0eXBlTmFtZSksXG4gICAgICAgICAgY29tcGFyZXNUb1R5cGVOYW1lID0gbmFtZVR5cGVOYW1lOyAgLy8vXG5cbiAgICByZXR1cm4gY29tcGFyZXNUb1R5cGVOYW1lO1xuICB9XG5cbiAgY29tcGFyZVByb3Zpc2lvbmFsKHByb3Zpc2lvbmFsLCBpbmNsdWRlU3VwZXJ0eXBlcyA9IHRydWUpIHtcbiAgICBsZXQgY29tcGFyZXNUb1Byb3Zpc2lvbmFsO1xuXG4gICAgY29uc3QgcHJvdmlzaW9uYWxBID0gcHJvdmlzaW9uYWw7IC8vL1xuXG4gICAgcHJvdmlzaW9uYWwgPSB0aGlzLmlzUHJvdmlzaW9uYWwoaW5jbHVkZVN1cGVydHlwZXMpO1xuXG4gICAgY29uc3QgcHJvdmlzaW9uYWxCID0gcHJvdmlzaW9uYWw7IC8vL1xuXG4gICAgY29tcGFyZXNUb1Byb3Zpc2lvbmFsID0gKHByb3Zpc2lvbmFsQSA9PT0gcHJvdmlzaW9uYWxCKTtcblxuICAgIHJldHVybiBjb21wYXJlc1RvUHJvdmlzaW9uYWw7XG4gIH1cblxuICBjb21wYXJlTm9taW5hbFR5cGVOYW1lKG5vbWluYWxUeXBlTmFtZSkge1xuICAgIGxldCBjb21wYXJlc1RvTm9taW5hbFR5cGVOYW1lID0gZmFsc2U7XG5cbiAgICBjb25zdCBuYW1lTm9taW5hbFR5cGVOYW1lID0gKHRoaXMubmFtZSA9PT0gbm9taW5hbFR5cGVOYW1lKTtcblxuICAgIGlmIChuYW1lTm9taW5hbFR5cGVOYW1lKSB7XG4gICAgICBjb21wYXJlc1RvTm9taW5hbFR5cGVOYW1lID0gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgcHJlZml4ZWQgPSB0aGlzLmlzUHJlZml4ZWQoKTtcblxuICAgICAgaWYgKHByZWZpeGVkKSB7XG4gICAgICAgIGNvbnN0IHByZWZpeGVkTmFtZSA9IHRoaXMuZ2V0UHJlZml4ZWROYW1lKCksXG4gICAgICAgICAgICAgIHByZWZpeGVkTmFtZU5vbWluYWxUeXBlTmFtZSA9IChwcmVmaXhlZE5hbWUgPT09IG5vbWluYWxUeXBlTmFtZSk7XG5cbiAgICAgICAgaWYgKHByZWZpeGVkTmFtZU5vbWluYWxUeXBlTmFtZSkge1xuICAgICAgICAgIGNvbXBhcmVzVG9Ob21pbmFsVHlwZU5hbWUgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbXBhcmVzVG9Ob21pbmFsVHlwZU5hbWU7XG4gIH1cblxuICBjb21wYXJlUHJlZml4ZWRUeXBlTmFtZShwcmVmaXhlZFR5cGVOYW1lKSB7XG4gICAgbGV0IGNvbXBhcmVzVG9QcmVmaXhlZFR5cGVOYW1lID0gZmFsc2U7XG5cbiAgICBjb25zdCBwcmVmaXhlZCA9IHRoaXMuaXNQcmVmaXhlZCgpO1xuXG4gICAgaWYgKHByZWZpeGVkKSB7XG4gICAgICBjb25zdCBwcmVmaXhlZE5hbWUgPSB0aGlzLmdldFByZWZpeGVkTmFtZSgpLFxuICAgICAgICAgICAgcHJlZml4ZWRUeXBlTmFtZVByZWZpeGVkTmFtZSA9IChwcmVmaXhlZFR5cGVOYW1lID09PSBwcmVmaXhlZE5hbWUpO1xuXG4gICAgICBpZiAocHJlZml4ZWRUeXBlTmFtZVByZWZpeGVkTmFtZSkge1xuICAgICAgICBjb21wYXJlc1RvUHJlZml4ZWRUeXBlTmFtZSA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbXBhcmVzVG9QcmVmaXhlZFR5cGVOYW1lO1xuICB9XG5cbiAgdG9KU09OKGFicmlkZ2VkID0gZmFsc2UpIHtcbiAgICBjb25zdCBzdHJpbmcgPSB0aGlzLmdldFN0cmluZygpO1xuXG4gICAgbGV0IGJyZWFrUG9pbnQ7XG5cbiAgICBicmVha1BvaW50ID0gdGhpcy5nZXRCcmVha1BvaW50KCk7XG5cbiAgICBjb25zdCBicmVha1BvaW50SlNPTiA9IGJyZWFrUG9pbnRUb0JyZWFrUG9pbnRKU09OKGJyZWFrUG9pbnQpO1xuXG4gICAgYnJlYWtQb2ludCA9IGJyZWFrUG9pbnRKU09OOyAgLy8vXG5cbiAgICBjb25zdCBqc29uID0ge1xuICAgICAgc3RyaW5nLFxuICAgICAgYnJlYWtQb2ludFxuICAgIH07XG5cbiAgICBpZiAoIWFicmlkZ2VkKSB7XG4gICAgICBjb25zdCBwcmVmaXhOYW1lSlNPTiA9IHByZWZpeG5hbWVUb1ByZXZpeE5hbWVKU09OKHRoaXMucHJlZml4TmFtZSksXG4gICAgICAgICAgICBzdXBlclR5cGVzSlNPTiA9IHN1cGVyVHlwZXNUb1N1cGVyVHlwZXNKU09OKHRoaXMuc3VwZXJUeXBlcyksXG4gICAgICAgICAgICBwcm9wZXJ0aWVzSlNPTiA9IHByb3BlcnRpZXNUb1Byb3BlcnRpZXNKU09OKHRoaXMucHJvcGVydGllcyksXG4gICAgICAgICAgICBwcm92aXNpbm9hbEpTT00gPSBwcm92aXNpb25hbFRvUHJvdmlzaW9uYWxKU09OKHRoaXMucHJvdmlzaW9uYWwpLFxuICAgICAgICAgICAgcHJlZml4TmFtZSA9IHByZWZpeE5hbWVKU09OLCAgLy8vXG4gICAgICAgICAgICBzdXBlclR5cGVzID0gc3VwZXJUeXBlc0pTT04sICAvLy9cbiAgICAgICAgICAgIHByb3BlcnRpZXMgPSBwcm9wZXJ0aWVzSlNPTiwgIC8vL1xuICAgICAgICAgICAgcHJvdmlzaW9uYWwgPSBwcm92aXNpbm9hbEpTT007ICAvLy9cblxuICAgICAgT2JqZWN0LmFzc2lnbihqc29uLCB7XG4gICAgICAgIHByZWZpeE5hbWUsXG4gICAgICAgIHN1cGVyVHlwZXMsXG4gICAgICAgIHByb3BlcnRpZXMsXG4gICAgICAgIHByb3Zpc2lvbmFsXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4ganNvbjtcbiAgfVxuXG4gIHN0YXRpYyBuYW1lID0gXCJUeXBlXCI7XG5cbiAgc3RhdGljIGZyb21KU09OKGpzb24sIGNvbnRleHQpIHtcbiAgICByZXR1cm4gaW5zdGFudGlhdGUoKGNvbnRleHQpID0+IHtcbiAgICAgIGNvbnN0IHsgc3RyaW5nIH0gPSBqc29uLFxuICAgICAgICAgICAgdHlwZU5vZGUgPSBpbnN0YW50aWF0ZVR5cGUoc3RyaW5nLCBjb250ZXh0KSxcbiAgICAgICAgICAgIG5vZGUgPSB0eXBlTm9kZSwgLy8vXG4gICAgICAgICAgICBicmVha1BvaW50ID0gYnJlYWtQb2ludEZyb21KU09OKGpzb24pLFxuICAgICAgICAgICAgbmFtZSA9IG5hbWVGcm9tVHlwZU5vZGUodHlwZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICAgICAgcHJlZml4TmFtZSA9IHByZWZpeE5hbWVGcm9tSlNPTihqc29uLCBjb250ZXh0KSxcbiAgICAgICAgICAgIHN1cGVyVHlwZXMgPSBzdXBlclR5cGVzRnJvbUpTT04oanNvbiwgY29udGV4dCksXG4gICAgICAgICAgICBwcm9wZXJ0aWVzID0gcHJvcGVydGllc0Zyb21KU09OKGpzb24sIGNvbnRleHQpLFxuICAgICAgICAgICAgcHJvdmlzaW9uYWwgPSBwcm92aXNpb25hbEZyb21KU09OKGpzb24pO1xuXG4gICAgICBjb250ZXh0ID0gbnVsbDsgLy8vXG5cbiAgICAgIGNvbnN0IHR5cGUgPSBuZXcgVHlwZShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIG5hbWUsIHByZWZpeE5hbWUsIHN1cGVyVHlwZXMsIHByb3BlcnRpZXMsIHByb3Zpc2lvbmFsKTtcblxuICAgICAgcmV0dXJuIHR5cGU7XG4gICAgfSwgY29udGV4dCk7XG4gIH1cblxuICBzdGF0aWMgZnJvbU5hbWUobmFtZSwgY29udGV4dCkge1xuICAgIGNvbnN0IHN0cmluZyA9IG5hbWUsICAvLy9cbiAgICAgICAgICBub2RlID0gbnVsbCxcbiAgICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgICBwcmVmaXhOYW1lID0gbnVsbCxcbiAgICAgICAgICBzdXBlclR5cGVzID0gW10sXG4gICAgICAgICAgcHJvcGVydGllcyA9IFtdLFxuICAgICAgICAgIHByb3Zpc2lvbmFsID0gZmFsc2U7XG5cbiAgICBjb250ZXh0ID0gbnVsbDtcblxuICAgIGNvbnN0IHR5cGUgPSBuZXcgVHlwZShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIG5hbWUsIHByZWZpeE5hbWUsIHN1cGVyVHlwZXMsIHByb3BlcnRpZXMsIHByb3Zpc2lvbmFsKTtcblxuICAgIHJldHVybiB0eXBlO1xuICB9XG59KTtcbiJdLCJuYW1lcyI6WyJwdXNoIiwiZmlyc3QiLCJhcnJheVV0aWxpdGllcyIsImJyZWFrUG9pbnRGcm9tSlNPTiIsImJyZWFrUG9pbnRUb0JyZWFrUG9pbnRKU09OIiwiYnJlYWtQb2ludFV0aWxpdGllcyIsImRlZmluZSIsIlR5cGUiLCJFbGVtZW50IiwiY29udGV4dCIsInN0cmluZyIsIm5vZGUiLCJicmVha1BvaW50IiwibmFtZSIsInByZWZpeE5hbWUiLCJzdXBlclR5cGVzIiwicHJvcGVydGllcyIsInByb3Zpc2lvbmFsIiwiZ2V0TmFtZSIsImdldFByZWZpeE5hbWUiLCJnZXRTdXBlclR5cGVzIiwiZ2V0VHlwZU5vZGUiLCJnZXROb2RlIiwidHlwZU5vZGUiLCJnZXRQcm9wZXJ0aWVzIiwiZm9yRWFjaCIsInN1cGVyVHlwZSIsInN1cGVyVHlwZVByb3BlcnRpZXMiLCJpc1Byb3Zpc2lvbmFsIiwiaW5jbHVkZVN1cGVyVHlwZXMiLCJzb21lIiwic3VwZXJUeXBlUHJvdmlzaW9uYWwiLCJzZXROYW1lIiwic2V0UHJlZml4TmFtZSIsInNldFN1cGVyVHlwZXMiLCJzZXRQcm9wZXJ0aWVzIiwic2V0UHJvdmlzaW9uYWwiLCJpc0VzdGFibGlzaGVkIiwiZXN0YWJsaXNoZWQiLCJpc0NvdHlwZSIsInByb3BlcnRpZXNMZW5ndGgiLCJsZW5ndGgiLCJjb3R5cGUiLCJpc1ByZWZpeGVkIiwicHJlZml4ZWQiLCJnZXRQcmVmaXhlZE5hbWUiLCJwcmVmaXhlZE5hbWUiLCJnZXROb21pbmFsVHlwZU5hbWUiLCJub21pbmFsVHlwZU5hbWUiLCJpc0Jhc2ljIiwiYmFzaWMiLCJzdXBlclR5cGVzTGVuZ3RoIiwiZmlyc3RTdXBlclR5cGUiLCJiYXNlVHlwZSIsImJhc2VUeXBlRnJvbU5vdGhpbmciLCJpc1JlZmluZWQiLCJyZWZpbmVkIiwic3VwZXJUeXBlTmFtZSIsImlzRXF1YWxUbyIsInR5cGUiLCJlcXVhbFRvIiwiaXNTdWJUeXBlT2YiLCJzdWJUeXBlT2YiLCJzdXBlclR5cGVTdWJUeXBlT2ZUeXBlIiwiaXNTdXBlclR5cGVPZiIsInN1cGVyVHlwZU9mIiwiaXNFcXVhbFRvT3JTdWJUeXBlT2YiLCJlcXVhbFRvT3JTdWJUeXBlT2YiLCJpc0VxdWFsVG9PclN1cGVyVHlwZU9mIiwiZXF1YWxUb09yU3VwZXJUeXBlT2YiLCJpc0VxdWFsVG9TdWJUeXBlT3JTdXBlclR5cGVPZiIsImVxdWFsVG9TdWJUeXBlT3JTdXBlclR5cGVPZiIsImNvbXBhcmVUeXBlTmFtZSIsInR5cGVOYW1lIiwibmFtZVR5cGVOYW1lIiwiY29tcGFyZXNUb1R5cGVOYW1lIiwiY29tcGFyZVByb3Zpc2lvbmFsIiwiaW5jbHVkZVN1cGVydHlwZXMiLCJjb21wYXJlc1RvUHJvdmlzaW9uYWwiLCJwcm92aXNpb25hbEEiLCJwcm92aXNpb25hbEIiLCJjb21wYXJlTm9taW5hbFR5cGVOYW1lIiwiY29tcGFyZXNUb05vbWluYWxUeXBlTmFtZSIsIm5hbWVOb21pbmFsVHlwZU5hbWUiLCJwcmVmaXhlZE5hbWVOb21pbmFsVHlwZU5hbWUiLCJjb21wYXJlUHJlZml4ZWRUeXBlTmFtZSIsInByZWZpeGVkVHlwZU5hbWUiLCJjb21wYXJlc1RvUHJlZml4ZWRUeXBlTmFtZSIsInByZWZpeGVkVHlwZU5hbWVQcmVmaXhlZE5hbWUiLCJ0b0pTT04iLCJhYnJpZGdlZCIsImdldFN0cmluZyIsImdldEJyZWFrUG9pbnQiLCJicmVha1BvaW50SlNPTiIsImpzb24iLCJwcmVmaXhOYW1lSlNPTiIsInByZWZpeG5hbWVUb1ByZXZpeE5hbWVKU09OIiwic3VwZXJUeXBlc0pTT04iLCJzdXBlclR5cGVzVG9TdXBlclR5cGVzSlNPTiIsInByb3BlcnRpZXNKU09OIiwicHJvcGVydGllc1RvUHJvcGVydGllc0pTT04iLCJwcm92aXNpbm9hbEpTT00iLCJwcm92aXNpb25hbFRvUHJvdmlzaW9uYWxKU09OIiwiT2JqZWN0IiwiYXNzaWduIiwiZnJvbUpTT04iLCJpbnN0YW50aWF0ZSIsImluc3RhbnRpYXRlVHlwZSIsIm5hbWVGcm9tVHlwZU5vZGUiLCJwcmVmaXhOYW1lRnJvbUpTT04iLCJzdXBlclR5cGVzRnJvbUpTT04iLCJwcm9wZXJ0aWVzRnJvbUpTT04iLCJwcm92aXNpb25hbEZyb21KU09OIiwiZnJvbU5hbWUiXSwibWFwcGluZ3MiOiJBQUFBOzs7OytCQXNCQTs7O2VBQUE7OzsyQkFwQitCO2dDQUNjOzBCQUV0Qjt5QkFDSzs2QkFDSTt5QkFDQztzQkFDRztzQkFRUztBQUU3QyxNQUFNLEVBQUVBLElBQUksRUFBRUMsS0FBSyxFQUFFLEdBQUdDLHlCQUFjLEVBQ2hDLEVBQUVDLGtCQUFrQixFQUFFQywwQkFBMEIsRUFBRSxHQUFHQyxtQ0FBbUI7TUFFOUUsV0FBZUMsSUFBQUEsZ0JBQU0sRUFBQyxNQUFNQyxhQUFhQyx1QkFBTztJQUM5QyxZQUFZQyxPQUFPLEVBQUVDLE1BQU0sRUFBRUMsSUFBSSxFQUFFQyxVQUFVLEVBQUVDLElBQUksRUFBRUMsVUFBVSxFQUFFQyxVQUFVLEVBQUVDLFVBQVUsRUFBRUMsV0FBVyxDQUFFO1FBQ3BHLEtBQUssQ0FBQ1IsU0FBU0MsUUFBUUMsTUFBTUM7UUFFN0IsSUFBSSxDQUFDQyxJQUFJLEdBQUdBO1FBQ1osSUFBSSxDQUFDQyxVQUFVLEdBQUdBO1FBQ2xCLElBQUksQ0FBQ0MsVUFBVSxHQUFHQTtRQUNsQixJQUFJLENBQUNDLFVBQVUsR0FBR0E7UUFDbEIsSUFBSSxDQUFDQyxXQUFXLEdBQUdBO0lBQ3JCO0lBRUFDLFVBQVU7UUFDUixPQUFPLElBQUksQ0FBQ0wsSUFBSTtJQUNsQjtJQUVBTSxnQkFBZ0I7UUFDZCxPQUFPLElBQUksQ0FBQ0wsVUFBVTtJQUN4QjtJQUVBTSxnQkFBZ0I7UUFDZCxPQUFPLElBQUksQ0FBQ0wsVUFBVTtJQUN4QjtJQUVBTSxjQUFjO1FBQ1osTUFBTVYsT0FBTyxJQUFJLENBQUNXLE9BQU8sSUFDbkJDLFdBQVdaLE1BQU8sR0FBRztRQUUzQixPQUFPWTtJQUNUO0lBRUFDLGNBQWNSLGFBQWEsRUFBRSxFQUFFO1FBQzdCaEIsS0FBS2dCLFlBQVksSUFBSSxDQUFDQSxVQUFVO1FBRWhDLElBQUksQ0FBQ0QsVUFBVSxDQUFDVSxPQUFPLENBQUMsQ0FBQ0M7WUFDdkIsTUFBTUMsc0JBQXNCRCxVQUFVRixhQUFhO1lBRW5EeEIsS0FBS2dCLFlBQVlXO1FBQ25CO1FBRUEsT0FBT1g7SUFDVDtJQUVBWSxjQUFjQyxvQkFBb0IsSUFBSSxFQUFFO1FBQ3RDLElBQUlaLGNBQWMsSUFBSSxDQUFDQSxXQUFXO1FBRWxDLElBQUlZLG1CQUFtQjtZQUNyQixJQUFJLENBQUNaLGFBQWE7Z0JBQ2hCQSxjQUFjLElBQUksQ0FBQ0YsVUFBVSxDQUFDZSxJQUFJLENBQUMsQ0FBQ0o7b0JBQ2xDLE1BQU1LLHVCQUF1QkwsVUFBVUUsYUFBYTtvQkFFcEQsSUFBSUcsc0JBQXNCO3dCQUN4QixPQUFPO29CQUNUO2dCQUNGO1lBQ0Y7UUFDRjtRQUVBLE9BQU9kO0lBQ1Q7SUFFQWUsUUFBUW5CLElBQUksRUFBRTtRQUNaLElBQUksQ0FBQ0EsSUFBSSxHQUFHQTtJQUNkO0lBRUFvQixjQUFjbkIsVUFBVSxFQUFFO1FBQ3hCLElBQUksQ0FBQ0EsVUFBVSxHQUFHQTtJQUNwQjtJQUVBb0IsY0FBY25CLFVBQVUsRUFBRTtRQUN4QixJQUFJLENBQUNBLFVBQVUsR0FBR0E7SUFDcEI7SUFFQW9CLGNBQWNuQixVQUFVLEVBQUU7UUFDeEIsSUFBSSxDQUFDQSxVQUFVLEdBQUdBO0lBQ3BCO0lBRUFvQixlQUFlbkIsV0FBVyxFQUFFO1FBQzFCLElBQUksQ0FBQ0EsV0FBVyxHQUFHQTtJQUNyQjtJQUVBb0IsY0FBY1Isb0JBQW9CLElBQUksRUFBRTtRQUN0QyxNQUFNWixjQUFjLElBQUksQ0FBQ1csYUFBYSxDQUFDQyxvQkFDakNTLGNBQWMsQ0FBQ3JCO1FBRXJCLE9BQU9xQjtJQUNUO0lBRUFDLFdBQVc7UUFDVCxNQUFNdkIsYUFBYSxJQUFJLENBQUNRLGFBQWEsSUFDL0JnQixtQkFBbUJ4QixXQUFXeUIsTUFBTSxFQUNwQ0MsU0FBVUYsbUJBQW1CO1FBRW5DLE9BQU9FO0lBQ1Q7SUFFQUMsYUFBYTtRQUNYLE1BQU1DLFdBQVksSUFBSSxDQUFDOUIsVUFBVSxLQUFLO1FBRXRDLE9BQU84QjtJQUNUO0lBRUFDLGtCQUFrQjtRQUNoQixJQUFJQyxlQUFlO1FBRW5CLE1BQU1GLFdBQVcsSUFBSSxDQUFDRCxVQUFVO1FBRWhDLElBQUlDLFVBQVU7WUFDWkUsZUFBZSxHQUFHLElBQUksQ0FBQ2hDLFVBQVUsR0FBRyxJQUFJLENBQUNELElBQUksRUFBRTtRQUNqRDtRQUVBLE9BQU9pQztJQUNUO0lBRUFDLHFCQUFxQjtRQUNuQixNQUFNSCxXQUFXLElBQUksQ0FBQ0QsVUFBVSxJQUMxQkssa0JBQWtCSixXQUNDLEdBQUcsSUFBSSxDQUFDOUIsVUFBVSxHQUFHLElBQUksQ0FBQ0QsSUFBSSxFQUFFLEdBQzdCLElBQUksQ0FBQ0EsSUFBSTtRQUVyQyxPQUFPbUM7SUFDVDtJQUVBQyxVQUFVO1FBQ1IsSUFBSUMsUUFBUTtRQUVaLE1BQU1DLG1CQUFtQixJQUFJLENBQUNwQyxVQUFVLENBQUMwQixNQUFNO1FBRS9DLElBQUlVLHFCQUFxQixHQUFHO1lBQzFCLE1BQU1DLGlCQUFpQm5ELE1BQU0sSUFBSSxDQUFDYyxVQUFVLEdBQ3RDVyxZQUFZMEIsZ0JBQ1pDLFdBQVdDLElBQUFBLHlCQUFtQjtZQUVwQyxJQUFJNUIsY0FBYzJCLFVBQVU7Z0JBQzFCSCxRQUFRO1lBQ1Y7UUFDRjtRQUVBLE9BQU9BO0lBQ1Q7SUFFQUssWUFBWTtRQUNWLElBQUlDLFVBQVU7UUFFZCxNQUFNTCxtQkFBbUIsSUFBSSxDQUFDcEMsVUFBVSxDQUFDMEIsTUFBTTtRQUUvQyxJQUFJVSxxQkFBcUIsR0FBRztZQUMxQixNQUFNQyxpQkFBaUJuRCxNQUFNLElBQUksQ0FBQ2MsVUFBVSxHQUN0Q1csWUFBWTBCLGdCQUNaSyxnQkFBZ0IvQixVQUFVUixPQUFPO1lBRXZDLElBQUl1QyxrQkFBa0IsSUFBSSxDQUFDNUMsSUFBSSxFQUFFO2dCQUMvQjJDLFVBQVU7WUFDWjtRQUNGO1FBRUEsT0FBT0E7SUFDVDtJQUVBRSxVQUFVQyxJQUFJLEVBQUU7UUFDZCxNQUFNQyxVQUFXLElBQUksS0FBS0Q7UUFFMUIsT0FBT0M7SUFDVDtJQUVBQyxZQUFZRixJQUFJLEVBQUU7UUFDaEIsSUFBSUc7UUFFSixNQUFNVCxXQUFXQyxJQUFBQSx5QkFBbUI7UUFFcEMsSUFBSSxJQUFJLEtBQUtELFVBQVU7WUFDckJTLFlBQVk7UUFDZCxPQUFPO1lBQ0xBLFlBQVksSUFBSSxDQUFDL0MsVUFBVSxDQUFDZSxJQUFJLENBQUMsQ0FBQ0o7Z0JBQ2hDLElBQUlBLGNBQWNpQyxNQUFNO29CQUN0QixPQUFPO2dCQUNUO2dCQUVBLE1BQU1JLHlCQUF5QnJDLFVBQVVtQyxXQUFXLENBQUNGO2dCQUVyRCxJQUFJSSx3QkFBd0I7b0JBQzFCLE9BQU87Z0JBQ1Q7WUFDRjtRQUNGO1FBRUEsT0FBT0Q7SUFDVDtJQUVBRSxjQUFjTCxJQUFJLEVBQUU7UUFDbEIsTUFBTUcsWUFBWUgsS0FBS0UsV0FBVyxDQUFDLElBQUksR0FDakNJLGNBQWNILFdBQVksR0FBRztRQUVuQyxPQUFPRztJQUNUO0lBRUFDLHFCQUFxQlAsSUFBSSxFQUFFO1FBQ3pCLE1BQU1DLFVBQVUsSUFBSSxDQUFDRixTQUFTLENBQUNDLE9BQ3pCRyxZQUFZLElBQUksQ0FBQ0QsV0FBVyxDQUFDRixPQUM3QlEscUJBQXNCUCxXQUFXRTtRQUV2QyxPQUFPSztJQUNUO0lBRUFDLHVCQUF1QlQsSUFBSSxFQUFFO1FBQzNCLE1BQU1DLFVBQVUsSUFBSSxDQUFDRixTQUFTLENBQUNDLE9BQ3pCTSxjQUFjLElBQUksQ0FBQ0QsYUFBYSxDQUFDTCxPQUNqQ1UsdUJBQXdCVCxXQUFXSztRQUV6QyxPQUFPSTtJQUNUO0lBRUFDLDhCQUE4QlgsSUFBSSxFQUFFO1FBQ2xDLE1BQU1DLFVBQVUsSUFBSSxDQUFDRixTQUFTLENBQUNDLE9BQ3pCRyxZQUFZLElBQUksQ0FBQ0QsV0FBVyxDQUFDRixPQUM3Qk0sY0FBYyxJQUFJLENBQUNELGFBQWEsQ0FBQ0wsT0FDakNZLDhCQUErQlgsV0FBV0UsYUFBYUc7UUFFN0QsT0FBT007SUFDVDtJQUVBQyxnQkFBZ0JDLFFBQVEsRUFBRTtRQUN4QixNQUFNQyxlQUFnQixJQUFJLENBQUM3RCxJQUFJLEtBQUs0RCxVQUM5QkUscUJBQXFCRCxjQUFlLEdBQUc7UUFFN0MsT0FBT0M7SUFDVDtJQUVBQyxtQkFBbUIzRCxXQUFXLEVBQUU0RCxvQkFBb0IsSUFBSSxFQUFFO1FBQ3hELElBQUlDO1FBRUosTUFBTUMsZUFBZTlELGFBQWEsR0FBRztRQUVyQ0EsY0FBYyxJQUFJLENBQUNXLGFBQWEsQ0FBQ2lEO1FBRWpDLE1BQU1HLGVBQWUvRCxhQUFhLEdBQUc7UUFFckM2RCx3QkFBeUJDLGlCQUFpQkM7UUFFMUMsT0FBT0Y7SUFDVDtJQUVBRyx1QkFBdUJqQyxlQUFlLEVBQUU7UUFDdEMsSUFBSWtDLDRCQUE0QjtRQUVoQyxNQUFNQyxzQkFBdUIsSUFBSSxDQUFDdEUsSUFBSSxLQUFLbUM7UUFFM0MsSUFBSW1DLHFCQUFxQjtZQUN2QkQsNEJBQTRCO1FBQzlCLE9BQU87WUFDTCxNQUFNdEMsV0FBVyxJQUFJLENBQUNELFVBQVU7WUFFaEMsSUFBSUMsVUFBVTtnQkFDWixNQUFNRSxlQUFlLElBQUksQ0FBQ0QsZUFBZSxJQUNuQ3VDLDhCQUErQnRDLGlCQUFpQkU7Z0JBRXRELElBQUlvQyw2QkFBNkI7b0JBQy9CRiw0QkFBNEI7Z0JBQzlCO1lBQ0Y7UUFDRjtRQUVBLE9BQU9BO0lBQ1Q7SUFFQUcsd0JBQXdCQyxnQkFBZ0IsRUFBRTtRQUN4QyxJQUFJQyw2QkFBNkI7UUFFakMsTUFBTTNDLFdBQVcsSUFBSSxDQUFDRCxVQUFVO1FBRWhDLElBQUlDLFVBQVU7WUFDWixNQUFNRSxlQUFlLElBQUksQ0FBQ0QsZUFBZSxJQUNuQzJDLCtCQUFnQ0YscUJBQXFCeEM7WUFFM0QsSUFBSTBDLDhCQUE4QjtnQkFDaENELDZCQUE2QjtZQUMvQjtRQUNGO1FBRUEsT0FBT0E7SUFDVDtJQUVBRSxPQUFPQyxXQUFXLEtBQUssRUFBRTtRQUN2QixNQUFNaEYsU0FBUyxJQUFJLENBQUNpRixTQUFTO1FBRTdCLElBQUkvRTtRQUVKQSxhQUFhLElBQUksQ0FBQ2dGLGFBQWE7UUFFL0IsTUFBTUMsaUJBQWlCekYsMkJBQTJCUTtRQUVsREEsYUFBYWlGLGdCQUFpQixHQUFHO1FBRWpDLE1BQU1DLE9BQU87WUFDWHBGO1lBQ0FFO1FBQ0Y7UUFFQSxJQUFJLENBQUM4RSxVQUFVO1lBQ2IsTUFBTUssaUJBQWlCQyxJQUFBQSxnQ0FBMEIsRUFBQyxJQUFJLENBQUNsRixVQUFVLEdBQzNEbUYsaUJBQWlCQyxJQUFBQSxnQ0FBMEIsRUFBQyxJQUFJLENBQUNuRixVQUFVLEdBQzNEb0YsaUJBQWlCQyxJQUFBQSxnQ0FBMEIsRUFBQyxJQUFJLENBQUNwRixVQUFVLEdBQzNEcUYsa0JBQWtCQyxJQUFBQSxrQ0FBNEIsRUFBQyxJQUFJLENBQUNyRixXQUFXLEdBQy9ESCxhQUFhaUYsZ0JBQ2JoRixhQUFha0YsZ0JBQ2JqRixhQUFhbUYsZ0JBQ2JsRixjQUFjb0YsaUJBQWtCLEdBQUc7WUFFekNFLE9BQU9DLE1BQU0sQ0FBQ1YsTUFBTTtnQkFDbEJoRjtnQkFDQUM7Z0JBQ0FDO2dCQUNBQztZQUNGO1FBQ0Y7UUFFQSxPQUFPNkU7SUFDVDtJQUVBLE9BQU9qRixPQUFPLE9BQU87SUFFckIsT0FBTzRGLFNBQVNYLElBQUksRUFBRXJGLE9BQU8sRUFBRTtRQUM3QixPQUFPaUcsSUFBQUEsb0JBQVcsRUFBQyxDQUFDakc7WUFDbEIsTUFBTSxFQUFFQyxNQUFNLEVBQUUsR0FBR29GLE1BQ2J2RSxXQUFXb0YsSUFBQUEsNEJBQWUsRUFBQ2pHLFFBQVFELFVBQ25DRSxPQUFPWSxVQUNQWCxhQUFhVCxtQkFBbUIyRixPQUNoQ2pGLE9BQU8rRixJQUFBQSx5QkFBZ0IsRUFBQ3JGLFVBQVVkLFVBQ2xDSyxhQUFhK0YsSUFBQUEsd0JBQWtCLEVBQUNmLE1BQU1yRixVQUN0Q00sYUFBYStGLElBQUFBLHdCQUFrQixFQUFDaEIsTUFBTXJGLFVBQ3RDTyxhQUFhK0YsSUFBQUEsd0JBQWtCLEVBQUNqQixNQUFNckYsVUFDdENRLGNBQWMrRixJQUFBQSx5QkFBbUIsRUFBQ2xCO1lBRXhDckYsVUFBVSxNQUFNLEdBQUc7WUFFbkIsTUFBTWtELE9BQU8sSUFBSXBELEtBQUtFLFNBQVNDLFFBQVFDLE1BQU1DLFlBQVlDLE1BQU1DLFlBQVlDLFlBQVlDLFlBQVlDO1lBRW5HLE9BQU8wQztRQUNULEdBQUdsRDtJQUNMO0lBRUEsT0FBT3dHLFNBQVNwRyxJQUFJLEVBQUVKLE9BQU8sRUFBRTtRQUM3QixNQUFNQyxTQUFTRyxNQUNURixPQUFPLE1BQ1BDLGFBQWEsTUFDYkUsYUFBYSxNQUNiQyxhQUFhLEVBQUUsRUFDZkMsYUFBYSxFQUFFLEVBQ2ZDLGNBQWM7UUFFcEJSLFVBQVU7UUFFVixNQUFNa0QsT0FBTyxJQUFJcEQsS0FBS0UsU0FBU0MsUUFBUUMsTUFBTUMsWUFBWUMsTUFBTUMsWUFBWUMsWUFBWUMsWUFBWUM7UUFFbkcsT0FBTzBDO0lBQ1Q7QUFDRiJ9
274
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9lbGVtZW50L3R5cGUuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IGFycmF5VXRpbGl0aWVzIH0gZnJvbSBcIm5lY2Vzc2FyeVwiO1xuaW1wb3J0IHsgRWxlbWVudCwgYnJlYWtQb2ludFV0aWxpdGllcyB9IGZyb20gXCJvY2NhbS1sYW5ndWFnZXNcIjtcblxuaW1wb3J0IHsgZGVmaW5lIH0gZnJvbSBcIi4uL2VsZW1lbnRzXCI7XG5pbXBvcnQgeyBpbnN0YW50aWF0ZSB9IGZyb20gXCIuLi91dGlsaXRpZXMvY29udGV4dFwiO1xuaW1wb3J0IHsgaW5zdGFudGlhdGVUeXBlIH0gZnJvbSBcIi4uL3Byb2Nlc3MvaW5zdGFudGlhdGVcIjtcbmltcG9ydCB7IG5hbWVGcm9tVHlwZU5vZGUgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2VsZW1lbnRcIjtcbmltcG9ydCB7IGJhc2VUeXBlRnJvbU5vdGhpbmcgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL3R5cGVcIjtcbmltcG9ydCB7IHByb3BlcnRpZXNGcm9tSlNPTixcbiAgICAgICAgIHByZWZpeE5hbWVGcm9tSlNPTixcbiAgICAgICAgIHN1cGVyVHlwZXNGcm9tSlNPTixcbiAgICAgICAgIHByb3Zpc2lvbmFsRnJvbUpTT04sXG4gICAgICAgICBwcmVmaXhuYW1lVG9QcmV2aXhOYW1lSlNPTixcbiAgICAgICAgIHN1cGVyVHlwZXNUb1N1cGVyVHlwZXNKU09OLFxuICAgICAgICAgcHJvcGVydGllc1RvUHJvcGVydGllc0pTT04sXG4gICAgICAgICBwcm92aXNpb25hbFRvUHJvdmlzaW9uYWxKU09OIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9qc29uXCI7XG5pbXBvcnQge0JBU0VfVFlQRV9TWU1CT0x9IGZyb20gXCIuLi9jb25zdGFudHNcIjtcblxuY29uc3QgeyBwdXNoLCBmaXJzdCwgaW50ZXJzZWN0aW9uIH0gPSBhcnJheVV0aWxpdGllcyxcbiAgICAgIHsgYnJlYWtQb2ludEZyb21KU09OLCBicmVha1BvaW50VG9CcmVha1BvaW50SlNPTiB9ID0gYnJlYWtQb2ludFV0aWxpdGllcztcblxuZXhwb3J0IGRlZmF1bHQgZGVmaW5lKGNsYXNzIFR5cGUgZXh0ZW5kcyBFbGVtZW50IHtcbiAgY29uc3RydWN0b3IoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBuYW1lLCBwcmVmaXhOYW1lLCBzdXBlclR5cGVzLCBwcm9wZXJ0aWVzLCBwcm92aXNpb25hbCkge1xuICAgIHN1cGVyKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCk7XG5cbiAgICB0aGlzLm5hbWUgPSBuYW1lO1xuICAgIHRoaXMucHJlZml4TmFtZSA9IHByZWZpeE5hbWU7XG4gICAgdGhpcy5zdXBlclR5cGVzID0gc3VwZXJUeXBlcztcbiAgICB0aGlzLnByb3BlcnRpZXMgPSBwcm9wZXJ0aWVzO1xuICAgIHRoaXMucHJvdmlzaW9uYWwgPSBwcm92aXNpb25hbDtcbiAgfVxuXG4gIGdldE5hbWUoKSB7XG4gICAgcmV0dXJuIHRoaXMubmFtZTtcbiAgfVxuXG4gIGdldFByZWZpeE5hbWUoKSB7XG4gICAgcmV0dXJuIHRoaXMucHJlZml4TmFtZTtcbiAgfVxuXG4gIGdldFN1cGVyVHlwZXMoKSB7XG4gICAgcmV0dXJuIHRoaXMuc3VwZXJUeXBlcztcbiAgfVxuXG4gIGdldFR5cGVOb2RlKCkge1xuICAgIGNvbnN0IG5vZGUgPSB0aGlzLmdldE5vZGUoKSxcbiAgICAgICAgICB0eXBlTm9kZSA9IG5vZGU7ICAvLy9cblxuICAgIHJldHVybiB0eXBlTm9kZTtcbiAgfVxuXG4gIGdldFByb3BlcnRpZXMocHJvcGVydGllcyA9IFtdKSB7XG4gICAgcHVzaChwcm9wZXJ0aWVzLCB0aGlzLnByb3BlcnRpZXMpO1xuXG4gICAgdGhpcy5zdXBlclR5cGVzLmZvckVhY2goKHN1cGVyVHlwZSkgPT4ge1xuICAgICAgY29uc3Qgc3VwZXJUeXBlUHJvcGVydGllcyA9IHN1cGVyVHlwZS5nZXRQcm9wZXJ0aWVzKCk7XG5cbiAgICAgIHB1c2gocHJvcGVydGllcywgc3VwZXJUeXBlUHJvcGVydGllcyk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gcHJvcGVydGllcztcbiAgfVxuXG4gIGlzUHJvdmlzaW9uYWwoaW5jbHVkZVN1cGVyVHlwZXMgPSB0cnVlKSB7XG4gICAgbGV0IHByb3Zpc2lvbmFsID0gdGhpcy5wcm92aXNpb25hbDtcblxuICAgIGlmIChpbmNsdWRlU3VwZXJUeXBlcykge1xuICAgICAgaWYgKCFwcm92aXNpb25hbCkge1xuICAgICAgICBwcm92aXNpb25hbCA9IHRoaXMuc3VwZXJUeXBlcy5zb21lKChzdXBlclR5cGUpID0+IHtcbiAgICAgICAgICBjb25zdCBzdXBlclR5cGVQcm92aXNpb25hbCA9IHN1cGVyVHlwZS5pc1Byb3Zpc2lvbmFsKCk7XG5cbiAgICAgICAgICBpZiAoc3VwZXJUeXBlUHJvdmlzaW9uYWwpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHByb3Zpc2lvbmFsO1xuICB9XG5cbiAgc2V0TmFtZShuYW1lKSB7XG4gICAgdGhpcy5uYW1lID0gbmFtZTtcbiAgfVxuXG4gIHNldFByZWZpeE5hbWUocHJlZml4TmFtZSkge1xuICAgIHRoaXMucHJlZml4TmFtZSA9IHByZWZpeE5hbWU7XG4gIH1cblxuICBzZXRTdXBlclR5cGVzKHN1cGVyVHlwZXMpIHtcbiAgICB0aGlzLnN1cGVyVHlwZXMgPSBzdXBlclR5cGVzO1xuICB9XG5cbiAgc2V0UHJvcGVydGllcyhwcm9wZXJ0aWVzKSB7XG4gICAgdGhpcy5wcm9wZXJ0aWVzID0gcHJvcGVydGllcztcbiAgfVxuXG4gIHNldFByb3Zpc2lvbmFsKHByb3Zpc2lvbmFsKSB7XG4gICAgdGhpcy5wcm92aXNpb25hbCA9IHByb3Zpc2lvbmFsO1xuICB9XG5cbiAgaXNCYXNlVHlwZSgpIHtcbiAgICBsZXQgYmFzZVR5cGUgPSBmYWxzZTtcblxuICAgIGlmICh0aGlzLm5hbWUgPT09IEJBU0VfVFlQRV9TWU1CT0wpIHtcbiAgICAgIGJhc2VUeXBlID0gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gYmFzZVR5cGU7XG4gIH1cblxuICBpc0VzdGFibGlzaGVkKGluY2x1ZGVTdXBlclR5cGVzID0gdHJ1ZSkge1xuICAgIGNvbnN0IHByb3Zpc2lvbmFsID0gdGhpcy5pc1Byb3Zpc2lvbmFsKGluY2x1ZGVTdXBlclR5cGVzKSxcbiAgICAgICAgICBlc3RhYmxpc2hlZCA9ICFwcm92aXNpb25hbDtcblxuICAgIHJldHVybiBlc3RhYmxpc2hlZDtcbiAgfVxuXG4gIHJldHJpZXZlQW5jZXN0b3JUeXBlcyhhbmNlc3RvclR5cGVzID0gW10pIHtcbiAgICBjb25zdCBiYXNlVHlwZSA9IHRoaXMuaXNCYXNlVHlwZSgpO1xuXG4gICAgaWYgKCFiYXNlVHlwZSkge1xuICAgICAgY29uc3QgYW5jZXN0b3JUeXBlID0gdGhpcywgIC8vL1xuICAgICAgICAgICAgYW5jZXN0b3JUeXBlc0luY2x1ZGVBbmNlc3RvclR5cGUgPSBhbmNlc3RvclR5cGVzLmluY2x1ZGVzKGFuY2VzdG9yVHlwZSk7XG5cbiAgICAgIGlmICghYW5jZXN0b3JUeXBlc0luY2x1ZGVBbmNlc3RvclR5cGUpIHtcbiAgICAgICAgYW5jZXN0b3JUeXBlcy5wdXNoKGFuY2VzdG9yVHlwZSk7XG5cbiAgICAgICAgdGhpcy5zdXBlclR5cGVzLmZvckVhY2goKHN1cGVyVHlwZSkgPT4ge1xuICAgICAgICAgIHN1cGVyVHlwZS5yZXRyaWV2ZUFuY2VzdG9yVHlwZXMoYW5jZXN0b3JUeXBlcyk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBhbmNlc3RvclR5cGVzO1xuICB9XG5cbiAgaXNDb3R5cGUoKSB7XG4gICAgY29uc3QgcHJvcGVydGllcyA9IHRoaXMuZ2V0UHJvcGVydGllcygpLFxuICAgICAgICAgIHByb3BlcnRpZXNMZW5ndGggPSBwcm9wZXJ0aWVzLmxlbmd0aCxcbiAgICAgICAgICBjb3R5cGUgPSAocHJvcGVydGllc0xlbmd0aCA+IDApO1xuXG4gICAgcmV0dXJuIGNvdHlwZTtcbiAgfVxuXG4gIGlzUHJlZml4ZWQoKSB7XG4gICAgY29uc3QgcHJlZml4ZWQgPSAodGhpcy5wcmVmaXhOYW1lICE9PSBudWxsKTtcblxuICAgIHJldHVybiBwcmVmaXhlZDtcbiAgfVxuXG4gIGdldFByZWZpeGVkTmFtZSgpIHtcbiAgICBsZXQgcHJlZml4ZWROYW1lID0gbnVsbDtcblxuICAgIGNvbnN0IHByZWZpeGVkID0gdGhpcy5pc1ByZWZpeGVkKCk7XG5cbiAgICBpZiAocHJlZml4ZWQpIHtcbiAgICAgIHByZWZpeGVkTmFtZSA9IGAke3RoaXMucHJlZml4TmFtZX0ke3RoaXMubmFtZX1gO1xuICAgIH1cblxuICAgIHJldHVybiBwcmVmaXhlZE5hbWU7XG4gIH1cblxuICBnZXROb21pbmFsVHlwZU5hbWUoKSB7XG4gICAgY29uc3QgcHJlZml4ZWQgPSB0aGlzLmlzUHJlZml4ZWQoKSxcbiAgICAgICAgICBub21pbmFsVHlwZU5hbWUgPSBwcmVmaXhlZCA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGAke3RoaXMucHJlZml4TmFtZX0ke3RoaXMubmFtZX1gIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5uYW1lO1xuXG4gICAgcmV0dXJuIG5vbWluYWxUeXBlTmFtZTtcbiAgfVxuXG4gIGlzQmFzaWMoKSB7XG4gICAgbGV0IGJhc2ljID0gZmFsc2U7XG5cbiAgICBjb25zdCBzdXBlclR5cGVzTGVuZ3RoID0gdGhpcy5zdXBlclR5cGVzLmxlbmd0aDtcblxuICAgIGlmIChzdXBlclR5cGVzTGVuZ3RoID09PSAxKSB7XG4gICAgICBjb25zdCBmaXJzdFN1cGVyVHlwZSA9IGZpcnN0KHRoaXMuc3VwZXJUeXBlcyksXG4gICAgICAgICAgICBzdXBlclR5cGUgPSBmaXJzdFN1cGVyVHlwZSwgLy8vXG4gICAgICAgICAgICBiYXNlVHlwZSA9IGJhc2VUeXBlRnJvbU5vdGhpbmcoKTtcblxuICAgICAgaWYgKHN1cGVyVHlwZSA9PT0gYmFzZVR5cGUpIHtcbiAgICAgICAgYmFzaWMgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBiYXNpYztcbiAgfVxuXG4gIGlzUmVmaW5lZCgpIHtcbiAgICBsZXQgcmVmaW5lZCA9IGZhbHNlO1xuXG4gICAgY29uc3Qgc3VwZXJUeXBlc0xlbmd0aCA9IHRoaXMuc3VwZXJUeXBlcy5sZW5ndGg7XG5cbiAgICBpZiAoc3VwZXJUeXBlc0xlbmd0aCA9PT0gMSkge1xuICAgICAgY29uc3QgZmlyc3RTdXBlclR5cGUgPSBmaXJzdCh0aGlzLnN1cGVyVHlwZXMpLFxuICAgICAgICAgICAgc3VwZXJUeXBlID0gZmlyc3RTdXBlclR5cGUsIC8vL1xuICAgICAgICAgICAgc3VwZXJUeXBlTmFtZSA9IHN1cGVyVHlwZS5nZXROYW1lKCk7XG5cbiAgICAgIGlmIChzdXBlclR5cGVOYW1lID09PSB0aGlzLm5hbWUpIHtcbiAgICAgICAgcmVmaW5lZCA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlZmluZWQ7XG4gIH1cblxuICBpc0pvaW5lZFRvKHR5cGUpIHtcbiAgICBsZXQgam9pbmVkVG8gPSBmYWxzZTtcblxuICAgIGNvbnN0IGFuY2VzdG9yVHlwZXMgPSB0aGlzLnJldHJpZXZlQW5jZXN0b3JUeXBlcygpLFxuICAgICAgICAgIHR5cGVBbmNlc3RvclR5cGVzID0gdHlwZS5yZXRyaWV2ZUFuY2VzdG9yVHlwZXMoKSxcbiAgICAgICAgICBpbnRlcnNlY3RpbmdBbmNlc3RvclR5cGVzID0gaW50ZXJzZWN0aW9uKGFuY2VzdG9yVHlwZXMsIHR5cGVBbmNlc3RvclR5cGVzLCAoYW5jZXN0b3JUeXBlLCB0eXBlQW5jZXN0b3JUeXBlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBhbmNlc3RvclR5cGVFcXVhbFRvQVR5cGVuY2VzdG9yVHlwZSA9IGFuY2VzdG9yVHlwZS5pc0VxdWFsVG8odHlwZUFuY2VzdG9yVHlwZSk7XG5cbiAgICAgICAgICAgIGlmIChhbmNlc3RvclR5cGVFcXVhbFRvQVR5cGVuY2VzdG9yVHlwZSkge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSxcbiAgICAgICAgICBpbnRlcnNlY3RpbmdBbmNlc3RvclR5cGVzTGVuZ3RoID0gaW50ZXJzZWN0aW5nQW5jZXN0b3JUeXBlcy5sZW5ndGg7XG5cbiAgICBpZiAoaW50ZXJzZWN0aW5nQW5jZXN0b3JUeXBlc0xlbmd0aCA+IDApIHtcbiAgICAgIGpvaW5lZFRvID0gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gam9pbmVkVG87XG4gIH1cblxuICBpc0VxdWFsVG8odHlwZSkge1xuICAgIGNvbnN0IGVxdWFsVG8gPSAodGhpcyA9PT0gdHlwZSk7XG5cbiAgICByZXR1cm4gZXF1YWxUbztcbiAgfVxuXG4gIGlzU3ViVHlwZU9mKHR5cGUpIHtcbiAgICBsZXQgc3ViVHlwZU9mO1xuXG4gICAgY29uc3QgYmFzZVR5cGUgPSBiYXNlVHlwZUZyb21Ob3RoaW5nKCk7XG5cbiAgICBpZiAodGhpcyA9PT0gYmFzZVR5cGUpIHtcbiAgICAgIHN1YlR5cGVPZiA9IGZhbHNlO1xuICAgIH0gZWxzZSB7XG4gICAgICBzdWJUeXBlT2YgPSB0aGlzLnN1cGVyVHlwZXMuc29tZSgoc3VwZXJUeXBlKSA9PiB7IC8vL1xuICAgICAgICBpZiAoc3VwZXJUeXBlID09PSB0eXBlKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBzdXBlclR5cGVTdWJUeXBlT2ZUeXBlID0gc3VwZXJUeXBlLmlzU3ViVHlwZU9mKHR5cGUpO1xuXG4gICAgICAgIGlmIChzdXBlclR5cGVTdWJUeXBlT2ZUeXBlKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfVxuXG4gICAgcmV0dXJuIHN1YlR5cGVPZjtcbiAgfVxuXG4gIGlzU3VwZXJUeXBlT2YodHlwZSkge1xuICAgIGNvbnN0IHN1YlR5cGVPZiA9IHR5cGUuaXNTdWJUeXBlT2YodGhpcyksXG4gICAgICAgICAgc3VwZXJUeXBlT2YgPSBzdWJUeXBlT2Y7ICAvLy9cblxuICAgIHJldHVybiBzdXBlclR5cGVPZjtcbiAgfVxuXG4gIGlzRXF1YWxUb09yU3ViVHlwZU9mKHR5cGUpIHtcbiAgICBjb25zdCBlcXVhbFRvID0gdGhpcy5pc0VxdWFsVG8odHlwZSksXG4gICAgICAgICAgc3ViVHlwZU9mID0gdGhpcy5pc1N1YlR5cGVPZih0eXBlKSxcbiAgICAgICAgICBlcXVhbFRvT3JTdWJUeXBlT2YgPSAoZXF1YWxUbyB8fCBzdWJUeXBlT2YpO1xuXG4gICAgcmV0dXJuIGVxdWFsVG9PclN1YlR5cGVPZjtcbiAgfVxuXG4gIGlzRXF1YWxUb09yU3VwZXJUeXBlT2YodHlwZSkge1xuICAgIGNvbnN0IGVxdWFsVG8gPSB0aGlzLmlzRXF1YWxUbyh0eXBlKSxcbiAgICAgICAgICBzdXBlclR5cGVPZiA9IHRoaXMuaXNTdXBlclR5cGVPZih0eXBlKSxcbiAgICAgICAgICBlcXVhbFRvT3JTdXBlclR5cGVPZiA9IChlcXVhbFRvIHx8IHN1cGVyVHlwZU9mKTtcblxuICAgIHJldHVybiBlcXVhbFRvT3JTdXBlclR5cGVPZjtcbiAgfVxuXG4gIGlzRXF1YWxUb1N1YlR5cGVPclN1cGVyVHlwZU9mKHR5cGUpIHtcbiAgICBjb25zdCBlcXVhbFRvID0gdGhpcy5pc0VxdWFsVG8odHlwZSksXG4gICAgICAgICAgc3ViVHlwZU9mID0gdGhpcy5pc1N1YlR5cGVPZih0eXBlKSxcbiAgICAgICAgICBzdXBlclR5cGVPZiA9IHRoaXMuaXNTdXBlclR5cGVPZih0eXBlKSxcbiAgICAgICAgICBlcXVhbFRvU3ViVHlwZU9yU3VwZXJUeXBlT2YgPSAoZXF1YWxUbyB8fCBzdWJUeXBlT2YgfHwgc3VwZXJUeXBlT2YpO1xuXG4gICAgcmV0dXJuIGVxdWFsVG9TdWJUeXBlT3JTdXBlclR5cGVPZjtcbiAgfVxuXG4gIGNvbXBhcmVUeXBlTmFtZSh0eXBlTmFtZSkge1xuICAgIGNvbnN0IG5hbWVUeXBlTmFtZSA9ICh0aGlzLm5hbWUgPT09IHR5cGVOYW1lKSxcbiAgICAgICAgICBjb21wYXJlc1RvVHlwZU5hbWUgPSBuYW1lVHlwZU5hbWU7ICAvLy9cblxuICAgIHJldHVybiBjb21wYXJlc1RvVHlwZU5hbWU7XG4gIH1cblxuICBjb21wYXJlUHJvdmlzaW9uYWwocHJvdmlzaW9uYWwsIGluY2x1ZGVTdXBlcnR5cGVzID0gdHJ1ZSkge1xuICAgIGxldCBjb21wYXJlc1RvUHJvdmlzaW9uYWw7XG5cbiAgICBjb25zdCBwcm92aXNpb25hbEEgPSBwcm92aXNpb25hbDsgLy8vXG5cbiAgICBwcm92aXNpb25hbCA9IHRoaXMuaXNQcm92aXNpb25hbChpbmNsdWRlU3VwZXJ0eXBlcyk7XG5cbiAgICBjb25zdCBwcm92aXNpb25hbEIgPSBwcm92aXNpb25hbDsgLy8vXG5cbiAgICBjb21wYXJlc1RvUHJvdmlzaW9uYWwgPSAocHJvdmlzaW9uYWxBID09PSBwcm92aXNpb25hbEIpO1xuXG4gICAgcmV0dXJuIGNvbXBhcmVzVG9Qcm92aXNpb25hbDtcbiAgfVxuXG4gIGNvbXBhcmVOb21pbmFsVHlwZU5hbWUobm9taW5hbFR5cGVOYW1lKSB7XG4gICAgbGV0IGNvbXBhcmVzVG9Ob21pbmFsVHlwZU5hbWUgPSBmYWxzZTtcblxuICAgIGNvbnN0IG5hbWVOb21pbmFsVHlwZU5hbWUgPSAodGhpcy5uYW1lID09PSBub21pbmFsVHlwZU5hbWUpO1xuXG4gICAgaWYgKG5hbWVOb21pbmFsVHlwZU5hbWUpIHtcbiAgICAgIGNvbXBhcmVzVG9Ob21pbmFsVHlwZU5hbWUgPSB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBwcmVmaXhlZCA9IHRoaXMuaXNQcmVmaXhlZCgpO1xuXG4gICAgICBpZiAocHJlZml4ZWQpIHtcbiAgICAgICAgY29uc3QgcHJlZml4ZWROYW1lID0gdGhpcy5nZXRQcmVmaXhlZE5hbWUoKSxcbiAgICAgICAgICAgICAgcHJlZml4ZWROYW1lTm9taW5hbFR5cGVOYW1lID0gKHByZWZpeGVkTmFtZSA9PT0gbm9taW5hbFR5cGVOYW1lKTtcblxuICAgICAgICBpZiAocHJlZml4ZWROYW1lTm9taW5hbFR5cGVOYW1lKSB7XG4gICAgICAgICAgY29tcGFyZXNUb05vbWluYWxUeXBlTmFtZSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gY29tcGFyZXNUb05vbWluYWxUeXBlTmFtZTtcbiAgfVxuXG4gIGNvbXBhcmVQcmVmaXhlZFR5cGVOYW1lKHByZWZpeGVkVHlwZU5hbWUpIHtcbiAgICBsZXQgY29tcGFyZXNUb1ByZWZpeGVkVHlwZU5hbWUgPSBmYWxzZTtcblxuICAgIGNvbnN0IHByZWZpeGVkID0gdGhpcy5pc1ByZWZpeGVkKCk7XG5cbiAgICBpZiAocHJlZml4ZWQpIHtcbiAgICAgIGNvbnN0IHByZWZpeGVkTmFtZSA9IHRoaXMuZ2V0UHJlZml4ZWROYW1lKCksXG4gICAgICAgICAgICBwcmVmaXhlZFR5cGVOYW1lUHJlZml4ZWROYW1lID0gKHByZWZpeGVkVHlwZU5hbWUgPT09IHByZWZpeGVkTmFtZSk7XG5cbiAgICAgIGlmIChwcmVmaXhlZFR5cGVOYW1lUHJlZml4ZWROYW1lKSB7XG4gICAgICAgIGNvbXBhcmVzVG9QcmVmaXhlZFR5cGVOYW1lID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gY29tcGFyZXNUb1ByZWZpeGVkVHlwZU5hbWU7XG4gIH1cblxuICB0b0pTT04oYWJyaWRnZWQgPSBmYWxzZSkge1xuICAgIGNvbnN0IHN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7XG5cbiAgICBsZXQgYnJlYWtQb2ludDtcblxuICAgIGJyZWFrUG9pbnQgPSB0aGlzLmdldEJyZWFrUG9pbnQoKTtcblxuICAgIGNvbnN0IGJyZWFrUG9pbnRKU09OID0gYnJlYWtQb2ludFRvQnJlYWtQb2ludEpTT04oYnJlYWtQb2ludCk7XG5cbiAgICBicmVha1BvaW50ID0gYnJlYWtQb2ludEpTT047ICAvLy9cblxuICAgIGNvbnN0IGpzb24gPSB7XG4gICAgICBzdHJpbmcsXG4gICAgICBicmVha1BvaW50XG4gICAgfTtcblxuICAgIGlmICghYWJyaWRnZWQpIHtcbiAgICAgIGNvbnN0IHByZWZpeE5hbWVKU09OID0gcHJlZml4bmFtZVRvUHJldml4TmFtZUpTT04odGhpcy5wcmVmaXhOYW1lKSxcbiAgICAgICAgICAgIHN1cGVyVHlwZXNKU09OID0gc3VwZXJUeXBlc1RvU3VwZXJUeXBlc0pTT04odGhpcy5zdXBlclR5cGVzKSxcbiAgICAgICAgICAgIHByb3BlcnRpZXNKU09OID0gcHJvcGVydGllc1RvUHJvcGVydGllc0pTT04odGhpcy5wcm9wZXJ0aWVzKSxcbiAgICAgICAgICAgIHByb3Zpc2lub2FsSlNPTSA9IHByb3Zpc2lvbmFsVG9Qcm92aXNpb25hbEpTT04odGhpcy5wcm92aXNpb25hbCksXG4gICAgICAgICAgICBwcmVmaXhOYW1lID0gcHJlZml4TmFtZUpTT04sICAvLy9cbiAgICAgICAgICAgIHN1cGVyVHlwZXMgPSBzdXBlclR5cGVzSlNPTiwgIC8vL1xuICAgICAgICAgICAgcHJvcGVydGllcyA9IHByb3BlcnRpZXNKU09OLCAgLy8vXG4gICAgICAgICAgICBwcm92aXNpb25hbCA9IHByb3Zpc2lub2FsSlNPTTsgIC8vL1xuXG4gICAgICBPYmplY3QuYXNzaWduKGpzb24sIHtcbiAgICAgICAgcHJlZml4TmFtZSxcbiAgICAgICAgc3VwZXJUeXBlcyxcbiAgICAgICAgcHJvcGVydGllcyxcbiAgICAgICAgcHJvdmlzaW9uYWxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBqc29uO1xuICB9XG5cbiAgc3RhdGljIG5hbWUgPSBcIlR5cGVcIjtcblxuICBzdGF0aWMgZnJvbUpTT04oanNvbiwgY29udGV4dCkge1xuICAgIHJldHVybiBpbnN0YW50aWF0ZSgoY29udGV4dCkgPT4ge1xuICAgICAgY29uc3QgeyBzdHJpbmcgfSA9IGpzb24sXG4gICAgICAgICAgICB0eXBlTm9kZSA9IGluc3RhbnRpYXRlVHlwZShzdHJpbmcsIGNvbnRleHQpLFxuICAgICAgICAgICAgbm9kZSA9IHR5cGVOb2RlLCAvLy9cbiAgICAgICAgICAgIGJyZWFrUG9pbnQgPSBicmVha1BvaW50RnJvbUpTT04oanNvbiksXG4gICAgICAgICAgICBuYW1lID0gbmFtZUZyb21UeXBlTm9kZSh0eXBlTm9kZSwgY29udGV4dCksXG4gICAgICAgICAgICBwcmVmaXhOYW1lID0gcHJlZml4TmFtZUZyb21KU09OKGpzb24sIGNvbnRleHQpLFxuICAgICAgICAgICAgc3VwZXJUeXBlcyA9IHN1cGVyVHlwZXNGcm9tSlNPTihqc29uLCBjb250ZXh0KSxcbiAgICAgICAgICAgIHByb3BlcnRpZXMgPSBwcm9wZXJ0aWVzRnJvbUpTT04oanNvbiwgY29udGV4dCksXG4gICAgICAgICAgICBwcm92aXNpb25hbCA9IHByb3Zpc2lvbmFsRnJvbUpTT04oanNvbik7XG5cbiAgICAgIGNvbnRleHQgPSBudWxsOyAvLy9cblxuICAgICAgY29uc3QgdHlwZSA9IG5ldyBUeXBlKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgbmFtZSwgcHJlZml4TmFtZSwgc3VwZXJUeXBlcywgcHJvcGVydGllcywgcHJvdmlzaW9uYWwpO1xuXG4gICAgICByZXR1cm4gdHlwZTtcbiAgICB9LCBjb250ZXh0KTtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tTmFtZShuYW1lLCBjb250ZXh0KSB7XG4gICAgY29uc3Qgc3RyaW5nID0gbmFtZSwgIC8vL1xuICAgICAgICAgIG5vZGUgPSBudWxsLFxuICAgICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICAgIHByZWZpeE5hbWUgPSBudWxsLFxuICAgICAgICAgIHN1cGVyVHlwZXMgPSBbXSxcbiAgICAgICAgICBwcm9wZXJ0aWVzID0gW10sXG4gICAgICAgICAgcHJvdmlzaW9uYWwgPSBmYWxzZTtcblxuICAgIGNvbnRleHQgPSBudWxsO1xuXG4gICAgY29uc3QgdHlwZSA9IG5ldyBUeXBlKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgbmFtZSwgcHJlZml4TmFtZSwgc3VwZXJUeXBlcywgcHJvcGVydGllcywgcHJvdmlzaW9uYWwpO1xuXG4gICAgcmV0dXJuIHR5cGU7XG4gIH1cbn0pO1xuIl0sIm5hbWVzIjpbInB1c2giLCJmaXJzdCIsImludGVyc2VjdGlvbiIsImFycmF5VXRpbGl0aWVzIiwiYnJlYWtQb2ludEZyb21KU09OIiwiYnJlYWtQb2ludFRvQnJlYWtQb2ludEpTT04iLCJicmVha1BvaW50VXRpbGl0aWVzIiwiZGVmaW5lIiwiVHlwZSIsIkVsZW1lbnQiLCJjb250ZXh0Iiwic3RyaW5nIiwibm9kZSIsImJyZWFrUG9pbnQiLCJuYW1lIiwicHJlZml4TmFtZSIsInN1cGVyVHlwZXMiLCJwcm9wZXJ0aWVzIiwicHJvdmlzaW9uYWwiLCJnZXROYW1lIiwiZ2V0UHJlZml4TmFtZSIsImdldFN1cGVyVHlwZXMiLCJnZXRUeXBlTm9kZSIsImdldE5vZGUiLCJ0eXBlTm9kZSIsImdldFByb3BlcnRpZXMiLCJmb3JFYWNoIiwic3VwZXJUeXBlIiwic3VwZXJUeXBlUHJvcGVydGllcyIsImlzUHJvdmlzaW9uYWwiLCJpbmNsdWRlU3VwZXJUeXBlcyIsInNvbWUiLCJzdXBlclR5cGVQcm92aXNpb25hbCIsInNldE5hbWUiLCJzZXRQcmVmaXhOYW1lIiwic2V0U3VwZXJUeXBlcyIsInNldFByb3BlcnRpZXMiLCJzZXRQcm92aXNpb25hbCIsImlzQmFzZVR5cGUiLCJiYXNlVHlwZSIsIkJBU0VfVFlQRV9TWU1CT0wiLCJpc0VzdGFibGlzaGVkIiwiZXN0YWJsaXNoZWQiLCJyZXRyaWV2ZUFuY2VzdG9yVHlwZXMiLCJhbmNlc3RvclR5cGVzIiwiYW5jZXN0b3JUeXBlIiwiYW5jZXN0b3JUeXBlc0luY2x1ZGVBbmNlc3RvclR5cGUiLCJpbmNsdWRlcyIsImlzQ290eXBlIiwicHJvcGVydGllc0xlbmd0aCIsImxlbmd0aCIsImNvdHlwZSIsImlzUHJlZml4ZWQiLCJwcmVmaXhlZCIsImdldFByZWZpeGVkTmFtZSIsInByZWZpeGVkTmFtZSIsImdldE5vbWluYWxUeXBlTmFtZSIsIm5vbWluYWxUeXBlTmFtZSIsImlzQmFzaWMiLCJiYXNpYyIsInN1cGVyVHlwZXNMZW5ndGgiLCJmaXJzdFN1cGVyVHlwZSIsImJhc2VUeXBlRnJvbU5vdGhpbmciLCJpc1JlZmluZWQiLCJyZWZpbmVkIiwic3VwZXJUeXBlTmFtZSIsImlzSm9pbmVkVG8iLCJ0eXBlIiwiam9pbmVkVG8iLCJ0eXBlQW5jZXN0b3JUeXBlcyIsImludGVyc2VjdGluZ0FuY2VzdG9yVHlwZXMiLCJ0eXBlQW5jZXN0b3JUeXBlIiwiYW5jZXN0b3JUeXBlRXF1YWxUb0FUeXBlbmNlc3RvclR5cGUiLCJpc0VxdWFsVG8iLCJpbnRlcnNlY3RpbmdBbmNlc3RvclR5cGVzTGVuZ3RoIiwiZXF1YWxUbyIsImlzU3ViVHlwZU9mIiwic3ViVHlwZU9mIiwic3VwZXJUeXBlU3ViVHlwZU9mVHlwZSIsImlzU3VwZXJUeXBlT2YiLCJzdXBlclR5cGVPZiIsImlzRXF1YWxUb09yU3ViVHlwZU9mIiwiZXF1YWxUb09yU3ViVHlwZU9mIiwiaXNFcXVhbFRvT3JTdXBlclR5cGVPZiIsImVxdWFsVG9PclN1cGVyVHlwZU9mIiwiaXNFcXVhbFRvU3ViVHlwZU9yU3VwZXJUeXBlT2YiLCJlcXVhbFRvU3ViVHlwZU9yU3VwZXJUeXBlT2YiLCJjb21wYXJlVHlwZU5hbWUiLCJ0eXBlTmFtZSIsIm5hbWVUeXBlTmFtZSIsImNvbXBhcmVzVG9UeXBlTmFtZSIsImNvbXBhcmVQcm92aXNpb25hbCIsImluY2x1ZGVTdXBlcnR5cGVzIiwiY29tcGFyZXNUb1Byb3Zpc2lvbmFsIiwicHJvdmlzaW9uYWxBIiwicHJvdmlzaW9uYWxCIiwiY29tcGFyZU5vbWluYWxUeXBlTmFtZSIsImNvbXBhcmVzVG9Ob21pbmFsVHlwZU5hbWUiLCJuYW1lTm9taW5hbFR5cGVOYW1lIiwicHJlZml4ZWROYW1lTm9taW5hbFR5cGVOYW1lIiwiY29tcGFyZVByZWZpeGVkVHlwZU5hbWUiLCJwcmVmaXhlZFR5cGVOYW1lIiwiY29tcGFyZXNUb1ByZWZpeGVkVHlwZU5hbWUiLCJwcmVmaXhlZFR5cGVOYW1lUHJlZml4ZWROYW1lIiwidG9KU09OIiwiYWJyaWRnZWQiLCJnZXRTdHJpbmciLCJnZXRCcmVha1BvaW50IiwiYnJlYWtQb2ludEpTT04iLCJqc29uIiwicHJlZml4TmFtZUpTT04iLCJwcmVmaXhuYW1lVG9QcmV2aXhOYW1lSlNPTiIsInN1cGVyVHlwZXNKU09OIiwic3VwZXJUeXBlc1RvU3VwZXJUeXBlc0pTT04iLCJwcm9wZXJ0aWVzSlNPTiIsInByb3BlcnRpZXNUb1Byb3BlcnRpZXNKU09OIiwicHJvdmlzaW5vYWxKU09NIiwicHJvdmlzaW9uYWxUb1Byb3Zpc2lvbmFsSlNPTiIsIk9iamVjdCIsImFzc2lnbiIsImZyb21KU09OIiwiaW5zdGFudGlhdGUiLCJpbnN0YW50aWF0ZVR5cGUiLCJuYW1lRnJvbVR5cGVOb2RlIiwicHJlZml4TmFtZUZyb21KU09OIiwic3VwZXJUeXBlc0Zyb21KU09OIiwicHJvcGVydGllc0Zyb21KU09OIiwicHJvdmlzaW9uYWxGcm9tSlNPTiIsImZyb21OYW1lIl0sIm1hcHBpbmdzIjoiQUFBQTs7OzsrQkF1QkE7OztlQUFBOzs7MkJBckIrQjtnQ0FDYzswQkFFdEI7eUJBQ0s7NkJBQ0k7eUJBQ0M7c0JBQ0c7c0JBUVM7MkJBQ2Q7QUFFL0IsTUFBTSxFQUFFQSxJQUFJLEVBQUVDLEtBQUssRUFBRUMsWUFBWSxFQUFFLEdBQUdDLHlCQUFjLEVBQzlDLEVBQUVDLGtCQUFrQixFQUFFQywwQkFBMEIsRUFBRSxHQUFHQyxtQ0FBbUI7TUFFOUUsV0FBZUMsSUFBQUEsZ0JBQU0sRUFBQyxNQUFNQyxhQUFhQyx1QkFBTztJQUM5QyxZQUFZQyxPQUFPLEVBQUVDLE1BQU0sRUFBRUMsSUFBSSxFQUFFQyxVQUFVLEVBQUVDLElB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
@@ -40,11 +40,11 @@ function equalityAssignmentFromEquality(equality, context) {
40
40
  return equalityAssignment;
41
41
  }
42
42
  function leftVariableAssignmentFromEquality(equality, context) {
43
- const leftTerm = equality.getLeftTerm(), type = equality.getType(), term = leftTerm, leftVariableAssignment = variableAssignmentFromTermAndType(term, type, context);
43
+ const leftTerm = equality.getLeftTerm(), rightTerm = equality.getRightTerm(), rightTermType = rightTerm.getType(), term = leftTerm, type = rightTermType, leftVariableAssignment = variableAssignmentFromTermAndType(term, type, context);
44
44
  return leftVariableAssignment;
45
45
  }
46
46
  function rightVariableAssignmentFromEquality(equality, context) {
47
- const rightTerm = equality.getRightTerm(), type = equality.getType(), term = rightTerm, rightVariableAssignment = variableAssignmentFromTermAndType(term, type, context);
47
+ const leftTerm = equality.getLeftTerm(), rightTerm = equality.getRightTerm(), leftTermType = leftTerm.getType(), term = rightTerm, type = leftTermType, rightVariableAssignment = variableAssignmentFromTermAndType(term, type, context);
48
48
  return rightVariableAssignment;
49
49
  }
50
50
  function variableAssignmentFromTypeAssertion(typeAssertion, context) {
@@ -90,4 +90,4 @@ function variableAssignmentFromTermAndType(term, type, context) {
90
90
  return variableAssignment;
91
91
  }
92
92
 
93
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wcm9jZXNzL2Fzc2lnbi5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgdmFyaWFibGVGcm9tVmFyaWFibGVOb2RlIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9lbGVtZW50XCI7XG5pbXBvcnQgeyBtZXJnZUVxdWl2YWxlbmNlcywgZXF1aXZhbGVuY2VzRnJvbUVxdWFsaXR5IH0gZnJvbSBcIi4uL3V0aWxpdGllcy9lcXVpdmFsZW5jZXNcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIGVxdWFsaXR5QXNzaWdubWVudEZyb21FcXVhbGl0eShlcXVhbGl0eSwgY29udGV4dCkge1xuICBjb25zdCBlcXVhbGl0eUFzc2lnbm1lbnQgPSAoY29udGV4dCkgPT4ge1xuICAgIGxldCBlcXVpdmFsZW5jZXM7XG5cbiAgICBlcXVpdmFsZW5jZXMgPSBlcXVpdmFsZW5jZXNGcm9tRXF1YWxpdHkoZXF1YWxpdHksIGNvbnRleHQpO1xuXG4gICAgY29uc3QgZXF1aXZhbGVuY2VzQSA9IGVxdWl2YWxlbmNlczsgLy8vXG5cbiAgICBlcXVpdmFsZW5jZXMgPSBjb250ZXh0LmdldEVxdWl2YWxlbmNlcygpO1xuXG4gICAgY29uc3QgZXF1aXZhbGVuY2VzQiA9IGVxdWl2YWxlbmNlczsgLy8vXG5cbiAgICBlcXVpdmFsZW5jZXMgPSBtZXJnZUVxdWl2YWxlbmNlcyhlcXVpdmFsZW5jZXNBLCBlcXVpdmFsZW5jZXNCLCBjb250ZXh0KTtcblxuICAgIGNvbnRleHQuc2V0RXF1aXZhbGVuY2VzKGVxdWl2YWxlbmNlcyk7XG4gIH07XG5cbiAgcmV0dXJuIGVxdWFsaXR5QXNzaWdubWVudDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxlZnRWYXJpYWJsZUFzc2lnbm1lbnRGcm9tRXF1YWxpdHkoZXF1YWxpdHksIGNvbnRleHQpIHtcbiAgY29uc3QgbGVmdFRlcm0gPSBlcXVhbGl0eS5nZXRMZWZ0VGVybSgpLFxuICAgICAgICB0eXBlID0gZXF1YWxpdHkuZ2V0VHlwZSgpLFxuICAgICAgICB0ZXJtID0gbGVmdFRlcm0sICAvLy9cbiAgICAgICAgbGVmdFZhcmlhYmxlQXNzaWdubWVudCA9IHZhcmlhYmxlQXNzaWdubWVudEZyb21UZXJtQW5kVHlwZSh0ZXJtLCB0eXBlLCBjb250ZXh0KTtcblxuICByZXR1cm4gbGVmdFZhcmlhYmxlQXNzaWdubWVudDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJpZ2h0VmFyaWFibGVBc3NpZ25tZW50RnJvbUVxdWFsaXR5KGVxdWFsaXR5LCBjb250ZXh0KSB7XG4gIGNvbnN0IHJpZ2h0VGVybSA9IGVxdWFsaXR5LmdldFJpZ2h0VGVybSgpLFxuICAgICAgICB0eXBlID0gZXF1YWxpdHkuZ2V0VHlwZSgpLFxuICAgICAgICB0ZXJtID0gcmlnaHRUZXJtLCAvLy9cbiAgICAgICAgcmlnaHRWYXJpYWJsZUFzc2lnbm1lbnQgPSB2YXJpYWJsZUFzc2lnbm1lbnRGcm9tVGVybUFuZFR5cGUodGVybSwgdHlwZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHJpZ2h0VmFyaWFibGVBc3NpZ25tZW50O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFyaWFibGVBc3NpZ25tZW50RnJvbVR5cGVBc3NlcnRpb24odHlwZUFzc2VydGlvbiwgY29udGV4dCkge1xuICBjb25zdCB0ZXJtID0gdHlwZUFzc2VydGlvbi5nZXRUZXJtKCksXG4gICAgICAgIHR5cGUgPSB0eXBlQXNzZXJ0aW9uLmdldFR5cGUoKSxcbiAgICAgICAgdmFyaWFibGVBc3NpZ25tZW50ID0gdmFyaWFibGVBc3NpZ25tZW50RnJvbVRlcm1BbmRUeXBlKHRlcm0sIHR5cGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiB2YXJpYWJsZUFzc2lnbm1lbnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YXJpYWJsZUFzc2lnbm1lbnRGcm9tUHJlcGVydHlBc3NlcnRpb24ocHJvcGVydHlBc3NlcnRpb24sIGNvbnRleHQpIHtcbiAgY29uc3Qgc3ViamVjdFRlcm0gPSBwcm9wZXJ0eUFzc2VydGlvbi5nZXRTdWJqZWN0VGVybSgpLFxuICAgICAgICBwcm9wZXJ0eVR5cGUgPSBwcm9wZXJ0eUFzc2VydGlvbi5nZXRQcm9wZXJ0eVR5cGUoKSxcbiAgICAgICAgdGVybSA9IHN1YmplY3RUZXJtLCAvLy9cbiAgICAgICAgdHlwZSA9IHByb3BlcnR5VHlwZSwgIC8vL1xuICAgICAgICB2YXJpYWJsZUFzc2lnbm1lbnQgPSB2YXJpYWJsZUFzc2lnbm1lbnRGcm9tVGVybUFuZFR5cGUodGVybSwgdHlwZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHZhcmlhYmxlQXNzaWdubWVudDtcbn1cblxuZnVuY3Rpb24gdmFyaWFibGVBc3NpZ25tZW50RnJvbVRlcm1BbmRUeXBlKHRlcm0sIHR5cGUsIGNvbnRleHQpIHtcbiAgbGV0IHZhcmlhYmxlQXNzaWdubWVudCA9IChjb250ZXh0KSA9PiB7XG4gICAgLy8vXG4gIH07XG5cbiAgY29uc3QgdGVybVNpbmd1bGFyID0gdGVybS5pc1Npbmd1bGFyKCk7XG5cbiAgaWYgKHRlcm1TaW5ndWxhcikge1xuICAgIGNvbnN0IHRlcm1UeXBlID0gdGVybS5nZXRUeXBlKCksXG4gICAgICAgICAgdGVybVR5cGVFcXVhbFRvVHlwZSA9IHRlcm1UeXBlLmlzRXF1YWxUbyh0eXBlKSxcbiAgICAgICAgICB0ZXJtVHlwZVN1cGVyVHlwZU9mVHlwZSA9IHRlcm1UeXBlLmlzU3VwZXJUeXBlT2YodHlwZSk7XG5cbiAgICBpZiAoZmFsc2UpIHtcbiAgICAgIC8vL1xuICAgIH0gZWxzZSBpZiAodGVybVR5cGVFcXVhbFRvVHlwZSkge1xuICAgICAgY29uc3QgdGVybVByb3Zpc2lvbmFsID0gdGVybS5pc1Byb3Zpc2lvbmFsKCk7XG5cbiAgICAgIGlmICh0ZXJtUHJvdmlzaW9uYWwpIHtcbiAgICAgICAgY29uc3QgdHlwZSA9IHRlcm0uZ2V0VHlwZSgpLFxuICAgICAgICAgICAgICB2YXJpYWJsZU5vZGUgPSB0ZXJtLmdldFZhcmlhYmxlTm9kZSgpLFxuICAgICAgICAgICAgICB2YXJpYWJsZSA9IHZhcmlhYmxlRnJvbVZhcmlhYmxlTm9kZSh2YXJpYWJsZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICAgICAgICBwcm92aXNpb25hbCA9IGZhbHNlO1xuXG4gICAgICAgIHZhcmlhYmxlLnNldFR5cGUodHlwZSk7XG5cbiAgICAgICAgdmFyaWFibGUuc2V0UHJvdmlzaW9uYWwocHJvdmlzaW9uYWwpO1xuXG4gICAgICAgIHZhcmlhYmxlQXNzaWdubWVudCA9IChjb250ZXh0KSA9PiB7XG4gICAgICAgICAgY29uc3QgZGVjbGFyZWRWYXJpYWJsZSA9IHZhcmlhYmxlOyAgLy8vXG5cbiAgICAgICAgICBjb250ZXh0LmFkZERlY2xhcmVkVmFyaWFibGUoZGVjbGFyZWRWYXJpYWJsZSk7XG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0ZXJtVHlwZVN1cGVyVHlwZU9mVHlwZSkge1xuICAgICAgY29uc3QgdGVybUVzdGFibGlzaGVkID0gdGVybS5pc0VzdGFibGlzaGVkKCk7XG5cbiAgICAgIGlmICh0ZXJtRXN0YWJsaXNoZWQpIHtcbiAgICAgICAgY29uc3QgdmFyaWFibGVOb2RlID0gdGVybS5nZXRWYXJpYWJsZU5vZGUoKSxcbiAgICAgICAgICAgICAgdmFyaWFibGUgPSB2YXJpYWJsZUZyb21WYXJpYWJsZU5vZGUodmFyaWFibGVOb2RlLCBjb250ZXh0KTtcblxuICAgICAgICB2YXJpYWJsZS5zZXRUeXBlKHR5cGUpO1xuXG4gICAgICAgIHZhcmlhYmxlQXNzaWdubWVudCA9IChjb250ZXh0KSA9PiB7XG4gICAgICAgICAgY29uc3QgZGVjbGFyZWRWYXJpYWJsZSA9IHZhcmlhYmxlOyAgLy8vXG5cbiAgICAgICAgICBjb250ZXh0LmFkZERlY2xhcmVkVmFyaWFibGUoZGVjbGFyZWRWYXJpYWJsZSk7XG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHZhcmlhYmxlQXNzaWdubWVudDtcbn1cbiJdLCJuYW1lcyI6WyJlcXVhbGl0eUFzc2lnbm1lbnRGcm9tRXF1YWxpdHkiLCJsZWZ0VmFyaWFibGVBc3NpZ25tZW50RnJvbUVxdWFsaXR5IiwicmlnaHRWYXJpYWJsZUFzc2lnbm1lbnRGcm9tRXF1YWxpdHkiLCJ2YXJpYWJsZUFzc2lnbm1lbnRGcm9tUHJlcGVydHlBc3NlcnRpb24iLCJ2YXJpYWJsZUFzc2lnbm1lbnRGcm9tVHlwZUFzc2VydGlvbiIsImVxdWFsaXR5IiwiY29udGV4dCIsImVxdWFsaXR5QXNzaWdubWVudCIsImVxdWl2YWxlbmNlcyIsImVxdWl2YWxlbmNlc0Zyb21FcXVhbGl0eSIsImVxdWl2YWxlbmNlc0EiLCJnZXRFcXVpdmFsZW5jZXMiLCJlcXVpdmFsZW5jZXNCIiwibWVyZ2VFcXVpdmFsZW5jZXMiLCJzZXRFcXVpdmFsZW5jZXMiLCJsZWZ0VGVybSIsImdldExlZnRUZXJtIiwidHlwZSIsImdldFR5cGUiLCJ0ZXJtIiwibGVmdFZhcmlhYmxlQXNzaWdubWVudCIsInZhcmlhYmxlQXNzaWdubWVudEZyb21UZXJtQW5kVHlwZSIsInJpZ2h0VGVybSIsImdldFJpZ2h0VGVybSIsInJpZ2h0VmFyaWFibGVBc3NpZ25tZW50IiwidHlwZUFzc2VydGlvbiIsImdldFRlcm0iLCJ2YXJpYWJsZUFzc2lnbm1lbnQiLCJwcm9wZXJ0eUFzc2VydGlvbiIsInN1YmplY3RUZXJtIiwiZ2V0U3ViamVjdFRlcm0iLCJwcm9wZXJ0eVR5cGUiLCJnZXRQcm9wZXJ0eVR5cGUiLCJ0ZXJtU2luZ3VsYXIiLCJpc1Npbmd1bGFyIiwidGVybVR5cGUiLCJ0ZXJtVHlwZUVxdWFsVG9UeXBlIiwiaXNFcXVhbFRvIiwidGVybVR5cGVTdXBlclR5cGVPZlR5cGUiLCJpc1N1cGVyVHlwZU9mIiwidGVybVByb3Zpc2lvbmFsIiwiaXNQcm92aXNpb25hbCIsInZhcmlhYmxlTm9kZSIsImdldFZhcmlhYmxlTm9kZSIsInZhcmlhYmxlIiwidmFyaWFibGVGcm9tVmFyaWFibGVOb2RlIiwicHJvdmlzaW9uYWwiLCJzZXRUeXBlIiwic2V0UHJvdmlzaW9uYWwiLCJkZWNsYXJlZFZhcmlhYmxlIiwiYWRkRGVjbGFyZWRWYXJpYWJsZSIsInRlcm1Fc3RhYmxpc2hlZCIsImlzRXN0YWJsaXNoZWQiXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7OztRQUtnQkE7ZUFBQUE7O1FBb0JBQztlQUFBQTs7UUFTQUM7ZUFBQUE7O1FBaUJBQztlQUFBQTs7UUFSQUM7ZUFBQUE7Ozt5QkF6Q3lCOzhCQUNtQjtBQUVyRCxTQUFTSiwrQkFBK0JLLFFBQVEsRUFBRUMsT0FBTztJQUM5RCxNQUFNQyxxQkFBcUIsQ0FBQ0Q7UUFDMUIsSUFBSUU7UUFFSkEsZUFBZUMsSUFBQUEsc0NBQXdCLEVBQUNKLFVBQVVDO1FBRWxELE1BQU1JLGdCQUFnQkYsY0FBYyxHQUFHO1FBRXZDQSxlQUFlRixRQUFRSyxlQUFlO1FBRXRDLE1BQU1DLGdCQUFnQkosY0FBYyxHQUFHO1FBRXZDQSxlQUFlSyxJQUFBQSwrQkFBaUIsRUFBQ0gsZUFBZUUsZUFBZU47UUFFL0RBLFFBQVFRLGVBQWUsQ0FBQ047SUFDMUI7SUFFQSxPQUFPRDtBQUNUO0FBRU8sU0FBU04sbUNBQW1DSSxRQUFRLEVBQUVDLE9BQU87SUFDbEUsTUFBTVMsV0FBV1YsU0FBU1csV0FBVyxJQUMvQkMsT0FBT1osU0FBU2EsT0FBTyxJQUN2QkMsT0FBT0osVUFDUEsseUJBQXlCQyxrQ0FBa0NGLE1BQU1GLE1BQU1YO0lBRTdFLE9BQU9jO0FBQ1Q7QUFFTyxTQUFTbEIsb0NBQW9DRyxRQUFRLEVBQUVDLE9BQU87SUFDbkUsTUFBTWdCLFlBQVlqQixTQUFTa0IsWUFBWSxJQUNqQ04sT0FBT1osU0FBU2EsT0FBTyxJQUN2QkMsT0FBT0csV0FDUEUsMEJBQTBCSCxrQ0FBa0NGLE1BQU1GLE1BQU1YO0lBRTlFLE9BQU9rQjtBQUNUO0FBRU8sU0FBU3BCLG9DQUFvQ3FCLGFBQWEsRUFBRW5CLE9BQU87SUFDeEUsTUFBTWEsT0FBT00sY0FBY0MsT0FBTyxJQUM1QlQsT0FBT1EsY0FBY1AsT0FBTyxJQUM1QlMscUJBQXFCTixrQ0FBa0NGLE1BQU1GLE1BQU1YO0lBRXpFLE9BQU9xQjtBQUNUO0FBRU8sU0FBU3hCLHdDQUF3Q3lCLGlCQUFpQixFQUFFdEIsT0FBTztJQUNoRixNQUFNdUIsY0FBY0Qsa0JBQWtCRSxjQUFjLElBQzlDQyxlQUFlSCxrQkFBa0JJLGVBQWUsSUFDaERiLE9BQU9VLGFBQ1BaLE9BQU9jLGNBQ1BKLHFCQUFxQk4sa0NBQWtDRixNQUFNRixNQUFNWDtJQUV6RSxPQUFPcUI7QUFDVDtBQUVBLFNBQVNOLGtDQUFrQ0YsSUFBSSxFQUFFRixJQUFJLEVBQUVYLE9BQU87SUFDNUQsSUFBSXFCLHFCQUFxQixDQUFDckI7SUFDeEIsR0FBRztJQUNMO0lBRUEsTUFBTTJCLGVBQWVkLEtBQUtlLFVBQVU7SUFFcEMsSUFBSUQsY0FBYztRQUNoQixNQUFNRSxXQUFXaEIsS0FBS0QsT0FBTyxJQUN2QmtCLHNCQUFzQkQsU0FBU0UsU0FBUyxDQUFDcEIsT0FDekNxQiwwQkFBMEJILFNBQVNJLGFBQWEsQ0FBQ3RCO1FBRXZELElBQUksT0FBTztRQUNULEdBQUc7UUFDTCxPQUFPLElBQUltQixxQkFBcUI7WUFDOUIsTUFBTUksa0JBQWtCckIsS0FBS3NCLGFBQWE7WUFFMUMsSUFBSUQsaUJBQWlCO2dCQUNuQixNQUFNdkIsT0FBT0UsS0FBS0QsT0FBTyxJQUNuQndCLGVBQWV2QixLQUFLd0IsZUFBZSxJQUNuQ0MsV0FBV0MsSUFBQUEsaUNBQXdCLEVBQUNILGNBQWNwQyxVQUNsRHdDLGNBQWM7Z0JBRXBCRixTQUFTRyxPQUFPLENBQUM5QjtnQkFFakIyQixTQUFTSSxjQUFjLENBQUNGO2dCQUV4Qm5CLHFCQUFxQixDQUFDckI7b0JBQ3BCLE1BQU0yQyxtQkFBbUJMLFVBQVcsR0FBRztvQkFFdkN0QyxRQUFRNEMsbUJBQW1CLENBQUNEO2dCQUM5QjtZQUNGO1FBQ0YsT0FBTyxJQUFJWCx5QkFBeUI7WUFDbEMsTUFBTWEsa0JBQWtCaEMsS0FBS2lDLGFBQWE7WUFFMUMsSUFBSUQsaUJBQWlCO2dCQUNuQixNQUFNVCxlQUFldkIsS0FBS3dCLGVBQWUsSUFDbkNDLFdBQVdDLElBQUFBLGlDQUF3QixFQUFDSCxjQUFjcEM7Z0JBRXhEc0MsU0FBU0csT0FBTyxDQUFDOUI7Z0JBRWpCVSxxQkFBcUIsQ0FBQ3JCO29CQUNwQixNQUFNMkMsbUJBQW1CTCxVQUFXLEdBQUc7b0JBRXZDdEMsUUFBUTRDLG1CQUFtQixDQUFDRDtnQkFDOUI7WUFDRjtRQUNGO0lBQ0Y7SUFFQSxPQUFPdEI7QUFDVCJ9
93
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wcm9jZXNzL2Fzc2lnbi5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgdmFyaWFibGVGcm9tVmFyaWFibGVOb2RlIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9lbGVtZW50XCI7XG5pbXBvcnQgeyBtZXJnZUVxdWl2YWxlbmNlcywgZXF1aXZhbGVuY2VzRnJvbUVxdWFsaXR5IH0gZnJvbSBcIi4uL3V0aWxpdGllcy9lcXVpdmFsZW5jZXNcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIGVxdWFsaXR5QXNzaWdubWVudEZyb21FcXVhbGl0eShlcXVhbGl0eSwgY29udGV4dCkge1xuICBjb25zdCBlcXVhbGl0eUFzc2lnbm1lbnQgPSAoY29udGV4dCkgPT4ge1xuICAgIGxldCBlcXVpdmFsZW5jZXM7XG5cbiAgICBlcXVpdmFsZW5jZXMgPSBlcXVpdmFsZW5jZXNGcm9tRXF1YWxpdHkoZXF1YWxpdHksIGNvbnRleHQpO1xuXG4gICAgY29uc3QgZXF1aXZhbGVuY2VzQSA9IGVxdWl2YWxlbmNlczsgLy8vXG5cbiAgICBlcXVpdmFsZW5jZXMgPSBjb250ZXh0LmdldEVxdWl2YWxlbmNlcygpO1xuXG4gICAgY29uc3QgZXF1aXZhbGVuY2VzQiA9IGVxdWl2YWxlbmNlczsgLy8vXG5cbiAgICBlcXVpdmFsZW5jZXMgPSBtZXJnZUVxdWl2YWxlbmNlcyhlcXVpdmFsZW5jZXNBLCBlcXVpdmFsZW5jZXNCLCBjb250ZXh0KTtcblxuICAgIGNvbnRleHQuc2V0RXF1aXZhbGVuY2VzKGVxdWl2YWxlbmNlcyk7XG4gIH07XG5cbiAgcmV0dXJuIGVxdWFsaXR5QXNzaWdubWVudDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxlZnRWYXJpYWJsZUFzc2lnbm1lbnRGcm9tRXF1YWxpdHkoZXF1YWxpdHksIGNvbnRleHQpIHtcbiAgY29uc3QgbGVmdFRlcm0gPSBlcXVhbGl0eS5nZXRMZWZ0VGVybSgpLFxuICAgICAgICByaWdodFRlcm0gPSBlcXVhbGl0eS5nZXRSaWdodFRlcm0oKSxcbiAgICAgICAgcmlnaHRUZXJtVHlwZSA9IHJpZ2h0VGVybS5nZXRUeXBlKCksXG4gICAgICAgIHRlcm0gPSBsZWZ0VGVybSwgIC8vL1xuICAgICAgICB0eXBlID0gcmlnaHRUZXJtVHlwZSwgLy8vXG4gICAgICAgIGxlZnRWYXJpYWJsZUFzc2lnbm1lbnQgPSB2YXJpYWJsZUFzc2lnbm1lbnRGcm9tVGVybUFuZFR5cGUodGVybSwgdHlwZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIGxlZnRWYXJpYWJsZUFzc2lnbm1lbnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByaWdodFZhcmlhYmxlQXNzaWdubWVudEZyb21FcXVhbGl0eShlcXVhbGl0eSwgY29udGV4dCkge1xuICBjb25zdCBsZWZ0VGVybSA9IGVxdWFsaXR5LmdldExlZnRUZXJtKCksXG4gICAgICAgIHJpZ2h0VGVybSA9IGVxdWFsaXR5LmdldFJpZ2h0VGVybSgpLFxuICAgICAgICBsZWZ0VGVybVR5cGUgPSBsZWZ0VGVybS5nZXRUeXBlKCksXG4gICAgICAgIHRlcm0gPSByaWdodFRlcm0sIC8vL1xuICAgICAgICB0eXBlID0gbGVmdFRlcm1UeXBlLCAgLy8vXG4gICAgICAgIHJpZ2h0VmFyaWFibGVBc3NpZ25tZW50ID0gdmFyaWFibGVBc3NpZ25tZW50RnJvbVRlcm1BbmRUeXBlKHRlcm0sIHR5cGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiByaWdodFZhcmlhYmxlQXNzaWdubWVudDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhcmlhYmxlQXNzaWdubWVudEZyb21UeXBlQXNzZXJ0aW9uKHR5cGVBc3NlcnRpb24sIGNvbnRleHQpIHtcbiAgY29uc3QgdGVybSA9IHR5cGVBc3NlcnRpb24uZ2V0VGVybSgpLFxuICAgICAgICB0eXBlID0gdHlwZUFzc2VydGlvbi5nZXRUeXBlKCksXG4gICAgICAgIHZhcmlhYmxlQXNzaWdubWVudCA9IHZhcmlhYmxlQXNzaWdubWVudEZyb21UZXJtQW5kVHlwZSh0ZXJtLCB0eXBlLCBjb250ZXh0KTtcblxuICByZXR1cm4gdmFyaWFibGVBc3NpZ25tZW50O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFyaWFibGVBc3NpZ25tZW50RnJvbVByZXBlcnR5QXNzZXJ0aW9uKHByb3BlcnR5QXNzZXJ0aW9uLCBjb250ZXh0KSB7XG4gIGNvbnN0IHN1YmplY3RUZXJtID0gcHJvcGVydHlBc3NlcnRpb24uZ2V0U3ViamVjdFRlcm0oKSxcbiAgICAgICAgcHJvcGVydHlUeXBlID0gcHJvcGVydHlBc3NlcnRpb24uZ2V0UHJvcGVydHlUeXBlKCksXG4gICAgICAgIHRlcm0gPSBzdWJqZWN0VGVybSwgLy8vXG4gICAgICAgIHR5cGUgPSBwcm9wZXJ0eVR5cGUsICAvLy9cbiAgICAgICAgdmFyaWFibGVBc3NpZ25tZW50ID0gdmFyaWFibGVBc3NpZ25tZW50RnJvbVRlcm1BbmRUeXBlKHRlcm0sIHR5cGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiB2YXJpYWJsZUFzc2lnbm1lbnQ7XG59XG5cbmZ1bmN0aW9uIHZhcmlhYmxlQXNzaWdubWVudEZyb21UZXJtQW5kVHlwZSh0ZXJtLCB0eXBlLCBjb250ZXh0KSB7XG4gIGxldCB2YXJpYWJsZUFzc2lnbm1lbnQgPSAoY29udGV4dCkgPT4ge1xuICAgIC8vL1xuICB9O1xuXG4gIGNvbnN0IHRlcm1TaW5ndWxhciA9IHRlcm0uaXNTaW5ndWxhcigpO1xuXG4gIGlmICh0ZXJtU2luZ3VsYXIpIHtcbiAgICBjb25zdCB0ZXJtVHlwZSA9IHRlcm0uZ2V0VHlwZSgpLFxuICAgICAgICAgIHRlcm1UeXBlRXF1YWxUb1R5cGUgPSB0ZXJtVHlwZS5pc0VxdWFsVG8odHlwZSksXG4gICAgICAgICAgdGVybVR5cGVTdXBlclR5cGVPZlR5cGUgPSB0ZXJtVHlwZS5pc1N1cGVyVHlwZU9mKHR5cGUpO1xuXG4gICAgaWYgKGZhbHNlKSB7XG4gICAgICAvLy9cbiAgICB9IGVsc2UgaWYgKHRlcm1UeXBlRXF1YWxUb1R5cGUpIHtcbiAgICAgIGNvbnN0IHRlcm1Qcm92aXNpb25hbCA9IHRlcm0uaXNQcm92aXNpb25hbCgpO1xuXG4gICAgICBpZiAodGVybVByb3Zpc2lvbmFsKSB7XG4gICAgICAgIGNvbnN0IHR5cGUgPSB0ZXJtLmdldFR5cGUoKSxcbiAgICAgICAgICAgICAgdmFyaWFibGVOb2RlID0gdGVybS5nZXRWYXJpYWJsZU5vZGUoKSxcbiAgICAgICAgICAgICAgdmFyaWFibGUgPSB2YXJpYWJsZUZyb21WYXJpYWJsZU5vZGUodmFyaWFibGVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgICAgICAgcHJvdmlzaW9uYWwgPSBmYWxzZTtcblxuICAgICAgICB2YXJpYWJsZS5zZXRUeXBlKHR5cGUpO1xuXG4gICAgICAgIHZhcmlhYmxlLnNldFByb3Zpc2lvbmFsKHByb3Zpc2lvbmFsKTtcblxuICAgICAgICB2YXJpYWJsZUFzc2lnbm1lbnQgPSAoY29udGV4dCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGRlY2xhcmVkVmFyaWFibGUgPSB2YXJpYWJsZTsgIC8vL1xuXG4gICAgICAgICAgY29udGV4dC5hZGREZWNsYXJlZFZhcmlhYmxlKGRlY2xhcmVkVmFyaWFibGUpO1xuICAgICAgICB9O1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodGVybVR5cGVTdXBlclR5cGVPZlR5cGUpIHtcbiAgICAgIGNvbnN0IHRlcm1Fc3RhYmxpc2hlZCA9IHRlcm0uaXNFc3RhYmxpc2hlZCgpO1xuXG4gICAgICBpZiAodGVybUVzdGFibGlzaGVkKSB7XG4gICAgICAgIGNvbnN0IHZhcmlhYmxlTm9kZSA9IHRlcm0uZ2V0VmFyaWFibGVOb2RlKCksXG4gICAgICAgICAgICAgIHZhcmlhYmxlID0gdmFyaWFibGVGcm9tVmFyaWFibGVOb2RlKHZhcmlhYmxlTm9kZSwgY29udGV4dCk7XG5cbiAgICAgICAgdmFyaWFibGUuc2V0VHlwZSh0eXBlKTtcblxuICAgICAgICB2YXJpYWJsZUFzc2lnbm1lbnQgPSAoY29udGV4dCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGRlY2xhcmVkVmFyaWFibGUgPSB2YXJpYWJsZTsgIC8vL1xuXG4gICAgICAgICAgY29udGV4dC5hZGREZWNsYXJlZFZhcmlhYmxlKGRlY2xhcmVkVmFyaWFibGUpO1xuICAgICAgICB9O1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB2YXJpYWJsZUFzc2lnbm1lbnQ7XG59XG4iXSwibmFtZXMiOlsiZXF1YWxpdHlBc3NpZ25tZW50RnJvbUVxdWFsaXR5IiwibGVmdFZhcmlhYmxlQXNzaWdubWVudEZyb21FcXVhbGl0eSIsInJpZ2h0VmFyaWFibGVBc3NpZ25tZW50RnJvbUVxdWFsaXR5IiwidmFyaWFibGVBc3NpZ25tZW50RnJvbVByZXBlcnR5QXNzZXJ0aW9uIiwidmFyaWFibGVBc3NpZ25tZW50RnJvbVR5cGVBc3NlcnRpb24iLCJlcXVhbGl0eSIsImNvbnRleHQiLCJlcXVhbGl0eUFzc2lnbm1lbnQiLCJlcXVpdmFsZW5jZXMiLCJlcXVpdmFsZW5jZXNGcm9tRXF1YWxpdHkiLCJlcXVpdmFsZW5jZXNBIiwiZ2V0RXF1aXZhbGVuY2VzIiwiZXF1aXZhbGVuY2VzQiIsIm1lcmdlRXF1aXZhbGVuY2VzIiwic2V0RXF1aXZhbGVuY2VzIiwibGVmdFRlcm0iLCJnZXRMZWZ0VGVybSIsInJpZ2h0VGVybSIsImdldFJpZ2h0VGVybSIsInJpZ2h0VGVybVR5cGUiLCJnZXRUeXBlIiwidGVybSIsInR5cGUiLCJsZWZ0VmFyaWFibGVBc3NpZ25tZW50IiwidmFyaWFibGVBc3NpZ25tZW50RnJvbVRlcm1BbmRUeXBlIiwibGVmdFRlcm1UeXBlIiwicmlnaHRWYXJpYWJsZUFzc2lnbm1lbnQiLCJ0eXBlQXNzZXJ0aW9uIiwiZ2V0VGVybSIsInZhcmlhYmxlQXNzaWdubWVudCIsInByb3BlcnR5QXNzZXJ0aW9uIiwic3ViamVjdFRlcm0iLCJnZXRTdWJqZWN0VGVybSIsInByb3BlcnR5VHlwZSIsImdldFByb3BlcnR5VHlwZSIsInRlcm1TaW5ndWxhciIsImlzU2luZ3VsYXIiLCJ0ZXJtVHlwZSIsInRlcm1UeXBlRXF1YWxUb1R5cGUiLCJpc0VxdWFsVG8iLCJ0ZXJtVHlwZVN1cGVyVHlwZU9mVHlwZSIsImlzU3VwZXJUeXBlT2YiLCJ0ZXJtUHJvdmlzaW9uYWwiLCJpc1Byb3Zpc2lvbmFsIiwidmFyaWFibGVOb2RlIiwiZ2V0VmFyaWFibGVOb2RlIiwidmFyaWFibGUiLCJ2YXJpYWJsZUZyb21WYXJpYWJsZU5vZGUiLCJwcm92aXNpb25hbCIsInNldFR5cGUiLCJzZXRQcm92aXNpb25hbCIsImRlY2xhcmVkVmFyaWFibGUiLCJhZGREZWNsYXJlZFZhcmlhYmxlIiwidGVybUVzdGFibGlzaGVkIiwiaXNFc3RhYmxpc2hlZCJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7O1FBS2dCQTtlQUFBQTs7UUFvQkFDO2VBQUFBOztRQVdBQztlQUFBQTs7UUFtQkFDO2VBQUFBOztRQVJBQztlQUFBQTs7O3lCQTdDeUI7OEJBQ21CO0FBRXJELFNBQVNKLCtCQUErQkssUUFBUSxFQUFFQyxPQUFPO0lBQzlELE1BQU1DLHFCQUFxQixDQUFDRDtRQUMxQixJQUFJRTtRQUVKQSxlQUFlQyxJQUFBQSxzQ0FBd0IsRUFBQ0osVUFBVUM7UUFFbEQsTUFBTUksZ0JBQWdCRixjQUFjLEdBQUc7UUFFdkNBLGVBQWVGLFFBQVFLLGVBQWU7UUFFdEMsTUFBTUMsZ0JBQWdCSixjQUFjLEdBQUc7UUFFdkNBLGVBQWVLLElBQUFBLCtCQUFpQixFQUFDSCxlQUFlRSxlQUFlTjtRQUUvREEsUUFBUVEsZUFBZSxDQUFDTjtJQUMxQjtJQUVBLE9BQU9EO0FBQ1Q7QUFFTyxTQUFTTixtQ0FBbUNJLFFBQVEsRUFBRUMsT0FBTztJQUNsRSxNQUFNUyxXQUFXVixTQUFTVyxXQUFXLElBQy9CQyxZQUFZWixTQUFTYSxZQUFZLElBQ2pDQyxnQkFBZ0JGLFVBQVVHLE9BQU8sSUFDakNDLE9BQU9OLFVBQ1BPLE9BQU9ILGVBQ1BJLHlCQUF5QkMsa0NBQWtDSCxNQUFNQyxNQUFNaEI7SUFFN0UsT0FBT2lCO0FBQ1Q7QUFFTyxTQUFTckIsb0NBQW9DRyxRQUFRLEVBQUVDLE9BQU87SUFDbkUsTUFBTVMsV0FBV1YsU0FBU1csV0FBVyxJQUMvQkMsWUFBWVosU0FBU2EsWUFBWSxJQUNqQ08sZUFBZVYsU0FBU0ssT0FBTyxJQUMvQkMsT0FBT0osV0FDUEssT0FBT0csY0FDUEMsMEJBQTBCRixrQ0FBa0NILE1BQU1DLE1BQU1oQjtJQUU5RSxPQUFPb0I7QUFDVDtBQUVPLFNBQVN0QixvQ0FBb0N1QixhQUFhLEVBQUVyQixPQUFPO0lBQ3hFLE1BQU1lLE9BQU9NLGNBQWNDLE9BQU8sSUFDNUJOLE9BQU9LLGNBQWNQLE9BQU8sSUFDNUJTLHFCQUFxQkwsa0NBQWtDSCxNQUFNQyxNQUFNaEI7SUFFekUsT0FBT3VCO0FBQ1Q7QUFFTyxTQUFTMUIsd0NBQXdDMkIsaUJBQWlCLEVBQUV4QixPQUFPO0lBQ2hGLE1BQU15QixjQUFjRCxrQkFBa0JFLGNBQWMsSUFDOUNDLGVBQWVILGtCQUFrQkksZUFBZSxJQUNoRGIsT0FBT1UsYUFDUFQsT0FBT1csY0FDUEoscUJBQXFCTCxrQ0FBa0NILE1BQU1DLE1BQU1oQjtJQUV6RSxPQUFPdUI7QUFDVDtBQUVBLFNBQVNMLGtDQUFrQ0gsSUFBSSxFQUFFQyxJQUFJLEVBQUVoQixPQUFPO0lBQzVELElBQUl1QixxQkFBcUIsQ0FBQ3ZCO0lBQ3hCLEdBQUc7SUFDTDtJQUVBLE1BQU02QixlQUFlZCxLQUFLZSxVQUFVO0lBRXBDLElBQUlELGNBQWM7UUFDaEIsTUFBTUUsV0FBV2hCLEtBQUtELE9BQU8sSUFDdkJrQixzQkFBc0JELFNBQVNFLFNBQVMsQ0FBQ2pCLE9BQ3pDa0IsMEJBQTBCSCxTQUFTSSxhQUFhLENBQUNuQjtRQUV2RCxJQUFJLE9BQU87UUFDVCxHQUFHO1FBQ0wsT0FBTyxJQUFJZ0IscUJBQXFCO1lBQzlCLE1BQU1JLGtCQUFrQnJCLEtBQUtzQixhQUFhO1lBRTFDLElBQUlELGlCQUFpQjtnQkFDbkIsTUFBTXBCLE9BQU9ELEtBQUtELE9BQU8sSUFDbkJ3QixlQUFldkIsS0FBS3dCLGVBQWUsSUFDbkNDLFdBQVdDLElBQUFBLGlDQUF3QixFQUFDSCxjQUFjdEMsVUFDbEQwQyxjQUFjO2dCQUVwQkYsU0FBU0csT0FBTyxDQUFDM0I7Z0JBRWpCd0IsU0FBU0ksY0FBYyxDQUFDRjtnQkFFeEJuQixxQkFBcUIsQ0FBQ3ZCO29CQUNwQixNQUFNNkMsbUJBQW1CTCxVQUFXLEdBQUc7b0JBRXZDeEMsUUFBUThDLG1CQUFtQixDQUFDRDtnQkFDOUI7WUFDRjtRQUNGLE9BQU8sSUFBSVgseUJBQXlCO1lBQ2xDLE1BQU1hLGtCQUFrQmhDLEtBQUtpQyxhQUFhO1lBRTFDLElBQUlELGlCQUFpQjtnQkFDbkIsTUFBTVQsZUFBZXZCLEtBQUt3QixlQUFlLElBQ25DQyxXQUFXQyxJQUFBQSxpQ0FBd0IsRUFBQ0gsY0FBY3RDO2dCQUV4RHdDLFNBQVNHLE9BQU8sQ0FBQzNCO2dCQUVqQk8scUJBQXFCLENBQUN2QjtvQkFDcEIsTUFBTTZDLG1CQUFtQkwsVUFBVyxHQUFHO29CQUV2Q3hDLFFBQVE4QyxtQkFBbUIsQ0FBQ0Q7Z0JBQzlCO1lBQ0Y7UUFDRjtJQUNGO0lBRUEsT0FBT3RCO0FBQ1QifQ==