occam-nominal 1.0.414 → 1.0.417

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.
@@ -23,12 +23,12 @@ class Binding extends _occamlanguages.Element {
23
23
  getStatement() {
24
24
  return this.statement;
25
25
  }
26
- getStatementNode() {
27
- return this.statement.getStatementNode();
28
- }
29
26
  getMetavariable() {
30
27
  return this.reference.getMetavariable();
31
28
  }
29
+ getStatementNode() {
30
+ return this.statement.getStatementNode();
31
+ }
32
32
  isConditional() {
33
33
  let conditional = false;
34
34
  const statementNode = this.getStatementNode(), subproofAssertionNode = statementNode.getSubproofAssertionNode();
@@ -177,4 +177,4 @@ class Binding extends _occamlanguages.Element {
177
177
  }
178
178
  }
179
179
 
180
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9lbGVtZW50L2JpbmRpbmcuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IEVsZW1lbnQsIGNvbnRpbnVhdGlvblV0aWxpdGllcyB9IGZyb20gXCJvY2NhbS1sYW5ndWFnZXNcIjtcblxuaW1wb3J0IHsgam9pbiwgcmVjb25jaWxlIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9jb250ZXh0XCI7XG5cbmNvbnN0IHsgYXN5bmNocm9ub3VzQmFja3dhcmRzRXZlcnkgfSA9IGNvbnRpbnVhdGlvblV0aWxpdGllcztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQmluZGluZyBleHRlbmRzIEVsZW1lbnQge1xuICBjb25zdHJ1Y3Rvcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHJlZmVyZW5jZSwgc3RhdGVtZW50KSB7XG4gICAgc3VwZXIoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50KTtcblxuICAgIHRoaXMucmVmZXJlbmNlID0gcmVmZXJlbmNlO1xuICAgIHRoaXMuc3RhdGVtZW50ID0gc3RhdGVtZW50O1xuICB9XG5cbiAgZ2V0UmVmZXJlbmNlKCkge1xuICAgIHJldHVybiB0aGlzLnJlZmVyZW5jZTtcbiAgfVxuXG4gIGdldFN0YXRlbWVudCgpIHtcbiAgICByZXR1cm4gdGhpcy5zdGF0ZW1lbnQ7XG4gIH1cblxuICBnZXRTdGF0ZW1lbnROb2RlKCkgeyByZXR1cm4gdGhpcy5zdGF0ZW1lbnQuZ2V0U3RhdGVtZW50Tm9kZSgpOyB9XG5cbiAgZ2V0TWV0YXZhcmlhYmxlKCkgeyByZXR1cm4gdGhpcy5yZWZlcmVuY2UuZ2V0TWV0YXZhcmlhYmxlKCk7IH1cblxuICBpc0NvbmRpdGlvbmFsKCkge1xuICAgIGxldCBjb25kaXRpb25hbCA9IGZhbHNlO1xuXG4gICAgY29uc3Qgc3RhdGVtZW50Tm9kZSA9IHRoaXMuZ2V0U3RhdGVtZW50Tm9kZSgpLFxuICAgICAgICAgIHN1YnByb29mQXNzZXJ0aW9uTm9kZSA9IHN0YXRlbWVudE5vZGUuZ2V0U3VicHJvb2ZBc3NlcnRpb25Ob2RlKCk7XG5cbiAgICBpZiAoc3VicHJvb2ZBc3NlcnRpb25Ob2RlICE9PSBudWxsKSB7XG4gICAgICBjb25kaXRpb25hbCA9IHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbmRpdGlvbmFsO1xuICB9XG5cbiAgZmluZERlZHVjZWRTdGF0ZW1lbnQoY29udGV4dCkge1xuICAgIGNvbnN0IHN1YnByb29mQXNzZXJ0aW9uID0gdGhpcy5maW5kU3VicHJvb2ZBc3NlcnRpb24oY29udGV4dCksXG4gICAgICAgICAgZGVkdWNlZFN0YXRlbWVudCA9IChzdWJwcm9vZkFzc2VydGlvbiAhPT0gbnVsbCkgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YnByb29mQXNzZXJ0aW9uLmdldERlZHVjZWRTdGF0ZW1lbnQoKSA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YXRlbWVudDtcblxuICAgIHJldHVybiBkZWR1Y2VkU3RhdGVtZW50O1xuICB9XG5cbiAgZmluZFN1cHBvc2VkU3RhdGVtZW50cyhjb250ZXh0KSB7XG4gICAgY29uc3Qgc3VicHJvb2ZBc3NlcnRpb24gPSB0aGlzLmZpbmRTdWJwcm9vZkFzc2VydGlvbihjb250ZXh0KSxcbiAgICAgICAgICBzdXBwb3NlZFN0YXRlbWVudHMgPSAoc3VicHJvb2ZBc3NlcnRpb24gIT09IG51bGwpID9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YnByb29mQXNzZXJ0aW9uLmdldFN1cHBvc2VkU3RhdGVtZW50cygpIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW107XG5cbiAgICByZXR1cm4gc3VwcG9zZWRTdGF0ZW1lbnRzO1xuICB9XG5cbiAgZmluZFN1YnByb29mQXNzZXJ0aW9uKGNvbnRleHQpIHtcbiAgICBsZXQgc3VicHJvb2ZBc3NlcnRpb24gPSBudWxsO1xuXG4gICAgY29uc3Qgc3RhdGVtZW50Tm9kZSA9IHRoaXMuZ2V0U3RhdGVtZW50Tm9kZSgpLFxuICAgICAgICAgIHN1YnByb29mQXNzZXJ0aW9uTm9kZSA9IHN0YXRlbWVudE5vZGUuZ2V0U3VicHJvb2ZBc3NlcnRpb25Ob2RlKCk7XG5cbiAgICBpZiAoc3VicHJvb2ZBc3NlcnRpb25Ob2RlICE9PSBudWxsKSB7XG4gICAgICBzdWJwcm9vZkFzc2VydGlvbiA9IGNvbnRleHQuZmluZEFzc2VydGlvbkJ5QXNzZXJ0aW9uTm9kZShzdWJwcm9vZkFzc2VydGlvbk5vZGUpO1xuICAgIH1cblxuICAgIHJldHVybiBzdWJwcm9vZkFzc2VydGlvbjtcbiAgfVxuXG4gIHZhbGlkYXRlUmVmZXJlbmNlKHN0YXRlLCBjb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgICBsZXQgcmVmZXJlbmNlVmFsaWRhdGVzO1xuXG4gICAgY29uc3QgYmluZGluZ1N0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7ICAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke2JpbmRpbmdTdHJpbmd9JyBiaW5kaW5nJ3MgcmVmZXJlbmNlLi4uYCk7XG5cbiAgICByZWZlcmVuY2VWYWxpZGF0ZXMgPSB0aGlzLnJlZmVyZW5jZS52YWxpZGF0ZShzdGF0ZSwgY29udGV4dCwgKHJlZmVyZW5jZSwgY29udGV4dCkgPT4ge1xuICAgICAgbGV0IHZhbGlkYXRlcztcblxuICAgICAgdGhpcy5yZWZlcmVuY2UgPSByZWZlcmVuY2U7XG5cbiAgICAgIHZhbGlkYXRlcyA9IGNvbnRpbnVhdGlvbihzdGF0ZSwgY29udGV4dCk7XG5cbiAgICAgIHJldHVybiB2YWxpZGF0ZXM7XG4gICAgfSk7XG5cbiAgICBpZiAocmVmZXJlbmNlVmFsaWRhdGVzKSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZXMgdGhlICcke2JpbmRpbmdTdHJpbmd9JyBiaW5kaW5nJ3MgcmVmZXJlbmNlLmApO1xuICAgIH1cblxuICAgIHJldHVybiByZWZlcmVuY2VWYWxpZGF0ZXM7XG4gIH1cblxuICB2YWxpZGF0ZVN0YXRlbWVudChzdGF0ZSwgY29udGV4dCwgY29udGludWF0aW9uKSB7XG4gICAgbGV0IHN0YXRlbWVudFZhbGlkYXRlcztcblxuICAgIGNvbnN0IGJpbmRpbmdTdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0aW5nIHRoZSAnJHtiaW5kaW5nU3RyaW5nfScgYmluZGluZydzIHN0YXRlbWVudC4uLmApO1xuXG4gICAgc3RhdGVtZW50VmFsaWRhdGVzID0gdGhpcy5zdGF0ZW1lbnQudmFsaWRhdGUoc3RhdGUsIGNvbnRleHQsIChzdGF0ZW1lbnQsIGNvbnRleHQpID0+IHtcbiAgICAgIGxldCB2YWxpZGF0ZXM7XG5cbiAgICAgIHRoaXMuc3RhdGVtZW50ID0gc3RhdGVtZW50O1xuXG4gICAgICB2YWxpZGF0ZXMgPSBjb250aW51YXRpb24oc3RhdGUsIGNvbnRleHQpO1xuXG4gICAgICByZXR1cm4gdmFsaWRhdGVzO1xuICAgIH0pO1xuXG4gICAgaWYgKHN0YXRlbWVudFZhbGlkYXRlcykge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmFsaWRhdGVzIHRoZSAnJHtiaW5kaW5nU3RyaW5nfScgYmluZGluZydzIHN0YXRlbWVudC5gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gc3RhdGVtZW50VmFsaWRhdGVzO1xuICB9XG5cbiAgdW5pZnlTY2hlbWEoc2NoZW1hLCBjb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgICBjb25zdCBiaW5kaW5nU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKSxcbiAgICAgICAgICBzY2hlbWFTdHJpbmcgPSBzY2hlbWEuZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBVbmlmeWluZyB0aGUgJyR7c2NoZW1hU3RyaW5nfScgc2NoZW1hIHdpdGggdGhlICcke2JpbmRpbmdTdHJpbmd9JyBiaW5kaW5nLi4uYCk7XG5cbiAgICBjb25zdCBnZW5lcmFsQ29udGV4dCA9IGNvbnRleHQ7ICAvLy9cblxuICAgIHJldHVybiByZWNvbmNpbGUoKGNvbnRleHQpID0+IHtcbiAgICAgIGNvbnN0IGxhYmVsID0gc2NoZW1hLmdldExhYmVsKCk7XG5cbiAgICAgIHJldHVybiB0aGlzLnJlZmVyZW5jZS51bmlmeUxhYmVsKGxhYmVsLCBjb250ZXh0LCAobGFiZWxVbmlmaWVzKSA9PiB7XG4gICAgICAgIGNvbnN0IHNwZWNpZmljQ29udGV4dCA9IGNvbnRleHQ7ICAvLy9cblxuICAgICAgICBpZiAoIWxhYmVsVW5pZmllcykge1xuICAgICAgICAgIGNvbnN0IHNjaGVtYVVuaWZpZXMgPSBmYWxzZTtcblxuICAgICAgICAgIHJldHVybiBjb250aW51YXRpb24oc2NoZW1hVW5pZmllcyk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBkZWR1Y3Rpb24gPSBzY2hlbWEuZ2V0RGVkdWN0aW9uKCksXG4gICAgICAgICAgICAgIGRlZHVjZWRTdGF0ZW1lbnQgPSB0aGlzLmZpbmREZWR1Y2VkU3RhdGVtZW50KGNvbnRleHQpO1xuXG4gICAgICAgIHJldHVybiB0aGlzLnVuaWZ5RGVkdWN0aW9uKGRlZHVjdGlvbiwgZGVkdWNlZFN0YXRlbWVudCwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgKGRlZHVjdGlvblVuaWZpZXMpID0+IHtcbiAgICAgICAgICBsZXQgc2NoZW1hVW5pZmllcyA9IGZhbHNlO1xuXG4gICAgICAgICAgaWYgKCFkZWR1Y3Rpb25VbmlmaWVzKSB7XG4gICAgICAgICAgICByZXR1cm4gY29udGludWF0aW9uKHNjaGVtYVVuaWZpZXMpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IGNvbmRpdGlvbmFsID0gdGhpcy5pc0NvbmRpdGlvbmFsKCksXG4gICAgICAgICAgICAgICAgc2NoZW1hQ29uZGl0aW9uYWwgPSBzY2hlbWEuaXNDb25kaXRpb25hbCgpO1xuXG4gICAgICAgICAgaWYgKGNvbmRpdGlvbmFsICE9PSBzY2hlbWFDb25kaXRpb25hbCkge1xuICAgICAgICAgICAgY29udGV4dC50cmFjZShgRWl0aGVyIHRoZSAnJHtzY2hlbWFTdHJpbmd9JyBzY2hlbWEgaXMgdW5jb25kaXRpb25hbCBidXQgdGhlICcke2JpbmRpbmdTdHJpbmd9JyBiaW5kaW5nIGlzIGNvbmRpdGlvbmFsIG9yIHZpY2UgdmVyc2UuYCk7XG5cbiAgICAgICAgICAgIHJldHVybiBjb250aW51YXRpb24oc2NoZW1hVW5pZmllcyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3Qgc3VwcG9zaXRpb25zID0gc2NoZW1hLmdldFN1cHBvc2l0aW9ucygpLFxuICAgICAgICAgICAgICAgIHN1cHBvc2VkU3RhdGVtZW50cyA9IHRoaXMuZmluZFN1cHBvc2VkU3RhdGVtZW50cyhjb250ZXh0KTtcblxuICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZ5U3VwcG9zaXRpb25zKHN1cHBvc2l0aW9ucywgc3VwcG9zZWRTdGF0ZW1lbnRzLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCAoc3VwcG9zaXRpb25zVW5pZnkpID0+IHtcbiAgICAgICAgICAgIGlmIChzdXBwb3NpdGlvbnNVbmlmeSkge1xuICAgICAgICAgICAgICBzY2hlbWFVbmlmaWVzID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHNjaGVtYVVuaWZpZXMpIHtcbiAgICAgICAgICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udW5pZmllZCB0aGUgJyR7c2NoZW1hU3RyaW5nfScgc2NoZW1hIHdpdGggdGhlICcke2JpbmRpbmdTdHJpbmd9JyBiaW5kaW5nLmApO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gY29udGludWF0aW9uKHNjaGVtYVVuaWZpZXMpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0sIGNvbnRleHQpO1xuICB9XG5cbiAgdW5pZnlEZWR1Y3Rpb24oZGVkdWN0aW9uLCBkZWR1Y2VkU3RhdGVtZW50LCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgICBjb25zdCBjb250ZXh0ID0gc3BlY2lmaWNDb250ZXh0LCAgLy8vXG4gICAgICAgICAgYmluZGluZ1N0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCksICAvLy9cbiAgICAgICAgICBkZWR1Y3Rpb25TdHJpbmcgPSBkZWR1Y3Rpb24uZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBVbmlmeWluZyB0aGUgJyR7ZGVkdWN0aW9uU3RyaW5nfScgZGVkdWN0aW9uJ3Mgc3RhdGVtZW50ICB3aXRoIHRoZSAnJHtiaW5kaW5nU3RyaW5nfScgYmluZGluZydzICcke2JpbmRpbmdTdHJpbmd9JyBzdGF0ZW1lbnQuLi5gKTtcblxuICAgIGNvbnN0IHN0YXRlbWVudCA9IGRlZHVjdGlvbi5nZXRTdGF0ZW1lbnQoKSxcbiAgICAgICAgICBkZWR1Y3Rpb25Db250ZXh0ID0gZGVkdWN0aW9uLmdldENvbnRleHQoKTsgLy8vXG5cbiAgICBzcGVjaWZpY0NvbnRleHQgPSBkZWR1Y3Rpb25Db250ZXh0OyAvLy9cblxuICAgIHJldHVybiBqb2luKChzcGVjaWZpY0NvbnRleHQpID0+IHtcbiAgICAgIHJldHVybiByZWNvbmNpbGUoKHNwZWNpZmljQ29udGV4dCkgPT4ge1xuICAgICAgICByZXR1cm4gZGVkdWNlZFN0YXRlbWVudC51bmlmeVN0YXRlbWVudChzdGF0ZW1lbnQsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIChzdGF0ZW1lbnRVbmlmaWVzKSA9PiB7XG4gICAgICAgICAgbGV0IGRlZHVjdGlvblVuaWZpZXMgPSBmYWxzZTtcblxuICAgICAgICAgIGlmIChzdGF0ZW1lbnRVbmlmaWVzKSB7XG4gICAgICAgICAgICBzcGVjaWZpY0NvbnRleHQuY29tbWl0KGNvbnRleHQpO1xuXG4gICAgICAgICAgICBkZWR1Y3Rpb25VbmlmaWVzID0gdHJ1ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoZGVkdWN0aW9uVW5pZmllcykge1xuICAgICAgICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udW5pZmllZCB0aGUgJyR7ZGVkdWN0aW9uU3RyaW5nfScgZGVkdWN0aW9uJ3Mgc3RhdGVtZW50IHdpdGggdGhlICcke2JpbmRpbmdTdHJpbmd9JyBiaW5kaW5nJ3MgJyR7YmluZGluZ1N0cmluZ30nIHN0YXRlbWVudC5gKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gY29udGludWF0aW9uKGRlZHVjdGlvblVuaWZpZXMpO1xuICAgICAgICB9KTtcbiAgICAgIH0sIHNwZWNpZmljQ29udGV4dCk7XG4gICAgfSwgc3BlY2lmaWNDb250ZXh0LCBjb250ZXh0KTtcbiAgfVxuXG4gIHVuaWZ5U3VwcG9zaXRpb24oc3VwcG9zaXRpb24sIHN1cHBvc2VkU3RhdGVtZW50LCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgICBjb25zdCBjb250ZXh0ID0gc3BlY2lmaWNDb250ZXh0LCAgLy8vXG4gICAgICAgICAgc3VwcG9zaXRpb25TdHJpbmcgPSBzdXBwb3NpdGlvbi5nZXRTdHJpbmcoKSxcbiAgICAgICAgICBzdXBwb3NlZFN0YXRlbWVudFN0cmluZyA9IHN1cHBvc2VkU3RhdGVtZW50LmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgVW5pZnlpbmcgdGhlICcke3N1cHBvc2l0aW9uU3RyaW5nfScgc3VwcG9zaXRpb24ncyBzdGF0ZW1lbnQgIHdpdGggdGhlICcke3N1cHBvc2VkU3RhdGVtZW50U3RyaW5nfScgc3VwcG9zZWQgc3RhdGVtZW50Li4uYCk7XG5cbiAgICBjb25zdCBzdGF0ZW1lbnQgPSBzdXBwb3NpdGlvbi5nZXRTdGF0ZW1lbnQoKSxcbiAgICAgIHN1cHBvc2l0aW9uQ29udGV4dCA9IHN1cHBvc2l0aW9uLmdldENvbnRleHQoKTsgLy8vXG5cbiAgICBzcGVjaWZpY0NvbnRleHQgPSBzdXBwb3NpdGlvbkNvbnRleHQ7IC8vL1xuXG4gICAgcmV0dXJuIGpvaW4oKHNwZWNpZmljQ29udGV4dCkgPT4ge1xuICAgICAgcmV0dXJuIHJlY29uY2lsZSgoc3BlY2lmaWNDb250ZXh0KSA9PiB7XG4gICAgICAgIHJldHVybiBzdXBwb3NlZFN0YXRlbWVudC51bmlmeVN0YXRlbWVudChzdGF0ZW1lbnQsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIChzdGF0ZW1lbnRVbmlmaWVzKSA9PiB7XG4gICAgICAgICAgbGV0IHN1cHBvc2l0aW9uVW5pZmllcyA9IGZhbHNlO1xuXG4gICAgICAgICAgaWYgKHN0YXRlbWVudFVuaWZpZXMpIHtcbiAgICAgICAgICAgIHNwZWNpZmljQ29udGV4dC5jb21taXQoY29udGV4dCk7XG5cbiAgICAgICAgICAgIHN1cHBvc2l0aW9uVW5pZmllcyA9IHRydWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHN1cHBvc2l0aW9uVW5pZmllcykge1xuICAgICAgICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udW5pZmllZCB0aGUgJyR7c3VwcG9zaXRpb25TdHJpbmd9JyBzdXBwb3NpdGlvbidzIHN0YXRlbWVudCAgd2l0aCB0aGUgJyR7c3VwcG9zZWRTdGF0ZW1lbnRTdHJpbmd9JyBzdXBwb3NlZCBzdGF0ZW1lbnQuYCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihzdXBwb3NpdGlvblVuaWZpZXMpO1xuICAgICAgICB9KTtcbiAgICAgIH0sIHNwZWNpZmljQ29udGV4dCk7XG4gICAgfSwgc3BlY2lmaWNDb250ZXh0LCBjb250ZXh0KTtcbiAgfVxuXG4gIHVuaWZ5U3VwcG9zaXRpb25zKHN1cHBvc2l0aW9ucywgc3VwcG9zZWRTdGF0ZW1lbnRzLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgICBjb25zdCBzdXBwb3NpdGlvbnNMZW5ndGggPSBzdXBwb3NpdGlvbnMubGVuZ3RoLFxuICAgICAgICAgIHN1cHBvc2VkU3RhdGVtZW50c0xlbmd0aCA9IHN1cHBvc2VkU3RhdGVtZW50cy5sZW5ndGg7XG5cbiAgICBpZiAoc3VwcG9zaXRpb25zTGVuZ3RoICE9PSBzdXBwb3NlZFN0YXRlbWVudHNMZW5ndGgpIHtcbiAgICAgIGNvbnN0IHN1cHBvc2l0aW9uc1VuaWZ5ID0gZmFsc2U7XG5cbiAgICAgIHJldHVybiBjb250aW51YXRpb24oc3VwcG9zaXRpb25zVW5pZnkpO1xuICAgIH1cblxuICAgIGxldCBpbmRleCA9IHN1cHBvc2l0aW9uc0xlbmd0aDsgLy8vXG5cbiAgICByZXR1cm4gYXN5bmNocm9ub3VzQmFja3dhcmRzRXZlcnkoc3VwcG9zaXRpb25zLCAoc3VwcG9zaXRpb24sIGNvbnRpbnVhdGlvbikgPT4ge1xuICAgICAgaW5kZXgtLTtcblxuICAgICAgY29uc3Qgc3VwcG9zZWRTdGF0ZW1lbnQgPSBzdXBwb3NlZFN0YXRlbWVudHNbaW5kZXhdO1xuXG4gICAgICByZXR1cm4gdGhpcy51bmlmeVN1cHBvc2l0aW9uKHN1cHBvc2l0aW9uLCBzdXBwb3NlZFN0YXRlbWVudCwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgY29udGludWF0aW9uKTtcbiAgICB9LCBjb250aW51YXRpb24pO1xuICB9XG59XG4iXSwibmFtZXMiOlsiQmluZGluZyIsImFzeW5jaHJvbm91c0JhY2t3YXJkc0V2ZXJ5IiwiY29udGludWF0aW9uVXRpbGl0aWVzIiwiRWxlbWVudCIsImNvbnRleHQiLCJzdHJpbmciLCJub2RlIiwiYnJlYWtQb2ludCIsInJlZmVyZW5jZSIsInN0YXRlbWVudCIsImdldFJlZmVyZW5jZSIsImdldFN0YXRlbWVudCIsImdldFN0YXRlbWVudE5vZGUiLCJnZXRNZXRhdmFyaWFibGUiLCJpc0NvbmRpdGlvbmFsIiwiY29uZGl0aW9uYWwiLCJzdGF0ZW1lbnROb2RlIiwic3VicHJvb2ZBc3NlcnRpb25Ob2RlIiwiZ2V0U3VicHJvb2ZBc3NlcnRpb25Ob2RlIiwiZmluZERlZHVjZWRTdGF0ZW1lbnQiLCJzdWJwcm9vZkFzc2VydGlvbiIsImZpbmRTdWJwcm9vZkFzc2VydGlvbiIsImRlZHVjZWRTdGF0ZW1lbnQiLCJnZXREZWR1Y2VkU3RhdGVtZW50IiwiZmluZFN1cHBvc2VkU3RhdGVtZW50cyIsInN1cHBvc2VkU3RhdGVtZW50cyIsImdldFN1cHBvc2VkU3RhdGVtZW50cyIsImZpbmRBc3NlcnRpb25CeUFzc2VydGlvbk5vZGUiLCJ2YWxpZGF0ZVJlZmVyZW5jZSIsInN0YXRlIiwiY29udGludWF0aW9uIiwicmVmZXJlbmNlVmFsaWRhdGVzIiwiYmluZGluZ1N0cmluZyIsImdldFN0cmluZyIsInRyYWNlIiwidmFsaWRhdGUiLCJ2YWxpZGF0ZXMiLCJkZWJ1ZyIsInZhbGlkYXRlU3RhdGVtZW50Iiwic3RhdGVtZW50VmFsaWRhdGVzIiwidW5pZnlTY2hlbWEiLCJzY2hlbWEiLCJzY2hlbWFTdHJpbmciLCJnZW5lcmFsQ29udGV4dCIsInJlY29uY2lsZSIsImxhYmVsIiwiZ2V0TGFiZWwiLCJ1bmlmeUxhYmVsIiwibGFiZWxVbmlmaWVzIiwic3BlY2lmaWNDb250ZXh0Iiwic2NoZW1hVW5pZmllcyIsImRlZHVjdGlvbiIsImdldERlZHVjdGlvbiIsInVuaWZ5RGVkdWN0aW9uIiwiZGVkdWN0aW9uVW5pZmllcyIsInNjaGVtYUNvbmRpdGlvbmFsIiwic3VwcG9zaXRpb25zIiwiZ2V0U3VwcG9zaXRpb25zIiwidW5pZnlTdXBwb3NpdGlvbnMiLCJzdXBwb3NpdGlvbnNVbmlmeSIsImRlZHVjdGlvblN0cmluZyIsImRlZHVjdGlvbkNvbnRleHQiLCJnZXRDb250ZXh0Iiwiam9pbiIsInVuaWZ5U3RhdGVtZW50Iiwic3RhdGVtZW50VW5pZmllcyIsImNvbW1pdCIsInVuaWZ5U3VwcG9zaXRpb24iLCJzdXBwb3NpdGlvbiIsInN1cHBvc2VkU3RhdGVtZW50Iiwic3VwcG9zaXRpb25TdHJpbmciLCJzdXBwb3NlZFN0YXRlbWVudFN0cmluZyIsInN1cHBvc2l0aW9uQ29udGV4dCIsInN1cHBvc2l0aW9uVW5pZmllcyIsInN1cHBvc2l0aW9uc0xlbmd0aCIsImxlbmd0aCIsInN1cHBvc2VkU3RhdGVtZW50c0xlbmd0aCIsImluZGV4Il0sIm1hcHBpbmdzIjoiQUFBQTs7OzsrQkFRQTs7O2VBQXFCQTs7O2dDQU4wQjt5QkFFZjtBQUVoQyxNQUFNLEVBQUVDLDBCQUEwQixFQUFFLEdBQUdDLHFDQUFxQjtBQUU3QyxNQUFNRixnQkFBZ0JHLHVCQUFPO0lBQzFDLFlBQVlDLE9BQU8sRUFBRUMsTUFBTSxFQUFFQyxJQUFJLEVBQUVDLFVBQVUsRUFBRUMsU0FBUyxFQUFFQyxTQUFTLENBQUU7UUFDbkUsS0FBSyxDQUFDTCxTQUFTQyxRQUFRQyxNQUFNQztRQUU3QixJQUFJLENBQUNDLFNBQVMsR0FBR0E7UUFDakIsSUFBSSxDQUFDQyxTQUFTLEdBQUdBO0lBQ25CO0lBRUFDLGVBQWU7UUFDYixPQUFPLElBQUksQ0FBQ0YsU0FBUztJQUN2QjtJQUVBRyxlQUFlO1FBQ2IsT0FBTyxJQUFJLENBQUNGLFNBQVM7SUFDdkI7SUFFQUcsbUJBQW1CO1FBQUUsT0FBTyxJQUFJLENBQUNILFNBQVMsQ0FBQ0csZ0JBQWdCO0lBQUk7SUFFL0RDLGtCQUFrQjtRQUFFLE9BQU8sSUFBSSxDQUFDTCxTQUFTLENBQUNLLGVBQWU7SUFBSTtJQUU3REMsZ0JBQWdCO1FBQ2QsSUFBSUMsY0FBYztRQUVsQixNQUFNQyxnQkFBZ0IsSUFBSSxDQUFDSixnQkFBZ0IsSUFDckNLLHdCQUF3QkQsY0FBY0Usd0JBQXdCO1FBRXBFLElBQUlELDBCQUEwQixNQUFNO1lBQ2xDRixjQUFjO1FBQ2hCO1FBRUEsT0FBT0E7SUFDVDtJQUVBSSxxQkFBcUJmLE9BQU8sRUFBRTtRQUM1QixNQUFNZ0Isb0JBQW9CLElBQUksQ0FBQ0MscUJBQXFCLENBQUNqQixVQUMvQ2tCLG1CQUFtQixBQUFDRixzQkFBc0IsT0FDckJBLGtCQUFrQkcsbUJBQW1CLEtBQ25DLElBQUksQ0FBQ2QsU0FBUztRQUUzQyxPQUFPYTtJQUNUO0lB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
180
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9lbGVtZW50L2JpbmRpbmcuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IEVsZW1lbnQsIGNvbnRpbnVhdGlvblV0aWxpdGllcyB9IGZyb20gXCJvY2NhbS1sYW5ndWFnZXNcIjtcblxuaW1wb3J0IHsgam9pbiwgcmVjb25jaWxlIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9jb250ZXh0XCI7XG5cbmNvbnN0IHsgYXN5bmNocm9ub3VzQmFja3dhcmRzRXZlcnkgfSA9IGNvbnRpbnVhdGlvblV0aWxpdGllcztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQmluZGluZyBleHRlbmRzIEVsZW1lbnQge1xuICBjb25zdHJ1Y3Rvcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHJlZmVyZW5jZSwgc3RhdGVtZW50KSB7XG4gICAgc3VwZXIoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50KTtcblxuICAgIHRoaXMucmVmZXJlbmNlID0gcmVmZXJlbmNlO1xuICAgIHRoaXMuc3RhdGVtZW50ID0gc3RhdGVtZW50O1xuICB9XG5cbiAgZ2V0UmVmZXJlbmNlKCkge1xuICAgIHJldHVybiB0aGlzLnJlZmVyZW5jZTtcbiAgfVxuXG4gIGdldFN0YXRlbWVudCgpIHtcbiAgICByZXR1cm4gdGhpcy5zdGF0ZW1lbnQ7XG4gIH1cblxuICBnZXRNZXRhdmFyaWFibGUoKSB7IHJldHVybiB0aGlzLnJlZmVyZW5jZS5nZXRNZXRhdmFyaWFibGUoKTsgfVxuXG4gIGdldFN0YXRlbWVudE5vZGUoKSB7IHJldHVybiB0aGlzLnN0YXRlbWVudC5nZXRTdGF0ZW1lbnROb2RlKCk7IH1cblxuICBpc0NvbmRpdGlvbmFsKCkge1xuICAgIGxldCBjb25kaXRpb25hbCA9IGZhbHNlO1xuXG4gICAgY29uc3Qgc3RhdGVtZW50Tm9kZSA9IHRoaXMuZ2V0U3RhdGVtZW50Tm9kZSgpLFxuICAgICAgICAgIHN1YnByb29mQXNzZXJ0aW9uTm9kZSA9IHN0YXRlbWVudE5vZGUuZ2V0U3VicHJvb2ZBc3NlcnRpb25Ob2RlKCk7XG5cbiAgICBpZiAoc3VicHJvb2ZBc3NlcnRpb25Ob2RlICE9PSBudWxsKSB7XG4gICAgICBjb25kaXRpb25hbCA9IHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbmRpdGlvbmFsO1xuICB9XG5cbiAgZmluZERlZHVjZWRTdGF0ZW1lbnQoY29udGV4dCkge1xuICAgIGNvbnN0IHN1YnByb29mQXNzZXJ0aW9uID0gdGhpcy5maW5kU3VicHJvb2ZBc3NlcnRpb24oY29udGV4dCksXG4gICAgICAgICAgZGVkdWNlZFN0YXRlbWVudCA9IChzdWJwcm9vZkFzc2VydGlvbiAhPT0gbnVsbCkgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YnByb29mQXNzZXJ0aW9uLmdldERlZHVjZWRTdGF0ZW1lbnQoKSA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YXRlbWVudDtcblxuICAgIHJldHVybiBkZWR1Y2VkU3RhdGVtZW50O1xuICB9XG5cbiAgZmluZFN1cHBvc2VkU3RhdGVtZW50cyhjb250ZXh0KSB7XG4gICAgY29uc3Qgc3VicHJvb2ZBc3NlcnRpb24gPSB0aGlzLmZpbmRTdWJwcm9vZkFzc2VydGlvbihjb250ZXh0KSxcbiAgICAgICAgICBzdXBwb3NlZFN0YXRlbWVudHMgPSAoc3VicHJvb2ZBc3NlcnRpb24gIT09IG51bGwpID9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YnByb29mQXNzZXJ0aW9uLmdldFN1cHBvc2VkU3RhdGVtZW50cygpIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW107XG5cbiAgICByZXR1cm4gc3VwcG9zZWRTdGF0ZW1lbnRzO1xuICB9XG5cbiAgZmluZFN1YnByb29mQXNzZXJ0aW9uKGNvbnRleHQpIHtcbiAgICBsZXQgc3VicHJvb2ZBc3NlcnRpb24gPSBudWxsO1xuXG4gICAgY29uc3Qgc3RhdGVtZW50Tm9kZSA9IHRoaXMuZ2V0U3RhdGVtZW50Tm9kZSgpLFxuICAgICAgICAgIHN1YnByb29mQXNzZXJ0aW9uTm9kZSA9IHN0YXRlbWVudE5vZGUuZ2V0U3VicHJvb2ZBc3NlcnRpb25Ob2RlKCk7XG5cbiAgICBpZiAoc3VicHJvb2ZBc3NlcnRpb25Ob2RlICE9PSBudWxsKSB7XG4gICAgICBzdWJwcm9vZkFzc2VydGlvbiA9IGNvbnRleHQuZmluZEFzc2VydGlvbkJ5QXNzZXJ0aW9uTm9kZShzdWJwcm9vZkFzc2VydGlvbk5vZGUpO1xuICAgIH1cblxuICAgIHJldHVybiBzdWJwcm9vZkFzc2VydGlvbjtcbiAgfVxuXG4gIHZhbGlkYXRlUmVmZXJlbmNlKHN0YXRlLCBjb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgICBsZXQgcmVmZXJlbmNlVmFsaWRhdGVzO1xuXG4gICAgY29uc3QgYmluZGluZ1N0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7ICAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke2JpbmRpbmdTdHJpbmd9JyBiaW5kaW5nJ3MgcmVmZXJlbmNlLi4uYCk7XG5cbiAgICByZWZlcmVuY2VWYWxpZGF0ZXMgPSB0aGlzLnJlZmVyZW5jZS52YWxpZGF0ZShzdGF0ZSwgY29udGV4dCwgKHJlZmVyZW5jZSwgY29udGV4dCkgPT4ge1xuICAgICAgbGV0IHZhbGlkYXRlcztcblxuICAgICAgdGhpcy5yZWZlcmVuY2UgPSByZWZlcmVuY2U7XG5cbiAgICAgIHZhbGlkYXRlcyA9IGNvbnRpbnVhdGlvbihzdGF0ZSwgY29udGV4dCk7XG5cbiAgICAgIHJldHVybiB2YWxpZGF0ZXM7XG4gICAgfSk7XG5cbiAgICBpZiAocmVmZXJlbmNlVmFsaWRhdGVzKSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZXMgdGhlICcke2JpbmRpbmdTdHJpbmd9JyBiaW5kaW5nJ3MgcmVmZXJlbmNlLmApO1xuICAgIH1cblxuICAgIHJldHVybiByZWZlcmVuY2VWYWxpZGF0ZXM7XG4gIH1cblxuICB2YWxpZGF0ZVN0YXRlbWVudChzdGF0ZSwgY29udGV4dCwgY29udGludWF0aW9uKSB7XG4gICAgbGV0IHN0YXRlbWVudFZhbGlkYXRlcztcblxuICAgIGNvbnN0IGJpbmRpbmdTdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0aW5nIHRoZSAnJHtiaW5kaW5nU3RyaW5nfScgYmluZGluZydzIHN0YXRlbWVudC4uLmApO1xuXG4gICAgc3RhdGVtZW50VmFsaWRhdGVzID0gdGhpcy5zdGF0ZW1lbnQudmFsaWRhdGUoc3RhdGUsIGNvbnRleHQsIChzdGF0ZW1lbnQsIGNvbnRleHQpID0+IHtcbiAgICAgIGxldCB2YWxpZGF0ZXM7XG5cbiAgICAgIHRoaXMuc3RhdGVtZW50ID0gc3RhdGVtZW50O1xuXG4gICAgICB2YWxpZGF0ZXMgPSBjb250aW51YXRpb24oc3RhdGUsIGNvbnRleHQpO1xuXG4gICAgICByZXR1cm4gdmFsaWRhdGVzO1xuICAgIH0pO1xuXG4gICAgaWYgKHN0YXRlbWVudFZhbGlkYXRlcykge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmFsaWRhdGVzIHRoZSAnJHtiaW5kaW5nU3RyaW5nfScgYmluZGluZydzIHN0YXRlbWVudC5gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gc3RhdGVtZW50VmFsaWRhdGVzO1xuICB9XG5cbiAgdW5pZnlTY2hlbWEoc2NoZW1hLCBjb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgICBjb25zdCBiaW5kaW5nU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKSxcbiAgICAgICAgICBzY2hlbWFTdHJpbmcgPSBzY2hlbWEuZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBVbmlmeWluZyB0aGUgJyR7c2NoZW1hU3RyaW5nfScgc2NoZW1hIHdpdGggdGhlICcke2JpbmRpbmdTdHJpbmd9JyBiaW5kaW5nLi4uYCk7XG5cbiAgICBjb25zdCBnZW5lcmFsQ29udGV4dCA9IGNvbnRleHQ7ICAvLy9cblxuICAgIHJldHVybiByZWNvbmNpbGUoKGNvbnRleHQpID0+IHtcbiAgICAgIGNvbnN0IGxhYmVsID0gc2NoZW1hLmdldExhYmVsKCk7XG5cbiAgICAgIHJldHVybiB0aGlzLnJlZmVyZW5jZS51bmlmeUxhYmVsKGxhYmVsLCBjb250ZXh0LCAobGFiZWxVbmlmaWVzKSA9PiB7XG4gICAgICAgIGNvbnN0IHNwZWNpZmljQ29udGV4dCA9IGNvbnRleHQ7ICAvLy9cblxuICAgICAgICBpZiAoIWxhYmVsVW5pZmllcykge1xuICAgICAgICAgIGNvbnN0IHNjaGVtYVVuaWZpZXMgPSBmYWxzZTtcblxuICAgICAgICAgIHJldHVybiBjb250aW51YXRpb24oc2NoZW1hVW5pZmllcyk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBkZWR1Y3Rpb24gPSBzY2hlbWEuZ2V0RGVkdWN0aW9uKCksXG4gICAgICAgICAgICAgIGRlZHVjZWRTdGF0ZW1lbnQgPSB0aGlzLmZpbmREZWR1Y2VkU3RhdGVtZW50KGNvbnRleHQpO1xuXG4gICAgICAgIHJldHVybiB0aGlzLnVuaWZ5RGVkdWN0aW9uKGRlZHVjdGlvbiwgZGVkdWNlZFN0YXRlbWVudCwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgKGRlZHVjdGlvblVuaWZpZXMpID0+IHtcbiAgICAgICAgICBsZXQgc2NoZW1hVW5pZmllcyA9IGZhbHNlO1xuXG4gICAgICAgICAgaWYgKCFkZWR1Y3Rpb25VbmlmaWVzKSB7XG4gICAgICAgICAgICByZXR1cm4gY29udGludWF0aW9uKHNjaGVtYVVuaWZpZXMpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IGNvbmRpdGlvbmFsID0gdGhpcy5pc0NvbmRpdGlvbmFsKCksXG4gICAgICAgICAgICAgICAgc2NoZW1hQ29uZGl0aW9uYWwgPSBzY2hlbWEuaXNDb25kaXRpb25hbCgpO1xuXG4gICAgICAgICAgaWYgKGNvbmRpdGlvbmFsICE9PSBzY2hlbWFDb25kaXRpb25hbCkge1xuICAgICAgICAgICAgY29udGV4dC50cmFjZShgRWl0aGVyIHRoZSAnJHtzY2hlbWFTdHJpbmd9JyBzY2hlbWEgaXMgdW5jb25kaXRpb25hbCBidXQgdGhlICcke2JpbmRpbmdTdHJpbmd9JyBiaW5kaW5nIGlzIGNvbmRpdGlvbmFsIG9yIHZpY2UgdmVyc2UuYCk7XG5cbiAgICAgICAgICAgIHJldHVybiBjb250aW51YXRpb24oc2NoZW1hVW5pZmllcyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3Qgc3VwcG9zaXRpb25zID0gc2NoZW1hLmdldFN1cHBvc2l0aW9ucygpLFxuICAgICAgICAgICAgICAgIHN1cHBvc2VkU3RhdGVtZW50cyA9IHRoaXMuZmluZFN1cHBvc2VkU3RhdGVtZW50cyhjb250ZXh0KTtcblxuICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZ5U3VwcG9zaXRpb25zKHN1cHBvc2l0aW9ucywgc3VwcG9zZWRTdGF0ZW1lbnRzLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCAoc3VwcG9zaXRpb25zVW5pZnkpID0+IHtcbiAgICAgICAgICAgIGlmIChzdXBwb3NpdGlvbnNVbmlmeSkge1xuICAgICAgICAgICAgICBzY2hlbWFVbmlmaWVzID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHNjaGVtYVVuaWZpZXMpIHtcbiAgICAgICAgICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udW5pZmllZCB0aGUgJyR7c2NoZW1hU3RyaW5nfScgc2NoZW1hIHdpdGggdGhlICcke2JpbmRpbmdTdHJpbmd9JyBiaW5kaW5nLmApO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gY29udGludWF0aW9uKHNjaGVtYVVuaWZpZXMpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0sIGNvbnRleHQpO1xuICB9XG5cbiAgdW5pZnlEZWR1Y3Rpb24oZGVkdWN0aW9uLCBkZWR1Y2VkU3RhdGVtZW50LCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgICBjb25zdCBjb250ZXh0ID0gc3BlY2lmaWNDb250ZXh0LCAgLy8vXG4gICAgICAgICAgYmluZGluZ1N0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCksICAvLy9cbiAgICAgICAgICBkZWR1Y3Rpb25TdHJpbmcgPSBkZWR1Y3Rpb24uZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBVbmlmeWluZyB0aGUgJyR7ZGVkdWN0aW9uU3RyaW5nfScgZGVkdWN0aW9uJ3Mgc3RhdGVtZW50ICB3aXRoIHRoZSAnJHtiaW5kaW5nU3RyaW5nfScgYmluZGluZydzICcke2JpbmRpbmdTdHJpbmd9JyBzdGF0ZW1lbnQuLi5gKTtcblxuICAgIGNvbnN0IHN0YXRlbWVudCA9IGRlZHVjdGlvbi5nZXRTdGF0ZW1lbnQoKSxcbiAgICAgICAgICBkZWR1Y3Rpb25Db250ZXh0ID0gZGVkdWN0aW9uLmdldENvbnRleHQoKTsgLy8vXG5cbiAgICBzcGVjaWZpY0NvbnRleHQgPSBkZWR1Y3Rpb25Db250ZXh0OyAvLy9cblxuICAgIHJldHVybiBqb2luKChzcGVjaWZpY0NvbnRleHQpID0+IHtcbiAgICAgIHJldHVybiByZWNvbmNpbGUoKHNwZWNpZmljQ29udGV4dCkgPT4ge1xuICAgICAgICByZXR1cm4gZGVkdWNlZFN0YXRlbWVudC51bmlmeVN0YXRlbWVudChzdGF0ZW1lbnQsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIChzdGF0ZW1lbnRVbmlmaWVzKSA9PiB7XG4gICAgICAgICAgbGV0IGRlZHVjdGlvblVuaWZpZXMgPSBmYWxzZTtcblxuICAgICAgICAgIGlmIChzdGF0ZW1lbnRVbmlmaWVzKSB7XG4gICAgICAgICAgICBzcGVjaWZpY0NvbnRleHQuY29tbWl0KGNvbnRleHQpO1xuXG4gICAgICAgICAgICBkZWR1Y3Rpb25VbmlmaWVzID0gdHJ1ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoZGVkdWN0aW9uVW5pZmllcykge1xuICAgICAgICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udW5pZmllZCB0aGUgJyR7ZGVkdWN0aW9uU3RyaW5nfScgZGVkdWN0aW9uJ3Mgc3RhdGVtZW50IHdpdGggdGhlICcke2JpbmRpbmdTdHJpbmd9JyBiaW5kaW5nJ3MgJyR7YmluZGluZ1N0cmluZ30nIHN0YXRlbWVudC5gKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gY29udGludWF0aW9uKGRlZHVjdGlvblVuaWZpZXMpO1xuICAgICAgICB9KTtcbiAgICAgIH0sIHNwZWNpZmljQ29udGV4dCk7XG4gICAgfSwgc3BlY2lmaWNDb250ZXh0LCBjb250ZXh0KTtcbiAgfVxuXG4gIHVuaWZ5U3VwcG9zaXRpb24oc3VwcG9zaXRpb24sIHN1cHBvc2VkU3RhdGVtZW50LCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgICBjb25zdCBjb250ZXh0ID0gc3BlY2lmaWNDb250ZXh0LCAgLy8vXG4gICAgICAgICAgc3VwcG9zaXRpb25TdHJpbmcgPSBzdXBwb3NpdGlvbi5nZXRTdHJpbmcoKSxcbiAgICAgICAgICBzdXBwb3NlZFN0YXRlbWVudFN0cmluZyA9IHN1cHBvc2VkU3RhdGVtZW50LmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgVW5pZnlpbmcgdGhlICcke3N1cHBvc2l0aW9uU3RyaW5nfScgc3VwcG9zaXRpb24ncyBzdGF0ZW1lbnQgIHdpdGggdGhlICcke3N1cHBvc2VkU3RhdGVtZW50U3RyaW5nfScgc3VwcG9zZWQgc3RhdGVtZW50Li4uYCk7XG5cbiAgICBjb25zdCBzdGF0ZW1lbnQgPSBzdXBwb3NpdGlvbi5nZXRTdGF0ZW1lbnQoKSxcbiAgICAgIHN1cHBvc2l0aW9uQ29udGV4dCA9IHN1cHBvc2l0aW9uLmdldENvbnRleHQoKTsgLy8vXG5cbiAgICBzcGVjaWZpY0NvbnRleHQgPSBzdXBwb3NpdGlvbkNvbnRleHQ7IC8vL1xuXG4gICAgcmV0dXJuIGpvaW4oKHNwZWNpZmljQ29udGV4dCkgPT4ge1xuICAgICAgcmV0dXJuIHJlY29uY2lsZSgoc3BlY2lmaWNDb250ZXh0KSA9PiB7XG4gICAgICAgIHJldHVybiBzdXBwb3NlZFN0YXRlbWVudC51bmlmeVN0YXRlbWVudChzdGF0ZW1lbnQsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIChzdGF0ZW1lbnRVbmlmaWVzKSA9PiB7XG4gICAgICAgICAgbGV0IHN1cHBvc2l0aW9uVW5pZmllcyA9IGZhbHNlO1xuXG4gICAgICAgICAgaWYgKHN0YXRlbWVudFVuaWZpZXMpIHtcbiAgICAgICAgICAgIHNwZWNpZmljQ29udGV4dC5jb21taXQoY29udGV4dCk7XG5cbiAgICAgICAgICAgIHN1cHBvc2l0aW9uVW5pZmllcyA9IHRydWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHN1cHBvc2l0aW9uVW5pZmllcykge1xuICAgICAgICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udW5pZmllZCB0aGUgJyR7c3VwcG9zaXRpb25TdHJpbmd9JyBzdXBwb3NpdGlvbidzIHN0YXRlbWVudCAgd2l0aCB0aGUgJyR7c3VwcG9zZWRTdGF0ZW1lbnRTdHJpbmd9JyBzdXBwb3NlZCBzdGF0ZW1lbnQuYCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihzdXBwb3NpdGlvblVuaWZpZXMpO1xuICAgICAgICB9KTtcbiAgICAgIH0sIHNwZWNpZmljQ29udGV4dCk7XG4gICAgfSwgc3BlY2lmaWNDb250ZXh0LCBjb250ZXh0KTtcbiAgfVxuXG4gIHVuaWZ5U3VwcG9zaXRpb25zKHN1cHBvc2l0aW9ucywgc3VwcG9zZWRTdGF0ZW1lbnRzLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgICBjb25zdCBzdXBwb3NpdGlvbnNMZW5ndGggPSBzdXBwb3NpdGlvbnMubGVuZ3RoLFxuICAgICAgICAgIHN1cHBvc2VkU3RhdGVtZW50c0xlbmd0aCA9IHN1cHBvc2VkU3RhdGVtZW50cy5sZW5ndGg7XG5cbiAgICBpZiAoc3VwcG9zaXRpb25zTGVuZ3RoICE9PSBzdXBwb3NlZFN0YXRlbWVudHNMZW5ndGgpIHtcbiAgICAgIGNvbnN0IHN1cHBvc2l0aW9uc1VuaWZ5ID0gZmFsc2U7XG5cbiAgICAgIHJldHVybiBjb250aW51YXRpb24oc3VwcG9zaXRpb25zVW5pZnkpO1xuICAgIH1cblxuICAgIGxldCBpbmRleCA9IHN1cHBvc2l0aW9uc0xlbmd0aDsgLy8vXG5cbiAgICByZXR1cm4gYXN5bmNocm9ub3VzQmFja3dhcmRzRXZlcnkoc3VwcG9zaXRpb25zLCAoc3VwcG9zaXRpb24sIGNvbnRpbnVhdGlvbikgPT4ge1xuICAgICAgaW5kZXgtLTtcblxuICAgICAgY29uc3Qgc3VwcG9zZWRTdGF0ZW1lbnQgPSBzdXBwb3NlZFN0YXRlbWVudHNbaW5kZXhdO1xuXG4gICAgICByZXR1cm4gdGhpcy51bmlmeVN1cHBvc2l0aW9uKHN1cHBvc2l0aW9uLCBzdXBwb3NlZFN0YXRlbWVudCwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgY29udGludWF0aW9uKTtcbiAgICB9LCBjb250aW51YXRpb24pO1xuICB9XG59XG4iXSwibmFtZXMiOlsiQmluZGluZyIsImFzeW5jaHJvbm91c0JhY2t3YXJkc0V2ZXJ5IiwiY29udGludWF0aW9uVXRpbGl0aWVzIiwiRWxlbWVudCIsImNvbnRleHQiLCJzdHJpbmciLCJub2RlIiwiYnJlYWtQb2ludCIsInJlZmVyZW5jZSIsInN0YXRlbWVudCIsImdldFJlZmVyZW5jZSIsImdldFN0YXRlbWVudCIsImdldE1ldGF2YXJpYWJsZSIsImdldFN0YXRlbWVudE5vZGUiLCJpc0NvbmRpdGlvbmFsIiwiY29uZGl0aW9uYWwiLCJzdGF0ZW1lbnROb2RlIiwic3VicHJvb2ZBc3NlcnRpb25Ob2RlIiwiZ2V0U3VicHJvb2ZBc3NlcnRpb25Ob2RlIiwiZmluZERlZHVjZWRTdGF0ZW1lbnQiLCJzdWJwcm9vZkFzc2VydGlvbiIsImZpbmRTdWJwcm9vZkFzc2VydGlvbiIsImRlZHVjZWRTdGF0ZW1lbnQiLCJnZXREZWR1Y2VkU3RhdGVtZW50IiwiZmluZFN1cHBvc2VkU3RhdGVtZW50cyIsInN1cHBvc2VkU3RhdGVtZW50cyIsImdldFN1cHBvc2VkU3RhdGVtZW50cyIsImZpbmRBc3NlcnRpb25CeUFzc2VydGlvbk5vZGUiLCJ2YWxpZGF0ZVJlZmVyZW5jZSIsInN0YXRlIiwiY29udGludWF0aW9uIiwicmVmZXJlbmNlVmFsaWRhdGVzIiwiYmluZGluZ1N0cmluZyIsImdldFN0cmluZyIsInRyYWNlIiwidmFsaWRhdGUiLCJ2YWxpZGF0ZXMiLCJkZWJ1ZyIsInZhbGlkYXRlU3RhdGVtZW50Iiwic3RhdGVtZW50VmFsaWRhdGVzIiwidW5pZnlTY2hlbWEiLCJzY2hlbWEiLCJzY2hlbWFTdHJpbmciLCJnZW5lcmFsQ29udGV4dCIsInJlY29uY2lsZSIsImxhYmVsIiwiZ2V0TGFiZWwiLCJ1bmlmeUxhYmVsIiwibGFiZWxVbmlmaWVzIiwic3BlY2lmaWNDb250ZXh0Iiwic2NoZW1hVW5pZmllcyIsImRlZHVjdGlvbiIsImdldERlZHVjdGlvbiIsInVuaWZ5RGVkdWN0aW9uIiwiZGVkdWN0aW9uVW5pZmllcyIsInNjaGVtYUNvbmRpdGlvbmFsIiwic3VwcG9zaXRpb25zIiwiZ2V0U3VwcG9zaXRpb25zIiwidW5pZnlTdXBwb3NpdGlvbnMiLCJzdXBwb3NpdGlvbnNVbmlmeSIsImRlZHVjdGlvblN0cmluZyIsImRlZHVjdGlvbkNvbnRleHQiLCJnZXRDb250ZXh0Iiwiam9pbiIsInVuaWZ5U3RhdGVtZW50Iiwic3RhdGVtZW50VW5pZmllcyIsImNvbW1pdCIsInVuaWZ5U3VwcG9zaXRpb24iLCJzdXBwb3NpdGlvbiIsInN1cHBvc2VkU3RhdGVtZW50Iiwic3VwcG9zaXRpb25TdHJpbmciLCJzdXBwb3NlZFN0YXRlbWVudFN0cmluZyIsInN1cHBvc2l0aW9uQ29udGV4dCIsInN1cHBvc2l0aW9uVW5pZmllcyIsInN1cHBvc2l0aW9uc0xlbmd0aCIsImxlbmd0aCIsInN1cHBvc2VkU3RhdGVtZW50c0xlbmd0aCIsImluZGV4Il0sIm1hcHBpbmdzIjoiQUFBQTs7OzsrQkFRQTs7O2VBQXFCQTs7O2dDQU4wQjt5QkFFZjtBQUVoQyxNQUFNLEVBQUVDLDBCQUEwQixFQUFFLEdBQUdDLHFDQUFxQjtBQUU3QyxNQUFNRixnQkFBZ0JHLHVCQUFPO0lBQzFDLFlBQVlDLE9BQU8sRUFBRUMsTUFBTSxFQUFFQyxJQUFJLEVBQUVDLFVBQVUsRUFBRUMsU0FBUyxFQUFFQyxTQUFTLENBQUU7UUFDbkUsS0FBSyxDQUFDTCxTQUFTQyxRQUFRQyxNQUFNQztRQUU3QixJQUFJLENBQUNDLFNBQVMsR0FBR0E7UUFDakIsSUFBSSxDQUFDQyxTQUFTLEdBQUdBO0lBQ25CO0lBRUFDLGVBQWU7UUFDYixPQUFPLElBQUksQ0FBQ0YsU0FBUztJQUN2QjtJQUVBRyxlQUFlO1FBQ2IsT0FBTyxJQUFJLENBQUNGLFNBQVM7SUFDdkI7SUFFQUcsa0JBQWtCO1FBQUUsT0FBTyxJQUFJLENBQUNKLFNBQVMsQ0FBQ0ksZUFBZTtJQUFJO0lBRTdEQyxtQkFBbUI7UUFBRSxPQUFPLElBQUksQ0FBQ0osU0FBUyxDQUFDSSxnQkFBZ0I7SUFBSTtJQUUvREMsZ0JBQWdCO1FBQ2QsSUFBSUMsY0FBYztRQUVsQixNQUFNQyxnQkFBZ0IsSUFBSSxDQUFDSCxnQkFBZ0IsSUFDckNJLHdCQUF3QkQsY0FBY0Usd0JBQXdCO1FBRXBFLElBQUlELDBCQUEwQixNQUFNO1lBQ2xDRixjQUFjO1FBQ2hCO1FBRUEsT0FBT0E7SUFDVDtJQUVBSSxxQkFBcUJmLE9BQU8sRUFBRTtRQUM1QixNQUFNZ0Isb0JBQW9CLElBQUksQ0FBQ0MscUJBQXFCLENBQUNqQixVQUMvQ2tCLG1CQUFtQixBQUFDRixzQkFBc0IsT0FDckJBLGtCQUFrQkcsbUJBQW1CLEtBQ25DLElBQUksQ0FBQ2QsU0FBUztRQUUzQyxPQUFPYTtJQUNUO0lB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
@@ -129,7 +129,10 @@ const _default = (0, _elements.define)(class Constraint extends _occamlanguages.
129
129
  unifyStatement(statement, generalContext, specificContext, continuation) {
130
130
  const context = specificContext, statementString = statement.getString(), constraintString = this.getString(); ///
131
131
  context.trace(`Unifying the '${statementString}' statement with the '${constraintString}' constraint's statement...`);
132
- const generalStatement = this.statement, specificStatement = (0, _brackets.stripBracketsFromStatement)(statement, context); ///
132
+ let specificStatement;
133
+ specificStatement = statement; ///
134
+ specificStatement = (0, _brackets.stripBracketsFromStatement)(specificStatement, context); ///
135
+ const generalStatement = this.statement; ///
133
136
  return (0, _unify.unifyStatement)(generalStatement, specificStatement, generalContext, specificContext, (statementUnifies)=>{
134
137
  if (statementUnifies) {
135
138
  context.debug(`...unified the '${statementString}' statement with the '${constraintString}' constraint's statement.`);
@@ -138,7 +141,8 @@ const _default = (0, _elements.define)(class Constraint extends _occamlanguages.
138
141
  });
139
142
  }
140
143
  unifyAssumption(assumption, context, continuation) {
141
- const assumptionString = assumption.getString(), constraintString = this.getString();
144
+ const constraintString = this.getString(), assumptionString = assumption.getString() ///
145
+ ;
142
146
  context.trace(`Unifying the '${assumptionString}' assumption with the '${constraintString}' constraint...`);
143
147
  const constraintContext = this.getContext(), generalContext = constraintContext; ///
144
148
  return (0, _context.reconcile)((context)=>{
@@ -175,6 +179,39 @@ const _default = (0, _elements.define)(class Constraint extends _occamlanguages.
175
179
  return continuation(assumptionsUnify);
176
180
  });
177
181
  }
182
+ unifyImplicitAssumption(implicitAssumption, context, continuation) {
183
+ const constraintString = this.getString(), implicitAssumptionString = implicitAssumption.getString(); ///
184
+ context.trace(`Unifying the '${implicitAssumptionString}' implicit assumption with the '${constraintString}' constraint...`);
185
+ const constraintContext = this.getContext(), implicitAssumptionContext = implicitAssumption.getContext(), generalContext = constraintContext, specificContext = implicitAssumptionContext; ///
186
+ return (0, _context.join)((specificContext)=>{
187
+ return (0, _context.reconcile)((specificContext)=>{
188
+ const statement = implicitAssumption.getStatement();
189
+ return this.unifyStatement(statement, generalContext, specificContext, (statementUnifies)=>{
190
+ let implicitAssumptionUnifies = false;
191
+ if (statementUnifies) {
192
+ specificContext.commit(context);
193
+ implicitAssumptionUnifies = true;
194
+ }
195
+ if (implicitAssumptionUnifies) {
196
+ context.debug(`...unified the '${implicitAssumptionString}' impllicit assumption with the '${constraintString}' constraint...`);
197
+ }
198
+ return continuation(implicitAssumptionUnifies);
199
+ });
200
+ }, specificContext);
201
+ }, specificContext, context);
202
+ }
203
+ unifyImplicitAssumptions(implicitAssumptions, context, continuation) {
204
+ const constraintString = this.getString();
205
+ context.trace(`Unifying the implicit assumptions with the '${constraintString}' constraint...`);
206
+ asynchronousSome(implicitAssumptions, (implicitAssumption, continuation)=>{
207
+ this.unifyImplicitAssumption(implicitAssumption, context, continuation);
208
+ }, (implicitAssumptionsUnify)=>{
209
+ if (implicitAssumptionsUnify) {
210
+ context.trace(`...unified the implicit assumptions with the '${constraintString}' constraint.`);
211
+ }
212
+ return continuation(implicitAssumptionsUnify);
213
+ });
214
+ }
178
215
  toJSON() {
179
216
  const context = this.getContext();
180
217
  return (0, _context.serialise)((context)=>{
@@ -226,4 +263,4 @@ function statementFromConstraintNode(constraintNode, context) {
226
263
  return statement;
227
264
  }
228
265
 
229
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9lbGVtZW50L2NvbnN0cmFpbnQuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IEVsZW1lbnQsIGJyZWFrUG9pbnRVdGlsaXRpZXMsIGNvbnRpbnVhdGlvblV0aWxpdGllcyB9IGZyb20gXCJvY2NhbS1sYW5ndWFnZXNcIjtcblxuaW1wb3J0IHsgYWxsIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9jb250aW51YXRpb25cIjtcbmltcG9ydCB7IGRlZmluZSB9IGZyb20gXCIuLi9lbGVtZW50c1wiO1xuaW1wb3J0IHsgdW5pZnlTdGF0ZW1lbnQgfSBmcm9tIFwiLi4vcHJvY2Vzcy91bmlmeVwiO1xuaW1wb3J0IHsgaW5zdGFudGlhdGVDb25zdHJhaW50IH0gZnJvbSBcIi4uL3Byb2Nlc3MvaW5zdGFudGlhdGVcIjtcbmltcG9ydCB7IHN0cmlwQnJhY2tldHNGcm9tU3RhdGVtZW50IH0gZnJvbSBcIi4uL3V0aWxpdGllcy9icmFja2V0c1wiO1xuaW1wb3J0IHsgY29uc3RyYWludEZyb21Db25zdHJhaW50Tm9kZSB9IGZyb20gXCIuLi91dGlsaXRpZXMvZWxlbWVudFwiO1xuaW1wb3J0IHsgY29uc3RyYWludFN0cmluZ0Zyb21SZWZlcmVuY2VBbmRTdGF0ZW1lbnQgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL3N0cmluZ1wiO1xuaW1wb3J0IHsgYWJsYXRlLCBhdHRlbXB0LCByZWNvbmNpbGUsIHNlcmlhbGlzZSwgdW5zZXJpYWxpc2UsIGluc3RhbnRpYXRlIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9jb250ZXh0XCI7XG5cbmNvbnN0IHsgYXN5bmNocm9ub3VzU29tZSB9ID0gY29udGludWF0aW9uVXRpbGl0aWVzLFxuICAgICAgeyBicmVha1BvaW50RnJvbUpTT04sIGJyZWFrUG9pbnRUb0JyZWFrUG9pbnRKU09OIH0gPSBicmVha1BvaW50VXRpbGl0aWVzO1xuXG5leHBvcnQgZGVmYXVsdCBkZWZpbmUoY2xhc3MgQ29uc3RyYWludCBleHRlbmRzIEVsZW1lbnQge1xuICBjb25zdHJ1Y3Rvcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHJlZmVyZW5jZSwgc3RhdGVtZW50KSB7XG4gICAgc3VwZXIoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50KTtcblxuICAgIHRoaXMucmVmZXJlbmNlID0gcmVmZXJlbmNlO1xuICAgIHRoaXMuc3RhdGVtZW50ID0gc3RhdGVtZW50O1xuICB9XG5cbiAgZ2V0UmVmZXJlbmNlKCkge1xuICAgIHJldHVybiB0aGlzLnJlZmVyZW5jZTtcbiAgfVxuXG4gIGdldFN0YXRlbWVudCgpIHtcbiAgICByZXR1cm4gdGhpcy5zdGF0ZW1lbnQ7XG4gIH1cblxuICBnZXRDb25zdHJhaW50Tm9kZSgpIHtcbiAgICBjb25zdCBub2RlID0gdGhpcy5nZXROb2RlKCksXG4gICAgICAgICAgY29uc3RyYWludE5vZGUgPSBub2RlOyAgLy8vXG5cbiAgICByZXR1cm4gY29uc3RyYWludE5vZGU7XG4gIH1cblxuICBnZXRNZXRhdmFyaWFibGUoKSB7IHJldHVybiB0aGlzLnJlZmVyZW5jZS5nZXRNZXRhdmFyaWFibGUoKTsgfVxuXG4gIGlzRXF1YWxUbyhjb25zdHJhaW50KSB7XG4gICAgY29uc3QgY29uc3RyYWludE5vZGUgPSBjb25zdHJhaW50LmdldE5vZGUoKSxcbiAgICAgICAgICBjb25zdHJhaW50Tm9kZU1hdGNoZXMgPSB0aGlzLm1hdGNoQ29uc3RyYWludE5vZGUoY29uc3RyYWludE5vZGUpLFxuICAgICAgICAgIGVxdWFsVG8gPSBjb25zdHJhaW50Tm9kZU1hdGNoZXM7ICAvLy9cblxuICAgIHJldHVybiBlcXVhbFRvO1xuICB9XG5cbiAgbWF0Y2hDb25zdHJhaW50Tm9kZShjb25zdHJhaW50Tm9kZSkge1xuICAgIGNvbnN0IG5vZGUgPSBjb25zdHJhaW50Tm9kZSwgLy8vXG4gICAgICAgICAgbm9kZU1hdGNoZXMgPSB0aGlzLm1hdGNoTm9kZShub2RlKSxcbiAgICAgICAgICBjb25zdHJhaW50Tm9kZU1hdGNoZXMgPSBub2RlTWF0Y2hlczsgLy8vXG5cbiAgICByZXR1cm4gY29uc3RyYWludE5vZGVNYXRjaGVzO1xuICB9XG5cbiAgZmluZENvbnN0cmFpbnQoY29udGV4dCkge1xuICAgIGNvbnN0IGNvbnN0cmFpbnROb2RlID0gdGhpcy5nZXRDb25zdHJhaW50Tm9kZSgpLFxuICAgICAgICAgIGNvbnN0cmFpbnQgPSBjb250ZXh0LmZpbmRDb25zdHJhaW50QnlDb25zdHJhaW50Tm9kZShjb25zdHJhaW50Tm9kZSk7XG5cbiAgICByZXR1cm4gY29uc3RyYWludDtcbiAgfVxuXG4gIHZhbGlkYXRlKHN0YXRlLCBjb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgICBsZXQgdmFsaWRhdGVzO1xuXG4gICAgY29uc3Qgc3BlY2lmaWNDb250ZXh0ID0gY29udGV4dCwgIC8vL1xuICAgICAgICAgIGNvbnN0cmFpbnRTdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0aW5nIHRoZSAnJHtjb25zdHJhaW50U3RyaW5nfScgY29uc3RyYWludC4uLmApO1xuXG4gICAgbGV0IGNvbnN0cmFpbnQ7XG5cbiAgICBjb25zdHJhaW50ID0gdGhpcy5maW5kQ29uc3RyYWludChjb250ZXh0KTtcblxuICAgIGlmIChjb25zdHJhaW50ICE9PSBudWxsKSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGBUaGUgJyR7Y29uc3RyYWludFN0cmluZ30nIGNvbnN0cmFpbnQgaXMgYWxyZWFkeSBwcmVzZW50LmApO1xuXG4gICAgICB2YWxpZGF0ZXMgPSBjb250aW51YXRpb24oY29uc3RyYWludCwgY29udGV4dCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0cmFpbnQgPSB0aGlzOyAgLy8vXG5cbiAgICAgIGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKTtcblxuICAgICAgYXR0ZW1wdCgoY29udGV4dCkgPT4ge1xuICAgICAgICBjb25zdCB2YWxpZGF0ZVN0YXRlbWVudCA9IHRoaXMudmFsaWRhdGVTdGF0ZW1lbnQuYmluZCh0aGlzKSxcbiAgICAgICAgICAgICAgdmFsaWRhdGVSZWZlcmVuY2UgPSB0aGlzLnZhbGlkYXRlUmVmZXJlbmNlLmJpbmQodGhpcyk7XG5cbiAgICAgICAgdmFsaWRhdGVzID0gYWxsKFtcbiAgICAgICAgICB2YWxpZGF0ZVN0YXRlbWVudCxcbiAgICAgICAgICB2YWxpZGF0ZVJlZmVyZW5jZVxuICAgICAgICBdLCBzdGF0ZSwgY29udGV4dCwgKHN0YXRlLCBjb250ZXh0KSA9PiB7XG4gICAgICAgICAgbGV0IHZhbGlkYXRlcztcblxuICAgICAgICAgIHRoaXMuY29tbWl0KGNvbnRleHQpO1xuXG4gICAgICAgICAgY29udGV4dCA9IHNwZWNpZmljQ29udGV4dDsgIC8vL1xuXG4gICAgICAgICAgdmFsaWRhdGVzID0gY29udGludWF0aW9uKGNvbnN0cmFpbnQsIGNvbnRleHQpO1xuXG4gICAgICAgICAgcmV0dXJuIHZhbGlkYXRlcztcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKHZhbGlkYXRlcykge1xuICAgICAgICAgIGNvbnRleHQgPSBzcGVjaWZpY0NvbnRleHQ7ICAvLy9cblxuICAgICAgICAgIGNvbnRleHQuYWRkQ29uc3RyYWludChjb25zdHJhaW50KTtcbiAgICAgICAgfVxuICAgICAgfSwgY29udGV4dCk7XG4gICAgfVxuXG4gICAgY29udGV4dCA9IHNwZWNpZmljQ29udGV4dDsgIC8vL1xuXG4gICAgaWYgKHZhbGlkYXRlcykge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmFsaWRhdGVkIHRoZSAnJHtjb25zdHJhaW50U3RyaW5nfScgY29uc3RyYWludC5gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdmFsaWRhdGVzO1xuICB9XG5cbiAgdmFsaWRhdGVSZWZlcmVuY2Uoc3RhdGUsIGNvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICAgIGxldCByZWZlcmVuY2VWYWxpZGF0ZXM7XG5cbiAgICBjb25zdCBjb25zdHJhaW50U3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgIC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7Y29uc3RyYWludFN0cmluZ30nIGNvbnN0cmFpbnQncyByZWZlcmVuY2UuLi5gKTtcblxuICAgIHJlZmVyZW5jZVZhbGlkYXRlcyA9IHRoaXMucmVmZXJlbmNlLnZhbGlkYXRlKHN0YXRlLCBjb250ZXh0LCAocmVmZXJlbmNlLCBjb250ZXh0KSA9PiB7XG4gICAgICBsZXQgdmFsaWRhdGVzO1xuXG4gICAgICB0aGlzLnJlZmVyZW5jZSA9IHJlZmVyZW5jZTtcblxuICAgICAgdmFsaWRhdGVzID0gY29udGludWF0aW9uKHN0YXRlLCBjb250ZXh0KTtcblxuICAgICAgcmV0dXJuIHZhbGlkYXRlcztcbiAgICB9KTtcblxuICAgIGlmIChyZWZlcmVuY2VWYWxpZGF0ZXMpIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlZCB0aGUgJyR7Y29uc3RyYWludFN0cmluZ30nIGNvbnN0cmFpbnQncyByZWZlcmVuY2UuYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlZmVyZW5jZVZhbGlkYXRlcztcbiAgfVxuXG4gIHZhbGlkYXRlU3RhdGVtZW50KHN0YXRlLCBjb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgICBsZXQgc3RhdGVtZW50VmFsaWRhdGVzO1xuXG4gICAgY29uc3QgY29uc3RyYWludFN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7ICAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke2NvbnN0cmFpbnRTdHJpbmd9JyBjb25zdHJhaW50J3Mgc3RhdGVtZW50Li4uYCk7XG5cbiAgICBzdGF0ZW1lbnRWYWxpZGF0ZXMgPSB0aGlzLnN0YXRlbWVudC52YWxpZGF0ZShzdGF0ZSwgY29udGV4dCwgKHN0YXRlbWVudCwgY29udGV4dCkgPT4ge1xuICAgICAgbGV0IHZhbGlkYXRlcztcblxuICAgICAgdGhpcy5zdGF0ZW1lbnQgPSBzdGF0ZW1lbnQ7XG5cbiAgICAgIHZhbGlkYXRlcyA9IGNvbnRpbnVhdGlvbihzdGF0ZSwgY29udGV4dCk7XG5cbiAgICAgIHJldHVybiB2YWxpZGF0ZXM7XG4gICAgfSk7XG5cbiAgICBpZiAoc3RhdGVtZW50VmFsaWRhdGVzKSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke2NvbnN0cmFpbnRTdHJpbmd9JyBjb25zdHJhaW50J3Mgc3RhdGVtZW50LmApO1xuICAgIH1cblxuICAgIHJldHVybiBzdGF0ZW1lbnRWYWxpZGF0ZXM7XG4gIH1cblxuICB1bmlmeVJlZmVyZW5jZShyZWZlcmVuY2UsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICAgIGNvbnN0IGNvbnRleHQgPSBzcGVjaWZpY0NvbnRleHQsICAvLy9cbiAgICAgICAgICByZWZlcmVuY2VTdHJpbmcgPSByZWZlcmVuY2UuZ2V0U3RyaW5nKCksXG4gICAgICAgICAgY29uc3RyYWludFN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7IC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVW5pZnlpbmcgdGhlICcke3JlZmVyZW5jZVN0cmluZ30nIHJlZmVyZW5jZSB3aXRoIHRoZSAnJHtjb25zdHJhaW50U3RyaW5nfScgY29uc3RyYWludCdzIG1ldGF2YXJhaWFibGUuLi5gKTtcblxuICAgIGNvbnN0IG1ldGF2YXJpYWJsZSA9IHRoaXMuZ2V0TWV0YXZhcmlhYmxlKCk7XG5cbiAgICByZXR1cm4gbWV0YXZhcmlhYmxlLnVuaWZ5UmVmZXJlbmNlKHJlZmVyZW5jZSwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgKHJlZmVyZW5jZVVuaWZpZXMpID0+IHtcbiAgICAgIGlmIChyZWZlcmVuY2VVbmlmaWVzKSB7XG4gICAgICAgIGNvbnRleHQuZGVidWcoYC4udW5pZmllZCB0aGUgJyR7cmVmZXJlbmNlU3RyaW5nfScgd2l0aCB0aGUgJyR7Y29uc3RyYWludFN0cmluZ30nIGNvbnN0cmFpbnQncyBtZXRhdmFyaWFibGUuYCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjb250aW51YXRpb24ocmVmZXJlbmNlVW5pZmllcyk7XG4gICAgfSk7XG4gIH1cblxuICB1bmlmeVN0YXRlbWVudChzdGF0ZW1lbnQsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICAgIGNvbnN0IGNvbnRleHQgPSBzcGVjaWZpY0NvbnRleHQsICAvLy9cbiAgICAgICAgICBzdGF0ZW1lbnRTdHJpbmcgPSBzdGF0ZW1lbnQuZ2V0U3RyaW5nKCksXG4gICAgICAgICAgY29uc3RyYWludFN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7IC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVW5pZnlpbmcgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCB3aXRoIHRoZSAnJHtjb25zdHJhaW50U3RyaW5nfScgY29uc3RyYWludCdzIHN0YXRlbWVudC4uLmApO1xuXG4gICAgY29uc3QgZ2VuZXJhbFN0YXRlbWVudCA9IHRoaXMuc3RhdGVtZW50LCAgLy8vXG4gICAgICAgICAgc3BlY2lmaWNTdGF0ZW1lbnQgPSBzdHJpcEJyYWNrZXRzRnJvbVN0YXRlbWVudChzdGF0ZW1lbnQsIGNvbnRleHQpOyAgLy8vXG5cbiAgICByZXR1cm4gdW5pZnlTdGF0ZW1lbnQoZ2VuZXJhbFN0YXRlbWVudCwgc3BlY2lmaWNTdGF0ZW1lbnQsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIChzdGF0ZW1lbnRVbmlmaWVzKSA9PiB7XG4gICAgICBpZiAoc3RhdGVtZW50VW5pZmllcykge1xuICAgICAgICBjb250ZXh0LmRlYnVnKGAuLi51bmlmaWVkIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQgd2l0aCB0aGUgJyR7Y29uc3RyYWludFN0cmluZ30nIGNvbnN0cmFpbnQncyBzdGF0ZW1lbnQuYCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjb250aW51YXRpb24oc3RhdGVtZW50VW5pZmllcyk7XG4gICAgfSk7XG4gIH1cblxuICB1bmlmeUFzc3VtcHRpb24oYXNzdW1wdGlvbiwgY29udGV4dCwgY29udGludWF0aW9uKSB7XG4gICAgY29uc3QgYXNzdW1wdGlvblN0cmluZyA9IGFzc3VtcHRpb24uZ2V0U3RyaW5nKCksICAvLy9cbiAgICAgICAgICBjb25zdHJhaW50U3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYFVuaWZ5aW5nIHRoZSAnJHthc3N1bXB0aW9uU3RyaW5nfScgYXNzdW1wdGlvbiB3aXRoIHRoZSAnJHtjb25zdHJhaW50U3RyaW5nfScgY29uc3RyYWludC4uLmApO1xuXG4gICAgY29uc3QgY29uc3RyYWludENvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKSwgLy8vXG4gICAgICAgICAgZ2VuZXJhbENvbnRleHQgPSBjb25zdHJhaW50Q29udGV4dDsgLy8vXG5cbiAgICByZXR1cm4gcmVjb25jaWxlKChjb250ZXh0KSA9PiB7XG4gICAgICBjb25zdCByZWZlcmVuY2UgPSBhc3N1bXB0aW9uLmdldFJlZmVyZW5jZSgpLFxuICAgICAgICAgICAgc3BlY2lmaWNDb250ZXh0ID0gY29udGV4dDsgIC8vL1xuXG4gICAgICByZXR1cm4gdGhpcy51bmlmeVJlZmVyZW5jZShyZWZlcmVuY2UsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIChyZWZlcmVuY2VVbmlmaWVzKSA9PiB7XG4gICAgICAgIGlmICghcmVmZXJlbmNlVW5pZmllcykge1xuICAgICAgICAgIGNvbnN0IGFzc3VtcHRpb25VbmlmaWVzID0gZmFsc2U7XG5cbiAgICAgICAgICByZXR1cm4gY29udGludWF0aW9uKGFzc3VtcHRpb25VbmlmaWVzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHN0YXRlbWVudCA9IGFzc3VtcHRpb24uZ2V0U3RhdGVtZW50KCk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMudW5pZnlTdGF0ZW1lbnQoc3RhdGVtZW50LCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCAoc3RhdGVtZW50VW5pZmllcykgPT4ge1xuICAgICAgICAgIGxldCBhc3N1bXB0aW9uVW5pZmllcyA9IGZhbHNlO1xuXG4gICAgICAgICAgaWYgKHN0YXRlbWVudFVuaWZpZXMpIHtcbiAgICAgICAgICAgIGNvbnRleHQuY29tbWl0KCk7XG5cbiAgICAgICAgICAgIGFzc3VtcHRpb25VbmlmaWVzID0gdHJ1ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoYXNzdW1wdGlvblVuaWZpZXMpIHtcbiAgICAgICAgICAgIGNvbnRleHQuZGVidWcoYC4uLnVuaWZpZWQgdGhlICcke2Fzc3VtcHRpb25TdHJpbmd9JyBhc3N1bXB0aW9uIHdpdGggdGhlICcke2NvbnN0cmFpbnRTdHJpbmd9JyBjb25zdHJhaW50Li4uYCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihhc3N1bXB0aW9uVW5pZmllcyk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSwgY29udGV4dCk7XG4gIH1cblxuICB1bmlmeUFzc3VtcHRpb25zKGFzc3VtcHRpb25zLCBjb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgICBjb25zdCBjb25zdHJhaW50U3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYFVuaWZ5aW5nIHRoZSBhc3N1bXB0aW9ucyB3aXRoIHRoZSAnJHtjb25zdHJhaW50U3RyaW5nfScgY29uc3RyYWludC4uLmApO1xuXG4gICAgYXN5bmNocm9ub3VzU29tZShhc3N1bXB0aW9ucywgKGFzc3VtcHRpb24sIGNvbnRpbnVhdGlvbikgPT4ge1xuICAgICAgdGhpcy51bmlmeUFzc3VtcHRpb24oYXNzdW1wdGlvbiwgY29udGV4dCwgY29udGludWF0aW9uKTtcbiAgICB9LCAoYXNzdW1wdGlvbnNVbmlmeSkgPT4ge1xuICAgICAgaWYgKGFzc3VtcHRpb25zVW5pZnkpIHtcbiAgICAgICAgY29udGV4dC50cmFjZShgLi4udW5pZmllZCB0aGUgYXNzdW1wdGlvbnMgd2l0aCB0aGUgJyR7Y29uc3RyYWludFN0cmluZ30nIGNvbnN0cmFpbnQuYCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjb250aW51YXRpb24oYXNzdW1wdGlvbnNVbmlmeSk7XG4gICAgfSk7XG4gIH1cblxuICB0b0pTT04oKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpO1xuXG4gICAgcmV0dXJuIHNlcmlhbGlzZSgoY29udGV4dCkgPT4ge1xuICAgICAgY29uc3Qgc3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTtcblxuICAgICAgbGV0IGJyZWFrUG9pbnQ7XG5cbiAgICAgIGJyZWFrUG9pbnQgPSB0aGlzLmdldEJyZWFrUG9pbnQoKTtcblxuICAgICAgY29uc3QgYnJlYWtQb2ludEpTT04gPSBicmVha1BvaW50VG9CcmVha1BvaW50SlNPTihicmVha1BvaW50KTtcblxuICAgICAgYnJlYWtQb2ludCA9IGJyZWFrUG9pbnRKU09OOyAgLy8vXG5cbiAgICAgIGNvbnN0IGpzb24gPSB7XG4gICAgICAgIGNvbnRleHQsXG4gICAgICAgIHN0cmluZyxcbiAgICAgICAgYnJlYWtQb2ludFxuICAgICAgfTtcblxuICAgICAgcmV0dXJuIGpzb247XG4gICAgfSwgY29udGV4dCk7XG4gIH1cblxuICBzdGF0aWMgbmFtZSA9IFwiQ29uc3RyYWludFwiO1xuXG4gIHN0YXRpYyBmcm9tSlNPTihqc29uLCBjb250ZXh0KSB7XG4gICAgbGV0IGNvbnN0cmFpbnQ7XG5cbiAgICBpbnN0YW50aWF0ZSgoY29udGV4dCkgPT4ge1xuICAgICAgdW5zZXJpYWxpc2UoKGpzb24sIGNvbnRleHQpID0+IHtcbiAgICAgICAgY29uc3QgeyBzdHJpbmcgfSA9IGpzb24sXG4gICAgICAgICAgICAgIGNvbnN0cmFpbnROb2RlID0gaW5zdGFudGlhdGVDb25zdHJhaW50KHN0cmluZywgY29udGV4dCksXG4gICAgICAgICAgICAgIG5vZGUgPSBjb25zdHJhaW50Tm9kZSwgIC8vL1xuICAgICAgICAgICAgICBicmVha1BvaW50ID0gYnJlYWtQb2ludEZyb21KU09OKGpzb24pLFxuICAgICAgICAgICAgICByZWZlcmVuY2UgPSByZWZlcmVuY2VGcm9tQ29uc3RyYWludE5vZGUoY29uc3RyYWludE5vZGUsIGNvbnRleHQpLFxuICAgICAgICAgICAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tQ29uc3RyYWludE5vZGUoY29uc3RyYWludE5vZGUsIGNvbnRleHQpO1xuXG4gICAgICAgIGNvbnN0cmFpbnQgPSBuZXcgQ29uc3RyYWludChjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHJlZmVyZW5jZSwgc3RhdGVtZW50KTtcbiAgICAgIH0sIGpzb24sIGNvbnRleHQpO1xuICAgIH0sIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIGNvbnN0cmFpbnQ7XG4gIH1cblxuICBzdGF0aWMgZnJvbVN0ZXAoc3RlcCwgY29udGV4dCkge1xuICAgIGxldCBjb25zdHJhaW50O1xuXG4gICAgbGV0IHN0YXRlbWVudDtcblxuICAgIHN0YXRlbWVudCA9IHN0ZXAuZ2V0U3RhdGVtZW50KCk7XG5cbiAgICBzdGF0ZW1lbnQgPSBzdHJpcEJyYWNrZXRzRnJvbVN0YXRlbWVudChzdGF0ZW1lbnQsIGNvbnRleHQpOyAvLy9cblxuICAgIGNvbnN0IHJlZmVyZW5jZSA9IHN0ZXAuZ2V0UmVmZXJlbmNlKCk7XG5cbiAgICBhYmxhdGUoKGNvbnRleHQpID0+IHtcbiAgICAgIGluc3RhbnRpYXRlKChjb250ZXh0KSA9PiB7XG4gICAgICAgIGNvbnN0IGNvbnN0cmFpbnRTdHJpbmcgPSBjb25zdHJhaW50U3RyaW5nRnJvbVJlZmVyZW5jZUFuZFN0YXRlbWVudChyZWZlcmVuY2UsIHN0YXRlbWVudCksXG4gICAgICAgICAgICAgIHN0cmluZyA9IGNvbnN0cmFpbnRTdHJpbmcsICAvLy9cbiAgICAgICAgICAgICAgY29uc3RyYWludE5vZGUgPSBpbnN0YW50aWF0ZUNvbnN0cmFpbnQoc3RyaW5nLCBjb250ZXh0KTtcblxuICAgICAgICBjb25zdHJhaW50ID0gY29uc3RyYWludEZyb21Db25zdHJhaW50Tm9kZShjb25zdHJhaW50Tm9kZSwgY29udGV4dCk7XG4gICAgICB9LCBjb250ZXh0KTtcbiAgICB9LCBjb250ZXh0KTtcblxuICAgIHJldHVybiBjb25zdHJhaW50O1xuICB9XG59KTtcblxuZnVuY3Rpb24gcmVmZXJlbmNlRnJvbUNvbnN0cmFpbnROb2RlKGNvbnN0cmFpbnROb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHJlZmVyZW5jZU5vZGUgPSBjb25zdHJhaW50Tm9kZS5nZXRSZWZlcmVuY2VOb2RlKCksXG4gICAgICAgIHJlZmVybmVjZSA9IGNvbnRleHQuZmluZFJlZmVyZW5jZUJ5UmVmZXJlbmNlTm9kZShyZWZlcmVuY2VOb2RlKTtcblxuICByZXR1cm4gcmVmZXJuZWNlO1xufVxuXG5mdW5jdGlvbiBzdGF0ZW1lbnRGcm9tQ29uc3RyYWludE5vZGUoY29uc3RyYWludE5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3Qgc3RhdGVtZW50Tm9kZSA9IGNvbnN0cmFpbnROb2RlLmdldFN0YXRlbWVudE5vZGUoKSxcbiAgICAgICAgc3RhdGVtZW50ID0gY29udGV4dC5maW5kU3RhdGVtZW50QnlTdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUpO1xuXG4gIHJldHVybiBzdGF0ZW1lbnQ7XG59XG4iXSwibmFtZXMiOlsiYXN5bmNocm9ub3VzU29tZSIsImNvbnRpbnVhdGlvblV0aWxpdGllcyIsImJyZWFrUG9pbnRGcm9tSlNPTiIsImJyZWFrUG9pbnRUb0JyZWFrUG9pbnRKU09OIiwiYnJlYWtQb2ludFV0aWxpdGllcyIsImRlZmluZSIsIkNvbnN0cmFpbnQiLCJFbGVtZW50IiwiY29udGV4dCIsInN0cmluZyIsIm5vZGUiLCJicmVha1BvaW50IiwicmVmZXJlbmNlIiwic3RhdGVtZW50IiwiZ2V0UmVmZXJlbmNlIiwiZ2V0U3RhdGVtZW50IiwiZ2V0Q29uc3RyYWludE5vZGUiLCJnZXROb2RlIiwiY29uc3RyYWludE5vZGUiLCJnZXRNZXRhdmFyaWFibGUiLCJpc0VxdWFsVG8iLCJjb25zdHJhaW50IiwiY29uc3RyYWludE5vZGVNYXRjaGVzIiwibWF0Y2hDb25zdHJhaW50Tm9kZSIsImVxdWFsVG8iLCJub2RlTWF0Y2hlcyIsIm1hdGNoTm9kZSIsImZpbmRDb25zdHJhaW50IiwiZmluZENvbnN0cmFpbnRCeUNvbnN0cmFpbnROb2RlIiwidmFsaWRhdGUiLCJzdGF0ZSIsImNvbnRpbnVhdGlvbiIsInZhbGlkYXRlcyIsInNwZWNpZmljQ29udGV4dCIsImNvbnN0cmFpbnRTdHJpbmciLCJnZXRTdHJpbmciLCJ0cmFjZSIsImRlYnVnIiwiZ2V0Q29udGV4dCIsImF0dGVtcHQiLCJ2YWxpZGF0ZVN0YXRlbWVudCIsImJpbmQiLCJ2YWxpZGF0ZVJlZmVyZW5jZSIsImFsbCIsImNvbW1pdCIsImFkZENvbnN0cmFpbnQiLCJyZWZlcmVuY2VWYWxpZGF0ZXMiLCJzdGF0ZW1lbnRWYWxpZGF0ZXMiLCJ1bmlmeVJlZmVyZW5jZSIsImdlbmVyYWxDb250ZXh0IiwicmVmZXJlbmNlU3RyaW5nIiwibWV0YXZhcmlhYmxlIiwicmVmZXJlbmNlVW5pZmllcyIsInVuaWZ5U3RhdGVtZW50Iiwic3RhdGVtZW50U3RyaW5nIiwiZ2VuZXJhbFN0YXRlbWVudCIsInNwZWNpZmljU3RhdGVtZW50Iiwic3RyaXBCcmFja2V0c0Zyb21TdGF0ZW1lbnQiLCJzdGF0ZW1lbnRVbmlmaWVzIiwidW5pZnlBc3N1bXB0aW9uIiwiYXNzdW1wdGlvbiIsImFzc3VtcHRpb25TdHJpbmciLCJjb25zdHJhaW50Q29udGV4dCIsInJlY29uY2lsZSIsImFzc3VtcHRpb25VbmlmaWVzIiwidW5pZnlBc3N1bXB0aW9ucyIsImFzc3VtcHRpb25zIiwiYXNzdW1wdGlvbnNVbmlmeSIsInRvSlNPTiIsInNlcmlhbGlzZSIsImdldEJyZWFrUG9pbnQiLCJicmVha1BvaW50SlNPTiIsImpzb24iLCJuYW1lIiwiZnJvbUpTT04iLCJpbnN0YW50aWF0ZSIsInVuc2VyaWFsaXNlIiwiaW5zdGFudGlhdGVDb25zdHJhaW50IiwicmVmZXJlbmNlRnJvbUNvbnN0cmFpbnROb2RlIiwic3RhdGVtZW50RnJvbUNvbnN0cmFpbnROb2RlIiwiZnJvbVN0ZXAiLCJzdGVwIiwiYWJsYXRlIiwiY29uc3RyYWludFN0cmluZ0Zyb21SZWZlcmVuY2VBbmRTdGF0ZW1lbnQiLCJjb25zdHJhaW50RnJvbUNvbnN0cmFpbnROb2RlIiwicmVmZXJlbmNlTm9kZSIsImdldFJlZmVyZW5jZU5vZGUiLCJyZWZlcm5lY2UiLCJmaW5kUmVmZXJlbmNlQnlSZWZlcmVuY2VOb2RlIiwic3RhdGVtZW50Tm9kZSIsImdldFN0YXRlbWVudE5vZGUiLCJmaW5kU3RhdGVtZW50QnlTdGF0ZW1lbnROb2RlIl0sIm1hcHBpbmdzIjoiQUFBQTs7OzsrQkFnQkE7OztlQUFBOzs7Z0NBZG9FOzhCQUVoRDswQkFDRzt1QkFDUTs2QkFDTzswQkFDSzt5QkFDRTt3QkFDYTt5QkFDc0I7QUFFaEYsTUFBTSxFQUFFQSxnQkFBZ0IsRUFBRSxHQUFHQyxxQ0FBcUIsRUFDNUMsRUFBRUMsa0JBQWtCLEVBQUVDLDBCQUEwQixFQUFFLEdBQUdDLG1DQUFtQjtNQUU5RSxXQUFlQyxJQUFBQSxnQkFBTSxFQUFDLE1BQU1DLG1CQUFtQkMsdUJBQU87SUFDcEQsWUFBWUMsT0FBTyxFQUFFQyxNQUFNLEVBQUVDLElBQUksRUFBRUMsVUFBVSxFQUFFQyxTQUFTLEVBQUVDLFNBQVMsQ0FBRTtRQUNuRSxLQUFLLENBQUNMLFNBQVNDLFFBQVFDLE1BQU1DO1FBRTdCLElBQUksQ0FBQ0MsU0FBUyxHQUFHQTtRQUNqQixJQUFJLENBQUNDLFNBQVMsR0FBR0E7SUFDbkI7SUFFQUMsZUFBZTtRQUNiLE9BQU8sSUFBSSxDQUFDRixTQUFTO0lBQ3ZCO0lBRUFHLGVBQWU7UUFDYixPQUFPLElBQUksQ0FBQ0YsU0FB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
266
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9lbGVtZW50L2NvbnN0cmFpbnQuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IEVsZW1lbnQsIGJyZWFrUG9pbnRVdGlsaXRpZXMsIGNvbnRpbnVhdGlvblV0aWxpdGllcyB9IGZyb20gXCJvY2NhbS1sYW5ndWFnZXNcIjtcblxuaW1wb3J0IHsgYWxsIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9jb250aW51YXRpb25cIjtcbmltcG9ydCB7IGRlZmluZSB9IGZyb20gXCIuLi9lbGVtZW50c1wiO1xuaW1wb3J0IHsgdW5pZnlTdGF0ZW1lbnQgfSBmcm9tIFwiLi4vcHJvY2Vzcy91bmlmeVwiO1xuaW1wb3J0IHsgaW5zdGFudGlhdGVDb25zdHJhaW50IH0gZnJvbSBcIi4uL3Byb2Nlc3MvaW5zdGFudGlhdGVcIjtcbmltcG9ydCB7IHN0cmlwQnJhY2tldHNGcm9tU3RhdGVtZW50IH0gZnJvbSBcIi4uL3V0aWxpdGllcy9icmFja2V0c1wiO1xuaW1wb3J0IHsgY29uc3RyYWludEZyb21Db25zdHJhaW50Tm9kZSB9IGZyb20gXCIuLi91dGlsaXRpZXMvZWxlbWVudFwiO1xuaW1wb3J0IHsgY29uc3RyYWludFN0cmluZ0Zyb21SZWZlcmVuY2VBbmRTdGF0ZW1lbnQgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL3N0cmluZ1wiO1xuaW1wb3J0IHsgam9pbiwgYWJsYXRlLCBhdHRlbXB0LCByZWNvbmNpbGUsIHNlcmlhbGlzZSwgdW5zZXJpYWxpc2UsIGluc3RhbnRpYXRlIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9jb250ZXh0XCI7XG5cbmNvbnN0IHsgYXN5bmNocm9ub3VzU29tZSB9ID0gY29udGludWF0aW9uVXRpbGl0aWVzLFxuICAgICAgeyBicmVha1BvaW50RnJvbUpTT04sIGJyZWFrUG9pbnRUb0JyZWFrUG9pbnRKU09OIH0gPSBicmVha1BvaW50VXRpbGl0aWVzO1xuXG5leHBvcnQgZGVmYXVsdCBkZWZpbmUoY2xhc3MgQ29uc3RyYWludCBleHRlbmRzIEVsZW1lbnQge1xuICBjb25zdHJ1Y3Rvcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHJlZmVyZW5jZSwgc3RhdGVtZW50KSB7XG4gICAgc3VwZXIoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50KTtcblxuICAgIHRoaXMucmVmZXJlbmNlID0gcmVmZXJlbmNlO1xuICAgIHRoaXMuc3RhdGVtZW50ID0gc3RhdGVtZW50O1xuICB9XG5cbiAgZ2V0UmVmZXJlbmNlKCkge1xuICAgIHJldHVybiB0aGlzLnJlZmVyZW5jZTtcbiAgfVxuXG4gIGdldFN0YXRlbWVudCgpIHtcbiAgICByZXR1cm4gdGhpcy5zdGF0ZW1lbnQ7XG4gIH1cblxuICBnZXRDb25zdHJhaW50Tm9kZSgpIHtcbiAgICBjb25zdCBub2RlID0gdGhpcy5nZXROb2RlKCksXG4gICAgICAgICAgY29uc3RyYWludE5vZGUgPSBub2RlOyAgLy8vXG5cbiAgICByZXR1cm4gY29uc3RyYWludE5vZGU7XG4gIH1cblxuICBnZXRNZXRhdmFyaWFibGUoKSB7IHJldHVybiB0aGlzLnJlZmVyZW5jZS5nZXRNZXRhdmFyaWFibGUoKTsgfVxuXG4gIGlzRXF1YWxUbyhjb25zdHJhaW50KSB7XG4gICAgY29uc3QgY29uc3RyYWludE5vZGUgPSBjb25zdHJhaW50LmdldE5vZGUoKSxcbiAgICAgICAgICBjb25zdHJhaW50Tm9kZU1hdGNoZXMgPSB0aGlzLm1hdGNoQ29uc3RyYWludE5vZGUoY29uc3RyYWludE5vZGUpLFxuICAgICAgICAgIGVxdWFsVG8gPSBjb25zdHJhaW50Tm9kZU1hdGNoZXM7ICAvLy9cblxuICAgIHJldHVybiBlcXVhbFRvO1xuICB9XG5cbiAgbWF0Y2hDb25zdHJhaW50Tm9kZShjb25zdHJhaW50Tm9kZSkge1xuICAgIGNvbnN0IG5vZGUgPSBjb25zdHJhaW50Tm9kZSwgLy8vXG4gICAgICAgICAgbm9kZU1hdGNoZXMgPSB0aGlzLm1hdGNoTm9kZShub2RlKSxcbiAgICAgICAgICBjb25zdHJhaW50Tm9kZU1hdGNoZXMgPSBub2RlTWF0Y2hlczsgLy8vXG5cbiAgICByZXR1cm4gY29uc3RyYWludE5vZGVNYXRjaGVzO1xuICB9XG5cbiAgZmluZENvbnN0cmFpbnQoY29udGV4dCkge1xuICAgIGNvbnN0IGNvbnN0cmFpbnROb2RlID0gdGhpcy5nZXRDb25zdHJhaW50Tm9kZSgpLFxuICAgICAgICAgIGNvbnN0cmFpbnQgPSBjb250ZXh0LmZpbmRDb25zdHJhaW50QnlDb25zdHJhaW50Tm9kZShjb25zdHJhaW50Tm9kZSk7XG5cbiAgICByZXR1cm4gY29uc3RyYWludDtcbiAgfVxuXG4gIHZhbGlkYXRlKHN0YXRlLCBjb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgICBsZXQgdmFsaWRhdGVzO1xuXG4gICAgY29uc3Qgc3BlY2lmaWNDb250ZXh0ID0gY29udGV4dCwgIC8vL1xuICAgICAgICAgIGNvbnN0cmFpbnRTdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0aW5nIHRoZSAnJHtjb25zdHJhaW50U3RyaW5nfScgY29uc3RyYWludC4uLmApO1xuXG4gICAgbGV0IGNvbnN0cmFpbnQ7XG5cbiAgICBjb25zdHJhaW50ID0gdGhpcy5maW5kQ29uc3RyYWludChjb250ZXh0KTtcblxuICAgIGlmIChjb25zdHJhaW50ICE9PSBudWxsKSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGBUaGUgJyR7Y29uc3RyYWludFN0cmluZ30nIGNvbnN0cmFpbnQgaXMgYWxyZWFkeSBwcmVzZW50LmApO1xuXG4gICAgICB2YWxpZGF0ZXMgPSBjb250aW51YXRpb24oY29uc3RyYWludCwgY29udGV4dCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0cmFpbnQgPSB0aGlzOyAgLy8vXG5cbiAgICAgIGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKTtcblxuICAgICAgYXR0ZW1wdCgoY29udGV4dCkgPT4ge1xuICAgICAgICBjb25zdCB2YWxpZGF0ZVN0YXRlbWVudCA9IHRoaXMudmFsaWRhdGVTdGF0ZW1lbnQuYmluZCh0aGlzKSxcbiAgICAgICAgICAgICAgdmFsaWRhdGVSZWZlcmVuY2UgPSB0aGlzLnZhbGlkYXRlUmVmZXJlbmNlLmJpbmQodGhpcyk7XG5cbiAgICAgICAgdmFsaWRhdGVzID0gYWxsKFtcbiAgICAgICAgICB2YWxpZGF0ZVN0YXRlbWVudCxcbiAgICAgICAgICB2YWxpZGF0ZVJlZmVyZW5jZVxuICAgICAgICBdLCBzdGF0ZSwgY29udGV4dCwgKHN0YXRlLCBjb250ZXh0KSA9PiB7XG4gICAgICAgICAgbGV0IHZhbGlkYXRlcztcblxuICAgICAgICAgIHRoaXMuY29tbWl0KGNvbnRleHQpO1xuXG4gICAgICAgICAgY29udGV4dCA9IHNwZWNpZmljQ29udGV4dDsgIC8vL1xuXG4gICAgICAgICAgdmFsaWRhdGVzID0gY29udGludWF0aW9uKGNvbnN0cmFpbnQsIGNvbnRleHQpO1xuXG4gICAgICAgICAgcmV0dXJuIHZhbGlkYXRlcztcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKHZhbGlkYXRlcykge1xuICAgICAgICAgIGNvbnRleHQgPSBzcGVjaWZpY0NvbnRleHQ7ICAvLy9cblxuICAgICAgICAgIGNvbnRleHQuYWRkQ29uc3RyYWludChjb25zdHJhaW50KTtcbiAgICAgICAgfVxuICAgICAgfSwgY29udGV4dCk7XG4gICAgfVxuXG4gICAgY29udGV4dCA9IHNwZWNpZmljQ29udGV4dDsgIC8vL1xuXG4gICAgaWYgKHZhbGlkYXRlcykge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmFsaWRhdGVkIHRoZSAnJHtjb25zdHJhaW50U3RyaW5nfScgY29uc3RyYWludC5gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdmFsaWRhdGVzO1xuICB9XG5cbiAgdmFsaWRhdGVSZWZlcmVuY2Uoc3RhdGUsIGNvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICAgIGxldCByZWZlcmVuY2VWYWxpZGF0ZXM7XG5cbiAgICBjb25zdCBjb25zdHJhaW50U3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgIC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7Y29uc3RyYWludFN0cmluZ30nIGNvbnN0cmFpbnQncyByZWZlcmVuY2UuLi5gKTtcblxuICAgIHJlZmVyZW5jZVZhbGlkYXRlcyA9IHRoaXMucmVmZXJlbmNlLnZhbGlkYXRlKHN0YXRlLCBjb250ZXh0LCAocmVmZXJlbmNlLCBjb250ZXh0KSA9PiB7XG4gICAgICBsZXQgdmFsaWRhdGVzO1xuXG4gICAgICB0aGlzLnJlZmVyZW5jZSA9IHJlZmVyZW5jZTtcblxuICAgICAgdmFsaWRhdGVzID0gY29udGludWF0aW9uKHN0YXRlLCBjb250ZXh0KTtcblxuICAgICAgcmV0dXJuIHZhbGlkYXRlcztcbiAgICB9KTtcblxuICAgIGlmIChyZWZlcmVuY2VWYWxpZGF0ZXMpIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlZCB0aGUgJyR7Y29uc3RyYWludFN0cmluZ30nIGNvbnN0cmFpbnQncyByZWZlcmVuY2UuYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlZmVyZW5jZVZhbGlkYXRlcztcbiAgfVxuXG4gIHZhbGlkYXRlU3RhdGVtZW50KHN0YXRlLCBjb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgICBsZXQgc3RhdGVtZW50VmFsaWRhdGVzO1xuXG4gICAgY29uc3QgY29uc3RyYWludFN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7ICAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke2NvbnN0cmFpbnRTdHJpbmd9JyBjb25zdHJhaW50J3Mgc3RhdGVtZW50Li4uYCk7XG5cbiAgICBzdGF0ZW1lbnRWYWxpZGF0ZXMgPSB0aGlzLnN0YXRlbWVudC52YWxpZGF0ZShzdGF0ZSwgY29udGV4dCwgKHN0YXRlbWVudCwgY29udGV4dCkgPT4ge1xuICAgICAgbGV0IHZhbGlkYXRlcztcblxuICAgICAgdGhpcy5zdGF0ZW1lbnQgPSBzdGF0ZW1lbnQ7XG5cbiAgICAgIHZhbGlkYXRlcyA9IGNvbnRpbnVhdGlvbihzdGF0ZSwgY29udGV4dCk7XG5cbiAgICAgIHJldHVybiB2YWxpZGF0ZXM7XG4gICAgfSk7XG5cbiAgICBpZiAoc3RhdGVtZW50VmFsaWRhdGVzKSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke2NvbnN0cmFpbnRTdHJpbmd9JyBjb25zdHJhaW50J3Mgc3RhdGVtZW50LmApO1xuICAgIH1cblxuICAgIHJldHVybiBzdGF0ZW1lbnRWYWxpZGF0ZXM7XG4gIH1cblxuICB1bmlmeVJlZmVyZW5jZShyZWZlcmVuY2UsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICAgIGNvbnN0IGNvbnRleHQgPSBzcGVjaWZpY0NvbnRleHQsICAvLy9cbiAgICAgICAgICByZWZlcmVuY2VTdHJpbmcgPSByZWZlcmVuY2UuZ2V0U3RyaW5nKCksXG4gICAgICAgICAgY29uc3RyYWludFN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7IC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVW5pZnlpbmcgdGhlICcke3JlZmVyZW5jZVN0cmluZ30nIHJlZmVyZW5jZSB3aXRoIHRoZSAnJHtjb25zdHJhaW50U3RyaW5nfScgY29uc3RyYWludCdzIG1ldGF2YXJhaWFibGUuLi5gKTtcblxuICAgIGNvbnN0IG1ldGF2YXJpYWJsZSA9IHRoaXMuZ2V0TWV0YXZhcmlhYmxlKCk7XG5cbiAgICByZXR1cm4gbWV0YXZhcmlhYmxlLnVuaWZ5UmVmZXJlbmNlKHJlZmVyZW5jZSwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgKHJlZmVyZW5jZVVuaWZpZXMpID0+IHtcbiAgICAgIGlmIChyZWZlcmVuY2VVbmlmaWVzKSB7XG4gICAgICAgIGNvbnRleHQuZGVidWcoYC4udW5pZmllZCB0aGUgJyR7cmVmZXJlbmNlU3RyaW5nfScgd2l0aCB0aGUgJyR7Y29uc3RyYWludFN0cmluZ30nIGNvbnN0cmFpbnQncyBtZXRhdmFyaWFibGUuYCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjb250aW51YXRpb24ocmVmZXJlbmNlVW5pZmllcyk7XG4gICAgfSk7XG4gIH1cblxuICB1bmlmeVN0YXRlbWVudChzdGF0ZW1lbnQsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICAgIGNvbnN0IGNvbnRleHQgPSBzcGVjaWZpY0NvbnRleHQsICAvLy9cbiAgICAgICAgICBzdGF0ZW1lbnRTdHJpbmcgPSBzdGF0ZW1lbnQuZ2V0U3RyaW5nKCksXG4gICAgICAgICAgY29uc3RyYWludFN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7IC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVW5pZnlpbmcgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCB3aXRoIHRoZSAnJHtjb25zdHJhaW50U3RyaW5nfScgY29uc3RyYWludCdzIHN0YXRlbWVudC4uLmApO1xuXG4gICAgbGV0IHNwZWNpZmljU3RhdGVtZW50O1xuXG4gICAgc3BlY2lmaWNTdGF0ZW1lbnQgPSBzdGF0ZW1lbnQ7ICAvLy9cblxuICAgIHNwZWNpZmljU3RhdGVtZW50ID0gc3RyaXBCcmFja2V0c0Zyb21TdGF0ZW1lbnQoc3BlY2lmaWNTdGF0ZW1lbnQsIGNvbnRleHQpOyAgLy8vXG5cbiAgICBjb25zdCBnZW5lcmFsU3RhdGVtZW50ID0gdGhpcy5zdGF0ZW1lbnQ7ICAvLy9cblxuICAgIHJldHVybiB1bmlmeVN0YXRlbWVudChnZW5lcmFsU3RhdGVtZW50LCBzcGVjaWZpY1N0YXRlbWVudCwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgKHN0YXRlbWVudFVuaWZpZXMpID0+IHtcbiAgICAgIGlmIChzdGF0ZW1lbnRVbmlmaWVzKSB7XG4gICAgICAgIGNvbnRleHQuZGVidWcoYC4uLnVuaWZpZWQgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCB3aXRoIHRoZSAnJHtjb25zdHJhaW50U3RyaW5nfScgY29uc3RyYWludCdzIHN0YXRlbWVudC5gKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihzdGF0ZW1lbnRVbmlmaWVzKTtcbiAgICB9KTtcbiAgfVxuXG4gIHVuaWZ5QXNzdW1wdGlvbihhc3N1bXB0aW9uLCBjb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgICBjb25zdCBjb25zdHJhaW50U3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKSwgIC8vL1xuICAgICAgICAgIGFzc3VtcHRpb25TdHJpbmcgPSBhc3N1bXB0aW9uLmdldFN0cmluZygpICAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFVuaWZ5aW5nIHRoZSAnJHthc3N1bXB0aW9uU3RyaW5nfScgYXNzdW1wdGlvbiB3aXRoIHRoZSAnJHtjb25zdHJhaW50U3RyaW5nfScgY29uc3RyYWludC4uLmApO1xuXG4gICAgY29uc3QgY29uc3RyYWludENvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKSwgLy8vXG4gICAgICAgICAgZ2VuZXJhbENvbnRleHQgPSBjb25zdHJhaW50Q29udGV4dDsgLy8vXG5cbiAgICByZXR1cm4gcmVjb25jaWxlKChjb250ZXh0KSA9PiB7XG4gICAgICBjb25zdCByZWZlcmVuY2UgPSBhc3N1bXB0aW9uLmdldFJlZmVyZW5jZSgpLFxuICAgICAgICAgICAgc3BlY2lmaWNDb250ZXh0ID0gY29udGV4dDsgIC8vL1xuXG4gICAgICByZXR1cm4gdGhpcy51bmlmeVJlZmVyZW5jZShyZWZlcmVuY2UsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIChyZWZlcmVuY2VVbmlmaWVzKSA9PiB7XG4gICAgICAgIGlmICghcmVmZXJlbmNlVW5pZmllcykge1xuICAgICAgICAgIGNvbnN0IGFzc3VtcHRpb25VbmlmaWVzID0gZmFsc2U7XG5cbiAgICAgICAgICByZXR1cm4gY29udGludWF0aW9uKGFzc3VtcHRpb25VbmlmaWVzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHN0YXRlbWVudCA9IGFzc3VtcHRpb24uZ2V0U3RhdGVtZW50KCk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMudW5pZnlTdGF0ZW1lbnQoc3RhdGVtZW50LCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCAoc3RhdGVtZW50VW5pZmllcykgPT4ge1xuICAgICAgICAgIGxldCBhc3N1bXB0aW9uVW5pZmllcyA9IGZhbHNlO1xuXG4gICAgICAgICAgaWYgKHN0YXRlbWVudFVuaWZpZXMpIHtcbiAgICAgICAgICAgIGNvbnRleHQuY29tbWl0KCk7XG5cbiAgICAgICAgICAgIGFzc3VtcHRpb25VbmlmaWVzID0gdHJ1ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoYXNzdW1wdGlvblVuaWZpZXMpIHtcbiAgICAgICAgICAgIGNvbnRleHQuZGVidWcoYC4uLnVuaWZpZWQgdGhlICcke2Fzc3VtcHRpb25TdHJpbmd9JyBhc3N1bXB0aW9uIHdpdGggdGhlICcke2NvbnN0cmFpbnRTdHJpbmd9JyBjb25zdHJhaW50Li4uYCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihhc3N1bXB0aW9uVW5pZmllcyk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSwgY29udGV4dCk7XG4gIH1cblxuICB1bmlmeUFzc3VtcHRpb25zKGFzc3VtcHRpb25zLCBjb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgICBjb25zdCBjb25zdHJhaW50U3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYFVuaWZ5aW5nIHRoZSBhc3N1bXB0aW9ucyB3aXRoIHRoZSAnJHtjb25zdHJhaW50U3RyaW5nfScgY29uc3RyYWludC4uLmApO1xuXG4gICAgYXN5bmNocm9ub3VzU29tZShhc3N1bXB0aW9ucywgKGFzc3VtcHRpb24sIGNvbnRpbnVhdGlvbikgPT4ge1xuICAgICAgdGhpcy51bmlmeUFzc3VtcHRpb24oYXNzdW1wdGlvbiwgY29udGV4dCwgY29udGludWF0aW9uKTtcbiAgICB9LCAoYXNzdW1wdGlvbnNVbmlmeSkgPT4ge1xuICAgICAgaWYgKGFzc3VtcHRpb25zVW5pZnkpIHtcbiAgICAgICAgY29udGV4dC50cmFjZShgLi4udW5pZmllZCB0aGUgYXNzdW1wdGlvbnMgd2l0aCB0aGUgJyR7Y29uc3RyYWludFN0cmluZ30nIGNvbnN0cmFpbnQuYCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjb250aW51YXRpb24oYXNzdW1wdGlvbnNVbmlmeSk7XG4gICAgfSk7XG4gIH1cblxuICB1bmlmeUltcGxpY2l0QXNzdW1wdGlvbihpbXBsaWNpdEFzc3VtcHRpb24sIGNvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICAgIGNvbnN0IGNvbnN0cmFpbnRTdHJpbmcgPSB0aGlzLmdldFN0cmluZygpLCAgLy8vXG4gICAgICAgICAgaW1wbGljaXRBc3N1bXB0aW9uU3RyaW5nID0gaW1wbGljaXRBc3N1bXB0aW9uLmdldFN0cmluZygpOyAgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBVbmlmeWluZyB0aGUgJyR7aW1wbGljaXRBc3N1bXB0aW9uU3RyaW5nfScgaW1wbGljaXQgYXNzdW1wdGlvbiB3aXRoIHRoZSAnJHtjb25zdHJhaW50U3RyaW5nfScgY29uc3RyYWludC4uLmApO1xuXG4gICAgY29uc3QgY29uc3RyYWludENvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKSwgLy8vXG4gICAgICAgICAgaW1wbGljaXRBc3N1bXB0aW9uQ29udGV4dCA9IGltcGxpY2l0QXNzdW1wdGlvbi5nZXRDb250ZXh0KCksXG4gICAgICAgICAgZ2VuZXJhbENvbnRleHQgPSBjb25zdHJhaW50Q29udGV4dCwgLy8vXG4gICAgICAgICAgc3BlY2lmaWNDb250ZXh0ID0gaW1wbGljaXRBc3N1bXB0aW9uQ29udGV4dDsgIC8vL1xuXG4gICAgcmV0dXJuIGpvaW4oKHNwZWNpZmljQ29udGV4dCkgPT4ge1xuICAgICAgcmV0dXJuIHJlY29uY2lsZSgoc3BlY2lmaWNDb250ZXh0KSA9PiB7XG4gICAgICAgIGNvbnN0IHN0YXRlbWVudCA9IGltcGxpY2l0QXNzdW1wdGlvbi5nZXRTdGF0ZW1lbnQoKTtcblxuICAgICAgICByZXR1cm4gdGhpcy51bmlmeVN0YXRlbWVudChzdGF0ZW1lbnQsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIChzdGF0ZW1lbnRVbmlmaWVzKSA9PiB7XG4gICAgICAgICAgbGV0IGltcGxpY2l0QXNzdW1wdGlvblVuaWZpZXMgPSBmYWxzZTtcblxuICAgICAgICAgIGlmIChzdGF0ZW1lbnRVbmlmaWVzKSB7XG4gICAgICAgICAgICBzcGVjaWZpY0NvbnRleHQuY29tbWl0KGNvbnRleHQpO1xuXG4gICAgICAgICAgICBpbXBsaWNpdEFzc3VtcHRpb25VbmlmaWVzID0gdHJ1ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoaW1wbGljaXRBc3N1bXB0aW9uVW5pZmllcykge1xuICAgICAgICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udW5pZmllZCB0aGUgJyR7aW1wbGljaXRBc3N1bXB0aW9uU3RyaW5nfScgaW1wbGxpY2l0IGFzc3VtcHRpb24gd2l0aCB0aGUgJyR7Y29uc3RyYWludFN0cmluZ30nIGNvbnN0cmFpbnQuLi5gKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gY29udGludWF0aW9uKGltcGxpY2l0QXNzdW1wdGlvblVuaWZpZXMpO1xuICAgICAgICB9KTtcbiAgICAgIH0sIHNwZWNpZmljQ29udGV4dCk7XG4gICAgfSwgc3BlY2lmaWNDb250ZXh0LCBjb250ZXh0KTtcbiAgfVxuXG4gIHVuaWZ5SW1wbGljaXRBc3N1bXB0aW9ucyhpbXBsaWNpdEFzc3VtcHRpb25zLCBjb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgICBjb25zdCBjb25zdHJhaW50U3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYFVuaWZ5aW5nIHRoZSBpbXBsaWNpdCBhc3N1bXB0aW9ucyB3aXRoIHRoZSAnJHtjb25zdHJhaW50U3RyaW5nfScgY29uc3RyYWludC4uLmApO1xuXG4gICAgYXN5bmNocm9ub3VzU29tZShpbXBsaWNpdEFzc3VtcHRpb25zLCAoaW1wbGljaXRBc3N1bXB0aW9uLCBjb250aW51YXRpb24pID0+IHtcbiAgICAgIHRoaXMudW5pZnlJbXBsaWNpdEFzc3VtcHRpb24oaW1wbGljaXRBc3N1bXB0aW9uLCBjb250ZXh0LCBjb250aW51YXRpb24pO1xuICAgIH0sIChpbXBsaWNpdEFzc3VtcHRpb25zVW5pZnkpID0+IHtcbiAgICAgIGlmIChpbXBsaWNpdEFzc3VtcHRpb25zVW5pZnkpIHtcbiAgICAgICAgY29udGV4dC50cmFjZShgLi4udW5pZmllZCB0aGUgaW1wbGljaXQgYXNzdW1wdGlvbnMgd2l0aCB0aGUgJyR7Y29uc3RyYWludFN0cmluZ30nIGNvbnN0cmFpbnQuYCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjb250aW51YXRpb24oaW1wbGljaXRBc3N1bXB0aW9uc1VuaWZ5KTtcbiAgICB9KTtcbiAgfVxuXG4gIHRvSlNPTigpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCk7XG5cbiAgICByZXR1cm4gc2VyaWFsaXNlKChjb250ZXh0KSA9PiB7XG4gICAgICBjb25zdCBzdHJpbmcgPSB0aGlzLmdldFN0cmluZygpO1xuXG4gICAgICBsZXQgYnJlYWtQb2ludDtcblxuICAgICAgYnJlYWtQb2ludCA9IHRoaXMuZ2V0QnJlYWtQb2ludCgpO1xuXG4gICAgICBjb25zdCBicmVha1BvaW50SlNPTiA9IGJyZWFrUG9pbnRUb0JyZWFrUG9pbnRKU09OKGJyZWFrUG9pbnQpO1xuXG4gICAgICBicmVha1BvaW50ID0gYnJlYWtQb2ludEpTT047ICAvLy9cblxuICAgICAgY29uc3QganNvbiA9IHtcbiAgICAgICAgY29udGV4dCxcbiAgICAgICAgc3RyaW5nLFxuICAgICAgICBicmVha1BvaW50XG4gICAgICB9O1xuXG4gICAgICByZXR1cm4ganNvbjtcbiAgICB9LCBjb250ZXh0KTtcbiAgfVxuXG4gIHN0YXRpYyBuYW1lID0gXCJDb25zdHJhaW50XCI7XG5cbiAgc3RhdGljIGZyb21KU09OKGpzb24sIGNvbnRleHQpIHtcbiAgICBsZXQgY29uc3RyYWludDtcblxuICAgIGluc3RhbnRpYXRlKChjb250ZXh0KSA9PiB7XG4gICAgICB1bnNlcmlhbGlzZSgoanNvbiwgY29udGV4dCkgPT4ge1xuICAgICAgICBjb25zdCB7IHN0cmluZyB9ID0ganNvbixcbiAgICAgICAgICAgICAgY29uc3RyYWludE5vZGUgPSBpbnN0YW50aWF0ZUNvbnN0cmFpbnQoc3RyaW5nLCBjb250ZXh0KSxcbiAgICAgICAgICAgICAgbm9kZSA9IGNvbnN0cmFpbnROb2RlLCAgLy8vXG4gICAgICAgICAgICAgIGJyZWFrUG9pbnQgPSBicmVha1BvaW50RnJvbUpTT04oanNvbiksXG4gICAgICAgICAgICAgIHJlZmVyZW5jZSA9IHJlZmVyZW5jZUZyb21Db25zdHJhaW50Tm9kZShjb25zdHJhaW50Tm9kZSwgY29udGV4dCksXG4gICAgICAgICAgICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21Db25zdHJhaW50Tm9kZShjb25zdHJhaW50Tm9kZSwgY29udGV4dCk7XG5cbiAgICAgICAgY29uc3RyYWludCA9IG5ldyBDb25zdHJhaW50KGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgcmVmZXJlbmNlLCBzdGF0ZW1lbnQpO1xuICAgICAgfSwganNvbiwgY29udGV4dCk7XG4gICAgfSwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gY29uc3RyYWludDtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tU3RlcChzdGVwLCBjb250ZXh0KSB7XG4gICAgbGV0IGNvbnN0cmFpbnQ7XG5cbiAgICBsZXQgc3RhdGVtZW50O1xuXG4gICAgc3RhdGVtZW50ID0gc3RlcC5nZXRTdGF0ZW1lbnQoKTtcblxuICAgIHN0YXRlbWVudCA9IHN0cmlwQnJhY2tldHNGcm9tU3RhdGVtZW50KHN0YXRlbWVudCwgY29udGV4dCk7IC8vL1xuXG4gICAgY29uc3QgcmVmZXJlbmNlID0gc3RlcC5nZXRSZWZlcmVuY2UoKTtcblxuICAgIGFibGF0ZSgoY29udGV4dCkgPT4ge1xuICAgICAgaW5zdGFudGlhdGUoKGNvbnRleHQpID0+IHtcbiAgICAgICAgY29uc3QgY29uc3RyYWludFN0cmluZyA9IGNvbnN0cmFpbnRTdHJpbmdGcm9tUmVmZXJlbmNlQW5kU3RhdGVtZW50KHJlZmVyZW5jZSwgc3RhdGVtZW50KSxcbiAgICAgICAgICAgICAgc3RyaW5nID0gY29uc3RyYWludFN0cmluZywgIC8vL1xuICAgICAgICAgICAgICBjb25zdHJhaW50Tm9kZSA9IGluc3RhbnRpYXRlQ29uc3RyYWludChzdHJpbmcsIGNvbnRleHQpO1xuXG4gICAgICAgIGNvbnN0cmFpbnQgPSBjb25zdHJhaW50RnJvbUNvbnN0cmFpbnROb2RlKGNvbnN0cmFpbnROb2RlLCBjb250ZXh0KTtcbiAgICAgIH0sIGNvbnRleHQpO1xuICAgIH0sIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIGNvbnN0cmFpbnQ7XG4gIH1cbn0pO1xuXG5mdW5jdGlvbiByZWZlcmVuY2VGcm9tQ29uc3RyYWludE5vZGUoY29uc3RyYWludE5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgcmVmZXJlbmNlTm9kZSA9IGNvbnN0cmFpbnROb2RlLmdldFJlZmVyZW5jZU5vZGUoKSxcbiAgICAgICAgcmVmZXJuZWNlID0gY29udGV4dC5maW5kUmVmZXJlbmNlQnlSZWZlcmVuY2VOb2RlKHJlZmVyZW5jZU5vZGUpO1xuXG4gIHJldHVybiByZWZlcm5lY2U7XG59XG5cbmZ1bmN0aW9uIHN0YXRlbWVudEZyb21Db25zdHJhaW50Tm9kZShjb25zdHJhaW50Tm9kZSwgY29udGV4dCkge1xuICBjb25zdCBzdGF0ZW1lbnROb2RlID0gY29uc3RyYWludE5vZGUuZ2V0U3RhdGVtZW50Tm9kZSgpLFxuICAgICAgICBzdGF0ZW1lbnQgPSBjb250ZXh0LmZpbmRTdGF0ZW1lbnRCeVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSk7XG5cbiAgcmV0dXJuIHN0YXRlbWVudDtcbn1cbiJdLCJuYW1lcyI6WyJhc3luY2hyb25vdXNTb21lIiwiY29udGludWF0aW9uVXRpbGl0aWVzIiwiYnJlYWtQb2ludEZyb21KU09OIiwiYnJlYWtQb2ludFRvQnJlYWtQb2ludEpTT04iLCJicmVha1BvaW50VXRpbGl0aWVzIiwiZGVmaW5lIiwiQ29uc3RyYWludCIsIkVsZW1lbnQiLCJjb250ZXh0Iiwic3RyaW5nIiwibm9kZSIsImJyZWFrUG9pbnQiLCJyZWZlcmVuY2UiLCJzdGF0ZW1lbnQiLCJnZXRSZWZlcmVuY2UiLCJnZXRTdGF0ZW1lbnQiLCJnZXRDb25zdHJhaW50Tm9kZSIsImdldE5vZGUiLCJjb25zdHJhaW50Tm9kZSIsImdldE1ldGF2YXJpYWJsZSIsImlzRXF1YWxUbyIsImNvbnN0cmFpbnQiLCJjb25zdHJhaW50Tm9kZU1hdGNoZXMiLCJtYXRjaENvbnN0cmFpbnROb2RlIiwiZXF1YWxUbyIsIm5vZGVNYXRjaGVzIiwibWF0Y2hOb2RlIiwiZmluZENvbnN0cmFpbnQiLCJmaW5kQ29uc3RyYWludEJ5Q29uc3RyYWludE5vZGUiLCJ2YWxpZGF0ZSIsInN0YXRlIiwiY29udGludWF0aW9uIiwidmFsaWRhdGVzIiwic3BlY2lmaWNDb250ZXh0IiwiY29uc3RyYWludFN0cmluZyIsImdldFN0cmluZyIsInRyYWNlIiwiZGVidWciLCJnZXRDb250ZXh0IiwiYXR0ZW1wdCIsInZhbGlkYXRlU3RhdGVtZW50IiwiYmluZCIsInZhbGlkYXRlUmVmZXJlbmNlIiwiYWxsIiwiY29tbWl0IiwiYWRkQ29uc3RyYWludCIsInJlZmVyZW5jZVZhbGlkYXRlcyIsInN0YXRlbWVudFZhbGlkYXRlcyIsInVuaWZ5UmVmZXJlbmNlIiwiZ2VuZXJhbENvbnRleHQiLCJyZWZlcmVuY2VTdHJpbmciLCJtZXRhdmFyaWFibGUiLCJyZWZlcmVuY2VVbmlmaWVzIiwidW5pZnlTdGF0ZW1lbnQiLCJzdGF0ZW1lbnRTdHJpbmciLCJzcGVjaWZpY1N0YXRlbWVudCIsInN0cmlwQnJhY2tldHNGcm9tU3RhdGVtZW50IiwiZ2VuZXJhbFN0YXRlbWVudCIsInN0YXRlbWVudFVuaWZpZXMiLCJ1bmlmeUFzc3VtcHRpb24iLCJhc3N1bXB0aW9uIiwiYXNzdW1wdGlvblN0cmluZyIsImNvbnN0cmFpbnRDb250ZXh0IiwicmVjb25jaWxlIiwiYXNzdW1wdGlvblVuaWZpZXMiLCJ1bmlmeUFzc3VtcHRpb25zIiwiYXNzdW1wdGlvbnMiLCJhc3N1bXB0aW9uc1VuaWZ5IiwidW5pZnlJbXBsaWNpdEFzc3VtcHRpb24iLCJpbXBsaWNpdEFzc3VtcHRpb24iLCJpbXBsaWNpdEFzc3VtcHRpb25TdHJpbmciLCJpbXBsaWNpdEFzc3VtcHRpb25Db250ZXh0Iiwiam9pbiIsImltcGxpY2l0QXNzdW1wdGlvblVuaWZpZXMiLCJ1bmlmeUltcGxpY2l0QXNzdW1wdGlvbnMiLCJpbXBsaWNpdEFzc3VtcHRpb25zIiwiaW1wbGljaXRBc3N1bXB0aW9uc1VuaWZ5IiwidG9KU09OIiwic2VyaWFsaXNlIiwiZ2V0QnJlYWtQb2ludCIsImJyZWFrUG9pbnRKU09OIiwianNvbiIsIm5hbWUiLCJmcm9tSlNPTiIsImluc3RhbnRpYXRlIiwidW5zZXJpYWxpc2UiLCJpbnN0YW50aWF0ZUNvbnN0cmFpbnQiLCJyZWZlcmVuY2VGcm9tQ29uc3RyYWludE5vZGUiLCJzdGF0ZW1lbnRGcm9tQ29uc3RyYWludE5vZGUiLCJmcm9tU3RlcCIsInN0ZXAiLCJhYmxhdGUiLCJjb25zdHJhaW50U3RyaW5nRnJvbVJlZmVyZW5jZUFuZFN0YXRlbWVudCIsImNvbnN0cmFpbnRGcm9tQ29uc3RyYWludE5vZGUiLCJyZWZlcmVuY2VOb2RlIiwiZ2V0UmVmZXJlbmNlTm9kZSIsInJlZmVybmVjZSIsImZpbmRSZWZlcmVuY2VCeVJlZmVyZW5jZU5vZGUiLCJzdGF0ZW1lbnROb2RlIiwiZ2V0U3RhdGVt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
@@ -94,12 +94,21 @@ const _default = (0, _elements.define)(class Judgement extends _occamlanguages.E
94
94
  getReference() {
95
95
  return this.goal.getReference();
96
96
  }
97
+ isConditional() {
98
+ return this.goal.isConditional();
99
+ }
97
100
  getAssumptions() {
98
101
  return this.frame.getAssumptions();
99
102
  }
100
103
  getMetavariable() {
101
104
  return this.frame.getMetavariable();
102
105
  }
106
+ findDeducedStatement(context) {
107
+ return this.goal.findDeducedStatement(context);
108
+ }
109
+ findSupposedStatements(context) {
110
+ return this.goal.findSupposedStatements(context);
111
+ }
103
112
  getImplicitAssumptions(context) {
104
113
  const implicitAssumptions = [], metavariable = this.getMetavariable();
105
114
  if (metavariable !== null) {
@@ -284,14 +293,6 @@ const _default = (0, _elements.define)(class Judgement extends _occamlanguages.E
284
293
  }, context);
285
294
  return judgement;
286
295
  }
287
- static fromFact(fact, context) {
288
- let judgement = null;
289
- const statementNode = fact.getStatementNode();
290
- if (statementNode !== null) {
291
- judgement = (0, _element.judgementFromStatementNode)(statementNode, context);
292
- }
293
- return judgement;
294
- }
295
296
  static fromStatement(statement, context) {
296
297
  const statementNode = statement.getNode(), judgement = (0, _element.judgementFromStatementNode)(statementNode, context);
297
298
  return judgement;
@@ -306,4 +307,4 @@ function frameFromJudgementNode(judgementNode, context) {
306
307
  return frame;
307
308
  }
308
309
 
309
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9lbGVtZW50L2p1ZGdlbWVudC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgRWxlbWVudCwgYnJlYWtQb2ludFV0aWxpdGllcyB9IGZyb20gXCJvY2NhbS1sYW5ndWFnZXNcIjtcblxuaW1wb3J0IGVsZW1lbnRzIGZyb20gXCIuLi9lbGVtZW50c1wiO1xuXG5pbXBvcnQgeyBvbmUgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2NvbnRpbnVhdGlvblwiO1xuaW1wb3J0IHsgZGVmaW5lIH0gZnJvbSBcIi4uL2VsZW1lbnRzXCI7XG5pbXBvcnQgeyBpbnN0YW50aWF0ZSx9IGZyb20gXCIuLi91dGlsaXRpZXMvY29udGV4dFwiO1xuaW1wb3J0IHsgYWxsLCBleGlzdHMgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2NvbnRpbnVhdGlvblwiO1xuaW1wb3J0IHsgZXF1YXRlU3RhdGVtZW50cyB9IGZyb20gXCIuLi9wcm9jZXNzL2VxdWF0ZVwiO1xuaW1wb3J0IHsgaW5zdGFudGlhdGVKdWRnZW1lbnQgfSBmcm9tIFwiLi4vcHJvY2Vzcy9pbnN0YW50aWF0ZVwiO1xuaW1wb3J0IHsganVkZ2VtZW50RnJvbVN0YXRlbWVudE5vZGUgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2VsZW1lbnRcIjtcbmltcG9ydCB7IGRlY2xhcmUsIGlzRGVyaXZlZCwgaXNEZWNsYXJlZCB9IGZyb20gXCIuLi91dGlsaXRpZXMvc3RhdGVcIjtcblxuY29uc3QgeyBicmVha1BvaW50RnJvbUpTT04sIGJyZWFrUG9pbnRUb0JyZWFrUG9pbnRKU09OIH0gPSBicmVha1BvaW50VXRpbGl0aWVzO1xuXG5leHBvcnQgZGVmYXVsdCBkZWZpbmUoY2xhc3MgSnVkZ2VtZW50IGV4dGVuZHMgRWxlbWVudCB7XG4gIGNvbnN0cnVjdG9yKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgZnJhbWUsIGdvYWwpIHtcbiAgICBzdXBlcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQpO1xuXG4gICAgdGhpcy5mcmFtZSA9IGZyYW1lO1xuICAgIHRoaXMuZ29hbCA9IGdvYWw7XG4gIH1cblxuICBnZXRGcmFtZSgpIHtcbiAgICByZXR1cm4gdGhpcy5mcmFtZTtcbiAgfVxuXG4gIGdldEFzc3VtcHRpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuZ29hbDtcbiAgfVxuXG4gIGdldEp1ZGdlbWVudE5vZGUoKSB7XG4gICAgY29uc3Qgbm9kZSA9IHRoaXMuZ2V0Tm9kZSgpLFxuICAgICAgICAgIGp1ZGdlbWVudE5vZGUgPSBub2RlOyAvLy9cblxuICAgIHJldHVybiBqdWRnZW1lbnROb2RlO1xuICB9XG5cbiAgaXNTaW5ndWxhcigpIHtcbiAgICBjb25zdCBqdWRnZW1lbnROb2RlID0gdGhpcy5nZXRKdWRnZW1lbnROb2RlKCksXG4gICAgICAgICAgc2luZ3VsYXIgPSBqdWRnZW1lbnROb2RlLmlzU2luZ3VsYXIoKTtcblxuICAgIHJldHVybiBzaW5ndWxhcjtcbiAgfVxuXG4gIGlzRXF1YWxUbyhqdWRnZW1lbnQpIHtcbiAgICBjb25zdCBqdWRnZW1lbnROb2RlID0ganVkZ2VtZW50LmdldE5vZGUoKSxcbiAgICAgICAgICBqdWRnZW1lbnROb2RlTWF0Y2hlcyA9IHRoaXMubWF0Y2hKdWRnZW1lbnROb2RlKGp1ZGdlbWVudE5vZGUpLFxuICAgICAgICAgIGVxdWFsVG8gPSBqdWRnZW1lbnROb2RlTWF0Y2hlczsgIC8vL1xuXG4gICAgcmV0dXJuIGVxdWFsVG87XG4gIH1cblxuICBpc01ldGF2YXJpYWJsZURlZmluZWQobWV0YXZhcmlhYmxlKSB7IHJldHVybiB0aGlzLmZyYW1lLmlzTWV0YXZhcmlhYmxlRGVmaW5lZChtZXRhdmFyaWFibGUpOyB9XG5cbiAgaXNJbXBsaWNpdCgpIHsgcmV0dXJuIHRoaXMuZnJhbWUuaXNJbXBsaWNpdCgpOyB9XG5cbiAgZ2V0U3RhdGVtZW50KCkgeyByZXR1cm4gdGhpcy5nb2FsLmdldFN0YXRlbWVudCgpOyB9XG5cbiAgZ2V0UmVmZXJlbmNlKCkgeyByZXR1cm4gdGhpcy5nb2FsLmdldFJlZmVyZW5jZSgpOyB9XG5cbiAgZ2V0QXNzdW1wdGlvbnMoKSB7IHJldHVybiB0aGlzLmZyYW1lLmdldEFzc3VtcHRpb25zKCk7IH1cblxuICBnZXRNZXRhdmFyaWFibGUoKSB7IHJldHVybiB0aGlzLmZyYW1lLmdldE1ldGF2YXJpYWJsZSgpOyB9XG5cbiAgZ2V0SW1wbGljaXRBc3N1bXB0aW9ucyhjb250ZXh0KSB7XG4gICAgY29uc3QgaW1wbGljaXRBc3N1bXB0aW9ucyA9IFtdLFxuICAgICAgICAgIG1ldGF2YXJpYWJsZSA9IHRoaXMuZ2V0TWV0YXZhcmlhYmxlKCk7XG5cbiAgICBpZiAobWV0YXZhcmlhYmxlICE9PSBudWxsKSB7XG4gICAgICBjb25zdCB7IEltcGxpY2l0QXNzdW1wdGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgICAgICBmYWN0cyA9IGNvbnRleHQuZ2V0RmFjdHMoKTtcblxuICAgICAgZmFjdHMuZm9yRWFjaCgoZmFjdCkgPT4ge1xuICAgICAgICBjb25zdCBzdGF0ZW1lbnQgPSBmYWN0LmdldFN0YXRlbWVudCgpLFxuICAgICAgICAgICAgICBpbXBsaWNpdEFzc3VtcHRpb24gPSBJbXBsaWNpdEFzc3VtcHRpb24uZnJvbVN0YXRlbWVudChzdGF0ZW1lbnQsIGNvbnRleHQpO1xuXG4gICAgICAgIGRlY2xhcmUoKHN0YXRlKSA9PiB7XG4gICAgICAgICAgaW1wbGljaXRBc3N1bXB0aW9uLnZhbGlkYXRlKHN0YXRlLCBjb250ZXh0LCAoaW1wbGljaXRBc3N1bXB0aW9uLCBjb250ZXh0KSA9PiB0cnVlKVxuICAgICAgICB9KTtcblxuICAgICAgICBpbXBsaWNpdEFzc3VtcHRpb25zLnB1c2goaW1wbGljaXRBc3N1bXB0aW9uKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBpbXBsaWNpdEFzc3VtcHRpb25zO1xuICB9XG5cbiAgbWF0Y2hKdWRnZW1lbnROb2RlKGp1ZGdlbWVudE5vZGUpIHtcbiAgICBjb25zdCBub2RlID0ganVkZ2VtZW50Tm9kZSwgLy8vXG4gICAgICAgICAgbm9kZU1hdGNoZXMgPSB0aGlzLm1hdGNoTm9kZShub2RlKSxcbiAgICAgICAgICBqdWRnZW1lbnROb2RlTWF0Y2hlcyA9IG5vZGVNYXRjaGVzOyAvLy9cblxuICAgIHJldHVybiBqdWRnZW1lbnROb2RlTWF0Y2hlcztcbiAgfVxuXG4gIG1hdGNoTWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlKSB7IHJldHVybiB0aGlzLmZyYW1lLm1hdGNoTWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlKTsgfVxuXG4gIGZpbmRTdWJwcm9vZkFzc2VydGlvbihjb250ZXh0KSB7IHJldHVybiB0aGlzLmdvYWwuZmluZFN1YnByb29mQXNzZXJ0aW9uKGNvbnRleHQpOyB9XG5cbiAgZmluZEp1ZGdlbWVudChjb250ZXh0KSB7XG4gICAgY29uc3QganVkZ2VtZW50Tm9kZSA9IHRoaXMuZ2V0SnVkZ2VtZW50Tm9kZSgpLFxuICAgICAgICAgIGp1ZGdlbWVudCA9IGNvbnRleHQuZmluZEp1ZGdlbWVudEJ5SnVkZ2VtZW50Tm9kZShqdWRnZW1lbnROb2RlKTtcblxuICAgIHJldHVybiBqdWRnZW1lbnQ7XG4gIH1cblxuICBjb21wYXJlU3RlcChzdGVwLCBjb250ZXh0KSB7XG4gICAgbGV0IGNvbXBhcmVzVG9TdGVwID0gZmFsc2U7XG5cbiAgICBjb25zdCBzdGVwU3RyaW5nID0gc3RlcC5nZXRTdHJpbmcoKSxcbiAgICAgIGp1ZGdlbWVudFN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7ICAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYENvbXBhcmluZyB0aGUgJyR7c3RlcFN0cmluZ30nIHN0ZXAgdG8gdGhlICcke2p1ZGdlbWVudFN0cmluZ30nIGp1ZGdlbWVudC4uLmApO1xuXG4gICAgY29uc3Qgc3RhdGVtZW50ID0gc3RlcC5nZXRTdGF0ZW1lbnQoKSxcbiAgICAgIGNvbXBhcmVzVG9TdGF0ZW1lbnQgPSB0aGlzLmNvbXBhcmVTdGF0ZW1lbnQoc3RhdGVtZW50LCBjb250ZXh0KTtcblxuICAgIGlmIChjb21wYXJlc1RvU3RhdGVtZW50KSB7XG4gICAgICBjb21wYXJlc1RvU3RlcCA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKGNvbXBhcmVzVG9TdGVwKSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi5jb21wYXJlZCB0aGUgJyR7c3RlcFN0cmluZ30nIHN0ZXAgdG8gdGhlICcke2p1ZGdlbWVudFN0cmluZ30nIGp1ZGdlbWVudC5gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gY29tcGFyZXNUb1N0ZXA7XG4gIH1cblxuICBjb21wYXJlU3RhdGVtZW50KHN0YXRlbWVudCwgY29udGV4dCkge1xuICAgIGxldCBjb21wYXJlc1RvU3RhdGVtZW50ID0gZmFsc2U7XG5cbiAgICBjb25zdCBqdWRnZW1lbnRTdHJpbmcgPSB0aGlzLmdldFN0cmluZygpLCAvLy9cbiAgICAgICAgICBzdGF0ZW1lbnRTdHJpbmcgPSBzdGF0ZW1lbnQuZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBDb21wYXJpbmcgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCB0byB0aGUgJyR7anVkZ2VtZW50U3RyaW5nfScganVkZ2VtZW50Li4uYCk7XG5cbiAgICBjb25zdCBsZWZ0U3RhdGVtZW50ID0gc3RhdGVtZW50OyAgLy8vXG5cbiAgICBzdGF0ZW1lbnQgPSB0aGlzLmdldFN0YXRlbWVudCgpO1xuXG4gICAgY29uc3QgcmlnaHRTdGF0ZW1lbnQgPSBzdGF0ZW1lbnQsICAvLy9cbiAgICAgICAgICBzdGF0ZW1lbnRzRXF1YXRlID0gZXF1YXRlU3RhdGVtZW50cyhsZWZ0U3RhdGVtZW50LCByaWdodFN0YXRlbWVudCwgY29udGV4dCk7XG5cbiAgICBpZiAoc3RhdGVtZW50c0VxdWF0ZSkge1xuICAgICAgY29tcGFyZXNUb1N0YXRlbWVudCA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKGNvbXBhcmVzVG9TdGF0ZW1lbnQpIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLmNvbXBhcmVkIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQgdG8gdGhlICcke2p1ZGdlbWVudFN0cmluZ30nIGp1ZGdlbWVudC5gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gY29tcGFyZXNUb1N0YXRlbWVudDtcbiAgfVxuXG4gIGNvbXBhcmVNZXRhdmFyaWFibGVOYW1lKG1ldGF2YXJpYWJsZU5hbWUpIHsgcmV0dXJuIHRoaXMuZnJhbWUuY29tcGFyZU1ldGF2YXJpYWJsZU5hbWUobWV0YXZhcmlhYmxlTmFtZSk7IH1cblxuICB2YWxpZGF0ZShzdGF0ZSwgY29udGV4dCwgY29udGludWF0aW9uKSB7XG4gICAgbGV0IHZhbGlkYXRlcztcblxuICAgIGNvbnN0IGp1ZGdlbWVudFN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7ICAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke2p1ZGdlbWVudFN0cmluZ30nIGp1ZGdlbWVudC4uLmApO1xuXG4gICAgbGV0IGp1ZGdlbWVudDtcblxuICAgIGp1ZGdlbWVudCA9IHRoaXMuZmluZEp1ZGdlbWVudChjb250ZXh0KTtcblxuICAgIGlmIChqdWRnZW1lbnQgIT09IG51bGwpIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYFRoZSAnJHtqdWRnZW1lbnRTdHJpbmd9JyBqdWRnZW1lbnQgaXMgYWxyZWFkeSBwcmVzZW50LmApO1xuXG4gICAgICB2YWxpZGF0ZXMgPSBjb250aW51YXRpb24oanVkZ2VtZW50LCBjb250ZXh0KTtcbiAgICB9IGVsc2Uge1xuICAgICAganVkZ2VtZW50ID0gdGhpczsgLy8vXG5cbiAgICAgIGNvbnN0IHZhbGlkYXRlR29hbCA9IHRoaXMudmFsaWRhdGVHb2FsLmJpbmQodGhpcyksXG4gICAgICAgICAgICB2YWxpZGF0ZUZyYW1lID0gdGhpcy52YWxpZGF0ZUZyYW1lLmJpbmQodGhpcyk7XG5cbiAgICAgIHZhbGlkYXRlcyA9IGFsbChbXG4gICAgICAgIHZhbGlkYXRlR29hbCxcbiAgICAgICAgdmFsaWRhdGVGcmFtZVxuICAgICAgXSwgc3RhdGUsIGNvbnRleHQsIChzdGF0ZSwgY29udGV4dCkgPT4ge1xuICAgICAgICBsZXQgdmFsaWRhdGVzO1xuXG4gICAgICAgIGNvbnN0IHZhbGlkYXRlV2hlbkRlY2xhcmVkID0gdGhpcy52YWxpZGF0ZVdoZW5EZWNsYXJlZC5iaW5kKHRoaXMpLFxuICAgICAgICAgICAgICB2YWxpZGF0ZVdoZW5EZXJpdmVkID0gdGhpcy52YWxpZGF0ZVdoZW5EZXJpdmVkLmJpbmQodGhpcyk7XG5cbiAgICAgICAgdmFsaWRhdGVzID0gZXhpc3RzKFtcbiAgICAgICAgICB2YWxpZGF0ZVdoZW5EZWNsYXJlZCxcbiAgICAgICAgICB2YWxpZGF0ZVdoZW5EZXJpdmVkXG4gICAgICAgIF0sIHN0YXRlLCBjb250ZXh0LCAoc3RhdGUsIGNvbnRleHQpID0+IHtcbiAgICAgICAgICBsZXQgdmFsaWRhdGVzO1xuXG4gICAgICAgICAgY29udGV4dC5hZGRKdWRnZW1lbnQoanVkZ2VtZW50KTtcblxuICAgICAgICAgIHZhbGlkYXRlcyA9IGNvbnRpbnVhdGlvbihqdWRnZW1lbnQsIGNvbnRleHQpO1xuXG4gICAgICAgICAgcmV0dXJuIHZhbGlkYXRlcztcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIHZhbGlkYXRlcztcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmICh2YWxpZGF0ZXMpIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlZCB0aGUgJyR7anVkZ2VtZW50U3RyaW5nfScganVkZ2VtZW50LmApO1xuICAgIH1cblxuICAgIHJldHVybiB2YWxpZGF0ZXM7XG4gIH1cblxuICB2YWxpZGF0ZUdvYWwoc3RhdGUsIGNvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICAgIGxldCBnb2FsVmFsaWRhdGVzO1xuXG4gICAgY29uc3QganVkZ2VtZW50U3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgIC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7anVkZ2VtZW50U3RyaW5nfScganVkZ2VtZW50J3MgZ29hbC4uLmApO1xuXG4gICAgZ29hbFZhbGlkYXRlcyA9IHRoaXMuZ29hbC52YWxpZGF0ZShzdGF0ZSwgY29udGV4dCwgKGdvYWwsIGNvbnRleHQpID0+IHtcbiAgICAgIGxldCB2YWxpZGF0ZXM7XG5cbiAgICAgIHRoaXMuZ29hbCA9IGdvYWw7XG5cbiAgICAgIHZhbGlkYXRlcyA9IGNvbnRpbnVhdGlvbihzdGF0ZSwgY29udGV4dCk7XG5cbiAgICAgIHJldHVybiB2YWxpZGF0ZXM7XG4gICAgfSk7XG5cbiAgICBpZiAoZ29hbFZhbGlkYXRlcykge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmFsaWRhdGVzIHRoZSAnJHtqdWRnZW1lbnRTdHJpbmd9JyBqdWRnZW1lbnQncyBnb2FsLmApO1xuICAgIH1cblxuICAgIHJldHVybiBnb2FsVmFsaWRhdGVzO1xuICB9XG5cbiAgdmFsaWRhdGVGcmFtZShzdGF0ZSwgY29udGV4dCwgY29udGludWF0aW9uKSB7XG4gICAgbGV0IGZyYW1lVmFsaWRhdGVzO1xuXG4gICAgY29uc3QganVkZ2VtZW50U3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgIC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7anVkZ2VtZW50U3RyaW5nfScganVkZ2VtZW50J3MgZnJhbWUuLi5gKTtcblxuICAgIGZyYW1lVmFsaWRhdGVzID0gdGhpcy5mcmFtZS52YWxpZGF0ZShzdGF0ZSwgY29udGV4dCwgKGZyYW1lLCBjb250ZXh0KSA9PiB7XG4gICAgICBsZXQgdmFsaWRhdGVzO1xuXG4gICAgICB0aGlzLmZyYW1lID0gZnJhbWU7XG5cbiAgICAgIHZhbGlkYXRlcyA9IGNvbnRpbnVhdGlvbihzdGF0ZSwgY29udGV4dCk7XG5cbiAgICAgIHJldHVybiB2YWxpZGF0ZXM7XG4gICAgfSk7XG5cbiAgICBpZiAoZnJhbWVWYWxpZGF0ZXMpIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlcyB0aGUnJHtqdWRnZW1lbnRTdHJpbmd9JyBqdWRnZW1lbnQncyBmcmFtZS5gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZnJhbWVWYWxpZGF0ZXM7XG4gIH1cblxuICB2YWxpZGF0ZVdoZW5EZWNsYXJlZChzdGF0ZSwgY29udGV4dCwgY29udGludWF0aW9uKSB7XG4gICAgbGV0IHZhbGlkYXRlc1doZW5EZWNsYXJlZCA9IGZhbHNlO1xuXG4gICAgY29uc3QgZGVjbGFyZWQgPSBpc0RlY2xhcmVkKHN0YXRlKTtcblxuICAgIGlmIChkZWNsYXJlZCkge1xuICAgICAgY29uc3QganVkZ2VtZW50U3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgLy8vXG5cbiAgICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke2p1ZGdlbWVudFN0cmluZ30nIGRlY2xhcmVkIGp1ZGdlbWVudC4uLmApO1xuXG4gICAgICB2YWxpZGF0ZXNXaGVuRGVjbGFyZWQgPSBjb250aW51YXRpb24oc3RhdGUsIGNvbnRleHQpO1xuXG4gICAgICBpZiAodmFsaWRhdGVzV2hlbkRlY2xhcmVkKSB7XG4gICAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlZCB0aGUgJyR7anVkZ2VtZW50U3RyaW5nfScgZGVjbGFyZWQganVkZ2VtZW50LmApO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB2YWxpZGF0ZXNXaGVuRGVjbGFyZWQ7XG4gIH1cblxuICB2YWxpZGF0ZVdoZW5EZXJpdmVkKHN0YXRlLCBjb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgICBsZXQgdmFsaWRhdGVzV2hlbkRlcml2ZWQgPSBmYWxzZTtcblxuICAgIGNvbnN0IGRlcml2ZWQgPSBpc0Rlcml2ZWQoc3RhdGUpO1xuXG4gICAgaWYgKGRlcml2ZWQpIHtcbiAgICAgIGNvbnN0IGp1ZGdlbWVudFN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7IC8vL1xuXG4gICAgICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0aW5nIHRoZSAnJHtqdWRnZW1lbnRTdHJpbmd9JyBkZXJpdmVkIGp1ZGdlbWVudC4uLmApO1xuXG4gICAgICBjb25zdCBzY2hlbWFzID0gY29udGV4dC5nZXRTY2hlbWFzKCksXG4gICAgICAgICAgICBqdWRnZW1lbnQgPSB0aGlzOyAvLy9cblxuICAgICAgdmFsaWRhdGVzV2hlbkRlcml2ZWQgPSBvbmUoc2NoZW1hcywgKHNjaGVtYSwgY29udGV4dCkgPT4ge1xuICAgICAgICBsZXQgc3VjY2VzcyA9IGZhbHNlO1xuXG4gICAgICAgIHNjaGVtYS51bmlmeUp1ZGdlbWVudChqdWRnZW1lbnQsIGNvbnRleHQsIChqdWRnZW1lbnRVbmlmaWVzKSA9PiB7XG4gICAgICAgICAgaWYgKGp1ZGdlbWVudFVuaWZpZXMpIHtcbiAgICAgICAgICAgIHN1Y2Nlc3MgPSB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIHN1Y2Nlc3M7XG4gICAgICB9LCBjb250ZXh0LCAoY29udGV4dCkgPT4gdHJ1ZSk7XG5cbiAgICAgIGlmICh2YWxpZGF0ZXNXaGVuRGVyaXZlZCkge1xuICAgICAgICB2YWxpZGF0ZXNXaGVuRGVyaXZlZCA9IGNvbnRpbnVhdGlvbihzdGF0ZSwgY29udGV4dCk7XG4gICAgICB9XG5cbiAgICAgIGlmICh2YWxpZGF0ZXNXaGVuRGVyaXZlZCkge1xuICAgICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke2p1ZGdlbWVudFN0cmluZ30nIGRlcml2ZWQganVkZ2VtZW50LmApO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB2YWxpZGF0ZXNXaGVuRGVyaXZlZDtcbiAgfVxuXG4gIHRvSlNPTigpIHtcbiAgICBjb25zdCBzdHJpbmcgPSB0aGlzLmdldFN0cmluZygpO1xuXG4gICAgbGV0IGJyZWFrUG9pbnQ7XG5cbiAgICBicmVha1BvaW50ID0gdGhpcy5nZXRCcmVha1BvaW50KCk7XG5cbiAgICBjb25zdCBicmVha1BvaW50SlNPTiA9IGJyZWFrUG9pbnRUb0JyZWFrUG9pbnRKU09OKGJyZWFrUG9pbnQpO1xuXG4gICAgYnJlYWtQb2ludCA9IGJyZWFrUG9pbnRKU09OOyAgLy8vXG5cbiAgICBjb25zdCBqc29uID0ge1xuICAgICAgc3RyaW5nLFxuICAgICAgYnJlYWtQb2ludFxuICAgIH07XG5cbiAgICByZXR1cm4ganNvbjtcbiAgfVxuXG4gIHN0YXRpYyBuYW1lID0gXCJKdWRnZW1lbnRcIjtcblxuICBzdGF0aWMgZnJvbUpTT04oanNvbiwgY29udGV4dCkge1xuICAgIGxldCBqdWRnZW1lbnQ7XG5cbiAgICBpbnN0YW50aWF0ZSgoY29udGV4dCkgPT4ge1xuICAgICAgY29uc3QgeyBzdHJpbmcgfSA9IGpzb24sXG4gICAgICAgICAgICBqdWRnZW1lbnROb2RlID0gaW5zdGFudGlhdGVKdWRnZW1lbnQoc3RyaW5nLCBjb250ZXh0KSxcbiAgICAgICAgICAgIG5vZGUgPSBqdWRnZW1lbnROb2RlLCAgLy8vXG4gICAgICAgICAgICBicmVha1BvaW50ID0gYnJlYWtQb2ludEZyb21KU09OKGpzb24pLFxuICAgICAgICAgICAgZnJhbWUgPSBmcmFtZUZyb21KdWRnZW1lbnROb2RlKGp1ZGdlbWVudE5vZGUsIGNvbnRleHQpLFxuICAgICAgICAgICAgZ29hbCA9IGdvYWxGcm9tSnVkZ2VtZW50Tm9kZShqdWRnZW1lbnROb2RlLCBjb250ZXh0KTtcblxuICAgICAgY29udGV4dCA9IG51bGw7XG5cbiAgICAgIGp1ZGdlbWVudCA9IG5ldyBKdWRnZW1lbnQoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBmcmFtZSwgZ29hbCk7XG4gICAgfSwgY29udGV4dCk7XG5cbiAgICByZXR1cm4ganVkZ2VtZW50O1xuICB9XG5cbiAgc3RhdGljIGZyb21GYWN0KGZhY3QsIGNvbnRleHQpIHtcbiAgICBsZXQganVkZ2VtZW50ID0gbnVsbDtcblxuICAgIGNvbnN0IHN0YXRlbWVudE5vZGUgPSBmYWN0LmdldFN0YXRlbWVudE5vZGUoKTtcblxuICAgIGlmIChzdGF0ZW1lbnROb2RlICE9PSBudWxsKSB7XG4gICAgICBqdWRnZW1lbnQgPSBqdWRnZW1lbnRGcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KTtcbiAgICB9XG5cbiAgICByZXR1cm4ganVkZ2VtZW50O1xuICB9XG5cbiAgc3RhdGljIGZyb21TdGF0ZW1lbnQoc3RhdGVtZW50LCBjb250ZXh0KSB7XG4gICAgY29uc3Qgc3RhdGVtZW50Tm9kZSA9IHN0YXRlbWVudC5nZXROb2RlKCksXG4gICAgICAgICAganVkZ2VtZW50ID0ganVkZ2VtZW50RnJvbVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSwgY29udGV4dCk7XG5cbiAgICByZXR1cm4ganVkZ2VtZW50O1xuICB9XG59KTtcblxuZnVuY3Rpb24gZ29hbEZyb21KdWRnZW1lbnROb2RlKGp1ZGdlbWVudE5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgZ29hbE5vZGUgPSBqdWRnZW1lbnROb2RlLmdldEdvYWxOb2RlKCksXG4gICAgICAgIGdvYWwgPSBjb250ZXh0LmZpbmRHb2FsQnlHb2xhTm9kZShnb2FsTm9kZSk7XG5cbiAgcmV0dXJuIGdvYWw7XG59XG5cbmZ1bmN0aW9uIGZyYW1lRnJvbUp1ZGdlbWVudE5vZGUoanVkZ2VtZW50Tm9kZSwgY29udGV4dCkge1xuICBjb25zdCBmcmFtZU5vZGUgPSBqdWRnZW1lbnROb2RlLmdldEZyYW1lTm9kZSgpLFxuICAgICAgICBmcmFtZSA9IGNvbnRleHQuZmluZEZyYW1lQnlGcmFtZU5vZGUoZnJhbWVOb2RlKTtcblxuICByZXR1cm4gZnJhbWU7XG59XG5cbiJdLCJuYW1lcyI6WyJicmVha1BvaW50RnJvbUpTT04iLCJicmVha1BvaW50VG9CcmVha1BvaW50SlNPTiIsImJyZWFrUG9pbnRVdGlsaXRpZXMiLCJkZWZpbmUiLCJKdWRnZW1lbnQiLCJFbGVtZW50IiwiY29udGV4dCIsInN0cmluZyIsIm5vZGUiLCJicmVha1BvaW50IiwiZnJhbWUiLCJnb2FsIiwiZ2V0RnJhbWUiLCJnZXRBc3N1bXB0aW9uIiwiZ2V0SnVkZ2VtZW50Tm9kZSIsImdldE5vZGUiLCJqdWRnZW1lbnROb2RlIiwiaXNTaW5ndWxhciIsInNpbmd1bGFyIiwiaXNFcXVhbFRvIiwianVkZ2VtZW50IiwianVkZ2VtZW50Tm9kZU1hdGNoZXMiLCJtYXRjaEp1ZGdlbWVudE5vZGUiLCJlcXVhbFRvIiwiaXNNZXRhdmFyaWFibGVEZWZpbmVkIiwibWV0YXZhcmlhYmxlIiwiaXNJbXBsaWNpdCIsImdldFN0YXRlbWVudCIsImdldFJlZmVyZW5jZSIsImdldEFzc3VtcHRpb25zIiwiZ2V0TWV0YXZhcmlhYmxlIiwiZ2V0SW1wbGljaXRBc3N1bXB0aW9ucyIsImltcGxpY2l0QXNzdW1wdGlvbnMiLCJJbXBsaWNpdEFzc3VtcHRpb24iLCJlbGVtZW50cyIsImZhY3RzIiwiZ2V0RmFjdHMiLCJmb3JFYWNoIiwiZmFjdCIsInN0YXRlbWVudCIsImltcGxpY2l0QXNzdW1wdGlvbiIsImZyb21TdGF0ZW1lbnQiLCJkZWNsYXJlIiwic3RhdGUiLCJ2YWxpZGF0ZSIsInB1c2giLCJub2RlTWF0Y2hlcyIsIm1hdGNoTm9kZSIsIm1hdGNoTWV0YXZhcmlhYmxlTm9kZSIsIm1ldGF2YXJpYWJsZU5vZGUiLCJmaW5kU3VicHJvb2ZBc3NlcnRpb24iLCJmaW5kSnVkZ2VtZW50IiwiZmluZEp1ZGdlbWVudEJ5SnVkZ2VtZW50Tm9kZSIsImNvbXBhcmVTdGVwIiwic3RlcCIsImNvbXBhcmVzVG9TdGVwIiwic3RlcFN0cmluZyIsImdldFN0cmluZyIsImp1ZGdlbWVudFN0cmluZyIsInRyYWNlIiwiY29tcGFyZXNUb1N0YXRlbWVudCIsImNvbXBhcmVTdGF0ZW1lbnQiLCJkZWJ1ZyIsInN0YXRlbWVudFN0cmluZyIsImxlZnRTdGF0ZW1lbnQiLCJyaWdodFN0YXRlbWVudCIsInN0YXRlbWVudHNFcXVhdGUiLCJlcXVhdGVTdGF0ZW1lbnRzIiwiY29tcGFyZU1ldGF2YXJpYWJsZU5hbWUiLCJtZXRhdmFyaWFibGVOYW1lIiwiY29udGludWF0aW9uIiwidmFsaWRhdGVzIiwidmFsaWRhdGVHb2FsIiwiYmluZCIsInZhbGlkYXRlRnJhbWUiLCJhbGwiLCJ2YWxpZGF0ZVdoZW5EZWNsYXJlZCIsInZhbGlkYXRlV2hlbkRlcml2ZWQiLCJleGlzdHMiLCJhZGRKdWRnZW1lbnQiLCJnb2FsVmFsaWRhdGVzIiwiZnJhbWVWYWxpZGF0ZXMiLCJ2YWxpZGF0ZXNXaGVuRGVjbGFyZWQiLCJkZWNsYXJlZCIsImlzRGVjbGFyZWQiLCJ2YWxpZGF0ZXNXaGVuRGVyaXZlZCIsImRlcml2ZWQiLCJpc0Rlcml2ZWQiLCJzY2hlbWFzIiwiZ2V0U2NoZW1hcyIsIm9uZSIsInNjaGVtYSIsInN1Y2Nlc3MiLCJ1bmlmeUp1ZGdlbWVudCIsImp1ZGdlbWVudFVuaWZpZXMiLCJ0b0pTT04iLCJnZXRCcmVha1BvaW50IiwiYnJlYWtQb2ludEpTT04iLCJqc29uIiwibmFtZSIsImZyb21KU09OIiwiaW5zdGFudGlhdGUiLCJpbnN0YW50aWF0ZUp1ZGdlbWVudCIsImZyYW1lRnJvbUp1ZGdlbWVudE5vZGUiLCJnb2FsRnJvbUp1ZGdlbWVudE5vZGUiLCJmcm9tRmFjdCIsInN0YXRlbWVudE5vZGUiLCJnZXRTdGF0ZW1lbnROb2RlIiwianVkZ2VtZW50RnJvbVN0YXRlbWVudE5vZGUiLCJnb2FsTm9kZSIsImdldEdvYWxOb2RlIiwiZmluZEdvYWxCeUdvbGFOb2RlIiwiZnJhbWVOb2RlIiwiZ2V0RnJhbWVOb2RlIiwiZmluZEZyYW1lQnlGcmFtZU5vZGUiXSwibWFwcGluZ3MiOiJBQUFBOzs7OytCQWlCQTs7O2VBQUE7OztnQ0FmNkM7a0VBRXhCOzhCQUVEO3lCQUVRO3dCQUVLOzZCQUNJO3lCQUNNO3VCQUNJOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFL0MsTUFBTSxFQUFFQSxrQkFBa0IsRUFBRUMsMEJBQTBCLEVBQUUsR0FBR0MsbUNBQW1CO01BRTlFLFdBQWVDLElBQUFB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
310
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9lbGVtZW50L2p1ZGdlbWVudC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgRWxlbWVudCwgYnJlYWtQb2ludFV0aWxpdGllcyB9IGZyb20gXCJvY2NhbS1sYW5ndWFnZXNcIjtcblxuaW1wb3J0IGVsZW1lbnRzIGZyb20gXCIuLi9lbGVtZW50c1wiO1xuXG5pbXBvcnQgeyBvbmUgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2NvbnRpbnVhdGlvblwiO1xuaW1wb3J0IHsgZGVmaW5lIH0gZnJvbSBcIi4uL2VsZW1lbnRzXCI7XG5pbXBvcnQgeyBpbnN0YW50aWF0ZSx9IGZyb20gXCIuLi91dGlsaXRpZXMvY29udGV4dFwiO1xuaW1wb3J0IHsgYWxsLCBleGlzdHMgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2NvbnRpbnVhdGlvblwiO1xuaW1wb3J0IHsgZXF1YXRlU3RhdGVtZW50cyB9IGZyb20gXCIuLi9wcm9jZXNzL2VxdWF0ZVwiO1xuaW1wb3J0IHsgaW5zdGFudGlhdGVKdWRnZW1lbnQgfSBmcm9tIFwiLi4vcHJvY2Vzcy9pbnN0YW50aWF0ZVwiO1xuaW1wb3J0IHsganVkZ2VtZW50RnJvbVN0YXRlbWVudE5vZGUgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2VsZW1lbnRcIjtcbmltcG9ydCB7IGRlY2xhcmUsIGlzRGVyaXZlZCwgaXNEZWNsYXJlZCB9IGZyb20gXCIuLi91dGlsaXRpZXMvc3RhdGVcIjtcblxuY29uc3QgeyBicmVha1BvaW50RnJvbUpTT04sIGJyZWFrUG9pbnRUb0JyZWFrUG9pbnRKU09OIH0gPSBicmVha1BvaW50VXRpbGl0aWVzO1xuXG5leHBvcnQgZGVmYXVsdCBkZWZpbmUoY2xhc3MgSnVkZ2VtZW50IGV4dGVuZHMgRWxlbWVudCB7XG4gIGNvbnN0cnVjdG9yKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgZnJhbWUsIGdvYWwpIHtcbiAgICBzdXBlcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQpO1xuXG4gICAgdGhpcy5mcmFtZSA9IGZyYW1lO1xuICAgIHRoaXMuZ29hbCA9IGdvYWw7XG4gIH1cblxuICBnZXRGcmFtZSgpIHtcbiAgICByZXR1cm4gdGhpcy5mcmFtZTtcbiAgfVxuXG4gIGdldEFzc3VtcHRpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuZ29hbDtcbiAgfVxuXG4gIGdldEp1ZGdlbWVudE5vZGUoKSB7XG4gICAgY29uc3Qgbm9kZSA9IHRoaXMuZ2V0Tm9kZSgpLFxuICAgICAgICAgIGp1ZGdlbWVudE5vZGUgPSBub2RlOyAvLy9cblxuICAgIHJldHVybiBqdWRnZW1lbnROb2RlO1xuICB9XG5cbiAgaXNTaW5ndWxhcigpIHtcbiAgICBjb25zdCBqdWRnZW1lbnROb2RlID0gdGhpcy5nZXRKdWRnZW1lbnROb2RlKCksXG4gICAgICAgICAgc2luZ3VsYXIgPSBqdWRnZW1lbnROb2RlLmlzU2luZ3VsYXIoKTtcblxuICAgIHJldHVybiBzaW5ndWxhcjtcbiAgfVxuXG4gIGlzRXF1YWxUbyhqdWRnZW1lbnQpIHtcbiAgICBjb25zdCBqdWRnZW1lbnROb2RlID0ganVkZ2VtZW50LmdldE5vZGUoKSxcbiAgICAgICAgICBqdWRnZW1lbnROb2RlTWF0Y2hlcyA9IHRoaXMubWF0Y2hKdWRnZW1lbnROb2RlKGp1ZGdlbWVudE5vZGUpLFxuICAgICAgICAgIGVxdWFsVG8gPSBqdWRnZW1lbnROb2RlTWF0Y2hlczsgIC8vL1xuXG4gICAgcmV0dXJuIGVxdWFsVG87XG4gIH1cblxuICBpc01ldGF2YXJpYWJsZURlZmluZWQobWV0YXZhcmlhYmxlKSB7IHJldHVybiB0aGlzLmZyYW1lLmlzTWV0YXZhcmlhYmxlRGVmaW5lZChtZXRhdmFyaWFibGUpOyB9XG5cbiAgaXNJbXBsaWNpdCgpIHsgcmV0dXJuIHRoaXMuZnJhbWUuaXNJbXBsaWNpdCgpOyB9XG5cbiAgZ2V0U3RhdGVtZW50KCkgeyByZXR1cm4gdGhpcy5nb2FsLmdldFN0YXRlbWVudCgpOyB9XG5cbiAgZ2V0UmVmZXJlbmNlKCkgeyByZXR1cm4gdGhpcy5nb2FsLmdldFJlZmVyZW5jZSgpOyB9XG5cbiAgaXNDb25kaXRpb25hbCgpIHsgcmV0dXJuIHRoaXMuZ29hbC5pc0NvbmRpdGlvbmFsKCk7IH1cblxuICBnZXRBc3N1bXB0aW9ucygpIHsgcmV0dXJuIHRoaXMuZnJhbWUuZ2V0QXNzdW1wdGlvbnMoKTsgfVxuXG4gIGdldE1ldGF2YXJpYWJsZSgpIHsgcmV0dXJuIHRoaXMuZnJhbWUuZ2V0TWV0YXZhcmlhYmxlKCk7IH1cblxuICBmaW5kRGVkdWNlZFN0YXRlbWVudChjb250ZXh0KSB7IHJldHVybiB0aGlzLmdvYWwuZmluZERlZHVjZWRTdGF0ZW1lbnQoY29udGV4dCk7IH1cblxuICBmaW5kU3VwcG9zZWRTdGF0ZW1lbnRzKGNvbnRleHQpIHsgcmV0dXJuIHRoaXMuZ29hbC5maW5kU3VwcG9zZWRTdGF0ZW1lbnRzKGNvbnRleHQpOyB9XG5cbiAgZ2V0SW1wbGljaXRBc3N1bXB0aW9ucyhjb250ZXh0KSB7XG4gICAgY29uc3QgaW1wbGljaXRBc3N1bXB0aW9ucyA9IFtdLFxuICAgICAgICAgIG1ldGF2YXJpYWJsZSA9IHRoaXMuZ2V0TWV0YXZhcmlhYmxlKCk7XG5cbiAgICBpZiAobWV0YXZhcmlhYmxlICE9PSBudWxsKSB7XG4gICAgICBjb25zdCB7IEltcGxpY2l0QXNzdW1wdGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgICAgICBmYWN0cyA9IGNvbnRleHQuZ2V0RmFjdHMoKTtcblxuICAgICAgZmFjdHMuZm9yRWFjaCgoZmFjdCkgPT4ge1xuICAgICAgICBjb25zdCBzdGF0ZW1lbnQgPSBmYWN0LmdldFN0YXRlbWVudCgpLFxuICAgICAgICAgICAgICBpbXBsaWNpdEFzc3VtcHRpb24gPSBJbXBsaWNpdEFzc3VtcHRpb24uZnJvbVN0YXRlbWVudChzdGF0ZW1lbnQsIGNvbnRleHQpO1xuXG4gICAgICAgIGRlY2xhcmUoKHN0YXRlKSA9PiB7XG4gICAgICAgICAgaW1wbGljaXRBc3N1bXB0aW9uLnZhbGlkYXRlKHN0YXRlLCBjb250ZXh0LCAoaW1wbGljaXRBc3N1bXB0aW9uLCBjb250ZXh0KSA9PiB0cnVlKVxuICAgICAgICB9KTtcblxuICAgICAgICBpbXBsaWNpdEFzc3VtcHRpb25zLnB1c2goaW1wbGljaXRBc3N1bXB0aW9uKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBpbXBsaWNpdEFzc3VtcHRpb25zO1xuICB9XG5cbiAgbWF0Y2hKdWRnZW1lbnROb2RlKGp1ZGdlbWVudE5vZGUpIHtcbiAgICBjb25zdCBub2RlID0ganVkZ2VtZW50Tm9kZSwgLy8vXG4gICAgICAgICAgbm9kZU1hdGNoZXMgPSB0aGlzLm1hdGNoTm9kZShub2RlKSxcbiAgICAgICAgICBqdWRnZW1lbnROb2RlTWF0Y2hlcyA9IG5vZGVNYXRjaGVzOyAvLy9cblxuICAgIHJldHVybiBqdWRnZW1lbnROb2RlTWF0Y2hlcztcbiAgfVxuXG4gIG1hdGNoTWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlKSB7IHJldHVybiB0aGlzLmZyYW1lLm1hdGNoTWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlKTsgfVxuXG4gIGZpbmRTdWJwcm9vZkFzc2VydGlvbihjb250ZXh0KSB7IHJldHVybiB0aGlzLmdvYWwuZmluZFN1YnByb29mQXNzZXJ0aW9uKGNvbnRleHQpOyB9XG5cbiAgZmluZEp1ZGdlbWVudChjb250ZXh0KSB7XG4gICAgY29uc3QganVkZ2VtZW50Tm9kZSA9IHRoaXMuZ2V0SnVkZ2VtZW50Tm9kZSgpLFxuICAgICAgICAgIGp1ZGdlbWVudCA9IGNvbnRleHQuZmluZEp1ZGdlbWVudEJ5SnVkZ2VtZW50Tm9kZShqdWRnZW1lbnROb2RlKTtcblxuICAgIHJldHVybiBqdWRnZW1lbnQ7XG4gIH1cblxuICBjb21wYXJlU3RlcChzdGVwLCBjb250ZXh0KSB7XG4gICAgbGV0IGNvbXBhcmVzVG9TdGVwID0gZmFsc2U7XG5cbiAgICBjb25zdCBzdGVwU3RyaW5nID0gc3RlcC5nZXRTdHJpbmcoKSxcbiAgICAgIGp1ZGdlbWVudFN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7ICAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYENvbXBhcmluZyB0aGUgJyR7c3RlcFN0cmluZ30nIHN0ZXAgdG8gdGhlICcke2p1ZGdlbWVudFN0cmluZ30nIGp1ZGdlbWVudC4uLmApO1xuXG4gICAgY29uc3Qgc3RhdGVtZW50ID0gc3RlcC5nZXRTdGF0ZW1lbnQoKSxcbiAgICAgIGNvbXBhcmVzVG9TdGF0ZW1lbnQgPSB0aGlzLmNvbXBhcmVTdGF0ZW1lbnQoc3RhdGVtZW50LCBjb250ZXh0KTtcblxuICAgIGlmIChjb21wYXJlc1RvU3RhdGVtZW50KSB7XG4gICAgICBjb21wYXJlc1RvU3RlcCA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKGNvbXBhcmVzVG9TdGVwKSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi5jb21wYXJlZCB0aGUgJyR7c3RlcFN0cmluZ30nIHN0ZXAgdG8gdGhlICcke2p1ZGdlbWVudFN0cmluZ30nIGp1ZGdlbWVudC5gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gY29tcGFyZXNUb1N0ZXA7XG4gIH1cblxuICBjb21wYXJlU3RhdGVtZW50KHN0YXRlbWVudCwgY29udGV4dCkge1xuICAgIGxldCBjb21wYXJlc1RvU3RhdGVtZW50ID0gZmFsc2U7XG5cbiAgICBjb25zdCBqdWRnZW1lbnRTdHJpbmcgPSB0aGlzLmdldFN0cmluZygpLCAvLy9cbiAgICAgICAgICBzdGF0ZW1lbnRTdHJpbmcgPSBzdGF0ZW1lbnQuZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBDb21wYXJpbmcgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCB0byB0aGUgJyR7anVkZ2VtZW50U3RyaW5nfScganVkZ2VtZW50Li4uYCk7XG5cbiAgICBjb25zdCBsZWZ0U3RhdGVtZW50ID0gc3RhdGVtZW50OyAgLy8vXG5cbiAgICBzdGF0ZW1lbnQgPSB0aGlzLmdldFN0YXRlbWVudCgpO1xuXG4gICAgY29uc3QgcmlnaHRTdGF0ZW1lbnQgPSBzdGF0ZW1lbnQsICAvLy9cbiAgICAgICAgICBzdGF0ZW1lbnRzRXF1YXRlID0gZXF1YXRlU3RhdGVtZW50cyhsZWZ0U3RhdGVtZW50LCByaWdodFN0YXRlbWVudCwgY29udGV4dCk7XG5cbiAgICBpZiAoc3RhdGVtZW50c0VxdWF0ZSkge1xuICAgICAgY29tcGFyZXNUb1N0YXRlbWVudCA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKGNvbXBhcmVzVG9TdGF0ZW1lbnQpIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLmNvbXBhcmVkIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQgdG8gdGhlICcke2p1ZGdlbWVudFN0cmluZ30nIGp1ZGdlbWVudC5gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gY29tcGFyZXNUb1N0YXRlbWVudDtcbiAgfVxuXG4gIGNvbXBhcmVNZXRhdmFyaWFibGVOYW1lKG1ldGF2YXJpYWJsZU5hbWUpIHsgcmV0dXJuIHRoaXMuZnJhbWUuY29tcGFyZU1ldGF2YXJpYWJsZU5hbWUobWV0YXZhcmlhYmxlTmFtZSk7IH1cblxuICB2YWxpZGF0ZShzdGF0ZSwgY29udGV4dCwgY29udGludWF0aW9uKSB7XG4gICAgbGV0IHZhbGlkYXRlcztcblxuICAgIGNvbnN0IGp1ZGdlbWVudFN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7ICAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke2p1ZGdlbWVudFN0cmluZ30nIGp1ZGdlbWVudC4uLmApO1xuXG4gICAgbGV0IGp1ZGdlbWVudDtcblxuICAgIGp1ZGdlbWVudCA9IHRoaXMuZmluZEp1ZGdlbWVudChjb250ZXh0KTtcblxuICAgIGlmIChqdWRnZW1lbnQgIT09IG51bGwpIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYFRoZSAnJHtqdWRnZW1lbnRTdHJpbmd9JyBqdWRnZW1lbnQgaXMgYWxyZWFkeSBwcmVzZW50LmApO1xuXG4gICAgICB2YWxpZGF0ZXMgPSBjb250aW51YXRpb24oanVkZ2VtZW50LCBjb250ZXh0KTtcbiAgICB9IGVsc2Uge1xuICAgICAganVkZ2VtZW50ID0gdGhpczsgLy8vXG5cbiAgICAgIGNvbnN0IHZhbGlkYXRlR29hbCA9IHRoaXMudmFsaWRhdGVHb2FsLmJpbmQodGhpcyksXG4gICAgICAgICAgICB2YWxpZGF0ZUZyYW1lID0gdGhpcy52YWxpZGF0ZUZyYW1lLmJpbmQodGhpcyk7XG5cbiAgICAgIHZhbGlkYXRlcyA9IGFsbChbXG4gICAgICAgIHZhbGlkYXRlR29hbCxcbiAgICAgICAgdmFsaWRhdGVGcmFtZVxuICAgICAgXSwgc3RhdGUsIGNvbnRleHQsIChzdGF0ZSwgY29udGV4dCkgPT4ge1xuICAgICAgICBsZXQgdmFsaWRhdGVzO1xuXG4gICAgICAgIGNvbnN0IHZhbGlkYXRlV2hlbkRlY2xhcmVkID0gdGhpcy52YWxpZGF0ZVdoZW5EZWNsYXJlZC5iaW5kKHRoaXMpLFxuICAgICAgICAgICAgICB2YWxpZGF0ZVdoZW5EZXJpdmVkID0gdGhpcy52YWxpZGF0ZVdoZW5EZXJpdmVkLmJpbmQodGhpcyk7XG5cbiAgICAgICAgdmFsaWRhdGVzID0gZXhpc3RzKFtcbiAgICAgICAgICB2YWxpZGF0ZVdoZW5EZWNsYXJlZCxcbiAgICAgICAgICB2YWxpZGF0ZVdoZW5EZXJpdmVkXG4gICAgICAgIF0sIHN0YXRlLCBjb250ZXh0LCAoc3RhdGUsIGNvbnRleHQpID0+IHtcbiAgICAgICAgICBsZXQgdmFsaWRhdGVzO1xuXG4gICAgICAgICAgY29udGV4dC5hZGRKdWRnZW1lbnQoanVkZ2VtZW50KTtcblxuICAgICAgICAgIHZhbGlkYXRlcyA9IGNvbnRpbnVhdGlvbihqdWRnZW1lbnQsIGNvbnRleHQpO1xuXG4gICAgICAgICAgcmV0dXJuIHZhbGlkYXRlcztcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIHZhbGlkYXRlcztcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmICh2YWxpZGF0ZXMpIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlZCB0aGUgJyR7anVkZ2VtZW50U3RyaW5nfScganVkZ2VtZW50LmApO1xuICAgIH1cblxuICAgIHJldHVybiB2YWxpZGF0ZXM7XG4gIH1cblxuICB2YWxpZGF0ZUdvYWwoc3RhdGUsIGNvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICAgIGxldCBnb2FsVmFsaWRhdGVzO1xuXG4gICAgY29uc3QganVkZ2VtZW50U3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgIC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7anVkZ2VtZW50U3RyaW5nfScganVkZ2VtZW50J3MgZ29hbC4uLmApO1xuXG4gICAgZ29hbFZhbGlkYXRlcyA9IHRoaXMuZ29hbC52YWxpZGF0ZShzdGF0ZSwgY29udGV4dCwgKGdvYWwsIGNvbnRleHQpID0+IHtcbiAgICAgIGxldCB2YWxpZGF0ZXM7XG5cbiAgICAgIHRoaXMuZ29hbCA9IGdvYWw7XG5cbiAgICAgIHZhbGlkYXRlcyA9IGNvbnRpbnVhdGlvbihzdGF0ZSwgY29udGV4dCk7XG5cbiAgICAgIHJldHVybiB2YWxpZGF0ZXM7XG4gICAgfSk7XG5cbiAgICBpZiAoZ29hbFZhbGlkYXRlcykge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmFsaWRhdGVzIHRoZSAnJHtqdWRnZW1lbnRTdHJpbmd9JyBqdWRnZW1lbnQncyBnb2FsLmApO1xuICAgIH1cblxuICAgIHJldHVybiBnb2FsVmFsaWRhdGVzO1xuICB9XG5cbiAgdmFsaWRhdGVGcmFtZShzdGF0ZSwgY29udGV4dCwgY29udGludWF0aW9uKSB7XG4gICAgbGV0IGZyYW1lVmFsaWRhdGVzO1xuXG4gICAgY29uc3QganVkZ2VtZW50U3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgIC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7anVkZ2VtZW50U3RyaW5nfScganVkZ2VtZW50J3MgZnJhbWUuLi5gKTtcblxuICAgIGZyYW1lVmFsaWRhdGVzID0gdGhpcy5mcmFtZS52YWxpZGF0ZShzdGF0ZSwgY29udGV4dCwgKGZyYW1lLCBjb250ZXh0KSA9PiB7XG4gICAgICBsZXQgdmFsaWRhdGVzO1xuXG4gICAgICB0aGlzLmZyYW1lID0gZnJhbWU7XG5cbiAgICAgIHZhbGlkYXRlcyA9IGNvbnRpbnVhdGlvbihzdGF0ZSwgY29udGV4dCk7XG5cbiAgICAgIHJldHVybiB2YWxpZGF0ZXM7XG4gICAgfSk7XG5cbiAgICBpZiAoZnJhbWVWYWxpZGF0ZXMpIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlcyB0aGUnJHtqdWRnZW1lbnRTdHJpbmd9JyBqdWRnZW1lbnQncyBmcmFtZS5gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZnJhbWVWYWxpZGF0ZXM7XG4gIH1cblxuICB2YWxpZGF0ZVdoZW5EZWNsYXJlZChzdGF0ZSwgY29udGV4dCwgY29udGludWF0aW9uKSB7XG4gICAgbGV0IHZhbGlkYXRlc1doZW5EZWNsYXJlZCA9IGZhbHNlO1xuXG4gICAgY29uc3QgZGVjbGFyZWQgPSBpc0RlY2xhcmVkKHN0YXRlKTtcblxuICAgIGlmIChkZWNsYXJlZCkge1xuICAgICAgY29uc3QganVkZ2VtZW50U3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgLy8vXG5cbiAgICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke2p1ZGdlbWVudFN0cmluZ30nIGRlY2xhcmVkIGp1ZGdlbWVudC4uLmApO1xuXG4gICAgICB2YWxpZGF0ZXNXaGVuRGVjbGFyZWQgPSBjb250aW51YXRpb24oc3RhdGUsIGNvbnRleHQpO1xuXG4gICAgICBpZiAodmFsaWRhdGVzV2hlbkRlY2xhcmVkKSB7XG4gICAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlZCB0aGUgJyR7anVkZ2VtZW50U3RyaW5nfScgZGVjbGFyZWQganVkZ2VtZW50LmApO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB2YWxpZGF0ZXNXaGVuRGVjbGFyZWQ7XG4gIH1cblxuICB2YWxpZGF0ZVdoZW5EZXJpdmVkKHN0YXRlLCBjb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgICBsZXQgdmFsaWRhdGVzV2hlbkRlcml2ZWQgPSBmYWxzZTtcblxuICAgIGNvbnN0IGRlcml2ZWQgPSBpc0Rlcml2ZWQoc3RhdGUpO1xuXG4gICAgaWYgKGRlcml2ZWQpIHtcbiAgICAgIGNvbnN0IGp1ZGdlbWVudFN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7IC8vL1xuXG4gICAgICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0aW5nIHRoZSAnJHtqdWRnZW1lbnRTdHJpbmd9JyBkZXJpdmVkIGp1ZGdlbWVudC4uLmApO1xuXG4gICAgICBjb25zdCBzY2hlbWFzID0gY29udGV4dC5nZXRTY2hlbWFzKCksXG4gICAgICAgICAgICBqdWRnZW1lbnQgPSB0aGlzOyAvLy9cblxuICAgICAgdmFsaWRhdGVzV2hlbkRlcml2ZWQgPSBvbmUoc2NoZW1hcywgKHNjaGVtYSwgY29udGV4dCkgPT4ge1xuICAgICAgICBsZXQgc3VjY2VzcyA9IGZhbHNlO1xuXG4gICAgICAgIHNjaGVtYS51bmlmeUp1ZGdlbWVudChqdWRnZW1lbnQsIGNvbnRleHQsIChqdWRnZW1lbnRVbmlmaWVzKSA9PiB7XG4gICAgICAgICAgaWYgKGp1ZGdlbWVudFVuaWZpZXMpIHtcbiAgICAgICAgICAgIHN1Y2Nlc3MgPSB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIHN1Y2Nlc3M7XG4gICAgICB9LCBjb250ZXh0LCAoY29udGV4dCkgPT4gdHJ1ZSk7XG5cbiAgICAgIGlmICh2YWxpZGF0ZXNXaGVuRGVyaXZlZCkge1xuICAgICAgICB2YWxpZGF0ZXNXaGVuRGVyaXZlZCA9IGNvbnRpbnVhdGlvbihzdGF0ZSwgY29udGV4dCk7XG4gICAgICB9XG5cbiAgICAgIGlmICh2YWxpZGF0ZXNXaGVuRGVyaXZlZCkge1xuICAgICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke2p1ZGdlbWVudFN0cmluZ30nIGRlcml2ZWQganVkZ2VtZW50LmApO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB2YWxpZGF0ZXNXaGVuRGVyaXZlZDtcbiAgfVxuXG4gIHRvSlNPTigpIHtcbiAgICBjb25zdCBzdHJpbmcgPSB0aGlzLmdldFN0cmluZygpO1xuXG4gICAgbGV0IGJyZWFrUG9pbnQ7XG5cbiAgICBicmVha1BvaW50ID0gdGhpcy5nZXRCcmVha1BvaW50KCk7XG5cbiAgICBjb25zdCBicmVha1BvaW50SlNPTiA9IGJyZWFrUG9pbnRUb0JyZWFrUG9pbnRKU09OKGJyZWFrUG9pbnQpO1xuXG4gICAgYnJlYWtQb2ludCA9IGJyZWFrUG9pbnRKU09OOyAgLy8vXG5cbiAgICBjb25zdCBqc29uID0ge1xuICAgICAgc3RyaW5nLFxuICAgICAgYnJlYWtQb2ludFxuICAgIH07XG5cbiAgICByZXR1cm4ganNvbjtcbiAgfVxuXG4gIHN0YXRpYyBuYW1lID0gXCJKdWRnZW1lbnRcIjtcblxuICBzdGF0aWMgZnJvbUpTT04oanNvbiwgY29udGV4dCkge1xuICAgIGxldCBqdWRnZW1lbnQ7XG5cbiAgICBpbnN0YW50aWF0ZSgoY29udGV4dCkgPT4ge1xuICAgICAgY29uc3QgeyBzdHJpbmcgfSA9IGpzb24sXG4gICAgICAgICAgICBqdWRnZW1lbnROb2RlID0gaW5zdGFudGlhdGVKdWRnZW1lbnQoc3RyaW5nLCBjb250ZXh0KSxcbiAgICAgICAgICAgIG5vZGUgPSBqdWRnZW1lbnROb2RlLCAgLy8vXG4gICAgICAgICAgICBicmVha1BvaW50ID0gYnJlYWtQb2ludEZyb21KU09OKGpzb24pLFxuICAgICAgICAgICAgZnJhbWUgPSBmcmFtZUZyb21KdWRnZW1lbnROb2RlKGp1ZGdlbWVudE5vZGUsIGNvbnRleHQpLFxuICAgICAgICAgICAgZ29hbCA9IGdvYWxGcm9tSnVkZ2VtZW50Tm9kZShqdWRnZW1lbnROb2RlLCBjb250ZXh0KTtcblxuICAgICAgY29udGV4dCA9IG51bGw7XG5cbiAgICAgIGp1ZGdlbWVudCA9IG5ldyBKdWRnZW1lbnQoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBmcmFtZSwgZ29hbCk7XG4gICAgfSwgY29udGV4dCk7XG5cbiAgICByZXR1cm4ganVkZ2VtZW50O1xuICB9XG5cbiAgc3RhdGljIGZyb21TdGF0ZW1lbnQoc3RhdGVtZW50LCBjb250ZXh0KSB7XG4gICAgY29uc3Qgc3RhdGVtZW50Tm9kZSA9IHN0YXRlbWVudC5nZXROb2RlKCksXG4gICAgICAgICAganVkZ2VtZW50ID0ganVkZ2VtZW50RnJvbVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSwgY29udGV4dCk7XG5cbiAgICByZXR1cm4ganVkZ2VtZW50O1xuICB9XG59KTtcblxuZnVuY3Rpb24gZ29hbEZyb21KdWRnZW1lbnROb2RlKGp1ZGdlbWVudE5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgZ29hbE5vZGUgPSBqdWRnZW1lbnROb2RlLmdldEdvYWxOb2RlKCksXG4gICAgICAgIGdvYWwgPSBjb250ZXh0LmZpbmRHb2FsQnlHb2xhTm9kZShnb2FsTm9kZSk7XG5cbiAgcmV0dXJuIGdvYWw7XG59XG5cbmZ1bmN0aW9uIGZyYW1lRnJvbUp1ZGdlbWVudE5vZGUoanVkZ2VtZW50Tm9kZSwgY29udGV4dCkge1xuICBjb25zdCBmcmFtZU5vZGUgPSBqdWRnZW1lbnROb2RlLmdldEZyYW1lTm9kZSgpLFxuICAgICAgICBmcmFtZSA9IGNvbnRleHQuZmluZEZyYW1lQnlGcmFtZU5vZGUoZnJhbWVOb2RlKTtcblxuICByZXR1cm4gZnJhbWU7XG59XG5cbiJdLCJuYW1lcyI6WyJicmVha1BvaW50RnJvbUpTT04iLCJicmVha1BvaW50VG9CcmVha1BvaW50SlNPTiIsImJyZWFrUG9pbnRVdGlsaXRpZXMiLCJkZWZpbmUiLCJKdWRnZW1lbnQiLCJFbGVtZW50IiwiY29udGV4dCIsInN0cmluZyIsIm5vZGUiLCJicmVha1BvaW50IiwiZnJhbWUiLCJnb2FsIiwiZ2V0RnJhbWUiLCJnZXRBc3N1bXB0aW9uIiwiZ2V0SnVkZ2VtZW50Tm9kZSIsImdldE5vZGUiLCJqdWRnZW1lbnROb2RlIiwiaXNTaW5ndWxhciIsInNpbmd1bGFyIiwiaXNFcXVhbFRvIiwianVkZ2VtZW50IiwianVkZ2VtZW50Tm9kZU1hdGNoZXMiLCJtYXRjaEp1ZGdlbWVudE5vZGUiLCJlcXVhbFRvIiwiaXNNZXRhdmFyaWFibGVEZWZpbmVkIiwibWV0YXZhcmlhYmxlIiwiaXNJbXBsaWNpdCIsImdldFN0YXRlbWVudCIsImdldFJlZmVyZW5jZSIsImlzQ29uZGl0aW9uYWwiLCJnZXRBc3N1bXB0aW9ucyIsImdldE1ldGF2YXJpYWJsZSIsImZpbmREZWR1Y2VkU3RhdGVtZW50IiwiZmluZFN1cHBvc2VkU3RhdGVtZW50cyIsImdldEltcGxpY2l0QXNzdW1wdGlvbnMiLCJpbXBsaWNpdEFzc3VtcHRpb25zIiwiSW1wbGljaXRBc3N1bXB0aW9uIiwiZWxlbWVudHMiLCJmYWN0cyIsImdldEZhY3RzIiwiZm9yRWFjaCIsImZhY3QiLCJzdGF0ZW1lbnQiLCJpbXBsaWNpdEFzc3VtcHRpb24iLCJmcm9tU3RhdGVtZW50IiwiZGVjbGFyZSIsInN0YXRlIiwidmFsaWRhdGUiLCJwdXNoIiwibm9kZU1hdGNoZXMiLCJtYXRjaE5vZGUiLCJtYXRjaE1ldGF2YXJpYWJsZU5vZGUiLCJtZXRhdmFyaWFibGVOb2RlIiwiZmluZFN1YnByb29mQXNzZXJ0aW9uIiwiZmluZEp1ZGdlbWVudCIsImZpbmRKdWRnZW1lbnRCeUp1ZGdlbWVudE5vZGUiLCJjb21wYXJlU3RlcCIsInN0ZXAiLCJjb21wYXJlc1RvU3RlcCIsInN0ZXBTdHJpbmciLCJnZXRTdHJpbmciLCJqdWRnZW1lbnRTdHJpbmciLCJ0cmFjZSIsImNvbXBhcmVzVG9TdGF0ZW1lbnQiLCJjb21wYXJlU3RhdGVtZW50IiwiZGVidWciLCJzdGF0ZW1lbnRTdHJpbmciLCJsZWZ0U3RhdGVtZW50IiwicmlnaHRTdGF0ZW1lbnQiLCJzdGF0ZW1lbnRzRXF1YXRlIiwiZXF1YXRlU3RhdGVtZW50cyIsImNvbXBhcmVNZXRhdmFyaWFibGVOYW1lIiwibWV0YXZhcmlhYmxlTmFtZSIsImNvbnRpbnVhdGlvbiIsInZhbGlkYXRlcyIsInZhbGlkYXRlR29hbCIsImJpbmQiLCJ2YWxpZGF0ZUZyYW1lIiwiYWxsIiwidmFsaWRhdGVXaGVuRGVjbGFyZWQiLCJ2YWxpZGF0ZVdoZW5EZXJpdmVkIiwiZXhpc3RzIiwiYWRkSnVkZ2VtZW50IiwiZ29hbFZhbGlkYXRlcyIsImZyYW1lVmFsaWRhdGVzIiwidmFsaWRhdGVzV2hlbkRlY2xhcmVkIiwiZGVjbGFyZWQiLCJpc0RlY2xhcmVkIiwidmFsaWRhdGVzV2hlbkRlcml2ZWQiLCJkZXJpdmVkIiwiaXNEZXJpdmVkIiwic2NoZW1hcyIsImdldFNjaGVtYXMiLCJvbmUiLCJzY2hlbWEiLCJzdWNjZXNzIiwidW5pZnlKdWRnZW1lbnQiLCJqdWRnZW1lbnRVbmlmaWVzIiwidG9KU09OIiwiZ2V0QnJlYWtQb2ludCIsImJyZWFrUG9pbnRKU09OIiwianNvbiIsIm5hbWUiLCJmcm9tSlNPTiIsImluc3RhbnRpYXRlIiwiaW5zdGFudGlhdGVKdWRnZW1lbnQiLCJmcmFtZUZyb21KdWRnZW1lbnROb2RlIiwiZ29hbEZyb21KdWRnZW1lbnROb2RlIiwic3RhdGVtZW50Tm9kZSIsImp1ZGdlbWVudEZyb21TdGF0ZW1lbnROb2RlIiwiZ29hbE5vZGUiLCJnZXRHb2FsTm9kZSIsImZpbmRHb2FsQnlHb2xhTm9kZSIsImZyYW1lTm9kZSIsImdldEZyYW1lTm9kZSIsImZpbmRGcmFtZUJ5RnJhbWVOb2RlIl0sIm1hcHBpbmdzIjoiQUFBQTs7OzsrQkFpQkE7OztlQUFBOzs7Z0NBZjZDO2tFQUV4Qjs4QkFFRDt5QkFFUTt3QkFFSzs2QkFDSTt5QkFDTTt1QkFDSTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRS9DLE1BQU0sRUFBRUEsa0JBQWtCLEVBQUVDLDBCQUEwQixFQUFFLEdBQUdDLG1DQUFtQjtNQUU5RSxXQUFl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