occam-verify-cli 1.0.617 → 1.0.632

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 (99) hide show
  1. package/lib/context/ephemeral.js +152 -47
  2. package/lib/context/file/nominal.js +136 -140
  3. package/lib/context/liminal.js +16 -26
  4. package/lib/context/scoped.js +26 -55
  5. package/lib/context.js +103 -53
  6. package/lib/element/assertion/contained.js +3 -1
  7. package/lib/element/assertion/defined.js +5 -3
  8. package/lib/element/assertion/property.js +10 -58
  9. package/lib/element/assertion/satisfies.js +3 -1
  10. package/lib/element/assertion/subproof.js +3 -1
  11. package/lib/element/assertion/type.js +65 -109
  12. package/lib/element/assumption.js +40 -16
  13. package/lib/element/constructor/bracketed.js +13 -53
  14. package/lib/element/constructor.js +5 -5
  15. package/lib/element/declaration/constructor.js +5 -2
  16. package/lib/element/derivation.js +8 -10
  17. package/lib/element/equality.js +102 -62
  18. package/lib/element/equivalence.js +6 -6
  19. package/lib/element/equivalences.js +4 -4
  20. package/lib/element/frame.js +21 -21
  21. package/lib/element/hypothesis.js +5 -7
  22. package/lib/element/judgement.js +47 -25
  23. package/lib/element/metaType.js +2 -2
  24. package/lib/element/metavariable.js +12 -3
  25. package/lib/element/propertyRelation.js +3 -3
  26. package/lib/element/reference.js +9 -21
  27. package/lib/element/rule.js +13 -15
  28. package/lib/element/signature.js +5 -5
  29. package/lib/element/statement.js +23 -25
  30. package/lib/element/subDerivation.js +4 -6
  31. package/lib/element/substitution/frame.js +4 -4
  32. package/lib/element/substitution/reference.js +4 -4
  33. package/lib/element/substitution/statement.js +4 -4
  34. package/lib/element/substitution/term.js +9 -3
  35. package/lib/element/substitution.js +71 -43
  36. package/lib/element/term.js +20 -6
  37. package/lib/element/topLevelAssertion.js +9 -11
  38. package/lib/element/topLevelMetaAssertion.js +9 -11
  39. package/lib/element/variable.js +44 -3
  40. package/lib/process/assign.js +96 -26
  41. package/lib/process/unify.js +3 -4
  42. package/lib/process/validate.js +7 -7
  43. package/lib/process/verify.js +2 -2
  44. package/lib/ruleNames.js +5 -1
  45. package/lib/utilities/element.js +74 -12
  46. package/lib/utilities/json.js +2 -2
  47. package/lib/utilities/string.js +9 -24
  48. package/lib/utilities/substitutions.js +14 -22
  49. package/lib/utilities/validation.js +3 -3
  50. package/package.json +4 -4
  51. package/src/context/ephemeral.js +170 -50
  52. package/src/context/file/nominal.js +136 -141
  53. package/src/context/liminal.js +22 -34
  54. package/src/context/scoped.js +33 -74
  55. package/src/context.js +97 -46
  56. package/src/element/assertion/contained.js +4 -0
  57. package/src/element/assertion/defined.js +6 -2
  58. package/src/element/assertion/property.js +15 -26
  59. package/src/element/assertion/satisfies.js +4 -0
  60. package/src/element/assertion/subproof.js +4 -0
  61. package/src/element/assertion/type.js +69 -77
  62. package/src/element/assumption.js +48 -16
  63. package/src/element/constructor/bracketed.js +11 -12
  64. package/src/element/constructor.js +4 -4
  65. package/src/element/declaration/constructor.js +5 -1
  66. package/src/element/derivation.js +3 -5
  67. package/src/element/equality.js +109 -74
  68. package/src/element/equivalence.js +7 -7
  69. package/src/element/equivalences.js +7 -5
  70. package/src/element/frame.js +25 -25
  71. package/src/element/hypothesis.js +4 -6
  72. package/src/element/judgement.js +54 -24
  73. package/src/element/metaType.js +1 -1
  74. package/src/element/metavariable.js +16 -3
  75. package/src/element/propertyRelation.js +2 -2
  76. package/src/element/reference.js +12 -26
  77. package/src/element/rule.js +8 -10
  78. package/src/element/signature.js +4 -4
  79. package/src/element/statement.js +27 -30
  80. package/src/element/subDerivation.js +3 -5
  81. package/src/element/substitution/frame.js +1 -1
  82. package/src/element/substitution/reference.js +1 -1
  83. package/src/element/substitution/statement.js +1 -1
  84. package/src/element/substitution/term.js +4 -2
  85. package/src/element/substitution.js +60 -36
  86. package/src/element/term.js +24 -5
  87. package/src/element/topLevelAssertion.js +4 -6
  88. package/src/element/topLevelMetaAssertion.js +4 -6
  89. package/src/element/variable.js +2 -0
  90. package/src/process/assign.js +114 -37
  91. package/src/process/unify.js +2 -3
  92. package/src/process/validate.js +5 -5
  93. package/src/process/verify.js +1 -1
  94. package/src/ruleNames.js +1 -0
  95. package/src/utilities/element.js +83 -26
  96. package/src/utilities/json.js +1 -1
  97. package/src/utilities/string.js +7 -29
  98. package/src/utilities/substitutions.js +18 -29
  99. package/src/utilities/validation.js +2 -2
@@ -243,7 +243,7 @@ function metaTypeFromJSON(json, context) {
243
243
  if (metaType !== null) {
244
244
  json = metaType; ///
245
245
  var name = json.name, metaTypeName = name; ///
246
- metaType = (0, _metaTypes.findMetaTypeByMetaTypeName)(metaTypeName);
246
+ metaType = context.findMetaTypeByMetaTypeName(metaTypeName);
247
247
  }
248
248
  return metaType;
249
249
  }
@@ -724,4 +724,4 @@ function metavariablesToMetavariablesJSON(metavariables) {
724
724
  return metavariablesJSON;
725
725
  }
726
726
 
727
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsaXRpZXMvanNvbi5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IGVsZW1lbnRzIGZyb20gXCIuLi9lbGVtZW50c1wiO1xuXG5pbXBvcnQgeyBmaW5kTWV0YVR5cGVCeU1ldGFUeXBlTmFtZSB9IGZyb20gXCIuLi9tZXRhVHlwZXNcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIHRlcm1Gcm9tSlNPTihqc29uLCBjb250ZXh0KSB7XG4gIGxldCB7IHRlcm0gfSA9IGpzb247XG5cbiAgY29uc3QgdGVybUpTT04gPSB0ZXJtOyAgLy8vXG5cbiAganNvbiA9IHRlcm1KU09OOyAgLy8vXG5cbiAgY29uc3QgeyBUZXJtIH0gPSBlbGVtZW50cztcblxuICB0ZXJtID0gVGVybS5mcm9tSlNPTihqc29uLCBjb250ZXh0KTtcblxuICByZXR1cm4gdGVybTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVGcm9tSlNPTihqc29uLCBjb250ZXh0KSB7XG4gIGxldCB7IHR5cGUgfSA9IGpzb247XG5cbiAgaWYgKHR5cGUgIT09IG51bGwpIHtcbiAgICBqc29uID0gdHlwZTsgIC8vL1xuXG4gICAgY29uc3QgeyBuYW1lLCBwcmVmaXhOYW1lIH0gPSBqc29uLFxuICAgICAgICAgIG5vbWluYWxUeXBlTmFtZSA9IChwcmVmaXhOYW1lICE9PSBudWxsKSA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYCR7cHJlZml4TmFtZX0ke25hbWV9YCA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTsgLy8vXG5cbiAgICB0eXBlID0gY29udGV4dC5maW5kVHlwZUJ5Tm9taW5hbFR5cGVOYW1lKG5vbWluYWxUeXBlTmFtZSk7XG4gIH1cblxuICByZXR1cm4gdHlwZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1ldGFUeXBlRnJvbUpTT04oanNvbiwgY29udGV4dCkge1xuICBsZXQgeyBtZXRhVHlwZSB9ID0ganNvbjtcblxuICBpZiAobWV0YVR5cGUgIT09IG51bGwpIHtcbiAgICBqc29uID0gbWV0YVR5cGU7ICAvLy9cblxuICAgIGNvbnN0IHsgbmFtZSB9ID0ganNvbixcbiAgICAgICAgICBtZXRhVHlwZU5hbWUgPSBuYW1lOyAgLy8vXG5cbiAgICBtZXRhVHlwZSA9IGZpbmRNZXRhVHlwZUJ5TWV0YVR5cGVOYW1lKG1ldGFUeXBlTmFtZSk7XG4gIH1cblxuICByZXR1cm4gbWV0YVR5cGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGF0ZW1lbnRGcm9tSlNPTihqc29uLCBjb250ZXh0KSB7XG4gIGxldCB7IHN0YXRlbWVudCA9IG51bGwgfSA9IGpzb247XG5cbiAgaWYgKHN0YXRlbWVudCAhPT0gbnVsbCkge1xuICAgIGNvbnN0IHsgU3RhdGVtZW50IH0gPSBlbGVtZW50cyxcbiAgICAgICAgICBzdGF0ZW1lbnRKU09OID0gc3RhdGVtZW50OyAgLy8vXG5cbiAgICBqc29uID0gc3RhdGVtZW50SlNPTjsgLy8vXG5cbiAgICBzdGF0ZW1lbnQgPSBTdGF0ZW1lbnQuZnJvbUpTT04oanNvbiwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gc3RhdGVtZW50O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGVkdWN0aW9uRnJvbUpTT04oanNvbiwgY29udGV4dCkge1xuICBsZXQgeyBkZWR1Y3Rpb24gfSA9IGpzb247XG5cbiAgY29uc3QgeyBEZWR1Y3Rpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBkZWR1Y3Rpb25KU09OID0gZGVkdWN0aW9uOyAgLy8vXG5cbiAganNvbiA9IGRlZHVjdGlvbkpTT047ICAvLy9cblxuICBkZWR1Y3Rpb24gPSBEZWR1Y3Rpb24uZnJvbUpTT04oanNvbiwgY29udGV4dCk7XG5cbiAgcmV0dXJuIGRlZHVjdGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNpZ25hdHVyZUZyb21KU09OKGpzb24sIGNvbnRleHQpIHtcbiAgbGV0IHsgc2lnbmF0dXJlID0gbnVsbCB9ID0ganNvbjtcblxuICBpZiAoc2lnbmF0dXJlICE9PSBudWxsKSB7XG4gICAgY29uc3QgeyBTaWduYXR1cmUgfSA9IGVsZW1lbnRzLFxuICAgICAgICAgIHNpZ25hdHVyZUpTT04gPSBzaWduYXR1cmU7ICAvLy9cblxuICAgIGpzb24gPSBzaWduYXR1cmVKU09OOyAvLy9cblxuICAgIHNpZ25hdHVyZSA9IFNpZ25hdHVyZS5mcm9tSlNPTihqc29uLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBzaWduYXR1cmU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWZlcmVuY2VGcm9tSlNPTihqc29uLCBjb250ZXh0KSB7XG4gIGxldCB7IHJlZmVyZW5jZSB9ID0ganNvbjtcblxuICBjb25zdCB7IFJlZmVyZW5jZSB9ID0gZWxlbWVudHMsXG4gICAgICAgIHJlZmVyZW5jZUpTT04gPSByZWZlcmVuY2U7ICAvLy9cblxuICBqc29uID0gcmVmZXJlbmNlSlNPTjsgLy8vXG5cbiAgcmVmZXJlbmNlID0gUmVmZXJlbmNlLmZyb21KU09OKGpzb24sIGNvbnRleHQpO1xuXG4gIHJldHVybiByZWZlcmVuY2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb25jbHVzaW9uRnJvbUpTT04oanNvbiwgY29udGV4dCkge1xuICBsZXQgeyBjb25jbHVzaW9uIH0gPSBqc29uO1xuXG4gIGNvbnN0IHsgQ29uY2x1c2lvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIGNvbmNsdXNpb25KU09OID0gY29uY2x1c2lvbjsgIC8vL1xuXG4gIGpzb24gPSBjb25jbHVzaW9uSlNPTjsgIC8vL1xuXG4gIGNvbmNsdXNpb24gPSBDb25jbHVzaW9uLmZyb21KU09OKGpzb24sIGNvbnRleHQpO1xuXG4gIHJldHVybiBjb25jbHVzaW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWV0YXZhcmlhYmxlRnJvbUpTT04oanNvbiwgY29udGV4dCkge1xuICBsZXQgeyBtZXRhdmFyaWFibGUgfSA9IGpzb247XG5cbiAgY29uc3QgeyBNZXRhdmFyaWFibGUgfSA9IGVsZW1lbnRzLFxuICAgICAgICBtZXRhdmFyaWFibGVKU09OID0gbWV0YXZhcmlhYmxlOyAgLy8vXG5cbiAganNvbiA9IG1ldGF2YXJpYWJsZUpTT047IC8vL1xuXG4gIG1ldGF2YXJpYWJsZSA9IE1ldGF2YXJpYWJsZS5mcm9tSlNPTihqc29uLCBjb250ZXh0KTtcblxuICByZXR1cm4gbWV0YXZhcmlhYmxlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvY2VkdXJlQ2FsbEZyb21KU09OKGpzb24sIGNvbnRleHQpIHtcbiAgbGV0IHsgcHJvY2VkdXJlQ2FsbCA9IG51bGwgfSA9IGpzb247XG5cbiAgaWYgKHByb2NlZHVyZUNhbGwgIT09IG51bGwpIHtcbiAgICBjb25zdCB7IFByb2NlZHVyZUNhbGwgfSA9IGVsZW1lbnRzLFxuICAgICAgICAgIHByb2NlZHVyZUNhbGxKU09OID0gcHJvY2VkdXJlQ2FsbDsgIC8vL1xuXG4gICAganNvbiA9IHByb2NlZHVyZUNhbGxKU09OOyAvLy9cblxuICAgIHByb2NlZHVyZUNhbGwgPSBQcm9jZWR1cmVDYWxsLmZyb21KU09OKGpzb24sIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHByb2NlZHVyZUNhbGw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9jZWR1cmVSZWZlcmVuY2VGcm9tSlNPTihqc29uLCBjb250ZXh0KSB7XG4gIGxldCB7IHByb2NlZHVyZVJlZmVyZW5jZSB9ID0ganNvbjtcblxuICBjb25zdCB7IFByb2NlZHVyZVJlZmVyZW5jZSB9ID0gZWxlbWVudHMsXG4gICAgICAgIHByb2NlZHVyZVJlZmVyZW5jZUpTT04gPSBwcm9jZWR1cmVSZWZlcmVuY2U7ICAvLy9cblxuICBqc29uID0gcHJvY2VkdXJlUmVmZXJlbmNlSlNPTjsgIC8vL1xuXG4gIHByb2NlZHVyZVJlZmVyZW5jZSA9IFByb2NlZHVyZVJlZmVyZW5jZS5mcm9tSlNPTihqc29uLCBjb250ZXh0KTtcblxuICByZXR1cm4gcHJvY2VkdXJlUmVmZXJlbmNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHlwZXNGcm9tSlNPTihqc29uLCB0eXBlcywgY29udGV4dCkge1xuICBjb25zdCB7IHR5cGVzOiB0eXBlc0pTT04gfSA9IGpzb247XG5cbiAgY29uc3QgeyBUeXBlIH0gPSBlbGVtZW50cztcblxuICB0eXBlc0pTT04uZm9yRWFjaCgodHlwZUpTT04pID0+IHtcbiAgICBjb25zdCBqc29uID0gdHlwZUpTT04sICAvLy9cbiAgICAgICAgICB0eXBlID0gVHlwZS5mcm9tSlNPTihqc29uLCBjb250ZXh0KTtcblxuICAgIHR5cGVzLnB1c2godHlwZSk7XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGVybXNGcm9tSlNPTihqc29uLCBjb250ZXh0KSB7XG4gIGxldCB7IHRlcm1zIH0gPSBqc29uO1xuXG4gIGNvbnN0IHsgVGVybSB9ID0gZWxlbWVudHMsXG4gICAgICAgIHRlcm1zSlNPTiA9IHRlcm1zOyAvLy9cblxuICB0ZXJtcyA9IHRlcm1zSlNPTi5tYXAoKHRlcm1KU09OKSA9PiB7XG4gICAgY29uc3QganNvbiA9IHRlcm1KU09OLCAgLy8vXG4gICAgICAgICAgdGVybSA9IFRlcm0uZnJvbUpTT04oanNvbiwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gdGVybTtcbiAgfSk7XG5cbiAgcmV0dXJuIHRlcm1zO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcnVsZXNGcm9tSlNPTihqc29uLCBjb250ZXh0KSB7XG4gIGxldCB7IHJ1bGVzIH0gPSBqc29uO1xuXG4gIGNvbnN0IHsgUnVsZSB9ID0gZWxlbWVudHMsXG4gICAgICAgIHJ1bGVzSlNPTiA9IHJ1bGVzOyAvLy9cblxuICBydWxlcyA9IHJ1bGVzSlNPTi5tYXAoKHJ1bGVKU09OKSA9PiB7XG4gICAgY29uc3QganNvbiA9IHJ1bGVKU09OLCAgLy8vXG4gICAgICAgICAgcnVsZSA9IFJ1bGUuZnJvbUpTT04oanNvbiwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gcnVsZTtcbiAgfSk7XG5cbiAgcmV0dXJuIHJ1bGVzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbGFiZWxGcm9tSlNPTihqc29uLCBjb250ZXh0KSB7XG4gIGxldCB7IGxhYmVsIH0gPSBqc29uO1xuXG4gIGNvbnN0IHsgTGFiZWwgfSA9IGVsZW1lbnRzLFxuICAgICAgICBsYWJlbEpTT04gPSBsYWJlbDsgIC8vL1xuXG4gIGpzb24gPSBsYWJlbEpTT047IC8vL1xuXG4gIGxhYmVsID0gTGFiZWwuZnJvbUpTT04oanNvbiwgY29udGV4dCk7XG5cbiAgcmV0dXJuIGxhYmVsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZnJhbWVzRnJvbUpTT04oanNvbiwgY29udGV4dCkge1xuICBsZXQgeyBmcmFtZXMgfSA9IGpzb247XG5cbiAgY29uc3QgeyBGcmFtZSB9ID0gZWxlbWVudHMsXG4gICAgICAgIGZyYW1lc0pTT04gPSBmcmFtZXM7IC8vL1xuXG4gIGZyYW1lcyA9IGZyYW1lc0pTT04ubWFwKChmcmFtZUpTT04pID0+IHtcbiAgICBjb25zdCBqc29uID0gZnJhbWVKU09OLCAgLy8vXG4gICAgICAgICAgZnJhbWUgPSBGcmFtZS5mcm9tSlNPTihqc29uLCBjb250ZXh0KTtcblxuICAgIHJldHVybiBmcmFtZTtcbiAgfSk7XG5cbiAgcmV0dXJuIGZyYW1lcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxhYmVsc0Zyb21KU09OKGpzb24sIGNvbnRleHQpIHtcbiAgbGV0IHsgbGFiZWxzIH0gPSBqc29uO1xuXG4gIGNvbnN0IHsgTGFiZWwgfSA9IGVsZW1lbnRzLFxuICAgICAgICBsYWJlbHNKU09OID0gbGFiZWxzOyAgLy8vXG5cbiAgbGFiZWxzID0gbGFiZWxzSlNPTi5tYXAoKGxhYmVsSlNPTikgPT4ge1xuICAgIGNvbnN0IGpzb24gPSBsYWJlbEpTT04sIC8vL1xuICAgICAgICAgIGxhYmVsID0gTGFiZWwuZnJvbUpTT04oanNvbiwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gbGFiZWw7XG4gIH0pO1xuXG4gIHJldHVybiBsYWJlbHM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBheGlvbXNGcm9tSlNPTihqc29uLCBjb250ZXh0KSB7XG4gIGxldCB7IGF4aW9tcyB9ID0ganNvbjtcblxuICBjb25zdCB7IEF4aW9tIH0gPSBlbGVtZW50cyxcbiAgICAgICAgYXhpb21zSlNPTiA9IGF4aW9tczsgLy8vXG5cbiAgYXhpb21zID0gYXhpb21zSlNPTi5tYXAoKGF4aW9tSlNPTikgPT4ge1xuICAgIGNvbnN0IGpzb24gPSBheGlvbUpTT04sICAvLy9cbiAgICAgICAgICBheGlvbSA9IEF4aW9tLmZyb21KU09OKGpzb24sIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIGF4aW9tO1xuICB9KTtcblxuICByZXR1cm4gYXhpb21zO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJlbWlzZXNGcm9tSlNPTihqc29uLCBjb250ZXh0KSB7XG4gIGxldCB7IHByZW1pc2VzIH0gPSBqc29uO1xuXG4gIGNvbnN0IHsgUHJlbWlzZSB9ID0gZWxlbWVudHMsXG4gICAgICAgIHByZW1pc2VzSlNPTiA9IHByZW1pc2VzOyAgLy8vXG5cbiAgcHJlbWlzZXMgPSBwcmVtaXNlc0pTT04ubWFwKChwcmVtaXNlSlNPTikgPT4ge1xuICAgIGNvbnN0IGpzb24gPSBwcmVtaXNlSlNPTiwgLy8vXG4gICAgICAgICAgcHJlbWlzZSA9IFByZW1pc2UuZnJvbUpTT04oanNvbiwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gcHJlbWlzZTtcbiAgfSk7XG5cbiAgcmV0dXJuIHByZW1pc2VzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGhlb3JlbXNGcm9tSlNPTihqc29uLCBjb250ZXh0KSB7XG4gIGxldCB7IHRoZW9yZW1zIH0gPSBqc29uO1xuXG4gIGNvbnN0IHsgVGhlb3JlbSB9ID0gZWxlbWVudHMsXG4gICAgICAgIHRoZW9yZW1zSlNPTiA9IHRoZW9yZW1zOyAvLy9cblxuICB0aGVvcmVtcyA9IHRoZW9yZW1zSlNPTi5tYXAoKHRoZW9yZW1KU09OKSA9PiB7XG4gICAgY29uc3QganNvbiA9IHRoZW9yZW1KU09OLCAgLy8vXG4gICAgICAgICAgdGhlb3JlbSA9IFRoZW9yZW0uZnJvbUpTT04oanNvbiwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gdGhlb3JlbTtcbiAgfSk7XG5cbiAgcmV0dXJuIHRoZW9yZW1zO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFyaWFibGVzRnJvbUpTT04oanNvbiwgY29udGV4dCkge1xuICBsZXQgeyB2YXJpYWJsZXMgfSA9IGpzb247XG5cbiAgY29uc3QgeyBWYXJpYWJsZSB9ID0gZWxlbWVudHMsXG4gICAgICAgIHZhcmlhYmxlc0pTT04gPSB2YXJpYWJsZXM7IC8vL1xuXG4gIHZhcmlhYmxlcyA9IHZhcmlhYmxlc0pTT04ubWFwKCh2YXJpYWJsZUpTT04pID0+IHtcbiAgICBjb25zdCBqc29uID0gdmFyaWFibGVKU09OLCAgLy8vXG4gICAgICAgICAgdmFyaWFibGUgPSBWYXJpYWJsZS5mcm9tSlNPTihqc29uLCBjb250ZXh0KTtcblxuICAgIHJldHVybiB2YXJpYWJsZTtcbiAgfSk7XG5cbiAgcmV0dXJuIHZhcmlhYmxlcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb3BlcnRpZXNGcm9tSlNPTihqc29uLCBjb250ZXh0KSB7XG4gIGxldCB7IHByb3BlcnRpZXMgfSA9IGpzb247XG5cbiAgY29uc3QgeyBQcm9wZXJ0eSB9ID0gZWxlbWVudHMsXG4gICAgICAgIHByb3BlcnRpZXNKU09OID0gcHJvcGVydGllczsgLy8vXG5cbiAgcHJvcGVydGllcyA9IHByb3BlcnRpZXNKU09OLm1hcCgocHJvcGVydHlKU09OKSA9PiB7XG4gICAgY29uc3QganNvbiA9IHByb3BlcnR5SlNPTiwgIC8vL1xuICAgICAgICAgIHByb3BlcnR5ID0gUHJvcGVydHkuZnJvbUpTT04oanNvbiwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gcHJvcGVydHk7XG4gIH0pO1xuXG4gIHJldHVybiBwcm9wZXJ0aWVzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3VwZXJUeXBlc0Zyb21KU09OKGpzb24sIGNvbnRleHQpIHtcbiAgY29uc3QgeyBzdXBlclR5cGVzOiBzdXBlclR5cGVzSlNPTiB9ID0ganNvbjtcblxuICBjb25zdCBzdXBlclR5cGVzID0gc3VwZXJUeXBlc0pTT04ubWFwKChzdXBlclR5cGVKU09OKSA9PiB7XG4gICAgICAgICAgY29uc3QganNvbiA9IHN1cGVyVHlwZUpTT04sICAvLy9cbiAgICAgICAgICAgICAgICB7IG5hbWUsIHByZWZpeE5hbWUgfSA9IGpzb24sXG4gICAgICAgICAgICAgICAgbm9taW5hbFN1cGVyVHlwZU5hbWUgPSAocHJlZml4TmFtZSAhPT0gbnVsbCkgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgJHtwcmVmaXhOYW1lfSR7bmFtZX1gIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSwgLy8vXG4gICAgICAgICAgICAgICAgc3VwZXJUeXBlID0gY29udGV4dC5maW5kVHlwZUJ5Tm9taW5hbFR5cGVOYW1lKG5vbWluYWxTdXBlclR5cGVOYW1lKTtcblxuICAgICAgICAgIHJldHVybiBzdXBlclR5cGU7XG4gICAgICAgIH0pO1xuXG4gIHJldHVybiBzdXBlclR5cGVzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaHlwb3RoZXNlc0Zyb21KU09OKGpzb24sIGNvbnRleHQpIHtcbiAgbGV0IHsgaHlwb3RoZXNlcyB9ID0ganNvbjtcblxuICBjb25zdCB7IEh5cG90aGVzaXMgfSA9IGVsZW1lbnRzLFxuICAgICAgICBoeXBvdGhlc2VzSlNPTiA9IGh5cG90aGVzZXM7ICAvLy9cblxuICBoeXBvdGhlc2VzID0gaHlwb3RoZXNlc0pTT04ubWFwKChoeXBvdGhlc2lzSlNPTikgPT4ge1xuICAgIGNvbnN0IGpzb24gPSBoeXBvdGhlc2lzSlNPTiwgLy8vXG4gICAgICAgICAgaHlwb3RoZXNpcyA9IEh5cG90aGVzaXMuZnJvbUpTT04oanNvbiwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gaHlwb3RoZXNpcztcbiAgfSk7XG5cbiAgcmV0dXJuIGh5cG90aGVzZXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJhbWV0ZXJzRnJvbUpTT04oanNvbiwgY29udGV4dCkge1xuICBsZXQgeyBwYXJhbWV0ZXJzIH0gPSBqc29uO1xuXG4gIGNvbnN0IHsgUGFyYW1ldGVyIH0gPSBlbGVtZW50cyxcbiAgICAgICAgcGFyYW1ldGVyc0pTT04gPSBwYXJhbWV0ZXJzOyAvLy9cblxuICBwYXJhbWV0ZXJzID0gcGFyYW1ldGVyc0pTT04ubWFwKChwYXJhbWV0ZXJKU09OKSA9PiB7XG4gICAgY29uc3QganNvbiA9IHBhcmFtZXRlckpTT04sICAvLy9cbiAgICAgICAgICBwYXJhbWV0ZXIgPSBQYXJhbWV0ZXIuZnJvbUpTT04oanNvbiwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gcGFyYW1ldGVyO1xuICB9KTtcblxuICByZXR1cm4gcGFyYW1ldGVycztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbmplY3R1cmVzRnJvbUpTT04oanNvbiwgY29udGV4dCkge1xuICBsZXQgeyBjb25qZWN0dXJlcyB9ID0ganNvbjtcblxuICBjb25zdCB7IENvbmplY3R1cmUgfSA9IGVsZW1lbnRzLFxuICAgICAgICBjb25qZWN0dXJlc0pTT04gPSBjb25qZWN0dXJlczsgLy8vXG5cbiAgY29uamVjdHVyZXMgPSBjb25qZWN0dXJlc0pTT04ubWFwKChjb25qZWN0dXJlSlNPTikgPT4ge1xuICAgIGNvbnN0IGpzb24gPSBjb25qZWN0dXJlSlNPTiwgIC8vL1xuICAgICAgICAgIGNvbmplY3R1cmUgPSBDb25qZWN0dXJlLmZyb21KU09OKGpzb24sIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIGNvbmplY3R1cmU7XG4gIH0pO1xuXG4gIHJldHVybiBjb25qZWN0dXJlcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbWJpbmF0b3JzRnJvbUpTT04oanNvbiwgY29udGV4dCkge1xuICBsZXQgeyBjb21iaW5hdG9ycyB9ID0ganNvbjtcblxuICBjb25zdCB7IENvbWJpbmF0b3IgfSA9IGVsZW1lbnRzLFxuICAgICAgICBjb21iaW5hdG9yc0pTT04gPSBjb21iaW5hdG9yczsgLy8vXG5cbiAgY29tYmluYXRvcnMgPSBjb21iaW5hdG9yc0pTT04ubWFwKChjb21iaW5hdG9ySlNPTikgPT4ge1xuICAgIGNvbnN0IGpzb24gPSBjb21iaW5hdG9ySlNPTiwgIC8vL1xuICAgICAgICAgIGNvbWJpbmF0b3IgPSBDb21iaW5hdG9yLmZyb21KU09OKGpzb24sIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIGNvbWJpbmF0b3I7XG4gIH0pO1xuXG4gIHJldHVybiBjb21iaW5hdG9ycztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVQcmVmaXhlc0Zyb21KU09OKGpzb24sIGNvbnRleHQpIHtcbiAgbGV0IHsgdHlwZVByZWZpeGVzIH0gPSBqc29uO1xuXG4gIGNvbnN0IHsgVHlwZVByZWZpeCB9ID0gZWxlbWVudHMsXG4gICAgICAgIHR5cGVQcmVmaXhlc0pTT04gPSB0eXBlUHJlZml4ZXM7IC8vL1xuXG4gIHR5cGVQcmVmaXhlcyA9IHR5cGVQcmVmaXhlc0pTT04ubWFwKCh0eXBlUHJlZml4SlNPTikgPT4ge1xuICAgIGNvbnN0IGpzb24gPSB0eXBlUHJlZml4SlNPTiwgIC8vL1xuICAgICAgICAgIHR5cGVQcmVmaXggPSBUeXBlUHJlZml4LmZyb21KU09OKGpzb24sIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIHR5cGVQcmVmaXg7XG4gIH0pO1xuXG4gIHJldHVybiB0eXBlUHJlZml4ZXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb25zdHJ1Y3RvcnNGcm9tSlNPTihqc29uLCBjb250ZXh0KSB7XG4gIGxldCB7IGNvbnN0cnVjdG9ycyB9ID0ganNvbjtcblxuICBjb25zdCB7IENvbnN0cnVjdG9yIH0gPSBlbGVtZW50cyxcbiAgICAgICAgY29uc3RydWN0b3JzSlNPTiA9IGNvbnN0cnVjdG9yczsgLy8vXG5cbiAgY29uc3RydWN0b3JzID0gY29uc3RydWN0b3JzSlNPTi5tYXAoKGNvbnN0cnVjdG9ySlNPTikgPT4ge1xuICAgIGNvbnN0IGpzb24gPSBjb25zdHJ1Y3RvckpTT04sICAvLy9cbiAgICAgICAgICBjb25zdHJ1Y3RvciA9IENvbnN0cnVjdG9yLmZyb21KU09OKGpzb24sIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIGNvbnN0cnVjdG9yO1xuICB9KTtcblxuICByZXR1cm4gY29uc3RydWN0b3JzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWV0YXRoZW9yZW1zRnJvbUpTT04oanNvbiwgY29udGV4dCkge1xuICBsZXQgeyBtZXRhdGhlb3JlbXMgfSA9IGpzb247XG5cbiAgY29uc3QgeyBNZXRhdGhlb3JlbSB9ID0gZWxlbWVudHMsXG4gICAgICAgIG1ldGF0aGVvcmVtc0pTT04gPSBtZXRhdGhlb3JlbXM7IC8vL1xuXG4gIG1ldGF0aGVvcmVtcyA9IG1ldGF0aGVvcmVtc0pTT04ubWFwKChtZXRhdGhlb3JlbUpTT04pID0+IHtcbiAgICBjb25zdCBqc29uID0gbWV0YXRoZW9yZW1KU09OLCAgLy8vXG4gICAgICAgICAgbWV0YXRoZW9yZW0gPSBNZXRhdGhlb3JlbS5mcm9tSlNPTihqc29uLCBjb250ZXh0KTtcblxuICAgIHJldHVybiBtZXRhdGhlb3JlbTtcbiAgfSk7XG5cbiAgcmV0dXJuIG1ldGF0aGVvcmVtcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN1cHBvc2l0aW9uc0Zyb21KU09OKGpzb24sIGNvbnRleHQpIHtcbiAgbGV0IHsgc3VwcG9zaXRpb25zIH0gPSBqc29uO1xuXG4gIGNvbnN0IHsgU3VwcG9zaXRpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBzdXBwb3NpdGlvbnNKU09OID0gc3VwcG9zaXRpb25zOyAgLy8vXG5cbiAgc3VwcG9zaXRpb25zID0gc3VwcG9zaXRpb25zSlNPTi5tYXAoKHN1cHBvc2l0aW9uSlNPTikgPT4ge1xuICAgIGNvbnN0IGpzb24gPSBzdXBwb3NpdGlvbkpTT04sIC8vL1xuICAgICAgICAgIHN1cHBvc2l0aW9uID0gU3VwcG9zaXRpb24uZnJvbUpTT04oanNvbiwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gc3VwcG9zaXRpb247XG4gIH0pO1xuXG4gIHJldHVybiBzdXBwb3NpdGlvbnM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdWJzdGl0dXRpb25zRnJvbUpTT04oanNvbiwgY29udGV4dCkge1xuICBsZXQgeyBzdWJzdGl0dXRpb25zID0gW10gfSA9IGpzb247ICAvLy9cblxuICBjb25zdCB7IFN0YXRlbWVudFN1YnN0aXR1dGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIHN1YnN0aXR1dGlvbnNKU09OID0gc3Vic3RpdHV0aW9ucywgIC8vL1xuICAgICAgICBTdWJzdGl0dXRpb24gPSBTdGF0ZW1lbnRTdWJzdGl0dXRpb247IC8vL1xuXG4gIHN1YnN0aXR1dGlvbnMgPSBzdWJzdGl0dXRpb25zSlNPTi5tYXAoKHN1YnN0aXR1dGlvbkpTT04pID0+IHtcbiAgICBjb25zdCBqc29uID0gc3Vic3RpdHV0aW9uSlNPTiwgIC8vL1xuICAgICAgICAgIHN1YnN0aXR1dGlvbiA9IFN1YnN0aXR1dGlvbi5mcm9tSlNPTihqc29uLCBjb250ZXh0KTtcblxuICAgIHJldHVybiBzdWJzdGl0dXRpb247XG4gIH0pO1xuXG4gIHJldHVybiBzdWJzdGl0dXRpb25zO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWV0YXZhcmlhYmxlc0Zyb21KU09OKGpzb24sIGNvbnRleHQpIHtcbiAgbGV0IHsgbWV0YXZhcmlhYmxlcyB9ID0ganNvbjtcblxuICBjb25zdCB7IE1ldGF2YXJpYWJsZSB9ID0gZWxlbWVudHMsXG4gICAgICAgIG1ldGF2YXJpYWJsZXNKU09OID0gbWV0YXZhcmlhYmxlczsgLy8vXG5cbiAgbWV0YXZhcmlhYmxlcyA9IG1ldGF2YXJpYWJsZXNKU09OLm1hcCgobWV0YXZhcmlhYmxlSlNPTikgPT4ge1xuICAgIGNvbnN0IGpzb24gPSBtZXRhdmFyaWFibGVKU09OLCAgLy8vXG4gICAgICAgICAgbWV0YXZhcmlhYmxlID0gTWV0YXZhcmlhYmxlLmZyb21KU09OKGpzb24sIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIG1ldGF2YXJpYWJsZTtcbiAgfSk7XG5cbiAgcmV0dXJuIG1ldGF2YXJpYWJsZXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsZW1tYXNGcm9tTm90aGluZygpIHtcbiAgY29uc3QgbGVtbWFzID0gW107XG5cbiAgcmV0dXJuIGxlbW1hcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1ldGFMZW1tYXNGcm9tTm90aGluZygpIHtcbiAgY29uc3QgbWV0YUxlbW1hcyA9IFtdO1xuXG4gIHJldHVybiBtZXRhTGVtbWFzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGVybVRvVGVybUpTT04odGVybSkge1xuICBjb25zdCB0ZXJtSlNPTiA9IHRlcm0udG9KU09OKCk7XG5cbiAgcmV0dXJuIHRlcm1KU09OO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHlwZVRvVHlwZUpTT04odHlwZSkge1xuICBjb25zdCB0eXBlSlNPTiA9ICh0eXBlICE9PSBudWxsKSA/XG4gICAgICAgICAgICAgICAgICAgICAgdHlwZS50b0pTT04oKSA6XG4gICAgICAgICAgICAgICAgICAgICAgICBudWxsO1xuXG4gIHJldHVybiB0eXBlSlNPTjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxhYmVsVG9MYWJlbEpTT04obGFiZWwpIHtcbiAgY29uc3QgbGFiZWxKU09OID0gbGFiZWwudG9KU09OKCk7XG5cbiAgcmV0dXJuIGxhYmVsSlNPTjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1ldGFUeXBlVG9NZXRhVHlwZUpTT04obWV0YVR5cGUpIHtcbiAgY29uc3QgbWV0YVR5cGVKU09OID0gKG1ldGFUeXBlICE9PSBudWxsKSA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgbWV0YVR5cGUudG9KU09OKCkgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVsbDtcbiAgcmV0dXJuIG1ldGFUeXBlSlNPTjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlZmVyZW5jZVRvUmVmZXJlbmNlSlNPTihyZWZlcmVuY2UpIHtcbiAgY29uc3QgcmVmZXJlbmNlSlNPTiA9IHJlZmVyZW5jZS50b0pTT04oKTtcblxuICByZXR1cm4gcmVmZXJlbmNlSlNPTjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0YXRlbWVudFRvU3RhdGVtZW50SlNPTihzdGF0ZW1lbnQpIHtcbiAgY29uc3Qgc3RhdGVtZW50SlNPTiA9IChzdGF0ZW1lbnQgIT09IG51bGwpID9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVtZW50LnRvSlNPTigpIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBudWxsO1xuXG4gIHJldHVybiBzdGF0ZW1lbnRKU09OO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGVkdWN0aW9uVG9EZWR1Y3Rpb25KU09OKGRlZHVjdGlvbikge1xuICBjb25zdCBkZWR1Y3Rpb25KU09OID0gZGVkdWN0aW9uLnRvSlNPTigpO1xuXG4gIHJldHVybiBkZWR1Y3Rpb25KU09OO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2lnbmF0dXJlVG9TaWduYXR1cmVKU09OKHNpZ25hdHVyZSkge1xuICBjb25zdCBzaWduYXR1cmVKU09OID0gKHNpZ25hdHVyZSAhPT0gbnVsbCkgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICBzaWduYXR1cmUudG9KU09OKCkgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bGw7XG5cbiAgcmV0dXJuIHNpZ25hdHVyZUpTT047XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb25jbHVzaW9uVG9Db25jbHVzaW9uSlNPTihjb25jbHVzaW9uKSB7XG4gIGNvbnN0IGNvbmNsdXNpb25KU09OID0gY29uY2x1c2lvbi50b0pTT04oKTtcblxuICByZXR1cm4gY29uY2x1c2lvbkpTT047XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtZXRhdmFyaWFibGVUb01ldGF2YXJpYWJsZUpTT04obWV0YXZhcmlhYmxlKSB7XG4gIGNvbnN0IG1ldGF2YXJpYWJsZUpTT04gPSBtZXRhdmFyaWFibGUudG9KU09OKCk7XG5cbiAgcmV0dXJuIG1ldGF2YXJpYWJsZUpTT047XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9jZWR1cmVDYWxsVG9Qcm9jZWR1cmVDYWxsSlNPTihwcm9jZWR1cmVDYWxsKSB7XG4gIGNvbnN0IHByb2NlZHVyZUNhbGxKU09OID0gKHByb2NlZHVyZUNhbGwgIT09IG51bGwpID9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2NlZHVyZUNhbGwudG9KU09OKCkgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudWxsO1xuXG4gIHJldHVybiBwcm9jZWR1cmVDYWxsSlNPTjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb2NlZHVyZVJlZmVyZW5jZVRvUHJvY2VkdXJlUmVmZXJlbmNlSlNPTihwcm9jZWR1cmVSZWZlcmVuY2UpIHtcbiAgY29uc3QgcHJvY2VkdXJlUmVmZXJlbmNlSlNPTiA9IHByb2NlZHVyZVJlZmVyZW5jZS50b0pTT04oKTtcblxuICByZXR1cm4gcHJvY2VkdXJlUmVmZXJlbmNlSlNPTjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVzVG9UeXBlc0pTT04odHlwZXMpIHtcbiAgY29uc3QgdHlwZXNKU09OID0gdHlwZXMubWFwKCh0eXBlKSA9PiB7XG4gICAgY29uc3QgdHlwZUpTT04gPSB0eXBlLnRvSlNPTigpO1xuXG4gICAgdHlwZSA9IHR5cGVKU09OOyAvLy9cblxuICAgIHJldHVybiB0eXBlO1xuICB9KTtcblxuICByZXR1cm4gdHlwZXNKU09OO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGVybXNUb1Rlcm1zSlNPTih0ZXJtcykge1xuICBjb25zdCB0ZXJtc0pTT04gPSB0ZXJtcy5tYXAoKHRlcm0pID0+IHtcbiAgICBjb25zdCB0ZXJtSlNPTiA9IHRlcm0udG9KU09OKCk7XG5cbiAgICB0ZXJtID0gdGVybUpTT047IC8vL1xuXG4gICAgcmV0dXJuIHRlcm07XG4gIH0pO1xuXG4gIHJldHVybiB0ZXJtc0pTT047XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBydWxlc1RvUnVsZXNKU09OKHJ1bGVzKSB7XG4gIGNvbnN0IHJ1bGVzSlNPTiA9IHJ1bGVzLm1hcCgocnVsZSkgPT4ge1xuICAgIGNvbnN0IHJ1bGVKU09OID0gcnVsZS50b0pTT04oKTtcblxuICAgIHJ1bGUgPSBydWxlSlNPTjsgLy8vXG5cbiAgICByZXR1cm4gcnVsZTtcbiAgfSk7XG5cbiAgcmV0dXJuIHJ1bGVzSlNPTjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZyYW1lc1RvRnJhbWVzSlNPTihmcmFtZXMpIHtcbiAgY29uc3QgZnJhbWVzSlNPTiA9IGZyYW1lcy5tYXAoKGZyYW1lKSA9PiB7XG4gICAgY29uc3QgZnJhbWVKU09OID0gZnJhbWUudG9KU09OKCk7XG5cbiAgICBmcmFtZSA9IGZyYW1lSlNPTjsgLy8vXG5cbiAgICByZXR1cm4gZnJhbWU7XG4gIH0pO1xuXG4gIHJldHVybiBmcmFtZXNKU09OO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbGFiZWxzVG9MYWJlbHNKU09OKGxhYmVscykge1xuICBjb25zdCBsYWJlbHNKU09OID0gbGFiZWxzLm1hcCgobGFiZWwpID0+IHtcbiAgICBjb25zdCBsYWJlbEpTT04gPSBsYWJlbC50b0pTT04oKTtcblxuICAgIHJldHVybiBsYWJlbEpTT047XG4gIH0pO1xuXG4gIHJldHVybiBsYWJlbHNKU09OO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXhpb21zVG9BeGlvbXNKU09OKGF4aW9tcykge1xuICBjb25zdCBheGlvbXNKU09OID0gYXhpb21zLm1hcCgoYXhpb20pID0+IHtcbiAgICBjb25zdCBheGlvbUpTT04gPSBheGlvbS50b0pTT04oKTtcblxuICAgIGF4aW9tID0gYXhpb21KU09OOyAvLy9cblxuICAgIHJldHVybiBheGlvbTtcbiAgfSk7XG5cbiAgcmV0dXJuIGF4aW9tc0pTT047XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcmVtaXNlc1RvUHJlbWlzZXNKU09OKHByZW1pc2VzKSB7XG4gIGNvbnN0IHByZW1pc2VzSlNPTiA9IHByZW1pc2VzLm1hcCgocHJlbWlzZSkgPT4ge1xuICAgIGNvbnN0IHByZW1pc2VKU09OID0gcHJlbWlzZS50b0pTT04oKTtcblxuICAgIHJldHVybiBwcmVtaXNlSlNPTjtcbiAgfSk7XG5cbiAgcmV0dXJuIHByZW1pc2VzSlNPTjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRoZW9yZW1zVG9UaGVvcmVtc0pTT04odGhlb3JlbXMpIHtcbiAgY29uc3QgdGhlb3JlbXNKU09OID0gdGhlb3JlbXMubWFwKCh0aGVvcmVtKSA9PiB7XG4gICAgY29uc3QgdGhlb3JlbUpTT04gPSB0aGVvcmVtLnRvSlNPTigpO1xuXG4gICAgdGhlb3JlbSA9IHRoZW9yZW1KU09OOyAvLy9cblxuICAgIHJldHVybiB0aGVvcmVtO1xuICB9KTtcblxuICByZXR1cm4gdGhlb3JlbXNKU09OO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFyaWFibGVzVG9WYXJpYWJsZXNKU09OKHZhcmlhYmxlcykge1xuICBjb25zdCB2YXJpYWJsZXNKU09OID0gdmFyaWFibGVzLm1hcCgodmFyaWFibGUpID0+IHtcbiAgICBjb25zdCB2YXJpYWJsZUpTT04gPSB2YXJpYWJsZS50b0pTT04oKTtcblxuICAgIHZhcmlhYmxlID0gdmFyaWFibGVKU09OOyAgLy8vXG5cbiAgICByZXR1cm4gdmFyaWFibGU7XG4gIH0pO1xuXG4gIHJldHVybiB2YXJpYWJsZXNKU09OO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaHlwb3RoZXNlc1RvSHlwb3RoZXNlc0pTT04oaHlwb3RoZXNlcykge1xuICBjb25zdCBoeXBvdGhlc2VzSlNPTiA9IGh5cG90aGVzZXMubWFwKChoeXBvdGhlc2lzKSA9PiB7XG4gICAgY29uc3QgaHlwb3RoZXNpc0pTT04gPSBoeXBvdGhlc2lzLnRvSlNPTigpO1xuXG4gICAgaHlwb3RoZXNpcyA9IGh5cG90aGVzaXNKU09OOyAvLy9cblxuICAgIHJldHVybiBoeXBvdGhlc2lzO1xuICB9KTtcblxuICByZXR1cm4gaHlwb3RoZXNlc0pTT047XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdXBlclR5cGVzVG9TdXBlclR5cGVzSlNPTihzdXBlclR5cGVzKSB7XG4gIGNvbnN0IHN1cGVyVHlwZXNKU09OID0gc3VwZXJUeXBlcy5tYXAoKHN1cGVyVHlwZSkgPT4ge1xuICAgIGNvbnN0IHN1cGVyVHlwZUpTT04gPSBzdXBlclR5cGUudG9KU09OKCk7XG5cbiAgICBzdXBlclR5cGUgPSBzdXBlclR5cGVKU09OOyAvLy9cblxuICAgIHJldHVybiBzdXBlclR5cGU7XG4gIH0pO1xuXG4gIHJldHVybiBzdXBlclR5cGVzSlNPTjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcmFtZXRlcnNUb1BhcmFtZXRlcnNKU09OKHBhcmFtZXRlcnMpIHtcbiAgY29uc3QgcGFyYW1ldGVyc0pTT04gPSBwYXJhbWV0ZXJzLm1hcCgocGFyYW1ldGVyKSA9PiB7XG4gICAgY29uc3QgcGFyYW1ldGVySlNPTiA9IHBhcmFtZXRlci50b0pTT04oKTtcblxuICAgIHBhcmFtZXRlciA9IHBhcmFtZXRlckpTT047ICAvLy9cblxuICAgIHJldHVybiBwYXJhbWV0ZXI7XG4gIH0pO1xuXG4gIHJldHVybiBwYXJhbWV0ZXJzSlNPTjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb3BlcnRpZXNUb1Byb3BlcnRpZXNKU09OKHByb3BlcnRpZXMpIHtcbiAgY29uc3QgcHJvcGVydGllc0pTT04gPSBwcm9wZXJ0aWVzLm1hcCgocHJvcGVydHkpID0+IHtcbiAgICBjb25zdCBwcm9wZXJ0eUpTT04gPSBwcm9wZXJ0eS50b0pTT04oKTtcblxuICAgIHByb3BlcnR5ID0gcHJvcGVydHlKU09OOyAgLy8vXG5cbiAgICByZXR1cm4gcHJvcGVydHk7XG4gIH0pO1xuXG4gIHJldHVybiBwcm9wZXJ0aWVzSlNPTjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVQcmVmaXhlc1RvVHlwZVByZWZpeGVzSlNPTih0eXBlUHJlZml4ZXMpIHtcbiAgY29uc3QgdHlwZVByZWZpeGVzSlNPTiA9IHR5cGVQcmVmaXhlcy5tYXAoKHR5cGVQcmVmaXgpID0+IHtcbiAgICBjb25zdCB0eXBlUHJlZml4SlNPTiA9IHR5cGVQcmVmaXgudG9KU09OKCk7XG5cbiAgICB0eXBlUHJlZml4ID0gdHlwZVByZWZpeEpTT047IC8vL1xuXG4gICAgcmV0dXJuIHR5cGVQcmVmaXg7XG4gIH0pO1xuXG4gIHJldHVybiB0eXBlUHJlZml4ZXNKU09OO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29uamVjdHVyZXNUb0NvbmplY3R1cmVzSlNPTihjb25qZWN0dXJlcykge1xuICBjb25zdCBjb25qZWN0dXJlc0pTT04gPSBjb25qZWN0dXJlcy5tYXAoKGNvbmplY3R1cmUpID0+IHtcbiAgICBjb25zdCBjb25qZWN0dXJlSlNPTiA9IGNvbmplY3R1cmUudG9KU09OKCk7XG5cbiAgICBjb25qZWN0dXJlID0gY29uamVjdHVyZUpTT047IC8vL1xuXG4gICAgcmV0dXJuIGNvbmplY3R1cmU7XG4gIH0pO1xuXG4gIHJldHVybiBjb25qZWN0dXJlc0pTT047XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb21iaW5hdG9yc1RvQ29tYmluYXRvcnNKU09OKGNvbWJpbmF0b3JzKSB7XG4gIGNvbnN0IGNvbWJpbmF0b3JzSlNPTiA9IGNvbWJpbmF0b3JzLm1hcCgoY29tYmluYXRvcikgPT4ge1xuICAgIGNvbnN0IGNvbWJpbmF0b3JKU09OID0gY29tYmluYXRvci50b0pTT04oKTtcblxuICAgIGNvbWJpbmF0b3IgPSBjb21iaW5hdG9ySlNPTjsgLy8vXG5cbiAgICByZXR1cm4gY29tYmluYXRvcjtcbiAgfSk7XG5cbiAgcmV0dXJuIGNvbWJpbmF0b3JzSlNPTjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN1cHBvc2l0aW9uc1RvU3VwcG9zaXRpb25zSlNPTihzdXBwb3NpdGlvbnMpIHtcbiAgY29uc3Qgc3VwcG9zaXRpb25zSlNPTiA9IHN1cHBvc2l0aW9ucy5tYXAoKHN1cHBvc2l0aW9uKSA9PiB7XG4gICAgY29uc3Qgc3VwcG9zaXRpb25KU09OID0gc3VwcG9zaXRpb24udG9KU09OKCk7XG5cbiAgICByZXR1cm4gc3VwcG9zaXRpb25KU09OO1xuICB9KTtcblxuICByZXR1cm4gc3VwcG9zaXRpb25zSlNPTjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbnN0cnVjdG9yc1RvQ29uc3RydWN0b3JzSlNPTihjb25zdHJ1Y3RvcnMpIHtcbiAgY29uc3QgY29uc3RydWN0b3JzSlNPTiA9IGNvbnN0cnVjdG9ycy5tYXAoKGNvbnN0cnVjdG9yKSA9PiB7XG4gICAgY29uc3QgY29uc3RydWN0b3JKU09OID0gY29uc3RydWN0b3IudG9KU09OKCk7XG5cbiAgICBjb25zdHJ1Y3RvciA9IGNvbnN0cnVjdG9ySlNPTjsgIC8vL1xuXG4gICAgcmV0dXJuIGNvbnN0cnVjdG9yO1xuICB9KTtcblxuICByZXR1cm4gY29uc3RydWN0b3JzSlNPTjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1ldGF0aGVvcmVtc1RvTWV0YXRoZW9yZW1zSlNPTihtZXRhdGhlb3JlbXMpIHtcbiAgY29uc3QgbWV0YXRoZW9yZW1zSlNPTiA9IG1ldGF0aGVvcmVtcy5tYXAoKG1ldGF0aGVvcmVtKSA9PiB7XG4gICAgY29uc3QgbWV0YXRoZW9yZW1KU09OID0gbWV0YXRoZW9yZW0udG9KU09OKCk7XG5cbiAgICBtZXRhdGhlb3JlbSA9IG1ldGF0aGVvcmVtSlNPTjsgLy8vXG5cbiAgICByZXR1cm4gbWV0YXRoZW9yZW07XG4gIH0pO1xuXG4gIHJldHVybiBtZXRhdGhlb3JlbXNKU09OO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3Vic3RpdHV0aW9uc1RvU3Vic3RpdHV0aW9uc0pTT04oc3Vic3RpdHV0aW9ucykge1xuICBjb25zdCBzdWJzdGl0dXRpb25zSlNPTiA9IHN1YnN0aXR1dGlvbnMubWFwU3Vic3RpdHV0aW9uKChzdWJzdGl0dXRpb24pID0+IHtcbiAgICBjb25zdCBzdWJzdGl0dXRpb25KU09OID0gc3Vic3RpdHV0aW9uLnRvSlNPTigpO1xuXG4gICAgcmV0dXJuIHN1YnN0aXR1dGlvbkpTT047XG4gIH0pO1xuXG4gIHJldHVybiBzdWJzdGl0dXRpb25zSlNPTjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1ldGF2YXJpYWJsZXNUb01ldGF2YXJpYWJsZXNKU09OKG1ldGF2YXJpYWJsZXMpIHtcbiAgY29uc3QgbWV0YXZhcmlhYmxlc0pTT04gPSBtZXRhdmFyaWFibGVzLm1hcCgobWV0YXZhcmlhYmxlKSA9PiB7XG4gICAgY29uc3QgbWV0YXZhcmlhYmxlSlNPTiA9IG1ldGF2YXJpYWJsZS50b0pTT04oKTtcblxuICAgIG1ldGF2YXJpYWJsZSA9IG1ldGF2YXJpYWJsZUpTT047ICAvLy9cblxuICAgIHJldHVybiBtZXRhdmFyaWFibGU7XG4gIH0pO1xuXG4gIHJldHVybiBtZXRhdmFyaWFibGVzSlNPTjtcbn1cbiJdLCJuYW1lcyI6WyJheGlvbXNGcm9tSlNPTiIsImF4aW9tc1RvQXhpb21zSlNPTiIsImNvbWJpbmF0b3JzRnJvbUpTT04iLCJjb21iaW5hdG9yc1RvQ29tYmluYXRvcnNKU09OIiwiY29uY2x1c2lvbkZyb21KU09OIiwiY29uY2x1c2lvblRvQ29uY2x1c2lvbkpTT04iLCJjb25qZWN0dXJlc0Zyb21KU09OIiwiY29uamVjdHVyZXNUb0NvbmplY3R1cmVzSlNPTiIsImNvbnN0cnVjdG9yc0Zyb21KU09OIiwiY29uc3RydWN0b3JzVG9Db25zdHJ1Y3RvcnNKU09OIiwiZGVkdWN0aW9uRnJvbUpTT04iLCJkZWR1Y3Rpb25Ub0RlZHVjdGlvbkpTT04iLCJmcmFtZXNGcm9tSlNPTiIsImZyYW1lc1RvRnJhbWVzSlNPTiIsImh5cG90aGVzZXNGcm9tSlNPTiIsImh5cG90aGVzZXNUb0h5cG90aGVzZXNKU09OIiwibGFiZWxGcm9tSlNPTiIsImxhYmVsVG9MYWJlbEpTT04iLCJsYWJlbHNGcm9tSlNPTiIsImxhYmVsc1RvTGFiZWxzSlNPTiIsImxlbW1hc0Zyb21Ob3RoaW5nIiwibWV0YUxlbW1hc0Zyb21Ob3RoaW5nIiwibWV0YVR5cGVGcm9tSlNPTiIsIm1ldGFUeXBlVG9NZXRhVHlwZUpTT04iLCJtZXRhdGhlb3JlbXNGcm9tSlNPTiIsIm1ldGF0aGVvcmVtc1RvTWV0YXRoZW9yZW1zSlNPTiIsIm1ldGF2YXJpYWJsZUZyb21KU09OIiwibWV0YXZhcmlhYmxlVG9NZXRhdmFyaWFibGVKU09OIiwibWV0YXZhcmlhYmxlc0Zyb21KU09OIiwibWV0YXZhcmlhYmxlc1RvTWV0YXZhcmlhYmxlc0pTT04iLCJwYXJhbWV0ZXJzRnJvbUpTT04iLCJwYXJhbWV0ZXJzVG9QYXJhbWV0ZXJzSlNPTiIsInByZW1pc2VzRnJvbUpTT04iLCJwcmVtaXNlc1RvUHJlbWlzZXNKU09OIiwicHJvY2VkdXJlQ2FsbEZyb21KU09OIiwicHJvY2VkdXJlQ2FsbFRvUHJvY2VkdXJlQ2FsbEpTT04iLCJwcm9jZWR1cmVSZWZlcmVuY2VGcm9tSlNPTiIsInByb2NlZHVyZVJlZmVyZW5jZVRvUHJvY2VkdXJlUmVmZXJlbmNlSlNPTiIsInByb3BlcnRpZXNGcm9tSlNPTiIsInByb3BlcnRpZXNUb1Byb3BlcnRpZXNKU09OIiwicmVmZXJlbmNlRnJvbUpTT04iLCJyZWZlcmVuY2VUb1JlZmVyZW5jZUpTT04iLCJydWxlc0Zyb21KU09OIiwicnVsZXNUb1J1bGVzSlNPTiIsInNpZ25hdHVyZUZyb21KU09OIiwic2lnbmF0dXJlVG9TaWduYXR1cmVKU09OIiwic3RhdGVtZW50RnJvbUpTT04iLCJzdGF0ZW1lbnRUb1N0YXRlbWVudEpTT04iLCJzdWJzdGl0dXRpb25zRnJvbUpTT04iLCJzdWJzdGl0dXRpb25zVG9TdWJzdGl0dXRpb25zSlNPTiIsInN1cGVyVHlwZXNGcm9tSlNPTiIsInN1cGVyVHlwZXNUb1N1cGVyVHlwZXNKU09OIiwic3VwcG9zaXRpb25zRnJvbUpTT04iLCJzdXBwb3NpdGlvbnNUb1N1cHBvc2l0aW9uc0pTT04iLCJ0ZXJtRnJvbUpTT04iLCJ0ZXJtVG9UZXJtSlNPTiIsInRlcm1zRnJvbUpTT04iLCJ0ZXJtc1RvVGVybXNKU09OIiwidGhlb3JlbXNGcm9tSlNPTiIsInRoZW9yZW1zVG9UaGVvcmVtc0pTT04iLCJ0eXBlRnJvbUpTT04iLCJ0eXBlUHJlZml4ZXNGcm9tSlNPTiIsInR5cGVQcmVmaXhlc1RvVHlwZVByZWZpeGVzSlNPTiIsInR5cGVUb1R5cGVKU09OIiwidHlwZXNGcm9tSlNPTiIsInR5cGVzVG9UeXBlc0pTT04iLCJ2YXJpYWJsZXNGcm9tSlNPTiIsInZhcmlhYmxlc1RvVmFyaWFibGVzSlNPTiIsImpzb24iLCJjb250ZXh0IiwidGVybSIsInRlcm1KU09OIiwiVGVybSIsImVsZW1lbnRzIiwiZnJvbUpTT04iLCJ0eXBlIiwibmFtZSIsInByZWZpeE5hbWUiLCJub21pbmFsVHlwZU5hbWUiLCJmaW5kVHlwZUJ5Tm9taW5hbFR5cGVOYW1lIiwibWV0YVR5cGUiLCJtZXRhVHlwZU5hbWUiLCJmaW5kTWV0YVR5cGVCeU1ldGFUeXBlTmFtZSIsInN0YXRlbWVudCIsIlN0YXRlbWVudCIsInN0YXRlbWVudEpTT04iLCJkZWR1Y3Rpb24iLCJEZWR1Y3Rpb24iLCJkZWR1Y3Rpb25KU09OIiwic2lnbmF0dXJlIiwiU2lnbmF0dXJlIiwic2lnbmF0dXJlSlNPTiIsInJlZmVyZW5jZSIsIlJlZmVyZW5jZSIsInJlZmVyZW5jZUpTT04iLCJjb25jbHVzaW9uIiwiQ29uY2x1c2lvbiIsImNvbmNsdXNpb25KU09OIiwibWV0YXZhcmlhYmxlIiwiTWV0YXZhcmlhYmxlIiwibWV0YXZhcmlhYmxlSlNPTiIsInByb2NlZHVyZUNhbGwiLCJQcm9jZWR1cmVDYWxsIiwicHJvY2VkdXJlQ2FsbEpTT04iLCJwcm9jZWR1cmVSZWZlcmVuY2UiLCJQcm9jZWR1cmVSZWZlcmVuY2UiLCJwcm9jZWR1cmVSZWZlcmVuY2VKU09OIiwidHlwZXMiLCJ0eXBlc0pTT04iLCJUeXBlIiwiZm9yRWFjaCIsInR5cGVKU09OIiwicHVzaCIsInRlcm1zIiwidGVybXNKU09OIiwibWFwIiwicnVsZXMiLCJSdWxlIiwicnVsZXNKU09OIiwicnVsZUpTT04iLCJydWxlIiwibGFiZWwiLCJMYWJlbCIsImxhYmVsSlNPTiIsImZyYW1lcyIsIkZyYW1lIiwiZnJhbWVzSlNPTiIsImZyYW1lSlNPTiIsImZyYW1lIiwibGFiZWxzIiwibGFiZWxzSlNPTiIsImF4aW9tcyIsIkF4aW9tIiwiYXhpb21zSlNPTiIsImF4aW9tSlNPTiIsImF4aW9tIiwicHJlbWlzZXMiLCJQcmVtaXNlIiwicHJlbWlzZXNKU09OIiwicHJlbWlzZUpTT04iLCJwcmVtaXNlIiwidGhlb3JlbXMiLCJUaGVvcmVtIiwidGhlb3JlbXNKU09OIiwidGhlb3JlbUpTT04iLCJ0aGVvcmVtIiwidmFyaWFibGVzIiwiVmFyaWFibGUiLCJ2YXJpYWJsZXNKU09OIiwidmFyaWFibGVKU09OIiwidmFyaWFibGUiLCJwcm9wZXJ0aWVzIiwiUHJvcGVydHkiLCJwcm9wZXJ0aWVzSlNPTiIsInByb3BlcnR5SlNPTiIsInByb3BlcnR5Iiwic3VwZXJUeXBlcyIsInN1cGVyVHlwZXNKU09OIiwic3VwZXJUeXBlSlNPTiIsIm5vbWluYWxTdXBlclR5cGVOYW1lIiwic3VwZXJUeXBlIiwiaHlwb3RoZXNlcyIsIkh5cG90aGVzaXMiLCJoeXBvdGhlc2VzSlNPTiIsImh5cG90aGVzaXNKU09OIiwiaHlwb3RoZXNpcyIsInBhcmFtZXRlcnMiLCJQYXJhbWV0ZXIiLCJwYXJhbWV0ZXJzSlNPTiIsInBhcmFtZXRlckpTT04iLCJwYXJhbWV0ZXIiLCJjb25qZWN0dXJlcyIsIkNvbmplY3R1cmUiLCJjb25qZWN0dXJlc0pTT04iLCJjb25qZWN0dXJlSlNPTiIsImNvbmplY3R1cmUiLCJjb21iaW5hdG9ycyIsIkNvbWJpbmF0b3IiLCJjb21iaW5hdG9yc0pTT04iLCJjb21iaW5hdG9ySlNPTiIsImNvbWJpbmF0b3IiLCJ0eXBlUHJlZml4ZXMiLCJUeXBlUHJlZml4IiwidHlwZVByZWZpeGVzSlNPTiIsInR5cGVQcmVmaXhKU09OIiwidHlwZVByZWZpeCIsImNvbnN0cnVjdG9ycyIsIkNvbnN0cnVjdG9yIiwiY29uc3RydWN0b3JzSlNPTiIsImNvbnN0cnVjdG9ySlNPTiIsImNvbnN0cnVjdG9yIiwibWV0YXRoZW9yZW1zIiwiTWV0YXRoZW9yZW0iLCJtZXRhdGhlb3JlbXNKU09OIiwibWV0YXRoZW9yZW1KU09OIiwibWV0YXRoZW9yZW0iLCJzdXBwb3NpdGlvbnMiLCJTdXBwb3NpdGlvbiIsInN1cHBvc2l0aW9uc0pTT04iLCJzdXBwb3NpdGlvbkpTT04iLCJzdXBwb3NpdGlvbiIsInN1YnN0aXR1dGlvbnMiLCJTdGF0ZW1lbnRTdWJzdGl0dXRpb24iLCJzdWJzdGl0dXRpb25zSlNPTiIsIlN1YnN0aXR1dGlvbiIsInN1YnN0aXR1dGlvbkpTT04iLCJzdWJzdGl0dXRpb24iLCJtZXRhdmFyaWFibGVzIiwibWV0YXZhcmlhYmxlc0pTT04iLCJsZW1tYXMiLCJtZXRhTGVtbWFzIiwidG9KU09OIiwibWV0YVR5cGVKU09OIiwibWFwU3Vic3RpdHV0aW9uIl0sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7UUE0UGdCQTtlQUFBQTs7UUF5WkFDO2VBQUFBOztRQXhRQUM7ZUFBQUE7O1FBOFhBQztlQUFBQTs7UUEvcEJBQztlQUFBQTs7UUFxZEFDO2VBQUFBOztRQXBNQUM7ZUFBQUE7O1FBa1lBQztlQUFBQTs7UUFsVkFDO2VBQUFBOztRQW9YQUM7ZUFBQUE7O1FBOXRCQUM7ZUFBQUE7O1FBZ2ZBQztlQUFBQTs7UUF2VkFDO2VBQUFBOztRQW1hQUM7ZUFBQUE7O1FBbFNBQztlQUFBQTs7UUFzV0FDO2VBQUFBOztRQXBmQUM7ZUFBQUE7O1FBeVVBQztlQUFBQTs7UUE1U0FDO2VBQUFBOztRQStaQUM7ZUFBQUE7O1FBN0lBQztlQUFBQTs7UUFNQUM7ZUFBQUE7O1FBL2RBQztlQUFBQTs7UUF5ZkFDO2VBQUFBOztRQWpHQUM7ZUFBQUE7O1FBZ1hBQztlQUFBQTs7UUFwckJBQztlQUFBQTs7UUE4Y0FDO2VBQUFBOztRQXpGQUM7ZUFBQUE7O1FBcVZBQztlQUFBQTs7UUF0ZEFDO2VBQUFBOztRQThXQUM7ZUFBQUE7O1FBL2NBQztlQUFBQTs7UUFxWkFDO2VBQUFBOztRQTNoQkFDO2VBQUFBOztRQXVjQUM7ZUFBQUE7O1FBeGJBQztlQUFBQTs7UUFnY0FDO2VBQUFBOztRQXpSQUM7ZUFBQUE7O1FBMmFBQztlQUFBQTs7UUF4b0JBQztlQUFBQTs7UUFzY0FDO2VBQUFBOztRQXRXQUM7ZUFBQUE7O1FBb2JBQztlQUFBQTs7UUFuaUJBQztlQUFBQTs7UUF5ZUFDO2VBQUFBOztRQXJnQkFDO2VBQUFBOztRQXVmQUM7ZUFBQUE7O1FBOUVBQztlQUFBQTs7UUE0VkFDO2VBQUFBOztRQTdlQUM7ZUFBQUE7O1FBbVlBQztlQUFBQTs7UUFsUUFDO2VBQUFBOztRQTBVQUM7ZUFBQUE7O1FBanhCQUM7ZUFBQUE7O1FBb2dCQUM7ZUFBQUE7O1FBM1ZBQztlQUFBQTs7UUF3YkFDO2VBQUFBOztRQTNVQUM7ZUFBQUE7O1FBK1lBQztlQUFBQTs7UUF2cEJBQztlQUFBQTs7UUF5WUFDO2VBQUFBOztRQXNWQUM7ZUFBQUE7O1FBbk9BQztlQUFBQTs7UUE5V0FDO2VBQUFBOztRQXliQUM7ZUFBQUE7O1FBL1NBQztlQUFBQTs7UUEyWUFDO2VBQUFBOzs7K0RBcnJCSzt5QkFFc0I7Ozs7OztBQUVwQyxTQUFTYixhQUFhYyxJQUFJLEVBQUVDLE9BQU87SUFDeEMsSUFBSSxBQUFFQyxPQUFTRixLQUFURTtJQUVOLElBQU1DLFdBQVdELE1BQU8sR0FBRztJQUUzQkYsT0FBT0csVUFBVyxHQUFHO0lBRXJCLElBQU0sQUFBRUMsT0FBU0MsaUJBQVEsQ0FBakJEO0lBRVJGLE9BQU9FLEtBQUtFLFFBQVEsQ0FBQ04sTUFBTUM7SUFFM0IsT0FBT0M7QUFDVDtBQUVPLFNBQVNWLGFBQWFRLElBQUksRUFBRUMsT0FBTztJQUN4QyxJQUFJLEFBQUVNLE9BQVNQLEtBQVRPO0lBRU4sSUFBSUEsU0FBUyxNQUFNO1FBQ2pCUCxPQUFPTyxNQUFPLEdBQUc7UUFFakIsSUFBUUMsT0FBcUJSLEtBQXJCUSxNQUFNQyxhQUFlVCxLQUFmUyxZQUNSQyxrQkFBa0IsQUFBQ0QsZUFBZSxPQUNiLEFBQUMsR0FBZUQsT0FBYkMsWUFBa0IsT0FBTEQsUUFDYkEsTUFBTSxHQUFHO1FBRXZDRCxPQUFPTixRQUFRVSx5QkFBeUIsQ0FBQ0Q7SUFDM0M7SUFFQSxPQUFPSDtBQUNUO0FBRU8sU0FBU3JELGlCQUFpQjhDLElBQUksRUFBRUMsT0FBTztJQUM1QyxJQUFJLEFBQUVXLFdBQWFaLEtBQWJZO0lBRU4sSUFBSUEsYUFBYSxNQUFNO1FBQ3JCWixPQUFPWSxVQUFXLEdBQUc7UUFFckIsSUFBTSxBQUFFSixPQUFTUixLQUFUUSxNQUNGSyxlQUFlTCxNQUFPLEdBQUc7UUFFL0JJLFdBQVdFLElBQUFBLHFDQUEwQixFQUFDRDtJQUN4QztJQUVBLE9BQU9EO0FBQ1Q7QUFFTyxTQUFTbEMsa0JBQWtCc0IsSUFBSSxFQUFFQyxPQUFPO0lBQzdDLHNCQUEyQkQsS0FBckJlLFdBQUFBLHlDQUFZO0lBRWxCLElBQUlBLGNBQWMsTUFBTTtRQUN0QixJQUFNLEFBQUVDLFlBQWNYLGlCQUFRLENBQXRCVyxXQUNGQyxnQkFBZ0JGLFdBQVksR0FBRztRQUVyQ2YsT0FBT2lCLGVBQWUsR0FBRztRQUV6QkYsWUFBWUMsVUFBVVYsUUFBUSxDQUFDTixNQUFNQztJQUN2QztJQUVBLE9BQU9jO0FBQ1Q7QUFFTyxTQUFTekUsa0JBQWtCMEQsSUFBSSxFQUFFQyxPQUFPO0lBQzdDLElBQUksQUFBRWlCLFlBQWNsQixLQUFka0I7SUFFTixJQUFNLEFBQUVDLFlBQWNkLGlCQUFRLENBQXRCYyxXQUNGQyxnQkFBZ0JGLFdBQVksR0FBRztJQUVyQ2xCLE9BQU9vQixlQUFnQixHQUFHO0lBRTFCRixZQUFZQyxVQUFVYixRQUFRLENBQUNOLE1BQU1DO0lBRXJDLE9BQU9pQjtBQUNUO0FBRU8sU0FBUzFDLGtCQUFrQndCLElBQUksRUFBRUMsT0FBTztJQUM3QyxzQkFBMkJELEtBQXJCcUIsV0FBQUEseUNBQVk7SUFFbEIsSUFBSUEsY0FBYyxNQUFNO1FBQ3RCLElBQU0sQUFBRUMsWUFBY2pCLGlCQUFRLENBQXRCaUIsV0FDRkMsZ0JBQWdCRixXQUFZLEdBQUc7UUFFckNyQixPQUFPdUIsZUFBZSxHQUFHO1FBRXpCRixZQUFZQyxVQUFVaEIsUUFBUSxDQUFDTixNQUFNQztJQUN2QztJQUVBLE9BQU9vQjtBQUNUO0FBRU8sU0FBU2pELGtCQUFrQjRCLElBQUksRUFBRUMsT0FBTztJQUM3QyxJQUFJLEFBQUV1QixZQUFjeEIsS0FBZHdCO0lBRU4sSUFBTSxBQUFFQyxZQUFjcEIsaUJBQVEsQ0FBdEJvQixXQUNGQyxnQkFBZ0JGLFdBQVksR0FBRztJQUVyQ3hCLE9BQU8wQixlQUFlLEdBQUc7SUFFekJGLFlBQVlDLFVBQVVuQixRQUFRLENBQUNOLE1BQU1DO0lBRXJDLE9BQU91QjtBQUNUO0FBRU8sU0FBU3hGLG1CQUFtQmdFLElBQUksRUFBRUMsT0FBTztJQUM5QyxJQUFJLEFBQUUwQixhQUFlM0IsS0FBZjJCO0lBRU4sSUFBTSxBQUFFQyxhQUFldkIsaUJBQVEsQ0FBdkJ1QixZQUNGQyxpQkFBaUJGLFlBQWEsR0FBRztJQUV2QzNCLE9BQU82QixnQkFBaUIsR0FBRztJQUUzQkYsYUFBYUMsV0FBV3RCLFFBQVEsQ0FBQ04sTUFBTUM7SUFFdkMsT0FBTzBCO0FBQ1Q7QUFFTyxTQUFTckUscUJBQXFCMEMsSUFBSSxFQUFFQyxPQUFPO0lBQ2hELElBQUksQUFBRTZCLGVBQWlCOUIsS0FBakI4QjtJQUVOLElBQU0sQUFBRUMsZUFBaUIxQixpQkFBUSxDQUF6QjBCLGNBQ0ZDLG1CQUFtQkYsY0FBZSxHQUFHO0lBRTNDOUIsT0FBT2dDLGtCQUFrQixHQUFHO0lBRTVCRixlQUFlQyxhQUFhekIsUUFBUSxDQUFDTixNQUFNQztJQUUzQyxPQUFPNkI7QUFDVDtBQUVPLFNBQVNoRSxzQkFBc0JrQyxJQUFJLEVBQUVDLE9BQU87SUFDakQsMEJBQStCRCxLQUF6QmlDLGVBQUFBLGlEQUFnQjtJQUV0QixJQUFJQSxrQkFBa0IsTUFBTTtRQUMxQixJQUFNLEFBQUVDLGdCQUFrQjdCLGlCQUFRLENBQTFCNkIsZUFDRkMsb0JBQW9CRixlQUFnQixHQUFHO1FBRTdDakMsT0FBT21DLG1CQUFtQixHQUFHO1FBRTdCRixnQkFBZ0JDLGNBQWM1QixRQUFRLENBQUNOLE1BQU1DO0lBQy9DO0lBRUEsT0FBT2dDO0FBQ1Q7QUFFTyxTQUFTakUsMkJBQTJCZ0MsSUFBSSxFQUFFQyxPQUFPO0lBQ3RELElBQUksQUFBRW1DLHFCQUF1QnBDLEtBQXZCb0M7SUFFTixJQUFNLEFBQUVDLHFCQUF1QmhDLGlCQUFRLENBQS9CZ0Msb0JBQ0ZDLHlCQUF5QkYsb0JBQXFCLEdBQUc7SUFFdkRwQyxPQUFPc0Msd0JBQXlCLEdBQUc7SUFFbkNGLHFCQUFxQkMsbUJBQW1CL0IsUUFBUSxDQUFDTixNQUFNQztJQUV2RCxPQUFPbUM7QUFDVDtBQUVPLFNBQVN4QyxjQUFjSSxJQUFJLEVBQUV1QyxLQUFLLEVBQUV0QyxPQUFPO0lBQ2hELElBQVFzQyxBQUFPQyxZQUFjeEMsS0FBckJ1QztJQUVSLElBQU0sQUFBRUUsT0FBU3BDLGlCQUFRLENBQWpCb0M7SUFFUkQsVUFBVUUsT0FBTyxDQUFDLFNBQUNDO1FBQ2pCLElBQU0zQyxTQUFPMkMsVUFDUHBDLE9BQU9rQyxLQUFLbkMsUUFBUSxDQUFDTixRQUFNQztRQUVqQ3NDLE1BQU1LLElBQUksQ0FBQ3JDO0lBQ2I7QUFDRjtBQUVPLFNBQVNuQixjQUFjWSxJQUFJLEVBQUVDLE9BQU87SUFDekMsSUFBSSxBQUFFNEMsUUFBVTdDLEtBQVY2QztJQUVOLElBQU0sQUFBRXpDLE9BQVNDLGlCQUFRLENBQWpCRCxNQUNGMEMsWUFBWUQsT0FBTyxHQUFHO0lBRTVCQSxRQUFRQyxVQUFVQyxHQUFHLENBQUMsU0FBQzVDO1FBQ3JCLElBQU1ILFNBQU9HLFVBQ1BELE9BQU9FLEtBQUtFLFFBQVEsQ0FBQ04sUUFBTUM7UUFFakMsT0FBT0M7SUFDVDtJQUVBLE9BQU8yQztBQUNUO0FBRU8sU0FBU3ZFLGNBQWMwQixJQUFJLEVBQUVDLE9BQU87SUFDekMsSUFBSSxBQUFFK0MsUUFBVWhELEtBQVZnRDtJQUVOLElBQU0sQUFBRUMsT0FBUzVDLGlCQUFRLENBQWpCNEMsTUFDRkMsWUFBWUYsT0FBTyxHQUFHO0lBRTVCQSxRQUFRRSxVQUFVSCxHQUFHLENBQUMsU0FBQ0k7UUFDckIsSUFBTW5ELFNBQU9tRCxVQUNQQyxPQUFPSCxLQUFLM0MsUUFBUSxDQUFDTixRQUFNQztRQUVqQyxPQUFPbUQ7SUFDVDtJQUVBLE9BQU9KO0FBQ1Q7QUFFTyxTQUFTcEcsY0FBY29ELElBQUksRUFBRUMsT0FBTztJQUN6QyxJQUFJLEFBQUVvRCxRQUFVckQsS0FBVnFEO0lBRU4sSUFBTSxBQUFFQyxRQUFVakQsaUJBQVEsQ0FBbEJpRCxPQUNGQyxZQUFZRixPQUFRLEdBQUc7SUFFN0JyRCxPQUFPdUQsV0FBVyxHQUFHO0lBRXJCRixRQUFRQyxNQUFNaEQsUUFBUSxDQUFDTixNQUFNQztJQUU3QixPQUFPb0Q7QUFDVDtBQUVPLFNBQVM3RyxlQUFld0QsSUFBSSxFQUFFQyxPQUFPO0lBQzFDLElBQUksQUFBRXVELFNBQVd4RCxLQUFYd0Q7SUFFTixJQUFNLEFBQUVDLFFBQVVwRCxpQkFBUSxDQUFsQm9ELE9BQ0ZDLGFBQWFGLFFBQVEsR0FBRztJQUU5QkEsU0FBU0UsV0FBV1gsR0FBRyxDQUFDLFNBQUNZO1FBQ3ZCLElBQU0zRCxTQUFPMkQsV0FDUEMsUUFBUUgsTUFBTW5ELFFBQVEsQ0FBQ04sUUFBTUM7UUFFbkMsT0FBTzJEO0lBQ1Q7SUFFQSxPQUFPSjtBQUNUO0FBRU8sU0FBUzFHLGVBQWVrRCxJQUFJLEVBQUVDLE9BQU87SUFDMUMsSUFBSSxBQUFFNEQsU0FBVzdELEtBQVg2RDtJQUVOLElBQU0sQUFBRVAsUUFBVWpELGlCQUFRLENBQWxCaUQsT0FDRlEsYUFBYUQsUUFBUyxHQUFHO0lBRS9CQSxTQUFTQyxXQUFXZixHQUFHLENBQUMsU0FBQ1E7UUFDdkIsSUFBTXZELFNBQU91RCxXQUNQRixRQUFRQyxNQUFNaEQsUUFBUSxDQUFDTixRQUFNQztRQUVuQyxPQUFPb0Q7SUFDVDtJQUVBLE9BQU9RO0FBQ1Q7QUFFTyxTQUFTakksZUFBZW9FLElBQUksRUFBRUMsT0FBTztJQUMxQyxJQUFJLEFBQUU4RCxTQUFXL0QsS0FBWCtEO0lBRU4sSUFBTSxBQUFFQyxRQUFVM0QsaUJBQVEsQ0FBbEIyRCxPQUNGQyxhQUFhRixRQUFRLEdBQUc7SUFFOUJBLFNBQVNFLFdBQVdsQixHQUFHLENBQUMsU0FBQ21CO1FBQ3ZCLElBQU1sRSxTQUFPa0UsV0FDUEMsUUFBUUgsTUFBTTFELFFBQVEsQ0FBQ04sUUFBTUM7UUFFbkMsT0FBT2tFO0lBQ1Q7SUFFQSxPQUFPSjtBQUNUO0FBRU8sU0FBU25HLGlCQUFpQm9DLElBQUksRUFBRUMsT0FBTztJQUM1QyxJQUFJLEFBQUVtRSxXQUFhcEUsS0FBYm9FO0lBRU4sSUFBTSxBQUFFQyxVQUFZaEUsaUJBQVEsQ0FBcEJnRSxTQUNGQyxlQUFlRixVQUFXLEdBQUc7SUFFbkNBLFdBQVdFLGFBQWF2QixHQUFHLENBQUMsU0FBQ3dCO1FBQzNCLElBQU12RSxTQUFPdUUsYUFDUEMsVUFBVUgsUUFBUS9ELFFBQVEsQ0FBQ04sUUFBTUM7UUFFdkMsT0FBT3VFO0lBQ1Q7SUFFQSxPQUFPSjtBQUNUO0FBRU8sU0FBUzlFLGlCQUFpQlUsSUFBSSxFQUFFQyxPQUFPO0lBQzVDLElBQUksQUFBRXdFLFdBQWF6RSxLQUFieUU7SUFFTixJQUFNLEFBQUVDLFVBQVlyRSxpQkFBUSxDQUFwQnFFLFNBQ0ZDLGVBQWVGLFVBQVUsR0FBRztJQUVsQ0EsV0FBV0UsYUFBYTVCLEdBQUcsQ0FBQyxTQUFDNkI7UUFDM0IsSUFBTTVFLFNBQU80RSxhQUNQQyxVQUFVSCxRQUFRcEUsUUFBUSxDQUFDTixRQUFNQztRQUV2QyxPQUFPNEU7SUFDVDtJQUVBLE9BQU9KO0FBQ1Q7QUFFTyxTQUFTM0Usa0JBQWtCRSxJQUFJLEVBQUVDLE9BQU87SUFDN0MsSUFBSSxBQUFFNkUsWUFBYzlFLEtBQWQ4RTtJQUVOLElBQU0sQUFBRUMsV0FBYTFFLGlCQUFRLENBQXJCMEUsVUFDRkMsZ0JBQWdCRixXQUFXLEdBQUc7SUFFcENBLFlBQVlFLGNBQWNqQyxHQUFHLENBQUMsU0FBQ2tDO1FBQzdCLElBQU1qRixTQUFPaUYsY0FDUEMsV0FBV0gsU0FBU3pFLFFBQVEsQ0FBQ04sUUFBTUM7UUFFekMsT0FBT2lGO0lBQ1Q7SUFFQSxPQUFPSjtBQUNUO0FBRU8sU0FBUzVHLG1CQUFtQjhCLElBQUksRUFBRUMsT0FBTztJQUM5QyxJQUFJLEFBQUVrRixhQUFlbkYsS0FBZm1GO0lBRU4sSUFBTSxBQUFFQyxXQUFhL0UsaUJBQVEsQ0FBckIrRSxVQUNGQyxpQkFBaUJGLFlBQVksR0FBRztJQUV0Q0EsYUFBYUUsZUFBZXRDLEdBQUcsQ0FBQyxTQUFDdUM7UUFDL0IsSUFBTXRGLFNBQU9zRixjQUNQQyxXQUFXSCxTQUFTOUUsUUFBUSxDQUFDTixRQUFNQztRQUV6QyxPQUFPc0Y7SUFDVDtJQUVBLE9BQU9KO0FBQ1Q7QUFFTyxTQUFTckcsbUJBQW1Ca0IsSUFBSSxFQUFFQyxPQUFPO0lBQzlDLElBQVF1RixBQUFZQyxpQkFBbUJ6RixLQUEvQndGO0lBRVIsSUFBTUEsYUFBYUMsZUFBZTFDLEdBQUcsQ0FBQyxTQUFDMkM7UUFDL0IsSUFBTTFGLFNBQU8wRixlQUNMbEYsT0FBcUJSLE9BQXJCUSxNQUFNQyxhQUFlVCxPQUFmUyxZQUNSa0YsdUJBQXVCLEFBQUNsRixlQUFlLE9BQ2QsQUFBQyxHQUFlRCxPQUFiQyxZQUFrQixPQUFMRCxRQUNiQSxNQUM1Qm9GLFlBQVkzRixRQUFRVSx5QkFBeUIsQ0FBQ2dGO1FBRXBELE9BQU9DO0lBQ1Q7SUFFTixPQUFPSjtBQUNUO0FBRU8sU0FBUzlJLG1CQUFtQnNELElBQUksRUFBRUMsT0FBTztJQUM5QyxJQUFJLEFBQUU0RixhQUFlN0YsS0FBZjZGO0lBRU4sSUFBTSxBQUFFQyxhQUFlekYsaUJBQVEsQ0FBdkJ5RixZQUNGQyxpQkFBaUJGLFlBQWEsR0FBRztJQUV2Q0EsYUFBYUUsZUFBZWhELEdBQUcsQ0FBQyxTQUFDaUQ7UUFDL0IsSUFBTWhHLFNBQU9nRyxnQkFDUEMsYUFBYUgsV0FBV3hGLFFBQVEsQ0FBQ04sUUFBTUM7UUFFN0MsT0FBT2dHO0lBQ1Q7SUFFQSxPQUFPSjtBQUNUO0FBRU8sU0FBU25JLG1CQUFtQnNDLElBQUksRUFBRUMsT0FBTztJQUM5QyxJQUFJLEFBQUVpRyxhQUFlbEcsS0FBZmtHO0lBRU4sSUFBTSxBQUFFQyxZQUFjOUYsaUJBQVEsQ0FBdEI4RixXQUNGQyxpQkFBaUJGLFlBQVksR0FBRztJQUV0Q0EsYUFBYUUsZUFBZXJELEdBQUcsQ0FBQyxTQUFDc0Q7UUFDL0IsSUFBTXJHLFNBQU9xRyxlQUNQQyxZQUFZSCxVQUFVN0YsUUFBUSxDQUFDTixRQUFNQztRQUUzQyxPQUFPcUc7SUFDVDtJQUVBLE9BQU9KO0FBQ1Q7QUFFTyxTQUFTaEssb0JBQW9COEQsSUFBSSxFQUFFQyxPQUFPO0lBQy9DLElBQUksQUFBRXNHLGNBQWdCdkcsS0FBaEJ1RztJQUVOLElBQU0sQUFBRUMsYUFBZW5HLGlCQUFRLENBQXZCbUcsWUFDRkMsa0JBQWtCRixhQUFhLEdBQUc7SUFFeENBLGNBQWNFLGdCQUFnQjFELEdBQUcsQ0FBQyxTQUFDMkQ7UUFDakMsSUFBTTFHLFNBQU8wRyxnQkFDUEMsYUFBYUgsV0FBV2xHLFFBQVEsQ0FBQ04sUUFBTUM7UUFFN0MsT0FBTzBHO0lBQ1Q7SUFFQSxPQUFPSjtBQUNUO0FBRU8sU0FBU3pLLG9CQUFvQmtFLElBQUksRUFBRUMsT0FBTztJQUMvQyxJQUFJLEFBQUUyRyxjQUFnQjVHLEtBQWhCNEc7SUFFTixJQUFNLEFBQUVDLGFBQWV4RyxpQkFBUSxDQUF2QndHLFlBQ0ZDLGtCQUFrQkYsYUFBYSxHQUFHO0lBRXhDQSxjQUFjRSxnQkFBZ0IvRCxHQUFHLENBQUMsU0FBQ2dFO1FBQ2pDLElBQU0vRyxTQUFPK0csZ0JBQ1BDLGFBQWFILFdBQVd2RyxRQUFRLENBQUNOLFFBQU1DO1FBRTdDLE9BQU8rRztJQUNUO0lBRUEsT0FBT0o7QUFDVDtBQUVPLFNBQVNuSCxxQkFBcUJPLElBQUksRUFBRUMsT0FBTztJQUNoRCxJQUFJLEFBQUVnSCxlQUFpQmpILEtBQWpCaUg7SUFFTixJQUFNLEFBQUVDLGFBQWU3RyxpQkFBUSxDQUF2QjZHLFlBQ0ZDLG1CQUFtQkYsY0FBYyxHQUFHO0lBRTFDQSxlQUFlRSxpQkFBaUJwRSxHQUFHLENBQUMsU0FBQ3FFO1FBQ25DLElBQU1wSCxTQUFPb0gsZ0JBQ1BDLGFBQWFILFdBQVc1RyxRQUFRLENBQUNOLFFBQU1DO1FBRTdDLE9BQU9vSDtJQUNUO0lBRUEsT0FBT0o7QUFDVDtBQUVPLFNBQVM3SyxxQkFBcUI0RCxJQUFJLEVBQUVDLE9BQU87SUFDaEQsSUFBSSxBQUFFcUgsZUFBaUJ0SCxLQUFqQnNIO0lBRU4sSUFBTSxBQUFFQyxjQUFnQmxILGlCQUFRLENBQXhCa0gsYUFDRkMsbUJBQW1CRixjQUFjLEdBQUc7SUFFMUNBLGVBQWVFLGlCQUFpQnpFLEdBQUcsQ0FBQyxTQUFDMEU7UUFDbkMsSUFBTXpILFNBQU95SCxpQkFDUEMsY0FBY0gsWUFBWWpILFFBQVEsQ0FBQ04sUUFBTUM7UUFFL0MsT0FBT3lIO0lBQ1Q7SUFFQSxPQUFPSjtBQUNUO0FBRU8sU0FBU2xLLHFCQUFxQjRDLElBQUksRUFBRUMsT0FBTztJQUNoRCxJQUFJLEFBQUUwSCxlQUFpQjNILEtBQWpCMkg7SUFFTixJQUFNLEFBQUVDLGNBQWdCdkgsaUJBQVEsQ0FBeEJ1SCxhQUNGQyxtQkFBbUJGLGNBQWMsR0FBRztJQUUxQ0EsZUFBZUUsaUJBQWlCOUUsR0FBRyxDQUFDLFNBQUMrRTtRQUNuQyxJQUFNOUgsU0FBTzhILGlCQUNQQyxjQUFjSCxZQUFZdEgsUUFBUSxDQUFDTixRQUFNQztRQUUvQyxPQUFPOEg7SUFDVDtJQUVBLE9BQU9KO0FBQ1Q7QUFFTyxTQUFTM0kscUJBQXFCZ0IsSUFBSSxFQUFFQyxPQUFPO0lBQ2hELElBQUksQUFBRStILGVBQWlCaEksS0FBakJnSTtJQUVOLElBQU0sQUFBRUMsY0FBZ0I1SCxpQkFBUSxDQUF4QjRILGFBQ0ZDLG1CQUFtQkYsY0FBZSxHQUFHO0lBRTNDQSxlQUFlRSxpQkFBaUJuRixHQUFHLENBQUMsU0FBQ29GO1FBQ25DLElBQU1uSSxTQUFPbUksaUJBQ1BDLGNBQWNILFlBQVkzSCxRQUFRLENBQUNOLFFBQU1DO1FBRS9DLE9BQU9tSTtJQUNUO0lBRUEsT0FBT0o7QUFDVDtBQUVPLFNBQVNwSixzQkFBc0JvQixJQUFJLEVBQUVDLE9BQU87SUFDakQsMEJBQTZCRCxLQUF2QnFJLGVBQUFBLGlEQUFnQixFQUFFLHdCQUFZLEdBQUc7SUFFdkMsSUFBTSxBQUFFQyx3QkFBMEJqSSxpQkFBUSxDQUFsQ2lJLHVCQUNGQyxvQkFBb0JGLGVBQ3BCRyxlQUFlRix1QkFBdUIsR0FBRztJQUUvQ0QsZ0JBQWdCRSxrQkFBa0J4RixHQUFHLENBQUMsU0FBQzBGO1FBQ3JDLElBQU16SSxTQUFPeUksa0JBQ1BDLGVBQWVGLGFBQWFsSSxRQUFRLENBQUNOLFFBQU1DO1FBRWpELE9BQU95STtJQUNUO0lBRUEsT0FBT0w7QUFDVDtBQUVPLFNBQVM3SyxzQkFBc0J3QyxJQUFJLEVBQUVDLE9BQU87SUFDakQsSUFBSSxBQUFFMEksZ0JBQWtCM0ksS0FBbEIySTtJQUVOLElBQU0sQUFBRTVHLGVBQWlCMUIsaUJBQVEsQ0FBekIwQixjQUNGNkcsb0JBQW9CRCxlQUFlLEdBQUc7SUFFNUNBLGdCQUFnQkMsa0JBQWtCN0YsR0FBRyxDQUFDLFNBQUNmO1FBQ3JDLElBQU1oQyxTQUFPZ0Msa0JBQ1BGLGVBQWVDLGFBQWF6QixRQUFRLENBQUNOLFFBQU1DO1FBRWpELE9BQU82QjtJQUNUO0lBRUEsT0FBTzZHO0FBQ1Q7QUFFTyxTQUFTM0w7SUFDZCxJQUFNNkwsU0FBUyxFQUFFO0lBRWpCLE9BQU9BO0FBQ1Q7QUFFTyxTQUFTNUw7SUFDZCxJQUFNNkwsYUFBYSxFQUFFO0lBRXJCLE9BQU9BO0FBQ1Q7QUFFTyxTQUFTM0osZUFBZWUsSUFBSTtJQUNqQyxJQUFNQyxXQUFXRCxLQUFLNkksTUFBTTtJQUU1QixPQUFPNUk7QUFDVDtBQUVPLFNBQVNSLGVBQWVZLElBQUk7SUFDakMsSUFBTW9DLFdBQVcsQUFBQ3BDLFNBQVMsT0FDUEEsS0FBS3dJLE1BQU0sS0FDVDtJQUV0QixPQUFPcEc7QUFDVDtBQUVPLFNBQVM5RixpQkFBaUJ3RyxLQUFLO0lBQ3BDLElBQU1FLFlBQVlGLE1BQU0wRixNQUFNO0lBRTlCLE9BQU94RjtBQUNUO0FBRU8sU0FBU3BHLHVCQUF1QnlELFFBQVE7SUFDN0MsSUFBTW9JLGVBQWUsQUFBQ3BJLGFBQWEsT0FDWkEsU0FBU21JLE1BQU0sS0FDYjtJQUN6QixPQUFPQztBQUNUO0FBRU8sU0FBUzNLLHlCQUF5Qm1ELFNBQVM7SUFDaEQsSUFBTUUsZ0JBQWdCRixVQUFVdUgsTUFBTTtJQUV0QyxPQUFPckg7QUFDVDtBQUVPLFNBQVMvQyx5QkFBeUJvQyxTQUFTO0lBQ2hELElBQU1FLGdCQUFnQixBQUFDRixjQUFjLE9BQ2JBLFVBQVVnSSxNQUFNLEtBQ2Q7SUFFMUIsT0FBTzlIO0FBQ1Q7QUFFTyxTQUFTMUUseUJBQXlCMkUsU0FBUztJQUNoRCxJQUFNRSxnQkFBZ0JGLFVBQVU2SCxNQUFNO0lBRXRDLE9BQU8zSDtBQUNUO0FBRU8sU0FBUzNDLHlCQUF5QjRDLFNBQVM7SUFDaEQsSUFBTUUsZ0JBQWdCLEFBQUNGLGNBQWMsT0FDYkEsVUFBVTBILE1BQU0sS0FDZDtJQUUxQixPQUFPeEg7QUFDVDtBQUVPLFNBQVN0RiwyQkFBMkIwRixVQUFVO0lBQ25ELElBQU1FLGlCQUFpQkYsV0FBV29ILE1BQU07SUFFeEMsT0FBT2xIO0FBQ1Q7QUFFTyxTQUFTdEUsK0JBQStCdUUsWUFBWTtJQUN6RCxJQUFNRSxtQkFBbUJGLGFBQWFpSCxNQUFNO0lBRTVDLE9BQU8vRztBQUNUO0FBRU8sU0FBU2pFLGlDQUFpQ2tFLGFBQWE7SUFDNUQsSUFBTUUsb0JBQW9CLEFBQUNGLGtCQUFrQixPQUNqQkEsY0FBYzhHLE1BQU0sS0FDbEI7SUFFOUIsT0FBTzVHO0FBQ1Q7QUFFTyxTQUFTbEUsMkNBQTJDbUUsa0JBQWtCO0lBQzNFLElBQU1FLHlCQUF5QkYsbUJBQW1CMkcsTUFBTTtJQUV4RCxPQUFPekc7QUFDVDtBQUVPLFNBQVN6QyxpQkFBaUIwQyxLQUFLO0lBQ3BDLElBQU1DLFlBQVlELE1BQU1RLEdBQUcsQ0FBQyxTQUFDeEM7UUFDM0IsSUFBTW9DLFdBQVdwQyxLQUFLd0ksTUFBTTtRQUU1QnhJLE9BQU9vQyxVQUFVLEdBQUc7UUFFcEIsT0FBT3BDO0lBQ1Q7SUFFQSxPQUFPaUM7QUFDVDtBQUVPLFNBQVNuRCxpQkFBaUJ3RCxLQUFLO0lBQ3BDLElBQU1DLFlBQVlELE1BQU1FLEdBQUcsQ0FBQyxTQUFDN0M7UUFDM0IsSUFBTUMsV0FBV0QsS0FBSzZJLE1BQU07UUFFNUI3SSxPQUFPQyxVQUFVLEdBQUc7UUFFcEIsT0FBT0Q7SUFDVDtJQUVBLE9BQU80QztBQUNUO0FBRU8sU0FBU3ZFLGlCQUFpQnlFLEtBQUs7SUFDcEMsSUFBTUUsWUFBWUYsTUFBTUQsR0FBRyxDQUFDLFNBQUNLO1FBQzNCLElBQU1ELFdBQVdDLEtBQUsyRixNQUFNO1FBRTVCM0YsT0FBT0QsVUFBVSxHQUFHO1FBRXBCLE9BQU9DO0lBQ1Q7SUFFQSxPQUFPRjtBQUNUO0FBRU8sU0FBU3pHLG1CQUFtQitHLE1BQU07SUFDdkMsSUFBTUUsYUFBYUYsT0FBT1QsR0FBRyxDQUFDLFNBQUNhO1FBQzdCLElBQU1ELFlBQVlDLE1BQU1tRixNQUFNO1FBRTlCbkYsUUFBUUQsV0FBVyxHQUFHO1FBRXRCLE9BQU9DO0lBQ1Q7SUFFQSxPQUFPRjtBQUNUO0FBRU8sU0FBUzNHLG1CQUFtQjhHLE1BQU07SUFDdkMsSUFBTUMsYUFBYUQsT0FBT2QsR0FBRyxDQUFDLFNBQUNNO1FBQzdCLElBQU1FLFlBQVlGLE1BQU0wRixNQUFNO1FBRTlCLE9BQU94RjtJQUNUO0lBRUEsT0FBT087QUFDVDtBQUVPLFNBQVNqSSxtQkFBbUJrSSxNQUFNO0lBQ3ZDLElBQU1FLGFBQWFGLE9BQU9oQixHQUFHLENBQUMsU0FBQ29CO1FBQzdCLElBQU1ELFlBQVlDLE1BQU00RSxNQUFNO1FBRTlCNUUsUUFBUUQsV0FBVyxHQUFHO1FBRXRCLE9BQU9DO0lBQ1Q7SUFFQSxPQUFPRjtBQUNUO0FBRU8sU0FBU3BHLHVCQUF1QnVHLFFBQVE7SUFDN0MsSUFBTUUsZUFBZUYsU0FBU3JCLEdBQUcsQ0FBQyxTQUFDeUI7UUFDakMsSUFBTUQsY0FBY0MsUUFBUXVFLE1BQU07UUFFbEMsT0FBT3hFO0lBQ1Q7SUFFQSxPQUFPRDtBQUNUO0FBRU8sU0FBUy9FLHVCQUF1QmtGLFFBQVE7SUFDN0MsSUFBTUUsZUFBZUYsU0FBUzFCLEdBQUcsQ0FBQyxTQUFDOEI7UUFDakMsSUFBTUQsY0FBY0MsUUFBUWtFLE1BQU07UUFFbENsRSxVQUFVRCxhQUFhLEdBQUc7UUFFMUIsT0FBT0M7SUFDVDtJQUVBLE9BQU9GO0FBQ1Q7QUFFTyxTQUFTNUUseUJBQXlCK0UsU0FBUztJQUNoRCxJQUFNRSxnQkFBZ0JGLFVBQVUvQixHQUFHLENBQUMsU0FBQ21DO1FBQ25DLElBQU1ELGVBQWVDLFNBQVM2RCxNQUFNO1FBRXBDN0QsV0FBV0QsY0FBZSxHQUFHO1FBRTdCLE9BQU9DO0lBQ1Q7SUFFQSxPQUFPRjtBQUNUO0FBRU8sU0FBU3JJLDJCQUEyQmtKLFVBQVU7SUFDbkQsSUFBTUUsaUJBQWlCRixXQUFXOUMsR0FBRyxDQUFDLFNBQUNrRDtRQUNyQyxJQUFNRCxpQkFBaUJDLFdBQVc4QyxNQUFNO1FBRXhDOUMsYUFBYUQsZ0JBQWdCLEdBQUc7UUFFaEMsT0FBT0M7SUFDVDtJQUVBLE9BQU9GO0FBQ1Q7QUFFTyxTQUFTaEgsMkJBQTJCeUcsVUFBVTtJQUNuRCxJQUFNQyxpQkFBaUJELFdBQVd6QyxHQUFHLENBQUMsU0FBQzZDO1FBQ3JDLElBQU1GLGdCQUFnQkUsVUFBVW1ELE1BQU07UUFFdENuRCxZQUFZRixlQUFlLEdBQUc7UUFFOUIsT0FBT0U7SUFDVDtJQUVBLE9BQU9IO0FBQ1Q7QUFFTyxTQUFTOUgsMkJBQTJCdUksVUFBVTtJQUNuRCxJQUFNRSxpQkFBaUJGLFdBQVduRCxHQUFHLENBQUMsU0FBQ3VEO1FBQ3JDLElBQU1ELGdCQUFnQkMsVUFBVXlDLE1BQU07UUFFdEN6QyxZQUFZRCxlQUFnQixHQUFHO1FBRS9CLE9BQU9DO0lBQ1Q7SUFFQSxPQUFPRjtBQUNUO0FBRU8sU0FBU2pJLDJCQUEyQmdILFVBQVU7SUFDbkQsSUFBTUUsaUJBQWlCRixXQUFXcEMsR0FBRyxDQUFDLFNBQUN3QztRQUNyQyxJQUFNRCxlQUFlQyxTQUFTd0QsTUFBTTtRQUVwQ3hELFdBQVdELGNBQWUsR0FBRztRQUU3QixPQUFPQztJQUNUO0lBRUEsT0FBT0Y7QUFDVDtBQUVPLFNBQVMzRiwrQkFBK0J1SCxZQUFZO0lBQ3pELElBQU1FLG1CQUFtQkYsYUFBYWxFLEdBQUcsQ0FBQyxTQUFDc0U7UUFDekMsSUFBTUQsaUJBQWlCQyxXQUFXMEIsTUFBTTtRQUV4QzFCLGFBQWFELGdCQUFnQixHQUFHO1FBRWhDLE9BQU9DO0lBQ1Q7SUFFQSxPQUFPRjtBQUNUO0FBRU8sU0FBU2hMLDZCQUE2Qm9LLFdBQVc7SUFDdEQsSUFBTUUsa0JBQWtCRixZQUFZeEQsR0FBRyxDQUFDLFNBQUM0RDtRQUN2QyxJQUFNRCxpQkFBaUJDLFdBQVdvQyxNQUFNO1FBRXhDcEMsYUFBYUQsZ0JBQWdCLEdBQUc7UUFFaEMsT0FBT0M7SUFDVDtJQUVBLE9BQU9GO0FBQ1Q7QUFFTyxTQUFTMUssNkJBQTZCNkssV0FBVztJQUN0RCxJQUFNRSxrQkFBa0JGLFlBQVk3RCxHQUFHLENBQUMsU0FBQ2lFO1FBQ3ZDLElBQU1ELGlCQUFpQkMsV0FBVytCLE1BQU07UUFFeEMvQixhQUFhRCxnQkFBZ0IsR0FBRztRQUVoQyxPQUFPQztJQUNUO0lBRUEsT0FBT0Y7QUFDVDtBQUVPLFNBQVM3SCwrQkFBK0IrSSxZQUFZO0lBQ3pELElBQU1FLG1CQUFtQkYsYUFBYWpGLEdBQUcsQ0FBQyxTQUFDcUY7UUFDekMsSUFBTUQsa0JBQWtCQyxZQUFZVyxNQUFNO1FBRTFDLE9BQU9aO0lBQ1Q7SUFFQSxPQUFPRDtBQUNUO0FBRU8sU0FBUzdMLCtCQUErQmlMLFlBQVk7SUFDekQsSUFBTUUsbUJBQW1CRixhQUFhdkUsR0FBRyxDQUFDLFNBQUMyRTtRQUN6QyxJQUFNRCxrQkFBa0JDLFlBQVlxQixNQUFNO1FBRTFDckIsY0FBY0QsaUJBQWtCLEdBQUc7UUFFbkMsT0FBT0M7SUFDVDtJQUVBLE9BQU9GO0FBQ1Q7QUFFTyxTQUFTbkssK0JBQStCc0ssWUFBWTtJQUN6RCxJQUFNRSxtQkFBbUJGLGFBQWE1RSxHQUFHLENBQUMsU0FBQ2dGO1FBQ3pDLElBQU1ELGtCQUFrQkMsWUFBWWdCLE1BQU07UUFFMUNoQixjQUFjRCxpQkFBaUIsR0FBRztRQUVsQyxPQUFPQztJQUNUO0lBRUEsT0FBT0Y7QUFDVDtBQUVPLFNBQVNoSixpQ0FBaUN3SixhQUFhO0lBQzVELElBQU1FLG9CQUFvQkYsY0FBY1ksZUFBZSxDQUFDLFNBQUNQO1FBQ3ZELElBQU1ELG1CQUFtQkMsYUFBYUssTUFBTTtRQUU1QyxPQUFPTjtJQUNUO0lBRUEsT0FBT0Y7QUFDVDtBQUVPLFNBQVM5SyxpQ0FBaUNrTCxhQUFhO0lBQzVELElBQU1DLG9CQUFvQkQsY0FBYzVGLEdBQUcsQ0FBQyxTQUFDakI7UUFDM0MsSUFBTUUsbUJBQW1CRixhQUFhaUgsTUFBTTtRQUU1Q2pILGVBQWVFLGtCQUFtQixHQUFHO1FBRXJDLE9BQU9GO0lBQ1Q7SUFFQSxPQUFPOEc7QUFDVCJ9
727
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsaXRpZXMvanNvbi5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IGVsZW1lbnRzIGZyb20gXCIuLi9lbGVtZW50c1wiO1xuXG5pbXBvcnQgeyBmaW5kTWV0YVR5cGVCeU1ldGFUeXBlTmFtZSB9IGZyb20gXCIuLi9tZXRhVHlwZXNcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIHRlcm1Gcm9tSlNPTihqc29uLCBjb250ZXh0KSB7XG4gIGxldCB7IHRlcm0gfSA9IGpzb247XG5cbiAgY29uc3QgdGVybUpTT04gPSB0ZXJtOyAgLy8vXG5cbiAganNvbiA9IHRlcm1KU09OOyAgLy8vXG5cbiAgY29uc3QgeyBUZXJtIH0gPSBlbGVtZW50cztcblxuICB0ZXJtID0gVGVybS5mcm9tSlNPTihqc29uLCBjb250ZXh0KTtcblxuICByZXR1cm4gdGVybTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVGcm9tSlNPTihqc29uLCBjb250ZXh0KSB7XG4gIGxldCB7IHR5cGUgfSA9IGpzb247XG5cbiAgaWYgKHR5cGUgIT09IG51bGwpIHtcbiAgICBqc29uID0gdHlwZTsgIC8vL1xuXG4gICAgY29uc3QgeyBuYW1lLCBwcmVmaXhOYW1lIH0gPSBqc29uLFxuICAgICAgICAgIG5vbWluYWxUeXBlTmFtZSA9IChwcmVmaXhOYW1lICE9PSBudWxsKSA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYCR7cHJlZml4TmFtZX0ke25hbWV9YCA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTsgLy8vXG5cbiAgICB0eXBlID0gY29udGV4dC5maW5kVHlwZUJ5Tm9taW5hbFR5cGVOYW1lKG5vbWluYWxUeXBlTmFtZSk7XG4gIH1cblxuICByZXR1cm4gdHlwZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1ldGFUeXBlRnJvbUpTT04oanNvbiwgY29udGV4dCkge1xuICBsZXQgeyBtZXRhVHlwZSB9ID0ganNvbjtcblxuICBpZiAobWV0YVR5cGUgIT09IG51bGwpIHtcbiAgICBqc29uID0gbWV0YVR5cGU7ICAvLy9cblxuICAgIGNvbnN0IHsgbmFtZSB9ID0ganNvbixcbiAgICAgICAgICBtZXRhVHlwZU5hbWUgPSBuYW1lOyAgLy8vXG5cbiAgICBtZXRhVHlwZSA9IGNvbnRleHQuZmluZE1ldGFUeXBlQnlNZXRhVHlwZU5hbWUobWV0YVR5cGVOYW1lKTtcbiAgfVxuXG4gIHJldHVybiBtZXRhVHlwZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0YXRlbWVudEZyb21KU09OKGpzb24sIGNvbnRleHQpIHtcbiAgbGV0IHsgc3RhdGVtZW50ID0gbnVsbCB9ID0ganNvbjtcblxuICBpZiAoc3RhdGVtZW50ICE9PSBudWxsKSB7XG4gICAgY29uc3QgeyBTdGF0ZW1lbnQgfSA9IGVsZW1lbnRzLFxuICAgICAgICAgIHN0YXRlbWVudEpTT04gPSBzdGF0ZW1lbnQ7ICAvLy9cblxuICAgIGpzb24gPSBzdGF0ZW1lbnRKU09OOyAvLy9cblxuICAgIHN0YXRlbWVudCA9IFN0YXRlbWVudC5mcm9tSlNPTihqc29uLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBzdGF0ZW1lbnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZWR1Y3Rpb25Gcm9tSlNPTihqc29uLCBjb250ZXh0KSB7XG4gIGxldCB7IGRlZHVjdGlvbiB9ID0ganNvbjtcblxuICBjb25zdCB7IERlZHVjdGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIGRlZHVjdGlvbkpTT04gPSBkZWR1Y3Rpb247ICAvLy9cblxuICBqc29uID0gZGVkdWN0aW9uSlNPTjsgIC8vL1xuXG4gIGRlZHVjdGlvbiA9IERlZHVjdGlvbi5mcm9tSlNPTihqc29uLCBjb250ZXh0KTtcblxuICByZXR1cm4gZGVkdWN0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2lnbmF0dXJlRnJvbUpTT04oanNvbiwgY29udGV4dCkge1xuICBsZXQgeyBzaWduYXR1cmUgPSBudWxsIH0gPSBqc29uO1xuXG4gIGlmIChzaWduYXR1cmUgIT09IG51bGwpIHtcbiAgICBjb25zdCB7IFNpZ25hdHVyZSB9ID0gZWxlbWVudHMsXG4gICAgICAgICAgc2lnbmF0dXJlSlNPTiA9IHNpZ25hdHVyZTsgIC8vL1xuXG4gICAganNvbiA9IHNpZ25hdHVyZUpTT047IC8vL1xuXG4gICAgc2lnbmF0dXJlID0gU2lnbmF0dXJlLmZyb21KU09OKGpzb24sIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHNpZ25hdHVyZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlZmVyZW5jZUZyb21KU09OKGpzb24sIGNvbnRleHQpIHtcbiAgbGV0IHsgcmVmZXJlbmNlIH0gPSBqc29uO1xuXG4gIGNvbnN0IHsgUmVmZXJlbmNlIH0gPSBlbGVtZW50cyxcbiAgICAgICAgcmVmZXJlbmNlSlNPTiA9IHJlZmVyZW5jZTsgIC8vL1xuXG4gIGpzb24gPSByZWZlcmVuY2VKU09OOyAvLy9cblxuICByZWZlcmVuY2UgPSBSZWZlcmVuY2UuZnJvbUpTT04oanNvbiwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHJlZmVyZW5jZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbmNsdXNpb25Gcm9tSlNPTihqc29uLCBjb250ZXh0KSB7XG4gIGxldCB7IGNvbmNsdXNpb24gfSA9IGpzb247XG5cbiAgY29uc3QgeyBDb25jbHVzaW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgY29uY2x1c2lvbkpTT04gPSBjb25jbHVzaW9uOyAgLy8vXG5cbiAganNvbiA9IGNvbmNsdXNpb25KU09OOyAgLy8vXG5cbiAgY29uY2x1c2lvbiA9IENvbmNsdXNpb24uZnJvbUpTT04oanNvbiwgY29udGV4dCk7XG5cbiAgcmV0dXJuIGNvbmNsdXNpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtZXRhdmFyaWFibGVGcm9tSlNPTihqc29uLCBjb250ZXh0KSB7XG4gIGxldCB7IG1ldGF2YXJpYWJsZSB9ID0ganNvbjtcblxuICBjb25zdCB7IE1ldGF2YXJpYWJsZSB9ID0gZWxlbWVudHMsXG4gICAgICAgIG1ldGF2YXJpYWJsZUpTT04gPSBtZXRhdmFyaWFibGU7ICAvLy9cblxuICBqc29uID0gbWV0YXZhcmlhYmxlSlNPTjsgLy8vXG5cbiAgbWV0YXZhcmlhYmxlID0gTWV0YXZhcmlhYmxlLmZyb21KU09OKGpzb24sIGNvbnRleHQpO1xuXG4gIHJldHVybiBtZXRhdmFyaWFibGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9jZWR1cmVDYWxsRnJvbUpTT04oanNvbiwgY29udGV4dCkge1xuICBsZXQgeyBwcm9jZWR1cmVDYWxsID0gbnVsbCB9ID0ganNvbjtcblxuICBpZiAocHJvY2VkdXJlQ2FsbCAhPT0gbnVsbCkge1xuICAgIGNvbnN0IHsgUHJvY2VkdXJlQ2FsbCB9ID0gZWxlbWVudHMsXG4gICAgICAgICAgcHJvY2VkdXJlQ2FsbEpTT04gPSBwcm9jZWR1cmVDYWxsOyAgLy8vXG5cbiAgICBqc29uID0gcHJvY2VkdXJlQ2FsbEpTT047IC8vL1xuXG4gICAgcHJvY2VkdXJlQ2FsbCA9IFByb2NlZHVyZUNhbGwuZnJvbUpTT04oanNvbiwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gcHJvY2VkdXJlQ2FsbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb2NlZHVyZVJlZmVyZW5jZUZyb21KU09OKGpzb24sIGNvbnRleHQpIHtcbiAgbGV0IHsgcHJvY2VkdXJlUmVmZXJlbmNlIH0gPSBqc29uO1xuXG4gIGNvbnN0IHsgUHJvY2VkdXJlUmVmZXJlbmNlIH0gPSBlbGVtZW50cyxcbiAgICAgICAgcHJvY2VkdXJlUmVmZXJlbmNlSlNPTiA9IHByb2NlZHVyZVJlZmVyZW5jZTsgIC8vL1xuXG4gIGpzb24gPSBwcm9jZWR1cmVSZWZlcmVuY2VKU09OOyAgLy8vXG5cbiAgcHJvY2VkdXJlUmVmZXJlbmNlID0gUHJvY2VkdXJlUmVmZXJlbmNlLmZyb21KU09OKGpzb24sIGNvbnRleHQpO1xuXG4gIHJldHVybiBwcm9jZWR1cmVSZWZlcmVuY2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlc0Zyb21KU09OKGpzb24sIHR5cGVzLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgdHlwZXM6IHR5cGVzSlNPTiB9ID0ganNvbjtcblxuICBjb25zdCB7IFR5cGUgfSA9IGVsZW1lbnRzO1xuXG4gIHR5cGVzSlNPTi5mb3JFYWNoKCh0eXBlSlNPTikgPT4ge1xuICAgIGNvbnN0IGpzb24gPSB0eXBlSlNPTiwgIC8vL1xuICAgICAgICAgIHR5cGUgPSBUeXBlLmZyb21KU09OKGpzb24sIGNvbnRleHQpO1xuXG4gICAgdHlwZXMucHVzaCh0eXBlKTtcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0ZXJtc0Zyb21KU09OKGpzb24sIGNvbnRleHQpIHtcbiAgbGV0IHsgdGVybXMgfSA9IGpzb247XG5cbiAgY29uc3QgeyBUZXJtIH0gPSBlbGVtZW50cyxcbiAgICAgICAgdGVybXNKU09OID0gdGVybXM7IC8vL1xuXG4gIHRlcm1zID0gdGVybXNKU09OLm1hcCgodGVybUpTT04pID0+IHtcbiAgICBjb25zdCBqc29uID0gdGVybUpTT04sICAvLy9cbiAgICAgICAgICB0ZXJtID0gVGVybS5mcm9tSlNPTihqc29uLCBjb250ZXh0KTtcblxuICAgIHJldHVybiB0ZXJtO1xuICB9KTtcblxuICByZXR1cm4gdGVybXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBydWxlc0Zyb21KU09OKGpzb24sIGNvbnRleHQpIHtcbiAgbGV0IHsgcnVsZXMgfSA9IGpzb247XG5cbiAgY29uc3QgeyBSdWxlIH0gPSBlbGVtZW50cyxcbiAgICAgICAgcnVsZXNKU09OID0gcnVsZXM7IC8vL1xuXG4gIHJ1bGVzID0gcnVsZXNKU09OLm1hcCgocnVsZUpTT04pID0+IHtcbiAgICBjb25zdCBqc29uID0gcnVsZUpTT04sICAvLy9cbiAgICAgICAgICBydWxlID0gUnVsZS5mcm9tSlNPTihqc29uLCBjb250ZXh0KTtcblxuICAgIHJldHVybiBydWxlO1xuICB9KTtcblxuICByZXR1cm4gcnVsZXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsYWJlbEZyb21KU09OKGpzb24sIGNvbnRleHQpIHtcbiAgbGV0IHsgbGFiZWwgfSA9IGpzb247XG5cbiAgY29uc3QgeyBMYWJlbCB9ID0gZWxlbWVudHMsXG4gICAgICAgIGxhYmVsSlNPTiA9IGxhYmVsOyAgLy8vXG5cbiAganNvbiA9IGxhYmVsSlNPTjsgLy8vXG5cbiAgbGFiZWwgPSBMYWJlbC5mcm9tSlNPTihqc29uLCBjb250ZXh0KTtcblxuICByZXR1cm4gbGFiZWw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmcmFtZXNGcm9tSlNPTihqc29uLCBjb250ZXh0KSB7XG4gIGxldCB7IGZyYW1lcyB9ID0ganNvbjtcblxuICBjb25zdCB7IEZyYW1lIH0gPSBlbGVtZW50cyxcbiAgICAgICAgZnJhbWVzSlNPTiA9IGZyYW1lczsgLy8vXG5cbiAgZnJhbWVzID0gZnJhbWVzSlNPTi5tYXAoKGZyYW1lSlNPTikgPT4ge1xuICAgIGNvbnN0IGpzb24gPSBmcmFtZUpTT04sICAvLy9cbiAgICAgICAgICBmcmFtZSA9IEZyYW1lLmZyb21KU09OKGpzb24sIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIGZyYW1lO1xuICB9KTtcblxuICByZXR1cm4gZnJhbWVzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbGFiZWxzRnJvbUpTT04oanNvbiwgY29udGV4dCkge1xuICBsZXQgeyBsYWJlbHMgfSA9IGpzb247XG5cbiAgY29uc3QgeyBMYWJlbCB9ID0gZWxlbWVudHMsXG4gICAgICAgIGxhYmVsc0pTT04gPSBsYWJlbHM7ICAvLy9cblxuICBsYWJlbHMgPSBsYWJlbHNKU09OLm1hcCgobGFiZWxKU09OKSA9PiB7XG4gICAgY29uc3QganNvbiA9IGxhYmVsSlNPTiwgLy8vXG4gICAgICAgICAgbGFiZWwgPSBMYWJlbC5mcm9tSlNPTihqc29uLCBjb250ZXh0KTtcblxuICAgIHJldHVybiBsYWJlbDtcbiAgfSk7XG5cbiAgcmV0dXJuIGxhYmVscztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGF4aW9tc0Zyb21KU09OKGpzb24sIGNvbnRleHQpIHtcbiAgbGV0IHsgYXhpb21zIH0gPSBqc29uO1xuXG4gIGNvbnN0IHsgQXhpb20gfSA9IGVsZW1lbnRzLFxuICAgICAgICBheGlvbXNKU09OID0gYXhpb21zOyAvLy9cblxuICBheGlvbXMgPSBheGlvbXNKU09OLm1hcCgoYXhpb21KU09OKSA9PiB7XG4gICAgY29uc3QganNvbiA9IGF4aW9tSlNPTiwgIC8vL1xuICAgICAgICAgIGF4aW9tID0gQXhpb20uZnJvbUpTT04oanNvbiwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gYXhpb207XG4gIH0pO1xuXG4gIHJldHVybiBheGlvbXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcmVtaXNlc0Zyb21KU09OKGpzb24sIGNvbnRleHQpIHtcbiAgbGV0IHsgcHJlbWlzZXMgfSA9IGpzb247XG5cbiAgY29uc3QgeyBQcmVtaXNlIH0gPSBlbGVtZW50cyxcbiAgICAgICAgcHJlbWlzZXNKU09OID0gcHJlbWlzZXM7ICAvLy9cblxuICBwcmVtaXNlcyA9IHByZW1pc2VzSlNPTi5tYXAoKHByZW1pc2VKU09OKSA9PiB7XG4gICAgY29uc3QganNvbiA9IHByZW1pc2VKU09OLCAvLy9cbiAgICAgICAgICBwcmVtaXNlID0gUHJlbWlzZS5mcm9tSlNPTihqc29uLCBjb250ZXh0KTtcblxuICAgIHJldHVybiBwcmVtaXNlO1xuICB9KTtcblxuICByZXR1cm4gcHJlbWlzZXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0aGVvcmVtc0Zyb21KU09OKGpzb24sIGNvbnRleHQpIHtcbiAgbGV0IHsgdGhlb3JlbXMgfSA9IGpzb247XG5cbiAgY29uc3QgeyBUaGVvcmVtIH0gPSBlbGVtZW50cyxcbiAgICAgICAgdGhlb3JlbXNKU09OID0gdGhlb3JlbXM7IC8vL1xuXG4gIHRoZW9yZW1zID0gdGhlb3JlbXNKU09OLm1hcCgodGhlb3JlbUpTT04pID0+IHtcbiAgICBjb25zdCBqc29uID0gdGhlb3JlbUpTT04sICAvLy9cbiAgICAgICAgICB0aGVvcmVtID0gVGhlb3JlbS5mcm9tSlNPTihqc29uLCBjb250ZXh0KTtcblxuICAgIHJldHVybiB0aGVvcmVtO1xuICB9KTtcblxuICByZXR1cm4gdGhlb3JlbXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YXJpYWJsZXNGcm9tSlNPTihqc29uLCBjb250ZXh0KSB7XG4gIGxldCB7IHZhcmlhYmxlcyB9ID0ganNvbjtcblxuICBjb25zdCB7IFZhcmlhYmxlIH0gPSBlbGVtZW50cyxcbiAgICAgICAgdmFyaWFibGVzSlNPTiA9IHZhcmlhYmxlczsgLy8vXG5cbiAgdmFyaWFibGVzID0gdmFyaWFibGVzSlNPTi5tYXAoKHZhcmlhYmxlSlNPTikgPT4ge1xuICAgIGNvbnN0IGpzb24gPSB2YXJpYWJsZUpTT04sICAvLy9cbiAgICAgICAgICB2YXJpYWJsZSA9IFZhcmlhYmxlLmZyb21KU09OKGpzb24sIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIHZhcmlhYmxlO1xuICB9KTtcblxuICByZXR1cm4gdmFyaWFibGVzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvcGVydGllc0Zyb21KU09OKGpzb24sIGNvbnRleHQpIHtcbiAgbGV0IHsgcHJvcGVydGllcyB9ID0ganNvbjtcblxuICBjb25zdCB7IFByb3BlcnR5IH0gPSBlbGVtZW50cyxcbiAgICAgICAgcHJvcGVydGllc0pTT04gPSBwcm9wZXJ0aWVzOyAvLy9cblxuICBwcm9wZXJ0aWVzID0gcHJvcGVydGllc0pTT04ubWFwKChwcm9wZXJ0eUpTT04pID0+IHtcbiAgICBjb25zdCBqc29uID0gcHJvcGVydHlKU09OLCAgLy8vXG4gICAgICAgICAgcHJvcGVydHkgPSBQcm9wZXJ0eS5mcm9tSlNPTihqc29uLCBjb250ZXh0KTtcblxuICAgIHJldHVybiBwcm9wZXJ0eTtcbiAgfSk7XG5cbiAgcmV0dXJuIHByb3BlcnRpZXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdXBlclR5cGVzRnJvbUpTT04oanNvbiwgY29udGV4dCkge1xuICBjb25zdCB7IHN1cGVyVHlwZXM6IHN1cGVyVHlwZXNKU09OIH0gPSBqc29uO1xuXG4gIGNvbnN0IHN1cGVyVHlwZXMgPSBzdXBlclR5cGVzSlNPTi5tYXAoKHN1cGVyVHlwZUpTT04pID0+IHtcbiAgICAgICAgICBjb25zdCBqc29uID0gc3VwZXJUeXBlSlNPTiwgIC8vL1xuICAgICAgICAgICAgICAgIHsgbmFtZSwgcHJlZml4TmFtZSB9ID0ganNvbixcbiAgICAgICAgICAgICAgICBub21pbmFsU3VwZXJUeXBlTmFtZSA9IChwcmVmaXhOYW1lICE9PSBudWxsKSA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGAke3ByZWZpeE5hbWV9JHtuYW1lfWAgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lLCAvLy9cbiAgICAgICAgICAgICAgICBzdXBlclR5cGUgPSBjb250ZXh0LmZpbmRUeXBlQnlOb21pbmFsVHlwZU5hbWUobm9taW5hbFN1cGVyVHlwZU5hbWUpO1xuXG4gICAgICAgICAgcmV0dXJuIHN1cGVyVHlwZTtcbiAgICAgICAgfSk7XG5cbiAgcmV0dXJuIHN1cGVyVHlwZXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoeXBvdGhlc2VzRnJvbUpTT04oanNvbiwgY29udGV4dCkge1xuICBsZXQgeyBoeXBvdGhlc2VzIH0gPSBqc29uO1xuXG4gIGNvbnN0IHsgSHlwb3RoZXNpcyB9ID0gZWxlbWVudHMsXG4gICAgICAgIGh5cG90aGVzZXNKU09OID0gaHlwb3RoZXNlczsgIC8vL1xuXG4gIGh5cG90aGVzZXMgPSBoeXBvdGhlc2VzSlNPTi5tYXAoKGh5cG90aGVzaXNKU09OKSA9PiB7XG4gICAgY29uc3QganNvbiA9IGh5cG90aGVzaXNKU09OLCAvLy9cbiAgICAgICAgICBoeXBvdGhlc2lzID0gSHlwb3RoZXNpcy5mcm9tSlNPTihqc29uLCBjb250ZXh0KTtcblxuICAgIHJldHVybiBoeXBvdGhlc2lzO1xuICB9KTtcblxuICByZXR1cm4gaHlwb3RoZXNlcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcmFtZXRlcnNGcm9tSlNPTihqc29uLCBjb250ZXh0KSB7XG4gIGxldCB7IHBhcmFtZXRlcnMgfSA9IGpzb247XG5cbiAgY29uc3QgeyBQYXJhbWV0ZXIgfSA9IGVsZW1lbnRzLFxuICAgICAgICBwYXJhbWV0ZXJzSlNPTiA9IHBhcmFtZXRlcnM7IC8vL1xuXG4gIHBhcmFtZXRlcnMgPSBwYXJhbWV0ZXJzSlNPTi5tYXAoKHBhcmFtZXRlckpTT04pID0+IHtcbiAgICBjb25zdCBqc29uID0gcGFyYW1ldGVySlNPTiwgIC8vL1xuICAgICAgICAgIHBhcmFtZXRlciA9IFBhcmFtZXRlci5mcm9tSlNPTihqc29uLCBjb250ZXh0KTtcblxuICAgIHJldHVybiBwYXJhbWV0ZXI7XG4gIH0pO1xuXG4gIHJldHVybiBwYXJhbWV0ZXJzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29uamVjdHVyZXNGcm9tSlNPTihqc29uLCBjb250ZXh0KSB7XG4gIGxldCB7IGNvbmplY3R1cmVzIH0gPSBqc29uO1xuXG4gIGNvbnN0IHsgQ29uamVjdHVyZSB9ID0gZWxlbWVudHMsXG4gICAgICAgIGNvbmplY3R1cmVzSlNPTiA9IGNvbmplY3R1cmVzOyAvLy9cblxuICBjb25qZWN0dXJlcyA9IGNvbmplY3R1cmVzSlNPTi5tYXAoKGNvbmplY3R1cmVKU09OKSA9PiB7XG4gICAgY29uc3QganNvbiA9IGNvbmplY3R1cmVKU09OLCAgLy8vXG4gICAgICAgICAgY29uamVjdHVyZSA9IENvbmplY3R1cmUuZnJvbUpTT04oanNvbiwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gY29uamVjdHVyZTtcbiAgfSk7XG5cbiAgcmV0dXJuIGNvbmplY3R1cmVzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29tYmluYXRvcnNGcm9tSlNPTihqc29uLCBjb250ZXh0KSB7XG4gIGxldCB7IGNvbWJpbmF0b3JzIH0gPSBqc29uO1xuXG4gIGNvbnN0IHsgQ29tYmluYXRvciB9ID0gZWxlbWVudHMsXG4gICAgICAgIGNvbWJpbmF0b3JzSlNPTiA9IGNvbWJpbmF0b3JzOyAvLy9cblxuICBjb21iaW5hdG9ycyA9IGNvbWJpbmF0b3JzSlNPTi5tYXAoKGNvbWJpbmF0b3JKU09OKSA9PiB7XG4gICAgY29uc3QganNvbiA9IGNvbWJpbmF0b3JKU09OLCAgLy8vXG4gICAgICAgICAgY29tYmluYXRvciA9IENvbWJpbmF0b3IuZnJvbUpTT04oanNvbiwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gY29tYmluYXRvcjtcbiAgfSk7XG5cbiAgcmV0dXJuIGNvbWJpbmF0b3JzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHlwZVByZWZpeGVzRnJvbUpTT04oanNvbiwgY29udGV4dCkge1xuICBsZXQgeyB0eXBlUHJlZml4ZXMgfSA9IGpzb247XG5cbiAgY29uc3QgeyBUeXBlUHJlZml4IH0gPSBlbGVtZW50cyxcbiAgICAgICAgdHlwZVByZWZpeGVzSlNPTiA9IHR5cGVQcmVmaXhlczsgLy8vXG5cbiAgdHlwZVByZWZpeGVzID0gdHlwZVByZWZpeGVzSlNPTi5tYXAoKHR5cGVQcmVmaXhKU09OKSA9PiB7XG4gICAgY29uc3QganNvbiA9IHR5cGVQcmVmaXhKU09OLCAgLy8vXG4gICAgICAgICAgdHlwZVByZWZpeCA9IFR5cGVQcmVmaXguZnJvbUpTT04oanNvbiwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gdHlwZVByZWZpeDtcbiAgfSk7XG5cbiAgcmV0dXJuIHR5cGVQcmVmaXhlcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbnN0cnVjdG9yc0Zyb21KU09OKGpzb24sIGNvbnRleHQpIHtcbiAgbGV0IHsgY29uc3RydWN0b3JzIH0gPSBqc29uO1xuXG4gIGNvbnN0IHsgQ29uc3RydWN0b3IgfSA9IGVsZW1lbnRzLFxuICAgICAgICBjb25zdHJ1Y3RvcnNKU09OID0gY29uc3RydWN0b3JzOyAvLy9cblxuICBjb25zdHJ1Y3RvcnMgPSBjb25zdHJ1Y3RvcnNKU09OLm1hcCgoY29uc3RydWN0b3JKU09OKSA9PiB7XG4gICAgY29uc3QganNvbiA9IGNvbnN0cnVjdG9ySlNPTiwgIC8vL1xuICAgICAgICAgIGNvbnN0cnVjdG9yID0gQ29uc3RydWN0b3IuZnJvbUpTT04oanNvbiwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gY29uc3RydWN0b3I7XG4gIH0pO1xuXG4gIHJldHVybiBjb25zdHJ1Y3RvcnM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtZXRhdGhlb3JlbXNGcm9tSlNPTihqc29uLCBjb250ZXh0KSB7XG4gIGxldCB7IG1ldGF0aGVvcmVtcyB9ID0ganNvbjtcblxuICBjb25zdCB7IE1ldGF0aGVvcmVtIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbWV0YXRoZW9yZW1zSlNPTiA9IG1ldGF0aGVvcmVtczsgLy8vXG5cbiAgbWV0YXRoZW9yZW1zID0gbWV0YXRoZW9yZW1zSlNPTi5tYXAoKG1ldGF0aGVvcmVtSlNPTikgPT4ge1xuICAgIGNvbnN0IGpzb24gPSBtZXRhdGhlb3JlbUpTT04sICAvLy9cbiAgICAgICAgICBtZXRhdGhlb3JlbSA9IE1ldGF0aGVvcmVtLmZyb21KU09OKGpzb24sIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIG1ldGF0aGVvcmVtO1xuICB9KTtcblxuICByZXR1cm4gbWV0YXRoZW9yZW1zO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3VwcG9zaXRpb25zRnJvbUpTT04oanNvbiwgY29udGV4dCkge1xuICBsZXQgeyBzdXBwb3NpdGlvbnMgfSA9IGpzb247XG5cbiAgY29uc3QgeyBTdXBwb3NpdGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIHN1cHBvc2l0aW9uc0pTT04gPSBzdXBwb3NpdGlvbnM7ICAvLy9cblxuICBzdXBwb3NpdGlvbnMgPSBzdXBwb3NpdGlvbnNKU09OLm1hcCgoc3VwcG9zaXRpb25KU09OKSA9PiB7XG4gICAgY29uc3QganNvbiA9IHN1cHBvc2l0aW9uSlNPTiwgLy8vXG4gICAgICAgICAgc3VwcG9zaXRpb24gPSBTdXBwb3NpdGlvbi5mcm9tSlNPTihqc29uLCBjb250ZXh0KTtcblxuICAgIHJldHVybiBzdXBwb3NpdGlvbjtcbiAgfSk7XG5cbiAgcmV0dXJuIHN1cHBvc2l0aW9ucztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN1YnN0aXR1dGlvbnNGcm9tSlNPTihqc29uLCBjb250ZXh0KSB7XG4gIGxldCB7IHN1YnN0aXR1dGlvbnMgPSBbXSB9ID0ganNvbjsgIC8vL1xuXG4gIGNvbnN0IHsgU3RhdGVtZW50U3Vic3RpdHV0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgc3Vic3RpdHV0aW9uc0pTT04gPSBzdWJzdGl0dXRpb25zLCAgLy8vXG4gICAgICAgIFN1YnN0aXR1dGlvbiA9IFN0YXRlbWVudFN1YnN0aXR1dGlvbjsgLy8vXG5cbiAgc3Vic3RpdHV0aW9ucyA9IHN1YnN0aXR1dGlvbnNKU09OLm1hcCgoc3Vic3RpdHV0aW9uSlNPTikgPT4ge1xuICAgIGNvbnN0IGpzb24gPSBzdWJzdGl0dXRpb25KU09OLCAgLy8vXG4gICAgICAgICAgc3Vic3RpdHV0aW9uID0gU3Vic3RpdHV0aW9uLmZyb21KU09OKGpzb24sIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIHN1YnN0aXR1dGlvbjtcbiAgfSk7XG5cbiAgcmV0dXJuIHN1YnN0aXR1dGlvbnM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtZXRhdmFyaWFibGVzRnJvbUpTT04oanNvbiwgY29udGV4dCkge1xuICBsZXQgeyBtZXRhdmFyaWFibGVzIH0gPSBqc29uO1xuXG4gIGNvbnN0IHsgTWV0YXZhcmlhYmxlIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbWV0YXZhcmlhYmxlc0pTT04gPSBtZXRhdmFyaWFibGVzOyAvLy9cblxuICBtZXRhdmFyaWFibGVzID0gbWV0YXZhcmlhYmxlc0pTT04ubWFwKChtZXRhdmFyaWFibGVKU09OKSA9PiB7XG4gICAgY29uc3QganNvbiA9IG1ldGF2YXJpYWJsZUpTT04sICAvLy9cbiAgICAgICAgICBtZXRhdmFyaWFibGUgPSBNZXRhdmFyaWFibGUuZnJvbUpTT04oanNvbiwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gbWV0YXZhcmlhYmxlO1xuICB9KTtcblxuICByZXR1cm4gbWV0YXZhcmlhYmxlcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxlbW1hc0Zyb21Ob3RoaW5nKCkge1xuICBjb25zdCBsZW1tYXMgPSBbXTtcblxuICByZXR1cm4gbGVtbWFzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWV0YUxlbW1hc0Zyb21Ob3RoaW5nKCkge1xuICBjb25zdCBtZXRhTGVtbWFzID0gW107XG5cbiAgcmV0dXJuIG1ldGFMZW1tYXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0ZXJtVG9UZXJtSlNPTih0ZXJtKSB7XG4gIGNvbnN0IHRlcm1KU09OID0gdGVybS50b0pTT04oKTtcblxuICByZXR1cm4gdGVybUpTT047XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlVG9UeXBlSlNPTih0eXBlKSB7XG4gIGNvbnN0IHR5cGVKU09OID0gKHR5cGUgIT09IG51bGwpID9cbiAgICAgICAgICAgICAgICAgICAgICB0eXBlLnRvSlNPTigpIDpcbiAgICAgICAgICAgICAgICAgICAgICAgIG51bGw7XG5cbiAgcmV0dXJuIHR5cGVKU09OO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbGFiZWxUb0xhYmVsSlNPTihsYWJlbCkge1xuICBjb25zdCBsYWJlbEpTT04gPSBsYWJlbC50b0pTT04oKTtcblxuICByZXR1cm4gbGFiZWxKU09OO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWV0YVR5cGVUb01ldGFUeXBlSlNPTihtZXRhVHlwZSkge1xuICBjb25zdCBtZXRhVHlwZUpTT04gPSAobWV0YVR5cGUgIT09IG51bGwpID9cbiAgICAgICAgICAgICAgICAgICAgICAgICBtZXRhVHlwZS50b0pTT04oKSA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICBudWxsO1xuICByZXR1cm4gbWV0YVR5cGVKU09OO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVmZXJlbmNlVG9SZWZlcmVuY2VKU09OKHJlZmVyZW5jZSkge1xuICBjb25zdCByZWZlcmVuY2VKU09OID0gcmVmZXJlbmNlLnRvSlNPTigpO1xuXG4gIHJldHVybiByZWZlcmVuY2VKU09OO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RhdGVtZW50VG9TdGF0ZW1lbnRKU09OKHN0YXRlbWVudCkge1xuICBjb25zdCBzdGF0ZW1lbnRKU09OID0gKHN0YXRlbWVudCAhPT0gbnVsbCkgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZW1lbnQudG9KU09OKCkgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bGw7XG5cbiAgcmV0dXJuIHN0YXRlbWVudEpTT047XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZWR1Y3Rpb25Ub0RlZHVjdGlvbkpTT04oZGVkdWN0aW9uKSB7XG4gIGNvbnN0IGRlZHVjdGlvbkpTT04gPSBkZWR1Y3Rpb24udG9KU09OKCk7XG5cbiAgcmV0dXJuIGRlZHVjdGlvbkpTT047XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzaWduYXR1cmVUb1NpZ25hdHVyZUpTT04oc2lnbmF0dXJlKSB7XG4gIGNvbnN0IHNpZ25hdHVyZUpTT04gPSAoc2lnbmF0dXJlICE9PSBudWxsKSA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHNpZ25hdHVyZS50b0pTT04oKSA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVsbDtcblxuICByZXR1cm4gc2lnbmF0dXJlSlNPTjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbmNsdXNpb25Ub0NvbmNsdXNpb25KU09OKGNvbmNsdXNpb24pIHtcbiAgY29uc3QgY29uY2x1c2lvbkpTT04gPSBjb25jbHVzaW9uLnRvSlNPTigpO1xuXG4gIHJldHVybiBjb25jbHVzaW9uSlNPTjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1ldGF2YXJpYWJsZVRvTWV0YXZhcmlhYmxlSlNPTihtZXRhdmFyaWFibGUpIHtcbiAgY29uc3QgbWV0YXZhcmlhYmxlSlNPTiA9IG1ldGF2YXJpYWJsZS50b0pTT04oKTtcblxuICByZXR1cm4gbWV0YXZhcmlhYmxlSlNPTjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb2NlZHVyZUNhbGxUb1Byb2NlZHVyZUNhbGxKU09OKHByb2NlZHVyZUNhbGwpIHtcbiAgY29uc3QgcHJvY2VkdXJlQ2FsbEpTT04gPSAocHJvY2VkdXJlQ2FsbCAhPT0gbnVsbCkgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvY2VkdXJlQ2FsbC50b0pTT04oKSA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bGw7XG5cbiAgcmV0dXJuIHByb2NlZHVyZUNhbGxKU09OO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvY2VkdXJlUmVmZXJlbmNlVG9Qcm9jZWR1cmVSZWZlcmVuY2VKU09OKHByb2NlZHVyZVJlZmVyZW5jZSkge1xuICBjb25zdCBwcm9jZWR1cmVSZWZlcmVuY2VKU09OID0gcHJvY2VkdXJlUmVmZXJlbmNlLnRvSlNPTigpO1xuXG4gIHJldHVybiBwcm9jZWR1cmVSZWZlcmVuY2VKU09OO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHlwZXNUb1R5cGVzSlNPTih0eXBlcykge1xuICBjb25zdCB0eXBlc0pTT04gPSB0eXBlcy5tYXAoKHR5cGUpID0+IHtcbiAgICBjb25zdCB0eXBlSlNPTiA9IHR5cGUudG9KU09OKCk7XG5cbiAgICB0eXBlID0gdHlwZUpTT047IC8vL1xuXG4gICAgcmV0dXJuIHR5cGU7XG4gIH0pO1xuXG4gIHJldHVybiB0eXBlc0pTT047XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0ZXJtc1RvVGVybXNKU09OKHRlcm1zKSB7XG4gIGNvbnN0IHRlcm1zSlNPTiA9IHRlcm1zLm1hcCgodGVybSkgPT4ge1xuICAgIGNvbnN0IHRlcm1KU09OID0gdGVybS50b0pTT04oKTtcblxuICAgIHRlcm0gPSB0ZXJtSlNPTjsgLy8vXG5cbiAgICByZXR1cm4gdGVybTtcbiAgfSk7XG5cbiAgcmV0dXJuIHRlcm1zSlNPTjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJ1bGVzVG9SdWxlc0pTT04ocnVsZXMpIHtcbiAgY29uc3QgcnVsZXNKU09OID0gcnVsZXMubWFwKChydWxlKSA9PiB7XG4gICAgY29uc3QgcnVsZUpTT04gPSBydWxlLnRvSlNPTigpO1xuXG4gICAgcnVsZSA9IHJ1bGVKU09OOyAvLy9cblxuICAgIHJldHVybiBydWxlO1xuICB9KTtcblxuICByZXR1cm4gcnVsZXNKU09OO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZnJhbWVzVG9GcmFtZXNKU09OKGZyYW1lcykge1xuICBjb25zdCBmcmFtZXNKU09OID0gZnJhbWVzLm1hcCgoZnJhbWUpID0+IHtcbiAgICBjb25zdCBmcmFtZUpTT04gPSBmcmFtZS50b0pTT04oKTtcblxuICAgIGZyYW1lID0gZnJhbWVKU09OOyAvLy9cblxuICAgIHJldHVybiBmcmFtZTtcbiAgfSk7XG5cbiAgcmV0dXJuIGZyYW1lc0pTT047XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsYWJlbHNUb0xhYmVsc0pTT04obGFiZWxzKSB7XG4gIGNvbnN0IGxhYmVsc0pTT04gPSBsYWJlbHMubWFwKChsYWJlbCkgPT4ge1xuICAgIGNvbnN0IGxhYmVsSlNPTiA9IGxhYmVsLnRvSlNPTigpO1xuXG4gICAgcmV0dXJuIGxhYmVsSlNPTjtcbiAgfSk7XG5cbiAgcmV0dXJuIGxhYmVsc0pTT047XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBheGlvbXNUb0F4aW9tc0pTT04oYXhpb21zKSB7XG4gIGNvbnN0IGF4aW9tc0pTT04gPSBheGlvbXMubWFwKChheGlvbSkgPT4ge1xuICAgIGNvbnN0IGF4aW9tSlNPTiA9IGF4aW9tLnRvSlNPTigpO1xuXG4gICAgYXhpb20gPSBheGlvbUpTT047IC8vL1xuXG4gICAgcmV0dXJuIGF4aW9tO1xuICB9KTtcblxuICByZXR1cm4gYXhpb21zSlNPTjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByZW1pc2VzVG9QcmVtaXNlc0pTT04ocHJlbWlzZXMpIHtcbiAgY29uc3QgcHJlbWlzZXNKU09OID0gcHJlbWlzZXMubWFwKChwcmVtaXNlKSA9PiB7XG4gICAgY29uc3QgcHJlbWlzZUpTT04gPSBwcmVtaXNlLnRvSlNPTigpO1xuXG4gICAgcmV0dXJuIHByZW1pc2VKU09OO1xuICB9KTtcblxuICByZXR1cm4gcHJlbWlzZXNKU09OO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGhlb3JlbXNUb1RoZW9yZW1zSlNPTih0aGVvcmVtcykge1xuICBjb25zdCB0aGVvcmVtc0pTT04gPSB0aGVvcmVtcy5tYXAoKHRoZW9yZW0pID0+IHtcbiAgICBjb25zdCB0aGVvcmVtSlNPTiA9IHRoZW9yZW0udG9KU09OKCk7XG5cbiAgICB0aGVvcmVtID0gdGhlb3JlbUpTT047IC8vL1xuXG4gICAgcmV0dXJuIHRoZW9yZW07XG4gIH0pO1xuXG4gIHJldHVybiB0aGVvcmVtc0pTT047XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YXJpYWJsZXNUb1ZhcmlhYmxlc0pTT04odmFyaWFibGVzKSB7XG4gIGNvbnN0IHZhcmlhYmxlc0pTT04gPSB2YXJpYWJsZXMubWFwKCh2YXJpYWJsZSkgPT4ge1xuICAgIGNvbnN0IHZhcmlhYmxlSlNPTiA9IHZhcmlhYmxlLnRvSlNPTigpO1xuXG4gICAgdmFyaWFibGUgPSB2YXJpYWJsZUpTT047ICAvLy9cblxuICAgIHJldHVybiB2YXJpYWJsZTtcbiAgfSk7XG5cbiAgcmV0dXJuIHZhcmlhYmxlc0pTT047XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoeXBvdGhlc2VzVG9IeXBvdGhlc2VzSlNPTihoeXBvdGhlc2VzKSB7XG4gIGNvbnN0IGh5cG90aGVzZXNKU09OID0gaHlwb3RoZXNlcy5tYXAoKGh5cG90aGVzaXMpID0+IHtcbiAgICBjb25zdCBoeXBvdGhlc2lzSlNPTiA9IGh5cG90aGVzaXMudG9KU09OKCk7XG5cbiAgICBoeXBvdGhlc2lzID0gaHlwb3RoZXNpc0pTT047IC8vL1xuXG4gICAgcmV0dXJuIGh5cG90aGVzaXM7XG4gIH0pO1xuXG4gIHJldHVybiBoeXBvdGhlc2VzSlNPTjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN1cGVyVHlwZXNUb1N1cGVyVHlwZXNKU09OKHN1cGVyVHlwZXMpIHtcbiAgY29uc3Qgc3VwZXJUeXBlc0pTT04gPSBzdXBlclR5cGVzLm1hcCgoc3VwZXJUeXBlKSA9PiB7XG4gICAgY29uc3Qgc3VwZXJUeXBlSlNPTiA9IHN1cGVyVHlwZS50b0pTT04oKTtcblxuICAgIHN1cGVyVHlwZSA9IHN1cGVyVHlwZUpTT047IC8vL1xuXG4gICAgcmV0dXJuIHN1cGVyVHlwZTtcbiAgfSk7XG5cbiAgcmV0dXJuIHN1cGVyVHlwZXNKU09OO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyYW1ldGVyc1RvUGFyYW1ldGVyc0pTT04ocGFyYW1ldGVycykge1xuICBjb25zdCBwYXJhbWV0ZXJzSlNPTiA9IHBhcmFtZXRlcnMubWFwKChwYXJhbWV0ZXIpID0+IHtcbiAgICBjb25zdCBwYXJhbWV0ZXJKU09OID0gcGFyYW1ldGVyLnRvSlNPTigpO1xuXG4gICAgcGFyYW1ldGVyID0gcGFyYW1ldGVySlNPTjsgIC8vL1xuXG4gICAgcmV0dXJuIHBhcmFtZXRlcjtcbiAgfSk7XG5cbiAgcmV0dXJuIHBhcmFtZXRlcnNKU09OO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvcGVydGllc1RvUHJvcGVydGllc0pTT04ocHJvcGVydGllcykge1xuICBjb25zdCBwcm9wZXJ0aWVzSlNPTiA9IHByb3BlcnRpZXMubWFwKChwcm9wZXJ0eSkgPT4ge1xuICAgIGNvbnN0IHByb3BlcnR5SlNPTiA9IHByb3BlcnR5LnRvSlNPTigpO1xuXG4gICAgcHJvcGVydHkgPSBwcm9wZXJ0eUpTT047ICAvLy9cblxuICAgIHJldHVybiBwcm9wZXJ0eTtcbiAgfSk7XG5cbiAgcmV0dXJuIHByb3BlcnRpZXNKU09OO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHlwZVByZWZpeGVzVG9UeXBlUHJlZml4ZXNKU09OKHR5cGVQcmVmaXhlcykge1xuICBjb25zdCB0eXBlUHJlZml4ZXNKU09OID0gdHlwZVByZWZpeGVzLm1hcCgodHlwZVByZWZpeCkgPT4ge1xuICAgIGNvbnN0IHR5cGVQcmVmaXhKU09OID0gdHlwZVByZWZpeC50b0pTT04oKTtcblxuICAgIHR5cGVQcmVmaXggPSB0eXBlUHJlZml4SlNPTjsgLy8vXG5cbiAgICByZXR1cm4gdHlwZVByZWZpeDtcbiAgfSk7XG5cbiAgcmV0dXJuIHR5cGVQcmVmaXhlc0pTT047XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb25qZWN0dXJlc1RvQ29uamVjdHVyZXNKU09OKGNvbmplY3R1cmVzKSB7XG4gIGNvbnN0IGNvbmplY3R1cmVzSlNPTiA9IGNvbmplY3R1cmVzLm1hcCgoY29uamVjdHVyZSkgPT4ge1xuICAgIGNvbnN0IGNvbmplY3R1cmVKU09OID0gY29uamVjdHVyZS50b0pTT04oKTtcblxuICAgIGNvbmplY3R1cmUgPSBjb25qZWN0dXJlSlNPTjsgLy8vXG5cbiAgICByZXR1cm4gY29uamVjdHVyZTtcbiAgfSk7XG5cbiAgcmV0dXJuIGNvbmplY3R1cmVzSlNPTjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbWJpbmF0b3JzVG9Db21iaW5hdG9yc0pTT04oY29tYmluYXRvcnMpIHtcbiAgY29uc3QgY29tYmluYXRvcnNKU09OID0gY29tYmluYXRvcnMubWFwKChjb21iaW5hdG9yKSA9PiB7XG4gICAgY29uc3QgY29tYmluYXRvckpTT04gPSBjb21iaW5hdG9yLnRvSlNPTigpO1xuXG4gICAgY29tYmluYXRvciA9IGNvbWJpbmF0b3JKU09OOyAvLy9cblxuICAgIHJldHVybiBjb21iaW5hdG9yO1xuICB9KTtcblxuICByZXR1cm4gY29tYmluYXRvcnNKU09OO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3VwcG9zaXRpb25zVG9TdXBwb3NpdGlvbnNKU09OKHN1cHBvc2l0aW9ucykge1xuICBjb25zdCBzdXBwb3NpdGlvbnNKU09OID0gc3VwcG9zaXRpb25zLm1hcCgoc3VwcG9zaXRpb24pID0+IHtcbiAgICBjb25zdCBzdXBwb3NpdGlvbkpTT04gPSBzdXBwb3NpdGlvbi50b0pTT04oKTtcblxuICAgIHJldHVybiBzdXBwb3NpdGlvbkpTT047XG4gIH0pO1xuXG4gIHJldHVybiBzdXBwb3NpdGlvbnNKU09OO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29uc3RydWN0b3JzVG9Db25zdHJ1Y3RvcnNKU09OKGNvbnN0cnVjdG9ycykge1xuICBjb25zdCBjb25zdHJ1Y3RvcnNKU09OID0gY29uc3RydWN0b3JzLm1hcCgoY29uc3RydWN0b3IpID0+IHtcbiAgICBjb25zdCBjb25zdHJ1Y3RvckpTT04gPSBjb25zdHJ1Y3Rvci50b0pTT04oKTtcblxuICAgIGNvbnN0cnVjdG9yID0gY29uc3RydWN0b3JKU09OOyAgLy8vXG5cbiAgICByZXR1cm4gY29uc3RydWN0b3I7XG4gIH0pO1xuXG4gIHJldHVybiBjb25zdHJ1Y3RvcnNKU09OO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWV0YXRoZW9yZW1zVG9NZXRhdGhlb3JlbXNKU09OKG1ldGF0aGVvcmVtcykge1xuICBjb25zdCBtZXRhdGhlb3JlbXNKU09OID0gbWV0YXRoZW9yZW1zLm1hcCgobWV0YXRoZW9yZW0pID0+IHtcbiAgICBjb25zdCBtZXRhdGhlb3JlbUpTT04gPSBtZXRhdGhlb3JlbS50b0pTT04oKTtcblxuICAgIG1ldGF0aGVvcmVtID0gbWV0YXRoZW9yZW1KU09OOyAvLy9cblxuICAgIHJldHVybiBtZXRhdGhlb3JlbTtcbiAgfSk7XG5cbiAgcmV0dXJuIG1ldGF0aGVvcmVtc0pTT047XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdWJzdGl0dXRpb25zVG9TdWJzdGl0dXRpb25zSlNPTihzdWJzdGl0dXRpb25zKSB7XG4gIGNvbnN0IHN1YnN0aXR1dGlvbnNKU09OID0gc3Vic3RpdHV0aW9ucy5tYXBTdWJzdGl0dXRpb24oKHN1YnN0aXR1dGlvbikgPT4ge1xuICAgIGNvbnN0IHN1YnN0aXR1dGlvbkpTT04gPSBzdWJzdGl0dXRpb24udG9KU09OKCk7XG5cbiAgICByZXR1cm4gc3Vic3RpdHV0aW9uSlNPTjtcbiAgfSk7XG5cbiAgcmV0dXJuIHN1YnN0aXR1dGlvbnNKU09OO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWV0YXZhcmlhYmxlc1RvTWV0YXZhcmlhYmxlc0pTT04obWV0YXZhcmlhYmxlcykge1xuICBjb25zdCBtZXRhdmFyaWFibGVzSlNPTiA9IG1ldGF2YXJpYWJsZXMubWFwKChtZXRhdmFyaWFibGUpID0+IHtcbiAgICBjb25zdCBtZXRhdmFyaWFibGVKU09OID0gbWV0YXZhcmlhYmxlLnRvSlNPTigpO1xuXG4gICAgbWV0YXZhcmlhYmxlID0gbWV0YXZhcmlhYmxlSlNPTjsgIC8vL1xuXG4gICAgcmV0dXJuIG1ldGF2YXJpYWJsZTtcbiAgfSk7XG5cbiAgcmV0dXJuIG1ldGF2YXJpYWJsZXNKU09OO1xufVxuIl0sIm5hbWVzIjpbImF4aW9tc0Zyb21KU09OIiwiYXhpb21zVG9BeGlvbXNKU09OIiwiY29tYmluYXRvcnNGcm9tSlNPTiIsImNvbWJpbmF0b3JzVG9Db21iaW5hdG9yc0pTT04iLCJjb25jbHVzaW9uRnJvbUpTT04iLCJjb25jbHVzaW9uVG9Db25jbHVzaW9uSlNPTiIsImNvbmplY3R1cmVzRnJvbUpTT04iLCJjb25qZWN0dXJlc1RvQ29uamVjdHVyZXNKU09OIiwiY29uc3RydWN0b3JzRnJvbUpTT04iLCJjb25zdHJ1Y3RvcnNUb0NvbnN0cnVjdG9yc0pTT04iLCJkZWR1Y3Rpb25Gcm9tSlNPTiIsImRlZHVjdGlvblRvRGVkdWN0aW9uSlNPTiIsImZyYW1lc0Zyb21KU09OIiwiZnJhbWVzVG9GcmFtZXNKU09OIiwiaHlwb3RoZXNlc0Zyb21KU09OIiwiaHlwb3RoZXNlc1RvSHlwb3RoZXNlc0pTT04iLCJsYWJlbEZyb21KU09OIiwibGFiZWxUb0xhYmVsSlNPTiIsImxhYmVsc0Zyb21KU09OIiwibGFiZWxzVG9MYWJlbHNKU09OIiwibGVtbWFzRnJvbU5vdGhpbmciLCJtZXRhTGVtbWFzRnJvbU5vdGhpbmciLCJtZXRhVHlwZUZyb21KU09OIiwibWV0YVR5cGVUb01ldGFUeXBlSlNPTiIsIm1ldGF0aGVvcmVtc0Zyb21KU09OIiwibWV0YXRoZW9yZW1zVG9NZXRhdGhlb3JlbXNKU09OIiwibWV0YXZhcmlhYmxlRnJvbUpTT04iLCJtZXRhdmFyaWFibGVUb01ldGF2YXJpYWJsZUpTT04iLCJtZXRhdmFyaWFibGVzRnJvbUpTT04iLCJtZXRhdmFyaWFibGVzVG9NZXRhdmFyaWFibGVzSlNPTiIsInBhcmFtZXRlcnNGcm9tSlNPTiIsInBhcmFtZXRlcnNUb1BhcmFtZXRlcnNKU09OIiwicHJlbWlzZXNGcm9tSlNPTiIsInByZW1pc2VzVG9QcmVtaXNlc0pTT04iLCJwcm9jZWR1cmVDYWxsRnJvbUpTT04iLCJwcm9jZWR1cmVDYWxsVG9Qcm9jZWR1cmVDYWxsSlNPTiIsInByb2NlZHVyZVJlZmVyZW5jZUZyb21KU09OIiwicHJvY2VkdXJlUmVmZXJlbmNlVG9Qcm9jZWR1cmVSZWZlcmVuY2VKU09OIiwicHJvcGVydGllc0Zyb21KU09OIiwicHJvcGVydGllc1RvUHJvcGVydGllc0pTT04iLCJyZWZlcmVuY2VGcm9tSlNPTiIsInJlZmVyZW5jZVRvUmVmZXJlbmNlSlNPTiIsInJ1bGVzRnJvbUpTT04iLCJydWxlc1RvUnVsZXNKU09OIiwic2lnbmF0dXJlRnJvbUpTT04iLCJzaWduYXR1cmVUb1NpZ25hdHVyZUpTT04iLCJzdGF0ZW1lbnRGcm9tSlNPTiIsInN0YXRlbWVudFRvU3RhdGVtZW50SlNPTiIsInN1YnN0aXR1dGlvbnNGcm9tSlNPTiIsInN1YnN0aXR1dGlvbnNUb1N1YnN0aXR1dGlvbnNKU09OIiwic3VwZXJUeXBlc0Zyb21KU09OIiwic3VwZXJUeXBlc1RvU3VwZXJUeXBlc0pTT04iLCJzdXBwb3NpdGlvbnNGcm9tSlNPTiIsInN1cHBvc2l0aW9uc1RvU3VwcG9zaXRpb25zSlNPTiIsInRlcm1Gcm9tSlNPTiIsInRlcm1Ub1Rlcm1KU09OIiwidGVybXNGcm9tSlNPTiIsInRlcm1zVG9UZXJtc0pTT04iLCJ0aGVvcmVtc0Zyb21KU09OIiwidGhlb3JlbXNUb1RoZW9yZW1zSlNPTiIsInR5cGVGcm9tSlNPTiIsInR5cGVQcmVmaXhlc0Zyb21KU09OIiwidHlwZVByZWZpeGVzVG9UeXBlUHJlZml4ZXNKU09OIiwidHlwZVRvVHlwZUpTT04iLCJ0eXBlc0Zyb21KU09OIiwidHlwZXNUb1R5cGVzSlNPTiIsInZhcmlhYmxlc0Zyb21KU09OIiwidmFyaWFibGVzVG9WYXJpYWJsZXNKU09OIiwianNvbiIsImNvbnRleHQiLCJ0ZXJtIiwidGVybUpTT04iLCJUZXJtIiwiZWxlbWVudHMiLCJmcm9tSlNPTiIsInR5cGUiLCJuYW1lIiwicHJlZml4TmFtZSIsIm5vbWluYWxUeXBlTmFtZSIsImZpbmRUeXBlQnlOb21pbmFsVHlwZU5hbWUiLCJtZXRhVHlwZSIsIm1ldGFUeXBlTmFtZSIsImZpbmRNZXRhVHlwZUJ5TWV0YVR5cGVOYW1lIiwic3RhdGVtZW50IiwiU3RhdGVtZW50Iiwic3RhdGVtZW50SlNPTiIsImRlZHVjdGlvbiIsIkRlZHVjdGlvbiIsImRlZHVjdGlvbkpTT04iLCJzaWduYXR1cmUiLCJTaWduYXR1cmUiLCJzaWduYXR1cmVKU09OIiwicmVmZXJlbmNlIiwiUmVmZXJlbmNlIiwicmVmZXJlbmNlSlNPTiIsImNvbmNsdXNpb24iLCJDb25jbHVzaW9uIiwiY29uY2x1c2lvbkpTT04iLCJtZXRhdmFyaWFibGUiLCJNZXRhdmFyaWFibGUiLCJtZXRhdmFyaWFibGVKU09OIiwicHJvY2VkdXJlQ2FsbCIsIlByb2NlZHVyZUNhbGwiLCJwcm9jZWR1cmVDYWxsSlNPTiIsInByb2NlZHVyZVJlZmVyZW5jZSIsIlByb2NlZHVyZVJlZmVyZW5jZSIsInByb2NlZHVyZVJlZmVyZW5jZUpTT04iLCJ0eXBlcyIsInR5cGVzSlNPTiIsIlR5cGUiLCJmb3JFYWNoIiwidHlwZUpTT04iLCJwdXNoIiwidGVybXMiLCJ0ZXJtc0pTT04iLCJtYXAiLCJydWxlcyIsIlJ1bGUiLCJydWxlc0pTT04iLCJydWxlSlNPTiIsInJ1bGUiLCJsYWJlbCIsIkxhYmVsIiwibGFiZWxKU09OIiwiZnJhbWVzIiwiRnJhbWUiLCJmcmFtZXNKU09OIiwiZnJhbWVKU09OIiwiZnJhbWUiLCJsYWJlbHMiLCJsYWJlbHNKU09OIiwiYXhpb21zIiwiQXhpb20iLCJheGlvbXNKU09OIiwiYXhpb21KU09OIiwiYXhpb20iLCJwcmVtaXNlcyIsIlByZW1pc2UiLCJwcmVtaXNlc0pTT04iLCJwcmVtaXNlSlNPTiIsInByZW1pc2UiLCJ0aGVvcmVtcyIsIlRoZW9yZW0iLCJ0aGVvcmVtc0pTT04iLCJ0aGVvcmVtSlNPTiIsInRoZW9yZW0iLCJ2YXJpYWJsZXMiLCJWYXJpYWJsZSIsInZhcmlhYmxlc0pTT04iLCJ2YXJpYWJsZUpTT04iLCJ2YXJpYWJsZSIsInByb3BlcnRpZXMiLCJQcm9wZXJ0eSIsInByb3BlcnRpZXNKU09OIiwicHJvcGVydHlKU09OIiwicHJvcGVydHkiLCJzdXBlclR5cGVzIiwic3VwZXJUeXBlc0pTT04iLCJzdXBlclR5cGVKU09OIiwibm9taW5hbFN1cGVyVHlwZU5hbWUiLCJzdXBlclR5cGUiLCJoeXBvdGhlc2VzIiwiSHlwb3RoZXNpcyIsImh5cG90aGVzZXNKU09OIiwiaHlwb3RoZXNpc0pTT04iLCJoeXBvdGhlc2lzIiwicGFyYW1ldGVycyIsIlBhcmFtZXRlciIsInBhcmFtZXRlcnNKU09OIiwicGFyYW1ldGVySlNPTiIsInBhcmFtZXRlciIsImNvbmplY3R1cmVzIiwiQ29uamVjdHVyZSIsImNvbmplY3R1cmVzSlNPTiIsImNvbmplY3R1cmVKU09OIiwiY29uamVjdHVyZSIsImNvbWJpbmF0b3JzIiwiQ29tYmluYXRvciIsImNvbWJpbmF0b3JzSlNPTiIsImNvbWJpbmF0b3JKU09OIiwiY29tYmluYXRvciIsInR5cGVQcmVmaXhlcyIsIlR5cGVQcmVmaXgiLCJ0eXBlUHJlZml4ZXNKU09OIiwidHlwZVByZWZpeEpTT04iLCJ0eXBlUHJlZml4IiwiY29uc3RydWN0b3JzIiwiQ29uc3RydWN0b3IiLCJjb25zdHJ1Y3RvcnNKU09OIiwiY29uc3RydWN0b3JKU09OIiwiY29uc3RydWN0b3IiLCJtZXRhdGhlb3JlbXMiLCJNZXRhdGhlb3JlbSIsIm1ldGF0aGVvcmVtc0pTT04iLCJtZXRhdGhlb3JlbUpTT04iLCJtZXRhdGhlb3JlbSIsInN1cHBvc2l0aW9ucyIsIlN1cHBvc2l0aW9uIiwic3VwcG9zaXRpb25zSlNPTiIsInN1cHBvc2l0aW9uSlNPTiIsInN1cHBvc2l0aW9uIiwic3Vic3RpdHV0aW9ucyIsIlN0YXRlbWVudFN1YnN0aXR1dGlvbiIsInN1YnN0aXR1dGlvbnNKU09OIiwiU3Vic3RpdHV0aW9uIiwic3Vic3RpdHV0aW9uSlNPTiIsInN1YnN0aXR1dGlvbiIsIm1ldGF2YXJpYWJsZXMiLCJtZXRhdmFyaWFibGVzSlNPTiIsImxlbW1hcyIsIm1ldGFMZW1tYXMiLCJ0b0pTT04iLCJtZXRhVHlwZUpTT04iLCJtYXBTdWJzdGl0dXRpb24iXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7OztRQTRQZ0JBO2VBQUFBOztRQXlaQUM7ZUFBQUE7O1FBeFFBQztlQUFBQTs7UUE4WEFDO2VBQUFBOztRQS9wQkFDO2VBQUFBOztRQXFkQUM7ZUFBQUE7O1FBcE1BQztlQUFBQTs7UUFrWUFDO2VBQUFBOztRQWxWQUM7ZUFBQUE7O1FBb1hBQztlQUFBQTs7UUE5dEJBQztlQUFBQTs7UUFnZkFDO2VBQUFBOztRQXZWQUM7ZUFBQUE7O1FBbWFBQztlQUFBQTs7UUFsU0FDO2VBQUFBOztRQXNXQUM7ZUFBQUE7O1FBcGZBQztlQUFBQTs7UUF5VUFDO2VBQUFBOztRQTVTQUM7ZUFBQUE7O1FBK1pBQztlQUFBQTs7UUE3SUFDO2VBQUFBOztRQU1BQztlQUFBQTs7UUEvZEFDO2VBQUFBOztRQXlmQUM7ZUFBQUE7O1FBakdBQztlQUFBQTs7UUFnWEFDO2VBQUFBOztRQXByQkFDO2VBQUFBOztRQThjQUM7ZUFBQUE7O1FBekZBQztlQUFBQTs7UUFxVkFDO2VBQUFBOztRQXRkQUM7ZUFBQUE7O1FBOFdBQztlQUFBQTs7UUEvY0FDO2VBQUFBOztRQXFaQUM7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
@@ -18,9 +18,6 @@ _export(exports, {
18
18
  get frameSubstitutionStringFromFrameAndMetavariable () {
19
19
  return frameSubstitutionStringFromFrameAndMetavariable;
20
20
  },
21
- get framesStringFromFrames () {
22
- return framesStringFromFrames;
23
- },
24
21
  get hypothesesStringFromHypotheses () {
25
22
  return hypothesesStringFromHypotheses;
26
23
  },
@@ -57,9 +54,6 @@ _export(exports, {
57
54
  get subproofStringFromSuppositionsAndSubDerivation () {
58
55
  return subproofStringFromSuppositionsAndSubDerivation;
59
56
  },
60
- get substitutionsStringFromSubstitutions () {
61
- return substitutionsStringFromSubstitutions;
62
- },
63
57
  get superTypesStringFromSuperTypes () {
64
58
  return superTypesStringFromSuperTypes;
65
59
  },
@@ -78,6 +72,9 @@ _export(exports, {
78
72
  get topLevelMetaAssertionStringFromLabelSuppositionsAndDeduction () {
79
73
  return topLevelMetaAssertionStringFromLabelSuppositionsAndDeduction;
80
74
  },
75
+ get typeStringFromNominalTypeName () {
76
+ return typeStringFromNominalTypeName;
77
+ },
81
78
  get typeStringFromTypeNameTypePrefixNameAndSuperTypes () {
82
79
  return typeStringFromTypeNameTypePrefixNameAndSuperTypes;
83
80
  }
@@ -91,14 +88,6 @@ function termsStringFromTerms(terms) {
91
88
  }, null);
92
89
  return termsString;
93
90
  }
94
- function framesStringFromFrames(frames) {
95
- var framesString = frames.reduce(function(framesString, frame) {
96
- var frameString = frame.getString();
97
- framesString = framesString !== null ? "".concat(framesString, ", ").concat(frameString) : frameString;
98
- return framesString;
99
- }, null);
100
- return framesString;
101
- }
102
91
  function labelsStringFromLabels(labels) {
103
92
  var labelsString = labels.reduce(function(labelsString, label) {
104
93
  var labelString = label.getString();
@@ -157,22 +146,18 @@ function suppositionsStringFromSuppositions(suppositions) {
157
146
  }, null);
158
147
  return suppositionsString;
159
148
  }
160
- function substitutionsStringFromSubstitutions(substitutions) {
161
- var substitutionsString = substitutions.reduce(function(substitutionsString, substitution) {
162
- var substitutionString = substitution.getString();
163
- substitutionsString = substitutionsString === null ? substitutionString : "".concat(substitutionsString, ", ").concat(substitutionString);
164
- return substitutionsString;
165
- }, null);
166
- return substitutionsString;
167
- }
168
149
  function signatureStringFromTerms(terms) {
169
150
  var termsString = termsStringFromTerms(terms), signatureString = "[".concat(termsString, "]");
170
151
  return signatureString;
171
152
  }
172
153
  function equivalenceStringFromTerms(terms) {
173
- var termsString = termsStringFromTerms(terms), equivalenceString = termsString; ///
154
+ var termsString = termsStringFromTerms(terms), equivalenceString = "[".concat(termsString, "]");
174
155
  return equivalenceString;
175
156
  }
157
+ function typeStringFromNominalTypeName(nominalTypeName) {
158
+ var typeString = nominalTypeName; ///
159
+ return typeString;
160
+ }
176
161
  function termSubstitutionStringFromTermAndVariable(term, variable) {
177
162
  var termString = term.getString(), variableString = variable.getString(), termSubstitutionString = "[".concat(termString, " for ").concat(variableString, "]");
178
163
  return termSubstitutionString;
@@ -233,4 +218,4 @@ function statementSubstitutionStringFromStatementMetavariableAndSubstitution(sta
233
218
  return statementSubstitutionString;
234
219
  }
235
220
 
236
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsaXRpZXMvc3RyaW5nLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBiYXNlVHlwZUZyb21Ob3RoaW5nIH0gZnJvbSBcIi4uL3V0aWxpdGllcy90eXBlXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiB0ZXJtc1N0cmluZ0Zyb21UZXJtcyh0ZXJtcykge1xuICBjb25zdCB0ZXJtc1N0cmluZyA9IHRlcm1zLnJlZHVjZSgodGVybXNTdHJpbmcsIHRlcm0pID0+IHtcbiAgICBjb25zdCB0ZXJtU3RyaW5nID0gdGVybS5nZXRTdHJpbmcoKTtcblxuICAgIHRlcm1zU3RyaW5nID0gKHRlcm1zU3RyaW5nICE9PSBudWxsKSA/XG4gICAgICAgICAgICAgICAgICAgYCR7dGVybXNTdHJpbmd9LCAke3Rlcm1TdHJpbmd9YCA6XG4gICAgICAgICAgICAgICAgICAgICAgdGVybVN0cmluZztcblxuICAgIHJldHVybiB0ZXJtc1N0cmluZztcbiAgfSwgbnVsbCk7XG5cbiAgcmV0dXJuIHRlcm1zU3RyaW5nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZnJhbWVzU3RyaW5nRnJvbUZyYW1lcyhmcmFtZXMpIHtcbiAgY29uc3QgZnJhbWVzU3RyaW5nID0gZnJhbWVzLnJlZHVjZSgoZnJhbWVzU3RyaW5nLCBmcmFtZSkgPT4ge1xuICAgIGNvbnN0IGZyYW1lU3RyaW5nID0gZnJhbWUuZ2V0U3RyaW5nKCk7XG5cbiAgICBmcmFtZXNTdHJpbmcgPSAoZnJhbWVzU3RyaW5nICE9PSBudWxsKSA/XG4gICAgICAgICAgICAgICAgICAgIGAke2ZyYW1lc1N0cmluZ30sICR7ZnJhbWVTdHJpbmd9YCA6XG4gICAgICAgICAgICAgICAgICAgICAgIGZyYW1lU3RyaW5nO1xuXG4gICAgcmV0dXJuIGZyYW1lc1N0cmluZztcbiAgfSwgbnVsbCk7XG5cbiAgcmV0dXJuIGZyYW1lc1N0cmluZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxhYmVsc1N0cmluZ0Zyb21MYWJlbHMobGFiZWxzKSB7XG4gIGNvbnN0IGxhYmVsc1N0cmluZyA9IGxhYmVscy5yZWR1Y2UoKGxhYmVsc1N0cmluZywgbGFiZWwpID0+IHtcbiAgICBjb25zdCBsYWJlbFN0cmluZyA9IGxhYmVsLmdldFN0cmluZygpO1xuXG4gICAgbGFiZWxzU3RyaW5nID0gKGxhYmVsc1N0cmluZyA9PT0gbnVsbCkgP1xuICAgICAgICAgICAgICAgICAgICAgbGFiZWxTdHJpbmc6IC8vL1xuICAgICAgICAgICAgICAgICAgICAgIGAke2xhYmVsc1N0cmluZ30sICR7bGFiZWxTdHJpbmd9YDtcblxuICAgIHJldHVybiBsYWJlbHNTdHJpbmc7XG4gIH0sIG51bGwpO1xuXG4gIHJldHVybiBsYWJlbHNTdHJpbmc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcmVtaXNlc1N0cmluZ0Zyb21QcmVtaXNlcyhwcmVtaXNlcykge1xuICBjb25zdCBwcmVtaXNlc1N0cmluZyA9IHByZW1pc2VzLnJlZHVjZSgocHJlbWlzZXNTdHJpbmcsIHByZW1pc2UpID0+IHtcbiAgICBjb25zdCBwcmVtaXNlU3RyaW5nID0gcHJlbWlzZS5nZXRTdHJpbmcoKTtcblxuICAgIHByZW1pc2VzU3RyaW5nID0gKHByZW1pc2VzU3RyaW5nICE9PSBudWxsKSA/XG4gICAgICAgICAgICAgICAgICAgICAgIGAke3ByZW1pc2VzU3RyaW5nfSwgJHtwcmVtaXNlU3RyaW5nfWAgOlxuICAgICAgICAgICAgICAgICAgICAgICAgIHByZW1pc2VTdHJpbmc7ICAvLy9cblxuICAgIHJldHVybiBwcmVtaXNlc1N0cmluZztcbiAgfSwgbnVsbCk7XG5cbiAgcmV0dXJuIHByZW1pc2VzU3RyaW5nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaHlwb3RoZXNlc1N0cmluZ0Zyb21IeXBvdGhlc2VzKGh5cG90aGVzZXMpIHtcbiAgY29uc3QgaHlwb3RoZXNlc1N0cmluZyA9IGh5cG90aGVzZXMucmVkdWNlKChoeXBvdGhlc2VzU3RyaW5nLCBoeXBvdGhlc2lzKSA9PiB7XG4gICAgY29uc3QgaHlwb3RoZXNpc1N0cmluZyA9IGh5cG90aGVzaXMuZ2V0U3RyaW5nKCk7XG5cbiAgICBoeXBvdGhlc2VzU3RyaW5nID0gKGh5cG90aGVzZXNTdHJpbmcgIT09IG51bGwpID9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgYCR7aHlwb3RoZXNlc1N0cmluZ30sICR7aHlwb3RoZXNpc1N0cmluZ31gIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoeXBvdGhlc2lzU3RyaW5nOyAgLy8vXG5cbiAgICByZXR1cm4gaHlwb3RoZXNlc1N0cmluZztcbiAgfSwgbnVsbCk7XG5cbiAgcmV0dXJuIGh5cG90aGVzZXNTdHJpbmc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdXBlclR5cGVzU3RyaW5nRnJvbVN1cGVyVHlwZXMoc3VwZXJUeXBlcykge1xuICBjb25zdCBiYXNlVHlwZSA9IGJhc2VUeXBlRnJvbU5vdGhpbmcoKSxcbiAgICAgICAgc3VwZXJUeXBlc1N0cmluZyA9IHN1cGVyVHlwZXMucmVkdWNlKChzdXBlclR5cGVzU3RyaW5nLCBzdXBlclR5cGUpID0+IHtcbiAgICAgICAgICBpZiAoc3VwZXJUeXBlICE9PSBiYXNlVHlwZSkge1xuICAgICAgICAgICAgY29uc3Qgc3VwZXJUeXBlU3RyaW5nID0gc3VwZXJUeXBlLmdldFN0cmluZygpO1xuXG4gICAgICAgICAgICBzdXBlclR5cGVzU3RyaW5nID0gKHN1cGVyVHlwZXNTdHJpbmcgPT09IG51bGwpID9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGAnJHtzdXBlclR5cGVTdHJpbmd9J2AgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgJHtzdXBlclR5cGVzU3RyaW5nfSwgJyR7c3VwZXJUeXBlU3RyaW5nfSdgO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBzdXBlclR5cGVzU3RyaW5nO1xuICAgICAgICB9LCBudWxsKTtcblxuICByZXR1cm4gc3VwZXJUeXBlc1N0cmluZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcmFtZXRlcnNTdHJpbmdGcm9tUGFyYW1ldGVycyhwYXJhbWV0ZXJzKSB7XG4gIGNvbnN0IHBhcmFtZXRlcnNTdHJpbmcgPSBwYXJhbWV0ZXJzLnJlZHVjZSgocGFyYW1ldGVyc1N0cmluZywgcGFyYW1ldGVyKSA9PiB7XG4gICAgY29uc3QgcGFyYW1ldGVyU3RyaW5nID0gcGFyYW1ldGVyLmdldFN0cmluZygpO1xuXG4gICAgcGFyYW1ldGVyc1N0cmluZyA9IChwYXJhbWV0ZXJzU3RyaW5nID09PSBudWxsKSA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVyU3RyaW5nIDogLy8vXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGAke3BhcmFtZXRlcnNTdHJpbmd9LCAke3BhcmFtZXRlclN0cmluZ31gO1xuXG4gICAgcmV0dXJuIHBhcmFtZXRlcnNTdHJpbmc7XG4gIH0sIG51bGwpO1xuXG4gIHJldHVybiBwYXJhbWV0ZXJzU3RyaW5nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXNzdW1wdGlvbnNTdHJpbmdGcm9tQXNzdW1wdGlvbnMoYXNzdW1wdGlvbnMpIHtcbiAgY29uc3QgYXNzdW1wdGlvbnNTdHJpbmcgPSBhc3N1bXB0aW9ucy5yZWR1Y2UoKGFzc3VtcHRpb25zU3RyaW5nLCBhc3N1bXB0aW9uKSA9PiB7XG4gICAgY29uc3QgYXNzdW1wdGlvblN0cmluZyA9IGFzc3VtcHRpb24uZ2V0U3RyaW5nKCk7XG5cbiAgICBhc3N1bXB0aW9uc1N0cmluZyA9IChhc3N1bXB0aW9uc1N0cmluZyA9PT0gbnVsbCkgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICBhc3N1bXB0aW9uU3RyaW5nOiAvLy9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgIGAke2Fzc3VtcHRpb25zU3RyaW5nfSwgJHthc3N1bXB0aW9uU3RyaW5nfWA7XG5cbiAgICByZXR1cm4gYXNzdW1wdGlvbnNTdHJpbmc7XG4gIH0sIG51bGwpO1xuXG4gIHJldHVybiBhc3N1bXB0aW9uc1N0cmluZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN1cHBvc2l0aW9uc1N0cmluZ0Zyb21TdXBwb3NpdGlvbnMoc3VwcG9zaXRpb25zKSB7XG4gIGNvbnN0IHN1cHBvc2l0aW9uc1N0cmluZyA9IHN1cHBvc2l0aW9ucy5yZWR1Y2UoKHN1cHBvc2l0aW9uc1N0cmluZywgc3VwcG9zaXRpb24pID0+IHtcbiAgICBjb25zdCBzdXBwb3NpdGlvblN0cmluZyA9IHN1cHBvc2l0aW9uLmdldFN0cmluZygpO1xuXG4gICAgc3VwcG9zaXRpb25zU3RyaW5nID0gKHN1cHBvc2l0aW9uc1N0cmluZyA9PT0gbnVsbCkgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VwcG9zaXRpb25TdHJpbmc6IC8vL1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGAke3N1cHBvc2l0aW9uc1N0cmluZ30sICR7c3VwcG9zaXRpb25TdHJpbmd9YDtcblxuICAgIHJldHVybiBzdXBwb3NpdGlvbnNTdHJpbmc7XG4gIH0sIG51bGwpO1xuXG4gIHJldHVybiBzdXBwb3NpdGlvbnNTdHJpbmc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdWJzdGl0dXRpb25zU3RyaW5nRnJvbVN1YnN0aXR1dGlvbnMoc3Vic3RpdHV0aW9ucykge1xuICBjb25zdCBzdWJzdGl0dXRpb25zU3RyaW5nID0gc3Vic3RpdHV0aW9ucy5yZWR1Y2UoKHN1YnN0aXR1dGlvbnNTdHJpbmcsIHN1YnN0aXR1dGlvbikgPT4ge1xuICAgIGNvbnN0IHN1YnN0aXR1dGlvblN0cmluZyA9IHN1YnN0aXR1dGlvbi5nZXRTdHJpbmcoKTtcblxuICAgIHN1YnN0aXR1dGlvbnNTdHJpbmcgPSAoc3Vic3RpdHV0aW9uc1N0cmluZyA9PT0gbnVsbCkgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJzdGl0dXRpb25TdHJpbmcgOiAvLy9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGAke3N1YnN0aXR1dGlvbnNTdHJpbmd9LCAke3N1YnN0aXR1dGlvblN0cmluZ31gO1xuXG4gICAgcmV0dXJuIHN1YnN0aXR1dGlvbnNTdHJpbmc7XG4gIH0sIG51bGwpO1xuXG4gIHJldHVybiBzdWJzdGl0dXRpb25zU3RyaW5nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2lnbmF0dXJlU3RyaW5nRnJvbVRlcm1zKHRlcm1zKSB7XG4gIGNvbnN0IHRlcm1zU3RyaW5nID0gdGVybXNTdHJpbmdGcm9tVGVybXModGVybXMpLFxuICAgICAgICBzaWduYXR1cmVTdHJpbmcgPSBgWyR7dGVybXNTdHJpbmd9XWA7XG5cbiAgcmV0dXJuIHNpZ25hdHVyZVN0cmluZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVxdWl2YWxlbmNlU3RyaW5nRnJvbVRlcm1zKHRlcm1zKSB7XG4gIGNvbnN0IHRlcm1zU3RyaW5nID0gdGVybXNTdHJpbmdGcm9tVGVybXModGVybXMpLFxuICAgICAgICBlcXVpdmFsZW5jZVN0cmluZyA9IHRlcm1zU3RyaW5nOyAgLy8vXG5cbiAgcmV0dXJuIGVxdWl2YWxlbmNlU3RyaW5nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGVybVN1YnN0aXR1dGlvblN0cmluZ0Zyb21UZXJtQW5kVmFyaWFibGUodGVybSwgdmFyaWFibGUpIHtcbiAgY29uc3QgdGVybVN0cmluZyA9IHRlcm0uZ2V0U3RyaW5nKCksXG4gICAgICAgIHZhcmlhYmxlU3RyaW5nID0gdmFyaWFibGUuZ2V0U3RyaW5nKCksXG4gICAgICAgIHRlcm1TdWJzdGl0dXRpb25TdHJpbmcgPSBgWyR7dGVybVN0cmluZ30gZm9yICR7dmFyaWFibGVTdHJpbmd9XWA7XG5cbiAgcmV0dXJuIHRlcm1TdWJzdGl0dXRpb25TdHJpbmc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBydWxzU3RyaW5nRnJvbUxhYmVsc1ByZW1pc2VzQW5kQ29uY2x1c2lvbihsYWJlbHMsIHByZW1pc2VzLCBjb25jbHVzaW9uKSB7XG4gIGNvbnN0IHByZW1pc2VzU3RyaW5nID0gcHJlbWlzZXNTdHJpbmdGcm9tUHJlbWlzZXMocHJlbWlzZXMpLFxuICAgICAgICBjb25jbHVzaW9uU3RyaW5nID0gY29uY2x1c2lvbi5nZXRTdHJpbmcoKSxcbiAgICAgICAgbGFiZWxzU3RyaW5nID0gbGFiZWxzU3RyaW5nRnJvbUxhYmVscyhsYWJlbHMpLFxuICAgICAgICBydWxlU3RyaW5nID0gKHByZW1pc2VzU3RyaW5nICE9PSBudWxsKSA/XG4gICAgICAgICAgICAgICAgICAgICAgIGAke2xhYmVsc1N0cmluZ30gOjogWyR7cHJlbWlzZXNTdHJpbmd9XS4uLiR7Y29uY2x1c2lvblN0cmluZ31gIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICBgJHtsYWJlbHNTdHJpbmd9IDo6ICR7Y29uY2x1c2lvblN0cmluZ31gO1xuXG4gIHJldHVybiBydWxlU3RyaW5nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2VjdGlvblN0cmluZ0Zyb21IeXBvdGhlc2VzVG9wTGV2ZWxBc3NlcnRpb24oaHlwb3RoZXNlcywgYXhpb20sIGxlbW1hLCB0aGVvcmVtLCBjb25qZWN0dXJlKSB7XG4gIGNvbnN0IHRvcExldmVsQXNzZXJ0aW9uID0gKGF4aW9tIHx8IGxlbW1hIHx8IHRoZW9yZW0gfHwgY29uamVjdHVyZSksXG4gICAgICAgIHRvcExldmVsQXNzZXJ0aW9uU3RyaW5nID0gdG9wTGV2ZWxBc3NlcnRpb24uZ2V0U3RyaW5nKCksXG4gICAgICAgIGh5cG90aGVzZXNTdHJpbmcgPSBoeXBvdGhlc2VzU3RyaW5nRnJvbUh5cG90aGVzZXMoaHlwb3RoZXNlcyksXG4gICAgICAgIHNlY3Rpb25TdHJpbmcgPSAodG9wTGV2ZWxBc3NlcnRpb25TdHJpbmcgIT09IG51bGwpID9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgYFske2h5cG90aGVzZXNTdHJpbmd9XTo6OiAke3RvcExldmVsQXNzZXJ0aW9uU3RyaW5nfWAgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBbJHtoeXBvdGhlc2VzU3RyaW5nfV06OjogYDtcblxuICByZXR1cm4gc2VjdGlvblN0cmluZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN1YnByb29mU3RyaW5nRnJvbVN1cHBvc2l0aW9uc0FuZFN1YkRlcml2YXRpb24oc3VwcG9zaXRpb25zLCBzdWJEZXJpdmF0aW9uKSB7XG4gIGNvbnN0IGxhc3RQcm9vZkFzc2VydGlvbiA9IHN1YkRlcml2YXRpb24uZ2V0TGFzdFByb29mQXNzZXJ0aW9uKCksXG4gICAgICAgIHN1cHBvc2l0aW9uc1N0cmluZyA9IHN1cHBvc2l0aW9uc1N0cmluZ0Zyb21TdXBwb3NpdGlvbnMoc3VwcG9zaXRpb25zKSxcbiAgICAgICAgbGFzdFByb29mQXNzZXJ0aW9uU3RyaW5nID0gbGFzdFByb29mQXNzZXJ0aW9uLmdldFN0cmluZygpLFxuICAgICAgICBzdWJwcm9vZlN0cmluZyA9IGBbJHtzdXBwb3NpdGlvbnNTdHJpbmd9XS4uLiR7bGFzdFByb29mQXNzZXJ0aW9uU3RyaW5nfWA7XG5cbiAgcmV0dXJuIHN1YnByb29mU3RyaW5nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZnJhbWVTdWJzdGl0dXRpb25TdHJpbmdGcm9tRnJhbWVBbmRNZXRhdmFyaWFibGUoZnJhbWUsIG1ldGF2YXJpYWJsZSkge1xuICBjb25zdCBmcmFtZVN0cmluZyA9IGZyYW1lLmdldFN0cmluZygpLFxuICAgICAgICBtZXRhdmFyaWFibGVTdHJpbmcgPSBtZXRhdmFyaWFibGUuZ2V0U3RyaW5nKCksXG4gICAgICAgIHN0cmluZyA9IGBbJHtmcmFtZVN0cmluZ30gZm9yIFske21ldGF2YXJpYWJsZVN0cmluZ31dXWA7XG5cbiAgcmV0dXJuIHN0cmluZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVTdHJpbmdGcm9tVHlwZU5hbWVUeXBlUHJlZml4TmFtZUFuZFN1cGVyVHlwZXModHlwZU5hbWUsIHR5cGVQcmVmaXhOYW1lLCBzdXBlclR5cGVzKSB7XG4gIGxldCB0eXBlU3RyaW5nO1xuXG4gIHR5cGVTdHJpbmcgPSAodHlwZVByZWZpeE5hbWUgIT09IG51bGwpID9cbiAgICAgICAgICAgICAgICAgYCR7dHlwZVByZWZpeE5hbWV9JHt0eXBlTmFtZX1gOlxuICAgICAgICAgICAgICAgICAgIHR5cGVOYW1lO1xuXG4gIGNvbnN0IHN1cGVyVHlwZXNTdHJpbmcgPSBzdXBlclR5cGVzU3RyaW5nRnJvbVN1cGVyVHlwZXMoc3VwZXJUeXBlcyk7XG5cbiAgaWYgKHN1cGVyVHlwZXNTdHJpbmcgIT09IG51bGwpIHtcbiAgICB0eXBlU3RyaW5nID0gYCR7dHlwZVN0cmluZ306JHtzdXBlclR5cGVzU3RyaW5nfWA7XG4gIH1cblxuICByZXR1cm4gdHlwZVN0cmluZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb2NlZHVyZUNhbGxTdHJpbmdGcm9tUHJvY2VkdXJlUmVmZXJlbmNlQW5kUGFyYW1ldGVycyhwcm9jZWR1cmVSZWZlcmVuY2UsIHBhcmFtZXRlcnMpIHtcbiAgY29uc3QgcHJvY2VkdXJlUmVmZXJlbmNlTmFtZSA9IHByb2NlZHVyZVJlZmVyZW5jZS5nZXROYW1lKCksXG4gICAgICAgIHBhcmFtZXRlcnNTdHJpbmcgPSBwYXJhbWV0ZXJzU3RyaW5nRnJvbVBhcmFtZXRlcnMocGFyYW1ldGVycyksXG4gICAgICAgIHByb2NlZHVyZUNhbGxTdHJpbmcgPSBgJHtwcm9jZWR1cmVSZWZlcmVuY2VOYW1lfSgke3BhcmFtZXRlcnNTdHJpbmd9KWA7XG5cbiAgcmV0dXJuIHByb2NlZHVyZUNhbGxTdHJpbmc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGF0ZW1lbnRTdWJzdGl0dXRpb25TdHJpbmdGcm9tU3RhdGVtZW50QW5kTWV0YXZhcmlhYmxlKHN0YXRlbWVudCwgbWV0YXZhcmlhYmxlKSB7XG4gIGNvbnN0IHN0YXRlbWVudFN0cmluZyA9IHN0YXRlbWVudC5nZXRTdHJpbmcoKSxcbiAgICAgICAgbWV0YXZhcmlhYmxlU3RyaW5nID0gbWV0YXZhcmlhYmxlLmdldFN0cmluZygpLFxuICAgICAgICBzdGF0ZW1lbnRTdWJzdGl0dXRpb25TdHJpbmcgPSBgWyR7c3RhdGVtZW50U3RyaW5nfSBmb3IgJHttZXRhdmFyaWFibGVTdHJpbmd9XWA7XG5cbiAgcmV0dXJuIHN0YXRlbWVudFN1YnN0aXR1dGlvblN0cmluZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlZmVyZW5jZVN1YnN0aXR1dGlvblN0cmluZ0Zyb21SZWZlcmVuY2VBbmRNZXRhdmFyaWFibGUocmVmZXJlbmNlLCBtZXRhdmFyaWFibGUpIHtcbiAgY29uc3QgcmVmZXJlbmNlU3RyaW5nID0gcmVmZXJlbmNlLmdldFN0cmluZygpLFxuICAgICAgICBtZXRhdmFyaWFibGVTdHJpbmcgPSBtZXRhdmFyaWFibGUuZ2V0U3RyaW5nKCksXG4gICAgICAgIHJlZmVyZW5jZVN1YnN0aXR1dGlvblN0cmluZyA9IGBbJHtyZWZlcmVuY2VTdHJpbmd9IGZvciAke21ldGF2YXJpYWJsZVN0cmluZ31dYDtcblxuICByZXR1cm4gcmVmZXJlbmNlU3Vic3RpdHV0aW9uU3RyaW5nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdG9wTGV2ZWxBc3NlcnRpb25TdHJpbmdGcm9tTGFiZWxzU3VwcG9zaXRpb25zQW5kRGVkdWN0aW9uKGxhYmVscywgc3VwcG9zaXRpb25zLCBkZWR1Y3Rpb24pIHtcbiAgbGV0IHRvcExldmVsQXNzZXJ0aW9uU3RyaW5nO1xuXG4gIGNvbnN0IHN1cHBvc2l0aW9uc1N0cmluZyA9IHN1cHBvc2l0aW9uc1N0cmluZ0Zyb21TdXBwb3NpdGlvbnMoc3VwcG9zaXRpb25zKSxcbiAgICAgICAgZGVkdWN0aW9uU3RyaW5nID0gZGVkdWN0aW9uLmdldFN0cmluZygpLFxuICAgICAgICBsYWJlbHNTdHJpbmcgPSBsYWJlbHNTdHJpbmdGcm9tTGFiZWxzKGxhYmVscyk7XG5cbiAgaWYgKGxhYmVsc1N0cmluZyAhPT0gbnVsbCkge1xuICAgIHRvcExldmVsQXNzZXJ0aW9uU3RyaW5nID0gKHN1cHBvc2l0aW9uc1N0cmluZyAhPT0gbnVsbCkgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGAke2xhYmVsc1N0cmluZ30gOjogWyR7c3VwcG9zaXRpb25zU3RyaW5nfV0uLi4ke2RlZHVjdGlvblN0cmluZ31gIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGAke2xhYmVsc1N0cmluZ30gOjogJHtkZWR1Y3Rpb25TdHJpbmd9YDtcbiAgfSBlbHNlIHtcbiAgICB0b3BMZXZlbEFzc2VydGlvblN0cmluZyA9IChzdXBwb3NpdGlvbnNTdHJpbmcgIT09IG51bGwpID9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgWyR7c3VwcG9zaXRpb25zU3RyaW5nfV0uLi4ke2RlZHVjdGlvblN0cmluZ31gIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWR1Y3Rpb25TdHJpbmc7XG4gIH1cblxuICByZXR1cm4gdG9wTGV2ZWxBc3NlcnRpb25TdHJpbmc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0b3BMZXZlbE1ldGFBc3NlcnRpb25TdHJpbmdGcm9tTGFiZWxTdXBwb3NpdGlvbnNBbmREZWR1Y3Rpb24obGFiZWwsIHN1cHBvc2l0aW9ucywgZGVkdWN0aW9uKSB7XG4gIGNvbnN0IHN1cHBvc2l0aW9uc1N0cmluZyA9IHN1cHBvc2l0aW9uc1N0cmluZ0Zyb21TdXBwb3NpdGlvbnMoc3VwcG9zaXRpb25zKSxcbiAgICAgICAgZGVkdWN0aW9uU3RyaW5nID0gZGVkdWN0aW9uLmdldFN0cmluZygpLFxuICAgICAgICBsYWJlbFN0cmluZyA9IGxhYmVsLmdldFN0cmluZygpLFxuICAgICAgICB0b3BMZXZlbE1ldGFBc3NlcnRpb25TdHJpbmcgPSAoc3VwcG9zaXRpb25zU3RyaW5nICE9PSBudWxsKSA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgJHtsYWJlbFN0cmluZ30gOjogWyR7c3VwcG9zaXRpb25zU3RyaW5nfV0uLi4ke2RlZHVjdGlvblN0cmluZ31gIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYCR7bGFiZWxTdHJpbmd9IDo6ICR7ZGVkdWN0aW9uU3RyaW5nfWA7XG5cbiAgcmV0dXJuIHRvcExldmVsTWV0YUFzc2VydGlvblN0cmluZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0YXRlbWVudFN1YnN0aXR1dGlvblN0cmluZ0Zyb21TdGF0ZW1lbnRNZXRhdmFyaWFibGVBbmRTdWJzdGl0dXRpb24oc3RhdGVtZW50LCBtZXRhdmFyaWFibGUsIHN1YnN0aXR1dGlvbikge1xuICBjb25zdCBzdGF0ZW1lbnRTdHJpbmcgPSBzdGF0ZW1lbnQuZ2V0U3RyaW5nKCksXG4gICAgICAgIG1ldGF2YXJpYWJsZVN0cmluZyA9IG1ldGF2YXJpYWJsZS5nZXRTdHJpbmcoKSxcbiAgICAgICAgc3Vic3RpdHV0aW9uU3RyaW5nID0gc3Vic3RpdHV0aW9uLmdldFN0cmluZygpLFxuICAgICAgICBzdGF0ZW1lbnRTdWJzdGl0dXRpb25TdHJpbmcgPSBgWyR7c3RhdGVtZW50U3RyaW5nfSBmb3IgJHttZXRhdmFyaWFibGVTdHJpbmd9JHtzdWJzdGl0dXRpb25TdHJpbmd9XWA7XG5cbiAgcmV0dXJuIHN0YXRlbWVudFN1YnN0aXR1dGlvblN0cmluZztcbn1cbiJdLCJuYW1lcyI6WyJhc3N1bXB0aW9uc1N0cmluZ0Zyb21Bc3N1bXB0aW9ucyIsImVxdWl2YWxlbmNlU3RyaW5nRnJvbVRlcm1zIiwiZnJhbWVTdWJzdGl0dXRpb25TdHJpbmdGcm9tRnJhbWVBbmRNZXRhdmFyaWFibGUiLCJmcmFtZXNTdHJpbmdGcm9tRnJhbWVzIiwiaHlwb3RoZXNlc1N0cmluZ0Zyb21IeXBvdGhlc2VzIiwibGFiZWxzU3RyaW5nRnJvbUxhYmVscyIsInBhcmFtZXRlcnNTdHJpbmdGcm9tUGFyYW1ldGVycyIsInByZW1pc2VzU3RyaW5nRnJvbVByZW1pc2VzIiwicHJvY2VkdXJlQ2FsbFN0cmluZ0Zyb21Qcm9jZWR1cmVSZWZlcmVuY2VBbmRQYXJhbWV0ZXJzIiwicmVmZXJlbmNlU3Vic3RpdHV0aW9uU3RyaW5nRnJvbVJlZmVyZW5jZUFuZE1ldGF2YXJpYWJsZSIsInJ1bHNTdHJpbmdGcm9tTGFiZWxzUHJlbWlzZXNBbmRDb25jbHVzaW9uIiwic2VjdGlvblN0cmluZ0Zyb21IeXBvdGhlc2VzVG9wTGV2ZWxBc3NlcnRpb24iLCJzaWduYXR1cmVTdHJpbmdGcm9tVGVybXMiLCJzdGF0ZW1lbnRTdWJzdGl0dXRpb25TdHJpbmdGcm9tU3RhdGVtZW50QW5kTWV0YXZhcmlhYmxlIiwic3RhdGVtZW50U3Vic3RpdHV0aW9uU3RyaW5nRnJvbVN0YXRlbWVudE1ldGF2YXJpYWJsZUFuZFN1YnN0aXR1dGlvbiIsInN1YnByb29mU3RyaW5nRnJvbVN1cHBvc2l0aW9uc0FuZFN1YkRlcml2YXRpb24iLCJzdWJzdGl0dXRpb25zU3RyaW5nRnJvbVN1YnN0aXR1dGlvbnMiLCJzdXBlclR5cGVzU3RyaW5nRnJvbVN1cGVyVHlwZXMiLCJzdXBwb3NpdGlvbnNTdHJpbmdGcm9tU3VwcG9zaXRpb25zIiwidGVybVN1YnN0aXR1dGlvblN0cmluZ0Zyb21UZXJtQW5kVmFyaWFibGUiLCJ0ZXJtc1N0cmluZ0Zyb21UZXJtcyIsInRvcExldmVsQXNzZXJ0aW9uU3RyaW5nRnJvbUxhYmVsc1N1cHBvc2l0aW9uc0FuZERlZHVjdGlvbiIsInRvcExldmVsTWV0YUFzc2VydGlvblN0cmluZ0Zyb21MYWJlbFN1cHBvc2l0aW9uc0FuZERlZHVjdGlvbiIsInR5cGVTdHJpbmdGcm9tVHlwZU5hbWVUeXBlUHJlZml4TmFtZUFuZFN1cGVyVHlwZXMiLCJ0ZXJtcyIsInRlcm1zU3RyaW5nIiwicmVkdWNlIiwidGVybSIsInRlcm1TdHJpbmciLCJnZXRTdHJpbmciLCJmcmFtZXMiLCJmcmFtZXNTdHJpbmciLCJmcmFtZSIsImZyYW1lU3RyaW5nIiwibGFiZWxzIiwibGFiZWxzU3RyaW5nIiwibGFiZWwiLCJsYWJlbFN0cmluZyIsInByZW1pc2VzIiwicHJlbWlzZXNTdHJpbmciLCJwcmVtaXNlIiwicHJlbWlzZVN0cmluZyIsImh5cG90aGVzZXMiLCJoeXBvdGhlc2VzU3RyaW5nIiwiaHlwb3RoZXNpcyIsImh5cG90aGVzaXNTdHJpbmciLCJzdXBlclR5cGVzIiwiYmFzZVR5cGUiLCJiYXNlVHlwZUZyb21Ob3RoaW5nIiwic3VwZXJUeXBlc1N0cmluZyIsInN1cGVyVHlwZSIsInN1cGVyVHlwZVN0cmluZyIsInBhcmFtZXRlcnMiLCJwYXJhbWV0ZXJzU3RyaW5nIiwicGFyYW1ldGVyIiwicGFyYW1ldGVyU3RyaW5nIiwiYXNzdW1wdGlvbnMiLCJhc3N1bXB0aW9uc1N0cmluZyIsImFzc3VtcHRpb24iLCJhc3N1bXB0aW9uU3RyaW5nIiwic3VwcG9zaXRpb25zIiwic3VwcG9zaXRpb25zU3RyaW5nIiwic3VwcG9zaXRpb24iLCJzdXBwb3NpdGlvblN0cmluZyIsInN1YnN0aXR1dGlvbnMiLCJzdWJzdGl0dXRpb25zU3RyaW5nIiwic3Vic3RpdHV0aW9uIiwic3Vic3RpdHV0aW9uU3RyaW5nIiwic2lnbmF0dXJlU3RyaW5nIiwiZXF1aXZhbGVuY2VTdHJpbmciLCJ2YXJpYWJsZSIsInZhcmlhYmxlU3RyaW5nIiwidGVybVN1YnN0aXR1dGlvblN0cmluZyIsImNvbmNsdXNpb24iLCJjb25jbHVzaW9uU3RyaW5nIiwicnVsZVN0cmluZyIsImF4aW9tIiwibGVtbWEiLCJ0aGVvcmVtIiwiY29uamVjdHVyZSIsInRvcExldmVsQXNzZXJ0aW9uIiwidG9wTGV2ZWxBc3NlcnRpb25TdHJpbmciLCJzZWN0aW9uU3RyaW5nIiwic3ViRGVyaXZhdGlvbiIsImxhc3RQcm9vZkFzc2VydGlvbiIsImdldExhc3RQcm9vZkFzc2VydGlvbiIsImxhc3RQcm9vZkFzc2VydGlvblN0cmluZyIsInN1YnByb29mU3RyaW5nIiwibWV0YXZhcmlhYmxlIiwibWV0YXZhcmlhYmxlU3RyaW5nIiwic3RyaW5nIiwidHlwZU5hbWUiLCJ0eXBlUHJlZml4TmFtZSIsInR5cGVTdHJpbmciLCJwcm9jZWR1cmVSZWZlcmVuY2UiLCJwcm9jZWR1cmVSZWZlcmVuY2VOYW1lIiwiZ2V0TmFtZSIsInByb2NlZHVyZUNhbGxTdHJpbmciLCJzdGF0ZW1lbnQiLCJzdGF0ZW1lbnRTdHJpbmciLCJzdGF0ZW1lbnRTdWJzdGl0dXRpb25TdHJpbmciLCJyZWZlcmVuY2UiLCJyZWZlcmVuY2VTdHJpbmciLCJyZWZlcmVuY2VTdWJzdGl0dXRpb25TdHJpbmciLCJkZWR1Y3Rpb24iLCJkZWR1Y3Rpb25TdHJpbmciLCJ0b3BMZXZlbE1ldGFBc3NlcnRpb25TdHJpbmciXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7OztRQXlHZ0JBO2VBQUFBOztRQWlEQUM7ZUFBQUE7O1FBOENBQztlQUFBQTs7UUF0TEFDO2VBQUFBOztRQTBDQUM7ZUFBQUE7O1FBNUJBQztlQUFBQTs7UUEyREFDO2VBQUFBOztRQTdDQUM7ZUFBQUE7O1FBa0xBQztlQUFBQTs7UUFnQkFDO2VBQUFBOztRQXZFQUM7ZUFBQUE7O1FBV0FDO2VBQUFBOztRQWpDQUM7ZUFBQUE7O1FBcUZBQztlQUFBQTs7UUErQ0FDO2VBQUFBOztRQXhGQUM7ZUFBQUE7O1FBMURBQztlQUFBQTs7UUEzREFDO2VBQUFBOztRQTZDQUM7ZUFBQUE7O1FBMENBQztlQUFBQTs7UUE3SkFDO2VBQUFBOztRQW9QQUM7ZUFBQUE7O1FBb0JBQztlQUFBQTs7UUE1REFDO2VBQUFBOzs7b0JBOU1vQjtBQUU3QixTQUFTSCxxQkFBcUJJLEtBQUs7SUFDeEMsSUFBTUMsY0FBY0QsTUFBTUUsTUFBTSxDQUFDLFNBQUNELGFBQWFFO1FBQzdDLElBQU1DLGFBQWFELEtBQUtFLFNBQVM7UUFFakNKLGNBQWMsQUFBQ0EsZ0JBQWdCLE9BQ2hCLEFBQUMsR0FBa0JHLE9BQWhCSCxhQUFZLE1BQWUsT0FBWEcsY0FDaEJBO1FBRWxCLE9BQU9IO0lBQ1QsR0FBRztJQUVILE9BQU9BO0FBQ1Q7QUFFTyxTQUFTdEIsdUJBQXVCMkIsTUFBTTtJQUMzQyxJQUFNQyxlQUFlRCxPQUFPSixNQUFNLENBQUMsU0FBQ0ssY0FBY0M7UUFDaEQsSUFBTUMsY0FBY0QsTUFBTUgsU0FBUztRQUVuQ0UsZUFBZSxBQUFDQSxpQkFBaUIs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
221
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsaXRpZXMvc3RyaW5nLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBiYXNlVHlwZUZyb21Ob3RoaW5nIH0gZnJvbSBcIi4uL3V0aWxpdGllcy90eXBlXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiB0ZXJtc1N0cmluZ0Zyb21UZXJtcyh0ZXJtcykge1xuICBjb25zdCB0ZXJtc1N0cmluZyA9IHRlcm1zLnJlZHVjZSgodGVybXNTdHJpbmcsIHRlcm0pID0+IHtcbiAgICBjb25zdCB0ZXJtU3RyaW5nID0gdGVybS5nZXRTdHJpbmcoKTtcblxuICAgIHRlcm1zU3RyaW5nID0gKHRlcm1zU3RyaW5nICE9PSBudWxsKSA/XG4gICAgICAgICAgICAgICAgICAgYCR7dGVybXNTdHJpbmd9LCAke3Rlcm1TdHJpbmd9YCA6XG4gICAgICAgICAgICAgICAgICAgICAgdGVybVN0cmluZztcblxuICAgIHJldHVybiB0ZXJtc1N0cmluZztcbiAgfSwgbnVsbCk7XG5cbiAgcmV0dXJuIHRlcm1zU3RyaW5nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbGFiZWxzU3RyaW5nRnJvbUxhYmVscyhsYWJlbHMpIHtcbiAgY29uc3QgbGFiZWxzU3RyaW5nID0gbGFiZWxzLnJlZHVjZSgobGFiZWxzU3RyaW5nLCBsYWJlbCkgPT4ge1xuICAgIGNvbnN0IGxhYmVsU3RyaW5nID0gbGFiZWwuZ2V0U3RyaW5nKCk7XG5cbiAgICBsYWJlbHNTdHJpbmcgPSAobGFiZWxzU3RyaW5nID09PSBudWxsKSA/XG4gICAgICAgICAgICAgICAgICAgICBsYWJlbFN0cmluZzogLy8vXG4gICAgICAgICAgICAgICAgICAgICAgYCR7bGFiZWxzU3RyaW5nfSwgJHtsYWJlbFN0cmluZ31gO1xuXG4gICAgcmV0dXJuIGxhYmVsc1N0cmluZztcbiAgfSwgbnVsbCk7XG5cbiAgcmV0dXJuIGxhYmVsc1N0cmluZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByZW1pc2VzU3RyaW5nRnJvbVByZW1pc2VzKHByZW1pc2VzKSB7XG4gIGNvbnN0IHByZW1pc2VzU3RyaW5nID0gcHJlbWlzZXMucmVkdWNlKChwcmVtaXNlc1N0cmluZywgcHJlbWlzZSkgPT4ge1xuICAgIGNvbnN0IHByZW1pc2VTdHJpbmcgPSBwcmVtaXNlLmdldFN0cmluZygpO1xuXG4gICAgcHJlbWlzZXNTdHJpbmcgPSAocHJlbWlzZXNTdHJpbmcgIT09IG51bGwpID9cbiAgICAgICAgICAgICAgICAgICAgICAgYCR7cHJlbWlzZXNTdHJpbmd9LCAke3ByZW1pc2VTdHJpbmd9YCA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgcHJlbWlzZVN0cmluZzsgIC8vL1xuXG4gICAgcmV0dXJuIHByZW1pc2VzU3RyaW5nO1xuICB9LCBudWxsKTtcblxuICByZXR1cm4gcHJlbWlzZXNTdHJpbmc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoeXBvdGhlc2VzU3RyaW5nRnJvbUh5cG90aGVzZXMoaHlwb3RoZXNlcykge1xuICBjb25zdCBoeXBvdGhlc2VzU3RyaW5nID0gaHlwb3RoZXNlcy5yZWR1Y2UoKGh5cG90aGVzZXNTdHJpbmcsIGh5cG90aGVzaXMpID0+IHtcbiAgICBjb25zdCBoeXBvdGhlc2lzU3RyaW5nID0gaHlwb3RoZXNpcy5nZXRTdHJpbmcoKTtcblxuICAgIGh5cG90aGVzZXNTdHJpbmcgPSAoaHlwb3RoZXNlc1N0cmluZyAhPT0gbnVsbCkgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICBgJHtoeXBvdGhlc2VzU3RyaW5nfSwgJHtoeXBvdGhlc2lzU3RyaW5nfWAgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh5cG90aGVzaXNTdHJpbmc7ICAvLy9cblxuICAgIHJldHVybiBoeXBvdGhlc2VzU3RyaW5nO1xuICB9LCBudWxsKTtcblxuICByZXR1cm4gaHlwb3RoZXNlc1N0cmluZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN1cGVyVHlwZXNTdHJpbmdGcm9tU3VwZXJUeXBlcyhzdXBlclR5cGVzKSB7XG4gIGNvbnN0IGJhc2VUeXBlID0gYmFzZVR5cGVGcm9tTm90aGluZygpLFxuICAgICAgICBzdXBlclR5cGVzU3RyaW5nID0gc3VwZXJUeXBlcy5yZWR1Y2UoKHN1cGVyVHlwZXNTdHJpbmcsIHN1cGVyVHlwZSkgPT4ge1xuICAgICAgICAgIGlmIChzdXBlclR5cGUgIT09IGJhc2VUeXBlKSB7XG4gICAgICAgICAgICBjb25zdCBzdXBlclR5cGVTdHJpbmcgPSBzdXBlclR5cGUuZ2V0U3RyaW5nKCk7XG5cbiAgICAgICAgICAgIHN1cGVyVHlwZXNTdHJpbmcgPSAoc3VwZXJUeXBlc1N0cmluZyA9PT0gbnVsbCkgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYCcke3N1cGVyVHlwZVN0cmluZ30nYCA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGAke3N1cGVyVHlwZXNTdHJpbmd9LCAnJHtzdXBlclR5cGVTdHJpbmd9J2A7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHN1cGVyVHlwZXNTdHJpbmc7XG4gICAgICAgIH0sIG51bGwpO1xuXG4gIHJldHVybiBzdXBlclR5cGVzU3RyaW5nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyYW1ldGVyc1N0cmluZ0Zyb21QYXJhbWV0ZXJzKHBhcmFtZXRlcnMpIHtcbiAgY29uc3QgcGFyYW1ldGVyc1N0cmluZyA9IHBhcmFtZXRlcnMucmVkdWNlKChwYXJhbWV0ZXJzU3RyaW5nLCBwYXJhbWV0ZXIpID0+IHtcbiAgICBjb25zdCBwYXJhbWV0ZXJTdHJpbmcgPSBwYXJhbWV0ZXIuZ2V0U3RyaW5nKCk7XG5cbiAgICBwYXJhbWV0ZXJzU3RyaW5nID0gKHBhcmFtZXRlcnNTdHJpbmcgPT09IG51bGwpID9cbiAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXJTdHJpbmcgOiAvLy9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgYCR7cGFyYW1ldGVyc1N0cmluZ30sICR7cGFyYW1ldGVyU3RyaW5nfWA7XG5cbiAgICByZXR1cm4gcGFyYW1ldGVyc1N0cmluZztcbiAgfSwgbnVsbCk7XG5cbiAgcmV0dXJuIHBhcmFtZXRlcnNTdHJpbmc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhc3N1bXB0aW9uc1N0cmluZ0Zyb21Bc3N1bXB0aW9ucyhhc3N1bXB0aW9ucykge1xuICBjb25zdCBhc3N1bXB0aW9uc1N0cmluZyA9IGFzc3VtcHRpb25zLnJlZHVjZSgoYXNzdW1wdGlvbnNTdHJpbmcsIGFzc3VtcHRpb24pID0+IHtcbiAgICBjb25zdCBhc3N1bXB0aW9uU3RyaW5nID0gYXNzdW1wdGlvbi5nZXRTdHJpbmcoKTtcblxuICAgIGFzc3VtcHRpb25zU3RyaW5nID0gKGFzc3VtcHRpb25zU3RyaW5nID09PSBudWxsKSA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGFzc3VtcHRpb25TdHJpbmc6IC8vL1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgYCR7YXNzdW1wdGlvbnNTdHJpbmd9LCAke2Fzc3VtcHRpb25TdHJpbmd9YDtcblxuICAgIHJldHVybiBhc3N1bXB0aW9uc1N0cmluZztcbiAgfSwgbnVsbCk7XG5cbiAgcmV0dXJuIGFzc3VtcHRpb25zU3RyaW5nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3VwcG9zaXRpb25zU3RyaW5nRnJvbVN1cHBvc2l0aW9ucyhzdXBwb3NpdGlvbnMpIHtcbiAgY29uc3Qgc3VwcG9zaXRpb25zU3RyaW5nID0gc3VwcG9zaXRpb25zLnJlZHVjZSgoc3VwcG9zaXRpb25zU3RyaW5nLCBzdXBwb3NpdGlvbikgPT4ge1xuICAgIGNvbnN0IHN1cHBvc2l0aW9uU3RyaW5nID0gc3VwcG9zaXRpb24uZ2V0U3RyaW5nKCk7XG5cbiAgICBzdXBwb3NpdGlvbnNTdHJpbmcgPSAoc3VwcG9zaXRpb25zU3RyaW5nID09PSBudWxsKSA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICBzdXBwb3NpdGlvblN0cmluZzogLy8vXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYCR7c3VwcG9zaXRpb25zU3RyaW5nfSwgJHtzdXBwb3NpdGlvblN0cmluZ31gO1xuXG4gICAgcmV0dXJuIHN1cHBvc2l0aW9uc1N0cmluZztcbiAgfSwgbnVsbCk7XG5cbiAgcmV0dXJuIHN1cHBvc2l0aW9uc1N0cmluZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNpZ25hdHVyZVN0cmluZ0Zyb21UZXJtcyh0ZXJtcykge1xuICBjb25zdCB0ZXJtc1N0cmluZyA9IHRlcm1zU3RyaW5nRnJvbVRlcm1zKHRlcm1zKSxcbiAgICAgICAgc2lnbmF0dXJlU3RyaW5nID0gYFske3Rlcm1zU3RyaW5nfV1gO1xuXG4gIHJldHVybiBzaWduYXR1cmVTdHJpbmc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlcXVpdmFsZW5jZVN0cmluZ0Zyb21UZXJtcyh0ZXJtcykge1xuICBjb25zdCB0ZXJtc1N0cmluZyA9IHRlcm1zU3RyaW5nRnJvbVRlcm1zKHRlcm1zKSxcbiAgICAgICAgZXF1aXZhbGVuY2VTdHJpbmcgPSBgWyR7dGVybXNTdHJpbmd9XWA7XG5cbiAgcmV0dXJuIGVxdWl2YWxlbmNlU3RyaW5nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHlwZVN0cmluZ0Zyb21Ob21pbmFsVHlwZU5hbWUobm9taW5hbFR5cGVOYW1lKSB7XG4gIGNvbnN0IHR5cGVTdHJpbmcgPSBub21pbmFsVHlwZU5hbWU7ICAvLy9cblxuICByZXR1cm4gdHlwZVN0cmluZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRlcm1TdWJzdGl0dXRpb25TdHJpbmdGcm9tVGVybUFuZFZhcmlhYmxlKHRlcm0sIHZhcmlhYmxlKSB7XG4gIGNvbnN0IHRlcm1TdHJpbmcgPSB0ZXJtLmdldFN0cmluZygpLFxuICAgICAgICB2YXJpYWJsZVN0cmluZyA9IHZhcmlhYmxlLmdldFN0cmluZygpLFxuICAgICAgICB0ZXJtU3Vic3RpdHV0aW9uU3RyaW5nID0gYFske3Rlcm1TdHJpbmd9IGZvciAke3ZhcmlhYmxlU3RyaW5nfV1gO1xuXG4gIHJldHVybiB0ZXJtU3Vic3RpdHV0aW9uU3RyaW5nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcnVsc1N0cmluZ0Zyb21MYWJlbHNQcmVtaXNlc0FuZENvbmNsdXNpb24obGFiZWxzLCBwcmVtaXNlcywgY29uY2x1c2lvbikge1xuICBjb25zdCBwcmVtaXNlc1N0cmluZyA9IHByZW1pc2VzU3RyaW5nRnJvbVByZW1pc2VzKHByZW1pc2VzKSxcbiAgICAgICAgY29uY2x1c2lvblN0cmluZyA9IGNvbmNsdXNpb24uZ2V0U3RyaW5nKCksXG4gICAgICAgIGxhYmVsc1N0cmluZyA9IGxhYmVsc1N0cmluZ0Zyb21MYWJlbHMobGFiZWxzKSxcbiAgICAgICAgcnVsZVN0cmluZyA9IChwcmVtaXNlc1N0cmluZyAhPT0gbnVsbCkgP1xuICAgICAgICAgICAgICAgICAgICAgICBgJHtsYWJlbHNTdHJpbmd9IDo6IFske3ByZW1pc2VzU3RyaW5nfV0uLi4ke2NvbmNsdXNpb25TdHJpbmd9YCA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgYCR7bGFiZWxzU3RyaW5nfSA6OiAke2NvbmNsdXNpb25TdHJpbmd9YDtcblxuICByZXR1cm4gcnVsZVN0cmluZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNlY3Rpb25TdHJpbmdGcm9tSHlwb3RoZXNlc1RvcExldmVsQXNzZXJ0aW9uKGh5cG90aGVzZXMsIGF4aW9tLCBsZW1tYSwgdGhlb3JlbSwgY29uamVjdHVyZSkge1xuICBjb25zdCB0b3BMZXZlbEFzc2VydGlvbiA9IChheGlvbSB8fCBsZW1tYSB8fCB0aGVvcmVtIHx8IGNvbmplY3R1cmUpLFxuICAgICAgICB0b3BMZXZlbEFzc2VydGlvblN0cmluZyA9IHRvcExldmVsQXNzZXJ0aW9uLmdldFN0cmluZygpLFxuICAgICAgICBoeXBvdGhlc2VzU3RyaW5nID0gaHlwb3RoZXNlc1N0cmluZ0Zyb21IeXBvdGhlc2VzKGh5cG90aGVzZXMpLFxuICAgICAgICBzZWN0aW9uU3RyaW5nID0gKHRvcExldmVsQXNzZXJ0aW9uU3RyaW5nICE9PSBudWxsKSA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGBbJHtoeXBvdGhlc2VzU3RyaW5nfV06OjogJHt0b3BMZXZlbEFzc2VydGlvblN0cmluZ31gIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBgWyR7aHlwb3RoZXNlc1N0cmluZ31dOjo6IGA7XG5cbiAgcmV0dXJuIHNlY3Rpb25TdHJpbmc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdWJwcm9vZlN0cmluZ0Zyb21TdXBwb3NpdGlvbnNBbmRTdWJEZXJpdmF0aW9uKHN1cHBvc2l0aW9ucywgc3ViRGVyaXZhdGlvbikge1xuICBjb25zdCBsYXN0UHJvb2ZBc3NlcnRpb24gPSBzdWJEZXJpdmF0aW9uLmdldExhc3RQcm9vZkFzc2VydGlvbigpLFxuICAgICAgICBzdXBwb3NpdGlvbnNTdHJpbmcgPSBzdXBwb3NpdGlvbnNTdHJpbmdGcm9tU3VwcG9zaXRpb25zKHN1cHBvc2l0aW9ucyksXG4gICAgICAgIGxhc3RQcm9vZkFzc2VydGlvblN0cmluZyA9IGxhc3RQcm9vZkFzc2VydGlvbi5nZXRTdHJpbmcoKSxcbiAgICAgICAgc3VicHJvb2ZTdHJpbmcgPSBgWyR7c3VwcG9zaXRpb25zU3RyaW5nfV0uLi4ke2xhc3RQcm9vZkFzc2VydGlvblN0cmluZ31gO1xuXG4gIHJldHVybiBzdWJwcm9vZlN0cmluZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZyYW1lU3Vic3RpdHV0aW9uU3RyaW5nRnJvbUZyYW1lQW5kTWV0YXZhcmlhYmxlKGZyYW1lLCBtZXRhdmFyaWFibGUpIHtcbiAgY29uc3QgZnJhbWVTdHJpbmcgPSBmcmFtZS5nZXRTdHJpbmcoKSxcbiAgICAgICAgbWV0YXZhcmlhYmxlU3RyaW5nID0gbWV0YXZhcmlhYmxlLmdldFN0cmluZygpLFxuICAgICAgICBzdHJpbmcgPSBgWyR7ZnJhbWVTdHJpbmd9IGZvciBbJHttZXRhdmFyaWFibGVTdHJpbmd9XV1gO1xuXG4gIHJldHVybiBzdHJpbmc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlU3RyaW5nRnJvbVR5cGVOYW1lVHlwZVByZWZpeE5hbWVBbmRTdXBlclR5cGVzKHR5cGVOYW1lLCB0eXBlUHJlZml4TmFtZSwgc3VwZXJUeXBlcykge1xuICBsZXQgdHlwZVN0cmluZztcblxuICB0eXBlU3RyaW5nID0gKHR5cGVQcmVmaXhOYW1lICE9PSBudWxsKSA/XG4gICAgICAgICAgICAgICAgIGAke3R5cGVQcmVmaXhOYW1lfSR7dHlwZU5hbWV9YDpcbiAgICAgICAgICAgICAgICAgICB0eXBlTmFtZTtcblxuICBjb25zdCBzdXBlclR5cGVzU3RyaW5nID0gc3VwZXJUeXBlc1N0cmluZ0Zyb21TdXBlclR5cGVzKHN1cGVyVHlwZXMpO1xuXG4gIGlmIChzdXBlclR5cGVzU3RyaW5nICE9PSBudWxsKSB7XG4gICAgdHlwZVN0cmluZyA9IGAke3R5cGVTdHJpbmd9OiR7c3VwZXJUeXBlc1N0cmluZ31gO1xuICB9XG5cbiAgcmV0dXJuIHR5cGVTdHJpbmc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9jZWR1cmVDYWxsU3RyaW5nRnJvbVByb2NlZHVyZVJlZmVyZW5jZUFuZFBhcmFtZXRlcnMocHJvY2VkdXJlUmVmZXJlbmNlLCBwYXJhbWV0ZXJzKSB7XG4gIGNvbnN0IHByb2NlZHVyZVJlZmVyZW5jZU5hbWUgPSBwcm9jZWR1cmVSZWZlcmVuY2UuZ2V0TmFtZSgpLFxuICAgICAgICBwYXJhbWV0ZXJzU3RyaW5nID0gcGFyYW1ldGVyc1N0cmluZ0Zyb21QYXJhbWV0ZXJzKHBhcmFtZXRlcnMpLFxuICAgICAgICBwcm9jZWR1cmVDYWxsU3RyaW5nID0gYCR7cHJvY2VkdXJlUmVmZXJlbmNlTmFtZX0oJHtwYXJhbWV0ZXJzU3RyaW5nfSlgO1xuXG4gIHJldHVybiBwcm9jZWR1cmVDYWxsU3RyaW5nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RhdGVtZW50U3Vic3RpdHV0aW9uU3RyaW5nRnJvbVN0YXRlbWVudEFuZE1ldGF2YXJpYWJsZShzdGF0ZW1lbnQsIG1ldGF2YXJpYWJsZSkge1xuICBjb25zdCBzdGF0ZW1lbnRTdHJpbmcgPSBzdGF0ZW1lbnQuZ2V0U3RyaW5nKCksXG4gICAgICAgIG1ldGF2YXJpYWJsZVN0cmluZyA9IG1ldGF2YXJpYWJsZS5nZXRTdHJpbmcoKSxcbiAgICAgICAgc3RhdGVtZW50U3Vic3RpdHV0aW9uU3RyaW5nID0gYFske3N0YXRlbWVudFN0cmluZ30gZm9yICR7bWV0YXZhcmlhYmxlU3RyaW5nfV1gO1xuXG4gIHJldHVybiBzdGF0ZW1lbnRTdWJzdGl0dXRpb25TdHJpbmc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWZlcmVuY2VTdWJzdGl0dXRpb25TdHJpbmdGcm9tUmVmZXJlbmNlQW5kTWV0YXZhcmlhYmxlKHJlZmVyZW5jZSwgbWV0YXZhcmlhYmxlKSB7XG4gIGNvbnN0IHJlZmVyZW5jZVN0cmluZyA9IHJlZmVyZW5jZS5nZXRTdHJpbmcoKSxcbiAgICAgICAgbWV0YXZhcmlhYmxlU3RyaW5nID0gbWV0YXZhcmlhYmxlLmdldFN0cmluZygpLFxuICAgICAgICByZWZlcmVuY2VTdWJzdGl0dXRpb25TdHJpbmcgPSBgWyR7cmVmZXJlbmNlU3RyaW5nfSBmb3IgJHttZXRhdmFyaWFibGVTdHJpbmd9XWA7XG5cbiAgcmV0dXJuIHJlZmVyZW5jZVN1YnN0aXR1dGlvblN0cmluZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRvcExldmVsQXNzZXJ0aW9uU3RyaW5nRnJvbUxhYmVsc1N1cHBvc2l0aW9uc0FuZERlZHVjdGlvbihsYWJlbHMsIHN1cHBvc2l0aW9ucywgZGVkdWN0aW9uKSB7XG4gIGxldCB0b3BMZXZlbEFzc2VydGlvblN0cmluZztcblxuICBjb25zdCBzdXBwb3NpdGlvbnNTdHJpbmcgPSBzdXBwb3NpdGlvbnNTdHJpbmdGcm9tU3VwcG9zaXRpb25zKHN1cHBvc2l0aW9ucyksXG4gICAgICAgIGRlZHVjdGlvblN0cmluZyA9IGRlZHVjdGlvbi5nZXRTdHJpbmcoKSxcbiAgICAgICAgbGFiZWxzU3RyaW5nID0gbGFiZWxzU3RyaW5nRnJvbUxhYmVscyhsYWJlbHMpO1xuXG4gIGlmIChsYWJlbHNTdHJpbmcgIT09IG51bGwpIHtcbiAgICB0b3BMZXZlbEFzc2VydGlvblN0cmluZyA9IChzdXBwb3NpdGlvbnNTdHJpbmcgIT09IG51bGwpID9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgJHtsYWJlbHNTdHJpbmd9IDo6IFske3N1cHBvc2l0aW9uc1N0cmluZ31dLi4uJHtkZWR1Y3Rpb25TdHJpbmd9YCA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgJHtsYWJlbHNTdHJpbmd9IDo6ICR7ZGVkdWN0aW9uU3RyaW5nfWA7XG4gIH0gZWxzZSB7XG4gICAgdG9wTGV2ZWxBc3NlcnRpb25TdHJpbmcgPSAoc3VwcG9zaXRpb25zU3RyaW5nICE9PSBudWxsKSA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYFske3N1cHBvc2l0aW9uc1N0cmluZ31dLi4uJHtkZWR1Y3Rpb25TdHJpbmd9YCA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVkdWN0aW9uU3RyaW5nO1xuICB9XG5cbiAgcmV0dXJuIHRvcExldmVsQXNzZXJ0aW9uU3RyaW5nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdG9wTGV2ZWxNZXRhQXNzZXJ0aW9uU3RyaW5nRnJvbUxhYmVsU3VwcG9zaXRpb25zQW5kRGVkdWN0aW9uKGxhYmVsLCBzdXBwb3NpdGlvbnMsIGRlZHVjdGlvbikge1xuICBjb25zdCBzdXBwb3NpdGlvbnNTdHJpbmcgPSBzdXBwb3NpdGlvbnNTdHJpbmdGcm9tU3VwcG9zaXRpb25zKHN1cHBvc2l0aW9ucyksXG4gICAgICAgIGRlZHVjdGlvblN0cmluZyA9IGRlZHVjdGlvbi5nZXRTdHJpbmcoKSxcbiAgICAgICAgbGFiZWxTdHJpbmcgPSBsYWJlbC5nZXRTdHJpbmcoKSxcbiAgICAgICAgdG9wTGV2ZWxNZXRhQXNzZXJ0aW9uU3RyaW5nID0gKHN1cHBvc2l0aW9uc1N0cmluZyAhPT0gbnVsbCkgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYCR7bGFiZWxTdHJpbmd9IDo6IFske3N1cHBvc2l0aW9uc1N0cmluZ31dLi4uJHtkZWR1Y3Rpb25TdHJpbmd9YCA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGAke2xhYmVsU3RyaW5nfSA6OiAke2RlZHVjdGlvblN0cmluZ31gO1xuXG4gIHJldHVybiB0b3BMZXZlbE1ldGFBc3NlcnRpb25TdHJpbmc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGF0ZW1lbnRTdWJzdGl0dXRpb25TdHJpbmdGcm9tU3RhdGVtZW50TWV0YXZhcmlhYmxlQW5kU3Vic3RpdHV0aW9uKHN0YXRlbWVudCwgbWV0YXZhcmlhYmxlLCBzdWJzdGl0dXRpb24pIHtcbiAgY29uc3Qgc3RhdGVtZW50U3RyaW5nID0gc3RhdGVtZW50LmdldFN0cmluZygpLFxuICAgICAgICBtZXRhdmFyaWFibGVTdHJpbmcgPSBtZXRhdmFyaWFibGUuZ2V0U3RyaW5nKCksXG4gICAgICAgIHN1YnN0aXR1dGlvblN0cmluZyA9IHN1YnN0aXR1dGlvbi5nZXRTdHJpbmcoKSxcbiAgICAgICAgc3RhdGVtZW50U3Vic3RpdHV0aW9uU3RyaW5nID0gYFske3N0YXRlbWVudFN0cmluZ30gZm9yICR7bWV0YXZhcmlhYmxlU3RyaW5nfSR7c3Vic3RpdHV0aW9uU3RyaW5nfV1gO1xuXG4gIHJldHVybiBzdGF0ZW1lbnRTdWJzdGl0dXRpb25TdHJpbmc7XG59XG4iXSwibmFtZXMiOlsiYXNzdW1wdGlvbnNTdHJpbmdGcm9tQXNzdW1wdGlvbnMiLCJlcXVpdmFsZW5jZVN0cmluZ0Zyb21UZXJtcyIsImZyYW1lU3Vic3RpdHV0aW9uU3RyaW5nRnJvbUZyYW1lQW5kTWV0YXZhcmlhYmxlIiwiaHlwb3RoZXNlc1N0cmluZ0Zyb21IeXBvdGhlc2VzIiwibGFiZWxzU3RyaW5nRnJvbUxhYmVscyIsInBhcmFtZXRlcnNTdHJpbmdGcm9tUGFyYW1ldGVycyIsInByZW1pc2VzU3RyaW5nRnJvbVByZW1pc2VzIiwicHJvY2VkdXJlQ2FsbFN0cmluZ0Zyb21Qcm9jZWR1cmVSZWZlcmVuY2VBbmRQYXJhbWV0ZXJzIiwicmVmZXJlbmNlU3Vic3RpdHV0aW9uU3RyaW5nRnJvbVJlZmVyZW5jZUFuZE1ldGF2YXJpYWJsZSIsInJ1bHNTdHJpbmdGcm9tTGFiZWxzUHJlbWlzZXNBbmRDb25jbHVzaW9uIiwic2VjdGlvblN0cmluZ0Zyb21IeXBvdGhlc2VzVG9wTGV2ZWxBc3NlcnRpb24iLCJzaWduYXR1cmVTdHJpbmdGcm9tVGVybXMiLCJzdGF0ZW1lbnRTdWJzdGl0dXRpb25TdHJpbmdGcm9tU3RhdGVtZW50QW5kTWV0YXZhcmlhYmxlIiwic3RhdGVtZW50U3Vic3RpdHV0aW9uU3RyaW5nRnJvbVN0YXRlbWVudE1ldGF2YXJpYWJsZUFuZFN1YnN0aXR1dGlvbiIsInN1YnByb29mU3RyaW5nRnJvbVN1cHBvc2l0aW9uc0FuZFN1YkRlcml2YXRpb24iLCJzdXBlclR5cGVzU3RyaW5nRnJvbVN1cGVyVHlwZXMiLCJzdXBwb3NpdGlvbnNTdHJpbmdGcm9tU3VwcG9zaXRpb25zIiwidGVybVN1YnN0aXR1dGlvblN0cmluZ0Zyb21UZXJtQW5kVmFyaWFibGUiLCJ0ZXJtc1N0cmluZ0Zyb21UZXJtcyIsInRvcExldmVsQXNzZXJ0aW9uU3RyaW5nRnJvbUxhYmVsc1N1cHBvc2l0aW9uc0FuZERlZHVjdGlvbiIsInRvcExldmVsTWV0YUFzc2VydGlvblN0cmluZ0Zyb21MYWJlbFN1cHBvc2l0aW9uc0FuZERlZHVjdGlvbiIsInR5cGVTdHJpbmdGcm9tTm9taW5hbFR5cGVOYW1lIiwidHlwZVN0cmluZ0Zyb21UeXBlTmFtZVR5cGVQcmVmaXhOYW1lQW5kU3VwZXJUeXBlcyIsInRlcm1zIiwidGVybXNTdHJpbmciLCJyZWR1Y2UiLCJ0ZXJtIiwidGVybVN0cmluZyIsImdldFN0cmluZyIsImxhYmVscyIsImxhYmVsc1N0cmluZyIsImxhYmVsIiwibGFiZWxTdHJpbmciLCJwcmVtaXNlcyIsInByZW1pc2VzU3RyaW5nIiwicHJlbWlzZSIsInByZW1pc2VTdHJpbmciLCJoeXBvdGhlc2VzIiwiaHlwb3RoZXNlc1N0cmluZyIsImh5cG90aGVzaXMiLCJoeXBvdGhlc2lzU3RyaW5nIiwic3VwZXJUeXBlcyIsImJhc2VUeXBlIiwiYmFzZVR5cGVGcm9tTm90aGluZyIsInN1cGVyVHlwZXNTdHJpbmciLCJzdXBlclR5cGUiLCJzdXBlclR5cGVTdHJpbmciLCJwYXJhbWV0ZXJzIiwicGFyYW1ldGVyc1N0cmluZyIsInBhcmFtZXRlciIsInBhcmFtZXRlclN0cmluZyIsImFzc3VtcHRpb25zIiwiYXNzdW1wdGlvbnNTdHJpbmciLCJhc3N1bXB0aW9uIiwiYXNzdW1wdGlvblN0cmluZyIsInN1cHBvc2l0aW9ucyIsInN1cHBvc2l0aW9uc1N0cmluZyIsInN1cHBvc2l0aW9uIiwic3VwcG9zaXRpb25TdHJpbmciLCJzaWduYXR1cmVTdHJpbmciLCJlcXVpdmFsZW5jZVN0cmluZyIsIm5vbWluYWxUeXBlTmFtZSIsInR5cGVTdHJpbmciLCJ2YXJpYWJsZSIsInZhcmlhYmxlU3RyaW5nIiwidGVybVN1YnN0aXR1dGlvblN0cmluZyIsImNvbmNsdXNpb24iLCJjb25jbHVzaW9uU3RyaW5nIiwicnVsZVN0cmluZyIsImF4aW9tIiwibGVtbWEiLCJ0aGVvcmVtIiwiY29uamVjdHVyZSIsInRvcExldmVsQXNzZXJ0aW9uIiwidG9wTGV2ZWxBc3NlcnRpb25TdHJpbmciLCJzZWN0aW9uU3RyaW5nIiwic3ViRGVyaXZhdGlvbiIsImxhc3RQcm9vZkFzc2VydGlvbiIsImdldExhc3RQcm9vZkFzc2VydGlvbiIsImxhc3RQcm9vZkFzc2VydGlvblN0cmluZyIsInN1YnByb29mU3RyaW5nIiwiZnJhbWUiLCJtZXRhdmFyaWFibGUiLCJmcmFtZVN0cmluZyIsIm1ldGF2YXJpYWJsZVN0cmluZyIsInN0cmluZyIsInR5cGVOYW1lIiwidHlwZVByZWZpeE5hbWUiLCJwcm9jZWR1cmVSZWZlcmVuY2UiLCJwcm9jZWR1cmVSZWZlcmVuY2VOYW1lIiwiZ2V0TmFtZSIsInByb2NlZHVyZUNhbGxTdHJpbmciLCJzdGF0ZW1lbnQiLCJzdGF0ZW1lbnRTdHJpbmciLCJzdGF0ZW1lbnRTdWJzdGl0dXRpb25TdHJpbmciLCJyZWZlcmVuY2UiLCJyZWZlcmVuY2VTdHJpbmciLCJyZWZlcmVuY2VTdWJzdGl0dXRpb25TdHJpbmciLCJkZWR1Y3Rpb24iLCJkZWR1Y3Rpb25TdHJpbmciLCJ0b3BMZXZlbE1ldGFBc3NlcnRpb25TdHJpbmciLCJzdWJzdGl0dXRpb24iLCJzdWJzdGl0dXRpb25TdHJpbmciXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7OztRQTJGZ0JBO2VBQUFBOztRQW1DQUM7ZUFBQUE7O1FBb0RBQztlQUFBQTs7UUFwSUFDO2VBQUFBOztRQTVCQUM7ZUFBQUE7O1FBMkRBQztlQUFBQTs7UUE3Q0FDO2VBQUFBOztRQTBLQUM7ZUFBQUE7O1FBZ0JBQztlQUFBQTs7UUF2RUFDO2VBQUFBOztRQVdBQztlQUFBQTs7UUF2Q0FDO2VBQUFBOztRQTJGQUM7ZUFBQUE7O1FBK0NBQztlQUFBQTs7UUF4RkFDO2VBQUFBOztRQTdHQUM7ZUFBQUE7O1FBNkNBQztlQUFBQTs7UUFrQ0FDO2VBQUFBOztRQXZJQUM7ZUFBQUE7O1FBOE5BQztlQUFBQTs7UUFvQkFDO2VBQUFBOztRQWpIQUM7ZUFBQUE7O1FBcURBQztlQUFBQTs7O29CQXhMb0I7QUFFN0IsU0FBU0oscUJBQXFCSyxLQUFLO0lBQ3hDLElBQU1DLGNBQWNELE1BQU1FLE1BQU0sQ0FBQyxTQUFDRCxhQUFhRTtRQUM3QyxJQUFNQyxhQUFhRCxLQUFLRSxTQUFTO1FBRWpDSixjQUFjLEFBQUNBLGdCQUFnQixPQUNoQixBQUFDLEdBQWtCRyxPQUFoQkgsYUFBWSxNQUFlLE9BQVhHLGNBQ2hCQTtRQUVsQixPQUFPSDtJQUNULEdBQUc7SUFFSCxPQUFPQTtBQUNUO0FBRU8sU0FBU3BCLHVCQUF1QnlCLE1BQU07SUFDM0MsSUFBTUMsZUFBZUQsT0FBT0osTUFB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
@@ -29,13 +29,10 @@ function termFromTermAndSubstitutions(term, generalContext, specificContext) {
29
29
  var termNode = term.getNode(), termSingular = term.isSingular();
30
30
  term = null; ///
31
31
  if (termSingular) {
32
- var variableIdentifier = termNode.getVariableIdentifier(), variable = generalContext.findVariableByVariableIdentifier(variableIdentifier);
33
- if (variable !== null) {
34
- var substitution = specificContext.findSubstitutionByVariableIdentifier(variableIdentifier);
35
- if (substitution !== null) {
36
- var termSubstitution = substitution, replacementTerm = termSubstitution.getReplacementTerm();
37
- term = replacementTerm; ///
38
- }
32
+ var variableIdentifier = termNode.getVariableIdentifier(), substitution = specificContext.findSubstitutionByVariableIdentifier(variableIdentifier);
33
+ if (substitution !== null) {
34
+ var termSubstitution = substitution, replacementTerm = termSubstitution.getReplacementTerm();
35
+ term = replacementTerm; ///
39
36
  }
40
37
  }
41
38
  }
@@ -46,13 +43,10 @@ function frameFromFrameAndSubstitutions(frame, generalContext, specificContext)
46
43
  var frameNode = frame.getNode(), frameSingular = frame.isSingular();
47
44
  frame = null; ///
48
45
  if (frameSingular) {
49
- var metavariableName = frameNode.getMetavariableName(), metavariable = generalContext.findMetavariableByMetavariableName(metavariableName);
50
- if (metavariable !== null) {
51
- var substitution = specificContext.findSubstitutionByMetavariableName(metavariableName);
52
- if (substitution !== null) {
53
- var frameSubstitution = substitution, replacementFrame = frameSubstitution.getReplacementFrame();
54
- frame = replacementFrame; ///
55
- }
46
+ var metavariableName = frameNode.getMetavariableName(), substitution = specificContext.findSubstitutionByMetavariableName(metavariableName);
47
+ if (substitution !== null) {
48
+ var frameSubstitution = substitution, replacementFrame = frameSubstitution.getReplacementFrame();
49
+ frame = replacementFrame; ///
56
50
  }
57
51
  }
58
52
  }
@@ -74,13 +68,11 @@ function statementFromStatementAndSubstitutions(statement, generalContext, speci
74
68
  generalContext = specificContext; ///
75
69
  specificContext = context; ///
76
70
  }
77
- var metavariableName = statementNode.getMetavariableName(), metavariable = generalContext.findMetavariableByMetavariableName(metavariableName);
78
- if (metavariable !== null) {
79
- substitution = substitution !== null ? specificContext.findSubstitutionByMetavariableNameAndSubstitution(metavariableName, substitution) : specificContext.findSubstitutionByMetavariableName(metavariableName);
80
- if (substitution !== null) {
81
- var statementSubstitution = substitution, replacementStatement = statementSubstitution.getReplacementStatement();
82
- statement = replacementStatement; ///
83
- }
71
+ var metavariableName = statementNode.getMetavariableName();
72
+ substitution = substitution !== null ? specificContext.findSubstitutionByMetavariableNameAndSubstitution(metavariableName, substitution) : specificContext.findSubstitutionByMetavariableName(metavariableName);
73
+ if (substitution !== null) {
74
+ var statementSubstitution = substitution, replacementStatement = statementSubstitution.getReplacementStatement();
75
+ statement = replacementStatement; ///
84
76
  }
85
77
  }
86
78
  }
@@ -102,4 +94,4 @@ function metavariableNamesFromSubstitutions(substitutions) {
102
94
  return metavariableNames;
103
95
  }
104
96
 
105
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsaXRpZXMvc3Vic3RpdHV0aW9ucy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgYXJyYXlVdGlsaXRpZXMgfSBmcm9tIFwibmVjZXNzYXJ5XCI7XG5cbmNvbnN0IHsgY29tcHJlc3MgfSA9IGFycmF5VXRpbGl0aWVzO1xuXG5leHBvcnQgZnVuY3Rpb24gdGVybUZyb21UZXJtQW5kU3Vic3RpdHV0aW9ucyh0ZXJtLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0KSB7XG4gIGlmICh0ZXJtICE9PSBudWxsKSB7XG4gICAgY29uc3QgdGVybU5vZGUgPSB0ZXJtLmdldE5vZGUoKSxcbiAgICAgICAgICB0ZXJtU2luZ3VsYXIgPSB0ZXJtLmlzU2luZ3VsYXIoKTtcblxuICAgIHRlcm0gPSBudWxsOyAgLy8vXG5cbiAgICBpZiAodGVybVNpbmd1bGFyKSB7XG4gICAgICBjb25zdCB2YXJpYWJsZUlkZW50aWZpZXIgPSB0ZXJtTm9kZS5nZXRWYXJpYWJsZUlkZW50aWZpZXIoKSxcbiAgICAgICAgICAgIHZhcmlhYmxlID0gZ2VuZXJhbENvbnRleHQuZmluZFZhcmlhYmxlQnlWYXJpYWJsZUlkZW50aWZpZXIodmFyaWFibGVJZGVudGlmaWVyKTtcblxuICAgICAgaWYgKHZhcmlhYmxlICE9PSBudWxsKSB7XG4gICAgICAgIGNvbnN0IHN1YnN0aXR1dGlvbiA9IHNwZWNpZmljQ29udGV4dC5maW5kU3Vic3RpdHV0aW9uQnlWYXJpYWJsZUlkZW50aWZpZXIodmFyaWFibGVJZGVudGlmaWVyKTtcblxuICAgICAgICBpZiAoc3Vic3RpdHV0aW9uICE9PSBudWxsKSB7XG4gICAgICAgICAgY29uc3QgdGVybVN1YnN0aXR1dGlvbiA9IHN1YnN0aXR1dGlvbiwgIC8vL1xuICAgICAgICAgICAgICAgIHJlcGxhY2VtZW50VGVybSA9IHRlcm1TdWJzdGl0dXRpb24uZ2V0UmVwbGFjZW1lbnRUZXJtKCk7XG5cbiAgICAgICAgICB0ZXJtID0gcmVwbGFjZW1lbnRUZXJtOyAvLy9cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0ZXJtO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZnJhbWVGcm9tRnJhbWVBbmRTdWJzdGl0dXRpb25zKGZyYW1lLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0KSB7XG4gIGlmIChmcmFtZSAhPT0gbnVsbCkge1xuICAgIGNvbnN0IGZyYW1lTm9kZSA9IGZyYW1lLmdldE5vZGUoKSxcbiAgICAgICAgICBmcmFtZVNpbmd1bGFyID0gZnJhbWUuaXNTaW5ndWxhcigpO1xuXG4gICAgZnJhbWUgPSBudWxsOyAgLy8vXG5cbiAgICBpZiAoZnJhbWVTaW5ndWxhcikge1xuICAgICAgY29uc3QgbWV0YXZhcmlhYmxlTmFtZSA9IGZyYW1lTm9kZS5nZXRNZXRhdmFyaWFibGVOYW1lKCksXG4gICAgICAgICAgICBtZXRhdmFyaWFibGUgPSBnZW5lcmFsQ29udGV4dC5maW5kTWV0YXZhcmlhYmxlQnlNZXRhdmFyaWFibGVOYW1lKG1ldGF2YXJpYWJsZU5hbWUpO1xuXG4gICAgICBpZiAobWV0YXZhcmlhYmxlICE9PSBudWxsKSB7XG4gICAgICAgIGNvbnN0IHN1YnN0aXR1dGlvbiA9IHNwZWNpZmljQ29udGV4dC5maW5kU3Vic3RpdHV0aW9uQnlNZXRhdmFyaWFibGVOYW1lKG1ldGF2YXJpYWJsZU5hbWUpO1xuXG4gICAgICAgIGlmIChzdWJzdGl0dXRpb24gIT09IG51bGwpIHtcbiAgICAgICAgICBjb25zdCBmcmFtZVN1YnN0aXR1dGlvbiA9IHN1YnN0aXR1dGlvbiwgLy8vXG4gICAgICAgICAgICAgICAgcmVwbGFjZW1lbnRGcmFtZSA9IGZyYW1lU3Vic3RpdHV0aW9uLmdldFJlcGxhY2VtZW50RnJhbWUoKTtcblxuICAgICAgICAgIGZyYW1lID0gcmVwbGFjZW1lbnRGcmFtZTsgLy8vXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gZnJhbWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGF0ZW1lbnRGcm9tU3RhdGVtZW50QW5kU3Vic3RpdHV0aW9ucyhzdGF0ZW1lbnQsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQpIHtcbiAgaWYgKHN0YXRlbWVudCAhPT0gbnVsbCkge1xuICAgIGNvbnN0IHN0YXRlbWVudE5vZGUgPSBzdGF0ZW1lbnQuZ2V0Tm9kZSgpLFxuICAgICAgICAgIHN0YXRlbWVudFNpbmd1bGFyID0gc3RhdGVtZW50LmlzU2luZ3VsYXIoKTtcblxuICAgIHN0YXRlbWVudCA9IG51bGw7XG5cbiAgICBpZiAoc3RhdGVtZW50U2luZ3VsYXIpIHtcbiAgICAgIGxldCBzdWJzdGl0dXRpb24gPSBudWxsO1xuXG4gICAgICBjb25zdCBzdWJzdGl0dXRpb25Ob2RlID0gc3RhdGVtZW50Tm9kZS5nZXRTdWJzdGl0dXRpb25Ob2RlKCk7XG5cbiAgICAgIGlmIChzdWJzdGl0dXRpb25Ob2RlICE9PSBudWxsKSB7XG4gICAgICAgIGxldCBjb250ZXh0ID0gZ2VuZXJhbENvbnRleHQ7IC8vL1xuXG4gICAgICAgIGdlbmVyYWxDb250ZXh0ID0gc3BlY2lmaWNDb250ZXh0OyAvLy9cblxuICAgICAgICBzcGVjaWZpY0NvbnRleHQgPSBjb250ZXh0OyAgLy8vXG5cbiAgICAgICAgc3Vic3RpdHV0aW9uID0gc3BlY2lmaWNDb250ZXh0LmZpbmRTdWJzdGl0dXRpb25CeVN1YnN0aXR1dGlvbk5vZGUoc3Vic3RpdHV0aW9uTm9kZSk7XG5cbiAgICAgICAgY29udGV4dCA9IGdlbmVyYWxDb250ZXh0OyAvLy9cblxuICAgICAgICBnZW5lcmFsQ29udGV4dCA9IHNwZWNpZmljQ29udGV4dDsgLy8vXG5cbiAgICAgICAgc3BlY2lmaWNDb250ZXh0ID0gY29udGV4dDsgIC8vL1xuICAgICAgfVxuXG4gICAgICBjb25zdCBtZXRhdmFyaWFibGVOYW1lID0gc3RhdGVtZW50Tm9kZS5nZXRNZXRhdmFyaWFibGVOYW1lKCksXG4gICAgICAgICAgICBtZXRhdmFyaWFibGUgPSBnZW5lcmFsQ29udGV4dC5maW5kTWV0YXZhcmlhYmxlQnlNZXRhdmFyaWFibGVOYW1lKG1ldGF2YXJpYWJsZU5hbWUpO1xuXG4gICAgICBpZiAobWV0YXZhcmlhYmxlICE9PSBudWxsKSB7XG4gICAgICAgIHN1YnN0aXR1dGlvbiA9IChzdWJzdGl0dXRpb24gIT09IG51bGwpID9cbiAgICAgICAgICAgICAgICAgICAgICAgICBzcGVjaWZpY0NvbnRleHQuZmluZFN1YnN0aXR1dGlvbkJ5TWV0YXZhcmlhYmxlTmFtZUFuZFN1YnN0aXR1dGlvbihtZXRhdmFyaWFibGVOYW1lLCBzdWJzdGl0dXRpb24pIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwZWNpZmljQ29udGV4dC5maW5kU3Vic3RpdHV0aW9uQnlNZXRhdmFyaWFibGVOYW1lKG1ldGF2YXJpYWJsZU5hbWUpO1xuXG4gICAgICAgIGlmIChzdWJzdGl0dXRpb24gIT09IG51bGwpIHtcbiAgICAgICAgICBjb25zdCBzdGF0ZW1lbnRTdWJzdGl0dXRpb24gPSBzdWJzdGl0dXRpb24sIC8vL1xuICAgICAgICAgICAgICAgIHJlcGxhY2VtZW50U3RhdGVtZW50ID0gc3RhdGVtZW50U3Vic3RpdHV0aW9uLmdldFJlcGxhY2VtZW50U3RhdGVtZW50KCk7XG5cbiAgICAgICAgICBzdGF0ZW1lbnQgPSByZXBsYWNlbWVudFN0YXRlbWVudDsgLy8vXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gc3RhdGVtZW50O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWV0YXZhcmlhYmxlTmFtZXNGcm9tU3Vic3RpdHV0aW9ucyhzdWJzdGl0dXRpb25zKSB7XG4gIGNvbnN0IG1ldGF2YXJpYWJsZU5hbWVzID0gW107XG5cbiAgc3Vic3RpdHV0aW9ucy5mb3JFYWNoKChzdWJzdGl0dXRpb24pID0+IHtcbiAgICBjb25zdCBtZXRhdmFyaWFibGVOYW1lID0gc3Vic3RpdHV0aW9uLmdldE1ldGF2YXJpYWJsZU5hbWUoKTtcblxuICAgIGlmIChtZXRhdmFyaWFibGVOYW1lICE9PSBudWxsKSB7XG4gICAgICBtZXRhdmFyaWFibGVOYW1lcy5wdXNoKG1ldGF2YXJpYWJsZU5hbWUpO1xuICAgIH1cbiAgfSk7XG5cbiAgY29tcHJlc3MobWV0YXZhcmlhYmxlTmFtZXMsIChtZXRhdmFyaWFibGVOYW1lQSwgbWV0YXZhcmlhYmxlTmFtZUIpID0+IHtcbiAgICBpZiAobWV0YXZhcmlhYmxlTmFtZUEgIT09IG1ldGF2YXJpYWJsZU5hbWVCKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiBtZXRhdmFyaWFibGVOYW1lcztcbn1cbiJdLCJuYW1lcyI6WyJmcmFtZUZyb21GcmFtZUFuZFN1YnN0aXR1dGlvbnMiLCJtZXRhdmFyaWFibGVOYW1lc0Zyb21TdWJzdGl0dXRpb25zIiwic3RhdGVtZW50RnJvbVN0YXRlbWVudEFuZFN1YnN0aXR1dGlvbnMiLCJ0ZXJtRnJvbVRlcm1BbmRTdWJzdGl0dXRpb25zIiwiY29tcHJlc3MiLCJhcnJheVV0aWxpdGllcyIsInRlcm0iLCJnZW5lcmFsQ29udGV4dCIsInNwZWNpZmljQ29udGV4dCIsInRlcm1Ob2RlIiwiZ2V0Tm9kZSIsInRlcm1TaW5ndWxhciIsImlzU2luZ3VsYXIiLCJ2YXJpYWJsZUlkZW50aWZpZXIiLCJnZXRWYXJpYWJsZUlkZW50aWZpZXIiLCJ2YXJpYWJsZSIsImZpbmRWYXJpYWJsZUJ5VmFyaWFibGVJZGVudGlmaWVyIiwic3Vic3RpdHV0aW9uIiwiZmluZFN1YnN0aXR1dGlvbkJ5VmFyaWFibGVJZGVudGlmaWVyIiwidGVybVN1YnN0aXR1dGlvbiIsInJlcGxhY2VtZW50VGVybSIsImdldFJlcGxhY2VtZW50VGVybSIsImZyYW1lIiwiZnJhbWVOb2RlIiwiZnJhbWVTaW5ndWxhciIsIm1ldGF2YXJpYWJsZU5hbWUiLCJnZXRNZXRhdmFyaWFibGVOYW1lIiwibWV0YXZhcmlhYmxlIiwiZmluZE1ldGF2YXJpYWJsZUJ5TWV0YXZhcmlhYmxlTmFtZSIsImZpbmRTdWJzdGl0dXRpb25CeU1ldGF2YXJpYWJsZU5hbWUiLCJmcmFtZVN1YnN0aXR1dGlvbiIsInJlcGxhY2VtZW50RnJhbWUiLCJnZXRSZXBsYWNlbWVudEZyYW1lIiwic3RhdGVtZW50Iiwic3RhdGVtZW50Tm9kZSIsInN0YXRlbWVudFNpbmd1bGFyIiwic3Vic3RpdHV0aW9uTm9kZSIsImdldFN1YnN0aXR1dGlvbk5vZGUiLCJjb250ZXh0IiwiZmluZFN1YnN0aXR1dGlvbkJ5U3Vic3RpdHV0aW9uTm9kZSIsImZpbmRTdWJzdGl0dXRpb25CeU1ldGF2YXJpYWJsZU5hbWVBbmRTdWJzdGl0dXRpb24iLCJzdGF0ZW1lbnRTdWJzdGl0dXRpb24iLCJyZXBsYWNlbWVudFN0YXRlbWVudCIsImdldFJlcGxhY2VtZW50U3RhdGVtZW50Iiwic3Vic3RpdHV0aW9ucyIsIm1ldGF2YXJpYWJsZU5hbWVzIiwiZm9yRWFjaCIsInB1c2giLCJtZXRhdmFyaWFibGVOYW1lQSIsIm1ldGF2YXJpYWJsZU5hbWVCIl0sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7UUFpQ2dCQTtlQUFBQTs7UUE0RUFDO2VBQUFBOztRQWpEQUM7ZUFBQUE7O1FBdERBQztlQUFBQTs7O3lCQUplO0FBRS9CLElBQU0sQUFBRUMsV0FBYUMseUJBQWMsQ0FBM0JEO0FBRUQsU0FBU0QsNkJBQTZCRyxJQUFJLEVBQUVDLGNBQWMsRUFBRUMsZUFBZTtJQUNoRixJQUFJRixTQUFTLE1BQU07UUFDakIsSUFBTUcsV0FBV0gsS0FBS0ksT0FBTyxJQUN2QkMsZUFBZUwsS0FBS00sVUFBVTtRQUVwQ04sT0FBTyxNQUFPLEdBQUc7UUFFakIsSUFBSUssY0FBYztZQUNoQixJQUFNRSxxQkFBcUJKLFNBQVNLLHFCQUFxQixJQUNuREMsV0FBV1IsZUFBZVMsZ0NBQWdDLENBQUNIO1lBRWpFLElBQUlFLGFBQWEsTUFBTTtnQkFDckIsSUFBTUUsZUFBZVQsZ0JBQWdCVSxvQ0FBb0MsQ0FB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
97
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsaXRpZXMvc3Vic3RpdHV0aW9ucy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgYXJyYXlVdGlsaXRpZXMgfSBmcm9tIFwibmVjZXNzYXJ5XCI7XG5cbmNvbnN0IHsgY29tcHJlc3MgfSA9IGFycmF5VXRpbGl0aWVzO1xuXG5leHBvcnQgZnVuY3Rpb24gdGVybUZyb21UZXJtQW5kU3Vic3RpdHV0aW9ucyh0ZXJtLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0KSB7XG4gIGlmICh0ZXJtICE9PSBudWxsKSB7XG4gICAgY29uc3QgdGVybU5vZGUgPSB0ZXJtLmdldE5vZGUoKSxcbiAgICAgICAgICB0ZXJtU2luZ3VsYXIgPSB0ZXJtLmlzU2luZ3VsYXIoKTtcblxuICAgIHRlcm0gPSBudWxsOyAgLy8vXG5cbiAgICBpZiAodGVybVNpbmd1bGFyKSB7XG4gICAgICBjb25zdCB2YXJpYWJsZUlkZW50aWZpZXIgPSB0ZXJtTm9kZS5nZXRWYXJpYWJsZUlkZW50aWZpZXIoKSxcbiAgICAgICAgICAgIHN1YnN0aXR1dGlvbiA9IHNwZWNpZmljQ29udGV4dC5maW5kU3Vic3RpdHV0aW9uQnlWYXJpYWJsZUlkZW50aWZpZXIodmFyaWFibGVJZGVudGlmaWVyKTtcblxuICAgICAgaWYgKHN1YnN0aXR1dGlvbiAhPT0gbnVsbCkge1xuICAgICAgICBjb25zdCB0ZXJtU3Vic3RpdHV0aW9uID0gc3Vic3RpdHV0aW9uLCAgLy8vXG4gICAgICAgICAgICAgIHJlcGxhY2VtZW50VGVybSA9IHRlcm1TdWJzdGl0dXRpb24uZ2V0UmVwbGFjZW1lbnRUZXJtKCk7XG5cbiAgICAgICAgdGVybSA9IHJlcGxhY2VtZW50VGVybTsgLy8vXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRlcm07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmcmFtZUZyb21GcmFtZUFuZFN1YnN0aXR1dGlvbnMoZnJhbWUsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQpIHtcbiAgaWYgKGZyYW1lICE9PSBudWxsKSB7XG4gICAgY29uc3QgZnJhbWVOb2RlID0gZnJhbWUuZ2V0Tm9kZSgpLFxuICAgICAgICAgIGZyYW1lU2luZ3VsYXIgPSBmcmFtZS5pc1Npbmd1bGFyKCk7XG5cbiAgICBmcmFtZSA9IG51bGw7ICAvLy9cblxuICAgIGlmIChmcmFtZVNpbmd1bGFyKSB7XG4gICAgICBjb25zdCBtZXRhdmFyaWFibGVOYW1lID0gZnJhbWVOb2RlLmdldE1ldGF2YXJpYWJsZU5hbWUoKSxcbiAgICAgICAgICAgIHN1YnN0aXR1dGlvbiA9IHNwZWNpZmljQ29udGV4dC5maW5kU3Vic3RpdHV0aW9uQnlNZXRhdmFyaWFibGVOYW1lKG1ldGF2YXJpYWJsZU5hbWUpO1xuXG4gICAgICBpZiAoc3Vic3RpdHV0aW9uICE9PSBudWxsKSB7XG4gICAgICAgIGNvbnN0IGZyYW1lU3Vic3RpdHV0aW9uID0gc3Vic3RpdHV0aW9uLCAvLy9cbiAgICAgICAgICAgICAgcmVwbGFjZW1lbnRGcmFtZSA9IGZyYW1lU3Vic3RpdHV0aW9uLmdldFJlcGxhY2VtZW50RnJhbWUoKTtcblxuICAgICAgICBmcmFtZSA9IHJlcGxhY2VtZW50RnJhbWU7IC8vL1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmcmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0YXRlbWVudEZyb21TdGF0ZW1lbnRBbmRTdWJzdGl0dXRpb25zKHN0YXRlbWVudCwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCkge1xuICBpZiAoc3RhdGVtZW50ICE9PSBudWxsKSB7XG4gICAgY29uc3Qgc3RhdGVtZW50Tm9kZSA9IHN0YXRlbWVudC5nZXROb2RlKCksXG4gICAgICAgICAgc3RhdGVtZW50U2luZ3VsYXIgPSBzdGF0ZW1lbnQuaXNTaW5ndWxhcigpO1xuXG4gICAgc3RhdGVtZW50ID0gbnVsbDtcblxuICAgIGlmIChzdGF0ZW1lbnRTaW5ndWxhcikge1xuICAgICAgbGV0IHN1YnN0aXR1dGlvbiA9IG51bGw7XG5cbiAgICAgIGNvbnN0IHN1YnN0aXR1dGlvbk5vZGUgPSBzdGF0ZW1lbnROb2RlLmdldFN1YnN0aXR1dGlvbk5vZGUoKTtcblxuICAgICAgaWYgKHN1YnN0aXR1dGlvbk5vZGUgIT09IG51bGwpIHtcbiAgICAgICAgbGV0IGNvbnRleHQgPSBnZW5lcmFsQ29udGV4dDsgLy8vXG5cbiAgICAgICAgZ2VuZXJhbENvbnRleHQgPSBzcGVjaWZpY0NvbnRleHQ7IC8vL1xuXG4gICAgICAgIHNwZWNpZmljQ29udGV4dCA9IGNvbnRleHQ7ICAvLy9cblxuICAgICAgICBzdWJzdGl0dXRpb24gPSBzcGVjaWZpY0NvbnRleHQuZmluZFN1YnN0aXR1dGlvbkJ5U3Vic3RpdHV0aW9uTm9kZShzdWJzdGl0dXRpb25Ob2RlKTtcblxuICAgICAgICBjb250ZXh0ID0gZ2VuZXJhbENvbnRleHQ7IC8vL1xuXG4gICAgICAgIGdlbmVyYWxDb250ZXh0ID0gc3BlY2lmaWNDb250ZXh0OyAvLy9cblxuICAgICAgICBzcGVjaWZpY0NvbnRleHQgPSBjb250ZXh0OyAgLy8vXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG1ldGF2YXJpYWJsZU5hbWUgPSBzdGF0ZW1lbnROb2RlLmdldE1ldGF2YXJpYWJsZU5hbWUoKTtcblxuICAgICAgc3Vic3RpdHV0aW9uID0gKHN1YnN0aXR1dGlvbiAhPT0gbnVsbCkgP1xuICAgICAgICAgICAgICAgICAgICAgICBzcGVjaWZpY0NvbnRleHQuZmluZFN1YnN0aXR1dGlvbkJ5TWV0YXZhcmlhYmxlTmFtZUFuZFN1YnN0aXR1dGlvbihtZXRhdmFyaWFibGVOYW1lLCBzdWJzdGl0dXRpb24pIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICBzcGVjaWZpY0NvbnRleHQuZmluZFN1YnN0aXR1dGlvbkJ5TWV0YXZhcmlhYmxlTmFtZShtZXRhdmFyaWFibGVOYW1lKTtcblxuICAgICAgaWYgKHN1YnN0aXR1dGlvbiAhPT0gbnVsbCkge1xuICAgICAgICBjb25zdCBzdGF0ZW1lbnRTdWJzdGl0dXRpb24gPSBzdWJzdGl0dXRpb24sIC8vL1xuICAgICAgICAgICAgICByZXBsYWNlbWVudFN0YXRlbWVudCA9IHN0YXRlbWVudFN1YnN0aXR1dGlvbi5nZXRSZXBsYWNlbWVudFN0YXRlbWVudCgpO1xuXG4gICAgICAgIHN0YXRlbWVudCA9IHJlcGxhY2VtZW50U3RhdGVtZW50OyAvLy9cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gc3RhdGVtZW50O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWV0YXZhcmlhYmxlTmFtZXNGcm9tU3Vic3RpdHV0aW9ucyhzdWJzdGl0dXRpb25zKSB7XG4gIGNvbnN0IG1ldGF2YXJpYWJsZU5hbWVzID0gW107XG5cbiAgc3Vic3RpdHV0aW9ucy5mb3JFYWNoKChzdWJzdGl0dXRpb24pID0+IHtcbiAgICBjb25zdCBtZXRhdmFyaWFibGVOYW1lID0gc3Vic3RpdHV0aW9uLmdldE1ldGF2YXJpYWJsZU5hbWUoKTtcblxuICAgIGlmIChtZXRhdmFyaWFibGVOYW1lICE9PSBudWxsKSB7XG4gICAgICBtZXRhdmFyaWFibGVOYW1lcy5wdXNoKG1ldGF2YXJpYWJsZU5hbWUpO1xuICAgIH1cbiAgfSk7XG5cbiAgY29tcHJlc3MobWV0YXZhcmlhYmxlTmFtZXMsIChtZXRhdmFyaWFibGVOYW1lQSwgbWV0YXZhcmlhYmxlTmFtZUIpID0+IHtcbiAgICBpZiAobWV0YXZhcmlhYmxlTmFtZUEgIT09IG1ldGF2YXJpYWJsZU5hbWVCKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiBtZXRhdmFyaWFibGVOYW1lcztcbn1cbiJdLCJuYW1lcyI6WyJmcmFtZUZyb21GcmFtZUFuZFN1YnN0aXR1dGlvbnMiLCJtZXRhdmFyaWFibGVOYW1lc0Zyb21TdWJzdGl0dXRpb25zIiwic3RhdGVtZW50RnJvbVN0YXRlbWVudEFuZFN1YnN0aXR1dGlvbnMiLCJ0ZXJtRnJvbVRlcm1BbmRTdWJzdGl0dXRpb25zIiwiY29tcHJlc3MiLCJhcnJheVV0aWxpdGllcyIsInRlcm0iLCJnZW5lcmFsQ29udGV4dCIsInNwZWNpZmljQ29udGV4dCIsInRlcm1Ob2RlIiwiZ2V0Tm9kZSIsInRlcm1TaW5ndWxhciIsImlzU2luZ3VsYXIiLCJ2YXJpYWJsZUlkZW50aWZpZXIiLCJnZXRWYXJpYWJsZUlkZW50aWZpZXIiLCJzdWJzdGl0dXRpb24iLCJmaW5kU3Vic3RpdHV0aW9uQnlWYXJpYWJsZUlkZW50aWZpZXIiLCJ0ZXJtU3Vic3RpdHV0aW9uIiwicmVwbGFjZW1lbnRUZXJtIiwiZ2V0UmVwbGFjZW1lbnRUZXJtIiwiZnJhbWUiLCJmcmFtZU5vZGUiLCJmcmFtZVNpbmd1bGFyIiwibWV0YXZhcmlhYmxlTmFtZSIsImdldE1ldGF2YXJpYWJsZU5hbWUiLCJmaW5kU3Vic3RpdHV0aW9uQnlNZXRhdmFyaWFibGVOYW1lIiwiZnJhbWVTdWJzdGl0dXRpb24iLCJyZXBsYWNlbWVudEZyYW1lIiwiZ2V0UmVwbGFjZW1lbnRGcmFtZSIsInN0YXRlbWVudCIsInN0YXRlbWVudE5vZGUiLCJzdGF0ZW1lbnRTaW5ndWxhciIsInN1YnN0aXR1dGlvbk5vZGUiLCJnZXRTdWJzdGl0dXRpb25Ob2RlIiwiY29udGV4dCIsImZpbmRTdWJzdGl0dXRpb25CeVN1YnN0aXR1dGlvbk5vZGUiLCJmaW5kU3Vic3RpdHV0aW9uQnlNZXRhdmFyaWFibGVOYW1lQW5kU3Vic3RpdHV0aW9uIiwic3RhdGVtZW50U3Vic3RpdHV0aW9uIiwicmVwbGFjZW1lbnRTdGF0ZW1lbnQiLCJnZXRSZXBsYWNlbWVudFN0YXRlbWVudCIsInN1YnN0aXR1dGlvbnMiLCJtZXRhdmFyaWFibGVOYW1lcyIsImZvckVhY2giLCJwdXNoIiwibWV0YXZhcmlhYmxlTmFtZUEiLCJtZXRhdmFyaWFibGVOYW1lQiJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7O1FBNkJnQkE7ZUFBQUE7O1FBcUVBQztlQUFBQTs7UUE5Q0FDO2VBQUFBOztR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