@1money/component-ui 0.0.99 → 0.0.100

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 (218) hide show
  1. package/es/business/Dialog/VerificationDialog/VerificationDialog.js +38 -39
  2. package/es/business/Dialog/variants/LoadingDialog.js +17 -17
  3. package/es/business/Filter/DateRange/DateRange.js +14 -14
  4. package/es/business/Select/Country/CountrySelect.js +71 -40
  5. package/es/business/Select/Country/interface.d.ts +31 -15
  6. package/es/business/Select/Country/style/CountrySelect.css +33 -0
  7. package/es/business/Select/Country/style/css.js +2 -0
  8. package/es/business/Select/Country/style/index.d.ts +1 -0
  9. package/es/business/Select/Country/style/index.js +2 -0
  10. package/es/business/shared/formCore/useSubmitAction.js +19 -19
  11. package/es/components/Icons/Illustrations.js +15 -15
  12. package/es/components/Notification/NotificationStatic.js +27 -32
  13. package/es/components/ProForm/ProForm.js +47 -51
  14. package/es/components/ProForm/Submitter.js +8 -8
  15. package/es/components/ProForm/core/hooks/useForm.js +77 -88
  16. package/es/components/ProForm/core/runRules.js +56 -61
  17. package/es/components/ProForm/hooks/useFieldRequest.js +19 -19
  18. package/es/components/ProForm/layouts/useOverlayForm.js +9 -11
  19. package/es/components/ProTable/ProTable.js +8 -8
  20. package/es/components/ProTable/useFetchData.js +23 -23
  21. package/es/components/Select/SelectOptionContent.js +8 -1
  22. package/es/components/Select/interface.d.ts +9 -0
  23. package/es/components/Select/interface.js +1 -1
  24. package/es/components/Select/style/Select.css +7 -0
  25. package/es/components/Spinner/Spinner.js +11 -11
  26. package/es/components/Table/internal/kernel/Table.js +8 -8
  27. package/es/index.css +1 -1
  28. package/lib/business/Dialog/BaseDialog/BaseDialog.js +2 -3
  29. package/lib/business/Dialog/Descriptions/Descriptions.js +2 -3
  30. package/lib/business/Dialog/DetailsDialog/DetailsDialog.js +2 -3
  31. package/lib/business/Dialog/FormDialog/FormDialog.js +2 -3
  32. package/lib/business/Dialog/VerificationDialog/VerificationDialog.js +39 -41
  33. package/lib/business/Dialog/variants/LoadingDialog.js +18 -19
  34. package/lib/business/FieldList/index.js +2 -3
  35. package/lib/business/Filter/DateRange/DateRange.js +14 -14
  36. package/lib/business/Select/Country/CountrySelect.js +71 -40
  37. package/lib/business/Select/Country/interface.d.ts +31 -15
  38. package/lib/business/Select/Country/style/CountrySelect.css +33 -0
  39. package/lib/business/Select/Country/style/css.js +4 -0
  40. package/lib/business/Select/Country/style/index.d.ts +1 -0
  41. package/lib/business/Select/Country/style/index.js +4 -0
  42. package/lib/business/shared/formCore/useSubmitAction.js +19 -19
  43. package/lib/components/Accordion/Accordion.js +2 -3
  44. package/lib/components/Accordion/index.js +2 -3
  45. package/lib/components/ActionBar/ActionBar.js +2 -3
  46. package/lib/components/Alert/Alert.js +2 -3
  47. package/lib/components/Alert/index.js +2 -3
  48. package/lib/components/Button/Button.js +2 -3
  49. package/lib/components/Button/index.js +2 -3
  50. package/lib/components/Calendar/Calendar.js +2 -3
  51. package/lib/components/Calendar/index.js +2 -3
  52. package/lib/components/Carousel/Carousel.js +2 -3
  53. package/lib/components/Carousel/index.js +2 -3
  54. package/lib/components/Cell/Cell.js +2 -3
  55. package/lib/components/Cell/index.js +2 -3
  56. package/lib/components/Checkbox/BaseCheckbox.js +2 -3
  57. package/lib/components/Checkbox/Checkbox.js +2 -3
  58. package/lib/components/Checkbox/CheckboxGroup.js +2 -3
  59. package/lib/components/Checkbox/index.js +2 -3
  60. package/lib/components/CoachMark/CoachMark.js +2 -3
  61. package/lib/components/CoachMark/index.js +2 -3
  62. package/lib/components/Copy/Clipboard.js +2 -3
  63. package/lib/components/Copy/Copy.js +2 -3
  64. package/lib/components/Copy/index.js +2 -3
  65. package/lib/components/Dialog/index.js +2 -3
  66. package/lib/components/Divider/Divider.js +2 -3
  67. package/lib/components/Drawer/Drawer.js +2 -3
  68. package/lib/components/Empty/Empty.js +2 -3
  69. package/lib/components/Empty/index.js +2 -3
  70. package/lib/components/Flex/Flex.js +2 -3
  71. package/lib/components/FormLayout/FormLayout.js +2 -3
  72. package/lib/components/Grid/Col.js +2 -3
  73. package/lib/components/Grid/Row.js +2 -3
  74. package/lib/components/Icons/Illustrations.js +15 -15
  75. package/lib/components/Icons/Logo.js +2 -3
  76. package/lib/components/Icons/Wrapper.js +2 -3
  77. package/lib/components/Icons/index.js +2 -3
  78. package/lib/components/Input/Amount/Amount.js +2 -3
  79. package/lib/components/Input/Amount/index.js +2 -3
  80. package/lib/components/Input/FieldShell/FieldShell.js +2 -3
  81. package/lib/components/Input/FieldShell/index.js +2 -3
  82. package/lib/components/Input/Input/Input.js +2 -3
  83. package/lib/components/Input/Input/index.js +2 -3
  84. package/lib/components/Input/Mask/Mask.js +2 -3
  85. package/lib/components/Input/Mask/index.js +2 -3
  86. package/lib/components/Input/OTP/index.js +2 -3
  87. package/lib/components/Input/Password/Password.js +2 -3
  88. package/lib/components/Input/Password/index.js +2 -3
  89. package/lib/components/Input/Search/Search.js +2 -3
  90. package/lib/components/Input/Search/index.js +2 -3
  91. package/lib/components/Input/TextArea/TextArea.js +2 -3
  92. package/lib/components/Input/TextArea/index.js +2 -3
  93. package/lib/components/Input/Trade/Trade.js +2 -3
  94. package/lib/components/Input/Trade/index.js +2 -3
  95. package/lib/components/Input/index.js +2 -3
  96. package/lib/components/Link/Link.js +2 -3
  97. package/lib/components/Link/index.js +2 -3
  98. package/lib/components/Navigation/Nav.js +2 -3
  99. package/lib/components/Navigation/Navigation.js +2 -3
  100. package/lib/components/Navigation/NavigationStepper.js +2 -3
  101. package/lib/components/Navigation/index.js +2 -3
  102. package/lib/components/Notification/Notification.js +2 -3
  103. package/lib/components/Notification/NotificationStatic.js +28 -34
  104. package/lib/components/Notification/index.js +2 -3
  105. package/lib/components/Pagination/Pagination.js +2 -3
  106. package/lib/components/Pagination/index.js +2 -3
  107. package/lib/components/PanelLayout/PanelLayout.js +2 -3
  108. package/lib/components/Popconfirm/Popconfirm.js +2 -3
  109. package/lib/components/Popconfirm/index.js +2 -3
  110. package/lib/components/Portal/index.js +2 -3
  111. package/lib/components/ProForm/ProForm.js +48 -53
  112. package/lib/components/ProForm/ProFormDependency.js +2 -3
  113. package/lib/components/ProForm/ProFormItem.js +2 -3
  114. package/lib/components/ProForm/Submitter.js +8 -8
  115. package/lib/components/ProForm/core/devWarning.js +2 -3
  116. package/lib/components/ProForm/core/hooks/useForm.js +78 -90
  117. package/lib/components/ProForm/core/runRules.js +56 -61
  118. package/lib/components/ProForm/core/useFormItem.js +2 -3
  119. package/lib/components/ProForm/fields/ProFormFieldSet.js +2 -3
  120. package/lib/components/ProForm/hooks/useFieldRequest.js +19 -19
  121. package/lib/components/ProForm/layouts/QueryFilter.js +2 -3
  122. package/lib/components/ProForm/layouts/useOverlayForm.js +10 -13
  123. package/lib/components/ProTable/ProTable.js +8 -8
  124. package/lib/components/ProTable/index.js +2 -3
  125. package/lib/components/ProTable/useFetchData.js +23 -23
  126. package/lib/components/Progress/Progress.js +2 -3
  127. package/lib/components/Progress/index.js +2 -3
  128. package/lib/components/Radio/Radio.js +2 -3
  129. package/lib/components/Radio/RadioGroup.js +2 -3
  130. package/lib/components/Radio/index.js +2 -3
  131. package/lib/components/ResizeObserver/Collection.js +2 -3
  132. package/lib/components/ResizeObserver/ResizeObserver.js +2 -3
  133. package/lib/components/ResizeObserver/SingleObserver/index.js +2 -3
  134. package/lib/components/ResizeObserver/useResizeObserver.js +2 -3
  135. package/lib/components/ResizeObserver/utils/reactUtil.js +2 -3
  136. package/lib/components/Segment/Segment.js +2 -3
  137. package/lib/components/Segment/index.js +2 -3
  138. package/lib/components/Select/Select.js +2 -3
  139. package/lib/components/Select/SelectCustom.js +2 -3
  140. package/lib/components/Select/SelectOptionContent.js +8 -1
  141. package/lib/components/Select/interface.d.ts +9 -0
  142. package/lib/components/Select/interface.js +1 -1
  143. package/lib/components/Select/style/Select.css +7 -0
  144. package/lib/components/Skeleton/Skeleton.js +2 -3
  145. package/lib/components/Skeleton/index.js +2 -3
  146. package/lib/components/Slider/Slider.js +2 -3
  147. package/lib/components/Slider/index.js +2 -3
  148. package/lib/components/Space/Space.js +2 -3
  149. package/lib/components/Spinner/Spinner.js +12 -13
  150. package/lib/components/Spinner/index.js +2 -3
  151. package/lib/components/Step/Step.js +2 -3
  152. package/lib/components/Step/index.js +2 -3
  153. package/lib/components/Switch/Switch.js +2 -3
  154. package/lib/components/Switch/index.js +2 -3
  155. package/lib/components/Table/core/useTableSetup.js +2 -3
  156. package/lib/components/Table/internal/index.js +2 -3
  157. package/lib/components/Table/internal/kernel/Body/BodyRow.js +2 -3
  158. package/lib/components/Table/internal/kernel/Body/ExpandedRow.js +2 -3
  159. package/lib/components/Table/internal/kernel/Body/MeasureCell.js +2 -3
  160. package/lib/components/Table/internal/kernel/Body/MeasureRow.js +2 -3
  161. package/lib/components/Table/internal/kernel/Body/index.js +2 -3
  162. package/lib/components/Table/internal/kernel/Cell/index.js +2 -3
  163. package/lib/components/Table/internal/kernel/Cell/useCellRender.js +2 -3
  164. package/lib/components/Table/internal/kernel/ColGroup.js +2 -3
  165. package/lib/components/Table/internal/kernel/FixedHolder/index.js +2 -3
  166. package/lib/components/Table/internal/kernel/Footer/Cell.js +2 -3
  167. package/lib/components/Table/internal/kernel/Footer/Row.js +2 -3
  168. package/lib/components/Table/internal/kernel/Footer/SummaryContext.js +2 -3
  169. package/lib/components/Table/internal/kernel/Footer/index.js +2 -3
  170. package/lib/components/Table/internal/kernel/Header/Header.js +2 -3
  171. package/lib/components/Table/internal/kernel/Header/HeaderRow.js +2 -3
  172. package/lib/components/Table/internal/kernel/Panel/index.js +2 -3
  173. package/lib/components/Table/internal/kernel/Table.js +9 -10
  174. package/lib/components/Table/internal/kernel/VirtualTable/BodyGrid.js +2 -3
  175. package/lib/components/Table/internal/kernel/VirtualTable/BodyLine.js +2 -3
  176. package/lib/components/Table/internal/kernel/VirtualTable/VirtualCell.js +2 -3
  177. package/lib/components/Table/internal/kernel/VirtualTable/index.js +2 -3
  178. package/lib/components/Table/internal/kernel/context/PerfContext.js +2 -3
  179. package/lib/components/Table/internal/kernel/hooks/useColumns/index.js +2 -3
  180. package/lib/components/Table/internal/kernel/hooks/useColumns/useWidthColumns.js +2 -3
  181. package/lib/components/Table/internal/kernel/hooks/useExpand.js +2 -3
  182. package/lib/components/Table/internal/kernel/hooks/useFixedInfo.js +2 -3
  183. package/lib/components/Table/internal/kernel/hooks/useFlattenRecords.js +2 -3
  184. package/lib/components/Table/internal/kernel/hooks/useHover.js +2 -3
  185. package/lib/components/Table/internal/kernel/hooks/useRenderTimes.js +2 -3
  186. package/lib/components/Table/internal/kernel/hooks/useSticky.js +2 -3
  187. package/lib/components/Table/internal/kernel/index.js +2 -3
  188. package/lib/components/Table/internal/kernel/selector-context/Immutable.js +2 -3
  189. package/lib/components/Table/internal/kernel/selector-context/context.js +2 -3
  190. package/lib/components/Table/internal/kernel/stickyScrollBar.js +2 -3
  191. package/lib/components/Table/internal/kernel/utils/expandUtil.js +2 -3
  192. package/lib/components/Table/internal/kernel/utils/useMemo.js +2 -3
  193. package/lib/components/Tabs/Tabs.js +2 -3
  194. package/lib/components/Tabs/index.js +2 -3
  195. package/lib/components/Tag/Tag.js +2 -3
  196. package/lib/components/Tag/index.js +2 -3
  197. package/lib/components/Tooltip/Tooltip.js +2 -3
  198. package/lib/components/Tooltip/index.js +2 -3
  199. package/lib/components/Tour/index.js +2 -3
  200. package/lib/components/Trigger/Trigger.js +2 -3
  201. package/lib/components/Typography/index.js +2 -3
  202. package/lib/components/Typography/utils.js +2 -3
  203. package/lib/components/Upload/Upload.js +2 -3
  204. package/lib/components/Upload/UploadFileBar.js +2 -3
  205. package/lib/components/Upload/index.js +2 -3
  206. package/lib/components/VirtualList/Filler.js +2 -3
  207. package/lib/components/VirtualList/Item.js +2 -3
  208. package/lib/components/VirtualList/ScrollBar.js +2 -3
  209. package/lib/components/VirtualList/VirtualList.js +2 -3
  210. package/lib/components/VirtualList/hooks/useChildren.js +2 -3
  211. package/lib/components/VirtualList/hooks/useDiffItem.js +2 -3
  212. package/lib/components/VirtualList/hooks/useGetSize.js +2 -3
  213. package/lib/components/VirtualList/hooks/useHeights.js +2 -3
  214. package/lib/components/VirtualList/hooks/useScrollDrag.js +2 -3
  215. package/lib/components/VirtualList/hooks/useScrollTo.js +2 -3
  216. package/lib/index.css +1 -1
  217. package/lib/stories/docs/ComponentDocsPage.js +2 -3
  218. package/package.json +23 -17
@@ -2,7 +2,8 @@ import _toConsumableArray from "@babel/runtime/helpers/esm/toConsumableArray";
2
2
  import _typeof from "@babel/runtime/helpers/esm/typeof";
3
3
  import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray";
4
4
  import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
5
- import _regeneratorRuntime from "@babel/runtime/regenerator";
5
+ function _regenerator() { /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */ var e, t, r = "function" == typeof Symbol ? Symbol : {}, n = r.iterator || "@@iterator", o = r.toStringTag || "@@toStringTag"; function i(r, n, o, i) { var c = n && n.prototype instanceof Generator ? n : Generator, u = Object.create(c.prototype); return _regeneratorDefine2(u, "_invoke", function (r, n, o) { var i, c, u, f = 0, p = o || [], y = !1, G = { p: 0, n: 0, v: e, a: d, f: d.bind(e, 4), d: function d(t, r) { return i = t, c = 0, u = e, G.n = r, a; } }; function d(r, n) { for (c = r, u = n, t = 0; !y && f && !o && t < p.length; t++) { var o, i = p[t], d = G.p, l = i[2]; r > 3 ? (o = l === n) && (u = i[(c = i[4]) ? 5 : (c = 3, 3)], i[4] = i[5] = e) : i[0] <= d && ((o = r < 2 && d < i[1]) ? (c = 0, G.v = n, G.n = i[1]) : d < l && (o = r < 3 || i[0] > n || n > l) && (i[4] = r, i[5] = n, G.n = l, c = 0)); } if (o || r > 1) return a; throw y = !0, n; } return function (o, p, l) { if (f > 1) throw TypeError("Generator is already running"); for (y && 1 === p && d(p, l), c = p, u = l; (t = c < 2 ? e : u) || !y;) { i || (c ? c < 3 ? (c > 1 && (G.n = -1), d(c, u)) : G.n = u : G.v = u); try { if (f = 2, i) { if (c || (o = "next"), t = i[o]) { if (!(t = t.call(i, u))) throw TypeError("iterator result is not an object"); if (!t.done) return t; u = t.value, c < 2 && (c = 0); } else 1 === c && (t = i["return"]) && t.call(i), c < 2 && (u = TypeError("The iterator does not provide a '" + o + "' method"), c = 1); i = e; } else if ((t = (y = G.n < 0) ? u : r.call(n, G)) !== a) break; } catch (t) { i = e, c = 1, u = t; } finally { f = 1; } } return { value: t, done: y }; }; }(r, o, i), !0), u; } var a = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} t = Object.getPrototypeOf; var c = [][n] ? t(t([][n]())) : (_regeneratorDefine2(t = {}, n, function () { return this; }), t), u = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(c); function f(e) { return Object.setPrototypeOf ? Object.setPrototypeOf(e, GeneratorFunctionPrototype) : (e.__proto__ = GeneratorFunctionPrototype, _regeneratorDefine2(e, o, "GeneratorFunction")), e.prototype = Object.create(u), e; } return GeneratorFunction.prototype = GeneratorFunctionPrototype, _regeneratorDefine2(u, "constructor", GeneratorFunctionPrototype), _regeneratorDefine2(GeneratorFunctionPrototype, "constructor", GeneratorFunction), GeneratorFunction.displayName = "GeneratorFunction", _regeneratorDefine2(GeneratorFunctionPrototype, o, "GeneratorFunction"), _regeneratorDefine2(u), _regeneratorDefine2(u, o, "Generator"), _regeneratorDefine2(u, n, function () { return this; }), _regeneratorDefine2(u, "toString", function () { return "[object Generator]"; }), (_regenerator = function _regenerator() { return { w: i, m: f }; })(); }
6
+ function _regeneratorDefine2(e, r, n, t) { var i = Object.defineProperty; try { i({}, "", {}); } catch (e) { i = 0; } _regeneratorDefine2 = function _regeneratorDefine(e, r, n, t) { function o(r, n) { _regeneratorDefine2(e, r, function (e) { return this._invoke(r, n, e); }); } r ? i ? i(e, r, { value: n, enumerable: !t, configurable: !t, writable: !t }) : e[r] = n : (o("next", 0), o("throw", 1), o("return", 2)); }, _regeneratorDefine2(e, r, n, t); }
6
7
  function _createForOfIteratorHelper(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; }
7
8
  function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
8
9
  function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
@@ -175,16 +176,16 @@ export var useForm = function useForm() {
175
176
  // Async field validation – each rule is processed exactly once
176
177
  // ---------------------------------------------------------------------------
177
178
  var validateFieldAsync = useMemoizedFn(function (name, value, rules) {
178
- return __awaiter(void 0, void 0, void 0, /*#__PURE__*/_regeneratorRuntime.mark(function _callee() {
179
+ return __awaiter(void 0, void 0, void 0, /*#__PURE__*/_regenerator().m(function _callee() {
179
180
  var _a, epoch, values, resolved, flagged, outcome, _yield$runRulesAsync, error, warning, isCurrent, clearFlags, _t;
180
- return _regeneratorRuntime.wrap(function (_context) {
181
- while (1) switch (_context.prev = _context.next) {
181
+ return _regenerator().w(function (_context) {
182
+ while (1) switch (_context.p = _context.n) {
182
183
  case 0:
183
184
  if (!(!rules || rules.length === 0)) {
184
- _context.next = 1;
185
+ _context.n = 1;
185
186
  break;
186
187
  }
187
- return _context.abrupt("return", {
188
+ return _context.a(2, {
188
189
  isValid: true,
189
190
  error: null
190
191
  });
@@ -206,11 +207,11 @@ export var useForm = function useForm() {
206
207
  error: null,
207
208
  warning: null
208
209
  };
209
- _context.prev = 2;
210
- _context.next = 3;
210
+ _context.p = 2;
211
+ _context.n = 3;
211
212
  return runRulesAsync(name, value, values, resolved, formCore.getRuleContextInstance());
212
213
  case 3:
213
- _yield$runRulesAsync = _context.sent;
214
+ _yield$runRulesAsync = _context.v;
214
215
  error = _yield$runRulesAsync.error;
215
216
  warning = _yield$runRulesAsync.warning;
216
217
  outcome = {
@@ -218,11 +219,11 @@ export var useForm = function useForm() {
218
219
  error: error,
219
220
  warning: warning
220
221
  };
221
- _context.next = 5;
222
+ _context.n = 5;
222
223
  break;
223
224
  case 4:
224
- _context.prev = 4;
225
- _t = _context["catch"](2);
225
+ _context.p = 4;
226
+ _t = _context.v;
226
227
  // The engine contains rule-level throws itself; this is a last-resort
227
228
  // net so an unexpected failure surfaces as a field error instead of
228
229
  // leaving the field marked valid.
@@ -232,21 +233,18 @@ export var useForm = function useForm() {
232
233
  warning: null
233
234
  };
234
235
  case 5:
235
- _context.prev = 5;
236
+ _context.p = 5;
236
237
  isCurrent = formCore.isValidationRunCurrent(name, epoch);
237
238
  clearFlags = flagged.filter(function (flaggedName) {
238
239
  return lastAsyncEpochRef.current[flaggedName] === epoch;
239
240
  });
240
241
  commitRuleOutcomes(isCurrent ? [outcome] : [], clearFlags);
241
- return _context.finish(5);
242
+ return _context.f(5);
242
243
  case 6:
243
- return _context.abrupt("return", {
244
+ return _context.a(2, {
244
245
  isValid: outcome.error === null,
245
246
  error: outcome.error
246
247
  });
247
- case 7:
248
- case "end":
249
- return _context.stop();
250
248
  }
251
249
  }, _callee, null, [[2, 4, 5, 6]]);
252
250
  }));
@@ -255,10 +253,10 @@ export var useForm = function useForm() {
255
253
  // Async field blur handler
256
254
  // ---------------------------------------------------------------------------
257
255
  var handleFieldBlur = useEventCallback(function (name, fieldTrigger) {
258
- return __awaiter(void 0, void 0, void 0, /*#__PURE__*/_regeneratorRuntime.mark(function _callee2() {
256
+ return __awaiter(void 0, void 0, void 0, /*#__PURE__*/_regenerator().m(function _callee2() {
259
257
  var touched, rules, values, applicable;
260
- return _regeneratorRuntime.wrap(function (_context2) {
261
- while (1) switch (_context2.prev = _context2.next) {
258
+ return _regenerator().w(function (_context2) {
259
+ while (1) switch (_context2.n) {
262
260
  case 0:
263
261
  touched = store.getState().touched;
264
262
  if (!touched[name]) {
@@ -268,22 +266,21 @@ export var useForm = function useForm() {
268
266
  }
269
267
  rules = formCore.getFieldRules(name);
270
268
  if (rules) {
271
- _context2.next = 1;
269
+ _context2.n = 1;
272
270
  break;
273
271
  }
274
- return _context2.abrupt("return");
272
+ return _context2.a(2);
275
273
  case 1:
276
274
  values = formCore.getFieldsValue();
277
275
  applicable = filterRulesByTrigger(resolveRules(rules, values, formCore.getRuleContextInstance()), 'onBlur', normalizeTriggers(fieldTrigger, validateTrigger), name);
278
276
  if (!(applicable.length > 0)) {
279
- _context2.next = 2;
277
+ _context2.n = 2;
280
278
  break;
281
279
  }
282
- _context2.next = 2;
280
+ _context2.n = 2;
283
281
  return validateFieldAsync(name, resolveValue(values, name), applicable);
284
282
  case 2:
285
- case "end":
286
- return _context2.stop();
283
+ return _context2.a(2);
287
284
  }
288
285
  }, _callee2);
289
286
  }));
@@ -292,10 +289,10 @@ export var useForm = function useForm() {
292
289
  // Validate all fields async
293
290
  // ---------------------------------------------------------------------------
294
291
  var validateFieldsAsync = useMemoizedFn(function (nameList) {
295
- return __awaiter(void 0, void 0, void 0, /*#__PURE__*/_regeneratorRuntime.mark(function _callee4() {
292
+ return __awaiter(void 0, void 0, void 0, /*#__PURE__*/_regenerator().m(function _callee4() {
296
293
  var fieldsToValidate, fieldErrors, resolvedByField, epochByField, _iterator2, _step2, name, rules, flagged, outcomes, clearFlags;
297
- return _regeneratorRuntime.wrap(function (_context4) {
298
- while (1) switch (_context4.prev = _context4.next) {
294
+ return _regenerator().w(function (_context4) {
295
+ while (1) switch (_context4.p = _context4.n) {
299
296
  case 0:
300
297
  fieldsToValidate = nameList || Object.keys(formCore.fieldRules);
301
298
  fieldErrors = {}; // Resolve every field once up front: the flag decision needs resolved
@@ -331,35 +328,35 @@ export var useForm = function useForm() {
331
328
  lastAsyncEpochRef.current[name] = epochByField.get(name);
332
329
  });
333
330
  outcomes = [];
334
- _context4.prev = 1;
335
- _context4.next = 2;
331
+ _context4.p = 1;
332
+ _context4.n = 2;
336
333
  return Promise.all(fieldsToValidate.map(function (name) {
337
- return __awaiter(void 0, void 0, void 0, /*#__PURE__*/_regeneratorRuntime.mark(function _callee3() {
334
+ return __awaiter(void 0, void 0, void 0, /*#__PURE__*/_regenerator().m(function _callee3() {
338
335
  var _a, resolved, error, warning, _yield$runRulesAsync2, epoch, _t2;
339
- return _regeneratorRuntime.wrap(function (_context3) {
340
- while (1) switch (_context3.prev = _context3.next) {
336
+ return _regenerator().w(function (_context3) {
337
+ while (1) switch (_context3.p = _context3.n) {
341
338
  case 0:
342
339
  resolved = resolvedByField.get(name);
343
340
  if (resolved) {
344
- _context3.next = 1;
341
+ _context3.n = 1;
345
342
  break;
346
343
  }
347
- return _context3.abrupt("return");
344
+ return _context3.a(2);
348
345
  case 1:
349
346
  error = null;
350
347
  warning = null;
351
- _context3.prev = 2;
352
- _context3.next = 3;
348
+ _context3.p = 2;
349
+ _context3.n = 3;
353
350
  return runRulesAsync(name, resolveValue(formCore.getFieldsValue(), name), formCore.getFieldsValue(), resolved, formCore.getRuleContextInstance());
354
351
  case 3:
355
- _yield$runRulesAsync2 = _context3.sent;
352
+ _yield$runRulesAsync2 = _context3.v;
356
353
  error = _yield$runRulesAsync2.error;
357
354
  warning = _yield$runRulesAsync2.warning;
358
- _context3.next = 5;
355
+ _context3.n = 5;
359
356
  break;
360
357
  case 4:
361
- _context3.prev = 4;
362
- _t2 = _context3["catch"](2);
358
+ _context3.p = 4;
359
+ _t2 = _context3.v;
363
360
  // Last-resort net (see validateFieldAsync) — keep the normal
364
361
  // constructed-error flow so onFinishFailed gets a real payload.
365
362
  error = (_a = coerceFailureReason(_t2)) !== null && _a !== void 0 ? _a : 'Validation failed';
@@ -379,39 +376,35 @@ export var useForm = function useForm() {
379
376
  fieldErrors[name] = error;
380
377
  }
381
378
  case 6:
382
- case "end":
383
- return _context3.stop();
379
+ return _context3.a(2);
384
380
  }
385
381
  }, _callee3, null, [[2, 4]]);
386
382
  }));
387
383
  }));
388
384
  case 2:
389
- _context4.prev = 2;
385
+ _context4.p = 2;
390
386
  clearFlags = flagged.filter(function (name) {
391
387
  return lastAsyncEpochRef.current[name] === epochByField.get(name);
392
388
  });
393
389
  commitRuleOutcomes(outcomes, clearFlags);
394
- return _context4.finish(2);
390
+ return _context4.f(2);
395
391
  case 3:
396
392
  if (!(Object.keys(fieldErrors).length > 0)) {
397
- _context4.next = 4;
393
+ _context4.n = 4;
398
394
  break;
399
395
  }
400
396
  throw new FormValidationError(formCore.getFieldsValue(), fieldErrors);
401
397
  case 4:
402
398
  if (!nameList) {
403
- _context4.next = 5;
399
+ _context4.n = 5;
404
400
  break;
405
401
  }
406
- return _context4.abrupt("return", nameList.reduce(function (acc, name) {
402
+ return _context4.a(2, nameList.reduce(function (acc, name) {
407
403
  acc[name] = resolveValue(formCore.getFieldsValue(), name);
408
404
  return acc;
409
405
  }, {}));
410
406
  case 5:
411
- return _context4.abrupt("return", formCore.getFieldsValue());
412
- case 6:
413
- case "end":
414
- return _context4.stop();
407
+ return _context4.a(2, formCore.getFieldsValue());
415
408
  }
416
409
  }, _callee4, null, [[1,, 2, 3]]);
417
410
  }));
@@ -536,23 +529,23 @@ export var useForm = function useForm() {
536
529
  // handleSubmit / handleReset – for <form> event handlers
537
530
  // ---------------------------------------------------------------------------
538
531
  var handleSubmit = useEventCallback(function (e) {
539
- return __awaiter(void 0, void 0, void 0, /*#__PURE__*/_regeneratorRuntime.mark(function _callee5() {
532
+ return __awaiter(void 0, void 0, void 0, /*#__PURE__*/_regenerator().m(function _callee5() {
540
533
  var validatedValues, _t3;
541
- return _regeneratorRuntime.wrap(function (_context5) {
542
- while (1) switch (_context5.prev = _context5.next) {
534
+ return _regenerator().w(function (_context5) {
535
+ while (1) switch (_context5.p = _context5.n) {
543
536
  case 0:
544
537
  e === null || e === void 0 ? void 0 : e.preventDefault();
545
- _context5.prev = 1;
546
- _context5.next = 2;
538
+ _context5.p = 1;
539
+ _context5.n = 2;
547
540
  return validateFieldsAsync();
548
541
  case 2:
549
- validatedValues = _context5.sent;
542
+ validatedValues = _context5.v;
550
543
  onFinish === null || onFinish === void 0 ? void 0 : onFinish(validatedValues);
551
- _context5.next = 4;
544
+ _context5.n = 4;
552
545
  break;
553
546
  case 3:
554
- _context5.prev = 3;
555
- _t3 = _context5["catch"](1);
547
+ _context5.p = 3;
548
+ _t3 = _context5.v;
556
549
  // Only a VALIDATION failure reaches onFinishFailed — an exception out
557
550
  // of the consumer's own onFinish is not a validation result and is
558
551
  // surfaced instead of being misreported.
@@ -565,8 +558,7 @@ export var useForm = function useForm() {
565
558
  console.error('[ProForm] onFinish threw during submit:', _t3);
566
559
  }
567
560
  case 4:
568
- case "end":
569
- return _context5.stop();
561
+ return _context5.a(2);
570
562
  }
571
563
  }, _callee5, null, [[1, 3]]);
572
564
  }));
@@ -683,48 +675,45 @@ export var useForm = function useForm() {
683
675
  });
684
676
  });
685
677
  var submitWithValidation = useMemoizedFn(function (callback) {
686
- return __awaiter(void 0, void 0, void 0, /*#__PURE__*/_regeneratorRuntime.mark(function _callee6() {
678
+ return __awaiter(void 0, void 0, void 0, /*#__PURE__*/_regenerator().m(function _callee6() {
687
679
  var validatedValues, _t4, _t5;
688
- return _regeneratorRuntime.wrap(function (_context6) {
689
- while (1) switch (_context6.prev = _context6.next) {
680
+ return _regenerator().w(function (_context6) {
681
+ while (1) switch (_context6.p = _context6.n) {
690
682
  case 0:
691
- _context6.prev = 0;
692
- _context6.next = 1;
683
+ _context6.p = 0;
684
+ _context6.n = 1;
693
685
  return validateFieldsAsync();
694
686
  case 1:
695
- validatedValues = _context6.sent;
696
- _context6.next = 3;
687
+ validatedValues = _context6.v;
688
+ _context6.n = 3;
697
689
  break;
698
690
  case 2:
699
- _context6.prev = 2;
700
- _t4 = _context6["catch"](0);
701
- return _context6.abrupt("return", undefined);
691
+ _context6.p = 2;
692
+ _t4 = _context6.v;
693
+ return _context6.a(2, undefined);
702
694
  case 3:
703
695
  if (!callback) {
704
- _context6.next = 7;
696
+ _context6.n = 7;
705
697
  break;
706
698
  }
707
- _context6.prev = 4;
708
- _context6.next = 5;
699
+ _context6.p = 4;
700
+ _context6.n = 5;
709
701
  return callback(validatedValues);
710
702
  case 5:
711
- _context6.next = 7;
703
+ _context6.n = 7;
712
704
  break;
713
705
  case 6:
714
- _context6.prev = 6;
715
- _t5 = _context6["catch"](4);
706
+ _context6.p = 6;
707
+ _t5 = _context6.v;
716
708
  // A throwing callback is a consumer bug, not a validation failure —
717
709
  // surface it (mirroring rc-field-form's onFinish handling) instead
718
710
  // of swallowing it silently.
719
711
  console.error('[ProForm] submit callback threw:', _t5);
720
- return _context6.abrupt("return", undefined);
712
+ return _context6.a(2, undefined);
721
713
  case 7:
722
- return _context6.abrupt("return", validatedValues);
723
- case 8:
724
- case "end":
725
- return _context6.stop();
714
+ return _context6.a(2, validatedValues);
726
715
  }
727
- }, _callee6, null, [[0, 2], [4, 6]]);
716
+ }, _callee6, null, [[4, 6], [0, 2]]);
728
717
  }));
729
718
  });
730
719
  var formInstance = useMemo(function () {
@@ -796,4 +785,4 @@ export var useForm = function useForm() {
796
785
  };
797
786
  };
798
787
  export default useForm;
799
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNvbXBvbmVudHMvUHJvRm9ybS9jb3JlL2hvb2tzL3VzZUZvcm0uanMiLCJjb21wb25lbnRzL1Byb0Zvcm0vY29yZS9zcmMvY29tcG9uZW50cy9Qcm9Gb3JtL2NvcmUvaG9va3MvdXNlRm9ybS50cyJdLCJuYW1lcyI6WyJfX2F3YWl0ZXIiLCJ0aGlzQXJnIiwiX2FyZ3VtZW50cyIsIlAiLCJnZW5lcmF0b3IiLCJhZG9wdCIsInZhbHVlIiwicmVzb2x2ZSIsIlByb21pc2UiLCJyZWplY3QiLCJmdWxmaWxsZWQiLCJzdGVwIiwibmV4dCIsImUiLCJyZWplY3RlZCIsInJlc3VsdCIsImRvbmUiLCJ0aGVuIiwiYXBwbHkiLCJfX3Jlc3QiLCJzIiwidCIsInAiLCJPYmplY3QiLCJwcm90b3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJpbmRleE9mIiwiZ2V0T3duUHJvcGVydHlTeW1ib2xzIiwiaSIsImxlbmd0aCIsInByb3BlcnR5SXNFbnVtZXJhYmxlIiwidXNlTWVtbyIsInVzZUVmZmVjdCIsInVzZVJlZiIsIm1lbW8iLCJGcmFnbWVudCIsIlJlYWN0IiwidXNlRXZlbnRDYWxsYmFjayIsInVzZU1lbW9pemVkRm4iLCJ1c2VGb3JtQ29yZSIsInJlc29sdmVWYWx1ZSIsInNldE5lc3RlZFZhbHVlIiwiY29lcmNlRmFpbHVyZVJlYXNvbiIsImZpbHRlclJ1bGVzQnlUcmlnZ2VyIiwibm9ybWFsaXplVHJpZ2dlcnMiLCJyZXNvbHZlUnVsZXMiLCJydW5SdWxlc0FzeW5jIiwidXNlU3RvcmVTZWxlY3RvciIsInNoYWxsb3dFcXVhbEFycmF5cyIsInNhbWVWYWxpZGF0aW9uTm9kZSIsIkZvcm1WYWxpZGF0aW9uRXJyb3IiLCJhc1J1bGVBcnJheSIsInJ1bGUiLCJBcnJheSIsImlzQXJyYXkiLCJydWxlSGFzVmFsaWRhdG9yIiwidmFsaWRhdG9yIiwiZGVmYXVsdEZpZWxkIiwic29tZSIsImZpZWxkcyIsInZhbHVlcyIsInN1YiIsImhhc1Jlc29sdmVkVmFsaWRhdG9yIiwicmVzb2x2ZWQiLCJ1c2VGb3JtIiwiY29uZmlnIiwiYXJndW1lbnRzIiwidW5kZWZpbmVkIiwib25GaW5pc2giLCJvbkZpbmlzaEZhaWxlZCIsIm9uUmVzZXQiLCJfY29uZmlnJHZhbGlkYXRlVHJpZ2ciLCJ2YWxpZGF0ZVRyaWdnZXIiLCJmb3JtQ29yZSIsInN0b3JlIiwibGFzdEFzeW5jRXBvY2hSZWYiLCJtYXJrVmFsaWRhdGluZyIsIm5hbWVzIiwiYXNzaWduIiwiZ2V0U3RhdGUiLCJ2YWxpZGF0aW5nIiwiZm9yRWFjaCIsIm5hbWUiLCJzZXRTdGF0ZSIsImNvbW1pdFJ1bGVPdXRjb21lcyIsIm91dGNvbWVzIiwiY2xlYXJWYWxpZGF0aW5nIiwic3RhdGUiLCJlcnJvcnNDaGFuZ2VkIiwid2FybmluZ3NDaGFuZ2VkIiwibmV3RXJyb3JzIiwiZXJyb3JzIiwibmV3V2FybmluZ3MiLCJ3YXJuaW5ncyIsIl9pdGVyYXRvciIsIl9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyIiwiX3N0ZXAiLCJuIiwiX3N0ZXAkdmFsdWUiLCJlcnJvciIsIndhcm5pbmciLCJlcnIiLCJmIiwiZmxhZ3NUb0NsZWFyIiwiZmlsdGVyIiwicGF0Y2giLCJuZXdWYWxpZGF0aW5nIiwia2V5cyIsInZhbGlkYXRlRmllbGRBc3luYyIsInJ1bGVzIiwiX3JlZ2VuZXJhdG9yUnVudGltZSIsIm1hcmsiLCJfY2FsbGVlIiwiX2EiLCJlcG9jaCIsImZsYWdnZWQiLCJvdXRjb21lIiwiX3lpZWxkJHJ1blJ1bGVzQXN5bmMiLCJpc0N1cnJlbnQiLCJjbGVhckZsYWdzIiwiX3QiLCJ3cmFwIiwiX2NvbnRleHQiLCJwcmV2IiwiYWJydXB0IiwiaXNWYWxpZCIsImJlZ2luVmFsaWRhdGlvblJ1biIsImdldEZpZWxkc1ZhbHVlIiwiZ2V0UnVsZUNvbnRleHRJbnN0YW5jZSIsImZsYWdnZWROYW1lIiwiY3VycmVudCIsInNlbnQiLCJpc1ZhbGlkYXRpb25SdW5DdXJyZW50IiwiZmluaXNoIiwic3RvcCIsImhhbmRsZUZpZWxkQmx1ciIsImZpZWxkVHJpZ2dlciIsIl9jYWxsZWUyIiwidG91Y2hlZCIsImFwcGxpY2FibGUiLCJfY29udGV4dDIiLCJfZGVmaW5lUHJvcGVydHkiLCJnZXRGaWVsZFJ1bGVzIiwidmFsaWRhdGVGaWVsZHNBc3luYyIsIm5hbWVMaXN0IiwiX2NhbGxlZTQiLCJmaWVsZHNUb1ZhbGlkYXRlIiwiZmllbGRFcnJvcnMiLCJyZXNvbHZlZEJ5RmllbGQiLCJlcG9jaEJ5RmllbGQiLCJfaXRlcmF0b3IyIiwiX3N0ZXAyIiwiX2NvbnRleHQ0IiwiZmllbGRSdWxlcyIsIk1hcCIsInNldCIsImdldCIsImFsbCIsIm1hcCIsIl9jYWxsZWUzIiwiX3lpZWxkJHJ1blJ1bGVzQXN5bmMyIiwiX3QyIiwiX2NvbnRleHQzIiwicHVzaCIsInJlZHVjZSIsImFjYyIsImRlZmluZUZpZWxkIiwiZmllbGRPcHRpb25zIiwiX2ZpZWxkT3B0aW9ucyRydWxlcyIsIkZpZWxkQ29tcG9uZW50IiwiY2hpbGRyZW4iLCJyZW5kZXIiLCJwcm9wcyIsIl91c2VTdG9yZVNlbGVjdG9yIiwiX3VzZVN0b3JlU2VsZWN0b3IyIiwiX3NsaWNlZFRvQXJyYXkiLCJmaWVsZFZhbHVlIiwiZmllbGRFcnJvciIsImZpZWxkVG91Y2hlZCIsImZpZWxkVmFsaWRhdGluZyIsInJldGFpbkZpZWxkIiwiZXhpc3RpbmdSdWxlcyIsInJlZ2lzdGVyRmllbGQiLCJyZWxlYXNlRmllbGQiLCJoYW5kbGVGaWVsZENoYW5nZSIsInNldEZpZWxkVmFsdWUiLCJoYW5kbGVCbHVyIiwiZmllbGRQcm9wcyIsIm9uQ2hhbmdlIiwib25CbHVyIiwiaGFuZGxlTWVyZ2VDaGFuZ2UiLCJfdHlwZW9mIiwidGFyZ2V0IiwiaXNWYWxpZEVsZW1lbnQiLCJoYW5kbGVNZXJnZUJsdXIiLCJkb21TYWZlUHJvcHMiLCJjbG9uZUVsZW1lbnQiLCJjcmVhdGVFbGVtZW50IiwiY29uY2F0IiwiX3RvQ29uc3VtYWJsZUFycmF5IiwiY2hpbGQiLCJpbmRleCIsImtleSIsImRpc3BsYXlOYW1lIiwiaGFuZGxlU3VibWl0IiwiX2NhbGxlZTUiLCJ2YWxpZGF0ZWRWYWx1ZXMiLCJfdDMiLCJfY29udGV4dDUiLCJwcmV2ZW50RGVmYXVsdCIsImNvbnNvbGUiLCJoYW5kbGVSZXNldCIsInJlc2V0RmllbGRzIiwiZ2V0RmllbGRFcnJvciIsImdldEZpZWxkV2FybmluZyIsImdldEZpZWxkc0Vycm9yIiwiaXNGaWVsZFRvdWNoZWQiLCJpc0ZpZWxkc1RvdWNoZWQiLCJhbGxGaWVsZHNUb3VjaGVkIiwiZXZlcnkiLCJpc0ZpZWxkVmFsaWRhdGluZyIsInNldEZpZWxkc0Vycm9yIiwiZmllbGRzRXJyb3IiLCJlbnRyaWVzIiwiX3JlZiIsIl9yZWYyIiwic2V0RmllbGRFcnJvciIsInNldEZpZWxkVG91Y2hlZCIsImlzVG91Y2hlZCIsInNldEZpZWxkc1RvdWNoZWQiLCJmaWVsZHNUb3VjaCIsInJlc2V0Rm9ybUZpZWxkcyIsImluaXRpYWxWYWx1ZXMiLCJnZXRJbml0aWFsVmFsdWVzIiwibmV3VmFsdWVzIiwiZmllbGQiLCJpbml0aWFsIiwiaW5jbHVkZXMiLCJpbnZhbGlkYXRlVmFsaWRhdGlvblJ1bnMiLCJuZXdUb3VjaGVkIiwic3VibWl0V2l0aFZhbGlkYXRpb24iLCJjYWxsYmFjayIsIl9jYWxsZWU2IiwiX3Q0IiwiX3Q1IiwiX2NvbnRleHQ2IiwiZm9ybUluc3RhbmNlIiwiZ2V0RmllbGRWYWx1ZSIsInZhbGlkYXRlRmllbGRzIiwic2V0RmllbGRzVmFsdWUiLCJzdWJtaXQiLCJ1bnJlZ2lzdGVyRmllbGQiLCJzZXRSdWxlQ29udGV4dEluc3RhbmNlIiwiaW50ZXJuYWxzIiwic2V0RmllbGRXYXJuaW5nIl0sIm1hcHBpbmdzIjoiOzs7Ozs7OztBQUFBLElBQUlBLFNBQVMsR0FBSSxJQUFJLElBQUksSUFBSSxDQUFDQSxTQUFTLElBQUssVUFBVUMsT0FBTyxFQUFFQyxVQUFVLEVBQUVDLENBQUMsRUFBRUMsU0FBUyxFQUFFO0VBQ3JGLFNBQVNDLEtBQUtBLENBQUNDLEtBQUssRUFBRTtJQUFF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RU8sU0FBUyxFQUFUQSxTQUFTO0lBQUVuTCxLQUFLLEVBQUxBO0VBQUssQ0FBRTtBQUMzQyxDQUFDO0FBRUQsZUFBZVYsT0FBTyIsImZpbGUiOiJjb21wb25lbnRzL1Byb0Zvcm0vY29yZS9ob29rcy91c2VGb3JtLmpzIiwic291cmNlc0NvbnRlbnQiOlsidmFyIF9fYXdhaXRlciA9ICh0aGlzICYmIHRoaXMuX19hd2FpdGVyKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XG4gICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XG4gICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcbiAgICB9KTtcbn07XG52YXIgX19yZXN0ID0gKHRoaXMgJiYgdGhpcy5fX3Jlc3QpIHx8IGZ1bmN0aW9uIChzLCBlKSB7XG4gICAgdmFyIHQgPSB7fTtcbiAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkgJiYgZS5pbmRleE9mKHApIDwgMClcbiAgICAgICAgdFtwXSA9IHNbcF07XG4gICAgaWYgKHMgIT0gbnVsbCAmJiB0eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyA9PT0gXCJmdW5jdGlvblwiKVxuICAgICAgICBmb3IgKHZhciBpID0gMCwgcCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMocyk7IGkgPCBwLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAoZS5pbmRleE9mKHBbaV0pIDwgMCAmJiBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwocywgcFtpXSkpXG4gICAgICAgICAgICAgICAgdFtwW2ldXSA9IHNbcFtpXV07XG4gICAgICAgIH1cbiAgICByZXR1cm4gdDtcbn07XG5pbXBvcnQgeyB1c2VNZW1vLCB1c2VFZmZlY3QsIHVzZVJlZiwgbWVtbywgRnJhZ21lbnQgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHVzZUV2ZW50Q2FsbGJhY2sgZnJvbSAnQDFtb25leS9ob29rcy91c2VFdmVudENhbGxiYWNrJztcbmltcG9ydCB1c2VNZW1vaXplZEZuIGZyb20gJ0AxbW9uZXkvaG9va3MvdXNlTWVtb2l6ZWRGbic7XG5pbXBvcnQgeyB1c2VGb3JtQ29yZSB9IGZyb20gJy4vdXNlRm9ybUNvcmUnO1xuaW1wb3J0IHsgcmVzb2x2ZVZhbHVlLCBzZXROZXN0ZWRWYWx1ZSB9IGZyb20gJy4uL3BhdGhVdGlscyc7XG5pbXBvcnQgeyBjb2VyY2VGYWlsdXJlUmVhc29uLCBmaWx0ZXJSdWxlc0J5VHJpZ2dlciwgbm9ybWFsaXplVHJpZ2dlcnMsIHJlc29sdmVSdWxlcywgcnVuUnVsZXNBc3luYywgfSBmcm9tICcuLi9ydW5SdWxlcyc7XG5pbXBvcnQgeyB1c2VTdG9yZVNlbGVjdG9yLCBzaGFsbG93RXF1YWxBcnJheXMsIHNhbWVWYWxpZGF0aW9uTm9kZSB9IGZyb20gJy4uL2Zvcm1TdG9yZSc7XG5pbXBvcnQgeyBGb3JtVmFsaWRhdGlvbkVycm9yIH0gZnJvbSAnLi4vdmFsaWRhdGlvbkVycm9yJztcbi8qKlxuICogT25seSBydWxlcyB3aXRoIGEgY3VzdG9tIGB2YWxpZGF0b3JgIGNhbiBiZSBnZW51aW5lbHkgYXN5bmNocm9ub3VzIOKAlFxuICogYnVpbHRpbiBydWxlcyByZXNvbHZlIHdpdGhpbiBhIG1pY3JvdGFzaywgc28gZmxpcHBpbmcgYHZhbGlkYXRpbmdgIGZvclxuICogdGhlbSB3b3VsZCBvbmx5IGNodXJuIHN1YnNjcmliZXJzIHdpdGhvdXQgZXZlciBiZWluZyB2aXNpYmxlLiBEZWNpZGVkIG9uXG4gKiBSRVNPTFZFRCBydWxlczogYSBmdW5jdGlvbi1mb3JtIHJ1bGUgdGhhdCByZXNvbHZlcyB0byBidWlsdGluLW9ubHkgY2hlY2tzXG4gKiBtdXN0IG5vdCBmbGlja2VyIHRoZSBmbGFnLlxuICpcbiAqIFRoZSBhc3luYyBlbmdpbmUgYXdhaXRzIHZhbGlkYXRvcnMgbmVzdGVkIGluc2lkZSBgZmllbGRzYCAvIGBkZWZhdWx0RmllbGRgXG4gKiB0b28sIHNvIHRoZSBkZWNpc2lvbiBtdXN0IGRlc2NlbmQgdGhlIHNhbWUgd2F5IOKAlCBvdGhlcndpc2UgYSBkZWVwLW9ubHlcbiAqIHZhbGlkYXRvciAoZS5nLiBgeyBkZWZhdWx0RmllbGQ6IHsgdmFsaWRhdG9yIH0gfWApIHJ1bnMgcGVuZGluZyB3aXRoIHRoZVxuICogZmxhZyBzdHVjayBmYWxzZSwgYW5kIGBpc0ZpZWxkVmFsaWRhdGluZyhuYW1lKWAgdW5kZXItcmVwb3J0cyBmb3IgdGhlIHdob2xlXG4gKiB3aW5kb3cuIE92ZXItZmxhZ2dpbmcgd2hlbiB0aGUgZGVlcCB2YWxpZGF0b3Igd29uJ3QgYWN0dWFsbHkgZmlyZSAoZW1wdHkgL1xuICogcHJpbWl0aXZlIHZhbHVlKSBpcyBhY2NlcHRhYmxlOiB0aGUgZmxhZyBpcyBkZWNpZGVkIG9uIHJ1bGUgU0hBUEUsIGV4YWN0bHlcbiAqIGFzIHRoZSB0b3AtbGV2ZWwgY2FzZSBhbHJlYWR5IG92ZXItZmxhZ3MgYSB2YWxpZGF0b3Igc2hvcnQtY2lyY3VpdGVkIGJ5IGFuXG4gKiBlYXJsaWVyIGJ1aWx0aW4gZmFpbHVyZTsgdGhlIHJ1biBjbGVhcnMgaXQgb24gc2V0dGxlIGVpdGhlciB3YXkuXG4gKi9cbmNvbnN0IGFzUnVsZUFycmF5ID0gKHJ1bGUpID0+IHJ1bGUgPyAoQXJyYXkuaXNBcnJheShydWxlKSA/IHJ1bGUgOiBbcnVsZV0pIDogW107XG5jb25zdCBydWxlSGFzVmFsaWRhdG9yID0gKHJ1bGUpID0+IHtcbiAgICBpZiAodHlwZW9mIHJ1bGUudmFsaWRhdG9yID09PSAnZnVuY3Rpb24nKVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICBpZiAoYXNSdWxlQXJyYXkocnVsZS5kZWZhdWx0RmllbGQpLnNvbWUocnVsZUhhc1ZhbGlkYXRvcikpXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIGlmIChydWxlLmZpZWxkcykge1xuICAgICAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyhydWxlLmZpZWxkcykuc29tZSgoc3ViKSA9PiBhc1J1bGVBcnJheShzdWIpLnNvbWUocnVsZUhhc1ZhbGlkYXRvcikpO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59O1xuY29uc3QgaGFzUmVzb2x2ZWRWYWxpZGF0b3IgPSAocmVzb2x2ZWQpID0+IHJlc29sdmVkLnNvbWUocnVsZUhhc1ZhbGlkYXRvcik7XG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIHVzZUZvcm1cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuZXhwb3J0IGNvbnN0IHVzZUZvcm0gPSAoY29uZmlnID0ge30pID0+IHtcbiAgICBjb25zdCB7IG9uRmluaXNoLCBvbkZpbmlzaEZhaWxlZCwgb25SZXNldCwgdmFsaWRhdGVUcmlnZ2VyID0gJ29uQ2hhbmdlJywgfSA9IGNvbmZpZztcbiAgICBjb25zdCBmb3JtQ29yZSA9IHVzZUZvcm1Db3JlKGNvbmZpZyk7XG4gICAgY29uc3QgeyBzdG9yZSB9ID0gZm9ybUNvcmU7XG4gICAgLy8gRXBvY2ggb2YgdGhlIExBVEVTVCBhc3luYyBydW4gdGhhdCByYWlzZWQgZWFjaCBmaWVsZCdzIGB2YWxpZGF0aW5nYCBmbGFnLlxuICAgIC8vIEEgc2V0dGxpbmcgcnVuIGNsZWFycyB0aGUgZmxhZyBvbmx5IHdoaWxlIGl0IGlzIHN0aWxsIHRoZSBsYXRlc3QgcmFpc2VyIOKAlFxuICAgIC8vIGFuIG9sZGVyIHJ1biBtdXN0IG5vdCBibGFuayB0aGUgc3Bpbm5lciBvZiBhIG5ld2VyIG9uZSwgYW5kIGEgcnVuXG4gICAgLy8gc3VwZXJzZWRlZCBieSBhIFNZTkMgY29tbWl0ICh3aGljaCBuZXZlciB0b3VjaGVzIGZsYWdzKSBtdXN0IHN0aWxsIGNsZWFuXG4gICAgLy8gdXAgYWZ0ZXIgaXRzZWxmLlxuICAgIGNvbnN0IGxhc3RBc3luY0Vwb2NoUmVmID0gdXNlUmVmKHt9KTtcbiAgICAvLyBNYXJrIGZpZWxkcyBhcyB2YWxpZGF0aW5nIGluIE9ORSBjb21taXQuIHZhbGlkYXRpbmcgLyB0b3VjaGVkIGxpdmUgaW4gdGhlXG4gICAgLy8gc3RvcmUgYWxvbmdzaWRlIHZhbHVlcyDigJQgZmxpcHBpbmcgdGhlbSAoZS5nLiBhc3luYyB2YWxpZGF0aW9uIGFyb3VuZCBhXG4gICAgLy8gYmx1cikgbXVzdCBub3QgcmUtcmVuZGVyIHRoZSBmb3JtIHJvb3QsIG9ubHkgdGhlIGZpZWxkcyB0aGF0IHN1YnNjcmliZWQuXG4gICAgY29uc3QgbWFya1ZhbGlkYXRpbmcgPSB1c2VNZW1vaXplZEZuKChuYW1lcykgPT4ge1xuICAgICAgICBpZiAobmFtZXMubGVuZ3RoID09PSAwKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBjb25zdCBuZXh0ID0gT2JqZWN0LmFzc2lnbih7fSwgc3RvcmUuZ2V0U3RhdGUoKS52YWxpZGF0aW5nKTtcbiAgICAgICAgbmFtZXMuZm9yRWFjaCgobmFtZSkgPT4ge1xuICAgICAgICAgICAgbmV4dFtuYW1lXSA9IHRydWU7XG4gICAgICAgIH0pO1xuICAgICAgICBzdG9yZS5zZXRTdGF0ZSh7IHZhbGlkYXRpbmc6IG5leHQgfSk7XG4gICAgfSk7XG4gICAgLy8gRm9sZCBwZXItZmllbGQgcnVsZSBvdXRjb21lcyBpbnRvIEFUIE1PU1Qgb25lIHN0b3JlIGNvbW1pdDogZXJyb3JzIGFuZFxuICAgIC8vIHdhcm5pbmdzIGFyZSBtZXJnZWQgb3ZlciB0aGUgY3VycmVudCBtYXBzIGFuZCB0aGUgYGNsZWFyVmFsaWRhdGluZ2AgZmxhZ3NcbiAgICAvLyBhcmUgcmVtb3ZlZCBpbiB0aGUgU0FNRSBwYXRjaC4gQSBuby1vcCBvdXRjb21lIGNvbW1pdHMgbm90aGluZyBhdCBhbGwg4oCUXG4gICAgLy8gcGVyLWZpZWxkIGNvbW1pdHMgaGVyZSBwcmV2aW91c2x5IG1hZGUgc3VibWl0LXRpbWUgdmFsaWRhdGlvbiBzd2VlcCBldmVyeVxuICAgIC8vIHN1YnNjcmliZXIgTyhmaWVsZHMpIHRpbWVzLlxuICAgIGNvbnN0IGNvbW1pdFJ1bGVPdXRjb21lcyA9IHVzZU1lbW9pemVkRm4oKG91dGNvbWVzLCBjbGVhclZhbGlkYXRpbmcpID0+IHtcbiAgICAgICAgY29uc3Qgc3RhdGUgPSBzdG9yZS5nZXRTdGF0ZSgpO1xuICAgICAgICBsZXQgZXJyb3JzQ2hhbmdlZCA9IGZhbHNlO1xuICAgICAgICBsZXQgd2FybmluZ3NDaGFuZ2VkID0gZmFsc2U7XG4gICAgICAgIGNvbnN0IG5ld0Vycm9ycyA9IE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLmVycm9ycyk7XG4gICAgICAgIGNvbnN0IG5ld1dhcm5pbmdzID0gT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUud2FybmluZ3MpO1xuICAgICAgICBmb3IgKGNvbnN0IHsgbmFtZSwgZXJyb3IsIHdhcm5pbmcgfSBvZiBvdXRjb21lcykge1xuICAgICAgICAgICAgaWYgKGVycm9yID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgaWYgKG5hbWUgaW4gbmV3RXJyb3JzKSB7XG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBuZXdFcnJvcnNbbmFtZV07XG4gICAgICAgICAgICAgICAgICAgIGVycm9yc0NoYW5nZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKCFzYW1lVmFsaWRhdGlvbk5vZGUobmV3RXJyb3JzW25hbWVdLCBlcnJvcikpIHtcbiAgICAgICAgICAgICAgICBuZXdFcnJvcnNbbmFtZV0gPSBlcnJvcjtcbiAgICAgICAgICAgICAgICBlcnJvcnNDaGFuZ2VkID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh3YXJuaW5nID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgaWYgKG5hbWUgaW4gbmV3V2FybmluZ3MpIHtcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIG5ld1dhcm5pbmdzW25hbWVdO1xuICAgICAgICAgICAgICAgICAgICB3YXJuaW5nc0NoYW5nZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKCFzYW1lVmFsaWRhdGlvbk5vZGUobmV3V2FybmluZ3NbbmFtZV0sIHdhcm5pbmcpKSB7XG4gICAgICAgICAgICAgICAgbmV3V2FybmluZ3NbbmFtZV0gPSB3YXJuaW5nO1xuICAgICAgICAgICAgICAgIHdhcm5pbmdzQ2hhbmdlZCA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZmxhZ3NUb0NsZWFyID0gY2xlYXJWYWxpZGF0aW5nLmZpbHRlcigobmFtZSkgPT4gbmFtZSBpbiBzdGF0ZS52YWxpZGF0aW5nKTtcbiAgICAgICAgY29uc3QgcGF0Y2ggPSB7fTtcbiAgICAgICAgaWYgKGVycm9yc0NoYW5nZWQpXG4gICAgICAgICAgICBwYXRjaC5lcnJvcnMgPSBuZXdFcnJvcnM7XG4gICAgICAgIGlmICh3YXJuaW5nc0NoYW5nZWQpXG4gICAgICAgICAgICBwYXRjaC53YXJuaW5ncyA9IG5ld1dhcm5pbmdzO1xuICAgICAgICBpZiAoZmxhZ3NUb0NsZWFyLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGNvbnN0IG5ld1ZhbGlkYXRpbmcgPSBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZS52YWxpZGF0aW5nKTtcbiAgICAgICAgICAgIGZsYWdzVG9DbGVhci5mb3JFYWNoKChuYW1lKSA9PiB7XG4gICAgICAgICAgICAgICAgZGVsZXRlIG5ld1ZhbGlkYXRpbmdbbmFtZV07XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHBhdGNoLnZhbGlkYXRpbmcgPSBuZXdWYWxpZGF0aW5nO1xuICAgICAgICB9XG4gICAgICAgIGlmIChPYmplY3Qua2V5cyhwYXRjaCkubGVuZ3RoID4gMClcbiAgICAgICAgICAgIHN0b3JlLnNldFN0YXRlKHBhdGNoKTtcbiAgICB9KTtcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAvLyBBc3luYyBmaWVsZCB2YWxpZGF0aW9uIOKAkyBlYWNoIHJ1bGUgaXMgcHJvY2Vzc2VkIGV4YWN0bHkgb25jZVxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIGNvbnN0IHZhbGlkYXRlRmllbGRBc3luYyA9IHVzZU1lbW9pemVkRm4oKG5hbWUsIHZhbHVlLCBydWxlcykgPT4gX19hd2FpdGVyKHZvaWQgMCwgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgaWYgKCFydWxlcyB8fCBydWxlcy5sZW5ndGggPT09IDApXG4gICAgICAgICAgICByZXR1cm4geyBpc1ZhbGlkOiB0cnVlLCBlcnJvcjogbnVsbCB9O1xuICAgICAgICAvLyBDYXB0dXJlIHRoaXMgcnVuJ3MgZXBvY2g6IGlmIGEgTkVXRVIgcnVuIChzeW5jIG9yIGFzeW5jKSBzdGFydHMgZm9yXG4gICAgICAgIC8vIHRoZSBmaWVsZCBiZWZvcmUgdGhpcyBvbmUgc2V0dGxlcywgdGhlIG91dGNvbWUgYmVsb3cgaXMgc3RhbGUgYW5kIGlzXG4gICAgICAgIC8vIGRpc2NhcmRlZCBpbnN0ZWFkIG9mIG92ZXJ3cml0aW5nIHRoZSBuZXdlciByZXN1bHQuXG4gICAgICAgIGNvbnN0IGVwb2NoID0gZm9ybUNvcmUuYmVnaW5WYWxpZGF0aW9uUnVuKG5hbWUpO1xuICAgICAgICAvLyBSZXNvbHZlIG9uY2U6IHRoZSBmbGFnIGRlY2lzaW9uIG5lZWRzIHJlc29sdmVkIHJ1bGVzLCBhbmQgcGFzc2luZyB0aGVcbiAgICAgICAgLy8gcmVzb2x2ZWQgYXJyYXkgb253YXJkIHNwYXJlcyB0aGUgZW5naW5lIGEgcmUtcmVzb2x1dGlvbi5cbiAgICAgICAgY29uc3QgdmFsdWVzID0gZm9ybUNvcmUuZ2V0RmllbGRzVmFsdWUoKTtcbiAgICAgICAgY29uc3QgcmVzb2x2ZWQgPSByZXNvbHZlUnVsZXMocnVsZXMsIHZhbHVlcywgZm9ybUNvcmUuZ2V0UnVsZUNvbnRleHRJbnN0YW5jZSgpKTtcbiAgICAgICAgY29uc3QgZmxhZ2dlZCA9IGhhc1Jlc29sdmVkVmFsaWRhdG9yKHJlc29sdmVkKSA/IFtuYW1lXSA6IFtdO1xuICAgICAgICBtYXJrVmFsaWRhdGluZyhmbGFnZ2VkKTtcbiAgICAgICAgZmxhZ2dlZC5mb3JFYWNoKChmbGFnZ2VkTmFtZSkgPT4ge1xuICAgICAgICAgICAgbGFzdEFzeW5jRXBvY2hSZWYuY3VycmVudFtmbGFnZ2VkTmFtZV0gPSBlcG9jaDtcbiAgICAgICAgfSk7XG4gICAgICAgIGxldCBvdXRjb21lID0geyBuYW1lLCBlcnJvcjogbnVsbCwgd2FybmluZzogbnVsbCB9O1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgeyBlcnJvciwgd2FybmluZyB9ID0geWllbGQgcnVuUnVsZXNBc3luYyhuYW1lLCB2YWx1ZSwgdmFsdWVzLCByZXNvbHZlZCwgZm9ybUNvcmUuZ2V0UnVsZUNvbnRleHRJbnN0YW5jZSgpKTtcbiAgICAgICAgICAgIG91dGNvbWUgPSB7IG5hbWUsIGVycm9yLCB3YXJuaW5nIH07XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgLy8gVGhlIGVuZ2luZSBjb250YWlucyBydWxlLWxldmVsIHRocm93cyBpdHNlbGY7IHRoaXMgaXMgYSBsYXN0LXJlc29ydFxuICAgICAgICAgICAgLy8gbmV0IHNvIGFuIHVuZXhwZWN0ZWQgZmFpbHVyZSBzdXJmYWNlcyBhcyBhIGZpZWxkIGVycm9yIGluc3RlYWQgb2ZcbiAgICAgICAgICAgIC8vIGxlYXZpbmcgdGhlIGZpZWxkIG1hcmtlZCB2YWxpZC5cbiAgICAgICAgICAgIG91dGNvbWUgPSB7IG5hbWUsIGVycm9yOiAoX2EgPSBjb2VyY2VGYWlsdXJlUmVhc29uKGVycikpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6ICdWYWxpZGF0aW9uIGZhaWxlZCcsIHdhcm5pbmc6IG51bGwgfTtcbiAgICAgICAgfVxuICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgIGNvbnN0IGlzQ3VycmVudCA9IGZvcm1Db3JlLmlzVmFsaWRhdGlvblJ1bkN1cnJlbnQobmFtZSwgZXBvY2gpO1xuICAgICAgICAgICAgY29uc3QgY2xlYXJGbGFncyA9IGZsYWdnZWQuZmlsdGVyKChmbGFnZ2VkTmFtZSkgPT4gbGFzdEFzeW5jRXBvY2hSZWYuY3VycmVudFtmbGFnZ2VkTmFtZV0gPT09IGVwb2NoKTtcbiAgICAgICAgICAgIGNvbW1pdFJ1bGVPdXRjb21lcyhpc0N1cnJlbnQgPyBbb3V0Y29tZV0gOiBbXSwgY2xlYXJGbGFncyk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gVGhlIENBTExFUiBnZXRzIHRoaXMgcnVuJ3Mgb3duIHJlc3VsdCBlaXRoZXIgd2F5IChpdHMgcHJvbWlzZSBpc1xuICAgICAgICAvLyBhYm91dCB0aGUgdmFsdWUgaXQgd2FzIGFza2VkIHRvIHZhbGlkYXRlKTsgb25seSB0aGUgU1RPUkUgY29tbWl0IGlzXG4gICAgICAgIC8vIHN0YWxlbmVzcy1ndWFyZGVkLlxuICAgICAgICByZXR1cm4geyBpc1ZhbGlkOiBvdXRjb21lLmVycm9yID09PSBudWxsLCBlcnJvcjogb3V0Y29tZS5lcnJvciB9O1xuICAgIH0pKTtcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAvLyBBc3luYyBmaWVsZCBibHVyIGhhbmRsZXJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICBjb25zdCBoYW5kbGVGaWVsZEJsdXIgPSB1c2VFdmVudENhbGxiYWNrKChuYW1lLCBmaWVsZFRyaWdnZXIpID0+IF9fYXdhaXRlcih2b2lkIDAsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBjb25zdCB0b3VjaGVkID0gc3RvcmUuZ2V0U3RhdGUoKS50b3VjaGVkO1xuICAgICAgICBpZiAoIXRvdWNoZWRbbmFtZV0pIHtcbiAgICAgICAgICAgIHN0b3JlLnNldFN0YXRlKHsgdG91Y2hlZDogT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCB0b3VjaGVkKSwgeyBbbmFtZV06IHRydWUgfSkgfSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcnVsZXMgPSBmb3JtQ29yZS5nZXRGaWVsZFJ1bGVzKG5hbWUpO1xuICAgICAgICBpZiAoIXJ1bGVzKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBjb25zdCB2YWx1ZXMgPSBmb3JtQ29yZS5nZXRGaWVsZHNWYWx1ZSgpO1xuICAgICAgICBjb25zdCBhcHBsaWNhYmxlID0gZmlsdGVyUnVsZXNCeVRyaWdnZXIocmVzb2x2ZVJ1bGVzKHJ1bGVzLCB2YWx1ZXMsIGZvcm1Db3JlLmdldFJ1bGVDb250ZXh0SW5zdGFuY2UoKSksICdvbkJsdXInLCBub3JtYWxpemVUcmlnZ2VycyhmaWVsZFRyaWdnZXIsIHZhbGlkYXRlVHJpZ2dlciksIG5hbWUpO1xuICAgICAgICBpZiAoYXBwbGljYWJsZS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB5aWVsZCB2YWxpZGF0ZUZpZWxkQXN5bmMobmFtZSwgcmVzb2x2ZVZhbHVlKHZhbHVlcywgbmFtZSksIGFwcGxpY2FibGUpO1xuICAgICAgICB9XG4gICAgfSkpO1xuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIC8vIFZhbGlkYXRlIGFsbCBmaWVsZHMgYXN5bmNcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICBjb25zdCB2YWxpZGF0ZUZpZWxkc0FzeW5jID0gdXNlTWVtb2l6ZWRGbigobmFtZUxpc3QpID0+IF9fYXdhaXRlcih2b2lkIDAsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBjb25zdCBmaWVsZHNUb1ZhbGlkYXRlID0gbmFtZUxpc3QgfHwgT2JqZWN0LmtleXMoZm9ybUNvcmUuZmllbGRSdWxlcyk7XG4gICAgICAgIGNvbnN0IGZpZWxkRXJyb3JzID0ge307XG4gICAgICAgIC8vIFJlc29sdmUgZXZlcnkgZmllbGQgb25jZSB1cCBmcm9udDogdGhlIGZsYWcgZGVjaXNpb24gbmVlZHMgcmVzb2x2ZWRcbiAgICAgICAgLy8gcnVsZXMsIGFuZCB0aGUgcmVzb2x2ZWQgYXJyYXlzIGFyZSByZXVzZWQgZm9yIHRoZSBhY3R1YWwgcnVucy4gRWFjaFxuICAgICAgICAvLyBmaWVsZCBhbHNvIGNhcHR1cmVzIGl0cyB2YWxpZGF0aW9uIGVwb2NoIOKAlCBhIGZpZWxkIHdob3NlIHZhbHVlXG4gICAgICAgIC8vIGNoYW5nZXMgbWlkLXN1Ym1pdCBnZXRzIGEgbmV3ZXIgcnVuLCBhbmQgdGhpcyBydW4ncyBzdGFsZSBvdXRjb21lXG4gICAgICAgIC8vIG11c3Qgbm90IG92ZXJ3cml0ZSBpdCBpbiB0aGUgc3RvcmUuXG4gICAgICAgIGNvbnN0IHJlc29sdmVkQnlGaWVsZCA9IG5ldyBNYXAoKTtcbiAgICAgICAgY29uc3QgZXBvY2hCeUZpZWxkID0gbmV3IE1hcCgpO1xuICAgICAgICBmb3IgKGNvbnN0IG5hbWUgb2YgZmllbGRzVG9WYWxpZGF0ZSkge1xuICAgICAgICAgICAgY29uc3QgcnVsZXMgPSBmb3JtQ29yZS5maWVsZFJ1bGVzW25hbWVdO1xuICAgICAgICAgICAgaWYgKHJ1bGVzKSB7XG4gICAgICAgICAgICAgICAgZXBvY2hCeUZpZWxkLnNldChuYW1lLCBmb3JtQ29yZS5iZWdpblZhbGlkYXRpb25SdW4obmFtZSkpO1xuICAgICAgICAgICAgICAgIHJlc29sdmVkQnlGaWVsZC5zZXQobmFtZSwgcmVzb2x2ZVJ1bGVzKHJ1bGVzLCBmb3JtQ29yZS5nZXRGaWVsZHNWYWx1ZSgpLCBmb3JtQ29yZS5nZXRSdWxlQ29udGV4dEluc3RhbmNlKCkpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBPbmUgY29tbWl0IHRvIHJhaXNlIHRoZSB2YWxpZGF0aW5nIGZsYWdzICh2YWxpZGF0b3ItYmVhcmluZyBmaWVsZHNcbiAgICAgICAgLy8gb25seSksIG9uZSBjb21taXQgdG8gbGFuZCBldmVyeSBlcnJvci93YXJuaW5nIGFuZCBjbGVhciB0aGUgZmxhZ3MuXG4gICAgICAgIGNvbnN0IGZsYWdnZWQgPSBmaWVsZHNUb1ZhbGlkYXRlLmZpbHRlcigobmFtZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgcmVzb2x2ZWQgPSByZXNvbHZlZEJ5RmllbGQuZ2V0KG5hbWUpO1xuICAgICAgICAgICAgcmV0dXJuIHJlc29sdmVkID8gaGFzUmVzb2x2ZWRWYWxpZGF0b3IocmVzb2x2ZWQpIDogZmFsc2U7XG4gICAgICAgIH0pO1xuICAgICAgICBtYXJrVmFsaWRhdGluZyhmbGFnZ2VkKTtcbiAgICAgICAgZmxhZ2dlZC5mb3JFYWNoKChuYW1lKSA9PiB7XG4gICAgICAgICAgICBsYXN0QXN5bmNFcG9jaFJlZi5jdXJyZW50W25hbWVdID0gZXBvY2hCeUZpZWxkLmdldChuYW1lKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IG91dGNvbWVzID0gW107XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICB5aWVsZCBQcm9taXNlLmFsbChmaWVsZHNUb1ZhbGlkYXRlLm1hcCgobmFtZSkgPT4gX19hd2FpdGVyKHZvaWQgMCwgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlc29sdmVkID0gcmVzb2x2ZWRCeUZpZWxkLmdldChuYW1lKTtcbiAgICAgICAgICAgICAgICBpZiAoIXJlc29sdmVkKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgbGV0IGVycm9yID0gbnVsbDtcbiAgICAgICAgICAgICAgICBsZXQgd2FybmluZyA9IG51bGw7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgKHsgZXJyb3IsIHdhcm5pbmcgfSA9IHlpZWxkIHJ1blJ1bGVzQXN5bmMobmFtZSwgcmVzb2x2ZVZhbHVlKGZvcm1Db3JlLmdldEZpZWxkc1ZhbHVlKCksIG5hbWUpLCBmb3JtQ29yZS5nZXRGaWVsZHNWYWx1ZSgpLCByZXNvbHZlZCwgZm9ybUNvcmUuZ2V0UnVsZUNvbnRleHRJbnN0YW5jZSgpKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gTGFzdC1yZXNvcnQgbmV0IChzZWUgdmFsaWRhdGVGaWVsZEFzeW5jKSDigJQga2VlcCB0aGUgbm9ybWFsXG4gICAgICAgICAgICAgICAgICAgIC8vIGNvbnN0cnVjdGVkLWVycm9yIGZsb3cgc28gb25GaW5pc2hGYWlsZWQgZ2V0cyBhIHJlYWwgcGF5bG9hZC5cbiAgICAgICAgICAgICAgICAgICAgZXJyb3IgPSAoX2EgPSBjb2VyY2VGYWlsdXJlUmVhc29uKGVycikpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6ICdWYWxpZGF0aW9uIGZhaWxlZCc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIFRoZSBzdG9yZSBjb21taXQgaXMgc3RhbGVuZXNzLWd1YXJkZWQ7IHRoZSBTVUJNSVQgZGVjaXNpb25cbiAgICAgICAgICAgICAgICAvLyAoZmllbGRFcnJvcnMgLyB0aGUgdGhyb3duIEZvcm1WYWxpZGF0aW9uRXJyb3IpIHN0aWxsIHJlZmxlY3RzXG4gICAgICAgICAgICAgICAgLy8gdGhpcyBydW4ncyBvd24gcmVzdWx0cyBmb3IgdGhlIHZhbHVlcyBpdCB2YWxpZGF0ZWQuXG4gICAgICAgICAgICAgICAgY29uc3QgZXBvY2ggPSBlcG9jaEJ5RmllbGQuZ2V0KG5hbWUpO1xuICAgICAgICAgICAgICAgIGlmIChlcG9jaCAhPT0gdW5kZWZpbmVkICYmIGZvcm1Db3JlLmlzVmFsaWRhdGlvblJ1bkN1cnJlbnQobmFtZSwgZXBvY2gpKSB7XG4gICAgICAgICAgICAgICAgICAgIG91dGNvbWVzLnB1c2goeyBuYW1lLCBlcnJvciwgd2FybmluZyB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGVycm9yICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIGZpZWxkRXJyb3JzW25hbWVdID0gZXJyb3I7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSkpKTtcbiAgICAgICAgfVxuICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgIGNvbnN0IGNsZWFyRmxhZ3MgPSBmbGFnZ2VkLmZpbHRlcigobmFtZSkgPT4gbGFzdEFzeW5jRXBvY2hSZWYuY3VycmVudFtuYW1lXSA9PT0gZXBvY2hCeUZpZWxkLmdldChuYW1lKSk7XG4gICAgICAgICAgICBjb21taXRSdWxlT3V0Y29tZXMob3V0Y29tZXMsIGNsZWFyRmxhZ3MpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChPYmplY3Qua2V5cyhmaWVsZEVycm9ycykubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEZvcm1WYWxpZGF0aW9uRXJyb3IoZm9ybUNvcmUuZ2V0RmllbGRzVmFsdWUoKSwgZmllbGRFcnJvcnMpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChuYW1lTGlzdCkge1xuICAgICAgICAgICAgcmV0dXJuIG5hbWVMaXN0LnJlZHVjZSgoYWNjLCBuYW1lKSA9PiB7XG4gICAgICAgICAgICAgICAgYWNjW25hbWVdID0gcmVzb2x2ZVZhbHVlKGZvcm1Db3JlLmdldEZpZWxkc1ZhbHVlKCksIG5hbWUpO1xuICAgICAgICAgICAgICAgIHJldHVybiBhY2M7XG4gICAgICAgICAgICB9LCB7fSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZvcm1Db3JlLmdldEZpZWxkc1ZhbHVlKCk7XG4gICAgfSkpO1xuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIC8vIGRlZmluZUZpZWxkIOKAkyB1c2VkIGJ5IHN0YW5kYWxvbmUgKG5vbi1Qcm9Gb3JtKSBjb25zdW1lcnNcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICBjb25zdCBkZWZpbmVGaWVsZCA9IHVzZU1lbW9pemVkRm4oKG5hbWUsIGZpZWxkT3B0aW9ucyA9IHt9KSA9PiB7XG4gICAgICAgIGNvbnN0IHsgcnVsZXMgPSBbXSB9ID0gZmllbGRPcHRpb25zO1xuICAgICAgICBjb25zdCBGaWVsZENvbXBvbmVudCA9IG1lbW8oKF9hKSA9PiB7XG4gICAgICAgICAgICB2YXIgeyBjaGlsZHJlbiwgcmVuZGVyIH0gPSBfYSwgcHJvcHMgPSBfX3Jlc3QoX2EsIFtcImNoaWxkcmVuXCIsIFwicmVuZGVyXCJdKTtcbiAgICAgICAgICAgIC8vIFBlci1maWVsZCBzdG9yZSBzdWJzY3JpcHRpb246IHRoaXMgZmllbGQgcmUtcmVuZGVycyBvbmx5IHdoZW4gaXRzXG4gICAgICAgICAgICAvLyBvd24gdmFsdWUvZXJyb3IvdG91Y2hlZC92YWxpZGF0aW5nIHNsaWNlIGNoYW5nZXMuIERvdC1wYXRoc1xuICAgICAgICAgICAgLy8gcmVzb2x2ZSBpbnRvIHRoZSBuZXN0ZWQgdmFsdWVzIGxpa2UgZXZlcnl3aGVyZSBlbHNlLlxuICAgICAgICAgICAgY29uc3QgW2ZpZWxkVmFsdWUsIGZpZWxkRXJyb3IsIGZpZWxkVG91Y2hlZCwgZmllbGRWYWxpZGF0aW5nXSA9IHVzZVN0b3JlU2VsZWN0b3Ioc3RvcmUsIChzdGF0ZSkgPT4ge1xuICAgICAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgICAgICAgICAoX2EgPSByZXNvbHZlVmFsdWUoc3RhdGUudmFsdWVzLCBuYW1lKSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogJycsXG4gICAgICAgICAgICAgICAgICAgIHN0YXRlLmVycm9yc1tuYW1lXSxcbiAgICAgICAgICAgICAgICAgICAgc3RhdGUudG91Y2hlZFtuYW1lXSxcbiAgICAgICAgICAgICAgICAgICAgc3RhdGUudmFsaWRhdGluZ1tuYW1lXSxcbiAgICAgICAgICAgICAgICBdO1xuICAgICAgICAgICAgfSwgc2hhbGxvd0VxdWFsQXJyYXlzKTtcbiAgICAgICAgICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gTW91bnQtY291bnRlZDogcmVsZWFzZUZpZWxkIHJlbW92ZXMgdGhlIHJ1bGVzIG9ubHkgd2hlbiB0aGVcbiAgICAgICAgICAgICAgICAvLyBMQVNUIHNhbWUtbmFtZSBpbnN0YW5jZSB1bm1vdW50cyDigJQgYW4gaW5zdGFuY2UgdGhhdCBwaWdneWJhY2tlZFxuICAgICAgICAgICAgICAgIC8vIG9uIGFuIGV4aXN0aW5nIHJlZ2lzdHJhdGlvbiAoZS5nLiBhIFByb0Zvcm0uSXRlbSdzKSBjYW4gbmV2ZXJcbiAgICAgICAgICAgICAgICAvLyB3aXBlIGl0IG9uIGl0cyBvd24gdW5tb3VudC5cbiAgICAgICAgICAgICAgICBmb3JtQ29yZS5yZXRhaW5GaWVsZChuYW1lKTtcbiAgICAgICAgICAgICAgICBjb25zdCBleGlzdGluZ1J1bGVzID0gZm9ybUNvcmUuZ2V0RmllbGRSdWxlcyhuYW1lKTtcbiAgICAgICAgICAgICAgICBpZiAoIWV4aXN0aW5nUnVsZXMgJiYgcnVsZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICBmb3JtQ29yZS5yZWdpc3RlckZpZWxkKG5hbWUsIHJ1bGVzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgZm9ybUNvcmUucmVsZWFzZUZpZWxkKG5hbWUpO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9LCBbXSk7IC8vIE9ubHkgcmVnaXN0ZXIgb24gbW91bnRcbiAgICAgICAgICAgIGNvbnN0IGhhbmRsZUZpZWxkQ2hhbmdlID0gdXNlRXZlbnRDYWxsYmFjaygodmFsdWUpID0+IHtcbiAgICAgICAgICAgICAgICBmb3JtQ29yZS5zZXRGaWVsZFZhbHVlKG5hbWUsIHZhbHVlKTtcbiAgICAgICAgICAgICAgICAvLyBUb3VjaGVkIGlzIHNldCBieSB0aGUgdXNlciBjaGFuZ2UgdHJpZ2dlciAobWF0Y2hpbmcgdGhlXG4gICAgICAgICAgICAgICAgLy8gUHJvRm9ybS5JdGVtIHBhdGgpIOKAlCBwcm9ncmFtbWF0aWMgc2V0RmllbGRzVmFsdWUgZG9lcyBub3QuXG4gICAgICAgICAgICAgICAgY29uc3QgdG91Y2hlZCA9IHN0b3JlLmdldFN0YXRlKCkudG91Y2hlZDtcbiAgICAgICAgICAgICAgICBpZiAoIXRvdWNoZWRbbmFtZV0pIHtcbiAgICAgICAgICAgICAgICAgICAgc3RvcmUuc2V0U3RhdGUoeyB0b3VjaGVkOiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIHRvdWNoZWQpLCB7IFtuYW1lXTogdHJ1ZSB9KSB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgYXBwbGljYWJsZSA9IGZpbHRlclJ1bGVzQnlUcmlnZ2VyKHJlc29sdmVSdWxlcyhydWxlcywgZm9ybUNvcmUuZ2V0RmllbGRzVmFsdWUoKSwgZm9ybUNvcmUuZ2V0UnVsZUNvbnRleHRJbnN0YW5jZSgpKSwgJ29uQ2hhbmdlJywgbm9ybWFsaXplVHJpZ2dlcnMoZmllbGRPcHRpb25zLnZhbGlkYXRlVHJpZ2dlciwgdmFsaWRhdGVUcmlnZ2VyKSwgbmFtZSk7XG4gICAgICAgICAgICAgICAgaWYgKGFwcGxpY2FibGUubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAvLyBBc3luYyBwYXRoIChtYXRjaGluZyBQcm9Gb3JtLkl0ZW0pIHNvIGEgUHJvbWlzZS1yZXR1cm5pbmdcbiAgICAgICAgICAgICAgICAgICAgLy8gdmFsaWRhdG9yIGlzIGhvbm9yZWQgb24gY2hhbmdlIGluc3RlYWQgb2YgYmVpbmcgc2lsZW50bHlcbiAgICAgICAgICAgICAgICAgICAgLy8gc2tpcHBlZDsgZmlyZS1hbmQtZm9yZ2V0IOKAlCB0aGUgcmVzdWx0IGxhbmRzIG9uIHRoZSBzdG9yZS5cbiAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGVGaWVsZEFzeW5jKG5hbWUsIHZhbHVlLCBhcHBsaWNhYmxlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGNvbnN0IGhhbmRsZUJsdXIgPSB1c2VFdmVudENhbGxiYWNrKCgpID0+IHtcbiAgICAgICAgICAgICAgICBoYW5kbGVGaWVsZEJsdXIobmFtZSwgZmllbGRPcHRpb25zLnZhbGlkYXRlVHJpZ2dlcik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGNvbnN0IGZpZWxkUHJvcHMgPSBPYmplY3QuYXNzaWduKHsgbmFtZSwgdmFsdWU6IGZpZWxkVmFsdWUsIGVycm9yOiBmaWVsZEVycm9yLCB0b3VjaGVkOiBmaWVsZFRvdWNoZWQsIHZhbGlkYXRpbmc6IGZpZWxkVmFsaWRhdGluZywgb25DaGFuZ2U6IGhhbmRsZUZpZWxkQ2hhbmdlLCBvbkJsdXI6IGhhbmRsZUJsdXIgfSwgcHJvcHMpO1xuICAgICAgICAgICAgY29uc3QgaGFuZGxlTWVyZ2VDaGFuZ2UgPSAoZSkgPT4ge1xuICAgICAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGUgJiYgdHlwZW9mIGUgPT09ICdvYmplY3QnICYmICd0YXJnZXQnIGluIGVcbiAgICAgICAgICAgICAgICAgICAgPyBlLnRhcmdldC52YWx1ZVxuICAgICAgICAgICAgICAgICAgICA6IGU7XG4gICAgICAgICAgICAgICAgaGFuZGxlRmllbGRDaGFuZ2UodmFsdWUpO1xuICAgICAgICAgICAgICAgIGlmIChSZWFjdC5pc1ZhbGlkRWxlbWVudChjaGlsZHJlbikgJiZcbiAgICAgICAgICAgICAgICAgICAgKChfYSA9IGNoaWxkcmVuLnByb3BzKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Eub25DaGFuZ2UpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuLnByb3BzLm9uQ2hhbmdlKHZhbHVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgY29uc3QgaGFuZGxlTWVyZ2VCbHVyID0gKCkgPT4ge1xuICAgICAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgICAgICBoYW5kbGVCbHVyKCk7XG4gICAgICAgICAgICAgICAgaWYgKFJlYWN0LmlzVmFsaWRFbGVtZW50KGNoaWxkcmVuKSAmJlxuICAgICAgICAgICAgICAgICAgICAoKF9hID0gY2hpbGRyZW4ucHJvcHMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5vbkJsdXIpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuLnByb3BzLm9uQmx1cigpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBpZiAocmVuZGVyICYmIHR5cGVvZiByZW5kZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVuZGVyKGZpZWxkUHJvcHMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHR5cGVvZiBjaGlsZHJlbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBjaGlsZHJlbihmaWVsZFByb3BzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIEVsZW1lbnQgY2hpbGRyZW4gcmVjZWl2ZSBvbmx5IERPTS1zYWZlIHByb3BzIOKAlCBlcnJvci90b3VjaGVkL1xuICAgICAgICAgICAgLy8gdmFsaWRhdGluZyBhcmUgZmllbGQgTUVUQSwgbm90IGNvbnRyb2wgcHJvcHM7IHNwcmVhZGluZyB0aGVtIG9udG9cbiAgICAgICAgICAgIC8vIGEgaG9zdCBlbGVtZW50IHdvdWxkIGxlYWsgYW55IGF0dHJpYnV0ZXMuIFJlbmRlci1wcm9wIGFuZFxuICAgICAgICAgICAgLy8gZnVuY3Rpb24gY2hpbGRyZW4ga2VlcCB0aGUgZnVsbCBmaWVsZFByb3BzLlxuICAgICAgICAgICAgY29uc3QgZG9tU2FmZVByb3BzID0gT2JqZWN0LmFzc2lnbih7IG5hbWUsIHZhbHVlOiBmaWVsZFZhbHVlLCBvbkNoYW5nZTogaGFuZGxlTWVyZ2VDaGFuZ2UsIG9uQmx1cjogaGFuZGxlTWVyZ2VCbHVyIH0sIHByb3BzKTtcbiAgICAgICAgICAgIGlmIChSZWFjdC5pc1ZhbGlkRWxlbWVudChjaGlsZHJlbikpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gUmVhY3QuY2xvbmVFbGVtZW50KGNoaWxkcmVuLCBkb21TYWZlUHJvcHMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoY2hpbGRyZW4pKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoRnJhZ21lbnQsIG51bGwsIC4uLmNoaWxkcmVuLm1hcCgoY2hpbGQsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChSZWFjdC5pc1ZhbGlkRWxlbWVudChjaGlsZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBSZWFjdC5jbG9uZUVsZW1lbnQoY2hpbGQsIE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgZG9tU2FmZVByb3BzKSwgeyBrZXk6IGNoaWxkLmtleSB8fCBpbmRleCB9KSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNoaWxkO1xuICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9KTtcbiAgICAgICAgRmllbGRDb21wb25lbnQuZGlzcGxheU5hbWUgPSBgRmllbGQoJHtuYW1lfSlgO1xuICAgICAgICByZXR1cm4gRmllbGRDb21wb25lbnQ7XG4gICAgfSk7XG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgLy8gaGFuZGxlU3VibWl0IC8gaGFuZGxlUmVzZXQg4oCTIGZvciA8Zm9ybT4gZXZlbnQgaGFuZGxlcnNcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICBjb25zdCBoYW5kbGVTdWJtaXQgPSB1c2VFdmVudENhbGxiYWNrKChlKSA9PiBfX2F3YWl0ZXIodm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgZSA9PT0gbnVsbCB8fCBlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCB2YWxpZGF0ZWRWYWx1ZXMgPSB5aWVsZCB2YWxpZGF0ZUZpZWxkc0FzeW5jKCk7XG4gICAgICAgICAgICBvbkZpbmlzaCA9PT0gbnVsbCB8fCBvbkZpbmlzaCA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25GaW5pc2godmFsaWRhdGVkVmFsdWVzKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAvLyBPbmx5IGEgVkFMSURBVElPTiBmYWlsdXJlIHJlYWNoZXMgb25GaW5pc2hGYWlsZWQg4oCUIGFuIGV4Y2VwdGlvbiBvdXRcbiAgICAgICAgICAgIC8vIG9mIHRoZSBjb25zdW1lcidzIG93biBvbkZpbmlzaCBpcyBub3QgYSB2YWxpZGF0aW9uIHJlc3VsdCBhbmQgaXNcbiAgICAgICAgICAgIC8vIHN1cmZhY2VkIGluc3RlYWQgb2YgYmVpbmcgbWlzcmVwb3J0ZWQuXG4gICAgICAgICAgICBpZiAoZXJyIGluc3RhbmNlb2YgRm9ybVZhbGlkYXRpb25FcnJvcikge1xuICAgICAgICAgICAgICAgIG9uRmluaXNoRmFpbGVkID09PSBudWxsIHx8IG9uRmluaXNoRmFpbGVkID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkZpbmlzaEZhaWxlZCh7IHZhbHVlczogZXJyLnZhbHVlcywgZXJyb3JzOiBlcnIuZXJyb3JzIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignW1Byb0Zvcm1dIG9uRmluaXNoIHRocmV3IGR1cmluZyBzdWJtaXQ6JywgZXJyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0pKTtcbiAgICBjb25zdCBoYW5kbGVSZXNldCA9IHVzZUV2ZW50Q2FsbGJhY2soKGUpID0+IHtcbiAgICAgICAgZSA9PT0gbnVsbCB8fCBlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGZvcm1Db3JlLnJlc2V0RmllbGRzKCk7XG4gICAgICAgIG9uUmVzZXQgPT09IG51bGwgfHwgb25SZXNldCA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25SZXNldCgpO1xuICAgIH0pO1xuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIC8vIEZvcm1JbnN0YW5jZSDigJMgZW5oYW5jZWQgQVBJIGZvciBjb25zdW1lcnMuXG4gICAgLy9cbiAgICAvLyBFdmVyeSBtZXRob2QgaXMgd3JhcHBlZCBpbiB1c2VNZW1vaXplZEZuIChzdGFibGUgaWRlbnRpdHksIGFsd2F5cyByZWFkcyB0aGVcbiAgICAvLyBsYXRlc3Qgc3RvcmUgc3RhdGUpIHNvIHRoZSBpbnN0YW5jZSBvYmplY3QgaXRzZWxmIGlzIElERU5USVRZLVNUQUJMRSBmb3JcbiAgICAvLyB0aGUgbGlmZXRpbWUgb2YgdGhlIGZvcm0g4oCUIHRoaXMgaXMgd2hhdCBsZXRzIFByb0Zvcm0gcHVibGlzaCBpdCB0aHJvdWdoIHRoZVxuICAgIC8vIHN0YWJsZSBjb250ZXh0IHdpdGhvdXQgcmUtcmVuZGVyaW5nIHN1YnNjcmliZXJzIG9uIGVhY2gga2V5c3Ryb2tlLlxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIGNvbnN0IGdldEZpZWxkRXJyb3IgPSB1c2VNZW1vaXplZEZuKChuYW1lKSA9PiBzdG9yZS5nZXRTdGF0ZSgpLmVycm9yc1tuYW1lXSk7XG4gICAgY29uc3QgZ2V0RmllbGRXYXJuaW5nID0gdXNlTWVtb2l6ZWRGbigobmFtZSkgPT4gc3RvcmUuZ2V0U3RhdGUoKS53YXJuaW5nc1tuYW1lXSk7XG4gICAgY29uc3QgZ2V0RmllbGRzRXJyb3IgPSB1c2VNZW1vaXplZEZuKChuYW1lTGlzdCkgPT4ge1xuICAgICAgICBjb25zdCBlcnJvcnMgPSBzdG9yZS5nZXRTdGF0ZSgpLmVycm9ycztcbiAgICAgICAgaWYgKCFuYW1lTGlzdClcbiAgICAgICAgICAgIHJldHVybiBlcnJvcnM7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHt9O1xuICAgICAgICBuYW1lTGlzdC5mb3JFYWNoKChuYW1lKSA9PiB7XG4gICAgICAgICAgICBpZiAoZXJyb3JzW25hbWVdKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0W25hbWVdID0gZXJyb3JzW25hbWVdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9KTtcbiAgICBjb25zdCBpc0ZpZWxkVG91Y2hlZCA9IHVzZU1lbW9pemVkRm4oKG5hbWUpID0+IHN0b3JlLmdldFN0YXRlKCkudG91Y2hlZFtuYW1lXSB8fCBmYWxzZSk7XG4gICAgY29uc3QgaXNGaWVsZHNUb3VjaGVkID0gdXNlTWVtb2l6ZWRGbigobmFtZUxpc3QsIGFsbEZpZWxkc1RvdWNoZWQgPSBmYWxzZSkgPT4ge1xuICAgICAgICBjb25zdCB0b3VjaGVkID0gc3RvcmUuZ2V0U3RhdGUoKS50b3VjaGVkO1xuICAgICAgICBpZiAoIW5hbWVMaXN0KSB7XG4gICAgICAgICAgICByZXR1cm4gT2JqZWN0LmtleXModG91Y2hlZCkuc29tZSgoa2V5KSA9PiB0b3VjaGVkW2tleV0pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChhbGxGaWVsZHNUb3VjaGVkKSB7XG4gICAgICAgICAgICByZXR1cm4gbmFtZUxpc3QuZXZlcnkoKG5hbWUpID0+IHRvdWNoZWRbbmFtZV0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuYW1lTGlzdC5zb21lKChuYW1lKSA9PiB0b3VjaGVkW25hbWVdKTtcbiAgICB9KTtcbiAgICBjb25zdCBpc0ZpZWxkVmFsaWRhdGluZyA9IHVzZU1lbW9pemVkRm4oKG5hbWUpID0+IHN0b3JlLmdldFN0YXRlKCkudmFsaWRhdGluZ1tuYW1lXSB8fCBmYWxzZSk7XG4gICAgY29uc3Qgc2V0RmllbGRzRXJyb3IgPSB1c2VNZW1vaXplZEZuKChmaWVsZHNFcnJvcikgPT4ge1xuICAgICAgICBPYmplY3QuZW50cmllcyhmaWVsZHNFcnJvcikuZm9yRWFjaCgoW25hbWUsIGVycm9yXSkgPT4ge1xuICAgICAgICAgICAgZm9ybUNvcmUuc2V0RmllbGRFcnJvcihuYW1lLCBlcnJvcik7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuICAgIGNvbnN0IHNldEZpZWxkVG91Y2hlZCA9IHVzZU1lbW9pemVkRm4oKG5hbWUsIGlzVG91Y2hlZCA9IHRydWUpID0+IHtcbiAgICAgICAgc3RvcmUuc2V0U3RhdGUoeyB0b3VjaGVkOiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIHN0b3JlLmdldFN0YXRlKCkudG91Y2hlZCksIHsgW25hbWVdOiBpc1RvdWNoZWQgfSkgfSk7XG4gICAgfSk7XG4gICAgY29uc3Qgc2V0RmllbGRzVG91Y2hlZCA9IHVzZU1lbW9pemVkRm4oKGZpZWxkc1RvdWNoKSA9PiB7XG4gICAgICAgIHN0b3JlLnNldFN0YXRlKHsgdG91Y2hlZDogT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBzdG9yZS5nZXRTdGF0ZSgpLnRvdWNoZWQpLCBmaWVsZHNUb3VjaCkgfSk7XG4gICAgfSk7XG4gICAgY29uc3QgcmVzZXRGb3JtRmllbGRzID0gdXNlTWVtb2l6ZWRGbigoZmllbGRzKSA9PiB7XG4gICAgICAgIGlmICghZmllbGRzKSB7XG4gICAgICAgICAgICBmb3JtQ29yZS5yZXNldEZpZWxkcygpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8vIE1vdW50LWZyb3plbiBpbml0aWFsVmFsdWVzIOKAlCBjb25zaXN0ZW50IHdpdGggdGhlIGZ1bGwgcmVzZXRGaWVsZHMuXG4gICAgICAgIC8vIFJlYWRzIEFORCB3cml0ZXMgYXJlIG5lc3RlZC1wYXRoIGF3YXJlLCBzbyBkb3QtcGF0aCBuYW1lc1xuICAgICAgICAvLyAoYGFkZHJlc3MuY2l0eWAsIGBpdGVtcy4wLnRpdGxlYCkgcmVzZXQgY29ycmVjdGx5IGluc3RlYWQgb2YgcHJvYmluZyBhXG4gICAgICAgIC8vIGxpdGVyYWwga2V5IGFuZCBzaGFsbG93LW1lcmdpbmcgb25lIGJhY2suXG4gICAgICAgIGNvbnN0IGluaXRpYWxWYWx1ZXMgPSBmb3JtQ29yZS5nZXRJbml0aWFsVmFsdWVzKCk7XG4gICAgICAgIGNvbnN0IHN0YXRlID0gc3RvcmUuZ2V0U3RhdGUoKTtcbiAgICAgICAgbGV0IG5ld1ZhbHVlcyA9IHN0YXRlLnZhbHVlcztcbiAgICAgICAgZmllbGRzLmZvckVhY2goKGZpZWxkKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBpbml0aWFsID0gcmVzb2x2ZVZhbHVlKGluaXRpYWxWYWx1ZXMsIGZpZWxkKTtcbiAgICAgICAgICAgIG5ld1ZhbHVlcyA9IGZpZWxkLmluY2x1ZGVzKCcuJylcbiAgICAgICAgICAgICAgICA/IHNldE5lc3RlZFZhbHVlKG5ld1ZhbHVlcywgZmllbGQsIGluaXRpYWwpXG4gICAgICAgICAgICAgICAgOiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIG5ld1ZhbHVlcyksIHsgW2ZpZWxkXTogaW5pdGlhbCB9KTtcbiAgICAgICAgfSk7XG4gICAgICAgIC8vIExpa2UgdGhlIGZ1bGwgcmVzZXQ6IGNsZWFyIEFMTCBwZXItZmllbGQgbWV0YSAoZXJyb3JzIEFORCB3YXJuaW5ncyBBTkRcbiAgICAgICAgLy8gdG91Y2hlZC92YWxpZGF0aW5nKSwgaW52YWxpZGF0ZSBpbi1mbGlnaHQgdmFsaWRhdGlvbiBydW5zLCBhbmQgbGFuZFxuICAgICAgICAvLyBldmVyeXRoaW5nIGluIE9ORSBjb21taXQuIE5vIG9uVmFsdWVzQ2hhbmdlIOKAlCByZXNldCBpcyBub3QgYSBjaGFuZ2VcbiAgICAgICAgLy8gZXZlbnQgb24gZWl0aGVyIHBhdGguXG4gICAgICAgIGZvcm1Db3JlLmludmFsaWRhdGVWYWxpZGF0aW9uUnVucyhmaWVsZHMpO1xuICAgICAgICBjb25zdCBuZXdFcnJvcnMgPSBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZS5lcnJvcnMpO1xuICAgICAgICBjb25zdCBuZXdXYXJuaW5ncyA9IE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLndhcm5pbmdzKTtcbiAgICAgICAgY29uc3QgbmV3VG91Y2hlZCA9IE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLnRvdWNoZWQpO1xuICAgICAgICBjb25zdCBuZXdWYWxpZGF0aW5nID0gT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUudmFsaWRhdGluZyk7XG4gICAgICAgIGZpZWxkcy5mb3JFYWNoKChmaWVsZCkgPT4ge1xuICAgICAgICAgICAgZGVsZXRlIG5ld0Vycm9yc1tmaWVsZF07XG4gICAgICAgICAgICBkZWxldGUgbmV3V2FybmluZ3NbZmllbGRdO1xuICAgICAgICAgICAgZGVsZXRlIG5ld1RvdWNoZWRbZmllbGRdO1xuICAgICAgICAgICAgZGVsZXRlIG5ld1ZhbGlkYXRpbmdbZmllbGRdO1xuICAgICAgICB9KTtcbiAgICAgICAgc3RvcmUuc2V0U3RhdGUoe1xuICAgICAgICAgICAgdmFsdWVzOiBuZXdWYWx1ZXMsXG4gICAgICAgICAgICBlcnJvcnM6IG5ld0Vycm9ycyxcbiAgICAgICAgICAgIHdhcm5pbmdzOiBuZXdXYXJuaW5ncyxcbiAgICAgICAgICAgIHRvdWNoZWQ6IG5ld1RvdWNoZWQsXG4gICAgICAgICAgICB2YWxpZGF0aW5nOiBuZXdWYWxpZGF0aW5nLFxuICAgICAgICB9KTtcbiAgICB9KTtcbiAgICBjb25zdCBzdWJtaXRXaXRoVmFsaWRhdGlvbiA9IHVzZU1lbW9pemVkRm4oKGNhbGxiYWNrKSA9PiBfX2F3YWl0ZXIodm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgbGV0IHZhbGlkYXRlZFZhbHVlcztcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHZhbGlkYXRlZFZhbHVlcyA9IHlpZWxkIHZhbGlkYXRlRmllbGRzQXN5bmMoKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoX2EpIHtcbiAgICAgICAgICAgIC8vIFZhbGlkYXRpb24gZmFpbHVyZSDigJQgdGhlIGZpZWxkIGVycm9ycyBhcmUgYWxyZWFkeSBpbiB0aGUgc3RvcmUuXG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjYWxsYmFjaykge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICB5aWVsZCBjYWxsYmFjayh2YWxpZGF0ZWRWYWx1ZXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgIC8vIEEgdGhyb3dpbmcgY2FsbGJhY2sgaXMgYSBjb25zdW1lciBidWcsIG5vdCBhIHZhbGlkYXRpb24gZmFpbHVyZSDigJRcbiAgICAgICAgICAgICAgICAvLyBzdXJmYWNlIGl0IChtaXJyb3JpbmcgcmMtZmllbGQtZm9ybSdzIG9uRmluaXNoIGhhbmRsaW5nKSBpbnN0ZWFkXG4gICAgICAgICAgICAgICAgLy8gb2Ygc3dhbGxvd2luZyBpdCBzaWxlbnRseS5cbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdbUHJvRm9ybV0gc3VibWl0IGNhbGxiYWNrIHRocmV3OicsIGVycik7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdmFsaWRhdGVkVmFsdWVzO1xuICAgIH0pKTtcbiAgICBjb25zdCBmb3JtSW5zdGFuY2UgPSB1c2VNZW1vKCgpID0+IChPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIGZvcm1Db3JlLmZvcm1JbnN0YW5jZSksIHsgZ2V0RmllbGRWYWx1ZTogZm9ybUNvcmUuZ2V0RmllbGRWYWx1ZSwgZ2V0RmllbGRzVmFsdWU6IGZvcm1Db3JlLmdldEZpZWxkc1ZhbHVlLCB2YWxpZGF0ZUZpZWxkczogdmFsaWRhdGVGaWVsZHNBc3luYywgc2V0RmllbGRWYWx1ZTogZm9ybUNvcmUuc2V0RmllbGRWYWx1ZSwgc2V0RmllbGRzVmFsdWU6IGZvcm1Db3JlLnNldEZpZWxkc1ZhbHVlLCBnZXRGaWVsZEVycm9yOiBnZXRGaWVsZEVycm9yLCBnZXRGaWVsZFdhcm5pbmc6IGdldEZpZWxkV2FybmluZywgZ2V0RmllbGRzRXJyb3I6IGdldEZpZWxkc0Vycm9yLCBpc0ZpZWxkVG91Y2hlZDogaXNGaWVsZFRvdWNoZWQsIGlzRmllbGRzVG91Y2hlZDogaXNGaWVsZHNUb3VjaGVkLCBpc0ZpZWxkVmFsaWRhdGluZzogaXNGaWVsZFZhbGlkYXRpbmcsIHNldEZpZWxkRXJyb3I6IGZvcm1Db3JlLnNldEZpZWxkRXJyb3IsIHNldEZpZWxkc0Vycm9yLCBzZXRGaWVsZFRvdWNoZWQ6IHNldEZpZWxkVG91Y2hlZCwgc2V0RmllbGRzVG91Y2hlZCwgcmVzZXRGaWVsZHM6IHJlc2V0Rm9ybUZpZWxkcywgc3VibWl0OiBzdWJtaXRXaXRoVmFsaWRhdGlvbiwgZGVmaW5lRmllbGQsIHJlZ2lzdGVyRmllbGQ6IGZvcm1Db3JlLnJlZ2lzdGVyRmllbGQsIHVucmVnaXN0ZXJGaWVsZDogZm9ybUNvcmUudW5yZWdpc3RlckZpZWxkIH0pKSwgW1xuICAgICAgICBmb3JtQ29yZS5mb3JtSW5zdGFuY2UsXG4gICAgICAgIGZvcm1Db3JlLmdldEZpZWxkVmFsdWUsXG4gICAgICAgIGZvcm1Db3JlLmdldEZpZWxkc1ZhbHVlLFxuICAgICAgICBmb3JtQ29yZS5zZXRGaWVsZFZhbHVlLFxuICAgICAgICBmb3JtQ29yZS5zZXRGaWVsZHNWYWx1ZSxcbiAgICAgICAgZm9ybUNvcmUuc2V0RmllbGRFcnJvcixcbiAgICAgICAgZm9ybUNvcmUucmVnaXN0ZXJGaWVsZCxcbiAgICAgICAgZm9ybUNvcmUudW5yZWdpc3RlckZpZWxkLFxuICAgICAgICB2YWxpZGF0ZUZpZWxkc0FzeW5jLFxuICAgICAgICBnZXRGaWVsZEVycm9yLFxuICAgICAgICBnZXRGaWVsZFdhcm5pbmcsXG4gICAgICAgIGdldEZpZWxkc0Vycm9yLFxuICAgICAgICBpc0ZpZWxkVG91Y2hlZCxcbiAgICAgICAgaXNGaWVsZHNUb3VjaGVkLFxuICAgICAgICBpc0ZpZWxkVmFsaWRhdGluZyxcbiAgICAgICAgc2V0RmllbGRzRXJyb3IsXG4gICAgICAgIHNldEZpZWxkVG91Y2hlZCxcbiAgICAgICAgc2V0RmllbGRzVG91Y2hlZCxcbiAgICAgICAgcmVzZXRGb3JtRmllbGRzLFxuICAgICAgICBzdWJtaXRXaXRoVmFsaWRhdGlvbixcbiAgICAgICAgZGVmaW5lRmllbGQsXG4gICAgXSk7XG4gICAgLy8gRnVuY3Rpb24tZm9ybSBydWxlcyBnZXQgdGhlIEZVTEwgZm9ybSBpbnN0YW5jZSAoZXJyb3IgZ2V0dGVycywgdG91Y2hlZFxuICAgIC8vIHN0YXRlLCBtdXRhdG9ycykgaW5zdGVhZCBvZiB0aGUgYmFyZSBjb3JlIG1ldGhvZHMuIFJlZiB3cml0ZSDigJQgY2hlYXAgYW5kXG4gICAgLy8gaWRlbXBvdGVudCBwZXIgcmVuZGVyLlxuICAgIGZvcm1Db3JlLnNldFJ1bGVDb250ZXh0SW5zdGFuY2UoZm9ybUluc3RhbmNlKTtcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAvLyBJbnRlcm5hbHMg4oCTIGV4cG9zZWQgZm9yIFByb0Zvcm0gaW50ZWdyYXRpb24uIERhdGEgZmllbGRzIGFyZSBHRVRURVJTIHRoYXRcbiAgICAvLyByZWFkIHRoZSBsaXZlIHN0b3JlLCBzbyB0aGUgb2JqZWN0IGlzIGlkZW50aXR5LXN0YWJsZSB5ZXQgbmV2ZXIgc3RhbGUuXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgY29uc3QgaW50ZXJuYWxzID0gdXNlTWVtbygoKSA9PiAoe1xuICAgICAgICBnZXQgdmFsdWVzKCkge1xuICAgICAgICAgICAgcmV0dXJuIHN0b3JlLmdldFN0YXRlKCkudmFsdWVzO1xuICAgICAgICB9LFxuICAgICAgICBnZXQgZXJyb3JzKCkge1xuICAgICAgICAgICAgcmV0dXJuIHN0b3JlLmdldFN0YXRlKCkuZXJyb3JzO1xuICAgICAgICB9LFxuICAgICAgICBnZXQgd2FybmluZ3MoKSB7XG4gICAgICAgICAgICByZXR1cm4gc3RvcmUuZ2V0U3RhdGUoKS53YXJuaW5ncztcbiAgICAgICAgfSxcbiAgICAgICAgZ2V0IHRvdWNoZWQoKSB7XG4gICAgICAgICAgICByZXR1cm4gc3RvcmUuZ2V0U3RhdGUoKS50b3VjaGVkO1xuICAgICAgICB9LFxuICAgICAgICBnZXQgdmFsaWRhdGluZygpIHtcbiAgICAgICAgICAgIHJldHVybiBzdG9yZS5nZXRTdGF0ZSgpLnZhbGlkYXRpbmc7XG4gICAgICAgIH0sXG4gICAgICAgIGZpZWxkUnVsZXM6IGZvcm1Db3JlLmZpZWxkUnVsZXMsXG4gICAgICAgIHNldEZpZWxkVmFsdWU6IGZvcm1Db3JlLnNldEZpZWxkVmFsdWUsXG4gICAgICAgIHNldEZpZWxkRXJyb3I6IGZvcm1Db3JlLnNldEZpZWxkRXJyb3IsXG4gICAgICAgIHNldEZpZWxkV2FybmluZzogZm9ybUNvcmUuc2V0RmllbGRXYXJuaW5nLFxuICAgICAgICB2YWxpZGF0ZUZpZWxkQXN5bmMsXG4gICAgICAgIHJlZ2lzdGVyRmllbGQ6IGZvcm1Db3JlLnJlZ2lzdGVyRmllbGQsXG4gICAgICAgIHVucmVnaXN0ZXJGaWVsZDogZm9ybUNvcmUudW5yZWdpc3RlckZpZWxkLFxuICAgICAgICByZXRhaW5GaWVsZDogZm9ybUNvcmUucmV0YWluRmllbGQsXG4gICAgICAgIHJlbGVhc2VGaWVsZDogZm9ybUNvcmUucmVsZWFzZUZpZWxkLFxuICAgICAgICBoYW5kbGVTdWJtaXQsXG4gICAgICAgIGhhbmRsZVJlc2V0LFxuICAgIH0pLCBbXG4gICAgICAgIHN0b3JlLFxuICAgICAgICBmb3JtQ29yZS5maWVsZFJ1bGVzLFxuICAgICAgICBmb3JtQ29yZS5zZXRGaWVsZFZhbHVlLFxuICAgICAgICBmb3JtQ29yZS5zZXRGaWVsZEVycm9yLFxuICAgICAgICBmb3JtQ29yZS5zZXRGaWVsZFdhcm5pbmcsXG4gICAgICAgIHZhbGlkYXRlRmllbGRBc3luYyxcbiAgICAgICAgZm9ybUNvcmUucmVnaXN0ZXJGaWVsZCxcbiAgICAgICAgZm9ybUNvcmUudW5yZWdpc3RlckZpZWxkLFxuICAgICAgICBmb3JtQ29yZS5yZXRhaW5GaWVsZCxcbiAgICAgICAgZm9ybUNvcmUucmVsZWFzZUZpZWxkLFxuICAgICAgICBoYW5kbGVTdWJtaXQsXG4gICAgICAgIGhhbmRsZVJlc2V0LFxuICAgIF0pO1xuICAgIHJldHVybiB7IGZvcm1JbnN0YW5jZSwgaW50ZXJuYWxzLCBzdG9yZSB9O1xufTtcbmV4cG9ydCBkZWZhdWx0IHVzZUZvcm07IixudWxsXSwic291cmNlUm9vdCI6Ii4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYyJ9
788
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNvbXBvbmVudHMvUHJvRm9ybS9jb3JlL2hvb2tzL3VzZUZvcm0uanMiLCJjb21wb25lbnRzL1Byb0Zvcm0vY29yZS9zcmMvY29tcG9uZW50cy9Qcm9Gb3JtL2NvcmUvaG9va3MvdXNlRm9ybS50cyJdLCJuYW1lcyI6WyJlIiwidCIsInIiLCJTeW1ib2wiLCJuIiwiaXRlcmF0b3IiLCJvIiwidG9TdHJpbmdUYWciLCJpIiwiYyIsInByb3RvdHlwZSIsIkdlbmVyYXRvciIsInUiLCJPYmplY3QiLCJjcmVhdGUiLCJfcmVnZW5lcmF0b3JEZWZpbmUyIiwiZiIsInAiLCJ5IiwiRyIsInYiLCJhIiwiZCIsImJpbmQiLCJsZW5ndGgiLCJsIiwiVHlwZUVycm9yIiwiY2FsbCIsImRvbmUiLCJ2YWx1ZSIsIkdlbmVyYXRvckZ1bmN0aW9uIiwiR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUiLCJnZXRQcm90b3R5cGVPZiIsInNldFByb3RvdHlwZU9mIiwiX19wcm90b19fIiwiZGlzcGxheU5hbWUiLCJfcmVnZW5lcmF0b3IiLCJ3IiwibSIsImRlZmluZVByb3BlcnR5IiwiX3JlZ2VuZXJhdG9yRGVmaW5lIiwiX2ludm9rZSIsImVudW1lcmFibGUiLCJjb25maWd1cmFibGUiLCJ3cml0YWJsZSIsIl9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyIiwiQXJyYXkiLCJpc0FycmF5IiwiX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IiwiX24iLCJGIiwicyIsIm5leHQiLCJfYXJyYXlMaWtlVG9BcnJheSIsInRvU3RyaW5nIiwic2xpY2UiLCJjb25zdHJ1Y3RvciIsIm5hbWUiLCJmcm9tIiwidGVzdCIsIl9fYXdhaXRlciIsInRoaXNBcmciLCJfYXJndW1lbnRzIiwiUCIsImdlbmVyYXRvciIsImFkb3B0IiwicmVzb2x2ZSIsIlByb21pc2UiLCJyZWplY3QiLCJmdWxmaWxsZWQiLCJzdGVwIiwicmVqZWN0ZWQiLCJyZXN1bHQiLCJ0aGVuIiwiYXBwbHkiLCJfX3Jlc3QiLCJoYXNPd25Qcm9wZXJ0eSIsImluZGV4T2YiLCJnZXRPd25Qcm9wZXJ0eVN5bWJvbHMiLCJwcm9wZXJ0eUlzRW51bWVyYWJsZSIsInVzZU1lbW8iLCJ1c2VFZmZlY3QiLCJ1c2VSZWYiLCJtZW1vIiwiRnJhZ21lbnQiLCJSZWFjdCIsInVzZUV2ZW50Q2FsbGJhY2siLCJ1c2VNZW1vaXplZEZuIiwidXNlRm9ybUNvcmUiLCJyZXNvbHZlVmFsdWUiLCJzZXROZXN0ZWRWYWx1ZSIsImNvZXJjZUZhaWx1cmVSZWFzb24iLCJmaWx0ZXJSdWxlc0J5VHJpZ2dlciIsIm5vcm1hbGl6ZVRyaWdnZXJzIiwicmVzb2x2ZVJ1bGVzIiwicnVuUnVsZXNBc3luYyIsInVzZVN0b3JlU2VsZWN0b3IiLCJzaGFsbG93RXF1YWxBcnJheXMiLCJzYW1lVmFsaWRhdGlvbk5vZGUiLCJGb3JtVmFsaWRhdGlvbkVycm9yIiwiYXNSdWxlQXJyYXkiLCJydWxlIiwicnVsZUhhc1ZhbGlkYXRvciIsInZhbGlkYXRvciIsImRlZmF1bHRGaWVsZCIsInNvbWUiLCJmaWVsZHMiLCJ2YWx1ZXMiLCJzdWIiLCJoYXNSZXNvbHZlZFZhbGlkYXRvciIsInJlc29sdmVkIiwidXNlRm9ybSIsImNvbmZpZyIsImFyZ3VtZW50cyIsInVuZGVmaW5lZCIsIm9uRmluaXNoIiwib25GaW5pc2hGYWlsZWQiLCJvblJlc2V0IiwiX2NvbmZpZyR2YWxpZGF0ZVRyaWdnIiwidmFsaWRhdGVUcmlnZ2VyIiwiZm9ybUNvcmUiLCJzdG9yZSIsImxhc3RBc3luY0Vwb2NoUmVmIiwibWFya1ZhbGlkYXRpbmciLCJuYW1lcyIsImFzc2lnbiIsImdldFN0YXRlIiwidmFsaWRhdGluZyIsImZvckVhY2giLCJzZXRTdGF0ZSIsImNvbW1pdFJ1bGVPdXRjb21lcyIsIm91dGNvbWVzIiwiY2xlYXJWYWxpZGF0aW5nIiwic3RhdGUiLCJlcnJvcnNDaGFuZ2VkIiwid2FybmluZ3NDaGFuZ2VkIiwibmV3RXJyb3JzIiwiZXJyb3JzIiwibmV3V2FybmluZ3MiLCJ3YXJuaW5ncyIsIl9pdGVyYXRvciIsIl9zdGVwIiwiX3N0ZXAkdmFsdWUiLCJlcnJvciIsIndhcm5pbmciLCJlcnIiLCJmbGFnc1RvQ2xlYXIiLCJmaWx0ZXIiLCJwYXRjaCIsIm5ld1ZhbGlkYXRpbmciLCJrZXlzIiwidmFsaWRhdGVGaWVsZEFzeW5jIiwicnVsZXMiLCJfY2FsbGVlIiwiX2EiLCJlcG9jaCIsImZsYWdnZWQiLCJvdXRjb21lIiwiX3lpZWxkJHJ1blJ1bGVzQXN5bmMiLCJpc0N1cnJlbnQiLCJjbGVhckZsYWdzIiwiX3QiLCJfY29udGV4dCIsImlzVmFsaWQiLCJiZWdpblZhbGlkYXRpb25SdW4iLCJnZXRGaWVsZHNWYWx1ZSIsImdldFJ1bGVDb250ZXh0SW5zdGFuY2UiLCJmbGFnZ2VkTmFtZSIsImN1cnJlbnQiLCJpc1ZhbGlkYXRpb25SdW5DdXJyZW50IiwiaGFuZGxlRmllbGRCbHVyIiwiZmllbGRUcmlnZ2VyIiwiX2NhbGxlZTIiLCJ0b3VjaGVkIiwiYXBwbGljYWJsZSIsIl9jb250ZXh0MiIsIl9kZWZpbmVQcm9wZXJ0eSIsImdldEZpZWxkUnVsZXMiLCJ2YWxpZGF0ZUZpZWxkc0FzeW5jIiwibmFtZUxpc3QiLCJfY2FsbGVlNCIsImZpZWxkc1RvVmFsaWRhdGUiLCJmaWVsZEVycm9ycyIsInJlc29sdmVkQnlGaWVsZCIsImVwb2NoQnlGaWVsZCIsIl9pdGVyYXRvcjIiLCJfc3RlcDIiLCJfY29udGV4dDQiLCJmaWVsZFJ1bGVzIiwiTWFwIiwic2V0IiwiZ2V0IiwiYWxsIiwibWFwIiwiX2NhbGxlZTMiLCJfeWllbGQkcnVuUnVsZXNBc3luYzIiLCJfdDIiLCJfY29udGV4dDMiLCJwdXNoIiwicmVkdWNlIiwiYWNjIiwiZGVmaW5lRmllbGQiLCJmaWVsZE9wdGlvbnMiLCJfZmllbGRPcHRpb25zJHJ1bGVzIiwiRmllbGRDb21wb25lbnQiLCJjaGlsZHJlbiIsInJlbmRlciIsInByb3BzIiwiX3VzZVN0b3JlU2VsZWN0b3IiLCJfdXNlU3RvcmVTZWxlY3RvcjIiLCJfc2xpY2VkVG9BcnJheSIsImZpZWxkVmFsdWUiLCJmaWVsZEVycm9yIiwiZmllbGRUb3VjaGVkIiwiZmllbGRWYWxpZGF0aW5nIiwicmV0YWluRmllbGQiLCJleGlzdGluZ1J1bGVzIiwicmVnaXN0ZXJGaWVsZCIsInJlbGVhc2VGaWVsZCIsImhhbmRsZUZpZWxkQ2hhbmdlIiwic2V0RmllbGRWYWx1ZSIsImhhbmRsZUJsdXIiLCJmaWVsZFByb3BzIiwib25DaGFuZ2UiLCJvbkJsdXIiLCJoYW5kbGVNZXJnZUNoYW5nZSIsIl90eXBlb2YiLCJ0YXJnZXQiLCJpc1ZhbGlkRWxlbWVudCIsImhhbmRsZU1lcmdlQmx1ciIsImRvbVNhZmVQcm9wcyIsImNsb25lRWxlbWVudCIsImNyZWF0ZUVsZW1lbnQiLCJjb25jYXQiLCJfdG9Db25zdW1hYmxlQXJyYXkiLCJjaGlsZCIsImluZGV4Iiwia2V5IiwiaGFuZGxlU3VibWl0IiwiX2NhbGxlZTUiLCJ2YWxpZGF0ZWRWYWx1ZXMiLCJfdDMiLCJfY29udGV4dDUiLCJwcmV2ZW50RGVmYXVsdCIsImNvbnNvbGUiLCJoYW5kbGVSZXNldCIsInJlc2V0RmllbGRzIiwiZ2V0RmllbGRFcnJvciIsImdldEZpZWxkV2FybmluZyIsImdldEZpZWxkc0Vycm9yIiwiaXNGaWVsZFRvdWNoZWQiLCJpc0ZpZWxkc1RvdWNoZWQiLCJhbGxGaWVsZHNUb3VjaGVkIiwiZXZlcnkiLCJpc0ZpZWxkVmFsaWRhdGluZyIsInNldEZpZWxkc0Vycm9yIiwiZmllbGRzRXJyb3IiLCJlbnRyaWVzIiwiX3JlZiIsIl9yZWYyIiwic2V0RmllbGRFcnJvciIsInNldEZpZWxkVG91Y2hlZCIsImlzVG91Y2hlZCIsInNldEZpZWxkc1RvdWNoZWQiLCJmaWVsZHNUb3VjaCIsInJlc2V0Rm9ybUZpZWxkcyIsImluaXRpYWxWYWx1ZXMiLCJnZXRJbml0aWFsVmFsdWVzIiwibmV3VmFsdWVzIiwiZmllbGQiLCJpbml0aWFsIiwiaW5jbHVkZXMiLCJpbnZhbGlkYXRlVmFsaWRhdGlvblJ1bnMiLCJuZXdUb3VjaGVkIiwic3VibWl0V2l0aFZhbGlkYXRpb24iLCJjYWxsYmFjayIsIl9jYWxsZWU2IiwiX3Q0IiwiX3Q1IiwiX2NvbnRleHQ2IiwiZm9ybUluc3RhbmNlIiwiZ2V0RmllbGRWYWx1ZSIsInZhbGlkYXRlRmllbGRzIiwic2V0RmllbGRzVmFsdWUiLCJzdWJtaXQiLCJ1bnJlZ2lzdGVyRmllbGQiLCJzZXRSdWxlQ29udGV4dEluc3RhbmNlIiwiaW50ZXJuYWxzIiwic2V0RmllbGRXYXJuaW5nIl0sIm1hcHBpbmdzIjoiOzs7OzBCQUNBLHVLQUFBQSxDQUFBLEVBQUFDLENBQUEsRUFBQUMsQ0FBQSx3QkFBQUMsTUFBQSxHQUFBQSxNQUFBLE9BQUFDLENBQUEsR0FBQUYsQ0FBQSxDQUFBRyxRQUFBLGtCQUFBQyxDQUFBLEdBQUFKLENBQUEsQ0FBQUssV0FBQSw4QkFBQUMsRUFBQU4sQ0FBQSxFQUFBRSxDQUFBLEVBQUFFLENBQUEsRUFBQUUsQ0FBQSxRQUFBQyxDQUFBLEdBQUFMLENBQUEsSUFBQUEsQ0FBQSxDQUFBTSxTQUFBLFlBQUFDLFNBQUEsR0FBQVAsQ0FBQSxHQUFBTyxTQUFBLEVBQUFDLENBQUEsR0FBQUMsTUFBQSxDQUFBQyxNQUFBLENBQUFMLENBQUEsQ0FBQUMsU0FBQSxVQUFBSyxtQkFBQSxDQUFBSCxDQUFBLHVCQUFBVixDQUFBLEVBQUFFLENBQUEsRUFBQUUsQ0FBQSxRQUFBRSxDQUFBLEVBQUFDLENBQUEsRUFBQUcsQ0FBQSxFQUFBSSxDQUFBLE1BQUFDLENBQUEsR0FBQVgsQ0FBQSxRQUFBWSxDQUFBLE9BQUFDLENBQUEsS0FBQUYsQ0FBQSxLQUFBYixDQUFBLEtBQUFnQixDQUFBLEVBQUFwQixDQUFBLEVBQUFxQixDQUFBLEVBQUFDLENBQUEsRUFBQU4sQ0FBQSxFQUFBTSxDQUFBLENBQUFDLElBQUEsQ0FBQXZCLENBQUEsTUFBQXNCLENBQUEsV0FBQUEsRUFBQXJCLENBQUEsRUFBQUMsQ0FBQSxXQUFBTSxDQUFBLEdBQUFQLENBQUEsRUFBQVEsQ0FBQSxNQUFBRyxDQUFBLEdBQUFaLENBQUEsRUFB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TUFDckNvRSxlQUFlLEVBQUVySyxRQUFRLENBQUNxSyxlQUFlO01BQ3pDdEUsV0FBVyxFQUFFL0YsUUFBUSxDQUFDK0YsV0FBVztNQUNqQ0csWUFBWSxFQUFFbEcsUUFBUSxDQUFDa0csWUFBWTtNQUNuQ29CLFlBQVksRUFBWkEsWUFBWTtNQUNaTyxXQUFXLEVBQVhBO0lENUpGLENDNkpDO0VBQUEsQ0FBQyxFQUNGLENBQ0U1SCxLQUFLLEVBQ0xELFFBQVEsQ0FBQ29FLFVBQVUsRUFDbkJwRSxRQUFRLENBQUNvRyxhQUFhLEVBQ3RCcEcsUUFBUSxDQUFDNEksYUFBYSxFQUN0QjVJLFFBQVEsQ0FBQ3dLLGVBQWUsRUFDeEJ6SSxrQkFBa0IsRUFDbEIvQixRQUFRLENBQUNpRyxhQUFhLEVBQ3RCakcsUUFBUSxDQUFDcUssZUFBZSxFQUN4QnJLLFFBQVEsQ0FBQytGLFdBQVcsRUFDcEIvRixRQUFRLENBQUNrRyxZQUFZLEVBQ3JCb0IsWUFBWSxFQUNaTyxXQUFXLENBQ1osQ0FDRjtFQUVELE9BQU87SUFBRW1DLFlBQVksRUFBWkEsWUFBWTtJQUFFTyxTQUFTLEVBQVRBLFNBQVM7SUFBRXRLLEtBQUssRUFBTEE7RUFBSyxDQUFFO0FBQzNDLENBQUM7QUFFRCxlQUFlVixPQUFPIiwiZmlsZSI6ImNvbXBvbmVudHMvUHJvRm9ybS9jb3JlL2hvb2tzL3VzZUZvcm0uanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgX19hd2FpdGVyID0gKHRoaXMgJiYgdGhpcy5fX2F3YWl0ZXIpIHx8IGZ1bmN0aW9uICh0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcbiAgICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH1cbiAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cbiAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xuICAgIH0pO1xufTtcbnZhciBfX3Jlc3QgPSAodGhpcyAmJiB0aGlzLl9fcmVzdCkgfHwgZnVuY3Rpb24gKHMsIGUpIHtcbiAgICB2YXIgdCA9IHt9O1xuICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSAmJiBlLmluZGV4T2YocCkgPCAwKVxuICAgICAgICB0W3BdID0gc1twXTtcbiAgICBpZiAocyAhPSBudWxsICYmIHR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzID09PSBcImZ1bmN0aW9uXCIpXG4gICAgICAgIGZvciAodmFyIGkgPSAwLCBwID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzKTsgaSA8IHAubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChlLmluZGV4T2YocFtpXSkgPCAwICYmIE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzLCBwW2ldKSlcbiAgICAgICAgICAgICAgICB0W3BbaV1dID0gc1twW2ldXTtcbiAgICAgICAgfVxuICAgIHJldHVybiB0O1xufTtcbmltcG9ydCB7IHVzZU1lbW8sIHVzZUVmZmVjdCwgdXNlUmVmLCBtZW1vLCBGcmFnbWVudCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgdXNlRXZlbnRDYWxsYmFjayBmcm9tICdAMW1vbmV5L2hvb2tzL3VzZUV2ZW50Q2FsbGJhY2snO1xuaW1wb3J0IHVzZU1lbW9pemVkRm4gZnJvbSAnQDFtb25leS9ob29rcy91c2VNZW1vaXplZEZuJztcbmltcG9ydCB7IHVzZUZvcm1Db3JlIH0gZnJvbSAnLi91c2VGb3JtQ29yZSc7XG5pbXBvcnQgeyByZXNvbHZlVmFsdWUsIHNldE5lc3RlZFZhbHVlIH0gZnJvbSAnLi4vcGF0aFV0aWxzJztcbmltcG9ydCB7IGNvZXJjZUZhaWx1cmVSZWFzb24sIGZpbHRlclJ1bGVzQnlUcmlnZ2VyLCBub3JtYWxpemVUcmlnZ2VycywgcmVzb2x2ZVJ1bGVzLCBydW5SdWxlc0FzeW5jLCB9IGZyb20gJy4uL3J1blJ1bGVzJztcbmltcG9ydCB7IHVzZVN0b3JlU2VsZWN0b3IsIHNoYWxsb3dFcXVhbEFycmF5cywgc2FtZVZhbGlkYXRpb25Ob2RlIH0gZnJvbSAnLi4vZm9ybVN0b3JlJztcbmltcG9ydCB7IEZvcm1WYWxpZGF0aW9uRXJyb3IgfSBmcm9tICcuLi92YWxpZGF0aW9uRXJyb3InO1xuLyoqXG4gKiBPbmx5IHJ1bGVzIHdpdGggYSBjdXN0b20gYHZhbGlkYXRvcmAgY2FuIGJlIGdlbnVpbmVseSBhc3luY2hyb25vdXMg4oCUXG4gKiBidWlsdGluIHJ1bGVzIHJlc29sdmUgd2l0aGluIGEgbWljcm90YXNrLCBzbyBmbGlwcGluZyBgdmFsaWRhdGluZ2AgZm9yXG4gKiB0aGVtIHdvdWxkIG9ubHkgY2h1cm4gc3Vic2NyaWJlcnMgd2l0aG91dCBldmVyIGJlaW5nIHZpc2libGUuIERlY2lkZWQgb25cbiAqIFJFU09MVkVEIHJ1bGVzOiBhIGZ1bmN0aW9uLWZvcm0gcnVsZSB0aGF0IHJlc29sdmVzIHRvIGJ1aWx0aW4tb25seSBjaGVja3NcbiAqIG11c3Qgbm90IGZsaWNrZXIgdGhlIGZsYWcuXG4gKlxuICogVGhlIGFzeW5jIGVuZ2luZSBhd2FpdHMgdmFsaWRhdG9ycyBuZXN0ZWQgaW5zaWRlIGBmaWVsZHNgIC8gYGRlZmF1bHRGaWVsZGBcbiAqIHRvbywgc28gdGhlIGRlY2lzaW9uIG11c3QgZGVzY2VuZCB0aGUgc2FtZSB3YXkg4oCUIG90aGVyd2lzZSBhIGRlZXAtb25seVxuICogdmFsaWRhdG9yIChlLmcuIGB7IGRlZmF1bHRGaWVsZDogeyB2YWxpZGF0b3IgfSB9YCkgcnVucyBwZW5kaW5nIHdpdGggdGhlXG4gKiBmbGFnIHN0dWNrIGZhbHNlLCBhbmQgYGlzRmllbGRWYWxpZGF0aW5nKG5hbWUpYCB1bmRlci1yZXBvcnRzIGZvciB0aGUgd2hvbGVcbiAqIHdpbmRvdy4gT3Zlci1mbGFnZ2luZyB3aGVuIHRoZSBkZWVwIHZhbGlkYXRvciB3b24ndCBhY3R1YWxseSBmaXJlIChlbXB0eSAvXG4gKiBwcmltaXRpdmUgdmFsdWUpIGlzIGFjY2VwdGFibGU6IHRoZSBmbGFnIGlzIGRlY2lkZWQgb24gcnVsZSBTSEFQRSwgZXhhY3RseVxuICogYXMgdGhlIHRvcC1sZXZlbCBjYXNlIGFscmVhZHkgb3Zlci1mbGFncyBhIHZhbGlkYXRvciBzaG9ydC1jaXJjdWl0ZWQgYnkgYW5cbiAqIGVhcmxpZXIgYnVpbHRpbiBmYWlsdXJlOyB0aGUgcnVuIGNsZWFycyBpdCBvbiBzZXR0bGUgZWl0aGVyIHdheS5cbiAqL1xuY29uc3QgYXNSdWxlQXJyYXkgPSAocnVsZSkgPT4gcnVsZSA/IChBcnJheS5pc0FycmF5KHJ1bGUpID8gcnVsZSA6IFtydWxlXSkgOiBbXTtcbmNvbnN0IHJ1bGVIYXNWYWxpZGF0b3IgPSAocnVsZSkgPT4ge1xuICAgIGlmICh0eXBlb2YgcnVsZS52YWxpZGF0b3IgPT09ICdmdW5jdGlvbicpXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIGlmIChhc1J1bGVBcnJheShydWxlLmRlZmF1bHRGaWVsZCkuc29tZShydWxlSGFzVmFsaWRhdG9yKSlcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgaWYgKHJ1bGUuZmllbGRzKSB7XG4gICAgICAgIHJldHVybiBPYmplY3QudmFsdWVzKHJ1bGUuZmllbGRzKS5zb21lKChzdWIpID0+IGFzUnVsZUFycmF5KHN1Yikuc29tZShydWxlSGFzVmFsaWRhdG9yKSk7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn07XG5jb25zdCBoYXNSZXNvbHZlZFZhbGlkYXRvciA9IChyZXNvbHZlZCkgPT4gcmVzb2x2ZWQuc29tZShydWxlSGFzVmFsaWRhdG9yKTtcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gdXNlRm9ybVxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5leHBvcnQgY29uc3QgdXNlRm9ybSA9IChjb25maWcgPSB7fSkgPT4ge1xuICAgIGNvbnN0IHsgb25GaW5pc2gsIG9uRmluaXNoRmFpbGVkLCBvblJlc2V0LCB2YWxpZGF0ZVRyaWdnZXIgPSAnb25DaGFuZ2UnLCB9ID0gY29uZmlnO1xuICAgIGNvbnN0IGZvcm1Db3JlID0gdXNlRm9ybUNvcmUoY29uZmlnKTtcbiAgICBjb25zdCB7IHN0b3JlIH0gPSBmb3JtQ29yZTtcbiAgICAvLyBFcG9jaCBvZiB0aGUgTEFURVNUIGFzeW5jIHJ1biB0aGF0IHJhaXNlZCBlYWNoIGZpZWxkJ3MgYHZhbGlkYXRpbmdgIGZsYWcuXG4gICAgLy8gQSBzZXR0bGluZyBydW4gY2xlYXJzIHRoZSBmbGFnIG9ubHkgd2hpbGUgaXQgaXMgc3RpbGwgdGhlIGxhdGVzdCByYWlzZXIg4oCUXG4gICAgLy8gYW4gb2xkZXIgcnVuIG11c3Qgbm90IGJsYW5rIHRoZSBzcGlubmVyIG9mIGEgbmV3ZXIgb25lLCBhbmQgYSBydW5cbiAgICAvLyBzdXBlcnNlZGVkIGJ5IGEgU1lOQyBjb21taXQgKHdoaWNoIG5ldmVyIHRvdWNoZXMgZmxhZ3MpIG11c3Qgc3RpbGwgY2xlYW5cbiAgICAvLyB1cCBhZnRlciBpdHNlbGYuXG4gICAgY29uc3QgbGFzdEFzeW5jRXBvY2hSZWYgPSB1c2VSZWYoe30pO1xuICAgIC8vIE1hcmsgZmllbGRzIGFzIHZhbGlkYXRpbmcgaW4gT05FIGNvbW1pdC4gdmFsaWRhdGluZyAvIHRvdWNoZWQgbGl2ZSBpbiB0aGVcbiAgICAvLyBzdG9yZSBhbG9uZ3NpZGUgdmFsdWVzIOKAlCBmbGlwcGluZyB0aGVtIChlLmcuIGFzeW5jIHZhbGlkYXRpb24gYXJvdW5kIGFcbiAgICAvLyBibHVyKSBtdXN0IG5vdCByZS1yZW5kZXIgdGhlIGZvcm0gcm9vdCwgb25seSB0aGUgZmllbGRzIHRoYXQgc3Vic2NyaWJlZC5cbiAgICBjb25zdCBtYXJrVmFsaWRhdGluZyA9IHVzZU1lbW9pemVkRm4oKG5hbWVzKSA9PiB7XG4gICAgICAgIGlmIChuYW1lcy5sZW5ndGggPT09IDApXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGNvbnN0IG5leHQgPSBPYmplY3QuYXNzaWduKHt9LCBzdG9yZS5nZXRTdGF0ZSgpLnZhbGlkYXRpbmcpO1xuICAgICAgICBuYW1lcy5mb3JFYWNoKChuYW1lKSA9PiB7XG4gICAgICAgICAgICBuZXh0W25hbWVdID0gdHJ1ZTtcbiAgICAgICAgfSk7XG4gICAgICAgIHN0b3JlLnNldFN0YXRlKHsgdmFsaWRhdGluZzogbmV4dCB9KTtcbiAgICB9KTtcbiAgICAvLyBGb2xkIHBlci1maWVsZCBydWxlIG91dGNvbWVzIGludG8gQVQgTU9TVCBvbmUgc3RvcmUgY29tbWl0OiBlcnJvcnMgYW5kXG4gICAgLy8gd2FybmluZ3MgYXJlIG1lcmdlZCBvdmVyIHRoZSBjdXJyZW50IG1hcHMgYW5kIHRoZSBgY2xlYXJWYWxpZGF0aW5nYCBmbGFnc1xuICAgIC8vIGFyZSByZW1vdmVkIGluIHRoZSBTQU1FIHBhdGNoLiBBIG5vLW9wIG91dGNvbWUgY29tbWl0cyBub3RoaW5nIGF0IGFsbCDigJRcbiAgICAvLyBwZXItZmllbGQgY29tbWl0cyBoZXJlIHByZXZpb3VzbHkgbWFkZSBzdWJtaXQtdGltZSB2YWxpZGF0aW9uIHN3ZWVwIGV2ZXJ5XG4gICAgLy8gc3Vic2NyaWJlciBPKGZpZWxkcykgdGltZXMuXG4gICAgY29uc3QgY29tbWl0UnVsZU91dGNvbWVzID0gdXNlTWVtb2l6ZWRGbigob3V0Y29tZXMsIGNsZWFyVmFsaWRhdGluZykgPT4ge1xuICAgICAgICBjb25zdCBzdGF0ZSA9IHN0b3JlLmdldFN0YXRlKCk7XG4gICAgICAgIGxldCBlcnJvcnNDaGFuZ2VkID0gZmFsc2U7XG4gICAgICAgIGxldCB3YXJuaW5nc0NoYW5nZWQgPSBmYWxzZTtcbiAgICAgICAgY29uc3QgbmV3RXJyb3JzID0gT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUuZXJyb3JzKTtcbiAgICAgICAgY29uc3QgbmV3V2FybmluZ3MgPSBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZS53YXJuaW5ncyk7XG4gICAgICAgIGZvciAoY29uc3QgeyBuYW1lLCBlcnJvciwgd2FybmluZyB9IG9mIG91dGNvbWVzKSB7XG4gICAgICAgICAgICBpZiAoZXJyb3IgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBpZiAobmFtZSBpbiBuZXdFcnJvcnMpIHtcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIG5ld0Vycm9yc1tuYW1lXTtcbiAgICAgICAgICAgICAgICAgICAgZXJyb3JzQ2hhbmdlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoIXNhbWVWYWxpZGF0aW9uTm9kZShuZXdFcnJvcnNbbmFtZV0sIGVycm9yKSkge1xuICAgICAgICAgICAgICAgIG5ld0Vycm9yc1tuYW1lXSA9IGVycm9yO1xuICAgICAgICAgICAgICAgIGVycm9yc0NoYW5nZWQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHdhcm5pbmcgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBpZiAobmFtZSBpbiBuZXdXYXJuaW5ncykge1xuICAgICAgICAgICAgICAgICAgICBkZWxldGUgbmV3V2FybmluZ3NbbmFtZV07XG4gICAgICAgICAgICAgICAgICAgIHdhcm5pbmdzQ2hhbmdlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoIXNhbWVWYWxpZGF0aW9uTm9kZShuZXdXYXJuaW5nc1tuYW1lXSwgd2FybmluZykpIHtcbiAgICAgICAgICAgICAgICBuZXdXYXJuaW5nc1tuYW1lXSA9IHdhcm5pbmc7XG4gICAgICAgICAgICAgICAgd2FybmluZ3NDaGFuZ2VkID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zdCBmbGFnc1RvQ2xlYXIgPSBjbGVhclZhbGlkYXRpbmcuZmlsdGVyKChuYW1lKSA9PiBuYW1lIGluIHN0YXRlLnZhbGlkYXRpbmcpO1xuICAgICAgICBjb25zdCBwYXRjaCA9IHt9O1xuICAgICAgICBpZiAoZXJyb3JzQ2hhbmdlZClcbiAgICAgICAgICAgIHBhdGNoLmVycm9ycyA9IG5ld0Vycm9ycztcbiAgICAgICAgaWYgKHdhcm5pbmdzQ2hhbmdlZClcbiAgICAgICAgICAgIHBhdGNoLndhcm5pbmdzID0gbmV3V2FybmluZ3M7XG4gICAgICAgIGlmIChmbGFnc1RvQ2xlYXIubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgY29uc3QgbmV3VmFsaWRhdGluZyA9IE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLnZhbGlkYXRpbmcpO1xuICAgICAgICAgICAgZmxhZ3NUb0NsZWFyLmZvckVhY2goKG5hbWUpID0+IHtcbiAgICAgICAgICAgICAgICBkZWxldGUgbmV3VmFsaWRhdGluZ1tuYW1lXTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcGF0Y2gudmFsaWRhdGluZyA9IG5ld1ZhbGlkYXRpbmc7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKE9iamVjdC5rZXlzKHBhdGNoKS5sZW5ndGggPiAwKVxuICAgICAgICAgICAgc3RvcmUuc2V0U3RhdGUocGF0Y2gpO1xuICAgIH0pO1xuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIC8vIEFzeW5jIGZpZWxkIHZhbGlkYXRpb24g4oCTIGVhY2ggcnVsZSBpcyBwcm9jZXNzZWQgZXhhY3RseSBvbmNlXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgY29uc3QgdmFsaWRhdGVGaWVsZEFzeW5jID0gdXNlTWVtb2l6ZWRGbigobmFtZSwgdmFsdWUsIHJ1bGVzKSA9PiBfX2F3YWl0ZXIodm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICBpZiAoIXJ1bGVzIHx8IHJ1bGVzLmxlbmd0aCA9PT0gMClcbiAgICAgICAgICAgIHJldHVybiB7IGlzVmFsaWQ6IHRydWUsIGVycm9yOiBudWxsIH07XG4gICAgICAgIC8vIENhcHR1cmUgdGhpcyBydW4ncyBlcG9jaDogaWYgYSBORVdFUiBydW4gKHN5bmMgb3IgYXN5bmMpIHN0YXJ0cyBmb3JcbiAgICAgICAgLy8gdGhlIGZpZWxkIGJlZm9yZSB0aGlzIG9uZSBzZXR0bGVzLCB0aGUgb3V0Y29tZSBiZWxvdyBpcyBzdGFsZSBhbmQgaXNcbiAgICAgICAgLy8gZGlzY2FyZGVkIGluc3RlYWQgb2Ygb3ZlcndyaXRpbmcgdGhlIG5ld2VyIHJlc3VsdC5cbiAgICAgICAgY29uc3QgZXBvY2ggPSBmb3JtQ29yZS5iZWdpblZhbGlkYXRpb25SdW4obmFtZSk7XG4gICAgICAgIC8vIFJlc29sdmUgb25jZTogdGhlIGZsYWcgZGVjaXNpb24gbmVlZHMgcmVzb2x2ZWQgcnVsZXMsIGFuZCBwYXNzaW5nIHRoZVxuICAgICAgICAvLyByZXNvbHZlZCBhcnJheSBvbndhcmQgc3BhcmVzIHRoZSBlbmdpbmUgYSByZS1yZXNvbHV0aW9uLlxuICAgICAgICBjb25zdCB2YWx1ZXMgPSBmb3JtQ29yZS5nZXRGaWVsZHNWYWx1ZSgpO1xuICAgICAgICBjb25zdCByZXNvbHZlZCA9IHJlc29sdmVSdWxlcyhydWxlcywgdmFsdWVzLCBmb3JtQ29yZS5nZXRSdWxlQ29udGV4dEluc3RhbmNlKCkpO1xuICAgICAgICBjb25zdCBmbGFnZ2VkID0gaGFzUmVzb2x2ZWRWYWxpZGF0b3IocmVzb2x2ZWQpID8gW25hbWVdIDogW107XG4gICAgICAgIG1hcmtWYWxpZGF0aW5nKGZsYWdnZWQpO1xuICAgICAgICBmbGFnZ2VkLmZvckVhY2goKGZsYWdnZWROYW1lKSA9PiB7XG4gICAgICAgICAgICBsYXN0QXN5bmNFcG9jaFJlZi5jdXJyZW50W2ZsYWdnZWROYW1lXSA9IGVwb2NoO1xuICAgICAgICB9KTtcbiAgICAgICAgbGV0IG91dGNvbWUgPSB7IG5hbWUsIGVycm9yOiBudWxsLCB3YXJuaW5nOiBudWxsIH07XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCB7IGVycm9yLCB3YXJuaW5nIH0gPSB5aWVsZCBydW5SdWxlc0FzeW5jKG5hbWUsIHZhbHVlLCB2YWx1ZXMsIHJlc29sdmVkLCBmb3JtQ29yZS5nZXRSdWxlQ29udGV4dEluc3RhbmNlKCkpO1xuICAgICAgICAgICAgb3V0Y29tZSA9IHsgbmFtZSwgZXJyb3IsIHdhcm5pbmcgfTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAvLyBUaGUgZW5naW5lIGNvbnRhaW5zIHJ1bGUtbGV2ZWwgdGhyb3dzIGl0c2VsZjsgdGhpcyBpcyBhIGxhc3QtcmVzb3J0XG4gICAgICAgICAgICAvLyBuZXQgc28gYW4gdW5leHBlY3RlZCBmYWlsdXJlIHN1cmZhY2VzIGFzIGEgZmllbGQgZXJyb3IgaW5zdGVhZCBvZlxuICAgICAgICAgICAgLy8gbGVhdmluZyB0aGUgZmllbGQgbWFya2VkIHZhbGlkLlxuICAgICAgICAgICAgb3V0Y29tZSA9IHsgbmFtZSwgZXJyb3I6IChfYSA9IGNvZXJjZUZhaWx1cmVSZWFzb24oZXJyKSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogJ1ZhbGlkYXRpb24gZmFpbGVkJywgd2FybmluZzogbnVsbCB9O1xuICAgICAgICB9XG4gICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgY29uc3QgaXNDdXJyZW50ID0gZm9ybUNvcmUuaXNWYWxpZGF0aW9uUnVuQ3VycmVudChuYW1lLCBlcG9jaCk7XG4gICAgICAgICAgICBjb25zdCBjbGVhckZsYWdzID0gZmxhZ2dlZC5maWx0ZXIoKGZsYWdnZWROYW1lKSA9PiBsYXN0QXN5bmNFcG9jaFJlZi5jdXJyZW50W2ZsYWdnZWROYW1lXSA9PT0gZXBvY2gpO1xuICAgICAgICAgICAgY29tbWl0UnVsZU91dGNvbWVzKGlzQ3VycmVudCA/IFtvdXRjb21lXSA6IFtdLCBjbGVhckZsYWdzKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBUaGUgQ0FMTEVSIGdldHMgdGhpcyBydW4ncyBvd24gcmVzdWx0IGVpdGhlciB3YXkgKGl0cyBwcm9taXNlIGlzXG4gICAgICAgIC8vIGFib3V0IHRoZSB2YWx1ZSBpdCB3YXMgYXNrZWQgdG8gdmFsaWRhdGUpOyBvbmx5IHRoZSBTVE9SRSBjb21taXQgaXNcbiAgICAgICAgLy8gc3RhbGVuZXNzLWd1YXJkZWQuXG4gICAgICAgIHJldHVybiB7IGlzVmFsaWQ6IG91dGNvbWUuZXJyb3IgPT09IG51bGwsIGVycm9yOiBvdXRjb21lLmVycm9yIH07XG4gICAgfSkpO1xuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIC8vIEFzeW5jIGZpZWxkIGJsdXIgaGFuZGxlclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIGNvbnN0IGhhbmRsZUZpZWxkQmx1ciA9IHVzZUV2ZW50Q2FsbGJhY2soKG5hbWUsIGZpZWxkVHJpZ2dlcikgPT4gX19hd2FpdGVyKHZvaWQgMCwgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIGNvbnN0IHRvdWNoZWQgPSBzdG9yZS5nZXRTdGF0ZSgpLnRvdWNoZWQ7XG4gICAgICAgIGlmICghdG91Y2hlZFtuYW1lXSkge1xuICAgICAgICAgICAgc3RvcmUuc2V0U3RhdGUoeyB0b3VjaGVkOiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIHRvdWNoZWQpLCB7IFtuYW1lXTogdHJ1ZSB9KSB9KTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBydWxlcyA9IGZvcm1Db3JlLmdldEZpZWxkUnVsZXMobmFtZSk7XG4gICAgICAgIGlmICghcnVsZXMpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGNvbnN0IHZhbHVlcyA9IGZvcm1Db3JlLmdldEZpZWxkc1ZhbHVlKCk7XG4gICAgICAgIGNvbnN0IGFwcGxpY2FibGUgPSBmaWx0ZXJSdWxlc0J5VHJpZ2dlcihyZXNvbHZlUnVsZXMocnVsZXMsIHZhbHVlcywgZm9ybUNvcmUuZ2V0UnVsZUNvbnRleHRJbnN0YW5jZSgpKSwgJ29uQmx1cicsIG5vcm1hbGl6ZVRyaWdnZXJzKGZpZWxkVHJpZ2dlciwgdmFsaWRhdGVUcmlnZ2VyKSwgbmFtZSk7XG4gICAgICAgIGlmIChhcHBsaWNhYmxlLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHlpZWxkIHZhbGlkYXRlRmllbGRBc3luYyhuYW1lLCByZXNvbHZlVmFsdWUodmFsdWVzLCBuYW1lKSwgYXBwbGljYWJsZSk7XG4gICAgICAgIH1cbiAgICB9KSk7XG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgLy8gVmFsaWRhdGUgYWxsIGZpZWxkcyBhc3luY1xuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIGNvbnN0IHZhbGlkYXRlRmllbGRzQXN5bmMgPSB1c2VNZW1vaXplZEZuKChuYW1lTGlzdCkgPT4gX19hd2FpdGVyKHZvaWQgMCwgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIGNvbnN0IGZpZWxkc1RvVmFsaWRhdGUgPSBuYW1lTGlzdCB8fCBPYmplY3Qua2V5cyhmb3JtQ29yZS5maWVsZFJ1bGVzKTtcbiAgICAgICAgY29uc3QgZmllbGRFcnJvcnMgPSB7fTtcbiAgICAgICAgLy8gUmVzb2x2ZSBldmVyeSBmaWVsZCBvbmNlIHVwIGZyb250OiB0aGUgZmxhZyBkZWNpc2lvbiBuZWVkcyByZXNvbHZlZFxuICAgICAgICAvLyBydWxlcywgYW5kIHRoZSByZXNvbHZlZCBhcnJheXMgYXJlIHJldXNlZCBmb3IgdGhlIGFjdHVhbCBydW5zLiBFYWNoXG4gICAgICAgIC8vIGZpZWxkIGFsc28gY2FwdHVyZXMgaXRzIHZhbGlkYXRpb24gZXBvY2gg4oCUIGEgZmllbGQgd2hvc2UgdmFsdWVcbiAgICAgICAgLy8gY2hhbmdlcyBtaWQtc3VibWl0IGdldHMgYSBuZXdlciBydW4sIGFuZCB0aGlzIHJ1bidzIHN0YWxlIG91dGNvbWVcbiAgICAgICAgLy8gbXVzdCBub3Qgb3ZlcndyaXRlIGl0IGluIHRoZSBzdG9yZS5cbiAgICAgICAgY29uc3QgcmVzb2x2ZWRCeUZpZWxkID0gbmV3IE1hcCgpO1xuICAgICAgICBjb25zdCBlcG9jaEJ5RmllbGQgPSBuZXcgTWFwKCk7XG4gICAgICAgIGZvciAoY29uc3QgbmFtZSBvZiBmaWVsZHNUb1ZhbGlkYXRlKSB7XG4gICAgICAgICAgICBjb25zdCBydWxlcyA9IGZvcm1Db3JlLmZpZWxkUnVsZXNbbmFtZV07XG4gICAgICAgICAgICBpZiAocnVsZXMpIHtcbiAgICAgICAgICAgICAgICBlcG9jaEJ5RmllbGQuc2V0KG5hbWUsIGZvcm1Db3JlLmJlZ2luVmFsaWRhdGlvblJ1bihuYW1lKSk7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZWRCeUZpZWxkLnNldChuYW1lLCByZXNvbHZlUnVsZXMocnVsZXMsIGZvcm1Db3JlLmdldEZpZWxkc1ZhbHVlKCksIGZvcm1Db3JlLmdldFJ1bGVDb250ZXh0SW5zdGFuY2UoKSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIE9uZSBjb21taXQgdG8gcmFpc2UgdGhlIHZhbGlkYXRpbmcgZmxhZ3MgKHZhbGlkYXRvci1iZWFyaW5nIGZpZWxkc1xuICAgICAgICAvLyBvbmx5KSwgb25lIGNvbW1pdCB0byBsYW5kIGV2ZXJ5IGVycm9yL3dhcm5pbmcgYW5kIGNsZWFyIHRoZSBmbGFncy5cbiAgICAgICAgY29uc3QgZmxhZ2dlZCA9IGZpZWxkc1RvVmFsaWRhdGUuZmlsdGVyKChuYW1lKSA9PiB7XG4gICAgICAgICAgICBjb25zdCByZXNvbHZlZCA9IHJlc29sdmVkQnlGaWVsZC5nZXQobmFtZSk7XG4gICAgICAgICAgICByZXR1cm4gcmVzb2x2ZWQgPyBoYXNSZXNvbHZlZFZhbGlkYXRvcihyZXNvbHZlZCkgOiBmYWxzZTtcbiAgICAgICAgfSk7XG4gICAgICAgIG1hcmtWYWxpZGF0aW5nKGZsYWdnZWQpO1xuICAgICAgICBmbGFnZ2VkLmZvckVhY2goKG5hbWUpID0+IHtcbiAgICAgICAgICAgIGxhc3RBc3luY0Vwb2NoUmVmLmN1cnJlbnRbbmFtZV0gPSBlcG9jaEJ5RmllbGQuZ2V0KG5hbWUpO1xuICAgICAgICB9KTtcbiAgICAgICAgY29uc3Qgb3V0Y29tZXMgPSBbXTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHlpZWxkIFByb21pc2UuYWxsKGZpZWxkc1RvVmFsaWRhdGUubWFwKChuYW1lKSA9PiBfX2F3YWl0ZXIodm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVzb2x2ZWQgPSByZXNvbHZlZEJ5RmllbGQuZ2V0KG5hbWUpO1xuICAgICAgICAgICAgICAgIGlmICghcmVzb2x2ZWQpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICBsZXQgZXJyb3IgPSBudWxsO1xuICAgICAgICAgICAgICAgIGxldCB3YXJuaW5nID0gbnVsbDtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAoeyBlcnJvciwgd2FybmluZyB9ID0geWllbGQgcnVuUnVsZXNBc3luYyhuYW1lLCByZXNvbHZlVmFsdWUoZm9ybUNvcmUuZ2V0RmllbGRzVmFsdWUoKSwgbmFtZSksIGZvcm1Db3JlLmdldEZpZWxkc1ZhbHVlKCksIHJlc29sdmVkLCBmb3JtQ29yZS5nZXRSdWxlQ29udGV4dEluc3RhbmNlKCkpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgICAgICAvLyBMYXN0LXJlc29ydCBuZXQgKHNlZSB2YWxpZGF0ZUZpZWxkQXN5bmMpIOKAlCBrZWVwIHRoZSBub3JtYWxcbiAgICAgICAgICAgICAgICAgICAgLy8gY29uc3RydWN0ZWQtZXJyb3IgZmxvdyBzbyBvbkZpbmlzaEZhaWxlZCBnZXRzIGEgcmVhbCBwYXlsb2FkLlxuICAgICAgICAgICAgICAgICAgICBlcnJvciA9IChfYSA9IGNvZXJjZUZhaWx1cmVSZWFzb24oZXJyKSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogJ1ZhbGlkYXRpb24gZmFpbGVkJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gVGhlIHN0b3JlIGNvbW1pdCBpcyBzdGFsZW5lc3MtZ3VhcmRlZDsgdGhlIFNVQk1JVCBkZWNpc2lvblxuICAgICAgICAgICAgICAgIC8vIChmaWVsZEVycm9ycyAvIHRoZSB0aHJvd24gRm9ybVZhbGlkYXRpb25FcnJvcikgc3RpbGwgcmVmbGVjdHNcbiAgICAgICAgICAgICAgICAvLyB0aGlzIHJ1bidzIG93biByZXN1bHRzIGZvciB0aGUgdmFsdWVzIGl0IHZhbGlkYXRlZC5cbiAgICAgICAgICAgICAgICBjb25zdCBlcG9jaCA9IGVwb2NoQnlGaWVsZC5nZXQobmFtZSk7XG4gICAgICAgICAgICAgICAgaWYgKGVwb2NoICE9PSB1bmRlZmluZWQgJiYgZm9ybUNvcmUuaXNWYWxpZGF0aW9uUnVuQ3VycmVudChuYW1lLCBlcG9jaCkpIHtcbiAgICAgICAgICAgICAgICAgICAgb3V0Y29tZXMucHVzaCh7IG5hbWUsIGVycm9yLCB3YXJuaW5nIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoZXJyb3IgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgZmllbGRFcnJvcnNbbmFtZV0gPSBlcnJvcjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KSkpO1xuICAgICAgICB9XG4gICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgY29uc3QgY2xlYXJGbGFncyA9IGZsYWdnZWQuZmlsdGVyKChuYW1lKSA9PiBsYXN0QXN5bmNFcG9jaFJlZi5jdXJyZW50W25hbWVdID09PSBlcG9jaEJ5RmllbGQuZ2V0KG5hbWUpKTtcbiAgICAgICAgICAgIGNvbW1pdFJ1bGVPdXRjb21lcyhvdXRjb21lcywgY2xlYXJGbGFncyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKE9iamVjdC5rZXlzKGZpZWxkRXJyb3JzKS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRm9ybVZhbGlkYXRpb25FcnJvcihmb3JtQ29yZS5nZXRGaWVsZHNWYWx1ZSgpLCBmaWVsZEVycm9ycyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5hbWVMaXN0KSB7XG4gICAgICAgICAgICByZXR1cm4gbmFtZUxpc3QucmVkdWNlKChhY2MsIG5hbWUpID0+IHtcbiAgICAgICAgICAgICAgICBhY2NbbmFtZV0gPSByZXNvbHZlVmFsdWUoZm9ybUNvcmUuZ2V0RmllbGRzVmFsdWUoKSwgbmFtZSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgICAgICAgIH0sIHt9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZm9ybUNvcmUuZ2V0RmllbGRzVmFsdWUoKTtcbiAgICB9KSk7XG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgLy8gZGVmaW5lRmllbGQg4oCTIHVzZWQgYnkgc3RhbmRhbG9uZSAobm9uLVByb0Zvcm0pIGNvbnN1bWVyc1xuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIGNvbnN0IGRlZmluZUZpZWxkID0gdXNlTWVtb2l6ZWRGbigobmFtZSwgZmllbGRPcHRpb25zID0ge30pID0+IHtcbiAgICAgICAgY29uc3QgeyBydWxlcyA9IFtdIH0gPSBmaWVsZE9wdGlvbnM7XG4gICAgICAgIGNvbnN0IEZpZWxkQ29tcG9uZW50ID0gbWVtbygoX2EpID0+IHtcbiAgICAgICAgICAgIHZhciB7IGNoaWxkcmVuLCByZW5kZXIgfSA9IF9hLCBwcm9wcyA9IF9fcmVzdChfYSwgW1wiY2hpbGRyZW5cIiwgXCJyZW5kZXJcIl0pO1xuICAgICAgICAgICAgLy8gUGVyLWZpZWxkIHN0b3JlIHN1YnNjcmlwdGlvbjogdGhpcyBmaWVsZCByZS1yZW5kZXJzIG9ubHkgd2hlbiBpdHNcbiAgICAgICAgICAgIC8vIG93biB2YWx1ZS9lcnJvci90b3VjaGVkL3ZhbGlkYXRpbmcgc2xpY2UgY2hhbmdlcy4gRG90LXBhdGhzXG4gICAgICAgICAgICAvLyByZXNvbHZlIGludG8gdGhlIG5lc3RlZCB2YWx1ZXMgbGlrZSBldmVyeXdoZXJlIGVsc2UuXG4gICAgICAgICAgICBjb25zdCBbZmllbGRWYWx1ZSwgZmllbGRFcnJvciwgZmllbGRUb3VjaGVkLCBmaWVsZFZhbGlkYXRpbmddID0gdXNlU3RvcmVTZWxlY3RvcihzdG9yZSwgKHN0YXRlKSA9PiB7XG4gICAgICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAgICAgICAgIChfYSA9IHJlc29sdmVWYWx1ZShzdGF0ZS52YWx1ZXMsIG5hbWUpKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiAnJyxcbiAgICAgICAgICAgICAgICAgICAgc3RhdGUuZXJyb3JzW25hbWVdLFxuICAgICAgICAgICAgICAgICAgICBzdGF0ZS50b3VjaGVkW25hbWVdLFxuICAgICAgICAgICAgICAgICAgICBzdGF0ZS52YWxpZGF0aW5nW25hbWVdLFxuICAgICAgICAgICAgICAgIF07XG4gICAgICAgICAgICB9LCBzaGFsbG93RXF1YWxBcnJheXMpO1xuICAgICAgICAgICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAvLyBNb3VudC1jb3VudGVkOiByZWxlYXNlRmllbGQgcmVtb3ZlcyB0aGUgcnVsZXMgb25seSB3aGVuIHRoZVxuICAgICAgICAgICAgICAgIC8vIExBU1Qgc2FtZS1uYW1lIGluc3RhbmNlIHVubW91bnRzIOKAlCBhbiBpbnN0YW5jZSB0aGF0IHBpZ2d5YmFja2VkXG4gICAgICAgICAgICAgICAgLy8gb24gYW4gZXhpc3RpbmcgcmVnaXN0cmF0aW9uIChlLmcuIGEgUHJvRm9ybS5JdGVtJ3MpIGNhbiBuZXZlclxuICAgICAgICAgICAgICAgIC8vIHdpcGUgaXQgb24gaXRzIG93biB1bm1vdW50LlxuICAgICAgICAgICAgICAgIGZvcm1Db3JlLnJldGFpbkZpZWxkKG5hbWUpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGV4aXN0aW5nUnVsZXMgPSBmb3JtQ29yZS5nZXRGaWVsZFJ1bGVzKG5hbWUpO1xuICAgICAgICAgICAgICAgIGlmICghZXhpc3RpbmdSdWxlcyAmJiBydWxlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGZvcm1Db3JlLnJlZ2lzdGVyRmllbGQobmFtZSwgcnVsZXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBmb3JtQ29yZS5yZWxlYXNlRmllbGQobmFtZSk7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0sIFtdKTsgLy8gT25seSByZWdpc3RlciBvbiBtb3VudFxuICAgICAgICAgICAgY29uc3QgaGFuZGxlRmllbGRDaGFuZ2UgPSB1c2VFdmVudENhbGxiYWNrKCh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgICAgIGZvcm1Db3JlLnNldEZpZWxkVmFsdWUobmFtZSwgdmFsdWUpO1xuICAgICAgICAgICAgICAgIC8vIFRvdWNoZWQgaXMgc2V0IGJ5IHRoZSB1c2VyIGNoYW5nZSB0cmlnZ2VyIChtYXRjaGluZyB0aGVcbiAgICAgICAgICAgICAgICAvLyBQcm9Gb3JtLkl0ZW0gcGF0aCkg4oCUIHByb2dyYW1tYXRpYyBzZXRGaWVsZHNWYWx1ZSBkb2VzIG5vdC5cbiAgICAgICAgICAgICAgICBjb25zdCB0b3VjaGVkID0gc3RvcmUuZ2V0U3RhdGUoKS50b3VjaGVkO1xuICAgICAgICAgICAgICAgIGlmICghdG91Y2hlZFtuYW1lXSkge1xuICAgICAgICAgICAgICAgICAgICBzdG9yZS5zZXRTdGF0ZSh7IHRvdWNoZWQ6IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgdG91Y2hlZCksIHsgW25hbWVdOiB0cnVlIH0pIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBhcHBsaWNhYmxlID0gZmlsdGVyUnVsZXNCeVRyaWdnZXIocmVzb2x2ZVJ1bGVzKHJ1bGVzLCBmb3JtQ29yZS5nZXRGaWVsZHNWYWx1ZSgpLCBmb3JtQ29yZS5nZXRSdWxlQ29udGV4dEluc3RhbmNlKCkpLCAnb25DaGFuZ2UnLCBub3JtYWxpemVUcmlnZ2VycyhmaWVsZE9wdGlvbnMudmFsaWRhdGVUcmlnZ2VyLCB2YWxpZGF0ZVRyaWdnZXIpLCBuYW1lKTtcbiAgICAgICAgICAgICAgICBpZiAoYXBwbGljYWJsZS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIEFzeW5jIHBhdGggKG1hdGNoaW5nIFByb0Zvcm0uSXRlbSkgc28gYSBQcm9taXNlLXJldHVybmluZ1xuICAgICAgICAgICAgICAgICAgICAvLyB2YWxpZGF0b3IgaXMgaG9ub3JlZCBvbiBjaGFuZ2UgaW5zdGVhZCBvZiBiZWluZyBzaWxlbnRseVxuICAgICAgICAgICAgICAgICAgICAvLyBza2lwcGVkOyBmaXJlLWFuZC1mb3JnZXQg4oCUIHRoZSByZXN1bHQgbGFuZHMgb24gdGhlIHN0b3JlLlxuICAgICAgICAgICAgICAgICAgICB2YWxpZGF0ZUZpZWxkQXN5bmMobmFtZSwgdmFsdWUsIGFwcGxpY2FibGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgY29uc3QgaGFuZGxlQmx1ciA9IHVzZUV2ZW50Q2FsbGJhY2soKCkgPT4ge1xuICAgICAgICAgICAgICAgIGhhbmRsZUZpZWxkQmx1cihuYW1lLCBmaWVsZE9wdGlvbnMudmFsaWRhdGVUcmlnZ2VyKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgY29uc3QgZmllbGRQcm9wcyA9IE9iamVjdC5hc3NpZ24oeyBuYW1lLCB2YWx1ZTogZmllbGRWYWx1ZSwgZXJyb3I6IGZpZWxkRXJyb3IsIHRvdWNoZWQ6IGZpZWxkVG91Y2hlZCwgdmFsaWRhdGluZzogZmllbGRWYWxpZGF0aW5nLCBvbkNoYW5nZTogaGFuZGxlRmllbGRDaGFuZ2UsIG9uQmx1cjogaGFuZGxlQmx1ciB9LCBwcm9wcyk7XG4gICAgICAgICAgICBjb25zdCBoYW5kbGVNZXJnZUNoYW5nZSA9IChlKSA9PiB7XG4gICAgICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gZSAmJiB0eXBlb2YgZSA9PT0gJ29iamVjdCcgJiYgJ3RhcmdldCcgaW4gZVxuICAgICAgICAgICAgICAgICAgICA/IGUudGFyZ2V0LnZhbHVlXG4gICAgICAgICAgICAgICAgICAgIDogZTtcbiAgICAgICAgICAgICAgICBoYW5kbGVGaWVsZENoYW5nZSh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgaWYgKFJlYWN0LmlzVmFsaWRFbGVtZW50KGNoaWxkcmVuKSAmJlxuICAgICAgICAgICAgICAgICAgICAoKF9hID0gY2hpbGRyZW4ucHJvcHMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5vbkNoYW5nZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW4ucHJvcHMub25DaGFuZ2UodmFsdWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBjb25zdCBoYW5kbGVNZXJnZUJsdXIgPSAoKSA9PiB7XG4gICAgICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgICAgIGhhbmRsZUJsdXIoKTtcbiAgICAgICAgICAgICAgICBpZiAoUmVhY3QuaXNWYWxpZEVsZW1lbnQoY2hpbGRyZW4pICYmXG4gICAgICAgICAgICAgICAgICAgICgoX2EgPSBjaGlsZHJlbi5wcm9wcykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLm9uQmx1cikpIHtcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW4ucHJvcHMub25CbHVyKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGlmIChyZW5kZXIgJiYgdHlwZW9mIHJlbmRlciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgIHJldHVybiByZW5kZXIoZmllbGRQcm9wcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodHlwZW9mIGNoaWxkcmVuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNoaWxkcmVuKGZpZWxkUHJvcHMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gRWxlbWVudCBjaGlsZHJlbiByZWNlaXZlIG9ubHkgRE9NLXNhZmUgcHJvcHMg4oCUIGVycm9yL3RvdWNoZWQvXG4gICAgICAgICAgICAvLyB2YWxpZGF0aW5nIGFyZSBmaWVsZCBNRVRBLCBub3QgY29udHJvbCBwcm9wczsgc3ByZWFkaW5nIHRoZW0gb250b1xuICAgICAgICAgICAgLy8gYSBob3N0IGVsZW1lbnQgd291bGQgbGVhayBhbnkgYXR0cmlidXRlcy4gUmVuZGVyLXByb3AgYW5kXG4gICAgICAgICAgICAvLyBmdW5jdGlvbiBjaGlsZHJlbiBrZWVwIHRoZSBmdWxsIGZpZWxkUHJvcHMuXG4gICAgICAgICAgICBjb25zdCBkb21TYWZlUHJvcHMgPSBPYmplY3QuYXNzaWduKHsgbmFtZSwgdmFsdWU6IGZpZWxkVmFsdWUsIG9uQ2hhbmdlOiBoYW5kbGVNZXJnZUNoYW5nZSwgb25CbHVyOiBoYW5kbGVNZXJnZUJsdXIgfSwgcHJvcHMpO1xuICAgICAgICAgICAgaWYgKFJlYWN0LmlzVmFsaWRFbGVtZW50KGNoaWxkcmVuKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBSZWFjdC5jbG9uZUVsZW1lbnQoY2hpbGRyZW4sIGRvbVNhZmVQcm9wcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShjaGlsZHJlbikpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChGcmFnbWVudCwgbnVsbCwgLi4uY2hpbGRyZW4ubWFwKChjaGlsZCwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKFJlYWN0LmlzVmFsaWRFbGVtZW50KGNoaWxkKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFJlYWN0LmNsb25lRWxlbWVudChjaGlsZCwgT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBkb21TYWZlUHJvcHMpLCB7IGtleTogY2hpbGQua2V5IHx8IGluZGV4IH0pKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2hpbGQ7XG4gICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH0pO1xuICAgICAgICBGaWVsZENvbXBvbmVudC5kaXNwbGF5TmFtZSA9IGBGaWVsZCgke25hbWV9KWA7XG4gICAgICAgIHJldHVybiBGaWVsZENvbXBvbmVudDtcbiAgICB9KTtcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAvLyBoYW5kbGVTdWJtaXQgLyBoYW5kbGVSZXNldCDigJMgZm9yIDxmb3JtPiBldmVudCBoYW5kbGVyc1xuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIGNvbnN0IGhhbmRsZVN1Ym1pdCA9IHVzZUV2ZW50Q2FsbGJhY2soKGUpID0+IF9fYXdhaXRlcih2b2lkIDAsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBlID09PSBudWxsIHx8IGUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHZhbGlkYXRlZFZhbHVlcyA9IHlpZWxkIHZhbGlkYXRlRmllbGRzQXN5bmMoKTtcbiAgICAgICAgICAgIG9uRmluaXNoID09PSBudWxsIHx8IG9uRmluaXNoID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkZpbmlzaCh2YWxpZGF0ZWRWYWx1ZXMpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIC8vIE9ubHkgYSBWQUxJREFUSU9OIGZhaWx1cmUgcmVhY2hlcyBvbkZpbmlzaEZhaWxlZCDigJQgYW4gZXhjZXB0aW9uIG91dFxuICAgICAgICAgICAgLy8gb2YgdGhlIGNvbnN1bWVyJ3Mgb3duIG9uRmluaXNoIGlzIG5vdCBhIHZhbGlkYXRpb24gcmVzdWx0IGFuZCBpc1xuICAgICAgICAgICAgLy8gc3VyZmFjZWQgaW5zdGVhZCBvZiBiZWluZyBtaXNyZXBvcnRlZC5cbiAgICAgICAgICAgIGlmIChlcnIgaW5zdGFuY2VvZiBGb3JtVmFsaWRhdGlvbkVycm9yKSB7XG4gICAgICAgICAgICAgICAgb25GaW5pc2hGYWlsZWQgPT09IG51bGwgfHwgb25GaW5pc2hGYWlsZWQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uRmluaXNoRmFpbGVkKHsgdmFsdWVzOiBlcnIudmFsdWVzLCBlcnJvcnM6IGVyci5lcnJvcnMgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdbUHJvRm9ybV0gb25GaW5pc2ggdGhyZXcgZHVyaW5nIHN1Ym1pdDonLCBlcnIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSkpO1xuICAgIGNvbnN0IGhhbmRsZVJlc2V0ID0gdXNlRXZlbnRDYWxsYmFjaygoZSkgPT4ge1xuICAgICAgICBlID09PSBudWxsIHx8IGUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgZm9ybUNvcmUucmVzZXRGaWVsZHMoKTtcbiAgICAgICAgb25SZXNldCA9PT0gbnVsbCB8fCBvblJlc2V0ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvblJlc2V0KCk7XG4gICAgfSk7XG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgLy8gRm9ybUluc3RhbmNlIOKAkyBlbmhhbmNlZCBBUEkgZm9yIGNvbnN1bWVycy5cbiAgICAvL1xuICAgIC8vIEV2ZXJ5IG1ldGhvZCBpcyB3cmFwcGVkIGluIHVzZU1lbW9pemVkRm4gKHN0YWJsZSBpZGVudGl0eSwgYWx3YXlzIHJlYWRzIHRoZVxuICAgIC8vIGxhdGVzdCBzdG9yZSBzdGF0ZSkgc28gdGhlIGluc3RhbmNlIG9iamVjdCBpdHNlbGYgaXMgSURFTlRJVFktU1RBQkxFIGZvclxuICAgIC8vIHRoZSBsaWZldGltZSBvZiB0aGUgZm9ybSDigJQgdGhpcyBpcyB3aGF0IGxldHMgUHJvRm9ybSBwdWJsaXNoIGl0IHRocm91Z2ggdGhlXG4gICAgLy8gc3RhYmxlIGNvbnRleHQgd2l0aG91dCByZS1yZW5kZXJpbmcgc3Vic2NyaWJlcnMgb24gZWFjaCBrZXlzdHJva2UuXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgY29uc3QgZ2V0RmllbGRFcnJvciA9IHVzZU1lbW9pemVkRm4oKG5hbWUpID0+IHN0b3JlLmdldFN0YXRlKCkuZXJyb3JzW25hbWVdKTtcbiAgICBjb25zdCBnZXRGaWVsZFdhcm5pbmcgPSB1c2VNZW1vaXplZEZuKChuYW1lKSA9PiBzdG9yZS5nZXRTdGF0ZSgpLndhcm5pbmdzW25hbWVdKTtcbiAgICBjb25zdCBnZXRGaWVsZHNFcnJvciA9IHVzZU1lbW9pemVkRm4oKG5hbWVMaXN0KSA9PiB7XG4gICAgICAgIGNvbnN0IGVycm9ycyA9IHN0b3JlLmdldFN0YXRlKCkuZXJyb3JzO1xuICAgICAgICBpZiAoIW5hbWVMaXN0KVxuICAgICAgICAgICAgcmV0dXJuIGVycm9ycztcbiAgICAgICAgY29uc3QgcmVzdWx0ID0ge307XG4gICAgICAgIG5hbWVMaXN0LmZvckVhY2goKG5hbWUpID0+IHtcbiAgICAgICAgICAgIGlmIChlcnJvcnNbbmFtZV0pIHtcbiAgICAgICAgICAgICAgICByZXN1bHRbbmFtZV0gPSBlcnJvcnNbbmFtZV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0pO1xuICAgIGNvbnN0IGlzRmllbGRUb3VjaGVkID0gdXNlTWVtb2l6ZWRGbigobmFtZSkgPT4gc3RvcmUuZ2V0U3RhdGUoKS50b3VjaGVkW25hbWVdIHx8IGZhbHNlKTtcbiAgICBjb25zdCBpc0ZpZWxkc1RvdWNoZWQgPSB1c2VNZW1vaXplZEZuKChuYW1lTGlzdCwgYWxsRmllbGRzVG91Y2hlZCA9IGZhbHNlKSA9PiB7XG4gICAgICAgIGNvbnN0IHRvdWNoZWQgPSBzdG9yZS5nZXRTdGF0ZSgpLnRvdWNoZWQ7XG4gICAgICAgIGlmICghbmFtZUxpc3QpIHtcbiAgICAgICAgICAgIHJldHVybiBPYmplY3Qua2V5cyh0b3VjaGVkKS5zb21lKChrZXkpID0+IHRvdWNoZWRba2V5XSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGFsbEZpZWxkc1RvdWNoZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBuYW1lTGlzdC5ldmVyeSgobmFtZSkgPT4gdG91Y2hlZFtuYW1lXSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5hbWVMaXN0LnNvbWUoKG5hbWUpID0+IHRvdWNoZWRbbmFtZV0pO1xuICAgIH0pO1xuICAgIGNvbnN0IGlzRmllbGRWYWxpZGF0aW5nID0gdXNlTWVtb2l6ZWRGbigobmFtZSkgPT4gc3RvcmUuZ2V0U3RhdGUoKS52YWxpZGF0aW5nW25hbWVdIHx8IGZhbHNlKTtcbiAgICBjb25zdCBzZXRGaWVsZHNFcnJvciA9IHVzZU1lbW9pemVkRm4oKGZpZWxkc0Vycm9yKSA9PiB7XG4gICAgICAgIE9iamVjdC5lbnRyaWVzKGZpZWxkc0Vycm9yKS5mb3JFYWNoKChbbmFtZSwgZXJyb3JdKSA9PiB7XG4gICAgICAgICAgICBmb3JtQ29yZS5zZXRGaWVsZEVycm9yKG5hbWUsIGVycm9yKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG4gICAgY29uc3Qgc2V0RmllbGRUb3VjaGVkID0gdXNlTWVtb2l6ZWRGbigobmFtZSwgaXNUb3VjaGVkID0gdHJ1ZSkgPT4ge1xuICAgICAgICBzdG9yZS5zZXRTdGF0ZSh7IHRvdWNoZWQ6IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgc3RvcmUuZ2V0U3RhdGUoKS50b3VjaGVkKSwgeyBbbmFtZV06IGlzVG91Y2hlZCB9KSB9KTtcbiAgICB9KTtcbiAgICBjb25zdCBzZXRGaWVsZHNUb3VjaGVkID0gdXNlTWVtb2l6ZWRGbigoZmllbGRzVG91Y2gpID0+IHtcbiAgICAgICAgc3RvcmUuc2V0U3RhdGUoeyB0b3VjaGVkOiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIHN0b3JlLmdldFN0YXRlKCkudG91Y2hlZCksIGZpZWxkc1RvdWNoKSB9KTtcbiAgICB9KTtcbiAgICBjb25zdCByZXNldEZvcm1GaWVsZHMgPSB1c2VNZW1vaXplZEZuKChmaWVsZHMpID0+IHtcbiAgICAgICAgaWYgKCFmaWVsZHMpIHtcbiAgICAgICAgICAgIGZvcm1Db3JlLnJlc2V0RmllbGRzKCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy8gTW91bnQtZnJvemVuIGluaXRpYWxWYWx1ZXMg4oCUIGNvbnNpc3RlbnQgd2l0aCB0aGUgZnVsbCByZXNldEZpZWxkcy5cbiAgICAgICAgLy8gUmVhZHMgQU5EIHdyaXRlcyBhcmUgbmVzdGVkLXBhdGggYXdhcmUsIHNvIGRvdC1wYXRoIG5hbWVzXG4gICAgICAgIC8vIChgYWRkcmVzcy5jaXR5YCwgYGl0ZW1zLjAudGl0bGVgKSByZXNldCBjb3JyZWN0bHkgaW5zdGVhZCBvZiBwcm9iaW5nIGFcbiAgICAgICAgLy8gbGl0ZXJhbCBrZXkgYW5kIHNoYWxsb3ctbWVyZ2luZyBvbmUgYmFjay5cbiAgICAgICAgY29uc3QgaW5pdGlhbFZhbHVlcyA9IGZvcm1Db3JlLmdldEluaXRpYWxWYWx1ZXMoKTtcbiAgICAgICAgY29uc3Qgc3RhdGUgPSBzdG9yZS5nZXRTdGF0ZSgpO1xuICAgICAgICBsZXQgbmV3VmFsdWVzID0gc3RhdGUudmFsdWVzO1xuICAgICAgICBmaWVsZHMuZm9yRWFjaCgoZmllbGQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGluaXRpYWwgPSByZXNvbHZlVmFsdWUoaW5pdGlhbFZhbHVlcywgZmllbGQpO1xuICAgICAgICAgICAgbmV3VmFsdWVzID0gZmllbGQuaW5jbHVkZXMoJy4nKVxuICAgICAgICAgICAgICAgID8gc2V0TmVzdGVkVmFsdWUobmV3VmFsdWVzLCBmaWVsZCwgaW5pdGlhbClcbiAgICAgICAgICAgICAgICA6IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgbmV3VmFsdWVzKSwgeyBbZmllbGRdOiBpbml0aWFsIH0pO1xuICAgICAgICB9KTtcbiAgICAgICAgLy8gTGlrZSB0aGUgZnVsbCByZXNldDogY2xlYXIgQUxMIHBlci1maWVsZCBtZXRhIChlcnJvcnMgQU5EIHdhcm5pbmdzIEFORFxuICAgICAgICAvLyB0b3VjaGVkL3ZhbGlkYXRpbmcpLCBpbnZhbGlkYXRlIGluLWZsaWdodCB2YWxpZGF0aW9uIHJ1bnMsIGFuZCBsYW5kXG4gICAgICAgIC8vIGV2ZXJ5dGhpbmcgaW4gT05FIGNvbW1pdC4gTm8gb25WYWx1ZXNDaGFuZ2Ug4oCUIHJlc2V0IGlzIG5vdCBhIGNoYW5nZVxuICAgICAgICAvLyBldmVudCBvbiBlaXRoZXIgcGF0aC5cbiAgICAgICAgZm9ybUNvcmUuaW52YWxpZGF0ZVZhbGlkYXRpb25SdW5zKGZpZWxkcyk7XG4gICAgICAgIGNvbnN0IG5ld0Vycm9ycyA9IE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLmVycm9ycyk7XG4gICAgICAgIGNvbnN0IG5ld1dhcm5pbmdzID0gT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUud2FybmluZ3MpO1xuICAgICAgICBjb25zdCBuZXdUb3VjaGVkID0gT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUudG91Y2hlZCk7XG4gICAgICAgIGNvbnN0IG5ld1ZhbGlkYXRpbmcgPSBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZS52YWxpZGF0aW5nKTtcbiAgICAgICAgZmllbGRzLmZvckVhY2goKGZpZWxkKSA9PiB7XG4gICAgICAgICAgICBkZWxldGUgbmV3RXJyb3JzW2ZpZWxkXTtcbiAgICAgICAgICAgIGRlbGV0ZSBuZXdXYXJuaW5nc1tmaWVsZF07XG4gICAgICAgICAgICBkZWxldGUgbmV3VG91Y2hlZFtmaWVsZF07XG4gICAgICAgICAgICBkZWxldGUgbmV3VmFsaWRhdGluZ1tmaWVsZF07XG4gICAgICAgIH0pO1xuICAgICAgICBzdG9yZS5zZXRTdGF0ZSh7XG4gICAgICAgICAgICB2YWx1ZXM6IG5ld1ZhbHVlcyxcbiAgICAgICAgICAgIGVycm9yczogbmV3RXJyb3JzLFxuICAgICAgICAgICAgd2FybmluZ3M6IG5ld1dhcm5pbmdzLFxuICAgICAgICAgICAgdG91Y2hlZDogbmV3VG91Y2hlZCxcbiAgICAgICAgICAgIHZhbGlkYXRpbmc6IG5ld1ZhbGlkYXRpbmcsXG4gICAgICAgIH0pO1xuICAgIH0pO1xuICAgIGNvbnN0IHN1Ym1pdFdpdGhWYWxpZGF0aW9uID0gdXNlTWVtb2l6ZWRGbigoY2FsbGJhY2spID0+IF9fYXdhaXRlcih2b2lkIDAsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBsZXQgdmFsaWRhdGVkVmFsdWVzO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgdmFsaWRhdGVkVmFsdWVzID0geWllbGQgdmFsaWRhdGVGaWVsZHNBc3luYygpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChfYSkge1xuICAgICAgICAgICAgLy8gVmFsaWRhdGlvbiBmYWlsdXJlIOKAlCB0aGUgZmllbGQgZXJyb3JzIGFyZSBhbHJlYWR5IGluIHRoZSBzdG9yZS5cbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHlpZWxkIGNhbGxiYWNrKHZhbGlkYXRlZFZhbHVlcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgLy8gQSB0aHJvd2luZyBjYWxsYmFjayBpcyBhIGNvbnN1bWVyIGJ1Zywgbm90IGEgdmFsaWRhdGlvbiBmYWlsdXJlIOKAlFxuICAgICAgICAgICAgICAgIC8vIHN1cmZhY2UgaXQgKG1pcnJvcmluZyByYy1maWVsZC1mb3JtJ3Mgb25GaW5pc2ggaGFuZGxpbmcpIGluc3RlYWRcbiAgICAgICAgICAgICAgICAvLyBvZiBzd2FsbG93aW5nIGl0IHNpbGVudGx5LlxuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1tQcm9Gb3JtXSBzdWJtaXQgY2FsbGJhY2sgdGhyZXc6JywgZXJyKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YWxpZGF0ZWRWYWx1ZXM7XG4gICAgfSkpO1xuICAgIGNvbnN0IGZvcm1JbnN0YW5jZSA9IHVzZU1lbW8oKCkgPT4gKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgZm9ybUNvcmUuZm9ybUluc3RhbmNlKSwgeyBnZXRGaWVsZFZhbHVlOiBmb3JtQ29yZS5nZXRGaWVsZFZhbHVlLCBnZXRGaWVsZHNWYWx1ZTogZm9ybUNvcmUuZ2V0RmllbGRzVmFsdWUsIHZhbGlkYXRlRmllbGRzOiB2YWxpZGF0ZUZpZWxkc0FzeW5jLCBzZXRGaWVsZFZhbHVlOiBmb3JtQ29yZS5zZXRGaWVsZFZhbHVlLCBzZXRGaWVsZHNWYWx1ZTogZm9ybUNvcmUuc2V0RmllbGRzVmFsdWUsIGdldEZpZWxkRXJyb3I6IGdldEZpZWxkRXJyb3IsIGdldEZpZWxkV2FybmluZzogZ2V0RmllbGRXYXJuaW5nLCBnZXRGaWVsZHNFcnJvcjogZ2V0RmllbGRzRXJyb3IsIGlzRmllbGRUb3VjaGVkOiBpc0ZpZWxkVG91Y2hlZCwgaXNGaWVsZHNUb3VjaGVkOiBpc0ZpZWxkc1RvdWNoZWQsIGlzRmllbGRWYWxpZGF0aW5nOiBpc0ZpZWxkVmFsaWRhdGluZywgc2V0RmllbGRFcnJvcjogZm9ybUNvcmUuc2V0RmllbGRFcnJvciwgc2V0RmllbGRzRXJyb3IsIHNldEZpZWxkVG91Y2hlZDogc2V0RmllbGRUb3VjaGVkLCBzZXRGaWVsZHNUb3VjaGVkLCByZXNldEZpZWxkczogcmVzZXRGb3JtRmllbGRzLCBzdWJtaXQ6IHN1Ym1pdFdpdGhWYWxpZGF0aW9uLCBkZWZpbmVGaWVsZCwgcmVnaXN0ZXJGaWVsZDogZm9ybUNvcmUucmVnaXN0ZXJGaWVsZCwgdW5yZWdpc3RlckZpZWxkOiBmb3JtQ29yZS51bnJlZ2lzdGVyRmllbGQgfSkpLCBbXG4gICAgICAgIGZvcm1Db3JlLmZvcm1JbnN0YW5jZSxcbiAgICAgICAgZm9ybUNvcmUuZ2V0RmllbGRWYWx1ZSxcbiAgICAgICAgZm9ybUNvcmUuZ2V0RmllbGRzVmFsdWUsXG4gICAgICAgIGZvcm1Db3JlLnNldEZpZWxkVmFsdWUsXG4gICAgICAgIGZvcm1Db3JlLnNldEZpZWxkc1ZhbHVlLFxuICAgICAgICBmb3JtQ29yZS5zZXRGaWVsZEVycm9yLFxuICAgICAgICBmb3JtQ29yZS5yZWdpc3RlckZpZWxkLFxuICAgICAgICBmb3JtQ29yZS51bnJlZ2lzdGVyRmllbGQsXG4gICAgICAgIHZhbGlkYXRlRmllbGRzQXN5bmMsXG4gICAgICAgIGdldEZpZWxkRXJyb3IsXG4gICAgICAgIGdldEZpZWxkV2FybmluZyxcbiAgICAgICAgZ2V0RmllbGRzRXJyb3IsXG4gICAgICAgIGlzRmllbGRUb3VjaGVkLFxuICAgICAgICBpc0ZpZWxkc1RvdWNoZWQsXG4gICAgICAgIGlzRmllbGRWYWxpZGF0aW5nLFxuICAgICAgICBzZXRGaWVsZHNFcnJvcixcbiAgICAgICAgc2V0RmllbGRUb3VjaGVkLFxuICAgICAgICBzZXRGaWVsZHNUb3VjaGVkLFxuICAgICAgICByZXNldEZvcm1GaWVsZHMsXG4gICAgICAgIHN1Ym1pdFdpdGhWYWxpZGF0aW9uLFxuICAgICAgICBkZWZpbmVGaWVsZCxcbiAgICBdKTtcbiAgICAvLyBGdW5jdGlvbi1mb3JtIHJ1bGVzIGdldCB0aGUgRlVMTCBmb3JtIGluc3RhbmNlIChlcnJvciBnZXR0ZXJzLCB0b3VjaGVkXG4gICAgLy8gc3RhdGUsIG11dGF0b3JzKSBpbnN0ZWFkIG9mIHRoZSBiYXJlIGNvcmUgbWV0aG9kcy4gUmVmIHdyaXRlIOKAlCBjaGVhcCBhbmRcbiAgICAvLyBpZGVtcG90ZW50IHBlciByZW5kZXIuXG4gICAgZm9ybUNvcmUuc2V0UnVsZUNvbnRleHRJbnN0YW5jZShmb3JtSW5zdGFuY2UpO1xuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIC8vIEludGVybmFscyDigJMgZXhwb3NlZCBmb3IgUHJvRm9ybSBpbnRlZ3JhdGlvbi4gRGF0YSBmaWVsZHMgYXJlIEdFVFRFUlMgdGhhdFxuICAgIC8vIHJlYWQgdGhlIGxpdmUgc3RvcmUsIHNvIHRoZSBvYmplY3QgaXMgaWRlbnRpdHktc3RhYmxlIHlldCBuZXZlciBzdGFsZS5cbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICBjb25zdCBpbnRlcm5hbHMgPSB1c2VNZW1vKCgpID0+ICh7XG4gICAgICAgIGdldCB2YWx1ZXMoKSB7XG4gICAgICAgICAgICByZXR1cm4gc3RvcmUuZ2V0U3RhdGUoKS52YWx1ZXM7XG4gICAgICAgIH0sXG4gICAgICAgIGdldCBlcnJvcnMoKSB7XG4gICAgICAgICAgICByZXR1cm4gc3RvcmUuZ2V0U3RhdGUoKS5lcnJvcnM7XG4gICAgICAgIH0sXG4gICAgICAgIGdldCB3YXJuaW5ncygpIHtcbiAgICAgICAgICAgIHJldHVybiBzdG9yZS5nZXRTdGF0ZSgpLndhcm5pbmdzO1xuICAgICAgICB9LFxuICAgICAgICBnZXQgdG91Y2hlZCgpIHtcbiAgICAgICAgICAgIHJldHVybiBzdG9yZS5nZXRTdGF0ZSgpLnRvdWNoZWQ7XG4gICAgICAgIH0sXG4gICAgICAgIGdldCB2YWxpZGF0aW5nKCkge1xuICAgICAgICAgICAgcmV0dXJuIHN0b3JlLmdldFN0YXRlKCkudmFsaWRhdGluZztcbiAgICAgICAgfSxcbiAgICAgICAgZmllbGRSdWxlczogZm9ybUNvcmUuZmllbGRSdWxlcyxcbiAgICAgICAgc2V0RmllbGRWYWx1ZTogZm9ybUNvcmUuc2V0RmllbGRWYWx1ZSxcbiAgICAgICAgc2V0RmllbGRFcnJvcjogZm9ybUNvcmUuc2V0RmllbGRFcnJvcixcbiAgICAgICAgc2V0RmllbGRXYXJuaW5nOiBmb3JtQ29yZS5zZXRGaWVsZFdhcm5pbmcsXG4gICAgICAgIHZhbGlkYXRlRmllbGRBc3luYyxcbiAgICAgICAgcmVnaXN0ZXJGaWVsZDogZm9ybUNvcmUucmVnaXN0ZXJGaWVsZCxcbiAgICAgICAgdW5yZWdpc3RlckZpZWxkOiBmb3JtQ29yZS51bnJlZ2lzdGVyRmllbGQsXG4gICAgICAgIHJldGFpbkZpZWxkOiBmb3JtQ29yZS5yZXRhaW5GaWVsZCxcbiAgICAgICAgcmVsZWFzZUZpZWxkOiBmb3JtQ29yZS5yZWxlYXNlRmllbGQsXG4gICAgICAgIGhhbmRsZVN1Ym1pdCxcbiAgICAgICAgaGFuZGxlUmVzZXQsXG4gICAgfSksIFtcbiAgICAgICAgc3RvcmUsXG4gICAgICAgIGZvcm1Db3JlLmZpZWxkUnVsZXMsXG4gICAgICAgIGZvcm1Db3JlLnNldEZpZWxkVmFsdWUsXG4gICAgICAgIGZvcm1Db3JlLnNldEZpZWxkRXJyb3IsXG4gICAgICAgIGZvcm1Db3JlLnNldEZpZWxkV2FybmluZyxcbiAgICAgICAgdmFsaWRhdGVGaWVsZEFzeW5jLFxuICAgICAgICBmb3JtQ29yZS5yZWdpc3RlckZpZWxkLFxuICAgICAgICBmb3JtQ29yZS51bnJlZ2lzdGVyRmllbGQsXG4gICAgICAgIGZvcm1Db3JlLnJldGFpbkZpZWxkLFxuICAgICAgICBmb3JtQ29yZS5yZWxlYXNlRmllbGQsXG4gICAgICAgIGhhbmRsZVN1Ym1pdCxcbiAgICAgICAgaGFuZGxlUmVzZXQsXG4gICAgXSk7XG4gICAgcmV0dXJuIHsgZm9ybUluc3RhbmNlLCBpbnRlcm5hbHMsIHN0b3JlIH07XG59O1xuZXhwb3J0IGRlZmF1bHQgdXNlRm9ybTsiLG51bGxdLCJzb3VyY2VSb290IjoiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjIn0=