@plumile/router 0.2.3 → 0.2.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (79) hide show
  1. package/README.md +2 -1
  2. package/lib/esm/builder.d.ts +1 -0
  3. package/lib/esm/builder.d.ts.map +1 -1
  4. package/lib/esm/builder.js +27 -4
  5. package/lib/esm/errors/HttpRedirect.d.ts +3 -2
  6. package/lib/esm/errors/HttpRedirect.d.ts.map +1 -1
  7. package/lib/esm/errors/HttpRedirect.js +1 -1
  8. package/lib/esm/history/BrowserHistory.d.ts +4 -1
  9. package/lib/esm/history/BrowserHistory.d.ts.map +1 -1
  10. package/lib/esm/history/BrowserHistory.js +52 -2
  11. package/lib/esm/history/types.d.ts +6 -0
  12. package/lib/esm/history/types.d.ts.map +1 -1
  13. package/lib/esm/history/types.js +1 -1
  14. package/lib/esm/instrumentation/Instrumentation.d.ts +8 -10
  15. package/lib/esm/instrumentation/Instrumentation.d.ts.map +1 -1
  16. package/lib/esm/instrumentation/Instrumentation.js +1 -1
  17. package/lib/esm/instrumentation/adapters/devtoolsBridge.d.ts +1 -0
  18. package/lib/esm/instrumentation/adapters/devtoolsBridge.d.ts.map +1 -1
  19. package/lib/esm/instrumentation/adapters/devtoolsBridge.js +18 -7
  20. package/lib/esm/routing/Link.d.ts.map +1 -1
  21. package/lib/esm/routing/Link.js +24 -10
  22. package/lib/esm/routing/RouteComponentWrapper.d.ts.map +1 -1
  23. package/lib/esm/routing/RouteComponentWrapper.js +26 -50
  24. package/lib/esm/routing/RouterRenderer.d.ts +5 -2
  25. package/lib/esm/routing/RouterRenderer.d.ts.map +1 -1
  26. package/lib/esm/routing/RouterRenderer.js +8 -2
  27. package/lib/esm/routing/createRouter.d.ts +2 -1
  28. package/lib/esm/routing/createRouter.d.ts.map +1 -1
  29. package/lib/esm/routing/createRouter.js +192 -16
  30. package/lib/esm/routing/createStaticRouter.d.ts +16 -2
  31. package/lib/esm/routing/createStaticRouter.d.ts.map +1 -1
  32. package/lib/esm/routing/createStaticRouter.js +46 -10
  33. package/lib/esm/routing/index.d.ts +3 -3
  34. package/lib/esm/routing/index.d.ts.map +1 -1
  35. package/lib/esm/routing/index.js +3 -3
  36. package/lib/esm/routing/routerHydration.d.ts +5 -0
  37. package/lib/esm/routing/routerHydration.d.ts.map +1 -0
  38. package/lib/esm/routing/routerHydration.js +57 -0
  39. package/lib/esm/tools.d.ts +6 -2
  40. package/lib/esm/tools.d.ts.map +1 -1
  41. package/lib/esm/tools.js +56 -5
  42. package/lib/esm/types.d.ts +42 -11
  43. package/lib/esm/types.d.ts.map +1 -1
  44. package/lib/esm/types.js +1 -1
  45. package/lib/tsconfig.esm.tsbuildinfo +1 -1
  46. package/lib/types/builder.d.ts +1 -0
  47. package/lib/types/builder.d.ts.map +1 -1
  48. package/lib/types/errors/HttpRedirect.d.ts +3 -2
  49. package/lib/types/errors/HttpRedirect.d.ts.map +1 -1
  50. package/lib/types/history/BrowserHistory.d.ts +4 -1
  51. package/lib/types/history/BrowserHistory.d.ts.map +1 -1
  52. package/lib/types/history/types.d.ts +6 -0
  53. package/lib/types/history/types.d.ts.map +1 -1
  54. package/lib/types/instrumentation/Instrumentation.d.ts +8 -10
  55. package/lib/types/instrumentation/Instrumentation.d.ts.map +1 -1
  56. package/lib/types/instrumentation/adapters/devtoolsBridge.d.ts +1 -0
  57. package/lib/types/instrumentation/adapters/devtoolsBridge.d.ts.map +1 -1
  58. package/lib/types/routing/Link.d.ts.map +1 -1
  59. package/lib/types/routing/RouteComponentWrapper.d.ts.map +1 -1
  60. package/lib/types/routing/RouterRenderer.d.ts +5 -2
  61. package/lib/types/routing/RouterRenderer.d.ts.map +1 -1
  62. package/lib/types/routing/createRouter.d.ts +2 -1
  63. package/lib/types/routing/createRouter.d.ts.map +1 -1
  64. package/lib/types/routing/createStaticRouter.d.ts +16 -2
  65. package/lib/types/routing/createStaticRouter.d.ts.map +1 -1
  66. package/lib/types/routing/index.d.ts +3 -3
  67. package/lib/types/routing/index.d.ts.map +1 -1
  68. package/lib/types/routing/routerHydration.d.ts +5 -0
  69. package/lib/types/routing/routerHydration.d.ts.map +1 -0
  70. package/lib/types/tools.d.ts +6 -2
  71. package/lib/types/tools.d.ts.map +1 -1
  72. package/lib/types/types.d.ts +42 -11
  73. package/lib/types/types.d.ts.map +1 -1
  74. package/package.json +3 -3
  75. package/lib/esm/routing/RouteComponent.d.ts +0 -8
  76. package/lib/esm/routing/RouteComponent.d.ts.map +0 -1
  77. package/lib/esm/routing/RouteComponent.js +0 -20
  78. package/lib/types/routing/RouteComponent.d.ts +0 -8
  79. package/lib/types/routing/RouteComponent.d.ts.map +0 -1
@@ -98,7 +98,7 @@ const renderRouteEntry = (entry, fallback) => {
98
98
  return mainComponent;
99
99
  };
100
100
  const RouterRenderer = (props) => {
101
- const { externalPending = false, fallback, pending, enableTransition = false, } = props;
101
+ const { externalPending = false, fallback, pending, enableTransition = false, onRouteCommit, } = props;
102
102
  const [isSuspensePending, setIsSuspensePending] = useState(false);
103
103
  const router = useContext(RoutingContext);
104
104
  const [activeRouteEntry, setActiveRouteEntry] = useState(() => {
@@ -108,6 +108,8 @@ const RouterRenderer = (props) => {
108
108
  return router?.get();
109
109
  });
110
110
  const committedRouteEntryRef = useRef(undefined);
111
+ const onRouteCommitRef = useRef(onRouteCommit);
112
+ onRouteCommitRef.current = onRouteCommit;
111
113
  useEffect(() => {
112
114
  if (router == null) {
113
115
  setActiveRouteEntry(undefined);
@@ -177,7 +179,11 @@ const RouterRenderer = (props) => {
177
179
  return renderRouteEntry(displayedRouteEntry, fallback);
178
180
  }, [displayedRouteEntry, fallback]);
179
181
  const handleRouteEntryCommit = useCallback((entry) => {
182
+ if (committedRouteEntryRef.current === entry) {
183
+ return;
184
+ }
180
185
  committedRouteEntryRef.current = entry;
186
+ onRouteCommitRef.current?.(entry);
181
187
  }, []);
182
188
  const transitionFallback = useMemo(() => {
183
189
  if (!enableTransition) {
@@ -189,4 +195,4 @@ const RouterRenderer = (props) => {
189
195
  return (_jsxs(_Fragment, { children: [pendingContent, _jsx(Suspense, { fallback: transitionFallback, children: _jsx(RouteEntryCommitObserver, { entry: displayedRouteEntry, onCommit: handleRouteEntryCommit, children: routeComponent }) })] }));
190
196
  };
191
197
  export default RouterRenderer;
192
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUm91dGVyUmVuZGVyZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvcm91dGluZy9Sb3V0ZXJSZW5kZXJlci50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sS0FBSyxFQUFFLEVBRVosV0FBVyxFQUNYLFNBQVMsRUFDVCxPQUFPLEVBQ1AsTUFBTSxFQUNOLFFBQVEsRUFDUixlQUFlLEdBRWhCLE1BQU0sT0FBTyxDQUFDO0FBVWYsT0FBTyxjQUFjLE1BQU0scUJBQXFCLENBQUM7QUFDakQsT0FBTyxxQkFBcUIsTUFBTSw0QkFBNEIsQ0FBQztBQUUvRCxNQUFNLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxHQUFHLEtBQUssQ0FBQztBQUV2QyxJQUFJLEtBQUssR0FBRyxDQUFDLENBQUM7QUFRZCxNQUFNLFVBQVUsV0FBVztJQUN6QixLQUFLLElBQUksQ0FBQyxDQUFDO0lBQ1gsT0FBTyxLQUFLLENBQUM7QUFDZixDQUFDO0FBbUNELE1BQU0sd0JBQXdCLEdBQUcsQ0FDL0IsS0FBb0MsRUFDdkIsRUFBRTtJQUNmLE1BQU0sRUFBRSxRQUFRLEVBQUUsZUFBZSxFQUFFLEdBQUcsS0FBSyxDQUFDO0lBRTVDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7UUFDYixlQUFlLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDdEIsT0FBTyxHQUFHLEVBQUU7WUFDVixlQUFlLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDekIsQ0FBQyxDQUFDO0lBQ0osQ0FBQyxFQUFFLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQztJQUV0QixPQUFPLDRCQUFHLFFBQVEsR0FBSSxDQUFDO0FBQ3pCLENBQUMsQ0FBQztBQUVGLE1BQU0sd0JBQXdCLEdBQUcsQ0FDL0IsS0FBb0MsRUFDdkIsRUFBRTtJQUNmLE1BQU0sRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxHQUFHLEtBQUssQ0FBQztJQUU1QyxTQUFTLENBQUMsR0FBRyxFQUFFO1FB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Iiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFJlYWN0LCB7XG4gIHR5cGUgUmVhY3ROb2RlLFxuICB1c2VDYWxsYmFjayxcbiAgdXNlRWZmZWN0LFxuICB1c2VNZW1vLFxuICB1c2VSZWYsXG4gIHVzZVN0YXRlLFxuICBzdGFydFRyYW5zaXRpb24sXG4gIHR5cGUgSlNYLFxufSBmcm9tICdyZWFjdCc7XG5cbmltcG9ydCB0eXBlIHtcbiAgUHJlcGFyZWRSb3V0ZVNlZ21lbnQsXG4gIFJvdXRlRmFsbGJhY2ssXG4gIFJvdXRlRW50cnksXG4gIFJvdXRlck1hdGNoZWRSb3V0ZSxcbn0gZnJvbSAnLi4vdHlwZXMuanMnO1xuaW1wb3J0IHR5cGUgeyBQYXJhbURhdGEgfSBmcm9tICdwYXRoLXRvLXJlZ2V4cCc7XG5cbmltcG9ydCBSb3V0aW5nQ29udGV4dCBmcm9tICcuL1JvdXRpbmdDb250ZXh0LmpzJztcbmltcG9ydCBSb3V0ZUNvbXBvbmVudFdyYXBwZXIgZnJvbSAnLi9Sb3V0ZUNvbXBvbmVudFdyYXBwZXIuanMnO1xuXG5jb25zdCB7IHVzZUNvbnRleHQsIFN1c3BlbnNlIH0gPSBSZWFjdDtcblxubGV0IGluZGV4ID0gMDtcblxuLyoqXG4gKiBHZW5lcmF0ZXMgYSB1bmlxdWUgaW5kZXggZm9yIGNvbXBvbmVudCBpbnN0YW5jZXMuXG4gKiBUaGlzIGlzIHVzZWQgaW50ZXJuYWxseSB0byBlbnN1cmUgcHJvcGVyIFJlYWN0IHJlY29uY2lsaWF0aW9uLlxuICpcbiAqIEByZXR1cm5zIEEgdW5pcXVlIGluY3JlbWVudGFsIG51bWJlclxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0TmV3SW5kZXgoKTogbnVtYmVyIHtcbiAgaW5kZXggKz0gMTtcbiAgcmV0dXJuIGluZGV4O1xufVxuXG4vKipcbiAqIFByb3BzIGZvciB0aGUgUm91dGVyUmVuZGVyZXIgY29tcG9uZW50LlxuICovXG50eXBlIFByb3BzID0ge1xuICAvKiogRmFsbGJhY2sgVUkgdG8gc2hvdyB3aGlsZSBsb2FkaW5nIGNvbXBvbmVudHMgKi9cbiAgZmFsbGJhY2s6IFJlYWN0Tm9kZTtcbiAgLyoqIFdoZXRoZXIgdG8gc2hvdyBwZW5kaW5nIGNvbnRlbnQgd2hpbGUgUmVhY3QgcmVwb3J0cyBhIHRyYW5zaXRpb24gZWxzZXdoZXJlICovXG4gIGVuYWJsZVRyYW5zaXRpb24/OiBib29sZWFuO1xuICAvKiogRXh0ZXJuYWwgYXN5bmMgYWN0aXZpdHkgdGhhdCBzaG91bGQgYWxzbyBzaG93IHBlbmRpbmcgY29udGVudCAqL1xuICBleHRlcm5hbFBlbmRpbmc/OiBib29sZWFuO1xuICAvKiogVUkgdG8gc2hvdyBkdXJpbmcgdHJhbnNpdGlvbnMgKHdoZW4gZW5hYmxlVHJhbnNpdGlvbiBpcyB0cnVlKSAqL1xuICBwZW5kaW5nPzogUmVhY3ROb2RlO1xufTtcblxudHlwZSBTdXNwZW5zZUZhbGxiYWNrT2JzZXJ2ZXJQcm9wcyA9IHtcbiAgY2hpbGRyZW46IFJlYWN0Tm9kZTtcbiAgb25QZW5kaW5nQ2hhbmdlOiAoaXNQZW5kaW5nOiBib29sZWFuKSA9PiB2b2lkO1xufTtcblxudHlwZSBSb3V0ZVNlZ21lbnRCb3VuZGFyeVByb3BzID0ge1xuICBjaGlsZHJlbj86IFJlYWN0Tm9kZTtcbiAgZW50cnk6IFJvdXRlRW50cnk8UGFyYW1EYXRhPjtcbiAgZmFsbGJhY2s6IFJlYWN0Tm9kZTtcbiAgbWF0Y2g6IFJvdXRlck1hdGNoZWRSb3V0ZTxQYXJhbURhdGE+IHwgbnVsbDtcbiAgcHJlcGFyZWRTZWdtZW50OiBQcmVwYXJlZFJvdXRlU2VnbWVudDtcbn07XG5cbnR5cGUgUm91dGVFbnRyeUNvbW1pdE9ic2VydmVyUHJvcHMgPSB7XG4gIGNoaWxkcmVuOiBSZWFjdE5vZGU7XG4gIGVudHJ5OiBSb3V0ZUVudHJ5PFBhcmFtRGF0YT4gfCB1bmRlZmluZWQ7XG4gIG9uQ29tbWl0OiAoZW50cnk6IFJvdXRlRW50cnk8UGFyYW1EYXRhPikgPT4gdm9pZDtcbn07XG5cbmNvbnN0IFN1c3BlbnNlRmFsbGJhY2tPYnNlcnZlciA9IChcbiAgcHJvcHM6IFN1c3BlbnNlRmFsbGJhY2tPYnNlcnZlclByb3BzLFxuKTogSlNYLkVsZW1lbnQgPT4ge1xuICBjb25zdCB7IGNoaWxkcmVuLCBvblBlbmRpbmdDaGFuZ2UgfSA9IHByb3BzO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgb25QZW5kaW5nQ2hhbmdlKHRydWUpO1xuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBvblBlbmRpbmdDaGFuZ2UoZmFsc2UpO1xuICAgIH07XG4gIH0sIFtvblBlbmRpbmdDaGFuZ2VdKTtcblxuICByZXR1cm4gPD57Y2hpbGRyZW59PC8+O1xufTtcblxuY29uc3QgUm91dGVFbnRyeUNvbW1pdE9ic2VydmVyID0gKFxuICBwcm9wczogUm91dGVFbnRyeUNvbW1pdE9ic2VydmVyUHJvcHMsXG4pOiBKU1guRWxlbWVudCA9PiB7XG4gIGNvbnN0IHsgY2hpbGRyZW4sIGVudHJ5LCBvbkNvbW1pdCB9ID0gcHJvcHM7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoZW50cnkgIT0gbnVsbCkge1xuICAgICAgb25Db21taXQoZW50cnkpO1xuICAgIH1cbiAgfSwgW2VudHJ5LCBvbkNvbW1pdF0pO1xuXG4gIHJldHVybiA8PntjaGlsZHJlbn08Lz47XG59O1xuXG5jb25zdCByZXNvbHZlUm91dGVGYWxsYmFjayA9IChcbiAgZmFsbGJhY2s6IFJvdXRlRmFsbGJhY2sgfCB1bmRlZmluZWQsXG4gIGRlZmF1bHRGYWxsYmFjazogUmVhY3ROb2RlLFxuICBhcmdzOiB7XG4gICAgY2hpbGRyZW4/OiBSZWFjdE5vZGU7XG4gICAgbWF0Y2g6IFJvdXRlck1hdGNoZWRSb3V0ZTxQYXJhbURhdGE+IHwgbnVsbDtcbiAgICBzZWdtZW50OiBQcmVwYXJlZFJvdXRlU2VnbWVudDtcbiAgfSxcbik6IFJlYWN0Tm9kZSA9PiB7XG4gIGlmICh0eXBlb2YgZmFsbGJhY2sgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gZmFsbGJhY2soYXJncyk7XG4gIH1cblxuICBpZiAodHlwZW9mIGZhbGxiYWNrICE9PSAndW5kZWZpbmVkJykge1xuICAgIHJldHVybiBmYWxsYmFjaztcbiAgfVxuXG4gIHJldHVybiBkZWZhdWx0RmFsbGJhY2s7XG59O1xuXG5jb25zdCBSb3V0ZVNlZ21lbnRCb3VuZGFyeSA9ICh7XG4gIGNoaWxkcmVuLFxuICBlbnRyeSxcbiAgZmFsbGJhY2ssXG4gIG1hdGNoLFxuICBwcmVwYXJlZFNlZ21lbnQsXG59OiBSb3V0ZVNlZ21lbnRCb3VuZGFyeVByb3BzKTogSlNYLkVsZW1lbnQgPT4ge1xuICBjb25zdCByb3V0ZUNvbXBvbmVudCA9IChcbiAgICA8Um91dGVDb21wb25lbnRXcmFwcGVyXG4gICAgICBlbnRyeT17ZW50cnl9XG4gICAgICBtYXRjaD17bWF0Y2h9XG4gICAgICBwcmVwYXJlZFNlZ21lbnQ9e3ByZXBhcmVkU2VnbWVudH1cbiAgICA+XG4gICAgICB7Y2hpbGRyZW59XG4gICAgPC9Sb3V0ZUNvbXBvbmVudFdyYXBwZXI+XG4gICk7XG5cbiAgaWYgKHByZXBhcmVkU2VnbWVudC5zdXNwZW5zZUJvdW5kYXJ5ICE9PSAnc2VnbWVudCcpIHtcbiAgICByZXR1cm4gcm91dGVDb21wb25lbnQ7XG4gIH1cblxuICByZXR1cm4gPFN1c3BlbnNlIGZhbGxiYWNrPXtmYWxsYmFja30+e3JvdXRlQ29tcG9uZW50fTwvU3VzcGVuc2U+O1xufTtcblxuY29uc3QgY2FuUmVuZGVyUGVuZGluZ0VudHJ5V2l0aExvY2FsQm91bmRhcmllcyA9IChcbiAgZW50cnk6IFJvdXRlRW50cnk8UGFyYW1EYXRhPixcbik6IGJvb2xlYW4gPT4ge1xuICBpZiAoZW50cnkuYWN0aXZlTG9hZFN0YXRlLnN0YXR1cyAhPT0gJ3BlbmRpbmcnKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICByZXR1cm4gZW50cnkubG9hZFN0YXRlLnNlZ21lbnRzLmV2ZXJ5KChzZWdtZW50LCBpbmRleCkgPT4ge1xuICAgIGlmIChzZWdtZW50LnN0YXR1cyAhPT0gJ3BlbmRpbmcnKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gZW50cnkucHJlcGFyZWRNYXRjaC5zZWdtZW50c1tpbmRleF0/LnN1c3BlbnNlQm91bmRhcnkgPT09ICdzZWdtZW50JztcbiAgfSk7XG59O1xuXG5jb25zdCByb3V0ZUxvY2F0aW9uS2V5ID0gKGVudHJ5OiBSb3V0ZUVudHJ5PFBhcmFtRGF0YT4pOiBzdHJpbmcgPT4ge1xuICByZXR1cm4gYCR7ZW50cnkubG9jYXRpb24ucGF0aG5hbWV9JHtlbnRyeS5sb2NhdGlvbi5zZWFyY2h9JHtlbnRyeS5sb2NhdGlvbi5oYXNofWA7XG59O1xuXG5jb25zdCBjYW5EaXNwbGF5Um91dGVFbnRyeSA9IChcbiAgZW50cnk6IFJvdXRlRW50cnk8UGFyYW1EYXRhPixcbiAgY3VycmVudEVudHJ5OiBSb3V0ZUVudHJ5PFBhcmFtRGF0YT4gfCB1bmRlZmluZWQsXG4gIGV4dGVybmFsUGVuZGluZzogYm9vbGVhbixcbik6IGJvb2xlYW4gPT4ge1xuICBpZiAoY3VycmVudEVudHJ5ID09IG51bGwpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGNvbnN0IGlzUm91dGVDaGFuZ2UgPVxuICAgIHJvdXRlTG9jYXRpb25LZXkoZW50cnkpICE9PSByb3V0ZUxvY2F0aW9uS2V5KGN1cnJlbnRFbnRyeSk7XG4gIGNvbnN0IGhhc0xvY2FsQm91bmRhcnkgPSBlbnRyeS5wcmVwYXJlZE1hdGNoLnNlZ21lbnRzLnNvbWUoKHJvdXRlKSA9PiB7XG4gICAgcmV0dXJuIHJvdXRlLnN1c3BlbnNlQm91bmRhcnkgPT09ICdzZWdtZW50JztcbiAgfSk7XG5cbiAgaWYgKGV4dGVybmFsUGVuZGluZyAmJiBpc1JvdXRlQ2hhbmdlICYmICFoYXNMb2NhbEJvdW5kYXJ5KSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIGNhblJlbmRlclBlbmRpbmdFbnRyeVdpdGhMb2NhbEJvdW5kYXJpZXMoZW50cnkpO1xufTtcblxuY29uc3QgcmVuZGVyUm91dGVFbnRyeSA9IChcbiAgZW50cnk6IFJvdXRlRW50cnk8UGFyYW1EYXRhPiB8IHVuZGVmaW5lZCxcbiAgZmFsbGJhY2s6IFJlYWN0Tm9kZSxcbik6IFJlYWN0Tm9kZSA9PiB7XG4gIGlmIChlbnRyeSA9PSBudWxsKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjb25zdCByZXN1bHQ6IFByZXBhcmVkUm91dGVTZWdtZW50W10gPSBbXTtcblxuICBjb25zdCByZXZlcnNlZEl0ZW1zID0gcmVzdWx0LmNvbmNhdChlbnRyeS5wcmVwYXJlZE1hdGNoLnNlZ21lbnRzKS5yZXZlcnNlKCk7XG4gIGNvbnN0IGZpcnN0SXRlbSA9IHJldmVyc2VkSXRlbXNbMF07XG5cbiAgaWYgKGZpcnN0SXRlbSA9PSBudWxsKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjb25zdCBtYXRjaCA9IGVudHJ5LnByZXBhcmVkTWF0Y2gubWF0Y2ggPz8gbnVsbDtcbiAgbGV0IG1haW5Db21wb25lbnQgPSAoXG4gICAgPFJvdXRlU2VnbWVudEJvdW5kYXJ5XG4gICAgICBrZXk9e2ZpcnN0SXRlbS5zZWdtZW50S2V5fVxuICAgICAgZW50cnk9e2VudHJ5fVxuICAgICAgZmFsbGJhY2s9e3Jlc29sdmVSb3V0ZUZhbGxiYWNrKGZpcnN0SXRlbS5mYWxsYmFjaywgZmFsbGJhY2ssIHtcbiAgICAgICAgbWF0Y2gsXG4gICAgICAgIHNlZ21lbnQ6IGZpcnN0SXRlbSxcbiAgICAgIH0pfVxuICAgICAgbWF0Y2g9e21hdGNofVxuICAgICAgcHJlcGFyZWRTZWdtZW50PXtmaXJzdEl0ZW19XG4gICAgLz5cbiAgKTtcblxuICBmb3IgKGxldCBpbmRleCA9IDE7IGluZGV4IDwgcmV2ZXJzZWRJdGVtcy5sZW5ndGg7IGluZGV4ICs9IDEpIHtcbiAgICBjb25zdCBuZXh0SXRlbSA9IHJldmVyc2VkSXRlbXNbaW5kZXhdO1xuICAgIGlmIChuZXh0SXRlbSAhPSBudWxsKSB7XG4gICAgICBtYWluQ29tcG9uZW50ID0gKFxuICAgICAgICA8Um91dGVTZWdtZW50Qm91bmRhcnlcbiAgICAgICAgICBrZXk9e25leHRJdGVtLnNlZ21lbnRLZXl9XG4gICAgICAgICAgZW50cnk9e2VudHJ5fVxuICAgICAgICAgIGZhbGxiYWNrPXtyZXNvbHZlUm91dGVGYWxsYmFjayhuZXh0SXRlbS5mYWxsYmFjaywgZmFsbGJhY2ssIHtcbiAgICAgICAgICAgIGNoaWxkcmVuOiBtYWluQ29tcG9uZW50LFxuICAgICAgICAgICAgbWF0Y2gsXG4gICAgICAgICAgICBzZWdtZW50OiBuZXh0SXRlbSxcbiAgICAgICAgICB9KX1cbiAgICAgICAgICBtYXRjaD17bWF0Y2h9XG4gICAgICAgICAgcHJlcGFyZWRTZWdtZW50PXtuZXh0SXRlbX1cbiAgICAgICAgPlxuICAgICAgICAgIHttYWluQ29tcG9uZW50fVxuICAgICAgICA8L1JvdXRlU2VnbWVudEJvdW5kYXJ5PlxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbWFpbkNvbXBvbmVudDtcbn07XG5cbi8qKlxuICogTWFpbiByb3V0ZXIgcmVuZGVyZXIgY29tcG9uZW50IHRoYXQgZGlzcGxheXMgdGhlIGN1cnJlbnQgcm91dGUuXG4gKlxuICogVGhpcyBjb21wb25lbnQgYWNjZXNzZXMgdGhlIGN1cnJlbnQgcm91dGUgZW50cnkgZnJvbSBSb3V0aW5nQ29udGV4dCBhbmQgcmVuZGVyc1xuICogdGhlIGFwcHJvcHJpYXRlIGNvbXBvbmVudHMuIEl0IHN1cHBvcnRzIFJlYWN0IFN1c3BlbnNlIGZvciBsYXp5LWxvYWRlZCBjb21wb25lbnRzXG4gKiBhbmQgY2FuIG9wdGlvbmFsbHkgZGVmZXIgdmlzaWJsZSByb3V0ZSBjaGFuZ2VzIGZvciBzbW9vdGhlciBuYXZpZ2F0aW9uLlxuICpcbiAqIFRoZSBjb21wb25lbnQgaGFuZGxlcyBuZXN0ZWQgcm91dGVzIGJ5IGNyZWF0aW5nIGEgaGllcmFyY2h5IG9mIFJvdXRlQ29tcG9uZW50V3JhcHBlclxuICogY29tcG9uZW50cywgd2hlcmUgZWFjaCBsZXZlbCBjYW4gcmVuZGVyIGl0cyBvd24gY29tcG9uZW50IGFuZCBjaGlsZHJlbi5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHN4XG4gKiAvLyBCYXNpYyB1c2FnZSB3aXRoIFN1c3BlbnNlIGZhbGxiYWNrXG4gKiA8Um91dGVyUmVuZGVyZXIgZmFsbGJhY2s9ezxkaXY+TG9hZGluZy4uLjwvZGl2Pn0gLz5cbiAqXG4gKiAvLyBXaXRoIFJlYWN0IDE4IHRyYW5zaXRpb25zXG4gKiA8Um91dGVyUmVuZGVyZXJcbiAqICAgZW5hYmxlVHJhbnNpdGlvblxuICogICBmYWxsYmFjaz17PGRpdj5Mb2FkaW5nLi4uPC9kaXY+fVxuICogICBwZW5kaW5nPXs8ZGl2Pk5hdmlnYXRpbmcuLi48L2Rpdj59XG4gKiAvPlxuICogYGBgXG4gKi9cbmNvbnN0IFJvdXRlclJlbmRlcmVyID0gKHByb3BzOiBQcm9wcyk6IEpTWC5FbGVtZW50IHwgbnVsbCA9PiB7XG4gIGNvbnN0IHtcbiAgICBleHRlcm5hbFBlbmRpbmcgPSBmYWxzZSxcbiAgICBmYWxsYmFjayxcbiAgICBwZW5kaW5nLFxuICAgIGVuYWJsZVRyYW5zaXRpb24gPSBmYWxzZSxcbiAgfSA9IHByb3BzO1xuICBjb25zdCBbaXNTdXNwZW5zZVBlbmRpbmcsIHNldElzU3VzcGVuc2VQZW5kaW5nXSA9IHVzZVN0YXRlKGZhbHNlKTtcblxuICAvLyBBY2Nlc3MgdGhlIHJvdXRlciBjb250ZXh0XG4gIGNvbnN0IHJvdXRlciA9IHVzZUNvbnRleHQoUm91dGluZ0NvbnRleHQpO1xuICBjb25zdCBbYWN0aXZlUm91dGVFbnRyeSwgc2V0QWN0aXZlUm91dGVFbnRyeV0gPSB1c2VTdGF0ZSgoKSA9PiB7XG4gICAgcmV0dXJuIHJvdXRlcj8uZ2V0KCk7XG4gIH0pO1xuICBjb25zdCBbZGlzcGxheWVkUm91dGVFbnRyeSwgc2V0RGlzcGxheWVkUm91dGVFbnRyeV0gPSB1c2VTdGF0ZSgoKSA9PiB7XG4gICAgcmV0dXJuIHJvdXRlcj8uZ2V0KCk7XG4gIH0pO1xuICBjb25zdCBjb21taXR0ZWRSb3V0ZUVudHJ5UmVmID0gdXNlUmVmPFJvdXRlRW50cnk8UGFyYW1EYXRhPiB8IHVuZGVmaW5lZD4oXG4gICAgdW5kZWZpbmVkLFxuICApO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKHJvdXRlciA9PSBudWxsKSB7XG4gICAgICBzZXRBY3RpdmVSb3V0ZUVudHJ5KHVuZGVmaW5lZCk7XG4gICAgICBzZXREaXNwbGF5ZWRSb3V0ZUVudHJ5KHVuZGVmaW5lZCk7XG4gICAgICByZXR1cm4gKCkgPT4ge307XG4gICAgfVxuXG4gICAgY29uc3Qgc2NoZWR1bGVEaXNwbGF5ZWRSb3V0ZUVudHJ5ID0gKGVudHJ5OiBSb3V0ZUVudHJ5PFBhcmFtRGF0YT4pID0+IHtcbiAgICAgIGNvbnN0IHVwZGF0ZURpc3BsYXllZFJvdXRlRW50cnkgPSAoKSA9PiB7XG4gICAgICAgIHNldERpc3BsYXllZFJvdXRlRW50cnkoKGN1cnJlbnRFbnRyeSkgPT4ge1xuICAgICAgICAgIGNvbnN0IHNob3VsZEtlZXBDdXJyZW50RW50cnkgPVxuICAgICAgICAgICAgZW5hYmxlVHJhbnNpdGlvbiAmJlxuICAgICAgICAgICAgIWNhbkRpc3BsYXlSb3V0ZUVudHJ5KGVudHJ5LCBjdXJyZW50RW50cnksIGV4dGVybmFsUGVuZGluZyk7XG5cbiAgICAgICAgICBpZiAoc2hvdWxkS2VlcEN1cnJlbnRFbnRyeSkge1xuICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnRFbnRyeTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gZW50cnk7XG4gICAgICAgIH0pO1xuICAgICAgfTtcblxuICAgICAgaWYgKGVuYWJsZVRyYW5zaXRpb24pIHtcbiAgICAgICAgc3RhcnRUcmFuc2l0aW9uKHVwZGF0ZURpc3BsYXllZFJvdXRlRW50cnkpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHVwZGF0ZURpc3BsYXllZFJvdXRlRW50cnkoKTtcbiAgICB9O1xuXG4gICAgY29uc3QgbmV4dEVudHJ5ID0gcm91dGVyLmdldCgpO1xuICAgIHNldEFjdGl2ZVJvdXRlRW50cnkobmV4dEVudHJ5KTtcbiAgICBzY2hlZHVsZURpc3BsYXllZFJvdXRlRW50cnkobmV4dEVudHJ5KTtcbiAgICByZXR1cm4gcm91dGVyLnN1YnNjcmliZSgoZW50cnkpID0+IHtcbiAgICAgIHNldEFjdGl2ZVJvdXRlRW50cnkoZW50cnkpO1xuICAgICAgc2NoZWR1bGVEaXNwbGF5ZWRSb3V0ZUVudHJ5KGVudHJ5KTtcbiAgICB9KTtcbiAgfSwgW2VuYWJsZVRyYW5zaXRpb24sIGV4dGVybmFsUGVuZGluZywgcm91dGVyXSk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIWVuYWJsZVRyYW5zaXRpb24gfHwgZXh0ZXJuYWxQZW5kaW5nIHx8IGFjdGl2ZVJvdXRlRW50cnkgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHN0YXJ0VHJhbnNpdGlvbigoKSA9PiB7XG4gICAgICBzZXREaXNwbGF5ZWRSb3V0ZUVudHJ5KGFjdGl2ZVJvdXRlRW50cnkpO1xuICAgIH0pO1xuICB9LCBbYWN0aXZlUm91dGVFbnRyeSwgZW5hYmxlVHJhbnNpdGlvbiwgZXh0ZXJuYWxQZW5kaW5nXSk7XG4gIC8vIFRoZSBjdXJyZW50IHJvdXRlIHZhbHVlIGlzIGFuIGFycmF5IG9mIG1hdGNoaW5nIGVudHJpZXMgLSBvbmUgZW50cnkgcGVyXG4gIC8vIGxldmVsIG9mIHJvdXRlcyAodG8gYWxsb3cgbmVzdGVkIHJvdXRlcykuIFdlIGhhdmUgdG8gbWFwIGVhY2ggb25lIHRvIGFcbiAgLy8gUm91dGVDb21wb25lbnQgdG8gYWxsb3cgc3VzcGVuZGluZywgYW5kIGFsc28gcGFzcyBpdHMgY2hpbGRyZW4gY29ycmVjdGx5LlxuICAvLyBDb25jZXB0dWFsbHksIHdlIHdhbnQgdGhpcyBzdHJ1Y3R1cmU6XG4gIC8vIGBgYFxuICAvLyA8Um91dGVDb21wb25lbnRcbiAgLy8gICBjb21wb25lbnQ9e2VudHJ5WzBdLmNvbXBvbmVudH1cbiAgLy8gICBwcmVwYXJlZD17ZW50cnJ5WzBdLnByZXBhcmVkfT5cbiAgLy8gICA8Um91dGVDb21wb25lbnRcbiAgLy8gICAgIGNvbXBvbmVudD17ZW50cnlbMV0uY29tcG9uZW50fVxuICAvLyAgICAgcHJlcGFyZWQ9e2VudHJ5WzFdLnByZXBhcmVkfT5cbiAgLy8gICAgICAgLy8gY29udGludWUgZm9yIG5lc3RlZCBpdGVtcy4uLlxuICAvLyAgIDwvUm91dGVDb21wb25lbnQ+XG4gIC8vIDwvUm91dGVDb21wb25lbnQ+XG4gIC8vIGBgYFxuICAvLyBUbyBhY2hpZXZlIHRoaXMsIHdlIHJldmVyc2UgdGhlIGxpc3Qgc28gd2UgY2FuIHN0YXJ0IGF0IHRoZSBib3R0b20tbW9zdFxuICAvLyBjb21wb25lbnQsIGFuZCBpdGVyYXRpdmVseSBjb25zdHJ1Y3QgcGFyZW50IGNvbXBvbmVudHMgdyB0aGUgcHJldmlvdXNcbiAgLy8gdmFsdWUgYXMgdGhlIGNoaWxkIG9mIHRoZSBuZXh0IG9uZTpcbiAgLy8gcmV2ZXJzZSBpcyBpbiBwbGFjZSwgYnV0IHdlIHdhbnQgYSBjb3B5IHNvIGNvbmNhdFxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L3Byb21pc2UtZnVuY3Rpb24tYXN5bmNcbiAgY29uc3QgcGVuZGluZ0NvbnRlbnQgPSB1c2VNZW1vKCgpID0+IHtcbiAgICBjb25zdCBoYXNSb3V0ZXJQZW5kaW5nID1cbiAgICAgIGFjdGl2ZVJvdXRlRW50cnk/LmFjdGl2ZUxvYWRTdGF0ZS5zdGF0dXMgPT09ICdwZW5kaW5nJztcbiAgICBjb25zdCBjb21taXR0ZWRSb3V0ZUVudHJ5ID0gY29tbWl0dGVkUm91dGVFbnRyeVJlZi5jdXJyZW50O1xuICAgIGNvbnN0IGhhc1JvdXRlVHJhbnNpdGlvblBlbmRpbmcgPVxuICAgICAgZXh0ZXJuYWxQZW5kaW5nICYmXG4gICAgICBhY3RpdmVSb3V0ZUVudHJ5ICE9IG51bGwgJiZcbiAgICAgIChjb21taXR0ZWRSb3V0ZUVudHJ5ID09IG51bGwgfHxcbiAgICAgICAgcm91dGVMb2NhdGlvbktleShhY3RpdmVSb3V0ZUVudHJ5KSAhPT1cbiAgICAgICAgICByb3V0ZUxvY2F0aW9uS2V5KGNvbW1pdHRlZFJvdXRlRW50cnkpKTtcbiAgICBjb25zdCBoYXNQZW5kaW5nID1cbiAgICAgIGhhc1JvdXRlclBlbmRpbmcgfHwgaXNTdXNwZW5zZVBlbmRpbmcgfHwgaGFzUm91dGVUcmFuc2l0aW9uUGVuZGluZztcbiAgICBpZiAoZW5hYmxlVHJhbnNpdGlvbiAmJiBoYXNQZW5kaW5nKSB7XG4gICAgICByZXR1cm4gcGVuZGluZztcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfSwgW1xuICAgIGVuYWJsZVRyYW5zaXRpb24sXG4gICAgZXh0ZXJuYWxQZW5kaW5nLFxuICAgIGFjdGl2ZVJvdXRlRW50cnksXG4gICAgaXNTdXNwZW5zZVBlbmRpbmcsXG4gICAgcGVuZGluZyxcbiAgXSk7XG5cbiAgY29uc3QgaGFuZGxlU3VzcGVuc2VQZW5kaW5nQ2hhbmdlID0gdXNlQ2FsbGJhY2soKGlzUGVuZGluZzogYm9vbGVhbikgPT4ge1xuICAgIHNldElzU3VzcGVuc2VQZW5kaW5nKGlzUGVuZGluZyk7XG4gIH0sIFtdKTtcblxuICBjb25zdCBvYnNlcnZlZEZhbGxiYWNrID0gdXNlTWVtbygoKSA9PiB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxTdXNwZW5zZUZhbGxiYWNrT2JzZXJ2ZXIgb25QZW5kaW5nQ2hhbmdlPXtoYW5kbGVTdXNwZW5zZVBlbmRpbmdDaGFuZ2V9PlxuICAgICAgICB7ZmFsbGJhY2t9XG4gICAgICA8L1N1c3BlbnNlRmFsbGJhY2tPYnNlcnZlcj5cbiAgICApO1xuICB9LCBbZmFsbGJhY2ssIGhhbmRsZVN1c3BlbnNlUGVuZGluZ0NoYW5nZV0pO1xuXG4gIGNvbnN0IHJvdXRlQ29tcG9uZW50ID0gdXNlTWVtbygoKTogUmVhY3ROb2RlID0+IHtcbiAgICByZXR1cm4gcmVuZGVyUm91dGVFbnRyeShkaXNwbGF5ZWRSb3V0ZUVudHJ5LCBmYWxsYmFjayk7XG4gIH0sIFtkaXNwbGF5ZWRSb3V0ZUVudHJ5LCBmYWxsYmFja10pO1xuXG4gIGNvbnN0IGhhbmRsZVJvdXRlRW50cnlDb21taXQgPSB1c2VDYWxsYmFjaygoZW50cnk6IFJvdXRlRW50cnk8UGFyYW1EYXRhPikgPT4ge1xuICAgIGNvbW1pdHRlZFJvdXRlRW50cnlSZWYuY3VycmVudCA9IGVudHJ5O1xuICB9LCBbXSk7XG5cbiAgY29uc3QgdHJhbnNpdGlvbkZhbGxiYWNrID0gdXNlTWVtbygoKTogUmVhY3ROb2RlID0+IHtcbiAgICBpZiAoIWVuYWJsZVRyYW5zaXRpb24pIHtcbiAgICAgIHJldHVybiBvYnNlcnZlZEZhbGxiYWNrO1xuICAgIH1cblxuICAgIHJldHVybiAoXG4gICAgICByZW5kZXJSb3V0ZUVudHJ5KGNvbW1pdHRlZFJvdXRlRW50cnlSZWYuY3VycmVudCwgZmFsbGJhY2spID8/XG4gICAgICBvYnNlcnZlZEZhbGxiYWNrXG4gICAgKTtcbiAgfSwgW2VuYWJsZVRyYW5zaXRpb24sIGZhbGxiYWNrLCBvYnNlcnZlZEZhbGxiYWNrXSk7XG5cbiAgLy8gUm91dGVzIGNhbiBlcnJvciBzbyB3cmFwIGluIGFuIDxFcnJvckJvdW5kYXJ5PlxuICAvLyBSb3V0ZXMgY2FuIHN1c3BlbmQsIHNvIHdyYXAgaW4gPFN1c3BlbnNlPlxuICByZXR1cm4gKFxuICAgIDw+XG4gICAgICB7cGVuZGluZ0NvbnRlbnR9XG4gICAgICA8U3VzcGVuc2UgZmFsbGJhY2s9e3RyYW5zaXRpb25GYWxsYmFja30+XG4gICAgICAgIDxSb3V0ZUVudHJ5Q29tbWl0T2JzZXJ2ZXJcbiAgICAgICAgICBlbnRyeT17ZGlzcGxheWVkUm91dGVFbnRyeX1cbiAgICAgICAgICBvbkNvbW1pdD17aGFuZGxlUm91dGVFbnRyeUNvbW1pdH1cbiAgICAgICAgPlxuICAgICAgICAgIHtyb3V0ZUNvbXBvbmVudH1cbiAgICAgICAgPC9Sb3V0ZUVudHJ5Q29tbWl0T2JzZXJ2ZXI+XG4gICAgICA8L1N1c3BlbnNlPlxuICAgIDwvPlxuICApO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgUm91dGVyUmVuZGVyZXI7XG4iXX0=
198
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUm91dGVyUmVuZGVyZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvcm91dGluZy9Sb3V0ZXJSZW5kZXJlci50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sS0FBSyxFQUFFLEVBRVosV0FBVyxFQUNYLFNBQVMsRUFDVCxPQUFPLEVBQ1AsTUFBTSxFQUNOLFFBQVEsRUFDUixlQUFlLEdBRWhCLE1BQU0sT0FBTyxDQUFDO0FBVWYsT0FBTyxjQUFjLE1BQU0scUJBQXFCLENBQUM7QUFDakQsT0FBTyxxQkFBcUIsTUFBTSw0QkFBNEIsQ0FBQztBQUUvRCxNQUFNLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxHQUFHLEtBQUssQ0FBQztBQUV2QyxJQUFJLEtBQUssR0FBRyxDQUFDLENBQUM7QUFRZCxNQUFNLFVBQVUsV0FBVztJQUN6QixLQUFLLElBQUksQ0FBQyxDQUFDO0lBQ1gsT0FBTyxLQUFLLENBQUM7QUFDZixDQUFDO0FBcUNELE1BQU0sd0JBQXdCLEdBQUcsQ0FDL0IsS0FBb0MsRUFDdkIsRUFBRTtJQUNmLE1BQU0sRUFBRSxRQUFRLEVBQUUsZUFBZSxFQUFFLEdBQUcsS0FBSyxDQUFDO0lBRTVDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7UUFDYixlQUFlLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDdEIsT0FBTyxHQUFHLEVBQUU7WUFDVixlQUFlLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDekIsQ0FBQyxDQUFDO0lBQ0osQ0FBQyxFQUFFLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQztJQUV0QixPQUFPLDRCQUFHLFFBQVEsR0FBSSxDQUFDO0FBQ3pCLENBQUMsQ0FBQztBQUVGLE1BQU0sd0JBQXdCLEdBQUcsQ0FDL0IsS0FBb0MsRUFDdkIsRUFBRTtJQUNmLE1BQU0sRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxHQUFHLEtBQUssQ0FBQztJQUU1QyxTQUFTLENBQUMsR0FBRyxFQUFFO1FB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QUFDLENBQUMsQ0FBQztJQUluRCxPQUFPLENBQ0wsOEJBQ0csY0FBYyxFQUNmLEtBQUMsUUFBUSxJQUFDLFFBQVEsRUFBRSxrQkFBa0IsWUFDcEMsS0FBQyx3QkFBd0IsSUFDdkIsS0FBSyxFQUFFLG1CQUFtQixFQUMxQixRQUFRLEVBQUUsc0JBQXNCLFlBRS9CLGNBQWMsR0FDVSxHQUNsQixJQUNWLENBQ0osQ0FBQztBQUNKLENBQUMsQ0FBQztBQUVGLGVBQWUsY0FBYyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFJlYWN0LCB7XG4gIHR5cGUgUmVhY3ROb2RlLFxuICB1c2VDYWxsYmFjayxcbiAgdXNlRWZmZWN0LFxuICB1c2VNZW1vLFxuICB1c2VSZWYsXG4gIHVzZVN0YXRlLFxuICBzdGFydFRyYW5zaXRpb24sXG4gIHR5cGUgSlNYLFxufSBmcm9tICdyZWFjdCc7XG5cbmltcG9ydCB0eXBlIHtcbiAgUHJlcGFyZWRSb3V0ZVNlZ21lbnQsXG4gIFJvdXRlRmFsbGJhY2ssXG4gIFJvdXRlRW50cnksXG4gIFJvdXRlck1hdGNoZWRSb3V0ZSxcbn0gZnJvbSAnLi4vdHlwZXMuanMnO1xuaW1wb3J0IHR5cGUgeyBQYXJhbURhdGEgfSBmcm9tICdwYXRoLXRvLXJlZ2V4cCc7XG5cbmltcG9ydCBSb3V0aW5nQ29udGV4dCBmcm9tICcuL1JvdXRpbmdDb250ZXh0LmpzJztcbmltcG9ydCBSb3V0ZUNvbXBvbmVudFdyYXBwZXIgZnJvbSAnLi9Sb3V0ZUNvbXBvbmVudFdyYXBwZXIuanMnO1xuXG5jb25zdCB7IHVzZUNvbnRleHQsIFN1c3BlbnNlIH0gPSBSZWFjdDtcblxubGV0IGluZGV4ID0gMDtcblxuLyoqXG4gKiBHZW5lcmF0ZXMgYSB1bmlxdWUgaW5kZXggZm9yIGNvbXBvbmVudCBpbnN0YW5jZXMuXG4gKiBUaGlzIGlzIHVzZWQgaW50ZXJuYWxseSB0byBlbnN1cmUgcHJvcGVyIFJlYWN0IHJlY29uY2lsaWF0aW9uLlxuICpcbiAqIEByZXR1cm5zIEEgdW5pcXVlIGluY3JlbWVudGFsIG51bWJlclxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0TmV3SW5kZXgoKTogbnVtYmVyIHtcbiAgaW5kZXggKz0gMTtcbiAgcmV0dXJuIGluZGV4O1xufVxuXG4vKipcbiAqIFByb3BzIGZvciB0aGUgUm91dGVyUmVuZGVyZXIgY29tcG9uZW50LlxuICovXG5leHBvcnQgdHlwZSBSb3V0ZXJSZW5kZXJlclByb3BzID0ge1xuICAvKiogRmFsbGJhY2sgVUkgdG8gc2hvdyB3aGlsZSBsb2FkaW5nIGNvbXBvbmVudHMgKi9cbiAgZmFsbGJhY2s6IFJlYWN0Tm9kZTtcbiAgLyoqIFdoZXRoZXIgdG8gc2hvdyBwZW5kaW5nIGNvbnRlbnQgd2hpbGUgUmVhY3QgcmVwb3J0cyBhIHRyYW5zaXRpb24gZWxzZXdoZXJlICovXG4gIGVuYWJsZVRyYW5zaXRpb24/OiBib29sZWFuO1xuICAvKiogRXh0ZXJuYWwgYXN5bmMgYWN0aXZpdHkgdGhhdCBzaG91bGQgYWxzbyBzaG93IHBlbmRpbmcgY29udGVudCAqL1xuICBleHRlcm5hbFBlbmRpbmc/OiBib29sZWFuO1xuICAvKiogVUkgdG8gc2hvdyBkdXJpbmcgdHJhbnNpdGlvbnMgKHdoZW4gZW5hYmxlVHJhbnNpdGlvbiBpcyB0cnVlKSAqL1xuICBwZW5kaW5nPzogUmVhY3ROb2RlO1xuICAvKiogQ2FsbGVkIGV4YWN0bHkgb25jZSBhZnRlciBhIG5ld2x5IGRpc3BsYXllZCByb3V0ZSBlbnRyeSBjb21taXRzLiAqL1xuICBvblJvdXRlQ29tbWl0PzogKGVudHJ5OiBSb3V0ZUVudHJ5PFBhcmFtRGF0YT4pID0+IHZvaWQ7XG59O1xuXG50eXBlIFN1c3BlbnNlRmFsbGJhY2tPYnNlcnZlclByb3BzID0ge1xuICBjaGlsZHJlbjogUmVhY3ROb2RlO1xuICBvblBlbmRpbmdDaGFuZ2U6IChpc1BlbmRpbmc6IGJvb2xlYW4pID0+IHZvaWQ7XG59O1xuXG50eXBlIFJvdXRlU2VnbWVudEJvdW5kYXJ5UHJvcHMgPSB7XG4gIGNoaWxkcmVuPzogUmVhY3ROb2RlO1xuICBlbnRyeTogUm91dGVFbnRyeTxQYXJhbURhdGE+O1xuICBmYWxsYmFjazogUmVhY3ROb2RlO1xuICBtYXRjaDogUm91dGVyTWF0Y2hlZFJvdXRlPFBhcmFtRGF0YT4gfCBudWxsO1xuICBwcmVwYXJlZFNlZ21lbnQ6IFByZXBhcmVkUm91dGVTZWdtZW50O1xufTtcblxudHlwZSBSb3V0ZUVudHJ5Q29tbWl0T2JzZXJ2ZXJQcm9wcyA9IHtcbiAgY2hpbGRyZW46IFJlYWN0Tm9kZTtcbiAgZW50cnk6IFJvdXRlRW50cnk8UGFyYW1EYXRhPiB8IHVuZGVmaW5lZDtcbiAgb25Db21taXQ6IChlbnRyeTogUm91dGVFbnRyeTxQYXJhbURhdGE+KSA9PiB2b2lkO1xufTtcblxuY29uc3QgU3VzcGVuc2VGYWxsYmFja09ic2VydmVyID0gKFxuICBwcm9wczogU3VzcGVuc2VGYWxsYmFja09ic2VydmVyUHJvcHMsXG4pOiBKU1guRWxlbWVudCA9PiB7XG4gIGNvbnN0IHsgY2hpbGRyZW4sIG9uUGVuZGluZ0NoYW5nZSB9ID0gcHJvcHM7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBvblBlbmRpbmdDaGFuZ2UodHJ1ZSk7XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIG9uUGVuZGluZ0NoYW5nZShmYWxzZSk7XG4gICAgfTtcbiAgfSwgW29uUGVuZGluZ0NoYW5nZV0pO1xuXG4gIHJldHVybiA8PntjaGlsZHJlbn08Lz47XG59O1xuXG5jb25zdCBSb3V0ZUVudHJ5Q29tbWl0T2JzZXJ2ZXIgPSAoXG4gIHByb3BzOiBSb3V0ZUVudHJ5Q29tbWl0T2JzZXJ2ZXJQcm9wcyxcbik6IEpTWC5FbGVtZW50ID0+IHtcbiAgY29uc3QgeyBjaGlsZHJlbiwgZW50cnksIG9uQ29tbWl0IH0gPSBwcm9wcztcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChlbnRyeSAhPSBudWxsKSB7XG4gICAgICBvbkNvbW1pdChlbnRyeSk7XG4gICAgfVxuICB9LCBbZW50cnksIG9uQ29tbWl0XSk7XG5cbiAgcmV0dXJuIDw+e2NoaWxkcmVufTwvPjtcbn07XG5cbmNvbnN0IHJlc29sdmVSb3V0ZUZhbGxiYWNrID0gKFxuICBmYWxsYmFjazogUm91dGVGYWxsYmFjayB8IHVuZGVmaW5lZCxcbiAgZGVmYXVsdEZhbGxiYWNrOiBSZWFjdE5vZGUsXG4gIGFyZ3M6IHtcbiAgICBjaGlsZHJlbj86IFJlYWN0Tm9kZTtcbiAgICBtYXRjaDogUm91dGVyTWF0Y2hlZFJvdXRlPFBhcmFtRGF0YT4gfCBudWxsO1xuICAgIHNlZ21lbnQ6IFByZXBhcmVkUm91dGVTZWdtZW50O1xuICB9LFxuKTogUmVhY3ROb2RlID0+IHtcbiAgaWYgKHR5cGVvZiBmYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBmYWxsYmFjayhhcmdzKTtcbiAgfVxuXG4gIGlmICh0eXBlb2YgZmFsbGJhY2sgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgcmV0dXJuIGZhbGxiYWNrO1xuICB9XG5cbiAgcmV0dXJuIGRlZmF1bHRGYWxsYmFjaztcbn07XG5cbmNvbnN0IFJvdXRlU2VnbWVudEJvdW5kYXJ5ID0gKHtcbiAgY2hpbGRyZW4sXG4gIGVudHJ5LFxuICBmYWxsYmFjayxcbiAgbWF0Y2gsXG4gIHByZXBhcmVkU2VnbWVudCxcbn06IFJvdXRlU2VnbWVudEJvdW5kYXJ5UHJvcHMpOiBKU1guRWxlbWVudCA9PiB7XG4gIGNvbnN0IHJvdXRlQ29tcG9uZW50ID0gKFxuICAgIDxSb3V0ZUNvbXBvbmVudFdyYXBwZXJcbiAgICAgIGVudHJ5PXtlbnRyeX1cbiAgICAgIG1hdGNoPXttYXRjaH1cbiAgICAgIHByZXBhcmVkU2VnbWVudD17cHJlcGFyZWRTZWdtZW50fVxuICAgID5cbiAgICAgIHtjaGlsZHJlbn1cbiAgICA8L1JvdXRlQ29tcG9uZW50V3JhcHBlcj5cbiAgKTtcblxuICBpZiAocHJlcGFyZWRTZWdtZW50LnN1c3BlbnNlQm91bmRhcnkgIT09ICdzZWdtZW50Jykge1xuICAgIHJldHVybiByb3V0ZUNvbXBvbmVudDtcbiAgfVxuXG4gIHJldHVybiA8U3VzcGVuc2UgZmFsbGJhY2s9e2ZhbGxiYWNrfT57cm91dGVDb21wb25lbnR9PC9TdXNwZW5zZT47XG59O1xuXG5jb25zdCBjYW5SZW5kZXJQZW5kaW5nRW50cnlXaXRoTG9jYWxCb3VuZGFyaWVzID0gKFxuICBlbnRyeTogUm91dGVFbnRyeTxQYXJhbURhdGE+LFxuKTogYm9vbGVhbiA9PiB7XG4gIGlmIChlbnRyeS5hY3RpdmVMb2FkU3RhdGUuc3RhdHVzICE9PSAncGVuZGluZycpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHJldHVybiBlbnRyeS5sb2FkU3RhdGUuc2VnbWVudHMuZXZlcnkoKHNlZ21lbnQsIGluZGV4KSA9PiB7XG4gICAgaWYgKHNlZ21lbnQuc3RhdHVzICE9PSAncGVuZGluZycpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiBlbnRyeS5wcmVwYXJlZE1hdGNoLnNlZ21lbnRzW2luZGV4XT8uc3VzcGVuc2VCb3VuZGFyeSA9PT0gJ3NlZ21lbnQnO1xuICB9KTtcbn07XG5cbmNvbnN0IHJvdXRlTG9jYXRpb25LZXkgPSAoZW50cnk6IFJvdXRlRW50cnk8UGFyYW1EYXRhPik6IHN0cmluZyA9PiB7XG4gIHJldHVybiBgJHtlbnRyeS5sb2NhdGlvbi5wYXRobmFtZX0ke2VudHJ5LmxvY2F0aW9uLnNlYXJjaH0ke2VudHJ5LmxvY2F0aW9uLmhhc2h9YDtcbn07XG5cbmNvbnN0IGNhbkRpc3BsYXlSb3V0ZUVudHJ5ID0gKFxuICBlbnRyeTogUm91dGVFbnRyeTxQYXJhbURhdGE+LFxuICBjdXJyZW50RW50cnk6IFJvdXRlRW50cnk8UGFyYW1EYXRhPiB8IHVuZGVmaW5lZCxcbiAgZXh0ZXJuYWxQZW5kaW5nOiBib29sZWFuLFxuKTogYm9vbGVhbiA9PiB7XG4gIGlmIChjdXJyZW50RW50cnkgPT0gbnVsbCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgY29uc3QgaXNSb3V0ZUNoYW5nZSA9XG4gICAgcm91dGVMb2NhdGlvbktleShlbnRyeSkgIT09IHJvdXRlTG9jYXRpb25LZXkoY3VycmVudEVudHJ5KTtcbiAgY29uc3QgaGFzTG9jYWxCb3VuZGFyeSA9IGVudHJ5LnByZXBhcmVkTWF0Y2guc2VnbWVudHMuc29tZSgocm91dGUpID0+IHtcbiAgICByZXR1cm4gcm91dGUuc3VzcGVuc2VCb3VuZGFyeSA9PT0gJ3NlZ21lbnQnO1xuICB9KTtcblxuICBpZiAoZXh0ZXJuYWxQZW5kaW5nICYmIGlzUm91dGVDaGFuZ2UgJiYgIWhhc0xvY2FsQm91bmRhcnkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gY2FuUmVuZGVyUGVuZGluZ0VudHJ5V2l0aExvY2FsQm91bmRhcmllcyhlbnRyeSk7XG59O1xuXG5jb25zdCByZW5kZXJSb3V0ZUVudHJ5ID0gKFxuICBlbnRyeTogUm91dGVFbnRyeTxQYXJhbURhdGE+IHwgdW5kZWZpbmVkLFxuICBmYWxsYmFjazogUmVhY3ROb2RlLFxuKTogUmVhY3ROb2RlID0+IHtcbiAgaWYgKGVudHJ5ID09IG51bGwpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGNvbnN0IHJlc3VsdDogUHJlcGFyZWRSb3V0ZVNlZ21lbnRbXSA9IFtdO1xuXG4gIGNvbnN0IHJldmVyc2VkSXRlbXMgPSByZXN1bHQuY29uY2F0KGVudHJ5LnByZXBhcmVkTWF0Y2guc2VnbWVudHMpLnJldmVyc2UoKTtcbiAgY29uc3QgZmlyc3RJdGVtID0gcmV2ZXJzZWRJdGVtc1swXTtcblxuICBpZiAoZmlyc3RJdGVtID09IG51bGwpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGNvbnN0IG1hdGNoID0gZW50cnkucHJlcGFyZWRNYXRjaC5tYXRjaCA/PyBudWxsO1xuICBsZXQgbWFpbkNvbXBvbmVudCA9IChcbiAgICA8Um91dGVTZWdtZW50Qm91bmRhcnlcbiAgICAgIGtleT17Zmlyc3RJdGVtLnNlZ21lbnRLZXl9XG4gICAgICBlbnRyeT17ZW50cnl9XG4gICAgICBmYWxsYmFjaz17cmVzb2x2ZVJvdXRlRmFsbGJhY2soZmlyc3RJdGVtLmZhbGxiYWNrLCBmYWxsYmFjaywge1xuICAgICAgICBtYXRjaCxcbiAgICAgICAgc2VnbWVudDogZmlyc3RJdGVtLFxuICAgICAgfSl9XG4gICAgICBtYXRjaD17bWF0Y2h9XG4gICAgICBwcmVwYXJlZFNlZ21lbnQ9e2ZpcnN0SXRlbX1cbiAgICAvPlxuICApO1xuXG4gIGZvciAobGV0IGluZGV4ID0gMTsgaW5kZXggPCByZXZlcnNlZEl0ZW1zLmxlbmd0aDsgaW5kZXggKz0gMSkge1xuICAgIGNvbnN0IG5leHRJdGVtID0gcmV2ZXJzZWRJdGVtc1tpbmRleF07XG4gICAgaWYgKG5leHRJdGVtICE9IG51bGwpIHtcbiAgICAgIG1haW5Db21wb25lbnQgPSAoXG4gICAgICAgIDxSb3V0ZVNlZ21lbnRCb3VuZGFyeVxuICAgICAgICAgIGtleT17bmV4dEl0ZW0uc2VnbWVudEtleX1cbiAgICAgICAgICBlbnRyeT17ZW50cnl9XG4gICAgICAgICAgZmFsbGJhY2s9e3Jlc29sdmVSb3V0ZUZhbGxiYWNrKG5leHRJdGVtLmZhbGxiYWNrLCBmYWxsYmFjaywge1xuICAgICAgICAgICAgY2hpbGRyZW46IG1haW5Db21wb25lbnQsXG4gICAgICAgICAgICBtYXRjaCxcbiAgICAgICAgICAgIHNlZ21lbnQ6IG5leHRJdGVtLFxuICAgICAgICAgIH0pfVxuICAgICAgICAgIG1hdGNoPXttYXRjaH1cbiAgICAgICAgICBwcmVwYXJlZFNlZ21lbnQ9e25leHRJdGVtfVxuICAgICAgICA+XG4gICAgICAgICAge21haW5Db21wb25lbnR9XG4gICAgICAgIDwvUm91dGVTZWdtZW50Qm91bmRhcnk+XG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBtYWluQ29tcG9uZW50O1xufTtcblxuLyoqXG4gKiBNYWluIHJvdXRlciByZW5kZXJlciBjb21wb25lbnQgdGhhdCBkaXNwbGF5cyB0aGUgY3VycmVudCByb3V0ZS5cbiAqXG4gKiBUaGlzIGNvbXBvbmVudCBhY2Nlc3NlcyB0aGUgY3VycmVudCByb3V0ZSBlbnRyeSBmcm9tIFJvdXRpbmdDb250ZXh0IGFuZCByZW5kZXJzXG4gKiB0aGUgYXBwcm9wcmlhdGUgY29tcG9uZW50cy4gSXQgc3VwcG9ydHMgUmVhY3QgU3VzcGVuc2UgZm9yIGxhenktbG9hZGVkIGNvbXBvbmVudHNcbiAqIGFuZCBjYW4gb3B0aW9uYWxseSBkZWZlciB2aXNpYmxlIHJvdXRlIGNoYW5nZXMgZm9yIHNtb290aGVyIG5hdmlnYXRpb24uXG4gKlxuICogVGhlIGNvbXBvbmVudCBoYW5kbGVzIG5lc3RlZCByb3V0ZXMgYnkgY3JlYXRpbmcgYSBoaWVyYXJjaHkgb2YgUm91dGVDb21wb25lbnRXcmFwcGVyXG4gKiBjb21wb25lbnRzLCB3aGVyZSBlYWNoIGxldmVsIGNhbiByZW5kZXIgaXRzIG93biBjb21wb25lbnQgYW5kIGNoaWxkcmVuLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0c3hcbiAqIC8vIEJhc2ljIHVzYWdlIHdpdGggU3VzcGVuc2UgZmFsbGJhY2tcbiAqIDxSb3V0ZXJSZW5kZXJlciBmYWxsYmFjaz17PGRpdj5Mb2FkaW5nLi4uPC9kaXY+fSAvPlxuICpcbiAqIC8vIFdpdGggUmVhY3QgMTggdHJhbnNpdGlvbnNcbiAqIDxSb3V0ZXJSZW5kZXJlclxuICogICBlbmFibGVUcmFuc2l0aW9uXG4gKiAgIGZhbGxiYWNrPXs8ZGl2PkxvYWRpbmcuLi48L2Rpdj59XG4gKiAgIHBlbmRpbmc9ezxkaXY+TmF2aWdhdGluZy4uLjwvZGl2Pn1cbiAqIC8+XG4gKiBgYGBcbiAqL1xuY29uc3QgUm91dGVyUmVuZGVyZXIgPSAocHJvcHM6IFJvdXRlclJlbmRlcmVyUHJvcHMpOiBKU1guRWxlbWVudCB8IG51bGwgPT4ge1xuICBjb25zdCB7XG4gICAgZXh0ZXJuYWxQZW5kaW5nID0gZmFsc2UsXG4gICAgZmFsbGJhY2ssXG4gICAgcGVuZGluZyxcbiAgICBlbmFibGVUcmFuc2l0aW9uID0gZmFsc2UsXG4gICAgb25Sb3V0ZUNvbW1pdCxcbiAgfSA9IHByb3BzO1xuICBjb25zdCBbaXNTdXNwZW5zZVBlbmRpbmcsIHNldElzU3VzcGVuc2VQZW5kaW5nXSA9IHVzZVN0YXRlKGZhbHNlKTtcblxuICAvLyBBY2Nlc3MgdGhlIHJvdXRlciBjb250ZXh0XG4gIGNvbnN0IHJvdXRlciA9IHVzZUNvbnRleHQoUm91dGluZ0NvbnRleHQpO1xuICBjb25zdCBbYWN0aXZlUm91dGVFbnRyeSwgc2V0QWN0aXZlUm91dGVFbnRyeV0gPSB1c2VTdGF0ZSgoKSA9PiB7XG4gICAgcmV0dXJuIHJvdXRlcj8uZ2V0KCk7XG4gIH0pO1xuICBjb25zdCBbZGlzcGxheWVkUm91dGVFbnRyeSwgc2V0RGlzcGxheWVkUm91dGVFbnRyeV0gPSB1c2VTdGF0ZSgoKSA9PiB7XG4gICAgcmV0dXJuIHJvdXRlcj8uZ2V0KCk7XG4gIH0pO1xuICBjb25zdCBjb21taXR0ZWRSb3V0ZUVudHJ5UmVmID0gdXNlUmVmPFJvdXRlRW50cnk8UGFyYW1EYXRhPiB8IHVuZGVmaW5lZD4oXG4gICAgdW5kZWZpbmVkLFxuICApO1xuICBjb25zdCBvblJvdXRlQ29tbWl0UmVmID0gdXNlUmVmKG9uUm91dGVDb21taXQpO1xuICBvblJvdXRlQ29tbWl0UmVmLmN1cnJlbnQgPSBvblJvdXRlQ29tbWl0O1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKHJvdXRlciA9PSBudWxsKSB7XG4gICAgICBzZXRBY3RpdmVSb3V0ZUVudHJ5KHVuZGVmaW5lZCk7XG4gICAgICBzZXREaXNwbGF5ZWRSb3V0ZUVudHJ5KHVuZGVmaW5lZCk7XG4gICAgICByZXR1cm4gKCkgPT4ge307XG4gICAgfVxuXG4gICAgY29uc3Qgc2NoZWR1bGVEaXNwbGF5ZWRSb3V0ZUVudHJ5ID0gKGVudHJ5OiBSb3V0ZUVudHJ5PFBhcmFtRGF0YT4pID0+IHtcbiAgICAgIGNvbnN0IHVwZGF0ZURpc3BsYXllZFJvdXRlRW50cnkgPSAoKSA9PiB7XG4gICAgICAgIHNldERpc3BsYXllZFJvdXRlRW50cnkoKGN1cnJlbnRFbnRyeSkgPT4ge1xuICAgICAgICAgIGNvbnN0IHNob3VsZEtlZXBDdXJyZW50RW50cnkgPVxuICAgICAgICAgICAgZW5hYmxlVHJhbnNpdGlvbiAmJlxuICAgICAgICAgICAgIWNhbkRpc3BsYXlSb3V0ZUVudHJ5KGVudHJ5LCBjdXJyZW50RW50cnksIGV4dGVybmFsUGVuZGluZyk7XG5cbiAgICAgICAgICBpZiAoc2hvdWxkS2VlcEN1cnJlbnRFbnRyeSkge1xuICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnRFbnRyeTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gZW50cnk7XG4gICAgICAgIH0pO1xuICAgICAgfTtcblxuICAgICAgaWYgKGVuYWJsZVRyYW5zaXRpb24pIHtcbiAgICAgICAgc3RhcnRUcmFuc2l0aW9uKHVwZGF0ZURpc3BsYXllZFJvdXRlRW50cnkpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHVwZGF0ZURpc3BsYXllZFJvdXRlRW50cnkoKTtcbiAgICB9O1xuXG4gICAgY29uc3QgbmV4dEVudHJ5ID0gcm91dGVyLmdldCgpO1xuICAgIHNldEFjdGl2ZVJvdXRlRW50cnkobmV4dEVudHJ5KTtcbiAgICBzY2hlZHVsZURpc3BsYXllZFJvdXRlRW50cnkobmV4dEVudHJ5KTtcbiAgICByZXR1cm4gcm91dGVyLnN1YnNjcmliZSgoZW50cnkpID0+IHtcbiAgICAgIHNldEFjdGl2ZVJvdXRlRW50cnkoZW50cnkpO1xuICAgICAgc2NoZWR1bGVEaXNwbGF5ZWRSb3V0ZUVudHJ5KGVudHJ5KTtcbiAgICB9KTtcbiAgfSwgW2VuYWJsZVRyYW5zaXRpb24sIGV4dGVybmFsUGVuZGluZywgcm91dGVyXSk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIWVuYWJsZVRyYW5zaXRpb24gfHwgZXh0ZXJuYWxQZW5kaW5nIHx8IGFjdGl2ZVJvdXRlRW50cnkgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHN0YXJ0VHJhbnNpdGlvbigoKSA9PiB7XG4gICAgICBzZXREaXNwbGF5ZWRSb3V0ZUVudHJ5KGFjdGl2ZVJvdXRlRW50cnkpO1xuICAgIH0pO1xuICB9LCBbYWN0aXZlUm91dGVFbnRyeSwgZW5hYmxlVHJhbnNpdGlvbiwgZXh0ZXJuYWxQZW5kaW5nXSk7XG4gIC8vIFRoZSBjdXJyZW50IHJvdXRlIHZhbHVlIGlzIGFuIGFycmF5IG9mIG1hdGNoaW5nIGVudHJpZXMgLSBvbmUgZW50cnkgcGVyXG4gIC8vIGxldmVsIG9mIHJvdXRlcyAodG8gYWxsb3cgbmVzdGVkIHJvdXRlcykuIFdlIG1hcCBlYWNoIG9uZSB0byBhIHNlZ21lbnRcbiAgLy8gYm91bmRhcnkgdG8gYWxsb3cgc3VzcGVuZGluZyBhbmQgdG8gcGFzcyBpdHMgY2hpbGRyZW4gY29ycmVjdGx5LlxuICAvLyBDb25jZXB0dWFsbHksIHdlIHdhbnQgdGhpcyBzdHJ1Y3R1cmU6XG4gIC8vIGBgYFxuICAvLyA8Um91dGVTZWdtZW50XG4gIC8vICAgY29tcG9uZW50PXtlbnRyeVswXS5jb21wb25lbnR9XG4gIC8vICAgcHJlcGFyZWQ9e2VudHJyeVswXS5wcmVwYXJlZH0+XG4gIC8vICAgPFJvdXRlU2VnbWVudFxuICAvLyAgICAgY29tcG9uZW50PXtlbnRyeVsxXS5jb21wb25lbnR9XG4gIC8vICAgICBwcmVwYXJlZD17ZW50cnlbMV0ucHJlcGFyZWR9PlxuICAvLyAgICAgICAvLyBjb250aW51ZSBmb3IgbmVzdGVkIGl0ZW1zLi4uXG4gIC8vICAgPC9Sb3V0ZVNlZ21lbnQ+XG4gIC8vIDwvUm91dGVTZWdtZW50PlxuICAvLyBgYGBcbiAgLy8gVG8gYWNoaWV2ZSB0aGlzLCB3ZSByZXZlcnNlIHRoZSBsaXN0IHNvIHdlIGNhbiBzdGFydCBhdCB0aGUgYm90dG9tLW1vc3RcbiAgLy8gY29tcG9uZW50LCBhbmQgaXRlcmF0aXZlbHkgY29uc3RydWN0IHBhcmVudCBjb21wb25lbnRzIHcgdGhlIHByZXZpb3VzXG4gIC8vIHZhbHVlIGFzIHRoZSBjaGlsZCBvZiB0aGUgbmV4dCBvbmU6XG4gIC8vIHJldmVyc2UgaXMgaW4gcGxhY2UsIGJ1dCB3ZSB3YW50IGEgY29weSBzbyBjb25jYXRcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9wcm9taXNlLWZ1bmN0aW9uLWFzeW5jXG4gIGNvbnN0IHBlbmRpbmdDb250ZW50ID0gdXNlTWVtbygoKSA9PiB7XG4gICAgY29uc3QgaGFzUm91dGVyUGVuZGluZyA9XG4gICAgICBhY3RpdmVSb3V0ZUVudHJ5Py5hY3RpdmVMb2FkU3RhdGUuc3RhdHVzID09PSAncGVuZGluZyc7XG4gICAgY29uc3QgY29tbWl0dGVkUm91dGVFbnRyeSA9IGNvbW1pdHRlZFJvdXRlRW50cnlSZWYuY3VycmVudDtcbiAgICBjb25zdCBoYXNSb3V0ZVRyYW5zaXRpb25QZW5kaW5nID1cbiAgICAgIGV4dGVybmFsUGVuZGluZyAmJlxuICAgICAgYWN0aXZlUm91dGVFbnRyeSAhPSBudWxsICYmXG4gICAgICAoY29tbWl0dGVkUm91dGVFbnRyeSA9PSBudWxsIHx8XG4gICAgICAgIHJvdXRlTG9jYXRpb25LZXkoYWN0aXZlUm91dGVFbnRyeSkgIT09XG4gICAgICAgICAgcm91dGVMb2NhdGlvbktleShjb21taXR0ZWRSb3V0ZUVudHJ5KSk7XG4gICAgY29uc3QgaGFzUGVuZGluZyA9XG4gICAgICBoYXNSb3V0ZXJQZW5kaW5nIHx8IGlzU3VzcGVuc2VQZW5kaW5nIHx8IGhhc1JvdXRlVHJhbnNpdGlvblBlbmRpbmc7XG4gICAgaWYgKGVuYWJsZVRyYW5zaXRpb24gJiYgaGFzUGVuZGluZykge1xuICAgICAgcmV0dXJuIHBlbmRpbmc7XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH0sIFtcbiAgICBlbmFibGVUcmFuc2l0aW9uLFxuICAgIGV4dGVybmFsUGVuZGluZyxcbiAgICBhY3RpdmVSb3V0ZUVudHJ5LFxuICAgIGlzU3VzcGVuc2VQZW5kaW5nLFxuICAgIHBlbmRpbmcsXG4gIF0pO1xuXG4gIGNvbnN0IGhhbmRsZVN1c3BlbnNlUGVuZGluZ0NoYW5nZSA9IHVzZUNhbGxiYWNrKChpc1BlbmRpbmc6IGJvb2xlYW4pID0+IHtcbiAgICBzZXRJc1N1c3BlbnNlUGVuZGluZyhpc1BlbmRpbmcpO1xuICB9LCBbXSk7XG5cbiAgY29uc3Qgb2JzZXJ2ZWRGYWxsYmFjayA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIHJldHVybiAoXG4gICAgICA8U3VzcGVuc2VGYWxsYmFja09ic2VydmVyIG9uUGVuZGluZ0NoYW5nZT17aGFuZGxlU3VzcGVuc2VQZW5kaW5nQ2hhbmdlfT5cbiAgICAgICAge2ZhbGxiYWNrfVxuICAgICAgPC9TdXNwZW5zZUZhbGxiYWNrT2JzZXJ2ZXI+XG4gICAgKTtcbiAgfSwgW2ZhbGxiYWNrLCBoYW5kbGVTdXNwZW5zZVBlbmRpbmdDaGFuZ2VdKTtcblxuICBjb25zdCByb3V0ZUNvbXBvbmVudCA9IHVzZU1lbW8oKCk6IFJlYWN0Tm9kZSA9PiB7XG4gICAgcmV0dXJuIHJlbmRlclJvdXRlRW50cnkoZGlzcGxheWVkUm91dGVFbnRyeSwgZmFsbGJhY2spO1xuICB9LCBbZGlzcGxheWVkUm91dGVFbnRyeSwgZmFsbGJhY2tdKTtcblxuICBjb25zdCBoYW5kbGVSb3V0ZUVudHJ5Q29tbWl0ID0gdXNlQ2FsbGJhY2soKGVudHJ5OiBSb3V0ZUVudHJ5PFBhcmFtRGF0YT4pID0+IHtcbiAgICBpZiAoY29tbWl0dGVkUm91dGVFbnRyeVJlZi5jdXJyZW50ID09PSBlbnRyeSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb21taXR0ZWRSb3V0ZUVudHJ5UmVmLmN1cnJlbnQgPSBlbnRyeTtcbiAgICBvblJvdXRlQ29tbWl0UmVmLmN1cnJlbnQ/LihlbnRyeSk7XG4gIH0sIFtdKTtcblxuICBjb25zdCB0cmFuc2l0aW9uRmFsbGJhY2sgPSB1c2VNZW1vKCgpOiBSZWFjdE5vZGUgPT4ge1xuICAgIGlmICghZW5hYmxlVHJhbnNpdGlvbikge1xuICAgICAgcmV0dXJuIG9ic2VydmVkRmFsbGJhY2s7XG4gICAgfVxuXG4gICAgcmV0dXJuIChcbiAgICAgIHJlbmRlclJvdXRlRW50cnkoY29tbWl0dGVkUm91dGVFbnRyeVJlZi5jdXJyZW50LCBmYWxsYmFjaykgPz9cbiAgICAgIG9ic2VydmVkRmFsbGJhY2tcbiAgICApO1xuICB9LCBbZW5hYmxlVHJhbnNpdGlvbiwgZmFsbGJhY2ssIG9ic2VydmVkRmFsbGJhY2tdKTtcblxuICAvLyBSb3V0ZXMgY2FuIGVycm9yIHNvIHdyYXAgaW4gYW4gPEVycm9yQm91bmRhcnk+XG4gIC8vIFJvdXRlcyBjYW4gc3VzcGVuZCwgc28gd3JhcCBpbiA8U3VzcGVuc2U+XG4gIHJldHVybiAoXG4gICAgPD5cbiAgICAgIHtwZW5kaW5nQ29udGVudH1cbiAgICAgIDxTdXNwZW5zZSBmYWxsYmFjaz17dHJhbnNpdGlvbkZhbGxiYWNrfT5cbiAgICAgICAgPFJvdXRlRW50cnlDb21taXRPYnNlcnZlclxuICAgICAgICAgIGVudHJ5PXtkaXNwbGF5ZWRSb3V0ZUVudHJ5fVxuICAgICAgICAgIG9uQ29tbWl0PXtoYW5kbGVSb3V0ZUVudHJ5Q29tbWl0fVxuICAgICAgICA+XG4gICAgICAgICAge3JvdXRlQ29tcG9uZW50fVxuICAgICAgICA8L1JvdXRlRW50cnlDb21taXRPYnNlcnZlcj5cbiAgICAgIDwvU3VzcGVuc2U+XG4gICAgPC8+XG4gICk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBSb3V0ZXJSZW5kZXJlcjtcbiJdfQ==
@@ -1,5 +1,5 @@
1
1
  import type { ParamData } from 'path-to-regexp';
2
- import { type RoutingContextType, type RouteNode, type PreparedAccess, type NavigateOverloads, type UnknownQueryShape } from '../types.js';
2
+ import { type RoutingContextType, type RouteNode, type PreparedAccess, type NavigateOverloads, type RouterHydrationSnapshot, type UnknownQueryShape } from '../types.js';
3
3
  import { type InstrumentationAPI } from '../instrumentation/Instrumentation.js';
4
4
  import { type RouterQuerySchema } from '../internal/routerSearchState.js';
5
5
  export type CreateRouterReturn<TContext, R extends RouteNode[]> = {
@@ -12,6 +12,7 @@ export type CreateRouterOptions<TContext> = {
12
12
  instrumentations?: InstrumentationAPI[];
13
13
  context?: TContext | (() => TContext);
14
14
  getContext?: () => TContext;
15
+ hydrationSnapshot?: RouterHydrationSnapshot;
15
16
  };
16
17
  export default function createRouter<TContext = unknown, R extends RouteNode[] = RouteNode[]>(routes: [...R] | RouteNode[], options?: CreateRouterOptions<TContext>): CreateRouterReturn<TContext, R>;
17
18
  //# sourceMappingURL=createRouter.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"createRouter.d.ts","sourceRoot":"","sources":["../../../src/routing/createRouter.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,EAEL,KAAK,kBAAkB,EAEvB,KAAK,SAAS,EACd,KAAK,cAAc,EACnB,KAAK,iBAAiB,EAOtB,KAAK,iBAAiB,EACvB,MAAM,aAAa,CAAC;AACrB,OAAO,EAEL,KAAK,kBAAkB,EAKxB,MAAM,uCAAuC,CAAC;AAY/C,OAAO,EAGL,KAAK,iBAAiB,EACvB,MAAM,kCAAkC,CAAC;AA0C1C,MAAM,MAAM,kBAAkB,CAAC,QAAQ,EAAE,CAAC,SAAS,SAAS,EAAE,IAAI;IAEhE,OAAO,EAAE,MAAM,IAAI,CAAC;IAEpB,OAAO,EAAE,kBAAkB,CACzB,SAAS,EACT,iBAAiB,EACjB,iBAAiB,EACjB,QAAQ,CACT,GACC,cAAc,CAAC,CAAC,CAAC,GAAG;QAClB,QAAQ,EAAE,iBAAiB,CAAC,CAAC,CAAC,CAAC;KAChC,CAAC;CACL,CAAC;AAwCF,MAAM,MAAM,mBAAmB,CAAC,QAAQ,IAAI;IAE1C,gBAAgB,CAAC,EAAE,kBAAkB,EAAE,CAAC;IAExC,OAAO,CAAC,EAAE,QAAQ,GAAG,CAAC,MAAM,QAAQ,CAAC,CAAC;IAEtC,UAAU,CAAC,EAAE,MAAM,QAAQ,CAAC;CAC7B,CAAC;AASF,MAAM,CAAC,OAAO,UAAU,YAAY,CAClC,QAAQ,GAAG,OAAO,EAClB,CAAC,SAAS,SAAS,EAAE,GAAG,SAAS,EAAE,EAEnC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,SAAS,EAAE,EAC5B,OAAO,GAAE,mBAAmB,CAAC,QAAQ,CAAM,GAC1C,kBAAkB,CAAC,QAAQ,EAAE,CAAC,CAAC,CAwlCjC"}
1
+ {"version":3,"file":"createRouter.d.ts","sourceRoot":"","sources":["../../../src/routing/createRouter.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,EAEL,KAAK,kBAAkB,EAEvB,KAAK,SAAS,EACd,KAAK,cAAc,EACnB,KAAK,iBAAiB,EAOtB,KAAK,uBAAuB,EAG5B,KAAK,iBAAiB,EACvB,MAAM,aAAa,CAAC;AACrB,OAAO,EAEL,KAAK,kBAAkB,EAKxB,MAAM,uCAAuC,CAAC;AAa/C,OAAO,EAGL,KAAK,iBAAiB,EACvB,MAAM,kCAAkC,CAAC;AA2C1C,MAAM,MAAM,kBAAkB,CAAC,QAAQ,EAAE,CAAC,SAAS,SAAS,EAAE,IAAI;IAEhE,OAAO,EAAE,MAAM,IAAI,CAAC;IAEpB,OAAO,EAAE,kBAAkB,CACzB,SAAS,EACT,iBAAiB,EACjB,iBAAiB,EACjB,QAAQ,CACT,GACC,cAAc,CAAC,CAAC,CAAC,GAAG;QAClB,QAAQ,EAAE,iBAAiB,CAAC,CAAC,CAAC,CAAC;KAChC,CAAC;CACL,CAAC;AAwCF,MAAM,MAAM,mBAAmB,CAAC,QAAQ,IAAI;IAE1C,gBAAgB,CAAC,EAAE,kBAAkB,EAAE,CAAC;IAExC,OAAO,CAAC,EAAE,QAAQ,GAAG,CAAC,MAAM,QAAQ,CAAC,CAAC;IAEtC,UAAU,CAAC,EAAE,MAAM,QAAQ,CAAC;IAE5B,iBAAiB,CAAC,EAAE,uBAAuB,CAAC;CAC7C,CAAC;AASF,MAAM,CAAC,OAAO,UAAU,YAAY,CAClC,QAAQ,GAAG,OAAO,EAClB,CAAC,SAAS,SAAS,EAAE,GAAG,SAAS,EAAE,EAEnC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,SAAS,EAAE,EAC5B,OAAO,GAAE,mBAAmB,CAAC,QAAQ,CAAM,GAC1C,kBAAkB,CAAC,QAAQ,EAAE,CAAC,CAAC,CA8yCjC"}