occam-verify-cli 1.0.889 → 1.0.892

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.
@@ -12,6 +12,9 @@ _export(exports, {
12
12
  get assumptionStringFromReferenceAndStatement () {
13
13
  return assumptionStringFromReferenceAndStatement;
14
14
  },
15
+ get complexTypeDeclarationStringFromTypeSuperTypesAndProvisional () {
16
+ return complexTypeDeclarationStringFromTypeSuperTypesAndProvisional;
17
+ },
15
18
  get equivalenceStringFromTerms () {
16
19
  return equivalenceStringFromTerms;
17
20
  },
@@ -36,6 +39,9 @@ _export(exports, {
36
39
  get procedureCallStringFromProcedureReferenceAndParameters () {
37
40
  return procedureCallStringFromProcedureReferenceAndParameters;
38
41
  },
42
+ get provisinalStringFromProvisional () {
43
+ return provisinalStringFromProvisional;
44
+ },
39
45
  get referenceSubstitutionStringFromReferenceAndMetavariable () {
40
46
  return referenceSubstitutionStringFromReferenceAndMetavariable;
41
47
  },
@@ -80,6 +86,7 @@ _export(exports, {
80
86
  }
81
87
  });
82
88
  const _type = require("../utilities/type");
89
+ const _constants = require("../constants");
83
90
  function termsStringFromTerms(terms) {
84
91
  const termsString = terms.reduce((termsString, term)=>{
85
92
  const termString = term.getString();
@@ -113,13 +120,16 @@ function hypothesesStringFromHypotheses(hypotheses) {
113
120
  return hypothesesString;
114
121
  }
115
122
  function superTypesStringFromSuperTypes(superTypes) {
116
- const baseType = (0, _type.baseTypeFromNothing)(), superTypesString = superTypes.reduce((superTypesString, superType)=>{
123
+ let superTypesString;
124
+ const baseType = (0, _type.baseTypeFromNothing)();
125
+ superTypesString = superTypes.reduce((superTypesString, superType)=>{
117
126
  if (superType !== baseType) {
118
127
  const superTypeString = superType.getString();
119
128
  superTypesString = superTypesString === null ? `'${superTypeString}'` : `${superTypesString}, '${superTypeString}'`;
120
129
  }
121
130
  return superTypesString;
122
131
  }, null);
132
+ superTypesString = superTypesString !== null ? `:${superTypesString}` : _constants.EMPTY_STRING;
123
133
  return superTypesString;
124
134
  }
125
135
  function parametersStringFromParameters(parameters) {
@@ -130,6 +140,10 @@ function parametersStringFromParameters(parameters) {
130
140
  }, null);
131
141
  return parametersString;
132
142
  }
143
+ function provisinalStringFromProvisional(provisional) {
144
+ const provisionString = provisional ? _constants.PROVISIONALLY : _constants.EMPTY_STRING;
145
+ return provisionString;
146
+ }
133
147
  function suppositionsStringFromSuppositions(suppositions) {
134
148
  const suppositionsString = suppositions.reduce((suppositionsString, supposition)=>{
135
149
  const suppositionString = supposition.getString();
@@ -200,6 +214,10 @@ function topLevelAssertionStringFromLabelsSuppositionsAndDeduction(labels, suppo
200
214
  }
201
215
  return topLevelAssertionString;
202
216
  }
217
+ function complexTypeDeclarationStringFromTypeSuperTypesAndProvisional(type, superTypes, provisional) {
218
+ const typeString = type.getString(), superTypesString = superTypesStringFromSuperTypes(superTypes), provisionalString = provisinalStringFromProvisional(provisional), complexTypeDeclarationString = `${provisionalString}${typeString}${superTypesString}`;
219
+ return complexTypeDeclarationString;
220
+ }
203
221
  function topLevelMetaAssertionStringFromLabelSuppositionsAndDeduction(label, suppositions, deduction) {
204
222
  const labelString = label.getString(), deductionString = deduction.getString(), suppositionsString = suppositionsStringFromSuppositions(suppositions), topLevelMetaAssertionString = suppositionsString !== null ? `${labelString} :: [${suppositionsString}]...${deductionString}` : `${labelString} :: ${deductionString}`;
205
223
  return topLevelMetaAssertionString;
@@ -209,4 +227,4 @@ function statementSubstitutionStringFromStatementMetavariableAndSubstitution(sta
209
227
  return statementSubstitutionString;
210
228
  }
211
229
 
212
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsaXRpZXMvc3RyaW5nLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBiYXNlVHlwZUZyb21Ob3RoaW5nIH0gZnJvbSBcIi4uL3V0aWxpdGllcy90eXBlXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiB0ZXJtc1N0cmluZ0Zyb21UZXJtcyh0ZXJtcykge1xuICBjb25zdCB0ZXJtc1N0cmluZyA9IHRlcm1zLnJlZHVjZSgodGVybXNTdHJpbmcsIHRlcm0pID0+IHtcbiAgICBjb25zdCB0ZXJtU3RyaW5nID0gdGVybS5nZXRTdHJpbmcoKTtcblxuICAgIHRlcm1zU3RyaW5nID0gKHRlcm1zU3RyaW5nICE9PSBudWxsKSA/XG4gICAgICAgICAgICAgICAgICAgYCR7dGVybXNTdHJpbmd9LCAke3Rlcm1TdHJpbmd9YCA6XG4gICAgICAgICAgICAgICAgICAgICAgdGVybVN0cmluZztcblxuICAgIHJldHVybiB0ZXJtc1N0cmluZztcbiAgfSwgbnVsbCk7XG5cbiAgcmV0dXJuIHRlcm1zU3RyaW5nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbGFiZWxzU3RyaW5nRnJvbUxhYmVscyhsYWJlbHMpIHtcbiAgY29uc3QgbGFiZWxzU3RyaW5nID0gbGFiZWxzLnJlZHVjZSgobGFiZWxzU3RyaW5nLCBsYWJlbCkgPT4ge1xuICAgIGNvbnN0IGxhYmVsU3RyaW5nID0gbGFiZWwuZ2V0U3RyaW5nKCk7XG5cbiAgICBsYWJlbHNTdHJpbmcgPSAobGFiZWxzU3RyaW5nID09PSBudWxsKSA/XG4gICAgICAgICAgICAgICAgICAgICBsYWJlbFN0cmluZzogLy8vXG4gICAgICAgICAgICAgICAgICAgICAgYCR7bGFiZWxzU3RyaW5nfSwgJHtsYWJlbFN0cmluZ31gO1xuXG4gICAgcmV0dXJuIGxhYmVsc1N0cmluZztcbiAgfSwgbnVsbCk7XG5cbiAgcmV0dXJuIGxhYmVsc1N0cmluZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByZW1pc2VzU3RyaW5nRnJvbVByZW1pc2VzKHByZW1pc2VzKSB7XG4gIGNvbnN0IHByZW1pc2VzU3RyaW5nID0gcHJlbWlzZXMucmVkdWNlKChwcmVtaXNlc1N0cmluZywgcHJlbWlzZSkgPT4ge1xuICAgIGNvbnN0IHByZW1pc2VTdHJpbmcgPSBwcmVtaXNlLmdldFN0cmluZygpO1xuXG4gICAgcHJlbWlzZXNTdHJpbmcgPSAocHJlbWlzZXNTdHJpbmcgIT09IG51bGwpID9cbiAgICAgICAgICAgICAgICAgICAgICAgYCR7cHJlbWlzZXNTdHJpbmd9LCAke3ByZW1pc2VTdHJpbmd9YCA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgcHJlbWlzZVN0cmluZzsgIC8vL1xuXG4gICAgcmV0dXJuIHByZW1pc2VzU3RyaW5nO1xuICB9LCBudWxsKTtcblxuICByZXR1cm4gcHJlbWlzZXNTdHJpbmc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoeXBvdGhlc2VzU3RyaW5nRnJvbUh5cG90aGVzZXMoaHlwb3RoZXNlcykge1xuICBjb25zdCBoeXBvdGhlc2VzU3RyaW5nID0gaHlwb3RoZXNlcy5yZWR1Y2UoKGh5cG90aGVzZXNTdHJpbmcsIGh5cG90aGVzaXMpID0+IHtcbiAgICBjb25zdCBoeXBvdGhlc2lzU3RyaW5nID0gaHlwb3RoZXNpcy5nZXRTdHJpbmcoKTtcblxuICAgIGh5cG90aGVzZXNTdHJpbmcgPSAoaHlwb3RoZXNlc1N0cmluZyAhPT0gbnVsbCkgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICBgJHtoeXBvdGhlc2VzU3RyaW5nfSwgJHtoeXBvdGhlc2lzU3RyaW5nfWAgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh5cG90aGVzaXNTdHJpbmc7ICAvLy9cblxuICAgIHJldHVybiBoeXBvdGhlc2VzU3RyaW5nO1xuICB9LCBudWxsKTtcblxuICByZXR1cm4gaHlwb3RoZXNlc1N0cmluZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN1cGVyVHlwZXNTdHJpbmdGcm9tU3VwZXJUeXBlcyhzdXBlclR5cGVzKSB7XG4gIGNvbnN0IGJhc2VUeXBlID0gYmFzZVR5cGVGcm9tTm90aGluZygpLFxuICAgICAgICBzdXBlclR5cGVzU3RyaW5nID0gc3VwZXJUeXBlcy5yZWR1Y2UoKHN1cGVyVHlwZXNTdHJpbmcsIHN1cGVyVHlwZSkgPT4ge1xuICAgICAgICAgIGlmIChzdXBlclR5cGUgIT09IGJhc2VUeXBlKSB7XG4gICAgICAgICAgICBjb25zdCBzdXBlclR5cGVTdHJpbmcgPSBzdXBlclR5cGUuZ2V0U3RyaW5nKCk7XG5cbiAgICAgICAgICAgIHN1cGVyVHlwZXNTdHJpbmcgPSAoc3VwZXJUeXBlc1N0cmluZyA9PT0gbnVsbCkgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYCcke3N1cGVyVHlwZVN0cmluZ30nYCA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGAke3N1cGVyVHlwZXNTdHJpbmd9LCAnJHtzdXBlclR5cGVTdHJpbmd9J2A7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHN1cGVyVHlwZXNTdHJpbmc7XG4gICAgICAgIH0sIG51bGwpO1xuXG4gIHJldHVybiBzdXBlclR5cGVzU3RyaW5nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyYW1ldGVyc1N0cmluZ0Zyb21QYXJhbWV0ZXJzKHBhcmFtZXRlcnMpIHtcbiAgY29uc3QgcGFyYW1ldGVyc1N0cmluZyA9IHBhcmFtZXRlcnMucmVkdWNlKChwYXJhbWV0ZXJzU3RyaW5nLCBwYXJhbWV0ZXIpID0+IHtcbiAgICBjb25zdCBwYXJhbWV0ZXJTdHJpbmcgPSBwYXJhbWV0ZXIuZ2V0U3RyaW5nKCk7XG5cbiAgICBwYXJhbWV0ZXJzU3RyaW5nID0gKHBhcmFtZXRlcnNTdHJpbmcgPT09IG51bGwpID9cbiAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXJTdHJpbmcgOiAvLy9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgYCR7cGFyYW1ldGVyc1N0cmluZ30sICR7cGFyYW1ldGVyU3RyaW5nfWA7XG5cbiAgICByZXR1cm4gcGFyYW1ldGVyc1N0cmluZztcbiAgfSwgbnVsbCk7XG5cbiAgcmV0dXJuIHBhcmFtZXRlcnNTdHJpbmc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdXBwb3NpdGlvbnNTdHJpbmdGcm9tU3VwcG9zaXRpb25zKHN1cHBvc2l0aW9ucykge1xuICBjb25zdCBzdXBwb3NpdGlvbnNTdHJpbmcgPSBzdXBwb3NpdGlvbnMucmVkdWNlKChzdXBwb3NpdGlvbnNTdHJpbmcsIHN1cHBvc2l0aW9uKSA9PiB7XG4gICAgY29uc3Qgc3VwcG9zaXRpb25TdHJpbmcgPSBzdXBwb3NpdGlvbi5nZXRTdHJpbmcoKTtcblxuICAgIHN1cHBvc2l0aW9uc1N0cmluZyA9IChzdXBwb3NpdGlvbnNTdHJpbmcgPT09IG51bGwpID9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdXBwb3NpdGlvblN0cmluZzogLy8vXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGAke3N1cHBvc2l0aW9uc1N0cmluZ30sICR7c3VwcG9zaXRpb25TdHJpbmd9YDtcblxuICAgIHJldHVybiBzdXBwb3NpdGlvbnNTdHJpbmc7XG4gIH0sIG51bGwpO1xuXG4gIHJldHVybiBzdXBwb3NpdGlvbnNTdHJpbmc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzaWduYXR1cmVTdHJpbmdGcm9tVGVybXModGVybXMpIHtcbiAgY29uc3QgdGVybXNTdHJpbmcgPSB0ZXJtc1N0cmluZ0Zyb21UZXJtcyh0ZXJtcyksXG4gICAgICAgIHNpZ25hdHVyZVN0cmluZyA9IGBbJHt0ZXJtc1N0cmluZ31dYDtcblxuICByZXR1cm4gc2lnbmF0dXJlU3RyaW5nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXF1aXZhbGVuY2VTdHJpbmdGcm9tVGVybXModGVybXMpIHtcbiAgY29uc3QgdGVybXNTdHJpbmcgPSB0ZXJtc1N0cmluZ0Zyb21UZXJtcyh0ZXJtcyksXG4gICAgICAgIGVxdWl2YWxlbmNlU3RyaW5nID0gYFske3Rlcm1zU3RyaW5nfV1gO1xuXG4gIHJldHVybiBlcXVpdmFsZW5jZVN0cmluZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVTdHJpbmdGcm9tTm9taW5hbFR5cGVOYW1lKG5vbWluYWxUeXBlTmFtZSkge1xuICBjb25zdCB0eXBlU3RyaW5nID0gbm9taW5hbFR5cGVOYW1lOyAgLy8vXG5cbiAgcmV0dXJuIHR5cGVTdHJpbmc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0ZXJtU3Vic3RpdHV0aW9uU3RyaW5nRnJvbVRlcm1BbmRWYXJpYWJsZSh0ZXJtLCB2YXJpYWJsZSkge1xuICBjb25zdCB0ZXJtU3RyaW5nID0gdGVybS5nZXRTdHJpbmcoKSxcbiAgICAgICAgdmFyaWFibGVTdHJpbmcgPSB2YXJpYWJsZS5nZXRTdHJpbmcoKSxcbiAgICAgICAgdGVybVN1YnN0aXR1dGlvblN0cmluZyA9IGBbJHt0ZXJtU3RyaW5nfSBmb3IgJHt2YXJpYWJsZVN0cmluZ31dYDtcblxuICByZXR1cm4gdGVybVN1YnN0aXR1dGlvblN0cmluZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFzc3VtcHRpb25TdHJpbmdGcm9tUmVmZXJlbmNlQW5kU3RhdGVtZW50KHJlZmVyZW5jZSwgc3RhdGVtZW50KSB7XG4gIGNvbnN0IHJlZmVyZW5jZVN0cmluZyA9IHJlZmVyZW5jZS5nZXRTdHJpbmcoKSxcbiAgICAgICAgc3RhdGVtZW50U3RyaW5nID0gc3RhdGVtZW50LmdldFN0cmluZygpLFxuICAgICAgICBhc3N1bXB0aW9uU3RyaW5nID0gYCR7cmVmZXJlbmNlU3RyaW5nfSA6OiAke3N0YXRlbWVudFN0cmluZ31gO1xuXG4gIHJldHVybiBhc3N1bXB0aW9uU3RyaW5nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcnVsc1N0cmluZ0Zyb21MYWJlbHNQcmVtaXNlc0FuZENvbmNsdXNpb24obGFiZWxzLCBwcmVtaXNlcywgY29uY2x1c2lvbikge1xuICBjb25zdCBjb25jbHVzaW9uU3RyaW5nID0gY29uY2x1c2lvbi5nZXRTdHJpbmcoKSxcbiAgICAgICAgcHJlbWlzZXNTdHJpbmcgPSBwcmVtaXNlc1N0cmluZ0Zyb21QcmVtaXNlcyhwcmVtaXNlcyksXG4gICAgICAgIGxhYmVsc1N0cmluZyA9IGxhYmVsc1N0cmluZ0Zyb21MYWJlbHMobGFiZWxzKSxcbiAgICAgICAgcnVsZVN0cmluZyA9IChwcmVtaXNlc1N0cmluZyAhPT0gbnVsbCkgP1xuICAgICAgICAgICAgICAgICAgICAgICBgJHtsYWJlbHNTdHJpbmd9IDo6IFske3ByZW1pc2VzU3RyaW5nfV0uLi4ke2NvbmNsdXNpb25TdHJpbmd9YCA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgYCR7bGFiZWxzU3RyaW5nfSA6OiAke2NvbmNsdXNpb25TdHJpbmd9YDtcblxuICByZXR1cm4gcnVsZVN0cmluZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNlY3Rpb25TdHJpbmdGcm9tSHlwb3RoZXNlc1RvcExldmVsQXNzZXJ0aW9uKGh5cG90aGVzZXMsIGF4aW9tLCBsZW1tYSwgdGhlb3JlbSwgY29uamVjdHVyZSkge1xuICBjb25zdCB0b3BMZXZlbEFzc2VydGlvbiA9IChheGlvbSB8fCBsZW1tYSB8fCB0aGVvcmVtIHx8IGNvbmplY3R1cmUpLFxuICAgICAgICB0b3BMZXZlbEFzc2VydGlvblN0cmluZyA9IHRvcExldmVsQXNzZXJ0aW9uLmdldFN0cmluZygpLFxuICAgICAgICBoeXBvdGhlc2VzU3RyaW5nID0gaHlwb3RoZXNlc1N0cmluZ0Zyb21IeXBvdGhlc2VzKGh5cG90aGVzZXMpLFxuICAgICAgICBzZWN0aW9uU3RyaW5nID0gKHRvcExldmVsQXNzZXJ0aW9uU3RyaW5nICE9PSBudWxsKSA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGBbJHtoeXBvdGhlc2VzU3RyaW5nfV06OjogJHt0b3BMZXZlbEFzc2VydGlvblN0cmluZ31gIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBgWyR7aHlwb3RoZXNlc1N0cmluZ31dOjo6IGA7XG5cbiAgcmV0dXJuIHNlY3Rpb25TdHJpbmc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdWJwcm9vZlN0cmluZ0Zyb21TdXBwb3NpdGlvbnNBbmRTdWJEZXJpdmF0aW9uKHN1cHBvc2l0aW9ucywgc3ViRGVyaXZhdGlvbikge1xuICBjb25zdCBsYXN0U3RlcCA9IHN1YkRlcml2YXRpb24uZ2V0TGFzdFN0ZXAoKSxcbiAgICAgICAgc3VwcG9zaXRpb25zU3RyaW5nID0gc3VwcG9zaXRpb25zU3RyaW5nRnJvbVN1cHBvc2l0aW9ucyhzdXBwb3NpdGlvbnMpLFxuICAgICAgICBsYXN0U3RlcFN0cmluZyA9IGxhc3RTdGVwLmdldFN0cmluZygpLFxuICAgICAgICBzdWJwcm9vZlN0cmluZyA9IGBbJHtzdXBwb3NpdGlvbnNTdHJpbmd9XS4uLiR7bGFzdFN0ZXBTdHJpbmd9YDtcblxuICByZXR1cm4gc3VicHJvb2ZTdHJpbmc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmcmFtZVN1YnN0aXR1dGlvblN0cmluZ0Zyb21GcmFtZUFuZE1ldGF2YXJpYWJsZShmcmFtZSwgbWV0YXZhcmlhYmxlKSB7XG4gIGNvbnN0IGZyYW1lU3RyaW5nID0gZnJhbWUuZ2V0U3RyaW5nKCksXG4gICAgICAgIG1ldGF2YXJpYWJsZVN0cmluZyA9IG1ldGF2YXJpYWJsZS5nZXRTdHJpbmcoKSxcbiAgICAgICAgc3RyaW5nID0gYFske2ZyYW1lU3RyaW5nfSBmb3IgWyR7bWV0YXZhcmlhYmxlU3RyaW5nfV1dYDtcblxuICByZXR1cm4gc3RyaW5nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWV0YUxldmVsQXNzdW1wdGlvblN0cmluZ0Zyb21SZWZlcmVuY2VBbmRTdGF0ZW1lbnQocmVmZXJlbmNlLCBzdGF0ZW1lbnQpIHtcbiAgY29uc3Qgc3RhdGVtZW50U3RyaW5nID0gc3RhdGVtZW50LmdldFN0cmluZygpLFxuICAgICAgICByZWZlcm5lY2VTdHJpbmcgPSByZWZlcmVuY2UuZ2V0U3RyaW5nKCksXG4gICAgICAgIG1ldGFMZXZlbEFzc3VtcHRpb25TdHJpbmcgPSBgJHtyZWZlcm5lY2VTdHJpbmd9IDo6ICR7c3RhdGVtZW50U3RyaW5nfWA7XG5cbiAgcmV0dXJuIG1ldGFMZXZlbEFzc3VtcHRpb25TdHJpbmc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9jZWR1cmVDYWxsU3RyaW5nRnJvbVByb2NlZHVyZVJlZmVyZW5jZUFuZFBhcmFtZXRlcnMocHJvY2VkdXJlUmVmZXJlbmNlLCBwYXJhbWV0ZXJzKSB7XG4gIGNvbnN0IHByb2NlZHVyZVJlZmVyZW5jZU5hbWUgPSBwcm9jZWR1cmVSZWZlcmVuY2UuZ2V0TmFtZSgpLFxuICAgICAgICBwYXJhbWV0ZXJzU3RyaW5nID0gcGFyYW1ldGVyc1N0cmluZ0Zyb21QYXJhbWV0ZXJzKHBhcmFtZXRlcnMpLFxuICAgICAgICBwcm9jZWR1cmVDYWxsU3RyaW5nID0gYEAke3Byb2NlZHVyZVJlZmVyZW5jZU5hbWV9KCR7cGFyYW1ldGVyc1N0cmluZ30pYDtcblxuICByZXR1cm4gcHJvY2VkdXJlQ2FsbFN0cmluZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0YXRlbWVudFN1YnN0aXR1dGlvblN0cmluZ0Zyb21TdGF0ZW1lbnRBbmRNZXRhdmFyaWFibGUoc3RhdGVtZW50LCBtZXRhdmFyaWFibGUpIHtcbiAgY29uc3Qgc3RhdGVtZW50U3RyaW5nID0gc3RhdGVtZW50LmdldFN0cmluZygpLFxuICAgICAgICBtZXRhdmFyaWFibGVTdHJpbmcgPSBtZXRhdmFyaWFibGUuZ2V0U3RyaW5nKCksXG4gICAgICAgIHN0YXRlbWVudFN1YnN0aXR1dGlvblN0cmluZyA9IGBbJHtzdGF0ZW1lbnRTdHJpbmd9IGZvciAke21ldGF2YXJpYWJsZVN0cmluZ31dYDtcblxuICByZXR1cm4gc3RhdGVtZW50U3Vic3RpdHV0aW9uU3RyaW5nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVmZXJlbmNlU3Vic3RpdHV0aW9uU3RyaW5nRnJvbVJlZmVyZW5jZUFuZE1ldGF2YXJpYWJsZShyZWZlcmVuY2UsIG1ldGF2YXJpYWJsZSkge1xuICBjb25zdCByZWZlcmVuY2VTdHJpbmcgPSByZWZlcmVuY2UuZ2V0U3RyaW5nKCksXG4gICAgICAgIG1ldGF2YXJpYWJsZVN0cmluZyA9IG1ldGF2YXJpYWJsZS5nZXRTdHJpbmcoKSxcbiAgICAgICAgcmVmZXJlbmNlU3Vic3RpdHV0aW9uU3RyaW5nID0gYFske3JlZmVyZW5jZVN0cmluZ30gZm9yICR7bWV0YXZhcmlhYmxlU3RyaW5nfV1gO1xuXG4gIHJldHVybiByZWZlcmVuY2VTdWJzdGl0dXRpb25TdHJpbmc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0b3BMZXZlbEFzc2VydGlvblN0cmluZ0Zyb21MYWJlbHNTdXBwb3NpdGlvbnNBbmREZWR1Y3Rpb24obGFiZWxzLCBzdXBwb3NpdGlvbnMsIGRlZHVjdGlvbikge1xuICBsZXQgdG9wTGV2ZWxBc3NlcnRpb25TdHJpbmc7XG5cbiAgY29uc3Qgc3VwcG9zaXRpb25zU3RyaW5nID0gc3VwcG9zaXRpb25zU3RyaW5nRnJvbVN1cHBvc2l0aW9ucyhzdXBwb3NpdGlvbnMpLFxuICAgICAgICBkZWR1Y3Rpb25TdHJpbmcgPSBkZWR1Y3Rpb24uZ2V0U3RyaW5nKCksXG4gICAgICAgIGxhYmVsc1N0cmluZyA9IGxhYmVsc1N0cmluZ0Zyb21MYWJlbHMobGFiZWxzKTtcblxuICBpZiAobGFiZWxzU3RyaW5nICE9PSBudWxsKSB7XG4gICAgdG9wTGV2ZWxBc3NlcnRpb25TdHJpbmcgPSAoc3VwcG9zaXRpb25zU3RyaW5nICE9PSBudWxsKSA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYCR7bGFiZWxzU3RyaW5nfSA6OiBbJHtzdXBwb3NpdGlvbnNTdHJpbmd9XS4uLiR7ZGVkdWN0aW9uU3RyaW5nfWAgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYCR7bGFiZWxzU3RyaW5nfSA6OiAke2RlZHVjdGlvblN0cmluZ31gO1xuICB9IGVsc2Uge1xuICAgIHRvcExldmVsQXNzZXJ0aW9uU3RyaW5nID0gKHN1cHBvc2l0aW9uc1N0cmluZyAhPT0gbnVsbCkgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBbJHtzdXBwb3NpdGlvbnNTdHJpbmd9XS4uLiR7ZGVkdWN0aW9uU3RyaW5nfWAgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZHVjdGlvblN0cmluZztcbiAgfVxuXG4gIHJldHVybiB0b3BMZXZlbEFzc2VydGlvblN0cmluZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRvcExldmVsTWV0YUFzc2VydGlvblN0cmluZ0Zyb21MYWJlbFN1cHBvc2l0aW9uc0FuZERlZHVjdGlvbihsYWJlbCwgc3VwcG9zaXRpb25zLCBkZWR1Y3Rpb24pIHtcbiAgY29uc3QgbGFiZWxTdHJpbmcgPSBsYWJlbC5nZXRTdHJpbmcoKSxcbiAgICAgICAgZGVkdWN0aW9uU3RyaW5nID0gZGVkdWN0aW9uLmdldFN0cmluZygpLFxuICAgICAgICBzdXBwb3NpdGlvbnNTdHJpbmcgPSBzdXBwb3NpdGlvbnNTdHJpbmdGcm9tU3VwcG9zaXRpb25zKHN1cHBvc2l0aW9ucyksXG4gICAgICAgIHRvcExldmVsTWV0YUFzc2VydGlvblN0cmluZyA9IChzdXBwb3NpdGlvbnNTdHJpbmcgIT09IG51bGwpID9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGAke2xhYmVsU3RyaW5nfSA6OiBbJHtzdXBwb3NpdGlvbnNTdHJpbmd9XS4uLiR7ZGVkdWN0aW9uU3RyaW5nfWAgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgJHtsYWJlbFN0cmluZ30gOjogJHtkZWR1Y3Rpb25TdHJpbmd9YDtcblxuICByZXR1cm4gdG9wTGV2ZWxNZXRhQXNzZXJ0aW9uU3RyaW5nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RhdGVtZW50U3Vic3RpdHV0aW9uU3RyaW5nRnJvbVN0YXRlbWVudE1ldGF2YXJpYWJsZUFuZFN1YnN0aXR1dGlvbihzdGF0ZW1lbnQsIG1ldGF2YXJpYWJsZSwgc3Vic3RpdHV0aW9uKSB7XG4gIGNvbnN0IHN0YXRlbWVudFN0cmluZyA9IHN0YXRlbWVudC5nZXRTdHJpbmcoKSxcbiAgICAgICAgbWV0YXZhcmlhYmxlU3RyaW5nID0gbWV0YXZhcmlhYmxlLmdldFN0cmluZygpLFxuICAgICAgICBzdWJzdGl0dXRpb25TdHJpbmcgPSBzdWJzdGl0dXRpb24uZ2V0U3RyaW5nKCksXG4gICAgICAgIHN0YXRlbWVudFN1YnN0aXR1dGlvblN0cmluZyA9IGBbJHtzdGF0ZW1lbnRTdHJpbmd9IGZvciAke21ldGF2YXJpYWJsZVN0cmluZ30ke3N1YnN0aXR1dGlvblN0cmluZ31dYDtcblxuICByZXR1cm4gc3RhdGVtZW50U3Vic3RpdHV0aW9uU3RyaW5nO1xufVxuIl0sIm5hbWVzIjpbImFzc3VtcHRpb25TdHJpbmdGcm9tUmVmZXJlbmNlQW5kU3RhdGVtZW50IiwiZXF1aXZhbGVuY2VTdHJpbmdGcm9tVGVybXMiLCJmcmFtZVN1YnN0aXR1dGlvblN0cmluZ0Zyb21GcmFtZUFuZE1ldGF2YXJpYWJsZSIsImh5cG90aGVzZXNTdHJpbmdGcm9tSHlwb3RoZXNlcyIsImxhYmVsc1N0cmluZ0Zyb21MYWJlbHMiLCJtZXRhTGV2ZWxBc3N1bXB0aW9uU3RyaW5nRnJvbVJlZmVyZW5jZUFuZFN0YXRlbWVudCIsInBhcmFtZXRlcnNTdHJpbmdGcm9tUGFyYW1ldGVycyIsInByZW1pc2VzU3RyaW5nRnJvbVByZW1pc2VzIiwicHJvY2VkdXJlQ2FsbFN0cmluZ0Zyb21Qcm9jZWR1cmVSZWZlcmVuY2VBbmRQYXJhbWV0ZXJzIiwicmVmZXJlbmNlU3Vic3RpdHV0aW9uU3RyaW5nRnJvbVJlZmVyZW5jZUFuZE1ldGF2YXJpYWJsZSIsInJ1bHNTdHJpbmdGcm9tTGFiZWxzUHJlbWlzZXNBbmRDb25jbHVzaW9uIiwic2VjdGlvblN0cmluZ0Zyb21IeXBvdGhlc2VzVG9wTGV2ZWxBc3NlcnRpb24iLCJzaWduYXR1cmVTdHJpbmdGcm9tVGVybXMiLCJzdGF0ZW1lbnRTdWJzdGl0dXRpb25TdHJpbmdGcm9tU3RhdGVtZW50QW5kTWV0YXZhcmlhYmxlIiwic3RhdGVtZW50U3Vic3RpdHV0aW9uU3RyaW5nRnJvbVN0YXRlbWVudE1ldGF2YXJpYWJsZUFuZFN1YnN0aXR1dGlvbiIsInN1YnByb29mU3RyaW5nRnJvbVN1cHBvc2l0aW9uc0FuZFN1YkRlcml2YXRpb24iLCJzdXBlclR5cGVzU3RyaW5nRnJvbVN1cGVyVHlwZXMiLCJzdXBwb3NpdGlvbnNTdHJpbmdGcm9tU3VwcG9zaXRpb25zIiwidGVybVN1YnN0aXR1dGlvblN0cmluZ0Zyb21UZXJtQW5kVmFyaWFibGUiLCJ0ZXJtc1N0cmluZ0Zyb21UZXJtcyIsInRvcExldmVsQXNzZXJ0aW9uU3RyaW5nRnJvbUxhYmVsc1N1cHBvc2l0aW9uc0FuZERlZHVjdGlvbiIsInRvcExldmVsTWV0YUFzc2VydGlvblN0cmluZ0Zyb21MYWJlbFN1cHBvc2l0aW9uc0FuZERlZHVjdGlvbiIsInR5cGVTdHJpbmdGcm9tTm9taW5hbFR5cGVOYW1lIiwidGVybXMiLCJ0ZXJtc1N0cmluZyIsInJlZHVjZSIsInRlcm0iLCJ0ZXJtU3RyaW5nIiwiZ2V0U3RyaW5nIiwibGFiZWxzIiwibGFiZWxzU3RyaW5nIiwibGFiZWwiLCJsYWJlbFN0cmluZyIsInByZW1pc2VzIiwicHJlbWlzZXNTdHJpbmciLCJwcmVtaXNlIiwicHJlbWlzZVN0cmluZyIsImh5cG90aGVzZXMiLCJoeXBvdGhlc2VzU3RyaW5nIiwiaHlwb3RoZXNpcyIsImh5cG90aGVzaXNTdHJpbmciLCJzdXBlclR5cGVzIiwiYmFzZVR5cGUiLCJiYXNlVHlwZUZyb21Ob3RoaW5nIiwic3VwZXJUeXBlc1N0cmluZyIsInN1cGVyVHlwZSIsInN1cGVyVHlwZVN0cmluZyIsInBhcmFtZXRlcnMiLCJwYXJhbWV0ZXJzU3RyaW5nIiwicGFyYW1ldGVyIiwicGFyYW1ldGVyU3RyaW5nIiwic3VwcG9zaXRpb25zIiwic3VwcG9zaXRpb25zU3RyaW5nIiwic3VwcG9zaXRpb24iLCJzdXBwb3NpdGlvblN0cmluZyIsInNpZ25hdHVyZVN0cmluZyIsImVxdWl2YWxlbmNlU3RyaW5nIiwibm9taW5hbFR5cGVOYW1lIiwidHlwZVN0cmluZyIsInZhcmlhYmxlIiwidmFyaWFibGVTdHJpbmciLCJ0ZXJtU3Vic3RpdHV0aW9uU3RyaW5nIiwicmVmZXJlbmNlIiwic3RhdGVtZW50IiwicmVmZXJlbmNlU3RyaW5nIiwic3RhdGVtZW50U3RyaW5nIiwiYXNzdW1wdGlvblN0cmluZyIsImNvbmNsdXNpb24iLCJjb25jbHVzaW9uU3RyaW5nIiwicnVsZVN0cmluZyIsImF4aW9tIiwibGVtbWEiLCJ0aGVvcmVtIiwiY29uamVjdHVyZSIsInRvcExldmVsQXNzZXJ0aW9uIiwidG9wTGV2ZWxBc3NlcnRpb25TdHJpbmciLCJzZWN0aW9uU3RyaW5nIiwic3ViRGVyaXZhdGlvbiIsImxhc3RTdGVwIiwiZ2V0TGFzdFN0ZXAiLCJsYXN0U3RlcFN0cmluZyIsInN1YnByb29mU3RyaW5nIiwiZnJhbWUiLCJtZXRhdmFyaWFibGUiLCJmcmFtZVN0cmluZyIsIm1ldGF2YXJpYWJsZVN0cmluZyIsInN0cmluZyIsInJlZmVybmVjZVN0cmluZyIsIm1ldGFMZXZlbEFzc3VtcHRpb25TdHJpbmciLCJwcm9jZWR1cmVSZWZlcmVuY2UiLCJwcm9jZWR1cmVSZWZlcmVuY2VOYW1lIiwiZ2V0TmFtZSIsInByb2NlZHVyZUNhbGxTdHJpbmciLCJzdGF0ZW1lbnRTdWJzdGl0dXRpb25TdHJpbmciLCJyZWZlcmVuY2VTdWJzdGl0dXRpb25TdHJpbmciLCJkZWR1Y3Rpb24iLCJkZWR1Y3Rpb25TdHJpbmciLCJ0b3BMZXZlbE1ldGFBc3NlcnRpb25TdHJpbmciLCJzdWJzdGl0dXRpb24iLCJzdWJzdGl0dXRpb25TdHJpbmciXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7OztRQXFJZ0JBO2VBQUFBOztRQXJCQUM7ZUFBQUE7O1FBNERBQztlQUFBQTs7UUE5SEFDO2VBQUFBOztRQTVCQUM7ZUFBQUE7O1FBa0tBQztlQUFBQTs7UUF2R0FDO2VBQUFBOztRQTdD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
230
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsaXRpZXMvc3RyaW5nLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBiYXNlVHlwZUZyb21Ob3RoaW5nIH0gZnJvbSBcIi4uL3V0aWxpdGllcy90eXBlXCI7XG5pbXBvcnQgeyBFTVBUWV9TVFJJTkcsIFBST1ZJU0lPTkFMTFkgfSBmcm9tIFwiLi4vY29uc3RhbnRzXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiB0ZXJtc1N0cmluZ0Zyb21UZXJtcyh0ZXJtcykge1xuICBjb25zdCB0ZXJtc1N0cmluZyA9IHRlcm1zLnJlZHVjZSgodGVybXNTdHJpbmcsIHRlcm0pID0+IHtcbiAgICBjb25zdCB0ZXJtU3RyaW5nID0gdGVybS5nZXRTdHJpbmcoKTtcblxuICAgIHRlcm1zU3RyaW5nID0gKHRlcm1zU3RyaW5nICE9PSBudWxsKSA/XG4gICAgICAgICAgICAgICAgICAgYCR7dGVybXNTdHJpbmd9LCAke3Rlcm1TdHJpbmd9YCA6XG4gICAgICAgICAgICAgICAgICAgICAgdGVybVN0cmluZztcblxuICAgIHJldHVybiB0ZXJtc1N0cmluZztcbiAgfSwgbnVsbCk7XG5cbiAgcmV0dXJuIHRlcm1zU3RyaW5nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbGFiZWxzU3RyaW5nRnJvbUxhYmVscyhsYWJlbHMpIHtcbiAgY29uc3QgbGFiZWxzU3RyaW5nID0gbGFiZWxzLnJlZHVjZSgobGFiZWxzU3RyaW5nLCBsYWJlbCkgPT4ge1xuICAgIGNvbnN0IGxhYmVsU3RyaW5nID0gbGFiZWwuZ2V0U3RyaW5nKCk7XG5cbiAgICBsYWJlbHNTdHJpbmcgPSAobGFiZWxzU3RyaW5nID09PSBudWxsKSA/XG4gICAgICAgICAgICAgICAgICAgICBsYWJlbFN0cmluZzogLy8vXG4gICAgICAgICAgICAgICAgICAgICAgYCR7bGFiZWxzU3RyaW5nfSwgJHtsYWJlbFN0cmluZ31gO1xuXG4gICAgcmV0dXJuIGxhYmVsc1N0cmluZztcbiAgfSwgbnVsbCk7XG5cbiAgcmV0dXJuIGxhYmVsc1N0cmluZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByZW1pc2VzU3RyaW5nRnJvbVByZW1pc2VzKHByZW1pc2VzKSB7XG4gIGNvbnN0IHByZW1pc2VzU3RyaW5nID0gcHJlbWlzZXMucmVkdWNlKChwcmVtaXNlc1N0cmluZywgcHJlbWlzZSkgPT4ge1xuICAgIGNvbnN0IHByZW1pc2VTdHJpbmcgPSBwcmVtaXNlLmdldFN0cmluZygpO1xuXG4gICAgcHJlbWlzZXNTdHJpbmcgPSAocHJlbWlzZXNTdHJpbmcgIT09IG51bGwpID9cbiAgICAgICAgICAgICAgICAgICAgICAgYCR7cHJlbWlzZXNTdHJpbmd9LCAke3ByZW1pc2VTdHJpbmd9YCA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgcHJlbWlzZVN0cmluZzsgIC8vL1xuXG4gICAgcmV0dXJuIHByZW1pc2VzU3RyaW5nO1xuICB9LCBudWxsKTtcblxuICByZXR1cm4gcHJlbWlzZXNTdHJpbmc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoeXBvdGhlc2VzU3RyaW5nRnJvbUh5cG90aGVzZXMoaHlwb3RoZXNlcykge1xuICBjb25zdCBoeXBvdGhlc2VzU3RyaW5nID0gaHlwb3RoZXNlcy5yZWR1Y2UoKGh5cG90aGVzZXNTdHJpbmcsIGh5cG90aGVzaXMpID0+IHtcbiAgICBjb25zdCBoeXBvdGhlc2lzU3RyaW5nID0gaHlwb3RoZXNpcy5nZXRTdHJpbmcoKTtcblxuICAgIGh5cG90aGVzZXNTdHJpbmcgPSAoaHlwb3RoZXNlc1N0cmluZyAhPT0gbnVsbCkgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICBgJHtoeXBvdGhlc2VzU3RyaW5nfSwgJHtoeXBvdGhlc2lzU3RyaW5nfWAgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh5cG90aGVzaXNTdHJpbmc7ICAvLy9cblxuICAgIHJldHVybiBoeXBvdGhlc2VzU3RyaW5nO1xuICB9LCBudWxsKTtcblxuICByZXR1cm4gaHlwb3RoZXNlc1N0cmluZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN1cGVyVHlwZXNTdHJpbmdGcm9tU3VwZXJUeXBlcyhzdXBlclR5cGVzKSB7XG4gIGxldCBzdXBlclR5cGVzU3RyaW5nO1xuXG4gIGNvbnN0IGJhc2VUeXBlID0gYmFzZVR5cGVGcm9tTm90aGluZygpO1xuXG4gIHN1cGVyVHlwZXNTdHJpbmcgPSBzdXBlclR5cGVzLnJlZHVjZSgoc3VwZXJUeXBlc1N0cmluZywgc3VwZXJUeXBlKSA9PiB7XG4gICAgaWYgKHN1cGVyVHlwZSAhPT0gYmFzZVR5cGUpIHtcbiAgICAgIGNvbnN0IHN1cGVyVHlwZVN0cmluZyA9IHN1cGVyVHlwZS5nZXRTdHJpbmcoKTtcblxuICAgICAgc3VwZXJUeXBlc1N0cmluZyA9IChzdXBlclR5cGVzU3RyaW5nID09PSBudWxsKSA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICBgJyR7c3VwZXJUeXBlU3RyaW5nfSdgIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGAke3N1cGVyVHlwZXNTdHJpbmd9LCAnJHtzdXBlclR5cGVTdHJpbmd9J2A7XG4gICAgfVxuXG4gICAgcmV0dXJuIHN1cGVyVHlwZXNTdHJpbmc7XG4gIH0sIG51bGwpO1xuXG4gIHN1cGVyVHlwZXNTdHJpbmcgPSAoc3VwZXJUeXBlc1N0cmluZyAhPT0gbnVsbCkgP1xuICAgICAgICAgICAgICAgICAgICAgICBgOiR7c3VwZXJUeXBlc1N0cmluZ31gIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgRU1QVFlfU1RSSU5HO1xuXG4gIHJldHVybiBzdXBlclR5cGVzU3RyaW5nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyYW1ldGVyc1N0cmluZ0Zyb21QYXJhbWV0ZXJzKHBhcmFtZXRlcnMpIHtcbiAgY29uc3QgcGFyYW1ldGVyc1N0cmluZyA9IHBhcmFtZXRlcnMucmVkdWNlKChwYXJhbWV0ZXJzU3RyaW5nLCBwYXJhbWV0ZXIpID0+IHtcbiAgICBjb25zdCBwYXJhbWV0ZXJTdHJpbmcgPSBwYXJhbWV0ZXIuZ2V0U3RyaW5nKCk7XG5cbiAgICBwYXJhbWV0ZXJzU3RyaW5nID0gKHBhcmFtZXRlcnNTdHJpbmcgPT09IG51bGwpID9cbiAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXJTdHJpbmcgOiAvLy9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgYCR7cGFyYW1ldGVyc1N0cmluZ30sICR7cGFyYW1ldGVyU3RyaW5nfWA7XG5cbiAgICByZXR1cm4gcGFyYW1ldGVyc1N0cmluZztcbiAgfSwgbnVsbCk7XG5cbiAgcmV0dXJuIHBhcmFtZXRlcnNTdHJpbmc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm92aXNpbmFsU3RyaW5nRnJvbVByb3Zpc2lvbmFsKHByb3Zpc2lvbmFsKSB7XG4gIGNvbnN0IHByb3Zpc2lvblN0cmluZyA9IHByb3Zpc2lvbmFsID9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUk9WSVNJT05BTExZIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVNUFRZX1NUUklORztcblxuICByZXR1cm4gcHJvdmlzaW9uU3RyaW5nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3VwcG9zaXRpb25zU3RyaW5nRnJvbVN1cHBvc2l0aW9ucyhzdXBwb3NpdGlvbnMpIHtcbiAgY29uc3Qgc3VwcG9zaXRpb25zU3RyaW5nID0gc3VwcG9zaXRpb25zLnJlZHVjZSgoc3VwcG9zaXRpb25zU3RyaW5nLCBzdXBwb3NpdGlvbikgPT4ge1xuICAgIGNvbnN0IHN1cHBvc2l0aW9uU3RyaW5nID0gc3VwcG9zaXRpb24uZ2V0U3RyaW5nKCk7XG5cbiAgICBzdXBwb3NpdGlvbnNTdHJpbmcgPSAoc3VwcG9zaXRpb25zU3RyaW5nID09PSBudWxsKSA/XG4gICAgICBzdXBwb3NpdGlvblN0cmluZzogLy8vXG4gICAgICBgJHtzdXBwb3NpdGlvbnNTdHJpbmd9LCAke3N1cHBvc2l0aW9uU3RyaW5nfWA7XG5cbiAgICByZXR1cm4gc3VwcG9zaXRpb25zU3RyaW5nO1xuICB9LCBudWxsKTtcblxuICByZXR1cm4gc3VwcG9zaXRpb25zU3RyaW5nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2lnbmF0dXJlU3RyaW5nRnJvbVRlcm1zKHRlcm1zKSB7XG4gIGNvbnN0IHRlcm1zU3RyaW5nID0gdGVybXNTdHJpbmdGcm9tVGVybXModGVybXMpLFxuICAgICAgICBzaWduYXR1cmVTdHJpbmcgPSBgWyR7dGVybXNTdHJpbmd9XWA7XG5cbiAgcmV0dXJuIHNpZ25hdHVyZVN0cmluZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVxdWl2YWxlbmNlU3RyaW5nRnJvbVRlcm1zKHRlcm1zKSB7XG4gIGNvbnN0IHRlcm1zU3RyaW5nID0gdGVybXNTdHJpbmdGcm9tVGVybXModGVybXMpLFxuICAgICAgICBlcXVpdmFsZW5jZVN0cmluZyA9IGBbJHt0ZXJtc1N0cmluZ31dYDtcblxuICByZXR1cm4gZXF1aXZhbGVuY2VTdHJpbmc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlU3RyaW5nRnJvbU5vbWluYWxUeXBlTmFtZShub21pbmFsVHlwZU5hbWUpIHtcbiAgY29uc3QgdHlwZVN0cmluZyA9IG5vbWluYWxUeXBlTmFtZTsgIC8vL1xuXG4gIHJldHVybiB0eXBlU3RyaW5nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGVybVN1YnN0aXR1dGlvblN0cmluZ0Zyb21UZXJtQW5kVmFyaWFibGUodGVybSwgdmFyaWFibGUpIHtcbiAgY29uc3QgdGVybVN0cmluZyA9IHRlcm0uZ2V0U3RyaW5nKCksXG4gICAgICAgIHZhcmlhYmxlU3RyaW5nID0gdmFyaWFibGUuZ2V0U3RyaW5nKCksXG4gICAgICAgIHRlcm1TdWJzdGl0dXRpb25TdHJpbmcgPSBgWyR7dGVybVN0cmluZ30gZm9yICR7dmFyaWFibGVTdHJpbmd9XWA7XG5cbiAgcmV0dXJuIHRlcm1TdWJzdGl0dXRpb25TdHJpbmc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhc3N1bXB0aW9uU3RyaW5nRnJvbVJlZmVyZW5jZUFuZFN0YXRlbWVudChyZWZlcmVuY2UsIHN0YXRlbWVudCkge1xuICBjb25zdCByZWZlcmVuY2VTdHJpbmcgPSByZWZlcmVuY2UuZ2V0U3RyaW5nKCksXG4gICAgICAgIHN0YXRlbWVudFN0cmluZyA9IHN0YXRlbWVudC5nZXRTdHJpbmcoKSxcbiAgICAgICAgYXNzdW1wdGlvblN0cmluZyA9IGAke3JlZmVyZW5jZVN0cmluZ30gOjogJHtzdGF0ZW1lbnRTdHJpbmd9YDtcblxuICByZXR1cm4gYXNzdW1wdGlvblN0cmluZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJ1bHNTdHJpbmdGcm9tTGFiZWxzUHJlbWlzZXNBbmRDb25jbHVzaW9uKGxhYmVscywgcHJlbWlzZXMsIGNvbmNsdXNpb24pIHtcbiAgY29uc3QgY29uY2x1c2lvblN0cmluZyA9IGNvbmNsdXNpb24uZ2V0U3RyaW5nKCksXG4gICAgICAgIHByZW1pc2VzU3RyaW5nID0gcHJlbWlzZXNTdHJpbmdGcm9tUHJlbWlzZXMocHJlbWlzZXMpLFxuICAgICAgICBsYWJlbHNTdHJpbmcgPSBsYWJlbHNTdHJpbmdGcm9tTGFiZWxzKGxhYmVscyksXG4gICAgICAgIHJ1bGVTdHJpbmcgPSAocHJlbWlzZXNTdHJpbmcgIT09IG51bGwpID9cbiAgICAgICAgICAgICAgICAgICAgICAgYCR7bGFiZWxzU3RyaW5nfSA6OiBbJHtwcmVtaXNlc1N0cmluZ31dLi4uJHtjb25jbHVzaW9uU3RyaW5nfWAgOlxuICAgICAgICAgICAgICAgICAgICAgICAgIGAke2xhYmVsc1N0cmluZ30gOjogJHtjb25jbHVzaW9uU3RyaW5nfWA7XG5cbiAgcmV0dXJuIHJ1bGVTdHJpbmc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZWN0aW9uU3RyaW5nRnJvbUh5cG90aGVzZXNUb3BMZXZlbEFzc2VydGlvbihoeXBvdGhlc2VzLCBheGlvbSwgbGVtbWEsIHRoZW9yZW0sIGNvbmplY3R1cmUpIHtcbiAgY29uc3QgdG9wTGV2ZWxBc3NlcnRpb24gPSAoYXhpb20gfHwgbGVtbWEgfHwgdGhlb3JlbSB8fCBjb25qZWN0dXJlKSxcbiAgICAgICAgdG9wTGV2ZWxBc3NlcnRpb25TdHJpbmcgPSB0b3BMZXZlbEFzc2VydGlvbi5nZXRTdHJpbmcoKSxcbiAgICAgICAgaHlwb3RoZXNlc1N0cmluZyA9IGh5cG90aGVzZXNTdHJpbmdGcm9tSHlwb3RoZXNlcyhoeXBvdGhlc2VzKSxcbiAgICAgICAgc2VjdGlvblN0cmluZyA9ICh0b3BMZXZlbEFzc2VydGlvblN0cmluZyAhPT0gbnVsbCkgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICBgWyR7aHlwb3RoZXNlc1N0cmluZ31dOjo6ICR7dG9wTGV2ZWxBc3NlcnRpb25TdHJpbmd9YCA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYFske2h5cG90aGVzZXNTdHJpbmd9XTo6OiBgO1xuXG4gIHJldHVybiBzZWN0aW9uU3RyaW5nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3VicHJvb2ZTdHJpbmdGcm9tU3VwcG9zaXRpb25zQW5kU3ViRGVyaXZhdGlvbihzdXBwb3NpdGlvbnMsIHN1YkRlcml2YXRpb24pIHtcbiAgY29uc3QgbGFzdFN0ZXAgPSBzdWJEZXJpdmF0aW9uLmdldExhc3RTdGVwKCksXG4gICAgICAgIHN1cHBvc2l0aW9uc1N0cmluZyA9IHN1cHBvc2l0aW9uc1N0cmluZ0Zyb21TdXBwb3NpdGlvbnMoc3VwcG9zaXRpb25zKSxcbiAgICAgICAgbGFzdFN0ZXBTdHJpbmcgPSBsYXN0U3RlcC5nZXRTdHJpbmcoKSxcbiAgICAgICAgc3VicHJvb2ZTdHJpbmcgPSBgWyR7c3VwcG9zaXRpb25zU3RyaW5nfV0uLi4ke2xhc3RTdGVwU3RyaW5nfWA7XG5cbiAgcmV0dXJuIHN1YnByb29mU3RyaW5nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZnJhbWVTdWJzdGl0dXRpb25TdHJpbmdGcm9tRnJhbWVBbmRNZXRhdmFyaWFibGUoZnJhbWUsIG1ldGF2YXJpYWJsZSkge1xuICBjb25zdCBmcmFtZVN0cmluZyA9IGZyYW1lLmdldFN0cmluZygpLFxuICAgICAgICBtZXRhdmFyaWFibGVTdHJpbmcgPSBtZXRhdmFyaWFibGUuZ2V0U3RyaW5nKCksXG4gICAgICAgIHN0cmluZyA9IGBbJHtmcmFtZVN0cmluZ30gZm9yIFske21ldGF2YXJpYWJsZVN0cmluZ31dXWA7XG5cbiAgcmV0dXJuIHN0cmluZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1ldGFMZXZlbEFzc3VtcHRpb25TdHJpbmdGcm9tUmVmZXJlbmNlQW5kU3RhdGVtZW50KHJlZmVyZW5jZSwgc3RhdGVtZW50KSB7XG4gIGNvbnN0IHN0YXRlbWVudFN0cmluZyA9IHN0YXRlbWVudC5nZXRTdHJpbmcoKSxcbiAgICAgICAgcmVmZXJuZWNlU3RyaW5nID0gcmVmZXJlbmNlLmdldFN0cmluZygpLFxuICAgICAgICBtZXRhTGV2ZWxBc3N1bXB0aW9uU3RyaW5nID0gYCR7cmVmZXJuZWNlU3RyaW5nfSA6OiAke3N0YXRlbWVudFN0cmluZ31gO1xuXG4gIHJldHVybiBtZXRhTGV2ZWxBc3N1bXB0aW9uU3RyaW5nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvY2VkdXJlQ2FsbFN0cmluZ0Zyb21Qcm9jZWR1cmVSZWZlcmVuY2VBbmRQYXJhbWV0ZXJzKHByb2NlZHVyZVJlZmVyZW5jZSwgcGFyYW1ldGVycykge1xuICBjb25zdCBwcm9jZWR1cmVSZWZlcmVuY2VOYW1lID0gcHJvY2VkdXJlUmVmZXJlbmNlLmdldE5hbWUoKSxcbiAgICAgICAgcGFyYW1ldGVyc1N0cmluZyA9IHBhcmFtZXRlcnNTdHJpbmdGcm9tUGFyYW1ldGVycyhwYXJhbWV0ZXJzKSxcbiAgICAgICAgcHJvY2VkdXJlQ2FsbFN0cmluZyA9IGBAJHtwcm9jZWR1cmVSZWZlcmVuY2VOYW1lfSgke3BhcmFtZXRlcnNTdHJpbmd9KWA7XG5cbiAgcmV0dXJuIHByb2NlZHVyZUNhbGxTdHJpbmc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGF0ZW1lbnRTdWJzdGl0dXRpb25TdHJpbmdGcm9tU3RhdGVtZW50QW5kTWV0YXZhcmlhYmxlKHN0YXRlbWVudCwgbWV0YXZhcmlhYmxlKSB7XG4gIGNvbnN0IHN0YXRlbWVudFN0cmluZyA9IHN0YXRlbWVudC5nZXRTdHJpbmcoKSxcbiAgICAgICAgbWV0YXZhcmlhYmxlU3RyaW5nID0gbWV0YXZhcmlhYmxlLmdldFN0cmluZygpLFxuICAgICAgICBzdGF0ZW1lbnRTdWJzdGl0dXRpb25TdHJpbmcgPSBgWyR7c3RhdGVtZW50U3RyaW5nfSBmb3IgJHttZXRhdmFyaWFibGVTdHJpbmd9XWA7XG5cbiAgcmV0dXJuIHN0YXRlbWVudFN1YnN0aXR1dGlvblN0cmluZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlZmVyZW5jZVN1YnN0aXR1dGlvblN0cmluZ0Zyb21SZWZlcmVuY2VBbmRNZXRhdmFyaWFibGUocmVmZXJlbmNlLCBtZXRhdmFyaWFibGUpIHtcbiAgY29uc3QgcmVmZXJlbmNlU3RyaW5nID0gcmVmZXJlbmNlLmdldFN0cmluZygpLFxuICAgICAgICBtZXRhdmFyaWFibGVTdHJpbmcgPSBtZXRhdmFyaWFibGUuZ2V0U3RyaW5nKCksXG4gICAgICAgIHJlZmVyZW5jZVN1YnN0aXR1dGlvblN0cmluZyA9IGBbJHtyZWZlcmVuY2VTdHJpbmd9IGZvciAke21ldGF2YXJpYWJsZVN0cmluZ31dYDtcblxuICByZXR1cm4gcmVmZXJlbmNlU3Vic3RpdHV0aW9uU3RyaW5nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdG9wTGV2ZWxBc3NlcnRpb25TdHJpbmdGcm9tTGFiZWxzU3VwcG9zaXRpb25zQW5kRGVkdWN0aW9uKGxhYmVscywgc3VwcG9zaXRpb25zLCBkZWR1Y3Rpb24pIHtcbiAgbGV0IHRvcExldmVsQXNzZXJ0aW9uU3RyaW5nO1xuXG4gIGNvbnN0IHN1cHBvc2l0aW9uc1N0cmluZyA9IHN1cHBvc2l0aW9uc1N0cmluZ0Zyb21TdXBwb3NpdGlvbnMoc3VwcG9zaXRpb25zKSxcbiAgICAgICAgZGVkdWN0aW9uU3RyaW5nID0gZGVkdWN0aW9uLmdldFN0cmluZygpLFxuICAgICAgICBsYWJlbHNTdHJpbmcgPSBsYWJlbHNTdHJpbmdGcm9tTGFiZWxzKGxhYmVscyk7XG5cbiAgaWYgKGxhYmVsc1N0cmluZyAhPT0gbnVsbCkge1xuICAgIHRvcExldmVsQXNzZXJ0aW9uU3RyaW5nID0gKHN1cHBvc2l0aW9uc1N0cmluZyAhPT0gbnVsbCkgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGAke2xhYmVsc1N0cmluZ30gOjogWyR7c3VwcG9zaXRpb25zU3RyaW5nfV0uLi4ke2RlZHVjdGlvblN0cmluZ31gIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGAke2xhYmVsc1N0cmluZ30gOjogJHtkZWR1Y3Rpb25TdHJpbmd9YDtcbiAgfSBlbHNlIHtcbiAgICB0b3BMZXZlbEFzc2VydGlvblN0cmluZyA9IChzdXBwb3NpdGlvbnNTdHJpbmcgIT09IG51bGwpID9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgWyR7c3VwcG9zaXRpb25zU3RyaW5nfV0uLi4ke2RlZHVjdGlvblN0cmluZ31gIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWR1Y3Rpb25TdHJpbmc7XG4gIH1cblxuICByZXR1cm4gdG9wTGV2ZWxBc3NlcnRpb25TdHJpbmc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb21wbGV4VHlwZURlY2xhcmF0aW9uU3RyaW5nRnJvbVR5cGVTdXBlclR5cGVzQW5kUHJvdmlzaW9uYWwodHlwZSwgc3VwZXJUeXBlcywgcHJvdmlzaW9uYWwpIHtcbiAgY29uc3QgdHlwZVN0cmluZyA9IHR5cGUuZ2V0U3RyaW5nKCksXG4gICAgICAgIHN1cGVyVHlwZXNTdHJpbmcgPSBzdXBlclR5cGVzU3RyaW5nRnJvbVN1cGVyVHlwZXMoc3VwZXJUeXBlcyksXG4gICAgICAgIHByb3Zpc2lvbmFsU3RyaW5nID0gcHJvdmlzaW5hbFN0cmluZ0Zyb21Qcm92aXNpb25hbChwcm92aXNpb25hbCksXG4gICAgICAgIGNvbXBsZXhUeXBlRGVjbGFyYXRpb25TdHJpbmcgPSBgJHtwcm92aXNpb25hbFN0cmluZ30ke3R5cGVTdHJpbmd9JHtzdXBlclR5cGVzU3RyaW5nfWA7XG5cbiAgcmV0dXJuIGNvbXBsZXhUeXBlRGVjbGFyYXRpb25TdHJpbmc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0b3BMZXZlbE1ldGFBc3NlcnRpb25TdHJpbmdGcm9tTGFiZWxTdXBwb3NpdGlvbnNBbmREZWR1Y3Rpb24obGFiZWwsIHN1cHBvc2l0aW9ucywgZGVkdWN0aW9uKSB7XG4gIGNvbnN0IGxhYmVsU3RyaW5nID0gbGFiZWwuZ2V0U3RyaW5nKCksXG4gICAgICAgIGRlZHVjdGlvblN0cmluZyA9IGRlZHVjdGlvbi5nZXRTdHJpbmcoKSxcbiAgICAgICAgc3VwcG9zaXRpb25zU3RyaW5nID0gc3VwcG9zaXRpb25zU3RyaW5nRnJvbVN1cHBvc2l0aW9ucyhzdXBwb3NpdGlvbnMpLFxuICAgICAgICB0b3BMZXZlbE1ldGFBc3NlcnRpb25TdHJpbmcgPSAoc3VwcG9zaXRpb25zU3RyaW5nICE9PSBudWxsKSA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgJHtsYWJlbFN0cmluZ30gOjogWyR7c3VwcG9zaXRpb25zU3RyaW5nfV0uLi4ke2RlZHVjdGlvblN0cmluZ31gIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYCR7bGFiZWxTdHJpbmd9IDo6ICR7ZGVkdWN0aW9uU3RyaW5nfWA7XG5cbiAgcmV0dXJuIHRvcExldmVsTWV0YUFzc2VydGlvblN0cmluZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0YXRlbWVudFN1YnN0aXR1dGlvblN0cmluZ0Zyb21TdGF0ZW1lbnRNZXRhdmFyaWFibGVBbmRTdWJzdGl0dXRpb24oc3RhdGVtZW50LCBtZXRhdmFyaWFibGUsIHN1YnN0aXR1dGlvbikge1xuICBjb25zdCBzdGF0ZW1lbnRTdHJpbmcgPSBzdGF0ZW1lbnQuZ2V0U3RyaW5nKCksXG4gICAgICAgIG1ldGF2YXJpYWJsZVN0cmluZyA9IG1ldGF2YXJpYWJsZS5nZXRTdHJpbmcoKSxcbiAgICAgICAgc3Vic3RpdHV0aW9uU3RyaW5nID0gc3Vic3RpdHV0aW9uLmdldFN0cmluZygpLFxuICAgICAgICBzdGF0ZW1lbnRTdWJzdGl0dXRpb25TdHJpbmcgPSBgWyR7c3RhdGVtZW50U3RyaW5nfSBmb3IgJHttZXRhdmFyaWFibGVTdHJpbmd9JHtzdWJzdGl0dXRpb25TdHJpbmd9XWA7XG5cbiAgcmV0dXJuIHN0YXRlbWVudFN1YnN0aXR1dGlvblN0cmluZztcbn1cbiJdLCJuYW1lcyI6WyJhc3N1bXB0aW9uU3RyaW5nRnJvbVJlZmVyZW5jZUFuZFN0YXRlbWVudCIsImNvbXBsZXhUeXBlRGVjbGFyYXRpb25TdHJpbmdGcm9tVHlwZVN1cGVyVHlwZXNBbmRQcm92aXNpb25hbCIsImVxdWl2YWxlbmNlU3RyaW5nRnJvbVRlcm1zIiwiZnJhbWVTdWJzdGl0dXRpb25TdHJpbmdGcm9tRnJhbWVBbmRNZXRhdmFyaWFibGUiLCJoeXBvdGhlc2VzU3RyaW5nRnJvbUh5cG90aGVzZXMiLCJsYWJlbHNTdHJpbmdGcm9tTGFiZWxzIiwibWV0YUxldmVsQXNzdW1wdGlvblN0cmluZ0Zyb21SZWZlcmVuY2VBbmRTdGF0ZW1lbnQiLCJwYXJhbWV0ZXJzU3RyaW5nRnJvbVBhcmFtZXRlcnMiLCJwcmVtaXNlc1N0cmluZ0Zyb21QcmVtaXNlcyIsInByb2NlZHVyZUNhbGxTdHJpbmdGcm9tUHJvY2VkdXJlUmVmZXJlbmNlQW5kUGFyYW1ldGVycyIsInByb3Zpc2luYWxTdHJpbmdGcm9tUHJvdmlzaW9uYWwiLCJyZWZlcmVuY2VTdWJzdGl0dXRpb25TdHJpbmdGcm9tUmVmZXJlbmNlQW5kTWV0YXZhcmlhYmxlIiwicnVsc1N0cmluZ0Zyb21MYWJlbHNQcmVtaXNlc0FuZENvbmNsdXNpb24iLCJzZWN0aW9uU3RyaW5nRnJvbUh5cG90aGVzZXNUb3BMZXZlbEFzc2VydGlvbiIsInNpZ25hdHVyZVN0cmluZ0Zyb21UZXJtcyIsInN0YXRlbWVudFN1YnN0aXR1dGlvblN0cmluZ0Zyb21TdGF0ZW1lbnRBbmRNZXRhdmFyaWFibGUiLCJzdGF0ZW1lbnRTdWJzdGl0dXRpb25TdHJpbmdGcm9tU3RhdGVtZW50TWV0YXZhcmlhYmxlQW5kU3Vic3RpdHV0aW9uIiwic3VicHJvb2ZTdHJpbmdGcm9tU3VwcG9zaXRpb25zQW5kU3ViRGVyaXZhdGlvbiIsInN1cGVyVHlwZXNTdHJpbmdGcm9tU3VwZXJUeXBlcyIsInN1cHBvc2l0aW9uc1N0cmluZ0Zyb21TdXBwb3NpdGlvbnMiLCJ0ZXJtU3Vic3RpdHV0aW9uU3RyaW5nRnJvbVRlcm1BbmRWYXJpYWJsZSIsInRlcm1zU3RyaW5nRnJvbVRlcm1zIiwidG9wTGV2ZWxBc3NlcnRpb25TdHJpbmdGcm9tTGFiZWxzU3VwcG9zaXRpb25zQW5kRGVkdWN0aW9uIiwidG9wTGV2ZWxNZXRhQXNzZXJ0aW9uU3RyaW5nRnJvbUxhYmVsU3VwcG9zaXRpb25zQW5kRGVkdWN0aW9uIiwidHlwZVN0cmluZ0Zyb21Ob21pbmFsVHlwZU5hbWUiLCJ0ZXJtcyIsInRlcm1zU3RyaW5nIiwicmVkdWNlIiwidGVybSIsInRlcm1TdHJpbmciLCJnZXRTdHJpbmciLCJsYWJlbHMiLCJsYWJlbHNTdHJpbmciLCJsYWJlbCIsImxhYmVsU3RyaW5nIiwicHJlbWlzZXMiLCJwcmVtaXNlc1N0cmluZyIsInByZW1pc2UiLCJwcmVtaXNlU3RyaW5nIiwiaHlwb3RoZXNlcyIsImh5cG90aGVzZXNTdHJpbmciLCJoeXBvdGhlc2lzIiwiaHlwb3RoZXNpc1N0cmluZyIsInN1cGVyVHlwZXMiLCJzdXBlclR5cGVzU3RyaW5nIiwiYmFzZVR5cGUiLCJiYXNlVHlwZUZyb21Ob3RoaW5nIiwic3VwZXJUeXBlIiwic3VwZXJUeXBlU3RyaW5nIiwiRU1QVFlfU1RSSU5HIiwicGFyYW1ldGVycyIsInBhcmFtZXRlcnNTdHJpbmciLCJwYXJhbWV0ZXIiLCJwYXJhbWV0ZXJTdHJpbmciLCJwcm92aXNpb25hbCIsInByb3Zpc2lvblN0cmluZyIsIlBST1ZJU0lPTkFMTFkiLCJzdXBwb3NpdGlvbnMiLCJzdXBwb3NpdGlvbnNTdHJpbmciLCJzdXBwb3NpdGlvbiIsInN1cHBvc2l0aW9uU3RyaW5nIiwic2lnbmF0dXJlU3RyaW5nIiwiZXF1aXZhbGVuY2VTdHJpbmciLCJub21pbmFsVHlwZU5hbWUiLCJ0eXBlU3RyaW5nIiwidmFyaWFibGUiLCJ2YXJpYWJsZVN0cmluZyIsInRlcm1TdWJzdGl0dXRpb25TdHJpbmciLCJyZWZlcmVuY2UiLCJzdGF0ZW1lbnQiLCJyZWZlcmVuY2VTdHJpbmciLCJzdGF0ZW1lbnRTdHJpbmciLCJhc3N1bXB0aW9uU3RyaW5nIiwiY29uY2x1c2lvbiIsImNvbmNsdXNpb25TdHJpbmciLCJydWxlU3RyaW5nIiwiYXhpb20iLCJsZW1tYSIsInRoZW9yZW0iLCJjb25qZWN0dXJlIiwidG9wTGV2ZWxBc3NlcnRpb24iLCJ0b3BMZXZlbEFzc2VydGlvblN0cmluZyIsInNlY3Rpb25TdHJpbmciLCJzdWJEZXJpdmF0aW9uIiwibGFzdFN0ZXAiLCJnZXRMYXN0U3RlcCIsImxhc3RTdGVwU3RyaW5nIiwic3VicHJvb2ZTdHJpbmciLCJmcmFtZSIsIm1ldGF2YXJpYWJsZSIsImZyYW1lU3RyaW5nIiwibWV0YXZhcmlhYmxlU3RyaW5nIiwic3RyaW5nIiwicmVmZXJuZWNlU3RyaW5nIiwibWV0YUxldmVsQXNzdW1wdGlvblN0cmluZyIsInByb2NlZHVyZVJlZmVyZW5jZSIsInByb2NlZHVyZVJlZmVyZW5jZU5hbWUiLCJnZXROYW1lIiwicHJvY2VkdXJlQ2FsbFN0cmluZyIsInN0YXRlbWVudFN1YnN0aXR1dGlvblN0cmluZyIsInJlZmVyZW5jZVN1YnN0aXR1dGlvblN0cmluZyIsImRlZHVjdGlvbiIsImRlZHVjdGlvblN0cmluZyIsInR5cGUiLCJwcm92aXNpb25hbFN0cmluZyIsImNvbXBsZXhUeXBlRGVjbGFyYXRpb25TdHJpbmciLCJ0b3BMZXZlbE1ldGFBc3NlcnRpb25TdHJpbmciLCJzdWJzdGl0dXRpb24iLCJzdWJzdGl0dXRpb25TdHJpbmciXSwibWFw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
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "occam-verify-cli",
3
3
  "author": "James Smith",
4
- "version": "1.0.889",
4
+ "version": "1.0.892",
5
5
  "license": "MIT, Anti-996",
6
6
  "homepage": "https://github.com/djalbat/occam-verify-cli",
7
7
  "description": "Occam's Verifier",
@@ -2,14 +2,21 @@
2
2
 
3
3
  import Declaration from "../declaration";
4
4
 
5
+ import { asynchronousUtilities } from "occam-languages";
6
+
5
7
  import { define } from "../../elements";
8
+ import { baseTypeFromNothing } from "../../utilities/type";
9
+
10
+ const { asyncEvery } = asynchronousUtilities;
6
11
 
7
12
  export default define(class ComplexTypeDeclaration extends Declaration {
8
- constructor(context, string, node, lineIndex, type, superTypes) {
13
+ constructor(context, string, node, lineIndex, type, superTypes, provisional, propertyDeclarations) {
9
14
  super(context, string, node, lineIndex);
10
15
 
11
16
  this.type = type;
12
17
  this.superTypes = superTypes;
18
+ this.provisional = provisional;
19
+ this.propertyDeclarations = propertyDeclarations;
13
20
  }
14
21
 
15
22
  getType() {
@@ -20,44 +27,59 @@ export default define(class ComplexTypeDeclaration extends Declaration {
20
27
  return this.superTypes;
21
28
  }
22
29
 
30
+ isProvisional() {
31
+ return this.provisional;
32
+ }
33
+
34
+ getPropertyDeclarations() {
35
+ return this.propertyDeclarations;
36
+ }
37
+
23
38
  getComplexTypeDeclarationNode() {
24
39
  const node = this.getNode(),
25
- complexTypeDeclarationNode = node; ///
40
+ complexTypeDeclarationNode = node; ///
26
41
 
27
42
  return complexTypeDeclarationNode;
28
43
  }
29
44
 
45
+ getProperties() {
46
+ const properties = this.propertyDeclarations.reduce((properties, propertyDeclaration) => {
47
+ const property = propertyDeclaration.getProperty();
48
+
49
+ if (property !== null) {
50
+ properties.push(property);
51
+ }
52
+
53
+ return properties;
54
+ }, []);
55
+
56
+ return properties;
57
+ }
58
+
30
59
  async verify(context) {
31
60
  let verifies = false;
32
61
 
33
62
  await this.break(context);
34
63
 
35
- const complexTypeDeclarationString = this.getString(); ///
64
+ const complexTypeDeclarationString = this.getString(); ///
36
65
 
37
66
  context.trace(`Verifying the '${complexTypeDeclarationString}' complex type declaration...`);
38
67
 
39
- if (this.prefixed) {
40
- const typeString = this.type.getString();
41
-
42
- context.trace(`The '${typeString}' type is prefixed.`);
43
- } else {
44
- const typeVerifies = this.verifyType(context);
68
+ const typeVerifies = this.verifyType(context);
45
69
 
46
- if (typeVerifies) {
47
- const superTypesVerify = this.verifySuperTypes(context);
70
+ if (typeVerifies) {
71
+ const superTypesVerify = this.verifySuperTypes(context);
48
72
 
49
- if (superTypesVerify) {
50
- const propertiesVerify = this.verifyProperties(context);
73
+ if (superTypesVerify) {
74
+ const typePrefixVerifies = this.verifyTypePrefix(context);
51
75
 
52
- if (propertiesVerify) {
53
- const typePrefix = context.getTypePrefix();
76
+ if (typePrefixVerifies) {
77
+ const propertyDeclarationsVerify = await this.verifyPropertyDeclaratisons(context);
54
78
 
55
- if (typePrefix !== null) {
56
- const typePrefixName = typePrefix.getName(),
57
- prefixName = typePrefixName; ///
79
+ if (propertyDeclarationsVerify) {
80
+ const properties = this.getProperties();
58
81
 
59
- this.type.setPrefixName(prefixName);
60
- }
82
+ this.type.setProperties(properties);
61
83
 
62
84
  context.addType(this.type);
63
85
 
@@ -77,65 +99,65 @@ export default define(class ComplexTypeDeclaration extends Declaration {
77
99
  verifyType(context) {
78
100
  let typeVerifies = false;
79
101
 
80
- const typeString = this.type.getString();
102
+ const typeString = this.type.getString(),
103
+ complexTypeDeclarationString = this.getString(); ///
81
104
 
82
- context.trace(`Verifying the '${typeString}' complex type...`);
105
+ context.trace(`Verifying the '${complexTypeDeclarationString}' complex type declaration's '${typeString}' type...`);
83
106
 
84
107
  const typeName = this.type.getName(),
85
108
  includeRelease = true,
86
109
  typePresent = context.isTypePresentByTypeName(typeName, includeRelease);
87
110
 
88
- if (typePresent) {
89
- context.debug(`The '${typeString}' type is already present.`);
90
- } else {
111
+ if (!typePresent) {
91
112
  const prefixedTypeName = typeName, ///
92
113
  typePresent = context.isTypePresentByPrefixedTypeName(prefixedTypeName);
93
114
 
94
- if (typePresent) {
95
- context.debug(`The '${typeString}' type is already present.`);
96
- } else {
115
+ if (!typePresent) {
116
+ this.type.setProvisional(this.provisional);
117
+
97
118
  typeVerifies = true;
119
+ } else {
120
+ context.debug(`The '${typeString}' type is already present.`);
98
121
  }
122
+ } else {
123
+ context.debug(`The '${typeString}' type is already present.`);
99
124
  }
100
125
 
101
126
  if (typeVerifies) {
102
- context.debug(`...verified the '${typeString}' complex type.`);
127
+ context.debug(`...verified the '${complexTypeDeclarationString}' complex type declaration's '${typeString}' type`);
103
128
  }
104
129
 
105
130
  return typeVerifies;
106
131
  }
107
132
 
108
- verifySuperType(context, superType) {
133
+ verifySuperType(context, superType, superTypes) {
109
134
  let superTypeVerifies = false;
110
135
 
111
- const superTypeString = superType.getString();
136
+ const superTypeString = superType.getString(),
137
+ complexTypeDeclarationString = this.getString(); ///
112
138
 
113
- context.trace(`Verifying the '${superTypeString}' super-type...`);
139
+ context.trace(`Verifying the '${complexTypeDeclarationString}' complex type declaration's '${superTypeString}' super-type...`);
114
140
 
115
141
  const nominalTypeName = superType.getNominalTypeName(),
116
142
  typeName = nominalTypeName, ///
117
143
  typeComparesToTypeName = this.type.compareTypeName(typeName);
118
144
 
119
- if (typeComparesToTypeName) {
120
- context.trace(`The super-type's name compares to the ${typeName}' complex type's name.`);
121
- } else {
122
- const oldSuperType = superType;
123
-
145
+ if (!typeComparesToTypeName) {
124
146
  superType = context.findTypeByNominalTypeName(nominalTypeName);
125
147
 
126
- const superTypePresent = (superType !== null);
127
-
128
- if (superTypePresent) {
129
- const newSuperType = superType; ///
130
-
131
- this.type.replaceSuperType(oldSuperType, newSuperType);
148
+ if (superType !== null) {
149
+ superTypes.push(superType);
132
150
 
133
151
  superTypeVerifies = true;
152
+ } else {
153
+ context.debug(`The '${superTypeString}' super-type is not present.`);
134
154
  }
155
+ } else {
156
+ context.debug(`The '${superTypeString}' super-type's name compares to the ${typeName}' type's name.`);
135
157
  }
136
158
 
137
159
  if (superTypeVerifies) {
138
- context.debug(`...verified the '${superTypeString}' super-type.`);
160
+ context.debug(`...verified the '${complexTypeDeclarationString}' complex type declaration's '${superTypeString}' super-type.`);
139
161
  }
140
162
 
141
163
  return superTypeVerifies;
@@ -144,162 +166,83 @@ export default define(class ComplexTypeDeclaration extends Declaration {
144
166
  verifySuperTypes(context) {
145
167
  let superTypesVerify;
146
168
 
147
- const typeString = this.type.getString();
148
-
149
- context.trace(`Verifying the '${typeString}' complex type's super-types...`);
169
+ const superTypes = [],
170
+ complexTypeDeclarationString = this.getString(); ///
150
171
 
151
- const typeBasic = this.type.isBasic();
172
+ context.trace(`Verifying the '${complexTypeDeclarationString}' complex type declaration's super-types...`);
152
173
 
153
- if (typeBasic) {
154
- superTypesVerify = true;
174
+ superTypesVerify = this.superTypes.every((superType) => {
175
+ const superTypeVerifies = this.verifySuperType(context, superType, superTypes);
155
176
 
156
- context.trace(`The '${typeString}' complex type is basic.`)
157
- } else {
158
- const superTypes = this.type.getSuperTypes();
159
-
160
- superTypesVerify = superTypes.every((superType) => {
161
- const superTypeVerifies = this.verifySuperType(context, superType);
162
-
163
- if (superTypeVerifies) {
164
- return true;
165
- }
166
- });
167
- }
177
+ if (superTypeVerifies) {
178
+ return true;
179
+ }
180
+ });
168
181
 
169
182
  if (superTypesVerify) {
170
- context.debug(`...verified the '${typeString}' complex type's super-types.`);
171
- }
172
-
173
- return superTypesVerify;
174
- }
175
-
176
- verifyProperty(context, property, properties) {
177
- let propertyVerifies = false;
178
-
179
- const propertyString = property.getString();
183
+ const superTypesLength = superTypes.length;
180
184
 
181
- context.trace(`Verifying the '${propertyString}' property...`);
185
+ if (superTypesLength === 0) {
186
+ const baseType = baseTypeFromNothing(),
187
+ superTyupe = baseType; ///
182
188
 
183
- const propertyNameVerifies = this.verifyPropertyName(context, property, properties);
184
-
185
- if (propertyNameVerifies) {
186
- const propertyNominalTypeNameVerifies = this.verifyPropertyNominalTypeName(context, property, properties);
187
-
188
- if (propertyNominalTypeNameVerifies) {
189
- propertyVerifies = true;
189
+ superTypes.push(superTyupe);
190
190
  }
191
- }
192
-
193
- if (propertyVerifies) {
194
- context.debug(`...verified the '${propertyString}' property.`);
195
- }
196
-
197
- return propertyVerifies;
198
- }
199
-
200
- verifyProperties(context) {
201
- let propertiesVerify;
202
-
203
- const typeString = this.type.getString();
204
191
 
205
- context.trace(`Verifying the '${typeString}' complex type's properties...`);
192
+ this.type.setSuperTypes(superTypes);
206
193
 
207
- const includeSuperTypes = false,
208
- properties = this.type.getProperties(includeSuperTypes);
209
-
210
- propertiesVerify = properties.every((property) => {
211
- const propertyVerifies = this.verifyProperty(context, property, properties);
212
-
213
- if (propertyVerifies) {
214
- return true;
215
- }
216
- });
217
-
218
- if (propertiesVerify) {
219
- context.debug(`...verified the '${typeString}' complex type's properties.`);
194
+ context.debug(`...verified the '${complexTypeDeclarationString}' complex type declaration's super-types.`);
220
195
  }
221
196
 
222
- return propertiesVerify;
197
+ return superTypesVerify;
223
198
  }
224
199
 
225
- verifyPropertyName(context, property, properties) {
226
- let propertyNameVerifies = false;
227
-
228
- const propertyString = property.getString();
229
-
230
- context.trace(`Verifying the '${propertyString}' property's name...`);
200
+ verifyTypePrefix(context) {
201
+ let typePrefixVerifies = false;
231
202
 
232
- const propertyName = property.getName(),
233
- count = properties.reduce((count, property) => {
234
- const propertyComparesToPropertyName = property.comparePropertyName(propertyName);
203
+ const typeString = this.type.getString(),
204
+ complexTypeDeclarationString = this.getString(); ///
235
205
 
236
- if (propertyComparesToPropertyName) {
237
- count++;
238
- }
206
+ context.trace(`Verifying the '${complexTypeDeclarationString}' complex type declaration's '${typeString}' type's prefix...`);
239
207
 
240
- return count;
241
- }, 0);
208
+ const typePrefixed = this.type.isPrefixed();
242
209
 
243
- if (count > 1) {
244
- context.debug(`The '${propertyString}' property appears more than once.`);
210
+ if (!typePrefixed) {
211
+ typePrefixVerifies = true;
245
212
  } else {
246
- const superTypes = this.type.getSuperTypes(),
247
- superType = superTypes.find((superType) => {
248
- const superTypeProperties = superType.getProperties(),
249
- superTypePropertyComparesToPropertyName = superTypeProperties.some((superTypeProperty) => {
250
- const superTypePropertyComparesToPropertyName = superTypeProperty.comparePropertyName(propertyName);
251
-
252
- if (superTypePropertyComparesToPropertyName) {
253
- return true;
254
- }
255
- });
256
-
257
- if (superTypePropertyComparesToPropertyName) {
258
- return true;
259
- }
260
- }) || null;
261
-
262
- if (superType !== null) {
263
- const superTypeString = superType.getString();
264
-
265
- context.debug(`The '${superTypeString}' super-type has the same property.`);
266
- } else {
267
- propertyNameVerifies = true;
268
- }
213
+ context.debug(`The '${complexTypeDeclarationString}' complex type declaration's '${typeString}' type is prefixed.`);
269
214
  }
270
215
 
271
- if (propertyNameVerifies) {
272
- context.debug(`...verified the '${propertyString}' property's name.`);
216
+ if (typePrefixVerifies) {
217
+ context.debug(`...verified the '${complexTypeDeclarationString}' complex type declaration's '${typeString}' type's prefix.`);
273
218
  }
274
219
 
275
- return propertyNameVerifies;
220
+ return typePrefixVerifies;
276
221
  }
277
222
 
278
- verifyPropertyNominalTypeName(context, property) {
279
- let propertyNominalTypeNameVerifies = false;
223
+ async verifyPropertyDeclaratisons(context) {
224
+ let propertyDeclarationsVerify;
280
225
 
281
- const propertyString = property.getString(),
282
- nominalTypeName = property.getNominalTypeName();
226
+ const typeString = this.type.getString(),
227
+ complexTypeDeclarationString = this.getString(); ///
283
228
 
284
- context.trace(`Verifying the '${propertyString}' property's nominal type name...`);
229
+ context.trace(`Verifying the '${complexTypeDeclarationString}' complex type declaration's '${typeString}' type's property declarations...`);
285
230
 
286
- const typeComparesToNominalTypeName = this.type.compareNominalTypeName(nominalTypeName);
231
+ const properties = this.getProperties();
287
232
 
288
- if (typeComparesToNominalTypeName) {
289
- propertyNominalTypeNameVerifies = true;
290
- } else {
291
- const typePresent = context.isTypePresentByNominalTypeName(nominalTypeName);
233
+ propertyDeclarationsVerify = await asyncEvery(this.propertyDeclarations, async (propertyDeclaration) => {
234
+ const propertyVerifes = await propertyDeclaration.verify(properties, context);
292
235
 
293
- if (typePresent) {
294
- propertyNominalTypeNameVerifies = true;
236
+ if (propertyVerifes) {
237
+ return true;
295
238
  }
296
- }
239
+ });
297
240
 
298
- if (propertyNominalTypeNameVerifies) {
299
- context.debug(`...verifies the '${propertyString}' property's nominal type name.`);
241
+ if (propertyDeclarationsVerify) {
242
+ context.debug(`...verified the '${complexTypeDeclarationString}' complex type declaration's '${typeString}' type's property declarations.`);
300
243
  }
301
244
 
302
- return propertyNominalTypeNameVerifies;
245
+ return propertyDeclarationsVerify;
303
246
  }
304
247
 
305
248
  static name = "ComplexTypeDeclaration";