occam-verify-cli 0.0.518 → 0.0.520

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.
@@ -9,40 +9,93 @@ Object.defineProperty(exports, "default", {
9
9
  }
10
10
  });
11
11
  var _term = /*#__PURE__*/ _interopRequireDefault(require("../verify/term"));
12
+ var _equality = /*#__PURE__*/ _interopRequireDefault(require("../assertion/equality"));
13
+ var _equality1 = /*#__PURE__*/ _interopRequireDefault(require("../ocmbinator/equality"));
14
+ var _bracketed = /*#__PURE__*/ _interopRequireDefault(require("../ocmbinator/bracketed"));
12
15
  var _type = /*#__PURE__*/ _interopRequireDefault(require("../verify/assertion/type"));
13
16
  var _array = require("../utilities/array");
17
+ var _type1 = require("../type");
14
18
  var _string = require("../utilities/string");
19
+ var _typeNames = require("../typeNames");
15
20
  var _metaTypes = require("../metaTypes");
16
21
  var _query = require("../utilities/query");
17
22
  var _ruleNames = require("../ruleNames");
18
- var _bracketed = /*#__PURE__*/ _interopRequireDefault(require("../ocmbinator/bracketed"));
23
+ function _arrayLikeToArray(arr, len) {
24
+ if (len == null || len > arr.length) len = arr.length;
25
+ for(var i = 0, arr2 = new Array(len); i < len; i++)arr2[i] = arr[i];
26
+ return arr2;
27
+ }
28
+ function _arrayWithoutHoles(arr) {
29
+ if (Array.isArray(arr)) return _arrayLikeToArray(arr);
30
+ }
19
31
  function _interopRequireDefault(obj) {
20
32
  return obj && obj.__esModule ? obj : {
21
33
  default: obj
22
34
  };
23
35
  }
36
+ function _iterableToArray(iter) {
37
+ if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter);
38
+ }
39
+ function _nonIterableSpread() {
40
+ throw new TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
41
+ }
42
+ function _toConsumableArray(arr) {
43
+ return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread();
44
+ }
45
+ function _unsupportedIterableToArray(o, minLen) {
46
+ if (!o) return;
47
+ if (typeof o === "string") return _arrayLikeToArray(o, minLen);
48
+ var n = Object.prototype.toString.call(o).slice(8, -1);
49
+ if (n === "Object" && o.constructor) n = o.constructor.name;
50
+ if (n === "Map" || n === "Set") return Array.from(n);
51
+ if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);
52
+ }
24
53
  var termNodeQuery = (0, _query.nodeQuery)("/argument/term!"), typeNodeQuery = (0, _query.nodeQuery)("/argument/type!"), metaTypeNodeQuery = (0, _query.nodeQuery)("/metaArgument/metaType!/@meta-type"), statementNodeQuery = (0, _query.nodeQuery)("/metaArgument/statement!"), typeAssertionNodeQuery = (0, _query.nodeQuery)("/statement/typeAssertion!");
25
54
  function verifyStatement(statementNode, assertions, proofContext) {
26
55
  var statementVerified = false;
27
56
  proofContext.begin(statementNode);
28
- var typeAssertionNode = typeAssertionNodeQuery(statementNode);
29
- if (typeAssertionNode !== null) {
30
- var typeAssertionVerified = (0, _type.default)(typeAssertionNode, assertions, proofContext);
31
- statementVerified = typeAssertionVerified; ///
32
- } else {
33
- var context = proofContext, statementVerifiedAgainstCombinators = verifyStatementAgainstCombinators(statementNode, context);
57
+ if (!statementVerified) {
58
+ var statementVerifiedAsEquality = verifyStatementAsEquality(statementNode, assertions, proofContext);
59
+ statementVerified = statementVerifiedAsEquality; //
60
+ }
61
+ if (!statementVerified) {
62
+ var statementVerifiedAsTypeAssertion = verifyStatementAsTypeAssertion(statementNode, assertions, proofContext);
63
+ statementVerified = statementVerifiedAsTypeAssertion; ///
64
+ }
65
+ if (!statementVerified) {
66
+ var statementVerifiedAgainstCombinators = verifyStatementAgainstCombinators(statementNode, proofContext);
34
67
  statementVerified = statementVerifiedAgainstCombinators; ///
35
68
  }
36
69
  statementVerified ? proofContext.complete(statementNode) : proofContext.halt(statementNode);
37
70
  return statementVerified;
38
71
  }
39
- function verifyStatementAgainstCombinators(statementNode, context) {
72
+ function verifyStatementAsEquality(statementNode, assertions, proofContext) {
73
+ var statementVerifiedAsEquality = false;
74
+ var combinator = _equality1.default, statementVerifiedAgainstCombinator = verifyStatementAgainstCombinator(statementNode, combinator, proofContext);
75
+ if (statementVerifiedAgainstCombinator) {
76
+ var equalityAssertion = _equality.default.fromStatementNode(statementNode), assertion = equalityAssertion; ///
77
+ assertions.push(assertion);
78
+ statementVerifiedAsEquality = true;
79
+ }
80
+ return statementVerifiedAsEquality;
81
+ }
82
+ function verifyStatementAsTypeAssertion(statementNode, assertions, proofContext) {
83
+ var statementVerifiedAsTypeAssertion = false;
84
+ var typeAssertionNode = typeAssertionNodeQuery(statementNode);
85
+ if (typeAssertionNode !== null) {
86
+ var typeAssertionVerified = (0, _type.default)(typeAssertionNode, assertions, proofContext);
87
+ statementVerifiedAsTypeAssertion = typeAssertionVerified; ///
88
+ }
89
+ return statementVerifiedAsTypeAssertion;
90
+ }
91
+ function verifyStatementAgainstCombinators(statementNode, proofContext) {
40
92
  var statementVerifiedAgainstCombinators = false;
41
- context.begin(statementNode);
42
- var combinators = context.getCombinators();
43
- combinators.unshift(_bracketed.default);
93
+ var combinators = proofContext.getCombinators();
94
+ combinators = [
95
+ _bracketed.default
96
+ ].concat(_toConsumableArray(combinators));
44
97
  var combinator = combinators.find(function(combinator) {
45
- var statementVerifiedAgainstCombinator = verifyStatementAgainstCombinator(statementNode, combinator, context);
98
+ var statementVerifiedAgainstCombinator = verifyStatementAgainstCombinator(statementNode, combinator, proofContext);
46
99
  if (statementVerifiedAgainstCombinator) {
47
100
  return true;
48
101
  }
@@ -50,33 +103,32 @@ function verifyStatementAgainstCombinators(statementNode, context) {
50
103
  if (combinator !== null) {
51
104
  statementVerifiedAgainstCombinators = true;
52
105
  }
53
- statementVerifiedAgainstCombinators ? context.complete(statementNode) : context.halt(statementNode);
54
106
  return statementVerifiedAgainstCombinators;
55
107
  }
56
- function verifyStatementAgainstCombinator(statementNode, combinator, context) {
57
- var combinatorStatementNode = combinator.getStatementNode(), node = statementNode, combinatorNode = combinatorStatementNode, nodeVerified = verifyNode(node, combinatorNode, context), statementVerifiedAgainstCombinator = nodeVerified; ///
108
+ function verifyStatementAgainstCombinator(statementNode, combinator, proofContext) {
109
+ var combinatorStatementNode = combinator.getStatementNode(), node = statementNode, combinatorNode = combinatorStatementNode, nodeVerified = verifyNode(node, combinatorNode, proofContext), statementVerifiedAgainstCombinator = nodeVerified; ///
58
110
  return statementVerifiedAgainstCombinator;
59
111
  }
60
- function verifyNode(node, combinatorNode, context) {
112
+ function verifyNode(node, combinatorNode, proofContext) {
61
113
  var nodeVerified;
62
114
  var nodeTerminalNode = node.isTerminalNode(), combinatorNodeTerminalNode = combinatorNode.isTerminalNode();
63
115
  if (nodeTerminalNode === combinatorNodeTerminalNode) {
64
116
  if (nodeTerminalNode) {
65
- var terminalNode = node, combinatorTerminalNode = combinatorNode, terminalNodeVerified = verifyTerminalNode(terminalNode, combinatorTerminalNode, context);
117
+ var terminalNode = node, combinatorTerminalNode = combinatorNode, terminalNodeVerified = verifyTerminalNode(terminalNode, combinatorTerminalNode, proofContext);
66
118
  nodeVerified = terminalNodeVerified; ///
67
119
  } else {
68
- var nonTerminalNode = node, combinatorNonTerminalNode = combinatorNode, nonTerminalNodeVerified = verifyNonTerminalNode(nonTerminalNode, combinatorNonTerminalNode, context);
120
+ var nonTerminalNode = node, combinatorNonTerminalNode = combinatorNode, nonTerminalNodeVerified = verifyNonTerminalNode(nonTerminalNode, combinatorNonTerminalNode, proofContext);
69
121
  nodeVerified = nonTerminalNodeVerified; ///
70
122
  }
71
123
  }
72
124
  return nodeVerified;
73
125
  }
74
- function verifyNodes(nodes, combinatorNodes, context) {
126
+ function verifyNodes(nodes, combinatorNodes, proofContext) {
75
127
  var nodesVerified = false;
76
128
  var nodesLength = nodes.length, combinatorNodesLength = combinatorNodes.length;
77
129
  if (nodesLength === combinatorNodesLength) {
78
130
  nodesVerified = nodes.every(function(node, index) {
79
- var combinatorNode = combinatorNodes[index], nodeVerified = verifyNode(node, combinatorNode, context);
131
+ var combinatorNode = combinatorNodes[index], nodeVerified = verifyNode(node, combinatorNode, proofContext);
80
132
  if (nodeVerified) {
81
133
  return true;
82
134
  }
@@ -84,7 +136,7 @@ function verifyNodes(nodes, combinatorNodes, context) {
84
136
  }
85
137
  return nodesVerified;
86
138
  }
87
- function verifyTerminalNode(terminalNode, combinatorTerminalNode, context) {
139
+ function verifyTerminalNode(terminalNode, combinatorTerminalNode, proofContext) {
88
140
  var terminalNodeVerified = false;
89
141
  var matches = terminalNode.match(combinatorTerminalNode);
90
142
  if (matches) {
@@ -92,26 +144,26 @@ function verifyTerminalNode(terminalNode, combinatorTerminalNode, context) {
92
144
  }
93
145
  return terminalNodeVerified;
94
146
  }
95
- function verifyNonTerminalNode(nonTerminalNode, combinatorNonTerminalNode, context) {
147
+ function verifyNonTerminalNode(nonTerminalNode, combinatorNonTerminalNode, proofContext) {
96
148
  var nonTerminalNodeVerified = false;
97
149
  var ruleName = nonTerminalNode.getRuleName(), combinatorRuleName = combinatorNonTerminalNode.getRuleName(); ///
98
150
  if (ruleName === combinatorRuleName) {
99
151
  switch(ruleName){
100
152
  case _ruleNames.ARGUMENT_RULE_NAME:
101
153
  {
102
- var argumentNode = nonTerminalNode, combinatorArgumentNode = combinatorNonTerminalNode, argumentNodeVerified = verifyArgumentNode(argumentNode, combinatorArgumentNode, context);
154
+ var argumentNode = nonTerminalNode, combinatorArgumentNode = combinatorNonTerminalNode, argumentNodeVerified = verifyArgumentNode(argumentNode, combinatorArgumentNode, proofContext);
103
155
  nonTerminalNodeVerified = argumentNodeVerified; ///
104
156
  break;
105
157
  }
106
158
  case _ruleNames.META_ARGUMENT_RULE_NAME:
107
159
  {
108
- var metaArgumentNode = nonTerminalNode, combinatorMetaargumentNode = combinatorNonTerminalNode, metaArgumentNodeVerified = verifyMetaargumentNode(metaArgumentNode, combinatorMetaargumentNode, context);
160
+ var metaArgumentNode = nonTerminalNode, combinatorMetaargumentNode = combinatorNonTerminalNode, metaArgumentNodeVerified = verifyMetaargumentNode(metaArgumentNode, combinatorMetaargumentNode, proofContext);
109
161
  nonTerminalNodeVerified = metaArgumentNodeVerified; ///
110
162
  break;
111
163
  }
112
164
  default:
113
165
  {
114
- var childNodes = nonTerminalNode.getChildNodes(), combinatorChildNodes = combinatorNonTerminalNode.getChildNodes(), nodes = childNodes, combinatorNodes = combinatorChildNodes, nodesVerified = verifyNodes(nodes, combinatorNodes, context);
166
+ var childNodes = nonTerminalNode.getChildNodes(), combinatorChildNodes = combinatorNonTerminalNode.getChildNodes(), nodes = childNodes, combinatorNodes = combinatorChildNodes, nodesVerified = verifyNodes(nodes, combinatorNodes, proofContext);
115
167
  nonTerminalNodeVerified = nodesVerified; ///
116
168
  break;
117
169
  }
@@ -119,16 +171,16 @@ function verifyNonTerminalNode(nonTerminalNode, combinatorNonTerminalNode, conte
119
171
  }
120
172
  return nonTerminalNodeVerified;
121
173
  }
122
- function verifyArgumentNode(argumentNode, combinatorArgumentNode, context) {
174
+ function verifyArgumentNode(argumentNode, combinatorArgumentNode, proofContext) {
123
175
  var argumentNodeVerified = false;
124
176
  var termNode = termNodeQuery(argumentNode);
125
177
  if (termNode === null) {
126
178
  var argumentString = (0, _string.nodeAsString)(argumentNode);
127
- context.error("The ".concat(argumentString, " argument should be a term, not a type"));
179
+ proofContext.error("The ".concat(argumentString, " argument should be a term, not a type"));
128
180
  } else {
129
- var types = [], termVerified = (0, _term.default)(termNode, types, context);
181
+ var types = [], context = proofContext, termVerified = (0, _term.default)(termNode, types, context);
130
182
  if (termVerified) {
131
- var firstType = (0, _array.first)(types), termType = firstType, typeNode = typeNodeQuery(combinatorArgumentNode), typeName = (0, _query.typeNameFromTypeNode)(typeNode), type = context.findTypeByTypeName(typeName), statementTypeEqualToOrSubTypeOfType = termType.isEqualToOrSubTypeOf(type);
183
+ var firstType = (0, _array.first)(types), termType = firstType, typeNode = typeNodeQuery(combinatorArgumentNode), typeName = (0, _query.typeNameFromTypeNode)(typeNode), type = typeName === _typeNames.OBJECT_TYPE_NAME ? _type1.objectType : proofContext.findTypeByTypeName(typeName), statementTypeEqualToOrSubTypeOfType = termType.isEqualToOrSubTypeOf(type);
132
184
  if (statementTypeEqualToOrSubTypeOfType) {
133
185
  argumentNodeVerified = true;
134
186
  }
@@ -136,14 +188,14 @@ function verifyArgumentNode(argumentNode, combinatorArgumentNode, context) {
136
188
  }
137
189
  return argumentNodeVerified;
138
190
  }
139
- function verifyMetaargumentNode(metaArgumentNode, combinatorMetaargumentNode, context) {
191
+ function verifyMetaargumentNode(metaArgumentNode, combinatorMetaargumentNode, proofContext) {
140
192
  var metaArgumentNodeVerified = false;
141
193
  var statementNode = statementNodeQuery(metaArgumentNode);
142
194
  if (statementNode === null) {
143
195
  var metaArgumentString = (0, _string.nodeAsString)(metaArgumentNode);
144
- context.error("The '".concat(metaArgumentString, "' meta-argument should be a statement, not a meta-type."));
196
+ proofContext.error("The '".concat(metaArgumentString, "' meta-argument should be a statement, not a meta-type."));
145
197
  } else {
146
- var assertions = null, statementVerified = verifyStatement(statementNode, assertions, context);
198
+ var assertions = null, statementVerified = verifyStatement(statementNode, assertions, proofContext);
147
199
  if (statementVerified) {
148
200
  var combinatorMetaTYpeNode = metaTypeNodeQuery(combinatorMetaargumentNode);
149
201
  if (combinatorMetaTYpeNode !== null) {
@@ -152,11 +204,11 @@ function verifyMetaargumentNode(metaArgumentNode, combinatorMetaargumentNode, co
152
204
  }
153
205
  if (!metaArgumentNodeVerified) {
154
206
  var combinatorMetaargumentString = (0, _string.nodeAsString)(combinatorMetaargumentNode);
155
- context.error("The '".concat(combinatorMetaargumentString, "' combinator meta-argument should be the 'Statement' meta-type."));
207
+ proofContext.error("The '".concat(combinatorMetaargumentString, "' combinator meta-argument should be the 'Statement' meta-type."));
156
208
  }
157
209
  }
158
210
  }
159
211
  return metaArgumentNodeVerified;
160
212
  }
161
213
 
162
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy92ZXJpZnkvc3RhdGVtZW50LmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgdmVyaWZ5VGVybSBmcm9tIFwiLi4vdmVyaWZ5L3Rlcm1cIjtcbmltcG9ydCB2ZXJpZnlUeXBlQXNzZXJ0aW9uIGZyb20gXCIuLi92ZXJpZnkvYXNzZXJ0aW9uL3R5cGVcIjtcblxuaW1wb3J0IHsgZmlyc3QgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2FycmF5XCI7XG5pbXBvcnQgeyBub2RlQXNTdHJpbmcgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL3N0cmluZ1wiO1xuaW1wb3J0IHsgU1RBVEVNRU5UX01FVEFfVFlQRSB9IGZyb20gXCIuLi9tZXRhVHlwZXNcIjtcbmltcG9ydCB7IG5vZGVRdWVyeSwgdHlwZU5hbWVGcm9tVHlwZU5vZGUgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL3F1ZXJ5XCI7XG5pbXBvcnQgeyBBUkdVTUVOVF9SVUxFX05BTUUsIE1FVEFfQVJHVU1FTlRfUlVMRV9OQU1FIH0gZnJvbSBcIi4uL3J1bGVOYW1lc1wiO1xuaW1wb3J0IGJyYWNrZXRlZENvbWJpbmF0b3IgZnJvbSBcIi4uL29jbWJpbmF0b3IvYnJhY2tldGVkXCI7XG5cbmNvbnN0IHRlcm1Ob2RlUXVlcnkgPSBub2RlUXVlcnkoXCIvYXJndW1lbnQvdGVybSFcIiksXG4gICAgICB0eXBlTm9kZVF1ZXJ5ID0gbm9kZVF1ZXJ5KFwiL2FyZ3VtZW50L3R5cGUhXCIpLFxuICAgICAgbWV0YVR5cGVOb2RlUXVlcnkgPSBub2RlUXVlcnkoXCIvbWV0YUFyZ3VtZW50L21ldGFUeXBlIS9AbWV0YS10eXBlXCIpLFxuICAgICAgc3RhdGVtZW50Tm9kZVF1ZXJ5ID0gbm9kZVF1ZXJ5KFwiL21ldGFBcmd1bWVudC9zdGF0ZW1lbnQhXCIpLFxuICAgICAgdHlwZUFzc2VydGlvbk5vZGVRdWVyeSA9IG5vZGVRdWVyeShcIi9zdGF0ZW1lbnQvdHlwZUFzc2VydGlvbiFcIik7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHZlcmlmeVN0YXRlbWVudChzdGF0ZW1lbnROb2RlLCBhc3NlcnRpb25zLCBwcm9vZkNvbnRleHQpIHtcbiAgbGV0IHN0YXRlbWVudFZlcmlmaWVkID0gZmFsc2U7XG5cbiAgcHJvb2ZDb250ZXh0LmJlZ2luKHN0YXRlbWVudE5vZGUpO1xuXG4gIGNvbnN0IHR5cGVBc3NlcnRpb25Ob2RlID0gdHlwZUFzc2VydGlvbk5vZGVRdWVyeShzdGF0ZW1lbnROb2RlKTtcblxuICBpZiAodHlwZUFzc2VydGlvbk5vZGUgIT09IG51bGwpIHtcbiAgICBjb25zdCB0eXBlQXNzZXJ0aW9uVmVyaWZpZWQgPSB2ZXJpZnlUeXBlQXNzZXJ0aW9uKHR5cGVBc3NlcnRpb25Ob2RlLCBhc3NlcnRpb25zLCBwcm9vZkNvbnRleHQpO1xuXG4gICAgc3RhdGVtZW50VmVyaWZpZWQgPSB0eXBlQXNzZXJ0aW9uVmVyaWZpZWQ7IC8vL1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IGNvbnRleHQgPSBwcm9vZkNvbnRleHQsIC8vL1xuICAgICAgICAgIHN0YXRlbWVudFZlcmlmaWVkQWdhaW5zdENvbWJpbmF0b3JzID0gdmVyaWZ5U3RhdGVtZW50QWdhaW5zdENvbWJpbmF0b3JzKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpO1xuXG4gICAgc3RhdGVtZW50VmVyaWZpZWQgPSBzdGF0ZW1lbnRWZXJpZmllZEFnYWluc3RDb21iaW5hdG9yczsgIC8vL1xuICB9XG5cbiAgc3RhdGVtZW50VmVyaWZpZWQgP1xuICAgIHByb29mQ29udGV4dC5jb21wbGV0ZShzdGF0ZW1lbnROb2RlKSA6XG4gICAgICBwcm9vZkNvbnRleHQuaGFsdChzdGF0ZW1lbnROb2RlKTtcblxuICByZXR1cm4gc3RhdGVtZW50VmVyaWZpZWQ7XG59XG5cbmZ1bmN0aW9uIHZlcmlmeVN0YXRlbWVudEFnYWluc3RDb21iaW5hdG9ycyhzdGF0ZW1lbnROb2RlLCBjb250ZXh0KSB7XG4gIGxldCBzdGF0ZW1lbnRWZXJpZmllZEFnYWluc3RDb21iaW5hdG9ycyA9IGZhbHNlO1xuXG4gIGNvbnRleHQuYmVnaW4oc3RhdGVtZW50Tm9kZSk7XG5cbiAgY29uc3QgY29tYmluYXRvcnMgPSBjb250ZXh0LmdldENvbWJpbmF0b3JzKCk7XG5cbiAgY29tYmluYXRvcnMudW5zaGlmdChicmFja2V0ZWRDb21iaW5hdG9yKTtcblxuICBjb25zdCBjb21iaW5hdG9yID0gY29tYmluYXRvcnMuZmluZCgoY29tYmluYXRvcikgPT4ge1xuICAgICAgICAgIGNvbnN0IHN0YXRlbWVudFZlcmlmaWVkQWdhaW5zdENvbWJpbmF0b3IgPSB2ZXJpZnlTdGF0ZW1lbnRBZ2FpbnN0Q29tYmluYXRvcihzdGF0ZW1lbnROb2RlLCBjb21iaW5hdG9yLCBjb250ZXh0KTtcblxuICAgICAgICAgIGlmIChzdGF0ZW1lbnRWZXJpZmllZEFnYWluc3RDb21iaW5hdG9yKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pIHx8IG51bGw7XG5cbiAgaWYgKGNvbWJpbmF0b3IgIT09IG51bGwpIHtcbiAgICBzdGF0ZW1lbnRWZXJpZmllZEFnYWluc3RDb21iaW5hdG9ycyA9IHRydWU7XG4gIH1cblxuICBzdGF0ZW1lbnRWZXJpZmllZEFnYWluc3RDb21iaW5hdG9ycyA/XG4gICAgY29udGV4dC5jb21wbGV0ZShzdGF0ZW1lbnROb2RlKSA6XG4gICAgICBjb250ZXh0LmhhbHQoc3RhdGVtZW50Tm9kZSk7XG5cbiAgcmV0dXJuIHN0YXRlbWVudFZlcmlmaWVkQWdhaW5zdENvbWJpbmF0b3JzO1xufVxuXG5mdW5jdGlvbiB2ZXJpZnlTdGF0ZW1lbnRBZ2FpbnN0Q29tYmluYXRvcihzdGF0ZW1lbnROb2RlLCBjb21iaW5hdG9yLCBjb250ZXh0KSB7XG4gIGNvbnN0IGNvbWJpbmF0b3JTdGF0ZW1lbnROb2RlID0gY29tYmluYXRvci5nZXRTdGF0ZW1lbnROb2RlKCksXG4gICAgICAgIG5vZGUgPSBzdGF0ZW1lbnROb2RlLCAgLy8vXG4gICAgICAgIGNvbWJpbmF0b3JOb2RlID0gY29tYmluYXRvclN0YXRlbWVudE5vZGUsIC8vL1xuICAgICAgICBub2RlVmVyaWZpZWQgPSB2ZXJpZnlOb2RlKG5vZGUsIGNvbWJpbmF0b3JOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgc3RhdGVtZW50VmVyaWZpZWRBZ2FpbnN0Q29tYmluYXRvciA9IG5vZGVWZXJpZmllZDsgIC8vL1xuXG4gIHJldHVybiBzdGF0ZW1lbnRWZXJpZmllZEFnYWluc3RDb21iaW5hdG9yO1xufVxuXG5mdW5jdGlvbiB2ZXJpZnlOb2RlKG5vZGUsIGNvbWJpbmF0b3JOb2RlLCBjb250ZXh0KSB7XG4gIGxldCBub2RlVmVyaWZpZWQ7XG5cbiAgY29uc3Qgbm9kZVRlcm1pbmFsTm9kZSA9IG5vZGUuaXNUZXJtaW5hbE5vZGUoKSxcbiAgICAgICAgY29tYmluYXRvck5vZGVUZXJtaW5hbE5vZGUgPSBjb21iaW5hdG9yTm9kZS5pc1Rlcm1pbmFsTm9kZSgpO1xuXG4gIGlmIChub2RlVGVybWluYWxOb2RlID09PSBjb21iaW5hdG9yTm9kZVRlcm1pbmFsTm9kZSkge1xuICAgIGlmIChub2RlVGVybWluYWxOb2RlKSB7XG4gICAgICBjb25zdCB0ZXJtaW5hbE5vZGUgPSBub2RlLCAgLy8vXG4gICAgICAgICAgICBjb21iaW5hdG9yVGVybWluYWxOb2RlID0gY29tYmluYXRvck5vZGUsICAvLy9cbiAgICAgICAgICAgIHRlcm1pbmFsTm9kZVZlcmlmaWVkID0gdmVyaWZ5VGVybWluYWxOb2RlKHRlcm1pbmFsTm9kZSwgY29tYmluYXRvclRlcm1pbmFsTm9kZSwgY29udGV4dCk7XG5cbiAgICAgIG5vZGVWZXJpZmllZCA9IHRlcm1pbmFsTm9kZVZlcmlmaWVkOyAgLy8vXG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IG5vblRlcm1pbmFsTm9kZSA9IG5vZGUsIC8vL1xuICAgICAgICAgICAgY29tYmluYXRvck5vblRlcm1pbmFsTm9kZSA9IGNvbWJpbmF0b3JOb2RlLCAgLy8vXG4gICAgICAgICAgICBub25UZXJtaW5hbE5vZGVWZXJpZmllZCA9IHZlcmlmeU5vblRlcm1pbmFsTm9kZShub25UZXJtaW5hbE5vZGUsIGNvbWJpbmF0b3JOb25UZXJtaW5hbE5vZGUsIGNvbnRleHQpO1xuXG4gICAgICBub2RlVmVyaWZpZWQgPSBub25UZXJtaW5hbE5vZGVWZXJpZmllZDsgLy8vXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG5vZGVWZXJpZmllZDtcbn1cblxuZnVuY3Rpb24gdmVyaWZ5Tm9kZXMobm9kZXMsIGNvbWJpbmF0b3JOb2RlcywgY29udGV4dCkge1xuICBsZXQgbm9kZXNWZXJpZmllZCA9IGZhbHNlO1xuXG4gIGNvbnN0IG5vZGVzTGVuZ3RoID0gbm9kZXMubGVuZ3RoLFxuICAgICAgICBjb21iaW5hdG9yTm9kZXNMZW5ndGggPSBjb21iaW5hdG9yTm9kZXMubGVuZ3RoO1xuXG4gIGlmIChub2Rlc0xlbmd0aCA9PT0gY29tYmluYXRvck5vZGVzTGVuZ3RoKSB7XG4gICAgbm9kZXNWZXJpZmllZCA9IG5vZGVzLmV2ZXJ5KChub2RlLCBpbmRleCkgPT4ge1xuICAgICAgY29uc3QgY29tYmluYXRvck5vZGUgPSBjb21iaW5hdG9yTm9kZXNbaW5kZXhdLFxuICAgICAgICAgICAgbm9kZVZlcmlmaWVkID0gdmVyaWZ5Tm9kZShub2RlLCBjb21iaW5hdG9yTm9kZSwgY29udGV4dCk7XG5cbiAgICAgIGlmIChub2RlVmVyaWZpZWQpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gbm9kZXNWZXJpZmllZDtcbn1cblxuZnVuY3Rpb24gdmVyaWZ5VGVybWluYWxOb2RlKHRlcm1pbmFsTm9kZSwgY29tYmluYXRvclRlcm1pbmFsTm9kZSwgY29udGV4dCkge1xuICBsZXQgdGVybWluYWxOb2RlVmVyaWZpZWQgPSBmYWxzZTtcblxuICBjb25zdCBtYXRjaGVzID0gdGVybWluYWxOb2RlLm1hdGNoKGNvbWJpbmF0b3JUZXJtaW5hbE5vZGUpO1xuXG4gIGlmIChtYXRjaGVzKSB7XG4gICAgdGVybWluYWxOb2RlVmVyaWZpZWQgPSB0cnVlO1xuICB9XG5cbiAgcmV0dXJuIHRlcm1pbmFsTm9kZVZlcmlmaWVkO1xufVxuXG5mdW5jdGlvbiB2ZXJpZnlOb25UZXJtaW5hbE5vZGUobm9uVGVybWluYWxOb2RlLCBjb21iaW5hdG9yTm9uVGVybWluYWxOb2RlLCBjb250ZXh0KSB7XG4gIGxldCBub25UZXJtaW5hbE5vZGVWZXJpZmllZCA9IGZhbHNlO1xuXG4gIGNvbnN0IHJ1bGVOYW1lID0gbm9uVGVybWluYWxOb2RlLmdldFJ1bGVOYW1lKCksIC8vL1xuICAgICAgICBjb21iaW5hdG9yUnVsZU5hbWUgPSBjb21iaW5hdG9yTm9uVGVybWluYWxOb2RlLmdldFJ1bGVOYW1lKCk7IC8vL1xuXG4gIGlmIChydWxlTmFtZSA9PT0gY29tYmluYXRvclJ1bGVOYW1lKSB7XG4gICAgc3dpdGNoIChydWxlTmFtZSkge1xuICAgICAgY2FzZSBBUkdVTUVOVF9SVUxFX05BTUU6IHtcbiAgICAgICAgY29uc3QgYXJndW1lbnROb2RlID0gbm9uVGVybWluYWxOb2RlLCAvLy9cbiAgICAgICAgICAgICAgY29tYmluYXRvckFyZ3VtZW50Tm9kZSA9IGNvbWJpbmF0b3JOb25UZXJtaW5hbE5vZGUsIC8vL1xuICAgICAgICAgICAgICBhcmd1bWVudE5vZGVWZXJpZmllZCA9IHZlcmlmeUFyZ3VtZW50Tm9kZShhcmd1bWVudE5vZGUsIGNvbWJpbmF0b3JBcmd1bWVudE5vZGUsIGNvbnRleHQpO1xuXG4gICAgICAgIG5vblRlcm1pbmFsTm9kZVZlcmlmaWVkID0gYXJndW1lbnROb2RlVmVyaWZpZWQ7IC8vL1xuXG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBjYXNlIE1FVEFfQVJHVU1FTlRfUlVMRV9OQU1FOiB7XG4gICAgICAgIGNvbnN0IG1ldGFBcmd1bWVudE5vZGUgPSBub25UZXJtaW5hbE5vZGUsIC8vL1xuICAgICAgICAgICAgICBjb21iaW5hdG9yTWV0YWFyZ3VtZW50Tm9kZSA9IGNvbWJpbmF0b3JOb25UZXJtaW5hbE5vZGUsIC8vL1xuICAgICAgICAgICAgICBtZXRhQXJndW1lbnROb2RlVmVyaWZpZWQgPSB2ZXJpZnlNZXRhYXJndW1lbnROb2RlKG1ldGFBcmd1bWVudE5vZGUsIGNvbWJpbmF0b3JNZXRhYXJndW1lbnROb2RlLCBjb250ZXh0KTtcblxuICAgICAgICBub25UZXJtaW5hbE5vZGVWZXJpZmllZCA9IG1ldGFBcmd1bWVudE5vZGVWZXJpZmllZDsgLy8vXG5cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgY29uc3QgY2hpbGROb2RlcyA9IG5vblRlcm1pbmFsTm9kZS5nZXRDaGlsZE5vZGVzKCksXG4gICAgICAgICAgICAgIGNvbWJpbmF0b3JDaGlsZE5vZGVzID0gY29tYmluYXRvck5vblRlcm1pbmFsTm9kZS5nZXRDaGlsZE5vZGVzKCksXG4gICAgICAgICAgICAgIG5vZGVzID0gY2hpbGROb2RlcywgLy8vXG4gICAgICAgICAgICAgIGNvbWJpbmF0b3JOb2RlcyA9IGNvbWJpbmF0b3JDaGlsZE5vZGVzLCAvLy9cbiAgICAgICAgICAgICAgbm9kZXNWZXJpZmllZCA9IHZlcmlmeU5vZGVzKG5vZGVzLCBjb21iaW5hdG9yTm9kZXMsIGNvbnRleHQpO1xuXG4gICAgICAgIG5vblRlcm1pbmFsTm9kZVZlcmlmaWVkID0gbm9kZXNWZXJpZmllZDsgLy8vXG5cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG5vblRlcm1pbmFsTm9kZVZlcmlmaWVkO1xufVxuXG5mdW5jdGlvbiB2ZXJpZnlBcmd1bWVudE5vZGUoYXJndW1lbnROb2RlLCBjb21iaW5hdG9yQXJndW1lbnROb2RlLCBjb250ZXh0KSB7XG4gIGxldCBhcmd1bWVudE5vZGVWZXJpZmllZCA9IGZhbHNlO1xuXG4gIGNvbnN0IHRlcm1Ob2RlID0gdGVybU5vZGVRdWVyeShhcmd1bWVudE5vZGUpO1xuXG4gIGlmICh0ZXJtTm9kZSA9PT0gbnVsbCkge1xuICAgIGNvbnN0IGFyZ3VtZW50U3RyaW5nID0gbm9kZUFzU3RyaW5nKGFyZ3VtZW50Tm9kZSk7XG5cbiAgICBjb250ZXh0LmVycm9yKGBUaGUgJHthcmd1bWVudFN0cmluZ30gYXJndW1lbnQgc2hvdWxkIGJlIGEgdGVybSwgbm90IGEgdHlwZWApO1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IHR5cGVzID0gW10sXG4gICAgICAgICAgdGVybVZlcmlmaWVkID0gdmVyaWZ5VGVybSh0ZXJtTm9kZSwgdHlwZXMsIGNvbnRleHQpO1xuXG4gICAgaWYgKHRlcm1WZXJpZmllZCkge1xuICAgICAgY29uc3QgZmlyc3RUeXBlID0gZmlyc3QodHlwZXMpLFxuICAgICAgICAgICAgdGVybVR5cGUgPSBmaXJzdFR5cGUsIC8vL1xuICAgICAgICAgICAgdHlwZU5vZGUgPSB0eXBlTm9kZVF1ZXJ5KGNvbWJpbmF0b3JBcmd1bWVudE5vZGUpLFxuICAgICAgICAgICAgdHlwZU5hbWUgPSB0eXBlTmFtZUZyb21UeXBlTm9kZSh0eXBlTm9kZSksXG4gICAgICAgICAgICB0eXBlID0gY29udGV4dC5maW5kVHlwZUJ5VHlwZU5hbWUodHlwZU5hbWUpLFxuICAgICAgICAgICAgc3RhdGVtZW50VHlwZUVxdWFsVG9PclN1YlR5cGVPZlR5cGUgPSB0ZXJtVHlwZS5pc0VxdWFsVG9PclN1YlR5cGVPZih0eXBlKTtcblxuICAgICAgaWYgKHN0YXRlbWVudFR5cGVFcXVhbFRvT3JTdWJUeXBlT2ZUeXBlKSB7XG4gICAgICAgIGFyZ3VtZW50Tm9kZVZlcmlmaWVkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gYXJndW1lbnROb2RlVmVyaWZpZWQ7XG59XG5cbmZ1bmN0aW9uIHZlcmlmeU1ldGFhcmd1bWVudE5vZGUobWV0YUFyZ3VtZW50Tm9kZSwgY29tYmluYXRvck1ldGFhcmd1bWVudE5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IG1ldGFBcmd1bWVudE5vZGVWZXJpZmllZCA9IGZhbHNlO1xuXG4gIGNvbnN0IHN0YXRlbWVudE5vZGUgPSBzdGF0ZW1lbnROb2RlUXVlcnkobWV0YUFyZ3VtZW50Tm9kZSk7XG5cbiAgaWYgKHN0YXRlbWVudE5vZGUgPT09IG51bGwpIHtcbiAgICBjb25zdCBtZXRhQXJndW1lbnRTdHJpbmcgPSBub2RlQXNTdHJpbmcobWV0YUFyZ3VtZW50Tm9kZSk7XG5cbiAgICBjb250ZXh0LmVycm9yKGBUaGUgJyR7bWV0YUFyZ3VtZW50U3RyaW5nfScgbWV0YS1hcmd1bWVudCBzaG91bGQgYmUgYSBzdGF0ZW1lbnQsIG5vdCBhIG1ldGEtdHlwZS5gKTtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCBhc3NlcnRpb25zID0gbnVsbCxcbiAgICAgICAgICBzdGF0ZW1lbnRWZXJpZmllZCA9IHZlcmlmeVN0YXRlbWVudChzdGF0ZW1lbnROb2RlLCBhc3NlcnRpb25zLCBjb250ZXh0KTtcblxuICAgIGlmIChzdGF0ZW1lbnRWZXJpZmllZCkge1xuICAgICAgY29uc3QgY29tYmluYXRvck1ldGFUWXBlTm9kZSA9IG1ldGFUeXBlTm9kZVF1ZXJ5KGNvbWJpbmF0b3JNZXRhYXJndW1lbnROb2RlKTtcblxuICAgICAgaWYgKGNvbWJpbmF0b3JNZXRhVFlwZU5vZGUgIT09IG51bGwpIHtcbiAgICAgICAgY29uc3QgdGVybWluYWxOb2RlID0gY29tYmluYXRvck1ldGFUWXBlTm9kZSwgIC8vL1xuICAgICAgICAgICAgICB0ZXJtaW5hbE5vZGVDb250ZW50ID0gdGVybWluYWxOb2RlLmdldENvbnRlbnQoKSxcbiAgICAgICAgICAgICAgdGVybWluYWxOb2RlQ29udGVudFN0YXRlbWVudE1ldGFUeXBlID0gKHRlcm1pbmFsTm9kZUNvbnRlbnQgPT09IFNUQVRFTUVOVF9NRVRBX1RZUEUpO1xuXG4gICAgICAgIG1ldGFBcmd1bWVudE5vZGVWZXJpZmllZCA9IHRlcm1pbmFsTm9kZUNvbnRlbnRTdGF0ZW1lbnRNZXRhVHlwZTsgIC8vL1xuICAgICAgfVxuXG4gICAgICBpZiAoIW1ldGFBcmd1bWVudE5vZGVWZXJpZmllZCkge1xuICAgICAgICBjb25zdCBjb21iaW5hdG9yTWV0YWFyZ3VtZW50U3RyaW5nID0gbm9kZUFzU3RyaW5nKGNvbWJpbmF0b3JNZXRhYXJndW1lbnROb2RlKTtcblxuICAgICAgICBjb250ZXh0LmVycm9yKGBUaGUgJyR7Y29tYmluYXRvck1ldGFhcmd1bWVudFN0cmluZ30nIGNvbWJpbmF0b3IgbWV0YS1hcmd1bWVudCBzaG91bGQgYmUgdGhlICdTdGF0ZW1lbnQnIG1ldGEtdHlwZS5gKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gbWV0YUFyZ3VtZW50Tm9kZVZlcmlmaWVkO1xufVxuIl0sIm5hbWVzIjpbInZlcmlmeVN0YXRlbWVudCIsInRlcm1Ob2RlUXVlcnkiLCJub2RlUXVlcnkiLCJ0eXBlTm9kZVF1ZXJ5IiwibWV0YVR5cGVOb2RlUXVlcnkiLCJzdGF0ZW1lbnROb2RlUXVlcnkiLCJ0eXBlQXNzZXJ0aW9uTm9kZVF1ZXJ5Iiwic3RhdGVtZW50Tm9kZSIsImFzc2VydGlvbnMiLCJwcm9vZkNvbnRleHQiLCJzdGF0ZW1lbnRWZXJpZmllZCIsImJlZ2luIiwidHlwZUFzc2VydGlvbk5vZGUiLCJ0eXBlQXNzZXJ0aW9uVmVyaWZpZWQiLCJ2ZXJpZnlUeXBlQXNzZXJ0aW9uIiwiY29udGV4dCIsInN0YXRlbWVudFZlcmlmaWVkQWdhaW5zdENvbWJpbmF0b3JzIiwidmVyaWZ5U3RhdGVtZW50QWdhaW5zdENvbWJpbmF0b3JzIiwiY29tcGxldGUiLCJoYWx0IiwiY29tYmluYXRvcnMiLCJnZXRDb21iaW5hdG9ycyIsInVuc2hpZnQiLCJicmFja2V0ZWRDb21iaW5hdG9yIiwiY29tYmluYXRvciIsImZpbmQiLCJzdGF0ZW1lbnRWZXJpZmllZEFnYWluc3RDb21iaW5hdG9yIiwidmVyaWZ5U3RhdGVtZW50QWdhaW5zdENvbWJpbmF0b3IiLCJjb21iaW5hdG9yU3RhdGVtZW50Tm9kZSIsImdldFN0YXRlbWVudE5vZGUiLCJub2RlIiwiY29tYmluYXRvck5vZGUiLCJub2RlVmVyaWZpZWQiLCJ2ZXJpZnlOb2RlIiwibm9kZVRlcm1pbmFsTm9kZSIsImlzVGVybWluYWxOb2RlIiwiY29tYmluYXRvck5vZGVUZXJtaW5hbE5vZGUiLCJ0ZXJtaW5hbE5vZGUiLCJjb21iaW5hdG9yVGVybWluYWxOb2RlIiwidGVybWluYWxOb2RlVmVyaWZpZWQiLCJ2ZXJpZnlUZXJtaW5hbE5vZGUiLCJub25UZXJtaW5hbE5vZGUiLCJjb21iaW5hdG9yTm9uVGVybWluYWxOb2RlIiwibm9uVGVybWluYWxOb2RlVmVyaWZpZWQiLCJ2ZXJpZnlOb25UZXJtaW5hbE5vZGUiLCJ2ZXJpZnlOb2RlcyIsIm5vZGVzIiwiY29tYmluYXRvck5vZGVzIiwibm9kZXNWZXJpZmllZCIsIm5vZGVzTGVuZ3RoIiwibGVuZ3RoIiwiY29tYmluYXRvck5vZGVzTGVuZ3RoIiwiZXZlcnkiLCJpbmRleCIsIm1hdGNoZXMiLCJtYXRjaCIsInJ1bGVOYW1lIiwiZ2V0UnVsZU5hbWUiLCJjb21iaW5hdG9yUnVsZU5hbWUiLCJBUkdVTUVOVF9SVUxFX05BTUUiLCJhcmd1bWVudE5vZGUiLCJjb21iaW5hdG9yQXJndW1lbnROb2RlIiwiYXJndW1lbnROb2RlVmVyaWZpZWQiLCJ2ZXJpZnlBcmd1bWVudE5vZGUiLCJNRVRBX0FSR1VNRU5UX1JVTEVfTkFNRSIsIm1ldGFBcmd1bWVudE5vZGUiLCJjb21iaW5hdG9yTWV0YWFyZ3VtZW50Tm9kZSIsIm1ldGFBcmd1bWVudE5vZGVWZXJpZmllZCIsInZlcmlmeU1ldGFhcmd1bWVudE5vZGUiLCJjaGlsZE5vZGVzIiwiZ2V0Q2hpbGROb2RlcyIsImNvbWJpbmF0b3JDaGlsZE5vZGVzIiwidGVybU5vZGUiLCJhcmd1bWVudFN0cmluZyIsIm5vZGVBc1N0cmluZyIsImVycm9yIiwidHlwZXMiLCJ0ZXJtVmVyaWZpZWQiLCJ2ZXJpZnlUZXJtIiwiZmlyc3RUeXBlIiwiZmlyc3QiLCJ0ZXJtVHlwZSIsInR5cGVOb2RlIiwidHlwZU5hbWUiLCJ0eXBlTmFtZUZyb21UeXBlTm9kZSIsInR5cGUiLCJmaW5kVHlwZUJ5VHlwZU5hbWUiLCJzdGF0ZW1lbnRUeXBlRXF1YWxUb09yU3ViVHlwZU9mVHlwZSIsImlzRXF1YWxUb09yU3ViVHlwZU9mIiwibWV0YUFyZ3VtZW50U3RyaW5nIiwiY29tYmluYXRvck1ldGFUWXBlTm9kZSIsInRlcm1pbmFsTm9kZUNvbnRlbnQiLCJnZXRDb250ZW50IiwidGVybWluYWxOb2RlQ29udGVudFN0YXRlbWVudE1ldGFUeXBlIiwiU1RBVEVNRU5UX01FVEFfVFlQRSIsImNvbWJpbmF0b3JNZXRhYXJndW1lbnRTdHJpbmciXSwibWFwcGluZ3MiOiJBQUFBOzs7OytCQWtCQTs7O2VBQXdCQTs7O3lEQWhCRDt5REFDUztxQkFFVjtzQkFDTzt5QkFDTztxQkFDWTt5QkFDWTs4REFDNUI7Ozs7OztBQUVoQyxJQUFNQyxnQkFBZ0JDLElBQUFBLGdCQUFTLEVBQUMsb0JBQzFCQyxnQkFBZ0JELElBQUFBLGdCQUFTLEVBQUMsb0JBQzFCRSxvQkFBb0JGLElBQUFBLGdCQUFTLEVBQUMsdUNBQzlCRyxxQkFBcUJILElBQUFBLGdCQUFTLEVBQUMsNkJBQy9CSSx5QkFBeUJKLElBQUFBLGdCQUFTLEVBQUM7QUFFMUIsU0FBU0YsZ0JBQWdCTyxhQUFhLEVBQUVDLFVBQVUsRUFBRUMsWUFBWSxFQUFFO0lBQy9FLElBQUlDLG9CQUFvQixLQUFLO0lBRTdCRCxhQUFhRSxLQUFLLENBQUNKO0lBRW5CLElBQU1LLG9CQUFvQk4sdUJBQXVCQztJQUVqRCxJQUFJSyxzQkFBc0IsSUFBSSxFQUFFO1FBQzlCLElBQU1DLHdCQUF3QkMsSUFBQUEsYUFBbUIsRUFBQ0YsbUJBQW1CSixZQUFZQztRQUVqRkMsb0JBQW9CRyx1QkFBdUIsR0FBRztJQUNoRCxPQUFPO1FBQ0wsSUFBTUUsVUFBVU4sY0FDVk8sc0NBQXNDQyxrQ0FBa0NWLGVBQWVRO1FBRTdGTCxvQkFBb0JNLHFDQUFzQyxHQUFHO0lBQy9ELENBQUM7SUFFRE4sb0JB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
214
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy92ZXJpZnkvc3RhdGVtZW50LmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgdmVyaWZ5VGVybSBmcm9tIFwiLi4vdmVyaWZ5L3Rlcm1cIjtcbmltcG9ydCBFcXVhbGl0eUFzc2VydGlvbiBmcm9tIFwiLi4vYXNzZXJ0aW9uL2VxdWFsaXR5XCI7XG5pbXBvcnQgZXF1YWxpdHlDb21iaW5hdG9yIGZyb20gXCIuLi9vY21iaW5hdG9yL2VxdWFsaXR5XCI7XG5pbXBvcnQgYnJhY2tldGVkQ29tYmluYXRvciBmcm9tIFwiLi4vb2NtYmluYXRvci9icmFja2V0ZWRcIjtcbmltcG9ydCB2ZXJpZnlUeXBlQXNzZXJ0aW9uIGZyb20gXCIuLi92ZXJpZnkvYXNzZXJ0aW9uL3R5cGVcIjtcblxuaW1wb3J0IHsgZmlyc3QgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2FycmF5XCI7XG5pbXBvcnQgeyBvYmplY3RUeXBlIH0gZnJvbSBcIi4uL3R5cGVcIjtcbmltcG9ydCB7IG5vZGVBc1N0cmluZyB9IGZyb20gXCIuLi91dGlsaXRpZXMvc3RyaW5nXCI7XG5pbXBvcnQgeyBPQkpFQ1RfVFlQRV9OQU1FIH0gZnJvbSBcIi4uL3R5cGVOYW1lc1wiO1xuaW1wb3J0IHsgU1RBVEVNRU5UX01FVEFfVFlQRSB9IGZyb20gXCIuLi9tZXRhVHlwZXNcIjtcbmltcG9ydCB7IG5vZGVRdWVyeSwgdHlwZU5hbWVGcm9tVHlwZU5vZGUgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL3F1ZXJ5XCI7XG5pbXBvcnQgeyBBUkdVTUVOVF9SVUxFX05BTUUsIE1FVEFfQVJHVU1FTlRfUlVMRV9OQU1FIH0gZnJvbSBcIi4uL3J1bGVOYW1lc1wiO1xuXG5jb25zdCB0ZXJtTm9kZVF1ZXJ5ID0gbm9kZVF1ZXJ5KFwiL2FyZ3VtZW50L3Rlcm0hXCIpLFxuICAgICAgdHlwZU5vZGVRdWVyeSA9IG5vZGVRdWVyeShcIi9hcmd1bWVudC90eXBlIVwiKSxcbiAgICAgIG1ldGFUeXBlTm9kZVF1ZXJ5ID0gbm9kZVF1ZXJ5KFwiL21ldGFBcmd1bWVudC9tZXRhVHlwZSEvQG1ldGEtdHlwZVwiKSxcbiAgICAgIHN0YXRlbWVudE5vZGVRdWVyeSA9IG5vZGVRdWVyeShcIi9tZXRhQXJndW1lbnQvc3RhdGVtZW50IVwiKSxcbiAgICAgIHR5cGVBc3NlcnRpb25Ob2RlUXVlcnkgPSBub2RlUXVlcnkoXCIvc3RhdGVtZW50L3R5cGVBc3NlcnRpb24hXCIpO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB2ZXJpZnlTdGF0ZW1lbnQoc3RhdGVtZW50Tm9kZSwgYXNzZXJ0aW9ucywgcHJvb2ZDb250ZXh0KSB7XG4gIGxldCBzdGF0ZW1lbnRWZXJpZmllZCA9IGZhbHNlO1xuXG4gIHByb29mQ29udGV4dC5iZWdpbihzdGF0ZW1lbnROb2RlKTtcblxuICBpZiAoIXN0YXRlbWVudFZlcmlmaWVkKSB7XG4gICAgY29uc3Qgc3RhdGVtZW50VmVyaWZpZWRBc0VxdWFsaXR5ID0gdmVyaWZ5U3RhdGVtZW50QXNFcXVhbGl0eShzdGF0ZW1lbnROb2RlLCBhc3NlcnRpb25zLCBwcm9vZkNvbnRleHQpO1xuXG4gICAgc3RhdGVtZW50VmVyaWZpZWQgPSBzdGF0ZW1lbnRWZXJpZmllZEFzRXF1YWxpdHk7ICAvL1xuICB9XG5cbiAgaWYgKCFzdGF0ZW1lbnRWZXJpZmllZCkge1xuICAgIGNvbnN0IHN0YXRlbWVudFZlcmlmaWVkQXNUeXBlQXNzZXJ0aW9uID0gdmVyaWZ5U3RhdGVtZW50QXNUeXBlQXNzZXJ0aW9uKHN0YXRlbWVudE5vZGUsIGFzc2VydGlvbnMsIHByb29mQ29udGV4dCk7XG5cbiAgICBzdGF0ZW1lbnRWZXJpZmllZCA9IHN0YXRlbWVudFZlcmlmaWVkQXNUeXBlQXNzZXJ0aW9uOyAvLy9cbiAgfVxuXG4gIGlmICghc3RhdGVtZW50VmVyaWZpZWQpIHtcbiAgICBjb25zdCBzdGF0ZW1lbnRWZXJpZmllZEFnYWluc3RDb21iaW5hdG9ycyA9IHZlcmlmeVN0YXRlbWVudEFnYWluc3RDb21iaW5hdG9ycyhzdGF0ZW1lbnROb2RlLCBwcm9vZkNvbnRleHQpO1xuXG4gICAgc3RhdGVtZW50VmVyaWZpZWQgPSBzdGF0ZW1lbnRWZXJpZmllZEFnYWluc3RDb21iaW5hdG9yczsgIC8vL1xuICB9XG5cbiAgc3RhdGVtZW50VmVyaWZpZWQgP1xuICAgIHByb29mQ29udGV4dC5jb21wbGV0ZShzdGF0ZW1lbnROb2RlKSA6XG4gICAgICBwcm9vZkNvbnRleHQuaGFsdChzdGF0ZW1lbnROb2RlKTtcblxuICByZXR1cm4gc3RhdGVtZW50VmVyaWZpZWQ7XG59XG5cbmZ1bmN0aW9uIHZlcmlmeVN0YXRlbWVudEFzRXF1YWxpdHkoc3RhdGVtZW50Tm9kZSwgYXNzZXJ0aW9ucywgcHJvb2ZDb250ZXh0KSB7XG4gIGxldCBzdGF0ZW1lbnRWZXJpZmllZEFzRXF1YWxpdHkgPSBmYWxzZTtcblxuICBjb25zdCBjb21iaW5hdG9yID0gZXF1YWxpdHlDb21iaW5hdG9yLCAgLy8vXG4gICAgICAgIHN0YXRlbWVudFZlcmlmaWVkQWdhaW5zdENvbWJpbmF0b3IgPSB2ZXJpZnlTdGF0ZW1lbnRBZ2FpbnN0Q29tYmluYXRvcihzdGF0ZW1lbnROb2RlLCBjb21iaW5hdG9yLCBwcm9vZkNvbnRleHQpO1xuXG4gIGlmIChzdGF0ZW1lbnRWZXJpZmllZEFnYWluc3RDb21iaW5hdG9yKSB7XG4gICAgY29uc3QgZXF1YWxpdHlBc3NlcnRpb24gPSBFcXVhbGl0eUFzc2VydGlvbi5mcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlKSxcbiAgICAgICAgICBhc3NlcnRpb24gPSBlcXVhbGl0eUFzc2VydGlvbjsgIC8vL1xuXG4gICAgYXNzZXJ0aW9ucy5wdXNoKGFzc2VydGlvbik7XG5cbiAgICBzdGF0ZW1lbnRWZXJpZmllZEFzRXF1YWxpdHkgPSB0cnVlO1xuICB9XG5cbiAgcmV0dXJuIHN0YXRlbWVudFZlcmlmaWVkQXNFcXVhbGl0eTtcbn1cblxuZnVuY3Rpb24gdmVyaWZ5U3RhdGVtZW50QXNUeXBlQXNzZXJ0aW9uKHN0YXRlbWVudE5vZGUsIGFzc2VydGlvbnMsIHByb29mQ29udGV4dCkge1xuICBsZXQgc3RhdGVtZW50VmVyaWZpZWRBc1R5cGVBc3NlcnRpb24gPSBmYWxzZTtcblxuICBjb25zdCB0eXBlQXNzZXJ0aW9uTm9kZSA9IHR5cGVBc3NlcnRpb25Ob2RlUXVlcnkoc3RhdGVtZW50Tm9kZSk7XG5cbiAgaWYgKHR5cGVBc3NlcnRpb25Ob2RlICE9PSBudWxsKSB7XG4gICAgY29uc3QgdHlwZUFzc2VydGlvblZlcmlmaWVkID0gdmVyaWZ5VHlwZUFzc2VydGlvbih0eXBlQXNzZXJ0aW9uTm9kZSwgYXNzZXJ0aW9ucywgcHJvb2ZDb250ZXh0KTtcblxuICAgIHN0YXRlbWVudFZlcmlmaWVkQXNUeXBlQXNzZXJ0aW9uID0gdHlwZUFzc2VydGlvblZlcmlmaWVkOyAvLy9cbiAgfVxuXG4gIHJldHVybiBzdGF0ZW1lbnRWZXJpZmllZEFzVHlwZUFzc2VydGlvbjtcbn1cblxuZnVuY3Rpb24gdmVyaWZ5U3RhdGVtZW50QWdhaW5zdENvbWJpbmF0b3JzKHN0YXRlbWVudE5vZGUsIHByb29mQ29udGV4dCkge1xuICBsZXQgc3RhdGVtZW50VmVyaWZpZWRBZ2FpbnN0Q29tYmluYXRvcnMgPSBmYWxzZTtcblxuICBsZXQgY29tYmluYXRvcnMgPSBwcm9vZkNvbnRleHQuZ2V0Q29tYmluYXRvcnMoKTtcblxuICBjb21iaW5hdG9ycyA9IFsgLy8vXG4gICAgYnJhY2tldGVkQ29tYmluYXRvcixcbiAgICAuLi5jb21iaW5hdG9yc1xuICBdO1xuXG4gIGNvbnN0IGNvbWJpbmF0b3IgPSBjb21iaW5hdG9ycy5maW5kKChjb21iaW5hdG9yKSA9PiB7XG4gICAgICAgICAgY29uc3Qgc3RhdGVtZW50VmVyaWZpZWRBZ2FpbnN0Q29tYmluYXRvciA9IHZlcmlmeVN0YXRlbWVudEFnYWluc3RDb21iaW5hdG9yKHN0YXRlbWVudE5vZGUsIGNvbWJpbmF0b3IsIHByb29mQ29udGV4dCk7XG5cbiAgICAgICAgICBpZiAoc3RhdGVtZW50VmVyaWZpZWRBZ2FpbnN0Q29tYmluYXRvcikge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9KSB8fCBudWxsO1xuXG4gIGlmIChjb21iaW5hdG9yICE9PSBudWxsKSB7XG4gICAgc3RhdGVtZW50VmVyaWZpZWRBZ2FpbnN0Q29tYmluYXRvcnMgPSB0cnVlO1xuICB9XG5cbiAgcmV0dXJuIHN0YXRlbWVudFZlcmlmaWVkQWdhaW5zdENvbWJpbmF0b3JzO1xufVxuXG5mdW5jdGlvbiB2ZXJpZnlTdGF0ZW1lbnRBZ2FpbnN0Q29tYmluYXRvcihzdGF0ZW1lbnROb2RlLCBjb21iaW5hdG9yLCBwcm9vZkNvbnRleHQpIHtcbiAgY29uc3QgY29tYmluYXRvclN0YXRlbWVudE5vZGUgPSBjb21iaW5hdG9yLmdldFN0YXRlbWVudE5vZGUoKSxcbiAgICAgICAgbm9kZSA9IHN0YXRlbWVudE5vZGUsICAvLy9cbiAgICAgICAgY29tYmluYXRvck5vZGUgPSBjb21iaW5hdG9yU3RhdGVtZW50Tm9kZSwgLy8vXG4gICAgICAgIG5vZGVWZXJpZmllZCA9IHZlcmlmeU5vZGUobm9kZSwgY29tYmluYXRvck5vZGUsIHByb29mQ29udGV4dCksXG4gICAgICAgIHN0YXRlbWVudFZlcmlmaWVkQWdhaW5zdENvbWJpbmF0b3IgPSBub2RlVmVyaWZpZWQ7ICAvLy9cblxuICByZXR1cm4gc3RhdGVtZW50VmVyaWZpZWRBZ2FpbnN0Q29tYmluYXRvcjtcbn1cblxuZnVuY3Rpb24gdmVyaWZ5Tm9kZShub2RlLCBjb21iaW5hdG9yTm9kZSwgcHJvb2ZDb250ZXh0KSB7XG4gIGxldCBub2RlVmVyaWZpZWQ7XG5cbiAgY29uc3Qgbm9kZVRlcm1pbmFsTm9kZSA9IG5vZGUuaXNUZXJtaW5hbE5vZGUoKSxcbiAgICAgICAgY29tYmluYXRvck5vZGVUZXJtaW5hbE5vZGUgPSBjb21iaW5hdG9yTm9kZS5pc1Rlcm1pbmFsTm9kZSgpO1xuXG4gIGlmIChub2RlVGVybWluYWxOb2RlID09PSBjb21iaW5hdG9yTm9kZVRlcm1pbmFsTm9kZSkge1xuICAgIGlmIChub2RlVGVybWluYWxOb2RlKSB7XG4gICAgICBjb25zdCB0ZXJtaW5hbE5vZGUgPSBub2RlLCAgLy8vXG4gICAgICAgICAgICBjb21iaW5hdG9yVGVybWluYWxOb2RlID0gY29tYmluYXRvck5vZGUsICAvLy9cbiAgICAgICAgICAgIHRlcm1pbmFsTm9kZVZlcmlmaWVkID0gdmVyaWZ5VGVybWluYWxOb2RlKHRlcm1pbmFsTm9kZSwgY29tYmluYXRvclRlcm1pbmFsTm9kZSwgcHJvb2ZDb250ZXh0KTtcblxuICAgICAgbm9kZVZlcmlmaWVkID0gdGVybWluYWxOb2RlVmVyaWZpZWQ7ICAvLy9cbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3Qgbm9uVGVybWluYWxOb2RlID0gbm9kZSwgLy8vXG4gICAgICAgICAgICBjb21iaW5hdG9yTm9uVGVybWluYWxOb2RlID0gY29tYmluYXRvck5vZGUsICAvLy9cbiAgICAgICAgICAgIG5vblRlcm1pbmFsTm9kZVZlcmlmaWVkID0gdmVyaWZ5Tm9uVGVybWluYWxOb2RlKG5vblRlcm1pbmFsTm9kZSwgY29tYmluYXRvck5vblRlcm1pbmFsTm9kZSwgcHJvb2ZDb250ZXh0KTtcblxuICAgICAgbm9kZVZlcmlmaWVkID0gbm9uVGVybWluYWxOb2RlVmVyaWZpZWQ7IC8vL1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBub2RlVmVyaWZpZWQ7XG59XG5cbmZ1bmN0aW9uIHZlcmlmeU5vZGVzKG5vZGVzLCBjb21iaW5hdG9yTm9kZXMsIHByb29mQ29udGV4dCkge1xuICBsZXQgbm9kZXNWZXJpZmllZCA9IGZhbHNlO1xuXG4gIGNvbnN0IG5vZGVzTGVuZ3RoID0gbm9kZXMubGVuZ3RoLFxuICAgICAgICBjb21iaW5hdG9yTm9kZXNMZW5ndGggPSBjb21iaW5hdG9yTm9kZXMubGVuZ3RoO1xuXG4gIGlmIChub2Rlc0xlbmd0aCA9PT0gY29tYmluYXRvck5vZGVzTGVuZ3RoKSB7XG4gICAgbm9kZXNWZXJpZmllZCA9IG5vZGVzLmV2ZXJ5KChub2RlLCBpbmRleCkgPT4ge1xuICAgICAgY29uc3QgY29tYmluYXRvck5vZGUgPSBjb21iaW5hdG9yTm9kZXNbaW5kZXhdLFxuICAgICAgICAgICAgbm9kZVZlcmlmaWVkID0gdmVyaWZ5Tm9kZShub2RlLCBjb21iaW5hdG9yTm9kZSwgcHJvb2ZDb250ZXh0KTtcblxuICAgICAgaWYgKG5vZGVWZXJpZmllZCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBub2Rlc1ZlcmlmaWVkO1xufVxuXG5mdW5jdGlvbiB2ZXJpZnlUZXJtaW5hbE5vZGUodGVybWluYWxOb2RlLCBjb21iaW5hdG9yVGVybWluYWxOb2RlLCBwcm9vZkNvbnRleHQpIHtcbiAgbGV0IHRlcm1pbmFsTm9kZVZlcmlmaWVkID0gZmFsc2U7XG5cbiAgY29uc3QgbWF0Y2hlcyA9IHRlcm1pbmFsTm9kZS5tYXRjaChjb21iaW5hdG9yVGVybWluYWxOb2RlKTtcblxuICBpZiAobWF0Y2hlcykge1xuICAgIHRlcm1pbmFsTm9kZVZlcmlmaWVkID0gdHJ1ZTtcbiAgfVxuXG4gIHJldHVybiB0ZXJtaW5hbE5vZGVWZXJpZmllZDtcbn1cblxuZnVuY3Rpb24gdmVyaWZ5Tm9uVGVybWluYWxOb2RlKG5vblRlcm1pbmFsTm9kZSwgY29tYmluYXRvck5vblRlcm1pbmFsTm9kZSwgcHJvb2ZDb250ZXh0KSB7XG4gIGxldCBub25UZXJtaW5hbE5vZGVWZXJpZmllZCA9IGZhbHNlO1xuXG4gIGNvbnN0IHJ1bGVOYW1lID0gbm9uVGVybWluYWxOb2RlLmdldFJ1bGVOYW1lKCksIC8vL1xuICAgICAgICBjb21iaW5hdG9yUnVsZU5hbWUgPSBjb21iaW5hdG9yTm9uVGVybWluYWxOb2RlLmdldFJ1bGVOYW1lKCk7IC8vL1xuXG4gIGlmIChydWxlTmFtZSA9PT0gY29tYmluYXRvclJ1bGVOYW1lKSB7XG4gICAgc3dpdGNoIChydWxlTmFtZSkge1xuICAgICAgY2FzZSBBUkdVTUVOVF9SVUxFX05BTUU6IHtcbiAgICAgICAgY29uc3QgYXJndW1lbnROb2RlID0gbm9uVGVybWluYWxOb2RlLCAvLy9cbiAgICAgICAgICAgICAgY29tYmluYXRvckFyZ3VtZW50Tm9kZSA9IGNvbWJpbmF0b3JOb25UZXJtaW5hbE5vZGUsIC8vL1xuICAgICAgICAgICAgICBhcmd1bWVudE5vZGVWZXJpZmllZCA9IHZlcmlmeUFyZ3VtZW50Tm9kZShhcmd1bWVudE5vZGUsIGNvbWJpbmF0b3JBcmd1bWVudE5vZGUsIHByb29mQ29udGV4dCk7XG5cbiAgICAgICAgbm9uVGVybWluYWxOb2RlVmVyaWZpZWQgPSBhcmd1bWVudE5vZGVWZXJpZmllZDsgLy8vXG5cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIGNhc2UgTUVUQV9BUkdVTUVOVF9SVUxFX05BTUU6IHtcbiAgICAgICAgY29uc3QgbWV0YUFyZ3VtZW50Tm9kZSA9IG5vblRlcm1pbmFsTm9kZSwgLy8vXG4gICAgICAgICAgICAgIGNvbWJpbmF0b3JNZXRhYXJndW1lbnROb2RlID0gY29tYmluYXRvck5vblRlcm1pbmFsTm9kZSwgLy8vXG4gICAgICAgICAgICAgIG1ldGFBcmd1bWVudE5vZGVWZXJpZmllZCA9IHZlcmlmeU1ldGFhcmd1bWVudE5vZGUobWV0YUFyZ3VtZW50Tm9kZSwgY29tYmluYXRvck1ldGFhcmd1bWVudE5vZGUsIHByb29mQ29udGV4dCk7XG5cbiAgICAgICAgbm9uVGVybWluYWxOb2RlVmVyaWZpZWQgPSBtZXRhQXJndW1lbnROb2RlVmVyaWZpZWQ7IC8vL1xuXG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBkZWZhdWx0OiB7XG4gICAgICAgIGNvbnN0IGNoaWxkTm9kZXMgPSBub25UZXJtaW5hbE5vZGUuZ2V0Q2hpbGROb2RlcygpLFxuICAgICAgICAgICAgICBjb21iaW5hdG9yQ2hpbGROb2RlcyA9IGNvbWJpbmF0b3JOb25UZXJtaW5hbE5vZGUuZ2V0Q2hpbGROb2RlcygpLFxuICAgICAgICAgICAgICBub2RlcyA9IGNoaWxkTm9kZXMsIC8vL1xuICAgICAgICAgICAgICBjb21iaW5hdG9yTm9kZXMgPSBjb21iaW5hdG9yQ2hpbGROb2RlcywgLy8vXG4gICAgICAgICAgICAgIG5vZGVzVmVyaWZpZWQgPSB2ZXJpZnlOb2Rlcyhub2RlcywgY29tYmluYXRvck5vZGVzLCBwcm9vZkNvbnRleHQpO1xuXG4gICAgICAgIG5vblRlcm1pbmFsTm9kZVZlcmlmaWVkID0gbm9kZXNWZXJpZmllZDsgLy8vXG5cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG5vblRlcm1pbmFsTm9kZVZlcmlmaWVkO1xufVxuXG5mdW5jdGlvbiB2ZXJpZnlBcmd1bWVudE5vZGUoYXJndW1lbnROb2RlLCBjb21iaW5hdG9yQXJndW1lbnROb2RlLCBwcm9vZkNvbnRleHQpIHtcbiAgbGV0IGFyZ3VtZW50Tm9kZVZlcmlmaWVkID0gZmFsc2U7XG5cbiAgY29uc3QgdGVybU5vZGUgPSB0ZXJtTm9kZVF1ZXJ5KGFyZ3VtZW50Tm9kZSk7XG5cbiAgaWYgKHRlcm1Ob2RlID09PSBudWxsKSB7XG4gICAgY29uc3QgYXJndW1lbnRTdHJpbmcgPSBub2RlQXNTdHJpbmcoYXJndW1lbnROb2RlKTtcblxuICAgIHByb29mQ29udGV4dC5lcnJvcihgVGhlICR7YXJndW1lbnRTdHJpbmd9IGFyZ3VtZW50IHNob3VsZCBiZSBhIHRlcm0sIG5vdCBhIHR5cGVgKTtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCB0eXBlcyA9IFtdLFxuICAgICAgICAgIGNvbnRleHQgPSBwcm9vZkNvbnRleHQsIC8vL1xuICAgICAgICAgIHRlcm1WZXJpZmllZCA9IHZlcmlmeVRlcm0odGVybU5vZGUsIHR5cGVzLCBjb250ZXh0KTtcblxuICAgIGlmICh0ZXJtVmVyaWZpZWQpIHtcbiAgICAgIGNvbnN0IGZpcnN0VHlwZSA9IGZpcnN0KHR5cGVzKSxcbiAgICAgICAgICAgIHRlcm1UeXBlID0gZmlyc3RUeXBlLCAvLy9cbiAgICAgICAgICAgIHR5cGVOb2RlID0gdHlwZU5vZGVRdWVyeShjb21iaW5hdG9yQXJndW1lbnROb2RlKSxcbiAgICAgICAgICAgIHR5cGVOYW1lID0gdHlwZU5hbWVGcm9tVHlwZU5vZGUodHlwZU5vZGUpLFxuICAgICAgICAgICAgdHlwZSA9ICh0eXBlTmFtZSA9PT0gT0JKRUNUX1RZUEVfTkFNRSkgP1xuICAgICAgICAgICAgICAgICAgICAgb2JqZWN0VHlwZSA6ICAvLy9cbiAgICAgICAgICAgICAgICAgICAgICAgcHJvb2ZDb250ZXh0LmZpbmRUeXBlQnlUeXBlTmFtZSh0eXBlTmFtZSksXG4gICAgICAgICAgICBzdGF0ZW1lbnRUeXBlRXF1YWxUb09yU3ViVHlwZU9mVHlwZSA9IHRlcm1UeXBlLmlzRXF1YWxUb09yU3ViVHlwZU9mKHR5cGUpO1xuXG4gICAgICBpZiAoc3RhdGVtZW50VHlwZUVxdWFsVG9PclN1YlR5cGVPZlR5cGUpIHtcbiAgICAgICAgYXJndW1lbnROb2RlVmVyaWZpZWQgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBhcmd1bWVudE5vZGVWZXJpZmllZDtcbn1cblxuZnVuY3Rpb24gdmVyaWZ5TWV0YWFyZ3VtZW50Tm9kZShtZXRhQXJndW1lbnROb2RlLCBjb21iaW5hdG9yTWV0YWFyZ3VtZW50Tm9kZSwgcHJvb2ZDb250ZXh0KSB7XG4gIGxldCBtZXRhQXJndW1lbnROb2RlVmVyaWZpZWQgPSBmYWxzZTtcblxuICBjb25zdCBzdGF0ZW1lbnROb2RlID0gc3RhdGVtZW50Tm9kZVF1ZXJ5KG1ldGFBcmd1bWVudE5vZGUpO1xuXG4gIGlmIChzdGF0ZW1lbnROb2RlID09PSBudWxsKSB7XG4gICAgY29uc3QgbWV0YUFyZ3VtZW50U3RyaW5nID0gbm9kZUFzU3RyaW5nKG1ldGFBcmd1bWVudE5vZGUpO1xuXG4gICAgcHJvb2ZDb250ZXh0LmVycm9yKGBUaGUgJyR7bWV0YUFyZ3VtZW50U3RyaW5nfScgbWV0YS1hcmd1bWVudCBzaG91bGQgYmUgYSBzdGF0ZW1lbnQsIG5vdCBhIG1ldGEtdHlwZS5gKTtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCBhc3NlcnRpb25zID0gbnVsbCxcbiAgICAgICAgICBzdGF0ZW1lbnRWZXJpZmllZCA9IHZlcmlmeVN0YXRlbWVudChzdGF0ZW1lbnROb2RlLCBhc3NlcnRpb25zLCBwcm9vZkNvbnRleHQpO1xuXG4gICAgaWYgKHN0YXRlbWVudFZlcmlmaWVkKSB7XG4gICAgICBjb25zdCBjb21iaW5hdG9yTWV0YVRZcGVOb2RlID0gbWV0YVR5cGVOb2RlUXVlcnkoY29tYmluYXRvck1ldGFhcmd1bWVudE5vZGUpO1xuXG4gICAgICBpZiAoY29tYmluYXRvck1ldGFUWXBlTm9kZSAhPT0gbnVsbCkge1xuICAgICAgICBjb25zdCB0ZXJtaW5hbE5vZGUgPSBjb21iaW5hdG9yTWV0YVRZcGVOb2RlLCAgLy8vXG4gICAgICAgICAgICAgIHRlcm1pbmFsTm9kZUNvbnRlbnQgPSB0ZXJtaW5hbE5vZGUuZ2V0Q29udGVudCgpLFxuICAgICAgICAgICAgICB0ZXJtaW5hbE5vZGVDb250ZW50U3RhdGVtZW50TWV0YVR5cGUgPSAodGVybWluYWxOb2RlQ29udGVudCA9PT0gU1RBVEVNRU5UX01FVEFfVFlQRSk7XG5cbiAgICAgICAgbWV0YUFyZ3VtZW50Tm9kZVZlcmlmaWVkID0gdGVybWluYWxOb2RlQ29udGVudFN0YXRlbWVudE1ldGFUeXBlOyAgLy8vXG4gICAgICB9XG5cbiAgICAgIGlmICghbWV0YUFyZ3VtZW50Tm9kZVZlcmlmaWVkKSB7XG4gICAgICAgIGNvbnN0IGNvbWJpbmF0b3JNZXRhYXJndW1lbnRTdHJpbmcgPSBub2RlQXNTdHJpbmcoY29tYmluYXRvck1ldGFhcmd1bWVudE5vZGUpO1xuXG4gICAgICAgIHByb29mQ29udGV4dC5lcnJvcihgVGhlICcke2NvbWJpbmF0b3JNZXRhYXJndW1lbnRTdHJpbmd9JyBjb21iaW5hdG9yIG1ldGEtYXJndW1lbnQgc2hvdWxkIGJlIHRoZSAnU3RhdGVtZW50JyBtZXRhLXR5cGUuYCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG1ldGFBcmd1bWVudE5vZGVWZXJpZmllZDtcbn1cbiJdLCJuYW1lcyI6WyJ2ZXJpZnlTdGF0ZW1lbnQiLCJ0ZXJtTm9kZVF1ZXJ5Iiwibm9kZVF1ZXJ5IiwidHlwZU5vZGVRdWVyeSIsIm1ldGFUeXBlTm9kZVF1ZXJ5Iiwic3RhdGVtZW50Tm9kZVF1ZXJ5IiwidHlwZUFzc2VydGlvbk5vZGVRdWVyeSIsInN0YXRlbWVudE5vZGUiLCJhc3NlcnRpb25zIiwicHJvb2ZDb250ZXh0Iiwic3RhdGVtZW50VmVyaWZpZWQiLCJiZWdpbiIsInN0YXRlbWVudFZlcmlmaWVkQXNFcXVhbGl0eSIsInZlcmlmeVN0YXRlbWVudEFzRXF1YWxpdHkiLCJzdGF0ZW1lbnRWZXJpZmllZEFzVHlwZUFzc2VydGlvbiIsInZlcmlmeVN0YXRlbWVudEFzVHlwZUFzc2VydGlvbiIsInN0YXRlbWVudFZlcmlmaWVkQWdhaW5zdENvbWJpbmF0b3JzIiwidmVyaWZ5U3RhdGVtZW50QWdhaW5zdENvbWJpbmF0b3JzIiwiY29tcGxldGUiLCJoYWx0IiwiY29tYmluYXRvciIsImVxdWFsaXR5Q29tYmluYXRvciIsInN0YXRlbWVudFZlcmlmaWVkQWdhaW5zdENvbWJpbmF0b3IiLCJ2ZXJpZnlTdGF0ZW1lbnRBZ2FpbnN0Q29tYmluYXRvciIsImVxdWFsaXR5QXNzZXJ0aW9uIiwiRXF1YWxpdHlBc3NlcnRpb24iLCJmcm9tU3RhdGVtZW50Tm9kZSIsImFzc2VydGlvbiIsInB1c2giLCJ0eXBlQXNzZXJ0aW9uTm9kZSIsInR5cGVBc3NlcnRpb25WZXJpZmllZCIsInZlcmlmeVR5cGVBc3NlcnRpb24iLCJjb21iaW5hdG9ycyIsImdldENvbWJpbmF0b3JzIiwiYnJhY2tldGVkQ29tYmluYXRvciIsImZpbmQiLCJjb21iaW5hdG9yU3RhdGVtZW50Tm9kZSIsImdldFN0YXRlbWVudE5vZGUiLCJub2RlIiwiY29tYmluYXRvck5vZGUiLCJub2RlVmVyaWZpZWQiLCJ2ZXJpZnlOb2RlIiwibm9kZVRlcm1pbmFsTm9kZSIsImlzVGVybWluYWxOb2RlIiwiY29tYmluYXRvck5vZGVUZXJtaW5hbE5vZGUiLCJ0ZXJtaW5hbE5vZGUiLCJjb21iaW5hdG9yVGVybWluYWxOb2RlIiwidGVybWluYWxOb2RlVmVyaWZpZWQiLCJ2ZXJpZnlUZXJtaW5hbE5vZGUiLCJub25UZXJtaW5hbE5vZGUiLCJjb21iaW5hdG9yTm9uVGVybWluYWxOb2RlIiwibm9uVGVybWluYWxOb2RlVmVyaWZpZWQiLCJ2ZXJpZnlOb25UZXJtaW5hbE5vZGUiLCJ2ZXJpZnlOb2RlcyIsIm5vZGVzIiwiY29tYmluYXRvck5vZGVzIiwibm9kZXNWZXJpZmllZCIsIm5vZGVzTGVuZ3RoIiwibGVuZ3RoIiwiY29tYmluYXRvck5vZGVzTGVuZ3RoIiwiZXZlcnkiLCJpbmRleCIsIm1hdGNoZXMiLCJtYXRjaCIsInJ1bGVOYW1lIiwiZ2V0UnVsZU5hbWUiLCJjb21iaW5hdG9yUnVsZU5hbWUiLCJBUkdVTUVOVF9SVUxFX05BTUUiLCJhcmd1bWVudE5vZGUiLCJjb21iaW5hdG9yQXJndW1lbnROb2RlIiwiYXJndW1lbnROb2RlVmVyaWZpZWQiLCJ2ZXJpZnlBcmd1bWVudE5vZGUiLCJNRVRBX0FSR1VNRU5UX1JVTEVfTkFNRSIsIm1ldGFBcmd1bWVudE5vZGUiLCJjb21iaW5hdG9yTWV0YWFyZ3VtZW50Tm9kZSIsIm1ldGFBcmd1bWVudE5vZGVWZXJpZmllZCIsInZlcmlmeU1ldGFhcmd1bWVudE5vZGUiLCJjaGlsZE5vZGVzIiwiZ2V0Q2hpbGROb2RlcyIsImNvbWJpbmF0b3JDaGlsZE5vZGVzIiwidGVybU5vZGUiLCJhcmd1bWVudFN0cmluZyIsIm5vZGVBc1N0cmluZyIsImVycm9yIiwidHlwZXMiLCJjb250ZXh0IiwidGVybVZlcmlmaWVkIiwidmVyaWZ5VGVybSIsImZpcnN0VHlwZSIsImZpcnN0IiwidGVybVR5cGUiLCJ0eXBlTm9kZSIsInR5cGVOYW1lIiwidHlwZU5hbWVGcm9tVHlwZU5vZGUiLCJ0eXBlIiwiT0JKRUNUX1RZUEVfTkFNRSIsIm9iamVjdFR5cGUiLCJmaW5kVHlwZUJ5VHlwZU5hbWUiLCJzdGF0ZW1lbnRUeXBlRXF1YWxUb09yU3ViVHlwZU9mVHlwZSIsImlzRXF1YWxUb09yU3ViVHlwZU9mIiwibWV0YUFyZ3VtZW50U3RyaW5nIiwiY29tYmluYXRvck1ldGFUWXBlTm9kZSIsInRlcm1pbmFsTm9kZUNvbnRlbnQiLCJnZXRDb250ZW50IiwidGVybWluYWxOb2RlQ29udGVudFN0YXRlbWVudE1ldGFUeXBlIiwiU1RBVEVNRU5UX01FVEFfVFlQRSIsImNvbWJpbmF0b3JNZXRhYXJndW1lbnRTdHJpbmciXSwibWFwcGluZ3MiOiJBQUFBOzs7OytCQXNCQTs7O2VBQXdCQTs7O3lEQXBCRDs2REFDTzs4REFDQzs4REFDQzt5REFDQTtxQkFFVjtxQkFDSztzQkFDRTt5QkFDSTt5QkFDRztxQkFDWTt5QkFDWTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUU1RCxJQUFNQyxnQkFBZ0JDLElBQUFBLGdCQUFTLEVBQUMsb0JBQzFCQyxnQkFBZ0JELElBQUFBLGdCQUFTLEVBQUMsb0JBQzFCRSxvQkFBb0JGLElBQUFBLGdCQUFTLEVBQUMsdUNBQzlCRyxxQkFBcUJILElBQUFBLGdCQUFTLEVBQUMsNkJBQy9CSSx5QkFBeUJKLElBQUFBLGdCQUFTLEVBQUM7QUFFMUIsU0FBU0YsZ0JBQWdCTyxhQUFhLEVBQUVDLFVBQVUsRUFBRUMsWUFBWSxFQUFFO0lBQy9FLElBQUlDLG9CQUFvQixLQUFLO0lBRTdCRCxhQUFhRSxLQUFLLENBQUNKO0lBRW5CLElBQUksQ0FBQ0csbUJBQW1CO1FBQ3RCLElBQU1FLDhCQUE4QkMsMEJBQTBCTixlQUFlQyxZQUFZQztRQUV6RkMsb0JBQW9CRSw2QkFBOEIsRUFBRTtJQUN0RCxDQUFDO0lBRUQsSUFBSSxDQUFDRixtQkFBbUI7UUFDdEIsSUFBTUksbUNBQW1DQywrQkFBK0JSLGVBQWVDLFlBQVlDO1FBRW5HQyxvQkFBb0JJLGtDQUFrQyxHQUFHO0lBQzNE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
@@ -20,7 +20,9 @@ _export(exports, {
20
20
  }
21
21
  });
22
22
  var _array = require("../utilities/array");
23
+ var _type = require("../type");
23
24
  var _string = require("../utilities/string");
25
+ var _typeNames = require("../typeNames");
24
26
  var _ruleNames = require("../ruleNames");
25
27
  var _query = require("../utilities/query");
26
28
  var termNodeQuery = (0, _query.nodeQuery)("/argument/term!"), typeNodeQuery = (0, _query.nodeQuery)("/argument/type!"), variableNodeQuery = (0, _query.nodeQuery)("/term/variable!");
@@ -29,12 +31,15 @@ function verifyTerm(termNode, types, context) {
29
31
  context.begin(termNode);
30
32
  var termString = (0, _string.nodeAsString)(termNode);
31
33
  context.debug("Verifying the '".concat(termString, "' term..."));
32
- var variables = [], termVerifiedAsVariable = verifyTermAsVariable(termNode, variables, context);
33
- if (termVerifiedAsVariable) {
34
- var firstVariable = (0, _array.first)(variables), variable = firstVariable, type = variable.getType();
35
- types.push(type);
36
- termVerified = true;
37
- } else {
34
+ if (!termVerified) {
35
+ var variables = [], termVerifiedAsVariable = verifyTermAsVariable(termNode, variables, context);
36
+ if (termVerifiedAsVariable) {
37
+ var firstVariable = (0, _array.first)(variables), variable = firstVariable, type = variable.getType();
38
+ types.push(type);
39
+ termVerified = true;
40
+ }
41
+ }
42
+ if (!termVerified) {
38
43
  var termVerifiedAgainstConstructors = verifyTermAgainstConstructors(termNode, types, context);
39
44
  if (termVerifiedAgainstConstructors) {
40
45
  termVerified = true;
@@ -147,7 +152,7 @@ function verifyArgumentNode(argumentNode, constructorArgumentNode, context) {
147
152
  } else {
148
153
  var types = [], termVerified = verifyTerm(termNode, types, context);
149
154
  if (termVerified) {
150
- var firstType = (0, _array.first)(types), termType = firstType, typeNode = typeNodeQuery(constructorArgumentNode), typeName = (0, _query.typeNameFromTypeNode)(typeNode), type = context.findTypeByTypeName(typeName), termTypeEqualToOrSubTypeOfType = termType.isEqualToOrSubTypeOf(type);
155
+ var firstType = (0, _array.first)(types), termType = firstType, typeNode = typeNodeQuery(constructorArgumentNode), typeName = (0, _query.typeNameFromTypeNode)(typeNode), type = typeName === _typeNames.OBJECT_TYPE_NAME ? _type.objectType : context.findTypeByTypeName(typeName), termTypeEqualToOrSubTypeOfType = termType.isEqualToOrSubTypeOf(type);
151
156
  if (termTypeEqualToOrSubTypeOfType) {
152
157
  argumentNodeVerified = true;
153
158
  }
@@ -156,4 +161,4 @@ function verifyArgumentNode(argumentNode, constructorArgumentNode, context) {
156
161
  return argumentNodeVerified;
157
162
  }
158
163
 
159
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy92ZXJpZnkvdGVybS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgZmlyc3QgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2FycmF5XCI7XG5pbXBvcnQgeyBub2RlQXNTdHJpbmcgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL3N0cmluZ1wiO1xuaW1wb3J0IHsgQVJHVU1FTlRfUlVMRV9OQU1FIH0gZnJvbSBcIi4uL3J1bGVOYW1lc1wiO1xuaW1wb3J0IHsgbm9kZVF1ZXJ5LCB0eXBlTmFtZUZyb21UeXBlTm9kZSwgdmFyaWFibGVOYW1lRnJvbVZhcmlhYmxlTm9kZSB9IGZyb20gXCIuLi91dGlsaXRpZXMvcXVlcnlcIjtcblxuY29uc3QgdGVybU5vZGVRdWVyeSA9IG5vZGVRdWVyeShcIi9hcmd1bWVudC90ZXJtIVwiKSxcbiAgICAgIHR5cGVOb2RlUXVlcnkgPSBub2RlUXVlcnkoXCIvYXJndW1lbnQvdHlwZSFcIiksXG4gICAgICB2YXJpYWJsZU5vZGVRdWVyeSA9IG5vZGVRdWVyeShcIi90ZXJtL3ZhcmlhYmxlIVwiKTtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdmVyaWZ5VGVybSh0ZXJtTm9kZSwgdHlwZXMsIGNvbnRleHQpIHtcbiAgbGV0IHRlcm1WZXJpZmllZCA9IGZhbHNlO1xuXG4gIGNvbnRleHQuYmVnaW4odGVybU5vZGUpO1xuXG4gIGNvbnN0IHRlcm1TdHJpbmcgPSBub2RlQXNTdHJpbmcodGVybU5vZGUpO1xuXG4gIGNvbnRleHQuZGVidWcoYFZlcmlmeWluZyB0aGUgJyR7dGVybVN0cmluZ30nIHRlcm0uLi5gKTtcblxuICBjb25zdCB2YXJpYWJsZXMgPSBbXSxcbiAgICAgICAgdGVybVZlcmlmaWVkQXNWYXJpYWJsZSA9IHZlcmlmeVRlcm1Bc1ZhcmlhYmxlKHRlcm1Ob2RlLCB2YXJpYWJsZXMsIGNvbnRleHQpO1xuXG4gIGlmICh0ZXJtVmVyaWZpZWRBc1ZhcmlhYmxlKSB7XG4gICAgY29uc3QgZmlyc3RWYXJpYWJsZSA9IGZpcnN0KHZhcmlhYmxlcyksXG4gICAgICAgICAgdmFyaWFibGUgPSBmaXJzdFZhcmlhYmxlLCAvLy9cbiAgICAgICAgICB0eXBlID0gdmFyaWFibGUuZ2V0VHlwZSgpO1xuXG4gICAgdHlwZXMucHVzaCh0eXBlKTtcblxuICAgIHRlcm1WZXJpZmllZCA9IHRydWU7XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgdGVybVZlcmlmaWVkQWdhaW5zdENvbnN0cnVjdG9ycyA9IHZlcmlmeVRlcm1BZ2FpbnN0Q29uc3RydWN0b3JzKHRlcm1Ob2RlLCB0eXBlcywgY29udGV4dCk7XG5cbiAgICBpZiAodGVybVZlcmlmaWVkQWdhaW5zdENvbnN0cnVjdG9ycykge1xuICAgICAgdGVybVZlcmlmaWVkID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICBpZiAodGVybVZlcmlmaWVkKSB7XG4gICAgY29udGV4dC5pbmZvKGBWZXJpZmllZCB0aGUgJyR7dGVybVN0cmluZ30nIHRlcm0uYCk7XG4gIH1cblxuICB0ZXJtVmVyaWZpZWQgP1xuICAgIGNvbnRleHQuY29tcGxldGUodGVybU5vZGUpIDpcbiAgICAgIGNvbnRleHQuaGFsdCh0ZXJtTm9kZSk7XG5cbiAgcmV0dXJuIHRlcm1WZXJpZmllZDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZlcmlmeVRlcm1Bc1ZhcmlhYmxlKHRlcm1Ob2RlLCB2YXJpYWJsZXMsIGNvbnRleHQpIHtcbiAgbGV0IHRlcm1WZXJpZmllZEFzVmFyaWFibGUgPSBmYWxzZTtcblxuICBjb250ZXh0LmJlZ2luKHRlcm1Ob2RlKTtcblxuICBjb25zdCB2YXJpYWJsZU5vZGUgPSB2YXJpYWJsZU5vZGVRdWVyeSh0ZXJtTm9kZSk7XG5cbiAgaWYgKHZhcmlhYmxlTm9kZSAhPT0gbnVsbCkge1xuICAgIGNvbnN0IHZhcmlhYmxlTmFtZSA9IHZhcmlhYmxlTmFtZUZyb21WYXJpYWJsZU5vZGUodmFyaWFibGVOb2RlKSxcbiAgICAgICAgICB2YXJpYWJsZVByZXNlbnQgPSBjb250ZXh0LmlzVmFyaWFibGVQcmVzZW50QnlWYXJpYWJsZU5hbWUodmFyaWFibGVOYW1lKTtcblxuICAgIGlmICh2YXJpYWJsZVByZXNlbnQpIHtcbiAgICAgIGNvbnN0IHZhcmlhYmxlID0gY29udGV4dC5maW5kVmFyaWFibGVCeVZhcmlhYmxlTmFtZSh2YXJpYWJsZU5hbWUpO1xuXG4gICAgICB2YXJpYWJsZXMucHVzaCh2YXJpYWJsZSk7XG5cbiAgICAgIHRlcm1WZXJpZmllZEFzVmFyaWFibGUgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHRlcm1WZXJpZmllZEFzVmFyaWFibGUgP1xuICAgIGNvbnRleHQuY29tcGxldGUodGVybU5vZGUpIDpcbiAgICAgIGNvbnRleHQuaGFsdCh0ZXJtTm9kZSk7XG5cbiAgcmV0dXJuIHRlcm1WZXJpZmllZEFzVmFyaWFibGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2ZXJpZnlUZXJtQWdhaW5zdENvbnN0cnVjdG9ycyh0ZXJtTm9kZSwgdHlwZXMsIGNvbnRleHQpIHtcbiAgbGV0IHRlcm1WZXJpZmllZEFnYWluc3RDb25zdHJ1Y3RvcnMgPSBmYWxzZTtcblxuICBjb250ZXh0LmJlZ2luKHRlcm1Ob2RlKTtcblxuICBjb25zdCBjb25zdHJ1Y3RvcnMgPSBjb250ZXh0LmdldENvbnN0cnVjdG9ycygpLFxuICAgICAgICBjb25zdHJ1Y3RvciA9IGNvbnN0cnVjdG9ycy5maW5kKChjb25zdHJ1Y3RvcikgPT4ge1xuICAgICAgICAgIGNvbnN0IHRlcm1WZXJpZmllZEFnYWluc3RDb25zdHJ1Y3RvciA9IHZlcmlmeVRlcm1BZ2FpbnN0Q29uc3RydWN0b3IodGVybU5vZGUsIGNvbnN0cnVjdG9yLCBjb250ZXh0KTtcblxuICAgICAgICAgIGlmICh0ZXJtVmVyaWZpZWRBZ2FpbnN0Q29uc3RydWN0b3IpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSkgfHwgbnVsbDtcblxuICBpZiAoY29uc3RydWN0b3IgIT09IG51bGwpIHtcbiAgICBjb25zdCB0eXBlID0gY29uc3RydWN0b3IuZ2V0VHlwZSgpO1xuXG4gICAgdHlwZXMucHVzaCh0eXBlKTtcblxuICAgIHRlcm1WZXJpZmllZEFnYWluc3RDb25zdHJ1Y3RvcnMgPSB0cnVlO1xuICB9XG5cbiAgdGVybVZlcmlmaWVkQWdhaW5zdENvbnN0cnVjdG9ycyA/XG4gICAgY29udGV4dC5jb21wbGV0ZSh0ZXJtTm9kZSkgOlxuICAgICAgY29udGV4dC5oYWx0KHRlcm1Ob2RlKTtcblxuICByZXR1cm4gdGVybVZlcmlmaWVkQWdhaW5zdENvbnN0cnVjdG9ycztcbn1cblxuZnVuY3Rpb24gdmVyaWZ5VGVybUFnYWluc3RDb25zdHJ1Y3Rvcih0ZXJtTm9kZSwgY29uc3RydWN0b3IsIGNvbnRleHQpIHtcbiAgY29uc3QgY29uc3RydWN0b3JUZXJtTm9kZSA9IGNvbnN0cnVjdG9yLmdldFRlcm1Ob2RlKCksXG4gICAgICAgIG5vZGUgPSB0ZXJtTm9kZSwgIC8vL1xuICAgICAgICBjb25zdHJ1Y3Rvck5vZGUgPSBjb25zdHJ1Y3RvclRlcm1Ob2RlLCAvLy9cbiAgICAgICAgbm9kZVZlcmlmaWVkID0gdmVyaWZ5Tm9kZShub2RlLCBjb25zdHJ1Y3Rvck5vZGUsIGNvbnRleHQpLFxuICAgICAgICB0ZXJtVmVyaWZpZWRBZ2FpbnN0Q29uc3RydWN0b3IgPSBub2RlVmVyaWZpZWQ7ICAvLy9cblxuICByZXR1cm4gdGVybVZlcmlmaWVkQWdhaW5zdENvbnN0cnVjdG9yO1xufVxuXG5mdW5jdGlvbiB2ZXJpZnlOb2RlKG5vZGUsIGNvbnN0cnVjdG9yTm9kZSwgY29udGV4dCkge1xuICBsZXQgbm9kZVZlcmlmaWVkO1xuXG4gIGNvbnN0IG5vZGVUZXJtaW5hbE5vZGUgPSBub2RlLmlzVGVybWluYWxOb2RlKCksXG4gICAgICAgIGNvbnN0cnVjdG9yTm9kZVRlcm1pbmFsTm9kZSA9IGNvbnN0cnVjdG9yTm9kZS5pc1Rlcm1pbmFsTm9kZSgpO1xuXG4gIGlmIChub2RlVGVybWluYWxOb2RlID09PSBjb25zdHJ1Y3Rvck5vZGVUZXJtaW5hbE5vZGUpIHtcbiAgICBpZiAobm9kZVRlcm1pbmFsTm9kZSkge1xuICAgICAgY29uc3QgdGVybWluYWxOb2RlID0gbm9kZSwgIC8vL1xuICAgICAgICAgICAgY29uc3RydWN0b3JUZXJtaW5hbE5vZGUgPSBjb25zdHJ1Y3Rvck5vZGUsICAvLy9cbiAgICAgICAgICAgIHRlcm1pbmFsTm9kZVZlcmlmaWVkID0gdmVyaWZ5VGVybWluYWxOb2RlKHRlcm1pbmFsTm9kZSwgY29uc3RydWN0b3JUZXJtaW5hbE5vZGUsIGNvbnRleHQpO1xuXG4gICAgICBub2RlVmVyaWZpZWQgPSB0ZXJtaW5hbE5vZGVWZXJpZmllZDsgIC8vL1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBub25UZXJtaW5hbE5vZGUgPSBub2RlLCAvLy9cbiAgICAgICAgICAgIGNvbnN0cnVjdG9yTm9uVGVybWluYWxOb2RlID0gY29uc3RydWN0b3JOb2RlLCAgLy8vXG4gICAgICAgICAgICBub25UZXJtaW5hbE5vZGVWZXJpZmllZCA9IHZlcmlmeU5vblRlcm1pbmFsTm9kZShub25UZXJtaW5hbE5vZGUsIGNvbnN0cnVjdG9yTm9uVGVybWluYWxOb2RlLCBjb250ZXh0KTtcblxuICAgICAgbm9kZVZlcmlmaWVkID0gbm9uVGVybWluYWxOb2RlVmVyaWZpZWQ7IC8vL1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBub2RlVmVyaWZpZWQ7XG59XG5cbmZ1bmN0aW9uIHZlcmlmeU5vZGVzKG5vZGVzLCBjb25zdHJ1Y3Rvck5vZGVzLCBjb250ZXh0KSB7XG4gIGxldCBub2Rlc1ZlcmlmaWVkID0gZmFsc2U7XG5cbiAgY29uc3Qgbm9kZXNMZW5ndGggPSBub2Rlcy5sZW5ndGgsXG4gICAgICAgIGNvbnN0cnVjdG9yTm9kZXNMZW5ndGggPSBjb25zdHJ1Y3Rvck5vZGVzLmxlbmd0aDtcblxuICBpZiAobm9kZXNMZW5ndGggPT09IGNvbnN0cnVjdG9yTm9kZXNMZW5ndGgpIHtcbiAgICBub2Rlc1ZlcmlmaWVkID0gbm9kZXMuZXZlcnkoKG5vZGUsIGluZGV4KSA9PiB7XG4gICAgICBjb25zdCBjb25zdHJ1Y3Rvck5vZGUgPSBjb25zdHJ1Y3Rvck5vZGVzW2luZGV4XSxcbiAgICAgICAgICAgIG5vZGVWZXJpZmllZCA9IHZlcmlmeU5vZGUobm9kZSwgY29uc3RydWN0b3JOb2RlLCBjb250ZXh0KTtcblxuICAgICAgaWYgKG5vZGVWZXJpZmllZCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBub2Rlc1ZlcmlmaWVkO1xufVxuXG5mdW5jdGlvbiB2ZXJpZnlUZXJtaW5hbE5vZGUodGVybWluYWxOb2RlLCBjb25zdHJ1Y3RvclRlcm1pbmFsTm9kZSwgY29udGV4dCkge1xuICBsZXQgdGVybWluYWxOb2RlVmVyaWZpZWQgPSBmYWxzZTtcblxuICBjb25zdCBtYXRjaGVzID0gdGVybWluYWxOb2RlLm1hdGNoKGNvbnN0cnVjdG9yVGVybWluYWxOb2RlKTtcblxuICBpZiAobWF0Y2hlcykge1xuICAgIHRlcm1pbmFsTm9kZVZlcmlmaWVkID0gdHJ1ZTtcbiAgfVxuXG4gIHJldHVybiB0ZXJtaW5hbE5vZGVWZXJpZmllZDtcbn1cblxuZnVuY3Rpb24gdmVyaWZ5Tm9uVGVybWluYWxOb2RlKG5vblRlcm1pbmFsTm9kZSwgY29uc3RydWN0b3JOb25UZXJtaW5hbE5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IG5vblRlcm1pbmFsTm9kZVZlcmlmaWVkID0gZmFsc2U7XG5cbiAgY29uc3QgcnVsZU5hbWUgPSBub25UZXJtaW5hbE5vZGUuZ2V0UnVsZU5hbWUoKSwgLy8vXG4gICAgICAgIGNvbnN0cnVjdG9yUnVsZU5hbWUgPSBjb25zdHJ1Y3Rvck5vblRlcm1pbmFsTm9kZS5nZXRSdWxlTmFtZSgpOyAvLy9cblxuICBpZiAocnVsZU5hbWUgPT09IGNvbnN0cnVjdG9yUnVsZU5hbWUpIHtcbiAgICBzd2l0Y2ggKHJ1bGVOYW1lKSB7XG4gICAgICBjYXNlIEFSR1VNRU5UX1JVTEVfTkFNRToge1xuICAgICAgICBjb25zdCBhcmd1bWVudE5vZGUgPSBub25UZXJtaW5hbE5vZGUsIC8vL1xuICAgICAgICAgICAgICBjb25zdHJ1Y3RvckFyZ3VtZW50Tm9kZSA9IGNvbnN0cnVjdG9yTm9uVGVybWluYWxOb2RlLCAvLy9cbiAgICAgICAgICAgICAgYXJndW1lbnROb2RlVmVyaWZpZWQgPSB2ZXJpZnlBcmd1bWVudE5vZGUoYXJndW1lbnROb2RlLCBjb25zdHJ1Y3RvckFyZ3VtZW50Tm9kZSwgY29udGV4dCk7XG5cbiAgICAgICAgbm9uVGVybWluYWxOb2RlVmVyaWZpZWQgPSBhcmd1bWVudE5vZGVWZXJpZmllZDsgLy8vXG5cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgY29uc3QgY2hpbGROb2RlcyA9IG5vblRlcm1pbmFsTm9kZS5nZXRDaGlsZE5vZGVzKCksXG4gICAgICAgICAgICAgIGNvbnN0cnVjdG9yQ2hpbGROb2RlcyA9IGNvbnN0cnVjdG9yTm9uVGVybWluYWxOb2RlLmdldENoaWxkTm9kZXMoKSxcbiAgICAgICAgICAgICAgbm9kZXMgPSBjaGlsZE5vZGVzLCAvLy9cbiAgICAgICAgICAgICAgY29uc3RydWN0b3JOb2RlcyA9IGNvbnN0cnVjdG9yQ2hpbGROb2RlcywgLy8vXG4gICAgICAgICAgICAgIG5vZGVzVmVyaWZpZWQgPSB2ZXJpZnlOb2Rlcyhub2RlcywgY29uc3RydWN0b3JOb2RlcywgY29udGV4dCk7XG5cbiAgICAgICAgbm9uVGVybWluYWxOb2RlVmVyaWZpZWQgPSBub2Rlc1ZlcmlmaWVkOyAvLy9cblxuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gbm9uVGVybWluYWxOb2RlVmVyaWZpZWQ7XG59XG5cbmZ1bmN0aW9uIHZlcmlmeUFyZ3VtZW50Tm9kZShhcmd1bWVudE5vZGUsIGNvbnN0cnVjdG9yQXJndW1lbnROb2RlLCBjb250ZXh0KSB7XG4gIGxldCBhcmd1bWVudE5vZGVWZXJpZmllZCA9IGZhbHNlO1xuXG4gIGNvbnN0IHRlcm1Ob2RlID0gdGVybU5vZGVRdWVyeShhcmd1bWVudE5vZGUpO1xuXG4gIGlmICh0ZXJtTm9kZSA9PT0gbnVsbCkge1xuICAgIGNvbnN0IGFyZ3VtZW50U3RyaW5nID0gbm9kZUFzU3RyaW5nKGFyZ3VtZW50Tm9kZSk7XG5cbiAgICBjb250ZXh0LmVycm9yKGBUaGUgJHthcmd1bWVudFN0cmluZ30gYXJndW1lbnQgc2hvdWxkIGJlIGEgdGVybSwgbm90IGEgdHlwZWApO1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IHR5cGVzID0gW10sXG4gICAgICAgICAgdGVybVZlcmlmaWVkID0gdmVyaWZ5VGVybSh0ZXJtTm9kZSwgdHlwZXMsIGNvbnRleHQpO1xuXG4gICAgaWYgKHRlcm1WZXJpZmllZCkge1xuICAgICAgY29uc3QgZmlyc3RUeXBlID0gZmlyc3QodHlwZXMpLFxuICAgICAgICAgICAgdGVybVR5cGUgPSBmaXJzdFR5cGUsIC8vL1xuICAgICAgICAgICAgdHlwZU5vZGUgPSB0eXBlTm9kZVF1ZXJ5KGNvbnN0cnVjdG9yQXJndW1lbnROb2RlKSxcbiAgICAgICAgICAgIHR5cGVOYW1lID0gdHlwZU5hbWVGcm9tVHlwZU5vZGUodHlwZU5vZGUpLFxuICAgICAgICAgICAgdHlwZSA9IGNvbnRleHQuZmluZFR5cGVCeVR5cGVOYW1lKHR5cGVOYW1lKSxcbiAgICAgICAgICAgIHRlcm1UeXBlRXF1YWxUb09yU3ViVHlwZU9mVHlwZSA9IHRlcm1UeXBlLmlzRXF1YWxUb09yU3ViVHlwZU9mKHR5cGUpO1xuXG4gICAgICBpZiAodGVybVR5cGVFcXVhbFRvT3JTdWJUeXBlT2ZUeXBlKSB7XG4gICAgICAgIGFyZ3VtZW50Tm9kZVZlcmlmaWVkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gYXJndW1lbnROb2RlVmVyaWZpZWQ7XG59XG4iXSwibmFtZXMiOlsidmVyaWZ5VGVybSIsInZlcmlmeVRlcm1Bc1ZhcmlhYmxlIiwidmVyaWZ5VGVybUFnYWluc3RDb25zdHJ1Y3RvcnMiLCJ0ZXJtTm9kZVF1ZXJ5Iiwibm9kZVF1ZXJ5IiwidHlwZU5vZGVRdWVyeSIsInZhcmlhYmxlTm9kZVF1ZXJ5IiwidGVybU5vZGUiLCJ0eXBlcyIsImNvbnRleHQiLCJ0ZXJtVmVyaWZpZWQiLCJiZWdpbiIsInRlcm1TdHJpbmciLCJub2RlQXNTdHJpbmciLCJkZWJ1ZyIsInZhcmlhYmxlcyIsInRlcm1WZXJpZmllZEFzVmFyaWFibGUiLCJmaXJzdFZhcmlhYmxlIiwiZmlyc3QiLCJ2YXJpYWJsZSIsInR5cGUiLCJnZXRUeXBlIiwicHVzaCIsInRlcm1WZXJpZmllZEFnYWluc3RDb25zdHJ1Y3RvcnMiLCJpbmZvIiwiY29tcGxldGUiLCJoYWx0IiwidmFyaWFibGVOb2RlIiwidmFyaWFibGVOYW1lIiwidmFyaWFibGVOYW1lRnJvbVZhcmlhYmxlTm9kZSIsInZhcmlhYmxlUHJlc2VudCIsImlzVmFyaWFibGVQcmVzZW50QnlWYXJpYWJsZU5hbWUiLCJmaW5kVmFyaWFibGVCeVZhcmlhYmxlTmFtZSIsImNvbnN0cnVjdG9ycyIsImdldENvbnN0cnVjdG9ycyIsImNvbnN0cnVjdG9yIiwiZmluZCIsInRlcm1WZXJpZmllZEFnYWluc3RDb25zdHJ1Y3RvciIsInZlcmlmeVRlcm1BZ2FpbnN0Q29uc3RydWN0b3IiLCJjb25zdHJ1Y3RvclRlcm1Ob2RlIiwiZ2V0VGVybU5vZGUiLCJub2RlIiwiY29uc3RydWN0b3JOb2RlIiwibm9kZVZlcmlmaWVkIiwidmVyaWZ5Tm9kZSIsIm5vZGVUZXJtaW5hbE5vZGUiLCJpc1Rlcm1pbmFsTm9kZSIsImNvbnN0cnVjdG9yTm9kZVRlcm1pbmFsTm9kZSIsInRlcm1pbmFsTm9kZSIsImNvbnN0cnVjdG9yVGVybWluYWxOb2RlIiwidGVybWluYWxOb2RlVmVyaWZpZWQiLCJ2ZXJpZnlUZXJtaW5hbE5vZGUiLCJub25UZXJtaW5hbE5vZGUiLCJjb25zdHJ1Y3Rvck5vblRlcm1pbmFsTm9kZSIsIm5vblRlcm1pbmFsTm9kZVZlcmlmaWVkIiwidmVyaWZ5Tm9uVGVybWluYWxOb2RlIiwidmVyaWZ5Tm9kZXMiLCJub2RlcyIsImNvbnN0cnVjdG9yTm9kZXMiLCJub2Rlc1ZlcmlmaWVkIiwibm9kZXNMZW5ndGgiLCJsZW5ndGgiLCJjb25zdHJ1Y3Rvck5vZGVzTGVuZ3RoIiwiZXZlcnkiLCJpbmRleCIsIm1hdGNoZXMiLCJtYXRjaCIsInJ1bGVOYW1lIiwiZ2V0UnVsZU5hbWUiLCJjb25zdHJ1Y3RvclJ1bGVOYW1lIiwiQVJHVU1FTlRfUlVMRV9OQU1FIiwiYXJndW1lbnROb2RlIiwiY29uc3RydWN0b3JBcmd1bWVudE5vZGUiLCJhcmd1bWVudE5vZGVWZXJpZmllZCIsInZlcmlmeUFyZ3VtZW50Tm9kZSIsImNoaWxkTm9kZXMiLCJnZXRDaGlsZE5vZGVzIiwiY29uc3RydWN0b3JDaGlsZE5vZGVzIiwiYXJndW1lbnRTdHJpbmciLCJlcnJvciIsImZpcnN0VHlwZSIsInRlcm1UeXBlIiwidHlwZU5vZGUiLCJ0eXBlTmFtZSIsInR5cGVOYW1lRnJvbVR5cGVOb2RlIiwiZmluZFR5cGVCeVR5cGVOYW1lIiwidGVybVR5cGVFcXVhbFRvT3JTdWJUeXBlT2ZUeXBlIiwiaXNFcXVhbFRvT3JTdWJUeXBlT2YiXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7OztJQVdBLE9BcUNDO2VBckN1QkE7O0lBdUNSQyxvQkFBb0I7ZUFBcEJBOztJQTJCQUMsNkJBQTZCO2VBQTdCQTs7O3FCQTNFTTtzQkFDTzt5QkFDTTtxQkFDMkM7QUFFOUUsSUFBTUMsZ0JBQWdCQyxJQUFBQSxnQkFBUyxFQUFDLG9CQUMxQkMsZ0JBQWdCRCxJQUFBQSxnQkFBUyxFQUFDLG9CQUMxQkUsb0JBQW9CRixJQUFBQSxnQkFBUyxFQUFDO0FBRXJCLFNBQVNKLFdBQVdPLFFBQVEsRUFBRUMsS0FBSyxFQUFFQyxPQUFPLEVBQUU7SUFDM0QsSUFBSUMsZUFBZSxLQUFLO0lBRXhCRCxRQUFRRSxLQUFLLENBQUNKO0lBRWQsSUFBTUssYUFB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
164
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy92ZXJpZnkvdGVybS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgZmlyc3QgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2FycmF5XCI7XG5pbXBvcnQgeyBvYmplY3RUeXBlIH0gZnJvbSBcIi4uL3R5cGVcIjtcbmltcG9ydCB7IG5vZGVBc1N0cmluZyB9IGZyb20gXCIuLi91dGlsaXRpZXMvc3RyaW5nXCI7XG5pbXBvcnQgeyBPQkpFQ1RfVFlQRV9OQU1FIH0gZnJvbSBcIi4uL3R5cGVOYW1lc1wiO1xuaW1wb3J0IHsgQVJHVU1FTlRfUlVMRV9OQU1FIH0gZnJvbSBcIi4uL3J1bGVOYW1lc1wiO1xuaW1wb3J0IHsgbm9kZVF1ZXJ5LCB0eXBlTmFtZUZyb21UeXBlTm9kZSwgdmFyaWFibGVOYW1lRnJvbVZhcmlhYmxlTm9kZSB9IGZyb20gXCIuLi91dGlsaXRpZXMvcXVlcnlcIjtcblxuY29uc3QgdGVybU5vZGVRdWVyeSA9IG5vZGVRdWVyeShcIi9hcmd1bWVudC90ZXJtIVwiKSxcbiAgICAgIHR5cGVOb2RlUXVlcnkgPSBub2RlUXVlcnkoXCIvYXJndW1lbnQvdHlwZSFcIiksXG4gICAgICB2YXJpYWJsZU5vZGVRdWVyeSA9IG5vZGVRdWVyeShcIi90ZXJtL3ZhcmlhYmxlIVwiKTtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdmVyaWZ5VGVybSh0ZXJtTm9kZSwgdHlwZXMsIGNvbnRleHQpIHtcbiAgbGV0IHRlcm1WZXJpZmllZCA9IGZhbHNlO1xuXG4gIGNvbnRleHQuYmVnaW4odGVybU5vZGUpO1xuXG4gIGNvbnN0IHRlcm1TdHJpbmcgPSBub2RlQXNTdHJpbmcodGVybU5vZGUpO1xuXG4gIGNvbnRleHQuZGVidWcoYFZlcmlmeWluZyB0aGUgJyR7dGVybVN0cmluZ30nIHRlcm0uLi5gKTtcblxuICBpZiAoIXRlcm1WZXJpZmllZCkge1xuICAgIGNvbnN0IHZhcmlhYmxlcyA9IFtdLFxuICAgICAgICAgIHRlcm1WZXJpZmllZEFzVmFyaWFibGUgPSB2ZXJpZnlUZXJtQXNWYXJpYWJsZSh0ZXJtTm9kZSwgdmFyaWFibGVzLCBjb250ZXh0KTtcblxuICAgIGlmICh0ZXJtVmVyaWZpZWRBc1ZhcmlhYmxlKSB7XG4gICAgICBjb25zdCBmaXJzdFZhcmlhYmxlID0gZmlyc3QodmFyaWFibGVzKSxcbiAgICAgICAgICAgIHZhcmlhYmxlID0gZmlyc3RWYXJpYWJsZSwgLy8vXG4gICAgICAgICAgICB0eXBlID0gdmFyaWFibGUuZ2V0VHlwZSgpO1xuXG4gICAgICB0eXBlcy5wdXNoKHR5cGUpO1xuXG4gICAgICB0ZXJtVmVyaWZpZWQgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIGlmICghdGVybVZlcmlmaWVkKSB7XG4gICAgY29uc3QgdGVybVZlcmlmaWVkQWdhaW5zdENvbnN0cnVjdG9ycyA9IHZlcmlmeVRlcm1BZ2FpbnN0Q29uc3RydWN0b3JzKHRlcm1Ob2RlLCB0eXBlcywgY29udGV4dCk7XG5cbiAgICBpZiAodGVybVZlcmlmaWVkQWdhaW5zdENvbnN0cnVjdG9ycykge1xuICAgICAgdGVybVZlcmlmaWVkID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICBpZiAodGVybVZlcmlmaWVkKSB7XG4gICAgY29udGV4dC5pbmZvKGBWZXJpZmllZCB0aGUgJyR7dGVybVN0cmluZ30nIHRlcm0uYCk7XG4gIH1cblxuICB0ZXJtVmVyaWZpZWQgP1xuICAgIGNvbnRleHQuY29tcGxldGUodGVybU5vZGUpIDpcbiAgICAgIGNvbnRleHQuaGFsdCh0ZXJtTm9kZSk7XG5cbiAgcmV0dXJuIHRlcm1WZXJpZmllZDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZlcmlmeVRlcm1Bc1ZhcmlhYmxlKHRlcm1Ob2RlLCB2YXJpYWJsZXMsIGNvbnRleHQpIHtcbiAgbGV0IHRlcm1WZXJpZmllZEFzVmFyaWFibGUgPSBmYWxzZTtcblxuICBjb250ZXh0LmJlZ2luKHRlcm1Ob2RlKTtcblxuICBjb25zdCB2YXJpYWJsZU5vZGUgPSB2YXJpYWJsZU5vZGVRdWVyeSh0ZXJtTm9kZSk7XG5cbiAgaWYgKHZhcmlhYmxlTm9kZSAhPT0gbnVsbCkge1xuICAgIGNvbnN0IHZhcmlhYmxlTmFtZSA9IHZhcmlhYmxlTmFtZUZyb21WYXJpYWJsZU5vZGUodmFyaWFibGVOb2RlKSxcbiAgICAgICAgICB2YXJpYWJsZVByZXNlbnQgPSBjb250ZXh0LmlzVmFyaWFibGVQcmVzZW50QnlWYXJpYWJsZU5hbWUodmFyaWFibGVOYW1lKTtcblxuICAgIGlmICh2YXJpYWJsZVByZXNlbnQpIHtcbiAgICAgIGNvbnN0IHZhcmlhYmxlID0gY29udGV4dC5maW5kVmFyaWFibGVCeVZhcmlhYmxlTmFtZSh2YXJpYWJsZU5hbWUpO1xuXG4gICAgICB2YXJpYWJsZXMucHVzaCh2YXJpYWJsZSk7XG5cbiAgICAgIHRlcm1WZXJpZmllZEFzVmFyaWFibGUgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHRlcm1WZXJpZmllZEFzVmFyaWFibGUgP1xuICAgIGNvbnRleHQuY29tcGxldGUodGVybU5vZGUpIDpcbiAgICAgIGNvbnRleHQuaGFsdCh0ZXJtTm9kZSk7XG5cbiAgcmV0dXJuIHRlcm1WZXJpZmllZEFzVmFyaWFibGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2ZXJpZnlUZXJtQWdhaW5zdENvbnN0cnVjdG9ycyh0ZXJtTm9kZSwgdHlwZXMsIGNvbnRleHQpIHtcbiAgbGV0IHRlcm1WZXJpZmllZEFnYWluc3RDb25zdHJ1Y3RvcnMgPSBmYWxzZTtcblxuICBjb250ZXh0LmJlZ2luKHRlcm1Ob2RlKTtcblxuICBjb25zdCBjb25zdHJ1Y3RvcnMgPSBjb250ZXh0LmdldENvbnN0cnVjdG9ycygpLFxuICAgICAgICBjb25zdHJ1Y3RvciA9IGNvbnN0cnVjdG9ycy5maW5kKChjb25zdHJ1Y3RvcikgPT4ge1xuICAgICAgICAgIGNvbnN0IHRlcm1WZXJpZmllZEFnYWluc3RDb25zdHJ1Y3RvciA9IHZlcmlmeVRlcm1BZ2FpbnN0Q29uc3RydWN0b3IodGVybU5vZGUsIGNvbnN0cnVjdG9yLCBjb250ZXh0KTtcblxuICAgICAgICAgIGlmICh0ZXJtVmVyaWZpZWRBZ2FpbnN0Q29uc3RydWN0b3IpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSkgfHwgbnVsbDtcblxuICBpZiAoY29uc3RydWN0b3IgIT09IG51bGwpIHtcbiAgICBjb25zdCB0eXBlID0gY29uc3RydWN0b3IuZ2V0VHlwZSgpO1xuXG4gICAgdHlwZXMucHVzaCh0eXBlKTtcblxuICAgIHRlcm1WZXJpZmllZEFnYWluc3RDb25zdHJ1Y3RvcnMgPSB0cnVlO1xuICB9XG5cbiAgdGVybVZlcmlmaWVkQWdhaW5zdENvbnN0cnVjdG9ycyA/XG4gICAgY29udGV4dC5jb21wbGV0ZSh0ZXJtTm9kZSkgOlxuICAgICAgY29udGV4dC5oYWx0KHRlcm1Ob2RlKTtcblxuICByZXR1cm4gdGVybVZlcmlmaWVkQWdhaW5zdENvbnN0cnVjdG9ycztcbn1cblxuZnVuY3Rpb24gdmVyaWZ5VGVybUFnYWluc3RDb25zdHJ1Y3Rvcih0ZXJtTm9kZSwgY29uc3RydWN0b3IsIGNvbnRleHQpIHtcbiAgY29uc3QgY29uc3RydWN0b3JUZXJtTm9kZSA9IGNvbnN0cnVjdG9yLmdldFRlcm1Ob2RlKCksXG4gICAgICAgIG5vZGUgPSB0ZXJtTm9kZSwgIC8vL1xuICAgICAgICBjb25zdHJ1Y3Rvck5vZGUgPSBjb25zdHJ1Y3RvclRlcm1Ob2RlLCAvLy9cbiAgICAgICAgbm9kZVZlcmlmaWVkID0gdmVyaWZ5Tm9kZShub2RlLCBjb25zdHJ1Y3Rvck5vZGUsIGNvbnRleHQpLFxuICAgICAgICB0ZXJtVmVyaWZpZWRBZ2FpbnN0Q29uc3RydWN0b3IgPSBub2RlVmVyaWZpZWQ7ICAvLy9cblxuICByZXR1cm4gdGVybVZlcmlmaWVkQWdhaW5zdENvbnN0cnVjdG9yO1xufVxuXG5mdW5jdGlvbiB2ZXJpZnlOb2RlKG5vZGUsIGNvbnN0cnVjdG9yTm9kZSwgY29udGV4dCkge1xuICBsZXQgbm9kZVZlcmlmaWVkO1xuXG4gIGNvbnN0IG5vZGVUZXJtaW5hbE5vZGUgPSBub2RlLmlzVGVybWluYWxOb2RlKCksXG4gICAgICAgIGNvbnN0cnVjdG9yTm9kZVRlcm1pbmFsTm9kZSA9IGNvbnN0cnVjdG9yTm9kZS5pc1Rlcm1pbmFsTm9kZSgpO1xuXG4gIGlmIChub2RlVGVybWluYWxOb2RlID09PSBjb25zdHJ1Y3Rvck5vZGVUZXJtaW5hbE5vZGUpIHtcbiAgICBpZiAobm9kZVRlcm1pbmFsTm9kZSkge1xuICAgICAgY29uc3QgdGVybWluYWxOb2RlID0gbm9kZSwgIC8vL1xuICAgICAgICAgICAgY29uc3RydWN0b3JUZXJtaW5hbE5vZGUgPSBjb25zdHJ1Y3Rvck5vZGUsICAvLy9cbiAgICAgICAgICAgIHRlcm1pbmFsTm9kZVZlcmlmaWVkID0gdmVyaWZ5VGVybWluYWxOb2RlKHRlcm1pbmFsTm9kZSwgY29uc3RydWN0b3JUZXJtaW5hbE5vZGUsIGNvbnRleHQpO1xuXG4gICAgICBub2RlVmVyaWZpZWQgPSB0ZXJtaW5hbE5vZGVWZXJpZmllZDsgIC8vL1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBub25UZXJtaW5hbE5vZGUgPSBub2RlLCAvLy9cbiAgICAgICAgICAgIGNvbnN0cnVjdG9yTm9uVGVybWluYWxOb2RlID0gY29uc3RydWN0b3JOb2RlLCAgLy8vXG4gICAgICAgICAgICBub25UZXJtaW5hbE5vZGVWZXJpZmllZCA9IHZlcmlmeU5vblRlcm1pbmFsTm9kZShub25UZXJtaW5hbE5vZGUsIGNvbnN0cnVjdG9yTm9uVGVybWluYWxOb2RlLCBjb250ZXh0KTtcblxuICAgICAgbm9kZVZlcmlmaWVkID0gbm9uVGVybWluYWxOb2RlVmVyaWZpZWQ7IC8vL1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBub2RlVmVyaWZpZWQ7XG59XG5cbmZ1bmN0aW9uIHZlcmlmeU5vZGVzKG5vZGVzLCBjb25zdHJ1Y3Rvck5vZGVzLCBjb250ZXh0KSB7XG4gIGxldCBub2Rlc1ZlcmlmaWVkID0gZmFsc2U7XG5cbiAgY29uc3Qgbm9kZXNMZW5ndGggPSBub2Rlcy5sZW5ndGgsXG4gICAgICAgIGNvbnN0cnVjdG9yTm9kZXNMZW5ndGggPSBjb25zdHJ1Y3Rvck5vZGVzLmxlbmd0aDtcblxuICBpZiAobm9kZXNMZW5ndGggPT09IGNvbnN0cnVjdG9yTm9kZXNMZW5ndGgpIHtcbiAgICBub2Rlc1ZlcmlmaWVkID0gbm9kZXMuZXZlcnkoKG5vZGUsIGluZGV4KSA9PiB7XG4gICAgICBjb25zdCBjb25zdHJ1Y3Rvck5vZGUgPSBjb25zdHJ1Y3Rvck5vZGVzW2luZGV4XSxcbiAgICAgICAgICAgIG5vZGVWZXJpZmllZCA9IHZlcmlmeU5vZGUobm9kZSwgY29uc3RydWN0b3JOb2RlLCBjb250ZXh0KTtcblxuICAgICAgaWYgKG5vZGVWZXJpZmllZCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBub2Rlc1ZlcmlmaWVkO1xufVxuXG5mdW5jdGlvbiB2ZXJpZnlUZXJtaW5hbE5vZGUodGVybWluYWxOb2RlLCBjb25zdHJ1Y3RvclRlcm1pbmFsTm9kZSwgY29udGV4dCkge1xuICBsZXQgdGVybWluYWxOb2RlVmVyaWZpZWQgPSBmYWxzZTtcblxuICBjb25zdCBtYXRjaGVzID0gdGVybWluYWxOb2RlLm1hdGNoKGNvbnN0cnVjdG9yVGVybWluYWxOb2RlKTtcblxuICBpZiAobWF0Y2hlcykge1xuICAgIHRlcm1pbmFsTm9kZVZlcmlmaWVkID0gdHJ1ZTtcbiAgfVxuXG4gIHJldHVybiB0ZXJtaW5hbE5vZGVWZXJpZmllZDtcbn1cblxuZnVuY3Rpb24gdmVyaWZ5Tm9uVGVybWluYWxOb2RlKG5vblRlcm1pbmFsTm9kZSwgY29uc3RydWN0b3JOb25UZXJtaW5hbE5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IG5vblRlcm1pbmFsTm9kZVZlcmlmaWVkID0gZmFsc2U7XG5cbiAgY29uc3QgcnVsZU5hbWUgPSBub25UZXJtaW5hbE5vZGUuZ2V0UnVsZU5hbWUoKSwgLy8vXG4gICAgICAgIGNvbnN0cnVjdG9yUnVsZU5hbWUgPSBjb25zdHJ1Y3Rvck5vblRlcm1pbmFsTm9kZS5nZXRSdWxlTmFtZSgpOyAvLy9cblxuICBpZiAocnVsZU5hbWUgPT09IGNvbnN0cnVjdG9yUnVsZU5hbWUpIHtcbiAgICBzd2l0Y2ggKHJ1bGVOYW1lKSB7XG4gICAgICBjYXNlIEFSR1VNRU5UX1JVTEVfTkFNRToge1xuICAgICAgICBjb25zdCBhcmd1bWVudE5vZGUgPSBub25UZXJtaW5hbE5vZGUsIC8vL1xuICAgICAgICAgICAgICBjb25zdHJ1Y3RvckFyZ3VtZW50Tm9kZSA9IGNvbnN0cnVjdG9yTm9uVGVybWluYWxOb2RlLCAvLy9cbiAgICAgICAgICAgICAgYXJndW1lbnROb2RlVmVyaWZpZWQgPSB2ZXJpZnlBcmd1bWVudE5vZGUoYXJndW1lbnROb2RlLCBjb25zdHJ1Y3RvckFyZ3VtZW50Tm9kZSwgY29udGV4dCk7XG5cbiAgICAgICAgbm9uVGVybWluYWxOb2RlVmVyaWZpZWQgPSBhcmd1bWVudE5vZGVWZXJpZmllZDsgLy8vXG5cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgY29uc3QgY2hpbGROb2RlcyA9IG5vblRlcm1pbmFsTm9kZS5nZXRDaGlsZE5vZGVzKCksXG4gICAgICAgICAgICAgIGNvbnN0cnVjdG9yQ2hpbGROb2RlcyA9IGNvbnN0cnVjdG9yTm9uVGVybWluYWxOb2RlLmdldENoaWxkTm9kZXMoKSxcbiAgICAgICAgICAgICAgbm9kZXMgPSBjaGlsZE5vZGVzLCAvLy9cbiAgICAgICAgICAgICAgY29uc3RydWN0b3JOb2RlcyA9IGNvbnN0cnVjdG9yQ2hpbGROb2RlcywgLy8vXG4gICAgICAgICAgICAgIG5vZGVzVmVyaWZpZWQgPSB2ZXJpZnlOb2Rlcyhub2RlcywgY29uc3RydWN0b3JOb2RlcywgY29udGV4dCk7XG5cbiAgICAgICAgbm9uVGVybWluYWxOb2RlVmVyaWZpZWQgPSBub2Rlc1ZlcmlmaWVkOyAvLy9cblxuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gbm9uVGVybWluYWxOb2RlVmVyaWZpZWQ7XG59XG5cbmZ1bmN0aW9uIHZlcmlmeUFyZ3VtZW50Tm9kZShhcmd1bWVudE5vZGUsIGNvbnN0cnVjdG9yQXJndW1lbnROb2RlLCBjb250ZXh0KSB7XG4gIGxldCBhcmd1bWVudE5vZGVWZXJpZmllZCA9IGZhbHNlO1xuXG4gIGNvbnN0IHRlcm1Ob2RlID0gdGVybU5vZGVRdWVyeShhcmd1bWVudE5vZGUpO1xuXG4gIGlmICh0ZXJtTm9kZSA9PT0gbnVsbCkge1xuICAgIGNvbnN0IGFyZ3VtZW50U3RyaW5nID0gbm9kZUFzU3RyaW5nKGFyZ3VtZW50Tm9kZSk7XG5cbiAgICBjb250ZXh0LmVycm9yKGBUaGUgJHthcmd1bWVudFN0cmluZ30gYXJndW1lbnQgc2hvdWxkIGJlIGEgdGVybSwgbm90IGEgdHlwZWApO1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IHR5cGVzID0gW10sXG4gICAgICAgICAgdGVybVZlcmlmaWVkID0gdmVyaWZ5VGVybSh0ZXJtTm9kZSwgdHlwZXMsIGNvbnRleHQpO1xuXG4gICAgaWYgKHRlcm1WZXJpZmllZCkge1xuICAgICAgY29uc3QgZmlyc3RUeXBlID0gZmlyc3QodHlwZXMpLFxuICAgICAgICAgICAgdGVybVR5cGUgPSBmaXJzdFR5cGUsIC8vL1xuICAgICAgICAgICAgdHlwZU5vZGUgPSB0eXBlTm9kZVF1ZXJ5KGNvbnN0cnVjdG9yQXJndW1lbnROb2RlKSxcbiAgICAgICAgICAgIHR5cGVOYW1lID0gdHlwZU5hbWVGcm9tVHlwZU5vZGUodHlwZU5vZGUpLFxuICAgICAgICAgICAgdHlwZSA9ICh0eXBlTmFtZSA9PT0gT0JKRUNUX1RZUEVfTkFNRSkgP1xuICAgICAgICAgICAgICAgICAgICAgb2JqZWN0VHlwZSA6ICAvLy9cbiAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC5maW5kVHlwZUJ5VHlwZU5hbWUodHlwZU5hbWUpLFxuICAgICAgICAgICAgdGVybVR5cGVFcXVhbFRvT3JTdWJUeXBlT2ZUeXBlID0gdGVybVR5cGUuaXNFcXVhbFRvT3JTdWJUeXBlT2YodHlwZSk7XG5cbiAgICAgIGlmICh0ZXJtVHlwZUVxdWFsVG9PclN1YlR5cGVPZlR5cGUpIHtcbiAgICAgICAgYXJndW1lbnROb2RlVmVyaWZpZWQgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBhcmd1bWVudE5vZGVWZXJpZmllZDtcbn1cbiJdLCJuYW1lcyI6WyJ2ZXJpZnlUZXJtIiwidmVyaWZ5VGVybUFzVmFyaWFibGUiLCJ2ZXJpZnlUZXJtQWdhaW5zdENvbnN0cnVjdG9ycyIsInRlcm1Ob2RlUXVlcnkiLCJub2RlUXVlcnkiLCJ0eXBlTm9kZVF1ZXJ5IiwidmFyaWFibGVOb2RlUXVlcnkiLCJ0ZXJtTm9kZSIsInR5cGVzIiwiY29udGV4dCIsInRlcm1WZXJpZmllZCIsImJlZ2luIiwidGVybVN0cmluZyIsIm5vZGVBc1N0cmluZyIsImRlYnVnIiwidmFyaWFibGVzIiwidGVybVZlcmlmaWVkQXNWYXJpYWJsZSIsImZpcnN0VmFyaWFibGUiLCJmaXJzdCIsInZhcmlhYmxlIiwidHlwZSIsImdldFR5cGUiLCJwdXNoIiwidGVybVZlcmlmaWVkQWdhaW5zdENvbnN0cnVjdG9ycyIsImluZm8iLCJjb21wbGV0ZSIsImhhbHQiLCJ2YXJpYWJsZU5vZGUiLCJ2YXJpYWJsZU5hbWUiLCJ2YXJpYWJsZU5hbWVGcm9tVmFyaWFibGVOb2RlIiwidmFyaWFibGVQcmVzZW50IiwiaXNWYXJpYWJsZVByZXNlbnRCeVZhcmlhYmxlTmFtZSIsImZpbmRWYXJpYWJsZUJ5VmFyaWFibGVOYW1lIiwiY29uc3RydWN0b3JzIiwiZ2V0Q29uc3RydWN0b3JzIiwiY29uc3RydWN0b3IiLCJmaW5kIiwidGVybVZlcmlmaWVkQWdhaW5zdENvbnN0cnVjdG9yIiwidmVyaWZ5VGVybUFnYWluc3RDb25zdHJ1Y3RvciIsImNvbnN0cnVjdG9yVGVybU5vZGUiLCJnZXRUZXJtTm9kZSIsIm5vZGUiLCJjb25zdHJ1Y3Rvck5vZGUiLCJub2RlVmVyaWZpZWQiLCJ2ZXJpZnlOb2RlIiwibm9kZVRlcm1pbmFsTm9kZSIsImlzVGVybWluYWxOb2RlIiwiY29uc3RydWN0b3JOb2RlVGVybWluYWxOb2RlIiwidGVybWluYWxOb2RlIiwiY29uc3RydWN0b3JUZXJtaW5hbE5vZGUiLCJ0ZXJtaW5hbE5vZGVWZXJpZmllZCIsInZlcmlmeVRlcm1pbmFsTm9kZSIsIm5vblRlcm1pbmFsTm9kZSIsImNvbnN0cnVjdG9yTm9uVGVybWluYWxOb2RlIiwibm9uVGVybWluYWxOb2RlVmVyaWZpZWQiLCJ2ZXJpZnlOb25UZXJtaW5hbE5vZGUiLCJ2ZXJpZnlOb2RlcyIsIm5vZGVzIiwiY29uc3RydWN0b3JOb2RlcyIsIm5vZGVzVmVyaWZpZWQiLCJub2Rlc0xlbmd0aCIsImxlbmd0aCIsImNvbnN0cnVjdG9yTm9kZXNMZW5ndGgiLCJldmVyeSIsImluZGV4IiwibWF0Y2hlcyIsIm1hdGNoIiwicnVsZU5hbWUiLCJnZXRSdWxlTmFtZSIsImNvbnN0cnVjdG9yUnVsZU5hbWUiLCJBUkdVTUVOVF9SVUxFX05BTUUiLCJhcmd1bWVudE5vZGUiLCJjb25zdHJ1Y3RvckFyZ3VtZW50Tm9kZSIsImFyZ3VtZW50Tm9kZVZlcmlmaWVkIiwidmVyaWZ5QXJndW1lbnROb2RlIiwiY2hpbGROb2RlcyIsImdldENoaWxkTm9kZXMiLCJjb25zdHJ1Y3RvckNoaWxkTm9kZXMiLCJhcmd1bWVudFN0cmluZyIsImVycm9yIiwiZmlyc3RUeXBlIiwidGVybVR5cGUiLCJ0eXBlTm9kZSIsInR5cGVOYW1lIiwidHlwZU5hbWVGcm9tVHlwZU5vZGUiLCJPQkpFQ1RfVFlQRV9OQU1FIiwib2JqZWN0VHlwZSIsImZpbmRUeXBlQnlUeXBlTmFtZSIsInRlcm1UeXBlRXF1YWxUb09yU3ViVHlwZU9mVHlwZSIsImlzRXF1YWxUb09yU3ViVHlwZU9mIl0sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7SUFhQSxPQXlDQztlQXpD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
@@ -9,6 +9,7 @@ Object.defineProperty(exports, "default", {
9
9
  }
10
10
  });
11
11
  var _variable = /*#__PURE__*/ _interopRequireDefault(require("../variable"));
12
+ var _type = require("../type");
12
13
  var _string = require("../utilities/string");
13
14
  var _query = require("../utilities/query");
14
15
  function _interopRequireDefault(obj) {
@@ -28,7 +29,7 @@ function verifyVariable(variableNode, typeNode, fileContext) {
28
29
  var variable;
29
30
  var typeName = (0, _query.typeNameFromTypeNode)(typeNode);
30
31
  if (typeName === null) {
31
- var type = null, name = variableName; ///
32
+ var type = _type.objectType, name = variableName; ///
32
33
  variable = _variable.default.fromTypeAndName(type, name);
33
34
  } else {
34
35
  var type1 = fileContext.findTypeByTypeName(typeName);
@@ -51,4 +52,4 @@ function verifyVariable(variableNode, typeNode, fileContext) {
51
52
  return variableVerified;
52
53
  }
53
54
 
54
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy92ZXJpZnkvdmFyaWFibGUuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBWYXJpYWJsZSBmcm9tIFwiLi4vdmFyaWFibGVcIjtcblxuaW1wb3J0IHsgbm9kZUFzU3RyaW5nIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9zdHJpbmdcIjtcbmltcG9ydCB7IHR5cGVOYW1lRnJvbVR5cGVOb2RlLCB2YXJpYWJsZU5hbWVGcm9tVmFyaWFibGVOb2RlIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9xdWVyeVwiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB2ZXJpZnlWYXJpYWJsZSh2YXJpYWJsZU5vZGUsIHR5cGVOb2RlLCBmaWxlQ29udGV4dCkge1xuICBsZXQgdmFyaWFibGVWZXJpZmllZCA9IGZhbHNlO1xuXG4gIGZpbGVDb250ZXh0LmJlZ2luKHZhcmlhYmxlTm9kZSk7XG5cbiAgY29uc3QgdmFyaWFibGVTdHJpbmcgPSBub2RlQXNTdHJpbmcodmFyaWFibGVOb2RlKTtcblxuICBmaWxlQ29udGV4dC5kZWJ1ZyhgVmVyaWZ5aW5nIHRoZSAnJHt2YXJpYWJsZVN0cmluZ30nIHZhcmlhYmxlLi4uYCk7XG5cbiAgY29uc3QgdmFyaWFibGVOYW1lID0gdmFyaWFibGVOYW1lRnJvbVZhcmlhYmxlTm9kZSh2YXJpYWJsZU5vZGUpLFxuICAgICAgICB2YXJpYWJsZVByZXNlbnQgPSBmaWxlQ29udGV4dC5pc1ZhcmlhYmxlUHJlc2VudEJ5VmFyaWFibGVOYW1lKHZhcmlhYmxlTmFtZSk7XG5cbiAgaWYgKHZhcmlhYmxlUHJlc2VudCkge1xuICAgIGZpbGVDb250ZXh0LmVycm9yKGBUaGUgdmFyaWFibGUgJyR7dmFyaWFibGVOYW1lfScgaXMgYWxyZWFkeSBwcmVzZW50LmApO1xuICB9IGVsc2Uge1xuICAgIGxldCB2YXJpYWJsZTtcblxuICAgIGNvbnN0IHR5cGVOYW1lID0gdHlwZU5hbWVGcm9tVHlwZU5vZGUodHlwZU5vZGUpO1xuICAgIFxuICAgIGlmICh0eXBlTmFtZSA9PT0gbnVsbCkge1xuICAgICAgY29uc3QgdHlwZSA9IG51bGwsXG4gICAgICAgICAgICBuYW1lID0gdmFyaWFibGVOYW1lOyAgLy8vXG5cbiAgICAgIHZhcmlhYmxlID0gVmFyaWFibGUuZnJvbVR5cGVBbmROYW1lKHR5cGUsIG5hbWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCB0eXBlID0gZmlsZUNvbnRleHQuZmluZFR5cGVCeVR5cGVOYW1lKHR5cGVOYW1lKTtcblxuICAgICAgaWYgKHR5cGUgPT09IG51bGwpIHtcbiAgICAgICAgZmlsZUNvbnRleHQuZXJyb3IoYFRoZSAnJHt2YXJpYWJsZU5hbWV9JyB2YXJpYWJsZSdzICcke3R5cGVOYW1lfScgdHlwZSBpcyBtaXNzaW5nLmApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgbmFtZSA9IHZhcmlhYmxlTmFtZTsgIC8vL1xuXG4gICAgICAgIHZhcmlhYmxlID0gVmFyaWFibGUuZnJvbVR5cGVBbmROYW1lKHR5cGUsIG5hbWUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh2YXJpYWJsZSAhPT0gbnVsbCkge1xuICAgICAgZmlsZUNvbnRleHQuYWRkVmFyaWFibGUodmFyaWFibGUpO1xuXG4gICAgICB2YXJpYWJsZVZlcmlmaWVkID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICBpZiAodmFyaWFibGVWZXJpZmllZCkge1xuICAgIGZpbGVDb250ZXh0LmluZm8oYFZlcmlmaWVkIHRoZSAnJHt2YXJpYWJsZVN0cmluZ30nIHZhcmlhYmxlLmApO1xuICB9XG5cbiAgdmFyaWFibGVWZXJpZmllZCA/XG4gICAgZmlsZUNvbnRleHQuY29tcGxldGUodmFyaWFibGVOb2RlKSA6XG4gICAgICBmaWxlQ29udGV4dC5oYWx0KHZhcmlhYmxlTm9kZSk7XG5cbiAgcmV0dXJuIHZhcmlhYmxlVmVyaWZpZWQ7XG59XG4iXSwibmFtZXMiOlsidmVyaWZ5VmFyaWFibGUiLCJ2YXJpYWJsZU5vZGUiLCJ0eXBlTm9kZSIsImZpbGVDb250ZXh0IiwidmFyaWFibGVWZXJpZmllZCIsImJlZ2luIiwidmFyaWFibGVTdHJpbmciLCJub2RlQXNTdHJpbmciLCJkZWJ1ZyIsInZhcmlhYmxlTmFtZSIsInZhcmlhYmxlTmFtZUZyb21WYXJpYWJsZU5vZGUiLCJ2YXJpYWJsZVByZXNlbnQiLCJpc1ZhcmlhYmxlUHJlc2VudEJ5VmFyaWFibGVOYW1lIiwiZXJyb3IiLCJ2YXJpYWJsZSIsInR5cGVOYW1lIiwidHlwZU5hbWVGcm9tVHlwZU5vZGUiLCJ0eXBlIiwibmFtZSIsIlZhcmlhYmxlIiwiZnJvbVR5cGVBbmROYW1lIiwiZmluZFR5cGVCeVR5cGVOYW1lIiwiYWRkVmFyaWFibGUiLCJpbmZvIiwiY29tcGxldGUiLCJoYWx0Il0sIm1hcHBpbmdzIjoiQUFBQTs7OzsrQkFPQTs7O2VBQXdCQTs7OzZEQUxIO3NCQUVRO3FCQUNzQzs7Ozs7O0FBRXBELFNBQVNBLGVBQWVDLFlBQVksRUFBRUMsUUFBUSxFQUFFQyxXQUFXLEVBQUU7SUFDMUUsSUFBSUMsbUJBQW1CLEtBQUs7SUFFNUJELFlBQVlFLEtBQUssQ0FBQ0o7SUFFbEIsSUFBTUssaUJBQWlCQyxJQUFBQSxvQkFBWSxFQUFDTjtJQUVwQ0UsWUFBWUssS0FBSyxDQUFDLEFBQUMsa0JBQWdDLE9BQWZGLGdCQUFlO0lBRW5ELElBQU1HLGVBQWVDLElBQUFBLG1DQUE0QixFQUFDVCxlQUM1Q1Usa0JBQWtCUixZQUFZUywrQkFBK0IsQ0FBQ0g7SUFFcEUsSUFBSUUsaUJBQWlCO1FBQ25CUixZQUFZVSxLQUFLLENBQUMsQUFBQyxpQkFBNkIsT0FBYkosY0FBYTtJQUNsRCxPQUFPO1FBQ0wsSUFBSUs7UUFFSixJQUFNQyxXQUFXQyxJQUFBQSwyQkFBb0IsRUFBQ2Q7UUFFdEMsSUFBSWEsYUFBYSxJQUFJLEVBQUU7WUFDckIsSUFBTUUsT0FBTyxJQUFJLEVBQ1hDLE9BQU9ULGNBQWUsR0FBRztZQUUvQkssV0FBV0ssaUJBQVEsQ0FBQ0MsZUFBZSxDQUFDSCxNQUFNQztRQUM1QyxPQUFPO1lBQ0wsSUFBTUQsUUFBT2QsWUFBWWtCLGtCQUFrQixDQUFDTjtZQUU1QyxJQUFJRSxVQUFTLElBQUksRUFBRTtnQkFDakJkLFlBQVlVLEtBQUssQ0FBQyxBQUFDLFFBQW9DRSxPQUE3Qk4sY0FBYSxrQkFBeUIsT0FBVE0sVUFBUztZQUNsRSxPQUFPO2dCQUNMLElBQU1HLFFBQU9ULGNBQWUsR0FBRztnQkFFL0JLLFdBQVdLLGlCQUFRLENBQUNDLGVBQWUsQ0FBQ0gsT0FBTUM7WUFDNUMsQ0FBQztRQUNILENBQUM7UUFFRCxJQUFJSixhQUFhLElBQUksRUFBRTtZQUNyQlgsWUFBWW1CLFdBQVcsQ0FBQ1I7WUFFeEJWLG1CQUFtQixJQUFJO1FBQ3pCLENBQUM7SUFDSCxDQUFDO0lBRUQsSUFBSUEsa0JBQWtCO1FBQ3BCRCxZQUFZb0IsSUFBSSxDQUFDLEFBQUMsaUJBQStCLE9BQWZqQixnQkFBZTtJQUNuRCxDQUFDO0lBRURGLG1CQUNFRCxZQUFZcUIsUUFBUSxDQUFDdkIsZ0JBQ25CRSxZQUFZc0IsSUFBSSxDQUFDeEIsYUFBYTtJQUVsQyxPQUFPRztBQUNUIn0=
55
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy92ZXJpZnkvdmFyaWFibGUuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBWYXJpYWJsZSBmcm9tIFwiLi4vdmFyaWFibGVcIjtcblxuaW1wb3J0IHsgb2JqZWN0VHlwZSB9IGZyb20gXCIuLi90eXBlXCI7XG5pbXBvcnQgeyBub2RlQXNTdHJpbmcgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL3N0cmluZ1wiO1xuaW1wb3J0IHsgdHlwZU5hbWVGcm9tVHlwZU5vZGUsIHZhcmlhYmxlTmFtZUZyb21WYXJpYWJsZU5vZGUgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL3F1ZXJ5XCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHZlcmlmeVZhcmlhYmxlKHZhcmlhYmxlTm9kZSwgdHlwZU5vZGUsIGZpbGVDb250ZXh0KSB7XG4gIGxldCB2YXJpYWJsZVZlcmlmaWVkID0gZmFsc2U7XG5cbiAgZmlsZUNvbnRleHQuYmVnaW4odmFyaWFibGVOb2RlKTtcblxuICBjb25zdCB2YXJpYWJsZVN0cmluZyA9IG5vZGVBc1N0cmluZyh2YXJpYWJsZU5vZGUpO1xuXG4gIGZpbGVDb250ZXh0LmRlYnVnKGBWZXJpZnlpbmcgdGhlICcke3ZhcmlhYmxlU3RyaW5nfScgdmFyaWFibGUuLi5gKTtcblxuICBjb25zdCB2YXJpYWJsZU5hbWUgPSB2YXJpYWJsZU5hbWVGcm9tVmFyaWFibGVOb2RlKHZhcmlhYmxlTm9kZSksXG4gICAgICAgIHZhcmlhYmxlUHJlc2VudCA9IGZpbGVDb250ZXh0LmlzVmFyaWFibGVQcmVzZW50QnlWYXJpYWJsZU5hbWUodmFyaWFibGVOYW1lKTtcblxuICBpZiAodmFyaWFibGVQcmVzZW50KSB7XG4gICAgZmlsZUNvbnRleHQuZXJyb3IoYFRoZSB2YXJpYWJsZSAnJHt2YXJpYWJsZU5hbWV9JyBpcyBhbHJlYWR5IHByZXNlbnQuYCk7XG4gIH0gZWxzZSB7XG4gICAgbGV0IHZhcmlhYmxlO1xuXG4gICAgY29uc3QgdHlwZU5hbWUgPSB0eXBlTmFtZUZyb21UeXBlTm9kZSh0eXBlTm9kZSk7XG4gICAgXG4gICAgaWYgKHR5cGVOYW1lID09PSBudWxsKSB7XG4gICAgICBjb25zdCB0eXBlID0gb2JqZWN0VHlwZSxcbiAgICAgICAgICAgIG5hbWUgPSB2YXJpYWJsZU5hbWU7ICAvLy9cblxuICAgICAgdmFyaWFibGUgPSBWYXJpYWJsZS5mcm9tVHlwZUFuZE5hbWUodHlwZSwgbmFtZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHR5cGUgPSBmaWxlQ29udGV4dC5maW5kVHlwZUJ5VHlwZU5hbWUodHlwZU5hbWUpO1xuXG4gICAgICBpZiAodHlwZSA9PT0gbnVsbCkge1xuICAgICAgICBmaWxlQ29udGV4dC5lcnJvcihgVGhlICcke3ZhcmlhYmxlTmFtZX0nIHZhcmlhYmxlJ3MgJyR7dHlwZU5hbWV9JyB0eXBlIGlzIG1pc3NpbmcuYCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBuYW1lID0gdmFyaWFibGVOYW1lOyAgLy8vXG5cbiAgICAgICAgdmFyaWFibGUgPSBWYXJpYWJsZS5mcm9tVHlwZUFuZE5hbWUodHlwZSwgbmFtZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHZhcmlhYmxlICE9PSBudWxsKSB7XG4gICAgICBmaWxlQ29udGV4dC5hZGRWYXJpYWJsZSh2YXJpYWJsZSk7XG5cbiAgICAgIHZhcmlhYmxlVmVyaWZpZWQgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIGlmICh2YXJpYWJsZVZlcmlmaWVkKSB7XG4gICAgZmlsZUNvbnRleHQuaW5mbyhgVmVyaWZpZWQgdGhlICcke3ZhcmlhYmxlU3RyaW5nfScgdmFyaWFibGUuYCk7XG4gIH1cblxuICB2YXJpYWJsZVZlcmlmaWVkID9cbiAgICBmaWxlQ29udGV4dC5jb21wbGV0ZSh2YXJpYWJsZU5vZGUpIDpcbiAgICAgIGZpbGVDb250ZXh0LmhhbHQodmFyaWFibGVOb2RlKTtcblxuICByZXR1cm4gdmFyaWFibGVWZXJpZmllZDtcbn1cbiJdLCJuYW1lcyI6WyJ2ZXJpZnlWYXJpYWJsZSIsInZhcmlhYmxlTm9kZSIsInR5cGVOb2RlIiwiZmlsZUNvbnRleHQiLCJ2YXJpYWJsZVZlcmlmaWVkIiwiYmVnaW4iLCJ2YXJpYWJsZVN0cmluZyIsIm5vZGVBc1N0cmluZyIsImRlYnVnIiwidmFyaWFibGVOYW1lIiwidmFyaWFibGVOYW1lRnJvbVZhcmlhYmxlTm9kZSIsInZhcmlhYmxlUHJlc2VudCIsImlzVmFyaWFibGVQcmVzZW50QnlWYXJpYWJsZU5hbWUiLCJlcnJvciIsInZhcmlhYmxlIiwidHlwZU5hbWUiLCJ0eXBlTmFtZUZyb21UeXBlTm9kZSIsInR5cGUiLCJvYmplY3RUeXBlIiwibmFtZSIsIlZhcmlhYmxlIiwiZnJvbVR5cGVBbmROYW1lIiwiZmluZFR5cGVCeVR5cGVOYW1lIiwiYWRkVmFyaWFibGUiLCJpbmZvIiwiY29tcGxldGUiLCJoYWx0Il0sIm1hcHBpbmdzIjoiQUFBQTs7OzsrQkFRQTs7O2VBQXdCQTs7OzZEQU5IO29CQUVNO3NCQUNFO3FCQUNzQzs7Ozs7O0FBRXBELFNBQVNBLGVBQWVDLFlBQVksRUFBRUMsUUFBUSxFQUFFQyxXQUFXLEVBQUU7SUFDMUUsSUFBSUMsbUJBQW1CLEtBQUs7SUFFNUJELFlBQVlFLEtBQUssQ0FBQ0o7SUFFbEIsSUFBTUssaUJBQWlCQyxJQUFBQSxvQkFBWSxFQUFDTjtJQUVwQ0UsWUFBWUssS0FBSyxDQUFDLEFBQUMsa0JBQWdDLE9BQWZGLGdCQUFlO0lBRW5ELElBQU1HLGVBQWVDLElBQUFBLG1DQUE0QixFQUFDVCxlQUM1Q1Usa0JBQWtCUixZQUFZUywrQkFBK0IsQ0FBQ0g7SUFFcEUsSUFBSUUsaUJBQWlCO1FBQ25CUixZQUFZVSxLQUFLLENBQUMsQUFBQyxpQkFBNkIsT0FBYkosY0FBYTtJQUNsRCxPQUFPO1FBQ0wsSUFBSUs7UUFFSixJQUFNQyxXQUFXQyxJQUFBQSwyQkFBb0IsRUFBQ2Q7UUFFdEMsSUFBSWEsYUFBYSxJQUFJLEVBQUU7WUFDckIsSUFBTUUsT0FBT0MsZ0JBQVUsRUFDakJDLE9BQU9WLGNBQWUsR0FBRztZQUUvQkssV0FBV00saUJBQVEsQ0FBQ0MsZUFBZSxDQUFDSixNQUFNRTtRQUM1QyxPQUFPO1lBQ0wsSUFBTUYsUUFBT2QsWUFBWW1CLGtCQUFrQixDQUFDUDtZQUU1QyxJQUFJRSxVQUFTLElBQUksRUFBRTtnQkFDakJkLFlBQVlVLEtBQUssQ0FBQyxBQUFDLFFBQW9DRSxPQUE3Qk4sY0FBYSxrQkFBeUIsT0FBVE0sVUFBUztZQUNsRSxPQUFPO2dCQUNMLElBQU1JLFFBQU9WLGNBQWUsR0FBRztnQkFFL0JLLFdBQVdNLGlCQUFRLENBQUNDLGVBQWUsQ0FBQ0osT0FBTUU7WUFDNUMsQ0FBQztRQUNILENBQUM7UUFFRCxJQUFJTCxhQUFhLElBQUksRUFBRTtZQUNyQlgsWUFBWW9CLFdBQVcsQ0FBQ1Q7WUFFeEJWLG1CQUFtQixJQUFJO1FBQ3pCLENBQUM7SUFDSCxDQUFDO0lBRUQsSUFBSUEsa0JBQWtCO1FBQ3BCRCxZQUFZcUIsSUFBSSxDQUFDLEFBQUMsaUJBQStCLE9BQWZsQixnQkFBZTtJQUNuRCxDQUFDO0lBRURGLG1CQUNFRCxZQUFZc0IsUUFBUSxDQUFDeEIsZ0JBQ25CRSxZQUFZdUIsSUFBSSxDQUFDekIsYUFBYTtJQUVsQyxPQUFPRztBQUNUIn0=
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "occam-verify-cli",
3
3
  "author": "James Smith",
4
- "version": "0.0.518",
4
+ "version": "0.0.520",
5
5
  "license": "MIT, Anti-996",
6
6
  "homepage": "https://github.com/djalbat/occam-verify-cli",
7
7
  "description": "Occam's Verifier",
@@ -0,0 +1,33 @@
1
+ "use strict";
2
+
3
+ import { nodeQuery } from "../utilities/query";
4
+
5
+ const leftTermNodeQuery = nodeQuery("/statement/term[0]"),
6
+ rightTermNodeQuery = nodeQuery("/statement/term[1]");
7
+
8
+ export default class EqualityAssertion {
9
+ constructor(leftTermNode, rightTermNode) {
10
+ this.leftTermNode = leftTermNode;
11
+ this.rightTermNode = rightTermNode;
12
+ }
13
+
14
+ getLdftTermNode() {
15
+ return this.leftTermNode;
16
+ }
17
+
18
+ getRightTermNode() {
19
+ return this.rightTermNode;
20
+ }
21
+
22
+ assert(proofContext) {
23
+ debugger
24
+ }
25
+
26
+ static fromStatementNode(statementNode) {
27
+ const leftTermNode = leftTermNodeQuery(statementNode),
28
+ rightTermNode = rightTermNodeQuery(statementNode),
29
+ equalityAssertion = new EqualityAssertion(leftTermNode, rightTermNode);
30
+
31
+ return equalityAssertion;
32
+ }
33
+ }
@@ -12,7 +12,7 @@ const combinedCustomGrammar = combinedCustomGrammarFromNothing(),
12
12
  florenceLexer = florenceLexerFromCombinedCustomGrammar(combinedCustomGrammar),
13
13
  florenceParser = florenceParserFromCombinedCustomGrammar(combinedCustomGrammar);
14
14
 
15
- class BracketedCombinatorReleaseContext {
15
+ class CombinatorReleaseContext {
16
16
  nodeFromContentAndRuleName(content, ruleName) {
17
17
  const ruleMap = florenceParser.getRuleMap(),
18
18
  rule = ruleMap[ruleName],
@@ -27,13 +27,13 @@ class BracketedCombinatorReleaseContext {
27
27
  }
28
28
 
29
29
  static fromNothing() {
30
- const bracketedCombinatorReleaseContext = new BracketedCombinatorReleaseContext();
30
+ const combinatorReleaseContext = new CombinatorReleaseContext();
31
31
 
32
- return bracketedCombinatorReleaseContext;
32
+ return combinatorReleaseContext;
33
33
  }
34
34
  }
35
35
 
36
- const bracketedCombinatorReleaseContext = BracketedCombinatorReleaseContext.fromNothing();
36
+ const combinatorReleaseContext = CombinatorReleaseContext.fromNothing();
37
37
 
38
- export default bracketedCombinatorReleaseContext;
38
+ export default combinatorReleaseContext;
39
39
 
@@ -1,14 +1,14 @@
1
1
  "use strict";
2
2
 
3
3
  import Combinator from "../combinator";
4
- import bracketedCombinatorReleaseContext from "../context/release/bracketedCombinator";
4
+ import combinatorReleaseContext from "../context/release/combinator";
5
5
 
6
6
  import { statementNodeFromStatementString } from "../utilities/string";
7
7
 
8
8
  class BracketedCombinator extends Combinator {
9
9
  static fromNothing() {
10
10
  const statementString = "(Statement)",
11
- releaseContext = bracketedCombinatorReleaseContext, ///
11
+ releaseContext = combinatorReleaseContext, ///
12
12
  statementNode = statementNodeFromStatementString(statementString, releaseContext),
13
13
  bracketedCombinator = new BracketedCombinator(statementNode);
14
14
 
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+
3
+ import Combinator from "../combinator";
4
+ import CombinatorReleaseContext from "../context/release/combinator";
5
+
6
+ import { statementNodeFromStatementString } from "../utilities/string";
7
+
8
+ class EqualityCombinator extends Combinator {
9
+ static fromNothing() {
10
+ const statementString = "Object = Object",
11
+ releaseContext = CombinatorReleaseContext, ///
12
+ statementNode = statementNodeFromStatementString(statementString, releaseContext),
13
+ equalityCombinator = new EqualityCombinator(statementNode);
14
+
15
+ return equalityCombinator;
16
+ }
17
+ }
18
+
19
+ const equalityCombinator = EqualityCombinator.fromNothing();
20
+
21
+ export default equalityCombinator;