occam-nominal 1.0.344 → 1.0.346

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.
@@ -63,7 +63,8 @@ const _default = (0, _elements.define)(class Combinator extends _occamlanguages.
63
63
  const statementString = statement.getString(), combinatorString = this.getString(); ///
64
64
  context.trace(`Unifying the '${statementString}' statement with the '${combinatorString}' combinator...`);
65
65
  const combinator = this, combinatorContext = combinator.getContext(), generalContext = combinatorContext, specifiContext = context; ///
66
- return (0, _unify.unifyStatementWithCombinator)(statement, combinator, generalContext, specifiContext, (statementUnifiesWithCombinator, context)=>{
66
+ return (0, _unify.unifyStatementWithCombinator)(statement, combinator, generalContext, specifiContext, (statementUnifiesWithCombinator, generalContext, specifiContext)=>{
67
+ const context = specifiContext; ///
67
68
  let statementUnifies = false;
68
69
  if (statementUnifiesWithCombinator) {
69
70
  statementUnifies = true;
@@ -103,4 +104,4 @@ const _default = (0, _elements.define)(class Combinator extends _occamlanguages.
103
104
  }
104
105
  });
105
106
 
106
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9lbGVtZW50L2NvbWJpbmF0b3IuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IEVsZW1lbnQsIGJyZWFrUG9pbnRVdGlsaXRpZXMgfSBmcm9tIFwib2NjYW0tbGFuZ3VhZ2VzXCI7XG5cbmltcG9ydCB7IGRlZmluZSB9IGZyb20gXCIuLi9lbGVtZW50c1wiO1xuaW1wb3J0IHsgaW5zdGFudGlhdGVDb21iaW5hdG9yIH0gZnJvbSBcIi4uL3Byb2Nlc3MvaW5zdGFudGlhdGVcIjtcbmltcG9ydCB7IHN0YXRlbWVudEZyb21Db21iaW5hdG9yTm9kZSB9IGZyb20gXCIuLi91dGlsaXRpZXMvZWxlbWVudFwiO1xuaW1wb3J0IHsgdW5pZnlTdGF0ZW1lbnRXaXRoQ29tYmluYXRvciB9IGZyb20gXCIuLi9wcm9jZXNzL3VuaWZ5XCI7XG5pbXBvcnQgeyB2YWxpZGF0ZVN0YXRlbWVudEFzQ29tYmluYXRvciB9IGZyb20gXCIuLi9wcm9jZXNzL3ZhbGlkYXRlXCI7XG5pbXBvcnQgeyBhdHRlbXB0LCBzZXJpYWxpc2UsIHVuc2VyaWFsaXNlLCBpbnN0YW50aWF0ZSB9IGZyb20gXCIuLi91dGlsaXRpZXMvY29udGV4dFwiO1xuXG5jb25zdCB7IGJyZWFrUG9pbnRGcm9tSlNPTiwgYnJlYWtQb2ludFRvQnJlYWtQb2ludEpTT04gfSA9IGJyZWFrUG9pbnRVdGlsaXRpZXM7XG5cbmV4cG9ydCBkZWZhdWx0IGRlZmluZShjbGFzcyBDb21iaW5hdG9yIGV4dGVuZHMgRWxlbWVudCB7XG4gIGNvbnN0cnVjdG9yKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgc3RhdGVtZW50KSB7XG4gICAgc3VwZXIoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50KTtcblxuICAgIHRoaXMuc3RhdGVtZW50ID0gc3RhdGVtZW50O1xuICB9XG5cbiAgZ2V0U3RhdGVtZW50KCkge1xuICAgIHJldHVybiB0aGlzLnN0YXRlbWVudDtcbiAgfVxuXG4gIGdldENvbWJpbmF0b3J5Tm9kZSgpIHtcbiAgICBjb25zdCBub2RlID0gdGhpcy5nZXROb2RlKCksXG4gICAgICAgICAgY29tYmluYXRvck5vZGUgPSBub2RlOyAgLy8vXG5cbiAgICByZXR1cm4gY29tYmluYXRvck5vZGU7XG4gIH1cblxuICB2ZXJpZnkoY29udGV4dCwgY29udGludWF0aW9uKSB7XG4gICAgY29uc3QgY29tYmluYXRvclN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7ICAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFZlcmlmeWluZyB0aGUgJyR7Y29tYmluYXRvclN0cmluZ30nIGNvbWJpbmF0b3IuLi5gKTtcblxuICAgIGF0dGVtcHQoKGNvbnRleHQpID0+IHtcbiAgICAgIHJldHVybiB0aGlzLnZhbGlkYXRlU3RhdGVtZW50KGNvbnRleHQsIChzdGF0ZW1lbnRWYWxpZGF0ZXMsIGNvbnRleHQpID0+IHtcbiAgICAgICAgbGV0IHZlcmlmaWVzID0gZmFsc2U7XG5cbiAgICAgICAgaWYgKHN0YXRlbWVudFZhbGlkYXRlcykge1xuICAgICAgICAgIHZlcmlmaWVzID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh2ZXJpZmllcykge1xuICAgICAgICAgIHRoaXMuY29tbWl0KGNvbnRleHQpO1xuXG4gICAgICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmVyaWZpZWQgdGhlICcke2NvbWJpbmF0b3JTdHJpbmd9JyBjb21iaW5hdG9yLmApO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbih2ZXJpZmllcywgY29udGV4dCk7XG4gICAgICB9KTtcbiAgICB9LCBjb250ZXh0KVxuICB9XG5cbiAgdmFsaWRhdGVTdGF0ZW1lbnQoY29udGV4dCwgY29udGludWF0aW9uKSB7XG4gICAgY29uc3QgY29tYmluYXRvclN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7ICAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke2NvbWJpbmF0b3JTdHJpbmd9JyBjb21iaW5hdG9yJ3Mgc3RhdGVtZW50Li4uYCk7XG5cbiAgICByZXR1cm4gdmFsaWRhdGVTdGF0ZW1lbnRBc0NvbWJpbmF0b3IodGhpcy5zdGF0ZW1lbnQsIGNvbnRleHQsIChzdGF0ZW1lbnRWYWxpZGF0ZXNBc0NvbWJpbmF0b3IsIGNvbnRleHQpID0+IHtcbiAgICAgIGxldCBzdGF0ZW1lbnRWYWxpZGF0ZXMgPSBmYWxzZTtcblxuICAgICAgaWYgKHN0YXRlbWVudFZhbGlkYXRlc0FzQ29tYmluYXRvcikge1xuICAgICAgICBzdGF0ZW1lbnRWYWxpZGF0ZXMgPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAoc3RhdGVtZW50VmFsaWRhdGVzKSB7XG4gICAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlZCB0aGUgJyR7Y29tYmluYXRvclN0cmluZ30nIGNvbWJpbmF0b3IncyBzdGF0ZW1lbnQuYCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjb250aW51YXRpb24oc3RhdGVtZW50VmFsaWRhdGVzLCBjb250ZXh0KTtcbiAgICB9KTtcbiAgfVxuXG4gIHVuaWZ5U3RhdGVtZW50KHN0YXRlbWVudCwgY29udGV4dCwgY29udGludWF0aW9uKSB7XG4gICAgY29uc3Qgc3RhdGVtZW50U3RyaW5nID0gc3RhdGVtZW50LmdldFN0cmluZygpLFxuICAgICAgICAgIGNvbWJpbmF0b3JTdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBVbmlmeWluZyB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IHdpdGggdGhlICcke2NvbWJpbmF0b3JTdHJpbmd9JyBjb21iaW5hdG9yLi4uYCk7XG5cbiAgICBjb25zdCBjb21iaW5hdG9yID0gdGhpcywgLy8vXG4gICAgICAgICAgY29tYmluYXRvckNvbnRleHQgPSBjb21iaW5hdG9yLmdldENvbnRleHQoKSxcbiAgICAgICAgICBnZW5lcmFsQ29udGV4dCA9IGNvbWJpbmF0b3JDb250ZXh0LCAvLy9cbiAgICAgICAgICBzcGVjaWZpQ29udGV4dCA9IGNvbnRleHQ7IC8vL1xuXG4gICAgcmV0dXJuIHVuaWZ5U3RhdGVtZW50V2l0aENvbWJpbmF0b3Ioc3RhdGVtZW50LCBjb21iaW5hdG9yLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaUNvbnRleHQsIChzdGF0ZW1lbnRVbmlmaWVzV2l0aENvbWJpbmF0b3IsIGNvbnRleHQpID0+IHtcbiAgICAgIGxldCBzdGF0ZW1lbnRVbmlmaWVzID0gZmFsc2U7XG5cbiAgICAgIGlmIChzdGF0ZW1lbnRVbmlmaWVzV2l0aENvbWJpbmF0b3IpIHtcbiAgICAgICAgc3RhdGVtZW50VW5pZmllcyA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChzdGF0ZW1lbnRVbmlmaWVzKSB7XG4gICAgICAgIGNvbnRleHQuZGVidWcoYC4uLnVuaWZpZWQgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCB3aXRoIHRoZSAnJHtjb21iaW5hdG9yU3RyaW5nfScgY29tYmluYXRvci5gKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihzdGF0ZW1lbnRVbmlmaWVzLCBjb250ZXh0KTtcbiAgICB9KTtcbiAgfVxuXG4gIHRvSlNPTigpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCk7XG5cbiAgICByZXR1cm4gc2VyaWFsaXNlKChjb250ZXh0KSA9PiB7XG4gICAgICBjb25zdCBzdHJpbmcgPSB0aGlzLmdldFN0cmluZygpO1xuXG4gICAgICBsZXQgYnJlYWtQb2ludDtcblxuICAgICAgYnJlYWtQb2ludCA9IHRoaXMuZ2V0QnJlYWtQb2ludCgpO1xuXG4gICAgICBjb25zdCBicmVha1BvaW50SlNPTiA9IGJyZWFrUG9pbnRUb0JyZWFrUG9pbnRKU09OKGJyZWFrUG9pbnQpO1xuXG4gICAgICBicmVha1BvaW50ID0gYnJlYWtQb2ludEpTT047ICAvLy9cblxuICAgICAgY29uc3QganNvbiA9IHtcbiAgICAgICAgY29udGV4dCxcbiAgICAgICAgc3RyaW5nLFxuICAgICAgICBicmVha1BvaW50XG4gICAgICB9O1xuXG4gICAgICByZXR1cm4ganNvbjtcbiAgICB9LCBjb250ZXh0KTtcbiAgfVxuXG4gIHN0YXRpYyBuYW1lID0gXCJDb21iaW5hdG9yXCI7XG5cbiAgc3RhdGljIGZyb21KU09OKGpzb24sIGNvbnRleHQpIHtcbiAgICBsZXQgY29tYmluYXRvcjtcblxuICAgIGluc3RhbnRpYXRlKChjb250ZXh0KSA9PiB7XG4gICAgICB1bnNlcmlhbGlzZSgoanNvbiwgY29udGV4dCkgPT4ge1xuICAgICAgICBjb25zdCB7IHN0cmluZyB9ID0ganNvbixcbiAgICAgICAgICAgICAgY29tYmluYXRvck5vZGUgPSBpbnN0YW50aWF0ZUNvbWJpbmF0b3Ioc3RyaW5nLCBjb250ZXh0KSxcbiAgICAgICAgICAgICAgbm9kZSA9IGNvbWJpbmF0b3JOb2RlLCAgLy8vXG4gICAgICAgICAgICAgIGJyZWFrUG9pbnQgPSBicmVha1BvaW50RnJvbUpTT04oanNvbiksXG4gICAgICAgICAgICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21Db21iaW5hdG9yTm9kZShjb21iaW5hdG9yTm9kZSwgY29udGV4dCk7XG5cbiAgICAgICAgY29tYmluYXRvciA9IG5ldyBDb21iaW5hdG9yKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgc3RhdGVtZW50KTtcbiAgICAgIH0sIGpzb24sIGNvbnRleHQpO1xuICAgIH0sIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIGNvbWJpbmF0b3I7XG4gIH1cbn0pO1xuIl0sIm5hbWVzIjpbImJyZWFrUG9pbnRGcm9tSlNPTiIsImJyZWFrUG9pbnRUb0JyZWFrUG9pbnRKU09OIiwiYnJlYWtQb2ludFV0aWxpdGllcyIsImRlZmluZSIsIkNvbWJpbmF0b3IiLCJFbGVtZW50IiwiY29udGV4dCIsInN0cmluZyIsIm5vZGUiLCJicmVha1BvaW50Iiwic3RhdGVtZW50IiwiZ2V0U3RhdGVtZW50IiwiZ2V0Q29tYmluYXRvcnlOb2RlIiwiZ2V0Tm9kZSIsImNvbWJpbmF0b3JOb2RlIiwidmVyaWZ5IiwiY29udGludWF0aW9uIiwiY29tYmluYXRvclN0cmluZyIsImdldFN0cmluZyIsInRyYWNlIiwiYXR0ZW1wdCIsInZhbGlkYXRlU3RhdGVtZW50Iiwic3RhdGVtZW50VmFsaWRhdGVzIiwidmVyaWZpZXMiLCJjb21taXQiLCJkZWJ1ZyIsInZhbGlkYXRlU3RhdGVtZW50QXNDb21iaW5hdG9yIiwic3RhdGVtZW50VmFsaWRhdGVzQXNDb21iaW5hdG9yIiwidW5pZnlTdGF0ZW1lbnQiLCJzdGF0ZW1lbnRTdHJpbmciLCJjb21iaW5hdG9yIiwiY29tYmluYXRvckNvbnRleHQiLCJnZXRDb250ZXh0IiwiZ2VuZXJhbENvbnRleHQiLCJzcGVjaWZpQ29udGV4dCIsInVuaWZ5U3RhdGVtZW50V2l0aENvbWJpbmF0b3IiLCJzdGF0ZW1lbnRVbmlmaWVzV2l0aENvbWJpbmF0b3IiLCJzdGF0ZW1lbnRVbmlmaWVzIiwidG9KU09OIiwic2VyaWFsaXNlIiwiZ2V0QnJlYWtQb2ludCIsImJyZWFrUG9pbnRKU09OIiwianNvbiIsIm5hbWUiLCJmcm9tSlNPTiIsImluc3RhbnRpYXRlIiwidW5zZXJpYWxpc2UiLCJpbnN0YW50aWF0ZUNvbWJpbmF0b3IiLCJzdGF0ZW1lbnRGcm9tQ29tYmluYXRvck5vZGUiXSwibWFwcGluZ3MiOiJBQUFBOzs7OytCQWFBOzs7ZUFBQTs7O2dDQVg2QzswQkFFdEI7NkJBQ2U7eUJBQ007dUJBQ0M7MEJBQ0M7eUJBQ2U7QUFFN0QsTUFBTSxFQUFFQSxrQkFBa0IsRUFBRUMsMEJBQTBCLEVBQUUsR0FBR0MsbUNBQW1CO01BRTlFLFdBQWVDLElBQUFBLGdCQUFNLEVBQUMsTUFBTUMsbUJBQW1CQyx1QkFBTztJQUNwRCxZQUFZQyxPQUFPLEVBQUVDLE1BQU0sRUFBRUMsSUFBSSxFQUFFQyxVQUFVLEVBQUVDLFNBQVMsQ0FBRTtRQUN4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
107
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9lbGVtZW50L2NvbWJpbmF0b3IuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IEVsZW1lbnQsIGJyZWFrUG9pbnRVdGlsaXRpZXMgfSBmcm9tIFwib2NjYW0tbGFuZ3VhZ2VzXCI7XG5cbmltcG9ydCB7IGRlZmluZSB9IGZyb20gXCIuLi9lbGVtZW50c1wiO1xuaW1wb3J0IHsgaW5zdGFudGlhdGVDb21iaW5hdG9yIH0gZnJvbSBcIi4uL3Byb2Nlc3MvaW5zdGFudGlhdGVcIjtcbmltcG9ydCB7IHN0YXRlbWVudEZyb21Db21iaW5hdG9yTm9kZSB9IGZyb20gXCIuLi91dGlsaXRpZXMvZWxlbWVudFwiO1xuaW1wb3J0IHsgdW5pZnlTdGF0ZW1lbnRXaXRoQ29tYmluYXRvciB9IGZyb20gXCIuLi9wcm9jZXNzL3VuaWZ5XCI7XG5pbXBvcnQgeyB2YWxpZGF0ZVN0YXRlbWVudEFzQ29tYmluYXRvciB9IGZyb20gXCIuLi9wcm9jZXNzL3ZhbGlkYXRlXCI7XG5pbXBvcnQgeyBhdHRlbXB0LCBzZXJpYWxpc2UsIHVuc2VyaWFsaXNlLCBpbnN0YW50aWF0ZSB9IGZyb20gXCIuLi91dGlsaXRpZXMvY29udGV4dFwiO1xuXG5jb25zdCB7IGJyZWFrUG9pbnRGcm9tSlNPTiwgYnJlYWtQb2ludFRvQnJlYWtQb2ludEpTT04gfSA9IGJyZWFrUG9pbnRVdGlsaXRpZXM7XG5cbmV4cG9ydCBkZWZhdWx0IGRlZmluZShjbGFzcyBDb21iaW5hdG9yIGV4dGVuZHMgRWxlbWVudCB7XG4gIGNvbnN0cnVjdG9yKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgc3RhdGVtZW50KSB7XG4gICAgc3VwZXIoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50KTtcblxuICAgIHRoaXMuc3RhdGVtZW50ID0gc3RhdGVtZW50O1xuICB9XG5cbiAgZ2V0U3RhdGVtZW50KCkge1xuICAgIHJldHVybiB0aGlzLnN0YXRlbWVudDtcbiAgfVxuXG4gIGdldENvbWJpbmF0b3J5Tm9kZSgpIHtcbiAgICBjb25zdCBub2RlID0gdGhpcy5nZXROb2RlKCksXG4gICAgICAgICAgY29tYmluYXRvck5vZGUgPSBub2RlOyAgLy8vXG5cbiAgICByZXR1cm4gY29tYmluYXRvck5vZGU7XG4gIH1cblxuICB2ZXJpZnkoY29udGV4dCwgY29udGludWF0aW9uKSB7XG4gICAgY29uc3QgY29tYmluYXRvclN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7ICAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFZlcmlmeWluZyB0aGUgJyR7Y29tYmluYXRvclN0cmluZ30nIGNvbWJpbmF0b3IuLi5gKTtcblxuICAgIGF0dGVtcHQoKGNvbnRleHQpID0+IHtcbiAgICAgIHJldHVybiB0aGlzLnZhbGlkYXRlU3RhdGVtZW50KGNvbnRleHQsIChzdGF0ZW1lbnRWYWxpZGF0ZXMsIGNvbnRleHQpID0+IHtcbiAgICAgICAgbGV0IHZlcmlmaWVzID0gZmFsc2U7XG5cbiAgICAgICAgaWYgKHN0YXRlbWVudFZhbGlkYXRlcykge1xuICAgICAgICAgIHZlcmlmaWVzID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh2ZXJpZmllcykge1xuICAgICAgICAgIHRoaXMuY29tbWl0KGNvbnRleHQpO1xuXG4gICAgICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmVyaWZpZWQgdGhlICcke2NvbWJpbmF0b3JTdHJpbmd9JyBjb21iaW5hdG9yLmApO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbih2ZXJpZmllcywgY29udGV4dCk7XG4gICAgICB9KTtcbiAgICB9LCBjb250ZXh0KVxuICB9XG5cbiAgdmFsaWRhdGVTdGF0ZW1lbnQoY29udGV4dCwgY29udGludWF0aW9uKSB7XG4gICAgY29uc3QgY29tYmluYXRvclN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7ICAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke2NvbWJpbmF0b3JTdHJpbmd9JyBjb21iaW5hdG9yJ3Mgc3RhdGVtZW50Li4uYCk7XG5cbiAgICByZXR1cm4gdmFsaWRhdGVTdGF0ZW1lbnRBc0NvbWJpbmF0b3IodGhpcy5zdGF0ZW1lbnQsIGNvbnRleHQsIChzdGF0ZW1lbnRWYWxpZGF0ZXNBc0NvbWJpbmF0b3IsIGNvbnRleHQpID0+IHtcbiAgICAgIGxldCBzdGF0ZW1lbnRWYWxpZGF0ZXMgPSBmYWxzZTtcblxuICAgICAgaWYgKHN0YXRlbWVudFZhbGlkYXRlc0FzQ29tYmluYXRvcikge1xuICAgICAgICBzdGF0ZW1lbnRWYWxpZGF0ZXMgPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAoc3RhdGVtZW50VmFsaWRhdGVzKSB7XG4gICAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlZCB0aGUgJyR7Y29tYmluYXRvclN0cmluZ30nIGNvbWJpbmF0b3IncyBzdGF0ZW1lbnQuYCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjb250aW51YXRpb24oc3RhdGVtZW50VmFsaWRhdGVzLCBjb250ZXh0KTtcbiAgICB9KTtcbiAgfVxuXG4gIHVuaWZ5U3RhdGVtZW50KHN0YXRlbWVudCwgY29udGV4dCwgY29udGludWF0aW9uKSB7XG4gICAgY29uc3Qgc3RhdGVtZW50U3RyaW5nID0gc3RhdGVtZW50LmdldFN0cmluZygpLFxuICAgICAgICAgIGNvbWJpbmF0b3JTdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBVbmlmeWluZyB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IHdpdGggdGhlICcke2NvbWJpbmF0b3JTdHJpbmd9JyBjb21iaW5hdG9yLi4uYCk7XG5cbiAgICBjb25zdCBjb21iaW5hdG9yID0gdGhpcywgLy8vXG4gICAgICAgICAgY29tYmluYXRvckNvbnRleHQgPSBjb21iaW5hdG9yLmdldENvbnRleHQoKSxcbiAgICAgICAgICBnZW5lcmFsQ29udGV4dCA9IGNvbWJpbmF0b3JDb250ZXh0LCAvLy9cbiAgICAgICAgICBzcGVjaWZpQ29udGV4dCA9IGNvbnRleHQ7IC8vL1xuXG4gICAgcmV0dXJuIHVuaWZ5U3RhdGVtZW50V2l0aENvbWJpbmF0b3Ioc3RhdGVtZW50LCBjb21iaW5hdG9yLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaUNvbnRleHQsIChzdGF0ZW1lbnRVbmlmaWVzV2l0aENvbWJpbmF0b3IsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpQ29udGV4dCkgPT4ge1xuICAgICAgY29uc3QgY29udGV4dCA9IHNwZWNpZmlDb250ZXh0OyAvLy9cblxuICAgICAgbGV0IHN0YXRlbWVudFVuaWZpZXMgPSBmYWxzZTtcblxuICAgICAgaWYgKHN0YXRlbWVudFVuaWZpZXNXaXRoQ29tYmluYXRvcikge1xuICAgICAgICBzdGF0ZW1lbnRVbmlmaWVzID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKHN0YXRlbWVudFVuaWZpZXMpIHtcbiAgICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udW5pZmllZCB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IHdpdGggdGhlICcke2NvbWJpbmF0b3JTdHJpbmd9JyBjb21iaW5hdG9yLmApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gY29udGludWF0aW9uKHN0YXRlbWVudFVuaWZpZXMsIGNvbnRleHQpO1xuICAgIH0pO1xuICB9XG5cbiAgdG9KU09OKCkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKTtcblxuICAgIHJldHVybiBzZXJpYWxpc2UoKGNvbnRleHQpID0+IHtcbiAgICAgIGNvbnN0IHN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7XG5cbiAgICAgIGxldCBicmVha1BvaW50O1xuXG4gICAgICBicmVha1BvaW50ID0gdGhpcy5nZXRCcmVha1BvaW50KCk7XG5cbiAgICAgIGNvbnN0IGJyZWFrUG9pbnRKU09OID0gYnJlYWtQb2ludFRvQnJlYWtQb2ludEpTT04oYnJlYWtQb2ludCk7XG5cbiAgICAgIGJyZWFrUG9pbnQgPSBicmVha1BvaW50SlNPTjsgIC8vL1xuXG4gICAgICBjb25zdCBqc29uID0ge1xuICAgICAgICBjb250ZXh0LFxuICAgICAgICBzdHJpbmcsXG4gICAgICAgIGJyZWFrUG9pbnRcbiAgICAgIH07XG5cbiAgICAgIHJldHVybiBqc29uO1xuICAgIH0sIGNvbnRleHQpO1xuICB9XG5cbiAgc3RhdGljIG5hbWUgPSBcIkNvbWJpbmF0b3JcIjtcblxuICBzdGF0aWMgZnJvbUpTT04oanNvbiwgY29udGV4dCkge1xuICAgIGxldCBjb21iaW5hdG9yO1xuXG4gICAgaW5zdGFudGlhdGUoKGNvbnRleHQpID0+IHtcbiAgICAgIHVuc2VyaWFsaXNlKChqc29uLCBjb250ZXh0KSA9PiB7XG4gICAgICAgIGNvbnN0IHsgc3RyaW5nIH0gPSBqc29uLFxuICAgICAgICAgICAgICBjb21iaW5hdG9yTm9kZSA9IGluc3RhbnRpYXRlQ29tYmluYXRvcihzdHJpbmcsIGNvbnRleHQpLFxuICAgICAgICAgICAgICBub2RlID0gY29tYmluYXRvck5vZGUsICAvLy9cbiAgICAgICAgICAgICAgYnJlYWtQb2ludCA9IGJyZWFrUG9pbnRGcm9tSlNPTihqc29uKSxcbiAgICAgICAgICAgICAgc3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbUNvbWJpbmF0b3JOb2RlKGNvbWJpbmF0b3JOb2RlLCBjb250ZXh0KTtcblxuICAgICAgICBjb21iaW5hdG9yID0gbmV3IENvbWJpbmF0b3IoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBzdGF0ZW1lbnQpO1xuICAgICAgfSwganNvbiwgY29udGV4dCk7XG4gICAgfSwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gY29tYmluYXRvcjtcbiAgfVxufSk7XG4iXSwibmFtZXMiOlsiYnJlYWtQb2ludEZyb21KU09OIiwiYnJlYWtQb2ludFRvQnJlYWtQb2ludEpTT04iLCJicmVha1BvaW50VXRpbGl0aWVzIiwiZGVmaW5lIiwiQ29tYmluYXRvciIsIkVsZW1lbnQiLCJjb250ZXh0Iiwic3RyaW5nIiwibm9kZSIsImJyZWFrUG9pbnQiLCJzdGF0ZW1lbnQiLCJnZXRTdGF0ZW1lbnQiLCJnZXRDb21iaW5hdG9yeU5vZGUiLCJnZXROb2RlIiwiY29tYmluYXRvck5vZGUiLCJ2ZXJpZnkiLCJjb250aW51YXRpb24iLCJjb21iaW5hdG9yU3RyaW5nIiwiZ2V0U3RyaW5nIiwidHJhY2UiLCJhdHRlbXB0IiwidmFsaWRhdGVTdGF0ZW1lbnQiLCJzdGF0ZW1lbnRWYWxpZGF0ZXMiLCJ2ZXJpZmllcyIsImNvbW1pdCIsImRlYnVnIiwidmFsaWRhdGVTdGF0ZW1lbnRBc0NvbWJpbmF0b3IiLCJzdGF0ZW1lbnRWYWxpZGF0ZXNBc0NvbWJpbmF0b3IiLCJ1bmlmeVN0YXRlbWVudCIsInN0YXRlbWVudFN0cmluZyIsImNvbWJpbmF0b3IiLCJjb21iaW5hdG9yQ29udGV4dCIsImdldENvbnRleHQiLCJnZW5lcmFsQ29udGV4dCIsInNwZWNpZmlDb250ZXh0IiwidW5pZnlTdGF0ZW1lbnRXaXRoQ29tYmluYXRvciIsInN0YXRlbWVudFVuaWZpZXNXaXRoQ29tYmluYXRvciIsInN0YXRlbWVudFVuaWZpZXMiLCJ0b0pTT04iLCJzZXJpYWxpc2UiLCJnZXRCcmVha1BvaW50IiwiYnJlYWtQb2ludEpTT04iLCJqc29uIiwibmFtZSIsImZyb21KU09OIiwiaW5zdGFudGlhdGUiLCJ1bnNlcmlhbGlzZSIsImluc3RhbnRpYXRlQ29tYmluYXRvciIsInN0YXRlbWVudEZyb21Db21iaW5hdG9yTm9kZSJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7K0JBYUE7OztlQUFBOzs7Z0NBWDZDOzBCQUV0Qjs2QkFDZTt5QkFDTTt1QkFDQzswQkFDQzt5QkFDZTtBQUU3RCxNQUFNLEVBQUVBLGtCQUFrQixFQUFFQywwQkFBMEIsRUFBRSxHQUFHQyxtQ0FBbUI7TUFFOUUsV0FBZUMsSUFBQUEsZ0JBQU0sRUFBQyxNQUFNQyxtQkFBbUJDLHVCQUFPO0lB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
@@ -137,7 +137,8 @@ const _default = (0, _elements.define)(class Constructor extends _occamlanguages
137
137
  return continuation(termUnifies, context);
138
138
  }
139
139
  const constructor = this, constructorContext = constructor.getContext(), generalContext = constructorContext, specifiContext = context; ///
140
- return (0, _unify.unifyTermWithConstructor)(term, constructor, generalContext, specifiContext, (termUnifiesWithConstructor, context)=>{
140
+ return (0, _unify.unifyTermWithConstructor)(term, constructor, generalContext, specifiContext, (termUnifiesWithConstructor, generalContext, specifiContext)=>{
141
+ const context = specifiContext; ///
141
142
  if (!termUnifiesWithConstructor) {
142
143
  const termUnifies = false;
143
144
  return continuation(termUnifies, context);
@@ -206,4 +207,4 @@ const _default = (0, _elements.define)(class Constructor extends _occamlanguages
206
207
  }
207
208
  });
208
209
 
209
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9lbGVtZW50L2NvbnN0cnVjdG9yLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBFbGVtZW50LCBicmVha1BvaW50VXRpbGl0aWVzIH0gZnJvbSBcIm9jY2FtLWxhbmd1YWdlc1wiO1xuXG5pbXBvcnQgeyBkZWZpbmUgfSBmcm9tIFwiLi4vZWxlbWVudHNcIjtcbmltcG9ydCB7IGV2ZXJ5LCBleGlzdHMgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2NvbnRpbnVhdGlvblwiO1xuaW1wb3J0IHsgYmFzZVR5cGVGcm9tTm90aGluZyB9IGZyb20gXCIuLi91dGlsaXRpZXMvdHlwZVwiO1xuaW1wb3J0IHsgaW5zdGFudGlhdGVDb25zdHJ1Y3RvciB9IGZyb20gXCIuLi9wcm9jZXNzL2luc3RhbnRpYXRlXCI7XG5pbXBvcnQgeyB2YWxpZGF0ZVRlcm1Bc1ZhcmlhYmxlIH0gZnJvbSBcIi4uL3Byb2Nlc3MvdmFsaWRhdGlvblwiO1xuaW1wb3J0IHsgdGVybUZyb21Db25zdHJ1Y3Rvck5vZGUgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2VsZW1lbnRcIjtcbmltcG9ydCB7IHVuaWZ5VGVybVdpdGhDb25zdHJ1Y3RvciB9IGZyb20gXCIuLi9wcm9jZXNzL3VuaWZ5XCI7XG5pbXBvcnQgeyB2YWxpZGF0ZVRlcm1Bc0NvbnN0cnVjdG9yIH0gZnJvbSBcIi4uL3Byb2Nlc3MvdmFsaWRhdGVcIjtcbmltcG9ydCB7IGF0dGVtcHQsIHNlcmlhbGlzZSwgdW5zZXJpYWxpc2UsIGluc3RhbnRpYXRlIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9jb250ZXh0XCI7XG5pbXBvcnQgeyB0eXBlRnJvbUpTT04sIHR5cGVUb1R5cGVKU09OLCBoeXBvdGhlc2VzRnJvbUpTT04sIGh5cG90aGVzZXNUb0h5cG90aGVzZXNKU09OIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9qc29uXCI7XG5cbmNvbnN0IHsgYnJlYWtQb2ludEZyb21KU09OLCBicmVha1BvaW50VG9CcmVha1BvaW50SlNPTiB9ID0gYnJlYWtQb2ludFV0aWxpdGllcztcblxuZXhwb3J0IGRlZmF1bHQgZGVmaW5lKGNsYXNzIENvbnN0cnVjdG9yIGV4dGVuZHMgRWxlbWVudCB7XG4gIGNvbnN0cnVjdG9yKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgdGVybSwgdHlwZSwgaHlwb3RoZXNlcykge1xuICAgIHN1cGVyKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCk7XG5cbiAgICB0aGlzLnRlcm0gPSB0ZXJtO1xuICAgIHRoaXMudHlwZSA9IHR5cGU7XG4gICAgdGhpcy5oeXBvdGhlc2VzID0gaHlwb3RoZXNlcztcbiAgfVxuXG4gIGdldFRlcm0oKSB7XG4gICAgcmV0dXJuIHRoaXMudGVybTtcbiAgfVxuXG4gIGdldFR5cGUoKSB7XG4gICAgcmV0dXJuIHRoaXMudHlwZTtcbiAgfVxuXG4gIGdldEh5cG90aGVzZXMoKSB7XG4gICAgcmV0dXJuIHRoaXMuaHlwb3RoZXNlcztcbiAgfVxuXG4gIHNldEh5cG90aGVzZXMoaHlwb3RoZXNlcykge1xuICAgIHRoaXMuaHlwb3RoZXNlcyA9IGh5cG90aGVzZXM7XG4gIH1cblxuICBpc0h5cG90aGV0aWNhbCgpIHtcbiAgICBjb25zdCBoeXBvdGhlc2VzTGVuZ3RoID0gdGhpcy5oeXBvdGhlc2VzLmxlbmd0aCxcbiAgICAgICAgICBoeXBvdGhldGljYWwgPSAoaHlwb3RoZXNlc0xlbmd0aCA+IDApO1xuXG4gICAgcmV0dXJuIGh5cG90aGV0aWNhbDtcbiAgfVxuXG4gIGdldENvbnN0cnVjdG9yTm9kZSgpIHtcbiAgICBjb25zdCBub2RlID0gdGhpcy5nZXROb2RlKCksXG4gICAgICAgICAgY29uc3RydWN0b3JOb2RlID0gbm9kZTsgIC8vL1xuXG4gICAgcmV0dXJuIGNvbnN0cnVjdG9yTm9kZTtcbiAgfVxuXG4gIGdldFN0cmluZyhpbmNsdWRlVHlwZSA9IHRydWUpIHtcbiAgICBsZXQgc3RyaW5nO1xuXG4gICAgaWYgKGluY2x1ZGVUeXBlKSB7XG4gICAgICBjb25zdCB0ZXJtU3RyaW5nID0gdGhpcy50ZXJtLmdldFN0cmluZygpLFxuICAgICAgICAgICAgdHlwZVN0cmluZyA9IHRoaXMudHlwZS5nZXRTdHJpbmcoKTtcblxuICAgICAgc3RyaW5nID0gYCR7dGVybVN0cmluZ30uJHt0eXBlU3RyaW5nfWA7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0cmluZyA9IHN1cGVyLmdldFN0cmluZygpO1xuICAgIH1cblxuICAgIHJldHVybiBzdHJpbmc7XG4gIH1cblxuICBzZXRUeXBlKHR5cGUpIHtcbiAgICB0aGlzLnR5cGUgPSB0eXBlO1xuICB9XG5cbiAgdmVyaWZ5KGNvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICAgIGxldCB2ZXJpZmllcyA9IGZhbHNlO1xuXG4gICAgY29uc3QgaW5jbHVkZVR5cGUgPSBmYWxzZSxcbiAgICAgICAgICBjb25zdHJ1Y3RvclN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKGluY2x1ZGVUeXBlKTtcblxuICAgIGNvbnRleHQudHJhY2UoYFZlcmlmeWluZyB0aGUgJyR7Y29uc3RydWN0b3JTdHJpbmd9JyBjb25zdHJ1Y3Rvci4uLmApO1xuXG4gICAgYXR0ZW1wdCgoY29udGV4dCkgPT4ge1xuICAgICAgdGhpcy52YWxpZGF0ZVRlcm0oY29udGV4dCwgKHRlcm1WYWxpZGF0ZXMsIGNvbnRleHQpID0+IHtcbiAgICAgICAgaWYgKHRlcm1WYWxpZGF0ZXMpIHtcbiAgICAgICAgICB2ZXJpZmllcyA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodmVyaWZpZXMpIHtcbiAgICAgICAgICB0aGlzLmNvbW1pdChjb250ZXh0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh2ZXJpZmllcykge1xuICAgICAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZlcmlmaWVkIHRoZSAnJHtjb25zdHJ1Y3RvclN0cmluZ30nIGNvbnN0cnVjdG9yLmApO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbih2ZXJpZmllcyk7XG4gICAgICB9KTtcbiAgICB9LCBjb250ZXh0KTtcbiAgfVxuXG4gIHZhbGlkYXRlVGVybShjb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgICBjb25zdCBpbmNsdWRlVHlwZSA9IGZhbHNlLFxuICAgICAgICAgIGNvbnN0cnVjdG9yU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoaW5jbHVkZVR5cGUpO1xuXG4gICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7Y29uc3RydWN0b3JTdHJpbmd9JyBjb25zdHJ1Y3RvcidzIHRlcm0uLi5gKTtcblxuICAgIGNvbnN0IHZhbGlkYXRlVGVybUFzVmFyaWFibGUgPSB0aGlzLnZhbGlkYXRlVGVybUFzVmFyaWFibGUuYmluZCh0aGlzKSxcbiAgICAgICAgICB2YWxpZGF0ZVRlcm1Bc0NvbnN0cnVjdG9yID0gdGhpcy52YWxpZGF0ZVRlcm1Bc0NvbnN0cnVjdG9yLmJpbmQodGhpcyk7XG5cbiAgICByZXR1cm4gZXhpc3RzKFtcbiAgICAgIHZhbGlkYXRlVGVybUFzVmFyaWFibGUsXG4gICAgICB2YWxpZGF0ZVRlcm1Bc0NvbnN0cnVjdG9yXG4gICAgXSwgY29udGV4dCwgKHRlcm1WYWxpZGF0ZXMsIGNvbnRleHQpID0+IHtcbiAgICAgIGlmICh0ZXJtVmFsaWRhdGVzKSB7XG4gICAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlZCB0aGUgJyR7Y29uc3RydWN0b3JTdHJpbmd9JyBjb25zdHJ1Y3RvcidzIHRlcm0uYCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjb250aW51YXRpb24odGVybVZhbGlkYXRlcywgY29udGV4dCk7XG4gICAgfSk7XG4gIH1cblxuICB2YWxpZGF0ZVRlcm1Bc1ZhcmlhYmxlKGNvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICAgIGNvbnN0IGh5cG90aHRpY2FsID0gdGhpcy5pc0h5cG90aGV0aWNhbCgpO1xuXG4gICAgaWYgKCFoeXBvdGh0aWNhbCkge1xuICAgICAgY29uc3QgdGVybVZhbGlkYXRlc0FzVmFyaWFibGUgPSBmYWxzZTtcblxuICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbih0ZXJtVmFsaWRhdGVzQXNWYXJpYWJsZSwgY29udGV4dCk7XG4gICAgfVxuXG4gICAgY29uc3QgaW5jbHVkZVR5cGUgPSBmYWxzZSxcbiAgICAgICAgICBjb25zdHJ1Y3RvclN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKGluY2x1ZGVUeXBlKTtcblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke2NvbnN0cnVjdG9yU3RyaW5nfScgY29uc3RydWN0b3IncyB0ZXJtLi4uYCk7XG5cbiAgICByZXR1cm4gdmFsaWRhdGVUZXJtQXNWYXJpYWJsZSh0aGlzLnRlcm0sIGNvbnRleHQsICh0ZXJtLCBjb250ZXh0KSA9PiB7XG4gICAgICBsZXQgdGVybVZhbGlkYXRlc0FzVmFyaWFibGUgPSBmYWxzZTtcblxuICAgICAgY29uc3QgdHlwZSA9IHRlcm0uZ2V0VHlwZSgpLFxuICAgICAgICAgICAgYmFzZVR5cGUgPSBiYXNlVHlwZUZyb21Ob3RoaW5nKCk7XG5cbiAgICAgIGlmICh0eXBlID09PSBiYXNlVHlwZSkge1xuICAgICAgICB0ZXJtVmFsaWRhdGVzQXNWYXJpYWJsZSA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIGlmICh0ZXJtVmFsaWRhdGVzQXNWYXJpYWJsZSkge1xuICAgICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke2NvbnN0cnVjdG9yU3RyaW5nfScgY29uc3RydWN0b3IncyB0ZXJtLmApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gY29udGludWF0aW9uKHRlcm1WYWxpZGF0ZXNBc1ZhcmlhYmxlLCBjb250ZXh0KTtcbiAgICB9KTtcbiAgfVxuXG4gIHZhbGlkYXRlVGVybUFzQ29uc3RydWN0b3IoY29udGV4dCwgY29udGludWF0aW9uKSB7XG4gICAgY29uc3QgaHlwb3RodGljYWwgPSB0aGlzLmlzSHlwb3RoZXRpY2FsKCk7XG5cbiAgICBpZiAoaHlwb3RodGljYWwpIHtcbiAgICAgIGNvbnN0IHRlcm1WYWxpZGF0ZXNBc0NvbnN0cnVjdG9yID0gZmFsc2U7XG5cbiAgICAgIHJldHVybiBjb250aW51YXRpb24odGVybVZhbGlkYXRlc0FzQ29uc3RydWN0b3IsIGNvbnRleHQpO1xuICAgIH1cblxuICAgIGNvbnN0IGluY2x1ZGVUeXBlID0gZmFsc2UsXG4gICAgICAgICAgY29uc3RydWN0b3JTdHJpbmcgPSB0aGlzLmdldFN0cmluZyhpbmNsdWRlVHlwZSk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0aW5nIHRoZSAnJHtjb25zdHJ1Y3RvclN0cmluZ30nIGNvbnN0cnVjdG9yJ3MgdGVybS4uLmApO1xuXG4gICAgcmV0dXJuIHZhbGlkYXRlVGVybUFzQ29uc3RydWN0b3IodGhpcy50ZXJtLCBjb250ZXh0LCAodGVybVZhbGlkYXRlc0FzQ29uc3RydWN0b3IpID0+IHtcbiAgICAgIGlmICh0ZXJtVmFsaWRhdGVzQXNDb25zdHJ1Y3Rvcikge1xuICAgICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke2NvbnN0cnVjdG9yU3RyaW5nfScgY29uc3RydWN0b3IncyB0ZXJtLmApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gY29udGludWF0aW9uKHRlcm1WYWxpZGF0ZXNBc0NvbnN0cnVjdG9yLCBjb250ZXh0KTtcbiAgICB9KTtcbiAgfVxuXG4gIHVuaWZ5VGVybSh0ZXJtLCBjb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgICBjb25zdCB0ZXJtU3RyaW5nID0gdGVybS5nZXRTdHJpbmcoKSxcbiAgICAgICAgICBpbmNsdWRlVHlwZSA9IHRydWUsXG4gICAgICAgICAgY29uc3RydWN0b3JTdHJpbmcgPSB0aGlzLmdldFN0cmluZyhpbmNsdWRlVHlwZSk7ICAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFVuaWZ5aW5nIHRoZSAnJHt0ZXJtU3RyaW5nfScgdGVybSB3aXRoIHRoZSAnJHtjb25zdHJ1Y3RvclN0cmluZ30nIGNvbnN0cnVjdG9yLi4uYCk7XG5cbiAgICByZXR1cm4gdGhpcy5kaXNjaGFyZ2VIeXBvdGhlc2VzR2l2ZW5UZXJtKHRlcm0sIGNvbnRleHQsIChoeXBvdGhlc2VzRGlzY2FyZGVkR2l2ZW5UZXJtLCBjb250ZXh0KSA9PiB7XG4gICAgICBpZiAoIWh5cG90aGVzZXNEaXNjYXJkZWRHaXZlblRlcm0pIHtcbiAgICAgICAgY29uc3QgdGVybVVuaWZpZXMgPSBmYWxzZTtcblxuICAgICAgICByZXR1cm4gY29udGludWF0aW9uKHRlcm1VbmlmaWVzLCBjb250ZXh0KTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgY29uc3RydWN0b3IgPSB0aGlzLCAvLy9cbiAgICAgICAgICAgIGNvbnN0cnVjdG9yQ29udGV4dCA9IGNvbnN0cnVjdG9yLmdldENvbnRleHQoKSxcbiAgICAgICAgICAgIGdlbmVyYWxDb250ZXh0ID0gY29uc3RydWN0b3JDb250ZXh0LCAgLy8vXG4gICAgICAgICAgICBzcGVjaWZpQ29udGV4dCA9IGNvbnRleHQ7IC8vL1xuXG4gICAgICByZXR1cm4gdW5pZnlUZXJtV2l0aENvbnN0cnVjdG9yKHRlcm0sIGNvbnN0cnVjdG9yLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaUNvbnRleHQsICh0ZXJtVW5pZmllc1dpdGhDb25zdHJ1Y3RvciwgY29udGV4dCkgPT4ge1xuICAgICAgICBpZiAoIXRlcm1VbmlmaWVzV2l0aENvbnN0cnVjdG9yKSB7XG4gICAgICAgICAgY29uc3QgdGVybVVuaWZpZXMgPSBmYWxzZTtcblxuICAgICAgICAgIHJldHVybiBjb250aW51YXRpb24odGVybVVuaWZpZXMsIGNvbnRleHQpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHRlcm1VbmlmaWVzO1xuXG4gICAgICAgIGNvbnN0IHByb3Zpc2lvbmFsID0gdGhpcy50eXBlLmlzUHJvdmlzaW9uYWwoKTtcblxuICAgICAgICB0ZXJtLnNldFR5cGUodGhpcy50eXBlKTtcblxuICAgICAgICB0ZXJtLnNldFByb3Zpc2lvbmFsKHByb3Zpc2lvbmFsKTtcblxuICAgICAgICB0ZXJtVW5pZmllcyA9IHRydWU7XG5cbiAgICAgICAgaWYgKHRlcm1VbmlmaWVzKSB7XG4gICAgICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udW5pZmllZCB0aGUgJyR7dGVybVN0cmluZ30nIHRlcm0gd2l0aCB0aGUgJyR7Y29uc3RydWN0b3JTdHJpbmd9JyBjb25zdHJ1Y3Rvci5gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBjb250aW51YXRpb24odGVybVVuaWZpZXMsIGNvbnRleHQpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBkaXNjaGFyZ2VIeXBvdGhlc2lzR2l2ZW5UZXJtKGh5cG90aGVzaXMsIHRlcm0sIGNvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICAgIGxldCBoeXBvdGhlc2lzRGlzY2hhcmdlc0dpdmVuVGVybTtcblxuICAgIGRlYnVnZ2VyXG5cbiAgICBjb25zdCB0ZXJtU3RyaW5nID0gdGVybS5nZXRTdHJpbmcoKSxcbiAgICAgICAgICBoeXBvdGhlc2lzU3RyaW5nID0gaHlwb3RoZXNpcy5nZXRTdHJpbmcoKSxcbiAgICAgICAgICBjb25zdHJ1Y3RvclN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7IC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgRGlzY2hhcmRpbmcgdGhlICcke2NvbnN0cnVjdG9yU3RyaW5nfScgY29uc3RydWN0b3IncyAnJHtoeXBvdGhlc2lzU3RyaW5nfScgaHlwb3RoZXNpcyBnaXZlbiB0aGUgJyR7dGVybVN0cmluZ30nIHRlcm0uLi5gKTtcblxuICAgIGh5cG90aGVzaXNEaXNjaGFyZ2VzR2l2ZW5UZXJtID0gaHlwb3RoZXNpcy5kaXNjaGFyZ2VHaXZlblRlcm0odGVybSwgY29udGV4dCk7XG5cbiAgICBpZiAoaHlwb3RoZXNpc0Rpc2NoYXJnZXNHaXZlblRlcm0pIHtcbiAgICAgIGNvbnRleHQudHJhY2UoYC4uLmRpc2NoYXJnZXMgdGhlICcke2NvbnN0cnVjdG9yU3RyaW5nfScgY29uc3RydWN0b3IncyAnJHtoeXBvdGhlc2lzU3RyaW5nfScgaHlwb3RoZXNpcyBnaXZlbiB0aGUgJyR7dGVybVN0cmluZ30nIHRlcm0uYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGh5cG90aGVzaXNEaXNjaGFyZ2VzR2l2ZW5UZXJtO1xuICB9XG5cbiAgZGlzY2hhcmdlSHlwb3RoZXNlc0dpdmVuVGVybSh0ZXJtLCBjb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgICBjb25zdCBoeXBvdGhldGljYWwgPSB0aGlzLmlzSHlwb3RoZXRpY2FsKCk7XG5cbiAgICBpZiAoIWh5cG90aGV0aWNhbCkge1xuICAgICAgY29uc3QgaHlwb3RoZXNlc0Rpc2NoYXJnZXNHaXZlblRlcm0gPSB0cnVlOyAgLy8vXG5cbiAgICAgIHJldHVybiBjb250aW51YXRpb24oaHlwb3RoZXNlc0Rpc2NoYXJnZXNHaXZlblRlcm0sIGNvbnRleHQpO1xuICAgIH1cblxuICAgIHJldHVybiBldmVyeSh0aGlzLmh5cG90aGVzZXMsIGNvbnRleHQsIChoeXBvdGhlc2lzLCBjb250aW51YXRpb24pID0+IHtcbiAgICAgIHRoaXMuZGlzY2hhcmdlSHlwb3RoZXNpc0dpdmVuVGVybShoeXBvdGhlc2lzLCB0ZXJtLCBjb250ZXh0LCBjb250aW51YXRpb24pO1xuICAgIH0sIGNvbnRpbnVhdGlvbik7XG4gIH1cblxuICB0b0pTT04oKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpO1xuXG4gICAgcmV0dXJuIHNlcmlhbGlzZSgoY29udGV4dCkgPT4ge1xuICAgICAgY29uc3QgaW5jbHVkZVR5cGUgPSBmYWxzZSxcbiAgICAgICAgICAgIHR5cGVKU09OID0gdHlwZVRvVHlwZUpTT04odGhpcy50eXBlKSxcbiAgICAgICAgICAgIGh5cG90aGVzZXNKU09OID0gaHlwb3RoZXNlc1RvSHlwb3RoZXNlc0pTT04odGhpcy5oeXBvdGhlc2VzKSxcbiAgICAgICAgICAgIHN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKGluY2x1ZGVUeXBlKTtcblxuICAgICAgbGV0IGJyZWFrUG9pbnQ7XG5cbiAgICAgIGJyZWFrUG9pbnQgPSB0aGlzLmdldEJyZWFrUG9pbnQoKTtcblxuICAgICAgY29uc3QgYnJlYWtQb2ludEpTT04gPSBicmVha1BvaW50VG9CcmVha1BvaW50SlNPTihicmVha1BvaW50KTtcblxuICAgICAgYnJlYWtQb2ludCA9IGJyZWFrUG9pbnRKU09OOyAgLy8vXG5cbiAgICAgIGNvbnN0IHR5cGUgPSB0eXBlSlNPTiwgIC8vL1xuICAgICAgICAgICAgaHlwb3RoZXNlcyA9IGh5cG90aGVzZXNKU09OLCAgLy8vXG4gICAgICAgICAgICBqc29uID0ge1xuICAgICAgICAgICAgICBjb250ZXh0LFxuICAgICAgICAgICAgICBzdHJpbmcsXG4gICAgICAgICAgICAgIGJyZWFrUG9pbnQsXG4gICAgICAgICAgICAgIHR5cGUsXG4gICAgICAgICAgICAgIGh5cG90aGVzZXNcbiAgICAgICAgICAgIH07XG5cbiAgICAgIHJldHVybiBqc29uO1xuICAgIH0sIGNvbnRleHQpO1xuICB9XG5cbiAgc3RhdGljIG5hbWUgPSBcIkNvbnN0cnVjdG9yXCI7XG5cbiAgc3RhdGljIGZyb21KU09OKGpzb24sIGNvbnRleHQpIHtcbiAgICBsZXQgY29uc3RydWN0b3I7XG5cbiAgICBpbnN0YW50aWF0ZSgoY29udGV4dCkgPT4ge1xuICAgICAgdW5zZXJpYWxpc2UoKGpzb24sIGNvbnRleHQpID0+IHtcbiAgICAgICAgY29uc3QgeyBzdHJpbmcgfSA9IGpzb24sXG4gICAgICAgICAgICAgIGNvbnN0cnVjdG9yTm9kZSA9IGluc3RhbnRpYXRlQ29uc3RydWN0b3Ioc3RyaW5nLCBjb250ZXh0KSxcbiAgICAgICAgICAgICAgbm9kZSA9IGNvbnN0cnVjdG9yTm9kZSwgLy8vXG4gICAgICAgICAgICAgIGJyZWFrUG9pbnQgPSBicmVha1BvaW50RnJvbUpTT04oanNvbiksXG4gICAgICAgICAgICAgIHRlcm0gPSB0ZXJtRnJvbUNvbnN0cnVjdG9yTm9kZShjb25zdHJ1Y3Rvck5vZGUsIGNvbnRleHQpLFxuICAgICAgICAgICAgICB0eXBlID0gdHlwZUZyb21KU09OKGpzb24sIGNvbnRleHQpLFxuICAgICAgICAgICAgICBoeXBvdGhlc2VzID0gaHlwb3RoZXNlc0Zyb21KU09OKGpzb24sIGNvbnRleHQpO1xuXG4gICAgICAgIGNvbnN0cnVjdG9yID0gbmV3IENvbnN0cnVjdG9yKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgdGVybSwgdHlwZSwgaHlwb3RoZXNlcyk7XG4gICAgICB9LCBqc29uLCBjb250ZXh0KTtcbiAgICB9LCBjb250ZXh0KTtcblxuICAgIHJldHVybiBjb25zdHJ1Y3RvcjtcbiAgfVxufSk7XG4iXSwibmFtZXMiOlsiYnJlYWtQb2ludEZyb21KU09OIiwiYnJlYWtQb2ludFRvQnJlYWtQb2ludEpTT04iLCJicmVha1BvaW50VXRpbGl0aWVzIiwiZGVmaW5lIiwiQ29uc3RydWN0b3IiLCJFbGVtZW50IiwiY29udGV4dCIsInN0cmluZyIsIm5vZGUiLCJicmVha1BvaW50IiwidGVybSIsInR5cGUiLCJoeXBvdGhlc2VzIiwiZ2V0VGVybSIsImdldFR5cGUiLCJnZXRIeXBvdGhlc2VzIiwic2V0SHlwb3RoZXNlcyIsImlzSHlwb3RoZXRpY2FsIiwiaHlwb3RoZXNlc0xlbmd0aCIsImxlbmd0aCIsImh5cG90aGV0aWNhbCIsImdldENvbnN0cnVjdG9yTm9kZSIsImdldE5vZGUiLCJjb25zdHJ1Y3Rvck5vZGUiLCJnZXRTdHJpbmciLCJpbmNsdWRlVHlwZSIsInRlcm1TdHJpbmciLCJ0eXBlU3RyaW5nIiwic2V0VHlwZSIsInZlcmlmeSIsImNvbnRpbnVhdGlvbiIsInZlcmlmaWVzIiwiY29uc3RydWN0b3JTdHJpbmciLCJ0cmFjZSIsImF0dGVtcHQiLCJ2YWxpZGF0ZVRlcm0iLCJ0ZXJtVmFsaWRhdGVzIiwiY29tbWl0IiwiZGVidWciLCJ2YWxpZGF0ZVRlcm1Bc1ZhcmlhYmxlIiwiYmluZCIsInZhbGlkYXRlVGVybUFzQ29uc3RydWN0b3IiLCJleGlzdHMiLCJoeXBvdGh0aWNhbCIsInRlcm1WYWxpZGF0ZXNBc1ZhcmlhYmxlIiwiYmFzZVR5cGUiLCJiYXNlVHlwZUZyb21Ob3RoaW5nIiwidGVybVZhbGlkYXRlc0FzQ29uc3RydWN0b3IiLCJ1bmlmeVRlcm0iLCJkaXNjaGFyZ2VIeXBvdGhlc2VzR2l2ZW5UZXJtIiwiaHlwb3RoZXNlc0Rpc2NhcmRlZEdpdmVuVGVybSIsInRlcm1VbmlmaWVzIiwiY29uc3RydWN0b3IiLCJjb25zdHJ1Y3RvckNvbnRleHQiLCJnZXRDb250ZXh0IiwiZ2VuZXJhbENvbnRleHQiLCJzcGVjaWZpQ29udGV4dCIsInVuaWZ5VGVybVdpdGhDb25zdHJ1Y3RvciIsInRlcm1VbmlmaWVzV2l0aENvbnN0cnVjdG9yIiwicHJvdmlzaW9uYWwiLCJpc1Byb3Zpc2lvbmFsIiwic2V0UHJvdmlzaW9uYWwiLCJkaXNjaGFyZ2VIeXBvdGhlc2lzR2l2ZW5UZXJtIiwiaHlwb3RoZXNpcyIsImh5cG90aGVzaXNEaXNjaGFyZ2VzR2l2ZW5UZXJtIiwiaHlwb3RoZXNpc1N0cmluZyIsImRpc2NoYXJnZUdpdmVuVGVybSIsImh5cG90aGVzZXNEaXNjaGFyZ2VzR2l2ZW5UZXJtIiwiZXZlcnkiLCJ0b0pTT04iLCJzZXJpYWxpc2UiLCJ0eXBlSlNPTiIsInR5cGVUb1R5cGVKU09OIiwiaHlwb3RoZXNlc0pTT04iLCJoeXBvdGhlc2VzVG9IeXBvdGhlc2VzSlNPTiIsImdldEJyZWFrUG9pbnQiLCJicmVha1BvaW50SlNPTiIsImpzb24iLCJuYW1lIiwiZnJvbUpTT04iLCJpbnN0YW50aWF0ZSIsInVuc2VyaWFsaXNlIiwiaW5zdGFudGlhdGVDb25zdHJ1Y3RvciIsInRlcm1Gcm9tQ29uc3RydWN0b3JOb2RlIiwidHlwZUZyb21KU09OIiwiaHlwb3RoZXNlc0Zyb21KU09OIl0sIm1hcHBpbmdzIjoiQUFBQTs7OzsrQkFpQkE7OztlQUFBOzs7Z0NBZjZDOzBCQUV0Qjs4QkFDTztzQkFDTTs2QkFDRzs0QkFDQTt5QkFDQzt1QkFDQzswQkFDQzt5QkFDbUI7c0JBQ2dDO0FBRTdGLE1BQU0sRUFBRUEsa0JBQWtCLEVBQUVDLDBCQUEwQixFQUFFLEdBQUdDLG1DQUFtQjtNQUU5RSxXQUFlQyxJQUFBQSxnQkFBTSxFQUFDLE1BQU1DLG9CQUFvQkMsdUJBQU87SUFDckQsWUFBWUMsT0FBTyxFQUFFQyxNQUFNLEVBQUVDLElBQUksRUFBRUMsVUFBVSxFQUFFQyxJQUFJLEVBQUVDLElBQUksRUFBRUMsVUFBVSxDQUFFO1FBQ3JFLEtBQUssQ0FBQ04sU0FBU0MsUUFBUUMsTUFBTUM7UUFFN0IsSUFBSSxDQUFDQyxJQUFJLEdBQUdBO1FBQ1osSUFBSSxDQUFDQyxJQUFJLEdBQUdBO1FBQ1osSUFBSSxDQUFDQyxVQUFVLEdBQUdBO0lBQ3BCO0lBRUFDLFVBQVU7UUFDUixPQUFPLElBQUksQ0FBQ0gsSUFBSTtJQUNsQjtJQUVBSSxVQUFVO1FBQ1IsT0FBTyxJQUFJLENBQUNILElBQUk7SUFDbEI7SUFFQUksZ0JBQWdCO1FBQ2QsT0FBTyxJQUFJLENBQUNILFVBQVU7SUFDeEI7SUFFQUksY0FBY0osVUFBVSxFQUFFO1FBQ3hCLElBQUksQ0FBQ0EsVUFBVSxHQUFHQTtJQUNwQjtJQUVBSyxpQkFBaUI7UUFDZixNQUFNQyxtQkFBbUIsSUFBSSxDQUFDTixVQUFVLENBQUNPLE1BQU0sRUFDekNDLGVBQWdCRixtQkFBbUI7UUFFekMsT0FBT0U7SUFDVDtJQUVBQyxxQkFBcUI7UUFDbkIsTUFBTWIsT0FBTyxJQUFJLENBQUNjLE9BQU8sSUFDbkJDLGtCQUFrQmYsTUFBTyxHQUFHO1FBRWxDLE9BQU9lO0lBQ1Q7SUFFQUMsVUFBVUMsY0FBYyxJQUFJLEVBQUU7UUFDNUIsSUFBSWxCO1FBRUosSUFBSWtCLGFBQWE7WUFDZixNQUFNQyxhQUFhLElBQUksQ0FBQ2hCLElBQUksQ0FBQ2MsU0FBUyxJQUNoQ0csYUFBYSxJQUFJLENBQUNoQixJQUFJLENBQUNhLFNBQVM7WUFFdENqQixTQUFTLEdBQUdtQixXQUFXLENBQUMsRUFBRUMsWUFBWTtRQUN4QyxPQUFPO1lBQ0xwQixTQUFTLEtBQUssQ0FBQ2lCO1FBQ2pCO1FBRUEsT0FBT2pCO0lBQ1Q7SUFFQXFCLFFBQVFqQixJQUFJLEVBQUU7UUFDWixJQUFJLENBQUNBLElBQUksR0FBR0E7SUFDZDtJQUVBa0IsT0FBT3ZCLE9BQU8sRUFBRXdCLFlBQVksRUFBRTtRQUM1QixJQUFJQyxXQUFXO1FBRWYsTUFBTU4sY0FBYyxPQUNkTyxvQkFBb0IsSUFBSSxDQUFDUixTQUFTLENBQUNDO1FBRXpDbkIsUUFBUTJCLEtBQUssQ0FBQyxDQUFDLGVBQWUsRUFBRUQsa0JBQWtCLGdCQUFnQixDQUFDO1FBRW5FRSxJQUFBQSxnQkFBTyxFQUFDLENBQUM1QjtZQUNQLElBQUksQ0FBQzZCLFlBQVksQ0FBQzdCLFNBQVMsQ0FBQzhCLGVBQWU5QjtnQkFDekMsSUFBSThCLGVBQWU7b0JBQ2pCTCxXQUFXO2dCQUNiO2dCQUVBLElBQUlBLFVBQVU7b0JBQ1osSUFBSSxDQUFDTSxNQUFNLENBQUMvQjtnQkFDZDtnQkFFQSxJQUFJeUIsVUFBVTtvQkFDWnpCLFFBQVFnQyxLQUFLLENBQUMsQ0FBQyxpQkFBaUIsRUFBRU4sa0JBQWtCLGNBQWMsQ0FBQztnQkFDckU7Z0JBRUEsT0FBT0YsYUFBYUM7WUFDdEI7UUFDRixHQUFHekI7SUFDTDtJQUVBNkIsYUFBYTdCLE9BQU8sRUFBRXdCLFlBQVksRUFBRTtRQUNsQyxNQUFNTCxjQUFjLE9BQ2RPLG9CQUFvQixJQUFJLENBQUNSLFNBQVMsQ0FBQ0M7UUFFekNuQixRQUFRMkIsS0FBSyxDQUFDLENBQUMsZ0JBQWdCLEVBQUVELGtCQUFrQix1QkFBdUIsQ0FBQztRQUUzRSxNQUFNTyx5QkFBeUIsSUFBSSxDQUFDQSxzQkFBc0IsQ0FBQ0MsSUFBSSxDQUFDLElBQUksR0FDOURDLDRCQUE0QixJQUFJLENBQUNBLHlCQUF5QixDQUFDRCxJQUFJLENBQUMsSUFBSTtRQUUxRSxPQUFPRSxJQUFBQSxvQkFBTSxFQUFDO1lBQ1pIO1lBQ0FFO1NBQ0QsRUFBRW5DLFNBQVMsQ0FBQzhCLGVBQWU5QjtZQUMxQixJQUFJOEIsZUFBZTtnQkFDakI5QixRQUFRZ0MsS0FBSyxDQUFDLENBQUMsa0JBQWtCLEVBQUVOLGtCQUFrQixxQkFBcUIsQ0FBQztZQUM3RTtZQUVBLE9BQU9GLGFBQWFNLGVBQWU5QjtRQUNyQztJQUNGO0lBRUFpQyx1QkFBdUJqQyxPQUFPLEVBQUV3QixZQUFZLEVBQUU7UUFDNUMsTUFBTWEsY0FBYyxJQUFJLENBQUMxQixjQUFjO1FBRXZDLElBQUksQ0FBQzBCLGFBQWE7WUFDaEIsTUFBTUMsMEJBQTBCO1lBRWhDLE9BQU9kLGFBQWFjLHlCQUF5QnRDO1FBQy9DO1FBRUEsTUFBTW1CLGNBQWMsT0FDZE8sb0JBQW9CLElBQUksQ0FBQ1IsU0FBUyxDQUFDQztRQUV6Q25CLFFBQVEyQixLQUFLLENBQUMsQ0FBQyxnQkFBZ0IsRUFBRUQsa0JBQWtCLHVCQUF1QixDQUFDO1FBRTNFLE9BQU9PLElBQUFBLGtDQUFzQixFQUFDLElBQUksQ0FBQzdCLElBQUksRUFBRUosU0FBUyxDQUFDSSxNQUFNSjtZQUN2RCxJQUFJc0MsMEJBQTBCO1lBRTlCLE1BQU1qQyxPQUFPRCxLQUFLSSxPQUFPLElBQ25CK0IsV0FBV0MsSUFBQUEseUJBQW1CO1lBRXBDLElBQUluQyxTQUFTa0MsVUFBVTtnQkFDckJELDBCQUEwQjtZQUM1QjtZQUVBLElBQUlBLHlCQUF5QjtnQkFDM0J0QyxRQUFRZ0MsS0FBSyxDQUFDLENBQUMsa0JBQWtCLEVBQUVOLGtCQUFrQixxQkFBcUIsQ0FBQztZQUM3RTtZQUVBLE9BQU9GLGFBQWFjLHlCQUF5QnRDO1FBQy9DO0lBQ0Y7SUFFQW1DLDBCQUEwQm5DLE9BQU8sRUFBRXdCLFlBQVksRUFBRTtRQUMvQyxNQUFNYSxjQUFjLElBQUksQ0FBQzFCLGNBQWM7UUFFdkMsSUFBSTBCLGFBQWE7WUFDZixNQUFNSSw2QkFBNkI7WUFFbkMsT0FBT2pCLGFBQWFpQiw0QkFBNEJ6QztRQUNsRDtRQUVBLE1BQU1tQixjQUFjLE9BQ2RPLG9CQUFvQixJQUFJLENBQUNSLFNBQVMsQ0FBQ0M7UUFFekNuQixRQUFRMkIsS0FBSyxDQUFDLENBQUMsZ0JBQWdCLEVBQUVELGtCQUFrQix1QkFBdUIsQ0FBQztRQUUzRSxPQUFPUyxJQUFBQSxtQ0FBeUIsRUFBQyxJQUFJLENBQUMvQixJQUFJLEVBQUVKLFNBQVMsQ0FBQ3lDO1lBQ3BELElBQUlBLDRCQUE0QjtnQkFDOUJ6QyxRQUFRZ0MsS0FBSyxDQUFDLENBQUMsa0JBQWtCLEVBQUVOLGtCQUFrQixxQkFBcUIsQ0FBQztZQUM3RTtZQUVBLE9BQU9GLGFBQWFpQiw0QkFBNEJ6QztRQUNsRDtJQUNGO0lBRUEwQyxVQUFVdEMsSUFBSSxFQUFFSixPQUFPLEVBQUV3QixZQUFZLEVBQUU7UUFDckMsTUFBTUosYUFBYWhCLEtBQUtjLFNBQVMsSUFDM0JDLGNBQWMsTUFDZE8sb0JBQW9CLElBQUksQ0FBQ1IsU0FBUyxDQUFDQyxjQUFlLEdBQUc7UUFFM0RuQixRQUFRMkIsS0FBSyxDQUFDLENBQUMsY0FBYyxFQUFFUCxXQUFXLGlCQUFpQixFQUFFTSxrQkFBa0IsZ0JBQWdCLENBQUM7UUFFaEcsT0FBTyxJQUFJLENBQUNpQiw0QkFBNEIsQ0FBQ3ZDLE1BQU1KLFNBQVMsQ0FBQzRDLDhCQUE4QjVDO1lBQ3JGLElBQUksQ0FBQzRDLDhCQUE4QjtnQkFDakMsTUFBTUMsY0FBYztnQkFFcEIsT0FBT3JCLGFBQWFxQixhQUFhN0M7WUFDbkM7WUFFQSxNQUFNOEMsY0FBYyxJQUFJLEVBQ2xCQyxxQkFBcUJELFlBQVlFLFVBQVUsSUFDM0NDLGlCQUFpQkYsb0JBQ2pCRyxpQkFBaUJsRCxTQUFTLEdBQUc7WUFFbkMsT0FBT21ELElBQUFBLCtCQUF3QixFQUFDL0MsTUFBTTBDLGFBQWFHLGdCQUFnQkMsZ0JBQWdCLENBQUNFLDRCQUE0QnBEO2dCQUM5RyxJQUFJLENBQUNvRCw0QkFBNEI7b0JBQy9CLE1BQU1QLGNBQWM7b0JBRXBCLE9BQU9yQixhQUFhcUIsYUFBYTdDO2dCQUNuQztnQkFFQSxJQUFJNkM7Z0JBRUosTUFBTVEsY0FBYyxJQUFJLENBQUNoRCxJQUFJLENBQUNpRCxhQUFhO2dCQUUzQ2xELEtBQUtrQixPQUFPLENBQUMsSUFBSSxDQUFDakIsSUFBSTtnQkFFdEJELEtBQUttRCxjQUFjLENBQUNGO2dCQUVwQlIsY0FBYztnQkFFZCxJQUFJQSxhQUFhO29CQUNmN0MsUUFBUWdDLEtBQUssQ0FBQyxDQUFDLGdCQUFnQixFQUFFWixXQUFXLGlCQUFpQixFQUFFTSxrQkFBa0IsY0FBYyxDQUFDO2dCQUNsRztnQkFFQSxPQUFPRixhQUFhcUIsYUFBYTdDO1lBQ25DO1FBQ0Y7SUFDRjtJQUVBd0QsNkJBQTZCQyxVQUFVLEVBQUVyRCxJQUFJLEVBQUVKLE9BQU8sRUFBRXdCLFlBQVksRUFBRTtRQUNwRSxJQUFJa0M7UUFFSixRQUFRO1FBRVIsTUFBTXRDLGFBQWFoQixLQUFLYyxTQUFTLElBQzNCeUMsbUJBQW1CRixXQUFXdkMsU0FBUyxJQUN2Q1Esb0JBQW9CLElBQUksQ0FBQ1IsU0FBUyxJQUFJLEdBQUc7UUFFL0NsQixRQUFRMkIsS0FBSyxDQUFDLENBQUMsaUJBQWlCLEVBQUVELGtCQUFrQixpQkFBaUIsRUFBRWlDLGlCQUFpQix3QkFBd0IsRUFBRXZDLFdBQVcsU0FBUyxDQUFDO1FBRXZJc0MsZ0NBQWdDRCxXQUFXRyxrQkFBa0IsQ0FBQ3hELE1BQU1KO1FBRXBFLElBQUkwRCwrQkFBK0I7WUFDakMxRCxRQUFRMkIsS0FBSyxDQUFDLENBQUMsbUJBQW1CLEVBQUVELGtCQUFrQixpQkFBaUIsRUFBRWlDLGlCQUFpQix3QkFBd0IsRUFBRXZDLFdBQVcsT0FBTyxDQUFDO1FBQ3pJO1FBRUEsT0FBT3NDO0lBQ1Q7SUFFQWYsNkJBQTZCdkMsSUFBSSxFQUFFSixPQUFPLEVBQUV3QixZQUFZLEVBQUU7UUFDeEQsTUFBTVYsZUFBZSxJQUFJLENBQUNILGNBQWM7UUFFeEMsSUFBSSxDQUFDRyxjQUFjO1lBQ2pCLE1BQU0rQyxnQ0FBZ0MsTUFBTyxHQUFHO1lBRWhELE9BQU9yQyxhQUFhcUMsK0JBQStCN0Q7UUFDckQ7UUFFQSxPQUFPOEQsSUFBQUEsbUJBQUssRUFBQyxJQUFJLENBQUN4RCxVQUFVLEVBQUVOLFNBQVMsQ0FBQ3lELFlBQVlqQztZQUNsRCxJQUFJLENBQUNnQyw0QkFBNEIsQ0FBQ0MsWUFBWXJELE1BQU1KLFNBQVN3QjtRQUMvRCxHQUFHQTtJQUNMO0lBRUF1QyxTQUFTO1FBQ1AsTUFBTS9ELFVBQVUsSUFBSSxDQUFDZ0QsVUFBVTtRQUUvQixPQUFPZ0IsSUFBQUEsa0JBQVMsRUFBQyxDQUFDaEU7WUFDaEIsTUFBTW1CLGNBQWMsT0FDZDhDLFdBQVdDLElBQUFBLG9CQUFjLEVBQUMsSUFBSSxDQUFDN0QsSUFBSSxHQUNuQzhELGlCQUFpQkMsSUFBQUEsZ0NBQTBCLEVBQUMsSUFBSSxDQUFDOUQsVUFBVSxHQUMzREwsU0FBUyxJQUFJLENBQUNpQixTQUFTLENBQUNDO1lBRTlCLElBQUloQjtZQUVKQSxhQUFhLElBQUksQ0FBQ2tFLGFBQWE7WUFFL0IsTUFBTUMsaUJBQWlCM0UsMkJBQTJCUTtZQUVsREEsYUFBYW1FLGdCQUFpQixHQUFHO1lBRWpDLE1BQU1qRSxPQUFPNEQsVUFDUDNELGFBQWE2RCxnQkFDYkksT0FBTztnQkFDTHZFO2dCQUNBQztnQkFDQUU7Z0JBQ0FFO2dCQUNBQztZQUNGO1lBRU4sT0FBT2lFO1FBQ1QsR0FBR3ZFO0lBQ0w7SUFFQSxPQUFPd0UsT0FBTyxjQUFjO0lBRTVCLE9BQU9DLFNBQVNGLElBQUksRUFBRXZFLE9BQU8sRUFBRTtRQUM3QixJQUFJOEM7UUFFSjRCLElBQUFBLG9CQUFXLEVBQUMsQ0FBQzFFO1lBQ1gyRSxJQUFBQSxvQkFBVyxFQUFDLENBQUNKLE1BQU12RTtnQkFDakIsTUFBTSxFQUFFQyxNQUFNLEVBQUUsR0FBR3NFLE1BQ2J0RCxrQkFBa0IyRCxJQUFBQSxtQ0FBc0IsRUFBQzNFLFFBQVFELFVBQ2pERSxPQUFPZSxpQkFDUGQsYUFBYVQsbUJBQW1CNkUsT0FDaENuRSxPQUFPeUUsSUFBQUEsZ0NBQXVCLEVBQUM1RCxpQkFBaUJqQixVQUNoREssT0FBT3lFLElBQUFBLGtCQUFZLEVBQUNQLE1BQU12RSxVQUMxQk0sYUFBYXlFLElBQUFBLHdCQUFrQixFQUFDUixNQUFNdkU7Z0JBRTVDOEMsY0FBYyxJQUFJaEQsWUFBWUUsU0FBU0MsUUFBUUMsTUFBTUMsWUFBWUMsTUFBTUMsTUFBTUM7WUFDL0UsR0FBR2lFLE1BQU12RTtRQUNYLEdBQUdBO1FBRUgsT0FBTzhDO0lBQ1Q7QUFDRiJ9
210
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9lbGVtZW50L2NvbnN0cnVjdG9yLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBFbGVtZW50LCBicmVha1BvaW50VXRpbGl0aWVzIH0gZnJvbSBcIm9jY2FtLWxhbmd1YWdlc1wiO1xuXG5pbXBvcnQgeyBkZWZpbmUgfSBmcm9tIFwiLi4vZWxlbWVudHNcIjtcbmltcG9ydCB7IGV2ZXJ5LCBleGlzdHMgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2NvbnRpbnVhdGlvblwiO1xuaW1wb3J0IHsgYmFzZVR5cGVGcm9tTm90aGluZyB9IGZyb20gXCIuLi91dGlsaXRpZXMvdHlwZVwiO1xuaW1wb3J0IHsgaW5zdGFudGlhdGVDb25zdHJ1Y3RvciB9IGZyb20gXCIuLi9wcm9jZXNzL2luc3RhbnRpYXRlXCI7XG5pbXBvcnQgeyB2YWxpZGF0ZVRlcm1Bc1ZhcmlhYmxlIH0gZnJvbSBcIi4uL3Byb2Nlc3MvdmFsaWRhdGlvblwiO1xuaW1wb3J0IHsgdGVybUZyb21Db25zdHJ1Y3Rvck5vZGUgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2VsZW1lbnRcIjtcbmltcG9ydCB7IHVuaWZ5VGVybVdpdGhDb25zdHJ1Y3RvciB9IGZyb20gXCIuLi9wcm9jZXNzL3VuaWZ5XCI7XG5pbXBvcnQgeyB2YWxpZGF0ZVRlcm1Bc0NvbnN0cnVjdG9yIH0gZnJvbSBcIi4uL3Byb2Nlc3MvdmFsaWRhdGVcIjtcbmltcG9ydCB7IGF0dGVtcHQsIHNlcmlhbGlzZSwgdW5zZXJpYWxpc2UsIGluc3RhbnRpYXRlIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9jb250ZXh0XCI7XG5pbXBvcnQgeyB0eXBlRnJvbUpTT04sIHR5cGVUb1R5cGVKU09OLCBoeXBvdGhlc2VzRnJvbUpTT04sIGh5cG90aGVzZXNUb0h5cG90aGVzZXNKU09OIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9qc29uXCI7XG5cbmNvbnN0IHsgYnJlYWtQb2ludEZyb21KU09OLCBicmVha1BvaW50VG9CcmVha1BvaW50SlNPTiB9ID0gYnJlYWtQb2ludFV0aWxpdGllcztcblxuZXhwb3J0IGRlZmF1bHQgZGVmaW5lKGNsYXNzIENvbnN0cnVjdG9yIGV4dGVuZHMgRWxlbWVudCB7XG4gIGNvbnN0cnVjdG9yKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgdGVybSwgdHlwZSwgaHlwb3RoZXNlcykge1xuICAgIHN1cGVyKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCk7XG5cbiAgICB0aGlzLnRlcm0gPSB0ZXJtO1xuICAgIHRoaXMudHlwZSA9IHR5cGU7XG4gICAgdGhpcy5oeXBvdGhlc2VzID0gaHlwb3RoZXNlcztcbiAgfVxuXG4gIGdldFRlcm0oKSB7XG4gICAgcmV0dXJuIHRoaXMudGVybTtcbiAgfVxuXG4gIGdldFR5cGUoKSB7XG4gICAgcmV0dXJuIHRoaXMudHlwZTtcbiAgfVxuXG4gIGdldEh5cG90aGVzZXMoKSB7XG4gICAgcmV0dXJuIHRoaXMuaHlwb3RoZXNlcztcbiAgfVxuXG4gIHNldEh5cG90aGVzZXMoaHlwb3RoZXNlcykge1xuICAgIHRoaXMuaHlwb3RoZXNlcyA9IGh5cG90aGVzZXM7XG4gIH1cblxuICBpc0h5cG90aGV0aWNhbCgpIHtcbiAgICBjb25zdCBoeXBvdGhlc2VzTGVuZ3RoID0gdGhpcy5oeXBvdGhlc2VzLmxlbmd0aCxcbiAgICAgICAgICBoeXBvdGhldGljYWwgPSAoaHlwb3RoZXNlc0xlbmd0aCA+IDApO1xuXG4gICAgcmV0dXJuIGh5cG90aGV0aWNhbDtcbiAgfVxuXG4gIGdldENvbnN0cnVjdG9yTm9kZSgpIHtcbiAgICBjb25zdCBub2RlID0gdGhpcy5nZXROb2RlKCksXG4gICAgICAgICAgY29uc3RydWN0b3JOb2RlID0gbm9kZTsgIC8vL1xuXG4gICAgcmV0dXJuIGNvbnN0cnVjdG9yTm9kZTtcbiAgfVxuXG4gIGdldFN0cmluZyhpbmNsdWRlVHlwZSA9IHRydWUpIHtcbiAgICBsZXQgc3RyaW5nO1xuXG4gICAgaWYgKGluY2x1ZGVUeXBlKSB7XG4gICAgICBjb25zdCB0ZXJtU3RyaW5nID0gdGhpcy50ZXJtLmdldFN0cmluZygpLFxuICAgICAgICAgICAgdHlwZVN0cmluZyA9IHRoaXMudHlwZS5nZXRTdHJpbmcoKTtcblxuICAgICAgc3RyaW5nID0gYCR7dGVybVN0cmluZ30uJHt0eXBlU3RyaW5nfWA7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0cmluZyA9IHN1cGVyLmdldFN0cmluZygpO1xuICAgIH1cblxuICAgIHJldHVybiBzdHJpbmc7XG4gIH1cblxuICBzZXRUeXBlKHR5cGUpIHtcbiAgICB0aGlzLnR5cGUgPSB0eXBlO1xuICB9XG5cbiAgdmVyaWZ5KGNvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICAgIGxldCB2ZXJpZmllcyA9IGZhbHNlO1xuXG4gICAgY29uc3QgaW5jbHVkZVR5cGUgPSBmYWxzZSxcbiAgICAgICAgICBjb25zdHJ1Y3RvclN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKGluY2x1ZGVUeXBlKTtcblxuICAgIGNvbnRleHQudHJhY2UoYFZlcmlmeWluZyB0aGUgJyR7Y29uc3RydWN0b3JTdHJpbmd9JyBjb25zdHJ1Y3Rvci4uLmApO1xuXG4gICAgYXR0ZW1wdCgoY29udGV4dCkgPT4ge1xuICAgICAgdGhpcy52YWxpZGF0ZVRlcm0oY29udGV4dCwgKHRlcm1WYWxpZGF0ZXMsIGNvbnRleHQpID0+IHtcbiAgICAgICAgaWYgKHRlcm1WYWxpZGF0ZXMpIHtcbiAgICAgICAgICB2ZXJpZmllcyA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodmVyaWZpZXMpIHtcbiAgICAgICAgICB0aGlzLmNvbW1pdChjb250ZXh0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh2ZXJpZmllcykge1xuICAgICAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZlcmlmaWVkIHRoZSAnJHtjb25zdHJ1Y3RvclN0cmluZ30nIGNvbnN0cnVjdG9yLmApO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbih2ZXJpZmllcyk7XG4gICAgICB9KTtcbiAgICB9LCBjb250ZXh0KTtcbiAgfVxuXG4gIHZhbGlkYXRlVGVybShjb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgICBjb25zdCBpbmNsdWRlVHlwZSA9IGZhbHNlLFxuICAgICAgICAgIGNvbnN0cnVjdG9yU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoaW5jbHVkZVR5cGUpO1xuXG4gICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7Y29uc3RydWN0b3JTdHJpbmd9JyBjb25zdHJ1Y3RvcidzIHRlcm0uLi5gKTtcblxuICAgIGNvbnN0IHZhbGlkYXRlVGVybUFzVmFyaWFibGUgPSB0aGlzLnZhbGlkYXRlVGVybUFzVmFyaWFibGUuYmluZCh0aGlzKSxcbiAgICAgICAgICB2YWxpZGF0ZVRlcm1Bc0NvbnN0cnVjdG9yID0gdGhpcy52YWxpZGF0ZVRlcm1Bc0NvbnN0cnVjdG9yLmJpbmQodGhpcyk7XG5cbiAgICByZXR1cm4gZXhpc3RzKFtcbiAgICAgIHZhbGlkYXRlVGVybUFzVmFyaWFibGUsXG4gICAgICB2YWxpZGF0ZVRlcm1Bc0NvbnN0cnVjdG9yXG4gICAgXSwgY29udGV4dCwgKHRlcm1WYWxpZGF0ZXMsIGNvbnRleHQpID0+IHtcbiAgICAgIGlmICh0ZXJtVmFsaWRhdGVzKSB7XG4gICAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlZCB0aGUgJyR7Y29uc3RydWN0b3JTdHJpbmd9JyBjb25zdHJ1Y3RvcidzIHRlcm0uYCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjb250aW51YXRpb24odGVybVZhbGlkYXRlcywgY29udGV4dCk7XG4gICAgfSk7XG4gIH1cblxuICB2YWxpZGF0ZVRlcm1Bc1ZhcmlhYmxlKGNvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICAgIGNvbnN0IGh5cG90aHRpY2FsID0gdGhpcy5pc0h5cG90aGV0aWNhbCgpO1xuXG4gICAgaWYgKCFoeXBvdGh0aWNhbCkge1xuICAgICAgY29uc3QgdGVybVZhbGlkYXRlc0FzVmFyaWFibGUgPSBmYWxzZTtcblxuICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbih0ZXJtVmFsaWRhdGVzQXNWYXJpYWJsZSwgY29udGV4dCk7XG4gICAgfVxuXG4gICAgY29uc3QgaW5jbHVkZVR5cGUgPSBmYWxzZSxcbiAgICAgICAgICBjb25zdHJ1Y3RvclN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKGluY2x1ZGVUeXBlKTtcblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke2NvbnN0cnVjdG9yU3RyaW5nfScgY29uc3RydWN0b3IncyB0ZXJtLi4uYCk7XG5cbiAgICByZXR1cm4gdmFsaWRhdGVUZXJtQXNWYXJpYWJsZSh0aGlzLnRlcm0sIGNvbnRleHQsICh0ZXJtLCBjb250ZXh0KSA9PiB7XG4gICAgICBsZXQgdGVybVZhbGlkYXRlc0FzVmFyaWFibGUgPSBmYWxzZTtcblxuICAgICAgY29uc3QgdHlwZSA9IHRlcm0uZ2V0VHlwZSgpLFxuICAgICAgICAgICAgYmFzZVR5cGUgPSBiYXNlVHlwZUZyb21Ob3RoaW5nKCk7XG5cbiAgICAgIGlmICh0eXBlID09PSBiYXNlVHlwZSkge1xuICAgICAgICB0ZXJtVmFsaWRhdGVzQXNWYXJpYWJsZSA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIGlmICh0ZXJtVmFsaWRhdGVzQXNWYXJpYWJsZSkge1xuICAgICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke2NvbnN0cnVjdG9yU3RyaW5nfScgY29uc3RydWN0b3IncyB0ZXJtLmApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gY29udGludWF0aW9uKHRlcm1WYWxpZGF0ZXNBc1ZhcmlhYmxlLCBjb250ZXh0KTtcbiAgICB9KTtcbiAgfVxuXG4gIHZhbGlkYXRlVGVybUFzQ29uc3RydWN0b3IoY29udGV4dCwgY29udGludWF0aW9uKSB7XG4gICAgY29uc3QgaHlwb3RodGljYWwgPSB0aGlzLmlzSHlwb3RoZXRpY2FsKCk7XG5cbiAgICBpZiAoaHlwb3RodGljYWwpIHtcbiAgICAgIGNvbnN0IHRlcm1WYWxpZGF0ZXNBc0NvbnN0cnVjdG9yID0gZmFsc2U7XG5cbiAgICAgIHJldHVybiBjb250aW51YXRpb24odGVybVZhbGlkYXRlc0FzQ29uc3RydWN0b3IsIGNvbnRleHQpO1xuICAgIH1cblxuICAgIGNvbnN0IGluY2x1ZGVUeXBlID0gZmFsc2UsXG4gICAgICAgICAgY29uc3RydWN0b3JTdHJpbmcgPSB0aGlzLmdldFN0cmluZyhpbmNsdWRlVHlwZSk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0aW5nIHRoZSAnJHtjb25zdHJ1Y3RvclN0cmluZ30nIGNvbnN0cnVjdG9yJ3MgdGVybS4uLmApO1xuXG4gICAgcmV0dXJuIHZhbGlkYXRlVGVybUFzQ29uc3RydWN0b3IodGhpcy50ZXJtLCBjb250ZXh0LCAodGVybVZhbGlkYXRlc0FzQ29uc3RydWN0b3IpID0+IHtcbiAgICAgIGlmICh0ZXJtVmFsaWRhdGVzQXNDb25zdHJ1Y3Rvcikge1xuICAgICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke2NvbnN0cnVjdG9yU3RyaW5nfScgY29uc3RydWN0b3IncyB0ZXJtLmApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gY29udGludWF0aW9uKHRlcm1WYWxpZGF0ZXNBc0NvbnN0cnVjdG9yLCBjb250ZXh0KTtcbiAgICB9KTtcbiAgfVxuXG4gIHVuaWZ5VGVybSh0ZXJtLCBjb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgICBjb25zdCB0ZXJtU3RyaW5nID0gdGVybS5nZXRTdHJpbmcoKSxcbiAgICAgICAgICBpbmNsdWRlVHlwZSA9IHRydWUsXG4gICAgICAgICAgY29uc3RydWN0b3JTdHJpbmcgPSB0aGlzLmdldFN0cmluZyhpbmNsdWRlVHlwZSk7ICAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFVuaWZ5aW5nIHRoZSAnJHt0ZXJtU3RyaW5nfScgdGVybSB3aXRoIHRoZSAnJHtjb25zdHJ1Y3RvclN0cmluZ30nIGNvbnN0cnVjdG9yLi4uYCk7XG5cbiAgICByZXR1cm4gdGhpcy5kaXNjaGFyZ2VIeXBvdGhlc2VzR2l2ZW5UZXJtKHRlcm0sIGNvbnRleHQsIChoeXBvdGhlc2VzRGlzY2FyZGVkR2l2ZW5UZXJtLCBjb250ZXh0KSA9PiB7XG4gICAgICBpZiAoIWh5cG90aGVzZXNEaXNjYXJkZWRHaXZlblRlcm0pIHtcbiAgICAgICAgY29uc3QgdGVybVVuaWZpZXMgPSBmYWxzZTtcblxuICAgICAgICByZXR1cm4gY29udGludWF0aW9uKHRlcm1VbmlmaWVzLCBjb250ZXh0KTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgY29uc3RydWN0b3IgPSB0aGlzLCAvLy9cbiAgICAgICAgICAgIGNvbnN0cnVjdG9yQ29udGV4dCA9IGNvbnN0cnVjdG9yLmdldENvbnRleHQoKSxcbiAgICAgICAgICAgIGdlbmVyYWxDb250ZXh0ID0gY29uc3RydWN0b3JDb250ZXh0LCAgLy8vXG4gICAgICAgICAgICBzcGVjaWZpQ29udGV4dCA9IGNvbnRleHQ7IC8vL1xuXG4gICAgICByZXR1cm4gdW5pZnlUZXJtV2l0aENvbnN0cnVjdG9yKHRlcm0sIGNvbnN0cnVjdG9yLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaUNvbnRleHQsICh0ZXJtVW5pZmllc1dpdGhDb25zdHJ1Y3RvciwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmlDb250ZXh0KSA9PiB7XG4gICAgICAgIGNvbnN0IGNvbnRleHQgPSBzcGVjaWZpQ29udGV4dDsgLy8vXG5cbiAgICAgICAgaWYgKCF0ZXJtVW5pZmllc1dpdGhDb25zdHJ1Y3Rvcikge1xuICAgICAgICAgIGNvbnN0IHRlcm1VbmlmaWVzID0gZmFsc2U7XG5cbiAgICAgICAgICByZXR1cm4gY29udGludWF0aW9uKHRlcm1VbmlmaWVzLCBjb250ZXh0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCB0ZXJtVW5pZmllcztcblxuICAgICAgICBjb25zdCBwcm92aXNpb25hbCA9IHRoaXMudHlwZS5pc1Byb3Zpc2lvbmFsKCk7XG5cbiAgICAgICAgdGVybS5zZXRUeXBlKHRoaXMudHlwZSk7XG5cbiAgICAgICAgdGVybS5zZXRQcm92aXNpb25hbChwcm92aXNpb25hbCk7XG5cbiAgICAgICAgdGVybVVuaWZpZXMgPSB0cnVlO1xuXG4gICAgICAgIGlmICh0ZXJtVW5pZmllcykge1xuICAgICAgICAgIGNvbnRleHQuZGVidWcoYC4uLnVuaWZpZWQgdGhlICcke3Rlcm1TdHJpbmd9JyB0ZXJtIHdpdGggdGhlICcke2NvbnN0cnVjdG9yU3RyaW5nfScgY29uc3RydWN0b3IuYCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gY29udGludWF0aW9uKHRlcm1VbmlmaWVzLCBjb250ZXh0KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgZGlzY2hhcmdlSHlwb3RoZXNpc0dpdmVuVGVybShoeXBvdGhlc2lzLCB0ZXJtLCBjb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgICBsZXQgaHlwb3RoZXNpc0Rpc2NoYXJnZXNHaXZlblRlcm07XG5cbiAgICBkZWJ1Z2dlclxuXG4gICAgY29uc3QgdGVybVN0cmluZyA9IHRlcm0uZ2V0U3RyaW5nKCksXG4gICAgICAgICAgaHlwb3RoZXNpc1N0cmluZyA9IGh5cG90aGVzaXMuZ2V0U3RyaW5nKCksXG4gICAgICAgICAgY29uc3RydWN0b3JTdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYERpc2NoYXJkaW5nIHRoZSAnJHtjb25zdHJ1Y3RvclN0cmluZ30nIGNvbnN0cnVjdG9yJ3MgJyR7aHlwb3RoZXNpc1N0cmluZ30nIGh5cG90aGVzaXMgZ2l2ZW4gdGhlICcke3Rlcm1TdHJpbmd9JyB0ZXJtLi4uYCk7XG5cbiAgICBoeXBvdGhlc2lzRGlzY2hhcmdlc0dpdmVuVGVybSA9IGh5cG90aGVzaXMuZGlzY2hhcmdlR2l2ZW5UZXJtKHRlcm0sIGNvbnRleHQpO1xuXG4gICAgaWYgKGh5cG90aGVzaXNEaXNjaGFyZ2VzR2l2ZW5UZXJtKSB7XG4gICAgICBjb250ZXh0LnRyYWNlKGAuLi5kaXNjaGFyZ2VzIHRoZSAnJHtjb25zdHJ1Y3RvclN0cmluZ30nIGNvbnN0cnVjdG9yJ3MgJyR7aHlwb3RoZXNpc1N0cmluZ30nIGh5cG90aGVzaXMgZ2l2ZW4gdGhlICcke3Rlcm1TdHJpbmd9JyB0ZXJtLmApO1xuICAgIH1cblxuICAgIHJldHVybiBoeXBvdGhlc2lzRGlzY2hhcmdlc0dpdmVuVGVybTtcbiAgfVxuXG4gIGRpc2NoYXJnZUh5cG90aGVzZXNHaXZlblRlcm0odGVybSwgY29udGV4dCwgY29udGludWF0aW9uKSB7XG4gICAgY29uc3QgaHlwb3RoZXRpY2FsID0gdGhpcy5pc0h5cG90aGV0aWNhbCgpO1xuXG4gICAgaWYgKCFoeXBvdGhldGljYWwpIHtcbiAgICAgIGNvbnN0IGh5cG90aGVzZXNEaXNjaGFyZ2VzR2l2ZW5UZXJtID0gdHJ1ZTsgIC8vL1xuXG4gICAgICByZXR1cm4gY29udGludWF0aW9uKGh5cG90aGVzZXNEaXNjaGFyZ2VzR2l2ZW5UZXJtLCBjb250ZXh0KTtcbiAgICB9XG5cbiAgICByZXR1cm4gZXZlcnkodGhpcy5oeXBvdGhlc2VzLCBjb250ZXh0LCAoaHlwb3RoZXNpcywgY29udGludWF0aW9uKSA9PiB7XG4gICAgICB0aGlzLmRpc2NoYXJnZUh5cG90aGVzaXNHaXZlblRlcm0oaHlwb3RoZXNpcywgdGVybSwgY29udGV4dCwgY29udGludWF0aW9uKTtcbiAgICB9LCBjb250aW51YXRpb24pO1xuICB9XG5cbiAgdG9KU09OKCkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKTtcblxuICAgIHJldHVybiBzZXJpYWxpc2UoKGNvbnRleHQpID0+IHtcbiAgICAgIGNvbnN0IGluY2x1ZGVUeXBlID0gZmFsc2UsXG4gICAgICAgICAgICB0eXBlSlNPTiA9IHR5cGVUb1R5cGVKU09OKHRoaXMudHlwZSksXG4gICAgICAgICAgICBoeXBvdGhlc2VzSlNPTiA9IGh5cG90aGVzZXNUb0h5cG90aGVzZXNKU09OKHRoaXMuaHlwb3RoZXNlcyksXG4gICAgICAgICAgICBzdHJpbmcgPSB0aGlzLmdldFN0cmluZyhpbmNsdWRlVHlwZSk7XG5cbiAgICAgIGxldCBicmVha1BvaW50O1xuXG4gICAgICBicmVha1BvaW50ID0gdGhpcy5nZXRCcmVha1BvaW50KCk7XG5cbiAgICAgIGNvbnN0IGJyZWFrUG9pbnRKU09OID0gYnJlYWtQb2ludFRvQnJlYWtQb2ludEpTT04oYnJlYWtQb2ludCk7XG5cbiAgICAgIGJyZWFrUG9pbnQgPSBicmVha1BvaW50SlNPTjsgIC8vL1xuXG4gICAgICBjb25zdCB0eXBlID0gdHlwZUpTT04sICAvLy9cbiAgICAgICAgICAgIGh5cG90aGVzZXMgPSBoeXBvdGhlc2VzSlNPTiwgIC8vL1xuICAgICAgICAgICAganNvbiA9IHtcbiAgICAgICAgICAgICAgY29udGV4dCxcbiAgICAgICAgICAgICAgc3RyaW5nLFxuICAgICAgICAgICAgICBicmVha1BvaW50LFxuICAgICAgICAgICAgICB0eXBlLFxuICAgICAgICAgICAgICBoeXBvdGhlc2VzXG4gICAgICAgICAgICB9O1xuXG4gICAgICByZXR1cm4ganNvbjtcbiAgICB9LCBjb250ZXh0KTtcbiAgfVxuXG4gIHN0YXRpYyBuYW1lID0gXCJDb25zdHJ1Y3RvclwiO1xuXG4gIHN0YXRpYyBmcm9tSlNPTihqc29uLCBjb250ZXh0KSB7XG4gICAgbGV0IGNvbnN0cnVjdG9yO1xuXG4gICAgaW5zdGFudGlhdGUoKGNvbnRleHQpID0+IHtcbiAgICAgIHVuc2VyaWFsaXNlKChqc29uLCBjb250ZXh0KSA9PiB7XG4gICAgICAgIGNvbnN0IHsgc3RyaW5nIH0gPSBqc29uLFxuICAgICAgICAgICAgICBjb25zdHJ1Y3Rvck5vZGUgPSBpbnN0YW50aWF0ZUNvbnN0cnVjdG9yKHN0cmluZywgY29udGV4dCksXG4gICAgICAgICAgICAgIG5vZGUgPSBjb25zdHJ1Y3Rvck5vZGUsIC8vL1xuICAgICAgICAgICAgICBicmVha1BvaW50ID0gYnJlYWtQb2ludEZyb21KU09OKGpzb24pLFxuICAgICAgICAgICAgICB0ZXJtID0gdGVybUZyb21Db25zdHJ1Y3Rvck5vZGUoY29uc3RydWN0b3JOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgICAgICAgdHlwZSA9IHR5cGVGcm9tSlNPTihqc29uLCBjb250ZXh0KSxcbiAgICAgICAgICAgICAgaHlwb3RoZXNlcyA9IGh5cG90aGVzZXNGcm9tSlNPTihqc29uLCBjb250ZXh0KTtcblxuICAgICAgICBjb25zdHJ1Y3RvciA9IG5ldyBDb25zdHJ1Y3Rvcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHRlcm0sIHR5cGUsIGh5cG90aGVzZXMpO1xuICAgICAgfSwganNvbiwgY29udGV4dCk7XG4gICAgfSwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gY29uc3RydWN0b3I7XG4gIH1cbn0pO1xuIl0sIm5hbWVzIjpbImJyZWFrUG9pbnRGcm9tSlNPTiIsImJyZWFrUG9pbnRUb0JyZWFrUG9pbnRKU09OIiwiYnJlYWtQb2ludFV0aWxpdGllcyIsImRlZmluZSIsIkNvbnN0cnVjdG9yIiwiRWxlbWVudCIsImNvbnRleHQiLCJzdHJpbmciLCJub2RlIiwiYnJlYWtQb2ludCIsInRlcm0iLCJ0eXBlIiwiaHlwb3RoZXNlcyIsImdldFRlcm0iLCJnZXRUeXBlIiwiZ2V0SHlwb3RoZXNlcyIsInNldEh5cG90aGVzZXMiLCJpc0h5cG90aGV0aWNhbCIsImh5cG90aGVzZXNMZW5ndGgiLCJsZW5ndGgiLCJoeXBvdGhldGljYWwiLCJnZXRDb25zdHJ1Y3Rvck5vZGUiLCJnZXROb2RlIiwiY29uc3RydWN0b3JOb2RlIiwiZ2V0U3RyaW5nIiwiaW5jbHVkZVR5cGUiLCJ0ZXJtU3RyaW5nIiwidHlwZVN0cmluZyIsInNldFR5cGUiLCJ2ZXJpZnkiLCJjb250aW51YXRpb24iLCJ2ZXJpZmllcyIsImNvbnN0cnVjdG9yU3RyaW5nIiwidHJhY2UiLCJhdHRlbXB0IiwidmFsaWRhdGVUZXJtIiwidGVybVZhbGlkYXRlcyIsImNvbW1pdCIsImRlYnVnIiwidmFsaWRhdGVUZXJtQXNWYXJpYWJsZSIsImJpbmQiLCJ2YWxpZGF0ZVRlcm1Bc0NvbnN0cnVjdG9yIiwiZXhpc3RzIiwiaHlwb3RodGljYWwiLCJ0ZXJtVmFsaWRhdGVzQXNWYXJpYWJsZSIsImJhc2VUeXBlIiwiYmFzZVR5cGVGcm9tTm90aGluZyIsInRlcm1WYWxpZGF0ZXNBc0NvbnN0cnVjdG9yIiwidW5pZnlUZXJtIiwiZGlzY2hhcmdlSHlwb3RoZXNlc0dpdmVuVGVybSIsImh5cG90aGVzZXNEaXNjYXJkZWRHaXZlblRlcm0iLCJ0ZXJtVW5pZmllcyIsImNvbnN0cnVjdG9yIiwiY29uc3RydWN0b3JDb250ZXh0IiwiZ2V0Q29udGV4dCIsImdlbmVyYWxDb250ZXh0Iiwic3BlY2lmaUNvbnRleHQiLCJ1bmlmeVRlcm1XaXRoQ29uc3RydWN0b3IiLCJ0ZXJtVW5pZmllc1dpdGhDb25zdHJ1Y3RvciIsInByb3Zpc2lvbmFsIiwiaXNQcm92aXNpb25hbCIsInNldFByb3Zpc2lvbmFsIiwiZGlzY2hhcmdlSHlwb3RoZXNpc0dpdmVuVGVybSIsImh5cG90aGVzaXMiLCJoeXBvdGhlc2lzRGlzY2hhcmdlc0dpdmVuVGVybSIsImh5cG90aGVzaXNTdHJpbmciLCJkaXNjaGFyZ2VHaXZlblRlcm0iLCJoeXBvdGhlc2VzRGlzY2hhcmdlc0dpdmVuVGVybSIsImV2ZXJ5IiwidG9KU09OIiwic2VyaWFsaXNlIiwidHlwZUpTT04iLCJ0eXBlVG9UeXBlSlNPTiIsImh5cG90aGVzZXNKU09OIiwiaHlwb3RoZXNlc1RvSHlwb3RoZXNlc0pTT04iLCJnZXRCcmVha1BvaW50IiwiYnJlYWtQb2ludEpTT04iLCJqc29uIiwibmFtZSIsImZyb21KU09OIiwiaW5zdGFudGlhdGUiLCJ1bnNlcmlhbGlzZSIsImluc3RhbnRpYXRlQ29uc3RydWN0b3IiLCJ0ZXJtRnJvbUNvbnN0cnVjdG9yTm9kZSIsInR5cGVGcm9tSlNPTiIsImh5cG90aGVzZXNGcm9t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
@@ -110,14 +110,15 @@ class ConstructorPass extends _continuationZip.default {
110
110
  context = specificContext; ///
111
111
  let success = false;
112
112
  if (type === null) {
113
- return continuation(success, context);
113
+ return continuation(success, generalContext, specificContext);
114
114
  }
115
115
  const term = (0, _element.termFromTermNode)(termNode, context);
116
116
  term.validateGivenType(type, context, (term, context)=>{
117
+ const specificContext = context; ///
117
118
  if (term !== null) {
118
119
  success = true;
119
120
  }
120
- return continuation(success, context);
121
+ return continuation(success, generalContext, specificContext);
121
122
  });
122
123
  }
123
124
  }
@@ -231,17 +232,18 @@ class CombinatorPass extends _continuationZip.default {
231
232
  generalNodeQuery: metaTypeNodeQuery,
232
233
  specificNodeQuery: statementNodeQuery,
233
234
  run: (generalMetaTypeNode, specificStatementNode, generalContext, specificContext, continuation)=>{
234
- const context = specificContext, metaTypeNode = generalMetaTypeNode, metaTypeName = metaTypeNode.getMetaTypeName(), metaTypeNameStatementMetaTypeName = metaTypeName === _metaTypeNames.STATEMENT_META_TYPE_NAME;
235
+ const metaTypeNode = generalMetaTypeNode, metaTypeName = metaTypeNode.getMetaTypeName(), metaTypeNameStatementMetaTypeName = metaTypeName === _metaTypeNames.STATEMENT_META_TYPE_NAME;
235
236
  let success = false;
236
237
  if (!metaTypeNameStatementMetaTypeName) {
237
- return continuation(success, context);
238
+ return continuation(success, generalContext, specificContext);
238
239
  }
239
- const statementNode = specificStatementNode, statement = (0, _element.statementFromStatementNode)(statementNode, context);
240
+ const statementNode = specificStatementNode, context = specificContext, statement = (0, _element.statementFromStatementNode)(statementNode, context);
240
241
  return statement.validate(context, (statement, context)=>{
242
+ const specificContext = context; ///
241
243
  if (statement !== null) {
242
244
  success = true;
243
245
  }
244
- return continuation(success, context);
246
+ return continuation(success, generalContext, specificContext);
245
247
  });
246
248
  }
247
249
  },
@@ -249,17 +251,18 @@ class CombinatorPass extends _continuationZip.default {
249
251
  generalNodeQuery: metaTypeNodeQuery,
250
252
  specificNodeQuery: frameNodeQuery,
251
253
  run: (generalMetaTypeNode, specificFrameNode, generalContext, specificContext, continuation)=>{
252
- const context = specificContext, metaTypeNode = generalMetaTypeNode, metaTypeName = metaTypeNode.getMetaTypeName(), metaTypeNameFrameMetaTypeName = metaTypeName === _metaTypeNames.FRAME_META_TYPE_NAME;
254
+ const metaTypeNode = generalMetaTypeNode, metaTypeName = metaTypeNode.getMetaTypeName(), metaTypeNameFrameMetaTypeName = metaTypeName === _metaTypeNames.FRAME_META_TYPE_NAME;
253
255
  let success = false;
254
256
  if (!metaTypeNameFrameMetaTypeName) {
255
- return continuation(success, context);
257
+ return continuation(success, generalContext, specificContext);
256
258
  }
257
- const frameNode = specificFrameNode, frame = (0, _element.frameFromFrameNode)(frameNode, context);
259
+ const frameNode = specificFrameNode, context = specificContext, frame = (0, _element.frameFromFrameNode)(frameNode, context);
258
260
  return frame.validate(context, (frame, context)=>{
261
+ const specificContext = context; ///
259
262
  if (frame !== null) {
260
263
  success = true;
261
264
  }
262
- return continuation(success, context);
265
+ return continuation(success, generalContext, specificContext);
263
266
  });
264
267
  }
265
268
  },
@@ -273,12 +276,13 @@ class CombinatorPass extends _continuationZip.default {
273
276
  const type = context.findTypeByNominalTypeName(nominalTypeName);
274
277
  context = specificContext; ///
275
278
  const term = (0, _element.termFromTermNode)(termNode, context);
279
+ let success = false;
276
280
  return term.validateGivenType(type, context, (term, context)=>{
277
- let success = false;
281
+ const specificContext = context; ///
278
282
  if (term !== null) {
279
283
  success = true;
280
284
  }
281
- return continuation(success, context);
285
+ return continuation(success, generalContext, specificContext);
282
286
  });
283
287
  }
284
288
  }
@@ -385,4 +389,4 @@ function unifyMetavariableIntrinsically(generalMetavariable, specificMetavariabl
385
389
  return intrinsicMetavariablePass.run(generalNode, specificNode, generalContext, specificContext, continuation);
386
390
  }
387
391
 
388
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wcm9jZXNzL3VuaWZ5LmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBxdWVyeVV0aWxpdGllcyB9IGZyb20gXCJvY2NhbS1xdWVyeVwiO1xuaW1wb3J0IHsgQ29udGludWF0aW9uWmlwUGFzcyBhcyBDb250aW51YXRpb25aaXBQYXNzQmFzZSB9IGZyb20gXCJvY2NhbS1sYW5ndWFnZXNcIjtcblxuaW1wb3J0IENvbnRpbnVhdGlvblppcFBhc3MgZnJvbSBcIi4uL3Bhc3MvY29udGludWF0aW9uWmlwXCI7XG5cbmltcG9ydCB7IHJlY29uY2lsZSB9IGZyb20gXCIuLi91dGlsaXRpZXMvY29udGV4dFwiO1xuaW1wb3J0IHsgRlJBTUVfTUVUQV9UWVBFX05BTUUsIFNUQVRFTUVOVF9NRVRBX1RZUEVfTkFNRSB9IGZyb20gXCIuLi9tZXRhVHlwZU5hbWVzXCI7XG5pbXBvcnQgeyB0ZXJtRnJvbVRlcm1Ob2RlLCBmcmFtZUZyb21GcmFtZU5vZGUsIHN0YXRlbWVudEZyb21TdGF0ZW1lbnROb2RlIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9lbGVtZW50XCI7XG5cbmNvbnN0IHsgbm9kZVF1ZXJ5IH0gPSBxdWVyeVV0aWxpdGllcztcblxuY29uc3QgdHlwZU5vZGVRdWVyeSA9IG5vZGVRdWVyeShcIi90eXBlXCIpLFxuICAgICAgdGVybU5vZGVRdWVyeSA9IG5vZGVRdWVyeShcIi90ZXJtXCIpLFxuICAgICAgZnJhbWVOb2RlUXVlcnkgPSBub2RlUXVlcnkoXCIvZnJhbWVcIiksXG4gICAgICBtZXRhVHlwZU5vZGVRdWVyeSA9IG5vZGVRdWVyeShcIi9tZXRhVHlwZVwiKSxcbiAgICAgIHNpZ25hdHVyZU5vZGVRdWVyeSA9IG5vZGVRdWVyeShcIi9zaWduYXR1cmVcIiksXG4gICAgICBzdGF0ZW1lbnROb2RlUXVlcnkgPSBub2RlUXVlcnkoXCIvc3RhdGVtZW50XCIpLFxuICAgICAgdGVybVZhcmlhYmxlTm9kZVF1ZXJ5ID0gbm9kZVF1ZXJ5KFwiL3Rlcm0vdmFyaWFibGUhXCIpLFxuICAgICAgZnJhbWVNZXRhdmFyaWFibGVOb2RlUXVlcnkgPSBub2RlUXVlcnkoXCIvZnJhbWUvbWV0YXZhcmlhYmxlIVwiKSxcbiAgICAgIHN0YXRlbWVudE1ldGF2YXJpYWJsZU5vZGVRdWVyeSA9IG5vZGVRdWVyeShcIi9zdGF0ZW1lbnQvbWV0YXZhcmlhYmxlIVwiKSxcbiAgICAgIGFzc3VtcHRpb25NZXRhdmFyaWFibGVOb2RlUXVlcnkgPSBub2RlUXVlcnkoXCIvYXNzdW1wdGlvbi9tZXRhdmFyaWFibGUhXCIpO1xuXG5jbGFzcyBQcm9wZXJ0eVBhc3MgZXh0ZW5kcyBDb250aW51YXRpb25aaXBQYXNzIHtcbiAgc3RhdGljIG1hcHMgPSBbXG4gICAge1xuICAgICAgZ2VuZXJhbE5vZGVRdWVyeTogdHlwZU5vZGVRdWVyeSxcbiAgICAgIHNwZWNpZmljTm9kZVF1ZXJ5OiB0ZXJtTm9kZVF1ZXJ5LFxuICAgICAgcnVuOiAoZ2VuZXJhbFR5cGVOb2RlLCBzcGVjaWZpY1Rlcm1Ob2RlLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCBjb250aW51YXRpb24pID0+IHtcbiAgICAgICAgY29uc3QgdHlwZU5vZGUgPSBnZW5lcmFsVHlwZU5vZGUsIC8vL1xuICAgICAgICAgICAgICB0ZXJtTm9kZSA9IHNwZWNpZmljVGVybU5vZGUsIC8vL1xuICAgICAgICAgICAgICBub21pbmFsVHlwZU5hbWUgPSB0eXBlTm9kZS5nZXROb21pbmFsVHlwZU5hbWUoKTtcblxuICAgICAgICBsZXQgY29udGV4dDtcblxuICAgICAgICBjb250ZXh0ID0gZ2VuZXJhbENvbnRleHQ7IC8vL1xuXG4gICAgICAgIGNvbnN0IHR5cGUgPSBjb250ZXh0LmZpbmRUeXBlQnlOb21pbmFsVHlwZU5hbWUobm9taW5hbFR5cGVOYW1lKTtcblxuICAgICAgICBpZiAodHlwZSAhPT0gbnVsbCkge1xuICAgICAgICAgIGNvbnRleHQgPSBzcGVjaWZpY0NvbnRleHQ7ICAvLy9cblxuICAgICAgICAgIGNvbnN0IHRlcm0gPSB0ZXJtRnJvbVRlcm1Ob2RlKHRlcm1Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgICAgICAgICBzdHJpY3QgPSBmYWxzZTtcblxuICAgICAgICAgIHRlcm0udmFsaWRhdGVHaXZlblR5cGUoc3RyaWN0LCB0eXBlLCBjb250ZXh0LCAodGVybSkgPT4ge1xuICAgICAgICAgICAgbGV0IHN1Y2Nlc3MgPSBmYWxzZTtcblxuICAgICAgICAgICAgaWYgKHRlcm0gIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgc3VjY2VzcyA9IHRydWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBjb250aW51YXRpb24oc3VjY2Vzcyk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIF07XG59XG5cbmNsYXNzIEdlbmVyYXRvclBhc3MgZXh0ZW5kcyBDb250aW51YXRpb25aaXBQYXNzIHtcbiAgc3RhdGljIG1hcHMgPSBbXG4gICAge1xuICAgICAgZ2VuZXJhbE5vZGVRdWVyeTogdHlwZU5vZGVRdWVyeSxcbiAgICAgIHNwZWNpZmljTm9kZVF1ZXJ5OiB0ZXJtTm9kZVF1ZXJ5LFxuICAgICAgcnVuOiAoZ2VuZXJhbFR5cGVOb2RlLCBzcGVjaWZpY1Rlcm1Ob2RlLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCBjb250aW51YXRpb24pID0+IHtcbiAgICAgICAgY29uc3QgdHlwZU5vZGUgPSBnZW5lcmFsVHlwZU5vZGUsIC8vL1xuICAgICAgICAgICAgICB0ZXJtTm9kZSA9IHNwZWNpZmljVGVybU5vZGUsIC8vL1xuICAgICAgICAgICAgICBub21pbmFsVHlwZU5hbWUgPSB0eXBlTm9kZS5nZXROb21pbmFsVHlwZU5hbWUoKTtcblxuICAgICAgICBsZXQgY29udGV4dDtcblxuICAgICAgICBjb250ZXh0ID0gZ2VuZXJhbENvbnRleHQ7IC8vL1xuXG4gICAgICAgIGNvbnN0IHR5cGUgPSBjb250ZXh0LmZpbmRUeXBlQnlOb21pbmFsVHlwZU5hbWUobm9taW5hbFR5cGVOYW1lKTtcblxuICAgICAgICBpZiAodHlwZSAhPT0gbnVsbCkge1xuICAgICAgICAgIGNvbnRleHQgPSBzcGVjaWZpY0NvbnRleHQ7ICAvLy9cblxuICAgICAgICAgIGNvbnN0IHRlcm0gPSB0ZXJtRnJvbVRlcm1Ob2RlKHRlcm1Ob2RlLCBjb250ZXh0KTtcblxuICAgICAgICAgIHRlcm0udmFsaWRhdGVHaXZlblR5cGUodHlwZSwgY29udGV4dCwgKHRlcm0pID0+IHtcbiAgICAgICAgICAgIGxldCBzdWNjZXNzID0gZmFsc2U7XG5cbiAgICAgICAgICAgIGlmICh0ZXJtICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgIHN1Y2Nlc3MgPSB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gY29udGludWF0aW9uKHN1Y2Nlc3MpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICBdO1xufVxuXG5jbGFzcyBDb25zdHJ1Y3RvclBhc3MgZXh0ZW5kcyBDb250aW51YXRpb25aaXBQYXNzIHtcbiAgc3RhdGljIG1hcHMgPSBbXG4gICAge1xuICAgICAgZ2VuZXJhbE5vZGVRdWVyeTogdHlwZU5vZGVRdWVyeSxcbiAgICAgIHNwZWNpZmljTm9kZVF1ZXJ5OiB0ZXJtTm9kZVF1ZXJ5LFxuICAgICAgcnVuOiAoZ2VuZXJhbFR5cGVOb2RlLCBzcGVjaWZpY1Rlcm1Ob2RlLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCBjb250aW51YXRpb24pID0+IHtcbiAgICAgICAgY29uc3QgdHlwZU5vZGUgPSBnZW5lcmFsVHlwZU5vZGUsIC8vL1xuICAgICAgICAgICAgICB0ZXJtTm9kZSA9IHNwZWNpZmljVGVybU5vZGUsIC8vL1xuICAgICAgICAgICAgICBub21pbmFsVHlwZU5hbWUgPSB0eXBlTm9kZS5nZXROb21pbmFsVHlwZU5hbWUoKTtcblxuICAgICAgICBsZXQgY29udGV4dDtcblxuICAgICAgICBjb250ZXh0ID0gZ2VuZXJhbENvbnRleHQ7IC8vL1xuXG4gICAgICAgIGNvbnN0IHR5cGUgPSBjb250ZXh0LmZpbmRUeXBlQnlOb21pbmFsVHlwZU5hbWUobm9taW5hbFR5cGVOYW1lKTtcblxuICAgICAgICBjb250ZXh0ID0gc3BlY2lmaWNDb250ZXh0OyAgLy8vXG5cbiAgICAgICAgbGV0IHN1Y2Nlc3MgPSBmYWxzZTtcblxuICAgICAgICBpZiAodHlwZSA9PT0gbnVsbCkge1xuICAgICAgICAgIHJldHVybiBjb250aW51YXRpb24oc3VjY2VzcywgY29udGV4dCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB0ZXJtID0gdGVybUZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgY29udGV4dCk7XG5cbiAgICAgICAgdGVybS52YWxpZGF0ZUdpdmVuVHlwZSh0eXBlLCBjb250ZXh0LCAodGVybSwgY29udGV4dCkgPT4ge1xuICAgICAgICAgIGlmICh0ZXJtICE9PSBudWxsKSB7XG4gICAgICAgICAgICBzdWNjZXNzID0gdHJ1ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gY29udGludWF0aW9uKHN1Y2Nlc3MsIGNvbnRleHQpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIF07XG59XG5cbmNsYXNzIE1ldGFMZXZlbFBhc3MgZXh0ZW5kcyBDb250aW51YXRpb25aaXBQYXNzQmFzZSB7XG4gIHN0YXRpYyBtYXBzID0gW1xuICAgIHtcbiAgICAgIGdlbmVyYWxOb2RlUXVlcnk6IGFzc3VtcHRpb25NZXRhdmFyaWFibGVOb2RlUXVlcnksXG4gICAgICBzcGVjaWZpY05vZGVRdWVyeTogYXNzdW1wdGlvbk1ldGF2YXJpYWJsZU5vZGVRdWVyeSxcbiAgICAgIHJ1bjogKGdlbmVyYWxBc3N1bXB0aW9uTWV0YXZhcmlhYmxlTm9kZSwgc3BlY2lmaWNBc3N1bXB0aW9uTWV0YXZhcmlhYmxlTm9kZSwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgY29udGludWF0aW9uKSA9PiB7XG4gICAgICAgIGxldCBjb250ZXh0LFxuICAgICAgICAgICAgcmVmZXJlbmNlLFxuICAgICAgICAgICAgbWV0YXZhcmlhYmxlTm9kZTtcblxuICAgICAgICBjb250ZXh0ID0gZ2VuZXJhbENvbnRleHQ7IC8vL1xuXG4gICAgICAgIG1ldGF2YXJpYWJsZU5vZGUgPSBnZW5lcmFsQXNzdW1wdGlvbk1ldGF2YXJpYWJsZU5vZGU7ICAvLy9cblxuICAgICAgICByZWZlcmVuY2UgPSBjb250ZXh0LmZpbmRSZWZlcmVuY2VCeU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSk7XG5cbiAgICAgICAgY29uc3QgbWV0YXZhcmlhYmxlID0gcmVmZXJlbmNlLmdldE1ldGF2YXJpYWJsZSgpO1xuXG4gICAgICAgIGNvbnRleHQgPSBzcGVjaWZpY0NvbnRleHQ7ICAvLy9cblxuICAgICAgICBtZXRhdmFyaWFibGVOb2RlID0gc3BlY2lmaWNBc3N1bXB0aW9uTWV0YXZhcmlhYmxlTm9kZTsgLy8vXG5cbiAgICAgICAgcmVmZXJlbmNlID0gY29udGV4dC5maW5kUmVmZXJlbmNlQnlNZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpO1xuXG4gICAgICAgIHJldHVybiBtZXRhdmFyaWFibGUudW5pZnlSZWZlcmVuY2UocmVmZXJlbmNlLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCAocmVmZXJlbmNlVW5pZmllcykgPT4ge1xuICAgICAgICAgIGxldCBzdWNjZXNzID0gZmFsc2U7XG5cbiAgICAgICAgICBpZiAocmVmZXJlbmNlVW5pZmllcykge1xuICAgICAgICAgICAgc3VjY2VzcyA9IHRydWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihzdWNjZXNzKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSxcbiAgICB7XG4gICAgICBnZW5lcmFsTm9kZVF1ZXJ5OiBzdGF0ZW1lbnRNZXRhdmFyaWFibGVOb2RlUXVlcnksXG4gICAgICBzcGVjaWZpY05vZGVRdWVyeTogc3RhdGVtZW50Tm9kZVF1ZXJ5LFxuICAgICAgcnVuOiAoZ2VuZXJhbFN0YXRlbWVudE1ldGF2YXJpYWJsZU5vZGUsIHNwZWNpZmljU3RhdGVtZW50Tm9kZSwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgY29udGludWF0aW9uKSA9PiB7XG4gICAgICAgIGNvbnN0IHN0YXRlbWVudE5vZGUgPSBzcGVjaWZpY1N0YXRlbWVudE5vZGUsIC8vL1xuICAgICAgICAgICAgICBtZXRhdmFyaWFibGVOb2RlID0gZ2VuZXJhbFN0YXRlbWVudE1ldGF2YXJpYWJsZU5vZGU7XG5cbiAgICAgICAgbGV0IGNvbnRleHQ7XG5cbiAgICAgICAgY29udGV4dCA9IGdlbmVyYWxDb250ZXh0OyAvLy9cblxuICAgICAgICBjb25zdCBtZXRhdmFyaWFibGUgPSBjb250ZXh0LmZpbmRNZXRhdmFyaWFibGVCeU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSk7XG5cbiAgICAgICAgY29udGV4dCA9IHNwZWNpZmljQ29udGV4dDsgIC8vL1xuXG4gICAgICAgIGNvbnN0IHN0YXRlbWVudCA9IGNvbnRleHQuZmluZFN0YXRlbWVudEJ5U3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlKTtcblxuICAgICAgICByZXR1cm4gbWV0YXZhcmlhYmxlLnVuaWZ5U3RhdGVtZW50KHN0YXRlbWVudCwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgKHN0YXRlbWVudFVuaWZpZXMpID0+IHtcbiAgICAgICAgICBsZXQgc3VjY2VzcyA9IGZhbHNlO1xuXG4gICAgICAgICAgaWYgKHN0YXRlbWVudFVuaWZpZXMpIHtcbiAgICAgICAgICAgIHN1Y2Nlc3MgPSB0cnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBjb250aW51YXRpb24oc3VjY2Vzcyk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0sXG4gICAge1xuICAgICAgZ2VuZXJhbE5vZGVRdWVyeTogZnJhbWVNZXRhdmFyaWFibGVOb2RlUXVlcnksXG4gICAgICBzcGVjaWZpY05vZGVRdWVyeTogZnJhbWVOb2RlUXVlcnksXG4gICAgICBydW46IChnZW5lcmFsRnJhbWVNZXRhdmFyaWFibGVOb2RlLCBzcGVjaWZpY0ZyYW1lTm9kZSwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgY29udGludWF0aW9uKSA9PiB7XG4gICAgICAgIGNvbnN0IGZyYW1lTm9kZSA9IHNwZWNpZmljRnJhbWVOb2RlLCAvLy9cbiAgICAgICAgICAgICAgbWV0YXZhcmlhYmxlTm9kZSA9IGdlbmVyYWxGcmFtZU1ldGF2YXJpYWJsZU5vZGU7XG5cbiAgICAgICAgbGV0IGNvbnRleHQ7XG5cbiAgICAgICAgY29udGV4dCA9IGdlbmVyYWxDb250ZXh0OyAvLy9cblxuICAgICAgICBjb25zdCBtZXRhdmFyaWFibGUgPSBjb250ZXh0LmZpbmRNZXRhdmFyaWFibGVCeU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSk7XG5cbiAgICAgICAgY29udGV4dCA9IHNwZWNpZmljQ29udGV4dDsgIC8vL1xuXG4gICAgICAgIGNvbnN0IGZyYW1lID0gY29udGV4dC5maW5kRnJhbWVCeUZyYW1lTm9kZShmcmFtZU5vZGUpO1xuXG4gICAgICAgIHJldHVybiBtZXRhdmFyaWFibGUudW5pZnlGcmFtZShmcmFtZSwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgKGZyYW1lVW5pZmllcykgPT4ge1xuICAgICAgICAgIGxldCBzdWNjZXNzID0gZmFsc2U7XG5cbiAgICAgICAgICBpZiAoZnJhbWVVbmlmaWVzKSB7XG4gICAgICAgICAgICBzdWNjZXNzID0gdHJ1ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gY29udGludWF0aW9uKHN1Y2Nlc3MpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9LFxuICAgIHtcbiAgICAgIGdlbmVyYWxOb2RlUXVlcnk6IHRlcm1WYXJpYWJsZU5vZGVRdWVyeSxcbiAgICAgIHNwZWNpZmljTm9kZVF1ZXJ5OiB0ZXJtTm9kZVF1ZXJ5LFxuICAgICAgcnVuOiAoZ2VuZXJhbFRlcm1WYXJpYWJsZU5vZGUsIHNwZWNpZmljVGVybU5vZGUsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIGNvbnRpbnVhdGlvbikgPT4ge1xuICAgICAgICBjb25zdCB0ZXJtTm9kZSA9IHNwZWNpZmljVGVybU5vZGUsIC8vL1xuICAgICAgICAgICAgICB2YXJpYWJsZU5vZGUgPSBnZW5lcmFsVGVybVZhcmlhYmxlTm9kZTsgLy8vXG5cbiAgICAgICAgbGV0IGNvbnRleHQ7XG5cbiAgICAgICAgY29udGV4dCA9IGdlbmVyYWxDb250ZXh0OyAvLy9cblxuICAgICAgICBjb25zdCB2YXJpYWJsZUlkZW50aWZpZXIgPSB2YXJpYWJsZU5vZGUuZ2V0VmFyaWFibGVJZGVudGlmaWVyKCksXG4gICAgICAgICAgICAgIGRlY2xhcmVkVmFyaWFibGUgPSBjb250ZXh0LmZpbmREZWNsYXJlZFZhcmlhYmxlQnlWYXJpYWJsZUlkZW50aWZpZXIodmFyaWFibGVJZGVudGlmaWVyKSxcbiAgICAgICAgICAgICAgdmFyaWFibGUgPSBkZWNsYXJlZFZhcmlhYmxlOyAgLy8vXG5cbiAgICAgICAgY29udGV4dCA9IHNwZWNpZmljQ29udGV4dDsgIC8vL1xuXG4gICAgICAgIGNvbnN0IHRlcm0gPSBjb250ZXh0LmZpbmRUZXJtQnlUZXJtTm9kZSh0ZXJtTm9kZSk7XG5cbiAgICAgICAgcmV0dXJuIHZhcmlhYmxlLnVuaWZ5VGVybSh0ZXJtLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCAodGVybVVuaWZpZXMpID0+IHtcbiAgICAgICAgICBsZXQgc3VjY2VzcyA9IGZhbHNlO1xuXG4gICAgICAgICAgaWYgKHRlcm1VbmlmaWVzKSB7XG4gICAgICAgICAgICBzdWNjZXNzID0gdHJ1ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gY29udGludWF0aW9uKHN1Y2Nlc3MpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9LFxuICAgIHtcbiAgICAgIGdlbmVyYWxOb2RlUXVlcnk6IHNpZ25hdHVyZU5vZGVRdWVyeSxcbiAgICAgIHNwZWNpZmljTm9kZVF1ZXJ5OiBzaWduYXR1cmVOb2RlUXVlcnksXG4gICAgICBydW46IChnZW5lcmFsU2lnbmF0dXJlTm9kZSwgc3BlY2lmaWNTaWduYXR1cmVOb2RlLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCBjb250aW51YXRpb24pID0+IHtcbiAgICAgICAgbGV0IGNvbnRleHQ7XG5cbiAgICAgICAgY29udGV4dCA9IGdlbmVyYWxDb250ZXh0OyAvLy9cblxuICAgICAgICBjb25zdCBnZW5lcmFsU2lnbmF0dXJlID0gY29udGV4dC5maW5kU2lnbmF0dXJlQnlTaWduYXR1cmVOb2RlKGdlbmVyYWxTaWduYXR1cmVOb2RlKTtcblxuICAgICAgICBjb250ZXh0ID0gc3BlY2lmaWNDb250ZXh0OyAgLy8vXG5cbiAgICAgICAgY29uc3Qgc3BlY2lmaWNTaWduYXR1cmUgPSBjb250ZXh0LmZpbmRTaWduYXR1cmVCeVNpZ25hdHVyZU5vZGUoc3BlY2lmaWNTaWduYXR1cmVOb2RlKTtcblxuICAgICAgICByZWNvbmNpbGUoKGNvbnRleHQpID0+IHtcbiAgICAgICAgICByZXR1cm4gZ2VuZXJhbFNpZ25hdHVyZS51bmlmeVNpZ25hdHVyZShzcGVjaWZpY1NpZ25hdHVyZSwgY29udGV4dCwgKHNpZ25hdHVyZVVuaWZpZXMpID0+IHtcbiAgICAgICAgICAgIGxldCBzdWNjZXNzID0gZmFsc2U7XG5cbiAgICAgICAgICAgIGlmIChzaWduYXR1cmVVbmlmaWVzKSB7XG4gICAgICAgICAgICAgIHN1Y2Nlc3MgPSB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gY29udGludWF0aW9uKHN1Y2Nlc3MpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9LCBjb250ZXh0KVxuICAgICAgfVxuICAgIH1cbiAgXTtcbn1cblxuY2xhc3MgQ29tYmluYXRvclBhc3MgZXh0ZW5kcyBDb250aW51YXRpb25aaXBQYXNzIHtcbiAgc3RhdGljIG1hcHMgPSBbXG4gICAge1xuICAgICAgZ2VuZXJhbE5vZGVRdWVyeTogbWV0YVR5cGVOb2RlUXVlcnksXG4gICAgICBzcGVjaWZpY05vZGVRdWVyeTogc3RhdGVtZW50Tm9kZVF1ZXJ5LFxuICAgICAgcnVuOiAoZ2VuZXJhbE1ldGFUeXBlTm9kZSwgc3BlY2lmaWNTdGF0ZW1lbnROb2RlLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCBjb250aW51YXRpb24pID0+IHtcbiAgICAgICAgY29uc3QgY29udGV4dCA9IHNwZWNpZmljQ29udGV4dCwgIC8vL1xuICAgICAgICAgICAgICBtZXRhVHlwZU5vZGUgPSBnZW5lcmFsTWV0YVR5cGVOb2RlLCAvLy9cbiAgICAgICAgICAgICAgbWV0YVR5cGVOYW1lID0gbWV0YVR5cGVOb2RlLmdldE1ldGFUeXBlTmFtZSgpLFxuICAgICAgICAgICAgICBtZXRhVHlwZU5hbWVTdGF0ZW1lbnRNZXRhVHlwZU5hbWUgPSAobWV0YVR5cGVOYW1lID09PSBTVEFURU1FTlRfTUVUQV9UWVBFX05BTUUpO1xuXG4gICAgICAgIGxldCBzdWNjZXNzID0gZmFsc2U7XG5cbiAgICAgICAgaWYgKCFtZXRhVHlwZU5hbWVTdGF0ZW1lbnRNZXRhVHlwZU5hbWUpIHtcbiAgICAgICAgICByZXR1cm4gY29udGludWF0aW9uKHN1Y2Nlc3MsIGNvbnRleHQpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgc3RhdGVtZW50Tm9kZSA9IHNwZWNpZmljU3RhdGVtZW50Tm9kZSwgIC8vL1xuICAgICAgICAgICAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KTtcblxuICAgICAgICByZXR1cm4gc3RhdGVtZW50LnZhbGlkYXRlKGNvbnRleHQsIChzdGF0ZW1lbnQsIGNvbnRleHQpID0+IHtcbiAgICAgICAgICBpZiAoc3RhdGVtZW50ICE9PSBudWxsKSB7XG4gICAgICAgICAgICBzdWNjZXNzID0gdHJ1ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gY29udGludWF0aW9uKHN1Y2Nlc3MsIGNvbnRleHQpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9LFxuICAgIHtcbiAgICAgIGdlbmVyYWxOb2RlUXVlcnk6IG1ldGFUeXBlTm9kZVF1ZXJ5LFxuICAgICAgc3BlY2lmaWNOb2RlUXVlcnk6IGZyYW1lTm9kZVF1ZXJ5LFxuICAgICAgcnVuOiAoZ2VuZXJhbE1ldGFUeXBlTm9kZSwgc3BlY2lmaWNGcmFtZU5vZGUsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIGNvbnRpbnVhdGlvbikgPT4ge1xuICAgICAgICBjb25zdCBjb250ZXh0ID0gc3BlY2lmaWNDb250ZXh0LCAgLy8vXG4gICAgICAgICAgICAgIG1ldGFUeXBlTm9kZSA9IGdlbmVyYWxNZXRhVHlwZU5vZGUsIC8vL1xuICAgICAgICAgICAgICBtZXRhVHlwZU5hbWUgPSBtZXRhVHlwZU5vZGUuZ2V0TWV0YVR5cGVOYW1lKCksXG4gICAgICAgICAgICAgIG1ldGFUeXBlTmFtZUZyYW1lTWV0YVR5cGVOYW1lID0gKG1ldGFUeXBlTmFtZSA9PT0gRlJBTUVfTUVUQV9UWVBFX05BTUUpO1xuXG4gICAgICAgIGxldCBzdWNjZXNzID0gZmFsc2U7XG5cbiAgICAgICAgaWYgKCFtZXRhVHlwZU5hbWVGcmFtZU1ldGFUeXBlTmFtZSkge1xuICAgICAgICAgIHJldHVybiBjb250aW51YXRpb24oc3VjY2VzcywgY29udGV4dCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBmcmFtZU5vZGUgPSBzcGVjaWZpY0ZyYW1lTm9kZSwgIC8vL1xuICAgICAgICAgICAgICBmcmFtZSA9IGZyYW1lRnJvbUZyYW1lTm9kZShmcmFtZU5vZGUsIGNvbnRleHQpO1xuXG4gICAgICAgIHJldHVybiBmcmFtZS52YWxpZGF0ZShjb250ZXh0LCAoZnJhbWUsIGNvbnRleHQpID0+IHtcbiAgICAgICAgICBpZiAoZnJhbWUgIT09IG51bGwpIHtcbiAgICAgICAgICAgIHN1Y2Nlc3MgPSB0cnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBjb250aW51YXRpb24oc3VjY2VzcywgY29udGV4dCk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0sXG4gICAge1xuICAgICAgZ2VuZXJhbE5vZGVRdWVyeTogdHlwZU5vZGVRdWVyeSxcbiAgICAgIHNwZWNpZmljTm9kZVF1ZXJ5OiB0ZXJtTm9kZVF1ZXJ5LFxuICAgICAgcnVuOiAoZ2VuZXJhbFR5cGVOb2RlLCBzcGVjaWZpY1Rlcm1Ob2RlLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCBjb250aW51YXRpb24pID0+IHtcbiAgICAgICAgY29uc3QgdHlwZU5vZGUgPSBnZW5lcmFsVHlwZU5vZGUsIC8vL1xuICAgICAgICAgICAgICB0ZXJtTm9kZSA9IHNwZWNpZmljVGVybU5vZGUsIC8vL1xuICAgICAgICAgICAgICBub21pbmFsVHlwZU5hbWUgPSB0eXBlTm9kZS5nZXROb21pbmFsVHlwZU5hbWUoKTtcblxuICAgICAgICBsZXQgY29udGV4dDtcblxuICAgICAgICBjb250ZXh0ID0gZ2VuZXJhbENvbnRleHQ7IC8vL1xuXG4gICAgICAgIGNvbnN0IHR5cGUgPSBjb250ZXh0LmZpbmRUeXBlQnlOb21pbmFsVHlwZU5hbWUobm9taW5hbFR5cGVOYW1lKTtcblxuICAgICAgICBjb250ZXh0ID0gc3BlY2lmaWNDb250ZXh0OyAgLy8vXG5cbiAgICAgICAgY29uc3QgdGVybSA9IHRlcm1Gcm9tVGVybU5vZGUodGVybU5vZGUsIGNvbnRleHQpO1xuXG4gICAgICAgIHJldHVybiB0ZXJtLnZhbGlkYXRlR2l2ZW5UeXBlKHR5cGUsIGNvbnRleHQsICh0ZXJtLCBjb250ZXh0KSA9PiB7XG4gICAgICAgICAgbGV0IHN1Y2Nlc3MgPSBmYWxzZTtcblxuICAgICAgICAgIGlmICh0ZXJtICE9PSBudWxsKSB7XG4gICAgICAgICAgICBzdWNjZXNzID0gdHJ1ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gY29udGludWF0aW9uKHN1Y2Nlc3MsIGNvbnRleHQpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIF07XG59XG5cbmNsYXNzIE1ldGF2YXJpYWJsZVBhc3MgZXh0ZW5kcyBDb250aW51YXRpb25aaXBQYXNzIHtcbiAgc3RhdGljIG1hcHMgPSBbXG4gICAge1xuICAgICAgZ2VuZXJhbE5vZGVRdWVyeTogdHlwZU5vZGVRdWVyeSxcbiAgICAgIHNwZWNpZmljTm9kZVF1ZXJ5OiB0ZXJtTm9kZVF1ZXJ5LFxuICAgICAgcnVuOiAoZ2VuZXJhbFR5cGVOb2RlLCBzcGVjaWZpY1Rlcm1Ob2RlLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCBjb250aW51YXRpb24pID0+IHtcbiAgICAgICAgbGV0IHN1Y2Nlc3MgPSBmYWxzZTtcblxuICAgICAgICBsZXQgY29udGV4dDtcblxuICAgICAgICBjb25zdCB0eXBlTm9kZSA9IGdlbmVyYWxUeXBlTm9kZSwgLy8vXG4gICAgICAgICAgICAgIHRlcm1Ob2RlID0gc3BlY2lmaWNUZXJtTm9kZSwgLy8vXG4gICAgICAgICAgICAgIG5vbWluYWxUeXBlTmFtZSA9IHR5cGVOb2RlLmdldE5vbWluYWxUeXBlTmFtZSgpO1xuXG4gICAgICAgIGNvbnRleHQgPSBnZW5lcmFsQ29udGV4dDsgLy8vXG5cbiAgICAgICAgY29uc3QgdHlwZSA9IGNvbnRleHQuZmluZFR5cGVCeU5vbWluYWxUeXBlTmFtZShub21pbmFsVHlwZU5hbWUpO1xuXG4gICAgICAgIGNvbnRleHQgPSBzcGVjaWZpY0NvbnRleHQ7IC8vL1xuXG4gICAgICAgIGNvbnN0IHRlcm0gPSBjb250ZXh0LmZpbmRUZXJtQnlUZXJtTm9kZSh0ZXJtTm9kZSksXG4gICAgICAgICAgICAgIHRlcm1UeXBlID0gdGVybS5nZXRUeXBlKCksXG4gICAgICAgICAgICAgIHRlcm1UeXBlRXF1YWxUb09yU3ViVHlwZU9mR2l2ZW5UeXBlVHlwZSA9IHRlcm1UeXBlLmlzRXF1YWxUb09yU3ViVHlwZU9mKHR5cGUpO1xuXG4gICAgICAgIGlmICh0ZXJtVHlwZUVxdWFsVG9PclN1YlR5cGVPZkdpdmVuVHlwZVR5cGUpIHtcbiAgICAgICAgICBzdWNjZXNzID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBjb250aW51YXRpb24oc3VjY2Vzcyk7XG4gICAgICB9XG4gICAgfVxuICBdO1xufVxuXG5jbGFzcyBJbnRyaW5zaWNUZXJtUGFzcyBleHRlbmRzIENvbnRpbnVhdGlvblppcFBhc3NCYXNlIHtcbiAgc3RhdGljIG1hcHMgPSBbXG4gICAge1xuICAgICAgZ2VuZXJhbE5vZGVRdWVyeTogdGVybVZhcmlhYmxlTm9kZVF1ZXJ5LFxuICAgICAgc3BlY2lmaWNOb2RlUXVlcnk6IHRlcm1Ob2RlUXVlcnksXG4gICAgICBydW46IChnZW5lcmFsVGVybVZhcmlhYmxlTm9kZSwgc3BlY2lmaWNUZXJtTm9kZSwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgY29udGludWF0aW9uKSA9PiB7XG4gICAgICAgIGNvbnN0IHRlcm1Ob2RlID0gc3BlY2lmaWNUZXJtTm9kZSwgLy8vXG4gICAgICAgICAgICAgIHZhcmlhYmxlTm9kZSA9IGdlbmVyYWxUZXJtVmFyaWFibGVOb2RlOyAvLy9cblxuICAgICAgICBsZXQgY29udGV4dDtcblxuICAgICAgICBjb250ZXh0ID0gZ2VuZXJhbENvbnRleHQ7IC8vL1xuXG4gICAgICAgIGNvbnN0IHZhcmlhYmxlSWRlbnRpZmllciA9IHZhcmlhYmxlTm9kZS5nZXRWYXJpYWJsZUlkZW50aWZpZXIoKSxcbiAgICAgICAgICAgICAgZGVjbGFyZWRWYXJpYWJsZSA9IGNvbnRleHQuZmluZERlY2xhcmVkVmFyaWFibGVCeVZhcmlhYmxlSWRlbnRpZmllcih2YXJpYWJsZUlkZW50aWZpZXIpLFxuICAgICAgICAgICAgICB2YXJpYWJsZSA9IGRlY2xhcmVkVmFyaWFibGU7ICAvLy9cblxuICAgICAgICBjb250ZXh0ID0gc3BlY2lmaWNDb250ZXh0OyAgLy8vXG5cbiAgICAgICAgY29uc3QgdGVybSA9IGNvbnRleHQuZmluZFRlcm1CeVRlcm1Ob2RlKHRlcm1Ob2RlKTtcblxuICAgICAgICByZXR1cm4gdmFyaWFibGUudW5pZnlUZXJtKHRlcm0sIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsICh0ZXJtVW5pZmllcykgPT4ge1xuICAgICAgICAgIGxldCBzdWNjZXNzID0gZmFsc2U7XG5cbiAgICAgICAgICBpZiAodGVybVVuaWZpZXMpIHtcbiAgICAgICAgICAgIHN1Y2Nlc3MgPSB0cnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBjb250aW51YXRpb24oc3VjY2Vzcyk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgXTtcbn1cblxuY2xhc3MgSW50cmluc2ljTWV0YXZhcmlhYmxlUGFzcyBleHRlbmRzIENvbnRpbnVhdGlvblppcFBhc3Mge1xuICBzdGF0aWMgbWFwcyA9IFtcbiAgICB7XG4gICAgICBnZW5lcmFsTm9kZVF1ZXJ5OiB0ZXJtVmFyaWFibGVOb2RlUXVlcnksXG4gICAgICBzcGVjaWZpY05vZGVRdWVyeTogdGVybU5vZGVRdWVyeSxcbiAgICAgIHJ1bjogKGdlbmVyYWxUZXJtVmFyaWFibGVOb2RlLCBzcGVjaWZpY1Rlcm1Ob2RlLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCBjb250aW51YXRpb24pID0+IHtcbiAgICAgICAgY29uc3QgdGVybU5vZGUgPSBzcGVjaWZpY1Rlcm1Ob2RlLCAvLy9cbiAgICAgICAgICAgICAgdmFyaWFibGVOb2RlID0gZ2VuZXJhbFRlcm1WYXJpYWJsZU5vZGU7IC8vL1xuXG4gICAgICAgIGxldCBjb250ZXh0O1xuXG4gICAgICAgIGNvbnRleHQgPSBnZW5lcmFsQ29udGV4dDsgLy8vXG5cbiAgICAgICAgY29uc3QgdmFyaWFibGVJZGVudGlmaWVyID0gdmFyaWFibGVOb2RlLmdldFZhcmlhYmxlSWRlbnRpZmllcigpLFxuICAgICAgICAgICAgICBkZWNsYXJlZFZhcmlhYmxlID0gY29udGV4dC5maW5kRGVjbGFyZWRWYXJpYWJsZUJ5VmFyaWFibGVJZGVudGlmaWVyKHZhcmlhYmxlSWRlbnRpZmllciksXG4gICAgICAgICAgICAgIHZhcmlhYmxlID0gZGVjbGFyZWRWYXJpYWJsZTsgIC8vL1xuXG4gICAgICAgIGNvbnRleHQgPSBzcGVjaWZpY0NvbnRleHQ7ICAvLy9cblxuICAgICAgICBjb25zdCB0ZXJtID0gY29udGV4dC5maW5kVGVybUJ5VGVybU5vZGUodGVybU5vZGUpO1xuXG4gICAgICAgIHJldHVybiB2YXJpYWJsZS51bmlmeVRlcm0odGVybSwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgKHRlcm1VbmlmaWVzKSA9PiB7XG4gICAgICAgICAgbGV0IHN1Y2Nlc3MgPSBmYWxzZTtcblxuICAgICAgICAgIGlmICh0ZXJtVW5pZmllcykge1xuICAgICAgICAgICAgc3VjY2VzcyA9IHRydWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihzdWNjZXNzKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICBdO1xufVxuXG5jb25zdCBtZXRhTGV2ZWxQYXNzID0gbmV3IE1ldGFMZXZlbFBhc3MoKSxcbiAgICAgIHByb3BlcnR5UGFzcyA9IG5ldyBQcm9wZXJ0eVBhc3MoKSxcbiAgICAgIGdlbmVyYXRvclBhc3MgPSBuZXcgR2VuZXJhdG9yUGFzcygpLFxuICAgICAgY29tYmluYXRvclBhc3MgPSBuZXcgQ29tYmluYXRvclBhc3MoKSxcbiAgICAgIGNvbnN0cnVjdG9yUGFzcyA9IG5ldyBDb25zdHJ1Y3RvclBhc3MoKSxcbiAgICAgIG1ldGF2YXJpYWJsZVBhc3MgPSBuZXcgTWV0YXZhcmlhYmxlUGFzcygpLFxuICAgICAgaW50cmluc2ljVGVybVBhc3MgPSBuZXcgSW50cmluc2ljVGVybVBhc3MoKSxcbiAgICAgIGludHJpbnNpY01ldGF2YXJpYWJsZVBhc3MgPSBuZXcgSW50cmluc2ljTWV0YXZhcmlhYmxlUGFzcygpO1xuXG5leHBvcnQgZnVuY3Rpb24gdW5pZnlTdGF0ZW1lbnQoZ2VuZXJhbFN0YXRlbWVudCwgc3BlY2lmaWNTdGF0ZW1lbnQsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICBjb25zdCBnZW5lcmFsU3RhdGVtZW50Tm9kZSA9IGdlbmVyYWxTdGF0ZW1lbnQuZ2V0Tm9kZSgpLFxuICAgICAgICBzcGVjaWZpY1N0YXRlbWVudE5vZGUgPSBzcGVjaWZpY1N0YXRlbWVudC5nZXROb2RlKCksXG4gICAgICAgIGdlbmVyYWxOb2RlID0gZ2VuZXJhbFN0YXRlbWVudE5vZGUsIC8vL1xuICAgICAgICBzcGVjaWZpY05vZGUgPSBzcGVjaWZpY1N0YXRlbWVudE5vZGU7ICAvLy9cblxuICByZXR1cm4gbWV0YUxldmVsUGFzcy5ydW4oZ2VuZXJhbE5vZGUsIHNwZWNpZmljTm9kZSwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgY29udGludWF0aW9uKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVuaWZ5TWV0YXZhcmlhYmxlKGdlbmVyYWxNZXRhdmFyaWFibGUsIHNwZWNpZmljTWV0YXZhcmlhYmxlLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgY29uc3QgZ2VuZXJhbE1ldGF2YXJpYWJsZU5vZGUgPSBnZW5lcmFsTWV0YXZhcmlhYmxlLmdldE5vZGUoKSxcbiAgICAgICAgc3BlY2lmaWNNZXRhdmFyaWFibGVOb2RlID0gc3BlY2lmaWNNZXRhdmFyaWFibGUuZ2V0Tm9kZSgpO1xuXG4gIHJldHVybiBtZXRhdmFyaWFibGVQYXNzLnJ1bihnZW5lcmFsTWV0YXZhcmlhYmxlTm9kZSwgc3BlY2lmaWNNZXRhdmFyaWFibGVOb2RlLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCBjb250aW51YXRpb24pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdW5pZnlUZXJtV2l0aFByb3BlcnR5KHRlcm0sIHByb3BlcnR5LCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgY29uc3QgdGVybU5vZGUgPSB0ZXJtLmdldE5vZGUoKSxcbiAgICAgICAgcHJvcGVydHlUZXJtID0gcHJvcGVydHkuZ2V0VGVybSgpLFxuICAgICAgICBwcm9wZXJ0eVRlcm1Ob2RlID0gcHJvcGVydHlUZXJtLmdldE5vZGUoKTtcblxuICByZXR1cm4gcHJvcGVydHlQYXNzLnJ1bihwcm9wZXJ0eVRlcm1Ob2RlLCB0ZXJtTm9kZSwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgY29udGludWF0aW9uKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVuaWZ5VGVybVdpdGhHZW5lcmF0b3IodGVybSwgZ2VuZXJhdG9yLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgY29uc3QgdGVybU5vZGUgPSB0ZXJtLmdldE5vZGUoKSxcbiAgICAgICAgZ2VuZXJhdG9yVGVybSA9IGdlbmVyYXRvci5nZXRUZXJtKCksXG4gICAgICAgIGdlbmVyYXRvclRlcm1Ob2RlID0gZ2VuZXJhdG9yVGVybS5nZXROb2RlKCk7XG5cbiAgcmV0dXJuIGdlbmVyYXRvclBhc3MucnVuKGdlbmVyYXRvclRlcm1Ob2RlLCB0ZXJtTm9kZSwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgY29udGludWF0aW9uKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVuaWZ5VGVybVdpdGhDb25zdHJ1Y3Rvcih0ZXJtLCBjb25zdHJ1Y3RvciwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgY29udGludWF0aW9uKSB7XG4gIGNvbnN0IHRlcm1Ob2RlID0gdGVybS5nZXROb2RlKCksXG4gICAgICAgIGNvbnN0cnVjdG9yVGVybSA9IGNvbnN0cnVjdG9yLmdldFRlcm0oKSxcbiAgICAgICAgY29uc3RydWN0b3JUZXJtTm9kZSA9IGNvbnN0cnVjdG9yVGVybS5nZXROb2RlKCk7XG5cbiAgcmV0dXJuIGNvbnN0cnVjdG9yUGFzcy5ydW4oY29uc3RydWN0b3JUZXJtTm9kZSwgdGVybU5vZGUsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIGNvbnRpbnVhdGlvbik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1bmlmeVN0YXRlbWVudFdpdGhDb21iaW5hdG9yKHN0YXRlbWVudCwgY29tYmluYXRvciwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgY29udGludWF0aW9uKSB7XG4gIGNvbnN0IHN0YXRlbWVudE5vZGUgPSBzdGF0ZW1lbnQuZ2V0Tm9kZSgpLFxuICAgICAgICBjb21iaW5hdG9yU3RhdGVtZW50ID0gY29tYmluYXRvci5nZXRTdGF0ZW1lbnQoKSxcbiAgICAgICAgY29tYmluYXRvclN0YXRlbWVudE5vZGUgPSBjb21iaW5hdG9yU3RhdGVtZW50LmdldE5vZGUoKTtcblxuICByZXR1cm4gY29tYmluYXRvclBhc3MucnVuKGNvbWJpbmF0b3JTdGF0ZW1lbnROb2RlLCBzdGF0ZW1lbnROb2RlLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCBjb250aW51YXRpb24pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdW5pZnlUZXJtSW50cmluc2ljYWxseShnZW5lcmFsVGVybSwgc3BlY2lmaWNUZXJtLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgY29uc3QgZ2VuZXJhbFRlcm1Ob2RlID0gZ2VuZXJhbFRlcm0uZ2V0Tm9kZSgpLFxuICAgICAgICBzcGVjaWZpY1Rlcm1Ob2RlID0gc3BlY2lmaWNUZXJtLmdldE5vZGUoKSxcbiAgICAgICAgZ2VuZXJhbE5vZGUgPSBnZW5lcmFsVGVybU5vZGUsIC8vL1xuICAgICAgICBzcGVjaWZpY05vZGUgPSBzcGVjaWZpY1Rlcm1Ob2RlOyAvLy9cblxuICByZXR1cm4gaW50cmluc2ljVGVybVBhc3MucnVuKGdlbmVyYWxOb2RlLCBzcGVjaWZpY05vZGUsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIGNvbnRpbnVhdGlvbik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1bmlmeU1ldGF2YXJpYWJsZUludHJpbnNpY2FsbHkoZ2VuZXJhbE1ldGF2YXJpYWJsZSwgc3BlY2lmaWNNZXRhdmFyaWFibGUsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICBjb25zdCBnZW5lcmFsTWV0YXZhcmlhYmxlTm9kZSA9IGdlbmVyYWxNZXRhdmFyaWFibGUuZ2V0Tm9kZSgpLFxuICAgICAgICBzcGVjaWZpY01ldGF2YXJpYWJsZU5vZGUgPSBzcGVjaWZpY01ldGF2YXJpYWJsZS5nZXROb2RlKCksXG4gICAgICAgIGdlbmVyYWxOb2RlID0gZ2VuZXJhbE1ldGF2YXJpYWJsZU5vZGUsIC8vL1xuICAgICAgICBzcGVjaWZpY05vZGUgPSBzcGVjaWZpY01ldGF2YXJpYWJsZU5vZGU7XG5cbiAgcmV0dXJuIGludHJpbnNpY01ldGF2YXJpYWJsZVBhc3MucnVuKGdlbmVyYWxOb2RlLCBzcGVjaWZpY05vZGUsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIGNvbnRpbnVhdGlvbik7XG59XG4iXSwibmFtZXMiOlsidW5pZnlNZXRhdmFyaWFibGUiLCJ1bmlmeU1ldGF2YXJpYWJsZUludHJpbnNpY2FsbHkiLCJ1bmlmeVN0YXRlbWVudCIsInVuaWZ5U3RhdGVtZW50V2l0aENvbWJpbmF0b3IiLCJ1bmlmeVRlcm1JbnRyaW5zaWNhbGx5IiwidW5pZnlUZXJtV2l0aENvbnN0cnVjdG9yIiwidW5pZnlUZXJtV2l0aEdlbmVyYXRvciIsInVuaWZ5VGVybVdpdGhQcm9wZXJ0eSIsIm5vZGVRdWVyeSIsInF1ZXJ5VXRpbGl0aWVzIiwidHlwZU5vZGVRdWVyeSIsInRlcm1Ob2RlUXVlcnkiLCJmcmFtZU5vZGVRdWVyeSIsIm1ldGFUeXBlTm9kZVF1ZXJ5Iiwic2lnbmF0dXJlTm9kZVF1ZXJ5Iiwic3RhdGVtZW50Tm9kZVF1ZXJ5IiwidGVybVZhcmlhYmxlTm9kZVF1ZXJ5IiwiZnJhbWVNZXRhdmFyaWFibGVOb2RlUXVlcnkiLCJzdGF0ZW1lbnRNZXRhdmFyaWFibGVOb2RlUXVlcnkiLCJhc3N1bXB0aW9uTWV0YXZhcmlhYmxlTm9kZVF1ZXJ5IiwiUHJvcGVydHlQYXNzIiwiQ29udGludWF0aW9uWmlwUGFzcyIsIm1hcHMiLCJnZW5lcmFsTm9kZVF1ZXJ5Iiwic3BlY2lmaWNOb2RlUXVlcnkiLCJydW4iLCJnZW5lcmFsVHlwZU5vZGUiLCJzcGVjaWZpY1Rlcm1Ob2RlIiwiZ2VuZXJhbENvbnRleHQiLCJzcGVjaWZpY0NvbnRleHQiLCJjb250aW51YXRpb24iLCJ0eXBlTm9kZSIsInRlcm1Ob2RlIiwibm9taW5hbFR5cGVOYW1lIiwiZ2V0Tm9taW5hbFR5cGVOYW1lIiwiY29udGV4dCIsInR5cGUiLCJmaW5kVHlwZUJ5Tm9taW5hbFR5cGVOYW1lIiwidGVybSIsInRlcm1Gcm9tVGVybU5vZGUiLCJzdHJpY3QiLCJ2YWxpZGF0ZUdpdmVuVHlwZSIsInN1Y2Nlc3MiLCJHZW5lcmF0b3JQYXNzIiwiQ29uc3RydWN0b3JQYXNzIiwiTWV0YUxldmVsUGFzcyIsIkNvbnRpbnVhdGlvblppcFBhc3NCYXNlIiwiZ2VuZXJhbEFzc3VtcHRpb25NZXRhdmFyaWFibGVOb2RlIiwic3BlY2lmaWNBc3N1bXB0aW9uTWV0YXZhcmlhYmxlTm9kZSIsInJlZmVyZW5jZSIsIm1ldGF2YXJpYWJsZU5vZGUiLCJmaW5kUmVmZXJlbmNlQnlNZXRhdmFyaWFibGVOb2RlIiwibWV0YXZhcmlhYmxlIiwiZ2V0TWV0YXZhcmlhYmxlIiwidW5pZnlSZWZlcmVuY2UiLCJyZWZlcmVuY2VVbmlmaWVzIiwiZ2VuZXJhbFN0YXRlbWVudE1ldGF2YXJpYWJsZU5vZGUiLCJzcGVjaWZpY1N0YXRlbWVudE5vZGUiLCJzdGF0ZW1lbnROb2RlIiwiZmluZE1ldGF2YXJpYWJsZUJ5TWV0YXZhcmlhYmxlTm9kZSIsInN0YXRlbWVudCIsImZpbmRTdGF0ZW1lbnRCeVN0YXRlbWVudE5vZGUiLCJzdGF0ZW1lbnRVbmlmaWVzIiwiZ2VuZXJhbEZyYW1lTWV0YXZhcmlhYmxlTm9kZSIsInNwZWNpZmljRnJhbWVOb2RlIiwiZnJhbWVOb2RlIiwiZnJhbWUiLCJmaW5kRnJhbWVCeUZyYW1lTm9kZSIsInVuaWZ5RnJhbWUiLCJmcmFtZVVuaWZpZXMiLCJnZW5lcmFsVGVybVZhcmlhYmxlTm9kZSIsInZhcmlhYmxlTm9kZSIsInZhcmlhYmxlSWRlbnRpZmllciIsImdldFZhcmlhYmxlSWRlbnRpZmllciIsImRlY2xhcmVkVmFyaWFibGUiLCJmaW5kRGVjbGFyZWRWYXJpYWJsZUJ5VmFyaWFibGVJZGVudGlmaWVyIiwidmFyaWFibGUiLCJmaW5kVGVybUJ5VGVybU5vZGUiLCJ1bmlmeVRlcm0iLCJ0ZXJtVW5pZmllcyIsImdlbmVyYWxTaWduYXR1cmVOb2RlIiwic3BlY2lmaWNTaWduYXR1cmVOb2RlIiwiZ2VuZXJhbFNpZ25hdHVyZSIsImZpbmRTaWduYXR1cmVCeVNpZ25hdHVyZU5vZGUiLCJzcGVjaWZpY1NpZ25hdHVyZSIsInJlY29uY2lsZSIsInVuaWZ5U2lnbmF0dXJlIiwic2lnbmF0dXJlVW5pZmllcyIsIkNvbWJpbmF0b3JQYXNzIiwiZ2VuZXJhbE1ldGFUeXBlTm9kZSIsIm1ldGFUeXBlTm9kZSIsIm1ldGFUeXBlTmFtZSIsImdldE1ldGFUeXBlTmFtZSIsIm1ldGFUeXBlTmFtZVN0YXRlbWVudE1ldGFUeXBlTmFtZSIsIlNUQVRFTUVOVF9NRVRBX1RZUEVfTkFNRSIsInN0YXRlbWVudEZyb21TdGF0ZW1lbnROb2RlIiwidmFsaWRhdGUiLCJtZXRhVHlwZU5hbWVGcmFtZU1ldGFUeXBlTmFtZSIsIkZSQU1FX01FVEFfVFlQRV9OQU1FIiwiZnJhbWVGcm9tRnJhbWVOb2RlIiwiTWV0YXZhcmlhYmxlUGFzcyIsInRlcm1UeXBlIiwiZ2V0VHlwZSIsInRlcm1UeXBlRXF1YWxUb09yU3ViVHlwZU9mR2l2ZW5UeXBlVHlwZSIsImlzRXF1YWxUb09yU3ViVHlwZU9mIiwiSW50cmluc2ljVGVybVBhc3MiLCJJbnRyaW5zaWNNZXRhdmFyaWFibGVQYXNzIiwibWV0YUxldmVsUGFzcyIsInByb3BlcnR5UGFzcyIsImdlbmVyYXRvclBhc3MiLCJjb21iaW5hdG9yUGFzcyIsImNvbnN0cnVjdG9yUGFzcyIsIm1ldGF2YXJpYWJsZVBhc3MiLCJpbnRyaW5zaWNUZXJtUGFzcyIsImludHJpbnNpY01ldGF2YXJpYWJsZVBhc3MiLCJnZW5lcmFsU3RhdGVtZW50Iiwic3BlY2lmaWNTdGF0ZW1lbnQiLCJnZW5lcmFsU3RhdGVtZW50Tm9kZSIsImdldE5vZGUiLCJnZW5lcmFsTm9kZSIsInNwZWNpZmljTm9kZSIsImdlbmVyYWxNZXRhdmFyaWFibGUiLCJzcGVjaWZpY01ldGF2YXJpYWJsZSIsImdlbmVyYWxNZXRhdmFyaWFibGVOb2RlIiwic3BlY2lmaWNNZXRhdmFyaWFibGVOb2RlIiwicHJvcGVydHkiLCJwcm9wZXJ0eVRlcm0iLCJnZXRUZXJtIiwicHJvcGVydHlUZXJtTm9kZSIsImdlbmVyYXRvciIsImdlbmVyYXRvclRlcm0iLCJnZW5lcmF0b3JUZXJtTm9kZSIsImNvbnN0cnVjdG9yIiwiY29uc3RydWN0b3JUZXJtIiwiY29uc3RydWN0b3JUZXJtTm9kZSIsImNvbWJpbmF0b3IiLCJjb21iaW5hdG9yU3RhdGVtZW50IiwiZ2V0U3RhdGVtZW50IiwiY29tYmluYXRvclN0YXRlbWVudE5vZGUiLCJnZW5lcmFsVGVybSIsInNwZWNpZmljVGVybSIsImdlbmVyYWxUZXJtTm9kZSJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7O1FBZ2ZnQkE7ZUFBQUE7O1FBZ0RBQztlQUFBQTs7UUF6REFDO2VBQUFBOztRQXdDQUM7ZUFBQUE7O1FBUUFDO2VBQUFBOztRQWhCQUM7ZUFB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
392
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wcm9jZXNzL3VuaWZ5LmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBxdWVyeVV0aWxpdGllcyB9IGZyb20gXCJvY2NhbS1xdWVyeVwiO1xuaW1wb3J0IHsgQ29udGludWF0aW9uWmlwUGFzcyBhcyBDb250aW51YXRpb25aaXBQYXNzQmFzZSB9IGZyb20gXCJvY2NhbS1sYW5ndWFnZXNcIjtcblxuaW1wb3J0IENvbnRpbnVhdGlvblppcFBhc3MgZnJvbSBcIi4uL3Bhc3MvY29udGludWF0aW9uWmlwXCI7XG5cbmltcG9ydCB7IHJlY29uY2lsZSB9IGZyb20gXCIuLi91dGlsaXRpZXMvY29udGV4dFwiO1xuaW1wb3J0IHsgRlJBTUVfTUVUQV9UWVBFX05BTUUsIFNUQVRFTUVOVF9NRVRBX1RZUEVfTkFNRSB9IGZyb20gXCIuLi9tZXRhVHlwZU5hbWVzXCI7XG5pbXBvcnQgeyB0ZXJtRnJvbVRlcm1Ob2RlLCBmcmFtZUZyb21GcmFtZU5vZGUsIHN0YXRlbWVudEZyb21TdGF0ZW1lbnROb2RlIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9lbGVtZW50XCI7XG5cbmNvbnN0IHsgbm9kZVF1ZXJ5IH0gPSBxdWVyeVV0aWxpdGllcztcblxuY29uc3QgdHlwZU5vZGVRdWVyeSA9IG5vZGVRdWVyeShcIi90eXBlXCIpLFxuICAgICAgdGVybU5vZGVRdWVyeSA9IG5vZGVRdWVyeShcIi90ZXJtXCIpLFxuICAgICAgZnJhbWVOb2RlUXVlcnkgPSBub2RlUXVlcnkoXCIvZnJhbWVcIiksXG4gICAgICBtZXRhVHlwZU5vZGVRdWVyeSA9IG5vZGVRdWVyeShcIi9tZXRhVHlwZVwiKSxcbiAgICAgIHNpZ25hdHVyZU5vZGVRdWVyeSA9IG5vZGVRdWVyeShcIi9zaWduYXR1cmVcIiksXG4gICAgICBzdGF0ZW1lbnROb2RlUXVlcnkgPSBub2RlUXVlcnkoXCIvc3RhdGVtZW50XCIpLFxuICAgICAgdGVybVZhcmlhYmxlTm9kZVF1ZXJ5ID0gbm9kZVF1ZXJ5KFwiL3Rlcm0vdmFyaWFibGUhXCIpLFxuICAgICAgZnJhbWVNZXRhdmFyaWFibGVOb2RlUXVlcnkgPSBub2RlUXVlcnkoXCIvZnJhbWUvbWV0YXZhcmlhYmxlIVwiKSxcbiAgICAgIHN0YXRlbWVudE1ldGF2YXJpYWJsZU5vZGVRdWVyeSA9IG5vZGVRdWVyeShcIi9zdGF0ZW1lbnQvbWV0YXZhcmlhYmxlIVwiKSxcbiAgICAgIGFzc3VtcHRpb25NZXRhdmFyaWFibGVOb2RlUXVlcnkgPSBub2RlUXVlcnkoXCIvYXNzdW1wdGlvbi9tZXRhdmFyaWFibGUhXCIpO1xuXG5jbGFzcyBQcm9wZXJ0eVBhc3MgZXh0ZW5kcyBDb250aW51YXRpb25aaXBQYXNzIHtcbiAgc3RhdGljIG1hcHMgPSBbXG4gICAge1xuICAgICAgZ2VuZXJhbE5vZGVRdWVyeTogdHlwZU5vZGVRdWVyeSxcbiAgICAgIHNwZWNpZmljTm9kZVF1ZXJ5OiB0ZXJtTm9kZVF1ZXJ5LFxuICAgICAgcnVuOiAoZ2VuZXJhbFR5cGVOb2RlLCBzcGVjaWZpY1Rlcm1Ob2RlLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCBjb250aW51YXRpb24pID0+IHtcbiAgICAgICAgY29uc3QgdHlwZU5vZGUgPSBnZW5lcmFsVHlwZU5vZGUsIC8vL1xuICAgICAgICAgICAgICB0ZXJtTm9kZSA9IHNwZWNpZmljVGVybU5vZGUsIC8vL1xuICAgICAgICAgICAgICBub21pbmFsVHlwZU5hbWUgPSB0eXBlTm9kZS5nZXROb21pbmFsVHlwZU5hbWUoKTtcblxuICAgICAgICBsZXQgY29udGV4dDtcblxuICAgICAgICBjb250ZXh0ID0gZ2VuZXJhbENvbnRleHQ7IC8vL1xuXG4gICAgICAgIGNvbnN0IHR5cGUgPSBjb250ZXh0LmZpbmRUeXBlQnlOb21pbmFsVHlwZU5hbWUobm9taW5hbFR5cGVOYW1lKTtcblxuICAgICAgICBpZiAodHlwZSAhPT0gbnVsbCkge1xuICAgICAgICAgIGNvbnRleHQgPSBzcGVjaWZpY0NvbnRleHQ7ICAvLy9cblxuICAgICAgICAgIGNvbnN0IHRlcm0gPSB0ZXJtRnJvbVRlcm1Ob2RlKHRlcm1Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgICAgICAgICBzdHJpY3QgPSBmYWxzZTtcblxuICAgICAgICAgIHRlcm0udmFsaWRhdGVHaXZlblR5cGUoc3RyaWN0LCB0eXBlLCBjb250ZXh0LCAodGVybSkgPT4ge1xuICAgICAgICAgICAgbGV0IHN1Y2Nlc3MgPSBmYWxzZTtcblxuICAgICAgICAgICAgaWYgKHRlcm0gIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgc3VjY2VzcyA9IHRydWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBjb250aW51YXRpb24oc3VjY2Vzcyk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIF07XG59XG5cbmNsYXNzIEdlbmVyYXRvclBhc3MgZXh0ZW5kcyBDb250aW51YXRpb25aaXBQYXNzIHtcbiAgc3RhdGljIG1hcHMgPSBbXG4gICAge1xuICAgICAgZ2VuZXJhbE5vZGVRdWVyeTogdHlwZU5vZGVRdWVyeSxcbiAgICAgIHNwZWNpZmljTm9kZVF1ZXJ5OiB0ZXJtTm9kZVF1ZXJ5LFxuICAgICAgcnVuOiAoZ2VuZXJhbFR5cGVOb2RlLCBzcGVjaWZpY1Rlcm1Ob2RlLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCBjb250aW51YXRpb24pID0+IHtcbiAgICAgICAgY29uc3QgdHlwZU5vZGUgPSBnZW5lcmFsVHlwZU5vZGUsIC8vL1xuICAgICAgICAgICAgICB0ZXJtTm9kZSA9IHNwZWNpZmljVGVybU5vZGUsIC8vL1xuICAgICAgICAgICAgICBub21pbmFsVHlwZU5hbWUgPSB0eXBlTm9kZS5nZXROb21pbmFsVHlwZU5hbWUoKTtcblxuICAgICAgICBsZXQgY29udGV4dDtcblxuICAgICAgICBjb250ZXh0ID0gZ2VuZXJhbENvbnRleHQ7IC8vL1xuXG4gICAgICAgIGNvbnN0IHR5cGUgPSBjb250ZXh0LmZpbmRUeXBlQnlOb21pbmFsVHlwZU5hbWUobm9taW5hbFR5cGVOYW1lKTtcblxuICAgICAgICBpZiAodHlwZSAhPT0gbnVsbCkge1xuICAgICAgICAgIGNvbnRleHQgPSBzcGVjaWZpY0NvbnRleHQ7ICAvLy9cblxuICAgICAgICAgIGNvbnN0IHRlcm0gPSB0ZXJtRnJvbVRlcm1Ob2RlKHRlcm1Ob2RlLCBjb250ZXh0KTtcblxuICAgICAgICAgIHRlcm0udmFsaWRhdGVHaXZlblR5cGUodHlwZSwgY29udGV4dCwgKHRlcm0pID0+IHtcbiAgICAgICAgICAgIGxldCBzdWNjZXNzID0gZmFsc2U7XG5cbiAgICAgICAgICAgIGlmICh0ZXJtICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgIHN1Y2Nlc3MgPSB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gY29udGludWF0aW9uKHN1Y2Nlc3MpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICBdO1xufVxuXG5jbGFzcyBDb25zdHJ1Y3RvclBhc3MgZXh0ZW5kcyBDb250aW51YXRpb25aaXBQYXNzIHtcbiAgc3RhdGljIG1hcHMgPSBbXG4gICAge1xuICAgICAgZ2VuZXJhbE5vZGVRdWVyeTogdHlwZU5vZGVRdWVyeSxcbiAgICAgIHNwZWNpZmljTm9kZVF1ZXJ5OiB0ZXJtTm9kZVF1ZXJ5LFxuICAgICAgcnVuOiAoZ2VuZXJhbFR5cGVOb2RlLCBzcGVjaWZpY1Rlcm1Ob2RlLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCBjb250aW51YXRpb24pID0+IHtcbiAgICAgICAgY29uc3QgdHlwZU5vZGUgPSBnZW5lcmFsVHlwZU5vZGUsIC8vL1xuICAgICAgICAgICAgICB0ZXJtTm9kZSA9IHNwZWNpZmljVGVybU5vZGUsIC8vL1xuICAgICAgICAgICAgICBub21pbmFsVHlwZU5hbWUgPSB0eXBlTm9kZS5nZXROb21pbmFsVHlwZU5hbWUoKTtcblxuICAgICAgICBsZXQgY29udGV4dDtcblxuICAgICAgICBjb250ZXh0ID0gZ2VuZXJhbENvbnRleHQ7IC8vL1xuXG4gICAgICAgIGNvbnN0IHR5cGUgPSBjb250ZXh0LmZpbmRUeXBlQnlOb21pbmFsVHlwZU5hbWUobm9taW5hbFR5cGVOYW1lKTtcblxuICAgICAgICBjb250ZXh0ID0gc3BlY2lmaWNDb250ZXh0OyAgLy8vXG5cbiAgICAgICAgbGV0IHN1Y2Nlc3MgPSBmYWxzZTtcblxuICAgICAgICBpZiAodHlwZSA9PT0gbnVsbCkge1xuICAgICAgICAgIHJldHVybiBjb250aW51YXRpb24oc3VjY2VzcywgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB0ZXJtID0gdGVybUZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgY29udGV4dCk7XG5cbiAgICAgICAgdGVybS52YWxpZGF0ZUdpdmVuVHlwZSh0eXBlLCBjb250ZXh0LCAodGVybSwgY29udGV4dCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHNwZWNpZmljQ29udGV4dCA9IGNvbnRleHQ7ICAvLy9cblxuICAgICAgICAgIGlmICh0ZXJtICE9PSBudWxsKSB7XG4gICAgICAgICAgICBzdWNjZXNzID0gdHJ1ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gY29udGludWF0aW9uKHN1Y2Nlc3MsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIF07XG59XG5cbmNsYXNzIE1ldGFMZXZlbFBhc3MgZXh0ZW5kcyBDb250aW51YXRpb25aaXBQYXNzQmFzZSB7XG4gIHN0YXRpYyBtYXBzID0gW1xuICAgIHtcbiAgICAgIGdlbmVyYWxOb2RlUXVlcnk6IGFzc3VtcHRpb25NZXRhdmFyaWFibGVOb2RlUXVlcnksXG4gICAgICBzcGVjaWZpY05vZGVRdWVyeTogYXNzdW1wdGlvbk1ldGF2YXJpYWJsZU5vZGVRdWVyeSxcbiAgICAgIHJ1bjogKGdlbmVyYWxBc3N1bXB0aW9uTWV0YXZhcmlhYmxlTm9kZSwgc3BlY2lmaWNBc3N1bXB0aW9uTWV0YXZhcmlhYmxlTm9kZSwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgY29udGludWF0aW9uKSA9PiB7XG4gICAgICAgIGxldCBjb250ZXh0LFxuICAgICAgICAgICAgcmVmZXJlbmNlLFxuICAgICAgICAgICAgbWV0YXZhcmlhYmxlTm9kZTtcblxuICAgICAgICBjb250ZXh0ID0gZ2VuZXJhbENvbnRleHQ7IC8vL1xuXG4gICAgICAgIG1ldGF2YXJpYWJsZU5vZGUgPSBnZW5lcmFsQXNzdW1wdGlvbk1ldGF2YXJpYWJsZU5vZGU7ICAvLy9cblxuICAgICAgICByZWZlcmVuY2UgPSBjb250ZXh0LmZpbmRSZWZlcmVuY2VCeU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSk7XG5cbiAgICAgICAgY29uc3QgbWV0YXZhcmlhYmxlID0gcmVmZXJlbmNlLmdldE1ldGF2YXJpYWJsZSgpO1xuXG4gICAgICAgIGNvbnRleHQgPSBzcGVjaWZpY0NvbnRleHQ7ICAvLy9cblxuICAgICAgICBtZXRhdmFyaWFibGVOb2RlID0gc3BlY2lmaWNBc3N1bXB0aW9uTWV0YXZhcmlhYmxlTm9kZTsgLy8vXG5cbiAgICAgICAgcmVmZXJlbmNlID0gY29udGV4dC5maW5kUmVmZXJlbmNlQnlNZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpO1xuXG4gICAgICAgIHJldHVybiBtZXRhdmFyaWFibGUudW5pZnlSZWZlcmVuY2UocmVmZXJlbmNlLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCAocmVmZXJlbmNlVW5pZmllcykgPT4ge1xuICAgICAgICAgIGxldCBzdWNjZXNzID0gZmFsc2U7XG5cbiAgICAgICAgICBpZiAocmVmZXJlbmNlVW5pZmllcykge1xuICAgICAgICAgICAgc3VjY2VzcyA9IHRydWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihzdWNjZXNzKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSxcbiAgICB7XG4gICAgICBnZW5lcmFsTm9kZVF1ZXJ5OiBzdGF0ZW1lbnRNZXRhdmFyaWFibGVOb2RlUXVlcnksXG4gICAgICBzcGVjaWZpY05vZGVRdWVyeTogc3RhdGVtZW50Tm9kZVF1ZXJ5LFxuICAgICAgcnVuOiAoZ2VuZXJhbFN0YXRlbWVudE1ldGF2YXJpYWJsZU5vZGUsIHNwZWNpZmljU3RhdGVtZW50Tm9kZSwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgY29udGludWF0aW9uKSA9PiB7XG4gICAgICAgIGNvbnN0IHN0YXRlbWVudE5vZGUgPSBzcGVjaWZpY1N0YXRlbWVudE5vZGUsIC8vL1xuICAgICAgICAgICAgICBtZXRhdmFyaWFibGVOb2RlID0gZ2VuZXJhbFN0YXRlbWVudE1ldGF2YXJpYWJsZU5vZGU7XG5cbiAgICAgICAgbGV0IGNvbnRleHQ7XG5cbiAgICAgICAgY29udGV4dCA9IGdlbmVyYWxDb250ZXh0OyAvLy9cblxuICAgICAgICBjb25zdCBtZXRhdmFyaWFibGUgPSBjb250ZXh0LmZpbmRNZXRhdmFyaWFibGVCeU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSk7XG5cbiAgICAgICAgY29udGV4dCA9IHNwZWNpZmljQ29udGV4dDsgIC8vL1xuXG4gICAgICAgIGNvbnN0IHN0YXRlbWVudCA9IGNvbnRleHQuZmluZFN0YXRlbWVudEJ5U3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlKTtcblxuICAgICAgICByZXR1cm4gbWV0YXZhcmlhYmxlLnVuaWZ5U3RhdGVtZW50KHN0YXRlbWVudCwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgKHN0YXRlbWVudFVuaWZpZXMpID0+IHtcbiAgICAgICAgICBsZXQgc3VjY2VzcyA9IGZhbHNlO1xuXG4gICAgICAgICAgaWYgKHN0YXRlbWVudFVuaWZpZXMpIHtcbiAgICAgICAgICAgIHN1Y2Nlc3MgPSB0cnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBjb250aW51YXRpb24oc3VjY2Vzcyk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0sXG4gICAge1xuICAgICAgZ2VuZXJhbE5vZGVRdWVyeTogZnJhbWVNZXRhdmFyaWFibGVOb2RlUXVlcnksXG4gICAgICBzcGVjaWZpY05vZGVRdWVyeTogZnJhbWVOb2RlUXVlcnksXG4gICAgICBydW46IChnZW5lcmFsRnJhbWVNZXRhdmFyaWFibGVOb2RlLCBzcGVjaWZpY0ZyYW1lTm9kZSwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgY29udGludWF0aW9uKSA9PiB7XG4gICAgICAgIGNvbnN0IGZyYW1lTm9kZSA9IHNwZWNpZmljRnJhbWVOb2RlLCAvLy9cbiAgICAgICAgICAgICAgbWV0YXZhcmlhYmxlTm9kZSA9IGdlbmVyYWxGcmFtZU1ldGF2YXJpYWJsZU5vZGU7XG5cbiAgICAgICAgbGV0IGNvbnRleHQ7XG5cbiAgICAgICAgY29udGV4dCA9IGdlbmVyYWxDb250ZXh0OyAvLy9cblxuICAgICAgICBjb25zdCBtZXRhdmFyaWFibGUgPSBjb250ZXh0LmZpbmRNZXRhdmFyaWFibGVCeU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSk7XG5cbiAgICAgICAgY29udGV4dCA9IHNwZWNpZmljQ29udGV4dDsgIC8vL1xuXG4gICAgICAgIGNvbnN0IGZyYW1lID0gY29udGV4dC5maW5kRnJhbWVCeUZyYW1lTm9kZShmcmFtZU5vZGUpO1xuXG4gICAgICAgIHJldHVybiBtZXRhdmFyaWFibGUudW5pZnlGcmFtZShmcmFtZSwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgKGZyYW1lVW5pZmllcykgPT4ge1xuICAgICAgICAgIGxldCBzdWNjZXNzID0gZmFsc2U7XG5cbiAgICAgICAgICBpZiAoZnJhbWVVbmlmaWVzKSB7XG4gICAgICAgICAgICBzdWNjZXNzID0gdHJ1ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gY29udGludWF0aW9uKHN1Y2Nlc3MpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9LFxuICAgIHtcbiAgICAgIGdlbmVyYWxOb2RlUXVlcnk6IHRlcm1WYXJpYWJsZU5vZGVRdWVyeSxcbiAgICAgIHNwZWNpZmljTm9kZVF1ZXJ5OiB0ZXJtTm9kZVF1ZXJ5LFxuICAgICAgcnVuOiAoZ2VuZXJhbFRlcm1WYXJpYWJsZU5vZGUsIHNwZWNpZmljVGVybU5vZGUsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIGNvbnRpbnVhdGlvbikgPT4ge1xuICAgICAgICBjb25zdCB0ZXJtTm9kZSA9IHNwZWNpZmljVGVybU5vZGUsIC8vL1xuICAgICAgICAgICAgICB2YXJpYWJsZU5vZGUgPSBnZW5lcmFsVGVybVZhcmlhYmxlTm9kZTsgLy8vXG5cbiAgICAgICAgbGV0IGNvbnRleHQ7XG5cbiAgICAgICAgY29udGV4dCA9IGdlbmVyYWxDb250ZXh0OyAvLy9cblxuICAgICAgICBjb25zdCB2YXJpYWJsZUlkZW50aWZpZXIgPSB2YXJpYWJsZU5vZGUuZ2V0VmFyaWFibGVJZGVudGlmaWVyKCksXG4gICAgICAgICAgICAgIGRlY2xhcmVkVmFyaWFibGUgPSBjb250ZXh0LmZpbmREZWNsYXJlZFZhcmlhYmxlQnlWYXJpYWJsZUlkZW50aWZpZXIodmFyaWFibGVJZGVudGlmaWVyKSxcbiAgICAgICAgICAgICAgdmFyaWFibGUgPSBkZWNsYXJlZFZhcmlhYmxlOyAgLy8vXG5cbiAgICAgICAgY29udGV4dCA9IHNwZWNpZmljQ29udGV4dDsgIC8vL1xuXG4gICAgICAgIGNvbnN0IHRlcm0gPSBjb250ZXh0LmZpbmRUZXJtQnlUZXJtTm9kZSh0ZXJtTm9kZSk7XG5cbiAgICAgICAgcmV0dXJuIHZhcmlhYmxlLnVuaWZ5VGVybSh0ZXJtLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCAodGVybVVuaWZpZXMpID0+IHtcbiAgICAgICAgICBsZXQgc3VjY2VzcyA9IGZhbHNlO1xuXG4gICAgICAgICAgaWYgKHRlcm1VbmlmaWVzKSB7XG4gICAgICAgICAgICBzdWNjZXNzID0gdHJ1ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gY29udGludWF0aW9uKHN1Y2Nlc3MpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9LFxuICAgIHtcbiAgICAgIGdlbmVyYWxOb2RlUXVlcnk6IHNpZ25hdHVyZU5vZGVRdWVyeSxcbiAgICAgIHNwZWNpZmljTm9kZVF1ZXJ5OiBzaWduYXR1cmVOb2RlUXVlcnksXG4gICAgICBydW46IChnZW5lcmFsU2lnbmF0dXJlTm9kZSwgc3BlY2lmaWNTaWduYXR1cmVOb2RlLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCBjb250aW51YXRpb24pID0+IHtcbiAgICAgICAgbGV0IGNvbnRleHQ7XG5cbiAgICAgICAgY29udGV4dCA9IGdlbmVyYWxDb250ZXh0OyAvLy9cblxuICAgICAgICBjb25zdCBnZW5lcmFsU2lnbmF0dXJlID0gY29udGV4dC5maW5kU2lnbmF0dXJlQnlTaWduYXR1cmVOb2RlKGdlbmVyYWxTaWduYXR1cmVOb2RlKTtcblxuICAgICAgICBjb250ZXh0ID0gc3BlY2lmaWNDb250ZXh0OyAgLy8vXG5cbiAgICAgICAgY29uc3Qgc3BlY2lmaWNTaWduYXR1cmUgPSBjb250ZXh0LmZpbmRTaWduYXR1cmVCeVNpZ25hdHVyZU5vZGUoc3BlY2lmaWNTaWduYXR1cmVOb2RlKTtcblxuICAgICAgICByZWNvbmNpbGUoKGNvbnRleHQpID0+IHtcbiAgICAgICAgICByZXR1cm4gZ2VuZXJhbFNpZ25hdHVyZS51bmlmeVNpZ25hdHVyZShzcGVjaWZpY1NpZ25hdHVyZSwgY29udGV4dCwgKHNpZ25hdHVyZVVuaWZpZXMpID0+IHtcbiAgICAgICAgICAgIGxldCBzdWNjZXNzID0gZmFsc2U7XG5cbiAgICAgICAgICAgIGlmIChzaWduYXR1cmVVbmlmaWVzKSB7XG4gICAgICAgICAgICAgIHN1Y2Nlc3MgPSB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gY29udGludWF0aW9uKHN1Y2Nlc3MpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9LCBjb250ZXh0KVxuICAgICAgfVxuICAgIH1cbiAgXTtcbn1cblxuY2xhc3MgQ29tYmluYXRvclBhc3MgZXh0ZW5kcyBDb250aW51YXRpb25aaXBQYXNzIHtcbiAgc3RhdGljIG1hcHMgPSBbXG4gICAge1xuICAgICAgZ2VuZXJhbE5vZGVRdWVyeTogbWV0YVR5cGVOb2RlUXVlcnksXG4gICAgICBzcGVjaWZpY05vZGVRdWVyeTogc3RhdGVtZW50Tm9kZVF1ZXJ5LFxuICAgICAgcnVuOiAoZ2VuZXJhbE1ldGFUeXBlTm9kZSwgc3BlY2lmaWNTdGF0ZW1lbnROb2RlLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCBjb250aW51YXRpb24pID0+IHtcbiAgICAgICAgY29uc3QgbWV0YVR5cGVOb2RlID0gZ2VuZXJhbE1ldGFUeXBlTm9kZSwgLy8vXG4gICAgICAgICAgICAgIG1ldGFUeXBlTmFtZSA9IG1ldGFUeXBlTm9kZS5nZXRNZXRhVHlwZU5hbWUoKSxcbiAgICAgICAgICAgICAgbWV0YVR5cGVOYW1lU3RhdGVtZW50TWV0YVR5cGVOYW1lID0gKG1ldGFUeXBlTmFtZSA9PT0gU1RBVEVNRU5UX01FVEFfVFlQRV9OQU1FKTtcblxuICAgICAgICBsZXQgc3VjY2VzcyA9IGZhbHNlO1xuXG4gICAgICAgIGlmICghbWV0YVR5cGVOYW1lU3RhdGVtZW50TWV0YVR5cGVOYW1lKSB7XG4gICAgICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihzdWNjZXNzLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHN0YXRlbWVudE5vZGUgPSBzcGVjaWZpY1N0YXRlbWVudE5vZGUsICAvLy9cbiAgICAgICAgICAgICAgY29udGV4dCA9IHNwZWNpZmljQ29udGV4dCwgIC8vL1xuICAgICAgICAgICAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KTtcblxuICAgICAgICByZXR1cm4gc3RhdGVtZW50LnZhbGlkYXRlKGNvbnRleHQsIChzdGF0ZW1lbnQsIGNvbnRleHQpID0+IHtcbiAgICAgICAgICBjb25zdCBzcGVjaWZpY0NvbnRleHQgPSBjb250ZXh0OyAgLy8vXG5cbiAgICAgICAgICBpZiAoc3RhdGVtZW50ICE9PSBudWxsKSB7XG4gICAgICAgICAgICBzdWNjZXNzID0gdHJ1ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gY29udGludWF0aW9uKHN1Y2Nlc3MsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9LFxuICAgIHtcbiAgICAgIGdlbmVyYWxOb2RlUXVlcnk6IG1ldGFUeXBlTm9kZVF1ZXJ5LFxuICAgICAgc3BlY2lmaWNOb2RlUXVlcnk6IGZyYW1lTm9kZVF1ZXJ5LFxuICAgICAgcnVuOiAoZ2VuZXJhbE1ldGFUeXBlTm9kZSwgc3BlY2lmaWNGcmFtZU5vZGUsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIGNvbnRpbnVhdGlvbikgPT4ge1xuICAgICAgICBjb25zdCBtZXRhVHlwZU5vZGUgPSBnZW5lcmFsTWV0YVR5cGVOb2RlLCAvLy9cbiAgICAgICAgICAgICAgbWV0YVR5cGVOYW1lID0gbWV0YVR5cGVOb2RlLmdldE1ldGFUeXBlTmFtZSgpLFxuICAgICAgICAgICAgICBtZXRhVHlwZU5hbWVGcmFtZU1ldGFUeXBlTmFtZSA9IChtZXRhVHlwZU5hbWUgPT09IEZSQU1FX01FVEFfVFlQRV9OQU1FKTtcblxuICAgICAgICBsZXQgc3VjY2VzcyA9IGZhbHNlO1xuXG4gICAgICAgIGlmICghbWV0YVR5cGVOYW1lRnJhbWVNZXRhVHlwZU5hbWUpIHtcbiAgICAgICAgICByZXR1cm4gY29udGludWF0aW9uKHN1Y2Nlc3MsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZnJhbWVOb2RlID0gc3BlY2lmaWNGcmFtZU5vZGUsICAvLy9cbiAgICAgICAgICAgICAgY29udGV4dCA9IHNwZWNpZmljQ29udGV4dCwgIC8vL1xuICAgICAgICAgICAgICBmcmFtZSA9IGZyYW1lRnJvbUZyYW1lTm9kZShmcmFtZU5vZGUsIGNvbnRleHQpO1xuXG4gICAgICAgIHJldHVybiBmcmFtZS52YWxpZGF0ZShjb250ZXh0LCAoZnJhbWUsIGNvbnRleHQpID0+IHtcbiAgICAgICAgICBjb25zdCBzcGVjaWZpY0NvbnRleHQgPSBjb250ZXh0OyAvLy9cblxuICAgICAgICAgIGlmIChmcmFtZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgc3VjY2VzcyA9IHRydWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihzdWNjZXNzLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0KTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSxcbiAgICB7XG4gICAgICBnZW5lcmFsTm9kZVF1ZXJ5OiB0eXBlTm9kZVF1ZXJ5LFxuICAgICAgc3BlY2lmaWNOb2RlUXVlcnk6IHRlcm1Ob2RlUXVlcnksXG4gICAgICBydW46IChnZW5lcmFsVHlwZU5vZGUsIHNwZWNpZmljVGVybU5vZGUsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIGNvbnRpbnVhdGlvbikgPT4ge1xuICAgICAgICBjb25zdCB0eXBlTm9kZSA9IGdlbmVyYWxUeXBlTm9kZSwgLy8vXG4gICAgICAgICAgICAgIHRlcm1Ob2RlID0gc3BlY2lmaWNUZXJtTm9kZSwgLy8vXG4gICAgICAgICAgICAgIG5vbWluYWxUeXBlTmFtZSA9IHR5cGVOb2RlLmdldE5vbWluYWxUeXBlTmFtZSgpO1xuXG4gICAgICAgIGxldCBjb250ZXh0O1xuXG4gICAgICAgIGNvbnRleHQgPSBnZW5lcmFsQ29udGV4dDsgLy8vXG5cbiAgICAgICAgY29uc3QgdHlwZSA9IGNvbnRleHQuZmluZFR5cGVCeU5vbWluYWxUeXBlTmFtZShub21pbmFsVHlwZU5hbWUpO1xuXG4gICAgICAgIGNvbnRleHQgPSBzcGVjaWZpY0NvbnRleHQ7ICAvLy9cblxuICAgICAgICBjb25zdCB0ZXJtID0gdGVybUZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgY29udGV4dCk7XG5cbiAgICAgICAgbGV0IHN1Y2Nlc3MgPSBmYWxzZTtcblxuICAgICAgICByZXR1cm4gdGVybS52YWxpZGF0ZUdpdmVuVHlwZSh0eXBlLCBjb250ZXh0LCAodGVybSwgY29udGV4dCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHNwZWNpZmljQ29udGV4dCA9IGNvbnRleHQ7ICAvLy9cblxuICAgICAgICAgIGlmICh0ZXJtICE9PSBudWxsKSB7XG4gICAgICAgICAgICBzdWNjZXNzID0gdHJ1ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gY29udGludWF0aW9uKHN1Y2Nlc3MsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIF07XG59XG5cbmNsYXNzIE1ldGF2YXJpYWJsZVBhc3MgZXh0ZW5kcyBDb250aW51YXRpb25aaXBQYXNzIHtcbiAgc3RhdGljIG1hcHMgPSBbXG4gICAge1xuICAgICAgZ2VuZXJhbE5vZGVRdWVyeTogdHlwZU5vZGVRdWVyeSxcbiAgICAgIHNwZWNpZmljTm9kZVF1ZXJ5OiB0ZXJtTm9kZVF1ZXJ5LFxuICAgICAgcnVuOiAoZ2VuZXJhbFR5cGVOb2RlLCBzcGVjaWZpY1Rlcm1Ob2RlLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCBjb250aW51YXRpb24pID0+IHtcbiAgICAgICAgbGV0IHN1Y2Nlc3MgPSBmYWxzZTtcblxuICAgICAgICBsZXQgY29udGV4dDtcblxuICAgICAgICBjb25zdCB0eXBlTm9kZSA9IGdlbmVyYWxUeXBlTm9kZSwgLy8vXG4gICAgICAgICAgICAgIHRlcm1Ob2RlID0gc3BlY2lmaWNUZXJtTm9kZSwgLy8vXG4gICAgICAgICAgICAgIG5vbWluYWxUeXBlTmFtZSA9IHR5cGVOb2RlLmdldE5vbWluYWxUeXBlTmFtZSgpO1xuXG4gICAgICAgIGNvbnRleHQgPSBnZW5lcmFsQ29udGV4dDsgLy8vXG5cbiAgICAgICAgY29uc3QgdHlwZSA9IGNvbnRleHQuZmluZFR5cGVCeU5vbWluYWxUeXBlTmFtZShub21pbmFsVHlwZU5hbWUpO1xuXG4gICAgICAgIGNvbnRleHQgPSBzcGVjaWZpY0NvbnRleHQ7IC8vL1xuXG4gICAgICAgIGNvbnN0IHRlcm0gPSBjb250ZXh0LmZpbmRUZXJtQnlUZXJtTm9kZSh0ZXJtTm9kZSksXG4gICAgICAgICAgICAgIHRlcm1UeXBlID0gdGVybS5nZXRUeXBlKCksXG4gICAgICAgICAgICAgIHRlcm1UeXBlRXF1YWxUb09yU3ViVHlwZU9mR2l2ZW5UeXBlVHlwZSA9IHRlcm1UeXBlLmlzRXF1YWxUb09yU3ViVHlwZU9mKHR5cGUpO1xuXG4gICAgICAgIGlmICh0ZXJtVHlwZUVxdWFsVG9PclN1YlR5cGVPZkdpdmVuVHlwZVR5cGUpIHtcbiAgICAgICAgICBzdWNjZXNzID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBjb250aW51YXRpb24oc3VjY2Vzcyk7XG4gICAgICB9XG4gICAgfVxuICBdO1xufVxuXG5jbGFzcyBJbnRyaW5zaWNUZXJtUGFzcyBleHRlbmRzIENvbnRpbnVhdGlvblppcFBhc3NCYXNlIHtcbiAgc3RhdGljIG1hcHMgPSBbXG4gICAge1xuICAgICAgZ2VuZXJhbE5vZGVRdWVyeTogdGVybVZhcmlhYmxlTm9kZVF1ZXJ5LFxuICAgICAgc3BlY2lmaWNOb2RlUXVlcnk6IHRlcm1Ob2RlUXVlcnksXG4gICAgICBydW46IChnZW5lcmFsVGVybVZhcmlhYmxlTm9kZSwgc3BlY2lmaWNUZXJtTm9kZSwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgY29udGludWF0aW9uKSA9PiB7XG4gICAgICAgIGNvbnN0IHRlcm1Ob2RlID0gc3BlY2lmaWNUZXJtTm9kZSwgLy8vXG4gICAgICAgICAgICAgIHZhcmlhYmxlTm9kZSA9IGdlbmVyYWxUZXJtVmFyaWFibGVOb2RlOyAvLy9cblxuICAgICAgICBsZXQgY29udGV4dDtcblxuICAgICAgICBjb250ZXh0ID0gZ2VuZXJhbENvbnRleHQ7IC8vL1xuXG4gICAgICAgIGNvbnN0IHZhcmlhYmxlSWRlbnRpZmllciA9IHZhcmlhYmxlTm9kZS5nZXRWYXJpYWJsZUlkZW50aWZpZXIoKSxcbiAgICAgICAgICAgICAgZGVjbGFyZWRWYXJpYWJsZSA9IGNvbnRleHQuZmluZERlY2xhcmVkVmFyaWFibGVCeVZhcmlhYmxlSWRlbnRpZmllcih2YXJpYWJsZUlkZW50aWZpZXIpLFxuICAgICAgICAgICAgICB2YXJpYWJsZSA9IGRlY2xhcmVkVmFyaWFibGU7ICAvLy9cblxuICAgICAgICBjb250ZXh0ID0gc3BlY2lmaWNDb250ZXh0OyAgLy8vXG5cbiAgICAgICAgY29uc3QgdGVybSA9IGNvbnRleHQuZmluZFRlcm1CeVRlcm1Ob2RlKHRlcm1Ob2RlKTtcblxuICAgICAgICByZXR1cm4gdmFyaWFibGUudW5pZnlUZXJtKHRlcm0sIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsICh0ZXJtVW5pZmllcykgPT4ge1xuICAgICAgICAgIGxldCBzdWNjZXNzID0gZmFsc2U7XG5cbiAgICAgICAgICBpZiAodGVybVVuaWZpZXMpIHtcbiAgICAgICAgICAgIHN1Y2Nlc3MgPSB0cnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBjb250aW51YXRpb24oc3VjY2Vzcyk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgXTtcbn1cblxuY2xhc3MgSW50cmluc2ljTWV0YXZhcmlhYmxlUGFzcyBleHRlbmRzIENvbnRpbnVhdGlvblppcFBhc3Mge1xuICBzdGF0aWMgbWFwcyA9IFtcbiAgICB7XG4gICAgICBnZW5lcmFsTm9kZVF1ZXJ5OiB0ZXJtVmFyaWFibGVOb2RlUXVlcnksXG4gICAgICBzcGVjaWZpY05vZGVRdWVyeTogdGVybU5vZGVRdWVyeSxcbiAgICAgIHJ1bjogKGdlbmVyYWxUZXJtVmFyaWFibGVOb2RlLCBzcGVjaWZpY1Rlcm1Ob2RlLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCBjb250aW51YXRpb24pID0+IHtcbiAgICAgICAgY29uc3QgdGVybU5vZGUgPSBzcGVjaWZpY1Rlcm1Ob2RlLCAvLy9cbiAgICAgICAgICAgICAgdmFyaWFibGVOb2RlID0gZ2VuZXJhbFRlcm1WYXJpYWJsZU5vZGU7IC8vL1xuXG4gICAgICAgIGxldCBjb250ZXh0O1xuXG4gICAgICAgIGNvbnRleHQgPSBnZW5lcmFsQ29udGV4dDsgLy8vXG5cbiAgICAgICAgY29uc3QgdmFyaWFibGVJZGVudGlmaWVyID0gdmFyaWFibGVOb2RlLmdldFZhcmlhYmxlSWRlbnRpZmllcigpLFxuICAgICAgICAgICAgICBkZWNsYXJlZFZhcmlhYmxlID0gY29udGV4dC5maW5kRGVjbGFyZWRWYXJpYWJsZUJ5VmFyaWFibGVJZGVudGlmaWVyKHZhcmlhYmxlSWRlbnRpZmllciksXG4gICAgICAgICAgICAgIHZhcmlhYmxlID0gZGVjbGFyZWRWYXJpYWJsZTsgIC8vL1xuXG4gICAgICAgIGNvbnRleHQgPSBzcGVjaWZpY0NvbnRleHQ7ICAvLy9cblxuICAgICAgICBjb25zdCB0ZXJtID0gY29udGV4dC5maW5kVGVybUJ5VGVybU5vZGUodGVybU5vZGUpO1xuXG4gICAgICAgIHJldHVybiB2YXJpYWJsZS51bmlmeVRlcm0odGVybSwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgKHRlcm1VbmlmaWVzKSA9PiB7XG4gICAgICAgICAgbGV0IHN1Y2Nlc3MgPSBmYWxzZTtcblxuICAgICAgICAgIGlmICh0ZXJtVW5pZmllcykge1xuICAgICAgICAgICAgc3VjY2VzcyA9IHRydWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihzdWNjZXNzKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICBdO1xufVxuXG5jb25zdCBtZXRhTGV2ZWxQYXNzID0gbmV3IE1ldGFMZXZlbFBhc3MoKSxcbiAgICAgIHByb3BlcnR5UGFzcyA9IG5ldyBQcm9wZXJ0eVBhc3MoKSxcbiAgICAgIGdlbmVyYXRvclBhc3MgPSBuZXcgR2VuZXJhdG9yUGFzcygpLFxuICAgICAgY29tYmluYXRvclBhc3MgPSBuZXcgQ29tYmluYXRvclBhc3MoKSxcbiAgICAgIGNvbnN0cnVjdG9yUGFzcyA9IG5ldyBDb25zdHJ1Y3RvclBhc3MoKSxcbiAgICAgIG1ldGF2YXJpYWJsZVBhc3MgPSBuZXcgTWV0YXZhcmlhYmxlUGFzcygpLFxuICAgICAgaW50cmluc2ljVGVybVBhc3MgPSBuZXcgSW50cmluc2ljVGVybVBhc3MoKSxcbiAgICAgIGludHJpbnNpY01ldGF2YXJpYWJsZVBhc3MgPSBuZXcgSW50cmluc2ljTWV0YXZhcmlhYmxlUGFzcygpO1xuXG5leHBvcnQgZnVuY3Rpb24gdW5pZnlTdGF0ZW1lbnQoZ2VuZXJhbFN0YXRlbWVudCwgc3BlY2lmaWNTdGF0ZW1lbnQsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICBjb25zdCBnZW5lcmFsU3RhdGVtZW50Tm9kZSA9IGdlbmVyYWxTdGF0ZW1lbnQuZ2V0Tm9kZSgpLFxuICAgICAgICBzcGVjaWZpY1N0YXRlbWVudE5vZGUgPSBzcGVjaWZpY1N0YXRlbWVudC5nZXROb2RlKCksXG4gICAgICAgIGdlbmVyYWxOb2RlID0gZ2VuZXJhbFN0YXRlbWVudE5vZGUsIC8vL1xuICAgICAgICBzcGVjaWZpY05vZGUgPSBzcGVjaWZpY1N0YXRlbWVudE5vZGU7ICAvLy9cblxuICByZXR1cm4gbWV0YUxldmVsUGFzcy5ydW4oZ2VuZXJhbE5vZGUsIHNwZWNpZmljTm9kZSwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgY29udGludWF0aW9uKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVuaWZ5TWV0YXZhcmlhYmxlKGdlbmVyYWxNZXRhdmFyaWFibGUsIHNwZWNpZmljTWV0YXZhcmlhYmxlLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgY29uc3QgZ2VuZXJhbE1ldGF2YXJpYWJsZU5vZGUgPSBnZW5lcmFsTWV0YXZhcmlhYmxlLmdldE5vZGUoKSxcbiAgICAgICAgc3BlY2lmaWNNZXRhdmFyaWFibGVOb2RlID0gc3BlY2lmaWNNZXRhdmFyaWFibGUuZ2V0Tm9kZSgpO1xuXG4gIHJldHVybiBtZXRhdmFyaWFibGVQYXNzLnJ1bihnZW5lcmFsTWV0YXZhcmlhYmxlTm9kZSwgc3BlY2lmaWNNZXRhdmFyaWFibGVOb2RlLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCBjb250aW51YXRpb24pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdW5pZnlUZXJtV2l0aFByb3BlcnR5KHRlcm0sIHByb3BlcnR5LCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgY29uc3QgdGVybU5vZGUgPSB0ZXJtLmdldE5vZGUoKSxcbiAgICAgICAgcHJvcGVydHlUZXJtID0gcHJvcGVydHkuZ2V0VGVybSgpLFxuICAgICAgICBwcm9wZXJ0eVRlcm1Ob2RlID0gcHJvcGVydHlUZXJtLmdldE5vZGUoKTtcblxuICByZXR1cm4gcHJvcGVydHlQYXNzLnJ1bihwcm9wZXJ0eVRlcm1Ob2RlLCB0ZXJtTm9kZSwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgY29udGludWF0aW9uKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVuaWZ5VGVybVdpdGhHZW5lcmF0b3IodGVybSwgZ2VuZXJhdG9yLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgY29uc3QgdGVybU5vZGUgPSB0ZXJtLmdldE5vZGUoKSxcbiAgICAgICAgZ2VuZXJhdG9yVGVybSA9IGdlbmVyYXRvci5nZXRUZXJtKCksXG4gICAgICAgIGdlbmVyYXRvclRlcm1Ob2RlID0gZ2VuZXJhdG9yVGVybS5nZXROb2RlKCk7XG5cbiAgcmV0dXJuIGdlbmVyYXRvclBhc3MucnVuKGdlbmVyYXRvclRlcm1Ob2RlLCB0ZXJtTm9kZSwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgY29udGludWF0aW9uKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVuaWZ5VGVybVdpdGhDb25zdHJ1Y3Rvcih0ZXJtLCBjb25zdHJ1Y3RvciwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgY29udGludWF0aW9uKSB7XG4gIGNvbnN0IHRlcm1Ob2RlID0gdGVybS5nZXROb2RlKCksXG4gICAgICAgIGNvbnN0cnVjdG9yVGVybSA9IGNvbnN0cnVjdG9yLmdldFRlcm0oKSxcbiAgICAgICAgY29uc3RydWN0b3JUZXJtTm9kZSA9IGNvbnN0cnVjdG9yVGVybS5nZXROb2RlKCk7XG5cbiAgcmV0dXJuIGNvbnN0cnVjdG9yUGFzcy5ydW4oY29uc3RydWN0b3JUZXJtTm9kZSwgdGVybU5vZGUsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIGNvbnRpbnVhdGlvbik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1bmlmeVN0YXRlbWVudFdpdGhDb21iaW5hdG9yKHN0YXRlbWVudCwgY29tYmluYXRvciwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgY29udGludWF0aW9uKSB7XG4gIGNvbnN0IHN0YXRlbWVudE5vZGUgPSBzdGF0ZW1lbnQuZ2V0Tm9kZSgpLFxuICAgICAgICBjb21iaW5hdG9yU3RhdGVtZW50ID0gY29tYmluYXRvci5nZXRTdGF0ZW1lbnQoKSxcbiAgICAgICAgY29tYmluYXRvclN0YXRlbWVudE5vZGUgPSBjb21iaW5hdG9yU3RhdGVtZW50LmdldE5vZGUoKTtcblxuICByZXR1cm4gY29tYmluYXRvclBhc3MucnVuKGNvbWJpbmF0b3JTdGF0ZW1lbnROb2RlLCBzdGF0ZW1lbnROb2RlLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCBjb250aW51YXRpb24pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdW5pZnlUZXJtSW50cmluc2ljYWxseShnZW5lcmFsVGVybSwgc3BlY2lmaWNUZXJtLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgY29uc3QgZ2VuZXJhbFRlcm1Ob2RlID0gZ2VuZXJhbFRlcm0uZ2V0Tm9kZSgpLFxuICAgICAgICBzcGVjaWZpY1Rlcm1Ob2RlID0gc3BlY2lmaWNUZXJtLmdldE5vZGUoKSxcbiAgICAgICAgZ2VuZXJhbE5vZGUgPSBnZW5lcmFsVGVybU5vZGUsIC8vL1xuICAgICAgICBzcGVjaWZpY05vZGUgPSBzcGVjaWZpY1Rlcm1Ob2RlOyAvLy9cblxuICByZXR1cm4gaW50cmluc2ljVGVybVBhc3MucnVuKGdlbmVyYWxOb2RlLCBzcGVjaWZpY05vZGUsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIGNvbnRpbnVhdGlvbik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1bmlmeU1ldGF2YXJpYWJsZUludHJpbnNpY2FsbHkoZ2VuZXJhbE1ldGF2YXJpYWJsZSwgc3BlY2lmaWNNZXRhdmFyaWFibGUsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICBjb25zdCBnZW5lcmFsTWV0YXZhcmlhYmxlTm9kZSA9IGdlbmVyYWxNZXRhdmFyaWFibGUuZ2V0Tm9kZSgpLFxuICAgICAgICBzcGVjaWZpY01ldGF2YXJpYWJsZU5vZGUgPSBzcGVjaWZpY01ldGF2YXJpYWJsZS5nZXROb2RlKCksXG4gICAgICAgIGdlbmVyYWxOb2RlID0gZ2VuZXJhbE1ldGF2YXJpYWJsZU5vZGUsIC8vL1xuICAgICAgICBzcGVjaWZpY05vZGUgPSBzcGVjaWZpY01ldGF2YXJpYWJsZU5vZGU7XG5cbiAgcmV0dXJuIGludHJpbnNpY01ldGF2YXJpYWJsZVBhc3MucnVuKGdlbmVyYWxOb2RlLCBzcGVjaWZpY05vZGUsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIGNvbnRpbnVhdGlvbik7XG59XG4iXSwibmFtZXMiOlsidW5pZnlNZXRhdmFyaWFibGUiLCJ1bmlmeU1ldGF2YXJpYWJsZUludHJpbnNpY2FsbHkiLCJ1bmlmeVN0YXRlbWVudCIsInVuaWZ5U3RhdGVtZW50V2l0aENvbWJpbmF0b3IiLCJ1bmlmeVRlcm1JbnRyaW5zaWNhbGx5IiwidW5pZnlUZXJtV2l0aENvbnN0cnVjdG9yIiwidW5pZnlUZXJtV2l0aEdlbmVyYXRvciIsInVuaWZ5VGVybVdpdGhQcm9wZXJ0eSIsIm5vZGVRdWVyeSIsInF1ZXJ5VXRpbGl0aWVzIiwidHlwZU5vZGVRdWVyeSIsInRlcm1Ob2RlUXVlcnkiLCJmcmFtZU5vZGVRdWVyeSIsIm1ldGFUeXBlTm9kZVF1ZXJ5Iiwic2lnbmF0dXJlTm9kZVF1ZXJ5Iiwic3RhdGVtZW50Tm9kZVF1ZXJ5IiwidGVybVZhcmlhYmxlTm9kZVF1ZXJ5IiwiZnJhbWVNZXRhdmFyaWFibGVOb2RlUXVlcnkiLCJzdGF0ZW1lbnRNZXRhdmFyaWFibGVOb2RlUXVlcnkiLCJhc3N1bXB0aW9uTWV0YXZhcmlhYmxlTm9kZVF1ZXJ5IiwiUHJvcGVydHlQYXNzIiwiQ29udGludWF0aW9uWmlwUGFzcyIsIm1hcHMiLCJnZW5lcmFsTm9kZVF1ZXJ5Iiwic3BlY2lmaWNOb2RlUXVlcnkiLCJydW4iLCJnZW5lcmFsVHlwZU5vZGUiLCJzcGVjaWZpY1Rlcm1Ob2RlIiwiZ2VuZXJhbENvbnRleHQiLCJzcGVjaWZpY0NvbnRleHQiLCJjb250aW51YXRpb24iLCJ0eXBlTm9kZSIsInRlcm1Ob2RlIiwibm9taW5hbFR5cGVOYW1lIiwiZ2V0Tm9taW5hbFR5cGVOYW1lIiwiY29udGV4dCIsInR5cGUiLCJmaW5kVHlwZUJ5Tm9taW5hbFR5cGVOYW1lIiwidGVybSIsInRlcm1Gcm9tVGVybU5vZGUiLCJzdHJpY3QiLCJ2YWxpZGF0ZUdpdmVuVHlwZSIsInN1Y2Nlc3MiLCJHZW5lcmF0b3JQYXNzIiwiQ29uc3RydWN0b3JQYXNzIiwiTWV0YUxldmVsUGFzcyIsIkNvbnRpbnVhdGlvblppcFBhc3NCYXNlIiwiZ2VuZXJhbEFzc3VtcHRpb25NZXRhdmFyaWFibGVOb2RlIiwic3BlY2lmaWNBc3N1bXB0aW9uTWV0YXZhcmlhYmxlTm9kZSIsInJlZmVyZW5jZSIsIm1ldGF2YXJpYWJsZU5vZGUiLCJmaW5kUmVmZXJlbmNlQnlNZXRhdmFyaWFibGVOb2RlIiwibWV0YXZhcmlhYmxlIiwiZ2V0TWV0YXZhcmlhYmxlIiwidW5pZnlSZWZlcmVuY2UiLCJyZWZlcmVuY2VVbmlmaWVzIiwiZ2VuZXJhbFN0YXRlbWVudE1ldGF2YXJpYWJsZU5vZGUiLCJzcGVjaWZpY1N0YXRlbWVudE5vZGUiLCJzdGF0ZW1lbnROb2RlIiwiZmluZE1ldGF2YXJpYWJsZUJ5TWV0YXZhcmlhYmxlTm9kZSIsInN0YXRlbWVudCIsImZpbmRTdGF0ZW1lbnRCeVN0YXRlbWVudE5vZGUiLCJzdGF0ZW1lbnRVbmlmaWVzIiwiZ2VuZXJhbEZyYW1lTWV0YXZhcmlhYmxlTm9kZSIsInNwZWNpZmljRnJhbWVOb2RlIiwiZnJhbWVOb2RlIiwiZnJhbWUiLCJmaW5kRnJhbWVCeUZyYW1lTm9kZSIsInVuaWZ5RnJhbWUiLCJmcmFtZVVuaWZpZXMiLCJnZW5lcmFsVGVybVZhcmlhYmxlTm9kZSIsInZhcmlhYmxlTm9kZSIsInZhcmlhYmxlSWRlbnRpZmllciIsImdldFZhcmlhYmxlSWRlbnRpZmllciIsImRlY2xhcmVkVmFyaWFibGUiLCJmaW5kRGVjbGFyZWRWYXJpYWJsZUJ5VmFyaWFibGVJZGVudGlmaWVyIiwidmFyaWFibGUiLCJmaW5kVGVybUJ5VGVybU5vZGUiLCJ1bmlmeVRlcm0iLCJ0ZXJtVW5pZmllcyIsImdlbmVyYWxTaWduYXR1cmVOb2RlIiwic3BlY2lmaWNTaWduYXR1cmVOb2RlIiwiZ2VuZXJhbFNpZ25hdHVyZSIsImZpbmRTaWduYXR1cmVCeVNpZ25hdHVyZU5vZGUiLCJzcGVjaWZpY1NpZ25hdHVyZSIsInJlY29uY2lsZSIsInVuaWZ5U2lnbmF0dXJlIiwic2lnbmF0dXJlVW5pZmllcyIsIkNvbWJpbmF0b3JQYXNzIiwiZ2VuZXJhbE1ldGFUeXBlTm9kZSIsIm1ldGFUeXBlTm9kZSIsIm1ldGFUeXBlTmFtZSIsImdldE1ldGFUeXBlTmFtZSIsIm1ldGFUeXBlTmFtZVN0YXRlbWVudE1ldGFUeXBlTmFtZSIsIlNUQVRFTUVOVF9NRVRBX1RZUEVfTkFNRSIsInN0YXRlbWVudEZyb21TdGF0ZW1lbnROb2RlIiwidmFsaWRhdGUiLCJtZXRhVHlwZU5hbWVGcmFtZU1ldGFUeXBlTmFtZSIsIkZSQU1FX01FVEFfVFlQRV9OQU1FIiwiZnJhbWVGcm9tRnJhbWVOb2RlIiwiTWV0YXZhcmlhYmxlUGFzcyIsInRlcm1UeXBlIiwiZ2V0VHlwZSIsInRlcm1UeXBlRXF1YWxUb09yU3ViVHlwZU9mR2l2ZW5UeXBlVHlwZSIsImlzRXF1YWxUb09yU3ViVHlwZU9mIiwiSW50cmluc2ljVGVybVBhc3MiLCJJbnRyaW5zaWNNZXRhdmFyaWFibGVQYXNzIiwibWV0YUxldmVsUGFzcyIsInByb3BlcnR5UGFzcyIsImdlbmVyYXRvclBhc3MiLCJjb21iaW5hdG9yUGFzcyIsImNvbnN0cnVjdG9yUGFzcyIsIm1ldGF2YXJpYWJsZVBhc3MiLCJpbnRyaW5zaWNUZXJtUGFzcyIsImludHJpbnNpY01ldGF2YXJpYWJsZVBhc3MiLCJnZW5lcmFsU3RhdGVtZW50Iiwic3BlY2lmaWNTdGF0ZW1lbnQiLCJnZW5lcmFsU3RhdGVtZW50Tm9kZSIsImdldE5vZGUiLCJnZW5lcmFsTm9kZSIsInNwZWNpZmljTm9kZSIsImdlbmVyYWxNZXRhdmFyaWFibGUiLCJzcGVjaWZpY01ldGF2YXJpYWJsZSIsImdlbmVyYWxNZXRhdmFyaWFibGVOb2RlIiwic3BlY2lmaWNNZXRhdmFyaWFibGVOb2RlIiwicHJvcGVydHkiLCJwcm9wZXJ0eVRlcm0iLCJnZXRUZXJtIiwicHJvcGVydHlUZXJtTm9kZSIsImdlbmVyYXRvciIsImdlbmVyYXRvclRlcm0iLCJnZW5lcmF0b3JUZXJtTm9kZSIsImNvbnN0cnVjdG9yIiwiY29uc3RydWN0b3JUZXJtIiwiY29uc3RydWN0b3JUZXJtTm9kZSIsImNvbWJpbmF0b3IiLCJjb21iaW5hdG9yU3RhdGVtZW50IiwiZ2V0U3RhdGVtZW50IiwiY29tYmluYXRvclN0YXRlbWVudE5vZGUiLCJnZW5lcmFsVGVybSIsInNwZWNpZmljVGVybSIsImdlbmVyYWxUZXJtTm9kZSJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7O1FBd2ZnQkE7ZUFBQUE7O1FBZ0RBQztlQUFBQTs7UUF6REFDO2VBQUFBOztRQXdDQUM7ZUFBQUE7O1FBUUFDO2VBQUFBOztRQWhCQUM7ZUFBQUE7O1FBUkFDO2VBQUFBOztRQVJBQztlQUFBQTs7OzRCQTdmZTtnQ0FDZ0M7d0VBRS9CO3lCQUVOOytCQUNxQzt5QkFDa0I7Ozs7OztBQUVqRixNQUFNLEVBQUVDLFNBQVMsRUFBRSxHQUFHQywwQkFBYztBQUVwQyxNQUFNQyxnQkFBZ0JGLFVBQVUsVUFDMUJHLGdCQUFnQkgsVUFBVSxVQUMxQkksaUJBQWlCSixVQUFVLFdBQzNCSyxvQkFBb0JMLFVBQVUsY0FDOUJNLHFCQUFxQk4sVUFBVSxlQUMvQk8scUJBQXFCUCxVQUFVLGVBQy9CUSx3QkFBd0JSLFVBQVUsb0JBQ2xDUyw2QkFBNkJULFVBQVUseUJBQ3ZDVSxpQ0FBaUNWLFVBQVUsNkJBQzNDVyxrQ0FBa0NYLFVBQVU7QUFFbEQsTUFBTVkscUJBQXFCQyx3QkFBbUI7SUFDNUMsT0FBT0MsT0FBTztRQUNaO1lBQ0VDLGtCQUFrQmI7WUFDbEJjLG1CQUFtQmI7WUFDbkJjLEtBQUssQ0FBQ0MsaUJBQWlCQyxrQkFBa0JDLGdCQUFnQkMsaUJBQWlCQztnQkFDeEUsTUFBTUMsV0FBV0wsaUJBQ1hNLFdBQVdMLGtCQUNYTSxrQkFBa0JGLFNBQVNHLGtCQUFrQjtnQkFFbkQsSUFBSUM7Z0JBRUpB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
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "occam-nominal",
3
3
  "author": "James Smith",
4
- "version": "1.0.344",
4
+ "version": "1.0.346",
5
5
  "license": "MIT, Anti-996",
6
6
  "homepage": "https://github.com/djalbat/occam-nominal",
7
7
  "description": "Occam's Nominal language.",
@@ -11,9 +11,9 @@
11
11
  },
12
12
  "dependencies": {
13
13
  "necessary": "^17.5.5",
14
- "occam-furtle": "^3.0.410",
14
+ "occam-furtle": "^3.0.412",
15
15
  "occam-grammar-utilities": "^8.1.19",
16
- "occam-languages": "^2.2.8",
16
+ "occam-languages": "^2.2.12",
17
17
  "occam-query": "^4.1.200"
18
18
  },
19
19
  "devDependencies": {
@@ -84,7 +84,9 @@ export default define(class Combinator extends Element {
84
84
  generalContext = combinatorContext, ///
85
85
  specifiContext = context; ///
86
86
 
87
- return unifyStatementWithCombinator(statement, combinator, generalContext, specifiContext, (statementUnifiesWithCombinator, context) => {
87
+ return unifyStatementWithCombinator(statement, combinator, generalContext, specifiContext, (statementUnifiesWithCombinator, generalContext, specifiContext) => {
88
+ const context = specifiContext; ///
89
+
88
90
  let statementUnifies = false;
89
91
 
90
92
  if (statementUnifiesWithCombinator) {
@@ -195,7 +195,9 @@ export default define(class Constructor extends Element {
195
195
  generalContext = constructorContext, ///
196
196
  specifiContext = context; ///
197
197
 
198
- return unifyTermWithConstructor(term, constructor, generalContext, specifiContext, (termUnifiesWithConstructor, context) => {
198
+ return unifyTermWithConstructor(term, constructor, generalContext, specifiContext, (termUnifiesWithConstructor, generalContext, specifiContext) => {
199
+ const context = specifiContext; ///
200
+
199
201
  if (!termUnifiesWithConstructor) {
200
202
  const termUnifies = false;
201
203
 
@@ -116,17 +116,19 @@ class ConstructorPass extends ContinuationZipPass {
116
116
  let success = false;
117
117
 
118
118
  if (type === null) {
119
- return continuation(success, context);
119
+ return continuation(success, generalContext, specificContext);
120
120
  }
121
121
 
122
122
  const term = termFromTermNode(termNode, context);
123
123
 
124
124
  term.validateGivenType(type, context, (term, context) => {
125
+ const specificContext = context; ///
126
+
125
127
  if (term !== null) {
126
128
  success = true;
127
129
  }
128
130
 
129
- return continuation(success, context);
131
+ return continuation(success, generalContext, specificContext);
130
132
  });
131
133
  }
132
134
  }
@@ -290,26 +292,28 @@ class CombinatorPass extends ContinuationZipPass {
290
292
  generalNodeQuery: metaTypeNodeQuery,
291
293
  specificNodeQuery: statementNodeQuery,
292
294
  run: (generalMetaTypeNode, specificStatementNode, generalContext, specificContext, continuation) => {
293
- const context = specificContext, ///
294
- metaTypeNode = generalMetaTypeNode, ///
295
+ const metaTypeNode = generalMetaTypeNode, ///
295
296
  metaTypeName = metaTypeNode.getMetaTypeName(),
296
297
  metaTypeNameStatementMetaTypeName = (metaTypeName === STATEMENT_META_TYPE_NAME);
297
298
 
298
299
  let success = false;
299
300
 
300
301
  if (!metaTypeNameStatementMetaTypeName) {
301
- return continuation(success, context);
302
+ return continuation(success, generalContext, specificContext);
302
303
  }
303
304
 
304
305
  const statementNode = specificStatementNode, ///
306
+ context = specificContext, ///
305
307
  statement = statementFromStatementNode(statementNode, context);
306
308
 
307
309
  return statement.validate(context, (statement, context) => {
310
+ const specificContext = context; ///
311
+
308
312
  if (statement !== null) {
309
313
  success = true;
310
314
  }
311
315
 
312
- return continuation(success, context);
316
+ return continuation(success, generalContext, specificContext);
313
317
  });
314
318
  }
315
319
  },
@@ -317,26 +321,28 @@ class CombinatorPass extends ContinuationZipPass {
317
321
  generalNodeQuery: metaTypeNodeQuery,
318
322
  specificNodeQuery: frameNodeQuery,
319
323
  run: (generalMetaTypeNode, specificFrameNode, generalContext, specificContext, continuation) => {
320
- const context = specificContext, ///
321
- metaTypeNode = generalMetaTypeNode, ///
324
+ const metaTypeNode = generalMetaTypeNode, ///
322
325
  metaTypeName = metaTypeNode.getMetaTypeName(),
323
326
  metaTypeNameFrameMetaTypeName = (metaTypeName === FRAME_META_TYPE_NAME);
324
327
 
325
328
  let success = false;
326
329
 
327
330
  if (!metaTypeNameFrameMetaTypeName) {
328
- return continuation(success, context);
331
+ return continuation(success, generalContext, specificContext);
329
332
  }
330
333
 
331
334
  const frameNode = specificFrameNode, ///
335
+ context = specificContext, ///
332
336
  frame = frameFromFrameNode(frameNode, context);
333
337
 
334
338
  return frame.validate(context, (frame, context) => {
339
+ const specificContext = context; ///
340
+
335
341
  if (frame !== null) {
336
342
  success = true;
337
343
  }
338
344
 
339
- return continuation(success, context);
345
+ return continuation(success, generalContext, specificContext);
340
346
  });
341
347
  }
342
348
  },
@@ -358,14 +364,16 @@ class CombinatorPass extends ContinuationZipPass {
358
364
 
359
365
  const term = termFromTermNode(termNode, context);
360
366
 
367
+ let success = false;
368
+
361
369
  return term.validateGivenType(type, context, (term, context) => {
362
- let success = false;
370
+ const specificContext = context; ///
363
371
 
364
372
  if (term !== null) {
365
373
  success = true;
366
374
  }
367
375
 
368
- return continuation(success, context);
376
+ return continuation(success, generalContext, specificContext);
369
377
  });
370
378
  }
371
379
  }