occam-verify-cli 1.0.609 → 1.0.612

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 (79) hide show
  1. package/lib/context/ephemeral.js +2 -2
  2. package/lib/context/file/nominal.js +17 -47
  3. package/lib/context/liminal.js +36 -39
  4. package/lib/context/scoped.js +8 -8
  5. package/lib/context.js +76 -48
  6. package/lib/element/assertion/contained.js +8 -1
  7. package/lib/element/assertion/defined.js +11 -4
  8. package/lib/element/assertion/property.js +8 -1
  9. package/lib/element/assertion/satisfies.js +8 -1
  10. package/lib/element/assertion/subproof.js +8 -1
  11. package/lib/element/assertion/type.js +8 -1
  12. package/lib/element/assumption.js +11 -11
  13. package/lib/element/combinator/bracketed.js +8 -1
  14. package/lib/element/constructor/bracketed.js +8 -1
  15. package/lib/element/declaration/combinator.js +8 -1
  16. package/lib/element/declaration/complexType.js +8 -1
  17. package/lib/element/declaration/constructor.js +32 -25
  18. package/lib/element/declaration/metavariable.js +9 -9
  19. package/lib/element/declaration/simpleType.js +8 -1
  20. package/lib/element/declaration/typePrefix.js +8 -1
  21. package/lib/element/declaration/variable.js +16 -9
  22. package/lib/element/frame.js +28 -23
  23. package/lib/element/judgement.js +4 -4
  24. package/lib/element/metavariable.js +25 -11
  25. package/lib/element/proofAssertion/premise.js +8 -1
  26. package/lib/element/proofAssertion/step.js +8 -1
  27. package/lib/element/proofAssertion/supposition.js +8 -1
  28. package/lib/element/reference.js +13 -1
  29. package/lib/element/statement.js +16 -1
  30. package/lib/element/substitution/frame.js +18 -11
  31. package/lib/element/substitution/reference.js +18 -11
  32. package/lib/element/substitution/statement.js +26 -13
  33. package/lib/element/substitution/term.js +11 -10
  34. package/lib/element/substitution.js +15 -8
  35. package/lib/element/variable.js +6 -5
  36. package/lib/process/unify.js +2 -2
  37. package/lib/utilities/element.js +3 -3
  38. package/lib/utilities/substitutions.js +15 -16
  39. package/lib/utilities/unification.js +30 -15
  40. package/package.json +2 -2
  41. package/src/context/ephemeral.js +1 -1
  42. package/src/context/file/nominal.js +15 -25
  43. package/src/context/liminal.js +31 -35
  44. package/src/context/scoped.js +6 -5
  45. package/src/context.js +68 -40
  46. package/src/element/assertion/contained.js +7 -0
  47. package/src/element/assertion/defined.js +13 -3
  48. package/src/element/assertion/property.js +7 -0
  49. package/src/element/assertion/satisfies.js +7 -0
  50. package/src/element/assertion/subproof.js +7 -0
  51. package/src/element/assertion/type.js +7 -0
  52. package/src/element/assumption.js +2 -2
  53. package/src/element/combinator/bracketed.js +7 -0
  54. package/src/element/constructor/bracketed.js +7 -0
  55. package/src/element/declaration/combinator.js +7 -0
  56. package/src/element/declaration/complexType.js +7 -0
  57. package/src/element/declaration/constructor.js +31 -24
  58. package/src/element/declaration/metavariable.js +6 -6
  59. package/src/element/declaration/simpleType.js +7 -0
  60. package/src/element/declaration/typePrefix.js +7 -0
  61. package/src/element/declaration/variable.js +13 -6
  62. package/src/element/frame.js +28 -26
  63. package/src/element/judgement.js +1 -1
  64. package/src/element/metavariable.js +28 -11
  65. package/src/element/proofAssertion/premise.js +7 -0
  66. package/src/element/proofAssertion/step.js +7 -0
  67. package/src/element/proofAssertion/supposition.js +7 -0
  68. package/src/element/reference.js +14 -0
  69. package/src/element/statement.js +18 -0
  70. package/src/element/substitution/frame.js +10 -14
  71. package/src/element/substitution/reference.js +10 -14
  72. package/src/element/substitution/statement.js +13 -15
  73. package/src/element/substitution/term.js +8 -13
  74. package/src/element/substitution.js +12 -6
  75. package/src/element/variable.js +4 -2
  76. package/src/process/unify.js +1 -1
  77. package/src/utilities/element.js +2 -2
  78. package/src/utilities/substitutions.js +13 -16
  79. package/src/utilities/unification.js +2 -4
@@ -12,8 +12,8 @@ _export(exports, {
12
12
  get frameFromFrameAndSubstitutions () {
13
13
  return frameFromFrameAndSubstitutions;
14
14
  },
15
- get metavariablesFromSubstitutions () {
16
- return metavariablesFromSubstitutions;
15
+ get metavariableNamesFromSubstitutions () {
16
+ return metavariableNamesFromSubstitutions;
17
17
  },
18
18
  get statementFromStatementAndSubstitutions () {
19
19
  return statementFromStatementAndSubstitutions;
@@ -31,7 +31,7 @@ function termFromTermAndSubstitutions(term, generalContext, specificContext) {
31
31
  if (termSingular) {
32
32
  var variableIdentifier = termNode.getVariableIdentifier(), variable = generalContext.findVariableByVariableIdentifier(variableIdentifier);
33
33
  if (variable !== null) {
34
- var substitution = specificContext.findSubstitutionByVariable(variable, generalContext, specificContext);
34
+ var substitution = specificContext.findSubstitutionByVariableIdentifier(variableIdentifier);
35
35
  if (substitution !== null) {
36
36
  var termSubstitution = substitution, replacementTerm = termSubstitution.getReplacementTerm();
37
37
  term = replacementTerm; ///
@@ -48,7 +48,7 @@ function frameFromFrameAndSubstitutions(frame, generalContext, specificContext)
48
48
  if (frameSingular) {
49
49
  var metavariableName = frameNode.getMetavariableName(), metavariable = generalContext.findMetavariableByMetavariableName(metavariableName);
50
50
  if (metavariable !== null) {
51
- var substitution = specificContext.findSubstitutionByMetavariable(metavariable, generalContext, specificContext);
51
+ var substitution = specificContext.findSubstitutionByMetavariableName(metavariableName);
52
52
  if (substitution !== null) {
53
53
  var frameSubstitution = substitution, replacementFrame = frameSubstitution.getReplacementFrame();
54
54
  frame = replacementFrame; ///
@@ -69,14 +69,14 @@ function statementFromStatementAndSubstitutions(statement, generalContext, speci
69
69
  var context = generalContext; ///
70
70
  generalContext = specificContext; ///
71
71
  specificContext = context; ///
72
- substitution = specificContext.findSubstitutionBySubstitutionNode(substitutionNode, generalContext, specificContext);
72
+ substitution = specificContext.findSubstitutionBySubstitutionNode(substitutionNode);
73
73
  context = generalContext; ///
74
74
  generalContext = specificContext; ///
75
75
  specificContext = context; ///
76
76
  }
77
77
  var metavariableName = statementNode.getMetavariableName(), metavariable = generalContext.findMetavariableByMetavariableName(metavariableName);
78
78
  if (metavariable !== null) {
79
- substitution = substitution !== null ? specificContext.findSubstitutionByMetavariableAndSubstitution(metavariable, substitution, generalContext, specificContext) : specificContext.findSubstitutionByMetavariable(metavariable, generalContext, specificContext);
79
+ substitution = substitution !== null ? specificContext.findSubstitutionByMetavariableNameAndSubstitution(metavariableName, substitution) : specificContext.findSubstitutionByMetavariableName(metavariableName);
80
80
  if (substitution !== null) {
81
81
  var statementSubstitution = substitution, replacementStatement = statementSubstitution.getReplacementStatement();
82
82
  statement = replacementStatement; ///
@@ -86,21 +86,20 @@ function statementFromStatementAndSubstitutions(statement, generalContext, speci
86
86
  }
87
87
  return statement;
88
88
  }
89
- function metavariablesFromSubstitutions(substitutions, generalContext, specificContext) {
90
- var metavariables = [];
89
+ function metavariableNamesFromSubstitutions(substitutions) {
90
+ var metavariableNames = [];
91
91
  substitutions.forEach(function(substitution) {
92
- var context = generalContext, metavariable = substitution.getMetavariable(generalContext, specificContext);
93
- if (metavariable !== null) {
94
- metavariables.push(metavariable);
92
+ var metavariableName = substitution.getMetavariableName();
93
+ if (metavariableName !== null) {
94
+ metavariableNames.push(metavariableName);
95
95
  }
96
96
  });
97
- compress(metavariables, function(metavariableA, metavariableB) {
98
- var metavariableComparesToMetavariableB = metavariableB.compare(metavariableA);
99
- if (!metavariableComparesToMetavariableB) {
97
+ compress(metavariableNames, function(metavariableNameA, metavariableNameB) {
98
+ if (metavariableNameB !== metavariableNameB) {
100
99
  return true;
101
100
  }
102
101
  });
103
- return metavariables;
102
+ return metavariableNames;
104
103
  }
105
104
 
106
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsaXRpZXMvc3Vic3RpdHV0aW9ucy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgYXJyYXlVdGlsaXRpZXMgfSBmcm9tIFwibmVjZXNzYXJ5XCI7XG5cbmNvbnN0IHsgY29tcHJlc3MgfSA9IGFycmF5VXRpbGl0aWVzO1xuXG5leHBvcnQgZnVuY3Rpb24gdGVybUZyb21UZXJtQW5kU3Vic3RpdHV0aW9ucyh0ZXJtLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0KSB7XG4gIGlmICh0ZXJtICE9PSBudWxsKSB7XG4gICAgY29uc3QgdGVybU5vZGUgPSB0ZXJtLmdldE5vZGUoKSxcbiAgICAgICAgICB0ZXJtU2luZ3VsYXIgPSB0ZXJtLmlzU2luZ3VsYXIoKTtcblxuICAgIHRlcm0gPSBudWxsOyAgLy8vXG5cbiAgICBpZiAodGVybVNpbmd1bGFyKSB7XG4gICAgICBjb25zdCB2YXJpYWJsZUlkZW50aWZpZXIgPSB0ZXJtTm9kZS5nZXRWYXJpYWJsZUlkZW50aWZpZXIoKSxcbiAgICAgICAgICAgIHZhcmlhYmxlID0gZ2VuZXJhbENvbnRleHQuZmluZFZhcmlhYmxlQnlWYXJpYWJsZUlkZW50aWZpZXIodmFyaWFibGVJZGVudGlmaWVyKTtcblxuICAgICAgaWYgKHZhcmlhYmxlICE9PSBudWxsKSB7XG4gICAgICAgIGNvbnN0IHN1YnN0aXR1dGlvbiA9IHNwZWNpZmljQ29udGV4dC5maW5kU3Vic3RpdHV0aW9uQnlWYXJpYWJsZSh2YXJpYWJsZSwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCk7XG5cbiAgICAgICAgaWYgKHN1YnN0aXR1dGlvbiAhPT0gbnVsbCkge1xuICAgICAgICAgIGNvbnN0IHRlcm1TdWJzdGl0dXRpb24gPSBzdWJzdGl0dXRpb24sICAvLy9cbiAgICAgICAgICAgICAgICByZXBsYWNlbWVudFRlcm0gPSB0ZXJtU3Vic3RpdHV0aW9uLmdldFJlcGxhY2VtZW50VGVybSgpO1xuXG4gICAgICAgICAgdGVybSA9IHJlcGxhY2VtZW50VGVybTsgLy8vXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gdGVybTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZyYW1lRnJvbUZyYW1lQW5kU3Vic3RpdHV0aW9ucyhmcmFtZSwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCkge1xuICBpZiAoZnJhbWUgIT09IG51bGwpIHtcbiAgICBjb25zdCBmcmFtZU5vZGUgPSBmcmFtZS5nZXROb2RlKCksXG4gICAgICAgICAgZnJhbWVTaW5ndWxhciA9IGZyYW1lLmlzU2luZ3VsYXIoKTtcblxuICAgIGZyYW1lID0gbnVsbDsgIC8vL1xuXG4gICAgaWYgKGZyYW1lU2luZ3VsYXIpIHtcbiAgICAgIGNvbnN0IG1ldGF2YXJpYWJsZU5hbWUgPSBmcmFtZU5vZGUuZ2V0TWV0YXZhcmlhYmxlTmFtZSgpLFxuICAgICAgICAgICAgbWV0YXZhcmlhYmxlID0gZ2VuZXJhbENvbnRleHQuZmluZE1ldGF2YXJpYWJsZUJ5TWV0YXZhcmlhYmxlTmFtZShtZXRhdmFyaWFibGVOYW1lKTtcblxuICAgICAgaWYgKG1ldGF2YXJpYWJsZSAhPT0gbnVsbCkge1xuICAgICAgICBjb25zdCBzdWJzdGl0dXRpb24gPSBzcGVjaWZpY0NvbnRleHQuZmluZFN1YnN0aXR1dGlvbkJ5TWV0YXZhcmlhYmxlKG1ldGF2YXJpYWJsZSwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCk7XG5cbiAgICAgICAgaWYgKHN1YnN0aXR1dGlvbiAhPT0gbnVsbCkge1xuICAgICAgICAgIGNvbnN0IGZyYW1lU3Vic3RpdHV0aW9uID0gc3Vic3RpdHV0aW9uLCAvLy9cbiAgICAgICAgICAgICAgICByZXBsYWNlbWVudEZyYW1lID0gZnJhbWVTdWJzdGl0dXRpb24uZ2V0UmVwbGFjZW1lbnRGcmFtZSgpO1xuXG4gICAgICAgICAgZnJhbWUgPSByZXBsYWNlbWVudEZyYW1lOyAvLy9cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmcmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0YXRlbWVudEZyb21TdGF0ZW1lbnRBbmRTdWJzdGl0dXRpb25zKHN0YXRlbWVudCwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCkge1xuICBpZiAoc3RhdGVtZW50ICE9PSBudWxsKSB7XG4gICAgY29uc3Qgc3RhdGVtZW50Tm9kZSA9IHN0YXRlbWVudC5nZXROb2RlKCksXG4gICAgICAgICAgc3RhdGVtZW50U2luZ3VsYXIgPSBzdGF0ZW1lbnQuaXNTaW5ndWxhcigpO1xuXG4gICAgc3RhdGVtZW50ID0gbnVsbDtcblxuICAgIGlmIChzdGF0ZW1lbnRTaW5ndWxhcikge1xuICAgICAgbGV0IHN1YnN0aXR1dGlvbiA9IG51bGw7XG5cbiAgICAgIGNvbnN0IHN1YnN0aXR1dGlvbk5vZGUgPSBzdGF0ZW1lbnROb2RlLmdldFN1YnN0aXR1dGlvbk5vZGUoKTtcblxuICAgICAgaWYgKHN1YnN0aXR1dGlvbk5vZGUgIT09IG51bGwpIHtcbiAgICAgICAgbGV0IGNvbnRleHQgPSBnZW5lcmFsQ29udGV4dDsgLy8vXG5cbiAgICAgICAgZ2VuZXJhbENvbnRleHQgPSBzcGVjaWZpY0NvbnRleHQ7IC8vL1xuXG4gICAgICAgIHNwZWNpZmljQ29udGV4dCA9IGNvbnRleHQ7ICAvLy9cblxuICAgICAgICBzdWJzdGl0dXRpb24gPSBzcGVjaWZpY0NvbnRleHQuZmluZFN1YnN0aXR1dGlvbkJ5U3Vic3RpdHV0aW9uTm9kZShzdWJzdGl0dXRpb25Ob2RlLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0KTtcblxuICAgICAgICBjb250ZXh0ID0gZ2VuZXJhbENvbnRleHQ7IC8vL1xuXG4gICAgICAgIGdlbmVyYWxDb250ZXh0ID0gc3BlY2lmaWNDb250ZXh0OyAvLy9cblxuICAgICAgICBzcGVjaWZpY0NvbnRleHQgPSBjb250ZXh0OyAgLy8vXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG1ldGF2YXJpYWJsZU5hbWUgPSBzdGF0ZW1lbnROb2RlLmdldE1ldGF2YXJpYWJsZU5hbWUoKSxcbiAgICAgICAgICAgIG1ldGF2YXJpYWJsZSA9IGdlbmVyYWxDb250ZXh0LmZpbmRNZXRhdmFyaWFibGVCeU1ldGF2YXJpYWJsZU5hbWUobWV0YXZhcmlhYmxlTmFtZSk7XG5cbiAgICAgIGlmIChtZXRhdmFyaWFibGUgIT09IG51bGwpIHtcbiAgICAgICAgc3Vic3RpdHV0aW9uID0gKHN1YnN0aXR1dGlvbiAhPT0gbnVsbCkgP1xuICAgICAgICAgICAgICAgICAgICAgICAgIHNwZWNpZmljQ29udGV4dC5maW5kU3Vic3RpdHV0aW9uQnlNZXRhdmFyaWFibGVBbmRTdWJzdGl0dXRpb24obWV0YXZhcmlhYmxlLCBzdWJzdGl0dXRpb24sIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQpIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwZWNpZmljQ29udGV4dC5maW5kU3Vic3RpdHV0aW9uQnlNZXRhdmFyaWFibGUobWV0YXZhcmlhYmxlLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0KTtcblxuICAgICAgICBpZiAoc3Vic3RpdHV0aW9uICE9PSBudWxsKSB7XG4gICAgICAgICAgY29uc3Qgc3RhdGVtZW50U3Vic3RpdHV0aW9uID0gc3Vic3RpdHV0aW9uLCAvLy9cbiAgICAgICAgICAgICAgICByZXBsYWNlbWVudFN0YXRlbWVudCA9IHN0YXRlbWVudFN1YnN0aXR1dGlvbi5nZXRSZXBsYWNlbWVudFN0YXRlbWVudCgpO1xuXG4gICAgICAgICAgc3RhdGVtZW50ID0gcmVwbGFjZW1lbnRTdGF0ZW1lbnQ7IC8vL1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHN0YXRlbWVudDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1ldGF2YXJpYWJsZXNGcm9tU3Vic3RpdHV0aW9ucyhzdWJzdGl0dXRpb25zLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0KSB7XG4gIGNvbnN0IG1ldGF2YXJpYWJsZXMgPSBbXTtcblxuICBzdWJzdGl0dXRpb25zLmZvckVhY2goKHN1YnN0aXR1dGlvbikgPT4ge1xuICAgIGNvbnN0IGNvbnRleHQgPSBnZW5lcmFsQ29udGV4dCwgLy8vXG4gICAgICAgICAgbWV0YXZhcmlhYmxlID0gc3Vic3RpdHV0aW9uLmdldE1ldGF2YXJpYWJsZShnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0KTtcblxuICAgIGlmIChtZXRhdmFyaWFibGUgIT09IG51bGwpIHtcbiAgICAgIG1ldGF2YXJpYWJsZXMucHVzaChtZXRhdmFyaWFibGUpO1xuICAgIH1cbiAgfSk7XG5cbiAgY29tcHJlc3MobWV0YXZhcmlhYmxlcywgKG1ldGF2YXJpYWJsZUEsIG1ldGF2YXJpYWJsZUIpID0+IHtcbiAgICBjb25zdCBtZXRhdmFyaWFibGVDb21wYXJlc1RvTWV0YXZhcmlhYmxlQiA9IG1ldGF2YXJpYWJsZUIuY29tcGFyZShtZXRhdmFyaWFibGVBKTtcblxuICAgIGlmICghbWV0YXZhcmlhYmxlQ29tcGFyZXNUb01ldGF2YXJpYWJsZUIpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIG1ldGF2YXJpYWJsZXM7XG59XG4iXSwibmFtZXMiOlsiZnJhbWVGcm9tRnJhbWVBbmRTdWJzdGl0dXRpb25zIiwibWV0YXZhcmlhYmxlc0Zyb21TdWJzdGl0dXRpb25zIiwic3RhdGVtZW50RnJvbVN0YXRlbWVudEFuZFN1YnN0aXR1dGlvbnMiLCJ0ZXJtRnJvbVRlcm1BbmRTdWJzdGl0dXRpb25zIiwiY29tcHJlc3MiLCJhcnJheVV0aWxpdGllcyIsInRlcm0iLCJnZW5lcmFsQ29udGV4dCIsInNwZWNpZmljQ29udGV4dCIsInRlcm1Ob2RlIiwiZ2V0Tm9kZSIsInRlcm1TaW5ndWxhciIsImlzU2luZ3VsYXIiLCJ2YXJpYWJsZUlkZW50aWZpZXIiLCJnZXRWYXJpYWJsZUlkZW50aWZpZXIiLCJ2YXJpYWJsZSIsImZpbmRWYXJpYWJsZUJ5VmFyaWFibGVJZGVudGlmaWVyIiwic3Vic3RpdHV0aW9uIiwiZmluZFN1YnN0aXR1dGlvbkJ5VmFyaWFibGUiLCJ0ZXJtU3Vic3RpdHV0aW9uIiwicmVwbGFjZW1lbnRUZXJtIiwiZ2V0UmVwbGFjZW1lbnRUZXJtIiwiZnJhbWUiLCJmcmFtZU5vZGUiLCJmcmFtZVNpbmd1bGFyIiwibWV0YXZhcmlhYmxlTmFtZSIsImdldE1ldGF2YXJpYWJsZU5hbWUiLCJtZXRhdmFyaWFibGUiLCJmaW5kTWV0YXZhcmlhYmxlQnlNZXRhdmFyaWFibGVOYW1lIiwiZmluZFN1YnN0aXR1dGlvbkJ5TWV0YXZhcmlhYmxlIiwiZnJhbWVTdWJzdGl0dXRpb24iLCJyZXBsYWNlbWVudEZyYW1lIiwiZ2V0UmVwbGFjZW1lbnRGcmFtZSIsInN0YXRlbWVudCIsInN0YXRlbWVudE5vZGUiLCJzdGF0ZW1lbnRTaW5ndWxhciIsInN1YnN0aXR1dGlvbk5vZGUiLCJnZXRTdWJzdGl0dXRpb25Ob2RlIiwiY29udGV4dCIsImZpbmRTdWJzdGl0dXRpb25CeVN1YnN0aXR1dGlvbk5vZGUiLCJmaW5kU3Vic3RpdHV0aW9uQnlNZXRhdmFyaWFibGVBbmRTdWJzdGl0dXRpb24iLCJzdGF0ZW1lbnRTdWJzdGl0dXRpb24iLCJyZXBsYWNlbWVudFN0YXRlbWVudCIsImdldFJlcGxhY2VtZW50U3RhdGVtZW50Iiwic3Vic3RpdHV0aW9ucyIsIm1ldGF2YXJpYWJsZXMiLCJmb3JFYWNoIiwiZ2V0TWV0YXZhcmlhYmxlIiwicHVzaCIsIm1ldGF2YXJpYWJsZUEiLCJtZXRhdmFyaWFibGVCIiwibWV0YXZhcmlhYmxlQ29tcGFyZXNUb01ldGF2YXJpYWJsZUIiLCJjb21wYXJlIl0sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7UUFpQ2dCQTtlQUFBQTs7UUE0RUFDO2VBQUFBOztRQWpEQUM7ZUFBQUE7O1FBdERBQztlQUFBQTs7O3lCQUplO0FBRS9CLElBQU0sQUFBRUMsV0FB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
105
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsaXRpZXMvc3Vic3RpdHV0aW9ucy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgYXJyYXlVdGlsaXRpZXMgfSBmcm9tIFwibmVjZXNzYXJ5XCI7XG5cbmNvbnN0IHsgY29tcHJlc3MgfSA9IGFycmF5VXRpbGl0aWVzO1xuXG5leHBvcnQgZnVuY3Rpb24gdGVybUZyb21UZXJtQW5kU3Vic3RpdHV0aW9ucyh0ZXJtLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0KSB7XG4gIGlmICh0ZXJtICE9PSBudWxsKSB7XG4gICAgY29uc3QgdGVybU5vZGUgPSB0ZXJtLmdldE5vZGUoKSxcbiAgICAgICAgICB0ZXJtU2luZ3VsYXIgPSB0ZXJtLmlzU2luZ3VsYXIoKTtcblxuICAgIHRlcm0gPSBudWxsOyAgLy8vXG5cbiAgICBpZiAodGVybVNpbmd1bGFyKSB7XG4gICAgICBjb25zdCB2YXJpYWJsZUlkZW50aWZpZXIgPSB0ZXJtTm9kZS5nZXRWYXJpYWJsZUlkZW50aWZpZXIoKSxcbiAgICAgICAgICAgIHZhcmlhYmxlID0gZ2VuZXJhbENvbnRleHQuZmluZFZhcmlhYmxlQnlWYXJpYWJsZUlkZW50aWZpZXIodmFyaWFibGVJZGVudGlmaWVyKTtcblxuICAgICAgaWYgKHZhcmlhYmxlICE9PSBudWxsKSB7XG4gICAgICAgIGNvbnN0IHN1YnN0aXR1dGlvbiA9IHNwZWNpZmljQ29udGV4dC5maW5kU3Vic3RpdHV0aW9uQnlWYXJpYWJsZUlkZW50aWZpZXIodmFyaWFibGVJZGVudGlmaWVyKTtcblxuICAgICAgICBpZiAoc3Vic3RpdHV0aW9uICE9PSBudWxsKSB7XG4gICAgICAgICAgY29uc3QgdGVybVN1YnN0aXR1dGlvbiA9IHN1YnN0aXR1dGlvbiwgIC8vL1xuICAgICAgICAgICAgICAgIHJlcGxhY2VtZW50VGVybSA9IHRlcm1TdWJzdGl0dXRpb24uZ2V0UmVwbGFjZW1lbnRUZXJtKCk7XG5cbiAgICAgICAgICB0ZXJtID0gcmVwbGFjZW1lbnRUZXJtOyAvLy9cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0ZXJtO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZnJhbWVGcm9tRnJhbWVBbmRTdWJzdGl0dXRpb25zKGZyYW1lLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0KSB7XG4gIGlmIChmcmFtZSAhPT0gbnVsbCkge1xuICAgIGNvbnN0IGZyYW1lTm9kZSA9IGZyYW1lLmdldE5vZGUoKSxcbiAgICAgICAgICBmcmFtZVNpbmd1bGFyID0gZnJhbWUuaXNTaW5ndWxhcigpO1xuXG4gICAgZnJhbWUgPSBudWxsOyAgLy8vXG5cbiAgICBpZiAoZnJhbWVTaW5ndWxhcikge1xuICAgICAgY29uc3QgbWV0YXZhcmlhYmxlTmFtZSA9IGZyYW1lTm9kZS5nZXRNZXRhdmFyaWFibGVOYW1lKCksXG4gICAgICAgICAgICBtZXRhdmFyaWFibGUgPSBnZW5lcmFsQ29udGV4dC5maW5kTWV0YXZhcmlhYmxlQnlNZXRhdmFyaWFibGVOYW1lKG1ldGF2YXJpYWJsZU5hbWUpO1xuXG4gICAgICBpZiAobWV0YXZhcmlhYmxlICE9PSBudWxsKSB7XG4gICAgICAgIGNvbnN0IHN1YnN0aXR1dGlvbiA9IHNwZWNpZmljQ29udGV4dC5maW5kU3Vic3RpdHV0aW9uQnlNZXRhdmFyaWFibGVOYW1lKG1ldGF2YXJpYWJsZU5hbWUpO1xuXG4gICAgICAgIGlmIChzdWJzdGl0dXRpb24gIT09IG51bGwpIHtcbiAgICAgICAgICBjb25zdCBmcmFtZVN1YnN0aXR1dGlvbiA9IHN1YnN0aXR1dGlvbiwgLy8vXG4gICAgICAgICAgICAgICAgcmVwbGFjZW1lbnRGcmFtZSA9IGZyYW1lU3Vic3RpdHV0aW9uLmdldFJlcGxhY2VtZW50RnJhbWUoKTtcblxuICAgICAgICAgIGZyYW1lID0gcmVwbGFjZW1lbnRGcmFtZTsgLy8vXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gZnJhbWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGF0ZW1lbnRGcm9tU3RhdGVtZW50QW5kU3Vic3RpdHV0aW9ucyhzdGF0ZW1lbnQsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQpIHtcbiAgaWYgKHN0YXRlbWVudCAhPT0gbnVsbCkge1xuICAgIGNvbnN0IHN0YXRlbWVudE5vZGUgPSBzdGF0ZW1lbnQuZ2V0Tm9kZSgpLFxuICAgICAgICAgIHN0YXRlbWVudFNpbmd1bGFyID0gc3RhdGVtZW50LmlzU2luZ3VsYXIoKTtcblxuICAgIHN0YXRlbWVudCA9IG51bGw7XG5cbiAgICBpZiAoc3RhdGVtZW50U2luZ3VsYXIpIHtcbiAgICAgIGxldCBzdWJzdGl0dXRpb24gPSBudWxsO1xuXG4gICAgICBjb25zdCBzdWJzdGl0dXRpb25Ob2RlID0gc3RhdGVtZW50Tm9kZS5nZXRTdWJzdGl0dXRpb25Ob2RlKCk7XG5cbiAgICAgIGlmIChzdWJzdGl0dXRpb25Ob2RlICE9PSBudWxsKSB7XG4gICAgICAgIGxldCBjb250ZXh0ID0gZ2VuZXJhbENvbnRleHQ7IC8vL1xuXG4gICAgICAgIGdlbmVyYWxDb250ZXh0ID0gc3BlY2lmaWNDb250ZXh0OyAvLy9cblxuICAgICAgICBzcGVjaWZpY0NvbnRleHQgPSBjb250ZXh0OyAgLy8vXG5cbiAgICAgICAgc3Vic3RpdHV0aW9uID0gc3BlY2lmaWNDb250ZXh0LmZpbmRTdWJzdGl0dXRpb25CeVN1YnN0aXR1dGlvbk5vZGUoc3Vic3RpdHV0aW9uTm9kZSk7XG5cbiAgICAgICAgY29udGV4dCA9IGdlbmVyYWxDb250ZXh0OyAvLy9cblxuICAgICAgICBnZW5lcmFsQ29udGV4dCA9IHNwZWNpZmljQ29udGV4dDsgLy8vXG5cbiAgICAgICAgc3BlY2lmaWNDb250ZXh0ID0gY29udGV4dDsgIC8vL1xuICAgICAgfVxuXG4gICAgICBjb25zdCBtZXRhdmFyaWFibGVOYW1lID0gc3RhdGVtZW50Tm9kZS5nZXRNZXRhdmFyaWFibGVOYW1lKCksXG4gICAgICAgICAgICBtZXRhdmFyaWFibGUgPSBnZW5lcmFsQ29udGV4dC5maW5kTWV0YXZhcmlhYmxlQnlNZXRhdmFyaWFibGVOYW1lKG1ldGF2YXJpYWJsZU5hbWUpO1xuXG4gICAgICBpZiAobWV0YXZhcmlhYmxlICE9PSBudWxsKSB7XG4gICAgICAgIHN1YnN0aXR1dGlvbiA9IChzdWJzdGl0dXRpb24gIT09IG51bGwpID9cbiAgICAgICAgICAgICAgICAgICAgICAgICBzcGVjaWZpY0NvbnRleHQuZmluZFN1YnN0aXR1dGlvbkJ5TWV0YXZhcmlhYmxlTmFtZUFuZFN1YnN0aXR1dGlvbihtZXRhdmFyaWFibGVOYW1lLCBzdWJzdGl0dXRpb24pIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwZWNpZmljQ29udGV4dC5maW5kU3Vic3RpdHV0aW9uQnlNZXRhdmFyaWFibGVOYW1lKG1ldGF2YXJpYWJsZU5hbWUpO1xuXG4gICAgICAgIGlmIChzdWJzdGl0dXRpb24gIT09IG51bGwpIHtcbiAgICAgICAgICBjb25zdCBzdGF0ZW1lbnRTdWJzdGl0dXRpb24gPSBzdWJzdGl0dXRpb24sIC8vL1xuICAgICAgICAgICAgICAgIHJlcGxhY2VtZW50U3RhdGVtZW50ID0gc3RhdGVtZW50U3Vic3RpdHV0aW9uLmdldFJlcGxhY2VtZW50U3RhdGVtZW50KCk7XG5cbiAgICAgICAgICBzdGF0ZW1lbnQgPSByZXBsYWNlbWVudFN0YXRlbWVudDsgLy8vXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gc3RhdGVtZW50O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWV0YXZhcmlhYmxlTmFtZXNGcm9tU3Vic3RpdHV0aW9ucyhzdWJzdGl0dXRpb25zKSB7XG4gIGNvbnN0IG1ldGF2YXJpYWJsZU5hbWVzID0gW107XG5cbiAgc3Vic3RpdHV0aW9ucy5mb3JFYWNoKChzdWJzdGl0dXRpb24pID0+IHtcbiAgICBjb25zdCBtZXRhdmFyaWFibGVOYW1lID0gc3Vic3RpdHV0aW9uLmdldE1ldGF2YXJpYWJsZU5hbWUoKTtcblxuICAgIGlmIChtZXRhdmFyaWFibGVOYW1lICE9PSBudWxsKSB7XG4gICAgICBtZXRhdmFyaWFibGVOYW1lcy5wdXNoKG1ldGF2YXJpYWJsZU5hbWUpO1xuICAgIH1cbiAgfSk7XG5cbiAgY29tcHJlc3MobWV0YXZhcmlhYmxlTmFtZXMsIChtZXRhdmFyaWFibGVOYW1lQSwgbWV0YXZhcmlhYmxlTmFtZUIpID0+IHtcbiAgICBpZiAobWV0YXZhcmlhYmxlTmFtZUIgIT09IG1ldGF2YXJpYWJsZU5hbWVCKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiBtZXRhdmFyaWFibGVOYW1lcztcbn1cbiJdLCJuYW1lcyI6WyJmcmFtZUZyb21GcmFtZUFuZFN1YnN0aXR1dGlvbnMiLCJtZXRhdmFyaWFibGVOYW1lc0Zyb21TdWJzdGl0dXRpb25zIiwic3RhdGVtZW50RnJvbVN0YXRlbWVudEFuZFN1YnN0aXR1dGlvbnMiLCJ0ZXJtRnJvbVRlcm1BbmRTdWJzdGl0dXRpb25zIiwiY29tcHJlc3MiLCJhcnJheVV0aWxpdGllcyIsInRlcm0iLCJnZW5lcmFsQ29udGV4dCIsInNwZWNpZmljQ29udGV4dCIsInRlcm1Ob2RlIiwiZ2V0Tm9kZSIsInRlcm1TaW5ndWxhciIsImlzU2luZ3VsYXIiLCJ2YXJpYWJsZUlkZW50aWZpZXIiLCJnZXRWYXJpYWJsZUlkZW50aWZpZXIiLCJ2YXJpYWJsZSIsImZpbmRWYXJpYWJsZUJ5VmFyaWFibGVJZGVudGlmaWVyIiwic3Vic3RpdHV0aW9uIiwiZmluZFN1YnN0aXR1dGlvbkJ5VmFyaWFibGVJZGVudGlmaWVyIiwidGVybVN1YnN0aXR1dGlvbiIsInJlcGxhY2VtZW50VGVybSIsImdldFJlcGxhY2VtZW50VGVybSIsImZyYW1lIiwiZnJhbWVOb2RlIiwiZnJhbWVTaW5ndWxhciIsIm1ldGF2YXJpYWJsZU5hbWUiLCJnZXRNZXRhdmFyaWFibGVOYW1lIiwibWV0YXZhcmlhYmxlIiwiZmluZE1ldGF2YXJpYWJsZUJ5TWV0YXZhcmlhYmxlTmFtZSIsImZpbmRTdWJzdGl0dXRpb25CeU1ldGF2YXJpYWJsZU5hbWUiLCJmcmFtZVN1YnN0aXR1dGlvbiIsInJlcGxhY2VtZW50RnJhbWUiLCJnZXRSZXBsYWNlbWVudEZyYW1lIiwic3RhdGVtZW50Iiwic3RhdGVtZW50Tm9kZSIsInN0YXRlbWVudFNpbmd1bGFyIiwic3Vic3RpdHV0aW9uTm9kZSIsImdldFN1YnN0aXR1dGlvbk5vZGUiLCJjb250ZXh0IiwiZmluZFN1YnN0aXR1dGlvbkJ5U3Vic3RpdHV0aW9uTm9kZSIsImZpbmRTdWJzdGl0dXRpb25CeU1ldGF2YXJpYWJsZU5hbWVBbmRTdWJzdGl0dXRpb24iLCJzdGF0ZW1lbnRTdWJzdGl0dXRpb24iLCJyZXBsYWNlbWVudFN0YXRlbWVudCIsImdldFJlcGxhY2VtZW50U3RhdGVtZW50Iiwic3Vic3RpdHV0aW9ucyIsIm1ldGF2YXJpYWJsZU5hbWVzIiwiZm9yRWFjaCIsInB1c2giLCJtZXRhdmFyaWFibGVOYW1lQSIsIm1ldGF2YXJpYWJsZU5hbWVCIl0sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7UUFpQ2dCQTtlQUFBQTs7UUE0RUFDO2VBQUFBOztRQWpEQUM7ZUFBQUE7O1FBdERBQztlQUFBQTs7O3lCQUplO0FBRS9CLElBQU0sQUFBRUMsV0FBYUMseUJBQWMsQ0FBM0JEO0FBRUQsU0FBU0QsNkJBQTZCRyxJQUFJLEVBQUVDLGNBQWMsRUFBRUMsZUFBZTtJQUNoRixJQUFJRixTQUFTLE1BQU07UUFDakIsSUFBTUcsV0FBV0gsS0FBS0ksT0FBTyxJQUN2QkMsZUFBZUwsS0FBS00sVUFBVTtRQUVwQ04sT0FBTyxNQUFPLEdBQUc7UUFFakIsSUFBSUssY0FBYztZQUNoQixJQUFNRSxxQkFBcUJKLFNBQVNLLHFCQUFxQixJQUNuREMsV0FBV1IsZUFBZVMsZ0NBQWdDLENBQUNIO1lBRWpFLElBQUlFLGFBQWEsTUFBTTtnQkFDckIsSUFBTUUsZUFBZVQsZ0JBQWdCVSxvQ0FBb0MsQ0FB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
@@ -212,7 +212,7 @@ function unifyStatementWithReference(statement, reference, satisfiesAssertion, c
212
212
  }
213
213
  function unifyStatementAsSatisfiesAssertion(statement, reference, satisfiesAssertion, context) {
214
214
  return _async_to_generator(function() {
215
- var statementUnifiesAsSatisfiesAssertion, statementString, stated, assignments, subproofOrProofAssertions, topLevelAssertion, axiom, satisfiable, substitutions1, topLevelAssertionUnifies, substitutionsCorrelates, axiomString;
215
+ var statementUnifiesAsSatisfiesAssertion, statementString, stated, assignments, subproofOrProofAssertions, topLevelAssertion, axiom, satisfiable, substitutions, topLevelAssertionUnifies, substitutionsCorrelates, axiomString;
216
216
  return _ts_generator(this, function(_state) {
217
217
  statementUnifiesAsSatisfiesAssertion = false;
218
218
  satisfiesAssertion = (0, _statement.satisfiesAssertionFromStatement)(statement, context);
@@ -237,9 +237,9 @@ function unifyStatementAsSatisfiesAssertion(statement, reference, satisfiesAsser
237
237
  if (axiom !== null) {
238
238
  satisfiable = axiom.isSatisfiable();
239
239
  if (satisfiable) {
240
- substitutions1 = [], topLevelAssertionUnifies = axiom.unifyTopLevelAssertion(topLevelAssertion, substitutions1, context);
240
+ substitutions = [], topLevelAssertionUnifies = axiom.unifyTopLevelAssertion(topLevelAssertion, substitutions, context);
241
241
  if (topLevelAssertionUnifies) {
242
- substitutionsCorrelates = satisfiesAssertion.correlateSubstitutions(substitutions1, context);
242
+ substitutionsCorrelates = satisfiesAssertion.correlateSubstitutions(substitutions, context);
243
243
  if (substitutionsCorrelates) {
244
244
  statementUnifiesAsSatisfiesAssertion = true;
245
245
  }
@@ -264,15 +264,29 @@ function unifyStatementAsSatisfiesAssertion(statement, reference, satisfiesAsser
264
264
  }
265
265
  function unifyStatementWithTopLevelAssertion(statement, reference, satisfiesAssertion, context) {
266
266
  return _async_to_generator(function() {
267
- var statementUnifiesWithTopLevelAssertion, Substitutions, topLevelAssertion, generalSubstitutions, statementString, topLevelAssertionString, subproofOrProofAssertions, statementAndSubproofOrProofAssertionsUnify, metavariable;
267
+ var statementUnifiesWithTopLevelAssertion, topLevelAssertion, statementString, topLevelAssertionString, subproofOrProofAssertions, statementAndSubproofOrProofAssertionsUnify, metavariable;
268
268
  return _ts_generator(this, function(_state) {
269
- statementUnifiesWithTopLevelAssertion = false;
270
- if (reference !== null) {
271
- Substitutions = _elements.default.Substitutions, topLevelAssertion = context.findTopLevelAssertionByReference(reference), generalSubstitutions = substitutions; ///
272
- if (topLevelAssertion !== null) {
269
+ switch(_state.label){
270
+ case 0:
271
+ statementUnifiesWithTopLevelAssertion = false;
272
+ if (!(reference !== null)) return [
273
+ 3,
274
+ 2
275
+ ];
276
+ topLevelAssertion = context.findTopLevelAssertionByReference(reference);
277
+ if (!(topLevelAssertion !== null)) return [
278
+ 3,
279
+ 2
280
+ ];
273
281
  statementString = statement.getString(), topLevelAssertionString = reference.getString();
274
282
  context.trace("Unifying the '".concat(statementString, "' statement with the '").concat(topLevelAssertionString, "' top level assertion..."));
275
- subproofOrProofAssertions = context.getSubproofOrProofAssertions(), statementAndSubproofOrProofAssertionsUnify = topLevelAssertion.unifyStatementAndSubproofOrProofAssertions(statement, subproofOrProofAssertions, context);
283
+ subproofOrProofAssertions = context.getSubproofOrProofAssertions();
284
+ return [
285
+ 4,
286
+ topLevelAssertion.unifyStatementAndSubproofOrProofAssertions(statement, subproofOrProofAssertions, context)
287
+ ];
288
+ case 1:
289
+ statementAndSubproofOrProofAssertionsUnify = _state.sent();
276
290
  if (statementAndSubproofOrProofAssertionsUnify) {
277
291
  metavariable = reference.getMetavariable();
278
292
  debugger;
@@ -288,12 +302,13 @@ function unifyStatementWithTopLevelAssertion(statement, reference, satisfiesAsse
288
302
  if (statementUnifiesWithTopLevelAssertion) {
289
303
  context.debug("...unified the '".concat(statementString, "' statement with the '").concat(topLevelAssertionString, "' top level assertion."));
290
304
  }
291
- }
305
+ _state.label = 2;
306
+ case 2:
307
+ return [
308
+ 2,
309
+ statementUnifiesWithTopLevelAssertion
310
+ ];
292
311
  }
293
- return [
294
- 2,
295
- statementUnifiesWithTopLevelAssertion
296
- ];
297
312
  });
298
313
  })();
299
314
  }
@@ -460,4 +475,4 @@ var unifyStatements = [
460
475
  compareStatementWithSubproofOrProofAssertions
461
476
  ];
462
477
 
463
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsaXRpZXMvdW5pZmljYXRpb24uanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IGFycmF5VXRpbGl0aWVzIH0gZnJvbSBcIm5lY2Vzc2FyeVwiO1xuXG5pbXBvcnQgZWxlbWVudHMgZnJvbSBcIi4uL2VsZW1lbnRzXCI7XG5cbmltcG9ydCB7IGVxdWFsaXR5RnJvbVN0YXRlbWVudCxcbiAgICAgICAgIGp1ZGdlbWVudEZyb21TdGF0ZW1lbnQsXG4gICAgICAgICB0eXBlQXNzZXJ0aW9uRnJvbVN0YXRlbWVudCxcbiAgICAgICAgIHByb3BlcnR5QXNzZXJ0aW9uRnJvbVN0YXRlbWVudCxcbiAgICAgICAgIHNhdGlzZmllc0Fzc2VydGlvbkZyb21TdGF0ZW1lbnQgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL3N0YXRlbWVudFwiO1xuXG5jb25zdCB7IGJhY2t3YXJkc1NvbWUgfSA9IGFycmF5VXRpbGl0aWVzO1xuXG5hc3luYyBmdW5jdGlvbiB1bmlmeVN0YXRlbWVudFdpdGhSdWxlKHN0YXRlbWVudCwgcmVmZXJlbmNlLCBzYXRpc2ZpZXNBc3NlcnRpb24sIGNvbnRleHQpIHtcbiAgbGV0IHN0YXRlbWVudFVuaWZpZXNXaXRoUnVsZSA9IGZhbHNlO1xuXG4gIGlmIChyZWZlcmVuY2UgIT09IG51bGwpIHtcbiAgICBjb25zdCBydWxlID0gY29udGV4dC5maW5kUnVsZUJ5UmVmZXJlbmNlKHJlZmVyZW5jZSk7XG5cbiAgICBpZiAocnVsZSAhPT0gbnVsbCkge1xuICAgICAgY29uc3QgcnVsZVN0cmluZyA9IHJ1bGUuZ2V0U3RyaW5nKCksXG4gICAgICAgICAgICBzdGF0ZW1lbnRTdHJpbmcgPSBzdGF0ZW1lbnQuZ2V0U3RyaW5nKCk7XG5cbiAgICAgIGNvbnRleHQudHJhY2UoYFVuaWZ5aW5nIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQgd2l0aCB0aGUgJyR7cnVsZVN0cmluZ30nIHJ1bGUuLi5gKTtcblxuICAgICAgY29uc3Qgc3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucyA9IGNvbnRleHQuZ2V0U3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucygpLFxuICAgICAgICAgICAgc3RhdGVtZW50QW5kU3VicHJvb2ZPclByb29mQXNzZXJ0aW9uc1VuaWZ5ID0gYXdhaXQgcnVsZS51bmlmeVN0YXRlbWVudEFuZFN1YnByb29mT3JQcm9vZkFzc2VydGlvbnMoc3RhdGVtZW50LCBzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zLCBjb250ZXh0KTtcblxuICAgICAgaWYgKHN0YXRlbWVudEFuZFN1YnByb29mT3JQcm9vZkFzc2VydGlvbnNVbmlmeSkge1xuICAgICAgICBzdGF0ZW1lbnRVbmlmaWVzV2l0aFJ1bGUgPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAoc3RhdGVtZW50VW5pZmllc1dpdGhSdWxlKSB7XG4gICAgICAgIGNvbnRleHQuZGVidWcoYC4uLnVuaWZpZWQgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCB3aXRoIHRoZSAnJHtydWxlU3RyaW5nfScgcnVsZS5gKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gc3RhdGVtZW50VW5pZmllc1dpdGhSdWxlO1xufVxuXG5hc3luYyBmdW5jdGlvbiB1bmlmeVN0YXRlbWVudFdpdGhSZWZlcmVuY2Uoc3RhdGVtZW50LCByZWZlcmVuY2UsIHNhdGlzZmllc0Fzc2VydGlvbiwgY29udGV4dCkge1xuICBsZXQgc3RhdGVtZW50VW5pZmllc1dpdGhSZWZlcmVuY2UgPSBmYWxzZTtcblxuICBpZiAocmVmZXJlbmNlICE9PSBudWxsKSB7XG4gICAgY29uc3Qgc3RhdGVtZW50U3RyaW5nID0gc3RhdGVtZW50LmdldFN0cmluZygpLFxuICAgICAgICAgIHJlZmVyZW5jZVN0cmluZyA9IHJlZmVyZW5jZS5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYFVuaWZ5aW5nIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQgd2l0aCB0aGUgJyR7cmVmZXJlbmNlU3RyaW5nfScgcmVmZXJlbmNlLi4uYCk7XG5cbiAgICBjb25zdCBtZXRhdmFyaWFibGVWYWxpZGF0ZXMgPSByZWZlcmVuY2UudmFsaWRhdGVNZXRhdmFyaWFibGUoY29udGV4dCk7XG5cbiAgICBpZiAobWV0YXZhcmlhYmxlVmFsaWRhdGVzKSB7XG4gICAgICBjb25zdCBtZXRhdmFyaWFibGUgPSByZWZlcmVuY2UuZ2V0TWV0YXZhcmlhYmxlKCk7XG5cbiAgICAgIGRlYnVnZ2VyXG5cbiAgICAgIC8vIHN5bnRoZXRpY2FsbHkoKGNvbnRleHQpID0+IHtcbiAgICAgIC8vICAgY29uc3QgeyBTdGF0ZW1lbnRTdWJzdGl0dXRpb24gfSA9IGVsZW1lbnRzO1xuICAgICAgLy9cbiAgICAgIC8vICAgU3RhdGVtZW50U3Vic3RpdHV0aW9uLmZyb21TdGF0ZW1lbnRBbmRNZXRhdmFyaWFibGUoc3RhdGVtZW50LCBtZXRhdmFyaWFibGUsIGNvbnRleHQpO1xuXG4gICAgICAvLyAgdmFsaWRhdGVcbiAgICAgIC8vXG4gICAgICAvLyB9LCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0KTtcblxuICAgICAgc3RhdGVtZW50VW5pZmllc1dpdGhSZWZlcmVuY2UgPSB0cnVlO1xuICAgIH1cblxuICAgIGlmIChzdGF0ZW1lbnRVbmlmaWVzV2l0aFJlZmVyZW5jZSkge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udW5pZmllZCB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IHdpdGggdGhlICcke3JlZmVyZW5jZVN0cmluZ30nIHJlZmVyZW5jZS5gKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gc3RhdGVtZW50VW5pZmllc1dpdGhSZWZlcmVuY2U7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHVuaWZ5U3RhdGVtZW50QXNTYXRpc2ZpZXNBc3NlcnRpb24oc3RhdGVtZW50LCByZWZlcmVuY2UsIHNhdGlzZmllc0Fzc2VydGlvbiwgY29udGV4dCkge1xuICBsZXQgc3RhdGVtZW50VW5pZmllc0FzU2F0aXNmaWVzQXNzZXJ0aW9uID0gZmFsc2U7XG5cbiAgc2F0aXNmaWVzQXNzZXJ0aW9uID0gc2F0aXNmaWVzQXNzZXJ0aW9uRnJvbVN0YXRlbWVudChzdGF0ZW1lbnQsIGNvbnRleHQpO1xuXG4gIGlmIChzYXRpc2ZpZXNBc3NlcnRpb24gIT09IG51bGwpIHtcbiAgICBjb25zdCBzdGF0ZW1lbnRTdHJpbmcgPSBzdGF0ZW1lbnQuZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBVbmlmeWluZyB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IGFzIGEgc2F0aXNmaWVzIGFzc2VydGlvbi4uLmApO1xuXG4gICAgY29uc3Qgc3RhdGVkID0gdHJ1ZSxcbiAgICAgICAgICBhc3NpZ25tZW50cyA9IG51bGw7XG5cbiAgICBzYXRpc2ZpZXNBc3NlcnRpb24udmVyaWZ5U2lnbmF0dXJlKGFzc2lnbm1lbnRzLCBzdGF0ZWQsIGNvbnRleHQpO1xuXG4gICAgaWYgKHJlZmVyZW5jZSA9PT0gbnVsbCkge1xuICAgICAgY29uc3Qgc3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucyA9IGNvbnRleHQuZ2V0U3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucygpO1xuXG4gICAgICBzdGF0ZW1lbnRVbmlmaWVzQXNTYXRpc2ZpZXNBc3NlcnRpb24gPSBiYWNrd2FyZHNTb21lKHN1YnByb29mT3JQcm9vZkFzc2VydGlvbnMsIChzdGVwc09yU3VicHJvb2YpID0+IHtcbiAgICAgICAgY29uc3Qgc3RlcE9yU3ViUHJvb2ZVbmlmaWVzV0l0aFNhdGlzZmllc0Fzc2VydGlvbiA9IHN0ZXBzT3JTdWJwcm9vZi51bmlmeVdpdGhTYXRpc2ZpZXNBc3NlcnRpb24oc2F0aXNmaWVzQXNzZXJ0aW9uLCBjb250ZXh0KTtcblxuICAgICAgICBpZiAoc3RlcE9yU3ViUHJvb2ZVbmlmaWVzV0l0aFNhdGlzZmllc0Fzc2VydGlvbikge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgdG9wTGV2ZWxBc3NlcnRpb24gPSBjb250ZXh0LmZpbmRUb3BMZXZlbEFzc2VydGlvbkJ5UmVmZXJlbmNlKHJlZmVyZW5jZSk7XG5cbiAgICAgIGlmICh0b3BMZXZlbEFzc2VydGlvbiAhPT0gbnVsbCkge1xuICAgICAgICByZWZlcmVuY2UgPSBzYXRpc2ZpZXNBc3NlcnRpb24uZ2V0UmVmZXJlbmNlKCk7XG5cbiAgICAgICAgY29uc3QgYXhpb20gPSBjb250ZXh0LmZpbmRBeGlvbUJ5UmVmZXJlbmNlKHJlZmVyZW5jZSk7XG5cbiAgICAgICAgaWYgKGF4aW9tICE9PSBudWxsKSB7XG4gICAgICAgICAgY29uc3Qgc2F0aXNmaWFibGUgPSBheGlvbS5pc1NhdGlzZmlhYmxlKCk7XG5cbiAgICAgICAgICBpZiAoc2F0aXNmaWFibGUpIHtcbiAgICAgICAgICAgIGNvbnN0IHN1YnN0aXR1dGlvbnMgPSBbXSxcbiAgICAgICAgICAgICAgICAgIHRvcExldmVsQXNzZXJ0aW9uVW5pZmllcyA9IGF4aW9tLnVuaWZ5VG9wTGV2ZWxBc3NlcnRpb24odG9wTGV2ZWxBc3NlcnRpb24sIHN1YnN0aXR1dGlvbnMsIGNvbnRleHQpO1xuXG4gICAgICAgICAgICBpZiAodG9wTGV2ZWxBc3NlcnRpb25VbmlmaWVzKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHN1YnN0aXR1dGlvbnNDb3JyZWxhdGVzID0gc2F0aXNmaWVzQXNzZXJ0aW9uLmNvcnJlbGF0ZVN1YnN0aXR1dGlvbnMoc3Vic3RpdHV0aW9ucywgY29udGV4dCk7XG5cbiAgICAgICAgICAgICAgaWYgKHN1YnN0aXR1dGlvbnNDb3JyZWxhdGVzKSB7XG4gICAgICAgICAgICAgICAgc3RhdGVtZW50VW5pZmllc0FzU2F0aXNmaWVzQXNzZXJ0aW9uID0gdHJ1ZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBheGlvbVN0cmluZyA9IGF4aW9tLmdldFN0cmluZygpO1xuXG4gICAgICAgICAgICBjb250ZXh0LmRlYnVnKGBVbmFibGUgdG8gdW5pZnkgd2l0aCB0aGUgJyR7YXhpb21TdHJpbmd9JyBiZWNhdXNlIGl0IGlzIG5vdCBzYXRpc2ZpYWJsZS5gKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChzdGF0ZW1lbnRVbmlmaWVzQXNTYXRpc2ZpZXNBc3NlcnRpb24pIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnVuaWZpZWQgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCBhcyBhIHNhdGlzZmllcyBhc3NlcnRpb24uYCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHN0YXRlbWVudFVuaWZpZXNBc1NhdGlzZmllc0Fzc2VydGlvbjtcbn1cblxuYXN5bmMgZnVuY3Rpb24gdW5pZnlTdGF0ZW1lbnRXaXRoVG9wTGV2ZWxBc3NlcnRpb24oc3RhdGVtZW50LCByZWZlcmVuY2UsIHNhdGlzZmllc0Fzc2VydGlvbiwgY29udGV4dCkge1xuICBsZXQgc3RhdGVtZW50VW5pZmllc1dpdGhUb3BMZXZlbEFzc2VydGlvbiA9IGZhbHNlO1xuXG4gIGlmIChyZWZlcmVuY2UgIT09IG51bGwpIHtcbiAgICBjb25zdCB7IFN1YnN0aXR1dGlvbnMgfSA9IGVsZW1lbnRzLFxuICAgICAgICAgIHRvcExldmVsQXNzZXJ0aW9uID0gY29udGV4dC5maW5kVG9wTGV2ZWxBc3NlcnRpb25CeVJlZmVyZW5jZShyZWZlcmVuY2UpLFxuICAgICAgICAgIGdlbmVyYWxTdWJzdGl0dXRpb25zID0gc3Vic3RpdHV0aW9uczsgLy8vXG5cbiAgICBpZiAodG9wTGV2ZWxBc3NlcnRpb24gIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IHN0YXRlbWVudFN0cmluZyA9IHN0YXRlbWVudC5nZXRTdHJpbmcoKSxcbiAgICAgICAgICAgIHRvcExldmVsQXNzZXJ0aW9uU3RyaW5nID0gcmVmZXJlbmNlLmdldFN0cmluZygpO1xuXG4gICAgICBjb250ZXh0LnRyYWNlKGBVbmlmeWluZyB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IHdpdGggdGhlICcke3RvcExldmVsQXNzZXJ0aW9uU3RyaW5nfScgdG9wIGxldmVsIGFzc2VydGlvbi4uLmApO1xuXG4gICAgICBjb25zdCBzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zID0gY29udGV4dC5nZXRTdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zKCksXG4gICAgICAgICAgICBzdGF0ZW1lbnRBbmRTdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zVW5pZnkgPSB0b3BMZXZlbEFzc2VydGlvbi51bmlmeVN0YXRlbWVudEFuZFN1YnByb29mT3JQcm9vZkFzc2VydGlvbnMoc3RhdGVtZW50LCBzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zLCBjb250ZXh0KTtcblxuICAgICAgaWYgKHN0YXRlbWVudEFuZFN1YnByb29mT3JQcm9vZkFzc2VydGlvbnNVbmlmeSkge1xuICAgICAgICBjb25zdCBtZXRhdmFyaWFibGUgPSByZWZlcmVuY2UuZ2V0TWV0YXZhcmlhYmxlKCk7XG5cbiAgICAgICAgZGVidWdnZXJcblxuICAgICAgICAvLyBzeW50aGV0aWNhbGx5KChjb250ZXh0KSA9PiB7XG4gICAgICAgIC8vICAgY29uc3QgeyBTdGF0ZW1lbnRTdWJzdGl0dXRpb24gfSA9IGVsZW1lbnRzO1xuICAgICAgICAvL1xuICAgICAgICAvLyAgIFN0YXRlbWVudFN1YnN0aXR1dGlvbi5mcm9tU3RhdGVtZW50QW5kTWV0YXZhcmlhYmxlKHN0YXRlbWVudCwgbWV0YXZhcmlhYmxlLCBjb250ZXh0KTtcblxuICAgICAgICAvLyB2YWlkZGF0ZVxuICAgICAgICAvL1xuICAgICAgICAvLyB9LCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0KTtcblxuICAgICAgICBzdGF0ZW1lbnRVbmlmaWVzV2l0aFRvcExldmVsQXNzZXJ0aW9uID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKHN0YXRlbWVudFVuaWZpZXNXaXRoVG9wTGV2ZWxBc3NlcnRpb24pIHtcbiAgICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udW5pZmllZCB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IHdpdGggdGhlICcke3RvcExldmVsQXNzZXJ0aW9uU3RyaW5nfScgdG9wIGxldmVsIGFzc2VydGlvbi5gKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gc3RhdGVtZW50VW5pZmllc1dpdGhUb3BMZXZlbEFzc2VydGlvbjtcbn1cblxuYXN5bmMgZnVuY3Rpb24gdW5pZnlTdGF0ZW1lbnRBRXF1YWxpdHkoc3RhdGVtZW50LCByZWZlcmVuY2UsIHNhdGlzZmllc0Fzc2VydGlvbiwgY29udGV4dCkge1xuICBsZXQgc3RhdGVtZW50VW5pZmllc0FFcXVhbGl0eSA9IGZhbHNlO1xuXG4gIGlmIChyZWZlcmVuY2UgPT09IG51bGwpIHtcbiAgICBjb25zdCBlcXVhbGl0eSA9IGVxdWFsaXR5RnJvbVN0YXRlbWVudChzdGF0ZW1lbnQsIGNvbnRleHQpO1xuXG4gICAgaWYgKGVxdWFsaXR5ICE9PSBudWxsKSB7XG4gICAgICBjb25zdCBzdGF0ZW1lbnRTdHJpbmcgPSBzdGF0ZW1lbnQuZ2V0U3RyaW5nKCk7XG5cbiAgICAgIGNvbnRleHQudHJhY2UoYFVuaWZ5aW5nIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQgYXMgYW4gZXF1YWxpdHkuLi5gKTtcblxuICAgICAgY29uc3QgZXF1YWxpdHlFcXVhbCA9IGVxdWFsaXR5LmlzRXF1YWwoY29udGV4dCk7XG5cbiAgICAgIGlmIChlcXVhbGl0eUVxdWFsKSB7XG4gICAgICAgIHN0YXRlbWVudFVuaWZpZXNBRXF1YWxpdHkgPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAoc3RhdGVtZW50VW5pZmllc0FFcXVhbGl0eSkge1xuICAgICAgICBjb250ZXh0LmRlYnVnKGAuLi51bmlmaWVkIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQgYXMgYW4gZXF1YWxpdHkuYCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHN0YXRlbWVudFVuaWZpZXNBRXF1YWxpdHk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHVuaWZ5U3RhdGVtZW50QXNKdWRnZW1lbnQoc3RhdGVtZW50LCByZWZlcmVuY2UsIHNhdGlzZmllc0Fzc2VydGlvbiwgY29udGV4dCkge1xuICBsZXQgc3RhdGVtZW50VW5pZmllc0FzSnVkZ2VtZW50ID0gZmFsc2U7XG5cbiAgaWYgKHJlZmVyZW5jZSA9PT0gbnVsbCkge1xuICAgIGNvbnN0IGp1ZGdlbWVudCA9IGp1ZGdlbWVudEZyb21TdGF0ZW1lbnQoc3RhdGVtZW50LCBjb250ZXh0KTtcblxuICAgIGlmIChqdWRnZW1lbnQgIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IHN0YXRlbWVudFN0cmluZyA9IHN0YXRlbWVudC5nZXRTdHJpbmcoKTtcblxuICAgICAgY29udGV4dC50cmFjZShgVW5pZnlpbmcgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCBhcyBhIGp1ZGdlbWVudC4uLmApO1xuXG4gICAgICBzdGF0ZW1lbnRVbmlmaWVzQXNKdWRnZW1lbnQgPSB0cnVlO1xuXG4gICAgICBpZiAoc3RhdGVtZW50VW5pZmllc0FzSnVkZ2VtZW50KSB7XG4gICAgICAgIGNvbnRleHQuZGVidWcoYC4uLnVuaWZpZWQgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCBhcyBhIGp1ZGdlbWVudC5gKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gc3RhdGVtZW50VW5pZmllc0FzSnVkZ2VtZW50O1xufVxuXG5hc3luYyBmdW5jdGlvbiB1bmlmeVN0YXRlbWVudEFzVHlwZUFzc2VydGlvbihzdGF0ZW1lbnQsIHJlZmVyZW5jZSwgc2F0aXNmaWVzQXNzZXJ0aW9uLCBjb250ZXh0KSB7XG4gIGxldCBzdGF0ZW1lbnRVbmlmaWVzQXNUeXBlQXNzZXJ0aW9uID0gZmFsc2U7XG5cbiAgaWYgKHJlZmVyZW5jZSA9PT0gbnVsbCkge1xuICAgIGNvbnN0IHR5cGVBc3NlcnRpb24gPSB0eXBlQXNzZXJ0aW9uRnJvbVN0YXRlbWVudChzdGF0ZW1lbnQsIGNvbnRleHQpO1xuXG4gICAgaWYgKHR5cGVBc3NlcnRpb24gIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IHN0YXRlbWVudFN0cmluZyA9IHN0YXRlbWVudC5nZXRTdHJpbmcoKTtcblxuICAgICAgY29udGV4dC50cmFjZShgVW5pZnlpbmcgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCBhcyBhIHR5cGUgYXNzZXJ0aW9uLi4uYCk7XG5cbiAgICAgIHN0YXRlbWVudFVuaWZpZXNBc1R5cGVBc3NlcnRpb24gPSB0cnVlO1xuXG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi51bmlmaWVkIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQgYXMgYSB0eXBlIGFzc2VydGlvbi5gKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gc3RhdGVtZW50VW5pZmllc0FzVHlwZUFzc2VydGlvbjtcbn1cblxuYXN5bmMgZnVuY3Rpb24gdW5pZnlTdGF0ZW1lbnRBc1Byb3BlcnR5QXNzZXJ0aW9uKHN0YXRlbWVudCwgcmVmZXJlbmNlLCBzYXRpc2ZpZXNBc3NlcnRpb24sIGNvbnRleHQpIHtcbiAgbGV0IHN0YXRlbWVudFVuaWZpZXNBc1Byb3BlcnR5QXNzZXJ0aW9uID0gZmFsc2U7XG5cbiAgaWYgKHJlZmVyZW5jZSA9PT0gbnVsbCkge1xuICAgIGNvbnN0IHByb3BlcnR5QXNzZXJ0aW9uID0gcHJvcGVydHlBc3NlcnRpb25Gcm9tU3RhdGVtZW50KHN0YXRlbWVudCwgY29udGV4dCk7XG5cbiAgICBpZiAocHJvcGVydHlBc3NlcnRpb24gIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IHN0YXRlbWVudFN0cmluZyA9IHN0YXRlbWVudC5nZXRTdHJpbmcoKTtcblxuICAgICAgY29udGV4dC50cmFjZShgVW5pZnlpbmcgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCBhcyBhIHByb3BlcnR5IGFzc2VydGlvbi4uLmApO1xuXG4gICAgICBjb25zdCB0ZXJtID0gcHJvcGVydHlBc3NlcnRpb24uZ2V0VGVybSgpLFxuICAgICAgICAgICAgZXF1aXZhbGVuY2UgPSBjb250ZXh0LmZpbmRFcXVpdmFsZW5jZUJ5VGVybSh0ZXJtKTtcblxuICAgICAgaWYgKGVxdWl2YWxlbmNlICE9PSBudWxsKSB7XG4gICAgICAgIGNvbnN0IHByb3BlcnR5QXNzZXJ0aW9uTWF0Y2hlcyA9IGVxdWl2YWxlbmNlLnNvbWVPdGhlclRlcm0odGVybSwgKHRlcm0pID0+IHsgIC8vL1xuICAgICAgICAgIGNvbnN0IHByb3BlcnR5UmVsYXRpb24gPSBwcm9wZXJ0eUFzc2VydGlvbi5nZXRQcm9wZXJ0eVJlbGF0aW9uKCksXG4gICAgICAgICAgICAgICAgY29tcGFyZXNUb1Rlcm1BbmRQcm9wZXJ0eVJlbGF0aW9uID0gY29udGV4dC5jb21wYXJlVGVybUFuZFByb3BlcnR5UmVsYXRpb24odGVybSwgcHJvcGVydHlSZWxhdGlvbik7XG5cbiAgICAgICAgICBpZiAoY29tcGFyZXNUb1Rlcm1BbmRQcm9wZXJ0eVJlbGF0aW9uKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmIChwcm9wZXJ0eUFzc2VydGlvbk1hdGNoZXMpIHtcbiAgICAgICAgICBzdGF0ZW1lbnRVbmlmaWVzQXNQcm9wZXJ0eUFzc2VydGlvbiA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHN0YXRlbWVudFVuaWZpZXNBc1Byb3BlcnR5QXNzZXJ0aW9uKSB7XG4gICAgICAgIGNvbnRleHQuZGVidWcoYC4uLnVuaWZpZWQgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCBhcyBhIHByb3BlcnR5IGFzc2VydGlvbi5gKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gc3RhdGVtZW50VW5pZmllc0FzUHJvcGVydHlBc3NlcnRpb247XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHVuaWZ5U3RhdGVtZW50V2l0aFNhdGlzZmllc0Fzc2VydGlvbihzdGF0ZW1lbnQsIHJlZmVyZW5jZSwgc2F0aXNmaWVzQXNzZXJ0aW9uLCBjb250ZXh0KSB7XG4gIGxldCBzdGF0ZW1lbnRVbmlmaWVzV2l0aFNhdGlzZmllc0Fzc2VydGlvbiA9IGZhbHNlO1xuXG4gIGlmIChzYXRpc2ZpZXNBc3NlcnRpb24gIT09IG51bGwpIHtcbiAgICBjb25zdCBzdGF0ZW1lbnRTdHJpbmcgPSBzdGF0ZW1lbnQuZ2V0U3RyaW5nKCksXG4gICAgICAgICAgc2F0aXNmaWVzQXNzZXJ0aW9uU3RyaW5nID0gc2F0aXNmaWVzQXNzZXJ0aW9uLmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgVW5pZnlpbmcgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVtbnQgd2l0aCB0aGUgJyR7c2F0aXNmaWVzQXNzZXJ0aW9uU3RyaW5nfScgc2F0aXNmaWVzIGFzc2VydGlvbi4uLmApO1xuXG4gICAgY29uc3Qgc3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucyA9IGNvbnRleHQuZ2V0U3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucygpLFxuICAgICAgICAgIHN0YXRlbWVudFVuaWZpZXMgPSBzYXRpc2ZpZXNBc3NlcnRpb24udW5pZnlTdGF0ZW1lbnRBbmRTdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zKHN0YXRlbWVudCwgc3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucywgY29udGV4dCk7XG5cbiAgICBpZiAoc3RhdGVtZW50VW5pZmllcykge1xuICAgICAgc3RhdGVtZW50VW5pZmllc1dpdGhTYXRpc2ZpZXNBc3NlcnRpb24gPSB0cnVlO1xuICAgIH1cblxuICAgIGlmIChzdGF0ZW1lbnRVbmlmaWVzV2l0aFNhdGlzZmllc0Fzc2VydGlvbikge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udW5pZmllZCB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW1udCB3aXRoIHRoZSAnJHtzYXRpc2ZpZXNBc3NlcnRpb25TdHJpbmd9JyBzYXRpc2ZpZXMgYXNzZXJ0aW9uLmApO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBzdGF0ZW1lbnRVbmlmaWVzV2l0aFNhdGlzZmllc0Fzc2VydGlvbjtcbn1cblxuYXN5bmMgZnVuY3Rpb24gY29tcGFyZVN0YXRlbWVudFdpdGhTdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zKHN0YXRlbWVudCwgcmVmZXJlbmNlLCBzYXRpc2ZpZXNBc3NlcnRpb24sIGNvbnRleHQpIHtcbiAgbGV0IHN0YXRlbWVudEVxdWF0ZXNXaXRoU3RlcE9yU3VicHJvb2ZzID0gZmFsc2U7XG5cbiAgaWYgKHJlZmVyZW5jZSA9PT0gbnVsbCkge1xuICAgIGNvbnN0IHN0YXRlbWVudFN0cmluZyA9IHN0YXRlbWVudC5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYENvbXBhcmluZyB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IHdpdGggdGhlIHN1YnByb29mcyBvciBwcm9vZiBhc3NzZXJ0aW9ucy4uLmApO1xuXG4gICAgY29uc3Qgc3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucyA9IGNvbnRleHQuZ2V0U3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucygpLFxuICAgICAgICAgIHN0YXRlbWVudFVuaWZpZXNXaXRoU3RlcHMgPSBzdGF0ZW1lbnQuY29tcGFyZVN1YnByb29mT3JQcm9vZkFzc2VydGlvbnMoc3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucywgY29udGV4dCk7XG5cbiAgICBpZiAoc3RhdGVtZW50VW5pZmllc1dpdGhTdGVwcykge1xuICAgICAgc3RhdGVtZW50RXF1YXRlc1dpdGhTdGVwT3JTdWJwcm9vZnMgPSB0cnVlO1xuICAgIH1cblxuICAgIGlmIChzdGF0ZW1lbnRFcXVhdGVzV2l0aFN0ZXBPclN1YnByb29mcykge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4uY29tcGFyZWQgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCB3aXRoIHRoZSBzdWJwcm9vZnMgb3IgcHJvb2YgYXNzc2VydGlvbnMuYCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHN0YXRlbWVudEVxdWF0ZXNXaXRoU3RlcE9yU3VicHJvb2ZzO1xufVxuXG5leHBvcnQgY29uc3QgdW5pZnlTdGF0ZW1lbnRzID0gW1xuICB1bmlmeVN0YXRlbWVudFdpdGhSdWxlLFxuICB1bmlmeVN0YXRlbWVudFdpdGhSZWZlcmVuY2UsXG4gIHVuaWZ5U3RhdGVtZW50QXNTYXRpc2ZpZXNBc3NlcnRpb24sXG4gIHVuaWZ5U3RhdGVtZW50V2l0aFRvcExldmVsQXNzZXJ0aW9uLFxuICB1bmlmeVN0YXRlbWVudEFFcXVhbGl0eSxcbiAgdW5pZnlTdGF0ZW1lbnRBc0p1ZGdlbWVudCxcbiAgdW5pZnlTdGF0ZW1lbnRBc1R5cGVBc3NlcnRpb24sXG4gIHVuaWZ5U3RhdGVtZW50QXNQcm9wZXJ0eUFzc2VydGlvbixcbiAgdW5pZnlTdGF0ZW1lbnRXaXRoU2F0aXNmaWVzQXNzZXJ0aW9uLFxuICBjb21wYXJlU3RhdGVtZW50V2l0aFN1YnByb29mT3JQcm9vZkFzc2VydGlvbnNcbl07XG4iXSwibmFtZXMiOlsidW5pZnlTdGF0ZW1lbnRzIiwiYmFja3dhcmRzU29tZSIsImFycmF5VXRpbGl0aWVzIiwidW5pZnlTdGF0ZW1lbnRXaXRoUnVsZSIsInN0YXRlbWVudCIsInJlZmVyZW5jZSIsInNhdGlzZmllc0Fzc2VydGlvbiIsImNvbnRleHQiLCJzdGF0ZW1lbnRVbmlmaWVzV2l0aFJ1bGUiLCJydWxlIiwicnVsZVN0cmluZyIsInN0YXRlbWVudFN0cmluZyIsInN1YnByb29mT3JQcm9vZkFzc2VydGlvbnMiLCJzdGF0ZW1lbnRBbmRTdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zVW5pZnkiLCJmaW5kUnVsZUJ5UmVmZXJlbmNlIiwiZ2V0U3RyaW5nIiwidHJhY2UiLCJnZXRTdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zIiwidW5pZnlTdGF0ZW1lbnRBbmRTdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zIiwiZGVidWciLCJ1bmlmeVN0YXRlbWVudFdpdGhSZWZlcmVuY2UiLCJzdGF0ZW1lbnRVbmlmaWVzV2l0aFJlZmVyZW5jZSIsInJlZmVyZW5jZVN0cmluZyIsIm1ldGF2YXJpYWJsZVZhbGlkYXRlcyIsIm1ldGF2YXJpYWJsZSIsInZhbGlkYXRlTWV0YXZhcmlhYmxlIiwiZ2V0TWV0YXZhcmlhYmxlIiwidW5pZnlTdGF0ZW1lbnRBc1NhdGlzZmllc0Fzc2VydGlvbiIsInN0YXRlbWVudFVuaWZpZXNBc1NhdGlzZmllc0Fzc2VydGlvbiIsInN0YXRlZCIsImFzc2lnbm1lbnRzIiwidG9wTGV2ZWxBc3NlcnRpb24iLCJheGlvbSIsInNhdGlzZmlhYmxlIiwic3Vic3RpdHV0aW9ucyIsInRvcExldmVsQXNzZXJ0aW9uVW5pZmllcyIsInN1YnN0aXR1dGlvbnNDb3JyZWxhdGVzIiwiYXhpb21TdHJpbmciLCJzYXRpc2ZpZXNBc3NlcnRpb25Gcm9tU3RhdGVtZW50IiwidmVyaWZ5U2lnbmF0dXJlIiwic3RlcHNPclN1YnByb29mIiwic3RlcE9yU3ViUHJvb2ZVbmlmaWVzV0l0aFNhdGlzZmllc0Fzc2VydGlvbiIsInVuaWZ5V2l0aFNhdGlzZmllc0Fzc2VydGlvbiIsImZpbmRUb3BMZXZlbEFzc2VydGlvbkJ5UmVmZXJlbmNlIiwiZ2V0UmVmZXJlbmNlIiwiZmluZEF4aW9tQnlSZWZlcmVuY2UiLCJpc1NhdGlzZmlhYmxlIiwidW5pZnlUb3BMZXZlbEFzc2VydGlvbiIsImNvcnJlbGF0ZVN1YnN0aXR1dGlvbnMiLCJ1bmlmeVN0YXRlbWVudFdpdGhUb3BMZXZlbEFzc2VydGlvbiIsInN0YXRlbWVudFVuaWZpZXNXaXRoVG9wTGV2ZWxBc3NlcnRpb24iLCJTdWJzdGl0dXRpb25zIiwiZ2VuZXJhbFN1YnN0aXR1dGlvbnMiLCJ0b3BMZXZlbEFzc2VydGlvblN0cmluZyIsImVsZW1lbnRzIiwidW5pZnlTdGF0ZW1lbnRBRXF1YWxpdHkiLCJzdGF0ZW1lbnRVbmlmaWVzQUVxdWFsaXR5IiwiZXF1YWxpdHkiLCJlcXVhbGl0eUVxdWFsIiwiZXF1YWxpdHlGcm9tU3RhdGVtZW50IiwiaXNFcXVhbCIsInVuaWZ5U3RhdGVtZW50QXNKdWRnZW1lbnQiLCJzdGF0ZW1lbnRVbmlmaWVzQXNKdWRnZW1lbnQiLCJqdWRnZW1lbnQiLCJqdWRnZW1lbnRGcm9tU3RhdGVtZW50IiwidW5pZnlTdGF0ZW1lbnRBc1R5cGVBc3NlcnRpb24iLCJzdGF0ZW1lbnRVbmlmaWVzQXNUeXBlQXNzZXJ0aW9uIiwidHlwZUFzc2VydGlvbiIsInR5cGVBc3NlcnRpb25Gcm9tU3RhdGVtZW50IiwidW5pZnlTdGF0ZW1lbnRBc1Byb3BlcnR5QXNzZXJ0aW9uIiwic3RhdGVtZW50VW5pZmllc0FzUHJvcGVydHlBc3NlcnRpb24iLCJwcm9wZXJ0eUFzc2VydGlvbiIsInRlcm0iLCJlcXVpdmFsZW5jZSIsInByb3BlcnR5QXNzZXJ0aW9uTWF0Y2hlcyIsInByb3BlcnR5QXNzZXJ0aW9uRnJvbVN0YXRlbWVudCIsImdldFRlcm0iLCJmaW5kRXF1aXZhbGVuY2VCeVRlcm0iLCJzb21lT3RoZXJUZXJtIiwicHJvcGVydHlSZWxhdGlvbiIsImdldFByb3BlcnR5UmVsYXRpb24iLCJjb21wYXJlc1RvVGVybUFuZFByb3BlcnR5UmVsYXRpb24iLCJjb21wYXJlVGVybUFuZFByb3BlcnR5UmVsYXRpb24iLCJ1bmlmeVN0YXRlbWVudFdpdGhTYXRpc2ZpZXNBc3NlcnRpb24iLCJzdGF0ZW1lbnRVbmlmaWVzV2l0aFNhdGlzZmllc0Fzc2VydGlvbiIsInNhdGlzZmllc0Fzc2VydGlvblN0cmluZyIsInN0YXRlbWVudFVuaWZpZXMiLCJjb21wYXJlU3RhdGVtZW50V2l0aFN1YnByb29mT3JQcm9vZkFzc2VydGlvbnMiLCJzdGF0ZW1lbnRFcXVhdGVzV2l0aFN0ZXBPclN1YnByb29mcyIsInN0YXRlbWVudFVuaWZpZXNXaXRo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
478
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsaXRpZXMvdW5pZmljYXRpb24uanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IGFycmF5VXRpbGl0aWVzIH0gZnJvbSBcIm5lY2Vzc2FyeVwiO1xuXG5pbXBvcnQgZWxlbWVudHMgZnJvbSBcIi4uL2VsZW1lbnRzXCI7XG5cbmltcG9ydCB7IGVxdWFsaXR5RnJvbVN0YXRlbWVudCxcbiAgICAgICAgIGp1ZGdlbWVudEZyb21TdGF0ZW1lbnQsXG4gICAgICAgICB0eXBlQXNzZXJ0aW9uRnJvbVN0YXRlbWVudCxcbiAgICAgICAgIHByb3BlcnR5QXNzZXJ0aW9uRnJvbVN0YXRlbWVudCxcbiAgICAgICAgIHNhdGlzZmllc0Fzc2VydGlvbkZyb21TdGF0ZW1lbnQgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL3N0YXRlbWVudFwiO1xuXG5jb25zdCB7IGJhY2t3YXJkc1NvbWUgfSA9IGFycmF5VXRpbGl0aWVzO1xuXG5hc3luYyBmdW5jdGlvbiB1bmlmeVN0YXRlbWVudFdpdGhSdWxlKHN0YXRlbWVudCwgcmVmZXJlbmNlLCBzYXRpc2ZpZXNBc3NlcnRpb24sIGNvbnRleHQpIHtcbiAgbGV0IHN0YXRlbWVudFVuaWZpZXNXaXRoUnVsZSA9IGZhbHNlO1xuXG4gIGlmIChyZWZlcmVuY2UgIT09IG51bGwpIHtcbiAgICBjb25zdCBydWxlID0gY29udGV4dC5maW5kUnVsZUJ5UmVmZXJlbmNlKHJlZmVyZW5jZSk7XG5cbiAgICBpZiAocnVsZSAhPT0gbnVsbCkge1xuICAgICAgY29uc3QgcnVsZVN0cmluZyA9IHJ1bGUuZ2V0U3RyaW5nKCksXG4gICAgICAgICAgICBzdGF0ZW1lbnRTdHJpbmcgPSBzdGF0ZW1lbnQuZ2V0U3RyaW5nKCk7XG5cbiAgICAgIGNvbnRleHQudHJhY2UoYFVuaWZ5aW5nIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQgd2l0aCB0aGUgJyR7cnVsZVN0cmluZ30nIHJ1bGUuLi5gKTtcblxuICAgICAgY29uc3Qgc3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucyA9IGNvbnRleHQuZ2V0U3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucygpLFxuICAgICAgICAgICAgc3RhdGVtZW50QW5kU3VicHJvb2ZPclByb29mQXNzZXJ0aW9uc1VuaWZ5ID0gYXdhaXQgcnVsZS51bmlmeVN0YXRlbWVudEFuZFN1YnByb29mT3JQcm9vZkFzc2VydGlvbnMoc3RhdGVtZW50LCBzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zLCBjb250ZXh0KTtcblxuICAgICAgaWYgKHN0YXRlbWVudEFuZFN1YnByb29mT3JQcm9vZkFzc2VydGlvbnNVbmlmeSkge1xuICAgICAgICBzdGF0ZW1lbnRVbmlmaWVzV2l0aFJ1bGUgPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAoc3RhdGVtZW50VW5pZmllc1dpdGhSdWxlKSB7XG4gICAgICAgIGNvbnRleHQuZGVidWcoYC4uLnVuaWZpZWQgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCB3aXRoIHRoZSAnJHtydWxlU3RyaW5nfScgcnVsZS5gKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gc3RhdGVtZW50VW5pZmllc1dpdGhSdWxlO1xufVxuXG5hc3luYyBmdW5jdGlvbiB1bmlmeVN0YXRlbWVudFdpdGhSZWZlcmVuY2Uoc3RhdGVtZW50LCByZWZlcmVuY2UsIHNhdGlzZmllc0Fzc2VydGlvbiwgY29udGV4dCkge1xuICBsZXQgc3RhdGVtZW50VW5pZmllc1dpdGhSZWZlcmVuY2UgPSBmYWxzZTtcblxuICBpZiAocmVmZXJlbmNlICE9PSBudWxsKSB7XG4gICAgY29uc3Qgc3RhdGVtZW50U3RyaW5nID0gc3RhdGVtZW50LmdldFN0cmluZygpLFxuICAgICAgICAgIHJlZmVyZW5jZVN0cmluZyA9IHJlZmVyZW5jZS5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYFVuaWZ5aW5nIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQgd2l0aCB0aGUgJyR7cmVmZXJlbmNlU3RyaW5nfScgcmVmZXJlbmNlLi4uYCk7XG5cbiAgICBjb25zdCBtZXRhdmFyaWFibGVWYWxpZGF0ZXMgPSByZWZlcmVuY2UudmFsaWRhdGVNZXRhdmFyaWFibGUoY29udGV4dCk7XG5cbiAgICBpZiAobWV0YXZhcmlhYmxlVmFsaWRhdGVzKSB7XG4gICAgICBjb25zdCBtZXRhdmFyaWFibGUgPSByZWZlcmVuY2UuZ2V0TWV0YXZhcmlhYmxlKCk7XG5cbiAgICAgIGRlYnVnZ2VyXG5cbiAgICAgIC8vIHN5bnRoZXRpY2FsbHkoKGNvbnRleHQpID0+IHtcbiAgICAgIC8vICAgY29uc3QgeyBTdGF0ZW1lbnRTdWJzdGl0dXRpb24gfSA9IGVsZW1lbnRzO1xuICAgICAgLy9cbiAgICAgIC8vICAgU3RhdGVtZW50U3Vic3RpdHV0aW9uLmZyb21TdGF0ZW1lbnRBbmRNZXRhdmFyaWFibGUoc3RhdGVtZW50LCBtZXRhdmFyaWFibGUsIGNvbnRleHQpO1xuXG4gICAgICAvLyAgdmFsaWRhdGVcbiAgICAgIC8vXG4gICAgICAvLyB9LCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0KTtcblxuICAgICAgc3RhdGVtZW50VW5pZmllc1dpdGhSZWZlcmVuY2UgPSB0cnVlO1xuICAgIH1cblxuICAgIGlmIChzdGF0ZW1lbnRVbmlmaWVzV2l0aFJlZmVyZW5jZSkge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udW5pZmllZCB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IHdpdGggdGhlICcke3JlZmVyZW5jZVN0cmluZ30nIHJlZmVyZW5jZS5gKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gc3RhdGVtZW50VW5pZmllc1dpdGhSZWZlcmVuY2U7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHVuaWZ5U3RhdGVtZW50QXNTYXRpc2ZpZXNBc3NlcnRpb24oc3RhdGVtZW50LCByZWZlcmVuY2UsIHNhdGlzZmllc0Fzc2VydGlvbiwgY29udGV4dCkge1xuICBsZXQgc3RhdGVtZW50VW5pZmllc0FzU2F0aXNmaWVzQXNzZXJ0aW9uID0gZmFsc2U7XG5cbiAgc2F0aXNmaWVzQXNzZXJ0aW9uID0gc2F0aXNmaWVzQXNzZXJ0aW9uRnJvbVN0YXRlbWVudChzdGF0ZW1lbnQsIGNvbnRleHQpO1xuXG4gIGlmIChzYXRpc2ZpZXNBc3NlcnRpb24gIT09IG51bGwpIHtcbiAgICBjb25zdCBzdGF0ZW1lbnRTdHJpbmcgPSBzdGF0ZW1lbnQuZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBVbmlmeWluZyB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IGFzIGEgc2F0aXNmaWVzIGFzc2VydGlvbi4uLmApO1xuXG4gICAgY29uc3Qgc3RhdGVkID0gdHJ1ZSxcbiAgICAgICAgICBhc3NpZ25tZW50cyA9IG51bGw7XG5cbiAgICBzYXRpc2ZpZXNBc3NlcnRpb24udmVyaWZ5U2lnbmF0dXJlKGFzc2lnbm1lbnRzLCBzdGF0ZWQsIGNvbnRleHQpO1xuXG4gICAgaWYgKHJlZmVyZW5jZSA9PT0gbnVsbCkge1xuICAgICAgY29uc3Qgc3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucyA9IGNvbnRleHQuZ2V0U3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucygpO1xuXG4gICAgICBzdGF0ZW1lbnRVbmlmaWVzQXNTYXRpc2ZpZXNBc3NlcnRpb24gPSBiYWNrd2FyZHNTb21lKHN1YnByb29mT3JQcm9vZkFzc2VydGlvbnMsIChzdGVwc09yU3VicHJvb2YpID0+IHtcbiAgICAgICAgY29uc3Qgc3RlcE9yU3ViUHJvb2ZVbmlmaWVzV0l0aFNhdGlzZmllc0Fzc2VydGlvbiA9IHN0ZXBzT3JTdWJwcm9vZi51bmlmeVdpdGhTYXRpc2ZpZXNBc3NlcnRpb24oc2F0aXNmaWVzQXNzZXJ0aW9uLCBjb250ZXh0KTtcblxuICAgICAgICBpZiAoc3RlcE9yU3ViUHJvb2ZVbmlmaWVzV0l0aFNhdGlzZmllc0Fzc2VydGlvbikge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgdG9wTGV2ZWxBc3NlcnRpb24gPSBjb250ZXh0LmZpbmRUb3BMZXZlbEFzc2VydGlvbkJ5UmVmZXJlbmNlKHJlZmVyZW5jZSk7XG5cbiAgICAgIGlmICh0b3BMZXZlbEFzc2VydGlvbiAhPT0gbnVsbCkge1xuICAgICAgICByZWZlcmVuY2UgPSBzYXRpc2ZpZXNBc3NlcnRpb24uZ2V0UmVmZXJlbmNlKCk7XG5cbiAgICAgICAgY29uc3QgYXhpb20gPSBjb250ZXh0LmZpbmRBeGlvbUJ5UmVmZXJlbmNlKHJlZmVyZW5jZSk7XG5cbiAgICAgICAgaWYgKGF4aW9tICE9PSBudWxsKSB7XG4gICAgICAgICAgY29uc3Qgc2F0aXNmaWFibGUgPSBheGlvbS5pc1NhdGlzZmlhYmxlKCk7XG5cbiAgICAgICAgICBpZiAoc2F0aXNmaWFibGUpIHtcbiAgICAgICAgICAgIGNvbnN0IHN1YnN0aXR1dGlvbnMgPSBbXSxcbiAgICAgICAgICAgICAgICAgIHRvcExldmVsQXNzZXJ0aW9uVW5pZmllcyA9IGF4aW9tLnVuaWZ5VG9wTGV2ZWxBc3NlcnRpb24odG9wTGV2ZWxBc3NlcnRpb24sIHN1YnN0aXR1dGlvbnMsIGNvbnRleHQpO1xuXG4gICAgICAgICAgICBpZiAodG9wTGV2ZWxBc3NlcnRpb25VbmlmaWVzKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHN1YnN0aXR1dGlvbnNDb3JyZWxhdGVzID0gc2F0aXNmaWVzQXNzZXJ0aW9uLmNvcnJlbGF0ZVN1YnN0aXR1dGlvbnMoc3Vic3RpdHV0aW9ucywgY29udGV4dCk7XG5cbiAgICAgICAgICAgICAgaWYgKHN1YnN0aXR1dGlvbnNDb3JyZWxhdGVzKSB7XG4gICAgICAgICAgICAgICAgc3RhdGVtZW50VW5pZmllc0FzU2F0aXNmaWVzQXNzZXJ0aW9uID0gdHJ1ZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBheGlvbVN0cmluZyA9IGF4aW9tLmdldFN0cmluZygpO1xuXG4gICAgICAgICAgICBjb250ZXh0LmRlYnVnKGBVbmFibGUgdG8gdW5pZnkgd2l0aCB0aGUgJyR7YXhpb21TdHJpbmd9JyBiZWNhdXNlIGl0IGlzIG5vdCBzYXRpc2ZpYWJsZS5gKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChzdGF0ZW1lbnRVbmlmaWVzQXNTYXRpc2ZpZXNBc3NlcnRpb24pIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnVuaWZpZWQgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCBhcyBhIHNhdGlzZmllcyBhc3NlcnRpb24uYCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHN0YXRlbWVudFVuaWZpZXNBc1NhdGlzZmllc0Fzc2VydGlvbjtcbn1cblxuYXN5bmMgZnVuY3Rpb24gdW5pZnlTdGF0ZW1lbnRXaXRoVG9wTGV2ZWxBc3NlcnRpb24oc3RhdGVtZW50LCByZWZlcmVuY2UsIHNhdGlzZmllc0Fzc2VydGlvbiwgY29udGV4dCkge1xuICBsZXQgc3RhdGVtZW50VW5pZmllc1dpdGhUb3BMZXZlbEFzc2VydGlvbiA9IGZhbHNlO1xuXG4gIGlmIChyZWZlcmVuY2UgIT09IG51bGwpIHtcbiAgICBjb25zdCB0b3BMZXZlbEFzc2VydGlvbiA9IGNvbnRleHQuZmluZFRvcExldmVsQXNzZXJ0aW9uQnlSZWZlcmVuY2UocmVmZXJlbmNlKTtcblxuICAgIGlmICh0b3BMZXZlbEFzc2VydGlvbiAhPT0gbnVsbCkge1xuICAgICAgY29uc3Qgc3RhdGVtZW50U3RyaW5nID0gc3RhdGVtZW50LmdldFN0cmluZygpLFxuICAgICAgICAgICAgdG9wTGV2ZWxBc3NlcnRpb25TdHJpbmcgPSByZWZlcmVuY2UuZ2V0U3RyaW5nKCk7XG5cbiAgICAgIGNvbnRleHQudHJhY2UoYFVuaWZ5aW5nIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQgd2l0aCB0aGUgJyR7dG9wTGV2ZWxBc3NlcnRpb25TdHJpbmd9JyB0b3AgbGV2ZWwgYXNzZXJ0aW9uLi4uYCk7XG5cbiAgICAgIGNvbnN0IHN1YnByb29mT3JQcm9vZkFzc2VydGlvbnMgPSBjb250ZXh0LmdldFN1YnByb29mT3JQcm9vZkFzc2VydGlvbnMoKSxcbiAgICAgICAgICAgIHN0YXRlbWVudEFuZFN1YnByb29mT3JQcm9vZkFzc2VydGlvbnNVbmlmeSA9IGF3YWl0IHRvcExldmVsQXNzZXJ0aW9uLnVuaWZ5U3RhdGVtZW50QW5kU3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucyhzdGF0ZW1lbnQsIHN1YnByb29mT3JQcm9vZkFzc2VydGlvbnMsIGNvbnRleHQpO1xuXG4gICAgICBpZiAoc3RhdGVtZW50QW5kU3VicHJvb2ZPclByb29mQXNzZXJ0aW9uc1VuaWZ5KSB7XG4gICAgICAgIGNvbnN0IG1ldGF2YXJpYWJsZSA9IHJlZmVyZW5jZS5nZXRNZXRhdmFyaWFibGUoKTtcblxuICAgICAgICBkZWJ1Z2dlclxuXG4gICAgICAgIC8vIHN5bnRoZXRpY2FsbHkoKGNvbnRleHQpID0+IHtcbiAgICAgICAgLy8gICBjb25zdCB7IFN0YXRlbWVudFN1YnN0aXR1dGlvbiB9ID0gZWxlbWVudHM7XG4gICAgICAgIC8vXG4gICAgICAgIC8vICAgU3RhdGVtZW50U3Vic3RpdHV0aW9uLmZyb21TdGF0ZW1lbnRBbmRNZXRhdmFyaWFibGUoc3RhdGVtZW50LCBtZXRhdmFyaWFibGUsIGNvbnRleHQpO1xuXG4gICAgICAgIC8vIHZhaWRkYXRlXG4gICAgICAgIC8vXG4gICAgICAgIC8vIH0sIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQpO1xuXG4gICAgICAgIHN0YXRlbWVudFVuaWZpZXNXaXRoVG9wTGV2ZWxBc3NlcnRpb24gPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAoc3RhdGVtZW50VW5pZmllc1dpdGhUb3BMZXZlbEFzc2VydGlvbikge1xuICAgICAgICBjb250ZXh0LmRlYnVnKGAuLi51bmlmaWVkIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQgd2l0aCB0aGUgJyR7dG9wTGV2ZWxBc3NlcnRpb25TdHJpbmd9JyB0b3AgbGV2ZWwgYXNzZXJ0aW9uLmApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBzdGF0ZW1lbnRVbmlmaWVzV2l0aFRvcExldmVsQXNzZXJ0aW9uO1xufVxuXG5hc3luYyBmdW5jdGlvbiB1bmlmeVN0YXRlbWVudEFFcXVhbGl0eShzdGF0ZW1lbnQsIHJlZmVyZW5jZSwgc2F0aXNmaWVzQXNzZXJ0aW9uLCBjb250ZXh0KSB7XG4gIGxldCBzdGF0ZW1lbnRVbmlmaWVzQUVxdWFsaXR5ID0gZmFsc2U7XG5cbiAgaWYgKHJlZmVyZW5jZSA9PT0gbnVsbCkge1xuICAgIGNvbnN0IGVxdWFsaXR5ID0gZXF1YWxpdHlGcm9tU3RhdGVtZW50KHN0YXRlbWVudCwgY29udGV4dCk7XG5cbiAgICBpZiAoZXF1YWxpdHkgIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IHN0YXRlbWVudFN0cmluZyA9IHN0YXRlbWVudC5nZXRTdHJpbmcoKTtcblxuICAgICAgY29udGV4dC50cmFjZShgVW5pZnlpbmcgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCBhcyBhbiBlcXVhbGl0eS4uLmApO1xuXG4gICAgICBjb25zdCBlcXVhbGl0eUVxdWFsID0gZXF1YWxpdHkuaXNFcXVhbChjb250ZXh0KTtcblxuICAgICAgaWYgKGVxdWFsaXR5RXF1YWwpIHtcbiAgICAgICAgc3RhdGVtZW50VW5pZmllc0FFcXVhbGl0eSA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChzdGF0ZW1lbnRVbmlmaWVzQUVxdWFsaXR5KSB7XG4gICAgICAgIGNvbnRleHQuZGVidWcoYC4uLnVuaWZpZWQgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCBhcyBhbiBlcXVhbGl0eS5gKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gc3RhdGVtZW50VW5pZmllc0FFcXVhbGl0eTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gdW5pZnlTdGF0ZW1lbnRBc0p1ZGdlbWVudChzdGF0ZW1lbnQsIHJlZmVyZW5jZSwgc2F0aXNmaWVzQXNzZXJ0aW9uLCBjb250ZXh0KSB7XG4gIGxldCBzdGF0ZW1lbnRVbmlmaWVzQXNKdWRnZW1lbnQgPSBmYWxzZTtcblxuICBpZiAocmVmZXJlbmNlID09PSBudWxsKSB7XG4gICAgY29uc3QganVkZ2VtZW50ID0ganVkZ2VtZW50RnJvbVN0YXRlbWVudChzdGF0ZW1lbnQsIGNvbnRleHQpO1xuXG4gICAgaWYgKGp1ZGdlbWVudCAhPT0gbnVsbCkge1xuICAgICAgY29uc3Qgc3RhdGVtZW50U3RyaW5nID0gc3RhdGVtZW50LmdldFN0cmluZygpO1xuXG4gICAgICBjb250ZXh0LnRyYWNlKGBVbmlmeWluZyB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IGFzIGEganVkZ2VtZW50Li4uYCk7XG5cbiAgICAgIHN0YXRlbWVudFVuaWZpZXNBc0p1ZGdlbWVudCA9IHRydWU7XG5cbiAgICAgIGlmIChzdGF0ZW1lbnRVbmlmaWVzQXNKdWRnZW1lbnQpIHtcbiAgICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udW5pZmllZCB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IGFzIGEganVkZ2VtZW50LmApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBzdGF0ZW1lbnRVbmlmaWVzQXNKdWRnZW1lbnQ7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHVuaWZ5U3RhdGVtZW50QXNUeXBlQXNzZXJ0aW9uKHN0YXRlbWVudCwgcmVmZXJlbmNlLCBzYXRpc2ZpZXNBc3NlcnRpb24sIGNvbnRleHQpIHtcbiAgbGV0IHN0YXRlbWVudFVuaWZpZXNBc1R5cGVBc3NlcnRpb24gPSBmYWxzZTtcblxuICBpZiAocmVmZXJlbmNlID09PSBudWxsKSB7XG4gICAgY29uc3QgdHlwZUFzc2VydGlvbiA9IHR5cGVBc3NlcnRpb25Gcm9tU3RhdGVtZW50KHN0YXRlbWVudCwgY29udGV4dCk7XG5cbiAgICBpZiAodHlwZUFzc2VydGlvbiAhPT0gbnVsbCkge1xuICAgICAgY29uc3Qgc3RhdGVtZW50U3RyaW5nID0gc3RhdGVtZW50LmdldFN0cmluZygpO1xuXG4gICAgICBjb250ZXh0LnRyYWNlKGBVbmlmeWluZyB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IGFzIGEgdHlwZSBhc3NlcnRpb24uLi5gKTtcblxuICAgICAgc3RhdGVtZW50VW5pZmllc0FzVHlwZUFzc2VydGlvbiA9IHRydWU7XG5cbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnVuaWZpZWQgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCBhcyBhIHR5cGUgYXNzZXJ0aW9uLmApO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBzdGF0ZW1lbnRVbmlmaWVzQXNUeXBlQXNzZXJ0aW9uO1xufVxuXG5hc3luYyBmdW5jdGlvbiB1bmlmeVN0YXRlbWVudEFzUHJvcGVydHlBc3NlcnRpb24oc3RhdGVtZW50LCByZWZlcmVuY2UsIHNhdGlzZmllc0Fzc2VydGlvbiwgY29udGV4dCkge1xuICBsZXQgc3RhdGVtZW50VW5pZmllc0FzUHJvcGVydHlBc3NlcnRpb24gPSBmYWxzZTtcblxuICBpZiAocmVmZXJlbmNlID09PSBudWxsKSB7XG4gICAgY29uc3QgcHJvcGVydHlBc3NlcnRpb24gPSBwcm9wZXJ0eUFzc2VydGlvbkZyb21TdGF0ZW1lbnQoc3RhdGVtZW50LCBjb250ZXh0KTtcblxuICAgIGlmIChwcm9wZXJ0eUFzc2VydGlvbiAhPT0gbnVsbCkge1xuICAgICAgY29uc3Qgc3RhdGVtZW50U3RyaW5nID0gc3RhdGVtZW50LmdldFN0cmluZygpO1xuXG4gICAgICBjb250ZXh0LnRyYWNlKGBVbmlmeWluZyB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IGFzIGEgcHJvcGVydHkgYXNzZXJ0aW9uLi4uYCk7XG5cbiAgICAgIGNvbnN0IHRlcm0gPSBwcm9wZXJ0eUFzc2VydGlvbi5nZXRUZXJtKCksXG4gICAgICAgICAgICBlcXVpdmFsZW5jZSA9IGNvbnRleHQuZmluZEVxdWl2YWxlbmNlQnlUZXJtKHRlcm0pO1xuXG4gICAgICBpZiAoZXF1aXZhbGVuY2UgIT09IG51bGwpIHtcbiAgICAgICAgY29uc3QgcHJvcGVydHlBc3NlcnRpb25NYXRjaGVzID0gZXF1aXZhbGVuY2Uuc29tZU90aGVyVGVybSh0ZXJtLCAodGVybSkgPT4geyAgLy8vXG4gICAgICAgICAgY29uc3QgcHJvcGVydHlSZWxhdGlvbiA9IHByb3BlcnR5QXNzZXJ0aW9uLmdldFByb3BlcnR5UmVsYXRpb24oKSxcbiAgICAgICAgICAgICAgICBjb21wYXJlc1RvVGVybUFuZFByb3BlcnR5UmVsYXRpb24gPSBjb250ZXh0LmNvbXBhcmVUZXJtQW5kUHJvcGVydHlSZWxhdGlvbih0ZXJtLCBwcm9wZXJ0eVJlbGF0aW9uKTtcblxuICAgICAgICAgIGlmIChjb21wYXJlc1RvVGVybUFuZFByb3BlcnR5UmVsYXRpb24pIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKHByb3BlcnR5QXNzZXJ0aW9uTWF0Y2hlcykge1xuICAgICAgICAgIHN0YXRlbWVudFVuaWZpZXNBc1Byb3BlcnR5QXNzZXJ0aW9uID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoc3RhdGVtZW50VW5pZmllc0FzUHJvcGVydHlBc3NlcnRpb24pIHtcbiAgICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udW5pZmllZCB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IGFzIGEgcHJvcGVydHkgYXNzZXJ0aW9uLmApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBzdGF0ZW1lbnRVbmlmaWVzQXNQcm9wZXJ0eUFzc2VydGlvbjtcbn1cblxuYXN5bmMgZnVuY3Rpb24gdW5pZnlTdGF0ZW1lbnRXaXRoU2F0aXNmaWVzQXNzZXJ0aW9uKHN0YXRlbWVudCwgcmVmZXJlbmNlLCBzYXRpc2ZpZXNBc3NlcnRpb24sIGNvbnRleHQpIHtcbiAgbGV0IHN0YXRlbWVudFVuaWZpZXNXaXRoU2F0aXNmaWVzQXNzZXJ0aW9uID0gZmFsc2U7XG5cbiAgaWYgKHNhdGlzZmllc0Fzc2VydGlvbiAhPT0gbnVsbCkge1xuICAgIGNvbnN0IHN0YXRlbWVudFN0cmluZyA9IHN0YXRlbWVudC5nZXRTdHJpbmcoKSxcbiAgICAgICAgICBzYXRpc2ZpZXNBc3NlcnRpb25TdHJpbmcgPSBzYXRpc2ZpZXNBc3NlcnRpb24uZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBVbmlmeWluZyB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW1udCB3aXRoIHRoZSAnJHtzYXRpc2ZpZXNBc3NlcnRpb25TdHJpbmd9JyBzYXRpc2ZpZXMgYXNzZXJ0aW9uLi4uYCk7XG5cbiAgICBjb25zdCBzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zID0gY29udGV4dC5nZXRTdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zKCksXG4gICAgICAgICAgc3RhdGVtZW50VW5pZmllcyA9IHNhdGlzZmllc0Fzc2VydGlvbi51bmlmeVN0YXRlbWVudEFuZFN1YnByb29mT3JQcm9vZkFzc2VydGlvbnMoc3RhdGVtZW50LCBzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zLCBjb250ZXh0KTtcblxuICAgIGlmIChzdGF0ZW1lbnRVbmlmaWVzKSB7XG4gICAgICBzdGF0ZW1lbnRVbmlmaWVzV2l0aFNhdGlzZmllc0Fzc2VydGlvbiA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKHN0YXRlbWVudFVuaWZpZXNXaXRoU2F0aXNmaWVzQXNzZXJ0aW9uKSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi51bmlmaWVkIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbW50IHdpdGggdGhlICcke3NhdGlzZmllc0Fzc2VydGlvblN0cmluZ30nIHNhdGlzZmllcyBhc3NlcnRpb24uYCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHN0YXRlbWVudFVuaWZpZXNXaXRoU2F0aXNmaWVzQXNzZXJ0aW9uO1xufVxuXG5hc3luYyBmdW5jdGlvbiBjb21wYXJlU3RhdGVtZW50V2l0aFN1YnByb29mT3JQcm9vZkFzc2VydGlvbnMoc3RhdGVtZW50LCByZWZlcmVuY2UsIHNhdGlzZmllc0Fzc2VydGlvbiwgY29udGV4dCkge1xuICBsZXQgc3RhdGVtZW50RXF1YXRlc1dpdGhTdGVwT3JTdWJwcm9vZnMgPSBmYWxzZTtcblxuICBpZiAocmVmZXJlbmNlID09PSBudWxsKSB7XG4gICAgY29uc3Qgc3RhdGVtZW50U3RyaW5nID0gc3RhdGVtZW50LmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgQ29tcGFyaW5nIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQgd2l0aCB0aGUgc3VicHJvb2ZzIG9yIHByb29mIGFzc3NlcnRpb25zLi4uYCk7XG5cbiAgICBjb25zdCBzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zID0gY29udGV4dC5nZXRTdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zKCksXG4gICAgICAgICAgc3RhdGVtZW50VW5pZmllc1dpdGhTdGVwcyA9IHN0YXRlbWVudC5jb21wYXJlU3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucyhzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zLCBjb250ZXh0KTtcblxuICAgIGlmIChzdGF0ZW1lbnRVbmlmaWVzV2l0aFN0ZXBzKSB7XG4gICAgICBzdGF0ZW1lbnRFcXVhdGVzV2l0aFN0ZXBPclN1YnByb29mcyA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKHN0YXRlbWVudEVxdWF0ZXNXaXRoU3RlcE9yU3VicHJvb2ZzKSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi5jb21wYXJlZCB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IHdpdGggdGhlIHN1YnByb29mcyBvciBwcm9vZiBhc3NzZXJ0aW9ucy5gKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gc3RhdGVtZW50RXF1YXRlc1dpdGhTdGVwT3JTdWJwcm9vZnM7XG59XG5cbmV4cG9ydCBjb25zdCB1bmlmeVN0YXRlbWVudHMgPSBbXG4gIHVuaWZ5U3RhdGVtZW50V2l0aFJ1bGUsXG4gIHVuaWZ5U3RhdGVtZW50V2l0aFJlZmVyZW5jZSxcbiAgdW5pZnlTdGF0ZW1lbnRBc1NhdGlzZmllc0Fzc2VydGlvbixcbiAgdW5pZnlTdGF0ZW1lbnRXaXRoVG9wTGV2ZWxBc3NlcnRpb24sXG4gIHVuaWZ5U3RhdGVtZW50QUVxdWFsaXR5LFxuICB1bmlmeVN0YXRlbWVudEFzSnVkZ2VtZW50LFxuICB1bmlmeVN0YXRlbWVudEFzVHlwZUFzc2VydGlvbixcbiAgdW5pZnlTdGF0ZW1lbnRBc1Byb3BlcnR5QXNzZXJ0aW9uLFxuICB1bmlmeVN0YXRlbWVudFdpdGhTYXRpc2ZpZXNBc3NlcnRpb24sXG4gIGNvbXBhcmVTdGF0ZW1lbnRXaXRoU3VicHJvb2ZPclByb29mQXNzZXJ0aW9uc1xuXTtcbiJdLCJuYW1lcyI6WyJ1bmlmeVN0YXRlbWVudHMiLCJiYWNrd2FyZHNTb21lIiwiYXJyYXlVdGlsaXRpZXMiLCJ1bmlmeVN0YXRlbWVudFdpdGhSdWxlIiwic3RhdGVtZW50IiwicmVmZXJlbmNlIiwic2F0aXNmaWVzQXNzZXJ0aW9uIiwiY29udGV4dCIsInN0YXRlbWVudFVuaWZpZXNXaXRoUnVsZSIsInJ1bGUiLCJydWxlU3RyaW5nIiwic3RhdGVtZW50U3RyaW5nIiwic3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucyIsInN0YXRlbWVudEFuZFN1YnByb29mT3JQcm9vZkFzc2VydGlvbnNVbmlmeSIsImZpbmRSdWxlQnlSZWZlcmVuY2UiLCJnZXRTdHJpbmciLCJ0cmFjZSIsImdldFN1YnByb29mT3JQcm9vZkFzc2VydGlvbnMiLCJ1bmlmeVN0YXRlbWVudEFuZFN1YnByb29mT3JQcm9vZkFzc2VydGlvbnMiLCJkZWJ1ZyIsInVuaWZ5U3RhdGVtZW50V2l0aFJlZmVyZW5jZSIsInN0YXRlbWVudFVuaWZpZXNXaXRoUmVmZXJlbmNlIiwicmVmZXJlbmNlU3RyaW5nIiwibWV0YXZhcmlhYmxlVmFsaWRhdGVzIiwibWV0YXZhcmlhYmxlIiwidmFsaWRhdGVNZXRhdmFyaWFibGUiLCJnZXRNZXRhdmFyaWFibGUiLCJ1bmlmeVN0YXRlbWVudEFzU2F0aXNmaWVzQXNzZXJ0aW9uIiwic3RhdGVtZW50VW5pZmllc0FzU2F0aXNmaWVzQXNzZXJ0aW9uIiwic3RhdGVkIiwiYXNzaWdubWVudHMiLCJ0b3BMZXZlbEFzc2VydGlvbiIsImF4aW9tIiwic2F0aXNmaWFibGUiLCJzdWJzdGl0dXRpb25zIiwidG9wTGV2ZWxBc3NlcnRpb25VbmlmaWVzIiwic3Vic3RpdHV0aW9uc0NvcnJlbGF0ZXMiLCJheGlvbVN0cmluZyIsInNhdGlzZmllc0Fzc2VydGlvbkZyb21TdGF0ZW1lbnQiLCJ2ZXJpZnlTaWduYXR1cmUiLCJzdGVwc09yU3VicHJvb2YiLCJzdGVwT3JTdWJQcm9vZlVuaWZpZXNXSXRoU2F0aXNmaWVzQXNzZXJ0aW9uIiwidW5pZnlXaXRoU2F0aXNmaWVzQXNzZXJ0aW9uIiwiZmluZFRvcExldmVsQXNzZXJ0aW9uQnlSZWZlcmVuY2UiLCJnZXRSZWZlcmVuY2UiLCJmaW5kQXhpb21CeVJlZmVyZW5jZSIsImlzU2F0aXNmaWFibGUiLCJ1bmlmeVRvcExldmVsQXNzZXJ0aW9uIiwiY29ycmVsYXRlU3Vic3RpdHV0aW9ucyIsInVuaWZ5U3RhdGVtZW50V2l0aFRvcExldmVsQXNzZXJ0aW9uIiwic3RhdGVtZW50VW5pZmllc1dpdGhUb3BMZXZlbEFzc2VydGlvbiIsInRvcExldmVsQXNzZXJ0aW9uU3RyaW5nIiwidW5pZnlTdGF0ZW1lbnRBRXF1YWxpdHkiLCJzdGF0ZW1lbnRVbmlmaWVzQUVxdWFsaXR5IiwiZXF1YWxpdHkiLCJlcXVhbGl0eUVxdWFsIiwiZXF1YWxpdHlGcm9tU3RhdGVtZW50IiwiaXNFcXVhbCIsInVuaWZ5U3RhdGVtZW50QXNKdWRnZW1lbnQiLCJzdGF0ZW1lbnRVbmlmaWVzQXNKdWRnZW1lbnQiLCJqdWRnZW1lbnQiLCJqdWRnZW1lbnRGcm9tU3RhdGVtZW50IiwidW5pZnlTdGF0ZW1lbnRBc1R5cGVBc3NlcnRpb24iLCJzdGF0ZW1lbnRVbmlmaWVzQXNUeXBlQXNzZXJ0aW9uIiwidHlwZUFzc2VydGlvbiIsInR5cGVBc3NlcnRpb25Gcm9tU3RhdGVtZW50IiwidW5pZnlTdGF0ZW1lbnRBc1Byb3BlcnR5QXNzZXJ0aW9uIiwic3RhdGVtZW50VW5pZmllc0FzUHJvcGVydHlBc3NlcnRpb24iLCJwcm9wZXJ0eUFzc2VydGlvbiIsInRlcm0iLCJlcXVpdmFsZW5jZSIsInByb3BlcnR5QXNzZXJ0aW9uTWF0Y2hlcyIsInByb3BlcnR5QXNzZXJ0aW9uRnJvbVN0YXRlbWVudCIsImdldFRlcm0iLCJmaW5kRXF1aXZhbGVuY2VCeVRlcm0iLCJzb21lT3RoZXJUZXJtIiwicHJvcGVydHlSZWxhdGlvbiIsImdldFByb3BlcnR5UmVsYXRpb24iLCJjb21wYXJlc1RvVGVybUFuZFByb3BlcnR5UmVsYXRpb24iLCJjb21wYXJlVGVybUFuZFByb3BlcnR5UmVsYXRpb24iLCJ1bmlmeVN0YXRlbWVudFdpdGhTYXRpc2ZpZXNBc3NlcnRpb24iLCJzdGF0ZW1lbnRVbmlmaWVzV2l0aFNhdGlzZmllc0Fzc2VydGlvbiIsInNhdGlzZmllc0Fzc2VydGlvblN0cmluZyIsInN0YXRlbWVudFVuaWZpZXMiLCJjb21wYXJlU3RhdGVtZW50V2l0aFN1YnByb29mT3JQcm9vZkFzc2VydGlvbnMiLCJzdGF0ZW1lbnRFcXVhdGVzV2l0aFN0ZXBPclN1YnByb29mcyIsInN0YXRlbWVudFVuaWZpZXNXaXRoU3RlcHMiLCJjb21wYXJlU3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucyJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7K0JBZ1ZhQTs7O2VBQUFBOzs7eUJBOVVrQjsrREFFVjt5QkFNMkI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7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
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "occam-verify-cli",
3
3
  "author": "James Smith",
4
- "version": "1.0.609",
4
+ "version": "1.0.612",
5
5
  "license": "MIT, Anti-996",
6
6
  "homepage": "https://github.com/djalbat/occam-verify-cli",
7
7
  "description": "Occam's Verifier",
@@ -13,7 +13,7 @@
13
13
  "argumentative": "^2.0.36",
14
14
  "necessary": "^17.0.9",
15
15
  "occam-file-system": "^6.0.505",
16
- "occam-furtle": "^3.0.107",
16
+ "occam-furtle": "^3.0.109",
17
17
  "occam-grammars": "^1.3.510",
18
18
  "occam-languages": "^0.0.79",
19
19
  "occam-lexers": "^23.1.34",
@@ -216,7 +216,7 @@ export default class EphemeralContext extends Context {
216
216
  return reference;
217
217
  }
218
218
 
219
- findSubstitutionBySubstitutionNode(substitutionNode, generalContext, specificContext) {
219
+ findSubstitutionBySubstitutionNode(substitutionNode) {
220
220
  const substitution = this.substitutions.find((substitution) => {
221
221
  const substitutionNodeMatches = substitution.matchNode(substitutionNode);
222
222
 
@@ -41,8 +41,10 @@ const { push, filter } = arrayUtilities,
41
41
 
42
42
  export default class NominalFileContext extends FileContext {
43
43
  constructor(context, filePath, tokens, node, lexer, parser, types, rules, axioms, lemmas, theorems, variables, metaLemmas, conjectures, combinators, typePrefixes, constructors, metatheorems, metavariables) {
44
- super(context, filePath, tokens, node, lexer, parser);
44
+ super(context, filePath, tokens, node);
45
45
 
46
+ this.lexer = lexer;
47
+ this.parser = parser;
46
48
  this.context = context;
47
49
  this.filePath = filePath;
48
50
  this.tokens = tokens;
@@ -63,33 +65,25 @@ export default class NominalFileContext extends FileContext {
63
65
  }
64
66
 
65
67
  getLexer() {
66
- let lexer = super.getLexer();
67
-
68
- if (lexer === null) {
68
+ if (this.lexer === null) {
69
69
  const combinedCustomGrammar = this.getCombinedCustomGrammar(),
70
70
  nominalLexer = nominalLexerFromCombinedCustomGrammar(NominalLexer, combinedCustomGrammar);
71
71
 
72
- lexer = nominalLexer; ///
73
-
74
- this.setLexer(lexer);
72
+ this.lexer = nominalLexer; ///
75
73
  }
76
74
 
77
- return lexer;
75
+ return this.lexer;
78
76
  }
79
77
 
80
78
  getParser() {
81
- let parser = super.getParser();
82
-
83
- if (parser === null) {
79
+ if (this.parser === null) {
84
80
  const combinedCustomGrammar = this.getCombinedCustomGrammar(),
85
81
  nominalParser = nominalParserFromCombinedCustomGrammar(NominalParser, combinedCustomGrammar);
86
82
 
87
- parser = nominalParser; ///
88
-
89
- this.setParser(parser);
83
+ this.parser = nominalParser; ///
90
84
  }
91
85
 
92
- return parser;
86
+ return this.parser;
93
87
  }
94
88
 
95
89
  getJudgements() {
@@ -630,17 +624,13 @@ export default class NominalFileContext extends FileContext {
630
624
  return label;
631
625
  }
632
626
 
633
- findJudgementByMetavariable(metavariable) {
627
+ findJudgementByMetavariableName(metavariableName) {
634
628
  const judgements = this.getJudgements(),
635
629
  judgement = judgements.find((judgement) => {
636
- const judgementSingular = judgement.isSingular();
637
-
638
- if (judgementSingular) {
639
- const judgementMetavariableComparesToMetavariable = judgement.compareMetavariable(metavariable);
630
+ const judgementMetavariableComparesToMetavariable = judgement.matchMetavariableName(metavariableName);
640
631
 
641
- if (judgementMetavariableComparesToMetavariable) {
642
- return true;
643
- }
632
+ if (judgementMetavariableComparesToMetavariable) {
633
+ return true;
644
634
  }
645
635
  }) || null;
646
636
 
@@ -885,7 +875,7 @@ export default class NominalFileContext extends FileContext {
885
875
  constructors = [],
886
876
  metatheorems = [],
887
877
  metavariables = [],
888
- nominalFileContext = FileContext.fromFileLexerAndParser(NominalFileContext, file, lexer, parser, types, rules, axioms, lemmas, theorems, variables, metaLemmas, conjectures, combinators, typePrefixes, constructors, metatheorems, metavariables, context);
878
+ nominalFileContext = FileContext.fromFile(NominalFileContext, file, lexer, parser, types, rules, axioms, lemmas, theorems, variables, metaLemmas, conjectures, combinators, typePrefixes, constructors, metatheorems, metavariables, context);
889
879
 
890
880
  return nominalFileContext;
891
881
  }
@@ -906,7 +896,7 @@ export default class NominalFileContext extends FileContext {
906
896
  constructors = null,
907
897
  metatheorems = null,
908
898
  metavariables = null,
909
- nominalFileContext = FileContext.fromFilePathLexerAndParser(NominalFileContext, filePath, lexer, parser, types, rules, axioms, lemmas, theorems, variables, metaLemmas, conjectures, combinators, typePrefixes, constructors, metatheorems, metavariables, context);
899
+ nominalFileContext = FileContext.fromFilePath(NominalFileContext, filePath, lexer, parser, types, rules, axioms, lemmas, theorems, variables, metaLemmas, conjectures, combinators, typePrefixes, constructors, metatheorems, metavariables, context);
910
900
 
911
901
  return nominalFileContext;
912
902
  }
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
 
3
3
  import { arrayUtilities } from "necessary";
4
- import { metavariablesFromSubstitutions } from "../utilities/substitutions";
4
+ import { metavariableNamesFromSubstitutions } from "../utilities/substitutions";
5
5
  import { substitutionsStringFromSubstitutions } from "../utilities/string";
6
6
 
7
7
  import Context from "../context";
@@ -120,10 +120,10 @@ export default class LiminalContext extends Context {
120
120
 
121
121
  resolveSubstitutions(generalContext, specificContext) {
122
122
  const substitutions = this.getSubstitutions(),
123
- metavariables = metavariablesFromSubstitutions(substitutions, generalContext, specificContext);
123
+ metavariableNames = metavariableNamesFromSubstitutions(substitutions);
124
124
 
125
- metavariables.forEach((metavariable) => {
126
- const complexSubstitutions = this.findComplexSubstitutionsByMetavariable(metavariable),
125
+ metavariableNames.forEach((metavariableName) => {
126
+ const complexSubstitutions = this.findComplexSubstitutionsByMetavariableName(metavariableName),
127
127
  complexSubstitutionsResolved = complexSubstitutions.every((complexSubstitution) => {
128
128
  const substitution = complexSubstitution, ///
129
129
  resolved = substitution.isResolved();
@@ -141,9 +141,9 @@ export default class LiminalContext extends Context {
141
141
 
142
142
  areSubstitutionsResolved(generalContext, specificContext) {
143
143
  const substitutions = this.getSubstitutions(),
144
- metavariables = metavariablesFromSubstitutions(substitutions, generalContext, specificContext),
145
- resolved = metavariables.every((metavariable) => {
146
- const complexSubstitutions = this.findComplexSubstitutionsByMetavariable(metavariable),
144
+ metavariableNames = metavariableNamesFromSubstitutions(substitutions),
145
+ resolved = metavariableNames.every((metavariableName) => {
146
+ const complexSubstitutions = this.findComplexSubstitutionsByMetavariableName(metavariableName),
147
147
  complexSubstitutionsResolved = complexSubstitutions.every((complexSubstitution) => {
148
148
  const complexSubstitutionResolved = complexSubstitution.isResolved();
149
149
 
@@ -185,14 +185,14 @@ export default class LiminalContext extends Context {
185
185
  return substitutions;
186
186
  }
187
187
 
188
- findSubstitutionByVariable(variable, generalContext, specifiContext) {
188
+ findSubstitutionByVariableIdentifier(variable) {
189
189
  const substitution = this.findSubstitution((substitution) => {
190
190
  const substitutionVariable = substitution.getVariable();
191
191
 
192
192
  if (substitutionVariable !== null) {
193
- const substitutionVariableEqualToVariable = substitutionVariable.isEqualTo(variable);
193
+ const substitutionVariableMatchesVariableIdentifier = substitutionVariable.matchVariableIdentifier(variableIdentifier);
194
194
 
195
- if (substitutionVariableEqualToVariable) {
195
+ if (substitutionVariableMatchesVariableIdentifier) {
196
196
  return true;
197
197
  }
198
198
  }
@@ -201,31 +201,27 @@ export default class LiminalContext extends Context {
201
201
  return substitution;
202
202
  }
203
203
 
204
- findSubstitutionByMetavariable(metavariable, generalContext, specificContext) {
204
+ findSubstitutionByMetavariableName(metavariableName) {
205
205
  const substitution = this.findSubstitution((substitution) => { ///
206
- const substitutionMetavariable = substitution.getMetavariable(generalContext, specificContext);
206
+ const substitutionMatchesMetavariableName = substitution.matchMetavariableName(metavariableName);
207
207
 
208
- if (substitutionMetavariable !== null) {
209
- const substitutionMetavvariableComparesToMetavariable = substitutionMetavariable.compare(metavariable);
210
-
211
- if (substitutionMetavvariableComparesToMetavariable) {
212
- return true;
213
- }
208
+ if (substitutionMatchesMetavariableName) {
209
+ return true;
214
210
  }
215
211
  }) || null;
216
212
 
217
213
  return substitution;
218
214
  }
219
215
 
220
- findSimpleSubstitutionByMetavariable(metavariable) {
216
+ findSimpleSubstitutionByMetavariableName(metavariableName) {
221
217
  const simpleSubstitution = this.findSubstitution((substitution) => {
222
218
  const substitutionSimple = substitution.isSimple();
223
219
 
224
220
  if (substitutionSimple) {
225
221
  const simpleSubstitution = substitution, ///
226
- simpleSubstitutionMetavariableComparesToMetavariable = simpleSubstitution.compareMetavariable(metavariable);
222
+ simpleSubstitutionMatchesMetavariableName = simpleSubstitution.matchMetavariableName(metavariableName);
227
223
 
228
- if (simpleSubstitutionMetavariableComparesToMetavariable) {
224
+ if (simpleSubstitutionMatchesMetavariableName) {
229
225
  return true;
230
226
  }
231
227
  }
@@ -234,30 +230,30 @@ export default class LiminalContext extends Context {
234
230
  return simpleSubstitution;
235
231
  }
236
232
 
237
- findComplexSubstitutionsByMetavariable(metavariable) {
238
- const complexSubstitutions = this.findSubstitutions((substitution) => {
233
+ findComplexSubstitutionsByMetavariableName(metavariableName) {
234
+ const complexSubstitution = this.findSubstitutions((substitution) => {
239
235
  const substitutionComplex = substitution.isComplex();
240
236
 
241
237
  if (substitutionComplex) {
242
- const complexSubstitution = substitution, ///
243
- complexSubstitutionMetavariableComparesToMetavariable = complexSubstitution.compareMetavariable(metavariable);
238
+ const complexSubstitution = substitution, ///
239
+ complexSubstitutionMatchesMetavariableName = complexSubstitution.matchMetavariableName(metavariableName);
244
240
 
245
- if (complexSubstitutionMetavariableComparesToMetavariable) {
241
+ if (complexSubstitutionMatchesMetavariableName) {
246
242
  return true;
247
243
  }
248
244
  }
249
- });
245
+ }) || null;
250
246
 
251
- return complexSubstitutions;
247
+ return complexSubstitution;
252
248
  }
253
249
 
254
- findSubstitutionByMetavariableAndSubstitution(metavariable, substitution, generalContet, specificContext) {
250
+ findSubstitutionByMetavariableNameAndSubstitution(metavariableName, substitution) {
255
251
  const substitutionA = substitution; ///
256
252
 
257
253
  substitution = this.findSubstitution((substitution) => { ///
258
- const substitutionMetavariablCompareslToMetavariable = substitution.compareMetavariable(metavariable);
254
+ const substitutionMatchesMetavariableName = substitution.matchMetavariableName(metavariableName);
259
255
 
260
- if (substitutionMetavariablCompareslToMetavariable) {
256
+ if (substitutionMatchesMetavariableName) {
261
257
  const substitutionB = substitution, ///
262
258
  substitutionBSubstitutionComparesToSubstitutionA = substitutionB.compare(substitutionA);
263
259
 
@@ -270,15 +266,15 @@ export default class LiminalContext extends Context {
270
266
  return substitution;
271
267
  }
272
268
 
273
- isSimpleSubstitutionPresentByMetavariable(metavariable) {
274
- const simpleSubstitution = this.findSimpleSubstitutionByMetavariable(metavariable),
269
+ isSimpleSubstitutionPresentByMetavariableName(metavariableName) {
270
+ const simpleSubstitution = this.findSimpleSubstitutionByMetavariableName(metavariableName),
275
271
  simpleSubstitutionPresent = (simpleSubstitution !== null);
276
272
 
277
273
  return simpleSubstitutionPresent;
278
274
  }
279
275
 
280
- isSubstitutionPresentByMetavariableAndSubstitution(metavariable, substitution, generalContet, specificContext) {
281
- substitution = this.findSubstitutionByMetavariableAndSubstitution(metavariable, substitution, generalContet, specificContext); ///
276
+ isSubstitutionPresentByMetavariableNameAndSubstitution(metavariableName, substitution) {
277
+ substitution = this.findSubstitutionByMetavariableNameAndSubstitution(metavariableName, substitution); ///
282
278
 
283
279
  const substitutionPresent = (substitution !== null);
284
280