occam-verify-cli 1.0.587 → 1.0.602

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 (105) hide show
  1. package/lib/context/ephemeral.js +74 -2
  2. package/lib/context/file/nominal.js +11 -9
  3. package/lib/context/liminal.js +161 -24
  4. package/lib/context/literal.js +8 -2
  5. package/lib/context/scoped.js +4 -28
  6. package/lib/context/synthetic.js +146 -0
  7. package/lib/context.js +170 -1
  8. package/lib/element/assertion/contained.js +21 -15
  9. package/lib/element/assertion/defined.js +45 -65
  10. package/lib/element/assertion/property.js +25 -19
  11. package/lib/element/assertion/satisfies.js +14 -8
  12. package/lib/element/assertion/subproof.js +12 -6
  13. package/lib/element/assertion.js +47 -1
  14. package/lib/element/assumption.js +12 -12
  15. package/lib/element/conclusion.js +2 -2
  16. package/lib/element/deduction.js +2 -2
  17. package/lib/element/frame.js +61 -29
  18. package/lib/element/judgement.js +7 -1
  19. package/lib/element/label.js +8 -8
  20. package/lib/element/metavariable.js +71 -59
  21. package/lib/element/procedureCall.js +24 -8
  22. package/lib/element/proof.js +43 -35
  23. package/lib/element/proofAssertion/premise.js +122 -97
  24. package/lib/element/proofAssertion/step.js +161 -115
  25. package/lib/element/proofAssertion/supposition.js +157 -118
  26. package/lib/element/proofAssertion.js +3 -3
  27. package/lib/element/reference.js +40 -7
  28. package/lib/element/rule.js +227 -95
  29. package/lib/element/signature.js +2 -1
  30. package/lib/element/statement.js +67 -34
  31. package/lib/element/substitution/frame.js +36 -16
  32. package/lib/element/substitution/reference.js +36 -16
  33. package/lib/element/substitution/statement.js +94 -55
  34. package/lib/element/substitution/term.js +36 -16
  35. package/lib/element/substitution.js +54 -17
  36. package/lib/element/substitutions.js +4 -276
  37. package/lib/element/term.js +60 -31
  38. package/lib/element/topLevelAssertion/axiom.js +13 -4
  39. package/lib/element/topLevelAssertion/conjecture.js +7 -2
  40. package/lib/element/topLevelAssertion/theorem.js +7 -2
  41. package/lib/element/topLevelAssertion.js +201 -134
  42. package/lib/element/topLevelMetaAssertion.js +310 -51
  43. package/lib/element/variable.js +15 -6
  44. package/lib/node/substitution/statement.js +33 -1
  45. package/lib/process/unify.js +6 -6
  46. package/lib/utilities/context.js +10 -25
  47. package/lib/utilities/element.js +34 -9
  48. package/lib/utilities/statement.js +1 -8
  49. package/lib/utilities/string.js +12 -1
  50. package/lib/utilities/substitutions.js +42 -16
  51. package/lib/utilities/unification.js +3 -1
  52. package/lib/utilities/validation.js +2 -2
  53. package/package.json +4 -4
  54. package/src/context/ephemeral.js +73 -1
  55. package/src/context/file/nominal.js +14 -11
  56. package/src/context/liminal.js +180 -25
  57. package/src/context/literal.js +3 -1
  58. package/src/context/scoped.js +3 -35
  59. package/src/context/synthetic.js +49 -0
  60. package/src/context.js +163 -1
  61. package/src/element/assertion/contained.js +28 -20
  62. package/src/element/assertion/defined.js +62 -34
  63. package/src/element/assertion/property.js +27 -19
  64. package/src/element/assertion/satisfies.js +15 -7
  65. package/src/element/assertion/subproof.js +13 -5
  66. package/src/element/assertion.js +35 -0
  67. package/src/element/assumption.js +5 -5
  68. package/src/element/conclusion.js +2 -4
  69. package/src/element/deduction.js +2 -4
  70. package/src/element/frame.js +71 -39
  71. package/src/element/judgement.js +2 -0
  72. package/src/element/label.js +4 -4
  73. package/src/element/metavariable.js +94 -75
  74. package/src/element/procedureCall.js +6 -6
  75. package/src/element/proof.js +6 -6
  76. package/src/element/proofAssertion/premise.js +101 -69
  77. package/src/element/proofAssertion/step.js +78 -39
  78. package/src/element/proofAssertion/supposition.js +141 -115
  79. package/src/element/proofAssertion.js +3 -2
  80. package/src/element/reference.js +52 -10
  81. package/src/element/rule.js +138 -76
  82. package/src/element/signature.js +2 -0
  83. package/src/element/statement.js +76 -45
  84. package/src/element/substitution/frame.js +44 -15
  85. package/src/element/substitution/reference.js +44 -15
  86. package/src/element/substitution/statement.js +124 -72
  87. package/src/element/substitution/term.js +43 -15
  88. package/src/element/substitution.js +55 -18
  89. package/src/element/substitutions.js +1 -258
  90. package/src/element/term.js +65 -34
  91. package/src/element/topLevelAssertion/axiom.js +1 -1
  92. package/src/element/topLevelAssertion/conjecture.js +1 -1
  93. package/src/element/topLevelAssertion/theorem.js +1 -1
  94. package/src/element/topLevelAssertion.js +128 -48
  95. package/src/element/topLevelMetaAssertion.js +86 -32
  96. package/src/element/variable.js +15 -5
  97. package/src/node/substitution/statement.js +33 -0
  98. package/src/process/unify.js +6 -8
  99. package/src/utilities/context.js +9 -8
  100. package/src/utilities/element.js +37 -10
  101. package/src/utilities/statement.js +0 -7
  102. package/src/utilities/string.js +14 -0
  103. package/src/utilities/substitutions.js +59 -17
  104. package/src/utilities/unification.js +4 -0
  105. package/src/utilities/validation.js +3 -1
@@ -299,44 +299,52 @@ var _default = (0, _elements.define)((_Proof = /*#__PURE__*/ function(Element) {
299
299
  },
300
300
  {
301
301
  key: "verify",
302
- value: function verify(conclusion, context) {
302
+ value: function verify(statement, context) {
303
303
  return _async_to_generator(function() {
304
304
  var _this, verifies;
305
305
  return _ts_generator(this, function(_state) {
306
- _this = this;
307
- verifies = false;
308
- (0, _context.asyncScope)(function(context) {
309
- return _async_to_generator(function() {
310
- var derivationVerifies, lastProofAssertion, statement, conclusionStatement, conclusionStatementEqualToStatement;
311
- return _ts_generator(this, function(_state) {
312
- switch(_state.label){
313
- case 0:
314
- return [
315
- 4,
316
- this.derivation.verify(context)
317
- ];
318
- case 1:
319
- derivationVerifies = _state.sent();
320
- if (derivationVerifies) {
321
- lastProofAssertion = context.getLastProofAssertion();
322
- if (lastProofAssertion !== null) {
323
- statement = this.getStatement(), conclusionStatement = conclusion.getStatement(), conclusionStatementEqualToStatement = conclusionStatement.isEqualTo(statement);
324
- if (conclusionStatementEqualToStatement) {
325
- verifies = true;
326
- }
306
+ switch(_state.label){
307
+ case 0:
308
+ _this = this;
309
+ verifies = false;
310
+ return [
311
+ 4,
312
+ (0, _context.asyncScope)(function(context) {
313
+ return _async_to_generator(function() {
314
+ var derivationVerifies, lastProofAssertion, proof, proofStatement, proofStatementEqualToStatement;
315
+ return _ts_generator(this, function(_state) {
316
+ switch(_state.label){
317
+ case 0:
318
+ return [
319
+ 4,
320
+ this.derivation.verify(context)
321
+ ];
322
+ case 1:
323
+ derivationVerifies = _state.sent();
324
+ if (derivationVerifies) {
325
+ lastProofAssertion = context.getLastProofAssertion();
326
+ if (lastProofAssertion !== null) {
327
+ proof = this, proofStatement = proof.getStatement(), proofStatementEqualToStatement = proofStatement.isEqualTo(statement);
328
+ if (proofStatementEqualToStatement) {
329
+ verifies = true;
330
+ }
331
+ }
332
+ }
333
+ return [
334
+ 2
335
+ ];
327
336
  }
328
- }
329
- return [
330
- 2
331
- ];
332
- }
333
- });
334
- }).call(_this);
335
- }, context);
336
- return [
337
- 2,
338
- verifies
339
- ];
337
+ });
338
+ }).call(_this);
339
+ }, context)
340
+ ];
341
+ case 1:
342
+ _state.sent();
343
+ return [
344
+ 2,
345
+ verifies
346
+ ];
347
+ }
340
348
  });
341
349
  }).call(this);
342
350
  }
@@ -345,4 +353,4 @@ var _default = (0, _elements.define)((_Proof = /*#__PURE__*/ function(Element) {
345
353
  return Proof;
346
354
  }(_wrap_native_super(_occamlanguages.Element)), _define_property(_Proof, "name", "Proof"), _Proof));
347
355
 
348
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9lbGVtZW50L3Byb29mLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBFbGVtZW50IH0gZnJvbSBcIm9jY2FtLWxhbmd1YWdlc1wiO1xuXG5pbXBvcnQgeyBkZWZpbmUgfSBmcm9tIFwiLi4vZWxlbWVudHNcIjtcbmltcG9ydCB7IGFzeW5jU2NvcGUgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2NvbnRleHRcIjtcblxuZXhwb3J0IGRlZmF1bHQgZGVmaW5lKGNsYXNzIFByb29mIGV4dGVuZHMgRWxlbWVudCB7XG4gIGNvbnN0cnVjdG9yKGNvbnRleHQsIHN0cmluZywgbm9kZSwgZGVyaXZhdGlvbikge1xuICAgIHN1cGVyKGNvbnRleHQsIHN0cmluZywgbm9kZSk7XG5cbiAgICB0aGlzLmRlcml2YXRpb24gPSBkZXJpdmF0aW9uO1xuICB9XG5cbiAgZ2V0RGVyaXZhdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5kZXJpdmF0aW9uO1xuICB9XG5cbiAgZ2V0TGFzdFByb29mQXNzZXJ0aW9uKCkgeyByZXR1cm4gdGhpcy5kZXJpdmF0aW9uLmdldExhc3RQcm9vZkFzc2VydGlvbigpOyB9XG5cbiAgZ2V0U3RhdGVtZW50KCkge1xuICAgIGNvbnN0IGxhc3RQcm9vZkFzc2VydGlvbiA9IHRoaXMuZ2V0TGFzdFByb29mQXNzZXJ0aW9uKCksXG4gICAgICAgICAgbGFzdFByb29mQXNzZXJ0aW9uU3RhdGVtZW50ID0gbGFzdFByb29mQXNzZXJ0aW9uLmdldFN0YXRlbWVudCgpLFxuICAgICAgICAgIHN0YXRlbWVudCA9IGxhc3RQcm9vZkFzc2VydGlvblN0YXRlbWVudDsgLy8vXG5cbiAgICByZXR1cm4gc3RhdGVtZW50O1xuICB9XG5cbiAgYXN5bmMgdmVyaWZ5KGNvbmNsdXNpb24sIGNvbnRleHQpIHtcbiAgICBsZXQgdmVyaWZpZXMgPSBmYWxzZTtcblxuICAgIGFzeW5jU2NvcGUoYXN5bmMgKGNvbnRleHQpID0+IHtcbiAgICAgIGNvbnN0IGRlcml2YXRpb25WZXJpZmllcyA9IGF3YWl0IHRoaXMuZGVyaXZhdGlvbi52ZXJpZnkoY29udGV4dCk7XG5cbiAgICAgIGlmIChkZXJpdmF0aW9uVmVyaWZpZXMpIHtcbiAgICAgICAgY29uc3QgbGFzdFByb29mQXNzZXJ0aW9uID0gY29udGV4dC5nZXRMYXN0UHJvb2ZBc3NlcnRpb24oKTtcblxuICAgICAgICBpZiAobGFzdFByb29mQXNzZXJ0aW9uICE9PSBudWxsKSB7XG4gICAgICAgICAgY29uc3Qgc3RhdGVtZW50ID0gdGhpcy5nZXRTdGF0ZW1lbnQoKSxcbiAgICAgICAgICAgICAgICBjb25jbHVzaW9uU3RhdGVtZW50ID0gY29uY2x1c2lvbi5nZXRTdGF0ZW1lbnQoKSxcbiAgICAgICAgICAgICAgICBjb25jbHVzaW9uU3RhdGVtZW50RXF1YWxUb1N0YXRlbWVudCA9IGNvbmNsdXNpb25TdGF0ZW1lbnQuaXNFcXVhbFRvKHN0YXRlbWVudCk7XG5cbiAgICAgICAgICBpZiAoY29uY2x1c2lvblN0YXRlbWVudEVxdWFsVG9TdGF0ZW1lbnQpIHtcbiAgICAgICAgICAgIHZlcmlmaWVzID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LCBjb250ZXh0KTtcblxuICAgIHJldHVybiB2ZXJpZmllcztcbiAgfVxuXG4gIHN0YXRpYyBuYW1lID0gXCJQcm9vZlwiO1xufSk7XG4iXSwibmFtZXMiOlsiZGVmaW5lIiwiUHJvb2YiLCJjb250ZXh0Iiwic3RyaW5nIiwibm9kZSIsImRlcml2YXRpb24iLCJnZXREZXJpdmF0aW9uIiwiZ2V0TGFzdFByb29mQXNzZXJ0aW9uIiwiZ2V0U3RhdGVtZW50IiwibGFzdFByb29mQXNzZXJ0aW9uIiwibGFzdFByb29mQXNzZXJ0aW9uU3RhdGVtZW50Iiwic3RhdGVtZW50IiwidmVyaWZ5IiwiY29uY2x1c2lvbiIsInZlcmlmaWVzIiwiYXN5bmNTY29wZSIsImRlcml2YXRpb25WZXJpZmllcyIsImNvbmNsdXNpb25TdGF0ZW1lbnQiLCJjb25jbHVzaW9uU3RhdGVtZW50RXF1YWxUb1N0YXRlbWVudCIsImlzRXF1YWxUbyIsIkVsZW1lbnQiLCJuYW1lIl0sIm1hcHBpbmdzIjoiQUFBQTs7OzsrQkFPQTs7O2VBQUE7Ozs4QkFMd0I7d0JBRUQ7dUJBQ0k7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0lBRTNCLFdBQWVBLElBQUFBLGdCQUFNLDBCQUFDOzthQUFNQyxNQUNkQyxPQUFPLEVBQUVDLE1BQU0sRUFBRUMsSUFBSSxFQUFFQyxVQUFVO2dDQURuQko7O2dCQUV4QixrQkFGd0JBO1lBRWxCQztZQUFTQztZQUFRQzs7UUFFdkIsTUFBS0MsVUFBVSxHQUFHQTs7Ozs7WUFHcEJDLEtBQUFBO21CQUFBQSxTQUFBQTtnQkFDRSxPQUFPLElBQUksQ0FBQ0QsVUFBVTtZQUN4Qjs7O1lBRUFFLEtBQUFBO21CQUFBQSxTQUFBQTtnQkFBMEIsT0FBTyxJQUFJLENBQUNGLFVBQVUsQ0FBQ0UscUJBQXFCO1lBQUk7OztZQUUxRUMsS0FBQUE7bUJBQUFBLFNBQUFBO2dCQUNFLElBQU1DLHFCQUFxQixJQUFJLENBQUNGLHFCQUFxQixJQUMvQ0csOEJBQThCRCxtQkFBbUJELFlBQVksSUFDN0RHLFlBQVlELDZCQUE2QixHQUFHO2dCQUVsRCxPQUFPQztZQUNUOzs7WUFFTUMsS0FBQUE7bUJBQU4sU0FBTUEsT0FBT0MsVUFBVSxFQUFFWCxPQUFPOzsrQkFDMUJZOzs7d0JBQUFBLFdBQVc7d0JBRWZDLElBQUFBLG1CQUFVLEVBQUMsU0FBT2I7O29DQUNWYyxvQkFHRVAsb0JBR0VFLFdBQ0FNLHFCQUNBQzs7Ozs0Q0FSaUI7O2dEQUFNLElBQUksQ0FBQ2IsVUFBVSxDQUFDTyxNQUFNLENBQUNWOzs7NENBQWxEYyxxQkFBcUI7NENBRTNCLElBQUlBLG9CQUFvQjtnREFDaEJQLHFCQUFxQlAsUUFBUUsscUJBQXFCO2dEQUV4RCxJQUFJRSx1QkFBdUIsTUFBTTtvREFDekJFLFlBQVksSUFBSSxDQUFDSCxZQUFZLElBQzdCUyxzQkFBc0JKLFdBQVdMLFlBQVksSUFDN0NVLHNDQUFzQ0Qsb0JBQW9CRSxTQUFTLENBQUNSO29EQUUxRSxJQUFJTyxxQ0FBcUM7d0RBQ3ZDSixXQUFXO29EQUNiO2dEQUNGOzRDQUNGOzs7Ozs7NEJBQ0Y7MkJBQUdaO3dCQUVIOzs0QkFBT1k7OztnQkFDVDs7Ozs7cUJBM0N3Q00sdUJBQU8sSUE2Qy9DLHlCQUFPQyxRQUFPIn0=
356
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9lbGVtZW50L3Byb29mLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBFbGVtZW50IH0gZnJvbSBcIm9jY2FtLWxhbmd1YWdlc1wiO1xuXG5pbXBvcnQgeyBkZWZpbmUgfSBmcm9tIFwiLi4vZWxlbWVudHNcIjtcbmltcG9ydCB7IGFzeW5jU2NvcGUgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2NvbnRleHRcIjtcblxuZXhwb3J0IGRlZmF1bHQgZGVmaW5lKGNsYXNzIFByb29mIGV4dGVuZHMgRWxlbWVudCB7XG4gIGNvbnN0cnVjdG9yKGNvbnRleHQsIHN0cmluZywgbm9kZSwgZGVyaXZhdGlvbikge1xuICAgIHN1cGVyKGNvbnRleHQsIHN0cmluZywgbm9kZSk7XG5cbiAgICB0aGlzLmRlcml2YXRpb24gPSBkZXJpdmF0aW9uO1xuICB9XG5cbiAgZ2V0RGVyaXZhdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5kZXJpdmF0aW9uO1xuICB9XG5cbiAgZ2V0TGFzdFByb29mQXNzZXJ0aW9uKCkgeyByZXR1cm4gdGhpcy5kZXJpdmF0aW9uLmdldExhc3RQcm9vZkFzc2VydGlvbigpOyB9XG5cbiAgZ2V0U3RhdGVtZW50KCkge1xuICAgIGNvbnN0IGxhc3RQcm9vZkFzc2VydGlvbiA9IHRoaXMuZ2V0TGFzdFByb29mQXNzZXJ0aW9uKCksXG4gICAgICAgICAgbGFzdFByb29mQXNzZXJ0aW9uU3RhdGVtZW50ID0gbGFzdFByb29mQXNzZXJ0aW9uLmdldFN0YXRlbWVudCgpLFxuICAgICAgICAgIHN0YXRlbWVudCA9IGxhc3RQcm9vZkFzc2VydGlvblN0YXRlbWVudDsgLy8vXG5cbiAgICByZXR1cm4gc3RhdGVtZW50O1xuICB9XG5cbiAgYXN5bmMgdmVyaWZ5KHN0YXRlbWVudCwgY29udGV4dCkge1xuICAgIGxldCB2ZXJpZmllcyA9IGZhbHNlO1xuXG4gICAgYXdhaXQgYXN5bmNTY29wZShhc3luYyAoY29udGV4dCkgPT4ge1xuICAgICAgY29uc3QgZGVyaXZhdGlvblZlcmlmaWVzID0gYXdhaXQgdGhpcy5kZXJpdmF0aW9uLnZlcmlmeShjb250ZXh0KTtcblxuICAgICAgaWYgKGRlcml2YXRpb25WZXJpZmllcykge1xuICAgICAgICBjb25zdCBsYXN0UHJvb2ZBc3NlcnRpb24gPSBjb250ZXh0LmdldExhc3RQcm9vZkFzc2VydGlvbigpO1xuXG4gICAgICAgIGlmIChsYXN0UHJvb2ZBc3NlcnRpb24gIT09IG51bGwpIHtcbiAgICAgICAgICBjb25zdCBwcm9vZiA9IHRoaXMsIC8vL1xuICAgICAgICAgICAgICAgIHByb29mU3RhdGVtZW50ID0gcHJvb2YuZ2V0U3RhdGVtZW50KCksXG4gICAgICAgICAgICAgICAgcHJvb2ZTdGF0ZW1lbnRFcXVhbFRvU3RhdGVtZW50ID0gcHJvb2ZTdGF0ZW1lbnQuaXNFcXVhbFRvKHN0YXRlbWVudCk7XG5cbiAgICAgICAgICBpZiAocHJvb2ZTdGF0ZW1lbnRFcXVhbFRvU3RhdGVtZW50KSB7XG4gICAgICAgICAgICB2ZXJpZmllcyA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gdmVyaWZpZXM7XG4gIH1cblxuICBzdGF0aWMgbmFtZSA9IFwiUHJvb2ZcIjtcbn0pO1xuIl0sIm5hbWVzIjpbImRlZmluZSIsIlByb29mIiwiY29udGV4dCIsInN0cmluZyIsIm5vZGUiLCJkZXJpdmF0aW9uIiwiZ2V0RGVyaXZhdGlvbiIsImdldExhc3RQcm9vZkFzc2VydGlvbiIsImdldFN0YXRlbWVudCIsImxhc3RQcm9vZkFzc2VydGlvbiIsImxhc3RQcm9vZkFzc2VydGlvblN0YXRlbWVudCIsInN0YXRlbWVudCIsInZlcmlmeSIsInZlcmlmaWVzIiwiYXN5bmNTY29wZSIsImRlcml2YXRpb25WZXJpZmllcyIsInByb29mIiwicHJvb2ZTdGF0ZW1lbnQiLCJwcm9vZlN0YXRlbWVudEVxdWFsVG9TdGF0ZW1lbnQiLCJpc0VxdWFsVG8iLCJFbGVtZW50IiwibmFtZSJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7K0JBT0E7OztlQUFBOzs7OEJBTHdCO3dCQUVEO3VCQUNJOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztJQUUzQixXQUFlQSxJQUFBQSxnQkFBTSwwQkFBQzs7YUFBTUMsTUFDZEMsT0FBTyxFQUFFQyxNQUFNLEVBQUVDLElBQUksRUFBRUMsVUFBVTtnQ0FEbkJKOztnQkFFeEIsa0JBRndCQTtZQUVsQkM7WUFBU0M7WUFBUUM7O1FBRXZCLE1BQUtDLFVBQVUsR0FBR0E7Ozs7O1lBR3BCQyxLQUFBQTttQkFBQUEsU0FBQUE7Z0JBQ0UsT0FBTyxJQUFJLENBQUNELFVBQVU7WUFDeEI7OztZQUVBRSxLQUFBQTttQkFBQUEsU0FBQUE7Z0JBQTBCLE9BQU8sSUFBSSxDQUFDRixVQUFVLENBQUNFLHFCQUFxQjtZQUFJOzs7WUFFMUVDLEtBQUFBO21CQUFBQSxTQUFBQTtnQkFDRSxJQUFNQyxxQkFBcUIsSUFBSSxDQUFDRixxQkFBcUIsSUFDL0NHLDhCQUE4QkQsbUJBQW1CRCxZQUFZLElBQzdERyxZQUFZRCw2QkFBNkIsR0FBRztnQkFFbEQsT0FBT0M7WUFDVDs7O1lBRU1DLEtBQUFBO21CQUFOLFNBQU1BLE9BQU9ELFNBQVMsRUFBRVQsT0FBTzs7K0JBQ3pCVzs7Ozs7Z0NBQUFBLFdBQVc7Z0NBRWY7O29DQUFNQyxJQUFBQSxtQkFBVSxFQUFDLFNBQU9aOztnREFDaEJhLG9CQUdFTixvQkFHRU8sT0FDQUMsZ0JBQ0FDOzs7O3dEQVJpQjs7NERBQU0sSUFBSSxDQUFDYixVQUFVLENBQUNPLE1BQU0sQ0FBQ1Y7Ozt3REFBbERhLHFCQUFxQjt3REFFM0IsSUFBSUEsb0JBQW9COzREQUNoQk4scUJBQXFCUCxRQUFRSyxxQkFBcUI7NERBRXhELElBQUlFLHVCQUF1QixNQUFNO2dFQUN6Qk8sUUFBUSxJQUFJLEVBQ1pDLGlCQUFpQkQsTUFBTVIsWUFBWSxJQUNuQ1UsaUNBQWlDRCxlQUFlRSxTQUFTLENBQUNSO2dFQUVoRSxJQUFJTyxnQ0FBZ0M7b0VBQ2xDTCxXQUFXO2dFQUNiOzREQUNGO3dEQUNGOzs7Ozs7d0NBQ0Y7dUNBQUdYOzs7Z0NBaEJIO2dDQWtCQTs7b0NBQU9XOzs7O2dCQUNUOzs7OztxQkEzQ3dDTyx1QkFBTyxJQTZDL0MseUJBQU9DLFFBQU8ifQ==
@@ -9,7 +9,6 @@ Object.defineProperty(exports, "default", {
9
9
  }
10
10
  });
11
11
  var _proofAssertion = /*#__PURE__*/ _interop_require_default(require("../proofAssertion"));
12
- var _assign = /*#__PURE__*/ _interop_require_default(require("../../process/assign"));
13
12
  var _elements = require("../../elements");
14
13
  var _context = require("../../utilities/context");
15
14
  var _json = require("../../utilities/json");
@@ -254,104 +253,44 @@ var _default = (0, _elements.define)((_Premise = /*#__PURE__*/ function(ProofAss
254
253
  }
255
254
  },
256
255
  {
257
- key: "verify",
258
- value: function verify(context) {
259
- return _async_to_generator(function() {
260
- var _this, verifies, premiseString, statement, procedureCall;
261
- return _ts_generator(this, function(_state) {
262
- switch(_state.label){
263
- case 0:
264
- _this = this;
265
- verifies = false;
266
- return [
267
- 4,
268
- this.break(context)
269
- ];
270
- case 1:
271
- _state.sent();
272
- premiseString = this.getString(); ///
273
- context.trace("Verifying the '".concat(premiseString, "' premise..."));
274
- statement = this.getStatement(), procedureCall = this.getProcedureCall();
275
- if (statement !== null || procedureCall !== null) {
276
- (0, _context.attempt)(function(context) {
277
- if (statement !== null) {
278
- var assignments = [], statementValidates = _this.validateStatement(assignments, context);
279
- if (statementValidates) {
280
- var assignmentsAssigned = (0, _assign.default)(assignments, context);
281
- if (assignmentsAssigned) {
282
- var subproofOrProofAssertion = _this; ///
283
- context.addSubproofOrProofAssertion(subproofOrProofAssertion);
284
- _this.setContext(context);
285
- verifies = true;
286
- }
287
- }
288
- }
289
- if (procedureCall !== null) {
290
- var procedureCallValidates = procedureCall.validate(context);
291
- if (procedureCallValidates) {
292
- _this.setContext(context);
293
- verifies = true;
294
- }
295
- }
296
- }, context);
297
- } else {
298
- context.debug("Unable to verify the '".concat(premiseString, "' premise because it is nonsense."));
299
- }
300
- if (verifies) {
301
- context.debug("...verified the '".concat(premiseString, "' premise."));
302
- }
303
- return [
304
- 2,
305
- verifies
306
- ];
307
- }
308
- });
309
- }).call(this);
256
+ key: "validate",
257
+ value: function validate(assignments, context) {
258
+ var validates = false;
259
+ var premiseString = this.getString(); ///
260
+ context.trace("Validatting the '".concat(premiseString, "' premise..."));
261
+ var statement = this.getStatement(), procedureCall = this.getProcedureCall();
262
+ if (false) {
263
+ ///
264
+ } else if (statement !== null) {
265
+ var statementValidates = this.validateStatement(assignments, context);
266
+ if (statementValidates) {
267
+ validates = true;
268
+ }
269
+ } else if (procedureCall !== null) {
270
+ var procedureCallValidates = this.validateProcedureCall(assignments, context);
271
+ if (procedureCallValidates) {
272
+ validates = true;
273
+ }
274
+ } else {
275
+ context.debug("Unable to validate the '".concat(premiseString, "' premise because it is nonsense."));
276
+ }
277
+ if (validates) {
278
+ context.debug("...validated the '".concat(premiseString, "' premise."));
279
+ }
280
+ return validates;
310
281
  }
311
282
  },
312
283
  {
313
- key: "unifyIndependently",
314
- value: function unifyIndependently(context) {
315
- return _async_to_generator(function() {
316
- var unifiesIndependently, premiseString, statement, statementUnifiesIndependently, procedureCallResolvedIndependently;
317
- return _ts_generator(this, function(_state) {
318
- switch(_state.label){
319
- case 0:
320
- unifiesIndependently = false;
321
- premiseString = this.getString(); ///
322
- context.trace("Unifying the '".concat(premiseString, "' premise independently..."));
323
- statement = this.getStatement();
324
- if (statement !== null) {
325
- statementUnifiesIndependently = statement.unifyIndependently(context);
326
- if (statementUnifiesIndependently) {
327
- unifiesIndependently = true;
328
- }
329
- }
330
- if (!(this.procedureCall !== null)) return [
331
- 3,
332
- 2
333
- ];
334
- return [
335
- 4,
336
- this.procedureCall.unifyIndependently(context)
337
- ];
338
- case 1:
339
- procedureCallResolvedIndependently = _state.sent();
340
- if (procedureCallResolvedIndependently) {
341
- unifiesIndependently = true;
342
- }
343
- _state.label = 2;
344
- case 2:
345
- if (unifiesIndependently) {
346
- context.debug("...unified the '".concat(premiseString, "' premise independenly."));
347
- }
348
- return [
349
- 2,
350
- unifiesIndependently
351
- ];
352
- }
353
- });
354
- }).call(this);
284
+ key: "validateProcedureCall",
285
+ value: function validateProcedureCall(assignments, context) {
286
+ var procedureCallValidates = false;
287
+ var premiseString = this.getString(), procedureCallString = this.procedureCall.getString();
288
+ context.trace("Validatting the '".concat(premiseString, "' premise's '").concat(procedureCallString, "' procedure call..."));
289
+ procedureCallValidates = this.procedureCall.validate(context);
290
+ if (procedureCallValidates) {
291
+ context.debug("...validated the '".concat(premiseString, "' premise's '").concat(procedureCallString, "' procedure call."));
292
+ }
293
+ return procedureCallValidates;
355
294
  }
356
295
  },
357
296
  {
@@ -427,6 +366,92 @@ var _default = (0, _elements.define)((_Premise = /*#__PURE__*/ function(ProofAss
427
366
  return subproofUnifies;
428
367
  }
429
368
  },
369
+ {
370
+ key: "verify",
371
+ value: function verify(assignments, context) {
372
+ return _async_to_generator(function() {
373
+ var _this, verifies, premiseString;
374
+ return _ts_generator(this, function(_state) {
375
+ switch(_state.label){
376
+ case 0:
377
+ _this = this;
378
+ verifies = false;
379
+ return [
380
+ 4,
381
+ this.break(context)
382
+ ];
383
+ case 1:
384
+ _state.sent();
385
+ premiseString = this.getString();
386
+ context.trace("Verifying the '".concat(premiseString, "' premise..."));
387
+ (0, _context.attempt)(function(context) {
388
+ var validates = _this.validate(assignments, context);
389
+ if (validates) {
390
+ _this.setContext(context);
391
+ verifies = true;
392
+ }
393
+ }, context);
394
+ if (verifies) {
395
+ context.debug("...verified the '".concat(premiseString, "' premise."));
396
+ }
397
+ return [
398
+ 2,
399
+ verifies
400
+ ];
401
+ }
402
+ });
403
+ }).call(this);
404
+ }
405
+ },
406
+ {
407
+ key: "unifyIndependently",
408
+ value: function unifyIndependently(context) {
409
+ return _async_to_generator(function() {
410
+ var unifiesIndependently, premiseString, statement, procedureCall, specificContext, generalContext, statementUnifiesIndependently, procedureCallResolvedIndependently;
411
+ return _ts_generator(this, function(_state) {
412
+ switch(_state.label){
413
+ case 0:
414
+ unifiesIndependently = false;
415
+ premiseString = this.getString(); ///
416
+ context.trace("Unifying the '".concat(premiseString, "' premise independently..."));
417
+ statement = this.getStatement(), procedureCall = this.getProcedureCall();
418
+ if (statement !== null) {
419
+ specificContext = context; ///
420
+ context = this.getContext();
421
+ generalContext = context; ///
422
+ context = specificContext; ///
423
+ statementUnifiesIndependently = statement.unifyIndependently(generalContext, specificContext);
424
+ if (statementUnifiesIndependently) {
425
+ unifiesIndependently = true;
426
+ }
427
+ }
428
+ if (!(procedureCall !== null)) return [
429
+ 3,
430
+ 2
431
+ ];
432
+ return [
433
+ 4,
434
+ procedureCall.unifyIndependently(context)
435
+ ];
436
+ case 1:
437
+ procedureCallResolvedIndependently = _state.sent();
438
+ if (procedureCallResolvedIndependently) {
439
+ unifiesIndependently = true;
440
+ }
441
+ _state.label = 2;
442
+ case 2:
443
+ if (unifiesIndependently) {
444
+ context.debug("...unified the '".concat(premiseString, "' premise independenly."));
445
+ }
446
+ return [
447
+ 2,
448
+ unifiesIndependently
449
+ ];
450
+ }
451
+ });
452
+ }).call(this);
453
+ }
454
+ },
430
455
  {
431
456
  key: "toJSON",
432
457
  value: function toJSON() {
@@ -458,4 +483,4 @@ var _default = (0, _elements.define)((_Premise = /*#__PURE__*/ function(ProofAss
458
483
  return Premise;
459
484
  }(_proofAssertion.default), _define_property(_Premise, "name", "Premise"), _Premise));
460
485
 
461
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9lbGVtZW50L3Byb29mQXNzZXJ0aW9uL3ByZW1pc2UuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBQcm9vZkFzc2VydGlvbiBmcm9tIFwiLi4vcHJvb2ZBc3NlcnRpb25cIjtcbmltcG9ydCBhc3NpZ25Bc3NpZ25tZW50cyBmcm9tIFwiLi4vLi4vcHJvY2Vzcy9hc3NpZ25cIjtcblxuaW1wb3J0IHsgZGVmaW5lIH0gZnJvbSBcIi4uLy4uL2VsZW1lbnRzXCI7XG5pbXBvcnQgeyBhdHRlbXB0LCBsaW1pbmFsbHkgfSBmcm9tIFwiLi4vLi4vdXRpbGl0aWVzL2NvbnRleHRcIjtcbmltcG9ydCB7IHN0YXRlbWVudEZyb21KU09OLCBwcm9jZWR1cmVDYWxsRnJvbUpTT04sIHN0YXRlbWVudFRvU3RhdGVtZW50SlNPTiwgcHJvY2VkdXJlQ2FsbFRvUHJvY2VkdXJlQ2FsbEpTT04gfSBmcm9tIFwiLi4vLi4vdXRpbGl0aWVzL2pzb25cIjtcblxuZXhwb3J0IGRlZmF1bHQgZGVmaW5lKGNsYXNzIFByZW1pc2UgZXh0ZW5kcyBQcm9vZkFzc2VydGlvbiB7XG4gIGNvbnN0cnVjdG9yKGNvbnRleHQsIHN0cmluZywgbm9kZSwgc3RhdGVtZW50LCBwcm9jZWR1cmVDYWxsKSB7XG4gICAgc3VwZXIoY29udGV4dCwgc3RyaW5nLCBub2RlLCBzdGF0ZW1lbnQpO1xuXG4gICAgdGhpcy5wcm9jZWR1cmVDYWxsID0gcHJvY2VkdXJlQ2FsbDtcbiAgfVxuXG4gIGdldFByb2NlZHVyZUNhbGwoKSB7XG4gICAgcmV0dXJuIHRoaXMucHJvY2VkdXJlQ2FsbDtcbiAgfVxuXG4gIGlzU3RhdGVkKCkge1xuICAgIGNvbnN0IHN0YXRlZCA9IHRydWU7IC8vL1xuXG4gICAgcmV0dXJuIHN0YXRlZDtcbiAgfVxuXG4gIGFzeW5jIHZlcmlmeShjb250ZXh0KSB7XG4gICAgbGV0IHZlcmlmaWVzID0gZmFsc2U7XG5cbiAgICBhd2FpdCB0aGlzLmJyZWFrKGNvbnRleHQpO1xuXG4gICAgY29uc3QgcHJlbWlzZVN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7IC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVmVyaWZ5aW5nIHRoZSAnJHtwcmVtaXNlU3RyaW5nfScgcHJlbWlzZS4uLmApO1xuXG4gICAgY29uc3Qgc3RhdGVtZW50ID0gdGhpcy5nZXRTdGF0ZW1lbnQoKSxcbiAgICAgICAgICBwcm9jZWR1cmVDYWxsID0gdGhpcy5nZXRQcm9jZWR1cmVDYWxsKCk7XG5cbiAgICBpZiAoKHN0YXRlbWVudCAhPT0gbnVsbCkgfHwgKHByb2NlZHVyZUNhbGwgIT09IG51bGwpKSB7XG4gICAgICBhdHRlbXB0KChjb250ZXh0KSA9PiB7XG4gICAgICAgIGlmIChzdGF0ZW1lbnQgIT09IG51bGwpIHtcbiAgICAgICAgICBjb25zdCBhc3NpZ25tZW50cyA9IFtdLFxuICAgICAgICAgICAgICAgIHN0YXRlbWVudFZhbGlkYXRlcyA9IHRoaXMudmFsaWRhdGVTdGF0ZW1lbnQoYXNzaWdubWVudHMsIGNvbnRleHQpO1xuXG4gICAgICAgICAgaWYgKHN0YXRlbWVudFZhbGlkYXRlcykge1xuICAgICAgICAgICAgY29uc3QgYXNzaWdubWVudHNBc3NpZ25lZCA9IGFzc2lnbkFzc2lnbm1lbnRzKGFzc2lnbm1lbnRzLCBjb250ZXh0KTtcblxuICAgICAgICAgICAgaWYgKGFzc2lnbm1lbnRzQXNzaWduZWQpIHtcbiAgICAgICAgICAgICAgY29uc3Qgc3VicHJvb2ZPclByb29mQXNzZXJ0aW9uID0gdGhpczsgIC8vL1xuXG4gICAgICAgICAgICAgIGNvbnRleHQuYWRkU3VicHJvb2ZPclByb29mQXNzZXJ0aW9uKHN1YnByb29mT3JQcm9vZkFzc2VydGlvbik7XG5cbiAgICAgICAgICAgICAgdGhpcy5zZXRDb250ZXh0KGNvbnRleHQpO1xuXG4gICAgICAgICAgICAgIHZlcmlmaWVzID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocHJvY2VkdXJlQ2FsbCAhPT0gbnVsbCkge1xuICAgICAgICAgIGNvbnN0IHByb2NlZHVyZUNhbGxWYWxpZGF0ZXMgPSBwcm9jZWR1cmVDYWxsLnZhbGlkYXRlKGNvbnRleHQpO1xuXG4gICAgICAgICAgaWYgKHByb2NlZHVyZUNhbGxWYWxpZGF0ZXMpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0Q29udGV4dChjb250ZXh0KTtcblxuICAgICAgICAgICAgdmVyaWZpZXMgPSB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSwgY29udGV4dCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYFVuYWJsZSB0byB2ZXJpZnkgdGhlICcke3ByZW1pc2VTdHJpbmd9JyBwcmVtaXNlIGJlY2F1c2UgaXQgaXMgbm9uc2Vuc2UuYCk7XG4gICAgfVxuXG4gICAgaWYgKHZlcmlmaWVzKSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52ZXJpZmllZCB0aGUgJyR7cHJlbWlzZVN0cmluZ30nIHByZW1pc2UuYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZlcmlmaWVzO1xuICB9XG5cbiAgYXN5bmMgdW5pZnlJbmRlcGVuZGVudGx5KGNvbnRleHQpIHtcbiAgICBsZXQgdW5pZmllc0luZGVwZW5kZW50bHkgPSBmYWxzZTtcblxuICAgIGNvbnN0IHByZW1pc2VTdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFVuaWZ5aW5nIHRoZSAnJHtwcmVtaXNlU3RyaW5nfScgcHJlbWlzZSBpbmRlcGVuZGVudGx5Li4uYCk7XG5cbiAgICBjb25zdCBzdGF0ZW1lbnQgPSB0aGlzLmdldFN0YXRlbWVudCgpO1xuXG4gICAgaWYgKHN0YXRlbWVudCAhPT0gbnVsbCkge1xuICAgICAgY29uc3Qgc3RhdGVtZW50VW5pZmllc0luZGVwZW5kZW50bHkgPSBzdGF0ZW1lbnQudW5pZnlJbmRlcGVuZGVudGx5KGNvbnRleHQpO1xuXG4gICAgICBpZiAoc3RhdGVtZW50VW5pZmllc0luZGVwZW5kZW50bHkpIHtcbiAgICAgICAgdW5pZmllc0luZGVwZW5kZW50bHkgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLnByb2NlZHVyZUNhbGwgIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IHByb2NlZHVyZUNhbGxSZXNvbHZlZEluZGVwZW5kZW50bHkgPSBhd2FpdCB0aGlzLnByb2NlZHVyZUNhbGwudW5pZnlJbmRlcGVuZGVudGx5KGNvbnRleHQpO1xuXG4gICAgICBpZiAocHJvY2VkdXJlQ2FsbFJlc29sdmVkSW5kZXBlbmRlbnRseSkge1xuICAgICAgICB1bmlmaWVzSW5kZXBlbmRlbnRseSA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHVuaWZpZXNJbmRlcGVuZGVudGx5KSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi51bmlmaWVkIHRoZSAnJHtwcmVtaXNlU3RyaW5nfScgcHJlbWlzZSBpbmRlcGVuZGVubHkuYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHVuaWZpZXNJbmRlcGVuZGVudGx5O1xuICB9XG5cbiAgdW5pZnlTdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb24oc3VicHJvb2ZPclByb29mQXNzZXJ0aW9uLCBjb250ZXh0KSB7XG4gICAgbGV0IHN1YnByb29mT3JQcm9vZkFzc2VydGlvblVuaWZpZXM7XG5cbiAgICBjb25zdCBwcmVtaXNlU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKSwgLy8vXG4gICAgICAgICAgc3VicHJvb2ZPclByb29mQXNzZXJ0aW9uU3RyaW5nID0gc3VicHJvb2ZPclByb29mQXNzZXJ0aW9uLmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgVW5pZnlpbmcgdGhlICcke3N1YnByb29mT3JQcm9vZkFzc2VydGlvblN0cmluZ30nIHN1YnByb29mIG9yIHByb29mIGFzc2VydGlvbiB3aXRoIHRoZSAnJHtwcmVtaXNlU3RyaW5nfScgcHJlbWlzZS4uLmApO1xuXG4gICAgY29uc3Qgc3VicHJvb2ZPclByb29mQXNzZXJ0aW9uUHJvb2ZBc3NlcnRpb24gPSBzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb24uaXNQcm9vZkFzc2VydGlvbigpLFxuICAgICAgICAgIHByb29mQXNzZXJ0aW9uID0gc3VicHJvb2ZPclByb29mQXNzZXJ0aW9uUHJvb2ZBc3NlcnRpb24gP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb24gOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bGwsXG4gICAgICAgICAgc3VicHJvb2YgPSBzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25Qcm9vZkFzc2VydGlvbiA/XG4gICAgICAgICAgICAgICAgICAgICAgICBudWxsIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgc3VicHJvb2ZPclByb29mQXNzZXJ0aW9uO1xuXG4gICAgaWYgKHByb29mQXNzZXJ0aW9uICE9PSBudWxsKSB7XG4gICAgICBjb25zdCBwcm9vZkFzc2VydGlvblVuaWZpZXMgPSB0aGlzLnVuaWZ5UHJvb2ZBc3NlcnRpb24ocHJvb2ZBc3NlcnRpb24sIGNvbnRleHQpO1xuXG4gICAgICBpZiAocHJvb2ZBc3NlcnRpb25VbmlmaWVzKSB7XG4gICAgICAgIHN1YnByb29mT3JQcm9vZkFzc2VydGlvblVuaWZpZXMgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChzdWJwcm9vZiAhPT0gbnVsbCkge1xuICAgICAgY29uc3Qgc3VicHJvb2ZVbmlmaWVzID0gdGhpcy51bmlmeVN1YnByb29mKHN1YnByb29mLCBjb250ZXh0KTtcblxuICAgICAgaWYgKHN1YnByb29mVW5pZmllcykge1xuICAgICAgICBzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25VbmlmaWVzID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoc3VicHJvb2ZPclByb29mQXNzZXJ0aW9uVW5pZmllcykge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udW5pZmllZCB0aGUgJyR7c3VicHJvb2ZPclByb29mQXNzZXJ0aW9uU3RyaW5nfScgc3VicHJvb2Ygb3IgcHJvb2YgYXNzZXJ0aW9uIHdpdGggdGhlICcke3ByZW1pc2VTdHJpbmd9JyBwcmVtaXNlLmApO1xuICAgIH1cblxuICAgIHJldHVybiBzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25VbmlmaWVzO1xuICB9XG5cbiAgdW5pZnlQcm9vZkFzc2VydGlvbihwcm9vZkFzc2VydGlvbiwgY29udGV4dCkge1xuICAgIGxldCBwcm9vZkFzc2VydGlvblVuaWZpZXM7XG5cbiAgICBjb25zdCBwcmVtaXNlU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKSwgLy8vXG4gICAgICAgICAgcHJvb2ZBc3NlcnRpb25TdHJpbmcgPSBwcm9vZkFzc2VydGlvbi5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYFVuaWZ5aW5nIHRoZSAnJHtwcm9vZkFzc2VydGlvblN0cmluZ30nIHByb29mIGFzc2VydGlvbiB3aXRoIHRoZSAnJHtwcmVtaXNlU3RyaW5nfScgcHJlbWlzZS4uLmApO1xuXG4gICAgY29uc3QgcHJvb2ZBc3NlcnRpb25Db250ZXh0ID0gcHJvb2ZBc3NlcnRpb24uZ2V0Q29udGV4dCgpLFxuICAgICAgICAgIHByZW1pc2VDb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCksXG4gICAgICAgICAgZ2VuZXJhbENvbnRleHQgPSBwcmVtaXNlQ29udGV4dCwgLy8vXG4gICAgICAgICAgc3BlY2lmaWNDb250ZXh0ID0gcHJvb2ZBc3NlcnRpb25Db250ZXh0OyAvLy9cblxuICAgIHByb29mQXNzZXJ0aW9uVW5pZmllcyA9IGxpbWluYWxseSgoc3BlY2lmaWNDb250ZXh0KSA9PiB7XG4gICAgICBjb25zdCBzdGF0ZW1lbnQgPSBwcm9vZkFzc2VydGlvbi5nZXRTdGF0ZW1lbnQoKSxcbiAgICAgICAgICAgIHN0YXRlbWVudFVuaWZpZXMgPSB0aGlzLnVuaWZ5U3RhdGVtZW50KHN0YXRlbWVudCwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCk7XG5cbiAgICAgIGlmIChzdGF0ZW1lbnRVbmlmaWVzKSB7XG4gICAgICAgIHNwZWNpZmljQ29udGV4dC5jb21taXQoY29udGV4dCk7XG5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSwgc3BlY2lmaWNDb250ZXh0KTtcblxuICAgIGlmIChwcm9vZkFzc2VydGlvblVuaWZpZXMpIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnVuaWZpZWQgdGhlICcke3Byb29mQXNzZXJ0aW9uU3RyaW5nfScgcHJvb2YgYXNzZXJ0aW9uIHdpdGggdGhlICcke3ByZW1pc2VTdHJpbmd9JyBwcmVtaXNlLmApO1xuICAgIH1cblxuICAgIHJldHVybiBwcm9vZkFzc2VydGlvblVuaWZpZXM7XG4gIH1cblxuICB1bmlmeVN1YnByb29mKHN1YnByb29mLCBjb250ZXh0KSB7XG4gICAgbGV0IHN1YnByb29mVW5pZmllcyA9IGZhbHNlO1xuXG4gICAgY29uc3QgcHJlbWlzZVN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCksXG4gICAgICAgICAgc3VicHJvb2ZTdHJpbmcgPSBzdWJwcm9vZi5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYFVuaWZ5aW5nIHRoZSAnJHtzdWJwcm9vZlN0cmluZ30nIHN1YnByb29mIHdpdGggdGhlICcke3ByZW1pc2VTdHJpbmd9JyBwcmVtaXNlLi4uYCk7XG5cbiAgICBjb25zdCBzcGVjaWZpY0NvbnRleHQgPSBjb250ZXh0OyAgLy8vXG5cbiAgICBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCk7XG5cbiAgICBjb25zdCBnZW5lcmFsQ29udGV4dCA9IGNvbnRleHQ7IC8vL1xuXG4gICAgY29udGV4dCA9IHNwZWNpZmljQ29udGV4dDsgIC8vL1xuXG4gICAgY29uc3Qgc3RhdGVtZW50ID0gdGhpcy5nZXRTdGF0ZW1lbnQoKTtcblxuICAgIGlmIChzdGF0ZW1lbnQgIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IHN0YXRlbWVudE5vZGUgPSBzdGF0ZW1lbnQuZ2V0Tm9kZSgpLFxuICAgICAgICAgICAgc3VicHJvb2ZBc3NlcnRpb25Ob2RlID0gc3RhdGVtZW50Tm9kZS5nZXRTdWJwcm9vZkFzc2VydGlvbk5vZGUoKTtcblxuICAgICAgaWYgKHN1YnByb29mQXNzZXJ0aW9uTm9kZSAhPT0gbnVsbCkge1xuICAgICAgICBjb25zdCBjb250ZXh0ID0gZ2VuZXJhbENvbnRleHQsIC8vL1xuICAgICAgICAgICAgICBhc3NlcnRpb25Ob2RlID0gc3VicHJvb2ZBc3NlcnRpb25Ob2RlLCAgLy8vXG4gICAgICAgICAgICAgIGFzc2VydGlvbiA9IGNvbnRleHQuZmluZEFzc2VydGlvbkJ5QXNzZXJ0aW9uTm9kZShhc3NlcnRpb25Ob2RlKVxuXG4gICAgICAgIGlmIChhc3NlcnRpb24gIT09IG51bGwpIHtcbiAgICAgICAgICBjb25zdCBzdWJwcm9vZkFzc2VydGlvbiA9IGFzc2VydGlvbjsgIC8vL1xuXG4gICAgICAgICAgc3VicHJvb2ZVbmlmaWVzID0gc3VicHJvb2ZBc3NlcnRpb24udW5pZnlTdWJwcm9vZihzdWJwcm9vZiwgc3Vic3RpdHV0aW9ucywgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoc3VicHJvb2ZVbmlmaWVzKSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi51bmlmaWVkIHRoZSAnJHtzdWJwcm9vZlN0cmluZ30nIHN1YnByb29mIHdpdGggdGhlICcke3ByZW1pc2VTdHJpbmd9JyBwcmVtaXNlLmApO1xuICAgIH1cblxuICAgIHJldHVybiBzdWJwcm9vZlVuaWZpZXM7XG4gIH1cblxuICB0b0pTT04oKSB7XG4gICAgY29uc3QgcHJvY2VkdXJlQ2FsbEpTT04gPSBwcm9jZWR1cmVDYWxsVG9Qcm9jZWR1cmVDYWxsSlNPTih0aGlzLnByb2NlZHVyZUNhbGwpLFxuICAgICAgICAgIHN0YXRlbWVudEpTT04gPSBzdGF0ZW1lbnRUb1N0YXRlbWVudEpTT04odGhpcy5zdGF0ZW1lbnQpLFxuICAgICAgICAgIHByb2NlZHVyZUNhbGwgPSBwcm9jZWR1cmVDYWxsSlNPTiwgIC8vL1xuICAgICAgICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudEpTT04sICAvLy9cbiAgICAgICAgICBqc29uID0ge1xuICAgICAgICAgICAgc3RhdGVtZW50LFxuICAgICAgICAgICAgcHJvY2VkdXJlQ2FsbFxuICAgICAgICAgIH07XG5cbiAgICByZXR1cm4ganNvbjtcbiAgfVxuXG4gIHN0YXRpYyBuYW1lID0gXCJQcmVtaXNlXCI7XG5cbiAgc3RhdGljIGZyb21KU09OKGpzb24sIGNvbnRleHQpIHtcbiAgICBjb25zdCBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tSlNPTihqc29uLCBjb250ZXh0KSxcbiAgICAgICAgICBwcm9jZWR1cmVDYWxsID0gcHJvY2VkdXJlQ2FsbEZyb21KU09OKGpzb24sIGNvbnRleHQpO1xuXG4gICAgbGV0IHN0cmluZztcblxuICAgIGlmIChzdGF0ZW1lbnQgIT09IG51bGwpIHtcbiAgICAgIHN0cmluZyA9IHN0YXRlbWVudC5nZXRTdHJpbmcoKTtcbiAgICB9XG5cbiAgICBpZiAocHJvY2VkdXJlQ2FsbCAhPT0gbnVsbCkge1xuICAgICAgc3RyaW5nID0gcHJvY2VkdXJlQ2FsbC5nZXRTdHJpbmcoKTtcbiAgICB9XG5cbiAgICBjb25zdCBub2RlID0gbnVsbDtcblxuICAgIGNvbnN0IHByZW1pc2UgPSBuZXcgUHJlbWlzZShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIHN0YXRlbWVudCwgcHJvY2VkdXJlQ2FsbCk7XG5cbiAgICByZXR1cm4gcHJlbWlzZTtcbiAgfVxufSk7XG4iXSwibmFtZXMiOlsiZGVmaW5lIiwiUHJlbWlzZSIsImNvbnRleHQiLCJzdHJpbmciLCJub2RlIiwic3RhdGVtZW50IiwicHJvY2VkdXJlQ2FsbCIsImdldFByb2NlZHVyZUNhbGwiLCJpc1N0YXRlZCIsInN0YXRlZCIsInZlcmlmeSIsInZlcmlmaWVzIiwicHJlbWlzZVN0cmluZyIsImJyZWFrIiwiZ2V0U3RyaW5nIiwidHJhY2UiLCJnZXRTdGF0ZW1lbnQiLCJhdHRlbXB0IiwiYXNzaWdubWVudHMiLCJzdGF0ZW1lbnRWYWxpZGF0ZXMiLCJ2YWxpZGF0ZVN0YXRlbWVudCIsImFzc2lnbm1lbnRzQXNzaWduZWQiLCJhc3NpZ25Bc3NpZ25tZW50cyIsInN1YnByb29mT3JQcm9vZkFzc2VydGlvbiIsImFkZFN1YnByb29mT3JQcm9vZkFzc2VydGlvbiIsInNldENvbnRleHQiLCJwcm9jZWR1cmVDYWxsVmFsaWRhdGVzIiwidmFsaWRhdGUiLCJkZWJ1ZyIsInVuaWZ5SW5kZXBlbmRlbnRseSIsInVuaWZpZXNJbmRlcGVuZGVudGx5Iiwic3RhdGVtZW50VW5pZmllc0luZGVwZW5kZW50bHkiLCJwcm9jZWR1cmVDYWxsUmVzb2x2ZWRJbmRlcGVuZGVudGx5IiwidW5pZnlTdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb24iLCJzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25VbmlmaWVzIiwic3VicHJvb2ZPclByb29mQXNzZXJ0aW9uU3RyaW5nIiwic3VicHJvb2ZPclByb29mQXNzZXJ0aW9uUHJvb2ZBc3NlcnRpb24iLCJpc1Byb29mQXNzZXJ0aW9uIiwicHJvb2ZBc3NlcnRpb24iLCJzdWJwcm9vZiIsInByb29mQXNzZXJ0aW9uVW5pZmllcyIsInVuaWZ5UHJvb2ZBc3NlcnRpb24iLCJzdWJwcm9vZlVuaWZpZXMiLCJ1bmlmeVN1YnByb29mIiwicHJvb2ZBc3NlcnRpb25TdHJpbmciLCJwcm9vZkFzc2VydGlvbkNvbnRleHQiLCJnZXRDb250ZXh0IiwicHJlbWlzZUNvbnRleHQiLCJnZW5lcmFsQ29udGV4dCIsInNwZWNpZmljQ29udGV4dCIsImxpbWluYWxseSIsInN0YXRlbWVudFVuaWZpZXMiLCJ1bmlmeVN0YXRlbWVudCIsImNvbW1pdCIsInN1YnByb29mU3RyaW5nIiwic3RhdGVtZW50Tm9kZSIsImdldE5vZGUiLCJzdWJwcm9vZkFzc2VydGlvbk5vZGUiLCJnZXRTdWJwcm9vZkFzc2VydGlvbk5vZGUiLCJhc3NlcnRpb25Ob2RlIiwiYXNzZXJ0aW9uIiwiZmluZEFzc2VydGlvbkJ5QXNzZXJ0aW9uTm9kZSIsInN1YnByb29mQXNzZXJ0aW9uIiwic3Vic3RpdHV0aW9ucyIsInRvSlNPTiIsInByb2NlZHVyZUNhbGxKU09OIiwicHJvY2VkdXJlQ2FsbFRvUHJvY2VkdXJlQ2FsbEpTT04iLCJzdGF0ZW1lbnRKU09OIiwic3RhdGVtZW50VG9TdGF0ZW1lbnRKU09OIiwianNvbiIsImZyb21KU09OIiwic3RhdGVtZW50RnJvbUpTT04iLCJwcm9jZWR1cmVDYWxsRnJvbUpTT04iLCJwcmVtaXNlIiwiUHJvb2ZBc3NlcnRpb24iLCJuYW1lIl0sIm1hcHBpbmdzIjoiQUFBQTs7OzsrQkFTQTs7O2VBQUE7OztxRUFQMkI7NkRBQ0c7d0JBRVA7dUJBQ1k7b0JBQ2tGOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7SUFFckgsV0FBZUEsSUFBQUEsZ0JBQU0sNEJBQUM7O2FBQU1DLFFBQ2RDLE9BQU8sRUFBRUMsTUFBTSxFQUFFQyxJQUFJLEVBQUVDLFNBQVMsRUFBRUMsYUFBYTtnQ0FEakNMOztnQkFFeEIsa0JBRndCQTtZQUVsQkM7WUFBU0M7WUFBUUM7WUFBTUM7O1FBRTdCLE1BQUtDLGFBQWEsR0FBR0E7Ozs7O1lBR3ZCQyxLQUFBQTttQkFBQUEsU0FBQUE7Z0JBQ0UsT0FBTyxJQUFJLENBQUNELGFBQWE7WUFDM0I7OztZQUVBRSxLQUFBQTttQkFBQUEsU0FBQUE7Z0JBQ0UsSUFBTUMsU0FBUyxNQUFNLEdBQUc7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
486
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9lbGVtZW50L3Byb29mQXNzZXJ0aW9uL3ByZW1pc2UuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBQcm9vZkFzc2VydGlvbiBmcm9tIFwiLi4vcHJvb2ZBc3NlcnRpb25cIjtcblxuaW1wb3J0IHsgZGVmaW5lIH0gZnJvbSBcIi4uLy4uL2VsZW1lbnRzXCI7XG5pbXBvcnQgeyBhdHRlbXB0LCBsaW1pbmFsbHkgfSBmcm9tIFwiLi4vLi4vdXRpbGl0aWVzL2NvbnRleHRcIjtcbmltcG9ydCB7IHN0YXRlbWVudEZyb21KU09OLCBwcm9jZWR1cmVDYWxsRnJvbUpTT04sIHN0YXRlbWVudFRvU3RhdGVtZW50SlNPTiwgcHJvY2VkdXJlQ2FsbFRvUHJvY2VkdXJlQ2FsbEpTT04gfSBmcm9tIFwiLi4vLi4vdXRpbGl0aWVzL2pzb25cIjtcblxuZXhwb3J0IGRlZmF1bHQgZGVmaW5lKGNsYXNzIFByZW1pc2UgZXh0ZW5kcyBQcm9vZkFzc2VydGlvbiB7XG4gIGNvbnN0cnVjdG9yKGNvbnRleHQsIHN0cmluZywgbm9kZSwgc3RhdGVtZW50LCBwcm9jZWR1cmVDYWxsKSB7XG4gICAgc3VwZXIoY29udGV4dCwgc3RyaW5nLCBub2RlLCBzdGF0ZW1lbnQpO1xuXG4gICAgdGhpcy5wcm9jZWR1cmVDYWxsID0gcHJvY2VkdXJlQ2FsbDtcbiAgfVxuXG4gIGdldFByb2NlZHVyZUNhbGwoKSB7XG4gICAgcmV0dXJuIHRoaXMucHJvY2VkdXJlQ2FsbDtcbiAgfVxuXG4gIGlzU3RhdGVkKCkge1xuICAgIGNvbnN0IHN0YXRlZCA9IHRydWU7IC8vL1xuXG4gICAgcmV0dXJuIHN0YXRlZDtcbiAgfVxuXG4gIHZhbGlkYXRlKGFzc2lnbm1lbnRzLCBjb250ZXh0KSB7XG4gICAgbGV0IHZhbGlkYXRlcyA9IGZhbHNlO1xuXG4gICAgY29uc3QgcHJlbWlzZVN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7IC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVmFsaWRhdHRpbmcgdGhlICcke3ByZW1pc2VTdHJpbmd9JyBwcmVtaXNlLi4uYCk7XG5cbiAgICBjb25zdCBzdGF0ZW1lbnQgPSB0aGlzLmdldFN0YXRlbWVudCgpLFxuICAgICAgICAgIHByb2NlZHVyZUNhbGwgPSB0aGlzLmdldFByb2NlZHVyZUNhbGwoKTtcblxuICAgIGlmIChmYWxzZSkge1xuICAgICAgLy8vXG4gICAgfSBlbHNlIGlmIChzdGF0ZW1lbnQgIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IHN0YXRlbWVudFZhbGlkYXRlcyA9IHRoaXMudmFsaWRhdGVTdGF0ZW1lbnQoYXNzaWdubWVudHMsIGNvbnRleHQpO1xuXG4gICAgICBpZiAoc3RhdGVtZW50VmFsaWRhdGVzKSB7XG4gICAgICAgIHZhbGlkYXRlcyA9IHRydWU7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChwcm9jZWR1cmVDYWxsICE9PSBudWxsKSB7XG4gICAgICBjb25zdCBwcm9jZWR1cmVDYWxsVmFsaWRhdGVzID0gdGhpcy52YWxpZGF0ZVByb2NlZHVyZUNhbGwoYXNzaWdubWVudHMsIGNvbnRleHQpO1xuXG4gICAgICBpZiAocHJvY2VkdXJlQ2FsbFZhbGlkYXRlcykge1xuICAgICAgICB2YWxpZGF0ZXMgPSB0cnVlO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGBVbmFibGUgdG8gdmFsaWRhdGUgdGhlICcke3ByZW1pc2VTdHJpbmd9JyBwcmVtaXNlIGJlY2F1c2UgaXQgaXMgbm9uc2Vuc2UuYCk7XG4gICAgfVxuXG4gICAgaWYgKHZhbGlkYXRlcykge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmFsaWRhdGVkIHRoZSAnJHtwcmVtaXNlU3RyaW5nfScgcHJlbWlzZS5gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdmFsaWRhdGVzO1xuICB9XG5cbiAgdmFsaWRhdGVQcm9jZWR1cmVDYWxsKGFzc2lnbm1lbnRzLCBjb250ZXh0KSB7XG4gICAgbGV0IHByb2NlZHVyZUNhbGxWYWxpZGF0ZXMgPSBmYWxzZTtcblxuICAgIGNvbnN0IHByZW1pc2VTdHJpbmcgPSB0aGlzLmdldFN0cmluZygpLCAvLy9cbiAgICAgICAgICBwcm9jZWR1cmVDYWxsU3RyaW5nID0gdGhpcy5wcm9jZWR1cmVDYWxsLmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgVmFsaWRhdHRpbmcgdGhlICcke3ByZW1pc2VTdHJpbmd9JyBwcmVtaXNlJ3MgJyR7cHJvY2VkdXJlQ2FsbFN0cmluZ30nIHByb2NlZHVyZSBjYWxsLi4uYCk7XG5cbiAgICBwcm9jZWR1cmVDYWxsVmFsaWRhdGVzID0gdGhpcy5wcm9jZWR1cmVDYWxsLnZhbGlkYXRlKGNvbnRleHQpO1xuXG4gICAgaWYgKHByb2NlZHVyZUNhbGxWYWxpZGF0ZXMpIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlZCB0aGUgJyR7cHJlbWlzZVN0cmluZ30nIHByZW1pc2UncyAnJHtwcm9jZWR1cmVDYWxsU3RyaW5nfScgcHJvY2VkdXJlIGNhbGwuYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHByb2NlZHVyZUNhbGxWYWxpZGF0ZXM7XG4gIH1cblxuICB1bmlmeVN1YnByb29mT3JQcm9vZkFzc2VydGlvbihzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb24sIGNvbnRleHQpIHtcbiAgICBsZXQgc3VicHJvb2ZPclByb29mQXNzZXJ0aW9uVW5pZmllcztcblxuICAgIGNvbnN0IHByZW1pc2VTdHJpbmcgPSB0aGlzLmdldFN0cmluZygpLCAvLy9cbiAgICAgICAgICBzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25TdHJpbmcgPSBzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb24uZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBVbmlmeWluZyB0aGUgJyR7c3VicHJvb2ZPclByb29mQXNzZXJ0aW9uU3RyaW5nfScgc3VicHJvb2Ygb3IgcHJvb2YgYXNzZXJ0aW9uIHdpdGggdGhlICcke3ByZW1pc2VTdHJpbmd9JyBwcmVtaXNlLi4uYCk7XG5cbiAgICBjb25zdCBzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25Qcm9vZkFzc2VydGlvbiA9IHN1YnByb29mT3JQcm9vZkFzc2VydGlvbi5pc1Byb29mQXNzZXJ0aW9uKCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9vZkFzc2VydGlvbiA9IHN1YnByb29mT3JQcm9vZkFzc2VydGlvblByb29mQXNzZXJ0aW9uID9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb24gOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YnByb29mID0gc3VicHJvb2ZPclByb29mQXNzZXJ0aW9uUHJvb2ZBc3NlcnRpb24gP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudWxsIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb247XG5cbiAgICBpZiAocHJvb2ZBc3NlcnRpb24gIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IHByb29mQXNzZXJ0aW9uVW5pZmllcyA9IHRoaXMudW5pZnlQcm9vZkFzc2VydGlvbihwcm9vZkFzc2VydGlvbiwgY29udGV4dCk7XG5cbiAgICAgIGlmIChwcm9vZkFzc2VydGlvblVuaWZpZXMpIHtcbiAgICAgICAgc3VicHJvb2ZPclByb29mQXNzZXJ0aW9uVW5pZmllcyA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHN1YnByb29mICE9PSBudWxsKSB7XG4gICAgICBjb25zdCBzdWJwcm9vZlVuaWZpZXMgPSB0aGlzLnVuaWZ5U3VicHJvb2Yoc3VicHJvb2YsIGNvbnRleHQpO1xuXG4gICAgICBpZiAoc3VicHJvb2ZVbmlmaWVzKSB7XG4gICAgICAgIHN1YnByb29mT3JQcm9vZkFzc2VydGlvblVuaWZpZXMgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25VbmlmaWVzKSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi51bmlmaWVkIHRoZSAnJHtzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25TdHJpbmd9JyBzdWJwcm9vZiBvciBwcm9vZiBhc3NlcnRpb24gd2l0aCB0aGUgJyR7cHJlbWlzZVN0cmluZ30nIHByZW1pc2UuYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHN1YnByb29mT3JQcm9vZkFzc2VydGlvblVuaWZpZXM7XG4gIH1cblxuICB1bmlmeVByb29mQXNzZXJ0aW9uKHByb29mQXNzZXJ0aW9uLCBjb250ZXh0KSB7XG4gICAgbGV0IHByb29mQXNzZXJ0aW9uVW5pZmllcztcblxuICAgIGNvbnN0IHByZW1pc2VTdHJpbmcgPSB0aGlzLmdldFN0cmluZygpLCAvLy9cbiAgICAgICAgICBwcm9vZkFzc2VydGlvblN0cmluZyA9IHByb29mQXNzZXJ0aW9uLmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgVW5pZnlpbmcgdGhlICcke3Byb29mQXNzZXJ0aW9uU3RyaW5nfScgcHJvb2YgYXNzZXJ0aW9uIHdpdGggdGhlICcke3ByZW1pc2VTdHJpbmd9JyBwcmVtaXNlLi4uYCk7XG5cbiAgICBjb25zdCBwcm9vZkFzc2VydGlvbkNvbnRleHQgPSBwcm9vZkFzc2VydGlvbi5nZXRDb250ZXh0KCksXG4gICAgICAgICAgcHJlbWlzZUNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKSxcbiAgICAgICAgICBnZW5lcmFsQ29udGV4dCA9IHByZW1pc2VDb250ZXh0LCAvLy9cbiAgICAgICAgICBzcGVjaWZpY0NvbnRleHQgPSBwcm9vZkFzc2VydGlvbkNvbnRleHQ7IC8vL1xuXG4gICAgcHJvb2ZBc3NlcnRpb25VbmlmaWVzID0gbGltaW5hbGx5KChzcGVjaWZpY0NvbnRleHQpID0+IHtcbiAgICAgIGNvbnN0IHN0YXRlbWVudCA9IHByb29mQXNzZXJ0aW9uLmdldFN0YXRlbWVudCgpLFxuICAgICAgICAgICAgc3RhdGVtZW50VW5pZmllcyA9IHRoaXMudW5pZnlTdGF0ZW1lbnQoc3RhdGVtZW50LCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0KTtcblxuICAgICAgaWYgKHN0YXRlbWVudFVuaWZpZXMpIHtcbiAgICAgICAgc3BlY2lmaWNDb250ZXh0LmNvbW1pdChjb250ZXh0KTtcblxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9LCBzcGVjaWZpY0NvbnRleHQpO1xuXG4gICAgaWYgKHByb29mQXNzZXJ0aW9uVW5pZmllcykge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udW5pZmllZCB0aGUgJyR7cHJvb2ZBc3NlcnRpb25TdHJpbmd9JyBwcm9vZiBhc3NlcnRpb24gd2l0aCB0aGUgJyR7cHJlbWlzZVN0cmluZ30nIHByZW1pc2UuYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHByb29mQXNzZXJ0aW9uVW5pZmllcztcbiAgfVxuXG4gIHVuaWZ5U3VicHJvb2Yoc3VicHJvb2YsIGNvbnRleHQpIHtcbiAgICBsZXQgc3VicHJvb2ZVbmlmaWVzID0gZmFsc2U7XG5cbiAgICBjb25zdCBwcmVtaXNlU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKSxcbiAgICAgICAgICBzdWJwcm9vZlN0cmluZyA9IHN1YnByb29mLmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgVW5pZnlpbmcgdGhlICcke3N1YnByb29mU3RyaW5nfScgc3VicHJvb2Ygd2l0aCB0aGUgJyR7cHJlbWlzZVN0cmluZ30nIHByZW1pc2UuLi5gKTtcblxuICAgIGNvbnN0IHNwZWNpZmljQ29udGV4dCA9IGNvbnRleHQ7ICAvLy9cblxuICAgIGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKTtcblxuICAgIGNvbnN0IGdlbmVyYWxDb250ZXh0ID0gY29udGV4dDsgLy8vXG5cbiAgICBjb250ZXh0ID0gc3BlY2lmaWNDb250ZXh0OyAgLy8vXG5cbiAgICBjb25zdCBzdGF0ZW1lbnQgPSB0aGlzLmdldFN0YXRlbWVudCgpO1xuXG4gICAgaWYgKHN0YXRlbWVudCAhPT0gbnVsbCkge1xuICAgICAgY29uc3Qgc3RhdGVtZW50Tm9kZSA9IHN0YXRlbWVudC5nZXROb2RlKCksXG4gICAgICAgICAgICBzdWJwcm9vZkFzc2VydGlvbk5vZGUgPSBzdGF0ZW1lbnROb2RlLmdldFN1YnByb29mQXNzZXJ0aW9uTm9kZSgpO1xuXG4gICAgICBpZiAoc3VicHJvb2ZBc3NlcnRpb25Ob2RlICE9PSBudWxsKSB7XG4gICAgICAgIGNvbnN0IGNvbnRleHQgPSBnZW5lcmFsQ29udGV4dCwgLy8vXG4gICAgICAgICAgICAgIGFzc2VydGlvbk5vZGUgPSBzdWJwcm9vZkFzc2VydGlvbk5vZGUsICAvLy9cbiAgICAgICAgICAgICAgYXNzZXJ0aW9uID0gY29udGV4dC5maW5kQXNzZXJ0aW9uQnlBc3NlcnRpb25Ob2RlKGFzc2VydGlvbk5vZGUpXG5cbiAgICAgICAgaWYgKGFzc2VydGlvbiAhPT0gbnVsbCkge1xuICAgICAgICAgIGNvbnN0IHN1YnByb29mQXNzZXJ0aW9uID0gYXNzZXJ0aW9uOyAgLy8vXG5cbiAgICAgICAgICBzdWJwcm9vZlVuaWZpZXMgPSBzdWJwcm9vZkFzc2VydGlvbi51bmlmeVN1YnByb29mKHN1YnByb29mLCBzdWJzdGl0dXRpb25zLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChzdWJwcm9vZlVuaWZpZXMpIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnVuaWZpZWQgdGhlICcke3N1YnByb29mU3RyaW5nfScgc3VicHJvb2Ygd2l0aCB0aGUgJyR7cHJlbWlzZVN0cmluZ30nIHByZW1pc2UuYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHN1YnByb29mVW5pZmllcztcbiAgfVxuXG4gIGFzeW5jIHZlcmlmeShhc3NpZ25tZW50cywgY29udGV4dCkge1xuICAgIGxldCB2ZXJpZmllcyA9IGZhbHNlO1xuXG4gICAgYXdhaXQgdGhpcy5icmVhayhjb250ZXh0KTtcblxuICAgIGNvbnN0IHByZW1pc2VTdHJpbmcgPSB0aGlzLmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgVmVyaWZ5aW5nIHRoZSAnJHtwcmVtaXNlU3RyaW5nfScgcHJlbWlzZS4uLmApO1xuXG4gICAgYXR0ZW1wdCgoY29udGV4dCkgPT4ge1xuICAgICAgY29uc3QgdmFsaWRhdGVzID0gdGhpcy52YWxpZGF0ZShhc3NpZ25tZW50cywgY29udGV4dCk7XG5cbiAgICAgIGlmICh2YWxpZGF0ZXMpIHtcbiAgICAgICAgdGhpcy5zZXRDb250ZXh0KGNvbnRleHQpO1xuXG4gICAgICAgIHZlcmlmaWVzID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9LCBjb250ZXh0KTtcblxuICAgIGlmICh2ZXJpZmllcykge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmVyaWZpZWQgdGhlICcke3ByZW1pc2VTdHJpbmd9JyBwcmVtaXNlLmApO1xuICAgIH1cblxuICAgIHJldHVybiB2ZXJpZmllcztcbiAgfVxuXG4gIGFzeW5jIHVuaWZ5SW5kZXBlbmRlbnRseShjb250ZXh0KSB7XG4gICAgbGV0IHVuaWZpZXNJbmRlcGVuZGVudGx5ID0gZmFsc2U7XG5cbiAgICBjb25zdCBwcmVtaXNlU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBVbmlmeWluZyB0aGUgJyR7cHJlbWlzZVN0cmluZ30nIHByZW1pc2UgaW5kZXBlbmRlbnRseS4uLmApO1xuXG4gICAgY29uc3Qgc3RhdGVtZW50ID0gdGhpcy5nZXRTdGF0ZW1lbnQoKSxcbiAgICAgICAgICBwcm9jZWR1cmVDYWxsID0gdGhpcy5nZXRQcm9jZWR1cmVDYWxsKCk7XG5cbiAgICBpZiAoc3RhdGVtZW50ICE9PSBudWxsKSB7XG4gICAgICBjb25zdCBzcGVjaWZpY0NvbnRleHQgPSBjb250ZXh0OyAgLy8vXG5cbiAgICAgIGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKTtcblxuICAgICAgY29uc3QgZ2VuZXJhbENvbnRleHQgPSBjb250ZXh0OyAvLy9cblxuICAgICAgY29udGV4dCA9IHNwZWNpZmljQ29udGV4dDsgIC8vL1xuXG4gICAgICBjb25zdCBzdGF0ZW1lbnRVbmlmaWVzSW5kZXBlbmRlbnRseSA9IHN0YXRlbWVudC51bmlmeUluZGVwZW5kZW50bHkoZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCk7XG5cbiAgICAgIGlmIChzdGF0ZW1lbnRVbmlmaWVzSW5kZXBlbmRlbnRseSkge1xuICAgICAgICB1bmlmaWVzSW5kZXBlbmRlbnRseSA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHByb2NlZHVyZUNhbGwgIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IHByb2NlZHVyZUNhbGxSZXNvbHZlZEluZGVwZW5kZW50bHkgPSBhd2FpdCBwcm9jZWR1cmVDYWxsLnVuaWZ5SW5kZXBlbmRlbnRseShjb250ZXh0KTtcblxuICAgICAgaWYgKHByb2NlZHVyZUNhbGxSZXNvbHZlZEluZGVwZW5kZW50bHkpIHtcbiAgICAgICAgdW5pZmllc0luZGVwZW5kZW50bHkgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh1bmlmaWVzSW5kZXBlbmRlbnRseSkge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udW5pZmllZCB0aGUgJyR7cHJlbWlzZVN0cmluZ30nIHByZW1pc2UgaW5kZXBlbmRlbmx5LmApO1xuICAgIH1cblxuICAgIHJldHVybiB1bmlmaWVzSW5kZXBlbmRlbnRseTtcbiAgfVxuXG4gIHRvSlNPTigpIHtcbiAgICBjb25zdCBwcm9jZWR1cmVDYWxsSlNPTiA9IHByb2NlZHVyZUNhbGxUb1Byb2NlZHVyZUNhbGxKU09OKHRoaXMucHJvY2VkdXJlQ2FsbCksXG4gICAgICAgICAgc3RhdGVtZW50SlNPTiA9IHN0YXRlbWVudFRvU3RhdGVtZW50SlNPTih0aGlzLnN0YXRlbWVudCksXG4gICAgICAgICAgcHJvY2VkdXJlQ2FsbCA9IHByb2NlZHVyZUNhbGxKU09OLCAgLy8vXG4gICAgICAgICAgc3RhdGVtZW50ID0gc3RhdGVtZW50SlNPTiwgIC8vL1xuICAgICAgICAgIGpzb24gPSB7XG4gICAgICAgICAgICBzdGF0ZW1lbnQsXG4gICAgICAgICAgICBwcm9jZWR1cmVDYWxsXG4gICAgICAgICAgfTtcblxuICAgIHJldHVybiBqc29uO1xuICB9XG5cbiAgc3RhdGljIG5hbWUgPSBcIlByZW1pc2VcIjtcblxuICBzdGF0aWMgZnJvbUpTT04oanNvbiwgY29udGV4dCkge1xuICAgIGNvbnN0IHN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21KU09OKGpzb24sIGNvbnRleHQpLFxuICAgICAgICAgIHByb2NlZHVyZUNhbGwgPSBwcm9jZWR1cmVDYWxsRnJvbUpTT04oanNvbiwgY29udGV4dCk7XG5cbiAgICBsZXQgc3RyaW5nO1xuXG4gICAgaWYgKHN0YXRlbWVudCAhPT0gbnVsbCkge1xuICAgICAgc3RyaW5nID0gc3RhdGVtZW50LmdldFN0cmluZygpO1xuICAgIH1cblxuICAgIGlmIChwcm9jZWR1cmVDYWxsICE9PSBudWxsKSB7XG4gICAgICBzdHJpbmcgPSBwcm9jZWR1cmVDYWxsLmdldFN0cmluZygpO1xuICAgIH1cblxuICAgIGNvbnN0IG5vZGUgPSBudWxsO1xuXG4gICAgY29uc3QgcHJlbWlzZSA9IG5ldyBQcmVtaXNlKGNvbnRleHQsIHN0cmluZywgbm9kZSwgc3RhdGVtZW50LCBwcm9jZWR1cmVDYWxsKTtcblxuICAgIHJldHVybiBwcmVtaXNlO1xuICB9XG59KTtcbiJdLCJuYW1lcyI6WyJkZWZpbmUiLCJQcmVtaXNlIiwiY29udGV4dCIsInN0cmluZyIsIm5vZGUiLCJzdGF0ZW1lbnQiLCJwcm9jZWR1cmVDYWxsIiwiZ2V0UHJvY2VkdXJlQ2FsbCIsImlzU3RhdGVkIiwic3RhdGVkIiwidmFsaWRhdGUiLCJhc3NpZ25tZW50cyIsInZhbGlkYXRlcyIsInByZW1pc2VTdHJpbmciLCJnZXRTdHJpbmciLCJ0cmFjZSIsImdldFN0YXRlbWVudCIsInN0YXRlbWVudFZhbGlkYXRlcyIsInZhbGlkYXRlU3RhdGVtZW50IiwicHJvY2VkdXJlQ2FsbFZhbGlkYXRlcyIsInZhbGlkYXRlUHJvY2VkdXJlQ2FsbCIsImRlYnVnIiwicHJvY2VkdXJlQ2FsbFN0cmluZyIsInVuaWZ5U3VicHJvb2ZPclByb29mQXNzZXJ0aW9uIiwic3VicHJvb2ZPclByb29mQXNzZXJ0aW9uIiwic3VicHJvb2ZPclByb29mQXNzZXJ0aW9uVW5pZmllcyIsInN1YnByb29mT3JQcm9vZkFzc2VydGlvblN0cmluZyIsInN1YnByb29mT3JQcm9vZkFzc2VydGlvblByb29mQXNzZXJ0aW9uIiwiaXNQcm9vZkFzc2VydGlvbiIsInByb29mQXNzZXJ0aW9uIiwic3VicHJvb2YiLCJwcm9vZkFzc2VydGlvblVuaWZpZXMiLCJ1bmlmeVByb29mQXNzZXJ0aW9uIiwic3VicHJvb2ZVbmlmaWVzIiwidW5pZnlTdWJwcm9vZiIsInByb29mQXNzZXJ0aW9uU3RyaW5nIiwicHJvb2ZBc3NlcnRpb25Db250ZXh0IiwiZ2V0Q29udGV4dCIsInByZW1pc2VDb250ZXh0IiwiZ2VuZXJhbENvbnRleHQiLCJzcGVjaWZpY0NvbnRleHQiLCJsaW1pbmFsbHkiLCJzdGF0ZW1lbnRVbmlmaWVzIiwidW5pZnlTdGF0ZW1lbnQiLCJjb21taXQiLCJzdWJwcm9vZlN0cmluZyIsInN0YXRlbWVudE5vZGUiLCJnZXROb2RlIiwic3VicHJvb2ZBc3NlcnRpb25Ob2RlIiwiZ2V0U3VicHJvb2ZBc3NlcnRpb25Ob2RlIiwiYXNzZXJ0aW9uTm9kZSIsImFzc2VydGlvbiIsImZpbmRBc3NlcnRpb25CeUFzc2VydGlvbk5vZGUiLCJzdWJwcm9vZkFzc2VydGlvbiIsInN1YnN0aXR1dGlvbnMiLCJ2ZXJpZnkiLCJ2ZXJpZmllcyIsImJyZWFrIiwiYXR0ZW1wdCIsInNldENvbnRleHQiLCJ1bmlmeUluZGVwZW5kZW50bHkiLCJ1bmlmaWVzSW5kZXBlbmRlbnRseSIsInN0YXRlbWVudFVuaWZpZXNJbmRlcGVuZGVudGx5IiwicHJvY2VkdXJlQ2FsbFJlc29sdmVkSW5kZXBlbmRlbnRseSIsInRvSlNPTiIsInByb2NlZHVyZUNhbGxKU09OIiwicHJvY2VkdXJlQ2FsbFRvUHJvY2VkdXJlQ2FsbEpTT04iLCJzdGF0ZW1lbnRKU09OIiwic3RhdGVtZW50VG9TdGF0ZW1lbnRKU09OIiwianNvbiIsImZyb21KU09OIiwic3RhdGVtZW50RnJvbUpTT04iLCJwcm9jZWR1cmVDYWxsRnJvbUpTT04iLCJwcmVtaXNlIiwiUHJvb2ZBc3NlcnRpb24iLCJuYW1lIl0sIm1hcHBpbmdzIjoiQUFBQTs7OzsrQkFRQTs7O2VBQUE7OztxRUFOMkI7d0JBRUo7dUJBQ1k7b0JBQ2tGOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7SUFFckgsV0FBZUEsSUFBQUEsZ0JBQU0sNEJBQUM7O2FBQU1DLFFBQ2RDLE9BQU8sRUFBRUMsTUFBTSxFQUFFQyxJQUFJLEVBQUVDLFNBQVMsRUFBRUMsYUFBYTtnQ0FEakNMOztnQkFFeEIsa0JBRndCQTtZQUVsQkM7WUFBU0M7WUFBUUM7WUFBTUM7O1FBRTdCLE1BQUtDLGFBQWEsR0FB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