@kaspernj/api-maker 1.0.2113 → 1.0.2115

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 (38) hide show
  1. package/build/collection-loader.js +6 -5
  2. package/build/collection.d.ts +8 -4
  3. package/build/collection.d.ts.map +1 -1
  4. package/build/collection.js +5 -3
  5. package/build/form.d.ts.map +1 -1
  6. package/build/form.js +5 -3
  7. package/build/router/route.d.ts.map +1 -1
  8. package/build/router/route.js +50 -9
  9. package/build/super-admin/edit-page/edit-attribute-checkbox.js +3 -3
  10. package/build/super-admin/edit-page/edit-attribute-content.js +3 -3
  11. package/build/super-admin/edit-page/edit-attribute-input.js +3 -3
  12. package/build/super-admin/edit-page.js +14 -14
  13. package/build/super-admin/index.js +47 -24
  14. package/build/table/table-settings.d.ts.map +1 -1
  15. package/build/table/table-settings.js +7 -1
  16. package/build/table/table.js +47 -21
  17. package/build/table/widths.d.ts +3 -0
  18. package/build/table/widths.d.ts.map +1 -1
  19. package/build/table/widths.js +33 -18
  20. package/build/use-can-can.d.ts.map +1 -1
  21. package/build/use-can-can.js +18 -2
  22. package/build/use-collection.d.ts +33 -30
  23. package/build/use-collection.d.ts.map +1 -1
  24. package/build/use-collection.js +45 -23
  25. package/build/use-current-user-context.d.ts.map +1 -1
  26. package/build/use-current-user-context.js +13 -4
  27. package/build/use-input.js +2 -2
  28. package/build/use-model-event.js +2 -2
  29. package/build/use-model.d.ts.map +1 -1
  30. package/build/use-model.js +24 -12
  31. package/build/use-resize-observer.js +2 -2
  32. package/build/use-router.js +2 -2
  33. package/build/use-shape.d.ts +2 -0
  34. package/build/use-shape.d.ts.map +1 -0
  35. package/build/use-shape.js +2 -0
  36. package/build/use-updated-event.js +2 -2
  37. package/build/use-validation-errors.js +2 -2
  38. package/package.json +2 -2
@@ -1,14 +1,14 @@
1
1
  import Collection from "./collection.js";
2
2
  import { digg } from "diggerize";
3
3
  import memo from "set-state-compare/build/memo.js";
4
- import { useMemo } from "react";
4
+ import { useEffect } from "react";
5
5
  import PropTypes from "prop-types"; // eslint-disable-line sort-imports
6
6
  import propTypesExact from "prop-types-exact";
7
7
  import useCollection from "./use-collection.js";
8
- import useShape from "set-state-compare/build/use-shape.js";
8
+ import useShape from "./use-shape.js";
9
9
  function CollectionLoader({ component, ...restProps }) {
10
10
  const s = useShape(restProps);
11
- const useCollectionResult = useCollection(restProps);
11
+ const useCollectionResult = useCollection(/** @type {Parameters<typeof useCollection>[0]} */ (restProps));
12
12
  const cachePartsKeys = [
13
13
  "modelIdsCacheString",
14
14
  "overallCount",
@@ -27,7 +27,8 @@ function CollectionLoader({ component, ...restProps }) {
27
27
  cacheParts.push(digg(useCollectionResult, cachePartsKey));
28
28
  }
29
29
  s.updateMeta({ component, useCollectionResult });
30
- useMemo(() => {
30
+ useEffect(() => {
31
+ // Mirror collection results into the host component after commit so async loads never update an unmounted render path.
31
32
  s.m.component.setState(s.m.useCollectionResult);
32
33
  }, cacheParts);
33
34
  return null;
@@ -51,4 +52,4 @@ CollectionLoader.propTypes = propTypesExact({
51
52
  selectColumns: PropTypes.object
52
53
  });
53
54
  export default memo(CollectionLoader);
54
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sbGVjdGlvbi1sb2FkZXIuanMiLCJzb3VyY2VSb290IjoiL3NyYy8iLCJzb3VyY2VzIjpbImNvbGxlY3Rpb24tbG9hZGVyLmpzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLFVBQVUsTUFBTSxpQkFBaUIsQ0FBQTtBQUN4QyxPQUFPLEVBQUMsSUFBSSxFQUFDLE1BQU0sV0FBVyxDQUFBO0FBQzlCLE9BQU8sSUFBSSxNQUFNLGlDQUFpQyxDQUFBO0FBQ2xELE9BQU8sRUFBQyxPQUFPLEVBQUMsTUFBTSxPQUFPLENBQUE7QUFDN0IsT0FBTyxTQUFTLE1BQU0sWUFBWSxDQUFBLENBQUMsbUNBQW1DO0FBQ3RFLE9BQU8sY0FBYyxNQUFNLGtCQUFrQixDQUFBO0FBQzdDLE9BQU8sYUFBYSxNQUFNLHFCQUFxQixDQUFBO0FBQy9DLE9BQU8sUUFBUSxNQUFNLHNDQUFzQyxDQUFBO0FBRTNELFNBQVMsZ0JBQWdCLENBQUMsRUFBQyxTQUFTLEVBQUUsR0FBRyxTQUFTLEVBQUM7SUFDakQsTUFBTSxDQUFDLEdBQUcsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFBO0lBQzdCLE1BQU0sbUJBQW1CLEdBQUcsYUFBYSxDQUFDLFNBQVMsQ0FBQyxDQUFBO0lBQ3BELE1BQU0sY0FBYyxHQUFHO1FBQ3JCLHFCQUFxQjtRQUNyQixjQUFjO1FBQ2QsU0FBUztRQUNULFdBQVc7UUFDWCxhQUFhO1FBQ2IsWUFBWTtRQUNaLFlBQVk7UUFDWixlQUFlO1FBQ2YsY0FBYztRQUNkLCtCQUErQjtRQUMvQiwyQkFBMkI7S0FDNUIsQ0FBQTtJQUNELE1BQU0sVUFBVSxHQUFHLEVBQUUsQ0FBQTtJQUVyQixLQUFJLE1BQU0sYUFBYSxJQUFJLGNBQWMsRUFBRSxDQUFDO1FBQzFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLG1CQUFtQixFQUFFLGFBQWEsQ0FBQyxDQUFDLENBQUE7SUFDM0QsQ0FBQztJQUVELENBQUMsQ0FBQyxVQUFVLENBQUMsRUFBQyxTQUFTLEVBQUUsbUJBQW1CLEVBQUMsQ0FBQyxDQUFBO0lBRTlDLE9BQU8sQ0FBQyxHQUFHLEVBQUU7UUFDWCxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFBO0lBQ2pELENBQUMsRUFBRSxVQUFVLENBQUMsQ0FBQTtJQUVkLE9BQU8sSUFBSSxDQUFBO0FBQ2IsQ0FBQztBQUVELGdCQUFnQixDQUFDLFNBQVMsR0FBRyxjQUFjLENBQUM7SUFDMUMsU0FBUyxFQUFFLFNBQVMsQ0FBQyxNQUFNO0lBQzNCLFVBQVUsRUFBRSxTQUFTLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQztJQUM1QyxTQUFTLEVBQUUsU0FBUyxDQUFDLE1BQU0sQ0FBQyxVQUFVO0lBQ3RDLGFBQWEsRUFBRSxTQUFTLENBQUMsTUFBTTtJQUMvQixPQUFPLEVBQUUsU0FBUyxDQUFDLEtBQUs7SUFDeEIsVUFBVSxFQUFFLFNBQVMsQ0FBQyxJQUFJLENBQUMsVUFBVTtJQUNyQyx5QkFBeUIsRUFBRSxTQUFTLENBQUMsSUFBSTtJQUN6QyxxQkFBcUIsRUFBRSxTQUFTLENBQUMsSUFBSTtJQUNyQyxjQUFjLEVBQUUsU0FBUyxDQUFDLElBQUk7SUFDOUIsVUFBVSxFQUFFLFNBQVMsQ0FBQyxJQUFJO0lBQzFCLFFBQVEsRUFBRSxTQUFTLENBQUMsS0FBSztJQUN6QixXQUFXLEVBQUUsU0FBUyxDQUFDLElBQUk7SUFDM0IsU0FBUyxFQUFFLFNBQVMsQ0FBQyxNQUFNO0lBQzNCLE9BQU8sRUFBRSxTQUFTLENBQUMsTUFBTTtJQUN6QixNQUFNLEVBQUUsU0FBUyxDQUFDLE1BQU07SUFDeEIsYUFBYSxFQUFFLFNBQVMsQ0FBQyxNQUFNO0NBQ2hDLENBQUMsQ0FBQTtBQUVGLGVBQWUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgQ29sbGVjdGlvbiBmcm9tIFwiLi9jb2xsZWN0aW9uLmpzXCJcbmltcG9ydCB7ZGlnZ30gZnJvbSBcImRpZ2dlcml6ZVwiXG5pbXBvcnQgbWVtbyBmcm9tIFwic2V0LXN0YXRlLWNvbXBhcmUvYnVpbGQvbWVtby5qc1wiXG5pbXBvcnQge3VzZU1lbW99IGZyb20gXCJyZWFjdFwiXG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCIgLy8gZXNsaW50LWRpc2FibGUtbGluZSBzb3J0LWltcG9ydHNcbmltcG9ydCBwcm9wVHlwZXNFeGFjdCBmcm9tIFwicHJvcC10eXBlcy1leGFjdFwiXG5pbXBvcnQgdXNlQ29sbGVjdGlvbiBmcm9tIFwiLi91c2UtY29sbGVjdGlvbi5qc1wiXG5pbXBvcnQgdXNlU2hhcGUgZnJvbSBcInNldC1zdGF0ZS1jb21wYXJlL2J1aWxkL3VzZS1zaGFwZS5qc1wiXG5cbmZ1bmN0aW9uIENvbGxlY3Rpb25Mb2FkZXIoe2NvbXBvbmVudCwgLi4ucmVzdFByb3BzfSkgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIGZ1bmMtc3R5bGVcbiAgY29uc3QgcyA9IHVzZVNoYXBlKHJlc3RQcm9wcylcbiAgY29uc3QgdXNlQ29sbGVjdGlvblJlc3VsdCA9IHVzZUNvbGxlY3Rpb24ocmVzdFByb3BzKVxuICBjb25zdCBjYWNoZVBhcnRzS2V5cyA9IFtcbiAgICBcIm1vZGVsSWRzQ2FjaGVTdHJpbmdcIixcbiAgICBcIm92ZXJhbGxDb3VudFwiLFxuICAgIFwicVBhcmFtc1wiLFxuICAgIFwicXVlcnlOYW1lXCIsXG4gICAgXCJxdWVyeVBlcktleVwiLFxuICAgIFwicXVlcnlRTmFtZVwiLFxuICAgIFwicXVlcnlTTmFtZVwiLFxuICAgIFwicXVlcnlQYWdlTmFtZVwiLFxuICAgIFwic2VhcmNoUGFyYW1zXCIsXG4gICAgXCJzaG93Tm9SZWNvcmRzQXZhaWxhYmxlQ29udGVudFwiLFxuICAgIFwic2hvd05vUmVjb3Jkc0ZvdW5kQ29udGVudFwiXG4gIF1cbiAgY29uc3QgY2FjaGVQYXJ0cyA9IFtdXG5cbiAgZm9yKGNvbnN0IGNhY2hlUGFydHNLZXkgb2YgY2FjaGVQYXJ0c0tleXMpIHtcbiAgICBjYWNoZVBhcnRzLnB1c2goZGlnZyh1c2VDb2xsZWN0aW9uUmVzdWx0LCBjYWNoZVBhcnRzS2V5KSlcbiAgfVxuXG4gIHMudXBkYXRlTWV0YSh7Y29tcG9uZW50LCB1c2VDb2xsZWN0aW9uUmVzdWx0fSlcblxuICB1c2VNZW1vKCgpID0+IHtcbiAgICBzLm0uY29tcG9uZW50LnNldFN0YXRlKHMubS51c2VDb2xsZWN0aW9uUmVzdWx0KVxuICB9LCBjYWNoZVBhcnRzKVxuXG4gIHJldHVybiBudWxsXG59XG5cbkNvbGxlY3Rpb25Mb2FkZXIucHJvcFR5cGVzID0gcHJvcFR5cGVzRXhhY3Qoe1xuICBhYmlsaXRpZXM6IFByb3BUeXBlcy5vYmplY3QsXG4gIGNvbGxlY3Rpb246IFByb3BUeXBlcy5pbnN0YW5jZU9mKENvbGxlY3Rpb24pLFxuICBjb21wb25lbnQ6IFByb3BUeXBlcy5vYmplY3QuaXNSZXF1aXJlZCxcbiAgZGVmYXVsdFBhcmFtczogUHJvcFR5cGVzLm9iamVjdCxcbiAgZ3JvdXBCeTogUHJvcFR5cGVzLmFycmF5LFxuICBtb2RlbENsYXNzOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICBub1JlY29yZHNBdmFpbGFibGVDb250ZW50OiBQcm9wVHlwZXMuZnVuYyxcbiAgbm9SZWNvcmRzRm91bmRDb250ZW50OiBQcm9wVHlwZXMuZnVuYyxcbiAgb25Nb2RlbHNMb2FkZWQ6IFByb3BUeXBlcy5mdW5jLFxuICBwYWdpbmF0aW9uOiBQcm9wVHlwZXMuYm9vbCxcbiAgcHJlbG9hZHM6IFByb3BUeXBlcy5hcnJheSxcbiAgcXVlcnlNZXRob2Q6IFByb3BUeXBlcy5mdW5jLFxuICBxdWVyeU5hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHJhbnNhY2s6IFByb3BUeXBlcy5vYmplY3QsXG4gIHNlbGVjdDogUHJvcFR5cGVzLm9iamVjdCxcbiAgc2VsZWN0Q29sdW1uczogUHJvcFR5cGVzLm9iamVjdFxufSlcblxuZXhwb3J0IGRlZmF1bHQgbWVtbyhDb2xsZWN0aW9uTG9hZGVyKVxuIl19
55
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sbGVjdGlvbi1sb2FkZXIuanMiLCJzb3VyY2VSb290IjoiL3NyYy8iLCJzb3VyY2VzIjpbImNvbGxlY3Rpb24tbG9hZGVyLmpzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLFVBQVUsTUFBTSxpQkFBaUIsQ0FBQTtBQUN4QyxPQUFPLEVBQUMsSUFBSSxFQUFDLE1BQU0sV0FBVyxDQUFBO0FBQzlCLE9BQU8sSUFBSSxNQUFNLGlDQUFpQyxDQUFBO0FBQ2xELE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSxPQUFPLENBQUE7QUFDL0IsT0FBTyxTQUFTLE1BQU0sWUFBWSxDQUFBLENBQUMsbUNBQW1DO0FBQ3RFLE9BQU8sY0FBYyxNQUFNLGtCQUFrQixDQUFBO0FBQzdDLE9BQU8sYUFBYSxNQUFNLHFCQUFxQixDQUFBO0FBQy9DLE9BQU8sUUFBUSxNQUFNLGdCQUFnQixDQUFBO0FBRXJDLFNBQVMsZ0JBQWdCLENBQUMsRUFBQyxTQUFTLEVBQUUsR0FBRyxTQUFTLEVBQUM7SUFDakQsTUFBTSxDQUFDLEdBQUcsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFBO0lBQzdCLE1BQU0sbUJBQW1CLEdBQUcsYUFBYSxDQUFDLGtEQUFrRCxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQTtJQUN6RyxNQUFNLGNBQWMsR0FBRztRQUNyQixxQkFBcUI7UUFDckIsY0FBYztRQUNkLFNBQVM7UUFDVCxXQUFXO1FBQ1gsYUFBYTtRQUNiLFlBQVk7UUFDWixZQUFZO1FBQ1osZUFBZTtRQUNmLGNBQWM7UUFDZCwrQkFBK0I7UUFDL0IsMkJBQTJCO0tBQzVCLENBQUE7SUFDRCxNQUFNLFVBQVUsR0FBRyxFQUFFLENBQUE7SUFFckIsS0FBSSxNQUFNLGFBQWEsSUFBSSxjQUFjLEVBQUUsQ0FBQztRQUMxQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxhQUFhLENBQUMsQ0FBQyxDQUFBO0lBQzNELENBQUM7SUFFRCxDQUFDLENBQUMsVUFBVSxDQUFDLEVBQUMsU0FBUyxFQUFFLG1CQUFtQixFQUFDLENBQUMsQ0FBQTtJQUU5QyxTQUFTLENBQUMsR0FBRyxFQUFFO1FBQ2IsdUhBQXVIO1FBQ3ZILENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLG1CQUFtQixDQUFDLENBQUE7SUFDakQsQ0FBQyxFQUFFLFVBQVUsQ0FBQyxDQUFBO0lBRWQsT0FBTyxJQUFJLENBQUE7QUFDYixDQUFDO0FBRUQsZ0JBQWdCLENBQUMsU0FBUyxHQUFHLGNBQWMsQ0FBQztJQUMxQyxTQUFTLEVBQUUsU0FBUyxDQUFDLE1BQU07SUFDM0IsVUFBVSxFQUFFLFNBQVMsQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDO0lBQzVDLFNBQVMsRUFBRSxTQUFTLENBQUMsTUFBTSxDQUFDLFVBQVU7SUFDdEMsYUFBYSxFQUFFLFNBQVMsQ0FBQyxNQUFNO0lBQy9CLE9BQU8sRUFBRSxTQUFTLENBQUMsS0FBSztJQUN4QixVQUFVLEVBQUUsU0FBUyxDQUFDLElBQUksQ0FBQyxVQUFVO0lBQ3JDLHlCQUF5QixFQUFFLFNBQVMsQ0FBQyxJQUFJO0lBQ3pDLHFCQUFxQixFQUFFLFNBQVMsQ0FBQyxJQUFJO0lBQ3JDLGNBQWMsRUFBRSxTQUFTLENBQUMsSUFBSTtJQUM5QixVQUFVLEVBQUUsU0FBUyxDQUFDLElBQUk7SUFDMUIsUUFBUSxFQUFFLFNBQVMsQ0FBQyxLQUFLO0lBQ3pCLFdBQVcsRUFBRSxTQUFTLENBQUMsSUFBSTtJQUMzQixTQUFTLEVBQUUsU0FBUyxDQUFDLE1BQU07SUFDM0IsT0FBTyxFQUFFLFNBQVMsQ0FBQyxNQUFNO0lBQ3pCLE1BQU0sRUFBRSxTQUFTLENBQUMsTUFBTTtJQUN4QixhQUFhLEVBQUUsU0FBUyxDQUFDLE1BQU07Q0FDaEMsQ0FBQyxDQUFBO0FBRUYsZUFBZSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBDb2xsZWN0aW9uIGZyb20gXCIuL2NvbGxlY3Rpb24uanNcIlxuaW1wb3J0IHtkaWdnfSBmcm9tIFwiZGlnZ2VyaXplXCJcbmltcG9ydCBtZW1vIGZyb20gXCJzZXQtc3RhdGUtY29tcGFyZS9idWlsZC9tZW1vLmpzXCJcbmltcG9ydCB7dXNlRWZmZWN0fSBmcm9tIFwicmVhY3RcIlxuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgc29ydC1pbXBvcnRzXG5pbXBvcnQgcHJvcFR5cGVzRXhhY3QgZnJvbSBcInByb3AtdHlwZXMtZXhhY3RcIlxuaW1wb3J0IHVzZUNvbGxlY3Rpb24gZnJvbSBcIi4vdXNlLWNvbGxlY3Rpb24uanNcIlxuaW1wb3J0IHVzZVNoYXBlIGZyb20gXCIuL3VzZS1zaGFwZS5qc1wiXG5cbmZ1bmN0aW9uIENvbGxlY3Rpb25Mb2FkZXIoe2NvbXBvbmVudCwgLi4ucmVzdFByb3BzfSkgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIGZ1bmMtc3R5bGVcbiAgY29uc3QgcyA9IHVzZVNoYXBlKHJlc3RQcm9wcylcbiAgY29uc3QgdXNlQ29sbGVjdGlvblJlc3VsdCA9IHVzZUNvbGxlY3Rpb24oLyoqIEB0eXBlIHtQYXJhbWV0ZXJzPHR5cGVvZiB1c2VDb2xsZWN0aW9uPlswXX0gKi8gKHJlc3RQcm9wcykpXG4gIGNvbnN0IGNhY2hlUGFydHNLZXlzID0gW1xuICAgIFwibW9kZWxJZHNDYWNoZVN0cmluZ1wiLFxuICAgIFwib3ZlcmFsbENvdW50XCIsXG4gICAgXCJxUGFyYW1zXCIsXG4gICAgXCJxdWVyeU5hbWVcIixcbiAgICBcInF1ZXJ5UGVyS2V5XCIsXG4gICAgXCJxdWVyeVFOYW1lXCIsXG4gICAgXCJxdWVyeVNOYW1lXCIsXG4gICAgXCJxdWVyeVBhZ2VOYW1lXCIsXG4gICAgXCJzZWFyY2hQYXJhbXNcIixcbiAgICBcInNob3dOb1JlY29yZHNBdmFpbGFibGVDb250ZW50XCIsXG4gICAgXCJzaG93Tm9SZWNvcmRzRm91bmRDb250ZW50XCJcbiAgXVxuICBjb25zdCBjYWNoZVBhcnRzID0gW11cblxuICBmb3IoY29uc3QgY2FjaGVQYXJ0c0tleSBvZiBjYWNoZVBhcnRzS2V5cykge1xuICAgIGNhY2hlUGFydHMucHVzaChkaWdnKHVzZUNvbGxlY3Rpb25SZXN1bHQsIGNhY2hlUGFydHNLZXkpKVxuICB9XG5cbiAgcy51cGRhdGVNZXRhKHtjb21wb25lbnQsIHVzZUNvbGxlY3Rpb25SZXN1bHR9KVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgLy8gTWlycm9yIGNvbGxlY3Rpb24gcmVzdWx0cyBpbnRvIHRoZSBob3N0IGNvbXBvbmVudCBhZnRlciBjb21taXQgc28gYXN5bmMgbG9hZHMgbmV2ZXIgdXBkYXRlIGFuIHVubW91bnRlZCByZW5kZXIgcGF0aC5cbiAgICBzLm0uY29tcG9uZW50LnNldFN0YXRlKHMubS51c2VDb2xsZWN0aW9uUmVzdWx0KVxuICB9LCBjYWNoZVBhcnRzKVxuXG4gIHJldHVybiBudWxsXG59XG5cbkNvbGxlY3Rpb25Mb2FkZXIucHJvcFR5cGVzID0gcHJvcFR5cGVzRXhhY3Qoe1xuICBhYmlsaXRpZXM6IFByb3BUeXBlcy5vYmplY3QsXG4gIGNvbGxlY3Rpb246IFByb3BUeXBlcy5pbnN0YW5jZU9mKENvbGxlY3Rpb24pLFxuICBjb21wb25lbnQ6IFByb3BUeXBlcy5vYmplY3QuaXNSZXF1aXJlZCxcbiAgZGVmYXVsdFBhcmFtczogUHJvcFR5cGVzLm9iamVjdCxcbiAgZ3JvdXBCeTogUHJvcFR5cGVzLmFycmF5LFxuICBtb2RlbENsYXNzOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICBub1JlY29yZHNBdmFpbGFibGVDb250ZW50OiBQcm9wVHlwZXMuZnVuYyxcbiAgbm9SZWNvcmRzRm91bmRDb250ZW50OiBQcm9wVHlwZXMuZnVuYyxcbiAgb25Nb2RlbHNMb2FkZWQ6IFByb3BUeXBlcy5mdW5jLFxuICBwYWdpbmF0aW9uOiBQcm9wVHlwZXMuYm9vbCxcbiAgcHJlbG9hZHM6IFByb3BUeXBlcy5hcnJheSxcbiAgcXVlcnlNZXRob2Q6IFByb3BUeXBlcy5mdW5jLFxuICBxdWVyeU5hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHJhbnNhY2s6IFByb3BUeXBlcy5vYmplY3QsXG4gIHNlbGVjdDogUHJvcFR5cGVzLm9iamVjdCxcbiAgc2VsZWN0Q29sdW1uczogUHJvcFR5cGVzLm9iamVjdFxufSlcblxuZXhwb3J0IGRlZmF1bHQgbWVtbyhDb2xsZWN0aW9uTG9hZGVyKVxuIl19
@@ -2,6 +2,8 @@
2
2
  * @template {typeof import("./base-model.js").default} MC
3
3
  * @typedef {InstanceType<MC>} ModelOf
4
4
  */
5
+ /** @typedef {Record<string, any>} PreloadMap */
6
+ /** @typedef {string | Array<string | PreloadMap> | PreloadMap} PreloadValue */
5
7
  /**
6
8
  * @template {typeof import("./base-model.js").default} MC
7
9
  * @typedef {object} CollectionArgsType
@@ -22,7 +24,7 @@
22
24
  * @property {Record<string, any>} [params]
23
25
  * @property {number} [per]
24
26
  * @property {string} [perKey]
25
- * @property {string[]} [preload]
27
+ * @property {PreloadValue} [preload]
26
28
  * @property {Record<string, any>} [ransack]
27
29
  * @property {Record<string, any>} [search]
28
30
  * @property {string} [searchKey]
@@ -111,10 +113,10 @@ export default class ApiMakerCollection<MC extends typeof import("./base-model.j
111
113
  */
112
114
  map(callback: (arg0: import("./base-model.js").default) => void): any[];
113
115
  /**
114
- * @param {string[]} preloadValue
116
+ * @param {PreloadValue} preloadValue
115
117
  * @returns {this}
116
118
  */
117
- preload(preloadValue: string[]): this;
119
+ preload(preloadValue: PreloadValue): this;
118
120
  /**
119
121
  * @param {number} page
120
122
  * @returns {this}
@@ -193,6 +195,8 @@ export default class ApiMakerCollection<MC extends typeof import("./base-model.j
193
195
  }>;
194
196
  }
195
197
  export type ModelOf<MC extends typeof import("./base-model.js").default> = InstanceType<MC>;
198
+ export type PreloadMap = Record<string, any>;
199
+ export type PreloadValue = string | Array<string | PreloadMap> | PreloadMap;
196
200
  export type CollectionArgsType<MC extends typeof import("./base-model.js").default> = {
197
201
  model?: import("./base-model.js").default;
198
202
  modelClass: MC;
@@ -210,7 +214,7 @@ export type QueryArgsType = {
210
214
  params?: Record<string, any>;
211
215
  per?: number;
212
216
  perKey?: string;
213
- preload?: string[];
217
+ preload?: PreloadValue;
214
218
  ransack?: Record<string, any>;
215
219
  search?: Record<string, any>;
216
220
  searchKey?: string;
@@ -1 +1 @@
1
- {"version":3,"file":"collection.d.ts","sourceRoot":"/src/","sources":["collection.js"],"names":[],"mappings":"AAQA;;;GAGG;AAEH;;;;;;GAMG;AAEH;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,8DAA8D;AAC9D,wCADyD,EAAE,SAA7C,cAAe,iBAAiB,EAAE,OAAQ;IAEtD,4BAAkC;IAElC;;;OAGG;IACH,kBAHW,kBAAkB,CAAC,EAAE,CAAC,cACtB,aAAa,EAOvB;IAFC,yBAA0B;IAC1B,6BAAgB;IAGlB;;;OAGG;IACH,6BAHW,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,GACtB,IAAI,CAmBhB;IAED;;;OAGG;IACH,0BAHW,MAAM,GACJ,IAAI,CAIhB;IAED,iCAAiC;IACjC,SADc,OAAO,CAAC,MAAM,CAAC,CAO5B;IAED,sBAAsB;IACtB,YADc,IAAI,CAGjB;IAED;;;OAGG;IACH,eAHW,CAAS,IAAiC,EAAjC,OAAO,iBAAiB,EAAE,OAAO,KAAI,IAAI,GAChD,OAAO,CAAC,IAAI,CAAC,CAQzB;IAED;;;OAGG;IACH,gBAHc,MAAM,EAAA,GACP,IAAI,CAYhB;IAED,sCAAsC;IACtC,SADc,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAIjC;IAED;;;OAGG;IACH,oCAHc,CAAC,MAAM,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,EAAA,GAC5B,IAAI,CAmBhB;IAED,kEAAkE;IAClE,gBADc,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAS7D;IAED,yBAAyB;IACzB,YADc,OAAO,CAWpB;IAED;;;OAGG;IACH,cAHW,MAAM,GACJ,IAAI,CAIhB;IAED,oCAAoC;IACpC,aADc,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAO/B;IAED,kDAAkD;IAClD,UADc,OAAO,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAoB7C;IAED,oCAAoC;IACpC,eADc,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAS/B;IAGD;;;OAGG;IACH,mBAHW,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,GAChB,IAAI,CAIhB;IAGD;;;OAGG;IACH,eAHW,OAAO,CAAC,EAAE,CAAC,GACT,IAAI,CAYhB;IAGD;;;OAGG;IACH,eAHW,CAAS,IAAiC,EAAjC,OAAO,iBAAiB,EAAE,OAAO,KAAG,OAAO,GAClD,OAAO,iBAAiB,EAAE,OAAO,CAEa;IAE3D;;;OAGG;IACH,kBAHW,CAAS,IAAiC,EAAjC,OAAO,iBAAiB,EAAE,OAAO,KAAG,IAAI,GAC/C,IAAI,CAEgD;IAEjE;;;OAGG;IACH,cAHW,CAAS,IAAiC,EAAjC,OAAO,iBAAiB,EAAE,OAAO,KAAG,IAAI,GAC/C,GAAG,EAAE,CAEuC;IAEzD;;;OAGG;IACH,sBAHW,MAAM,EAAE,GACN,IAAI,CAIhB;IAED;;;OAGG;IACH,WAHW,MAAM,GACJ,IAAI,CAMhB;IAED;;;OAGG;IACH,iBAHW,MAAM,GACJ,IAAI,CAIhB;IAED,yBAAyB;IACzB,cADc,OAAO,CAkBpB;IAED,qCAAqC;IACrC,UADc,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAoBhC;IAED;;;OAGG;IACH,SAHW,MAAM,GACJ,IAAI,CAIhB;IAED;;;OAGG;IACH,eAHW,MAAM,GACJ,IAAI,CAIhB;IAED;;;OAGG;IACH,gBAHW,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GACjB,IAAI,CAKhB;IAED,iCAAiC;IACjC,UADc,OAAO,CAAC,MAAM,CAAC,CAU5B;IAED;;;OAGG;IACH,eAHW,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GACjB,IAAI,CAKhB;IAED;;;OAGG;IACH,qBAHW,MAAM,GACJ,IAAI,CAIhB;IAED;;;OAGG;IACH,uBAHW,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,GACtB,IAAI,CAmBhB;IAED;;;OAGG;IACH,8BAHW,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,GACtB,IAAI,CAmBhB;IAED;;;OAGG;IACH,aAHW,MAAM,GACJ,IAAI,CAIhB;IAED,6CAA6C;IAC7C,WADc,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,CAQxC;IAED,oBAAoB;IACpB,cADc,EAAE,CAOf;IAED,oCAAoC;IACpC,iCAIC;IAGD;;;OAGG;IACH,0BAHW,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,GAChB,IAAI,CAMhB;IAED;;;OAGG;IACH,qBAHW,aAAa,GACX,IAAI,CAMhB;IAED,2DAA2D;IAC3D,aADc,OAAO,CAAC;QAAC,UAAU,EAAE,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAA;KAAC,CAAC,CAiBtD;CACF;oBA9fuD,EAAE,SAA7C,cAAe,iBAAiB,EAAE,OAAQ,IAC1C,YAAY,CAAC,EAAE,CAAC;+BAI2B,EAAE,SAA7C,cAAe,iBAAiB,EAAE,OAAQ;YAEzC,OAAO,iBAAiB,EAAE,OAAO;gBACjC,EAAE;qBACF,MAAM;;;gBAKN,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC;mBACxB,MAAM;YACN,OAAO;eACP,OAAO;cACP,KAAK,CAAC,MAAM,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;YAChC,MAAM;WACN,MAAM;cACN,MAAM;aACN,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;UACnB,MAAM;aACN,MAAM;cACN,MAAM,EAAE;cACR,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;aACnB,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;gBACnB,MAAM;aACN,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC;oBACxB,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC;;mBAlCnB,aAAa"}
1
+ {"version":3,"file":"collection.d.ts","sourceRoot":"/src/","sources":["collection.js"],"names":[],"mappings":"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"}
@@ -9,6 +9,8 @@ import uniqunize from "uniqunize";
9
9
  * @template {typeof import("./base-model.js").default} MC
10
10
  * @typedef {InstanceType<MC>} ModelOf
11
11
  */
12
+ /** @typedef {Record<string, any>} PreloadMap */
13
+ /** @typedef {string | Array<string | PreloadMap> | PreloadMap} PreloadValue */
12
14
  /**
13
15
  * @template {typeof import("./base-model.js").default} MC
14
16
  * @typedef {object} CollectionArgsType
@@ -29,7 +31,7 @@ import uniqunize from "uniqunize";
29
31
  * @property {Record<string, any>} [params]
30
32
  * @property {number} [per]
31
33
  * @property {string} [perKey]
32
- * @property {string[]} [preload]
34
+ * @property {PreloadValue} [preload]
33
35
  * @property {Record<string, any>} [ransack]
34
36
  * @property {Record<string, any>} [search]
35
37
  * @property {string} [searchKey]
@@ -237,7 +239,7 @@ export default class ApiMakerCollection {
237
239
  */
238
240
  map(callback) { return this.loadedArray().map(callback); }
239
241
  /**
240
- * @param {string[]} preloadValue
242
+ * @param {PreloadValue} preloadValue
241
243
  * @returns {this}
242
244
  */
243
245
  preload(preloadValue) {
@@ -450,4 +452,4 @@ export default class ApiMakerCollection {
450
452
  }, {});
451
453
  }
452
454
  }
453
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sbGVjdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIvc3JjLyIsInNvdXJjZXMiOlsiY29sbGVjdGlvbi5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLFNBQVMsTUFBTSxZQUFZLENBQUE7QUFDbEMsT0FBTyxZQUFZLE1BQU0sb0JBQW9CLENBQUEsQ0FBQyxtQ0FBbUM7QUFDakYsT0FBTyxFQUFDLElBQUksRUFBQyxNQUFNLFdBQVcsQ0FBQTtBQUM5QixPQUFPLEtBQUssVUFBVSxNQUFNLFlBQVksQ0FBQSxDQUFDLG1DQUFtQztBQUM1RSxPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0sY0FBYyxDQUFBO0FBQ3hDLE9BQU8sTUFBTSxNQUFNLGFBQWEsQ0FBQSxDQUFDLG1DQUFtQztBQUNwRSxPQUFPLFNBQVMsTUFBTSxXQUFXLENBQUE7QUFFakM7OztHQUdHO0FBRUg7Ozs7OztHQU1HO0FBRUg7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FtQkc7QUFFSCw4REFBOEQ7QUFDOUQsTUFBTSxDQUFDLE9BQU8sT0FBTyxrQkFBa0I7SUFDckMsTUFBTSxDQUFDLFlBQVksR0FBRyxZQUFZLENBQUE7SUFFbEM7OztPQUdHO0lBQ0gsWUFBWSxJQUFJLEVBQUUsU0FBUyxHQUFHLEVBQUU7UUFDOUIsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVO1lBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQywwQkFBMEIsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFBO1FBRS9GLElBQUksQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFBO1FBQzFCLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFBO0lBQ2xCLENBQUM7SUFFRDs7O09BR0c7SUFDSCxTQUFTLENBQUMsaUJBQWlCO1FBQ3pCLE1BQU0sWUFBWSxHQUFHLHVDQUF1QyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUE7UUFFakUsS0FBSyxNQUFNLG1CQUFtQixJQUFJLGlCQUFpQixFQUFFLENBQUM7WUFDcEQsTUFBTSxZQUFZLEdBQUcsVUFBVSxDQUFDLFVBQVUsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFBO1lBQy9ELE1BQU0sU0FBUyxHQUFHLEVBQUUsQ0FBQTtZQUNwQixNQUFNLGNBQWMsR0FBRyxpQkFBaUIsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFBO1lBRTdELEtBQUssTUFBTSxtQkFBbUIsSUFBSSxjQUFjLEVBQUUsQ0FBQztnQkFDakQsTUFBTSxjQUFjLEdBQUcsVUFBVSxDQUFDLFVBQVUsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFBO2dCQUNqRSxTQUFTLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFBO1lBQ2hDLENBQUM7WUFFRCxZQUFZLENBQUMsWUFBWSxDQUFDLEdBQUcsU0FBUyxDQUFBO1FBQ3hDLENBQUM7UUFFRCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBQyxTQUFTLEVBQUUsWUFBWSxFQUFDLENBQUMsQ0FBQTtJQUMvQyxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsWUFBWSxDQUFDLFdBQVc7UUFDdEIsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUMsWUFBWSxFQUFFLFVBQVUsQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLEVBQUMsQ0FBQyxDQUFBO0lBQ3hFLENBQUM7SUFFRCxpQ0FBaUM7SUFDakMsS0FBSyxDQUFDLEtBQUs7UUFDVCxNQUFNLFFBQVEsR0FBRyxNQUFNLElBQUksQ0FBQyxLQUFLLEVBQUU7YUFDaEMsTUFBTSxDQUFDLEVBQUMsS0FBSyxFQUFFLElBQUksRUFBQyxDQUFDO2FBQ3JCLFNBQVMsRUFBRSxDQUFBO1FBRWQsT0FBTyxJQUFJLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFBO0lBQ2hDLENBQUM7SUFFRCxzQkFBc0I7SUFDdEIsUUFBUTtRQUNOLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFDLFFBQVEsRUFBRSxJQUFJLEVBQUMsQ0FBQyxDQUFBO0lBQ3RDLENBQUM7SUFFRDs7O09BR0c7SUFDSCxLQUFLLENBQUMsSUFBSSxDQUFDLFFBQVE7UUFDakIsTUFBTSxLQUFLLEdBQUcsTUFBTSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUE7UUFFbEMsS0FBSyxNQUFNLEtBQUssSUFBSSxLQUFLLEVBQUUsQ0FBQztZQUMxQixRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFBO1FBQ3RCLENBQUM7SUFDSCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsTUFBTSxDQUFDLEdBQUcsSUFBSTtRQUNaLEtBQUssTUFBTSxHQUFHLElBQUksSUFBSSxFQUFFLENBQUM7WUFDdkIsSUFBSSxHQUFHLElBQUksTUFBTSxFQUFFLENBQUM7Z0JBQ2xCLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQTtZQUM1QixDQUFDO2lCQUFNLENBQUM7Z0JBQ04sTUFBTSxJQUFJLEtBQUssQ0FBQyxrQkFBa0IsR0FBRyxFQUFFLENBQUMsQ0FBQTtZQUMxQyxDQUFDO1FBQ0gsQ0FBQztRQUVELE9BQU8sSUFBSSxDQUFBO0lBQ2IsQ0FBQztJQUVELHNDQUFzQztJQUN0QyxLQUFLLENBQUMsS0FBSztRQUNULE1BQU0sTUFBTSxHQUFHLE1BQU0sSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFBO1FBQ25DLE9BQU8sTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFBO0lBQ2xCLENBQUM7SUFFRDs7O09BR0c7SUFDSCxPQUFPLENBQUMsR0FBRyx1QkFBdUI7UUFDaEMsTUFBTSwyQ0FBMkMsR0FBRywrQ0FBK0MsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFBO1FBRXhHLEtBQUssTUFBTSxjQUFjLElBQUksdUJBQXVCLEVBQUUsQ0FBQztZQUNyRCxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDLEVBQUUsQ0FBQztnQkFDbEMsMkNBQTJDLENBQUMsSUFBSSxDQUFDLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxFQUFFLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLENBQUE7WUFDeEcsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLDJDQUEyQyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQTtZQUNoRixDQUFDO1FBQ0gsQ0FBQztRQUVELE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxJQUFJLEVBQUUsQ0FBQTtRQUNuRCxNQUFNLFVBQVUsR0FBRyxjQUFjLENBQUMsTUFBTSxDQUFDLDJDQUEyQyxDQUFDLENBQUE7UUFFckYsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDO1lBQ2pCLE9BQU8sRUFBRSxVQUFVO1NBQ3BCLENBQUMsQ0FBQTtJQUNKLENBQUM7SUFFRCxrRUFBa0U7SUFDbEUsS0FBSyxDQUFDLFlBQVk7UUFDaEIsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDO1lBQ3JCLE1BQU0sTUFBTSxHQUFHLE1BQU0sSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFBO1lBRW5DLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUE7UUFDbEIsQ0FBQztRQUVELE9BQU8sSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFBO0lBQ3RCLENBQUM7SUFFRCx5QkFBeUI7SUFDekIsUUFBUTtRQUNOLE1BQU0sRUFBQyxLQUFLLEVBQUUsY0FBYyxFQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQTtRQUV6QyxJQUFJLGNBQWMsSUFBSSxLQUFLLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztZQUMvQyxPQUFPLElBQUksQ0FBQTtRQUNiLENBQUM7YUFBTSxJQUFJLGNBQWMsSUFBSSxLQUFLLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDakQsT0FBTyxJQUFJLENBQUE7UUFDYixDQUFDO1FBRUQsT0FBTyxLQUFLLENBQUE7SUFDZCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsS0FBSyxDQUFDLE1BQU07UUFDVixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBQyxLQUFLLEVBQUUsTUFBTSxFQUFDLENBQUMsQ0FBQTtJQUNyQyxDQUFDO0lBRUQsb0NBQW9DO0lBQ3BDLFNBQVM7UUFDUCxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFLENBQUM7WUFDdEUsTUFBTSxJQUFJLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyx3QkFBd0IsQ0FBQyxDQUFBO1FBQ3RFLENBQUM7UUFFRCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUE7SUFDckUsQ0FBQztJQUVELGtEQUFrRDtJQUNsRCxNQUFNO1FBQ0osTUFBTSxFQUFDLEtBQUssRUFBRSxjQUFjLEVBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFBO1FBRXpDLElBQUksY0FBYyxJQUFJLEtBQUssQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUMxQyxPQUFPLEtBQUssQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLENBQUE7UUFDNUMsQ0FBQzthQUFNLElBQUksY0FBYyxJQUFJLEtBQUssQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1lBQ3RELE9BQU8sS0FBSyxDQUFDLGtCQUFrQixDQUFDLGNBQWMsQ0FBQyxDQUFBO1FBQ2pELENBQUM7YUFBTSxJQUFJLEtBQUssQ0FBQyxXQUFXLEVBQUUsRUFBRSxDQUFDO1lBQy9CLE1BQU0sd0JBQXdCLEdBQUcsVUFBVSxDQUFDLFVBQVUsQ0FBQyxjQUFjLENBQUMsQ0FBQTtZQUV0RSwrREFBK0Q7WUFDL0QsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQTtZQUVaLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLEVBQUUsd0JBQXdCLENBQUMsQ0FBQTtRQUM1RCxDQUFDO2FBQU0sQ0FBQztZQUNOLE1BQU0sbUJBQW1CLEdBQUcsU0FBUyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsQ0FBQTtZQUVySCxNQUFNLElBQUksS0FBSyxDQUFDLEdBQUcsY0FBYyw4QkFBOEIsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDLElBQUksaUJBQWlCLG1CQUFtQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUE7UUFDOUksQ0FBQztJQUNILENBQUM7SUFFRCxvQ0FBb0M7SUFDcEMsV0FBVztRQUNULE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQTtRQUU1QixJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztZQUMxQixPQUFPLE1BQU0sQ0FBQTtRQUNmLENBQUM7YUFBTSxDQUFDO1lBQ04sTUFBTSxJQUFJLEtBQUssQ0FBQywwQkFBMEIsQ0FBQyxDQUFBO1FBQzdDLENBQUM7SUFDSCxDQUFDO0lBRUQsNERBQTREO0lBQzVEOzs7T0FHRztJQUNILEdBQUcsQ0FBQyxhQUFhO1FBQ2YsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsYUFBYSxDQUFBO0lBQ3pFLENBQUM7SUFFRCxrREFBa0Q7SUFDbEQ7OztPQUdHO0lBQ0gsSUFBSSxDQUFDLFFBQVE7UUFDWCxNQUFNLEVBQUMsS0FBSyxFQUFFLGNBQWMsRUFBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUE7UUFFekMsSUFBSSxDQUFDLENBQUMsY0FBYyxJQUFJLEtBQUssQ0FBQyxhQUFhLENBQUMsRUFBRSxDQUFDO1lBQzdDLEtBQUssQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLEdBQUcsRUFBRSxDQUFBO1FBQzFDLENBQUM7UUFFRCxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUMsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztZQUM1RCxLQUFLLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQTtRQUNwRCxDQUFDO0lBQ0gsQ0FBQztJQUVELGtCQUFrQjtJQUNsQjs7O09BR0c7SUFDSCxJQUFJLENBQUMsUUFBUSxJQUFJLE9BQU8sSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQSxDQUFDLENBQUM7SUFFM0Q7OztPQUdHO0lBQ0gsT0FBTyxDQUFDLFFBQVEsSUFBSSxPQUFPLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUEsQ0FBQyxDQUFDO0lBRWpFOzs7T0FHRztJQUNILEdBQUcsQ0FBQyxRQUFRLElBQUksT0FBTyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFBLENBQUMsQ0FBQztJQUV6RDs7O09BR0c7SUFDSCxPQUFPLENBQUMsWUFBWTtRQUNsQixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBQyxPQUFPLEVBQUUsWUFBWSxFQUFDLENBQUMsQ0FBQTtJQUM3QyxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsSUFBSSxDQUFDLElBQUk7UUFDUCxNQUFNLFNBQVMsR0FBRyxJQUFJLElBQUksQ0FBQyxDQUFBO1FBRTNCLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFDLElBQUksRUFBRSxTQUFTLEVBQUMsQ0FBQyxDQUFBO0lBQ3ZDLENBQUM7SUFFRDs7O09BR0c7SUFDSCxPQUFPLENBQUMsT0FBTztRQUNiLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFDLE9BQU8sRUFBQyxDQUFDLENBQUE7SUFDL0IsQ0FBQztJQUVELHlCQUF5QjtJQUN6QixVQUFVO1FBQ1IsTUFBTSxFQUFDLFNBQVMsRUFBQyxHQUFHLElBQUksQ0FBQTtRQUV4QixJQUNFLFNBQVMsQ0FBQyxZQUFZO1lBQ3RCLFNBQVMsQ0FBQyxLQUFLO1lBQ2YsU0FBUyxDQUFDLEtBQUs7WUFDZixTQUFTLENBQUMsSUFBSTtZQUNkLFNBQVMsQ0FBQyxNQUFNO1lBQ2hCLFNBQVMsQ0FBQyxHQUFHO1lBQ2IsU0FBUyxDQUFDLE9BQU87WUFDakIsU0FBUyxDQUFDLE1BQU0sRUFDaEIsQ0FBQztZQUNELE9BQU8sSUFBSSxDQUFBO1FBQ2IsQ0FBQztRQUVELE9BQU8sS0FBSyxDQUFBO0lBQ2QsQ0FBQztJQUVELHFDQUFxQztJQUNyQyxNQUFNO1FBQ0osSUFBSSxNQUFNLEdBQUcsRUFBRSxDQUFBO1FBRWYsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU07WUFBRSxNQUFNLEdBQUcsV0FBVyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFBO1FBQzlFLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTO1lBQUUsTUFBTSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQTtRQUN6RSxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsWUFBWTtZQUFFLE1BQU0sQ0FBQyxhQUFhLEdBQUcsVUFBVSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQyxDQUFBO1FBQzFHLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLO1lBQUUsTUFBTSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQTtRQUM3RCxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUTtZQUFFLE1BQU0sQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUE7UUFDdEUsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU87WUFBRSxNQUFNLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFBO1FBQ3BFLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPO1lBQUUsTUFBTSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQTtRQUM3RCxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSztZQUFFLE1BQU0sQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUE7UUFDN0QsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU87WUFBRSxNQUFNLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFBO1FBQ25FLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJO1lBQUUsTUFBTSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQTtRQUMxRCxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRztZQUFFLE1BQU0sQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUE7UUFDdkQsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU07WUFBRSxNQUFNLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFBO1FBQ2hFLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNO1lBQUUsTUFBTSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQTtRQUNoRSxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYTtZQUFFLE1BQU0sQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUE7UUFFdEYsT0FBTyxNQUFNLENBQUE7SUFDZixDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsR0FBRyxDQUFDLEdBQUc7UUFDTCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBQyxHQUFHLEVBQUMsQ0FBQyxDQUFBO0lBQzNCLENBQUM7SUFFRDs7O09BR0c7SUFDSCxNQUFNLENBQUMsTUFBTTtRQUNYLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFDLE1BQU0sRUFBQyxDQUFDLENBQUE7SUFDOUIsQ0FBQztJQUVEOzs7T0FHRztJQUNILE9BQU8sQ0FBQyxNQUFNO1FBQ1osSUFBSSxNQUFNO1lBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUMsQ0FBQyxDQUFBO1FBQzFDLE9BQU8sSUFBSSxDQUFBO0lBQ2IsQ0FBQztJQUVELGlDQUFpQztJQUNqQyxLQUFLLENBQUMsTUFBTTtRQUNWLE1BQU0sUUFBUSxHQUFHLE1BQU0sSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFBO1FBQ3ZDLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsWUFBWSxDQUFDLENBQUE7UUFFM0MsSUFBSSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxDQUFBO1FBRTlCLE1BQU0sTUFBTSxHQUFHLElBQUksTUFBTSxDQUFDLGtCQUFrQixDQUFDLENBQUMsRUFBQyxVQUFVLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUMsQ0FBQyxDQUFDLENBQUE7UUFFcEYsT0FBTyxNQUFNLENBQUE7SUFDZixDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsTUFBTSxDQUFDLE1BQU07UUFDWCxJQUFJLE1BQU07WUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUMsTUFBTSxFQUFFLE1BQU0sRUFBQyxDQUFDLENBQUE7UUFDekMsT0FBTyxJQUFJLENBQUE7SUFDYixDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsU0FBUyxDQUFDLFNBQVM7UUFDakIsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUMsU0FBUyxFQUFDLENBQUMsQ0FBQTtJQUNqQyxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsTUFBTSxDQUFDLGNBQWM7UUFDbkIsTUFBTSxTQUFTLEdBQUcsdUNBQXVDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQTtRQUU5RCxLQUFLLE1BQU0saUJBQWlCLElBQUksY0FBYyxFQUFFLENBQUM7WUFDL0MsTUFBTSxZQUFZLEdBQUcsVUFBVSxDQUFDLFVBQVUsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFBO1lBQzdELE1BQU0sU0FBUyxHQUFHLEVBQUUsQ0FBQTtZQUNwQixNQUFNLGNBQWMsR0FBRyxjQUFjLENBQUMsaUJBQWlCLENBQUMsQ0FBQTtZQUV4RCxLQUFLLE1BQU0scUJBQXFCLElBQUksY0FBYyxFQUFFLENBQUM7Z0JBQ25ELE1BQU0sZ0JBQWdCLEdBQUcsVUFBVSxDQUFDLFVBQVUsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFBO2dCQUNyRSxTQUFTLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUE7WUFDbEMsQ0FBQztZQUVELFNBQVMsQ0FBQyxZQUFZLENBQUMsR0FBRyxTQUFTLENBQUE7UUFDckMsQ0FBQztRQUVELE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFDLE1BQU0sRUFBRSxTQUFTLEVBQUMsQ0FBQyxDQUFBO0lBQ3pDLENBQUM7SUFFRDs7O09BR0c7SUFDSCxhQUFhLENBQUMsY0FBYztRQUMxQixNQUFNLFNBQVMsR0FBRyx1Q0FBdUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFBO1FBRTlELEtBQUssTUFBTSxpQkFBaUIsSUFBSSxjQUFjLEVBQUUsQ0FBQztZQUMvQyxNQUFNLFlBQVksR0FBRyxVQUFVLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFBO1lBQ3BGLE1BQU0sU0FBUyxHQUFHLEVBQUUsQ0FBQTtZQUNwQixNQUFNLGNBQWMsR0FBRyxjQUFjLENBQUMsaUJBQWlCLENBQUMsQ0FBQTtZQUV4RCxLQUFLLE1BQU0scUJBQXFCLElBQUksY0FBYyxFQUFFLENBQUM7Z0JBQ25ELE1BQU0sZ0JBQWdCLEdBQUcsVUFBVSxDQUFDLFVBQVUsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFBO2dCQUNyRSxTQUFTLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUE7WUFDbEMsQ0FBQztZQUVELFNBQVMsQ0FBQyxZQUFZLENBQUMsR0FBRyxTQUFTLENBQUE7UUFDckMsQ0FBQztRQUVELE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFDLGFBQWEsRUFBRSxTQUFTLEVBQUMsQ0FBQyxDQUFBO0lBQ2hELENBQUM7SUFFRDs7O09BR0c7SUFDSCxJQUFJLENBQUMsTUFBTTtRQUNULE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFDLE9BQU8sRUFBRSxFQUFDLENBQUMsRUFBRSxNQUFNLEVBQUMsRUFBQyxDQUFDLENBQUE7SUFDNUMsQ0FBQztJQUVELDZDQUE2QztJQUM3QyxLQUFLLENBQUMsT0FBTztRQUNYLE1BQU0sUUFBUSxHQUFHLE1BQU0sSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFBO1FBQ3ZDLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsWUFBWSxDQUFDLENBQUE7UUFFM0MsSUFBSSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxDQUFBO1FBRTlCLE9BQU8sTUFBTSxDQUFBO0lBQ2YsQ0FBQztJQUVELG9CQUFvQjtJQUNwQixVQUFVO1FBQ1IsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDMUIsTUFBTSxJQUFJLEtBQUssQ0FBQyw4QkFBOEIsQ0FBQyxDQUFBO1FBQ2pELENBQUM7UUFFRCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFBO0lBQzdCLENBQUM7SUFFRCxvQ0FBb0M7SUFDcEMsS0FBSztRQUNILE1BQU0sZUFBZSxHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUE7UUFFakQsT0FBTyxJQUFJLGtCQUFrQixDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsZUFBZSxDQUFDLENBQUE7SUFDM0QsQ0FBQztJQUVELHNHQUFzRztJQUN0Rzs7O09BR0c7SUFDSCxpQkFBaUIsQ0FBQyxNQUFNO1FBQ3RCLEtBQUssTUFBTSxLQUFLLElBQUksTUFBTSxFQUFFLENBQUM7WUFDM0IsS0FBSyxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUE7UUFDekIsQ0FBQztJQUNILENBQUM7SUFFRDs7O09BR0c7SUFDSCxNQUFNLENBQUMsWUFBWTtRQUNqQixXQUFXLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxZQUFZLENBQUMsQ0FBQTtRQUV6QyxPQUFPLElBQUksQ0FBQTtJQUNiLENBQUM7SUFFRCwyREFBMkQ7SUFDM0QsU0FBUztRQUNQLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSTtZQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUE7UUFDM0MsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVTtZQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsdUJBQXVCLENBQUMsQ0FBQTtRQUNuRSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsY0FBYztZQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsbUNBQW1DLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLElBQUksS0FBSyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQTtRQUUzSixNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxjQUFjLEVBQUUsQ0FBQTtRQUU1RCxPQUFPLFlBQVksQ0FBQyxVQUFVLENBQzVCO1lBQ0UsSUFBSSxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDbkIsT0FBTyxFQUFFLEdBQUcsY0FBYyxDQUFDLGNBQWMsUUFBUTtZQUNqRCxjQUFjLEVBQUUsY0FBYyxDQUFDLGNBQWM7WUFDN0MsSUFBSSxFQUFFLE9BQU87U0FDZCxFQUNELEVBQUUsQ0FDSCxDQUFBO0lBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBjbG9uZURlZXAgZnJvbSBcImNsb25lLWRlZXBcIlxuaW1wb3J0IENvbW1hbmRzUG9vbCBmcm9tIFwiLi9jb21tYW5kcy1wb29sLmpzXCIgLy8gZXNsaW50LWRpc2FibGUtbGluZSBzb3J0LWltcG9ydHNcbmltcG9ydCB7ZGlnZ30gZnJvbSBcImRpZ2dlcml6ZVwiXG5pbXBvcnQgKiBhcyBpbmZsZWN0aW9uIGZyb20gXCJpbmZsZWN0aW9uXCIgLy8gZXNsaW50LWRpc2FibGUtbGluZSBzb3J0LWltcG9ydHNcbmltcG9ydCB7aW5jb3Jwb3JhdGV9IGZyb20gXCJpbmNvcnBvcmF0b3JcIlxuaW1wb3J0IFJlc3VsdCBmcm9tIFwiLi9yZXN1bHQuanNcIiAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIHNvcnQtaW1wb3J0c1xuaW1wb3J0IHVuaXF1bml6ZSBmcm9tIFwidW5pcXVuaXplXCJcblxuLyoqXG4gKiBAdGVtcGxhdGUge3R5cGVvZiBpbXBvcnQoXCIuL2Jhc2UtbW9kZWwuanNcIikuZGVmYXVsdH0gTUNcbiAqIEB0eXBlZGVmIHtJbnN0YW5jZVR5cGU8TUM+fSBNb2RlbE9mXG4gKi9cblxuLyoqXG4gKiBAdGVtcGxhdGUge3R5cGVvZiBpbXBvcnQoXCIuL2Jhc2UtbW9kZWwuanNcIikuZGVmYXVsdH0gTUNcbiAqIEB0eXBlZGVmIHtvYmplY3R9IENvbGxlY3Rpb25BcmdzVHlwZVxuICogQHByb3BlcnR5IHtpbXBvcnQoXCIuL2Jhc2UtbW9kZWwuanNcIikuZGVmYXVsdH0gW21vZGVsXVxuICogQHByb3BlcnR5IHtNQ30gbW9kZWxDbGFzc1xuICogQHByb3BlcnR5IHtzdHJpbmd9IFtyZWZsZWN0aW9uTmFtZV1cbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtvYmplY3R9IFF1ZXJ5QXJnc1R5cGVcbiAqIEBwcm9wZXJ0eSB7UmVjb3JkPHN0cmluZywgc3RyaW5nW10+fSBbYWJpbGl0aWVzXVxuICogQHByb3BlcnR5IHtzdHJpbmd9IFthY2Nlc3NpYmxlQnldXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IFtjb3VudF1cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW2Rpc3RpbmN0XVxuICogQHByb3BlcnR5IHtBcnJheTxzdHJpbmcgfCBbc3RyaW5nLCBzdHJpbmddPn0gW2dyb3VwQnldXG4gKiBAcHJvcGVydHkge251bWJlcn0gW2xpbWl0XVxuICogQHByb3BlcnR5IHtudW1iZXJ9IFtwYWdlXVxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtwYWdlS2V5XVxuICogQHByb3BlcnR5IHtSZWNvcmQ8c3RyaW5nLCBhbnk+fSBbcGFyYW1zXVxuICogQHByb3BlcnR5IHtudW1iZXJ9IFtwZXJdXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW3BlcktleV1cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nW119IFtwcmVsb2FkXVxuICogQHByb3BlcnR5IHtSZWNvcmQ8c3RyaW5nLCBhbnk+fSBbcmFuc2Fja11cbiAqIEBwcm9wZXJ0eSB7UmVjb3JkPHN0cmluZywgYW55Pn0gW3NlYXJjaF1cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbc2VhcmNoS2V5XVxuICogQHByb3BlcnR5IHtSZWNvcmQ8c3RyaW5nLCBzdHJpbmdbXT59IFtzZWxlY3RdXG4gKiBAcHJvcGVydHkge1JlY29yZDxzdHJpbmcsIHN0cmluZ1tdPn0gW3NlbGVjdENvbHVtbnNdXG4gKi9cblxuLyoqIEB0ZW1wbGF0ZSB7dHlwZW9mIGltcG9ydChcIi4vYmFzZS1tb2RlbC5qc1wiKS5kZWZhdWx0fSBNQyAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQXBpTWFrZXJDb2xsZWN0aW9uIHtcbiAgc3RhdGljIGFwaU1ha2VyVHlwZSA9IFwiQ29sbGVjdGlvblwiXG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7Q29sbGVjdGlvbkFyZ3NUeXBlPE1DPn0gYXJnc1xuICAgKiBAcGFyYW0ge1F1ZXJ5QXJnc1R5cGV9IHF1ZXJ5QXJnc1xuICAgKi9cbiAgY29uc3RydWN0b3IoYXJncywgcXVlcnlBcmdzID0ge30pIHtcbiAgICBpZiAoIWFyZ3MubW9kZWxDbGFzcykgdGhyb3cgbmV3IEVycm9yKGBObyBtb2RlbENsYXNzIGdpdmVuIGluICR7T2JqZWN0LmtleXMoYXJncykuam9pbihcIiwgXCIpfWApXG5cbiAgICB0aGlzLnF1ZXJ5QXJncyA9IHF1ZXJ5QXJnc1xuICAgIHRoaXMuYXJncyA9IGFyZ3NcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge1JlY29yZDxzdHJpbmcsIHN0cmluZ1tdPn0gb3JpZ2luYWxBYmlsaXRpZXNcbiAgICogQHJldHVybnMge3RoaXN9XG4gICAqL1xuICBhYmlsaXRpZXMob3JpZ2luYWxBYmlsaXRpZXMpIHtcbiAgICBjb25zdCBuZXdBYmlsaXRpZXMgPSAvKiogQHR5cGUge1JlY29yZDxzdHJpbmcsIHN0cmluZ1tdPn0gKi8gKHt9KVxuXG4gICAgZm9yIChjb25zdCBvcmlnaW5hbEFiaWxpdHlOYW1lIGluIG9yaWdpbmFsQWJpbGl0aWVzKSB7XG4gICAgICBjb25zdCBuZXdNb2RlbE5hbWUgPSBpbmZsZWN0aW9uLnVuZGVyc2NvcmUob3JpZ2luYWxBYmlsaXR5TmFtZSlcbiAgICAgIGNvbnN0IG5ld1ZhbHVlcyA9IFtdXG4gICAgICBjb25zdCBvcmlnaW5hbFZhbHVlcyA9IG9yaWdpbmFsQWJpbGl0aWVzW29yaWdpbmFsQWJpbGl0eU5hbWVdXG5cbiAgICAgIGZvciAoY29uc3Qgb3JpZ2luYWxBYmlsaXR5TmFtZSBvZiBvcmlnaW5hbFZhbHVlcykge1xuICAgICAgICBjb25zdCBuZXdBYmlsaXR5TmFtZSA9IGluZmxlY3Rpb24udW5kZXJzY29yZShvcmlnaW5hbEFiaWxpdHlOYW1lKVxuICAgICAgICBuZXdWYWx1ZXMucHVzaChuZXdBYmlsaXR5TmFtZSlcbiAgICAgIH1cblxuICAgICAgbmV3QWJpbGl0aWVzW25ld01vZGVsTmFtZV0gPSBuZXdWYWx1ZXNcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fbWVyZ2Uoe2FiaWxpdGllczogbmV3QWJpbGl0aWVzfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gYWJpbGl0eU5hbWVcbiAgICogQHJldHVybnMge3RoaXN9XG4gICAqL1xuICBhY2Nlc3NpYmxlQnkoYWJpbGl0eU5hbWUpIHtcbiAgICByZXR1cm4gdGhpcy5fbWVyZ2Uoe2FjY2Vzc2libGVCeTogaW5mbGVjdGlvbi51bmRlcnNjb3JlKGFiaWxpdHlOYW1lKX0pXG4gIH1cblxuICAvKiogQHJldHVybnMge1Byb21pc2U8bnVtYmVyPn0gKi9cbiAgYXN5bmMgY291bnQoKSB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmNsb25lKClcbiAgICAgIC5fbWVyZ2Uoe2NvdW50OiB0cnVlfSlcbiAgICAgIC5fcmVzcG9uc2UoKVxuXG4gICAgcmV0dXJuIGRpZ2cocmVzcG9uc2UsIFwiY291bnRcIilcbiAgfVxuXG4gIC8qKiBAcmV0dXJucyB7dGhpc30gKi9cbiAgZGlzdGluY3QoKSB7XG4gICAgcmV0dXJuIHRoaXMuX21lcmdlKHtkaXN0aW5jdDogdHJ1ZX0pXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtmdW5jdGlvbihpbXBvcnQoXCIuL2Jhc2UtbW9kZWwuanNcIikuZGVmYXVsdCkgOiB2b2lkfSBjYWxsYmFja1xuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn1cbiAgICovXG4gIGFzeW5jIGVhY2goY2FsbGJhY2spIHtcbiAgICBjb25zdCBhcnJheSA9IGF3YWl0IHRoaXMudG9BcnJheSgpXG5cbiAgICBmb3IgKGNvbnN0IG1vZGVsIGluIGFycmF5KSB7XG4gICAgICBjYWxsYmFjay5jYWxsKG1vZGVsKVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0gey4uLnN0cmluZ30ga2V5c1xuICAgKiBAcmV0dXJucyB7dGhpc31cbiAgICovXG4gIGV4Y2VwdCguLi5rZXlzKSB7XG4gICAgZm9yIChjb25zdCBrZXkgb2Yga2V5cykge1xuICAgICAgaWYgKGtleSA9PSBcInBhZ2VcIikge1xuICAgICAgICBkZWxldGUgdGhpcy5xdWVyeUFyZ3Nba2V5XVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmhhbmRsZWQga2V5OiAke2tleX1gKVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0aGlzXG4gIH1cblxuICAvKiogQHJldHVybnMge1Byb21pc2U8TW9kZWxPZjxNQz4+fSAqL1xuICBhc3luYyBmaXJzdCgpIHtcbiAgICBjb25zdCBtb2RlbHMgPSBhd2FpdCB0aGlzLnRvQXJyYXkoKVxuICAgIHJldHVybiBtb2RlbHNbMF1cbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0gey4uLihzdHJpbmcgfCBbc3RyaW5nLCBzdHJpbmddKX0gYXJyYXlPZlRhYmxlc0FuZENvbHVtbnNcbiAgICogQHJldHVybnMge3RoaXN9XG4gICAqL1xuICBncm91cEJ5KC4uLmFycmF5T2ZUYWJsZXNBbmRDb2x1bW5zKSB7XG4gICAgY29uc3QgYXJyYXlPZlRhYmxlc0FuZENvbHVtbnNXaXRoTG93ZXJjYXNlQ29sdW1ucyA9IC8qKiBAdHlwZSB7QXJyYXk8c3RyaW5nIHwgW3N0cmluZywgc3RyaW5nXT59ICovIChbXSlcblxuICAgIGZvciAoY29uc3QgdGFibGVBbmRDb2x1bW4gb2YgYXJyYXlPZlRhYmxlc0FuZENvbHVtbnMpIHtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHRhYmxlQW5kQ29sdW1uKSkge1xuICAgICAgICBhcnJheU9mVGFibGVzQW5kQ29sdW1uc1dpdGhMb3dlcmNhc2VDb2x1bW5zLnB1c2goW3RhYmxlQW5kQ29sdW1uWzBdLCB0YWJsZUFuZENvbHVtblsxXS50b0xvd2VyQ2FzZSgpXSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGFycmF5T2ZUYWJsZXNBbmRDb2x1bW5zV2l0aExvd2VyY2FzZUNvbHVtbnMucHVzaCh0YWJsZUFuZENvbHVtbi50b0xvd2VyQ2FzZSgpKVxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGN1cnJlbnRHcm91cEJ5ID0gdGhpcy5xdWVyeUFyZ3MuZ3JvdXBCeSB8fCBbXVxuICAgIGNvbnN0IG5ld0dyb3VwQnkgPSBjdXJyZW50R3JvdXBCeS5jb25jYXQoYXJyYXlPZlRhYmxlc0FuZENvbHVtbnNXaXRoTG93ZXJjYXNlQ29sdW1ucylcblxuICAgIHJldHVybiB0aGlzLl9tZXJnZSh7XG4gICAgICBncm91cEJ5OiBuZXdHcm91cEJ5XG4gICAgfSlcbiAgfVxuXG4gIC8qKiBAcmV0dXJucyB7UHJvbWlzZTxNb2RlbE9mPE1DPiB8IEFycmF5PE1vZGVsT2Y8TUM+PiB8IG51bGw+fSAqL1xuICBhc3luYyBlbnN1cmVMb2FkZWQoKSB7XG4gICAgaWYgKCF0aGlzLmlzTG9hZGVkKCkpIHtcbiAgICAgIGNvbnN0IG1vZGVscyA9IGF3YWl0IHRoaXMudG9BcnJheSgpXG5cbiAgICAgIHRoaXMuc2V0KG1vZGVscylcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5sb2FkZWQoKVxuICB9XG5cbiAgLyoqIEByZXR1cm5zIHtib29sZWFufSAqL1xuICBpc0xvYWRlZCgpIHtcbiAgICBjb25zdCB7bW9kZWwsIHJlZmxlY3Rpb25OYW1lfSA9IHRoaXMuYXJnc1xuXG4gICAgaWYgKHJlZmxlY3Rpb25OYW1lIGluIG1vZGVsLnJlbGF0aW9uc2hpcHNDYWNoZSkge1xuICAgICAgcmV0dXJuIHRydWVcbiAgICB9IGVsc2UgaWYgKHJlZmxlY3Rpb25OYW1lIGluIG1vZGVsLnJlbGF0aW9uc2hpcHMpIHtcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtudW1iZXJ9IGFtb3VudFxuICAgKiBAcmV0dXJucyB7dGhpc31cbiAgICovXG4gIGxpbWl0KGFtb3VudCkge1xuICAgIHJldHVybiB0aGlzLl9tZXJnZSh7bGltaXQ6IGFtb3VudH0pXG4gIH1cblxuICAvKiogQHJldHVybnMge0FycmF5PE1vZGVsT2Y8TUM+Pn0gKi9cbiAgcHJlbG9hZGVkKCkge1xuICAgIGlmICghKHRoaXMuYXJncy5yZWZsZWN0aW9uTmFtZSBpbiB0aGlzLmFyZ3MubW9kZWwucmVsYXRpb25zaGlwc0NhY2hlKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGAke3RoaXMuYXJncy5yZWZsZWN0aW9uTmFtZX0gaGFzbnQgYmVlbiBsb2FkZWQgeWV0YClcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5hcmdzLm1vZGVsLnJlbGF0aW9uc2hpcHNDYWNoZVt0aGlzLmFyZ3MucmVmbGVjdGlvbk5hbWVdXG4gIH1cblxuICAvKiogQHJldHVybnMge01vZGVsT2Y8TUM+IHwgQXJyYXk8TW9kZWxPZjxNQz4+fSAqL1xuICBsb2FkZWQoKSB7XG4gICAgY29uc3Qge21vZGVsLCByZWZsZWN0aW9uTmFtZX0gPSB0aGlzLmFyZ3NcblxuICAgIGlmIChyZWZsZWN0aW9uTmFtZSBpbiBtb2RlbC5yZWxhdGlvbnNoaXBzKSB7XG4gICAgICByZXR1cm4gbW9kZWwucmVsYXRpb25zaGlwc1tyZWZsZWN0aW9uTmFtZV1cbiAgICB9IGVsc2UgaWYgKHJlZmxlY3Rpb25OYW1lIGluIG1vZGVsLnJlbGF0aW9uc2hpcHNDYWNoZSkge1xuICAgICAgcmV0dXJuIG1vZGVsLnJlbGF0aW9uc2hpcHNDYWNoZVtyZWZsZWN0aW9uTmFtZV1cbiAgICB9IGVsc2UgaWYgKG1vZGVsLmlzTmV3UmVjb3JkKCkpIHtcbiAgICAgIGNvbnN0IHJlZmxlY3Rpb25OYW1lVW5kZXJzY29yZSA9IGluZmxlY3Rpb24udW5kZXJzY29yZShyZWZsZWN0aW9uTmFtZSlcblxuICAgICAgLy8gSW5pdGlhbGl6ZSBhcyBlbXB0eSBhbmQgdHJ5IGFnYWluIHRvIHJldHVybiB0aGUgZW1wdHkgcmVzdWx0XG4gICAgICB0aGlzLnNldChbXSlcblxuICAgICAgcmV0dXJuIGRpZ2cobW9kZWwucmVsYXRpb25zaGlwcywgcmVmbGVjdGlvbk5hbWVVbmRlcnNjb3JlKVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCByZWxhdGlvbnNoaXBzTG9hZGVkID0gdW5pcXVuaXplKE9iamVjdC5rZXlzKG1vZGVsLnJlbGF0aW9uc2hpcHMpLmNvbmNhdChPYmplY3Qua2V5cyhtb2RlbC5yZWxhdGlvbnNoaXBzQ2FjaGUpKSlcblxuICAgICAgdGhyb3cgbmV3IEVycm9yKGAke3JlZmxlY3Rpb25OYW1lfSBoYXNuJ3QgYmVlbiBsb2FkZWQgeWV0IG9uICR7bW9kZWwubW9kZWxDbGFzc0RhdGEoKS5uYW1lfS4gTG9hZGVkIHdhczogJHtyZWxhdGlvbnNoaXBzTG9hZGVkLmpvaW4oXCIsIFwiKX1gKVxuICAgIH1cbiAgfVxuXG4gIC8qKiBAcmV0dXJucyB7QXJyYXk8TW9kZWxPZjxNQz4+fSAqL1xuICBsb2FkZWRBcnJheSgpIHtcbiAgICBjb25zdCBsb2FkZWQgPSB0aGlzLmxvYWRlZCgpXG5cbiAgICBpZiAoQXJyYXkuaXNBcnJheShsb2FkZWQpKSB7XG4gICAgICByZXR1cm4gbG9hZGVkXG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIidsb2FkZWQnIHdhc24ndCBhbiBhcnJheVwiKVxuICAgIH1cbiAgfVxuXG4gIC8vIFJlcGxhY2VzIHRoZSByZWxhdGlvbnNoaXBzIHdpdGggdGhlIGdpdmVuIG5ldyBjb2xsZWN0aW9uLlxuICAvKipcbiAgICogQHBhcmFtIHtBcnJheTxNb2RlbE9mPE1DPj59IG5ld0NvbGxlY3Rpb25cbiAgICogQHJldHVybnMge3ZvaWR9XG4gICAqL1xuICBzZXQobmV3Q29sbGVjdGlvbikge1xuICAgIHRoaXMuYXJncy5tb2RlbC5yZWxhdGlvbnNoaXBzW3RoaXMuYXJncy5yZWZsZWN0aW9uTmFtZV0gPSBuZXdDb2xsZWN0aW9uXG4gIH1cblxuICAvLyBQdXNoZXMgYW5vdGhlciBtb2RlbCBvbnRvIHRoZSBnaXZlbiBjb2xsZWN0aW9uLlxuICAvKipcbiAgICogQHBhcmFtIHtNb2RlbE9mPE1DPn0gbmV3TW9kZWxcbiAgICogQHJldHVybnMge3ZvaWR9XG4gICAqL1xuICBwdXNoKG5ld01vZGVsKSB7XG4gICAgY29uc3Qge21vZGVsLCByZWZsZWN0aW9uTmFtZX0gPSB0aGlzLmFyZ3NcblxuICAgIGlmICghKHJlZmxlY3Rpb25OYW1lIGluIG1vZGVsLnJlbGF0aW9uc2hpcHMpKSB7XG4gICAgICBtb2RlbC5yZWxhdGlvbnNoaXBzW3JlZmxlY3Rpb25OYW1lXSA9IFtdXG4gICAgfVxuXG4gICAgaWYgKCFtb2RlbC5yZWxhdGlvbnNoaXBzW3JlZmxlY3Rpb25OYW1lXS5pbmNsdWRlcyhuZXdNb2RlbCkpIHtcbiAgICAgIG1vZGVsLnJlbGF0aW9uc2hpcHNbcmVmbGVjdGlvbk5hbWVdLnB1c2gobmV3TW9kZWwpXG4gICAgfVxuICB9XG5cbiAgLy8gQXJyYXkgc2hvcnRjdXRzXG4gIC8qKlxuICAgKiBAcGFyYW0ge2Z1bmN0aW9uKGltcG9ydChcIi4vYmFzZS1tb2RlbC5qc1wiKS5kZWZhdWx0KTogYm9vbGVhbn0gY2FsbGJhY2tcbiAgICogQHJldHVybnMge2ltcG9ydChcIi4vYmFzZS1tb2RlbC5qc1wiKS5kZWZhdWx0fVxuICAgKi9cbiAgZmluZChjYWxsYmFjaykgeyByZXR1cm4gdGhpcy5sb2FkZWRBcnJheSgpLmZpbmQoY2FsbGJhY2spIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtmdW5jdGlvbihpbXBvcnQoXCIuL2Jhc2UtbW9kZWwuanNcIikuZGVmYXVsdCk6IHZvaWR9IGNhbGxiYWNrXG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKi9cbiAgZm9yRWFjaChjYWxsYmFjaykgeyByZXR1cm4gdGhpcy5sb2FkZWRBcnJheSgpLmZvckVhY2goY2FsbGJhY2spIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtmdW5jdGlvbihpbXBvcnQoXCIuL2Jhc2UtbW9kZWwuanNcIikuZGVmYXVsdCk6IHZvaWR9IGNhbGxiYWNrXG4gICAqIEByZXR1cm5zIHthbnlbXX1cbiAgICovXG4gIG1hcChjYWxsYmFjaykgeyByZXR1cm4gdGhpcy5sb2FkZWRBcnJheSgpLm1hcChjYWxsYmFjaykgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3N0cmluZ1tdfSBwcmVsb2FkVmFsdWVcbiAgICogQHJldHVybnMge3RoaXN9XG4gICAqL1xuICBwcmVsb2FkKHByZWxvYWRWYWx1ZSkge1xuICAgIHJldHVybiB0aGlzLl9tZXJnZSh7cHJlbG9hZDogcHJlbG9hZFZhbHVlfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge251bWJlcn0gcGFnZVxuICAgKiBAcmV0dXJucyB7dGhpc31cbiAgICovXG4gIHBhZ2UocGFnZSkge1xuICAgIGNvbnN0IHBhZ2VUb1VzZSA9IHBhZ2UgfHwgMVxuXG4gICAgcmV0dXJuIHRoaXMuX21lcmdlKHtwYWdlOiBwYWdlVG9Vc2V9KVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBwYWdlS2V5XG4gICAqIEByZXR1cm5zIHt0aGlzfVxuICAgKi9cbiAgcGFnZUtleShwYWdlS2V5KSB7XG4gICAgcmV0dXJuIHRoaXMuX21lcmdlKHtwYWdlS2V5fSlcbiAgfVxuXG4gIC8qKiBAcmV0dXJucyB7Ym9vbGVhbn0gKi9cbiAgaXNGaWx0ZXJlZCgpIHtcbiAgICBjb25zdCB7cXVlcnlBcmdzfSA9IHRoaXNcblxuICAgIGlmIChcbiAgICAgIHF1ZXJ5QXJncy5hY2Nlc3NpYmxlQnkgfHxcbiAgICAgIHF1ZXJ5QXJncy5jb3VudCB8fFxuICAgICAgcXVlcnlBcmdzLmxpbWl0IHx8XG4gICAgICBxdWVyeUFyZ3MucGFnZSB8fFxuICAgICAgcXVlcnlBcmdzLnBhcmFtcyB8fFxuICAgICAgcXVlcnlBcmdzLnBlciB8fFxuICAgICAgcXVlcnlBcmdzLnJhbnNhY2sgfHxcbiAgICAgIHF1ZXJ5QXJncy5zZWFyY2hcbiAgICApIHtcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICAvKiogQHJldHVybnMge1JlY29yZDxzdHJpbmcsIGFueT59ICovXG4gIHBhcmFtcygpIHtcbiAgICBsZXQgcGFyYW1zID0ge31cblxuICAgIGlmICh0aGlzLnF1ZXJ5QXJncy5wYXJhbXMpIHBhcmFtcyA9IGluY29ycG9yYXRlKHBhcmFtcywgdGhpcy5xdWVyeUFyZ3MucGFyYW1zKVxuICAgIGlmICh0aGlzLnF1ZXJ5QXJncy5hYmlsaXRpZXMpIHBhcmFtcy5hYmlsaXRpZXMgPSB0aGlzLnF1ZXJ5QXJncy5hYmlsaXRpZXNcbiAgICBpZiAodGhpcy5xdWVyeUFyZ3MuYWNjZXNzaWJsZUJ5KSBwYXJhbXMuYWNjZXNzaWJsZV9ieSA9IGluZmxlY3Rpb24udW5kZXJzY29yZSh0aGlzLnF1ZXJ5QXJncy5hY2Nlc3NpYmxlQnkpXG4gICAgaWYgKHRoaXMucXVlcnlBcmdzLmNvdW50KSBwYXJhbXMuY291bnQgPSB0aGlzLnF1ZXJ5QXJncy5jb3VudFxuICAgIGlmICh0aGlzLnF1ZXJ5QXJncy5kaXN0aW5jdCkgcGFyYW1zLmRpc3RpbmN0ID0gdGhpcy5xdWVyeUFyZ3MuZGlzdGluY3RcbiAgICBpZiAodGhpcy5xdWVyeUFyZ3MuZ3JvdXBCeSkgcGFyYW1zLmdyb3VwX2J5ID0gdGhpcy5xdWVyeUFyZ3MuZ3JvdXBCeVxuICAgIGlmICh0aGlzLnF1ZXJ5QXJncy5yYW5zYWNrKSBwYXJhbXMucSA9IHRoaXMucXVlcnlBcmdzLnJhbnNhY2tcbiAgICBpZiAodGhpcy5xdWVyeUFyZ3MubGltaXQpIHBhcmFtcy5saW1pdCA9IHRoaXMucXVlcnlBcmdzLmxpbWl0XG4gICAgaWYgKHRoaXMucXVlcnlBcmdzLnByZWxvYWQpIHBhcmFtcy5wcmVsb2FkID0gdGhpcy5xdWVyeUFyZ3MucHJlbG9hZFxuICAgIGlmICh0aGlzLnF1ZXJ5QXJncy5wYWdlKSBwYXJhbXMucGFnZSA9IHRoaXMucXVlcnlBcmdzLnBhZ2VcbiAgICBpZiAodGhpcy5xdWVyeUFyZ3MucGVyKSBwYXJhbXMucGVyID0gdGhpcy5xdWVyeUFyZ3MucGVyXG4gICAgaWYgKHRoaXMucXVlcnlBcmdzLnNlYXJjaCkgcGFyYW1zLnNlYXJjaCA9IHRoaXMucXVlcnlBcmdzLnNlYXJjaFxuICAgIGlmICh0aGlzLnF1ZXJ5QXJncy5zZWxlY3QpIHBhcmFtcy5zZWxlY3QgPSB0aGlzLnF1ZXJ5QXJncy5zZWxlY3RcbiAgICBpZiAodGhpcy5xdWVyeUFyZ3Muc2VsZWN0Q29sdW1ucykgcGFyYW1zLnNlbGVjdF9jb2x1bW5zID0gdGhpcy5xdWVyeUFyZ3Muc2VsZWN0Q29sdW1uc1xuXG4gICAgcmV0dXJuIHBhcmFtc1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBwZXJcbiAgICogQHJldHVybnMge3RoaXN9XG4gICAqL1xuICBwZXIocGVyKSB7XG4gICAgcmV0dXJuIHRoaXMuX21lcmdlKHtwZXJ9KVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBwZXJLZXlcbiAgICogQHJldHVybnMge3RoaXN9XG4gICAqL1xuICBwZXJLZXkocGVyS2V5KSB7XG4gICAgcmV0dXJuIHRoaXMuX21lcmdlKHtwZXJLZXl9KVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7UmVjb3JkPHN0cmluZywgYW55Pn0gcGFyYW1zXG4gICAqIEByZXR1cm5zIHt0aGlzfVxuICAgKi9cbiAgcmFuc2FjayhwYXJhbXMpIHtcbiAgICBpZiAocGFyYW1zKSB0aGlzLl9tZXJnZSh7cmFuc2FjazogcGFyYW1zfSlcbiAgICByZXR1cm4gdGhpc1xuICB9XG5cbiAgLyoqIEByZXR1cm5zIHtQcm9taXNlPFJlc3VsdD59ICovXG4gIGFzeW5jIHJlc3VsdCgpIHtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuX3Jlc3BvbnNlKClcbiAgICBjb25zdCBtb2RlbHMgPSBkaWdnKHJlc3BvbnNlLCBcImNvbGxlY3Rpb25cIilcblxuICAgIHRoaXMuX2FkZFF1ZXJ5VG9Nb2RlbHMobW9kZWxzKVxuXG4gICAgY29uc3QgcmVzdWx0ID0gbmV3IFJlc3VsdCgvKiogQHR5cGUge2FueX0gKi8gKHtjb2xsZWN0aW9uOiB0aGlzLCBtb2RlbHMsIHJlc3BvbnNlfSkpXG5cbiAgICByZXR1cm4gcmVzdWx0XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtSZWNvcmQ8c3RyaW5nLCBhbnk+fSBwYXJhbXNcbiAgICogQHJldHVybnMge3RoaXN9XG4gICAqL1xuICBzZWFyY2gocGFyYW1zKSB7XG4gICAgaWYgKHBhcmFtcykgdGhpcy5fbWVyZ2Uoe3NlYXJjaDogcGFyYW1zfSlcbiAgICByZXR1cm4gdGhpc1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzZWFyY2hLZXlcbiAgICogQHJldHVybnMge3RoaXN9XG4gICAqL1xuICBzZWFyY2hLZXkoc2VhcmNoS2V5KSB7XG4gICAgcmV0dXJuIHRoaXMuX21lcmdlKHtzZWFyY2hLZXl9KVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7UmVjb3JkPHN0cmluZywgc3RyaW5nW10+fSBvcmlnaW5hbFNlbGVjdFxuICAgKiBAcmV0dXJucyB7dGhpc31cbiAgICovXG4gIHNlbGVjdChvcmlnaW5hbFNlbGVjdCkge1xuICAgIGNvbnN0IG5ld1NlbGVjdCA9IC8qKiBAdHlwZSB7UmVjb3JkPHN0cmluZywgc3RyaW5nW10+fSAqLyAoe30pXG5cbiAgICBmb3IgKGNvbnN0IG9yaWdpbmFsTW9kZWxOYW1lIGluIG9yaWdpbmFsU2VsZWN0KSB7XG4gICAgICBjb25zdCBuZXdNb2RlbE5hbWUgPSBpbmZsZWN0aW9uLnVuZGVyc2NvcmUob3JpZ2luYWxNb2RlbE5hbWUpXG4gICAgICBjb25zdCBuZXdWYWx1ZXMgPSBbXVxuICAgICAgY29uc3Qgb3JpZ2luYWxWYWx1ZXMgPSBvcmlnaW5hbFNlbGVjdFtvcmlnaW5hbE1vZGVsTmFtZV1cblxuICAgICAgZm9yIChjb25zdCBvcmlnaW5hbEF0dHJpYnV0ZU5hbWUgb2Ygb3JpZ2luYWxWYWx1ZXMpIHtcbiAgICAgICAgY29uc3QgbmV3QXR0cmlidXRlTmFtZSA9IGluZmxlY3Rpb24udW5kZXJzY29yZShvcmlnaW5hbEF0dHJpYnV0ZU5hbWUpXG4gICAgICAgIG5ld1ZhbHVlcy5wdXNoKG5ld0F0dHJpYnV0ZU5hbWUpXG4gICAgICB9XG5cbiAgICAgIG5ld1NlbGVjdFtuZXdNb2RlbE5hbWVdID0gbmV3VmFsdWVzXG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX21lcmdlKHtzZWxlY3Q6IG5ld1NlbGVjdH0pXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtSZWNvcmQ8c3RyaW5nLCBzdHJpbmdbXT59IG9yaWdpbmFsU2VsZWN0XG4gICAqIEByZXR1cm5zIHt0aGlzfVxuICAgKi9cbiAgc2VsZWN0Q29sdW1ucyhvcmlnaW5hbFNlbGVjdCkge1xuICAgIGNvbnN0IG5ld1NlbGVjdCA9IC8qKiBAdHlwZSB7UmVjb3JkPHN0cmluZywgc3RyaW5nW10+fSAqLyAoe30pXG5cbiAgICBmb3IgKGNvbnN0IG9yaWdpbmFsTW9kZWxOYW1lIGluIG9yaWdpbmFsU2VsZWN0KSB7XG4gICAgICBjb25zdCBuZXdNb2RlbE5hbWUgPSBpbmZsZWN0aW9uLnVuZGVyc2NvcmUoaW5mbGVjdGlvbi51bmRlcnNjb3JlKG9yaWdpbmFsTW9kZWxOYW1lKSlcbiAgICAgIGNvbnN0IG5ld1ZhbHVlcyA9IFtdXG4gICAgICBjb25zdCBvcmlnaW5hbFZhbHVlcyA9IG9yaWdpbmFsU2VsZWN0W29yaWdpbmFsTW9kZWxOYW1lXVxuXG4gICAgICBmb3IgKGNvbnN0IG9yaWdpbmFsQXR0cmlidXRlTmFtZSBvZiBvcmlnaW5hbFZhbHVlcykge1xuICAgICAgICBjb25zdCBuZXdBdHRyaWJ1dGVOYW1lID0gaW5mbGVjdGlvbi51bmRlcnNjb3JlKG9yaWdpbmFsQXR0cmlidXRlTmFtZSlcbiAgICAgICAgbmV3VmFsdWVzLnB1c2gobmV3QXR0cmlidXRlTmFtZSlcbiAgICAgIH1cblxuICAgICAgbmV3U2VsZWN0W25ld01vZGVsTmFtZV0gPSBuZXdWYWx1ZXNcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fbWVyZ2Uoe3NlbGVjdENvbHVtbnM6IG5ld1NlbGVjdH0pXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd9IHNvcnRCeVxuICAgKiBAcmV0dXJucyB7dGhpc31cbiAgICovXG4gIHNvcnQoc29ydEJ5KSB7XG4gICAgcmV0dXJuIHRoaXMuX21lcmdlKHtyYW5zYWNrOiB7czogc29ydEJ5fX0pXG4gIH1cblxuICAvKiogQHJldHVybnMge1Byb21pc2U8QXJyYXk8TW9kZWxPZjxNQz4+Pn0gKi9cbiAgYXN5bmMgdG9BcnJheSgpIHtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuX3Jlc3BvbnNlKClcbiAgICBjb25zdCBtb2RlbHMgPSBkaWdnKHJlc3BvbnNlLCBcImNvbGxlY3Rpb25cIilcblxuICAgIHRoaXMuX2FkZFF1ZXJ5VG9Nb2RlbHMobW9kZWxzKVxuXG4gICAgcmV0dXJuIG1vZGVsc1xuICB9XG5cbiAgLyoqIEByZXR1cm5zIHtNQ30gKi9cbiAgbW9kZWxDbGFzcygpIHtcbiAgICBpZiAoIXRoaXMuYXJncy5tb2RlbENsYXNzKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBtb2RlbCBjbGFzcyBnaXZlbiBpbiBhcmdzXCIpXG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuYXJncy5tb2RlbENsYXNzXG4gIH1cblxuICAvKiogQHJldHVybnMge0FwaU1ha2VyQ29sbGVjdGlvbn0gKi9cbiAgY2xvbmUoKSB7XG4gICAgY29uc3QgY2xvbmVkUXVlcnlBcmdzID0gY2xvbmVEZWVwKHRoaXMucXVlcnlBcmdzKVxuXG4gICAgcmV0dXJuIG5ldyBBcGlNYWtlckNvbGxlY3Rpb24odGhpcy5hcmdzLCBjbG9uZWRRdWVyeUFyZ3MpXG4gIH1cblxuICAvLyBUaGlzIGlzIG5lZWRlZCB3aGVuIHJlbG9hZGluZyBhIHZlcnNpb24gb2YgdGhlIG1vZGVsIHdpdGggdGhlIHNhbWUgc2VsZWN0ZWQgYXR0cmlidXRlcyBhbmQgcHJlbG9hZHNcbiAgLyoqXG4gICAqIEBwYXJhbSB7QXJyYXk8TW9kZWxPZjxNQz4+fSBtb2RlbHNcbiAgICogQHJldHVybnMge3ZvaWR9XG4gICAqL1xuICBfYWRkUXVlcnlUb01vZGVscyhtb2RlbHMpIHtcbiAgICBmb3IgKGNvbnN0IG1vZGVsIG9mIG1vZGVscykge1xuICAgICAgbW9kZWwuY29sbGVjdGlvbiA9IHRoaXNcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtRdWVyeUFyZ3NUeXBlfSBuZXdRdWVyeUFyZ3NcbiAgICogQHJldHVybnMge3RoaXN9XG4gICAqL1xuICBfbWVyZ2UobmV3UXVlcnlBcmdzKSB7XG4gICAgaW5jb3Jwb3JhdGUodGhpcy5xdWVyeUFyZ3MsIG5ld1F1ZXJ5QXJncylcblxuICAgIHJldHVybiB0aGlzXG4gIH1cblxuICAvKiogQHJldHVybnMge1Byb21pc2U8e2NvbGxlY3Rpb246IEFycmF5PE1vZGVsT2Y8TUM+Pn0+fSAqL1xuICBfcmVzcG9uc2UoKSB7XG4gICAgaWYgKCF0aGlzLmFyZ3MpIHRocm93IG5ldyBFcnJvcihcIk5vIGFyZ3M/XCIpXG4gICAgaWYgKCF0aGlzLmFyZ3MubW9kZWxDbGFzcykgdGhyb3cgbmV3IEVycm9yKFwiTm8gbW9kZWxDbGFzcyBpbiBhcmdzXCIpXG4gICAgaWYgKCF0aGlzLmFyZ3MubW9kZWxDbGFzcy5tb2RlbENsYXNzRGF0YSkgdGhyb3cgbmV3IEVycm9yKGBObyBtb2RlbENsYXNzRGF0YSBvbiBtb2RlbENsYXNzICR7dGhpcy5hcmdzLm1vZGVsQ2xhc3M/Lm5hbWV9ICgke3R5cGVvZiB0aGlzLmFyZ3MubW9kZWxDbGFzc30pYClcblxuICAgIGNvbnN0IG1vZGVsQ2xhc3NEYXRhID0gdGhpcy5hcmdzLm1vZGVsQ2xhc3MubW9kZWxDbGFzc0RhdGEoKVxuXG4gICAgcmV0dXJuIENvbW1hbmRzUG9vbC5hZGRDb21tYW5kKFxuICAgICAge1xuICAgICAgICBhcmdzOiB0aGlzLnBhcmFtcygpLFxuICAgICAgICBjb21tYW5kOiBgJHttb2RlbENsYXNzRGF0YS5jb2xsZWN0aW9uTmFtZX0taW5kZXhgLFxuICAgICAgICBjb2xsZWN0aW9uTmFtZTogbW9kZWxDbGFzc0RhdGEuY29sbGVjdGlvbk5hbWUsXG4gICAgICAgIHR5cGU6IFwiaW5kZXhcIlxuICAgICAgfSxcbiAgICAgIHt9XG4gICAgKVxuICB9XG59XG4iXX0=
455
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sbGVjdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIvc3JjLyIsInNvdXJjZXMiOlsiY29sbGVjdGlvbi5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLFNBQVMsTUFBTSxZQUFZLENBQUE7QUFDbEMsT0FBTyxZQUFZLE1BQU0sb0JBQW9CLENBQUEsQ0FBQyxtQ0FBbUM7QUFDakYsT0FBTyxFQUFDLElBQUksRUFBQyxNQUFNLFdBQVcsQ0FBQTtBQUM5QixPQUFPLEtBQUssVUFBVSxNQUFNLFlBQVksQ0FBQSxDQUFDLG1DQUFtQztBQUM1RSxPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0sY0FBYyxDQUFBO0FBQ3hDLE9BQU8sTUFBTSxNQUFNLGFBQWEsQ0FBQSxDQUFDLG1DQUFtQztBQUNwRSxPQUFPLFNBQVMsTUFBTSxXQUFXLENBQUE7QUFFakM7OztHQUdHO0FBRUgsZ0RBQWdEO0FBRWhELCtFQUErRTtBQUUvRTs7Ozs7O0dBTUc7QUFFSDs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW1CRztBQUVILDhEQUE4RDtBQUM5RCxNQUFNLENBQUMsT0FBTyxPQUFPLGtCQUFrQjtJQUNyQyxNQUFNLENBQUMsWUFBWSxHQUFHLFlBQVksQ0FBQTtJQUVsQzs7O09BR0c7SUFDSCxZQUFZLElBQUksRUFBRSxTQUFTLEdBQUcsRUFBRTtRQUM5QixJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVU7WUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLDBCQUEwQixNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUE7UUFFL0YsSUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUE7UUFDMUIsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUE7SUFDbEIsQ0FBQztJQUVEOzs7T0FHRztJQUNILFNBQVMsQ0FBQyxpQkFBaUI7UUFDekIsTUFBTSxZQUFZLEdBQUcsdUNBQXVDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FB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RXpDLE9BQU8sSUFBSSxDQUFBO0lBQ2IsQ0FBQztJQUVELDJEQUEyRDtJQUMzRCxTQUFTO1FBQ1AsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJO1lBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQTtRQUMzQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVO1lBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyx1QkFBdUIsQ0FBQyxDQUFBO1FBQ25FLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxjQUFjO1lBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyxtQ0FBbUMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsSUFBSSxLQUFLLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFBO1FBRTNKLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLGNBQWMsRUFBRSxDQUFBO1FBRTVELE9BQU8sWUFBWSxDQUFDLFVBQVUsQ0FDNUI7WUFDRSxJQUFJLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNuQixPQUFPLEVBQUUsR0FBRyxjQUFjLENBQUMsY0FBYyxRQUFRO1lBQ2pELGNBQWMsRUFBRSxjQUFjLENBQUMsY0FBYztZQUM3QyxJQUFJLEVBQUUsT0FBTztTQUNkLEVBQ0QsRUFBRSxDQUNILENBQUE7SUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGNsb25lRGVlcCBmcm9tIFwiY2xvbmUtZGVlcFwiXG5pbXBvcnQgQ29tbWFuZHNQb29sIGZyb20gXCIuL2NvbW1hbmRzLXBvb2wuanNcIiAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIHNvcnQtaW1wb3J0c1xuaW1wb3J0IHtkaWdnfSBmcm9tIFwiZGlnZ2VyaXplXCJcbmltcG9ydCAqIGFzIGluZmxlY3Rpb24gZnJvbSBcImluZmxlY3Rpb25cIiAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIHNvcnQtaW1wb3J0c1xuaW1wb3J0IHtpbmNvcnBvcmF0ZX0gZnJvbSBcImluY29ycG9yYXRvclwiXG5pbXBvcnQgUmVzdWx0IGZyb20gXCIuL3Jlc3VsdC5qc1wiIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgc29ydC1pbXBvcnRzXG5pbXBvcnQgdW5pcXVuaXplIGZyb20gXCJ1bmlxdW5pemVcIlxuXG4vKipcbiAqIEB0ZW1wbGF0ZSB7dHlwZW9mIGltcG9ydChcIi4vYmFzZS1tb2RlbC5qc1wiKS5kZWZhdWx0fSBNQ1xuICogQHR5cGVkZWYge0luc3RhbmNlVHlwZTxNQz59IE1vZGVsT2ZcbiAqL1xuXG4vKiogQHR5cGVkZWYge1JlY29yZDxzdHJpbmcsIGFueT59IFByZWxvYWRNYXAgKi9cblxuLyoqIEB0eXBlZGVmIHtzdHJpbmcgfCBBcnJheTxzdHJpbmcgfCBQcmVsb2FkTWFwPiB8IFByZWxvYWRNYXB9IFByZWxvYWRWYWx1ZSAqL1xuXG4vKipcbiAqIEB0ZW1wbGF0ZSB7dHlwZW9mIGltcG9ydChcIi4vYmFzZS1tb2RlbC5qc1wiKS5kZWZhdWx0fSBNQ1xuICogQHR5cGVkZWYge29iamVjdH0gQ29sbGVjdGlvbkFyZ3NUeXBlXG4gKiBAcHJvcGVydHkge2ltcG9ydChcIi4vYmFzZS1tb2RlbC5qc1wiKS5kZWZhdWx0fSBbbW9kZWxdXG4gKiBAcHJvcGVydHkge01DfSBtb2RlbENsYXNzXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW3JlZmxlY3Rpb25OYW1lXVxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge29iamVjdH0gUXVlcnlBcmdzVHlwZVxuICogQHByb3BlcnR5IHtSZWNvcmQ8c3RyaW5nLCBzdHJpbmdbXT59IFthYmlsaXRpZXNdXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW2FjY2Vzc2libGVCeV1cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW2NvdW50XVxuICogQHByb3BlcnR5IHtib29sZWFufSBbZGlzdGluY3RdXG4gKiBAcHJvcGVydHkge0FycmF5PHN0cmluZyB8IFtzdHJpbmcsIHN0cmluZ10+fSBbZ3JvdXBCeV1cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBbbGltaXRdXG4gKiBAcHJvcGVydHkge251bWJlcn0gW3BhZ2VdXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW3BhZ2VLZXldXG4gKiBAcHJvcGVydHkge1JlY29yZDxzdHJpbmcsIGFueT59IFtwYXJhbXNdXG4gKiBAcHJvcGVydHkge251bWJlcn0gW3Blcl1cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbcGVyS2V5XVxuICogQHByb3BlcnR5IHtQcmVsb2FkVmFsdWV9IFtwcmVsb2FkXVxuICogQHByb3BlcnR5IHtSZWNvcmQ8c3RyaW5nLCBhbnk+fSBbcmFuc2Fja11cbiAqIEBwcm9wZXJ0eSB7UmVjb3JkPHN0cmluZywgYW55Pn0gW3NlYXJjaF1cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbc2VhcmNoS2V5XVxuICogQHByb3BlcnR5IHtSZWNvcmQ8c3RyaW5nLCBzdHJpbmdbXT59IFtzZWxlY3RdXG4gKiBAcHJvcGVydHkge1JlY29yZDxzdHJpbmcsIHN0cmluZ1tdPn0gW3NlbGVjdENvbHVtbnNdXG4gKi9cblxuLyoqIEB0ZW1wbGF0ZSB7dHlwZW9mIGltcG9ydChcIi4vYmFzZS1tb2RlbC5qc1wiKS5kZWZhdWx0fSBNQyAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQXBpTWFrZXJDb2xsZWN0aW9uIHtcbiAgc3RhdGljIGFwaU1ha2VyVHlwZSA9IFwiQ29sbGVjdGlvblwiXG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7Q29sbGVjdGlvbkFyZ3NUeXBlPE1DPn0gYXJnc1xuICAgKiBAcGFyYW0ge1F1ZXJ5QXJnc1R5cGV9IHF1ZXJ5QXJnc1xuICAgKi9cbiAgY29uc3RydWN0b3IoYXJncywgcXVlcnlBcmdzID0ge30pIHtcbiAgICBpZiAoIWFyZ3MubW9kZWxDbGFzcykgdGhyb3cgbmV3IEVycm9yKGBObyBtb2RlbENsYXNzIGdpdmVuIGluICR7T2JqZWN0LmtleXMoYXJncykuam9pbihcIiwgXCIpfWApXG5cbiAgICB0aGlzLnF1ZXJ5QXJncyA9IHF1ZXJ5QXJnc1xuICAgIHRoaXMuYXJncyA9IGFyZ3NcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge1JlY29yZDxzdHJpbmcsIHN0cmluZ1tdPn0gb3JpZ2luYWxBYmlsaXRpZXNcbiAgICogQHJldHVybnMge3RoaXN9XG4gICAqL1xuICBhYmlsaXRpZXMob3JpZ2luYWxBYmlsaXRpZXMpIHtcbiAgICBjb25zdCBuZXdBYmlsaXRpZXMgPSAvKiogQHR5cGUge1JlY29yZDxzdHJpbmcsIHN0cmluZ1tdPn0gKi8gKHt9KVxuXG4gICAgZm9yIChjb25zdCBvcmlnaW5hbEFiaWxpdHlOYW1lIGluIG9yaWdpbmFsQWJpbGl0aWVzKSB7XG4gICAgICBjb25zdCBuZXdNb2RlbE5hbWUgPSBpbmZsZWN0aW9uLnVuZGVyc2NvcmUob3JpZ2luYWxBYmlsaXR5TmFtZSlcbiAgICAgIGNvbnN0IG5ld1ZhbHVlcyA9IFtdXG4gICAgICBjb25zdCBvcmlnaW5hbFZhbHVlcyA9IG9yaWdpbmFsQWJpbGl0aWVzW29yaWdpbmFsQWJpbGl0eU5hbWVdXG5cbiAgICAgIGZvciAoY29uc3Qgb3JpZ2luYWxBYmlsaXR5TmFtZSBvZiBvcmlnaW5hbFZhbHVlcykge1xuICAgICAgICBjb25zdCBuZXdBYmlsaXR5TmFtZSA9IGluZmxlY3Rpb24udW5kZXJzY29yZShvcmlnaW5hbEFiaWxpdHlOYW1lKVxuICAgICAgICBuZXdWYWx1ZXMucHVzaChuZXdBYmlsaXR5TmFtZSlcbiAgICAgIH1cblxuICAgICAgbmV3QWJpbGl0aWVzW25ld01vZGVsTmFtZV0gPSBuZXdWYWx1ZXNcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fbWVyZ2Uoe2FiaWxpdGllczogbmV3QWJpbGl0aWVzfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gYWJpbGl0eU5hbWVcbiAgICogQHJldHVybnMge3RoaXN9XG4gICAqL1xuICBhY2Nlc3NpYmxlQnkoYWJpbGl0eU5hbWUpIHtcbiAgICByZXR1cm4gdGhpcy5fbWVyZ2Uoe2FjY2Vzc2libGVCeTogaW5mbGVjdGlvbi51bmRlcnNjb3JlKGFiaWxpdHlOYW1lKX0pXG4gIH1cblxuICAvKiogQHJldHVybnMge1Byb21pc2U8bnVtYmVyPn0gKi9cbiAgYXN5bmMgY291bnQoKSB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmNsb25lKClcbiAgICAgIC5fbWVyZ2Uoe2NvdW50OiB0cnVlfSlcbiAgICAgIC5fcmVzcG9uc2UoKVxuXG4gICAgcmV0dXJuIGRpZ2cocmVzcG9uc2UsIFwiY291bnRcIilcbiAgfVxuXG4gIC8qKiBAcmV0dXJucyB7dGhpc30gKi9cbiAgZGlzdGluY3QoKSB7XG4gICAgcmV0dXJuIHRoaXMuX21lcmdlKHtkaXN0aW5jdDogdHJ1ZX0pXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtmdW5jdGlvbihpbXBvcnQoXCIuL2Jhc2UtbW9kZWwuanNcIikuZGVmYXVsdCkgOiB2b2lkfSBjYWxsYmFja1xuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn1cbiAgICovXG4gIGFzeW5jIGVhY2goY2FsbGJhY2spIHtcbiAgICBjb25zdCBhcnJheSA9IGF3YWl0IHRoaXMudG9BcnJheSgpXG5cbiAgICBmb3IgKGNvbnN0IG1vZGVsIGluIGFycmF5KSB7XG4gICAgICBjYWxsYmFjay5jYWxsKG1vZGVsKVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0gey4uLnN0cmluZ30ga2V5c1xuICAgKiBAcmV0dXJucyB7dGhpc31cbiAgICovXG4gIGV4Y2VwdCguLi5rZXlzKSB7XG4gICAgZm9yIChjb25zdCBrZXkgb2Yga2V5cykge1xuICAgICAgaWYgKGtleSA9PSBcInBhZ2VcIikge1xuICAgICAgICBkZWxldGUgdGhpcy5xdWVyeUFyZ3Nba2V5XVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmhhbmRsZWQga2V5OiAke2tleX1gKVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0aGlzXG4gIH1cblxuICAvKiogQHJldHVybnMge1Byb21pc2U8TW9kZWxPZjxNQz4+fSAqL1xuICBhc3luYyBmaXJzdCgpIHtcbiAgICBjb25zdCBtb2RlbHMgPSBhd2FpdCB0aGlzLnRvQXJyYXkoKVxuICAgIHJldHVybiBtb2RlbHNbMF1cbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0gey4uLihzdHJpbmcgfCBbc3RyaW5nLCBzdHJpbmddKX0gYXJyYXlPZlRhYmxlc0FuZENvbHVtbnNcbiAgICogQHJldHVybnMge3RoaXN9XG4gICAqL1xuICBncm91cEJ5KC4uLmFycmF5T2ZUYWJsZXNBbmRDb2x1bW5zKSB7XG4gICAgY29uc3QgYXJyYXlPZlRhYmxlc0FuZENvbHVtbnNXaXRoTG93ZXJjYXNlQ29sdW1ucyA9IC8qKiBAdHlwZSB7QXJyYXk8c3RyaW5nIHwgW3N0cmluZywgc3RyaW5nXT59ICovIChbXSlcblxuICAgIGZvciAoY29uc3QgdGFibGVBbmRDb2x1bW4gb2YgYXJyYXlPZlRhYmxlc0FuZENvbHVtbnMpIHtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHRhYmxlQW5kQ29sdW1uKSkge1xuICAgICAgICBhcnJheU9mVGFibGVzQW5kQ29sdW1uc1dpdGhMb3dlcmNhc2VDb2x1bW5zLnB1c2goW3RhYmxlQW5kQ29sdW1uWzBdLCB0YWJsZUFuZENvbHVtblsxXS50b0xvd2VyQ2FzZSgpXSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGFycmF5T2ZUYWJsZXNBbmRDb2x1bW5zV2l0aExvd2VyY2FzZUNvbHVtbnMucHVzaCh0YWJsZUFuZENvbHVtbi50b0xvd2VyQ2FzZSgpKVxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGN1cnJlbnRHcm91cEJ5ID0gdGhpcy5xdWVyeUFyZ3MuZ3JvdXBCeSB8fCBbXVxuICAgIGNvbnN0IG5ld0dyb3VwQnkgPSBjdXJyZW50R3JvdXBCeS5jb25jYXQoYXJyYXlPZlRhYmxlc0FuZENvbHVtbnNXaXRoTG93ZXJjYXNlQ29sdW1ucylcblxuICAgIHJldHVybiB0aGlzLl9tZXJnZSh7XG4gICAgICBncm91cEJ5OiBuZXdHcm91cEJ5XG4gICAgfSlcbiAgfVxuXG4gIC8qKiBAcmV0dXJucyB7UHJvbWlzZTxNb2RlbE9mPE1DPiB8IEFycmF5PE1vZGVsT2Y8TUM+PiB8IG51bGw+fSAqL1xuICBhc3luYyBlbnN1cmVMb2FkZWQoKSB7XG4gICAgaWYgKCF0aGlzLmlzTG9hZGVkKCkpIHtcbiAgICAgIGNvbnN0IG1vZGVscyA9IGF3YWl0IHRoaXMudG9BcnJheSgpXG5cbiAgICAgIHRoaXMuc2V0KG1vZGVscylcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5sb2FkZWQoKVxuICB9XG5cbiAgLyoqIEByZXR1cm5zIHtib29sZWFufSAqL1xuICBpc0xvYWRlZCgpIHtcbiAgICBjb25zdCB7bW9kZWwsIHJlZmxlY3Rpb25OYW1lfSA9IHRoaXMuYXJnc1xuXG4gICAgaWYgKHJlZmxlY3Rpb25OYW1lIGluIG1vZGVsLnJlbGF0aW9uc2hpcHNDYWNoZSkge1xuICAgICAgcmV0dXJuIHRydWVcbiAgICB9IGVsc2UgaWYgKHJlZmxlY3Rpb25OYW1lIGluIG1vZGVsLnJlbGF0aW9uc2hpcHMpIHtcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtudW1iZXJ9IGFtb3VudFxuICAgKiBAcmV0dXJucyB7dGhpc31cbiAgICovXG4gIGxpbWl0KGFtb3VudCkge1xuICAgIHJldHVybiB0aGlzLl9tZXJnZSh7bGltaXQ6IGFtb3VudH0pXG4gIH1cblxuICAvKiogQHJldHVybnMge0FycmF5PE1vZGVsT2Y8TUM+Pn0gKi9cbiAgcHJlbG9hZGVkKCkge1xuICAgIGlmICghKHRoaXMuYXJncy5yZWZsZWN0aW9uTmFtZSBpbiB0aGlzLmFyZ3MubW9kZWwucmVsYXRpb25zaGlwc0NhY2hlKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGAke3RoaXMuYXJncy5yZWZsZWN0aW9uTmFtZX0gaGFzbnQgYmVlbiBsb2FkZWQgeWV0YClcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5hcmdzLm1vZGVsLnJlbGF0aW9uc2hpcHNDYWNoZVt0aGlzLmFyZ3MucmVmbGVjdGlvbk5hbWVdXG4gIH1cblxuICAvKiogQHJldHVybnMge01vZGVsT2Y8TUM+IHwgQXJyYXk8TW9kZWxPZjxNQz4+fSAqL1xuICBsb2FkZWQoKSB7XG4gICAgY29uc3Qge21vZGVsLCByZWZsZWN0aW9uTmFtZX0gPSB0aGlzLmFyZ3NcblxuICAgIGlmIChyZWZsZWN0aW9uTmFtZSBpbiBtb2RlbC5yZWxhdGlvbnNoaXBzKSB7XG4gICAgICByZXR1cm4gbW9kZWwucmVsYXRpb25zaGlwc1tyZWZsZWN0aW9uTmFtZV1cbiAgICB9IGVsc2UgaWYgKHJlZmxlY3Rpb25OYW1lIGluIG1vZGVsLnJlbGF0aW9uc2hpcHNDYWNoZSkge1xuICAgICAgcmV0dXJuIG1vZGVsLnJlbGF0aW9uc2hpcHNDYWNoZVtyZWZsZWN0aW9uTmFtZV1cbiAgICB9IGVsc2UgaWYgKG1vZGVsLmlzTmV3UmVjb3JkKCkpIHtcbiAgICAgIGNvbnN0IHJlZmxlY3Rpb25OYW1lVW5kZXJzY29yZSA9IGluZmxlY3Rpb24udW5kZXJzY29yZShyZWZsZWN0aW9uTmFtZSlcblxuICAgICAgLy8gSW5pdGlhbGl6ZSBhcyBlbXB0eSBhbmQgdHJ5IGFnYWluIHRvIHJldHVybiB0aGUgZW1wdHkgcmVzdWx0XG4gICAgICB0aGlzLnNldChbXSlcblxuICAgICAgcmV0dXJuIGRpZ2cobW9kZWwucmVsYXRpb25zaGlwcywgcmVmbGVjdGlvbk5hbWVVbmRlcnNjb3JlKVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCByZWxhdGlvbnNoaXBzTG9hZGVkID0gdW5pcXVuaXplKE9iamVjdC5rZXlzKG1vZGVsLnJlbGF0aW9uc2hpcHMpLmNvbmNhdChPYmplY3Qua2V5cyhtb2RlbC5yZWxhdGlvbnNoaXBzQ2FjaGUpKSlcblxuICAgICAgdGhyb3cgbmV3IEVycm9yKGAke3JlZmxlY3Rpb25OYW1lfSBoYXNuJ3QgYmVlbiBsb2FkZWQgeWV0IG9uICR7bW9kZWwubW9kZWxDbGFzc0RhdGEoKS5uYW1lfS4gTG9hZGVkIHdhczogJHtyZWxhdGlvbnNoaXBzTG9hZGVkLmpvaW4oXCIsIFwiKX1gKVxuICAgIH1cbiAgfVxuXG4gIC8qKiBAcmV0dXJucyB7QXJyYXk8TW9kZWxPZjxNQz4+fSAqL1xuICBsb2FkZWRBcnJheSgpIHtcbiAgICBjb25zdCBsb2FkZWQgPSB0aGlzLmxvYWRlZCgpXG5cbiAgICBpZiAoQXJyYXkuaXNBcnJheShsb2FkZWQpKSB7XG4gICAgICByZXR1cm4gbG9hZGVkXG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIidsb2FkZWQnIHdhc24ndCBhbiBhcnJheVwiKVxuICAgIH1cbiAgfVxuXG4gIC8vIFJlcGxhY2VzIHRoZSByZWxhdGlvbnNoaXBzIHdpdGggdGhlIGdpdmVuIG5ldyBjb2xsZWN0aW9uLlxuICAvKipcbiAgICogQHBhcmFtIHtBcnJheTxNb2RlbE9mPE1DPj59IG5ld0NvbGxlY3Rpb25cbiAgICogQHJldHVybnMge3ZvaWR9XG4gICAqL1xuICBzZXQobmV3Q29sbGVjdGlvbikge1xuICAgIHRoaXMuYXJncy5tb2RlbC5yZWxhdGlvbnNoaXBzW3RoaXMuYXJncy5yZWZsZWN0aW9uTmFtZV0gPSBuZXdDb2xsZWN0aW9uXG4gIH1cblxuICAvLyBQdXNoZXMgYW5vdGhlciBtb2RlbCBvbnRvIHRoZSBnaXZlbiBjb2xsZWN0aW9uLlxuICAvKipcbiAgICogQHBhcmFtIHtNb2RlbE9mPE1DPn0gbmV3TW9kZWxcbiAgICogQHJldHVybnMge3ZvaWR9XG4gICAqL1xuICBwdXNoKG5ld01vZGVsKSB7XG4gICAgY29uc3Qge21vZGVsLCByZWZsZWN0aW9uTmFtZX0gPSB0aGlzLmFyZ3NcblxuICAgIGlmICghKHJlZmxlY3Rpb25OYW1lIGluIG1vZGVsLnJlbGF0aW9uc2hpcHMpKSB7XG4gICAgICBtb2RlbC5yZWxhdGlvbnNoaXBzW3JlZmxlY3Rpb25OYW1lXSA9IFtdXG4gICAgfVxuXG4gICAgaWYgKCFtb2RlbC5yZWxhdGlvbnNoaXBzW3JlZmxlY3Rpb25OYW1lXS5pbmNsdWRlcyhuZXdNb2RlbCkpIHtcbiAgICAgIG1vZGVsLnJlbGF0aW9uc2hpcHNbcmVmbGVjdGlvbk5hbWVdLnB1c2gobmV3TW9kZWwpXG4gICAgfVxuICB9XG5cbiAgLy8gQXJyYXkgc2hvcnRjdXRzXG4gIC8qKlxuICAgKiBAcGFyYW0ge2Z1bmN0aW9uKGltcG9ydChcIi4vYmFzZS1tb2RlbC5qc1wiKS5kZWZhdWx0KTogYm9vbGVhbn0gY2FsbGJhY2tcbiAgICogQHJldHVybnMge2ltcG9ydChcIi4vYmFzZS1tb2RlbC5qc1wiKS5kZWZhdWx0fVxuICAgKi9cbiAgZmluZChjYWxsYmFjaykgeyByZXR1cm4gdGhpcy5sb2FkZWRBcnJheSgpLmZpbmQoY2FsbGJhY2spIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtmdW5jdGlvbihpbXBvcnQoXCIuL2Jhc2UtbW9kZWwuanNcIikuZGVmYXVsdCk6IHZvaWR9IGNhbGxiYWNrXG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKi9cbiAgZm9yRWFjaChjYWxsYmFjaykgeyByZXR1cm4gdGhpcy5sb2FkZWRBcnJheSgpLmZvckVhY2goY2FsbGJhY2spIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtmdW5jdGlvbihpbXBvcnQoXCIuL2Jhc2UtbW9kZWwuanNcIikuZGVmYXVsdCk6IHZvaWR9IGNhbGxiYWNrXG4gICAqIEByZXR1cm5zIHthbnlbXX1cbiAgICovXG4gIG1hcChjYWxsYmFjaykgeyByZXR1cm4gdGhpcy5sb2FkZWRBcnJheSgpLm1hcChjYWxsYmFjaykgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge1ByZWxvYWRWYWx1ZX0gcHJlbG9hZFZhbHVlXG4gICAqIEByZXR1cm5zIHt0aGlzfVxuICAgKi9cbiAgcHJlbG9hZChwcmVsb2FkVmFsdWUpIHtcbiAgICByZXR1cm4gdGhpcy5fbWVyZ2Uoe3ByZWxvYWQ6IHByZWxvYWRWYWx1ZX0pXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtudW1iZXJ9IHBhZ2VcbiAgICogQHJldHVybnMge3RoaXN9XG4gICAqL1xuICBwYWdlKHBhZ2UpIHtcbiAgICBjb25zdCBwYWdlVG9Vc2UgPSBwYWdlIHx8IDFcblxuICAgIHJldHVybiB0aGlzLl9tZXJnZSh7cGFnZTogcGFnZVRvVXNlfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gcGFnZUtleVxuICAgKiBAcmV0dXJucyB7dGhpc31cbiAgICovXG4gIHBhZ2VLZXkocGFnZUtleSkge1xuICAgIHJldHVybiB0aGlzLl9tZXJnZSh7cGFnZUtleX0pXG4gIH1cblxuICAvKiogQHJldHVybnMge2Jvb2xlYW59ICovXG4gIGlzRmlsdGVyZWQoKSB7XG4gICAgY29uc3Qge3F1ZXJ5QXJnc30gPSB0aGlzXG5cbiAgICBpZiAoXG4gICAgICBxdWVyeUFyZ3MuYWNjZXNzaWJsZUJ5IHx8XG4gICAgICBxdWVyeUFyZ3MuY291bnQgfHxcbiAgICAgIHF1ZXJ5QXJncy5saW1pdCB8fFxuICAgICAgcXVlcnlBcmdzLnBhZ2UgfHxcbiAgICAgIHF1ZXJ5QXJncy5wYXJhbXMgfHxcbiAgICAgIHF1ZXJ5QXJncy5wZXIgfHxcbiAgICAgIHF1ZXJ5QXJncy5yYW5zYWNrIHx8XG4gICAgICBxdWVyeUFyZ3Muc2VhcmNoXG4gICAgKSB7XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cblxuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgLyoqIEByZXR1cm5zIHtSZWNvcmQ8c3RyaW5nLCBhbnk+fSAqL1xuICBwYXJhbXMoKSB7XG4gICAgbGV0IHBhcmFtcyA9IHt9XG5cbiAgICBpZiAodGhpcy5xdWVyeUFyZ3MucGFyYW1zKSBwYXJhbXMgPSBpbmNvcnBvcmF0ZShwYXJhbXMsIHRoaXMucXVlcnlBcmdzLnBhcmFtcylcbiAgICBpZiAodGhpcy5xdWVyeUFyZ3MuYWJpbGl0aWVzKSBwYXJhbXMuYWJpbGl0aWVzID0gdGhpcy5xdWVyeUFyZ3MuYWJpbGl0aWVzXG4gICAgaWYgKHRoaXMucXVlcnlBcmdzLmFjY2Vzc2libGVCeSkgcGFyYW1zLmFjY2Vzc2libGVfYnkgPSBpbmZsZWN0aW9uLnVuZGVyc2NvcmUodGhpcy5xdWVyeUFyZ3MuYWNjZXNzaWJsZUJ5KVxuICAgIGlmICh0aGlzLnF1ZXJ5QXJncy5jb3VudCkgcGFyYW1zLmNvdW50ID0gdGhpcy5xdWVyeUFyZ3MuY291bnRcbiAgICBpZiAodGhpcy5xdWVyeUFyZ3MuZGlzdGluY3QpIHBhcmFtcy5kaXN0aW5jdCA9IHRoaXMucXVlcnlBcmdzLmRpc3RpbmN0XG4gICAgaWYgKHRoaXMucXVlcnlBcmdzLmdyb3VwQnkpIHBhcmFtcy5ncm91cF9ieSA9IHRoaXMucXVlcnlBcmdzLmdyb3VwQnlcbiAgICBpZiAodGhpcy5xdWVyeUFyZ3MucmFuc2FjaykgcGFyYW1zLnEgPSB0aGlzLnF1ZXJ5QXJncy5yYW5zYWNrXG4gICAgaWYgKHRoaXMucXVlcnlBcmdzLmxpbWl0KSBwYXJhbXMubGltaXQgPSB0aGlzLnF1ZXJ5QXJncy5saW1pdFxuICAgIGlmICh0aGlzLnF1ZXJ5QXJncy5wcmVsb2FkKSBwYXJhbXMucHJlbG9hZCA9IHRoaXMucXVlcnlBcmdzLnByZWxvYWRcbiAgICBpZiAodGhpcy5xdWVyeUFyZ3MucGFnZSkgcGFyYW1zLnBhZ2UgPSB0aGlzLnF1ZXJ5QXJncy5wYWdlXG4gICAgaWYgKHRoaXMucXVlcnlBcmdzLnBlcikgcGFyYW1zLnBlciA9IHRoaXMucXVlcnlBcmdzLnBlclxuICAgIGlmICh0aGlzLnF1ZXJ5QXJncy5zZWFyY2gpIHBhcmFtcy5zZWFyY2ggPSB0aGlzLnF1ZXJ5QXJncy5zZWFyY2hcbiAgICBpZiAodGhpcy5xdWVyeUFyZ3Muc2VsZWN0KSBwYXJhbXMuc2VsZWN0ID0gdGhpcy5xdWVyeUFyZ3Muc2VsZWN0XG4gICAgaWYgKHRoaXMucXVlcnlBcmdzLnNlbGVjdENvbHVtbnMpIHBhcmFtcy5zZWxlY3RfY29sdW1ucyA9IHRoaXMucXVlcnlBcmdzLnNlbGVjdENvbHVtbnNcblxuICAgIHJldHVybiBwYXJhbXNcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge251bWJlcn0gcGVyXG4gICAqIEByZXR1cm5zIHt0aGlzfVxuICAgKi9cbiAgcGVyKHBlcikge1xuICAgIHJldHVybiB0aGlzLl9tZXJnZSh7cGVyfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gcGVyS2V5XG4gICAqIEByZXR1cm5zIHt0aGlzfVxuICAgKi9cbiAgcGVyS2V5KHBlcktleSkge1xuICAgIHJldHVybiB0aGlzLl9tZXJnZSh7cGVyS2V5fSlcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge1JlY29yZDxzdHJpbmcsIGFueT59IHBhcmFtc1xuICAgKiBAcmV0dXJucyB7dGhpc31cbiAgICovXG4gIHJhbnNhY2socGFyYW1zKSB7XG4gICAgaWYgKHBhcmFtcykgdGhpcy5fbWVyZ2Uoe3JhbnNhY2s6IHBhcmFtc30pXG4gICAgcmV0dXJuIHRoaXNcbiAgfVxuXG4gIC8qKiBAcmV0dXJucyB7UHJvbWlzZTxSZXN1bHQ+fSAqL1xuICBhc3luYyByZXN1bHQoKSB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLl9yZXNwb25zZSgpXG4gICAgY29uc3QgbW9kZWxzID0gZGlnZyhyZXNwb25zZSwgXCJjb2xsZWN0aW9uXCIpXG5cbiAgICB0aGlzLl9hZGRRdWVyeVRvTW9kZWxzKG1vZGVscylcblxuICAgIGNvbnN0IHJlc3VsdCA9IG5ldyBSZXN1bHQoLyoqIEB0eXBlIHthbnl9ICovICh7Y29sbGVjdGlvbjogdGhpcywgbW9kZWxzLCByZXNwb25zZX0pKVxuXG4gICAgcmV0dXJuIHJlc3VsdFxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7UmVjb3JkPHN0cmluZywgYW55Pn0gcGFyYW1zXG4gICAqIEByZXR1cm5zIHt0aGlzfVxuICAgKi9cbiAgc2VhcmNoKHBhcmFtcykge1xuICAgIGlmIChwYXJhbXMpIHRoaXMuX21lcmdlKHtzZWFyY2g6IHBhcmFtc30pXG4gICAgcmV0dXJuIHRoaXNcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gc2VhcmNoS2V5XG4gICAqIEByZXR1cm5zIHt0aGlzfVxuICAgKi9cbiAgc2VhcmNoS2V5KHNlYXJjaEtleSkge1xuICAgIHJldHVybiB0aGlzLl9tZXJnZSh7c2VhcmNoS2V5fSlcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge1JlY29yZDxzdHJpbmcsIHN0cmluZ1tdPn0gb3JpZ2luYWxTZWxlY3RcbiAgICogQHJldHVybnMge3RoaXN9XG4gICAqL1xuICBzZWxlY3Qob3JpZ2luYWxTZWxlY3QpIHtcbiAgICBjb25zdCBuZXdTZWxlY3QgPSAvKiogQHR5cGUge1JlY29yZDxzdHJpbmcsIHN0cmluZ1tdPn0gKi8gKHt9KVxuXG4gICAgZm9yIChjb25zdCBvcmlnaW5hbE1vZGVsTmFtZSBpbiBvcmlnaW5hbFNlbGVjdCkge1xuICAgICAgY29uc3QgbmV3TW9kZWxOYW1lID0gaW5mbGVjdGlvbi51bmRlcnNjb3JlKG9yaWdpbmFsTW9kZWxOYW1lKVxuICAgICAgY29uc3QgbmV3VmFsdWVzID0gW11cbiAgICAgIGNvbnN0IG9yaWdpbmFsVmFsdWVzID0gb3JpZ2luYWxTZWxlY3Rbb3JpZ2luYWxNb2RlbE5hbWVdXG5cbiAgICAgIGZvciAoY29uc3Qgb3JpZ2luYWxBdHRyaWJ1dGVOYW1lIG9mIG9yaWdpbmFsVmFsdWVzKSB7XG4gICAgICAgIGNvbnN0IG5ld0F0dHJpYnV0ZU5hbWUgPSBpbmZsZWN0aW9uLnVuZGVyc2NvcmUob3JpZ2luYWxBdHRyaWJ1dGVOYW1lKVxuICAgICAgICBuZXdWYWx1ZXMucHVzaChuZXdBdHRyaWJ1dGVOYW1lKVxuICAgICAgfVxuXG4gICAgICBuZXdTZWxlY3RbbmV3TW9kZWxOYW1lXSA9IG5ld1ZhbHVlc1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9tZXJnZSh7c2VsZWN0OiBuZXdTZWxlY3R9KVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7UmVjb3JkPHN0cmluZywgc3RyaW5nW10+fSBvcmlnaW5hbFNlbGVjdFxuICAgKiBAcmV0dXJucyB7dGhpc31cbiAgICovXG4gIHNlbGVjdENvbHVtbnMob3JpZ2luYWxTZWxlY3QpIHtcbiAgICBjb25zdCBuZXdTZWxlY3QgPSAvKiogQHR5cGUge1JlY29yZDxzdHJpbmcsIHN0cmluZ1tdPn0gKi8gKHt9KVxuXG4gICAgZm9yIChjb25zdCBvcmlnaW5hbE1vZGVsTmFtZSBpbiBvcmlnaW5hbFNlbGVjdCkge1xuICAgICAgY29uc3QgbmV3TW9kZWxOYW1lID0gaW5mbGVjdGlvbi51bmRlcnNjb3JlKGluZmxlY3Rpb24udW5kZXJzY29yZShvcmlnaW5hbE1vZGVsTmFtZSkpXG4gICAgICBjb25zdCBuZXdWYWx1ZXMgPSBbXVxuICAgICAgY29uc3Qgb3JpZ2luYWxWYWx1ZXMgPSBvcmlnaW5hbFNlbGVjdFtvcmlnaW5hbE1vZGVsTmFtZV1cblxuICAgICAgZm9yIChjb25zdCBvcmlnaW5hbEF0dHJpYnV0ZU5hbWUgb2Ygb3JpZ2luYWxWYWx1ZXMpIHtcbiAgICAgICAgY29uc3QgbmV3QXR0cmlidXRlTmFtZSA9IGluZmxlY3Rpb24udW5kZXJzY29yZShvcmlnaW5hbEF0dHJpYnV0ZU5hbWUpXG4gICAgICAgIG5ld1ZhbHVlcy5wdXNoKG5ld0F0dHJpYnV0ZU5hbWUpXG4gICAgICB9XG5cbiAgICAgIG5ld1NlbGVjdFtuZXdNb2RlbE5hbWVdID0gbmV3VmFsdWVzXG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX21lcmdlKHtzZWxlY3RDb2x1bW5zOiBuZXdTZWxlY3R9KVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzb3J0QnlcbiAgICogQHJldHVybnMge3RoaXN9XG4gICAqL1xuICBzb3J0KHNvcnRCeSkge1xuICAgIHJldHVybiB0aGlzLl9tZXJnZSh7cmFuc2Fjazoge3M6IHNvcnRCeX19KVxuICB9XG5cbiAgLyoqIEByZXR1cm5zIHtQcm9taXNlPEFycmF5PE1vZGVsT2Y8TUM+Pj59ICovXG4gIGFzeW5jIHRvQXJyYXkoKSB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLl9yZXNwb25zZSgpXG4gICAgY29uc3QgbW9kZWxzID0gZGlnZyhyZXNwb25zZSwgXCJjb2xsZWN0aW9uXCIpXG5cbiAgICB0aGlzLl9hZGRRdWVyeVRvTW9kZWxzKG1vZGVscylcblxuICAgIHJldHVybiBtb2RlbHNcbiAgfVxuXG4gIC8qKiBAcmV0dXJucyB7TUN9ICovXG4gIG1vZGVsQ2xhc3MoKSB7XG4gICAgaWYgKCF0aGlzLmFyZ3MubW9kZWxDbGFzcykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gbW9kZWwgY2xhc3MgZ2l2ZW4gaW4gYXJnc1wiKVxuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmFyZ3MubW9kZWxDbGFzc1xuICB9XG5cbiAgLyoqIEByZXR1cm5zIHtBcGlNYWtlckNvbGxlY3Rpb259ICovXG4gIGNsb25lKCkge1xuICAgIGNvbnN0IGNsb25lZFF1ZXJ5QXJncyA9IGNsb25lRGVlcCh0aGlzLnF1ZXJ5QXJncylcblxuICAgIHJldHVybiBuZXcgQXBpTWFrZXJDb2xsZWN0aW9uKHRoaXMuYXJncywgY2xvbmVkUXVlcnlBcmdzKVxuICB9XG5cbiAgLy8gVGhpcyBpcyBuZWVkZWQgd2hlbiByZWxvYWRpbmcgYSB2ZXJzaW9uIG9mIHRoZSBtb2RlbCB3aXRoIHRoZSBzYW1lIHNlbGVjdGVkIGF0dHJpYnV0ZXMgYW5kIHByZWxvYWRzXG4gIC8qKlxuICAgKiBAcGFyYW0ge0FycmF5PE1vZGVsT2Y8TUM+Pn0gbW9kZWxzXG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKi9cbiAgX2FkZFF1ZXJ5VG9Nb2RlbHMobW9kZWxzKSB7XG4gICAgZm9yIChjb25zdCBtb2RlbCBvZiBtb2RlbHMpIHtcbiAgICAgIG1vZGVsLmNvbGxlY3Rpb24gPSB0aGlzXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7UXVlcnlBcmdzVHlwZX0gbmV3UXVlcnlBcmdzXG4gICAqIEByZXR1cm5zIHt0aGlzfVxuICAgKi9cbiAgX21lcmdlKG5ld1F1ZXJ5QXJncykge1xuICAgIGluY29ycG9yYXRlKHRoaXMucXVlcnlBcmdzLCBuZXdRdWVyeUFyZ3MpXG5cbiAgICByZXR1cm4gdGhpc1xuICB9XG5cbiAgLyoqIEByZXR1cm5zIHtQcm9taXNlPHtjb2xsZWN0aW9uOiBBcnJheTxNb2RlbE9mPE1DPj59Pn0gKi9cbiAgX3Jlc3BvbnNlKCkge1xuICAgIGlmICghdGhpcy5hcmdzKSB0aHJvdyBuZXcgRXJyb3IoXCJObyBhcmdzP1wiKVxuICAgIGlmICghdGhpcy5hcmdzLm1vZGVsQ2xhc3MpIHRocm93IG5ldyBFcnJvcihcIk5vIG1vZGVsQ2xhc3MgaW4gYXJnc1wiKVxuICAgIGlmICghdGhpcy5hcmdzLm1vZGVsQ2xhc3MubW9kZWxDbGFzc0RhdGEpIHRocm93IG5ldyBFcnJvcihgTm8gbW9kZWxDbGFzc0RhdGEgb24gbW9kZWxDbGFzcyAke3RoaXMuYXJncy5tb2RlbENsYXNzPy5uYW1lfSAoJHt0eXBlb2YgdGhpcy5hcmdzLm1vZGVsQ2xhc3N9KWApXG5cbiAgICBjb25zdCBtb2RlbENsYXNzRGF0YSA9IHRoaXMuYXJncy5tb2RlbENsYXNzLm1vZGVsQ2xhc3NEYXRhKClcblxuICAgIHJldHVybiBDb21tYW5kc1Bvb2wuYWRkQ29tbWFuZChcbiAgICAgIHtcbiAgICAgICAgYXJnczogdGhpcy5wYXJhbXMoKSxcbiAgICAgICAgY29tbWFuZDogYCR7bW9kZWxDbGFzc0RhdGEuY29sbGVjdGlvbk5hbWV9LWluZGV4YCxcbiAgICAgICAgY29sbGVjdGlvbk5hbWU6IG1vZGVsQ2xhc3NEYXRhLmNvbGxlY3Rpb25OYW1lLFxuICAgICAgICB0eXBlOiBcImluZGV4XCJcbiAgICAgIH0sXG4gICAgICB7fVxuICAgIClcbiAgfVxufVxuIl19
@@ -1 +1 @@
1
- {"version":3,"file":"form.d.ts","sourceRoot":"/src/","sources":["form.jsx"],"names":[],"mappings":"AA+DA,uBAuDG;AA5GH,6CAAuC;AAGvC;IACE,wBAGC;IAFC,WAAgB;IAChB,cAA+B;IAGjC,eAWC;IAED,yBAEC;IAED,sCAIC;IAED,4BAIC;IAED,mFAMC;IAED,eAIC;CACF;AAlDD,+BAA6C;kBAVsB,OAAO"}
1
+ {"version":3,"file":"form.d.ts","sourceRoot":"/src/","sources":["form.jsx"],"names":[],"mappings":"AA+DA,uBAyDG;AA9GH,6CAAuC;AAGvC;IACE,wBAGC;IAFC,WAAgB;IAChB,cAA+B;IAGjC,eAWC;IAED,yBAEC;IAED,sCAIC;IAED,4BAIC;IAED,mFAMC;IAED,eAIC;CACF;AAlDD,+BAA6C;kBAVsB,OAAO"}
package/build/form.js CHANGED
@@ -64,7 +64,8 @@ const Form = memo(shapeComponent(class Form extends BaseComponent {
64
64
  const localForm = useMemo(() => new FormInputs({ onSubmit }), []);
65
65
  const form = givenForm || localForm;
66
66
  form.onSubmit = onSubmit;
67
- useMemo(() => {
67
+ // Keep form refs/state updates in effects so consumers do not trigger parent updates during render.
68
+ useEffect(() => {
68
69
  if (formObjectRef) {
69
70
  formObjectRef.current = form;
70
71
  }
@@ -74,7 +75,8 @@ const Form = memo(shapeComponent(class Form extends BaseComponent {
74
75
  formObjectRef.current = null;
75
76
  }
76
77
  }, [form, formObjectRef]);
77
- useMemo(() => {
78
+ // Propagate the stable form instance after commit so ShapeComponent parents stay on the mounted path.
79
+ useEffect(() => {
78
80
  if (setForm) {
79
81
  setForm(form);
80
82
  }
@@ -90,4 +92,4 @@ const Form = memo(shapeComponent(class Form extends BaseComponent {
90
92
  };
91
93
  }));
92
94
  export { Form, FormContext, FormInputs, useForm };
93
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS5qcyIsInNvdXJjZVJvb3QiOiIvc3JjLyIsInNvdXJjZXMiOlsiZm9ybS5qc3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLGlDQUFpQztBQUNqQyxPQUFPLEtBQUssRUFBRSxFQUFDLGFBQWEsRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBQyxNQUFNLE9BQU8sQ0FBQTtBQUMxRSxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0sY0FBYyxDQUFBO0FBQ3JDLE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSw0Q0FBNEMsQ0FBQTtBQUN6RSxPQUFPLGFBQWEsTUFBTSxrQkFBa0IsQ0FBQTtBQUM1QyxPQUFPLGtCQUFrQixNQUFNLHNCQUFzQixDQUFBO0FBQ3JELE9BQU8sU0FBUyxNQUFNLFlBQVksQ0FBQTtBQUNsQyxPQUFPLGNBQWMsTUFBTSxrQkFBa0IsQ0FBQTtBQUM3QyxPQUFPLElBQUksTUFBTSxpQ0FBaUMsQ0FBQTtBQUVsRCxNQUFNLFdBQVcsR0FBRyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUE7QUFDdkMsTUFBTSxPQUFPLEdBQUcsR0FBRyxFQUFFLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxDQUFBO0FBRTdDLE1BQU0sVUFBVTtJQUNkLFlBQVksS0FBSztRQUNmLElBQUksQ0FBQyxNQUFNLEdBQUcsRUFBRSxDQUFBO1FBQ2hCLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxFQUFFLFFBQVEsQ0FBQTtJQUNqQyxDQUFDO0lBRUQsUUFBUTtRQUNOLE1BQU0sTUFBTSxHQUFHLEVBQUUsQ0FBQTtRQUNqQixNQUFNLGtCQUFrQixHQUFHLElBQUksa0JBQWtCLEVBQUUsQ0FBQTtRQUVuRCxLQUFJLE1BQU0sR0FBRyxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUM3QixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFBO1lBRTlCLGtCQUFrQixDQUFDLFlBQVksQ0FBQyxHQUFHLEVBQUUs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LENBQUE7UUFFekIsT0FBTyxDQUFDLEdBQUcsRUFBRTtZQUNYLElBQUksT0FBTyxFQUFFLENBQUM7Z0JBQ1osT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFBO1lBQ2YsQ0FBQztRQUNILENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFBO1FBRW5CLE9BQU8sQ0FDTCxNQUFDLFdBQVcsQ0FBQyxRQUFRLElBQUMsS0FBSyxFQUFFLElBQUksYUFDOUIsUUFBUSxDQUFDLEVBQUUsSUFBSSxLQUFLO29CQUNuQixrQkFBVSxhQUFhLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsWUFBWSxFQUFFLEdBQUcsRUFBRSxPQUFPLFlBQ2xFLFFBQVEsR0FDSixFQUVSLFFBQVEsQ0FBQyxFQUFFLElBQUksS0FBSyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxJQUN2QixDQUN4QixDQUFBO0lBQ0gsQ0FBQztJQUVELFlBQVksR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFO1FBQ25CLENBQUMsQ0FBQyxjQUFjLEVBQUUsQ0FBQTtRQUVsQixJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDeEIsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQTtRQUN2QixDQUFDO0lBQ0gsQ0FBQyxDQUFBO0NBQ0YsQ0FBQyxDQUFDLENBQUE7QUFFSCxPQUFPLEVBQUMsSUFBSSxFQUFFLFdBQVcsRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFDLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBzb3J0LWltcG9ydHMgKi9cbmltcG9ydCBSZWFjdCwge2NyZWF0ZUNvbnRleHQsIHVzZUNvbnRleHQsIHVzZUVmZmVjdCwgdXNlTWVtb30gZnJvbSBcInJlYWN0XCJcbmltcG9ydCB7UGxhdGZvcm19IGZyb20gXCJyZWFjdC1uYXRpdmVcIlxuaW1wb3J0IHtzaGFwZUNvbXBvbmVudH0gZnJvbSBcInNldC1zdGF0ZS1jb21wYXJlL2J1aWxkL3NoYXBlLWNvbXBvbmVudC5qc1wiXG5pbXBvcnQgQmFzZUNvbXBvbmVudCBmcm9tIFwiLi9iYXNlLWNvbXBvbmVudFwiXG5pbXBvcnQgRm9ybURhdGFPYmplY3RpemVyIGZyb20gXCJmb3JtLWRhdGEtb2JqZWN0aXplclwiXG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCJcbmltcG9ydCBwcm9wVHlwZXNFeGFjdCBmcm9tIFwicHJvcC10eXBlcy1leGFjdFwiXG5pbXBvcnQgbWVtbyBmcm9tIFwic2V0LXN0YXRlLWNvbXBhcmUvYnVpbGQvbWVtby5qc1wiXG5cbmNvbnN0IEZvcm1Db250ZXh0ID0gY3JlYXRlQ29udGV4dChudWxsKVxuY29uc3QgdXNlRm9ybSA9ICgpID0+IHVzZUNvbnRleHQoRm9ybUNvbnRleHQpXG5cbmNsYXNzIEZvcm1JbnB1dHMge1xuICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgIHRoaXMuaW5wdXRzID0ge31cbiAgICB0aGlzLm9uU3VibWl0ID0gcHJvcHM/Lm9uU3VibWl0XG4gIH1cblxuICBhc09iamVjdCgpIHtcbiAgICBjb25zdCByZXN1bHQgPSB7fVxuICAgIGNvbnN0IGZvcm1EYXRhT2JqZWN0aXplciA9IG5ldyBGb3JtRGF0YU9iamVjdGl6ZXIoKVxuXG4gICAgZm9yKGNvbnN0IGtleSBpbiB0aGlzLmlucHV0cykge1xuICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLmlucHV0c1trZXldXG5cbiAgICAgIGZvcm1EYXRhT2JqZWN0aXplci50cmVhdEluaXRpYWwoa2V5LCB2YWx1ZSwgcmVzdWx0KVxuICAgIH1cblxuICAgIHJldHVybiByZXN1bHRcbiAgfVxuXG4gIGdldFZhbHVlKG5hbWUpIHtcbiAgICByZXR1cm4gdGhpcy5pbnB1dHNbbmFtZV1cbiAgfVxuXG4gIHNldFZhbHVlKG5hbWUsIHZhbHVlKSB7XG4gICAgaWYgKCFuYW1lKSB0aHJvdyBuZXcgRXJyb3IoXCInbmFtZScgaXMgcmVxdWlyZWRcIilcblxuICAgIHRoaXMuaW5wdXRzW25hbWVdID0gdmFsdWVcbiAgfVxuXG4gIHVuc2V0VmFsdWUobmFtZSkge1xuICAgIGlmICghbmFtZSkgdGhyb3cgbmV3IEVycm9yKFwiJ25hbWUnIGlzIHJlcXVpcmVkXCIpXG5cbiAgICBkZWxldGUgdGhpcy5pbnB1dHNbbmFtZV1cbiAgfVxuXG4gIHNldFZhbHVlV2l0aEhpZGRlbihuYW1lLCB2YWx1ZSkge1xuICAgIHRoaXMuc2V0VmFsdWUobmFtZSwgdmFsdWUpXG5cbiAgICBpZiAoUGxhdGZvcm0uT1MgPT0gXCJ3ZWJcIikge1xuICAgICAgcmV0dXJuIDxpbnB1dCBuYW1lPXtuYW1lfSB0eXBlPVwiaGlkZGVuXCIgdmFsdWU9e3ZhbHVlICE9PSBudWxsICYmIHZhbHVlICE9PSB1bmRlZmluZWQgPyB2YWx1ZSA6IFwiXCJ9IC8+XG4gICAgfVxuICB9XG5cbiAgc3VibWl0KCkge1xuICAgIGlmICh0aGlzLm9uU3VibWl0KSB7XG4gICAgICB0aGlzLm9uU3VibWl0KClcbiAgICB9XG4gIH1cbn1cblxuY29uc3QgRm9ybSA9IG1lbW8oc2hhcGVDb21wb25lbnQoY2xhc3MgRm9ybSBleHRlbmRzIEJhc2VDb21wb25lbnQge1xuICBzdGF0aWMgcHJvcFR5cGVzID0gcHJvcFR5cGVzRXhhY3Qoe1xuICAgIGNoaWxkcmVuOiBQcm9wVHlwZXMuYW55LFxuICAgIGZvcm06IFByb3BUeXBlcy5pbnN0YW5jZU9mKEZvcm1JbnB1dHMpLFxuICAgIGZvcm1PYmplY3RSZWY6IFByb3BUeXBlcy5vYmplY3QsXG4gICAgZm9ybVJlZjogUHJvcFR5cGVzLm9iamVjdCxcbiAgICBodG1sRm9ybVByb3BzOiBQcm9wVHlwZXMub2JqZWN0LFxuICAgIG9uU3VibWl0OiBQcm9wVHlwZXMuZnVuYyxcbiAgICBzZXRGb3JtOiBQcm9wVHlwZXMuZnVuY1xuICB9KVxuXG4gIHJlbmRlcigpIHtcbiAgICBjb25zdCB7Y2hpbGRyZW4sIGZvcm06IGdpdmVuRm9ybSwgZm9ybU9iamVjdFJlZiwgZm9ybVJlZiwgaHRtbEZvcm1Qcm9wcywgb25TdWJtaXQsIHNldEZvcm19ID0gdGhpcy5wcm9wc1xuICAgIGNvbnN0IGxvY2FsRm9ybSA9IHVzZU1lbW8oKCkgPT4gbmV3IEZvcm1JbnB1dHMoe29uU3VibWl0fSksIFtdKVxuICAgIGNvbnN0IGZvcm0gPSBnaXZlbkZvcm0gfHwgbG9jYWxGb3JtXG5cbiAgICBmb3JtLm9uU3VibWl0ID0gb25TdWJtaXRcblxuICAgIHVzZU1lbW8oKCkgPT4ge1xuICAgICAgaWYgKGZvcm1PYmplY3RSZWYpIHtcbiAgICAgICAgZm9ybU9iamVjdFJlZi5jdXJyZW50ID0gZm9ybVxuICAgICAgfVxuICAgIH0sIFtmb3JtLCBmb3JtT2JqZWN0UmVmXSlcblxuICAgIHVzZUVmZmVjdCgoKSA9PiAoKSA9PiB7XG4gICAgICBpZiAoZm9ybU9iamVjdFJlZikge1xuICAgICAgICBmb3JtT2JqZWN0UmVmLmN1cnJlbnQgPSBudWxsXG4gICAgICB9XG4gICAgfSwgW2Zvcm0sIGZvcm1PYmplY3RSZWZdKVxuXG4gICAgdXNlTWVtbygoKSA9PiB7XG4gICAgICBpZiAoc2V0Rm9ybSkge1xuICAgICAgICBzZXRGb3JtKGZvcm0pXG4gICAgICB9XG4gICAgfSwgW2Zvcm0sIHNldEZvcm1dKVxuXG4gICAgcmV0dXJuIChcbiAgICAgIDxGb3JtQ29udGV4dC5Qcm92aWRlciB2YWx1ZT17Zm9ybX0+XG4gICAgICAgIHtQbGF0Zm9ybS5PUyA9PSBcIndlYlwiICYmXG4gICAgICAgICAgPGZvcm0gey4uLmh0bWxGb3JtUHJvcHN9IG9uU3VibWl0PXt0aGlzLnR0Lm9uRm9ybVN1Ym1pdH0gcmVmPXtmb3JtUmVmfT5cbiAgICAgICAgICAgIHtjaGlsZHJlbn1cbiAgICAgICAgICA8L2Zvcm0+XG4gICAgICAgIH1cbiAgICAgICAge1BsYXRmb3JtLk9TICE9IFwid2ViXCIgJiYgdGhpcy5wcm9wcy5jaGlsZHJlbn1cbiAgICAgIDwvRm9ybUNvbnRleHQuUHJvdmlkZXI+XG4gICAgKVxuICB9XG5cbiAgb25Gb3JtU3VibWl0ID0gKGUpID0+IHtcbiAgICBlLnByZXZlbnREZWZhdWx0KClcblxuICAgIGlmICh0aGlzLnByb3BzLm9uU3VibWl0KSB7XG4gICAgICB0aGlzLnByb3BzLm9uU3VibWl0KClcbiAgICB9XG4gIH1cbn0pKVxuXG5leHBvcnQge0Zvcm0sIEZvcm1Db250ZXh0LCBGb3JtSW5wdXRzLCB1c2VGb3JtfVxuIl19
95
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS5qcyIsInNvdXJjZVJvb3QiOiIvc3JjLyIsInNvdXJjZXMiOlsiZm9ybS5qc3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLGlDQUFpQztBQUNqQyxPQUFPLEtBQUssRUFBRSxFQUFDLGFBQWEsRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBQyxNQUFNLE9BQU8sQ0FBQTtBQUMxRSxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0sY0FBYyxDQUFBO0FBQ3JDLE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSw0Q0FBNEMsQ0FBQTtBQUN6RSxPQUFPLGFBQWEsTUFBTSxrQkFBa0IsQ0FBQTtBQUM1QyxPQUFPLGtCQUFrQixNQUFNLHNCQUFzQixDQUFBO0FBQ3JELE9BQU8sU0FBUyxNQUFNLFlBQVksQ0FBQTtBQUNsQyxPQUFPLGNBQWMsTUFBTSxrQkFBa0IsQ0FBQTtBQUM3QyxPQUFPLElBQUksTUFBTSxpQ0FBaUMsQ0FBQTtBQUVsRCxNQUFNLFdBQVcsR0FBRyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUE7QUFDdkMsTUFBTSxPQUFPLEdBQUcsR0FBRyxFQUFFLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxDQUFBO0FBRTdDLE1BQU0sVUFBVTtJQUNkLFlBQVksS0FBSztRQUNmLElBQUksQ0FBQyxNQUFNLEdBQUcsRUFBRSxDQUFBO1FBQ2hCLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxFQUFFLFFBQVEsQ0FBQTtJQUNqQyxDQUFDO0lBRUQsUUFBUTtRQUNOLE1BQU0sTUFBTSxHQUFHLEVBQUUsQ0FBQTtRQUNqQixNQUFNLGtCQUFrQixHQUFHLElBQUksa0JBQWtCLEVBQUUsQ0FBQTtRQUVuRCxLQUFJLE1BQU0sR0FBRyxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUM3QixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFBO1lBRTlCLGtCQUFrQixDQUFDLFlBQVksQ0FBQyxHQUFHLEVBQUUs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QUFhLENBQUMsQ0FBQyxDQUFBO1FBRXpCLHNHQUFzRztRQUN0RyxTQUFTLENBQUMsR0FBRyxFQUFFO1lBQ2IsSUFBSSxPQUFPLEVBQUUsQ0FBQztnQkFDWixPQUFPLENBQUMsSUFBSSxDQUFDLENBQUE7WUFDZixDQUFDO1FBQ0gsQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUE7UUFFbkIsT0FBTyxDQUNMLE1BQUMsV0FBVyxDQUFDLFFBQVEsSUFBQyxLQUFLLEVBQUUsSUFBSSxhQUM5QixRQUFRLENBQUMsRUFBRSxJQUFJLEtBQUs7b0JBQ25CLGtCQUFVLGFBQWEsRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxZQUFZLEVBQUUsR0FBRyxFQUFFLE9BQU8sWUFDbEUsUUFBUSxHQUNKLEVBRVIsUUFBUSxDQUFDLEVBQUUsSUFBSSxLQUFLLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLElBQ3ZCLENBQ3hCLENBQUE7SUFDSCxDQUFDO0lBRUQsWUFBWSxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUU7UUFDbkIsQ0FBQyxDQUFDLGNBQWMsRUFBRSxDQUFBO1FBRWxCLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUN4QixJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFBO1FBQ3ZCLENBQUM7SUFDSCxDQUFDLENBQUE7Q0FDRixDQUFDLENBQUMsQ0FBQTtBQUVILE9BQU8sRUFBQyxJQUFJLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUMsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIHNvcnQtaW1wb3J0cyAqL1xuaW1wb3J0IFJlYWN0LCB7Y3JlYXRlQ29udGV4dCwgdXNlQ29udGV4dCwgdXNlRWZmZWN0LCB1c2VNZW1vfSBmcm9tIFwicmVhY3RcIlxuaW1wb3J0IHtQbGF0Zm9ybX0gZnJvbSBcInJlYWN0LW5hdGl2ZVwiXG5pbXBvcnQge3NoYXBlQ29tcG9uZW50fSBmcm9tIFwic2V0LXN0YXRlLWNvbXBhcmUvYnVpbGQvc2hhcGUtY29tcG9uZW50LmpzXCJcbmltcG9ydCBCYXNlQ29tcG9uZW50IGZyb20gXCIuL2Jhc2UtY29tcG9uZW50XCJcbmltcG9ydCBGb3JtRGF0YU9iamVjdGl6ZXIgZnJvbSBcImZvcm0tZGF0YS1vYmplY3RpemVyXCJcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIlxuaW1wb3J0IHByb3BUeXBlc0V4YWN0IGZyb20gXCJwcm9wLXR5cGVzLWV4YWN0XCJcbmltcG9ydCBtZW1vIGZyb20gXCJzZXQtc3RhdGUtY29tcGFyZS9idWlsZC9tZW1vLmpzXCJcblxuY29uc3QgRm9ybUNvbnRleHQgPSBjcmVhdGVDb250ZXh0KG51bGwpXG5jb25zdCB1c2VGb3JtID0gKCkgPT4gdXNlQ29udGV4dChGb3JtQ29udGV4dClcblxuY2xhc3MgRm9ybUlucHV0cyB7XG4gIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgdGhpcy5pbnB1dHMgPSB7fVxuICAgIHRoaXMub25TdWJtaXQgPSBwcm9wcz8ub25TdWJtaXRcbiAgfVxuXG4gIGFzT2JqZWN0KCkge1xuICAgIGNvbnN0IHJlc3VsdCA9IHt9XG4gICAgY29uc3QgZm9ybURhdGFPYmplY3RpemVyID0gbmV3IEZvcm1EYXRhT2JqZWN0aXplcigpXG5cbiAgICBmb3IoY29uc3Qga2V5IGluIHRoaXMuaW5wdXRzKSB7XG4gICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuaW5wdXRzW2tleV1cblxuICAgICAgZm9ybURhdGFPYmplY3RpemVyLnRyZWF0SW5pdGlhbChrZXksIHZhbHVlLCByZXN1bHQpXG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdFxuICB9XG5cbiAgZ2V0VmFsdWUobmFtZSkge1xuICAgIHJldHVybiB0aGlzLmlucHV0c1tuYW1lXVxuICB9XG5cbiAgc2V0VmFsdWUobmFtZSwgdmFsdWUpIHtcbiAgICBpZiAoIW5hbWUpIHRocm93IG5ldyBFcnJvcihcIiduYW1lJyBpcyByZXF1aXJlZFwiKVxuXG4gICAgdGhpcy5pbnB1dHNbbmFtZV0gPSB2YWx1ZVxuICB9XG5cbiAgdW5zZXRWYWx1ZShuYW1lKSB7XG4gICAgaWYgKCFuYW1lKSB0aHJvdyBuZXcgRXJyb3IoXCInbmFtZScgaXMgcmVxdWlyZWRcIilcblxuICAgIGRlbGV0ZSB0aGlzLmlucHV0c1tuYW1lXVxuICB9XG5cbiAgc2V0VmFsdWVXaXRoSGlkZGVuKG5hbWUsIHZhbHVlKSB7XG4gICAgdGhpcy5zZXRWYWx1ZShuYW1lLCB2YWx1ZSlcblxuICAgIGlmIChQbGF0Zm9ybS5PUyA9PSBcIndlYlwiKSB7XG4gICAgICByZXR1cm4gPGlucHV0IG5hbWU9e25hbWV9IHR5cGU9XCJoaWRkZW5cIiB2YWx1ZT17dmFsdWUgIT09IG51bGwgJiYgdmFsdWUgIT09IHVuZGVmaW5lZCA/IHZhbHVlIDogXCJcIn0gLz5cbiAgICB9XG4gIH1cblxuICBzdWJtaXQoKSB7XG4gICAgaWYgKHRoaXMub25TdWJtaXQpIHtcbiAgICAgIHRoaXMub25TdWJtaXQoKVxuICAgIH1cbiAgfVxufVxuXG5jb25zdCBGb3JtID0gbWVtbyhzaGFwZUNvbXBvbmVudChjbGFzcyBGb3JtIGV4dGVuZHMgQmFzZUNvbXBvbmVudCB7XG4gIHN0YXRpYyBwcm9wVHlwZXMgPSBwcm9wVHlwZXNFeGFjdCh7XG4gICAgY2hpbGRyZW46IFByb3BUeXBlcy5hbnksXG4gICAgZm9ybTogUHJvcFR5cGVzLmluc3RhbmNlT2YoRm9ybUlucHV0cyksXG4gICAgZm9ybU9iamVjdFJlZjogUHJvcFR5cGVzLm9iamVjdCxcbiAgICBmb3JtUmVmOiBQcm9wVHlwZXMub2JqZWN0LFxuICAgIGh0bWxGb3JtUHJvcHM6IFByb3BUeXBlcy5vYmplY3QsXG4gICAgb25TdWJtaXQ6IFByb3BUeXBlcy5mdW5jLFxuICAgIHNldEZvcm06IFByb3BUeXBlcy5mdW5jXG4gIH0pXG5cbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IHtjaGlsZHJlbiwgZm9ybTogZ2l2ZW5Gb3JtLCBmb3JtT2JqZWN0UmVmLCBmb3JtUmVmLCBodG1sRm9ybVByb3BzLCBvblN1Ym1pdCwgc2V0Rm9ybX0gPSB0aGlzLnByb3BzXG4gICAgY29uc3QgbG9jYWxGb3JtID0gdXNlTWVtbygoKSA9PiBuZXcgRm9ybUlucHV0cyh7b25TdWJtaXR9KSwgW10pXG4gICAgY29uc3QgZm9ybSA9IGdpdmVuRm9ybSB8fCBsb2NhbEZvcm1cblxuICAgIGZvcm0ub25TdWJtaXQgPSBvblN1Ym1pdFxuXG4gICAgLy8gS2VlcCBmb3JtIHJlZnMvc3RhdGUgdXBkYXRlcyBpbiBlZmZlY3RzIHNvIGNvbnN1bWVycyBkbyBub3QgdHJpZ2dlciBwYXJlbnQgdXBkYXRlcyBkdXJpbmcgcmVuZGVyLlxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICBpZiAoZm9ybU9iamVjdFJlZikge1xuICAgICAgICBmb3JtT2JqZWN0UmVmLmN1cnJlbnQgPSBmb3JtXG4gICAgICB9XG4gICAgfSwgW2Zvcm0sIGZvcm1PYmplY3RSZWZdKVxuXG4gICAgdXNlRWZmZWN0KCgpID0+ICgpID0+IHtcbiAgICAgIGlmIChmb3JtT2JqZWN0UmVmKSB7XG4gICAgICAgIGZvcm1PYmplY3RSZWYuY3VycmVudCA9IG51bGxcbiAgICAgIH1cbiAgICB9LCBbZm9ybSwgZm9ybU9iamVjdFJlZl0pXG5cbiAgICAvLyBQcm9wYWdhdGUgdGhlIHN0YWJsZSBmb3JtIGluc3RhbmNlIGFmdGVyIGNvbW1pdCBzbyBTaGFwZUNvbXBvbmVudCBwYXJlbnRzIHN0YXkgb24gdGhlIG1vdW50ZWQgcGF0aC5cbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgaWYgKHNldEZvcm0pIHtcbiAgICAgICAgc2V0Rm9ybShmb3JtKVxuICAgICAgfVxuICAgIH0sIFtmb3JtLCBzZXRGb3JtXSlcblxuICAgIHJldHVybiAoXG4gICAgICA8Rm9ybUNvbnRleHQuUHJvdmlkZXIgdmFsdWU9e2Zvcm19PlxuICAgICAgICB7UGxhdGZvcm0uT1MgPT0gXCJ3ZWJcIiAmJlxuICAgICAgICAgIDxmb3JtIHsuLi5odG1sRm9ybVByb3BzfSBvblN1Ym1pdD17dGhpcy50dC5vbkZvcm1TdWJtaXR9IHJlZj17Zm9ybVJlZn0+XG4gICAgICAgICAgICB7Y2hpbGRyZW59XG4gICAgICAgICAgPC9mb3JtPlxuICAgICAgICB9XG4gICAgICAgIHtQbGF0Zm9ybS5PUyAhPSBcIndlYlwiICYmIHRoaXMucHJvcHMuY2hpbGRyZW59XG4gICAgICA8L0Zvcm1Db250ZXh0LlByb3ZpZGVyPlxuICAgIClcbiAgfVxuXG4gIG9uRm9ybVN1Ym1pdCA9IChlKSA9PiB7XG4gICAgZS5wcmV2ZW50RGVmYXVsdCgpXG5cbiAgICBpZiAodGhpcy5wcm9wcy5vblN1Ym1pdCkge1xuICAgICAgdGhpcy5wcm9wcy5vblN1Ym1pdCgpXG4gICAgfVxuICB9XG59KSlcblxuZXhwb3J0IHtGb3JtLCBGb3JtQ29udGV4dCwgRm9ybUlucHV0cywgdXNlRm9ybX1cbiJdfQ==
@@ -1 +1 @@
1
- {"version":3,"file":"route.d.ts","sourceRoot":"/src/","sources":["router/route.jsx"],"names":[],"mappings":";AAYA,yDAAmD;AACnD,8CAAwC;mBAVG,UAAU;AAWrD,gCAAiD;AAEjD,yBAoOG;kBAnPqD,OAAO"}
1
+ {"version":3,"file":"route.d.ts","sourceRoot":"/src/","sources":["router/route.jsx"],"names":[],"mappings":";AAaA,yDAAmD;AACnD,8CAAwC;mBAXG,UAAU;AAYrD,gCAAiD;AAEjD,yBAqRG;kBArSiF,OAAO"}
@@ -1,8 +1,9 @@
1
1
  import { jsxs as _jsxs, jsx as _jsx } from "react/jsx-runtime";
2
2
  /* eslint-disable react/jsx-max-depth, sort-imports */
3
- import React, { createContext, useContext, useMemo } from "react";
3
+ import React, { createContext, useContext, useEffect, useLayoutEffect, useMemo } from "react";
4
4
  import { shapeComponent } from "set-state-compare/build/shape-component.js";
5
5
  import Switch, { CurrentSwitchContext } from "./switch";
6
+ import { arrayDifferent, simpleObjectDifferent } from "set-state-compare/build/diff-utils.js";
6
7
  import BaseComponent from "../base-component";
7
8
  import PropTypes from "prop-types";
8
9
  import memo from "set-state-compare/build/memo.js";
@@ -30,6 +31,9 @@ const Route = memo(shapeComponent(class Route extends BaseComponent {
30
31
  path: PropTypes.oneOfType([PropTypes.string, PropTypes.instanceOf(RegExp)])
31
32
  });
32
33
  match = null;
34
+ loadComponentRequestId = 0;
35
+ componentPathParts = [];
36
+ lastMatchUpdate = 0;
33
37
  newParams = null;
34
38
  pathParts = null;
35
39
  setup() {
@@ -58,11 +62,11 @@ const Route = memo(shapeComponent(class Route extends BaseComponent {
58
62
  }
59
63
  return this.routeParts.slice(this.pathParts.length, this.routeParts.length);
60
64
  }, [givenRoute].concat(this.pathParts));
61
- this.useStates({ Component: null, componentNotFound: null, matches: false });
62
- useMemo(() => {
65
+ this.useStates({ Component: null, componentNotFound: null, lastMatchUpdate: 0, matches: false });
66
+ useLayoutEffect(() => {
63
67
  this.loadMatches();
64
68
  }, [givenRoute, path, pathsMatched]);
65
- useMemo(() => {
69
+ useEffect(() => {
66
70
  if (this.hasSwitchMatch() && !this.s.Component && this.s.matches) {
67
71
  if (this.props.onMatch) {
68
72
  this.props.onMatch();
@@ -71,6 +75,9 @@ const Route = memo(shapeComponent(class Route extends BaseComponent {
71
75
  this.loadComponent();
72
76
  }
73
77
  }
78
+ return () => {
79
+ this.loadComponentRequestId += 1;
80
+ };
74
81
  }, [path, pathShown, this.s.matches]);
75
82
  }
76
83
  hasSwitchMatch = () => this.switchGroup.s.pathShown && this.switchGroup.s.pathShown == this.pathId();
@@ -138,17 +145,49 @@ const Route = memo(shapeComponent(class Route extends BaseComponent {
138
145
  componentPathParts.push(component);
139
146
  }
140
147
  const newParams = Object.assign({}, this.currentParams, params); // eslint-disable-line prefer-object-spread
141
- this.setInstance({ componentPathParts, match: { params }, newParams });
142
- this.setState({ matches });
148
+ this.updateRouteMatchState({ componentPathParts, match: { params }, matches, newParams });
143
149
  this.switchGroup?.setPathMatched(matchId, true);
144
150
  }
145
151
  else {
146
- this.setInstance({ componentPathParts: null, match: null, newParams: null });
147
- this.setState({ matches });
152
+ this.updateRouteMatchState({ componentPathParts: null, match: null, matches, newParams: null });
148
153
  this.switchGroup?.setPathMatched(matchId, false);
149
154
  }
150
155
  }
156
+ updateRouteMatchState({ componentPathParts, match, matches, newParams }) {
157
+ const routeDataChanged = this.routeDataChanged({ componentPathParts, match, newParams });
158
+ this.setInstance({ componentPathParts, match, newParams });
159
+ if (routeDataChanged || this.s.matches != matches) {
160
+ this.setState({
161
+ lastMatchUpdate: routeDataChanged ? this.lastMatchUpdate += 1 : this.s.lastMatchUpdate,
162
+ matches
163
+ });
164
+ }
165
+ }
166
+ routeDataChanged({ componentPathParts, match, newParams }) {
167
+ const currentComponentPathParts = this.componentPathParts || null;
168
+ const currentMatchParams = this.match?.params || null;
169
+ const nextMatchParams = match?.params || null;
170
+ const componentPathPartsChanged = this.nullableArrayDifferent(currentComponentPathParts, componentPathParts);
171
+ const matchChanged = this.nullableObjectDifferent(currentMatchParams, nextMatchParams);
172
+ const newParamsChanged = this.nullableObjectDifferent(this.newParams, newParams);
173
+ return componentPathPartsChanged || matchChanged || newParamsChanged;
174
+ }
175
+ nullableArrayDifferent(value, nextValue) {
176
+ if (value === null || nextValue === null) {
177
+ return value != nextValue;
178
+ }
179
+ return arrayDifferent(value, nextValue);
180
+ }
181
+ nullableObjectDifferent(value, nextValue) {
182
+ if (value === null || nextValue === null) {
183
+ return value != nextValue;
184
+ }
185
+ return simpleObjectDifferent(value, nextValue, true);
186
+ }
151
187
  async loadComponent() {
188
+ // Ignore late async route-component loads after a route switch or discarded mount.
189
+ const requestId = this.loadComponentRequestId + 1;
190
+ this.loadComponentRequestId = requestId;
152
191
  const actualComponentPath = this.props.componentPath || this.tt.componentPathParts.join("/");
153
192
  let Component;
154
193
  this.log(() => ["loadComponent", { componentPath: this.props.componentPath, componentPathParts: this.componentPathParts, actualComponentPath }]);
@@ -160,6 +199,8 @@ const Route = memo(shapeComponent(class Route extends BaseComponent {
160
199
  console.error(`Couldn't find component: ${actualComponentPath}`);
161
200
  throw error;
162
201
  }
202
+ if (requestId != this.loadComponentRequestId)
203
+ return;
163
204
  this.setState({ Component, componentNotFound: !Component });
164
205
  }
165
206
  log(callbackArgs) {
@@ -191,4 +232,4 @@ const Route = memo(shapeComponent(class Route extends BaseComponent {
191
232
  }));
192
233
  export { RequireComponentContext, RouteContext, Switch, useParams };
193
234
  export default Route;
194
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiL3NyYy8iLCJzb3VyY2VzIjpbInJvdXRlci9yb3V0ZS5qc3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLHNEQUFzRDtBQUN0RCxPQUFPLEtBQUssRUFBRSxFQUFDLGFBQWEsRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFDLE1BQU0sT0FBTyxDQUFBO0FBQy9ELE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSw0Q0FBNEMsQ0FBQTtBQUN6RSxPQUFPLE1BQU0sRUFBRSxFQUFDLG9CQUFvQixFQUFDLE1BQU0sVUFBVSxDQUFBO0FBQ3JELE9BQU8sYUFBYSxNQUFNLG1CQUFtQixDQUFBO0FBQzdDLE9BQU8sU0FBUyxNQUFNLFlBQVksQ0FBQTtBQUNsQyxPQUFPLElBQUksTUFBTSxpQ0FBaUMsQ0FBQTtBQUNsRCxPQUFPLGNBQWMsTUFBTSxrQkFBa0IsQ0FBQTtBQUM3QyxPQUFPLE9BQU8sTUFBTSxtQ0FBbUMsQ0FBQTtBQUV2RCxNQUFNLGtCQUFrQixHQUFHLGFBQWEsQ0FBQyxFQUFFLENBQUMsQ0FBQTtBQUM1QyxNQUFNLGFBQWEsR0FBRyxhQUFhLENBQUMsRUFBRSxDQUFDLENBQUE7QUFDdkMsTUFBTSx1QkFBdUIsR0FBRyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUE7QUFDbkQsTUFBTSxZQUFZLEdBQUcsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFBO0FBQ3hDLE1BQU0sU0FBUyxHQUFHLEdBQUcsRUFBRSxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsQ0FBQTtBQUVqRCxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sS0FBTSxTQUFRLGFBQWE7SUFDakUsTUFBTSxDQUFDLFlBQVksR0FBRztRQUNwQixLQUFLLEVBQUUsS0FBSztRQUNaLFFBQVEsRUFBRSxLQUFLO1FBQ2YsYUFBYSxFQUFFLElBQUk7S0FDcEIsQ0FBQTtJQUVELE1BQU0sQ0FBQyxTQUFTLEdBQUcsY0FBYyxDQUFDO1FBQ2hDLFFB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QVEsSUFBQyxLQUFLLEVBQUUsYUFBYSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsWUFDbkQsS0FBQyxhQUFhLENBQUMsUUFBUSxJQUFDLEtBQUssRUFBRSxTQUFTLFlBQ3RDLE1BQUMsTUFBTSxJQUFDLElBQUksRUFBRSxlQUFlLElBQUksRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLGFBQy9DLFNBQVMsSUFBSSxLQUFDLFNBQVMsSUFBQyxLQUFLLEVBQUUsS0FBSyxHQUFJLEVBQ3hDLFFBQVEsSUFDRixHQUNjLEdBQ0gsR0FDSSxDQUMvQixDQUFBO0lBQ0gsQ0FBQztDQUNGLENBQUMsQ0FBQyxDQUFBO0FBRUgsT0FBTyxFQUFDLHVCQUF1QixFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFDLENBQUE7QUFDakUsZUFBZSxLQUFLLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSByZWFjdC9qc3gtbWF4LWRlcHRoLCBzb3J0LWltcG9ydHMgKi9cbmltcG9ydCBSZWFjdCwge2NyZWF0ZUNvbnRleHQsIHVzZUNvbnRleHQsIHVzZU1lbW99IGZyb20gXCJyZWFjdFwiXG5pbXBvcnQge3NoYXBlQ29tcG9uZW50fSBmcm9tIFwic2V0LXN0YXRlLWNvbXBhcmUvYnVpbGQvc2hhcGUtY29tcG9uZW50LmpzXCJcbmltcG9ydCBTd2l0Y2gsIHtDdXJyZW50U3dpdGNoQ29udGV4dH0gZnJvbSBcIi4vc3dpdGNoXCJcbmltcG9ydCBCYXNlQ29tcG9uZW50IGZyb20gXCIuLi9iYXNlLWNvbXBvbmVudFwiXG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCJcbmltcG9ydCBtZW1vIGZyb20gXCJzZXQtc3RhdGUtY29tcGFyZS9idWlsZC9tZW1vLmpzXCJcbmltcG9ydCBwcm9wVHlwZXNFeGFjdCBmcm9tIFwicHJvcC10eXBlcy1leGFjdFwiXG5pbXBvcnQgdXNlSTE4biBmcm9tIFwiaTE4bi1vbi1zdGVyb2lkcy9zcmMvdXNlLWkxOG4ubWpzXCJcblxuY29uc3QgQ3VycmVudFBhdGhDb250ZXh0ID0gY3JlYXRlQ29udGV4dChbXSlcbmNvbnN0IFBhcmFtc0NvbnRleHQgPSBjcmVhdGVDb250ZXh0KHt9KVxuY29uc3QgUmVxdWlyZUNvbXBvbmVudENvbnRleHQgPSBjcmVhdGVDb250ZXh0KG51bGwpXG5jb25zdCBSb3V0ZUNvbnRleHQgPSBjcmVhdGVDb250ZXh0KG51bGwpXG5jb25zdCB1c2VQYXJhbXMgPSAoKSA9PiB1c2VDb250ZXh0KFBhcmFtc0NvbnRleHQpXG5cbmNvbnN0IFJvdXRlID0gbWVtbyhzaGFwZUNvbXBvbmVudChjbGFzcyBSb3V0ZSBleHRlbmRzIEJhc2VDb21wb25lbnQge1xuICBzdGF0aWMgZGVmYXVsdFByb3BzID0ge1xuICAgIGV4YWN0OiBmYWxzZSxcbiAgICBmYWxsYmFjazogZmFsc2UsXG4gICAgaW5jbHVkZUluUGF0aDogdHJ1ZVxuICB9XG5cbiAgc3RhdGljIHByb3BUeXBlcyA9IHByb3BUeXBlc0V4YWN0KHtcbiAgICBjaGlsZHJlbjogUHJvcFR5cGVzLmFueSxcbiAgICBjb21wb25lbnQ6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgY29tcG9uZW50UGF0aDogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBleGFjdDogUHJvcFR5cGVzLmJvb2wuaXNSZXF1aXJlZCxcbiAgICBmYWxsYmFjazogUHJvcFR5cGVzLmJvb2wuaXNSZXF1aXJlZCxcbiAgICBpbmNsdWRlSW5QYXRoOiBQcm9wVHlwZXMuYm9vbC5pc1JlcXVpcmVkLFxuICAgIG9uTWF0Y2g6IFByb3BUeXBlcy5mdW5jLFxuICAgIHBhdGg6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5pbnN0YW5jZU9mKFJlZ0V4cCldKVxuICB9KVxuXG4gIG1hdGNoID0gbnVsbFxuICBuZXdQYXJhbXMgPSBudWxsXG4gIHBhdGhQYXJ0cyA9IG51bGxcblxuICBzZXR1cCgpIHtcbiAgICBjb25zdCB7dH0gPSB1c2VJMThuKHtuYW1lc3BhY2U6IFwianMuYXBpX21ha2VyLnJvdXRlci5yb3V0ZVwifSlcbiAgICBjb25zdCB7cGF0aH0gPSB0aGlzLnByb3BzXG4gICAgY29uc3Qge3BhdGhzTWF0Y2hlZCwgc3dpdGNoR3JvdXB9ID0gdXNlQ29udGV4dChDdXJyZW50U3dpdGNoQ29udGV4dClcbiAgICBjb25zdCBnaXZlblJvdXRlID0gdXNlQ29udGV4dChSb3V0ZUNvbnRleHQpXG4gICAgY29uc3Qge3BhdGhTaG93bn0gPSBzd2l0Y2hHcm91cC5zXG5cbiAgICB0aGlzLmRlYnVnID0gZmFsc2VcbiAgICB0aGlzLmxvZygoKSA9PiAoe2dpdmVuUm91dGV9KSlcbiAgICB0aGlzLnQgPSB0XG5cbiAgICB0aGlzLnJlcXVpcmVDb21wb25lbnQgPSB1c2VDb250ZXh0KFJlcXVpcmVDb21wb25lbnRDb250ZXh0KVxuICAgIHRoaXMuY3VycmVudFBhcmFtcyA9IHVzZUNvbnRleHQoUGFyYW1zQ29udGV4dClcbiAgICB0aGlzLmN1cnJlbnRQYXRoID0gdXNlQ29udGV4dChDdXJyZW50UGF0aENvbnRleHQpXG4gICAgdGhpcy5zd2l0Y2hHcm91cCA9IHN3aXRjaEdyb3VwXG4gICAgdGhpcy5yb3V0ZVBhcnRzID0gdXNlTWVtbygoKSA9PiBnaXZlblJvdXRlPy5zcGxpdChcIi9cIiksIFtwYXRoLCBnaXZlblJvdXRlXSlcbiAgICB0aGlzLnBhdGhQYXJ0cyA9IHVzZU1lbW8oKCkgPT4gcGF0aD8uc3BsaXQoXCIvXCIpLCBbcGF0aF0pXG5cbiAgICB0aGlzLm5ld1JvdXRlUGFydHMgPSB1c2VNZW1vKFxuICAgICAgKCkgPT4ge1xuICAgICAgICBpZiAoIXBhdGgpIHtcbiAgICAgICAgICBpZiAoZ2l2ZW5Sb3V0ZSA9PSBcIlwiKSB7XG4gICAgICAgICAgICByZXR1cm4gW11cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucm91dGVQYXJ0c1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLnJvdXRlUGFydHMuc2xpY2UodGhpcy5wYXRoUGFydHMubGVuZ3RoLCB0aGlzLnJvdXRlUGFydHMubGVuZ3RoKVxuICAgICAgfSxcbiAgICAgIFtnaXZlblJvdXRlXS5jb25jYXQodGhpcy5wYXRoUGFydHMpXG4gICAgKVxuXG4gICAgdGhpcy51c2VTdGF0ZXMoe0NvbXBvbmVudDogbnVsbCwgY29tcG9uZW50Tm90Rm91bmQ6IG51bGwsIG1hdGNoZXM6IGZhbHNlfSlcblxuICAgIHVzZU1lbW8oKCkgPT4ge1xuICAgICAgdGhpcy5sb2FkTWF0Y2hlcygpXG4gICAgfSwgW2dpdmVuUm91dGUsIHBhdGgsIHBhdGhzTWF0Y2hlZF0pXG5cbiAgICB1c2VNZW1vKCgpID0+IHtcbiAgICAgIGlmICh0aGlzLmhhc1N3aXRjaE1hdGNoKCkgJiYgIXRoaXMucy5Db21wb25lbnQgJiYgdGhpcy5zLm1hdGNoZXMpIHtcbiAgICAgICAgaWYgKHRoaXMucHJvcHMub25NYXRjaCkge1xuICAgICAgICAgIHRoaXMucHJvcHMub25NYXRjaCgpXG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXRoaXMucHJvcHMuY2hpbGRyZW4gJiYgKHRoaXMucHJvcHMucGF0aCB8fCB0aGlzLnByb3BzLmNvbXBvbmVudCB8fCB0aGlzLnByb3BzLmNvbXBvbmVudFBhdGgpKSB7XG4gICAgICAgICAgdGhpcy5sb2FkQ29tcG9uZW50KClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sIFtwYXRoLCBwYXRoU2hvd24sIHRoaXMucy5tYXRjaGVzXSlcbiAgfVxuXG4gIGhhc1N3aXRjaE1hdGNoID0gKCkgPT4gdGhpcy5zd2l0Y2hHcm91cC5zLnBhdGhTaG93biAmJiB0aGlzLnN3aXRjaEdyb3VwLnMucGF0aFNob3duID09IHRoaXMucGF0aElkKClcblxuICBwYXRoSWQoKSB7XG4gICAgY29uc3Qge2ZhbGxiYWNrfSA9IHRoaXMucFxuICAgIGNvbnN0IHtwYXRofSA9IHRoaXMucHJvcHNcbiAgICBsZXQgcGF0aElkXG5cbiAgICBpZiAoZmFsbGJhY2spIHtcbiAgICAgIHBhdGhJZCA9IFwiW0ZBTExCQUNLXVwiXG4gICAgfSBlbHNlIGlmIChwYXRoKSB7XG4gICAgICBwYXRoSWQgPSBwYXRoXG4gICAgfSBlbHNlIHtcbiAgICAgIHBhdGhJZCA9IFwiW1BBVEgtRU1QVFldXCJcbiAgICB9XG5cbiAgICByZXR1cm4gcGF0aElkXG4gIH1cblxuICBsb2FkTWF0Y2hlcygpIHtcbiAgICBjb25zdCB7bmV3Um91dGVQYXJ0cywgdH0gPSB0aGlzLnR0XG4gICAgY29uc3Qge2NvbXBvbmVudCwgcGF0aH0gPSB0aGlzLnByb3BzXG4gICAgY29uc3Qge2V4YWN0LCBpbmNsdWRlSW5QYXRoLCBmYWxsYmFja30gPSB0aGlzLnBcblxuICAgIGxldCBtYXRjaGVzID0gdHJ1ZVxuICAgIGNvbnN0IHBhcmFtcyA9IHt9XG4gICAgY29uc3QgY29tcG9uZW50UGF0aFBhcnRzID0gWy4uLnRoaXMuY3VycmVudFBhdGhdXG5cbiAgICB0aGlzLmxvZygoKSA9PiBbdGhpcy5wcm9wcy5wYXRoLCBcIlN0YXJ0IGdlbmVyYXRpbmcgY29tcG9uZW50IHBhdGhzXCIsIEpTT04uc3RyaW5naWZ5KGNvbXBvbmVudFBhdGhQYXJ0cyldKVxuXG4gICAgZm9yIChjb25zdCBwYXRoUGFydEluZGV4IGluIHRoaXMucGF0aFBhcnRzKSB7XG4gICAgICBjb25zdCBwYXRoUGFydCA9IHRoaXMucGF0aFBhcnRzW3BhdGhQYXJ0SW5kZXhdXG4gICAgICBjb25zdCB0cmFuc2xhdGVkUGF0aFBhcnQgPSB0KGByb3V0ZXMuJHtwYXRoUGFydH1gLCB7ZGVmYXVsdFZhbHVlOiBwYXRoUGFydH0pXG5cbiAgICAgIGlmICghKHBhdGhQYXJ0SW5kZXggaW4gdGhpcy5yb3V0ZVBhcnRzKSkge1xuICAgICAgICB0aGlzLmxvZygoKSA9PiBgTm8gbWF0Y2ggZm9yOiAke3BhdGhQYXJ0SW5kZXh9YClcbiAgICAgICAgbWF0Y2hlcyA9IGZhbHNlXG4gICAgICAgIGJyZWFrXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHJvdXRlUGFydCA9IGRlY29kZVVSSUNvbXBvbmVudCh0aGlzLnJvdXRlUGFydHNbcGF0aFBhcnRJbmRleF0pXG5cbiAgICAgIGlmIChwYXRoUGFydC5zdGFydHNXaXRoKFwiOlwiKSAmJiByb3V0ZVBhcnQpIHtcbiAgICAgICAgY29uc3QgcGFyYW1OYW1lID0gcGF0aFBhcnQuc2xpY2UoMSwgcGF0aFBhcnQubGVuZ3RoKVxuXG4gICAgICAgIHBhcmFtc1twYXJhbU5hbWVdID0gcm91dGVQYXJ0XG4gICAgICB9IGVsc2UgaWYgKHRyYW5zbGF0ZWRQYXRoUGFydCAhPSByb3V0ZVBhcnQpIHtcbiAgICAgICAgbWF0Y2hlcyA9IGZhbHNlXG4gICAgICAgIGJyZWFrXG4gICAgICB9IGVsc2UgaWYgKCFjb21wb25lbnQgJiYgaW5jbHVkZUluUGF0aCkge1xuICAgICAgICBjb21wb25lbnRQYXRoUGFydHMucHVzaChwYXRoUGFydClcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZXhhY3QgJiYgbmV3Um91dGVQYXJ0cy5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLmxvZygoKSA9PiBbXCJFeGFjdCBhbmQgbW9yZSByb3V0ZSBwYXJ0c1wiLCB7bmV3Um91dGVQYXJ0cywgcGF0aFBhcnRzOiB0aGlzLnBhdGhQYXJ0cywgcm91dGVQYXJ0czogdGhpcy5yb3V0ZVBhcnRzfV0pXG4gICAgICBtYXRjaGVzID0gZmFsc2VcbiAgICB9IGVsc2UgaWYgKG1hdGNoZXMgJiYgcGF0aCkge1xuICAgICAgbWF0Y2hlcyA9IHRydWVcbiAgICB9IGVsc2UgaWYgKHRoaXMucm91dGVQYXJ0cy5sZW5ndGggPT0gMCkge1xuICAgICAgbWF0Y2hlcyA9IHRydWVcbiAgICB9XG5cbiAgICBjb25zdCBtYXRjaElkID0gdGhpcy5wYXRoSWQoKVxuXG4gICAgaWYgKCFtYXRjaGVzICYmIGZhbGxiYWNrKSB7XG4gICAgICBtYXRjaGVzID0gdHJ1ZVxuICAgIH1cblxuICAgIHRoaXMubG9nKCgpID0+IFt0aGlzLnByb3BzLnBhdGgsIFwiRW5kIGdlbmVyYXRpbmcgY29tcG9uZW50IHBhdGhzXCIsIEpTT04uc3RyaW5naWZ5KGNvbXBvbmVudFBhdGhQYXJ0cyksIHttYXRjaGVzfV0pXG5cbiAgICBpZiAobWF0Y2hlcykge1xuICAgICAgaWYgKGNvbXBvbmVudCAmJiBpbmNsdWRlSW5QYXRoKSB7XG4gICAgICAgIGNvbXBvbmVudFBhdGhQYXJ0cy5wdXNoKGNvbXBvbmVudClcbiAgICAgIH1cblxuICAgICAgY29uc3QgbmV3UGFyYW1zID0gT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5jdXJyZW50UGFyYW1zLCBwYXJhbXMpIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgcHJlZmVyLW9iamVjdC1zcHJlYWRcblxuICAgICAgdGhpcy5zZXRJbnN0YW5jZSh7Y29tcG9uZW50UGF0aFBhcnRzLCBtYXRjaDoge3BhcmFtc30sIG5ld1BhcmFtc30pXG4gICAgICB0aGlzLnNldFN0YXRlKHttYXRjaGVzfSlcbiAgICAgIHRoaXMuc3dpdGNoR3JvdXA/LnNldFBhdGhNYXRjaGVkKG1hdGNoSWQsIHRydWUpXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2V0SW5zdGFuY2Uoe2NvbXBvbmVudFBhdGhQYXJ0czogbnVsbCwgbWF0Y2g6IG51bGwsIG5ld1BhcmFtczogbnVsbH0pXG4gICAgICB0aGlzLnNldFN0YXRlKHttYXRjaGVzfSlcbiAgICAgIHRoaXMuc3dpdGNoR3JvdXA/LnNldFBhdGhNYXRjaGVkKG1hdGNoSWQsIGZhbHNlKVxuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGxvYWRDb21wb25lbnQoKSB7XG4gICAgY29uc3QgYWN0dWFsQ29tcG9uZW50UGF0aCA9IHRoaXMucHJvcHMuY29tcG9uZW50UGF0aCB8fCB0aGlzLnR0LmNvbXBvbmVudFBhdGhQYXJ0cy5qb2luKFwiL1wiKVxuICAgIGxldCBDb21wb25lbnRcblxuICAgIHRoaXMubG9nKCgpID0+IFtcImxvYWRDb21wb25lbnRcIiwge2NvbXBvbmVudFBhdGg6IHRoaXMucHJvcHMuY29tcG9uZW50UGF0aCwgY29tcG9uZW50UGF0aFBhcnRzOiB0aGlzLmNvbXBvbmVudFBhdGhQYXJ0cywgYWN0dWFsQ29tcG9uZW50UGF0aH1dKVxuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGNvbXBvbmVudEltcG9ydCA9IGF3YWl0IHRoaXMudHQucmVxdWlyZUNvbXBvbmVudCh7cm91dGVEZWZpbml0aW9uOiB7Y29tcG9uZW50OiBhY3R1YWxDb21wb25lbnRQYXRofX0pXG5cbiAgICAgIENvbXBvbmVudCA9IGNvbXBvbmVudEltcG9ydFxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKGBDb3VsZG4ndCBmaW5kIGNvbXBvbmVudDogJHthY3R1YWxDb21wb25lbnRQYXRofWApXG5cbiAgICAgIHRocm93IGVycm9yXG4gICAgfVxuXG4gICAgdGhpcy5zZXRTdGF0ZSh7Q29tcG9uZW50LCBjb21wb25lbnROb3RGb3VuZDogIUNvbXBvbmVudH0pXG4gIH1cblxuICBsb2coY2FsbGJhY2tBcmdzKSB7XG4gICAgaWYgKHRoaXMuZGVidWcpIHtcbiAgICAgIGxldCBhcmdzID0gY2FsbGJhY2tBcmdzKClcblxuICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGFyZ3MpKSBhcmdzID0gW2FyZ3NdXG5cbiAgICAgIGNvbnNvbGUubG9nKC4uLmFyZ3MpXG4gICAgfVxuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IHtjb21wb25lbnRQYXRoUGFydHMsIG1hdGNoLCBuZXdQYXJhbXMsIG5ld1JvdXRlUGFydHN9ID0gdGhpcy50dFxuICAgIGNvbnN0IHtjaGlsZHJlbiwgY29tcG9uZW50LCBwYXRofSA9IHRoaXMucHJvcHNcbiAgICBjb25zdCB7Q29tcG9uZW50LCBjb21wb25lbnROb3RGb3VuZCwgbWF0Y2hlc30gPSB0aGlzLnNcblxuICAgIGlmICghbWF0Y2hlcyB8fCAhdGhpcy5oYXNTd2l0Y2hNYXRjaCgpKSB7XG4gICAgICAvLyBSb3V0ZSBpc24ndCBtYXRjaGluZyBhbmQgc2hvdWxkbid0IGJlIHJlbmRlcmVkIGF0IGFsbC5cbiAgICAgIHJldHVybiBudWxsXG4gICAgfVxuXG4gICAgaWYgKCFDb21wb25lbnQgJiYgIWNoaWxkcmVuICYmICFjb21wb25lbnROb3RGb3VuZCkge1xuICAgICAgLy8gUm91dGUgaXMgbWF0Y2hpbmcgYnV0IGhhc24ndCBiZWVuIGxvYWRlZCB5ZXQuXG4gICAgICByZXR1cm4gKFxuICAgICAgICA8ZGl2PlxuICAgICAgICAgIHtcIkxvYWRpbmcgXCJ9XG4gICAgICAgICAge2NvbXBvbmVudCB8fCB0aGlzLnByb3BzLmNvbXBvbmVudFBhdGggfHwgY29tcG9uZW50UGF0aFBhcnRzLmpvaW4oXCIvXCIpfVxuICAgICAgICA8L2Rpdj5cbiAgICAgIClcbiAgICB9XG5cbiAgICBpZiAoIUNvbXBvbmVudCAmJiAhY2hpbGRyZW4gJiYgY29tcG9uZW50Tm90Rm91bmQpIHtcbiAgICAgIC8vIERvbid0IHJlbmRlciBhbnl0aGluZyBpZiB0aGUgY29tcG9uZW50IGNvdWxkbid0IGJlIGZvdW5kLlxuICAgICAgcmV0dXJuIG51bGxcbiAgICB9XG5cbiAgICByZXR1cm4gKFxuICAgICAgPEN1cnJlbnRQYXRoQ29udGV4dC5Qcm92aWRlciB2YWx1ZT17Y29tcG9uZW50UGF0aFBhcnRzfT5cbiAgICAgICAgPFJvdXRlQ29udGV4dC5Qcm92aWRlciB2YWx1ZT17bmV3Um91dGVQYXJ0cy5qb2luKFwiL1wiKX0+XG4gICAgICAgICAgPFBhcmFtc0NvbnRleHQuUHJvdmlkZXIgdmFsdWU9e25ld1BhcmFtc30+XG4gICAgICAgICAgICA8U3dpdGNoIG5hbWU9e2Byb3V0ZS1ncm91cC0ke3BhdGh9YH0gc2luZ2xlPXtmYWxzZX0+XG4gICAgICAgICAgICAgIHtDb21wb25lbnQgJiYgPENvbXBvbmVudCBtYXRjaD17bWF0Y2h9IC8+fVxuICAgICAgICAgICAgICB7Y2hpbGRyZW59XG4gICAgICAgICAgICA8L1N3aXRjaD5cbiAgICAgICAgICA8L1BhcmFtc0NvbnRleHQuUHJvdmlkZXI+XG4gICAgICAgIDwvUm91dGVDb250ZXh0LlByb3ZpZGVyPlxuICAgICAgPC9DdXJyZW50UGF0aENvbnRleHQuUHJvdmlkZXI+XG4gICAgKVxuICB9XG59KSlcblxuZXhwb3J0IHtSZXF1aXJlQ29tcG9uZW50Q29udGV4dCwgUm91dGVDb250ZXh0LCBTd2l0Y2gsIHVzZVBhcmFtc31cbmV4cG9ydCBkZWZhdWx0IFJvdXRlXG4iXX0=
235
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiL3NyYy8iLCJzb3VyY2VzIjpbInJvdXRlci9yb3V0ZS5qc3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLHNEQUFzRDtBQUN0RCxPQUFPLEtBQUssRUFBRSxFQUFDLGFBQWEsRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLGVBQWUsRUFBRSxPQUFPLEVBQUMsTUFBTSxPQUFPLENBQUE7QUFDM0YsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLDRDQUE0QyxDQUFBO0FBQ3pFLE9BQU8sTUFBTSxFQUFFLEVBQUMsb0JBQW9CLEVBQUMsTUFBTSxVQUFVLENBQUE7QUFDckQsT0FBTyxFQUFDLGNBQWMsRUFBRSxxQkFBcUIsRUFBQyxNQUFNLHVDQUF1QyxDQUFBO0FBQzNGLE9BQU8sYUFBYSxNQUFNLG1CQUFtQixDQUFBO0FBQzdDLE9BQU8sU0FBUyxNQUFNLFlBQVksQ0FBQTtBQUNsQyxPQUFPLElBQUksTUFBTSxpQ0FBaUMsQ0FBQTtBQUNsRCxPQUFPLGNBQWMsTUFBTSxrQkFBa0IsQ0FBQTtBQUM3QyxPQUFPLE9BQU8sTUFBTSxtQ0FBbUMsQ0FBQTtBQUV2RCxNQUFNLGtCQUFrQixHQUFHLGFBQWEsQ0FBQyxFQUFFLENBQUMsQ0FBQTtBQUM1QyxNQUFNLGFBQWEsR0FBRyxhQUFhLENBQUMsRUFBRSxDQUFDLENBQUE7QUFDdkMsTUFBTSx1QkFBdUIsR0FBRyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUE7QUFDbkQsTUFBTSxZQUFZLEdBQUcsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFBO0FBQ3hDLE1BQU0sU0FBUyxHQUFHLEdBQUcsRUFBRSxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsQ0FBQTtBQUVqRCxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sS0FBTSxTQUFRLGFBQWE7SUFDakUsTUFBTSxDQUFDLFlBQVksR0FBRztRQUNwQixLQUFLLEVBQUUsS0FBSztRQUNaLFFBQVEsRUFBRSxLQUFL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LElBQUksRUFBRSxlQUFlLElBQUksRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLGFBQy9DLFNBQVMsSUFBSSxLQUFDLFNBQVMsSUFBQyxLQUFLLEVBQUUsS0FBSyxHQUFJLEVBQ3hDLFFBQVEsSUFDRixHQUNjLEdBQ0gsR0FDSSxDQUMvQixDQUFBO0lBQ0gsQ0FBQztDQUNGLENBQUMsQ0FBQyxDQUFBO0FBRUgsT0FBTyxFQUFDLHVCQUF1QixFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFDLENBQUE7QUFDakUsZUFBZSxLQUFLLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSByZWFjdC9qc3gtbWF4LWRlcHRoLCBzb3J0LWltcG9ydHMgKi9cbmltcG9ydCBSZWFjdCwge2NyZWF0ZUNvbnRleHQsIHVzZUNvbnRleHQsIHVzZUVmZmVjdCwgdXNlTGF5b3V0RWZmZWN0LCB1c2VNZW1vfSBmcm9tIFwicmVhY3RcIlxuaW1wb3J0IHtzaGFwZUNvbXBvbmVudH0gZnJvbSBcInNldC1zdGF0ZS1jb21wYXJlL2J1aWxkL3NoYXBlLWNvbXBvbmVudC5qc1wiXG5pbXBvcnQgU3dpdGNoLCB7Q3VycmVudFN3aXRjaENvbnRleHR9IGZyb20gXCIuL3N3aXRjaFwiXG5pbXBvcnQge2FycmF5RGlmZmVyZW50LCBzaW1wbGVPYmplY3REaWZmZXJlbnR9IGZyb20gXCJzZXQtc3RhdGUtY29tcGFyZS9idWlsZC9kaWZmLXV0aWxzLmpzXCJcbmltcG9ydCBCYXNlQ29tcG9uZW50IGZyb20gXCIuLi9iYXNlLWNvbXBvbmVudFwiXG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCJcbmltcG9ydCBtZW1vIGZyb20gXCJzZXQtc3RhdGUtY29tcGFyZS9idWlsZC9tZW1vLmpzXCJcbmltcG9ydCBwcm9wVHlwZXNFeGFjdCBmcm9tIFwicHJvcC10eXBlcy1leGFjdFwiXG5pbXBvcnQgdXNlSTE4biBmcm9tIFwiaTE4bi1vbi1zdGVyb2lkcy9zcmMvdXNlLWkxOG4ubWpzXCJcblxuY29uc3QgQ3VycmVudFBhdGhDb250ZXh0ID0gY3JlYXRlQ29udGV4dChbXSlcbmNvbnN0IFBhcmFtc0NvbnRleHQgPSBjcmVhdGVDb250ZXh0KHt9KVxuY29uc3QgUmVxdWlyZUNvbXBvbmVudENvbnRleHQgPSBjcmVhdGVDb250ZXh0KG51bGwpXG5jb25zdCBSb3V0ZUNvbnRleHQgPSBjcmVhdGVDb250ZXh0KG51bGwpXG5jb25zdCB1c2VQYXJhbXMgPSAoKSA9PiB1c2VDb250ZXh0KFBhcmFtc0NvbnRleHQpXG5cbmNvbnN0IFJvdXRlID0gbWVtbyhzaGFwZUNvbXBvbmVudChjbGFzcyBSb3V0ZSBleHRlbmRzIEJhc2VDb21wb25lbnQge1xuICBzdGF0aWMgZGVmYXVsdFByb3BzID0ge1xuICAgIGV4YWN0OiBmYWxzZSxcbiAgICBmYWxsYmFjazogZmFsc2UsXG4gICAgaW5jbHVkZUluUGF0aDogdHJ1ZVxuICB9XG5cbiAgc3RhdGljIHByb3BUeXBlcyA9IHByb3BUeXBlc0V4YWN0KHtcbiAgICBjaGlsZHJlbjogUHJvcFR5cGVzLmFueSxcbiAgICBjb21wb25lbnQ6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgY29tcG9uZW50UGF0aDogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBleGFjdDogUHJvcFR5cGVzLmJvb2wuaXNSZXF1aXJlZCxcbiAgICBmYWxsYmFjazogUHJvcFR5cGVzLmJvb2wuaXNSZXF1aXJlZCxcbiAgICBpbmNsdWRlSW5QYXRoOiBQcm9wVHlwZXMuYm9vbC5pc1JlcXVpcmVkLFxuICAgIG9uTWF0Y2g6IFByb3BUeXBlcy5mdW5jLFxuICAgIHBhdGg6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5pbnN0YW5jZU9mKFJlZ0V4cCldKVxuICB9KVxuXG4gIG1hdGNoID0gbnVsbFxuICBsb2FkQ29tcG9uZW50UmVxdWVzdElkID0gMFxuICBjb21wb25lbnRQYXRoUGFydHMgPSBbXVxuICBsYXN0TWF0Y2hVcGRhdGUgPSAwXG4gIG5ld1BhcmFtcyA9IG51bGxcbiAgcGF0aFBhcnRzID0gbnVsbFxuXG4gIHNldHVwKCkge1xuICAgIGNvbnN0IHt0fSA9IHVzZUkxOG4oe25hbWVzcGFjZTogXCJqcy5hcGlfbWFrZXIucm91dGVyLnJvdXRlXCJ9KVxuICAgIGNvbnN0IHtwYXRofSA9IHRoaXMucHJvcHNcbiAgICBjb25zdCB7cGF0aHNNYXRjaGVkLCBzd2l0Y2hHcm91cH0gPSB1c2VDb250ZXh0KEN1cnJlbnRTd2l0Y2hDb250ZXh0KVxuICAgIGNvbnN0IGdpdmVuUm91dGUgPSB1c2VDb250ZXh0KFJvdXRlQ29udGV4dClcbiAgICBjb25zdCB7cGF0aFNob3dufSA9IHN3aXRjaEdyb3VwLnNcblxuICAgIHRoaXMuZGVidWcgPSBmYWxzZVxuICAgIHRoaXMubG9nKCgpID0+ICh7Z2l2ZW5Sb3V0ZX0pKVxuICAgIHRoaXMudCA9IHRcblxuICAgIHRoaXMucmVxdWlyZUNvbXBvbmVudCA9IHVzZUNvbnRleHQoUmVxdWlyZUNvbXBvbmVudENvbnRleHQpXG4gICAgdGhpcy5jdXJyZW50UGFyYW1zID0gdXNlQ29udGV4dChQYXJhbXNDb250ZXh0KVxuICAgIHRoaXMuY3VycmVudFBhdGggPSB1c2VDb250ZXh0KEN1cnJlbnRQYXRoQ29udGV4dClcbiAgICB0aGlzLnN3aXRjaEdyb3VwID0gc3dpdGNoR3JvdXBcbiAgICB0aGlzLnJvdXRlUGFydHMgPSB1c2VNZW1vKCgpID0+IGdpdmVuUm91dGU/LnNwbGl0KFwiL1wiKSwgW3BhdGgsIGdpdmVuUm91dGVdKVxuICAgIHRoaXMucGF0aFBhcnRzID0gdXNlTWVtbygoKSA9PiBwYXRoPy5zcGxpdChcIi9cIiksIFtwYXRoXSlcblxuICAgIHRoaXMubmV3Um91dGVQYXJ0cyA9IHVzZU1lbW8oXG4gICAgICAoKSA9PiB7XG4gICAgICAgIGlmICghcGF0aCkge1xuICAgICAgICAgIGlmIChnaXZlblJvdXRlID09IFwiXCIpIHtcbiAgICAgICAgICAgIHJldHVybiBbXVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5yb3V0ZVBhcnRzXG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMucm91dGVQYXJ0cy5zbGljZSh0aGlzLnBhdGhQYXJ0cy5sZW5ndGgsIHRoaXMucm91dGVQYXJ0cy5sZW5ndGgpXG4gICAgICB9LFxuICAgICAgW2dpdmVuUm91dGVdLmNvbmNhdCh0aGlzLnBhdGhQYXJ0cylcbiAgICApXG5cbiAgICB0aGlzLnVzZVN0YXRlcyh7Q29tcG9uZW50OiBudWxsLCBjb21wb25lbnROb3RGb3VuZDogbnVsbCwgbGFzdE1hdGNoVXBkYXRlOiAwLCBtYXRjaGVzOiBmYWxzZX0pXG5cbiAgICB1c2VMYXlvdXRFZmZlY3QoKCkgPT4ge1xuICAgICAgdGhpcy5sb2FkTWF0Y2hlcygpXG4gICAgfSwgW2dpdmVuUm91dGUsIHBhdGgsIHBhdGhzTWF0Y2hlZF0pXG5cbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgaWYgKHRoaXMuaGFzU3dpdGNoTWF0Y2goKSAmJiAhdGhpcy5zLkNvbXBvbmVudCAmJiB0aGlzLnMubWF0Y2hlcykge1xuICAgICAgICBpZiAodGhpcy5wcm9wcy5vbk1hdGNoKSB7XG4gICAgICAgICAgdGhpcy5wcm9wcy5vbk1hdGNoKClcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGhpcy5wcm9wcy5jaGlsZHJlbiAmJiAodGhpcy5wcm9wcy5wYXRoIHx8IHRoaXMucHJvcHMuY29tcG9uZW50IHx8IHRoaXMucHJvcHMuY29tcG9uZW50UGF0aCkpIHtcbiAgICAgICAgICB0aGlzLmxvYWRDb21wb25lbnQoKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICB0aGlzLmxvYWRDb21wb25lbnRSZXF1ZXN0SWQgKz0gMVxuICAgICAgfVxuICAgIH0sIFtwYXRoLCBwYXRoU2hvd24sIHRoaXMucy5tYXRjaGVzXSlcbiAgfVxuXG4gIGhhc1N3aXRjaE1hdGNoID0gKCkgPT4gdGhpcy5zd2l0Y2hHcm91cC5zLnBhdGhTaG93biAmJiB0aGlzLnN3aXRjaEdyb3VwLnMucGF0aFNob3duID09IHRoaXMucGF0aElkKClcblxuICBwYXRoSWQoKSB7XG4gICAgY29uc3Qge2ZhbGxiYWNrfSA9IHRoaXMucFxuICAgIGNvbnN0IHtwYXRofSA9IHRoaXMucHJvcHNcbiAgICBsZXQgcGF0aElkXG5cbiAgICBpZiAoZmFsbGJhY2spIHtcbiAgICAgIHBhdGhJZCA9IFwiW0ZBTExCQUNLXVwiXG4gICAgfSBlbHNlIGlmIChwYXRoKSB7XG4gICAgICBwYXRoSWQgPSBwYXRoXG4gICAgfSBlbHNlIHtcbiAgICAgIHBhdGhJZCA9IFwiW1BBVEgtRU1QVFldXCJcbiAgICB9XG5cbiAgICByZXR1cm4gcGF0aElkXG4gIH1cblxuICBsb2FkTWF0Y2hlcygpIHtcbiAgICBjb25zdCB7bmV3Um91dGVQYXJ0cywgdH0gPSB0aGlzLnR0XG4gICAgY29uc3Qge2NvbXBvbmVudCwgcGF0aH0gPSB0aGlzLnByb3BzXG4gICAgY29uc3Qge2V4YWN0LCBpbmNsdWRlSW5QYXRoLCBmYWxsYmFja30gPSB0aGlzLnBcblxuICAgIGxldCBtYXRjaGVzID0gdHJ1ZVxuICAgIGNvbnN0IHBhcmFtcyA9IHt9XG4gICAgY29uc3QgY29tcG9uZW50UGF0aFBhcnRzID0gWy4uLnRoaXMuY3VycmVudFBhdGhdXG5cbiAgICB0aGlzLmxvZygoKSA9PiBbdGhpcy5wcm9wcy5wYXRoLCBcIlN0YXJ0IGdlbmVyYXRpbmcgY29tcG9uZW50IHBhdGhzXCIsIEpTT04uc3RyaW5naWZ5KGNvbXBvbmVudFBhdGhQYXJ0cyldKVxuXG4gICAgZm9yIChjb25zdCBwYXRoUGFydEluZGV4IGluIHRoaXMucGF0aFBhcnRzKSB7XG4gICAgICBjb25zdCBwYXRoUGFydCA9IHRoaXMucGF0aFBhcnRzW3BhdGhQYXJ0SW5kZXhdXG4gICAgICBjb25zdCB0cmFuc2xhdGVkUGF0aFBhcnQgPSB0KGByb3V0ZXMuJHtwYXRoUGFydH1gLCB7ZGVmYXVsdFZhbHVlOiBwYXRoUGFydH0pXG5cbiAgICAgIGlmICghKHBhdGhQYXJ0SW5kZXggaW4gdGhpcy5yb3V0ZVBhcnRzKSkge1xuICAgICAgICB0aGlzLmxvZygoKSA9PiBgTm8gbWF0Y2ggZm9yOiAke3BhdGhQYXJ0SW5kZXh9YClcbiAgICAgICAgbWF0Y2hlcyA9IGZhbHNlXG4gICAgICAgIGJyZWFrXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHJvdXRlUGFydCA9IGRlY29kZVVSSUNvbXBvbmVudCh0aGlzLnJvdXRlUGFydHNbcGF0aFBhcnRJbmRleF0pXG5cbiAgICAgIGlmIChwYXRoUGFydC5zdGFydHNXaXRoKFwiOlwiKSAmJiByb3V0ZVBhcnQpIHtcbiAgICAgICAgY29uc3QgcGFyYW1OYW1lID0gcGF0aFBhcnQuc2xpY2UoMSwgcGF0aFBhcnQubGVuZ3RoKVxuXG4gICAgICAgIHBhcmFtc1twYXJhbU5hbWVdID0gcm91dGVQYXJ0XG4gICAgICB9IGVsc2UgaWYgKHRyYW5zbGF0ZWRQYXRoUGFydCAhPSByb3V0ZVBhcnQpIHtcbiAgICAgICAgbWF0Y2hlcyA9IGZhbHNlXG4gICAgICAgIGJyZWFrXG4gICAgICB9IGVsc2UgaWYgKCFjb21wb25lbnQgJiYgaW5jbHVkZUluUGF0aCkge1xuICAgICAgICBjb21wb25lbnRQYXRoUGFydHMucHVzaChwYXRoUGFydClcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZXhhY3QgJiYgbmV3Um91dGVQYXJ0cy5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLmxvZygoKSA9PiBbXCJFeGFjdCBhbmQgbW9yZSByb3V0ZSBwYXJ0c1wiLCB7bmV3Um91dGVQYXJ0cywgcGF0aFBhcnRzOiB0aGlzLnBhdGhQYXJ0cywgcm91dGVQYXJ0czogdGhpcy5yb3V0ZVBhcnRzfV0pXG4gICAgICBtYXRjaGVzID0gZmFsc2VcbiAgICB9IGVsc2UgaWYgKG1hdGNoZXMgJiYgcGF0aCkge1xuICAgICAgbWF0Y2hlcyA9IHRydWVcbiAgICB9IGVsc2UgaWYgKHRoaXMucm91dGVQYXJ0cy5sZW5ndGggPT0gMCkge1xuICAgICAgbWF0Y2hlcyA9IHRydWVcbiAgICB9XG5cbiAgICBjb25zdCBtYXRjaElkID0gdGhpcy5wYXRoSWQoKVxuXG4gICAgaWYgKCFtYXRjaGVzICYmIGZhbGxiYWNrKSB7XG4gICAgICBtYXRjaGVzID0gdHJ1ZVxuICAgIH1cblxuICAgIHRoaXMubG9nKCgpID0+IFt0aGlzLnByb3BzLnBhdGgsIFwiRW5kIGdlbmVyYXRpbmcgY29tcG9uZW50IHBhdGhzXCIsIEpTT04uc3RyaW5naWZ5KGNvbXBvbmVudFBhdGhQYXJ0cyksIHttYXRjaGVzfV0pXG5cbiAgICBpZiAobWF0Y2hlcykge1xuICAgICAgaWYgKGNvbXBvbmVudCAmJiBpbmNsdWRlSW5QYXRoKSB7XG4gICAgICAgIGNvbXBvbmVudFBhdGhQYXJ0cy5wdXNoKGNvbXBvbmVudClcbiAgICAgIH1cblxuICAgICAgY29uc3QgbmV3UGFyYW1zID0gT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5jdXJyZW50UGFyYW1zLCBwYXJhbXMpIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgcHJlZmVyLW9iamVjdC1zcHJlYWRcblxuICAgICAgdGhpcy51cGRhdGVSb3V0ZU1hdGNoU3RhdGUoe2NvbXBvbmVudFBhdGhQYXJ0cywgbWF0Y2g6IHtwYXJhbXN9LCBtYXRjaGVzLCBuZXdQYXJhbXN9KVxuICAgICAgdGhpcy5zd2l0Y2hHcm91cD8uc2V0UGF0aE1hdGNoZWQobWF0Y2hJZCwgdHJ1ZSlcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy51cGRhdGVSb3V0ZU1hdGNoU3RhdGUoe2NvbXBvbmVudFBhdGhQYXJ0czogbnVsbCwgbWF0Y2g6IG51bGwsIG1hdGNoZXMsIG5ld1BhcmFtczogbnVsbH0pXG4gICAgICB0aGlzLnN3aXRjaEdyb3VwPy5zZXRQYXRoTWF0Y2hlZChtYXRjaElkLCBmYWxzZSlcbiAgICB9XG4gIH1cblxuICB1cGRhdGVSb3V0ZU1hdGNoU3RhdGUoe2NvbXBvbmVudFBhdGhQYXJ0cywgbWF0Y2gsIG1hdGNoZXMsIG5ld1BhcmFtc30pIHtcbiAgICBjb25zdCByb3V0ZURhdGFDaGFuZ2VkID0gdGhpcy5yb3V0ZURhdGFDaGFuZ2VkKHtjb21wb25lbnRQYXRoUGFydHMsIG1hdGNoLCBuZXdQYXJhbXN9KVxuXG4gICAgdGhpcy5zZXRJbnN0YW5jZSh7Y29tcG9uZW50UGF0aFBhcnRzLCBtYXRjaCwgbmV3UGFyYW1zfSlcbiAgICBpZiAocm91dGVEYXRhQ2hhbmdlZCB8fCB0aGlzLnMubWF0Y2hlcyAhPSBtYXRjaGVzKSB7XG4gICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgbGFzdE1hdGNoVXBkYXRlOiByb3V0ZURhdGFDaGFuZ2VkID8gdGhpcy5sYXN0TWF0Y2hVcGRhdGUgKz0gMSA6IHRoaXMucy5sYXN0TWF0Y2hVcGRhdGUsXG4gICAgICAgIG1hdGNoZXNcbiAgICAgIH0pXG4gICAgfVxuICB9XG5cbiAgcm91dGVEYXRhQ2hhbmdlZCh7Y29tcG9uZW50UGF0aFBhcnRzLCBtYXRjaCwgbmV3UGFyYW1zfSkge1xuICAgIGNvbnN0IGN1cnJlbnRDb21wb25lbnRQYXRoUGFydHMgPSB0aGlzLmNvbXBvbmVudFBhdGhQYXJ0cyB8fCBudWxsXG4gICAgY29uc3QgY3VycmVudE1hdGNoUGFyYW1zID0gdGhpcy5tYXRjaD8ucGFyYW1zIHx8IG51bGxcbiAgICBjb25zdCBuZXh0TWF0Y2hQYXJhbXMgPSBtYXRjaD8ucGFyYW1zIHx8IG51bGxcbiAgICBjb25zdCBjb21wb25lbnRQYXRoUGFydHNDaGFuZ2VkID0gdGhpcy5udWxsYWJsZUFycmF5RGlmZmVyZW50KGN1cnJlbnRDb21wb25lbnRQYXRoUGFydHMsIGNvbXBvbmVudFBhdGhQYXJ0cylcbiAgICBjb25zdCBtYXRjaENoYW5nZWQgPSB0aGlzLm51bGxhYmxlT2JqZWN0RGlmZmVyZW50KGN1cnJlbnRNYXRjaFBhcmFtcywgbmV4dE1hdGNoUGFyYW1zKVxuICAgIGNvbnN0IG5ld1BhcmFtc0NoYW5nZWQgPSB0aGlzLm51bGxhYmxlT2JqZWN0RGlmZmVyZW50KHRoaXMubmV3UGFyYW1zLCBuZXdQYXJhbXMpXG5cbiAgICByZXR1cm4gY29tcG9uZW50UGF0aFBhcnRzQ2hhbmdlZCB8fCBtYXRjaENoYW5nZWQgfHwgbmV3UGFyYW1zQ2hhbmdlZFxuICB9XG5cbiAgbnVsbGFibGVBcnJheURpZmZlcmVudCh2YWx1ZSwgbmV4dFZhbHVlKSB7XG4gICAgaWYgKHZhbHVlID09PSBudWxsIHx8IG5leHRWYWx1ZSA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuIHZhbHVlICE9IG5leHRWYWx1ZVxuICAgIH1cblxuICAgIHJldHVybiBhcnJheURpZmZlcmVudCh2YWx1ZSwgbmV4dFZhbHVlKVxuICB9XG5cbiAgbnVsbGFibGVPYmplY3REaWZmZXJlbnQodmFsdWUsIG5leHRWYWx1ZSkge1xuICAgIGlmICh2YWx1ZSA9PT0gbnVsbCB8fCBuZXh0VmFsdWUgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiB2YWx1ZSAhPSBuZXh0VmFsdWVcbiAgICB9XG5cbiAgICByZXR1cm4gc2ltcGxlT2JqZWN0RGlmZmVyZW50KHZhbHVlLCBuZXh0VmFsdWUsIHRydWUpXG4gIH1cblxuICBhc3luYyBsb2FkQ29tcG9uZW50KCkge1xuICAgIC8vIElnbm9yZSBsYXRlIGFzeW5jIHJvdXRlLWNvbXBvbmVudCBsb2FkcyBhZnRlciBhIHJvdXRlIHN3aXRjaCBvciBkaXNjYXJkZWQgbW91bnQuXG4gICAgY29uc3QgcmVxdWVzdElkID0gdGhpcy5sb2FkQ29tcG9uZW50UmVxdWVzdElkICsgMVxuXG4gICAgdGhpcy5sb2FkQ29tcG9uZW50UmVxdWVzdElkID0gcmVxdWVzdElkXG4gICAgY29uc3QgYWN0dWFsQ29tcG9uZW50UGF0aCA9IHRoaXMucHJvcHMuY29tcG9uZW50UGF0aCB8fCB0aGlzLnR0LmNvbXBvbmVudFBhdGhQYXJ0cy5qb2luKFwiL1wiKVxuICAgIGxldCBDb21wb25lbnRcblxuICAgIHRoaXMubG9nKCgpID0+IFtcImxvYWRDb21wb25lbnRcIiwge2NvbXBvbmVudFBhdGg6IHRoaXMucHJvcHMuY29tcG9uZW50UGF0aCwgY29tcG9uZW50UGF0aFBhcnRzOiB0aGlzLmNvbXBvbmVudFBhdGhQYXJ0cywgYWN0dWFsQ29tcG9uZW50UGF0aH1dKVxuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGNvbXBvbmVudEltcG9ydCA9IGF3YWl0IHRoaXMudHQucmVxdWlyZUNvbXBvbmVudCh7cm91dGVEZWZpbml0aW9uOiB7Y29tcG9uZW50OiBhY3R1YWxDb21wb25lbnRQYXRofX0pXG5cbiAgICAgIENvbXBvbmVudCA9IGNvbXBvbmVudEltcG9ydFxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKGBDb3VsZG4ndCBmaW5kIGNvbXBvbmVudDogJHthY3R1YWxDb21wb25lbnRQYXRofWApXG5cbiAgICAgIHRocm93IGVycm9yXG4gICAgfVxuXG4gICAgaWYgKHJlcXVlc3RJZCAhPSB0aGlzLmxvYWRDb21wb25lbnRSZXF1ZXN0SWQpIHJldHVyblxuXG4gICAgdGhpcy5zZXRTdGF0ZSh7Q29tcG9uZW50LCBjb21wb25lbnROb3RGb3VuZDogIUNvbXBvbmVudH0pXG4gIH1cblxuICBsb2coY2FsbGJhY2tBcmdzKSB7XG4gICAgaWYgKHRoaXMuZGVidWcpIHtcbiAgICAgIGxldCBhcmdzID0gY2FsbGJhY2tBcmdzKClcblxuICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGFyZ3MpKSBhcmdzID0gW2FyZ3NdXG5cbiAgICAgIGNvbnNvbGUubG9nKC4uLmFyZ3MpXG4gICAgfVxuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IHtjb21wb25lbnRQYXRoUGFydHMsIG1hdGNoLCBuZXdQYXJhbXMsIG5ld1JvdXRlUGFydHN9ID0gdGhpcy50dFxuICAgIGNvbnN0IHtjaGlsZHJlbiwgY29tcG9uZW50LCBwYXRofSA9IHRoaXMucHJvcHNcbiAgICBjb25zdCB7Q29tcG9uZW50LCBjb21wb25lbnROb3RGb3VuZCwgbWF0Y2hlc30gPSB0aGlzLnNcblxuICAgIGlmICghbWF0Y2hlcyB8fCAhdGhpcy5oYXNTd2l0Y2hNYXRjaCgpKSB7XG4gICAgICAvLyBSb3V0ZSBpc24ndCBtYXRjaGluZyBhbmQgc2hvdWxkbid0IGJlIHJlbmRlcmVkIGF0IGFsbC5cbiAgICAgIHJldHVybiBudWxsXG4gICAgfVxuXG4gICAgaWYgKCFDb21wb25lbnQgJiYgIWNoaWxkcmVuICYmICFjb21wb25lbnROb3RGb3VuZCkge1xuICAgICAgLy8gUm91dGUgaXMgbWF0Y2hpbmcgYnV0IGhhc24ndCBiZWVuIGxvYWRlZCB5ZXQuXG4gICAgICByZXR1cm4gKFxuICAgICAgICA8ZGl2PlxuICAgICAgICAgIHtcIkxvYWRpbmcgXCJ9XG4gICAgICAgICAge2NvbXBvbmVudCB8fCB0aGlzLnByb3BzLmNvbXBvbmVudFBhdGggfHwgY29tcG9uZW50UGF0aFBhcnRzLmpvaW4oXCIvXCIpfVxuICAgICAgICA8L2Rpdj5cbiAgICAgIClcbiAgICB9XG5cbiAgICBpZiAoIUNvbXBvbmVudCAmJiAhY2hpbGRyZW4gJiYgY29tcG9uZW50Tm90Rm91bmQpIHtcbiAgICAgIC8vIERvbid0IHJlbmRlciBhbnl0aGluZyBpZiB0aGUgY29tcG9uZW50IGNvdWxkbid0IGJlIGZvdW5kLlxuICAgICAgcmV0dXJuIG51bGxcbiAgICB9XG5cbiAgICByZXR1cm4gKFxuICAgICAgPEN1cnJlbnRQYXRoQ29udGV4dC5Qcm92aWRlciB2YWx1ZT17Y29tcG9uZW50UGF0aFBhcnRzfT5cbiAgICAgICAgPFJvdXRlQ29udGV4dC5Qcm92aWRlciB2YWx1ZT17bmV3Um91dGVQYXJ0cy5qb2luKFwiL1wiKX0+XG4gICAgICAgICAgPFBhcmFtc0NvbnRleHQuUHJvdmlkZXIgdmFsdWU9e25ld1BhcmFtc30+XG4gICAgICAgICAgICA8U3dpdGNoIG5hbWU9e2Byb3V0ZS1ncm91cC0ke3BhdGh9YH0gc2luZ2xlPXtmYWxzZX0+XG4gICAgICAgICAgICAgIHtDb21wb25lbnQgJiYgPENvbXBvbmVudCBtYXRjaD17bWF0Y2h9IC8+fVxuICAgICAgICAgICAgICB7Y2hpbGRyZW59XG4gICAgICAgICAgICA8L1N3aXRjaD5cbiAgICAgICAgICA8L1BhcmFtc0NvbnRleHQuUHJvdmlkZXI+XG4gICAgICAgIDwvUm91dGVDb250ZXh0LlByb3ZpZGVyPlxuICAgICAgPC9DdXJyZW50UGF0aENvbnRleHQuUHJvdmlkZXI+XG4gICAgKVxuICB9XG59KSlcblxuZXhwb3J0IHtSZXF1aXJlQ29tcG9uZW50Q29udGV4dCwgUm91dGVDb250ZXh0LCBTd2l0Y2gsIHVzZVBhcmFtc31cbmV4cG9ydCBkZWZhdWx0IFJvdXRlXG4iXX0=