occam-verify-cli 1.0.457 → 1.0.473

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 (161) hide show
  1. package/lib/constants.js +13 -1
  2. package/lib/context/ephemeral.js +270 -0
  3. package/lib/context/file.js +102 -66
  4. package/lib/context/liminal.js +120 -0
  5. package/lib/context/literal.js +92 -0
  6. package/lib/context/nominal.js +15 -1
  7. package/lib/context/release.js +66 -7
  8. package/lib/context/scoped.js +48 -40
  9. package/lib/context/synthetic.js +133 -0
  10. package/lib/element/assertion/contained.js +66 -66
  11. package/lib/element/assertion/defined.js +32 -32
  12. package/lib/element/assertion/property.js +39 -39
  13. package/lib/element/assertion/satisfies.js +22 -22
  14. package/lib/element/assumption.js +5 -8
  15. package/lib/element/conclusion.js +14 -13
  16. package/lib/element/constructor.js +2 -2
  17. package/lib/element/deduction.js +14 -13
  18. package/lib/element/derivation.js +3 -3
  19. package/lib/element/equality.js +5 -5
  20. package/lib/element/equivalence.js +112 -107
  21. package/lib/element/equivalences.js +24 -10
  22. package/lib/element/error.js +3 -3
  23. package/lib/element/frame.js +38 -21
  24. package/lib/element/hypothesis.js +2 -2
  25. package/lib/element/judgement.js +6 -5
  26. package/lib/element/metaType.js +1 -2
  27. package/lib/element/metavariable.js +46 -35
  28. package/lib/element/parameter.js +13 -5
  29. package/lib/element/procedureCall.js +16 -16
  30. package/lib/element/proof.js +14 -13
  31. package/lib/element/proofAssertion/premise.js +41 -30
  32. package/lib/element/proofAssertion/step.js +39 -35
  33. package/lib/element/proofAssertion/supposition.js +43 -32
  34. package/lib/element/proofAssertion.js +19 -5
  35. package/lib/element/propertyRelation.js +2 -2
  36. package/lib/element/reference.js +50 -9
  37. package/lib/element/rule.js +26 -28
  38. package/lib/element/section.js +2 -2
  39. package/lib/element/signature.js +9 -6
  40. package/lib/element/statement.js +44 -31
  41. package/lib/element/subproof.js +18 -17
  42. package/lib/element/substitution/frame.js +83 -46
  43. package/lib/element/substitution/reference.js +101 -19
  44. package/lib/element/substitution/statement.js +122 -75
  45. package/lib/element/substitution/term.js +93 -57
  46. package/lib/element/substitution.js +20 -69
  47. package/lib/element/substitutions.js +49 -34
  48. package/lib/element/term.js +30 -21
  49. package/lib/element/topLevelAssertion/axiom.js +8 -6
  50. package/lib/element/topLevelAssertion/conjecture.js +4 -4
  51. package/lib/element/topLevelAssertion/lemma.js +4 -4
  52. package/lib/element/topLevelAssertion/theorem.js +2 -2
  53. package/lib/element/topLevelAssertion.js +30 -23
  54. package/lib/element/topLevelMetaAssertion/metaLemma.js +2 -2
  55. package/lib/element/topLevelMetaAssertion/metatheorem.js +2 -2
  56. package/lib/element/topLevelMetaAssertion.js +16 -12
  57. package/lib/element/variable.js +30 -22
  58. package/lib/index.js +3 -3
  59. package/lib/main.js +3 -3
  60. package/lib/node/frame.js +2 -2
  61. package/lib/node/metavariable.js +4 -4
  62. package/lib/node/parameter.js +28 -7
  63. package/lib/node/substitution/frame.js +9 -31
  64. package/lib/node/substitution/reference.js +137 -0
  65. package/lib/node/substitution/statement.js +9 -31
  66. package/lib/node/substitution/term.js +9 -23
  67. package/lib/nonTerminalNodeMap.js +3 -2
  68. package/lib/process/instantiate.js +2 -14
  69. package/lib/process/unify.js +5 -5
  70. package/lib/tokenTypes.js +22 -0
  71. package/lib/utilities/context.js +54 -19
  72. package/lib/utilities/element.js +161 -336
  73. package/lib/utilities/instance.js +4 -4
  74. package/lib/utilities/string.js +18 -4
  75. package/lib/utilities/unification.js +24 -18
  76. package/lib/utilities/validation.js +31 -31
  77. package/package.json +2 -2
  78. package/src/constants.js +12 -0
  79. package/src/context/{transient.js → ephemeral.js} +15 -112
  80. package/src/context/file.js +66 -67
  81. package/src/context/liminal.js +67 -0
  82. package/src/context/{fragment.js → literal.js} +17 -4
  83. package/src/context/nominal.js +12 -0
  84. package/src/context/release.js +44 -6
  85. package/src/context/scoped.js +41 -31
  86. package/src/context/synthetic.js +60 -0
  87. package/src/element/assertion/contained.js +49 -47
  88. package/src/element/assertion/defined.js +29 -27
  89. package/src/element/assertion/property.js +35 -35
  90. package/src/element/assertion/satisfies.js +19 -18
  91. package/src/element/assumption.js +4 -10
  92. package/src/element/conclusion.js +16 -19
  93. package/src/element/constructor.js +1 -1
  94. package/src/element/deduction.js +16 -21
  95. package/src/element/derivation.js +2 -2
  96. package/src/element/equality.js +4 -4
  97. package/src/element/equivalence.js +115 -135
  98. package/src/element/equivalences.js +9 -7
  99. package/src/element/error.js +4 -2
  100. package/src/element/frame.js +50 -23
  101. package/src/element/hypothesis.js +1 -1
  102. package/src/element/judgement.js +9 -4
  103. package/src/element/metaType.js +0 -1
  104. package/src/element/metavariable.js +54 -53
  105. package/src/element/parameter.js +10 -5
  106. package/src/element/procedureCall.js +20 -18
  107. package/src/element/proof.js +14 -16
  108. package/src/element/proofAssertion/premise.js +46 -42
  109. package/src/element/proofAssertion/step.js +45 -40
  110. package/src/element/proofAssertion/supposition.js +56 -45
  111. package/src/element/proofAssertion.js +23 -5
  112. package/src/element/propertyRelation.js +1 -1
  113. package/src/element/reference.js +64 -16
  114. package/src/element/rule.js +31 -37
  115. package/src/element/section.js +1 -1
  116. package/src/element/signature.js +8 -8
  117. package/src/element/statement.js +51 -40
  118. package/src/element/subproof.js +16 -18
  119. package/src/element/substitution/frame.js +99 -42
  120. package/src/element/substitution/reference.js +120 -20
  121. package/src/element/substitution/statement.js +160 -89
  122. package/src/element/substitution/term.js +104 -63
  123. package/src/element/substitution.js +16 -58
  124. package/src/element/substitutions.js +43 -41
  125. package/src/element/term.js +37 -32
  126. package/src/element/topLevelAssertion/axiom.js +8 -6
  127. package/src/element/topLevelAssertion/conjecture.js +1 -2
  128. package/src/element/topLevelAssertion/lemma.js +2 -3
  129. package/src/element/topLevelAssertion/theorem.js +1 -1
  130. package/src/element/topLevelAssertion.js +31 -27
  131. package/src/element/topLevelMetaAssertion/metaLemma.js +1 -2
  132. package/src/element/topLevelMetaAssertion/metatheorem.js +1 -2
  133. package/src/element/topLevelMetaAssertion.js +15 -13
  134. package/src/element/variable.js +30 -31
  135. package/src/index.js +2 -1
  136. package/src/main.js +2 -1
  137. package/src/node/frame.js +1 -1
  138. package/src/node/metavariable.js +3 -3
  139. package/src/node/parameter.js +32 -5
  140. package/src/node/substitution/frame.js +6 -32
  141. package/src/node/substitution/reference.js +38 -0
  142. package/src/node/substitution/statement.js +6 -32
  143. package/src/node/substitution/term.js +6 -22
  144. package/src/nonTerminalNodeMap.js +3 -0
  145. package/src/process/instantiate.js +0 -8
  146. package/src/process/unify.js +4 -4
  147. package/src/tokenTypes.js +4 -0
  148. package/src/utilities/context.js +43 -17
  149. package/src/utilities/element.js +187 -401
  150. package/src/utilities/instance.js +3 -3
  151. package/src/utilities/string.js +21 -5
  152. package/src/utilities/unification.js +26 -23
  153. package/src/utilities/validation.js +47 -47
  154. package/lib/context/fragment.js +0 -77
  155. package/lib/context/transient.js +0 -371
  156. package/lib/log.js +0 -150
  157. package/lib/utilities/fragment.js +0 -23
  158. package/lib/utilities/node.js +0 -71
  159. package/src/log.js +0 -118
  160. package/src/utilities/fragment.js +0 -11
  161. package/src/utilities/node.js +0 -85
@@ -24,23 +24,6 @@ function _interop_require_default(obj) {
24
24
  default: obj
25
25
  };
26
26
  }
27
- function unifyTermWithBracketedConstructor(term, context, validateAhead) {
28
- var termUnifiesWithBracketedConstructor;
29
- var bracketedConstructor = (0, _instance.bracketedConstructorFromNothing)();
30
- termUnifiesWithBracketedConstructor = bracketedConstructor.unifyTerm(term, context, validateAhead);
31
- return termUnifiesWithBracketedConstructor;
32
- }
33
- function unifyTermWithConstructors(term, context, validateAhead) {
34
- var termUnifiesWithConstructors;
35
- var constructors = context.getConstructors();
36
- termUnifiesWithConstructors = constructors.some(function(constructor) {
37
- var unifiesWithConstructor = constructor.unifyTerm(term, context, validateAhead);
38
- if (unifiesWithConstructor) {
39
- return true;
40
- }
41
- });
42
- return termUnifiesWithConstructors;
43
- }
44
27
  function validateTermAsVariable(term, context, validateAhead) {
45
28
  var termValidatesAsVariable = false;
46
29
  var termNode = term.getNode(), variableNode = termNode.getVariableNode();
@@ -62,12 +45,29 @@ function validateTermAsVariable(term, context, validateAhead) {
62
45
  }
63
46
  return termValidatesAsVariable;
64
47
  }
65
- function validateStatementAsMetavariableAndSubstitution(statement, assignments, stated, context) {
48
+ function unifyTermWithConstructors(term, context, validateAhead) {
49
+ var termUnifiesWithConstructors;
50
+ var constructors = context.getConstructors();
51
+ termUnifiesWithConstructors = constructors.some(function(constructor) {
52
+ var unifiesWithConstructor = constructor.unifyTerm(term, context, validateAhead);
53
+ if (unifiesWithConstructor) {
54
+ return true;
55
+ }
56
+ });
57
+ return termUnifiesWithConstructors;
58
+ }
59
+ function unifyTermWithBracketedConstructor(term, context, validateAhead) {
60
+ var termUnifiesWithBracketedConstructor;
61
+ var bracketedConstructor = (0, _instance.bracketedConstructorFromNothing)();
62
+ termUnifiesWithBracketedConstructor = bracketedConstructor.unifyTerm(term, context, validateAhead);
63
+ return termUnifiesWithBracketedConstructor;
64
+ }
65
+ function validateStatementAsMetavariable(statement, assignments, stated, context) {
66
66
  var statementValidatesAsMetavariableAndSubstitution = false;
67
67
  var statementNode = statement.getNode(), metavariableNode = statementNode.getMetavariableNode();
68
68
  if (metavariableNode !== null) {
69
69
  var statementString = statement.getString();
70
- context.trace("Validating the '".concat(statementString, "' statement as a metavariable and substitution..."));
70
+ context.trace("Validating the '".concat(statementString, "' statement as a metavariable..."));
71
71
  var metavariableName = metavariableNode.getMetavariableName(), metavariable = context.findMetavariableByMetavariableName(metavariableName);
72
72
  if (metavariable !== null) {
73
73
  statementValidatesAsMetavariableAndSubstitution = true;
@@ -80,17 +80,11 @@ function validateStatementAsMetavariableAndSubstitution(statement, assignments,
80
80
  }
81
81
  }
82
82
  if (statementValidatesAsMetavariableAndSubstitution) {
83
- context.debug("...validated the '".concat(statementString, "' statement as a metavariable and substitution."));
83
+ context.debug("...validated the '".concat(statementString, "' statement as a metavariable."));
84
84
  }
85
85
  }
86
86
  return statementValidatesAsMetavariableAndSubstitution;
87
87
  }
88
- function unifyStatementWithBracketedCombinator(statement, assignments, stated, context) {
89
- stated = true; ///
90
- assignments = null; ///
91
- var bracketedCombinator = (0, _instance.bracketedCombinatorFromNothing)(), statementUnifiesWithBracketedCombinator = bracketedCombinator.unifyStatement(statement, assignments, stated, context);
92
- return statementUnifiesWithBracketedCombinator;
93
- }
94
88
  function unifyStatementWithCombinators(statement, assignments, stated, context) {
95
89
  stated = true; ///
96
90
  assignments = null; ///
@@ -102,6 +96,12 @@ function unifyStatementWithCombinators(statement, assignments, stated, context)
102
96
  });
103
97
  return statementUnifiesWithCombinators;
104
98
  }
99
+ function unifyStatementWithBracketedCombinator(statement, assignments, stated, context) {
100
+ stated = true; ///
101
+ assignments = null; ///
102
+ var bracketedCombinator = (0, _instance.bracketedCombinatorFromNothing)(), statementUnifiesWithBracketedCombinator = bracketedCombinator.unifyStatement(statement, assignments, stated, context);
103
+ return statementUnifiesWithBracketedCombinator;
104
+ }
105
105
  function validateStatementAsEquality(statement, assignments, stated, context) {
106
106
  var statementValidatesAsEquality = false;
107
107
  var equality = (0, _statement.equalityFromStatement)(statement, context);
@@ -227,14 +227,14 @@ function validateStatementAsSatisfiesAssertion(statement, assignments, stated, c
227
227
  return validatesAStatementsSatisfiesAssertion;
228
228
  }
229
229
  var validateTerms = [
230
- unifyTermWithBracketedConstructor,
230
+ validateTermAsVariable,
231
231
  unifyTermWithConstructors,
232
- validateTermAsVariable
232
+ unifyTermWithBracketedConstructor
233
233
  ];
234
234
  var validateStatements = [
235
- validateStatementAsMetavariableAndSubstitution,
236
- unifyStatementWithBracketedCombinator,
235
+ validateStatementAsMetavariable,
237
236
  unifyStatementWithCombinators,
237
+ unifyStatementWithBracketedCombinator,
238
238
  validateStatementAsEquality,
239
239
  validateStatementAsJudgement,
240
240
  validateStatementAsTypeAssertion,
@@ -245,4 +245,4 @@ var validateStatements = [
245
245
  validateStatementAsSatisfiesAssertion
246
246
  ];
247
247
 
248
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsaXRpZXMvdmFsaWRhdGlvbi5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IGVsZW1lbnRzIGZyb20gXCIuLi9lbGVtZW50c1wiO1xuXG5pbXBvcnQgeyBicmFja2V0ZWRDb25zdHJ1Y3RvckZyb21Ob3RoaW5nLCBicmFja2V0ZWRDb21iaW5hdG9yRnJvbU5vdGhpbmcgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2luc3RhbmNlXCI7XG5pbXBvcnQgeyBlcXVhbGl0eUZyb21TdGF0ZW1lbnQsXG4gICAgICAgICBqdWRnZW1lbnRGcm9tU3RhdGVtZW50LFxuICAgICAgICAgdHlwZUFzc2VydGlvbkZyb21TdGF0ZW1lbnQsXG4gICAgICAgICBkZWZpbmVkQXNzZXJ0aW9uRnJvbVN0YXRlbWVudCxcbiAgICAgICAgIHByb3BlcnR5QXNzZXJ0aW9uRnJvbVN0YXRlbWVudCxcbiAgICAgICAgIHN1YnByb29mQXNzZXJ0aW9uRnJvbVN0YXRlbWVudCxcbiAgICAgICAgIGNvbnRhaW5lZEFzc2VydGlvbkZyb21TdGF0ZW1lbnQsXG4gICAgICAgICBzYXRpc2ZpZXNBc3NlcnRpb25Gcm9tU3RhdGVtZW50IH0gZnJvbSBcIi4uL3V0aWxpdGllcy9zdGF0ZW1lbnRcIjtcblxuZnVuY3Rpb24gdW5pZnlUZXJtV2l0aEJyYWNrZXRlZENvbnN0cnVjdG9yKHRlcm0sIGNvbnRleHQsIHZhbGlkYXRlQWhlYWQpIHtcbiAgbGV0IHRlcm1VbmlmaWVzV2l0aEJyYWNrZXRlZENvbnN0cnVjdG9yO1xuXG4gIGNvbnN0IGJyYWNrZXRlZENvbnN0cnVjdG9yID0gYnJhY2tldGVkQ29uc3RydWN0b3JGcm9tTm90aGluZygpO1xuXG4gIHRlcm1VbmlmaWVzV2l0aEJyYWNrZXRlZENvbnN0cnVjdG9yID0gYnJhY2tldGVkQ29uc3RydWN0b3IudW5pZnlUZXJtKHRlcm0sIGNvbnRleHQsIHZhbGlkYXRlQWhlYWQpO1xuXG4gIHJldHVybiB0ZXJtVW5pZmllc1dpdGhCcmFja2V0ZWRDb25zdHJ1Y3Rvcjtcbn1cblxuZnVuY3Rpb24gdW5pZnlUZXJtV2l0aENvbnN0cnVjdG9ycyh0ZXJtLCBjb250ZXh0LCB2YWxpZGF0ZUFoZWFkKSB7XG4gIGxldCB0ZXJtVW5pZmllc1dpdGhDb25zdHJ1Y3RvcnM7XG5cbiAgY29uc3QgY29uc3RydWN0b3JzID0gY29udGV4dC5nZXRDb25zdHJ1Y3RvcnMoKTtcblxuICB0ZXJtVW5pZmllc1dpdGhDb25zdHJ1Y3RvcnMgPSBjb25zdHJ1Y3RvcnMuc29tZSgoY29uc3RydWN0b3IpID0+IHtcbiAgICBjb25zdCB1bmlmaWVzV2l0aENvbnN0cnVjdG9yID0gY29uc3RydWN0b3IudW5pZnlUZXJtKHRlcm0sIGNvbnRleHQsIHZhbGlkYXRlQWhlYWQpO1xuXG4gICAgaWYgKHVuaWZpZXNXaXRoQ29uc3RydWN0b3IpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIHRlcm1VbmlmaWVzV2l0aENvbnN0cnVjdG9ycztcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVUZXJtQXNWYXJpYWJsZSh0ZXJtLCBjb250ZXh0LCB2YWxpZGF0ZUFoZWFkKSB7XG4gIGxldCB0ZXJtVmFsaWRhdGVzQXNWYXJpYWJsZSA9IGZhbHNlO1xuXG4gIGNvbnN0IHRlcm1Ob2RlID0gdGVybS5nZXROb2RlKCksXG4gICAgICAgIHZhcmlhYmxlTm9kZSA9IHRlcm1Ob2RlLmdldFZhcmlhYmxlTm9kZSgpO1xuXG4gIGlmICh2YXJpYWJsZU5vZGUgIT09IG51bGwpIHtcbiAgICBjb25zdCB0ZXJtU3RyaW5nID0gdGVybS5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke3Rlcm1TdHJpbmd9JyB0ZXJtIGFzIGEgdmFyaWFibGUuLi5gKTtcblxuICAgIGNvbnN0IHZhcmlhYmxlSWRlbnRpZmllciA9IHZhcmlhYmxlTm9kZS5nZXRWYXJpYWJsZUlkZW50aWZpZXIoKSxcbiAgICAgICAgICB2YXJpYWJsZSA9IGNvbnRleHQuZmluZFZhcmlhYmxlQnlWYXJpYWJsZUlkZW50aWZpZXIodmFyaWFibGVJZGVudGlmaWVyKTtcblxuICAgIGlmICh2YXJpYWJsZSAhPT0gbnVsbCkge1xuICAgICAgY29uc3QgdHlwZSA9IHZhcmlhYmxlLmdldFR5cGUoKTtcblxuICAgICAgdGVybS5zZXRUeXBlKHR5cGUpO1xuXG4gICAgICBjb25zdCB2ZXJpZmllc0FoZWFkID0gdmFsaWRhdGVBaGVhZCgpO1xuXG4gICAgICBpZiAodmVyaWZpZXNBaGVhZCkge1xuICAgICAgICB0ZXJtVmFsaWRhdGVzQXNWYXJpYWJsZSA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRlcm1WYWxpZGF0ZXNBc1ZhcmlhYmxlKSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke3Rlcm1TdHJpbmd9JyB0ZXJtIGFzIGEgdmFyaWFibGUuYCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRlcm1WYWxpZGF0ZXNBc1ZhcmlhYmxlO1xufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZVN0YXRlbWVudEFzTWV0YXZhcmlhYmxlQW5kU3Vic3RpdHV0aW9uKHN0YXRlbWVudCwgYXNzaWdubWVudHMsIHN0YXRlZCwgY29udGV4dCkge1xuICBsZXQgc3RhdGVtZW50VmFsaWRhdGVzQXNNZXRhdmFyaWFibGVBbmRTdWJzdGl0dXRpb24gPSBmYWxzZTtcblxuICBjb25zdCBzdGF0ZW1lbnROb2RlID0gc3RhdGVtZW50LmdldE5vZGUoKSxcbiAgICAgICAgbWV0YXZhcmlhYmxlTm9kZSA9IHN0YXRlbWVudE5vZGUuZ2V0TWV0YXZhcmlhYmxlTm9kZSgpO1xuXG4gIGlmIChtZXRhdmFyaWFibGVOb2RlICE9PSBudWxsKSB7XG4gICAgY29uc3Qgc3RhdGVtZW50U3RyaW5nID0gc3RhdGVtZW50LmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IGFzIGEgbWV0YXZhcmlhYmxlIGFuZCBzdWJzdGl0dXRpb24uLi5gKTtcblxuICAgIGNvbnN0IG1ldGF2YXJpYWJsZU5hbWUgPSBtZXRhdmFyaWFibGVOb2RlLmdldE1ldGF2YXJpYWJsZU5hbWUoKSxcbiAgICAgICAgICBtZXRhdmFyaWFibGUgPSBjb250ZXh0LmZpbmRNZXRhdmFyaWFibGVCeU1ldGF2YXJpYWJsZU5hbWUobWV0YXZhcmlhYmxlTmFtZSk7XG5cbiAgICBpZiAobWV0YXZhcmlhYmxlICE9PSBudWxsKSB7XG4gICAgICBzdGF0ZW1lbnRWYWxpZGF0ZXNBc01ldGF2YXJpYWJsZUFuZFN1YnN0aXR1dGlvbiA9IHRydWU7XG5cbiAgICAgIGNvbnN0IHsgVGVybVN1YnN0aXR1dGlvbiwgRnJhbWVTdWJzdGl0dXRpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICAgICAgZnJhbWVTdWJzdGl0dXRpb24gPSBGcmFtZVN1YnN0aXR1dGlvbi5mcm9tU3RhdGVtZW50KHN0YXRlbWVudCwgY29udGV4dCksXG4gICAgICAgICAgICB0ZXJtU3Vic3RpdHV0aW9uID0gVGVybVN1YnN0aXR1dGlvbi5mcm9tU3RhdGVtZW50KHN0YXRlbWVudCwgY29udGV4dCksXG4gICAgICAgICAgICBzdWJzdGl0dXRpb24gPSAodGVybVN1YnN0aXR1dGlvbiB8fCBmcmFtZVN1YnN0aXR1dGlvbik7XG5cbiAgICAgIGlmIChzdWJzdGl0dXRpb24gIT09IG51bGwpIHtcbiAgICAgICAgY29uc3Qgc3Vic3RpdHV0aW9uVmFsaWRhdGVzID0gc3Vic3RpdHV0aW9uLnZhbGlkYXRlKGNvbnRleHQpO1xuXG4gICAgICAgIGlmICghc3Vic3RpdHV0aW9uVmFsaWRhdGVzKSB7XG4gICAgICAgICAgc3RhdGVtZW50VmFsaWRhdGVzQXNNZXRhdmFyaWFibGVBbmRTdWJzdGl0dXRpb24gPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChzdGF0ZW1lbnRWYWxpZGF0ZXNBc01ldGF2YXJpYWJsZUFuZFN1YnN0aXR1dGlvbikge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmFsaWRhdGVkIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQgYXMgYSBtZXRhdmFyaWFibGUgYW5kIHN1YnN0aXR1dGlvbi5gKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gc3RhdGVtZW50VmFsaWRhdGVzQXNNZXRhdmFyaWFibGVBbmRTdWJzdGl0dXRpb247XG59XG5cbmZ1bmN0aW9uIHVuaWZ5U3RhdGVtZW50V2l0aEJyYWNrZXRlZENvbWJpbmF0b3Ioc3RhdGVtZW50LCBhc3NpZ25tZW50cywgc3RhdGVkLCBjb250ZXh0KSB7XG4gIHN0YXRlZCA9IHRydWU7ICAvLy9cblxuICBhc3NpZ25tZW50cyA9IG51bGw7IC8vL1xuXG4gIGNvbnN0IGJyYWNrZXRlZENvbWJpbmF0b3IgPSBicmFja2V0ZWRDb21iaW5hdG9yRnJvbU5vdGhpbmcoKSxcbiAgICAgICAgc3RhdGVtZW50VW5pZmllc1dpdGhCcmFja2V0ZWRDb21iaW5hdG9yID0gYnJhY2tldGVkQ29tYmluYXRvci51bmlmeVN0YXRlbWVudChzdGF0ZW1lbnQsIGFzc2lnbm1lbnRzLCBzdGF0ZWQsIGNvbnRleHQpO1xuXG4gIHJldHVybiBzdGF0ZW1lbnRVbmlmaWVzV2l0aEJyYWNrZXRlZENvbWJpbmF0b3I7XG59XG5cbmZ1bmN0aW9uIHVuaWZ5U3RhdGVtZW50V2l0aENvbWJpbmF0b3JzKHN0YXRlbWVudCwgYXNzaWdubWVudHMsIHN0YXRlZCwgY29udGV4dCkge1xuICBzdGF0ZWQgPSB0cnVlOyAgLy8vXG5cbiAgYXNzaWdubWVudHMgPSBudWxsOyAvLy9cblxuICBjb25zdCBjb21iaW5hdG9ycyA9IGNvbnRleHQuZ2V0Q29tYmluYXRvcnMoKSxcbiAgICAgICAgc3RhdGVtZW50VW5pZmllc1dpdGhDb21iaW5hdG9ycyA9IGNvbWJpbmF0b3JzLnNvbWUoKGNvbWJpbmF0b3IpID0+IHtcbiAgICAgICAgICBjb25zdCB1bmlmaWVzV2l0aENvbWJpbmF0b3IgPSBjb21iaW5hdG9yLnVuaWZ5U3RhdGVtZW50KHN0YXRlbWVudCwgYXNzaWdubWVudHMsIHN0YXRlZCwgY29udGV4dCk7XG5cbiAgICAgICAgICBpZiAodW5pZmllc1dpdGhDb21iaW5hdG9yKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gIHJldHVybiBzdGF0ZW1lbnRVbmlmaWVzV2l0aENvbWJpbmF0b3JzO1xufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZVN0YXRlbWVudEFzRXF1YWxpdHkoc3RhdGVtZW50LCBhc3NpZ25tZW50cywgc3RhdGVkLCBjb250ZXh0KSB7XG4gIGxldCBzdGF0ZW1lbnRWYWxpZGF0ZXNBc0VxdWFsaXR5ID0gZmFsc2U7XG5cbiAgY29uc3QgZXF1YWxpdHkgPSBlcXVhbGl0eUZyb21TdGF0ZW1lbnQoc3RhdGVtZW50LCBjb250ZXh0KTtcblxuICBpZiAoZXF1YWxpdHkgIT09IG51bGwpIHtcbiAgICBjb25zdCBzdGF0ZW1lbnRTdHJpbmcgPSBzdGF0ZW1lbnQuZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0aW5nIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQgYXMgYW4gZXF1YWxpdHkuLi5gKTtcblxuICAgIGNvbnN0IGVxdWFsaXR5VmFsaWRhdGVzID0gZXF1YWxpdHkudmFsaWRhdGUoYXNzaWdubWVudHMsIHN0YXRlZCwgY29udGV4dCk7XG5cbiAgICBzdGF0ZW1lbnRWYWxpZGF0ZXNBc0VxdWFsaXR5ID0gZXF1YWxpdHlWYWxpZGF0ZXM7IC8vL1xuXG4gICAgaWYgKHN0YXRlbWVudFZhbGlkYXRlc0FzRXF1YWxpdHkpIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlZCB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IGFzIGFuIGVxdWFsaXR5LmApO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBzdGF0ZW1lbnRWYWxpZGF0ZXNBc0VxdWFsaXR5O1xufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZVN0YXRlbWVudEFzSnVkZ2VtZW50KHN0YXRlbWVudCwgYXNzaWdubWVudHMsIHN0YXRlZCwgY29udGV4dCkge1xuICBsZXQgdmFsaWRhdGVzU3RhdGVtZW50QXNKdWRnZW1lbnQgPSBmYWxzZTtcblxuICBjb25zdCBqdWRnZW1lbnQgPSBqdWRnZW1lbnRGcm9tU3RhdGVtZW50KHN0YXRlbWVudCwgY29udGV4dCk7XG5cbiAgaWYgKGp1ZGdlbWVudCAhPT0gbnVsbCkge1xuICAgIGNvbnN0IHN0YXRlbWVudFN0cmluZyA9IHN0YXRlbWVudC5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCBhcyBhIGp1ZGdlbWVudC4uLmApO1xuXG4gICAgY29uc3QganVkZ2VtZW50VmFsaWRhdGVzID0ganVkZ2VtZW50LnZhbGlkYXRlKGFzc2lnbm1lbnRzLCBzdGF0ZWQsIGNvbnRleHQpO1xuXG4gICAgdmFsaWRhdGVzU3RhdGVtZW50QXNKdWRnZW1lbnQgPSBqdWRnZW1lbnRWYWxpZGF0ZXM7ICAvLy9cblxuICAgIGlmICh2YWxpZGF0ZXNTdGF0ZW1lbnRBc0p1ZGdlbWVudCkge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmFsaWRhdGVkIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQgYXMgYSBqdWRnZW1lbnQuYCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHZhbGlkYXRlc1N0YXRlbWVudEFzSnVkZ2VtZW50O1xufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZVN0YXRlbWVudEFzVHlwZUFzc2VydGlvbihzdGF0ZW1lbnQsIGFzc2lnbm1lbnRzLCBzdGF0ZWQsIGNvbnRleHQpIHtcbiAgbGV0IHZhbGlkYXRlc1N0YXRlbWVudEFzVHlwZUFzc2VydGlvbiA9IGZhbHNlO1xuXG4gIGNvbnN0IHR5cGVBc3NlcnRpb24gPSB0eXBlQXNzZXJ0aW9uRnJvbVN0YXRlbWVudChzdGF0ZW1lbnQsIGNvbnRleHQpO1xuXG4gIGlmICh0eXBlQXNzZXJ0aW9uICE9PSBudWxsKSB7XG4gICAgY29uc3Qgc3RhdGVtZW50U3RyaW5nID0gc3RhdGVtZW50LmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IGFzIGEgdHlwZSBhc3NlcnRpb24uLi5gKTtcblxuICAgIGNvbnN0IHR5cGVBc3NlcnRpb25WYWxpZGF0ZXMgPSB0eXBlQXNzZXJ0aW9uLnZhbGlkYXRlKGFzc2lnbm1lbnRzLCBzdGF0ZWQsIGNvbnRleHQpO1xuXG4gICAgdmFsaWRhdGVzU3RhdGVtZW50QXNUeXBlQXNzZXJ0aW9uID0gdHlwZUFzc2VydGlvblZhbGlkYXRlczsgLy8vXG5cbiAgICBpZiAodmFsaWRhdGVzU3RhdGVtZW50QXNUeXBlQXNzZXJ0aW9uKSB7XG4gICAgICBjb25zdCBhc3NlcnRpb24gPSB0eXBlQXNzZXJ0aW9uOyAgLy8vXG5cbiAgICAgIGNvbnRleHQuYWRkQXNzZXJ0aW9uKGFzc2VydGlvbik7XG5cbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlZCB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IGFzIGEgdHlwZSBhc3NlcnRpb24uYCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHZhbGlkYXRlc1N0YXRlbWVudEFzVHlwZUFzc2VydGlvbjtcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVTdGF0ZW1lbnRBc0RlZmluZWRBc3NlcnRpb24oc3RhdGVtZW50LCBhc3NpZ25tZW50cywgc3RhdGVkLCBjb250ZXh0KSB7XG4gIGxldCB2YWxpZGF0ZXNTdGF0ZW1lbnRBc0RlZmluZWRBc3NlcnRpb24gPSBmYWxzZTtcblxuICBjb25zdCBkZWZpbmVkQXNzZXJ0aW9uID0gZGVmaW5lZEFzc2VydGlvbkZyb21TdGF0ZW1lbnQoc3RhdGVtZW50LCBjb250ZXh0KTtcblxuICBpZiAoZGVmaW5lZEFzc2VydGlvbiAhPT0gbnVsbCkge1xuICAgIGNvbnN0IHN0YXRlbWVudFN0cmluZyA9IHN0YXRlbWVudC5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCBhcyBhIGRlZmluZWQgYXNzZXJ0aW9uLi4uYCk7XG5cbiAgICBjb25zdCBkZWZpbmVkQXNzZXJ0aW9uVmFsaWRhdGVzID0gZGVmaW5lZEFzc2VydGlvbi52YWxpZGF0ZShhc3NpZ25tZW50cywgc3RhdGVkLCBjb250ZXh0KTtcblxuICAgIHZhbGlkYXRlc1N0YXRlbWVudEFzRGVmaW5lZEFzc2VydGlvbiA9IGRlZmluZWRBc3NlcnRpb25WYWxpZGF0ZXM7IC8vL1xuXG4gICAgaWYgKHZhbGlkYXRlc1N0YXRlbWVudEFzRGVmaW5lZEFzc2VydGlvbikge1xuICAgICAgY29uc3QgYXNzZXJ0aW9uID0gZGVmaW5lZEFzc2VydGlvbjsgIC8vL1xuXG4gICAgICBjb250ZXh0LmFkZEFzc2VydGlvbihhc3NlcnRpb24pO1xuXG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCBhcyBhIGRlZmluZWQgYXNzZXJ0aW9uLmApO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB2YWxpZGF0ZXNTdGF0ZW1lbnRBc0RlZmluZWRBc3NlcnRpb247XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlU3RhdGVtZW50QXNQcm9wZXJ0eUFzc2VydGlvbihzdGF0ZW1lbnQsIGFzc2lnbm1lbnRzLCBzdGF0ZWQsIGNvbnRleHQpIHtcbiAgbGV0IHN0YXRlbWVudFZhbGlkYXRlc0FzUHJvcGVydHlBc3NlcnRpb24gPSBmYWxzZTtcblxuICBjb25zdCBwcm9wZXJ0eUFzc2VydGlvbiA9IHByb3BlcnR5QXNzZXJ0aW9uRnJvbVN0YXRlbWVudChzdGF0ZW1lbnQsIGNvbnRleHQpO1xuXG4gIGlmIChwcm9wZXJ0eUFzc2VydGlvbiAhPT0gbnVsbCkge1xuICAgIGNvbnN0IHN0YXRlbWVudFN0cmluZyA9IHN0YXRlbWVudC5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCBhcyBhIHByb3BlcnR5IGFzc2VydGlvbi4uLmApO1xuXG4gICAgY29uc3QgcHJvcGVydHlBc3NlcnRpb25WYWxpZGF0ZXMgPSBwcm9wZXJ0eUFzc2VydGlvbi52YWxpZGF0ZShhc3NpZ25tZW50cywgc3RhdGVkLCBjb250ZXh0KTtcblxuICAgIHN0YXRlbWVudFZhbGlkYXRlc0FzUHJvcGVydHlBc3NlcnRpb24gPSBwcm9wZXJ0eUFzc2VydGlvblZhbGlkYXRlczsgLy8vXG5cbiAgICBpZiAoc3RhdGVtZW50VmFsaWRhdGVzQXNQcm9wZXJ0eUFzc2VydGlvbikge1xuICAgICAgY29uc3QgYXNzZXJ0aW9uID0gcHJvcGVydHlBc3NlcnRpb247IC8vL1xuXG4gICAgICBjb250ZXh0LmFkZEFzc2VydGlvbihhc3NlcnRpb24pO1xuXG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCBhcyBhIHByb3BlcnR5IGFzc2VydGlvbi5gKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gc3RhdGVtZW50VmFsaWRhdGVzQXNQcm9wZXJ0eUFzc2VydGlvbjtcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVTdGF0ZW1lbnRBc1N1YnByb29mQXNzZXJ0aW9uKHN0YXRlbWVudCwgYXNzaWdubWVudHMsIHN0YXRlZCwgY29udGV4dCkge1xuICBsZXQgc3RhdGVtZW50VmFsaWRhdGVzQXNTdWJwcm9vZkFzc2VydGlvbiA9IGZhbHNlO1xuXG4gIGNvbnN0IHN1YnByb29mQXNzZXJ0aW9uID0gc3VicHJvb2ZBc3NlcnRpb25Gcm9tU3RhdGVtZW50KHN0YXRlbWVudCwgY29udGV4dCk7XG5cbiAgaWYgKHN1YnByb29mQXNzZXJ0aW9uICE9PSBudWxsKSB7XG4gICAgY29uc3Qgc3RhdGVtZW50U3RyaW5nID0gc3RhdGVtZW50LmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IGFzIGEgc3VicHJvb2YgYXNzZXJ0aW9uLi4uYCk7XG5cbiAgICBjb25zdCBzdWJwcm9vZkFzc2VydGlvblZhbGlkYXRlcyA9IHN1YnByb29mQXNzZXJ0aW9uLnZhbGlkYXRlKGFzc2lnbm1lbnRzLCBzdGF0ZWQsIGNvbnRleHQpO1xuXG4gICAgc3RhdGVtZW50VmFsaWRhdGVzQXNTdWJwcm9vZkFzc2VydGlvbiA9IHN1YnByb29mQXNzZXJ0aW9uVmFsaWRhdGVzOyAvLy9cblxuICAgIGlmIChzdGF0ZW1lbnRWYWxpZGF0ZXNBc1N1YnByb29mQXNzZXJ0aW9uKSB7XG4gICAgICBjb25zdCBhc3NlcnRpb24gPSBzdWJwcm9vZkFzc2VydGlvbjsgLy8vXG5cbiAgICAgIGNvbnRleHQuYWRkQXNzZXJ0aW9uKGFzc2VydGlvbik7XG5cbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlZCB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IGFzIGEgc3VicHJvb2YgYXNzZXJ0aW9uLmApO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBzdGF0ZW1lbnRWYWxpZGF0ZXNBc1N1YnByb29mQXNzZXJ0aW9uO1xufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZVN0YXRlbWVudEFzQ29udGFpbmVkQXNzZXJ0aW9uKHN0YXRlbWVudCwgYXNzaWdubWVudHMsIHN0YXRlZCwgY29udGV4dCkge1xuICBsZXQgdmFsaWRhdGVzU3RhdGVtZW50QXNDb250YWluZWRBc3NlcnRpb24gPSBmYWxzZTtcblxuICBjb25zdCBjb250YWluZWRBc3NlcnRpb24gPSBjb250YWluZWRBc3NlcnRpb25Gcm9tU3RhdGVtZW50KHN0YXRlbWVudCwgY29udGV4dCk7XG5cbiAgaWYgKGNvbnRhaW5lZEFzc2VydGlvbiAhPT0gbnVsbCkge1xuICAgIGNvbnN0IHN0YXRlbWVudFN0cmluZyA9IHN0YXRlbWVudC5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCBhcyBhIGNvbnRhaW5lZCBhc3NlcnRpb24uLi5gKTtcblxuICAgIGNvbnN0IGNvbnRhaW5lZEFzc2VydGlvblZhbGlkYXRlcyA9IGNvbnRhaW5lZEFzc2VydGlvbi52YWxpZGF0ZShhc3NpZ25tZW50cywgc3RhdGVkLCBjb250ZXh0KTtcblxuICAgIHZhbGlkYXRlc1N0YXRlbWVudEFzQ29udGFpbmVkQXNzZXJ0aW9uID0gY29udGFpbmVkQXNzZXJ0aW9uVmFsaWRhdGVzOyAvLy9cblxuICAgIGlmICh2YWxpZGF0ZXNTdGF0ZW1lbnRBc0NvbnRhaW5lZEFzc2VydGlvbikge1xuICAgICAgY29uc3QgYXNzZXJ0aW9uID0gY29udGFpbmVkQXNzZXJ0aW9uOyAvLy9cblxuICAgICAgY29udGV4dC5hZGRBc3NlcnRpb24oYXNzZXJ0aW9uKTtcblxuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmFsaWRhdGVkIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQgYXMgYSBjb250YWluZWQgYXNzZXJ0aW9uLmApO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB2YWxpZGF0ZXNTdGF0ZW1lbnRBc0NvbnRhaW5lZEFzc2VydGlvbjtcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVTdGF0ZW1lbnRBc1NhdGlzZmllc0Fzc2VydGlvbihzdGF0ZW1lbnQsIGFzc2lnbm1lbnRzLCBzdGF0ZWQsIGNvbnRleHQpIHtcbiAgbGV0IHZhbGlkYXRlc0FTdGF0ZW1lbnRzU2F0aXNmaWVzQXNzZXJ0aW9uID0gZmFsc2U7XG5cbiAgY29uc3Qgc2F0aXNmaWVzQXNzZXJ0aW9uID0gc2F0aXNmaWVzQXNzZXJ0aW9uRnJvbVN0YXRlbWVudChzdGF0ZW1lbnQsIGNvbnRleHQpO1xuXG4gIGlmIChzYXRpc2ZpZXNBc3NlcnRpb24gIT09IG51bGwpIHtcbiAgICBjb25zdCBzdGF0ZW1lbnRTdHJpbmcgPSBzdGF0ZW1lbnQuZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0aW5nIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQgYXMgYSBzYXRpc2ZpZXMgYXNzZXJ0aW9uLi4uYCk7XG5cbiAgICBjb25zdCBzYXRpc2ZpZXNBc3NlcnRpb25WYWxpZGF0ZXMgPSBzYXRpc2ZpZXNBc3NlcnRpb24udmFsaWRhdGUoYXNzaWdubWVudHMsIHN0YXRlZCwgY29udGV4dCk7XG5cbiAgICB2YWxpZGF0ZXNBU3RhdGVtZW50c1NhdGlzZmllc0Fzc2VydGlvbiA9IHNhdGlzZmllc0Fzc2VydGlvblZhbGlkYXRlczsgLy8vXG5cbiAgICBpZiAodmFsaWRhdGVzQVN0YXRlbWVudHNTYXRpc2ZpZXNBc3NlcnRpb24pIHtcbiAgICAgIGNvbnN0IGFzc2VydGlvbiA9IHNhdGlzZmllc0Fzc2VydGlvbjsgLy8vXG5cbiAgICAgIGNvbnRleHQuYWRkQXNzZXJ0aW9uKGFzc2VydGlvbik7XG5cbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlZCB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IGFzIGEgc2F0aXNmaWVzIGFzc2VydGlvbi5gKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdmFsaWRhdGVzQVN0YXRlbWVudHNTYXRpc2ZpZXNBc3NlcnRpb247XG59XG5cbmV4cG9ydCBjb25zdCB2YWxpZGF0ZVRlcm1zID0gW1xuICB1bmlmeVRlcm1XaXRoQnJhY2tldGVkQ29uc3RydWN0b3IsXG4gIHVuaWZ5VGVybVdpdGhDb25zdHJ1Y3RvcnMsXG4gIHZhbGlkYXRlVGVybUFzVmFyaWFibGVcbl07XG5cbmV4cG9ydCBjb25zdCB2YWxpZGF0ZVN0YXRlbWVudHMgPSBbXG4gIHZhbGlkYXRlU3RhdGVtZW50QXNNZXRhdmFyaWFibGVBbmRTdWJzdGl0dXRpb24sXG4gIHVuaWZ5U3RhdGVtZW50V2l0aEJyYWNrZXRlZENvbWJpbmF0b3IsXG4gIHVuaWZ5U3RhdGVtZW50V2l0aENvbWJpbmF0b3JzLFxuICB2YWxpZGF0ZVN0YXRlbWVudEFzRXF1YWxpdHksXG4gIHZhbGlkYXRlU3RhdGVtZW50QXNKdWRnZW1lbnQsXG4gIHZhbGlkYXRlU3RhdGVtZW50QXNUeXBlQXNzZXJ0aW9uLFxuICB2YWxpZGF0ZVN0YXRlbWVudEFzRGVmaW5lZEFzc2VydGlvbixcbiAgdmFsaWRhdGVTdGF0ZW1lbnRBc1Byb3BlcnR5QXNzZXJ0aW9uLFxuICB2YWxpZGF0ZVN0YXRlbWVudEFzU3VicHJvb2ZBc3NlcnRpb24sXG4gIHZhbGlkYXRlU3RhdGVtZW50QXNDb250YWluZWRBc3NlcnRpb24sXG4gIHZhbGlkYXRlU3RhdGVtZW50QXNTYXRpc2ZpZXNBc3NlcnRpb25cbl07XG4iXSwibmFtZXMiOlsidmFsaWRhdGVTdGF0ZW1lbnRzIiwidmFsaWRhdGVUZXJtcyIsInVuaWZ5VGVybVdpdGhCcmFja2V0ZWRDb25zdHJ1Y3RvciIsInRlcm0iLCJjb250ZXh0IiwidmFsaWRhdGVBaGVhZCIsInRlcm1VbmlmaWVzV2l0aEJyYWNrZXRlZENvbnN0cnVjdG9yIiwiYnJhY2tldGVkQ29uc3RydWN0b3IiLCJicmFja2V0ZWRDb25zdHJ1Y3RvckZyb21Ob3RoaW5nIiwidW5pZnlUZXJtIiwidW5pZnlUZXJtV2l0aENvbnN0cnVjdG9ycyIsInRlcm1VbmlmaWVzV2l0aENvbnN0cnVjdG9ycyIsImNvbnN0cnVjdG9ycyIsImdldENvbnN0cnVjdG9ycyIsInNvbWUiLCJjb25zdHJ1Y3RvciIsInVuaWZpZXNXaXRoQ29uc3RydWN0b3IiLCJ2YWxpZGF0ZVRlcm1Bc1ZhcmlhYmxlIiwidGVybVZhbGlkYXRlc0FzVmFyaWFibGUiLCJ0ZXJtTm9kZSIsImdldE5vZGUiLCJ2YXJpYWJsZU5vZGUiLCJnZXRWYXJpYWJsZU5vZGUiLCJ0ZXJtU3RyaW5nIiwiZ2V0U3RyaW5nIiwidHJhY2UiLCJ2YXJpYWJsZUlkZW50aWZpZXIiLCJnZXRWYXJpYWJsZUlkZW50aWZpZXIiLCJ2YXJpYWJsZSIsImZpbmRWYXJpYWJsZUJ5VmFyaWFibGVJZGVudGlmaWVyIiwidHlwZSIsImdldFR5cGUiLCJzZXRUeXBlIiwidmVyaWZpZXNBaGVhZCIsImRlYnVnIiwidmFsaWRhdGVTdGF0ZW1lbnRBc01ldGF2YXJpYWJsZUFuZFN1YnN0aXR1dGlvbiIsInN0YXRlbWVudCIsImFzc2lnbm1lbnRzIiwic3RhdGVkIiwic3RhdGVtZW50VmFsaWRhdGVzQXNNZXRhdmFyaWFibGVBbmRTdWJzdGl0dXRpb24iLCJzdGF0ZW1lbnROb2RlIiwibWV0YXZhcmlhYmxlTm9kZSIsImdldE1ldGF2YXJpYWJsZU5vZGUiLCJzdGF0ZW1lbnRTdHJpbmciLCJtZXRhdmFyaWFibGVOYW1lIiwiZ2V0TWV0YXZhcmlhYmxlTmFtZSIsIm1ldGF2YXJpYWJsZSIsImZpbmRNZXRhdmFyaWFibGVCeU1ldGF2YXJpYWJsZU5hbWUiLCJUZXJtU3Vic3RpdHV0aW9uIiwiZWxlbWVudHMiLCJGcmFtZVN1YnN0aXR1dGlvbiIsImZyYW1lU3Vic3RpdHV0aW9uIiwiZnJvbVN0YXRlbWVudCIsInRlcm1TdWJzdGl0dXRpb24iLCJzdWJzdGl0dXRpb24iLCJzdWJzdGl0dXRpb25WYWxpZGF0ZXMiLCJ2YWxpZGF0ZSIsInVuaWZ5U3RhdGVtZW50V2l0aEJyYWNrZXRlZENvbWJpbmF0b3IiLCJicmFja2V0ZWRDb21iaW5hdG9yIiwiYnJhY2tldGVkQ29tYmluYXRvckZyb21Ob3RoaW5nIiwic3RhdGVtZW50VW5pZmllc1dpdGhCcmFja2V0ZWRDb21iaW5hdG9yIiwidW5pZnlTdGF0ZW1lbnQiLCJ1bmlmeVN0YXRlbWVudFdpdGhDb21iaW5hdG9ycyIsImNvbWJpbmF0b3JzIiwiZ2V0Q29tYmluYXRvcnMiLCJzdGF0ZW1lbnRVbmlmaWVzV2l0aENvbWJpbmF0b3JzIiwiY29tYmluYXRvciIsInVuaWZpZXNXaXRoQ29tYmluYXRvciIsInZhbGlkYXRlU3RhdGVtZW50QXNFcXVhbGl0eSIsInN0YXRlbWVudFZhbGlkYXRlc0FzRXF1YWxpdHkiLCJlcXVhbGl0eSIsImVxdWFsaXR5RnJvbVN0YXRlbWVudCIsImVxdWFsaXR5VmFsaWRhdGVzIiwidmFsaWRhdGVTdGF0ZW1lbnRBc0p1ZGdlbWVudCIsInZhbGlkYXRlc1N0YXRlbWVudEFzSnVkZ2VtZW50IiwianVkZ2VtZW50IiwianVkZ2VtZW50RnJvbVN0YXRlbWVudCIsImp1ZGdlbWVudFZhbGlkYXRlcyIsInZhbGlkYXRlU3RhdGVtZW50QXNUeXBlQXNzZXJ0aW9uIiwidmFsaWRhdGVzU3RhdGVtZW50QXNUeXBlQXNzZXJ0aW9uIiwidHlwZUFzc2VydGlvbiIsInR5cGVBc3NlcnRpb25Gcm9tU3RhdGVtZW50IiwidHlwZUFzc2VydGlvblZhbGlkYXRlcyIsImFzc2VydGlvbiIsImFkZEFzc2VydGlvbiIsInZhbGlkYXRlU3RhdGVtZW50QXNEZWZpbmVkQXNzZXJ0aW9uIiwidmFsaWRhdGVzU3RhdGVtZW50QXNEZWZpbmVkQXNzZXJ0aW9uIiwiZGVmaW5lZEFzc2VydGlvbiIsImRlZmluZWRBc3NlcnRpb25Gcm9tU3RhdGVtZW50IiwiZGVmaW5lZEFzc2VydGlvblZhbGlkYXRlcyIsInZhbGlkYXRlU3RhdGVtZW50QXNQcm9wZXJ0eUFzc2VydGlvbiIsInN0YXRlbWVudFZhbGlkYXRlc0FzUHJvcGVydHlBc3NlcnRpb24iLCJwcm9wZXJ0eUFzc2VydGlvbiIsInByb3BlcnR5QXNzZXJ0aW9uRnJvbVN0YXRlbWVudCIsInByb3BlcnR5QXNzZXJ0aW9uVmFsaWRhdGVzIiwidmFsaWRhdGVTdGF0ZW1lbnRBc1N1YnByb29mQXNzZXJ0aW9uIiwic3RhdGVtZW50VmFsaWRhdGVzQXNTdWJwcm9vZkFzc2VydGlvbiIsInN1YnByb29mQXNzZXJ0aW9uIiwic3VicHJvb2ZBc3NlcnRpb25Gcm9tU3RhdGVtZW50Iiwic3VicHJvb2ZBc3NlcnRpb25WYWxpZGF0ZXMiLCJ2YWxpZGF0ZVN0YXRlbWVudEFzQ29udGFpbmVkQXNzZXJ0aW9uIiwidmFsaWRhdGVzU3RhdGVtZW50QXNDb250YWluZWRBc3NlcnRpb24iLCJjb250YWluZWRBc3NlcnRpb24iLCJjb250YWluZWRBc3NlcnRpb25Gcm9tU3RhdGVtZW50IiwiY29udGFpbmVkQXNzZXJ0aW9uVmFsaWRhdGVzIiwidmFsaWRhdGVTdGF0ZW1lbnRBc1NhdGlzZmllc0Fzc2VydGlvbiIsInZhbGlkYXRlc0FTdGF0ZW1lbnRzU2F0aXNmaWVzQXNzZXJ0aW9uIiwic2F0aXNmaWVzQXNzZXJ0aW9uIiwic2F0aXNmaWVzQXNzZXJ0aW9uRnJvbVN0YXRlbWVudCIsInNhdGlzZmllc0Fzc2VydGlvblZhbGlkYXRlcyJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7O1FBMlZhQTtlQUFBQTs7UUFOQUM7ZUFBQUE7OzsrREFuVlE7d0JBRTJEO3lCQVFoQzs7Ozs7O0FBRWhELFNBQVNDLGtDQUFrQ0MsSUFBSSxFQUFFQyxPQUFPLEVBQUVDLGFBQWE7SUFDckUsSUFBSUM7SUFFSixJQUFNQyx1QkFBdUJDLElBQUFBLHlDQUErQjtJQUU1REYsc0NBQXNDQyxxQkFBcUJFLFNBQVMsQ0FBQ04sTUFBTUMsU0FBU0M7SUFFcEYsT0FBT0M7QUFDVDtBQUVBLFNBQVNJLDBCQUEwQlAsSUFBSSxFQUFFQyxPQUFPLEVBQUVDLGFBQWE7SUFDN0QsSUFBSU07SUFFSixJQUFNQyxlQUFlUixRQUFRUyxlQUFlO0lBRTVDRiw4QkFBOEJDLGFBQWFFLElBQUksQ0FBQyxTQUFDQztRQUMvQyxJQUFNQyx5QkFBeUJELFlBQVlOLFNBQVMsQ0FBQ04sTUFBTUMsU0FBU0M7UUFFcEUsSUFBSVcsd0JBQXdCO1lBQzFCLE9BQU87UUFDVDtJQUNGO0lBRUEsT0FBT0w7QUFDVDtBQUVBLFNBQVNNLHVCQUF1QmQsSUFBSSxFQUFFQyxPQUFPLEVBQUVDLGFBQWE7SUFDMUQsSUFBSWEsMEJBQTBCO0lBRTlCLElBQU1DLFdBQVdoQixLQUFLaUIs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
248
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsaXRpZXMvdmFsaWRhdGlvbi5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IGVsZW1lbnRzIGZyb20gXCIuLi9lbGVtZW50c1wiO1xuXG5pbXBvcnQgeyBicmFja2V0ZWRDb25zdHJ1Y3RvckZyb21Ob3RoaW5nLCBicmFja2V0ZWRDb21iaW5hdG9yRnJvbU5vdGhpbmcgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2luc3RhbmNlXCI7XG5pbXBvcnQgeyBlcXVhbGl0eUZyb21TdGF0ZW1lbnQsXG4gICAgICAgICBqdWRnZW1lbnRGcm9tU3RhdGVtZW50LFxuICAgICAgICAgdHlwZUFzc2VydGlvbkZyb21TdGF0ZW1lbnQsXG4gICAgICAgICBkZWZpbmVkQXNzZXJ0aW9uRnJvbVN0YXRlbWVudCxcbiAgICAgICAgIHByb3BlcnR5QXNzZXJ0aW9uRnJvbVN0YXRlbWVudCxcbiAgICAgICAgIHN1YnByb29mQXNzZXJ0aW9uRnJvbVN0YXRlbWVudCxcbiAgICAgICAgIGNvbnRhaW5lZEFzc2VydGlvbkZyb21TdGF0ZW1lbnQsXG4gICAgICAgICBzYXRpc2ZpZXNBc3NlcnRpb25Gcm9tU3RhdGVtZW50IH0gZnJvbSBcIi4uL3V0aWxpdGllcy9zdGF0ZW1lbnRcIjtcblxuZnVuY3Rpb24gdmFsaWRhdGVUZXJtQXNWYXJpYWJsZSh0ZXJtLCBjb250ZXh0LCB2YWxpZGF0ZUFoZWFkKSB7XG4gIGxldCB0ZXJtVmFsaWRhdGVzQXNWYXJpYWJsZSA9IGZhbHNlO1xuXG4gIGNvbnN0IHRlcm1Ob2RlID0gdGVybS5nZXROb2RlKCksXG4gICAgICAgIHZhcmlhYmxlTm9kZSA9IHRlcm1Ob2RlLmdldFZhcmlhYmxlTm9kZSgpO1xuXG4gIGlmICh2YXJpYWJsZU5vZGUgIT09IG51bGwpIHtcbiAgICBjb25zdCB0ZXJtU3RyaW5nID0gdGVybS5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke3Rlcm1TdHJpbmd9JyB0ZXJtIGFzIGEgdmFyaWFibGUuLi5gKTtcblxuICAgIGNvbnN0IHZhcmlhYmxlSWRlbnRpZmllciA9IHZhcmlhYmxlTm9kZS5nZXRWYXJpYWJsZUlkZW50aWZpZXIoKSxcbiAgICAgICAgICB2YXJpYWJsZSA9IGNvbnRleHQuZmluZFZhcmlhYmxlQnlWYXJpYWJsZUlkZW50aWZpZXIodmFyaWFibGVJZGVudGlmaWVyKTtcblxuICAgIGlmICh2YXJpYWJsZSAhPT0gbnVsbCkge1xuICAgICAgY29uc3QgdHlwZSA9IHZhcmlhYmxlLmdldFR5cGUoKTtcblxuICAgICAgdGVybS5zZXRUeXBlKHR5cGUpO1xuXG4gICAgICBjb25zdCB2ZXJpZmllc0FoZWFkID0gdmFsaWRhdGVBaGVhZCgpO1xuXG4gICAgICBpZiAodmVyaWZpZXNBaGVhZCkge1xuICAgICAgICB0ZXJtVmFsaWRhdGVzQXNWYXJpYWJsZSA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRlcm1WYWxpZGF0ZXNBc1ZhcmlhYmxlKSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke3Rlcm1TdHJpbmd9JyB0ZXJtIGFzIGEgdmFyaWFibGUuYCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRlcm1WYWxpZGF0ZXNBc1ZhcmlhYmxlO1xufVxuXG5mdW5jdGlvbiB1bmlmeVRlcm1XaXRoQ29uc3RydWN0b3JzKHRlcm0sIGNvbnRleHQsIHZhbGlkYXRlQWhlYWQpIHtcbiAgbGV0IHRlcm1VbmlmaWVzV2l0aENvbnN0cnVjdG9ycztcblxuICBjb25zdCBjb25zdHJ1Y3RvcnMgPSBjb250ZXh0LmdldENvbnN0cnVjdG9ycygpO1xuXG4gIHRlcm1VbmlmaWVzV2l0aENvbnN0cnVjdG9ycyA9IGNvbnN0cnVjdG9ycy5zb21lKChjb25zdHJ1Y3RvcikgPT4ge1xuICAgIGNvbnN0IHVuaWZpZXNXaXRoQ29uc3RydWN0b3IgPSBjb25zdHJ1Y3Rvci51bmlmeVRlcm0odGVybSwgY29udGV4dCwgdmFsaWRhdGVBaGVhZCk7XG5cbiAgICBpZiAodW5pZmllc1dpdGhDb25zdHJ1Y3Rvcikge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gdGVybVVuaWZpZXNXaXRoQ29uc3RydWN0b3JzO1xufVxuXG5mdW5jdGlvbiB1bmlmeVRlcm1XaXRoQnJhY2tldGVkQ29uc3RydWN0b3IodGVybSwgY29udGV4dCwgdmFsaWRhdGVBaGVhZCkge1xuICBsZXQgdGVybVVuaWZpZXNXaXRoQnJhY2tldGVkQ29uc3RydWN0b3I7XG5cbiAgY29uc3QgYnJhY2tldGVkQ29uc3RydWN0b3IgPSBicmFja2V0ZWRDb25zdHJ1Y3RvckZyb21Ob3RoaW5nKCk7XG5cbiAgdGVybVVuaWZpZXNXaXRoQnJhY2tldGVkQ29uc3RydWN0b3IgPSBicmFja2V0ZWRDb25zdHJ1Y3Rvci51bmlmeVRlcm0odGVybSwgY29udGV4dCwgdmFsaWRhdGVBaGVhZCk7XG5cbiAgcmV0dXJuIHRlcm1VbmlmaWVzV2l0aEJyYWNrZXRlZENvbnN0cnVjdG9yO1xufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZVN0YXRlbWVudEFzTWV0YXZhcmlhYmxlKHN0YXRlbWVudCwgYXNzaWdubWVudHMsIHN0YXRlZCwgY29udGV4dCkge1xuICBsZXQgc3RhdGVtZW50VmFsaWRhdGVzQXNNZXRhdmFyaWFibGVBbmRTdWJzdGl0dXRpb24gPSBmYWxzZTtcblxuICBjb25zdCBzdGF0ZW1lbnROb2RlID0gc3RhdGVtZW50LmdldE5vZGUoKSxcbiAgICAgICAgbWV0YXZhcmlhYmxlTm9kZSA9IHN0YXRlbWVudE5vZGUuZ2V0TWV0YXZhcmlhYmxlTm9kZSgpO1xuXG4gIGlmIChtZXRhdmFyaWFibGVOb2RlICE9PSBudWxsKSB7XG4gICAgY29uc3Qgc3RhdGVtZW50U3RyaW5nID0gc3RhdGVtZW50LmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IGFzIGEgbWV0YXZhcmlhYmxlLi4uYCk7XG5cbiAgICBjb25zdCBtZXRhdmFyaWFibGVOYW1lID0gbWV0YXZhcmlhYmxlTm9kZS5nZXRNZXRhdmFyaWFibGVOYW1lKCksXG4gICAgICAgICAgbWV0YXZhcmlhYmxlID0gY29udGV4dC5maW5kTWV0YXZhcmlhYmxlQnlNZXRhdmFyaWFibGVOYW1lKG1ldGF2YXJpYWJsZU5hbWUpO1xuXG4gICAgaWYgKG1ldGF2YXJpYWJsZSAhPT0gbnVsbCkge1xuICAgICAgc3RhdGVtZW50VmFsaWRhdGVzQXNNZXRhdmFyaWFibGVBbmRTdWJzdGl0dXRpb24gPSB0cnVlO1xuXG4gICAgICBjb25zdCB7IFRlcm1TdWJzdGl0dXRpb24sIEZyYW1lU3Vic3RpdHV0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgICAgIGZyYW1lU3Vic3RpdHV0aW9uID0gRnJhbWVTdWJzdGl0dXRpb24uZnJvbVN0YXRlbWVudChzdGF0ZW1lbnQsIGNvbnRleHQpLFxuICAgICAgICAgICAgdGVybVN1YnN0aXR1dGlvbiA9IFRlcm1TdWJzdGl0dXRpb24uZnJvbVN0YXRlbWVudChzdGF0ZW1lbnQsIGNvbnRleHQpLFxuICAgICAgICAgICAgc3Vic3RpdHV0aW9uID0gKHRlcm1TdWJzdGl0dXRpb24gfHwgZnJhbWVTdWJzdGl0dXRpb24pO1xuXG4gICAgICBpZiAoc3Vic3RpdHV0aW9uICE9PSBudWxsKSB7XG4gICAgICAgIGNvbnN0IHN1YnN0aXR1dGlvblZhbGlkYXRlcyA9IHN1YnN0aXR1dGlvbi52YWxpZGF0ZShjb250ZXh0KTtcblxuICAgICAgICBpZiAoIXN1YnN0aXR1dGlvblZhbGlkYXRlcykge1xuICAgICAgICAgIHN0YXRlbWVudFZhbGlkYXRlc0FzTWV0YXZhcmlhYmxlQW5kU3Vic3RpdHV0aW9uID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoc3RhdGVtZW50VmFsaWRhdGVzQXNNZXRhdmFyaWFibGVBbmRTdWJzdGl0dXRpb24pIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlZCB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IGFzIGEgbWV0YXZhcmlhYmxlLmApO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBzdGF0ZW1lbnRWYWxpZGF0ZXNBc01ldGF2YXJpYWJsZUFuZFN1YnN0aXR1dGlvbjtcbn1cblxuZnVuY3Rpb24gdW5pZnlTdGF0ZW1lbnRXaXRoQ29tYmluYXRvcnMoc3RhdGVtZW50LCBhc3NpZ25tZW50cywgc3RhdGVkLCBjb250ZXh0KSB7XG4gIHN0YXRlZCA9IHRydWU7ICAvLy9cblxuICBhc3NpZ25tZW50cyA9IG51bGw7IC8vL1xuXG4gIGNvbnN0IGNvbWJpbmF0b3JzID0gY29udGV4dC5nZXRDb21iaW5hdG9ycygpLFxuICAgIHN0YXRlbWVudFVuaWZpZXNXaXRoQ29tYmluYXRvcnMgPSBjb21iaW5hdG9ycy5zb21lKChjb21iaW5hdG9yKSA9PiB7XG4gICAgICBjb25zdCB1bmlmaWVzV2l0aENvbWJpbmF0b3IgPSBjb21iaW5hdG9yLnVuaWZ5U3RhdGVtZW50KHN0YXRlbWVudCwgYXNzaWdubWVudHMsIHN0YXRlZCwgY29udGV4dCk7XG5cbiAgICAgIGlmICh1bmlmaWVzV2l0aENvbWJpbmF0b3IpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgcmV0dXJuIHN0YXRlbWVudFVuaWZpZXNXaXRoQ29tYmluYXRvcnM7XG59XG5cbmZ1bmN0aW9uIHVuaWZ5U3RhdGVtZW50V2l0aEJyYWNrZXRlZENvbWJpbmF0b3Ioc3RhdGVtZW50LCBhc3NpZ25tZW50cywgc3RhdGVkLCBjb250ZXh0KSB7XG4gIHN0YXRlZCA9IHRydWU7ICAvLy9cblxuICBhc3NpZ25tZW50cyA9IG51bGw7IC8vL1xuXG4gIGNvbnN0IGJyYWNrZXRlZENvbWJpbmF0b3IgPSBicmFja2V0ZWRDb21iaW5hdG9yRnJvbU5vdGhpbmcoKSxcbiAgICAgICAgc3RhdGVtZW50VW5pZmllc1dpdGhCcmFja2V0ZWRDb21iaW5hdG9yID0gYnJhY2tldGVkQ29tYmluYXRvci51bmlmeVN0YXRlbWVudChzdGF0ZW1lbnQsIGFzc2lnbm1lbnRzLCBzdGF0ZWQsIGNvbnRleHQpO1xuXG4gIHJldHVybiBzdGF0ZW1lbnRVbmlmaWVzV2l0aEJyYWNrZXRlZENvbWJpbmF0b3I7XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlU3RhdGVtZW50QXNFcXVhbGl0eShzdGF0ZW1lbnQsIGFzc2lnbm1lbnRzLCBzdGF0ZWQsIGNvbnRleHQpIHtcbiAgbGV0IHN0YXRlbWVudFZhbGlkYXRlc0FzRXF1YWxpdHkgPSBmYWxzZTtcblxuICBjb25zdCBlcXVhbGl0eSA9IGVxdWFsaXR5RnJvbVN0YXRlbWVudChzdGF0ZW1lbnQsIGNvbnRleHQpO1xuXG4gIGlmIChlcXVhbGl0eSAhPT0gbnVsbCkge1xuICAgIGNvbnN0IHN0YXRlbWVudFN0cmluZyA9IHN0YXRlbWVudC5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCBhcyBhbiBlcXVhbGl0eS4uLmApO1xuXG4gICAgY29uc3QgZXF1YWxpdHlWYWxpZGF0ZXMgPSBlcXVhbGl0eS52YWxpZGF0ZShhc3NpZ25tZW50cywgc3RhdGVkLCBjb250ZXh0KTtcblxuICAgIHN0YXRlbWVudFZhbGlkYXRlc0FzRXF1YWxpdHkgPSBlcXVhbGl0eVZhbGlkYXRlczsgLy8vXG5cbiAgICBpZiAoc3RhdGVtZW50VmFsaWRhdGVzQXNFcXVhbGl0eSkge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmFsaWRhdGVkIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQgYXMgYW4gZXF1YWxpdHkuYCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHN0YXRlbWVudFZhbGlkYXRlc0FzRXF1YWxpdHk7XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlU3RhdGVtZW50QXNKdWRnZW1lbnQoc3RhdGVtZW50LCBhc3NpZ25tZW50cywgc3RhdGVkLCBjb250ZXh0KSB7XG4gIGxldCB2YWxpZGF0ZXNTdGF0ZW1lbnRBc0p1ZGdlbWVudCA9IGZhbHNlO1xuXG4gIGNvbnN0IGp1ZGdlbWVudCA9IGp1ZGdlbWVudEZyb21TdGF0ZW1lbnQoc3RhdGVtZW50LCBjb250ZXh0KTtcblxuICBpZiAoanVkZ2VtZW50ICE9PSBudWxsKSB7XG4gICAgY29uc3Qgc3RhdGVtZW50U3RyaW5nID0gc3RhdGVtZW50LmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IGFzIGEganVkZ2VtZW50Li4uYCk7XG5cbiAgICBjb25zdCBqdWRnZW1lbnRWYWxpZGF0ZXMgPSBqdWRnZW1lbnQudmFsaWRhdGUoYXNzaWdubWVudHMsIHN0YXRlZCwgY29udGV4dCk7XG5cbiAgICB2YWxpZGF0ZXNTdGF0ZW1lbnRBc0p1ZGdlbWVudCA9IGp1ZGdlbWVudFZhbGlkYXRlczsgIC8vL1xuXG4gICAgaWYgKHZhbGlkYXRlc1N0YXRlbWVudEFzSnVkZ2VtZW50KSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCBhcyBhIGp1ZGdlbWVudC5gKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdmFsaWRhdGVzU3RhdGVtZW50QXNKdWRnZW1lbnQ7XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlU3RhdGVtZW50QXNUeXBlQXNzZXJ0aW9uKHN0YXRlbWVudCwgYXNzaWdubWVudHMsIHN0YXRlZCwgY29udGV4dCkge1xuICBsZXQgdmFsaWRhdGVzU3RhdGVtZW50QXNUeXBlQXNzZXJ0aW9uID0gZmFsc2U7XG5cbiAgY29uc3QgdHlwZUFzc2VydGlvbiA9IHR5cGVBc3NlcnRpb25Gcm9tU3RhdGVtZW50KHN0YXRlbWVudCwgY29udGV4dCk7XG5cbiAgaWYgKHR5cGVBc3NlcnRpb24gIT09IG51bGwpIHtcbiAgICBjb25zdCBzdGF0ZW1lbnRTdHJpbmcgPSBzdGF0ZW1lbnQuZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0aW5nIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQgYXMgYSB0eXBlIGFzc2VydGlvbi4uLmApO1xuXG4gICAgY29uc3QgdHlwZUFzc2VydGlvblZhbGlkYXRlcyA9IHR5cGVBc3NlcnRpb24udmFsaWRhdGUoYXNzaWdubWVudHMsIHN0YXRlZCwgY29udGV4dCk7XG5cbiAgICB2YWxpZGF0ZXNTdGF0ZW1lbnRBc1R5cGVBc3NlcnRpb24gPSB0eXBlQXNzZXJ0aW9uVmFsaWRhdGVzOyAvLy9cblxuICAgIGlmICh2YWxpZGF0ZXNTdGF0ZW1lbnRBc1R5cGVBc3NlcnRpb24pIHtcbiAgICAgIGNvbnN0IGFzc2VydGlvbiA9IHR5cGVBc3NlcnRpb247ICAvLy9cblxuICAgICAgY29udGV4dC5hZGRBc3NlcnRpb24oYXNzZXJ0aW9uKTtcblxuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmFsaWRhdGVkIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQgYXMgYSB0eXBlIGFzc2VydGlvbi5gKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdmFsaWRhdGVzU3RhdGVtZW50QXNUeXBlQXNzZXJ0aW9uO1xufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZVN0YXRlbWVudEFzRGVmaW5lZEFzc2VydGlvbihzdGF0ZW1lbnQsIGFzc2lnbm1lbnRzLCBzdGF0ZWQsIGNvbnRleHQpIHtcbiAgbGV0IHZhbGlkYXRlc1N0YXRlbWVudEFzRGVmaW5lZEFzc2VydGlvbiA9IGZhbHNlO1xuXG4gIGNvbnN0IGRlZmluZWRBc3NlcnRpb24gPSBkZWZpbmVkQXNzZXJ0aW9uRnJvbVN0YXRlbWVudChzdGF0ZW1lbnQsIGNvbnRleHQpO1xuXG4gIGlmIChkZWZpbmVkQXNzZXJ0aW9uICE9PSBudWxsKSB7XG4gICAgY29uc3Qgc3RhdGVtZW50U3RyaW5nID0gc3RhdGVtZW50LmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IGFzIGEgZGVmaW5lZCBhc3NlcnRpb24uLi5gKTtcblxuICAgIGNvbnN0IGRlZmluZWRBc3NlcnRpb25WYWxpZGF0ZXMgPSBkZWZpbmVkQXNzZXJ0aW9uLnZhbGlkYXRlKGFzc2lnbm1lbnRzLCBzdGF0ZWQsIGNvbnRleHQpO1xuXG4gICAgdmFsaWRhdGVzU3RhdGVtZW50QXNEZWZpbmVkQXNzZXJ0aW9uID0gZGVmaW5lZEFzc2VydGlvblZhbGlkYXRlczsgLy8vXG5cbiAgICBpZiAodmFsaWRhdGVzU3RhdGVtZW50QXNEZWZpbmVkQXNzZXJ0aW9uKSB7XG4gICAgICBjb25zdCBhc3NlcnRpb24gPSBkZWZpbmVkQXNzZXJ0aW9uOyAgLy8vXG5cbiAgICAgIGNvbnRleHQuYWRkQXNzZXJ0aW9uKGFzc2VydGlvbik7XG5cbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlZCB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IGFzIGEgZGVmaW5lZCBhc3NlcnRpb24uYCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHZhbGlkYXRlc1N0YXRlbWVudEFzRGVmaW5lZEFzc2VydGlvbjtcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVTdGF0ZW1lbnRBc1Byb3BlcnR5QXNzZXJ0aW9uKHN0YXRlbWVudCwgYXNzaWdubWVudHMsIHN0YXRlZCwgY29udGV4dCkge1xuICBsZXQgc3RhdGVtZW50VmFsaWRhdGVzQXNQcm9wZXJ0eUFzc2VydGlvbiA9IGZhbHNlO1xuXG4gIGNvbnN0IHByb3BlcnR5QXNzZXJ0aW9uID0gcHJvcGVydHlBc3NlcnRpb25Gcm9tU3RhdGVtZW50KHN0YXRlbWVudCwgY29udGV4dCk7XG5cbiAgaWYgKHByb3BlcnR5QXNzZXJ0aW9uICE9PSBudWxsKSB7XG4gICAgY29uc3Qgc3RhdGVtZW50U3RyaW5nID0gc3RhdGVtZW50LmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IGFzIGEgcHJvcGVydHkgYXNzZXJ0aW9uLi4uYCk7XG5cbiAgICBjb25zdCBwcm9wZXJ0eUFzc2VydGlvblZhbGlkYXRlcyA9IHByb3BlcnR5QXNzZXJ0aW9uLnZhbGlkYXRlKGFzc2lnbm1lbnRzLCBzdGF0ZWQsIGNvbnRleHQpO1xuXG4gICAgc3RhdGVtZW50VmFsaWRhdGVzQXNQcm9wZXJ0eUFzc2VydGlvbiA9IHByb3BlcnR5QXNzZXJ0aW9uVmFsaWRhdGVzOyAvLy9cblxuICAgIGlmIChzdGF0ZW1lbnRWYWxpZGF0ZXNBc1Byb3BlcnR5QXNzZXJ0aW9uKSB7XG4gICAgICBjb25zdCBhc3NlcnRpb24gPSBwcm9wZXJ0eUFzc2VydGlvbjsgLy8vXG5cbiAgICAgIGNvbnRleHQuYWRkQXNzZXJ0aW9uKGFzc2VydGlvbik7XG5cbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlZCB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IGFzIGEgcHJvcGVydHkgYXNzZXJ0aW9uLmApO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBzdGF0ZW1lbnRWYWxpZGF0ZXNBc1Byb3BlcnR5QXNzZXJ0aW9uO1xufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZVN0YXRlbWVudEFzU3VicHJvb2ZBc3NlcnRpb24oc3RhdGVtZW50LCBhc3NpZ25tZW50cywgc3RhdGVkLCBjb250ZXh0KSB7XG4gIGxldCBzdGF0ZW1lbnRWYWxpZGF0ZXNBc1N1YnByb29mQXNzZXJ0aW9uID0gZmFsc2U7XG5cbiAgY29uc3Qgc3VicHJvb2ZBc3NlcnRpb24gPSBzdWJwcm9vZkFzc2VydGlvbkZyb21TdGF0ZW1lbnQoc3RhdGVtZW50LCBjb250ZXh0KTtcblxuICBpZiAoc3VicHJvb2ZBc3NlcnRpb24gIT09IG51bGwpIHtcbiAgICBjb25zdCBzdGF0ZW1lbnRTdHJpbmcgPSBzdGF0ZW1lbnQuZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0aW5nIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQgYXMgYSBzdWJwcm9vZiBhc3NlcnRpb24uLi5gKTtcblxuICAgIGNvbnN0IHN1YnByb29mQXNzZXJ0aW9uVmFsaWRhdGVzID0gc3VicHJvb2ZBc3NlcnRpb24udmFsaWRhdGUoYXNzaWdubWVudHMsIHN0YXRlZCwgY29udGV4dCk7XG5cbiAgICBzdGF0ZW1lbnRWYWxpZGF0ZXNBc1N1YnByb29mQXNzZXJ0aW9uID0gc3VicHJvb2ZBc3NlcnRpb25WYWxpZGF0ZXM7IC8vL1xuXG4gICAgaWYgKHN0YXRlbWVudFZhbGlkYXRlc0FzU3VicHJvb2ZBc3NlcnRpb24pIHtcbiAgICAgIGNvbnN0IGFzc2VydGlvbiA9IHN1YnByb29mQXNzZXJ0aW9uOyAvLy9cblxuICAgICAgY29udGV4dC5hZGRBc3NlcnRpb24oYXNzZXJ0aW9uKTtcblxuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmFsaWRhdGVkIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQgYXMgYSBzdWJwcm9vZiBhc3NlcnRpb24uYCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHN0YXRlbWVudFZhbGlkYXRlc0FzU3VicHJvb2ZBc3NlcnRpb247XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlU3RhdGVtZW50QXNDb250YWluZWRBc3NlcnRpb24oc3RhdGVtZW50LCBhc3NpZ25tZW50cywgc3RhdGVkLCBjb250ZXh0KSB7XG4gIGxldCB2YWxpZGF0ZXNTdGF0ZW1lbnRBc0NvbnRhaW5lZEFzc2VydGlvbiA9IGZhbHNlO1xuXG4gIGNvbnN0IGNvbnRhaW5lZEFzc2VydGlvbiA9IGNvbnRhaW5lZEFzc2VydGlvbkZyb21TdGF0ZW1lbnQoc3RhdGVtZW50LCBjb250ZXh0KTtcblxuICBpZiAoY29udGFpbmVkQXNzZXJ0aW9uICE9PSBudWxsKSB7XG4gICAgY29uc3Qgc3RhdGVtZW50U3RyaW5nID0gc3RhdGVtZW50LmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IGFzIGEgY29udGFpbmVkIGFzc2VydGlvbi4uLmApO1xuXG4gICAgY29uc3QgY29udGFpbmVkQXNzZXJ0aW9uVmFsaWRhdGVzID0gY29udGFpbmVkQXNzZXJ0aW9uLnZhbGlkYXRlKGFzc2lnbm1lbnRzLCBzdGF0ZWQsIGNvbnRleHQpO1xuXG4gICAgdmFsaWRhdGVzU3RhdGVtZW50QXNDb250YWluZWRBc3NlcnRpb24gPSBjb250YWluZWRBc3NlcnRpb25WYWxpZGF0ZXM7IC8vL1xuXG4gICAgaWYgKHZhbGlkYXRlc1N0YXRlbWVudEFzQ29udGFpbmVkQXNzZXJ0aW9uKSB7XG4gICAgICBjb25zdCBhc3NlcnRpb24gPSBjb250YWluZWRBc3NlcnRpb247IC8vL1xuXG4gICAgICBjb250ZXh0LmFkZEFzc2VydGlvbihhc3NlcnRpb24pO1xuXG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCBhcyBhIGNvbnRhaW5lZCBhc3NlcnRpb24uYCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHZhbGlkYXRlc1N0YXRlbWVudEFzQ29udGFpbmVkQXNzZXJ0aW9uO1xufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZVN0YXRlbWVudEFzU2F0aXNmaWVzQXNzZXJ0aW9uKHN0YXRlbWVudCwgYXNzaWdubWVudHMsIHN0YXRlZCwgY29udGV4dCkge1xuICBsZXQgdmFsaWRhdGVzQVN0YXRlbWVudHNTYXRpc2ZpZXNBc3NlcnRpb24gPSBmYWxzZTtcblxuICBjb25zdCBzYXRpc2ZpZXNBc3NlcnRpb24gPSBzYXRpc2ZpZXNBc3NlcnRpb25Gcm9tU3RhdGVtZW50KHN0YXRlbWVudCwgY29udGV4dCk7XG5cbiAgaWYgKHNhdGlzZmllc0Fzc2VydGlvbiAhPT0gbnVsbCkge1xuICAgIGNvbnN0IHN0YXRlbWVudFN0cmluZyA9IHN0YXRlbWVudC5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCBhcyBhIHNhdGlzZmllcyBhc3NlcnRpb24uLi5gKTtcblxuICAgIGNvbnN0IHNhdGlzZmllc0Fzc2VydGlvblZhbGlkYXRlcyA9IHNhdGlzZmllc0Fzc2VydGlvbi52YWxpZGF0ZShhc3NpZ25tZW50cywgc3RhdGVkLCBjb250ZXh0KTtcblxuICAgIHZhbGlkYXRlc0FTdGF0ZW1lbnRzU2F0aXNmaWVzQXNzZXJ0aW9uID0gc2F0aXNmaWVzQXNzZXJ0aW9uVmFsaWRhdGVzOyAvLy9cblxuICAgIGlmICh2YWxpZGF0ZXNBU3RhdGVtZW50c1NhdGlzZmllc0Fzc2VydGlvbikge1xuICAgICAgY29uc3QgYXNzZXJ0aW9uID0gc2F0aXNmaWVzQXNzZXJ0aW9uOyAvLy9cblxuICAgICAgY29udGV4dC5hZGRBc3NlcnRpb24oYXNzZXJ0aW9uKTtcblxuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmFsaWRhdGVkIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQgYXMgYSBzYXRpc2ZpZXMgYXNzZXJ0aW9uLmApO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB2YWxpZGF0ZXNBU3RhdGVtZW50c1NhdGlzZmllc0Fzc2VydGlvbjtcbn1cblxuZXhwb3J0IGNvbnN0IHZhbGlkYXRlVGVybXMgPSBbXG4gIHZhbGlkYXRlVGVybUFzVmFyaWFibGUsXG4gIHVuaWZ5VGVybVdpdGhDb25zdHJ1Y3RvcnMsXG4gIHVuaWZ5VGVybVdpdGhCcmFja2V0ZWRDb25zdHJ1Y3RvclxuXTtcblxuZXhwb3J0IGNvbnN0IHZhbGlkYXRlU3RhdGVtZW50cyA9IFtcbiAgdmFsaWRhdGVTdGF0ZW1lbnRBc01ldGF2YXJpYWJsZSxcbiAgdW5pZnlTdGF0ZW1lbnRXaXRoQ29tYmluYXRvcnMsXG4gIHVuaWZ5U3RhdGVtZW50V2l0aEJyYWNrZXRlZENvbWJpbmF0b3IsXG4gIHZhbGlkYXRlU3RhdGVtZW50QXNFcXVhbGl0eSxcbiAgdmFsaWRhdGVTdGF0ZW1lbnRBc0p1ZGdlbWVudCxcbiAgdmFsaWRhdGVTdGF0ZW1lbnRBc1R5cGVBc3NlcnRpb24sXG4gIHZhbGlkYXRlU3RhdGVtZW50QXNEZWZpbmVkQXNzZXJ0aW9uLFxuICB2YWxpZGF0ZVN0YXRlbWVudEFzUHJvcGVydHlBc3NlcnRpb24sXG4gIHZhbGlkYXRlU3RhdGVtZW50QXNTdWJwcm9vZkFzc2VydGlvbixcbiAgdmFsaWRhdGVTdGF0ZW1lbnRBc0NvbnRhaW5lZEFzc2VydGlvbixcbiAgdmFsaWRhdGVTdGF0ZW1lbnRBc1NhdGlzZmllc0Fzc2VydGlvblxuXTtcbiJdLCJuYW1lcyI6WyJ2YWxpZGF0ZVN0YXRlbWVudHMiLCJ2YWxpZGF0ZVRlcm1zIiwidmFsaWRhdGVUZXJtQXNWYXJpYWJsZSIsInRlcm0iLCJjb250ZXh0IiwidmFsaWRhdGVBaGVhZCIsInRlcm1WYWxpZGF0ZXNBc1ZhcmlhYmxlIiwidGVybU5vZGUiLCJnZXROb2RlIiwidmFyaWFibGVOb2RlIiwiZ2V0VmFyaWFibGVOb2RlIiwidGVybVN0cmluZyIsImdldFN0cmluZyIsInRyYWNlIiwidmFyaWFibGVJZGVudGlmaWVyIiwiZ2V0VmFyaWFibGVJZGVudGlmaWVyIiwidmFyaWFibGUiLCJmaW5kVmFyaWFibGVCeVZhcmlhYmxlSWRlbnRpZmllciIsInR5cGUiLCJnZXRUeXBlIiwic2V0VHlwZSIsInZlcmlmaWVzQWhlYWQiLCJkZWJ1ZyIsInVuaWZ5VGVybVdpdGhDb25zdHJ1Y3RvcnMiLCJ0ZXJtVW5pZmllc1dpdGhDb25zdHJ1Y3RvcnMiLCJjb25zdHJ1Y3RvcnMiLCJnZXRDb25zdHJ1Y3RvcnMiLCJzb21lIiwiY29uc3RydWN0b3IiLCJ1bmlmaWVzV2l0aENvbnN0cnVjdG9yIiwidW5pZnlUZXJtIiwidW5pZnlUZXJtV2l0aEJyYWNrZXRlZENvbnN0cnVjdG9yIiwidGVybVVuaWZpZXNXaXRoQnJhY2tldGVkQ29uc3RydWN0b3IiLCJicmFja2V0ZWRDb25zdHJ1Y3RvciIsImJyYWNrZXRlZENvbnN0cnVjdG9yRnJvbU5vdGhpbmciLCJ2YWxpZGF0ZVN0YXRlbWVudEFzTWV0YXZhcmlhYmxlIiwic3RhdGVtZW50IiwiYXNzaWdubWVudHMiLCJzdGF0ZWQiLCJzdGF0ZW1lbnRWYWxpZGF0ZXNBc01ldGF2YXJpYWJsZUFuZFN1YnN0aXR1dGlvbiIsInN0YXRlbWVudE5vZGUiLCJtZXRhdmFyaWFibGVOb2RlIiwiZ2V0TWV0YXZhcmlhYmxlTm9kZSIsInN0YXRlbWVudFN0cmluZyIsIm1ldGF2YXJpYWJsZU5hbWUiLCJnZXRNZXRhdmFyaWFibGVOYW1lIiwibWV0YXZhcmlhYmxlIiwiZmluZE1ldGF2YXJpYWJsZUJ5TWV0YXZhcmlhYmxlTmFtZSIsIlRlcm1TdWJzdGl0dXRpb24iLCJlbGVtZW50cyIsIkZyYW1lU3Vic3RpdHV0aW9uIiwiZnJhbWVTdWJzdGl0dXRpb24iLCJmcm9tU3RhdGVtZW50IiwidGVybVN1YnN0aXR1dGlvbiIsInN1YnN0aXR1dGlvbiIsInN1YnN0aXR1dGlvblZhbGlkYXRlcyIsInZhbGlkYXRlIiwidW5pZnlTdGF0ZW1lbnRXaXRoQ29tYmluYXRvcnMiLCJjb21iaW5hdG9ycyIsImdldENvbWJpbmF0b3JzIiwic3RhdGVtZW50VW5pZmllc1dpdGhDb21iaW5hdG9ycyIsImNvbWJpbmF0b3IiLCJ1bmlmaWVzV2l0aENvbWJpbmF0b3IiLCJ1bmlmeVN0YXRlbWVudCIsInVuaWZ5U3RhdGVtZW50V2l0aEJyYWNrZXRlZENvbWJpbmF0b3IiLCJicmFja2V0ZWRDb21iaW5hdG9yIiwiYnJhY2tldGVkQ29tYmluYXRvckZyb21Ob3RoaW5nIiwic3RhdGVtZW50VW5pZmllc1dpdGhCcmFja2V0ZWRDb21iaW5hdG9yIiwidmFsaWRhdGVTdGF0ZW1lbnRBc0VxdWFsaXR5Iiwic3RhdGVtZW50VmFsaWRhdGVzQXNFcXVhbGl0eSIsImVxdWFsaXR5IiwiZXF1YWxpdHlGcm9tU3RhdGVtZW50IiwiZXF1YWxpdHlWYWxpZGF0ZXMiLCJ2YWxpZGF0ZVN0YXRlbWVudEFzSnVkZ2VtZW50IiwidmFsaWRhdGVzU3RhdGVtZW50QXNKdWRnZW1lbnQiLCJqdWRnZW1lbnQiLCJqdWRnZW1lbnRGcm9tU3RhdGVtZW50IiwianVkZ2VtZW50VmFsaWRhdGVzIiwidmFsaWRhdGVTdGF0ZW1lbnRBc1R5cGVBc3NlcnRpb24iLCJ2YWxpZGF0ZXNTdGF0ZW1lbnRBc1R5cGVBc3NlcnRpb24iLCJ0eXBlQXNzZXJ0aW9uIiwidHlwZUFzc2VydGlvbkZyb21TdGF0ZW1lbnQiLCJ0eXBlQXNzZXJ0aW9uVmFsaWRhdGVzIiwiYXNzZXJ0aW9uIiwiYWRkQXNzZXJ0aW9uIiwidmFsaWRhdGVTdGF0ZW1lbnRBc0RlZmluZWRBc3NlcnRpb24iLCJ2YWxpZGF0ZXNTdGF0ZW1lbnRBc0RlZmluZWRBc3NlcnRpb24iLCJkZWZpbmVkQXNzZXJ0aW9uIiwiZGVmaW5lZEFzc2VydGlvbkZyb21TdGF0ZW1lbnQiLCJkZWZpbmVkQXNzZXJ0aW9uVmFsaWRhdGVzIiwidmFsaWRhdGVTdGF0ZW1lbnRBc1Byb3BlcnR5QXNzZXJ0aW9uIiwic3RhdGVtZW50VmFsaWRhdGVzQXNQcm9wZXJ0eUFzc2VydGlvbiIsInByb3BlcnR5QXNzZXJ0aW9uIiwicHJvcGVydHlBc3NlcnRpb25Gcm9tU3RhdGVtZW50IiwicHJvcGVydHlBc3NlcnRpb25WYWxpZGF0ZXMiLCJ2YWxpZGF0ZVN0YXRlbWVudEFzU3VicHJvb2ZBc3NlcnRpb24iLCJzdGF0ZW1lbnRWYWxpZGF0ZXNBc1N1YnByb29mQXNzZXJ0aW9uIiwic3VicHJvb2ZBc3NlcnRpb24iLCJzdWJwcm9vZkFzc2VydGlvbkZyb21TdGF0ZW1lbnQiLCJzdWJwcm9vZkFzc2VydGlvblZhbGlkYXRlcyIsInZhbGlkYXRlU3RhdGVtZW50QXNDb250YWluZWRBc3NlcnRpb24iLCJ2YWxpZGF0ZXNTdGF0ZW1lbnRBc0NvbnRhaW5lZEFzc2VydGlvbiIsImNvbnRhaW5lZEFzc2VydGlvbiIsImNvbnRhaW5lZEFzc2VydGlvbkZyb21TdGF0ZW1lbnQiLCJjb250YWluZWRBc3NlcnRpb25WYWxpZGF0ZXMiLCJ2YWxpZGF0ZVN0YXRlbWVudEFzU2F0aXNmaWVzQXNzZXJ0aW9uIiwidmFsaWRhdGVzQVN0YXRlbWVudHNTYXRpc2ZpZXNBc3NlcnRpb24iLCJzYXRpc2ZpZXNBc3NlcnRpb24iLCJzYXRpc2ZpZXNBc3NlcnRpb25Gcm9tU3RhdGVtZW50Iiwic2F0aXNmaWVzQXNzZXJ0aW9uVmFsaWRhdGVzIl0sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7UUEyVmFBO2VBQUFBOztRQU5BQztlQUFBQTs7OytEQW5WUTt3QkFFMkQ7eUJBUWhDOzs7Ozs7QUFFaEQsU0FBU0MsdUJBQXVCQyxJQUFJLEVBQUVDLE9BQU8sRUFBRUMsYUFBYTtJQUMxRCxJQUFJQywwQkFBMEI7SUFFOUIsSUFBTUMsV0FBV0osS0FBS0ssT0FBTyxJQUN2QkMsZUFBZUYsU0FBU0csZUFBZTtJQUU3QyxJQUFJRCxpQkFBaUIsTUFBTTtRQUN6QixJQUFNRSxhQUFhUixLQUFLUyxTQUFTO1FBRWpDUixRQUFRUyxLQUFLLENBQUMsQUFBQyxtQkFBNkIsT0FBWEYsWUFBVztRQUU1QyxJQUFNRyxxQkFBcUJMLGFBQWFNLHFCQUFxQixJQUN2REMsV0FBV1osUUFBUWEsZ0NBQWdDLENBQUNIO1FBRTFELElBQUlFLGFBQWEsTUFBTTtZQUNyQixJQUFNRSxPQUFPRixTQUFTRyxPQUFPO1lBRTdCaEIsS0FBS2lCLE9BQU8sQ0FBQ0Y7WUFFYixJQUFNRyxnQkFBZ0JoQjtZQUV0QixJQUFJZ0IsZUFBZTtnQkFDakJmLDBCQUEwQjtZQUM1QjtRQUNGO1FBRUEsSUFBSUEseUJBQXlCO1lBQzNCRixRQUFRa0IsS0FBSyxDQUFDLEFBQUMscUJBQStCLE9BQVhYLFlBQVc7UUFDaEQ7SUFDRjtJQUVBLE9BQU9MO0FBQ1Q7QUFFQSxTQUFTaUIsMEJBQTBCcEIsSUFBSSxFQUFFQyxPQUFPLEVBQUVDLGFBQWE7SUFDN0QsSUFBSW1C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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.457",
4
+ "version": "1.0.473",
5
5
  "license": "MIT, Anti-996",
6
6
  "homepage": "https://github.com/djalbat/occam-verify-cli",
7
7
  "description": "Occam's Verifier",
@@ -15,7 +15,7 @@
15
15
  "occam-custom-grammars": "^5.0.1340",
16
16
  "occam-entities": "^1.0.444",
17
17
  "occam-file-system": "^6.0.459",
18
- "occam-furtle": "^2.0.280",
18
+ "occam-furtle": "^2.0.283",
19
19
  "occam-grammars": "^1.3.437",
20
20
  "occam-lexers": "^23.1.34",
21
21
  "occam-parsers": "^23.1.37",
package/src/constants.js CHANGED
@@ -1,5 +1,17 @@
1
1
  "use strict";
2
2
 
3
+ import { levels } from "necessary";
4
+
5
+ const { TRACE_LEVEL, DEBUG_LEVEL, INFO_LEVEL, WARNING_LEVEL, ERROR_LEVEL } = levels;
6
+
7
+ export const LEVELS = [
8
+ TRACE_LEVEL,
9
+ DEBUG_LEVEL,
10
+ INFO_LEVEL,
11
+ WARNING_LEVEL,
12
+ ERROR_LEVEL
13
+ ];
14
+
3
15
  export const S = "s";
4
16
  export const MISSING = "missing";
5
17
  export const FUNCTION = "function";
@@ -1,12 +1,12 @@
1
1
  "use strict";
2
2
 
3
3
  import { arrayUtilities } from "necessary";
4
+ import { contextUtilities } from "occam-furtle";
4
5
 
5
- import { chainContext } from "../utilities/context";
6
+ const { extract } = arrayUtilities,
7
+ { chainContext } = contextUtilities;
6
8
 
7
- const { extract, compress } = arrayUtilities;
8
-
9
- export default class TransientContext {
9
+ export default class EphemeralContext {
10
10
  constructor(context, terms, frames, statements, assertions, references, substitutions) {
11
11
  this.context = context;
12
12
  this.terms = terms;
@@ -61,7 +61,7 @@ export default class TransientContext {
61
61
  }
62
62
  });
63
63
 
64
- context.trace(`ADded the '${termString}' term to the context.`);
64
+ context.trace(`Added the '${termString}' term to the context.`);
65
65
 
66
66
  this.terms.push(term);
67
67
  }
@@ -111,7 +111,7 @@ export default class TransientContext {
111
111
 
112
112
  extract(this.assertions, (assertion) => {
113
113
  const assertionB = assertion, ///
114
- assertionAEqualToAssertionB = assertionA.isEqualTo(assertionB);
114
+ assertionAEqualToAssertionB = assertionA.isEqualTo(assertionB);
115
115
 
116
116
  if (assertionAEqualToAssertionB) {
117
117
  return true;
@@ -149,9 +149,9 @@ export default class TransientContext {
149
149
 
150
150
  extract(this.substitutions, (substitution) => {
151
151
  const substitutionB = substitution, ///
152
- substituionAEqualToSubstitutionB = substitutionA.isEqualTo(substitutionB);
152
+ substitutionAEqualToAssertionB = substitutionA.isEqualTo(substitutionB);
153
153
 
154
- if (substituionAEqualToSubstitutionB) {
154
+ if (substitutionAEqualToAssertionB) {
155
155
  return true;
156
156
  }
157
157
  });
@@ -233,101 +233,14 @@ export default class TransientContext {
233
233
  return substitution;
234
234
  }
235
235
 
236
- getVariables(nested = true) { return this.context.getVariables(nested); }
237
-
238
- addVariable(variable, nested = true) { return this.context.addVariable(variable, nested); }
239
-
240
- findVariableByVariableIdentifier(variableIdentifier, nested = true) { return this.context.findVariableByVariableIdentifier(variableIdentifier, nested); }
241
-
242
- isTypePresentByTypeName(typeName, includeRelease = true, includeDependencies = true) { return this.context.isTypePresentByTypeName(typeName, includeRelease, includeDependencies); }
243
-
244
- isVariablePresentByVariableIdentifier(variableIdentifier, nested = true) { return this.context.findVariableByVariableIdentifier(variableIdentifier, nested); }
245
-
246
- merge(context) {
247
- const terms = context.getTerms(),
248
- frames = context.getFrames(),
249
- statements = context.getStatements(),
250
- assertions = context.getAssertions(),
251
- references = context.getReferences(),
252
- substitutions = context.getSubstitutions();
236
+ getFileContext() { return this.context.getFileContext(); }
253
237
 
254
- this.terms = [
255
- ...this.terms,
256
- ...terms
257
- ];
238
+ getDepth() {
239
+ let depth = this.context.getDepth();
258
240
 
259
- this.frames = [
260
- ...this.frames,
261
- ...frames
262
- ];
241
+ depth++;
263
242
 
264
- this.statements = [
265
- ...this.statements,
266
- ...statements
267
- ];
268
-
269
- this.assertions = [
270
- ...this.assertions,
271
- ...assertions
272
- ];
273
-
274
- this.references = [
275
- ...this.references,
276
- ...references
277
- ];
278
-
279
- this.substitutions = [
280
- ...this.substitutions,
281
- ...substitutions
282
- ];
283
-
284
- compress(this.terms, (termA, termB) => {
285
- const termAEqualToTermB = termA.isEqualTo(termB);
286
-
287
- if (!termAEqualToTermB) {
288
- return true;
289
- }
290
- });
291
-
292
- compress(this.frames, (frameA, frameB) => {
293
- const frameAEqualToFrameB = frameA.isEqualTo(frameB);
294
-
295
- if (!frameAEqualToFrameB) {
296
- return true;
297
- }
298
- });
299
-
300
- compress(this.statements, (statementA, statementB) => {
301
- const statementAEqualToStatementB = statementA.isEqualTo(statementB);
302
-
303
- if (!statementAEqualToStatementB) {
304
- return true;
305
- }
306
- });
307
-
308
- compress(this.assertions, (assertionA, assertionB) => {
309
- const assertionAEqualToAssertionB = assertionA.isEqualTo(assertionB);
310
-
311
- if (!assertionAEqualToAssertionB) {
312
- return true;
313
- }
314
- });
315
-
316
- compress(this.references, (referenceA, referenceB) => {
317
- const referenceAEqualToReferenceB = referenceA.isEqualTo(referenceB);
318
-
319
- if (!referenceAEqualToReferenceB) {
320
- return true;
321
- }
322
- });
323
-
324
- compress(this.substitutions, (substitutionA, substitutionB) => {
325
- const substitutionAEqualToSubstitutionB = substitutionA.isEqualTo(substitutionB);
326
-
327
- if (!substitutionAEqualToSubstitutionB) {
328
- return true;
329
- }
330
- });
243
+ return depth;
331
244
  }
332
245
 
333
246
  static fromNothing(context) {
@@ -337,18 +250,8 @@ export default class TransientContext {
337
250
  assertions = [],
338
251
  references = [],
339
252
  substitutions = [],
340
- transientContext = new TransientContext(context, terms, frames, statements, assertions, references, substitutions);
341
-
342
- return transientContext;
343
- }
344
-
345
- static fromTermsAndFrames(terms, frames, context) {
346
- const statements = [],
347
- assertions = [],
348
- references = [],
349
- substitutions = [],
350
- transientContext = new TransientContext(context, terms, frames, statements, assertions, references, substitutions);
253
+ emphemeralContext = new EphemeralContext(context, terms, frames, statements, assertions, references, substitutions);
351
254
 
352
- return transientContext;
255
+ return emphemeralContext;
353
256
  }
354
257
  }