occam-nominal 1.0.222 → 1.0.226

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 (79) hide show
  1. package/lib/context/bounded.js +1 -10
  2. package/lib/context/file/nominal.js +20 -19
  3. package/lib/context/mnemic.js +7 -67
  4. package/lib/context/proleptic.js +22 -15
  5. package/lib/context.js +5 -27
  6. package/lib/element/assertion/property.js +52 -72
  7. package/lib/element/assertion/type.js +1 -1
  8. package/lib/element/combinator.js +9 -9
  9. package/lib/element/conclusion.js +1 -1
  10. package/lib/element/constructor.js +10 -10
  11. package/lib/element/declaration/combinator.js +10 -10
  12. package/lib/element/declaration/constructor.js +10 -10
  13. package/lib/element/declaration/generator.js +10 -10
  14. package/lib/element/declaration/property.js +21 -14
  15. package/lib/element/declaration/type.js +2 -2
  16. package/lib/element/equality.js +1 -1
  17. package/lib/element/generator.js +10 -10
  18. package/lib/element/proofAssertion/premise.js +1 -1
  19. package/lib/element/proofAssertion/step.js +1 -9
  20. package/lib/element/proofAssertion/supposition.js +1 -1
  21. package/lib/element/property.js +11 -11
  22. package/lib/element/reference.js +2 -2
  23. package/lib/element/term.js +44 -6
  24. package/lib/element/type.js +6 -9
  25. package/lib/node/assertion/property.js +14 -10
  26. package/lib/nonTerminalNodeMap.js +1 -3
  27. package/lib/preamble.js +1 -2
  28. package/lib/process/assign.js +4 -4
  29. package/lib/process/discharge.js +3 -3
  30. package/lib/process/instantiate.js +2 -8
  31. package/lib/process/unify.js +89 -52
  32. package/lib/process/validate.js +86 -8
  33. package/lib/process/validation.js +22 -1
  34. package/lib/ruleNames.js +1 -5
  35. package/lib/utilities/element.js +16 -39
  36. package/lib/utilities/json.js +18 -280
  37. package/lib/utilities/synoptic.js +1 -23
  38. package/package.json +5 -5
  39. package/src/context/bounded.js +0 -14
  40. package/src/context/file/nominal.js +23 -20
  41. package/src/context/mnemic.js +8 -117
  42. package/src/context/proleptic.js +25 -14
  43. package/src/context.js +10 -45
  44. package/src/element/assertion/property.js +68 -98
  45. package/src/element/assertion/type.js +1 -1
  46. package/src/element/combinator.js +8 -8
  47. package/src/element/conclusion.js +1 -1
  48. package/src/element/constructor.js +9 -9
  49. package/src/element/declaration/combinator.js +9 -9
  50. package/src/element/declaration/constructor.js +9 -9
  51. package/src/element/declaration/generator.js +9 -9
  52. package/src/element/declaration/property.js +21 -13
  53. package/src/element/declaration/type.js +2 -1
  54. package/src/element/equality.js +14 -14
  55. package/src/element/generator.js +9 -9
  56. package/src/element/proofAssertion/premise.js +2 -2
  57. package/src/element/proofAssertion/step.js +0 -14
  58. package/src/element/proofAssertion/supposition.js +2 -2
  59. package/src/element/property.js +10 -10
  60. package/src/element/reference.js +2 -2
  61. package/src/element/term.js +60 -6
  62. package/src/element/type.js +5 -9
  63. package/src/node/assertion/property.js +20 -13
  64. package/src/nonTerminalNodeMap.js +0 -3
  65. package/src/preamble.js +0 -1
  66. package/src/process/assign.js +12 -8
  67. package/src/process/discharge.js +2 -2
  68. package/src/process/instantiate.js +0 -4
  69. package/src/process/unify.js +136 -80
  70. package/src/process/validate.js +122 -8
  71. package/src/process/validation.js +26 -0
  72. package/src/ruleNames.js +0 -1
  73. package/src/utilities/element.js +17 -46
  74. package/src/utilities/json.js +30 -323
  75. package/src/utilities/synoptic.js +0 -20
  76. package/lib/element/propertyRelation.js +0 -132
  77. package/lib/node/propertyRelation.js +0 -31
  78. package/src/element/propertyRelation.js +0 -193
  79. package/src/node/propertyRelation.js +0 -30
@@ -151,15 +151,6 @@ class BoundedContext extends _context.default {
151
151
  this.subproofOrProofAssertions.push(subproofOrProofAssertion);
152
152
  context.debug(`...added the '${subproofOrProofAssertionString}' subproof or proof assertion to the bounded context.`);
153
153
  }
154
- compareTermAndPropertyRelation(term, propertyRelation) {
155
- const context = this, proofAssertions = this.getProofAssertions(), comparesToTermAndPropertyRelation = proofAssertions.some((proofAssertion)=>{
156
- const comparesToTermAndPropertyRelation = proofAssertion.compareTermAndPropertyRelation(term, propertyRelation, context);
157
- if (comparesToTermAndPropertyRelation) {
158
- return true;
159
- }
160
- });
161
- return comparesToTermAndPropertyRelation;
162
- }
163
154
  findDeclaredVariableByVariableIdentifier(variableIdentifier) {
164
155
  const declaredVariables = this.getDeclaredVariables(), declaredVariable = declaredVariables.find((declaredVariable)=>{
165
156
  const variableComparesToVariableIdentifier = declaredVariable.compareVariableIdentifier(variableIdentifier);
@@ -209,4 +200,4 @@ class BoundedContext extends _context.default {
209
200
  }
210
201
  const _default = BoundedContext;
211
202
 
212
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb250ZXh0L2JvdW5kZWQuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IGFycmF5VXRpbGl0aWVzIH0gZnJvbSBcIm5lY2Vzc2FyeVwiO1xuXG5pbXBvcnQgQ29udGV4dCBmcm9tIFwiLi4vY29udGV4dFwiO1xuXG5pbXBvcnQgeyBtZXJnZUVxdWl2YWxlbmNlcywgZXF1aXZhbGVuY2VzRnJvbUVxdWFsaXR5LCBzZXBhcmF0ZUdyb3VuZGVkVGVybXNBbmREZWZpbmVkVmFyaWFibGVzIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9lcXVpdmFsZW5jZXNcIjtcblxuY29uc3QgeyBsYXN0LCBjbGVhciB9ID0gYXJyYXlVdGlsaXRpZXM7XG5cbmNsYXNzIEJvdW5kZWRDb250ZXh0IGV4dGVuZHMgQ29udGV4dCB7XG4gIGNvbnN0cnVjdG9yKGNvbnRleHQsIGFzc2lnbm1lbnRzLCBlcXVpdmFsZW5jZXMsIGRlY2xhcmVkVmFyaWFibGVzLCBjb25zdHJhaW50cywgc3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucykge1xuICAgIHN1cGVyKGNvbnRleHQpO1xuXG4gICAgdGhpcy5hc3NpZ25tZW50cyA9IGFzc2lnbm1lbnRzO1xuICAgIHRoaXMuZXF1aXZhbGVuY2VzID0gZXF1aXZhbGVuY2VzO1xuICAgIHRoaXMuZGVjbGFyZWRWYXJpYWJsZXMgPSBkZWNsYXJlZFZhcmlhYmxlcztcbiAgICB0aGlzLmNvbnN0cmFpbnRzID0gY29uc3RyYWludHM7XG4gICAgdGhpcy5zdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zID0gc3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucztcbiAgfVxuXG4gIGdldEFzc2lnbm1lbnRzKCkge1xuICAgIHJldHVybiB0aGlzLmFzc2lnbm1lbnRzO1xuICB9XG5cbiAgZ2V0RXF1aXZhbGVuY2VzKCkge1xuICAgIGxldCBlcXVpdmFsZW5jZXM7XG5cbiAgICBsZXQgY29udGV4dDtcblxuICAgIGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKTtcblxuICAgIGVxdWl2YWxlbmNlcyA9IGNvbnRleHQuZ2V0RXF1aXZhbGVuY2VzKCk7XG5cbiAgICBjb250ZXh0ID0gdGhpczsgLy8vXG5cbiAgICBlcXVpdmFsZW5jZXMgPSBtZXJnZUVxdWl2YWxlbmNlcyh0aGlzLmVxdWl2YWxlbmNlcywgZXF1aXZhbGVuY2VzLCBjb250ZXh0KTsgIC8vL1xuXG4gICAgcmV0dXJuIGVxdWl2YWxlbmNlcztcbiAgfVxuXG4gIGdldERlY2xhcmVkVmFyaWFibGVzKCkge1xuICAgIGxldCBkZWNsYXJlZFZhcmlhYmxlcztcblxuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKTtcblxuICAgIGRlY2xhcmVkVmFyaWFibGVzID0gY29udGV4dC5nZXREZWNsYXJlZFZhcmlhYmxlcygpO1xuXG4gICAgZGVjbGFyZWRWYXJpYWJsZXMgPSBbXG4gICAgICAuLi50aGlzLmRlY2xhcmVkVmFyaWFibGVzLFxuICAgICAgLi4uZGVjbGFyZWRWYXJpYWJsZXNcbiAgICBdO1xuXG4gICAgcmV0dXJuIGRlY2xhcmVkVmFyaWFibGVzO1xuICB9XG5cbiAgZ2V0Q29uc3RyYWludHMoKSB7XG4gICAgcmV0dXJuIHRoaXMuY29uc3RyYWludHM7XG4gIH1cblxuICBnZXRTdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zKCkge1xuICAgIGxldCBzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zO1xuXG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpO1xuXG4gICAgc3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucyA9IGNvbnRleHQuZ2V0U3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucygpO1xuXG4gICAgc3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucyA9IFsgIC8vL1xuICAgICAgLi4uc3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucyxcbiAgICAgIC4uLnRoaXMuc3VicHJvb2ZPclByb29mQXNzZXJ0aW9uc1xuICAgIF07XG5cbiAgICByZXR1cm4gc3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucztcbiAgfVxuXG4gIGdldFByb29mQXNzZXJ0aW9ucygpIHtcbiAgICBjb25zdCBzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zID0gdGhpcy5nZXRTdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zKCksXG4gICAgICAgICAgcHJvb2ZBc3NlcnRpb25zID0gc3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucy5maWx0ZXIoKHN1YnByb29mT3JQcm9vZkFzc2VydGlvbikgPT4ge1xuICAgICAgICAgICAgY29uc3Qgc3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucHJvb2ZBc3NlcnRpb24gPSBzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb24uaXNQcm9vZkFzc2VydGlvbigpO1xuXG4gICAgICAgICAgICBpZiAoc3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucHJvb2ZBc3NlcnRpb24pIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG5cbiAgICByZXR1cm4gcHJvb2ZBc3NlcnRpb25zO1xuICB9XG5cbiAgZ2V0U3RlcHMoKSB7XG4gICAgY29uc3QgcHJvb2ZBc3NlcnRpb25zID0gdGhpcy5nZXRQcm9vZkFzc2VydGlvbnMoKSxcbiAgICAgICAgICBzdGVwcyA9IHByb29mQXNzZXJ0aW9ucy5maWx0ZXIoKHByb29mQXNzZXJ0aW9uKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBwcm9vZkFzc2VydGlvblN0ZXAgPSBwcm9vZkFzc2VydGlvbi5pc1N0ZXAoKTtcblxuICAgICAgICAgICAgaWYgKHByb29mQXNzZXJ0aW9uU3RlcCkge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcblxuICAgIHJldHVybiBzdGVwcztcbiAgfVxuXG4gIGdldExhc3RTdGVwKCkge1xuICAgIGxldCBsYXN0U3RlcCA9IG51bGw7XG5cbiAgICBjb25zdCBzdGVwcyA9IHRoaXMuZ2V0U3RlcHMoKSxcbiAgICAgICAgICBzdGVwc0xlbmd0aCA9IHN0ZXBzLmxlbmd0aDtcblxuICAgIGlmIChzdGVwc0xlbmd0aCA+IDApIHtcbiAgICAgIGxhc3RTdGVwID0gbGFzdChzdGVwcyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGxhc3RTdGVwO1xuICB9XG5cbiAgaXNNZXRhTGV2ZWwoKSB7XG4gICAgbGV0IG1ldGFMZXZlbDtcblxuICAgIGlmICh0aGlzLmNvbnN0cmFpbnRzICE9PSBudWxsKSB7XG4gICAgICBtZXRhTGV2ZWwgPSB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCk7XG5cbiAgICAgIG1ldGFMZXZlbCA9IGNvbnRleHQuaXNNZXRhTGV2ZWwoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbWV0YUxldmVsO1xuICB9XG5cbiAgYWRkRXF1YWxpdHkoZXF1YWxpdHkpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcywgLy8vXG4gICAgICAgICAgZXF1YWxpdHlTdHJpbmcgPSBlcXVhbGl0eS5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYEFkZGluZyB0aGUgJyR7ZXF1YWxpdHlTdHJpbmd9JyBlcXVhbGl0eSB0byB0aGUgYm91bmRlZCBjb250ZXh0Li4uYCk7XG5cbiAgICBjb25zdCBlcXVhbGl0eVJlbGZleGl2ZSA9IGVxdWFsaXR5LmlzUmVmbGV4aXZlKCk7XG5cbiAgICBpZiAoIWVxdWFsaXR5UmVsZmV4aXZlKSB7XG4gICAgICBjb25zdCBlcXVpdmFsZW5jZXMgPSBlcXVpdmFsZW5jZXNGcm9tRXF1YWxpdHkoZXF1YWxpdHksIGNvbnRleHQpO1xuXG4gICAgICB0aGlzLmVxdWl2YWxlbmNlcyA9IG1lcmdlRXF1aXZhbGVuY2VzKHRoaXMuZXF1aXZhbGVuY2VzLCBlcXVpdmFsZW5jZXMsIGNvbnRleHQpO1xuXG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi5hZGRlZCB0aGUgJyR7ZXF1YWxpdHlTdHJpbmd9JyBlcXVhbGl0eSB0byB0aGUgYm91bmRlZCBjb250ZXh0LmApO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGBUaGUgcmVmbGV4aXZlICcke2VxdWFsaXR5U3RyaW5nfScgZXF1YWxpdHkgaGFzIG5vdCBiZWVuIGFkZGVkIHRvIHRoZSBib3VuZGVkIGNvbnRleHQuYCk7XG4gICAgfVxuICB9XG5cbiAgYWRkQXNzaWdubWVudChhc3NpZ25tZW50KSB7XG4gICAgdGhpcy5hc3NpZ25tZW50cy5wdXNoKGFzc2lnbm1lbnQpO1xuICB9XG5cbiAgYXNzaWduQXNzaWdubWVudHMoKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXM7IC8vL1xuXG4gICAgdGhpcy5hc3NpZ25tZW50cy5mb3JFYWNoKChhc3NpZ25tZW50KSA9PiB7XG4gICAgICBhc3NpZ25tZW50KGNvbnRleHQpO1xuICAgIH0pO1xuXG4gICAgY2xlYXIodGhpcy5hc3NpZ25tZW50cyk7XG4gIH1cblxuICBhZGREZWNsYXJlZFZhcmlhYmxlKGRlY2xhcmVkVmFyaWFibGUpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcywgLy8vXG4gICAgICAgICAgZGVjbGFyZWRWYXJpYWJsZVN0cmluZyA9IGRlY2xhcmVkVmFyaWFibGUuZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBBZGRpbmcgdGhlICcke2RlY2xhcmVkVmFyaWFibGVTdHJpbmd9JyBkZWNsYXJlZCB2YXJpYWJsZSB0byB0aGUgYm91bmRlZCBjb250ZXh0Li4uYCk7XG5cbiAgICB0aGlzLmRlY2xhcmVkVmFyaWFibGVzLnB1c2goZGVjbGFyZWRWYXJpYWJsZSk7XG5cbiAgICBjb250ZXh0LmRlYnVnKGAuLi5hZGRlZCB0aGUgJyR7ZGVjbGFyZWRWYXJpYWJsZVN0cmluZ30nIGRlY2xhcmVkIHZhcmlhYmxlIHRvIHRoZSBib3VuZGVkIGNvbnRleHQuYCk7XG4gIH1cblxuICBhZGRDb25zdHJhaW50KGNvbnN0cmFpbnQpIHtcbiAgICBpZiAodGhpcy5jb25zdHJhaW50cyA9PT0gbnVsbCkge1xuICAgICAgc3VwZXIuYWRkQ29uc3RyYWludChjb25zdHJhaW50KTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLCAvLy9cbiAgICAgICAgICBjb25zdHJhaW50QSA9IGNvbnN0cmFpbnQsIC8vL1xuICAgICAgICAgIGNvbnN0cmFpbnRTdHJpbmcgPSBjb25zdHJhaW50LmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgQWRkaW5nIHRoZSAnJHtjb25zdHJhaW50U3RyaW5nfScgY29uc3RyYWludCB0byB0aGUgYm91bmRlZCBjb250ZXh0Li4uYCk7XG5cbiAgICBjb25zdCBjb25zdHJhaW50QiA9IHRoaXMuY29uc3RyYWludHMuZmluZCgoY29uc3RyYWludCkgPT4ge1xuICAgICAgY29uc3QgY29uc3RyYWludEIgPSBjb25zdHJhaW50LCAvLy9cbiAgICAgICAgICAgIGNvbnN0cmFpbnRBRXF1YWxUb0Fzc3VtcHRpb25CID0gY29uc3RyYWludEEuaXNFcXVhbFRvKGNvbnN0cmFpbnRCKTtcblxuICAgICAgaWYgKGNvbnN0cmFpbnRBRXF1YWxUb0Fzc3VtcHRpb25CKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH0pIHx8IG51bGw7XG5cbiAgICBpZiAoY29uc3RyYWludEIgIT09IG51bGwpIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYFRoZSAnJHtjb25zdHJhaW50U3RyaW5nfScgY29uc3RyYWludCBoYXMgYWxyZWFkeSBiZWVuIGFkZGVkIHRvIHRoZSBib3VuZGVkIGNvbnRleHQuYCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY29uc3RyYWludHMucHVzaChjb25zdHJhaW50KTtcbiAgICB9XG5cbiAgICBjb250ZXh0LmRlYnVnKGAuLi5hZGRlZCB0aGUgJyR7Y29uc3RyYWludFN0cmluZ30nIGNvbnN0cmFpbnQgdG8gdGhlIGJvdW5kZWQgY29udGV4dC5gKTtcbiAgfVxuXG4gIGFkZFN1YnByb29mT3JQcm9vZkFzc2VydGlvbihzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb24pIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcywgLy8vXG4gICAgICAgICAgc3VicHJvb2ZPclByb29mQXNzZXJ0aW9uU3RyaW5nID0gc3VicHJvb2ZPclByb29mQXNzZXJ0aW9uLmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgQWRkaW5nIHRoZSAnJHtzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25TdHJpbmd9JyBzdWJwcm9vZiBvciBwcm9vZiBhc3NlcnRpb24gdG8gdGhlIGJvdW5kZWQgY29udGV4dC4uLmApO1xuXG4gICAgdGhpcy5zdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zLnB1c2goc3VicHJvb2ZPclByb29mQXNzZXJ0aW9uKTtcblxuICAgIGNvbnRleHQuZGVidWcoYC4uLmFkZGVkIHRoZSAnJHtzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25TdHJpbmd9JyBzdWJwcm9vZiBvciBwcm9vZiBhc3NlcnRpb24gdG8gdGhlIGJvdW5kZWQgY29udGV4dC5gKTtcbiAgfVxuXG4gIGNvbXBhcmVUZXJtQW5kUHJvcGVydHlSZWxhdGlvbih0ZXJtLCBwcm9wZXJ0eVJlbGF0aW9uKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMsIC8vL1xuICAgICAgICAgIHByb29mQXNzZXJ0aW9ucyA9IHRoaXMuZ2V0UHJvb2ZBc3NlcnRpb25zKCksXG4gICAgICAgICAgY29tcGFyZXNUb1Rlcm1BbmRQcm9wZXJ0eVJlbGF0aW9uID0gcHJvb2ZBc3NlcnRpb25zLnNvbWUoKHByb29mQXNzZXJ0aW9uKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBjb21wYXJlc1RvVGVybUFuZFByb3BlcnR5UmVsYXRpb24gPSBwcm9vZkFzc2VydGlvbi5jb21wYXJlVGVybUFuZFByb3BlcnR5UmVsYXRpb24odGVybSwgcHJvcGVydHlSZWxhdGlvbiwgY29udGV4dCk7XG5cbiAgICAgICAgICAgIGlmIChjb21wYXJlc1RvVGVybUFuZFByb3BlcnR5UmVsYXRpb24pIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG5cbiAgICByZXR1cm4gY29tcGFyZXNUb1Rlcm1BbmRQcm9wZXJ0eVJlbGF0aW9uO1xuICB9XG5cbiAgZmluZERlY2xhcmVkVmFyaWFibGVCeVZhcmlhYmxlSWRlbnRpZmllcih2YXJpYWJsZUlkZW50aWZpZXIpIHtcbiAgICBjb25zdCBkZWNsYXJlZFZhcmlhYmxlcyA9IHRoaXMuZ2V0RGVjbGFyZWRWYXJpYWJsZXMoKSxcbiAgICAgICAgICBkZWNsYXJlZFZhcmlhYmxlID0gZGVjbGFyZWRWYXJpYWJsZXMuZmluZCgoZGVjbGFyZWRWYXJpYWJsZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgdmFyaWFibGVDb21wYXJlc1RvVmFyaWFibGVJZGVudGlmaWVyID0gZGVjbGFyZWRWYXJpYWJsZS5jb21wYXJlVmFyaWFibGVJZGVudGlmaWVyKHZhcmlhYmxlSWRlbnRpZmllcik7XG5cbiAgICAgICAgICAgIGlmICh2YXJpYWJsZUNvbXBhcmVzVG9WYXJpYWJsZUlkZW50aWZpZXIpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSkgfHwgbnVsbDtcblxuICAgIHJldHVybiBkZWNsYXJlZFZhcmlhYmxlO1xuICB9XG5cbiAgZmluZENvbnN0cmFpbnRCeUNvbnN0cmFpbnROb2RlKGNvbnN0cmFpbnROb2RlKSB7XG4gICAgbGV0IGNvbnN0cmFpbnQ7XG5cbiAgICBpZiAodGhpcy5jb25zdHJhaW50cyA9PT0gbnVsbCkge1xuICAgICAgY29uc3RyYWludCA9IHN1cGVyLmZpbmRDb25zdHJhaW50QnlDb25zdHJhaW50Tm9kZShjb25zdHJhaW50Tm9kZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0cmFpbnQgPSB0aGlzLmNvbnN0cmFpbnRzLmZpbmQoKGNvbnN0cmFpbnQpID0+IHtcbiAgICAgICAgY29uc3QgY29uc3RyYWludE5vZGVNYXRjaGVzID0gY29uc3RyYWludC5tYXRjaENvbnN0cmFpbnROb2RlKGNvbnN0cmFpbnROb2RlKTtcblxuICAgICAgICBpZiAoY29uc3RyYWludE5vZGVNYXRjaGVzKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH0pIHx8IG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbnN0cmFpbnQ7XG4gIH1cblxuICBpc0RlY2xhcmVkVmFyaWFibGVQcmVzZW50QnlWYXJpYWJsZUlkZW50aWZpZXIodmFyaWFibGVJZGVudGlmaWVyKSB7XG4gICAgY29uc3QgZGVjbGFyZWRWYXJpYWJsZSA9IHRoaXMuZmluZERlY2xhcmVkVmFyaWFibGVCeVZhcmlhYmxlSWRlbnRpZmllcih2YXJpYWJsZUlkZW50aWZpZXIpLFxuICAgICAgICAgIGRlY2xhcmVkVmFyaWFibGVQcmVzZW50ID0gKGRlY2xhcmVkVmFyaWFibGUgIT09IG51bGwpO1xuXG4gICAgcmV0dXJuIGRlY2xhcmVkVmFyaWFibGVQcmVzZW50O1xuICB9XG5cbiAgaXNUZXJtR3JvdW5kZWQodGVybSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLCAvLy9cbiAgICAgICAgICBlcXVpdmFsZW5jZXMgPSB0aGlzLmdldEVxdWl2YWxlbmNlcygpLFxuICAgICAgICAgIGdyb3VuZGVkVGVybXMgPSBbXSxcbiAgICAgICAgICBkZWZpbmVkVmFyaWFibGVzID0gW107XG5cbiAgICBzZXBhcmF0ZUdyb3VuZGVkVGVybXNBbmREZWZpbmVkVmFyaWFibGVzKGVxdWl2YWxlbmNlcywgZ3JvdW5kZWRUZXJtcywgZGVmaW5lZFZhcmlhYmxlcywgY29udGV4dCk7XG5cbiAgICBjb25zdCB0ZXJtTWF0Y2hlc0dyb3VuZGVkVGVybSA9IGdyb3VuZGVkVGVybXMuc29tZSgoZ3JvdW5kZWRUZXJtKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBncm91bmRlZFRlcm1Ob2RlID0gZ3JvdW5kZWRUZXJtLmdldE5vZGUoKSxcbiAgICAgICAgICAgICAgICAgIGdyb3VuZGVkVGVybU5vZGVNYXRjaGVzID0gdGVybS5tYXRjaFRlcm1Ob2RlKGdyb3VuZGVkVGVybU5vZGUpO1xuXG4gICAgICAgICAgICBpZiAoZ3JvdW5kZWRUZXJtTm9kZU1hdGNoZXMpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSksXG4gICAgICAgICAgdGVybUdyb3VuZGVkID0gdGVybU1hdGNoZXNHcm91bmRlZFRlcm07IC8vL1xuXG4gICAgcmV0dXJuIHRlcm1Hcm91bmRlZDtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tTm90aGluZyhjb250ZXh0KSB7XG4gICAgY29uc3QgYXNzaWdubWVudHMgPSBbXSxcbiAgICAgICAgICBlcXVpdmFsZW5jZXMgPSBbXSxcbiAgICAgICAgICBkZWNsYXJlZFZhcmlhYmxlcyA9IFtdLFxuICAgICAgICAgIGNvbnN0cmFpbnRzID0gbnVsbCxcbiAgICAgICAgICBzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zID0gW10sXG4gICAgICAgICAgYm91bmRlZENvbnRleHQgPSBuZXcgQm91bmRlZENvbnRleHQoY29udGV4dCwgYXNzaWdubWVudHMsIGVxdWl2YWxlbmNlcywgZGVjbGFyZWRWYXJpYWJsZXMsIGNvbnN0cmFpbnRzLCBzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zKTtcblxuICAgIHJldHVybiBib3VuZGVkQ29udGV4dDtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tQ29uc3RyYWludHMoY29uc3RyYWludHMsIGNvbnRleHQpIHtcbiAgICBjb25zdCBhc3NpZ25tZW50cyA9IFtdLFxuICAgICAgICAgIGVxdWl2YWxlbmNlcyA9IFtdLFxuICAgICAgICAgIGRlY2xhcmVkVmFyaWFibGVzID0gW10sXG4gICAgICAgICAgc3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucyA9IFtdLFxuICAgICAgICAgIGJvdW5kZWRDb250ZXh0ID0gbmV3IEJvdW5kZWRDb250ZXh0KGNvbnRleHQsIGFzc2lnbm1lbnRzLCBlcXVpdmFsZW5jZXMsIGRlY2xhcmVkVmFyaWFibGVzLCBjb25zdHJhaW50cywgc3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucyk7XG5cbiAgICByZXR1cm4gYm91bmRlZENvbnRleHQ7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgQm91bmRlZENvbnRleHQ7Il0sIm5hbWVzIjpbImxhc3QiLCJjbGVhciIsImFycmF5VXRpbGl0aWVzIiwiQm91bmRlZENvbnRleHQiLCJDb250ZXh0IiwiY29udGV4dCIsImFzc2lnbm1lbnRzIiwiZXF1aXZhbGVuY2VzIiwiZGVjbGFyZWRWYXJpYWJsZXMiLCJjb25zdHJhaW50cyIsInN1YnByb29mT3JQcm9vZkFzc2VydGlvbnMiLCJnZXRBc3NpZ25tZW50cyIsImdldEVxdWl2YWxlbmNlcyIsImdldENvbnRleHQiLCJtZXJnZUVxdWl2YWxlbmNlcyIsImdldERlY2xhcmVkVmFyaWFibGVzIiwiZ2V0Q29uc3RyYWludHMiLCJnZXRTdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zIiwiZ2V0UHJvb2ZBc3NlcnRpb25zIiwicHJvb2ZBc3NlcnRpb25zIiwiZmlsdGVyIiwic3VicHJvb2ZPclByb29mQXNzZXJ0aW9uIiwic3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucHJvb2ZBc3NlcnRpb24iLCJpc1Byb29mQXNzZXJ0aW9uIiwiZ2V0U3RlcHMiLCJzdGVwcyIsInByb29mQXNzZXJ0aW9uIiwicHJvb2ZBc3NlcnRpb25TdGVwIiwiaXNTdGVwIiwiZ2V0TGFzdFN0ZXAiLCJsYXN0U3RlcCIsInN0ZXBzTGVuZ3RoIiwibGVuZ3RoIiwiaXNNZXRhTGV2ZWwiLCJtZXRhTGV2ZWwiLCJhZGRFcXVhbGl0eSIsImVxdWFsaXR5IiwiZXF1YWxpdHlTdHJpbmciLCJnZXRTdHJpbmciLCJ0cmFjZSIsImVxdWFsaXR5UmVsZmV4aXZlIiwiaXNSZWZsZXhpdmUiLCJlcXVpdmFsZW5jZXNGcm9tRXF1YWxpdHkiLCJkZWJ1ZyIsImFkZEFzc2lnbm1lbnQiLCJhc3NpZ25tZW50IiwicHVzaCIsImFzc2lnbkFzc2lnbm1lbnRzIiwiZm9yRWFjaCIsImFkZERlY2xhcmVkVmFyaWFibGUiLCJkZWNsYXJlZFZhcmlhYmxlIiwiZGVjbGFyZWRWYXJpYWJsZVN0cmluZyIsImFkZENvbnN0cmFpbnQiLCJjb25zdHJhaW50IiwiY29uc3RyYWludEEiLCJjb25zdHJhaW50U3RyaW5nIiwiY29uc3RyYWludEIiLCJmaW5kIiwiY29uc3RyYWludEFFcXVhbFRvQXNzdW1wdGlvbkIiLCJpc0VxdWFsVG8iLCJhZGRTdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb24iLCJzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25TdHJpbmciLCJjb21wYXJlVGVybUFuZFByb3BlcnR5UmVsYXRpb24iLCJ0ZXJtIiwicHJvcGVydHlSZWxhdGlvbiIsImNvbXBhcmVzVG9UZXJtQW5kUHJvcGVydHlSZWxhdGlvbiIsInNvbWUiLCJmaW5kRGVjbGFyZWRWYXJpYWJsZUJ5VmFyaWFibGVJZGVudGlmaWVyIiwidmFyaWFibGVJZGVudGlmaWVyIiwidmFyaWFibGVDb21wYXJlc1RvVmFyaWFibGVJZGVudGlmaWVyIiwiY29tcGFyZVZhcmlhYmxlSWRlbnRpZmllciIsImZpbmRDb25zdHJhaW50QnlDb25zdHJhaW50Tm9kZSIsImNvbnN0cmFpbnROb2RlIiwiY29uc3RyYWludE5vZGVNYXRjaGVzIiwibWF0Y2hDb25zdHJhaW50Tm9kZSIsImlzRGVjbGFyZWRWYXJpYWJsZVByZXNlbnRCeVZhcmlhYmxlSWRlbnRpZmllciIsImRlY2xhcmVkVmFyaWFibGVQcmVzZW50IiwiaXNUZXJtR3JvdW5kZWQiLCJncm91bmRlZFRlcm1zIiwiZGVmaW5lZFZhcmlhYmxlcyIsInNlcGFyYXRlR3JvdW5kZWRUZXJtc0FuZERlZmluZWRWYXJpYWJsZXMiLCJ0ZXJtTWF0Y2hlc0dyb3VuZGVkVGVybSIsImdyb3VuZGVkVGVybSIsImdyb3VuZGVkVGVybU5vZGUiLCJnZXROb2RlIiwiZ3JvdW5kZWRUZXJtTm9kZU1hdGNoZXMiLCJtYXRjaFRlcm1Ob2RlIiwidGVybUdyb3VuZGVkIiwiZnJvbU5vdGhpbmciLCJib3VuZGVkQ29udGV4dCIsImZyb21Db25zdHJhaW50cyJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7K0JBcVRBOzs7ZUFBQTs7OzJCQW5UK0I7Z0VBRVg7OEJBRWtGOzs7Ozs7QUFFdEcsTUFBTSxFQUFFQSxJQUFJLEVBQUVDLEtBQUssRUFBRSxHQUFHQyx5QkFBYztBQUV0QyxNQUFNQyx1QkFBdUJDLGdCQUFPO0lBQ2xDLFlBQVlDLE9BQU8sRUFBRUMsV0FBVyxFQUFFQyxZQUFZLEVBQUVDLGlCQUFpQixFQUFFQyxXQUFXLEVBQUVDLHlCQUF5QixDQUFFO1FBQ3pHLEtBQUssQ0FBQ0w7UUFFTixJQUFJLENBQUNDLFdBQVcsR0FBR0E7UUFDbkIsSUFBSSxDQUFDQyxZQUFZLEdBQUdBO1FBQ3BCLElBQUksQ0FBQ0MsaUJBQWlCLEdBQUdBO1FBQ3pCLElBQUksQ0FBQ0MsV0FBVyxHQUFHQTtRQUNuQixJQUFJLENBQUNDLHlCQUF5QixHQUFHQTtJQUNuQztJQUVBQyxpQkFBaUI7UUFDZixPQUFPLElBQUksQ0FBQ0wsV0FBVztJQUN6QjtJQUVBTSxrQkFBa0I7UUFDaEIsSUFBSUw7UUFFSixJQUFJRjtRQUVKQSxVQUFVLElBQUksQ0FBQ1EsVUFBVTtRQUV6Qk4sZUFBZUYsUUFBUU8sZUFBZTtRQUV0Q1AsVUFBVSxJQUFJLEVBQUUsR0FBRztRQUVuQkUsZUFBZU8sSUFBQUEsK0JBQWlCLEVBQUMsSUFBSSxDQUFDUCxZQUFZLEVBQUVBLGNBQWNGLFVBQVcsR0FBRztRQUVoRixPQUFPRTtJQUNUO0lBRUFRLHVCQUF1QjtRQUNyQixJQUFJUDtRQUVKLE1BQU1ILFVBQVUsSUFBSSxDQUFDUSxVQUFVO1FBRS9CTCxvQkFBb0JILFFBQVFVLG9CQUFvQjtRQUVoRFAsb0JBQW9CO2VBQ2YsSUFBSSxDQUFDQSxpQkFBaUI7ZUFDdEJBO1NBQ0o7UUFFRCxPQUFPQTtJQUNUO0lBRUFRLGlCQUFpQjtRQUNmLE9BQU8sSUFB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
203
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb250ZXh0L2JvdW5kZWQuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IGFycmF5VXRpbGl0aWVzIH0gZnJvbSBcIm5lY2Vzc2FyeVwiO1xuXG5pbXBvcnQgQ29udGV4dCBmcm9tIFwiLi4vY29udGV4dFwiO1xuXG5pbXBvcnQgeyBtZXJnZUVxdWl2YWxlbmNlcywgZXF1aXZhbGVuY2VzRnJvbUVxdWFsaXR5LCBzZXBhcmF0ZUdyb3VuZGVkVGVybXNBbmREZWZpbmVkVmFyaWFibGVzIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9lcXVpdmFsZW5jZXNcIjtcblxuY29uc3QgeyBsYXN0LCBjbGVhciB9ID0gYXJyYXlVdGlsaXRpZXM7XG5cbmNsYXNzIEJvdW5kZWRDb250ZXh0IGV4dGVuZHMgQ29udGV4dCB7XG4gIGNvbnN0cnVjdG9yKGNvbnRleHQsIGFzc2lnbm1lbnRzLCBlcXVpdmFsZW5jZXMsIGRlY2xhcmVkVmFyaWFibGVzLCBjb25zdHJhaW50cywgc3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucykge1xuICAgIHN1cGVyKGNvbnRleHQpO1xuXG4gICAgdGhpcy5hc3NpZ25tZW50cyA9IGFzc2lnbm1lbnRzO1xuICAgIHRoaXMuZXF1aXZhbGVuY2VzID0gZXF1aXZhbGVuY2VzO1xuICAgIHRoaXMuZGVjbGFyZWRWYXJpYWJsZXMgPSBkZWNsYXJlZFZhcmlhYmxlcztcbiAgICB0aGlzLmNvbnN0cmFpbnRzID0gY29uc3RyYWludHM7XG4gICAgdGhpcy5zdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zID0gc3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucztcbiAgfVxuXG4gIGdldEFzc2lnbm1lbnRzKCkge1xuICAgIHJldHVybiB0aGlzLmFzc2lnbm1lbnRzO1xuICB9XG5cbiAgZ2V0RXF1aXZhbGVuY2VzKCkge1xuICAgIGxldCBlcXVpdmFsZW5jZXM7XG5cbiAgICBsZXQgY29udGV4dDtcblxuICAgIGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKTtcblxuICAgIGVxdWl2YWxlbmNlcyA9IGNvbnRleHQuZ2V0RXF1aXZhbGVuY2VzKCk7XG5cbiAgICBjb250ZXh0ID0gdGhpczsgLy8vXG5cbiAgICBlcXVpdmFsZW5jZXMgPSBtZXJnZUVxdWl2YWxlbmNlcyh0aGlzLmVxdWl2YWxlbmNlcywgZXF1aXZhbGVuY2VzLCBjb250ZXh0KTsgIC8vL1xuXG4gICAgcmV0dXJuIGVxdWl2YWxlbmNlcztcbiAgfVxuXG4gIGdldERlY2xhcmVkVmFyaWFibGVzKCkge1xuICAgIGxldCBkZWNsYXJlZFZhcmlhYmxlcztcblxuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKTtcblxuICAgIGRlY2xhcmVkVmFyaWFibGVzID0gY29udGV4dC5nZXREZWNsYXJlZFZhcmlhYmxlcygpO1xuXG4gICAgZGVjbGFyZWRWYXJpYWJsZXMgPSBbXG4gICAgICAuLi50aGlzLmRlY2xhcmVkVmFyaWFibGVzLFxuICAgICAgLi4uZGVjbGFyZWRWYXJpYWJsZXNcbiAgICBdO1xuXG4gICAgcmV0dXJuIGRlY2xhcmVkVmFyaWFibGVzO1xuICB9XG5cbiAgZ2V0Q29uc3RyYWludHMoKSB7XG4gICAgcmV0dXJuIHRoaXMuY29uc3RyYWludHM7XG4gIH1cblxuICBnZXRTdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zKCkge1xuICAgIGxldCBzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zO1xuXG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpO1xuXG4gICAgc3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucyA9IGNvbnRleHQuZ2V0U3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucygpO1xuXG4gICAgc3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucyA9IFsgIC8vL1xuICAgICAgLi4uc3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucyxcbiAgICAgIC4uLnRoaXMuc3VicHJvb2ZPclByb29mQXNzZXJ0aW9uc1xuICAgIF07XG5cbiAgICByZXR1cm4gc3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucztcbiAgfVxuXG4gIGdldFByb29mQXNzZXJ0aW9ucygpIHtcbiAgICBjb25zdCBzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zID0gdGhpcy5nZXRTdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zKCksXG4gICAgICAgICAgcHJvb2ZBc3NlcnRpb25zID0gc3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucy5maWx0ZXIoKHN1YnByb29mT3JQcm9vZkFzc2VydGlvbikgPT4ge1xuICAgICAgICAgICAgY29uc3Qgc3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucHJvb2ZBc3NlcnRpb24gPSBzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb24uaXNQcm9vZkFzc2VydGlvbigpO1xuXG4gICAgICAgICAgICBpZiAoc3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucHJvb2ZBc3NlcnRpb24pIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG5cbiAgICByZXR1cm4gcHJvb2ZBc3NlcnRpb25zO1xuICB9XG5cbiAgZ2V0U3RlcHMoKSB7XG4gICAgY29uc3QgcHJvb2ZBc3NlcnRpb25zID0gdGhpcy5nZXRQcm9vZkFzc2VydGlvbnMoKSxcbiAgICAgICAgICBzdGVwcyA9IHByb29mQXNzZXJ0aW9ucy5maWx0ZXIoKHByb29mQXNzZXJ0aW9uKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBwcm9vZkFzc2VydGlvblN0ZXAgPSBwcm9vZkFzc2VydGlvbi5pc1N0ZXAoKTtcblxuICAgICAgICAgICAgaWYgKHByb29mQXNzZXJ0aW9uU3RlcCkge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcblxuICAgIHJldHVybiBzdGVwcztcbiAgfVxuXG4gIGdldExhc3RTdGVwKCkge1xuICAgIGxldCBsYXN0U3RlcCA9IG51bGw7XG5cbiAgICBjb25zdCBzdGVwcyA9IHRoaXMuZ2V0U3RlcHMoKSxcbiAgICAgICAgICBzdGVwc0xlbmd0aCA9IHN0ZXBzLmxlbmd0aDtcblxuICAgIGlmIChzdGVwc0xlbmd0aCA+IDApIHtcbiAgICAgIGxhc3RTdGVwID0gbGFzdChzdGVwcyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGxhc3RTdGVwO1xuICB9XG5cbiAgaXNNZXRhTGV2ZWwoKSB7XG4gICAgbGV0IG1ldGFMZXZlbDtcblxuICAgIGlmICh0aGlzLmNvbnN0cmFpbnRzICE9PSBudWxsKSB7XG4gICAgICBtZXRhTGV2ZWwgPSB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCk7XG5cbiAgICAgIG1ldGFMZXZlbCA9IGNvbnRleHQuaXNNZXRhTGV2ZWwoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbWV0YUxldmVsO1xuICB9XG5cbiAgYWRkRXF1YWxpdHkoZXF1YWxpdHkpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcywgLy8vXG4gICAgICAgICAgZXF1YWxpdHlTdHJpbmcgPSBlcXVhbGl0eS5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYEFkZGluZyB0aGUgJyR7ZXF1YWxpdHlTdHJpbmd9JyBlcXVhbGl0eSB0byB0aGUgYm91bmRlZCBjb250ZXh0Li4uYCk7XG5cbiAgICBjb25zdCBlcXVhbGl0eVJlbGZleGl2ZSA9IGVxdWFsaXR5LmlzUmVmbGV4aXZlKCk7XG5cbiAgICBpZiAoIWVxdWFsaXR5UmVsZmV4aXZlKSB7XG4gICAgICBjb25zdCBlcXVpdmFsZW5jZXMgPSBlcXVpdmFsZW5jZXNGcm9tRXF1YWxpdHkoZXF1YWxpdHksIGNvbnRleHQpO1xuXG4gICAgICB0aGlzLmVxdWl2YWxlbmNlcyA9IG1lcmdlRXF1aXZhbGVuY2VzKHRoaXMuZXF1aXZhbGVuY2VzLCBlcXVpdmFsZW5jZXMsIGNvbnRleHQpO1xuXG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi5hZGRlZCB0aGUgJyR7ZXF1YWxpdHlTdHJpbmd9JyBlcXVhbGl0eSB0byB0aGUgYm91bmRlZCBjb250ZXh0LmApO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGBUaGUgcmVmbGV4aXZlICcke2VxdWFsaXR5U3RyaW5nfScgZXF1YWxpdHkgaGFzIG5vdCBiZWVuIGFkZGVkIHRvIHRoZSBib3VuZGVkIGNvbnRleHQuYCk7XG4gICAgfVxuICB9XG5cbiAgYWRkQXNzaWdubWVudChhc3NpZ25tZW50KSB7XG4gICAgdGhpcy5hc3NpZ25tZW50cy5wdXNoKGFzc2lnbm1lbnQpO1xuICB9XG5cbiAgYXNzaWduQXNzaWdubWVudHMoKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXM7IC8vL1xuXG4gICAgdGhpcy5hc3NpZ25tZW50cy5mb3JFYWNoKChhc3NpZ25tZW50KSA9PiB7XG4gICAgICBhc3NpZ25tZW50KGNvbnRleHQpO1xuICAgIH0pO1xuXG4gICAgY2xlYXIodGhpcy5hc3NpZ25tZW50cyk7XG4gIH1cblxuICBhZGREZWNsYXJlZFZhcmlhYmxlKGRlY2xhcmVkVmFyaWFibGUpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcywgLy8vXG4gICAgICAgICAgZGVjbGFyZWRWYXJpYWJsZVN0cmluZyA9IGRlY2xhcmVkVmFyaWFibGUuZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBBZGRpbmcgdGhlICcke2RlY2xhcmVkVmFyaWFibGVTdHJpbmd9JyBkZWNsYXJlZCB2YXJpYWJsZSB0byB0aGUgYm91bmRlZCBjb250ZXh0Li4uYCk7XG5cbiAgICB0aGlzLmRlY2xhcmVkVmFyaWFibGVzLnB1c2goZGVjbGFyZWRWYXJpYWJsZSk7XG5cbiAgICBjb250ZXh0LmRlYnVnKGAuLi5hZGRlZCB0aGUgJyR7ZGVjbGFyZWRWYXJpYWJsZVN0cmluZ30nIGRlY2xhcmVkIHZhcmlhYmxlIHRvIHRoZSBib3VuZGVkIGNvbnRleHQuYCk7XG4gIH1cblxuICBhZGRDb25zdHJhaW50KGNvbnN0cmFpbnQpIHtcbiAgICBpZiAodGhpcy5jb25zdHJhaW50cyA9PT0gbnVsbCkge1xuICAgICAgc3VwZXIuYWRkQ29uc3RyYWludChjb25zdHJhaW50KTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLCAvLy9cbiAgICAgICAgICBjb25zdHJhaW50QSA9IGNvbnN0cmFpbnQsIC8vL1xuICAgICAgICAgIGNvbnN0cmFpbnRTdHJpbmcgPSBjb25zdHJhaW50LmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgQWRkaW5nIHRoZSAnJHtjb25zdHJhaW50U3RyaW5nfScgY29uc3RyYWludCB0byB0aGUgYm91bmRlZCBjb250ZXh0Li4uYCk7XG5cbiAgICBjb25zdCBjb25zdHJhaW50QiA9IHRoaXMuY29uc3RyYWludHMuZmluZCgoY29uc3RyYWludCkgPT4ge1xuICAgICAgY29uc3QgY29uc3RyYWludEIgPSBjb25zdHJhaW50LCAvLy9cbiAgICAgICAgICAgIGNvbnN0cmFpbnRBRXF1YWxUb0Fzc3VtcHRpb25CID0gY29uc3RyYWludEEuaXNFcXVhbFRvKGNvbnN0cmFpbnRCKTtcblxuICAgICAgaWYgKGNvbnN0cmFpbnRBRXF1YWxUb0Fzc3VtcHRpb25CKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH0pIHx8IG51bGw7XG5cbiAgICBpZiAoY29uc3RyYWludEIgIT09IG51bGwpIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYFRoZSAnJHtjb25zdHJhaW50U3RyaW5nfScgY29uc3RyYWludCBoYXMgYWxyZWFkeSBiZWVuIGFkZGVkIHRvIHRoZSBib3VuZGVkIGNvbnRleHQuYCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY29uc3RyYWludHMucHVzaChjb25zdHJhaW50KTtcbiAgICB9XG5cbiAgICBjb250ZXh0LmRlYnVnKGAuLi5hZGRlZCB0aGUgJyR7Y29uc3RyYWludFN0cmluZ30nIGNvbnN0cmFpbnQgdG8gdGhlIGJvdW5kZWQgY29udGV4dC5gKTtcbiAgfVxuXG4gIGFkZFN1YnByb29mT3JQcm9vZkFzc2VydGlvbihzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb24pIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcywgLy8vXG4gICAgICAgICAgc3VicHJvb2ZPclByb29mQXNzZXJ0aW9uU3RyaW5nID0gc3VicHJvb2ZPclByb29mQXNzZXJ0aW9uLmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgQWRkaW5nIHRoZSAnJHtzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25TdHJpbmd9JyBzdWJwcm9vZiBvciBwcm9vZiBhc3NlcnRpb24gdG8gdGhlIGJvdW5kZWQgY29udGV4dC4uLmApO1xuXG4gICAgdGhpcy5zdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zLnB1c2goc3VicHJvb2ZPclByb29mQXNzZXJ0aW9uKTtcblxuICAgIGNvbnRleHQuZGVidWcoYC4uLmFkZGVkIHRoZSAnJHtzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25TdHJpbmd9JyBzdWJwcm9vZiBvciBwcm9vZiBhc3NlcnRpb24gdG8gdGhlIGJvdW5kZWQgY29udGV4dC5gKTtcbiAgfVxuXG4gIGZpbmREZWNsYXJlZFZhcmlhYmxlQnlWYXJpYWJsZUlkZW50aWZpZXIodmFyaWFibGVJZGVudGlmaWVyKSB7XG4gICAgY29uc3QgZGVjbGFyZWRWYXJpYWJsZXMgPSB0aGlzLmdldERlY2xhcmVkVmFyaWFibGVzKCksXG4gICAgICAgICAgZGVjbGFyZWRWYXJpYWJsZSA9IGRlY2xhcmVkVmFyaWFibGVzLmZpbmQoKGRlY2xhcmVkVmFyaWFibGUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHZhcmlhYmxlQ29tcGFyZXNUb1ZhcmlhYmxlSWRlbnRpZmllciA9IGRlY2xhcmVkVmFyaWFibGUuY29tcGFyZVZhcmlhYmxlSWRlbnRpZmllcih2YXJpYWJsZUlkZW50aWZpZXIpO1xuXG4gICAgICAgICAgICBpZiAodmFyaWFibGVDb21wYXJlc1RvVmFyaWFibGVJZGVudGlmaWVyKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pIHx8IG51bGw7XG5cbiAgICByZXR1cm4gZGVjbGFyZWRWYXJpYWJsZTtcbiAgfVxuXG4gIGZpbmRDb25zdHJhaW50QnlDb25zdHJhaW50Tm9kZShjb25zdHJhaW50Tm9kZSkge1xuICAgIGxldCBjb25zdHJhaW50O1xuXG4gICAgaWYgKHRoaXMuY29uc3RyYWludHMgPT09IG51bGwpIHtcbiAgICAgIGNvbnN0cmFpbnQgPSBzdXBlci5maW5kQ29uc3RyYWludEJ5Q29uc3RyYWludE5vZGUoY29uc3RyYWludE5vZGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdHJhaW50ID0gdGhpcy5jb25zdHJhaW50cy5maW5kKChjb25zdHJhaW50KSA9PiB7XG4gICAgICAgIGNvbnN0IGNvbnN0cmFpbnROb2RlTWF0Y2hlcyA9IGNvbnN0cmFpbnQubWF0Y2hDb25zdHJhaW50Tm9kZShjb25zdHJhaW50Tm9kZSk7XG5cbiAgICAgICAgaWYgKGNvbnN0cmFpbnROb2RlTWF0Y2hlcykge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9KSB8fCBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiBjb25zdHJhaW50O1xuICB9XG5cbiAgaXNEZWNsYXJlZFZhcmlhYmxlUHJlc2VudEJ5VmFyaWFibGVJZGVudGlmaWVyKHZhcmlhYmxlSWRlbnRpZmllcikge1xuICAgIGNvbnN0IGRlY2xhcmVkVmFyaWFibGUgPSB0aGlzLmZpbmREZWNsYXJlZFZhcmlhYmxlQnlWYXJpYWJsZUlkZW50aWZpZXIodmFyaWFibGVJZGVudGlmaWVyKSxcbiAgICAgICAgICBkZWNsYXJlZFZhcmlhYmxlUHJlc2VudCA9IChkZWNsYXJlZFZhcmlhYmxlICE9PSBudWxsKTtcblxuICAgIHJldHVybiBkZWNsYXJlZFZhcmlhYmxlUHJlc2VudDtcbiAgfVxuXG4gIGlzVGVybUdyb3VuZGVkKHRlcm0pIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcywgLy8vXG4gICAgICAgICAgZXF1aXZhbGVuY2VzID0gdGhpcy5nZXRFcXVpdmFsZW5jZXMoKSxcbiAgICAgICAgICBncm91bmRlZFRlcm1zID0gW10sXG4gICAgICAgICAgZGVmaW5lZFZhcmlhYmxlcyA9IFtdO1xuXG4gICAgc2VwYXJhdGVHcm91bmRlZFRlcm1zQW5kRGVmaW5lZFZhcmlhYmxlcyhlcXVpdmFsZW5jZXMsIGdyb3VuZGVkVGVybXMsIGRlZmluZWRWYXJpYWJsZXMsIGNvbnRleHQpO1xuXG4gICAgY29uc3QgdGVybU1hdGNoZXNHcm91bmRlZFRlcm0gPSBncm91bmRlZFRlcm1zLnNvbWUoKGdyb3VuZGVkVGVybSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZ3JvdW5kZWRUZXJtTm9kZSA9IGdyb3VuZGVkVGVybS5nZXROb2RlKCksXG4gICAgICAgICAgICAgICAgICBncm91bmRlZFRlcm1Ob2RlTWF0Y2hlcyA9IHRlcm0ubWF0Y2hUZXJtTm9kZShncm91bmRlZFRlcm1Ob2RlKTtcblxuICAgICAgICAgICAgaWYgKGdyb3VuZGVkVGVybU5vZGVNYXRjaGVzKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pLFxuICAgICAgICAgIHRlcm1Hcm91bmRlZCA9IHRlcm1NYXRjaGVzR3JvdW5kZWRUZXJtOyAvLy9cblxuICAgIHJldHVybiB0ZXJtR3JvdW5kZWQ7XG4gIH1cblxuICBzdGF0aWMgZnJvbU5vdGhpbmcoY29udGV4dCkge1xuICAgIGNvbnN0IGFzc2lnbm1lbnRzID0gW10sXG4gICAgICAgICAgZXF1aXZhbGVuY2VzID0gW10sXG4gICAgICAgICAgZGVjbGFyZWRWYXJpYWJsZXMgPSBbXSxcbiAgICAgICAgICBjb25zdHJhaW50cyA9IG51bGwsXG4gICAgICAgICAgc3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucyA9IFtdLFxuICAgICAgICAgIGJvdW5kZWRDb250ZXh0ID0gbmV3IEJvdW5kZWRDb250ZXh0KGNvbnRleHQsIGFzc2lnbm1lbnRzLCBlcXVpdmFsZW5jZXMsIGRlY2xhcmVkVmFyaWFibGVzLCBjb25zdHJhaW50cywgc3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucyk7XG5cbiAgICByZXR1cm4gYm91bmRlZENvbnRleHQ7XG4gIH1cblxuICBzdGF0aWMgZnJvbUNvbnN0cmFpbnRzKGNvbnN0cmFpbnRzLCBjb250ZXh0KSB7XG4gICAgY29uc3QgYXNzaWdubWVudHMgPSBbXSxcbiAgICAgICAgICBlcXVpdmFsZW5jZXMgPSBbXSxcbiAgICAgICAgICBkZWNsYXJlZFZhcmlhYmxlcyA9IFtdLFxuICAgICAgICAgIHN1YnByb29mT3JQcm9vZkFzc2VydGlvbnMgPSBbXSxcbiAgICAgICAgICBib3VuZGVkQ29udGV4dCA9IG5ldyBCb3VuZGVkQ29udGV4dChjb250ZXh0LCBhc3NpZ25tZW50cywgZXF1aXZhbGVuY2VzLCBkZWNsYXJlZFZhcmlhYmxlcywgY29uc3RyYWludHMsIHN1YnByb29mT3JQcm9vZkFzc2VydGlvbnMpO1xuXG4gICAgcmV0dXJuIGJvdW5kZWRDb250ZXh0O1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEJvdW5kZWRDb250ZXh0OyJdLCJuYW1lcyI6WyJsYXN0IiwiY2xlYXIiLCJhcnJheVV0aWxpdGllcyIsIkJvdW5kZWRDb250ZXh0IiwiQ29udGV4dCIsImNvbnRleHQiLCJhc3NpZ25tZW50cyIsImVxdWl2YWxlbmNlcyIsImRlY2xhcmVkVmFyaWFibGVzIiwiY29uc3RyYWludHMiLCJzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zIiwiZ2V0QXNzaWdubWVudHMiLCJnZXRFcXVpdmFsZW5jZXMiLCJnZXRDb250ZXh0IiwibWVyZ2VFcXVpdmFsZW5jZXMiLCJnZXREZWNsYXJlZFZhcmlhYmxlcyIsImdldENvbnN0cmFpbnRzIiwiZ2V0U3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucyIsImdldFByb29mQXNzZXJ0aW9ucyIsInByb29mQXNzZXJ0aW9ucyIsImZpbHRlciIsInN1YnByb29mT3JQcm9vZkFzc2VydGlvbiIsInN1YnByb29mT3JQcm9vZkFzc2VydGlvbnByb29mQXNzZXJ0aW9uIiwiaXNQcm9vZkFzc2VydGlvbiIsImdldFN0ZXBzIiwic3RlcHMiLCJwcm9vZkFzc2VydGlvbiIsInByb29mQXNzZXJ0aW9uU3RlcCIsImlzU3RlcCIsImdldExhc3RTdGVwIiwibGFzdFN0ZXAiLCJzdGVwc0xlbmd0aCIsImxlbmd0aCIsImlzTWV0YUxldmVsIiwibWV0YUxldmVsIiwiYWRkRXF1YWxpdHkiLCJlcXVhbGl0eSIsImVxdWFsaXR5U3RyaW5nIiwiZ2V0U3RyaW5nIiwidHJhY2UiLCJlcXVhbGl0eVJlbGZleGl2ZSIsImlzUmVmbGV4aXZlIiwiZXF1aXZhbGVuY2VzRnJvbUVxdWFsaXR5IiwiZGVidWciLCJhZGRBc3NpZ25tZW50IiwiYXNzaWdubWVudCIsInB1c2giLCJhc3NpZ25Bc3NpZ25tZW50cyIsImZvckVhY2giLCJhZGREZWNsYXJlZFZhcmlhYmxlIiwiZGVjbGFyZWRWYXJpYWJsZSIsImRlY2xhcmVkVmFyaWFibGVTdHJpbmciLCJhZGRDb25zdHJhaW50IiwiY29uc3RyYWludCIsImNvbnN0cmFpbnRBIiwiY29uc3RyYWludFN0cmluZyIsImNvbnN0cmFpbnRCIiwiZmluZCIsImNvbnN0cmFpbnRBRXF1YWxUb0Fzc3VtcHRpb25CIiwiaXNFcXVhbFRvIiwiYWRkU3VicHJvb2ZPclByb29mQXNzZXJ0aW9uIiwic3VicHJvb2ZPclByb29mQXNzZXJ0aW9uU3RyaW5nIiwiZmluZERlY2xhcmVkVmFyaWFibGVCeVZhcmlhYmxlSWRlbnRpZmllciIsInZhcmlhYmxlSWRlbnRpZmllciIsInZhcmlhYmxlQ29tcGFyZXNUb1ZhcmlhYmxlSWRlbnRpZmllciIsImNvbXBhcmVWYXJpYWJsZUlkZW50aWZpZXIiLCJmaW5kQ29uc3RyYWludEJ5Q29uc3RyYWludE5vZGUiLCJjb25zdHJhaW50Tm9kZSIsImNvbnN0cmFpbnROb2RlTWF0Y2hlcyIsIm1hdGNoQ29uc3RyYWludE5vZGUiLCJpc0RlY2xhcmVkVmFyaWFibGVQcmVzZW50QnlWYXJpYWJsZUlkZW50aWZpZXIiLCJkZWNsYXJlZFZhcmlhYmxlUHJlc2VudCIsImlzVGVybUdyb3VuZGVkIiwidGVybSIsImdyb3VuZGVkVGVybXMiLCJkZWZpbmVkVmFyaWFibGVzIiwic2VwYXJhdGVHcm91bmRlZFRlcm1zQW5kRGVmaW5lZFZhcmlhYmxlcyIsInRlcm1NYXRjaGVzR3JvdW5kZWRUZXJtIiwic29tZSIsImdyb3VuZGVkVGVybSIsImdyb3VuZGVkVGVybU5vZGUiLCJnZXROb2RlIiwiZ3JvdW5kZWRUZXJtTm9kZU1hdGNoZXMiLCJtYXRjaFRlcm1Ob2RlIiwidGVybUdyb3VuZGVkIiwiZnJvbU5vdGhpbmciLCJib3VuZGVkQ29udGV4dCIsImZyb21Db25zdHJhaW50cyJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7K0JBdVNBOzs7ZUFBQTs7OzJCQXJTK0I7Z0VBRVg7OEJBRWtGOzs7Ozs7QUFFdEcsTUFBTSxFQUFFQSxJQUFJLEVBQUVDLEtBQUssRUFBRSxHQUFHQyx5QkFBYztBQUV0QyxNQUFNQyx1QkFBdUJDLGdCQUFPO0lBQ2xDLFlBQVlDLE9BQU8sRUFBRUMsV0FBVyxFQUFFQyxZQUFZLEVBQUVDLGlCQUFpQixFQUFFQyxXQUFXLEVBQUVDLHlCQUF5QixDQUFFO1FBQ3pHLEtBQUssQ0FBQ0w7UUFFTixJQUFJLENBQUNDLFdBQVcsR0FBR0E7UUFDbkIsSUFBSSxDQUFDQyxZQUFZLEdBQUdBO1FBQ3BCLElBQUksQ0FBQ0MsaUJBQWlCLEdBQUdBO1FBQ3pCLElBQUksQ0FBQ0MsV0FBVyxHQUFHQTtRQUNuQixJQUFJLENBQUNDLHlCQUF5QixHQUFHQTtJQUNuQztJQUVBQyxpQkFBaUI7UUFDZixPQUFPLElBQUksQ0FBQ0wsV0FBVztJQUN6QjtJQUVBTSxrQkFBa0I7UUFDaEIsSUFBSUw7UUFFSixJQUFJRjtRQUVKQSxVQUFVLElBQUksQ0FBQ1EsVUFBVTtRQUV6Qk4sZUFBZUYsUUFBUU8sZUFBZTtRQUV0Q1AsVUFBVSxJQUFJLEVB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
@@ -164,9 +164,6 @@ class NominalFileContext extends _occamlanguages.FileContext {
164
164
  getFrames(frames = []) {
165
165
  return frames;
166
166
  }
167
- getProperties(properties = []) {
168
- return properties;
169
- }
170
167
  getEqualities(equalities = []) {
171
168
  return equalities;
172
169
  }
@@ -194,12 +191,16 @@ class NominalFileContext extends _occamlanguages.FileContext {
194
191
  getSubstitutions(substitutions = []) {
195
192
  return substitutions;
196
193
  }
197
- getPropertyRelations(propertyRelations = []) {
198
- return propertyRelations;
199
- }
200
194
  getDerivedSubstitutions(derivedSubstitutions = []) {
201
195
  return derivedSubstitutions;
202
196
  }
197
+ getProperties() {
198
+ const properties = [], types = this.getTypes();
199
+ types.forEach((type)=>{
200
+ type.getProperties(properties);
201
+ });
202
+ return properties;
203
+ }
203
204
  addType(type) {
204
205
  this.types.push(type);
205
206
  const filePath = this.getFilePath(), typeString = type.getString();
@@ -329,8 +330,8 @@ class NominalFileContext extends _occamlanguages.FileContext {
329
330
  }) || null;
330
331
  return topLevelAssertion;
331
332
  }
332
- findTypeByTypeName(typeName) {
333
- const types = this.getTypes(), type = (0, _type.findType)(types, (type)=>{
333
+ findTypeByTypeName(typeName, includeRelease = true) {
334
+ const types = this.getTypes(includeRelease), type = (0, _type.findType)(types, (type)=>{
334
335
  const typeComparesToTypeName = type.compareTypeName(typeName);
335
336
  if (typeComparesToTypeName) {
336
337
  return true;
@@ -338,8 +339,8 @@ class NominalFileContext extends _occamlanguages.FileContext {
338
339
  });
339
340
  return type;
340
341
  }
341
- findTypeByNominalTypeName(nominalTypeName) {
342
- const types = this.getTypes(), type = (0, _type.findType)(types, (type)=>{
342
+ findTypeByNominalTypeName(nominalTypeName, includeRelease = true) {
343
+ const types = this.getTypes(includeRelease), type = (0, _type.findType)(types, (type)=>{
343
344
  const typeComparesToNominalTypeName = type.compareNominalTypeName(nominalTypeName);
344
345
  if (typeComparesToNominalTypeName) {
345
346
  return true;
@@ -347,8 +348,8 @@ class NominalFileContext extends _occamlanguages.FileContext {
347
348
  });
348
349
  return type;
349
350
  }
350
- findTypeByPrefixedTypeName(prefixedTypeName) {
351
- const types = this.getTypes(), type = (0, _type.findType)(types, (type)=>{
351
+ findTypeByPrefixedTypeName(prefixedTypeName, includeRelease = true) {
352
+ const types = this.getTypes(includeRelease), type = (0, _type.findType)(types, (type)=>{
352
353
  const typeComparesToPrefixedTypeName = type.comparePrefixedTypeName(prefixedTypeName);
353
354
  if (typeComparesToPrefixedTypeName) {
354
355
  return true;
@@ -416,16 +417,16 @@ class NominalFileContext extends _occamlanguages.FileContext {
416
417
  });
417
418
  return labelPresent;
418
419
  }
419
- isTypePresentByTypeName(typeName) {
420
- const type = this.findTypeByTypeName(typeName), typePresent = type !== null;
420
+ isTypePresentByTypeName(typeName, includeRelease = true) {
421
+ const type = this.findTypeByTypeName(typeName, includeRelease), typePresent = type !== null;
421
422
  return typePresent;
422
423
  }
423
- isTypePresentByNominalTypeName(nominalTypeName) {
424
- const type = this.findTypeByNominalTypeName(nominalTypeName), typePresent = type !== null;
424
+ isTypePresentByNominalTypeName(nominalTypeName, includeRelease = true) {
425
+ const type = this.findTypeByNominalTypeName(nominalTypeName, includeRelease), typePresent = type !== null;
425
426
  return typePresent;
426
427
  }
427
- isTypePresentByPrefixedTypeName(prefixedTypeName) {
428
- const type = this.findTypeByPrefixedTypeName(prefixedTypeName), typePresent = type !== null;
428
+ isTypePresentByPrefixedTypeName(prefixedTypeName, includeRelease = true) {
429
+ const type = this.findTypeByPrefixedTypeName(prefixedTypeName, includeRelease), typePresent = type !== null;
429
430
  return typePresent;
430
431
  }
431
432
  isTypePrefixPresentByTypePrefixName(typePrefixName) {
@@ -521,4 +522,4 @@ class NominalFileContext extends _occamlanguages.FileContext {
521
522
  }
522
523
  }
523
524
 
524
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb250ZXh0L2ZpbGUvbm9taW5hbC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgRmlsZUNvbnRleHQsIG5vbWluYWxVdGlsaXRpZXMgfSBmcm9tIFwib2NjYW0tbGFuZ3VhZ2VzXCI7XG5pbXBvcnQgeyBhcnJheVV0aWxpdGllcyB9IGZyb20gXCJuZWNlc3NhcnlcIjtcblxuaW1wb3J0IE5vbWluYWxMZXhlciBmcm9tIFwiLi4vLi4vbm9taW5hbC9sZXhlclwiO1xuaW1wb3J0IE5vbWluYWxQYXJzZXIgZnJvbSBcIi4uLy4uL25vbWluYWwvcGFyc2VyXCI7XG5cbmltcG9ydCB7IHZlcmlmeUZpbGUgfSBmcm9tIFwiLi4vLi4vcHJvY2Vzcy92ZXJpZnlcIjtcbmltcG9ydCB7YmFzZVR5cGVGcm9tTm90aGluZywgZmluZFR5cGV9IGZyb20gXCIuLi8uLi91dGlsaXRpZXMvdHlwZVwiO1xuaW1wb3J0IHsgZmluZE1ldGFUeXBlQnlNZXRhVHlwZU5hbWUgfSBmcm9tIFwiLi4vLi4vbWV0YVR5cGVzXCI7XG5pbXBvcnQgeyB0eXBlc0Zyb21KU09OLFxuICAgICAgICAgcnVsZXNGcm9tSlNPTixcbiAgICAgICAgIGF4aW9tc0Zyb21KU09OLFxuICAgICAgICAgc2NoZW1hc0Zyb21KU09OLFxuICAgICAgICAgdHlwZXNUb1R5cGVzSlNPTixcbiAgICAgICAgIHRoZW9yZW1zRnJvbUpTT04sXG4gICAgICAgICBydWxlc1RvUnVsZXNKU09OLFxuICAgICAgICAgYXhpb21zVG9BeGlvbXNKU09OLFxuICAgICAgICAgZ2VuZXJhdG9yc0Zyb21KU09OLFxuICAgICAgICAgY29uamVjdHVyZXNGcm9tSlNPTixcbiAgICAgICAgIGNvbWJpbmF0b3JzRnJvbUpTT04sXG4gICAgICAgICB0eXBlUHJlZml4ZXNGcm9tSlNPTixcbiAgICAgICAgIGNvbnN0cnVjdG9yc0Zyb21KU09OLFxuICAgICAgICAgc2NoZW1hc1RvU2NoZW1hc0pTT04sXG4gICAgICAgICB0aGVvcmVtc1RvVGhlb3JlbXNKU09OLFxuICAgICAgICAgZGVjbGFyZWRWYXJpYWJsZXNGcm9tSlNPTixcbiAgICAgICAgIGdlbmVyYXRvcnNUb0dlbmVyYXRvcnNKU09OLFxuICAgICAgICAgY29uamVjdHVyZXNUb0NvbmplY3R1cmVzSlNPTixcbiAgICAgICAgIGNvbWJpbmF0b3JzVG9Db21iaW5hdG9yc0pTT04sXG4gICAgICAgICBkZWNsYXJlZE1ldGF2YXJpYWJsZXNGcm9tSlNPTixcbiAgICAgICAgIHR5cGVQcmVmaXhlc1RvVHlwZVByZWZpeGVzSlNPTixcbiAgICAgICAgIGNvbnN0cnVjdG9yc1RvQ29uc3RydWN0b3JzSlNPTixcbiAgICAgICAgIGRlY2xhcmVkVmFyaWFibGVzVG9EZWNsYXJlZFZhcmlhYmxlc0pTT04sXG4gICAgICAgICBkZWNsYXJlZE1ldGF2YXJpYWJsZXNUb0RlY2xhcmVkTWV0YXZhcmlhYmxlc0pTT04gfSBmcm9tIFwiLi4vLi4vdXRpbGl0aWVzL2pzb25cIjtcblxuY29uc3QgeyBwdXNoIH0gPSBhcnJheVV0aWxpdGllcyxcbiAgICAgIHsgbm9taW5hbExleGVyRnJvbUNvbWJpbmVkQ3VzdG9tR3JhbW1hciwgbm9taW5hbFBhcnNlckZyb21Db21iaW5lZEN1c3RvbUdyYW1tYXIgfSA9IG5vbWluYWxVdGlsaXRpZXM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE5vbWluYWxGaWxlQ29udGV4dCBleHRlbmRzIEZpbGVDb250ZXh0IHtcbiAgY29uc3RydWN0b3IoY29udGV4dCwgZmlsZUNvbnRlbnQsIGZpbGVQYXRoLCB0b2tlbnMsIG5vZGUsIGpzb24sIGxleGVyLCBwYXJzZXIsIHR5cGVzLCBydWxlcywgYXhpb21zLCBsZW1tYXMsIHNjaGVtYXMsIHRoZW9yZW1zLCBnZW5lcmF0b3JzLCBjb25qZWN0dXJlcywgY29tYmluYXRvcnMsIHR5cGVQcmVmaXhlcywgY29uc3RydWN0b3JzLCBkZWNsYXJlZFZhcmlhYmxlcywgZGVjbGFyZWRNZXRhdmFyaWFibGVzKSB7XG4gICAgc3VwZXIoY29udGV4dCwgZmlsZUNvbnRlbnQsIGZpbGVQYXRoLCB0b2tlbnMsIG5vZGUsIGpzb24pO1xuXG4gICAgdGhpcy5sZXhlciA9IGxleGVyO1xuICAgIHRoaXMucGFyc2VyID0gcGFyc2VyO1xuICAgIHRoaXMuY29udGV4dCA9IGNvbnRleHQ7XG4gICAgdGhpcy5maWxlUGF0aCA9IGZpbGVQYXRoO1xuICAgIHRoaXMudG9rZW5zID0gdG9rZW5zO1xuICAgIHRoaXMubm9kZSA9IG5vZGU7XG4gICAgdGhpcy50eXBlcyA9IHR5cGVzO1xuICAgIHRoaXMucnVsZXMgPSBydWxlcztcbiAgICB0aGlzLmF4aW9tcyA9IGF4aW9tcztcbiAgICB0aGlzLmxlbW1hcyA9IGxlbW1hcztcbiAgICB0aGlzLnNjaGVtYXMgPSBzY2hlbWFzO1xuICAgIHRoaXMudGhlb3JlbXMgPSB0aGVvcmVtcztcbiAgICB0aGlzLmdlbmVyYXRvcnMgPSBnZW5lcmF0b3JzO1xuICAgIHRoaXMuY29uamVjdHVyZXMgPSBjb25qZWN0dXJlcztcbiAgICB0aGlzLmNvbWJpbmF0b3JzID0gY29tYmluYXRvcnM7XG4gICAgdGhpcy50eXBlUHJlZml4ZXMgPSB0eXBlUHJlZml4ZXM7XG4gICAgdGhpcy5jb25zdHJ1Y3RvcnMgPSBjb25zdHJ1Y3RvcnM7XG4gICAgdGhpcy5kZWNsYXJlZFZhcmlhYmxlcyA9IGRlY2xhcmVkVmFyaWFibGVzO1xuICAgIHRoaXMuZGVjbGFyZWRNZXRhdmFyaWFibGVzID0gZGVjbGFyZWRNZXRhdmFyaWFibGVzO1xuICB9XG5cbiAgZ2V0TGV4ZXIoKSB7XG4gICAgcmV0dXJuIHRoaXMubGV4ZXI7XG4gIH1cblxuICBnZXRQYXJzZXIoKSB7XG4gICAgcmV0dXJuIHRoaXMucGFyc2VyO1xuICB9XG5cbiAgZ2V0RXF1aXZhbGVuY2VzKCkge1xuICAgIGNvbnN0IGVxdWl2YWxlbmNlcyA9IFtdO1xuXG4gICAgcmV0dXJuIGVxdWl2YWxlbmNlcztcbiAgfVxuXG4gIGdldFN1YnByb29mT3JQcm9vZkFzc2VydGlvbnMoKSB7XG4gICAgY29uc3Qgc3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucyA9IFtdO1xuXG4gICAgcmV0dXJuIHN1YnByb29mT3JQcm9vZkFzc2VydGlvbnM7XG4gIH1cblxuICBnZXRMYWJlbHMoaW5jbHVkZVJlbGVhc2UgPSB0cnVlKSB7XG4gICAgY29uc3QgbGFiZWxzID0gW107XG5cbiAgICBpZiAoaW5jbHVkZVJlbGVhc2UpIHtcbiAgICAgIGNvbnN0IHJlbGVhc2VDb250ZXh0TGFiZWxzID0gdGhpcy5jb250ZXh0LmdldExhYmVscygpO1xuXG4gICAgICBwdXNoKGxhYmVscywgcmVsZWFzZUNvbnRleHRMYWJlbHMpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnJ1bGVzLmZvckVhY2goKHJ1bGUpID0+IHtcbiAgICAgICAgY29uc3QgcnVsZUxhYmVscyA9IHJ1bGUuZ2V0TGFiZWxzKCk7XG5cbiAgICAgICAgcHVzaChsYWJlbHMsIHJ1bGVMYWJlbHMpO1xuICAgICAgfSk7XG5cbiAgICAgIHRoaXMuYXhpb21zLmZvckVhY2goKGF4aW9tKSA9PiB7XG4gICAgICAgIGNvbnN0IGF4aW9tTGFiZWxzID0gYXhpb20uZ2V0TGFiZWxzKCk7XG5cbiAgICAgICAgcHVzaChsYWJlbHMsIGF4aW9tTGFiZWxzKTtcbiAgICAgIH0pO1xuXG4gICAgICB0aGlzLmxlbW1hcy5mb3JFYWNoKChsZW1tYSkgPT4ge1xuICAgICAgICBjb25zdCBsZW1tYUxhYmVscyA9IGxlbW1hLmdldExhYmVscygpO1xuXG4gICAgICAgIHB1c2gobGFiZWxzLCBsZW1tYUxhYmVscyk7XG4gICAgICB9KTtcblxuICAgICAgdGhpcy50aGVvcmVtcy5mb3JFYWNoKCh0aGVvcmVtKSA9PiB7XG4gICAgICAgIGNvbnN0IHRoZW9yZW1MYWJlbHMgPSB0aGVvcmVtLmdldExhYmVscygpO1xuXG4gICAgICAgIHB1c2gobGFiZWxzLCB0aGVvcmVtTGFiZWxzKTtcbiAgICAgIH0pO1xuXG4gICAgICB0aGlzLmNvbmplY3R1cmVzLmZvckVhY2goKGNvbmplY3R1cmUpID0+IHtcbiAgICAgICAgY29uc3QgY29uamVjdHVyZUxhYmVscyA9IGNvbmplY3R1cmUuZ2V0TGFiZWxzKCk7XG5cbiAgICAgICAgcHVzaChsYWJlbHMsIGNvbmplY3R1cmVMYWJlbHMpO1xuICAgICAgfSk7XG5cbiAgICAgIHRoaXMuc2NoZW1hcy5mb3JFYWNoKChzY2hlbWEpID0+IHtcbiAgICAgICAgY29uc3Qgc2NoZW1hTGFiZWwgPSBzY2hlbWEuZ2V0TGFiZWwoKTtcblxuICAgICAgICBsYWJlbHMucHVzaChzY2hlbWFMYWJlbCk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gbGFiZWxzO1xuICB9XG5cbiAgZ2V0VHlwZXMoaW5jbHVkZVJlbGVhc2UgPSB0cnVlKSB7XG4gICAgY29uc3QgdHlwZXMgPSBpbmNsdWRlUmVsZWFzZSA/XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dC5nZXRUeXBlcygpIDpcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLnR5cGVzO1xuXG4gICAgcmV0dXJuIHR5cGVzO1xuICB9XG5cbiAgZ2V0UnVsZXMoaW5jbHVkZVJlbGVhc2UgPSB0cnVlKSB7XG4gICAgY29uc3QgcnVsZXMgPSBpbmNsdWRlUmVsZWFzZSA/XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dC5nZXRSdWxlcygpIDpcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJ1bGVzO1xuXG4gICAgcmV0dXJuIHJ1bGVzO1xuICB9XG5cbiAgZ2V0QXhpb21zKGluY2x1ZGVSZWxlYXNlID0gdHJ1ZSkge1xuICAgIGNvbnN0IGF4aW9tcyA9IGluY2x1ZGVSZWxlYXNlID9cbiAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dC5nZXRBeGlvbXMoKSA6XG4gICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYXhpb21zO1xuXG4gICAgcmV0dXJuIGF4aW9tcztcbiAgfVxuXG4gIGdldExlbW1hcyhpbmNsdWRlUmVsZWFzZSA9IHRydWUpIHtcbiAgICBjb25zdCBsZW1tYXMgPSBpbmNsdWRlUmVsZWFzZSA/XG4gICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRleHQuZ2V0TGVtbWFzKCkgOlxuICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxlbW1hcztcblxuICAgIHJldHVybiBsZW1tYXM7XG4gIH1cblxuICBnZXRTY2hlbWFzKGluY2x1ZGVSZWxlYXNlID0gdHJ1ZSkge1xuICAgIGNvbnN0IHNjaGVtYXMgPSBpbmNsdWRlUmVsZWFzZSA/XG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb250ZXh0LmdldFNjaGVtYXMoKSA6XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNjaGVtYXM7XG5cbiAgICByZXR1cm4gc2NoZW1hcztcbiAgfVxuXG4gIGdldFRoZW9yZW1zKGluY2x1ZGVSZWxlYXNlID0gdHJ1ZSkge1xuICAgIGNvbnN0IHRoZW9yZW1zID0gaW5jbHVkZVJlbGVhc2UgP1xuICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRleHQuZ2V0VGhlb3JlbXMoKSA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50aGVvcmVtcztcblxuICAgIHJldHVybiB0aGVvcmVtcztcbiAgfVxuXG4gIGdldEdlbmVyYXRvcnMoaW5jbHVkZVJlbGVhc2UgPSB0cnVlKSB7XG4gICAgY29uc3QgZ2VuZXJhdG9ycyA9IGluY2x1ZGVSZWxlYXNlID9cbiAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRleHQuZ2V0R2VuZXJhdG9ycygpIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZ2VuZXJhdG9ycztcblxuICAgIHJldHVybiBnZW5lcmF0b3JzO1xuICB9XG5cbiAgZ2V0Q29uamVjdHVyZXMoaW5jbHVkZVJlbGVhc2UgPSB0cnVlKSB7XG4gICAgY29uc3QgY29uamVjdHVyZXMgPSBpbmNsdWRlUmVsZWFzZSA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dC5nZXRDb25qZWN0dXJlcygpIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbmplY3R1cmVzO1xuXG4gICAgcmV0dXJuIGNvbmplY3R1cmVzO1xuICB9XG5cbiAgZ2V0Q29tYmluYXRvcnMoaW5jbHVkZVJlbGVhc2UgPSB0cnVlKSB7XG4gICAgY29uc3QgY29tYmluYXRvcnMgPSBpbmNsdWRlUmVsZWFzZSA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dC5nZXRDb21iaW5hdG9ycygpIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbWJpbmF0b3JzO1xuXG4gICAgcmV0dXJuIGNvbWJpbmF0b3JzO1xuICB9XG5cbiAgZ2V0VHlwZVByZWZpeGVzKGluY2x1ZGVSZWxlYXNlID0gdHJ1ZSkge1xuICAgIGNvbnN0IHR5cGVQcmVmaXhlcyA9IGluY2x1ZGVSZWxlYXNlID9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dC5nZXRUeXBlUHJlZml4ZXMoKSA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudHlwZVByZWZpeGVzO1xuXG4gICAgcmV0dXJuIHR5cGVQcmVmaXhlcztcbiAgfVxuXG4gIGdldENvbnN0cnVjdG9ycyhpbmNsdWRlUmVsZWFzZSA9IHRydWUpIHtcbiAgICBjb25zdCBjb25zdHJ1Y3RvcnMgPSBpbmNsdWRlUmVsZWFzZSA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRleHQuZ2V0Q29uc3RydWN0b3JzKCkgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnN0cnVjdG9ycztcblxuICAgIHJldHVybiBjb25zdHJ1Y3RvcnM7XG4gIH1cblxuICBnZXRQcm9jZWR1cmVzKGluY2x1ZGVSZWxlYXNlID0gdHJ1ZSkge1xuICAgIGNvbnN0IHByb2NlZHVyZXMgPSBpbmNsdWRlUmVsZWFzZSA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dC5nZXRQcm9jZWR1cmVzKCkgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bGw7ICAvLy9cblxuICAgIHJldHVybiBwcm9jZWR1cmVzO1xuICB9XG5cbiAgZ2V0VG9wTGV2ZWxBc3NlcnRpb25zKGluY2x1ZGVSZWxlYXNlID0gdHJ1ZSkge1xuICAgIGNvbnN0IGxlbW1hcyA9IHRoaXMuZ2V0TGVtbWFzKGluY2x1ZGVSZWxlYXNlKSxcbiAgICAgICAgICBheGlvbXMgPSB0aGlzLmdldEF4aW9tcyhpbmNsdWRlUmVsZWFzZSksXG4gICAgICAgICAgdGhlb3JlbXMgPSB0aGlzLmdldFRoZW9yZW1zKGluY2x1ZGVSZWxlYXNlKSxcbiAgICAgICAgICBjb25qZWN0dXJlcyA9IHRoaXMuZ2V0Q29uamVjdHVyZXMoaW5jbHVkZVJlbGVhc2UpLFxuICAgICAgICAgIHRvcExldmVsQXNzZXJ0aW9ucyA9IFtcbiAgICAgICAgICAgIC4uLmxlbW1hcyxcbiAgICAgICAgICAgIC4uLmF4aW9tcyxcbiAgICAgICAgICAgIC4uLnRoZW9yZW1zLFxuICAgICAgICAgICAgLi4uY29uamVjdHVyZXNcbiAgICAgICAgICBdO1xuXG4gICAgcmV0dXJuIHRvcExldmVsQXNzZXJ0aW9ucztcbiAgfVxuXG4gIGdldERlY2xhcmVkVmFyaWFibGVzKCkge1xuICAgIHJldHVybiB0aGlzLmRlY2xhcmVkVmFyaWFibGVzO1xuICB9XG5cbiAgZ2V0RGVjbGFyZWRNZXRhdmFyaWFibGVzKCkge1xuICAgIHJldHVybiB0aGlzLmRlY2xhcmVkTWV0YXZhcmlhYmxlcztcbiAgfVxuXG4gIGdldFRlcm1zKHRlcm1zID0gW10pIHtcbiAgICByZXR1cm4gdGVybXM7XG4gIH1cblxuICBnZXRHb2Fscyhnb2FscyA9IFtdKSB7XG4gICAgcmV0dXJuIGdvYWxzO1xuICB9XG5cbiAgZ2V0RnJhbWVzKGZyYW1lcyA9IFtdKSB7XG4gICAgcmV0dXJuIGZyYW1lcztcbiAgfVxuXG4gIGdldFByb3BlcnRpZXMocHJvcGVydGllcyA9IFtdKSB7XG4gICAgcmV0dXJuIHByb3BlcnRpZXM7XG4gIH1cblxuICBnZXRFcXVhbGl0aWVzKGVxdWFsaXRpZXMgPSBbXSkge1xuICAgIHJldHVybiBlcXVhbGl0aWVzO1xuICB9XG5cbiAgZ2V0SnVkZ2VtZW50cyhqdWRnZW1lbnRzID0gW10pIHtcbiAgICByZXR1cm4ganVkZ2VtZW50cztcbiAgfVxuXG4gIGdldEFzc2VydGlvbnMoYXNzZXJ0aW9ucyA9IFtdKSB7XG4gICAgcmV0dXJuIGFzc2VydGlvbnM7XG4gIH1cblxuICBnZXRTdGF0ZW1lbnRzKHN0YXRlbWVudHMgPSBbXSkge1xuICAgIHJldHVybiBzdGF0ZW1lbnRzO1xuICB9XG5cbiAgZ2V0U2lnbmF0dXJlcyhzaWduYXR1cmVzID0gW10pIHtcbiAgICByZXR1cm4gc2lnbmF0dXJlcztcbiAgfVxuXG4gIGdldFJlZmVyZW5jZXMocmVmZXJlbmNlcyA9IFtdKSB7XG4gICAgcmV0dXJuIHJlZmVyZW5jZXM7XG4gIH1cblxuICBnZXRBc3N1bXB0aW9ucyhhc3N1bXB0aW9ucyA9IFtdKSB7XG4gICAgcmV0dXJuIGFzc3VtcHRpb25zO1xuICB9XG5cbiAgZ2V0TWV0YXZhcmlhYmxlcyhtZXRhdmFyaWFibGVzID0gW10pIHtcbiAgICByZXR1cm4gbWV0YXZhcmlhYmxlcztcbiAgfVxuXG4gIGdldFN1YnN0aXR1dGlvbnMoc3Vic3RpdHV0aW9ucyA9IFtdKSB7XG4gICAgcmV0dXJuIHN1YnN0aXR1dGlvbnM7XG4gIH1cblxuICBnZXRQcm9wZXJ0eVJlbGF0aW9ucyhwcm9wZXJ0eVJlbGF0aW9ucyA9IFtdKSB7XG4gICAgcmV0dXJuIHByb3BlcnR5UmVsYXRpb25zO1xuICB9XG5cbiAgZ2V0RGVyaXZlZFN1YnN0aXR1dGlvbnMoZGVyaXZlZFN1YnN0aXR1dGlvbnMgPSBbXSkge1xuICAgIHJldHVybiBkZXJpdmVkU3Vic3RpdHV0aW9ucztcbiAgfVxuXG4gIGFkZFR5cGUodHlwZSkge1xuICAgIHRoaXMudHlwZXMucHVzaCh0eXBlKTtcblxuICAgIGNvbnN0IGZpbGVQYXRoID0gdGhpcy5nZXRGaWxlUGF0aCgpLFxuICAgICAgICAgIHR5cGVTdHJpbmcgPSB0eXBlLmdldFN0cmluZygpO1xuXG4gICAgdGhpcy50cmFjZShgQWRkZWQgdGhlICcke3R5cGVTdHJpbmd9JyB0eXBlIHRvIHRoZSAnJHtmaWxlUGF0aH0nIGZpbGUgY29udGV4dC5gKVxuICB9XG5cbiAgYWRkUnVsZShydWxlKSB7XG4gICAgdGhpcy5ydWxlcy5wdXNoKHJ1bGUpO1xuXG4gICAgY29uc3QgZmlsZVBhdGggPSB0aGlzLmdldEZpbGVQYXRoKCksXG4gICAgICAgICAgcnVsZVN0cmluZyA9IHJ1bGUuZ2V0U3RyaW5nKCk7XG5cbiAgICB0aGlzLnRyYWNlKGBBZGRlZCB0aGUgJyR7cnVsZVN0cmluZ30nIHJ1bGUgdG8gdGhlICcke2ZpbGVQYXRofScgZmlsZSBjb250ZXh0LmApXG4gIH1cblxuICBhZGRBeGlvbShheGlvbSkge1xuICAgIHRoaXMuYXhpb21zLnB1c2goYXhpb20pO1xuXG4gICAgY29uc3QgZmlsZVBhdGggPSB0aGlzLmdldEZpbGVQYXRoKCksXG4gICAgICAgICAgYXhpb21TdHJpbmcgPSBheGlvbS5nZXRTdHJpbmcoKTtcblxuICAgIHRoaXMudHJhY2UoYEFkZGVkIHRoZSAnJHtheGlvbVN0cmluZ30nIGF4aW9tIHRvIHRoZSAnJHtmaWxlUGF0aH0nIGZpbGUgY29udGV4dC5gKVxuICB9XG5cbiAgYWRkTGVtbWEobGVtbWEpIHtcbiAgICB0aGlzLmxlbW1hcy5wdXNoKGxlbW1hKTtcblxuICAgIGNvbnN0IGZpbGVQYXRoID0gdGhpcy5nZXRGaWxlUGF0aCgpLFxuICAgICAgICAgIGxlbW1hU3RyaW5nID0gbGVtbWEuZ2V0U3RyaW5nKCk7XG5cbiAgICB0aGlzLnRyYWNlKGBBZGRlZCB0aGUgJyR7bGVtbWFTdHJpbmd9JyBsZW1tYSB0byB0aGUgJyR7ZmlsZVBhdGh9JyBmaWxlIGNvbnRleHQuYClcbiAgfVxuXG4gIGFkZFNjaGVtYShzY2hlbWEpIHtcbiAgICB0aGlzLnNjaGVtYXMucHVzaChzY2hlbWEpO1xuXG4gICAgY29uc3QgZmlsZVBhdGggPSB0aGlzLmdldEZpbGVQYXRoKCksXG4gICAgICAgICAgc2NoZW1hU3RyaW5nID0gc2NoZW1hLmdldFN0cmluZygpO1xuXG4gICAgdGhpcy50cmFjZShgQWRkZWQgdGhlICcke3NjaGVtYVN0cmluZ30nIHNjaGVtYSB0byB0aGUgJyR7ZmlsZVBhdGh9JyBmaWxlIGNvbnRleHQuYClcbiAgfVxuXG4gIGFkZFRoZW9yZW0odGhlb3JlbSkge1xuICAgIHRoaXMudGhlb3JlbXMucHVzaCh0aGVvcmVtKTtcblxuICAgIGNvbnN0IGZpbGVQYXRoID0gdGhpcy5nZXRGaWxlUGF0aCgpLFxuICAgICAgICAgIHRoZW9yZW1TdHJpbmcgPSB0aGVvcmVtLmdldFN0cmluZygpO1xuXG4gICAgdGhpcy50cmFjZShgQWRkZWQgdGhlICcke3RoZW9yZW1TdHJpbmd9JyB0aGVvcmVtIHRvIHRoZSAnJHtmaWxlUGF0aH0nIGZpbGUgY29udGV4dC5gKVxuICB9XG5cbiAgYWRkR2VuZXJhdG9yKGdlbmVyYXRvcikge1xuICAgIHRoaXMuZ2VuZXJhdG9ycy5wdXNoKGdlbmVyYXRvcik7XG5cbiAgICBjb25zdCBmaWxlUGF0aCA9IHRoaXMuZ2V0RmlsZVBhdGgoKSxcbiAgICAgICAgICBnZW5lcmF0b3JTdHJpbmcgPSBnZW5lcmF0b3IuZ2V0U3RyaW5nKCk7XG5cbiAgICB0aGlzLnRyYWNlKGBBZGRlZCB0aGUgJyR7Z2VuZXJhdG9yU3RyaW5nfScgZ2VuZXJhdG9yIHRvIHRoZSAnJHtmaWxlUGF0aH0nIGZpbGUgY29udGV4dC5gKVxuICB9XG5cbiAgYWRkQ29uamVjdHVyZShjb25qZWN0dXJlKSB7XG4gICAgdGhpcy5jb25qZWN0dXJlcy5wdXNoKGNvbmplY3R1cmUpO1xuXG4gICAgY29uc3QgZmlsZVBhdGggPSB0aGlzLmdldEZpbGVQYXRoKCksXG4gICAgICAgICAgb2NuamVjdHVyZVN0cmluZyA9IGNvbmplY3R1cmUuZ2V0U3RyaW5nKCk7XG5cbiAgICB0aGlzLnRyYWNlKGBBZGRlZCB0aGUgJyR7b2NuamVjdHVyZVN0cmluZ30nIG9jbmplY3R1cmUgdG8gdGhlICcke2ZpbGVQYXRofScgZmlsZSBjb250ZXh0LmApXG4gIH1cblxuICBhZGRDb21iaW5hdG9yKGNvbWJpbmF0b3IpIHtcbiAgICB0aGlzLmNvbWJpbmF0b3JzLnB1c2goY29tYmluYXRvcik7XG5cbiAgICBjb25zdCBmaWxlUGF0aCA9IHRoaXMuZ2V0RmlsZVBhdGgoKSxcbiAgICAgICAgICBjb21iaW5hdG9yU3RyaW5nID0gY29tYmluYXRvci5nZXRTdHJpbmcoKTtcblxuICAgIHRoaXMudHJhY2UoYEFkZGVkIHRoZSAnJHtjb21iaW5hdG9yU3RyaW5nfScgY29tYmluYXRvciB0byB0aGUgJyR7ZmlsZVBhdGh9JyBmaWxlIGNvbnRleHQuYClcbiAgfVxuXG4gIGFkZFR5cGVQcmVmaXgodHlwZVByZWZpeCkge1xuICAgIHRoaXMudHlwZVByZWZpeGVzLnB1c2godHlwZVByZWZpeCk7XG5cbiAgICBjb25zdCBmaWxlUGF0aCA9IHRoaXMuZ2V0RmlsZVBhdGgoKSxcbiAgICAgICAgICB0eXBlUHJlZml4U3RyaW5nID0gdHlwZVByZWZpeC5nZXRTdHJpbmcoKTtcblxuICAgIHRoaXMudHJhY2UoYEFkZGVkIHRoZSAnJHt0eXBlUHJlZml4U3RyaW5nfScgdHlwZS1wcmVmaXggdG8gdGhlICcke2ZpbGVQYXRofScgZmlsZSBjb250ZXh0LmApXG4gIH1cblxuICBhZGRDb25zdHJ1Y3Rvcihjb25zdHJ1Y3Rvcikge1xuICAgIHRoaXMuY29uc3RydWN0b3JzLnB1c2goY29uc3RydWN0b3IpO1xuXG4gICAgY29uc3QgZmlsZVBhdGggPSB0aGlzLmdldEZpbGVQYXRoKCksXG4gICAgICAgICAgY29uc3RydWN0b3JTdHJpbmcgPSBjb25zdHJ1Y3Rvci5nZXRTdHJpbmcoKTtcblxuICAgIHRoaXMudHJhY2UoYEFkZGVkIHRoZSAnJHtjb25zdHJ1Y3RvclN0cmluZ30nIGNvbnN0cnVjdG9yIHRvIHRoZSAnJHtmaWxlUGF0aH0nIGZpbGUgY29udGV4dC5gKVxuICB9XG5cbiAgYWRkRGVjbGFyZWRWYXJpYWJsZShkZWNsYXJlZFZhcmlhYmxlKSB7XG4gICAgdGhpcy5kZWNsYXJlZFZhcmlhYmxlcy5wdXNoKGRlY2xhcmVkVmFyaWFibGUpO1xuXG4gICAgY29uc3QgZmlsZVBhdGggPSB0aGlzLmdldEZpbGVQYXRoKCksXG4gICAgICAgICAgZGVjbGFyZWRWYXJpYWJsZVN0cmluZyA9IGRlY2xhcmVkVmFyaWFibGUuZ2V0U3RyaW5nKCk7XG5cbiAgICB0aGlzLnRyYWNlKGBBZGRlZCB0aGUgJyR7ZGVjbGFyZWRWYXJpYWJsZVN0cmluZ30nIGRlY2xhcmVkIHZhcmlhYmxlIHRvIHRoZSAnJHtmaWxlUGF0aH0nIGZpbGUgY29udGV4dC5gKVxuICB9XG5cbiAgYWRkRGVjbGFyZWRNZXRhdmFyaWFibGUoZGVjbGFyZWRNZXRhdmFyaWFibGUpIHtcbiAgICB0aGlzLmRlY2xhcmVkTWV0YXZhcmlhYmxlcy5wdXNoKGRlY2xhcmVkTWV0YXZhcmlhYmxlKTtcblxuICAgIGNvbnN0IGZpbGVQYXRoID0gdGhpcy5nZXRGaWxlUGF0aCgpLFxuICAgICAgICAgIGRlY2xhcmVkTWV0YXZhcmlhYmxlU3RyaW5nID0gZGVjbGFyZWRNZXRhdmFyaWFibGUuZ2V0U3RyaW5nKCk7XG5cbiAgICB0aGlzLnRyYWNlKGBBZGRlZCB0aGUgJyR7ZGVjbGFyZWRNZXRhdmFyaWFibGVTdHJpbmd9JyBkZWNsYXJlZCBtZXRhdmFyaWFibGUgdG8gdGhlICcke2ZpbGVQYXRofScgZmlsZSBjb250ZXh0LmApXG4gIH1cblxuICBmaW5kTWV0YXZhcmlhYmxlKG1ldGF2YXJpYWJsZSwgY29udGV4dCkge1xuICAgIGNvbnN0IGRlY2xhcmVkTWV0YXZhcmlhYmxlcyA9IHRoaXMuZ2V0RGVjbGFyZWRNZXRhdmFyaWFibGVzKCk7XG5cbiAgICBtZXRhdmFyaWFibGUgPSBkZWNsYXJlZE1ldGF2YXJpYWJsZXMuZmluZCgoZGVjbGFyZWRNZXRhdmFyaWFibGUpID0+IHtcbiAgICAgIGNvbnN0IG1ldGF2YXJpYWJsZVVuaWZpZXMgPSBkZWNsYXJlZE1ldGF2YXJpYWJsZS51bmlmeU1ldGF2YXJpYWJsZShtZXRhdmFyaWFibGUsIGNvbnRleHQpO1xuXG4gICAgICBpZiAobWV0YXZhcmlhYmxlVW5pZmllcykge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KSB8fCBudWxsO1xuXG4gICAgcmV0dXJuIG1ldGF2YXJpYWJsZTtcbiAgfVxuXG4gIGZpbmRSdWxlQnlSZWZlcmVuY2UocmVmZXJlbmNlKSB7XG4gICAgY29uc3QgcnVsZXMgPSB0aGlzLmdldFJ1bGVzKCksXG4gICAgICAgICAgbWV0YXZhcmlhYmxlTm9kZSA9IHJlZmVyZW5jZS5nZXRNZXRhdmFyaWFibGVOb2RlKCksXG4gICAgICAgICAgcnVsZSA9IHJ1bGVzLmZpbmQoKHJ1bGUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG1ldGF2YXJpYWJsZU5vZGVNYXRjaGVzID0gcnVsZS5tYXRjaE1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSk7XG5cbiAgICAgICAgICAgIGlmIChtZXRhdmFyaWFibGVOb2RlTWF0Y2hlcykge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSB8fCBudWxsO1xuXG4gICAgcmV0dXJuIHJ1bGU7XG4gIH1cblxuICBmaW5kQXhpb21CeVJlZmVyZW5jZShyZWZlcmVuY2UpIHtcbiAgICBjb25zdCBheGlvbXMgPSB0aGlzLmdldEF4aW9tcygpLFxuICAgICAgICAgIG1ldGF2YXJpYWJsZU5vZGUgPSByZWZlcmVuY2UuZ2V0TWV0YXZhcmlhYmxlTm9kZSgpLFxuICAgICAgICAgIGF4aW9tID0gYXhpb21zLmZpbmQoKGF4aW9tKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBtZXRhdmFyaWFibGVOb2RlTWF0Y2hlcyA9IGF4aW9tLm1hdGNoTWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlKTtcblxuICAgICAgICAgICAgaWYgKG1ldGF2YXJpYWJsZU5vZGVNYXRjaGVzKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pIHx8IG51bGw7XG5cbiAgICByZXR1cm4gYXhpb207XG4gIH1cblxuICBmaW5kTGVtbWFCeVJlZmVyZW5jZShyZWZlcmVuY2UpIHtcbiAgICBjb25zdCBsZW1tYXMgPSB0aGlzLmdldExlbW1hcygpLFxuICAgICAgICAgIG1ldGF2YXJpYWJsZU5vZGUgPSByZWZlcmVuY2UuZ2V0TWV0YXZhcmlhYmxlTm9kZSgpLFxuICAgICAgICAgIGxlbW1hID0gbGVtbWFzLmZpbmQoKGxlbW1hKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBtZXRhdmFyaWFibGVOb2RlTWF0Y2hlcyA9IGxlbW1hLm1hdGNoTWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlKTtcblxuICAgICAgICAgICAgaWYgKG1ldGF2YXJpYWJsZU5vZGVNYXRjaGVzKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pIHx8IG51bGw7XG5cbiAgICByZXR1cm4gbGVtbWE7XG4gIH1cblxuICBmaW5kVGhlb3JlbUJ5UmVmZXJlbmNlKHJlZmVyZW5jZSkge1xuICAgIGNvbnN0IHRoZW9yZW1zID0gdGhpcy5nZXRUaGVvcmVtcygpLFxuICAgICAgICAgIG1ldGF2YXJpYWJsZU5vZGUgPSByZWZlcmVuY2UuZ2V0TWV0YXZhcmlhYmxlTm9kZSgpLFxuICAgICAgICAgIHRoZW9yZW0gPSB0aGVvcmVtcy5maW5kKCh0aGVvcmVtKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBtZXRhdmFyaWFibGVOb2RlTWF0Y2hlcyA9IHRoZW9yZW0ubWF0Y2hNZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpO1xuXG4gICAgICAgICAgICBpZiAobWV0YXZhcmlhYmxlTm9kZU1hdGNoZXMpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSkgfHwgbnVsbDtcblxuICAgIHJldHVybiB0aGVvcmVtO1xuICB9XG5cbiAgZmluZENvbmplY3R1cmVCeVJlZmVyZW5jZShyZWZlcmVuY2UpIHtcbiAgICBjb25zdCBjb25qZWN0dXJlcyA9IHRoaXMuZ2V0Q29uamVjdHVyZXMoKSxcbiAgICAgICAgICBtZXRhdmFyaWFibGVOb2RlID0gcmVmZXJlbmNlLmdldE1ldGF2YXJpYWJsZU5vZGUoKSxcbiAgICAgICAgICBjb25qZWN0dXJlID0gY29uamVjdHVyZXMuZmluZCgoY29uamVjdHVyZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgbWV0YXZhcmlhYmxlTm9kZU1hdGNoZXMgPSBjb25qZWN0dXJlLm1hdGNoTWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlKTtcblxuICAgICAgICAgICAgaWYgKG1ldGF2YXJpYWJsZU5vZGVNYXRjaGVzKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pIHx8IG51bGw7XG5cbiAgICByZXR1cm4gY29uamVjdHVyZTtcbiAgfVxuXG4gIGZpbmRUb3BMZXZlbEFzc2VydGlvbkJ5UmVmZXJlbmNlKHJlZmVyZW5jZSkge1xuICAgIGNvbnN0IHRvcExFdmVsQXNzZXJ0aW9ucyA9IHRoaXMuZ2V0VG9wTGV2ZWxBc3NlcnRpb25zKCksXG4gICAgICAgICAgbWV0YXZhcmlhYmxlTm9kZSA9IHJlZmVyZW5jZS5nZXRNZXRhdmFyaWFibGVOb2RlKCksXG4gICAgICAgICAgdG9wTGV2ZWxBc3NlcnRpb24gPSB0b3BMRXZlbEFzc2VydGlvbnMuZmluZCgodG9wTGV2ZWxBc3NlcnRpb24pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG1ldGF2YXJpYWJsZU5vZGVNYXRjaGVzID0gdG9wTGV2ZWxBc3NlcnRpb24ubWF0Y2hNZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpO1xuXG4gICAgICAgICAgICBpZiAobWV0YXZhcmlhYmxlTm9kZU1hdGNoZXMpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSkgfHwgbnVsbDtcblxuICAgIHJldHVybiB0b3BMZXZlbEFzc2VydGlvbjtcbiAgfVxuXG4gIGZpbmRUeXBlQnlUeXBlTmFtZSh0eXBlTmFtZSkge1xuICAgIGNvbnN0IHR5cGVzID0gdGhpcy5nZXRUeXBlcygpLFxuICAgICAgICAgIHR5cGUgPSBmaW5kVHlwZSh0eXBlcywgKHR5cGUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHR5cGVDb21wYXJlc1RvVHlwZU5hbWUgPSB0eXBlLmNvbXBhcmVUeXBlTmFtZSh0eXBlTmFtZSk7XG5cbiAgICAgICAgICAgIGlmICh0eXBlQ29tcGFyZXNUb1R5cGVOYW1lKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuXG4gICAgcmV0dXJuIHR5cGU7XG4gIH1cblxuICBmaW5kVHlwZUJ5Tm9taW5hbFR5cGVOYW1lKG5vbWluYWxUeXBlTmFtZSkge1xuICAgIGNvbnN0IHR5cGVzID0gdGhpcy5nZXRUeXBlcygpLFxuICAgICAgICAgIHR5cGUgPSBmaW5kVHlwZSh0eXBlcywgKHR5cGUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHR5cGVDb21wYXJlc1RvTm9taW5hbFR5cGVOYW1lID0gdHlwZS5jb21wYXJlTm9taW5hbFR5cGVOYW1lKG5vbWluYWxUeXBlTmFtZSk7XG5cbiAgICAgICAgICAgIGlmICh0eXBlQ29tcGFyZXNUb05vbWluYWxUeXBlTmFtZSkge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcblxuICAgIHJldHVybiB0eXBlO1xuICB9XG5cbiAgZmluZFR5cGVCeVByZWZpeGVkVHlwZU5hbWUocHJlZml4ZWRUeXBlTmFtZSkge1xuICAgIGNvbnN0IHR5cGVzID0gdGhpcy5nZXRUeXBlcygpLFxuICAgICAgICAgIHR5cGUgPSBmaW5kVHlwZSh0eXBlcywgKHR5cGUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHR5cGVDb21wYXJlc1RvUHJlZml4ZWRUeXBlTmFtZSA9IHR5cGUuY29tcGFyZVByZWZpeGVkVHlwZU5hbWUocHJlZml4ZWRUeXBlTmFtZSk7XG5cbiAgICAgICAgICAgIGlmICh0eXBlQ29tcGFyZXNUb1ByZWZpeGVkVHlwZU5hbWUpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG5cbiAgICByZXR1cm4gdHlwZTtcbiAgfVxuXG4gIGZpbmRUeXBlUHJlZml4QnlUeXBlUHJlZml4TmFtZSh0eXBlUHJlZml4TmFtZSkge1xuICAgIGNvbnN0IHR5cGVQcmVmaXhlcyA9IHRoaXMuZ2V0VHlwZVByZWZpeGVzKCksXG4gICAgICAgICAgdHlwZVByZWZpeCA9IHR5cGVQcmVmaXhlcy5maW5kKCh0eXBlUHJlZml4KSA9PiB7XG4gICAgICAgICAgICBjb25zdCB0eXBlUHJlZml4Q29tcGFyZXNUb1R5cGVQcmVmaXhOYW1lID0gdHlwZVByZWZpeC5jb21wYXJlVHlwZVByZWZpeE5hbWUodHlwZVByZWZpeE5hbWUpO1xuXG4gICAgICAgICAgICBpZiAodHlwZVByZWZpeENvbXBhcmVzVG9UeXBlUHJlZml4TmFtZSkge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSB8fCBudWxsO1xuXG4gICAgcmV0dXJuIHR5cGVQcmVmaXg7XG4gIH1cblxuICBmaW5kRGVjbGFyZWRWYXJpYWJsZUJ5VmFyaWFibGVJZGVudGlmaWVyKFZhcmlhYmxlSWRlbnRpdGlmZXIpIHtcbiAgICBjb25zdCBkZWNsYXJlZFZhcmlhYmxlcyA9IHRoaXMuZ2V0RGVjbGFyZWRWYXJpYWJsZXMoKSxcbiAgICAgICAgICBkZWNsYXJlZFZhcmlhYmxlID0gZGVjbGFyZWRWYXJpYWJsZXMuZmluZCgoZGVjbGFyZWRWYXJpYWJsZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZGVjbGFyZWRWYXJpYWJsZUNvbXBhcmVzVG9WYXJpYWJsZUlkZW50aXRpZmVyID0gZGVjbGFyZWRWYXJpYWJsZS5jb21wYXJlVmFyaWFibGVJZGVudGlmaWVyKFZhcmlhYmxlSWRlbnRpdGlmZXIpO1xuXG4gICAgICAgICAgICBpZiAoZGVjbGFyZWRWYXJpYWJsZUNvbXBhcmVzVG9WYXJpYWJsZUlkZW50aXRpZmVyKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pIHx8IG51bGw7XG5cbiAgICByZXR1cm4gZGVjbGFyZWRWYXJpYWJsZTtcbiAgfVxuXG4gIGZpbmREZWNsYXJlZE1ldGF2YXJpYWJsZUJ5TWV0YXZhcmlhYmxlTmFtZShtZXRhdmFyaWFibGVOYW1lKSB7XG4gICAgY29uc3QgZGVjbGFyZWRNZXRhdmFyaWFibGVzID0gdGhpcy5nZXREZWNsYXJlZE1ldGF2YXJpYWJsZXMoKSxcbiAgICAgICAgICBkZWNsYXJlZE1ldGF2YXJpYWJsZSA9IGRlY2xhcmVkTWV0YXZhcmlhYmxlcy5maW5kKChkZWNsYXJlZE1ldGF2YXJpYWJsZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZGVjbGFyZWRNZXRhdmFyaWFibGVDb21wYXJlc1RvTWV0YXZhcmlhYmxlTmFtZSA9IGRlY2xhcmVkTWV0YXZhcmlhYmxlLmNvbXBhcmVNZXRhdmFyaWFibGVOYW1lKG1ldGF2YXJpYWJsZU5hbWUpO1xuXG4gICAgICAgICAgICBpZiAoZGVjbGFyZWRNZXRhdmFyaWFibGVDb21wYXJlc1RvTWV0YXZhcmlhYmxlTmFtZSkge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSB8fCBudWxsO1xuXG4gICAgcmV0dXJuIGRlY2xhcmVkTWV0YXZhcmlhYmxlO1xuICB9XG5cbiAgZmluZE1ldGF2YXJpYWJsZUJ5TWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlKSB7XG4gICAgY29uc3QgbWV0YXZhcmlhYmxlID0gbnVsbDtcblxuICAgIHJldHVybiBtZXRhdmFyaWFibGU7XG4gIH1cblxuICBmaW5kU3Vic3RpdHV0aW9uQnlTdWJzdGl0dXRpb25Ob2RlKHN1YnN0aXR1dGlvbk5vZGUpIHtcbiAgICBjb25zdCBzdWJzdGl0dXRpb24gPSBudWxsO1xuXG4gICAgcmV0dXJuIHN1YnN0aXR1dGlvbjtcbiAgfVxuXG4gIGZpbmRDb25zdHJhaW50QnlDb25zdHJhaW50Tm9kZShjb25zdHJhaW50Tm9kZSkge1xuICAgIGNvbnN0IGNvbnN0cmFpbnQgPSBudWxsO1xuXG4gICAgcmV0dXJuIGNvbnN0cmFpbnQ7XG4gIH1cblxuICBmaW5kUHJvY2VkdXJlQnlQcm9jZWR1cmVOYW1lKHByb2NlZHVyZU5hbWUpIHtcbiAgICBjb25zdCBwcm9jZWR1cmVzID0gdGhpcy5nZXRQcm9jZWR1cmVzKCksXG4gICAgICAgICAgcHJvY2VkdXJlID0gcHJvY2VkdXJlcy5maW5kKChwcm9jZWR1cmUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHByb2NlZHVyZUNvbXBhcmVzVG9Qcm9jZWR1cmVOYW1lID0gcHJvY2VkdXJlLmNvbXBhcmVQcm9jZWR1cmVOYW1lKHByb2NlZHVyZU5hbWUpO1xuXG4gICAgICAgICAgICBpZiAocHJvY2VkdXJlQ29tcGFyZXNUb1Byb2NlZHVyZU5hbWUpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSkgfHwgbnVsbDtcblxuICAgIHJldHVybiBwcm9jZWR1cmU7XG4gIH1cblxuICBmaW5kTWV0YVR5cGVCeU1ldGFUeXBlTmFtZShtZXRhVHlwZU5hbWUpIHsgcmV0dXJuIGZpbmRNZXRhVHlwZUJ5TWV0YVR5cGVOYW1lKG1ldGFUeXBlTmFtZSk7IH1cblxuICBpc0xhYmVsUHJlc2VudEJ5TGFiZWxOb2RlKGxhYmVsTm9kZSkge1xuICAgIGNvbnN0IGxhYmVscyA9IHRoaXMuZ2V0TGFiZWxzKCksXG4gICAgICAgICAgbGFiZWxQcmVzZW50ID0gbGFiZWxzLnNvbWUoKGxhYmVsKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBsYWJlbE5vZGVNYXRjaGVzID0gbGFiZWwubWF0Y2hMYWJlbE5vZGUobGFiZWxOb2RlKTtcblxuICAgICAgICAgICAgaWYgKGxhYmVsTm9kZU1hdGNoZXMpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG5cbiAgICByZXR1cm4gbGFiZWxQcmVzZW50O1xuICB9XG5cbiAgaXNUeXBlUHJlc2VudEJ5VHlwZU5hbWUodHlwZU5hbWUpIHtcbiAgICBjb25zdCB0eXBlID0gdGhpcy5maW5kVHlwZUJ5VHlwZU5hbWUodHlwZU5hbWUpLFxuICAgICAgICAgIHR5cGVQcmVzZW50ID0gKHR5cGUgIT09IG51bGwpO1xuXG4gICAgcmV0dXJuIHR5cGVQcmVzZW50O1xuICB9XG5cbiAgaXNUeXBlUHJlc2VudEJ5Tm9taW5hbFR5cGVOYW1lKG5vbWluYWxUeXBlTmFtZSkge1xuICAgIGNvbnN0IHR5cGUgPSB0aGlzLmZpbmRUeXBlQnlOb21pbmFsVHlwZU5hbWUobm9taW5hbFR5cGVOYW1lKSxcbiAgICAgICAgICB0eXBlUHJlc2VudCA9ICh0eXBlICE9PSBudWxsKTtcblxuICAgIHJldHVybiB0eXBlUHJlc2VudDtcbiAgfVxuXG4gIGlzVHlwZVByZXNlbnRCeVByZWZpeGVkVHlwZU5hbWUocHJlZml4ZWRUeXBlTmFtZSkge1xuICAgIGNvbnN0IHR5cGUgPSB0aGlzLmZpbmRUeXBlQnlQcmVmaXhlZFR5cGVOYW1lKHByZWZpeGVkVHlwZU5hbWUpLFxuICAgICAgICAgIHR5cGVQcmVzZW50ID0gKHR5cGUgIT09IG51bGwpO1xuXG4gICAgcmV0dXJuIHR5cGVQcmVzZW50O1xuICB9XG5cbiAgaXNUeXBlUHJlZml4UHJlc2VudEJ5VHlwZVByZWZpeE5hbWUodHlwZVByZWZpeE5hbWUpIHtcbiAgICBjb25zdCB0eXBlUHJlZml4ID0gdGhpcy5maW5kVHlwZVByZWZpeEJ5VHlwZVByZWZpeE5hbWUodHlwZVByZWZpeE5hbWUpLFxuICAgICAgICAgIHR5cGVQcmVmaXhQcmVzZW50ID0gKHR5cGVQcmVmaXggIT09IG51bGwpO1xuXG4gICAgcmV0dXJuIHR5cGVQcmVmaXhQcmVzZW50O1xuICB9XG5cbiAgaXNEZWNsYXJlZFZhcmlhYmxlUHJlc2VudEJ5VmFyaWFibGVJZGVudGlmaWVyKHZhcmlhYmxlSWRlbnRpZmllcikge1xuICAgIGNvbnN0IGRlY2xhcmVkVmFyaWFibGUgPSB0aGlzLmZpbmREZWNsYXJlZFZhcmlhYmxlQnlWYXJpYWJsZUlkZW50aWZpZXIodmFyaWFibGVJZGVudGlmaWVyKSxcbiAgICAgICAgICBkZWNsYXJlZFZhcmlhYmxlUHJlc2VudCA9IChkZWNsYXJlZFZhcmlhYmxlICE9PSBudWxsKTtcblxuICAgIHJldHVybiBkZWNsYXJlZFZhcmlhYmxlUHJlc2VudDtcbiAgfVxuXG4gIGlzRGVjbGFyZWRNZXRhdmFyaWFibGVQcmVzZW50QnlNZXRhdmFyaWFibGVOYW1lKG1ldGF2YXJpYWJsZU5hbWUpIHtcbiAgICBjb25zdCBkZWNsYXJlZE1ldGF2YXJpYWJsZSA9IHRoaXMuZmluZERlY2xhcmVkTWV0YXZhcmlhYmxlQnlNZXRhdmFyaWFibGVOYW1lKG1ldGF2YXJpYWJsZU5hbWUpLFxuICAgICAgICAgIGRlY2xhcmVkTWV0YXZhcmlhYmxlUHJlc2VudCA9IChkZWNsYXJlZE1ldGF2YXJpYWJsZSAhPT0gbnVsbCk7XG5cbiAgICByZXR1cm4gZGVjbGFyZWRNZXRhdmFyaWFibGVQcmVzZW50O1xuICB9XG5cbiAgaXNQcm9jZWR1cmVQcmVzZW50QnlQcm9jZWR1cmVOYW1lKHByb2NlZHVyZU5hbWUpIHtcbiAgICBjb25zdCBwcm9jZWR1cmUgPSB0aGlzLmZpbmRQcm9jZWR1cmVCeVByb2NlZHVyZU5hbWUocHJvY2VkdXJlTmFtZSksXG4gICAgICAgICAgcHJvY2VkdXJlUHJlc2VudCA9IChwcm9jZWR1cmUgIT09IG51bGwpO1xuXG4gICAgcmV0dXJuIHByb2NlZHVyZVByZXNlbnQ7XG4gIH1cblxuICBpc01ldGFMZXZlbCgpIHtcbiAgICBjb25zdCBtZXRhTEV2ZWwgPSBmYWxzZTtcblxuICAgIHJldHVybiBtZXRhTEV2ZWw7XG4gIH1cblxuICBjbGVhcigpIHtcbiAgICB0aGlzLnR5cGVzID0gW107XG4gICAgdGhpcy5ydWxlcyA9IFtdO1xuICAgIHRoaXMuYXhpb21zID0gW107XG4gICAgdGhpcy5sZW1tYXMgPSBbXTtcbiAgICB0aGlzLnNjaGVtYXMgPSBbXTtcbiAgICB0aGlzLnRoZW9yZW1zID0gW107XG4gICAgdGhpcy5nZW5lcmF0b3JzID0gW107XG4gICAgdGhpcy5jb25qZWN0dXJlcyA9IFtdO1xuICAgIHRoaXMuY29tYmluYXRvcnMgPSBbXTtcbiAgICB0aGlzLnR5cGVQcmVmaXhlcyA9IFtdO1xuICAgIHRoaXMuY29uc3RydWN0b3JzID0gW107XG4gICAgdGhpcy5kZWNsYXJlZFZhcmlhYmxlcyA9IFtdO1xuICAgIHRoaXMuZGVjbGFyZWRNZXRhdmFyaWFibGVzID0gW107XG4gIH1cblxuICBjb21wbGV0ZSgpIHtcbiAgICAvLy9cbiAgfVxuXG4gIGFzeW5jIHZlcmlmeUZpbGUoKSB7XG4gICAgY29uc3Qgbm9kZSA9IHRoaXMuZ2V0Tm9kZSgpLFxuICAgICAgICAgIGNvbnRleHQgPSB0aGlzLCAvLy9cbiAgICAgICAgICBmaWxlTm9kZSA9IG5vZGUsICAvLy9cbiAgICAgICAgICBmaWxlVmVyaWZpZXMgPSBhd2FpdCB2ZXJpZnlGaWxlKGZpbGVOb2RlLCBjb250ZXh0KTtcblxuICAgIHJldHVybiBmaWxlVmVyaWZpZXM7XG4gIH1cblxuICBpbml0aWFsaXNlKCkge1xuICAgIGNvbnN0IGpzb24gPSB0aGlzLmdldEpTT04oKTtcblxuICAgIGlmIChqc29uID09PSBudWxsKSB7XG4gICAgICBzdXBlci5pbml0aWFsaXNlKCk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBmaWxlQ29udGV4dCA9IHRoaXM7IC8vL1xuXG4gICAgdGhpcy50eXBlcyA9IFtdO1xuXG4gICAgdHlwZXNGcm9tSlNPTihqc29uLCB0aGlzLnR5cGVzLCBmaWxlQ29udGV4dCk7XG5cbiAgICB0aGlzLmxlbW1hcyA9IFtdO1xuXG4gICAgdGhpcy5kZWNsYXJlZE1ldGF2YXJpYWJsZXMgPSBkZWNsYXJlZE1ldGF2YXJpYWJsZXNGcm9tSlNPTihqc29uLCBmaWxlQ29udGV4dCk7XG4gICAgdGhpcy5kZWNsYXJlZFZhcmlhYmxlcyA9IGRlY2xhcmVkVmFyaWFibGVzRnJvbUpTT04oanNvbiwgZmlsZUNvbnRleHQpO1xuICAgIHRoaXMudHlwZVByZWZpeGVzID0gdHlwZVByZWZpeGVzRnJvbUpTT04oanNvbiwgZmlsZUNvbnRleHQpO1xuICAgIHRoaXMuZ2VuZXJhdG9ycyA9IGdlbmVyYXRvcnNGcm9tSlNPTihqc29uLCBmaWxlQ29udGV4dCk7XG4gICAgdGhpcy5jb21iaW5hdG9ycyA9IGNvbWJpbmF0b3JzRnJvbUpTT04oanNvbiwgZmlsZUNvbnRleHQpO1xuICAgIHRoaXMuY29uc3RydWN0b3JzID0gY29uc3RydWN0b3JzRnJvbUpTT04oanNvbiwgZmlsZUNvbnRleHQpO1xuXG4gICAgdGhpcy5ydWxlcyA9IHJ1bGVzRnJvbUpTT04oanNvbiwgZmlsZUNvbnRleHQpO1xuICAgIHRoaXMuYXhpb21zID0gYXhpb21zRnJvbUpTT04oanNvbiwgZmlsZUNvbnRleHQpO1xuICAgIHRoaXMuc2NoZW1hcyA9IHNjaGVtYXNGcm9tSlNPTihqc29uLCBmaWxlQ29udGV4dCk7XG4gICAgdGhpcy50aGVvcmVtcyA9IHRoZW9yZW1zRnJvbUpTT04oanNvbiwgZmlsZUNvbnRleHQpO1xuICAgIHRoaXMuY29uamVjdHVyZXMgPSBjb25qZWN0dXJlc0Zyb21KU09OKGpzb24sIGZpbGVDb250ZXh0KTtcbiAgfVxuXG4gIHRvSlNPTigpIHtcbiAgICBjb25zdCB0eXBlc0pTT04gPSB0eXBlc1RvVHlwZXNKU09OKHRoaXMudHlwZXMpLFxuICAgICAgICAgIHJ1bGVzSlNPTiA9IHJ1bGVzVG9SdWxlc0pTT04odGhpcy5ydWxlcyksXG4gICAgICAgICAgYXhpb21zSlNPTiA9IGF4aW9tc1RvQXhpb21zSlNPTih0aGlzLmF4aW9tcyksXG4gICAgICAgICAgc2NoZW1hc0pTT04gPSBzY2hlbWFzVG9TY2hlbWFzSlNPTih0aGlzLnNjaGVtYXMpLFxuICAgICAgICAgIHRoZW9yZW1zSlNPTiA9IHRoZW9yZW1zVG9UaGVvcmVtc0pTT04odGhpcy50aGVvcmVtcyksXG4gICAgICAgICAgZ2VuZXJhdG9yc0pTT04gPSBnZW5lcmF0b3JzVG9HZW5lcmF0b3JzSlNPTih0aGlzLmdlbmVyYXRvcnMpLFxuICAgICAgICAgIGNvbmplY3R1cmVzSlNPTiA9IGNvbmplY3R1cmVzVG9Db25qZWN0dXJlc0pTT04odGhpcy5jb25qZWN0dXJlcyksXG4gICAgICAgICAgY29tYmluYXRvcnNKU09OID0gY29tYmluYXRvcnNUb0NvbWJpbmF0b3JzSlNPTih0aGlzLmNvbWJpbmF0b3JzKSxcbiAgICAgICAgICB0eXBlUHJlZml4ZXNKU09OID0gdHlwZVByZWZpeGVzVG9UeXBlUHJlZml4ZXNKU09OKHRoaXMudHlwZVByZWZpeGVzKSxcbiAgICAgICAgICBjb25zdHJ1Y3RvcnNKU09OID0gY29uc3RydWN0b3JzVG9Db25zdHJ1Y3RvcnNKU09OKHRoaXMuY29uc3RydWN0b3JzKSxcbiAgICAgICAgICBkZWNsYXJlZFZhcmlhYmxlc0pTT04gPSBkZWNsYXJlZFZhcmlhYmxlc1RvRGVjbGFyZWRWYXJpYWJsZXNKU09OKHRoaXMuZGVjbGFyZWRWYXJpYWJsZXMpLFxuICAgICAgICAgIGRlY2xhcmVkTWV0YXZhcmlhYmxlc0pTT04gPSBkZWNsYXJlZE1ldGF2YXJpYWJsZXNUb0RlY2xhcmVkTWV0YXZhcmlhYmxlc0pTT04odGhpcy5kZWNsYXJlZE1ldGF2YXJpYWJsZXMpLFxuICAgICAgICAgIGZpbGVDb250ZW50ID0gdGhpcy5maWxlQ29udGVudCxcbiAgICAgICAgICBmaWxlUGF0aCA9IHRoaXMuZmlsZVBhdGgsXG4gICAgICAgICAgdHlwZXMgPSB0eXBlc0pTT04sICAvLy9cbiAgICAgICAgICBydWxlcyA9IHJ1bGVzSlNPTiwgIC8vL1xuICAgICAgICAgIGF4aW9tcyA9IGF4aW9tc0pTT04sICAvLy9cbiAgICAgICAgICBzY2hlbWFzID0gc2NoZW1hc0pTT04sICAvLy9cbiAgICAgICAgICB0aGVvcmVtcyA9IHRoZW9yZW1zSlNPTiwgIC8vL1xuICAgICAgICAgIGdlbmVyYXRvcnMgPSBnZW5lcmF0b3JzSlNPTiwgIC8vL1xuICAgICAgICAgIGNvbmplY3R1cmVzID0gY29uamVjdHVyZXNKU09OLCAgLy8vXG4gICAgICAgICAgY29tYmluYXRvcnMgPSBjb21iaW5hdG9yc0pTT04sICAvLy9cbiAgICAgICAgICB0eXBlUHJlZml4ZXMgPSB0eXBlUHJlZml4ZXNKU09OLCAgLy8vXG4gICAgICAgICAgY29uc3RydWN0b3JzID0gY29uc3RydWN0b3JzSlNPTiwgIC8vL1xuICAgICAgICAgIGRlY2xhcmVkVmFyaWFibGVzID0gZGVjbGFyZWRWYXJpYWJsZXNKU09OLCAgLy8vXG4gICAgICAgICAgZGVjbGFyZWRNZXRhdmFyaWFibGVzID0gZGVjbGFyZWRNZXRhdmFyaWFibGVzSlNPTiwgIC8vL1xuICAgICAgICAgIGpzb24gPSB7XG4gICAgICAgICAgICBmaWxlQ29udGVudCxcbiAgICAgICAgICAgIGZpbGVQYXRoLFxuICAgICAgICAgICAgdHlwZXMsXG4gICAgICAgICAgICBydWxlcyxcbiAgICAgICAgICAgIGF4aW9tcyxcbiAgICAgICAgICAgIHNjaGVtYXMsXG4gICAgICAgICAgICB0aGVvcmVtcyxcbiAgICAgICAgICAgIGdlbmVyYXRvcnMsXG4gICAgICAgICAgICBjb25qZWN0dXJlcyxcbiAgICAgICAgICAgIGNvbWJpbmF0b3JzLFxuICAgICAgICAgICAgdHlwZVByZWZpeGVzLFxuICAgICAgICAgICAgY29uc3RydWN0b3JzLFxuICAgICAgICAgICAgZGVjbGFyZWRWYXJpYWJsZXMsXG4gICAgICAgICAgICBkZWNsYXJlZE1ldGF2YXJpYWJsZXNcbiAgICAgICAgICB9O1xuXG4gICAgcmV0dXJuIGpzb247XG4gIH1cblxuICBzdGF0aWMgZnJvbUZpbGUoZmlsZSwgY29udGV4dCkge1xuICAgIGNvbnN0IHJlbGVhc2VDb250ZXh0ID0gY29udGV4dCwgLy8vXG4gICAgICAgICAgY29tYmluZWRDdXN0b21HcmFtbWFyID0gcmVsZWFzZUNvbnRleHQuZ2V0Q29tYmluZWRDdXN0b21HcmFtbWFyKCksXG4gICAgICAgICAgbm9taW5hbExleGVyID0gbm9taW5hbExleGVyRnJvbUNvbWJpbmVkQ3VzdG9tR3JhbW1hcihOb21pbmFsTGV4ZXIsIGNvbWJpbmVkQ3VzdG9tR3JhbW1hciksXG4gICAgICAgICAgbm9taW5hbFBhcnNlciA9IG5vbWluYWxQYXJzZXJGcm9tQ29tYmluZWRDdXN0b21HcmFtbWFyKE5vbWluYWxQYXJzZXIsIGNvbWJpbmVkQ3VzdG9tR3JhbW1hciksXG4gICAgICAgICAgbGV4ZXIgPSBub21pbmFsTGV4ZXIsIC8vL1xuICAgICAgICAgIHBhcnNlciA9IG5vbWluYWxQYXJzZXIsIC8vL1xuICAgICAgICAgIHR5cGVzID0gW10sXG4gICAgICAgICAgcnVsZXMgPSBbXSxcbiAgICAgICAgICBheGlvbXMgPSBbXSxcbiAgICAgICAgICBsZW1tYXMgPSBbXSxcbiAgICAgICAgICBzY2hlbWFzID0gW10sXG4gICAgICAgICAgdGhlb3JlbXMgPSBbXSxcbiAgICAgICAgICBnZW5lcmF0b3JzID0gW10sXG4gICAgICAgICAgY29uamVjdHVyZXMgPSBbXSxcbiAgICAgICAgICBjb21iaW5hdG9ycyA9IFtdLFxuICAgICAgICAgIHR5cGVQcmVmaXhlcyA9IFtdLFxuICAgICAgICAgIGNvbnN0cnVjdG9ycyA9IFtdLFxuICAgICAgICAgIGRlY2xhcmVkVmFyaWFibGVzID0gW10sXG4gICAgICAgICAgZGVjbGFyZWRNZXRhdmFyaWFibGVzID0gW10sXG4gICAgICAgICAgbm9taW5hbEZpbGVDb250ZXh0ID0gRmlsZUNvbnRleHQuZnJvbUZpbGUoTm9taW5hbEZpbGVDb250ZXh0LCBmaWxlLCBsZXhlciwgcGFyc2VyLCB0eXBlcywgcnVsZXMsIGF4aW9tcywgbGVtbWFzLCBzY2hlbWFzLCB0aGVvcmVtcywgZ2VuZXJhdG9ycywgY29uamVjdHVyZXMsIGNvbWJpbmF0b3JzLCB0eXBlUHJlZml4ZXMsIGNvbnN0cnVjdG9ycywgZGVjbGFyZWRWYXJpYWJsZXMsIGRlY2xhcmVkTWV0YXZhcmlhYmxlcywgY29udGV4dCk7XG5cbiAgICByZXR1cm4gbm9taW5hbEZpbGVDb250ZXh0O1xuICB9XG5cbiAgc3RhdGljIGZyb21KU09OKGpzb24sIGNvbnRleHQpIHtcbiAgICBjb25zdCByZWxlYXNlQ29udGV4dCA9IGNvbnRleHQsIC8vL1xuICAgICAgICAgIGNvbWJpbmVkQ3VzdG9tR3JhbW1hciA9IHJlbGVhc2VDb250ZXh0LmdldENvbWJpbmVkQ3VzdG9tR3JhbW1hcigpLFxuICAgICAgICAgIG5vbWluYWxMZXhlciA9IG5vbWluYWxMZXhlckZyb21Db21iaW5lZEN1c3RvbUdyYW1tYXIoTm9taW5hbExleGVyLCBjb21iaW5lZEN1c3RvbUdyYW1tYXIpLFxuICAgICAgICAgIG5vbWluYWxQYXJzZXIgPSBub21pbmFsUGFyc2VyRnJvbUNvbWJpbmVkQ3VzdG9tR3JhbW1hcihOb21pbmFsUGFyc2VyLCBjb21iaW5lZEN1c3RvbUdyYW1tYXIpLFxuICAgICAgICAgIGxleGVyID0gbm9taW5hbExleGVyLCAvLy9cbiAgICAgICAgICBwYXJzZXIgPSBub21pbmFsUGFyc2VyLCAvLy9cbiAgICAgICAgICB0eXBlcyA9IG51bGwsXG4gICAgICAgICAgcnVsZXMgPSBudWxsLFxuICAgICAgICAgIGF4aW9tcyA9IG51bGwsXG4gICAgICAgICAgbGVtbWFzID0gbnVsbCxcbiAgICAgICAgICBzY2hlbWFzID0gbnVsbCxcbiAgICAgICAgICB0aGVvcmVtcyA9IG51bGwsXG4gICAgICAgICAgZ2VuZXJhdG9ycyA9IG51bGwsXG4gICAgICAgICAgY29uamVjdHVyZXMgPSBudWxsLFxuICAgICAgICAgIGNvbWJpbmF0b3JzID0gbnVsbCxcbiAgICAgICAgICB0eXBlUHJlZml4ZXMgPSBudWxsLFxuICAgICAgICAgIGNvbnN0cnVjdG9ycyA9IG51bGwsXG4gICAgICAgICAgZGVjbGFyZWRWYXJpYWJsZXMgPSBudWxsLFxuICAgICAgICAgIGRlY2xhcmVkTWV0YXZhcmlhYmxlcyA9IG51bGwsXG4gICAgICAgICAgbm9taW5hbEZpbGVDb250ZXh0ID0gRmlsZUNvbnRleHQuZnJvbUpTT04oTm9taW5hbEZpbGVDb250ZXh0LCBqc29uLCBsZXhlciwgcGFyc2VyLCB0eXBlcywgcnVsZXMsIGF4aW9tcywgbGVtbWFzLCBzY2hlbWFzLCB0aGVvcmVtcywgZ2VuZXJhdG9ycywgY29uamVjdHVyZXMsIGNvbWJpbmF0b3JzLCB0eXBlUHJlZml4ZXMsIGNvbnN0cnVjdG9ycywgZGVjbGFyZWRWYXJpYWJsZXMsIGRlY2xhcmVkTWV0YXZhcmlhYmxlcywgY29udGV4dCk7XG5cbiAgICByZXR1cm4gbm9taW5hbEZpbGVDb250ZXh0O1xuICB9XG59XG4iXSwibmFtZXMiOlsiTm9taW5hbEZpbGVDb250ZXh0IiwicHVzaCIsImFycmF5VXRpbGl0aWVzIiwibm9taW5hbExleGVyRnJvbUNvbWJpbmVkQ3VzdG9tR3JhbW1hciIsIm5vbWluYWxQYXJzZXJGcm9tQ29tYmluZWRDdXN0b21HcmFtbWFyIiwibm9taW5hbFV0aWxpdGllcyIsIkZpbGVDb250ZXh0IiwiY29udGV4dCIsImZpbGVDb250ZW50IiwiZmlsZVBhdGgiLCJ0b2tlbnMiLCJub2RlIiwianNvbiIsImxleGVyIiwicGFyc2VyIiwidHlwZXMiLCJydWxlcyIsImF4aW9tcyIsImxlbW1hcyIsInNjaGVtYXMiLCJ0aGVvcmVtcyIsImdlbmVyYXRvcnMiLCJjb25qZWN0dXJlcyIsImNvbWJpbmF0b3JzIiwidHlwZVByZWZpeGVzIiwiY29uc3RydWN0b3JzIiwiZGVjbGFyZWRWYXJpYWJsZXMiLCJkZWNsYXJlZE1ldGF2YXJpYWJsZXMiLCJnZXRMZXhlciIsImdldFBhcnNlciIsImdldEVxdWl2YWxlbmNlcyIsImVxdWl2YWxlbmNlcyIsImdldFN1YnByb29mT3JQcm9vZkFzc2VydGlvbnMiLCJzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zIiwiZ2V0TGFiZWxzIiwiaW5jbHVkZVJlbGVhc2UiLCJsYWJlbHMiLCJyZWxlYXNlQ29udGV4dExhYmVscyIsImZvckVhY2giLCJydWxlIiwicnVsZUxhYmVscyIsImF4aW9tIiwiYXhpb21MYWJlbHMiLCJsZW1tYSIsImxlbW1hTGFiZWxzIiwidGhlb3JlbSIsInRoZW9yZW1MYWJlbHMiLCJjb25qZWN0dXJlIiwiY29uamVjdHVyZUxhYmVscyIsInNjaGVtYSIsInNjaGVtYUxhYmVsIiwiZ2V0TGFiZWwiLCJnZXRUeXBlcyIsImdldFJ1bGVzIiwiZ2V0QXhpb21zIiwiZ2V0TGVtbWFzIiwiZ2V0U2NoZW1hcyIsImdldFRoZW9yZW1zIiwiZ2V0R2VuZXJhdG9ycyIsImdldENvbmplY3R1cmVzIiwiZ2V0Q29tYmluYXRvcnMiLCJnZXRUeXBlUHJlZml4ZXMiLCJnZXRDb25zdHJ1Y3RvcnMiLCJnZXRQcm9jZWR1cmVzIiwicHJvY2VkdXJlcyIsImdldFRvcExldmVsQXNzZXJ0aW9ucyIsInRvcExldmVsQXNzZXJ0aW9ucyIsImdldERlY2xhcmVkVmFyaWFibGVzIiwiZ2V0RGVjbGFyZWRNZXRhdmFyaWFibGVzIiwiZ2V0VGVybXMiLCJ0ZXJtcyIsImdldEdvYWxzIiwiZ29hbHMiLCJnZXRGcmFtZXMiLCJmcmFtZXMiLCJnZXRQcm9wZXJ0aWVzIiwicHJvcGVydGllcyIsImdldEVxdWFsaXRpZXMiLCJlcXVhbGl0aWVzIiwiZ2V0SnVkZ2VtZW50cyIsImp1ZGdlbWVudHMiLCJnZXRBc3NlcnRpb25zIiwiYXNzZXJ0aW9ucyIsImdldFN0YXRlbWVudHMiLCJzdGF0ZW1lbnRzIiwiZ2V0U2lnbmF0dXJlcyIsInNpZ25hdHVyZXMiLCJnZXRSZWZlcmVuY2VzIiwicmVmZXJlbmNlcyIsImdldEFzc3VtcHRpb25zIiwiYXNzdW1wdGlvbnMiLCJnZXRNZXRhdmFyaWFibGVzIiwibWV0YXZhcmlhYmxlcyIsImdldFN1YnN0aXR1dGlvbnMiLCJzdWJzdGl0dXRpb25zIiwiZ2V0UHJvcGVydHlSZWxhdGlvbnMiLCJwcm9wZXJ0eVJlbGF0aW9ucyIsImdldERlcml2ZWRTdWJzdGl0dXRpb25zIiwiZGVyaXZlZFN1YnN0aXR1dGlvbnMiLCJhZGRUeXBlIiwidHlwZSIsImdldEZpbGVQYXRoIiwidHlwZVN0cmluZyIsImdldFN0cmluZyIsInRyYWNlIiwiYWRkUnVsZSIsInJ1bGVTdHJpbmciLCJhZGRBeGlvbSIsImF4aW9tU3RyaW5nIiwiYWRkTGVtbWEiLCJsZW1tYVN0cmluZyIsImFkZFNjaGVtYSIsInNjaGVtYVN0cmluZyIsImFkZFRoZW9yZW0iLCJ0aGVvcmVtU3RyaW5nIiwiYWRkR2VuZXJhdG9yIiwiZ2VuZXJhdG9yIiwiZ2VuZXJhdG9yU3RyaW5nIiwiYWRkQ29uamVjdHVyZSIsIm9jbmplY3R1cmVTdHJpbmciLCJhZGRDb21iaW5hdG9yIiwiY29tYmluYXRvciIsImNvbWJpbmF0b3JTdHJpbmciLCJhZGRUeXBlUHJlZml4IiwidHlwZVByZWZpeCIsInR5cGVQcmVmaXhTdHJpbmciLCJhZGRDb25zdHJ1Y3RvciIsImNvbnN0cnVjdG9yIiwiY29uc3RydWN0b3JTdHJpbmciLCJhZGREZWNsYXJlZFZhcmlhYmxlIiwiZGVjbGFyZWRWYXJpYWJsZSIsImRlY2xhcmVkVmFyaWFibGVTdHJpbmciLCJhZGREZWNsYXJlZE1ldGF2YXJpYWJsZSIsImRlY2xhcmVkTWV0YXZhcmlhYmxlIiwiZGVjbGFyZWRNZXRhdmFyaWFibGVTdHJpbmciLCJmaW5kTWV0YXZhcmlhYmxlIiwibWV0YXZhcmlhYmxlIiwiZmluZCIsIm1ldGF2YXJpYWJsZVVuaWZpZXMiLCJ1bmlmeU1ldGF2YXJpYWJsZSIsImZpbmRSdWxlQnlSZWZlcmVuY2UiLCJyZWZlcmVuY2UiLCJtZXRhdmFyaWFibGVOb2RlIiwiZ2V0TWV0YXZhcmlhYmxlTm9kZSIsIm1ldGF2YXJpYWJsZU5vZGVNYXRjaGVzIiwibWF0Y2hNZXRhdmFyaWFibGVOb2RlIiwiZmluZEF4aW9tQnlSZWZlcmVuY2UiLCJmaW5kTGVtbWFCeVJlZmVyZW5jZSIsImZpbmRUaGVvcmVtQnlSZWZlcmVuY2UiLCJmaW5kQ29uamVjdHVyZUJ5UmVmZXJlbmNlIiwiZmluZFRvcExldmVsQXNzZXJ0aW9uQnlSZWZlcmVuY2UiLCJ0b3BMRXZlbEFzc2VydGlvbnMiLCJ0b3BMZXZlbEFzc2VydGlvbiIsImZpbmRUeXBlQnlUeXBlTmFtZSIsInR5cGVOYW1lIiwiZmluZFR5cGUiLCJ0eXBlQ29tcGFyZXNUb1R5cGVOYW1lIiwiY29tcGFyZVR5cGVOYW1lIiwiZmluZFR5cGVCeU5vbWluYWxUeXBlTmFtZSIsIm5vbWluYWxUeXBlTmFtZSIsInR5cGVDb21wYXJlc1RvTm9taW5hbFR5cGVOYW1lIiwiY29tcGFyZU5vbWluYWxUeXBlTmFtZSIsImZpbmRUeXBlQnlQcmVmaXhlZFR5cGVOYW1lIiwicHJlZml4ZWRUeXBlTmFtZSIsInR5cGVDb21wYXJlc1RvUHJlZml4ZWRUeXBlTmFtZSIsImNvbXBhcmVQcmVmaXhlZFR5cGVOYW1lIiwiZmluZFR5cGVQcmVmaXhCeVR5cGVQcmVmaXhOYW1lIiwidHlwZVByZWZpeE5hbWUiLCJ0eXBlUHJlZml4Q29tcGFyZXNUb1R5cGVQcmVmaXhOYW1lIiwiY29tcGFyZVR5cGVQcmVmaXhOYW1lIiwiZmluZERlY2xhcmVkVmFyaWFibGVCeVZhcmlhYmxlSWRlbnRpZmllciIsIlZhcmlhYmxlSWRlbnRpdGlmZXIiLCJkZWNsYXJlZFZhcmlhYmxlQ29tcGFyZXNUb1ZhcmlhYmxlSWRlbnRpdGlmZXIiLCJjb21wYXJlVmFyaWFibGVJZGVudGlmaWVyIiwiZmluZERlY2xhcmVkTWV0YXZhcmlhYmxlQnlNZXRhdmFyaWFibGVOYW1lIiwibWV0YXZhcmlhYmxlTmFtZSIsImRlY2xhcmVkTWV0YXZhcmlhYmxlQ29tcGFyZXNUb01ldGF2YXJpYWJsZU5hbWUiLCJjb21wYXJlTWV0YXZhcmlhYmxlTmFtZSIsImZpbmRNZXRhdmFyaWFibGVCeU1ldGF2YXJpYWJsZU5vZGUiLCJmaW5kU3Vic3RpdHV0aW9uQnlTdWJzdGl0dXRpb25Ob2RlIiwic3Vic3RpdHV0aW9uTm9kZSIsInN1YnN0aXR1dGlvbiIsImZpbmRDb25zdHJhaW50QnlDb25zdHJhaW50Tm9kZSIsImNvbnN0cmFpbnROb2RlIiwiY29uc3RyYWludCIsImZpbmRQcm9jZWR1cmVCeVByb2NlZHVyZU5hbWUiLCJwcm9jZWR1cmVOYW1lIiwicHJvY2VkdXJlIiwicHJvY2VkdXJlQ29tcGFyZXNUb1Byb2NlZHVyZU5hbWUiLCJjb21wYXJlUHJvY2VkdXJlTmFtZSIsImZpbmRNZXRhVHlwZUJ5TWV0YVR5cGVOYW1lIiwibWV0YVR5cGVOYW1lIiwiaXNMYWJlbFByZXNlbnRCeUxhYmVsTm9kZSIsImxhYmVsTm9kZSIsImxhYmVsUHJlc2VudCIsInNvbWUiLCJsYWJlbCIsImxhYmVsTm9kZU1hdGNoZXMiLCJtYXRjaExhYmVsTm9kZSIsImlzVHlwZVByZXNlbnRCeVR5cGVOYW1lIiwidHlwZVByZXNlbnQiLCJpc1R5cGVQcmVzZW50QnlOb21pbmFsVHlwZU5hbWUiLCJpc1R5cGVQcmVzZW50QnlQcmVmaXhlZFR5cGVOYW1lIiwiaXNUeXBlUHJlZml4UHJlc2VudEJ5VHlwZVByZWZpeE5hbWUiLCJ0eXBlUHJlZml4UHJlc2VudCIsImlzRGVjbGFyZWRWYXJpYWJsZVByZXNlbnRCeVZhcmlhYmxlSWRlbnRpZmllciIsInZhcmlhYmxlSWRlbnRpZmllciIsImRlY2xhcmVkVmFyaWFibGVQcmVzZW50IiwiaXNEZWNsYXJlZE1ldGF2YXJpYWJsZVByZXNlbnRCeU1ldGF2YXJpYWJsZU5hbWUiLCJkZWNsYXJlZE1ldGF2YXJpYWJsZVByZXNlbnQiLCJpc1Byb2NlZHVyZVByZXNlbnRCeVByb2NlZHVyZU5hbWUiLCJwcm9jZWR1cmVQcmVzZW50IiwiaXNNZXRhTGV2ZWwiLCJtZXRhTEV2ZWwiLCJjbGVhciIsImNvbXBsZXRlIiwidmVyaWZ5RmlsZSIsImdldE5vZGUiLCJmaWxlTm9kZSIsImZpbGVWZXJpZmllcyIsImluaXRpYWxpc2UiLCJnZXRKU09OIiwiZmlsZUNvbnRleHQiLCJ0eXBlc0Zyb21KU09OIiwiZGVjbGFyZWRNZXRhdmFyaWFibGVzRnJvbUpTT04iLCJkZWNsYXJlZFZhcmlhYmxlc0Zyb21KU09OIiwidHlwZVByZWZpeGVzRnJvbUpTT04iLCJnZW5lcmF0b3JzRnJvbUpTT04iLCJjb21iaW5hdG9yc0Zyb21KU09OIiwiY29uc3RydWN0b3JzRnJvbUpTT04iLCJydWxlc0Zyb21KU09OIiwiYXhpb21zRnJvbUpTT04iLCJzY2hlbWFzRnJvbUpTT04iLCJ0aGVvcmVtc0Zyb21KU09OIiwiY29uamVjdHVyZXNGcm9tSlNPTiIsInRvSlNPTiIsInR5cGVzSlNPTiIsInR5cGVzVG9UeXBlc0pTT04iLCJydWxlc0pTT04iLCJydWxlc1RvUnVsZXNKU09OIiwiYXhpb21zSlNPTiIsImF4aW9tc1RvQXhpb21zSlNPTiIsInNjaGVtYXNKU09OIiwic2NoZW1hc1RvU2NoZW1hc0pTT04iLCJ0aGVvcmVtc0pTT04iLCJ0aGVvcmVtc1RvVGhlb3JlbXNKU09OIiwiZ2VuZXJhdG9yc0pTT04iLCJnZW5lcmF0b3JzVG9HZW5lcmF0b3JzSlNPTiIsImNvbmplY3R1cmVzSlNPTiIsImNvbmplY3R1cmVzVG9Db25qZWN0dXJlc0pTT04iLCJjb21iaW5hdG9yc0pTT04iLCJjb21iaW5hdG9yc1RvQ29tYmluYXRvcnNKU09OIiwidHlwZVByZWZpeGVzSlNPTiIsInR5cGVQcmVmaXhlc1RvVHlwZVByZWZpeGVzSlNPTiIsImNvbnN0cnVjdG9yc0pTT04iLCJjb25zdHJ1Y3RvcnNUb0NvbnN0cnVjdG9yc0pTT04iLCJkZWNsYXJlZFZhcmlhYmxlc0pTT04iLCJkZWNsYXJlZFZhcmlhYmxlc1RvRGVjbGFyZWRWYXJpYWJsZXNKU09OIiwiZGVjbGFyZWRNZXRhdmFyaWFibGVzSlNPTiIsImRlY2xhcmVkTWV0YXZhcmlhYmxlc1RvRGVjbGFyZWRNZXRhdmFyaWFibGVzSlNPTiIsImZyb21GaWxlIiwiZmlsZSIsInJlbGVhc2VDb250ZXh0IiwiY29tYmluZWRDdXN0b21HcmFtbWFyIiwiZ2V0Q29tYmluZWRDdXN0b21HcmFtbWFyIiwibm9taW5hbExleGVyIiwiTm9taW5hbExleGVyIiwibm9taW5hbFBhcnNlciIsIk5vbWluYWxQYXJzZXIiLCJub21pbmFsRmlsZUNvbnRleHQiLCJmcm9tSlNPTiJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7K0JBdUNBOzs7ZUFBcUJBOzs7Z0NBckN5QjsyQkFDZjs4REFFTjsrREFDQzt3QkFFQztzQkFDaUI7MkJBQ0Q7c0JBd0JzQjs7Ozs7O0FBRWpFLE1BQU0sRUFBRUMsSUFBSSxFQUFFLEdBQUdDLHlCQUFjLEVBQ3pCLEVBQUVDLHFDQUFxQyxFQUFFQyxzQ0FBc0MsRUFBRSxHQUFHQyxnQ0FBZ0I7QUFFM0YsTUFBTUwsMkJBQTJCTSwyQkFBVztJQUN6RCxZQUFZQyxPQUFPLEVBQUVDLFdBQVcsRUFBRUMsUUFBUSxFQUFFQyxNQUFNLEVBQUVDLElBQUksRUFBRUMsSUFBSSxFQUFFQyxLQUFLLEVBQUVDLE1BQU0sRUFBRUMsS0FBSyxFQUFFQyxLQUFLLEVBQUVDLE1BQU0sRUFBRUMsTUFBTSxFQUFFQyxPQUFPLEVBQUVDLFFBQVEsRUFBRUMsVUFBVSxFQUFFQyxXQUFXLEVBQUVDLFdBQVcsRUFBRUMsWUFBWSxFQUFFQyxZQUFZLEVBQUVDLGlCQUFpQixFQUFFQyxxQkFBcUIsQ0FBRTtRQUMxTyxLQUFLLENBQUNwQixTQUFTQyxhQUFhQyxVQUFVQyxRQUFRQyxNQUFNQztRQUVwRCxJQUFJLENBQUNDLEtBQUssR0FBR0E7UUFDYixJQUFJLENBQUNDLE1BQU0sR0FBR0E7UUFDZCxJQUFJLENBQUNQLE9BQU8sR0FBR0E7UUFDZixJQUFJLENBQUNFLFFBQVEs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
525
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb250ZXh0L2ZpbGUvbm9taW5hbC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgRmlsZUNvbnRleHQsIG5vbWluYWxVdGlsaXRpZXMgfSBmcm9tIFwib2NjYW0tbGFuZ3VhZ2VzXCI7XG5pbXBvcnQgeyBhcnJheVV0aWxpdGllcyB9IGZyb20gXCJuZWNlc3NhcnlcIjtcblxuaW1wb3J0IE5vbWluYWxMZXhlciBmcm9tIFwiLi4vLi4vbm9taW5hbC9sZXhlclwiO1xuaW1wb3J0IE5vbWluYWxQYXJzZXIgZnJvbSBcIi4uLy4uL25vbWluYWwvcGFyc2VyXCI7XG5cbmltcG9ydCB7IHZlcmlmeUZpbGUgfSBmcm9tIFwiLi4vLi4vcHJvY2Vzcy92ZXJpZnlcIjtcbmltcG9ydCB7YmFzZVR5cGVGcm9tTm90aGluZywgZmluZFR5cGV9IGZyb20gXCIuLi8uLi91dGlsaXRpZXMvdHlwZVwiO1xuaW1wb3J0IHsgZmluZE1ldGFUeXBlQnlNZXRhVHlwZU5hbWUgfSBmcm9tIFwiLi4vLi4vbWV0YVR5cGVzXCI7XG5pbXBvcnQgeyB0eXBlc0Zyb21KU09OLFxuICAgICAgICAgcnVsZXNGcm9tSlNPTixcbiAgICAgICAgIGF4aW9tc0Zyb21KU09OLFxuICAgICAgICAgc2NoZW1hc0Zyb21KU09OLFxuICAgICAgICAgdHlwZXNUb1R5cGVzSlNPTixcbiAgICAgICAgIHRoZW9yZW1zRnJvbUpTT04sXG4gICAgICAgICBydWxlc1RvUnVsZXNKU09OLFxuICAgICAgICAgYXhpb21zVG9BeGlvbXNKU09OLFxuICAgICAgICAgZ2VuZXJhdG9yc0Zyb21KU09OLFxuICAgICAgICAgY29uamVjdHVyZXNGcm9tSlNPTixcbiAgICAgICAgIGNvbWJpbmF0b3JzRnJvbUpTT04sXG4gICAgICAgICB0eXBlUHJlZml4ZXNGcm9tSlNPTixcbiAgICAgICAgIGNvbnN0cnVjdG9yc0Zyb21KU09OLFxuICAgICAgICAgc2NoZW1hc1RvU2NoZW1hc0pTT04sXG4gICAgICAgICB0aGVvcmVtc1RvVGhlb3JlbXNKU09OLFxuICAgICAgICAgZGVjbGFyZWRWYXJpYWJsZXNGcm9tSlNPTixcbiAgICAgICAgIGdlbmVyYXRvcnNUb0dlbmVyYXRvcnNKU09OLFxuICAgICAgICAgY29uamVjdHVyZXNUb0NvbmplY3R1cmVzSlNPTixcbiAgICAgICAgIGNvbWJpbmF0b3JzVG9Db21iaW5hdG9yc0pTT04sXG4gICAgICAgICBkZWNsYXJlZE1ldGF2YXJpYWJsZXNGcm9tSlNPTixcbiAgICAgICAgIHR5cGVQcmVmaXhlc1RvVHlwZVByZWZpeGVzSlNPTixcbiAgICAgICAgIGNvbnN0cnVjdG9yc1RvQ29uc3RydWN0b3JzSlNPTixcbiAgICAgICAgIGRlY2xhcmVkVmFyaWFibGVzVG9EZWNsYXJlZFZhcmlhYmxlc0pTT04sXG4gICAgICAgICBkZWNsYXJlZE1ldGF2YXJpYWJsZXNUb0RlY2xhcmVkTWV0YXZhcmlhYmxlc0pTT04gfSBmcm9tIFwiLi4vLi4vdXRpbGl0aWVzL2pzb25cIjtcblxuY29uc3QgeyBwdXNoIH0gPSBhcnJheVV0aWxpdGllcyxcbiAgICAgIHsgbm9taW5hbExleGVyRnJvbUNvbWJpbmVkQ3VzdG9tR3JhbW1hciwgbm9taW5hbFBhcnNlckZyb21Db21iaW5lZEN1c3RvbUdyYW1tYXIgfSA9IG5vbWluYWxVdGlsaXRpZXM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE5vbWluYWxGaWxlQ29udGV4dCBleHRlbmRzIEZpbGVDb250ZXh0IHtcbiAgY29uc3RydWN0b3IoY29udGV4dCwgZmlsZUNvbnRlbnQsIGZpbGVQYXRoLCB0b2tlbnMsIG5vZGUsIGpzb24sIGxleGVyLCBwYXJzZXIsIHR5cGVzLCBydWxlcywgYXhpb21zLCBsZW1tYXMsIHNjaGVtYXMsIHRoZW9yZW1zLCBnZW5lcmF0b3JzLCBjb25qZWN0dXJlcywgY29tYmluYXRvcnMsIHR5cGVQcmVmaXhlcywgY29uc3RydWN0b3JzLCBkZWNsYXJlZFZhcmlhYmxlcywgZGVjbGFyZWRNZXRhdmFyaWFibGVzKSB7XG4gICAgc3VwZXIoY29udGV4dCwgZmlsZUNvbnRlbnQsIGZpbGVQYXRoLCB0b2tlbnMsIG5vZGUsIGpzb24pO1xuXG4gICAgdGhpcy5sZXhlciA9IGxleGVyO1xuICAgIHRoaXMucGFyc2VyID0gcGFyc2VyO1xuICAgIHRoaXMuY29udGV4dCA9IGNvbnRleHQ7XG4gICAgdGhpcy5maWxlUGF0aCA9IGZpbGVQYXRoO1xuICAgIHRoaXMudG9rZW5zID0gdG9rZW5zO1xuICAgIHRoaXMubm9kZSA9IG5vZGU7XG4gICAgdGhpcy50eXBlcyA9IHR5cGVzO1xuICAgIHRoaXMucnVsZXMgPSBydWxlcztcbiAgICB0aGlzLmF4aW9tcyA9IGF4aW9tcztcbiAgICB0aGlzLmxlbW1hcyA9IGxlbW1hcztcbiAgICB0aGlzLnNjaGVtYXMgPSBzY2hlbWFzO1xuICAgIHRoaXMudGhlb3JlbXMgPSB0aGVvcmVtcztcbiAgICB0aGlzLmdlbmVyYXRvcnMgPSBnZW5lcmF0b3JzO1xuICAgIHRoaXMuY29uamVjdHVyZXMgPSBjb25qZWN0dXJlcztcbiAgICB0aGlzLmNvbWJpbmF0b3JzID0gY29tYmluYXRvcnM7XG4gICAgdGhpcy50eXBlUHJlZml4ZXMgPSB0eXBlUHJlZml4ZXM7XG4gICAgdGhpcy5jb25zdHJ1Y3RvcnMgPSBjb25zdHJ1Y3RvcnM7XG4gICAgdGhpcy5kZWNsYXJlZFZhcmlhYmxlcyA9IGRlY2xhcmVkVmFyaWFibGVzO1xuICAgIHRoaXMuZGVjbGFyZWRNZXRhdmFyaWFibGVzID0gZGVjbGFyZWRNZXRhdmFyaWFibGVzO1xuICB9XG5cbiAgZ2V0TGV4ZXIoKSB7XG4gICAgcmV0dXJuIHRoaXMubGV4ZXI7XG4gIH1cblxuICBnZXRQYXJzZXIoKSB7XG4gICAgcmV0dXJuIHRoaXMucGFyc2VyO1xuICB9XG5cbiAgZ2V0RXF1aXZhbGVuY2VzKCkge1xuICAgIGNvbnN0IGVxdWl2YWxlbmNlcyA9IFtdO1xuXG4gICAgcmV0dXJuIGVxdWl2YWxlbmNlcztcbiAgfVxuXG4gIGdldFN1YnByb29mT3JQcm9vZkFzc2VydGlvbnMoKSB7XG4gICAgY29uc3Qgc3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucyA9IFtdO1xuXG4gICAgcmV0dXJuIHN1YnByb29mT3JQcm9vZkFzc2VydGlvbnM7XG4gIH1cblxuICBnZXRMYWJlbHMoaW5jbHVkZVJlbGVhc2UgPSB0cnVlKSB7XG4gICAgY29uc3QgbGFiZWxzID0gW107XG5cbiAgICBpZiAoaW5jbHVkZVJlbGVhc2UpIHtcbiAgICAgIGNvbnN0IHJlbGVhc2VDb250ZXh0TGFiZWxzID0gdGhpcy5jb250ZXh0LmdldExhYmVscygpO1xuXG4gICAgICBwdXNoKGxhYmVscywgcmVsZWFzZUNvbnRleHRMYWJlbHMpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnJ1bGVzLmZvckVhY2goKHJ1bGUpID0+IHtcbiAgICAgICAgY29uc3QgcnVsZUxhYmVscyA9IHJ1bGUuZ2V0TGFiZWxzKCk7XG5cbiAgICAgICAgcHVzaChsYWJlbHMsIHJ1bGVMYWJlbHMpO1xuICAgICAgfSk7XG5cbiAgICAgIHRoaXMuYXhpb21zLmZvckVhY2goKGF4aW9tKSA9PiB7XG4gICAgICAgIGNvbnN0IGF4aW9tTGFiZWxzID0gYXhpb20uZ2V0TGFiZWxzKCk7XG5cbiAgICAgICAgcHVzaChsYWJlbHMsIGF4aW9tTGFiZWxzKTtcbiAgICAgIH0pO1xuXG4gICAgICB0aGlzLmxlbW1hcy5mb3JFYWNoKChsZW1tYSkgPT4ge1xuICAgICAgICBjb25zdCBsZW1tYUxhYmVscyA9IGxlbW1hLmdldExhYmVscygpO1xuXG4gICAgICAgIHB1c2gobGFiZWxzLCBsZW1tYUxhYmVscyk7XG4gICAgICB9KTtcblxuICAgICAgdGhpcy50aGVvcmVtcy5mb3JFYWNoKCh0aGVvcmVtKSA9PiB7XG4gICAgICAgIGNvbnN0IHRoZW9yZW1MYWJlbHMgPSB0aGVvcmVtLmdldExhYmVscygpO1xuXG4gICAgICAgIHB1c2gobGFiZWxzLCB0aGVvcmVtTGFiZWxzKTtcbiAgICAgIH0pO1xuXG4gICAgICB0aGlzLmNvbmplY3R1cmVzLmZvckVhY2goKGNvbmplY3R1cmUpID0+IHtcbiAgICAgICAgY29uc3QgY29uamVjdHVyZUxhYmVscyA9IGNvbmplY3R1cmUuZ2V0TGFiZWxzKCk7XG5cbiAgICAgICAgcHVzaChsYWJlbHMsIGNvbmplY3R1cmVMYWJlbHMpO1xuICAgICAgfSk7XG5cbiAgICAgIHRoaXMuc2NoZW1hcy5mb3JFYWNoKChzY2hlbWEpID0+IHtcbiAgICAgICAgY29uc3Qgc2NoZW1hTGFiZWwgPSBzY2hlbWEuZ2V0TGFiZWwoKTtcblxuICAgICAgICBsYWJlbHMucHVzaChzY2hlbWFMYWJlbCk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gbGFiZWxzO1xuICB9XG5cbiAgZ2V0VHlwZXMoaW5jbHVkZVJlbGVhc2UgPSB0cnVlKSB7XG4gICAgY29uc3QgdHlwZXMgPSBpbmNsdWRlUmVsZWFzZSA/XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dC5nZXRUeXBlcygpIDpcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLnR5cGVzO1xuXG4gICAgcmV0dXJuIHR5cGVzO1xuICB9XG5cbiAgZ2V0UnVsZXMoaW5jbHVkZVJlbGVhc2UgPSB0cnVlKSB7XG4gICAgY29uc3QgcnVsZXMgPSBpbmNsdWRlUmVsZWFzZSA/XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dC5nZXRSdWxlcygpIDpcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJ1bGVzO1xuXG4gICAgcmV0dXJuIHJ1bGVzO1xuICB9XG5cbiAgZ2V0QXhpb21zKGluY2x1ZGVSZWxlYXNlID0gdHJ1ZSkge1xuICAgIGNvbnN0IGF4aW9tcyA9IGluY2x1ZGVSZWxlYXNlID9cbiAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dC5nZXRBeGlvbXMoKSA6XG4gICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYXhpb21zO1xuXG4gICAgcmV0dXJuIGF4aW9tcztcbiAgfVxuXG4gIGdldExlbW1hcyhpbmNsdWRlUmVsZWFzZSA9IHRydWUpIHtcbiAgICBjb25zdCBsZW1tYXMgPSBpbmNsdWRlUmVsZWFzZSA/XG4gICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRleHQuZ2V0TGVtbWFzKCkgOlxuICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxlbW1hcztcblxuICAgIHJldHVybiBsZW1tYXM7XG4gIH1cblxuICBnZXRTY2hlbWFzKGluY2x1ZGVSZWxlYXNlID0gdHJ1ZSkge1xuICAgIGNvbnN0IHNjaGVtYXMgPSBpbmNsdWRlUmVsZWFzZSA/XG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb250ZXh0LmdldFNjaGVtYXMoKSA6XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNjaGVtYXM7XG5cbiAgICByZXR1cm4gc2NoZW1hcztcbiAgfVxuXG4gIGdldFRoZW9yZW1zKGluY2x1ZGVSZWxlYXNlID0gdHJ1ZSkge1xuICAgIGNvbnN0IHRoZW9yZW1zID0gaW5jbHVkZVJlbGVhc2UgP1xuICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRleHQuZ2V0VGhlb3JlbXMoKSA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50aGVvcmVtcztcblxuICAgIHJldHVybiB0aGVvcmVtcztcbiAgfVxuXG4gIGdldEdlbmVyYXRvcnMoaW5jbHVkZVJlbGVhc2UgPSB0cnVlKSB7XG4gICAgY29uc3QgZ2VuZXJhdG9ycyA9IGluY2x1ZGVSZWxlYXNlID9cbiAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRleHQuZ2V0R2VuZXJhdG9ycygpIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZ2VuZXJhdG9ycztcblxuICAgIHJldHVybiBnZW5lcmF0b3JzO1xuICB9XG5cbiAgZ2V0Q29uamVjdHVyZXMoaW5jbHVkZVJlbGVhc2UgPSB0cnVlKSB7XG4gICAgY29uc3QgY29uamVjdHVyZXMgPSBpbmNsdWRlUmVsZWFzZSA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dC5nZXRDb25qZWN0dXJlcygpIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbmplY3R1cmVzO1xuXG4gICAgcmV0dXJuIGNvbmplY3R1cmVzO1xuICB9XG5cbiAgZ2V0Q29tYmluYXRvcnMoaW5jbHVkZVJlbGVhc2UgPSB0cnVlKSB7XG4gICAgY29uc3QgY29tYmluYXRvcnMgPSBpbmNsdWRlUmVsZWFzZSA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dC5nZXRDb21iaW5hdG9ycygpIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbWJpbmF0b3JzO1xuXG4gICAgcmV0dXJuIGNvbWJpbmF0b3JzO1xuICB9XG5cbiAgZ2V0VHlwZVByZWZpeGVzKGluY2x1ZGVSZWxlYXNlID0gdHJ1ZSkge1xuICAgIGNvbnN0IHR5cGVQcmVmaXhlcyA9IGluY2x1ZGVSZWxlYXNlID9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dC5nZXRUeXBlUHJlZml4ZXMoKSA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudHlwZVByZWZpeGVzO1xuXG4gICAgcmV0dXJuIHR5cGVQcmVmaXhlcztcbiAgfVxuXG4gIGdldENvbnN0cnVjdG9ycyhpbmNsdWRlUmVsZWFzZSA9IHRydWUpIHtcbiAgICBjb25zdCBjb25zdHJ1Y3RvcnMgPSBpbmNsdWRlUmVsZWFzZSA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRleHQuZ2V0Q29uc3RydWN0b3JzKCkgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnN0cnVjdG9ycztcblxuICAgIHJldHVybiBjb25zdHJ1Y3RvcnM7XG4gIH1cblxuICBnZXRQcm9jZWR1cmVzKGluY2x1ZGVSZWxlYXNlID0gdHJ1ZSkge1xuICAgIGNvbnN0IHByb2NlZHVyZXMgPSBpbmNsdWRlUmVsZWFzZSA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dC5nZXRQcm9jZWR1cmVzKCkgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bGw7ICAvLy9cblxuICAgIHJldHVybiBwcm9jZWR1cmVzO1xuICB9XG5cbiAgZ2V0VG9wTGV2ZWxBc3NlcnRpb25zKGluY2x1ZGVSZWxlYXNlID0gdHJ1ZSkge1xuICAgIGNvbnN0IGxlbW1hcyA9IHRoaXMuZ2V0TGVtbWFzKGluY2x1ZGVSZWxlYXNlKSxcbiAgICAgICAgICBheGlvbXMgPSB0aGlzLmdldEF4aW9tcyhpbmNsdWRlUmVsZWFzZSksXG4gICAgICAgICAgdGhlb3JlbXMgPSB0aGlzLmdldFRoZW9yZW1zKGluY2x1ZGVSZWxlYXNlKSxcbiAgICAgICAgICBjb25qZWN0dXJlcyA9IHRoaXMuZ2V0Q29uamVjdHVyZXMoaW5jbHVkZVJlbGVhc2UpLFxuICAgICAgICAgIHRvcExldmVsQXNzZXJ0aW9ucyA9IFtcbiAgICAgICAgICAgIC4uLmxlbW1hcyxcbiAgICAgICAgICAgIC4uLmF4aW9tcyxcbiAgICAgICAgICAgIC4uLnRoZW9yZW1zLFxuICAgICAgICAgICAgLi4uY29uamVjdHVyZXNcbiAgICAgICAgICBdO1xuXG4gICAgcmV0dXJuIHRvcExldmVsQXNzZXJ0aW9ucztcbiAgfVxuXG4gIGdldERlY2xhcmVkVmFyaWFibGVzKCkge1xuICAgIHJldHVybiB0aGlzLmRlY2xhcmVkVmFyaWFibGVzO1xuICB9XG5cbiAgZ2V0RGVjbGFyZWRNZXRhdmFyaWFibGVzKCkge1xuICAgIHJldHVybiB0aGlzLmRlY2xhcmVkTWV0YXZhcmlhYmxlcztcbiAgfVxuXG4gIGdldFRlcm1zKHRlcm1zID0gW10pIHtcbiAgICByZXR1cm4gdGVybXM7XG4gIH1cblxuICBnZXRHb2Fscyhnb2FscyA9IFtdKSB7XG4gICAgcmV0dXJuIGdvYWxzO1xuICB9XG5cbiAgZ2V0RnJhbWVzKGZyYW1lcyA9IFtdKSB7XG4gICAgcmV0dXJuIGZyYW1lcztcbiAgfVxuXG4gIGdldEVxdWFsaXRpZXMoZXF1YWxpdGllcyA9IFtdKSB7XG4gICAgcmV0dXJuIGVxdWFsaXRpZXM7XG4gIH1cblxuICBnZXRKdWRnZW1lbnRzKGp1ZGdlbWVudHMgPSBbXSkge1xuICAgIHJldHVybiBqdWRnZW1lbnRzO1xuICB9XG5cbiAgZ2V0QXNzZXJ0aW9ucyhhc3NlcnRpb25zID0gW10pIHtcbiAgICByZXR1cm4gYXNzZXJ0aW9ucztcbiAgfVxuXG4gIGdldFN0YXRlbWVudHMoc3RhdGVtZW50cyA9IFtdKSB7XG4gICAgcmV0dXJuIHN0YXRlbWVudHM7XG4gIH1cblxuICBnZXRTaWduYXR1cmVzKHNpZ25hdHVyZXMgPSBbXSkge1xuICAgIHJldHVybiBzaWduYXR1cmVzO1xuICB9XG5cbiAgZ2V0UmVmZXJlbmNlcyhyZWZlcmVuY2VzID0gW10pIHtcbiAgICByZXR1cm4gcmVmZXJlbmNlcztcbiAgfVxuXG4gIGdldEFzc3VtcHRpb25zKGFzc3VtcHRpb25zID0gW10pIHtcbiAgICByZXR1cm4gYXNzdW1wdGlvbnM7XG4gIH1cblxuICBnZXRNZXRhdmFyaWFibGVzKG1ldGF2YXJpYWJsZXMgPSBbXSkge1xuICAgIHJldHVybiBtZXRhdmFyaWFibGVzO1xuICB9XG5cbiAgZ2V0U3Vic3RpdHV0aW9ucyhzdWJzdGl0dXRpb25zID0gW10pIHtcbiAgICByZXR1cm4gc3Vic3RpdHV0aW9ucztcbiAgfVxuXG4gIGdldERlcml2ZWRTdWJzdGl0dXRpb25zKGRlcml2ZWRTdWJzdGl0dXRpb25zID0gW10pIHtcbiAgICByZXR1cm4gZGVyaXZlZFN1YnN0aXR1dGlvbnM7XG4gIH1cblxuICBnZXRQcm9wZXJ0aWVzKCkge1xuICAgIGNvbnN0IHByb3BlcnRpZXMgPSBbXSxcbiAgICAgICAgICB0eXBlcyA9IHRoaXMuZ2V0VHlwZXMoKTtcblxuICAgIHR5cGVzLmZvckVhY2goKHR5cGUpID0+IHtcbiAgICAgIHR5cGUuZ2V0UHJvcGVydGllcyhwcm9wZXJ0aWVzKTtcbiAgICB9KTtcblxuICAgIHJldHVybiBwcm9wZXJ0aWVzO1xuICB9XG5cbiAgYWRkVHlwZSh0eXBlKSB7XG4gICAgdGhpcy50eXBlcy5wdXNoKHR5cGUpO1xuXG4gICAgY29uc3QgZmlsZVBhdGggPSB0aGlzLmdldEZpbGVQYXRoKCksXG4gICAgICAgICAgdHlwZVN0cmluZyA9IHR5cGUuZ2V0U3RyaW5nKCk7XG5cbiAgICB0aGlzLnRyYWNlKGBBZGRlZCB0aGUgJyR7dHlwZVN0cmluZ30nIHR5cGUgdG8gdGhlICcke2ZpbGVQYXRofScgZmlsZSBjb250ZXh0LmApXG4gIH1cblxuICBhZGRSdWxlKHJ1bGUpIHtcbiAgICB0aGlzLnJ1bGVzLnB1c2gocnVsZSk7XG5cbiAgICBjb25zdCBmaWxlUGF0aCA9IHRoaXMuZ2V0RmlsZVBhdGgoKSxcbiAgICAgICAgICBydWxlU3RyaW5nID0gcnVsZS5nZXRTdHJpbmcoKTtcblxuICAgIHRoaXMudHJhY2UoYEFkZGVkIHRoZSAnJHtydWxlU3RyaW5nfScgcnVsZSB0byB0aGUgJyR7ZmlsZVBhdGh9JyBmaWxlIGNvbnRleHQuYClcbiAgfVxuXG4gIGFkZEF4aW9tKGF4aW9tKSB7XG4gICAgdGhpcy5heGlvbXMucHVzaChheGlvbSk7XG5cbiAgICBjb25zdCBmaWxlUGF0aCA9IHRoaXMuZ2V0RmlsZVBhdGgoKSxcbiAgICAgICAgICBheGlvbVN0cmluZyA9IGF4aW9tLmdldFN0cmluZygpO1xuXG4gICAgdGhpcy50cmFjZShgQWRkZWQgdGhlICcke2F4aW9tU3RyaW5nfScgYXhpb20gdG8gdGhlICcke2ZpbGVQYXRofScgZmlsZSBjb250ZXh0LmApXG4gIH1cblxuICBhZGRMZW1tYShsZW1tYSkge1xuICAgIHRoaXMubGVtbWFzLnB1c2gobGVtbWEpO1xuXG4gICAgY29uc3QgZmlsZVBhdGggPSB0aGlzLmdldEZpbGVQYXRoKCksXG4gICAgICAgICAgbGVtbWFTdHJpbmcgPSBsZW1tYS5nZXRTdHJpbmcoKTtcblxuICAgIHRoaXMudHJhY2UoYEFkZGVkIHRoZSAnJHtsZW1tYVN0cmluZ30nIGxlbW1hIHRvIHRoZSAnJHtmaWxlUGF0aH0nIGZpbGUgY29udGV4dC5gKVxuICB9XG5cbiAgYWRkU2NoZW1hKHNjaGVtYSkge1xuICAgIHRoaXMuc2NoZW1hcy5wdXNoKHNjaGVtYSk7XG5cbiAgICBjb25zdCBmaWxlUGF0aCA9IHRoaXMuZ2V0RmlsZVBhdGgoKSxcbiAgICAgICAgICBzY2hlbWFTdHJpbmcgPSBzY2hlbWEuZ2V0U3RyaW5nKCk7XG5cbiAgICB0aGlzLnRyYWNlKGBBZGRlZCB0aGUgJyR7c2NoZW1hU3RyaW5nfScgc2NoZW1hIHRvIHRoZSAnJHtmaWxlUGF0aH0nIGZpbGUgY29udGV4dC5gKVxuICB9XG5cbiAgYWRkVGhlb3JlbSh0aGVvcmVtKSB7XG4gICAgdGhpcy50aGVvcmVtcy5wdXNoKHRoZW9yZW0pO1xuXG4gICAgY29uc3QgZmlsZVBhdGggPSB0aGlzLmdldEZpbGVQYXRoKCksXG4gICAgICAgICAgdGhlb3JlbVN0cmluZyA9IHRoZW9yZW0uZ2V0U3RyaW5nKCk7XG5cbiAgICB0aGlzLnRyYWNlKGBBZGRlZCB0aGUgJyR7dGhlb3JlbVN0cmluZ30nIHRoZW9yZW0gdG8gdGhlICcke2ZpbGVQYXRofScgZmlsZSBjb250ZXh0LmApXG4gIH1cblxuICBhZGRHZW5lcmF0b3IoZ2VuZXJhdG9yKSB7XG4gICAgdGhpcy5nZW5lcmF0b3JzLnB1c2goZ2VuZXJhdG9yKTtcblxuICAgIGNvbnN0IGZpbGVQYXRoID0gdGhpcy5nZXRGaWxlUGF0aCgpLFxuICAgICAgICAgIGdlbmVyYXRvclN0cmluZyA9IGdlbmVyYXRvci5nZXRTdHJpbmcoKTtcblxuICAgIHRoaXMudHJhY2UoYEFkZGVkIHRoZSAnJHtnZW5lcmF0b3JTdHJpbmd9JyBnZW5lcmF0b3IgdG8gdGhlICcke2ZpbGVQYXRofScgZmlsZSBjb250ZXh0LmApXG4gIH1cblxuICBhZGRDb25qZWN0dXJlKGNvbmplY3R1cmUpIHtcbiAgICB0aGlzLmNvbmplY3R1cmVzLnB1c2goY29uamVjdHVyZSk7XG5cbiAgICBjb25zdCBmaWxlUGF0aCA9IHRoaXMuZ2V0RmlsZVBhdGgoKSxcbiAgICAgICAgICBvY25qZWN0dXJlU3RyaW5nID0gY29uamVjdHVyZS5nZXRTdHJpbmcoKTtcblxuICAgIHRoaXMudHJhY2UoYEFkZGVkIHRoZSAnJHtvY25qZWN0dXJlU3RyaW5nfScgb2NuamVjdHVyZSB0byB0aGUgJyR7ZmlsZVBhdGh9JyBmaWxlIGNvbnRleHQuYClcbiAgfVxuXG4gIGFkZENvbWJpbmF0b3IoY29tYmluYXRvcikge1xuICAgIHRoaXMuY29tYmluYXRvcnMucHVzaChjb21iaW5hdG9yKTtcblxuICAgIGNvbnN0IGZpbGVQYXRoID0gdGhpcy5nZXRGaWxlUGF0aCgpLFxuICAgICAgICAgIGNvbWJpbmF0b3JTdHJpbmcgPSBjb21iaW5hdG9yLmdldFN0cmluZygpO1xuXG4gICAgdGhpcy50cmFjZShgQWRkZWQgdGhlICcke2NvbWJpbmF0b3JTdHJpbmd9JyBjb21iaW5hdG9yIHRvIHRoZSAnJHtmaWxlUGF0aH0nIGZpbGUgY29udGV4dC5gKVxuICB9XG5cbiAgYWRkVHlwZVByZWZpeCh0eXBlUHJlZml4KSB7XG4gICAgdGhpcy50eXBlUHJlZml4ZXMucHVzaCh0eXBlUHJlZml4KTtcblxuICAgIGNvbnN0IGZpbGVQYXRoID0gdGhpcy5nZXRGaWxlUGF0aCgpLFxuICAgICAgICAgIHR5cGVQcmVmaXhTdHJpbmcgPSB0eXBlUHJlZml4LmdldFN0cmluZygpO1xuXG4gICAgdGhpcy50cmFjZShgQWRkZWQgdGhlICcke3R5cGVQcmVmaXhTdHJpbmd9JyB0eXBlLXByZWZpeCB0byB0aGUgJyR7ZmlsZVBhdGh9JyBmaWxlIGNvbnRleHQuYClcbiAgfVxuXG4gIGFkZENvbnN0cnVjdG9yKGNvbnN0cnVjdG9yKSB7XG4gICAgdGhpcy5jb25zdHJ1Y3RvcnMucHVzaChjb25zdHJ1Y3Rvcik7XG5cbiAgICBjb25zdCBmaWxlUGF0aCA9IHRoaXMuZ2V0RmlsZVBhdGgoKSxcbiAgICAgICAgICBjb25zdHJ1Y3RvclN0cmluZyA9IGNvbnN0cnVjdG9yLmdldFN0cmluZygpO1xuXG4gICAgdGhpcy50cmFjZShgQWRkZWQgdGhlICcke2NvbnN0cnVjdG9yU3RyaW5nfScgY29uc3RydWN0b3IgdG8gdGhlICcke2ZpbGVQYXRofScgZmlsZSBjb250ZXh0LmApXG4gIH1cblxuICBhZGREZWNsYXJlZFZhcmlhYmxlKGRlY2xhcmVkVmFyaWFibGUpIHtcbiAgICB0aGlzLmRlY2xhcmVkVmFyaWFibGVzLnB1c2goZGVjbGFyZWRWYXJpYWJsZSk7XG5cbiAgICBjb25zdCBmaWxlUGF0aCA9IHRoaXMuZ2V0RmlsZVBhdGgoKSxcbiAgICAgICAgICBkZWNsYXJlZFZhcmlhYmxlU3RyaW5nID0gZGVjbGFyZWRWYXJpYWJsZS5nZXRTdHJpbmcoKTtcblxuICAgIHRoaXMudHJhY2UoYEFkZGVkIHRoZSAnJHtkZWNsYXJlZFZhcmlhYmxlU3RyaW5nfScgZGVjbGFyZWQgdmFyaWFibGUgdG8gdGhlICcke2ZpbGVQYXRofScgZmlsZSBjb250ZXh0LmApXG4gIH1cblxuICBhZGREZWNsYXJlZE1ldGF2YXJpYWJsZShkZWNsYXJlZE1ldGF2YXJpYWJsZSkge1xuICAgIHRoaXMuZGVjbGFyZWRNZXRhdmFyaWFibGVzLnB1c2goZGVjbGFyZWRNZXRhdmFyaWFibGUpO1xuXG4gICAgY29uc3QgZmlsZVBhdGggPSB0aGlzLmdldEZpbGVQYXRoKCksXG4gICAgICAgICAgZGVjbGFyZWRNZXRhdmFyaWFibGVTdHJpbmcgPSBkZWNsYXJlZE1ldGF2YXJpYWJsZS5nZXRTdHJpbmcoKTtcblxuICAgIHRoaXMudHJhY2UoYEFkZGVkIHRoZSAnJHtkZWNsYXJlZE1ldGF2YXJpYWJsZVN0cmluZ30nIGRlY2xhcmVkIG1ldGF2YXJpYWJsZSB0byB0aGUgJyR7ZmlsZVBhdGh9JyBmaWxlIGNvbnRleHQuYClcbiAgfVxuXG4gIGZpbmRNZXRhdmFyaWFibGUobWV0YXZhcmlhYmxlLCBjb250ZXh0KSB7XG4gICAgY29uc3QgZGVjbGFyZWRNZXRhdmFyaWFibGVzID0gdGhpcy5nZXREZWNsYXJlZE1ldGF2YXJpYWJsZXMoKTtcblxuICAgIG1ldGF2YXJpYWJsZSA9IGRlY2xhcmVkTWV0YXZhcmlhYmxlcy5maW5kKChkZWNsYXJlZE1ldGF2YXJpYWJsZSkgPT4ge1xuICAgICAgY29uc3QgbWV0YXZhcmlhYmxlVW5pZmllcyA9IGRlY2xhcmVkTWV0YXZhcmlhYmxlLnVuaWZ5TWV0YXZhcmlhYmxlKG1ldGF2YXJpYWJsZSwgY29udGV4dCk7XG5cbiAgICAgIGlmIChtZXRhdmFyaWFibGVVbmlmaWVzKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH0pIHx8IG51bGw7XG5cbiAgICByZXR1cm4gbWV0YXZhcmlhYmxlO1xuICB9XG5cbiAgZmluZFJ1bGVCeVJlZmVyZW5jZShyZWZlcmVuY2UpIHtcbiAgICBjb25zdCBydWxlcyA9IHRoaXMuZ2V0UnVsZXMoKSxcbiAgICAgICAgICBtZXRhdmFyaWFibGVOb2RlID0gcmVmZXJlbmNlLmdldE1ldGF2YXJpYWJsZU5vZGUoKSxcbiAgICAgICAgICBydWxlID0gcnVsZXMuZmluZCgocnVsZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgbWV0YXZhcmlhYmxlTm9kZU1hdGNoZXMgPSBydWxlLm1hdGNoTWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlKTtcblxuICAgICAgICAgICAgaWYgKG1ldGF2YXJpYWJsZU5vZGVNYXRjaGVzKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pIHx8IG51bGw7XG5cbiAgICByZXR1cm4gcnVsZTtcbiAgfVxuXG4gIGZpbmRBeGlvbUJ5UmVmZXJlbmNlKHJlZmVyZW5jZSkge1xuICAgIGNvbnN0IGF4aW9tcyA9IHRoaXMuZ2V0QXhpb21zKCksXG4gICAgICAgICAgbWV0YXZhcmlhYmxlTm9kZSA9IHJlZmVyZW5jZS5nZXRNZXRhdmFyaWFibGVOb2RlKCksXG4gICAgICAgICAgYXhpb20gPSBheGlvbXMuZmluZCgoYXhpb20pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG1ldGF2YXJpYWJsZU5vZGVNYXRjaGVzID0gYXhpb20ubWF0Y2hNZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpO1xuXG4gICAgICAgICAgICBpZiAobWV0YXZhcmlhYmxlTm9kZU1hdGNoZXMpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSkgfHwgbnVsbDtcblxuICAgIHJldHVybiBheGlvbTtcbiAgfVxuXG4gIGZpbmRMZW1tYUJ5UmVmZXJlbmNlKHJlZmVyZW5jZSkge1xuICAgIGNvbnN0IGxlbW1hcyA9IHRoaXMuZ2V0TGVtbWFzKCksXG4gICAgICAgICAgbWV0YXZhcmlhYmxlTm9kZSA9IHJlZmVyZW5jZS5nZXRNZXRhdmFyaWFibGVOb2RlKCksXG4gICAgICAgICAgbGVtbWEgPSBsZW1tYXMuZmluZCgobGVtbWEpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG1ldGF2YXJpYWJsZU5vZGVNYXRjaGVzID0gbGVtbWEubWF0Y2hNZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpO1xuXG4gICAgICAgICAgICBpZiAobWV0YXZhcmlhYmxlTm9kZU1hdGNoZXMpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSkgfHwgbnVsbDtcblxuICAgIHJldHVybiBsZW1tYTtcbiAgfVxuXG4gIGZpbmRUaGVvcmVtQnlSZWZlcmVuY2UocmVmZXJlbmNlKSB7XG4gICAgY29uc3QgdGhlb3JlbXMgPSB0aGlzLmdldFRoZW9yZW1zKCksXG4gICAgICAgICAgbWV0YXZhcmlhYmxlTm9kZSA9IHJlZmVyZW5jZS5nZXRNZXRhdmFyaWFibGVOb2RlKCksXG4gICAgICAgICAgdGhlb3JlbSA9IHRoZW9yZW1zLmZpbmQoKHRoZW9yZW0pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG1ldGF2YXJpYWJsZU5vZGVNYXRjaGVzID0gdGhlb3JlbS5tYXRjaE1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSk7XG5cbiAgICAgICAgICAgIGlmIChtZXRhdmFyaWFibGVOb2RlTWF0Y2hlcykge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSB8fCBudWxsO1xuXG4gICAgcmV0dXJuIHRoZW9yZW07XG4gIH1cblxuICBmaW5kQ29uamVjdHVyZUJ5UmVmZXJlbmNlKHJlZmVyZW5jZSkge1xuICAgIGNvbnN0IGNvbmplY3R1cmVzID0gdGhpcy5nZXRDb25qZWN0dXJlcygpLFxuICAgICAgICAgIG1ldGF2YXJpYWJsZU5vZGUgPSByZWZlcmVuY2UuZ2V0TWV0YXZhcmlhYmxlTm9kZSgpLFxuICAgICAgICAgIGNvbmplY3R1cmUgPSBjb25qZWN0dXJlcy5maW5kKChjb25qZWN0dXJlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBtZXRhdmFyaWFibGVOb2RlTWF0Y2hlcyA9IGNvbmplY3R1cmUubWF0Y2hNZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpO1xuXG4gICAgICAgICAgICBpZiAobWV0YXZhcmlhYmxlTm9kZU1hdGNoZXMpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSkgfHwgbnVsbDtcblxuICAgIHJldHVybiBjb25qZWN0dXJlO1xuICB9XG5cbiAgZmluZFRvcExldmVsQXNzZXJ0aW9uQnlSZWZlcmVuY2UocmVmZXJlbmNlKSB7XG4gICAgY29uc3QgdG9wTEV2ZWxBc3NlcnRpb25zID0gdGhpcy5nZXRUb3BMZXZlbEFzc2VydGlvbnMoKSxcbiAgICAgICAgICBtZXRhdmFyaWFibGVOb2RlID0gcmVmZXJlbmNlLmdldE1ldGF2YXJpYWJsZU5vZGUoKSxcbiAgICAgICAgICB0b3BMZXZlbEFzc2VydGlvbiA9IHRvcExFdmVsQXNzZXJ0aW9ucy5maW5kKCh0b3BMZXZlbEFzc2VydGlvbikgPT4ge1xuICAgICAgICAgICAgY29uc3QgbWV0YXZhcmlhYmxlTm9kZU1hdGNoZXMgPSB0b3BMZXZlbEFzc2VydGlvbi5tYXRjaE1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSk7XG5cbiAgICAgICAgICAgIGlmIChtZXRhdmFyaWFibGVOb2RlTWF0Y2hlcykge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSB8fCBudWxsO1xuXG4gICAgcmV0dXJuIHRvcExldmVsQXNzZXJ0aW9uO1xuICB9XG5cbiAgZmluZFR5cGVCeVR5cGVOYW1lKHR5cGVOYW1lLCBpbmNsdWRlUmVsZWFzZSA9IHRydWUpIHtcbiAgICBjb25zdCB0eXBlcyA9IHRoaXMuZ2V0VHlwZXMoaW5jbHVkZVJlbGVhc2UpLFxuICAgICAgICAgIHR5cGUgPSBmaW5kVHlwZSh0eXBlcywgKHR5cGUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHR5cGVDb21wYXJlc1RvVHlwZU5hbWUgPSB0eXBlLmNvbXBhcmVUeXBlTmFtZSh0eXBlTmFtZSk7XG5cbiAgICAgICAgICAgIGlmICh0eXBlQ29tcGFyZXNUb1R5cGVOYW1lKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuXG4gICAgcmV0dXJuIHR5cGU7XG4gIH1cblxuICBmaW5kVHlwZUJ5Tm9taW5hbFR5cGVOYW1lKG5vbWluYWxUeXBlTmFtZSwgaW5jbHVkZVJlbGVhc2UgPSB0cnVlKSB7XG4gICAgY29uc3QgdHlwZXMgPSB0aGlzLmdldFR5cGVzKGluY2x1ZGVSZWxlYXNlKSxcbiAgICAgICAgICB0eXBlID0gZmluZFR5cGUodHlwZXMsICh0eXBlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB0eXBlQ29tcGFyZXNUb05vbWluYWxUeXBlTmFtZSA9IHR5cGUuY29tcGFyZU5vbWluYWxUeXBlTmFtZShub21pbmFsVHlwZU5hbWUpO1xuXG4gICAgICAgICAgICBpZiAodHlwZUNvbXBhcmVzVG9Ob21pbmFsVHlwZU5hbWUpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG5cbiAgICByZXR1cm4gdHlwZTtcbiAgfVxuXG4gIGZpbmRUeXBlQnlQcmVmaXhlZFR5cGVOYW1lKHByZWZpeGVkVHlwZU5hbWUsIGluY2x1ZGVSZWxlYXNlID0gdHJ1ZSkge1xuICAgIGNvbnN0IHR5cGVzID0gdGhpcy5nZXRUeXBlcyhpbmNsdWRlUmVsZWFzZSksXG4gICAgICAgICAgdHlwZSA9IGZpbmRUeXBlKHR5cGVzLCAodHlwZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgdHlwZUNvbXBhcmVzVG9QcmVmaXhlZFR5cGVOYW1lID0gdHlwZS5jb21wYXJlUHJlZml4ZWRUeXBlTmFtZShwcmVmaXhlZFR5cGVOYW1lKTtcblxuICAgICAgICAgICAgaWYgKHR5cGVDb21wYXJlc1RvUHJlZml4ZWRUeXBlTmFtZSkge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcblxuICAgIHJldHVybiB0eXBlO1xuICB9XG5cbiAgZmluZFR5cGVQcmVmaXhCeVR5cGVQcmVmaXhOYW1lKHR5cGVQcmVmaXhOYW1lKSB7XG4gICAgY29uc3QgdHlwZVByZWZpeGVzID0gdGhpcy5nZXRUeXBlUHJlZml4ZXMoKSxcbiAgICAgICAgICB0eXBlUHJlZml4ID0gdHlwZVByZWZpeGVzLmZpbmQoKHR5cGVQcmVmaXgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHR5cGVQcmVmaXhDb21wYXJlc1RvVHlwZVByZWZpeE5hbWUgPSB0eXBlUHJlZml4LmNvbXBhcmVUeXBlUHJlZml4TmFtZSh0eXBlUHJlZml4TmFtZSk7XG5cbiAgICAgICAgICAgIGlmICh0eXBlUHJlZml4Q29tcGFyZXNUb1R5cGVQcmVmaXhOYW1lKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pIHx8IG51bGw7XG5cbiAgICByZXR1cm4gdHlwZVByZWZpeDtcbiAgfVxuXG4gIGZpbmREZWNsYXJlZFZhcmlhYmxlQnlWYXJpYWJsZUlkZW50aWZpZXIoVmFyaWFibGVJZGVudGl0aWZlcikge1xuICAgIGNvbnN0IGRlY2xhcmVkVmFyaWFibGVzID0gdGhpcy5nZXREZWNsYXJlZFZhcmlhYmxlcygpLFxuICAgICAgICAgIGRlY2xhcmVkVmFyaWFibGUgPSBkZWNsYXJlZFZhcmlhYmxlcy5maW5kKChkZWNsYXJlZFZhcmlhYmxlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBkZWNsYXJlZFZhcmlhYmxlQ29tcGFyZXNUb1ZhcmlhYmxlSWRlbnRpdGlmZXIgPSBkZWNsYXJlZFZhcmlhYmxlLmNvbXBhcmVWYXJpYWJsZUlkZW50aWZpZXIoVmFyaWFibGVJZGVudGl0aWZlcik7XG5cbiAgICAgICAgICAgIGlmIChkZWNsYXJlZFZhcmlhYmxlQ29tcGFyZXNUb1ZhcmlhYmxlSWRlbnRpdGlmZXIpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSkgfHwgbnVsbDtcblxuICAgIHJldHVybiBkZWNsYXJlZFZhcmlhYmxlO1xuICB9XG5cbiAgZmluZERlY2xhcmVkTWV0YXZhcmlhYmxlQnlNZXRhdmFyaWFibGVOYW1lKG1ldGF2YXJpYWJsZU5hbWUpIHtcbiAgICBjb25zdCBkZWNsYXJlZE1ldGF2YXJpYWJsZXMgPSB0aGlzLmdldERlY2xhcmVkTWV0YXZhcmlhYmxlcygpLFxuICAgICAgICAgIGRlY2xhcmVkTWV0YXZhcmlhYmxlID0gZGVjbGFyZWRNZXRhdmFyaWFibGVzLmZpbmQoKGRlY2xhcmVkTWV0YXZhcmlhYmxlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBkZWNsYXJlZE1ldGF2YXJpYWJsZUNvbXBhcmVzVG9NZXRhdmFyaWFibGVOYW1lID0gZGVjbGFyZWRNZXRhdmFyaWFibGUuY29tcGFyZU1ldGF2YXJpYWJsZU5hbWUobWV0YXZhcmlhYmxlTmFtZSk7XG5cbiAgICAgICAgICAgIGlmIChkZWNsYXJlZE1ldGF2YXJpYWJsZUNvbXBhcmVzVG9NZXRhdmFyaWFibGVOYW1lKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pIHx8IG51bGw7XG5cbiAgICByZXR1cm4gZGVjbGFyZWRNZXRhdmFyaWFibGU7XG4gIH1cblxuICBmaW5kTWV0YXZhcmlhYmxlQnlNZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpIHtcbiAgICBjb25zdCBtZXRhdmFyaWFibGUgPSBudWxsO1xuXG4gICAgcmV0dXJuIG1ldGF2YXJpYWJsZTtcbiAgfVxuXG4gIGZpbmRTdWJzdGl0dXRpb25CeVN1YnN0aXR1dGlvbk5vZGUoc3Vic3RpdHV0aW9uTm9kZSkge1xuICAgIGNvbnN0IHN1YnN0aXR1dGlvbiA9IG51bGw7XG5cbiAgICByZXR1cm4gc3Vic3RpdHV0aW9uO1xuICB9XG5cbiAgZmluZENvbnN0cmFpbnRCeUNvbnN0cmFpbnROb2RlKGNvbnN0cmFpbnROb2RlKSB7XG4gICAgY29uc3QgY29uc3RyYWludCA9IG51bGw7XG5cbiAgICByZXR1cm4gY29uc3RyYWludDtcbiAgfVxuXG4gIGZpbmRQcm9jZWR1cmVCeVByb2NlZHVyZU5hbWUocHJvY2VkdXJlTmFtZSkge1xuICAgIGNvbnN0IHByb2NlZHVyZXMgPSB0aGlzLmdldFByb2NlZHVyZXMoKSxcbiAgICAgICAgICBwcm9jZWR1cmUgPSBwcm9jZWR1cmVzLmZpbmQoKHByb2NlZHVyZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgcHJvY2VkdXJlQ29tcGFyZXNUb1Byb2NlZHVyZU5hbWUgPSBwcm9jZWR1cmUuY29tcGFyZVByb2NlZHVyZU5hbWUocHJvY2VkdXJlTmFtZSk7XG5cbiAgICAgICAgICAgIGlmIChwcm9jZWR1cmVDb21wYXJlc1RvUHJvY2VkdXJlTmFtZSkge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSB8fCBudWxsO1xuXG4gICAgcmV0dXJuIHByb2NlZHVyZTtcbiAgfVxuXG4gIGZpbmRNZXRhVHlwZUJ5TWV0YVR5cGVOYW1lKG1ldGFUeXBlTmFtZSkgeyByZXR1cm4gZmluZE1ldGFUeXBlQnlNZXRhVHlwZU5hbWUobWV0YVR5cGVOYW1lKTsgfVxuXG4gIGlzTGFiZWxQcmVzZW50QnlMYWJlbE5vZGUobGFiZWxOb2RlKSB7XG4gICAgY29uc3QgbGFiZWxzID0gdGhpcy5nZXRMYWJlbHMoKSxcbiAgICAgICAgICBsYWJlbFByZXNlbnQgPSBsYWJlbHMuc29tZSgobGFiZWwpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGxhYmVsTm9kZU1hdGNoZXMgPSBsYWJlbC5tYXRjaExhYmVsTm9kZShsYWJlbE5vZGUpO1xuXG4gICAgICAgICAgICBpZiAobGFiZWxOb2RlTWF0Y2hlcykge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcblxuICAgIHJldHVybiBsYWJlbFByZXNlbnQ7XG4gIH1cblxuICBpc1R5cGVQcmVzZW50QnlUeXBlTmFtZSh0eXBlTmFtZSwgaW5jbHVkZVJlbGVhc2UgPSB0cnVlKSB7XG4gICAgY29uc3QgdHlwZSA9IHRoaXMuZmluZFR5cGVCeVR5cGVOYW1lKHR5cGVOYW1lLCBpbmNsdWRlUmVsZWFzZSksXG4gICAgICAgICAgdHlwZVByZXNlbnQgPSAodHlwZSAhPT0gbnVsbCk7XG5cbiAgICByZXR1cm4gdHlwZVByZXNlbnQ7XG4gIH1cblxuICBpc1R5cGVQcmVzZW50QnlOb21pbmFsVHlwZU5hbWUobm9taW5hbFR5cGVOYW1lLCBpbmNsdWRlUmVsZWFzZSA9IHRydWUpIHtcbiAgICBjb25zdCB0eXBlID0gdGhpcy5maW5kVHlwZUJ5Tm9taW5hbFR5cGVOYW1lKG5vbWluYWxUeXBlTmFtZSwgaW5jbHVkZVJlbGVhc2UpLFxuICAgICAgICAgIHR5cGVQcmVzZW50ID0gKHR5cGUgIT09IG51bGwpO1xuXG4gICAgcmV0dXJuIHR5cGVQcmVzZW50O1xuICB9XG5cbiAgaXNUeXBlUHJlc2VudEJ5UHJlZml4ZWRUeXBlTmFtZShwcmVmaXhlZFR5cGVOYW1lLCBpbmNsdWRlUmVsZWFzZSA9IHRydWUpIHtcbiAgICBjb25zdCB0eXBlID0gdGhpcy5maW5kVHlwZUJ5UHJlZml4ZWRUeXBlTmFtZShwcmVmaXhlZFR5cGVOYW1lLCBpbmNsdWRlUmVsZWFzZSksXG4gICAgICAgICAgdHlwZVByZXNlbnQgPSAodHlwZSAhPT0gbnVsbCk7XG5cbiAgICByZXR1cm4gdHlwZVByZXNlbnQ7XG4gIH1cblxuICBpc1R5cGVQcmVmaXhQcmVzZW50QnlUeXBlUHJlZml4TmFtZSh0eXBlUHJlZml4TmFtZSkge1xuICAgIGNvbnN0IHR5cGVQcmVmaXggPSB0aGlzLmZpbmRUeXBlUHJlZml4QnlUeXBlUHJlZml4TmFtZSh0eXBlUHJlZml4TmFtZSksXG4gICAgICAgICAgdHlwZVByZWZpeFByZXNlbnQgPSAodHlwZVByZWZpeCAhPT0gbnVsbCk7XG5cbiAgICByZXR1cm4gdHlwZVByZWZpeFByZXNlbnQ7XG4gIH1cblxuICBpc0RlY2xhcmVkVmFyaWFibGVQcmVzZW50QnlWYXJpYWJsZUlkZW50aWZpZXIodmFyaWFibGVJZGVudGlmaWVyKSB7XG4gICAgY29uc3QgZGVjbGFyZWRWYXJpYWJsZSA9IHRoaXMuZmluZERlY2xhcmVkVmFyaWFibGVCeVZhcmlhYmxlSWRlbnRpZmllcih2YXJpYWJsZUlkZW50aWZpZXIpLFxuICAgICAgICAgIGRlY2xhcmVkVmFyaWFibGVQcmVzZW50ID0gKGRlY2xhcmVkVmFyaWFibGUgIT09IG51bGwpO1xuXG4gICAgcmV0dXJuIGRlY2xhcmVkVmFyaWFibGVQcmVzZW50O1xuICB9XG5cbiAgaXNEZWNsYXJlZE1ldGF2YXJpYWJsZVByZXNlbnRCeU1ldGF2YXJpYWJsZU5hbWUobWV0YXZhcmlhYmxlTmFtZSkge1xuICAgIGNvbnN0IGRlY2xhcmVkTWV0YXZhcmlhYmxlID0gdGhpcy5maW5kRGVjbGFyZWRNZXRhdmFyaWFibGVCeU1ldGF2YXJpYWJsZU5hbWUobWV0YXZhcmlhYmxlTmFtZSksXG4gICAgICAgICAgZGVjbGFyZWRNZXRhdmFyaWFibGVQcmVzZW50ID0gKGRlY2xhcmVkTWV0YXZhcmlhYmxlICE9PSBudWxsKTtcblxuICAgIHJldHVybiBkZWNsYXJlZE1ldGF2YXJpYWJsZVByZXNlbnQ7XG4gIH1cblxuICBpc1Byb2NlZHVyZVByZXNlbnRCeVByb2NlZHVyZU5hbWUocHJvY2VkdXJlTmFtZSkge1xuICAgIGNvbnN0IHByb2NlZHVyZSA9IHRoaXMuZmluZFByb2NlZHVyZUJ5UHJvY2VkdXJlTmFtZShwcm9jZWR1cmVOYW1lKSxcbiAgICAgICAgICBwcm9jZWR1cmVQcmVzZW50ID0gKHByb2NlZHVyZSAhPT0gbnVsbCk7XG5cbiAgICByZXR1cm4gcHJvY2VkdXJlUHJlc2VudDtcbiAgfVxuXG4gIGlzTWV0YUxldmVsKCkge1xuICAgIGNvbnN0IG1ldGFMRXZlbCA9IGZhbHNlO1xuXG4gICAgcmV0dXJuIG1ldGFMRXZlbDtcbiAgfVxuXG4gIGNsZWFyKCkge1xuICAgIHRoaXMudHlwZXMgPSBbXTtcbiAgICB0aGlzLnJ1bGVzID0gW107XG4gICAgdGhpcy5heGlvbXMgPSBbXTtcbiAgICB0aGlzLmxlbW1hcyA9IFtdO1xuICAgIHRoaXMuc2NoZW1hcyA9IFtdO1xuICAgIHRoaXMudGhlb3JlbXMgPSBbXTtcbiAgICB0aGlzLmdlbmVyYXRvcnMgPSBbXTtcbiAgICB0aGlzLmNvbmplY3R1cmVzID0gW107XG4gICAgdGhpcy5jb21iaW5hdG9ycyA9IFtdO1xuICAgIHRoaXMudHlwZVByZWZpeGVzID0gW107XG4gICAgdGhpcy5jb25zdHJ1Y3RvcnMgPSBbXTtcbiAgICB0aGlzLmRlY2xhcmVkVmFyaWFibGVzID0gW107XG4gICAgdGhpcy5kZWNsYXJlZE1ldGF2YXJpYWJsZXMgPSBbXTtcbiAgfVxuXG4gIGNvbXBsZXRlKCkge1xuICAgIC8vL1xuICB9XG5cbiAgYXN5bmMgdmVyaWZ5RmlsZSgpIHtcbiAgICBjb25zdCBub2RlID0gdGhpcy5nZXROb2RlKCksXG4gICAgICAgICAgY29udGV4dCA9IHRoaXMsIC8vL1xuICAgICAgICAgIGZpbGVOb2RlID0gbm9kZSwgIC8vL1xuICAgICAgICAgIGZpbGVWZXJpZmllcyA9IGF3YWl0IHZlcmlmeUZpbGUoZmlsZU5vZGUsIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIGZpbGVWZXJpZmllcztcbiAgfVxuXG4gIGluaXRpYWxpc2UoKSB7XG4gICAgY29uc3QganNvbiA9IHRoaXMuZ2V0SlNPTigpO1xuXG4gICAgaWYgKGpzb24gPT09IG51bGwpIHtcbiAgICAgIHN1cGVyLmluaXRpYWxpc2UoKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGZpbGVDb250ZXh0ID0gdGhpczsgLy8vXG5cbiAgICB0aGlzLnR5cGVzID0gW107XG5cbiAgICB0eXBlc0Zyb21KU09OKGpzb24sIHRoaXMudHlwZXMsIGZpbGVDb250ZXh0KTtcblxuICAgIHRoaXMubGVtbWFzID0gW107XG5cbiAgICB0aGlzLmRlY2xhcmVkTWV0YXZhcmlhYmxlcyA9IGRlY2xhcmVkTWV0YXZhcmlhYmxlc0Zyb21KU09OKGpzb24sIGZpbGVDb250ZXh0KTtcbiAgICB0aGlzLmRlY2xhcmVkVmFyaWFibGVzID0gZGVjbGFyZWRWYXJpYWJsZXNGcm9tSlNPTihqc29uLCBmaWxlQ29udGV4dCk7XG4gICAgdGhpcy50eXBlUHJlZml4ZXMgPSB0eXBlUHJlZml4ZXNGcm9tSlNPTihqc29uLCBmaWxlQ29udGV4dCk7XG4gICAgdGhpcy5nZW5lcmF0b3JzID0gZ2VuZXJhdG9yc0Zyb21KU09OKGpzb24sIGZpbGVDb250ZXh0KTtcbiAgICB0aGlzLmNvbWJpbmF0b3JzID0gY29tYmluYXRvcnNGcm9tSlNPTihqc29uLCBmaWxlQ29udGV4dCk7XG4gICAgdGhpcy5jb25zdHJ1Y3RvcnMgPSBjb25zdHJ1Y3RvcnNGcm9tSlNPTihqc29uLCBmaWxlQ29udGV4dCk7XG5cbiAgICB0aGlzLnJ1bGVzID0gcnVsZXNGcm9tSlNPTihqc29uLCBmaWxlQ29udGV4dCk7XG4gICAgdGhpcy5heGlvbXMgPSBheGlvbXNGcm9tSlNPTihqc29uLCBmaWxlQ29udGV4dCk7XG4gICAgdGhpcy5zY2hlbWFzID0gc2NoZW1hc0Zyb21KU09OKGpzb24sIGZpbGVDb250ZXh0KTtcbiAgICB0aGlzLnRoZW9yZW1zID0gdGhlb3JlbXNGcm9tSlNPTihqc29uLCBmaWxlQ29udGV4dCk7XG4gICAgdGhpcy5jb25qZWN0dXJlcyA9IGNvbmplY3R1cmVzRnJvbUpTT04oanNvbiwgZmlsZUNvbnRleHQpO1xuICB9XG5cbiAgdG9KU09OKCkge1xuICAgIGNvbnN0IHR5cGVzSlNPTiA9IHR5cGVzVG9UeXBlc0pTT04odGhpcy50eXBlcyksXG4gICAgICAgICAgcnVsZXNKU09OID0gcnVsZXNUb1J1bGVzSlNPTih0aGlzLnJ1bGVzKSxcbiAgICAgICAgICBheGlvbXNKU09OID0gYXhpb21zVG9BeGlvbXNKU09OKHRoaXMuYXhpb21zKSxcbiAgICAgICAgICBzY2hlbWFzSlNPTiA9IHNjaGVtYXNUb1NjaGVtYXNKU09OKHRoaXMuc2NoZW1hcyksXG4gICAgICAgICAgdGhlb3JlbXNKU09OID0gdGhlb3JlbXNUb1RoZW9yZW1zSlNPTih0aGlzLnRoZW9yZW1zKSxcbiAgICAgICAgICBnZW5lcmF0b3JzSlNPTiA9IGdlbmVyYXRvcnNUb0dlbmVyYXRvcnNKU09OKHRoaXMuZ2VuZXJhdG9ycyksXG4gICAgICAgICAgY29uamVjdHVyZXNKU09OID0gY29uamVjdHVyZXNUb0NvbmplY3R1cmVzSlNPTih0aGlzLmNvbmplY3R1cmVzKSxcbiAgICAgICAgICBjb21iaW5hdG9yc0pTT04gPSBjb21iaW5hdG9yc1RvQ29tYmluYXRvcnNKU09OKHRoaXMuY29tYmluYXRvcnMpLFxuICAgICAgICAgIHR5cGVQcmVmaXhlc0pTT04gPSB0eXBlUHJlZml4ZXNUb1R5cGVQcmVmaXhlc0pTT04odGhpcy50eXBlUHJlZml4ZXMpLFxuICAgICAgICAgIGNvbnN0cnVjdG9yc0pTT04gPSBjb25zdHJ1Y3RvcnNUb0NvbnN0cnVjdG9yc0pTT04odGhpcy5jb25zdHJ1Y3RvcnMpLFxuICAgICAgICAgIGRlY2xhcmVkVmFyaWFibGVzSlNPTiA9IGRlY2xhcmVkVmFyaWFibGVzVG9EZWNsYXJlZFZhcmlhYmxlc0pTT04odGhpcy5kZWNsYXJlZFZhcmlhYmxlcyksXG4gICAgICAgICAgZGVjbGFyZWRNZXRhdmFyaWFibGVzSlNPTiA9IGRlY2xhcmVkTWV0YXZhcmlhYmxlc1RvRGVjbGFyZWRNZXRhdmFyaWFibGVzSlNPTih0aGlzLmRlY2xhcmVkTWV0YXZhcmlhYmxlcyksXG4gICAgICAgICAgZmlsZUNvbnRlbnQgPSB0aGlzLmZpbGVDb250ZW50LFxuICAgICAgICAgIGZpbGVQYXRoID0gdGhpcy5maWxlUGF0aCxcbiAgICAgICAgICB0eXBlcyA9IHR5cGVzSlNPTiwgIC8vL1xuICAgICAgICAgIHJ1bGVzID0gcnVsZXNKU09OLCAgLy8vXG4gICAgICAgICAgYXhpb21zID0gYXhpb21zSlNPTiwgIC8vL1xuICAgICAgICAgIHNjaGVtYXMgPSBzY2hlbWFzSlNPTiwgIC8vL1xuICAgICAgICAgIHRoZW9yZW1zID0gdGhlb3JlbXNKU09OLCAgLy8vXG4gICAgICAgICAgZ2VuZXJhdG9ycyA9IGdlbmVyYXRvcnNKU09OLCAgLy8vXG4gICAgICAgICAgY29uamVjdHVyZXMgPSBjb25qZWN0dXJlc0pTT04sICAvLy9cbiAgICAgICAgICBjb21iaW5hdG9ycyA9IGNvbWJpbmF0b3JzSlNPTiwgIC8vL1xuICAgICAgICAgIHR5cGVQcmVmaXhlcyA9IHR5cGVQcmVmaXhlc0pTT04sICAvLy9cbiAgICAgICAgICBjb25zdHJ1Y3RvcnMgPSBjb25zdHJ1Y3RvcnNKU09OLCAgLy8vXG4gICAgICAgICAgZGVjbGFyZWRWYXJpYWJsZXMgPSBkZWNsYXJlZFZhcmlhYmxlc0pTT04sICAvLy9cbiAgICAgICAgICBkZWNsYXJlZE1ldGF2YXJpYWJsZXMgPSBkZWNsYXJlZE1ldGF2YXJpYWJsZXNKU09OLCAgLy8vXG4gICAgICAgICAganNvbiA9IHtcbiAgICAgICAgICAgIGZpbGVDb250ZW50LFxuICAgICAgICAgICAgZmlsZVBhdGgsXG4gICAgICAgICAgICB0eXBlcyxcbiAgICAgICAgICAgIHJ1bGVzLFxuICAgICAgICAgICAgYXhpb21zLFxuICAgICAgICAgICAgc2NoZW1hcyxcbiAgICAgICAgICAgIHRoZW9yZW1zLFxuICAgICAgICAgICAgZ2VuZXJhdG9ycyxcbiAgICAgICAgICAgIGNvbmplY3R1cmVzLFxuICAgICAgICAgICAgY29tYmluYXRvcnMsXG4gICAgICAgICAgICB0eXBlUHJlZml4ZXMsXG4gICAgICAgICAgICBjb25zdHJ1Y3RvcnMsXG4gICAgICAgICAgICBkZWNsYXJlZFZhcmlhYmxlcyxcbiAgICAgICAgICAgIGRlY2xhcmVkTWV0YXZhcmlhYmxlc1xuICAgICAgICAgIH07XG5cbiAgICByZXR1cm4ganNvbjtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tRmlsZShmaWxlLCBjb250ZXh0KSB7XG4gICAgY29uc3QgcmVsZWFzZUNvbnRleHQgPSBjb250ZXh0LCAvLy9cbiAgICAgICAgICBjb21iaW5lZEN1c3RvbUdyYW1tYXIgPSByZWxlYXNlQ29udGV4dC5nZXRDb21iaW5lZEN1c3RvbUdyYW1tYXIoKSxcbiAgICAgICAgICBub21pbmFsTGV4ZXIgPSBub21pbmFsTGV4ZXJGcm9tQ29tYmluZWRDdXN0b21HcmFtbWFyKE5vbWluYWxMZXhlciwgY29tYmluZWRDdXN0b21HcmFtbWFyKSxcbiAgICAgICAgICBub21pbmFsUGFyc2VyID0gbm9taW5hbFBhcnNlckZyb21Db21iaW5lZEN1c3RvbUdyYW1tYXIoTm9taW5hbFBhcnNlciwgY29tYmluZWRDdXN0b21HcmFtbWFyKSxcbiAgICAgICAgICBsZXhlciA9IG5vbWluYWxMZXhlciwgLy8vXG4gICAgICAgICAgcGFyc2VyID0gbm9taW5hbFBhcnNlciwgLy8vXG4gICAgICAgICAgdHlwZXMgPSBbXSxcbiAgICAgICAgICBydWxlcyA9IFtdLFxuICAgICAgICAgIGF4aW9tcyA9IFtdLFxuICAgICAgICAgIGxlbW1hcyA9IFtdLFxuICAgICAgICAgIHNjaGVtYXMgPSBbXSxcbiAgICAgICAgICB0aGVvcmVtcyA9IFtdLFxuICAgICAgICAgIGdlbmVyYXRvcnMgPSBbXSxcbiAgICAgICAgICBjb25qZWN0dXJlcyA9IFtdLFxuICAgICAgICAgIGNvbWJpbmF0b3JzID0gW10sXG4gICAgICAgICAgdHlwZVByZWZpeGVzID0gW10sXG4gICAgICAgICAgY29uc3RydWN0b3JzID0gW10sXG4gICAgICAgICAgZGVjbGFyZWRWYXJpYWJsZXMgPSBbXSxcbiAgICAgICAgICBkZWNsYXJlZE1ldGF2YXJpYWJsZXMgPSBbXSxcbiAgICAgICAgICBub21pbmFsRmlsZUNvbnRleHQgPSBGaWxlQ29udGV4dC5mcm9tRmlsZShOb21pbmFsRmlsZUNvbnRleHQsIGZpbGUsIGxleGVyLCBwYXJzZXIsIHR5cGVzLCBydWxlcywgYXhpb21zLCBsZW1tYXMsIHNjaGVtYXMsIHRoZW9yZW1zLCBnZW5lcmF0b3JzLCBjb25qZWN0dXJlcywgY29tYmluYXRvcnMsIHR5cGVQcmVmaXhlcywgY29uc3RydWN0b3JzLCBkZWNsYXJlZFZhcmlhYmxlcywgZGVjbGFyZWRNZXRhdmFyaWFibGVzLCBjb250ZXh0KTtcblxuICAgIHJldHVybiBub21pbmFsRmlsZUNvbnRleHQ7XG4gIH1cblxuICBzdGF0aWMgZnJvbUpTT04oanNvbiwgY29udGV4dCkge1xuICAgIGNvbnN0IHJlbGVhc2VDb250ZXh0ID0gY29udGV4dCwgLy8vXG4gICAgICAgICAgY29tYmluZWRDdXN0b21HcmFtbWFyID0gcmVsZWFzZUNvbnRleHQuZ2V0Q29tYmluZWRDdXN0b21HcmFtbWFyKCksXG4gICAgICAgICAgbm9taW5hbExleGVyID0gbm9taW5hbExleGVyRnJvbUNvbWJpbmVkQ3VzdG9tR3JhbW1hcihOb21pbmFsTGV4ZXIsIGNvbWJpbmVkQ3VzdG9tR3JhbW1hciksXG4gICAgICAgICAgbm9taW5hbFBhcnNlciA9IG5vbWluYWxQYXJzZXJGcm9tQ29tYmluZWRDdXN0b21HcmFtbWFyKE5vbWluYWxQYXJzZXIsIGNvbWJpbmVkQ3VzdG9tR3JhbW1hciksXG4gICAgICAgICAgbGV4ZXIgPSBub21pbmFsTGV4ZXIsIC8vL1xuICAgICAgICAgIHBhcnNlciA9IG5vbWluYWxQYXJzZXIsIC8vL1xuICAgICAgICAgIHR5cGVzID0gbnVsbCxcbiAgICAgICAgICBydWxlcyA9IG51bGwsXG4gICAgICAgICAgYXhpb21zID0gbnVsbCxcbiAgICAgICAgICBsZW1tYXMgPSBudWxsLFxuICAgICAgICAgIHNjaGVtYXMgPSBudWxsLFxuICAgICAgICAgIHRoZW9yZW1zID0gbnVsbCxcbiAgICAgICAgICBnZW5lcmF0b3JzID0gbnVsbCxcbiAgICAgICAgICBjb25qZWN0dXJlcyA9IG51bGwsXG4gICAgICAgICAgY29tYmluYXRvcnMgPSBudWxsLFxuICAgICAgICAgIHR5cGVQcmVmaXhlcyA9IG51bGwsXG4gICAgICAgICAgY29uc3RydWN0b3JzID0gbnVsbCxcbiAgICAgICAgICBkZWNsYXJlZFZhcmlhYmxlcyA9IG51bGwsXG4gICAgICAgICAgZGVjbGFyZWRNZXRhdmFyaWFibGVzID0gbnVsbCxcbiAgICAgICAgICBub21pbmFsRmlsZUNvbnRleHQgPSBGaWxlQ29udGV4dC5mcm9tSlNPTihOb21pbmFsRmlsZUNvbnRleHQsIGpzb24sIGxleGVyLCBwYXJzZXIsIHR5cGVzLCBydWxlcywgYXhpb21zLCBsZW1tYXMsIHNjaGVtYXMsIHRoZW9yZW1zLCBnZW5lcmF0b3JzLCBjb25qZWN0dXJlcywgY29tYmluYXRvcnMsIHR5cGVQcmVmaXhlcywgY29uc3RydWN0b3JzLCBkZWNsYXJlZFZhcmlhYmxlcywgZGVjbGFyZWRNZXRhdmFyaWFibGVzLCBjb250ZXh0KTtcblxuICAgIHJldHVybiBub21pbmFsRmlsZUNvbnRleHQ7XG4gIH1cbn1cbiJdLCJuYW1lcyI6WyJOb21pbmFsRmlsZUNvbnRleHQiLCJwdXNoIiwiYXJyYXlVdGlsaXRpZXMiLCJub21pbmFsTGV4ZXJGcm9tQ29tYmluZWRDdXN0b21HcmFtbWFyIiwibm9taW5hbFBhcnNlckZyb21Db21iaW5lZEN1c3RvbUdyYW1tYXIiLCJub21pbmFsVXRpbGl0aWVzIiwiRmlsZUNvbnRleHQiLCJjb250ZXh0IiwiZmlsZUNvbnRlbnQiLCJmaWxlUGF0aCIsInRva2VucyIsIm5vZGUiLCJqc29uIiwibGV4ZXIiLCJwYXJzZXIiLCJ0eXBlcyIsInJ1bGVzIiwiYXhpb21zIiwibGVtbWFzIiwic2NoZW1hcyIsInRoZW9yZW1zIiwiZ2VuZXJhdG9ycyIsImNvbmplY3R1cmVzIiwiY29tYmluYXRvcnMiLCJ0eXBlUHJlZml4ZXMiLCJjb25zdHJ1Y3RvcnMiLCJkZWNsYXJlZFZhcmlhYmxlcyIsImRlY2xhcmVkTWV0YXZhcmlhYmxlcyIsImdldExleGVyIiwiZ2V0UGFyc2VyIiwiZ2V0RXF1aXZhbGVuY2VzIiwiZXF1aXZhbGVuY2VzIiwiZ2V0U3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucyIsInN1YnByb29mT3JQcm9vZkFzc2VydGlvbnMiLCJnZXRMYWJlbHMiLCJpbmNsdWRlUmVsZWFzZSIsImxhYmVscyIsInJlbGVhc2VDb250ZXh0TGFiZWxzIiwiZm9yRWFjaCIsInJ1bGUiLCJydWxlTGFiZWxzIiwiYXhpb20iLCJheGlvbUxhYmVscyIsImxlbW1hIiwibGVtbWFMYWJlbHMiLCJ0aGVvcmVtIiwidGhlb3JlbUxhYmVscyIsImNvbmplY3R1cmUiLCJjb25qZWN0dXJlTGFiZWxzIiwic2NoZW1hIiwic2NoZW1hTGFiZWwiLCJnZXRMYWJlbCIsImdldFR5cGVzIiwiZ2V0UnVsZXMiLCJnZXRBeGlvbXMiLCJnZXRMZW1tYXMiLCJnZXRTY2hlbWFzIiwiZ2V0VGhlb3JlbXMiLCJnZXRHZW5lcmF0b3JzIiwiZ2V0Q29uamVjdHVyZXMiLCJnZXRDb21iaW5hdG9ycyIsImdldFR5cGVQcmVmaXhlcyIsImdldENvbnN0cnVjdG9ycyIsImdldFByb2NlZHVyZXMiLCJwcm9jZWR1cmVzIiwiZ2V0VG9wTGV2ZWxBc3NlcnRpb25zIiwidG9wTGV2ZWxBc3NlcnRpb25zIiwiZ2V0RGVjbGFyZWRWYXJpYWJsZXMiLCJnZXREZWNsYXJlZE1ldGF2YXJpYWJsZXMiLCJnZXRUZXJtcyIsInRlcm1zIiwiZ2V0R29hbHMiLCJnb2FscyIsImdldEZyYW1lcyIsImZyYW1lcyIsImdldEVxdWFsaXRpZXMiLCJlcXVhbGl0aWVzIiwiZ2V0SnVkZ2VtZW50cyIsImp1ZGdlbWVudHMiLCJnZXRBc3NlcnRpb25zIiwiYXNzZXJ0aW9ucyIsImdldFN0YXRlbWVudHMiLCJzdGF0ZW1lbnRzIiwiZ2V0U2lnbmF0dXJlcyIsInNpZ25hdHVyZXMiLCJnZXRSZWZlcmVuY2VzIiwicmVmZXJlbmNlcyIsImdldEFzc3VtcHRpb25zIiwiYXNzdW1wdGlvbnMiLCJnZXRNZXRhdmFyaWFibGVzIiwibWV0YXZhcmlhYmxlcyIsImdldFN1YnN0aXR1dGlvbnMiLCJzdWJzdGl0dXRpb25zIiwiZ2V0RGVyaXZlZFN1YnN0aXR1dGlvbnMiLCJkZXJpdmVkU3Vic3RpdHV0aW9ucyIsImdldFByb3BlcnRpZXMiLCJwcm9wZXJ0aWVzIiwidHlwZSIsImFkZFR5cGUiLCJnZXRGaWxlUGF0aCIsInR5cGVTdHJpbmciLCJnZXRTdHJpbmciLCJ0cmFjZSIsImFkZFJ1bGUiLCJydWxlU3RyaW5nIiwiYWRkQXhpb20iLCJheGlvbVN0cmluZyIsImFkZExlbW1hIiwibGVtbWFTdHJpbmciLCJhZGRTY2hlbWEiLCJzY2hlbWFTdHJpbmciLCJhZGRUaGVvcmVtIiwidGhlb3JlbVN0cmluZyIsImFkZEdlbmVyYXRvciIsImdlbmVyYXRvciIsImdlbmVyYXRvclN0cmluZyIsImFkZENvbmplY3R1cmUiLCJvY25qZWN0dXJlU3RyaW5nIiwiYWRkQ29tYmluYXRvciIsImNvbWJpbmF0b3IiLCJjb21iaW5hdG9yU3RyaW5nIiwiYWRkVHlwZVByZWZpeCIsInR5cGVQcmVmaXgiLCJ0eXBlUHJlZml4U3RyaW5nIiwiYWRkQ29uc3RydWN0b3IiLCJjb25zdHJ1Y3RvciIsImNvbnN0cnVjdG9yU3RyaW5nIiwiYWRkRGVjbGFyZWRWYXJpYWJsZSIsImRlY2xhcmVkVmFyaWFibGUiLCJkZWNsYXJlZFZhcmlhYmxlU3RyaW5nIiwiYWRkRGVjbGFyZWRNZXRhdmFyaWFibGUiLCJkZWNsYXJlZE1ldGF2YXJpYWJsZSIsImRlY2xhcmVkTWV0YXZhcmlhYmxlU3RyaW5nIiwiZmluZE1ldGF2YXJpYWJsZSIsIm1ldGF2YXJpYWJsZSIsImZpbmQiLCJtZXRhdmFyaWFibGVVbmlmaWVzIiwidW5pZnlNZXRhdmFyaWFibGUiLCJmaW5kUnVsZUJ5UmVmZXJlbmNlIiwicmVmZXJlbmNlIiwibWV0YXZhcmlhYmxlTm9kZSIsImdldE1ldGF2YXJpYWJsZU5vZGUiLCJtZXRhdmFyaWFibGVOb2RlTWF0Y2hlcyIsIm1hdGNoTWV0YXZhcmlhYmxlTm9kZSIsImZpbmRBeGlvbUJ5UmVmZXJlbmNlIiwiZmluZExlbW1hQnlSZWZlcmVuY2UiLCJmaW5kVGhlb3JlbUJ5UmVmZXJlbmNlIiwiZmluZENvbmplY3R1cmVCeVJlZmVyZW5jZSIsImZpbmRUb3BMZXZlbEFzc2VydGlvbkJ5UmVmZXJlbmNlIiwidG9wTEV2ZWxBc3NlcnRpb25zIiwidG9wTGV2ZWxBc3NlcnRpb24iLCJmaW5kVHlwZUJ5VHlwZU5hbWUiLCJ0eXBlTmFtZSIsImZpbmRUeXBlIiwidHlwZUNvbXBhcmVzVG9UeXBlTmFtZSIsImNvbXBhcmVUeXBlTmFtZSIsImZpbmRUeXBlQnlOb21pbmFsVHlwZU5hbWUiLCJub21pbmFsVHlwZU5hbWUiLCJ0eXBlQ29tcGFyZXNUb05vbWluYWxUeXBlTmFtZSIsImNvbXBhcmVOb21pbmFsVHlwZU5hbWUiLCJmaW5kVHlwZUJ5UHJlZml4ZWRUeXBlTmFtZSIsInByZWZpeGVkVHlwZU5hbWUiLCJ0eXBlQ29tcGFyZXNUb1ByZWZpeGVkVHlwZU5hbWUiLCJjb21wYXJlUHJlZml4ZWRUeXBlTmFtZSIsImZpbmRUeXBlUHJlZml4QnlUeXBlUHJlZml4TmFtZSIsInR5cGVQcmVmaXhOYW1lIiwidHlwZVByZWZpeENvbXBhcmVzVG9UeXBlUHJlZml4TmFtZSIsImNvbXBhcmVUeXBlUHJlZml4TmFtZSIsImZpbmREZWNsYXJlZFZhcmlhYmxlQnlWYXJpYWJsZUlkZW50aWZpZXIiLCJWYXJpYWJsZUlkZW50aXRpZmVyIiwiZGVjbGFyZWRWYXJpYWJsZUNvbXBhcmVzVG9WYXJpYWJsZUlkZW50aXRpZmVyIiwiY29tcGFyZVZhcmlhYmxlSWRlbnRpZmllciIsImZpbmREZWNsYXJlZE1ldGF2YXJpYWJsZUJ5TWV0YXZhcmlhYmxlTmFtZSIsIm1ldGF2YXJpYWJsZU5hbWUiLCJkZWNsYXJlZE1ldGF2YXJpYWJsZUNvbXBhcmVzVG9NZXRhdmFyaWFibGVOYW1lIiwiY29tcGFyZU1ldGF2YXJpYWJsZU5hbWUiLCJmaW5kTWV0YXZhcmlhYmxlQnlNZXRhdmFyaWFibGVOb2RlIiwiZmluZFN1YnN0aXR1dGlvbkJ5U3Vic3RpdHV0aW9uTm9kZSIsInN1YnN0aXR1dGlvbk5vZGUiLCJzdWJzdGl0dXRpb24iLCJmaW5kQ29uc3RyYWludEJ5Q29uc3RyYWludE5vZGUiLCJjb25zdHJhaW50Tm9kZSIsImNvbnN0cmFpbnQiLCJmaW5kUHJvY2VkdXJlQnlQcm9jZWR1cmVOYW1lIiwicHJvY2VkdXJlTmFtZSIsInByb2NlZHVyZSIsInByb2NlZHVyZUNvbXBhcmVzVG9Qcm9jZWR1cmVOYW1lIiwiY29tcGFyZVByb2NlZHVyZU5hbWUiLCJmaW5kTWV0YVR5cGVCeU1ldGFUeXBlTmFtZSIsIm1ldGFUeXBlTmFtZSIsImlzTGFiZWxQcmVzZW50QnlMYWJlbE5vZGUiLCJsYWJlbE5vZGUiLCJsYWJlbFByZXNlbnQiLCJzb21lIiwibGFiZWwiLCJsYWJlbE5vZGVNYXRjaGVzIiwibWF0Y2hMYWJlbE5vZGUiLCJpc1R5cGVQcmVzZW50QnlUeXBlTmFtZSIsInR5cGVQcmVzZW50IiwiaXNUeXBlUHJlc2VudEJ5Tm9taW5hbFR5cGVOYW1lIiwiaXNUeXBlUHJlc2VudEJ5UHJlZml4ZWRUeXBlTmFtZSIsImlzVHlwZVByZWZpeFByZXNlbnRCeVR5cGVQcmVmaXhOYW1lIiwidHlwZVByZWZpeFByZXNlbnQiLCJpc0RlY2xhcmVkVmFyaWFibGVQcmVzZW50QnlWYXJpYWJsZUlkZW50aWZpZXIiLCJ2YXJpYWJsZUlkZW50aWZpZXIiLCJkZWNsYXJlZFZhcmlhYmxlUHJlc2VudCIsImlzRGVjbGFyZWRNZXRhdmFyaWFibGVQcmVzZW50QnlNZXRhdmFyaWFibGVOYW1lIiwiZGVjbGFyZWRNZXRhdmFyaWFibGVQcmVzZW50IiwiaXNQcm9jZWR1cmVQcmVzZW50QnlQcm9jZWR1cmVOYW1lIiwicHJvY2VkdXJlUHJlc2VudCIsImlzTWV0YUxldmVsIiwibWV0YUxFdmVsIiwiY2xlYXIiLCJjb21wbGV0ZSIsInZlcmlmeUZpbGUiLCJnZXROb2RlIiwiZmlsZU5vZGUiLCJmaWxlVmVyaWZpZXMiLCJpbml0aWFsaXNlIiwiZ2V0SlNPTiIsImZpbGVDb250ZXh0IiwidHlwZXNGcm9tSlNPTiIsImRlY2xhcmVkTWV0YXZhcmlhYmxlc0Zyb21KU09OIiwiZGVjbGFyZWRWYXJpYWJsZXNGcm9tSlNPTiIsInR5cGVQcmVmaXhlc0Zyb21KU09OIiwiZ2VuZXJhdG9yc0Zyb21KU09OIiwiY29tYmluYXRvcnNGcm9tSlNPTiIsImNvbnN0cnVjdG9yc0Zyb21KU09OIiwicnVsZXNGcm9tSlNPTiIsImF4aW9tc0Zyb21KU09OIiwic2NoZW1hc0Zyb21KU09OIiwidGhlb3JlbXNGcm9tSlNPTiIsImNvbmplY3R1cmVzRnJvbUpTT04iLCJ0b0pTT04iLCJ0eXBlc0pTT04iLCJ0eXBlc1RvVHlwZXNKU09OIiwicnVsZXNKU09OIiwicnVsZXNUb1J1bGVzSlNPTiIsImF4aW9tc0pTT04iLCJheGlvbXNUb0F4aW9tc0pTT04iLCJzY2hlbWFzSlNPTiIsInNjaGVtYXNUb1NjaGVtYXNKU09OIiwidGhlb3JlbXNKU09OIiwidGhlb3JlbXNUb1RoZW9yZW1zSlNPTiIsImdlbmVyYXRvcnNKU09OIiwiZ2VuZXJhdG9yc1RvR2VuZXJhdG9yc0pTT04iLCJjb25qZWN0dXJlc0pTT04iLCJjb25qZWN0dXJlc1RvQ29uamVjdHVyZXNKU09OIiwiY29tYmluYXRvcnNKU09OIiwiY29tYmluYXRvcnNUb0NvbWJpbmF0b3JzSlNPTiIsInR5cGVQcmVmaXhlc0pTT04iLCJ0eXBlUHJlZml4ZXNUb1R5cGVQcmVmaXhlc0pTT04iLCJjb25zdHJ1Y3RvcnNKU09OIiwiY29uc3RydWN0b3JzVG9Db25zdHJ1Y3RvcnNKU09OIiwiZGVjbGFyZWRWYXJpYWJsZXNKU09OIiwiZGVjbGFyZWRWYXJpYWJsZXNUb0RlY2xhcmVkVmFyaWFibGVzSlNPTiIsImRlY2xhcmVkTWV0YXZhcmlhYmxlc0pTT04iLCJkZWNsYXJlZE1ldGF2YXJpYWJsZXNUb0RlY2xhcmVkTWV0YXZhcmlhYmxlc0pTT04iLCJmcm9tRmlsZSIsImZpbGUiLCJyZWxlYXNlQ29udGV4dCIsImNvbWJpbmVkQ3VzdG9tR3JhbW1hciIsImdldENvbWJpbmVkQ3VzdG9tR3JhbW1hciIsIm5vbWluYWxMZXhlciIsIk5vbWluYWxMZXhlciIsIm5vbWluYWxQYXJzZXIiLCJOb21pbmFsUGFyc2VyIiwibm9taW5hbEZpbGVDb250ZXh0IiwiZnJvbUpTT04iXSwibWFwcGluZ3MiOiJBQUFBOzs7OytCQXVDQTs7O2VBQXFCQTs7O2dDQXJDeUI7MkJBQ2Y7OERBRU47K0RBQ0M7d0JBRUM7c0JBQ2lCOzJCQUNEO3NCQXdCc0I7Ozs7OztBQUVqRSxNQUFNLEVBQUVDLElBQUksRUFBRSxHQUFHQyx5QkFBYyxFQUN6QixFQUFFQyxxQ0FBcUMsRUFBRUMsc0NBQXNDLEVBQUUsR0FBR0MsZ0NBQWdCO0FBRTNGLE1BQU1MLDJCQUEyQk0sMkJBQVc7SUFDekQsWUFBWUMsT0FBTyxFQUFFQyxXQUFXLEVBQUVDLFFBQVEsRUFBRUMsTUFBTSxFQUFFQyxJQUFJLEVBQUVDLElBQUksRUFBRUMsS0FBSyxFQUFFQyxNQUFNLEVBQUVDLEtBQUssRUFBRUMsS0FBSyxFQUFFQyxNQUFNLEVBQUVDLE1BQU0sRUFBRUMsT0FBTyxFQUFFQyxRQUFRLEVBQUVDLFVB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