@mnaoumov/obsidian-lib 10.6.0 → 10.7.0

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 (77) hide show
  1. package/command-handlers/open-discussion-command-handler/package.json +6 -0
  2. package/command-handlers/open-feature-request-command-handler/package.json +6 -0
  3. package/command-handlers/open-git-hub-command-handler/package.json +6 -0
  4. package/components/style-sheet-component/package.json +6 -0
  5. package/dist/lib/cjs/__merged.cjs +42 -1
  6. package/dist/lib/cjs/__merged.d.cts +9 -0
  7. package/dist/lib/cjs/broken-link-candidates.cjs +366 -0
  8. package/dist/lib/cjs/broken-link-candidates.d.cts +181 -0
  9. package/dist/lib/cjs/command-handlers/index.cjs +10 -1
  10. package/dist/lib/cjs/command-handlers/index.d.cts +3 -0
  11. package/dist/lib/cjs/command-handlers/open-bug-report-command-handler.cjs +9 -12
  12. package/dist/lib/cjs/command-handlers/open-bug-report-command-handler.d.cts +6 -8
  13. package/dist/lib/cjs/command-handlers/open-discussion-command-handler.cjs +127 -0
  14. package/dist/lib/cjs/command-handlers/open-discussion-command-handler.d.cts +45 -0
  15. package/dist/lib/cjs/command-handlers/open-feature-request-command-handler.cjs +119 -0
  16. package/dist/lib/cjs/command-handlers/open-feature-request-command-handler.d.cts +33 -0
  17. package/dist/lib/cjs/command-handlers/open-git-hub-command-handler.cjs +121 -0
  18. package/dist/lib/cjs/command-handlers/open-git-hub-command-handler.d.cts +43 -0
  19. package/dist/lib/cjs/components/index.cjs +4 -1
  20. package/dist/lib/cjs/components/index.d.cts +1 -0
  21. package/dist/lib/cjs/components/style-sheet-component.cjs +198 -0
  22. package/dist/lib/cjs/components/style-sheet-component.d.cts +79 -0
  23. package/dist/lib/cjs/data-stores/data-store-transport.cjs +7 -4
  24. package/dist/lib/cjs/data-stores/data-store-transport.d.cts +1 -1
  25. package/dist/lib/cjs/data-stores/shared-data-store.cjs +1 -1
  26. package/dist/lib/cjs/data-stores/shared-data-store.d.cts +1 -1
  27. package/dist/lib/cjs/desktop-git-runner.cjs +117 -0
  28. package/dist/lib/cjs/desktop-git-runner.d.cts +17 -0
  29. package/dist/lib/cjs/editor-suggest.cjs +2 -3
  30. package/dist/lib/cjs/feature-request.cjs +115 -0
  31. package/dist/lib/cjs/feature-request.d.cts +54 -0
  32. package/dist/lib/cjs/generated-during-build.cjs +1 -1
  33. package/dist/lib/cjs/git-hub-discussion.cjs +101 -0
  34. package/dist/lib/cjs/git-hub-discussion.d.cts +28 -0
  35. package/dist/lib/cjs/git-rename-history.cjs +148 -0
  36. package/dist/lib/cjs/git-rename-history.d.cts +43 -0
  37. package/dist/lib/cjs/index.cjs +16 -1
  38. package/dist/lib/cjs/index.d.cts +5 -0
  39. package/dist/lib/cjs/vault.cjs +2 -2
  40. package/dist/lib/cjs/vault.d.cts +3 -1
  41. package/dist/lib/esm/__merged.d.mts +9 -0
  42. package/dist/lib/esm/__merged.mjs +41 -1
  43. package/dist/lib/esm/broken-link-candidates.d.mts +181 -0
  44. package/dist/lib/esm/broken-link-candidates.mjs +275 -0
  45. package/dist/lib/esm/command-handlers/index.d.mts +3 -0
  46. package/dist/lib/esm/command-handlers/index.mjs +7 -1
  47. package/dist/lib/esm/command-handlers/open-bug-report-command-handler.d.mts +6 -8
  48. package/dist/lib/esm/command-handlers/open-bug-report-command-handler.mjs +9 -12
  49. package/dist/lib/esm/command-handlers/open-discussion-command-handler.d.mts +45 -0
  50. package/dist/lib/esm/command-handlers/open-discussion-command-handler.mjs +39 -0
  51. package/dist/lib/esm/command-handlers/open-feature-request-command-handler.d.mts +33 -0
  52. package/dist/lib/esm/command-handlers/open-feature-request-command-handler.mjs +31 -0
  53. package/dist/lib/esm/command-handlers/open-git-hub-command-handler.d.mts +43 -0
  54. package/dist/lib/esm/command-handlers/open-git-hub-command-handler.mjs +33 -0
  55. package/dist/lib/esm/components/index.d.mts +1 -0
  56. package/dist/lib/esm/components/index.mjs +3 -1
  57. package/dist/lib/esm/components/style-sheet-component.d.mts +79 -0
  58. package/dist/lib/esm/components/style-sheet-component.mjs +109 -0
  59. package/dist/lib/esm/data-stores/data-store-transport.d.mts +1 -1
  60. package/dist/lib/esm/data-stores/data-store-transport.mjs +7 -4
  61. package/dist/lib/esm/data-stores/shared-data-store.d.mts +1 -1
  62. package/dist/lib/esm/data-stores/shared-data-store.mjs +1 -1
  63. package/dist/lib/esm/desktop-git-runner.d.mts +17 -0
  64. package/dist/lib/esm/desktop-git-runner.mjs +19 -0
  65. package/dist/lib/esm/editor-suggest.mjs +2 -3
  66. package/dist/lib/esm/feature-request.d.mts +54 -0
  67. package/dist/lib/esm/feature-request.mjs +25 -0
  68. package/dist/lib/esm/generated-during-build.mjs +1 -1
  69. package/dist/lib/esm/git-hub-discussion.d.mts +28 -0
  70. package/dist/lib/esm/git-hub-discussion.mjs +13 -0
  71. package/dist/lib/esm/git-rename-history.d.mts +43 -0
  72. package/dist/lib/esm/git-rename-history.mjs +59 -0
  73. package/dist/lib/esm/index.d.mts +5 -0
  74. package/dist/lib/esm/index.mjs +11 -1
  75. package/dist/lib/esm/vault.d.mts +3 -1
  76. package/dist/lib/esm/vault.mjs +2 -2
  77. package/package.json +2 -2
@@ -343,4 +343,4 @@ function isVector(value) {
343
343
  export {
344
344
  SharedDataStore
345
345
  };
346
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9kYXRhLXN0b3Jlcy9zaGFyZWQtZGF0YS1zdG9yZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBuL25vLXVuc3VwcG9ydGVkLWZlYXR1cmVzL25vZGUtYnVpbHRpbnMgLS0gVGhlc2UgYXJlIE9ic2lkaWFuIHJlbmRlcmVyIFdlYiBBUElzLCBub3QgTm9kZSBidWlsdGlucy4gKi9cbi8qKlxuICogQGZpbGVcbiAqXG4gKiBNZXJnZWFibGUgcGx1Z2luIGRhdGEsIHRyYW5zcG9ydGVkIGFzIHNpbmdsZS13cml0ZXIgam91cm5hbCBzZWdtZW50cyBhbmQgY2h1bmtlZCBzbmFwc2hvdHMuXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBEYXRhQWRhcHRlciB9IGZyb20gJ29ic2lkaWFuJztcbmltcG9ydCB0eXBlIHsgSnNvblZhbHVlIH0gZnJvbSAndHlwZS1mZXN0JztcblxuaW1wb3J0IHsgZW5zdXJlTm9uTnVsbGFibGUgfSBmcm9tICdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvdHlwZS1ndWFyZHMnO1xuXG5pbXBvcnQgdHlwZSB7XG4gIERhdGFTdG9yZU1lcmdlS2luZCxcbiAgRGF0YVN0b3JlT3BlcmF0aW9uXG59IGZyb20gJy4vZGF0YS1zdG9yZS1yZXBsaWNhLnRzJztcbmltcG9ydCB0eXBlIHsgTG9jYWxEYXRhU3RvcmUgfSBmcm9tICcuL2xvY2FsLWRhdGEtc3RvcmUudHMnO1xuXG5pbXBvcnQge1xuICBEYXRhU3RvcmVSZXBsaWNhLFxuICBpc0RhdGFTdG9yZU9wZXJhdGlvblxufSBmcm9tICcuL2RhdGEtc3RvcmUtcmVwbGljYS50cyc7XG5pbXBvcnQgeyBEYXRhU3RvcmVUcmFuc3BvcnQgfSBmcm9tICcuL2RhdGEtc3RvcmUtdHJhbnNwb3J0LnRzJztcblxuY29uc3QgREVGQVVMVF9BQ1RJVkVfREVWSUNFX01JTExJU0VDT05EUyA9IDJfNTkyXzAwMF8wMDA7XG5cbmNvbnN0IE9XTkVSX1BBVEhfSU5ERVggPSAtMjtcblxuY29uc3QgVkVDVE9SX0VOVFJZX0xFTkdUSCA9IDI7XG5jb25zdCBERVZJQ0VfUEFUSF9QQVJUUyA9IDI7XG5jb25zdCBSRUNPUkRfUFJFRklYID0gJ3NoYXJlZC1yZWNvcmQtdjE6JztcblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciBvcGVuaW5nIGEgc2hhcmVkIHN0b3JlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNoYXJlZERhdGFTdG9yZU9wZW5QYXJhbXMge1xuICAvKipcbiAgICogRGV2aWNlIHJldGlyZW1lbnQgaW50ZXJ2YWwsIG1lYXN1cmVkIGZyb20gaXRzIGxhc3QgYWNrbm93bGVkZ2VtZW50LlxuICAgKlxuICAgKiBAZGVmYXVsdCBgMjU5MjAwMDAwMGBcbiAgICovXG4gIHJlYWRvbmx5IGFjdGl2ZURldmljZU1pbGxpc2Vjb25kcz86IG51bWJlcjtcbiAgLyoqXG4gICAqIFZhdWx0IGFkYXB0ZXIuXG4gICAqL1xuICByZWFkb25seSBhZGFwdGVyOiBEYXRhQWRhcHRlcjtcbiAgLyoqXG4gICAqIENvbmZpZ3VyYWJsZSBub24tZG90IHZhdWx0IGZvbGRlci5cbiAgICpcbiAgICogQGRlZmF1bHQgYCdQbHVnaW4gZGF0YSdgXG4gICAqL1xuICByZWFkb25seSBmb2xkZXI/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBJbW11dGFibGUgbWVyZ2UgcnVsZTsgY2hhbmdpbmcgaXQgcmVxdWlyZXMgYSBuZXcgc3RvcmUgaWQuXG4gICAqL1xuICByZWFkb25seSBraW5kOiBEYXRhU3RvcmVNZXJnZUtpbmQ7XG4gIC8qKlxuICAgKiBEZWRpY2F0ZWQgbG9jYWwgc3RvcmUgc2NvcGVkIHRvIFRISVMgdmF1bHQsIHBsdWdpbiBhbmQgc2hhcmVkLXN0b3JlIHNjaGVtYS4gVGhlIGNhbGxlciBvd25zIGl0cyBjb25uZWN0aW9uLlxuICAgKi9cbiAgcmVhZG9ubHkgbG9jYWw6IExvY2FsRGF0YVN0b3JlO1xuICAvKipcbiAgICogTWF4aW11bSBVVEYtOCBieXRlcyBwZXIgZmlsZSwgd3JhcHBlciBpbmNsdWRlZC5cbiAgICpcbiAgICogQGRlZmF1bHQgYDEwMDAwMDBgXG4gICAqL1xuICByZWFkb25seSBtYXhGaWxlQnl0ZXM/OiBudW1iZXI7XG4gIC8qKlxuICAgKiBQbHVnaW4gbWFuaWZlc3QgaWQuXG4gICAqL1xuICByZWFkb25seSBwbHVnaW5JZDogc3RyaW5nO1xuICAvKipcbiAgICogU3RvcmUgaWQgaW5jbHVkaW5nIHRoZSBjb25zdW1lcidzIHNjaGVtYSB2ZXJzaW9uLlxuICAgKi9cbiAgcmVhZG9ubHkgc3RvcmVJZDogc3RyaW5nO1xufVxuXG5pbnRlcmZhY2UgQ2hhbmdlIHtcbiAgcmVhZG9ubHkgZGVsZXRlZDogYm9vbGVhbjtcbiAgcmVhZG9ubHkga2V5OiBzdHJpbmc7XG4gIHJlYWRvbmx5IHZhbHVlOiBKc29uVmFsdWU7XG59XG5cbmludGVyZmFjZSBDaGVja3BvaW50IHtcbiAgcmVhZG9ubHkgY291bnRlcjogbnVtYmVyO1xuICByZWFkb25seSBmb3JtYXQ6IDE7XG4gIHJlYWRvbmx5IGtpbmQ6IERhdGFTdG9yZU1lcmdlS2luZDtcbiAgcmVhZG9ubHkgb3BlcmF0aW9uczogRGF0YVN0b3JlT3BlcmF0aW9uW107XG4gIHJlYWRvbmx5IHRpbWU6IG51bWJlcjtcbiAgcmVhZG9ubHkgdmVjdG9yOiBWZXJzaW9uVmVjdG9yO1xufVxuXG50eXBlIFZlcnNpb25WZWN0b3IgPSBbc3RyaW5nLCBudW1iZXJdW107XG5cbi8qKlxuICogQSBkZXZpY2UtbG9jYWwgcXVlcnkgcmVwbGljYSBiYWNrZWQgYnkgdmF1bHQgZmlsZXMuIENhbGwgYHN5bmNocm9uaXplYCBhZnRlciB0cmFuc3BvcnQgY2hhbmdlcyBvciBwZXJpb2RpY2FsbHkuXG4gKiBObyB0aW1lciBvciBldmVudCBoYW5kbGVyIG91dGxpdmVzIHRoZSBjb25zdW1lcjogdGhlIGNvbnN1bWVyIHNjaGVkdWxlcyBzeW5jaHJvbml6YXRpb24gYW5kIG93bnMgdW5sb2FkaW5nLlxuICovXG5leHBvcnQgY2xhc3MgU2hhcmVkRGF0YVN0b3JlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBhY3RpdmVEZXZpY2VNaWxsaXNlY29uZHM6IG51bWJlcjtcbiAgcHJpdmF0ZSBjb3VudGVyID0gMDtcbiAgcHJpdmF0ZSByZWFkb25seSBsb2NhbFJlY29yZHMgPSBuZXcgTWFwPHN0cmluZywgc3RyaW5nPigpO1xuICBwcml2YXRlIHJlcGxpY2E6IERhdGFTdG9yZVJlcGxpY2E7XG4gIHByaXZhdGUgdGltZSA9IDA7XG4gIHByaXZhdGUgcmVhZG9ubHkgdHJhbnNwb3J0OiBEYXRhU3RvcmVUcmFuc3BvcnQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgdmVjdG9yID0gbmV3IE1hcDxzdHJpbmcsIG51bWJlcj4oKTtcblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKHByb3RlY3RlZCByZWFkb25seSBwYXJhbXM6IFNoYXJlZERhdGFTdG9yZU9wZW5QYXJhbXMsIHByb3RlY3RlZCByZWFkb25seSBkZXZpY2U6IHN0cmluZykge1xuICAgIHRoaXMudHJhbnNwb3J0ID0gbmV3IERhdGFTdG9yZVRyYW5zcG9ydChwYXJhbXMpO1xuICAgIHRoaXMucmVwbGljYSA9IG5ldyBEYXRhU3RvcmVSZXBsaWNhKHBhcmFtcy5raW5kKTtcbiAgICB0aGlzLmFjdGl2ZURldmljZU1pbGxpc2Vjb25kcyA9IHBhcmFtcy5hY3RpdmVEZXZpY2VNaWxsaXNlY29uZHMgPz8gREVGQVVMVF9BQ1RJVkVfREVWSUNFX01JTExJU0VDT05EUztcbiAgICBpZiAoIU51bWJlci5pc0Zpbml0ZSh0aGlzLmFjdGl2ZURldmljZU1pbGxpc2Vjb25kcykgfHwgdGhpcy5hY3RpdmVEZXZpY2VNaWxsaXNlY29uZHMgPD0gMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdEZXZpY2UgcmV0aXJlbWVudCBpbnRlcnZhbCBtdXN0IGJlIHBvc2l0aXZlJyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIE9wZW5zIGFuZCBzeW5jaHJvbml6ZXMgYSBzdG9yZSwgcmVzdG9yaW5nIGl0cyBkZXZpY2UgaWRlbnRpdHkgZXhjbHVzaXZlbHkgZnJvbSBJbmRleGVkREIuXG4gICAqXG4gICAqIEBwYXJhbSBwYXJhbXMgLSBQZXJzaXN0ZW5jZSwgdHJhbnNwb3J0IGFuZCBtZXJnZSBwb2xpY3kuXG4gICAqIEByZXR1cm5zIEEgc3luY2hyb25pemVkIHF1ZXJ5IHJlcGxpY2EuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGFzeW5jIG9wZW4ocGFyYW1zOiBTaGFyZWREYXRhU3RvcmVPcGVuUGFyYW1zKTogUHJvbWlzZTxTaGFyZWREYXRhU3RvcmU+IHtcbiAgICBjb25zdCBkZXZpY2UgPSBhd2FpdCBwYXJhbXMubG9jYWwuZ2V0T3JDcmVhdGUoJ3NoYXJlZC1kZXZpY2UtdjEnLCB3aW5kb3cuY3J5cHRvLnJhbmRvbVVVSUQoKSk7XG4gICAgaWYgKHR5cGVvZiBkZXZpY2UgIT09ICdzdHJpbmcnIHx8ICEvXltcXHctXSskLy50ZXN0KGRldmljZSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBsb2NhbCBkYXRhLXN0b3JlIGlkZW50aXR5Jyk7XG4gICAgfVxuICAgIGNvbnN0IHN0b3JlID0gbmV3IFNoYXJlZERhdGFTdG9yZShwYXJhbXMsIGRldmljZSk7XG4gICAgYXdhaXQgc3RvcmUuc3luY2hyb25pemUoKTtcbiAgICByZXR1cm4gc3RvcmU7XG4gIH1cblxuICAvKipcbiAgICogUHVibGlzaGVzIGEgY29tcGxldGUgY2h1bmtlZCBzbmFwc2hvdCBhbmQgdHJpbXMgb25seSB0aGlzIGRldmljZSdzIGFja25vd2xlZGdlZCBqb3VybmFsIHNlZ21lbnRzLlxuICAgKiBSZXRpcmVkIGRldmljZXMgcmVqb2luIGJ5IG1lcmdpbmcgc25hcHNob3RzOyB0b21ic3RvbmVzIHJlbWFpbiBpbiBzbmFwc2hvdHMgdG8gcHJldmVudCByZXN1cnJlY3Rpb24uXG4gICAqXG4gICAqIEByZXR1cm5zIEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHdoZW4gY29tcGFjdGlvbiBmaW5pc2hlcy5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBjb21wYWN0KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMucGFyYW1zLmxvY2FsLmV4Y2x1c2l2ZShhc3luYyAoKSA9PiB7XG4gICAgICBhd2FpdCB0aGlzLmxvYWRMb2NhbCgpO1xuICAgICAgYXdhaXQgdGhpcy5tZXJnZUZpbGVzKCk7XG4gICAgICBhd2FpdCB0aGlzLnBlcnNpc3QoKTtcbiAgICAgIGNvbnN0IGZpbGVzID0gYXdhaXQgdGhpcy50cmFuc3BvcnQubGlzdCgpO1xuICAgICAgY29uc3QgYmFzZSA9IGAke3RoaXMuZGV2aWNlUm9vdCgpfS9zbmFwc2hvdC0ke3dpbmRvdy5jcnlwdG8ucmFuZG9tVVVJRCgpfS1tYW5pZmVzdGA7XG4gICAgICBhd2FpdCB0aGlzLnRyYW5zcG9ydC53cml0ZVNuYXBzaG90KHsgYmFzZSwgcGF5bG9hZDogdGhpcy5jaGVja3BvaW50KCkgfSk7XG4gICAgICBjb25zdCBhY2tub3dsZWRnZW1lbnRzID0gYXdhaXQgdGhpcy5hY2tub3dsZWRnZW1lbnRzKGZpbGVzKTtcbiAgICAgIGZvciAoY29uc3QgcGF0aCBvZiBmaWxlcykge1xuICAgICAgICBpZiAoIXBhdGguc3RhcnRzV2l0aChgJHt0aGlzLmRldmljZVJvb3QoKX0vbG9nLWApKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgb3BlcmF0aW9ucyA9IGF3YWl0IHRoaXMudHJhbnNwb3J0LnJlYWQocGF0aCk7XG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheShvcGVyYXRpb25zKSB8fCAhb3BlcmF0aW9ucy5ldmVyeShpc0RhdGFTdG9yZU9wZXJhdGlvbikpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBsYXN0ID0gTWF0aC5tYXgoLi4ub3BlcmF0aW9ucy5tYXAoKG9wZXJhdGlvbikgPT4gb3BlcmF0aW9uLnNlcXVlbmNlKSk7XG4gICAgICAgIGlmIChhY2tub3dsZWRnZW1lbnRzLmV2ZXJ5KCh2ZWN0b3IpID0+ICh2ZWN0b3IuZ2V0KHRoaXMuZGV2aWNlKSA/PyAwKSA+PSBsYXN0KSkge1xuICAgICAgICAgIGF3YWl0IHRoaXMudHJhbnNwb3J0LnJlbW92ZShwYXRoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgLy8gVGhlIGNvbXBsZXRlIG5ldyBzbmFwc2hvdCBjb3ZlcnMgZXZlcnkgZWFybGllciBzbmFwc2hvdCBmcm9tIHRoaXMgd3JpdGVyLlxuICAgICAgZm9yIChjb25zdCBwYXRoIG9mIGZpbGVzKSB7XG4gICAgICAgIGlmIChwYXRoLnN0YXJ0c1dpdGgoYCR7dGhpcy5kZXZpY2VSb290KCl9L3NuYXBzaG90LWApKSB7XG4gICAgICAgICAgYXdhaXQgdGhpcy50cmFuc3BvcnQucmVtb3ZlKHBhdGgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogRGVsZXRlcyBhIHJlZ2lzdGVyIG9yIHJlbW92ZXMgdGhlIGN1cnJlbnRseSBvYnNlcnZlZCBhZGRpdGlvbnMgb2YgYSBzZXQgbWVtYmVyLlxuICAgKlxuICAgKiBAcGFyYW0ga2V5IC0gUmVjb3JkIGtleSBvciBzZXQgbWVtYmVyLiBNaW4vbWF4IHJlZ2lzdGVycyBkZWxpYmVyYXRlbHkgY2Fubm90IGJlIGRlbGV0ZWQuXG4gICAqIEByZXR1cm5zIEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIGFmdGVyIGpvdXJuYWwgcHVibGljYXRpb24gYW5kIGxvY2FsIGNvbW1pdC5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBkZWxldGUoa2V5OiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLmNoYW5nZShbeyBkZWxldGVkOiB0cnVlLCBrZXksIHZhbHVlOiBudWxsIH1dKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWFkcyB0aGUgY3VycmVudCBsb2NhbCBxdWVyeSByZXBsaWNhLlxuICAgKlxuICAgKiBAcmV0dXJucyBEZXRhY2hlZCBrZXkvdmFsdWUgcGFpcnMgaW4gZGV0ZXJtaW5pc3RpYyBvcmRlci5cbiAgICovXG4gIHB1YmxpYyBlbnRyaWVzKCk6IFtzdHJpbmcsIHVua25vd25dW10ge1xuICAgIHJldHVybiB0aGlzLnJlcGxpY2EuZW50cmllcygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlYWRzIGEgcmVnaXN0ZXIgb3Igc2V0IG1lbWJlcnNoaXAgZnJvbSB0aGUgY3VycmVudCBsb2NhbCBxdWVyeSByZXBsaWNhLlxuICAgKlxuICAgKiBAcGFyYW0ga2V5IC0gUmVjb3JkIGtleSBvciBzZXQgbWVtYmVyLlxuICAgKiBAcmV0dXJucyBBIGRldGFjaGVkIHZhbHVlLCBvciBgdW5kZWZpbmVkYCB3aGVuIGFic2VudCBvciBkZWxldGVkLlxuICAgKi9cbiAgcHVibGljIGdldChrZXk6IHN0cmluZyk6IHVua25vd24ge1xuICAgIHJldHVybiB0aGlzLnJlcGxpY2EuZ2V0KGtleSk7XG4gIH1cblxuICAvKipcbiAgICogV3JpdGVzIG9uZSByZWdpc3RlciB2YWx1ZSwgb3IgYWRkcyBhIG1lbWJlciB0byBhbiBvYnNlcnZlZC1yZW1vdmUgc2V0LlxuICAgKlxuICAgKiBAcGFyYW0ga2V5IC0gUmVjb3JkIGtleSBvciBzZXQgbWVtYmVyLlxuICAgKiBAcGFyYW0gdmFsdWUgLSBKU09OLWNvbXBhdGlibGUgdmFsdWUgKHVzZSBgdHJ1ZWAgZm9yIGEgc2V0KS5cbiAgICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgYWZ0ZXIgam91cm5hbCBwdWJsaWNhdGlvbiBhbmQgbG9jYWwgY29tbWl0LlxuICAgKi9cbiAgcHVibGljIGFzeW5jIHNldChrZXk6IHN0cmluZywgdmFsdWU6IEpzb25WYWx1ZSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMuc2V0TWFueShbW2tleSwgdmFsdWVdXSk7XG4gIH1cblxuICAvKipcbiAgICogUHVibGlzaGVzIGEgYmF0Y2ggb2YgcmVnaXN0ZXIgd3JpdGVzLCBzcGxpdCBpbnRvIGJvdW5kZWQgaW1tdXRhYmxlIHNlZ21lbnRzLlxuICAgKiBTZWdtZW50cyBhcmUgaW5kaXZpZHVhbGx5IGR1cmFibGU7IGEgZmFpbGVkIGJhdGNoIGNhbiBoYXZlIGEgcHVibGlzaGVkIHByZWZpeCBhbmQgY2FuIGJlIHJldHJpZWQgc2FmZWx5LlxuICAgKlxuICAgKiBAcGFyYW0gZW50cmllcyAtIFJlZ2lzdGVyIHdyaXRlcyBvciBzZXQgYWRkaXRpb25zLlxuICAgKiBAcmV0dXJucyBBIHByb21pc2UgdGhhdCByZXNvbHZlcyBhZnRlciBqb3VybmFsIHB1YmxpY2F0aW9uIGFuZCBsb2NhbCBjb21taXQuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgc2V0TWFueShlbnRyaWVzOiByZWFkb25seSAocmVhZG9ubHkgW3N0cmluZywgSnNvblZhbHVlXSlbXSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMuY2hhbmdlKGVudHJpZXMubWFwKChba2V5LCB2YWx1ZV0pID0+ICh7IGRlbGV0ZWQ6IGZhbHNlLCBrZXksIHZhbHVlIH0pKSk7XG4gIH1cblxuICAvKipcbiAgICogTWVyZ2VzIGNvbXBsZXRlIHNuYXBzaG90cyBhbmQgY29udGlndW91cyBqb3VybmFsIGhpc3RvcnksIHRoZW4gcHVibGlzaGVzIGl0cyBkdXJhYmxlIGFja25vd2xlZGdlbWVudC5cbiAgICogUGFydGlhbCBkZWxpdmVyaWVzIHJlbWFpbiBwZW5kaW5nOyBhIGxhdGVyIGNhbGwgcmV0cmllcyB0aGVtLiBObyBhY2tub3dsZWRnZW1lbnQgc2tpcHMgYSBtaXNzaW5nIHNlcXVlbmNlLlxuICAgKlxuICAgKiBAcmV0dXJucyBBIHByb21pc2UgdGhhdCByZXNvbHZlcyBhZnRlciB0aGUgbG9jYWwgY2hlY2twb2ludCBhbmQgYWNrbm93bGVkZ2VtZW50IGNvbW1pdC5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBzeW5jaHJvbml6ZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLnBhcmFtcy5sb2NhbC5leGNsdXNpdmUoYXN5bmMgKCkgPT4ge1xuICAgICAgYXdhaXQgdGhpcy5sb2FkTG9jYWwoKTtcbiAgICAgIGF3YWl0IHRoaXMubWVyZ2VGaWxlcygpO1xuICAgICAgYXdhaXQgdGhpcy5wZXJzaXN0KCk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGFja25vd2xlZGdlbWVudHMoZmlsZXM6IHJlYWRvbmx5IHN0cmluZ1tdKTogUHJvbWlzZTxNYXA8c3RyaW5nLCBudW1iZXI+W10+IHtcbiAgICBjb25zdCBhY2tub3dsZWRnZW1lbnRzID0gW25ldyBNYXAodGhpcy52ZWN0b3IpXTtcbiAgICBjb25zdCBkZXZpY2VGaWxlcyA9IGZpbGVzLmZpbHRlcigocGF0aCkgPT4gcGF0aC5zdGFydHNXaXRoKGAke3RoaXMudHJhbnNwb3J0LnJvb3R9L2RldmljZXMvYCkpO1xuICAgIGNvbnN0IGRldmljZXMgPSBuZXcgU2V0KGRldmljZUZpbGVzLm1hcCgocGF0aCkgPT4gcGF0aC5zbGljZSh0aGlzLnRyYW5zcG9ydC5yb290Lmxlbmd0aCArIDEpLnNwbGl0KCcvJywgREVWSUNFX1BBVEhfUEFSVFMpWzFdKS5maWx0ZXIoKGRldmljZSkgPT4gZGV2aWNlICE9PSB1bmRlZmluZWQpKTtcbiAgICBmb3IgKGNvbnN0IGRldmljZSBvZiBkZXZpY2VzKSB7XG4gICAgICBpZiAoZGV2aWNlID09PSB0aGlzLmRldmljZSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGhhdmUgPSBhd2FpdCB0aGlzLnRyYW5zcG9ydC5yZWFkKGAke3RoaXMudHJhbnNwb3J0LnJvb3R9L2RldmljZXMvJHtkZXZpY2V9L2hhdmUubWRgKTtcbiAgICAgIGlmICghaXNPYmplY3QoaGF2ZSkgfHwgIWlzVmVjdG9yKGhhdmVbJ3ZlY3RvciddKSB8fCB0eXBlb2YgaGF2ZVsndGltZSddICE9PSAnbnVtYmVyJykge1xuICAgICAgICBhY2tub3dsZWRnZW1lbnRzLnB1c2gobmV3IE1hcCgpKTtcbiAgICAgIH0gZWxzZSBpZiAoRGF0ZS5ub3coKSAtIGhhdmVbJ3RpbWUnXSA8PSB0aGlzLmFjdGl2ZURldmljZU1pbGxpc2Vjb25kcykge1xuICAgICAgICBhY2tub3dsZWRnZW1lbnRzLnB1c2gobmV3IE1hcChoYXZlWyd2ZWN0b3InXSkpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gYWNrbm93bGVkZ2VtZW50cztcbiAgfVxuXG4gIHByaXZhdGUgYXBwbHkob3BlcmF0aW9uOiBEYXRhU3RvcmVPcGVyYXRpb24pOiB2b2lkIHtcbiAgICB0aGlzLnJlcGxpY2EuYXBwbHkob3BlcmF0aW9uKTtcbiAgICB0aGlzLnZlY3Rvci5zZXQob3BlcmF0aW9uLmRldmljZSwgb3BlcmF0aW9uLnNlcXVlbmNlKTtcbiAgICB0aGlzLm9ic2VydmVDbG9jayhvcGVyYXRpb24udGltZSwgb3BlcmF0aW9uLmNvdW50ZXIpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBjaGFuZ2UoY2hhbmdlczogcmVhZG9ubHkgQ2hhbmdlW10pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLnBhcmFtcy5sb2NhbC5leGNsdXNpdmUoYXN5bmMgKCkgPT4ge1xuICAgICAgYXdhaXQgdGhpcy5sb2FkTG9jYWwoKTtcbiAgICAgIGF3YWl0IHRoaXMubWVyZ2VGaWxlcygpO1xuICAgICAgY29uc3Qgb3BlcmF0aW9uczogRGF0YVN0b3JlT3BlcmF0aW9uW10gPSBbXTtcbiAgICAgIGNvbnN0IGNhbmRpZGF0ZSA9IG5ldyBEYXRhU3RvcmVSZXBsaWNhKHRoaXMucGFyYW1zLmtpbmQpO1xuICAgICAgZm9yIChjb25zdCBvcGVyYXRpb24gb2YgdGhpcy5yZXBsaWNhLmV4cG9ydCgpKSB7XG4gICAgICAgIGNhbmRpZGF0ZS5hcHBseShvcGVyYXRpb24pO1xuICAgICAgfVxuICAgICAgbGV0IHNlcXVlbmNlID0gdGhpcy52ZWN0b3IuZ2V0KHRoaXMuZGV2aWNlKSA/PyAwO1xuICAgICAgZm9yIChjb25zdCBjaGFuZ2Ugb2YgY2hhbmdlcykge1xuICAgICAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICAgICAgICB0aGlzLmNvdW50ZXIgPSBub3cgPiB0aGlzLnRpbWUgPyAwIDogdGhpcy5jb3VudGVyICsgMTtcbiAgICAgICAgdGhpcy50aW1lID0gTWF0aC5tYXgobm93LCB0aGlzLnRpbWUpO1xuICAgICAgICBjb25zdCBvcGVyYXRpb246IERhdGFTdG9yZU9wZXJhdGlvbiA9IHtcbiAgICAgICAgICAuLi5jaGFuZ2UsXG4gICAgICAgICAgY291bnRlcjogdGhpcy5jb3VudGVyLFxuICAgICAgICAgIGRldmljZTogdGhpcy5kZXZpY2UsXG4gICAgICAgICAgc2VxdWVuY2U6ICsrc2VxdWVuY2UsXG4gICAgICAgICAgdGFnczogY2FuZGlkYXRlLm9ic2VydmVkVGFncyhjaGFuZ2Uua2V5KSxcbiAgICAgICAgICB0aW1lOiB0aGlzLnRpbWVcbiAgICAgICAgfTtcbiAgICAgICAgY2FuZGlkYXRlLmFwcGx5KG9wZXJhdGlvbik7XG4gICAgICAgIG9wZXJhdGlvbnMucHVzaChvcGVyYXRpb24pO1xuICAgICAgfVxuICAgICAgLy8gVmFsaWRhdGUgZXZlcnkgc2luZ2xlIG9wZXJhdGlvbiBiZWZvcmUgcHVibGlzaGluZyBhbnkgcHJlZml4IG9mIGEgYmF0Y2guXG4gICAgICBmb3IgKGNvbnN0IG9wZXJhdGlvbiBvZiBvcGVyYXRpb25zKSB7XG4gICAgICAgIGlmICghdGhpcy50cmFuc3BvcnQuZml0cyhbb3BlcmF0aW9uXSkpIHtcbiAgICAgICAgICBhd2FpdCB0aGlzLnRyYW5zcG9ydC53cml0ZShgJHt0aGlzLmRldmljZVJvb3QoKX0vbG9nLSR7U3RyaW5nKG9wZXJhdGlvbi5zZXF1ZW5jZSl9Lm1kYCwgW29wZXJhdGlvbl0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBsZXQgYmF0Y2g6IERhdGFTdG9yZU9wZXJhdGlvbltdID0gW107XG4gICAgICBmb3IgKGNvbnN0IG9wZXJhdGlvbiBvZiBvcGVyYXRpb25zKSB7XG4gICAgICAgIGlmICghdGhpcy50cmFuc3BvcnQuZml0cyhbLi4uYmF0Y2gsIG9wZXJhdGlvbl0pKSB7XG4gICAgICAgICAgYXdhaXQgdGhpcy5wdWJsaXNoKGJhdGNoKTtcbiAgICAgICAgICBiYXRjaCA9IFtdO1xuICAgICAgICB9XG4gICAgICAgIGJhdGNoLnB1c2gob3BlcmF0aW9uKTtcbiAgICAgIH1cbiAgICAgIGlmIChiYXRjaC5sZW5ndGggPiAwKSB7XG4gICAgICAgIGF3YWl0IHRoaXMucHVibGlzaChiYXRjaCk7XG4gICAgICB9XG4gICAgICBhd2FpdCB0aGlzLnBlcnNpc3QoKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgY2hlY2twb2ludCgpOiBDaGVja3BvaW50IHtcbiAgICByZXR1cm4geyBjb3VudGVyOiB0aGlzLmNvdW50ZXIsIGZvcm1hdDogMSwga2luZDogdGhpcy5wYXJhbXMua2luZCwgb3BlcmF0aW9uczogdGhpcy5yZXBsaWNhLmV4cG9ydCgpLCB0aW1lOiB0aGlzLnRpbWUsIHZlY3RvcjogWy4uLnRoaXMudmVjdG9yXSB9O1xuICB9XG5cbiAgcHJpdmF0ZSBkZXZpY2VSb290KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGAke3RoaXMudHJhbnNwb3J0LnJvb3R9L2RldmljZXMvJHt0aGlzLmRldmljZX1gO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBsb2FkTG9jYWwoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5yZXBsaWNhID0gbmV3IERhdGFTdG9yZVJlcGxpY2EodGhpcy5wYXJhbXMua2luZCk7XG4gICAgdGhpcy52ZWN0b3IuY2xlYXIoKTtcbiAgICB0aGlzLnRpbWUgPSAwO1xuICAgIHRoaXMuY291bnRlciA9IDA7XG4gICAgdGhpcy5sb2NhbFJlY29yZHMuY2xlYXIoKTtcbiAgICBjb25zdCByZWNvcmRzID0gYXdhaXQgdGhpcy5wYXJhbXMubG9jYWwuZW50cmllcygpO1xuICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIHJlY29yZHMpIHtcbiAgICAgIGlmIChrZXkgPT09ICdzaGFyZWQtY2hlY2twb2ludC12MScpIHtcbiAgICAgICAgdGhpcy5tZXJnZUNoZWNrcG9pbnQodmFsdWUpO1xuICAgICAgfSBlbHNlIGlmIChrZXkuc3RhcnRzV2l0aChSRUNPUkRfUFJFRklYKSkge1xuICAgICAgICB0aGlzLnJlcGxpY2EuYXBwbHkodmFsdWUpO1xuICAgICAgICB0aGlzLmxvY2FsUmVjb3Jkcy5zZXQoa2V5LCBlbnN1cmVOb25OdWxsYWJsZShKU09OLnN0cmluZ2lmeSh2YWx1ZSkpKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIG1lcmdlQ2hlY2twb2ludCh2YWx1ZTogdW5rbm93bik6IHZvaWQge1xuICAgIGlmIChcbiAgICAgICFpc09iamVjdCh2YWx1ZSkgfHwgdmFsdWVbJ2Zvcm1hdCddICE9PSAxIHx8IHZhbHVlWydraW5kJ10gIT09IHRoaXMucGFyYW1zLmtpbmRcbiAgICAgIHx8ICFBcnJheS5pc0FycmF5KHZhbHVlWydvcGVyYXRpb25zJ10pIHx8ICF2YWx1ZVsnb3BlcmF0aW9ucyddLmV2ZXJ5KGlzRGF0YVN0b3JlT3BlcmF0aW9uKVxuICAgICAgfHwgIWlzVmVjdG9yKHZhbHVlWyd2ZWN0b3InXSkgfHwgIU51bWJlci5pc1NhZmVJbnRlZ2VyKHZhbHVlWyd0aW1lJ10pIHx8ICFOdW1iZXIuaXNTYWZlSW50ZWdlcih2YWx1ZVsnY291bnRlciddKVxuICAgICkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGRhdGEtc3RvcmUgY2hlY2twb2ludCBvciBpbmNvbXBhdGlibGUgbWVyZ2UgcnVsZScpO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IG9wZXJhdGlvbiBvZiB2YWx1ZVsnb3BlcmF0aW9ucyddKSB7XG4gICAgICB0aGlzLnJlcGxpY2EuYXBwbHkob3BlcmF0aW9uKTtcbiAgICB9XG4gICAgZm9yIChjb25zdCBbZGV2aWNlLCBzZXF1ZW5jZV0gb2YgdmFsdWVbJ3ZlY3RvciddKSB7XG4gICAgICB0aGlzLnZlY3Rvci5zZXQoZGV2aWNlLCBNYXRoLm1heChzZXF1ZW5jZSwgdGhpcy52ZWN0b3IuZ2V0KGRldmljZSkgPz8gMCkpO1xuICAgIH1cbiAgICB0aGlzLm9ic2VydmVDbG9jayhOdW1iZXIodmFsdWVbJ3RpbWUnXSksIE51bWJlcih2YWx1ZVsnY291bnRlciddKSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIG1lcmdlRmlsZXMoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgYWxsRmlsZXMgPSBhd2FpdCB0aGlzLnRyYW5zcG9ydC5saXN0KCk7XG4gICAgY29uc3QgZmlsZXMgPSBhbGxGaWxlcy5maWx0ZXIoKHBhdGgpID0+IHBhdGguc3RhcnRzV2l0aChgJHt0aGlzLnRyYW5zcG9ydC5yb290fS9kZXZpY2VzL2ApKTtcbiAgICBjb25zdCBtYW5pZmVzdHMgPSBmaWxlcy5maWx0ZXIoKGZpbGUpID0+IC9cXC9zbmFwc2hvdC1bXFx3LV0rLW1hbmlmZXN0XFwubWQkLy50ZXN0KGZpbGUpKTtcbiAgICBmb3IgKGNvbnN0IHBhdGggb2YgbWFuaWZlc3RzKSB7XG4gICAgICBjb25zdCBzbmFwc2hvdCA9IGF3YWl0IHRoaXMudHJhbnNwb3J0LnJlYWRTbmFwc2hvdChwYXRoKTtcbiAgICAgIGlmIChzbmFwc2hvdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMubWVyZ2VDaGVja3BvaW50KHNuYXBzaG90KTtcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3Qgb3BlcmF0aW9uczogRGF0YVN0b3JlT3BlcmF0aW9uW10gPSBbXTtcbiAgICBjb25zdCBzZWdtZW50cyA9IGZpbGVzLmZpbHRlcigoZmlsZSkgPT4gL1xcL2xvZy1cXGQrXFwubWQkLy50ZXN0KGZpbGUpKTtcbiAgICBmb3IgKGNvbnN0IHBhdGggb2Ygc2VnbWVudHMpIHtcbiAgICAgIGNvbnN0IHNlZ21lbnQgPSBhd2FpdCB0aGlzLnRyYW5zcG9ydC5yZWFkKHBhdGgpO1xuICAgICAgaWYgKHNlZ21lbnQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlmICghQXJyYXkuaXNBcnJheShzZWdtZW50KSB8fCAhc2VnbWVudC5ldmVyeShpc0RhdGFTdG9yZU9wZXJhdGlvbikpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGRhdGEtc3RvcmUgam91cm5hbCBzZWdtZW50Jyk7XG4gICAgICB9XG4gICAgICBjb25zdCBvd25lciA9IHBhdGguc3BsaXQoJy8nKS5hdChPV05FUl9QQVRIX0lOREVYKTtcbiAgICAgIGlmIChzZWdtZW50LnNvbWUoKG9wZXJhdGlvbikgPT4gb3BlcmF0aW9uLmRldmljZSAhPT0gb3duZXIpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignSm91cm5hbCBzZWdtZW50IGhhcyBhIGRpZmZlcmVudCB3cml0ZXInKTtcbiAgICAgIH1cbiAgICAgIG9wZXJhdGlvbnMucHVzaCguLi5zZWdtZW50KTtcbiAgICB9XG4gICAgb3BlcmF0aW9ucy5zb3J0KChmaXJzdCwgc2Vjb25kKSA9PiBmaXJzdC5kZXZpY2UubG9jYWxlQ29tcGFyZShzZWNvbmQuZGV2aWNlKSB8fCBmaXJzdC5zZXF1ZW5jZSAtIHNlY29uZC5zZXF1ZW5jZSk7XG4gICAgZm9yIChjb25zdCBvcGVyYXRpb24gb2Ygb3BlcmF0aW9ucykge1xuICAgICAgaWYgKG9wZXJhdGlvbi5zZXF1ZW5jZSA9PT0gKHRoaXMudmVjdG9yLmdldChvcGVyYXRpb24uZGV2aWNlKSA/PyAwKSArIDEpIHtcbiAgICAgICAgdGhpcy5hcHBseShvcGVyYXRpb24pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgb2JzZXJ2ZUNsb2NrKHRpbWU6IG51bWJlciwgY291bnRlcjogbnVtYmVyKTogdm9pZCB7XG4gICAgaWYgKHRpbWUgPiB0aGlzLnRpbWUpIHtcbiAgICAgIHRoaXMudGltZSA9IHRpbWU7XG4gICAgICB0aGlzLmNvdW50ZXIgPSBjb3VudGVyO1xuICAgIH0gZWxzZSBpZiAodGltZSA9PT0gdGhpcy50aW1lKSB7XG4gICAgICB0aGlzLmNvdW50ZXIgPSBNYXRoLm1heCh0aGlzLmNvdW50ZXIsIGNvdW50ZXIpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcGVyc2lzdCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBjaGVja3BvaW50ID0gdGhpcy5jaGVja3BvaW50KCk7XG4gICAgY29uc3QgcmVjb3JkcyA9IG5ldyBNYXA8c3RyaW5nLCBEYXRhU3RvcmVPcGVyYXRpb24+KCk7XG4gICAgZm9yIChjb25zdCBvcGVyYXRpb24gb2YgY2hlY2twb2ludC5vcGVyYXRpb25zKSB7XG4gICAgICBjb25zdCBpZGVudGl0eSA9IHRoaXMucGFyYW1zLmtpbmQgPT09ICdvYnNlcnZlZC1yZW1vdmUtc2V0JyA/IGAke29wZXJhdGlvbi5kZXZpY2V9OiR7U3RyaW5nKG9wZXJhdGlvbi5zZXF1ZW5jZSl9YCA6IG9wZXJhdGlvbi5rZXk7XG4gICAgICByZWNvcmRzLnNldChgJHtSRUNPUkRfUFJFRklYfSR7aWRlbnRpdHl9YCwgb3BlcmF0aW9uKTtcbiAgICB9XG4gICAgY29uc3QgZW50cmllczogW3N0cmluZywgdW5rbm93bl1bXSA9IFsuLi5yZWNvcmRzXS5maWx0ZXIoKFtrZXksIHZhbHVlXSkgPT4gdGhpcy5sb2NhbFJlY29yZHMuZ2V0KGtleSkgIT09IEpTT04uc3RyaW5naWZ5KHZhbHVlKSk7XG4gICAgY29uc3QgcmVtb3ZlZEtleXMgPSBbLi4udGhpcy5sb2NhbFJlY29yZHMua2V5cygpXS5maWx0ZXIoKGtleSkgPT4gIXJlY29yZHMuaGFzKGtleSkpO1xuICAgIGVudHJpZXMucHVzaChbJ3NoYXJlZC1jaGVja3BvaW50LXYxJywgeyAuLi5jaGVja3BvaW50LCBvcGVyYXRpb25zOiBbXSB9XSk7XG4gICAgYXdhaXQgdGhpcy5wYXJhbXMubG9jYWwuY29tbWl0KHsgZW50cmllcywgcmVtb3ZlZEtleXMgfSk7XG4gICAgYXdhaXQgdGhpcy50cmFuc3BvcnQud3JpdGUoYCR7dGhpcy5kZXZpY2VSb290KCl9L2hhdmUubWRgLCB7IGZvcm1hdDogMSwgdGltZTogRGF0ZS5ub3coKSwgdmVjdG9yOiBbLi4udGhpcy52ZWN0b3JdIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBwdWJsaXNoKG9wZXJhdGlvbnM6IERhdGFTdG9yZU9wZXJhdGlvbltdKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgZmlyc3QgPSBlbnN1cmVOb25OdWxsYWJsZShvcGVyYXRpb25zWzBdKTtcbiAgICBhd2FpdCB0aGlzLnRyYW5zcG9ydC53cml0ZShgJHt0aGlzLmRldmljZVJvb3QoKX0vbG9nLSR7U3RyaW5nKGZpcnN0LnNlcXVlbmNlKX0ubWRgLCBvcGVyYXRpb25zKTtcbiAgICBmb3IgKGNvbnN0IG9wZXJhdGlvbiBvZiBvcGVyYXRpb25zKSB7XG4gICAgICB0aGlzLmFwcGx5KG9wZXJhdGlvbik7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGlzT2JqZWN0KHZhbHVlOiB1bmtub3duKTogdmFsdWUgaXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4ge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAhPT0gbnVsbCAmJiAhQXJyYXkuaXNBcnJheSh2YWx1ZSk7XG59XG5cbmZ1bmN0aW9uIGlzVmVjdG9yKHZhbHVlOiB1bmtub3duKTogdmFsdWUgaXMgVmVyc2lvblZlY3RvciB7XG4gIHJldHVybiBBcnJheS5pc0FycmF5KHZhbHVlKSAmJiB2YWx1ZS5ldmVyeSgoZW50cnk6IHVua25vd24pID0+XG4gICAgQXJyYXkuaXNBcnJheShlbnRyeSkgJiYgZW50cnkubGVuZ3RoID09PSBWRUNUT1JfRU5UUllfTEVOR1RIXG4gICAgJiYgdHlwZW9mIGVudHJ5WzBdID09PSAnc3RyaW5nJyAmJiAvXltcXHctXSskLy50ZXN0KGVudHJ5WzBdKSAmJiBOdW1iZXIuaXNTYWZlSW50ZWdlcihlbnRyeVsxXSkgJiYgTnVtYmVyKGVudHJ5WzFdKSA+PSAwXG4gICk7XG59XG5cbi8qIGVzbGludC1lbmFibGUgbi9uby11bnN1cHBvcnRlZC1mZWF0dXJlcy9ub2RlLWJ1aWx0aW5zIC0tIFRoZXNlIGFyZSBPYnNpZGlhbiByZW5kZXJlciBXZWIgQVBJcywgbm90IE5vZGUgYnVpbHRpbnMuICovXG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBVUEsU0FBUyx5QkFBeUI7QUFRbEM7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLE9BQ0s7QUFDUCxTQUFTLDBCQUEwQjtBQUVuQyxNQUFNLHFDQUFxQztBQUUzQyxNQUFNLG1CQUFtQjtBQUV6QixNQUFNLHNCQUFzQjtBQUM1QixNQUFNLG9CQUFvQjtBQUMxQixNQUFNLGdCQUFnQjtBQW1FZixNQUFNLGdCQUFnQjtBQUFBLEVBU25CLFlBQStCLFFBQXNELFFBQWdCO0FBQXRFO0FBQXNEO0FBQzNGLFNBQUssWUFBWSxJQUFJLG1CQUFtQixNQUFNO0FBQzlDLFNBQUssVUFBVSxJQUFJLGlCQUFpQixPQUFPLElBQUk7QUFDL0MsU0FBSywyQkFBMkIsT0FBTyw0QkFBNEI7QUFDbkUsUUFBSSxDQUFDLE9BQU8sU0FBUyxLQUFLLHdCQUF3QixLQUFLLEtBQUssNEJBQTRCLEdBQUc7QUFDekYsWUFBTSxJQUFJLE1BQU0sNkNBQTZDO0FBQUEsSUFDL0Q7QUFBQSxFQUNGO0FBQUEsRUFQdUM7QUFBQSxFQUFzRDtBQUFBLEVBUjVFO0FBQUEsRUFDVCxVQUFVO0FBQUEsRUFDRCxlQUFlLG9CQUFJLElBQW9CO0FBQUEsRUFDaEQ7QUFBQSxFQUNBLE9BQU87QUFBQSxFQUNFO0FBQUEsRUFDQSxTQUFTLG9CQUFJLElBQW9CO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFpQmxELGFBQW9CLEtBQUssUUFBNkQ7QUFDcEYsVUFBTSxTQUFTLE1BQU0sT0FBTyxNQUFNLFlBQVksb0JBQW9CLE9BQU8sT0FBTyxXQUFXLENBQUM7QUFDNUYsUUFBSSxPQUFPLFdBQVcsWUFBWSxDQUFDLFdBQVcsS0FBSyxNQUFNLEdBQUc7QUFDMUQsWUFBTSxJQUFJ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
346
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9kYXRhLXN0b3Jlcy9zaGFyZWQtZGF0YS1zdG9yZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBuL25vLXVuc3VwcG9ydGVkLWZlYXR1cmVzL25vZGUtYnVpbHRpbnMgLS0gVGhlc2UgYXJlIE9ic2lkaWFuIHJlbmRlcmVyIFdlYiBBUElzLCBub3QgTm9kZSBidWlsdGlucy4gKi9cbi8qKlxuICogQGZpbGVcbiAqXG4gKiBNZXJnZWFibGUgcGx1Z2luIGRhdGEsIHRyYW5zcG9ydGVkIGFzIHNpbmdsZS13cml0ZXIgam91cm5hbCBzZWdtZW50cyBhbmQgY2h1bmtlZCBzbmFwc2hvdHMuXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBEYXRhQWRhcHRlciB9IGZyb20gJ29ic2lkaWFuJztcbmltcG9ydCB0eXBlIHsgSnNvblZhbHVlIH0gZnJvbSAndHlwZS1mZXN0JztcblxuaW1wb3J0IHsgZW5zdXJlTm9uTnVsbGFibGUgfSBmcm9tICdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvdHlwZS1ndWFyZHMnO1xuXG5pbXBvcnQgdHlwZSB7XG4gIERhdGFTdG9yZU1lcmdlS2luZCxcbiAgRGF0YVN0b3JlT3BlcmF0aW9uXG59IGZyb20gJy4vZGF0YS1zdG9yZS1yZXBsaWNhLnRzJztcbmltcG9ydCB0eXBlIHsgTG9jYWxEYXRhU3RvcmUgfSBmcm9tICcuL2xvY2FsLWRhdGEtc3RvcmUudHMnO1xuXG5pbXBvcnQge1xuICBEYXRhU3RvcmVSZXBsaWNhLFxuICBpc0RhdGFTdG9yZU9wZXJhdGlvblxufSBmcm9tICcuL2RhdGEtc3RvcmUtcmVwbGljYS50cyc7XG5pbXBvcnQgeyBEYXRhU3RvcmVUcmFuc3BvcnQgfSBmcm9tICcuL2RhdGEtc3RvcmUtdHJhbnNwb3J0LnRzJztcblxuY29uc3QgREVGQVVMVF9BQ1RJVkVfREVWSUNFX01JTExJU0VDT05EUyA9IDJfNTkyXzAwMF8wMDA7XG5cbmNvbnN0IE9XTkVSX1BBVEhfSU5ERVggPSAtMjtcblxuY29uc3QgVkVDVE9SX0VOVFJZX0xFTkdUSCA9IDI7XG5jb25zdCBERVZJQ0VfUEFUSF9QQVJUUyA9IDI7XG5jb25zdCBSRUNPUkRfUFJFRklYID0gJ3NoYXJlZC1yZWNvcmQtdjE6JztcblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciBvcGVuaW5nIGEgc2hhcmVkIHN0b3JlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNoYXJlZERhdGFTdG9yZU9wZW5QYXJhbXMge1xuICAvKipcbiAgICogRGV2aWNlIHJldGlyZW1lbnQgaW50ZXJ2YWwsIG1lYXN1cmVkIGZyb20gaXRzIGxhc3QgYWNrbm93bGVkZ2VtZW50LlxuICAgKlxuICAgKiBAZGVmYXVsdCBgMjU5MjAwMDAwMGBcbiAgICovXG4gIHJlYWRvbmx5IGFjdGl2ZURldmljZU1pbGxpc2Vjb25kcz86IG51bWJlcjtcbiAgLyoqXG4gICAqIFZhdWx0IGFkYXB0ZXIuXG4gICAqL1xuICByZWFkb25seSBhZGFwdGVyOiBEYXRhQWRhcHRlcjtcbiAgLyoqXG4gICAqIFZhdWx0LXJlbGF0aXZlIGZvbGRlci4gSGlkZGVuIHNlZ21lbnRzIGFyZSBhbGxvd2VkOyBjYWxsZXJzIG11c3QgYXJyYW5nZSB0aGVpciBzeW5jaHJvbml6YXRpb24uXG4gICAqXG4gICAqIEBkZWZhdWx0IGAnUGx1Z2luIGRhdGEnYFxuICAgKi9cbiAgcmVhZG9ubHkgZm9sZGVyPzogc3RyaW5nO1xuICAvKipcbiAgICogSW1tdXRhYmxlIG1lcmdlIHJ1bGU7IGNoYW5naW5nIGl0IHJlcXVpcmVzIGEgbmV3IHN0b3JlIGlkLlxuICAgKi9cbiAgcmVhZG9ubHkga2luZDogRGF0YVN0b3JlTWVyZ2VLaW5kO1xuICAvKipcbiAgICogRGVkaWNhdGVkIGxvY2FsIHN0b3JlIHNjb3BlZCB0byBUSElTIHZhdWx0LCBwbHVnaW4gYW5kIHNoYXJlZC1zdG9yZSBzY2hlbWEuIFRoZSBjYWxsZXIgb3ducyBpdHMgY29ubmVjdGlvbi5cbiAgICovXG4gIHJlYWRvbmx5IGxvY2FsOiBMb2NhbERhdGFTdG9yZTtcbiAgLyoqXG4gICAqIE1heGltdW0gVVRGLTggYnl0ZXMgcGVyIGZpbGUsIHdyYXBwZXIgaW5jbHVkZWQuXG4gICAqXG4gICAqIEBkZWZhdWx0IGAxMDAwMDAwYFxuICAgKi9cbiAgcmVhZG9ubHkgbWF4RmlsZUJ5dGVzPzogbnVtYmVyO1xuICAvKipcbiAgICogUGx1Z2luIG1hbmlmZXN0IGlkLlxuICAgKi9cbiAgcmVhZG9ubHkgcGx1Z2luSWQ6IHN0cmluZztcbiAgLyoqXG4gICAqIFN0b3JlIGlkIGluY2x1ZGluZyB0aGUgY29uc3VtZXIncyBzY2hlbWEgdmVyc2lvbi5cbiAgICovXG4gIHJlYWRvbmx5IHN0b3JlSWQ6IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIENoYW5nZSB7XG4gIHJlYWRvbmx5IGRlbGV0ZWQ6IGJvb2xlYW47XG4gIHJlYWRvbmx5IGtleTogc3RyaW5nO1xuICByZWFkb25seSB2YWx1ZTogSnNvblZhbHVlO1xufVxuXG5pbnRlcmZhY2UgQ2hlY2twb2ludCB7XG4gIHJlYWRvbmx5IGNvdW50ZXI6IG51bWJlcjtcbiAgcmVhZG9ubHkgZm9ybWF0OiAxO1xuICByZWFkb25seSBraW5kOiBEYXRhU3RvcmVNZXJnZUtpbmQ7XG4gIHJlYWRvbmx5IG9wZXJhdGlvbnM6IERhdGFTdG9yZU9wZXJhdGlvbltdO1xuICByZWFkb25seSB0aW1lOiBudW1iZXI7XG4gIHJlYWRvbmx5IHZlY3RvcjogVmVyc2lvblZlY3Rvcjtcbn1cblxudHlwZSBWZXJzaW9uVmVjdG9yID0gW3N0cmluZywgbnVtYmVyXVtdO1xuXG4vKipcbiAqIEEgZGV2aWNlLWxvY2FsIHF1ZXJ5IHJlcGxpY2EgYmFja2VkIGJ5IHZhdWx0IGZpbGVzLiBDYWxsIGBzeW5jaHJvbml6ZWAgYWZ0ZXIgdHJhbnNwb3J0IGNoYW5nZXMgb3IgcGVyaW9kaWNhbGx5LlxuICogTm8gdGltZXIgb3IgZXZlbnQgaGFuZGxlciBvdXRsaXZlcyB0aGUgY29uc3VtZXI6IHRoZSBjb25zdW1lciBzY2hlZHVsZXMgc3luY2hyb25pemF0aW9uIGFuZCBvd25zIHVubG9hZGluZy5cbiAqL1xuZXhwb3J0IGNsYXNzIFNoYXJlZERhdGFTdG9yZSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgYWN0aXZlRGV2aWNlTWlsbGlzZWNvbmRzOiBudW1iZXI7XG4gIHByaXZhdGUgY291bnRlciA9IDA7XG4gIHByaXZhdGUgcmVhZG9ubHkgbG9jYWxSZWNvcmRzID0gbmV3IE1hcDxzdHJpbmcsIHN0cmluZz4oKTtcbiAgcHJpdmF0ZSByZXBsaWNhOiBEYXRhU3RvcmVSZXBsaWNhO1xuICBwcml2YXRlIHRpbWUgPSAwO1xuICBwcml2YXRlIHJlYWRvbmx5IHRyYW5zcG9ydDogRGF0YVN0b3JlVHJhbnNwb3J0O1xuICBwcml2YXRlIHJlYWRvbmx5IHZlY3RvciA9IG5ldyBNYXA8c3RyaW5nLCBudW1iZXI+KCk7XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgcmVhZG9ubHkgcGFyYW1zOiBTaGFyZWREYXRhU3RvcmVPcGVuUGFyYW1zLCBwcm90ZWN0ZWQgcmVhZG9ubHkgZGV2aWNlOiBzdHJpbmcpIHtcbiAgICB0aGlzLnRyYW5zcG9ydCA9IG5ldyBEYXRhU3RvcmVUcmFuc3BvcnQocGFyYW1zKTtcbiAgICB0aGlzLnJlcGxpY2EgPSBuZXcgRGF0YVN0b3JlUmVwbGljYShwYXJhbXMua2luZCk7XG4gICAgdGhpcy5hY3RpdmVEZXZpY2VNaWxsaXNlY29uZHMgPSBwYXJhbXMuYWN0aXZlRGV2aWNlTWlsbGlzZWNvbmRzID8/IERFRkFVTFRfQUNUSVZFX0RFVklDRV9NSUxMSVNFQ09ORFM7XG4gICAgaWYgKCFOdW1iZXIuaXNGaW5pdGUodGhpcy5hY3RpdmVEZXZpY2VNaWxsaXNlY29uZHMpIHx8IHRoaXMuYWN0aXZlRGV2aWNlTWlsbGlzZWNvbmRzIDw9IDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignRGV2aWNlIHJldGlyZW1lbnQgaW50ZXJ2YWwgbXVzdCBiZSBwb3NpdGl2ZScpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBPcGVucyBhbmQgc3luY2hyb25pemVzIGEgc3RvcmUsIHJlc3RvcmluZyBpdHMgZGV2aWNlIGlkZW50aXR5IGV4Y2x1c2l2ZWx5IGZyb20gSW5kZXhlZERCLlxuICAgKlxuICAgKiBAcGFyYW0gcGFyYW1zIC0gUGVyc2lzdGVuY2UsIHRyYW5zcG9ydCBhbmQgbWVyZ2UgcG9saWN5LlxuICAgKiBAcmV0dXJucyBBIHN5bmNocm9uaXplZCBxdWVyeSByZXBsaWNhLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBhc3luYyBvcGVuKHBhcmFtczogU2hhcmVkRGF0YVN0b3JlT3BlblBhcmFtcyk6IFByb21pc2U8U2hhcmVkRGF0YVN0b3JlPiB7XG4gICAgY29uc3QgZGV2aWNlID0gYXdhaXQgcGFyYW1zLmxvY2FsLmdldE9yQ3JlYXRlKCdzaGFyZWQtZGV2aWNlLXYxJywgd2luZG93LmNyeXB0by5yYW5kb21VVUlEKCkpO1xuICAgIGlmICh0eXBlb2YgZGV2aWNlICE9PSAnc3RyaW5nJyB8fCAhL15bXFx3LV0rJC8udGVzdChkZXZpY2UpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgbG9jYWwgZGF0YS1zdG9yZSBpZGVudGl0eScpO1xuICAgIH1cbiAgICBjb25zdCBzdG9yZSA9IG5ldyBTaGFyZWREYXRhU3RvcmUocGFyYW1zLCBkZXZpY2UpO1xuICAgIGF3YWl0IHN0b3JlLnN5bmNocm9uaXplKCk7XG4gICAgcmV0dXJuIHN0b3JlO1xuICB9XG5cbiAgLyoqXG4gICAqIFB1Ymxpc2hlcyBhIGNvbXBsZXRlIGNodW5rZWQgc25hcHNob3QgYW5kIHRyaW1zIG9ubHkgdGhpcyBkZXZpY2UncyBhY2tub3dsZWRnZWQgam91cm5hbCBzZWdtZW50cy5cbiAgICogUmV0aXJlZCBkZXZpY2VzIHJlam9pbiBieSBtZXJnaW5nIHNuYXBzaG90czsgdG9tYnN0b25lcyByZW1haW4gaW4gc25hcHNob3RzIHRvIHByZXZlbnQgcmVzdXJyZWN0aW9uLlxuICAgKlxuICAgKiBAcmV0dXJucyBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB3aGVuIGNvbXBhY3Rpb24gZmluaXNoZXMuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgY29tcGFjdCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLnBhcmFtcy5sb2NhbC5leGNsdXNpdmUoYXN5bmMgKCkgPT4ge1xuICAgICAgYXdhaXQgdGhpcy5sb2FkTG9jYWwoKTtcbiAgICAgIGF3YWl0IHRoaXMubWVyZ2VGaWxlcygpO1xuICAgICAgYXdhaXQgdGhpcy5wZXJzaXN0KCk7XG4gICAgICBjb25zdCBmaWxlcyA9IGF3YWl0IHRoaXMudHJhbnNwb3J0Lmxpc3QoKTtcbiAgICAgIGNvbnN0IGJhc2UgPSBgJHt0aGlzLmRldmljZVJvb3QoKX0vc25hcHNob3QtJHt3aW5kb3cuY3J5cHRvLnJhbmRvbVVVSUQoKX0tbWFuaWZlc3RgO1xuICAgICAgYXdhaXQgdGhpcy50cmFuc3BvcnQud3JpdGVTbmFwc2hvdCh7IGJhc2UsIHBheWxvYWQ6IHRoaXMuY2hlY2twb2ludCgpIH0pO1xuICAgICAgY29uc3QgYWNrbm93bGVkZ2VtZW50cyA9IGF3YWl0IHRoaXMuYWNrbm93bGVkZ2VtZW50cyhmaWxlcyk7XG4gICAgICBmb3IgKGNvbnN0IHBhdGggb2YgZmlsZXMpIHtcbiAgICAgICAgaWYgKCFwYXRoLnN0YXJ0c1dpdGgoYCR7dGhpcy5kZXZpY2VSb290KCl9L2xvZy1gKSkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG9wZXJhdGlvbnMgPSBhd2FpdCB0aGlzLnRyYW5zcG9ydC5yZWFkKHBhdGgpO1xuICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkob3BlcmF0aW9ucykgfHwgIW9wZXJhdGlvbnMuZXZlcnkoaXNEYXRhU3RvcmVPcGVyYXRpb24pKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbGFzdCA9IE1hdGgubWF4KC4uLm9wZXJhdGlvbnMubWFwKChvcGVyYXRpb24pID0+IG9wZXJhdGlvbi5zZXF1ZW5jZSkpO1xuICAgICAgICBpZiAoYWNrbm93bGVkZ2VtZW50cy5ldmVyeSgodmVjdG9yKSA9PiAodmVjdG9yLmdldCh0aGlzLmRldmljZSkgPz8gMCkgPj0gbGFzdCkpIHtcbiAgICAgICAgICBhd2FpdCB0aGlzLnRyYW5zcG9ydC5yZW1vdmUocGF0aCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIC8vIFRoZSBjb21wbGV0ZSBuZXcgc25hcHNob3QgY292ZXJzIGV2ZXJ5IGVhcmxpZXIgc25hcHNob3QgZnJvbSB0aGlzIHdyaXRlci5cbiAgICAgIGZvciAoY29uc3QgcGF0aCBvZiBmaWxlcykge1xuICAgICAgICBpZiAocGF0aC5zdGFydHNXaXRoKGAke3RoaXMuZGV2aWNlUm9vdCgpfS9zbmFwc2hvdC1gKSkge1xuICAgICAgICAgIGF3YWl0IHRoaXMudHJhbnNwb3J0LnJlbW92ZShwYXRoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIERlbGV0ZXMgYSByZWdpc3RlciBvciByZW1vdmVzIHRoZSBjdXJyZW50bHkgb2JzZXJ2ZWQgYWRkaXRpb25zIG9mIGEgc2V0IG1lbWJlci5cbiAgICpcbiAgICogQHBhcmFtIGtleSAtIFJlY29yZCBrZXkgb3Igc2V0IG1lbWJlci4gTWluL21heCByZWdpc3RlcnMgZGVsaWJlcmF0ZWx5IGNhbm5vdCBiZSBkZWxldGVkLlxuICAgKiBAcmV0dXJucyBBIHByb21pc2UgdGhhdCByZXNvbHZlcyBhZnRlciBqb3VybmFsIHB1YmxpY2F0aW9uIGFuZCBsb2NhbCBjb21taXQuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZGVsZXRlKGtleTogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5jaGFuZ2UoW3sgZGVsZXRlZDogdHJ1ZSwga2V5LCB2YWx1ZTogbnVsbCB9XSk7XG4gIH1cblxuICAvKipcbiAgICogUmVhZHMgdGhlIGN1cnJlbnQgbG9jYWwgcXVlcnkgcmVwbGljYS5cbiAgICpcbiAgICogQHJldHVybnMgRGV0YWNoZWQga2V5L3ZhbHVlIHBhaXJzIGluIGRldGVybWluaXN0aWMgb3JkZXIuXG4gICAqL1xuICBwdWJsaWMgZW50cmllcygpOiBbc3RyaW5nLCB1bmtub3duXVtdIHtcbiAgICByZXR1cm4gdGhpcy5yZXBsaWNhLmVudHJpZXMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWFkcyBhIHJlZ2lzdGVyIG9yIHNldCBtZW1iZXJzaGlwIGZyb20gdGhlIGN1cnJlbnQgbG9jYWwgcXVlcnkgcmVwbGljYS5cbiAgICpcbiAgICogQHBhcmFtIGtleSAtIFJlY29yZCBrZXkgb3Igc2V0IG1lbWJlci5cbiAgICogQHJldHVybnMgQSBkZXRhY2hlZCB2YWx1ZSwgb3IgYHVuZGVmaW5lZGAgd2hlbiBhYnNlbnQgb3IgZGVsZXRlZC5cbiAgICovXG4gIHB1YmxpYyBnZXQoa2V5OiBzdHJpbmcpOiB1bmtub3duIHtcbiAgICByZXR1cm4gdGhpcy5yZXBsaWNhLmdldChrZXkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFdyaXRlcyBvbmUgcmVnaXN0ZXIgdmFsdWUsIG9yIGFkZHMgYSBtZW1iZXIgdG8gYW4gb2JzZXJ2ZWQtcmVtb3ZlIHNldC5cbiAgICpcbiAgICogQHBhcmFtIGtleSAtIFJlY29yZCBrZXkgb3Igc2V0IG1lbWJlci5cbiAgICogQHBhcmFtIHZhbHVlIC0gSlNPTi1jb21wYXRpYmxlIHZhbHVlICh1c2UgYHRydWVgIGZvciBhIHNldCkuXG4gICAqIEByZXR1cm5zIEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIGFmdGVyIGpvdXJuYWwgcHVibGljYXRpb24gYW5kIGxvY2FsIGNvbW1pdC5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBzZXQoa2V5OiBzdHJpbmcsIHZhbHVlOiBKc29uVmFsdWUpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLnNldE1hbnkoW1trZXksIHZhbHVlXV0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFB1Ymxpc2hlcyBhIGJhdGNoIG9mIHJlZ2lzdGVyIHdyaXRlcywgc3BsaXQgaW50byBib3VuZGVkIGltbXV0YWJsZSBzZWdtZW50cy5cbiAgICogU2VnbWVudHMgYXJlIGluZGl2aWR1YWxseSBkdXJhYmxlOyBhIGZhaWxlZCBiYXRjaCBjYW4gaGF2ZSBhIHB1Ymxpc2hlZCBwcmVmaXggYW5kIGNhbiBiZSByZXRyaWVkIHNhZmVseS5cbiAgICpcbiAgICogQHBhcmFtIGVudHJpZXMgLSBSZWdpc3RlciB3cml0ZXMgb3Igc2V0IGFkZGl0aW9ucy5cbiAgICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgYWZ0ZXIgam91cm5hbCBwdWJsaWNhdGlvbiBhbmQgbG9jYWwgY29tbWl0LlxuICAgKi9cbiAgcHVibGljIGFzeW5jIHNldE1hbnkoZW50cmllczogcmVhZG9ubHkgKHJlYWRvbmx5IFtzdHJpbmcsIEpzb25WYWx1ZV0pW10pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLmNoYW5nZShlbnRyaWVzLm1hcCgoW2tleSwgdmFsdWVdKSA9PiAoeyBkZWxldGVkOiBmYWxzZSwga2V5LCB2YWx1ZSB9KSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIE1lcmdlcyBjb21wbGV0ZSBzbmFwc2hvdHMgYW5kIGNvbnRpZ3VvdXMgam91cm5hbCBoaXN0b3J5LCB0aGVuIHB1Ymxpc2hlcyBpdHMgZHVyYWJsZSBhY2tub3dsZWRnZW1lbnQuXG4gICAqIFBhcnRpYWwgZGVsaXZlcmllcyByZW1haW4gcGVuZGluZzsgYSBsYXRlciBjYWxsIHJldHJpZXMgdGhlbS4gTm8gYWNrbm93bGVkZ2VtZW50IHNraXBzIGEgbWlzc2luZyBzZXF1ZW5jZS5cbiAgICpcbiAgICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgYWZ0ZXIgdGhlIGxvY2FsIGNoZWNrcG9pbnQgYW5kIGFja25vd2xlZGdlbWVudCBjb21taXQuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgc3luY2hyb25pemUoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5wYXJhbXMubG9jYWwuZXhjbHVzaXZlKGFzeW5jICgpID0+IHtcbiAgICAgIGF3YWl0IHRoaXMubG9hZExvY2FsKCk7XG4gICAgICBhd2FpdCB0aGlzLm1lcmdlRmlsZXMoKTtcbiAgICAgIGF3YWl0IHRoaXMucGVyc2lzdCgpO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBhY2tub3dsZWRnZW1lbnRzKGZpbGVzOiByZWFkb25seSBzdHJpbmdbXSk6IFByb21pc2U8TWFwPHN0cmluZywgbnVtYmVyPltdPiB7XG4gICAgY29uc3QgYWNrbm93bGVkZ2VtZW50cyA9IFtuZXcgTWFwKHRoaXMudmVjdG9yKV07XG4gICAgY29uc3QgZGV2aWNlRmlsZXMgPSBmaWxlcy5maWx0ZXIoKHBhdGgpID0+IHBhdGguc3RhcnRzV2l0aChgJHt0aGlzLnRyYW5zcG9ydC5yb290fS9kZXZpY2VzL2ApKTtcbiAgICBjb25zdCBkZXZpY2VzID0gbmV3IFNldChkZXZpY2VGaWxlcy5tYXAoKHBhdGgpID0+IHBhdGguc2xpY2UodGhpcy50cmFuc3BvcnQucm9vdC5sZW5ndGggKyAxKS5zcGxpdCgnLycsIERFVklDRV9QQVRIX1BBUlRTKVsxXSkuZmlsdGVyKChkZXZpY2UpID0+IGRldmljZSAhPT0gdW5kZWZpbmVkKSk7XG4gICAgZm9yIChjb25zdCBkZXZpY2Ugb2YgZGV2aWNlcykge1xuICAgICAgaWYgKGRldmljZSA9PT0gdGhpcy5kZXZpY2UpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBjb25zdCBoYXZlID0gYXdhaXQgdGhpcy50cmFuc3BvcnQucmVhZChgJHt0aGlzLnRyYW5zcG9ydC5yb290fS9kZXZpY2VzLyR7ZGV2aWNlfS9oYXZlLm1kYCk7XG4gICAgICBpZiAoIWlzT2JqZWN0KGhhdmUpIHx8ICFpc1ZlY3RvcihoYXZlWyd2ZWN0b3InXSkgfHwgdHlwZW9mIGhhdmVbJ3RpbWUnXSAhPT0gJ251bWJlcicpIHtcbiAgICAgICAgYWNrbm93bGVkZ2VtZW50cy5wdXNoKG5ldyBNYXAoKSk7XG4gICAgICB9IGVsc2UgaWYgKERhdGUubm93KCkgLSBoYXZlWyd0aW1lJ10gPD0gdGhpcy5hY3RpdmVEZXZpY2VNaWxsaXNlY29uZHMpIHtcbiAgICAgICAgYWNrbm93bGVkZ2VtZW50cy5wdXNoKG5ldyBNYXAoaGF2ZVsndmVjdG9yJ10pKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGFja25vd2xlZGdlbWVudHM7XG4gIH1cblxuICBwcml2YXRlIGFwcGx5KG9wZXJhdGlvbjogRGF0YVN0b3JlT3BlcmF0aW9uKTogdm9pZCB7XG4gICAgdGhpcy5yZXBsaWNhLmFwcGx5KG9wZXJhdGlvbik7XG4gICAgdGhpcy52ZWN0b3Iuc2V0KG9wZXJhdGlvbi5kZXZpY2UsIG9wZXJhdGlvbi5zZXF1ZW5jZSk7XG4gICAgdGhpcy5vYnNlcnZlQ2xvY2sob3BlcmF0aW9uLnRpbWUsIG9wZXJhdGlvbi5jb3VudGVyKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgY2hhbmdlKGNoYW5nZXM6IHJlYWRvbmx5IENoYW5nZVtdKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5wYXJhbXMubG9jYWwuZXhjbHVzaXZlKGFzeW5jICgpID0+IHtcbiAgICAgIGF3YWl0IHRoaXMubG9hZExvY2FsKCk7XG4gICAgICBhd2FpdCB0aGlzLm1lcmdlRmlsZXMoKTtcbiAgICAgIGNvbnN0IG9wZXJhdGlvbnM6IERhdGFTdG9yZU9wZXJhdGlvbltdID0gW107XG4gICAgICBjb25zdCBjYW5kaWRhdGUgPSBuZXcgRGF0YVN0b3JlUmVwbGljYSh0aGlzLnBhcmFtcy5raW5kKTtcbiAgICAgIGZvciAoY29uc3Qgb3BlcmF0aW9uIG9mIHRoaXMucmVwbGljYS5leHBvcnQoKSkge1xuICAgICAgICBjYW5kaWRhdGUuYXBwbHkob3BlcmF0aW9uKTtcbiAgICAgIH1cbiAgICAgIGxldCBzZXF1ZW5jZSA9IHRoaXMudmVjdG9yLmdldCh0aGlzLmRldmljZSkgPz8gMDtcbiAgICAgIGZvciAoY29uc3QgY2hhbmdlIG9mIGNoYW5nZXMpIHtcbiAgICAgICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICAgICAgdGhpcy5jb3VudGVyID0gbm93ID4gdGhpcy50aW1lID8gMCA6IHRoaXMuY291bnRlciArIDE7XG4gICAgICAgIHRoaXMudGltZSA9IE1hdGgubWF4KG5vdywgdGhpcy50aW1lKTtcbiAgICAgICAgY29uc3Qgb3BlcmF0aW9uOiBEYXRhU3RvcmVPcGVyYXRpb24gPSB7XG4gICAgICAgICAgLi4uY2hhbmdlLFxuICAgICAgICAgIGNvdW50ZXI6IHRoaXMuY291bnRlcixcbiAgICAgICAgICBkZXZpY2U6IHRoaXMuZGV2aWNlLFxuICAgICAgICAgIHNlcXVlbmNlOiArK3NlcXVlbmNlLFxuICAgICAgICAgIHRhZ3M6IGNhbmRpZGF0ZS5vYnNlcnZlZFRhZ3MoY2hhbmdlLmtleSksXG4gICAgICAgICAgdGltZTogdGhpcy50aW1lXG4gICAgICAgIH07XG4gICAgICAgIGNhbmRpZGF0ZS5hcHBseShvcGVyYXRpb24pO1xuICAgICAgICBvcGVyYXRpb25zLnB1c2gob3BlcmF0aW9uKTtcbiAgICAgIH1cbiAgICAgIC8vIFZhbGlkYXRlIGV2ZXJ5IHNpbmdsZSBvcGVyYXRpb24gYmVmb3JlIHB1Ymxpc2hpbmcgYW55IHByZWZpeCBvZiBhIGJhdGNoLlxuICAgICAgZm9yIChjb25zdCBvcGVyYXRpb24gb2Ygb3BlcmF0aW9ucykge1xuICAgICAgICBpZiAoIXRoaXMudHJhbnNwb3J0LmZpdHMoW29wZXJhdGlvbl0pKSB7XG4gICAgICAgICAgYXdhaXQgdGhpcy50cmFuc3BvcnQud3JpdGUoYCR7dGhpcy5kZXZpY2VSb290KCl9L2xvZy0ke1N0cmluZyhvcGVyYXRpb24uc2VxdWVuY2UpfS5tZGAsIFtvcGVyYXRpb25dKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgbGV0IGJhdGNoOiBEYXRhU3RvcmVPcGVyYXRpb25bXSA9IFtdO1xuICAgICAgZm9yIChjb25zdCBvcGVyYXRpb24gb2Ygb3BlcmF0aW9ucykge1xuICAgICAgICBpZiAoIXRoaXMudHJhbnNwb3J0LmZpdHMoWy4uLmJhdGNoLCBvcGVyYXRpb25dKSkge1xuICAgICAgICAgIGF3YWl0IHRoaXMucHVibGlzaChiYXRjaCk7XG4gICAgICAgICAgYmF0Y2ggPSBbXTtcbiAgICAgICAgfVxuICAgICAgICBiYXRjaC5wdXNoKG9wZXJhdGlvbik7XG4gICAgICB9XG4gICAgICBpZiAoYmF0Y2gubGVuZ3RoID4gMCkge1xuICAgICAgICBhd2FpdCB0aGlzLnB1Ymxpc2goYmF0Y2gpO1xuICAgICAgfVxuICAgICAgYXdhaXQgdGhpcy5wZXJzaXN0KCk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGNoZWNrcG9pbnQoKTogQ2hlY2twb2ludCB7XG4gICAgcmV0dXJuIHsgY291bnRlcjogdGhpcy5jb3VudGVyLCBmb3JtYXQ6IDEsIGtpbmQ6IHRoaXMucGFyYW1zLmtpbmQsIG9wZXJhdGlvbnM6IHRoaXMucmVwbGljYS5leHBvcnQoKSwgdGltZTogdGhpcy50aW1lLCB2ZWN0b3I6IFsuLi50aGlzLnZlY3Rvcl0gfTtcbiAgfVxuXG4gIHByaXZhdGUgZGV2aWNlUm9vdCgpOiBzdHJpbmcge1xuICAgIHJldHVybiBgJHt0aGlzLnRyYW5zcG9ydC5yb290fS9kZXZpY2VzLyR7dGhpcy5kZXZpY2V9YDtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgbG9hZExvY2FsKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMucmVwbGljYSA9IG5ldyBEYXRhU3RvcmVSZXBsaWNhKHRoaXMucGFyYW1zLmtpbmQpO1xuICAgIHRoaXMudmVjdG9yLmNsZWFyKCk7XG4gICAgdGhpcy50aW1lID0gMDtcbiAgICB0aGlzLmNvdW50ZXIgPSAwO1xuICAgIHRoaXMubG9jYWxSZWNvcmRzLmNsZWFyKCk7XG4gICAgY29uc3QgcmVjb3JkcyA9IGF3YWl0IHRoaXMucGFyYW1zLmxvY2FsLmVudHJpZXMoKTtcbiAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiByZWNvcmRzKSB7XG4gICAgICBpZiAoa2V5ID09PSAnc2hhcmVkLWNoZWNrcG9pbnQtdjEnKSB7XG4gICAgICAgIHRoaXMubWVyZ2VDaGVja3BvaW50KHZhbHVlKTtcbiAgICAgIH0gZWxzZSBpZiAoa2V5LnN0YXJ0c1dpdGgoUkVDT1JEX1BSRUZJWCkpIHtcbiAgICAgICAgdGhpcy5yZXBsaWNhLmFwcGx5KHZhbHVlKTtcbiAgICAgICAgdGhpcy5sb2NhbFJlY29yZHMuc2V0KGtleSwgZW5zdXJlTm9uTnVsbGFibGUoSlNPTi5zdHJpbmdpZnkodmFsdWUpKSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBtZXJnZUNoZWNrcG9pbnQodmFsdWU6IHVua25vd24pOiB2b2lkIHtcbiAgICBpZiAoXG4gICAgICAhaXNPYmplY3QodmFsdWUpIHx8IHZhbHVlWydmb3JtYXQnXSAhPT0gMSB8fCB2YWx1ZVsna2luZCddICE9PSB0aGlzLnBhcmFtcy5raW5kXG4gICAgICB8fCAhQXJyYXkuaXNBcnJheSh2YWx1ZVsnb3BlcmF0aW9ucyddKSB8fCAhdmFsdWVbJ29wZXJhdGlvbnMnXS5ldmVyeShpc0RhdGFTdG9yZU9wZXJhdGlvbilcbiAgICAgIHx8ICFpc1ZlY3Rvcih2YWx1ZVsndmVjdG9yJ10pIHx8ICFOdW1iZXIuaXNTYWZlSW50ZWdlcih2YWx1ZVsndGltZSddKSB8fCAhTnVtYmVyLmlzU2FmZUludGVnZXIodmFsdWVbJ2NvdW50ZXInXSlcbiAgICApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBkYXRhLXN0b3JlIGNoZWNrcG9pbnQgb3IgaW5jb21wYXRpYmxlIG1lcmdlIHJ1bGUnKTtcbiAgICB9XG4gICAgZm9yIChjb25zdCBvcGVyYXRpb24gb2YgdmFsdWVbJ29wZXJhdGlvbnMnXSkge1xuICAgICAgdGhpcy5yZXBsaWNhLmFwcGx5KG9wZXJhdGlvbik7XG4gICAgfVxuICAgIGZvciAoY29uc3QgW2RldmljZSwgc2VxdWVuY2VdIG9mIHZhbHVlWyd2ZWN0b3InXSkge1xuICAgICAgdGhpcy52ZWN0b3Iuc2V0KGRldmljZSwgTWF0aC5tYXgoc2VxdWVuY2UsIHRoaXMudmVjdG9yLmdldChkZXZpY2UpID8/IDApKTtcbiAgICB9XG4gICAgdGhpcy5vYnNlcnZlQ2xvY2soTnVtYmVyKHZhbHVlWyd0aW1lJ10pLCBOdW1iZXIodmFsdWVbJ2NvdW50ZXInXSkpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBtZXJnZUZpbGVzKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGFsbEZpbGVzID0gYXdhaXQgdGhpcy50cmFuc3BvcnQubGlzdCgpO1xuICAgIGNvbnN0IGZpbGVzID0gYWxsRmlsZXMuZmlsdGVyKChwYXRoKSA9PiBwYXRoLnN0YXJ0c1dpdGgoYCR7dGhpcy50cmFuc3BvcnQucm9vdH0vZGV2aWNlcy9gKSk7XG4gICAgY29uc3QgbWFuaWZlc3RzID0gZmlsZXMuZmlsdGVyKChmaWxlKSA9PiAvXFwvc25hcHNob3QtW1xcdy1dKy1tYW5pZmVzdFxcLm1kJC8udGVzdChmaWxlKSk7XG4gICAgZm9yIChjb25zdCBwYXRoIG9mIG1hbmlmZXN0cykge1xuICAgICAgY29uc3Qgc25hcHNob3QgPSBhd2FpdCB0aGlzLnRyYW5zcG9ydC5yZWFkU25hcHNob3QocGF0aCk7XG4gICAgICBpZiAoc25hcHNob3QgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzLm1lcmdlQ2hlY2twb2ludChzbmFwc2hvdCk7XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IG9wZXJhdGlvbnM6IERhdGFTdG9yZU9wZXJhdGlvbltdID0gW107XG4gICAgY29uc3Qgc2VnbWVudHMgPSBmaWxlcy5maWx0ZXIoKGZpbGUpID0+IC9cXC9sb2ctXFxkK1xcLm1kJC8udGVzdChmaWxlKSk7XG4gICAgZm9yIChjb25zdCBwYXRoIG9mIHNlZ21lbnRzKSB7XG4gICAgICBjb25zdCBzZWdtZW50ID0gYXdhaXQgdGhpcy50cmFuc3BvcnQucmVhZChwYXRoKTtcbiAgICAgIGlmIChzZWdtZW50ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBpZiAoIUFycmF5LmlzQXJyYXkoc2VnbWVudCkgfHwgIXNlZ21lbnQuZXZlcnkoaXNEYXRhU3RvcmVPcGVyYXRpb24pKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBkYXRhLXN0b3JlIGpvdXJuYWwgc2VnbWVudCcpO1xuICAgICAgfVxuICAgICAgY29uc3Qgb3duZXIgPSBwYXRoLnNwbGl0KCcvJykuYXQoT1dORVJfUEFUSF9JTkRFWCk7XG4gICAgICBpZiAoc2VnbWVudC5zb21lKChvcGVyYXRpb24pID0+IG9wZXJhdGlvbi5kZXZpY2UgIT09IG93bmVyKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0pvdXJuYWwgc2VnbWVudCBoYXMgYSBkaWZmZXJlbnQgd3JpdGVyJyk7XG4gICAgICB9XG4gICAgICBvcGVyYXRpb25zLnB1c2goLi4uc2VnbWVudCk7XG4gICAgfVxuICAgIG9wZXJhdGlvbnMuc29ydCgoZmlyc3QsIHNlY29uZCkgPT4gZmlyc3QuZGV2aWNlLmxvY2FsZUNvbXBhcmUoc2Vjb25kLmRldmljZSkgfHwgZmlyc3Quc2VxdWVuY2UgLSBzZWNvbmQuc2VxdWVuY2UpO1xuICAgIGZvciAoY29uc3Qgb3BlcmF0aW9uIG9mIG9wZXJhdGlvbnMpIHtcbiAgICAgIGlmIChvcGVyYXRpb24uc2VxdWVuY2UgPT09ICh0aGlzLnZlY3Rvci5nZXQob3BlcmF0aW9uLmRldmljZSkgPz8gMCkgKyAxKSB7XG4gICAgICAgIHRoaXMuYXBwbHkob3BlcmF0aW9uKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIG9ic2VydmVDbG9jayh0aW1lOiBudW1iZXIsIGNvdW50ZXI6IG51bWJlcik6IHZvaWQge1xuICAgIGlmICh0aW1lID4gdGhpcy50aW1lKSB7XG4gICAgICB0aGlzLnRpbWUgPSB0aW1lO1xuICAgICAgdGhpcy5jb3VudGVyID0gY291bnRlcjtcbiAgICB9IGVsc2UgaWYgKHRpbWUgPT09IHRoaXMudGltZSkge1xuICAgICAgdGhpcy5jb3VudGVyID0gTWF0aC5tYXgodGhpcy5jb3VudGVyLCBjb3VudGVyKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHBlcnNpc3QoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgY2hlY2twb2ludCA9IHRoaXMuY2hlY2twb2ludCgpO1xuICAgIGNvbnN0IHJlY29yZHMgPSBuZXcgTWFwPHN0cmluZywgRGF0YVN0b3JlT3BlcmF0aW9uPigpO1xuICAgIGZvciAoY29uc3Qgb3BlcmF0aW9uIG9mIGNoZWNrcG9pbnQub3BlcmF0aW9ucykge1xuICAgICAgY29uc3QgaWRlbnRpdHkgPSB0aGlzLnBhcmFtcy5raW5kID09PSAnb2JzZXJ2ZWQtcmVtb3ZlLXNldCcgPyBgJHtvcGVyYXRpb24uZGV2aWNlfToke1N0cmluZyhvcGVyYXRpb24uc2VxdWVuY2UpfWAgOiBvcGVyYXRpb24ua2V5O1xuICAgICAgcmVjb3Jkcy5zZXQoYCR7UkVDT1JEX1BSRUZJWH0ke2lkZW50aXR5fWAsIG9wZXJhdGlvbik7XG4gICAgfVxuICAgIGNvbnN0IGVudHJpZXM6IFtzdHJpbmcsIHVua25vd25dW10gPSBbLi4ucmVjb3Jkc10uZmlsdGVyKChba2V5LCB2YWx1ZV0pID0+IHRoaXMubG9jYWxSZWNvcmRzLmdldChrZXkpICE9PSBKU09OLnN0cmluZ2lmeSh2YWx1ZSkpO1xuICAgIGNvbnN0IHJlbW92ZWRLZXlzID0gWy4uLnRoaXMubG9jYWxSZWNvcmRzLmtleXMoKV0uZmlsdGVyKChrZXkpID0+ICFyZWNvcmRzLmhhcyhrZXkpKTtcbiAgICBlbnRyaWVzLnB1c2goWydzaGFyZWQtY2hlY2twb2ludC12MScsIHsgLi4uY2hlY2twb2ludCwgb3BlcmF0aW9uczogW10gfV0pO1xuICAgIGF3YWl0IHRoaXMucGFyYW1zLmxvY2FsLmNvbW1pdCh7IGVudHJpZXMsIHJlbW92ZWRLZXlzIH0pO1xuICAgIGF3YWl0IHRoaXMudHJhbnNwb3J0LndyaXRlKGAke3RoaXMuZGV2aWNlUm9vdCgpfS9oYXZlLm1kYCwgeyBmb3JtYXQ6IDEsIHRpbWU6IERhdGUubm93KCksIHZlY3RvcjogWy4uLnRoaXMudmVjdG9yXSB9KTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcHVibGlzaChvcGVyYXRpb25zOiBEYXRhU3RvcmVPcGVyYXRpb25bXSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGZpcnN0ID0gZW5zdXJlTm9uTnVsbGFibGUob3BlcmF0aW9uc1swXSk7XG4gICAgYXdhaXQgdGhpcy50cmFuc3BvcnQud3JpdGUoYCR7dGhpcy5kZXZpY2VSb290KCl9L2xvZy0ke1N0cmluZyhmaXJzdC5zZXF1ZW5jZSl9Lm1kYCwgb3BlcmF0aW9ucyk7XG4gICAgZm9yIChjb25zdCBvcGVyYXRpb24gb2Ygb3BlcmF0aW9ucykge1xuICAgICAgdGhpcy5hcHBseShvcGVyYXRpb24pO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBpc09iamVjdCh2YWx1ZTogdW5rbm93bik6IHZhbHVlIGlzIFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgIT09IG51bGwgJiYgIUFycmF5LmlzQXJyYXkodmFsdWUpO1xufVxuXG5mdW5jdGlvbiBpc1ZlY3Rvcih2YWx1ZTogdW5rbm93bik6IHZhbHVlIGlzIFZlcnNpb25WZWN0b3Ige1xuICByZXR1cm4gQXJyYXkuaXNBcnJheSh2YWx1ZSkgJiYgdmFsdWUuZXZlcnkoKGVudHJ5OiB1bmtub3duKSA9PlxuICAgIEFycmF5LmlzQXJyYXkoZW50cnkpICYmIGVudHJ5Lmxlbmd0aCA9PT0gVkVDVE9SX0VOVFJZX0xFTkdUSFxuICAgICYmIHR5cGVvZiBlbnRyeVswXSA9PT0gJ3N0cmluZycgJiYgL15bXFx3LV0rJC8udGVzdChlbnRyeVswXSkgJiYgTnVtYmVyLmlzU2FmZUludGVnZXIoZW50cnlbMV0pICYmIE51bWJlcihlbnRyeVsxXSkgPj0gMFxuICApO1xufVxuXG4vKiBlc2xpbnQtZW5hYmxlIG4vbm8tdW5zdXBwb3J0ZWQtZmVhdHVyZXMvbm9kZS1idWlsdGlucyAtLSBUaGVzZSBhcmUgT2JzaWRpYW4gcmVuZGVyZXIgV2ViIEFQSXMsIG5vdCBOb2RlIGJ1aWx0aW5zLiAqL1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQVVBLFNBQVMseUJBQXlCO0FBUWxDO0FBQUEsRUFDRTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBQ1AsU0FBUywwQkFBMEI7QUFFbkMsTUFBTSxxQ0FBcUM7QUFFM0MsTUFBTSxtQkFBbUI7QUFFekIsTUFBTSxzQkFBc0I7QUFDNUIsTUFBTSxvQkFBb0I7QUFDMUIsTUFBTSxnQkFBZ0I7QUFtRWYsTUFBTSxnQkFBZ0I7QUFBQSxFQVNuQixZQUErQixRQUFzRCxRQUFnQjtBQUF0RTtBQUFzRDtBQUMzRixTQUFLLFlBQVksSUFBSSxtQkFBbUIsTUFBTTtBQUM5QyxTQUFLLFVBQVUsSUFBSSxpQkFBaUIsT0FBTyxJQUFJO0FBQy9DLFNBQUssMkJBQTJCLE9BQU8sNEJBQTRCO0FBQ25FLFFBQUksQ0FBQyxPQUFPLFNBQVMsS0FBSyx3QkFBd0IsS0FBSyxLQUFLLDRCQUE0QixHQUFHO0FBQ3pGLFlBQU0sSUFBSSxNQUFNLDZDQUE2QztBQUFBLElBQy9EO0FBQUEsRUFDRjtBQUFBLEVBUHVDO0FBQUEsRUFBc0Q7QUFBQSxFQVI1RTtBQUFBLEVBQ1QsVUFBVTtBQUFBLEVBQ0QsZUFBZSxvQkFBSSxJQUFvQjtBQUFBLEVBQ2hEO0FBQUEsRUFDQSxPQUFPO0FBQUEsRUFDRTtBQUFBLEVBQ0EsU0FBUyxvQkFBSSxJQUFvQjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBaUJsRCxhQUFvQixLQUFLLFFBQTZEO0FBQ3BGLFVBQU0sU0FBUyxNQUFNLE9BQU8sTUFBTSxZQUFZLG9CQUFvQixPQUFPLE9BQU8sV0FBVyxDQUFDO0FBQzVG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
@@ -0,0 +1,17 @@
1
+ /// <reference path="./library-references.d.mts" />
2
+ /**
3
+ * @file
4
+ *
5
+ * Desktop git runner with Node modules loaded only when a command runs.
6
+ */
7
+ import type { GitRunner } from './git-rename-history.mjs';
8
+ /**
9
+ * Creates a {@link GitRunner} for a folder.
10
+ *
11
+ * Call the runner only on desktop, behind `Platform.isDesktopApp`. Importing this module and creating a
12
+ * runner are safe on mobile: Node modules load only when the runner executes a command.
13
+ *
14
+ * @param cwd - The folder to run `git` in.
15
+ * @returns The runner.
16
+ */
17
+ export declare function createDesktopGitRunner(cwd: string): GitRunner;
@@ -0,0 +1,19 @@
1
+ /*
2
+ THIS IS A GENERATED/BUNDLED FILE BY ESBUILD
3
+ if you want to view the source, please visit the github repository of this plugin
4
+ */
5
+
6
+ const GIT_OUTPUT_LIMIT_IN_BYTES = 268435456;
7
+ function createDesktopGitRunner(cwd) {
8
+ return async (arguments_) => {
9
+ const { execFile } = await import("node:child_process");
10
+ const { promisify } = await import("node:util");
11
+ const execFileAsync = promisify(execFile);
12
+ const { stdout } = await execFileAsync("git", [...arguments_], { cwd, encoding: "utf-8", maxBuffer: GIT_OUTPUT_LIMIT_IN_BYTES, windowsHide: true });
13
+ return stdout;
14
+ };
15
+ }
16
+ export {
17
+ createDesktopGitRunner
18
+ };
19
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2Rlc2t0b3AtZ2l0LXJ1bm5lci50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIERlc2t0b3AgZ2l0IHJ1bm5lciB3aXRoIE5vZGUgbW9kdWxlcyBsb2FkZWQgb25seSB3aGVuIGEgY29tbWFuZCBydW5zLlxuICovXG5cbmltcG9ydCB0eXBlIHsgR2l0UnVubmVyIH0gZnJvbSAnLi9naXQtcmVuYW1lLWhpc3RvcnkudHMnO1xuXG4vKipcbiAqIExhcmdlIGVub3VnaCBmb3IgdGhlIHJlbmFtZSBoaXN0b3J5IG9mIGFueSB2YXVsdDogYC0tZGlmZi1maWx0ZXI9UmAga2VlcHMgb25seSB0aGUgcmVuYW1lcy4gMjU2IE1pQi5cbiAqL1xuY29uc3QgR0lUX09VVFBVVF9MSU1JVF9JTl9CWVRFUyA9IDI2OF80MzVfNDU2O1xuXG4vKipcbiAqIENyZWF0ZXMgYSB7QGxpbmsgR2l0UnVubmVyfSBmb3IgYSBmb2xkZXIuXG4gKlxuICogQ2FsbCB0aGUgcnVubmVyIG9ubHkgb24gZGVza3RvcCwgYmVoaW5kIGBQbGF0Zm9ybS5pc0Rlc2t0b3BBcHBgLiBJbXBvcnRpbmcgdGhpcyBtb2R1bGUgYW5kIGNyZWF0aW5nIGFcbiAqIHJ1bm5lciBhcmUgc2FmZSBvbiBtb2JpbGU6IE5vZGUgbW9kdWxlcyBsb2FkIG9ubHkgd2hlbiB0aGUgcnVubmVyIGV4ZWN1dGVzIGEgY29tbWFuZC5cbiAqXG4gKiBAcGFyYW0gY3dkIC0gVGhlIGZvbGRlciB0byBydW4gYGdpdGAgaW4uXG4gKiBAcmV0dXJucyBUaGUgcnVubmVyLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlRGVza3RvcEdpdFJ1bm5lcihjd2Q6IHN0cmluZyk6IEdpdFJ1bm5lciB7XG4gIHJldHVybiBhc3luYyAoYXJndW1lbnRzXykgPT4ge1xuICAgIGNvbnN0IHsgZXhlY0ZpbGUgfSA9IGF3YWl0IGltcG9ydCgnbm9kZTpjaGlsZF9wcm9jZXNzJyk7XG4gICAgY29uc3QgeyBwcm9taXNpZnkgfSA9IGF3YWl0IGltcG9ydCgnbm9kZTp1dGlsJyk7XG4gICAgY29uc3QgZXhlY0ZpbGVBc3luYyA9IHByb21pc2lmeShleGVjRmlsZSk7XG4gICAgY29uc3QgeyBzdGRvdXQgfSA9IGF3YWl0IGV4ZWNGaWxlQXN5bmMoJ2dpdCcsIFsuLi5hcmd1bWVudHNfXSwgeyBjd2QsIGVuY29kaW5nOiAndXRmLTgnLCBtYXhCdWZmZXI6IEdJVF9PVVRQVVRfTElNSVRfSU5fQllURVMsIHdpbmRvd3NIaWRlOiB0cnVlIH0pO1xuICAgIHJldHVybiBzdGRvdXQ7XG4gIH07XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7OztBQVdBLE1BQU0sNEJBQTRCO0FBVzNCLFNBQVMsdUJBQXVCLEtBQXdCO0FBQzdELFNBQU8sT0FBTyxlQUFlO0FBQzNCLFVBQU0sRUFBRSxTQUFTLElBQUksTUFBTSxPQUFPLG9CQUFvQjtBQUN0RCxVQUFNLEVBQUUsVUFBVSxJQUFJLE1BQU0sT0FBTyxXQUFXO0FBQzlDLFVBQU0sZ0JBQWdCLFVBQVUsUUFBUTtBQUN4QyxVQUFNLEVBQUUsT0FBTyxJQUFJLE1BQU0sY0FBYyxPQUFPLENBQUMsR0FBRyxVQUFVLEdBQUcsRUFBRSxLQUFLLFVBQVUsU0FBUyxXQUFXLDJCQUEyQixhQUFhLEtBQUssQ0FBQztBQUNsSixXQUFPO0FBQUEsRUFDVDtBQUNGOyIsCiAgIm5hbWVzIjogW10KfQo=
@@ -30,7 +30,6 @@ function ensureBrowserProcess() {
30
30
  ensureBrowserProcess();
31
31
  })();
32
32
 
33
- import { castTo } from "@mnaoumov/typescript-lib/object-utils";
34
33
  import { EditorSuggest } from "obsidian";
35
34
  class CommandEditorSuggest extends EditorSuggest {
36
35
  commandStart = null;
@@ -73,7 +72,7 @@ class CommandEditorSuggest extends EditorSuggest {
73
72
  openFromCommand(params) {
74
73
  const { editor, file } = params;
75
74
  this.commandStart = editor.getCursor();
76
- if (!this.trigger(editor, castTo(file), true)) {
75
+ if (!this.trigger(editor, file, true)) {
77
76
  this.commandStart = null;
78
77
  return false;
79
78
  }
@@ -106,4 +105,4 @@ export {
106
105
  CommandEditorSuggest,
107
106
  prioritizeEditorSuggest
108
107
  };
109
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9lZGl0b3Itc3VnZ2VzdC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBmaWxlXG4gKlxuICogSGVscGVycyBmb3IgYEVkaXRvclN1Z2dlc3RgOiBnaXZpbmcgb25lIHByaW9yaXR5IG92ZXIgdGhlIG90aGVycywgYW5kIG9wZW5pbmcgb25lIGZyb20gYSBjb21tYW5kLlxuICpcbiAqIFJlYWQgZnJvbSBPYnNpZGlhbiBgMS4xNS4wYDogdGhlIGVkaXRvciBhc2tzIGVhY2ggc3VnZ2VzdCBpbiBgYXBwLndvcmtzcGFjZS5lZGl0b3JTdWdnZXN0LnN1Z2dlc3RzYCBpbiBvcmRlciwgYW5kIHRoZVxuICogZmlyc3Qgd2hvc2UgYHRyaWdnZXJgIGFjY2VwdHMgdGhlIGN1cnNvciB3aW5zLCBzbyByZWdpc3RyYXRpb24gb3JkZXIgZGVjaWRlcyB3aGljaCBzdWdnZXN0IG9wZW5zLiBBIHN1Z2dlc3Qgc2hvd3MgaXRzXG4gKiBsaXN0IG9ubHkgd2hlbiB0aGUgdHJpZ2dlciBpcyBleHBsaWNpdCAodGhlIHVzZXIgdHlwZWQpIG9yIGl0IGlzIGFscmVhZHkgb3Blbi5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7XG4gIEFwcCxcbiAgRWRpdG9yLFxuICBFZGl0b3JQb3NpdGlvbixcbiAgRWRpdG9yU3VnZ2VzdFRyaWdnZXJJbmZvLFxuICBURmlsZVxufSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB7IGNhc3RUbyB9IGZyb20gJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWxpYi9vYmplY3QtdXRpbHMnO1xuaW1wb3J0IHsgRWRpdG9yU3VnZ2VzdCB9IGZyb20gJ29ic2lkaWFuJztcblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgQ29tbWFuZEVkaXRvclN1Z2dlc3Qub3BlbkZyb21Db21tYW5kfS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb21tYW5kRWRpdG9yU3VnZ2VzdE9wZW5Gcm9tQ29tbWFuZFBhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgZWRpdG9yIHRvIG9wZW4gdGhlIHN1Z2dlc3QgaW4uXG4gICAqL1xuICByZWFkb25seSBlZGl0b3I6IEVkaXRvcjtcblxuICAvKipcbiAgICogVGhlIGZpbGUgb3BlbiBpbiB0aGUgZWRpdG9yLlxuICAgKi9cbiAgcmVhZG9ubHkgZmlsZTogbnVsbCB8IFRGaWxlO1xufVxuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBwcmlvcml0aXplRWRpdG9yU3VnZ2VzdH0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUHJpb3JpdGl6ZUVkaXRvclN1Z2dlc3RQYXJhbXMge1xuICAvKipcbiAgICogVGhlIE9ic2lkaWFuIGFwcC5cbiAgICovXG4gIHJlYWRvbmx5IGFwcDogQXBwO1xuXG4gIC8qKlxuICAgKiBUaGUgcmVnaXN0ZXJlZCBlZGl0b3Igc3VnZ2VzdC5cbiAgICovXG4gIHJlYWRvbmx5IGVkaXRvclN1Z2dlc3Q6IEVkaXRvclN1Z2dlc3Q8dW5rbm93bj47XG59XG5cbi8qKlxuICogQW4gZWRpdG9yIHN1Z2dlc3QgdGhhdCBhIGNvbW1hbmQgY2FuIG9wZW4gYXQgdGhlIGN1cnNvciwgd2l0aG91dCBhIHRyaWdnZXIgY2hhcmFjdGVyLlxuICpcbiAqIHtAbGluayBDb21tYW5kRWRpdG9yU3VnZ2VzdC5vcGVuRnJvbUNvbW1hbmR9IG9wZW5zIGl0IGF0IHRoZSBjdXJzb3I7IHRoZSB0ZXh0IHR5cGVkIGFmdGVyIHRoYXQgcG9pbnQsIG9uIHRoZSBzYW1lXG4gKiBsaW5lLCBpcyB0aGUgcXVlcnksIGFuZCBtb3ZpbmcgdGhlIGN1cnNvciBiZWZvcmUgdGhhdCBwb2ludCBvciBvZmYgdGhlIGxpbmUgY2xvc2VzIGl0LiBBIHN1YmNsYXNzIG1heSBzdGlsbCBvcGVuIG9uXG4gKiB0eXBlZCB0ZXh0IGJ5IG92ZXJyaWRpbmcge0BsaW5rIENvbW1hbmRFZGl0b3JTdWdnZXN0Lm9uVGV4dFRyaWdnZXJ9LlxuICpcbiAqIFJlZ2lzdGVyIGl0IGFzIHVzdWFsLCBzbyB0aGUgZWRpdG9yIGtlZXBzIGl0IHVwZGF0ZWQgd2hpbGUgdGhlIHVzZXIgdHlwZXM6XG4gKlxuICogYGBgdHNcbiAqIGNvbnN0IHN1Z2dlc3QgPSBuZXcgRW1vamlTdWdnZXN0KHRoaXMuYXBwKTtcbiAqIHRoaXMucmVnaXN0ZXJFZGl0b3JTdWdnZXN0KHN1Z2dlc3QpO1xuICogdGhpcy5hZGRDb21tYW5kKHtcbiAqICAgZWRpdG9yQ2FsbGJhY2s6IChlZGl0b3IsIGN0eCkgPT4ge1xuICogICAgIHN1Z2dlc3Qub3BlbkZyb21Db21tYW5kKHsgZWRpdG9yLCBmaWxlOiBjdHguZmlsZSB9KTtcbiAqICAgfSxcbiAqICAgaWQ6ICdpbnNlcnQtZW1vamknLFxuICogICBuYW1lOiAnSW5zZXJ0IGVtb2ppJ1xuICogfSk7XG4gKiBgYGBcbiAqXG4gKiBAdHlwZVBhcmFtIFQgLSBUaGUgdHlwZSBvZiBhIHN1Z2dlc3Rpb24uXG4gKi9cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBDb21tYW5kRWRpdG9yU3VnZ2VzdDxUPiBleHRlbmRzIEVkaXRvclN1Z2dlc3Q8VD4ge1xuICBwcml2YXRlIGNvbW1hbmRTdGFydDogRWRpdG9yUG9zaXRpb24gfCBudWxsID0gbnVsbDtcblxuICAvKipcbiAgICogQ2xvc2VzIHRoZSBzdWdnZXN0LCBlbmRpbmcgYSBjb21tYW5kLW9wZW5lZCBzZXNzaW9uLlxuICAgKi9cbiAgcHVibGljIG92ZXJyaWRlIGNsb3NlKCk6IHZvaWQge1xuICAgIHRoaXMuY29tbWFuZFN0YXJ0ID0gbnVsbDtcbiAgICBzdXBlci5jbG9zZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIERlY2lkZXMgd2hldGhlciB0aGUgc3VnZ2VzdCBvcGVucy4gV2hpbGUgYSBjb21tYW5kLW9wZW5lZCBzZXNzaW9uIGxhc3RzLCB0aGUgcXVlcnkgaXMgdGhlIHRleHQgZnJvbSB3aGVyZSBpdCB3YXNcbiAgICogb3BlbmVkIHRvIHRoZSBjdXJzb3I7IG90aGVyd2lzZSB7QGxpbmsgQ29tbWFuZEVkaXRvclN1Z2dlc3Qub25UZXh0VHJpZ2dlcn0gZGVjaWRlcy5cbiAgICpcbiAgICogQHBhcmFtIGN1cnNvciAtIFRoZSBjdXJzb3IuXG4gICAqIEBwYXJhbSBlZGl0b3IgLSBUaGUgZWRpdG9yLlxuICAgKiBAcGFyYW0gZmlsZSAtIFRoZSBmaWxlIG9wZW4gaW4gdGhlIGVkaXRvci5cbiAgICogQHJldHVybnMgVGhlIHRyaWdnZXIgaW5mbywgb3IgYG51bGxgIHRvIHN0YXkgY2xvc2VkLlxuICAgKi9cbiAgcHVibGljIG92ZXJyaWRlIG9uVHJpZ2dlcihjdXJzb3I6IEVkaXRvclBvc2l0aW9uLCBlZGl0b3I6IEVkaXRvciwgZmlsZTogbnVsbCB8IFRGaWxlKTogRWRpdG9yU3VnZ2VzdFRyaWdnZXJJbmZvIHwgbnVsbCB7XG4gICAgY29uc3Qgc3RhcnQgPSB0aGlzLmNvbW1hbmRTdGFydDtcbiAgICBpZiAoc3RhcnQpIHtcbiAgICAgIGlmIChjdXJzb3IubGluZSA9PT0gc3RhcnQubGluZSAmJiBjdXJzb3IuY2ggPj0gc3RhcnQuY2gpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBlbmQ6IGN1cnNvcixcbiAgICAgICAgICBxdWVyeTogZWRpdG9yLmdldExpbmUoY3Vyc29yLmxpbmUpLnNsaWNlKHN0YXJ0LmNoLCBjdXJzb3IuY2gpLFxuICAgICAgICAgIHN0YXJ0XG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICB0aGlzLmNvbW1hbmRTdGFydCA9IG51bGw7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLm9uVGV4dFRyaWdnZXIoY3Vyc29yLCBlZGl0b3IsIGZpbGUpO1xuICB9XG5cbiAgLyoqXG4gICAqIE9wZW5zIHRoZSBzdWdnZXN0IGF0IHRoZSBjdXJzb3Igb2YgYW4gZWRpdG9yLCB0eXBpY2FsbHkgZnJvbSBhIGNvbW1hbmQncyBgZWRpdG9yQ2FsbGJhY2tgLlxuICAgKlxuICAgKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMuXG4gICAqIEByZXR1cm5zIFdoZXRoZXIgdGhlIHN1Z2dlc3QgYWNjZXB0ZWQgdGhlIGN1cnNvcjogYGZhbHNlYCB3aGVuIHRleHQgaXMgc2VsZWN0ZWQuXG4gICAqL1xuICBwdWJsaWMgb3BlbkZyb21Db21tYW5kKHBhcmFtczogQ29tbWFuZEVkaXRvclN1Z2dlc3RPcGVuRnJvbUNvbW1hbmRQYXJhbXMpOiBib29sZWFuIHtcbiAgICBjb25zdCB7IGVkaXRvciwgZmlsZSB9ID0gcGFyYW1zO1xuICAgIHRoaXMuY29tbWFuZFN0YXJ0ID0gZWRpdG9yLmdldEN1cnNvcigpO1xuICAgIC8vIFRPRE86IFBhc3MgYGZpbGVgIHN0cmFpZ2h0IHRocm91Z2ggb25jZSBvYnNpZGlhbi10eXBpbmdzIHR5cGVzIGl0IGBURmlsZSB8IG51bGxgLlxuICAgIGlmICghdGhpcy50cmlnZ2VyKGVkaXRvciwgY2FzdFRvPFRGaWxlPihmaWxlKSwgdHJ1ZSkpIHtcbiAgICAgIHRoaXMuY29tbWFuZFN0YXJ0ID0gbnVsbDtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgdGhpcy5hcHAud29ya3NwYWNlLmVkaXRvclN1Z2dlc3Quc2V0Q3VycmVudFN1Z2dlc3QodGhpcyk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvKipcbiAgICogRGVjaWRlcyB3aGV0aGVyIHRoZSBzdWdnZXN0IG9wZW5zIG9uIHR5cGVkIHRleHQsIG91dHNpZGUgYSBjb21tYW5kLW9wZW5lZCBzZXNzaW9uLiBOZXZlciwgYnkgZGVmYXVsdC5cbiAgICpcbiAgICogQHBhcmFtIF9jdXJzb3IgLSBUaGUgY3Vyc29yLlxuICAgKiBAcGFyYW0gX2VkaXRvciAtIFRoZSBlZGl0b3IuXG4gICAqIEBwYXJhbSBfZmlsZSAtIFRoZSBmaWxlIG9wZW4gaW4gdGhlIGVkaXRvci5cbiAgICogQHJldHVybnMgVGhlIHRyaWdnZXIgaW5mbywgb3IgYG51bGxgIHRvIHN0YXkgY2xvc2VkLlxuICAgKi9cbiAgcHJvdGVjdGVkIG9uVGV4dFRyaWdnZXIoX2N1cnNvcjogRWRpdG9yUG9zaXRpb24sIF9lZGl0b3I6IEVkaXRvciwgX2ZpbGU6IG51bGwgfCBURmlsZSk6IEVkaXRvclN1Z2dlc3RUcmlnZ2VySW5mbyB8IG51bGwge1xuICAgIHJldHVybiBudWxsO1xuICB9XG59XG5cbi8qKlxuICogTW92ZXMgYSByZWdpc3RlcmVkIGVkaXRvciBzdWdnZXN0IHRvIHRoZSBmcm9udCBvZiB0aGUgbGlzdCB0aGUgZWRpdG9yIGFza3MsIHNvIGl0IG9wZW5zIGFoZWFkIG9mIGV2ZXJ5IG90aGVyIHN1Z2dlc3RcbiAqIHdob3NlIHRyaWdnZXIgYWNjZXB0cyB0aGUgc2FtZSB0ZXh0LCBPYnNpZGlhbidzIG93biBgW1tgIGFuZCBgI2Agc3VnZ2VzdHMgaW5jbHVkZWQuIEEgc3VnZ2VzdCBwcmlvcml0aXplZCBsYXRlciBnb2VzXG4gKiBhaGVhZCBvZiBpdCBpbiB0dXJuLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcGFyYW1ldGVycy5cbiAqIEB0aHJvd3MgSWYgdGhlIGVkaXRvciBzdWdnZXN0IGlzIG5vdCByZWdpc3RlcmVkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcHJpb3JpdGl6ZUVkaXRvclN1Z2dlc3QocGFyYW1zOiBQcmlvcml0aXplRWRpdG9yU3VnZ2VzdFBhcmFtcyk6IHZvaWQge1xuICBjb25zdCB7IGFwcCwgZWRpdG9yU3VnZ2VzdCB9ID0gcGFyYW1zO1xuICBjb25zdCBzdWdnZXN0cyA9IGFwcC53b3Jrc3BhY2UuZWRpdG9yU3VnZ2VzdC5zdWdnZXN0cztcbiAgY29uc3QgaW5kZXggPSBzdWdnZXN0cy5pbmRleE9mKGVkaXRvclN1Z2dlc3QpO1xuICBpZiAoaW5kZXggPT09IC0xKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgZWRpdG9yIHN1Z2dlc3QgaXMgbm90IHJlZ2lzdGVyZWQuIFJlZ2lzdGVyIGl0IGJlZm9yZSBwcmlvcml0aXppbmcgaXQuJyk7XG4gIH1cbiAgc3VnZ2VzdHMuc3BsaWNlKGluZGV4LCAxKTtcbiAgc3VnZ2VzdHMudW5zaGlmdChlZGl0b3JTdWdnZXN0KTtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFrQkEsU0FBUyxjQUFjO0FBQ3ZCLFNBQVMscUJBQXFCO0FBdUR2QixNQUFlLDZCQUFnQyxjQUFpQjtBQUFBLEVBQzdELGVBQXNDO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFLOUIsUUFBYztBQUM1QixTQUFLLGVBQWU7QUFDcEIsVUFBTSxNQUFNO0FBQUEsRUFDZDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBV2dCLFVBQVUsUUFBd0IsUUFBZ0IsTUFBcUQ7QUFDckgsVUFBTSxRQUFRLEtBQUs7QUFDbkIsUUFBSSxPQUFPO0FBQ1QsVUFBSSxPQUFPLFNBQVMsTUFBTSxRQUFRLE9BQU8sTUFBTSxNQUFNLElBQUk7QUFDdkQsZUFBTztBQUFBLFVBQ0wsS0FBSztBQUFBLFVBQ0wsT0FBTyxPQUFPLFFBQVEsT0FBTyxJQUFJLEVBQUUsTUFBTSxNQUFNLElBQUksT0FBTyxFQUFFO0FBQUEsVUFDNUQ7QUFBQSxRQUNGO0FBQUEsTUFDRjtBQUNBLFdBQUssZUFBZTtBQUFBLElBQ3RCO0FBQ0EsV0FBTyxLQUFLLGNBQWMsUUFBUSxRQUFRLElBQUk7QUFBQSxFQUNoRDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBUU8sZ0JBQWdCLFFBQTREO0FBQ2pGLFVBQU0sRUFBRSxRQUFRLEtBQUssSUFBSTtBQUN6QixTQUFLLGVBQWUsT0FBTyxVQUFVO0FBRXJDLFFBQUksQ0FBQyxLQUFLLFFBQVEsUUFBUSxPQUFjLElBQUksR0FBRyxJQUFJLEdBQUc7QUFDcEQsV0FBSyxlQUFlO0FBQ3BCLGFBQU87QUFBQSxJQUNUO0FBQ0EsU0FBSyxJQUFJLFVBQVUsY0FBYyxrQkFBa0IsSUFBSTtBQUN2RCxXQUFPO0FBQUEsRUFDVDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQVVVLGNBQWMsU0FBeUIsU0FBaUIsT0FBc0Q7QUFDdEgsV0FBTztBQUFBLEVBQ1Q7QUFDRjtBQVVPLFNBQVMsd0JBQXdCLFFBQTZDO0FBQ25GLFFBQU0sRUFBRSxLQUFLLGNBQWMsSUFBSTtBQUMvQixRQUFNLFdBQVcsSUFBSSxVQUFVLGNBQWM7QUFDN0MsUUFBTSxRQUFRLFNBQVMsUUFBUSxhQUFhO0FBQzVDLE1BQUksVUFBVSxJQUFJO0FBQ2hCLFVBQU0sSUFBSSxNQUFNLDJFQUEyRTtBQUFBLEVBQzdGO0FBQ0EsV0FBUyxPQUFPLE9BQU8sQ0FBQztBQUN4QixXQUFTLFFBQVEsYUFBYTtBQUNoQzsiLCJuYW1lcyI6W119
108
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9lZGl0b3Itc3VnZ2VzdC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBmaWxlXG4gKlxuICogSGVscGVycyBmb3IgYEVkaXRvclN1Z2dlc3RgOiBnaXZpbmcgb25lIHByaW9yaXR5IG92ZXIgdGhlIG90aGVycywgYW5kIG9wZW5pbmcgb25lIGZyb20gYSBjb21tYW5kLlxuICpcbiAqIFJlYWQgZnJvbSBPYnNpZGlhbiBgMS4xNS4wYDogdGhlIGVkaXRvciBhc2tzIGVhY2ggc3VnZ2VzdCBpbiBgYXBwLndvcmtzcGFjZS5lZGl0b3JTdWdnZXN0LnN1Z2dlc3RzYCBpbiBvcmRlciwgYW5kIHRoZVxuICogZmlyc3Qgd2hvc2UgYHRyaWdnZXJgIGFjY2VwdHMgdGhlIGN1cnNvciB3aW5zLCBzbyByZWdpc3RyYXRpb24gb3JkZXIgZGVjaWRlcyB3aGljaCBzdWdnZXN0IG9wZW5zLiBBIHN1Z2dlc3Qgc2hvd3MgaXRzXG4gKiBsaXN0IG9ubHkgd2hlbiB0aGUgdHJpZ2dlciBpcyBleHBsaWNpdCAodGhlIHVzZXIgdHlwZWQpIG9yIGl0IGlzIGFscmVhZHkgb3Blbi5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7XG4gIEFwcCxcbiAgRWRpdG9yLFxuICBFZGl0b3JQb3NpdGlvbixcbiAgRWRpdG9yU3VnZ2VzdFRyaWdnZXJJbmZvLFxuICBURmlsZVxufSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB7IEVkaXRvclN1Z2dlc3QgfSBmcm9tICdvYnNpZGlhbic7XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIENvbW1hbmRFZGl0b3JTdWdnZXN0Lm9wZW5Gcm9tQ29tbWFuZH0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29tbWFuZEVkaXRvclN1Z2dlc3RPcGVuRnJvbUNvbW1hbmRQYXJhbXMge1xuICAvKipcbiAgICogVGhlIGVkaXRvciB0byBvcGVuIHRoZSBzdWdnZXN0IGluLlxuICAgKi9cbiAgcmVhZG9ubHkgZWRpdG9yOiBFZGl0b3I7XG5cbiAgLyoqXG4gICAqIFRoZSBmaWxlIG9wZW4gaW4gdGhlIGVkaXRvci5cbiAgICovXG4gIHJlYWRvbmx5IGZpbGU6IG51bGwgfCBURmlsZTtcbn1cblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgcHJpb3JpdGl6ZUVkaXRvclN1Z2dlc3R9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFByaW9yaXRpemVFZGl0b3JTdWdnZXN0UGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBPYnNpZGlhbiBhcHAuXG4gICAqL1xuICByZWFkb25seSBhcHA6IEFwcDtcblxuICAvKipcbiAgICogVGhlIHJlZ2lzdGVyZWQgZWRpdG9yIHN1Z2dlc3QuXG4gICAqL1xuICByZWFkb25seSBlZGl0b3JTdWdnZXN0OiBFZGl0b3JTdWdnZXN0PHVua25vd24+O1xufVxuXG4vKipcbiAqIEFuIGVkaXRvciBzdWdnZXN0IHRoYXQgYSBjb21tYW5kIGNhbiBvcGVuIGF0IHRoZSBjdXJzb3IsIHdpdGhvdXQgYSB0cmlnZ2VyIGNoYXJhY3Rlci5cbiAqXG4gKiB7QGxpbmsgQ29tbWFuZEVkaXRvclN1Z2dlc3Qub3BlbkZyb21Db21tYW5kfSBvcGVucyBpdCBhdCB0aGUgY3Vyc29yOyB0aGUgdGV4dCB0eXBlZCBhZnRlciB0aGF0IHBvaW50LCBvbiB0aGUgc2FtZVxuICogbGluZSwgaXMgdGhlIHF1ZXJ5LCBhbmQgbW92aW5nIHRoZSBjdXJzb3IgYmVmb3JlIHRoYXQgcG9pbnQgb3Igb2ZmIHRoZSBsaW5lIGNsb3NlcyBpdC4gQSBzdWJjbGFzcyBtYXkgc3RpbGwgb3BlbiBvblxuICogdHlwZWQgdGV4dCBieSBvdmVycmlkaW5nIHtAbGluayBDb21tYW5kRWRpdG9yU3VnZ2VzdC5vblRleHRUcmlnZ2VyfS5cbiAqXG4gKiBSZWdpc3RlciBpdCBhcyB1c3VhbCwgc28gdGhlIGVkaXRvciBrZWVwcyBpdCB1cGRhdGVkIHdoaWxlIHRoZSB1c2VyIHR5cGVzOlxuICpcbiAqIGBgYHRzXG4gKiBjb25zdCBzdWdnZXN0ID0gbmV3IEVtb2ppU3VnZ2VzdCh0aGlzLmFwcCk7XG4gKiB0aGlzLnJlZ2lzdGVyRWRpdG9yU3VnZ2VzdChzdWdnZXN0KTtcbiAqIHRoaXMuYWRkQ29tbWFuZCh7XG4gKiAgIGVkaXRvckNhbGxiYWNrOiAoZWRpdG9yLCBjdHgpID0+IHtcbiAqICAgICBzdWdnZXN0Lm9wZW5Gcm9tQ29tbWFuZCh7IGVkaXRvciwgZmlsZTogY3R4LmZpbGUgfSk7XG4gKiAgIH0sXG4gKiAgIGlkOiAnaW5zZXJ0LWVtb2ppJyxcbiAqICAgbmFtZTogJ0luc2VydCBlbW9qaSdcbiAqIH0pO1xuICogYGBgXG4gKlxuICogQHR5cGVQYXJhbSBUIC0gVGhlIHR5cGUgb2YgYSBzdWdnZXN0aW9uLlxuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQ29tbWFuZEVkaXRvclN1Z2dlc3Q8VD4gZXh0ZW5kcyBFZGl0b3JTdWdnZXN0PFQ+IHtcbiAgcHJpdmF0ZSBjb21tYW5kU3RhcnQ6IEVkaXRvclBvc2l0aW9uIHwgbnVsbCA9IG51bGw7XG5cbiAgLyoqXG4gICAqIENsb3NlcyB0aGUgc3VnZ2VzdCwgZW5kaW5nIGEgY29tbWFuZC1vcGVuZWQgc2Vzc2lvbi5cbiAgICovXG4gIHB1YmxpYyBvdmVycmlkZSBjbG9zZSgpOiB2b2lkIHtcbiAgICB0aGlzLmNvbW1hbmRTdGFydCA9IG51bGw7XG4gICAgc3VwZXIuY2xvc2UoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWNpZGVzIHdoZXRoZXIgdGhlIHN1Z2dlc3Qgb3BlbnMuIFdoaWxlIGEgY29tbWFuZC1vcGVuZWQgc2Vzc2lvbiBsYXN0cywgdGhlIHF1ZXJ5IGlzIHRoZSB0ZXh0IGZyb20gd2hlcmUgaXQgd2FzXG4gICAqIG9wZW5lZCB0byB0aGUgY3Vyc29yOyBvdGhlcndpc2Uge0BsaW5rIENvbW1hbmRFZGl0b3JTdWdnZXN0Lm9uVGV4dFRyaWdnZXJ9IGRlY2lkZXMuXG4gICAqXG4gICAqIEBwYXJhbSBjdXJzb3IgLSBUaGUgY3Vyc29yLlxuICAgKiBAcGFyYW0gZWRpdG9yIC0gVGhlIGVkaXRvci5cbiAgICogQHBhcmFtIGZpbGUgLSBUaGUgZmlsZSBvcGVuIGluIHRoZSBlZGl0b3IuXG4gICAqIEByZXR1cm5zIFRoZSB0cmlnZ2VyIGluZm8sIG9yIGBudWxsYCB0byBzdGF5IGNsb3NlZC5cbiAgICovXG4gIHB1YmxpYyBvdmVycmlkZSBvblRyaWdnZXIoY3Vyc29yOiBFZGl0b3JQb3NpdGlvbiwgZWRpdG9yOiBFZGl0b3IsIGZpbGU6IG51bGwgfCBURmlsZSk6IEVkaXRvclN1Z2dlc3RUcmlnZ2VySW5mbyB8IG51bGwge1xuICAgIGNvbnN0IHN0YXJ0ID0gdGhpcy5jb21tYW5kU3RhcnQ7XG4gICAgaWYgKHN0YXJ0KSB7XG4gICAgICBpZiAoY3Vyc29yLmxpbmUgPT09IHN0YXJ0LmxpbmUgJiYgY3Vyc29yLmNoID49IHN0YXJ0LmNoKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgZW5kOiBjdXJzb3IsXG4gICAgICAgICAgcXVlcnk6IGVkaXRvci5nZXRMaW5lKGN1cnNvci5saW5lKS5zbGljZShzdGFydC5jaCwgY3Vyc29yLmNoKSxcbiAgICAgICAgICBzdGFydFxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgdGhpcy5jb21tYW5kU3RhcnQgPSBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5vblRleHRUcmlnZ2VyKGN1cnNvciwgZWRpdG9yLCBmaWxlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBPcGVucyB0aGUgc3VnZ2VzdCBhdCB0aGUgY3Vyc29yIG9mIGFuIGVkaXRvciwgdHlwaWNhbGx5IGZyb20gYSBjb21tYW5kJ3MgYGVkaXRvckNhbGxiYWNrYC5cbiAgICpcbiAgICogQHBhcmFtIHBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzLlxuICAgKiBAcmV0dXJucyBXaGV0aGVyIHRoZSBzdWdnZXN0IGFjY2VwdGVkIHRoZSBjdXJzb3I6IGBmYWxzZWAgd2hlbiB0ZXh0IGlzIHNlbGVjdGVkLlxuICAgKi9cbiAgcHVibGljIG9wZW5Gcm9tQ29tbWFuZChwYXJhbXM6IENvbW1hbmRFZGl0b3JTdWdnZXN0T3BlbkZyb21Db21tYW5kUGFyYW1zKTogYm9vbGVhbiB7XG4gICAgY29uc3QgeyBlZGl0b3IsIGZpbGUgfSA9IHBhcmFtcztcbiAgICB0aGlzLmNvbW1hbmRTdGFydCA9IGVkaXRvci5nZXRDdXJzb3IoKTtcbiAgICBpZiAoIXRoaXMudHJpZ2dlcihlZGl0b3IsIGZpbGUsIHRydWUpKSB7XG4gICAgICB0aGlzLmNvbW1hbmRTdGFydCA9IG51bGw7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHRoaXMuYXBwLndvcmtzcGFjZS5lZGl0b3JTdWdnZXN0LnNldEN1cnJlbnRTdWdnZXN0KHRoaXMpO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIERlY2lkZXMgd2hldGhlciB0aGUgc3VnZ2VzdCBvcGVucyBvbiB0eXBlZCB0ZXh0LCBvdXRzaWRlIGEgY29tbWFuZC1vcGVuZWQgc2Vzc2lvbi4gTmV2ZXIsIGJ5IGRlZmF1bHQuXG4gICAqXG4gICAqIEBwYXJhbSBfY3Vyc29yIC0gVGhlIGN1cnNvci5cbiAgICogQHBhcmFtIF9lZGl0b3IgLSBUaGUgZWRpdG9yLlxuICAgKiBAcGFyYW0gX2ZpbGUgLSBUaGUgZmlsZSBvcGVuIGluIHRoZSBlZGl0b3IuXG4gICAqIEByZXR1cm5zIFRoZSB0cmlnZ2VyIGluZm8sIG9yIGBudWxsYCB0byBzdGF5IGNsb3NlZC5cbiAgICovXG4gIHByb3RlY3RlZCBvblRleHRUcmlnZ2VyKF9jdXJzb3I6IEVkaXRvclBvc2l0aW9uLCBfZWRpdG9yOiBFZGl0b3IsIF9maWxlOiBudWxsIHwgVEZpbGUpOiBFZGl0b3JTdWdnZXN0VHJpZ2dlckluZm8gfCBudWxsIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuXG4vKipcbiAqIE1vdmVzIGEgcmVnaXN0ZXJlZCBlZGl0b3Igc3VnZ2VzdCB0byB0aGUgZnJvbnQgb2YgdGhlIGxpc3QgdGhlIGVkaXRvciBhc2tzLCBzbyBpdCBvcGVucyBhaGVhZCBvZiBldmVyeSBvdGhlciBzdWdnZXN0XG4gKiB3aG9zZSB0cmlnZ2VyIGFjY2VwdHMgdGhlIHNhbWUgdGV4dCwgT2JzaWRpYW4ncyBvd24gYFtbYCBhbmQgYCNgIHN1Z2dlc3RzIGluY2x1ZGVkLiBBIHN1Z2dlc3QgcHJpb3JpdGl6ZWQgbGF0ZXIgZ29lc1xuICogYWhlYWQgb2YgaXQgaW4gdHVybi5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMuXG4gKiBAdGhyb3dzIElmIHRoZSBlZGl0b3Igc3VnZ2VzdCBpcyBub3QgcmVnaXN0ZXJlZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHByaW9yaXRpemVFZGl0b3JTdWdnZXN0KHBhcmFtczogUHJpb3JpdGl6ZUVkaXRvclN1Z2dlc3RQYXJhbXMpOiB2b2lkIHtcbiAgY29uc3QgeyBhcHAsIGVkaXRvclN1Z2dlc3QgfSA9IHBhcmFtcztcbiAgY29uc3Qgc3VnZ2VzdHMgPSBhcHAud29ya3NwYWNlLmVkaXRvclN1Z2dlc3Quc3VnZ2VzdHM7XG4gIGNvbnN0IGluZGV4ID0gc3VnZ2VzdHMuaW5kZXhPZihlZGl0b3JTdWdnZXN0KTtcbiAgaWYgKGluZGV4ID09PSAtMSkge1xuICAgIHRocm93IG5ldyBFcnJvcignVGhlIGVkaXRvciBzdWdnZXN0IGlzIG5vdCByZWdpc3RlcmVkLiBSZWdpc3RlciBpdCBiZWZvcmUgcHJpb3JpdGl6aW5nIGl0LicpO1xuICB9XG4gIHN1Z2dlc3RzLnNwbGljZShpbmRleCwgMSk7XG4gIHN1Z2dlc3RzLnVuc2hpZnQoZWRpdG9yU3VnZ2VzdCk7XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBa0JBLFNBQVMscUJBQXFCO0FBdUR2QixNQUFlLDZCQUFnQyxjQUFpQjtBQUFBLEVBQzdELGVBQXNDO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFLOUIsUUFBYztBQUM1QixTQUFLLGVBQWU7QUFDcEIsVUFBTSxNQUFNO0FBQUEsRUFDZDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBV2dCLFVBQVUsUUFBd0IsUUFBZ0IsTUFBcUQ7QUFDckgsVUFBTSxRQUFRLEtBQUs7QUFDbkIsUUFBSSxPQUFPO0FBQ1QsVUFBSSxPQUFPLFNBQVMsTUFBTSxRQUFRLE9BQU8sTUFBTSxNQUFNLElBQUk7QUFDdkQsZUFBTztBQUFBLFVBQ0wsS0FBSztBQUFBLFVBQ0wsT0FBTyxPQUFPLFFBQVEsT0FBTyxJQUFJLEVBQUUsTUFBTSxNQUFNLElBQUksT0FBTyxFQUFFO0FBQUEsVUFDNUQ7QUFBQSxRQUNGO0FBQUEsTUFDRjtBQUNBLFdBQUssZUFBZTtBQUFBLElBQ3RCO0FBQ0EsV0FBTyxLQUFLLGNBQWMsUUFBUSxRQUFRLElBQUk7QUFBQSxFQUNoRDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBUU8sZ0JBQWdCLFFBQTREO0FBQ2pGLFVBQU0sRUFBRSxRQUFRLEtBQUssSUFBSTtBQUN6QixTQUFLLGVBQWUsT0FBTyxVQUFVO0FBQ3JDLFFBQUksQ0FBQyxLQUFLLFFBQVEsUUFBUSxNQUFNLElBQUksR0FBRztBQUNyQyxXQUFLLGVBQWU7QUFDcEIsYUFBTztBQUFBLElBQ1Q7QUFDQSxTQUFLLElBQUksVUFBVSxjQUFjLGtCQUFrQixJQUFJO0FBQ3ZELFdBQU87QUFBQSxFQUNUO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBVVUsY0FBYyxTQUF5QixTQUFpQixPQUFzRDtBQUN0SCxXQUFPO0FBQUEsRUFDVDtBQUNGO0FBVU8sU0FBUyx3QkFBd0IsUUFBNkM7QUFDbkYsUUFBTSxFQUFFLEtBQUssY0FBYyxJQUFJO0FBQy9CLFFBQU0sV0FBVyxJQUFJLFVBQVUsY0FBYztBQUM3QyxRQUFNLFFBQVEsU0FBUyxRQUFRLGFBQWE7QUFDNUMsTUFBSSxVQUFVLElBQUk7QUFDaEIsVUFBTSxJQUFJLE1BQU0sMkVBQTJFO0FBQUEsRUFDN0Y7QUFDQSxXQUFTLE9BQU8sT0FBTyxDQUFDO0FBQ3hCLFdBQVMsUUFBUSxhQUFhO0FBQ2hDOyIsIm5hbWVzIjpbXX0=
@@ -0,0 +1,54 @@
1
+ /// <reference path="./library-references.d.mts" />
2
+ /**
3
+ * @file
4
+ *
5
+ * Links to a plugin's feature-request issue form without collecting a bug-report environment.
6
+ */
7
+ import type { App } from 'obsidian';
8
+ /**
9
+ * The feature-request form's file name under `.github/ISSUE_TEMPLATE`.
10
+ */
11
+ export declare const FEATURE_REQUEST_ISSUE_FORM_TEMPLATE = "feature_request.yml";
12
+ /**
13
+ * Field ids the feature-request form must use for prefilling.
14
+ */
15
+ export declare enum FeatureRequestIssueFormFieldId {
16
+ /**
17
+ * The requesting plugin's installed version.
18
+ */
19
+ PluginVersion = "plugin-version"
20
+ }
21
+ /**
22
+ * Parameters for {@link getFeatureRequestIssueFormUrl}.
23
+ */
24
+ export interface GetFeatureRequestIssueFormUrlParams {
25
+ /**
26
+ * The Obsidian app instance.
27
+ */
28
+ readonly app: App;
29
+ /**
30
+ * The repository, as `owner/name`.
31
+ */
32
+ readonly gitHubRepo: string;
33
+ /**
34
+ * The requesting plugin's id.
35
+ */
36
+ readonly pluginId: string;
37
+ /**
38
+ * The form's file name under `.github/ISSUE_TEMPLATE`.
39
+ *
40
+ * @default {@link FEATURE_REQUEST_ISSUE_FORM_TEMPLATE}
41
+ */
42
+ readonly template?: string;
43
+ /**
44
+ * The issue's title. Omit to keep the form's default title.
45
+ */
46
+ readonly title?: string;
47
+ }
48
+ /**
49
+ * Gets the feature-request form URL, prefilling only {@link FeatureRequestIssueFormFieldId.PluginVersion}.
50
+ *
51
+ * @param params - The parameters.
52
+ * @returns The link.
53
+ */
54
+ export declare function getFeatureRequestIssueFormUrl(params: GetFeatureRequestIssueFormUrlParams): string;
@@ -0,0 +1,25 @@
1
+ /*
2
+ THIS IS A GENERATED/BUNDLED FILE BY ESBUILD
3
+ if you want to view the source, please visit the github repository of this plugin
4
+ */
5
+
6
+ import { getGitHubIssueFormUrl } from "./bug-report.mjs";
7
+ const FEATURE_REQUEST_ISSUE_FORM_TEMPLATE = "feature_request.yml";
8
+ var FeatureRequestIssueFormFieldId = /* @__PURE__ */ ((FeatureRequestIssueFormFieldId2) => {
9
+ FeatureRequestIssueFormFieldId2["PluginVersion"] = "plugin-version";
10
+ return FeatureRequestIssueFormFieldId2;
11
+ })(FeatureRequestIssueFormFieldId || {});
12
+ function getFeatureRequestIssueFormUrl(params) {
13
+ return getGitHubIssueFormUrl({
14
+ fields: { ["plugin-version" /* PluginVersion */]: params.app.plugins.manifests[params.pluginId]?.version ?? "unknown" },
15
+ gitHubRepo: params.gitHubRepo,
16
+ template: params.template ?? FEATURE_REQUEST_ISSUE_FORM_TEMPLATE,
17
+ ...params.title !== void 0 && { title: params.title }
18
+ });
19
+ }
20
+ export {
21
+ FEATURE_REQUEST_ISSUE_FORM_TEMPLATE,
22
+ FeatureRequestIssueFormFieldId,
23
+ getFeatureRequestIssueFormUrl
24
+ };
25
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2ZlYXR1cmUtcmVxdWVzdC50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIExpbmtzIHRvIGEgcGx1Z2luJ3MgZmVhdHVyZS1yZXF1ZXN0IGlzc3VlIGZvcm0gd2l0aG91dCBjb2xsZWN0aW5nIGEgYnVnLXJlcG9ydCBlbnZpcm9ubWVudC5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IEFwcCB9IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHsgZ2V0R2l0SHViSXNzdWVGb3JtVXJsIH0gZnJvbSAnLi9idWctcmVwb3J0LnRzJztcblxuLyoqXG4gKiBUaGUgZmVhdHVyZS1yZXF1ZXN0IGZvcm0ncyBmaWxlIG5hbWUgdW5kZXIgYC5naXRodWIvSVNTVUVfVEVNUExBVEVgLlxuICovXG5leHBvcnQgY29uc3QgRkVBVFVSRV9SRVFVRVNUX0lTU1VFX0ZPUk1fVEVNUExBVEUgPSAnZmVhdHVyZV9yZXF1ZXN0LnltbCc7XG5cbi8qKlxuICogRmllbGQgaWRzIHRoZSBmZWF0dXJlLXJlcXVlc3QgZm9ybSBtdXN0IHVzZSBmb3IgcHJlZmlsbGluZy5cbiAqL1xuZXhwb3J0IGVudW0gRmVhdHVyZVJlcXVlc3RJc3N1ZUZvcm1GaWVsZElkIHtcbiAgLyoqXG4gICAqIFRoZSByZXF1ZXN0aW5nIHBsdWdpbidzIGluc3RhbGxlZCB2ZXJzaW9uLlxuICAgKi9cbiAgUGx1Z2luVmVyc2lvbiA9ICdwbHVnaW4tdmVyc2lvbidcbn1cblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgZ2V0RmVhdHVyZVJlcXVlc3RJc3N1ZUZvcm1Vcmx9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdldEZlYXR1cmVSZXF1ZXN0SXNzdWVGb3JtVXJsUGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBPYnNpZGlhbiBhcHAgaW5zdGFuY2UuXG4gICAqL1xuICByZWFkb25seSBhcHA6IEFwcDtcbiAgLyoqXG4gICAqIFRoZSByZXBvc2l0b3J5LCBhcyBgb3duZXIvbmFtZWAuXG4gICAqL1xuICByZWFkb25seSBnaXRIdWJSZXBvOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgcmVxdWVzdGluZyBwbHVnaW4ncyBpZC5cbiAgICovXG4gIHJlYWRvbmx5IHBsdWdpbklkOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgZm9ybSdzIGZpbGUgbmFtZSB1bmRlciBgLmdpdGh1Yi9JU1NVRV9URU1QTEFURWAuXG4gICAqXG4gICAqIEBkZWZhdWx0IHtAbGluayBGRUFUVVJFX1JFUVVFU1RfSVNTVUVfRk9STV9URU1QTEFURX1cbiAgICovXG4gIHJlYWRvbmx5IHRlbXBsYXRlPzogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIGlzc3VlJ3MgdGl0bGUuIE9taXQgdG8ga2VlcCB0aGUgZm9ybSdzIGRlZmF1bHQgdGl0bGUuXG4gICAqL1xuICByZWFkb25seSB0aXRsZT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBHZXRzIHRoZSBmZWF0dXJlLXJlcXVlc3QgZm9ybSBVUkwsIHByZWZpbGxpbmcgb25seSB7QGxpbmsgRmVhdHVyZVJlcXVlc3RJc3N1ZUZvcm1GaWVsZElkLlBsdWdpblZlcnNpb259LlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcGFyYW1ldGVycy5cbiAqIEByZXR1cm5zIFRoZSBsaW5rLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RmVhdHVyZVJlcXVlc3RJc3N1ZUZvcm1VcmwocGFyYW1zOiBHZXRGZWF0dXJlUmVxdWVzdElzc3VlRm9ybVVybFBhcmFtcyk6IHN0cmluZyB7XG4gIHJldHVybiBnZXRHaXRIdWJJc3N1ZUZvcm1Vcmwoe1xuICAgIGZpZWxkczogeyBbRmVhdHVyZVJlcXVlc3RJc3N1ZUZvcm1GaWVsZElkLlBsdWdpblZlcnNpb25dOiBwYXJhbXMuYXBwLnBsdWdpbnMubWFuaWZlc3RzW3BhcmFtcy5wbHVnaW5JZF0/LnZlcnNpb24gPz8gJ3Vua25vd24nIH0sXG4gICAgZ2l0SHViUmVwbzogcGFyYW1zLmdpdEh1YlJlcG8sXG4gICAgdGVtcGxhdGU6IHBhcmFtcy50ZW1wbGF0ZSA/PyBGRUFUVVJFX1JFUVVFU1RfSVNTVUVfRk9STV9URU1QTEFURSxcbiAgICAuLi5wYXJhbXMudGl0bGUgIT09IHVuZGVmaW5lZCAmJiB7IHRpdGxlOiBwYXJhbXMudGl0bGUgfVxuICB9KTtcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7O0FBUUEsU0FBUyw2QkFBNkI7QUFLL0IsTUFBTSxzQ0FBc0M7QUFLNUMsSUFBSyxpQ0FBTCxrQkFBS0Esb0NBQUw7QUFJTCxFQUFBQSxnQ0FBQSxtQkFBZ0I7QUFKTixTQUFBQTtBQUFBLEdBQUE7QUF5Q0wsU0FBUyw4QkFBOEIsUUFBcUQ7QUFDakcsU0FBTyxzQkFBc0I7QUFBQSxJQUMzQixRQUFRLEVBQUUsQ0FBQyxvQ0FBNEMsR0FBRyxPQUFPLElBQUksUUFBUSxVQUFVLE9BQU8sUUFBUSxHQUFHLFdBQVcsVUFBVTtBQUFBLElBQzlILFlBQVksT0FBTztBQUFBLElBQ25CLFVBQVUsT0FBTyxZQUFZO0FBQUEsSUFDN0IsR0FBRyxPQUFPLFVBQVUsVUFBYSxFQUFFLE9BQU8sT0FBTyxNQUFNO0FBQUEsRUFDekQsQ0FBQztBQUNIOyIsCiAgIm5hbWVzIjogWyJGZWF0dXJlUmVxdWVzdElzc3VlRm9ybUZpZWxkSWQiXQp9Cg==
@@ -3,7 +3,7 @@ THIS IS A GENERATED/BUNDLED FILE BY ESBUILD
3
3
  if you want to view the source, please visit the github repository of this plugin
4
4
  */
5
5
 
6
- const LIBRARY_VERSION = "10.6.0";
6
+ const LIBRARY_VERSION = "10.7.0";
7
7
  const LIBRARY_STYLES = ".obsidian-lib.code-highlighter-component textarea, .obsidian-lib.code-highlighter-component pre, .obsidian-lib.code-highlighter-component code {\n font-family: var(--font-monospace);\n line-height: var(--line-height-normal);\n margin: 0;\n}\n.obsidian-lib.code-highlighter-component textarea, .obsidian-lib.code-highlighter-component code {\n font-size: var(--code-size);\n}\n.obsidian-lib.code-highlighter-component textarea {\n background: transparent;\n color: transparent;\n z-index: 2;\n width: 20em;\n height: 10em;\n}\n.obsidian-lib.code-highlighter-component pre {\n position: absolute;\n pointer-events: none;\n border: var(--input-border-width) solid transparent;\n overflow: auto;\n inset: 0;\n padding: var(--size-4-1) var(--size-4-2);\n z-index: 1;\n}\n.obsidian-lib.code-highlighter-component pre::after {\n content: \"\";\n display: block;\n height: var(--bottom-gap, 0);\n}\n.obsidian-lib.code-highlighter-component pre.is-placeholder {\n opacity: 0.6;\n}\n.obsidian-lib.code-highlighter-component code {\n display: block;\n padding: 0;\n}\n\n.obsidian-lib-lock-indicator {\n display: inline-flex;\n align-items: center;\n color: var(--text-muted);\n}\n.obsidian-lib-lock-indicator .svg-icon {\n width: var(--icon-s);\n height: var(--icon-s);\n}\n\n@keyframes obsidian-lib-lock-indicator-flash {\n 40% {\n color: var(--text-error);\n transform: scale(1.4);\n }\n}\n.obsidian-lib-lock-indicator-flash {\n animation: obsidian-lib-lock-indicator-flash 0.35s ease-in-out;\n}\n\n.obsidian-lib.foldable-markdown .collapse-indicator {\n cursor: var(--cursor);\n display: inline-flex;\n position: absolute;\n user-select: none;\n}\n.obsidian-lib.foldable-markdown .collapse-indicator .svg-icon {\n vertical-align: middle;\n}\n.obsidian-lib.foldable-markdown .heading-collapse-indicator {\n margin-inline-start: -22px;\n padding: 0 6px;\n}\n.obsidian-lib.foldable-markdown .list-collapse-indicator {\n margin-inline-start: -2.65em;\n padding-inline-end: 2em;\n}\n.obsidian-lib.foldable-markdown li.is-collapsed > ul,\n.obsidian-lib.foldable-markdown li.is-collapsed > ol {\n display: none;\n}\n\n.obsidian-lib.hotkey-component button.is-placeholder {\n color: var(--text-faint);\n}\n.obsidian-lib.hotkey-component button.is-active {\n color: var(--text-accent);\n}\n\n.obsidian-lib input[type=url] {\n height: var(--input-height);\n}\n.obsidian-lib input[type=month],\n.obsidian-lib input[type=tel],\n.obsidian-lib input[type=time],\n.obsidian-lib input[type=url],\n.obsidian-lib input[type=week] {\n -webkit-app-region: no-drag;\n background: var(--background-modifier-form-field);\n border: var(--input-border-width) solid var(--background-modifier-border);\n color: var(--text-normal);\n font-family: inherit;\n padding: var(--size-4-1) var(--size-4-2);\n font-size: var(--font-ui-small);\n border-radius: var(--input-radius);\n outline: none;\n}\n@media (hover: hover) {\n .obsidian-lib input[type=month]:hover,\n .obsidian-lib input[type=tel]:hover,\n .obsidian-lib input[type=time]:hover,\n .obsidian-lib input[type=url]:hover,\n .obsidian-lib input[type=week]:hover {\n border-color: var(--background-modifier-border-hover);\n transition: box-shadow 0.15s ease-in-out, border 0.15s ease-in-out;\n }\n}\n.obsidian-lib input[type=month]:active, .obsidian-lib input[type=month]:focus,\n.obsidian-lib input[type=tel]:active,\n.obsidian-lib input[type=tel]:focus,\n.obsidian-lib input[type=time]:active,\n.obsidian-lib input[type=time]:focus,\n.obsidian-lib input[type=url]:active,\n.obsidian-lib input[type=url]:focus,\n.obsidian-lib input[type=week]:active,\n.obsidian-lib input[type=week]:focus {\n border-color: var(--background-modifier-border-focus);\n transition: box-shadow 0.15s ease-in-out, border 0.15s ease-in-out;\n}\n.obsidian-lib input[type=month]:active, .obsidian-lib input[type=month]:focus, .obsidian-lib input[type=month]:focus-visible,\n.obsidian-lib input[type=tel]:active,\n.obsidian-lib input[type=tel]:focus,\n.obsidian-lib input[type=tel]:focus-visible,\n.obsidian-lib input[type=time]:active,\n.obsidian-lib input[type=time]:focus,\n.obsidian-lib input[type=time]:focus-visible,\n.obsidian-lib input[type=url]:active,\n.obsidian-lib input[type=url]:focus,\n.obsidian-lib input[type=url]:focus-visible,\n.obsidian-lib input[type=week]:active,\n.obsidian-lib input[type=week]:focus,\n.obsidian-lib input[type=week]:focus-visible {\n box-shadow: 0 0 0 2px var(--background-modifier-border-focus);\n}\n.obsidian-lib input[type=month]::placeholder,\n.obsidian-lib input[type=tel]::placeholder,\n.obsidian-lib input[type=time]::placeholder,\n.obsidian-lib input[type=url]::placeholder,\n.obsidian-lib input[type=week]::placeholder {\n color: var(--text-faint);\n}\n.mod-rtl input[type=month],\n.mod-rtl input[type=time],\n.mod-rtl input[type=week],\n.is-rtl input[type=month],\n.is-rtl input[type=time],\n.is-rtl input[type=week],\n.rtl input[type=month],\n.rtl input[type=time],\n.rtl input[type=week] {\n direction: rtl;\n}\n.mod-rtl input[type=month]::-webkit-calendar-picker-indicator,\n.mod-rtl input[type=time]::-webkit-calendar-picker-indicator,\n.mod-rtl input[type=week]::-webkit-calendar-picker-indicator,\n.is-rtl input[type=month]::-webkit-calendar-picker-indicator,\n.is-rtl input[type=time]::-webkit-calendar-picker-indicator,\n.is-rtl input[type=week]::-webkit-calendar-picker-indicator,\n.rtl input[type=month]::-webkit-calendar-picker-indicator,\n.rtl input[type=time]::-webkit-calendar-picker-indicator,\n.rtl input[type=week]::-webkit-calendar-picker-indicator {\n right: var(--size-4-1);\n left: auto;\n}\n\n.obsidian-lib input[type=month],\n.obsidian-lib input[type=time],\n.obsidian-lib input[type=week] {\n font-variant-numeric: tabular-nums;\n position: relative;\n}\n.obsidian-lib input[type=month]::-webkit-datetime-edit-text,\n.obsidian-lib input[type=time]::-webkit-datetime-edit-text,\n.obsidian-lib input[type=week]::-webkit-datetime-edit-text {\n color: var(--text-faint);\n padding-inline-end: 0;\n}\n.obsidian-lib input[type=month]::-webkit-calendar-picker-indicator,\n.obsidian-lib input[type=time]::-webkit-calendar-picker-indicator,\n.obsidian-lib input[type=week]::-webkit-calendar-picker-indicator {\n position: absolute;\n left: var(--size-4-1);\n right: auto;\n opacity: 0.5;\n}\n.obsidian-lib input[type=month]::-webkit-datetime-edit-month-field:active, .obsidian-lib input[type=month]::-webkit-datetime-edit-month-field:focus, .obsidian-lib input[type=month]::-webkit-datetime-edit-day-field:active, .obsidian-lib input[type=month]::-webkit-datetime-edit-day-field:focus, .obsidian-lib input[type=month]::-webkit-datetime-edit-year-field:active, .obsidian-lib input[type=month]::-webkit-datetime-edit-year-field:focus,\n.obsidian-lib input[type=time]::-webkit-datetime-edit-month-field:active,\n.obsidian-lib input[type=time]::-webkit-datetime-edit-month-field:focus,\n.obsidian-lib input[type=time]::-webkit-datetime-edit-day-field:active,\n.obsidian-lib input[type=time]::-webkit-datetime-edit-day-field:focus,\n.obsidian-lib input[type=time]::-webkit-datetime-edit-year-field:active,\n.obsidian-lib input[type=time]::-webkit-datetime-edit-year-field:focus,\n.obsidian-lib input[type=week]::-webkit-datetime-edit-month-field:active,\n.obsidian-lib input[type=week]::-webkit-datetime-edit-month-field:focus,\n.obsidian-lib input[type=week]::-webkit-datetime-edit-day-field:active,\n.obsidian-lib input[type=week]::-webkit-datetime-edit-day-field:focus,\n.obsidian-lib input[type=week]::-webkit-datetime-edit-year-field:active,\n.obsidian-lib input[type=week]::-webkit-datetime-edit-year-field:focus {\n background-color: var(--text-selection);\n color: var(--text-normal);\n cursor: text;\n}\n.mod-rtl .obsidian-lib input[type=month], .is-rtl .obsidian-lib input[type=month], .rtl .obsidian-lib input[type=month],\n.mod-rtl .obsidian-lib input[type=time],\n.is-rtl .obsidian-lib input[type=time],\n.rtl .obsidian-lib input[type=time],\n.mod-rtl .obsidian-lib input[type=week],\n.is-rtl .obsidian-lib input[type=week],\n.rtl .obsidian-lib input[type=week] {\n direction: rtl;\n}\n.mod-rtl .obsidian-lib input[type=month]::-webkit-calendar-picker-indicator, .is-rtl .obsidian-lib input[type=month]::-webkit-calendar-picker-indicator, .rtl .obsidian-lib input[type=month]::-webkit-calendar-picker-indicator,\n.mod-rtl .obsidian-lib input[type=time]::-webkit-calendar-picker-indicator,\n.is-rtl .obsidian-lib input[type=time]::-webkit-calendar-picker-indicator,\n.rtl .obsidian-lib input[type=time]::-webkit-calendar-picker-indicator,\n.mod-rtl .obsidian-lib input[type=week]::-webkit-calendar-picker-indicator,\n.is-rtl .obsidian-lib input[type=week]::-webkit-calendar-picker-indicator,\n.rtl .obsidian-lib input[type=week]::-webkit-calendar-picker-indicator {\n left: auto;\n right: var(--size-4-1);\n}\n\nbody:not(.is-ios):not(.is-android) .obsidian-lib input[type=month],\nbody:not(.is-ios):not(.is-android) .obsidian-lib input[type=time],\nbody:not(.is-ios):not(.is-android) .obsidian-lib input[type=week] {\n padding-inline-start: var(--size-4-6);\n}\n\n.obsidian-lib input[type=time]::-webkit-calendar-picker-indicator {\n margin-inline-start: 0;\n}\n\n.obsidian-lib.list-component {\n display: flex;\n flex-direction: column;\n gap: var(--size-4-1);\n min-width: 12em;\n}\n.obsidian-lib.list-component .list-component-items {\n display: flex;\n flex-direction: column;\n gap: var(--size-2-1);\n}\n.obsidian-lib.list-component .list-component-item,\n.obsidian-lib.list-component .list-component-new-item {\n align-items: center;\n display: flex;\n gap: var(--size-2-1);\n}\n.obsidian-lib.list-component .list-component-item-text {\n flex-grow: 1;\n overflow-wrap: anywhere;\n}\n.obsidian-lib.list-component .list-component-new-item input {\n flex-grow: 1;\n}\n.obsidian-lib.list-component .list-component-empty {\n color: var(--text-faint);\n}\n\nprogress.obsidian-lib.loop {\n min-width: 200px;\n}\n\n@keyframes obsidian-lib-minimized-modal-bar-pulse {\n 0%, 100% {\n box-shadow: var(--shadow-s);\n }\n 50% {\n box-shadow: 0 0 0 2px var(--interactive-accent);\n }\n}\n@keyframes obsidian-lib-minimized-modal-bar-attention {\n 0% {\n box-shadow: 0 0 0 0 var(--interactive-accent);\n }\n 40% {\n box-shadow: 0 0 0 4px var(--interactive-accent);\n }\n 100% {\n box-shadow: var(--shadow-s);\n }\n}\n.obsidian-lib.minimizable-modal .minimize-button {\n position: absolute;\n top: var(--size-4-2);\n right: calc(var(--size-4-2) + var(--size-4-9));\n display: flex;\n align-items: center;\n justify-content: center;\n padding: var(--size-2-2);\n border: none;\n border-radius: var(--radius-s);\n background: transparent;\n color: var(--icon-color);\n cursor: pointer;\n box-shadow: none;\n}\n.obsidian-lib.minimizable-modal .minimize-button:hover {\n background: var(--background-modifier-hover);\n color: var(--icon-color-hover);\n}\n.obsidian-lib.minimized-modal-bar {\n position: fixed;\n right: var(--size-4-4);\n bottom: calc(var(--size-4-4) + var(--size-4-8));\n z-index: var(--layer-modal);\n display: flex;\n align-items: center;\n gap: var(--size-4-2);\n padding: var(--size-4-2) var(--size-4-3);\n border: 1px solid var(--background-modifier-border);\n border-radius: var(--radius-m);\n background: var(--background-secondary);\n box-shadow: var(--shadow-s);\n cursor: pointer;\n animation: obsidian-lib-minimized-modal-bar-pulse 2s ease-in-out infinite;\n}\n.obsidian-lib.minimized-modal-bar:hover {\n background-image: linear-gradient(var(--background-modifier-hover), var(--background-modifier-hover));\n}\n.obsidian-lib.minimized-modal-bar.minimized-modal-bar-attention {\n animation: obsidian-lib-minimized-modal-bar-attention 0.35s ease-out;\n}\n.obsidian-lib.minimized-modal-bar .minimized-modal-bar-title {\n font-weight: var(--font-medium);\n}\n.obsidian-lib.minimized-modal-bar .restore-button,\n.obsidian-lib.minimized-modal-bar .cancel-button {\n display: flex;\n align-items: center;\n justify-content: center;\n padding: var(--size-2-2);\n border: none;\n border-radius: var(--radius-s);\n background: transparent;\n color: var(--icon-color);\n cursor: pointer;\n box-shadow: none;\n}\n.obsidian-lib.minimized-modal-bar .restore-button:hover,\n.obsidian-lib.minimized-modal-bar .cancel-button:hover {\n background: var(--background-modifier-hover);\n color: var(--icon-color-hover);\n}\n\n.obsidian-lib.modal-commands {\n display: flex;\n flex-wrap: wrap;\n gap: var(--size-2-2);\n padding: var(--size-4-2) var(--size-4-3);\n border-top: 1px solid var(--background-modifier-border);\n}\n.obsidian-lib.modal-command-control {\n margin-inline-start: var(--size-2-2);\n vertical-align: middle;\n}\n.obsidian-lib.modal-command {\n display: inline-flex;\n align-items: baseline;\n gap: var(--size-2-2);\n min-height: var(--size-4-8);\n padding: var(--size-2-1) var(--size-4-2);\n border: 1px solid var(--background-modifier-border);\n border-radius: var(--radius-s);\n background-color: var(--background-secondary);\n color: var(--text-muted);\n font-size: var(--font-ui-smaller);\n white-space: nowrap;\n cursor: pointer;\n}\n.obsidian-lib.modal-command:hover:not(:disabled):not(.is-active) {\n background-color: var(--background-modifier-hover);\n color: var(--text-normal);\n}\n.obsidian-lib.modal-command.is-active {\n border-color: var(--interactive-accent);\n background-color: var(--interactive-accent);\n color: var(--text-on-accent);\n}\n.obsidian-lib.modal-command:disabled {\n opacity: 0.5;\n cursor: default;\n}\n.obsidian-lib.modal-command-hotkey {\n color: var(--text-faint);\n font-size: var(--font-smallest);\n}\n.modal-command.is-active .obsidian-lib.modal-command-hotkey {\n opacity: 0.7;\n color: var(--text-on-accent);\n}\n\n.obsidian-lib.modal-container .ok-button {\n margin-right: 10px;\n margin-top: 20px;\n}\n\n.obsidian-lib.multiple-dropdown-component select,\n.obsidian-lib.multiple-dropdown-component select:focus,\n.obsidian-lib.multiple-dropdown-component .dropdown {\n height: auto;\n padding-top: 3px;\n}\n.obsidian-lib.multiple-dropdown-component select option:checked,\n.obsidian-lib.multiple-dropdown-component select:focus option:checked,\n.obsidian-lib.multiple-dropdown-component .dropdown option:checked {\n background-color: var(--interactive-accent);\n color: var(--text-on-accent);\n}\n\n.obsidian-lib.plugin-notice-name {\n color: var(--text-accent);\n display: inline-block;\n font-weight: var(--font-bold);\n margin-bottom: var(--size-4-2);\n}\n.obsidian-lib.plugin-notice-name code {\n color: inherit;\n}\n.obsidian-lib.plugin-notice-content {\n padding-right: var(--size-4-5);\n position: relative;\n}\n.obsidian-lib.plugin-notice-content .obsidian-lib.cancel-button {\n display: block;\n margin-top: var(--size-4-2);\n width: fit-content;\n}\n.obsidian-lib.plugin-notice-content .obsidian-lib.plugin-notice-close-button {\n position: absolute;\n right: var(--size-4-3);\n top: var(--size-4-3);\n}\n.obsidian-lib.plugin-notice-requires-explicit-close.notice {\n padding: 0;\n}\n.obsidian-lib.plugin-notice-requires-explicit-close.notice .obsidian-lib.plugin-notice-content {\n padding: var(--size-4-3) var(--size-4-4);\n}\n\n.obsidian-lib.plugin-settings-tab a:focus {\n outline: 2px solid var(--link-color);\n}\n\n.obsidian-lib.plugin-suggestion-banner {\n background-color: var(--background-secondary);\n border-left: var(--size-2-1) solid var(--text-accent);\n border-radius: var(--radius-s);\n display: flex;\n flex-direction: column;\n gap: var(--size-4-2);\n margin-bottom: var(--size-4-4);\n padding: var(--size-4-3) var(--size-4-4);\n}\n.obsidian-lib.plugin-suggestion-banner button {\n width: fit-content;\n}\n.obsidian-lib.plugin-suggestion-notice-buttons {\n display: flex;\n flex-wrap: wrap;\n gap: var(--size-4-2);\n margin-top: var(--size-4-2);\n}\n\n.obsidian-lib.popover {\n max-width: min(420px, 90vw);\n min-width: 320px;\n padding: var(--size-4-2) var(--size-4-3);\n position: absolute;\n z-index: var(--layer-menu);\n}\n.obsidian-lib.popover .setting-item {\n align-items: center;\n border-top: none;\n gap: var(--size-4-2);\n padding: var(--size-2-1) 0;\n}\n.obsidian-lib.popover .setting-item-info {\n margin-right: 0;\n}\n.obsidian-lib.popover .setting-item-control {\n flex-grow: 1;\n justify-content: flex-end;\n}\n.obsidian-lib.popover input[type=text] {\n width: 100%;\n}\n\n.obsidian-lib.prompt-modal .text-box {\n width: 100%;\n}\n\n.obsidian-lib.settings-tabs .settings-tabs-bar {\n border-bottom: var(--border-width) solid var(--background-modifier-border);\n display: flex;\n flex-wrap: wrap;\n gap: var(--size-2-1);\n margin-bottom: var(--size-4-3);\n}\n.obsidian-lib.settings-tabs .settings-tabs-button {\n align-items: center;\n background: none;\n border-bottom: 2px solid transparent;\n border-radius: 0;\n box-shadow: none;\n color: var(--text-muted);\n display: flex;\n gap: var(--size-2-2);\n}\n.obsidian-lib.settings-tabs .settings-tabs-button.is-active {\n border-bottom-color: var(--interactive-accent);\n color: var(--text-normal);\n}\n.obsidian-lib.settings-tabs .settings-tabs-icon {\n display: flex;\n}\n\n.obsidian-lib button:not(.clickable-icon) {\n color: var(--text-color);\n}\n\n.obsidian-lib.tri-state-checkbox-component input[type=checkbox]:indeterminate {\n appearance: checkbox;\n}\n\n.obsidian-lib :invalid:not(.untouched) {\n box-shadow: 0 0 0 2px var(--text-error);\n}\n.obsidian-lib input.metadata-input-text:active:invalid:not(.untouched), .obsidian-lib input.metadata-input-text:focus-visible:invalid:not(.untouched), .obsidian-lib input.metadata-input-text:focus:invalid:not(.untouched),\n.obsidian-lib input[type=date]:active:invalid:not(.untouched),\n.obsidian-lib input[type=date]:focus-visible:invalid:not(.untouched),\n.obsidian-lib input[type=date]:focus:invalid:not(.untouched),\n.obsidian-lib input[type=datetime-local]:active:invalid:not(.untouched),\n.obsidian-lib input[type=datetime-local]:focus-visible:invalid:not(.untouched),\n.obsidian-lib input[type=datetime-local]:focus:invalid:not(.untouched),\n.obsidian-lib input[type=email]:active:invalid:not(.untouched),\n.obsidian-lib input[type=email]:focus-visible:invalid:not(.untouched),\n.obsidian-lib input[type=email]:focus:invalid:not(.untouched),\n.obsidian-lib input[type=number]:active:invalid:not(.untouched),\n.obsidian-lib input[type=number]:focus-visible:invalid:not(.untouched),\n.obsidian-lib input[type=number]:focus:invalid:not(.untouched),\n.obsidian-lib input[type=password]:active:invalid:not(.untouched),\n.obsidian-lib input[type=password]:focus-visible:invalid:not(.untouched),\n.obsidian-lib input[type=password]:focus:invalid:not(.untouched),\n.obsidian-lib input[type=search]:active:invalid:not(.untouched),\n.obsidian-lib input[type=search]:focus-visible:invalid:not(.untouched),\n.obsidian-lib input[type=search]:focus:invalid:not(.untouched),\n.obsidian-lib input[type=text]:active:invalid:not(.untouched),\n.obsidian-lib input[type=text]:focus-visible:invalid:not(.untouched),\n.obsidian-lib input[type=text]:focus:invalid:not(.untouched),\n.obsidian-lib textarea:active:invalid:not(.untouched),\n.obsidian-lib textarea:focus-visible:invalid:not(.untouched),\n.obsidian-lib textarea:focus:invalid:not(.untouched) {\n box-shadow: 0 0 0 2px var(--text-error);\n}\n.obsidian-lib.setting-component-wrapper {\n position: relative;\n display: inline-flex;\n}\n.obsidian-lib.overlay-validator {\n caret-color: transparent;\n cursor: default;\n position: absolute;\n background-color: transparent;\n border: none;\n outline: none;\n pointer-events: none;\n z-index: 9999;\n left: 0;\n top: 0;\n width: 100%;\n height: 100%;\n}\n.obsidian-lib.tooltip.tooltip-validator {\n position: absolute;\n top: calc(100% + 8px);\n width: max-content;\n}\n\n/*# sourceMappingURL=data:application/json;charset=utf-8,%7B%22version%22:3,%22sourceRoot%22:%22%22,%22sources%22:%5B%22../src/styles/code-highlighter-component.scss%22,%22../src/styles/editor-lock.scss%22,%22../src/styles/foldable-markdown.scss%22,%22../src/styles/hotkey-component.scss%22,%22../src/styles/input.scss%22,%22../src/styles/input-time.scss%22,%22../src/styles/list-component.scss%22,%22../src/styles/loop.scss%22,%22../src/styles/minimizable-modal.scss%22,%22../src/styles/modal-commands.scss%22,%22../src/styles/modal-container.scss%22,%22../src/styles/multiple-dropdown-component.scss%22,%22../src/styles/plugin-notice.scss%22,%22../src/styles/plugin-settings-tab.scss%22,%22../src/styles/plugin-suggestion.scss%22,%22../src/styles/popover.scss%22,%22../src/styles/prompt-modal.scss%22,%22../src/styles/settings-tabs.scss%22,%22../src/styles/tldraw-button-color-workaround.scss%22,%22../src/styles/tri-state-checkbox-component.scss%22,%22../src/styles/validation.scss%22%5D,%22names%22:%5B%5D,%22mappings%22:%22AAEI;EACE;EACA;EACA;;AAGF;EACE;;AAGF;EACE;EACA;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA;;AAGF;EACE;;AAGF;EACE;EACA;;;ACvCN;EACE;EACA;EACA;;AAEA;EACE;EACA;;;AAMJ;EACE;IACE;IACA;;;AAIJ;EACE;;;AClBE;EACE;EACA;EACA;EACA;;AAEA;EACE;;AAIJ;EACE;EACA;;AAGF;EACE;EACA;;AAGF;AAAA;EAEE;;;AC3BF;EACE;;AAGF;EACE;;;ACNJ;EACE;;AAGF;AAAA;AAAA;AAAA;AAAA;EAKE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGE;EACE;AAAA;AAAA;AAAA;AAAA;IACE;IACA,YACE;;;AAMR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAEE;EACA,YACE;;AAIJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAGE;;AAGF;AAAA;AAAA;AAAA;AAAA;EACE;;AASE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAGE;;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EACE;EACA;;;AC7DV;AAAA;AAAA;EAGE;EACA;;AAEA;AAAA;AAAA;EACE;EACA;;AAGF;AAAA;AAAA;EACE;EACA;EACA;EACA;;AAMA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAEE;EACA;EACA;;AAIK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAGP;;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EACE;EACA;;;AAKF;AAAA;AAAA;EACE;;;AAMJ;EACE;;;ACjDJ;EACE;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;;AAGF;AAAA;EAEE;EACA;EACA;;AAGF;EACE;EACA;;AAGF;EACE;;AAGF;EACE;;;AC3BK;EACP;;;ACJJ;EACE;IAEE;;EAGF;IACE;;;AAIJ;EACE;IACE;;EAGF;IACE;;EAGF;IACE;;;AAOA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;;AASN;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAOA;EACE;;AAOF;EACE;;AAGF;EACE;;AAGF;AAAA;EAEE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;AAAA;EACE;EACA;;;ACpGN;EACE;EACA;EACA;EACA;EACA;;AAOF;EACE;EACA;;AAMF;EACE;EACA;EACA;EAGA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGA;EACE;EACA;;AAKF;EACE;EACA;EACA;;AAKF;EACE;EACA;;AAIJ;EACE;EACA;;AAGA;EACE;EACA;;;ACrEF;EACE;EACA;;;ACCF;AAAA;AAAA;EAGE;EACA;;AAEA;AAAA;AAAA;EACE;EACA;;;ACZN;EACE;EACA;EACA;EACA;;AAGA;EACE;;AAIJ;EACE;EACA;;AAEA;EACE;EACA;EACA;;AAKF;EACE;EACA;EACA;;AAOJ;EACE;;AAEA;EACE;;;ACrCF;EACE;;;ACFJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;;AAKJ;EACE;EACA;EACA;EACA;;;ACjBF;EAIE;EACA;EACA;EACA;EACA;;AAGA;EACE;EACA;EACA;EACA;;AAGF;EACE;;AAGF;EACE;EACA;;AAGF;EACE;;;AC9BF;EACE;;;ACDF;EACE;EACA;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;;AAIJ;EACE;;;ACdN;EACE;;;ACZE;EACE;;;ACKJ;EAPA;;AAuBI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAvBJ;;AA6BA;EACE;EACA;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA%22,%22file%22:%22styles.css%22,%22sourcesContent%22:%5B%22.obsidian-lib%20%7B%5Cn%20%20&.code-highlighter-component%20%7B%5Cn%20%20%20%20textarea,%20pre,%20code%20%7B%5Cn%20%20%20%20%20%20font-family:%20var(--font-monospace);%5Cn%20%20%20%20%20%20line-height:%20var(--line-height-normal);%5Cn%20%20%20%20%20%20margin:%200;%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20textarea,%20code%20%7B%5Cn%20%20%20%20%20%20font-size:%20var(--code-size);%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20textarea%20%7B%5Cn%20%20%20%20%20%20background:%20transparent;%5Cn%20%20%20%20%20%20color:%20transparent;%5Cn%20%20%20%20%20%20z-index:%202;%5Cn%20%20%20%20%20%20width:%2020em;%5Cn%20%20%20%20%20%20height:%2010em;%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20pre%20%7B%5Cn%20%20%20%20%20%20position:%20absolute;%5Cn%20%20%20%20%20%20pointer-events:%20none;%5Cn%20%20%20%20%20%20border:%20var(--input-border-width)%20solid%20transparent;%5Cn%20%20%20%20%20%20overflow:%20auto;%5Cn%20%20%20%20%20%20inset:%200;%5Cn%20%20%20%20%20%20padding:%20var(--size-4-1)%20var(--size-4-2);%5Cn%20%20%20%20%20%20z-index:%201;%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20pre::after%20%7B%5Cn%20%20%20%20%20%20content:%20%5C%22%5C%22;%5Cn%20%20%20%20%20%20display:%20block;%5Cn%20%20%20%20%20%20height:%20var(--bottom-gap,%200);%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20pre.is-placeholder%20%7B%5Cn%20%20%20%20%20%20opacity:%200.6;%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20code%20%7B%5Cn%20%20%20%20%20%20display:%20block;%5Cn%20%20%20%20%20%20padding:%200;%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%7D%5Cn%22,%22//%20Lock%20indicators%20shown%20in%20the%20tab%20header%20and%20the%20status%20bar%20while%20a%20note%20is%20locked.%20These%20live%20in%5Cn//%20global%20Obsidian%20DOM%20(tab%20header%20/%20status%20bar),%20so%20they%20are%20styled%20with%20a%20global%20class%20rather%20than%5Cn//%20scoped%20under%20%60.obsidian-lib%60.%5Cn.obsidian-lib-lock-indicator%20%7B%5Cn%20%20display:%20inline-flex;%5Cn%20%20align-items:%20center;%5Cn%20%20color:%20var(--text-muted);%5Cn%5Cn%20%20.svg-icon%20%7B%5Cn%20%20%20%20width:%20var(--icon-s);%5Cn%20%20%20%20height:%20var(--icon-s);%5Cn%20%20%7D%5Cn%7D%5Cn%5Cn//%20Flashed%20on%20every%20lock%20indicator%20(tab%20header,%20view%20action,%20status%20bar)%20when%20the%20user%20attempts%20to%5Cn//%20type%20in%20a%20locked%20note,%20to%20make%20clear%20the%20note%20is%20read-only.%20Re-added%20per%20rejected%20keystroke.%5Cn@keyframes%20obsidian-lib-lock-indicator-flash%20%7B%5Cn%20%2040%25%20%7B%5Cn%20%20%20%20color:%20var(--text-error);%5Cn%20%20%20%20transform:%20scale(1.4);%5Cn%20%20%7D%5Cn%7D%5Cn%5Cn.obsidian-lib-lock-indicator-flash%20%7B%5Cn%20%20animation:%20obsidian-lib-lock-indicator-flash%200.35s%20ease-in-out;%5Cn%7D%5Cn%22,%22//%20Obsidian%20lays%20its%20collapse%20indicators%20out%20only%20inside%20%60.markdown-preview-view%60%20(and%20the%20list%20one%20inside%5Cn//%20%60.markdown-rendered%60),%20so%20markdown%20rendered%20anywhere%20else%20and%20made%20foldable%20by%20%60registerFoldHandlers%60%5Cn//%20would%20get%20them%20inline,%20pushing%20the%20text%20aside.%20These%20are%20the%20Reading%20view's%20own%20rules,%20read%20from%5Cn//%20Obsidian%201.15.0.%20The%20opacity%20and%20hover%20rules%20are%20global%20in%20Obsidian%20and%20need%20no%20copy.%5Cn.obsidian-lib%20%7B%5Cn%20%20&.foldable-markdown%20%7B%5Cn%20%20%20%20.collapse-indicator%20%7B%5Cn%20%20%20%20%20%20cursor:%20var(--cursor);%5Cn%20%20%20%20%20%20display:%20inline-flex;%5Cn%20%20%20%20%20%20position:%20absolute;%5Cn%20%20%20%20%20%20user-select:%20none;%5Cn%5Cn%20%20%20%20%20%20.svg-icon%20%7B%5Cn%20%20%20%20%20%20%20%20vertical-align:%20middle;%5Cn%20%20%20%20%20%20%7D%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20.heading-collapse-indicator%20%7B%5Cn%20%20%20%20%20%20margin-inline-start:%20-22px;%5Cn%20%20%20%20%20%20padding:%200%206px;%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20.list-collapse-indicator%20%7B%5Cn%20%20%20%20%20%20margin-inline-start:%20-2.65em;%5Cn%20%20%20%20%20%20padding-inline-end:%202em;%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20li.is-collapsed%20%3E%20ul,%5Cn%20%20%20%20li.is-collapsed%20%3E%20ol%20%7B%5Cn%20%20%20%20%20%20display:%20none;%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%7D%5Cn%22,%22.obsidian-lib%20%7B%5Cn%20%20&.hotkey-component%20%7B%5Cn%20%20%20%20button.is-placeholder%20%7B%5Cn%20%20%20%20%20%20color:%20var(--text-faint);%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20button.is-active%20%7B%5Cn%20%20%20%20%20%20color:%20var(--text-accent);%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%7D%5Cn%22,%22.obsidian-lib%20%7B%5Cn%20%20input%5Btype='url'%5D%20%7B%5Cn%20%20%20%20height:%20var(--input-height)%5Cn%20%20%7D%5Cn%5Cn%20%20input%5Btype='month'%5D,%5Cn%20%20input%5Btype='tel'%5D,%5Cn%20%20input%5Btype='time'%5D,%5Cn%20%20input%5Btype='url'%5D,%5Cn%20%20input%5Btype='week'%5D%20%7B%5Cn%20%20%20%20-webkit-app-region:%20no-drag;%5Cn%20%20%20%20background:%20var(--background-modifier-form-field);%5Cn%20%20%20%20border:%20var(--input-border-width)%20solid%20var(--background-modifier-border);%5Cn%20%20%20%20color:%20var(--text-normal);%5Cn%20%20%20%20font-family:%20inherit;%5Cn%20%20%20%20padding:%20var(--size-4-1)%20var(--size-4-2);%5Cn%20%20%20%20font-size:%20var(--font-ui-small);%5Cn%20%20%20%20border-radius:%20var(--input-radius);%5Cn%20%20%20%20outline:%20none;%5Cn%5Cn%20%20%20%20@at-root%20%7B%5Cn%20%20%20%20%20%20@media%20(hover:%20hover)%20%7B%5Cn%20%20%20%20%20%20%20%20&:hover%20%7B%5Cn%20%20%20%20%20%20%20%20%20%20border-color:%20var(--background-modifier-border-hover);%5Cn%20%20%20%20%20%20%20%20%20%20transition:%5Cn%20%20%20%20%20%20%20%20%20%20%20%20box-shadow%200.15s%20ease-in-out,%5Cn%20%20%20%20%20%20%20%20%20%20%20%20border%200.15s%20ease-in-out;%5Cn%20%20%20%20%20%20%20%20%7D%5Cn%20%20%20%20%20%20%7D%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20&:active,%5Cn%20%20%20%20&:focus%20%7B%5Cn%20%20%20%20%20%20border-color:%20var(--background-modifier-border-focus);%5Cn%20%20%20%20%20%20transition:%5Cn%20%20%20%20%20%20%20%20box-shadow%200.15s%20ease-in-out,%5Cn%20%20%20%20%20%20%20%20border%200.15s%20ease-in-out;%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20&:active,%5Cn%20%20%20%20&:focus,%5Cn%20%20%20%20&:focus-visible%20%7B%5Cn%20%20%20%20%20%20box-shadow:%200%200%200%202px%20var(--background-modifier-border-focus);%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20&::placeholder%20%7B%5Cn%20%20%20%20%20%20color:%20var(--text-faint);%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%5Cn%20%20@at-root%20%7B%5Cn%20%20%20%20.mod-rtl,%5Cn%20%20%20%20.is-rtl,%5Cn%20%20%20%20.rtl%20%7B%5Cn%20%20%20%20%20%20&%20%7B%5Cn%20%20%20%20%20%20%20%20input%5Btype='month'%5D,%5Cn%20%20%20%20%20%20%20%20input%5Btype='time'%5D,%5Cn%20%20%20%20%20%20%20%20input%5Btype='week'%5D%20%7B%5Cn%20%20%20%20%20%20%20%20%20%20direction:%20rtl;%5Cn%5Cn%20%20%20%20%20%20%20%20%20%20&::-webkit-calendar-picker-indicator%20%7B%5Cn%20%20%20%20%20%20%20%20%20%20%20%20right:%20var(--size-4-1);%5Cn%20%20%20%20%20%20%20%20%20%20%20%20left:%20auto;%5Cn%20%20%20%20%20%20%20%20%20%20%7D%5Cn%20%20%20%20%20%20%20%20%7D%5Cn%20%20%20%20%20%20%7D%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%7D%5Cn%22,%22.obsidian-lib%20%7B%5Cn%20%20input%5Btype='month'%5D,%5Cn%20%20input%5Btype='time'%5D,%5Cn%20%20input%5Btype='week'%5D%20%7B%5Cn%20%20%20%20font-variant-numeric:%20tabular-nums;%5Cn%20%20%20%20position:%20relative;%5Cn%5Cn%20%20%20%20&::-webkit-datetime-edit-text%20%7B%5Cn%20%20%20%20%20%20color:%20var(--text-faint);%5Cn%20%20%20%20%20%20padding-inline-end:%200;%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20&::-webkit-calendar-picker-indicator%20%7B%5Cn%20%20%20%20%20%20position:%20absolute;%5Cn%20%20%20%20%20%20left:%20var(--size-4-1);%5Cn%20%20%20%20%20%20right:%20auto;%5Cn%20%20%20%20%20%20opacity:%200.5;%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20&::-webkit-datetime-edit-month-field,%5Cn%20%20%20%20&::-webkit-datetime-edit-day-field,%5Cn%20%20%20%20&::-webkit-datetime-edit-year-field%20%7B%5Cn%20%20%20%20%20%20&:active,%5Cn%20%20%20%20%20%20&:focus%20%7B%5Cn%20%20%20%20%20%20%20%20background-color:%20var(--text-selection);%5Cn%20%20%20%20%20%20%20%20color:%20var(--text-normal);%5Cn%20%20%20%20%20%20%20%20cursor:%20text;%5Cn%20%20%20%20%20%20%7D%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20@at-root%20.mod-rtl%20&,%5Cn%20%20%20%20%20%20.is-rtl%20&,%5Cn%20%20%20%20%20%20.rtl%20&%20%7B%5Cn%20%20%20%20%20%20direction:%20rtl;%5Cn%5Cn%20%20%20%20%20%20&::-webkit-calendar-picker-indicator%20%7B%5Cn%20%20%20%20%20%20%20%20left:%20auto;%5Cn%20%20%20%20%20%20%20%20right:%20var(--size-4-1);%5Cn%20%20%20%20%20%20%7D%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20@at-root%20%7B%5Cn%20%20%20%20%20%20body:not(.is-ios):not(.is-android)%20&%20%7B%5Cn%20%20%20%20%20%20%20%20padding-inline-start:%20var(--size-4-6);%5Cn%20%20%20%20%20%20%7D%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%5Cn%20%20input%5Btype='time'%5D%20%7B%5Cn%20%20%20%20&::-webkit-calendar-picker-indicator%20%7B%5Cn%20%20%20%20%20%20margin-inline-start:%200;%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%7D%5Cn%22,%22.obsidian-lib%20%7B%5Cn%20%20&.list-component%20%7B%5Cn%20%20%20%20display:%20flex;%5Cn%20%20%20%20flex-direction:%20column;%5Cn%20%20%20%20gap:%20var(--size-4-1);%5Cn%20%20%20%20min-width:%2012em;%5Cn%5Cn%20%20%20%20.list-component-items%20%7B%5Cn%20%20%20%20%20%20display:%20flex;%5Cn%20%20%20%20%20%20flex-direction:%20column;%5Cn%20%20%20%20%20%20gap:%20var(--size-2-1);%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20.list-component-item,%5Cn%20%20%20%20.list-component-new-item%20%7B%5Cn%20%20%20%20%20%20align-items:%20center;%5Cn%20%20%20%20%20%20display:%20flex;%5Cn%20%20%20%20%20%20gap:%20var(--size-2-1);%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20.list-component-item-text%20%7B%5Cn%20%20%20%20%20%20flex-grow:%201;%5Cn%20%20%20%20%20%20overflow-wrap:%20anywhere;%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20.list-component-new-item%20input%20%7B%5Cn%20%20%20%20%20%20flex-grow:%201;%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20.list-component-empty%20%7B%5Cn%20%20%20%20%20%20color:%20var(--text-faint);%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%7D%5Cn%22,%22.obsidian-lib%20%7B%5Cn%20%20//%20Not%20%60&progress%60:%20that%20APPENDS%20the%20element%20name%20to%20the%20parent%20class,%20producing%20one%20long%20class%20that%20matches%5Cn%20%20//%20nothing.%20The%20element%20type%20has%20to%20lead%20the%20compound%20selector%20instead.%5Cn%20%20@at-root%20progress%23%7B&%7D.loop%20%7B%5Cn%20%20%20%20min-width:%20200px;%5Cn%20%20%7D%5Cn%7D%5Cn%22,%22@keyframes%20obsidian-lib-minimized-modal-bar-pulse%20%7B%5Cn%20%200%25,%5Cn%20%20100%25%20%7B%5Cn%20%20%20%20box-shadow:%20var(--shadow-s);%5Cn%20%20%7D%5Cn%5Cn%20%2050%25%20%7B%5Cn%20%20%20%20box-shadow:%200%200%200%202px%20var(--interactive-accent);%5Cn%20%20%7D%5Cn%7D%5Cn%5Cn@keyframes%20obsidian-lib-minimized-modal-bar-attention%20%7B%5Cn%20%200%25%20%7B%5Cn%20%20%20%20box-shadow:%200%200%200%200%20var(--interactive-accent);%5Cn%20%20%7D%5Cn%5Cn%20%2040%25%20%7B%5Cn%20%20%20%20box-shadow:%200%200%200%204px%20var(--interactive-accent);%5Cn%20%20%7D%5Cn%5Cn%20%20100%25%20%7B%5Cn%20%20%20%20box-shadow:%20var(--shadow-s);%5Cn%20%20%7D%5Cn%7D%5Cn%5Cn.obsidian-lib%20%7B%5Cn%20%20//%20The%20minimize%20button%20lives%20inside%20the%20modal%20container,%20left%20of%20Obsidian's%20close%20button.%5Cn%20%20&.minimizable-modal%20%7B%5Cn%20%20%20%20.minimize-button%20%7B%5Cn%20%20%20%20%20%20position:%20absolute;%5Cn%20%20%20%20%20%20top:%20var(--size-4-2);%5Cn%20%20%20%20%20%20right:%20calc(var(--size-4-2)%20+%20var(--size-4-9));%5Cn%20%20%20%20%20%20display:%20flex;%5Cn%20%20%20%20%20%20align-items:%20center;%5Cn%20%20%20%20%20%20justify-content:%20center;%5Cn%20%20%20%20%20%20padding:%20var(--size-2-2);%5Cn%20%20%20%20%20%20border:%20none;%5Cn%20%20%20%20%20%20border-radius:%20var(--radius-s);%5Cn%20%20%20%20%20%20background:%20transparent;%5Cn%20%20%20%20%20%20color:%20var(--icon-color);%5Cn%20%20%20%20%20%20cursor:%20pointer;%5Cn%20%20%20%20%20%20box-shadow:%20none;%5Cn%5Cn%20%20%20%20%20%20&:hover%20%7B%5Cn%20%20%20%20%20%20%20%20background:%20var(--background-modifier-hover);%5Cn%20%20%20%20%20%20%20%20color:%20var(--icon-color-hover);%5Cn%20%20%20%20%20%20%7D%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%5Cn%20%20//%20The%20minimized%20bar%20is%20appended%20to%20document.body.%20It%20floats%20at%20the%20bottom-right%20while%20minimized,%5Cn%20%20//%20and%20gently%20pulses%20an%20accent%20ring%20so%20the%20user%20does%20not%20forget%20about%20the%20minimized%20operation.%5Cn%20%20//%20It%20floats%20a%20status-bar's%20height%20above%20the%20bottom%20edge%20so%20it%20never%20covers%20the%20bottom-right%5Cn%20%20//%20status-bar%20items%20(e.g.%20the%20editor-lock%20unlock%20indicator,%20which%20lives%20in%20the%20same%20corner).%5Cn%20%20&.minimized-modal-bar%20%7B%5Cn%20%20%20%20position:%20fixed;%5Cn%20%20%20%20right:%20var(--size-4-4);%5Cn%20%20%20%20bottom:%20calc(var(--size-4-4)%20+%20var(--size-4-8));%5Cn%20%20%20%20z-index:%20var(--layer-modal);%5Cn%20%20%20%20display:%20flex;%5Cn%20%20%20%20align-items:%20center;%5Cn%20%20%20%20gap:%20var(--size-4-2);%5Cn%20%20%20%20padding:%20var(--size-4-2)%20var(--size-4-3);%5Cn%20%20%20%20border:%201px%20solid%20var(--background-modifier-border);%5Cn%20%20%20%20border-radius:%20var(--radius-m);%5Cn%20%20%20%20background:%20var(--background-secondary);%5Cn%20%20%20%20box-shadow:%20var(--shadow-s);%5Cn%20%20%20%20cursor:%20pointer;%5Cn%20%20%20%20animation:%20obsidian-lib-minimized-modal-bar-pulse%202s%20ease-in-out%20infinite;%5Cn%5Cn%20%20%20%20//%20Layer%20the%20translucent%20hover%20tint%20over%20the%20opaque%20%60background%60%20(%60--background-secondary%60)%20via%5Cn%20%20%20%20//%20%60background-image%60%20instead%20of%20replacing%20the%20background-color.%20%60--background-modifier-hover%60%20is%5Cn%20%20%20%20//%20translucent,%20so%20setting%20it%20as%20%60background%60%20would%20let%20the%20editor%20content%20behind%20the%20floating%20bar%5Cn%20%20%20%20//%20bleed%20through%20and%20make%20the%20title%20unreadable.%20A%20gradient%20of%20the%20tint%20composited%20over%20the%20opaque%5Cn%20%20%20%20//%20base%20keeps%20the%20bar%20opaque%20while%20preserving%20the%20subtle%20hover%20highlight.%5Cn%20%20%20%20&:hover%20%7B%5Cn%20%20%20%20%20%20background-image:%20linear-gradient(var(--background-modifier-hover),%20var(--background-modifier-hover));%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20//%20A%20one-shot,%20more%20pronounced%20flash%20played%20when%20the%20user%20attempts%20a%20blocked%20action%20(a%20keystroke,%5Cn%20%20%20%20//%20right-click,%20or%20opening%20another%20modal)%20while%20this%20modal%20is%20minimized,%20so%20the%20block%20is%20not%5Cn%20%20%20%20//%20silent.%20Its%20higher%20specificity%20overrides%20the%20gentle%20infinite%20idle%20pulse%20while%20it%20plays;%20the%5Cn%20%20%20%20//%20class%20is%20removed%20on%20%60animationend%60,%20restoring%20the%20idle%20pulse.%5Cn%20%20%20%20&.minimized-modal-bar-attention%20%7B%5Cn%20%20%20%20%20%20animation:%20obsidian-lib-minimized-modal-bar-attention%200.35s%20ease-out;%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20.minimized-modal-bar-title%20%7B%5Cn%20%20%20%20%20%20font-weight:%20var(--font-medium);%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20.restore-button,%5Cn%20%20%20%20.cancel-button%20%7B%5Cn%20%20%20%20%20%20display:%20flex;%5Cn%20%20%20%20%20%20align-items:%20center;%5Cn%20%20%20%20%20%20justify-content:%20center;%5Cn%20%20%20%20%20%20padding:%20var(--size-2-2);%5Cn%20%20%20%20%20%20border:%20none;%5Cn%20%20%20%20%20%20border-radius:%20var(--radius-s);%5Cn%20%20%20%20%20%20background:%20transparent;%5Cn%20%20%20%20%20%20color:%20var(--icon-color);%5Cn%20%20%20%20%20%20cursor:%20pointer;%5Cn%20%20%20%20%20%20box-shadow:%20none;%5Cn%5Cn%20%20%20%20%20%20&:hover%20%7B%5Cn%20%20%20%20%20%20%20%20background:%20var(--background-modifier-hover);%5Cn%20%20%20%20%20%20%20%20color:%20var(--icon-color-hover);%5Cn%20%20%20%20%20%20%7D%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%7D%5Cn%22,%22.obsidian-lib%20%7B%5Cn%20%20//%20The%20strip%20of%20commands%20along%20the%20bottom%20of%20a%20modal.%5Cn%20%20//%5Cn%20%20//%20In%20%60Instructions%60%20render%20mode%20it%20also%20carries%20Obsidian's%20own%20%60.prompt-instructions%60%20%E2%80%94%20whose%20rule%20is%5Cn%20%20//%20unscoped,%20so%20it%20applies%20to%20a%20plain%20%60Modal%60%20too%20%E2%80%94%20and%20this%20one%20only%20re-tunes%20that%20rule's%20%60gap%60%20and%5Cn%20%20//%20%60padding%60%20and%20adds%20the%20separator;%20in%20%60Buttons%60%20mode%20it%20is%20the%20whole%20strip.%5Cn%20%20&.modal-commands%20%7B%5Cn%20%20%20%20display:%20flex;%5Cn%20%20%20%20flex-wrap:%20wrap;%5Cn%20%20%20%20gap:%20var(--size-2-2);%5Cn%20%20%20%20padding:%20var(--size-4-2)%20var(--size-4-3);%5Cn%20%20%20%20border-top:%201px%20solid%20var(--background-modifier-border);%5Cn%20%20%7D%5Cn%5Cn%20%20//%20A%20control%20the%20%60Instructions%60%20renderer%20injects%20into%20an%20instruction's%20purpose%20text%20%E2%80%94%20a%20checkbox,%20a%5Cn%20%20//%20dropdown.%20Obsidian%20styles%20the%20instruction%20bar%20itself,%20but%20its%20own%20bar%20never%20contains%20a%20control,%20so%5Cn%20%20//%20nothing%20upstream%20separates%20one%20from%20the%20label%20it%20belongs%20to.%20Sits%20on%20the%20control%20rather%20than%20on%20the%5Cn%20%20//%20strip,%20so%20it%20reaches%20a%20%60SuggestModal%60's%20native%20bar%20as%20well%20as%20a%20self-created%20one.%5Cn%20%20&.modal-command-control%20%7B%5Cn%20%20%20%20margin-inline-start:%20var(--size-2-2);%5Cn%20%20%20%20vertical-align:%20middle;%5Cn%20%20%7D%5Cn%5Cn%20%20//%20One%20command%20button.%20Replaces%20the%20instruction%20bar%20rather%20than%20supplementing%20it:%20the%20bar%20can%20only%20ever%5Cn%20%20//%20say%20which%20key%20to%20press,%20and%20on%20a%20phone%20there%20is%20no%20modifier%20key%20to%20press,%20so%20every%20control%20it%20names%5Cn%20%20//%20is%20unreachable%20there.%5Cn%20%20&.modal-command%20%7B%5Cn%20%20%20%20display:%20inline-flex;%5Cn%20%20%20%20align-items:%20baseline;%5Cn%20%20%20%20gap:%20var(--size-2-2);%5Cn%5Cn%20%20%20%20//%20Comfortably%20tappable%20on%20a%20phone,%20where%20this%20strip%20is%20the%20only%20way%20in.%5Cn%20%20%20%20min-height:%20var(--size-4-8);%5Cn%20%20%20%20padding:%20var(--size-2-1)%20var(--size-4-2);%5Cn%20%20%20%20border:%201px%20solid%20var(--background-modifier-border);%5Cn%20%20%20%20border-radius:%20var(--radius-s);%5Cn%20%20%20%20background-color:%20var(--background-secondary);%5Cn%20%20%20%20color:%20var(--text-muted);%5Cn%20%20%20%20font-size:%20var(--font-ui-smaller);%5Cn%20%20%20%20white-space:%20nowrap;%5Cn%20%20%20%20cursor:%20pointer;%5Cn%5Cn%20%20%20%20//%20Touch%20can%20leave%20:hover%20latched%20until%20the%20next%20tap.%20Keep%20the%20ON%20fill%20in%20that%20state%20too.%5Cn%20%20%20%20&:hover:not(:disabled):not(.is-active)%20%7B%5Cn%20%20%20%20%20%20background-color:%20var(--background-modifier-hover);%5Cn%20%20%20%20%20%20color:%20var(--text-normal);%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20//%20A%20toggle%20that%20is%20ON.%20An%20action%20never%20carries%20it%20%E2%80%94%20it%20does%20something%20and%20is%20done,%20so%20there%20is%20no%5Cn%20%20%20%20//%20state%20for%20it%20to%20show.%5Cn%20%20%20%20&.is-active%20%7B%5Cn%20%20%20%20%20%20border-color:%20var(--interactive-accent);%5Cn%20%20%20%20%20%20background-color:%20var(--interactive-accent);%5Cn%20%20%20%20%20%20color:%20var(--text-on-accent);%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20//%20Disabled%20rather%20than%20removed:%20a%20strip%20that%20lost%20buttons%20as%20modes%20change%20would%20reflow%20under%20the%5Cn%20%20%20%20//%20pointer,%20which%20on%20a%20phone%20means%20a%20mis-tap.%5Cn%20%20%20%20&:disabled%20%7B%5Cn%20%20%20%20%20%20opacity:%200.5;%5Cn%20%20%20%20%20%20cursor:%20default;%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%5Cn%20%20&.modal-command-hotkey%20%7B%5Cn%20%20%20%20color:%20var(--text-faint);%5Cn%20%20%20%20font-size:%20var(--font-smallest);%5Cn%5Cn%20%20%20%20//%20Faint%20against%20the%20surface%20is%20right;%20faint%20against%20the%20accent%20fill%20is%20invisible.%5Cn%20%20%20%20.modal-command.is-active%20&%20%7B%5Cn%20%20%20%20%20%20opacity:%200.7;%5Cn%20%20%20%20%20%20color:%20var(--text-on-accent);%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%7D%5Cn%22,%22.obsidian-lib%20%7B%5Cn%20%20&.modal-container%20%7B%5Cn%20%20%20%20.ok-button%20%7B%5Cn%20%20%20%20%20%20margin-right:%2010px;%5Cn%20%20%20%20%20%20margin-top:%2020px;%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%7D%5Cn%22,%22.obsidian-lib%20%7B%5Cn%20%20//%20Compound,%20not%20nested:%20%60addPluginCssClasses%60%20puts%20%60obsidian-lib%60%20and%20%60multiple-dropdown-component%60%20on%20the%5Cn%20%20//%20SAME%20element%20(the%20setting's%20control%20container),%20so%20a%20descendant%20selector%20matched%20nothing%20and%20every%20multiple%5Cn%20%20//%20dropdown%20rendered%20one%20row%20tall%20%E2%80%94%20Obsidian's%20%60.dropdown%60%20height,%20with%20no%20popup%20behind%20it%20to%20pick%20from.%5Cn%20%20&.multiple-dropdown-component%20%7B%5Cn%20%20%20%20select,%5Cn%20%20%20%20select:focus,%5Cn%20%20%20%20.dropdown%20%7B%5Cn%20%20%20%20%20%20height:%20auto;%5Cn%20%20%20%20%20%20padding-top:%203px;%5Cn%5Cn%20%20%20%20%20%20option:checked%20%7B%5Cn%20%20%20%20%20%20%20%20background-color:%20var(--interactive-accent);%5Cn%20%20%20%20%20%20%20%20color:%20var(--text-on-accent);%5Cn%20%20%20%20%20%20%7D%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%7D%5Cn%22,%22.obsidian-lib%20%7B%5Cn%20%20&.plugin-notice-name%20%7B%5Cn%20%20%20%20color:%20var(--text-accent);%5Cn%20%20%20%20display:%20inline-block;%5Cn%20%20%20%20font-weight:%20var(--font-bold);%5Cn%20%20%20%20margin-bottom:%20var(--size-4-2);%5Cn%5Cn%20%20%20%20//%20The%20name%20is%20inline%20code;%20it%20keeps%20the%20code%20background%20and%20font%20but%20takes%20the%20prefix's%20accent%20color.%5Cn%20%20%20%20code%20%7B%5Cn%20%20%20%20%20%20color:%20inherit;%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%5Cn%20%20&.plugin-notice-content%20%7B%5Cn%20%20%20%20padding-right:%20var(--size-4-5);%5Cn%20%20%20%20position:%20relative;%5Cn%5Cn%20%20%20%20.obsidian-lib.cancel-button%20%7B%5Cn%20%20%20%20%20%20display:%20block;%5Cn%20%20%20%20%20%20margin-top:%20var(--size-4-2);%5Cn%20%20%20%20%20%20width:%20fit-content;%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20//%20The%20close%20button%20reuses%20Obsidian's%20%60modal-header-button%60%20+%20%60clickable-icon%60%20classes%20so%20it%20matches%5Cn%20%20%20%20//%20The%20native%20modal%20close%20button%20(box%20+%20hover);%20only%20its%20corner%20position%20is%20set%20here.%5Cn%20%20%20%20.obsidian-lib.plugin-notice-close-button%20%7B%5Cn%20%20%20%20%20%20position:%20absolute;%5Cn%20%20%20%20%20%20right:%20var(--size-4-3);%5Cn%20%20%20%20%20%20top:%20var(--size-4-3);%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%5Cn%20%20//%20Move%20the%20notice's%20own%20padding%20onto%20the%20content%20wrapper%20so%20the%20wrapper%20covers%20the%20whole%20clickable%5Cn%20%20//%20Area%20%E2%80%94%20otherwise%20a%20click%20landing%20on%20the%20notice's%20bare%20padding%20(outside%20the%20wrapper)%20would%20bypass%20the%5Cn%20%20//%20Stop-propagation%20guard%20and%20dismiss%20the%20hard-to-close%20notice.%5Cn%20%20&.plugin-notice-requires-explicit-close.notice%20%7B%5Cn%20%20%20%20padding:%200;%5Cn%5Cn%20%20%20%20.obsidian-lib.plugin-notice-content%20%7B%5Cn%20%20%20%20%20%20padding:%20var(--size-4-3)%20var(--size-4-4);%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%7D%5Cn%22,%22.obsidian-lib%20%7B%5Cn%20%20&.plugin-settings-tab%20%7B%5Cn%20%20%20%20a:focus%20%7B%5Cn%20%20%20%20%20%20outline:%202px%20solid%20var(--link-color);%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%7D%5Cn%22,%22.obsidian-lib%20%7B%5Cn%20%20&.plugin-suggestion-banner%20%7B%5Cn%20%20%20%20background-color:%20var(--background-secondary);%5Cn%20%20%20%20border-left:%20var(--size-2-1)%20solid%20var(--text-accent);%5Cn%20%20%20%20border-radius:%20var(--radius-s);%5Cn%20%20%20%20display:%20flex;%5Cn%20%20%20%20flex-direction:%20column;%5Cn%20%20%20%20gap:%20var(--size-4-2);%5Cn%20%20%20%20margin-bottom:%20var(--size-4-4);%5Cn%20%20%20%20padding:%20var(--size-4-3)%20var(--size-4-4);%5Cn%5Cn%20%20%20%20button%20%7B%5Cn%20%20%20%20%20%20width:%20fit-content;%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%5Cn%20%20//%20A%20notice%20lays%20its%20buttons%20out%20inline%20with%20no%20spacing,%20so%20the%20action%20button%20would%20touch%20the%20decline%20button.%5Cn%20%20&.plugin-suggestion-notice-buttons%20%7B%5Cn%20%20%20%20display:%20flex;%5Cn%20%20%20%20flex-wrap:%20wrap;%5Cn%20%20%20%20gap:%20var(--size-4-2);%5Cn%20%20%20%20margin-top:%20var(--size-4-2);%5Cn%20%20%7D%5Cn%7D%5Cn%22,%22//%20A%20popover%20is%20anchored%20at%20a%20point%20and%20appended%20to%20the%20document%20body,%20outside%20any%20plugin-scoped%5Cn//%20container,%20so%20it%20is%20positioned%20absolutely%20at%20the%20top%20level.%20It%20borrows%20Obsidian's%20%60.menu%60%20look,%5Cn//%20which%20already%20carries%20the%20popup%20background,%20border%20and%20shadow%20%E2%80%94%20only%20layout%20is%20set%20here.%5Cn.obsidian-lib%20%7B%5Cn%20%20&.popover%20%7B%5Cn%20%20%20%20//%20Deliberately%20not%20%60calc(100vw%20-%2016px)%60:%20the%20SCSS%20compiler%20strips%20the%20%60calc(%60%20wrapper%20inside%5Cn%20%20%20%20//%20%60min()%60,%20which%20yields%20invalid%20CSS.%20A%20viewport%20percentage%20keeps%20a%20narrow%20window's%20popover%20on%5Cn%20%20%20%20//%20screen.%5Cn%20%20%20%20max-width:%20min(420px,%2090vw);%5Cn%20%20%20%20min-width:%20320px;%5Cn%20%20%20%20padding:%20var(--size-4-2)%20var(--size-4-3);%5Cn%20%20%20%20position:%20absolute;%5Cn%20%20%20%20z-index:%20var(--layer-menu);%5Cn%5Cn%20%20%20%20//%20Setting%20rows%20are%20built%20for%20a%20full-width%20settings%20tab;%20compact%20them%20for%20a%20popover.%5Cn%20%20%20%20.setting-item%20%7B%5Cn%20%20%20%20%20%20align-items:%20center;%5Cn%20%20%20%20%20%20border-top:%20none;%5Cn%20%20%20%20%20%20gap:%20var(--size-4-2);%5Cn%20%20%20%20%20%20padding:%20var(--size-2-1)%200;%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20.setting-item-info%20%7B%5Cn%20%20%20%20%20%20margin-right:%200;%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20.setting-item-control%20%7B%5Cn%20%20%20%20%20%20flex-grow:%201;%5Cn%20%20%20%20%20%20justify-content:%20flex-end;%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20input%5Btype='text'%5D%20%7B%5Cn%20%20%20%20%20%20width:%20100%25;%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%7D%5Cn%22,%22.obsidian-lib%20%7B%5Cn%20%20&.prompt-modal%20%7B%5Cn%20%20%20%20.text-box%20%7B%5Cn%20%20%20%20%20%20width:%20100%25;%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%7D%5Cn%22,%22.obsidian-lib%20%7B%5Cn%20%20&.settings-tabs%20%7B%5Cn%20%20%20%20.settings-tabs-bar%20%7B%5Cn%20%20%20%20%20%20border-bottom:%20var(--border-width)%20solid%20var(--background-modifier-border);%5Cn%20%20%20%20%20%20display:%20flex;%5Cn%20%20%20%20%20%20flex-wrap:%20wrap;%5Cn%20%20%20%20%20%20gap:%20var(--size-2-1);%5Cn%20%20%20%20%20%20margin-bottom:%20var(--size-4-3);%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20.settings-tabs-button%20%7B%5Cn%20%20%20%20%20%20align-items:%20center;%5Cn%20%20%20%20%20%20background:%20none;%5Cn%20%20%20%20%20%20border-bottom:%202px%20solid%20transparent;%5Cn%20%20%20%20%20%20border-radius:%200;%5Cn%20%20%20%20%20%20box-shadow:%20none;%5Cn%20%20%20%20%20%20color:%20var(--text-muted);%5Cn%20%20%20%20%20%20display:%20flex;%5Cn%20%20%20%20%20%20gap:%20var(--size-2-2);%5Cn%5Cn%20%20%20%20%20%20&.is-active%20%7B%5Cn%20%20%20%20%20%20%20%20border-bottom-color:%20var(--interactive-accent);%5Cn%20%20%20%20%20%20%20%20color:%20var(--text-normal);%5Cn%20%20%20%20%20%20%7D%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20.settings-tabs-icon%20%7B%5Cn%20%20%20%20%20%20display:%20flex;%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%7D%5Cn%22,%22//%20The%20tldraw%20Obsidian%20plugin%20(tldraw/obsidian-plugin)%20ships%20an%20unscoped%20global%20rule%5Cn//%20%60button:not(.clickable-icon)%20%7B%20color:%20currentColor%20%7D%60%20that%20overrides%20Obsidian's%20own%5Cn//%20%60button:not(.clickable-icon)%20%7B%20color:%20var(--text-color)%20%7D%60%20app-wide.%20Obsidian%20sets%5Cn//%20%60--text-color%60%20contextually%20per%20button%20variant%20(%60--text-normal%60%20by%20default,%5Cn//%20%60--text-on-accent%60%20for%20%60.mod-cta%60,%20%60--text-error%60%20for%20%60.mod-warning%60),%20so%20tldraw's%5Cn//%20%60currentColor%60%20discards%20that%20and%20breaks%20button%20contrast%20outside%20tldraw%20%E2%80%94%20e.g.%5Cn//%20White-on-white%20action%20buttons%20inside%20a%20Notice.%20Re-assert%20Obsidian's%20own%20value%20inside%20the%5Cn//%20Library's%20own%20UI%20(specificity%200,2,1),%20which%20wins%20over%20tldraw's%20(0,1,1)%20while%20staying%20correct%5Cn//%20For%20every%20button%20variant%20(it%20reuses%20the%20same%20contextual%20%60--text-color%60).%5Cn//%20It%20MUST%20stay%20scoped%20to%20%60.obsidian-lib%60:%20an%20unscoped%20re-assert%20(it%20was%20%60body%20button%E2%80%A6%60,%5Cn//%200,1,2)%20lands%20on%20every%20button%20in%20the%20app%20and%20beats%20any%20other%20plugin's%20own%20button%20color%5Cn//%20Written%20at%200,1,1,%20which%20Obsidian's%20own%20rule%20used%20to%20lose%20to%20(obsidian-custom-attachment-location%2395).%5Cn//%20Defensive%20workaround%20%E2%80%94%20remove%20once%20the%20upstream%20fix%20ships%20(tldraw/obsidian-plugin%23210).%5Cn.obsidian-lib%20button:not(.clickable-icon)%20%7B%5Cn%20%20color:%20var(--text-color);%5Cn%7D%5Cn%22,%22.obsidian-lib%20%7B%5Cn%20%20&.tri-state-checkbox-component%20%7B%5Cn%20%20%20%20input%5Btype='checkbox'%5D:indeterminate%20%7B%5Cn%20%20%20%20%20%20appearance:%20checkbox;%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%7D%5Cn%22,%22@mixin%20invalid%20%7B%5Cn%20%20box-shadow:%200%200%200%202px%20var(--text-error);%5Cn%7D%5Cn%5Cn//%20An%20input%20the%20user%20has%20not%20interacted%20with%20yet%20carries%20%60.untouched%60%20(set%20by%20%60PromptModal%60),%20so%20a%20modal%20that%5Cn//%20opens%20invalid%20by%20design%20does%20not%20greet%20the%20user%20in%20red.%20Both%20blocks%20below%20must%20be%20gated:%20the%20input%20is%5Cn//%20focused%20on%20open,%20so%20the%20focus%20block%20alone%20would%20keep%20painting%20it.%5Cn.obsidian-lib%20%7B%5Cn%20%20:invalid:not(.untouched)%20%7B%5Cn%20%20%20%20@include%20invalid;%5Cn%20%20%7D%5Cn%5Cn%20%20input.metadata-input-text,%5Cn%20%20input%5Btype='date'%5D,%5Cn%20%20input%5Btype='datetime-local'%5D,%5Cn%20%20input%5Btype='email'%5D,%5Cn%20%20input%5Btype='number'%5D,%5Cn%20%20input%5Btype='password'%5D,%5Cn%20%20input%5Btype='search'%5D,%5Cn%20%20input%5Btype='text'%5D,%5Cn%20%20textarea%20%7B%5Cn%20%20%20%20&:active,%5Cn%20%20%20%20&:focus-visible,%5Cn%20%20%20%20&:focus%20%7B%5Cn%20%20%20%20%20%20&:invalid:not(.untouched)%20%7B%5Cn%20%20%20%20%20%20%20%20@include%20invalid;%5Cn%20%20%20%20%20%20%7D%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%5Cn%20%20&.setting-component-wrapper%20%7B%5Cn%20%20%20%20position:%20relative;%5Cn%20%20%20%20display:%20inline-flex;%5Cn%20%20%7D%5Cn%5Cn%20%20&.overlay-validator%20%7B%5Cn%20%20%20%20caret-color:%20transparent;%5Cn%20%20%20%20cursor:%20default;%5Cn%20%20%20%20position:%20absolute;%5Cn%20%20%20%20background-color:%20transparent;%5Cn%20%20%20%20border:%20none;%5Cn%20%20%20%20outline:%20none;%5Cn%20%20%20%20pointer-events:%20none;%5Cn%20%20%20%20z-index:%209999;%5Cn%20%20%20%20left:%200;%5Cn%20%20%20%20top:%200;%5Cn%20%20%20%20width:%20100%25;%5Cn%20%20%20%20height:%20100%25;%5Cn%20%20%7D%5Cn%5Cn%20%20&.tooltip.tooltip-validator%20%7B%5Cn%20%20%20%20position:%20absolute;%5Cn%20%20%20%20top:%20calc(100%25%20+%208px);%5Cn%20%20%20%20width:%20max-content;%5Cn%20%20%7D%5Cn%7D%5Cn%22%5D%7D */\n";
8
8
  export {
9
9
  LIBRARY_STYLES,
@@ -0,0 +1,28 @@
1
+ /// <reference path="./library-references.d.mts" />
2
+ /**
3
+ * @file
4
+ *
5
+ * Links to GitHub's new-discussion page.
6
+ */
7
+ /**
8
+ * Parameters for {@link getGitHubDiscussionUrl}.
9
+ */
10
+ export interface GetGitHubDiscussionUrlParams {
11
+ /**
12
+ * The category slug, such as `q-a` or `ideas`. The repository must have this category.
13
+ *
14
+ * @default `'q-a'`
15
+ */
16
+ readonly category?: string;
17
+ /**
18
+ * The repository, as `owner/name`.
19
+ */
20
+ readonly gitHubRepo: string;
21
+ }
22
+ /**
23
+ * Gets a new-discussion URL with a category selected. Callers must enable Discussions in the repository.
24
+ *
25
+ * @param params - The parameters.
26
+ * @returns The link.
27
+ */
28
+ export declare function getGitHubDiscussionUrl(params: GetGitHubDiscussionUrlParams): string;
@@ -0,0 +1,13 @@
1
+ /*
2
+ THIS IS A GENERATED/BUNDLED FILE BY ESBUILD
3
+ if you want to view the source, please visit the github repository of this plugin
4
+ */
5
+
6
+ function getGitHubDiscussionUrl(params) {
7
+ const searchParams = new URLSearchParams({ category: params.category ?? "q-a" });
8
+ return `https://github.com/${params.gitHubRepo}/discussions/new?${searchParams.toString()}`;
9
+ }
10
+ export {
11
+ getGitHubDiscussionUrl
12
+ };
13
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2dpdC1odWItZGlzY3Vzc2lvbi50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIExpbmtzIHRvIEdpdEh1YidzIG5ldy1kaXNjdXNzaW9uIHBhZ2UuXG4gKi9cblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgZ2V0R2l0SHViRGlzY3Vzc2lvblVybH0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR2V0R2l0SHViRGlzY3Vzc2lvblVybFBhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgY2F0ZWdvcnkgc2x1Zywgc3VjaCBhcyBgcS1hYCBvciBgaWRlYXNgLiBUaGUgcmVwb3NpdG9yeSBtdXN0IGhhdmUgdGhpcyBjYXRlZ29yeS5cbiAgICpcbiAgICogQGRlZmF1bHQgYCdxLWEnYFxuICAgKi9cbiAgcmVhZG9ubHkgY2F0ZWdvcnk/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgcmVwb3NpdG9yeSwgYXMgYG93bmVyL25hbWVgLlxuICAgKi9cbiAgcmVhZG9ubHkgZ2l0SHViUmVwbzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEdldHMgYSBuZXctZGlzY3Vzc2lvbiBVUkwgd2l0aCBhIGNhdGVnb3J5IHNlbGVjdGVkLiBDYWxsZXJzIG11c3QgZW5hYmxlIERpc2N1c3Npb25zIGluIHRoZSByZXBvc2l0b3J5LlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcGFyYW1ldGVycy5cbiAqIEByZXR1cm5zIFRoZSBsaW5rLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0R2l0SHViRGlzY3Vzc2lvblVybChwYXJhbXM6IEdldEdpdEh1YkRpc2N1c3Npb25VcmxQYXJhbXMpOiBzdHJpbmcge1xuICBjb25zdCBzZWFyY2hQYXJhbXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKHsgY2F0ZWdvcnk6IHBhcmFtcy5jYXRlZ29yeSA/PyAncS1hJyB9KTtcbiAgcmV0dXJuIGBodHRwczovL2dpdGh1Yi5jb20vJHtwYXJhbXMuZ2l0SHViUmVwb30vZGlzY3Vzc2lvbnMvbmV3PyR7c2VhcmNoUGFyYW1zLnRvU3RyaW5nKCl9YDtcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7O0FBNEJPLFNBQVMsdUJBQXVCLFFBQThDO0FBQ25GLFFBQU0sZUFBZSxJQUFJLGdCQUFnQixFQUFFLFVBQVUsT0FBTyxZQUFZLE1BQU0sQ0FBQztBQUMvRSxTQUFPLHNCQUFzQixPQUFPLFVBQVUsb0JBQW9CLGFBQWEsU0FBUyxDQUFDO0FBQzNGOyIsCiAgIm5hbWVzIjogW10KfQo=
@@ -0,0 +1,43 @@
1
+ /// <reference path="./library-references.d.mts" />
2
+ /**
3
+ * @file
4
+ *
5
+ * The renames a vault's git history records, the strongest evidence of where a missing link target went.
6
+ *
7
+ * Cross-platform: it only parses. Running `git` belongs to `desktop-git-runner.ts`, whose Node imports are
8
+ * deferred until a command runs. Call that runner only behind `Platform.isDesktopApp`.
9
+ */
10
+ import type { GitRename } from './broken-link-candidates.mjs';
11
+ /**
12
+ * Runs `git` with the given arguments in the vault's folder.
13
+ *
14
+ * @param arguments_ - The arguments.
15
+ * @returns The command's standard output.
16
+ */
17
+ export type GitRunner = (arguments_: readonly string[]) => Promise<string>;
18
+ /**
19
+ * The parameters for {@link loadGitRenames}.
20
+ */
21
+ export interface LoadGitRenamesParams {
22
+ /**
23
+ * Runs `git` in the vault's folder.
24
+ */
25
+ readonly runGit: GitRunner;
26
+ }
27
+ /**
28
+ * Reads every rename in the git history of the repository the vault lives in.
29
+ *
30
+ * @param params - The parameters.
31
+ * @returns Each old vault path to the path it ended up at; empty when the vault is not in a git repository or
32
+ * `git` cannot run, because missing evidence is not an error.
33
+ */
34
+ export declare function loadGitRenames(params: LoadGitRenamesParams): Promise<Map<string, GitRename>>;
35
+ /**
36
+ * Parses the output of `git log -z --diff-filter=R -M --name-status --format=%h`.
37
+ *
38
+ * @param log - The output, newest commit first.
39
+ * @param vaultPrefix - The vault's folder within the repository, as `git rev-parse --show-prefix` prints it:
40
+ * `''` or a path ending in `/`. Renames outside it are dropped, and it is stripped from the rest.
41
+ * @returns Each old vault path to the path it ended up at, following a chain of renames to its end.
42
+ */
43
+ export declare function parseGitRenameLog(log: string, vaultPrefix: string): Map<string, GitRename>;