occam-verify-cli 0.0.1094 → 0.0.1096

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.
Files changed (95) hide show
  1. package/lib/assertion/contained.js +21 -5
  2. package/lib/assertion/defined.js +11 -4
  3. package/lib/assertion/subproof.js +16 -10
  4. package/lib/axiom.js +4 -4
  5. package/lib/combinator/bracketed.js +5 -28
  6. package/lib/conclusion.js +7 -1
  7. package/lib/conjecture.js +4 -4
  8. package/lib/consequent.js +7 -1
  9. package/lib/constructor/bracketed.js +5 -28
  10. package/lib/context/bracketed/combinator.js +118 -0
  11. package/lib/context/bracketed/constructor.js +118 -0
  12. package/lib/context/bracketted.js +98 -0
  13. package/lib/context/file.js +44 -40
  14. package/lib/context/local.js +13 -13
  15. package/lib/declaration.js +122 -7
  16. package/lib/frame.js +26 -16
  17. package/lib/judgement.js +8 -23
  18. package/lib/label.js +8 -9
  19. package/lib/lemma.js +4 -4
  20. package/lib/metaLemma.js +41 -7
  21. package/lib/metatheorem.js +37 -2
  22. package/lib/metavariable.js +13 -13
  23. package/lib/mixins/statement/qualified/unify.js +2 -2
  24. package/lib/nodeAndTokens/metavariable.js +5 -6
  25. package/lib/nodeAndTokens/statement.js +7 -20
  26. package/lib/nodeAndTokens/substitution/frame.js +4 -5
  27. package/lib/nodeAndTokens/substitution/statement.js +4 -5
  28. package/lib/nodeAndTokens/substitution/term.js +4 -5
  29. package/lib/nodeAndTokens/term.js +5 -6
  30. package/lib/nodeAndTokens/variable.js +5 -6
  31. package/lib/premise.js +9 -3
  32. package/lib/reference.js +23 -9
  33. package/lib/rule.js +13 -7
  34. package/lib/statement/qualified.js +4 -3
  35. package/lib/statement/unqualified.js +29 -23
  36. package/lib/statement.js +9 -7
  37. package/lib/substitution/frame.js +2 -2
  38. package/lib/substitution/statement.js +4 -4
  39. package/lib/substitution/term.js +2 -2
  40. package/lib/substitutions.js +9 -2
  41. package/lib/topLevelAssertion.js +13 -25
  42. package/lib/unifier/equality.js +5 -5
  43. package/lib/unifier/label.js +146 -0
  44. package/lib/unifier/metaLevel.js +7 -7
  45. package/lib/unifier.js +4 -4
  46. package/lib/variable.js +8 -5
  47. package/package.json +1 -1
  48. package/src/assertion/contained.js +22 -6
  49. package/src/assertion/defined.js +11 -5
  50. package/src/assertion/subproof.js +17 -12
  51. package/src/axiom.js +3 -2
  52. package/src/combinator/bracketed.js +5 -41
  53. package/src/conclusion.js +2 -0
  54. package/src/conjecture.js +3 -2
  55. package/src/consequent.js +2 -0
  56. package/src/constructor/bracketed.js +5 -40
  57. package/src/context/bracketed/combinator.js +23 -0
  58. package/src/context/bracketed/constructor.js +23 -0
  59. package/src/context/bracketted.js +61 -0
  60. package/src/context/file.js +57 -48
  61. package/src/context/local.js +4 -4
  62. package/src/declaration.js +130 -6
  63. package/src/frame.js +30 -15
  64. package/src/judgement.js +7 -35
  65. package/src/label.js +3 -14
  66. package/src/lemma.js +3 -2
  67. package/src/metaLemma.js +60 -12
  68. package/src/metatheorem.js +56 -2
  69. package/src/metavariable.js +19 -13
  70. package/src/mixins/statement/qualified/unify.js +3 -1
  71. package/src/nodeAndTokens/metavariable.js +3 -7
  72. package/src/nodeAndTokens/statement.js +1 -13
  73. package/src/nodeAndTokens/substitution/frame.js +1 -6
  74. package/src/nodeAndTokens/substitution/statement.js +1 -6
  75. package/src/nodeAndTokens/substitution/term.js +1 -6
  76. package/src/nodeAndTokens/term.js +3 -7
  77. package/src/nodeAndTokens/variable.js +3 -7
  78. package/src/premise.js +15 -3
  79. package/src/reference.js +30 -19
  80. package/src/rule.js +7 -5
  81. package/src/statement/qualified.js +3 -3
  82. package/src/statement/unqualified.js +32 -30
  83. package/src/statement.js +9 -9
  84. package/src/substitution/frame.js +1 -2
  85. package/src/substitution/statement.js +3 -6
  86. package/src/substitution/term.js +1 -2
  87. package/src/substitutions.js +7 -1
  88. package/src/topLevelAssertion.js +10 -22
  89. package/src/unifier/equality.js +14 -16
  90. package/src/unifier/label.js +57 -0
  91. package/src/unifier/metaLevel.js +6 -6
  92. package/src/unifier.js +4 -4
  93. package/src/variable.js +13 -7
  94. package/lib/unifier/intrinsicLevel.js +0 -149
  95. package/src/unifier/intrinsicLevel.js +0 -61
package/lib/variable.js CHANGED
@@ -167,7 +167,9 @@ var Variable = /*#__PURE__*/ function() {
167
167
  {
168
168
  key: "unifyTerm",
169
169
  value: function unifyTerm(term, substitutions, generalContext, specificContext) {
170
+ var contextsReversed = arguments.length > 4 && arguments[4] !== void 0 ? arguments[4] : false;
170
171
  var termUnified = false;
172
+ var context = contextsReversed ? generalContext : specificContext;
171
173
  var termString = term.getString(), variableString = this.string; ///
172
174
  specificContext.trace("Unifying the '".concat(termString, "' term with the '").concat(variableString, "' variable..."));
173
175
  var termNode = term.getNode(), variableName = this.name, substitution = substitutions.findSubstitutionByVariableName(variableName);
@@ -177,11 +179,12 @@ var Variable = /*#__PURE__*/ function() {
177
179
  termUnified = true;
178
180
  }
179
181
  } else {
180
- var variableNode = this.node, variable = variableFromVariableNode(variableNode, generalContext, specificContext), termVariable = termVariableFromTermNode(termNode, generalContext, specificContext);
182
+ var variableNode = this.node, _$generalContext = this.context, variable = variableFromVariableNode(variableNode, _$generalContext), termVariable = termVariableFromTermNode(termNode, _$generalContext);
181
183
  if (variable !== null && variable === termVariable) {
182
184
  termUnified = true;
183
185
  } else {
184
- var context = specificContext, variable1 = this, termSubstitution = _term.default.fromTernAndVariable(term, variable1, context), substitution1 = termSubstitution; ///
186
+ var variable1 = this, termSubstitution = _term.default.fromTernAndVariable(term, variable1, context), substitution1 = termSubstitution; ///
187
+ context = specificContext; ///
185
188
  substitutions.addSubstitution(substitution1, context);
186
189
  termUnified = true;
187
190
  }
@@ -258,11 +261,11 @@ Object.assign(_shim.default, {
258
261
  Variable: Variable
259
262
  });
260
263
  var _default = Variable;
261
- function variableFromVariableNode(variableNode, generalContext, specificContext) {
264
+ function variableFromVariableNode(variableNode, generalContext) {
262
265
  var variableName = (0, _name.variableNameFromVariableNode)(variableNode), context = generalContext, variable = context.findVariableByVariableName(variableName);
263
266
  return variable;
264
267
  }
265
- function termVariableFromTermNode(termNode, specificContext, generalContext) {
268
+ function termVariableFromTermNode(termNode, generalContext) {
266
269
  var termVariable = null;
267
270
  var termVariableNode = termVariableNodeQuery(termNode);
268
271
  if (termVariableNode !== null) {
@@ -272,4 +275,4 @@ function termVariableFromTermNode(termNode, specificContext, generalContext) {
272
275
  return termVariable;
273
276
  }
274
277
 
275
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy92YXJpYWJsZS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHNoaW0gZnJvbSBcIi4vc2hpbVwiO1xuaW1wb3J0IExvY2FsQ29udGV4dCBmcm9tIFwiLi9jb250ZXh0L2xvY2FsXCI7XG5pbXBvcnQgVGVybVN1YnN0aXR1dGlvbiBmcm9tIFwiLi9zdWJzdGl0dXRpb24vdGVybVwiO1xuXG5pbXBvcnQgeyBub2RlUXVlcnkgfSBmcm9tIFwiLi91dGlsaXRpZXMvcXVlcnlcIjtcbmltcG9ydCB7IG9iamVjdFR5cGUgfSBmcm9tIFwiLi90eXBlXCI7XG5pbXBvcnQgeyB2YXJpYWJsZU5hbWVGcm9tVmFyaWFibGVOb2RlfSBmcm9tIFwiLi91dGlsaXRpZXMvbmFtZVwiO1xuaW1wb3J0IHsgdHlwZUZyb21KU09OLCB0eXBlVG9UeXBlSlNPTiB9IGZyb20gXCIuL3V0aWxpdGllcy9qc29uXCI7XG5pbXBvcnQgeyB2YXJpYWJsZU5vZGVGcm9tVmFyaWFibGVTdHJpbmcgfSBmcm9tIFwiLi9ub2RlQW5kVG9rZW5zL3ZhcmlhYmxlXCI7XG5cbmNvbnN0IHR5cGVOb2RlUXVlcnkgPSBub2RlUXVlcnkoXCIvdmFyaWFibGVEZWNsYXJhdGlvbi90eXBlXCIpLFxuICAgICAgdmFyaWFibGVOb2RlUXVlcnkgPSBub2RlUXVlcnkoXCIvdmFyaWFibGVEZWNsYXJhdGlvbi92YXJpYWJsZVwiKSxcbiAgICAgIHRlcm1WYXJpYWJsZU5vZGVRdWVyeSA9IG5vZGVRdWVyeShcIi90ZXJtL3ZhcmlhYmxlXCIpO1xuXG5jbGFzcyBWYXJpYWJsZSB7XG4gIGNvbnN0cnVjdG9yKGNvbnRleHQsIHN0cmluZywgbm9kZSwgbmFtZSwgdHlwZSkge1xuICAgIHRoaXMuY29udGV4dCA9IGNvbnRleHQ7IC8vL1xuICAgIHRoaXMuc3RyaW5nID0gc3RyaW5nO1xuICAgIHRoaXMubm9kZSA9IG5vZGU7XG4gICAgdGhpcy5uYW1lID0gbmFtZTtcbiAgICB0aGlzLnR5cGUgPSB0eXBlO1xuICB9XG5cbiAgZ2V0TG9jYWxDb250ZXh0KCkge1xuICAgIHJldHVybiB0aGlzLmNvbnRleHQ7XG4gIH1cblxuICBnZXRTdHJpbmcoKSB7XG4gICAgcmV0dXJuIHRoaXMuc3RyaW5nO1xuICB9XG5cbiAgZ2V0Tm9kZSgpIHtcbiAgICByZXR1cm4gdGhpcy5ub2RlO1xuICB9XG5cbiAgZ2V0TmFtZSgpIHtcbiAgICByZXR1cm4gdGhpcy5uYW1lO1xuICB9XG5cbiAgZ2V0VHlwZSgpIHtcbiAgICByZXR1cm4gdGhpcy50eXBlO1xuICB9XG5cbiAgc2V0VHlwZSh0eXBlKSB7XG4gICAgdGhpcy50eXBlID0gdHlwZTtcbiAgfVxuXG4gIG1hdGNoVmFyaWFibGVOYW1lKHZhcmlhYmxlTmFtZSkge1xuICAgIGNvbnN0IHZhcmlhYmxlTmFtZU1hdGNoZXMgPSAodGhpcy5uYW1lID09PSB2YXJpYWJsZU5hbWUpO1xuXG4gICAgcmV0dXJuIHZhcmlhYmxlTmFtZU1hdGNoZXM7XG4gIH1cblxuICBtYXRjaFZhcmlhYmxlTm9kZSh2YXJpYWJsZU5vZGUpIHtcbiAgICBjb25zdCB2YXJpYWJsZU5vZGVNYXRjaGVzID0gdGhpcy5ub2RlLm1hdGNoKHZhcmlhYmxlTm9kZSk7XG5cbiAgICByZXR1cm4gdmFyaWFibGVOb2RlTWF0Y2hlcztcbiAgfVxuXG4gIHZlcmlmeShjb250ZXh0KSB7XG4gICAgbGV0IHZlcmlmaWVkO1xuXG4gICAgY29uc3QgdmFyaWFibGVTdHJpbmcgPSB0aGlzLnN0cmluZzsgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWZXJpZnlpbmcgdGhlICcke3ZhcmlhYmxlU3RyaW5nfScgdmFyaWFibGUuLi5gKTtcblxuICAgIGNvbnN0IHZhcmlhYmxlTm9kZSA9IHRoaXMubm9kZSwgLy8vXG4gICAgICAgICAgdmFyaWFibGVOYW1lID0gdmFyaWFibGVOYW1lRnJvbVZhcmlhYmxlTm9kZSh2YXJpYWJsZU5vZGUpLFxuICAgICAgICAgIHZhcmlhYmxlID0gY29udGV4dC5maW5kVmFyaWFibGVCeVZhcmlhYmxlTmFtZSh2YXJpYWJsZU5hbWUpO1xuXG4gICAgaWYgKHZhcmlhYmxlICE9PSBudWxsKSB7XG4gICAgICBjb25zdCB0eXBlID0gdmFyaWFibGUuZ2V0VHlwZSgpO1xuXG4gICAgICB0aGlzLnR5cGUgPSB0eXBlO1xuXG4gICAgICB2ZXJpZmllZCA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYFRoZSAnJHt2YXJpYWJsZVN0cmluZ30nIHZhcmlhYmxlIGlzIG5vdCBwcmVzZW50LmApO1xuICAgIH1cblxuICAgIGlmICh2ZXJpZmllZCkge1xuICAgICAgY29uc3QgdHlwZU5hbWUgPSB0aGlzLnR5cGUuZ2V0TmFtZSgpO1xuXG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52ZXJpZmllZCB0aGUgJyR7dmFyaWFibGVTdHJpbmd9OiR7dHlwZU5hbWV9JyB2YXJpYWJsZS5gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdmVyaWZpZWQ7XG4gIH1cblxuICB2ZXJpZnlUeXBlKGZpbGVDb250ZXh0KSB7XG4gICAgbGV0IHR5cGVWZXJpZmllZDtcblxuICAgIGlmICh0aGlzLnR5cGUgPT09IG9iamVjdFR5cGUpIHtcbiAgICAgIHR5cGVWZXJpZmllZCA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHR5cGVOYW1lID0gdGhpcy50eXBlLmdldE5hbWUoKTtcblxuICAgICAgZmlsZUNvbnRleHQudHJhY2UoYFZlcmlmeWluZyB0aGUgJyR7dHlwZU5hbWV9JyB0eXBlLi4uYCk7XG5cbiAgICAgIGNvbnN0IHR5cGUgPSBmaWxlQ29udGV4dC5maW5kVHlwZUJ5VHlwZU5hbWUodHlwZU5hbWUpO1xuXG4gICAgICBpZiAodHlwZSA9PT0gbnVsbCkge1xuICAgICAgICBmaWxlQ29udGV4dC5kZWJ1ZyhgVGhlICcke3R5cGVOYW1lfScgdHlwZSBpcyBtaXNzaW5nLmApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy50eXBlID0gdHlwZTsgLy8vXG5cbiAgICAgICAgdHlwZVZlcmlmaWVkID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVWZXJpZmllZCkge1xuICAgICAgICBmaWxlQ29udGV4dC5kZWJ1ZyhgLi4udmVyaWZpZWQgdGhlICcke3R5cGVOYW1lfScgdHlwZS5gKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdHlwZVZlcmlmaWVkO1xuICB9XG5cbiAgdmVyaWZ5V2hlbkRlY2xhcmVkKGZpbGVDb250ZXh0KSB7XG4gICAgbGV0IHZlcmlmaWVkQXRUb3BMZXZlbDtcblxuICAgIGNvbnN0IHZhcmlhYmxlU3RyaW5nID0gdGhpcy5zdHJpbmc7IC8vL1xuXG4gICAgZmlsZUNvbnRleHQudHJhY2UoYFZlcmlmeWluZyB0aGUgJyR7dmFyaWFibGVTdHJpbmd9JyB2YXJpYWJsZSB3aGVuIGRlY2xhcmVkLi4uYCk7XG5cbiAgICBjb25zdCB2YXJpYWJsZU5vZGUgPSB0aGlzLm5vZGUsIC8vL1xuICAgICAgICAgIHZhcmlhYmxlTmFtZSA9IHZhcmlhYmxlTmFtZUZyb21WYXJpYWJsZU5vZGUodmFyaWFibGVOb2RlKSxcbiAgICAgICAgICB2YXJpYWJsZVByZXNlbnQgPSBmaWxlQ29udGV4dC5pc1ZhcmlhYmxlUHJlc2VudEJ5VmFyaWFibGVOYW1lKHZhcmlhYmxlTmFtZSk7XG5cbiAgICBpZiAodmFyaWFibGVQcmVzZW50KSB7XG4gICAgICBmaWxlQ29udGV4dC5kZWJ1ZyhgVGhlICcke3ZhcmlhYmxlU3RyaW5nfScgdmFyaWFibGUgaXMgYWxyZWFkeSBwcmVzZW50LmApO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCB0eXBlVmVyaWZpZWQgPSB0aGlzLnZlcmlmeVR5cGUoZmlsZUNvbnRleHQpO1xuXG4gICAgICB2ZXJpZmllZEF0VG9wTGV2ZWwgPSB0eXBlVmVyaWZpZWQ7ICAvLy9cbiAgICB9XG5cbiAgICBpZiAodmVyaWZpZWRBdFRvcExldmVsKSB7XG4gICAgICBmaWxlQ29udGV4dC5kZWJ1ZyhgLi4udmVyaWZpZWQgdGhlICcke3ZhcmlhYmxlU3RyaW5nfScgdmFyaWFibGUgd2hlbiBkZWNsYXJlZC5gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdmVyaWZpZWRBdFRvcExldmVsO1xuICB9XG5cbiAgdW5pZnlUZXJtKHRlcm0sIHN1YnN0aXR1dGlvbnMsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQpIHtcbiAgICBsZXQgdGVybVVuaWZpZWQgPSBmYWxzZTtcblxuICAgIGNvbnN0IHRlcm1TdHJpbmcgPSB0ZXJtLmdldFN0cmluZygpLFxuICAgICAgICAgIHZhcmlhYmxlU3RyaW5nID0gdGhpcy5zdHJpbmc7IC8vL1xuXG4gICAgc3BlY2lmaWNDb250ZXh0LnRyYWNlKGBVbmlmeWluZyB0aGUgJyR7dGVybVN0cmluZ30nIHRlcm0gd2l0aCB0aGUgJyR7dmFyaWFibGVTdHJpbmd9JyB2YXJpYWJsZS4uLmApO1xuXG4gICAgY29uc3QgdGVybU5vZGUgPSB0ZXJtLmdldE5vZGUoKSxcbiAgICAgICAgICB2YXJpYWJsZU5hbWUgPSB0aGlzLm5hbWUsIC8vL1xuICAgICAgICAgIHN1YnN0aXR1dGlvbiA9IHN1YnN0aXR1dGlvbnMuZmluZFN1YnN0aXR1dGlvbkJ5VmFyaWFibGVOYW1lKHZhcmlhYmxlTmFtZSk7XG5cbiAgICBpZiAoc3Vic3RpdHV0aW9uICE9PSBudWxsKSB7XG4gICAgICBjb25zdCB0ZXJtTm9kZU1hdGNoZXMgPSBzdWJzdGl0dXRpb24ubWF0Y2hUZXJtTm9kZSh0ZXJtTm9kZSk7XG5cbiAgICAgIGlmICh0ZXJtTm9kZU1hdGNoZXMpIHtcbiAgICAgICAgdGVybVVuaWZpZWQgPSB0cnVlO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCB2YXJpYWJsZU5vZGUgPSB0aGlzLm5vZGUsICAvLy9cbiAgICAgICAgICAgIHZhcmlhYmxlID0gdmFyaWFibGVGcm9tVmFyaWFibGVOb2RlKHZhcmlhYmxlTm9kZSwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCksXG4gICAgICAgICAgICB0ZXJtVmFyaWFibGUgPSB0ZXJtVmFyaWFibGVGcm9tVGVybU5vZGUodGVybU5vZGUsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQpO1xuXG4gICAgICBpZiAoKHZhcmlhYmxlICE9PSBudWxsKSAmJiAodmFyaWFibGUgPT09IHRlcm1WYXJpYWJsZSkpIHtcbiAgICAgICAgdGVybVVuaWZpZWQgPSB0cnVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgY29udGV4dCA9IHNwZWNpZmljQ29udGV4dCwgIC8vL1xuICAgICAgICAgICAgICB2YXJpYWJsZSA9IHRoaXMsICAvLy9cbiAgICAgICAgICAgICAgdGVybVN1YnN0aXR1dGlvbiA9IFRlcm1TdWJzdGl0dXRpb24uZnJvbVRlcm5BbmRWYXJpYWJsZSh0ZXJtLCB2YXJpYWJsZSwgY29udGV4dCksXG4gICAgICAgICAgICAgIHN1YnN0aXR1dGlvbiA9IHRlcm1TdWJzdGl0dXRpb247ICAvLy9cblxuICAgICAgICBzdWJzdGl0dXRpb25zLmFkZFN1YnN0aXR1dGlvbihzdWJzdGl0dXRpb24sIGNvbnRleHQpO1xuXG4gICAgICAgIHRlcm1VbmlmaWVkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGVybVVuaWZpZWQpIHtcbiAgICAgIHNwZWNpZmljQ29udGV4dC50cmFjZShgLi4udW5pZmllZCB0aGUgJyR7dGVybVN0cmluZ30nIHRlcm0gd2l0aCB0aGUgJyR7dmFyaWFibGVTdHJpbmd9JyB2YXJpYWJsZS5gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGVybVVuaWZpZWQ7XG4gIH1cblxuICB0b0pTT04oKSB7XG4gICAgY29uc3QgdHlwZUpTT04gPSB0eXBlVG9UeXBlSlNPTih0aGlzLnR5cGUpLFxuICAgICAgICAgIHN0cmluZyA9IHRoaXMuc3RyaW5nLFxuICAgICAgICAgIHR5cGUgPSB0eXBlSlNPTiwgIC8vL1xuICAgICAgICAgIGpzb24gPSB7XG4gICAgICAgICAgICB0eXBlLFxuICAgICAgICAgICAgc3RyaW5nXG4gICAgICAgICAgfTtcblxuICAgIHJldHVybiBqc29uO1xuICB9XG5cbiAgc3RhdGljIGZyb21KU09OKGpzb24sIGZpbGVDb250ZXh0KSB7XG4gICAgY29uc3QgeyBzdHJpbmcgfSA9IGpzb24sXG4gICAgICAgICAgbG9jYWxDb250ZXh0ID0gTG9jYWxDb250ZXh0LmZyb21GaWxlQ29udGV4dChmaWxlQ29udGV4dCksXG4gICAgICAgICAgY29udGV4dCA9IGxvY2FsQ29udGV4dCwgLy8vXG4gICAgICAgICAgdmFyaWFibGVTdHJpbmcgPSBzdHJpbmcsICAvLy9cbiAgICAgICAgICB2YXJpYWJsZU5vZGUgPSB2YXJpYWJsZU5vZGVGcm9tVmFyaWFibGVTdHJpbmcodmFyaWFibGVTdHJpbmcsIGNvbnRleHQpLFxuICAgICAgICAgIHZhcmlhYmxlTmFtZSA9IHZhcmlhYmxlTmFtZUZyb21WYXJpYWJsZU5vZGUodmFyaWFibGVOb2RlKSxcbiAgICAgICAgICBub2RlID0gdmFyaWFibGVOb2RlLFxuICAgICAgICAgIG5hbWUgPSB2YXJpYWJsZU5hbWUsICAvLy9cbiAgICAgICAgICB0eXBlID0gdHlwZUZyb21KU09OKGpzb24sIGZpbGVDb250ZXh0KSxcbiAgICAgICAgICB2YXJpYWJsZSA9IG5ldyBWYXJpYWJsZShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIG5hbWUsIHR5cGUpO1xuXG4gICAgcmV0dXJuIHZhcmlhYmxlO1xuICB9XG5cbiAgc3RhdGljIGZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgY29udGV4dCkge1xuICAgIGxldCB2YXJpYWJsZSA9IG51bGw7XG5cbiAgICBjb25zdCB0ZXJtVmFyaWFibGVOb2RlID0gdGVybVZhcmlhYmxlTm9kZVF1ZXJ5KHRlcm1Ob2RlKTtcblxuICAgIGlmICh0ZXJtVmFyaWFibGVOb2RlICE9PSBudWxsKSB7XG4gICAgICBjb25zdCB2YXJpYWJsZU5vZGUgPSB0ZXJtVmFyaWFibGVOb2RlLCAgLy8vXG4gICAgICAgICAgICB2YXJpYWJsZU5hbWUgPSB2YXJpYWJsZU5hbWVGcm9tVmFyaWFibGVOb2RlKHZhcmlhYmxlTm9kZSksXG4gICAgICAgICAgICBub2RlID0gdmFyaWFibGVOb2RlLCAgLy8vXG4gICAgICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgICAgIG5hbWUgPSB2YXJpYWJsZU5hbWUsICAvLy9cbiAgICAgICAgICAgIHR5cGUgPSBudWxsO1xuXG4gICAgICB2YXJpYWJsZSA9IG5ldyBWYXJpYWJsZShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIG5hbWUsIHR5cGUpO1xuICAgIH1cblxuICAgIHJldHVybiB2YXJpYWJsZTtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tVmFyaWFibGVOb2RlKHZhcmlhYmxlTm9kZSwgY29udGV4dCkge1xuICAgIGxldCB2YXJpYWJsZSA9IG51bGw7XG5cbiAgICBpZiAodmFyaWFibGVOb2RlICE9PSBudWxsKSB7XG4gICAgICBjb25zdCBub2RlID0gdmFyaWFibGVOb2RlLCAgLy8vXG4gICAgICAgICAgICB2YXJpYWJsZU5hbWUgPSB2YXJpYWJsZU5hbWVGcm9tVmFyaWFibGVOb2RlKHZhcmlhYmxlTm9kZSksXG4gICAgICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgICAgIG5hbWUgPSB2YXJpYWJsZU5hbWUsICAvLy9cbiAgICAgICAgICAgIHR5cGUgPSBudWxsO1xuXG4gICAgICB2YXJpYWJsZSA9IG5ldyBWYXJpYWJsZShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIG5hbWUsIHR5cGUpO1xuICAgIH1cblxuICAgIHJldHVybiB2YXJpYWJsZTtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tVmFyaWFibGVOb2RlQW5kVHlwZSh2YXJpYWJsZU5vZGUsIHR5cGUsIGNvbnRleHQpIHtcbiAgICBsZXQgdmFyaWFibGUgPSBudWxsO1xuXG4gICAgaWYgKHZhcmlhYmxlTm9kZSAhPT0gbnVsbCkge1xuICAgICAgY29uc3Qgbm9kZSA9IHZhcmlhYmxlTm9kZSwgIC8vL1xuICAgICAgICAgICAgdmFyaWFibGVOYW1lID0gdmFyaWFibGVOYW1lRnJvbVZhcmlhYmxlTm9kZSh2YXJpYWJsZU5vZGUpLFxuICAgICAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgICAgICBuYW1lID0gdmFyaWFibGVOYW1lOyAgLy8vXG5cbiAgICAgIHZhcmlhYmxlID0gbmV3IFZhcmlhYmxlKGNvbnRleHQsIHN0cmluZywgbm9kZSwgbmFtZSwgdHlwZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhcmlhYmxlO1xuICB9XG5cbiAgc3RhdGljIGZyb21WYXJpYWJsZURlY2xhcmF0aW9uTm9kZSh2YXJpYWJsZURlY2xhcmF0aW9uTm9kZSwgZmlsZUNvbnRleHQpIHtcbiAgICBjb25zdCB7IFR5cGUgfSA9IHNoaW0sXG4gICAgICAgICAgdHlwZU5vZGUgPSB0eXBlTm9kZVF1ZXJ5KHZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlKSxcbiAgICAgICAgICB2YXJpYWJsZU5vZGUgPSB2YXJpYWJsZU5vZGVRdWVyeSh2YXJpYWJsZURlY2xhcmF0aW9uTm9kZSksXG4gICAgICAgICAgdmFyaWFibGVOYW1lID0gdmFyaWFibGVOYW1lRnJvbVZhcmlhYmxlTm9kZSh2YXJpYWJsZU5vZGUpLFxuICAgICAgICAgIGNvbnRleHQgPSBMb2NhbENvbnRleHQuZnJvbUZpbGVDb250ZXh0KGZpbGVDb250ZXh0KSxcbiAgICAgICAgICB2YXJpYWJsZVN0cmluZyA9IGZpbGVDb250ZXh0Lm5vZGVBc1N0cmluZyh2YXJpYWJsZU5vZGUpLFxuICAgICAgICAgIHN0cmluZyA9IHZhcmlhYmxlU3RyaW5nLCAgLy8vXG4gICAgICAgICAgbm9kZSA9IHZhcmlhYmxlTm9kZSwgIC8vL1xuICAgICAgICAgIG5hbWUgPSB2YXJpYWJsZU5hbWUsICAvLy9cbiAgICAgICAgICB0eXBlID0gVHlwZS5mcm9tVHlwZU5vZGUodHlwZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICAgIHZhcmlhYmxlID0gbmV3IFZhcmlhYmxlKGNvbnRleHQsIHN0cmluZywgbm9kZSwgbmFtZSwgdHlwZSk7XG5cbiAgICByZXR1cm4gdmFyaWFibGU7XG4gIH1cbn1cblxuT2JqZWN0LmFzc2lnbihzaGltLCB7XG4gIFZhcmlhYmxlXG59KTtcblxuZXhwb3J0IGRlZmF1bHQgVmFyaWFibGU7XG5cbmZ1bmN0aW9uIHZhcmlhYmxlRnJvbVZhcmlhYmxlTm9kZSh2YXJpYWJsZU5vZGUsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQpIHtcbiAgY29uc3QgdmFyaWFibGVOYW1lID0gdmFyaWFibGVOYW1lRnJvbVZhcmlhYmxlTm9kZSh2YXJpYWJsZU5vZGUpLFxuICAgICAgICBjb250ZXh0ID0gZ2VuZXJhbENvbnRleHQsIC8vL1xuICAgICAgICB2YXJpYWJsZSA9IGNvbnRleHQuZmluZFZhcmlhYmxlQnlWYXJpYWJsZU5hbWUodmFyaWFibGVOYW1lKTtcblxuICByZXR1cm4gdmFyaWFibGU7XG59XG5cbmZ1bmN0aW9uIHRlcm1WYXJpYWJsZUZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgc3BlY2lmaWNDb250ZXh0LCBnZW5lcmFsQ29udGV4dCkge1xuICBsZXQgdGVybVZhcmlhYmxlID0gbnVsbDtcblxuICBjb25zdCB0ZXJtVmFyaWFibGVOb2RlID0gdGVybVZhcmlhYmxlTm9kZVF1ZXJ5KHRlcm1Ob2RlKTtcblxuICBpZiAodGVybVZhcmlhYmxlTm9kZSAhPT0gbnVsbCkge1xuICAgIGNvbnN0IHRlcm1WYXJpYWJsZU5hbWUgPSB2YXJpYWJsZU5hbWVGcm9tVmFyaWFibGVOb2RlKHRlcm1WYXJpYWJsZU5vZGUpLFxuICAgICAgICAgIGNvbnRleHQgPSBnZW5lcmFsQ29udGV4dDsgLy8vXG5cbiAgICB0ZXJtVmFyaWFibGUgPSBjb250ZXh0LmZpbmRWYXJpYWJsZUJ5VmFyaWFibGVOYW1lKHRlcm1WYXJpYWJsZU5hbWUpO1xuICB9XG5cbiAgcmV0dXJuIHRlcm1WYXJpYWJsZTtcbn1cbiJdLCJuYW1lcyI6WyJ0eXBlTm9kZVF1ZXJ5Iiwibm9kZVF1ZXJ5IiwidmFyaWFibGVOb2RlUXVlcnkiLCJ0ZXJtVmFyaWFibGVOb2RlUXVlcnkiLCJWYXJpYWJsZSIsImNvbnRleHQiLCJzdHJpbmciLCJub2RlIiwibmFtZSIsInR5cGUiLCJnZXRMb2NhbENvbnRleHQiLCJnZXRTdHJpbmciLCJnZXROb2RlIiwiZ2V0TmFtZSIsImdldFR5cGUiLCJzZXRUeXBlIiwibWF0Y2hWYXJpYWJsZU5hbWUiLCJ2YXJpYWJsZU5hbWUiLCJ2YXJpYWJsZU5hbWVNYXRjaGVzIiwibWF0Y2hWYXJpYWJsZU5vZGUiLCJ2YXJpYWJsZU5vZGUiLCJ2YXJpYWJsZU5vZGVNYXRjaGVzIiwibWF0Y2giLCJ2ZXJpZnkiLCJ2ZXJpZmllZCIsInZhcmlhYmxlU3RyaW5nIiwidHJhY2UiLCJ2YXJpYWJsZU5hbWVGcm9tVmFyaWFibGVOb2RlIiwidmFyaWFibGUiLCJmaW5kVmFyaWFibGVCeVZhcmlhYmxlTmFtZSIsImRlYnVnIiwidHlwZU5hbWUiLCJ2ZXJpZnlUeXBlIiwiZmlsZUNvbnRleHQiLCJ0eXBlVmVyaWZpZWQiLCJvYmplY3RUeXBlIiwiZmluZFR5cGVCeVR5cGVOYW1lIiwidmVyaWZ5V2hlbkRlY2xhcmVkIiwidmVyaWZpZWRBdFRvcExldmVsIiwidmFyaWFibGVQcmVzZW50IiwiaXNWYXJpYWJsZVByZXNlbnRCeVZhcmlhYmxlTmFtZSIsInVuaWZ5VGVybSIsInRlcm0iLCJzdWJzdGl0dXRpb25zIiwiZ2VuZXJhbENvbnRleHQiLCJzcGVjaWZpY0NvbnRleHQiLCJ0ZXJtVW5pZmllZCIsInRlcm1TdHJpbmciLCJ0ZXJtTm9kZSIsInN1YnN0aXR1dGlvbiIsImZpbmRTdWJzdGl0dXRpb25CeVZhcmlhYmxlTmFtZSIsInRlcm1Ob2RlTWF0Y2hlcyIsIm1hdGNoVGVybU5vZGUiLCJ2YXJpYWJsZUZyb21WYXJpYWJsZU5vZGUiLCJ0ZXJtVmFyaWFibGUiLCJ0ZXJtVmFyaWFibGVGcm9tVGVybU5vZGUiLCJ0ZXJtU3Vic3RpdHV0aW9uIiwiVGVybVN1YnN0aXR1dGlvbiIsImZyb21UZXJuQW5kVmFyaWFibGUiLCJhZGRTdWJzdGl0dXRpb24iLCJ0b0pTT04iLCJ0eXBlSlNPTiIsInR5cGVUb1R5cGVKU09OIiwianNvbiIsImZyb21KU09OIiwibG9jYWxDb250ZXh0IiwiTG9jYWxDb250ZXh0IiwiZnJvbUZpbGVDb250ZXh0IiwidmFyaWFibGVOb2RlRnJvbVZhcmlhYmxlU3RyaW5nIiwidHlwZUZyb21KU09OIiwiZnJvbVRlcm1Ob2RlIiwidGVybVZhcmlhYmxlTm9kZSIsIm5vZGVBc1N0cmluZyIsImZyb21WYXJpYWJsZU5vZGUiLCJmcm9tVmFyaWFibGVOb2RlQW5kVHlwZSIsImZyb21WYXJpYWJsZURlY2xhcmF0aW9uTm9kZSIsInZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlIiwiVHlwZSIsInNoaW0iLCJ0eXBlTm9kZSIsImZyb21UeXBlTm9kZSIsIk9iamVjdCIsImFzc2lnbiIsInRlcm1WYXJpYWJsZU5hbWUiXSwibWFwcGluZ3MiOiJBQUFBOzs7OytCQStSQTs7O2VBQUE7OzsyREE3UmlCOzREQUNROzJEQUNJO3FCQUVIO29CQUNDO29CQUNpQjtvQkFDQzt3QkFDRTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUUvQyxJQUFNQSxnQkFBZ0JDLElBQUFBLGdCQUFTLEVBQUMsOEJBQzFCQyxvQkFBb0JELElBQUFBLGdCQUFTLEVBQUMsa0NBQzlCRSx3QkFBd0JGLElBQUFBLGdCQUFTLEVBQUM7QUFFeEMsSUFBQSxBQUFNRyx5QkFBTjthQUFNQSxTQUNRQyxPQUFPLEVBQUVDLE1BQU0sRUFBRUMsSUFBSSxFQUFFQyxJQUFJLEVBQUVDLElBQUk7Z0NBRHpDTDtRQUVGLElBQUksQ0FBQ0MsT0FBTyxHQUFHQSxTQUFTLEdBQUc7UUFDM0IsSUFBSSxDQUFDQyxNQUFNLEdBQUdBO1FBQ2QsSUFBSSxDQUFDQyxJQUFJLEdBQUdBO1FBQ1osSUFBSSxDQUFDQyxJQUFJLEdBQUdBO1FBQ1osSUFBSSxDQUFDQyxJ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
278
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy92YXJpYWJsZS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHNoaW0gZnJvbSBcIi4vc2hpbVwiO1xuaW1wb3J0IExvY2FsQ29udGV4dCBmcm9tIFwiLi9jb250ZXh0L2xvY2FsXCI7XG5pbXBvcnQgVGVybVN1YnN0aXR1dGlvbiBmcm9tIFwiLi9zdWJzdGl0dXRpb24vdGVybVwiO1xuXG5pbXBvcnQgeyBub2RlUXVlcnkgfSBmcm9tIFwiLi91dGlsaXRpZXMvcXVlcnlcIjtcbmltcG9ydCB7IG9iamVjdFR5cGUgfSBmcm9tIFwiLi90eXBlXCI7XG5pbXBvcnQgeyB2YXJpYWJsZU5hbWVGcm9tVmFyaWFibGVOb2RlfSBmcm9tIFwiLi91dGlsaXRpZXMvbmFtZVwiO1xuaW1wb3J0IHsgdHlwZUZyb21KU09OLCB0eXBlVG9UeXBlSlNPTiB9IGZyb20gXCIuL3V0aWxpdGllcy9qc29uXCI7XG5pbXBvcnQgeyB2YXJpYWJsZU5vZGVGcm9tVmFyaWFibGVTdHJpbmcgfSBmcm9tIFwiLi9ub2RlQW5kVG9rZW5zL3ZhcmlhYmxlXCI7XG5cbmNvbnN0IHR5cGVOb2RlUXVlcnkgPSBub2RlUXVlcnkoXCIvdmFyaWFibGVEZWNsYXJhdGlvbi90eXBlXCIpLFxuICAgICAgdmFyaWFibGVOb2RlUXVlcnkgPSBub2RlUXVlcnkoXCIvdmFyaWFibGVEZWNsYXJhdGlvbi92YXJpYWJsZVwiKSxcbiAgICAgIHRlcm1WYXJpYWJsZU5vZGVRdWVyeSA9IG5vZGVRdWVyeShcIi90ZXJtL3ZhcmlhYmxlXCIpO1xuXG5jbGFzcyBWYXJpYWJsZSB7XG4gIGNvbnN0cnVjdG9yKGNvbnRleHQsIHN0cmluZywgbm9kZSwgbmFtZSwgdHlwZSkge1xuICAgIHRoaXMuY29udGV4dCA9IGNvbnRleHQ7IC8vL1xuICAgIHRoaXMuc3RyaW5nID0gc3RyaW5nO1xuICAgIHRoaXMubm9kZSA9IG5vZGU7XG4gICAgdGhpcy5uYW1lID0gbmFtZTtcbiAgICB0aGlzLnR5cGUgPSB0eXBlO1xuICB9XG5cbiAgZ2V0TG9jYWxDb250ZXh0KCkge1xuICAgIHJldHVybiB0aGlzLmNvbnRleHQ7XG4gIH1cblxuICBnZXRTdHJpbmcoKSB7XG4gICAgcmV0dXJuIHRoaXMuc3RyaW5nO1xuICB9XG5cbiAgZ2V0Tm9kZSgpIHtcbiAgICByZXR1cm4gdGhpcy5ub2RlO1xuICB9XG5cbiAgZ2V0TmFtZSgpIHtcbiAgICByZXR1cm4gdGhpcy5uYW1lO1xuICB9XG5cbiAgZ2V0VHlwZSgpIHtcbiAgICByZXR1cm4gdGhpcy50eXBlO1xuICB9XG5cbiAgc2V0VHlwZSh0eXBlKSB7XG4gICAgdGhpcy50eXBlID0gdHlwZTtcbiAgfVxuXG4gIG1hdGNoVmFyaWFibGVOYW1lKHZhcmlhYmxlTmFtZSkge1xuICAgIGNvbnN0IHZhcmlhYmxlTmFtZU1hdGNoZXMgPSAodGhpcy5uYW1lID09PSB2YXJpYWJsZU5hbWUpO1xuXG4gICAgcmV0dXJuIHZhcmlhYmxlTmFtZU1hdGNoZXM7XG4gIH1cblxuICBtYXRjaFZhcmlhYmxlTm9kZSh2YXJpYWJsZU5vZGUpIHtcbiAgICBjb25zdCB2YXJpYWJsZU5vZGVNYXRjaGVzID0gdGhpcy5ub2RlLm1hdGNoKHZhcmlhYmxlTm9kZSk7XG5cbiAgICByZXR1cm4gdmFyaWFibGVOb2RlTWF0Y2hlcztcbiAgfVxuXG4gIHZlcmlmeShjb250ZXh0KSB7XG4gICAgbGV0IHZlcmlmaWVkO1xuXG4gICAgY29uc3QgdmFyaWFibGVTdHJpbmcgPSB0aGlzLnN0cmluZzsgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWZXJpZnlpbmcgdGhlICcke3ZhcmlhYmxlU3RyaW5nfScgdmFyaWFibGUuLi5gKTtcblxuICAgIGNvbnN0IHZhcmlhYmxlTm9kZSA9IHRoaXMubm9kZSwgLy8vXG4gICAgICAgICAgdmFyaWFibGVOYW1lID0gdmFyaWFibGVOYW1lRnJvbVZhcmlhYmxlTm9kZSh2YXJpYWJsZU5vZGUpLFxuICAgICAgICAgIHZhcmlhYmxlID0gY29udGV4dC5maW5kVmFyaWFibGVCeVZhcmlhYmxlTmFtZSh2YXJpYWJsZU5hbWUpO1xuXG4gICAgaWYgKHZhcmlhYmxlICE9PSBudWxsKSB7XG4gICAgICBjb25zdCB0eXBlID0gdmFyaWFibGUuZ2V0VHlwZSgpO1xuXG4gICAgICB0aGlzLnR5cGUgPSB0eXBlO1xuXG4gICAgICB2ZXJpZmllZCA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYFRoZSAnJHt2YXJpYWJsZVN0cmluZ30nIHZhcmlhYmxlIGlzIG5vdCBwcmVzZW50LmApO1xuICAgIH1cblxuICAgIGlmICh2ZXJpZmllZCkge1xuICAgICAgY29uc3QgdHlwZU5hbWUgPSB0aGlzLnR5cGUuZ2V0TmFtZSgpO1xuXG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52ZXJpZmllZCB0aGUgJyR7dmFyaWFibGVTdHJpbmd9OiR7dHlwZU5hbWV9JyB2YXJpYWJsZS5gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdmVyaWZpZWQ7XG4gIH1cblxuICB2ZXJpZnlUeXBlKGZpbGVDb250ZXh0KSB7XG4gICAgbGV0IHR5cGVWZXJpZmllZDtcblxuICAgIGlmICh0aGlzLnR5cGUgPT09IG9iamVjdFR5cGUpIHtcbiAgICAgIHR5cGVWZXJpZmllZCA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHR5cGVOYW1lID0gdGhpcy50eXBlLmdldE5hbWUoKTtcblxuICAgICAgZmlsZUNvbnRleHQudHJhY2UoYFZlcmlmeWluZyB0aGUgJyR7dHlwZU5hbWV9JyB0eXBlLi4uYCk7XG5cbiAgICAgIGNvbnN0IHR5cGUgPSBmaWxlQ29udGV4dC5maW5kVHlwZUJ5VHlwZU5hbWUodHlwZU5hbWUpO1xuXG4gICAgICBpZiAodHlwZSA9PT0gbnVsbCkge1xuICAgICAgICBmaWxlQ29udGV4dC5kZWJ1ZyhgVGhlICcke3R5cGVOYW1lfScgdHlwZSBpcyBtaXNzaW5nLmApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy50eXBlID0gdHlwZTsgLy8vXG5cbiAgICAgICAgdHlwZVZlcmlmaWVkID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVWZXJpZmllZCkge1xuICAgICAgICBmaWxlQ29udGV4dC5kZWJ1ZyhgLi4udmVyaWZpZWQgdGhlICcke3R5cGVOYW1lfScgdHlwZS5gKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdHlwZVZlcmlmaWVkO1xuICB9XG5cbiAgdmVyaWZ5V2hlbkRlY2xhcmVkKGZpbGVDb250ZXh0KSB7XG4gICAgbGV0IHZlcmlmaWVkQXRUb3BMZXZlbDtcblxuICAgIGNvbnN0IHZhcmlhYmxlU3RyaW5nID0gdGhpcy5zdHJpbmc7IC8vL1xuXG4gICAgZmlsZUNvbnRleHQudHJhY2UoYFZlcmlmeWluZyB0aGUgJyR7dmFyaWFibGVTdHJpbmd9JyB2YXJpYWJsZSB3aGVuIGRlY2xhcmVkLi4uYCk7XG5cbiAgICBjb25zdCB2YXJpYWJsZU5vZGUgPSB0aGlzLm5vZGUsIC8vL1xuICAgICAgICAgIHZhcmlhYmxlTmFtZSA9IHZhcmlhYmxlTmFtZUZyb21WYXJpYWJsZU5vZGUodmFyaWFibGVOb2RlKSxcbiAgICAgICAgICB2YXJpYWJsZVByZXNlbnQgPSBmaWxlQ29udGV4dC5pc1ZhcmlhYmxlUHJlc2VudEJ5VmFyaWFibGVOYW1lKHZhcmlhYmxlTmFtZSk7XG5cbiAgICBpZiAodmFyaWFibGVQcmVzZW50KSB7XG4gICAgICBmaWxlQ29udGV4dC5kZWJ1ZyhgVGhlICcke3ZhcmlhYmxlU3RyaW5nfScgdmFyaWFibGUgaXMgYWxyZWFkeSBwcmVzZW50LmApO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCB0eXBlVmVyaWZpZWQgPSB0aGlzLnZlcmlmeVR5cGUoZmlsZUNvbnRleHQpO1xuXG4gICAgICB2ZXJpZmllZEF0VG9wTGV2ZWwgPSB0eXBlVmVyaWZpZWQ7ICAvLy9cbiAgICB9XG5cbiAgICBpZiAodmVyaWZpZWRBdFRvcExldmVsKSB7XG4gICAgICBmaWxlQ29udGV4dC5kZWJ1ZyhgLi4udmVyaWZpZWQgdGhlICcke3ZhcmlhYmxlU3RyaW5nfScgdmFyaWFibGUgd2hlbiBkZWNsYXJlZC5gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdmVyaWZpZWRBdFRvcExldmVsO1xuICB9XG5cbiAgdW5pZnlUZXJtKHRlcm0sIHN1YnN0aXR1dGlvbnMsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIGNvbnRleHRzUmV2ZXJzZWQgPSBmYWxzZSkge1xuICAgIGxldCB0ZXJtVW5pZmllZCA9IGZhbHNlO1xuXG4gICAgbGV0IGNvbnRleHQgPSBjb250ZXh0c1JldmVyc2VkID9cbiAgICAgICAgICAgICAgICAgICAgZ2VuZXJhbENvbnRleHQgOlxuICAgICAgICAgICAgICAgICAgICAgIHNwZWNpZmljQ29udGV4dDtcblxuICAgIGNvbnN0IHRlcm1TdHJpbmcgPSB0ZXJtLmdldFN0cmluZygpLFxuICAgICAgICAgIHZhcmlhYmxlU3RyaW5nID0gdGhpcy5zdHJpbmc7IC8vL1xuXG4gICAgc3BlY2lmaWNDb250ZXh0LnRyYWNlKGBVbmlmeWluZyB0aGUgJyR7dGVybVN0cmluZ30nIHRlcm0gd2l0aCB0aGUgJyR7dmFyaWFibGVTdHJpbmd9JyB2YXJpYWJsZS4uLmApO1xuXG4gICAgY29uc3QgdGVybU5vZGUgPSB0ZXJtLmdldE5vZGUoKSxcbiAgICAgICAgICB2YXJpYWJsZU5hbWUgPSB0aGlzLm5hbWUsIC8vL1xuICAgICAgICAgIHN1YnN0aXR1dGlvbiA9IHN1YnN0aXR1dGlvbnMuZmluZFN1YnN0aXR1dGlvbkJ5VmFyaWFibGVOYW1lKHZhcmlhYmxlTmFtZSk7XG5cbiAgICBpZiAoc3Vic3RpdHV0aW9uICE9PSBudWxsKSB7XG4gICAgICBjb25zdCB0ZXJtTm9kZU1hdGNoZXMgPSBzdWJzdGl0dXRpb24ubWF0Y2hUZXJtTm9kZSh0ZXJtTm9kZSk7XG5cbiAgICAgIGlmICh0ZXJtTm9kZU1hdGNoZXMpIHtcbiAgICAgICAgdGVybVVuaWZpZWQgPSB0cnVlO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCB2YXJpYWJsZU5vZGUgPSB0aGlzLm5vZGUsICAvLy9cbiAgICAgICAgICAgIGdlbmVyYWxDb250ZXh0ID0gdGhpcy5jb250ZXh0LCAgLy8vXG4gICAgICAgICAgICB2YXJpYWJsZSA9IHZhcmlhYmxlRnJvbVZhcmlhYmxlTm9kZSh2YXJpYWJsZU5vZGUsIGdlbmVyYWxDb250ZXh0KSxcbiAgICAgICAgICAgIHRlcm1WYXJpYWJsZSA9IHRlcm1WYXJpYWJsZUZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgZ2VuZXJhbENvbnRleHQpO1xuXG4gICAgICBpZiAoKHZhcmlhYmxlICE9PSBudWxsKSAmJiAodmFyaWFibGUgPT09IHRlcm1WYXJpYWJsZSkpIHtcbiAgICAgICAgdGVybVVuaWZpZWQgPSB0cnVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgdmFyaWFibGUgPSB0aGlzLCAgLy8vXG4gICAgICAgICAgICAgIHRlcm1TdWJzdGl0dXRpb24gPSBUZXJtU3Vic3RpdHV0aW9uLmZyb21UZXJuQW5kVmFyaWFibGUodGVybSwgdmFyaWFibGUsIGNvbnRleHQpLFxuICAgICAgICAgICAgICBzdWJzdGl0dXRpb24gPSB0ZXJtU3Vic3RpdHV0aW9uOyAgLy8vXG5cbiAgICAgICAgY29udGV4dCA9IHNwZWNpZmljQ29udGV4dDsgIC8vL1xuXG4gICAgICAgIHN1YnN0aXR1dGlvbnMuYWRkU3Vic3RpdHV0aW9uKHN1YnN0aXR1dGlvbiwgY29udGV4dCk7XG5cbiAgICAgICAgdGVybVVuaWZpZWQgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0ZXJtVW5pZmllZCkge1xuICAgICAgc3BlY2lmaWNDb250ZXh0LnRyYWNlKGAuLi51bmlmaWVkIHRoZSAnJHt0ZXJtU3RyaW5nfScgdGVybSB3aXRoIHRoZSAnJHt2YXJpYWJsZVN0cmluZ30nIHZhcmlhYmxlLmApO1xuICAgIH1cblxuICAgIHJldHVybiB0ZXJtVW5pZmllZDtcbiAgfVxuXG4gIHRvSlNPTigpIHtcbiAgICBjb25zdCB0eXBlSlNPTiA9IHR5cGVUb1R5cGVKU09OKHRoaXMudHlwZSksXG4gICAgICAgICAgc3RyaW5nID0gdGhpcy5zdHJpbmcsXG4gICAgICAgICAgdHlwZSA9IHR5cGVKU09OLCAgLy8vXG4gICAgICAgICAganNvbiA9IHtcbiAgICAgICAgICAgIHR5cGUsXG4gICAgICAgICAgICBzdHJpbmdcbiAgICAgICAgICB9O1xuXG4gICAgcmV0dXJuIGpzb247XG4gIH1cblxuICBzdGF0aWMgZnJvbUpTT04oanNvbiwgZmlsZUNvbnRleHQpIHtcbiAgICBjb25zdCB7IHN0cmluZyB9ID0ganNvbixcbiAgICAgICAgICBsb2NhbENvbnRleHQgPSBMb2NhbENvbnRleHQuZnJvbUZpbGVDb250ZXh0KGZpbGVDb250ZXh0KSxcbiAgICAgICAgICBjb250ZXh0ID0gbG9jYWxDb250ZXh0LCAvLy9cbiAgICAgICAgICB2YXJpYWJsZVN0cmluZyA9IHN0cmluZywgIC8vL1xuICAgICAgICAgIHZhcmlhYmxlTm9kZSA9IHZhcmlhYmxlTm9kZUZyb21WYXJpYWJsZVN0cmluZyh2YXJpYWJsZVN0cmluZywgY29udGV4dCksXG4gICAgICAgICAgdmFyaWFibGVOYW1lID0gdmFyaWFibGVOYW1lRnJvbVZhcmlhYmxlTm9kZSh2YXJpYWJsZU5vZGUpLFxuICAgICAgICAgIG5vZGUgPSB2YXJpYWJsZU5vZGUsXG4gICAgICAgICAgbmFtZSA9IHZhcmlhYmxlTmFtZSwgIC8vL1xuICAgICAgICAgIHR5cGUgPSB0eXBlRnJvbUpTT04oanNvbiwgZmlsZUNvbnRleHQpLFxuICAgICAgICAgIHZhcmlhYmxlID0gbmV3IFZhcmlhYmxlKGNvbnRleHQsIHN0cmluZywgbm9kZSwgbmFtZSwgdHlwZSk7XG5cbiAgICByZXR1cm4gdmFyaWFibGU7XG4gIH1cblxuICBzdGF0aWMgZnJvbVRlcm1Ob2RlKHRlcm1Ob2RlLCBjb250ZXh0KSB7XG4gICAgbGV0IHZhcmlhYmxlID0gbnVsbDtcblxuICAgIGNvbnN0IHRlcm1WYXJpYWJsZU5vZGUgPSB0ZXJtVmFyaWFibGVOb2RlUXVlcnkodGVybU5vZGUpO1xuXG4gICAgaWYgKHRlcm1WYXJpYWJsZU5vZGUgIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IHZhcmlhYmxlTm9kZSA9IHRlcm1WYXJpYWJsZU5vZGUsICAvLy9cbiAgICAgICAgICAgIHZhcmlhYmxlTmFtZSA9IHZhcmlhYmxlTmFtZUZyb21WYXJpYWJsZU5vZGUodmFyaWFibGVOb2RlKSxcbiAgICAgICAgICAgIG5vZGUgPSB2YXJpYWJsZU5vZGUsICAvLy9cbiAgICAgICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICAgICAgbmFtZSA9IHZhcmlhYmxlTmFtZSwgIC8vL1xuICAgICAgICAgICAgdHlwZSA9IG51bGw7XG5cbiAgICAgIHZhcmlhYmxlID0gbmV3IFZhcmlhYmxlKGNvbnRleHQsIHN0cmluZywgbm9kZSwgbmFtZSwgdHlwZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhcmlhYmxlO1xuICB9XG5cbiAgc3RhdGljIGZyb21WYXJpYWJsZU5vZGUodmFyaWFibGVOb2RlLCBjb250ZXh0KSB7XG4gICAgbGV0IHZhcmlhYmxlID0gbnVsbDtcblxuICAgIGlmICh2YXJpYWJsZU5vZGUgIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IG5vZGUgPSB2YXJpYWJsZU5vZGUsICAvLy9cbiAgICAgICAgICAgIHZhcmlhYmxlTmFtZSA9IHZhcmlhYmxlTmFtZUZyb21WYXJpYWJsZU5vZGUodmFyaWFibGVOb2RlKSxcbiAgICAgICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICAgICAgbmFtZSA9IHZhcmlhYmxlTmFtZSwgIC8vL1xuICAgICAgICAgICAgdHlwZSA9IG51bGw7XG5cbiAgICAgIHZhcmlhYmxlID0gbmV3IFZhcmlhYmxlKGNvbnRleHQsIHN0cmluZywgbm9kZSwgbmFtZSwgdHlwZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhcmlhYmxlO1xuICB9XG5cbiAgc3RhdGljIGZyb21WYXJpYWJsZU5vZGVBbmRUeXBlKHZhcmlhYmxlTm9kZSwgdHlwZSwgY29udGV4dCkge1xuICAgIGxldCB2YXJpYWJsZSA9IG51bGw7XG5cbiAgICBpZiAodmFyaWFibGVOb2RlICE9PSBudWxsKSB7XG4gICAgICBjb25zdCBub2RlID0gdmFyaWFibGVOb2RlLCAgLy8vXG4gICAgICAgICAgICB2YXJpYWJsZU5hbWUgPSB2YXJpYWJsZU5hbWVGcm9tVmFyaWFibGVOb2RlKHZhcmlhYmxlTm9kZSksXG4gICAgICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgICAgIG5hbWUgPSB2YXJpYWJsZU5hbWU7ICAvLy9cblxuICAgICAgdmFyaWFibGUgPSBuZXcgVmFyaWFibGUoY29udGV4dCwgc3RyaW5nLCBub2RlLCBuYW1lLCB0eXBlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdmFyaWFibGU7XG4gIH1cblxuICBzdGF0aWMgZnJvbVZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlKHZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlLCBmaWxlQ29udGV4dCkge1xuICAgIGNvbnN0IHsgVHlwZSB9ID0gc2hpbSxcbiAgICAgICAgICB0eXBlTm9kZSA9IHR5cGVOb2RlUXVlcnkodmFyaWFibGVEZWNsYXJhdGlvbk5vZGUpLFxuICAgICAgICAgIHZhcmlhYmxlTm9kZSA9IHZhcmlhYmxlTm9kZVF1ZXJ5KHZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlKSxcbiAgICAgICAgICB2YXJpYWJsZU5hbWUgPSB2YXJpYWJsZU5hbWVGcm9tVmFyaWFibGVOb2RlKHZhcmlhYmxlTm9kZSksXG4gICAgICAgICAgY29udGV4dCA9IExvY2FsQ29udGV4dC5mcm9tRmlsZUNvbnRleHQoZmlsZUNvbnRleHQpLFxuICAgICAgICAgIHZhcmlhYmxlU3RyaW5nID0gZmlsZUNvbnRleHQubm9kZUFzU3RyaW5nKHZhcmlhYmxlTm9kZSksXG4gICAgICAgICAgc3RyaW5nID0gdmFyaWFibGVTdHJpbmcsICAvLy9cbiAgICAgICAgICBub2RlID0gdmFyaWFibGVOb2RlLCAgLy8vXG4gICAgICAgICAgbmFtZSA9IHZhcmlhYmxlTmFtZSwgIC8vL1xuICAgICAgICAgIHR5cGUgPSBUeXBlLmZyb21UeXBlTm9kZSh0eXBlTm9kZSwgY29udGV4dCksXG4gICAgICAgICAgdmFyaWFibGUgPSBuZXcgVmFyaWFibGUoY29udGV4dCwgc3RyaW5nLCBub2RlLCBuYW1lLCB0eXBlKTtcblxuICAgIHJldHVybiB2YXJpYWJsZTtcbiAgfVxufVxuXG5PYmplY3QuYXNzaWduKHNoaW0sIHtcbiAgVmFyaWFibGVcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBWYXJpYWJsZTtcblxuZnVuY3Rpb24gdmFyaWFibGVGcm9tVmFyaWFibGVOb2RlKHZhcmlhYmxlTm9kZSwgZ2VuZXJhbENvbnRleHQpIHtcbiAgY29uc3QgdmFyaWFibGVOYW1lID0gdmFyaWFibGVOYW1lRnJvbVZhcmlhYmxlTm9kZSh2YXJpYWJsZU5vZGUpLFxuICAgICAgICBjb250ZXh0ID0gZ2VuZXJhbENvbnRleHQsIC8vL1xuICAgICAgICB2YXJpYWJsZSA9IGNvbnRleHQuZmluZFZhcmlhYmxlQnlWYXJpYWJsZU5hbWUodmFyaWFibGVOYW1lKTtcblxuICByZXR1cm4gdmFyaWFibGU7XG59XG5cbmZ1bmN0aW9uIHRlcm1WYXJpYWJsZUZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgZ2VuZXJhbENvbnRleHQpIHtcbiAgbGV0IHRlcm1WYXJpYWJsZSA9IG51bGw7XG5cbiAgY29uc3QgdGVybVZhcmlhYmxlTm9kZSA9IHRlcm1WYXJpYWJsZU5vZGVRdWVyeSh0ZXJtTm9kZSk7XG5cbiAgaWYgKHRlcm1WYXJpYWJsZU5vZGUgIT09IG51bGwpIHtcbiAgICBjb25zdCB0ZXJtVmFyaWFibGVOYW1lID0gdmFyaWFibGVOYW1lRnJvbVZhcmlhYmxlTm9kZSh0ZXJtVmFyaWFibGVOb2RlKSxcbiAgICAgICAgICBjb250ZXh0ID0gZ2VuZXJhbENvbnRleHQ7IC8vL1xuXG4gICAgdGVybVZhcmlhYmxlID0gY29udGV4dC5maW5kVmFyaWFibGVCeVZhcmlhYmxlTmFtZSh0ZXJtVmFyaWFibGVOYW1lKTtcbiAgfVxuXG4gIHJldHVybiB0ZXJtVmFyaWFibGU7XG59XG4iXSwibmFtZXMiOlsidHlwZU5vZGVRdWVyeSIsIm5vZGVRdWVyeSIsInZhcmlhYmxlTm9kZVF1ZXJ5IiwidGVybVZhcmlhYmxlTm9kZVF1ZXJ5IiwiVmFyaWFibGUiLCJjb250ZXh0Iiwic3RyaW5nIiwibm9kZSIsIm5hbWUiLCJ0eXBlIiwiZ2V0TG9jYWxDb250ZXh0IiwiZ2V0U3RyaW5nIiwiZ2V0Tm9kZSIsImdldE5hbWUiLCJnZXRUeXBlIiwic2V0VHlwZSIsIm1hdGNoVmFyaWFibGVOYW1lIiwidmFyaWFibGVOYW1lIiwidmFyaWFibGVOYW1lTWF0Y2hlcyIsIm1hdGNoVmFyaWFibGVOb2RlIiwidmFyaWFibGVOb2RlIiwidmFyaWFibGVOb2RlTWF0Y2hlcyIsIm1hdGNoIiwidmVyaWZ5IiwidmVyaWZpZWQiLCJ2YXJpYWJsZVN0cmluZyIsInRyYWNlIiwidmFyaWFibGVOYW1lRnJvbVZhcmlhYmxlTm9kZSIsInZhcmlhYmxlIiwiZmluZFZhcmlhYmxlQnlWYXJpYWJsZU5hbWUiLCJkZWJ1ZyIsInR5cGVOYW1lIiwidmVyaWZ5VHlwZSIsImZpbGVDb250ZXh0IiwidHlwZVZlcmlmaWVkIiwib2JqZWN0VHlwZSIsImZpbmRUeXBlQnlUeXBlTmFtZSIsInZlcmlmeVdoZW5EZWNsYXJlZCIsInZlcmlmaWVkQXRUb3BMZXZlbCIsInZhcmlhYmxlUHJlc2VudCIsImlzVmFyaWFibGVQcmVzZW50QnlWYXJpYWJsZU5hbWUiLCJ1bmlmeVRlcm0iLCJ0ZXJtIiwic3Vic3RpdHV0aW9ucyIsImdlbmVyYWxDb250ZXh0Iiwic3BlY2lmaWNDb250ZXh0IiwiY29udGV4dHNSZXZlcnNlZCIsInRlcm1VbmlmaWVkIiwidGVybVN0cmluZyIsInRlcm1Ob2RlIiwic3Vic3RpdHV0aW9uIiwiZmluZFN1YnN0aXR1dGlvbkJ5VmFyaWFibGVOYW1lIiwidGVybU5vZGVNYXRjaGVzIiwibWF0Y2hUZXJtTm9kZSIsInZhcmlhYmxlRnJvbVZhcmlhYmxlTm9kZSIsInRlcm1WYXJpYWJsZSIsInRlcm1WYXJpYWJsZUZyb21UZXJtTm9kZSIsInRlcm1TdWJzdGl0dXRpb24iLCJUZXJtU3Vic3RpdHV0aW9uIiwiZnJvbVRlcm5BbmRWYXJpYWJsZSIsImFkZFN1YnN0aXR1dGlvbiIsInRvSlNPTiIsInR5cGVKU09OIiwidHlwZVRvVHlwZUpTT04iLCJqc29uIiwiZnJvbUpTT04iLCJsb2NhbENvbnRleHQiLCJMb2NhbENvbnRleHQiLCJmcm9tRmlsZUNvbnRleHQiLCJ2YXJpYWJsZU5vZGVGcm9tVmFyaWFibGVTdHJpbmciLCJ0eXBlRnJvbUpTT04iLCJmcm9tVGVybU5vZGUiLCJ0ZXJtVmFyaWFibGVOb2RlIiwibm9kZUFzU3RyaW5nIiwiZnJvbVZhcmlhYmxlTm9kZSIsImZyb21WYXJpYWJsZU5vZGVBbmRUeXBlIiwiZnJvbVZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlIiwidmFyaWFibGVEZWNsYXJhdGlvbk5vZGUiLCJUeXBlIiwic2hpbSIsInR5cGVOb2RlIiwiZnJvbVR5cGVOb2RlIiwiT2JqZWN0IiwiYXNzaWduIiwidGVybVZhcmlhYmxlTmFtZSJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7K0JBcVNBOzs7ZUFBQTs7OzJEQW5TaUI7NERBQ1E7MkRBQ0k7cUJBRUg7b0JBQ0M7b0JBQ2lCO29CQUNDO3dCQUNFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRS9DLElBQU1BLGdCQUFnQkMsSUFBQUEsZ0JBQVMsRUFBQyw4QkFDMUJDLG9CQUFvQkQsSUFBQUEsZ0JBQVMsRUFBQyxrQ0FDOUJFLHdCQUF3QkYsSUFBQUEsZ0JBQVMsRUFBQztBQUV4QyxJQUFBLEFBQU1HLHlCQUFOO2FBQU1BLFNBQ1FDLE9BQU8sRUFBRUMsTUFBTSxFQUFFQyxJQUFJLEVBQUVDLElBQUksRUFBRUMsSUFBSTtnQ0FEekNMO1FBRUYsSUFBSSxDQUFDQyxPQUFPLEdBQUdBLFNBQVMsR0FBRztRQUMzQixJQUFJLENBQUNDLE1BQU0sR0FBR0E7UUFDZCxJQUFJLENBQUNDLElBQUksR0FBR0E7UUFDWixJQUFJLENBQUNDLElBQUksR0FBR0E7UUFDWixJQUFJLENBQUNDLElBQUksR0FBR0E7O2tCQU5WTDs7WUFTSk0sS0FBQUE7bUJBQUFBLFNBQUFBO2dCQUNFLE9BQU8sSUFBSSxDQUFDTCxPQUFPO1lBQ3JCOzs7WUFFQU0sS0FBQUE7bUJBQUFBLFNBQUFBO2dCQUNFLE9BQU8sSUFBSSxDQUFDTCxNQUFNO1lBQ3BCOzs7WUFFQU0sS0FBQUE7bUJBQUFBLFNBQUFBO2dCQUNFLE9BQU8sSUFBSSxDQUFDTCxJQUFJO1lBQ2xCOzs7WUFFQU0sS0FBQUE7bUJBQUFBLFNBQUFBO2dCQUNFLE9BQU8sSUFBSSxDQUFDTCxJQUFJO1lBQ2xCOzs7WUFFQU0sS0FBQUE7bUJBQUFBLFNBQUFBO2dCQUNFLE9BQU8sSUFBSSxDQUFDTCxJQUFJO1lBQ2xCOzs7WUFFQU0sS0FBQUE7bUJBQUFBLFNBQUFBLFFBQVFOLElBQUk7Z0JBQ1YsSUFBSSxDQUFDQSxJQUFJLEdBQUdBO1lBQ2Q7OztZQUVBTyxLQUFBQTttQkFBQUEsU0FBQUEsa0JBQWtCQyxZQUFZO2dCQUM1QixJQUFNQyxzQkFBdUIsSUFBSSxDQUFDVixJQUFJLEtBQUtTO2dCQUUzQyxPQUFPQztZQUNUOzs7WUFFQUMsS0FBQUE7bUJBQUFBLFNBQUFBLGtCQUFrQkMsWUFBWTtnQkFDNUIsSUFBTUMsc0JBQXNCLElBQUksQ0FBQ2QsSUFBSSxDQUFDZSxLQUFLLENBQUNGO2dCQUU1QyxPQUFPQztZQUNUOzs7WUFFQUUsS0FBQUE7bUJBQUFBLFNBQUFBLE9BQU9sQixPQUFPO2dCQUNaLElBQUltQjtnQkFFSixJQUFNQyxpQkFBaUIsSUFBSSxDQUFDbkIsTUFBTSxFQUFFLEdBQUc7Z0JBRXZDRCxRQUFRcUIsS0FBSyxDQUFDLEFBQUMsa0JBQWdDLE9BQWZELGdCQUFlO2dCQUUvQyxJQUFNTCxlQUFlLElBQUksQ0FBQ2IsSUFBSSxFQUN4QlUsZUFBZVUsSUFBQUEsa0NBQTRCLEVBQUNQLGVBQzVDUSxXQUFXdkIsUUFBUXdCLDBCQUEwQixDQUFDWjtnQkFFcEQsSUFBSVcsYUFBYSxNQUFNO29CQUNyQixJQUFNbkIsT0FBT21CLFNBQVNkLE9BQU87b0JBRTdCLElBQUksQ0FBQ0wsSUFBSSxHQUFHQTtvQkFFWmUsV0FBVztnQkFDYixPQUFPO29CQUNMbkIsUUFBUXlCLEtBQUssQ0FBQyxBQUFDLFFBQXNCLE9BQWZMLGdCQUFlO2dCQUN2QztnQkFFQSxJQUFJRCxVQUFVO29CQUNaLElBQU1PLFdBQVcsSUFBSSxDQUFDdEIsSUFBSSxDQUFDSSxPQUFPO29CQUVsQ1IsUUFBUXlCLEtBQUssQ0FBQyxBQUFDLG9CQUFxQ0MsT0FBbEJOLGdCQUFlLEtBQVksT0FBVE0sVUFBUztnQkFDL0Q7Z0JBRUEsT0FBT1A7WUFDVDs7O1lBRUFRLEtBQUFBO21CQUFBQSxTQUFBQSxXQUFXQyxXQUFXO2dCQUNwQixJQUFJQztnQkFFSixJQUFJLElBQUksQ0FBQ3pCLElBQUksS0FBSzBCLGdCQUFVLEVBQUU7b0JBQzVCRCxlQUFlO2dCQUNqQixPQUFPO29CQUNMLElBQU1ILFdBQVcsSUFBSSxDQUFDdEIsSUFBSSxDQUFDSSxPQUFPO29CQUVsQ29CLFlBQVlQLEtBQUssQ0FBQyxBQUFDLGtCQUEwQixPQUFUSyxVQUFTO29CQUU3QyxJQUFNdEIsT0FBT3dCLFlBQVlHLGtCQUFrQixDQUFDTDtvQkFFNUMsSUFBSXRCLFNBQVMsTUFBTTt3QkFDakJ3QixZQUFZSCxLQUFLLENBQUMsQUFBQyxRQUFnQixPQUFUQyxVQUFTO29CQUNyQyxPQUFPO3dCQUNMLElBQUksQ0FBQ3RCLElBQUksR0FBR0EsTUFBTSxHQUFHO3dCQUVyQnlCLGVBQWU7b0JBQ2pCO29CQUVBLElBQUlBLGNBQWM7d0JBQ2hCRCxZQUFZSCxLQUFLLENBQUMsQUFBQyxvQkFBNEIsT0FBVEMsVUFBUztvQkFDakQ7Z0JBQ0Y7Z0JBRUEsT0FBT0c7WUFDVDs7O1lBRUFHLEtBQUFBO21CQUFBQSxTQUFBQSxtQkFBbUJKLFdBQVc7Z0JBQzVCLElBQUlLO2dCQUVKLElBQU1iLGlCQUFpQixJQUFJLENBQUNuQixNQUFNLEVBQUUsR0FBRztnQkFFdkMyQixZQUFZUCxLQUFLLENBQUMsQUFBQyxrQkFBZ0MsT0FBZkQsZ0JBQWU7Z0JBRW5ELElBQU1MLGVBQWUsSUFBSSxDQUFDYixJQUFJLEVBQ3hCVSxlQUFlVSxJQUFBQSxrQ0FBNEIsRUFBQ1AsZUFDNUNtQixrQkFBa0JOLFlBQVlPLCtCQUErQixDQUFDdkI7Z0JBRXBFLElBQUlzQixpQkFBaUI7b0JBQ25CTixZQUFZSCxLQUFLLENBQUMsQUFBQyxRQUFzQixPQUFmTCxnQkFBZTtnQkFDM0MsT0FBTztvQkFDTCxJQUFNUyxlQUFlLElBQUksQ0FBQ0YsVUFBVSxDQUFDQztvQkFFckNLLHFCQUFxQkosY0FBZSxHQUFHO2dCQUN6QztnQkFFQSxJQUFJSSxvQkFBb0I7b0JBQ3RCTCxZQUFZSCxLQUFLLENBQUMsQUFBQyxvQkFBa0MsT0FBZkwsZ0JBQWU7Z0JBQ3ZEO2dCQUVBLE9BQU9hO1lBQ1Q7OztZQUVBRyxLQUFBQTttQkFBQUEsU0FBQUEsVUFBVUMsSUFBSSxFQUFFQyxhQUFhLEVBQUVDLGNBQWMsRUFBRUMsZUFBZTtvQkFBRUMsbUJBQUFBLGlFQUFtQjtnQkFDakYsSUFBSUMsY0FBYztnQkFFbEIsSUFBSTFDLFVBQVV5QyxtQkFDRUYsaUJBQ0VDO2dCQUVsQixJQUFNRyxhQUFhTixLQUFLL0IsU0FBUyxJQUMzQmMsaUJBQWlCLElBQUksQ0FBQ25CLE1BQU0sRUFBRSxHQUFHO2dCQUV2Q3VDLGdCQUFnQm5CLEtBQUssQ0FBQyxBQUFDLGlCQUE4Q0QsT0FBOUJ1QixZQUFXLHFCQUFrQyxPQUFmdkIsZ0JBQWU7Z0JBRXBGLElBQU13QixXQUFXUCxLQUFLOUIsT0FBTyxJQUN2QkssZUFBZSxJQUFJLENBQUNULElBQUksRUFDeEIwQyxlQUFlUCxjQUFjUSw4QkFBOEIsQ0FBQ2xDO2dCQUVsRSxJQUFJaUMsaUJBQWlCLE1BQU07b0JBQ3pCLElBQU1FLGtCQUFrQkYsYUFBYUcsYUFBYSxDQUFDSjtvQkFFbkQsSUFBSUcsaUJBQWlCO3dCQUNuQkwsY0FBYztvQkFDaEI7Z0JBQ0YsT0FBTztvQkFDTCxJQUFNM0IsZUFBZSxJQUFJLENBQUNiLElBQUksRUFDeEJxQyxtQkFBaUIsSUFBSSxDQUFDdkMsT0FBTyxFQUM3QnVCLFdBQVcwQix5QkFBeUJsQyxjQUFjd0IsbUJBQ2xEVyxlQUFlQyx5QkFBeUJQLFVBQVVMO29CQUV4RCxJQUFJLEFBQUNoQixhQUFhLFFBQVVBLGFBQWEyQixjQUFlO3dCQUN0RFIsY0FBYztvQkFDaEIsT0FBTzt3QkFDTCxJQUFNbkIsWUFBVyxJQUFJLEVBQ2Y2QixtQkFBbUJDLGFBQWdCLENBQUNDLG1CQUFtQixDQUFDakIsTUFBTWQsV0FBVXZCLFVBQ3hFNkMsZ0JBQWVPLGtCQUFtQixHQUFHO3dCQUUzQ3BELFVBQVV3QyxpQkFBa0IsR0FBRzt3QkFFL0JGLGNBQWNpQixlQUFlLENBQUNWLGVBQWM3Qzt3QkFFNUMwQyxjQUFjO29CQUNoQjtnQkFDRjtnQkFFQSxJQUFJQSxhQUFhO29CQUNmRixnQkFBZ0JuQixLQUFLLENBQUMsQUFBQyxtQkFBZ0RELE9BQTlCdUIsWUFBVyxxQkFBa0MsT0FBZnZCLGdCQUFlO2dCQUN4RjtnQkFFQSxPQUFPc0I7WUFDVDs7O1lBRUFjLEtBQUFBO21CQUFBQSxTQUFBQTtnQkFDRSxJQUFNQyxXQUFXQyxJQUFBQSxvQkFBYyxFQUFDLElBQUksQ0FBQ3RELElBQUksR0FDbkNILFNBQVMsSUFBSSxDQUFDQSxNQUFNLEVBQ3BCRyxPQUFPcUQsVUFDUEUsT0FBTztvQkFDTHZELE1BQUFBO29CQUNBSCxRQUFBQTtnQkFDRjtnQkFFTixPQUFPMEQ7WUFDVDs7OztZQUVPQyxLQUFBQTttQkFBUCxTQUFPQSxTQUFTRCxJQUFJLEVBQUUvQixXQUFXO2dCQUMvQixJQUFNLEFBQUUzQixTQUFXMEQsS0FBWDFELFFBQ0Y0RCxlQUFlQyxjQUFZLENBQUNDLGVBQWUsQ0FBQ25DLGNBQzVDNUIsVUFBVTZELGNBQ1Z6QyxpQkFBaUJuQixRQUNqQmMsZUFBZWlELElBQUFBLHdDQUE4QixFQUFDNUMsZ0JBQWdCcEIsVUFDOURZLGVBQWVVLElBQUFBLGtDQUE0QixFQUFDUCxlQUM1Q2IsT0FBT2EsY0FDUFosT0FBT1MsY0FDUFIsT0FBTzZELElBQUFBLGtCQUFZLEVBQUNOLE1BQU0vQixjQUMxQkwsV0FBVyxJQXpNZnhCLFNBeU00QkMsU0FBU0MsUUFBUUMsTUFBTUMsTUFBTUM7Z0JBRTNELE9BQU9tQjtZQUNUOzs7WUFFTzJDLEtBQUFBO21CQUFQLFNBQU9BLGFBQWF0QixRQUFRLEVBQUU1QyxPQUFPO2dCQUNuQyxJQUFJdUIsV0FBVztnQkFFZixJQUFNNEMsbUJBQW1CckUsc0JBQXNCOEM7Z0JBRS9DLElBQUl1QixxQkFBcUIsTUFBTTtvQkFDN0IsSUFBTXBELGVBQWVvRCxrQkFDZnZELGVBQWVVLElBQUFBLGtDQUE0QixFQUFDUCxlQUM1Q2IsT0FBT2EsY0FDUGQsU0FBU0QsUUFBUW9FLFlBQVksQ0FBQ2xFLE9BQzlCQyxPQUFPUyxjQUNQUixPQUFPO29CQUVibUIsV0FBVyxJQTNOWHhCLFNBMk53QkMsU0FBU0MsUUFBUUMsTUFBTUMsTUFBTUM7Z0JBQ3ZEO2dCQUVBLE9BQU9tQjtZQUNUOzs7WUFFTzhDLEtBQUFBO21CQUFQLFNBQU9BLGlCQUFpQnRELFlBQVksRUFBRWYsT0FBTztnQkFDM0MsSUFBSXVCLFdBQVc7Z0JBRWYsSUFBSVIsaUJBQWlCLE1BQU07b0JBQ3pCLElBQU1iLE9BQU9hLGNBQ1BILGVBQWVVLElBQUFBLGtDQUE0QixFQUFDUCxlQUM1Q2QsU0FBU0QsUUFBUW9FLFlBQVksQ0FBQ2xFLE9BQzlCQyxPQUFPUyxjQUNQUixPQUFPO29CQUVibUIsV0FBVyxJQTNPWHhCLFNBMk93QkMsU0FBU0MsUUFBUUMsTUFBTUMsTUFBTUM7Z0JBQ3ZEO2dCQUVBLE9BQU9tQjtZQUNUOzs7WUFFTytDLEtBQUFBO21CQUFQLFNBQU9BLHdCQUF3QnZELFlBQVksRUFBRVgsSUFBSSxFQUFFSixPQUFPO2dCQUN4RCxJQUFJdUIsV0FBVztnQkFFZixJQUFJUixpQkFBaUIsTUFBTTtvQkFDekIsSUFBTWIsT0FBT2EsY0FDUEgsZUFBZVUsSUFBQUEsa0NBQTRCLEVBQUNQLGVBQzVDZCxTQUFTRCxRQUFRb0UsWUFBWSxDQUFDbEUsT0FDOUJDLE9BQU9TLGNBQWUsR0FBRztvQkFFL0JXLFdBQVcsSUExUFh4QixTQTBQd0JDLFNBQVNDLFFBQVFDLE1BQU1DLE1BQU1DO2dCQUN2RDtnQkFFQSxPQUFPbUI7WUFDVDs7O1lBRU9nRCxLQUFBQTttQkFBUCxTQUFPQSw0QkFBNEJDLHVCQUF1QixFQUFFNUMsV0FBVztnQkFDckUsSUFBTSxBQUFFNkMsT0FBU0MsYUFBSSxDQUFiRCxNQUNGRSxXQUFXaEYsY0FBYzZFLDBCQUN6QnpELGVBQWVsQixrQkFBa0IyRSwwQkFDakM1RCxlQUFlVSxJQUFBQSxrQ0FBNEIsRUFBQ1AsZUFDNUNmLFVBQVU4RCxjQUFZLENBQUNDLGVBQWUsQ0FBQ25DLGNBQ3ZDUixpQkFBaUJRLFlBQVl3QyxZQUFZLENBQUNyRCxlQUMxQ2QsU0FBU21CLGdCQUNUbEIsT0FBT2EsY0FDUFosT0FBT1MsY0FDUFIsT0FBT3FFLEtBQUtHLFlBQVksQ0FBQ0QsVUFBVTNFLFVBQ25DdUIsV0FBVyxJQTNRZnhCLFNBMlE0QkMsU0FBU0MsUUFBUUMsTUFBTUMsTUFBTUM7Z0JBRTNELE9BQU9tQjtZQUNUOzs7V0E5UUl4Qjs7QUFpUk44RSxPQUFPQyxNQUFNLENBQUNKLGFBQUksRUFBRTtJQUNsQjNFLFVBQUFBO0FBQ0Y7SUFFQSxXQUFlQTtBQUVmLFNBQVNrRCx5QkFBeUJsQyxZQUFZLEVBQUV3QixjQUFjO0lBQzVELElBQU0zQixlQUFlVSxJQUFBQSxrQ0FBNEIsRUFBQ1AsZUFDNUNmLFVBQVV1QyxnQkFDVmhCLFdBQVd2QixRQUFRd0IsMEJBQTBCLENBQUNaO0lBRXBELE9BQU9XO0FBQ1Q7QUFFQSxTQUFTNEIseUJBQXlCUCxRQUFRLEVBQUVMLGNBQWM7SUFDeEQsSUFBSVcsZUFBZTtJQUVuQixJQUFNaUIsbUJBQW1CckUsc0JBQXNCOEM7SUFFL0MsSUFBSXVCLHFCQUFxQixNQUFNO1FBQzdCLElBQU1ZLG1CQUFtQnpELElBQUFBLGtDQUE0QixFQUFDNkMsbUJBQ2hEbkUsVUFBVXVDLGdCQUFnQixHQUFHO1FBRW5DVyxlQUFlbEQsUUFBUXdCLDBCQUEwQixDQUFDdUQ7SUFDcEQ7SUFFQSxPQUFPN0I7QUFDVCJ9
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "occam-verify-cli",
3
3
  "author": "James Smith",
4
- "version": "0.0.1094",
4
+ "version": "0.0.1096",
5
5
  "license": "MIT, Anti-996",
6
6
  "homepage": "https://github.com/djalbat/occam-verify-cli",
7
7
  "description": "Occam's Verifier",
@@ -67,10 +67,6 @@ export default class ContainedAssertion {
67
67
 
68
68
  context.trace(`Verifying the '${containedAssertionString}' contained assertion...`);
69
69
 
70
- stated = true; ///
71
-
72
- assignments = null; ///
73
-
74
70
  let termVerified = false,
75
71
  frameVerified = false,
76
72
  statementVerified = false;
@@ -84,11 +80,11 @@ export default class ContainedAssertion {
84
80
  }
85
81
 
86
82
  if (this.frame !== null) {
87
- frameVerified = this.frame.verify(assignments, stated, context);
83
+ frameVerified = this.verifyFrame(this.frame, assignments, stated, context);
88
84
  }
89
85
 
90
86
  if (this.statement !== null) {
91
- statementVerified = this.statement.verify(assignments, stated, context);
87
+ statementVerified = this.verifyStatement(this.statement, assignments, stated, context);
92
88
  }
93
89
 
94
90
  if (termVerified || frameVerified || statementVerified) {
@@ -113,6 +109,26 @@ export default class ContainedAssertion {
113
109
  return verified;
114
110
  }
115
111
 
112
+ verifyFrame(frame, assignments, stated, context) {
113
+ stated = true; ///
114
+
115
+ assignments = null; ///
116
+
117
+ const frameVerified = frame.verify(assignments, stated, context);
118
+
119
+ return frameVerified;
120
+ }
121
+
122
+ verifyStatement(statment, assignments, stated, context) {
123
+ stated = true; ///
124
+
125
+ assignments = null; ///
126
+
127
+ const statmentVerified = statment.verify(assignments, stated, context);
128
+
129
+ return statmentVerified;
130
+ }
131
+
116
132
  verifyWhenStated(assignments, context) {
117
133
  let verifiedWhenStated;
118
134
 
@@ -66,10 +66,6 @@ export default class DefinedAssertion {
66
66
 
67
67
  context.trace(`Verifying the '${definedAssertionString}' defined assertion...`);
68
68
 
69
- stated = true; ///
70
-
71
- assignments = null; ///
72
-
73
69
  let termVerified = false,
74
70
  frameVerified = false;
75
71
 
@@ -82,7 +78,7 @@ export default class DefinedAssertion {
82
78
  }
83
79
 
84
80
  if (this.frame!== null) {
85
- frameVerified = this.frame.verify(assignments, stated, context);
81
+ frameVerified = this.verifyFrame(this.frame, assignments, stated, context);
86
82
  }
87
83
 
88
84
  if (termVerified || frameVerified) {
@@ -107,6 +103,16 @@ export default class DefinedAssertion {
107
103
  return verified;
108
104
  }
109
105
 
106
+ verifyFrame(frame, assignments, stated, context) {
107
+ stated = true; ///
108
+
109
+ assignments = null; ///
110
+
111
+ const frameVerified = frame.verify(assignments, stated, context);
112
+
113
+ return frameVerified;
114
+ }
115
+
110
116
  verifyWhenStated(context) {
111
117
  let verifiedWhenStated;
112
118
 
@@ -3,7 +3,6 @@
3
3
  import { arrayUtilities } from "necessary";
4
4
 
5
5
  import shim from "../shim";
6
- import LocalContext from "../context/local";
7
6
  import metaLevelUnifier from "../unifier/metaLevel";
8
7
 
9
8
  import { nodeQuery, nodesQuery } from "../utilities/query";
@@ -69,17 +68,7 @@ export default class SubproofAssertion {
69
68
 
70
69
  context.trace(`Verifying the '${subproofAssertionString}' subproof assertion...`);
71
70
 
72
- stated = true; ///
73
-
74
- assignments = null; ///
75
-
76
- const statementsVerified = this.statements.map((statement) => {
77
- const statementVerified = statement.verify(assignments, stated, context);
78
-
79
- if (statementVerified) {
80
- return true;
81
- }
82
- });
71
+ const statementsVerified = this.verifyStatements(assignments, stated, context);
83
72
 
84
73
  if (statementsVerified) {
85
74
  let verifiedWhenStated = false,
@@ -103,6 +92,22 @@ export default class SubproofAssertion {
103
92
  return verified;
104
93
  }
105
94
 
95
+ verifyStatements(assignments, stated, context) {
96
+ stated = true; ///
97
+
98
+ assignments = null; ///
99
+
100
+ const statementsVerified = this.statements.map((statement) => {
101
+ const statementVerified = statement.verify(assignments, stated, context);
102
+
103
+ if (statementVerified) {
104
+ return true;
105
+ }
106
+ });
107
+
108
+ return statementsVerified;
109
+ }
110
+
106
111
  verifyWhenStated(context) {
107
112
  let verifiedWhenStated;
108
113
 
package/src/axiom.js CHANGED
@@ -7,8 +7,9 @@ class Axiom extends TopLevelAssertion {
7
7
  verify() {
8
8
  let verified;
9
9
 
10
- const fileContext = this.getFileContext(),
11
- axiomString = this.string; ///
10
+ const axiom = this, ///
11
+ axiomString = axiom.getString(),
12
+ fileContext = this.getFileContext();
12
13
 
13
14
  fileContext.trace(`Verifying the '${axiomString}' axiom...`);
14
15
 
@@ -2,53 +2,17 @@
2
2
 
3
3
  import shim from "../shim";
4
4
  import Combinator from "../combinator";
5
- import StatementNodeAndTokens from "../nodeAndTokens/statement";
5
+ import CombinatorBracketedContext from "../context/bracketed/combinator";
6
6
 
7
- import { STATEMENT_META_TYPE_NAME } from "../metaTypeNames";
8
- import { nominalLexer, nominalParser } from "../utilities/nominal";
7
+ const combinatorBracketedContext = CombinatorBracketedContext.fromNothing();
9
8
 
10
- const getLexer = () => {
11
- const lexer = nominalLexer; ///
12
-
13
- return lexer;
14
- },
15
- getParser = () => {
16
- const parser = nominalParser; ///
17
-
18
- return parser;
19
- },
20
- nodeAsTokens = (node) => {
21
- const tokens = statementTokens; ///
22
-
23
- return tokens;
24
- },
25
- nodeAsString = (node) => {
26
- const string = statementString; ///
27
-
28
- return string;
29
- },
30
- tokensAsString = (tokens) => {
31
- const string = statementNode; ///
32
-
33
- return string;
34
- },
35
- context = {
36
- getLexer,
37
- getParser,
38
- nodeAsTokens,
39
- nodeAsString,
40
- tokensAsString
41
- },
42
- statementString = `(${STATEMENT_META_TYPE_NAME})`,
43
- statementNodeAndTokens = StatementNodeAndTokens.fromStatementString(statementString, context),
44
- statementTokens = statementNodeAndTokens.getStatementTokens(),
45
- statementNode = statementNodeAndTokens.getStatementNode();
46
-
47
- export const bracketedStatementNode = statementNode; ///
9
+ export const bracketedStatementNode = combinatorBracketedContext.getBracketedStatementNode(); ///
48
10
 
49
11
  export default class BracketedCombinator extends Combinator {
50
12
  static fromNothing() {
51
13
  const { Statement } = shim,
14
+ statementNode = bracketedStatementNode, ///
15
+ context = combinatorBracketedContext, ///
52
16
  statement = Statement.fromStatementNode(statementNode, context),
53
17
  bracketedCombinator = new BracketedCombinator(statement);
54
18
 
package/src/conclusion.js CHANGED
@@ -26,6 +26,8 @@ class Conclusion {
26
26
 
27
27
  getStatement() { return this.unqualifiedStatement.getStatement(); }
28
28
 
29
+ matchStatementNode(statementNode) { return this.unqualifiedStatement.matchStatementNode(statementNode); }
30
+
29
31
  unifyStatement(statement, substitutions, context) {
30
32
  let statementUnified;
31
33
 
package/src/conjecture.js CHANGED
@@ -7,8 +7,9 @@ class Conjecture extends TopLevelAssertion {
7
7
  verify() {
8
8
  let verified;
9
9
 
10
- const fileContext = this.getFileContext(),
11
- conjectureString = this.string; ///
10
+ const conjecture = this, ///
11
+ fileContext = this.getFileContext(),
12
+ conjectureString = conjecture.getString();
12
13
 
13
14
  fileContext.trace(`Verifying the '${conjectureString}' conjecture...`);
14
15
 
package/src/consequent.js CHANGED
@@ -26,6 +26,8 @@ class Consequent {
26
26
 
27
27
  getStatement() { return this.unqualifiedStatement.getStatement(); }
28
28
 
29
+ matchStatementNode(statementNode) { return this.unqualifiedStatement.matchStatementNode(statementNode); }
30
+
29
31
  unifyStatement(statement, substitutions, context) {
30
32
  let statementUnified;
31
33
 
@@ -2,54 +2,19 @@
2
2
 
3
3
  import shim from "../shim";
4
4
  import Constructor from "../constructor";
5
- import TermNodeAndTokens from "../nodeAndTokens/term";
5
+ import ConstructorBracketedContext from "../context/bracketed/constructor";
6
6
 
7
- import { OBJECT_TYPE_NAME } from "../typeNames";
8
7
  import { stringFromTermAndType } from "../constructor";
9
- import { nominalLexer, nominalParser } from "../utilities/nominal";
10
8
 
11
- const getLexer = () => {
12
- const lexer = nominalLexer; ///
9
+ const constructorBracketedContext = ConstructorBracketedContext.fromNothing();
13
10
 
14
- return lexer;
15
- },
16
- getParser = () => {
17
- const parser = nominalParser; ///
18
-
19
- return parser;
20
- },
21
- nodeAsTokens = (node) => {
22
- const tokens = termTokens; ///
23
-
24
- return tokens;
25
- },
26
- nodeAsString = (node) => {
27
- const string = termString; ///
28
-
29
- return string;
30
- },
31
- tokensAsString = (tokens) => {
32
- const string = termNode; ///
33
-
34
- return string;
35
- },
36
- context = {
37
- getLexer,
38
- getParser,
39
- nodeAsTokens,
40
- nodeAsString,
41
- tokensAsString
42
- },
43
- termString = `(${OBJECT_TYPE_NAME})`,
44
- termNodeAndTokens = TermNodeAndTokens.fromTermString(termString, context),
45
- termTokens = termNodeAndTokens.getTermTokens(),
46
- termNode = termNodeAndTokens.getTermNode();
47
-
48
- export const bracketedTermNode = termNode; ///
11
+ export const bracketedTermNode = constructorBracketedContext.getBracketedTermNode();
49
12
 
50
13
  export default class BracketedConstructor extends Constructor {
51
14
  static fromNothing() {
52
15
  const { Term } = shim,
16
+ termNode = bracketedTermNode, ///
17
+ context = constructorBracketedContext, ///
53
18
  term = Term.fromTermNode(termNode, context),
54
19
  type = null,
55
20
  string = stringFromTermAndType(term, type),
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+
3
+ import BracketedContext from "../../context/bracketted";
4
+ import StatementNodeAndTokens from "../../nodeAndTokens/statement";
5
+
6
+ import { STATEMENT_META_TYPE_NAME } from "../../metaTypeNames";
7
+
8
+ export default class CombinatorBracketedContext extends BracketedContext {
9
+ getBracketedStatementNode() {
10
+ const node = this.getNode(),
11
+ bracketedStatementNode = node; ///
12
+
13
+ return bracketedStatementNode;
14
+ }
15
+
16
+ static fromNothing() {
17
+ const string = `(${STATEMENT_META_TYPE_NAME})`,
18
+ NodeAndTokens = StatementNodeAndTokens,
19
+ combinatorBracketedContext = BracketedContext.fromStringAndNodeAndTokens(CombinatorBracketedContext, string, NodeAndTokens);
20
+
21
+ return combinatorBracketedContext;
22
+ }
23
+ }
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+
3
+ import BracketedContext from "../../context/bracketted";
4
+ import TermNodeAndTokens from "../../nodeAndTokens/term";
5
+
6
+ import { OBJECT_TYPE_NAME } from "../../typeNames";
7
+
8
+ export default class ConstructorBracketedContext extends BracketedContext {
9
+ getBracketedTermNode() {
10
+ const node = this.getNode(),
11
+ bracketedTermNode = node; ///
12
+
13
+ return bracketedTermNode;
14
+ }
15
+
16
+ static fromNothing() {
17
+ const string = `(${OBJECT_TYPE_NAME})`,
18
+ NodeAndTokens = TermNodeAndTokens,
19
+ constructorBracketedContext = BracketedContext.fromStringAndNodeAndTokens(ConstructorBracketedContext, string, NodeAndTokens);
20
+
21
+ return constructorBracketedContext;
22
+ }
23
+ }
@@ -0,0 +1,61 @@
1
+ "use strict";
2
+
3
+ import { nominalLexer, nominalParser } from "../utilities/nominal";
4
+
5
+ export default class BracketedContext {
6
+ constructor(string, node, tokens) {
7
+ this.string = string;
8
+ this.node = node;
9
+ this.tokens = tokens;
10
+ }
11
+
12
+ getString() {
13
+ return this.string;
14
+ }
15
+
16
+ getNode() {
17
+ return this.node;
18
+ }
19
+
20
+ getTokens() {
21
+ return this.tokens;
22
+ }
23
+
24
+ nodeAsTokens() {
25
+ return this.tokens;
26
+ }
27
+
28
+ nodeAsString() {
29
+ return this.string;
30
+ }
31
+
32
+ tokensAsString() {
33
+ return this.string;
34
+ }
35
+
36
+ static fromStringAndNodeAndTokens(Class, string, NodeAndTokens) {
37
+ const context = { ///
38
+ getLexer,
39
+ getParser
40
+ },
41
+ nodeAndTokens = NodeAndTokens.fromString(string, context),
42
+ node = nodeAndTokens.getNode(),
43
+ tokens = nodeAndTokens.getTokens(),
44
+ bracketedContext = new Class(string, node, tokens);
45
+
46
+ return bracketedContext;
47
+ }
48
+ }
49
+
50
+ function getLexer() {
51
+ const lexer = nominalLexer; //'
52
+
53
+ return lexer;
54
+ }
55
+
56
+ function getParser() {
57
+ const parser = nominalParser; //'
58
+
59
+ return parser;
60
+ }
61
+