occam-verify-cli 0.0.1245 → 0.0.1247

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 (74) hide show
  1. package/lib/context/file.js +172 -210
  2. package/lib/context/local.js +95 -125
  3. package/lib/dom/assertion/contained.js +44 -22
  4. package/lib/dom/assertion/defined.js +34 -17
  5. package/lib/dom/combinator/bracketed.js +167 -0
  6. package/lib/dom/combinator.js +163 -0
  7. package/lib/{constructor → dom/constructor}/bracketed.js +7 -7
  8. package/lib/dom/constructor.js +190 -0
  9. package/lib/dom/declaration/combinator.js +2 -8
  10. package/lib/dom/declaration/constructor.js +42 -7
  11. package/lib/dom/declaration.js +113 -71
  12. package/lib/dom/equality.js +3 -3
  13. package/lib/dom/frame.js +111 -76
  14. package/lib/dom/judgement.js +29 -3
  15. package/lib/dom/label.js +22 -15
  16. package/lib/dom/metaLemma.js +20 -41
  17. package/lib/dom/metatheorem.js +20 -41
  18. package/lib/dom/metavariable.js +7 -7
  19. package/lib/dom/reference.js +32 -18
  20. package/lib/dom/rule.js +3 -4
  21. package/lib/dom/statement.js +2 -2
  22. package/lib/dom/term.js +2 -2
  23. package/lib/dom/topLevelAssertion.js +50 -71
  24. package/lib/dom/type.js +3 -3
  25. package/lib/dom/variable.js +5 -5
  26. package/lib/equivalence.js +2 -2
  27. package/lib/index.js +7 -3
  28. package/lib/mixins/statement/verify.js +3 -3
  29. package/lib/mixins/term/verify.js +2 -3
  30. package/lib/substitution/statement.js +2 -2
  31. package/lib/unifier/{label.js → reference.js} +14 -14
  32. package/lib/utilities/json.js +5 -7
  33. package/lib/utilities/unification.js +25 -6
  34. package/lib/verifier/combinator.js +3 -3
  35. package/lib/verifier/constructor.js +3 -3
  36. package/package.json +5 -5
  37. package/src/context/file.js +166 -206
  38. package/src/context/local.js +73 -83
  39. package/src/dom/assertion/contained.js +60 -27
  40. package/src/dom/assertion/defined.js +44 -20
  41. package/src/{combinator → dom/combinator}/bracketed.js +6 -5
  42. package/src/{combinator.js → dom/combinator.js} +8 -7
  43. package/src/{constructor → dom/constructor}/bracketed.js +6 -5
  44. package/src/{constructor.js → dom/constructor.js} +8 -7
  45. package/src/dom/declaration/combinator.js +2 -3
  46. package/src/dom/declaration/constructor.js +3 -2
  47. package/src/dom/declaration.js +133 -101
  48. package/src/dom/equality.js +2 -2
  49. package/src/dom/frame.js +151 -95
  50. package/src/dom/judgement.js +36 -2
  51. package/src/dom/label.js +18 -13
  52. package/src/dom/metaLemma.js +23 -55
  53. package/src/dom/metatheorem.js +23 -55
  54. package/src/dom/metavariable.js +6 -6
  55. package/src/dom/reference.js +43 -25
  56. package/src/dom/rule.js +2 -2
  57. package/src/dom/statement.js +1 -1
  58. package/src/dom/term.js +1 -1
  59. package/src/dom/topLevelAssertion.js +53 -86
  60. package/src/dom/type.js +2 -2
  61. package/src/dom/variable.js +4 -4
  62. package/src/equivalence.js +1 -1
  63. package/src/index.js +4 -0
  64. package/src/mixins/statement/verify.js +3 -2
  65. package/src/mixins/term/verify.js +2 -3
  66. package/src/substitution/statement.js +1 -1
  67. package/src/unifier/{label.js → reference.js} +6 -6
  68. package/src/utilities/json.js +4 -4
  69. package/src/utilities/unification.js +43 -5
  70. package/src/verifier/combinator.js +2 -2
  71. package/src/verifier/constructor.js +2 -2
  72. package/lib/combinator/bracketed.js +0 -126
  73. package/lib/combinator.js +0 -122
  74. package/lib/constructor.js +0 -149
@@ -1,149 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", {
3
- value: true
4
- });
5
- function _export(target, all) {
6
- for(var name in all)Object.defineProperty(target, name, {
7
- enumerable: true,
8
- get: all[name]
9
- });
10
- }
11
- _export(exports, {
12
- default: function() {
13
- return Constructor;
14
- },
15
- stringFromTermAndType: function() {
16
- return stringFromTermAndType;
17
- }
18
- });
19
- var _dom = /*#__PURE__*/ _interop_require_default(require("./dom"));
20
- var _local = /*#__PURE__*/ _interop_require_default(require("./context/local"));
21
- var _query = require("./utilities/query");
22
- var _unification = require("./utilities/unification");
23
- var _json = require("./utilities/json");
24
- function _class_call_check(instance, Constructor) {
25
- if (!(instance instanceof Constructor)) {
26
- throw new TypeError("Cannot call a class as a function");
27
- }
28
- }
29
- function _defineProperties(target, props) {
30
- for(var i = 0; i < props.length; i++){
31
- var descriptor = props[i];
32
- descriptor.enumerable = descriptor.enumerable || false;
33
- descriptor.configurable = true;
34
- if ("value" in descriptor) descriptor.writable = true;
35
- Object.defineProperty(target, descriptor.key, descriptor);
36
- }
37
- }
38
- function _create_class(Constructor, protoProps, staticProps) {
39
- if (protoProps) _defineProperties(Constructor.prototype, protoProps);
40
- if (staticProps) _defineProperties(Constructor, staticProps);
41
- return Constructor;
42
- }
43
- function _interop_require_default(obj) {
44
- return obj && obj.__esModule ? obj : {
45
- default: obj
46
- };
47
- }
48
- var termNodeQuery = (0, _query.nodeQuery)("/constructorDeclaration/term"), typeNodeQuery = (0, _query.nodeQuery)("/constructorDeclaration/type");
49
- var Constructor = /*#__PURE__*/ function() {
50
- function Constructor(string, term) {
51
- _class_call_check(this, Constructor);
52
- this.string = string;
53
- this.term = term;
54
- }
55
- _create_class(Constructor, [
56
- {
57
- key: "getString",
58
- value: function getString() {
59
- return this.string;
60
- }
61
- },
62
- {
63
- key: "getTerm",
64
- value: function getTerm() {
65
- return this.term;
66
- }
67
- },
68
- {
69
- key: "getType",
70
- value: function getType() {
71
- return this.term.getType();
72
- }
73
- },
74
- {
75
- key: "unifyTerm",
76
- value: function unifyTerm(term, context, verifyAhead) {
77
- var termUnified = false;
78
- var constructor = this, termString = term.getString(), constructorString = constructor.getString();
79
- context.trace("Unifying the '".concat(termString, "' term with the '").concat(constructorString, "' constructor..."), term);
80
- var termUnifiedWithConstructor = (0, _unification.unifyTermWithConstructor)(term, constructor, context);
81
- if (termUnifiedWithConstructor) {
82
- var verifiedAhead;
83
- var type = constructor.getType();
84
- term.setType(type);
85
- verifiedAhead = verifyAhead();
86
- termUnified = verifiedAhead; ///
87
- }
88
- if (termUnified) {
89
- context.debug("...unified the '".concat(termString, "' term with the '").concat(constructorString, "' constructor."), term);
90
- }
91
- return termUnified;
92
- }
93
- },
94
- {
95
- key: "verifyWhenDeclared",
96
- value: function verifyWhenDeclared(fileContext) {
97
- var verifiedWhenDeclared;
98
- var constructorString = this.string; ///
99
- fileContext.trace("Verifying the '".concat(constructorString, "' constructor when declared..."));
100
- var termVerifiedAtTopLevel = this.term.verifyWhenDeclared(fileContext);
101
- if (termVerifiedAtTopLevel) {
102
- verifiedWhenDeclared = true; ///
103
- }
104
- if (verifiedWhenDeclared) {
105
- fileContext.debug("...verified the '".concat(constructorString, "' constructor when declared."));
106
- }
107
- return verifiedWhenDeclared;
108
- }
109
- },
110
- {
111
- key: "toJSON",
112
- value: function toJSON() {
113
- var termJSON = (0, _json.termToTermJSON)(this.term), term = termJSON, json = {
114
- term: term
115
- };
116
- return json;
117
- }
118
- }
119
- ], [
120
- {
121
- key: "fromJSON",
122
- value: function fromJSON(json, fileContext) {
123
- var term = (0, _json.termFromJSON)(json, fileContext), type = term.getType(), string = stringFromTermAndType(term, type), constructor = new Constructor(string, term);
124
- return constructor;
125
- }
126
- },
127
- {
128
- key: "fromConstructorDeclarationNode",
129
- value: function fromConstructorDeclarationNode(constructorDeclarationNode, fileContext) {
130
- var Term = _dom.default.Term, Type = _dom.default.Type, termNode = termNodeQuery(constructorDeclarationNode), typeNode = typeNodeQuery(constructorDeclarationNode), localContext = _local.default.fromFileContext(fileContext), context = localContext, type = Type.fromTypeNode(typeNode), term = Term.fromTermNodeAndType(termNode, type, context), string = stringFromTermAndType(term, type), constructor = new Constructor(string, term);
131
- return constructor;
132
- }
133
- }
134
- ]);
135
- return Constructor;
136
- }();
137
- function stringFromTermAndType(term, type) {
138
- var string;
139
- var termString = term.getString();
140
- if (type === null) {
141
- string = "".concat(termString);
142
- } else {
143
- var typeName = type.getName();
144
- string = "".concat(termString, ":").concat(typeName);
145
- }
146
- return string;
147
- }
148
-
149
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9jb25zdHJ1Y3Rvci5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IGRvbSBmcm9tIFwiLi9kb21cIjtcbmltcG9ydCBMb2NhbENvbnRleHQgZnJvbSBcIi4vY29udGV4dC9sb2NhbFwiO1xuXG5pbXBvcnQgeyBub2RlUXVlcnkgfSBmcm9tIFwiLi91dGlsaXRpZXMvcXVlcnlcIjtcbmltcG9ydCB7IHVuaWZ5VGVybVdpdGhDb25zdHJ1Y3RvciB9IGZyb20gXCIuL3V0aWxpdGllcy91bmlmaWNhdGlvblwiO1xuaW1wb3J0IHsgdGVybUZyb21KU09OLCB0ZXJtVG9UZXJtSlNPTiB9IGZyb20gXCIuL3V0aWxpdGllcy9qc29uXCI7XG5cbmNvbnN0IHRlcm1Ob2RlUXVlcnkgPSBub2RlUXVlcnkoXCIvY29uc3RydWN0b3JEZWNsYXJhdGlvbi90ZXJtXCIpLFxuICAgICAgdHlwZU5vZGVRdWVyeSA9IG5vZGVRdWVyeShcIi9jb25zdHJ1Y3RvckRlY2xhcmF0aW9uL3R5cGVcIik7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENvbnN0cnVjdG9yIHtcbiAgY29uc3RydWN0b3Ioc3RyaW5nLCB0ZXJtKSB7XG4gICAgdGhpcy5zdHJpbmcgPSBzdHJpbmc7XG4gICAgdGhpcy50ZXJtID0gdGVybTtcbiAgfVxuXG4gIGdldFN0cmluZygpIHtcbiAgICByZXR1cm4gdGhpcy5zdHJpbmc7XG4gIH1cblxuICBnZXRUZXJtKCkge1xuICAgIHJldHVybiB0aGlzLnRlcm07XG4gIH1cblxuICBnZXRUeXBlKCkgeyByZXR1cm4gdGhpcy50ZXJtLmdldFR5cGUoKTsgfVxuXG4gIHVuaWZ5VGVybSh0ZXJtLCBjb250ZXh0LCB2ZXJpZnlBaGVhZCkge1xuICAgIGxldCB0ZXJtVW5pZmllZCA9IGZhbHNlO1xuXG4gICAgY29uc3QgY29uc3RydWN0b3IgPSB0aGlzLCAvLy9cbiAgICAgICAgICB0ZXJtU3RyaW5nID0gdGVybS5nZXRTdHJpbmcoKSxcbiAgICAgICAgICBjb25zdHJ1Y3RvclN0cmluZyA9IGNvbnN0cnVjdG9yLmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgVW5pZnlpbmcgdGhlICcke3Rlcm1TdHJpbmd9JyB0ZXJtIHdpdGggdGhlICcke2NvbnN0cnVjdG9yU3RyaW5nfScgY29uc3RydWN0b3IuLi5gLCB0ZXJtKTtcblxuICAgIGNvbnN0IHRlcm1VbmlmaWVkV2l0aENvbnN0cnVjdG9yID0gdW5pZnlUZXJtV2l0aENvbnN0cnVjdG9yKHRlcm0sIGNvbnN0cnVjdG9yLCBjb250ZXh0KTtcblxuICAgIGlmICh0ZXJtVW5pZmllZFdpdGhDb25zdHJ1Y3Rvcikge1xuICAgICAgbGV0IHZlcmlmaWVkQWhlYWQ7XG5cbiAgICAgIGNvbnN0IHR5cGUgPSBjb25zdHJ1Y3Rvci5nZXRUeXBlKCk7XG5cbiAgICAgIHRlcm0uc2V0VHlwZSh0eXBlKTtcblxuICAgICAgdmVyaWZpZWRBaGVhZCA9IHZlcmlmeUFoZWFkKCk7XG5cbiAgICAgIHRlcm1VbmlmaWVkID0gdmVyaWZpZWRBaGVhZDsgIC8vL1xuICAgIH1cblxuICAgIGlmICh0ZXJtVW5pZmllZCkge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udW5pZmllZCB0aGUgJyR7dGVybVN0cmluZ30nIHRlcm0gd2l0aCB0aGUgJyR7Y29uc3RydWN0b3JTdHJpbmd9JyBjb25zdHJ1Y3Rvci5gLCB0ZXJtKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGVybVVuaWZpZWQ7XG4gIH1cblxuICB2ZXJpZnlXaGVuRGVjbGFyZWQoZmlsZUNvbnRleHQpIHtcbiAgICBsZXQgdmVyaWZpZWRXaGVuRGVjbGFyZWQ7XG5cbiAgICBjb25zdCBjb25zdHJ1Y3RvclN0cmluZyA9IHRoaXMuc3RyaW5nOyAgLy8vXG5cbiAgICBmaWxlQ29udGV4dC50cmFjZShgVmVyaWZ5aW5nIHRoZSAnJHtjb25zdHJ1Y3RvclN0cmluZ30nIGNvbnN0cnVjdG9yIHdoZW4gZGVjbGFyZWQuLi5gKTtcblxuICAgIGNvbnN0IHRlcm1WZXJpZmllZEF0VG9wTGV2ZWwgPSB0aGlzLnRlcm0udmVyaWZ5V2hlbkRlY2xhcmVkKGZpbGVDb250ZXh0KTtcblxuICAgIGlmICh0ZXJtVmVyaWZpZWRBdFRvcExldmVsKSB7XG4gICAgICB2ZXJpZmllZFdoZW5EZWNsYXJlZCA9IHRydWU7IC8vL1xuICAgIH1cblxuICAgIGlmICh2ZXJpZmllZFdoZW5EZWNsYXJlZCkge1xuICAgICAgZmlsZUNvbnRleHQuZGVidWcoYC4uLnZlcmlmaWVkIHRoZSAnJHtjb25zdHJ1Y3RvclN0cmluZ30nIGNvbnN0cnVjdG9yIHdoZW4gZGVjbGFyZWQuYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZlcmlmaWVkV2hlbkRlY2xhcmVkO1xuICB9XG5cbiAgdG9KU09OKCkge1xuICAgIGNvbnN0IHRlcm1KU09OID0gdGVybVRvVGVybUpTT04odGhpcy50ZXJtKSxcbiAgICAgICAgICB0ZXJtID0gdGVybUpTT04sICAvLy9cbiAgICAgICAgICBqc29uID0ge1xuICAgICAgICAgICAgdGVybVxuICAgICAgICAgIH07XG5cbiAgICByZXR1cm4ganNvbjtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tSlNPTihqc29uLCBmaWxlQ29udGV4dCkge1xuICAgIGNvbnN0IHRlcm0gPSB0ZXJtRnJvbUpTT04oanNvbiwgZmlsZUNvbnRleHQpLFxuICAgICAgICAgIHR5cGUgPSB0ZXJtLmdldFR5cGUoKSxcbiAgICAgICAgICBzdHJpbmcgPSBzdHJpbmdGcm9tVGVybUFuZFR5cGUodGVybSwgdHlwZSksXG4gICAgICAgICAgY29uc3RydWN0b3IgPSBuZXcgQ29uc3RydWN0b3Ioc3RyaW5nLCB0ZXJtKTtcblxuICAgIHJldHVybiBjb25zdHJ1Y3RvcjtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tQ29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUoY29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUsIGZpbGVDb250ZXh0KSB7XG4gICAgY29uc3QgeyBUZXJtLCBUeXBlIH0gPSBkb20sXG4gICAgICAgICAgdGVybU5vZGUgPSB0ZXJtTm9kZVF1ZXJ5KGNvbnN0cnVjdG9yRGVjbGFyYXRpb25Ob2RlKSxcbiAgICAgICAgICB0eXBlTm9kZSA9IHR5cGVOb2RlUXVlcnkoY29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUpLFxuICAgICAgICAgIGxvY2FsQ29udGV4dCA9IExvY2FsQ29udGV4dC5mcm9tRmlsZUNvbnRleHQoZmlsZUNvbnRleHQpLFxuICAgICAgICAgIGNvbnRleHQgPSBsb2NhbENvbnRleHQsIC8vL1xuICAgICAgICAgIHR5cGUgPSBUeXBlLmZyb21UeXBlTm9kZSh0eXBlTm9kZSksXG4gICAgICAgICAgdGVybSA9IFRlcm0uZnJvbVRlcm1Ob2RlQW5kVHlwZSh0ZXJtTm9kZSwgdHlwZSwgY29udGV4dCksXG4gICAgICAgICAgc3RyaW5nID0gc3RyaW5nRnJvbVRlcm1BbmRUeXBlKHRlcm0sIHR5cGUpLFxuICAgICAgICAgIGNvbnN0cnVjdG9yID0gbmV3IENvbnN0cnVjdG9yKHN0cmluZywgdGVybSk7XG5cbiAgICByZXR1cm4gY29uc3RydWN0b3I7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0cmluZ0Zyb21UZXJtQW5kVHlwZSh0ZXJtLCB0eXBlKSB7XG4gIGxldCBzdHJpbmc7XG5cbiAgY29uc3QgdGVybVN0cmluZyA9IHRlcm0uZ2V0U3RyaW5nKCk7XG5cbiAgaWYgKHR5cGUgPT09IG51bGwpIHtcbiAgICBzdHJpbmcgPSBgJHt0ZXJtU3RyaW5nfWA7XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgdHlwZU5hbWUgPSB0eXBlLmdldE5hbWUoKTtcblxuICAgIHN0cmluZyA9IGAke3Rlcm1TdHJpbmd9OiR7dHlwZU5hbWV9YDtcbiAgfVxuXG4gIHJldHVybiBzdHJpbmc7XG59XG4iXSwibmFtZXMiOlsiQ29uc3RydWN0b3IiLCJzdHJpbmdGcm9tVGVybUFuZFR5cGUiLCJ0ZXJtTm9kZVF1ZXJ5Iiwibm9kZVF1ZXJ5IiwidHlwZU5vZGVRdWVyeSIsInN0cmluZyIsInRlcm0iLCJnZXRTdHJpbmciLCJnZXRUZXJtIiwiZ2V0VHlwZSIsInVuaWZ5VGVybSIsImNvbnRleHQiLCJ2ZXJpZnlBaGVhZCIsInRlcm1VbmlmaWVkIiwiY29uc3RydWN0b3IiLCJ0ZXJtU3RyaW5nIiwiY29uc3RydWN0b3JTdHJpbmciLCJ0cmFjZSIsInRlcm1VbmlmaWVkV2l0aENvbnN0cnVjdG9yIiwidW5pZnlUZXJtV2l0aENvbnN0cnVjdG9yIiwidmVyaWZpZWRBaGVhZCIsInR5cGUiLCJzZXRUeXBlIiwiZGVidWciLCJ2ZXJpZnlXaGVuRGVjbGFyZWQiLCJmaWxlQ29udGV4dCIsInZlcmlmaWVkV2hlbkRlY2xhcmVkIiwidGVybVZlcmlmaWVkQXRUb3BMZXZlbCIsInRvSlNPTiIsInRlcm1KU09OIiwidGVybVRvVGVybUpTT04iLCJqc29uIiwiZnJvbUpTT04iLCJ0ZXJtRnJvbUpTT04iLCJmcm9tQ29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUiLCJjb25zdHJ1Y3RvckRlY2xhcmF0aW9uTm9kZSIsIlRlcm0iLCJkb20iLCJUeXBlIiwidGVybU5vZGUiLCJ0eXBlTm9kZSIsImxvY2FsQ29udGV4dCIsIkxvY2FsQ29udGV4dCIsImZyb21GaWxlQ29udGV4dCIsImZyb21UeXBlTm9kZSIsImZyb21UZXJtTm9kZUFuZFR5cGUiLCJ0eXBlTmFtZSIsImdldE5hbWUiXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7ZUFZcUJBOztJQW9HTEMscUJBQXFCO2VBQXJCQTs7OzBEQTlHQTs0REFDUztxQkFFQzsyQkFDZTtvQkFDSTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUU3QyxJQUFNQyxnQkFBZ0JDLElBQUFBLGdCQUFTLEVBQUMsaUNBQzFCQyxnQkFBZ0JELElBQUFBLGdCQUFTLEVBQUM7QUFFakIsSUFBQSxBQUFNSCw0QkFBTjthQUFNQSxZQUNQSyxNQUFNLEVBQUVDLElBQUk7Z0NBRExOO1FBRWpCLElBQUksQ0FBQ0ssTUFBTSxHQUFHQTtRQUNkLElBQUksQ0FBQ0MsSUFBSSxHQUFHQTs7a0JBSEtOOztZQU1uQk8sS0FBQUE7bUJBQUFBLFNBQUFBO2dCQUNFLE9BQU8sSUFBSSxDQUFDRixNQUFNO1lBQ3BCOzs7WUFFQUcsS0FBQUE7bUJBQUFBLFNBQUFBO2dCQUNFLE9BQU8sSUFBSSxDQUFDRixJQUFJO1lBQ2xCOzs7WUFFQUcsS0FBQUE7bUJBQUFBLFNBQUFBO2dCQUFZLE9BQU8sSUFBSSxDQUFDSCxJQUFJLENBQUNHLE9BQU87WUFBSTs7O1lBRXhDQyxLQUFBQTttQkFBQUEsU0FBQUEsVUFBVUosSUFBSSxFQUFFSyxPQUFPLEVBQUVDLFdBQVc7Z0JBQ2xDLElBQUlDLGNBQWM7Z0JBRWxCLElBQU1DLGNBQWMsSUFBSSxFQUNsQkMsYUFBYVQsS0FBS0MsU0FBUyxJQUMzQlMsb0JBQW9CRixZQUFZUCxTQUFTO2dCQUUvQ0ksUUFBUU0sS0FBSyxDQUFDLEFBQUMsaUJBQThDRCxPQUE5QkQsWUFBVyxxQkFBcUMsT0FBbEJDLG1CQUFrQixxQkFBbUJWO2dCQUVsRyxJQUFNWSw2QkFBNkJDLElBQUFBLHFDQUF3QixFQUFDYixNQUFNUSxhQUFhSDtnQkFFL0UsSUFBSU8sNEJBQTRCO29CQUM5QixJQUFJRTtvQkFFSixJQUFNQyxPQUFPUCxZQUFZTCxPQUFPO29CQUVoQ0gsS0FBS2dCLE9BQU8sQ0FBQ0Q7b0JBRWJELGdCQUFnQlI7b0JBRWhCQyxjQUFjTyxlQUFnQixHQUFHO2dCQUNuQztnQkFFQSxJQUFJUCxhQUFhO29CQUNmRixRQUFRWSxLQUFLLENBQUMsQUFBQyxtQkFBZ0RQLE9BQTlCRCxZQUFXLHFCQUFxQyxPQUFsQkMsbUJBQWtCLG1CQUFpQlY7Z0JBQ3BHO2dCQUVBLE9BQU9PO1lBQ1Q7OztZQUVBVyxLQUFBQTttQkFBQUEsU0FBQUEsbUJBQW1CQyxXQUFXO2dCQUM1QixJQUFJQztnQkFFSixJQUFNVixvQkFBb0IsSUFBSSxDQUFDWCxNQUFNLEVBQUcsR0FBRztnQkFFM0NvQixZQUFZUixLQUFLLENBQUMsQUFBQyxrQkFBbUMsT0FBbEJELG1CQUFrQjtnQkFFdEQsSUFBTVcseUJBQXlCLElBQUksQ0FBQ3JCLElBQUksQ0FBQ2tCLGtCQUFrQixDQUFDQztnQkFFNUQsSUFBSUUsd0JBQXdCO29CQUMxQkQsdUJBQXVCLE1BQU0sR0FBRztnQkFDbEM7Z0JBRUEsSUFBSUEsc0JBQXNCO29CQUN4QkQsWUFBWUYsS0FBSyxDQUFDLEFBQUMsb0JBQXFDLE9BQWxCUCxtQkFBa0I7Z0JBQzFEO2dCQUVBLE9BQU9VO1lBQ1Q7OztZQUVBRSxLQUFBQTttQkFBQUEsU0FBQUE7Z0JBQ0UsSUFBTUMsV0FBV0MsSUFBQUEsb0JBQWMsRUFBQyxJQUFJLENBQUN4QixJQUFJLEdBQ25DQSxPQUFPdUIsVUFDUEUsT0FBTztvQkFDTHpCLE1BQUFBO2dCQUNGO2dCQUVOLE9BQU95QjtZQUNUOzs7O1lBRU9DLEtBQUFBO21CQUFQLFNBQU9BLFNBQVNELElBQUksRUFBRU4sV0FBVztnQkFDL0IsSUFBTW5CLE9BQU8yQixJQUFBQSxrQkFBWSxFQUFDRixNQUFNTixjQUMxQkosT0FBT2YsS0FBS0csT0FBTyxJQUNuQkosU0FBU0osc0JBQXNCSyxNQUFNZSxPQUNyQ1AsY0FBYyxJQWhGSGQsWUFnRm1CSyxRQUFRQztnQkFFNUMsT0FBT1E7WUFDVDs7O1lBRU9vQixLQUFBQTttQkFBUCxTQUFPQSwrQkFBK0JDLDBCQUEwQixFQUFFVixXQUFXO2dCQUMzRSxJQUFRVyxPQUFlQyxZQUFHLENBQWxCRCxNQUFNRSxPQUFTRCxZQUFHLENBQVpDLE1BQ1JDLFdBQVdyQyxjQUFjaUMsNkJBQ3pCSyxXQUFXcEMsY0FBYytCLDZCQUN6Qk0sZUFBZUMsY0FBWSxDQUFDQyxlQUFlLENBQUNsQixjQUM1Q2QsVUFBVThCLGNBQ1ZwQixPQUFPaUIsS0FBS00sWUFBWSxDQUFDSixXQUN6QmxDLE9BQU84QixLQUFLUyxtQkFBbUIsQ0FBQ04sVUFBVWxCLE1BQU1WLFVBQ2hETixTQUFTSixzQkFBc0JLLE1BQU1lLE9BQ3JDUCxjQUFjLElBOUZIZCxZQThGbUJLLFFBQVFDO2dCQUU1QyxPQUFPUTtZQUNUOzs7V0FqR21CZDs7QUFvR2QsU0FBU0Msc0JBQXNCSyxJQUFJLEVBQUVlLElBQUk7SUFDOUMsSUFBSWhCO0lBRUosSUFBTVUsYUFBYVQsS0FBS0MsU0FBUztJQUVqQyxJQUFJYyxTQUFTLE1BQU07UUFDakJoQixTQUFTLEFBQUMsR0FBYSxPQUFYVTtJQUNkLE9BQU87UUFDTCxJQUFNK0IsV0FBV3pCLEtBQUswQixPQUFPO1FBRTdCMUMsU0FBUyxBQUFDLEdBQWdCeUMsT0FBZC9CLFlBQVcsS0FBWSxPQUFUK0I7SUFDNUI7SUFFQSxPQUFPekM7QUFDVCJ9