occam-verify-cli 1.0.955 → 1.0.972

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 (89) hide show
  1. package/lib/context/bounded.js +11 -7
  2. package/lib/context.js +17 -5
  3. package/lib/element/assertion/signature.js +17 -19
  4. package/lib/element/assertion/subproof.js +36 -39
  5. package/lib/element/assertion/type.js +20 -1
  6. package/lib/element/assumption/metaLevel.js +18 -17
  7. package/lib/element/assumption.js +52 -3
  8. package/lib/element/combinator.js +10 -12
  9. package/lib/element/conclusion.js +33 -33
  10. package/lib/element/constructor.js +8 -12
  11. package/lib/element/deduction.js +33 -33
  12. package/lib/element/equivalence.js +11 -7
  13. package/lib/element/hypothesis.js +45 -19
  14. package/lib/element/judgement.js +1 -1
  15. package/lib/element/label.js +9 -11
  16. package/lib/element/parameter.js +2 -2
  17. package/lib/element/procedureCall.js +1 -1
  18. package/lib/element/proofAssertion/premise.js +98 -87
  19. package/lib/element/proofAssertion/step.js +27 -27
  20. package/lib/element/proofAssertion/supposition.js +99 -88
  21. package/lib/element/proofAssertion.js +3 -3
  22. package/lib/element/property.js +1 -2
  23. package/lib/element/reference.js +30 -38
  24. package/lib/element/section.js +1 -1
  25. package/lib/element/signature.js +38 -47
  26. package/lib/element/statement.js +18 -58
  27. package/lib/element/substitution/frame.js +33 -38
  28. package/lib/element/substitution/reference.js +12 -13
  29. package/lib/element/substitution/statement.js +26 -31
  30. package/lib/element/substitution/term.js +32 -37
  31. package/lib/element/term.js +2 -2
  32. package/lib/element/topLevelAssertion/axiom.js +33 -34
  33. package/lib/element/topLevelAssertion.js +30 -7
  34. package/lib/element/topLevelMetaAssertion.js +2 -2
  35. package/lib/process/discharge.js +38 -0
  36. package/lib/process/unification.js +228 -0
  37. package/lib/process/unify.js +9 -5
  38. package/lib/process/validation.js +291 -0
  39. package/lib/utilities/context.js +69 -101
  40. package/lib/utilities/element.js +2 -4
  41. package/lib/utilities/string.js +4 -4
  42. package/package.json +4 -4
  43. package/src/context/bounded.js +19 -7
  44. package/src/context.js +26 -6
  45. package/src/element/assertion/signature.js +21 -26
  46. package/src/element/assertion/subproof.js +43 -46
  47. package/src/element/assertion/type.js +30 -1
  48. package/src/element/assumption/metaLevel.js +26 -22
  49. package/src/element/assumption.js +80 -2
  50. package/src/element/combinator.js +11 -14
  51. package/src/element/conclusion.js +38 -37
  52. package/src/element/constructor.js +9 -14
  53. package/src/element/deduction.js +38 -37
  54. package/src/element/equivalence.js +17 -13
  55. package/src/element/hypothesis.js +59 -19
  56. package/src/element/judgement.js +1 -1
  57. package/src/element/label.js +10 -12
  58. package/src/element/parameter.js +1 -1
  59. package/src/element/procedureCall.js +1 -1
  60. package/src/element/proofAssertion/premise.js +123 -107
  61. package/src/element/proofAssertion/step.js +29 -29
  62. package/src/element/proofAssertion/supposition.js +124 -108
  63. package/src/element/proofAssertion.js +2 -2
  64. package/src/element/property.js +0 -1
  65. package/src/element/reference.js +36 -47
  66. package/src/element/section.js +1 -1
  67. package/src/element/signature.js +42 -53
  68. package/src/element/statement.js +18 -89
  69. package/src/element/substitution/frame.js +37 -47
  70. package/src/element/substitution/reference.js +13 -16
  71. package/src/element/substitution/statement.js +27 -34
  72. package/src/element/substitution/term.js +37 -46
  73. package/src/element/term.js +1 -1
  74. package/src/element/topLevelAssertion/axiom.js +43 -45
  75. package/src/element/topLevelAssertion.js +42 -6
  76. package/src/element/topLevelMetaAssertion.js +2 -2
  77. package/src/process/discharge.js +33 -0
  78. package/src/{utilities → process}/unification.js +21 -27
  79. package/src/process/unify.js +9 -5
  80. package/src/{utilities → process}/validation.js +2 -2
  81. package/src/utilities/context.js +78 -123
  82. package/src/utilities/element.js +2 -5
  83. package/src/utilities/string.js +6 -6
  84. package/lib/context/ephemeral.js +0 -28
  85. package/lib/context/synoptic.js +0 -255
  86. package/lib/utilities/unification.js +0 -233
  87. package/lib/utilities/validation.js +0 -291
  88. package/src/context/ephemeral.js +0 -17
  89. package/src/context/synoptic.js +0 -361
@@ -218,9 +218,9 @@ function topLevelMetaAssertionStringFromLabelSuppositionsAndDeduction(label, sup
218
218
  function topLevelAssertionStringFromLabelsSignatureSuppositionsAndDeduction(labels, signature, suppositions, deduction) {
219
219
  let topLevelAssertionString = _constants.EMPTY_STRING;
220
220
  const deductionString = deduction.getString(), labelsString = labelsStringFromLabels(labels), signatureString = signatureStringFromSignature(signature), suppositionsString = suppositionsStringFromSuppositions(suppositions);
221
- topLevelAssertionString = labelsString !== null ? `${topLevelAssertionString}${labelsString} :: ` : `${topLevelAssertionString}`;
222
- topLevelAssertionString = signatureString !== null ? `${topLevelAssertionString} ${signatureString}` : `${topLevelAssertionString}`;
223
- topLevelAssertionString = suppositionsString !== null ? `${topLevelAssertionString}[${suppositionsString}]...${deductionString}` : `${topLevelAssertionString}${deductionString}`;
221
+ topLevelAssertionString = labelsString !== null ? `${topLevelAssertionString}${labelsString}` : `${topLevelAssertionString}`;
222
+ topLevelAssertionString = signatureString !== null ? `${topLevelAssertionString}${signatureString}` : `${topLevelAssertionString}`;
223
+ topLevelAssertionString = suppositionsString !== null ? `${topLevelAssertionString} :: [${suppositionsString}]...${deductionString}` : `${topLevelAssertionString} :: ${deductionString}`;
224
224
  return topLevelAssertionString;
225
225
  }
226
226
  function statementSubstitutionStringFromStatementMetavariableAndSubstitution(statement, metavariable, substitution) {
@@ -228,4 +228,4 @@ function statementSubstitutionStringFromStatementMetavariableAndSubstitution(sta
228
228
  return statementSubstitutionString;
229
229
  }
230
230
 
231
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsaXRpZXMvc3RyaW5nLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBiYXNlVHlwZUZyb21Ob3RoaW5nIH0gZnJvbSBcIi4uL3V0aWxpdGllcy90eXBlXCI7XG5pbXBvcnQgeyBFTVBUWV9TVFJJTkcsIFBST1ZJU0lPTkFMLCBQUk9WSVNJT05BTExZIH0gZnJvbSBcIi4uL2NvbnN0YW50c1wiO1xuXG5leHBvcnQgZnVuY3Rpb24gdGVybXNTdHJpbmdGcm9tVGVybXModGVybXMpIHtcbiAgY29uc3QgdGVybXNTdHJpbmcgPSB0ZXJtcy5yZWR1Y2UoKHRlcm1zU3RyaW5nLCB0ZXJtKSA9PiB7XG4gICAgY29uc3QgdGVybVN0cmluZyA9IHRlcm0uZ2V0U3RyaW5nKCk7XG5cbiAgICB0ZXJtc1N0cmluZyA9ICh0ZXJtc1N0cmluZyAhPT0gbnVsbCkgP1xuICAgICAgICAgICAgICAgICAgIGAke3Rlcm1zU3RyaW5nfSwgJHt0ZXJtU3RyaW5nfWAgOlxuICAgICAgICAgICAgICAgICAgICAgIHRlcm1TdHJpbmc7XG5cbiAgICByZXR1cm4gdGVybXNTdHJpbmc7XG4gIH0sIG51bGwpO1xuXG4gIHJldHVybiB0ZXJtc1N0cmluZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxhYmVsc1N0cmluZ0Zyb21MYWJlbHMobGFiZWxzKSB7XG4gIGNvbnN0IGxhYmVsc1N0cmluZyA9IGxhYmVscy5yZWR1Y2UoKGxhYmVsc1N0cmluZywgbGFiZWwpID0+IHtcbiAgICBjb25zdCBsYWJlbFN0cmluZyA9IGxhYmVsLmdldFN0cmluZygpO1xuXG4gICAgbGFiZWxzU3RyaW5nID0gKGxhYmVsc1N0cmluZyA9PT0gbnVsbCkgP1xuICAgICAgICAgICAgICAgICAgICAgbGFiZWxTdHJpbmc6IC8vL1xuICAgICAgICAgICAgICAgICAgICAgIGAke2xhYmVsc1N0cmluZ30sICR7bGFiZWxTdHJpbmd9YDtcblxuICAgIHJldHVybiBsYWJlbHNTdHJpbmc7XG4gIH0sIG51bGwpO1xuXG4gIHJldHVybiBsYWJlbHNTdHJpbmc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcmVtaXNlc1N0cmluZ0Zyb21QcmVtaXNlcyhwcmVtaXNlcykge1xuICBjb25zdCBwcmVtaXNlc1N0cmluZyA9IHByZW1pc2VzLnJlZHVjZSgocHJlbWlzZXNTdHJpbmcsIHByZW1pc2UpID0+IHtcbiAgICBjb25zdCBwcmVtaXNlU3RyaW5nID0gcHJlbWlzZS5nZXRTdHJpbmcoKTtcblxuICAgIHByZW1pc2VzU3RyaW5nID0gKHByZW1pc2VzU3RyaW5nICE9PSBudWxsKSA/XG4gICAgICAgICAgICAgICAgICAgICAgIGAke3ByZW1pc2VzU3RyaW5nfSwgJHtwcmVtaXNlU3RyaW5nfWAgOlxuICAgICAgICAgICAgICAgICAgICAgICAgIHByZW1pc2VTdHJpbmc7ICAvLy9cblxuICAgIHJldHVybiBwcmVtaXNlc1N0cmluZztcbiAgfSwgbnVsbCk7XG5cbiAgcmV0dXJuIHByZW1pc2VzU3RyaW5nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaHlwb3RoZXNlc1N0cmluZ0Zyb21IeXBvdGhlc2VzKGh5cG90aGVzZXMpIHtcbiAgY29uc3QgaHlwb3RoZXNlc1N0cmluZyA9IGh5cG90aGVzZXMucmVkdWNlKChoeXBvdGhlc2VzU3RyaW5nLCBoeXBvdGhlc2lzKSA9PiB7XG4gICAgY29uc3QgaHlwb3RoZXNpc1N0cmluZyA9IGh5cG90aGVzaXMuZ2V0U3RyaW5nKCk7XG5cbiAgICBoeXBvdGhlc2VzU3RyaW5nID0gKGh5cG90aGVzZXNTdHJpbmcgIT09IG51bGwpID9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgYCR7aHlwb3RoZXNlc1N0cmluZ30sICR7aHlwb3RoZXNpc1N0cmluZ31gIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoeXBvdGhlc2lzU3RyaW5nOyAgLy8vXG5cbiAgICByZXR1cm4gaHlwb3RoZXNlc1N0cmluZztcbiAgfSwgbnVsbCk7XG5cbiAgcmV0dXJuIGh5cG90aGVzZXNTdHJpbmc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdXBlclR5cGVzU3RyaW5nRnJvbVN1cGVyVHlwZXMoc3VwZXJUeXBlcykge1xuICBsZXQgc3VwZXJUeXBlc1N0cmluZztcblxuICBjb25zdCBiYXNlVHlwZSA9IGJhc2VUeXBlRnJvbU5vdGhpbmcoKTtcblxuICBzdXBlclR5cGVzU3RyaW5nID0gc3VwZXJUeXBlcy5yZWR1Y2UoKHN1cGVyVHlwZXNTdHJpbmcsIHN1cGVyVHlwZSkgPT4ge1xuICAgIGlmIChzdXBlclR5cGUgIT09IGJhc2VUeXBlKSB7XG4gICAgICBjb25zdCBzdXBlclR5cGVTdHJpbmcgPSBzdXBlclR5cGUuZ2V0U3RyaW5nKCk7XG5cbiAgICAgIHN1cGVyVHlwZXNTdHJpbmcgPSAoc3VwZXJUeXBlc1N0cmluZyA9PT0gbnVsbCkgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgYCcke3N1cGVyVHlwZVN0cmluZ30nYCA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgJHtzdXBlclR5cGVzU3RyaW5nfSwgJyR7c3VwZXJUeXBlU3RyaW5nfSdgO1xuICAgIH1cblxuICAgIHJldHVybiBzdXBlclR5cGVzU3RyaW5nO1xuICB9LCBudWxsKTtcblxuICBzdXBlclR5cGVzU3RyaW5nID0gKHN1cGVyVHlwZXNTdHJpbmcgIT09IG51bGwpID9cbiAgICAgICAgICAgICAgICAgICAgICAgYDoke3N1cGVyVHlwZXNTdHJpbmd9YCA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgIEVNUFRZX1NUUklORztcblxuICByZXR1cm4gc3VwZXJUeXBlc1N0cmluZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcmFtZXRlcnNTdHJpbmdGcm9tUGFyYW1ldGVycyhwYXJhbWV0ZXJzKSB7XG4gIGNvbnN0IHBhcmFtZXRlcnNTdHJpbmcgPSBwYXJhbWV0ZXJzLnJlZHVjZSgocGFyYW1ldGVyc1N0cmluZywgcGFyYW1ldGVyKSA9PiB7XG4gICAgY29uc3QgcGFyYW1ldGVyU3RyaW5nID0gcGFyYW1ldGVyLmdldFN0cmluZygpO1xuXG4gICAgcGFyYW1ldGVyc1N0cmluZyA9IChwYXJhbWV0ZXJzU3RyaW5nID09PSBudWxsKSA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVyU3RyaW5nIDogLy8vXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGAke3BhcmFtZXRlcnNTdHJpbmd9LCAke3BhcmFtZXRlclN0cmluZ31gO1xuXG4gICAgcmV0dXJuIHBhcmFtZXRlcnNTdHJpbmc7XG4gIH0sIG51bGwpO1xuXG4gIHJldHVybiBwYXJhbWV0ZXJzU3RyaW5nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvdmlzaW5hbFN0cmluZ0Zyb21Qcm92aXNpb25hbChwcm92aXNpb25hbCkge1xuICBjb25zdCBwcm92aXNpbmFsU3RyaW5nID0gcHJvdmlzaW9uYWwgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGAke1BST1ZJU0lPTkFMfSBgIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVNUFRZX1NUUklORztcblxuICByZXR1cm4gcHJvdmlzaW5hbFN0cmluZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb3Zpc2lvbmFsbHlTdHJpbmdGcm9tUHJvdmlzaW9uYWwocHJvdmlzaW9uYWwpIHtcbiAgY29uc3QgcHJvdmlzaW5hbGx5U3RyaW5nID0gcHJvdmlzaW9uYWwgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYCAke1BST1ZJU0lPTkFMTFl9YCA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFTVBUWV9TVFJJTkc7XG5cbiAgcmV0dXJuIHByb3Zpc2luYWxseVN0cmluZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN1cHBvc2l0aW9uc1N0cmluZ0Zyb21TdXBwb3NpdGlvbnMoc3VwcG9zaXRpb25zKSB7XG4gIGNvbnN0IHN1cHBvc2l0aW9uc1N0cmluZyA9IHN1cHBvc2l0aW9ucy5yZWR1Y2UoKHN1cHBvc2l0aW9uc1N0cmluZywgc3VwcG9zaXRpb24pID0+IHtcbiAgICBjb25zdCBzdXBwb3NpdGlvblN0cmluZyA9IHN1cHBvc2l0aW9uLmdldFN0cmluZygpO1xuXG4gICAgc3VwcG9zaXRpb25zU3RyaW5nID0gKHN1cHBvc2l0aW9uc1N0cmluZyA9PT0gbnVsbCkgP1xuICAgICAgc3VwcG9zaXRpb25TdHJpbmc6IC8vL1xuICAgICAgYCR7c3VwcG9zaXRpb25zU3RyaW5nfSwgJHtzdXBwb3NpdGlvblN0cmluZ31gO1xuXG4gICAgcmV0dXJuIHN1cHBvc2l0aW9uc1N0cmluZztcbiAgfSwgbnVsbCk7XG5cbiAgcmV0dXJuIHN1cHBvc2l0aW9uc1N0cmluZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVxdWl2YWxlbmNlU3RyaW5nRnJvbVRlcm1zKHRlcm1zKSB7XG4gIGNvbnN0IHRlcm1zU3RyaW5nID0gdGVybXNTdHJpbmdGcm9tVGVybXModGVybXMpLFxuICAgICAgICBlcXVpdmFsZW5jZVN0cmluZyA9IGBbJHt0ZXJtc1N0cmluZ31dYDtcblxuICByZXR1cm4gZXF1aXZhbGVuY2VTdHJpbmc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzaWduYXR1cmVTdHJpbmdGcm9tU2lnbmF0dXJlKHNpZ25hdHVyZSkge1xuICBjb25zdCBzaWduYXR1cmVTdHJpbmcgPSAoc2lnbmF0dXJlICE9PSBudWxsKSA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2lnbmF0dXJlLmdldFN0cmluZygpIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bGw7XG5cbiAgcmV0dXJuIHNpZ25hdHVyZVN0cmluZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVTdHJpbmdGcm9tTm9taW5hbFR5cGVOYW1lKG5vbWluYWxUeXBlTmFtZSkge1xuICBjb25zdCB0eXBlU3RyaW5nID0gbm9taW5hbFR5cGVOYW1lOyAgLy8vXG5cbiAgcmV0dXJuIHR5cGVTdHJpbmc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0ZXJtU3Vic3RpdHV0aW9uU3RyaW5nRnJvbVRlcm1BbmRWYXJpYWJsZSh0ZXJtLCB2YXJpYWJsZSkge1xuICBjb25zdCB0ZXJtU3RyaW5nID0gdGVybS5nZXRTdHJpbmcoKSxcbiAgICAgICAgdmFyaWFibGVTdHJpbmcgPSB2YXJpYWJsZS5nZXRTdHJpbmcoKSxcbiAgICAgICAgdGVybVN1YnN0aXR1dGlvblN0cmluZyA9IGBbJHt0ZXJtU3RyaW5nfSBmb3IgJHt2YXJpYWJsZVN0cmluZ31dYDtcblxuICByZXR1cm4gdGVybVN1YnN0aXR1dGlvblN0cmluZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJ1bHNTdHJpbmdGcm9tTGFiZWxzUHJlbWlzZXNBbmRDb25jbHVzaW9uKGxhYmVscywgcHJlbWlzZXMsIGNvbmNsdXNpb24pIHtcbiAgbGV0IHJ1bGVTdHJpbmcgPSBFTVBUWV9TVFJJTkc7XG5cbiAgY29uc3QgY29uY2x1c2lvblN0cmluZyA9IGNvbmNsdXNpb24uZ2V0U3RyaW5nKCksXG4gICAgICAgIHByZW1pc2VzU3RyaW5nID0gcHJlbWlzZXNTdHJpbmdGcm9tUHJlbWlzZXMocHJlbWlzZXMpLFxuICAgICAgICBsYWJlbHNTdHJpbmcgPSBsYWJlbHNTdHJpbmdGcm9tTGFiZWxzKGxhYmVscyk7XG5cbiAgcnVsZVN0cmluZyA9IGAke3J1bGVTdHJpbmd9JHtsYWJlbHNTdHJpbmd9IDo6IGA7XG5cbiAgcnVsZVN0cmluZyA9IChwcmVtaXNlc1N0cmluZyAhPT0gbnVsbCkgP1xuICAgICAgICAgICAgICAgICBgJHtydWxlU3RyaW5nfVske3ByZW1pc2VzU3RyaW5nfV0uLi4ke2NvbmNsdXNpb25TdHJpbmd9YCA6XG4gICAgICAgICAgICAgICAgICAgYCR7cnVsZVN0cmluZ30ke2NvbmNsdXNpb25TdHJpbmd9YDtcblxuICByZXR1cm4gcnVsZVN0cmluZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN1YnByb29mU3RyaW5nRnJvbVN1cHBvc2l0aW9uc0FuZFN1YkRlcml2YXRpb24oc3VwcG9zaXRpb25zLCBzdWJEZXJpdmF0aW9uKSB7XG4gIGNvbnN0IGxhc3RTdGVwID0gc3ViRGVyaXZhdGlvbi5nZXRMYXN0U3RlcCgpLFxuICAgICAgICBzdXBwb3NpdGlvbnNTdHJpbmcgPSBzdXBwb3NpdGlvbnNTdHJpbmdGcm9tU3VwcG9zaXRpb25zKHN1cHBvc2l0aW9ucyksXG4gICAgICAgIGxhc3RTdGVwU3RyaW5nID0gbGFzdFN0ZXAuZ2V0U3RyaW5nKCksXG4gICAgICAgIHN1YnByb29mU3RyaW5nID0gYFske3N1cHBvc2l0aW9uc1N0cmluZ31dLi4uJHtsYXN0U3RlcFN0cmluZ31gO1xuXG4gIHJldHVybiBzdWJwcm9vZlN0cmluZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZyYW1lU3Vic3RpdHV0aW9uU3RyaW5nRnJvbUZyYW1lQW5kTWV0YXZhcmlhYmxlKGZyYW1lLCBtZXRhdmFyaWFibGUpIHtcbiAgY29uc3QgZnJhbWVTdHJpbmcgPSBmcmFtZS5nZXRTdHJpbmcoKSxcbiAgICAgICAgbWV0YXZhcmlhYmxlU3RyaW5nID0gbWV0YXZhcmlhYmxlLmdldFN0cmluZygpLFxuICAgICAgICBzdHJpbmcgPSBgWyR7ZnJhbWVTdHJpbmd9IGZvciBbJHttZXRhdmFyaWFibGVTdHJpbmd9XV1gO1xuXG4gIHJldHVybiBzdHJpbmc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZWN0aW9uU3RyaW5nRnJvbUh5cG90aGVzZXNBbmRUb3BMZXZlbEFzc2VydGlvbihoeXBvdGhlc2VzLCB0b3BMZXZlbEFzc2VydGlvbikge1xuICBjb25zdCB0b3BMZXZlbEFzc2VydGlvblN0cmluZyA9IHRvcExldmVsQXNzZXJ0aW9uLmdldFN0cmluZygpLFxuICAgICAgICBoeXBvdGhlc2VzU3RyaW5nID0gaHlwb3RoZXNlc1N0cmluZ0Zyb21IeXBvdGhlc2VzKGh5cG90aGVzZXMpLFxuICAgICAgICBzZWN0aW9uU3RyaW5nID0gYFske2h5cG90aGVzZXNTdHJpbmd9XTo6OiAke3RvcExldmVsQXNzZXJ0aW9uU3RyaW5nfWA7XG5cbiAgcmV0dXJuIHNlY3Rpb25TdHJpbmc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtZXRhTGV2ZWxBc3N1bXB0aW9uU3RyaW5nRnJvbVJlZmVyZW5jZUFuZFN0YXRlbWVudChyZWZlcmVuY2UsIHN0YXRlbWVudCkge1xuICBjb25zdCBzdGF0ZW1lbnRTdHJpbmcgPSBzdGF0ZW1lbnQuZ2V0U3RyaW5nKCksXG4gICAgICAgIHJlZmVybmVjZVN0cmluZyA9IHJlZmVyZW5jZS5nZXRTdHJpbmcoKSxcbiAgICAgICAgbWV0YUxldmVsQXNzdW1wdGlvblN0cmluZyA9IGAke3JlZmVybmVjZVN0cmluZ30gOjogJHtzdGF0ZW1lbnRTdHJpbmd9YDtcblxuICByZXR1cm4gbWV0YUxldmVsQXNzdW1wdGlvblN0cmluZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb2NlZHVyZUNhbGxTdHJpbmdGcm9tUHJvY2VkdXJlUmVmZXJlbmNlQW5kUGFyYW1ldGVycyhwcm9jZWR1cmVSZWZlcmVuY2UsIHBhcmFtZXRlcnMpIHtcbiAgY29uc3QgcHJvY2VkdXJlUmVmZXJlbmNlTmFtZSA9IHByb2NlZHVyZVJlZmVyZW5jZS5nZXROYW1lKCksXG4gICAgICAgIHBhcmFtZXRlcnNTdHJpbmcgPSBwYXJhbWV0ZXJzU3RyaW5nRnJvbVBhcmFtZXRlcnMocGFyYW1ldGVycyksXG4gICAgICAgIHByb2NlZHVyZUNhbGxTdHJpbmcgPSBgQCR7cHJvY2VkdXJlUmVmZXJlbmNlTmFtZX0oJHtwYXJhbWV0ZXJzU3RyaW5nfSlgO1xuXG4gIHJldHVybiBwcm9jZWR1cmVDYWxsU3RyaW5nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RhdGVtZW50U3Vic3RpdHV0aW9uU3RyaW5nRnJvbVN0YXRlbWVudEFuZE1ldGF2YXJpYWJsZShzdGF0ZW1lbnQsIG1ldGF2YXJpYWJsZSkge1xuICBjb25zdCBzdGF0ZW1lbnRTdHJpbmcgPSBzdGF0ZW1lbnQuZ2V0U3RyaW5nKCksXG4gICAgICAgIG1ldGF2YXJpYWJsZVN0cmluZyA9IG1ldGF2YXJpYWJsZS5nZXRTdHJpbmcoKSxcbiAgICAgICAgc3RhdGVtZW50U3Vic3RpdHV0aW9uU3RyaW5nID0gYFske3N0YXRlbWVudFN0cmluZ30gZm9yICR7bWV0YXZhcmlhYmxlU3RyaW5nfV1gO1xuXG4gIHJldHVybiBzdGF0ZW1lbnRTdWJzdGl0dXRpb25TdHJpbmc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWZlcmVuY2VTdWJzdGl0dXRpb25TdHJpbmdGcm9tUmVmZXJlbmNlQW5kTWV0YXZhcmlhYmxlKHJlZmVyZW5jZSwgbWV0YXZhcmlhYmxlKSB7XG4gIGNvbnN0IHJlZmVyZW5jZVN0cmluZyA9IHJlZmVyZW5jZS5nZXRTdHJpbmcoKSxcbiAgICAgICAgbWV0YXZhcmlhYmxlU3RyaW5nID0gbWV0YXZhcmlhYmxlLmdldFN0cmluZygpLFxuICAgICAgICByZWZlcmVuY2VTdWJzdGl0dXRpb25TdHJpbmcgPSBgWyR7cmVmZXJlbmNlU3RyaW5nfSBmb3IgJHttZXRhdmFyaWFibGVTdHJpbmd9XWA7XG5cbiAgcmV0dXJuIHJlZmVyZW5jZVN1YnN0aXR1dGlvblN0cmluZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbXBsZXhUeXBlRGVjbGFyYXRpb25TdHJpbmdGcm9tVHlwZVN1cGVyVHlwZXNBbmRQcm92aXNpb25hbCh0eXBlLCBzdXBlclR5cGVzLCBwcm92aXNpb25hbCkge1xuICBjb25zdCB0eXBlU3RyaW5nID0gdHlwZS5nZXRTdHJpbmcoKSxcbiAgICAgICAgc3VwZXJUeXBlc1N0cmluZyA9IHN1cGVyVHlwZXNTdHJpbmdGcm9tU3VwZXJUeXBlcyhzdXBlclR5cGVzKSxcbiAgICAgICAgcHJvdmlzaW9uYWxTdHJpbmcgPSBwcm92aXNpbmFsU3RyaW5nRnJvbVByb3Zpc2lvbmFsKHByb3Zpc2lvbmFsKSxcbiAgICAgICAgY29tcGxleFR5cGVEZWNsYXJhdGlvblN0cmluZyA9IGAke3Byb3Zpc2lvbmFsU3RyaW5nfSR7dHlwZVN0cmluZ30ke3N1cGVyVHlwZXNTdHJpbmd9YDtcblxuICByZXR1cm4gY29tcGxleFR5cGVEZWNsYXJhdGlvblN0cmluZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRvcExldmVsTWV0YUFzc2VydGlvblN0cmluZ0Zyb21MYWJlbFN1cHBvc2l0aW9uc0FuZERlZHVjdGlvbihsYWJlbCwgc3VwcG9zaXRpb25zLCBkZWR1Y3Rpb24pIHtcbiAgY29uc3QgbGFiZWxTdHJpbmcgPSBsYWJlbC5nZXRTdHJpbmcoKSxcbiAgICAgICAgZGVkdWN0aW9uU3RyaW5nID0gZGVkdWN0aW9uLmdldFN0cmluZygpLFxuICAgICAgICBzdXBwb3NpdGlvbnNTdHJpbmcgPSBzdXBwb3NpdGlvbnNTdHJpbmdGcm9tU3VwcG9zaXRpb25zKHN1cHBvc2l0aW9ucyksXG4gICAgICAgIHRvcExldmVsTWV0YUFzc2VydGlvblN0cmluZyA9IChzdXBwb3NpdGlvbnNTdHJpbmcgIT09IG51bGwpID9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGAke2xhYmVsU3RyaW5nfSA6OiBbJHtzdXBwb3NpdGlvbnNTdHJpbmd9XS4uLiR7ZGVkdWN0aW9uU3RyaW5nfWAgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgJHtsYWJlbFN0cmluZ30gOjogJHtkZWR1Y3Rpb25TdHJpbmd9YDtcblxuICByZXR1cm4gdG9wTGV2ZWxNZXRhQXNzZXJ0aW9uU3RyaW5nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdG9wTGV2ZWxBc3NlcnRpb25TdHJpbmdGcm9tTGFiZWxzU2lnbmF0dXJlU3VwcG9zaXRpb25zQW5kRGVkdWN0aW9uKGxhYmVscywgc2lnbmF0dXJlLCBzdXBwb3NpdGlvbnMsIGRlZHVjdGlvbikge1xuICBsZXQgdG9wTGV2ZWxBc3NlcnRpb25TdHJpbmcgPSBFTVBUWV9TVFJJTkc7XG5cbiAgY29uc3QgZGVkdWN0aW9uU3RyaW5nID0gZGVkdWN0aW9uLmdldFN0cmluZygpLFxuICAgICAgICBsYWJlbHNTdHJpbmcgPSBsYWJlbHNTdHJpbmdGcm9tTGFiZWxzKGxhYmVscyksXG4gICAgICAgIHNpZ25hdHVyZVN0cmluZyA9IHNpZ25hdHVyZVN0cmluZ0Zyb21TaWduYXR1cmUoc2lnbmF0dXJlKSxcbiAgICAgICAgc3VwcG9zaXRpb25zU3RyaW5nID0gc3VwcG9zaXRpb25zU3RyaW5nRnJvbVN1cHBvc2l0aW9ucyhzdXBwb3NpdGlvbnMpO1xuXG4gIHRvcExldmVsQXNzZXJ0aW9uU3RyaW5nID0gKGxhYmVsc1N0cmluZyAhPT0gbnVsbCkgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYCR7dG9wTGV2ZWxBc3NlcnRpb25TdHJpbmd9JHtsYWJlbHNTdHJpbmd9IDo6IGAgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgJHt0b3BMZXZlbEFzc2VydGlvblN0cmluZ31gO1xuXG4gIHRvcExldmVsQXNzZXJ0aW9uU3RyaW5nID0gKHNpZ25hdHVyZVN0cmluZyAhPT0gbnVsbCkgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgJHt0b3BMZXZlbEFzc2VydGlvblN0cmluZ30gJHtzaWduYXR1cmVTdHJpbmd9YCA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYCR7dG9wTGV2ZWxBc3NlcnRpb25TdHJpbmd9YDtcblxuICB0b3BMZXZlbEFzc2VydGlvblN0cmluZyA9IChzdXBwb3NpdGlvbnNTdHJpbmcgIT09IG51bGwpID9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYCR7dG9wTGV2ZWxBc3NlcnRpb25TdHJpbmd9WyR7c3VwcG9zaXRpb25zU3RyaW5nfV0uLi4ke2RlZHVjdGlvblN0cmluZ31gIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgJHt0b3BMZXZlbEFzc2VydGlvblN0cmluZ30ke2RlZHVjdGlvblN0cmluZ31gO1xuXG4gIHJldHVybiB0b3BMZXZlbEFzc2VydGlvblN0cmluZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0YXRlbWVudFN1YnN0aXR1dGlvblN0cmluZ0Zyb21TdGF0ZW1lbnRNZXRhdmFyaWFibGVBbmRTdWJzdGl0dXRpb24oc3RhdGVtZW50LCBtZXRhdmFyaWFibGUsIHN1YnN0aXR1dGlvbikge1xuICBjb25zdCBzdGF0ZW1lbnRTdHJpbmcgPSBzdGF0ZW1lbnQuZ2V0U3RyaW5nKCksXG4gICAgICAgIG1ldGF2YXJpYWJsZVN0cmluZyA9IG1ldGF2YXJpYWJsZS5nZXRTdHJpbmcoKSxcbiAgICAgICAgc3Vic3RpdHV0aW9uU3RyaW5nID0gc3Vic3RpdHV0aW9uLmdldFN0cmluZygpLFxuICAgICAgICBzdGF0ZW1lbnRTdWJzdGl0dXRpb25TdHJpbmcgPSBgWyR7c3RhdGVtZW50U3RyaW5nfSBmb3IgJHttZXRhdmFyaWFibGVTdHJpbmd9JHtzdWJzdGl0dXRpb25TdHJpbmd9XWA7XG5cbiAgcmV0dXJuIHN0YXRlbWVudFN1YnN0aXR1dGlvblN0cmluZztcbn1cbiJdLCJuYW1lcyI6WyJjb21wbGV4VHlwZURlY2xhcmF0aW9uU3RyaW5nRnJvbVR5cGVTdXBlclR5cGVzQW5kUHJvdmlzaW9uYWwiLCJlcXVpdmFsZW5jZVN0cmluZ0Zyb21UZXJtcyIsImZyYW1lU3Vic3RpdHV0aW9uU3RyaW5nRnJvbUZyYW1lQW5kTWV0YXZhcmlhYmxlIiwiaHlwb3RoZXNlc1N0cmluZ0Zyb21IeXBvdGhlc2VzIiwibGFiZWxzU3RyaW5nRnJvbUxhYmVscyIsIm1ldGFMZXZlbEFzc3VtcHRpb25TdHJpbmdGcm9tUmVmZXJlbmNlQW5kU3RhdGVtZW50IiwicGFyYW1ldGVyc1N0cmluZ0Zyb21QYXJhbWV0ZXJzIiwicHJlbWlzZXNTdHJpbmdGcm9tUHJlbWlzZXMiLCJwcm9jZWR1cmVDYWxsU3RyaW5nRnJvbVByb2NlZHVyZVJlZmVyZW5jZUFuZFBhcmFtZXRlcnMiLCJwcm92aXNpbmFsU3RyaW5nRnJvbVByb3Zpc2lvbmFsIiwicHJvdmlzaW9uYWxseVN0cmluZ0Zyb21Qcm92aXNpb25hbCIsInJlZmVyZW5jZVN1YnN0aXR1dGlvblN0cmluZ0Zyb21SZWZlcmVuY2VBbmRNZXRhdmFyaWFibGUiLCJydWxzU3RyaW5nRnJvbUxhYmVsc1ByZW1pc2VzQW5kQ29uY2x1c2lvbiIsInNlY3Rpb25TdHJpbmdGcm9tSHlwb3RoZXNlc0FuZFRvcExldmVsQXNzZXJ0aW9uIiwic2lnbmF0dXJlU3RyaW5nRnJvbVNpZ25hdHVyZSIsInN0YXRlbWVudFN1YnN0aXR1dGlvblN0cmluZ0Zyb21TdGF0ZW1lbnRBbmRNZXRhdmFyaWFibGUiLCJzdGF0ZW1lbnRTdWJzdGl0dXRpb25TdHJpbmdGcm9tU3RhdGVtZW50TWV0YXZhcmlhYmxlQW5kU3Vic3RpdHV0aW9uIiwic3VicHJvb2ZTdHJpbmdGcm9tU3VwcG9zaXRpb25zQW5kU3ViRGVyaXZhdGlvbiIsInN1cGVyVHlwZXNTdHJpbmdGcm9tU3VwZXJUeXBlcyIsInN1cHBvc2l0aW9uc1N0cmluZ0Zyb21TdXBwb3NpdGlvbnMiLCJ0ZXJtU3Vic3RpdHV0aW9uU3RyaW5nRnJvbVRlcm1BbmRWYXJpYWJsZSIsInRlcm1zU3RyaW5nRnJvbVRlcm1zIiwidG9wTGV2ZWxBc3NlcnRpb25TdHJpbmdGcm9tTGFiZWxzU2lnbmF0dXJlU3VwcG9zaXRpb25zQW5kRGVkdWN0aW9uIiwidG9wTGV2ZWxNZXRhQXNzZXJ0aW9uU3RyaW5nRnJvbUxhYmVsU3VwcG9zaXRpb25zQW5kRGVkdWN0aW9uIiwidHlwZVN0cmluZ0Zyb21Ob21pbmFsVHlwZU5hbWUiLCJ0ZXJtcyIsInRlcm1zU3RyaW5nIiwicmVkdWNlIiwidGVybSIsInRlcm1TdHJpbmciLCJnZXRTdHJpbmciLCJsYWJlbHMiLCJsYWJlbHNTdHJpbmciLCJsYWJlbCIsImxhYmVsU3RyaW5nIiwicHJlbWlzZXMiLCJwcmVtaXNlc1N0cmluZyIsInByZW1pc2UiLCJwcmVtaXNlU3RyaW5nIiwiaHlwb3RoZXNlcyIsImh5cG90aGVzZXNTdHJpbmciLCJoeXBvdGhlc2lzIiwiaHlwb3RoZXNpc1N0cmluZyIsInN1cGVyVHlwZXMiLCJzdXBlclR5cGVzU3RyaW5nIiwiYmFzZVR5cGUiLCJiYXNlVHlwZUZyb21Ob3RoaW5nIiwic3VwZXJUeXBlIiwic3VwZXJUeXBlU3RyaW5nIiwiRU1QVFlfU1RSSU5HIiwicGFyYW1ldGVycyIsInBhcmFtZXRlcnNTdHJpbmciLCJwYXJhbWV0ZXIiLCJwYXJhbWV0ZXJTdHJpbmciLCJwcm92aXNpb25hbCIsInByb3Zpc2luYWxTdHJpbmciLCJQUk9WSVNJT05BTCIsInByb3Zpc2luYWxseVN0cmluZyIsIlBST1ZJU0lPTkFMTFkiLCJzdXBwb3NpdGlvbnMiLCJzdXBwb3NpdGlvbnNTdHJpbmciLCJzdXBwb3NpdGlvbiIsInN1cHBvc2l0aW9uU3RyaW5nIiwiZXF1aXZhbGVuY2VTdHJpbmciLCJzaWduYXR1cmUiLCJzaWduYXR1cmVTdHJpbmciLCJub21pbmFsVHlwZU5hbWUiLCJ0eXBlU3RyaW5nIiwidmFyaWFibGUiLCJ2YXJpYWJsZVN0cmluZyIsInRlcm1TdWJzdGl0dXRpb25TdHJpbmciLCJjb25jbHVzaW9uIiwicnVsZVN0cmluZyIsImNvbmNsdXNpb25TdHJpbmciLCJzdWJEZXJpdmF0aW9uIiwibGFzdFN0ZXAiLCJnZXRMYXN0U3RlcCIsImxhc3RTdGVwU3RyaW5nIiwic3VicHJvb2ZTdHJpbmciLCJmcmFtZSIsIm1ldGF2YXJpYWJsZSIsImZyYW1lU3RyaW5nIiwibWV0YXZhcmlhYmxlU3RyaW5nIiwic3RyaW5nIiwidG9wTGV2ZWxBc3NlcnRpb24iLCJ0b3BMZXZlbEFzc2VydGlvblN0cmluZyIsInNlY3Rpb25TdHJpbmciLCJyZWZlcmVuY2UiLCJzdGF0ZW1lbnQiLCJzdGF0ZW1lbnRTdHJpbmciLCJyZWZlcm5lY2VTdHJpbmciLCJtZXRhTGV2ZWxBc3N1bXB0aW9uU3RyaW5nIiwicHJvY2VkdXJlUmVmZXJlbmNlIiwicHJvY2VkdXJlUmVmZXJlbmNlTmFtZSIsImdldE5hbWUiLCJwcm9jZWR1cmVDYWxsU3RyaW5nIiwic3RhdGVtZW50U3Vic3RpdHV0aW9uU3RyaW5nIiwicmVmZXJlbmNlU3RyaW5nIiwicmVmZXJlbmNlU3Vic3RpdHV0aW9uU3RyaW5nIiwidHlwZSIsInByb3Zpc2lvbmFsU3RyaW5nIiwiY29tcGxleFR5cGVEZWNsYXJhdGlvblN0cmluZyIsImRlZHVjdGlvbiIsImRlZHVjdGlvblN0cmluZyIsInRvcExldmVsTWV0YUFzc2VydGlvblN0cmluZyIsInN1YnN0aXR1dGlvbiIsInN1YnN0aXR1dGlvblN0cmluZyJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7O1FBdU9nQkE7ZUFBQUE7O1FBdEdBQztlQUFBQTs7UUFzREFDO2VBQUFBOztRQXhJQUM7ZUFBQUE7O1FBNUJBQztlQUFBQTs7UUFvTEFDO2VBQUFBOztRQWxIQUM7ZUFBQUE7O1FBcERBQztlQUFBQTs7UUE4S0FDO2VBQUFBOztRQTVHQUM7ZUFBQUE7O1FBUUFDO2VBQUFBOztRQW9IQUM7ZUFBQUE7O1FBakVBQztlQUFBQTs7UUFpQ0FDO2VBQUFBOztRQXZEQUM7ZUFBQUE7O1FBK0VBQztlQUFBQTs7UUEyREFDO2VBQUFBOztRQXBHQUM7ZUFBQUE7O1FBakhBQztlQUFBQTs7UUFzREFDO2VBQUFBOztRQW1DQUM7ZUFBQUE7O1FBakpBQztlQUFBQTs7UUFzUEFDO2VBQUFBOztRQVhBQztlQUFBQTs7UUFoR0FDO2VBQUFBOzs7c0JBOUlvQjsyQkFDcUI7QUFFbEQsU0FBU0gscUJBQXFCSSxLQUFLO0lBQ3hDLE1BQU1DLGNBQWNELE1BQU1FLE1BQU0sQ0FBQyxDQUFDRCxhQUFhRTtRQUM3QyxNQUFNQyxhQUFhRCxLQUFLRSxTQUFTO1FBRWpDSixjQUFjLEFBQUNBLGdCQUFnQixPQUNoQixHQUFHQSxZQUFZLEVBQUUsRUFBRUcsWUFBWSxHQUM1QkE7UUFFbEIsT0FBT0g7SUFDVCxHQUFHO0lBRUgsT0FBT0E7QUFDVDtBQUVPLFNBQVN0Qix1QkFBdUIyQixNQUFNO0lBQzNDLE1BQU1DLGVBQWVELE9BQU9KLE1BQU0sQ0FBQyxDQUFDSyxjQUFjQztRQUNoRCxNQUFNQyxjQUFjRCxNQUFNSCxTQUFTO1FBRW5DRSxlQUFlLEFBQUNBLGlCQUFpQixPQUNoQkUsY0FDQyxHQUFHRixhQUFhLEVBQUUsRUFBRUUs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
231
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsaXRpZXMvc3RyaW5nLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBiYXNlVHlwZUZyb21Ob3RoaW5nIH0gZnJvbSBcIi4uL3V0aWxpdGllcy90eXBlXCI7XG5pbXBvcnQgeyBFTVBUWV9TVFJJTkcsIFBST1ZJU0lPTkFMLCBQUk9WSVNJT05BTExZIH0gZnJvbSBcIi4uL2NvbnN0YW50c1wiO1xuXG5leHBvcnQgZnVuY3Rpb24gdGVybXNTdHJpbmdGcm9tVGVybXModGVybXMpIHtcbiAgY29uc3QgdGVybXNTdHJpbmcgPSB0ZXJtcy5yZWR1Y2UoKHRlcm1zU3RyaW5nLCB0ZXJtKSA9PiB7XG4gICAgY29uc3QgdGVybVN0cmluZyA9IHRlcm0uZ2V0U3RyaW5nKCk7XG5cbiAgICB0ZXJtc1N0cmluZyA9ICh0ZXJtc1N0cmluZyAhPT0gbnVsbCkgP1xuICAgICAgICAgICAgICAgICAgIGAke3Rlcm1zU3RyaW5nfSwgJHt0ZXJtU3RyaW5nfWAgOlxuICAgICAgICAgICAgICAgICAgICAgIHRlcm1TdHJpbmc7XG5cbiAgICByZXR1cm4gdGVybXNTdHJpbmc7XG4gIH0sIG51bGwpO1xuXG4gIHJldHVybiB0ZXJtc1N0cmluZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxhYmVsc1N0cmluZ0Zyb21MYWJlbHMobGFiZWxzKSB7XG4gIGNvbnN0IGxhYmVsc1N0cmluZyA9IGxhYmVscy5yZWR1Y2UoKGxhYmVsc1N0cmluZywgbGFiZWwpID0+IHtcbiAgICBjb25zdCBsYWJlbFN0cmluZyA9IGxhYmVsLmdldFN0cmluZygpO1xuXG4gICAgbGFiZWxzU3RyaW5nID0gKGxhYmVsc1N0cmluZyA9PT0gbnVsbCkgP1xuICAgICAgICAgICAgICAgICAgICAgbGFiZWxTdHJpbmc6IC8vL1xuICAgICAgICAgICAgICAgICAgICAgIGAke2xhYmVsc1N0cmluZ30sICR7bGFiZWxTdHJpbmd9YDtcblxuICAgIHJldHVybiBsYWJlbHNTdHJpbmc7XG4gIH0sIG51bGwpO1xuXG4gIHJldHVybiBsYWJlbHNTdHJpbmc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcmVtaXNlc1N0cmluZ0Zyb21QcmVtaXNlcyhwcmVtaXNlcykge1xuICBjb25zdCBwcmVtaXNlc1N0cmluZyA9IHByZW1pc2VzLnJlZHVjZSgocHJlbWlzZXNTdHJpbmcsIHByZW1pc2UpID0+IHtcbiAgICBjb25zdCBwcmVtaXNlU3RyaW5nID0gcHJlbWlzZS5nZXRTdHJpbmcoKTtcblxuICAgIHByZW1pc2VzU3RyaW5nID0gKHByZW1pc2VzU3RyaW5nICE9PSBudWxsKSA/XG4gICAgICAgICAgICAgICAgICAgICAgIGAke3ByZW1pc2VzU3RyaW5nfSwgJHtwcmVtaXNlU3RyaW5nfWAgOlxuICAgICAgICAgICAgICAgICAgICAgICAgIHByZW1pc2VTdHJpbmc7ICAvLy9cblxuICAgIHJldHVybiBwcmVtaXNlc1N0cmluZztcbiAgfSwgbnVsbCk7XG5cbiAgcmV0dXJuIHByZW1pc2VzU3RyaW5nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaHlwb3RoZXNlc1N0cmluZ0Zyb21IeXBvdGhlc2VzKGh5cG90aGVzZXMpIHtcbiAgY29uc3QgaHlwb3RoZXNlc1N0cmluZyA9IGh5cG90aGVzZXMucmVkdWNlKChoeXBvdGhlc2VzU3RyaW5nLCBoeXBvdGhlc2lzKSA9PiB7XG4gICAgY29uc3QgaHlwb3RoZXNpc1N0cmluZyA9IGh5cG90aGVzaXMuZ2V0U3RyaW5nKCk7XG5cbiAgICBoeXBvdGhlc2VzU3RyaW5nID0gKGh5cG90aGVzZXNTdHJpbmcgIT09IG51bGwpID9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgYCR7aHlwb3RoZXNlc1N0cmluZ30sICR7aHlwb3RoZXNpc1N0cmluZ31gIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoeXBvdGhlc2lzU3RyaW5nOyAgLy8vXG5cbiAgICByZXR1cm4gaHlwb3RoZXNlc1N0cmluZztcbiAgfSwgbnVsbCk7XG5cbiAgcmV0dXJuIGh5cG90aGVzZXNTdHJpbmc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdXBlclR5cGVzU3RyaW5nRnJvbVN1cGVyVHlwZXMoc3VwZXJUeXBlcykge1xuICBsZXQgc3VwZXJUeXBlc1N0cmluZztcblxuICBjb25zdCBiYXNlVHlwZSA9IGJhc2VUeXBlRnJvbU5vdGhpbmcoKTtcblxuICBzdXBlclR5cGVzU3RyaW5nID0gc3VwZXJUeXBlcy5yZWR1Y2UoKHN1cGVyVHlwZXNTdHJpbmcsIHN1cGVyVHlwZSkgPT4ge1xuICAgIGlmIChzdXBlclR5cGUgIT09IGJhc2VUeXBlKSB7XG4gICAgICBjb25zdCBzdXBlclR5cGVTdHJpbmcgPSBzdXBlclR5cGUuZ2V0U3RyaW5nKCk7XG5cbiAgICAgIHN1cGVyVHlwZXNTdHJpbmcgPSAoc3VwZXJUeXBlc1N0cmluZyA9PT0gbnVsbCkgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgYCcke3N1cGVyVHlwZVN0cmluZ30nYCA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgJHtzdXBlclR5cGVzU3RyaW5nfSwgJyR7c3VwZXJUeXBlU3RyaW5nfSdgO1xuICAgIH1cblxuICAgIHJldHVybiBzdXBlclR5cGVzU3RyaW5nO1xuICB9LCBudWxsKTtcblxuICBzdXBlclR5cGVzU3RyaW5nID0gKHN1cGVyVHlwZXNTdHJpbmcgIT09IG51bGwpID9cbiAgICAgICAgICAgICAgICAgICAgICAgYDoke3N1cGVyVHlwZXNTdHJpbmd9YCA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgIEVNUFRZX1NUUklORztcblxuICByZXR1cm4gc3VwZXJUeXBlc1N0cmluZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcmFtZXRlcnNTdHJpbmdGcm9tUGFyYW1ldGVycyhwYXJhbWV0ZXJzKSB7XG4gIGNvbnN0IHBhcmFtZXRlcnNTdHJpbmcgPSBwYXJhbWV0ZXJzLnJlZHVjZSgocGFyYW1ldGVyc1N0cmluZywgcGFyYW1ldGVyKSA9PiB7XG4gICAgY29uc3QgcGFyYW1ldGVyU3RyaW5nID0gcGFyYW1ldGVyLmdldFN0cmluZygpO1xuXG4gICAgcGFyYW1ldGVyc1N0cmluZyA9IChwYXJhbWV0ZXJzU3RyaW5nID09PSBudWxsKSA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVyU3RyaW5nIDogLy8vXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGAke3BhcmFtZXRlcnNTdHJpbmd9LCAke3BhcmFtZXRlclN0cmluZ31gO1xuXG4gICAgcmV0dXJuIHBhcmFtZXRlcnNTdHJpbmc7XG4gIH0sIG51bGwpO1xuXG4gIHJldHVybiBwYXJhbWV0ZXJzU3RyaW5nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvdmlzaW5hbFN0cmluZ0Zyb21Qcm92aXNpb25hbChwcm92aXNpb25hbCkge1xuICBjb25zdCBwcm92aXNpbmFsU3RyaW5nID0gcHJvdmlzaW9uYWwgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGAke1BST1ZJU0lPTkFMfSBgIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVNUFRZX1NUUklORztcblxuICByZXR1cm4gcHJvdmlzaW5hbFN0cmluZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb3Zpc2lvbmFsbHlTdHJpbmdGcm9tUHJvdmlzaW9uYWwocHJvdmlzaW9uYWwpIHtcbiAgY29uc3QgcHJvdmlzaW5hbGx5U3RyaW5nID0gcHJvdmlzaW9uYWwgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYCAke1BST1ZJU0lPTkFMTFl9YCA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFTVBUWV9TVFJJTkc7XG5cbiAgcmV0dXJuIHByb3Zpc2luYWxseVN0cmluZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN1cHBvc2l0aW9uc1N0cmluZ0Zyb21TdXBwb3NpdGlvbnMoc3VwcG9zaXRpb25zKSB7XG4gIGNvbnN0IHN1cHBvc2l0aW9uc1N0cmluZyA9IHN1cHBvc2l0aW9ucy5yZWR1Y2UoKHN1cHBvc2l0aW9uc1N0cmluZywgc3VwcG9zaXRpb24pID0+IHtcbiAgICBjb25zdCBzdXBwb3NpdGlvblN0cmluZyA9IHN1cHBvc2l0aW9uLmdldFN0cmluZygpO1xuXG4gICAgc3VwcG9zaXRpb25zU3RyaW5nID0gKHN1cHBvc2l0aW9uc1N0cmluZyA9PT0gbnVsbCkgP1xuICAgICAgc3VwcG9zaXRpb25TdHJpbmc6IC8vL1xuICAgICAgYCR7c3VwcG9zaXRpb25zU3RyaW5nfSwgJHtzdXBwb3NpdGlvblN0cmluZ31gO1xuXG4gICAgcmV0dXJuIHN1cHBvc2l0aW9uc1N0cmluZztcbiAgfSwgbnVsbCk7XG5cbiAgcmV0dXJuIHN1cHBvc2l0aW9uc1N0cmluZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVxdWl2YWxlbmNlU3RyaW5nRnJvbVRlcm1zKHRlcm1zKSB7XG4gIGNvbnN0IHRlcm1zU3RyaW5nID0gdGVybXNTdHJpbmdGcm9tVGVybXModGVybXMpLFxuICAgICAgICBlcXVpdmFsZW5jZVN0cmluZyA9IGBbJHt0ZXJtc1N0cmluZ31dYDtcblxuICByZXR1cm4gZXF1aXZhbGVuY2VTdHJpbmc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzaWduYXR1cmVTdHJpbmdGcm9tU2lnbmF0dXJlKHNpZ25hdHVyZSkge1xuICBjb25zdCBzaWduYXR1cmVTdHJpbmcgPSAoc2lnbmF0dXJlICE9PSBudWxsKSA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2lnbmF0dXJlLmdldFN0cmluZygpIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bGw7XG5cbiAgcmV0dXJuIHNpZ25hdHVyZVN0cmluZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVTdHJpbmdGcm9tTm9taW5hbFR5cGVOYW1lKG5vbWluYWxUeXBlTmFtZSkge1xuICBjb25zdCB0eXBlU3RyaW5nID0gbm9taW5hbFR5cGVOYW1lOyAgLy8vXG5cbiAgcmV0dXJuIHR5cGVTdHJpbmc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0ZXJtU3Vic3RpdHV0aW9uU3RyaW5nRnJvbVRlcm1BbmRWYXJpYWJsZSh0ZXJtLCB2YXJpYWJsZSkge1xuICBjb25zdCB0ZXJtU3RyaW5nID0gdGVybS5nZXRTdHJpbmcoKSxcbiAgICAgICAgdmFyaWFibGVTdHJpbmcgPSB2YXJpYWJsZS5nZXRTdHJpbmcoKSxcbiAgICAgICAgdGVybVN1YnN0aXR1dGlvblN0cmluZyA9IGBbJHt0ZXJtU3RyaW5nfSBmb3IgJHt2YXJpYWJsZVN0cmluZ31dYDtcblxuICByZXR1cm4gdGVybVN1YnN0aXR1dGlvblN0cmluZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJ1bHNTdHJpbmdGcm9tTGFiZWxzUHJlbWlzZXNBbmRDb25jbHVzaW9uKGxhYmVscywgcHJlbWlzZXMsIGNvbmNsdXNpb24pIHtcbiAgbGV0IHJ1bGVTdHJpbmcgPSBFTVBUWV9TVFJJTkc7XG5cbiAgY29uc3QgY29uY2x1c2lvblN0cmluZyA9IGNvbmNsdXNpb24uZ2V0U3RyaW5nKCksXG4gICAgICAgIHByZW1pc2VzU3RyaW5nID0gcHJlbWlzZXNTdHJpbmdGcm9tUHJlbWlzZXMocHJlbWlzZXMpLFxuICAgICAgICBsYWJlbHNTdHJpbmcgPSBsYWJlbHNTdHJpbmdGcm9tTGFiZWxzKGxhYmVscyk7XG5cbiAgcnVsZVN0cmluZyA9IGAke3J1bGVTdHJpbmd9JHtsYWJlbHNTdHJpbmd9IDo6IGA7XG5cbiAgcnVsZVN0cmluZyA9IChwcmVtaXNlc1N0cmluZyAhPT0gbnVsbCkgP1xuICAgICAgICAgICAgICAgICBgJHtydWxlU3RyaW5nfVske3ByZW1pc2VzU3RyaW5nfV0uLi4ke2NvbmNsdXNpb25TdHJpbmd9YCA6XG4gICAgICAgICAgICAgICAgICAgYCR7cnVsZVN0cmluZ30ke2NvbmNsdXNpb25TdHJpbmd9YDtcblxuICByZXR1cm4gcnVsZVN0cmluZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN1YnByb29mU3RyaW5nRnJvbVN1cHBvc2l0aW9uc0FuZFN1YkRlcml2YXRpb24oc3VwcG9zaXRpb25zLCBzdWJEZXJpdmF0aW9uKSB7XG4gIGNvbnN0IGxhc3RTdGVwID0gc3ViRGVyaXZhdGlvbi5nZXRMYXN0U3RlcCgpLFxuICAgICAgICBzdXBwb3NpdGlvbnNTdHJpbmcgPSBzdXBwb3NpdGlvbnNTdHJpbmdGcm9tU3VwcG9zaXRpb25zKHN1cHBvc2l0aW9ucyksXG4gICAgICAgIGxhc3RTdGVwU3RyaW5nID0gbGFzdFN0ZXAuZ2V0U3RyaW5nKCksXG4gICAgICAgIHN1YnByb29mU3RyaW5nID0gYFske3N1cHBvc2l0aW9uc1N0cmluZ31dLi4uJHtsYXN0U3RlcFN0cmluZ31gO1xuXG4gIHJldHVybiBzdWJwcm9vZlN0cmluZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZyYW1lU3Vic3RpdHV0aW9uU3RyaW5nRnJvbUZyYW1lQW5kTWV0YXZhcmlhYmxlKGZyYW1lLCBtZXRhdmFyaWFibGUpIHtcbiAgY29uc3QgZnJhbWVTdHJpbmcgPSBmcmFtZS5nZXRTdHJpbmcoKSxcbiAgICAgICAgbWV0YXZhcmlhYmxlU3RyaW5nID0gbWV0YXZhcmlhYmxlLmdldFN0cmluZygpLFxuICAgICAgICBzdHJpbmcgPSBgWyR7ZnJhbWVTdHJpbmd9IGZvciBbJHttZXRhdmFyaWFibGVTdHJpbmd9XV1gO1xuXG4gIHJldHVybiBzdHJpbmc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZWN0aW9uU3RyaW5nRnJvbUh5cG90aGVzZXNBbmRUb3BMZXZlbEFzc2VydGlvbihoeXBvdGhlc2VzLCB0b3BMZXZlbEFzc2VydGlvbikge1xuICBjb25zdCB0b3BMZXZlbEFzc2VydGlvblN0cmluZyA9IHRvcExldmVsQXNzZXJ0aW9uLmdldFN0cmluZygpLFxuICAgICAgICBoeXBvdGhlc2VzU3RyaW5nID0gaHlwb3RoZXNlc1N0cmluZ0Zyb21IeXBvdGhlc2VzKGh5cG90aGVzZXMpLFxuICAgICAgICBzZWN0aW9uU3RyaW5nID0gYFske2h5cG90aGVzZXNTdHJpbmd9XTo6OiAke3RvcExldmVsQXNzZXJ0aW9uU3RyaW5nfWA7XG5cbiAgcmV0dXJuIHNlY3Rpb25TdHJpbmc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtZXRhTGV2ZWxBc3N1bXB0aW9uU3RyaW5nRnJvbVJlZmVyZW5jZUFuZFN0YXRlbWVudChyZWZlcmVuY2UsIHN0YXRlbWVudCkge1xuICBjb25zdCBzdGF0ZW1lbnRTdHJpbmcgPSBzdGF0ZW1lbnQuZ2V0U3RyaW5nKCksXG4gICAgICAgIHJlZmVybmVjZVN0cmluZyA9IHJlZmVyZW5jZS5nZXRTdHJpbmcoKSxcbiAgICAgICAgbWV0YUxldmVsQXNzdW1wdGlvblN0cmluZyA9IGAke3JlZmVybmVjZVN0cmluZ30gOjogJHtzdGF0ZW1lbnRTdHJpbmd9YDtcblxuICByZXR1cm4gbWV0YUxldmVsQXNzdW1wdGlvblN0cmluZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb2NlZHVyZUNhbGxTdHJpbmdGcm9tUHJvY2VkdXJlUmVmZXJlbmNlQW5kUGFyYW1ldGVycyhwcm9jZWR1cmVSZWZlcmVuY2UsIHBhcmFtZXRlcnMpIHtcbiAgY29uc3QgcHJvY2VkdXJlUmVmZXJlbmNlTmFtZSA9IHByb2NlZHVyZVJlZmVyZW5jZS5nZXROYW1lKCksXG4gICAgICAgIHBhcmFtZXRlcnNTdHJpbmcgPSBwYXJhbWV0ZXJzU3RyaW5nRnJvbVBhcmFtZXRlcnMocGFyYW1ldGVycyksXG4gICAgICAgIHByb2NlZHVyZUNhbGxTdHJpbmcgPSBgQCR7cHJvY2VkdXJlUmVmZXJlbmNlTmFtZX0oJHtwYXJhbWV0ZXJzU3RyaW5nfSlgO1xuXG4gIHJldHVybiBwcm9jZWR1cmVDYWxsU3RyaW5nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RhdGVtZW50U3Vic3RpdHV0aW9uU3RyaW5nRnJvbVN0YXRlbWVudEFuZE1ldGF2YXJpYWJsZShzdGF0ZW1lbnQsIG1ldGF2YXJpYWJsZSkge1xuICBjb25zdCBzdGF0ZW1lbnRTdHJpbmcgPSBzdGF0ZW1lbnQuZ2V0U3RyaW5nKCksXG4gICAgICAgIG1ldGF2YXJpYWJsZVN0cmluZyA9IG1ldGF2YXJpYWJsZS5nZXRTdHJpbmcoKSxcbiAgICAgICAgc3RhdGVtZW50U3Vic3RpdHV0aW9uU3RyaW5nID0gYFske3N0YXRlbWVudFN0cmluZ30gZm9yICR7bWV0YXZhcmlhYmxlU3RyaW5nfV1gO1xuXG4gIHJldHVybiBzdGF0ZW1lbnRTdWJzdGl0dXRpb25TdHJpbmc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWZlcmVuY2VTdWJzdGl0dXRpb25TdHJpbmdGcm9tUmVmZXJlbmNlQW5kTWV0YXZhcmlhYmxlKHJlZmVyZW5jZSwgbWV0YXZhcmlhYmxlKSB7XG4gIGNvbnN0IHJlZmVyZW5jZVN0cmluZyA9IHJlZmVyZW5jZS5nZXRTdHJpbmcoKSxcbiAgICAgICAgbWV0YXZhcmlhYmxlU3RyaW5nID0gbWV0YXZhcmlhYmxlLmdldFN0cmluZygpLFxuICAgICAgICByZWZlcmVuY2VTdWJzdGl0dXRpb25TdHJpbmcgPSBgWyR7cmVmZXJlbmNlU3RyaW5nfSBmb3IgJHttZXRhdmFyaWFibGVTdHJpbmd9XWA7XG5cbiAgcmV0dXJuIHJlZmVyZW5jZVN1YnN0aXR1dGlvblN0cmluZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbXBsZXhUeXBlRGVjbGFyYXRpb25TdHJpbmdGcm9tVHlwZVN1cGVyVHlwZXNBbmRQcm92aXNpb25hbCh0eXBlLCBzdXBlclR5cGVzLCBwcm92aXNpb25hbCkge1xuICBjb25zdCB0eXBlU3RyaW5nID0gdHlwZS5nZXRTdHJpbmcoKSxcbiAgICAgICAgc3VwZXJUeXBlc1N0cmluZyA9IHN1cGVyVHlwZXNTdHJpbmdGcm9tU3VwZXJUeXBlcyhzdXBlclR5cGVzKSxcbiAgICAgICAgcHJvdmlzaW9uYWxTdHJpbmcgPSBwcm92aXNpbmFsU3RyaW5nRnJvbVByb3Zpc2lvbmFsKHByb3Zpc2lvbmFsKSxcbiAgICAgICAgY29tcGxleFR5cGVEZWNsYXJhdGlvblN0cmluZyA9IGAke3Byb3Zpc2lvbmFsU3RyaW5nfSR7dHlwZVN0cmluZ30ke3N1cGVyVHlwZXNTdHJpbmd9YDtcblxuICByZXR1cm4gY29tcGxleFR5cGVEZWNsYXJhdGlvblN0cmluZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRvcExldmVsTWV0YUFzc2VydGlvblN0cmluZ0Zyb21MYWJlbFN1cHBvc2l0aW9uc0FuZERlZHVjdGlvbihsYWJlbCwgc3VwcG9zaXRpb25zLCBkZWR1Y3Rpb24pIHtcbiAgY29uc3QgbGFiZWxTdHJpbmcgPSBsYWJlbC5nZXRTdHJpbmcoKSxcbiAgICAgICAgZGVkdWN0aW9uU3RyaW5nID0gZGVkdWN0aW9uLmdldFN0cmluZygpLFxuICAgICAgICBzdXBwb3NpdGlvbnNTdHJpbmcgPSBzdXBwb3NpdGlvbnNTdHJpbmdGcm9tU3VwcG9zaXRpb25zKHN1cHBvc2l0aW9ucyksXG4gICAgICAgIHRvcExldmVsTWV0YUFzc2VydGlvblN0cmluZyA9IChzdXBwb3NpdGlvbnNTdHJpbmcgIT09IG51bGwpID9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGAke2xhYmVsU3RyaW5nfSA6OiBbJHtzdXBwb3NpdGlvbnNTdHJpbmd9XS4uLiR7ZGVkdWN0aW9uU3RyaW5nfWAgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgJHtsYWJlbFN0cmluZ30gOjogJHtkZWR1Y3Rpb25TdHJpbmd9YDtcblxuICByZXR1cm4gdG9wTGV2ZWxNZXRhQXNzZXJ0aW9uU3RyaW5nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdG9wTGV2ZWxBc3NlcnRpb25TdHJpbmdGcm9tTGFiZWxzU2lnbmF0dXJlU3VwcG9zaXRpb25zQW5kRGVkdWN0aW9uKGxhYmVscywgc2lnbmF0dXJlLCBzdXBwb3NpdGlvbnMsIGRlZHVjdGlvbikge1xuICBsZXQgdG9wTGV2ZWxBc3NlcnRpb25TdHJpbmcgPSBFTVBUWV9TVFJJTkc7XG5cbiAgY29uc3QgZGVkdWN0aW9uU3RyaW5nID0gZGVkdWN0aW9uLmdldFN0cmluZygpLFxuICAgICAgICBsYWJlbHNTdHJpbmcgPSBsYWJlbHNTdHJpbmdGcm9tTGFiZWxzKGxhYmVscyksXG4gICAgICAgIHNpZ25hdHVyZVN0cmluZyA9IHNpZ25hdHVyZVN0cmluZ0Zyb21TaWduYXR1cmUoc2lnbmF0dXJlKSxcbiAgICAgICAgc3VwcG9zaXRpb25zU3RyaW5nID0gc3VwcG9zaXRpb25zU3RyaW5nRnJvbVN1cHBvc2l0aW9ucyhzdXBwb3NpdGlvbnMpO1xuXG4gIHRvcExldmVsQXNzZXJ0aW9uU3RyaW5nID0gKGxhYmVsc1N0cmluZyAhPT0gbnVsbCkgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgJHt0b3BMZXZlbEFzc2VydGlvblN0cmluZ30ke2xhYmVsc1N0cmluZ31gIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgJHt0b3BMZXZlbEFzc2VydGlvblN0cmluZ31gO1xuICB0b3BMZXZlbEFzc2VydGlvblN0cmluZyA9IChzaWduYXR1cmVTdHJpbmcgIT09IG51bGwpID9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYCR7dG9wTGV2ZWxBc3NlcnRpb25TdHJpbmd9JHtzaWduYXR1cmVTdHJpbmd9YCA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYCR7dG9wTGV2ZWxBc3NlcnRpb25TdHJpbmd9YDtcblxuXG4gIHRvcExldmVsQXNzZXJ0aW9uU3RyaW5nID0gKHN1cHBvc2l0aW9uc1N0cmluZyAhPT0gbnVsbCkgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgJHt0b3BMZXZlbEFzc2VydGlvblN0cmluZ30gOjogWyR7c3VwcG9zaXRpb25zU3RyaW5nfV0uLi4ke2RlZHVjdGlvblN0cmluZ31gIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgJHt0b3BMZXZlbEFzc2VydGlvblN0cmluZ30gOjogJHtkZWR1Y3Rpb25TdHJpbmd9YDtcblxuICByZXR1cm4gdG9wTGV2ZWxBc3NlcnRpb25TdHJpbmc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGF0ZW1lbnRTdWJzdGl0dXRpb25TdHJpbmdGcm9tU3RhdGVtZW50TWV0YXZhcmlhYmxlQW5kU3Vic3RpdHV0aW9uKHN0YXRlbWVudCwgbWV0YXZhcmlhYmxlLCBzdWJzdGl0dXRpb24pIHtcbiAgY29uc3Qgc3RhdGVtZW50U3RyaW5nID0gc3RhdGVtZW50LmdldFN0cmluZygpLFxuICAgICAgICBtZXRhdmFyaWFibGVTdHJpbmcgPSBtZXRhdmFyaWFibGUuZ2V0U3RyaW5nKCksXG4gICAgICAgIHN1YnN0aXR1dGlvblN0cmluZyA9IHN1YnN0aXR1dGlvbi5nZXRTdHJpbmcoKSxcbiAgICAgICAgc3RhdGVtZW50U3Vic3RpdHV0aW9uU3RyaW5nID0gYFske3N0YXRlbWVudFN0cmluZ30gZm9yICR7bWV0YXZhcmlhYmxlU3RyaW5nfSR7c3Vic3RpdHV0aW9uU3RyaW5nfV1gO1xuXG4gIHJldHVybiBzdGF0ZW1lbnRTdWJzdGl0dXRpb25TdHJpbmc7XG59XG4iXSwibmFtZXMiOlsiY29tcGxleFR5cGVEZWNsYXJhdGlvblN0cmluZ0Zyb21UeXBlU3VwZXJUeXBlc0FuZFByb3Zpc2lvbmFsIiwiZXF1aXZhbGVuY2VTdHJpbmdGcm9tVGVybXMiLCJmcmFtZVN1YnN0aXR1dGlvblN0cmluZ0Zyb21GcmFtZUFuZE1ldGF2YXJpYWJsZSIsImh5cG90aGVzZXNTdHJpbmdGcm9tSHlwb3RoZXNlcyIsImxhYmVsc1N0cmluZ0Zyb21MYWJlbHMiLCJtZXRhTGV2ZWxBc3N1bXB0aW9uU3RyaW5nRnJvbVJlZmVyZW5jZUFuZFN0YXRlbWVudCIsInBhcmFtZXRlcnNTdHJpbmdGcm9tUGFyYW1ldGVycyIsInByZW1pc2VzU3RyaW5nRnJvbVByZW1pc2VzIiwicHJvY2VkdXJlQ2FsbFN0cmluZ0Zyb21Qcm9jZWR1cmVSZWZlcmVuY2VBbmRQYXJhbWV0ZXJzIiwicHJvdmlzaW5hbFN0cmluZ0Zyb21Qcm92aXNpb25hbCIsInByb3Zpc2lvbmFsbHlTdHJpbmdGcm9tUHJvdmlzaW9uYWwiLCJyZWZlcmVuY2VTdWJzdGl0dXRpb25TdHJpbmdGcm9tUmVmZXJlbmNlQW5kTWV0YXZhcmlhYmxlIiwicnVsc1N0cmluZ0Zyb21MYWJlbHNQcmVtaXNlc0FuZENvbmNsdXNpb24iLCJzZWN0aW9uU3RyaW5nRnJvbUh5cG90aGVzZXNBbmRUb3BMZXZlbEFzc2VydGlvbiIsInNpZ25hdHVyZVN0cmluZ0Zyb21TaWduYXR1cmUiLCJzdGF0ZW1lbnRTdWJzdGl0dXRpb25TdHJpbmdGcm9tU3RhdGVtZW50QW5kTWV0YXZhcmlhYmxlIiwic3RhdGVtZW50U3Vic3RpdHV0aW9uU3RyaW5nRnJvbVN0YXRlbWVudE1ldGF2YXJpYWJsZUFuZFN1YnN0aXR1dGlvbiIsInN1YnByb29mU3RyaW5nRnJvbVN1cHBvc2l0aW9uc0FuZFN1YkRlcml2YXRpb24iLCJzdXBlclR5cGVzU3RyaW5nRnJvbVN1cGVyVHlwZXMiLCJzdXBwb3NpdGlvbnNTdHJpbmdGcm9tU3VwcG9zaXRpb25zIiwidGVybVN1YnN0aXR1dGlvblN0cmluZ0Zyb21UZXJtQW5kVmFyaWFibGUiLCJ0ZXJtc1N0cmluZ0Zyb21UZXJtcyIsInRvcExldmVsQXNzZXJ0aW9uU3RyaW5nRnJvbUxhYmVsc1NpZ25hdHVyZVN1cHBvc2l0aW9uc0FuZERlZHVjdGlvbiIsInRvcExldmVsTWV0YUFzc2VydGlvblN0cmluZ0Zyb21MYWJlbFN1cHBvc2l0aW9uc0FuZERlZHVjdGlvbiIsInR5cGVTdHJpbmdGcm9tTm9taW5hbFR5cGVOYW1lIiwidGVybXMiLCJ0ZXJtc1N0cmluZyIsInJlZHVjZSIsInRlcm0iLCJ0ZXJtU3RyaW5nIiwiZ2V0U3RyaW5nIiwibGFiZWxzIiwibGFiZWxzU3RyaW5nIiwibGFiZWwiLCJsYWJlbFN0cmluZyIsInByZW1pc2VzIiwicHJlbWlzZXNTdHJpbmciLCJwcmVtaXNlIiwicHJlbWlzZVN0cmluZyIsImh5cG90aGVzZXMiLCJoeXBvdGhlc2VzU3RyaW5nIiwiaHlwb3RoZXNpcyIsImh5cG90aGVzaXNTdHJpbmciLCJzdXBlclR5cGVzIiwic3VwZXJUeXBlc1N0cmluZyIsImJhc2VUeXBlIiwiYmFzZVR5cGVGcm9tTm90aGluZyIsInN1cGVyVHlwZSIsInN1cGVyVHlwZVN0cmluZyIsIkVNUFRZX1NUUklORyIsInBhcmFtZXRlcnMiLCJwYXJhbWV0ZXJzU3RyaW5nIiwicGFyYW1ldGVyIiwicGFyYW1ldGVyU3RyaW5nIiwicHJvdmlzaW9uYWwiLCJwcm92aXNpbmFsU3RyaW5nIiwiUFJPVklTSU9OQUwiLCJwcm92aXNpbmFsbHlTdHJpbmciLCJQUk9WSVNJT05BTExZIiwic3VwcG9zaXRpb25zIiwic3VwcG9zaXRpb25zU3RyaW5nIiwic3VwcG9zaXRpb24iLCJzdXBwb3NpdGlvblN0cmluZyIsImVxdWl2YWxlbmNlU3RyaW5nIiwic2lnbmF0dXJlIiwic2lnbmF0dXJlU3RyaW5nIiwibm9taW5hbFR5cGVOYW1lIiwidHlwZVN0cmluZyIsInZhcmlhYmxlIiwidmFyaWFibGVTdHJpbmciLCJ0ZXJtU3Vic3RpdHV0aW9uU3RyaW5nIiwiY29uY2x1c2lvbiIsInJ1bGVTdHJpbmciLCJjb25jbHVzaW9uU3RyaW5nIiwic3ViRGVyaXZhdGlvbiIsImxhc3RTdGVwIiwiZ2V0TGFzdFN0ZXAiLCJsYXN0U3RlcFN0cmluZyIsInN1YnByb29mU3RyaW5nIiwiZnJhbWUiLCJtZXRhdmFyaWFibGUiLCJmcmFtZVN0cmluZyIsIm1ldGF2YXJpYWJsZVN0cmluZyIsInN0cmluZyIsInRvcExldmVsQXNzZXJ0aW9uIiwidG9wTGV2ZWxBc3NlcnRpb25TdHJpbmciLCJzZWN0aW9uU3RyaW5nIiwicmVmZXJlbmNlIiwic3RhdGVtZW50Iiwic3RhdGVtZW50U3RyaW5nIiwicmVmZXJuZWNlU3RyaW5nIiwibWV0YUxldmVsQXNzdW1wdGlvblN0cmluZyIsInByb2NlZHVyZVJlZmVyZW5jZSIsInByb2NlZHVyZVJlZmVyZW5jZU5hbWUiLCJnZXROYW1lIiwicHJvY2VkdXJlQ2FsbFN0cmluZyIsInN0YXRlbWVudFN1YnN0aXR1dGlvblN0cmluZyIsInJlZmVyZW5jZVN0cmluZyIsInJlZmVyZW5jZVN1YnN0aXR1dGlvblN0cmluZyIsInR5cGUiLCJwcm92aXNpb25hbFN0cmluZyIsImNvbXBsZXhUeXBlRGVjbGFyYXRpb25TdHJpbmciLCJkZWR1Y3Rpb24iLCJkZWR1Y3Rpb25TdHJpbmciLCJ0b3BMZXZlbE1ldGFBc3NlcnRpb25TdHJpbmciLCJzdWJzdGl0dXRpb24iLCJzdWJzdGl0dXRpb25TdHJpbmciXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7OztRQXVPZ0JBO2VBQUFBOztRQXRHQUM7ZUFBQUE7O1FBc0RBQztlQUFBQTs7UUF4SUFDO2VBQUFBOztRQTVCQUM7ZUFBQUE7O1FBb0xBQztlQUFBQTs7UUFsSEFDO2VBQUFBOztRQXBEQUM7ZUFBQUE7O1FBOEtBQztlQUFBQTs7UUE1R0FDO2VBQUFBOztRQVFBQztlQUFBQTs7UUFvSEFDO2VBQUFBOztRQWpFQUM7ZUFBQUE7O1FBaUNBQztlQUFBQTs7UUF2REFDO2VBQUFBOztRQStFQUM7ZUFBQUE7O1FBMkRBQztlQUFBQTs7UUFwR0FDO2VBQUFBOztRQWpIQUM7ZUFBQUE7O1FBc0RBQztlQUFBQTs7UUFtQ0FDO2VBQUFBOztRQWpKQUM7ZUFBQUE7O1FBc1BBQztlQUFBQTs7UUFYQUM7ZUFBQUE7O1FBaEdBQztlQUFBQTs7O3NCQTlJb0I7MkJBQ3FCO0FBRWxELFNBQVNILHFCQUFxQkksS0FBSztJQUN4QyxNQUFNQyxjQUFjRCxNQUFNRSxNQUFNLENBQUMsQ0FBQ0QsYUFBYUU7UUFDN0MsTUFBTUMsYUFBYUQsS0FBS0UsU0FBUztRQUVqQ0osY0FBYyxBQUFDQSxnQkFBZ0IsT0FDaEIsR0FBR0EsWUFBWSxFQUFFLEVBQUVHLFlBQVksR0FDNUJBO1FBRWxCLE9BQU9IO0lBQ1QsR0FBRztJQUVILE9BQU9BO0FBQ1Q7QUFFTyxTQUFTdEIsdUJBQXVCMkIsTUFBTTtJQUMzQyxNQUFNQyxlQUFlRCxPQUFPSixNQUFNLENBQUMsQ0FBQ0ssY0FBY0M7UUFDaEQsTUFBTUMsY0FBY0QsTUFBTUgsU0FBUztRQUVuQ0UsZUFBZSxBQUFDQSxpQkFBaUIsT0FDaEJFLGNBQ0MsR0FBR0YsYUFBYSxFQUFFLEVBQUVF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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.955",
4
+ "version": "1.0.972",
5
5
  "license": "MIT, Anti-996",
6
6
  "homepage": "https://github.com/djalbat/occam-verify-cli",
7
7
  "description": "Occam's Verifier",
@@ -12,12 +12,12 @@
12
12
  "dependencies": {
13
13
  "argumentative": "^2.0.47",
14
14
  "necessary": "^17.1.7",
15
- "occam-furtle": "^3.0.206",
15
+ "occam-furtle": "^3.0.207",
16
16
  "occam-grammars": "^1.3.524",
17
- "occam-languages": "^0.0.212",
17
+ "occam-languages": "^0.0.214",
18
18
  "occam-lexers": "^23.1.44",
19
19
  "occam-model": "^1.0.506",
20
- "occam-nominal": "^1.0.110",
20
+ "occam-nominal": "^1.0.111",
21
21
  "occam-parsers": "^23.1.50",
22
22
  "occam-server": "^7.0.7"
23
23
  },
@@ -9,15 +9,15 @@ import { mergeEquivalences, equivalencesFromEquality, separateGroundedTermsAndDe
9
9
  const { last, clear, filter } = arrayUtilities;
10
10
 
11
11
  class BoundedContext extends Context {
12
- constructor(context, assignments, equivalences, declaredVariables, declaredJudgements, metaLevelAssumptions, subproofOrProofAssertions) {
12
+ constructor(context, assignments, equivalences, declaredVariables, declaredJudgements, subproofOrProofAssertions, metaLevelAssumptions) {
13
13
  super(context);
14
14
 
15
15
  this.assignments = assignments;
16
16
  this.equivalences = equivalences;
17
17
  this.declaredVariables = declaredVariables;
18
18
  this.declaredJudgements = declaredJudgements;
19
- this.metaLevelAssumptions = metaLevelAssumptions;
20
19
  this.subproofOrProofAssertions = subproofOrProofAssertions;
20
+ this.metaLevelAssumptions = metaLevelAssumptions;
21
21
  }
22
22
 
23
23
  getAssignments() {
@@ -70,10 +70,6 @@ class BoundedContext extends Context {
70
70
  return declaredJudgements;
71
71
  }
72
72
 
73
- getMetaLevelAssumptions() {
74
- return this.metaLevelAssumptions;
75
- }
76
-
77
73
  getSubproofOrProofAssertions() {
78
74
  let subproofOrProofAssertions;
79
75
 
@@ -89,6 +85,10 @@ class BoundedContext extends Context {
89
85
  return subproofOrProofAssertions;
90
86
  }
91
87
 
88
+ getMetaLevelAssumptions() {
89
+ return this.metaLevelAssumptions;
90
+ }
91
+
92
92
  getProofAssertions() {
93
93
  const subproofOrProofAssertions = this.getSubproofOrProofAssertions(),
94
94
  proofAssertions = subproofOrProofAssertions.filter((subproofOrProofAssertion) => {
@@ -335,13 +335,25 @@ class BoundedContext extends Context {
335
335
  return termGrounded;
336
336
  }
337
337
 
338
+ static fromNothing(context) {
339
+ const assignments = [],
340
+ equivalences = [],
341
+ declaredVariables = [],
342
+ declaredJudgements = [],
343
+ metaLevelAssumptions = null,
344
+ subproofOrProofAssertions = [],
345
+ boundedContext = new BoundedContext(context, assignments, equivalences, declaredVariables, declaredJudgements, subproofOrProofAssertions, metaLevelAssumptions);
346
+
347
+ return boundedContext;
348
+ }
349
+
338
350
  static fromMetaLevelAssumptions(metaLevelAssumptions, context) {
339
351
  const assignments = [],
340
352
  equivalences = [],
341
353
  declaredVariables = [],
342
354
  declaredJudgements = [],
343
355
  subproofOrProofAssertions = [],
344
- boundedContext = new BoundedContext(context, assignments, equivalences, declaredVariables, declaredJudgements, metaLevelAssumptions, subproofOrProofAssertions);
356
+ boundedContext = new BoundedContext(context, assignments, equivalences, declaredVariables, declaredJudgements, subproofOrProofAssertions, metaLevelAssumptions);
345
357
 
346
358
  return boundedContext;
347
359
  }
package/src/context.js CHANGED
@@ -24,6 +24,19 @@ export default class Context extends ContextBase {
24
24
  return filePath;
25
25
  }
26
26
 
27
+ getTokens() {
28
+ const context = this.getContext(),
29
+ tokens = context.getTokens();
30
+
31
+ return tokens;
32
+ }
33
+
34
+ setTokens(tokens) {
35
+ const context = this.getContext();
36
+
37
+ context.setTokens(tokens);
38
+ }
39
+
27
40
  getTerms(terms = []) {
28
41
  const context = this.getContext();
29
42
 
@@ -339,6 +352,13 @@ export default class Context extends ContextBase {
339
352
  return propertyRelation;
340
353
  }
341
354
 
355
+ findDerivedSubstitutionByVariableNode(variableNode) {
356
+ const context = this.getContext(),
357
+ derivedSubstitution = context.findDerivedSubstitutionByVariableNode(variableNode);
358
+
359
+ return derivedSubstitution;
360
+ }
361
+
342
362
  findDeclaredJudgementsByMetavariableNode(metavariableNode) {
343
363
  const context = this.getContext(),
344
364
  declaredJudgements = context.findDeclaredJudgementsByMetavariableNode(metavariableNode);
@@ -542,18 +562,18 @@ export default class Context extends ContextBase {
542
562
  return derivedSubstitutionPresent;
543
563
  }
544
564
 
545
- isMetaLevel() {
565
+ isStated() {
546
566
  const context = this.getContext(),
547
- metaLevel = context.isMetaLevel();
567
+ stated = context.isStated();
548
568
 
549
- return metaLevel;
569
+ return stated;
550
570
  }
551
571
 
552
- isStated() {
572
+ isMetaLevel() {
553
573
  const context = this.getContext(),
554
- stated = context.isStated();
574
+ metaLevel = context.isMetaLevel();
555
575
 
556
- return stated;
576
+ return metaLevel;
557
577
  }
558
578
 
559
579
  addTerms(terms) {
@@ -4,7 +4,7 @@ import Assertion from "../assertion";
4
4
 
5
5
  import { define } from "../../elements";
6
6
  import { breakPointFromJSON } from "../../utilities/breakPoint";
7
- import { join, reconcile, instantiate } from "../../utilities/context";
7
+ import { reconcile, instantiate } from "../../utilities/context";
8
8
  import { instantiateSignatureAssertion } from "../../process/instantiate";
9
9
  import { signatureFromSignatureAssertionNode, referenceFromSignatureAssertionNode, signatureAssertionFromStatementNode } from "../../utilities/element";
10
10
 
@@ -148,11 +148,9 @@ export default define(class SignatureAssertion extends Assertion {
148
148
 
149
149
  context.trace(`Unifying the '${signatureAssertionString}' signature assertion's signature...`);
150
150
 
151
- const axiom = context.findAxiomByReference(this.reference);
152
-
153
- context = this.signature.getContext();
154
-
155
151
  reconcile((context) => {
152
+ const axiom = context.findAxiomByReference(this.reference);
153
+
156
154
  signatureUnifies = axiom.unifySignature(this.signature, context);
157
155
  }, context);
158
156
 
@@ -166,19 +164,22 @@ export default define(class SignatureAssertion extends Assertion {
166
164
  async unifyTopLevelAssertion(topLevelAssertion, context) {
167
165
  let topLevelAssertionUnifies;
168
166
 
169
- const axiom = context.findAxiomByReference(this.reference),
170
- signatureContext = this.signature.getContext(),
171
- specificContext = signatureContext; ///
167
+ const topLevelAssertionString = topLevelAssertion.getString(),
168
+ signatureAssertionString = this.getString();
172
169
 
173
- await join(async (specificContext) => {
174
- const context = specificContext; ///
170
+ context.trace(`Unifying the '${topLevelAssertionString}' top-level assertion with the '${signatureAssertionString}' signature assertion...`);
175
171
 
176
- await reconcile(async (context) => {
177
- axiom.unifySignature(this.signature, context);
172
+ await reconcile(async (context) => {
173
+ const axiom = context.findAxiomByReference(this.reference);
178
174
 
179
- topLevelAssertionUnifies = await axiom.unifyTopLevelAssertion(topLevelAssertion, context);
180
- }, context);
181
- }, specificContext, context);
175
+ axiom.unifySignature(this.signature, context);
176
+
177
+ topLevelAssertionUnifies = await axiom.unifyTopLevelAssertion(topLevelAssertion, context);
178
+ }, context);
179
+
180
+ if (topLevelAssertionUnifies) {
181
+ context.trace(`...unified the '${topLevelAssertionString}' top-level assertion with the '${signatureAssertionString}' signature assertion...`);
182
+ }
182
183
 
183
184
  return topLevelAssertionUnifies;
184
185
  }
@@ -186,19 +187,13 @@ export default define(class SignatureAssertion extends Assertion {
186
187
  async unifyStepAndSubproofOrProofAssertions(step, subproofOrProofAssertions, context) {
187
188
  let stepAndSubproofOrProofAssertionsUnify;
188
189
 
189
- const axiom = context.findAxiomByReference(this.reference),
190
- signatureContext = this.signature.getContext(),
191
- specificContext = signatureContext; ///
192
-
193
- await join(async (specificContext) => {
194
- const context = specificContext; ///
190
+ await reconcile(async (context) => {
191
+ const axiom = context.findAxiomByReference(this.reference);
195
192
 
196
- await reconcile(async (context) => {
197
- axiom.unifySignature(this.signature, context);
193
+ axiom.unifySignature(this.signature, context);
198
194
 
199
- stepAndSubproofOrProofAssertionsUnify = await axiom.unifyStepAndSubproofOrProofAssertions(step, subproofOrProofAssertions, context);
200
- }, context);
201
- }, specificContext, context);
195
+ stepAndSubproofOrProofAssertionsUnify = await axiom.unifyStepAndSubproofOrProofAssertions(step, subproofOrProofAssertions, context);
196
+ }, context);
202
197
 
203
198
  return stepAndSubproofOrProofAssertionsUnify;
204
199
  }
@@ -5,10 +5,9 @@ import { arrayUtilities } from "necessary";
5
5
  import Assertion from "../assertion";
6
6
 
7
7
  import { define } from "../../elements";
8
- import { reconcile } from "../../utilities/context";
9
8
  import { breakPointFromJSON } from "../../utilities/breakPoint";
10
- import { join, descend, instantiate } from "../../utilities/context";
11
9
  import { instantiateSubproofAssertion } from "../../process/instantiate";
10
+ import { descend, reconcile, instantiate } from "../../utilities/context";
12
11
  import { subproofAssertionFromStatementNode } from "../../utilities/element";
13
12
 
14
13
  const { last, front, backwardsEvery } = arrayUtilities;
@@ -153,22 +152,20 @@ export default define(class SubproofAssertion extends Assertion {
153
152
 
154
153
  context.trace(`Unifying the '${lastStepString}' last step with the '${lastStatementString}' last statement...`)
155
154
 
156
- const lastStepContext = lastStep.getContext(),
157
- lastStepStatement = lastStep.getStatement();
155
+ const lastStepContext = lastStep.getContext();
158
156
 
159
157
  specificContext = lastStepContext; ///
160
158
 
161
- join((specificContext) => {
162
- reconcile((specificContext) => {
163
- const lastStepStatementUnifies = lastStatement.unifyStatement(lastStepStatement, generalContext, specificContext);
159
+ reconcile((specificContext) => {
160
+ const lastStepStatement = lastStep.getStatement(),
161
+ lastStepStatementUnifies = lastStatement.unifyStatement(lastStepStatement, generalContext, specificContext);
164
162
 
165
- if (lastStepStatementUnifies) {
166
- specificContext.commit(context);
163
+ if (lastStepStatementUnifies) {
164
+ specificContext.commit(context);
167
165
 
168
- lastStepUnifies = true;
169
- }
170
- }, specificContext);
171
- }, specificContext, context);
166
+ lastStepUnifies = true;
167
+ }
168
+ }, specificContext);
172
169
 
173
170
  if (lastStepUnifies) {
174
171
  context.debug(`...unified the '${lastStepString}' last step with the '${lastStatementString}' last statement.`)
@@ -187,22 +184,20 @@ export default define(class SubproofAssertion extends Assertion {
187
184
 
188
185
  context.trace(`Unifying the '${deductionString}' deduction with the '${lastStatementString}' last statement...`)
189
186
 
190
- const deductionContext = deduction.getContext(),
191
- deductionStatement = deduction.getStatement();
187
+ const deductionContext = deduction.getContext();
192
188
 
193
189
  specificContext = deductionContext; ///
194
190
 
195
- join((specificContext) => {
196
- reconcile((specificContext) => {
197
- const deductionStatementUnifies = lastStatement.unifyStatement(deductionStatement, generalContext, specificContext);
191
+ reconcile((specificContext) => {
192
+ const deductionStatement = deduction.getStatement(),
193
+ deductionStatementUnifies = lastStatement.unifyStatement(deductionStatement, generalContext, specificContext);
198
194
 
199
- if (deductionStatementUnifies) {
200
- specificContext.commit(context);
195
+ if (deductionStatementUnifies) {
196
+ specificContext.commit(context);
201
197
 
202
- deductionUnifies = true;
203
- }
204
- }, specificContext);
205
- }, specificContext, context);
198
+ deductionUnifies = true;
199
+ }
200
+ }, specificContext);
206
201
 
207
202
  if (deductionUnifies) {
208
203
  context.debug(`...unified the '${deductionString}' deduction with the '${lastStatementString}' last statement.`)
@@ -221,22 +216,20 @@ export default define(class SubproofAssertion extends Assertion {
221
216
 
222
217
  context.trace(`Unifying the '${suppositionString}' supposition with the '${supposedStatementString}' supposed statement...`)
223
218
 
224
- const suppositionContext = supposition.getContext(),
225
- suppositionStatement = supposition.getStatement();
219
+ const suppositionContext = supposition.getContext();
226
220
 
227
221
  specificContext = suppositionContext; ///
228
222
 
229
- join((specificContext) => {
230
- reconcile((specificContext) => {
231
- const suppositionStatementUnifies = supposedStatement.unifyStatement(suppositionStatement, generalContext, specificContext);
223
+ reconcile((specificContext) => {
224
+ const suppositionStatement = supposition.getStatement(),
225
+ suppositionStatementUnifies = supposedStatement.unifyStatement(suppositionStatement, generalContext, specificContext);
232
226
 
233
- if (suppositionStatementUnifies) {
234
- specificContext.commit(context);
227
+ if (suppositionStatementUnifies) {
228
+ specificContext.commit(context);
235
229
 
236
- suppositionUnifies = true;
237
- }
238
- }, specificContext);
239
- }, specificContext, context);
230
+ suppositionUnifies = true;
231
+ }
232
+ }, specificContext);
240
233
 
241
234
  if (suppositionUnifies) {
242
235
  context.debug(`...unified the '${suppositionString}' supposition with the '${supposedStatementString}' supposed statement.`)
@@ -268,24 +261,28 @@ export default define(class SubproofAssertion extends Assertion {
268
261
  unifyTopLevelMetaAssertion(topLevelMetaAssertion, context) {
269
262
  let topLevelMetaAssertionUnifies = false;
270
263
 
271
- const generalContext = context, ///
272
- specificContext = context, ///
273
- subproofAssertionString = this.getString(), ///
264
+ const subproofAssertionString = this.getString(), ///
274
265
  topLevelMetaAssertionString = topLevelMetaAssertion.getString();
275
266
 
276
267
  context.trace(`Unifying the '${topLevelMetaAssertionString}' top level meta-assertion with the '${subproofAssertionString}' subproof assertion...`);
277
268
 
278
- const deduction = topLevelMetaAssertion.getDeduction(),
279
- deductionUnifies = this.unifyDeduction(deduction, generalContext, specificContext);
269
+ reconcile((context) => {
270
+ const deduction = topLevelMetaAssertion.getDeduction(),
271
+ generalContext = context, ///
272
+ specificContext = context, ///
273
+ deductionUnifies = this.unifyDeduction(deduction, generalContext, specificContext);
280
274
 
281
- if (deductionUnifies) {
282
- const suppositions = topLevelMetaAssertion.getSuppositions(),
283
- suppositionsUnify = this.unifySuppositions(suppositions, generalContext, specificContext);
275
+ if (deductionUnifies) {
276
+ const suppositions = topLevelMetaAssertion.getSuppositions(),
277
+ suppositionsUnify = this.unifySuppositions(suppositions, generalContext, specificContext);
284
278
 
285
- if (suppositionsUnify) {
286
- topLevelMetaAssertionUnifies = true;
279
+ if (suppositionsUnify) {
280
+ specificContext.commit();
281
+
282
+ topLevelMetaAssertionUnifies = true;
283
+ }
287
284
  }
288
- }
285
+ }, context);
289
286
 
290
287
  if (topLevelMetaAssertionUnifies) {
291
288
  context.debug(`...unified the '${topLevelMetaAssertionString}' top level meta-assertion with the '${subproofAssertionString}' subproof assertion.`);
@@ -58,7 +58,7 @@ export default define(class TypeAssertion extends Assertion {
58
58
  const stated = context.isStated();
59
59
 
60
60
  let validatesWhenStated = false,
61
- validatesWhenDerived = false;
61
+ validatesWhenDerived = false;
62
62
 
63
63
  if (stated) {
64
64
  validatesWhenStated = this.validateWhenStated(context);
@@ -89,6 +89,35 @@ export default define(class TypeAssertion extends Assertion {
89
89
  return typeAssertion;
90
90
  }
91
91
 
92
+ discharge(context) {
93
+ let discharges = false;
94
+
95
+ const typeAssertionString = this.getString(); ///
96
+
97
+ context.trace(`Discharging the '${typeAssertionString}' type assertion...`);
98
+
99
+ const term = termFromTermAndSubstitutions(this.term, context);
100
+
101
+ if (term !== null) {
102
+ const termType = term.getType(),
103
+ typeEqualToTermType = this.type.isEqualTo(termType);
104
+
105
+ if (typeEqualToTermType) {
106
+ const termEstablished = term.isEstablished();
107
+
108
+ if (termEstablished) {
109
+ discharges = true;
110
+ }
111
+ }
112
+ }
113
+
114
+ if (discharges) {
115
+ context.debug(`...discharged the '${typeAssertionString}' type assertion.`);
116
+ }
117
+
118
+ return discharges;
119
+ }
120
+
92
121
  validateType(context) {
93
122
  let typeValidates;
94
123