occam-nominal 1.0.384 → 1.0.389

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (52) hide show
  1. package/lib/constants.js +5 -5
  2. package/lib/context/bounded.js +4 -13
  3. package/lib/context/liminal.js +12 -12
  4. package/lib/element/claim.js +4 -4
  5. package/lib/element/equality.js +30 -17
  6. package/lib/element/fact/premise.js +3 -3
  7. package/lib/element/fact/supposition.js +3 -3
  8. package/lib/element/resolution/conclusion.js +71 -0
  9. package/lib/element/resolution/deduction.js +81 -0
  10. package/lib/element/resolution.js +91 -0
  11. package/lib/element/rule.js +4 -4
  12. package/lib/element/substitution/statement.js +12 -12
  13. package/lib/node/equality.js +16 -1
  14. package/lib/node/resolution/conclusion.js +23 -0
  15. package/lib/node/resolution/deduction.js +23 -0
  16. package/lib/node/resolution.js +27 -0
  17. package/lib/node/substitution/statement.js +5 -5
  18. package/lib/nonTerminalNodeMap.js +3 -3
  19. package/lib/preamble.js +3 -3
  20. package/lib/process/assign.js +48 -7
  21. package/lib/utilities/element.js +17 -10
  22. package/package.json +1 -1
  23. package/src/constants.js +1 -1
  24. package/src/context/bounded.js +5 -20
  25. package/src/context/liminal.js +11 -11
  26. package/src/element/claim.js +3 -3
  27. package/src/element/equality.js +36 -19
  28. package/src/element/fact/premise.js +2 -2
  29. package/src/element/fact/supposition.js +2 -2
  30. package/src/element/resolution/conclusion.js +86 -0
  31. package/src/element/resolution/deduction.js +102 -0
  32. package/src/element/resolution.js +123 -0
  33. package/src/element/rule.js +3 -3
  34. package/src/element/substitution/statement.js +12 -12
  35. package/src/node/equality.js +23 -0
  36. package/src/node/resolution/conclusion.js +7 -0
  37. package/src/node/resolution/deduction.js +7 -0
  38. package/src/node/{deduction.js → resolution.js} +2 -2
  39. package/src/node/substitution/statement.js +5 -5
  40. package/src/nonTerminalNodeMap.js +2 -2
  41. package/src/preamble.js +2 -2
  42. package/src/process/assign.js +69 -2
  43. package/src/utilities/element.js +13 -6
  44. package/lib/element/conclusion.js +0 -139
  45. package/lib/element/deduction.js +0 -149
  46. package/lib/node/conclusion.js +0 -27
  47. package/lib/node/deduction.js +0 -27
  48. package/lib/utilities/assignment.js +0 -47
  49. package/src/element/conclusion.js +0 -198
  50. package/src/element/deduction.js +0 -214
  51. package/src/node/conclusion.js +0 -23
  52. package/src/utilities/assignment.js +0 -57
package/lib/constants.js CHANGED
@@ -24,6 +24,9 @@ _export(exports, {
24
24
  get MISSING () {
25
25
  return MISSING;
26
26
  },
27
+ get NOT_EQUAL () {
28
+ return NOT_EQUAL;
29
+ },
27
30
  get NULL () {
28
31
  return NULL;
29
32
  },
@@ -36,9 +39,6 @@ _export(exports, {
36
39
  get S () {
37
40
  return S;
38
41
  },
39
- get SINGLE_SPACE () {
40
- return SINGLE_SPACE;
41
- },
42
42
  get UNDEFINED () {
43
43
  return UNDEFINED;
44
44
  }
@@ -46,13 +46,13 @@ _export(exports, {
46
46
  const S = "s";
47
47
  const NULL = "null";
48
48
  const MISSING = "missing";
49
+ const NOT_EQUAL = "!=";
49
50
  const UNDEFINED = "undefined";
50
51
  const PROVISIONAL = "Provisional";
51
52
  const EMPTY_STRING = "";
52
- const SINGLE_SPACE = " ";
53
53
  const PROVISIONALLY = "provisionally";
54
54
  const BASE_TYPE_SYMBOL = "<>";
55
55
  const BRACKETED_TERM_DEPTH = 2;
56
56
  const BRACKETED_STATEMENT_DEPTH = 2;
57
57
 
58
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9jb25zdGFudHMuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCBjb25zdCBTID0gXCJzXCI7XG5leHBvcnQgY29uc3QgTlVMTCA9IFwibnVsbFwiO1xuZXhwb3J0IGNvbnN0IE1JU1NJTkcgPSBcIm1pc3NpbmdcIjtcbmV4cG9ydCBjb25zdCBVTkRFRklORUQgPSBcInVuZGVmaW5lZFwiO1xuZXhwb3J0IGNvbnN0IFBST1ZJU0lPTkFMID0gXCJQcm92aXNpb25hbFwiO1xuZXhwb3J0IGNvbnN0IEVNUFRZX1NUUklORyA9IFwiXCI7XG5leHBvcnQgY29uc3QgU0lOR0xFX1NQQUNFID0gXCIgXCI7XG5leHBvcnQgY29uc3QgUFJPVklTSU9OQUxMWSA9IFwicHJvdmlzaW9uYWxseVwiO1xuZXhwb3J0IGNvbnN0IEJBU0VfVFlQRV9TWU1CT0wgPSBcIjw+XCI7XG5leHBvcnQgY29uc3QgQlJBQ0tFVEVEX1RFUk1fREVQVEggPSAyO1xuZXhwb3J0IGNvbnN0IEJSQUNLRVRFRF9TVEFURU1FTlRfREVQVEggPSAyO1xuIl0sIm5hbWVzIjpbIkJBU0VfVFlQRV9TWU1CT0wiLCJCUkFDS0VURURfU1RBVEVNRU5UX0RFUFRIIiwiQlJBQ0tFVEVEX1RFUk1fREVQVEgiLCJFTVBUWV9TVFJJTkciLCJNSVNTSU5HIiwiTlVMTCIsIlBST1ZJU0lPTkFMIiwiUFJPVklTSU9OQUxMWSIsIlMiLCJTSU5HTEVfU1BBQ0UiLCJVTkRFRklORUQiXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7OztRQVVhQTtlQUFBQTs7UUFFQUM7ZUFBQUE7O1FBREFDO2VBQUFBOztRQUpBQztlQUFBQTs7UUFIQUM7ZUFBQUE7O1FBREFDO2VBQUFBOztRQUdBQztlQUFBQTs7UUFHQUM7ZUFBQUE7O1FBUEFDO2VBQUFBOztRQU1BQztlQUFBQTs7UUFIQUM7ZUFBQUE7OztBQUhOLE1BQU1GLElBQUk7QUFDVixNQUFNSCxPQUFPO0FBQ2IsTUFBTUQsVUFBVTtBQUNoQixNQUFNTSxZQUFZO0FBQ2xCLE1BQU1KLGNBQWM7QUFDcEIsTUFBTUgsZUFBZTtBQUNyQixNQUFNTSxlQUFlO0FBQ3JCLE1BQU1GLGdCQUFnQjtBQUN0QixNQUFNUCxtQkFBbUI7QUFDekIsTUFBTUUsdUJBQXVCO0FBQzdCLE1BQU1ELDRCQUE0QiJ9
58
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9jb25zdGFudHMuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCBjb25zdCBTID0gXCJzXCI7XG5leHBvcnQgY29uc3QgTlVMTCA9IFwibnVsbFwiO1xuZXhwb3J0IGNvbnN0IE1JU1NJTkcgPSBcIm1pc3NpbmdcIjtcbmV4cG9ydCBjb25zdCBOT1RfRVFVQUwgPSBcIiE9XCI7XG5leHBvcnQgY29uc3QgVU5ERUZJTkVEID0gXCJ1bmRlZmluZWRcIjtcbmV4cG9ydCBjb25zdCBQUk9WSVNJT05BTCA9IFwiUHJvdmlzaW9uYWxcIjtcbmV4cG9ydCBjb25zdCBFTVBUWV9TVFJJTkcgPSBcIlwiO1xuZXhwb3J0IGNvbnN0IFBST1ZJU0lPTkFMTFkgPSBcInByb3Zpc2lvbmFsbHlcIjtcbmV4cG9ydCBjb25zdCBCQVNFX1RZUEVfU1lNQk9MID0gXCI8PlwiO1xuZXhwb3J0IGNvbnN0IEJSQUNLRVRFRF9URVJNX0RFUFRIID0gMjtcbmV4cG9ydCBjb25zdCBCUkFDS0VURURfU1RBVEVNRU5UX0RFUFRIID0gMjtcbiJdLCJuYW1lcyI6WyJCQVNFX1RZUEVfU1lNQk9MIiwiQlJBQ0tFVEVEX1NUQVRFTUVOVF9ERVBUSCIsIkJSQUNLRVRFRF9URVJNX0RFUFRIIiwiRU1QVFlfU1RSSU5HIiwiTUlTU0lORyIsIk5PVF9FUVVBTCIsIk5VTEwiLCJQUk9WSVNJT05BTCIsIlBST1ZJU0lPTkFMTFkiLCJTIiwiVU5ERUZJTkVEIl0sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7UUFVYUE7ZUFBQUE7O1FBRUFDO2VBQUFBOztRQURBQztlQUFBQTs7UUFIQUM7ZUFBQUE7O1FBSkFDO2VBQUFBOztRQUNBQztlQUFBQTs7UUFGQUM7ZUFBQUE7O1FBSUFDO2VBQUFBOztRQUVBQztlQUFBQTs7UUFQQUM7ZUFBQUE7O1FBSUFDO2VBQUFBOzs7QUFKTixNQUFNRCxJQUFJO0FBQ1YsTUFBTUgsT0FBTztBQUNiLE1BQU1GLFVBQVU7QUFDaEIsTUFBTUMsWUFBWTtBQUNsQixNQUFNSyxZQUFZO0FBQ2xCLE1BQU1ILGNBQWM7QUFDcEIsTUFBTUosZUFBZTtBQUNyQixNQUFNSyxnQkFBZ0I7QUFDdEIsTUFBTVIsbUJBQW1CO0FBQ3pCLE1BQU1FLHVCQUF1QjtBQUM3QixNQUFNRCw0QkFBNEIifQ==
@@ -61,6 +61,9 @@ class BoundedContext extends _context.default {
61
61
  ];
62
62
  return factOrSubproofs;
63
63
  }
64
+ setEquivalences(equivalences) {
65
+ this.equivalences = equivalences;
66
+ }
64
67
  getFacts() {
65
68
  const factOrSubproofs = this.getFactOrSubproofs(), facts = factOrSubproofs.filter((factOrSubproof)=>{
66
69
  const factOrSubproofFact = factOrSubproof.isFact();
@@ -97,18 +100,6 @@ class BoundedContext extends _context.default {
97
100
  }
98
101
  return metaLevel;
99
102
  }
100
- addEquality(equality) {
101
- const context = this, equalityString = equality.getString();
102
- context.trace(`Adding the '${equalityString}' equality to the bounded context...`);
103
- const equalityRelfexive = equality.isReflexive();
104
- if (!equalityRelfexive) {
105
- const equivalences = (0, _equivalences.equivalencesFromEquality)(equality, context);
106
- this.equivalences = (0, _equivalences.mergeEquivalences)(this.equivalences, equivalences, context);
107
- context.debug(`...added the '${equalityString}' equality to the bounded context.`);
108
- } else {
109
- context.debug(`The reflexive '${equalityString}' equality has not been added to the bounded context.`);
110
- }
111
- }
112
103
  addAssignment(assignment) {
113
104
  this.assignments.push(assignment);
114
105
  }
@@ -208,4 +199,4 @@ class BoundedContext extends _context.default {
208
199
  }
209
200
  const _default = BoundedContext;
210
201
 
211
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb250ZXh0L2JvdW5kZWQuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IGFycmF5VXRpbGl0aWVzIH0gZnJvbSBcIm5lY2Vzc2FyeVwiO1xuXG5pbXBvcnQgQ29udGV4dCBmcm9tIFwiLi4vY29udGV4dFwiO1xuXG5pbXBvcnQgeyBtZXJnZUVxdWl2YWxlbmNlcywgZXF1aXZhbGVuY2VzRnJvbUVxdWFsaXR5LCBzZXBhcmF0ZUdyb3VuZGVkVGVybXNBbmREZWZpbmVkVmFyaWFibGVzIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9lcXVpdmFsZW5jZXNcIjtcblxuY29uc3QgeyBsYXN0LCBjbGVhciB9ID0gYXJyYXlVdGlsaXRpZXM7XG5cbmNsYXNzIEJvdW5kZWRDb250ZXh0IGV4dGVuZHMgQ29udGV4dCB7XG4gIGNvbnN0cnVjdG9yKGNvbnRleHQsIGNvbnN0cmFpbnRzLCBhc3NpZ25tZW50cywgZXF1aXZhbGVuY2VzLCBkZWNsYXJlZFZhcmlhYmxlcywgZmFjdE9yU3VicHJvb2ZzKSB7XG4gICAgc3VwZXIoY29udGV4dCk7XG5cbiAgICB0aGlzLmNvbnN0cmFpbnRzID0gY29uc3RyYWludHM7XG4gICAgdGhpcy5hc3NpZ25tZW50cyA9IGFzc2lnbm1lbnRzO1xuICAgIHRoaXMuZXF1aXZhbGVuY2VzID0gZXF1aXZhbGVuY2VzO1xuICAgIHRoaXMuZGVjbGFyZWRWYXJpYWJsZXMgPSBkZWNsYXJlZFZhcmlhYmxlcztcbiAgICB0aGlzLmZhY3RPclN1YnByb29mcyA9IGZhY3RPclN1YnByb29mcztcbiAgfVxuXG4gIGdldENvbnN0cmFpbnRzKCkge1xuICAgIHJldHVybiB0aGlzLmNvbnN0cmFpbnRzO1xuICB9XG5cbiAgZ2V0QXNzaWdubWVudHMoKSB7XG4gICAgcmV0dXJuIHRoaXMuYXNzaWdubWVudHM7XG4gIH1cblxuICBnZXRFcXVpdmFsZW5jZXMoKSB7XG4gICAgbGV0IGVxdWl2YWxlbmNlcztcblxuICAgIGxldCBjb250ZXh0O1xuXG4gICAgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpO1xuXG4gICAgZXF1aXZhbGVuY2VzID0gY29udGV4dC5nZXRFcXVpdmFsZW5jZXMoKTtcblxuICAgIGNvbnRleHQgPSB0aGlzOyAvLy9cblxuICAgIGVxdWl2YWxlbmNlcyA9IG1lcmdlRXF1aXZhbGVuY2VzKHRoaXMuZXF1aXZhbGVuY2VzLCBlcXVpdmFsZW5jZXMsIGNvbnRleHQpOyAgLy8vXG5cbiAgICByZXR1cm4gZXF1aXZhbGVuY2VzO1xuICB9XG5cbiAgZ2V0RGVjbGFyZWRWYXJpYWJsZXMoKSB7XG4gICAgbGV0IGRlY2xhcmVkVmFyaWFibGVzO1xuXG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpO1xuXG4gICAgZGVjbGFyZWRWYXJpYWJsZXMgPSBjb250ZXh0LmdldERlY2xhcmVkVmFyaWFibGVzKCk7XG5cbiAgICBkZWNsYXJlZFZhcmlhYmxlcyA9IFtcbiAgICAgIC4uLnRoaXMuZGVjbGFyZWRWYXJpYWJsZXMsXG4gICAgICAuLi5kZWNsYXJlZFZhcmlhYmxlc1xuICAgIF07XG5cbiAgICByZXR1cm4gZGVjbGFyZWRWYXJpYWJsZXM7XG4gIH1cblxuICBnZXRGYWN0T3JTdWJwcm9vZnMoKSB7XG4gICAgbGV0IGZhY3RPclN1YnByb29mcztcblxuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKTtcblxuICAgIGZhY3RPclN1YnByb29mcyA9IGNvbnRleHQuZ2V0RmFjdE9yU3VicHJvb2ZzKCk7XG5cbiAgICBmYWN0T3JTdWJwcm9vZnMgPSBbICAvLy9cbiAgICAgIC4uLmZhY3RPclN1YnByb29mcyxcbiAgICAgIC4uLnRoaXMuZmFjdE9yU3VicHJvb2ZzXG4gICAgXTtcblxuICAgIHJldHVybiBmYWN0T3JTdWJwcm9vZnM7XG4gIH1cblxuICBnZXRGYWN0cygpIHtcbiAgICBjb25zdCBmYWN0T3JTdWJwcm9vZnMgPSB0aGlzLmdldEZhY3RPclN1YnByb29mcygpLFxuICAgICAgICAgIGZhY3RzID0gZmFjdE9yU3VicHJvb2ZzLmZpbHRlcigoZmFjdE9yU3VicHJvb2YpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGZhY3RPclN1YnByb29mRmFjdCA9IGZhY3RPclN1YnByb29mLmlzRmFjdCgpO1xuXG4gICAgICAgICAgICBpZiAoZmFjdE9yU3VicHJvb2ZGYWN0KSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuXG4gICAgcmV0dXJuIGZhY3RzO1xuICB9XG5cbiAgZ2V0U3RlcHMoKSB7XG4gICAgY29uc3QgZmFjdHMgPSB0aGlzLmdldEZhY3RzKCksXG4gICAgICAgICAgc3RlcHMgPSBmYWN0cy5maWx0ZXIoKGZhY3QpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGZhY3RTdGVwID0gZmFjdC5pc1N0ZXAoKTtcblxuICAgICAgICAgICAgaWYgKGZhY3RTdGVwKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuXG4gICAgcmV0dXJuIHN0ZXBzO1xuICB9XG5cbiAgZ2V0TGFzdFN0ZXAoKSB7XG4gICAgbGV0IGxhc3RTdGVwID0gbnVsbDtcblxuICAgIGNvbnN0IHN0ZXBzID0gdGhpcy5nZXRTdGVwcygpLFxuICAgICAgICAgIHN0ZXBzTGVuZ3RoID0gc3RlcHMubGVuZ3RoO1xuXG4gICAgaWYgKHN0ZXBzTGVuZ3RoID4gMCkge1xuICAgICAgbGFzdFN0ZXAgPSBsYXN0KHN0ZXBzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbGFzdFN0ZXA7XG4gIH1cblxuICBpc01ldGFMZXZlbCgpIHtcbiAgICBsZXQgbWV0YUxldmVsO1xuXG4gICAgaWYgKHRoaXMuY29uc3RyYWludHMgIT09IG51bGwpIHtcbiAgICAgIG1ldGFMZXZlbCA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKTtcblxuICAgICAgbWV0YUxldmVsID0gY29udGV4dC5pc01ldGFMZXZlbCgpO1xuICAgIH1cblxuICAgIHJldHVybiBtZXRhTGV2ZWw7XG4gIH1cblxuICBhZGRFcXVhbGl0eShlcXVhbGl0eSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLCAvLy9cbiAgICAgICAgICBlcXVhbGl0eVN0cmluZyA9IGVxdWFsaXR5LmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgQWRkaW5nIHRoZSAnJHtlcXVhbGl0eVN0cmluZ30nIGVxdWFsaXR5IHRvIHRoZSBib3VuZGVkIGNvbnRleHQuLi5gKTtcblxuICAgIGNvbnN0IGVxdWFsaXR5UmVsZmV4aXZlID0gZXF1YWxpdHkuaXNSZWZsZXhpdmUoKTtcblxuICAgIGlmICghZXF1YWxpdHlSZWxmZXhpdmUpIHtcbiAgICAgIGNvbnN0IGVxdWl2YWxlbmNlcyA9IGVxdWl2YWxlbmNlc0Zyb21FcXVhbGl0eShlcXVhbGl0eSwgY29udGV4dCk7XG5cbiAgICAgIHRoaXMuZXF1aXZhbGVuY2VzID0gbWVyZ2VFcXVpdmFsZW5jZXModGhpcy5lcXVpdmFsZW5jZXMsIGVxdWl2YWxlbmNlcywgY29udGV4dCk7XG5cbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLmFkZGVkIHRoZSAnJHtlcXVhbGl0eVN0cmluZ30nIGVxdWFsaXR5IHRvIHRoZSBib3VuZGVkIGNvbnRleHQuYCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYFRoZSByZWZsZXhpdmUgJyR7ZXF1YWxpdHlTdHJpbmd9JyBlcXVhbGl0eSBoYXMgbm90IGJlZW4gYWRkZWQgdG8gdGhlIGJvdW5kZWQgY29udGV4dC5gKTtcbiAgICB9XG4gIH1cblxuICBhZGRBc3NpZ25tZW50KGFzc2lnbm1lbnQpIHtcbiAgICB0aGlzLmFzc2lnbm1lbnRzLnB1c2goYXNzaWdubWVudCk7XG4gIH1cblxuICBhc3NpZ25Bc3NpZ25tZW50cygpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpczsgLy8vXG5cbiAgICB0aGlzLmFzc2lnbm1lbnRzLmZvckVhY2goKGFzc2lnbm1lbnQpID0+IHtcbiAgICAgIGFzc2lnbm1lbnQoY29udGV4dCk7XG4gICAgfSk7XG5cbiAgICBjbGVhcih0aGlzLmFzc2lnbm1lbnRzKTtcbiAgfVxuXG4gIGFkZERlY2xhcmVkVmFyaWFibGUoZGVjbGFyZWRWYXJpYWJsZSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLCAvLy9cbiAgICAgICAgICBkZWNsYXJlZFZhcmlhYmxlU3RyaW5nID0gZGVjbGFyZWRWYXJpYWJsZS5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYEFkZGluZyB0aGUgJyR7ZGVjbGFyZWRWYXJpYWJsZVN0cmluZ30nIGRlY2xhcmVkIHZhcmlhYmxlIHRvIHRoZSBib3VuZGVkIGNvbnRleHQuLi5gKTtcblxuICAgIHRoaXMuZGVjbGFyZWRWYXJpYWJsZXMucHVzaChkZWNsYXJlZFZhcmlhYmxlKTtcblxuICAgIGNvbnRleHQuZGVidWcoYC4uLmFkZGVkIHRoZSAnJHtkZWNsYXJlZFZhcmlhYmxlU3RyaW5nfScgZGVjbGFyZWQgdmFyaWFibGUgdG8gdGhlIGJvdW5kZWQgY29udGV4dC5gKTtcbiAgfVxuXG4gIGFkZENvbnN0cmFpbnQoY29uc3RyYWludCkge1xuICAgIGlmICh0aGlzLmNvbnN0cmFpbnRzID09PSBudWxsKSB7XG4gICAgICBzdXBlci5hZGRDb25zdHJhaW50KGNvbnN0cmFpbnQpO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMsIC8vL1xuICAgICAgICAgIGNvbnN0cmFpbnRBID0gY29uc3RyYWludCwgLy8vXG4gICAgICAgICAgY29uc3RyYWludFN0cmluZyA9IGNvbnN0cmFpbnQuZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBBZGRpbmcgdGhlICcke2NvbnN0cmFpbnRTdHJpbmd9JyBjb25zdHJhaW50IHRvIHRoZSBib3VuZGVkIGNvbnRleHQuLi5gKTtcblxuICAgIGNvbnN0IGNvbnN0cmFpbnRCID0gdGhpcy5jb25zdHJhaW50cy5maW5kKChjb25zdHJhaW50KSA9PiB7XG4gICAgICBjb25zdCBjb25zdHJhaW50QiA9IGNvbnN0cmFpbnQsIC8vL1xuICAgICAgICAgICAgY29uc3RyYWludEFFcXVhbFRvQXNzdW1wdGlvbkIgPSBjb25zdHJhaW50QS5pc0VxdWFsVG8oY29uc3RyYWludEIpO1xuXG4gICAgICBpZiAoY29uc3RyYWludEFFcXVhbFRvQXNzdW1wdGlvbkIpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSkgfHwgbnVsbDtcblxuICAgIGlmIChjb25zdHJhaW50QiAhPT0gbnVsbCkge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgVGhlICcke2NvbnN0cmFpbnRTdHJpbmd9JyBjb25zdHJhaW50IGhhcyBhbHJlYWR5IGJlZW4gYWRkZWQgdG8gdGhlIGJvdW5kZWQgY29udGV4dC5gKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jb25zdHJhaW50cy5wdXNoKGNvbnN0cmFpbnQpO1xuICAgIH1cblxuICAgIGNvbnRleHQuZGVidWcoYC4uLmFkZGVkIHRoZSAnJHtjb25zdHJhaW50U3RyaW5nfScgY29uc3RyYWludCB0byB0aGUgYm91bmRlZCBjb250ZXh0LmApO1xuICB9XG5cbiAgYWRkR2VuZXJhdG9yKGdlbmVyYXRvcikge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKTtcblxuICAgIGNvbnRleHQuYWRkR2VuZXJhdG9yKGdlbmVyYXRvcik7XG4gIH1cblxuICBhZGRDb25zdHJ1Y3Rvcihjb25zdHJ1Y3Rvcikge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKTtcblxuICAgIGNvbnRleHQuYWRkQ29uc3RydWN0b3IoY29uc3RydWN0b3IpO1xuICB9XG5cbiAgYWRkRmFjdE9yU3VicHJvb2YoZmFjdE9yU3VicHJvb2YpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcywgLy8vXG4gICAgICAgICAgZmFjdE9yU3VicHJvb2ZTdHJpbmcgPSBmYWN0T3JTdWJwcm9vZi5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYEFkZGluZyB0aGUgJyR7ZmFjdE9yU3VicHJvb2ZTdHJpbmd9JyBmYWN0IG9yIHN1YnByb29mIHRvIHRoZSBib3VuZGVkIGNvbnRleHQuLi5gKTtcblxuICAgIHRoaXMuZmFjdE9yU3VicHJvb2ZzLnB1c2goZmFjdE9yU3VicHJvb2YpO1xuXG4gICAgY29udGV4dC5kZWJ1ZyhgLi4uYWRkZWQgdGhlICcke2ZhY3RPclN1YnByb29mU3RyaW5nfScgZmFjdCBvciBzdWJwcm9vZiB0byB0aGUgYm91bmRlZCBjb250ZXh0LmApO1xuICB9XG5cbiAgZmluZERlY2xhcmVkVmFyaWFibGVCeVZhcmlhYmxlSWRlbnRpZmllcih2YXJpYWJsZUlkZW50aWZpZXIpIHtcbiAgICBjb25zdCBkZWNsYXJlZFZhcmlhYmxlcyA9IHRoaXMuZ2V0RGVjbGFyZWRWYXJpYWJsZXMoKSxcbiAgICAgICAgICBkZWNsYXJlZFZhcmlhYmxlID0gZGVjbGFyZWRWYXJpYWJsZXMuZmluZCgoZGVjbGFyZWRWYXJpYWJsZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgdmFyaWFibGVDb21wYXJlc1RvVmFyaWFibGVJZGVudGlmaWVyID0gZGVjbGFyZWRWYXJpYWJsZS5jb21wYXJlVmFyaWFibGVJZGVudGlmaWVyKHZhcmlhYmxlSWRlbnRpZmllcik7XG5cbiAgICAgICAgICAgIGlmICh2YXJpYWJsZUNvbXBhcmVzVG9WYXJpYWJsZUlkZW50aWZpZXIpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSkgfHwgbnVsbDtcblxuICAgIHJldHVybiBkZWNsYXJlZFZhcmlhYmxlO1xuICB9XG5cbiAgZmluZENvbnN0cmFpbnRCeUNvbnN0cmFpbnROb2RlKGNvbnN0cmFpbnROb2RlKSB7XG4gICAgbGV0IGNvbnN0cmFpbnQ7XG5cbiAgICBpZiAodGhpcy5jb25zdHJhaW50cyA9PT0gbnVsbCkge1xuICAgICAgY29uc3RyYWludCA9IHN1cGVyLmZpbmRDb25zdHJhaW50QnlDb25zdHJhaW50Tm9kZShjb25zdHJhaW50Tm9kZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0cmFpbnQgPSB0aGlzLmNvbnN0cmFpbnRzLmZpbmQoKGNvbnN0cmFpbnQpID0+IHtcbiAgICAgICAgY29uc3QgY29uc3RyYWludE5vZGVNYXRjaGVzID0gY29uc3RyYWludC5tYXRjaENvbnN0cmFpbnROb2RlKGNvbnN0cmFpbnROb2RlKTtcblxuICAgICAgICBpZiAoY29uc3RyYWludE5vZGVNYXRjaGVzKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH0pIHx8IG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbnN0cmFpbnQ7XG4gIH1cblxuICBpc0RlY2xhcmVkVmFyaWFibGVQcmVzZW50QnlWYXJpYWJsZUlkZW50aWZpZXIodmFyaWFibGVJZGVudGlmaWVyKSB7XG4gICAgY29uc3QgZGVjbGFyZWRWYXJpYWJsZSA9IHRoaXMuZmluZERlY2xhcmVkVmFyaWFibGVCeVZhcmlhYmxlSWRlbnRpZmllcih2YXJpYWJsZUlkZW50aWZpZXIpLFxuICAgICAgICAgIGRlY2xhcmVkVmFyaWFibGVQcmVzZW50ID0gKGRlY2xhcmVkVmFyaWFibGUgIT09IG51bGwpO1xuXG4gICAgcmV0dXJuIGRlY2xhcmVkVmFyaWFibGVQcmVzZW50O1xuICB9XG5cbiAgaXNUZXJtR3JvdW5kZWQodGVybSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLCAvLy9cbiAgICAgICAgICBlcXVpdmFsZW5jZXMgPSB0aGlzLmdldEVxdWl2YWxlbmNlcygpLFxuICAgICAgICAgIGdyb3VuZGVkVGVybXMgPSBbXSxcbiAgICAgICAgICBkZWZpbmVkVmFyaWFibGVzID0gW107XG5cbiAgICBzZXBhcmF0ZUdyb3VuZGVkVGVybXNBbmREZWZpbmVkVmFyaWFibGVzKGVxdWl2YWxlbmNlcywgZ3JvdW5kZWRUZXJtcywgZGVmaW5lZFZhcmlhYmxlcywgY29udGV4dCk7XG5cbiAgICBjb25zdCB0ZXJtTWF0Y2hlc0dyb3VuZGVkVGVybSA9IGdyb3VuZGVkVGVybXMuc29tZSgoZ3JvdW5kZWRUZXJtKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBncm91bmRlZFRlcm1Ob2RlID0gZ3JvdW5kZWRUZXJtLmdldE5vZGUoKSxcbiAgICAgICAgICAgICAgICAgIGdyb3VuZGVkVGVybU5vZGVNYXRjaGVzID0gdGVybS5tYXRjaFRlcm1Ob2RlKGdyb3VuZGVkVGVybU5vZGUpO1xuXG4gICAgICAgICAgICBpZiAoZ3JvdW5kZWRUZXJtTm9kZU1hdGNoZXMpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSksXG4gICAgICAgICAgdGVybUdyb3VuZGVkID0gdGVybU1hdGNoZXNHcm91bmRlZFRlcm07IC8vL1xuXG4gICAgcmV0dXJuIHRlcm1Hcm91bmRlZDtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tTm90aGluZyhjb250ZXh0KSB7XG4gICAgY29uc3QgYXNzaWdubWVudHMgPSBbXSxcbiAgICAgICAgICBlcXVpdmFsZW5jZXMgPSBbXSxcbiAgICAgICAgICBkZWNsYXJlZFZhcmlhYmxlcyA9IFtdLFxuICAgICAgICAgIGNvbnN0cmFpbnRzID0gbnVsbCxcbiAgICAgICAgICBmYWN0T3JTdWJwcm9vZnMgPSBbXSxcbiAgICAgICAgICBib3VuZGVkQ29udGV4dCA9IG5ldyBCb3VuZGVkQ29udGV4dChjb250ZXh0LCBjb25zdHJhaW50cywgYXNzaWdubWVudHMsIGVxdWl2YWxlbmNlcywgZGVjbGFyZWRWYXJpYWJsZXMsIGZhY3RPclN1YnByb29mcyk7XG5cbiAgICByZXR1cm4gYm91bmRlZENvbnRleHQ7XG4gIH1cblxuICBzdGF0aWMgZnJvbUNvbnN0cmFpbnRzKGNvbnN0cmFpbnRzLCBjb250ZXh0KSB7XG4gICAgY29uc3QgYXNzaWdubWVudHMgPSBbXSxcbiAgICAgICAgICBlcXVpdmFsZW5jZXMgPSBbXSxcbiAgICAgICAgICBkZWNsYXJlZFZhcmlhYmxlcyA9IFtdLFxuICAgICAgICAgIGZhY3RPclN1YnByb29mcyA9IFtdLFxuICAgICAgICAgIGJvdW5kZWRDb250ZXh0ID0gbmV3IEJvdW5kZWRDb250ZXh0KGNvbnRleHQsIGNvbnN0cmFpbnRzLCBhc3NpZ25tZW50cywgZXF1aXZhbGVuY2VzLCBkZWNsYXJlZFZhcmlhYmxlcywgZmFjdE9yU3VicHJvb2ZzKTtcblxuICAgIHJldHVybiBib3VuZGVkQ29udGV4dDtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBCb3VuZGVkQ29udGV4dDsiXSwibmFtZXMiOlsibGFzdCIsImNsZWFyIiwiYXJyYXlVdGlsaXRpZXMiLCJCb3VuZGVkQ29udGV4dCIsIkNvbnRleHQiLCJjb250ZXh0IiwiY29uc3RyYWludHMiLCJhc3NpZ25tZW50cyIsImVxdWl2YWxlbmNlcyIsImRlY2xhcmVkVmFyaWFibGVzIiwiZmFjdE9yU3VicHJvb2ZzIiwiZ2V0Q29uc3RyYWludHMiLCJnZXRBc3NpZ25tZW50cyIsImdldEVxdWl2YWxlbmNlcyIsImdldENvbnRleHQiLCJtZXJnZUVxdWl2YWxlbmNlcyIsImdldERlY2xhcmVkVmFyaWFibGVzIiwiZ2V0RmFjdE9yU3VicHJvb2ZzIiwiZ2V0RmFjdHMiLCJmYWN0cyIsImZpbHRlciIsImZhY3RPclN1YnByb29mIiwiZmFjdE9yU3VicHJvb2ZGYWN0IiwiaXNGYWN0IiwiZ2V0U3RlcHMiLCJzdGVwcyIsImZhY3QiLCJmYWN0U3RlcCIsImlzU3RlcCIsImdldExhc3RTdGVwIiwibGFzdFN0ZXAiLCJzdGVwc0xlbmd0aCIsImxlbmd0aCIsImlzTWV0YUxldmVsIiwibWV0YUxldmVsIiwiYWRkRXF1YWxpdHkiLCJlcXVhbGl0eSIsImVxdWFsaXR5U3RyaW5nIiwiZ2V0U3RyaW5nIiwidHJhY2UiLCJlcXVhbGl0eVJlbGZleGl2ZSIsImlzUmVmbGV4aXZlIiwiZXF1aXZhbGVuY2VzRnJvbUVxdWFsaXR5IiwiZGVidWciLCJhZGRBc3NpZ25tZW50IiwiYXNzaWdubWVudCIsInB1c2giLCJhc3NpZ25Bc3NpZ25tZW50cyIsImZvckVhY2giLCJhZGREZWNsYXJlZFZhcmlhYmxlIiwiZGVjbGFyZWRWYXJpYWJsZSIsImRlY2xhcmVkVmFyaWFibGVTdHJpbmciLCJhZGRDb25zdHJhaW50IiwiY29uc3RyYWludCIsImNvbnN0cmFpbnRBIiwiY29uc3RyYWludFN0cmluZyIsImNvbnN0cmFpbnRCIiwiZmluZCIsImNvbnN0cmFpbnRBRXF1YWxUb0Fzc3VtcHRpb25CIiwiaXNFcXVhbFRvIiwiYWRkR2VuZXJhdG9yIiwiZ2VuZXJhdG9yIiwiYWRkQ29uc3RydWN0b3IiLCJjb25zdHJ1Y3RvciIsImFkZEZhY3RPclN1YnByb29mIiwiZmFjdE9yU3VicHJvb2ZTdHJpbmciLCJmaW5kRGVjbGFyZWRWYXJpYWJsZUJ5VmFyaWFibGVJZGVudGlmaWVyIiwidmFyaWFibGVJZGVudGlmaWVyIiwidmFyaWFibGVDb21wYXJlc1RvVmFyaWFibGVJZGVudGlmaWVyIiwiY29tcGFyZVZhcmlhYmxlSWRlbnRpZmllciIsImZpbmRDb25zdHJhaW50QnlDb25zdHJhaW50Tm9kZSIsImNvbnN0cmFpbnROb2RlIiwiY29uc3RyYWludE5vZGVNYXRjaGVzIiwibWF0Y2hDb25zdHJhaW50Tm9kZSIsImlzRGVjbGFyZWRWYXJpYWJsZVByZXNlbnRCeVZhcmlhYmxlSWRlbnRpZmllciIsImRlY2xhcmVkVmFyaWFibGVQcmVzZW50IiwiaXNUZXJtR3JvdW5kZWQiLCJ0ZXJtIiwiZ3JvdW5kZWRUZXJtcyIsImRlZmluZWRWYXJpYWJsZXMiLCJzZXBhcmF0ZUdyb3VuZGVkVGVybXNBbmREZWZpbmVkVmFyaWFibGVzIiwidGVybU1hdGNoZXNHcm91bmRlZFRlcm0iLCJzb21lIiwiZ3JvdW5kZWRUZXJtIiwiZ3JvdW5kZWRUZXJtTm9kZSIsImdldE5vZGUiLCJncm91bmRlZFRlcm1Ob2RlTWF0Y2hlcyIsIm1hdGNoVGVybU5vZGUiLCJ0ZXJtR3JvdW5kZWQiLCJmcm9tTm90aGluZyIsImJvdW5kZWRDb250ZXh0IiwiZnJvbUNvbnN0cmFpbnRzIl0sIm1hcHBpbmdzIjoiQUFBQTs7OzsrQkFtVEE7OztlQUFBOzs7MkJBalQrQjtnRUFFWDs4QkFFa0Y7Ozs7OztBQUV0RyxNQUFNLEVBQUVBLElBQUksRUFBRUMsS0FBSyxFQUFFLEdBQUdDLHlCQUFjO0FBRXRDLE1BQU1DLHVCQUF1QkMsZ0JBQU87SUFDbEMsWUFBWUMsT0FBTyxFQUFFQyxXQUFXLEVBQUVDLFdBQVcsRUFBRUMsWUFBWSxFQUFFQyxpQkFBaUIsRUFBRUMsZUFBZSxDQUFFO1FBQy9GLEtBQUssQ0FBQ0w7UUFFTixJQUFJLENBQUNDLFdBQVcsR0FBR0E7UUFDbkIsSUFBSSxDQUFDQyxXQUFXLEdBQUdBO1FBQ25CLElBQUksQ0FBQ0MsWUFBWSxHQUFHQTtRQUNwQixJQUFJLENBQUNDLGlCQUFpQixHQUFHQTtRQUN6QixJQUFJLENBQUNDLGVBQWUsR0FBR0E7SUFDekI7SUFFQUMsaUJBQWlCO1FBQ2YsT0FBTyxJQUFJLENBQUNMLFdBQVc7SUFDekI7SUFFQU0saUJBQWlCO1FBQ2YsT0FBTyxJQUFJLENBQUNMLFdBQVc7SUFDekI7SUFFQU0sa0JBQWtCO1FBQ2hCLElBQUlMO1FBRUosSUFBSUg7UUFFSkEsVUFBVSxJQUFJLENBQUNTLFVBQVU7UUFFekJOLGVBQWVILFFBQVFRLGVBQWU7UUFFdENSLFVBQVUsSUFBSSxFQUFFLEdBQUc7UUFFbkJHLGVBQWVPLElBQUFBLCtCQUFpQixFQUFDLElBQUksQ0FBQ1AsWUFBWSxFQUFFQSxjQUFjSCxVQUFXLEdBQUc7UUFFaEYsT0FBT0c7SUFDVDtJQUVBUSx1QkFBdUI7UUFDckIsSUFBSVA7UUFFSixNQUFNSixVQUFVLElBQUksQ0FBQ1MsVUFBVTtRQUUvQkwsb0JBQW9CSixRQUFRVyxvQkFBb0I7UUFFaERQLG9CQUFvQjtlQUNmLElBQUksQ0FBQ0EsaUJBQWlCO2VBQ3RCQTtTQUNKO1FBRUQs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
202
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb250ZXh0L2JvdW5kZWQuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IGFycmF5VXRpbGl0aWVzIH0gZnJvbSBcIm5lY2Vzc2FyeVwiO1xuXG5pbXBvcnQgQ29udGV4dCBmcm9tIFwiLi4vY29udGV4dFwiO1xuXG5pbXBvcnQgeyBtZXJnZUVxdWl2YWxlbmNlcywgc2VwYXJhdGVHcm91bmRlZFRlcm1zQW5kRGVmaW5lZFZhcmlhYmxlcyB9IGZyb20gXCIuLi91dGlsaXRpZXMvZXF1aXZhbGVuY2VzXCI7XG5cbmNvbnN0IHsgbGFzdCwgY2xlYXIgfSA9IGFycmF5VXRpbGl0aWVzO1xuXG5jbGFzcyBCb3VuZGVkQ29udGV4dCBleHRlbmRzIENvbnRleHQge1xuICBjb25zdHJ1Y3Rvcihjb250ZXh0LCBjb25zdHJhaW50cywgYXNzaWdubWVudHMsIGVxdWl2YWxlbmNlcywgZGVjbGFyZWRWYXJpYWJsZXMsIGZhY3RPclN1YnByb29mcykge1xuICAgIHN1cGVyKGNvbnRleHQpO1xuXG4gICAgdGhpcy5jb25zdHJhaW50cyA9IGNvbnN0cmFpbnRzO1xuICAgIHRoaXMuYXNzaWdubWVudHMgPSBhc3NpZ25tZW50cztcbiAgICB0aGlzLmVxdWl2YWxlbmNlcyA9IGVxdWl2YWxlbmNlcztcbiAgICB0aGlzLmRlY2xhcmVkVmFyaWFibGVzID0gZGVjbGFyZWRWYXJpYWJsZXM7XG4gICAgdGhpcy5mYWN0T3JTdWJwcm9vZnMgPSBmYWN0T3JTdWJwcm9vZnM7XG4gIH1cblxuICBnZXRDb25zdHJhaW50cygpIHtcbiAgICByZXR1cm4gdGhpcy5jb25zdHJhaW50cztcbiAgfVxuXG4gIGdldEFzc2lnbm1lbnRzKCkge1xuICAgIHJldHVybiB0aGlzLmFzc2lnbm1lbnRzO1xuICB9XG5cbiAgZ2V0RXF1aXZhbGVuY2VzKCkge1xuICAgIGxldCBlcXVpdmFsZW5jZXM7XG5cbiAgICBsZXQgY29udGV4dDtcblxuICAgIGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKTtcblxuICAgIGVxdWl2YWxlbmNlcyA9IGNvbnRleHQuZ2V0RXF1aXZhbGVuY2VzKCk7XG5cbiAgICBjb250ZXh0ID0gdGhpczsgLy8vXG5cbiAgICBlcXVpdmFsZW5jZXMgPSBtZXJnZUVxdWl2YWxlbmNlcyh0aGlzLmVxdWl2YWxlbmNlcywgZXF1aXZhbGVuY2VzLCBjb250ZXh0KTsgIC8vL1xuXG4gICAgcmV0dXJuIGVxdWl2YWxlbmNlcztcbiAgfVxuXG4gIGdldERlY2xhcmVkVmFyaWFibGVzKCkge1xuICAgIGxldCBkZWNsYXJlZFZhcmlhYmxlcztcblxuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKTtcblxuICAgIGRlY2xhcmVkVmFyaWFibGVzID0gY29udGV4dC5nZXREZWNsYXJlZFZhcmlhYmxlcygpO1xuXG4gICAgZGVjbGFyZWRWYXJpYWJsZXMgPSBbXG4gICAgICAuLi50aGlzLmRlY2xhcmVkVmFyaWFibGVzLFxuICAgICAgLi4uZGVjbGFyZWRWYXJpYWJsZXNcbiAgICBdO1xuXG4gICAgcmV0dXJuIGRlY2xhcmVkVmFyaWFibGVzO1xuICB9XG5cbiAgZ2V0RmFjdE9yU3VicHJvb2ZzKCkge1xuICAgIGxldCBmYWN0T3JTdWJwcm9vZnM7XG5cbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCk7XG5cbiAgICBmYWN0T3JTdWJwcm9vZnMgPSBjb250ZXh0LmdldEZhY3RPclN1YnByb29mcygpO1xuXG4gICAgZmFjdE9yU3VicHJvb2ZzID0gWyAgLy8vXG4gICAgICAuLi5mYWN0T3JTdWJwcm9vZnMsXG4gICAgICAuLi50aGlzLmZhY3RPclN1YnByb29mc1xuICAgIF07XG5cbiAgICByZXR1cm4gZmFjdE9yU3VicHJvb2ZzO1xuICB9XG5cbiAgc2V0RXF1aXZhbGVuY2VzKGVxdWl2YWxlbmNlcykge1xuICAgIHRoaXMuZXF1aXZhbGVuY2VzID0gZXF1aXZhbGVuY2VzO1xuICB9XG5cbiAgZ2V0RmFjdHMoKSB7XG4gICAgY29uc3QgZmFjdE9yU3VicHJvb2ZzID0gdGhpcy5nZXRGYWN0T3JTdWJwcm9vZnMoKSxcbiAgICAgICAgICBmYWN0cyA9IGZhY3RPclN1YnByb29mcy5maWx0ZXIoKGZhY3RPclN1YnByb29mKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBmYWN0T3JTdWJwcm9vZkZhY3QgPSBmYWN0T3JTdWJwcm9vZi5pc0ZhY3QoKTtcblxuICAgICAgICAgICAgaWYgKGZhY3RPclN1YnByb29mRmFjdCkge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcblxuICAgIHJldHVybiBmYWN0cztcbiAgfVxuXG4gIGdldFN0ZXBzKCkge1xuICAgIGNvbnN0IGZhY3RzID0gdGhpcy5nZXRGYWN0cygpLFxuICAgICAgICAgIHN0ZXBzID0gZmFjdHMuZmlsdGVyKChmYWN0KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBmYWN0U3RlcCA9IGZhY3QuaXNTdGVwKCk7XG5cbiAgICAgICAgICAgIGlmIChmYWN0U3RlcCkge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcblxuICAgIHJldHVybiBzdGVwcztcbiAgfVxuXG4gIGdldExhc3RTdGVwKCkge1xuICAgIGxldCBsYXN0U3RlcCA9IG51bGw7XG5cbiAgICBjb25zdCBzdGVwcyA9IHRoaXMuZ2V0U3RlcHMoKSxcbiAgICAgICAgICBzdGVwc0xlbmd0aCA9IHN0ZXBzLmxlbmd0aDtcblxuICAgIGlmIChzdGVwc0xlbmd0aCA+IDApIHtcbiAgICAgIGxhc3RTdGVwID0gbGFzdChzdGVwcyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGxhc3RTdGVwO1xuICB9XG5cbiAgaXNNZXRhTGV2ZWwoKSB7XG4gICAgbGV0IG1ldGFMZXZlbDtcblxuICAgIGlmICh0aGlzLmNvbnN0cmFpbnRzICE9PSBudWxsKSB7XG4gICAgICBtZXRhTGV2ZWwgPSB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCk7XG5cbiAgICAgIG1ldGFMZXZlbCA9IGNvbnRleHQuaXNNZXRhTGV2ZWwoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbWV0YUxldmVsO1xuICB9XG5cbiAgYWRkQXNzaWdubWVudChhc3NpZ25tZW50KSB7XG4gICAgdGhpcy5hc3NpZ25tZW50cy5wdXNoKGFzc2lnbm1lbnQpO1xuICB9XG5cbiAgYXNzaWduQXNzaWdubWVudHMoKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXM7IC8vL1xuXG4gICAgdGhpcy5hc3NpZ25tZW50cy5mb3JFYWNoKChhc3NpZ25tZW50KSA9PiB7XG4gICAgICBhc3NpZ25tZW50KGNvbnRleHQpO1xuICAgIH0pO1xuXG4gICAgY2xlYXIodGhpcy5hc3NpZ25tZW50cyk7XG4gIH1cblxuICBhZGREZWNsYXJlZFZhcmlhYmxlKGRlY2xhcmVkVmFyaWFibGUpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcywgLy8vXG4gICAgICAgICAgZGVjbGFyZWRWYXJpYWJsZVN0cmluZyA9IGRlY2xhcmVkVmFyaWFibGUuZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBBZGRpbmcgdGhlICcke2RlY2xhcmVkVmFyaWFibGVTdHJpbmd9JyBkZWNsYXJlZCB2YXJpYWJsZSB0byB0aGUgYm91bmRlZCBjb250ZXh0Li4uYCk7XG5cbiAgICB0aGlzLmRlY2xhcmVkVmFyaWFibGVzLnB1c2goZGVjbGFyZWRWYXJpYWJsZSk7XG5cbiAgICBjb250ZXh0LmRlYnVnKGAuLi5hZGRlZCB0aGUgJyR7ZGVjbGFyZWRWYXJpYWJsZVN0cmluZ30nIGRlY2xhcmVkIHZhcmlhYmxlIHRvIHRoZSBib3VuZGVkIGNvbnRleHQuYCk7XG4gIH1cblxuICBhZGRDb25zdHJhaW50KGNvbnN0cmFpbnQpIHtcbiAgICBpZiAodGhpcy5jb25zdHJhaW50cyA9PT0gbnVsbCkge1xuICAgICAgc3VwZXIuYWRkQ29uc3RyYWludChjb25zdHJhaW50KTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLCAvLy9cbiAgICAgICAgICBjb25zdHJhaW50QSA9IGNvbnN0cmFpbnQsIC8vL1xuICAgICAgICAgIGNvbnN0cmFpbnRTdHJpbmcgPSBjb25zdHJhaW50LmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgQWRkaW5nIHRoZSAnJHtjb25zdHJhaW50U3RyaW5nfScgY29uc3RyYWludCB0byB0aGUgYm91bmRlZCBjb250ZXh0Li4uYCk7XG5cbiAgICBjb25zdCBjb25zdHJhaW50QiA9IHRoaXMuY29uc3RyYWludHMuZmluZCgoY29uc3RyYWludCkgPT4ge1xuICAgICAgY29uc3QgY29uc3RyYWludEIgPSBjb25zdHJhaW50LCAvLy9cbiAgICAgICAgICAgIGNvbnN0cmFpbnRBRXF1YWxUb0Fzc3VtcHRpb25CID0gY29uc3RyYWludEEuaXNFcXVhbFRvKGNvbnN0cmFpbnRCKTtcblxuICAgICAgaWYgKGNvbnN0cmFpbnRBRXF1YWxUb0Fzc3VtcHRpb25CKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH0pIHx8IG51bGw7XG5cbiAgICBpZiAoY29uc3RyYWludEIgIT09IG51bGwpIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYFRoZSAnJHtjb25zdHJhaW50U3RyaW5nfScgY29uc3RyYWludCBoYXMgYWxyZWFkeSBiZWVuIGFkZGVkIHRvIHRoZSBib3VuZGVkIGNvbnRleHQuYCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY29uc3RyYWludHMucHVzaChjb25zdHJhaW50KTtcbiAgICB9XG5cbiAgICBjb250ZXh0LmRlYnVnKGAuLi5hZGRlZCB0aGUgJyR7Y29uc3RyYWludFN0cmluZ30nIGNvbnN0cmFpbnQgdG8gdGhlIGJvdW5kZWQgY29udGV4dC5gKTtcbiAgfVxuXG4gIGFkZEdlbmVyYXRvcihnZW5lcmF0b3IpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCk7XG5cbiAgICBjb250ZXh0LmFkZEdlbmVyYXRvcihnZW5lcmF0b3IpO1xuICB9XG5cbiAgYWRkQ29uc3RydWN0b3IoY29uc3RydWN0b3IpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCk7XG5cbiAgICBjb250ZXh0LmFkZENvbnN0cnVjdG9yKGNvbnN0cnVjdG9yKTtcbiAgfVxuXG4gIGFkZEZhY3RPclN1YnByb29mKGZhY3RPclN1YnByb29mKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMsIC8vL1xuICAgICAgICAgIGZhY3RPclN1YnByb29mU3RyaW5nID0gZmFjdE9yU3VicHJvb2YuZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBBZGRpbmcgdGhlICcke2ZhY3RPclN1YnByb29mU3RyaW5nfScgZmFjdCBvciBzdWJwcm9vZiB0byB0aGUgYm91bmRlZCBjb250ZXh0Li4uYCk7XG5cbiAgICB0aGlzLmZhY3RPclN1YnByb29mcy5wdXNoKGZhY3RPclN1YnByb29mKTtcblxuICAgIGNvbnRleHQuZGVidWcoYC4uLmFkZGVkIHRoZSAnJHtmYWN0T3JTdWJwcm9vZlN0cmluZ30nIGZhY3Qgb3Igc3VicHJvb2YgdG8gdGhlIGJvdW5kZWQgY29udGV4dC5gKTtcbiAgfVxuXG4gIGZpbmREZWNsYXJlZFZhcmlhYmxlQnlWYXJpYWJsZUlkZW50aWZpZXIodmFyaWFibGVJZGVudGlmaWVyKSB7XG4gICAgY29uc3QgZGVjbGFyZWRWYXJpYWJsZXMgPSB0aGlzLmdldERlY2xhcmVkVmFyaWFibGVzKCksXG4gICAgICAgICAgZGVjbGFyZWRWYXJpYWJsZSA9IGRlY2xhcmVkVmFyaWFibGVzLmZpbmQoKGRlY2xhcmVkVmFyaWFibGUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHZhcmlhYmxlQ29tcGFyZXNUb1ZhcmlhYmxlSWRlbnRpZmllciA9IGRlY2xhcmVkVmFyaWFibGUuY29tcGFyZVZhcmlhYmxlSWRlbnRpZmllcih2YXJpYWJsZUlkZW50aWZpZXIpO1xuXG4gICAgICAgICAgICBpZiAodmFyaWFibGVDb21wYXJlc1RvVmFyaWFibGVJZGVudGlmaWVyKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pIHx8IG51bGw7XG5cbiAgICByZXR1cm4gZGVjbGFyZWRWYXJpYWJsZTtcbiAgfVxuXG4gIGZpbmRDb25zdHJhaW50QnlDb25zdHJhaW50Tm9kZShjb25zdHJhaW50Tm9kZSkge1xuICAgIGxldCBjb25zdHJhaW50O1xuXG4gICAgaWYgKHRoaXMuY29uc3RyYWludHMgPT09IG51bGwpIHtcbiAgICAgIGNvbnN0cmFpbnQgPSBzdXBlci5maW5kQ29uc3RyYWludEJ5Q29uc3RyYWludE5vZGUoY29uc3RyYWludE5vZGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdHJhaW50ID0gdGhpcy5jb25zdHJhaW50cy5maW5kKChjb25zdHJhaW50KSA9PiB7XG4gICAgICAgIGNvbnN0IGNvbnN0cmFpbnROb2RlTWF0Y2hlcyA9IGNvbnN0cmFpbnQubWF0Y2hDb25zdHJhaW50Tm9kZShjb25zdHJhaW50Tm9kZSk7XG5cbiAgICAgICAgaWYgKGNvbnN0cmFpbnROb2RlTWF0Y2hlcykge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9KSB8fCBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiBjb25zdHJhaW50O1xuICB9XG5cbiAgaXNEZWNsYXJlZFZhcmlhYmxlUHJlc2VudEJ5VmFyaWFibGVJZGVudGlmaWVyKHZhcmlhYmxlSWRlbnRpZmllcikge1xuICAgIGNvbnN0IGRlY2xhcmVkVmFyaWFibGUgPSB0aGlzLmZpbmREZWNsYXJlZFZhcmlhYmxlQnlWYXJpYWJsZUlkZW50aWZpZXIodmFyaWFibGVJZGVudGlmaWVyKSxcbiAgICAgICAgICBkZWNsYXJlZFZhcmlhYmxlUHJlc2VudCA9IChkZWNsYXJlZFZhcmlhYmxlICE9PSBudWxsKTtcblxuICAgIHJldHVybiBkZWNsYXJlZFZhcmlhYmxlUHJlc2VudDtcbiAgfVxuXG4gIGlzVGVybUdyb3VuZGVkKHRlcm0pIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcywgLy8vXG4gICAgICAgICAgZXF1aXZhbGVuY2VzID0gdGhpcy5nZXRFcXVpdmFsZW5jZXMoKSxcbiAgICAgICAgICBncm91bmRlZFRlcm1zID0gW10sXG4gICAgICAgICAgZGVmaW5lZFZhcmlhYmxlcyA9IFtdO1xuXG4gICAgc2VwYXJhdGVHcm91bmRlZFRlcm1zQW5kRGVmaW5lZFZhcmlhYmxlcyhlcXVpdmFsZW5jZXMsIGdyb3VuZGVkVGVybXMsIGRlZmluZWRWYXJpYWJsZXMsIGNvbnRleHQpO1xuXG4gICAgY29uc3QgdGVybU1hdGNoZXNHcm91bmRlZFRlcm0gPSBncm91bmRlZFRlcm1zLnNvbWUoKGdyb3VuZGVkVGVybSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZ3JvdW5kZWRUZXJtTm9kZSA9IGdyb3VuZGVkVGVybS5nZXROb2RlKCksXG4gICAgICAgICAgICAgICAgICBncm91bmRlZFRlcm1Ob2RlTWF0Y2hlcyA9IHRlcm0ubWF0Y2hUZXJtTm9kZShncm91bmRlZFRlcm1Ob2RlKTtcblxuICAgICAgICAgICAgaWYgKGdyb3VuZGVkVGVybU5vZGVNYXRjaGVzKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pLFxuICAgICAgICAgIHRlcm1Hcm91bmRlZCA9IHRlcm1NYXRjaGVzR3JvdW5kZWRUZXJtOyAvLy9cblxuICAgIHJldHVybiB0ZXJtR3JvdW5kZWQ7XG4gIH1cblxuICBzdGF0aWMgZnJvbU5vdGhpbmcoY29udGV4dCkge1xuICAgIGNvbnN0IGFzc2lnbm1lbnRzID0gW10sXG4gICAgICAgICAgZXF1aXZhbGVuY2VzID0gW10sXG4gICAgICAgICAgZGVjbGFyZWRWYXJpYWJsZXMgPSBbXSxcbiAgICAgICAgICBjb25zdHJhaW50cyA9IG51bGwsXG4gICAgICAgICAgZmFjdE9yU3VicHJvb2ZzID0gW10sXG4gICAgICAgICAgYm91bmRlZENvbnRleHQgPSBuZXcgQm91bmRlZENvbnRleHQoY29udGV4dCwgY29uc3RyYWludHMsIGFzc2lnbm1lbnRzLCBlcXVpdmFsZW5jZXMsIGRlY2xhcmVkVmFyaWFibGVzLCBmYWN0T3JTdWJwcm9vZnMpO1xuXG4gICAgcmV0dXJuIGJvdW5kZWRDb250ZXh0O1xuICB9XG5cbiAgc3RhdGljIGZyb21Db25zdHJhaW50cyhjb25zdHJhaW50cywgY29udGV4dCkge1xuICAgIGNvbnN0IGFzc2lnbm1lbnRzID0gW10sXG4gICAgICAgICAgZXF1aXZhbGVuY2VzID0gW10sXG4gICAgICAgICAgZGVjbGFyZWRWYXJpYWJsZXMgPSBbXSxcbiAgICAgICAgICBmYWN0T3JTdWJwcm9vZnMgPSBbXSxcbiAgICAgICAgICBib3VuZGVkQ29udGV4dCA9IG5ldyBCb3VuZGVkQ29udGV4dChjb250ZXh0LCBjb25zdHJhaW50cywgYXNzaWdubWVudHMsIGVxdWl2YWxlbmNlcywgZGVjbGFyZWRWYXJpYWJsZXMsIGZhY3RPclN1YnByb29mcyk7XG5cbiAgICByZXR1cm4gYm91bmRlZENvbnRleHQ7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgQm91bmRlZENvbnRleHQ7Il0sIm5hbWVzIjpbImxhc3QiLCJjbGVhciIsImFycmF5VXRpbGl0aWVzIiwiQm91bmRlZENvbnRleHQiLCJDb250ZXh0IiwiY29udGV4dCIsImNvbnN0cmFpbnRzIiwiYXNzaWdubWVudHMiLCJlcXVpdmFsZW5jZXMiLCJkZWNsYXJlZFZhcmlhYmxlcyIsImZhY3RPclN1YnByb29mcyIsImdldENvbnN0cmFpbnRzIiwiZ2V0QXNzaWdubWVudHMiLCJnZXRFcXVpdmFsZW5jZXMiLCJnZXRDb250ZXh0IiwibWVyZ2VFcXVpdmFsZW5jZXMiLCJnZXREZWNsYXJlZFZhcmlhYmxlcyIsImdldEZhY3RPclN1YnByb29mcyIsInNldEVxdWl2YWxlbmNlcyIsImdldEZhY3RzIiwiZmFjdHMiLCJmaWx0ZXIiLCJmYWN0T3JTdWJwcm9vZiIsImZhY3RPclN1YnByb29mRmFjdCIsImlzRmFjdCIsImdldFN0ZXBzIiwic3RlcHMiLCJmYWN0IiwiZmFjdFN0ZXAiLCJpc1N0ZXAiLCJnZXRMYXN0U3RlcCIsImxhc3RTdGVwIiwic3RlcHNMZW5ndGgiLCJsZW5ndGgiLCJpc01ldGFMZXZlbCIsIm1ldGFMZXZlbCIsImFkZEFzc2lnbm1lbnQiLCJhc3NpZ25tZW50IiwicHVzaCIsImFzc2lnbkFzc2lnbm1lbnRzIiwiZm9yRWFjaCIsImFkZERlY2xhcmVkVmFyaWFibGUiLCJkZWNsYXJlZFZhcmlhYmxlIiwiZGVjbGFyZWRWYXJpYWJsZVN0cmluZyIsImdldFN0cmluZyIsInRyYWNlIiwiZGVidWciLCJhZGRDb25zdHJhaW50IiwiY29uc3RyYWludCIsImNvbnN0cmFpbnRBIiwiY29uc3RyYWludFN0cmluZyIsImNvbnN0cmFpbnRCIiwiZmluZCIsImNvbnN0cmFpbnRBRXF1YWxUb0Fzc3VtcHRpb25CIiwiaXNFcXVhbFRvIiwiYWRkR2VuZXJhdG9yIiwiZ2VuZXJhdG9yIiwiYWRkQ29uc3RydWN0b3IiLCJjb25zdHJ1Y3RvciIsImFkZEZhY3RPclN1YnByb29mIiwiZmFjdE9yU3VicHJvb2ZTdHJpbmciLCJmaW5kRGVjbGFyZWRWYXJpYWJsZUJ5VmFyaWFibGVJZGVudGlmaWVyIiwidmFyaWFibGVJZGVudGlmaWVyIiwidmFyaWFibGVDb21wYXJlc1RvVmFyaWFibGVJZGVudGlmaWVyIiwiY29tcGFyZVZhcmlhYmxlSWRlbnRpZmllciIsImZpbmRDb25zdHJhaW50QnlDb25zdHJhaW50Tm9kZSIsImNvbnN0cmFpbnROb2RlIiwiY29uc3RyYWludE5vZGVNYXRjaGVzIiwibWF0Y2hDb25zdHJhaW50Tm9kZSIsImlzRGVjbGFyZWRWYXJpYWJsZVByZXNlbnRCeVZhcmlhYmxlSWRlbnRpZmllciIsImRlY2xhcmVkVmFyaWFibGVQcmVzZW50IiwiaXNUZXJtR3JvdW5kZWQiLCJ0ZXJtIiwiZ3JvdW5kZWRUZXJtcyIsImRlZmluZWRWYXJpYWJsZXMiLCJzZXBhcmF0ZUdyb3VuZGVkVGVybXNBbmREZWZpbmVkVmFyaWFibGVzIiwidGVybU1hdGNoZXNHcm91bmRlZFRlcm0iLCJzb21lIiwiZ3JvdW5kZWRUZXJtIiwiZ3JvdW5kZWRUZXJtTm9kZSIsImdldE5vZGUiLCJncm91bmRlZFRlcm1Ob2RlTWF0Y2hlcyIsIm1hdGNoVGVybU5vZGUiLCJ0ZXJtR3JvdW5kZWQiLCJmcm9tTm90aGluZyIsImJvdW5kZWRDb250ZXh0IiwiZnJvbUNvbnN0cmFpbnRzIl0sIm1hcHBpbmdzIjoiQUFBQTs7OzsrQkFvU0E7OztlQUFBOzs7MkJBbFMrQjtnRUFFWDs4QkFFd0Q7Ozs7OztBQUU1RSxNQUFNLEVBQUVBLElBQUksRUFBRUMsS0FBSyxFQUFFLEdBQUdDLHlCQUFjO0FBRXRDLE1BQU1DLHVCQUF1QkMsZ0JBQU87SUFDbEMsWUFBWUMsT0FBTyxFQUFFQyxXQUFXLEVBQUVDLFdBQVcsRUFBRUMsWUFBWSxFQUFFQyxpQkFBaUIsRUFBRUMsZUFBZSxDQUFFO1FBQy9GLEtBQUssQ0FBQ0w7UUFFTixJQUFJLENBQUNDLFdBQVcsR0FBR0E7UUFDbkIsSUFBSSxDQUFDQyxXQUFXLEdBQUdBO1FBQ25CLElBQUksQ0FBQ0MsWUFBWSxHQUFHQTtRQUNwQixJQUFJLENBQUNDLGlCQUFpQixHQUFHQTtRQUN6QixJQUFJLENBQUNDLGVBQWUsR0FBR0E7SUFDekI7SUFFQUMsaUJBQWlCO1FBQ2YsT0FBTyxJQUFJLENBQUNMLFdBQVc7SUFDekI7SUFFQU0saUJBQWlCO1FBQ2YsT0FBTyxJQUFJLENBQUNMLFdBQVc7SUFDekI7SUFFQU0sa0JBQWtCO1FBQ2hCLElBQUlMO1FBRUosSUFBSUg7UUFFSkEsVUFBVSxJQUFJLENBQUNTLFVBQVU7UUFFekJOLGVBQWVILFFBQVFRLGVBQWU7UUFFdENSLFVBQVUsSUFBSSxFQUFFLEdBQUc7UUFFbkJHLGVBQWVPLElBQUFBLCtCQUFpQixFQUFDLElBQUksQ0FB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
@@ -71,32 +71,32 @@ class LiminalContext extends _context.default {
71
71
  this.addDerivedSubstitution(derivedSubstitution);
72
72
  });
73
73
  }
74
- resolveDerivedSubstitutions(continuation) {
74
+ solveDerivedSubstitutions(continuation) {
75
75
  const context = this, derivedSubstitutions = this.getDerivedSubstitutions(), metavariableNodes = (0, _substitutions.metavariableNodesFromDerivedSubstitutions)(derivedSubstitutions);
76
76
  return asynchronousForEach(metavariableNodes, (metavariableNode, continuation)=>{
77
77
  const complexDerivedSubstitutions = this.findComplexDerivedSubstitutionsByMetavariableNode(metavariableNode);
78
78
  return asynchronousForEach(complexDerivedSubstitutions, (complexDerivedSubstitution, continuation)=>{
79
- const derivedSubstitution = complexDerivedSubstitution, resolved = derivedSubstitution.isResolved();
80
- if (resolved) {
79
+ const derivedSubstitution = complexDerivedSubstitution, solved = derivedSubstitution.isSolved();
80
+ if (solved) {
81
81
  return continuation();
82
82
  }
83
- return derivedSubstitution.resolve(context, continuation);
83
+ return derivedSubstitution.solve(context, continuation);
84
84
  }, continuation);
85
85
  }, continuation);
86
86
  }
87
- areDerivedSubstitutionsResolved() {
88
- const derivedSubstitutions = this.getDerivedSubstitutions(), metavariableNodes = (0, _substitutions.metavariableNodesFromDerivedSubstitutions)(derivedSubstitutions), resolved = metavariableNodes.every((metavariableNode)=>{
89
- const complexDerivedSubstitutions = this.findComplexDerivedSubstitutionsByMetavariableNode(metavariableNode), complexDerivedSubstitutionsResolved = complexDerivedSubstitutions.every((complexDerivedSubstitution)=>{
90
- const complexDerivedSubstitutionResolved = complexDerivedSubstitution.isResolved();
91
- if (complexDerivedSubstitutionResolved) {
87
+ areDerivedSubstitutionsSolved() {
88
+ const derivedSubstitutions = this.getDerivedSubstitutions(), metavariableNodes = (0, _substitutions.metavariableNodesFromDerivedSubstitutions)(derivedSubstitutions), solved = metavariableNodes.every((metavariableNode)=>{
89
+ const complexDerivedSubstitutions = this.findComplexDerivedSubstitutionsByMetavariableNode(metavariableNode), complexDerivedSubstitutionsSolved = complexDerivedSubstitutions.every((complexDerivedSubstitution)=>{
90
+ const complexDerivedSubstitutionSolved = complexDerivedSubstitution.isSolved();
91
+ if (complexDerivedSubstitutionSolved) {
92
92
  return true;
93
93
  }
94
94
  });
95
- if (complexDerivedSubstitutionsResolved) {
95
+ if (complexDerivedSubstitutionsSolved) {
96
96
  return true;
97
97
  }
98
98
  });
99
- return resolved;
99
+ return solved;
100
100
  }
101
101
  isEmpty() {
102
102
  const derivedSubstitutionsLength = this.derivedSubstitutions.length, empty = derivedSubstitutionsLength === 0;
@@ -198,4 +198,4 @@ class LiminalContext extends _context.default {
198
198
  }
199
199
  }
200
200
 
201
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb250ZXh0L2xpbWluYWwuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IGFycmF5VXRpbGl0aWVzIH0gZnJvbSBcIm5lY2Vzc2FyeVwiO1xuaW1wb3J0IHsgY29udGludWF0aW9uVXRpbGl0aWVzIH0gZnJvbSBcIm9jY2FtLWxhbmd1YWdlc1wiO1xuXG5pbXBvcnQgQ29udGV4dCBmcm9tIFwiLi4vY29udGV4dFwiO1xuaW1wb3J0IGVsZW1lbnRzIGZyb20gXCIuLi9lbGVtZW50c1wiO1xuXG5pbXBvcnQgeyBtZXRhdmFyaWFibGVOb2Rlc0Zyb21EZXJpdmVkU3Vic3RpdHV0aW9ucyB9IGZyb20gXCIuLi91dGlsaXRpZXMvc3Vic3RpdHV0aW9uc1wiO1xuXG5jb25zdCB7IHB1c2gsIGZpbmQsIGZpcnN0IH0gPSBhcnJheVV0aWxpdGllcyxcbiAgICAgIHsgYXN5bmNocm9ub3VzRm9yRWFjaCB9ID0gY29udGludWF0aW9uVXRpbGl0aWVzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBMaW1pbmFsQ29udGV4dCBleHRlbmRzIENvbnRleHQge1xuICBjb25zdHJ1Y3Rvcihjb250ZXh0LCBkZXJpdmVkU3Vic3RpdHV0aW9ucykge1xuICAgIHN1cGVyKGNvbnRleHQpO1xuXG4gICAgdGhpcy5kZXJpdmVkU3Vic3RpdHV0aW9ucyA9IGRlcml2ZWRTdWJzdGl0dXRpb25zO1xuICB9XG5cbiAgZ2V0RGVyaXZlZFN1YnN0aXR1dGlvbnMoZGVyaXZlZFN1YnN0aXR1dGlvbnMgPSBbXSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKTtcblxuICAgIHB1c2goZGVyaXZlZFN1YnN0aXR1dGlvbnMsIHRoaXMuZGVyaXZlZFN1YnN0aXR1dGlvbnMpO1xuXG4gICAgY29udGV4dC5nZXREZXJpdmVkU3Vic3RpdHV0aW9ucyhkZXJpdmVkU3Vic3RpdHV0aW9ucyk7XG5cbiAgICByZXR1cm4gZGVyaXZlZFN1YnN0aXR1dGlvbnM7XG4gIH1cblxuICBnZXRTb2xlRGVyaXZlZFN1YnN0aXR1dGlvbigpIHtcbiAgICBsZXQgc29sZURlcml2ZWRTdWJzdGl0dXRpb24gPSBudWxsO1xuXG4gICAgY29uc3QgZGVyaXZlZFN1YnN0aXR1dGlvbnNMZW5ndGggPSB0aGlzLmRlcml2ZWRTdWJzdGl0dXRpb25zLmxlbmd0aDtcblxuICAgIGlmIChkZXJpdmVkU3Vic3RpdHV0aW9uc0xlbmd0aCA9PT0gMSkge1xuICAgICAgY29uc3QgZmlyc3REZXJpdmVkU3Vic3RpdHV0aW9uID0gZmlyc3QodGhpcy5kZXJpdmVkU3Vic3RpdHV0aW9ucyk7XG5cbiAgICAgIHNvbGVEZXJpdmVkU3Vic3RpdHV0aW9uID0gZmlyc3REZXJpdmVkU3Vic3RpdHV0aW9uOyAvLy9cbiAgICB9XG5cbiAgICByZXR1cm4gc29sZURlcml2ZWRTdWJzdGl0dXRpb247XG4gIH1cblxuICBnZXRTb2xlTm9uVHJpdmlhbERlcml2ZWRTdWJzdGl0dXRpb24oKSB7XG4gICAgbGV0IHNvbGVOb25Ucml2aWFsRGVyaXZlZFN1YnN0aXR1dGlvbiA9IG51bGw7XG5cbiAgICBjb25zdCBzb2xlRGVyaXZlZFN1YnN0aXR1dGlvbiA9IHRoaXMuZ2V0U29sZURlcml2ZWRTdWJzdGl0dXRpb24oKTtcblxuICAgIGlmIChzb2xlRGVyaXZlZFN1YnN0aXR1dGlvbiAhPT0gbnVsbCkge1xuICAgICAgY29uc3Qgc29sZURlcml2ZWRTdWJzdGl0dXRpb25Ob25Ucml2aWFsID0gc29sZURlcml2ZWRTdWJzdGl0dXRpb24uaXNOb25Ucml2aWFsKCk7XG5cbiAgICAgIGlmIChzb2xlRGVyaXZlZFN1YnN0aXR1dGlvbk5vblRyaXZpYWwpIHtcbiAgICAgICAgc29sZU5vblRyaXZpYWxEZXJpdmVkU3Vic3RpdHV0aW9uID0gc29sZURlcml2ZWRTdWJzdGl0dXRpb247ICAvLy9cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gc29sZU5vblRyaXZpYWxEZXJpdmVkU3Vic3RpdHV0aW9uO1xuICB9XG5cbiAgYWRkRGVyaXZlZFN1YnN0aXR1dGlvbihkZXJpdmVkU3Vic3RpdHV0aW9uKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMsIC8vL1xuICAgICAgICAgIGRlcml2ZWRTdWJzdGl0dXRpb25BID0gZGVyaXZlZFN1YnN0aXR1dGlvbiwgLy8vXG4gICAgICAgICAgZGVyaXZlZFN1YnN0aXR1dGlvblN0cmluZyA9IGRlcml2ZWRTdWJzdGl0dXRpb24uZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBBZGRpbmcgdGhlICcke2Rlcml2ZWRTdWJzdGl0dXRpb25TdHJpbmd9JyBkZXJpdmVkIHN1YnN0aXR1dGlvbiB0byB0aGUgbGltaW5hbCBjb250ZXh0Li4uYCk7XG5cbiAgICBjb25zdCBkZXJpdmVkU3Vic3RpdHV0aW9uQiA9IHRoaXMuZGVyaXZlZFN1YnN0aXR1dGlvbnMuZmluZCgoZGVyaXZlZFN1YnN0aXR1dGlvbikgPT4ge1xuICAgICAgY29uc3QgZGVyaXZlZFN1YnN0aXR1dGlvbkIgPSBkZXJpdmVkU3Vic3RpdHV0aW9uLCAvLy9cbiAgICAgICAgICAgIGRlcml2ZWRTdWJzdGl0dXRpb25BRXF1YWxUb0Rlcml2ZWRTdWJzdGl0dXRpb25CID0gZGVyaXZlZFN1YnN0aXR1dGlvbkEuaXNFcXVhbFRvKGRlcml2ZWRTdWJzdGl0dXRpb25CKTtcblxuICAgICAgaWYgKGRlcml2ZWRTdWJzdGl0dXRpb25BRXF1YWxUb0Rlcml2ZWRTdWJzdGl0dXRpb25CKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH0pIHx8IG51bGw7XG5cbiAgICBpZiAoZGVyaXZlZFN1YnN0aXR1dGlvbkIgIT09IG51bGwpIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYFRoZSAnJHtkZXJpdmVkU3Vic3RpdHV0aW9uU3RyaW5nfScgZGVyaXZlZCBzdWJzdGl0dXRpb24gaGFzIGFscmVhZHkgYmVlbiBhZGRlZCB0byB0aGUgbGltaW5hbCBjb250ZXh0LmApO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmRlcml2ZWRTdWJzdGl0dXRpb25zLnB1c2goZGVyaXZlZFN1YnN0aXR1dGlvbik7XG4gICAgfVxuXG4gICAgY29udGV4dC5kZWJ1ZyhgLi4uYWRkZWQgdGhlICcke2Rlcml2ZWRTdWJzdGl0dXRpb25TdHJpbmd9JyBkZXJpdmVkIHN1YnN0aXR1dGlvbiB0byB0aGUgbGltaW5hbCBjb250ZXh0LmApO1xuICB9XG5cbiAgYWRkRGVyaXZlZFN1YnN0aXR1dGlvbnMoZGVyaXZlZFN1YnN0aXR1dGlvbnMpIHtcbiAgICBkZXJpdmVkU3Vic3RpdHV0aW9ucy5mb3JFYWNoKChkZXJpdmVkU3Vic3RpdHV0aW9uKSA9PiB7XG4gICAgICB0aGlzLmFkZERlcml2ZWRTdWJzdGl0dXRpb24oZGVyaXZlZFN1YnN0aXR1dGlvbik7XG4gICAgfSk7XG4gIH1cblxuICByZXNvbHZlRGVyaXZlZFN1YnN0aXR1dGlvbnMoY29udGludWF0aW9uKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMsIC8vL1xuICAgICAgICAgIGRlcml2ZWRTdWJzdGl0dXRpb25zID0gdGhpcy5nZXREZXJpdmVkU3Vic3RpdHV0aW9ucygpLFxuICAgICAgICAgIG1ldGF2YXJpYWJsZU5vZGVzID0gbWV0YXZhcmlhYmxlTm9kZXNGcm9tRGVyaXZlZFN1YnN0aXR1dGlvbnMoZGVyaXZlZFN1YnN0aXR1dGlvbnMpO1xuXG4gICAgcmV0dXJuIGFzeW5jaHJvbm91c0ZvckVhY2gobWV0YXZhcmlhYmxlTm9kZXMsIChtZXRhdmFyaWFibGVOb2RlLCBjb250aW51YXRpb24pID0+IHtcbiAgICAgIGNvbnN0IGNvbXBsZXhEZXJpdmVkU3Vic3RpdHV0aW9ucyA9IHRoaXMuZmluZENvbXBsZXhEZXJpdmVkU3Vic3RpdHV0aW9uc0J5TWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlKTtcblxuICAgICAgcmV0dXJuIGFzeW5jaHJvbm91c0ZvckVhY2goY29tcGxleERlcml2ZWRTdWJzdGl0dXRpb25zLCAoY29tcGxleERlcml2ZWRTdWJzdGl0dXRpb24sIGNvbnRpbnVhdGlvbikgPT4ge1xuICAgICAgICBjb25zdCBkZXJpdmVkU3Vic3RpdHV0aW9uID0gY29tcGxleERlcml2ZWRTdWJzdGl0dXRpb24sIC8vL1xuICAgICAgICAgICAgICByZXNvbHZlZCA9IGRlcml2ZWRTdWJzdGl0dXRpb24uaXNSZXNvbHZlZCgpO1xuXG4gICAgICAgIGlmIChyZXNvbHZlZCkge1xuICAgICAgICAgIHJldHVybiBjb250aW51YXRpb24oKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBkZXJpdmVkU3Vic3RpdHV0aW9uLnJlc29sdmUoY29udGV4dCwgY29udGludWF0aW9uKTtcbiAgICAgIH0sIGNvbnRpbnVhdGlvbik7XG4gICAgfSwgY29udGludWF0aW9uKTtcbiAgfVxuXG4gIGFyZURlcml2ZWRTdWJzdGl0dXRpb25zUmVzb2x2ZWQoKSB7XG4gICAgY29uc3QgZGVyaXZlZFN1YnN0aXR1dGlvbnMgPSB0aGlzLmdldERlcml2ZWRTdWJzdGl0dXRpb25zKCksXG4gICAgICAgICAgbWV0YXZhcmlhYmxlTm9kZXMgPSBtZXRhdmFyaWFibGVOb2Rlc0Zyb21EZXJpdmVkU3Vic3RpdHV0aW9ucyhkZXJpdmVkU3Vic3RpdHV0aW9ucyksXG4gICAgICAgICAgcmVzb2x2ZWQgPSBtZXRhdmFyaWFibGVOb2Rlcy5ldmVyeSgobWV0YXZhcmlhYmxlTm9kZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgY29tcGxleERlcml2ZWRTdWJzdGl0dXRpb25zID0gdGhpcy5maW5kQ29tcGxleERlcml2ZWRTdWJzdGl0dXRpb25zQnlNZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpLFxuICAgICAgICAgICAgICAgICAgY29tcGxleERlcml2ZWRTdWJzdGl0dXRpb25zUmVzb2x2ZWQgPSBjb21wbGV4RGVyaXZlZFN1YnN0aXR1dGlvbnMuZXZlcnkoKGNvbXBsZXhEZXJpdmVkU3Vic3RpdHV0aW9uKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbXBsZXhEZXJpdmVkU3Vic3RpdHV0aW9uUmVzb2x2ZWQgPSBjb21wbGV4RGVyaXZlZFN1YnN0aXR1dGlvbi5pc1Jlc29sdmVkKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvbXBsZXhEZXJpdmVkU3Vic3RpdHV0aW9uUmVzb2x2ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGlmIChjb21wbGV4RGVyaXZlZFN1YnN0aXR1dGlvbnNSZXNvbHZlZCkge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcblxuICAgIHJldHVybiByZXNvbHZlZDtcbiAgfVxuXG4gIGlzRW1wdHkoKSB7XG4gICAgY29uc3QgZGVyaXZlZFN1YnN0aXR1dGlvbnNMZW5ndGggPSB0aGlzLmRlcml2ZWRTdWJzdGl0dXRpb25zLmxlbmd0aCxcbiAgICAgICAgICBlbXB0eSA9IChkZXJpdmVkU3Vic3RpdHV0aW9uc0xlbmd0aCA9PT0gMCk7XG5cbiAgICByZXR1cm4gZW1wdHk7XG4gIH1cblxuICBxdWFsaWZ5KGFzc3VtcHRpb24sIGNvbnN0cmFpbnQpIHtcbiAgICBsZXQgcXVhbGlmaWVzID0gZmFsc2U7XG5cbiAgICBjb25zdCBlbXB0eSA9IHRoaXMuaXNFbXB0eSgpO1xuXG4gICAgaWYgKGVtcHR5KSB7XG4gICAgICBxdWFsaWZpZXMgPSB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBzb2xlRGVyaXZlZFN1YnN0aXR1dGlvbiA9IHRoaXMuZ2V0U29sZURlcml2ZWRTdWJzdGl0dXRpb24oKTtcblxuICAgICAgaWYgKHNvbGVEZXJpdmVkU3Vic3RpdHV0aW9uICE9PSBudWxsKSB7XG4gICAgICAgIGNvbnN0IHsgUmVmZXJlbmNlRGVyaXZlZFN1YnN0aXR1dGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgICAgICAgIGNvbnRleHQgPSB0aGlzLCAvLy9cbiAgICAgICAgICAgICAgcmVmZXJlbmNlRGVyaXZlZFN1YnN0aXR1dGlvbiA9IFJlZmVyZW5jZURlcml2ZWRTdWJzdGl0dXRpb24uZnJvbUFzc3VtcHRpb25BbmRDb25zdHJhaW50KGFzc3VtcHRpb24sIGNvbnN0cmFpbnQsIGNvbnRleHQpLFxuICAgICAgICAgICAgICByZWZlcmVuY2VEZXJpdmVkU3Vic3RpdHV0aW9uQ29tcGFyZXNUb1Nzb2xlRGVyaXZlZFN1YnN0aXR1dGlvbiA9IHJlZmVyZW5jZURlcml2ZWRTdWJzdGl0dXRpb24uY29tcGFyZVN1YnN0aXR1dGlvbihzb2xlRGVyaXZlZFN1YnN0aXR1dGlvbik7XG5cbiAgICAgICAgaWYgKHJlZmVyZW5jZURlcml2ZWRTdWJzdGl0dXRpb25Db21wYXJlc1RvU3NvbGVEZXJpdmVkU3Vic3RpdHV0aW9uKSB7XG4gICAgICAgICAgcXVhbGlmaWVzID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBxdWFsaWZpZXM7XG4gIH1cblxuICBjb21taXQoY29udGV4dCkge1xuICAgIGlmIChjb250ZXh0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKTtcbiAgICB9XG5cbiAgICBjb250ZXh0LmRlYnVnKGBDb21taXR0aW5nIHRoZSBsaW1pbmFsIGNvbnRleHRgKTtcblxuICAgIGNvbnRleHQuYWRkRGVyaXZlZFN1YnN0aXR1dGlvbnModGhpcy5kZXJpdmVkU3Vic3RpdHV0aW9ucyk7XG4gIH1cblxuICBmaW5kRGVyaXZlZFN1YnN0aXR1dGlvbihjYWxsYmFjaykge1xuICAgIGNvbnN0IGRlcml2ZWRTdWJzdGl0dXRpb25zID0gdGhpcy5nZXREZXJpdmVkU3Vic3RpdHV0aW9ucygpLFxuICAgICAgICAgIGRlcml2ZWRTdWJzdGl0dXRpb24gPSBkZXJpdmVkU3Vic3RpdHV0aW9ucy5maW5kKGNhbGxiYWNrKTtcblxuICAgIHJldHVybiBkZXJpdmVkU3Vic3RpdHV0aW9uO1xuICB9XG5cbiAgZmluZERlcml2ZWRTdWJzdGl0dXRpb25zKGNhbGxiYWNrKSB7XG4gICAgbGV0IGRlcml2ZWRTdWJzdGl0dXRpb25zO1xuXG4gICAgZGVyaXZlZFN1YnN0aXR1dGlvbnMgPSB0aGlzLmdldERlcml2ZWRTdWJzdGl0dXRpb25zKCk7XG5cbiAgICBkZXJpdmVkU3Vic3RpdHV0aW9ucyA9IGZpbmQoZGVyaXZlZFN1YnN0aXR1dGlvbnMsIGNhbGxiYWNrKTsgIC8vL1xuXG4gICAgcmV0dXJuIGRlcml2ZWRTdWJzdGl0dXRpb25zO1xuICB9XG5cbiAgZmluZERlcml2ZWRTdWJzdGl0dXRpb25CeVZhcmlhYmxlTm9kZSh2YXJpYWJsZU5vZGUpIHtcbiAgICBjb25zdCBkZXJpdmVkU3Vic3RpdHV0aW9uID0gdGhpcy5maW5kRGVyaXZlZFN1YnN0aXR1dGlvbigoZGVyaXZlZFN1YnN0aXR1dGlvbikgPT4ge1xuICAgICAgY29uc3QgdmFyaWFibGVOb2RlTWF0Y2hlcyA9IGRlcml2ZWRTdWJzdGl0dXRpb24ubWF0Y2hWYXJpYWJsZU5vZGUodmFyaWFibGVOb2RlKTtcblxuICAgICAgaWYgKHZhcmlhYmxlTm9kZU1hdGNoZXMpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSkgfHwgbnVsbDtcblxuICAgIHJldHVybiBkZXJpdmVkU3Vic3RpdHV0aW9uO1xuICB9XG5cbiAgZmluZERlcml2ZWRTdWJzdGl0dXRpb25CeU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSkge1xuICAgIGNvbnN0IHNpbXBsZURlcml2ZWRTdWJzdGl0dXRpb24gPSB0aGlzLmZpbmRTaW1wbGVEZXJpdmVkU3Vic3RpdHV0aW9uQnlNZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpLFxuICAgICAgICAgIGRlcml2ZWRTdWJzdGl0dXRpb24gPSBzaW1wbGVEZXJpdmVkU3Vic3RpdHV0aW9uOyAgLy8vXG5cbiAgICByZXR1cm4gZGVyaXZlZFN1YnN0aXR1dGlvbjtcbiAgfVxuXG4gIGZpbmRTaW1wbGVEZXJpdmVkU3Vic3RpdHV0aW9uQnlNZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpIHtcbiAgICBjb25zdCBzaW1wbGVEZXJpdmVkU3Vic3RpdHV0aW9uID0gdGhpcy5maW5kRGVyaXZlZFN1YnN0aXR1dGlvbigoZGVyaXZlZFN1YnN0aXR1dGlvbikgPT4ge1xuICAgICAgY29uc3QgZGVyaXZlZFN1YnN0aXR1dGlvblNpbXBsZSA9IGRlcml2ZWRTdWJzdGl0dXRpb24uaXNTaW1wbGUoKTtcblxuICAgICAgaWYgKGRlcml2ZWRTdWJzdGl0dXRpb25TaW1wbGUpIHtcbiAgICAgICAgY29uc3Qgc2ltcGxlRGVyaXZlZFN1YnN0aXR1dGlvbiA9IGRlcml2ZWRTdWJzdGl0dXRpb24sICAvLy9cbiAgICAgICAgICAgICAgbWV0YXZhcmlhYmxlTm9kZU1hdGNoZXMgPSBzaW1wbGVEZXJpdmVkU3Vic3RpdHV0aW9uLm1hdGNoTWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlKTtcblxuICAgICAgICBpZiAobWV0YXZhcmlhYmxlTm9kZU1hdGNoZXMpIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pIHx8IG51bGw7XG5cbiAgICByZXR1cm4gc2ltcGxlRGVyaXZlZFN1YnN0aXR1dGlvbjtcbiAgfVxuXG4gIGZpbmRDb21wbGV4RGVyaXZlZFN1YnN0aXR1dGlvbnNCeU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSkge1xuICAgIGNvbnN0IGNvbXBsZXhEZXJpdmVkU3Vic3RpdHV0aW9uID0gdGhpcy5maW5kRGVyaXZlZFN1YnN0aXR1dGlvbnMoKGRlcml2ZWRTdWJzdGl0dXRpb24pID0+IHtcbiAgICAgIGNvbnN0IGRlcml2ZWRTdWJzdGl0dXRpb25Db21wbGV4ID0gZGVyaXZlZFN1YnN0aXR1dGlvbi5pc0NvbXBsZXgoKTtcblxuICAgICAgaWYgKGRlcml2ZWRTdWJzdGl0dXRpb25Db21wbGV4KSB7XG4gICAgICAgIGNvbnN0IGNvbXBsZXhEZXJpdmVkU3Vic3RpdHV0aW9uID0gZGVyaXZlZFN1YnN0aXR1dGlvbiwgIC8vL1xuICAgICAgICAgICAgICBtZXRhdmFyaWFibGVOb2RlTWF0Y2hlcyA9IGNvbXBsZXhEZXJpdmVkU3Vic3RpdHV0aW9uLm1hdGNoTWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlKTtcblxuICAgICAgICBpZiAobWV0YXZhcmlhYmxlTm9kZU1hdGNoZXMpIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pIHx8IG51bGw7XG5cbiAgICByZXR1cm4gY29tcGxleERlcml2ZWRTdWJzdGl0dXRpb247XG4gIH1cblxuICBmaW5kRGVyaXZlZFN1YnN0aXR1dGlvbkJ5TWV0YXZhcmlhYmxlTm9kZUFuZFN1YnN0aXR1dGlvbk5vZGUobWV0YXZhcmlhYmxlTm9kZSwgc3Vic3RpdHV0aW9uTm9kZSkge1xuICAgIGNvbnN0IGRlcml2ZWRTdWJzdGl0dXRpb24gPSB0aGlzLmZpbmREZXJpdmVkU3Vic3RpdHV0aW9uKChkZXJpdmVkU3Vic3RpdHV0aW9uKSA9PiB7ICAvLy9cbiAgICAgICAgICAgIGNvbnN0IG1ldGF2YXJpYWJsZU5vZGVNYXRjaGVzID0gZGVyaXZlZFN1YnN0aXR1dGlvbi5tYXRjaE1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSk7XG5cbiAgICAgICAgICAgIGlmIChtZXRhdmFyaWFibGVOb2RlTWF0Y2hlcykge1xuICAgICAgICAgICAgICBjb25zdCBzdWJzdGl0dXRpb25Ob2RlTWF0Y2hlcyA9IGRlcml2ZWRTdWJzdGl0dXRpb24ubWF0Y2hTdWJzdGl0dXRpb25Ob2RlKHN1YnN0aXR1dGlvbk5vZGUpO1xuXG4gICAgICAgICAgICAgIGlmIChzdWJzdGl0dXRpb25Ob2RlTWF0Y2hlcykge1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSkgfHwgbnVsbDtcblxuICAgIHJldHVybiBkZXJpdmVkU3Vic3RpdHV0aW9uO1xuICB9XG5cbiAgaXNEZXJpdmVkU3Vic3RpdHV0aW9uUHJlc2VudEJ5TWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlKSB7XG4gICAgY29uc3QgZGVyaXZlZFN1YnN0aXR1dGlvbiA9IHRoaXMuZmluZERlcml2ZWRTdWJzdGl0dXRpb25CeU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSksXG4gICAgICAgICAgZGVyaXZlZFN1YnN0aXR1dGlvblByZXNlbnQgPSAoZGVyaXZlZFN1YnN0aXR1dGlvbiAhPT0gbnVsbCk7XG5cbiAgICByZXR1cm4gZGVyaXZlZFN1YnN0aXR1dGlvblByZXNlbnQ7XG4gIH1cblxuICBpc0Rlcml2ZWRTdWJzdGl0dXRpb25QcmVzZW50QnlNZXRhdmFyaWFibGVOb2RlQW5kU3Vic3RpdHV0aW9uTm9kZShtZXRhdmFyaWFibGVOb2RlLCBzdWJzdGl0dXRpb25Ob2RlKSB7XG4gICAgY29uc3QgZGVyaXZlZFN1YnN0aXR1dGlvbiA9IHRoaXMuZmluZERlcml2ZWRTdWJzdGl0dXRpb25CeU1ldGF2YXJpYWJsZU5vZGVBbmRTdWJzdGl0dXRpb25Ob2RlKG1ldGF2YXJpYWJsZU5vZGUsIHN1YnN0aXR1dGlvbk5vZGUpLFxuICAgICAgICAgIGRlcml2ZWRTdWJzdGl0dXRpb25QcmVzZW50ID0gKGRlcml2ZWRTdWJzdGl0dXRpb24gIT09IG51bGwpO1xuXG4gICAgcmV0dXJuIGRlcml2ZWRTdWJzdGl0dXRpb25QcmVzZW50O1xuICB9XG5cbiAgc3RhdGljIGZyb21Ob3RoaW5nKGNvbnRleHQpIHtcbiAgICBjb25zdCBkZXJpdmVkU3Vic3RpdHV0aW9ucyA9IFtdLFxuICAgICAgICAgIGxpbWluYWxDb250ZXh0ID0gbmV3IExpbWluYWxDb250ZXh0KGNvbnRleHQsIGRlcml2ZWRTdWJzdGl0dXRpb25zKTtcblxuICAgIHJldHVybiBsaW1pbmFsQ29udGV4dDtcbiAgfVxufVxuIl0sIm5hbWVzIjpbIkxpbWluYWxDb250ZXh0IiwicHVzaCIsImZpbmQiLCJmaXJzdCIsImFycmF5VXRpbGl0aWVzIiwiYXN5bmNocm9ub3VzRm9yRWFjaCIsImNvbnRpbnVhdGlvblV0aWxpdGllcyIsIkNvbnRleHQiLCJjb250ZXh0IiwiZGVyaXZlZFN1YnN0aXR1dGlvbnMiLCJnZXREZXJpdmVkU3Vic3RpdHV0aW9ucyIsImdldENvbnRleHQiLCJnZXRTb2xlRGVyaXZlZFN1YnN0aXR1dGlvbiIsInNvbGVEZXJpdmVkU3Vic3RpdHV0aW9uIiwiZGVyaXZlZFN1YnN0aXR1dGlvbnNMZW5ndGgiLCJsZW5ndGgiLCJmaXJzdERlcml2ZWRTdWJzdGl0dXRpb24iLCJnZXRTb2xlTm9uVHJpdmlhbERlcml2ZWRTdWJzdGl0dXRpb24iLCJzb2xlTm9uVHJpdmlhbERlcml2ZWRTdWJzdGl0dXRpb24iLCJzb2xlRGVyaXZlZFN1YnN0aXR1dGlvbk5vblRyaXZpYWwiLCJpc05vblRyaXZpYWwiLCJhZGREZXJpdmVkU3Vic3RpdHV0aW9uIiwiZGVyaXZlZFN1YnN0aXR1dGlvbiIsImRlcml2ZWRTdWJzdGl0dXRpb25BIiwiZGVyaXZlZFN1YnN0aXR1dGlvblN0cmluZyIsImdldFN0cmluZyIsInRyYWNlIiwiZGVyaXZlZFN1YnN0aXR1dGlvbkIiLCJkZXJpdmVkU3Vic3RpdHV0aW9uQUVxdWFsVG9EZXJpdmVkU3Vic3RpdHV0aW9uQiIsImlzRXF1YWxUbyIsImRlYnVnIiwiYWRkRGVyaXZlZFN1YnN0aXR1dGlvbnMiLCJmb3JFYWNoIiwicmVzb2x2ZURlcml2ZWRTdWJzdGl0dXRpb25zIiwiY29udGludWF0aW9uIiwibWV0YXZhcmlhYmxlTm9kZXMiLCJtZXRhdmFyaWFibGVOb2Rlc0Zyb21EZXJpdmVkU3Vic3RpdHV0aW9ucyIsIm1ldGF2YXJpYWJsZU5vZGUiLCJjb21wbGV4RGVyaXZlZFN1YnN0aXR1dGlvbnMiLCJmaW5kQ29tcGxleERlcml2ZWRTdWJzdGl0dXRpb25zQnlNZXRhdmFyaWFibGVOb2RlIiwiY29tcGxleERlcml2ZWRTdWJzdGl0dXRpb24iLCJyZXNvbHZlZCIsImlzUmVzb2x2ZWQiLCJyZXNvbHZlIiwiYXJlRGVyaXZlZFN1YnN0aXR1dGlvbnNSZXNvbHZlZCIsImV2ZXJ5IiwiY29tcGxleERlcml2ZWRTdWJzdGl0dXRpb25zUmVzb2x2ZWQiLCJjb21wbGV4RGVyaXZlZFN1YnN0aXR1dGlvblJlc29sdmVkIiwiaXNFbXB0eSIsImVtcHR5IiwicXVhbGlmeSIsImFzc3VtcHRpb24iLCJjb25zdHJhaW50IiwicXVhbGlmaWVzIiwiUmVmZXJlbmNlRGVyaXZlZFN1YnN0aXR1dGlvbiIsImVsZW1lbnRzIiwicmVmZXJlbmNlRGVyaXZlZFN1YnN0aXR1dGlvbiIsImZyb21Bc3N1bXB0aW9uQW5kQ29uc3RyYWludCIsInJlZmVyZW5jZURlcml2ZWRTdWJzdGl0dXRpb25Db21wYXJlc1RvU3NvbGVEZXJpdmVkU3Vic3RpdHV0aW9uIiwiY29tcGFyZVN1YnN0aXR1dGlvbiIsImNvbW1pdCIsInVuZGVmaW5lZCIsImZpbmREZXJpdmVkU3Vic3RpdHV0aW9uIiwiY2FsbGJhY2siLCJmaW5kRGVyaXZlZFN1YnN0aXR1dGlvbnMiLCJmaW5kRGVyaXZlZFN1YnN0aXR1dGlvbkJ5VmFyaWFibGVOb2RlIiwidmFyaWFibGVOb2RlIiwidmFyaWFibGVOb2RlTWF0Y2hlcyIsIm1hdGNoVmFyaWFibGVOb2RlIiwiZmluZERlcml2ZWRTdWJzdGl0dXRpb25CeU1ldGF2YXJpYWJsZU5vZGUiLCJzaW1wbGVEZXJpdmVkU3Vic3RpdHV0aW9uIiwiZmluZFNpbXBsZURlcml2ZWRTdWJzdGl0dXRpb25CeU1ldGF2YXJpYWJsZU5vZGUiLCJkZXJpdmVkU3Vic3RpdHV0aW9uU2ltcGxlIiwiaXNTaW1wbGUiLCJtZXRhdmFyaWFibGVOb2RlTWF0Y2hlcyIsIm1hdGNoTWV0YXZhcmlhYmxlTm9kZSIsImRlcml2ZWRTdWJzdGl0dXRpb25Db21wbGV4IiwiaXNDb21wbGV4IiwiZmluZERlcml2ZWRTdWJzdGl0dXRpb25CeU1ldGF2YXJpYWJsZU5vZGVBbmRTdWJzdGl0dXRpb25Ob2RlIiwic3Vic3RpdHV0aW9uTm9kZSIsInN1YnN0aXR1dGlvbk5vZGVNYXRjaGVzIiwibWF0Y2hTdWJzdGl0dXRpb25Ob2RlIiwiaXNEZXJpdmVkU3Vic3RpdHV0aW9uUHJlc2VudEJ5TWV0YXZhcmlhYmxlTm9kZSIsImRlcml2ZWRTdWJzdGl0dXRpb25QcmVzZW50IiwiaXNEZXJpdmVkU3Vic3RpdHV0aW9uUHJlc2VudEJ5TWV0YXZhcmlhYmxlTm9kZUFuZFN1YnN0aXR1dGlvbk5vZGUiLCJmcm9tTm90aGluZyIsImxpbWluYWxDb250ZXh0Il0sIm1hcHBpbmdzIjoiQUFBQTs7OzsrQkFhQTs7O2VBQXFCQTs7OzJCQVhVO2dDQUNPO2dFQUVsQjtpRUFDQzsrQkFFcUM7Ozs7OztBQUUxRCxNQUFNLEVBQUVDLElBQUksRUFBRUMsSUFBSSxFQUFFQyxLQUFLLEVBQUUsR0FBR0MseUJBQWMsRUFDdEMsRUFBRUMsbUJBQW1CLEVBQUUsR0FBR0MscUNBQXFCO0FBRXRDLE1BQU1OLHVCQUF1Qk8sZ0JBQU87SUFDakQsWUFBWUMsT0FBTyxFQUFFQyxvQkFBb0IsQ0FBRTtRQUN6QyxLQUFLLENBQUNEO1FBRU4sSUFBSSxDQUFDQyxvQkFBb0IsR0FBR0E7SUFDOUI7SUFFQUMsd0JBQXdCRCx1QkFBdUIsRUFBRSxFQUFFO1FBQ2pELE1BQU1ELFVBQVUsSUFBSSxDQUFDRyxVQUFVO1FBRS9CVixLQUFLUSxzQkFBc0IsSUFBSSxDQUFDQSxvQkFBb0I7UUFFcERELFFBQVFFLHVCQUF1QixDQUFDRDtRQUVoQyxPQUFPQTtJQUNUO0lBRUFHLDZCQUE2QjtRQUMzQixJQUFJQywwQkFBMEI7UUFFOUIsTUFBTUMsNkJBQTZCLElBQUksQ0FBQ0wsb0JBQW9CLENBQUNNLE1BQU07UUFFbkUsSUFBSUQsK0JBQStCLEdBQUc7WUFDcEMsTUFBTUUsMkJBQTJCYixNQUFNLElBQUksQ0FBQ00sb0JBQW9C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
201
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb250ZXh0L2xpbWluYWwuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IGFycmF5VXRpbGl0aWVzIH0gZnJvbSBcIm5lY2Vzc2FyeVwiO1xuaW1wb3J0IHsgY29udGludWF0aW9uVXRpbGl0aWVzIH0gZnJvbSBcIm9jY2FtLWxhbmd1YWdlc1wiO1xuXG5pbXBvcnQgQ29udGV4dCBmcm9tIFwiLi4vY29udGV4dFwiO1xuaW1wb3J0IGVsZW1lbnRzIGZyb20gXCIuLi9lbGVtZW50c1wiO1xuXG5pbXBvcnQgeyBtZXRhdmFyaWFibGVOb2Rlc0Zyb21EZXJpdmVkU3Vic3RpdHV0aW9ucyB9IGZyb20gXCIuLi91dGlsaXRpZXMvc3Vic3RpdHV0aW9uc1wiO1xuXG5jb25zdCB7IHB1c2gsIGZpbmQsIGZpcnN0IH0gPSBhcnJheVV0aWxpdGllcyxcbiAgICAgIHsgYXN5bmNocm9ub3VzRm9yRWFjaCB9ID0gY29udGludWF0aW9uVXRpbGl0aWVzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBMaW1pbmFsQ29udGV4dCBleHRlbmRzIENvbnRleHQge1xuICBjb25zdHJ1Y3Rvcihjb250ZXh0LCBkZXJpdmVkU3Vic3RpdHV0aW9ucykge1xuICAgIHN1cGVyKGNvbnRleHQpO1xuXG4gICAgdGhpcy5kZXJpdmVkU3Vic3RpdHV0aW9ucyA9IGRlcml2ZWRTdWJzdGl0dXRpb25zO1xuICB9XG5cbiAgZ2V0RGVyaXZlZFN1YnN0aXR1dGlvbnMoZGVyaXZlZFN1YnN0aXR1dGlvbnMgPSBbXSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKTtcblxuICAgIHB1c2goZGVyaXZlZFN1YnN0aXR1dGlvbnMsIHRoaXMuZGVyaXZlZFN1YnN0aXR1dGlvbnMpO1xuXG4gICAgY29udGV4dC5nZXREZXJpdmVkU3Vic3RpdHV0aW9ucyhkZXJpdmVkU3Vic3RpdHV0aW9ucyk7XG5cbiAgICByZXR1cm4gZGVyaXZlZFN1YnN0aXR1dGlvbnM7XG4gIH1cblxuICBnZXRTb2xlRGVyaXZlZFN1YnN0aXR1dGlvbigpIHtcbiAgICBsZXQgc29sZURlcml2ZWRTdWJzdGl0dXRpb24gPSBudWxsO1xuXG4gICAgY29uc3QgZGVyaXZlZFN1YnN0aXR1dGlvbnNMZW5ndGggPSB0aGlzLmRlcml2ZWRTdWJzdGl0dXRpb25zLmxlbmd0aDtcblxuICAgIGlmIChkZXJpdmVkU3Vic3RpdHV0aW9uc0xlbmd0aCA9PT0gMSkge1xuICAgICAgY29uc3QgZmlyc3REZXJpdmVkU3Vic3RpdHV0aW9uID0gZmlyc3QodGhpcy5kZXJpdmVkU3Vic3RpdHV0aW9ucyk7XG5cbiAgICAgIHNvbGVEZXJpdmVkU3Vic3RpdHV0aW9uID0gZmlyc3REZXJpdmVkU3Vic3RpdHV0aW9uOyAvLy9cbiAgICB9XG5cbiAgICByZXR1cm4gc29sZURlcml2ZWRTdWJzdGl0dXRpb247XG4gIH1cblxuICBnZXRTb2xlTm9uVHJpdmlhbERlcml2ZWRTdWJzdGl0dXRpb24oKSB7XG4gICAgbGV0IHNvbGVOb25Ucml2aWFsRGVyaXZlZFN1YnN0aXR1dGlvbiA9IG51bGw7XG5cbiAgICBjb25zdCBzb2xlRGVyaXZlZFN1YnN0aXR1dGlvbiA9IHRoaXMuZ2V0U29sZURlcml2ZWRTdWJzdGl0dXRpb24oKTtcblxuICAgIGlmIChzb2xlRGVyaXZlZFN1YnN0aXR1dGlvbiAhPT0gbnVsbCkge1xuICAgICAgY29uc3Qgc29sZURlcml2ZWRTdWJzdGl0dXRpb25Ob25Ucml2aWFsID0gc29sZURlcml2ZWRTdWJzdGl0dXRpb24uaXNOb25Ucml2aWFsKCk7XG5cbiAgICAgIGlmIChzb2xlRGVyaXZlZFN1YnN0aXR1dGlvbk5vblRyaXZpYWwpIHtcbiAgICAgICAgc29sZU5vblRyaXZpYWxEZXJpdmVkU3Vic3RpdHV0aW9uID0gc29sZURlcml2ZWRTdWJzdGl0dXRpb247ICAvLy9cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gc29sZU5vblRyaXZpYWxEZXJpdmVkU3Vic3RpdHV0aW9uO1xuICB9XG5cbiAgYWRkRGVyaXZlZFN1YnN0aXR1dGlvbihkZXJpdmVkU3Vic3RpdHV0aW9uKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMsIC8vL1xuICAgICAgICAgIGRlcml2ZWRTdWJzdGl0dXRpb25BID0gZGVyaXZlZFN1YnN0aXR1dGlvbiwgLy8vXG4gICAgICAgICAgZGVyaXZlZFN1YnN0aXR1dGlvblN0cmluZyA9IGRlcml2ZWRTdWJzdGl0dXRpb24uZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBBZGRpbmcgdGhlICcke2Rlcml2ZWRTdWJzdGl0dXRpb25TdHJpbmd9JyBkZXJpdmVkIHN1YnN0aXR1dGlvbiB0byB0aGUgbGltaW5hbCBjb250ZXh0Li4uYCk7XG5cbiAgICBjb25zdCBkZXJpdmVkU3Vic3RpdHV0aW9uQiA9IHRoaXMuZGVyaXZlZFN1YnN0aXR1dGlvbnMuZmluZCgoZGVyaXZlZFN1YnN0aXR1dGlvbikgPT4ge1xuICAgICAgY29uc3QgZGVyaXZlZFN1YnN0aXR1dGlvbkIgPSBkZXJpdmVkU3Vic3RpdHV0aW9uLCAvLy9cbiAgICAgICAgICAgIGRlcml2ZWRTdWJzdGl0dXRpb25BRXF1YWxUb0Rlcml2ZWRTdWJzdGl0dXRpb25CID0gZGVyaXZlZFN1YnN0aXR1dGlvbkEuaXNFcXVhbFRvKGRlcml2ZWRTdWJzdGl0dXRpb25CKTtcblxuICAgICAgaWYgKGRlcml2ZWRTdWJzdGl0dXRpb25BRXF1YWxUb0Rlcml2ZWRTdWJzdGl0dXRpb25CKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH0pIHx8IG51bGw7XG5cbiAgICBpZiAoZGVyaXZlZFN1YnN0aXR1dGlvbkIgIT09IG51bGwpIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYFRoZSAnJHtkZXJpdmVkU3Vic3RpdHV0aW9uU3RyaW5nfScgZGVyaXZlZCBzdWJzdGl0dXRpb24gaGFzIGFscmVhZHkgYmVlbiBhZGRlZCB0byB0aGUgbGltaW5hbCBjb250ZXh0LmApO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmRlcml2ZWRTdWJzdGl0dXRpb25zLnB1c2goZGVyaXZlZFN1YnN0aXR1dGlvbik7XG4gICAgfVxuXG4gICAgY29udGV4dC5kZWJ1ZyhgLi4uYWRkZWQgdGhlICcke2Rlcml2ZWRTdWJzdGl0dXRpb25TdHJpbmd9JyBkZXJpdmVkIHN1YnN0aXR1dGlvbiB0byB0aGUgbGltaW5hbCBjb250ZXh0LmApO1xuICB9XG5cbiAgYWRkRGVyaXZlZFN1YnN0aXR1dGlvbnMoZGVyaXZlZFN1YnN0aXR1dGlvbnMpIHtcbiAgICBkZXJpdmVkU3Vic3RpdHV0aW9ucy5mb3JFYWNoKChkZXJpdmVkU3Vic3RpdHV0aW9uKSA9PiB7XG4gICAgICB0aGlzLmFkZERlcml2ZWRTdWJzdGl0dXRpb24oZGVyaXZlZFN1YnN0aXR1dGlvbik7XG4gICAgfSk7XG4gIH1cblxuICBzb2x2ZURlcml2ZWRTdWJzdGl0dXRpb25zKGNvbnRpbnVhdGlvbikge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLCAvLy9cbiAgICAgICAgICBkZXJpdmVkU3Vic3RpdHV0aW9ucyA9IHRoaXMuZ2V0RGVyaXZlZFN1YnN0aXR1dGlvbnMoKSxcbiAgICAgICAgICBtZXRhdmFyaWFibGVOb2RlcyA9IG1ldGF2YXJpYWJsZU5vZGVzRnJvbURlcml2ZWRTdWJzdGl0dXRpb25zKGRlcml2ZWRTdWJzdGl0dXRpb25zKTtcblxuICAgIHJldHVybiBhc3luY2hyb25vdXNGb3JFYWNoKG1ldGF2YXJpYWJsZU5vZGVzLCAobWV0YXZhcmlhYmxlTm9kZSwgY29udGludWF0aW9uKSA9PiB7XG4gICAgICBjb25zdCBjb21wbGV4RGVyaXZlZFN1YnN0aXR1dGlvbnMgPSB0aGlzLmZpbmRDb21wbGV4RGVyaXZlZFN1YnN0aXR1dGlvbnNCeU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSk7XG5cbiAgICAgIHJldHVybiBhc3luY2hyb25vdXNGb3JFYWNoKGNvbXBsZXhEZXJpdmVkU3Vic3RpdHV0aW9ucywgKGNvbXBsZXhEZXJpdmVkU3Vic3RpdHV0aW9uLCBjb250aW51YXRpb24pID0+IHtcbiAgICAgICAgY29uc3QgZGVyaXZlZFN1YnN0aXR1dGlvbiA9IGNvbXBsZXhEZXJpdmVkU3Vic3RpdHV0aW9uLCAvLy9cbiAgICAgICAgICAgICAgc29sdmVkID0gZGVyaXZlZFN1YnN0aXR1dGlvbi5pc1NvbHZlZCgpO1xuXG4gICAgICAgIGlmIChzb2x2ZWQpIHtcbiAgICAgICAgICByZXR1cm4gY29udGludWF0aW9uKCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZGVyaXZlZFN1YnN0aXR1dGlvbi5zb2x2ZShjb250ZXh0LCBjb250aW51YXRpb24pO1xuICAgICAgfSwgY29udGludWF0aW9uKTtcbiAgICB9LCBjb250aW51YXRpb24pO1xuICB9XG5cbiAgYXJlRGVyaXZlZFN1YnN0aXR1dGlvbnNTb2x2ZWQoKSB7XG4gICAgY29uc3QgZGVyaXZlZFN1YnN0aXR1dGlvbnMgPSB0aGlzLmdldERlcml2ZWRTdWJzdGl0dXRpb25zKCksXG4gICAgICAgICAgbWV0YXZhcmlhYmxlTm9kZXMgPSBtZXRhdmFyaWFibGVOb2Rlc0Zyb21EZXJpdmVkU3Vic3RpdHV0aW9ucyhkZXJpdmVkU3Vic3RpdHV0aW9ucyksXG4gICAgICAgICAgc29sdmVkID0gbWV0YXZhcmlhYmxlTm9kZXMuZXZlcnkoKG1ldGF2YXJpYWJsZU5vZGUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGNvbXBsZXhEZXJpdmVkU3Vic3RpdHV0aW9ucyA9IHRoaXMuZmluZENvbXBsZXhEZXJpdmVkU3Vic3RpdHV0aW9uc0J5TWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlKSxcbiAgICAgICAgICAgICAgICAgIGNvbXBsZXhEZXJpdmVkU3Vic3RpdHV0aW9uc1NvbHZlZCA9IGNvbXBsZXhEZXJpdmVkU3Vic3RpdHV0aW9ucy5ldmVyeSgoY29tcGxleERlcml2ZWRTdWJzdGl0dXRpb24pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY29tcGxleERlcml2ZWRTdWJzdGl0dXRpb25Tb2x2ZWQgPSBjb21wbGV4RGVyaXZlZFN1YnN0aXR1dGlvbi5pc1NvbHZlZCgpO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChjb21wbGV4RGVyaXZlZFN1YnN0aXR1dGlvblNvbHZlZCkge1xuICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaWYgKGNvbXBsZXhEZXJpdmVkU3Vic3RpdHV0aW9uc1NvbHZlZCkge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcblxuICAgIHJldHVybiBzb2x2ZWQ7XG4gIH1cblxuICBpc0VtcHR5KCkge1xuICAgIGNvbnN0IGRlcml2ZWRTdWJzdGl0dXRpb25zTGVuZ3RoID0gdGhpcy5kZXJpdmVkU3Vic3RpdHV0aW9ucy5sZW5ndGgsXG4gICAgICAgICAgZW1wdHkgPSAoZGVyaXZlZFN1YnN0aXR1dGlvbnNMZW5ndGggPT09IDApO1xuXG4gICAgcmV0dXJuIGVtcHR5O1xuICB9XG5cbiAgcXVhbGlmeShhc3N1bXB0aW9uLCBjb25zdHJhaW50KSB7XG4gICAgbGV0IHF1YWxpZmllcyA9IGZhbHNlO1xuXG4gICAgY29uc3QgZW1wdHkgPSB0aGlzLmlzRW1wdHkoKTtcblxuICAgIGlmIChlbXB0eSkge1xuICAgICAgcXVhbGlmaWVzID0gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3Qgc29sZURlcml2ZWRTdWJzdGl0dXRpb24gPSB0aGlzLmdldFNvbGVEZXJpdmVkU3Vic3RpdHV0aW9uKCk7XG5cbiAgICAgIGlmIChzb2xlRGVyaXZlZFN1YnN0aXR1dGlvbiAhPT0gbnVsbCkge1xuICAgICAgICBjb25zdCB7IFJlZmVyZW5jZURlcml2ZWRTdWJzdGl0dXRpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICAgICAgICBjb250ZXh0ID0gdGhpcywgLy8vXG4gICAgICAgICAgICAgIHJlZmVyZW5jZURlcml2ZWRTdWJzdGl0dXRpb24gPSBSZWZlcmVuY2VEZXJpdmVkU3Vic3RpdHV0aW9uLmZyb21Bc3N1bXB0aW9uQW5kQ29uc3RyYWludChhc3N1bXB0aW9uLCBjb25zdHJhaW50LCBjb250ZXh0KSxcbiAgICAgICAgICAgICAgcmVmZXJlbmNlRGVyaXZlZFN1YnN0aXR1dGlvbkNvbXBhcmVzVG9Tc29sZURlcml2ZWRTdWJzdGl0dXRpb24gPSByZWZlcmVuY2VEZXJpdmVkU3Vic3RpdHV0aW9uLmNvbXBhcmVTdWJzdGl0dXRpb24oc29sZURlcml2ZWRTdWJzdGl0dXRpb24pO1xuXG4gICAgICAgIGlmIChyZWZlcmVuY2VEZXJpdmVkU3Vic3RpdHV0aW9uQ29tcGFyZXNUb1Nzb2xlRGVyaXZlZFN1YnN0aXR1dGlvbikge1xuICAgICAgICAgIHF1YWxpZmllcyA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcXVhbGlmaWVzO1xuICB9XG5cbiAgY29tbWl0KGNvbnRleHQpIHtcbiAgICBpZiAoY29udGV4dCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCk7XG4gICAgfVxuXG4gICAgY29udGV4dC5kZWJ1ZyhgQ29tbWl0dGluZyB0aGUgbGltaW5hbCBjb250ZXh0YCk7XG5cbiAgICBjb250ZXh0LmFkZERlcml2ZWRTdWJzdGl0dXRpb25zKHRoaXMuZGVyaXZlZFN1YnN0aXR1dGlvbnMpO1xuICB9XG5cbiAgZmluZERlcml2ZWRTdWJzdGl0dXRpb24oY2FsbGJhY2spIHtcbiAgICBjb25zdCBkZXJpdmVkU3Vic3RpdHV0aW9ucyA9IHRoaXMuZ2V0RGVyaXZlZFN1YnN0aXR1dGlvbnMoKSxcbiAgICAgICAgICBkZXJpdmVkU3Vic3RpdHV0aW9uID0gZGVyaXZlZFN1YnN0aXR1dGlvbnMuZmluZChjYWxsYmFjayk7XG5cbiAgICByZXR1cm4gZGVyaXZlZFN1YnN0aXR1dGlvbjtcbiAgfVxuXG4gIGZpbmREZXJpdmVkU3Vic3RpdHV0aW9ucyhjYWxsYmFjaykge1xuICAgIGxldCBkZXJpdmVkU3Vic3RpdHV0aW9ucztcblxuICAgIGRlcml2ZWRTdWJzdGl0dXRpb25zID0gdGhpcy5nZXREZXJpdmVkU3Vic3RpdHV0aW9ucygpO1xuXG4gICAgZGVyaXZlZFN1YnN0aXR1dGlvbnMgPSBmaW5kKGRlcml2ZWRTdWJzdGl0dXRpb25zLCBjYWxsYmFjayk7ICAvLy9cblxuICAgIHJldHVybiBkZXJpdmVkU3Vic3RpdHV0aW9ucztcbiAgfVxuXG4gIGZpbmREZXJpdmVkU3Vic3RpdHV0aW9uQnlWYXJpYWJsZU5vZGUodmFyaWFibGVOb2RlKSB7XG4gICAgY29uc3QgZGVyaXZlZFN1YnN0aXR1dGlvbiA9IHRoaXMuZmluZERlcml2ZWRTdWJzdGl0dXRpb24oKGRlcml2ZWRTdWJzdGl0dXRpb24pID0+IHtcbiAgICAgIGNvbnN0IHZhcmlhYmxlTm9kZU1hdGNoZXMgPSBkZXJpdmVkU3Vic3RpdHV0aW9uLm1hdGNoVmFyaWFibGVOb2RlKHZhcmlhYmxlTm9kZSk7XG5cbiAgICAgIGlmICh2YXJpYWJsZU5vZGVNYXRjaGVzKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH0pIHx8IG51bGw7XG5cbiAgICByZXR1cm4gZGVyaXZlZFN1YnN0aXR1dGlvbjtcbiAgfVxuXG4gIGZpbmREZXJpdmVkU3Vic3RpdHV0aW9uQnlNZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpIHtcbiAgICBjb25zdCBzaW1wbGVEZXJpdmVkU3Vic3RpdHV0aW9uID0gdGhpcy5maW5kU2ltcGxlRGVyaXZlZFN1YnN0aXR1dGlvbkJ5TWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlKSxcbiAgICAgICAgICBkZXJpdmVkU3Vic3RpdHV0aW9uID0gc2ltcGxlRGVyaXZlZFN1YnN0aXR1dGlvbjsgIC8vL1xuXG4gICAgcmV0dXJuIGRlcml2ZWRTdWJzdGl0dXRpb247XG4gIH1cblxuICBmaW5kU2ltcGxlRGVyaXZlZFN1YnN0aXR1dGlvbkJ5TWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlKSB7XG4gICAgY29uc3Qgc2ltcGxlRGVyaXZlZFN1YnN0aXR1dGlvbiA9IHRoaXMuZmluZERlcml2ZWRTdWJzdGl0dXRpb24oKGRlcml2ZWRTdWJzdGl0dXRpb24pID0+IHtcbiAgICAgIGNvbnN0IGRlcml2ZWRTdWJzdGl0dXRpb25TaW1wbGUgPSBkZXJpdmVkU3Vic3RpdHV0aW9uLmlzU2ltcGxlKCk7XG5cbiAgICAgIGlmIChkZXJpdmVkU3Vic3RpdHV0aW9uU2ltcGxlKSB7XG4gICAgICAgIGNvbnN0IHNpbXBsZURlcml2ZWRTdWJzdGl0dXRpb24gPSBkZXJpdmVkU3Vic3RpdHV0aW9uLCAgLy8vXG4gICAgICAgICAgICAgIG1ldGF2YXJpYWJsZU5vZGVNYXRjaGVzID0gc2ltcGxlRGVyaXZlZFN1YnN0aXR1dGlvbi5tYXRjaE1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSk7XG5cbiAgICAgICAgaWYgKG1ldGF2YXJpYWJsZU5vZGVNYXRjaGVzKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KSB8fCBudWxsO1xuXG4gICAgcmV0dXJuIHNpbXBsZURlcml2ZWRTdWJzdGl0dXRpb247XG4gIH1cblxuICBmaW5kQ29tcGxleERlcml2ZWRTdWJzdGl0dXRpb25zQnlNZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpIHtcbiAgICBjb25zdCBjb21wbGV4RGVyaXZlZFN1YnN0aXR1dGlvbiA9IHRoaXMuZmluZERlcml2ZWRTdWJzdGl0dXRpb25zKChkZXJpdmVkU3Vic3RpdHV0aW9uKSA9PiB7XG4gICAgICBjb25zdCBkZXJpdmVkU3Vic3RpdHV0aW9uQ29tcGxleCA9IGRlcml2ZWRTdWJzdGl0dXRpb24uaXNDb21wbGV4KCk7XG5cbiAgICAgIGlmIChkZXJpdmVkU3Vic3RpdHV0aW9uQ29tcGxleCkge1xuICAgICAgICBjb25zdCBjb21wbGV4RGVyaXZlZFN1YnN0aXR1dGlvbiA9IGRlcml2ZWRTdWJzdGl0dXRpb24sICAvLy9cbiAgICAgICAgICAgICAgbWV0YXZhcmlhYmxlTm9kZU1hdGNoZXMgPSBjb21wbGV4RGVyaXZlZFN1YnN0aXR1dGlvbi5tYXRjaE1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSk7XG5cbiAgICAgICAgaWYgKG1ldGF2YXJpYWJsZU5vZGVNYXRjaGVzKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KSB8fCBudWxsO1xuXG4gICAgcmV0dXJuIGNvbXBsZXhEZXJpdmVkU3Vic3RpdHV0aW9uO1xuICB9XG5cbiAgZmluZERlcml2ZWRTdWJzdGl0dXRpb25CeU1ldGF2YXJpYWJsZU5vZGVBbmRTdWJzdGl0dXRpb25Ob2RlKG1ldGF2YXJpYWJsZU5vZGUsIHN1YnN0aXR1dGlvbk5vZGUpIHtcbiAgICBjb25zdCBkZXJpdmVkU3Vic3RpdHV0aW9uID0gdGhpcy5maW5kRGVyaXZlZFN1YnN0aXR1dGlvbigoZGVyaXZlZFN1YnN0aXR1dGlvbikgPT4geyAgLy8vXG4gICAgICAgICAgICBjb25zdCBtZXRhdmFyaWFibGVOb2RlTWF0Y2hlcyA9IGRlcml2ZWRTdWJzdGl0dXRpb24ubWF0Y2hNZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpO1xuXG4gICAgICAgICAgICBpZiAobWV0YXZhcmlhYmxlTm9kZU1hdGNoZXMpIHtcbiAgICAgICAgICAgICAgY29uc3Qgc3Vic3RpdHV0aW9uTm9kZU1hdGNoZXMgPSBkZXJpdmVkU3Vic3RpdHV0aW9uLm1hdGNoU3Vic3RpdHV0aW9uTm9kZShzdWJzdGl0dXRpb25Ob2RlKTtcblxuICAgICAgICAgICAgICBpZiAoc3Vic3RpdHV0aW9uTm9kZU1hdGNoZXMpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pIHx8IG51bGw7XG5cbiAgICByZXR1cm4gZGVyaXZlZFN1YnN0aXR1dGlvbjtcbiAgfVxuXG4gIGlzRGVyaXZlZFN1YnN0aXR1dGlvblByZXNlbnRCeU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSkge1xuICAgIGNvbnN0IGRlcml2ZWRTdWJzdGl0dXRpb24gPSB0aGlzLmZpbmREZXJpdmVkU3Vic3RpdHV0aW9uQnlNZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpLFxuICAgICAgICAgIGRlcml2ZWRTdWJzdGl0dXRpb25QcmVzZW50ID0gKGRlcml2ZWRTdWJzdGl0dXRpb24gIT09IG51bGwpO1xuXG4gICAgcmV0dXJuIGRlcml2ZWRTdWJzdGl0dXRpb25QcmVzZW50O1xuICB9XG5cbiAgaXNEZXJpdmVkU3Vic3RpdHV0aW9uUHJlc2VudEJ5TWV0YXZhcmlhYmxlTm9kZUFuZFN1YnN0aXR1dGlvbk5vZGUobWV0YXZhcmlhYmxlTm9kZSwgc3Vic3RpdHV0aW9uTm9kZSkge1xuICAgIGNvbnN0IGRlcml2ZWRTdWJzdGl0dXRpb24gPSB0aGlzLmZpbmREZXJpdmVkU3Vic3RpdHV0aW9uQnlNZXRhdmFyaWFibGVOb2RlQW5kU3Vic3RpdHV0aW9uTm9kZShtZXRhdmFyaWFibGVOb2RlLCBzdWJzdGl0dXRpb25Ob2RlKSxcbiAgICAgICAgICBkZXJpdmVkU3Vic3RpdHV0aW9uUHJlc2VudCA9IChkZXJpdmVkU3Vic3RpdHV0aW9uICE9PSBudWxsKTtcblxuICAgIHJldHVybiBkZXJpdmVkU3Vic3RpdHV0aW9uUHJlc2VudDtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tTm90aGluZyhjb250ZXh0KSB7XG4gICAgY29uc3QgZGVyaXZlZFN1YnN0aXR1dGlvbnMgPSBbXSxcbiAgICAgICAgICBsaW1pbmFsQ29udGV4dCA9IG5ldyBMaW1pbmFsQ29udGV4dChjb250ZXh0LCBkZXJpdmVkU3Vic3RpdHV0aW9ucyk7XG5cbiAgICByZXR1cm4gbGltaW5hbENvbnRleHQ7XG4gIH1cbn1cbiJdLCJuYW1lcyI6WyJMaW1pbmFsQ29udGV4dCIsInB1c2giLCJmaW5kIiwiZmlyc3QiLCJhcnJheVV0aWxpdGllcyIsImFzeW5jaHJvbm91c0ZvckVhY2giLCJjb250aW51YXRpb25VdGlsaXRpZXMiLCJDb250ZXh0IiwiY29udGV4dCIsImRlcml2ZWRTdWJzdGl0dXRpb25zIiwiZ2V0RGVyaXZlZFN1YnN0aXR1dGlvbnMiLCJnZXRDb250ZXh0IiwiZ2V0U29sZURlcml2ZWRTdWJzdGl0dXRpb24iLCJzb2xlRGVyaXZlZFN1YnN0aXR1dGlvbiIsImRlcml2ZWRTdWJzdGl0dXRpb25zTGVuZ3RoIiwibGVuZ3RoIiwiZmlyc3REZXJpdmVkU3Vic3RpdHV0aW9uIiwiZ2V0U29sZU5vblRyaXZpYWxEZXJpdmVkU3Vic3RpdHV0aW9uIiwic29sZU5vblRyaXZpYWxEZXJpdmVkU3Vic3RpdHV0aW9uIiwic29sZURlcml2ZWRTdWJzdGl0dXRpb25Ob25Ucml2aWFsIiwiaXNOb25Ucml2aWFsIiwiYWRkRGVyaXZlZFN1YnN0aXR1dGlvbiIsImRlcml2ZWRTdWJzdGl0dXRpb24iLCJkZXJpdmVkU3Vic3RpdHV0aW9uQSIsImRlcml2ZWRTdWJzdGl0dXRpb25TdHJpbmciLCJnZXRTdHJpbmciLCJ0cmFjZSIsImRlcml2ZWRTdWJzdGl0dXRpb25CIiwiZGVyaXZlZFN1YnN0aXR1dGlvbkFFcXVhbFRvRGVyaXZlZFN1YnN0aXR1dGlvbkIiLCJpc0VxdWFsVG8iLCJkZWJ1ZyIsImFkZERlcml2ZWRTdWJzdGl0dXRpb25zIiwiZm9yRWFjaCIsInNvbHZlRGVyaXZlZFN1YnN0aXR1dGlvbnMiLCJjb250aW51YXRpb24iLCJtZXRhdmFyaWFibGVOb2RlcyIsIm1ldGF2YXJpYWJsZU5vZGVzRnJvbURlcml2ZWRTdWJzdGl0dXRpb25zIiwibWV0YXZhcmlhYmxlTm9kZSIsImNvbXBsZXhEZXJpdmVkU3Vic3RpdHV0aW9ucyIsImZpbmRDb21wbGV4RGVyaXZlZFN1YnN0aXR1dGlvbnNCeU1ldGF2YXJpYWJsZU5vZGUiLCJjb21wbGV4RGVyaXZlZFN1YnN0aXR1dGlvbiIsInNvbHZlZCIsImlzU29sdmVkIiwic29sdmUiLCJhcmVEZXJpdmVkU3Vic3RpdHV0aW9uc1NvbHZlZCIsImV2ZXJ5IiwiY29tcGxleERlcml2ZWRTdWJzdGl0dXRpb25zU29sdmVkIiwiY29tcGxleERlcml2ZWRTdWJzdGl0dXRpb25Tb2x2ZWQiLCJpc0VtcHR5IiwiZW1wdHkiLCJxdWFsaWZ5IiwiYXNzdW1wdGlvbiIsImNvbnN0cmFpbnQiLCJxdWFsaWZpZXMiLCJSZWZlcmVuY2VEZXJpdmVkU3Vic3RpdHV0aW9uIiwiZWxlbWVudHMiLCJyZWZlcmVuY2VEZXJpdmVkU3Vic3RpdHV0aW9uIiwiZnJvbUFzc3VtcHRpb25BbmRDb25zdHJhaW50IiwicmVmZXJlbmNlRGVyaXZlZFN1YnN0aXR1dGlvbkNvbXBhcmVzVG9Tc29sZURlcml2ZWRTdWJzdGl0dXRpb24iLCJjb21wYXJlU3Vic3RpdHV0aW9uIiwiY29tbWl0IiwidW5kZWZpbmVkIiwiZmluZERlcml2ZWRTdWJzdGl0dXRpb24iLCJjYWxsYmFjayIsImZpbmREZXJpdmVkU3Vic3RpdHV0aW9ucyIsImZpbmREZXJpdmVkU3Vic3RpdHV0aW9uQnlWYXJpYWJsZU5vZGUiLCJ2YXJpYWJsZU5vZGUiLCJ2YXJpYWJsZU5vZGVNYXRjaGVzIiwibWF0Y2hWYXJpYWJsZU5vZGUiLCJmaW5kRGVyaXZlZFN1YnN0aXR1dGlvbkJ5TWV0YXZhcmlhYmxlTm9kZSIsInNpbXBsZURlcml2ZWRTdWJzdGl0dXRpb24iLCJmaW5kU2ltcGxlRGVyaXZlZFN1YnN0aXR1dGlvbkJ5TWV0YXZhcmlhYmxlTm9kZSIsImRlcml2ZWRTdWJzdGl0dXRpb25TaW1wbGUiLCJpc1NpbXBsZSIsIm1ldGF2YXJpYWJsZU5vZGVNYXRjaGVzIiwibWF0Y2hNZXRhdmFyaWFibGVOb2RlIiwiZGVyaXZlZFN1YnN0aXR1dGlvbkNvbXBsZXgiLCJpc0NvbXBsZXgiLCJmaW5kRGVyaXZlZFN1YnN0aXR1dGlvbkJ5TWV0YXZhcmlhYmxlTm9kZUFuZFN1YnN0aXR1dGlvbk5vZGUiLCJzdWJzdGl0dXRpb25Ob2RlIiwic3Vic3RpdHV0aW9uTm9kZU1hdGNoZXMiLCJtYXRjaFN1YnN0aXR1dGlvbk5vZGUiLCJpc0Rlcml2ZWRTdWJzdGl0dXRpb25QcmVzZW50QnlNZXRhdmFyaWFibGVOb2RlIiwiZGVyaXZlZFN1YnN0aXR1dGlvblByZXNlbnQiLCJpc0Rlcml2ZWRTdWJzdGl0dXRpb25QcmVzZW50QnlNZXRhdmFyaWFibGVOb2RlQW5kU3Vic3RpdHV0aW9uTm9kZSIsImZyb21Ob3RoaW5nIiwibGltaW5hbENvbnRleHQiXSwibWFwcGluZ3MiOiJBQUFBOzs7OytCQWFBOzs7ZUFBcUJBOzs7MkJBWFU7Z0NBQ087Z0VBRWxCO2lFQUNDOytCQUVxQzs7Ozs7O0FBRTFELE1BQU0sRUFBRUMsSUFBSSxFQUFFQyxJQUFJLEVBQUVDLEtBQUssRUFBRSxHQUFHQyx5QkFBYyxFQUN0QyxFQUFFQyxtQkFBbUIsRUFBRSxHQUFHQyxxQ0FBcUI7QUFFdEMsTUFBTU4sdUJBQXVCTyxnQkFBTztJQUNqRCxZQUFZQyxPQUFPLEVBQUVDLG9CQUFvQixDQUFFO1FBQ3pDLEtBQUssQ0FBQ0Q7UUFFTixJQUFJLENBQUNDLG9CQUFvQixHQUFHQTtJQUM5QjtJQUVBQyx3QkFBd0JELHVCQUF1QixFQUFFLEVBQUU7UUFDakQsTUFBTUQsVUFBVSxJQUFJLENBQUNHLFVBQVU7UUFFL0JWLEtBQUtRLHNCQUFzQixJQUFJLENBQUNBLG9CQUFvQjtRQUVwREQsUUFBUUUsdUJBQXVCLENBQUNEO1FBRWhDLE9BQU9BO0lBQ1Q7SUFFQUcsNkJBQTZCO1FBQzNCLElBQUlDLDBCQUEwQjtRQUU5QixNQUFNQyw2QkFBNkIsSUFBSSxDQUFDTCxvQkFBb0IsQ0FBQ00sTUFBTTtRQUVuRSxJQUFJRCwrQkFBK0IsR0FBRztZQUNwQyxNQUFNRSwyQkFBMkJiLE1BQU0sSUFBSSxDQUFDTSxvQkFBb0I7WUFFaEVJLDBCQUEwQkcsMEJBQTBCLEdBQUc7UUFDekQ7UUFFQSxP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
@@ -203,8 +203,8 @@ class Claim extends _occamlanguages.Element {
203
203
  return this.unifyFactOrSubproofsWithSuppositions(factorSubproofs, context, (factorSubproofsUnifiesWithSuppositions)=>{
204
204
  let stepAndFactOrSubproofsUnify = false;
205
205
  if (factorSubproofsUnifiesWithSuppositions) {
206
- const derivedSubstitutionsResolved = context.areDerivedSubstitutionsResolved();
207
- if (derivedSubstitutionsResolved) {
206
+ const derivedSubstitutionsSolved = context.areDerivedSubstitutionsSolved();
207
+ if (derivedSubstitutionsSolved) {
208
208
  stepAndFactOrSubproofsUnify = true;
209
209
  }
210
210
  }
@@ -219,7 +219,7 @@ class Claim extends _occamlanguages.Element {
219
219
  }, (factOrSubproof = null)=>{
220
220
  if (factOrSubproof !== null) {
221
221
  const factorSubproofsUnifiesWithSupposition = true;
222
- return context.resolveDerivedSubstitutions(()=>{
222
+ return context.solveDerivedSubstitutions(()=>{
223
223
  return continuation(factorSubproofsUnifiesWithSupposition);
224
224
  });
225
225
  }
@@ -255,4 +255,4 @@ class Claim extends _occamlanguages.Element {
255
255
  }
256
256
  }
257
257
 
258
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9lbGVtZW50L2NsYWltLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBhcnJheVV0aWxpdGllcyB9IGZyb20gXCJuZWNlc3NhcnlcIjtcbmltcG9ydCB7IEVsZW1lbnQsIGJyZWFrUG9pbnRVdGlsaXRpZXMsIGNvbnRpbnVhdGlvblV0aWxpdGllcyB9IGZyb20gXCJvY2NhbS1sYW5ndWFnZXNcIjtcblxuaW1wb3J0IHsgZW5jbG9zZSB9IGZyb20gXCIuLi91dGlsaXRpZXMvY29udGV4dFwiO1xuaW1wb3J0IHsgY2xhaW1TdHJpbmdGcm9tTGFiZWxzU2lnbmF0dXJlU3VwcG9zaXRpb25zQW5kRGVkdWN0aW9uIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9zdHJpbmdcIjtcbmltcG9ydCB7IGxhYmVsc0Zyb21KU09OLFxuICAgICAgICAgZGVkdWN0aW9uRnJvbUpTT04sXG4gICAgICAgICBzaWduYXR1cmVGcm9tSlNPTixcbiAgICAgICAgIGxhYmVsc1RvTGFiZWxzSlNPTixcbiAgICAgICAgIGh5cG90aGVzZXNGcm9tSlNPTixcbiAgICAgICAgIHN1cHBvc2l0aW9uc0Zyb21KU09OLFxuICAgICAgICAgZGVkdWN0aW9uVG9EZWR1Y3Rpb25KU09OLFxuICAgICAgICAgc2lnbmF0dXJlVG9TaWduYXR1cmVKU09OLFxuICAgICAgICAgaHlwb3RoZXNlc1RvSHlwb3RoZXNlc0pTT04sXG4gICAgICAgICBzdXBwb3NpdGlvbnNUb1N1cHBvc2l0aW9uc0pTT04gfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2pzb25cIjtcblxuY29uc3QgeyByZXZlcnNlIH0gPSBhcnJheVV0aWxpdGllcyxcbiAgICAgIHsgYnJlYWtQb2ludEZyb21KU09OLCBicmVha1BvaW50VG9CcmVha1BvaW50SlNPTiB9ID0gYnJlYWtQb2ludFV0aWxpdGllcyxcbiAgICAgIHsgYXN5bmNocm9ub3VzQWxsLCBhc3luY2hyb25vdXNFdmVyeSwgYXN5bmNocm9ub3VzRXh0cmFjdCwgYXN5bmNocm9ub3VzRm9yd2FyZHNFdmVyeSwgYXN5bmNocm9ub3VzQmFja3dhcmRzRXZlcnkgfSA9IGNvbnRpbnVhdGlvblV0aWxpdGllcztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ2xhaW0gZXh0ZW5kcyBFbGVtZW50IHtcbiAgY29uc3RydWN0b3IoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBsYWJlbHMsIHN1cHBvc2l0aW9ucywgZGVkdWN0aW9uLCBwcm9vZiwgc2lnbmF0dXJlLCBoeXBvdGhlc2VzKSB7XG4gICAgc3VwZXIoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50KTtcblxuICAgIHRoaXMubGFiZWxzID0gbGFiZWxzO1xuICAgIHRoaXMuc3VwcG9zaXRpb25zID0gc3VwcG9zaXRpb25zO1xuICAgIHRoaXMuZGVkdWN0aW9uID0gZGVkdWN0aW9uO1xuICAgIHRoaXMucHJvb2YgPSBwcm9vZjtcbiAgICB0aGlzLnNpZ25hdHVyZSA9IHNpZ25hdHVyZTtcbiAgICB0aGlzLmh5cG90aGVzZXMgPSBoeXBvdGhlc2VzO1xuICB9XG5cbiAgZ2V0TGFiZWxzKCkge1xuICAgIHJldHVybiB0aGlzLmxhYmVscztcbiAgfVxuXG4gIGdldFN1cHBvc2l0aW9ucygpIHtcbiAgICByZXR1cm4gdGhpcy5zdXBwb3NpdGlvbnM7XG4gIH1cblxuICBnZXREZWR1Y3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuZGVkdWN0aW9uO1xuICB9XG5cbiAgZ2V0UHJvb2YoKSB7XG4gICAgcmV0dXJuIHRoaXMucHJvb2Y7XG4gIH1cblxuICBnZXRTaWduYXR1cmUoKSB7XG4gICAgcmV0dXJuIHRoaXMuc2lnbmF0dXJlO1xuICB9XG5cbiAgZ2V0SHlwb3RoZXNlcygpIHtcbiAgICByZXR1cm4gdGhpcy5oeXBvdGhlc2VzO1xuICB9XG5cbiAgc2V0SHlwb3RoZXNlcyhoeXBvdGhlc2VzKSB7XG4gICAgdGhpcy5oeXBvdGhlc2VzID0gaHlwb3RoZXNlcztcbiAgfVxuXG4gIGdldFN1cHBvc2l0aW9uKGluZGV4KSB7XG4gICAgY29uc3Qgc3VwcG9zaXRpb24gPSB0aGlzLnN1cHBvc2l0aW9uc1tpbmRleF0gfHwgbnVsbDtcblxuICAgIHJldHVybiBzdXBwb3NpdGlvbjtcbiAgfVxuXG4gIGlzU2F0aXNmaWFibGUoKSB7XG4gICAgY29uc3Qgc2F0aXNmaWFibGUgPSBmYWxzZTtcblxuICAgIHJldHVybiBzYXRpc2ZpYWJsZTtcbiAgfVxuXG4gIGlzSHlwb3RoZXRpY2FsKCkge1xuICAgIGNvbnN0IGh5cG90aGVzZXNMZW5ndGggPSB0aGlzLmh5cG90aGVzZXMubGVuZ3RoLFxuICAgICAgICAgIGh5cG90aGV0aWNhbCA9IChoeXBvdGhlc2VzTGVuZ3RoID4gMCk7XG5cbiAgICByZXR1cm4gaHlwb3RoZXRpY2FsO1xuICB9XG5cbiAgbWF0Y2hNZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpIHtcbiAgICBjb25zdCBtZXRhdmFyaWFibGVOb2RlTWF0Y2hlcyA9IHRoaXMubGFiZWxzLnNvbWUoKGxhYmVsKSA9PiB7XG4gICAgICBjb25zdCBtZXRhdmFyaWFibGVOb2RlTWF0Y2hlcyA9IGxhYmVsLm1hdGNoTWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlKTtcblxuICAgICAgaWYgKG1ldGF2YXJpYWJsZU5vZGVNYXRjaGVzKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIG1ldGF2YXJpYWJsZU5vZGVNYXRjaGVzO1xuICB9XG5cbiAgdmVyaWZ5RXgoY29udGV4dCwgY29udGludWF0aW9uKSB7XG4gICAgY29uc3QgY2xhaW1TdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFZlcmlmeWluZyB0aGUgJyR7Y2xhaW1TdHJpbmd9JyBjbGFpbS4uLmApO1xuXG4gICAgcmV0dXJuIGVuY2xvc2UoKGNvbnRleHQpID0+IHtcbiAgICAgIGNvbnN0IHZlcmlmeVByb29mID0gdGhpcy52ZXJpZnlQcm9vZi5iaW5kKHRoaXMpLFxuICAgICAgICAgICAgdmVyaWZ5TGFiZWxzID0gdGhpcy52ZXJpZnlMYWJlbHMuYmluZCh0aGlzKSxcbiAgICAgICAgICAgIHZlcmlmeURlZHVjdGlvbiA9IHRoaXMudmVyaWZ5RGVkdWN0aW9uLmJpbmQodGhpcyksXG4gICAgICAgICAgICB2ZXJpZnlTdXBwb3NpdGlvbnMgPSB0aGlzLnZlcmlmeVN1cHBvc2l0aW9ucy5iaW5kKHRoaXMpO1xuXG4gICAgICByZXR1cm4gYXN5bmNocm9ub3VzQWxsKFtcbiAgICAgICAgdmVyaWZ5TGFiZWxzLFxuICAgICAgICB2ZXJpZnlTdXBwb3NpdGlvbnMsXG4gICAgICAgIHZlcmlmeURlZHVjdGlvbixcbiAgICAgICAgdmVyaWZ5UHJvb2ZcbiAgICAgIF0sIGNvbnRleHQsICh2ZXJpZmllcykgPT4ge1xuICAgICAgICBpZiAodmVyaWZpZXMpIHtcbiAgICAgICAgICBjb250ZXh0LmRlYnVnKGAuLi52ZXJpZmllZCB0aGUgJyR7Y2xhaW1TdHJpbmd9JyBjbGFpbS5gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBjb250aW51YXRpb24odmVyaWZpZXMsIGNvbnRleHQpO1xuICAgICAgfSk7XG4gICAgfSwgY29udGV4dCk7XG4gIH1cblxuICB2ZXJpZnlMYWJlbHMoY29udGV4dCwgY29udGludWF0aW9uKSB7XG4gICAgY29uc3QgY2xhaW1TdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWZXJpZnlpbmcgdGhlICcke2NsYWltU3RyaW5nfScgY2xhaW0ncyBsYWJlbHMuLi5gKTtcblxuICAgIGNvbnN0IHZlcmlmeUxhYmVsID0gdGhpcy52ZXJpZnlMYWJlbC5iaW5kKHRoaXMpO1xuXG4gICAgcmV0dXJuIGFzeW5jaHJvbm91c0V2ZXJ5KHRoaXMubGFiZWxzLCB2ZXJpZnlMYWJlbCwgY29udGV4dCwgKGxhYmVsc1ZlcmlmeSkgPT4ge1xuICAgICAgaWYgKGxhYmVsc1ZlcmlmeSkge1xuICAgICAgICBjb250ZXh0LmRlYnVnKGAuLi52ZXJpZmllZCB0aGUgJyR7Y2xhaW1TdHJpbmd9JyBjbGFpbSdzIGxhYmVscy5gKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihsYWJlbHNWZXJpZnksIGNvbnRleHQpO1xuICAgIH0pO1xuICB9XG5cbiAgdmVyaWZ5TGFiZWwobGFiZWwsIGNvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICAgIGNvbnN0IGxhYmVsU3RyaW5nID0gbGFiZWwuZ2V0U3RyaW5nKCksXG4gICAgICAgICAgY2xhaW1TdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFZlcmlmeWluZyB0aGUgJyR7Y2xhaW1TdHJpbmd9JyBjbGFpbSdzICcke2xhYmVsU3RyaW5nfScgbGFiZWwuLi5gKTtcblxuICAgIHJldHVybiBsYWJlbC52ZXJpZnkoKGxhYmVsVmVyaWZpZXMpID0+IHtcbiAgICAgIGlmIChsYWJlbFZlcmlmaWVzKSB7XG4gICAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZlcmlmaWVkIHRoZSAnJHtjbGFpbVN0cmluZ30nIGNsYWltJ3MgJyR7bGFiZWxTdHJpbmd9JyBsYWJlbC5gKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihsYWJlbFZlcmlmaWVzLCBjb250ZXh0KTtcbiAgICB9KTtcbiAgfVxuXG4gIHZlcmlmeVByb29mKGNvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICAgIGlmICh0aGlzLnByb29mID09PSBudWxsKSB7XG4gICAgICBjb25zdCBwcm9vZlZlcmlmaWVzID0gdHJ1ZTsgLy8vXG5cbiAgICAgIHJldHVybiBjb250aW51YXRpb24ocHJvb2ZWZXJpZmllcywgY29udGV4dCk7XG4gICAgfVxuXG4gICAgY29uc3QgY2xhaW1TdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWZXJpZnlpbmcgdGhlICcke2NsYWltU3RyaW5nfScgY2xhaW0ncyBwcm9vZi4uLmApO1xuXG4gICAgY29uc3Qgc3RhdGVtZW50ID0gdGhpcy5kZWR1Y3Rpb24uZ2V0U3RhdGVtZW50KCk7XG5cbiAgICByZXR1cm4gdGhpcy5wcm9vZi52ZXJpZnkoc3RhdGVtZW50LCBjb250ZXh0LCAocHJvb2ZWZXJpZmllcykgPT4ge1xuICAgICAgaWYgKHByb29mVmVyaWZpZXMpIHtcbiAgICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmVyaWZpZWQgdGhlICcke2NsYWltU3RyaW5nfScgY2xhaW0ncyBwcm9vZi5gKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihwcm9vZlZlcmlmaWVzLCBjb250ZXh0KTtcbiAgICB9KTtcbiAgfVxuXG4gIHZlcmlmeURlZHVjdGlvbihjb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgICBjb25zdCBjbGFpbVN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCksIC8vL1xuICAgICAgICAgIGRlZHVjdGlvblN0cmluZyA9IHRoaXMuZGVkdWN0aW9uLmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgVmVyaWZ5aW5nIHRoZSAnJHtjbGFpbVN0cmluZ30nIGNsYWltJ3MgJyR7ZGVkdWN0aW9uU3RyaW5nfScgZGVkdWN0aW9uLi4uYCk7XG5cbiAgICByZXR1cm4gdGhpcy5kZWR1Y3Rpb24udmVyaWZ5KGNvbnRleHQsIChkZWR1Y3Rpb25WZXJpZmllcykgPT4ge1xuICAgICAgaWYgKGRlZHVjdGlvblZlcmlmaWVzKSB7XG4gICAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZlcmlmaWVkIHRoZSAnJHtjbGFpbVN0cmluZ30nIGNsYWltJ3MgJyR7ZGVkdWN0aW9uU3RyaW5nfScgZGVkdWN0aW9uLmApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gY29udGludWF0aW9uKGRlZHVjdGlvblZlcmlmaWVzLCBjb250ZXh0KTtcbiAgICB9KTtcbiAgfVxuXG4gIHZlcmlmeVN1cHBvc2l0aW9uKHN1cHBvc2l0aW9uLCBjb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgICBjb25zdCBjbGFpbVN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCksIC8vL1xuICAgICAgICAgIHN1cHBvc2l0aW9uU3RyaW5nID0gc3VwcG9zaXRpb24uZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBWZXJpZnlpbmcgdGhlICcke2NsYWltU3RyaW5nfScgY2xhaW0ncyAnJHtzdXBwb3NpdGlvblN0cmluZ30nIHN1cHBvc2l0aW9uLi4uYCk7XG5cbiAgICByZXR1cm4gc3VwcG9zaXRpb24udmVyaWZ5KGNvbnRleHQsIChzdXBwb3NpdGlvblZlcmlmaWVzKSA9PiB7XG4gICAgICBpZiAoc3VwcG9zaXRpb25WZXJpZmllcykge1xuICAgICAgICBjb25zdCBmYWN0T3JTdWJwcm9vZiA9IHN1cHBvc2l0aW9uOyAgLy8vL1xuXG4gICAgICAgIGNvbnRleHQuYXNzaWduQXNzaWdubWVudHMoKTtcblxuICAgICAgICBjb250ZXh0LmFkZEZhY3RPclN1YnByb29mKGZhY3RPclN1YnByb29mKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHN1cHBvc2l0aW9uVmVyaWZpZXMpIHtcbiAgICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmVyaWZpZWQgdGhlICcke2NsYWltU3RyaW5nfScgY2xhaW0ncyAnJHtzdXBwb3NpdGlvblN0cmluZ30nIHN1cHBvc2l0aW9uLmApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gY29udGludWF0aW9uKHN1cHBvc2l0aW9uVmVyaWZpZXMsIGNvbnRleHQpO1xuICAgIH0pO1xuICB9XG5cbiAgdmVyaWZ5U3VwcG9zaXRpb25zKGNvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICAgIGNvbnN0IHN1cHBvc2l0aW9uc0xlbmd0aCA9IHRoaXMuc3VwcG9zaXRpb25zLmxlbmd0aDtcblxuICAgIGlmIChzdXBwb3NpdGlvbnNMZW5ndGggPT09IDApIHtcbiAgICAgIGNvbnN0IHN1cHBvc2l0aW9uc1ZlcmlmeSA9IHRydWU7ICAvLy9cblxuICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihzdXBwb3NpdGlvbnNWZXJpZnksIGNvbnRleHQpO1xuICAgIH1cblxuICAgIGNvbnN0IGNsYWltU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgIC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVmVyaWZ5aW5nIHRoZSAnJHtjbGFpbVN0cmluZ30nIGNsYWltJ3Mgc3VwcG9zaXRpb25zLi4uYCk7XG5cbiAgICBjb25zdCB2ZXJpZnlTdXBwb3NpdGlvbiA9IHRoaXMudmVyaWZ5U3VwcG9zaXRpb24uYmluZCh0aGlzKTtcblxuICAgIHJldHVybiBhc3luY2hyb25vdXNGb3J3YXJkc0V2ZXJ5KHRoaXMuc3VwcG9zaXRpb25zLCB2ZXJpZnlTdXBwb3NpdGlvbiwgY29udGV4dCwgKHN1cHBvc2l0aW9uc1ZlcmlmeSkgPT4ge1xuICAgICAgaWYgKHN1cHBvc2l0aW9uc1ZlcmlmeSkge1xuICAgICAgICBjb250ZXh0LmRlYnVnKGAuLi52ZXJpZmllZCB0aGUgJyR7Y2xhaW1TdHJpbmd9JyBjbGFpbSdzIHN1cHBvc2l0aW9ucy5gKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihzdXBwb3NpdGlvbnNWZXJpZnksIGNvbnRleHQpO1xuICAgIH0pO1xuICB9XG5cbiAgZGlzY2hhcmdlSHlwb3RoZXNpcyhoeXBvdGhlc2lzLCBjb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgICBjb25zdCBjbGFpbVN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCksIC8vL1xuICAgICAgICAgIGh5cG90aGVzaXNTdHJpbmcgPSBoeXBvdGhlc2lzLmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgRGlzY2hhcmRpbmcgdGhlICcke2NsYWltU3RyaW5nfScgY2xhaW0ncyAnJHtoeXBvdGhlc2lzU3RyaW5nfScgaHlwb3RoZXNpcy4uLmApO1xuXG4gICAgaHlwb3RoZXNpcy5kaXNjaGFyZ2UoY29udGV4dCwgKGh5cG90aGVzaXNEaXNjaGFyZ2VzKSA9PiB7XG4gICAgICBpZiAoaHlwb3RoZXNpc0Rpc2NoYXJnZXMpIHtcbiAgICAgICAgY29udGV4dC50cmFjZShgLi4uZGlzY2hhcmdlcyB0aGUgJyR7Y2xhaW1TdHJpbmd9JyBjbGFpbSdzICcke2h5cG90aGVzaXNTdHJpbmd9JyBoeXBvdGhlc2lzLmApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gY29udGludWF0aW9uKGh5cG90aGVzaXNEaXNjaGFyZ2VzKTtcbiAgICB9KTtcbiAgfVxuXG4gIGRpc2NoYXJnZUh5cG90aGVzZXMoY29udGV4dCwgY29udGludWF0aW9uKSB7XG4gICAgY29uc3QgaHlwb3RoZXNlcyA9IHRoaXMuZ2V0SHlwb3RoZXNlcygpLFxuICAgICAgICAgIGRpc2NoYXJnZUh5cG90aGVzaXMgPSB0aGlzLmRpc2NoYXJnZUh5cG90aGVzaXMuYmluZCh0aGlzKTtcblxuICAgIHJldHVybiBhc3luY2hyb25vdXNFdmVyeShoeXBvdGhlc2VzLCBkaXNjaGFyZ2VIeXBvdGhlc2lzLCBjb250ZXh0LCBjb250aW51YXRpb24pO1xuICB9XG5cbiAgdW5pZnlTdGVwV2l0aERlZHVjdGlvbihzdGVwLCBjb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgICBjb25zdCBydWxlU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKSxcbiAgICAgICAgICBzdGVwU3RyaW5nID0gc3RlcC5nZXRTdHJpbmcoKSxcbiAgICAgICAgICBkZWR1Y3Rpb25TdHJpbmcgPSB0aGlzLmRlZHVjdGlvbi5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYFVuaWZ5aW5nIHRoZSAnJHtzdGVwU3RyaW5nfScgc3RlcCB3aXRoIHRoZSAnJHtydWxlU3RyaW5nfScgcnVsZSdzICcke2RlZHVjdGlvblN0cmluZ30nIGRlZHVjdGlvbi4uLmApO1xuXG4gICAgcmV0dXJuIHRoaXMuZGVkdWN0aW9uLnVuaWZ5U3RlcChzdGVwLCBjb250ZXh0LCAoc3RlcFVuaWZpZXMpID0+IHtcbiAgICAgIGxldCBzdGVwVW5pZmllc1dpdGhEZWR1Y3Rpb24gPSBmYWxzZTtcblxuICAgICAgaWYgKHN0ZXBVbmlmaWVzKSB7XG4gICAgICAgIHN0ZXBVbmlmaWVzV2l0aERlZHVjdGlvbiA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChzdGVwVW5pZmllc1dpdGhEZWR1Y3Rpb24pIHtcbiAgICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udW5pZmllZCB0aGUgJyR7c3RlcFN0cmluZ30nIHN0ZXAgd2l0aCB0aGUgJyR7cnVsZVN0cmluZ30nIHJ1bGUncyAnJHtkZWR1Y3Rpb25TdHJpbmd9JyBkZWR1Y3Rpb24uYCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjb250aW51YXRpb24oc3RlcFVuaWZpZXNXaXRoRGVkdWN0aW9uKTtcbiAgICB9KTtcbiAgfVxuXG4gIHVuaWZ5U3RlcEFuZEZhY3RPclN1YnByb29mcyhzdGVwLCBmYWN0b3JTdWJwcm9vZnMsIGNvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICAgIHJldHVybiB0aGlzLnVuaWZ5U3RlcFdpdGhEZWR1Y3Rpb24oc3RlcCwgY29udGV4dCwgKHN0YXRlbWVudFVuaWZpZXNXaXRoRGVkdWN0aW9uKSA9PiB7XG4gICAgICBpZiAoIXN0YXRlbWVudFVuaWZpZXNXaXRoRGVkdWN0aW9uKSB7XG4gICAgICAgIGNvbnN0IHN0ZXBBbmRGYWN0T3JTdWJwcm9vZnNVbmlmeSA9IGZhbHNlO1xuXG4gICAgICAgIHJldHVybiBjb250aW51YXRpb24oc3RlcEFuZEZhY3RPclN1YnByb29mc1VuaWZ5KTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXMuZGlzY2hhcmdlSHlwb3RoZXNlcyhjb250ZXh0LCAoaHlwb3RoZXNlc0Rpc2NoYXJnZSkgPT4ge1xuICAgICAgICBpZiAoIWh5cG90aGVzZXNEaXNjaGFyZ2UpIHtcbiAgICAgICAgICBjb25zdCBzdGVwQW5kRmFjdE9yU3VicHJvb2ZzVW5pZnkgPSBmYWxzZTtcblxuICAgICAgICAgIHJldHVybiBjb250aW51YXRpb24oc3RlcEFuZEZhY3RPclN1YnByb29mc1VuaWZ5KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLnVuaWZ5RmFjdE9yU3VicHJvb2ZzV2l0aFN1cHBvc2l0aW9ucyhmYWN0b3JTdWJwcm9vZnMsIGNvbnRleHQsIChmYWN0b3JTdWJwcm9vZnNVbmlmaWVzV2l0aFN1cHBvc2l0aW9ucykgPT4ge1xuICAgICAgICAgIGxldCBzdGVwQW5kRmFjdE9yU3VicHJvb2ZzVW5pZnkgPSBmYWxzZTtcblxuICAgICAgICAgIGlmIChmYWN0b3JTdWJwcm9vZnNVbmlmaWVzV2l0aFN1cHBvc2l0aW9ucykge1xuICAgICAgICAgICAgY29uc3QgZGVyaXZlZFN1YnN0aXR1dGlvbnNSZXNvbHZlZCA9IGNvbnRleHQuYXJlRGVyaXZlZFN1YnN0aXR1dGlvbnNSZXNvbHZlZCgpO1xuXG4gICAgICAgICAgICBpZiAoZGVyaXZlZFN1YnN0aXR1dGlvbnNSZXNvbHZlZCkge1xuICAgICAgICAgICAgICBzdGVwQW5kRmFjdE9yU3VicHJvb2ZzVW5pZnkgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBjb250aW51YXRpb24oc3RlcEFuZEZhY3RPclN1YnByb29mc1VuaWZ5KTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIHVuaWZ5RmFjdE9yU3VicHJvb2ZzV2l0aFN1cHBvc2l0aW9uKGZhY3RvclN1YnByb29mcywgc3VwcG9zaXRpb24sIGNvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICAgIHJldHVybiBhc3luY2hyb25vdXNFeHRyYWN0KGZhY3RvclN1YnByb29mcywgKGZhY3RPclN1YnByb29mLCBjb250aW51YXRpb24pID0+IHtcbiAgICAgIHJldHVybiBzdXBwb3NpdGlvbi51bmlmeUZhY3RPclN1YnByb29mKGZhY3RPclN1YnByb29mLCBjb250ZXh0LCBjb250aW51YXRpb24pO1xuICAgIH0sIChmYWN0T3JTdWJwcm9vZiA9IG51bGwpID0+IHtcbiAgICAgIGlmIChmYWN0T3JTdWJwcm9vZiAhPT0gbnVsbCkge1xuICAgICAgICBjb25zdCBmYWN0b3JTdWJwcm9vZnNVbmlmaWVzV2l0aFN1cHBvc2l0aW9uID0gdHJ1ZTtcblxuICAgICAgICByZXR1cm4gY29udGV4dC5yZXNvbHZlRGVyaXZlZFN1YnN0aXR1dGlvbnMoKCkgPT4ge1xuICAgICAgICAgIHJldHVybiBjb250aW51YXRpb24oZmFjdG9yU3VicHJvb2ZzVW5pZmllc1dpdGhTdXBwb3NpdGlvbik7XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gc3VwcG9zaXRpb24udW5pZnlJbmRlcGVuZGVudGx5KGNvbnRleHQsIGNvbnRpbnVhdGlvbik7XG4gICAgfSk7XG4gIH1cblxuICB1bmlmeUZhY3RPclN1YnByb29mc1dpdGhTdXBwb3NpdGlvbnMoZmFjdG9yU3VicHJvb2ZzLCBjb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgICBmYWN0b3JTdWJwcm9vZnMgPSByZXZlcnNlKGZhY3RvclN1YnByb29mcyk7IC8vL1xuXG4gICAgcmV0dXJuIGFzeW5jaHJvbm91c0JhY2t3YXJkc0V2ZXJ5KHRoaXMuc3VwcG9zaXRpb25zLCAoc3VwcG9zaXRpb24sIGNvbnRpbnVhdGlvbikgPT4ge1xuICAgICAgcmV0dXJuIHRoaXMudW5pZnlGYWN0T3JTdWJwcm9vZnNXaXRoU3VwcG9zaXRpb24oZmFjdG9yU3VicHJvb2ZzLCBzdXBwb3NpdGlvbiwgY29udGV4dCwgY29udGludWF0aW9uKTtcbiAgICB9LCBjb250aW51YXRpb24pO1xuICB9XG5cbiAgdG9KU09OKCkge1xuICAgIGNvbnN0IGxhYmVsc0pTT04gPSBsYWJlbHNUb0xhYmVsc0pTT04odGhpcy5sYWJlbHMpLFxuICAgICAgICAgIGRlZHVjdGlvbkpTT04gPSBkZWR1Y3Rpb25Ub0RlZHVjdGlvbkpTT04odGhpcy5kZWR1Y3Rpb24pLFxuICAgICAgICAgIHN1cHBvc2l0aW9uc0pTT04gPSBzdXBwb3NpdGlvbnNUb1N1cHBvc2l0aW9uc0pTT04odGhpcy5zdXBwb3NpdGlvbnMpLFxuICAgICAgICAgIHNpZ25hdHVyZUpTT04gPSBzaWduYXR1cmVUb1NpZ25hdHVyZUpTT04odGhpcy5zaWduYXR1cmUpLFxuICAgICAgICAgIGh5cG90aGVzZXNKU09OID0gaHlwb3RoZXNlc1RvSHlwb3RoZXNlc0pTT04odGhpcy5oeXBvdGhlc2VzKSxcbiAgICAgICAgICBzdHJpbmcgPSB0aGlzLmdldFN0cmluZygpO1xuXG4gICAgbGV0IGJyZWFrUG9pbnQ7XG5cbiAgICBicmVha1BvaW50ID0gdGhpcy5nZXRCcmVha1BvaW50KCk7XG5cbiAgICBjb25zdCBicmVha1BvaW50SlNPTiA9IGJyZWFrUG9pbnRUb0JyZWFrUG9pbnRKU09OKGJyZWFrUG9pbnQpO1xuXG4gICAgYnJlYWtQb2ludCA9IGJyZWFrUG9pbnRKU09OOyAgLy8vXG5cbiAgICBjb25zdCBsYWJlbHMgPSBsYWJlbHNKU09OLCAgLy8vXG4gICAgICAgICAgZGVkdWN0aW9uID0gZGVkdWN0aW9uSlNPTiwgIC8vL1xuICAgICAgICAgIHN1cHBvc2l0aW9ucyA9IHN1cHBvc2l0aW9uc0pTT04sICAvLy9cbiAgICAgICAgICBzaWduYXR1cmUgPSBzaWduYXR1cmVKU09OLCAgLy8vXG4gICAgICAgICAgaHlwb3RoZXNlcyA9IGh5cG90aGVzZXNKU09OLCAgLy8vXG4gICAgICAgICAganNvbiA9IHtcbiAgICAgICAgICAgIHN0cmluZyxcbiAgICAgICAgICAgIGJyZWFrUG9pbnQsXG4gICAgICAgICAgICBsYWJlbHMsXG4gICAgICAgICAgICBkZWR1Y3Rpb24sXG4gICAgICAgICAgICBzdXBwb3NpdGlvbnMsXG4gICAgICAgICAgICBzaWduYXR1cmUsXG4gICAgICAgICAgICBoeXBvdGhlc2VzXG4gICAgICAgICAgfTtcblxuICAgIHJldHVybiBqc29uO1xuICB9XG5cbiAgc3RhdGljIGZyb21KU09OKENsYXNzLCBqc29uLCBjb250ZXh0KSB7XG4gICAgY29uc3QgbGFiZWxzID0gbGFiZWxzRnJvbUpTT04oanNvbiwgY29udGV4dCksXG4gICAgICAgICAgZGVkdWN0aW9uID0gZGVkdWN0aW9uRnJvbUpTT04oanNvbiwgY29udGV4dCksXG4gICAgICAgICAgc3VwcG9zaXRpb25zID0gc3VwcG9zaXRpb25zRnJvbUpTT04oanNvbiwgY29udGV4dCksXG4gICAgICAgICAgc2lnbmF0dXJlID0gc2lnbmF0dXJlRnJvbUpTT04oanNvbiwgY29udGV4dCksXG4gICAgICAgICAgaHlwb3RoZXNlcyA9IGh5cG90aGVzZXNGcm9tSlNPTihqc29uLCBjb250ZXh0KSxcbiAgICAgICAgICBjbGFpbVN0cmluZyA9IGNsYWltU3RyaW5nRnJvbUxhYmVsc1NpZ25hdHVyZVN1cHBvc2l0aW9uc0FuZERlZHVjdGlvbihsYWJlbHMsIHNpZ25hdHVyZSwgc3VwcG9zaXRpb25zLCBkZWR1Y3Rpb24pLFxuICAgICAgICAgIHN0cmluZyA9IGNsYWltU3RyaW5nLCAvLy9cbiAgICAgICAgICBub2RlID0gbnVsbCxcbiAgICAgICAgICBicmVha1BvaW50ID0gYnJlYWtQb2ludEZyb21KU09OKGpzb24pLFxuICAgICAgICAgIHByb29mID0gbnVsbCxcbiAgICAgICAgICBjbGFpbSA9IG5ldyBDbGFzcyhjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIGxhYmVscywgc3VwcG9zaXRpb25zLCBkZWR1Y3Rpb24sIHByb29mLCBzaWduYXR1cmUsIGh5cG90aGVzZXMpO1xuXG4gICAgcmV0dXJuIGNsYWltO1xuICB9XG59XG4iXSwibmFtZXMiOlsiQ2xhaW0iLCJyZXZlcnNlIiwiYXJyYXlVdGlsaXRpZXMiLCJicmVha1BvaW50RnJvbUpTT04iLCJicmVha1BvaW50VG9CcmVha1BvaW50SlNPTiIsImJyZWFrUG9pbnRVdGlsaXRpZXMiLCJhc3luY2hyb25vdXNBbGwiLCJhc3luY2hyb25vdXNFdmVyeSIsImFzeW5jaHJvbm91c0V4dHJhY3QiLCJhc3luY2hyb25vdXNGb3J3YXJkc0V2ZXJ5IiwiYXN5bmNocm9ub3VzQmFja3dhcmRzRXZlcnkiLCJjb250aW51YXRpb25VdGlsaXRpZXMiLCJFbGVtZW50IiwiY29udGV4dCIsInN0cmluZyIsIm5vZGUiLCJicmVha1BvaW50IiwibGFiZWxzIiwic3VwcG9zaXRpb25zIiwiZGVkdWN0aW9uIiwicHJvb2YiLCJzaWduYXR1cmUiLCJoeXBvdGhlc2VzIiwiZ2V0TGFiZWxzIiwiZ2V0U3VwcG9zaXRpb25zIiwiZ2V0RGVkdWN0aW9uIiwiZ2V0UHJvb2YiLCJnZXRTaWduYXR1cmUiLCJnZXRIeXBvdGhlc2VzIiwic2V0SHlwb3RoZXNlcyIsImdldFN1cHBvc2l0aW9uIiwiaW5kZXgiLCJzdXBwb3NpdGlvbiIsImlzU2F0aXNmaWFibGUiLCJzYXRpc2ZpYWJsZSIsImlzSHlwb3RoZXRpY2FsIiwiaHlwb3RoZXNlc0xlbmd0aCIsImxlbmd0aCIsImh5cG90aGV0aWNhbCIsIm1hdGNoTWV0YXZhcmlhYmxlTm9kZSIsIm1ldGF2YXJpYWJsZU5vZGUiLCJtZXRhdmFyaWFibGVOb2RlTWF0Y2hlcyIsInNvbWUiLCJsYWJlbCIsInZlcmlmeUV4IiwiY29udGludWF0aW9uIiwiY2xhaW1TdHJpbmciLCJnZXRTdHJpbmciLCJ0cmFjZSIsImVuY2xvc2UiLCJ2ZXJpZnlQcm9vZiIsImJpbmQiLCJ2ZXJpZnlMYWJlbHMiLCJ2ZXJpZnlEZWR1Y3Rpb24iLCJ2ZXJpZnlTdXBwb3NpdGlvbnMiLCJ2ZXJpZmllcyIsImRlYnVnIiwidmVyaWZ5TGFiZWwiLCJsYWJlbHNWZXJpZnkiLCJsYWJlbFN0cmluZyIsInZlcmlmeSIsImxhYmVsVmVyaWZpZXMiLCJwcm9vZlZlcmlmaWVzIiwic3RhdGVtZW50IiwiZ2V0U3RhdGVtZW50IiwiZGVkdWN0aW9uU3RyaW5nIiwiZGVkdWN0aW9uVmVyaWZpZXMiLCJ2ZXJpZnlTdXBwb3NpdGlvbiIsInN1cHBvc2l0aW9uU3RyaW5nIiwic3VwcG9zaXRpb25WZXJpZmllcyIsImZhY3RPclN1YnByb29mIiwiYXNzaWduQXNzaWdubWVudHMiLCJhZGRGYWN0T3JTdWJwcm9vZiIsInN1cHBvc2l0aW9uc0xlbmd0aCIsInN1cHBvc2l0aW9uc1ZlcmlmeSIsImRpc2NoYXJnZUh5cG90aGVzaXMiLCJoeXBvdGhlc2lzIiwiaHlwb3RoZXNpc1N0cmluZyIsImRpc2NoYXJnZSIsImh5cG90aGVzaXNEaXNjaGFyZ2VzIiwiZGlzY2hhcmdlSHlwb3RoZXNlcyIsInVuaWZ5U3RlcFdpdGhEZWR1Y3Rpb24iLCJzdGVwIiwicnVsZVN0cmluZyIsInN0ZXBTdHJpbmciLCJ1bmlmeVN0ZXAiLCJzdGVwVW5pZmllcyIsInN0ZXBVbmlmaWVzV2l0aERlZHVjdGlvbiIsInVuaWZ5U3RlcEFuZEZhY3RPclN1YnByb29mcyIsImZhY3RvclN1YnByb29mcyIsInN0YXRlbWVudFVuaWZpZXNXaXRoRGVkdWN0aW9uIiwic3RlcEFuZEZhY3RPclN1YnByb29mc1VuaWZ5IiwiaHlwb3RoZXNlc0Rpc2NoYXJnZSIsInVuaWZ5RmFjdE9yU3VicHJvb2ZzV2l0aFN1cHBvc2l0aW9ucyIsImZhY3RvclN1YnByb29mc1VuaWZpZXNXaXRoU3VwcG9zaXRpb25zIiwiZGVyaXZlZFN1YnN0aXR1dGlvbnNSZXNvbHZlZCIsImFyZURlcml2ZWRTdWJzdGl0dXRpb25zUmVzb2x2ZWQiLCJ1bmlmeUZhY3RPclN1YnByb29mc1dpdGhTdXBwb3NpdGlvbiIsInVuaWZ5RmFjdE9yU3VicHJvb2YiLCJmYWN0b3JTdWJwcm9vZnNVbmlmaWVzV2l0aFN1cHBvc2l0aW9uIiwicmVzb2x2ZURlcml2ZWRTdWJzdGl0dXRpb25zIiwidW5pZnlJbmRlcGVuZGVudGx5IiwidG9KU09OIiwibGFiZWxzSlNPTiIsImxhYmVsc1RvTGFiZWxzSlNPTiIsImRlZHVjdGlvbkpTT04iLCJkZWR1Y3Rpb25Ub0RlZHVjdGlvbkpTT04iLCJzdXBwb3NpdGlvbnNKU09OIiwic3VwcG9zaXRpb25zVG9TdXBwb3NpdGlvbnNKU09OIiwic2lnbmF0dXJlSlNPTiIsInNpZ25hdHVyZVRvU2lnbmF0dXJlSlNPTiIsImh5cG90aGVzZXNKU09OIiwiaHlwb3RoZXNlc1RvSHlwb3RoZXNlc0pTT04iLCJnZXRCcmVha1BvaW50IiwiYnJlYWtQb2ludEpTT04iLCJqc29uIiwiZnJvbUpTT04iLCJDbGFzcyIsImxhYmVsc0Zyb21KU09OIiwiZGVkdWN0aW9uRnJvbUpTT04iLCJzdXBwb3NpdGlvbnNGcm9tSlNPTiIsInNpZ25hdHVyZUZyb21KU09OIiwiaHlwb3RoZXNlc0Zyb21KU09OIiwiY2xhaW1TdHJpbmdGcm9tTGFiZWxzU2lnbmF0dXJlU3VwcG9zaXRpb25zQW5kRGVkdWN0aW9uIiwiY2xhaW0iXSwibWFwcGluZ3MiOiJBQUFBOzs7OytCQXNCQTs7O2VBQXFCQTs7OzJCQXBCVTtnQ0FDcUM7eUJBRTVDO3dCQUMrQztzQkFVeEI7QUFFL0MsTUFBTSxFQUFFQyxPQUFPLEVBQUUsR0FBR0MseUJBQWMsRUFDNUIsRUFBRUMsa0JBQWtCLEVBQUVDLDBCQUEwQixFQUFFLEdBQUdDLG1DQUFtQixFQUN4RSxFQUFFQyxlQUFlLEVBQUVDLGlCQUFpQixFQUFFQyxtQkFBbUIsRUFBRUMseUJBQXlCLEVBQUVDLDBCQUEwQixFQUFFLEdBQUdDLHFDQUFxQjtBQUVqSSxNQUFNWCxjQUFjWSx1QkFBTztJQUN4QyxZQUFZQyxPQUFPLEVBQUVDLE1BQU0sRUFBRUMsSUFBSSxFQUFFQyxVQUFVLEVBQUVDLE1BQU0sRUFBRUMsWUFBWSxFQUFFQyxTQUFTLEVBQUVDLEtBQUssRUFBRUMsU0FBUyxFQUFFQyxVQUFVLENBQUU7UUFDNUcsS0FBSyxDQUFDVCxTQUFTQyxRQUFRQyxNQUFNQztRQUU3QixJQUFJLENBQUNDLE1BQU0sR0FBR0E7UUFDZCxJQUFJLENBQUNDLFlBQVksR0FBR0E7UUFDcEIsSUFBSSxDQUFDQyxTQUFTLEdBQUdBO1FBQ2pCLElBQUksQ0FBQ0MsS0FBSyxHQUFHQTtRQUNiLElBQUksQ0FBQ0MsU0FBUyxHQUFHQTtRQUNqQixJQUFJLENBQUNDLFVBQVUsR0FBR0E7SUFDcEI7SUFFQUMsWUFBWTtRQUNWLE9B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
258
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9lbGVtZW50L2NsYWltLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBhcnJheVV0aWxpdGllcyB9IGZyb20gXCJuZWNlc3NhcnlcIjtcbmltcG9ydCB7IEVsZW1lbnQsIGJyZWFrUG9pbnRVdGlsaXRpZXMsIGNvbnRpbnVhdGlvblV0aWxpdGllcyB9IGZyb20gXCJvY2NhbS1sYW5ndWFnZXNcIjtcblxuaW1wb3J0IHsgZW5jbG9zZSB9IGZyb20gXCIuLi91dGlsaXRpZXMvY29udGV4dFwiO1xuaW1wb3J0IHsgY2xhaW1TdHJpbmdGcm9tTGFiZWxzU2lnbmF0dXJlU3VwcG9zaXRpb25zQW5kRGVkdWN0aW9uIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9zdHJpbmdcIjtcbmltcG9ydCB7IGxhYmVsc0Zyb21KU09OLFxuICAgICAgICAgZGVkdWN0aW9uRnJvbUpTT04sXG4gICAgICAgICBzaWduYXR1cmVGcm9tSlNPTixcbiAgICAgICAgIGxhYmVsc1RvTGFiZWxzSlNPTixcbiAgICAgICAgIGh5cG90aGVzZXNGcm9tSlNPTixcbiAgICAgICAgIHN1cHBvc2l0aW9uc0Zyb21KU09OLFxuICAgICAgICAgZGVkdWN0aW9uVG9EZWR1Y3Rpb25KU09OLFxuICAgICAgICAgc2lnbmF0dXJlVG9TaWduYXR1cmVKU09OLFxuICAgICAgICAgaHlwb3RoZXNlc1RvSHlwb3RoZXNlc0pTT04sXG4gICAgICAgICBzdXBwb3NpdGlvbnNUb1N1cHBvc2l0aW9uc0pTT04gfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2pzb25cIjtcblxuY29uc3QgeyByZXZlcnNlIH0gPSBhcnJheVV0aWxpdGllcyxcbiAgICAgIHsgYnJlYWtQb2ludEZyb21KU09OLCBicmVha1BvaW50VG9CcmVha1BvaW50SlNPTiB9ID0gYnJlYWtQb2ludFV0aWxpdGllcyxcbiAgICAgIHsgYXN5bmNocm9ub3VzQWxsLCBhc3luY2hyb25vdXNFdmVyeSwgYXN5bmNocm9ub3VzRXh0cmFjdCwgYXN5bmNocm9ub3VzRm9yd2FyZHNFdmVyeSwgYXN5bmNocm9ub3VzQmFja3dhcmRzRXZlcnkgfSA9IGNvbnRpbnVhdGlvblV0aWxpdGllcztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ2xhaW0gZXh0ZW5kcyBFbGVtZW50IHtcbiAgY29uc3RydWN0b3IoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBsYWJlbHMsIHN1cHBvc2l0aW9ucywgZGVkdWN0aW9uLCBwcm9vZiwgc2lnbmF0dXJlLCBoeXBvdGhlc2VzKSB7XG4gICAgc3VwZXIoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50KTtcblxuICAgIHRoaXMubGFiZWxzID0gbGFiZWxzO1xuICAgIHRoaXMuc3VwcG9zaXRpb25zID0gc3VwcG9zaXRpb25zO1xuICAgIHRoaXMuZGVkdWN0aW9uID0gZGVkdWN0aW9uO1xuICAgIHRoaXMucHJvb2YgPSBwcm9vZjtcbiAgICB0aGlzLnNpZ25hdHVyZSA9IHNpZ25hdHVyZTtcbiAgICB0aGlzLmh5cG90aGVzZXMgPSBoeXBvdGhlc2VzO1xuICB9XG5cbiAgZ2V0TGFiZWxzKCkge1xuICAgIHJldHVybiB0aGlzLmxhYmVscztcbiAgfVxuXG4gIGdldFN1cHBvc2l0aW9ucygpIHtcbiAgICByZXR1cm4gdGhpcy5zdXBwb3NpdGlvbnM7XG4gIH1cblxuICBnZXREZWR1Y3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuZGVkdWN0aW9uO1xuICB9XG5cbiAgZ2V0UHJvb2YoKSB7XG4gICAgcmV0dXJuIHRoaXMucHJvb2Y7XG4gIH1cblxuICBnZXRTaWduYXR1cmUoKSB7XG4gICAgcmV0dXJuIHRoaXMuc2lnbmF0dXJlO1xuICB9XG5cbiAgZ2V0SHlwb3RoZXNlcygpIHtcbiAgICByZXR1cm4gdGhpcy5oeXBvdGhlc2VzO1xuICB9XG5cbiAgc2V0SHlwb3RoZXNlcyhoeXBvdGhlc2VzKSB7XG4gICAgdGhpcy5oeXBvdGhlc2VzID0gaHlwb3RoZXNlcztcbiAgfVxuXG4gIGdldFN1cHBvc2l0aW9uKGluZGV4KSB7XG4gICAgY29uc3Qgc3VwcG9zaXRpb24gPSB0aGlzLnN1cHBvc2l0aW9uc1tpbmRleF0gfHwgbnVsbDtcblxuICAgIHJldHVybiBzdXBwb3NpdGlvbjtcbiAgfVxuXG4gIGlzU2F0aXNmaWFibGUoKSB7XG4gICAgY29uc3Qgc2F0aXNmaWFibGUgPSBmYWxzZTtcblxuICAgIHJldHVybiBzYXRpc2ZpYWJsZTtcbiAgfVxuXG4gIGlzSHlwb3RoZXRpY2FsKCkge1xuICAgIGNvbnN0IGh5cG90aGVzZXNMZW5ndGggPSB0aGlzLmh5cG90aGVzZXMubGVuZ3RoLFxuICAgICAgICAgIGh5cG90aGV0aWNhbCA9IChoeXBvdGhlc2VzTGVuZ3RoID4gMCk7XG5cbiAgICByZXR1cm4gaHlwb3RoZXRpY2FsO1xuICB9XG5cbiAgbWF0Y2hNZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpIHtcbiAgICBjb25zdCBtZXRhdmFyaWFibGVOb2RlTWF0Y2hlcyA9IHRoaXMubGFiZWxzLnNvbWUoKGxhYmVsKSA9PiB7XG4gICAgICBjb25zdCBtZXRhdmFyaWFibGVOb2RlTWF0Y2hlcyA9IGxhYmVsLm1hdGNoTWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlKTtcblxuICAgICAgaWYgKG1ldGF2YXJpYWJsZU5vZGVNYXRjaGVzKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIG1ldGF2YXJpYWJsZU5vZGVNYXRjaGVzO1xuICB9XG5cbiAgdmVyaWZ5RXgoY29udGV4dCwgY29udGludWF0aW9uKSB7XG4gICAgY29uc3QgY2xhaW1TdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFZlcmlmeWluZyB0aGUgJyR7Y2xhaW1TdHJpbmd9JyBjbGFpbS4uLmApO1xuXG4gICAgcmV0dXJuIGVuY2xvc2UoKGNvbnRleHQpID0+IHtcbiAgICAgIGNvbnN0IHZlcmlmeVByb29mID0gdGhpcy52ZXJpZnlQcm9vZi5iaW5kKHRoaXMpLFxuICAgICAgICAgICAgdmVyaWZ5TGFiZWxzID0gdGhpcy52ZXJpZnlMYWJlbHMuYmluZCh0aGlzKSxcbiAgICAgICAgICAgIHZlcmlmeURlZHVjdGlvbiA9IHRoaXMudmVyaWZ5RGVkdWN0aW9uLmJpbmQodGhpcyksXG4gICAgICAgICAgICB2ZXJpZnlTdXBwb3NpdGlvbnMgPSB0aGlzLnZlcmlmeVN1cHBvc2l0aW9ucy5iaW5kKHRoaXMpO1xuXG4gICAgICByZXR1cm4gYXN5bmNocm9ub3VzQWxsKFtcbiAgICAgICAgdmVyaWZ5TGFiZWxzLFxuICAgICAgICB2ZXJpZnlTdXBwb3NpdGlvbnMsXG4gICAgICAgIHZlcmlmeURlZHVjdGlvbixcbiAgICAgICAgdmVyaWZ5UHJvb2ZcbiAgICAgIF0sIGNvbnRleHQsICh2ZXJpZmllcykgPT4ge1xuICAgICAgICBpZiAodmVyaWZpZXMpIHtcbiAgICAgICAgICBjb250ZXh0LmRlYnVnKGAuLi52ZXJpZmllZCB0aGUgJyR7Y2xhaW1TdHJpbmd9JyBjbGFpbS5gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBjb250aW51YXRpb24odmVyaWZpZXMsIGNvbnRleHQpO1xuICAgICAgfSk7XG4gICAgfSwgY29udGV4dCk7XG4gIH1cblxuICB2ZXJpZnlMYWJlbHMoY29udGV4dCwgY29udGludWF0aW9uKSB7XG4gICAgY29uc3QgY2xhaW1TdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWZXJpZnlpbmcgdGhlICcke2NsYWltU3RyaW5nfScgY2xhaW0ncyBsYWJlbHMuLi5gKTtcblxuICAgIGNvbnN0IHZlcmlmeUxhYmVsID0gdGhpcy52ZXJpZnlMYWJlbC5iaW5kKHRoaXMpO1xuXG4gICAgcmV0dXJuIGFzeW5jaHJvbm91c0V2ZXJ5KHRoaXMubGFiZWxzLCB2ZXJpZnlMYWJlbCwgY29udGV4dCwgKGxhYmVsc1ZlcmlmeSkgPT4ge1xuICAgICAgaWYgKGxhYmVsc1ZlcmlmeSkge1xuICAgICAgICBjb250ZXh0LmRlYnVnKGAuLi52ZXJpZmllZCB0aGUgJyR7Y2xhaW1TdHJpbmd9JyBjbGFpbSdzIGxhYmVscy5gKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihsYWJlbHNWZXJpZnksIGNvbnRleHQpO1xuICAgIH0pO1xuICB9XG5cbiAgdmVyaWZ5TGFiZWwobGFiZWwsIGNvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICAgIGNvbnN0IGxhYmVsU3RyaW5nID0gbGFiZWwuZ2V0U3RyaW5nKCksXG4gICAgICAgICAgY2xhaW1TdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFZlcmlmeWluZyB0aGUgJyR7Y2xhaW1TdHJpbmd9JyBjbGFpbSdzICcke2xhYmVsU3RyaW5nfScgbGFiZWwuLi5gKTtcblxuICAgIHJldHVybiBsYWJlbC52ZXJpZnkoKGxhYmVsVmVyaWZpZXMpID0+IHtcbiAgICAgIGlmIChsYWJlbFZlcmlmaWVzKSB7XG4gICAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZlcmlmaWVkIHRoZSAnJHtjbGFpbVN0cmluZ30nIGNsYWltJ3MgJyR7bGFiZWxTdHJpbmd9JyBsYWJlbC5gKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihsYWJlbFZlcmlmaWVzLCBjb250ZXh0KTtcbiAgICB9KTtcbiAgfVxuXG4gIHZlcmlmeVByb29mKGNvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICAgIGlmICh0aGlzLnByb29mID09PSBudWxsKSB7XG4gICAgICBjb25zdCBwcm9vZlZlcmlmaWVzID0gdHJ1ZTsgLy8vXG5cbiAgICAgIHJldHVybiBjb250aW51YXRpb24ocHJvb2ZWZXJpZmllcywgY29udGV4dCk7XG4gICAgfVxuXG4gICAgY29uc3QgY2xhaW1TdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWZXJpZnlpbmcgdGhlICcke2NsYWltU3RyaW5nfScgY2xhaW0ncyBwcm9vZi4uLmApO1xuXG4gICAgY29uc3Qgc3RhdGVtZW50ID0gdGhpcy5kZWR1Y3Rpb24uZ2V0U3RhdGVtZW50KCk7XG5cbiAgICByZXR1cm4gdGhpcy5wcm9vZi52ZXJpZnkoc3RhdGVtZW50LCBjb250ZXh0LCAocHJvb2ZWZXJpZmllcykgPT4ge1xuICAgICAgaWYgKHByb29mVmVyaWZpZXMpIHtcbiAgICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmVyaWZpZWQgdGhlICcke2NsYWltU3RyaW5nfScgY2xhaW0ncyBwcm9vZi5gKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihwcm9vZlZlcmlmaWVzLCBjb250ZXh0KTtcbiAgICB9KTtcbiAgfVxuXG4gIHZlcmlmeURlZHVjdGlvbihjb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgICBjb25zdCBjbGFpbVN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCksIC8vL1xuICAgICAgICAgIGRlZHVjdGlvblN0cmluZyA9IHRoaXMuZGVkdWN0aW9uLmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgVmVyaWZ5aW5nIHRoZSAnJHtjbGFpbVN0cmluZ30nIGNsYWltJ3MgJyR7ZGVkdWN0aW9uU3RyaW5nfScgZGVkdWN0aW9uLi4uYCk7XG5cbiAgICByZXR1cm4gdGhpcy5kZWR1Y3Rpb24udmVyaWZ5KGNvbnRleHQsIChkZWR1Y3Rpb25WZXJpZmllcykgPT4ge1xuICAgICAgaWYgKGRlZHVjdGlvblZlcmlmaWVzKSB7XG4gICAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZlcmlmaWVkIHRoZSAnJHtjbGFpbVN0cmluZ30nIGNsYWltJ3MgJyR7ZGVkdWN0aW9uU3RyaW5nfScgZGVkdWN0aW9uLmApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gY29udGludWF0aW9uKGRlZHVjdGlvblZlcmlmaWVzLCBjb250ZXh0KTtcbiAgICB9KTtcbiAgfVxuXG4gIHZlcmlmeVN1cHBvc2l0aW9uKHN1cHBvc2l0aW9uLCBjb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgICBjb25zdCBjbGFpbVN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCksIC8vL1xuICAgICAgICAgIHN1cHBvc2l0aW9uU3RyaW5nID0gc3VwcG9zaXRpb24uZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBWZXJpZnlpbmcgdGhlICcke2NsYWltU3RyaW5nfScgY2xhaW0ncyAnJHtzdXBwb3NpdGlvblN0cmluZ30nIHN1cHBvc2l0aW9uLi4uYCk7XG5cbiAgICByZXR1cm4gc3VwcG9zaXRpb24udmVyaWZ5KGNvbnRleHQsIChzdXBwb3NpdGlvblZlcmlmaWVzKSA9PiB7XG4gICAgICBpZiAoc3VwcG9zaXRpb25WZXJpZmllcykge1xuICAgICAgICBjb25zdCBmYWN0T3JTdWJwcm9vZiA9IHN1cHBvc2l0aW9uOyAgLy8vL1xuXG4gICAgICAgIGNvbnRleHQuYXNzaWduQXNzaWdubWVudHMoKTtcblxuICAgICAgICBjb250ZXh0LmFkZEZhY3RPclN1YnByb29mKGZhY3RPclN1YnByb29mKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHN1cHBvc2l0aW9uVmVyaWZpZXMpIHtcbiAgICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmVyaWZpZWQgdGhlICcke2NsYWltU3RyaW5nfScgY2xhaW0ncyAnJHtzdXBwb3NpdGlvblN0cmluZ30nIHN1cHBvc2l0aW9uLmApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gY29udGludWF0aW9uKHN1cHBvc2l0aW9uVmVyaWZpZXMsIGNvbnRleHQpO1xuICAgIH0pO1xuICB9XG5cbiAgdmVyaWZ5U3VwcG9zaXRpb25zKGNvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICAgIGNvbnN0IHN1cHBvc2l0aW9uc0xlbmd0aCA9IHRoaXMuc3VwcG9zaXRpb25zLmxlbmd0aDtcblxuICAgIGlmIChzdXBwb3NpdGlvbnNMZW5ndGggPT09IDApIHtcbiAgICAgIGNvbnN0IHN1cHBvc2l0aW9uc1ZlcmlmeSA9IHRydWU7ICAvLy9cblxuICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihzdXBwb3NpdGlvbnNWZXJpZnksIGNvbnRleHQpO1xuICAgIH1cblxuICAgIGNvbnN0IGNsYWltU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgIC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVmVyaWZ5aW5nIHRoZSAnJHtjbGFpbVN0cmluZ30nIGNsYWltJ3Mgc3VwcG9zaXRpb25zLi4uYCk7XG5cbiAgICBjb25zdCB2ZXJpZnlTdXBwb3NpdGlvbiA9IHRoaXMudmVyaWZ5U3VwcG9zaXRpb24uYmluZCh0aGlzKTtcblxuICAgIHJldHVybiBhc3luY2hyb25vdXNGb3J3YXJkc0V2ZXJ5KHRoaXMuc3VwcG9zaXRpb25zLCB2ZXJpZnlTdXBwb3NpdGlvbiwgY29udGV4dCwgKHN1cHBvc2l0aW9uc1ZlcmlmeSkgPT4ge1xuICAgICAgaWYgKHN1cHBvc2l0aW9uc1ZlcmlmeSkge1xuICAgICAgICBjb250ZXh0LmRlYnVnKGAuLi52ZXJpZmllZCB0aGUgJyR7Y2xhaW1TdHJpbmd9JyBjbGFpbSdzIHN1cHBvc2l0aW9ucy5gKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihzdXBwb3NpdGlvbnNWZXJpZnksIGNvbnRleHQpO1xuICAgIH0pO1xuICB9XG5cbiAgZGlzY2hhcmdlSHlwb3RoZXNpcyhoeXBvdGhlc2lzLCBjb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgICBjb25zdCBjbGFpbVN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCksIC8vL1xuICAgICAgICAgIGh5cG90aGVzaXNTdHJpbmcgPSBoeXBvdGhlc2lzLmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgRGlzY2hhcmRpbmcgdGhlICcke2NsYWltU3RyaW5nfScgY2xhaW0ncyAnJHtoeXBvdGhlc2lzU3RyaW5nfScgaHlwb3RoZXNpcy4uLmApO1xuXG4gICAgaHlwb3RoZXNpcy5kaXNjaGFyZ2UoY29udGV4dCwgKGh5cG90aGVzaXNEaXNjaGFyZ2VzKSA9PiB7XG4gICAgICBpZiAoaHlwb3RoZXNpc0Rpc2NoYXJnZXMpIHtcbiAgICAgICAgY29udGV4dC50cmFjZShgLi4uZGlzY2hhcmdlcyB0aGUgJyR7Y2xhaW1TdHJpbmd9JyBjbGFpbSdzICcke2h5cG90aGVzaXNTdHJpbmd9JyBoeXBvdGhlc2lzLmApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gY29udGludWF0aW9uKGh5cG90aGVzaXNEaXNjaGFyZ2VzKTtcbiAgICB9KTtcbiAgfVxuXG4gIGRpc2NoYXJnZUh5cG90aGVzZXMoY29udGV4dCwgY29udGludWF0aW9uKSB7XG4gICAgY29uc3QgaHlwb3RoZXNlcyA9IHRoaXMuZ2V0SHlwb3RoZXNlcygpLFxuICAgICAgICAgIGRpc2NoYXJnZUh5cG90aGVzaXMgPSB0aGlzLmRpc2NoYXJnZUh5cG90aGVzaXMuYmluZCh0aGlzKTtcblxuICAgIHJldHVybiBhc3luY2hyb25vdXNFdmVyeShoeXBvdGhlc2VzLCBkaXNjaGFyZ2VIeXBvdGhlc2lzLCBjb250ZXh0LCBjb250aW51YXRpb24pO1xuICB9XG5cbiAgdW5pZnlTdGVwV2l0aERlZHVjdGlvbihzdGVwLCBjb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgICBjb25zdCBydWxlU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKSxcbiAgICAgICAgICBzdGVwU3RyaW5nID0gc3RlcC5nZXRTdHJpbmcoKSxcbiAgICAgICAgICBkZWR1Y3Rpb25TdHJpbmcgPSB0aGlzLmRlZHVjdGlvbi5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYFVuaWZ5aW5nIHRoZSAnJHtzdGVwU3RyaW5nfScgc3RlcCB3aXRoIHRoZSAnJHtydWxlU3RyaW5nfScgcnVsZSdzICcke2RlZHVjdGlvblN0cmluZ30nIGRlZHVjdGlvbi4uLmApO1xuXG4gICAgcmV0dXJuIHRoaXMuZGVkdWN0aW9uLnVuaWZ5U3RlcChzdGVwLCBjb250ZXh0LCAoc3RlcFVuaWZpZXMpID0+IHtcbiAgICAgIGxldCBzdGVwVW5pZmllc1dpdGhEZWR1Y3Rpb24gPSBmYWxzZTtcblxuICAgICAgaWYgKHN0ZXBVbmlmaWVzKSB7XG4gICAgICAgIHN0ZXBVbmlmaWVzV2l0aERlZHVjdGlvbiA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChzdGVwVW5pZmllc1dpdGhEZWR1Y3Rpb24pIHtcbiAgICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udW5pZmllZCB0aGUgJyR7c3RlcFN0cmluZ30nIHN0ZXAgd2l0aCB0aGUgJyR7cnVsZVN0cmluZ30nIHJ1bGUncyAnJHtkZWR1Y3Rpb25TdHJpbmd9JyBkZWR1Y3Rpb24uYCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjb250aW51YXRpb24oc3RlcFVuaWZpZXNXaXRoRGVkdWN0aW9uKTtcbiAgICB9KTtcbiAgfVxuXG4gIHVuaWZ5U3RlcEFuZEZhY3RPclN1YnByb29mcyhzdGVwLCBmYWN0b3JTdWJwcm9vZnMsIGNvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICAgIHJldHVybiB0aGlzLnVuaWZ5U3RlcFdpdGhEZWR1Y3Rpb24oc3RlcCwgY29udGV4dCwgKHN0YXRlbWVudFVuaWZpZXNXaXRoRGVkdWN0aW9uKSA9PiB7XG4gICAgICBpZiAoIXN0YXRlbWVudFVuaWZpZXNXaXRoRGVkdWN0aW9uKSB7XG4gICAgICAgIGNvbnN0IHN0ZXBBbmRGYWN0T3JTdWJwcm9vZnNVbmlmeSA9IGZhbHNlO1xuXG4gICAgICAgIHJldHVybiBjb250aW51YXRpb24oc3RlcEFuZEZhY3RPclN1YnByb29mc1VuaWZ5KTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXMuZGlzY2hhcmdlSHlwb3RoZXNlcyhjb250ZXh0LCAoaHlwb3RoZXNlc0Rpc2NoYXJnZSkgPT4ge1xuICAgICAgICBpZiAoIWh5cG90aGVzZXNEaXNjaGFyZ2UpIHtcbiAgICAgICAgICBjb25zdCBzdGVwQW5kRmFjdE9yU3VicHJvb2ZzVW5pZnkgPSBmYWxzZTtcblxuICAgICAgICAgIHJldHVybiBjb250aW51YXRpb24oc3RlcEFuZEZhY3RPclN1YnByb29mc1VuaWZ5KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLnVuaWZ5RmFjdE9yU3VicHJvb2ZzV2l0aFN1cHBvc2l0aW9ucyhmYWN0b3JTdWJwcm9vZnMsIGNvbnRleHQsIChmYWN0b3JTdWJwcm9vZnNVbmlmaWVzV2l0aFN1cHBvc2l0aW9ucykgPT4ge1xuICAgICAgICAgIGxldCBzdGVwQW5kRmFjdE9yU3VicHJvb2ZzVW5pZnkgPSBmYWxzZTtcblxuICAgICAgICAgIGlmIChmYWN0b3JTdWJwcm9vZnNVbmlmaWVzV2l0aFN1cHBvc2l0aW9ucykge1xuICAgICAgICAgICAgY29uc3QgZGVyaXZlZFN1YnN0aXR1dGlvbnNTb2x2ZWQgPSBjb250ZXh0LmFyZURlcml2ZWRTdWJzdGl0dXRpb25zU29sdmVkKCk7XG5cbiAgICAgICAgICAgIGlmIChkZXJpdmVkU3Vic3RpdHV0aW9uc1NvbHZlZCkge1xuICAgICAgICAgICAgICBzdGVwQW5kRmFjdE9yU3VicHJvb2ZzVW5pZnkgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBjb250aW51YXRpb24oc3RlcEFuZEZhY3RPclN1YnByb29mc1VuaWZ5KTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIHVuaWZ5RmFjdE9yU3VicHJvb2ZzV2l0aFN1cHBvc2l0aW9uKGZhY3RvclN1YnByb29mcywgc3VwcG9zaXRpb24sIGNvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICAgIHJldHVybiBhc3luY2hyb25vdXNFeHRyYWN0KGZhY3RvclN1YnByb29mcywgKGZhY3RPclN1YnByb29mLCBjb250aW51YXRpb24pID0+IHtcbiAgICAgIHJldHVybiBzdXBwb3NpdGlvbi51bmlmeUZhY3RPclN1YnByb29mKGZhY3RPclN1YnByb29mLCBjb250ZXh0LCBjb250aW51YXRpb24pO1xuICAgIH0sIChmYWN0T3JTdWJwcm9vZiA9IG51bGwpID0+IHtcbiAgICAgIGlmIChmYWN0T3JTdWJwcm9vZiAhPT0gbnVsbCkge1xuICAgICAgICBjb25zdCBmYWN0b3JTdWJwcm9vZnNVbmlmaWVzV2l0aFN1cHBvc2l0aW9uID0gdHJ1ZTtcblxuICAgICAgICByZXR1cm4gY29udGV4dC5zb2x2ZURlcml2ZWRTdWJzdGl0dXRpb25zKCgpID0+IHtcbiAgICAgICAgICByZXR1cm4gY29udGludWF0aW9uKGZhY3RvclN1YnByb29mc1VuaWZpZXNXaXRoU3VwcG9zaXRpb24pO1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHN1cHBvc2l0aW9uLnVuaWZ5SW5kZXBlbmRlbnRseShjb250ZXh0LCBjb250aW51YXRpb24pO1xuICAgIH0pO1xuICB9XG5cbiAgdW5pZnlGYWN0T3JTdWJwcm9vZnNXaXRoU3VwcG9zaXRpb25zKGZhY3RvclN1YnByb29mcywgY29udGV4dCwgY29udGludWF0aW9uKSB7XG4gICAgZmFjdG9yU3VicHJvb2ZzID0gcmV2ZXJzZShmYWN0b3JTdWJwcm9vZnMpOyAvLy9cblxuICAgIHJldHVybiBhc3luY2hyb25vdXNCYWNrd2FyZHNFdmVyeSh0aGlzLnN1cHBvc2l0aW9ucywgKHN1cHBvc2l0aW9uLCBjb250aW51YXRpb24pID0+IHtcbiAgICAgIHJldHVybiB0aGlzLnVuaWZ5RmFjdE9yU3VicHJvb2ZzV2l0aFN1cHBvc2l0aW9uKGZhY3RvclN1YnByb29mcywgc3VwcG9zaXRpb24sIGNvbnRleHQsIGNvbnRpbnVhdGlvbik7XG4gICAgfSwgY29udGludWF0aW9uKTtcbiAgfVxuXG4gIHRvSlNPTigpIHtcbiAgICBjb25zdCBsYWJlbHNKU09OID0gbGFiZWxzVG9MYWJlbHNKU09OKHRoaXMubGFiZWxzKSxcbiAgICAgICAgICBkZWR1Y3Rpb25KU09OID0gZGVkdWN0aW9uVG9EZWR1Y3Rpb25KU09OKHRoaXMuZGVkdWN0aW9uKSxcbiAgICAgICAgICBzdXBwb3NpdGlvbnNKU09OID0gc3VwcG9zaXRpb25zVG9TdXBwb3NpdGlvbnNKU09OKHRoaXMuc3VwcG9zaXRpb25zKSxcbiAgICAgICAgICBzaWduYXR1cmVKU09OID0gc2lnbmF0dXJlVG9TaWduYXR1cmVKU09OKHRoaXMuc2lnbmF0dXJlKSxcbiAgICAgICAgICBoeXBvdGhlc2VzSlNPTiA9IGh5cG90aGVzZXNUb0h5cG90aGVzZXNKU09OKHRoaXMuaHlwb3RoZXNlcyksXG4gICAgICAgICAgc3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTtcblxuICAgIGxldCBicmVha1BvaW50O1xuXG4gICAgYnJlYWtQb2ludCA9IHRoaXMuZ2V0QnJlYWtQb2ludCgpO1xuXG4gICAgY29uc3QgYnJlYWtQb2ludEpTT04gPSBicmVha1BvaW50VG9CcmVha1BvaW50SlNPTihicmVha1BvaW50KTtcblxuICAgIGJyZWFrUG9pbnQgPSBicmVha1BvaW50SlNPTjsgIC8vL1xuXG4gICAgY29uc3QgbGFiZWxzID0gbGFiZWxzSlNPTiwgIC8vL1xuICAgICAgICAgIGRlZHVjdGlvbiA9IGRlZHVjdGlvbkpTT04sICAvLy9cbiAgICAgICAgICBzdXBwb3NpdGlvbnMgPSBzdXBwb3NpdGlvbnNKU09OLCAgLy8vXG4gICAgICAgICAgc2lnbmF0dXJlID0gc2lnbmF0dXJlSlNPTiwgIC8vL1xuICAgICAgICAgIGh5cG90aGVzZXMgPSBoeXBvdGhlc2VzSlNPTiwgIC8vL1xuICAgICAgICAgIGpzb24gPSB7XG4gICAgICAgICAgICBzdHJpbmcsXG4gICAgICAgICAgICBicmVha1BvaW50LFxuICAgICAgICAgICAgbGFiZWxzLFxuICAgICAgICAgICAgZGVkdWN0aW9uLFxuICAgICAgICAgICAgc3VwcG9zaXRpb25zLFxuICAgICAgICAgICAgc2lnbmF0dXJlLFxuICAgICAgICAgICAgaHlwb3RoZXNlc1xuICAgICAgICAgIH07XG5cbiAgICByZXR1cm4ganNvbjtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tSlNPTihDbGFzcywganNvbiwgY29udGV4dCkge1xuICAgIGNvbnN0IGxhYmVscyA9IGxhYmVsc0Zyb21KU09OKGpzb24sIGNvbnRleHQpLFxuICAgICAgICAgIGRlZHVjdGlvbiA9IGRlZHVjdGlvbkZyb21KU09OKGpzb24sIGNvbnRleHQpLFxuICAgICAgICAgIHN1cHBvc2l0aW9ucyA9IHN1cHBvc2l0aW9uc0Zyb21KU09OKGpzb24sIGNvbnRleHQpLFxuICAgICAgICAgIHNpZ25hdHVyZSA9IHNpZ25hdHVyZUZyb21KU09OKGpzb24sIGNvbnRleHQpLFxuICAgICAgICAgIGh5cG90aGVzZXMgPSBoeXBvdGhlc2VzRnJvbUpTT04oanNvbiwgY29udGV4dCksXG4gICAgICAgICAgY2xhaW1TdHJpbmcgPSBjbGFpbVN0cmluZ0Zyb21MYWJlbHNTaWduYXR1cmVTdXBwb3NpdGlvbnNBbmREZWR1Y3Rpb24obGFiZWxzLCBzaWduYXR1cmUsIHN1cHBvc2l0aW9ucywgZGVkdWN0aW9uKSxcbiAgICAgICAgICBzdHJpbmcgPSBjbGFpbVN0cmluZywgLy8vXG4gICAgICAgICAgbm9kZSA9IG51bGwsXG4gICAgICAgICAgYnJlYWtQb2ludCA9IGJyZWFrUG9pbnRGcm9tSlNPTihqc29uKSxcbiAgICAgICAgICBwcm9vZiA9IG51bGwsXG4gICAgICAgICAgY2xhaW0gPSBuZXcgQ2xhc3MoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBsYWJlbHMsIHN1cHBvc2l0aW9ucywgZGVkdWN0aW9uLCBwcm9vZiwgc2lnbmF0dXJlLCBoeXBvdGhlc2VzKTtcblxuICAgIHJldHVybiBjbGFpbTtcbiAgfVxufVxuIl0sIm5hbWVzIjpbIkNsYWltIiwicmV2ZXJzZSIsImFycmF5VXRpbGl0aWVzIiwiYnJlYWtQb2ludEZyb21KU09OIiwiYnJlYWtQb2ludFRvQnJlYWtQb2ludEpTT04iLCJicmVha1BvaW50VXRpbGl0aWVzIiwiYXN5bmNocm9ub3VzQWxsIiwiYXN5bmNocm9ub3VzRXZlcnkiLCJhc3luY2hyb25vdXNFeHRyYWN0IiwiYXN5bmNocm9ub3VzRm9yd2FyZHNFdmVyeSIsImFzeW5jaHJvbm91c0JhY2t3YXJkc0V2ZXJ5IiwiY29udGludWF0aW9uVXRpbGl0aWVzIiwiRWxlbWVudCIsImNvbnRleHQiLCJzdHJpbmciLCJub2RlIiwiYnJlYWtQb2ludCIsImxhYmVscyIsInN1cHBvc2l0aW9ucyIsImRlZHVjdGlvbiIsInByb29mIiwic2lnbmF0dXJlIiwiaHlwb3RoZXNlcyIsImdldExhYmVscyIsImdldFN1cHBvc2l0aW9ucyIsImdldERlZHVjdGlvbiIsImdldFByb29mIiwiZ2V0U2lnbmF0dXJlIiwiZ2V0SHlwb3RoZXNlcyIsInNldEh5cG90aGVzZXMiLCJnZXRTdXBwb3NpdGlvbiIsImluZGV4Iiwic3VwcG9zaXRpb24iLCJpc1NhdGlzZmlhYmxlIiwic2F0aXNmaWFibGUiLCJpc0h5cG90aGV0aWNhbCIsImh5cG90aGVzZXNMZW5ndGgiLCJsZW5ndGgiLCJoeXBvdGhldGljYWwiLCJtYXRjaE1ldGF2YXJpYWJsZU5vZGUiLCJtZXRhdmFyaWFibGVOb2RlIiwibWV0YXZhcmlhYmxlTm9kZU1hdGNoZXMiLCJzb21lIiwibGFiZWwiLCJ2ZXJpZnlFeCIsImNvbnRpbnVhdGlvbiIsImNsYWltU3RyaW5nIiwiZ2V0U3RyaW5nIiwidHJhY2UiLCJlbmNsb3NlIiwidmVyaWZ5UHJvb2YiLCJiaW5kIiwidmVyaWZ5TGFiZWxzIiwidmVyaWZ5RGVkdWN0aW9uIiwidmVyaWZ5U3VwcG9zaXRpb25zIiwidmVyaWZpZXMiLCJkZWJ1ZyIsInZlcmlmeUxhYmVsIiwibGFiZWxzVmVyaWZ5IiwibGFiZWxTdHJpbmciLCJ2ZXJpZnkiLCJsYWJlbFZlcmlmaWVzIiwicHJvb2ZWZXJpZmllcyIsInN0YXRlbWVudCIsImdldFN0YXRlbWVudCIsImRlZHVjdGlvblN0cmluZyIsImRlZHVjdGlvblZlcmlmaWVzIiwidmVyaWZ5U3VwcG9zaXRpb24iLCJzdXBwb3NpdGlvblN0cmluZyIsInN1cHBvc2l0aW9uVmVyaWZpZXMiLCJmYWN0T3JTdWJwcm9vZiIsImFzc2lnbkFzc2lnbm1lbnRzIiwiYWRkRmFjdE9yU3VicHJvb2YiLCJzdXBwb3NpdGlvbnNMZW5ndGgiLCJzdXBwb3NpdGlvbnNWZXJpZnkiLCJkaXNjaGFyZ2VIeXBvdGhlc2lzIiwiaHlwb3RoZXNpcyIsImh5cG90aGVzaXNTdHJpbmciLCJkaXNjaGFyZ2UiLCJoeXBvdGhlc2lzRGlzY2hhcmdlcyIsImRpc2NoYXJnZUh5cG90aGVzZXMiLCJ1bmlmeVN0ZXBXaXRoRGVkdWN0aW9uIiwic3RlcCIsInJ1bGVTdHJpbmciLCJzdGVwU3RyaW5nIiwidW5pZnlTdGVwIiwic3RlcFVuaWZpZXMiLCJzdGVwVW5pZmllc1dpdGhEZWR1Y3Rpb24iLCJ1bmlmeVN0ZXBBbmRGYWN0T3JTdWJwcm9vZnMiLCJmYWN0b3JTdWJwcm9vZnMiLCJzdGF0ZW1lbnRVbmlmaWVzV2l0aERlZHVjdGlvbiIsInN0ZXBBbmRGYWN0T3JTdWJwcm9vZnNVbmlmeSIsImh5cG90aGVzZXNEaXNjaGFyZ2UiLCJ1bmlmeUZhY3RPclN1YnByb29mc1dpdGhTdXBwb3NpdGlvbnMiLCJmYWN0b3JTdWJwcm9vZnNVbmlmaWVzV2l0aFN1cHBvc2l0aW9ucyIsImRlcml2ZWRTdWJzdGl0dXRpb25zU29sdmVkIiwiYXJlRGVyaXZlZFN1YnN0aXR1dGlvbnNTb2x2ZWQiLCJ1bmlmeUZhY3RPclN1YnByb29mc1dpdGhTdXBwb3NpdGlvbiIsInVuaWZ5RmFjdE9yU3VicHJvb2YiLCJmYWN0b3JTdWJwcm9vZnNVbmlmaWVzV2l0aFN1cHBvc2l0aW9uIiwic29sdmVEZXJpdmVkU3Vic3RpdHV0aW9ucyIsInVuaWZ5SW5kZXBlbmRlbnRseSIsInRvSlNPTiIsImxhYmVsc0pTT04iLCJsYWJlbHNUb0xhYmVsc0pTT04iLCJkZWR1Y3Rpb25KU09OIiwiZGVkdWN0aW9uVG9EZWR1Y3Rpb25KU09OIiwic3VwcG9zaXRpb25zSlNPTiIsInN1cHBvc2l0aW9uc1RvU3VwcG9zaXRpb25zSlNPTiIsInNpZ25hdHVyZUpTT04iLCJzaWduYXR1cmVUb1NpZ25hdHVyZUpTT04iLCJoeXBvdGhlc2VzSlNPTiIsImh5cG90aGVzZXNUb0h5cG90aGVzZXNKU09OIiwiZ2V0QnJlYWtQb2ludCIsImJyZWFrUG9pbnRKU09OIiwianNvbiIsImZyb21KU09OIiwiQ2xhc3MiLCJsYWJlbHNGcm9tSlNPTiIsImRlZHVjdGlvbkZyb21KU09OIiwic3VwcG9zaXRpb25zRnJvbUpTT04iLCJzaWduYXR1cmVGcm9tSlNPTiIsImh5cG90aGVzZXNGcm9tSlNPTiIsImNsYWltU3RyaW5nRnJvbUxhYmVsc1NpZ25hdHVyZVN1cHBvc2l0aW9uc0FuZERlZHVjdGlvbiIsImNsYWltIl0sIm1hcHBpbmdzIjoiQUFBQTs7OzsrQkFzQkE7OztlQUFxQkE7OzsyQkFwQlU7Z0NBQ3FDO3lCQUU1Qzt3QkFDK0M7c0JBVXhCO0FBRS9DLE1BQU0sRUFBRUMsT0FBTyxFQUFFLEdBQUdDLHlCQUFjLEVBQzVCLEVBQUVDLGtCQUFrQixFQUFFQywwQkFBMEIsRUFBRSxHQUFHQyxtQ0FBbUIsRUFDeEUsRUFBRUMsZUFBZSxFQUFFQyxpQkFBaUIsRUFBRUMsbUJBQW1CLEVBQUVDLHlCQUF5QixFQUFFQywwQkFBMEIsRUFBRSxHQUFHQyxxQ0FBcUI7QUFFakksTUFBTVgsY0FBY1ksdUJBQU87SUFDeEMsWUFBWUMsT0FBTyxFQUFFQyxNQUFNLEVBQUVDLElBQUksRUFBRUMsVUFBVSxFQUFFQyxNQUFNLEVBQUVDLFlBQVksRUFBRUMsU0FBUyxFQUFFQyxLQUFLLEVBQUVDLFNBQVMsRUFBRUMsVUFBVSxDQUFFO1FBQzVHLEtBQUssQ0FBQ1QsU0FBU0MsUUFBUUMsTUFBTUM7UUFFN0IsSUFBSSxDQUFDQyxNQUFNLEdBQUdBO1FBQ2QsSUFBSSxDQUFDQyxZQUFZLEdBQUdBO1FBQ3BCLElBQUksQ0FBQ0MsU0FBUyxHQUFHQTtRQUNqQixJQUFJLENBQUNDLEtBQUssR0FBR0E7UUFDYixJQUFJLENBQUNDLFNBQVMsR0FBR0E7UUFDakIsSUFBSSxDQUFDQyxVQUFVLEdBQUdBO0lBQ3BCO0lBRUFDLFlBQVk7UUFDVixPQUFPLElBQUksQ0FBQ04s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